diff options
Diffstat (limited to 'src/mame/sega/magistr16.cpp')
| -rw-r--r-- | src/mame/sega/magistr16.cpp | 31 |
1 files changed, 18 insertions, 13 deletions
diff --git a/src/mame/sega/magistr16.cpp b/src/mame/sega/magistr16.cpp index 2ec30528190..d5e53ab5117 100644 --- a/src/mame/sega/magistr16.cpp +++ b/src/mame/sega/magistr16.cpp @@ -8,9 +8,15 @@ a.k.a. Super Kombat KO16 MegaDrive SECAM clone with ISA bus glued together thru expansion bus +Notes: +- error #100A: generic Magistr16 HW error (what would return when run on stock MD) +- error #1004: flash type error PC=fc07da +- error #1008: GPIO/EEPROM error? Pings a Super I/O device at $100 + TODO: - accomodate YM7101 to use PAL semantics and V30 modes -- Fix error #1004 (at PC=FC07DA), should be wrong type for flash device; +- Fix current #1008 error +- Alias for flash type device ID 0x46 (at PC=fc0794/PC=fc07b2) **************************************************************************************************/ @@ -81,7 +87,7 @@ private: required_device_array<sms_control_port_device, 3> m_md_ctrl_ports; required_device_array<megadrive_io_port_device, 3> m_md_ioports; required_device<isa16_device> m_isabus; - required_device<fujitsu_29f016a_device> m_flash; + required_device<winbond_w29c020c_device> m_flash; std::unique_ptr<u8[]> m_sound_program; @@ -100,7 +106,7 @@ void magistr16_state::md_68k_map(address_map &map) map.unmap_value_high(); // assume it can't access expansion bus area map(0x000000, 0x3fffff).rw(m_md_cart, FUNC(megadrive_cart_slot_device::base_r), FUNC(megadrive_cart_slot_device::base_w)); - map(0x400000, 0x5fffff).rw(m_flash, FUNC(fujitsu_29f016a_device::read), FUNC(fujitsu_29f016a_device::write)); + map(0x400000, 0x43ffff).rw(m_flash, FUNC(winbond_w29c020c_device::read), FUNC(winbond_w29c020c_device::write)); map(0x7e0000, 0x7e07ff).rw(m_isabus, FUNC(isa16_device::io_r), FUNC(isa16_device::io_w)).umask16(0x00ff); @@ -166,7 +172,7 @@ void magistr16_state::md_68k_map(address_map &map) // map(0xa14000, 0xa14003) TMSS lock // map(0xa15100, 0xa153ff) 32X registers if present, <unmapped> otherwise // map(0xc00000, 0xdfffff) VDP and PSG (with mirrors and holes) -// $d00000 alias required by earthdef +// $d00000 alias required by earthdef map(0xc00000, 0xc0001f).mirror(0x100000).m(m_md_vdp, FUNC(ym7101_device::if16_map)); map(0xe00000, 0xe3ffff).mirror(0x1c0000).ram(); // more work RAM compared to stock MD } @@ -316,12 +322,12 @@ static void isa_internal_devices(device_slot_interface &device) void magistr16_state::winbond_superio_config(device_t *device) { // TODO: Winbond w83977f -// w83977tf_device &fdc = *downcast<w83977tf_device *>(device); +// w83977tf_device &fdc = *downcast<w83977tf_device *>(device); // fdc.set_sysopt_pin(1); -// fdc.gp20_reset().set_inputline(":maincpu", INPUT_LINE_RESET); -// fdc.gp25_gatea20().set_inputline(":maincpu", INPUT_LINE_A20); -// fdc.irq1().set(":pci:07.0", FUNC(i82371eb_isa_device::pc_irq1_w)); -// fdc.irq8().set(":pci:07.0", FUNC(i82371eb_isa_device::pc_irq8n_w)); +// fdc.gp20_reset().set_inputline(":maincpu", INPUT_LINE_RESET); +// fdc.gp25_gatea20().set_inputline(":maincpu", INPUT_LINE_A20); +// fdc.irq1().set(":pci:07.0", FUNC(i82371eb_isa_device::pc_irq1_w)); +// fdc.irq8().set(":pci:07.0", FUNC(i82371eb_isa_device::pc_irq8n_w)); // fdc.txd1().set(":serport0", FUNC(rs232_port_device::write_txd)); // fdc.ndtr1().set(":serport0", FUNC(rs232_port_device::write_dtr)); // fdc.nrts1().set(":serport0", FUNC(rs232_port_device::write_rts)); @@ -401,11 +407,11 @@ void magistr16_state::magistr16(machine_config &config) m_opn->add_route(0, "md_speaker", 0.50, 0); m_opn->add_route(1, "md_speaker", 0.50, 1); + // TODO: either split specific magistr16 carts or make it a filter option SOFTWARE_LIST(config, "cart_list").set_original("megadriv").set_filter("PAL"); // expansion bus overlays - // TODO: Winbond W29C020C really - FUJITSU_29F016A(config, "flash"); + WINBOND_W29C020C(config, "flash"); // FIXME: determine ISA bus clock ISA16(config, m_isabus, 0); @@ -415,13 +421,12 @@ void magistr16_state::magistr16(machine_config &config) ROM_START( magistr16 ) - ROM_REGION( 0x200000, "flash", ROMREGION_ERASEFF ) + ROM_REGION( 0x40000, "flash", ROMREGION_ERASEFF ) // both looks incomplete, to be checked if any vital data is missing here. ROM_SYSTEM_BIOS(0, "212a", "2.12a") ROMX_LOAD( "bios-dump_2.12a-core.bin", 0x00000, 0x4800, BAD_DUMP CRC(ed7b2d61) SHA1(89aa09023262e5daae7f62c2c46b0a6b2228113f), ROM_BIOS(0)) ROM_SYSTEM_BIOS(1, "209i", "2.09i") ROMX_LOAD( "bios-dump_2.09i-core.bin", 0x00000, 0x4c00, BAD_DUMP CRC(c63d54b4) SHA1(8dad327fd5464341c55a9c12225b46c440c46507), ROM_BIOS(1)) - ROM_END } // anonymous namespace |
