diff options
-rw-r--r-- | src/devices/machine/mediagx_cs5530_bridge.cpp | 76 | ||||
-rw-r--r-- | src/devices/machine/mediagx_cs5530_bridge.h | 3 | ||||
-rw-r--r-- | src/mame/misc/matrix.cpp | 27 | ||||
-rw-r--r-- | src/mame/misc/xtom3d.cpp | 7 |
4 files changed, 96 insertions, 17 deletions
diff --git a/src/devices/machine/mediagx_cs5530_bridge.cpp b/src/devices/machine/mediagx_cs5530_bridge.cpp index 54339fb2e18..b4556bcc0af 100644 --- a/src/devices/machine/mediagx_cs5530_bridge.cpp +++ b/src/devices/machine/mediagx_cs5530_bridge.cpp @@ -11,6 +11,11 @@ #include "speaker.h" +#define VERBOSE (LOG_GENERAL) +//#define LOG_OUTPUT_FUNC osd_printf_warning + +#include "logmacro.h" + DEFINE_DEVICE_TYPE(MEDIAGX_CS5530_BRIDGE, mediagx_cs5530_bridge_device, "mediagx_cs5530_bridge", "MediaGX CS5530 Bridge") mediagx_cs5530_bridge_device::mediagx_cs5530_bridge_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) @@ -128,7 +133,61 @@ void mediagx_cs5530_bridge_device::device_reset() void mediagx_cs5530_bridge_device::config_map(address_map &map) { pci_device::config_map(map); - // ... +// map(0x40, 0x42) PCI Function Control +// map(0x43, 0x43) USB Shadow +// map(0x44, 0x44) Reset Control + +// map(0x50, 0x50) PIT Control/ISA CLK divider +// map(0x51, 0x51) ISA I/O Recovery Control +// map(0x52, 0x52) ROM/AT Logic Control +// map(0x53, 0x53) Alternate CPU Support +// map(0x5a, 0x5b) Decode Control +// map(0x5c, 0x5d) PCI Interrupt Steering + +// map(0x70, 0x71) GPCS Base Address +// map(0x72, 0x72) GPCS Control + +// map(0x80, 0x83) Power Management Enable +// map(0x84, 0x87) Second Level Power Management Status Mirror (r/o) +// map(0x88, 0x89) General Purpose Timer 1 Count/Control +// map(0x8a, 0x8b) General Purpose Timer 2 Count/Control +// map(0x8c, 0x8c) IRQ Speedup Timer Count +// map(0x8d, 0x8d) Video Speedup Timer Count +// map(0x8e, 0x8e) VGA Timer COunt + +// map(0x90, 0x90) GPIO Pin Direction +// map(0x91, 0x91) GPIO Pin Data +// map(0x92, 0x92) GPIO Control 1 +// map(0x93, 0x93) Miscellaneous Device Control +// map(0x94, 0x95) Suspend Modulation OFF/ON Count +// map(0x96, 0x96) Suspend Configuration +// map(0x97, 0x97) GPIO Control 2 + +// map(0x98, 0x99) Primary HDD Idle Timer Count +// map(0x9a, 0x9b) Floppy Disk Idle Timer Count +// map(0x9c, 0x9d) Parallel / Serial Idle Timer Count +// map(0x9e, 0x9f) Keyboard / Mouse Idle Timer Count +// map(0xa0, 0xa5) User Defined Device # Idle Timer Count +// map(0xa6, 0xa7) Video Idle Timer Count +// map(0xa8, 0xa9) Video Overflow Count +// map(0xac, 0xad) Secondary HDD Idle Timer Count +// map(0xae, 0xae) CPU Suspend Command (w/o) +// map(0xaf, 0xaf) Suspend Notebook Command (w/o) + +// map(0xb4, 0xb7) Floppy Port Shadows (r/o) +// map(0xb8, 0xb8) DMA Shadow (r/o) +// map(0xb9, 0xb9) PIC Shadow (r/o) +// map(0xba, 0xba) PIT Shadow (r/o) +// map(0xbb, 0xbb) RTC Index Shadow (r/o) +// map(0xbc, 0xbc) Clock Stop Control + +// map(0xc0, 0xcb) User Defined Device # Base Address +// map(0xcc, 0xce) User Defined Device # Control + +// map(0xd0, 0xd0) Software SMI (w/o) +// map(0xec, 0xec) Timer Test + +// map(0xf4, 0xf7) Second Level Power Management Status } void mediagx_cs5530_bridge_device::internal_io_map(address_map &map) @@ -153,8 +212,19 @@ void mediagx_cs5530_bridge_device::internal_io_map(address_map &map) m_rtccs_write(data); }) ); - map(0x0080, 0x009f).rw(FUNC(mediagx_cs5530_bridge_device::at_page8_r), FUNC(mediagx_cs5530_bridge_device::at_page8_w)); - // TODO: $92 A20 fast reset/override + map(0x0080, 0x008f).rw(FUNC(mediagx_cs5530_bridge_device::at_page8_r), FUNC(mediagx_cs5530_bridge_device::at_page8_w)); + // TODO: port decoding driven by PCI register $52 + map(0x0092, 0x0092).lrw8( + NAME([this] () { + LOG("Fast init $92 read\n"); + return m_fast_init; + }), + NAME([this] (u8 data) { + LOG("Fast init $92 write %02x\n", data); + m_host_cpu->set_input_line(INPUT_LINE_A20, BIT(data, 1)); + m_fast_init = data; + }) + ); map(0x00a0, 0x00a1).rw("pic8259_slave", FUNC(pic8259_device::read), FUNC(pic8259_device::write)); map(0x00c0, 0x00df).rw(FUNC(mediagx_cs5530_bridge_device::at_dma8237_2_r), FUNC(mediagx_cs5530_bridge_device::at_dma8237_2_w)); // map(0x04d0, 0x04d1).rw(FUNC(mediagx_cs5530_bridge_device::eisa_irq_read), FUNC(mediagx_cs5530_bridge_device::eisa_irq_write)); diff --git a/src/devices/machine/mediagx_cs5530_bridge.h b/src/devices/machine/mediagx_cs5530_bridge.h index e00dac3357b..eee08bd72b9 100644 --- a/src/devices/machine/mediagx_cs5530_bridge.h +++ b/src/devices/machine/mediagx_cs5530_bridge.h @@ -9,6 +9,7 @@ #include "pci.h" #include "bus/isa/isa.h" +#include "cpu/i386/i386.h" #include "machine/am9517a.h" #include "machine/pic8259.h" #include "machine/pit8253.h" @@ -129,6 +130,8 @@ private: uint16_t m_dma_high_byte = 0; uint8_t m_channel_check = 0; bool m_nmi_enabled = false; + + u8 m_fast_init; }; DECLARE_DEVICE_TYPE(MEDIAGX_CS5530_BRIDGE, mediagx_cs5530_bridge_device) diff --git a/src/mame/misc/matrix.cpp b/src/mame/misc/matrix.cpp index 3138fd57ff2..01cf4d39dbd 100644 --- a/src/mame/misc/matrix.cpp +++ b/src/mame/misc/matrix.cpp @@ -6,7 +6,7 @@ Hardware consists of: - Motherboard (GXM-530D): (ETA: BIOS boots as SuperTek ST-MGXm3HB -AS) + Motherboard (GXM-530D): (ETA: BIOS boots as SuperTek ST-MGXm3HB, is 530 actually referring to SiS530? -AS) Cyrix MediaGX GXm-266GP 2.9V Cyrix GXm Cx5530 with GCT bios 128MB RAM @@ -29,6 +29,8 @@ #include "machine/mediagx_cs5530_bridge.h" #include "machine/mediagx_host.h" #include "machine/pci.h" +//#include "machine/sis7001_usb.h" +//#include "video/rivatnt.h" #include "screen.h" @@ -67,38 +69,47 @@ void matrix_state::matrix(machine_config &config) // basic machine hardware MEDIAGX(config, m_maincpu, 233'000'000); // Cyrix MediaGX GXm-266GP m_maincpu->set_addrmap(AS_PROGRAM, &matrix_state::main_map); - m_maincpu->set_irq_acknowledge_callback("pci:07.0:pic8259_master", FUNC(pic8259_device::inta_cb)); + m_maincpu->set_irq_acknowledge_callback("pci:12.0:pic8259_master", FUNC(pic8259_device::inta_cb)); // TODO: from FDC37C93x super I/O // NOTE: it's not initialized at $3f0 - $370 but accessed anyway, wtf DS1287(config, m_rtc, 32.768_kHz_XTAL); m_rtc->set_binary(true); m_rtc->set_epoch(1980); - m_rtc->irq().set("pci:07.0", FUNC(mediagx_cs5530_bridge_device::pc_irq8n_w)); + m_rtc->irq().set("pci:12.0", FUNC(mediagx_cs5530_bridge_device::pc_irq8n_w)); PCI_ROOT(config, "pci", 0); MEDIAGX_HOST(config, "pci:00.0", 0, "maincpu", 128*1024*1024); // TODO: no clue about the ID used for this, definitely tested // Tries to initialize MediaGX F4 -> ISA -> PCI/AGP, failing in all cases + // May actually be a ZFMicro PCI Bridge (0x10780400)? PCI_BRIDGE(config, "pci:01.0", 0, 0x10780000, 0); //RIVATNT(config, "pci:01.0:00.0", 0); - // TODO: unconfirmed PCI space - mediagx_cs5530_bridge_device &isa(MEDIAGX_CS5530_BRIDGE(config, "pci:07.0", 0, "maincpu")); + // "pci:12.0" or "pci:10.0" depending on pin H26 (readable in bridge thru PCI index $44) + mediagx_cs5530_bridge_device &isa(MEDIAGX_CS5530_BRIDGE(config, "pci:12.0", 0, "maincpu")); isa.boot_state_hook().set([](u8 data) { /* printf("%02x\n", data); */ }); //isa.smi().set_inputline("maincpu", INPUT_LINE_SMI); isa.rtcale().set([this](u8 data) { m_rtc->address_w(data); }); isa.rtccs_read().set([this]() { return m_rtc->data_r(); }); isa.rtccs_write().set([this](u8 data) { m_rtc->data_w(data); }); - // TODO: unknown number of ISA slots - ISA16_SLOT(config, "isa1", 0, "pci:07.0:isabus", pc_isa16_cards, nullptr, false); + // "pci:12.1" SMI & ACPI + // "pci:12.2" IDE + // "pci:12.3" XpressAUDIO + // "pci:12.4" XpressVIDEO + // "pci:13.0" (different) 0x0e11a0f8 ZF Micro Chipset USB (Compaq OpenHCI) + //SIS7001_USB(config, "pci:13.0", 0, 2); + + // 2 PCI slots, 2 ISA slots + ISA16_SLOT(config, "isa1", 0, "pci:12.0:isabus", pc_isa16_cards, nullptr, false); + ISA16_SLOT(config, "isa2", 0, "pci:12.0:isabus", pc_isa16_cards, nullptr, false); } ROM_START( matrix ) - ROM_REGION32_LE(0x40000, "pci:07.0", 0) + ROM_REGION32_LE(0x40000, "pci:12.0", 0) ROM_LOAD("d586_bios.bin", 0x00000, 0x40000, CRC(39fc093a) SHA1(3376bac4f0d6e729d5939e3078ecdf700464cba3) ) ROM_REGION(0x300000, "unsorted", 0) // encrypted? diff --git a/src/mame/misc/xtom3d.cpp b/src/mame/misc/xtom3d.cpp index 9df634984cb..974c369f683 100644 --- a/src/mame/misc/xtom3d.cpp +++ b/src/mame/misc/xtom3d.cpp @@ -594,12 +594,6 @@ void xtom3d_state::romdisk_config(device_t *device) romdisk.set_rom_tag("game_rom"); } -// TODO: stub for drive options (speed/drive type etc.) -/*void xtom3d_state::cdrom_config(device_t *device) -{ -} -*/ - // TODO: unverified PCI config space void xtom3d_state::xtom3d(machine_config &config) { @@ -660,6 +654,7 @@ void xtom3d_state::xtom3d(machine_config &config) // "pci:0e.0" J4D1 } +// TODO: stub for drive options (speed/drive type etc.) static void cdrom_config(device_t *device) { device->subdevice<cdda_device>("cdda")->add_route(0, ":lmicrophone", 0.25); |