supdrapo.c, suprgolf.c, suprloco.c, suprridr.c: added save state support (nw)

This commit is contained in:
Ivan Vangelista 2015-03-18 19:07:10 +01:00
parent 0e63709997
commit 57383a93df
8 changed files with 190 additions and 146 deletions

View File

@ -27,11 +27,11 @@
- Reworked inputs to match the standard poker inputs names/layout. - Reworked inputs to match the standard poker inputs names/layout.
- Hooked the payout switch. - Hooked the payout switch.
- Hooked a watchdog circuitery, that seems intended to reset - Hooked a watchdog circuitry, that seems intended to reset
the game and/or an external device. the game and/or an external device.
- Added machine start & reset. - Added machine start & reset.
- All clocks pre defined. - All clocks pre defined.
- Added ay8910 interfase as a preliminary attempt to analyze the unknown - Added ay8910 interface as a preliminary attempt to analyze the unknown
port writes when these ports are set as input. port writes when these ports are set as input.
- Figured out the following DIP switches: - Figured out the following DIP switches:
Auto Bet (No, Yes). Auto Bet (No, Yes).
@ -72,18 +72,24 @@ class supdrapo_state : public driver_device
public: public:
supdrapo_state(const machine_config &mconfig, device_type type, const char *tag) supdrapo_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag), : driver_device(mconfig, type, tag),
m_col_line(*this, "col_line"),
m_videoram(*this, "videoram"),
m_char_bank(*this, "char_bank"),
m_maincpu(*this, "maincpu"), m_maincpu(*this, "maincpu"),
m_gfxdecode(*this, "gfxdecode"), m_gfxdecode(*this, "gfxdecode"),
m_palette(*this, "palette") { } m_palette(*this, "palette"),
m_col_line(*this, "col_line"),
m_videoram(*this, "videoram"),
m_char_bank(*this, "char_bank") { }
required_device<cpu_device> m_maincpu;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
required_shared_ptr<UINT8> m_col_line; required_shared_ptr<UINT8> m_col_line;
required_shared_ptr<UINT8> m_videoram; required_shared_ptr<UINT8> m_videoram;
required_shared_ptr<UINT8> m_char_bank; required_shared_ptr<UINT8> m_char_bank;
UINT8 m_wdog; UINT8 m_wdog;
DECLARE_READ8_MEMBER(sdpoker_rng_r);
DECLARE_READ8_MEMBER(rng_r);
DECLARE_WRITE8_MEMBER(wdog8000_w); DECLARE_WRITE8_MEMBER(wdog8000_w);
DECLARE_WRITE8_MEMBER(debug8004_w); DECLARE_WRITE8_MEMBER(debug8004_w);
DECLARE_WRITE8_MEMBER(debug7c00_w); DECLARE_WRITE8_MEMBER(debug7c00_w);
@ -91,14 +97,13 @@ public:
DECLARE_WRITE8_MEMBER(payout_w); DECLARE_WRITE8_MEMBER(payout_w);
DECLARE_WRITE8_MEMBER(ay8910_outputa_w); DECLARE_WRITE8_MEMBER(ay8910_outputa_w);
DECLARE_WRITE8_MEMBER(ay8910_outputb_w); DECLARE_WRITE8_MEMBER(ay8910_outputb_w);
virtual void machine_start(); virtual void machine_start();
virtual void machine_reset(); virtual void machine_reset();
virtual void video_start(); virtual void video_start();
DECLARE_PALETTE_INIT(supdrapo); DECLARE_PALETTE_INIT(supdrapo);
UINT32 screen_update_supdrapo(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
required_device<cpu_device> m_maincpu; UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
}; };
@ -111,7 +116,7 @@ void supdrapo_state::video_start()
} }
UINT32 supdrapo_state::screen_update_supdrapo(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) UINT32 supdrapo_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{ {
int x, y; int x, y;
int count; int count;
@ -171,7 +176,7 @@ PALETTE_INIT_MEMBER(supdrapo_state, supdrapo)
R/W Handlers R/W Handlers
**********************************************************************/ **********************************************************************/
READ8_MEMBER(supdrapo_state::sdpoker_rng_r) READ8_MEMBER(supdrapo_state::rng_r)
{ {
return machine().rand(); return machine().rand();
} }
@ -251,6 +256,7 @@ WRITE8_MEMBER(supdrapo_state::payout_w)
void supdrapo_state::machine_start() void supdrapo_state::machine_start()
{ {
save_item(NAME(m_wdog));
} }
@ -282,7 +288,7 @@ static ADDRESS_MAP_START( sdpoker_mem, AS_PROGRAM, 8, supdrapo_state )
AM_RANGE(0x8005, 0x8005) AM_READ_PORT("SW1") AM_RANGE(0x8005, 0x8005) AM_READ_PORT("SW1")
AM_RANGE(0x8006, 0x8006) AM_READ_PORT("SW2") AM_RANGE(0x8006, 0x8006) AM_READ_PORT("SW2")
AM_RANGE(0x9000, 0x90ff) AM_RAM AM_SHARE("nvram") AM_RANGE(0x9000, 0x90ff) AM_RAM AM_SHARE("nvram")
AM_RANGE(0x9400, 0x9400) AM_READ(sdpoker_rng_r) AM_RANGE(0x9400, 0x9400) AM_READ(rng_r)
AM_RANGE(0x9800, 0x9801) AM_DEVWRITE("aysnd", ay8910_device, data_address_w) AM_RANGE(0x9800, 0x9801) AM_DEVWRITE("aysnd", ay8910_device, data_address_w)
ADDRESS_MAP_END ADDRESS_MAP_END
@ -453,7 +459,7 @@ static MACHINE_CONFIG_START( supdrapo, supdrapo_state )
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
MCFG_SCREEN_SIZE(256, 256) MCFG_SCREEN_SIZE(256, 256)
MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 0*8, 32*8-1) MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 0*8, 32*8-1)
MCFG_SCREEN_UPDATE_DRIVER(supdrapo_state, screen_update_supdrapo) MCFG_SCREEN_UPDATE_DRIVER(supdrapo_state, screen_update)
MCFG_SCREEN_PALETTE("palette") MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", supdrapo) MCFG_GFXDECODE_ADD("gfxdecode", "palette", supdrapo)
@ -600,6 +606,6 @@ ROM_END
**********************************************************************/ **********************************************************************/
/* YEAR NAME PARENT MACHINE INPUT INIT ROT COMPANY FULLNAME FLAGS... */ /* YEAR NAME PARENT MACHINE INPUT INIT ROT COMPANY FULLNAME FLAGS... */
GAME( 1983, supdrapo, 0, supdrapo, supdrapo, driver_device, 0, ROT90, "Valadon Automation (Stern Electronics license)", "Super Draw Poker (set 1)", 0 ) GAME( 1983, supdrapo, 0, supdrapo, supdrapo, driver_device, 0, ROT90, "Valadon Automation (Stern Electronics license)", "Super Draw Poker (set 1)", GAME_SUPPORTS_SAVE )
GAME( 1983, supdrapoa, supdrapo, supdrapo, supdrapo, driver_device, 0, ROT90, "Valadon Automation / Jeutel", "Super Draw Poker (set 2)", 0 ) GAME( 1983, supdrapoa, supdrapo, supdrapo, supdrapo, driver_device, 0, ROT90, "Valadon Automation / Jeutel", "Super Draw Poker (set 2)", GAME_SUPPORTS_SAVE )
GAME( 1983, supdrapob, supdrapo, supdrapo, supdrapo, driver_device, 0, ROT90, "bootleg", "Super Draw Poker (bootleg)", 0 ) GAME( 1983, supdrapob, supdrapo, supdrapo, supdrapo, driver_device, 0, ROT90, "bootleg", "Super Draw Poker (bootleg)", GAME_SUPPORTS_SAVE )

