From 697629993e4cdede619a5c47410bbb40c8c088a1 Mon Sep 17 00:00:00 2001 From: angelosa Date: Thu, 26 Sep 2024 23:48:35 +0200 Subject: igt/gkigt.cpp: remove most QUART2 overlay hacks --- src/mame/igt/gkigt.cpp | 150 ++++++++++++------------------------------------- 1 file changed, 35 insertions(+), 115 deletions(-) diff --git a/src/mame/igt/gkigt.cpp b/src/mame/igt/gkigt.cpp index 73df6bcb253..5fc496cdd09 100644 --- a/src/mame/igt/gkigt.cpp +++ b/src/mame/igt/gkigt.cpp @@ -3,11 +3,13 @@ /* TODO: -- hookup QUART devices, and fix "QUART COUNTER NOT RUNNING" error message; -- interrupt system; +- complete QUART devices, and fix "QUART COUNTER NOT RUNNING" error message; +\- ms3/ms72c can't possibly use SC28C94, that's a '98 chip. Do they map earlier variants? +- interrupt system, wants IAC mode from i960; +\- ms3/ms72c/bmoonii acks irq0 from quart2 CIR block only; - understand what's "netflex" device; -- ms72c has extra checks? - CMOS never get properly initialized? +- Eventually uses a touchscreen; Game King board types: @@ -126,12 +128,6 @@ private: virtual void machine_start() override ATTR_COLD; virtual void machine_reset() override ATTR_COLD; - void irq_enable_w(uint8_t data); - void irq_ack_w(uint8_t data); - uint8_t irq_vector_r(); - void vblank_irq(int state); - - uint8_t timer_r(); uint16_t version_r(); void igt_gameking_map(address_map &map) ATTR_COLD; @@ -143,10 +139,6 @@ private: required_device m_screen; required_shared_ptr m_vram; required_device_array m_quart; - - uint8_t m_irq_enable = 0; - uint8_t m_irq_pend = 0; - uint8_t m_timer_count = 0; }; void igt_gameking_state::video_start() @@ -171,25 +163,9 @@ uint32_t igt_gameking_state::screen_update(screen_device &screen, bitmap_ind16 & } } - return 0; -} - + // TODO: tilemap at $18100000 -void igt_gameking_state::irq_enable_w(uint8_t data) -{ - m_irq_enable = data; -} - -void igt_gameking_state::irq_ack_w(uint8_t data) -{ - //logerror("%02x\n",data); - m_maincpu->set_input_line(I960_IRQ0,CLEAR_LINE); - m_irq_pend = 0; -} - -uint8_t igt_gameking_state::irq_vector_r() -{ - return m_irq_pend; + return 0; } void igt_gameking_state::igt_gameking_map(address_map &map) @@ -203,6 +179,7 @@ void igt_gameking_state::igt_gameking_map(address_map &map) map(0x10020000, 0x17ffffff).flags(i960_cpu_device::BURST).ram(); map(0x18000000, 0x181fffff).flags(i960_cpu_device::BURST).ram().share("vram"); // igtsc writes from 18000000 to 1817ffff, ms3 all the way to 181fffff. +// map(0x18200000, 0x18200003) video related? // 28000000: MEZ2 SEL, also connected to ymz chip select? // 28010000: first 28C94 QUART (QRT1 SEL) @@ -214,21 +191,10 @@ void igt_gameking_state::igt_gameking_map(address_map &map) // 28070000: OUT SEL map(0x28010000, 0x2801007f).rw(m_quart[0], FUNC(sc28c94_device::read), FUNC(sc28c94_device::write)).umask32(0x00ff00ff); map(0x28020000, 0x280205ff).flags(i960_cpu_device::BURST).ram(); // CMOS? - map(0x28030000, 0x28030003).portr("IN0"); + map(0x28030000, 0x28030003).nopr(); map(0x28040000, 0x2804007f).rw(m_quart[1], FUNC(sc28c94_device::read), FUNC(sc28c94_device::write)).umask32(0x00ff00ff); - // TODO: these overlays should come from the QUART device -// map(0x2804000a, 0x2804000a).w(FUNC(igt_gameking_state::unk_w)); - map(0x28040008, 0x28040008).rw(FUNC(igt_gameking_state::irq_vector_r), FUNC(igt_gameking_state::irq_enable_w)); -// map(0x28040018, 0x2804001b).portr("IN1").nopw(); -// map(0x2804001c, 0x2804001f).portr("IN4").nopw(); -// map(0x28040028, 0x2804002b).nopr(); - map(0x2804002a, 0x2804002a).w(FUNC(igt_gameking_state::irq_ack_w)); -// map(0x28040038, 0x2804003b).r(FUNC(igt_gameking_state::timer_r)).umask32(0x00ff0000); + // TODO: this overlay should come from the QUART device map(0x28040038, 0x2804003b).portr("IN2").nopw(); -// map(0x2804003c, 0x2804003f).portr("IN3").nopw(); -// map(0x28040050, 0x28040050).r(FUNC(igt_gameking_state::frame_number_r)); -// map(0x28040054, 0x28040057).nopw(); -// map(0x28040054, 0x28040057).w(FUNC(igt_gameking_state::irq_ack_w).umask32(0x000000ff); map(0x28050000, 0x28050003).rw("ymz", FUNC(ymz280b_device::read), FUNC(ymz280b_device::write)).umask32(0x00ff00ff); map(0x28060000, 0x28060000).w("ramdac", FUNC(ramdac_device::index_w)); @@ -240,77 +206,20 @@ void igt_gameking_state::igt_gameking_map(address_map &map) map(0xa1000000, 0xa1011fff).flags(i960_cpu_device::BURST).ram(); // used by gkkey for restart IAC } +// TODO: unknown value required, checked at "Cold powerup machine setup" +// comes from Xilinx? uint16_t igt_gameking_state::version_r() { - // TODO: unknown value required, checked at "Cold powerup machine setup" return 0xf777; } -uint8_t igt_gameking_state::timer_r() -{ - // TODO: ms72c 8011ab0 "init_io" check, gets printed as "New security latch value = %x" - return m_timer_count++; -} - void igt_gameking_state::igt_ms72c_map(address_map &map) { igt_gameking_map(map); map(0x18200000, 0x18200001).r(FUNC(igt_gameking_state::version_r)); - map(0x2804003a, 0x2804003a).r(FUNC(igt_gameking_state::timer_r)); } static INPUT_PORTS_START( igt_gameking ) - PORT_START("IN0") - PORT_DIPNAME( 0x01, 0x01, "IN0" ) - PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x010000, 0x010000, "IN0-1" ) - PORT_DIPSETTING( 0x010000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x000000, DEF_STR( On ) ) - PORT_DIPNAME( 0x020000, 0x020000, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x020000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x000000, DEF_STR( On ) ) - PORT_DIPNAME( 0x040000, 0x040000, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x040000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x000000, DEF_STR( On ) ) - PORT_DIPNAME( 0x080000, 0x080000, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x080000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x000000, DEF_STR( On ) ) - PORT_DIPNAME( 0x100000, 0x100000, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x100000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x000000, DEF_STR( On ) ) - PORT_DIPNAME( 0x200000, 0x200000, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x200000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x000000, DEF_STR( On ) ) - PORT_DIPNAME( 0x400000, 0x400000, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x400000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x000000, DEF_STR( On ) ) - PORT_DIPNAME( 0x800000, 0x800000, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x800000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x000000, DEF_STR( On ) ) - PORT_BIT( 0xff00ff00, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_START("IN1") PORT_DIPNAME( 0x01, 0x01, "IN1" ) PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) @@ -513,6 +422,22 @@ static INPUT_PORTS_START( igt_gameking ) INPUT_PORTS_END +// TODO: wrong decoding +static const gfx_layout igt_gameking_layout = +{ + 16,8, + RGN_FRAC(1,1), + 4, + { STEP4(0, 1) }, + { STEP16(0, 4) }, + { STEP8(0, 4*16) }, + 16*8*4 +}; + +static GFXDECODE_START( gfx_igt_gameking ) + GFXDECODE_ENTRY( "cg", 0, igt_gameking_layout, 0x0, 16 ) +GFXDECODE_END + void igt_gameking_state::ramdac_map(address_map &map) { map(0x000, 0x3ff).rw("ramdac", FUNC(ramdac_device::ramdac_pal_r), FUNC(ramdac_device::ramdac_rgb666_w)); @@ -524,20 +449,9 @@ void igt_gameking_state::machine_start() void igt_gameking_state::machine_reset() { - m_timer_count = 0; m_quart[0]->ip2_w(1); // needs to be high } -void igt_gameking_state::vblank_irq(int state) -{ - if (state && BIT(m_irq_enable, 3)) - { - m_maincpu->set_input_line(I960_IRQ0, ASSERT_LINE); - //machine().debug_break(); - m_irq_pend = 8; - } -} - static DEVICE_INPUT_DEFAULTS_START( terminal ) DEVICE_INPUT_DEFAULTS( "RS232_TXBAUD", 0xff, RS232_BAUD_38400 ) DEVICE_INPUT_DEFAULTS( "RS232_RXBAUD", 0xff, RS232_BAUD_38400 ) @@ -559,7 +473,7 @@ void igt_gameking_state::igt_gameking(machine_config &config) m_screen->set_visarea(0, 640-1, 0, 480-1); m_screen->set_screen_update(FUNC(igt_gameking_state::screen_update)); m_screen->set_palette(m_palette); - m_screen->screen_vblank().set(FUNC(igt_gameking_state::vblank_irq)); +// m_screen->screen_vblank().set_inputline(m_maincpu, I960_IRQ2); // Xilinx used as video chip XTAL(26'666'666) on board SC28C94(config, m_quart[0], XTAL(24'000'000) / 6); @@ -577,6 +491,8 @@ void igt_gameking_state::igt_gameking(machine_config &config) ramdac_device &ramdac(RAMDAC(config, "ramdac", 0, m_palette)); ramdac.set_addrmap(0, &igt_gameking_state::ramdac_map); + GFXDECODE(config, "gfxdecode", m_palette, gfx_igt_gameking); + /* sound hardware */ SPEAKER(config, "mono").front_center(); @@ -589,6 +505,10 @@ void igt_gameking_state::igt_ms72c(machine_config &config) { igt_gameking(config); m_maincpu->set_addrmap(AS_PROGRAM, &igt_gameking_state::igt_ms72c_map); + + // TODO: pinpoint enable/acknowledge + // clears $280201fc from there +// m_screen->screen_vblank().set_inputline(m_maincpu, I960_IRQ2); } ROM_START( ms3 ) -- cgit v1.2.3