summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Dirk Best <mail@dirk-best.de>2021-04-08 13:14:01 +0200
committer Dirk Best <mail@dirk-best.de>2021-04-08 13:14:46 +0200
commit85b4bcd98cdcc427dd5685ffc729282ce6aeccaf (patch)
tree1946e2c101e34f74a1e40599895241d6e99dd8b1
parentb663c4bc50bb782f32f4ca6a4667f71347d3daae (diff)
basf7100: Initial floppy hookup, tries booting now
-rw-r--r--src/mame/drivers/basf7100.cpp107
1 files changed, 99 insertions, 8 deletions
diff --git a/src/mame/drivers/basf7100.cpp b/src/mame/drivers/basf7100.cpp
index 3911e42622d..1bd30e30886 100644
--- a/src/mame/drivers/basf7100.cpp
+++ b/src/mame/drivers/basf7100.cpp
@@ -39,7 +39,7 @@
- 30293E-054 20-04592-054 (?)
TODO:
- - Everything
+ - The floppy is partially hooked up, everything else needs to be done
Notes:
- Runs the BOS operating system, possibly also CP/M?
@@ -48,6 +48,8 @@
#include "emu.h"
#include "cpu/z80/z80.h"
+#include "machine/wd_fdc.h"
+#include "imagedev/floppy.h"
namespace {
@@ -63,7 +65,9 @@ public:
basf7100_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
- m_fdccpu(*this, "fdccpu")
+ m_fdccpu(*this, "fdccpu"),
+ m_fdc(*this, "fdc"),
+ m_floppy(*this, "fdc:%u", 0)
{ }
void basf7100(machine_config &config);
@@ -75,12 +79,22 @@ protected:
private:
required_device<z80_device> m_maincpu;
required_device<z80_device> m_fdccpu;
+ required_device<fd1791_device> m_fdc;
+ required_device_array<floppy_connector, 3> m_floppy;
void mem_map(address_map &map);
void io_map(address_map &map);
void fdc_mem_map(address_map &map);
void fdc_io_map(address_map &map);
+
+ uint8_t mmio_r(offs_t offset);
+ void mmio_w(offs_t offset, uint8_t data);
+
+ IRQ_CALLBACK_MEMBER(fdccpu_irq_callback);
+
+ uint8_t fdc_ctrl_r();
+ void fdc_ctrl_w(uint8_t data);
};
@@ -90,19 +104,41 @@ private:
void basf7100_state::mem_map(address_map &map)
{
+ map(0xff00, 0xffff).rw(FUNC(basf7100_state::mmio_r), FUNC(basf7100_state::mmio_w));
}
void basf7100_state::io_map(address_map &map)
{
+ map.global_mask(0xff);
+// map(0x00, 0x03) 8255 (keyboard)
+// map(0x04, 0x07) 8255 (printer)
+// map(0x08, 0x09).mirror(0x02) 8259
+// map(0x0c, 0x0f) 8255
+// map(0x10, 0x11) 8251 (primary)
+// map(0x12, 0x12) baud rate
+// map(0x14, 0x15) 8251 (secondary)
+// map(0x16, 0x16) baud rate
+// map(0x17, 0x17) rs232 flags/control
+// map(0x18, 0x18) interrupt flags
+// map(0x1c, 0x1f) switches
+// map(0xb0, 0xb3) display hardware clear
+// map(0xb8, 0xbb) 8255 (cursor)
+// map(0xbc, 0xbf) 8255 (sod)
+ map(0xc0, 0xc3).rw(m_fdc, FUNC(fd1791_device::read), FUNC(fd1791_device::write));
+ map(0xc4, 0xc4).rw(FUNC(basf7100_state::fdc_ctrl_r), FUNC(basf7100_state::fdc_ctrl_w));
}
void basf7100_state::fdc_mem_map(address_map &map)
{
+ map(0xd000, 0xefff).ram();
map(0xfc00, 0xffff).rom().region("fdccpu", 0);
+ map(0xff00, 0xffff).rw(FUNC(basf7100_state::mmio_r), FUNC(basf7100_state::mmio_w));
}
void basf7100_state::fdc_io_map(address_map &map)
{
+ map.global_mask(0xff);
+ map(0x00, 0xff).rw(FUNC(basf7100_state::mmio_r), FUNC(basf7100_state::mmio_w));
}
@@ -123,6 +159,44 @@ INPUT_PORTS_END
// MACHINE EMULATION
//**************************************************************************
+uint8_t basf7100_state::fdc_ctrl_r()
+{
+ // 7------- unknown, checked after seek cmd
+ // -6543210 unknown
+
+ return 0x80;
+}
+
+void basf7100_state::fdc_ctrl_w(uint8_t data)
+{
+ // 7654---- unknown
+ // ----3--- select drive 0 or motor on?
+ // -----210 unknown
+
+ logerror("fdc_ctrl_w: %04x\n", data);
+
+ floppy_image_device *floppy = nullptr;
+
+ // hardcoded to drive 0 for now
+ floppy = m_floppy[0]->get_device();
+ m_fdc->set_floppy(floppy);
+}
+
+uint8_t basf7100_state::mmio_r(offs_t offset)
+{
+ return m_maincpu->space(AS_IO).read_byte(offset);
+}
+
+void basf7100_state::mmio_w(offs_t offset, uint8_t data)
+{
+ m_maincpu->space(AS_IO).write_byte(offset, data);
+}
+
+IRQ_CALLBACK_MEMBER( basf7100_state::fdccpu_irq_callback )
+{
+ return 0x60;
+}
+
void basf7100_state::machine_start()
{
}
@@ -138,6 +212,11 @@ void basf7100_state::machine_reset()
// MACHINE DEFINTIONS
//**************************************************************************
+static void basf7100_floppies(device_slot_interface &device)
+{
+ device.option_add("basf6106", FLOPPY_525_SSSD);
+}
+
void basf7100_state::basf7100(machine_config &config)
{
Z80(config, m_maincpu, 4000000);
@@ -147,6 +226,14 @@ void basf7100_state::basf7100(machine_config &config)
Z80(config, m_fdccpu, 4000000);
m_fdccpu->set_addrmap(AS_PROGRAM, &basf7100_state::fdc_mem_map);
m_fdccpu->set_addrmap(AS_IO, &basf7100_state::fdc_io_map);
+ m_fdccpu->set_irq_acknowledge_callback(FUNC(basf7100_state::fdccpu_irq_callback));
+
+ // floppy
+ FD1791(config, m_fdc, 2000000); // unknown clock
+ m_fdc->intrq_wr_callback().set_inputline(m_fdccpu, INPUT_LINE_IRQ0);
+ FLOPPY_CONNECTOR(config, "fdc:0", basf7100_floppies, "basf6106", floppy_image_device::default_mfm_floppy_formats);
+ FLOPPY_CONNECTOR(config, "fdc:1", basf7100_floppies, "basf6106", floppy_image_device::default_mfm_floppy_formats);
+ FLOPPY_CONNECTOR(config, "fdc:2", basf7100_floppies, "basf6106", floppy_image_device::default_mfm_floppy_formats);
}
@@ -161,11 +248,15 @@ ROM_START( basf7120 )
ROM_REGION(0x400, "keyboard", 0)
ROM_LOAD("19-2114-01e.bin", 0x000, 0x400, CRC(d694b5dd) SHA1(6262379ba565c1de072b2b21dc3141db1ec5129c))
- ROM_REGION(0x170, "pals", 0)
- ROM_LOAD("cpu_board_im561cje_192113-2.u21", 0x000, 0x020, CRC(4405e26f) SHA1(0f93c47e9f546b42a85e5eced58337e0add443c4))
- ROM_LOAD("floppy_board_pal10l8mj_19-2131-1.u23", 0x000, 0x028, CRC(f37ed4bc) SHA1(824b4405f396c262cf8116f85eb0b548eabb4c04))
- ROM_LOAD("floppy_board_pal10l8mj_19-2132-1.u24", 0x000, 0x028, CRC(b918ff18) SHA1(c6d7cd9642ed32e56b5c1df1ddf3afe09d744ebc))
- ROM_LOAD("video_board_30_82s129n.bin", 0x000, 0x100, CRC(89175ac9) SHA1(69b2055bee87e11cc74c70cef2f2bebcbd0004c9))
+ ROM_REGION(0x20, "cpu_pal", 0)
+ ROM_LOAD("cpu_board_im561cje_192113-2.u21", 0x00, 0x20, CRC(4405e26f) SHA1(0f93c47e9f546b42a85e5eced58337e0add443c4))
+
+ ROM_REGION(0x50, "floppy_pal", 0)
+ ROM_LOAD("floppy_board_pal10l8mj_19-2131-1.u23", 0x00, 0x28, CRC(f37ed4bc) SHA1(824b4405f396c262cf8116f85eb0b548eabb4c04))
+ ROM_LOAD("floppy_board_pal10l8mj_19-2132-1.u24", 0x28, 0x28, CRC(b918ff18) SHA1(c6d7cd9642ed32e56b5c1df1ddf3afe09d744ebc))
+
+ ROM_REGION(0x100, "video_pal", 0)
+ ROM_LOAD("video_board_30_82s129n.bin", 0x000, 0x100, CRC(89175ac9) SHA1(69b2055bee87e11cc74c70cef2f2bebcbd0004c9))
ROM_END
@@ -177,4 +268,4 @@ ROM_END
//**************************************************************************
// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
-COMP( 1982, basf7120, 0, 0, basf7100, basf7100, basf7100_state, empty_init, "BASF", "7120", MACHINE_IS_SKELETON )
+COMP( 1982, basf7120, 0, 0, basf7100, basf7100, basf7100_state, empty_init, "BASF", "7120", MACHINE_NOT_WORKING | MACHINE_NO_SOUND )