View File

@ -33,14 +33,20 @@ class suprgolf_state : public driver_device
public: public:
suprgolf_state(const machine_config &mconfig, device_type type, const char *tag) suprgolf_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag), : driver_device(mconfig, type, tag),
m_videoram(*this, "videoram"),
m_maincpu(*this, "maincpu"), m_maincpu(*this, "maincpu"),
m_msm(*this, "msm"), m_msm(*this, "msm"),
m_gfxdecode(*this, "gfxdecode"), m_gfxdecode(*this, "gfxdecode"),
m_palette(*this, "palette") { } m_palette(*this, "palette"),
m_videoram(*this, "videoram") { }
required_device<cpu_device> m_maincpu;
required_device<msm5205_device> m_msm;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
required_shared_ptr<UINT8> m_videoram;
tilemap_t *m_tilemap; tilemap_t *m_tilemap;
required_shared_ptr<UINT8> m_videoram;
UINT8 *m_paletteram; UINT8 *m_paletteram;
UINT8 *m_bg_vram; UINT8 *m_bg_vram;
UINT16 *m_bg_fb; UINT16 *m_bg_fb;
@ -54,34 +60,33 @@ public:
UINT8 m_palette_switch; UINT8 m_palette_switch;
UINT8 m_bg_vreg_test; UINT8 m_bg_vreg_test;
UINT8 m_toggle; UINT8 m_toggle;
DECLARE_READ8_MEMBER(suprgolf_videoram_r);
DECLARE_WRITE8_MEMBER(suprgolf_videoram_w); DECLARE_READ8_MEMBER(videoram_r);
DECLARE_READ8_MEMBER(suprgolf_bg_vram_r); DECLARE_WRITE8_MEMBER(videoram_w);
DECLARE_WRITE8_MEMBER(suprgolf_bg_vram_w); DECLARE_READ8_MEMBER(bg_vram_r);
DECLARE_WRITE8_MEMBER(suprgolf_pen_w); DECLARE_WRITE8_MEMBER(bg_vram_w);
DECLARE_WRITE8_MEMBER(pen_w);
DECLARE_WRITE8_MEMBER(adpcm_data_w); DECLARE_WRITE8_MEMBER(adpcm_data_w);
DECLARE_WRITE8_MEMBER(rom2_bank_select_w); DECLARE_WRITE8_MEMBER(rom2_bank_select_w);
DECLARE_READ8_MEMBER(suprgolf_vregs_r); DECLARE_READ8_MEMBER(vregs_r);
DECLARE_WRITE8_MEMBER(suprgolf_vregs_w); DECLARE_WRITE8_MEMBER(vregs_w);
DECLARE_READ8_MEMBER(rom_bank_select_r); DECLARE_READ8_MEMBER(rom_bank_select_r);
DECLARE_WRITE8_MEMBER(rom_bank_select_w); DECLARE_WRITE8_MEMBER(rom_bank_select_w);
DECLARE_READ8_MEMBER(pedal_extra_bits_r); DECLARE_READ8_MEMBER(pedal_extra_bits_r);
DECLARE_READ8_MEMBER(p1_r); DECLARE_READ8_MEMBER(p1_r);
DECLARE_READ8_MEMBER(p2_r); DECLARE_READ8_MEMBER(p2_r);
DECLARE_WRITE8_MEMBER(suprgolf_writeA); DECLARE_WRITE8_MEMBER(writeA);
DECLARE_WRITE8_MEMBER(suprgolf_writeB); DECLARE_WRITE8_MEMBER(writeB);
DECLARE_DRIVER_INIT(suprgolf); DECLARE_WRITE_LINE_MEMBER(adpcm_int);
TILE_GET_INFO_MEMBER(get_tile_info); TILE_GET_INFO_MEMBER(get_tile_info);
DECLARE_DRIVER_INIT(suprgolf);
virtual void machine_start(); virtual void machine_start();
virtual void machine_reset(); virtual void machine_reset();
virtual void video_start(); virtual void video_start();
UINT32 screen_update_suprgolf(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
DECLARE_WRITE_LINE_MEMBER(irqhandler); UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
DECLARE_WRITE_LINE_MEMBER(adpcm_int);
required_device<cpu_device> m_maincpu;
required_device<msm5205_device> m_msm;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
}; };
TILE_GET_INFO_MEMBER(suprgolf_state::get_tile_info) TILE_GET_INFO_MEMBER(suprgolf_state::get_tile_info)
@ -104,9 +109,19 @@ void suprgolf_state::video_start()
m_fg_fb = auto_alloc_array(machine(), UINT16, 0x2000*0x20); m_fg_fb = auto_alloc_array(machine(), UINT16, 0x2000*0x20);
m_tilemap->set_transparent_pen(15); m_tilemap->set_transparent_pen(15);
save_item(NAME(m_bg_bank));
save_item(NAME(m_vreg_bank));
save_item(NAME(m_vreg_pen));
save_item(NAME(m_palette_switch));
save_item(NAME(m_bg_vreg_test));
save_pointer(NAME(m_paletteram), 0x1000);
save_pointer(NAME(m_bg_vram), 0x2000*0x20);
save_pointer(NAME(m_bg_fb), 0x2000*0x20);
save_pointer(NAME(m_fg_fb), 0x2000*0x20);
} }
UINT32 suprgolf_state::screen_update_suprgolf(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) UINT32 suprgolf_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{ {
int x,y,count,color; int x,y,count,color;
bitmap.fill(m_palette->black_pen(), cliprect); bitmap.fill(m_palette->black_pen(), cliprect);
@ -150,7 +165,7 @@ UINT32 suprgolf_state::screen_update_suprgolf(screen_device &screen, bitmap_ind1
return 0; return 0;
} }
READ8_MEMBER(suprgolf_state::suprgolf_videoram_r) READ8_MEMBER(suprgolf_state::videoram_r)
{ {
if (m_palette_switch) if (m_palette_switch)
return m_paletteram[offset]; return m_paletteram[offset];
@ -158,7 +173,7 @@ READ8_MEMBER(suprgolf_state::suprgolf_videoram_r)
return m_videoram[offset]; return m_videoram[offset];
} }
WRITE8_MEMBER(suprgolf_state::suprgolf_videoram_w) WRITE8_MEMBER(suprgolf_state::videoram_w)
{ {
if(m_palette_switch) if(m_palette_switch)
{ {
@ -180,12 +195,12 @@ WRITE8_MEMBER(suprgolf_state::suprgolf_videoram_w)
} }
} }
READ8_MEMBER(suprgolf_state::suprgolf_vregs_r) READ8_MEMBER(suprgolf_state::vregs_r)
{ {
return m_vreg_bank; return m_vreg_bank;
} }
WRITE8_MEMBER(suprgolf_state::suprgolf_vregs_w) WRITE8_MEMBER(suprgolf_state::vregs_w)
{ {
//printf("%02x\n",data); //printf("%02x\n",data);
@ -200,12 +215,12 @@ WRITE8_MEMBER(suprgolf_state::suprgolf_vregs_w)
// printf("Video regs with data %02x activated\n",data); // printf("Video regs with data %02x activated\n",data);
} }
READ8_MEMBER(suprgolf_state::suprgolf_bg_vram_r) READ8_MEMBER(suprgolf_state::bg_vram_r)
{ {
return m_bg_vram[offset+m_bg_bank*0x2000]; return m_bg_vram[offset+m_bg_bank*0x2000];
} }
WRITE8_MEMBER(suprgolf_state::suprgolf_bg_vram_w) WRITE8_MEMBER(suprgolf_state::bg_vram_w)
{ {
UINT8 hi_nibble,lo_nibble; UINT8 hi_nibble,lo_nibble;
UINT8 hi_dirty_dot,lo_dirty_dot; // helpers UINT8 hi_dirty_dot,lo_dirty_dot; // helpers
@ -254,9 +269,14 @@ void suprgolf_state::machine_start()
{ {
membank("bank1")->configure_entries(0, 16, memregion("user2")->base(), 0x4000); membank("bank1")->configure_entries(0, 16, memregion("user2")->base(), 0x4000);
membank("bank2")->configure_entries(0, 64, memregion("user1")->base(), 0x4000); membank("bank2")->configure_entries(0, 64, memregion("user1")->base(), 0x4000);
save_item(NAME(m_rom_bank));
save_item(NAME(m_msm5205next));
save_item(NAME(m_msm_nmi_mask));
save_item(NAME(m_toggle));
} }
WRITE8_MEMBER(suprgolf_state::suprgolf_pen_w) WRITE8_MEMBER(suprgolf_state::pen_w)
{ {
m_vreg_pen = data; m_vreg_pen = data;
} }
@ -317,9 +337,9 @@ static ADDRESS_MAP_START( suprgolf_map, AS_PROGRAM, 8, suprgolf_state )
AM_RANGE(0x4000, 0x7fff) AM_ROMBANK("bank1") AM_RANGE(0x4000, 0x7fff) AM_ROMBANK("bank1")
AM_RANGE(0x4000, 0x4000) AM_WRITE(rom2_bank_select_w ) AM_RANGE(0x4000, 0x4000) AM_WRITE(rom2_bank_select_w )
AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank2") AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank2")
AM_RANGE(0xc000, 0xdfff) AM_READWRITE(suprgolf_bg_vram_r, suprgolf_bg_vram_w ) // banked background vram AM_RANGE(0xc000, 0xdfff) AM_READWRITE(bg_vram_r, bg_vram_w ) // banked background vram
AM_RANGE(0xe000, 0xefff) AM_READWRITE(suprgolf_videoram_r, suprgolf_videoram_w ) AM_SHARE("videoram") //foreground vram + paletteram AM_RANGE(0xe000, 0xefff) AM_READWRITE(videoram_r, videoram_w ) AM_SHARE("videoram") //foreground vram + paletteram
AM_RANGE(0xf000, 0xf000) AM_WRITE(suprgolf_pen_w ) AM_RANGE(0xf000, 0xf000) AM_WRITE(pen_w )
AM_RANGE(0xf800, 0xffff) AM_RAM AM_RANGE(0xf800, 0xffff) AM_RAM
ADDRESS_MAP_END ADDRESS_MAP_END
@ -416,21 +436,16 @@ static INPUT_PORTS_START( suprgolf )
PORT_DIPUNUSED_DIPLOC( 0x80, 0x00, "SW2:8" ) PORT_DIPUNUSED_DIPLOC( 0x80, 0x00, "SW2:8" )
INPUT_PORTS_END INPUT_PORTS_END
WRITE8_MEMBER(suprgolf_state::suprgolf_writeA) WRITE8_MEMBER(suprgolf_state::writeA)
{ {
osd_printf_debug("ymwA\n"); osd_printf_debug("ymwA\n");
} }
WRITE8_MEMBER(suprgolf_state::suprgolf_writeB) WRITE8_MEMBER(suprgolf_state::writeB)
{ {
osd_printf_debug("ymwA\n"); osd_printf_debug("ymwA\n");
} }
WRITE_LINE_MEMBER(suprgolf_state::irqhandler)
{
//m_maincpu->set_input_line(INPUT_LINE_NMI, state ? ASSERT_LINE : CLEAR_LINE);
}
WRITE_LINE_MEMBER(suprgolf_state::adpcm_int) WRITE_LINE_MEMBER(suprgolf_state::adpcm_int)
{ {
m_msm->reset_w(0); m_msm->reset_w(0);
@ -485,8 +500,8 @@ static MACHINE_CONFIG_START( suprgolf, suprgolf_state )
MCFG_I8255_IN_PORTA_CB(IOPORT("SYSTEM")) MCFG_I8255_IN_PORTA_CB(IOPORT("SYSTEM"))
MCFG_I8255_IN_PORTB_CB(READ8(suprgolf_state, rom_bank_select_r)) MCFG_I8255_IN_PORTB_CB(READ8(suprgolf_state, rom_bank_select_r))
MCFG_I8255_OUT_PORTB_CB(WRITE8(suprgolf_state, rom_bank_select_w)) MCFG_I8255_OUT_PORTB_CB(WRITE8(suprgolf_state, rom_bank_select_w))
MCFG_I8255_IN_PORTC_CB(READ8(suprgolf_state, suprgolf_vregs_r)) MCFG_I8255_IN_PORTC_CB(READ8(suprgolf_state, vregs_r))
MCFG_I8255_OUT_PORTC_CB(WRITE8(suprgolf_state, suprgolf_vregs_w)) MCFG_I8255_OUT_PORTC_CB(WRITE8(suprgolf_state, vregs_w))
/* video hardware */ /* video hardware */
MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_ADD("screen", RASTER)
@ -494,7 +509,7 @@ static MACHINE_CONFIG_START( suprgolf, suprgolf_state )
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */) MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */)
MCFG_SCREEN_SIZE(256, 256) MCFG_SCREEN_SIZE(256, 256)
MCFG_SCREEN_VISIBLE_AREA(0, 255, 0, 191) MCFG_SCREEN_VISIBLE_AREA(0, 255, 0, 191)
MCFG_SCREEN_UPDATE_DRIVER(suprgolf_state, screen_update_suprgolf) MCFG_SCREEN_UPDATE_DRIVER(suprgolf_state, screen_update)
MCFG_SCREEN_PALETTE("palette") MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", suprgolf) MCFG_GFXDECODE_ADD("gfxdecode", "palette", suprgolf)
@ -504,11 +519,11 @@ static MACHINE_CONFIG_START( suprgolf, suprgolf_state )
MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_SOUND_ADD("ymsnd", YM2203, MASTER_CLOCK/4) /* guess */ MCFG_SOUND_ADD("ymsnd", YM2203, MASTER_CLOCK/4) /* guess */
MCFG_YM2203_IRQ_HANDLER(WRITELINE(suprgolf_state, irqhandler)) //MCFG_YM2203_IRQ_HANDLER(INPUTLINE("maincpu", INPUT_LINE_NMI))
MCFG_AY8910_PORT_A_READ_CB(IOPORT("DSW0")) MCFG_AY8910_PORT_A_READ_CB(IOPORT("DSW0"))
MCFG_AY8910_PORT_B_READ_CB(IOPORT("DSW1")) MCFG_AY8910_PORT_B_READ_CB(IOPORT("DSW1"))
MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(suprgolf_state, suprgolf_writeA)) MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(suprgolf_state, writeA))
MCFG_AY8910_PORT_B_WRITE_CB(WRITE8(suprgolf_state, suprgolf_writeB)) MCFG_AY8910_PORT_B_WRITE_CB(WRITE8(suprgolf_state, writeB))
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.5) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.5)
MCFG_SOUND_ADD("msm", MSM5205, XTAL_384kHz) /* guess */ MCFG_SOUND_ADD("msm", MSM5205, XTAL_384kHz) /* guess */
@ -621,5 +636,5 @@ DRIVER_INIT_MEMBER(suprgolf_state,suprgolf)
ROM[0x6d72+(0x4000*3)-0x4000] = 0x20; //patch ROM check ROM[0x6d72+(0x4000*3)-0x4000] = 0x20; //patch ROM check
} }
GAME( 1989, suprgolf, 0, suprgolf, suprgolf, suprgolf_state, suprgolf, ROT0, "Nasco", "Super Crowns Golf (Japan)", GAME_IMPERFECT_GRAPHICS | GAME_NO_COCKTAIL ) GAME( 1989, suprgolf, 0, suprgolf, suprgolf, suprgolf_state, suprgolf, ROT0, "Nasco", "Super Crowns Golf (Japan)", GAME_IMPERFECT_GRAPHICS | GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE )
GAME( 1989, albatross, suprgolf, suprgolf, suprgolf, driver_device, 0, ROT0, "Nasco", "Albatross (US Prototype?)", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_NO_COCKTAIL ) GAME( 1989, albatross, suprgolf, suprgolf, suprgolf, driver_device, 0, ROT0, "Nasco", "Albatross (US Prototype?)", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_NO_COCKTAIL| GAME_SUPPORTS_SAVE )

