diff --git a/src/mame/drivers/sigmab98.c b/src/mame/drivers/sigmab98.c index 5dc99048ff9..1b82f2ab847 100644 --- a/src/mame/drivers/sigmab98.c +++ b/src/mame/drivers/sigmab98.c @@ -10,10 +10,27 @@ Sound : YMZ280B NVRAM : 93C46, Battery Graphics are made of sprites only. -Each sprite is composed of X x Y tiles and can be zoomed / shrunk. +Each sprite is composed of X x Y tiles and can be zoomed / shrunk and rotated. Tiles can be 16x16x4 or 16x16x8. ----------------------------------------------------------------- +Some videos: +https://www.youtube.com/channel/UCYFiPd3FukrmNJa3pfIKf-Q/search?query=sigma +https://www.youtube.com/channel/UCYFiPd3FukrmNJa3pfIKf-Q/search?query=sammy +https://www.youtube.com/user/analysis08/search?query=sammy +http://www.nicozon.net/watch/sm14334996 + +Dumped games: + +1997 Minna Atsumare! Dodge Hero b9802 https://youtu.be/2eXDQnKCT6A +1997 Itazura Daisuki! Sushimaru Kun b9803 https://youtu.be/nhvbZ71KWr8 +1997 GeGeGe no Kitarou Youkai Slot b9804 +1997 Burning Sanrinsya b9805 +1997 PEPSI Man b9806 https://youtu.be/p3cbZ67m4lo +1998 Transformers Beast Wars II b9808 +1997 Uchuu Tokkyuu Medalian b9809 https://youtu.be/u813kBOZbwI +2000 Minna Ganbare! Dash Hero b9811 + +-------------------------------------------------------------------------------------- Sammy Kids Medal Series @@ -31,27 +48,22 @@ is "Treasure Fall" (despite the cart label is "Treasure Hall"). Dumped games: -Animal Catch -Itazura Monkey -Taihou de Doboon -Pye-nage Taikai -Hae Hae Ka Ka Ka +2000 Animal Catch https://youtu.be/U4L5EwWbxqw +2000 Itazura Monkey https://youtu.be/GHxiqUQRpV8 +2000 Pye-nage Taikai https://youtu.be/oL2OIbrv-KI +2000 Taihou de Doboon https://youtu.be/loPP3jt0Ob0 +2001 Hae Hae Ka Ka Ka https://youtu.be/37IxYCg0tic Games with the same cabinet which might be on the same hardware: 1999 Shatekids 1999 Otakara Locomo 1999 Dokidoki Kingyosukui -2000 Taihou de Doboon -2000 Pye-nage Taikai -2000 Animal Catch -2000 Itazura Monkey 2000 Otoshicha Ottotto 2000 Go Go Cowboy 2001 Mushitori Meijin 2001 Morino Dodgeball Senshuken 2001 Waiwai Wanage -2001 Hae Hae Ka Ka Ka 2001 Zarigani Tsuri 2001 Kotekitai Slot 2002 Shateki Yokochou @@ -68,18 +80,19 @@ Games with the same cabinet which might be on the same hardware: from: http://www.tsc-acnet.com/index.php?sort=8&action=cataloglist&s=1&mode=3&genre_id=40&freeword=%25A5%25B5%25A5%25DF%25A1%25BC +-------------------------------------------------------------------------------------- + To Do: - KL5C80 emulation is needed to consolidate the sammymdl games in one memory map and to run the BIOS -- Remove ROM patches from gegege, pepsiman -- gegege checks the EEPROM output after reset, and wants a timed 0->1 transition or locks up while +- Sprites rotation, e.g. logo in dashhero, pepsiman https://youtu.be/p3cbZ67m4lo?t=1m24s, tdoboon https://youtu.be/loPP3jt0Ob0 +- Remove ROM patches: gegege checks the EEPROM output after reset, and wants a timed 0->1 transition or locks up while saving setting in service mode. Using a reset_delay of 7 works, unless when "play style" is set to "coin" (it probably changes the number of reads from port $C0). I guess the reset_delay mechanism should be implemented with a timer in eeprom.c. -- animalc needs a green backgound during part of the intro (floating animals in and out of the screen). - This can be achieved using either pen 0 or ff as background color, but messes up the other games. - pyenaget intro: when the theater scrolls out to the left, the train should scroll in from the right, with no visible gaps. It currently leaves the screen empty instead, for several seconds. +- dashhero does not acknowledge the button bashing correctly, it's very hard to win (a slower pace works better!) Notes: @@ -89,28 +102,35 @@ Notes: #include "emu.h" #include "cpu/z80/z80.h" +#include "video/bufsprite.h" #include "sound/okim9810.h" #include "sound/ymz280b.h" #include "machine/eepromser.h" #include "machine/nvram.h" #include "machine/ticket.h" - class sigmab98_state : public driver_device { public: sigmab98_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), m_maincpu(*this,"maincpu"), + m_buffered_spriteram(*this, "spriteram"), m_spriteram(*this, "spriteram"), + m_vregs(*this, "vregs"), + m_vtable(*this, "vtable"), m_nvram(*this, "nvram"), m_eeprom(*this, "eeprom"), m_gfxdecode(*this, "gfxdecode"), m_screen(*this, "screen"), - m_palette(*this, "palette") { } + m_palette(*this, "palette") + { } required_device m_maincpu; - optional_shared_ptr m_spriteram; + optional_device m_buffered_spriteram; // not on sammymdl? + optional_shared_ptr m_spriteram; // optional as some games allocate it themselves (due to banking) + optional_shared_ptr m_vregs; // optional as some games allocate it themselves (due to banking) + optional_shared_ptr m_vtable; // optional as some games allocate it themselves (due to banking) required_shared_ptr m_nvram; required_device m_eeprom; required_device m_gfxdecode; @@ -132,24 +152,44 @@ public: UINT8 m_vblank_vector; UINT8 m_timer0_vector; UINT8 m_timer1_vector; - DECLARE_WRITE8_MEMBER(regs_w); - DECLARE_READ8_MEMBER(regs_r); - DECLARE_WRITE8_MEMBER(regs2_w); - DECLARE_READ8_MEMBER(regs2_r); + + DECLARE_WRITE8_MEMBER(gegege_regs_w); + DECLARE_READ8_MEMBER(gegege_regs_r); + DECLARE_WRITE8_MEMBER(gegege_regs2_w); + DECLARE_READ8_MEMBER(gegege_regs2_r); + + DECLARE_WRITE8_MEMBER(dodghero_regs_w); + DECLARE_READ8_MEMBER(dodghero_regs_r); + DECLARE_WRITE8_MEMBER(dodghero_regs2_w); + DECLARE_READ8_MEMBER(dodghero_regs2_r); + + DECLARE_WRITE8_MEMBER(dashhero_regs_w); + DECLARE_READ8_MEMBER(dashhero_regs_r); + DECLARE_WRITE8_MEMBER(dashhero_regs2_w); + DECLARE_READ8_MEMBER(dashhero_regs2_r); + + DECLARE_WRITE8_MEMBER(vregs_w); + DECLARE_READ8_MEMBER(vregs_r); + DECLARE_READ8_MEMBER(d013_r); + DECLARE_READ8_MEMBER(d021_r); + DECLARE_WRITE8_MEMBER(c4_w); DECLARE_WRITE8_MEMBER(c6_w); DECLARE_WRITE8_MEMBER(c8_w); + DECLARE_WRITE8_MEMBER(animalc_rombank_w); DECLARE_READ8_MEMBER(animalc_rombank_r); DECLARE_WRITE8_MEMBER(animalc_rambank_w); DECLARE_READ8_MEMBER(animalc_rambank_r); + DECLARE_READ8_MEMBER(unk_34_r); - DECLARE_READ8_MEMBER(vblank_r); DECLARE_WRITE8_MEMBER(vblank_w); + DECLARE_READ8_MEMBER(vblank_r); DECLARE_WRITE8_MEMBER(sammymdl_coin_w); DECLARE_WRITE8_MEMBER(sammymdl_leds_w); DECLARE_WRITE8_MEMBER(sammymdl_hopper_w); DECLARE_READ8_MEMBER(sammymdl_coin_hopper_r); + DECLARE_WRITE8_MEMBER(haekaka_rombank_w); DECLARE_READ8_MEMBER(haekaka_rombank_r); DECLARE_WRITE8_MEMBER(haekaka_rambank_w); @@ -159,6 +199,7 @@ public: DECLARE_WRITE8_MEMBER(haekaka_b000_w); DECLARE_WRITE8_MEMBER(haekaka_leds_w); DECLARE_WRITE8_MEMBER(haekaka_coin_w); + DECLARE_WRITE8_MEMBER(itazuram_rombank_w); DECLARE_READ8_MEMBER(itazuram_rombank_r); DECLARE_WRITE8_MEMBER(itazuram_rambank_w); @@ -166,28 +207,38 @@ public: DECLARE_WRITE8_MEMBER(itazuram_nvram_palette_w); DECLARE_WRITE8_MEMBER(itazuram_palette_w); DECLARE_READ8_MEMBER(itazuram_palette_r); + DECLARE_WRITE8_MEMBER(tdoboon_rombank_w); DECLARE_READ8_MEMBER(tdoboon_rombank_r); DECLARE_WRITE8_MEMBER(tdoboon_rambank_w); DECLARE_READ8_MEMBER(tdoboon_rambank_r); DECLARE_READ8_MEMBER(tdoboon_c000_r); DECLARE_WRITE8_MEMBER(tdoboon_c000_w); + void show_outputs(); void show_3_outputs(); DECLARE_WRITE8_MEMBER(eeprom_w); DECLARE_READ8_MEMBER(sammymdl_eeprom_r); DECLARE_WRITE8_MEMBER(sammymdl_eeprom_w); + + DECLARE_DRIVER_INIT(dodghero); + DECLARE_DRIVER_INIT(b3rinsya); + DECLARE_DRIVER_INIT(tbeastw2); + DECLARE_DRIVER_INIT(dashhero); DECLARE_DRIVER_INIT(gegege); DECLARE_DRIVER_INIT(pepsiman); DECLARE_DRIVER_INIT(itazuram); DECLARE_DRIVER_INIT(animalc); DECLARE_DRIVER_INIT(ucytokyu); DECLARE_DRIVER_INIT(haekaka); + + DECLARE_MACHINE_RESET(sigmab98); DECLARE_MACHINE_RESET(sammymdl); + UINT32 screen_update_sigmab98(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); void screen_eof_sammymdl(screen_device &screen, bool state); - INTERRUPT_GEN_MEMBER(gegege_vblank_interrupt); - TIMER_DEVICE_CALLBACK_MEMBER(sammymd1_irq); + INTERRUPT_GEN_MEMBER(sigmab98_vblank_interrupt); + TIMER_DEVICE_CALLBACK_MEMBER(sammymdl_irq); void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, int pri_mask); }; @@ -223,8 +274,8 @@ public: 7 Y (Low) 8 Shrink Factor (<< 8, High) 9 Shrink Factor (<< 8, Low) - a - b + a ? rotation, see dashhero (Sigma logo) + b ? and pepsiman (when falling) c 7654 3--- ---- -210 Delta X (High) d Delta X (Low) @@ -236,12 +287,12 @@ public: void sigmab98_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, int pri_mask) { - UINT8 *end = m_spriteram - 0x10; - UINT8 *s = end + m_spriteram.bytes(); + UINT8 *end = (m_buffered_spriteram ? m_buffered_spriteram->buffer() : m_spriteram) - 0x10; + UINT8 *s = end + 0x1000; for ( ; s != end; s -= 0x10 ) { - int gfx, code, color, zoom, dim, scale; + int gfx, code, color, zoom, /*rot,*/ dim, scale; int sx, nx, x, x0, x1, dx, flipx; int sy, ny, y, y0, y1, dy, flipy; @@ -265,20 +316,18 @@ void sigmab98_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprec sy = (s[ 0x06 ] & 0x03) * 256 + s[ 0x07 ]; - zoom = (s[ 0x08 ] & 0xff) * 256 + s[ 0x09 ]; + zoom = (s[ 0x08 ] & 0xff) * 256 + s[ 0x09 ]; // 0x100 means no zoom - dx = (s[ 0x0c ] & 0x03) * 256 + s[ 0x0d ]; - dy = (s[ 0x0e ] & 0x03) * 256 + s[ 0x0f ]; +// rot = (s[ 0x0a ] & 0xff) * 256 + s[ 0x0b ]; // unimplemented! + + dx = (s[ 0x0c ] & 0xff) * 256 + s[ 0x0d ]; + dy = (s[ 0x0e ] & 0xff) * 256 + s[ 0x0f ]; // Sign extend the position sx = (sx & 0x1ff) - (sx & 0x200); sy = (sy & 0x1ff) - (sy & 0x200); - dx = (dx & 0x1ff) - (dx & 0x200); - dy = (dy & 0x1ff) - (dy & 0x200); - - // Add shift (negated, as it seems more correct in haekaka) - sx -= dx; - sy -= dy; + dx = (dx & 0x7fff) - (dx & 0x8000); + dy = (dy & 0x7fff) - (dy & 0x8000); // Use fixed point values (16.16), for accuracy sx <<= 16; @@ -286,6 +335,9 @@ void sigmab98_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprec zoom = (1 << 16) / (zoom ? zoom : 1); dim = (0x10 << 8) * zoom; + // Add shift (negated) + sx -= (dx << 8) * zoom; + sy -= (dy << 8) * zoom; scale = dim / 0x10; // Let's approximate to the nearest greater integer value @@ -331,7 +383,7 @@ UINT32 sigmab98_state::screen_update_sigmab98(screen_device &screen, bitmap_ind1 } #endif - bitmap.fill(m_palette->black_pen(), cliprect); + bitmap.fill(m_palette->pens()[0x100], cliprect); // Draw from priority 3 (bottom, converted to a bitmask) to priority 0 (top) draw_sprites(bitmap, cliprect, layers_ctrl & 8); @@ -342,6 +394,81 @@ UINT32 sigmab98_state::screen_update_sigmab98(screen_device &screen, bitmap_ind1 return 0; } +/*************************************************************************** + + Video Regs + + Offset: Bits: Value: + + 01 Screen Width / 2 - 1 + 03 + 05 + 07 + 09 Screen Height - 1 + 0b + 0d + 0f + 11 + 13 76-- ---- + --5- ---- VBlank? + ---4 3--- + ---- -2-- Sprites Buffered? + ---- --10 + 15 + 17 + 19 + 1b Background Color (Low) + 1d Background Color (High) + 1f + 21 + +***************************************************************************/ + +WRITE8_MEMBER(sigmab98_state::vregs_w) +{ + m_vregs[offset] = data; + + switch (offset) + { + case 0x1b: // background color + case 0x1d: + { + int x = (m_vregs[0x1d] << 8) + m_vregs[0x1b]; + int r = (x >> 10) & 0x1f; + int g = (x >> 5) & 0x1f; + int b = (x >> 0) & 0x1f; + m_palette->set_pen_color(0x100, pal5bit(r), pal5bit(g), pal5bit(b)); + break; + } +// default: +// logerror("%s: unknown video reg written: %02x = %02x\n", machine().describe_context(), offset, data); + } +} + +READ8_MEMBER(sigmab98_state::vregs_r) +{ + switch (offset) + { + default: + logerror("%s: unknown video reg read: %02x\n", machine().describe_context(), offset); + return m_vregs[offset]; + } +} + +READ8_MEMBER(sigmab98_state::d013_r) +{ + // bit 5 must go 0->1 (vblank?) + // bit 2 must set (sprite buffered? triggered by pulsing bit 3 of port C6?) + return (m_screen->vblank() ? 0x20 : 0) | 0x04; +// return machine().rand(); +} +READ8_MEMBER(sigmab98_state::d021_r) +{ + // bit 5 must be 0? + return 0; +// return machine().rand(); +} + /*************************************************************************** @@ -349,13 +476,146 @@ UINT32 sigmab98_state::screen_update_sigmab98(screen_device &screen, bitmap_ind1 ***************************************************************************/ +/*************************************************************************** + Minna Atsumare! Dodge Hero +***************************************************************************/ + +// rombank +WRITE8_MEMBER(sigmab98_state::dodghero_regs_w) +{ + if (offset == 0) + { + m_reg = data; + return; + } + + switch ( m_reg ) + { + case 0x1f: + m_rombank = data; + if (data >= 0x18) + logerror("%s: unknown rom bank = %02x\n", machine().describe_context(), data); + else + membank("rombank")->set_entry(data * 2); + break; + + case 0x9f: + m_rombank = data; + if (data >= 0x18) + logerror("%s: unknown rom bank2 = %02x\n", machine().describe_context(), data); + else + membank("rombank")->set_entry(data * 2 + 1); + break; + + default: + logerror("%s: unknown reg written: %02x = %02x\n", machine().describe_context(), m_reg, data); + } +} +READ8_MEMBER(sigmab98_state::dodghero_regs_r) +{ + if (offset == 0) + return m_reg; + + switch ( m_reg ) + { + case 0x1f: + case 0x9f: + return m_rombank; + + default: + logerror("%s: unknown reg read: %02x\n", machine().describe_context(), m_reg); + return 0x00; + } +} + +// rambank +WRITE8_MEMBER(sigmab98_state::dodghero_regs2_w) +{ + if (offset == 0) + { + m_reg2 = data; + return; + } + + switch ( m_reg2 ) + { + case 0x37: + m_rambank = data; + switch (data) + { + case 0x32: + membank("rambank")->set_entry(0); + break; + case 0x36: + membank("rambank")->set_entry(1); + break; + default: + logerror("%s: unknown ram bank = %02x\n", machine().describe_context(), data); + } + break; + + default: + logerror("%s: unknown reg2 written: %02x = %02x\n", machine().describe_context(), m_reg2, data); + } +} +READ8_MEMBER(sigmab98_state::dodghero_regs2_r) +{ + if (offset == 0) + return m_reg2; + + switch ( m_reg2 ) + { + case 0x37: + return m_rambank; + + default: + logerror("%s: unknown reg2 read: %02x\n", machine().describe_context(), m_reg2); + return 0x00; + } +} + +static ADDRESS_MAP_START( dodghero_mem_map, AS_PROGRAM, 8, sigmab98_state ) + AM_RANGE( 0x0000, 0x7fff ) AM_ROM + AM_RANGE( 0x8000, 0xa7ff ) AM_ROMBANK("rombank") + + AM_RANGE( 0xa800, 0xb7ff ) AM_RAM AM_SHARE("spriteram") + + AM_RANGE( 0xc800, 0xc9ff ) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette") + + AM_RANGE( 0xd001, 0xd07f ) AM_RAM AM_SHARE("vtable") + + AM_RANGE( 0xd813, 0xd813 ) AM_READ(d013_r) + AM_RANGE( 0xd821, 0xd821 ) AM_READ(d021_r) + AM_RANGE( 0xd800, 0xd821 ) AM_READWRITE(vregs_r, vregs_w) AM_SHARE("vregs") + AM_RANGE( 0xd800, 0xdfff ) AM_RAMBANK("rambank") // not used, where is it mapped? + + AM_RANGE( 0xe000, 0xefff ) AM_RAM AM_SHARE("nvram") // battery + + AM_RANGE( 0xf000, 0xffff ) AM_RAM +ADDRESS_MAP_END + +static ADDRESS_MAP_START( dodghero_io_map, AS_IO, 8, sigmab98_state ) + ADDRESS_MAP_GLOBAL_MASK(0xff) + + AM_RANGE( 0x00, 0x01 ) AM_DEVREADWRITE("ymz", ymz280b_device, read, write ) + + AM_RANGE( 0xa0, 0xa1 ) AM_READWRITE(dodghero_regs_r, dodghero_regs_w ) +// AM_RANGE( 0xa2, 0xa3 ) + AM_RANGE( 0xa4, 0xa5 ) AM_READWRITE(dodghero_regs2_r, dodghero_regs2_w ) + + AM_RANGE( 0xc0, 0xc0 ) AM_READ_PORT( "EEPROM" ) AM_WRITE(eeprom_w) + AM_RANGE( 0xc2, 0xc2 ) AM_READ_PORT( "BUTTON" ) + AM_RANGE( 0xc4, 0xc4 ) AM_READ_PORT( "PAYOUT" ) AM_WRITE(c4_w ) + AM_RANGE( 0xc6, 0xc6 ) AM_WRITE(c6_w ) + AM_RANGE( 0xc8, 0xc8 ) AM_WRITE(c8_w ) +ADDRESS_MAP_END /*************************************************************************** GeGeGe no Kitarou Youkai Slot ***************************************************************************/ // rombank -WRITE8_MEMBER(sigmab98_state::regs_w) +WRITE8_MEMBER(sigmab98_state::gegege_regs_w) { if (offset == 0) { @@ -377,7 +637,7 @@ WRITE8_MEMBER(sigmab98_state::regs_w) logerror("%s: unknown reg written: %02x = %02x\n", machine().describe_context(), m_reg, data); } } -READ8_MEMBER(sigmab98_state::regs_r) +READ8_MEMBER(sigmab98_state::gegege_regs_r) { if (offset == 0) return m_reg; @@ -394,7 +654,7 @@ READ8_MEMBER(sigmab98_state::regs_r) } // rambank -WRITE8_MEMBER(sigmab98_state::regs2_w) +WRITE8_MEMBER(sigmab98_state::gegege_regs2_w) { if (offset == 0) { @@ -423,7 +683,7 @@ WRITE8_MEMBER(sigmab98_state::regs2_w) logerror("%s: unknown reg2 written: %02x = %02x\n", machine().describe_context(), m_reg2, data); } } -READ8_MEMBER(sigmab98_state::regs2_r) +READ8_MEMBER(sigmab98_state::gegege_regs2_r) { if (offset == 0) return m_reg2; @@ -445,7 +705,7 @@ READ8_MEMBER(sigmab98_state::regs2_r) void sigmab98_state::show_outputs() { #ifdef MAME_DEBUG -// popmessage("0: %02X 4: %02X 6: %02X 8: %02X",m_c0,m_c4,m_c6,m_c8); + popmessage("0: %02X 4: %02X 6: %02X 8: %02X", m_c0, m_c4, m_c6, m_c8); #endif } @@ -479,18 +739,20 @@ WRITE8_MEMBER(sigmab98_state::c4_w) // Port c6 // 03 lockout (active low, 02 is cleared when reaching 99 credits) // 04 pulsed on coin in -// 08 always blinks +// 08 buffer sprites? // 10 led? -// 20 blinks after coin up +// 20 led? (starts blinking after coin in) WRITE8_MEMBER(sigmab98_state::c6_w) { coin_lockout_w(machine(), 0, (~data) & 0x02); coin_counter_w(machine(), 0, data & 0x04); - set_led_status(machine(), 1, data & 0x08); - set_led_status(machine(), 2, data & 0x10); - set_led_status(machine(), 3, data & 0x20); // + if ((data & 0x08) && !(m_c6 & 0x08)) + m_buffered_spriteram->copy(); + + set_led_status(machine(), 1, data & 0x10); + set_led_status(machine(), 2, data & 0x20); m_c6 = data; show_outputs(); @@ -515,9 +777,12 @@ static ADDRESS_MAP_START( gegege_mem_map, AS_PROGRAM, 8, sigmab98_state ) AM_RANGE( 0xc000, 0xc1ff ) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette") - AM_RANGE( 0xc800, 0xc87f ) AM_RAM + AM_RANGE( 0xc800, 0xc87f ) AM_RAM AM_SHARE("vtable") + + AM_RANGE( 0xd013, 0xd013 ) AM_READ(d013_r) + AM_RANGE( 0xd021, 0xd021 ) AM_READ(d021_r) + AM_RANGE( 0xd000, 0xd021 ) AM_READWRITE(vregs_r, vregs_w) AM_SHARE("vregs") -// AM_RANGE( 0xd001, 0xd021 ) AM_RAM AM_RANGE( 0xd800, 0xdfff ) AM_RAMBANK("rambank") AM_RANGE( 0xe000, 0xefff ) AM_RAM AM_SHARE("nvram") // battery @@ -528,22 +793,94 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( gegege_io_map, AS_IO, 8, sigmab98_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) - AM_RANGE( 0x00, 0x01 ) AM_DEVWRITE("ymz", ymz280b_device, write ) + AM_RANGE( 0x00, 0x01 ) AM_DEVREADWRITE("ymz", ymz280b_device, read, write ) - AM_RANGE( 0xa0, 0xa1 ) AM_READWRITE(regs_r, regs_w ) + AM_RANGE( 0xa0, 0xa1 ) AM_READWRITE(gegege_regs_r, gegege_regs_w ) // AM_RANGE( 0xa2, 0xa3 ) - AM_RANGE( 0xa4, 0xa5 ) AM_READWRITE(regs2_r, regs2_w ) - - AM_RANGE( 0xc0, 0xc0 ) AM_READ_PORT( "EEPROM" ) - AM_RANGE( 0xc0, 0xc0 ) AM_WRITE(eeprom_w) - - AM_RANGE( 0xc2, 0xc2 ) AM_READ_PORT( "IN1" ) - - AM_RANGE( 0xc4, 0xc4 ) AM_READ_PORT( "IN2" ) - AM_RANGE( 0xc4, 0xc4 ) AM_WRITE(c4_w ) + AM_RANGE( 0xa4, 0xa5 ) AM_READWRITE(gegege_regs2_r, gegege_regs2_w ) + AM_RANGE( 0xc0, 0xc0 ) AM_READ_PORT( "EEPROM" ) AM_WRITE(eeprom_w) + AM_RANGE( 0xc2, 0xc2 ) AM_READ_PORT( "BUTTON" ) + AM_RANGE( 0xc4, 0xc4 ) AM_READ_PORT( "PAYOUT" ) AM_WRITE(c4_w ) AM_RANGE( 0xc6, 0xc6 ) AM_WRITE(c6_w ) + AM_RANGE( 0xc8, 0xc8 ) AM_WRITE(c8_w ) + AM_RANGE( 0xe5, 0xe5 ) AM_READNOP // during irq +ADDRESS_MAP_END + +/*************************************************************************** + Minna Ganbare! Dash Hero +***************************************************************************/ + +// rambank +WRITE8_MEMBER(sigmab98_state::dashhero_regs2_w) +{ + if (offset == 0) + { + m_reg2 = data; + return; + } + + switch ( m_reg2 ) + { + case 0x75: + case 0xb5: + case 0xf5: + m_rambank = data; + switch (data) + { + case 0x32: + membank("rambank")->set_entry(0); + break; + case 0x34: + membank("rambank")->set_entry(1); + break; + case 0x36: + membank("rambank")->set_entry(2); + break; + case 0x39: + membank("rambank")->set_entry(3); + break; + default: + logerror("%s: unknown ram bank = %02x\n", machine().describe_context(), data); + } + break; + + default: + logerror("%s: unknown reg2 written: %02x = %02x\n", machine().describe_context(), m_reg2, data); + } +} +READ8_MEMBER(sigmab98_state::dashhero_regs2_r) +{ + if (offset == 0) + return m_reg2; + + switch ( m_reg2 ) + { + case 0x75: + case 0xb5: + case 0xf5: + return m_rambank; + + default: + logerror("%s: unknown reg2 read: %02x\n", machine().describe_context(), m_reg2); + return 0x00; + } +} + +static ADDRESS_MAP_START( dashhero_io_map, AS_IO, 8, sigmab98_state ) + ADDRESS_MAP_GLOBAL_MASK(0xff) + + AM_RANGE( 0x00, 0x01 ) AM_DEVREADWRITE("ymz", ymz280b_device, read, write ) + + AM_RANGE( 0xa0, 0xa1 ) AM_READWRITE(gegege_regs_r, gegege_regs_w ) + // AM_RANGE( 0xa2, 0xa3 ) + AM_RANGE( 0xa4, 0xa5 ) AM_READWRITE(dashhero_regs2_r, dashhero_regs2_w ) + + AM_RANGE( 0xc0, 0xc0 ) AM_READ_PORT( "EEPROM" ) AM_WRITE(eeprom_w) + AM_RANGE( 0xc2, 0xc2 ) AM_READ_PORT( "BUTTON" ) + AM_RANGE( 0xc4, 0xc4 ) AM_READ_PORT( "PAYOUT" ) AM_WRITE(c4_w ) + AM_RANGE( 0xc6, 0xc6 ) AM_WRITE(c6_w ) AM_RANGE( 0xc8, 0xc8 ) AM_WRITE(c8_w ) AM_RANGE( 0xe5, 0xe5 ) AM_READNOP // during irq @@ -699,7 +1036,7 @@ void sigmab98_state::screen_eof_sammymdl(screen_device &screen, bool state) void sigmab98_state::show_3_outputs() { #ifdef MAME_DEBUG -// popmessage("COIN: %02X LED: %02X HOP: %02X", m_out[0], m_out[1], m_out[2]); + popmessage("COIN: %02X LED: %02X HOP: %02X", m_out[0], m_out[1], m_out[2]); #endif } // Port 31 @@ -757,10 +1094,11 @@ static ADDRESS_MAP_START( animalc_map, AS_PROGRAM, 8, sigmab98_state ) AM_RANGE( 0xb000, 0xbfff ) AM_RAMBANK("sprbank") AM_RANGE( 0xd000, 0xd1ff ) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette") - AM_RANGE( 0xd800, 0xd87f ) AM_RAM // table? + AM_RANGE( 0xd800, 0xd87f ) AM_RAM AM_SHARE("vtable") AM_RANGE( 0xe011, 0xe011 ) AM_WRITENOP // IRQ Enable? Screen disable? AM_RANGE( 0xe013, 0xe013 ) AM_READWRITE(vblank_r, vblank_w ) // IRQ Ack? + AM_RANGE( 0xe000, 0xe021 ) AM_READWRITE(vregs_r, vregs_w) AM_SHARE("vregs") AM_RANGE( 0xfe00, 0xffff ) AM_RAM // High speed internal RAM ADDRESS_MAP_END @@ -820,7 +1158,7 @@ WRITE8_MEMBER(sigmab98_state::haekaka_rombank_w) case 0x1f: case 0x65: // SPRITERAM - case 0x67: // PALETTE RAM + TABLE + REGS + case 0x67: // PALETTE RAM + VTABLE + VREGS break; default: @@ -922,11 +1260,19 @@ READ8_MEMBER(sigmab98_state::haekaka_b000_r) if (offset < 0x1000) return m_spriteram[offset]; - case 0x67: // PALETTERAM + TABLE? + REGS + case 0x67: // PALETTERAM + VTABLE + VREGS if (offset < 0x200) return m_paletteram[offset]; - else if (offset == (0xc013-0xb000)) - return haekaka_vblank_r(space, offset); + else if ((offset >= 0x800) && (offset < 0x880)) + { + return m_vtable[offset-0x800]; + } + else if (offset >= (0xc000-0xb000) && offset <= (0xc021-0xb000)) + { + if (offset == (0xc013-0xb000)) + return haekaka_vblank_r(space, 0); + return vregs_r(space, offset-(0xc000-0xb000)); + } break; } @@ -946,16 +1292,20 @@ WRITE8_MEMBER(sigmab98_state::haekaka_b000_w) } break; - case 0x67: // PALETTERAM + TABLE? + REGS + case 0x67: // PALETTERAM + VTABLE + VREGS if (offset < 0x200) { m_palette->write(space, offset, data); -// m_generic_paletteram_8[offset] = data; return; } else if ((offset >= 0x800) && (offset < 0x880)) { - // table? + m_vtable[offset-0x800] = data; + return; + } + else if (offset >= (0xc000-0xb000) && offset <= (0xc021-0xb000)) + { + vregs_w(space, offset-(0xc000-0xb000), data); return; } break; @@ -983,9 +1333,9 @@ WRITE8_MEMBER(sigmab98_state::haekaka_leds_w) WRITE8_MEMBER(sigmab98_state::haekaka_coin_w) { coin_counter_w(machine(), 0, data & 0x01 ); // medal out -// data & 0x02 ? -// data & 0x04 ? -// data & 0x10 ? +// data & 0x02 ? +// data & 0x04 ? +// data & 0x10 ? m_out[0] = data; show_3_outputs(); @@ -1051,6 +1401,8 @@ WRITE8_MEMBER(sigmab98_state::itazuram_rombank_w) m_rombank = data; switch (data) { +// case 0x0f: // demo mode, after title + case 0x14: // 3800 IS ROM membank("rombank0")->set_base(rom + 0x8000); membank("rombank1")->set_base(rom + 0x9000); @@ -1157,7 +1509,7 @@ WRITE8_MEMBER(sigmab98_state::itazuram_rambank_w) m_rambank = data; switch (data) { - case 0x52: membank("palbank")->set_base(m_nvram); break; + case 0x52: membank("palbank")->set_base(m_nvram); break; case 0x64: membank("palbank")->set_base(m_paletteram); break; default: logerror("%s: unknown ram bank = %02x, reg2 = %02x\n", machine().describe_context(), data, m_reg2); @@ -1191,7 +1543,6 @@ WRITE8_MEMBER(sigmab98_state::itazuram_nvram_palette_w) if (m_rambank == 0x64) { m_palette->write(space, offset, data); -// m_generic_paletteram_8[offset] = data; } else if (m_rambank == 0x52) { @@ -1209,7 +1560,6 @@ WRITE8_MEMBER(sigmab98_state::itazuram_palette_w) { if (offset < 0x200) m_palette->write(space, offset, data); -// m_generic_paletteram_8[offset] = data; } else { @@ -1228,10 +1578,11 @@ static ADDRESS_MAP_START( itazuram_map, AS_PROGRAM, 8, sigmab98_state ) AM_RANGE( 0x4800, 0x57ff ) AM_READ_BANK( "rombank1" ) AM_WRITE_BANK( "sprbank1" ) AM_RANGE( 0x5800, 0x59ff ) AM_READWRITE(itazuram_palette_r, itazuram_palette_w ) - AM_RANGE( 0x6000, 0x607f ) AM_RAM // table? + AM_RANGE( 0x6000, 0x607f ) AM_RAM AM_SHARE("vtable") AM_RANGE( 0x6811, 0x6811 ) AM_WRITENOP // IRQ Enable? Screen disable? AM_RANGE( 0x6813, 0x6813 ) AM_WRITENOP // IRQ Ack? + AM_RANGE( 0x6800, 0x6821 ) AM_READWRITE(vregs_r, vregs_w) AM_SHARE("vregs") AM_RANGE( 0xdc00, 0xfdff ) AM_READ_BANK( "palbank" ) AM_WRITE(itazuram_nvram_palette_w ) AM_SHARE( "nvram" ) // nvram | paletteram AM_RANGE( 0xfe00, 0xffff ) AM_RAM // High speed internal RAM @@ -1300,8 +1651,8 @@ WRITE8_MEMBER(sigmab98_state::tdoboon_rombank_w) case 0x1f: case 0x64: // SPRITERAM - case 0x66: // PALETTE RAM + TABLE - case 0x67: // REGS + case 0x66: // PALETTE RAM + VTABLE + case 0x67: // VREGS break; default: @@ -1399,14 +1750,22 @@ READ8_MEMBER(sigmab98_state::tdoboon_c000_r) return m_spriteram[offset]; break; - case 0x66: // PALETTERAM + TABLE? + case 0x66: // PALETTERAM + VTABLE if (offset < 0x200) return m_paletteram[offset]; + else if ((offset >= 0x800) && (offset < 0x880)) + { + return m_vtable[offset-0x800]; + } break; - case 0x67: // REGS - if (offset == (0xc013-0xc000)) - return haekaka_vblank_r(space, offset); + case 0x67: // VREGS + if (offset >= (0xc000-0xc000) && offset <= (0xc021-0xc000)) + { + if (offset == (0xc013-0xc000)) + return haekaka_vblank_r(space, 0); + return vregs_r(space, offset-(0xc000-0xc000)); + } break; } @@ -1426,16 +1785,23 @@ WRITE8_MEMBER(sigmab98_state::tdoboon_c000_w) } break; - case 0x66: // PALETTERAM + TABLE? + case 0x66: // PALETTERAM + VTABLE if (offset < 0x200) { m_palette->write(space, offset, data); -// m_generic_paletteram_8[offset] = data; return; } else if ((offset >= 0x800) && (offset < 0x880)) { - // table? + m_vtable[offset-0x800] = data; + return; + } + break; + + case 0x67: // VREGS + if (offset >= (0xc000-0xc000) && offset <= (0xc021-0xc000)) + { + vregs_w(space, offset-(0xc000-0xc000), data); return; } break; @@ -1510,14 +1876,14 @@ GFXDECODE_END ***************************************************************************/ /*************************************************************************** - GeGeGe no Kitarou Youkai Slot + Sigma B-98 Games ***************************************************************************/ -static INPUT_PORTS_START( gegege ) - +// 1 button (plus bet and payout) +static INPUT_PORTS_START( sigma_1b ) PORT_START("EEPROM") - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) // protection? checks. Must be 0 - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_VBLANK("screen") // protection? checks. Must be 0 + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) // Related to d013. Must be 0 + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_VBLANK("screen") // Related to d013. Must be 0 PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) @@ -1525,18 +1891,18 @@ static INPUT_PORTS_START( gegege ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) - PORT_START("IN1") + PORT_START("BUTTON") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(5) // ? (coin error, pulses mask 4 of port c6) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(5) PORT_NAME("Medal") // coin/medal in (coin error) PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("hopper", ticket_dispenser_device, line_r) PORT_SERVICE( 0x08, IP_ACTIVE_LOW ) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("Bet") // bet / select in test menu - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("Play") // play game / select in test menu + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_GAMBLE_BET ) PORT_CODE(KEYCODE_1) // bet / select in test menu + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_START("IN2") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("Pay Out") // pay out / change option in test menu + PORT_START("PAYOUT") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) // pay out / change option in test menu PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) @@ -1544,83 +1910,41 @@ static INPUT_PORTS_START( gegege ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) - INPUT_PORTS_END -/*************************************************************************** - PEPSI Man -***************************************************************************/ - -static INPUT_PORTS_START( pepsiman ) - - PORT_START("EEPROM") - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) // protection? checks. Must be 0 - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_VBLANK("screen") // protection? checks. Must be 0 - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) - - PORT_START("IN1") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(5) // ? (coin error, pulses mask 4 of port c6) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(5) PORT_NAME("Medal") // coin/medal in (coin error) - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("hopper", ticket_dispenser_device, line_r) - PORT_SERVICE( 0x08, IP_ACTIVE_LOW ) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_GAMBLE_BET ) PORT_CODE(KEYCODE_1) // bet / select in test menu - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("Rock (Gu)") - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("Scissors (Choki)") - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("Paper (Par)") - - PORT_START("IN2") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) // pay out / enter in test menu - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) +// 3 buttons (plus bet and payout) +static INPUT_PORTS_START( sigma_3b ) + PORT_INCLUDE( sigma_1b ) + PORT_MODIFY("BUTTON") + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON2 ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON3 ) INPUT_PORTS_END -/*************************************************************************** - Uchuu Tokkyuu Medalian -***************************************************************************/ +// 5 buttons (plus bet and payout) +static INPUT_PORTS_START( sigma_5b ) + PORT_INCLUDE( sigma_1b ) -static INPUT_PORTS_START( ucytokyu ) + PORT_MODIFY("BUTTON") + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON2 ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON3 ) - PORT_START("EEPROM") - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) // protection? checks. Must be 0 - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_VBLANK("screen") // protection? checks. Must be 0 - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("eeprom", eeprom_serial_93cxx_device, do_read) + PORT_MODIFY("PAYOUT") + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON4 ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON5 ) +INPUT_PORTS_END - PORT_START("IN1") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(10) // ? (coin error, pulses mask 4 of port c6) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(10) PORT_NAME("Medal") // coin/medal in (coin error) - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_READ_LINE_DEVICE_MEMBER("hopper", ticket_dispenser_device, line_r) - PORT_SERVICE( 0x08, IP_ACTIVE_LOW ) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_GAMBLE_BET ) PORT_CODE(KEYCODE_1) // bet / enter in test menu +// Joystick (plus bet and payout) +static INPUT_PORTS_START( sigma_js ) + PORT_INCLUDE( sigma_1b ) + + PORT_MODIFY("BUTTON") PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) - PORT_START("IN2") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) // pay out / back in test menu + PORT_MODIFY("PAYOUT") PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) - INPUT_PORTS_END /*************************************************************************** @@ -1679,38 +2003,52 @@ INPUT_PORTS_END ***************************************************************************/ /*************************************************************************** - GeGeGe no Kitarou Youkai Slot + Sigma B-98 Games ***************************************************************************/ -INTERRUPT_GEN_MEMBER(sigmab98_state::gegege_vblank_interrupt) +MACHINE_RESET_MEMBER(sigmab98_state,sigmab98) +{ + m_rombank = 0; + membank("rombank")->set_entry(0); + + m_rambank = 0; + membank("rambank")->set_entry(0); +} + +INTERRUPT_GEN_MEMBER(sigmab98_state::sigmab98_vblank_interrupt) { device.execute().set_input_line_and_vector(0, HOLD_LINE, 0x5a); } -static MACHINE_CONFIG_START( gegege, sigmab98_state ) +static MACHINE_CONFIG_START( sigmab98, sigmab98_state ) MCFG_CPU_ADD("maincpu", Z80, 10000000) // !! TAXAN KY-80, clock @X1? !! MCFG_CPU_PROGRAM_MAP(gegege_mem_map) MCFG_CPU_IO_MAP(gegege_io_map) - MCFG_CPU_VBLANK_INT_DRIVER("screen", sigmab98_state, gegege_vblank_interrupt) + MCFG_CPU_VBLANK_INT_DRIVER("screen", sigmab98_state, sigmab98_vblank_interrupt) + + MCFG_MACHINE_RESET_OVERRIDE(sigmab98_state, sigmab98) MCFG_NVRAM_ADD_0FILL("nvram") MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") MCFG_TICKET_DISPENSER_ADD("hopper", attotime::from_msec(200), TICKET_MOTOR_ACTIVE_LOW, TICKET_STATUS_ACTIVE_LOW ) + // video hardware MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_REFRESH_RATE(60) // ? MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */) // game reads vblank state - MCFG_SCREEN_SIZE(0x200, 0x200) + MCFG_SCREEN_SIZE(0x140, 0x100) MCFG_SCREEN_VISIBLE_AREA(0,0x140-1, 0,0xf0-1) MCFG_SCREEN_UPDATE_DRIVER(sigmab98_state, screen_update_sigmab98) MCFG_SCREEN_PALETTE("palette") MCFG_GFXDECODE_ADD("gfxdecode", "palette", sigmab98) - MCFG_PALETTE_ADD("palette", 0x100) + MCFG_PALETTE_ADD("palette", 0x100 + 1) MCFG_PALETTE_FORMAT(xRRRRRGGGGGBBBBB) MCFG_PALETTE_ENDIANNESS(ENDIANNESS_BIG) + MCFG_BUFFERED_SPRITERAM8_ADD("spriteram") + // sound hardware MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") @@ -1719,6 +2057,27 @@ static MACHINE_CONFIG_START( gegege, sigmab98_state ) MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) MACHINE_CONFIG_END +static MACHINE_CONFIG_DERIVED( dodghero, sigmab98 ) + MCFG_CPU_MODIFY("maincpu") + MCFG_CPU_PROGRAM_MAP( dodghero_mem_map ) + MCFG_CPU_IO_MAP( dodghero_io_map ) +MACHINE_CONFIG_END + +static MACHINE_CONFIG_DERIVED( gegege, sigmab98 ) + MCFG_CPU_MODIFY("maincpu") + MCFG_CPU_PROGRAM_MAP( gegege_mem_map ) + MCFG_CPU_IO_MAP( gegege_io_map ) +MACHINE_CONFIG_END + +static MACHINE_CONFIG_DERIVED( dashhero, sigmab98 ) + MCFG_CPU_MODIFY("maincpu") + MCFG_CPU_PROGRAM_MAP( gegege_mem_map ) + MCFG_CPU_IO_MAP( dashhero_io_map ) + + MCFG_DEVICE_REMOVE("nvram") // FIXME: does not survive between sessions otherwise +MACHINE_CONFIG_END + + /*************************************************************************** Sammy Medal Games ***************************************************************************/ @@ -1728,6 +2087,20 @@ MACHINE_RESET_MEMBER(sigmab98_state,sammymdl) m_maincpu->set_state_int(Z80_PC, 0x400); // code starts at 400 ??? (000 = cart header) } +TIMER_DEVICE_CALLBACK_MEMBER(sigmab98_state::sammymdl_irq) +{ + int scanline = param; + + if(scanline == 240) + m_maincpu->set_input_line_and_vector(0,HOLD_LINE, m_vblank_vector); + + if(scanline == 128) + m_maincpu->set_input_line_and_vector(0,HOLD_LINE, m_timer0_vector); + + if(scanline == 32) + m_maincpu->set_input_line_and_vector(0,HOLD_LINE, m_timer1_vector); +} + static MACHINE_CONFIG_START( sammymdl, sigmab98_state ) MCFG_CPU_ADD("maincpu", Z80, XTAL_20MHz / 2) // !! KL5C80A120FP @ 10MHz? (actually 4 times faster than Z80) !! MCFG_CPU_PROGRAM_MAP( animalc_map ) @@ -1742,7 +2115,8 @@ static MACHINE_CONFIG_START( sammymdl, sigmab98_state ) // video hardware MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) + MCFG_SCREEN_REFRESH_RATE(60) // ? + MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */) // game reads vblank state MCFG_SCREEN_SIZE(0x140, 0x100) MCFG_SCREEN_VISIBLE_AREA(0, 0x140-1, 0, 0xf0-1) MCFG_SCREEN_UPDATE_DRIVER(sigmab98_state, screen_update_sigmab98) @@ -1750,10 +2124,12 @@ static MACHINE_CONFIG_START( sammymdl, sigmab98_state ) MCFG_SCREEN_PALETTE("palette") MCFG_GFXDECODE_ADD("gfxdecode", "palette", sigmab98) - MCFG_PALETTE_ADD("palette", 0x100) + MCFG_PALETTE_ADD("palette", 0x100 + 1) MCFG_PALETTE_FORMAT(xRRRRRGGGGGBBBBB) MCFG_PALETTE_ENDIANNESS(ENDIANNESS_BIG) +// MCFG_BUFFERED_SPRITERAM8_ADD("spriteram") + // sound hardware MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") @@ -1762,74 +2138,39 @@ static MACHINE_CONFIG_START( sammymdl, sigmab98_state ) MCFG_SOUND_ROUTE(1, "rspeaker", 0.80) MACHINE_CONFIG_END - -/*************************************************************************** - Animal Catch -***************************************************************************/ - -TIMER_DEVICE_CALLBACK_MEMBER(sigmab98_state::sammymd1_irq) -{ - int scanline = param; - - if(scanline == 240) - m_maincpu->set_input_line_and_vector(0,HOLD_LINE, m_vblank_vector); - - if(scanline == 128) - m_maincpu->set_input_line_and_vector(0,HOLD_LINE, m_timer0_vector); - - if(scanline == 32) - m_maincpu->set_input_line_and_vector(0,HOLD_LINE, m_timer1_vector); -} - static MACHINE_CONFIG_DERIVED( animalc, sammymdl ) MCFG_CPU_MODIFY("maincpu") MCFG_CPU_PROGRAM_MAP( animalc_map ) MCFG_CPU_IO_MAP( animalc_io ) - MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", sigmab98_state, sammymd1_irq, "screen", 0, 1) + MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", sigmab98_state, sammymdl_irq, "screen", 0, 1) MACHINE_CONFIG_END -/*************************************************************************** - Hae Hae Ka Ka Ka -***************************************************************************/ - static MACHINE_CONFIG_DERIVED( haekaka, sammymdl ) MCFG_CPU_MODIFY("maincpu") MCFG_CPU_PROGRAM_MAP( haekaka_map ) MCFG_CPU_IO_MAP( haekaka_io ) - MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", sigmab98_state, sammymd1_irq, "screen", 0, 1) + MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", sigmab98_state, sammymdl_irq, "screen", 0, 1) MACHINE_CONFIG_END -/*************************************************************************** - Itazura Monkey -***************************************************************************/ - static MACHINE_CONFIG_DERIVED( itazuram, sammymdl ) MCFG_CPU_MODIFY("maincpu") MCFG_CPU_PROGRAM_MAP( itazuram_map ) MCFG_CPU_IO_MAP( itazuram_io ) - MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", sigmab98_state, sammymd1_irq, "screen", 0, 1) + MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", sigmab98_state, sammymdl_irq, "screen", 0, 1) MACHINE_CONFIG_END -/*************************************************************************** - Pye-nage Taikai -***************************************************************************/ - static MACHINE_CONFIG_DERIVED( pyenaget, sammymdl ) MCFG_CPU_MODIFY("maincpu") MCFG_CPU_PROGRAM_MAP( haekaka_map ) MCFG_CPU_IO_MAP( pyenaget_io ) - MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", sigmab98_state, sammymd1_irq, "screen", 0, 1) + MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", sigmab98_state, sammymdl_irq, "screen", 0, 1) MACHINE_CONFIG_END -/*************************************************************************** - Taihou de Doboon -***************************************************************************/ - static MACHINE_CONFIG_DERIVED( tdoboon, sammymdl ) MCFG_CPU_MODIFY("maincpu") MCFG_CPU_PROGRAM_MAP( tdoboon_map ) MCFG_CPU_IO_MAP( tdoboon_io ) - MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", sigmab98_state, sammymd1_irq, "screen", 0, 1) + MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", sigmab98_state, sammymdl_irq, "screen", 0, 1) MCFG_SCREEN_MODIFY("screen") MCFG_SCREEN_VISIBLE_AREA(0,0x140-1, 0+4,0xf0+4-1) @@ -1842,6 +2183,54 @@ MACHINE_CONFIG_END ***************************************************************************/ +/*************************************************************************** + + Minna Atsumare! Dodge Hero + +***************************************************************************/ + +ROM_START( dodghero ) + ROM_REGION( 0x20000, "maincpu", 0 ) + ROM_LOAD( "b9802-1d.ic7", 0x00000, 0x20000, CRC(093492e3) SHA1(d4dd104dc2410d97add532eea031cbc1ede3b0b1) ) + + ROM_REGION( 0x100000, "sprites", 0 ) + ROM_LOAD( "b9802-2.ic12", 0x00000, 0x80000, CRC(bb810ab8) SHA1(02bb1bb9b6dd0d24401c8a8c579f5ebcba963d8f) ) + ROM_LOAD( "b9802-3a.ic13", 0x80000, 0x80000, CRC(8792e487) SHA1(c5ed8059cd40a00656016b33762a04b9bedd7f06) ) + + ROM_REGION( 0x100000, "ymz", 0 ) + ROM_LOAD( "b9802-5.ic16", 0x00000, 0x80000, CRC(4840bdbd) SHA1(82f286ef848df9b6dcb5ff3b3aaa11d8e93e995b) ) + ROM_LOAD( "b9802-6.ic26", 0x80000, 0x80000, CRC(d83d8537) SHA1(9a5afdc68417db828a09188d653552452930b136) ) +ROM_END + +DRIVER_INIT_MEMBER(sigmab98_state,dodghero) +{ + // ROM banks + UINT8 *rom = memregion("maincpu")->base(); + membank("rombank")->configure_entries(0, 0x18*2, rom + 0x8000, 0x800); + + // RAM banks + UINT8 *bankedram = auto_alloc_array(machine(), UINT8, 0x800 * 2); + membank("rambank")->configure_entries(0, 2, bankedram, 0x800); +} + +/*************************************************************************** + + Itazura Daisuki! Sushimaru Kun + +***************************************************************************/ + +ROM_START( sushimar ) + ROM_REGION( 0x20000, "maincpu", 0 ) + ROM_LOAD( "b9803-1c.ic7", 0x00000, 0x20000, CRC(8ad3b7be) SHA1(14d8cec6723f230d4167de91b5b1103fe40755bc) ) + + ROM_REGION( 0x100000, "sprites", 0 ) + ROM_LOAD( "b9803-2.ic12", 0x00000, 0x80000, CRC(cae710a4) SHA1(c0511412d8feaa032b8bcd72074522d1b90f22b2) ) + ROM_LOAD( "b9803-03.ic13", 0x80000, 0x80000, CRC(f69f37f6) SHA1(546045b50dbc3ef45fc4dd1c7f2f6a23dfdc53d8) ) + + ROM_REGION( 0x80000, "ymz", 0 ) + ROM_LOAD( "b9803-5a.ic16", 0x00000, 0x80000, CRC(da3f36aa) SHA1(0caffbe6726afd41763f25378f8820724aa7bbce) ) +ROM_END + /*************************************************************************** GeGeGe no Kitarou Youkai Slot @@ -1894,13 +2283,13 @@ DRIVER_INIT_MEMBER(sigmab98_state,gegege) { UINT8 *rom = memregion("maincpu")->base(); - // Protection? - rom[0x0bdd] = 0xc9; + // Related to d013 +// rom[0x0bdd] = 0xc9; - rom[0x0bf9] = 0xc9; +// rom[0x0bf9] = 0xc9; - rom[0x0dec] = 0x00; - rom[0x0ded] = 0x00; +// rom[0x0dec] = 0x00; +// rom[0x0ded] = 0x00; // EEPROM timing checks rom[0x8138] = 0x00; @@ -1920,6 +2309,44 @@ DRIVER_INIT_MEMBER(sigmab98_state,gegege) membank("rambank")->set_entry(0); } +/*************************************************************************** + + Burning Sanrinsya - Burning Tricycle + +***************************************************************************/ + +ROM_START( b3rinsya ) + ROM_REGION( 0x20000, "maincpu", 0 ) + ROM_LOAD( "b9805-1c.ic7", 0x00000, 0x20000, CRC(a8cde2f4) SHA1(74d1f3f1710084d788a71dec0366f2c3f756fdf8) ) + + ROM_REGION( 0x100000, "sprites", 0 ) + ROM_LOAD( "b9805-2.ic12", 0x00000, 0x80000, CRC(7ec2e957) SHA1(1eb9095663d4f8f8f0c77f151918af1978332b3d) ) + ROM_LOAD( "b9805-3.ic13", 0x80000, 0x80000, CRC(449d0848) SHA1(63e91e4be8b58a6ebf1777ed5a9c23416bacba48) ) + + ROM_REGION( 0x80000, "ymz", 0 ) + ROM_LOAD( "b9805-5.ic16", 0x00000, 0x80000, CRC(f686f886) SHA1(ab68d12c5cb3a9fbc8a178739f39a2ff3104a0a1) ) +ROM_END + +DRIVER_INIT_MEMBER(sigmab98_state,b3rinsya) +{ + UINT8 *rom = memregion("maincpu")->base(); + + // EEPROM timing checks + rom[0x8138] = 0x00; + rom[0x8139] = 0x00; + + rom[0x8164] = 0x00; + rom[0x8165] = 0x00; + + // ROM banks + membank("rombank")->configure_entries(0, 0x18, rom + 0x8000, 0x1000); + membank("rombank")->set_entry(0); + + // RAM banks + UINT8 *bankedram = auto_alloc_array(machine(), UINT8, 0x800 * 2); + membank("rambank")->configure_entries(0, 2, bankedram, 0x800); + membank("rambank")->set_entry(0); +} /*************************************************************************** @@ -1943,13 +2370,13 @@ DRIVER_INIT_MEMBER(sigmab98_state,pepsiman) { UINT8 *rom = memregion("maincpu")->base(); - // Protection? - rom[0x058a] = 0xc9; + // Related to d013 +// rom[0x058a] = 0xc9; - rom[0x05a6] = 0xc9; +// rom[0x05a6] = 0xc9; - rom[0xa00e] = 0x00; - rom[0xa00f] = 0x00; +// rom[0xa00e] = 0x00; +// rom[0xa00f] = 0x00; // EEPROM timing checks rom[0x8138] = 0x00; @@ -1969,6 +2396,46 @@ DRIVER_INIT_MEMBER(sigmab98_state,pepsiman) membank("rambank")->set_entry(0); } +/*************************************************************************** + + Transformers Beast Wars II + +***************************************************************************/ + +ROM_START( tbeastw2 ) + ROM_REGION( 0x20000, "maincpu", 0 ) + ROM_LOAD( "b9808-1b.ic7.bin", 0x00000, 0x20000, CRC(65f7e079) SHA1(d421da3c99d62d3228e1b9c1cfb2de51f0fcc56e) ) + + ROM_REGION( 0x180000, "sprites", 0 ) + ROM_LOAD( "b9808-2.ic12.bin", 0x000000, 0x80000, CRC(dda5c2d2) SHA1(1bb21e7251df93b0f502b716e958d81f4e4e46dd) ) + ROM_LOAD( "b9808-3.ic13.bin", 0x080000, 0x80000, CRC(80df49c6) SHA1(14342be3a176cdf015c0ac07a4f1c109862c67aa) ) + ROM_LOAD( "b9808-4.ic17.bin", 0x100000, 0x80000, CRC(d90961ea) SHA1(c2f226a528238eafc1ba37200da4ee6ce9b54325) ) + + ROM_REGION( 0x100000, "ymz", 0 ) + ROM_LOAD( "b9808-5.ic16.bin", 0x00000, 0x80000, CRC(762c6d5f) SHA1(0d4e35b7f346c8cc0c49163474f34c1fc462998a) ) + ROM_LOAD( "b9808-6.ic26.bin", 0x80000, 0x80000, CRC(9ed759c9) SHA1(963db80b8a107ce9292bbc776ba91bc76ad82d5b) ) +ROM_END + +DRIVER_INIT_MEMBER(sigmab98_state,tbeastw2) +{ + UINT8 *rom = memregion("maincpu")->base(); + + // EEPROM timing checks + rom[0x8138] = 0x00; + rom[0x8139] = 0x00; + + rom[0x8164] = 0x00; + rom[0x8165] = 0x00; + + // ROM banks + membank("rombank")->configure_entries(0, 0x18, rom + 0x8000, 0x1000); + membank("rombank")->set_entry(0); + + // RAM banks + UINT8 *bankedram = auto_alloc_array(machine(), UINT8, 0x800 * 2); + membank("rambank")->configure_entries(0, 2, bankedram, 0x800); + membank("rambank")->set_entry(0); +} /*************************************************************************** @@ -1994,13 +2461,13 @@ DRIVER_INIT_MEMBER(sigmab98_state,ucytokyu) { UINT8 *rom = memregion("maincpu")->base(); - // Protection? - rom[0x0bfa] = 0xc9; + // Related to d013 +// rom[0x0bfa] = 0xc9; - rom[0x0c16] = 0xc9; +// rom[0x0c16] = 0xc9; - rom[0xa43a] = 0x00; - rom[0xa43b] = 0x00; +// rom[0xa43a] = 0x00; +// rom[0xa43b] = 0x00; // EEPROM timing checks rom[0x8138] = 0x00; @@ -2020,6 +2487,46 @@ DRIVER_INIT_MEMBER(sigmab98_state,ucytokyu) membank("rambank")->set_entry(0); } +/*************************************************************************** + + Minna Ganbare! Dash Hero + +***************************************************************************/ + +ROM_START( dashhero ) + ROM_REGION( 0x20000, "maincpu", 0 ) + ROM_LOAD( "b098111-0101.ic7", 0x00000, 0x20000, CRC(46488393) SHA1(898bafbf5273b368cf963d863fb93e9fa0da816f) ) + + ROM_REGION( 0x180000, "sprites", 0 ) + ROM_LOAD( "b98114-0100.ic12", 0x000000, 0x80000, CRC(067625ea) SHA1(f9dccfc85adbb840da7512db0c88f554b453d2d2) ) + ROM_LOAD( "b98115-0100.ic13", 0x080000, 0x80000, CRC(d6f0b89d) SHA1(33b5f2f6529fd9a145ccb1b4deffabf5fa0d46cb) ) + ROM_LOAD( "b98116-0100.ic17", 0x100000, 0x80000, CRC(c0dbe953) SHA1(a75e202a0c1be988b8fd7d4ee23ebc82f6110e5f) ) + + ROM_REGION( 0x80000, "ymz", 0 ) + ROM_LOAD( "b098112-0100.ic16", 0x00000, 0x80000, CRC(26e5d6f5) SHA1(6fe6a26e51097886db58a6619b12a73cd21e7130) ) +ROM_END + +DRIVER_INIT_MEMBER(sigmab98_state,dashhero) +{ + UINT8 *rom = memregion("maincpu")->base(); + + // EEPROM timing checks + rom[0x8138] = 0x00; + rom[0x8139] = 0x00; + + rom[0x8162] = 0x00; + rom[0x8163] = 0x00; + + // ROM banks + membank("rombank")->configure_entries(0, 0x18, rom + 0x8000, 0x1000); + membank("rombank")->set_entry(0); + + // RAM banks + UINT8 *bankedram = auto_alloc_array(machine(), UINT8, 0x800 * 4); + membank("rambank")->configure_entries(0, 4, bankedram, 0x800); + membank("rambank")->set_entry(0); +} + /*************************************************************************** @@ -2267,6 +2774,12 @@ DRIVER_INIT_MEMBER(sigmab98_state,haekaka) m_spriteram.allocate(0x1000); memset(m_spriteram, 0, 0x1000); + m_vregs.allocate(0x22); + memset(m_vregs, 0, 0x22); + + m_vtable.allocate(0x80); + memset(m_vtable, 0, 0x80); + m_rombank = 0x65; m_rambank = 0x53; @@ -2282,13 +2795,18 @@ DRIVER_INIT_MEMBER(sigmab98_state,haekaka) ***************************************************************************/ -GAME( 1997, gegege, 0, gegege, gegege, sigmab98_state, gegege, ROT0, "Banpresto / Sigma", "GeGeGe no Kitarou Youkai Slot", 0 ) -GAME( 1997, pepsiman, 0, gegege, pepsiman, sigmab98_state, pepsiman, ROT0, "Sigma", "PEPSI Man", 0 ) -GAME( 1997, ucytokyu, 0, gegege, ucytokyu, sigmab98_state, ucytokyu, ROT0, "Sigma", "Uchuu Tokkyuu Medalian", 0 ) // Banpresto + others in the ROM +GAME( 1997, dodghero, 0, dodghero, sigma_1b, sigmab98_state, dodghero, ROT0, "Sigma", "Minna Atsumare! Dodge Hero", GAME_IMPERFECT_GRAPHICS ) +GAME( 1997, sushimar, 0, dodghero, sigma_3b, sigmab98_state, dodghero, ROT0, "Sigma", "Itazura Daisuki! Sushimaru Kun", GAME_IMPERFECT_GRAPHICS ) +GAME( 1997, gegege, 0, gegege, sigma_1b, sigmab98_state, gegege, ROT0, "Sigma / Banpresto", "GeGeGe no Kitarou Youkai Slot", GAME_IMPERFECT_GRAPHICS ) +GAME( 1997, b3rinsya, 0, gegege, sigma_5b, sigmab98_state, b3rinsya, ROT0, "Sigma", "Burning Sanrinsya - Burning Tricycle", GAME_IMPERFECT_GRAPHICS ) // 1997 in the rom +GAME( 1997, pepsiman, 0, gegege, sigma_3b, sigmab98_state, pepsiman, ROT0, "Sigma", "PEPSI Man", GAME_IMPERFECT_GRAPHICS ) +GAME( 1998, tbeastw2, 0, gegege, sigma_3b, sigmab98_state, tbeastw2, ROT0, "Sigma / Transformer Production Company / Takara", "Transformers Beast Wars II", GAME_IMPERFECT_GRAPHICS ) // 1997 in the rom +GAME( 1997, ucytokyu, 0, gegege, sigma_js, sigmab98_state, ucytokyu, ROT0, "Sigma", "Uchuu Tokkyuu Medalian", GAME_IMPERFECT_GRAPHICS ) // Banpresto + others in the ROM +GAME( 2000, dashhero, 0, dashhero, sigma_1b, sigmab98_state, dashhero, ROT0, "Sigma", "Minna Ganbare! Dash Hero", GAME_IMPERFECT_GRAPHICS | GAME_NOT_WORKING ) // 1999 in the rom // Sammy Medal Games: -GAME( 2000, sammymdl, 0, sammymdl, sammymdl, driver_device, 0, ROT0, "Sammy", "Sammy Medal Game System Bios", GAME_IS_BIOS_ROOT ) -GAME( 2000, animalc, sammymdl, animalc, sammymdl, sigmab98_state, animalc, ROT0, "Sammy", "Animal Catch", 0 ) -GAME( 2000, itazuram, sammymdl, itazuram, sammymdl, sigmab98_state, itazuram, ROT0, "Sammy", "Itazura Monkey", 0 ) -GAME( 2000, pyenaget, sammymdl, pyenaget, sammymdl, sigmab98_state, haekaka, ROT0, "Sammy", "Pye-nage Taikai", 0 ) -GAME( 2000, tdoboon, sammymdl, tdoboon, haekaka, sigmab98_state, haekaka, ROT0, "Sammy", "Taihou de Doboon", 0 ) -GAME( 2001, haekaka, sammymdl, haekaka, haekaka, sigmab98_state, haekaka, ROT0, "Sammy", "Hae Hae Ka Ka Ka", 0 ) +GAME( 2000, sammymdl, 0, sammymdl, sammymdl, driver_device, 0, ROT0, "Sammy", "Sammy Medal Game System Bios", GAME_IS_BIOS_ROOT ) +GAME( 2000, animalc, sammymdl, animalc, sammymdl, sigmab98_state, animalc, ROT0, "Sammy", "Animal Catch", GAME_IMPERFECT_GRAPHICS ) +GAME( 2000, itazuram, sammymdl, itazuram, sammymdl, sigmab98_state, itazuram, ROT0, "Sammy", "Itazura Monkey", GAME_IMPERFECT_GRAPHICS ) +GAME( 2000, pyenaget, sammymdl, pyenaget, sammymdl, sigmab98_state, haekaka, ROT0, "Sammy", "Pye-nage Taikai", GAME_IMPERFECT_GRAPHICS ) +GAME( 2000, tdoboon, sammymdl, tdoboon, haekaka, sigmab98_state, haekaka, ROT0, "Sammy", "Taihou de Doboon", GAME_IMPERFECT_GRAPHICS ) +GAME( 2001, haekaka, sammymdl, haekaka, haekaka, sigmab98_state, haekaka, ROT0, "Sammy", "Hae Hae Ka Ka Ka", GAME_IMPERFECT_GRAPHICS ) diff --git a/src/mame/mame.lst b/src/mame/mame.lst index 70a7aeb347f..4be280d771f 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -9726,9 +9726,14 @@ jwildb52a // (c) 199? Sigma jwildb52h // (c) 199? Sigma // Sigma B98 / Sammy Medal Games -gegege // (c) 1997 Banpresto / Sigma -pepsiman // (c) 1997 Sigma -ucytokyu // (c) 1997 Sigma +dodghero // b9802 (c) 1997 Sigma +sushimar // b9803 (c) 1997 Sigma +gegege // b9804 (c) 1997 Sigma / Banpresto +b3rinsya // b9805 (c) 1997 Sigma +pepsiman // b9806 (c) 1997 Sigma +tbeastw2 // b9808 (c) 1998 Sigma / Transformer Production Company / Takara +ucytokyu // b9809 (c) 1997 Sigma +dashhero // b9811 (c) 1999 Sigma sammymdl // (c) 2000-2003 Sammy animalc // (c) 2000 Sammy itazuram // (c) 2000 Sammy