diff options
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 |
commit | 85b4bcd98cdcc427dd5685ffc729282ce6aeccaf (patch) | |
tree | 1946e2c101e34f74a1e40599895241d6e99dd8b1 | |
parent | b663c4bc50bb782f32f4ca6a4667f71347d3daae (diff) |
basf7100: Initial floppy hookup, tries booting now
-rw-r--r-- | src/mame/drivers/basf7100.cpp | 107 |
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 ) |