View File

@ -5,7 +5,7 @@ Super Locomotive
driver by Zsolt Vasvari driver by Zsolt Vasvari
TODO: TODO:
- Bit 5 in suprloco_control_w is pulsed when loco turns "super". This is supposed - Bit 5 in control_w is pulsed when loco turns "super". This is supposed
to make red parts of sprites blink to purple, it's not clear how this is to make red parts of sprites blink to purple, it's not clear how this is
implemented in hardware, there's a hack to support it. implemented in hardware, there's a hack to support it.
@ -25,7 +25,7 @@ Sega PCB 834-5137
#include "sound/sn76496.h" #include "sound/sn76496.h"
#include "includes/suprloco.h" #include "includes/suprloco.h"
WRITE8_MEMBER(suprloco_state::suprloco_soundport_w) WRITE8_MEMBER(suprloco_state::soundport_w)
{ {
soundlatch_byte_w(space, 0, data); soundlatch_byte_w(space, 0, data);
m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE); m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
@ -42,11 +42,11 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, suprloco_state )
AM_RANGE(0xd800, 0xd800) AM_READ_PORT("P2") AM_RANGE(0xd800, 0xd800) AM_READ_PORT("P2")
AM_RANGE(0xe000, 0xe000) AM_READ_PORT("DSW1") AM_RANGE(0xe000, 0xe000) AM_READ_PORT("DSW1")
AM_RANGE(0xe001, 0xe001) AM_READ_PORT("DSW2") AM_RANGE(0xe001, 0xe001) AM_READ_PORT("DSW2")
AM_RANGE(0xe800, 0xe800) AM_WRITE(suprloco_soundport_w) AM_RANGE(0xe800, 0xe800) AM_WRITE(soundport_w)
AM_RANGE(0xe801, 0xe801) AM_READWRITE(suprloco_control_r, suprloco_control_w) AM_RANGE(0xe801, 0xe801) AM_READWRITE(control_r, control_w)
AM_RANGE(0xf000, 0xf6ff) AM_RAM_WRITE(suprloco_videoram_w) AM_SHARE("videoram") AM_RANGE(0xf000, 0xf6ff) AM_RAM_WRITE(videoram_w) AM_SHARE("videoram")
AM_RANGE(0xf700, 0xf7df) AM_RAM /* unused */ AM_RANGE(0xf700, 0xf7df) AM_RAM /* unused */
AM_RANGE(0xf7e0, 0xf7ff) AM_RAM_WRITE(suprloco_scrollram_w) AM_SHARE("scrollram") AM_RANGE(0xf7e0, 0xf7ff) AM_RAM_WRITE(scrollram_w) AM_SHARE("scrollram")
AM_RANGE(0xf800, 0xffff) AM_RAM AM_RANGE(0xf800, 0xffff) AM_RAM
ADDRESS_MAP_END ADDRESS_MAP_END
@ -175,7 +175,7 @@ static MACHINE_CONFIG_START( suprloco, suprloco_state )
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(5000)) MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(5000))
MCFG_SCREEN_SIZE(32*8, 32*8) MCFG_SCREEN_SIZE(32*8, 32*8)
MCFG_SCREEN_VISIBLE_AREA(1*8, 31*8-1, 0*8, 28*8-1) MCFG_SCREEN_VISIBLE_AREA(1*8, 31*8-1, 0*8, 28*8-1)
MCFG_SCREEN_UPDATE_DRIVER(suprloco_state, screen_update_suprloco) MCFG_SCREEN_UPDATE_DRIVER(suprloco_state, screen_update)
MCFG_SCREEN_PALETTE("palette") MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", suprloco) MCFG_GFXDECODE_ADD("gfxdecode", "palette", suprloco)
@ -297,5 +297,5 @@ DRIVER_INIT_MEMBER(suprloco_state,suprloco)
GAME( 1982, suprloco, 0, suprloco, suprloco, suprloco_state, suprloco, ROT0, "Sega", "Super Locomotive (Rev.A)", 0 ) GAME( 1982, suprloco, 0, suprloco, suprloco, suprloco_state, suprloco, ROT0, "Sega", "Super Locomotive (Rev.A)", GAME_SUPPORTS_SAVE )
GAME( 1982, suprlocoo, suprloco, suprloco, suprloco, suprloco_state, suprloco, ROT0, "Sega", "Super Locomotive", 0 ) GAME( 1982, suprlocoo, suprloco, suprloco, suprloco, suprloco_state, suprloco, ROT0, "Sega", "Super Locomotive", GAME_SUPPORTS_SAVE )

