diff --git a/.gitattributes b/.gitattributes index 9fad9f400d9..8fa4676ddb2 100644 --- a/.gitattributes +++ b/.gitattributes @@ -2448,6 +2448,7 @@ src/mame/includes/flstory.h svneol=native#text/plain src/mame/includes/foodf.h svneol=native#text/plain src/mame/includes/fromanc2.h svneol=native#text/plain src/mame/includes/fromance.h svneol=native#text/plain +src/mame/includes/funkybee.h svneol=native#text/plain src/mame/includes/gaelco2.h svneol=native#text/plain src/mame/includes/gaelco3d.h svneol=native#text/plain src/mame/includes/gaelcrpt.h svneol=native#text/plain @@ -3198,7 +3199,6 @@ src/mame/video/fitfight.c svneol=native#text/plain src/mame/video/flkatck.c svneol=native#text/plain src/mame/video/flower.c svneol=native#text/plain src/mame/video/flstory.c svneol=native#text/plain -src/mame/video/flyball.c svneol=native#text/plain src/mame/video/foodf.c svneol=native#text/plain src/mame/video/freekick.c svneol=native#text/plain src/mame/video/fromanc2.c svneol=native#text/plain diff --git a/src/mame/drivers/fitfight.c b/src/mame/drivers/fitfight.c index b6eea20be67..e3f8fffde36 100644 --- a/src/mame/drivers/fitfight.c +++ b/src/mame/drivers/fitfight.c @@ -88,55 +88,45 @@ Stephh's notes : #include "includes/fitfight.h" -UINT16 *fitfight_spriteram; -static UINT16 *fof_100000; -static UINT16 *fof_600000; -UINT16 *fof_700000; -static UINT16 *fof_800000; -UINT16 *fof_900000; -UINT16 *fof_a00000; - -UINT16 *fof_bak_tileram; -UINT16 *fof_mid_tileram; -UINT16 *fof_txt_tileram; -char bbprot_kludge; - -static UINT16 fitfight_700000_data = 0; - static READ16_HANDLER(fitfight_700000_r) { - UINT16 data = fitfight_700000_data; + fitfight_state *state = (fitfight_state *)space->machine->driver_data; + UINT16 data = state->fof_700000_data; return (data << 2); } static READ16_HANDLER(histryma_700000_r) { - UINT16 data = (fitfight_700000_data & 0x00AA); - data |= ((fitfight_700000_data & 0x0055) >> 2); + fitfight_state *state = (fitfight_state *)space->machine->driver_data; + UINT16 data = (state->fof_700000_data & 0x00AA); + data |= ((state->fof_700000_data & 0x0055) >> 2); return (data); } static READ16_HANDLER(bbprot_700000_r) { + fitfight_state *state = (fitfight_state *)space->machine->driver_data; UINT16 data = 0; - data = (fitfight_700000_data & 0x000b); - data |= ((fitfight_700000_data & 0x01d0) >> 2); - data |= ((fitfight_700000_data & 0x0004) << 6); - data |= ((fitfight_700000_data & 0x0020) << 2); + data = (state->fof_700000_data & 0x000b); + data |= ((state->fof_700000_data & 0x01d0) >> 2); + data |= ((state->fof_700000_data & 0x0004) << 6); + data |= ((state->fof_700000_data & 0x0020) << 2); return (data); } static WRITE16_HANDLER(fitfight_700000_w) { - COMBINE_DATA(&fof_700000[offset]); // needed for scrolling + fitfight_state *state = (fitfight_state *)space->machine->driver_data; + COMBINE_DATA(&state->fof_700000[offset]); // needed for scrolling + if (data < 0x0200) // to avoid considering writes of 0x0200 - fitfight_700000_data = data; + state->fof_700000_data = data; } static ADDRESS_MAP_START( fitfight_main_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x000000, 0x0fffff) AM_ROM - AM_RANGE(0x100000, 0x100001) AM_WRITE(SMH_RAM) AM_BASE(&fof_100000) + AM_RANGE(0x100000, 0x100001) AM_WRITE(SMH_RAM) AM_BASE_MEMBER(fitfight_state, fof_100000) //written at scanline 5, allways 1. Used by histryma/fitfight @0x0000ec2c/@0x0000f076 AM_RANGE(0x200000, 0x200001) AM_READ_PORT("P1_P2") @@ -144,7 +134,7 @@ static ADDRESS_MAP_START( fitfight_main_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x400000, 0x400001) AM_READ_PORT("SYSTEM_DSW2") AM_RANGE(0x500000, 0x500001) AM_READ_PORT("DSW3_DSW1") - AM_RANGE(0x600000, 0x600001) AM_WRITE(SMH_RAM) AM_BASE(&fof_600000) + AM_RANGE(0x600000, 0x600001) AM_WRITE(SMH_RAM) AM_BASE_MEMBER(fitfight_state, fof_600000) // Is 0x600000 controlling the slave audio CPU? data is 0x1111000zzzzzzzzz (9 sign. bits) // Used by histryma/fitfight: // @0x000031ae/0x00002b3a: 0xF000, once, during POST @@ -155,24 +145,24 @@ static ADDRESS_MAP_START( fitfight_main_map, ADDRESS_SPACE_PROGRAM, 16 ) // @0x000037a6/0x000030e6: 0x??dd byte from 0xe08c05, 0xF101 then 0xF001/0xF157 then 0xF057 // AM_RANGE(0x700000, 0x700001) AM_READ(xxxx) /* see init */ - AM_RANGE(0x700000, 0x700001) AM_WRITE(fitfight_700000_w) AM_BASE(&fof_700000) + AM_RANGE(0x700000, 0x700001) AM_WRITE(fitfight_700000_w) AM_BASE_MEMBER(fitfight_state, fof_700000) // kept at 0xe07900/0xe04c56 - AM_RANGE(0x800000, 0x800001) AM_WRITE(SMH_RAM) AM_BASE(&fof_800000) + AM_RANGE(0x800000, 0x800001) AM_WRITE(SMH_RAM) AM_BASE_MEMBER(fitfight_state, fof_800000) //written at scanline 1, allways 0. Used by histryma/fitfight @0x00001d76/@0x00000f6a - AM_RANGE(0x900000, 0x900001) AM_WRITE(SMH_RAM) AM_BASE(&fof_900000) //mid tilemap scroll + AM_RANGE(0x900000, 0x900001) AM_WRITE(SMH_RAM) AM_BASE_MEMBER(fitfight_state, fof_900000) //mid tilemap scroll // fitfigth: @0x00002b42,@0x00000f76 // histryma: @0x000031b6,@0x00001d82 - AM_RANGE(0xa00000, 0xa00001) AM_WRITE(SMH_RAM) AM_BASE(&fof_a00000) //bak tilemap scroll + AM_RANGE(0xa00000, 0xa00001) AM_WRITE(SMH_RAM) AM_BASE_MEMBER(fitfight_state, fof_a00000) //bak tilemap scroll // fitfight: @0x00002b4a,@0x00000f82 // histryma: @0x000031be,@0x00001d8e AM_RANGE(0xb00000, 0xb03fff) AM_WRITENOP /* unused layer? */ - AM_RANGE(0xb04000, 0xb07fff) AM_READWRITE(SMH_RAM,fof_bak_tileram_w) AM_BASE(&fof_bak_tileram) - AM_RANGE(0xb08000, 0xb0bfff) AM_READWRITE(SMH_RAM,fof_mid_tileram_w) AM_BASE(&fof_mid_tileram) - AM_RANGE(0xb0c000, 0xb0ffff) AM_READWRITE(SMH_RAM,fof_txt_tileram_w) AM_BASE(&fof_txt_tileram) + AM_RANGE(0xb04000, 0xb07fff) AM_READWRITE(SMH_RAM, fof_bak_tileram_w) AM_BASE_MEMBER(fitfight_state, fof_bak_tileram) + AM_RANGE(0xb08000, 0xb0bfff) AM_READWRITE(SMH_RAM, fof_mid_tileram_w) AM_BASE_MEMBER(fitfight_state, fof_mid_tileram) + AM_RANGE(0xb0c000, 0xb0ffff) AM_READWRITE(SMH_RAM, fof_txt_tileram_w) AM_BASE_MEMBER(fitfight_state, fof_txt_tileram) AM_RANGE(0xb10000, 0xb13fff) AM_WRITENOP //used by histryma @0x0000b25a AM_RANGE(0xb14000, 0xb17fff) AM_WRITENOP //used by histryma @0x0000b25a,b270 @@ -180,7 +170,7 @@ static ADDRESS_MAP_START( fitfight_main_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0xc00000, 0xc00fff) AM_READWRITE(SMH_RAM,paletteram16_xRRRRRGGGGGBBBBB_word_w) AM_BASE(&paletteram16) - AM_RANGE(0xd00000, 0xd007ff) AM_RAM AM_BASE(&fitfight_spriteram) + AM_RANGE(0xd00000, 0xd007ff) AM_RAM AM_BASE_MEMBER(fitfight_state, spriteram) AM_RANGE(0xe00000, 0xe0ffff) AM_RAM ADDRESS_MAP_END @@ -188,30 +178,30 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( bbprot_main_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x000000, 0x0fffff) AM_ROM - AM_RANGE(0x100000, 0x100001) AM_WRITE(SMH_RAM) AM_BASE(&fof_100000) + AM_RANGE(0x100000, 0x100001) AM_WRITE(SMH_RAM) AM_BASE_MEMBER(fitfight_state, fof_100000) AM_RANGE(0x300000, 0x300001) AM_READ_PORT("P1_P2") AM_RANGE(0x380000, 0x380001) AM_READ_PORT("EXTRA") AM_RANGE(0x400000, 0x400001) AM_READ_PORT("SYSTEM_DSW2") AM_RANGE(0x480000, 0x480001) AM_READ_PORT("DSW3_DSW1") - AM_RANGE(0x600000, 0x600001) AM_WRITE(SMH_RAM) AM_BASE(&fof_600000) + AM_RANGE(0x600000, 0x600001) AM_WRITE(SMH_RAM) AM_BASE_MEMBER(fitfight_state, fof_600000) - AM_RANGE(0x700000, 0x700001) AM_READWRITE(bbprot_700000_r,fitfight_700000_w) AM_BASE(&fof_700000) + AM_RANGE(0x700000, 0x700001) AM_READWRITE(bbprot_700000_r, fitfight_700000_w) AM_BASE_MEMBER(fitfight_state, fof_700000) - AM_RANGE(0x800000, 0x800001) AM_WRITE(SMH_RAM) AM_BASE(&fof_800000) - AM_RANGE(0x900000, 0x900001) AM_WRITE(SMH_RAM) AM_BASE(&fof_900000) - AM_RANGE(0xa00000, 0xa00001) AM_WRITE(SMH_RAM) AM_BASE(&fof_a00000) + AM_RANGE(0x800000, 0x800001) AM_WRITE(SMH_RAM) AM_BASE_MEMBER(fitfight_state, fof_800000) + AM_RANGE(0x900000, 0x900001) AM_WRITE(SMH_RAM) AM_BASE_MEMBER(fitfight_state, fof_900000) + AM_RANGE(0xa00000, 0xa00001) AM_WRITE(SMH_RAM) AM_BASE_MEMBER(fitfight_state, fof_a00000) AM_RANGE(0xb00000, 0xb03fff) AM_WRITENOP /* unused layer? */ - AM_RANGE(0xb04000, 0xb07fff) AM_READWRITE(SMH_RAM,fof_bak_tileram_w) AM_BASE(&fof_bak_tileram) - AM_RANGE(0xb08000, 0xb0bfff) AM_READWRITE(SMH_RAM,fof_mid_tileram_w) AM_BASE(&fof_mid_tileram) - AM_RANGE(0xb0c000, 0xb0ffff) AM_READWRITE(SMH_RAM,fof_txt_tileram_w) AM_BASE(&fof_txt_tileram) + AM_RANGE(0xb04000, 0xb07fff) AM_READWRITE(SMH_RAM, fof_bak_tileram_w) AM_BASE_MEMBER(fitfight_state, fof_bak_tileram) + AM_RANGE(0xb08000, 0xb0bfff) AM_READWRITE(SMH_RAM, fof_mid_tileram_w) AM_BASE_MEMBER(fitfight_state, fof_mid_tileram) + AM_RANGE(0xb0c000, 0xb0ffff) AM_READWRITE(SMH_RAM, fof_txt_tileram_w) AM_BASE_MEMBER(fitfight_state, fof_txt_tileram) AM_RANGE(0xc00000, 0xc00fff) AM_READ(SMH_RAM) AM_RANGE(0xc00000, 0xc03fff) AM_WRITE(paletteram16_xRRRRRGGGGGBBBBB_word_w) AM_BASE(&paletteram16) - AM_RANGE(0xd00000, 0xd007ff) AM_RAM AM_BASE(&fitfight_spriteram) + AM_RANGE(0xd00000, 0xd007ff) AM_RAM AM_BASE_MEMBER(fitfight_state, spriteram) AM_RANGE(0xe00000, 0xe0ffff) AM_RAM ADDRESS_MAP_END @@ -267,7 +257,7 @@ ADDRESS_MAP_END static INTERRUPT_GEN( snd_irq ) { - cpu_set_input_line(device,UPD7810_INTF2,HOLD_LINE); + cpu_set_input_line(device, UPD7810_INTF2, HOLD_LINE); } static const UPD7810_CONFIG sound_cpu_config = @@ -727,7 +717,23 @@ static GFXDECODE_START( prot ) GFXDECODE_END +static MACHINE_START( fitfight ) +{ + fitfight_state *state = (fitfight_state *)machine->driver_data; + + state_save_register_global(machine, state->fof_700000_data); +} + +static MACHINE_RESET( fitfight ) +{ + fitfight_state *state = (fitfight_state *)machine->driver_data; + + state->fof_700000_data = 0; +} + static MACHINE_DRIVER_START( fitfight ) + MDRV_DRIVER_DATA(fitfight_state) + MDRV_CPU_ADD("maincpu",M68000, 12000000) MDRV_CPU_PROGRAM_MAP(fitfight_main_map) MDRV_CPU_VBLANK_INT("screen", irq2_line_hold) @@ -738,8 +744,10 @@ static MACHINE_DRIVER_START( fitfight ) MDRV_CPU_IO_MAP(snd_io) MDRV_CPU_VBLANK_INT("screen", snd_irq) - MDRV_GFXDECODE(fitfight) + MDRV_MACHINE_START(fitfight) + MDRV_MACHINE_RESET(fitfight) + MDRV_GFXDECODE(fitfight) MDRV_SCREEN_ADD("screen", RASTER) MDRV_SCREEN_REFRESH_RATE(60) @@ -761,12 +769,16 @@ static MACHINE_DRIVER_START( fitfight ) MACHINE_DRIVER_END static MACHINE_DRIVER_START( bbprot ) + MDRV_DRIVER_DATA(fitfight_state) + MDRV_CPU_ADD("maincpu",M68000, 12000000) MDRV_CPU_PROGRAM_MAP(bbprot_main_map) MDRV_CPU_VBLANK_INT("screen", irq2_line_hold) - MDRV_GFXDECODE(prot) + MDRV_MACHINE_START(fitfight) + MDRV_MACHINE_RESET(fitfight) + MDRV_GFXDECODE(prot) MDRV_SCREEN_ADD("screen", RASTER) MDRV_SCREEN_REFRESH_RATE(60) @@ -969,25 +981,28 @@ static DRIVER_INIT( fitfight ) { // UINT16 *mem16 = (UINT16 *)memory_region(machine, "maincpu"); // mem16[0x0165B2/2] = 0x4e71; // for now so it boots + fitfight_state *state = (fitfight_state *)machine->driver_data; memory_install_read16_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0x700000, 0x700001, 0, 0, fitfight_700000_r); - bbprot_kludge = 0; + state->bbprot_kludge = 0; } static DRIVER_INIT( histryma ) { // UINT16 *mem16 = (UINT16 *)memory_region(machine, "maincpu"); // mem16[0x017FDC/2] = 0x4e71; // for now so it boots + fitfight_state *state = (fitfight_state *)machine->driver_data; memory_install_read16_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0x700000, 0x700001, 0, 0, histryma_700000_r); - bbprot_kludge = 0; + state->bbprot_kludge = 0; } static DRIVER_INIT( bbprot ) { - bbprot_kludge = 1; + fitfight_state *state = (fitfight_state *)machine->driver_data; + state->bbprot_kludge = 1; } /* GAME */ -GAME( 199?, fitfight, 0, fitfight, fitfight, fitfight, ROT0, "bootleg", "Fit of Fighting", GAME_IMPERFECT_GRAPHICS | GAME_NO_SOUND ) -GAME( 199?, histryma, 0, fitfight, histryma, histryma, ROT0, "bootleg", "The History of Martial Arts", GAME_IMPERFECT_GRAPHICS | GAME_NO_SOUND ) -GAME( 199?, bbprot, 0, bbprot, bbprot, bbprot, ROT0, "", "Untitled Fighter 'BB' (prototype)", GAME_IMPERFECT_GRAPHICS | GAME_NO_SOUND ) +GAME( 199?, fitfight, 0, fitfight, fitfight, fitfight, ROT0, "bootleg", "Fit of Fighting", GAME_IMPERFECT_GRAPHICS | GAME_NO_SOUND | GAME_SUPPORTS_SAVE ) +GAME( 199?, histryma, 0, fitfight, histryma, histryma, ROT0, "bootleg", "The History of Martial Arts", GAME_IMPERFECT_GRAPHICS | GAME_NO_SOUND | GAME_SUPPORTS_SAVE ) +GAME( 199?, bbprot, 0, bbprot, bbprot, bbprot, ROT0, "", "Untitled Fighter 'BB' (prototype)", GAME_IMPERFECT_GRAPHICS | GAME_NO_SOUND | GAME_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/flstory.c b/src/mame/drivers/flstory.c index f2b95e2c948..abd03df0c1c 100644 --- a/src/mame/drivers/flstory.c +++ b/src/mame/drivers/flstory.c @@ -1,11 +1,11 @@ /*************************************************************************** -The FairyLand Story + The FairyLand Story - added Victorious Nine by BUT + added Victorious Nine by BUT -TODO: -- TA7630 emulation needs filter support (bass sounds from MSM5232 should be about 2 times louder) + TODO: + - TA7630 emulation needs filter support (bass sounds from MSM5232 should be about 2 times louder) ***************************************************************************/ @@ -18,37 +18,33 @@ TODO: #include "sound/dac.h" #include "includes/flstory.h" -UINT8 *onna34ro_workram; -UINT8 *victnine_workram; - -static UINT8 snd_data; -static UINT8 snd_flag; - static READ8_HANDLER( from_snd_r ) { - snd_flag = 0; - return snd_data; + flstory_state *state = (flstory_state *)space->machine->driver_data; + state->snd_flag = 0; + return state->snd_data; } static READ8_HANDLER( snd_flag_r ) { - return snd_flag | 0xfd; + flstory_state *state = (flstory_state *)space->machine->driver_data; + return state->snd_flag | 0xfd; } static WRITE8_HANDLER( to_main_w ) { - snd_data = data; - snd_flag = 2; + flstory_state *state = (flstory_state *)space->machine->driver_data; + state->snd_data = data; + state->snd_flag = 2; } - -static int sound_nmi_enable,pending_nmi; - static TIMER_CALLBACK( nmi_callback ) { - if (sound_nmi_enable) - cputag_set_input_line(machine, "audiocpu", INPUT_LINE_NMI, PULSE_LINE); - else pending_nmi = 1; + flstory_state *state = (flstory_state *)machine->driver_data; + if (state->sound_nmi_enable) + cpu_set_input_line(state->audiocpu, INPUT_LINE_NMI, PULSE_LINE); + else + state->pending_nmi = 1; } static WRITE8_HANDLER( sound_command_w ) @@ -60,22 +56,24 @@ static WRITE8_HANDLER( sound_command_w ) static WRITE8_HANDLER( nmi_disable_w ) { - sound_nmi_enable = 0; + flstory_state *state = (flstory_state *)space->machine->driver_data; + state->sound_nmi_enable = 0; } static WRITE8_HANDLER( nmi_enable_w ) { - sound_nmi_enable = 1; - if (pending_nmi) + flstory_state *state = (flstory_state *)space->machine->driver_data; + state->sound_nmi_enable = 1; + if (state->pending_nmi) { - cputag_set_input_line(space->machine, "audiocpu", INPUT_LINE_NMI, PULSE_LINE); - pending_nmi = 0; + cpu_set_input_line(state->audiocpu, INPUT_LINE_NMI, PULSE_LINE); + state->pending_nmi = 0; } } static ADDRESS_MAP_START( flstory_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0x0000, 0xbfff) AM_ROM - AM_RANGE(0xc000, 0xc7ff) AM_RAM_WRITE(flstory_videoram_w) AM_BASE(&videoram) AM_SIZE(&videoram_size) + AM_RANGE(0xc000, 0xc7ff) AM_RAM_WRITE(flstory_videoram_w) AM_BASE_MEMBER(flstory_state, videoram) AM_SIZE(&videoram_size) AM_RANGE(0xc800, 0xcfff) AM_RAM /* unknown */ AM_RANGE(0xd000, 0xd000) AM_READWRITE(flstory_mcu_r, flstory_mcu_w) AM_RANGE(0xd001, 0xd001) AM_WRITENOP /* watchdog? */ @@ -91,8 +89,8 @@ static ADDRESS_MAP_START( flstory_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0xd805, 0xd805) AM_READ(flstory_mcu_status_r) AM_RANGE(0xd806, 0xd806) AM_READ_PORT("P2") // AM_RANGE(0xda00, 0xda00) AM_WRITE(SMH_RAM) - AM_RANGE(0xdc00, 0xdc9f) AM_RAM AM_BASE(&spriteram) AM_SIZE(&spriteram_size) - AM_RANGE(0xdca0, 0xdcbf) AM_RAM_WRITE(flstory_scrlram_w) AM_BASE(&flstory_scrlram) + AM_RANGE(0xdc00, 0xdc9f) AM_RAM AM_BASE_MEMBER(flstory_state, spriteram) AM_SIZE(&spriteram_size) + AM_RANGE(0xdca0, 0xdcbf) AM_RAM_WRITE(flstory_scrlram_w) AM_BASE_MEMBER(flstory_state, scrlram) AM_RANGE(0xdcc0, 0xdcff) AM_RAM /* unknown */ AM_RANGE(0xdd00, 0xdeff) AM_READWRITE(flstory_palette_r, flstory_palette_w) AM_RANGE(0xdf03, 0xdf03) AM_WRITE(flstory_gfxctrl_w) @@ -101,7 +99,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( onna34ro_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0x0000, 0xbfff) AM_ROM - AM_RANGE(0xc000, 0xc7ff) AM_RAM_WRITE(flstory_videoram_w) AM_BASE(&videoram) AM_SIZE(&videoram_size) + AM_RANGE(0xc000, 0xc7ff) AM_RAM_WRITE(flstory_videoram_w) AM_BASE_MEMBER(flstory_state, videoram) AM_SIZE(&videoram_size) AM_RANGE(0xc800, 0xcfff) AM_RAM /* unknown */ AM_RANGE(0xd000, 0xd000) AM_READWRITE(onna34ro_mcu_r, onna34ro_mcu_w) AM_RANGE(0xd001, 0xd001) AM_WRITENOP /* watchdog? */ @@ -117,24 +115,25 @@ static ADDRESS_MAP_START( onna34ro_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0xd805, 0xd805) AM_READ(onna34ro_mcu_status_r) AM_RANGE(0xd806, 0xd806) AM_READ_PORT("P2") // AM_RANGE(0xda00, 0xda00) AM_WRITE(SMH_RAM) - AM_RANGE(0xdc00, 0xdc9f) AM_RAM AM_BASE(&spriteram) AM_SIZE(&spriteram_size) - AM_RANGE(0xdca0, 0xdcbf) AM_RAM_WRITE(flstory_scrlram_w) AM_BASE(&flstory_scrlram) + AM_RANGE(0xdc00, 0xdc9f) AM_RAM AM_BASE_MEMBER(flstory_state, spriteram) AM_SIZE(&spriteram_size) + AM_RANGE(0xdca0, 0xdcbf) AM_RAM_WRITE(flstory_scrlram_w) AM_BASE_MEMBER(flstory_state, scrlram) AM_RANGE(0xdcc0, 0xdcff) AM_RAM /* unknown */ AM_RANGE(0xdd00, 0xdeff) AM_READWRITE(flstory_palette_r, flstory_palette_w) AM_RANGE(0xdf03, 0xdf03) AM_WRITE(flstory_gfxctrl_w) - AM_RANGE(0xe000, 0xe7ff) AM_RAM AM_BASE(&onna34ro_workram) /* work RAM */ + AM_RANGE(0xe000, 0xe7ff) AM_RAM AM_BASE_MEMBER(flstory_state, workram) /* work RAM */ ADDRESS_MAP_END static CUSTOM_INPUT( victnine_mcu_status_bit01_r ) { - const address_space *space = cputag_get_address_space(field->port->machine, "maincpu", ADDRESS_SPACE_PROGRAM); + flstory_state *state = (flstory_state *)field->port->machine->driver_data; + const address_space *space = cpu_get_address_space(state->maincpu, ADDRESS_SPACE_PROGRAM); return (victnine_mcu_status_r(space, 0) & 3); } static ADDRESS_MAP_START( victnine_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0x0000, 0xbfff) AM_ROM - AM_RANGE(0xc000, 0xc7ff) AM_RAM_WRITE(flstory_videoram_w) AM_BASE(&videoram) AM_SIZE(&videoram_size) + AM_RANGE(0xc000, 0xc7ff) AM_RAM_WRITE(flstory_videoram_w) AM_BASE_MEMBER(flstory_state, videoram) AM_SIZE(&videoram_size) AM_RANGE(0xc800, 0xcfff) AM_RAM /* unknown */ AM_RANGE(0xd000, 0xd000) AM_READWRITE(victnine_mcu_r, victnine_mcu_w) AM_RANGE(0xd001, 0xd001) AM_WRITENOP /* watchdog? */ @@ -151,82 +150,84 @@ static ADDRESS_MAP_START( victnine_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0xd806, 0xd806) AM_READ_PORT("P2") AM_RANGE(0xd807, 0xd807) AM_READ_PORT("EXTRA_P2") // AM_RANGE(0xda00, 0xda00) AM_WRITE(SMH_RAM) - AM_RANGE(0xdc00, 0xdc9f) AM_RAM AM_BASE(&spriteram) AM_SIZE(&spriteram_size) - AM_RANGE(0xdca0, 0xdcbf) AM_RAM_WRITE(flstory_scrlram_w) AM_BASE(&flstory_scrlram) + AM_RANGE(0xdc00, 0xdc9f) AM_RAM AM_BASE_MEMBER(flstory_state, spriteram) AM_SIZE(&spriteram_size) + AM_RANGE(0xdca0, 0xdcbf) AM_RAM_WRITE(flstory_scrlram_w) AM_BASE_MEMBER(flstory_state, scrlram) AM_RANGE(0xdce0, 0xdce0) AM_READWRITE(victnine_gfxctrl_r, victnine_gfxctrl_w) AM_RANGE(0xdce1, 0xdce1) AM_WRITENOP /* unknown */ AM_RANGE(0xdd00, 0xdeff) AM_READWRITE(flstory_palette_r, flstory_palette_w) - AM_RANGE(0xe000, 0xe7ff) AM_RAM AM_BASE(&victnine_workram) /* work RAM */ + AM_RANGE(0xe000, 0xe7ff) AM_RAM AM_BASE_MEMBER(flstory_state, workram) /* work RAM */ ADDRESS_MAP_END -static int vol_ctrl[16]; static MACHINE_RESET( ta7630 ) { + flstory_state *state = (flstory_state *)machine->driver_data; int i; double db = 0.0; double db_step = 1.50; /* 1.50 dB step (at least, maybe more) */ double db_step_inc = 0.125; - for (i=0; i<16; i++) + for (i = 0; i < 16; i++) { double max = 100.0 / pow(10.0, db/20.0 ); - vol_ctrl[ 15-i ] = max; - /*logerror("vol_ctrl[%x] = %i (%f dB)\n",15-i,vol_ctrl[ 15-i ],db);*/ + state->vol_ctrl[15 - i] = max; + /*logerror("vol_ctrl[%x] = %i (%f dB)\n", 15 - i, state->vol_ctrl[15 - i], db);*/ db += db_step; db_step += db_step_inc; } - /* for (i=0; i<8; i++) - logerror("SOUND Chan#%i name=%s\n", i, mixer_get_name(i) ); */ + /* for (i = 0; i < 8; i++) + logerror("SOUND Chan#%i name=%s\n", i, mixer_get_name(i)); */ /* channels 0-2 AY#0 channels 3,4 MSM5232 group1,group2 */ } -static UINT8 snd_ctrl0=0; -static UINT8 snd_ctrl1=0; -static UINT8 snd_ctrl2=0; -static UINT8 snd_ctrl3=0; - static WRITE8_DEVICE_HANDLER( sound_control_0_w ) { - snd_ctrl0 = data & 0xff; -// popmessage("SND0 0=%02x 1=%02x 2=%02x 3=%02x", snd_ctrl0, snd_ctrl1, snd_ctrl2, snd_ctrl3); + flstory_state *state = (flstory_state *)device->machine->driver_data; + + state->snd_ctrl0 = data & 0xff; + // popmessage("SND0 0=%02x 1=%02x 2=%02x 3=%02x", state->snd_ctrl0, state->snd_ctrl1, state->snd_ctrl2, state->snd_ctrl3); /* this definitely controls main melody voice on 2'-1 and 4'-1 outputs */ - sound_set_output_gain(device, 0, vol_ctrl[ (snd_ctrl0>>4) & 15 ] / 100.0); /* group1 from msm5232 */ - sound_set_output_gain(device, 1, vol_ctrl[ (snd_ctrl0>>4) & 15 ] / 100.0); /* group1 from msm5232 */ - sound_set_output_gain(device, 2, vol_ctrl[ (snd_ctrl0>>4) & 15 ] / 100.0); /* group1 from msm5232 */ - sound_set_output_gain(device, 3, vol_ctrl[ (snd_ctrl0>>4) & 15 ] / 100.0); /* group1 from msm5232 */ + sound_set_output_gain(device, 0, state->vol_ctrl[(state->snd_ctrl0 >> 4) & 15] / 100.0); /* group1 from msm5232 */ + sound_set_output_gain(device, 1, state->vol_ctrl[(state->snd_ctrl0 >> 4) & 15] / 100.0); /* group1 from msm5232 */ + sound_set_output_gain(device, 2, state->vol_ctrl[(state->snd_ctrl0 >> 4) & 15] / 100.0); /* group1 from msm5232 */ + sound_set_output_gain(device, 3, state->vol_ctrl[(state->snd_ctrl0 >> 4) & 15] / 100.0); /* group1 from msm5232 */ } static WRITE8_DEVICE_HANDLER( sound_control_1_w ) { - snd_ctrl1 = data & 0xff; -// popmessage("SND1 0=%02x 1=%02x 2=%02x 3=%02x", snd_ctrl0, snd_ctrl1, snd_ctrl2, snd_ctrl3); - sound_set_output_gain(device, 4, vol_ctrl[ (snd_ctrl1>>4) & 15 ] / 100.0); /* group2 from msm5232 */ - sound_set_output_gain(device, 5, vol_ctrl[ (snd_ctrl1>>4) & 15 ] / 100.0); /* group2 from msm5232 */ - sound_set_output_gain(device, 6, vol_ctrl[ (snd_ctrl1>>4) & 15 ] / 100.0); /* group2 from msm5232 */ - sound_set_output_gain(device, 7, vol_ctrl[ (snd_ctrl1>>4) & 15 ] / 100.0); /* group2 from msm5232 */ + flstory_state *state = (flstory_state *)device->machine->driver_data; + + state->snd_ctrl1 = data & 0xff; + // popmessage("SND1 0=%02x 1=%02x 2=%02x 3=%02x", state->snd_ctrl0, state->snd_ctrl1, state->snd_ctrl2, state->snd_ctrl3); + sound_set_output_gain(device, 4, state->vol_ctrl[(state->snd_ctrl1 >> 4) & 15] / 100.0); /* group2 from msm5232 */ + sound_set_output_gain(device, 5, state->vol_ctrl[(state->snd_ctrl1 >> 4) & 15] / 100.0); /* group2 from msm5232 */ + sound_set_output_gain(device, 6, state->vol_ctrl[(state->snd_ctrl1 >> 4) & 15] / 100.0); /* group2 from msm5232 */ + sound_set_output_gain(device, 7, state->vol_ctrl[(state->snd_ctrl1 >> 4) & 15] / 100.0); /* group2 from msm5232 */ } static WRITE8_DEVICE_HANDLER( sound_control_2_w ) { + flstory_state *state = (flstory_state *)device->machine->driver_data; int i; - snd_ctrl2 = data & 0xff; -// popmessage("SND2 0=%02x 1=%02x 2=%02x 3=%02x", snd_ctrl0, snd_ctrl1, snd_ctrl2, snd_ctrl3); + state->snd_ctrl2 = data & 0xff; + // popmessage("SND2 0=%02x 1=%02x 2=%02x 3=%02x", state->snd_ctrl0, state->snd_ctrl1, state->snd_ctrl2, state->snd_ctrl3); - for (i=0; i<3; i++) - sound_set_output_gain (device, i, vol_ctrl[ (snd_ctrl2>>4) & 15 ] / 100.0); /* ym2149f all */ + for (i = 0; i < 3; i++) + sound_set_output_gain(device, i, state->vol_ctrl[(state->snd_ctrl2 >> 4) & 15] / 100.0); /* ym2149f all */ } static WRITE8_DEVICE_HANDLER( sound_control_3_w ) /* unknown */ { - snd_ctrl3 = data & 0xff; -// popmessage("SND3 0=%02x 1=%02x 2=%02x 3=%02x", snd_ctrl0, snd_ctrl1, snd_ctrl2, snd_ctrl3); + flstory_state *state = (flstory_state *)device->machine->driver_data; + + state->snd_ctrl3 = data & 0xff; + // popmessage("SND3 0=%02x 1=%02x 2=%02x 3=%02x", state->snd_ctrl0, state->snd_ctrl1, state->snd_ctrl2, state->snd_ctrl3); } @@ -246,12 +247,12 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( flstory_m68705_map, ADDRESS_SPACE_PROGRAM, 8 ) ADDRESS_MAP_GLOBAL_MASK(0x7ff) - AM_RANGE(0x0000, 0x0000) AM_READWRITE(flstory_68705_portA_r, flstory_68705_portA_w) - AM_RANGE(0x0001, 0x0001) AM_READWRITE(flstory_68705_portB_r, flstory_68705_portB_w) - AM_RANGE(0x0002, 0x0002) AM_READWRITE(flstory_68705_portC_r, flstory_68705_portC_w) - AM_RANGE(0x0004, 0x0004) AM_WRITE(flstory_68705_ddrA_w) - AM_RANGE(0x0005, 0x0005) AM_WRITE(flstory_68705_ddrB_w) - AM_RANGE(0x0006, 0x0006) AM_WRITE(flstory_68705_ddrC_w) + AM_RANGE(0x0000, 0x0000) AM_READWRITE(flstory_68705_port_a_r, flstory_68705_port_a_w) + AM_RANGE(0x0001, 0x0001) AM_READWRITE(flstory_68705_port_b_r, flstory_68705_port_b_w) + AM_RANGE(0x0002, 0x0002) AM_READWRITE(flstory_68705_port_c_r, flstory_68705_port_c_w) + AM_RANGE(0x0004, 0x0004) AM_WRITE(flstory_68705_ddr_a_w) + AM_RANGE(0x0005, 0x0005) AM_WRITE(flstory_68705_ddr_b_w) + AM_RANGE(0x0006, 0x0006) AM_WRITE(flstory_68705_ddr_c_w) AM_RANGE(0x0010, 0x007f) AM_RAM AM_RANGE(0x0080, 0x07ff) AM_ROM ADDRESS_MAP_END @@ -653,8 +654,88 @@ static const msm5232_interface msm5232_config = }; +static MACHINE_START( flstory ) +{ + flstory_state *state = (flstory_state *)machine->driver_data; + + state->maincpu = devtag_get_device(machine, "maincpu"); + state->audiocpu = devtag_get_device(machine, "audiocpu"); + state->mcu = devtag_get_device(machine, "mcu"); + + /* video */ + state_save_register_global(machine, state->char_bank); + state_save_register_global(machine, state->palette_bank); + state_save_register_global(machine, state->flipscreen); + state_save_register_global(machine, state->gfxctrl); + /* sound */ + state_save_register_global(machine, state->snd_data); + state_save_register_global(machine, state->snd_flag); + state_save_register_global(machine, state->sound_nmi_enable); + state_save_register_global(machine, state->pending_nmi); + state_save_register_global_array(machine, state->vol_ctrl); + state_save_register_global(machine, state->snd_ctrl0); + state_save_register_global(machine, state->snd_ctrl1); + state_save_register_global(machine, state->snd_ctrl2); + state_save_register_global(machine, state->snd_ctrl3); + /* mcu */ + state_save_register_global(machine, state->from_main); + state_save_register_global(machine, state->from_mcu); + state_save_register_global(machine, state->mcu_sent); + state_save_register_global(machine, state->main_sent); + state_save_register_global(machine, state->port_a_in); + state_save_register_global(machine, state->port_a_out); + state_save_register_global(machine, state->ddr_a); + state_save_register_global(machine, state->port_b_in); + state_save_register_global(machine, state->port_b_out); + state_save_register_global(machine, state->ddr_b); + state_save_register_global(machine, state->port_c_in); + state_save_register_global(machine, state->port_c_out); + state_save_register_global(machine, state->ddr_c); + state_save_register_global(machine, state->mcu_select); +} + +static MACHINE_RESET( flstory ) +{ + flstory_state *state = (flstory_state *)machine->driver_data; + + MACHINE_RESET_CALL(ta7630); + + /* video */ + state->char_bank = 0; + state->palette_bank = 0; + state->flipscreen = 0; + state->gfxctrl = 0; + /* sound */ + state->snd_data = 0; + state->snd_flag = 0; + state->sound_nmi_enable = 0; + state->pending_nmi = 0; + state->snd_ctrl0 = 0; + state->snd_ctrl1 = 0; + state->snd_ctrl2 = 0; + state->snd_ctrl3 = 0; + /* mcu */ + state->from_main = 0; + state->from_mcu = 0; + state->mcu_sent = 0; + state->main_sent = 0; + state->port_a_in = 0; + state->port_a_out = 0; + state->ddr_a = 0; + state->port_b_in = 0; + state->port_b_out = 0; + state->ddr_b = 0; + state->port_c_in = 0; + state->port_c_out = 0; + state->ddr_c = 0; + state->mcu_select = 0; +} + static MACHINE_DRIVER_START( flstory ) + /* driver data */ + MDRV_DRIVER_DATA(flstory_state) + /* basic machine hardware */ MDRV_CPU_ADD("maincpu", Z80,XTAL_10_733MHz/2) /* verified on pcb */ MDRV_CPU_PROGRAM_MAP(flstory_map) @@ -670,7 +751,8 @@ static MACHINE_DRIVER_START( flstory ) MDRV_QUANTUM_TIME(HZ(6000)) /* 100 CPU slices per frame - an high value to ensure proper */ /* synchronization of the CPUs */ - MDRV_MACHINE_RESET(ta7630) + MDRV_MACHINE_START(flstory) + MDRV_MACHINE_RESET(flstory) /* video hardware */ MDRV_SCREEN_ADD("screen", RASTER) @@ -713,6 +795,9 @@ MACHINE_DRIVER_END static MACHINE_DRIVER_START( onna34ro ) + /* driver data */ + MDRV_DRIVER_DATA(flstory_state) + /* basic machine hardware */ MDRV_CPU_ADD("maincpu", Z80,10733000/2) /* ??? */ MDRV_CPU_PROGRAM_MAP(onna34ro_map) @@ -727,7 +812,8 @@ static MACHINE_DRIVER_START( onna34ro ) MDRV_QUANTUM_TIME(HZ(6000)) /* 100 CPU slices per frame - an high value to ensure proper */ /* synchronization of the CPUs */ - MDRV_MACHINE_RESET(ta7630) + MDRV_MACHINE_START(flstory) + MDRV_MACHINE_RESET(flstory) /* video hardware */ MDRV_SCREEN_ADD("screen", RASTER) @@ -770,6 +856,9 @@ MACHINE_DRIVER_END static MACHINE_DRIVER_START( victnine ) + /* driver data */ + MDRV_DRIVER_DATA(flstory_state) + /* basic machine hardware */ MDRV_CPU_ADD("maincpu", Z80,8000000/2) /* 4 MHz */ MDRV_CPU_PROGRAM_MAP(victnine_map) @@ -784,7 +873,8 @@ static MACHINE_DRIVER_START( victnine ) MDRV_QUANTUM_TIME(HZ(6000)) /* 100 CPU slices per frame - an high value to ensure proper */ /* synchronization of the CPUs */ - MDRV_MACHINE_RESET(ta7630) + MDRV_MACHINE_START(flstory) + MDRV_MACHINE_RESET(flstory) /* video hardware */ MDRV_SCREEN_ADD("screen", RASTER) @@ -1050,8 +1140,8 @@ ROM_START( victnine ) ROM_END -GAME( 1985, flstory, 0, flstory, flstory, 0, ROT180, "Taito", "The FairyLand Story", GAME_IMPERFECT_SOUND ) -GAME( 1985, flstoryj, flstory, flstory, flstory, 0, ROT180, "Taito", "The FairyLand Story (Japan)", GAME_IMPERFECT_SOUND ) -GAME( 1985, onna34ro, 0, onna34ro, onna34ro, 0, ROT0, "Taito", "Onna Sansirou - Typhoon Gal (set 1)", GAME_UNEMULATED_PROTECTION | GAME_IMPERFECT_SOUND ) -GAME( 1985, onna34roa,onna34ro, onna34ro, onna34ro, 0, ROT0, "Taito", "Onna Sansirou - Typhoon Gal (set 2)", GAME_UNEMULATED_PROTECTION | GAME_IMPERFECT_SOUND ) -GAME( 1984, victnine, 0, victnine, victnine, 0, ROT0, "Taito", "Victorious Nine", GAME_IMPERFECT_SOUND ) +GAME( 1985, flstory, 0, flstory, flstory, 0, ROT180, "Taito", "The FairyLand Story", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE ) +GAME( 1985, flstoryj, flstory, flstory, flstory, 0, ROT180, "Taito", "The FairyLand Story (Japan)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE ) +GAME( 1985, onna34ro, 0, onna34ro, onna34ro, 0, ROT0, "Taito", "Onna Sansirou - Typhoon Gal (set 1)", GAME_UNEMULATED_PROTECTION | GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE ) +GAME( 1985, onna34roa, onna34ro, onna34ro, onna34ro, 0, ROT0, "Taito", "Onna Sansirou - Typhoon Gal (set 2)", GAME_UNEMULATED_PROTECTION | GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE ) +GAME( 1984, victnine, 0, victnine, victnine, 0, ROT0, "Taito", "Victorious Nine", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/flyball.c b/src/mame/drivers/flyball.c index 60c70e88a02..570a2370f20 100644 --- a/src/mame/drivers/flyball.c +++ b/src/mame/drivers/flyball.c @@ -9,36 +9,118 @@ Atari Flyball Driver #define MASTER_CLOCK ( XTAL_12_096MHz ) -extern VIDEO_START( flyball ); -extern VIDEO_UPDATE( flyball ); -extern UINT8 flyball_pitcher_pic; -extern UINT8 flyball_pitcher_vert; -extern UINT8 flyball_pitcher_horz; -extern UINT8 flyball_ball_vert; -extern UINT8 flyball_ball_horz; -extern UINT8* flyball_playfield_ram; +typedef struct _flyball_state flyball_state; +struct _flyball_state +{ + /* memory pointers */ + UINT8 * rombase; + UINT8 * playfield_ram; -static UINT8 flyball_potmask; -static UINT8 flyball_potsense; + /* video-related */ + tilemap *tmap; + UINT8 pitcher_vert; + UINT8 pitcher_horz; + UINT8 pitcher_pic; + UINT8 ball_vert; + UINT8 ball_horz; -static UINT8 *rombase; + /* misc */ + UINT8 potmask; + UINT8 potsense; + + /* devices */ + const device_config *maincpu; +}; + + +/************************************* + * + * Video emulation + * + *************************************/ + +static TILEMAP_MAPPER( flyball_get_memory_offset ) +{ + if (col == 0) + col = num_cols; + + return num_cols * (num_rows - row) - col; +} + + +static TILE_GET_INFO( flyball_get_tile_info ) +{ + flyball_state *state = (flyball_state *)machine->driver_data; + UINT8 data = state->playfield_ram[tile_index]; + int flags = ((data & 0x40) ? TILE_FLIPX : 0) | ((data & 0x80) ? TILE_FLIPY : 0); + int code = data & 63; + + if ((flags & TILE_FLIPX) && (flags & TILE_FLIPY)) + { + code += 64; + } + + SET_TILE_INFO(0, code, 0, flags); +} + + +VIDEO_START( flyball ) +{ + flyball_state *state = (flyball_state *)machine->driver_data; + state->tmap = tilemap_create(machine, flyball_get_tile_info, flyball_get_memory_offset, 8, 16, 32, 16); +} + + +VIDEO_UPDATE( flyball ) +{ + flyball_state *state = (flyball_state *)screen->machine->driver_data; + int pitcherx = state->pitcher_horz; + int pitchery = state->pitcher_vert - 31; + + int ballx = state->ball_horz - 1; + int bally = state->ball_vert - 17; + + int x; + int y; + + tilemap_mark_all_tiles_dirty(state->tmap); + + /* draw playfield */ + tilemap_draw(bitmap, cliprect, state->tmap, 0, 0); + + /* draw pitcher */ + drawgfx_transpen(bitmap, cliprect, screen->machine->gfx[1], state->pitcher_pic ^ 0xf, 0, 1, 0, pitcherx, pitchery, 1); + + /* draw ball */ + + for (y = bally; y < bally + 2; y++) + for (x = ballx; x < ballx + 2; x++) + if (x >= cliprect->min_x && + x <= cliprect->max_x && + y >= cliprect->min_y && + y <= cliprect->max_y) + *BITMAP_ADDR16(bitmap, y, x) = 1; + return 0; +} static TIMER_CALLBACK( flyball_joystick_callback ) { + flyball_state *state = (flyball_state *)machine->driver_data; int potsense = param; - if (potsense & ~flyball_potmask) - generic_pulse_irq_line(cputag_get_cpu(machine, "maincpu"), 0); + if (potsense & ~state->potmask) + generic_pulse_irq_line(state->maincpu, 0); - flyball_potsense |= potsense; + state->potsense |= potsense; } static TIMER_CALLBACK( flyball_quarter_callback ) { + flyball_state *state = (flyball_state *)machine->driver_data; int scanline = param; int potsense[64], i; @@ -58,29 +140,18 @@ static TIMER_CALLBACK( flyball_quarter_callback ) timer_set(machine, video_screen_get_time_until_pos(machine->primary_screen, scanline, 0), NULL, scanline, flyball_quarter_callback); - flyball_potsense = 0; - flyball_potmask = 0; + state->potsense = 0; + state->potmask = 0; } -static MACHINE_RESET( flyball ) -{ - int i; - - /* address bits 0 through 8 are inverted */ - - UINT8* ROM = memory_region(machine, "maincpu") + 0x2000; - - for (i = 0; i < 0x1000; i++) - rombase[i] = ROM[i ^ 0x1ff]; - device_reset(cputag_get_cpu(machine, "maincpu")); - - timer_set(machine, video_screen_get_time_until_pos(machine->primary_screen, 0, 0), NULL, 0, flyball_quarter_callback); -} - +/************************************* + * + * Memory handlers + * + *************************************/ /* two physical buttons (start game and stop runner) share the same port bit */ - static READ8_HANDLER( flyball_input_r ) { return input_port_read(space->machine, "IN0") & input_port_read(space->machine, "IN1"); @@ -93,37 +164,44 @@ static READ8_HANDLER( flyball_scanline_r ) static READ8_HANDLER( flyball_potsense_r ) { - return flyball_potsense & ~flyball_potmask; + flyball_state *state = (flyball_state *)space->machine->driver_data; + return state->potsense & ~state->potmask; } static WRITE8_HANDLER( flyball_potmask_w ) { - flyball_potmask |= data & 0xf; + flyball_state *state = (flyball_state *)space->machine->driver_data; + state->potmask |= data & 0xf; } static WRITE8_HANDLER( flyball_pitcher_pic_w ) { - flyball_pitcher_pic = data & 0xf; + flyball_state *state = (flyball_state *)space->machine->driver_data; + state->pitcher_pic = data & 0xf; } static WRITE8_HANDLER( flyball_ball_vert_w ) { - flyball_ball_vert = data; + flyball_state *state = (flyball_state *)space->machine->driver_data; + state->ball_vert = data; } static WRITE8_HANDLER( flyball_ball_horz_w ) { - flyball_ball_horz = data; + flyball_state *state = (flyball_state *)space->machine->driver_data; + state->ball_horz = data; } static WRITE8_HANDLER( flyball_pitcher_vert_w ) { - flyball_pitcher_vert = data; + flyball_state *state = (flyball_state *)space->machine->driver_data; + state->pitcher_vert = data; } static WRITE8_HANDLER( flyball_pitcher_horz_w ) { - flyball_pitcher_horz = data; + flyball_state *state = (flyball_state *)space->machine->driver_data; + state->pitcher_horz = data; } static WRITE8_HANDLER( flyball_misc_w ) @@ -154,6 +232,12 @@ static WRITE8_HANDLER( flyball_misc_w ) } +/************************************* + * + * Address maps + * + *************************************/ + static ADDRESS_MAP_START( flyball_map, ADDRESS_SPACE_PROGRAM, 8 ) ADDRESS_MAP_GLOBAL_MASK(0x1fff) AM_RANGE(0x0000, 0x00ff) AM_MIRROR(0x100) AM_RAM @@ -168,11 +252,17 @@ static ADDRESS_MAP_START( flyball_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0x0900, 0x0900) AM_WRITE(flyball_potmask_w) AM_RANGE(0x0a00, 0x0a07) AM_WRITE(flyball_misc_w) AM_RANGE(0x0b00, 0x0b00) AM_READ(flyball_input_r) - AM_RANGE(0x0d00, 0x0eff) AM_WRITE(SMH_RAM) AM_BASE(&flyball_playfield_ram) - AM_RANGE(0x1000, 0x1fff) AM_ROM AM_BASE(&rombase) /* program */ + AM_RANGE(0x0d00, 0x0eff) AM_WRITE(SMH_RAM) AM_BASE_MEMBER(flyball_state, playfield_ram) + AM_RANGE(0x1000, 0x1fff) AM_ROM AM_BASE_MEMBER(flyball_state, rombase) /* program */ ADDRESS_MAP_END +/************************************* + * + * Input ports + * + *************************************/ + static INPUT_PORTS_START( flyball ) PORT_START("IN0") /* IN0 */ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START2 ) @@ -206,6 +296,12 @@ static INPUT_PORTS_START( flyball ) INPUT_PORTS_END +/************************************* + * + * Graphics definitions + * + *************************************/ + static const gfx_layout flyball_tiles_layout = { 8, 16, /* width, height */ @@ -254,13 +350,63 @@ static PALETTE_INIT( flyball ) } +/************************************* + * + * Machine driver + * + *************************************/ + +static MACHINE_START( flyball ) +{ + flyball_state *state = (flyball_state *)machine->driver_data; + + state->maincpu = devtag_get_device(machine, "maincpu"); + + state_save_register_global(machine, state->pitcher_vert); + state_save_register_global(machine, state->pitcher_horz); + state_save_register_global(machine, state->pitcher_pic); + state_save_register_global(machine, state->ball_vert); + state_save_register_global(machine, state->ball_horz); + state_save_register_global(machine, state->potmask); + state_save_register_global(machine, state->potsense); +} + +static MACHINE_RESET( flyball ) +{ + flyball_state *state = (flyball_state *)machine->driver_data; + int i; + + /* address bits 0 through 8 are inverted */ + UINT8* ROM = memory_region(machine, "maincpu") + 0x2000; + + for (i = 0; i < 0x1000; i++) + state->rombase[i] = ROM[i ^ 0x1ff]; + + device_reset(devtag_get_device(machine, "maincpu")); + + timer_set(machine, video_screen_get_time_until_pos(machine->primary_screen, 0, 0), NULL, 0, flyball_quarter_callback); + + state->pitcher_vert = 0; + state->pitcher_horz = 0; + state->pitcher_pic = 0; + state->ball_vert = 0; + state->ball_horz = 0; + state->potmask = 0; + state->potsense = 0; +} + + static MACHINE_DRIVER_START( flyball ) + /* driver data */ + MDRV_DRIVER_DATA(flyball_state) + /* basic machine hardware */ MDRV_CPU_ADD("maincpu", M6502, MASTER_CLOCK/16) MDRV_CPU_PROGRAM_MAP(flyball_map) MDRV_CPU_VBLANK_INT("screen", nmi_line_pulse) + MDRV_MACHINE_START(flyball) MDRV_MACHINE_RESET(flyball) /* video hardware */ @@ -281,6 +427,12 @@ static MACHINE_DRIVER_START( flyball ) MACHINE_DRIVER_END +/************************************* + * + * ROM definition(s) + * + *************************************/ + ROM_START( flyball ) ROM_REGION( 0x3000, "maincpu", 0 ) /* program */ ROM_LOAD( "6129.d5", 0x2000, 0x0200, CRC(17eda069) SHA1(e4ef0bf4546cf00668d759a188e0989a4f003825) ) @@ -304,4 +456,10 @@ ROM_START( flyball ) ROM_END +/************************************* + * + * Game driver(s) + * + *************************************/ + GAME( 1976, flyball, 0, flyball, flyball, 0, 0, "Atari", "Flyball", GAME_NO_SOUND ) diff --git a/src/mame/drivers/funkybee.c b/src/mame/drivers/funkybee.c index 14711d64553..73b0d43459e 100644 --- a/src/mame/drivers/funkybee.c +++ b/src/mame/drivers/funkybee.c @@ -74,17 +74,7 @@ Stephh's notes (based on the games Z80 code and some tests) : #include "driver.h" #include "cpu/z80/z80.h" #include "sound/ay8910.h" - - -extern WRITE8_HANDLER( funkybee_videoram_w ); -extern WRITE8_HANDLER( funkybee_colorram_w ); -extern WRITE8_HANDLER( funkybee_gfx_bank_w ); -extern WRITE8_HANDLER( funkybee_scroll_w ); -extern WRITE8_HANDLER( funkybee_flipscreen_w ); - -extern PALETTE_INIT( funkybee ); -extern VIDEO_START( funkybee ); -extern VIDEO_UPDATE( funkybee ); +#include "funkybee.h" static READ8_HANDLER( funkybee_input_port_0_r ) @@ -95,14 +85,14 @@ static READ8_HANDLER( funkybee_input_port_0_r ) static WRITE8_HANDLER( funkybee_coin_counter_w ) { - coin_counter_w(space->machine, offset,data); + coin_counter_w(space->machine, offset, data); } static ADDRESS_MAP_START( funkybee_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0x0000, 0x4fff) AM_ROM AM_RANGE(0x8000, 0x87ff) AM_RAM - AM_RANGE(0xa000, 0xbfff) AM_RAM_WRITE(funkybee_videoram_w) AM_BASE(&videoram) - AM_RANGE(0xc000, 0xdfff) AM_RAM_WRITE(funkybee_colorram_w) AM_BASE(&colorram) + AM_RANGE(0xa000, 0xbfff) AM_RAM_WRITE(funkybee_videoram_w) AM_BASE_MEMBER(funkybee_state, videoram) + AM_RANGE(0xc000, 0xdfff) AM_RAM_WRITE(funkybee_colorram_w) AM_BASE_MEMBER(funkybee_state, colorram) AM_RANGE(0xe000, 0xe000) AM_WRITE(funkybee_scroll_w) AM_RANGE(0xe800, 0xe800) AM_WRITE(funkybee_flipscreen_w) AM_RANGE(0xe802, 0xe803) AM_WRITE(funkybee_coin_counter_w) @@ -288,14 +278,34 @@ static const ay8910_interface ay8910_config = }; +static MACHINE_START( funkybee ) +{ + funkybee_state *state = (funkybee_state *)machine->driver_data; + + state_save_register_global(machine, state->gfx_bank); +} + +static MACHINE_RESET( funkybee ) +{ + funkybee_state *state = (funkybee_state *)machine->driver_data; + + state->gfx_bank = 0; +} + static MACHINE_DRIVER_START( funkybee ) + /* driver data */ + MDRV_DRIVER_DATA(funkybee_state) + /* basic machine hardware */ MDRV_CPU_ADD("maincpu", Z80, 3072000) /* 3.072 MHz */ MDRV_CPU_PROGRAM_MAP(funkybee_map) MDRV_CPU_IO_MAP(io_map) MDRV_CPU_VBLANK_INT("screen", irq0_line_hold) + MDRV_MACHINE_START(funkybee) + MDRV_MACHINE_RESET(funkybee) + /* video hardware */ MDRV_SCREEN_ADD("screen", RASTER) MDRV_SCREEN_REFRESH_RATE(60) @@ -425,8 +435,7 @@ ROM_START( skylancre ) ROM_LOAD( "18s030.1a", 0x0000, 0x0020, CRC(e645bacb) SHA1(5f4c299c4cf165fd229731c0e5799a34892bf28e) ) ROM_END -GAME( 1982, funkybee, 0, funkybee, funkybee, 0, ROT90, "Orca", "Funky Bee", 0 ) -GAME( 1982, funkybeeb,funkybee, funkybee, funkbeeb, 0, ROT90, "bootleg", "Funky Bee (bootleg, harder)", 0 ) -GAME( 1983, skylancr, 0, funkybee, skylancr, 0, ROT90, "Orca", "Sky Lancer", 0 ) -GAME( 1983, skylancre,skylancr, funkybee, skylance, 0, ROT90, "Orca (Esco Trading Co license)", "Sky Lancer (Esco Trading Co license)", 0 ) - +GAME( 1982, funkybee, 0, funkybee, funkybee, 0, ROT90, "Orca", "Funky Bee", GAME_SUPPORTS_SAVE ) +GAME( 1982, funkybeeb, funkybee, funkybee, funkbeeb, 0, ROT90, "bootleg", "Funky Bee (bootleg, harder)", GAME_SUPPORTS_SAVE ) +GAME( 1983, skylancr, 0, funkybee, skylancr, 0, ROT90, "Orca", "Sky Lancer", GAME_SUPPORTS_SAVE ) +GAME( 1983, skylancre, skylancr, funkybee, skylance, 0, ROT90, "Orca (Esco Trading Co license)", "Sky Lancer (Esco Trading Co license)", GAME_SUPPORTS_SAVE ) diff --git a/src/mame/includes/fitfight.h b/src/mame/includes/fitfight.h index 933b061fb3c..d1762dcf9b8 100644 --- a/src/mame/includes/fitfight.h +++ b/src/mame/includes/fitfight.h @@ -1,14 +1,27 @@ -/*----------- defined in drivers/fitfight.c -----------*/ -extern UINT16 *fitfight_spriteram; -extern UINT16 *fof_700000; -extern UINT16 *fof_900000; -extern UINT16 *fof_a00000; +typedef struct _fitfight_state fitfight_state; +struct _fitfight_state +{ + /* memory pointers */ + UINT16 * fof_100000; + UINT16 * fof_600000; + UINT16 * fof_700000; + UINT16 * fof_800000; + UINT16 * fof_900000; + UINT16 * fof_a00000; + UINT16 * fof_bak_tileram; + UINT16 * fof_mid_tileram; + UINT16 * fof_txt_tileram; + UINT16 * spriteram; +// UINT16 * paletteram16; // currently this uses generic palette handling -extern UINT16 *fof_bak_tileram; -extern UINT16 *fof_mid_tileram; -extern UINT16 *fof_txt_tileram; -extern char bbprot_kludge; + /* video-related */ + tilemap *fof_bak_tilemap, *fof_mid_tilemap, *fof_txt_tilemap; + + /* misc */ + int bbprot_kludge; + UINT16 fof_700000_data; +}; /*----------- defined in video/fitfight.c -----------*/ @@ -16,5 +29,6 @@ extern char bbprot_kludge; WRITE16_HANDLER( fof_bak_tileram_w ); WRITE16_HANDLER( fof_mid_tileram_w ); WRITE16_HANDLER( fof_txt_tileram_w ); + VIDEO_START(fitfight); VIDEO_UPDATE(fitfight); diff --git a/src/mame/includes/flstory.h b/src/mame/includes/flstory.h index 628b47cda4b..b758a68165b 100644 --- a/src/mame/includes/flstory.h +++ b/src/mame/includes/flstory.h @@ -1,20 +1,55 @@ -/*----------- defined in drivers/flstory.c -----------*/ -extern UINT8 *onna34ro_workram; -extern UINT8 *victnine_workram; +typedef struct _flstory_state flstory_state; +struct _flstory_state +{ + /* memory pointers */ + UINT8 * videoram; + UINT8 * workram; + UINT8 * scrlram; + UINT8 * spriteram; +// UINT8 * paletteram; // currently this uses generic palette handling +// UINT8 * paletteram_2; // currently this uses generic palette handling + + /* video-related */ + tilemap *bg_tilemap; + int char_bank, palette_bank, flipscreen, gfxctrl; + + /* sound-related */ + UINT8 snd_data; + UINT8 snd_flag; + int sound_nmi_enable, pending_nmi; + int vol_ctrl[16]; + UINT8 snd_ctrl0; + UINT8 snd_ctrl1; + UINT8 snd_ctrl2; + UINT8 snd_ctrl3; + + /* protection */ + UINT8 from_main, from_mcu; + int mcu_sent, main_sent; + UINT8 port_a_in, port_a_out, ddr_a; + UINT8 port_b_in, port_b_out, ddr_b; + UINT8 port_c_in, port_c_out, ddr_c; + int mcu_select; + + /* devices */ + const device_config *maincpu; + const device_config *audiocpu; + const device_config *mcu; +}; /*----------- defined in machine/flstory.c -----------*/ -READ8_HANDLER( flstory_68705_portA_r ); -WRITE8_HANDLER( flstory_68705_portA_w ); -READ8_HANDLER( flstory_68705_portB_r ); -WRITE8_HANDLER( flstory_68705_portB_w ); -READ8_HANDLER( flstory_68705_portC_r ); -WRITE8_HANDLER( flstory_68705_portC_w ); -WRITE8_HANDLER( flstory_68705_ddrA_w ); -WRITE8_HANDLER( flstory_68705_ddrB_w ); -WRITE8_HANDLER( flstory_68705_ddrC_w ); +READ8_HANDLER( flstory_68705_port_a_r ); +WRITE8_HANDLER( flstory_68705_port_a_w ); +READ8_HANDLER( flstory_68705_port_b_r ); +WRITE8_HANDLER( flstory_68705_port_b_w ); +READ8_HANDLER( flstory_68705_port_c_r ); +WRITE8_HANDLER( flstory_68705_port_c_w ); +WRITE8_HANDLER( flstory_68705_ddr_a_w ); +WRITE8_HANDLER( flstory_68705_ddr_b_w ); +WRITE8_HANDLER( flstory_68705_ddr_c_w ); WRITE8_HANDLER( flstory_mcu_w ); READ8_HANDLER( flstory_mcu_r ); READ8_HANDLER( flstory_mcu_status_r ); @@ -28,8 +63,6 @@ READ8_HANDLER( victnine_mcu_status_r ); /*----------- defined in video/flstory.c -----------*/ -extern UINT8 *flstory_scrlram; - VIDEO_START( flstory ); VIDEO_UPDATE( flstory ); VIDEO_START( victnine ); diff --git a/src/mame/includes/funkybee.h b/src/mame/includes/funkybee.h new file mode 100644 index 00000000000..951b9a29b5a --- /dev/null +++ b/src/mame/includes/funkybee.h @@ -0,0 +1,26 @@ + + +typedef struct _funkybee_state funkybee_state; +struct _funkybee_state +{ + /* memory pointers */ + UINT8 * videoram; + UINT8 * colorram; + + /* video-related */ + tilemap *bg_tilemap; + int gfx_bank; +}; + + +/*----------- defined in video/funkybee.c -----------*/ + +WRITE8_HANDLER( funkybee_videoram_w ); +WRITE8_HANDLER( funkybee_colorram_w ); +WRITE8_HANDLER( funkybee_gfx_bank_w ); +WRITE8_HANDLER( funkybee_scroll_w ); +WRITE8_HANDLER( funkybee_flipscreen_w ); + +PALETTE_INIT( funkybee ); +VIDEO_START( funkybee ); +VIDEO_UPDATE( funkybee ); diff --git a/src/mame/machine/flstory.c b/src/mame/machine/flstory.c index db7e2216bd6..ba4f3b2e297 100644 --- a/src/mame/machine/flstory.c +++ b/src/mame/machine/flstory.c @@ -10,10 +10,6 @@ #include "driver.h" #include "includes/flstory.h" -static UINT8 from_main,from_mcu; -static int mcu_sent = 0,main_sent = 0; - - /*************************************************************************** Fairy Land Story 68705 protection interface @@ -24,23 +20,26 @@ static int mcu_sent = 0,main_sent = 0; ***************************************************************************/ -static UINT8 portA_in,portA_out,ddrA; - -READ8_HANDLER( flstory_68705_portA_r ) +READ8_HANDLER( flstory_68705_port_a_r ) { -//logerror("%04x: 68705 port A read %02x\n",cpu_get_pc(space->cpu),portA_in); - return (portA_out & ddrA) | (portA_in & ~ddrA); + flstory_state *state = (flstory_state *)space->machine->driver_data; + + //logerror("%04x: 68705 port A read %02x\n", cpu_get_pc(space->cpu), state->port_a_in); + return (state->port_a_out & state->ddr_a) | (state->port_a_in & ~state->ddr_a); } -WRITE8_HANDLER( flstory_68705_portA_w ) +WRITE8_HANDLER( flstory_68705_port_a_w ) { -//logerror("%04x: 68705 port A write %02x\n",cpu_get_pc(space->cpu),data); - portA_out = data; + flstory_state *state = (flstory_state *)space->machine->driver_data; + + //logerror("%04x: 68705 port A write %02x\n", cpu_get_pc(space->cpu), data); + state->port_a_out = data; } -WRITE8_HANDLER( flstory_68705_ddrA_w ) +WRITE8_HANDLER( flstory_68705_ddr_a_w ) { - ddrA = data; + flstory_state *state = (flstory_state *)space->machine->driver_data; + state->ddr_a = data; } @@ -54,123 +53,139 @@ WRITE8_HANDLER( flstory_68705_ddrA_w ) * 2 W when 0->1, copies port A to the latch for the main CPU */ -static UINT8 portB_in,portB_out,ddrB; - -READ8_HANDLER( flstory_68705_portB_r ) +READ8_HANDLER( flstory_68705_port_b_r ) { - return (portB_out & ddrB) | (portB_in & ~ddrB); + flstory_state *state = (flstory_state *)space->machine->driver_data; + return (state->port_b_out & state->ddr_b) | (state->port_b_in & ~state->ddr_b); } -WRITE8_HANDLER( flstory_68705_portB_w ) +WRITE8_HANDLER( flstory_68705_port_b_w ) { -//logerror("%04x: 68705 port B write %02x\n",cpu_get_pc(space->cpu),data); + flstory_state *state = (flstory_state *)space->machine->driver_data; + //logerror("%04x: 68705 port B write %02x\n",cpu_get_pc(space->cpu),data); - if ((ddrB & 0x02) && (~data & 0x02) && (portB_out & 0x02)) + if ((state->ddr_b & 0x02) && (~data & 0x02) && (state->port_b_out & 0x02)) { - portA_in = from_main; - if (main_sent) - cputag_set_input_line(space->machine, "mcu", 0, CLEAR_LINE); - main_sent = 0; -logerror("read command %02x from main cpu\n", portA_in); + state->port_a_in = state->from_main; + if (state->main_sent) + cpu_set_input_line(state->mcu, 0, CLEAR_LINE); + state->main_sent = 0; + logerror("read command %02x from main cpu\n", state->port_a_in); } - if ((ddrB & 0x04) && (data & 0x04) && (~portB_out & 0x04)) + if ((state->ddr_b & 0x04) && (data & 0x04) && (~state->port_b_out & 0x04)) { -logerror("send command %02x to main cpu\n", portA_out); - from_mcu = portA_out; - mcu_sent = 1; + logerror("send command %02x to main cpu\n", state->port_a_out); + state->from_mcu = state->port_a_out; + state->mcu_sent = 1; } - portB_out = data; + state->port_b_out = data; } -WRITE8_HANDLER( flstory_68705_ddrB_w ) +WRITE8_HANDLER( flstory_68705_ddr_b_w ) { - ddrB = data; + flstory_state *state = (flstory_state *)space->machine->driver_data; + state->ddr_b = data; } -static UINT8 portC_in,portC_out,ddrC; - -READ8_HANDLER( flstory_68705_portC_r ) +READ8_HANDLER( flstory_68705_port_c_r ) { - portC_in = 0; - if (main_sent) portC_in |= 0x01; - if (!mcu_sent) portC_in |= 0x02; -//logerror("%04x: 68705 port C read %02x\n", cpu_get_pc(space->cpu), portC_in); - return (portC_out & ddrC) | (portC_in & ~ddrC); + flstory_state *state = (flstory_state *)space->machine->driver_data; + + state->port_c_in = 0; + if (state->main_sent) + state->port_c_in |= 0x01; + + if (!state->mcu_sent) + state->port_c_in |= 0x02; + + //logerror("%04x: 68705 port C read %02x\n", cpu_get_pc(space->cpu), port_c_in); + return (state->port_c_out & state->ddr_c) | (state->port_c_in & ~state->ddr_c); } -WRITE8_HANDLER( flstory_68705_portC_w ) +WRITE8_HANDLER( flstory_68705_port_c_w ) { -logerror("%04x: 68705 port C write %02x\n", cpu_get_pc(space->cpu), data); - portC_out = data; + flstory_state *state = (flstory_state *)space->machine->driver_data; + logerror("%04x: 68705 port C write %02x\n", cpu_get_pc(space->cpu), data); + state->port_c_out = data; } -WRITE8_HANDLER( flstory_68705_ddrC_w ) +WRITE8_HANDLER( flstory_68705_ddr_c_w ) { - ddrC = data; + flstory_state *state = (flstory_state *)space->machine->driver_data; + state->ddr_c = data; } WRITE8_HANDLER( flstory_mcu_w ) { -logerror("%04x: mcu_w %02x\n", cpu_get_pc(space->cpu), data); - from_main = data; - main_sent = 1; - cputag_set_input_line(space->machine, "mcu", 0, ASSERT_LINE); + flstory_state *state = (flstory_state *)space->machine->driver_data; + + logerror("%04x: mcu_w %02x\n", cpu_get_pc(space->cpu), data); + state->from_main = data; + state->main_sent = 1; + cpu_set_input_line(state->mcu, 0, ASSERT_LINE); } READ8_HANDLER( flstory_mcu_r ) { -logerror("%04x: mcu_r %02x\n",cpu_get_pc(space->cpu), from_mcu); - mcu_sent = 0; - return from_mcu; + flstory_state *state = (flstory_state *)space->machine->driver_data; + + logerror("%04x: mcu_r %02x\n",cpu_get_pc(space->cpu), state->from_mcu); + state->mcu_sent = 0; + return state->from_mcu; } READ8_HANDLER( flstory_mcu_status_r ) { + flstory_state *state = (flstory_state *)space->machine->driver_data; int res = 0; /* bit 0 = when 1, mcu is ready to receive data from main cpu */ /* bit 1 = when 1, mcu has sent data to the main cpu */ -//logerror("%04x: mcu_status_r\n", cpu_get_pc(space->cpu)); - if (!main_sent) res |= 0x01; - if (mcu_sent) res |= 0x02; + //logerror("%04x: mcu_status_r\n", cpu_get_pc(space->cpu)); + if (!state->main_sent) + res |= 0x01; + if (state->mcu_sent) + res |= 0x02; return res; } WRITE8_HANDLER( onna34ro_mcu_w ) { - UINT16 score_adr = onna34ro_workram[0x29e] * 0x100 + onna34ro_workram[0x29d]; + flstory_state *state = (flstory_state *)space->machine->driver_data; + UINT16 score_adr = state->workram[0x29e] * 0x100 + state->workram[0x29d]; switch (data) { case 0x0e: - from_mcu = 0xff; + state->from_mcu = 0xff; break; case 0x01: - from_mcu = 0x6a; + state->from_mcu = 0x6a; break; case 0x40: if(score_adr >= 0xe000 && score_adr < 0xe800) - from_mcu = onna34ro_workram[score_adr - 0xe000]; /* score l*/ + state->from_mcu = state->workram[score_adr - 0xe000]; /* score l*/ break; case 0x41: if(score_adr >= 0xe000 && score_adr < 0xe800) - from_mcu = onna34ro_workram[(score_adr+1) - 0xe000]; /* score m*/ + state->from_mcu = state->workram[(score_adr + 1) - 0xe000]; /* score m*/ break; case 0x42: if(score_adr >= 0xe000 && score_adr < 0xe800) - from_mcu = onna34ro_workram[(score_adr+2) - 0xe000] & 0x0f; /* score h*/ + state->from_mcu = state->workram[(score_adr + 2) - 0xe000] & 0x0f; /* score h*/ break; default: - from_mcu = 0x80; + state->from_mcu = 0x80; } } READ8_HANDLER( onna34ro_mcu_r ) { - return from_mcu; + flstory_state *state = (flstory_state *)space->machine->driver_data; + return state->from_mcu; } READ8_HANDLER( onna34ro_mcu_status_r ) @@ -181,7 +196,7 @@ READ8_HANDLER( onna34ro_mcu_status_r ) } -#define VICTNINE_MCU_SEED (victnine_workram[0x685]) +#define VICTNINE_MCU_SEED (state->workram[0x685]) static const UINT8 victnine_mcu_data[0x100] = { @@ -219,15 +234,14 @@ static const UINT8 victnine_mcu_data[0x100] = 0x06, 0x07, 0x02, 0x03, 0x15, 0x17, 0x11, 0x13 }; -static int mcu_select = 0; - WRITE8_HANDLER( victnine_mcu_w ) { + flstory_state *state = (flstory_state *)space->machine->driver_data; UINT8 seed = VICTNINE_MCU_SEED; if (!seed && (data & 0x37) == 0x37) { - from_mcu = 0xa6; + state->from_mcu = 0xa6; logerror("mcu initialize (%02x)\n", data); } else @@ -236,19 +250,19 @@ WRITE8_HANDLER( victnine_mcu_w ) if ((data & ~0x1f) == 0xa0) { - mcu_select = data & 0x1f; - //logerror("mcu select: 0x%02x\n", mcu_select); + state->mcu_select = data & 0x1f; + //logerror("mcu select: 0x%02x\n", state->mcu_select); } else if (data < 0x20) { - int offset = mcu_select * 8 + data; + int offset = state->mcu_select * 8 + data; //logerror("mcu fetch: 0x%02x\n", offset); - from_mcu = victnine_mcu_data[offset]; + state->from_mcu = victnine_mcu_data[offset]; } else if (data >= 0x38 && data <= 0x3a) { - from_mcu = victnine_workram[0x691 - 0x38 + data]; + state->from_mcu = state->workram[0x691 - 0x38 + data]; } else { @@ -259,9 +273,10 @@ WRITE8_HANDLER( victnine_mcu_w ) READ8_HANDLER( victnine_mcu_r ) { - //logerror("%04x: mcu read (0x%02x)\n", cpu_get_previouspc(space->cpu), from_mcu); + flstory_state *state = (flstory_state *)space->machine->driver_data; + //logerror("%04x: mcu read (0x%02x)\n", cpu_get_previouspc(space->cpu), state->from_mcu); - return from_mcu - VICTNINE_MCU_SEED; + return state->from_mcu - VICTNINE_MCU_SEED; } READ8_HANDLER( victnine_mcu_status_r ) diff --git a/src/mame/mame.mak b/src/mame/mame.mak index ad0ff6994bc..ca8fa4fb214 100644 --- a/src/mame/mame.mak +++ b/src/mame/mame.mak @@ -407,7 +407,7 @@ $(MAMEOBJ)/atari.a: \ $(DRIVERS)/eprom.o $(VIDEO)/eprom.o \ $(DRIVERS)/firefox.o \ $(DRIVERS)/firetrk.o $(AUDIO)/firetrk.o $(VIDEO)/firetrk.o \ - $(DRIVERS)/flyball.o $(VIDEO)/flyball.o \ + $(DRIVERS)/flyball.o \ $(DRIVERS)/foodf.o $(VIDEO)/foodf.o \ $(DRIVERS)/gauntlet.o $(VIDEO)/gauntlet.o \ $(DRIVERS)/harddriv.o $(MACHINE)/harddriv.o $(AUDIO)/harddriv.o $(VIDEO)/harddriv.o \ diff --git a/src/mame/video/fitfight.c b/src/mame/video/fitfight.c index fbfe41bc69d..f6b77dcd1d4 100644 --- a/src/mame/video/fitfight.c +++ b/src/mame/video/fitfight.c @@ -3,19 +3,17 @@ #include "driver.h" #include "includes/fitfight.h" -static tilemap *fof_bak_tilemap; -static tilemap *fof_mid_tilemap; -static tilemap *fof_txt_tilemap; -static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect, int layer ) +static void draw_sprites( running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect, int layer ) { + fitfight_state *state = (fitfight_state *)machine->driver_data; const gfx_element *gfx = machine->gfx[3]; - UINT16 *source = fitfight_spriteram; - UINT16 *finish = source + 0x800/2; + UINT16 *source = state->spriteram; + UINT16 *finish = source + 0x800 / 2; - while( source> 10; colr = (source[1] & 0x00fc) >> 2; - if (bbprot_kludge==1) colr = (source[1] & 0x00f8) >> 3; + + if (state->bbprot_kludge == 1) + colr = (source[1] & 0x00f8) >> 3; + end = source[0] & 0x8000; - ypos = 0xff-ypos; + ypos = 0xff - ypos; - xpos -=38;//48; - ypos -=14;//16; + xpos -= 38;//48; + ypos -= 14;//16; if (end) break; if (prio == layer) - drawgfx_transpen(bitmap,cliprect,gfx,number,colr,xflip,yflip,xpos,ypos,0); + drawgfx_transpen(bitmap, cliprect, gfx, number, colr, xflip, yflip, xpos, ypos, 0); - source+=4; + source += 4; } } static TILE_GET_INFO( get_fof_bak_tile_info ) { - int code = fof_bak_tileram[tile_index*2+1]; - int colr = fof_bak_tileram[tile_index*2] & 0x1f; - int xflip = (fof_bak_tileram[tile_index*2] & 0x0020)>>5; + fitfight_state *state = (fitfight_state *)machine->driver_data; + int code = state->fof_bak_tileram[tile_index * 2 + 1]; + int colr = state->fof_bak_tileram[tile_index * 2] & 0x1f; + int xflip = (state->fof_bak_tileram[tile_index * 2] & 0x0020) >> 5; xflip ^= 1; - SET_TILE_INFO(2,code,colr,TILE_FLIPYX(xflip)); + SET_TILE_INFO(2, code, colr, TILE_FLIPYX(xflip)); } WRITE16_HANDLER( fof_bak_tileram_w ) { - COMBINE_DATA(&fof_bak_tileram[offset]); - tilemap_mark_tile_dirty(fof_bak_tilemap,offset/2); + fitfight_state *state = (fitfight_state *)space->machine->driver_data; + + COMBINE_DATA(&state->fof_bak_tileram[offset]); + tilemap_mark_tile_dirty(state->fof_bak_tilemap, offset / 2); } static TILE_GET_INFO( get_fof_mid_tile_info ) { - int code = fof_mid_tileram[tile_index*2+1]; - int colr = fof_mid_tileram[tile_index*2] & 0x1f; - int xflip = (fof_mid_tileram[tile_index*2] & 0x0020)>>5; + fitfight_state *state = (fitfight_state *)machine->driver_data; + int code = state->fof_mid_tileram[tile_index * 2 + 1]; + int colr = state->fof_mid_tileram[tile_index * 2] & 0x1f; + int xflip = (state->fof_mid_tileram[tile_index * 2] & 0x0020) >> 5; xflip ^= 1; - SET_TILE_INFO(1,code,colr,TILE_FLIPYX(xflip)); + SET_TILE_INFO(1, code, colr, TILE_FLIPYX(xflip)); } WRITE16_HANDLER( fof_mid_tileram_w ) { - COMBINE_DATA(&fof_mid_tileram[offset]); + fitfight_state *state = (fitfight_state *)space->machine->driver_data; - tilemap_mark_tile_dirty(fof_mid_tilemap,offset/2); + COMBINE_DATA(&state->fof_mid_tileram[offset]); + tilemap_mark_tile_dirty(state->fof_mid_tilemap, offset / 2); } static TILE_GET_INFO( get_fof_txt_tile_info ) { - int code = fof_txt_tileram[tile_index*2+1]; - int colr = fof_txt_tileram[tile_index*2] & 0x1f; - int xflip = (fof_txt_tileram[tile_index*2] & 0x0020)>>5; + fitfight_state *state = (fitfight_state *)machine->driver_data; + int code = state->fof_txt_tileram[tile_index * 2 + 1]; + int colr = state->fof_txt_tileram[tile_index * 2] & 0x1f; + int xflip = (state->fof_txt_tileram[tile_index * 2] & 0x0020) >> 5; xflip ^= 1; - SET_TILE_INFO(0,code,colr,TILE_FLIPYX(xflip)); + SET_TILE_INFO(0, code, colr, TILE_FLIPYX(xflip)); } WRITE16_HANDLER( fof_txt_tileram_w ) { - COMBINE_DATA(&fof_txt_tileram[offset]); - tilemap_mark_tile_dirty(fof_txt_tilemap,offset/2); + fitfight_state *state = (fitfight_state *)space->machine->driver_data; + + COMBINE_DATA(&state->fof_txt_tileram[offset]); + tilemap_mark_tile_dirty(state->fof_txt_tilemap, offset / 2); } /* video start / update */ VIDEO_START(fitfight) { - fof_bak_tilemap = tilemap_create(machine, get_fof_bak_tile_info,tilemap_scan_cols,8,8,128, 32); + fitfight_state *state = (fitfight_state *)machine->driver_data; + state->fof_bak_tilemap = tilemap_create(machine, get_fof_bak_tile_info, tilemap_scan_cols, 8, 8, 128, 32); /* opaque */ - fof_mid_tilemap = tilemap_create(machine, get_fof_mid_tile_info,tilemap_scan_cols,8,8,128, 32); - tilemap_set_transparent_pen(fof_mid_tilemap,0); + state->fof_mid_tilemap = tilemap_create(machine, get_fof_mid_tile_info, tilemap_scan_cols, 8, 8, 128, 32); + tilemap_set_transparent_pen(state->fof_mid_tilemap, 0); - fof_txt_tilemap = tilemap_create(machine, get_fof_txt_tile_info,tilemap_scan_cols,8,8,128, 32); - tilemap_set_transparent_pen(fof_txt_tilemap,0); + state->fof_txt_tilemap = tilemap_create(machine, get_fof_txt_tile_info, tilemap_scan_cols, 8, 8, 128, 32); + tilemap_set_transparent_pen(state->fof_txt_tilemap, 0); } VIDEO_UPDATE(fitfight) { + fitfight_state *state = (fitfight_state *)screen->machine->driver_data; + /* scroll isn't right */ int vblank; - int scrollbak,scrollmid; + int scrollbak, scrollmid; - vblank = (fof_700000[0] & 0x8000); + vblank = (state->fof_700000[0] & 0x8000); if (vblank > 0) bitmap_fill(bitmap, cliprect, get_black_pen(screen->machine)); else { // if (input_code_pressed(screen->machine, KEYCODE_Q)) -// scrollbak = ((fof_a00000[0]&0xff00) >> 5) - ((fof_700000[0] & 0x0038) >> 3); +// scrollbak = ((state->fof_a00000[0] & 0xff00) >> 5) - ((state->fof_700000[0] & 0x0038) >> 3); // else if (input_code_pressed(screen->machine, KEYCODE_W)) -// scrollbak = ((fof_a00000[0]&0xff00) >> 5) + ((fof_700000[0] & 0x01c0) >> 6); +// scrollbak = ((state->fof_a00000[0] & 0xff00) >> 5) + ((state->fof_700000[0] & 0x01c0) >> 6); // else if (input_code_pressed(screen->machine, KEYCODE_E)) -// scrollbak = ((fof_a00000[0]&0xff00) >> 5) - ((fof_700000[0] & 0x01c0) >> 6); +// scrollbak = ((state->fof_a00000[0] & 0xff00) >> 5) - ((state->fof_700000[0] & 0x01c0) >> 6); // else if (input_code_pressed(screen->machine, KEYCODE_R)) -// scrollbak = ((fof_a00000[0]&0xff00) >> 5) + ((fof_700000[0] & 0x0038) >> 3); +// scrollbak = ((state->fof_a00000[0] & 0xff00) >> 5) + ((state->fof_700000[0] & 0x0038) >> 3); // else - scrollbak = ((fof_a00000[0]&0xff00) >> 5); - tilemap_set_scrollx(fof_bak_tilemap,0, scrollbak ); - tilemap_set_scrolly(fof_bak_tilemap,0, fof_a00000[0]&0xff); - tilemap_draw(bitmap,cliprect,fof_bak_tilemap,0,0); + scrollbak = ((state->fof_a00000[0] & 0xff00) >> 5); + tilemap_set_scrollx(state->fof_bak_tilemap,0, scrollbak ); + tilemap_set_scrolly(state->fof_bak_tilemap,0, state->fof_a00000[0] & 0xff); + tilemap_draw(bitmap, cliprect, state->fof_bak_tilemap, 0, 0); - draw_sprites(screen->machine,bitmap,cliprect,0); + draw_sprites(screen->machine, bitmap, cliprect, 0); // if (input_code_pressed(screen->machine, KEYCODE_A)) -// scrollmid = ((fof_900000[0]&0xff00) >> 5) - ((fof_700000[0] & 0x01c0) >> 6); +// scrollmid = ((state->fof_900000[0] & 0xff00) >> 5) - ((state->fof_700000[0] & 0x01c0) >> 6); // else if (input_code_pressed(screen->machine, KEYCODE_S)) -// scrollmid = ((fof_900000[0]&0xff00) >> 5) + ((fof_700000[0] & 0x0038) >> 3); +// scrollmid = ((state->fof_900000[0] & 0xff00) >> 5) + ((state->fof_700000[0] & 0x0038) >> 3); // else if (input_code_pressed(screen->machine, KEYCODE_D)) -// scrollmid = ((fof_900000[0]&0xff00) >> 5) - ((fof_700000[0] & 0x0038) >> 3); +// scrollmid = ((state->fof_900000[0] & 0xff00) >> 5) - ((state->fof_700000[0] & 0x0038) >> 3); // else if (input_code_pressed(screen->machine, KEYCODE_F)) -// scrollmid = ((fof_900000[0]&0xff00) >> 5) + ((fof_700000[0] & 0x01c0) >> 6); +// scrollmid = ((state->fof_900000[0] & 0xff00) >> 5) + ((state->fof_700000[0] & 0x01c0) >> 6); // else - scrollmid = ((fof_900000[0]&0xff00) >> 5); - tilemap_set_scrollx(fof_mid_tilemap,0, scrollmid ); - tilemap_set_scrolly(fof_mid_tilemap,0, fof_900000[0]&0xff); + scrollmid = ((state->fof_900000[0] & 0xff00) >> 5); + tilemap_set_scrollx(state->fof_mid_tilemap, 0, scrollmid ); + tilemap_set_scrolly(state->fof_mid_tilemap, 0, state->fof_900000[0] & 0xff); // if (!input_code_pressed(screen->machine, KEYCODE_F)) - tilemap_draw(bitmap,cliprect,fof_mid_tilemap,0,0); + tilemap_draw(bitmap, cliprect, state->fof_mid_tilemap, 0, 0); - draw_sprites(screen->machine,bitmap,cliprect,1); + draw_sprites(screen->machine, bitmap, cliprect, 1); - tilemap_draw(bitmap,cliprect,fof_txt_tilemap,0,0); + tilemap_draw(bitmap, cliprect, state->fof_txt_tilemap, 0, 0); } /* popmessage ("Regs %04x %04x %04x %04x %04x %04x", - fof_100000[0], fof_600000[0], fof_700000[0], - fof_800000[0], fof_900000[0], - fof_a00000[0] ); + state->fof_100000[0], state->fof_600000[0], state->fof_700000[0], + state->fof_800000[0], state->fof_900000[0], + state->fof_a00000[0] ); */ return 0; } diff --git a/src/mame/video/flstory.c b/src/mame/video/flstory.c index f40e4efd4e2..60e94345ef8 100644 --- a/src/mame/video/flstory.c +++ b/src/mame/video/flstory.c @@ -5,21 +5,16 @@ Functions to emulate the video hardware of the machine. ***************************************************************************/ + #include "driver.h" #include "includes/flstory.h" - -static tilemap *bg_tilemap; -static int char_bank,palette_bank,flipscreen,gfxctrl; - -UINT8 *flstory_scrlram; - - static TILE_GET_INFO( get_tile_info ) { - int code = videoram[tile_index*2]; - int attr = videoram[tile_index*2+1]; - int tile_number = code + ((attr & 0xc0) << 2) + 0x400 + 0x800 * char_bank; + flstory_state *state = (flstory_state *)machine->driver_data; + int code = state->videoram[tile_index * 2]; + int attr = state->videoram[tile_index * 2 + 1]; + int tile_number = code + ((attr & 0xc0) << 2) + 0x400 + 0x800 * state->char_bank; int flags = TILE_FLIPYX((attr & 0x18) >> 3); tileinfo->category = (attr & 0x20) >> 5; tileinfo->group = (attr & 0x20) >> 5; @@ -32,8 +27,9 @@ static TILE_GET_INFO( get_tile_info ) static TILE_GET_INFO( victnine_get_tile_info ) { - int code = videoram[tile_index*2]; - int attr = videoram[tile_index*2+1]; + flstory_state *state = (flstory_state *)machine->driver_data; + int code = state->videoram[tile_index * 2]; + int attr = state->videoram[tile_index * 2 + 1]; int tile_number = ((attr & 0x38) << 5) + code; int flags = ((attr & 0x40) ? TILE_FLIPX : 0) | ((attr & 0x80) ? TILE_FLIPY : 0); @@ -47,115 +43,129 @@ static TILE_GET_INFO( victnine_get_tile_info ) VIDEO_START( flstory ) { - bg_tilemap = tilemap_create( machine, get_tile_info,tilemap_scan_rows,8,8,32,32 ); -// tilemap_set_transparent_pen( bg_tilemap,15 ); - tilemap_set_transmask(bg_tilemap,0,0x3fff,0xc000); /* split type 0 has pens 0-13 transparent in front half */ - tilemap_set_transmask(bg_tilemap,1,0x8000,0x7fff); /* split type 1 has pen 15 transparent in front half */ - tilemap_set_scroll_cols(bg_tilemap,32); + flstory_state *state = (flstory_state *)machine->driver_data; + state->bg_tilemap = tilemap_create(machine, get_tile_info, tilemap_scan_rows, 8, 8, 32, 32); +// tilemap_set_transparent_pen(state->bg_tilemap, 15); + tilemap_set_transmask(state->bg_tilemap, 0, 0x3fff, 0xc000); /* split type 0 has pens 0-13 transparent in front half */ + tilemap_set_transmask(state->bg_tilemap, 1, 0x8000, 0x7fff); /* split type 1 has pen 15 transparent in front half */ + tilemap_set_scroll_cols(state->bg_tilemap, 32); paletteram = auto_alloc_array(machine, UINT8, 0x200); paletteram_2 = auto_alloc_array(machine, UINT8, 0x200); + state_save_register_global_pointer(machine, paletteram, 0x200); + state_save_register_global_pointer(machine, paletteram_2, 0x200); } VIDEO_START( victnine ) { - bg_tilemap = tilemap_create( machine, victnine_get_tile_info,tilemap_scan_rows,8,8,32,32 ); - tilemap_set_scroll_cols(bg_tilemap,32); + flstory_state *state = (flstory_state *)machine->driver_data; + state->bg_tilemap = tilemap_create(machine, victnine_get_tile_info, tilemap_scan_rows, 8, 8, 32, 32); + tilemap_set_scroll_cols(state->bg_tilemap, 32); paletteram = auto_alloc_array(machine, UINT8, 0x200); paletteram_2 = auto_alloc_array(machine, UINT8, 0x200); + state_save_register_global_pointer(machine, paletteram, 0x200); + state_save_register_global_pointer(machine, paletteram_2, 0x200); } WRITE8_HANDLER( flstory_videoram_w ) { - videoram[offset] = data; - tilemap_mark_tile_dirty(bg_tilemap,offset/2); + flstory_state *state = (flstory_state *)space->machine->driver_data; + state->videoram[offset] = data; + tilemap_mark_tile_dirty(state->bg_tilemap, offset / 2); } WRITE8_HANDLER( flstory_palette_w ) { + flstory_state *state = (flstory_state *)space->machine->driver_data; if (offset & 0x100) - paletteram_xxxxBBBBGGGGRRRR_split2_w(space, (offset & 0xff) + (palette_bank << 8),data); + paletteram_xxxxBBBBGGGGRRRR_split2_w(space, (offset & 0xff) + (state->palette_bank << 8),data); else - paletteram_xxxxBBBBGGGGRRRR_split1_w(space, (offset & 0xff) + (palette_bank << 8),data); + paletteram_xxxxBBBBGGGGRRRR_split1_w(space, (offset & 0xff) + (state->palette_bank << 8),data); } READ8_HANDLER( flstory_palette_r ) { + flstory_state *state = (flstory_state *)space->machine->driver_data; if (offset & 0x100) - return paletteram_2[ (offset & 0xff) + (palette_bank << 8) ]; + return paletteram_2[ (offset & 0xff) + (state->palette_bank << 8) ]; else - return paletteram [ (offset & 0xff) + (palette_bank << 8) ]; + return paletteram [ (offset & 0xff) + (state->palette_bank << 8) ]; } WRITE8_HANDLER( flstory_gfxctrl_w ) { - if (gfxctrl == data) + flstory_state *state = (flstory_state *)space->machine->driver_data; + if (state->gfxctrl == data) return; - gfxctrl = data; + state->gfxctrl = data; - flipscreen = (~data & 0x01); - if (char_bank != ((data & 0x10) >> 4)) + state->flipscreen = (~data & 0x01); + if (state->char_bank != ((data & 0x10) >> 4)) { - char_bank = (data & 0x10) >> 4; - tilemap_mark_all_tiles_dirty(bg_tilemap); + state->char_bank = (data & 0x10) >> 4; + tilemap_mark_all_tiles_dirty(state->bg_tilemap); } - palette_bank = (data & 0x20) >> 5; + state->palette_bank = (data & 0x20) >> 5; - flip_screen_set(space->machine, flipscreen); + flip_screen_set(space->machine, state->flipscreen); -//popmessage("%04x: gfxctrl = %02x\n",cpu_get_pc(space->cpu),data); +//popmessage("%04x: gfxctrl = %02x\n", cpu_get_pc(space->cpu), data); } READ8_HANDLER( victnine_gfxctrl_r ) { - return gfxctrl; + flstory_state *state = (flstory_state *)space->machine->driver_data; + return state->gfxctrl; } WRITE8_HANDLER( victnine_gfxctrl_w ) { - if (gfxctrl == data) + flstory_state *state = (flstory_state *)space->machine->driver_data; + if (state->gfxctrl == data) return; - gfxctrl = data; + state->gfxctrl = data; - palette_bank = (data & 0x20) >> 5; + state->palette_bank = (data & 0x20) >> 5; if (data & 0x04) { - flipscreen = (data & 0x01); - flip_screen_set(space->machine, flipscreen); + state->flipscreen = (data & 0x01); + flip_screen_set(space->machine, state->flipscreen); } -//popmessage("%04x: gfxctrl = %02x\n",cpu_get_pc(space->cpu),data); +//popmessage("%04x: gfxctrl = %02x\n", cpu_get_pc(space->cpu), data); } WRITE8_HANDLER( flstory_scrlram_w ) { - flstory_scrlram[offset] = data; - tilemap_set_scrolly(bg_tilemap, offset, data ); + flstory_state *state = (flstory_state *)space->machine->driver_data; + state->scrlram[offset] = data; + tilemap_set_scrolly(state->bg_tilemap, offset, data); } -static void flstory_draw_sprites(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect, int pri) +static void flstory_draw_sprites( running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect, int pri ) { + flstory_state *state = (flstory_state *)machine->driver_data; int i; for (i = 0; i < 0x20; i++) { - int pr = spriteram[spriteram_size-1 -i]; + int pr = state->spriteram[spriteram_size - 1 - i]; int offs = (pr & 0x1f) * 4; if ((pr & 0x80) == pri) { - int code,sx,sy,flipx,flipy; + int code, sx, sy, flipx, flipy; - code = spriteram[offs+2] + ((spriteram[offs+1] & 0x30) << 4); - sx = spriteram[offs+3]; - sy = spriteram[offs+0]; + code = state->spriteram[offs + 2] + ((state->spriteram[offs + 1] & 0x30) << 4); + sx = state->spriteram[offs + 3]; + sy = state->spriteram[offs + 0]; - if (flipscreen) + if (state->flipscreen) { sx = (240 - sx) & 0xff ; sy = sy - 1 ; @@ -163,19 +173,19 @@ static void flstory_draw_sprites(running_machine *machine, bitmap_t *bitmap, con else sy = 240 - sy - 1 ; - flipx = ((spriteram[offs+1]&0x40)>>6)^flipscreen; - flipy = ((spriteram[offs+1]&0x80)>>7)^flipscreen; + flipx = ((state->spriteram[offs + 1] & 0x40) >> 6) ^ state->flipscreen; + flipy = ((state->spriteram[offs + 1] & 0x80) >> 7) ^ state->flipscreen; drawgfx_transpen(bitmap,cliprect,machine->gfx[1], code, - spriteram[offs+1] & 0x0f, + state->spriteram[offs + 1] & 0x0f, flipx,flipy, sx,sy,15); /* wrap around */ if (sx > 240) drawgfx_transpen(bitmap,cliprect,machine->gfx[1], code, - spriteram[offs+1] & 0x0f, + state->spriteram[offs + 1] & 0x0f, flipx,flipy, sx-256,sy,15); } @@ -184,33 +194,35 @@ static void flstory_draw_sprites(running_machine *machine, bitmap_t *bitmap, con VIDEO_UPDATE( flstory ) { - tilemap_draw(bitmap,cliprect,bg_tilemap,0|TILEMAP_DRAW_LAYER1,0); - tilemap_draw(bitmap,cliprect,bg_tilemap,1|TILEMAP_DRAW_LAYER1,0); - flstory_draw_sprites(screen->machine,bitmap,cliprect,0x00); - tilemap_draw(bitmap,cliprect,bg_tilemap,0|TILEMAP_DRAW_LAYER0,0); - flstory_draw_sprites(screen->machine,bitmap,cliprect,0x80); - tilemap_draw(bitmap,cliprect,bg_tilemap,1|TILEMAP_DRAW_LAYER0,0); + flstory_state *state = (flstory_state *)screen->machine->driver_data; + tilemap_draw(bitmap, cliprect, state->bg_tilemap, 0 | TILEMAP_DRAW_LAYER1, 0); + tilemap_draw(bitmap, cliprect, state->bg_tilemap, 1 | TILEMAP_DRAW_LAYER1, 0); + flstory_draw_sprites(screen->machine, bitmap, cliprect, 0x00); + tilemap_draw(bitmap, cliprect, state->bg_tilemap, 0 | TILEMAP_DRAW_LAYER0, 0); + flstory_draw_sprites(screen->machine, bitmap, cliprect, 0x80); + tilemap_draw(bitmap, cliprect, state->bg_tilemap, 1 | TILEMAP_DRAW_LAYER0, 0); return 0; } -static void victnine_draw_sprites(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect) +static void victnine_draw_sprites( running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect ) { + flstory_state *state = (flstory_state *)machine->driver_data; int i; for (i = 0; i < 0x20; i++) { - int pr = spriteram[spriteram_size-1 -i]; + int pr = state->spriteram[spriteram_size - 1 - i]; int offs = (pr & 0x1f) * 4; //if ((pr & 0x80) == pri) { - int code,sx,sy,flipx,flipy; + int code, sx, sy, flipx, flipy; - code = spriteram[offs+2] + ((spriteram[offs+1] & 0x20) << 3); - sx = spriteram[offs+3]; - sy = spriteram[offs+0]; + code = state->spriteram[offs + 2] + ((state->spriteram[offs + 1] & 0x20) << 3); + sx = state->spriteram[offs + 3]; + sy = state->spriteram[offs + 0]; - if (flipscreen) + if (state->flipscreen) { sx = (240 - sx + 1) & 0xff ; sy = sy + 1 ; @@ -218,19 +230,19 @@ static void victnine_draw_sprites(running_machine *machine, bitmap_t *bitmap, co else sy = 240 - sy + 1 ; - flipx = ((spriteram[offs+1]&0x40)>>6)^flipscreen; - flipy = ((spriteram[offs+1]&0x80)>>7)^flipscreen; + flipx = ((state->spriteram[offs + 1] & 0x40) >> 6) ^ state->flipscreen; + flipy = ((state->spriteram[offs + 1] & 0x80) >> 7) ^ state->flipscreen; drawgfx_transpen(bitmap,cliprect,machine->gfx[1], code, - spriteram[offs+1] & 0x0f, + state->spriteram[offs + 1] & 0x0f, flipx,flipy, sx,sy,15); /* wrap around */ if (sx > 240) drawgfx_transpen(bitmap,cliprect,machine->gfx[1], code, - spriteram[offs+1] & 0x0f, + state->spriteram[offs + 1] & 0x0f, flipx,flipy, sx-256,sy,15); } @@ -239,7 +251,8 @@ static void victnine_draw_sprites(running_machine *machine, bitmap_t *bitmap, co VIDEO_UPDATE( victnine ) { - tilemap_draw(bitmap,cliprect,bg_tilemap,0,0); - victnine_draw_sprites(screen->machine,bitmap,cliprect); + flstory_state *state = (flstory_state *)screen->machine->driver_data; + tilemap_draw(bitmap, cliprect, state->bg_tilemap, 0, 0); + victnine_draw_sprites(screen->machine, bitmap, cliprect); return 0; } diff --git a/src/mame/video/flyball.c b/src/mame/video/flyball.c deleted file mode 100644 index 2aa57d6b817..00000000000 --- a/src/mame/video/flyball.c +++ /dev/null @@ -1,89 +0,0 @@ -/*************************************************************************** - -Atari Flyball video emulation - -***************************************************************************/ - -#include "driver.h" - -static tilemap* flyball_tilemap; - -UINT8 flyball_pitcher_vert; -UINT8 flyball_pitcher_horz; -UINT8 flyball_pitcher_pic; -UINT8 flyball_ball_vert; -UINT8 flyball_ball_horz; - -UINT8* flyball_playfield_ram; - - -static TILEMAP_MAPPER( flyball_get_memory_offset ) -{ - if (col == 0) - { - col = num_cols; - } - - return num_cols * (num_rows - row) - col; -} - - -static TILE_GET_INFO( flyball_get_tile_info ) -{ - UINT8 data = flyball_playfield_ram[tile_index]; - - int flags = - ((data & 0x40) ? TILE_FLIPX : 0) | - ((data & 0x80) ? TILE_FLIPY : 0); - - int code = data & 63; - - if ((flags & TILE_FLIPX) && (flags & TILE_FLIPY)) - { - code += 64; - } - - SET_TILE_INFO(0, code, 0, flags); -} - - -VIDEO_START( flyball ) -{ - flyball_tilemap = tilemap_create(machine, flyball_get_tile_info, - flyball_get_memory_offset, 8, 16, 32, 16); -} - - -VIDEO_UPDATE( flyball ) -{ - int pitcherx = flyball_pitcher_horz; - int pitchery = flyball_pitcher_vert - 31; - - int ballx = flyball_ball_horz - 1; - int bally = flyball_ball_vert - 17; - - int x; - int y; - - tilemap_mark_all_tiles_dirty(flyball_tilemap); - - /* draw playfield */ - - tilemap_draw(bitmap, cliprect, flyball_tilemap, 0, 0); - - /* draw pitcher */ - - drawgfx_transpen(bitmap, cliprect, screen->machine->gfx[1], flyball_pitcher_pic ^ 0xf, - 0, 1, 0, pitcherx, pitchery, 1); - - /* draw ball */ - - for (y = bally; y < bally + 2; y++) - for (x = ballx; x < ballx + 2; x++) - if (x >= cliprect->min_x && - x <= cliprect->max_x && - y >= cliprect->min_y && - y <= cliprect->max_y) - *BITMAP_ADDR16(bitmap, y, x) = 1; - return 0; -} diff --git a/src/mame/video/funkybee.c b/src/mame/video/funkybee.c index 7946670ee02..e970751db03 100644 --- a/src/mame/video/funkybee.c +++ b/src/mame/video/funkybee.c @@ -7,19 +7,16 @@ ***************************************************************************/ #include "driver.h" - -static int gfx_bank; -static tilemap *bg_tilemap; +#include "funkybee.h" PALETTE_INIT( funkybee ) { int i; - /* first, the character/sprite palette */ - for (i = 0;i < 32;i++) + for (i = 0; i < 32; i++) { - int bit0,bit1,bit2,r,g,b; + int bit0, bit1, bit2, r, g, b; /* red component */ bit0 = (*color_prom >> 0) & 0x01; @@ -37,35 +34,39 @@ PALETTE_INIT( funkybee ) bit2 = (*color_prom >> 7) & 0x01; b = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2; - palette_set_color(machine,i,MAKE_RGB(r,g,b)); + palette_set_color(machine, i, MAKE_RGB(r,g,b)); color_prom++; } } WRITE8_HANDLER( funkybee_videoram_w ) { - videoram[offset] = data; - tilemap_mark_tile_dirty(bg_tilemap, offset); + funkybee_state *state = (funkybee_state *)space->machine->driver_data; + state->videoram[offset] = data; + tilemap_mark_tile_dirty(state->bg_tilemap, offset); } WRITE8_HANDLER( funkybee_colorram_w ) { - colorram[offset] = data; - tilemap_mark_tile_dirty(bg_tilemap, offset); + funkybee_state *state = (funkybee_state *)space->machine->driver_data; + state->colorram[offset] = data; + tilemap_mark_tile_dirty(state->bg_tilemap, offset); } WRITE8_HANDLER( funkybee_gfx_bank_w ) { - if (gfx_bank != (data & 0x01)) + funkybee_state *state = (funkybee_state *)space->machine->driver_data; + if (state->gfx_bank != (data & 0x01)) { - gfx_bank = data & 0x01; + state->gfx_bank = data & 0x01; tilemap_mark_all_tiles_dirty_all(space->machine); } } WRITE8_HANDLER( funkybee_scroll_w ) { - tilemap_set_scrollx(bg_tilemap, 0, flip_screen_get(space->machine) ? -data : data); + funkybee_state *state = (funkybee_state *)space->machine->driver_data; + tilemap_set_scrollx(state->bg_tilemap, 0, flip_screen_get(space->machine) ? -data : data); } WRITE8_HANDLER( funkybee_flipscreen_w ) @@ -75,10 +76,11 @@ WRITE8_HANDLER( funkybee_flipscreen_w ) static TILE_GET_INFO( get_bg_tile_info ) { - int code = videoram[tile_index] + ((colorram[tile_index] & 0x80) << 1); - int color = colorram[tile_index] & 0x03; + funkybee_state *state = (funkybee_state *)machine->driver_data; + int code = state->videoram[tile_index] + ((state->colorram[tile_index] & 0x80) << 1); + int color = state->colorram[tile_index] & 0x03; - SET_TILE_INFO(gfx_bank, code, color, 0); + SET_TILE_INFO(state->gfx_bank, code, color, 0); } static TILEMAP_MAPPER( funkybee_tilemap_scan ) @@ -89,23 +91,25 @@ static TILEMAP_MAPPER( funkybee_tilemap_scan ) VIDEO_START( funkybee ) { - bg_tilemap = tilemap_create(machine, get_bg_tile_info, funkybee_tilemap_scan, 8, 8, 32, 32); + funkybee_state *state = (funkybee_state *)machine->driver_data; + state->bg_tilemap = tilemap_create(machine, get_bg_tile_info, funkybee_tilemap_scan, 8, 8, 32, 32); } -static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect) +static void draw_sprites( running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect ) { + funkybee_state *state = (funkybee_state *)machine->driver_data; int offs; for (offs = 0x0f; offs >= 0; offs--) { int offs2 = offs + 0x1e00; - int attr = videoram[offs2]; + int attr = state->videoram[offs2]; int code = (attr >> 2) | ((attr & 2) << 5); - int color = colorram[offs2 + 0x10]; + int color = state->colorram[offs2 + 0x10]; int flipx = 0; int flipy = attr & 0x01; - int sx = videoram[offs2 + 0x10]; - int sy = 224 - colorram[offs2]; + int sx = state->videoram[offs2 + 0x10]; + int sy = 224 - state->colorram[offs2]; if (flip_screen_get(machine)) { @@ -113,42 +117,43 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const recta flipx = !flipx; } - drawgfx_transpen(bitmap,cliprect, machine->gfx[2+gfx_bank], + drawgfx_transpen(bitmap,cliprect, machine->gfx[2 + state->gfx_bank], code, color, flipx, flipy, sx, sy, 0); } } -static void draw_columns(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect) +static void draw_columns( running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect ) { + funkybee_state *state = (funkybee_state *)machine->driver_data; int offs; - for (offs = 0x1f;offs >= 0;offs--) + for (offs = 0x1f; offs >= 0; offs--) { int const flip = flip_screen_get(machine); - int code = videoram[0x1c00 + offs]; - int color = colorram[0x1f10] & 0x03; - int sx = flip ? videoram[0x1f1f] : videoram[0x1f10]; + int code = state->videoram[0x1c00 + offs]; + int color = state->colorram[0x1f10] & 0x03; + int sx = flip ? state->videoram[0x1f1f] : state->videoram[0x1f10]; int sy = offs * 8; if (flip) sy = 248 - sy; - drawgfx_transpen(bitmap,cliprect,machine->gfx[gfx_bank], + drawgfx_transpen(bitmap,cliprect,machine->gfx[state->gfx_bank], code, color, flip, flip, sx, sy,0); - code = videoram[0x1d00 + offs]; - color = colorram[0x1f11] & 0x03; - sx = flip ? videoram[0x1f1e] : videoram[0x1f11]; + code = state->videoram[0x1d00 + offs]; + color = state->colorram[0x1f11] & 0x03; + sx = flip ? state->videoram[0x1f1e] : state->videoram[0x1f11]; sy = offs * 8; if (flip) sy = 248 - sy; - drawgfx_transpen(bitmap,cliprect,machine->gfx[gfx_bank], + drawgfx_transpen(bitmap,cliprect,machine->gfx[state->gfx_bank], code, color, flip, flip, sx, sy,0); @@ -157,7 +162,8 @@ static void draw_columns(running_machine *machine, bitmap_t *bitmap, const recta VIDEO_UPDATE( funkybee ) { - tilemap_draw(bitmap, cliprect, bg_tilemap, 0, 0); + funkybee_state *state = (funkybee_state *)screen->machine->driver_data; + tilemap_draw(bitmap, cliprect, state->bg_tilemap, 0, 0); draw_sprites(screen->machine, bitmap, cliprect); draw_columns(screen->machine, bitmap, cliprect); return 0;