diff options
Diffstat (limited to 'src/mame/misc/odyssey.cpp')
-rw-r--r-- | src/mame/misc/odyssey.cpp | 96 |
1 files changed, 52 insertions, 44 deletions
diff --git a/src/mame/misc/odyssey.cpp b/src/mame/misc/odyssey.cpp index 6f6de1c51d7..985da416f6c 100644 --- a/src/mame/misc/odyssey.cpp +++ b/src/mame/misc/odyssey.cpp @@ -1,6 +1,6 @@ // license:BSD-3-Clause // copyright-holders:Roberto Fresca -/***************************************************************** +/****************************************************************************** Odyssey. Silicon Gaming. @@ -8,7 +8,14 @@ Preliminary driver by Roberto Fresca. -****************************************************************** + TODO: + - bp f7ae6,1,{eip+=0xf;g} fails ISA state $0f; + - Hangs after playing with SCSI regs, needs dump to proceed; + - Accesses S3 video in New MMIO mode, core fumbles on video mode setup + (prepares linear for 32bpp, core sets SVGA 8bpp instead) + - Hangs after playing with LPT1 & IDE checks; + +******************************************************************************* Hardware Notes -------------- @@ -63,7 +70,7 @@ chassis is manufactured by Neotec. -******************************************************************/ +******************************************************************************/ #include "emu.h" @@ -73,12 +80,12 @@ #include "machine/i82371sb.h" #include "machine/i82439hx.h" #include "bus/isa/isa_cards.h" -#include "bus/pci/virge_pci.h" +#include "bus/pci/vision.h" //#include "bus/rs232/hlemouse.h" //#include "bus/rs232/null_modem.h" -//#include "bus/rs232/rs232.h" +#include "bus/rs232/rs232.h" //#include "bus/rs232/sun_kbd.h" -//#include "bus/rs232/terminal.h" +#include "bus/rs232/terminal.h" #include "machine/pc87306.h" @@ -97,8 +104,8 @@ public: private: required_device<pentium_device> m_maincpu; - void odyssey_map(address_map &map); - void odyssey_io(address_map &map); + void odyssey_map(address_map &map) ATTR_COLD; + void odyssey_io(address_map &map) ATTR_COLD; static void national_superio_config(device_t *device); }; @@ -131,17 +138,14 @@ void odyssey_state::national_superio_config(device_t *device) fdc.gp25_gatea20().set_inputline(":maincpu", INPUT_LINE_A20); fdc.irq1().set(":pci:07.0", FUNC(i82371sb_isa_device::pc_irq1_w)); fdc.irq8().set(":pci:07.0", FUNC(i82371sb_isa_device::pc_irq8n_w)); -#if 0 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)); fdc.txd2().set(":serport1", FUNC(rs232_port_device::write_txd)); fdc.ndtr2().set(":serport1", FUNC(rs232_port_device::write_dtr)); fdc.nrts2().set(":serport1", FUNC(rs232_port_device::write_rts)); -#endif } -#if 0 static void isa_com(device_slot_interface &device) { // device.option_add("microsoft_mouse", MSFT_HLE_SERIAL_MOUSE); @@ -149,18 +153,17 @@ static void isa_com(device_slot_interface &device) // device.option_add("wheel_mouse", WHEEL_HLE_SERIAL_MOUSE); // device.option_add("msystems_mouse", MSYSTEMS_HLE_SERIAL_MOUSE); // device.option_add("rotatable_mouse", ROTATABLE_HLE_SERIAL_MOUSE); -// device.option_add("terminal", SERIAL_TERMINAL); + device.option_add("terminal", SERIAL_TERMINAL); // device.option_add("null_modem", NULL_MODEM); // device.option_add("sun_kbd", SUN_KBD_ADAPTOR); } -#endif // This emulates a Tucson / Triton-II chipset, earlier i430fx TBD -// PCI config space is trusted by Intel TC430HX "Technical Product Specification" +// PCI config space is trusted by Intel TC430HX "Technical Product Specification" page 39 void odyssey_state::odyssey(machine_config &config) { // a Celeron at 1.70 GHz on the MB I checked. <- doesn't match being a Triton/Triton-II ... -AS - // It also fails refresh check if it's 133 MHz + // It also fails refresh check if it's barely above 66 MHz (ISA state $08) PENTIUM(config, m_maincpu, 66'000'000); m_maincpu->set_addrmap(AS_PROGRAM, &odyssey_state::odyssey_map); m_maincpu->set_addrmap(AS_IO, &odyssey_state::odyssey_io); @@ -171,6 +174,7 @@ void odyssey_state::odyssey(machine_config &config) I82439HX(config, "pci:00.0", 0, m_maincpu, 64*1024*1024); // TODO: 82371FB + // accesses both mbirq regs, regular PIIX rather than PIIX3? i82371sb_isa_device &isa(I82371SB_ISA(config, "pci:07.0", 0, "maincpu")); isa.boot_state_hook().set([](u8 data) { /* printf("%02x\n", data); */ }); isa.smi().set_inputline("maincpu", INPUT_LINE_SMI); @@ -181,14 +185,20 @@ void odyssey_state::odyssey(machine_config &config) // TODO: 82371FB USB at 07.2 - // On-board Virge or Virge/DX - // TODO: actually a S3 Vision 968 - PCI_SLOT(config, "pci:1", pci_cards, 8, 0, 1, 2, 3, "virge"); + // On-board S3 Vision 968 + VISION968_PCI(config, "pci:08.0", 0); // pci:0d.0 (J4E1) PCI expansion slot 1 + //PCI_SLOT(config, "pci:1", pci_cards, 13, 0, 1, 2, 3, nullptr); + // pci:0e.0 (J4D2) PCI expansion slot 2 + //PCI_SLOT(config, "pci:2", pci_cards, 14, 0, 1, 2, 3, nullptr); + // pci:0f.0 (J4D1) PCI expansion slot 3 + //PCI_SLOT(config, "pci:3", pci_cards, 15, 0, 1, 2, 3, nullptr); + // pci:10.0 (J4C1) PCI expansion slot 4 + PCI_SLOT(config, "pci:4", pci_cards, 16, 0, 1, 2, 3, "ncr53c825"); ISA16_SLOT(config, "board4", 0, "pci:07.0:isabus", isa_internal_devices, "pc87306", true).set_option_machine_config("pc87306", national_superio_config); ISA16_SLOT(config, "isa1", 0, "pci:07.0:isabus", pc_isa16_cards, nullptr, false); @@ -197,21 +207,19 @@ void odyssey_state::odyssey(machine_config &config) ISA16_SLOT(config, "isa4", 0, "pci:07.0:isabus", pc_isa16_cards, nullptr, false); ISA16_SLOT(config, "isa5", 0, "pci:07.0:isabus", pc_isa16_cards, nullptr, false); -#if 0 - rs232_port_device& serport0(RS232_PORT(config, "serport0", isa_com, nullptr)); // "microsoft_mouse")); - serport0.rxd_handler().set("board4:fdc37c93x", FUNC(fdc37c93x_device::rxd1_w)); - serport0.dcd_handler().set("board4:fdc37c93x", FUNC(fdc37c93x_device::ndcd1_w)); - serport0.dsr_handler().set("board4:fdc37c93x", FUNC(fdc37c93x_device::ndsr1_w)); - serport0.ri_handler().set("board4:fdc37c93x", FUNC(fdc37c93x_device::nri1_w)); - serport0.cts_handler().set("board4:fdc37c93x", FUNC(fdc37c93x_device::ncts1_w)); + rs232_port_device& serport0(RS232_PORT(config, "serport0", isa_com, nullptr)); + serport0.rxd_handler().set("board4:pc87306", FUNC(pc87306_device::rxd1_w)); + serport0.dcd_handler().set("board4:pc87306", FUNC(pc87306_device::ndcd1_w)); + serport0.dsr_handler().set("board4:pc87306", FUNC(pc87306_device::ndsr1_w)); + serport0.ri_handler().set("board4:pc87306", FUNC(pc87306_device::nri1_w)); + serport0.cts_handler().set("board4:pc87306", FUNC(pc87306_device::ncts1_w)); rs232_port_device &serport1(RS232_PORT(config, "serport1", isa_com, nullptr)); - serport1.rxd_handler().set("board4:fdc37c93x", FUNC(fdc37c93x_device::rxd2_w)); - serport1.dcd_handler().set("board4:fdc37c93x", FUNC(fdc37c93x_device::ndcd2_w)); - serport1.dsr_handler().set("board4:fdc37c93x", FUNC(fdc37c93x_device::ndsr2_w)); - serport1.ri_handler().set("board4:fdc37c93x", FUNC(fdc37c93x_device::nri2_w)); - serport1.cts_handler().set("board4:fdc37c93x", FUNC(fdc37c93x_device::ncts2_w)); -#endif + serport1.rxd_handler().set("board4:pc87306", FUNC(pc87306_device::rxd2_w)); + serport1.dcd_handler().set("board4:pc87306", FUNC(pc87306_device::ndcd2_w)); + serport1.dsr_handler().set("board4:pc87306", FUNC(pc87306_device::ndsr2_w)); + serport1.ri_handler().set("board4:pc87306", FUNC(pc87306_device::nri2_w)); + serport1.cts_handler().set("board4:pc87306", FUNC(pc87306_device::ncts2_w)); } @@ -242,26 +250,26 @@ ROM_START( odyssey ) ROM_REGION32_LE( 0x100000, "pmb", ROMREGION_ERASE00 ) // Peripheral Memory Board (II) ROMS ROM_LOAD( "sgi_u13_165_0017_0_rev_a_l97_1352.bin", 0x00000, 0x80000, CRC(31ca868c) SHA1(d1db4ef12add336e25374fcf5d3238b8fbca05dd) ) // U13 - 165-0017 BIOS (27C040/27C4001 EPROM) + // boot image? Contains valid x86 code at $f50, login info to a network at $000 ROM_LOAD( "sgi_u5_165_0030_0_at28c010.bin", 0x80000, 0x20000, CRC(75a80169) SHA1(a8ece0f82a49f721fb178dbe25fc859bd65ce44f) ) // U5 - 165-0030 CONFIG (Atmel 28C010-12PC EEPROM) - ROM_REGION32_LE( 0x80000, "pci:07.0", 0 ) - ROM_COPY( "pmb", 0x00000, 0x00000, 0x80000 ) - - ROM_REGION( 0x300000, "other", 0 ) // remaining BIOS + ROM_REGION( 0x380000, "other", 0 ) // remaining BIOS // doesn't seem to have valid x86 boot vectors, may be reused later. ROM_LOAD( "sgi_bios_76.bin", 0x000000, 0x80000, CRC(00592222) SHA1(29281d25aaf2051e0794dece8be146bb63d5c488) ) ROM_LOAD( "sgi_bios_65.bin", 0x080000, 0x80000, CRC(af970c2a) SHA1(0fb49bca34dbd0725b5abb9c876bb849be31b3ed) ) - ROM_LOAD( "sgi_bios_55.bin", 0x100000, 0x80000, CRC(0138ef08) SHA1(fad1c0edf37042fffcb5a4006fd69ac59b55ab33) ) - ROM_LOAD( "sgi_bios_46.bin", 0x180000, 0x80000, CRC(37090b87) SHA1(431c0a1954d5bf7fd4fa6f2b983010fbf3c8ce13) ) - ROM_LOAD( "sgi_bios_31.bin", 0x200000, 0x80000, CRC(0954278b) SHA1(dc04a0604159ddd3d24bdd292b2947cc443054f8) ) - ROM_LOAD( "sgi_bios_00.bin", 0x280000, 0x80000, CRC(41480fb5) SHA1(073596d3ba40ae67e3be3f410d7b29c77988df47) ) + ROM_LOAD( "sgi_bios_62.bin", 0x100000, 0x80000, CRC(e76b0ec1) SHA1(e537a8592759e34c6c039f2d4cb77c9b58459841) ) + ROM_LOAD( "sgi_bios_55.bin", 0x180000, 0x80000, CRC(0138ef08) SHA1(fad1c0edf37042fffcb5a4006fd69ac59b55ab33) ) + ROM_LOAD( "sgi_bios_46.bin", 0x200000, 0x80000, CRC(37090b87) SHA1(431c0a1954d5bf7fd4fa6f2b983010fbf3c8ce13) ) + ROM_LOAD( "sgi_bios_31.bin", 0x280000, 0x80000, CRC(0954278b) SHA1(dc04a0604159ddd3d24bdd292b2947cc443054f8) ) + ROM_LOAD( "sgi_bios_00.bin", 0x300000, 0x80000, CRC(41480fb5) SHA1(073596d3ba40ae67e3be3f410d7b29c77988df47) ) + + ROM_REGION32_LE( 0x100000, "pci:07.0", 0 ) + ROM_COPY( "other", 0x00000, 0x00000, 0x80000 ) + ROM_COPY( "pmb", 0x00000, 0x80000, 0x80000 ) ROM_REGION( 0x10000, "vbios", 0 ) // video card BIOS ROM_LOAD( "videobios", 0x000000, 0x00d000, NO_DUMP ) - ROM_REGION( 0x10000, "scsibios", 0 ) // SCSI card BIOS - ROM_LOAD( "scsibios", 0x000000, 0x00d000, NO_DUMP ) - DISK_REGION( "scsi_hdd_image" ) // SCSI HDD DISK_IMAGE( "odyssey", 0, NO_DUMP ) @@ -274,5 +282,5 @@ ROM_END * Game Driver(s) * **************************************/ -/* YEAR NAME PARENT MACHINE INPUT STATE INIT ROT COMPANY FULLNAME FLAGS */ -GAME( 1998, odyssey, 0, odyssey, odyssey, odyssey_state, empty_init, ROT0, "Silicon Gaming", "Odyssey", MACHINE_IS_SKELETON ) +/* YEAR NAME PARENT MACHINE INPUT STATE INIT ROT COMPANY FULLNAME FLAGS */ +GAME( 1998, odyssey, 0, odyssey, odyssey, odyssey_state, empty_init, ROT270, "Silicon Gaming", "Odyssey", MACHINE_NO_SOUND | MACHINE_NOT_WORKING ) |