View File

@ -89,6 +89,12 @@
#include "sound/ay8910.h" #include "sound/ay8910.h"
void suprridr_state::machine_start()
{
save_item(NAME(m_nmi_enable));
save_item(NAME(m_sound_data));
}
/************************************* /*************************************
* *
* Interrupt generation * Interrupt generation
@ -164,8 +170,8 @@ WRITE8_MEMBER(suprridr_state::coin_lock_w)
static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, suprridr_state ) static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, suprridr_state )
AM_RANGE(0x0000, 0x7fff) AM_ROM AM_RANGE(0x0000, 0x7fff) AM_ROM
AM_RANGE(0x8000, 0x87ff) AM_RAM AM_RANGE(0x8000, 0x87ff) AM_RAM
AM_RANGE(0x8800, 0x8bff) AM_RAM_WRITE(suprridr_bgram_w) AM_SHARE("bgram") AM_RANGE(0x8800, 0x8bff) AM_RAM_WRITE(bgram_w) AM_SHARE("bgram")
AM_RANGE(0x9000, 0x97ff) AM_RAM_WRITE(suprridr_fgram_w) AM_SHARE("fgram") AM_RANGE(0x9000, 0x97ff) AM_RAM_WRITE(fgram_w) AM_SHARE("fgram")
AM_RANGE(0x9800, 0x983f) AM_RAM AM_RANGE(0x9800, 0x983f) AM_RAM
AM_RANGE(0x9840, 0x987f) AM_RAM AM_SHARE("spriteram") AM_RANGE(0x9840, 0x987f) AM_RAM AM_SHARE("spriteram")
AM_RANGE(0x9880, 0x9bff) AM_RAM AM_RANGE(0x9880, 0x9bff) AM_RAM
@ -173,12 +179,12 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, suprridr_state )
AM_RANGE(0xa800, 0xa800) AM_READ_PORT("SYSTEM") AM_RANGE(0xa800, 0xa800) AM_READ_PORT("SYSTEM")
AM_RANGE(0xb000, 0xb000) AM_READ_PORT("DSW") AM_WRITE(nmi_enable_w) AM_RANGE(0xb000, 0xb000) AM_READ_PORT("DSW") AM_WRITE(nmi_enable_w)
AM_RANGE(0xb002, 0xb003) AM_WRITE(coin_lock_w) AM_RANGE(0xb002, 0xb003) AM_WRITE(coin_lock_w)
AM_RANGE(0xb006, 0xb006) AM_WRITE(suprridr_flipx_w) AM_RANGE(0xb006, 0xb006) AM_WRITE(flipx_w)
AM_RANGE(0xb007, 0xb007) AM_WRITE(suprridr_flipy_w) AM_RANGE(0xb007, 0xb007) AM_WRITE(flipy_w)
AM_RANGE(0xb800, 0xb800) AM_WRITE(sound_data_w) AM_RANGE(0xb800, 0xb800) AM_WRITE(sound_data_w)
AM_RANGE(0xc801, 0xc801) AM_WRITE(suprridr_fgdisable_w) AM_RANGE(0xc801, 0xc801) AM_WRITE(fgdisable_w)
AM_RANGE(0xc802, 0xc802) AM_WRITE(suprridr_fgscrolly_w) AM_RANGE(0xc802, 0xc802) AM_WRITE(fgscrolly_w)
AM_RANGE(0xc804, 0xc804) AM_WRITE(suprridr_bgscrolly_w) AM_RANGE(0xc804, 0xc804) AM_WRITE(bgscrolly_w)
AM_RANGE(0xc000, 0xefff) AM_ROM AM_RANGE(0xc000, 0xefff) AM_ROM
ADDRESS_MAP_END ADDRESS_MAP_END
@ -223,12 +229,12 @@ ADDRESS_MAP_END
#define SUPRRIDR_P1_CONTROL_PORT_TAG ("CONTP1") #define SUPRRIDR_P1_CONTROL_PORT_TAG ("CONTP1")
#define SUPRRIDR_P2_CONTROL_PORT_TAG ("CONTP2") #define SUPRRIDR_P2_CONTROL_PORT_TAG ("CONTP2")
CUSTOM_INPUT_MEMBER(suprridr_state::suprridr_control_r) CUSTOM_INPUT_MEMBER(suprridr_state::control_r)
{ {
UINT32 ret; UINT32 ret;
/* screen flip multiplexes controls */ /* screen flip multiplexes controls */
if (suprridr_is_screen_flipped()) if (is_screen_flipped())
ret = ioport(SUPRRIDR_P2_CONTROL_PORT_TAG)->read(); ret = ioport(SUPRRIDR_P2_CONTROL_PORT_TAG)->read();
else else
ret = ioport(SUPRRIDR_P1_CONTROL_PORT_TAG)->read(); ret = ioport(SUPRRIDR_P1_CONTROL_PORT_TAG)->read();
@ -239,7 +245,7 @@ CUSTOM_INPUT_MEMBER(suprridr_state::suprridr_control_r)
static INPUT_PORTS_START( suprridr ) static INPUT_PORTS_START( suprridr )
PORT_START("INPUTS") PORT_START("INPUTS")
PORT_BIT( 0xff, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, suprridr_state,suprridr_control_r, NULL) PORT_BIT( 0xff, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, suprridr_state, control_r, NULL)
PORT_START("SYSTEM") PORT_START("SYSTEM")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 ) PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 )
@ -353,7 +359,7 @@ static MACHINE_CONFIG_START( suprridr, suprridr_state )
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
MCFG_SCREEN_SIZE(32*8, 32*8) MCFG_SCREEN_SIZE(32*8, 32*8)
MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1) MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1)
MCFG_SCREEN_UPDATE_DRIVER(suprridr_state, screen_update_suprridr) MCFG_SCREEN_UPDATE_DRIVER(suprridr_state, screen_update)
MCFG_SCREEN_PALETTE("palette") MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", suprridr) MCFG_GFXDECODE_ADD("gfxdecode", "palette", suprridr)
@ -423,4 +429,4 @@ ROM_END
* *
*************************************/ *************************************/
GAME( 1983, suprridr, 0, suprridr, suprridr, driver_device, 0, ROT90, "Taito Corporation (Venture Line license)", "Super Rider", GAME_IMPERFECT_SOUND ) GAME( 1983, suprridr, 0, suprridr, suprridr, driver_device, 0, ROT90, "Taito Corporation (Venture Line license)", "Super Rider", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )

