From 2fb28016e5773307f9747db22cbd03130950f960 Mon Sep 17 00:00:00 2001 From: angelosa Date: Sun, 30 Mar 2025 17:18:03 +0200 Subject: [PATCH] seibu/banprestoms.cpp: hookup DX/DY base scrolls, cleanup inputs --- src/mame/seibu/banprestoms.cpp | 74 ++++++++++++++++++---------------- 1 file changed, 39 insertions(+), 35 deletions(-) diff --git a/src/mame/seibu/banprestoms.cpp b/src/mame/seibu/banprestoms.cpp index c0e5f6f7d83..2d1c9d5b03b 100644 --- a/src/mame/seibu/banprestoms.cpp +++ b/src/mame/seibu/banprestoms.cpp @@ -120,16 +120,6 @@ void banprestoms_state::machine_start() m_okibank->set_entry(0); } - -void banprestoms_state::okibank_w(uint16_t data) -{ - m_okibank->set_entry(data & 0x03); - - m_ticket->motor_w(BIT(data, 4)); // bit 3 is suspect, too - // TODO: what do the other bits do? -} - - void banprestoms_state::video_start() { m_tilemap[0] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(banprestoms_state::tile_info<0>)), TILEMAP_SCAN_ROWS, 16, 16, 32, 32); @@ -183,9 +173,9 @@ uint32_t banprestoms_state::screen_update(screen_device &screen, bitmap_ind16 &b m_tilemap[1]->set_scrollx(0, m_scrollram[2]); m_tilemap[1]->set_scrolly(0, m_scrollram[3] - 16); m_tilemap[2]->set_scrollx(0, m_scrollram[4]); - m_tilemap[2]->set_scrolly(0, m_scrollram[5] - 16); - m_tilemap[3]->set_scrollx(0, 128); - m_tilemap[3]->set_scrolly(0, -16); + m_tilemap[2]->set_scrolly(0, m_scrollram[5]); + //m_tilemap[3]->set_scrollx(0, 128); + //m_tilemap[3]->set_scrolly(0, -16); if (BIT(~m_layer_en, 0)) { m_tilemap[0]->draw(screen, bitmap, cliprect, 0, 1); } if (BIT(~m_layer_en, 1)) { m_tilemap[1]->draw(screen, bitmap, cliprect, 0, 2); } @@ -206,6 +196,13 @@ void banprestoms_state::layer_scroll_w(offs_t offset, uint16_t data, uint16_t me COMBINE_DATA(&m_scrollram[offset]); } +void banprestoms_state::okibank_w(uint16_t data) +{ + m_okibank->set_entry(data & 0x03); + + m_ticket->motor_w(BIT(data, 4)); // bit 3 is suspect, too + // TODO: what do the other bits do? +} void banprestoms_state::prg_map(address_map &map) { @@ -241,34 +238,36 @@ void banprestoms_state::oki_map(address_map &map) static INPUT_PORTS_START( tvdenwad ) PORT_START("IN1") // TODO: convert to keypad - PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_BUTTON1 ) // 1 - PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON2 ) // 2 - PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_BUTTON3 ) // 3 - PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_BUTTON4 ) // 4 - PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON5 ) // 5 - PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON6 ) // 6 - PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON7 ) // 7 - PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_BUTTON8 ) // 8 - PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_BUTTON9 ) // 9 - PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_BUTTON10 ) // 0, why active high? - PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_BUTTON11 ) // # - PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_BUTTON12 ) // * - PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNUSED ) // couldn't find anything from here on + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("Keypad 1") PORT_CODE(KEYCODE_1_PAD) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("Keypad 2") PORT_CODE(KEYCODE_2_PAD) + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("Keypad 3") PORT_CODE(KEYCODE_3_PAD) + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("Keypad 4") PORT_CODE(KEYCODE_4_PAD) + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("Keypad 5") PORT_CODE(KEYCODE_5_PAD) + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("Keypad 6") PORT_CODE(KEYCODE_6_PAD) + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("Keypad 7") PORT_CODE(KEYCODE_7_PAD) + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("Keypad 8") PORT_CODE(KEYCODE_8_PAD) + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("Keypad 9") PORT_CODE(KEYCODE_9_PAD) + // TODO: this wants active high otherwise cannot enter service mode + PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Keypad 0") PORT_CODE(KEYCODE_0_PAD) + PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("Keypad #") PORT_CODE(KEYCODE_PLUS_PAD) + PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("Keypad *") PORT_CODE(KEYCODE_ASTERISK) + PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_START("IN2") - PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_BUTTON13 ) // Card Emp in switch test - PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON14 ) // Card Pos in switch test - PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("ticket", FUNC(ticket_dispenser_device::line_r)) // Card Pay in switch test + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_CUSTOM ) // Card Emp + PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_CUSTOM ) // Card Pos + // TODO: should be IP_ACTIVE_HIGH but that breaks tvdenwad boot + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("ticket", FUNC(ticket_dispenser_device::line_r)) // Card Pay PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_START ) - PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNUSED ) // ? + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_SERVICE( 0x0020, IP_ACTIVE_LOW ) - PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNUSED ) // ? - PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_BUTTON16 ) // Hook in switch test + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_CUSTOM ) // Hook PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_COIN1 ) - PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_UNUSED ) // couldn't find anything from here on + PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNUSED ) @@ -276,7 +275,6 @@ static INPUT_PORTS_START( tvdenwad ) PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_START("DSW1") // marked SW0913 on PCB PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coinage ) ) PORT_DIPLOCATION("DSW1:1,2") PORT_DIPSETTING( 0x03, DEF_STR( 1C_1C ) ) @@ -340,7 +338,6 @@ static INPUT_PORTS_START( marioun ) // inputs defined as IPT_UNKNOWN don't show PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_START("DSW1") // marked SW0913 on PCB PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coinage ) ) PORT_DIPLOCATION("DSW1:1,2") PORT_DIPSETTING( 0x03, DEF_STR( 1C_1C ) ) @@ -427,6 +424,13 @@ void banprestoms_state::banprestoms(machine_config &config) seibu_crtc_device &crtc(SEIBU_CRTC(config, "crtc", 0)); crtc.layer_en_callback().set(FUNC(banprestoms_state::layer_en_w)); crtc.layer_scroll_callback().set(FUNC(banprestoms_state::layer_scroll_w)); + crtc.layer_scroll_base_callback().set([this] (offs_t offset, u16 data, u16 mem_mask) { + const u8 layer_n = offset >> 1; + if (!BIT(offset, 0)) + m_tilemap[layer_n]->set_scrolldx((0x1c0 - data) & 0x1ff, (0x1c0 - data) & 0x1ff); + else + m_tilemap[layer_n]->set_scrolldy((0x1ff - data) & 0x1ff, (0x1ff - data) & 0x1ff); + }); LH5045(config, m_rtc, XTAL(32'768));