View File

@ -3,33 +3,38 @@ class suprloco_state : public driver_device
public: public:
suprloco_state(const machine_config &mconfig, device_type type, const char *tag) suprloco_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag), : driver_device(mconfig, type, tag),
m_spriteram(*this, "spriteram"),
m_videoram(*this, "videoram"),
m_scrollram(*this, "scrollram"),
m_maincpu(*this, "maincpu"), m_maincpu(*this, "maincpu"),
m_audiocpu(*this, "audiocpu"), m_audiocpu(*this, "audiocpu"),
m_gfxdecode(*this, "gfxdecode") { } m_gfxdecode(*this, "gfxdecode"),
m_spriteram(*this, "spriteram"),
m_videoram(*this, "videoram"),
m_scrollram(*this, "scrollram") { }
required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_audiocpu;
required_device<gfxdecode_device> m_gfxdecode;
required_shared_ptr<UINT8> m_spriteram; required_shared_ptr<UINT8> m_spriteram;
required_shared_ptr<UINT8> m_videoram; required_shared_ptr<UINT8> m_videoram;
required_shared_ptr<UINT8> m_scrollram; required_shared_ptr<UINT8> m_scrollram;
tilemap_t *m_bg_tilemap; tilemap_t *m_bg_tilemap;
int m_control; int m_control;
DECLARE_WRITE8_MEMBER(suprloco_soundport_w); DECLARE_WRITE8_MEMBER(soundport_w);
DECLARE_WRITE8_MEMBER(suprloco_videoram_w); DECLARE_WRITE8_MEMBER(videoram_w);
DECLARE_WRITE8_MEMBER(suprloco_scrollram_w); DECLARE_WRITE8_MEMBER(scrollram_w);
DECLARE_WRITE8_MEMBER(suprloco_control_w); DECLARE_WRITE8_MEMBER(control_w);
DECLARE_READ8_MEMBER(suprloco_control_r); DECLARE_READ8_MEMBER(control_r);
DECLARE_DRIVER_INIT(suprloco);
TILE_GET_INFO_MEMBER(get_tile_info); TILE_GET_INFO_MEMBER(get_tile_info);
virtual void video_start(); virtual void video_start();
DECLARE_PALETTE_INIT(suprloco); DECLARE_PALETTE_INIT(suprloco);
UINT32 screen_update_suprloco(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); DECLARE_DRIVER_INIT(suprloco);
UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
inline void draw_pixel(bitmap_ind16 &bitmap,const rectangle &cliprect,int x,int y,int color,int flip); inline void draw_pixel(bitmap_ind16 &bitmap,const rectangle &cliprect,int x,int y,int color,int flip);
void draw_sprite(bitmap_ind16 &bitmap,const rectangle &cliprect,int spr_number); void draw_sprite(bitmap_ind16 &bitmap,const rectangle &cliprect,int spr_number);
void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect); void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect);
required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_audiocpu;
required_device<gfxdecode_device> m_gfxdecode;
}; };

View File

@ -11,47 +11,56 @@ class suprridr_state : public driver_device
public: public:
suprridr_state(const machine_config &mconfig, device_type type, const char *tag) suprridr_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag), : driver_device(mconfig, type, tag),
m_fgram(*this, "fgram"),
m_bgram(*this, "bgram"),
m_spriteram(*this, "spriteram"),
m_maincpu(*this, "maincpu"), m_maincpu(*this, "maincpu"),
m_audiocpu(*this, "audiocpu"), m_audiocpu(*this, "audiocpu"),
m_gfxdecode(*this, "gfxdecode"), m_gfxdecode(*this, "gfxdecode"),
m_palette(*this, "palette") { } m_palette(*this, "palette"),
m_fgram(*this, "fgram"),
m_bgram(*this, "bgram"),
m_spriteram(*this, "spriteram") { }
required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_audiocpu;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
required_shared_ptr<UINT8> m_fgram;
required_shared_ptr<UINT8> m_bgram;
required_shared_ptr<UINT8> m_spriteram;
UINT8 m_nmi_enable; UINT8 m_nmi_enable;
UINT8 m_sound_data; UINT8 m_sound_data;
required_shared_ptr<UINT8> m_fgram;
required_shared_ptr<UINT8> m_bgram;
tilemap_t *m_fg_tilemap; tilemap_t *m_fg_tilemap;
tilemap_t *m_bg_tilemap; tilemap_t *m_bg_tilemap;
tilemap_t *m_bg_tilemap_noscroll; tilemap_t *m_bg_tilemap_noscroll;
UINT8 m_flipx; UINT8 m_flipx;
UINT8 m_flipy; UINT8 m_flipy;
required_shared_ptr<UINT8> m_spriteram;
DECLARE_WRITE8_MEMBER(nmi_enable_w); DECLARE_WRITE8_MEMBER(nmi_enable_w);
DECLARE_WRITE8_MEMBER(sound_data_w); DECLARE_WRITE8_MEMBER(sound_data_w);
DECLARE_WRITE8_MEMBER(sound_irq_ack_w); DECLARE_WRITE8_MEMBER(sound_irq_ack_w);
DECLARE_WRITE8_MEMBER(coin_lock_w); DECLARE_WRITE8_MEMBER(coin_lock_w);
DECLARE_WRITE8_MEMBER(suprridr_flipx_w); DECLARE_WRITE8_MEMBER(flipx_w);
DECLARE_WRITE8_MEMBER(suprridr_flipy_w); DECLARE_WRITE8_MEMBER(flipy_w);
DECLARE_WRITE8_MEMBER(suprridr_fgdisable_w); DECLARE_WRITE8_MEMBER(fgdisable_w);
DECLARE_WRITE8_MEMBER(suprridr_fgscrolly_w); DECLARE_WRITE8_MEMBER(fgscrolly_w);
DECLARE_WRITE8_MEMBER(suprridr_bgscrolly_w); DECLARE_WRITE8_MEMBER(bgscrolly_w);
DECLARE_WRITE8_MEMBER(suprridr_bgram_w); DECLARE_WRITE8_MEMBER(bgram_w);
DECLARE_WRITE8_MEMBER(suprridr_fgram_w); DECLARE_WRITE8_MEMBER(fgram_w);
DECLARE_CUSTOM_INPUT_MEMBER(suprridr_control_r);
DECLARE_READ8_MEMBER(sound_data_r); DECLARE_READ8_MEMBER(sound_data_r);
DECLARE_CUSTOM_INPUT_MEMBER(control_r);
TILE_GET_INFO_MEMBER(get_tile_info); TILE_GET_INFO_MEMBER(get_tile_info);
TILE_GET_INFO_MEMBER(get_tile_info2); TILE_GET_INFO_MEMBER(get_tile_info2);
virtual void video_start();
DECLARE_PALETTE_INIT(suprridr);
UINT32 screen_update_suprridr(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
INTERRUPT_GEN_MEMBER(main_nmi_gen); INTERRUPT_GEN_MEMBER(main_nmi_gen);
TIMER_CALLBACK_MEMBER(delayed_sound_w); TIMER_CALLBACK_MEMBER(delayed_sound_w);
int suprridr_is_screen_flipped();
required_device<cpu_device> m_maincpu; virtual void machine_start();
required_device<cpu_device> m_audiocpu; virtual void video_start();
required_device<gfxdecode_device> m_gfxdecode; DECLARE_PALETTE_INIT(suprridr);
required_device<palette_device> m_palette;
UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
int is_screen_flipped();
}; };

View File

@ -1,6 +1,6 @@
/*************************************************************************** /***************************************************************************
video.c suprloco.c
Functions to emulate the video hardware of the machine. Functions to emulate the video hardware of the machine.
@ -98,6 +98,8 @@ void suprloco_state::video_start()
m_bg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(suprloco_state::get_tile_info),this),TILEMAP_SCAN_ROWS,8,8,32,32); m_bg_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(suprloco_state::get_tile_info),this),TILEMAP_SCAN_ROWS,8,8,32,32);
m_bg_tilemap->set_scroll_rows(32); m_bg_tilemap->set_scroll_rows(32);
save_item(NAME(m_control));
} }
@ -108,13 +110,13 @@ void suprloco_state::video_start()
***************************************************************************/ ***************************************************************************/
WRITE8_MEMBER(suprloco_state::suprloco_videoram_w) WRITE8_MEMBER(suprloco_state::videoram_w)
{ {
m_videoram[offset] = data; m_videoram[offset] = data;
m_bg_tilemap->mark_tile_dirty(offset/2); m_bg_tilemap->mark_tile_dirty(offset/2);
} }
WRITE8_MEMBER(suprloco_state::suprloco_scrollram_w) WRITE8_MEMBER(suprloco_state::scrollram_w)
{ {
int adj = flip_screen() ? -8 : 8; int adj = flip_screen() ? -8 : 8;
@ -122,7 +124,7 @@ WRITE8_MEMBER(suprloco_state::suprloco_scrollram_w)
m_bg_tilemap->set_scrollx(offset, data - adj); m_bg_tilemap->set_scrollx(offset, data - adj);
} }
WRITE8_MEMBER(suprloco_state::suprloco_control_w) WRITE8_MEMBER(suprloco_state::control_w)
{ {
/* There is probably a palette select in here */ /* There is probably a palette select in here */
@ -148,7 +150,7 @@ WRITE8_MEMBER(suprloco_state::suprloco_control_w)
} }
READ8_MEMBER(suprloco_state::suprloco_control_r) READ8_MEMBER(suprloco_state::control_r)
{ {
return m_control; return m_control;
} }
@ -256,7 +258,7 @@ void suprloco_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprec
} }
} }
UINT32 suprloco_state::screen_update_suprloco(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) UINT32 suprloco_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{ {
m_bg_tilemap->draw(screen, bitmap, cliprect, 0,0); m_bg_tilemap->draw(screen, bitmap, cliprect, 0,0);
draw_sprites(bitmap,cliprect); draw_sprites(bitmap,cliprect);

View File

@ -44,6 +44,9 @@ void suprridr_state::video_start()
m_bg_tilemap_noscroll = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(suprridr_state::get_tile_info),this), TILEMAP_SCAN_ROWS, 8,8, 32,32); m_bg_tilemap_noscroll = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(suprridr_state::get_tile_info),this), TILEMAP_SCAN_ROWS, 8,8, 32,32);
m_fg_tilemap->set_transparent_pen(0); m_fg_tilemap->set_transparent_pen(0);
save_item(NAME(m_flipx));
save_item(NAME(m_flipy));
} }
@ -91,39 +94,39 @@ PALETTE_INIT_MEMBER(suprridr_state, suprridr)
* *
*************************************/ *************************************/
WRITE8_MEMBER(suprridr_state::suprridr_flipx_w) WRITE8_MEMBER(suprridr_state::flipx_w)
{ {
m_flipx = data & 1; m_flipx = data & 1;
machine().tilemap().set_flip_all((m_flipx ? TILEMAP_FLIPX : 0) | (m_flipy ? TILEMAP_FLIPY : 0)); machine().tilemap().set_flip_all((m_flipx ? TILEMAP_FLIPX : 0) | (m_flipy ? TILEMAP_FLIPY : 0));
} }
WRITE8_MEMBER(suprridr_state::suprridr_flipy_w) WRITE8_MEMBER(suprridr_state::flipy_w)
{ {
m_flipy = data & 1; m_flipy = data & 1;
machine().tilemap().set_flip_all((m_flipx ? TILEMAP_FLIPX : 0) | (m_flipy ? TILEMAP_FLIPY : 0)); machine().tilemap().set_flip_all((m_flipx ? TILEMAP_FLIPX : 0) | (m_flipy ? TILEMAP_FLIPY : 0));
} }
WRITE8_MEMBER(suprridr_state::suprridr_fgdisable_w) WRITE8_MEMBER(suprridr_state::fgdisable_w)
{ {
m_fg_tilemap->enable(~data & 1); m_fg_tilemap->enable(~data & 1);
} }
WRITE8_MEMBER(suprridr_state::suprridr_fgscrolly_w) WRITE8_MEMBER(suprridr_state::fgscrolly_w)
{ {
m_fg_tilemap->set_scrolly(0, data); m_fg_tilemap->set_scrolly(0, data);
} }
WRITE8_MEMBER(suprridr_state::suprridr_bgscrolly_w) WRITE8_MEMBER(suprridr_state::bgscrolly_w)
{ {
m_bg_tilemap->set_scrolly(0, data); m_bg_tilemap->set_scrolly(0, data);
} }
int suprridr_state::suprridr_is_screen_flipped() int suprridr_state::is_screen_flipped()
{ {
return m_flipx; /* or is it flipy? */ return m_flipx; /* or is it flipy? */
} }
@ -136,7 +139,7 @@ int suprridr_state::suprridr_is_screen_flipped()
* *
*************************************/ *************************************/
WRITE8_MEMBER(suprridr_state::suprridr_bgram_w) WRITE8_MEMBER(suprridr_state::bgram_w)
{ {
m_bgram[offset] = data; m_bgram[offset] = data;
m_bg_tilemap->mark_tile_dirty(offset); m_bg_tilemap->mark_tile_dirty(offset);
@ -144,7 +147,7 @@ WRITE8_MEMBER(suprridr_state::suprridr_bgram_w)
} }
WRITE8_MEMBER(suprridr_state::suprridr_fgram_w) WRITE8_MEMBER(suprridr_state::fgram_w)
{ {
m_fgram[offset] = data; m_fgram[offset] = data;
m_fg_tilemap->mark_tile_dirty(offset); m_fg_tilemap->mark_tile_dirty(offset);
@ -158,11 +161,9 @@ WRITE8_MEMBER(suprridr_state::suprridr_fgram_w)
* *
*************************************/ *************************************/
UINT32 suprridr_state::screen_update_suprridr(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) UINT32 suprridr_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{ {
UINT8 *spriteram = m_spriteram;
rectangle subclip; rectangle subclip;
int i;
const rectangle &visarea = screen.visible_area(); const rectangle &visarea = screen.visible_area();
/* render left 4 columns with no scroll */ /* render left 4 columns with no scroll */
@ -188,14 +189,14 @@ UINT32 suprridr_state::screen_update_suprridr(screen_device &screen, bitmap_ind1
m_fg_tilemap->draw(screen, bitmap, cliprect, 0, 0); m_fg_tilemap->draw(screen, bitmap, cliprect, 0, 0);
/* draw the sprites */ /* draw the sprites */
for (i = 0; i < 48; i++) for (int i = 0; i < 48; i++)
{ {
int code = (spriteram[i*4+1] & 0x3f) | ((spriteram[i*4+2] >> 1) & 0x40); int code = (m_spriteram[i*4+1] & 0x3f) | ((m_spriteram[i*4+2] >> 1) & 0x40);
int color = spriteram[i*4+2] & 0x7f; int color = m_spriteram[i*4+2] & 0x7f;
int fx = spriteram[i*4+1] & 0x40; int fx = m_spriteram[i*4+1] & 0x40;
int fy = spriteram[i*4+1] & 0x80; int fy = m_spriteram[i*4+1] & 0x80;
int x = spriteram[i*4+3]; int x = m_spriteram[i*4+3];
int y = 240 - spriteram[i*4+0]; int y = 240 - m_spriteram[i*4+0];
if (m_flipx) if (m_flipx)
{ {