diff --git a/src/mame/audio/redalert.c b/src/mame/audio/redalert.c index 71b24943364..ba60cf38a8b 100644 --- a/src/mame/audio/redalert.c +++ b/src/mame/audio/redalert.c @@ -34,17 +34,6 @@ -/************************************* - * - * Statics - * - *************************************/ - -static UINT8 ay8910_latch_1; -static UINT8 ay8910_latch_2; - - - /************************************* * * Read Alert analog sounds @@ -87,6 +76,7 @@ WRITE8_HANDLER( redalert_audio_command_w ) static WRITE8_DEVICE_HANDLER( redalert_AY8910_w ) { + redalert_state *state = device->machine->driver_data(); /* BC2 is connected to a pull-up resistor, so BC2=1 always */ switch (data & 0x03) { @@ -96,7 +86,7 @@ static WRITE8_DEVICE_HANDLER( redalert_AY8910_w ) /* BC1=1, BDIR=0 : read from PSG */ case 0x01: - ay8910_latch_1 = ay8910_r(device, 0); + state->ay8910_latch_1 = ay8910_r(device, 0); break; /* BC1=0, BDIR=1 : write to PSG */ @@ -104,7 +94,7 @@ static WRITE8_DEVICE_HANDLER( redalert_AY8910_w ) case 0x02: case 0x03: default: - ay8910_data_address_w(device, data, ay8910_latch_2); + ay8910_data_address_w(device, data, state->ay8910_latch_2); break; } } @@ -112,13 +102,15 @@ static WRITE8_DEVICE_HANDLER( redalert_AY8910_w ) static READ8_HANDLER( redalert_ay8910_latch_1_r ) { - return ay8910_latch_1; + redalert_state *state = space->machine->driver_data(); + return state->ay8910_latch_1; } static WRITE8_HANDLER( redalert_ay8910_latch_2_w ) { - ay8910_latch_2 = data; + redalert_state *state = space->machine->driver_data(); + state->ay8910_latch_2 = data; } @@ -150,8 +142,9 @@ ADDRESS_MAP_END static SOUND_START( redalert_audio ) { - state_save_register_global(machine, ay8910_latch_1); - state_save_register_global(machine, ay8910_latch_2); + redalert_state *state = machine->driver_data(); + state_save_register_global(machine, state->ay8910_latch_1); + state_save_register_global(machine, state->ay8910_latch_2); } @@ -297,52 +290,55 @@ WRITE8_HANDLER( demoneye_audio_command_w ) static WRITE8_DEVICE_HANDLER( demoneye_ay8910_latch_1_w ) { - ay8910_latch_1 = data; + redalert_state *state = device->machine->driver_data(); + state->ay8910_latch_1 = data; } static READ8_DEVICE_HANDLER( demoneye_ay8910_latch_2_r ) { - return ay8910_latch_2; + redalert_state *state = device->machine->driver_data(); + return state->ay8910_latch_2; } static WRITE8_DEVICE_HANDLER( demoneye_ay8910_data_w ) { + redalert_state *state = device->machine->driver_data(); device_t *ay1 = device->machine->device("ay1"); device_t *ay2 = device->machine->device("ay2"); - switch (ay8910_latch_1 & 0x03) + switch (state->ay8910_latch_1 & 0x03) { case 0x00: - if (ay8910_latch_1 & 0x10) + if (state->ay8910_latch_1 & 0x10) ay8910_data_w(ay1, 0, data); - if (ay8910_latch_1 & 0x20) + if (state->ay8910_latch_1 & 0x20) ay8910_data_w(ay2, 0, data); break; case 0x01: - if (ay8910_latch_1 & 0x10) - ay8910_latch_2 = ay8910_r(ay1, 0); + if (state->ay8910_latch_1 & 0x10) + state->ay8910_latch_2 = ay8910_r(ay1, 0); - if (ay8910_latch_1 & 0x20) - ay8910_latch_2 = ay8910_r(ay2, 0); + if (state->ay8910_latch_1 & 0x20) + state->ay8910_latch_2 = ay8910_r(ay2, 0); break; case 0x03: - if (ay8910_latch_1 & 0x10) + if (state->ay8910_latch_1 & 0x10) ay8910_address_w(ay1, 0, data); - if (ay8910_latch_1 & 0x20) + if (state->ay8910_latch_1 & 0x20) ay8910_address_w(ay2, 0, data); break; default: - logerror("demoneye_ay8910_data_w called with latch %02X data %02X\n", ay8910_latch_1, data); + logerror("demoneye_ay8910_data_w called with latch %02X data %02X\n", state->ay8910_latch_1, data); break; } } @@ -393,8 +389,9 @@ static const pia6821_interface demoneye_pia_intf = static SOUND_START( demoneye ) { - state_save_register_global(machine, ay8910_latch_1); - state_save_register_global(machine, ay8910_latch_2); + redalert_state *state = machine->driver_data(); + state_save_register_global(machine, state->ay8910_latch_1); + state_save_register_global(machine, state->ay8910_latch_2); } diff --git a/src/mame/drivers/bking.c b/src/mame/drivers/bking.c index c6767d6fa88..1421d7ea23e 100644 --- a/src/mame/drivers/bking.c +++ b/src/mame/drivers/bking.c @@ -145,40 +145,41 @@ static ADDRESS_MAP_START( bking_audio_map, ADDRESS_SPACE_PROGRAM, 8 ) ADDRESS_MAP_END #if 0 -static UINT8 port_a_in,port_a_out,ddr_a; - static READ8_HANDLER( bking3_68705_port_a_r ) { - //printf("port_a_r = %02X\n",(port_a_out & ddr_a) | (port_a_in & ~ddr_a)); - return (port_a_out & ddr_a) | (port_a_in & ~ddr_a); + bking_state *state = space->machine->driver_data(); + //printf("port_a_r = %02X\n",(state->port_a_out & state->ddr_a) | (state->port_a_in & ~state->ddr_a)); + return (state->port_a_out & state->ddr_a) | (state->port_a_in & ~state->ddr_a); } static WRITE8_HANDLER( bking3_68705_port_a_w ) { - port_a_out = data; + bking_state *state = space->machine->driver_data(); + state->port_a_out = data; // printf("port_a_out = %02X\n",data); } static WRITE8_HANDLER( bking3_68705_ddr_a_w ) { - ddr_a = data; + bking_state *state = space->machine->driver_data(); + state->ddr_a = data; } -static UINT8 port_b_in,port_b_out,ddr_b; - static READ8_HANDLER( bking3_68705_port_b_r ) { - return (port_b_out & ddr_b) | (port_b_in & ~ddr_b); + bking_state *state = space->machine->driver_data(); + return (state->port_b_out & state->ddr_b) | (state->port_b_in & ~state->ddr_b); } static WRITE8_HANDLER( bking3_68705_port_b_w ) { + bking_state *state = space->machine->driver_data(); // if(data != 0xff) // printf("port_b_out = %02X\n",data); if (~data & 0x02) { - port_a_in = from_main; + state->port_a_in = from_main; if (main_sent) cputag_set_input_line(space->machine, "mcu", 0, CLEAR_LINE); main_sent = 0; } @@ -186,19 +187,20 @@ static WRITE8_HANDLER( bking3_68705_port_b_w ) if (~data & 0x04) { /* 68705 is writing data for the Z80 */ - from_mcu = port_a_out; + from_mcu = state->port_a_out; mcu_sent = 1; } if(data != 0xff && data != 0xfb && data != 0xfd) printf("port_b_w = %X\n",data); - port_b_out = data; + state->port_b_out = data; } static WRITE8_HANDLER( bking3_68705_ddr_b_w ) { - ddr_b = data; + bking_state *state = space->machine->driver_data(); + state->ddr_b = data; } static READ8_HANDLER( bking3_68705_port_c_r ) diff --git a/src/mame/drivers/crbaloon.c b/src/mame/drivers/crbaloon.c index 1d51eda76c5..ec74e71d3d0 100644 --- a/src/mame/drivers/crbaloon.c +++ b/src/mame/drivers/crbaloon.c @@ -19,10 +19,6 @@ #include "includes/crbaloon.h" -static UINT8 *pc3092_data; - - - /************************************* * * PC3092 custom chip @@ -56,15 +52,17 @@ static void pc3092_reset(void) static void pc3092_update(running_machine *machine) { - flip_screen_set(machine, (pc3092_data[1] & 0x01) ? TRUE : FALSE); + crbaloon_state *state = machine->driver_data(); + flip_screen_set(machine, (state->pc3092_data[1] & 0x01) ? TRUE : FALSE); } static WRITE8_HANDLER( pc3092_w ) { - pc3092_data[offset] = data & 0x0f; + crbaloon_state *state = space->machine->driver_data(); + state->pc3092_data[offset] = data & 0x0f; - if (LOG_PC3092) logerror("%04X: write PC3092 #%d = 0x%02x\n", cpu_get_pc(space->cpu), offset, pc3092_data[offset]); + if (LOG_PC3092) logerror("%04X: write PC3092 #%d = 0x%02x\n", cpu_get_pc(space->cpu), offset, state->pc3092_data[offset]); pc3092_update(space->machine); } @@ -72,10 +70,11 @@ static WRITE8_HANDLER( pc3092_w ) static CUSTOM_INPUT( pc3092_r ) { + crbaloon_state *state = field->port->machine->driver_data(); UINT32 ret; /* enable coin & start input? Wild guess!!! */ - if (pc3092_data[1] & 0x02) + if (state->pc3092_data[1] & 0x02) ret = input_port_read(field->port->machine, "PC3092"); else ret = 0x00; @@ -121,7 +120,7 @@ static READ8_HANDLER( pc3259_r ) UINT8 ret = 0; UINT8 reg = offset >> 2; - UINT16 collision_address = crbaloon_get_collision_address(); + UINT16 collision_address = crbaloon_get_collision_address(space->machine); int collided = (collision_address != 0xffff); switch (reg) @@ -164,7 +163,7 @@ static WRITE8_HANDLER( port_sound_w ) /* D0 - interrupt enable - also goes to PC3259 as /HTCTRL */ cpu_interrupt_enable(space->machine->device("maincpu"), (data & 0x01) ? TRUE : FALSE); - crbaloon_set_clear_collision_address((data & 0x01) ? TRUE : FALSE); + crbaloon_set_clear_collision_address(space->machine, (data & 0x01) ? TRUE : FALSE); /* D1 - SOUND STOP */ space->machine->sound().system_enable((data & 0x02) ? TRUE : FALSE); @@ -201,8 +200,8 @@ static ADDRESS_MAP_START( main_map, ADDRESS_SPACE_PROGRAM, 8 ) ADDRESS_MAP_GLOBAL_MASK(0x7fff) /* A15 is not decoded */ AM_RANGE(0x0000, 0x3fff) AM_ROM /* not fully populated */ AM_RANGE(0x4000, 0x43ff) AM_MIRROR(0x0400) AM_RAM - AM_RANGE(0x4800, 0x4bff) AM_MIRROR(0x0400) AM_RAM_WRITE(crbaloon_videoram_w) AM_BASE(&crbaloon_videoram) - AM_RANGE(0x5000, 0x53ff) AM_MIRROR(0x0400) AM_RAM_WRITE(crbaloon_colorram_w) AM_BASE(&crbaloon_colorram) + AM_RANGE(0x4800, 0x4bff) AM_MIRROR(0x0400) AM_RAM_WRITE(crbaloon_videoram_w) AM_BASE_MEMBER(crbaloon_state, videoram) + AM_RANGE(0x5000, 0x53ff) AM_MIRROR(0x0400) AM_RAM_WRITE(crbaloon_colorram_w) AM_BASE_MEMBER(crbaloon_state, colorram) AM_RANGE(0x5800, 0x7fff) AM_NOP ADDRESS_MAP_END @@ -223,10 +222,10 @@ static ADDRESS_MAP_START( main_io_map, ADDRESS_SPACE_IO, 8 ) AM_RANGE(0x00, 0x00) AM_WRITENOP /* not connected */ AM_RANGE(0x01, 0x01) AM_WRITENOP /* watchdog */ - AM_RANGE(0x02, 0x04) AM_WRITEONLY AM_BASE(&crbaloon_spriteram) + AM_RANGE(0x02, 0x04) AM_WRITEONLY AM_BASE_MEMBER(crbaloon_state, spriteram) AM_RANGE(0x05, 0x05) AM_DEVWRITE("discrete", crbaloon_audio_set_music_freq) AM_RANGE(0x06, 0x06) AM_WRITE(port_sound_w) - AM_RANGE(0x07, 0x0b) AM_WRITE(pc3092_w) AM_BASE(&pc3092_data) + AM_RANGE(0x07, 0x0b) AM_WRITE(pc3092_w) AM_BASE_MEMBER(crbaloon_state, pc3092_data) AM_RANGE(0x0c, 0x0c) AM_WRITENOP /* MSK - to PC3259 */ AM_RANGE(0x0d, 0x0d) AM_WRITENOP /* schematics has it in a box marked "NOT USE" */ AM_RANGE(0x0e, 0x0f) AM_WRITENOP @@ -358,7 +357,7 @@ static MACHINE_RESET( crballoon ) * *************************************/ -static MACHINE_CONFIG_START( crbaloon, driver_device ) +static MACHINE_CONFIG_START( crbaloon, crbaloon_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", Z80, CRBALOON_MASTER_XTAL / 3) diff --git a/src/mame/drivers/darkmist.c b/src/mame/drivers/darkmist.c index 4bc00fe69db..c9cbfdccf9f 100644 --- a/src/mame/drivers/darkmist.c +++ b/src/mame/drivers/darkmist.c @@ -29,16 +29,12 @@ TODO: #include "audio/t5182.h" #include "includes/darkmist.h" -static UINT8 * darkmist_workram; - -int darkmist_hw; - - static WRITE8_HANDLER(darkmist_hw_w) { - darkmist_hw=data; - memory_set_bankptr(space->machine, "bank1",&space->machine->region("maincpu")->base()[0x010000+((data&0x80)?0x4000:0)]); + darkmist_state *state = space->machine->driver_data(); + state->hw=data; + memory_set_bankptr(space->machine, "bank1",&space->machine->region("maincpu")->base()[0x010000+((data&0x80)?0x4000:0)]); } static READ8_HANDLER(t5182shared_r) @@ -59,19 +55,19 @@ static ADDRESS_MAP_START( memmap, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0xc802, 0xc802) AM_READ_PORT("P2") AM_RANGE(0xc803, 0xc803) AM_READ_PORT("START") AM_RANGE(0xc804, 0xc804) AM_WRITE(darkmist_hw_w) - AM_RANGE(0xc805, 0xc805) AM_WRITEONLY AM_BASE(&darkmist_spritebank) + AM_RANGE(0xc805, 0xc805) AM_WRITEONLY AM_BASE_MEMBER(darkmist_state, spritebank) AM_RANGE(0xc806, 0xc806) AM_READ_PORT("DSW1") AM_RANGE(0xc807, 0xc807) AM_READ_PORT("DSW2") AM_RANGE(0xc808, 0xc808) AM_READ_PORT("UNK") AM_RANGE(0xd000, 0xd3ff) AM_RAM AM_BASE_GENERIC(paletteram) - AM_RANGE(0xd400, 0xd41f) AM_RAM AM_BASE(&darkmist_scroll) + AM_RANGE(0xd400, 0xd41f) AM_RAM AM_BASE_MEMBER(darkmist_state, scroll) AM_RANGE(0xd600, 0xd67f) AM_READWRITE(t5182shared_r, t5182shared_w) AM_RANGE(0xd680, 0xd680) AM_WRITE(t5182_sound_irq_w) AM_RANGE(0xd681, 0xd681) AM_READ(t5182_sharedram_semaphore_snd_r) AM_RANGE(0xd682, 0xd682) AM_WRITE(t5182_sharedram_semaphore_main_acquire_w) AM_RANGE(0xd683, 0xd683) AM_WRITE(t5182_sharedram_semaphore_main_release_w) AM_RANGE(0xd800, 0xdfff) AM_RAM AM_BASE_MEMBER(darkmist_state, videoram) - AM_RANGE(0xe000, 0xefff) AM_RAM AM_BASE(&darkmist_workram) + AM_RANGE(0xe000, 0xefff) AM_RAM AM_BASE_MEMBER(darkmist_state, workram) AM_RANGE(0xf000, 0xffff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram) ADDRESS_MAP_END diff --git a/src/mame/drivers/exzisus.c b/src/mame/drivers/exzisus.c index f0e938e2d69..98f8ba039e0 100644 --- a/src/mame/drivers/exzisus.c +++ b/src/mame/drivers/exzisus.c @@ -40,15 +40,6 @@ TODO: #include "includes/exzisus.h" -/*************************************************************************** - - Variables - -***************************************************************************/ - -static UINT8 *exzisus_sharedram_ab; -static UINT8 *exzisus_sharedram_ac; - /*************************************************************************** Memory Handler(s) @@ -57,15 +48,15 @@ static UINT8 *exzisus_sharedram_ac; static WRITE8_HANDLER( exzisus_cpua_bankswitch_w ) { + exzisus_state *state = space->machine->driver_data(); UINT8 *RAM = space->machine->region("cpua")->base(); - static int exzisus_cpua_bank = 0; - if ( (data & 0x0f) != exzisus_cpua_bank ) + if ( (data & 0x0f) != state->cpua_bank ) { - exzisus_cpua_bank = data & 0x0f; - if (exzisus_cpua_bank >= 2) + state->cpua_bank = data & 0x0f; + if (state->cpua_bank >= 2) { - memory_set_bankptr(space->machine, "bank2", &RAM[ 0x10000 + ( (exzisus_cpua_bank - 2) * 0x4000 ) ] ); + memory_set_bankptr(space->machine, "bank2", &RAM[ 0x10000 + ( (state->cpua_bank - 2) * 0x4000 ) ] ); } } @@ -74,15 +65,15 @@ static WRITE8_HANDLER( exzisus_cpua_bankswitch_w ) static WRITE8_HANDLER( exzisus_cpub_bankswitch_w ) { + exzisus_state *state = space->machine->driver_data(); UINT8 *RAM = space->machine->region("cpub")->base(); - static int exzisus_cpub_bank = 0; - if ( (data & 0x0f) != exzisus_cpub_bank ) + if ( (data & 0x0f) != state->cpub_bank ) { - exzisus_cpub_bank = data & 0x0f; - if (exzisus_cpub_bank >= 2) + state->cpub_bank = data & 0x0f; + if (state->cpub_bank >= 2) { - memory_set_bankptr(space->machine, "bank1", &RAM[ 0x10000 + ( (exzisus_cpub_bank - 2) * 0x4000 ) ] ); + memory_set_bankptr(space->machine, "bank1", &RAM[ 0x10000 + ( (state->cpub_bank - 2) * 0x4000 ) ] ); } } @@ -99,22 +90,26 @@ static WRITE8_HANDLER( exzisus_coincounter_w ) static READ8_HANDLER( exzisus_sharedram_ab_r ) { - return exzisus_sharedram_ab[offset]; + exzisus_state *state = space->machine->driver_data(); + return state->sharedram_ab[offset]; } static READ8_HANDLER( exzisus_sharedram_ac_r ) { - return exzisus_sharedram_ac[offset]; + exzisus_state *state = space->machine->driver_data(); + return state->sharedram_ac[offset]; } static WRITE8_HANDLER( exzisus_sharedram_ab_w ) { - exzisus_sharedram_ab[offset] = data; + exzisus_state *state = space->machine->driver_data(); + state->sharedram_ab[offset] = data; } static WRITE8_HANDLER( exzisus_sharedram_ac_w ) { - exzisus_sharedram_ac[offset] = data; + exzisus_state *state = space->machine->driver_data(); + state->sharedram_ac[offset] = data; } // is it ok that cpub_reset refers to cpuc? @@ -148,19 +143,19 @@ static DRIVER_INIT( exzisus ) static ADDRESS_MAP_START( cpua_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0x0000, 0x7fff) AM_ROM AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank2") - AM_RANGE(0xc000, 0xc5ff) AM_READWRITE(exzisus_objectram_1_r, exzisus_objectram_1_w) AM_BASE(&exzisus_objectram1) AM_SIZE(&exzisus_objectram_size1) - AM_RANGE(0xc600, 0xdfff) AM_READWRITE(exzisus_videoram_1_r, exzisus_videoram_1_w) AM_BASE(&exzisus_videoram1) - AM_RANGE(0xe000, 0xefff) AM_READWRITE(exzisus_sharedram_ac_r, exzisus_sharedram_ac_w) AM_BASE(&exzisus_sharedram_ac) + AM_RANGE(0xc000, 0xc5ff) AM_READWRITE(exzisus_objectram_1_r, exzisus_objectram_1_w) AM_BASE_MEMBER(exzisus_state, objectram1) AM_SIZE_MEMBER(exzisus_state, objectram_size1) + AM_RANGE(0xc600, 0xdfff) AM_READWRITE(exzisus_videoram_1_r, exzisus_videoram_1_w) AM_BASE_MEMBER(exzisus_state, videoram1) + AM_RANGE(0xe000, 0xefff) AM_READWRITE(exzisus_sharedram_ac_r, exzisus_sharedram_ac_w) AM_BASE_MEMBER(exzisus_state, sharedram_ac) AM_RANGE(0xf400, 0xf400) AM_WRITE(exzisus_cpua_bankswitch_w) AM_RANGE(0xf404, 0xf404) AM_WRITE(exzisus_cpub_reset_w) // ?? - AM_RANGE(0xf800, 0xffff) AM_READWRITE(exzisus_sharedram_ab_r, exzisus_sharedram_ab_w) AM_BASE(&exzisus_sharedram_ab) + AM_RANGE(0xf800, 0xffff) AM_READWRITE(exzisus_sharedram_ab_r, exzisus_sharedram_ab_w) AM_BASE_MEMBER(exzisus_state, sharedram_ab) ADDRESS_MAP_END static ADDRESS_MAP_START( cpub_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0x0000, 0x7fff) AM_ROM AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank1") - AM_RANGE(0xc000, 0xc5ff) AM_READWRITE(exzisus_objectram_0_r, exzisus_objectram_0_w) AM_BASE(&exzisus_objectram0) AM_SIZE(&exzisus_objectram_size0) - AM_RANGE(0xc600, 0xdfff) AM_READWRITE(exzisus_videoram_0_r, exzisus_videoram_0_w) AM_BASE(&exzisus_videoram0) + AM_RANGE(0xc000, 0xc5ff) AM_READWRITE(exzisus_objectram_0_r, exzisus_objectram_0_w) AM_BASE_MEMBER(exzisus_state, objectram0) AM_SIZE_MEMBER(exzisus_state, objectram_size0) + AM_RANGE(0xc600, 0xdfff) AM_READWRITE(exzisus_videoram_0_r, exzisus_videoram_0_w) AM_BASE_MEMBER(exzisus_state, videoram0) AM_RANGE(0xe000, 0xefff) AM_RAM AM_RANGE(0xf000, 0xf000) AM_READNOP AM_DEVWRITE("tc0140syt", tc0140syt_port_w) AM_RANGE(0xf001, 0xf001) AM_DEVREADWRITE("tc0140syt", tc0140syt_comm_r, tc0140syt_comm_w) @@ -280,7 +275,7 @@ static const tc0140syt_interface exzisus_tc0140syt_intf = }; /* All clocks are unconfirmed */ -static MACHINE_CONFIG_START( exzisus, driver_device ) +static MACHINE_CONFIG_START( exzisus, exzisus_state ) /* basic machine hardware */ MCFG_CPU_ADD("cpua", Z80, 6000000) diff --git a/src/mame/drivers/flstory.c b/src/mame/drivers/flstory.c index 3633ef5e643..8d4871685e1 100644 --- a/src/mame/drivers/flstory.c +++ b/src/mame/drivers/flstory.c @@ -158,29 +158,27 @@ static ADDRESS_MAP_START( victnine_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0xe000, 0xe7ff) AM_RAM AM_BASE_MEMBER(flstory_state, workram) /* work RAM */ ADDRESS_MAP_END -static UINT8 mcu_cmd,mcu_counter,mcu_b4_cmd; -static UINT8 mcu_param; -static UINT8 mcu_b2_res,mcu_b1_res,mcu_bb_res,mcu_b5_res,mcu_b6_res; static READ8_HANDLER( rumba_mcu_r ) { - //printf("PC=%04x R %02x\n",cpu_get_pc(space->cpu),mcu_cmd); + flstory_state *state = space->machine->driver_data(); + //printf("PC=%04x R %02x\n",cpu_get_pc(space->cpu),state->mcu_cmd); - if((mcu_cmd & 0xf0) == 0x00) // end packet cmd, value returned is meaningless (probably used for main <-> mcu comms syncronization) + if((state->mcu_cmd & 0xf0) == 0x00) // end packet cmd, value returned is meaningless (probably used for main <-> mcu comms syncronization) return 0; - switch(mcu_cmd) + switch(state->mcu_cmd) { case 0x73: return 0xa4; //initial MCU check - case 0x33: return mcu_b2_res; //0xb2 result - case 0x31: return mcu_b1_res; //0xb1 result + case 0x33: return state->mcu_b2_res; //0xb2 result + case 0x31: return state->mcu_b1_res; //0xb1 result - case 0x35: mcu_b5_res = 1; mcu_b6_res = 1; return 0; - case 0x36: return mcu_b4_cmd; //0xb4 command, extra protection for lives (first play only), otherwise game gives one extra life at start-up (!) - case 0x37: return mcu_b5_res; //0xb4 / 0xb5 / 0xb6 result y value - case 0x38: return mcu_b6_res; //x value + case 0x35: state->mcu_b5_res = 1; state->mcu_b6_res = 1; return 0; + case 0x36: return state->mcu_b4_cmd; //0xb4 command, extra protection for lives (first play only), otherwise game gives one extra life at start-up (!) + case 0x37: return state->mcu_b5_res; //0xb4 / 0xb5 / 0xb6 result y value + case 0x38: return state->mcu_b6_res; //x value - case 0x3b: return mcu_bb_res; //0xbb result + case 0x3b: return state->mcu_bb_res; //0xbb result case 0x40: return 0; case 0x41: return 0; case 0x42: @@ -207,7 +205,7 @@ static READ8_HANDLER( rumba_mcu_r ) return 0; } //case 0x42: return 0x06; - //default: printf("PC=%04x R %02x\n",cpu_get_pc(space->cpu),mcu_cmd); break; + //default: printf("PC=%04x R %02x\n",cpu_get_pc(space->cpu),state->mcu_cmd); break; } return 0; @@ -215,19 +213,20 @@ static READ8_HANDLER( rumba_mcu_r ) static WRITE8_HANDLER( rumba_mcu_w ) { - //if((mcu_cmd & 0xf0) == 0xc0) + flstory_state *state = space->machine->driver_data(); + //if((state->mcu_cmd & 0xf0) == 0xc0) // printf("%02x ",data); - //if(mcu_cmd == 0x42) + //if(state->mcu_cmd == 0x42) // printf("\n"); - if(mcu_param) + if(state->mcu_param) { - mcu_param = 0; // clear param + state->mcu_param = 0; // clear param - //printf("%02x %02x\n",mcu_cmd,data); + //printf("%02x %02x\n",state->mcu_cmd,data); - switch(mcu_cmd) + switch(state->mcu_cmd) { case 0xb0: // counter, used by command 0xb1 (and something else? { @@ -235,21 +234,21 @@ static WRITE8_HANDLER( rumba_mcu_w ) sends 0xb0 -> param then 0xb1 -> param -> 0x01 (end of cmd packet?) finally 0x31 for reply */ - mcu_counter = data; + state->mcu_counter = data; break; } case 0xb1: // player death sequence, controls X position { - mcu_b1_res = data; + state->mcu_b1_res = data; /* TODO: this is pretty hard to simulate ... */ - if(mcu_counter >= 0x10) - mcu_b1_res++; // left - else if(mcu_counter >= 0x08) - mcu_b1_res--; // right + if(state->mcu_counter >= 0x10) + state->mcu_b1_res++; // left + else if(state->mcu_counter >= 0x08) + state->mcu_b1_res--; // right else - mcu_b1_res++; // left again + state->mcu_b1_res++; // left again break; } @@ -261,10 +260,10 @@ static WRITE8_HANDLER( rumba_mcu_w ) switch(data) { - case 1: mcu_b2_res = 0xaa; break; //left - case 2: mcu_b2_res = 0xaa; break; //right - case 4: mcu_b2_res = 0xab; break; //down - case 8: mcu_b2_res = 0xa9; break; //up + case 1: state->mcu_b2_res = 0xaa; break; //left + case 2: state->mcu_b2_res = 0xaa; break; //right + case 4: state->mcu_b2_res = 0xab; break; //down + case 8: state->mcu_b2_res = 0xa9; break; //up } break; } @@ -274,15 +273,15 @@ static WRITE8_HANDLER( rumba_mcu_w ) sends 0xbb -> param -> 0x04 (end of cmd packet?) then 0x3b for reply */ - mcu_bb_res = data; - //printf("PC=%04x W %02x -> %02x\n",cpu_get_pc(space->cpu),mcu_cmd,data); + state->mcu_bb_res = data; + //printf("PC=%04x W %02x -> %02x\n",cpu_get_pc(space->cpu),state->mcu_cmd,data); break; } case 0xb4: // when the bird touches the top / bottom / left / right of the screen, for correct repositioning { - mcu_b4_cmd = data; + state->mcu_b4_cmd = data; - //popmessage("%02x",mcu_b4_cmd); + //popmessage("%02x",state->mcu_b4_cmd); /* sends 0xb4 -> param -> 0xb5 -> param (bird X coord) -> 0xb6 -> param (bird Y coord) -> @@ -302,43 +301,43 @@ static WRITE8_HANDLER( rumba_mcu_w ) case 0xb5: // bird X coord { /* TODO: values might be off by one */ - mcu_b5_res = data; + state->mcu_b5_res = data; - if(mcu_b4_cmd == 3) // from right to left - mcu_b5_res = 0x0d; + if(state->mcu_b4_cmd == 3) // from right to left + state->mcu_b5_res = 0x0d; - if(mcu_b4_cmd == 2) // from left to right - mcu_b5_res = 0xe4; + if(state->mcu_b4_cmd == 2) // from left to right + state->mcu_b5_res = 0xe4; break; } case 0xb6: // bird Y coord { - mcu_b6_res = data; + state->mcu_b6_res = data; - if(mcu_b4_cmd == 1) // from up to down - mcu_b6_res = 0x04; + if(state->mcu_b4_cmd == 1) // from up to down + state->mcu_b6_res = 0x04; - if(mcu_b4_cmd == 4) // from down to up - mcu_b6_res = 0xdc; + if(state->mcu_b4_cmd == 4) // from down to up + state->mcu_b6_res = 0xdc; break; } } - //if((mcu_cmd & 0xf0) == 0xc0) + //if((state->mcu_cmd & 0xf0) == 0xc0) // printf("%02x ",data); - //if(mcu_cmd == 0xc7) + //if(state->mcu_cmd == 0xc7) // printf("\n"); return; } - mcu_cmd = data; + state->mcu_cmd = data; - if(((data & 0xf0) == 0xb0 || (data & 0xf0) == 0xc0) && mcu_param == 0) - mcu_param = 1; + if(((data & 0xf0) == 0xb0 || (data & 0xf0) == 0xc0) && state->mcu_param == 0) + state->mcu_param = 1; } static ADDRESS_MAP_START( rumba_map, ADDRESS_SPACE_PROGRAM, 8 ) @@ -1267,8 +1266,9 @@ MACHINE_CONFIG_END static MACHINE_RESET( rumba ) { + flstory_state *state = machine->driver_data(); MACHINE_RESET_CALL(flstory); - mcu_cmd = 0; + state->mcu_cmd = 0; } static MACHINE_CONFIG_START( rumba, flstory_state ) diff --git a/src/mame/drivers/galastrm.c b/src/mame/drivers/galastrm.c index e20da5fe930..e247d6d91de 100644 --- a/src/mame/drivers/galastrm.c +++ b/src/mame/drivers/galastrm.c @@ -46,14 +46,13 @@ $305.b invincibility #include "audio/taito_en.h" #include "includes/galastrm.h" -static UINT16 coin_word, frame_counter=0; -static UINT32 *galastrm_ram; /*********************************************************************/ static INTERRUPT_GEN( galastrm_interrupt ) { - frame_counter ^= 1; + galastrm_state *state = device->machine->driver_data(); + state->frame_counter ^= 1; cpu_set_input_line(device, 5, HOLD_LINE); } @@ -63,55 +62,57 @@ static TIMER_CALLBACK( galastrm_interrupt6 ) } -static int tc0110pcr_addr; -static int tc0610_0_addr; -static int tc0610_1_addr; static WRITE32_HANDLER( galastrm_palette_w ) { + galastrm_state *state = space->machine->driver_data(); if (ACCESSING_BITS_16_31) - tc0110pcr_addr = data >> 16; - if ((ACCESSING_BITS_0_15) && (tc0110pcr_addr < 4096)) - palette_set_color_rgb(space->machine, tc0110pcr_addr, pal5bit(data >> 10), pal5bit(data >> 5), pal5bit(data >> 0)); + state->tc0110pcr_addr = data >> 16; + if ((ACCESSING_BITS_0_15) && (state->tc0110pcr_addr < 4096)) + palette_set_color_rgb(space->machine, state->tc0110pcr_addr, pal5bit(data >> 10), pal5bit(data >> 5), pal5bit(data >> 0)); } static WRITE32_HANDLER( galastrm_tc0610_0_w ) { + galastrm_state *state = space->machine->driver_data(); if (ACCESSING_BITS_16_31) - tc0610_0_addr = data >> 16; - if ((ACCESSING_BITS_0_15) && (tc0610_0_addr < 8)) - galastrm_tc0610_ctrl_reg[0][tc0610_0_addr] = data; + state->tc0610_0_addr = data >> 16; + if ((ACCESSING_BITS_0_15) && (state->tc0610_0_addr < 8)) + state->tc0610_ctrl_reg[0][state->tc0610_0_addr] = data; } static WRITE32_HANDLER( galastrm_tc0610_1_w ) { + galastrm_state *state = space->machine->driver_data(); if (ACCESSING_BITS_16_31) - tc0610_1_addr = data >> 16; - if ((ACCESSING_BITS_0_15) && (tc0610_1_addr < 8)) - galastrm_tc0610_ctrl_reg[1][tc0610_1_addr] = data; + state->tc0610_1_addr = data >> 16; + if ((ACCESSING_BITS_0_15) && (state->tc0610_1_addr < 8)) + state->tc0610_ctrl_reg[1][state->tc0610_1_addr] = data; } static CUSTOM_INPUT( frame_counter_r ) { - return frame_counter; + galastrm_state *state = field->port->machine->driver_data(); + return state->frame_counter; } static CUSTOM_INPUT( coin_word_r ) { - return coin_word; + galastrm_state *state = field->port->machine->driver_data(); + return state->coin_word; } static WRITE32_HANDLER( galastrm_input_w ) { + galastrm_state *state = space->machine->driver_data(); #if 0 { char t[64]; -static UINT32 mem[2]; -COMBINE_DATA(&mem[offset]); +COMBINE_DATA(&state->mem[offset]); -sprintf(t,"%08x %08x",mem[0],mem[1]); +sprintf(t,"%08x %08x",state->mem[0],state->mem[1]); popmessage(t); } #endif @@ -144,7 +145,7 @@ popmessage(t); coin_lockout_w(space->machine, 1, ~data & 0x02000000); coin_counter_w(space->machine, 0, data & 0x04000000); coin_counter_w(space->machine, 1, data & 0x04000000); - coin_word = (data >> 16) &0xffff; + state->coin_word = (data >> 16) &0xffff; } //logerror("CPU #0 PC %06x: write input %06x\n",cpu_get_pc(space->cpu),offset); } @@ -174,7 +175,7 @@ static WRITE32_HANDLER( galastrm_adstick_ctrl_w ) static ADDRESS_MAP_START( galastrm_map, ADDRESS_SPACE_PROGRAM, 32 ) AM_RANGE(0x000000, 0x0fffff) AM_ROM - AM_RANGE(0x200000, 0x21ffff) AM_RAM AM_BASE(&galastrm_ram) /* main CPUA ram */ + AM_RANGE(0x200000, 0x21ffff) AM_RAM AM_BASE_MEMBER(galastrm_state, ram) /* main CPUA ram */ AM_RANGE(0x300000, 0x303fff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram) AM_RANGE(0x400000, 0x400003) AM_READ_PORT("IN0") AM_RANGE(0x400004, 0x400007) AM_READ_PORT("IN1") @@ -312,7 +313,7 @@ static const tc0480scp_interface galastrm_tc0480scp_intf = 0 /* col_base */ }; -static MACHINE_CONFIG_START( galastrm, driver_device ) +static MACHINE_CONFIG_START( galastrm, galastrm_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", M68EC020, 16000000) /* 16 MHz */ MCFG_CPU_PROGRAM_MAP(galastrm_map) diff --git a/src/mame/drivers/gladiatr.c b/src/mame/drivers/gladiatr.c index daa7b1c86d8..3aae2de8600 100644 --- a/src/mame/drivers/gladiatr.c +++ b/src/mame/drivers/gladiatr.c @@ -320,23 +320,24 @@ static WRITE8_HANDLER( gladiatr_irq_patch_w ) -static int data1,data2,flag1,flag2; static WRITE8_HANDLER(qx0_w) { + gladiatr_state *state = space->machine->driver_data(); if(!offset) { - data2=data; - flag2=1; + state->data2=data; + state->flag2=1; } } static WRITE8_HANDLER(qx1_w) { + gladiatr_state *state = space->machine->driver_data(); if(!offset) { - data1=data; - flag1=1; + state->data1=data; + state->flag1=1; } } @@ -350,24 +351,27 @@ static READ8_HANDLER(qx3_r){ return space->machine->rand()&0xf; } static READ8_HANDLER(qx0_r) { + gladiatr_state *state = space->machine->driver_data(); if(!offset) - return data1; + return state->data1; else - return flag2; + return state->flag2; } static READ8_HANDLER(qx1_r) { + gladiatr_state *state = space->machine->driver_data(); if(!offset) - return data2; + return state->data2; else - return flag1; + return state->flag1; } static MACHINE_RESET( ppking ) { - data1 = data2 = 0; - flag1 = flag2 = 1; + gladiatr_state *state = machine->driver_data(); + state->data1 = state->data2 = 0; + state->flag1 = state->flag2 = 1; } static ADDRESS_MAP_START( ppking_cpu1_map, ADDRESS_SPACE_PROGRAM, 8 ) @@ -375,9 +379,9 @@ static ADDRESS_MAP_START( ppking_cpu1_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0xc000, 0xcbff) AM_RAM AM_BASE_GENERIC(spriteram) AM_RANGE(0xcc00, 0xcfff) AM_WRITE(ppking_video_registers_w) AM_RANGE(0xd000, 0xd7ff) AM_RAM_WRITE(gladiatr_paletteram_w) AM_BASE_GENERIC(paletteram) - AM_RANGE(0xd800, 0xdfff) AM_RAM_WRITE(gladiatr_videoram_w) AM_BASE(&gladiatr_videoram) - AM_RANGE(0xe000, 0xe7ff) AM_RAM_WRITE(gladiatr_colorram_w) AM_BASE(&gladiatr_colorram) - AM_RANGE(0xe800, 0xefff) AM_RAM_WRITE(gladiatr_textram_w) AM_BASE(&gladiatr_textram) + AM_RANGE(0xd800, 0xdfff) AM_RAM_WRITE(gladiatr_videoram_w) AM_BASE_MEMBER(gladiatr_state, videoram) + AM_RANGE(0xe000, 0xe7ff) AM_RAM_WRITE(gladiatr_colorram_w) AM_BASE_MEMBER(gladiatr_state, colorram) + AM_RANGE(0xe800, 0xefff) AM_RAM_WRITE(gladiatr_textram_w) AM_BASE_MEMBER(gladiatr_state, textram) AM_RANGE(0xf000, 0xf7ff) AM_RAM AM_SHARE("nvram") /* battery backed RAM */ ADDRESS_MAP_END @@ -413,9 +417,9 @@ static ADDRESS_MAP_START( gladiatr_cpu1_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0xc000, 0xcbff) AM_RAM AM_BASE_GENERIC(spriteram) AM_RANGE(0xcc00, 0xcfff) AM_WRITE(gladiatr_video_registers_w) AM_RANGE(0xd000, 0xd7ff) AM_RAM_WRITE(gladiatr_paletteram_w) AM_BASE_GENERIC(paletteram) - AM_RANGE(0xd800, 0xdfff) AM_RAM_WRITE(gladiatr_videoram_w) AM_BASE(&gladiatr_videoram) - AM_RANGE(0xe000, 0xe7ff) AM_RAM_WRITE(gladiatr_colorram_w) AM_BASE(&gladiatr_colorram) - AM_RANGE(0xe800, 0xefff) AM_RAM_WRITE(gladiatr_textram_w) AM_BASE(&gladiatr_textram) + AM_RANGE(0xd800, 0xdfff) AM_RAM_WRITE(gladiatr_videoram_w) AM_BASE_MEMBER(gladiatr_state, videoram) + AM_RANGE(0xe000, 0xe7ff) AM_RAM_WRITE(gladiatr_colorram_w) AM_BASE_MEMBER(gladiatr_state, colorram) + AM_RANGE(0xe800, 0xefff) AM_RAM_WRITE(gladiatr_textram_w) AM_BASE_MEMBER(gladiatr_state, textram) AM_RANGE(0xf000, 0xf7ff) AM_RAM AM_SHARE("nvram") /* battery backed RAM */ ADDRESS_MAP_END diff --git a/src/mame/drivers/groundfx.c b/src/mame/drivers/groundfx.c index a6312df6584..fe59e96dc92 100644 --- a/src/mame/drivers/groundfx.c +++ b/src/mame/drivers/groundfx.c @@ -71,9 +71,6 @@ #include "audio/taito_en.h" #include "includes/groundfx.h" -static UINT16 coin_word, frame_counter=0; -static UINT16 port_sel = 0; -static UINT32 *groundfx_ram; /*********************************************************** COLOR RAM @@ -130,16 +127,19 @@ static const eeprom_interface groundfx_eeprom_interface = static CUSTOM_INPUT( frame_counter_r ) { - return frame_counter; + groundfx_state *state = field->port->machine->driver_data(); + return state->frame_counter; } static CUSTOM_INPUT( coin_word_r ) { - return coin_word; + groundfx_state *state = field->port->machine->driver_data(); + return state->coin_word; } static WRITE32_HANDLER( groundfx_input_w ) { + groundfx_state *state = space->machine->driver_data(); switch (offset) { case 0x00: @@ -162,7 +162,7 @@ static WRITE32_HANDLER( groundfx_input_w ) coin_lockout_w(space->machine, 1,~data & 0x02000000); coin_counter_w(space->machine, 0, data & 0x04000000); coin_counter_w(space->machine, 1, data & 0x08000000); - coin_word = (data >> 16) &0xffff; + state->coin_word = (data >> 16) &0xffff; } break; } @@ -182,15 +182,16 @@ static WRITE32_HANDLER( groundfx_adc_w ) static WRITE32_HANDLER( rotate_control_w ) /* only a guess that it's rotation */ { + groundfx_state *state = space->machine->driver_data(); if (ACCESSING_BITS_0_15) { - groundfx_rotate_ctrl[port_sel] = data; + state->rotate_ctrl[state->port_sel] = data; return; } if (ACCESSING_BITS_16_31) { - port_sel = (data &0x70000) >> 16; + state->port_sel = (data &0x70000) >> 16; } } @@ -217,7 +218,7 @@ static WRITE32_HANDLER( motor_control_w ) static ADDRESS_MAP_START( groundfx_map, ADDRESS_SPACE_PROGRAM, 32 ) AM_RANGE(0x000000, 0x1fffff) AM_ROM - AM_RANGE(0x200000, 0x21ffff) AM_RAM AM_BASE(&groundfx_ram) /* main CPUA ram */ + AM_RANGE(0x200000, 0x21ffff) AM_RAM AM_BASE_MEMBER(groundfx_state, ram) /* main CPUA ram */ AM_RANGE(0x300000, 0x303fff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram) /* sprite ram */ AM_RANGE(0x400000, 0x400003) AM_WRITE(motor_control_w) /* gun vibration */ AM_RANGE(0x500000, 0x500003) AM_READ_PORT("BUTTONS") @@ -360,11 +361,12 @@ static const tc0480scp_interface groundfx_tc0480scp_intf = static INTERRUPT_GEN( groundfx_interrupt ) { - frame_counter^=1; + groundfx_state *state = device->machine->driver_data(); + state->frame_counter^=1; cpu_set_input_line(device, 4, HOLD_LINE); } -static MACHINE_CONFIG_START( groundfx, driver_device ) +static MACHINE_CONFIG_START( groundfx, groundfx_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", M68EC020, 16000000) /* 16 MHz */ @@ -440,17 +442,18 @@ ROM_END static READ32_HANDLER( irq_speedup_r_groundfx ) { + groundfx_state *state = space->machine->driver_data(); cpu_device *cpu = downcast(space->cpu); int ptr; offs_t sp = cpu->sp(); - if ((sp&2)==0) ptr=groundfx_ram[(sp&0x1ffff)/4]; - else ptr=(((groundfx_ram[(sp&0x1ffff)/4])&0x1ffff)<<16) | - (groundfx_ram[((sp&0x1ffff)/4)+1]>>16); + if ((sp&2)==0) ptr=state->ram[(sp&0x1ffff)/4]; + else ptr=(((state->ram[(sp&0x1ffff)/4])&0x1ffff)<<16) | + (state->ram[((sp&0x1ffff)/4)+1]>>16); if (cpu->pc()==0x1ece && ptr==0x1b9a) cpu->spin_until_interrupt(); - return groundfx_ram[0xb574/4]; + return state->ram[0xb574/4]; } diff --git a/src/mame/drivers/gsword.c b/src/mame/drivers/gsword.c index d395276b30d..459027ccf24 100644 --- a/src/mame/drivers/gsword.c +++ b/src/mame/drivers/gsword.c @@ -149,13 +149,6 @@ reg: 0->1 (main->2nd) / : (1->0) 2nd->main : #include "sound/msm5205.h" #include "includes/gsword.h" -static int coins; -static int fake8910_0,fake8910_1; - -static int gsword_nmi_enable; - -static UINT8 *gsword_cpu2_ram; -static int gsword_protect_hack; #if 0 static int gsword_coins_in(void) @@ -178,12 +171,13 @@ static int gsword_coins_in(void) /* (4004,4005) clear down counter , if (4004,4005)==0 then (402E)=0 */ static READ8_HANDLER( gsword_hack_r ) { - UINT8 data = gsword_cpu2_ram[offset + 4]; + gsword_state *state = space->machine->driver_data(); + UINT8 data = state->cpu2_ram[offset + 4]; - /*if(offset==1)mame_printf_debug("CNT %02X%02X\n",gsword_cpu2_ram[5],gsword_cpu2_ram[4]); */ + /*if(offset==1)mame_printf_debug("CNT %02X%02X\n",state->cpu2_ram[5],state->cpu2_ram[4]); */ /* speedup timeout cound down */ - if(gsword_protect_hack) + if(state->protect_hack) { switch(offset) { @@ -238,14 +232,15 @@ static const struct TAITO8741interface gsword_8741interface= static MACHINE_RESET( gsword ) { + gsword_state *state = machine->driver_data(); int i; for(i=0;i<4;i++) TAITO8741_reset(i); - coins = 0; + state->coins = 0; /* snd CPU mask NMI during reset phase */ - gsword_nmi_enable = 0; - gsword_protect_hack = 0; + state->nmi_enable = 0; + state->protect_hack = 0; TAITO8741_start(&gsword_8741interface); } @@ -268,7 +263,8 @@ static INTERRUPT_GEN( josvolly_snd_interrupt ) static INTERRUPT_GEN( gsword_snd_interrupt ) { - if(gsword_nmi_enable) + gsword_state *state = device->machine->driver_data(); + if(state->nmi_enable) { cpu_set_input_line(device, INPUT_LINE_NMI, PULSE_LINE); } @@ -276,32 +272,33 @@ static INTERRUPT_GEN( gsword_snd_interrupt ) static WRITE8_DEVICE_HANDLER( gsword_nmi_set_w ) { + gsword_state *state = device->machine->driver_data(); /* mame_printf_debug("AY write %02X\n",data);*/ - gsword_protect_hack = (data&0x80) ? 0 : 1; + state->protect_hack = (data&0x80) ? 0 : 1; #if 0 /* An actual circuit isn't known. */ /* write ff,02,ff,fe, 17 x 0d,0f */ - gsword_nmi_enable = ((data>>7) & (data&1) &1) == 0; + state->nmi_enable = ((data>>7) & (data&1) &1) == 0; #else switch(data) { case 0xff: - gsword_nmi_enable = 0; /* NMI must be disable */ + state->nmi_enable = 0; /* NMI must be disable */ break; case 0x02: - gsword_nmi_enable = 0; /* ANY */ + state->nmi_enable = 0; /* ANY */ break; case 0x0d: - gsword_nmi_enable = 1; + state->nmi_enable = 1; break; case 0x0f: - gsword_nmi_enable = 1; /* NMI must be enable */ + state->nmi_enable = 1; /* NMI must be enable */ break; case 0xfe: - gsword_nmi_enable = 1; /* NMI must be enable */ + state->nmi_enable = 1; /* NMI must be enable */ break; } /* bit1= nmi disable , for ram check */ @@ -316,22 +313,26 @@ static WRITE8_HANDLER( josvolly_nmi_enable_w ) static WRITE8_DEVICE_HANDLER( gsword_AY8910_control_port_0_w ) { + gsword_state *state = device->machine->driver_data(); ay8910_address_w(device,offset,data); - fake8910_0 = data; + state->fake8910_0 = data; } static WRITE8_DEVICE_HANDLER( gsword_AY8910_control_port_1_w ) { + gsword_state *state = device->machine->driver_data(); ay8910_address_w(device,offset,data); - fake8910_1 = data; + state->fake8910_1 = data; } static READ8_DEVICE_HANDLER( gsword_fake_0_r ) { - return fake8910_0+1; + gsword_state *state = device->machine->driver_data(); + return state->fake8910_0+1; } static READ8_DEVICE_HANDLER( gsword_fake_1_r ) { - return fake8910_1+1; + gsword_state *state = device->machine->driver_data(); + return state->fake8910_1+1; } static WRITE8_DEVICE_HANDLER( gsword_adpcm_data_w ) @@ -351,13 +352,13 @@ static ADDRESS_MAP_START( cpu1_map, ADDRESS_SPACE_PROGRAM , 8 ) AM_RANGE(0x0000, 0x8fff) AM_ROM AM_RANGE(0x9000, 0x9fff) AM_RAM AM_RANGE(0xa000, 0xa37f) AM_RAM - AM_RANGE(0xa380, 0xa3ff) AM_RAM AM_BASE(&gsword_spritetile_ram) + AM_RANGE(0xa380, 0xa3ff) AM_RAM AM_BASE_MEMBER(gsword_state, spritetile_ram) AM_RANGE(0xa400, 0xa77f) AM_RAM - AM_RANGE(0xa780, 0xa7ff) AM_RAM AM_BASE(&gsword_spritexy_ram) AM_SIZE(&gsword_spritexy_size) + AM_RANGE(0xa780, 0xa7ff) AM_RAM AM_BASE_MEMBER(gsword_state, spritexy_ram) AM_SIZE_MEMBER(gsword_state, spritexy_size) AM_RANGE(0xa980, 0xa980) AM_WRITE(gsword_charbank_w) AM_RANGE(0xaa80, 0xaa80) AM_WRITE(gsword_videoctrl_w) /* flip screen, char palette bank */ AM_RANGE(0xab00, 0xab00) AM_WRITE(gsword_scroll_w) - AM_RANGE(0xab80, 0xabff) AM_WRITEONLY AM_BASE(&gsword_spriteattrib_ram) + AM_RANGE(0xab80, 0xabff) AM_WRITEONLY AM_BASE_MEMBER(gsword_state, spriteattrib_ram) AM_RANGE(0xb000, 0xb7ff) AM_RAM_WRITE(gsword_videoram_w) AM_BASE_MEMBER(gsword_state, videoram) ADDRESS_MAP_END @@ -374,7 +375,7 @@ ADDRESS_MAP_END // static ADDRESS_MAP_START( cpu2_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0x0000, 0x3fff) AM_ROM - AM_RANGE(0x4000, 0x43ff) AM_RAM AM_BASE(&gsword_cpu2_ram) + AM_RANGE(0x4000, 0x43ff) AM_RAM AM_BASE_MEMBER(gsword_state, cpu2_ram) AM_RANGE(0x6000, 0x6000) AM_WRITE(adpcm_soundcommand_w) ADDRESS_MAP_END @@ -404,7 +405,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( josvolly_cpu2_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0x0000, 0x3fff) AM_ROM - AM_RANGE(0x4000, 0x43ff) AM_RAM AM_BASE(&gsword_cpu2_ram) + AM_RANGE(0x4000, 0x43ff) AM_RAM AM_BASE_MEMBER(gsword_state, cpu2_ram) /* 8000 to 8003 looks MCU */ AM_RANGE(0x8000, 0x8000) AM_READ_PORT("IN1") // 1PL diff --git a/src/mame/drivers/gunbustr.c b/src/mame/drivers/gunbustr.c index 5f78bc7e640..3a69148fc31 100644 --- a/src/mame/drivers/gunbustr.c +++ b/src/mame/drivers/gunbustr.c @@ -53,8 +53,6 @@ #include "audio/taito_en.h" #include "includes/gunbustr.h" -static UINT16 coin_word; -static UINT32 *gunbustr_ram; /*********************************************************************/ @@ -83,19 +81,20 @@ static WRITE32_HANDLER( gunbustr_palette_w ) static CUSTOM_INPUT( coin_word_r ) { - return coin_word; + gunbustr_state *state = field->port->machine->driver_data(); + return state->coin_word; } static WRITE32_HANDLER( gunbustr_input_w ) { + gunbustr_state *state = space->machine->driver_data(); #if 0 { char t[64]; -static UINT32 mem[2]; -COMBINE_DATA(&mem[offset]); +COMBINE_DATA(&state->mem[offset]); -sprintf(t,"%08x %08x",mem[0],mem[1]); +sprintf(t,"%08x %08x",state->mem[0],state->mem[1]); popmessage(t); } #endif @@ -131,7 +130,7 @@ popmessage(t); coin_lockout_w(space->machine, 1, data & 0x02000000); coin_counter_w(space->machine, 0, data & 0x04000000); coin_counter_w(space->machine, 1, data & 0x04000000); - coin_word = (data >> 16) &0xffff; + state->coin_word = (data >> 16) &0xffff; } //logerror("CPU #0 PC %06x: write input %06x\n",cpu_get_pc(space->cpu),offset); } @@ -195,7 +194,7 @@ static WRITE32_HANDLER( gunbustr_gun_w ) static ADDRESS_MAP_START( gunbustr_map, ADDRESS_SPACE_PROGRAM, 32 ) AM_RANGE(0x000000, 0x0fffff) AM_ROM - AM_RANGE(0x200000, 0x21ffff) AM_RAM AM_BASE(&gunbustr_ram) /* main CPUA ram */ + AM_RANGE(0x200000, 0x21ffff) AM_RAM AM_BASE_MEMBER(gunbustr_state, ram) /* main CPUA ram */ AM_RANGE(0x300000, 0x301fff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram) /* Sprite ram */ AM_RANGE(0x380000, 0x380003) AM_WRITE(motor_control_w) /* motor, lamps etc. */ AM_RANGE(0x390000, 0x3907ff) AM_RAM AM_BASE(&f3_shared_ram) /* Sound shared ram */ @@ -342,7 +341,7 @@ static const tc0480scp_interface gunbustr_tc0480scp_intf = 0 /* col_base */ }; -static MACHINE_CONFIG_START( gunbustr, driver_device ) +static MACHINE_CONFIG_START( gunbustr, gunbustr_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", M68EC020, 16000000) /* 16 MHz */ @@ -409,10 +408,11 @@ ROM_END static READ32_HANDLER( main_cycle_r ) { - if (cpu_get_pc(space->cpu)==0x55a && (gunbustr_ram[0x3acc/4]&0xff000000)==0) + gunbustr_state *state = space->machine->driver_data(); + if (cpu_get_pc(space->cpu)==0x55a && (state->ram[0x3acc/4]&0xff000000)==0) cpu_spinuntil_int(space->cpu); - return gunbustr_ram[0x3acc/4]; + return state->ram[0x3acc/4]; } static DRIVER_INIT( gunbustr ) diff --git a/src/mame/drivers/m107.c b/src/mame/drivers/m107.c index 328d6c18b62..e2026d753d7 100644 --- a/src/mame/drivers/m107.c +++ b/src/mame/drivers/m107.c @@ -32,15 +32,13 @@ confirmed for m107 games as well. #include "sound/iremga20.h" -#define M107_IRQ_0 ((m107_irq_vectorbase+0)/4) /* VBL interrupt*/ -#define M107_IRQ_1 ((m107_irq_vectorbase+4)/4) /* ??? */ -#define M107_IRQ_2 ((m107_irq_vectorbase+8)/4) /* Raster interrupt */ -#define M107_IRQ_3 ((m107_irq_vectorbase+12)/4) /* ??? */ +#define M107_IRQ_0 ((state->irq_vectorbase+0)/4) /* VBL interrupt*/ +#define M107_IRQ_1 ((state->irq_vectorbase+4)/4) /* ??? */ +#define M107_IRQ_2 ((state->irq_vectorbase+8)/4) /* Raster interrupt */ +#define M107_IRQ_3 ((state->irq_vectorbase+12)/4) /* ??? */ -static emu_timer *scanline_timer; -static UINT8 m107_irq_vectorbase; static TIMER_CALLBACK( m107_scanline_interrupt ); @@ -57,22 +55,25 @@ static WRITE16_HANDLER( bankswitch_w ) static MACHINE_START( m107 ) { - scanline_timer = timer_alloc(machine, m107_scanline_interrupt, NULL); + m107_state *state = machine->driver_data(); + state->scanline_timer = timer_alloc(machine, m107_scanline_interrupt, NULL); } static MACHINE_RESET( m107 ) { - timer_adjust_oneshot(scanline_timer, machine->primary_screen->time_until_pos(0), 0); + m107_state *state = machine->driver_data(); + timer_adjust_oneshot(state->scanline_timer, machine->primary_screen->time_until_pos(0), 0); } /*****************************************************************************/ static TIMER_CALLBACK( m107_scanline_interrupt ) { + m107_state *state = machine->driver_data(); int scanline = param; /* raster interrupt */ - if (scanline == m107_raster_irq_position) + if (scanline == state->raster_irq_position) { machine->primary_screen->update_partial(scanline); cputag_set_input_line_and_vector(machine, "maincpu", 0, HOLD_LINE, M107_IRQ_2); @@ -88,7 +89,7 @@ static TIMER_CALLBACK( m107_scanline_interrupt ) /* adjust for next scanline */ if (++scanline >= machine->primary_screen->height()) scanline = 0; - timer_adjust_oneshot(scanline_timer, machine->primary_screen->time_until_pos(scanline), scanline); + timer_adjust_oneshot(state->scanline_timer, machine->primary_screen->time_until_pos(scanline), scanline); } @@ -107,23 +108,23 @@ enum { VECTOR_INIT, YM2151_ASSERT, YM2151_CLEAR, V30_ASSERT, V30_CLEAR }; static TIMER_CALLBACK( setvector_callback ) { - static int irqvector; + m107_state *state = machine->driver_data(); switch(param) { - case VECTOR_INIT: irqvector = 0; break; - case YM2151_ASSERT: irqvector |= 0x2; break; - case YM2151_CLEAR: irqvector &= ~0x2; break; - case V30_ASSERT: irqvector |= 0x1; break; - case V30_CLEAR: irqvector &= ~0x1; break; + case VECTOR_INIT: state->irqvector = 0; break; + case YM2151_ASSERT: state->irqvector |= 0x2; break; + case YM2151_CLEAR: state->irqvector &= ~0x2; break; + case V30_ASSERT: state->irqvector |= 0x1; break; + case V30_CLEAR: state->irqvector &= ~0x1; break; } - if (irqvector & 0x2) /* YM2151 has precedence */ + if (state->irqvector & 0x2) /* YM2151 has precedence */ cpu_set_input_line_vector(machine->device("soundcpu"), 0, 0x18); - else if (irqvector & 0x1) /* V30 */ + else if (state->irqvector & 0x1) /* V30 */ cpu_set_input_line_vector(machine->device("soundcpu"), 0, 0x19); - if (irqvector == 0) /* no IRQs pending */ + if (state->irqvector == 0) /* no IRQs pending */ cputag_set_input_line(machine, "soundcpu", 0, CLEAR_LINE); else /* IRQ pending */ cputag_set_input_line(machine, "soundcpu", 0, ASSERT_LINE); @@ -136,11 +137,11 @@ static WRITE16_HANDLER( m107_soundlatch_w ) // logerror("soundlatch_w %02x\n",data); } -static int sound_status; static READ16_HANDLER( m107_sound_status_r ) { - return sound_status; + m107_state *state = space->machine->driver_data(); + return state->sound_status; } static READ16_HANDLER( m107_soundlatch_r ) @@ -155,7 +156,8 @@ static WRITE16_HANDLER( m107_sound_irq_ack_w ) static WRITE16_HANDLER( m107_sound_status_w ) { - COMBINE_DATA(&sound_status); + m107_state *state = space->machine->driver_data(); + COMBINE_DATA(&state->sound_status); cputag_set_input_line_and_vector(space->machine, "maincpu", 0, HOLD_LINE, M107_IRQ_3); } @@ -169,7 +171,7 @@ static WRITE16_HANDLER( m107_sound_reset_w ) static ADDRESS_MAP_START( main_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x00000, 0x9ffff) AM_ROM AM_RANGE(0xa0000, 0xbffff) AM_ROMBANK("bank1") - AM_RANGE(0xd0000, 0xdffff) AM_RAM_WRITE(m107_vram_w) AM_BASE(&m107_vram_data) + AM_RANGE(0xd0000, 0xdffff) AM_RAM_WRITE(m107_vram_w) AM_BASE_MEMBER(m107_state, vram_data) AM_RANGE(0xe0000, 0xeffff) AM_RAM /* System ram */ AM_RANGE(0xf8000, 0xf8fff) AM_RAM AM_BASE_GENERIC(spriteram) AM_RANGE(0xf9000, 0xf9fff) AM_RAM_WRITE(paletteram16_xBBBBBGGGGGRRRRR_word_w) AM_BASE_GENERIC(paletteram) @@ -817,7 +819,7 @@ static const ym2151_interface ym2151_config = static const nec_config firebarr_config ={ rtypeleo_decryption_table, }; -static MACHINE_CONFIG_START( firebarr, driver_device ) +static MACHINE_CONFIG_START( firebarr, m107_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", V33, 28000000/2) /* NEC V33, 28MHz clock */ @@ -1012,6 +1014,7 @@ ROM_END static DRIVER_INIT( firebarr ) { + m107_state *state = machine->driver_data(); UINT8 *RAM = machine->region("maincpu")->base(); memcpy(RAM + 0xffff0, RAM + 0x7fff0, 0x10); /* Start vector */ @@ -1020,12 +1023,13 @@ static DRIVER_INIT( firebarr ) RAM = machine->region("soundcpu")->base(); memcpy(RAM + 0xffff0,RAM + 0x1fff0, 0x10); /* Sound cpu Start vector */ - m107_irq_vectorbase = 0x20; - m107_spritesystem = 1; + state->irq_vectorbase = 0x20; + state->spritesystem = 1; } static DRIVER_INIT( dsoccr94 ) { + m107_state *state = machine->driver_data(); UINT8 *RAM = machine->region("maincpu")->base(); memcpy(RAM + 0xffff0, RAM + 0x7fff0, 0x10); /* Start vector */ @@ -1034,12 +1038,13 @@ static DRIVER_INIT( dsoccr94 ) RAM = machine->region("soundcpu")->base(); memcpy(RAM + 0xffff0, RAM + 0x1fff0, 0x10); /* Sound cpu Start vector */ - m107_irq_vectorbase = 0x80; - m107_spritesystem = 0; + state->irq_vectorbase = 0x80; + state->spritesystem = 0; } static DRIVER_INIT( wpksoc ) { + m107_state *state = machine->driver_data(); UINT8 *RAM = machine->region("maincpu")->base(); memcpy(RAM + 0xffff0, RAM + 0x7fff0, 0x10); /* Start vector */ @@ -1049,8 +1054,8 @@ static DRIVER_INIT( wpksoc ) memcpy(RAM + 0xffff0, RAM + 0x1fff0, 0x10); /* Sound cpu Start vector */ - m107_irq_vectorbase = 0x80; - m107_spritesystem = 0; + state->irq_vectorbase = 0x80; + state->spritesystem = 0; } /***************************************************************************/ diff --git a/src/mame/drivers/m72.c b/src/mame/drivers/m72.c index e4ac84792ab..279c409cdae 100644 --- a/src/mame/drivers/m72.c +++ b/src/mame/drivers/m72.c @@ -97,12 +97,6 @@ other supported games as well. #define SOUND_CLOCK XTAL_3_579545MHz -static UINT16 *protection_ram; -static emu_timer *scanline_timer; -static UINT8 m72_irq_base; -static UINT8 mcu_snd_cmd_latch; -static UINT8 mcu_sample_latch; -static UINT32 mcu_sample_addr; static TIMER_CALLBACK( m72_scanline_interrupt ); static TIMER_CALLBACK( kengo_scanline_interrupt ); @@ -111,18 +105,20 @@ static TIMER_CALLBACK( kengo_scanline_interrupt ); static MACHINE_START( m72 ) { - scanline_timer = timer_alloc(machine, m72_scanline_interrupt, NULL); + m72_state *state = machine->driver_data(); + state->scanline_timer = timer_alloc(machine, m72_scanline_interrupt, NULL); - state_save_register_global(machine, mcu_sample_addr); - state_save_register_global(machine, mcu_snd_cmd_latch); + state_save_register_global(machine, state->mcu_sample_addr); + state_save_register_global(machine, state->mcu_snd_cmd_latch); } static MACHINE_START( kengo ) { - scanline_timer = timer_alloc(machine, kengo_scanline_interrupt, NULL); + m72_state *state = machine->driver_data(); + state->scanline_timer = timer_alloc(machine, kengo_scanline_interrupt, NULL); - state_save_register_global(machine, mcu_sample_addr); - state_save_register_global(machine, mcu_snd_cmd_latch); + state_save_register_global(machine, state->mcu_sample_addr); + state_save_register_global(machine, state->mcu_snd_cmd_latch); } static TIMER_CALLBACK( synch_callback ) @@ -133,55 +129,60 @@ static TIMER_CALLBACK( synch_callback ) static MACHINE_RESET( m72 ) { - m72_irq_base = 0x20; - mcu_sample_addr = 0; - mcu_snd_cmd_latch = 0; + m72_state *state = machine->driver_data(); + state->irq_base = 0x20; + state->mcu_sample_addr = 0; + state->mcu_snd_cmd_latch = 0; - timer_adjust_oneshot(scanline_timer, machine->primary_screen->time_until_pos(0), 0); + timer_adjust_oneshot(state->scanline_timer, machine->primary_screen->time_until_pos(0), 0); timer_call_after_resynch(machine, NULL, 0, synch_callback); } static MACHINE_RESET( xmultipl ) { - m72_irq_base = 0x08; - timer_adjust_oneshot(scanline_timer, machine->primary_screen->time_until_pos(0), 0); + m72_state *state = machine->driver_data(); + state->irq_base = 0x08; + timer_adjust_oneshot(state->scanline_timer, machine->primary_screen->time_until_pos(0), 0); } static MACHINE_RESET( kengo ) { - timer_adjust_oneshot(scanline_timer, machine->primary_screen->time_until_pos(0), 0); + m72_state *state = machine->driver_data(); + timer_adjust_oneshot(state->scanline_timer, machine->primary_screen->time_until_pos(0), 0); } static TIMER_CALLBACK( m72_scanline_interrupt ) { + m72_state *state = machine->driver_data(); int scanline = param; /* raster interrupt - visible area only? */ - if (scanline < 256 && scanline == m72_raster_irq_position - 128) + if (scanline < 256 && scanline == state->raster_irq_position - 128) { machine->primary_screen->update_partial(scanline); - cputag_set_input_line_and_vector(machine, "maincpu", 0, HOLD_LINE, m72_irq_base + 2); + cputag_set_input_line_and_vector(machine, "maincpu", 0, HOLD_LINE, state->irq_base + 2); } /* VBLANK interrupt */ else if (scanline == 256) { machine->primary_screen->update_partial(scanline); - cputag_set_input_line_and_vector(machine, "maincpu", 0, HOLD_LINE, m72_irq_base + 0); + cputag_set_input_line_and_vector(machine, "maincpu", 0, HOLD_LINE, state->irq_base + 0); } /* adjust for next scanline */ if (++scanline >= machine->primary_screen->height()) scanline = 0; - timer_adjust_oneshot(scanline_timer, machine->primary_screen->time_until_pos(scanline), scanline); + timer_adjust_oneshot(state->scanline_timer, machine->primary_screen->time_until_pos(scanline), scanline); } static TIMER_CALLBACK( kengo_scanline_interrupt ) { + m72_state *state = machine->driver_data(); int scanline = param; /* raster interrupt - visible area only? */ - if (scanline < 256 && scanline == m72_raster_irq_position - 128) + if (scanline < 256 && scanline == state->raster_irq_position - 128) { machine->primary_screen->update_partial(scanline); cputag_set_input_line(machine, "maincpu", NEC_INPUT_LINE_INTP2, ASSERT_LINE); @@ -201,7 +202,7 @@ static TIMER_CALLBACK( kengo_scanline_interrupt ) /* adjust for next scanline */ if (++scanline >= machine->primary_screen->height()) scanline = 0; - timer_adjust_oneshot(scanline_timer, machine->primary_screen->time_until_pos(scanline), scanline); + timer_adjust_oneshot(state->scanline_timer, machine->primary_screen->time_until_pos(scanline), scanline); } /*************************************************************************** @@ -231,19 +232,21 @@ static TIMER_CALLBACK( delayed_ram16_w ) static WRITE16_HANDLER( m72_main_mcu_sound_w ) { + m72_state *state = space->machine->driver_data(); if (data & 0xfff0) logerror("sound_w: %04x %04x\n", mem_mask, data); if (ACCESSING_BITS_0_7) { - mcu_snd_cmd_latch = data; + state->mcu_snd_cmd_latch = data; cputag_set_input_line(space->machine, "mcu", 1, ASSERT_LINE); } } static WRITE16_HANDLER( m72_main_mcu_w) { - UINT16 val = protection_ram[offset]; + m72_state *state = space->machine->driver_data(); + UINT16 val = state->protection_ram[offset]; COMBINE_DATA(&val); @@ -253,27 +256,29 @@ static WRITE16_HANDLER( m72_main_mcu_w) if (offset == 0x0fff/2 && ACCESSING_BITS_8_15) { - protection_ram[offset] = val; + state->protection_ram[offset] = val; cputag_set_input_line(space->machine, "mcu", 0, ASSERT_LINE); /* Line driven, most likely by write line */ //timer_set(space->machine, space->machine->device("mcu")->cycles_to_attotime(2), NULL, 0, mcu_irq0_clear); //timer_set(space->machine, space->machine->device("mcu")->cycles_to_attotime(0), NULL, 0, mcu_irq0_raise); } else - timer_call_after_resynch( space->machine, protection_ram, (offset<<16) | val, delayed_ram16_w); + timer_call_after_resynch( space->machine, state->protection_ram, (offset<<16) | val, delayed_ram16_w); } static WRITE8_HANDLER( m72_mcu_data_w ) { + m72_state *state = space->machine->driver_data(); UINT16 val; - if (offset&1) val = (protection_ram[offset/2] & 0x00ff) | (data << 8); - else val = (protection_ram[offset/2] & 0xff00) | (data&0xff); + if (offset&1) val = (state->protection_ram[offset/2] & 0x00ff) | (data << 8); + else val = (state->protection_ram[offset/2] & 0xff00) | (data&0xff); - timer_call_after_resynch( space->machine, protection_ram, ((offset >>1 ) << 16) | val, delayed_ram16_w); + timer_call_after_resynch( space->machine, state->protection_ram, ((offset >>1 ) << 16) | val, delayed_ram16_w); } static READ8_HANDLER(m72_mcu_data_r ) { + m72_state *state = space->machine->driver_data(); UINT8 ret; if (offset == 0x0fff || offset == 0x0ffe) @@ -281,35 +286,39 @@ static READ8_HANDLER(m72_mcu_data_r ) cputag_set_input_line(space->machine, "mcu", 0, CLEAR_LINE); } - if (offset&1) ret = (protection_ram[offset/2] & 0xff00)>>8; - else ret = (protection_ram[offset/2] & 0x00ff); + if (offset&1) ret = (state->protection_ram[offset/2] & 0xff00)>>8; + else ret = (state->protection_ram[offset/2] & 0x00ff); return ret; } static INTERRUPT_GEN( m72_mcu_int ) { - //mcu_snd_cmd_latch |= 0x11; /* 0x10 is special as well - FIXME */ - mcu_snd_cmd_latch = 0x11;// | (machine->rand() & 1); /* 0x10 is special as well - FIXME */ + m72_state *state = device->machine->driver_data(); + //state->mcu_snd_cmd_latch |= 0x11; /* 0x10 is special as well - FIXME */ + state->mcu_snd_cmd_latch = 0x11;// | (machine->rand() & 1); /* 0x10 is special as well - FIXME */ cpu_set_input_line(device, 1, ASSERT_LINE); } static READ8_HANDLER(m72_mcu_sample_r ) { + m72_state *state = space->machine->driver_data(); UINT8 sample; - sample = space->machine->region("samples")->base()[mcu_sample_addr++]; + sample = space->machine->region("samples")->base()[state->mcu_sample_addr++]; return sample; } static WRITE8_HANDLER(m72_mcu_ack_w ) { + m72_state *state = space->machine->driver_data(); cputag_set_input_line(space->machine, "mcu", 1, CLEAR_LINE); - mcu_snd_cmd_latch = 0; + state->mcu_snd_cmd_latch = 0; } static READ8_HANDLER(m72_mcu_snd_r ) { - return mcu_snd_cmd_latch; + m72_state *state = space->machine->driver_data(); + return state->mcu_snd_cmd_latch; } static READ8_HANDLER(m72_mcu_port_r ) @@ -320,9 +329,10 @@ static READ8_HANDLER(m72_mcu_port_r ) static WRITE8_HANDLER(m72_mcu_port_w ) { + m72_state *state = space->machine->driver_data(); if (offset == 1) { - mcu_sample_latch = data; + state->mcu_sample_latch = data; cputag_set_input_line(space->machine, "soundcpu", INPUT_LINE_NMI, PULSE_LINE); } else @@ -332,14 +342,16 @@ static WRITE8_HANDLER(m72_mcu_port_w ) static WRITE8_HANDLER( m72_mcu_low_w ) { - mcu_sample_addr = (mcu_sample_addr & 0xffe000) | (data<<5); - logerror("low: %02x %02x %08x\n", offset, data, mcu_sample_addr); + m72_state *state = space->machine->driver_data(); + state->mcu_sample_addr = (state->mcu_sample_addr & 0xffe000) | (data<<5); + logerror("low: %02x %02x %08x\n", offset, data, state->mcu_sample_addr); } static WRITE8_HANDLER( m72_mcu_high_w ) { - mcu_sample_addr = (mcu_sample_addr & 0x1fff) | (data<<(8+5)); - logerror("high: %02x %02x %08x\n", offset, data, mcu_sample_addr); + m72_state *state = space->machine->driver_data(); + state->mcu_sample_addr = (state->mcu_sample_addr & 0x1fff) | (data<<(8+5)); + logerror("high: %02x %02x %08x\n", offset, data, state->mcu_sample_addr); } static WRITE8_DEVICE_HANDLER( m72_snd_cpu_sample_w ) @@ -350,20 +362,22 @@ static WRITE8_DEVICE_HANDLER( m72_snd_cpu_sample_w ) static READ8_HANDLER( m72_snd_cpu_sample_r ) { - return mcu_sample_latch; + m72_state *state = space->machine->driver_data(); + return state->mcu_sample_latch; } INLINE DRIVER_INIT( m72_8751 ) { + m72_state *state = machine->driver_data(); address_space *program = cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM); address_space *io = cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_IO); address_space *sndio = cputag_get_address_space(machine, "soundcpu", ADDRESS_SPACE_IO); device_t *dac = machine->device("dac"); - protection_ram = auto_alloc_array(machine, UINT16, 0x10000/2); + state->protection_ram = auto_alloc_array(machine, UINT16, 0x10000/2); memory_install_read_bank(program, 0xb0000, 0xbffff, 0, 0, "bank1"); memory_install_write16_handler(program, 0xb0000, 0xb0fff, 0, 0, m72_main_mcu_w); - memory_set_bankptr(machine, "bank1", protection_ram); + memory_set_bankptr(machine, "bank1", state->protection_ram); //memory_install_write16_handler(io, 0xc0, 0xc1, 0, 0, loht_sample_trigger_w); memory_install_write16_handler(io, 0xc0, 0xc1, 0, 0, m72_main_mcu_sound_w); @@ -702,7 +716,6 @@ static const UINT8 dkgenm72_crc[CRC_LEN] = { 0xc8,0xb4,0xdc,0xf8, 0xd3,0xba,0x4 0x79,0x08,0x1c,0xb3, 0x00,0x00 }; -static const UINT8 *protection_code, *protection_crc; static void copy_le(UINT16 *dest, const UINT8 *src, UINT8 bytes) { @@ -714,30 +727,33 @@ static void copy_le(UINT16 *dest, const UINT8 *src, UINT8 bytes) static READ16_HANDLER( protection_r ) { + m72_state *state = space->machine->driver_data(); if (ACCESSING_BITS_8_15) - copy_le(protection_ram,protection_code,CODE_LEN); - return protection_ram[0xffa/2+offset]; + copy_le(state->protection_ram,state->protection_code,CODE_LEN); + return state->protection_ram[0xffa/2+offset]; } static WRITE16_HANDLER( protection_w ) { + m72_state *state = space->machine->driver_data(); data ^= 0xffff; - COMBINE_DATA(&protection_ram[offset]); + COMBINE_DATA(&state->protection_ram[offset]); data ^= 0xffff; if (offset == 0x0fff/2 && ACCESSING_BITS_8_15 && (data >> 8) == 0) - copy_le(&protection_ram[0x0fe0],protection_crc,CRC_LEN); + copy_le(&state->protection_ram[0x0fe0],state->protection_crc,CRC_LEN); } static void install_protection_handler(running_machine *machine, const UINT8 *code,const UINT8 *crc) { - protection_ram = auto_alloc_array(machine, UINT16, 0x1000/2); - protection_code = code; - protection_crc = crc; + m72_state *state = machine->driver_data(); + state->protection_ram = auto_alloc_array(machine, UINT16, 0x1000/2); + state->protection_code = code; + state->protection_crc = crc; memory_install_read_bank(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0xb0000, 0xb0fff, 0, 0, "bank1"); memory_install_read16_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0xb0ffa, 0xb0ffb, 0, 0, protection_r); memory_install_write16_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0xb0000, 0xb0fff, 0, 0, protection_w); - memory_set_bankptr(machine, "bank1", protection_ram); + memory_set_bankptr(machine, "bank1", state->protection_ram); } static DRIVER_INIT( bchopper ) @@ -770,12 +786,13 @@ static DRIVER_INIT( imgfight ) static DRIVER_INIT( loht ) { + m72_state *state = machine->driver_data(); install_protection_handler(machine, loht_code,loht_crc); memory_install_write16_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_IO), 0xc0, 0xc1, 0, 0, loht_sample_trigger_w); /* since we skip the startup tests, clear video RAM to prevent garbage on title screen */ - memset(m72_videoram2,0,0x4000); + memset(state->videoram2,0,0x4000); } static DRIVER_INIT( xmultiplm72 ) @@ -814,26 +831,27 @@ static DRIVER_INIT( gallop ) -static UINT8 *soundram; static READ16_HANDLER( soundram_r ) { - return soundram[offset * 2 + 0] | (soundram[offset * 2 + 1] << 8); + m72_state *state = space->machine->driver_data(); + return state->soundram[offset * 2 + 0] | (state->soundram[offset * 2 + 1] << 8); } static WRITE16_HANDLER( soundram_w ) { + m72_state *state = space->machine->driver_data(); if (ACCESSING_BITS_0_7) - soundram[offset * 2 + 0] = data; + state->soundram[offset * 2 + 0] = data; if (ACCESSING_BITS_8_15) - soundram[offset * 2 + 1] = data >> 8; + state->soundram[offset * 2 + 1] = data >> 8; } static READ16_HANDLER( poundfor_trackball_r ) { - static int prev[4],diff[4]; + m72_state *state = space->machine->driver_data(); static const char *const axisnames[] = { "TRACK0_X", "TRACK0_Y", "TRACK1_X", "TRACK1_Y" }; if (offset == 0) @@ -843,8 +861,8 @@ static READ16_HANDLER( poundfor_trackball_r ) for (i = 0;i < 4;i++) { curr = input_port_read(space->machine, axisnames[i]); - diff[i] = (curr - prev[i]); - prev[i] = curr; + state->diff[i] = (curr - state->prev[i]); + state->prev[i] = curr; } } @@ -852,13 +870,13 @@ static READ16_HANDLER( poundfor_trackball_r ) { default: case 0: - return (diff[0] & 0xff) | ((diff[2] & 0xff) << 8); + return (state->diff[0] & 0xff) | ((state->diff[2] & 0xff) << 8); case 1: - return ((diff[0] >> 8) & 0x1f) | (diff[2] & 0x1f00) | (input_port_read(space->machine, "IN0") & 0xe0e0); + return ((state->diff[0] >> 8) & 0x1f) | (state->diff[2] & 0x1f00) | (input_port_read(space->machine, "IN0") & 0xe0e0); case 2: - return (diff[1] & 0xff) | ((diff[3] & 0xff) << 8); + return (state->diff[1] & 0xff) | ((state->diff[3] & 0xff) << 8); case 3: - return ((diff[1] >> 8) & 0x1f) | (diff[3] & 0x1f00); + return ((state->diff[1] >> 8) & 0x1f) | (state->diff[3] & 0x1f00); } } @@ -870,8 +888,8 @@ static ADDRESS_MAP_START( NAME##_map, ADDRESS_SPACE_PROGRAM, 16 ) \ AM_RANGE(0xc0000, 0xc03ff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram) \ AM_RANGE(0xc8000, 0xc8bff) AM_READWRITE(m72_palette1_r, m72_palette1_w) AM_BASE_GENERIC(paletteram) \ AM_RANGE(0xcc000, 0xccbff) AM_READWRITE(m72_palette2_r, m72_palette2_w) AM_BASE_GENERIC(paletteram2) \ - AM_RANGE(0xd0000, 0xd3fff) AM_RAM_WRITE(m72_videoram1_w) AM_BASE(&m72_videoram1) \ - AM_RANGE(0xd8000, 0xdbfff) AM_RAM_WRITE(m72_videoram2_w) AM_BASE(&m72_videoram2) \ + AM_RANGE(0xd0000, 0xd3fff) AM_RAM_WRITE(m72_videoram1_w) AM_BASE_MEMBER(m72_state, videoram1) \ + AM_RANGE(0xd8000, 0xdbfff) AM_RAM_WRITE(m72_videoram2_w) AM_BASE_MEMBER(m72_state, videoram2) \ AM_RANGE(0xe0000, 0xeffff) AM_READWRITE(soundram_r, soundram_w) \ AM_RANGE(0xffff0, 0xfffff) AM_ROM \ ADDRESS_MAP_END @@ -890,8 +908,8 @@ static ADDRESS_MAP_START( xmultipl_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0xc0000, 0xc03ff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram) AM_RANGE(0xc8000, 0xc8bff) AM_READWRITE(m72_palette1_r, m72_palette1_w) AM_BASE_GENERIC(paletteram) AM_RANGE(0xcc000, 0xccbff) AM_READWRITE(m72_palette2_r, m72_palette2_w) AM_BASE_GENERIC(paletteram2) - AM_RANGE(0xd0000, 0xd3fff) AM_RAM_WRITE(m72_videoram1_w) AM_BASE(&m72_videoram1) - AM_RANGE(0xd8000, 0xdbfff) AM_RAM_WRITE(m72_videoram2_w) AM_BASE(&m72_videoram2) + AM_RANGE(0xd0000, 0xd3fff) AM_RAM_WRITE(m72_videoram1_w) AM_BASE_MEMBER(m72_state, videoram1) + AM_RANGE(0xd8000, 0xdbfff) AM_RAM_WRITE(m72_videoram2_w) AM_BASE_MEMBER(m72_state, videoram2) AM_RANGE(0xffff0, 0xfffff) AM_ROM ADDRESS_MAP_END @@ -902,8 +920,8 @@ static ADDRESS_MAP_START( dbreed_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0xc0000, 0xc03ff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram) AM_RANGE(0xc8000, 0xc8bff) AM_READWRITE(m72_palette1_r, m72_palette1_w) AM_BASE_GENERIC(paletteram) AM_RANGE(0xcc000, 0xccbff) AM_READWRITE(m72_palette2_r, m72_palette2_w) AM_BASE_GENERIC(paletteram2) - AM_RANGE(0xd0000, 0xd3fff) AM_RAM_WRITE(m72_videoram1_w) AM_BASE(&m72_videoram1) - AM_RANGE(0xd8000, 0xdbfff) AM_RAM_WRITE(m72_videoram2_w) AM_BASE(&m72_videoram2) + AM_RANGE(0xd0000, 0xd3fff) AM_RAM_WRITE(m72_videoram1_w) AM_BASE_MEMBER(m72_state, videoram1) + AM_RANGE(0xd8000, 0xdbfff) AM_RAM_WRITE(m72_videoram2_w) AM_BASE_MEMBER(m72_state, videoram2) AM_RANGE(0xffff0, 0xfffff) AM_ROM ADDRESS_MAP_END @@ -913,8 +931,8 @@ static ADDRESS_MAP_START( rtype2_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0xbc000, 0xbc001) AM_WRITE(m72_dmaon_w) AM_RANGE(0xc0000, 0xc03ff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram) AM_RANGE(0xc8000, 0xc8bff) AM_READWRITE(m72_palette1_r, m72_palette1_w) AM_BASE_GENERIC(paletteram) - AM_RANGE(0xd0000, 0xd3fff) AM_RAM_WRITE(m72_videoram1_w) AM_BASE(&m72_videoram1) - AM_RANGE(0xd4000, 0xd7fff) AM_RAM_WRITE(m72_videoram2_w) AM_BASE(&m72_videoram2) + AM_RANGE(0xd0000, 0xd3fff) AM_RAM_WRITE(m72_videoram1_w) AM_BASE_MEMBER(m72_state, videoram1) + AM_RANGE(0xd4000, 0xd7fff) AM_RAM_WRITE(m72_videoram2_w) AM_BASE_MEMBER(m72_state, videoram2) AM_RANGE(0xd8000, 0xd8bff) AM_READWRITE(m72_palette2_r, m72_palette2_w) AM_BASE_GENERIC(paletteram2) AM_RANGE(0xe0000, 0xe3fff) AM_RAM /* work RAM */ AM_RANGE(0xffff0, 0xfffff) AM_ROM @@ -922,10 +940,10 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( majtitle_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x00000, 0x7ffff) AM_ROM - AM_RANGE(0xa0000, 0xa03ff) AM_RAM AM_BASE(&majtitle_rowscrollram) + AM_RANGE(0xa0000, 0xa03ff) AM_RAM AM_BASE_MEMBER(m72_state, majtitle_rowscrollram) AM_RANGE(0xa4000, 0xa4bff) AM_READWRITE(m72_palette2_r, m72_palette2_w) AM_BASE_GENERIC(paletteram2) - AM_RANGE(0xac000, 0xaffff) AM_RAM_WRITE(m72_videoram1_w) AM_BASE(&m72_videoram1) - AM_RANGE(0xb0000, 0xbffff) AM_RAM_WRITE(m72_videoram2_w) AM_BASE(&m72_videoram2) /* larger than the other games */ + AM_RANGE(0xac000, 0xaffff) AM_RAM_WRITE(m72_videoram1_w) AM_BASE_MEMBER(m72_state, videoram1) + AM_RANGE(0xb0000, 0xbffff) AM_RAM_WRITE(m72_videoram2_w) AM_BASE_MEMBER(m72_state, videoram2) /* larger than the other games */ AM_RANGE(0xc0000, 0xc03ff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram) AM_RANGE(0xc8000, 0xc83ff) AM_RAM AM_BASE_GENERIC(spriteram2) AM_RANGE(0xcc000, 0xccbff) AM_READWRITE(m72_palette1_r, m72_palette1_w) AM_BASE_GENERIC(paletteram) @@ -943,8 +961,8 @@ static ADDRESS_MAP_START( hharry_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0xc0000, 0xc03ff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram) AM_RANGE(0xc8000, 0xc8bff) AM_READWRITE(m72_palette1_r, m72_palette1_w) AM_BASE_GENERIC(paletteram) AM_RANGE(0xcc000, 0xccbff) AM_READWRITE(m72_palette2_r, m72_palette2_w) AM_BASE_GENERIC(paletteram2) - AM_RANGE(0xd0000, 0xd3fff) AM_RAM_WRITE(m72_videoram1_w) AM_BASE(&m72_videoram1) - AM_RANGE(0xd8000, 0xdbfff) AM_RAM_WRITE(m72_videoram2_w) AM_BASE(&m72_videoram2) + AM_RANGE(0xd0000, 0xd3fff) AM_RAM_WRITE(m72_videoram1_w) AM_BASE_MEMBER(m72_state, videoram1) + AM_RANGE(0xd8000, 0xdbfff) AM_RAM_WRITE(m72_videoram2_w) AM_BASE_MEMBER(m72_state, videoram2) AM_RANGE(0xffff0, 0xfffff) AM_ROM ADDRESS_MAP_END @@ -956,8 +974,8 @@ static ADDRESS_MAP_START( hharryu_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0xbc000, 0xbc001) AM_WRITE(m72_dmaon_w) AM_RANGE(0xb0ffe, 0xb0fff) AM_WRITEONLY /* leftover from protection?? */ AM_RANGE(0xc0000, 0xc03ff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram) - AM_RANGE(0xd0000, 0xd3fff) AM_RAM_WRITE(m72_videoram1_w) AM_BASE(&m72_videoram1) - AM_RANGE(0xd4000, 0xd7fff) AM_RAM_WRITE(m72_videoram2_w) AM_BASE(&m72_videoram2) + AM_RANGE(0xd0000, 0xd3fff) AM_RAM_WRITE(m72_videoram1_w) AM_BASE_MEMBER(m72_state, videoram1) + AM_RANGE(0xd4000, 0xd7fff) AM_RAM_WRITE(m72_videoram2_w) AM_BASE_MEMBER(m72_state, videoram2) AM_RANGE(0xe0000, 0xe3fff) AM_RAM /* work RAM */ AM_RANGE(0xffff0, 0xfffff) AM_ROM ADDRESS_MAP_END @@ -970,8 +988,8 @@ static ADDRESS_MAP_START( kengo_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0xb4000, 0xb4001) AM_WRITENOP /* ??? */ AM_RANGE(0xbc000, 0xbc001) AM_WRITE(m72_dmaon_w) AM_RANGE(0xc0000, 0xc03ff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram) - AM_RANGE(0x80000, 0x83fff) AM_RAM_WRITE(m72_videoram1_w) AM_BASE(&m72_videoram1) - AM_RANGE(0x84000, 0x87fff) AM_RAM_WRITE(m72_videoram2_w) AM_BASE(&m72_videoram2) + AM_RANGE(0x80000, 0x83fff) AM_RAM_WRITE(m72_videoram1_w) AM_BASE_MEMBER(m72_state, videoram1) + AM_RANGE(0x84000, 0x87fff) AM_RAM_WRITE(m72_videoram2_w) AM_BASE_MEMBER(m72_state, videoram2) AM_RANGE(0xe0000, 0xe3fff) AM_RAM /* work RAM */ AM_RANGE(0xffff0, 0xfffff) AM_ROM ADDRESS_MAP_END @@ -1062,7 +1080,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( sound_ram_map, ADDRESS_SPACE_PROGRAM, 8 ) - AM_RANGE(0x0000, 0xffff) AM_RAM AM_BASE(&soundram) + AM_RANGE(0x0000, 0xffff) AM_RAM AM_BASE_MEMBER(m72_state, soundram) ADDRESS_MAP_END static ADDRESS_MAP_START( sound_rom_map, ADDRESS_SPACE_PROGRAM, 8 ) @@ -1827,7 +1845,7 @@ static const ym2151_interface ym2151_config = -static MACHINE_CONFIG_START( m72_base, driver_device ) +static MACHINE_CONFIG_START( m72_base, m72_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu",V30,MASTER_CLOCK/2/2) /* 16 MHz external freq (8MHz internal) */ @@ -1883,7 +1901,7 @@ static MACHINE_CONFIG_DERIVED( m72_8751, m72_base ) MACHINE_CONFIG_END -static MACHINE_CONFIG_START( rtype, driver_device ) +static MACHINE_CONFIG_START( rtype, m72_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu",V30,MASTER_CLOCK/2/2) /* 16 MHz external freq (8MHz internal) */ @@ -1921,7 +1939,7 @@ static MACHINE_CONFIG_START( rtype, driver_device ) MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) MACHINE_CONFIG_END -static MACHINE_CONFIG_START( xmultipl, driver_device ) +static MACHINE_CONFIG_START( xmultipl, m72_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu",V30,MASTER_CLOCK/2/2) /* 16 MHz external freq (8MHz internal) */ @@ -1964,7 +1982,7 @@ static MACHINE_CONFIG_START( xmultipl, driver_device ) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.40) MACHINE_CONFIG_END -static MACHINE_CONFIG_START( xmultiplm72, driver_device ) +static MACHINE_CONFIG_START( xmultiplm72, m72_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu",V30,MASTER_CLOCK/2/2) /* 16 MHz external freq (8MHz internal) */ @@ -2007,7 +2025,7 @@ static MACHINE_CONFIG_START( xmultiplm72, driver_device ) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.40) MACHINE_CONFIG_END -static MACHINE_CONFIG_START( dbreed, driver_device ) +static MACHINE_CONFIG_START( dbreed, m72_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu",V30,MASTER_CLOCK/2/2) /* 16 MHz external freq (8MHz internal) */ @@ -2050,7 +2068,7 @@ static MACHINE_CONFIG_START( dbreed, driver_device ) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.40) MACHINE_CONFIG_END -static MACHINE_CONFIG_START( dbreedm72, driver_device ) +static MACHINE_CONFIG_START( dbreedm72, m72_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", V30,MASTER_CLOCK/2/2) /* 16 MHz external freq (8MHz internal) */ @@ -2093,7 +2111,7 @@ static MACHINE_CONFIG_START( dbreedm72, driver_device ) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.40) MACHINE_CONFIG_END -static MACHINE_CONFIG_START( rtype2, driver_device ) +static MACHINE_CONFIG_START( rtype2, m72_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", V30,MASTER_CLOCK/2/2) /* 16 MHz external freq (8MHz internal) */ @@ -2136,7 +2154,7 @@ static MACHINE_CONFIG_START( rtype2, driver_device ) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.40) MACHINE_CONFIG_END -static MACHINE_CONFIG_START( majtitle, driver_device ) +static MACHINE_CONFIG_START( majtitle, m72_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", V30,MASTER_CLOCK/2/2) /* 16 MHz external freq (8MHz internal) */ @@ -2179,7 +2197,7 @@ static MACHINE_CONFIG_START( majtitle, driver_device ) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.40) MACHINE_CONFIG_END -static MACHINE_CONFIG_START( hharry, driver_device ) +static MACHINE_CONFIG_START( hharry, m72_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", V30,MASTER_CLOCK/2/2) /* 16 MHz external freq (8MHz internal) */ @@ -2222,7 +2240,7 @@ static MACHINE_CONFIG_START( hharry, driver_device ) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.40) MACHINE_CONFIG_END -static MACHINE_CONFIG_START( hharryu, driver_device ) +static MACHINE_CONFIG_START( hharryu, m72_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", V30,MASTER_CLOCK/2/2) /* 16 MHz external freq (8MHz internal) */ @@ -2265,7 +2283,7 @@ static MACHINE_CONFIG_START( hharryu, driver_device ) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.40) MACHINE_CONFIG_END -static MACHINE_CONFIG_START( dkgenm72, driver_device ) +static MACHINE_CONFIG_START( dkgenm72, m72_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu",V30,MASTER_CLOCK/2/2) /* 16 MHz external freq (8MHz internal) */ @@ -2308,7 +2326,7 @@ static MACHINE_CONFIG_START( dkgenm72, driver_device ) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.40) MACHINE_CONFIG_END -static MACHINE_CONFIG_START( poundfor, driver_device ) +static MACHINE_CONFIG_START( poundfor, m72_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", V30,MASTER_CLOCK/2/2) /* 16 MHz external freq (8MHz internal) */ @@ -2351,7 +2369,7 @@ static MACHINE_CONFIG_START( poundfor, driver_device ) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.40) MACHINE_CONFIG_END -static MACHINE_CONFIG_START( cosmccop, driver_device ) +static MACHINE_CONFIG_START( cosmccop, m72_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", V35,MASTER_CLOCK/2) diff --git a/src/mame/drivers/m92.c b/src/mame/drivers/m92.c index 35aca2d1672..91ca91f9a84 100644 --- a/src/mame/drivers/m92.c +++ b/src/mame/drivers/m92.c @@ -203,17 +203,12 @@ psoldier dip locations still need veritication. #include "sound/iremga20.h" #include "sound/okim6295.h" -static UINT8 irqvector; -static UINT16 sound_status; -static UINT32 bankaddress; -static emu_timer *scanline_timer; -static UINT8 m92_irq_vectorbase; -#define M92_IRQ_0 ((m92_irq_vectorbase+0)/4) /* VBL interrupt*/ -#define M92_IRQ_1 ((m92_irq_vectorbase+4)/4) /* Sprite buffer complete interrupt */ -#define M92_IRQ_2 ((m92_irq_vectorbase+8)/4) /* Raster interrupt */ -#define M92_IRQ_3 ((m92_irq_vectorbase+12)/4) /* Sound cpu interrupt */ +#define M92_IRQ_0 ((state->irq_vectorbase+0)/4) /* VBL interrupt*/ +#define M92_IRQ_1 ((state->irq_vectorbase+4)/4) /* Sprite buffer complete interrupt */ +#define M92_IRQ_2 ((state->irq_vectorbase+8)/4) /* Raster interrupt */ +#define M92_IRQ_3 ((state->irq_vectorbase+12)/4) /* Sound cpu interrupt */ static TIMER_CALLBACK( m92_scanline_interrupt ); @@ -222,8 +217,9 @@ static TIMER_CALLBACK( m92_scanline_interrupt ); static void set_m92_bank(running_machine *machine) { + m92_state *state = machine->driver_data(); UINT8 *RAM = machine->region("maincpu")->base(); - memory_set_bankptr(machine, "bank1",&RAM[bankaddress]); + memory_set_bankptr(machine, "bank1",&RAM[state->bankaddress]); } static STATE_POSTLOAD( m92_postload ) @@ -233,27 +229,30 @@ static STATE_POSTLOAD( m92_postload ) static MACHINE_START( m92 ) { - state_save_register_global(machine, irqvector); - state_save_register_global(machine, sound_status); - state_save_register_global(machine, bankaddress); + m92_state *state = machine->driver_data(); + state_save_register_global(machine, state->irqvector); + state_save_register_global(machine, state->sound_status); + state_save_register_global(machine, state->bankaddress); state_save_register_postload(machine, m92_postload, NULL); - scanline_timer = timer_alloc(machine, m92_scanline_interrupt, NULL); + state->scanline_timer = timer_alloc(machine, m92_scanline_interrupt, NULL); } static MACHINE_RESET( m92 ) { - timer_adjust_oneshot(scanline_timer, machine->primary_screen->time_until_pos(0), 0); + m92_state *state = machine->driver_data(); + timer_adjust_oneshot(state->scanline_timer, machine->primary_screen->time_until_pos(0), 0); } /*****************************************************************************/ static TIMER_CALLBACK( m92_scanline_interrupt ) { + m92_state *state = machine->driver_data(); int scanline = param; /* raster interrupt */ - if (scanline == m92_raster_irq_position) + if (scanline == state->raster_irq_position) { machine->primary_screen->update_partial(scanline); cputag_set_input_line_and_vector(machine, "maincpu", 0, HOLD_LINE, M92_IRQ_2); @@ -269,7 +268,7 @@ static TIMER_CALLBACK( m92_scanline_interrupt ) /* adjust for next scanline */ if (++scanline >= machine->primary_screen->height()) scanline = 0; - timer_adjust_oneshot(scanline_timer, machine->primary_screen->time_until_pos(scanline), scanline); + timer_adjust_oneshot(state->scanline_timer, machine->primary_screen->time_until_pos(scanline), scanline); } /*****************************************************************************/ @@ -303,16 +302,18 @@ static WRITE16_HANDLER( m92_coincounter_w ) static WRITE16_HANDLER( m92_bankswitch_w ) { + m92_state *state = space->machine->driver_data(); if (ACCESSING_BITS_0_7) { - bankaddress = 0x100000 + ((data & 0x7) * 0x10000); + state->bankaddress = 0x100000 + ((data & 0x7) * 0x10000); set_m92_bank(space->machine); } } static CUSTOM_INPUT( m92_sprite_busy_r ) { - return m92_sprite_buffer_busy; + m92_state *state = field->port->machine->driver_data(); + return state->sprite_buffer_busy; } /*****************************************************************************/ @@ -321,24 +322,25 @@ enum { VECTOR_INIT, YM2151_ASSERT, YM2151_CLEAR, V30_ASSERT, V30_CLEAR }; static TIMER_CALLBACK( setvector_callback ) { + m92_state *state = machine->driver_data(); if (!machine->device("soundcpu")) return; switch(param) { - case VECTOR_INIT: irqvector = 0; break; - case YM2151_ASSERT: irqvector |= 0x2; break; - case YM2151_CLEAR: irqvector &= ~0x2; break; - case V30_ASSERT: irqvector |= 0x1; break; - case V30_CLEAR: irqvector &= ~0x1; break; + case VECTOR_INIT: state->irqvector = 0; break; + case YM2151_ASSERT: state->irqvector |= 0x2; break; + case YM2151_CLEAR: state->irqvector &= ~0x2; break; + case V30_ASSERT: state->irqvector |= 0x1; break; + case V30_CLEAR: state->irqvector &= ~0x1; break; } - if (irqvector & 0x2) /* YM2151 has precedence */ + if (state->irqvector & 0x2) /* YM2151 has precedence */ cpu_set_input_line_vector(machine->device("soundcpu"), 0, 0x18); - else if (irqvector & 0x1) /* V30 */ + else if (state->irqvector & 0x1) /* V30 */ cpu_set_input_line_vector(machine->device("soundcpu"), 0, 0x19); - if (irqvector == 0) /* no IRQs pending */ + if (state->irqvector == 0) /* no IRQs pending */ cputag_set_input_line(machine, "soundcpu", 0, CLEAR_LINE); else /* IRQ pending */ cputag_set_input_line(machine, "soundcpu", 0, ASSERT_LINE); @@ -352,8 +354,9 @@ static WRITE16_HANDLER( m92_soundlatch_w ) static READ16_HANDLER( m92_sound_status_r ) { + m92_state *state = space->machine->driver_data(); //logerror("%06x: read sound status\n",cpu_get_pc(space->cpu)); - return sound_status; + return state->sound_status; } static READ16_HANDLER( m92_soundlatch_r ) @@ -368,7 +371,8 @@ static WRITE16_HANDLER( m92_sound_irq_ack_w ) static WRITE16_HANDLER( m92_sound_status_w ) { - COMBINE_DATA(&sound_status); + m92_state *state = space->machine->driver_data(); + COMBINE_DATA(&state->sound_status); cputag_set_input_line_and_vector(space->machine, "maincpu", 0, HOLD_LINE, M92_IRQ_3); } @@ -383,11 +387,11 @@ static WRITE16_HANDLER( m92_sound_reset_w ) /* appears to be an earlier board */ static ADDRESS_MAP_START( lethalth_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x00000, 0x7ffff) AM_ROM - AM_RANGE(0x80000, 0x8ffff) AM_RAM_WRITE(m92_vram_w) AM_BASE(&m92_vram_data) + AM_RANGE(0x80000, 0x8ffff) AM_RAM_WRITE(m92_vram_w) AM_BASE_MEMBER(m92_state, vram_data) AM_RANGE(0xe0000, 0xeffff) AM_RAM /* System ram */ AM_RANGE(0xf8000, 0xf87ff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram) AM_RANGE(0xf8800, 0xf8fff) AM_READWRITE(m92_paletteram_r, m92_paletteram_w) - AM_RANGE(0xf9000, 0xf900f) AM_WRITE(m92_spritecontrol_w) AM_BASE(&m92_spritecontrol) + AM_RANGE(0xf9000, 0xf900f) AM_WRITE(m92_spritecontrol_w) AM_BASE_MEMBER(m92_state, spritecontrol) AM_RANGE(0xf9800, 0xf9801) AM_WRITE(m92_videocontrol_w) AM_RANGE(0xffff0, 0xfffff) AM_ROM AM_REGION("maincpu", 0x7fff0) ADDRESS_MAP_END @@ -396,11 +400,11 @@ static ADDRESS_MAP_START( m92_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x00000, 0x9ffff) AM_ROM AM_RANGE(0xa0000, 0xbffff) AM_ROMBANK("bank1") AM_RANGE(0xc0000, 0xcffff) AM_ROMBANK("bank2") /* Mirror of rom: Used by In The Hunt as protection */ - AM_RANGE(0xd0000, 0xdffff) AM_RAM_WRITE(m92_vram_w) AM_BASE(&m92_vram_data) + AM_RANGE(0xd0000, 0xdffff) AM_RAM_WRITE(m92_vram_w) AM_BASE_MEMBER(m92_state, vram_data) AM_RANGE(0xe0000, 0xeffff) AM_RAM /* System ram */ AM_RANGE(0xf8000, 0xf87ff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram) AM_RANGE(0xf8800, 0xf8fff) AM_READWRITE(m92_paletteram_r, m92_paletteram_w) - AM_RANGE(0xf9000, 0xf900f) AM_WRITE(m92_spritecontrol_w) AM_BASE(&m92_spritecontrol) + AM_RANGE(0xf9000, 0xf900f) AM_WRITE(m92_spritecontrol_w) AM_BASE_MEMBER(m92_state, spritecontrol) AM_RANGE(0xf9800, 0xf9801) AM_WRITE(m92_videocontrol_w) AM_RANGE(0xffff0, 0xfffff) AM_ROM ADDRESS_MAP_END @@ -921,10 +925,12 @@ static const ym2151_interface ym2151_config = void m92_sprite_interrupt(running_machine *machine) { + m92_state *state = machine->driver_data(); + cputag_set_input_line_and_vector(machine, "maincpu", 0, HOLD_LINE, M92_IRQ_1); } -static MACHINE_CONFIG_START( m92, driver_device ) +static MACHINE_CONFIG_START( m92, m92_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu",V33,18000000/2) /* NEC V33, 18 MHz clock */ @@ -1010,7 +1016,7 @@ static MACHINE_CONFIG_DERIVED( hook, m92 ) MCFG_CPU_CONFIG(hook_config) MACHINE_CONFIG_END -static MACHINE_CONFIG_START( ppan, driver_device ) +static MACHINE_CONFIG_START( ppan, m92_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu",V33,18000000/2) @@ -2078,12 +2084,13 @@ ROM_END static void init_m92(running_machine *machine, int hasbanks) { + m92_state *state = machine->driver_data(); UINT8 *RAM = machine->region("maincpu")->base(); if (hasbanks) { memcpy(RAM + 0xffff0, RAM + 0x7fff0, 0x10); /* Start vector */ - bankaddress = 0xa0000; /* Initial bank */ + state->bankaddress = 0xa0000; /* Initial bank */ set_m92_bank(machine); /* Mirror used by In The Hunt for protection */ @@ -2096,9 +2103,9 @@ static void init_m92(running_machine *machine, int hasbanks) if (RAM) memcpy(RAM + 0xffff0, RAM + 0x1fff0, 0x10); /* Sound cpu Start vector */ - m92_game_kludge = 0; - m92_irq_vectorbase = 0x80; - m92_sprite_buffer_busy = 1; + state->game_kludge = 0; + state->irq_vectorbase = 0x80; + state->sprite_buffer_busy = 1; setvector_callback(machine, NULL, VECTOR_INIT); } @@ -2130,24 +2137,27 @@ static DRIVER_INIT( uccops ) static DRIVER_INIT( rtypeleo ) { + m92_state *state = machine->driver_data(); init_m92(machine, 1); - m92_irq_vectorbase = 0x20; + state->irq_vectorbase = 0x20; } static DRIVER_INIT( rtypelej ) { + m92_state *state = machine->driver_data(); init_m92(machine, 1); - m92_irq_vectorbase = 0x20; + state->irq_vectorbase = 0x20; } static DRIVER_INIT( majtitl2 ) { + m92_state *state = machine->driver_data(); init_m92(machine, 1); /* This game has an eprom on the game board */ memory_install_readwrite16_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0xf0000, 0xf3fff, 0, 0, m92_eeprom_r, m92_eeprom_w); - m92_game_kludge = 2; + state->game_kludge = 2; } static DRIVER_INIT( kaiteids ) @@ -2163,8 +2173,9 @@ static DRIVER_INIT( inthunt ) static DRIVER_INIT( lethalth ) { + m92_state *state = machine->driver_data(); init_m92(machine, 0); - m92_irq_vectorbase = 0x20; + state->irq_vectorbase = 0x20; /* NOP out the bankswitcher */ memory_nop_write(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_IO), 0x20, 0x21, 0, 0); @@ -2181,18 +2192,20 @@ static DRIVER_INIT( nbbatman ) static DRIVER_INIT( ssoldier ) { + m92_state *state = machine->driver_data(); init_m92(machine, 1); - m92_irq_vectorbase = 0x20; + state->irq_vectorbase = 0x20; /* main CPU expects an answer even before writing the first command */ - sound_status = 0x80; + state->sound_status = 0x80; } static DRIVER_INIT( psoldier ) { + m92_state *state = machine->driver_data(); init_m92(machine, 1); - m92_irq_vectorbase = 0x20; + state->irq_vectorbase = 0x20; /* main CPU expects an answer even before writing the first command */ - sound_status = 0x80; + state->sound_status = 0x80; } static DRIVER_INIT( dsoccr94j ) diff --git a/src/mame/drivers/pitnrun.c b/src/mame/drivers/pitnrun.c index bc2aa27d051..11136911ea5 100644 --- a/src/mame/drivers/pitnrun.c +++ b/src/mame/drivers/pitnrun.c @@ -69,16 +69,17 @@ K1000233A #include "sound/ay8910.h" #include "includes/pitnrun.h" -static int pitnrun_nmi; static INTERRUPT_GEN( pitnrun_nmi_source ) { - if(pitnrun_nmi) cpu_set_input_line(device,INPUT_LINE_NMI, PULSE_LINE); + pitnrun_state *state = device->machine->driver_data(); + if(state->nmi) cpu_set_input_line(device,INPUT_LINE_NMI, PULSE_LINE); } static WRITE8_HANDLER( nmi_enable_w ) { - pitnrun_nmi = data & 1; + pitnrun_state *state = space->machine->driver_data(); + state->nmi = data & 1; } static WRITE8_HANDLER(pitnrun_hflip_w) @@ -95,7 +96,7 @@ static ADDRESS_MAP_START( pitnrun_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0x0000, 0x7fff) AM_ROM AM_RANGE(0x8000, 0x87ff) AM_RAM AM_RANGE(0x8800, 0x8fff) AM_RAM_WRITE(pitnrun_videoram_w) AM_BASE_MEMBER(pitnrun_state, videoram) - AM_RANGE(0x9000, 0x9fff) AM_RAM_WRITE(pitnrun_videoram2_w) AM_BASE(&pitnrun_videoram2) + AM_RANGE(0x9000, 0x9fff) AM_RAM_WRITE(pitnrun_videoram2_w) AM_BASE_MEMBER(pitnrun_state, videoram2) AM_RANGE(0xa000, 0xa0ff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram) AM_RANGE(0xa800, 0xa800) AM_READ_PORT("SYSTEM") AM_RANGE(0xa800, 0xa807) AM_WRITENOP /* Analog Sound */ diff --git a/src/mame/drivers/redalert.c b/src/mame/drivers/redalert.c index 5aecabbc3ff..c38ce9fc84a 100644 --- a/src/mame/drivers/redalert.c +++ b/src/mame/drivers/redalert.c @@ -152,15 +152,15 @@ static READ8_HANDLER( panther_unk_r ) static ADDRESS_MAP_START( redalert_main_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0x0000, 0x1fff) AM_RAM - AM_RANGE(0x2000, 0x3fff) AM_RAM_WRITE(redalert_bitmap_videoram_w) AM_BASE(&redalert_bitmap_videoram) - AM_RANGE(0x4000, 0x4fff) AM_RAM AM_BASE(&redalert_charmap_videoram) + AM_RANGE(0x2000, 0x3fff) AM_RAM_WRITE(redalert_bitmap_videoram_w) AM_BASE_MEMBER(redalert_state, bitmap_videoram) + AM_RANGE(0x4000, 0x4fff) AM_RAM AM_BASE_MEMBER(redalert_state, charmap_videoram) AM_RANGE(0x5000, 0xbfff) AM_ROM AM_RANGE(0xc000, 0xc000) AM_MIRROR(0x0f8f) AM_READ_PORT("C000") AM_WRITENOP AM_RANGE(0xc010, 0xc010) AM_MIRROR(0x0f8f) AM_READ_PORT("C010") AM_WRITENOP AM_RANGE(0xc020, 0xc020) AM_MIRROR(0x0f8f) AM_READ_PORT("C020") AM_WRITENOP AM_RANGE(0xc030, 0xc030) AM_MIRROR(0x0f8f) AM_READNOP AM_WRITE(redalert_audio_command_w) - AM_RANGE(0xc040, 0xc040) AM_MIRROR(0x0f8f) AM_READNOP AM_WRITEONLY AM_BASE(&redalert_video_control) - AM_RANGE(0xc050, 0xc050) AM_MIRROR(0x0f8f) AM_READNOP AM_WRITEONLY AM_BASE(&redalert_bitmap_color) + AM_RANGE(0xc040, 0xc040) AM_MIRROR(0x0f8f) AM_READNOP AM_WRITEONLY AM_BASE_MEMBER(redalert_state, video_control) + AM_RANGE(0xc050, 0xc050) AM_MIRROR(0x0f8f) AM_READNOP AM_WRITEONLY AM_BASE_MEMBER(redalert_state, bitmap_color) AM_RANGE(0xc060, 0xc060) AM_MIRROR(0x0f8f) AM_READNOP AM_WRITE(redalert_voice_command_w) AM_RANGE(0xc070, 0xc070) AM_MIRROR(0x0f8f) AM_READWRITE(redalert_interrupt_clear_r, redalert_interrupt_clear_w) AM_RANGE(0xf000, 0xffff) AM_ROM AM_REGION("maincpu", 0x8000) @@ -168,45 +168,45 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( ww3_main_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0x0000, 0x1fff) AM_RAM - AM_RANGE(0x2000, 0x3fff) AM_RAM_WRITE(redalert_bitmap_videoram_w) AM_BASE(&redalert_bitmap_videoram) - AM_RANGE(0x4000, 0x4fff) AM_RAM AM_BASE(&redalert_charmap_videoram) + AM_RANGE(0x2000, 0x3fff) AM_RAM_WRITE(redalert_bitmap_videoram_w) AM_BASE_MEMBER(redalert_state, bitmap_videoram) + AM_RANGE(0x4000, 0x4fff) AM_RAM AM_BASE_MEMBER(redalert_state, charmap_videoram) AM_RANGE(0x5000, 0xbfff) AM_ROM AM_RANGE(0xc000, 0xc000) AM_MIRROR(0x0f8f) AM_READ_PORT("C000") AM_WRITENOP AM_RANGE(0xc010, 0xc010) AM_MIRROR(0x0f8f) AM_READ_PORT("C010") AM_WRITENOP AM_RANGE(0xc020, 0xc020) AM_MIRROR(0x0f8f) AM_READ_PORT("C020") AM_WRITENOP AM_RANGE(0xc030, 0xc030) AM_MIRROR(0x0f8f) AM_READNOP AM_WRITE(redalert_audio_command_w) - AM_RANGE(0xc040, 0xc040) AM_MIRROR(0x0f8f) AM_READNOP AM_WRITEONLY AM_BASE(&redalert_video_control) - AM_RANGE(0xc050, 0xc050) AM_MIRROR(0x0f8f) AM_READNOP AM_WRITEONLY AM_BASE(&redalert_bitmap_color) + AM_RANGE(0xc040, 0xc040) AM_MIRROR(0x0f8f) AM_READNOP AM_WRITEONLY AM_BASE_MEMBER(redalert_state, video_control) + AM_RANGE(0xc050, 0xc050) AM_MIRROR(0x0f8f) AM_READNOP AM_WRITEONLY AM_BASE_MEMBER(redalert_state, bitmap_color) AM_RANGE(0xc070, 0xc070) AM_MIRROR(0x0f8f) AM_READWRITE(redalert_interrupt_clear_r, redalert_interrupt_clear_w) AM_RANGE(0xf000, 0xffff) AM_ROM AM_REGION("maincpu", 0x8000) ADDRESS_MAP_END static ADDRESS_MAP_START( panther_main_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0x0000, 0x1fff) AM_RAM - AM_RANGE(0x2000, 0x3fff) AM_RAM_WRITE(redalert_bitmap_videoram_w) AM_BASE(&redalert_bitmap_videoram) - AM_RANGE(0x4000, 0x4fff) AM_RAM AM_BASE(&redalert_charmap_videoram) + AM_RANGE(0x2000, 0x3fff) AM_RAM_WRITE(redalert_bitmap_videoram_w) AM_BASE_MEMBER(redalert_state, bitmap_videoram) + AM_RANGE(0x4000, 0x4fff) AM_RAM AM_BASE_MEMBER(redalert_state, charmap_videoram) AM_RANGE(0x5000, 0xbfff) AM_ROM AM_RANGE(0xc000, 0xc000) AM_MIRROR(0x0f8f) AM_READ_PORT("C000") AM_WRITENOP AM_RANGE(0xc010, 0xc010) AM_MIRROR(0x0f8f) AM_READ_PORT("C010") AM_WRITENOP AM_RANGE(0xc020, 0xc020) AM_MIRROR(0x0f8f) AM_READ(panther_unk_r) /* vblank? */ AM_RANGE(0xc030, 0xc030) AM_MIRROR(0x0f8f) AM_READNOP AM_WRITE(redalert_audio_command_w) - AM_RANGE(0xc040, 0xc040) AM_MIRROR(0x0f8f) AM_READNOP AM_WRITEONLY AM_BASE(&redalert_video_control) - AM_RANGE(0xc050, 0xc050) AM_MIRROR(0x0f8f) AM_READNOP AM_WRITEONLY AM_BASE(&redalert_bitmap_color) + AM_RANGE(0xc040, 0xc040) AM_MIRROR(0x0f8f) AM_READNOP AM_WRITEONLY AM_BASE_MEMBER(redalert_state, video_control) + AM_RANGE(0xc050, 0xc050) AM_MIRROR(0x0f8f) AM_READNOP AM_WRITEONLY AM_BASE_MEMBER(redalert_state, bitmap_color) AM_RANGE(0xc070, 0xc070) AM_MIRROR(0x0f8f) AM_READWRITE(panther_interrupt_clear_r, redalert_interrupt_clear_w) AM_RANGE(0xf000, 0xffff) AM_ROM AM_REGION("maincpu", 0x8000) ADDRESS_MAP_END static ADDRESS_MAP_START( demoneye_main_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0x0000, 0x1fff) AM_RAM - AM_RANGE(0x2000, 0x3fff) AM_RAM_WRITE(redalert_bitmap_videoram_w) AM_BASE(&redalert_bitmap_videoram) - AM_RANGE(0x4000, 0x5fff) AM_RAM AM_BASE(&redalert_charmap_videoram) + AM_RANGE(0x2000, 0x3fff) AM_RAM_WRITE(redalert_bitmap_videoram_w) AM_BASE_MEMBER(redalert_state, bitmap_videoram) + AM_RANGE(0x4000, 0x5fff) AM_RAM AM_BASE_MEMBER(redalert_state, charmap_videoram) AM_RANGE(0x6000, 0xbfff) AM_ROM AM_RANGE(0xc000, 0xc000) AM_MIRROR(0x0f8f) AM_READ_PORT("C000") AM_WRITENOP AM_RANGE(0xc010, 0xc010) AM_MIRROR(0x0f8f) AM_READ_PORT("C010") AM_WRITENOP AM_RANGE(0xc020, 0xc020) AM_MIRROR(0x0f8f) AM_READ_PORT("C020") AM_WRITENOP AM_RANGE(0xc030, 0xc030) AM_MIRROR(0x0f8f) AM_READNOP AM_WRITE(demoneye_audio_command_w) - AM_RANGE(0xc040, 0xc040) AM_MIRROR(0x0f8f) AM_READNOP AM_WRITEONLY AM_BASE(&redalert_video_control) - AM_RANGE(0xc050, 0xc050) AM_MIRROR(0x0f8f) AM_READNOP AM_WRITEONLY AM_BASE(&redalert_bitmap_color) + AM_RANGE(0xc040, 0xc040) AM_MIRROR(0x0f8f) AM_READNOP AM_WRITEONLY AM_BASE_MEMBER(redalert_state, video_control) + AM_RANGE(0xc050, 0xc050) AM_MIRROR(0x0f8f) AM_READNOP AM_WRITEONLY AM_BASE_MEMBER(redalert_state, bitmap_color) AM_RANGE(0xc060, 0xc060) AM_MIRROR(0x0f80) AM_NOP /* unknown */ AM_RANGE(0xc061, 0xc061) AM_MIRROR(0x0f80) AM_NOP /* unknown */ AM_RANGE(0xc062, 0xc062) AM_MIRROR(0x0f80) AM_NOP /* unknown */ @@ -385,7 +385,7 @@ INPUT_PORTS_END * *************************************/ -static MACHINE_CONFIG_START( redalert, driver_device ) +static MACHINE_CONFIG_START( redalert, redalert_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", M6502, MAIN_CPU_CLOCK) @@ -399,7 +399,7 @@ static MACHINE_CONFIG_START( redalert, driver_device ) MCFG_FRAGMENT_ADD(redalert_audio) MACHINE_CONFIG_END -static MACHINE_CONFIG_START( ww3, driver_device ) +static MACHINE_CONFIG_START( ww3, redalert_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", M6502, MAIN_CPU_CLOCK) @@ -413,7 +413,7 @@ static MACHINE_CONFIG_START( ww3, driver_device ) MCFG_FRAGMENT_ADD(ww3_audio) MACHINE_CONFIG_END -static MACHINE_CONFIG_START( panther, driver_device ) +static MACHINE_CONFIG_START( panther, redalert_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", M6502, MAIN_CPU_CLOCK) @@ -427,7 +427,7 @@ static MACHINE_CONFIG_START( panther, driver_device ) MCFG_FRAGMENT_ADD(ww3_audio) MACHINE_CONFIG_END -static MACHINE_CONFIG_START( demoneye, driver_device ) +static MACHINE_CONFIG_START( demoneye, redalert_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", M6502, MAIN_CPU_CLOCK) diff --git a/src/mame/drivers/retofinv.c b/src/mame/drivers/retofinv.c index 9a5d807f593..64fa270c244 100644 --- a/src/mame/drivers/retofinv.c +++ b/src/mame/drivers/retofinv.c @@ -35,7 +35,6 @@ Notes: #include "sound/sn76496.h" #include "includes/retofinv.h" -static UINT8 cpu2_m6000=0; static WRITE8_HANDLER( cpu1_reset_w ) @@ -57,12 +56,14 @@ static WRITE8_HANDLER( mcu_reset_w ) static WRITE8_HANDLER( cpu2_m6000_w ) { - cpu2_m6000 = data; + retofinv_state *state = space->machine->driver_data(); + state->cpu2_m6000 = data; } static READ8_HANDLER( cpu0_mf800_r ) { - return cpu2_m6000; + retofinv_state *state = space->machine->driver_data(); + return state->cpu2_m6000; } static WRITE8_HANDLER( soundcommand_w ) @@ -105,9 +106,9 @@ static ADDRESS_MAP_START( main_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0x7fff, 0x7fff) AM_WRITE(coincounter_w) AM_RANGE(0x7b00, 0x7bff) AM_ROM /* space for diagnostic ROM? The code looks */ /* for a string here, and jumps if it's present */ - AM_RANGE(0x8000, 0x87ff) AM_RAM_WRITE(retofinv_fg_videoram_w) AM_SHARE("share2") AM_BASE(&retofinv_fg_videoram) - AM_RANGE(0x8800, 0x9fff) AM_RAM AM_SHARE("share1") AM_BASE(&retofinv_sharedram) - AM_RANGE(0xa000, 0xa7ff) AM_RAM_WRITE(retofinv_bg_videoram_w) AM_SHARE("share3") AM_BASE(&retofinv_bg_videoram) + AM_RANGE(0x8000, 0x87ff) AM_RAM_WRITE(retofinv_fg_videoram_w) AM_SHARE("share2") AM_BASE_MEMBER(retofinv_state, fg_videoram) + AM_RANGE(0x8800, 0x9fff) AM_RAM AM_SHARE("share1") AM_BASE_MEMBER(retofinv_state, sharedram) + AM_RANGE(0xa000, 0xa7ff) AM_RAM_WRITE(retofinv_bg_videoram_w) AM_SHARE("share3") AM_BASE_MEMBER(retofinv_state, bg_videoram) AM_RANGE(0xb800, 0xb802) AM_WRITE(retofinv_gfx_ctrl_w) AM_RANGE(0xc000, 0xc000) AM_READ_PORT("P1") AM_RANGE(0xc001, 0xc001) AM_READ_PORT("P2") @@ -336,7 +337,7 @@ GFXDECODE_END -static MACHINE_CONFIG_START( retofinv, driver_device ) +static MACHINE_CONFIG_START( retofinv, retofinv_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", Z80, 18432000/6) /* 3.072 MHz? */ diff --git a/src/mame/drivers/rollrace.c b/src/mame/drivers/rollrace.c index f84954baee4..8983e742a36 100644 --- a/src/mame/drivers/rollrace.c +++ b/src/mame/drivers/rollrace.c @@ -30,8 +30,8 @@ static ADDRESS_MAP_START( rollrace_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0xc000, 0xcfff) AM_RAM AM_RANGE(0xd806, 0xd806) AM_READNOP /* looks like a watchdog, bit4 checked*/ AM_RANGE(0xd900, 0xd900) AM_READWRITE(ra_fake_d800_r,ra_fake_d800_w) /* protection ??*/ - AM_RANGE(0xe000, 0xe3ff) AM_RAM AM_BASE(&rollrace_videoram) - AM_RANGE(0xe400, 0xe47f) AM_RAM AM_BASE(&rollrace_colorram) + AM_RANGE(0xe000, 0xe3ff) AM_RAM AM_BASE_MEMBER(rollrace_state, videoram) + AM_RANGE(0xe400, 0xe47f) AM_RAM AM_BASE_MEMBER(rollrace_state, colorram) AM_RANGE(0xe800, 0xe800) AM_WRITE(soundlatch_w) AM_RANGE(0xec00, 0xec0f) AM_NOP /* Analog sound effects ?? ec00 sound enable ?*/ AM_RANGE(0xf000, 0xf0ff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram) @@ -197,7 +197,7 @@ static GFXDECODE_START( rollrace ) GFXDECODE_ENTRY( "gfx5", 0x0000, spritelayout, 0, 32 ) GFXDECODE_END -static MACHINE_CONFIG_START( rollrace, driver_device ) +static MACHINE_CONFIG_START( rollrace, rollrace_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", Z80,XTAL_24MHz/8) /* verified on pcb */ diff --git a/src/mame/drivers/sprint2.c b/src/mame/drivers/sprint2.c index 32184c976c3..13e9de755ee 100644 --- a/src/mame/drivers/sprint2.c +++ b/src/mame/drivers/sprint2.c @@ -74,7 +74,7 @@ static INTERRUPT_GEN( sprint2 ) sprint2_state *state = device->machine->driver_data(); device_t *discrete = device->machine->device("discrete"); - /* handle state->steering wheels */ + /* handle steering wheels */ if (GAME_IS_SPRINT1 || GAME_IS_SPRINT2) { diff --git a/src/mame/drivers/superchs.c b/src/mame/drivers/superchs.c index dddc6e95736..3c4be41f5e8 100644 --- a/src/mame/drivers/superchs.c +++ b/src/mame/drivers/superchs.c @@ -44,32 +44,30 @@ #include "superchs.lh" #include "includes/superchs.h" -static UINT16 coin_word; -static UINT32 *superchs_ram; -static UINT32 *shared_ram; -static int steer=0; /*********************************************************************/ static READ16_HANDLER( shared_ram_r ) { - if ((offset&1)==0) return (shared_ram[offset/2]&0xffff0000)>>16; - return (shared_ram[offset/2]&0x0000ffff); + superchs_state *state = space->machine->driver_data(); + if ((offset&1)==0) return (state->shared_ram[offset/2]&0xffff0000)>>16; + return (state->shared_ram[offset/2]&0x0000ffff); } static WRITE16_HANDLER( shared_ram_w ) { + superchs_state *state = space->machine->driver_data(); if ((offset&1)==0) { if (ACCESSING_BITS_8_15) - shared_ram[offset/2]=(shared_ram[offset/2]&0x00ffffff)|((data&0xff00)<<16); + state->shared_ram[offset/2]=(state->shared_ram[offset/2]&0x00ffffff)|((data&0xff00)<<16); if (ACCESSING_BITS_0_7) - shared_ram[offset/2]=(shared_ram[offset/2]&0xff00ffff)|((data&0x00ff)<<16); + state->shared_ram[offset/2]=(state->shared_ram[offset/2]&0xff00ffff)|((data&0x00ff)<<16); } else { if (ACCESSING_BITS_8_15) - shared_ram[offset/2]=(shared_ram[offset/2]&0xffff00ff)|((data&0xff00)<< 0); + state->shared_ram[offset/2]=(state->shared_ram[offset/2]&0xffff00ff)|((data&0xff00)<< 0); if (ACCESSING_BITS_0_7) - shared_ram[offset/2]=(shared_ram[offset/2]&0xffffff00)|((data&0x00ff)<< 0); + state->shared_ram[offset/2]=(state->shared_ram[offset/2]&0xffffff00)|((data&0x00ff)<< 0); } } @@ -111,13 +109,14 @@ static WRITE32_HANDLER( superchs_palette_w ) static READ32_HANDLER( superchs_input_r ) { + superchs_state *state = space->machine->driver_data(); switch (offset) { case 0x00: return input_port_read(space->machine, "INPUTS"); case 0x01: - return coin_word<<16; + return state->coin_word<<16; } return 0xffffffff; @@ -125,13 +124,13 @@ static READ32_HANDLER( superchs_input_r ) static WRITE32_HANDLER( superchs_input_w ) { + superchs_state *state = space->machine->driver_data(); #if 0 { char t[64]; - static UINT32 mem[2]; - COMBINE_DATA(&mem[offset]); - sprintf(t,"%08x %08x",mem[0],mem[1]); + COMBINE_DATA(&state->mem[offset]); + sprintf(t,"%08x %08x",state->mem[0],state->mem[1]); //popmessage(t); } #endif @@ -167,7 +166,7 @@ static WRITE32_HANDLER( superchs_input_w ) coin_lockout_w(space->machine, 1,~data & 0x02000000); coin_counter_w(space->machine, 0, data & 0x04000000); coin_counter_w(space->machine, 1, data & 0x08000000); - coin_word=(data >> 16) &0xffff; + state->coin_word=(data >> 16) &0xffff; } } } @@ -175,12 +174,13 @@ static WRITE32_HANDLER( superchs_input_w ) static READ32_HANDLER( superchs_stick_r ) { + superchs_state *state = space->machine->driver_data(); int fake = input_port_read(space->machine, "FAKE"); int accel; if (!(fake &0x10)) /* Analogue steer (the real control method) */ { - steer = input_port_read(space->machine, "WHEEL"); + state->steer = input_port_read(space->machine, "WHEEL"); } else /* Digital steer, with smoothing - speed depends on how often stick_r is called */ { @@ -189,10 +189,10 @@ static READ32_HANDLER( superchs_stick_r ) if (fake &0x04) goal = 0xff; /* pressing left */ if (fake &0x08) goal = 0x0; /* pressing right */ - if (steer!=goal) + if (state->steer!=goal) { - delta = goal - steer; - if (steer < goal) + delta = goal - state->steer; + if (state->steer < goal) { if (delta >2) delta = 2; } @@ -200,7 +200,7 @@ static READ32_HANDLER( superchs_stick_r ) { if (delta < (-2)) delta = -2; } - steer += delta; + state->steer += delta; } } @@ -211,7 +211,7 @@ static READ32_HANDLER( superchs_stick_r ) accel = 0xff; /* Todo: Verify brake - and figure out other input */ - return (steer << 24) | (accel << 16) | (input_port_read(space->machine, "SOUND") << 8) | input_port_read(space->machine, "UNKNOWN"); + return (state->steer << 24) | (accel << 16) | (input_port_read(space->machine, "SOUND") << 8) | input_port_read(space->machine, "UNKNOWN"); } static WRITE32_HANDLER( superchs_stick_w ) @@ -229,11 +229,11 @@ static WRITE32_HANDLER( superchs_stick_w ) static ADDRESS_MAP_START( superchs_map, ADDRESS_SPACE_PROGRAM, 32 ) AM_RANGE(0x000000, 0x0fffff) AM_ROM - AM_RANGE(0x100000, 0x11ffff) AM_RAM AM_BASE(&superchs_ram) + AM_RANGE(0x100000, 0x11ffff) AM_RAM AM_BASE_MEMBER(superchs_state, ram) AM_RANGE(0x140000, 0x141fff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram) AM_RANGE(0x180000, 0x18ffff) AM_DEVREADWRITE("tc0480scp", tc0480scp_long_r, tc0480scp_long_w) AM_RANGE(0x1b0000, 0x1b002f) AM_DEVREADWRITE("tc0480scp", tc0480scp_ctrl_long_r, tc0480scp_ctrl_long_w) - AM_RANGE(0x200000, 0x20ffff) AM_RAM AM_BASE(&shared_ram) + AM_RANGE(0x200000, 0x20ffff) AM_RAM AM_BASE_MEMBER(superchs_state, shared_ram) AM_RANGE(0x240000, 0x240003) AM_WRITE(cpua_ctrl_w) AM_RANGE(0x280000, 0x287fff) AM_RAM_WRITE(superchs_palette_w) AM_BASE_GENERIC(paletteram) AM_RANGE(0x2c0000, 0x2c07ff) AM_RAM AM_BASE(&f3_shared_ram) @@ -368,7 +368,7 @@ static const tc0480scp_interface superchs_tc0480scp_intf = 0 /* col_base */ }; -static MACHINE_CONFIG_START( superchs, driver_device ) +static MACHINE_CONFIG_START( superchs, superchs_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", M68EC020, 16000000) /* 16 MHz */ @@ -445,18 +445,20 @@ ROM_END static READ32_HANDLER( main_cycle_r ) { + superchs_state *state = space->machine->driver_data(); if (cpu_get_pc(space->cpu)==0x702) cpu_spinuntil_int(space->cpu); - return superchs_ram[0]; + return state->ram[0]; } static READ16_HANDLER( sub_cycle_r ) { + superchs_state *state = space->machine->driver_data(); if (cpu_get_pc(space->cpu)==0x454) cpu_spinuntil_int(space->cpu); - return superchs_ram[2]&0xffff; + return state->ram[2]&0xffff; } static DRIVER_INIT( superchs ) diff --git a/src/mame/drivers/superqix.c b/src/mame/drivers/superqix.c index c6ef2ee89fc..9e6d4bca2f1 100644 --- a/src/mame/drivers/superqix.c +++ b/src/mame/drivers/superqix.c @@ -113,33 +113,33 @@ DSW2 stored @ $f237 #include "sound/samples.h" #include "includes/superqix.h" -/* pbillian sample playback */ -static INT16 *samplebuf; static SAMPLES_START( pbillian_sh_start ) { + superqix_state *state = device->machine->driver_data(); running_machine *machine = device->machine; UINT8 *src = machine->region("samples")->base(); int i, len = machine->region("samples")->bytes(); /* convert 8-bit unsigned samples to 8-bit signed */ - samplebuf = auto_alloc_array(machine, INT16, len); + state->samplebuf = auto_alloc_array(machine, INT16, len); for (i = 0;i < len;i++) - samplebuf[i] = (INT8)(src[i] ^ 0x80) * 256; + state->samplebuf[i] = (INT8)(src[i] ^ 0x80) * 256; } static WRITE8_HANDLER( pbillian_sample_trigger_w ) { + superqix_state *state = space->machine->driver_data(); device_t *samples = space->machine->device("samples"); int start,end; start = data << 7; /* look for end of sample marker */ end = start; - while (end < 0x8000 && samplebuf[end] != (0xff^0x80)) + while (end < 0x8000 && state->samplebuf[end] != (0xff^0x80)) end++; - sample_start_raw(samples, 0, samplebuf + start, end - start, 5000, 0); // 5khz ? + sample_start_raw(samples, 0, state->samplebuf + start, end - start, 5000, 0); // 5khz ? } @@ -174,26 +174,27 @@ The MCU acts this way: **************************************************************************/ -static UINT8 port1, port2, port3, port3_latch, from_mcu, from_z80, portb; -static int from_mcu_pending, from_z80_pending, invert_coin_lockout; static READ8_DEVICE_HANDLER( in4_mcu_r ) { + superqix_state *state = device->machine->driver_data(); // logerror("%04x: in4_mcu_r\n",cpu_get_pc(space->cpu)); - return input_port_read(device->machine, "P2") | (from_mcu_pending << 6) | (from_z80_pending << 7); + return input_port_read(device->machine, "P2") | (state->from_mcu_pending << 6) | (state->from_z80_pending << 7); } static READ8_DEVICE_HANDLER( sqix_from_mcu_r ) { -// logerror("%04x: read mcu answer (%02x)\n",cpu_get_pc(space->cpu),from_mcu); - return from_mcu; + superqix_state *state = device->machine->driver_data(); +// logerror("%04x: read mcu answer (%02x)\n",cpu_get_pc(space->cpu),state->from_mcu); + return state->from_mcu; } static TIMER_CALLBACK( mcu_acknowledge_callback ) { - from_z80_pending = 1; - from_z80 = portb; -// logerror("Z80->MCU %02x\n",from_z80); + superqix_state *state = machine->driver_data(); + state->from_z80_pending = 1; + state->from_z80 = state->portb; +// logerror("Z80->MCU %02x\n",state->from_z80); } static READ8_HANDLER( mcu_acknowledge_r ) @@ -204,12 +205,14 @@ static READ8_HANDLER( mcu_acknowledge_r ) static WRITE8_DEVICE_HANDLER( sqix_z80_mcu_w ) { + superqix_state *state = device->machine->driver_data(); // logerror("%04x: sqix_z80_mcu_w %02x\n",cpu_get_pc(space->cpu),data); - portb = data; + state->portb = data; } static WRITE8_HANDLER( bootleg_mcu_p1_w ) { + superqix_state *state = space->machine->driver_data(); switch ((data & 0x0e) >> 1) { case 0: @@ -222,28 +225,28 @@ static WRITE8_HANDLER( bootleg_mcu_p1_w ) coin_counter_w(space->machine, 1,data & 1); break; case 3: - coin_lockout_global_w(space->machine, (data & 1) ^ invert_coin_lockout); + coin_lockout_global_w(space->machine, (data & 1) ^ state->invert_coin_lockout); break; case 4: flip_screen_set(space->machine, data & 1); break; case 5: - port1 = data; - if ((port1 & 0x80) == 0) + state->port1 = data; + if ((state->port1 & 0x80) == 0) { - port3_latch = port3; + state->port3_latch = state->port3; } break; case 6: - from_mcu_pending = 0; // ???? + state->from_mcu_pending = 0; // ???? break; case 7: if ((data & 1) == 0) { -// logerror("%04x: MCU -> Z80 %02x\n",cpu_get_pc(space->cpu),port3); - from_mcu = port3_latch; - from_mcu_pending = 1; - from_z80_pending = 0; // ???? +// logerror("%04x: MCU -> Z80 %02x\n",cpu_get_pc(space->cpu),state->port3); + state->from_mcu = state->port3_latch; + state->from_mcu_pending = 1; + state->from_z80_pending = 0; // ???? } break; } @@ -251,35 +254,39 @@ static WRITE8_HANDLER( bootleg_mcu_p1_w ) static WRITE8_HANDLER( mcu_p3_w ) { - port3 = data; + superqix_state *state = space->machine->driver_data(); + state->port3 = data; } static READ8_HANDLER( bootleg_mcu_p3_r ) { - if ((port1 & 0x10) == 0) + superqix_state *state = space->machine->driver_data(); + if ((state->port1 & 0x10) == 0) { return input_port_read(space->machine, "DSW1"); } - else if ((port1 & 0x20) == 0) + else if ((state->port1 & 0x20) == 0) { - return input_port_read(space->machine, "SYSTEM") | (from_mcu_pending << 6) | (from_z80_pending << 7); + return input_port_read(space->machine, "SYSTEM") | (state->from_mcu_pending << 6) | (state->from_z80_pending << 7); } - else if ((port1 & 0x40) == 0) + else if ((state->port1 & 0x40) == 0) { -// logerror("%04x: read Z80 command %02x\n",cpu_get_pc(space->cpu),from_z80); - from_z80_pending = 0; - return from_z80; +// logerror("%04x: read Z80 command %02x\n",cpu_get_pc(space->cpu),state->from_z80); + state->from_z80_pending = 0; + return state->from_z80; } return 0; } static READ8_HANDLER( sqixu_mcu_p0_r ) { - return input_port_read(space->machine, "SYSTEM") | (from_mcu_pending << 6) | (from_z80_pending << 7); + superqix_state *state = space->machine->driver_data(); + return input_port_read(space->machine, "SYSTEM") | (state->from_mcu_pending << 6) | (state->from_z80_pending << 7); } static WRITE8_HANDLER( sqixu_mcu_p2_w ) { + superqix_state *state = space->machine->driver_data(); // bit 0 = unknown (clocked often) // bit 1 = coin cointer 1 @@ -298,25 +305,26 @@ static WRITE8_HANDLER( sqixu_mcu_p2_w ) // bit 6 = unknown if ((data & 0x40) == 0) - from_mcu_pending = 0; // ???? + state->from_mcu_pending = 0; // ???? // bit 7 = clock latch from port 3 to Z80 - if ((port2 & 0x80) != 0 && (data & 0x80) == 0) + if ((state->port2 & 0x80) != 0 && (data & 0x80) == 0) { -// logerror("%04x: MCU -> Z80 %02x\n",cpu_get_pc(space->cpu),port3); - from_mcu = port3; - from_mcu_pending = 1; - from_z80_pending = 0; // ???? +// logerror("%04x: MCU -> Z80 %02x\n",cpu_get_pc(space->cpu),state->port3); + state->from_mcu = state->port3; + state->from_mcu_pending = 1; + state->from_z80_pending = 0; // ???? } - port2 = data; + state->port2 = data; } static READ8_HANDLER( sqixu_mcu_p3_r ) { -// logerror("%04x: read Z80 command %02x\n",cpu_get_pc(space->cpu),from_z80); - from_z80_pending = 0; - return from_z80; + superqix_state *state = space->machine->driver_data(); +// logerror("%04x: read Z80 command %02x\n",cpu_get_pc(space->cpu),state->from_z80); + state->from_z80_pending = 0; + return state->from_z80; } @@ -351,40 +359,41 @@ static WRITE8_HANDLER( bootleg_flipscreen_w ) static int read_dial(running_machine *machine, int player) { + superqix_state *state = machine->driver_data(); int newpos; - static int oldpos[2]; - static int sign[2]; /* get the new position and adjust the result */ newpos = input_port_read(machine, player ? "DIAL2" : "DIAL1"); - if (newpos != oldpos[player]) + if (newpos != state->oldpos[player]) { - sign[player] = ((newpos - oldpos[player]) & 0x80) >> 7; - oldpos[player] = newpos; + state->sign[player] = ((newpos - state->oldpos[player]) & 0x80) >> 7; + state->oldpos[player] = newpos; } if (player == 0) - return ((oldpos[player] & 1) << 2) | (sign[player] << 3); + return ((state->oldpos[player] & 1) << 2) | (state->sign[player] << 3); else // player == 1 - return ((oldpos[player] & 1) << 3) | (sign[player] << 2); + return ((state->oldpos[player] & 1) << 3) | (state->sign[player] << 2); } static TIMER_CALLBACK( delayed_z80_mcu_w ) { + superqix_state *state = machine->driver_data(); logerror("Z80 sends command %02x\n",param); - from_z80 = param; - from_mcu_pending = 0; + state->from_z80 = param; + state->from_mcu_pending = 0; cputag_set_input_line(machine, "mcu", 0, HOLD_LINE); cpuexec_boost_interleave(machine, attotime::zero, attotime::from_usec(200)); } static TIMER_CALLBACK( delayed_mcu_z80_w ) { + superqix_state *state = machine->driver_data(); logerror("68705 sends answer %02x\n",param); - from_mcu = param; - from_mcu_pending = 1; + state->from_mcu = param; + state->from_mcu_pending = 1; } @@ -405,61 +414,64 @@ logerror("68705 sends answer %02x\n",param); * 4-7 W not used */ -static UINT8 portA_in, portB_out, portC; static READ8_HANDLER( hotsmash_68705_portA_r ) { -//logerror("%04x: 68705 reads port A = %02x\n",cpu_get_pc(space->cpu),portA_in); - return portA_in; + superqix_state *state = space->machine->driver_data(); +//logerror("%04x: 68705 reads port A = %02x\n",cpu_get_pc(space->cpu),state->portA_in); + return state->portA_in; } static WRITE8_HANDLER( hotsmash_68705_portB_w ) { - portB_out = data; + superqix_state *state = space->machine->driver_data(); + state->portB_out = data; } static READ8_HANDLER( hotsmash_68705_portC_r ) { - return portC; + superqix_state *state = space->machine->driver_data(); + return state->portC; } static WRITE8_HANDLER( hotsmash_68705_portC_w ) { - portC = data; + superqix_state *state = space->machine->driver_data(); + state->portC = data; if ((data & 0x08) == 0) { switch (data & 0x07) { case 0x0: // dsw A - portA_in = input_port_read(space->machine, "DSW1"); + state->portA_in = input_port_read(space->machine, "DSW1"); break; case 0x1: // dsw B - portA_in = input_port_read(space->machine, "DSW2"); + state->portA_in = input_port_read(space->machine, "DSW2"); break; case 0x2: break; case 0x3: // command from Z80 - portA_in = from_z80; -logerror("%04x: z80 reads command %02x\n",cpu_get_pc(space->cpu),from_z80); + state->portA_in = state->from_z80; +logerror("%04x: z80 reads command %02x\n",cpu_get_pc(space->cpu),state->from_z80); break; case 0x4: break; case 0x5: // answer to Z80 - timer_call_after_resynch(space->machine, NULL, portB_out, delayed_mcu_z80_w); + timer_call_after_resynch(space->machine, NULL, state->portB_out, delayed_mcu_z80_w); break; case 0x6: - portA_in = read_dial(space->machine, 0); + state->portA_in = read_dial(space->machine, 0); break; case 0x7: - portA_in = read_dial(space->machine, 1); + state->portA_in = read_dial(space->machine, 1); break; } } @@ -472,15 +484,17 @@ static WRITE8_HANDLER( hotsmash_z80_mcu_w ) static READ8_HANDLER(hotsmash_from_mcu_r) { -logerror("%04x: z80 reads answer %02x\n",cpu_get_pc(space->cpu),from_mcu); - from_mcu_pending = 0; - return from_mcu; + superqix_state *state = space->machine->driver_data(); +logerror("%04x: z80 reads answer %02x\n",cpu_get_pc(space->cpu),state->from_mcu); + state->from_mcu_pending = 0; + return state->from_mcu; } static READ8_DEVICE_HANDLER(hotsmash_ay_port_a_r) { -//logerror("%04x: ay_port_a_r and mcu_pending is %d\n",cpu_get_pc(space->cpu),from_mcu_pending); - return input_port_read(device->machine, "SYSTEM") | ((from_mcu_pending^1) << 7); + superqix_state *state = device->machine->driver_data(); +//logerror("%04x: ay_port_a_r and mcu_pending is %d\n",cpu_get_pc(space->cpu),state->from_mcu_pending); + return input_port_read(device->machine, "SYSTEM") | ((state->from_mcu_pending^1) << 7); } /************************************************************************** @@ -491,24 +505,25 @@ pbillian MCU simulation static WRITE8_HANDLER( pbillian_z80_mcu_w ) { - from_z80 = data; + superqix_state *state = space->machine->driver_data(); + state->from_z80 = data; } static READ8_HANDLER(pbillian_from_mcu_r) { - static int curr_player; + superqix_state *state = space->machine->driver_data(); - switch (from_z80) + switch (state->from_z80) { - case 0x01: return input_port_read(space->machine, curr_player ? "PADDLE2" : "PADDLE1"); - case 0x02: return input_port_read(space->machine, curr_player ? "DIAL2" : "DIAL1"); + case 0x01: return input_port_read(space->machine, state->curr_player ? "PADDLE2" : "PADDLE1"); + case 0x02: return input_port_read(space->machine, state->curr_player ? "DIAL2" : "DIAL1"); case 0x04: return input_port_read(space->machine, "DSW1"); case 0x08: return input_port_read(space->machine, "DSW2"); - case 0x80: curr_player = 0; return 0; - case 0x81: curr_player = 1; return 0; + case 0x80: state->curr_player = 0; return 0; + case 0x81: state->curr_player = 1; return 0; } - logerror("408[%x] r at %x\n",from_z80,cpu_get_pc(space->cpu)); + logerror("408[%x] r at %x\n",state->from_z80,cpu_get_pc(space->cpu)); return 0; } @@ -522,21 +537,22 @@ static READ8_DEVICE_HANDLER(pbillian_ay_port_a_r) static void machine_init_common(running_machine *machine) { - state_save_register_global(machine, invert_coin_lockout); - state_save_register_global(machine, from_mcu_pending); - state_save_register_global(machine, from_z80_pending); - state_save_register_global(machine, port1); - state_save_register_global(machine, port2); - state_save_register_global(machine, port3); - state_save_register_global(machine, port3_latch); - state_save_register_global(machine, from_mcu); - state_save_register_global(machine, from_z80); - state_save_register_global(machine, portb); + superqix_state *state = machine->driver_data(); + state_save_register_global(machine, state->invert_coin_lockout); + state_save_register_global(machine, state->from_mcu_pending); + state_save_register_global(machine, state->from_z80_pending); + state_save_register_global(machine, state->port1); + state_save_register_global(machine, state->port2); + state_save_register_global(machine, state->port3); + state_save_register_global(machine, state->port3_latch); + state_save_register_global(machine, state->from_mcu); + state_save_register_global(machine, state->from_z80); + state_save_register_global(machine, state->portb); // hotsmash ??? - state_save_register_global(machine, portA_in); - state_save_register_global(machine, portB_out); - state_save_register_global(machine, portC); + state_save_register_global(machine, state->portA_in); + state_save_register_global(machine, state->portB_out); + state_save_register_global(machine, state->portC); } static MACHINE_START( superqix ) @@ -561,7 +577,7 @@ static ADDRESS_MAP_START( main_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank1") AM_RANGE(0xe000, 0xe0ff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram) AM_RANGE(0xe100, 0xe7ff) AM_RAM - AM_RANGE(0xe800, 0xefff) AM_RAM_WRITE(superqix_videoram_w) AM_BASE(&superqix_videoram) + AM_RANGE(0xe800, 0xefff) AM_RAM_WRITE(superqix_videoram_w) AM_BASE_MEMBER(superqix_state, videoram) AM_RANGE(0xf000, 0xffff) AM_RAM ADDRESS_MAP_END @@ -600,8 +616,8 @@ static ADDRESS_MAP_START( sqix_port_map, ADDRESS_SPACE_IO, 8 ) AM_RANGE(0x0408, 0x0408) AM_READ(mcu_acknowledge_r) AM_RANGE(0x0410, 0x0410) AM_WRITE(superqix_0410_w) /* ROM bank, NMI enable, tile bank */ AM_RANGE(0x0418, 0x0418) AM_READ(nmi_ack_r) - AM_RANGE(0x0800, 0x77ff) AM_RAM_WRITE(superqix_bitmapram_w) AM_BASE(&superqix_bitmapram) - AM_RANGE(0x8800, 0xf7ff) AM_RAM_WRITE(superqix_bitmapram2_w) AM_BASE(&superqix_bitmapram2) + AM_RANGE(0x0800, 0x77ff) AM_RAM_WRITE(superqix_bitmapram_w) AM_BASE_MEMBER(superqix_state, bitmapram) + AM_RANGE(0x8800, 0xf7ff) AM_RAM_WRITE(superqix_bitmapram2_w) AM_BASE_MEMBER(superqix_state, bitmapram2) ADDRESS_MAP_END static ADDRESS_MAP_START( bootleg_port_map, ADDRESS_SPACE_IO, 8 ) @@ -613,8 +629,8 @@ static ADDRESS_MAP_START( bootleg_port_map, ADDRESS_SPACE_IO, 8 ) AM_RANGE(0x0408, 0x0408) AM_WRITE(bootleg_flipscreen_w) AM_RANGE(0x0410, 0x0410) AM_WRITE(superqix_0410_w) /* ROM bank, NMI enable, tile bank */ AM_RANGE(0x0418, 0x0418) AM_READ_PORT("SYSTEM") - AM_RANGE(0x0800, 0x77ff) AM_RAM_WRITE(superqix_bitmapram_w) AM_BASE(&superqix_bitmapram) - AM_RANGE(0x8800, 0xf7ff) AM_RAM_WRITE(superqix_bitmapram2_w) AM_BASE(&superqix_bitmapram2) + AM_RANGE(0x0800, 0x77ff) AM_RAM_WRITE(superqix_bitmapram_w) AM_BASE_MEMBER(superqix_state, bitmapram) + AM_RANGE(0x8800, 0xf7ff) AM_RAM_WRITE(superqix_bitmapram2_w) AM_BASE_MEMBER(superqix_state, bitmapram2) ADDRESS_MAP_END @@ -1011,7 +1027,7 @@ static INTERRUPT_GEN( bootleg_interrupt ) -static MACHINE_CONFIG_START( pbillian, driver_device ) +static MACHINE_CONFIG_START( pbillian, superqix_state ) MCFG_CPU_ADD("maincpu", Z80,12000000/2) /* 6 MHz */ MCFG_CPU_PROGRAM_MAP(main_map) MCFG_CPU_IO_MAP(pbillian_port_map) @@ -1044,7 +1060,7 @@ static MACHINE_CONFIG_START( pbillian, driver_device ) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) MACHINE_CONFIG_END -static MACHINE_CONFIG_START( hotsmash, driver_device ) +static MACHINE_CONFIG_START( hotsmash, superqix_state ) MCFG_CPU_ADD("maincpu", Z80,12000000/2) /* 6 MHz */ MCFG_CPU_PROGRAM_MAP(main_map) MCFG_CPU_IO_MAP(hotsmash_port_map) @@ -1080,7 +1096,7 @@ static MACHINE_CONFIG_START( hotsmash, driver_device ) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) MACHINE_CONFIG_END -static MACHINE_CONFIG_START( sqix, driver_device ) +static MACHINE_CONFIG_START( sqix, superqix_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", Z80, 12000000/2) /* 6 MHz */ @@ -1129,7 +1145,7 @@ static MACHINE_CONFIG_DERIVED( sqixu, sqix ) MACHINE_CONFIG_END -static MACHINE_CONFIG_START( sqixbl, driver_device ) +static MACHINE_CONFIG_START( sqixbl, superqix_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", Z80, 12000000/2) /* 6 MHz */ @@ -1333,22 +1349,26 @@ ROM_END static DRIVER_INIT( pbillian ) { - pbillian_show_power = 1; + superqix_state *state = machine->driver_data(); + state->pbillian_show_power = 1; } static DRIVER_INIT( hotsmash ) { - pbillian_show_power = 0; + superqix_state *state = machine->driver_data(); + state->pbillian_show_power = 0; } static DRIVER_INIT( sqix ) { - invert_coin_lockout = 1; + superqix_state *state = machine->driver_data(); + state->invert_coin_lockout = 1; } static DRIVER_INIT( sqixa ) { - invert_coin_lockout = 0; + superqix_state *state = machine->driver_data(); + state->invert_coin_lockout = 0; } static DRIVER_INIT( perestro ) diff --git a/src/mame/drivers/taitojc.c b/src/mame/drivers/taitojc.c index b6aa55fd7f1..2bff6de36da 100644 --- a/src/mame/drivers/taitojc.c +++ b/src/mame/drivers/taitojc.c @@ -592,10 +592,10 @@ static READ32_HANDLER(dsp_shared_r) #define DEBUG_BLOCK_MOVES 0 #if DEBUG_DSP -static UINT16 debug_dsp_ram[0x8000]; static void debug_dsp_command(void) { + taitojc_state *state = machine->driver_data(); UINT16 *cmd = &dsp_shared_ram[0x7f0]; switch (cmd[0]) @@ -638,7 +638,7 @@ static void debug_dsp_command(void) UINT16 d = dsp_shared_ram[saddr++]; if (daddr >= 0x8000 && daddr < 0x10000) { - debug_dsp_ram[daddr-0x8000] = d; + state->debug_dsp_ram[daddr-0x8000] = d; } daddr++; @@ -678,7 +678,7 @@ static void debug_dsp_command(void) while (!end) { int i; - UINT16 cmd = debug_dsp_ram[addr++]; + UINT16 cmd = state->debug_dsp_ram[addr++]; int length = cmd & 0xff; if ((cmd >> 11) == 6) @@ -687,7 +687,7 @@ static void debug_dsp_command(void) printf(" %04X (%02X): ", cmd, cmd >> 11); for (i=0; i < length; i++) { - printf("%04X ", debug_dsp_ram[addr+i]); + printf("%04X ", state->debug_dsp_ram[addr+i]); } printf("\n"); diff --git a/src/mame/drivers/taitosj.c b/src/mame/drivers/taitosj.c index 49910477eea..3add8905d95 100644 --- a/src/mame/drivers/taitosj.c +++ b/src/mame/drivers/taitosj.c @@ -171,29 +171,30 @@ TODO: #include "includes/taitosj.h" -static UINT8 sndnmi_disable; - static WRITE8_DEVICE_HANDLER( taitosj_sndnmi_msk_w ) { - sndnmi_disable = data & 0x01; + taitosj_state *state = device->machine->driver_data(); + state->sndnmi_disable = data & 0x01; } static WRITE8_HANDLER( taitosj_soundcommand_w ) { + taitosj_state *state = space->machine->driver_data(); soundlatch_w(space,offset,data); - if (!sndnmi_disable) cputag_set_input_line(space->machine, "audiocpu", INPUT_LINE_NMI, PULSE_LINE); + if (!state->sndnmi_disable) cputag_set_input_line(space->machine, "audiocpu", INPUT_LINE_NMI, PULSE_LINE); } -static UINT8 input_port_4_f0; static WRITE8_DEVICE_HANDLER( input_port_4_f0_w ) { - input_port_4_f0 = data >> 4; + taitosj_state *state = device->machine->driver_data(); + state->input_port_4_f0 = data >> 4; } static CUSTOM_INPUT( input_port_4_f0_r ) { - return input_port_4_f0; + taitosj_state *state = field->port->machine->driver_data(); + return state->input_port_4_f0; } @@ -203,16 +204,16 @@ static ADDRESS_MAP_START( taitosj_main_nomcu_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0x8000, 0x87ff) AM_RAM AM_RANGE(0x8800, 0x8800) AM_MIRROR(0x07fe) AM_READWRITE(taitosj_fake_data_r, taitosj_fake_data_w) AM_RANGE(0x8801, 0x8801) AM_MIRROR(0x07fe) AM_READ(taitosj_fake_status_r) - AM_RANGE(0x9000, 0xbfff) AM_WRITE(taitosj_characterram_w) AM_BASE(&taitosj_characterram) + AM_RANGE(0x9000, 0xbfff) AM_WRITE(taitosj_characterram_w) AM_BASE_MEMBER(taitosj_state, characterram) AM_RANGE(0xc000, 0xc3ff) AM_RAM - AM_RANGE(0xc400, 0xc7ff) AM_RAM AM_BASE(&taitosj_videoram_1) - AM_RANGE(0xc800, 0xcbff) AM_RAM AM_BASE(&taitosj_videoram_2) - AM_RANGE(0xcc00, 0xcfff) AM_RAM AM_BASE(&taitosj_videoram_3) - AM_RANGE(0xd000, 0xd05f) AM_RAM AM_BASE(&taitosj_colscrolly) - AM_RANGE(0xd100, 0xd1ff) AM_RAM AM_BASE(&taitosj_spriteram) - AM_RANGE(0xd200, 0xd27f) AM_MIRROR(0x0080) AM_RAM AM_BASE(&taitosj_paletteram) - AM_RANGE(0xd300, 0xd300) AM_MIRROR(0x00ff) AM_WRITEONLY AM_BASE(&taitosj_video_priority) - AM_RANGE(0xd400, 0xd403) AM_MIRROR(0x00f0) AM_READONLY AM_BASE(&taitosj_collision_reg) + AM_RANGE(0xc400, 0xc7ff) AM_RAM AM_BASE_MEMBER(taitosj_state, videoram_1) + AM_RANGE(0xc800, 0xcbff) AM_RAM AM_BASE_MEMBER(taitosj_state, videoram_2) + AM_RANGE(0xcc00, 0xcfff) AM_RAM AM_BASE_MEMBER(taitosj_state, videoram_3) + AM_RANGE(0xd000, 0xd05f) AM_RAM AM_BASE_MEMBER(taitosj_state, colscrolly) + AM_RANGE(0xd100, 0xd1ff) AM_RAM AM_BASE_MEMBER(taitosj_state, spriteram) + AM_RANGE(0xd200, 0xd27f) AM_MIRROR(0x0080) AM_RAM AM_BASE_MEMBER(taitosj_state, paletteram) + AM_RANGE(0xd300, 0xd300) AM_MIRROR(0x00ff) AM_WRITEONLY AM_BASE_MEMBER(taitosj_state, video_priority) + AM_RANGE(0xd400, 0xd403) AM_MIRROR(0x00f0) AM_READONLY AM_BASE_MEMBER(taitosj_state, collision_reg) AM_RANGE(0xd404, 0xd404) AM_MIRROR(0x00f3) AM_READ(taitosj_gfxrom_r) AM_RANGE(0xd408, 0xd408) AM_MIRROR(0x00f0) AM_READ_PORT("IN0") AM_RANGE(0xd409, 0xd409) AM_MIRROR(0x00f0) AM_READ_PORT("IN1") @@ -222,15 +223,15 @@ static ADDRESS_MAP_START( taitosj_main_nomcu_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0xd40d, 0xd40d) AM_MIRROR(0x00f0) AM_READ_PORT("IN4") AM_RANGE(0xd40e, 0xd40f) AM_MIRROR(0x00f0) AM_DEVWRITE("ay1", ay8910_address_data_w) AM_RANGE(0xd40f, 0xd40f) AM_MIRROR(0x00f0) AM_DEVREAD("ay1", ay8910_r) /* DSW2 and DSW3 */ - AM_RANGE(0xd500, 0xd505) AM_MIRROR(0x00f0) AM_WRITEONLY AM_BASE(&taitosj_scroll) - AM_RANGE(0xd506, 0xd507) AM_MIRROR(0x00f0) AM_WRITEONLY AM_BASE(&taitosj_colorbank) + AM_RANGE(0xd500, 0xd505) AM_MIRROR(0x00f0) AM_WRITEONLY AM_BASE_MEMBER(taitosj_state, scroll) + AM_RANGE(0xd506, 0xd507) AM_MIRROR(0x00f0) AM_WRITEONLY AM_BASE_MEMBER(taitosj_state, colorbank) AM_RANGE(0xd508, 0xd508) AM_MIRROR(0x00f0) AM_WRITE(taitosj_collision_reg_clear_w) - AM_RANGE(0xd509, 0xd50a) AM_MIRROR(0x00f0) AM_WRITEONLY AM_BASE(&taitosj_gfxpointer) + AM_RANGE(0xd509, 0xd50a) AM_MIRROR(0x00f0) AM_WRITEONLY AM_BASE_MEMBER(taitosj_state, gfxpointer) AM_RANGE(0xd50b, 0xd50b) AM_MIRROR(0x00f0) AM_WRITE(taitosj_soundcommand_w) AM_RANGE(0xd50d, 0xd50d) AM_MIRROR(0x00f0) AM_WRITEONLY /*watchdog_reset_w*/ /* Bio Attack sometimes resets after you die */ AM_RANGE(0xd50e, 0xd50e) AM_MIRROR(0x00f0) AM_WRITE(taitosj_bankswitch_w) AM_RANGE(0xd50f, 0xd50f) AM_MIRROR(0x00f0) AM_WRITENOP - AM_RANGE(0xd600, 0xd600) AM_MIRROR(0x00ff) AM_WRITEONLY AM_BASE(&taitosj_video_mode) + AM_RANGE(0xd600, 0xd600) AM_MIRROR(0x00ff) AM_WRITEONLY AM_BASE_MEMBER(taitosj_state, video_mode) AM_RANGE(0xd700, 0xdfff) AM_NOP AM_RANGE(0xe000, 0xffff) AM_ROM ADDRESS_MAP_END @@ -243,16 +244,16 @@ static ADDRESS_MAP_START( taitosj_main_mcu_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0x8000, 0x87ff) AM_RAM AM_RANGE(0x8800, 0x8800) AM_MIRROR(0x07fe) AM_READWRITE(taitosj_mcu_data_r, taitosj_mcu_data_w) AM_RANGE(0x8801, 0x8801) AM_MIRROR(0x07fe) AM_READ(taitosj_mcu_status_r) - AM_RANGE(0x9000, 0xbfff) AM_WRITE(taitosj_characterram_w) AM_BASE(&taitosj_characterram) + AM_RANGE(0x9000, 0xbfff) AM_WRITE(taitosj_characterram_w) AM_BASE_MEMBER(taitosj_state, characterram) AM_RANGE(0xc000, 0xc3ff) AM_RAM - AM_RANGE(0xc400, 0xc7ff) AM_RAM AM_BASE(&taitosj_videoram_1) - AM_RANGE(0xc800, 0xcbff) AM_RAM AM_BASE(&taitosj_videoram_2) - AM_RANGE(0xcc00, 0xcfff) AM_RAM AM_BASE(&taitosj_videoram_3) - AM_RANGE(0xd000, 0xd05f) AM_RAM AM_BASE(&taitosj_colscrolly) - AM_RANGE(0xd100, 0xd1ff) AM_RAM AM_BASE(&taitosj_spriteram) - AM_RANGE(0xd200, 0xd27f) AM_MIRROR(0x0080) AM_RAM AM_BASE(&taitosj_paletteram) - AM_RANGE(0xd300, 0xd300) AM_MIRROR(0x00ff) AM_WRITEONLY AM_BASE(&taitosj_video_priority) - AM_RANGE(0xd400, 0xd403) AM_MIRROR(0x00f0) AM_READONLY AM_BASE(&taitosj_collision_reg) + AM_RANGE(0xc400, 0xc7ff) AM_RAM AM_BASE_MEMBER(taitosj_state, videoram_1) + AM_RANGE(0xc800, 0xcbff) AM_RAM AM_BASE_MEMBER(taitosj_state, videoram_2) + AM_RANGE(0xcc00, 0xcfff) AM_RAM AM_BASE_MEMBER(taitosj_state, videoram_3) + AM_RANGE(0xd000, 0xd05f) AM_RAM AM_BASE_MEMBER(taitosj_state, colscrolly) + AM_RANGE(0xd100, 0xd1ff) AM_RAM AM_BASE_MEMBER(taitosj_state, spriteram) + AM_RANGE(0xd200, 0xd27f) AM_MIRROR(0x0080) AM_RAM AM_BASE_MEMBER(taitosj_state, paletteram) + AM_RANGE(0xd300, 0xd300) AM_MIRROR(0x00ff) AM_WRITEONLY AM_BASE_MEMBER(taitosj_state, video_priority) + AM_RANGE(0xd400, 0xd403) AM_MIRROR(0x00f0) AM_READONLY AM_BASE_MEMBER(taitosj_state, collision_reg) AM_RANGE(0xd404, 0xd404) AM_MIRROR(0x00f3) AM_READ(taitosj_gfxrom_r) AM_RANGE(0xd408, 0xd408) AM_MIRROR(0x00f0) AM_READ_PORT("IN0") AM_RANGE(0xd409, 0xd409) AM_MIRROR(0x00f0) AM_READ_PORT("IN1") @@ -262,15 +263,15 @@ static ADDRESS_MAP_START( taitosj_main_mcu_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0xd40d, 0xd40d) AM_MIRROR(0x00f0) AM_READ_PORT("IN4") AM_RANGE(0xd40e, 0xd40f) AM_MIRROR(0x00f0) AM_DEVWRITE("ay1", ay8910_address_data_w) AM_RANGE(0xd40f, 0xd40f) AM_MIRROR(0x00f0) AM_DEVREAD("ay1", ay8910_r) /* DSW2 and DSW3 */ - AM_RANGE(0xd500, 0xd505) AM_MIRROR(0x00f0) AM_WRITEONLY AM_BASE(&taitosj_scroll) - AM_RANGE(0xd506, 0xd507) AM_MIRROR(0x00f0) AM_WRITEONLY AM_BASE(&taitosj_colorbank) + AM_RANGE(0xd500, 0xd505) AM_MIRROR(0x00f0) AM_WRITEONLY AM_BASE_MEMBER(taitosj_state, scroll) + AM_RANGE(0xd506, 0xd507) AM_MIRROR(0x00f0) AM_WRITEONLY AM_BASE_MEMBER(taitosj_state, colorbank) AM_RANGE(0xd508, 0xd508) AM_MIRROR(0x00f0) AM_WRITE(taitosj_collision_reg_clear_w) - AM_RANGE(0xd509, 0xd50a) AM_MIRROR(0x00f0) AM_WRITEONLY AM_BASE(&taitosj_gfxpointer) + AM_RANGE(0xd509, 0xd50a) AM_MIRROR(0x00f0) AM_WRITEONLY AM_BASE_MEMBER(taitosj_state, gfxpointer) AM_RANGE(0xd50b, 0xd50b) AM_MIRROR(0x00f0) AM_WRITE(taitosj_soundcommand_w) AM_RANGE(0xd50d, 0xd50d) AM_MIRROR(0x00f0) AM_WRITEONLY /*watchdog_reset_w*/ /* Bio Attack sometimes resets after you die */ AM_RANGE(0xd50e, 0xd50e) AM_MIRROR(0x00f0) AM_WRITE(taitosj_bankswitch_w) AM_RANGE(0xd50f, 0xd50f) AM_MIRROR(0x00f0) AM_WRITENOP - AM_RANGE(0xd600, 0xd600) AM_MIRROR(0x00ff) AM_WRITEONLY AM_BASE(&taitosj_video_mode) + AM_RANGE(0xd600, 0xd600) AM_MIRROR(0x00ff) AM_WRITEONLY AM_BASE_MEMBER(taitosj_state, video_mode) AM_RANGE(0xd700, 0xdfff) AM_NOP AM_RANGE(0xe000, 0xffff) AM_ROM ADDRESS_MAP_END @@ -278,10 +279,10 @@ ADDRESS_MAP_END /* seems the most logical way to do the gears */ -static UINT8 kikstart_gears[2]; static CUSTOM_INPUT( kikstart_gear_r ) { + taitosj_state *state = field->port->machine->driver_data(); const char *port_tag; int player = (int)(FPTR)param; @@ -292,11 +293,11 @@ static CUSTOM_INPUT( kikstart_gear_r ) port_tag = "GEARP2"; /* gear MUST be 1, 2 or 3 */ - if (input_port_read(field->port->machine, port_tag) & 0x01) kikstart_gears[player] = 0x02; - if (input_port_read(field->port->machine, port_tag) & 0x02) kikstart_gears[player] = 0x03; - if (input_port_read(field->port->machine, port_tag) & 0x04) kikstart_gears[player] = 0x01; + if (input_port_read(field->port->machine, port_tag) & 0x01) state->kikstart_gears[player] = 0x02; + if (input_port_read(field->port->machine, port_tag) & 0x02) state->kikstart_gears[player] = 0x03; + if (input_port_read(field->port->machine, port_tag) & 0x04) state->kikstart_gears[player] = 0x01; - return kikstart_gears[player]; + return state->kikstart_gears[player]; } @@ -307,18 +308,18 @@ static ADDRESS_MAP_START( kikstart_main_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0x8800, 0x8800) AM_READWRITE(taitosj_mcu_data_r, taitosj_mcu_data_w) AM_RANGE(0x8801, 0x8801) AM_READ(taitosj_mcu_status_r) AM_RANGE(0x8802, 0x8802) AM_NOP - AM_RANGE(0x8a00, 0x8a5f) AM_WRITEONLY AM_BASE(&taitosj_colscrolly) - AM_RANGE(0x9000, 0xbfff) AM_WRITE(taitosj_characterram_w) AM_BASE(&taitosj_characterram) + AM_RANGE(0x8a00, 0x8a5f) AM_WRITEONLY AM_BASE_MEMBER(taitosj_state, colscrolly) + AM_RANGE(0x9000, 0xbfff) AM_WRITE(taitosj_characterram_w) AM_BASE_MEMBER(taitosj_state, characterram) AM_RANGE(0xc000, 0xc3ff) AM_RAM - AM_RANGE(0xc400, 0xc7ff) AM_RAM AM_BASE(&taitosj_videoram_1) - AM_RANGE(0xc800, 0xcbff) AM_RAM AM_BASE(&taitosj_videoram_2) - AM_RANGE(0xcc00, 0xcfff) AM_RAM AM_BASE(&taitosj_videoram_3) - AM_RANGE(0xd000, 0xd001) AM_WRITEONLY AM_BASE(&taitosj_colorbank) - AM_RANGE(0xd002, 0xd007) AM_WRITEONLY AM_BASE(&taitosj_scroll) - AM_RANGE(0xd100, 0xd1ff) AM_RAM AM_BASE(&taitosj_spriteram) - AM_RANGE(0xd200, 0xd27f) AM_RAM AM_BASE(&taitosj_paletteram) - AM_RANGE(0xd300, 0xd300) AM_WRITEONLY AM_BASE(&taitosj_video_priority) - AM_RANGE(0xd400, 0xd403) AM_READONLY AM_BASE(&taitosj_collision_reg) + AM_RANGE(0xc400, 0xc7ff) AM_RAM AM_BASE_MEMBER(taitosj_state, videoram_1) + AM_RANGE(0xc800, 0xcbff) AM_RAM AM_BASE_MEMBER(taitosj_state, videoram_2) + AM_RANGE(0xcc00, 0xcfff) AM_RAM AM_BASE_MEMBER(taitosj_state, videoram_3) + AM_RANGE(0xd000, 0xd001) AM_WRITEONLY AM_BASE_MEMBER(taitosj_state, colorbank) + AM_RANGE(0xd002, 0xd007) AM_WRITEONLY AM_BASE_MEMBER(taitosj_state, scroll) + AM_RANGE(0xd100, 0xd1ff) AM_RAM AM_BASE_MEMBER(taitosj_state, spriteram) + AM_RANGE(0xd200, 0xd27f) AM_RAM AM_BASE_MEMBER(taitosj_state, paletteram) + AM_RANGE(0xd300, 0xd300) AM_WRITEONLY AM_BASE_MEMBER(taitosj_state, video_priority) + AM_RANGE(0xd400, 0xd403) AM_READONLY AM_BASE_MEMBER(taitosj_state, collision_reg) AM_RANGE(0xd404, 0xd404) AM_READ(taitosj_gfxrom_r) AM_RANGE(0xd408, 0xd408) AM_MIRROR(0x00f0) AM_READ_PORT("IN0") AM_RANGE(0xd409, 0xd409) AM_MIRROR(0x00f0) AM_READ_PORT("IN1") @@ -329,12 +330,12 @@ static ADDRESS_MAP_START( kikstart_main_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0xd40e, 0xd40f) AM_DEVWRITE("ay1", ay8910_address_data_w) AM_RANGE(0xd40f, 0xd40f) AM_DEVREAD("ay1", ay8910_r) /* DSW2 and DSW3 */ AM_RANGE(0xd508, 0xd508) AM_WRITE(taitosj_collision_reg_clear_w) - AM_RANGE(0xd509, 0xd50a) AM_WRITEONLY AM_BASE(&taitosj_gfxpointer) + AM_RANGE(0xd509, 0xd50a) AM_WRITEONLY AM_BASE_MEMBER(taitosj_state, gfxpointer) AM_RANGE(0xd50b, 0xd50b) AM_WRITE(taitosj_soundcommand_w) AM_RANGE(0xd50d, 0xd50d) AM_WRITE(watchdog_reset_w) AM_RANGE(0xd50e, 0xd50e) AM_WRITE(taitosj_bankswitch_w) - AM_RANGE(0xd600, 0xd600) AM_WRITEONLY AM_BASE(&taitosj_video_mode) - AM_RANGE(0xd800, 0xdfff) AM_RAM AM_BASE(&kikstart_scrollram)// scroll ram + ??? + AM_RANGE(0xd600, 0xd600) AM_WRITEONLY AM_BASE_MEMBER(taitosj_state, video_mode) + AM_RANGE(0xd800, 0xdfff) AM_RAM AM_BASE_MEMBER(taitosj_state, kikstart_scrollram)// scroll ram + ??? AM_RANGE(0xe000, 0xefff) AM_ROM ADDRESS_MAP_END @@ -1732,19 +1733,19 @@ static const UINT8 voltable[256] = 0x65,0x65,0x65,0x65,0x64,0x64,0x64,0x64,0x64,0x63,0x63,0x63,0x63,0x62,0x62,0x62, }; -static INT8 dac_out; -static UINT8 dac_vol; static WRITE8_DEVICE_HANDLER( dac_out_w ) { - dac_out = data - 0x80; - dac_signed_data_16_w(device,dac_out * dac_vol + 0x8000); + taitosj_state *state = device->machine->driver_data(); + state->dac_out = data - 0x80; + dac_signed_data_16_w(device,state->dac_out * state->dac_vol + 0x8000); } static WRITE8_DEVICE_HANDLER( dac_vol_w ) { - dac_vol = voltable[data]; - dac_signed_data_16_w(device,dac_out * dac_vol + 0x8000); + taitosj_state *state = device->machine->driver_data(); + state->dac_vol = voltable[data]; + dac_signed_data_16_w(device,state->dac_out * state->dac_vol + 0x8000); } @@ -1790,7 +1791,7 @@ static const ay8910_interface ay8910_interface_4 = -static MACHINE_CONFIG_START( nomcu, driver_device ) +static MACHINE_CONFIG_START( nomcu, taitosj_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu",Z80,8000000/2) /* 4 MHz */ @@ -2708,22 +2709,24 @@ ROM_END static void reset_common(running_machine &machine) { - sndnmi_disable = 1; - input_port_4_f0 = 0; + taitosj_state *state = machine.driver_data(); + state->sndnmi_disable = 1; + state->input_port_4_f0 = 0; /* start in 1st gear */ - kikstart_gears[0] = 0x02; - kikstart_gears[1] = 0x02; - dac_out = 0; - dac_vol = 0; + state->kikstart_gears[0] = 0x02; + state->kikstart_gears[1] = 0x02; + state->dac_out = 0; + state->dac_vol = 0; } static void init_common(running_machine *machine) { - state_save_register_global(machine, sndnmi_disable); - state_save_register_global(machine, input_port_4_f0); - state_save_register_global_array(machine, kikstart_gears); - state_save_register_global(machine, dac_out); - state_save_register_global(machine, dac_vol); + taitosj_state *state = machine->driver_data(); + state_save_register_global(machine, state->sndnmi_disable); + state_save_register_global(machine, state->input_port_4_f0); + state_save_register_global_array(machine, state->kikstart_gears); + state_save_register_global(machine, state->dac_out); + state_save_register_global(machine, state->dac_vol); machine->add_notifier(MACHINE_NOTIFY_RESET, reset_common); } diff --git a/src/mame/drivers/taitowlf.c b/src/mame/drivers/taitowlf.c index 9c49056160f..0f510b07f19 100644 --- a/src/mame/drivers/taitowlf.c +++ b/src/mame/drivers/taitowlf.c @@ -17,10 +17,25 @@ #include "machine/pckeybrd.h" #include "machine/idectrl.h" + +class taitowlf_state : public driver_device +{ +public: + taitowlf_state(running_machine &machine, const driver_device_config_base &config) + : driver_device(machine, config) { } + + UINT32 *cga_ram; + UINT32 *bios_ram; + UINT8 mxtc_config_reg[256]; + UINT8 piix4_config_reg[4][256]; + int dma_channel; + UINT8 dma_offset[2][4]; + UINT8 at_pages[0x10]; +}; + + static void ide_interrupt(device_t *device, int state); -static UINT32 *cga_ram; -static UINT32 *bios_ram; static struct { device_t *pit8254; @@ -71,9 +86,10 @@ static void draw_char(bitmap_t *bitmap, const rectangle *cliprect, const gfx_ele static VIDEO_UPDATE(taitowlf) { + taitowlf_state *state = screen->machine->driver_data(); int i, j; const gfx_element *gfx = screen->machine->gfx[0]; - UINT32 *cga = cga_ram; + UINT32 *cga = state->cga_ram; int index = 0; bitmap_fill(bitmap, cliprect, 0); @@ -118,17 +134,18 @@ static WRITE32_DEVICE_HANDLER(at32_dma8237_2_w) // Intel 82439TX System Controller (MXTC) -static UINT8 mxtc_config_reg[256]; static UINT8 mxtc_config_r(device_t *busdevice, device_t *device, int function, int reg) { + taitowlf_state *state = busdevice->machine->driver_data(); // mame_printf_debug("MXTC: read %d, %02X\n", function, reg); - return mxtc_config_reg[reg]; + return state->mxtc_config_reg[reg]; } static void mxtc_config_w(device_t *busdevice, device_t *device, int function, int reg, UINT8 data) { + taitowlf_state *state = busdevice->machine->driver_data(); // mame_printf_debug("%s:MXTC: write %d, %02X, %02X\n", cpuexec_describe_context(machine), function, reg, data); switch(reg) @@ -137,7 +154,7 @@ static void mxtc_config_w(device_t *busdevice, device_t *device, int function, i { if (data & 0x10) // enable RAM access to region 0xf0000 - 0xfffff { - memory_set_bankptr(busdevice->machine, "bank1", bios_ram); + memory_set_bankptr(busdevice->machine, "bank1", state->bios_ram); } else // disable RAM access (reads go to BIOS ROM) { @@ -147,17 +164,18 @@ static void mxtc_config_w(device_t *busdevice, device_t *device, int function, i } } - mxtc_config_reg[reg] = data; + state->mxtc_config_reg[reg] = data; } -static void intel82439tx_init(void) +static void intel82439tx_init(running_machine *machine) { - mxtc_config_reg[0x60] = 0x02; - mxtc_config_reg[0x61] = 0x02; - mxtc_config_reg[0x62] = 0x02; - mxtc_config_reg[0x63] = 0x02; - mxtc_config_reg[0x64] = 0x02; - mxtc_config_reg[0x65] = 0x02; + taitowlf_state *state = machine->driver_data(); + state->mxtc_config_reg[0x60] = 0x02; + state->mxtc_config_reg[0x61] = 0x02; + state->mxtc_config_reg[0x62] = 0x02; + state->mxtc_config_reg[0x63] = 0x02; + state->mxtc_config_reg[0x64] = 0x02; + state->mxtc_config_reg[0x65] = 0x02; } static UINT32 intel82439tx_pci_r(device_t *busdevice, device_t *device, int function, int reg, UINT32 mem_mask) @@ -203,18 +221,19 @@ static void intel82439tx_pci_w(device_t *busdevice, device_t *device, int functi } // Intel 82371AB PCI-to-ISA / IDE bridge (PIIX4) -static UINT8 piix4_config_reg[4][256]; static UINT8 piix4_config_r(device_t *busdevice, device_t *device, int function, int reg) { + taitowlf_state *state = device->machine->driver_data(); // mame_printf_debug("PIIX4: read %d, %02X\n", function, reg); - return piix4_config_reg[function][reg]; + return state->piix4_config_reg[function][reg]; } static void piix4_config_w(device_t *busdevice, device_t *device, int function, int reg, UINT8 data) { + taitowlf_state *state = busdevice->machine->driver_data(); // mame_printf_debug("%s:PIIX4: write %d, %02X, %02X\n", cpuexec_describe_context(machine), function, reg, data); - piix4_config_reg[function][reg] = data; + state->piix4_config_reg[function][reg] = data; } static UINT32 intel82371ab_pci_r(device_t *busdevice, device_t *device, int function, int reg, UINT32 mem_mask) @@ -303,9 +322,10 @@ static WRITE32_DEVICE_HANDLER( fdc_w ) static WRITE32_HANDLER(bios_ram_w) { - if (mxtc_config_reg[0x59] & 0x20) // write to RAM if this region is write-enabled + taitowlf_state *state = space->machine->driver_data(); + if (state->mxtc_config_reg[0x59] & 0x20) // write to RAM if this region is write-enabled { - COMBINE_DATA(bios_ram + offset); + COMBINE_DATA(state->bios_ram + offset); } } @@ -316,28 +336,26 @@ static WRITE32_HANDLER(bios_ram_w) * *************************************************************************/ -static int dma_channel; -static UINT8 dma_offset[2][4]; -static UINT8 at_pages[0x10]; static READ8_HANDLER(at_page8_r) { - UINT8 data = at_pages[offset % 0x10]; + taitowlf_state *state = space->machine->driver_data(); + UINT8 data = state->at_pages[offset % 0x10]; switch(offset % 8) { case 1: - data = dma_offset[(offset / 8) & 1][2]; + data = state->dma_offset[(offset / 8) & 1][2]; break; case 2: - data = dma_offset[(offset / 8) & 1][3]; + data = state->dma_offset[(offset / 8) & 1][3]; break; case 3: - data = dma_offset[(offset / 8) & 1][1]; + data = state->dma_offset[(offset / 8) & 1][1]; break; case 7: - data = dma_offset[(offset / 8) & 1][0]; + data = state->dma_offset[(offset / 8) & 1][0]; break; } return data; @@ -346,21 +364,22 @@ static READ8_HANDLER(at_page8_r) static WRITE8_HANDLER(at_page8_w) { - at_pages[offset % 0x10] = data; + taitowlf_state *state = space->machine->driver_data(); + state->at_pages[offset % 0x10] = data; switch(offset % 8) { case 1: - dma_offset[(offset / 8) & 1][2] = data; + state->dma_offset[(offset / 8) & 1][2] = data; break; case 2: - dma_offset[(offset / 8) & 1][3] = data; + state->dma_offset[(offset / 8) & 1][3] = data; break; case 3: - dma_offset[(offset / 8) & 1][1] = data; + state->dma_offset[(offset / 8) & 1][1] = data; break; case 7: - dma_offset[(offset / 8) & 1][0] = data; + state->dma_offset[(offset / 8) & 1][0] = data; break; } } @@ -377,7 +396,8 @@ static WRITE_LINE_DEVICE_HANDLER( pc_dma_hrq_changed ) static READ8_HANDLER( pc_dma_read_byte ) { - offs_t page_offset = (((offs_t) dma_offset[0][dma_channel]) << 16) + taitowlf_state *state = space->machine->driver_data(); + offs_t page_offset = (((offs_t) state->dma_offset[0][state->dma_channel]) << 16) & 0xFF0000; return space->read_byte(page_offset + offset); @@ -386,17 +406,37 @@ static READ8_HANDLER( pc_dma_read_byte ) static WRITE8_HANDLER( pc_dma_write_byte ) { - offs_t page_offset = (((offs_t) dma_offset[0][dma_channel]) << 16) + taitowlf_state *state = space->machine->driver_data(); + offs_t page_offset = (((offs_t) state->dma_offset[0][state->dma_channel]) << 16) & 0xFF0000; space->write_byte(page_offset + offset, data); } -static WRITE_LINE_DEVICE_HANDLER( pc_dack0_w ) { if (state) dma_channel = 0; } -static WRITE_LINE_DEVICE_HANDLER( pc_dack1_w ) { if (state) dma_channel = 1; } -static WRITE_LINE_DEVICE_HANDLER( pc_dack2_w ) { if (state) dma_channel = 2; } -static WRITE_LINE_DEVICE_HANDLER( pc_dack3_w ) { if (state) dma_channel = 3; } +static WRITE_LINE_DEVICE_HANDLER( pc_dack0_w ) +{ + taitowlf_state *drvstate = device->machine->driver_data(); + if (state) drvstate->dma_channel = 0; +} + +static WRITE_LINE_DEVICE_HANDLER( pc_dack1_w ) +{ + taitowlf_state *drvstate = device->machine->driver_data(); + if (state) drvstate->dma_channel = 1; +} + +static WRITE_LINE_DEVICE_HANDLER( pc_dack2_w ) +{ + taitowlf_state *drvstate = device->machine->driver_data(); + if (state) drvstate->dma_channel = 2; +} + +static WRITE_LINE_DEVICE_HANDLER( pc_dack3_w ) +{ + taitowlf_state *drvstate = device->machine->driver_data(); + if (state) drvstate->dma_channel = 3; +} static I8237_INTERFACE( dma8237_1_config ) { @@ -437,7 +477,7 @@ static WRITE32_HANDLER(at_page32_w) static ADDRESS_MAP_START( taitowlf_map, ADDRESS_SPACE_PROGRAM, 32 ) AM_RANGE(0x00000000, 0x0009ffff) AM_RAM AM_RANGE(0x000a0000, 0x000affff) AM_RAM - AM_RANGE(0x000b0000, 0x000b7fff) AM_RAM AM_BASE(&cga_ram) + AM_RANGE(0x000b0000, 0x000b7fff) AM_RAM AM_BASE_MEMBER(taitowlf_state, cga_ram) AM_RANGE(0x000e0000, 0x000effff) AM_RAM AM_RANGE(0x000f0000, 0x000fffff) AM_ROMBANK("bank1") AM_RANGE(0x000f0000, 0x000fffff) AM_WRITE(bios_ram_w) @@ -597,7 +637,7 @@ static const struct pit8253_config taitowlf_pit8254_config = } }; -static MACHINE_CONFIG_START( taitowlf, driver_device ) +static MACHINE_CONFIG_START( taitowlf, taitowlf_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", PENTIUM, 200000000) @@ -673,11 +713,12 @@ static void taitowlf_set_keyb_int(running_machine *machine, int state) static DRIVER_INIT( taitowlf ) { - bios_ram = auto_alloc_array(machine, UINT32, 0x10000/4); + taitowlf_state *state = machine->driver_data(); + state->bios_ram = auto_alloc_array(machine, UINT32, 0x10000/4); init_pc_common(machine, PCCOMMON_KEYBOARD_AT, taitowlf_set_keyb_int); - intel82439tx_init(); + intel82439tx_init(machine); kbdc8042_init(machine, &at8042); } diff --git a/src/mame/drivers/tsamurai.c b/src/mame/drivers/tsamurai.c index 2ce0b5f2305..9864f32910d 100644 --- a/src/mame/drivers/tsamurai.c +++ b/src/mame/drivers/tsamurai.c @@ -48,17 +48,17 @@ TODO: #include "sound/dac.h" #include "includes/tsamurai.h" -static int nmi_enabled; -static int sound_command1, sound_command2, sound_command3; static WRITE8_HANDLER( nmi_enable_w ) { - nmi_enabled = data; + tsamurai_state *state = space->machine->driver_data(); + state->nmi_enabled = data; } static INTERRUPT_GEN( samurai_interrupt ) { - if (nmi_enabled) cpu_set_input_line(device, INPUT_LINE_NMI, PULSE_LINE); + tsamurai_state *state = device->machine->driver_data(); + if (state->nmi_enabled) cpu_set_input_line(device, INPUT_LINE_NMI, PULSE_LINE); } static READ8_HANDLER( unknown_d803_r ) @@ -88,19 +88,22 @@ static READ8_HANDLER( unknown_d938_r ) static WRITE8_HANDLER( sound_command1_w ) { - sound_command1 = data; + tsamurai_state *state = space->machine->driver_data(); + state->sound_command1 = data; cputag_set_input_line(space->machine, "audiocpu", 0, HOLD_LINE ); } static WRITE8_HANDLER( sound_command2_w ) { - sound_command2 = data; + tsamurai_state *state = space->machine->driver_data(); + state->sound_command2 = data; cputag_set_input_line(space->machine, "audio2", 0, HOLD_LINE ); } static WRITE8_HANDLER( sound_command3_w ) { - sound_command3 = data; + tsamurai_state *state = space->machine->driver_data(); + state->sound_command3 = data; cputag_set_input_line(space->machine, "audio3", 0, HOLD_LINE ); } @@ -125,10 +128,10 @@ static ADDRESS_MAP_START( main_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0xd900, 0xd900) AM_READ(unknown_d900_r) AM_RANGE(0xd938, 0xd938) AM_READ(unknown_d938_r) - AM_RANGE(0xe000, 0xe3ff) AM_RAM_WRITE(tsamurai_fg_videoram_w) AM_BASE(&tsamurai_videoram) - AM_RANGE(0xe400, 0xe43f) AM_RAM_WRITE(tsamurai_fg_colorram_w) AM_BASE(&tsamurai_colorram) + AM_RANGE(0xe000, 0xe3ff) AM_RAM_WRITE(tsamurai_fg_videoram_w) AM_BASE_MEMBER(tsamurai_state, videoram) + AM_RANGE(0xe400, 0xe43f) AM_RAM_WRITE(tsamurai_fg_colorram_w) AM_BASE_MEMBER(tsamurai_state, colorram) AM_RANGE(0xe440, 0xe7ff) AM_RAM - AM_RANGE(0xe800, 0xefff) AM_RAM_WRITE(tsamurai_bg_videoram_w) AM_BASE(&tsamurai_bg_videoram) + AM_RANGE(0xe800, 0xefff) AM_RAM_WRITE(tsamurai_bg_videoram_w) AM_BASE_MEMBER(tsamurai_state, bg_videoram) AM_RANGE(0xf000, 0xf3ff) AM_RAM AM_BASE_GENERIC(spriteram) AM_RANGE(0xf400, 0xf400) AM_WRITENOP @@ -158,10 +161,10 @@ static ADDRESS_MAP_START( m660_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0xd900, 0xd900) AM_READ(unknown_d900_r) AM_RANGE(0xd938, 0xd938) AM_READ(unknown_d938_r) - AM_RANGE(0xe000, 0xe3ff) AM_RAM_WRITE(tsamurai_fg_videoram_w) AM_BASE(&tsamurai_videoram) - AM_RANGE(0xe400, 0xe43f) AM_RAM_WRITE(tsamurai_fg_colorram_w) AM_BASE(&tsamurai_colorram) + AM_RANGE(0xe000, 0xe3ff) AM_RAM_WRITE(tsamurai_fg_videoram_w) AM_BASE_MEMBER(tsamurai_state, videoram) + AM_RANGE(0xe400, 0xe43f) AM_RAM_WRITE(tsamurai_fg_colorram_w) AM_BASE_MEMBER(tsamurai_state, colorram) AM_RANGE(0xe440, 0xe7ff) AM_RAM - AM_RANGE(0xe800, 0xefff) AM_RAM_WRITE(tsamurai_bg_videoram_w) AM_BASE(&tsamurai_bg_videoram) + AM_RANGE(0xe800, 0xefff) AM_RAM_WRITE(tsamurai_bg_videoram_w) AM_BASE_MEMBER(tsamurai_state, bg_videoram) AM_RANGE(0xf000, 0xf3ff) AM_RAM AM_BASE_GENERIC(spriteram) AM_RANGE(0xf400, 0xf400) AM_WRITENOP/* This is always written with F401, F402 & F403 data */ @@ -202,17 +205,20 @@ ADDRESS_MAP_END static READ8_HANDLER( sound_command1_r ) { - return sound_command1; + tsamurai_state *state = space->machine->driver_data(); + return state->sound_command1; } static READ8_HANDLER( sound_command2_r ) { - return sound_command2; + tsamurai_state *state = space->machine->driver_data(); + return state->sound_command2; } static READ8_HANDLER( sound_command3_r ) { - return sound_command3; + tsamurai_state *state = space->machine->driver_data(); + return state->sound_command3; } /*******************************************************************************/ @@ -271,15 +277,16 @@ ADDRESS_MAP_END /*******************************************************************************/ -static int vsgongf_sound_nmi_enabled; static WRITE8_HANDLER( vsgongf_sound_nmi_enable_w ) { - vsgongf_sound_nmi_enabled = data; + tsamurai_state *state = space->machine->driver_data(); + state->vsgongf_sound_nmi_enabled = data; } static INTERRUPT_GEN( vsgongf_sound_interrupt ) { - if (vsgongf_sound_nmi_enabled) cpu_set_input_line(device, INPUT_LINE_NMI, PULSE_LINE); + tsamurai_state *state = device->machine->driver_data(); + if (state->vsgongf_sound_nmi_enabled) cpu_set_input_line(device, INPUT_LINE_NMI, PULSE_LINE); } /* what are these, protection of some kind? */ @@ -318,7 +325,7 @@ static ADDRESS_MAP_START( vsgongf_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0xa006, 0xa006) AM_READ(vsgongf_a006_r) /* protection */ AM_RANGE(0xa100, 0xa100) AM_READ(vsgongf_a100_r) /* protection */ AM_RANGE(0xc000, 0xc7ff) AM_RAM /* work ram */ - AM_RANGE(0xe000, 0xe3ff) AM_RAM_WRITE(tsamurai_fg_videoram_w) AM_BASE(&tsamurai_videoram) + AM_RANGE(0xe000, 0xe3ff) AM_RAM_WRITE(tsamurai_fg_videoram_w) AM_BASE_MEMBER(tsamurai_state, videoram) AM_RANGE(0xe400, 0xe43f) AM_RAM AM_BASE_GENERIC(spriteram) AM_RANGE(0xe440, 0xe47b) AM_RAM AM_RANGE(0xe800, 0xe800) AM_WRITE(vsgongf_sound_command_w) @@ -641,7 +648,7 @@ GFXDECODE_END /*******************************************************************************/ -static MACHINE_CONFIG_START( tsamurai, driver_device ) +static MACHINE_CONFIG_START( tsamurai, tsamurai_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", Z80, 4000000) @@ -684,7 +691,7 @@ static MACHINE_CONFIG_START( tsamurai, driver_device ) MACHINE_CONFIG_END -static MACHINE_CONFIG_START( m660, driver_device ) +static MACHINE_CONFIG_START( m660, tsamurai_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", Z80, 4000000) @@ -732,7 +739,7 @@ static MACHINE_CONFIG_START( m660, driver_device ) MACHINE_CONFIG_END -static MACHINE_CONFIG_START( vsgongf, driver_device ) +static MACHINE_CONFIG_START( vsgongf, tsamurai_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", Z80, 4000000) diff --git a/src/mame/drivers/undrfire.c b/src/mame/drivers/undrfire.c index a1fb914fcd9..2575c5bf8b7 100644 --- a/src/mame/drivers/undrfire.c +++ b/src/mame/drivers/undrfire.c @@ -197,12 +197,7 @@ Board contains only 29 ROMs and not much else. #include "cbombers.lh" -static UINT16 coin_word; -static UINT16 port_sel = 0; -static int frame_counter=0; -static UINT32 *undrfire_ram; /* will be read in video for gun target calcs */ -static UINT32 *shared_ram; /*********************************************************** COLOR RAM @@ -259,11 +254,13 @@ static const eeprom_interface undrfire_eeprom_interface = static CUSTOM_INPUT(frame_counter_r) { - return frame_counter; + undrfire_state *state = field->port->machine->driver_data(); + return state->frame_counter; } static READ32_HANDLER( undrfire_input_r ) { + undrfire_state *state = space->machine->driver_data(); switch (offset) { case 0x00: @@ -273,7 +270,7 @@ static READ32_HANDLER( undrfire_input_r ) case 0x01: { - return input_port_read(space->machine, "SYSTEM") | (coin_word << 16); + return input_port_read(space->machine, "SYSTEM") | (state->coin_word << 16); } } @@ -282,6 +279,7 @@ static READ32_HANDLER( undrfire_input_r ) static WRITE32_HANDLER( undrfire_input_w ) { + undrfire_state *state = space->machine->driver_data(); switch (offset) { case 0x00: @@ -311,7 +309,7 @@ static WRITE32_HANDLER( undrfire_input_w ) coin_lockout_w(space->machine, 1,~data & 0x02000000); coin_counter_w(space->machine, 0, data & 0x04000000); coin_counter_w(space->machine, 1, data & 0x08000000); - coin_word = (data >> 16) &0xffff; + state->coin_word = (data >> 16) &0xffff; } } } @@ -320,22 +318,24 @@ static WRITE32_HANDLER( undrfire_input_w ) static READ16_HANDLER( shared_ram_r ) { - if ((offset&1)==0) return (shared_ram[offset/2]&0xffff0000)>>16; - return (shared_ram[offset/2]&0x0000ffff); + undrfire_state *state = space->machine->driver_data(); + if ((offset&1)==0) return (state->shared_ram[offset/2]&0xffff0000)>>16; + return (state->shared_ram[offset/2]&0x0000ffff); } static WRITE16_HANDLER( shared_ram_w ) { + undrfire_state *state = space->machine->driver_data(); if ((offset&1)==0) { if (ACCESSING_BITS_8_15) - shared_ram[offset/2]=(shared_ram[offset/2]&0x00ffffff)|((data&0xff00)<<16); + state->shared_ram[offset/2]=(state->shared_ram[offset/2]&0x00ffffff)|((data&0xff00)<<16); if (ACCESSING_BITS_0_7) - shared_ram[offset/2]=(shared_ram[offset/2]&0xff00ffff)|((data&0x00ff)<<16); + state->shared_ram[offset/2]=(state->shared_ram[offset/2]&0xff00ffff)|((data&0x00ff)<<16); } else { if (ACCESSING_BITS_8_15) - shared_ram[offset/2]=(shared_ram[offset/2]&0xffff00ff)|((data&0xff00)<< 0); + state->shared_ram[offset/2]=(state->shared_ram[offset/2]&0xffff00ff)|((data&0xff00)<< 0); if (ACCESSING_BITS_0_7) - shared_ram[offset/2]=(shared_ram[offset/2]&0xffffff00)|((data&0x00ff)<< 0); + state->shared_ram[offset/2]=(state->shared_ram[offset/2]&0xffffff00)|((data&0x00ff)<< 0); } } @@ -407,15 +407,16 @@ logerror("CPU #0 PC %06x: warning - read unmapped lightgun offset %06x\n",cpu_ge static WRITE32_HANDLER( rotate_control_w ) /* only a guess that it's rotation */ { + undrfire_state *state = space->machine->driver_data(); if (ACCESSING_BITS_0_15) { - undrfire_rotate_ctrl[port_sel] = data; + state->rotate_ctrl[state->port_sel] = data; return; } if (ACCESSING_BITS_16_31) { - port_sel = (data &0x70000) >> 16; + state->port_sel = (data &0x70000) >> 16; } } @@ -464,7 +465,7 @@ static WRITE32_HANDLER( cbombers_adc_w ) static ADDRESS_MAP_START( undrfire_map, ADDRESS_SPACE_PROGRAM, 32 ) AM_RANGE(0x000000, 0x1fffff) AM_ROM - AM_RANGE(0x200000, 0x21ffff) AM_RAM AM_BASE(&undrfire_ram) + AM_RANGE(0x200000, 0x21ffff) AM_RAM AM_BASE_MEMBER(undrfire_state, ram) AM_RANGE(0x300000, 0x303fff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram) // AM_RANGE(0x304000, 0x304003) AM_RAM // debugging - doesn't change ??? // AM_RANGE(0x304400, 0x304403) AM_RAM // debugging - doesn't change ??? @@ -499,7 +500,7 @@ static ADDRESS_MAP_START( cbombers_cpua_map, ADDRESS_SPACE_PROGRAM, 32 ) AM_RANGE(0xb00000, 0xb0000f) AM_RAM /* ? */ AM_RANGE(0xc00000, 0xc00007) AM_RAM /* LAN controller? */ AM_RANGE(0xd00000, 0xd00003) AM_WRITE(rotate_control_w) /* perhaps port based rotate control? */ - AM_RANGE(0xe00000, 0xe0ffff) AM_RAM AM_BASE(&shared_ram) + AM_RANGE(0xe00000, 0xe0ffff) AM_RAM AM_BASE_MEMBER(undrfire_state, shared_ram) ADDRESS_MAP_END static ADDRESS_MAP_START( cbombers_cpub_map, ADDRESS_SPACE_PROGRAM, 16 ) @@ -690,7 +691,8 @@ GFXDECODE_END static INTERRUPT_GEN( undrfire_interrupt ) { - frame_counter ^= 1; + undrfire_state *state = device->machine->driver_data(); + state->frame_counter ^= 1; cpu_set_input_line(device, 4, HOLD_LINE); } @@ -714,7 +716,7 @@ static const tc0480scp_interface undrfire_tc0480scp_intf = 0 /* col_base */ }; -static MACHINE_CONFIG_START( undrfire, driver_device ) +static MACHINE_CONFIG_START( undrfire, undrfire_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", M68EC020, 16000000) /* 16 MHz */ @@ -745,7 +747,7 @@ static MACHINE_CONFIG_START( undrfire, driver_device ) MACHINE_CONFIG_END -static MACHINE_CONFIG_START( cbombers, driver_device ) +static MACHINE_CONFIG_START( cbombers, undrfire_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", M68EC020, 16000000) /* 16 MHz */ diff --git a/src/mame/includes/bking.h b/src/mame/includes/bking.h index 14ca5d06bd1..497a6c4caba 100644 --- a/src/mame/includes/bking.h +++ b/src/mame/includes/bking.h @@ -26,6 +26,16 @@ public: /* devices */ device_t *audiocpu; + +#if 0 + /* 68705 */ + UINT8 port_a_in; + UINT8 port_a_out; + UINT8 ddr_a; + UINT8 port_b_in; + UINT8 port_b_out; + UINT8 ddr_b; +#endif }; diff --git a/src/mame/includes/crbaloon.h b/src/mame/includes/crbaloon.h index 3b010201dfa..85e8f9b2aaa 100644 --- a/src/mame/includes/crbaloon.h +++ b/src/mame/includes/crbaloon.h @@ -8,6 +8,22 @@ Crazy Ballooon #define CRBALOON_MASTER_XTAL (XTAL_9_987MHz) +class crbaloon_state : public driver_device +{ +public: + crbaloon_state(running_machine &machine, const driver_device_config_base &config) + : driver_device(machine, config) { } + + UINT8 *pc3092_data; + UINT8 *videoram; + UINT8 *colorram; + UINT8 *spriteram; + UINT16 collision_address; + UINT8 collision_address_clear; + tilemap_t *bg_tilemap; +}; + + /*----------- defined in audio/crbaloon.c -----------*/ WRITE8_DEVICE_HANDLER( crbaloon_audio_set_music_freq ); @@ -22,10 +38,6 @@ MACHINE_CONFIG_EXTERN( crbaloon_audio ); /*----------- defined in video/crbaloon.c -----------*/ -extern UINT8 *crbaloon_videoram; -extern UINT8 *crbaloon_colorram; -extern UINT8 *crbaloon_spriteram; - PALETTE_INIT( crbaloon ); VIDEO_START( crbaloon ); VIDEO_UPDATE( crbaloon ); @@ -33,6 +45,5 @@ VIDEO_UPDATE( crbaloon ); WRITE8_HANDLER( crbaloon_videoram_w ); WRITE8_HANDLER( crbaloon_colorram_w ); -UINT16 crbaloon_get_collision_address(void); -void crbaloon_set_clear_collision_address(int _crbaloon_collision_address_clear); - +UINT16 crbaloon_get_collision_address(running_machine *machine); +void crbaloon_set_clear_collision_address(running_machine *machine, int _crbaloon_collision_address_clear); diff --git a/src/mame/includes/darkmist.h b/src/mame/includes/darkmist.h index af22e0d333b..7626b52bd0e 100644 --- a/src/mame/includes/darkmist.h +++ b/src/mame/includes/darkmist.h @@ -5,19 +5,19 @@ public: : driver_device(machine, config) { } UINT8 *videoram; + UINT8 *workram; + int hw; + UINT8 *scroll; + UINT8 *spritebank; + tilemap_t *bgtilemap; + tilemap_t *fgtilemap; + tilemap_t *txtilemap; }; -/*----------- defined in drivers/darkmist.c -----------*/ - -extern int darkmist_hw; - - /*----------- defined in video/darkmist.c -----------*/ VIDEO_START( darkmist ); VIDEO_UPDATE( darkmist ); PALETTE_INIT( darkmist ); -extern UINT8 *darkmist_scroll; -extern UINT8 *darkmist_spritebank; diff --git a/src/mame/includes/exzisus.h b/src/mame/includes/exzisus.h index 68f80a2e887..2ffa0ccd4db 100644 --- a/src/mame/includes/exzisus.h +++ b/src/mame/includes/exzisus.h @@ -1,11 +1,23 @@ -/*----------- defined in video/exzisus.c -----------*/ +class exzisus_state : public driver_device +{ +public: + exzisus_state(running_machine &machine, const driver_device_config_base &config) + : driver_device(machine, config) { } -extern UINT8 *exzisus_videoram0; -extern UINT8 *exzisus_videoram1; -extern UINT8 *exzisus_objectram0; -extern UINT8 *exzisus_objectram1; -extern size_t exzisus_objectram_size0; -extern size_t exzisus_objectram_size1; + UINT8 *sharedram_ab; + UINT8 *sharedram_ac; + int cpua_bank; + int cpub_bank; + UINT8 *videoram0; + UINT8 *videoram1; + UINT8 *objectram0; + UINT8 *objectram1; + size_t objectram_size0; + size_t objectram_size1; +}; + + +/*----------- defined in video/exzisus.c -----------*/ READ8_HANDLER( exzisus_videoram_0_r ); READ8_HANDLER( exzisus_videoram_1_r ); diff --git a/src/mame/includes/flstory.h b/src/mame/includes/flstory.h index e4fadcb0df1..b5e710d307c 100644 --- a/src/mame/includes/flstory.h +++ b/src/mame/includes/flstory.h @@ -41,6 +41,17 @@ public: device_t *maincpu; device_t *audiocpu; device_t *mcu; + + /* mcu */ + UINT8 mcu_cmd; + UINT8 mcu_counter; + UINT8 mcu_b4_cmd; + UINT8 mcu_param; + UINT8 mcu_b2_res; + UINT8 mcu_b1_res; + UINT8 mcu_bb_res; + UINT8 mcu_b5_res; + UINT8 mcu_b6_res; }; diff --git a/src/mame/includes/galastrm.h b/src/mame/includes/galastrm.h index 0b6a78f4269..73e649e4fda 100644 --- a/src/mame/includes/galastrm.h +++ b/src/mame/includes/galastrm.h @@ -1,6 +1,42 @@ -/*----------- defined in video/galastrm.c -----------*/ +#include "video/poly.h" -extern INT16 galastrm_tc0610_ctrl_reg[2][8]; +struct tempsprite +{ + int gfx; + int code,color; + int flipx,flipy; + int x,y; + int zoomx,zoomy; + int primask; +}; + +class galastrm_state : public driver_device +{ +public: + galastrm_state(running_machine &machine, const driver_device_config_base &config) + : driver_device(machine, config) { } + + UINT16 coin_word; + UINT16 frame_counter; + UINT32 *ram; + int tc0110pcr_addr; + int tc0610_0_addr; + int tc0610_1_addr; + UINT32 mem[2]; + INT16 tc0610_ctrl_reg[2][8]; + struct tempsprite *spritelist; + struct tempsprite *sprite_ptr_pre; + bitmap_t *tmpbitmaps; + bitmap_t *polybitmap; + poly_manager *poly; + int rsxb; + int rsyb; + int rsxoffs; + int rsyoffs; +}; + + +/*----------- defined in video/galastrm.c -----------*/ VIDEO_START( galastrm ); VIDEO_UPDATE( galastrm ); diff --git a/src/mame/includes/gladiatr.h b/src/mame/includes/gladiatr.h index b73359448f2..b6cdcfddd9f 100644 --- a/src/mame/includes/gladiatr.h +++ b/src/mame/includes/gladiatr.h @@ -6,12 +6,28 @@ public: m_nvram(*this, "nvram") { } required_shared_ptr m_nvram; + int data1; + int data2; + int flag1; + int flag2; + UINT8 *videoram; + UINT8 *colorram; + UINT8 *textram; + int video_attributes; + int fg_scrollx; + int fg_scrolly; + int bg_scrollx; + int bg_scrolly; + int sprite_bank; + int sprite_buffer; + tilemap_t *fg_tilemap; + tilemap_t *bg_tilemap; + int fg_tile_bank; + int bg_tile_bank; }; /*----------- defined in video/gladiatr.c -----------*/ -extern UINT8 *gladiatr_videoram, *gladiatr_colorram,*gladiatr_textram; - WRITE8_HANDLER( gladiatr_videoram_w ); WRITE8_HANDLER( gladiatr_colorram_w ); WRITE8_HANDLER( gladiatr_textram_w ); diff --git a/src/mame/includes/groundfx.h b/src/mame/includes/groundfx.h index 30602368b4c..11d909e1a61 100644 --- a/src/mame/includes/groundfx.h +++ b/src/mame/includes/groundfx.h @@ -1,6 +1,30 @@ -/*----------- defined in video/groundfx.c -----------*/ +struct tempsprite +{ + int gfx; + int code,color; + int flipx,flipy; + int x,y; + int zoomx,zoomy; + int pri; +}; -extern UINT16 groundfx_rotate_ctrl[8]; +class groundfx_state : public driver_device +{ +public: + groundfx_state(running_machine &machine, const driver_device_config_base &config) + : driver_device(machine, config) { } + + UINT16 coin_word; + UINT16 frame_counter; + UINT16 port_sel; + UINT32 *ram; + struct tempsprite *spritelist; + UINT16 rotate_ctrl[8]; + rectangle hack_cliprect; +}; + + +/*----------- defined in video/groundfx.c -----------*/ VIDEO_START( groundfx ); VIDEO_UPDATE( groundfx ); diff --git a/src/mame/includes/gsword.h b/src/mame/includes/gsword.h index cb26b7dee0a..773f6b5cc3f 100644 --- a/src/mame/includes/gsword.h +++ b/src/mame/includes/gsword.h @@ -5,17 +5,25 @@ public: : driver_device(machine, config) { } UINT8 *videoram; + int coins; + int fake8910_0; + int fake8910_1; + int nmi_enable; + UINT8 *cpu2_ram; + int protect_hack; + size_t spritexy_size; + UINT8 *spritexy_ram; + UINT8 *spritetile_ram; + UINT8 *spriteattrib_ram; + int charbank; + int charpalbank; + int flipscreen; + tilemap_t *bg_tilemap; }; /*----------- defined in video/gsword.c -----------*/ -extern size_t gsword_spritexy_size; - -extern UINT8 *gsword_spritexy_ram; -extern UINT8 *gsword_spritetile_ram; -extern UINT8 *gsword_spriteattrib_ram; - WRITE8_HANDLER( gsword_charbank_w ); WRITE8_HANDLER( gsword_videoctrl_w ); WRITE8_HANDLER( gsword_videoram_w ); diff --git a/src/mame/includes/gunbustr.h b/src/mame/includes/gunbustr.h index baa03073651..6fb406023d6 100644 --- a/src/mame/includes/gunbustr.h +++ b/src/mame/includes/gunbustr.h @@ -1,3 +1,26 @@ +struct tempsprite +{ + int gfx; + int code,color; + int flipx,flipy; + int x,y; + int zoomx,zoomy; + int primask; +}; + +class gunbustr_state : public driver_device +{ +public: + gunbustr_state(running_machine &machine, const driver_device_config_base &config) + : driver_device(machine, config) { } + + UINT16 coin_word; + UINT32 *ram; + struct tempsprite *spritelist; + UINT32 mem[2]; +}; + + /*----------- defined in video/gunbustr.c -----------*/ VIDEO_START( gunbustr ); diff --git a/src/mame/includes/m107.h b/src/mame/includes/m107.h index 71500a2acaf..510a5ef57bc 100644 --- a/src/mame/includes/m107.h +++ b/src/mame/includes/m107.h @@ -5,11 +5,35 @@ *************************************************************************/ -/*----------- defined in video/m107.c -----------*/ +typedef struct _pf_layer_info pf_layer_info; +struct _pf_layer_info +{ + tilemap_t * tmap; + UINT16 vram_base; + UINT16 control[4]; +}; -extern UINT16 *m107_vram_data; -extern UINT8 m107_spritesystem; -extern UINT16 m107_raster_irq_position; +class m107_state : public driver_device +{ +public: + m107_state(running_machine &machine, const driver_device_config_base &config) + : driver_device(machine, config) { } + + emu_timer *scanline_timer; + UINT8 irq_vectorbase; + int irqvector; + int sound_status; + UINT16 *vram_data; + UINT8 spritesystem; + UINT8 sprite_display; + UINT16 raster_irq_position; + pf_layer_info pf_layer[4]; + UINT16 control[0x10]; + UINT16 *spriteram; +}; + + +/*----------- defined in video/m107.c -----------*/ WRITE16_HANDLER( m107_spritebuffer_w ); VIDEO_UPDATE( m107 ); diff --git a/src/mame/includes/m72.h b/src/mame/includes/m72.h index 58ea04bb9f7..39c30f6ec96 100644 --- a/src/mame/includes/m72.h +++ b/src/mame/includes/m72.h @@ -4,10 +4,42 @@ *************************************************************************/ -/*----------- defined in video/m72.c -----------*/ +class m72_state : public driver_device +{ +public: + m72_state(running_machine &machine, const driver_device_config_base &config) + : driver_device(machine, config) { } -extern UINT16 *m72_videoram1,*m72_videoram2,*majtitle_rowscrollram; -extern UINT32 m72_raster_irq_position; + UINT8 irqvector; + UINT32 sample_addr; + UINT16 *protection_ram; + emu_timer *scanline_timer; + UINT8 irq_base; + UINT8 mcu_snd_cmd_latch; + UINT8 mcu_sample_latch; + UINT32 mcu_sample_addr; + const UINT8 *protection_code; + const UINT8 *protection_crc; + UINT8 *soundram; + int prev[4]; + int diff[4]; + UINT16 *videoram1; + UINT16 *videoram2; + UINT16 *majtitle_rowscrollram; + UINT32 raster_irq_position; + UINT16 *spriteram; + tilemap_t *fg_tilemap; + tilemap_t *bg_tilemap; + INT32 scrollx1; + INT32 scrolly1; + INT32 scrollx2; + INT32 scrolly2; + INT32 video_off; + int majtitle_rowscroll; +}; + + +/*----------- defined in video/m72.c -----------*/ VIDEO_START( m72 ); VIDEO_START( rtype2 ); diff --git a/src/mame/includes/m92.h b/src/mame/includes/m92.h index d6778ce3ea8..0dedff0178f 100644 --- a/src/mame/includes/m92.h +++ b/src/mame/includes/m92.h @@ -4,6 +4,38 @@ *************************************************************************/ +typedef struct _pf_layer_info pf_layer_info; +struct _pf_layer_info +{ + tilemap_t * tmap; + tilemap_t * wide_tmap; + UINT16 vram_base; + UINT16 control[4]; +}; + +class m92_state : public driver_device +{ +public: + m92_state(running_machine &machine, const driver_device_config_base &config) + : driver_device(machine, config) { } + + UINT8 irqvector; + UINT16 sound_status; + UINT32 bankaddress; + emu_timer *scanline_timer; + UINT8 irq_vectorbase; + UINT32 raster_irq_position; + UINT16 *vram_data; + UINT16 *spritecontrol; + UINT8 sprite_buffer_busy; + UINT8 game_kludge; + pf_layer_info pf_layer[3]; + UINT16 pf_master_control[4]; + INT32 sprite_list; + int palette_bank; +}; + + /*----------- defined in drivers/m92.c -----------*/ extern void m92_sprite_interrupt(running_machine *machine); @@ -11,11 +43,6 @@ extern void m92_sprite_interrupt(running_machine *machine); /*----------- defined in video/m92.c -----------*/ -extern UINT32 m92_raster_irq_position; -extern UINT16 *m92_vram_data, *m92_spritecontrol; - -extern UINT8 m92_sprite_buffer_busy, m92_game_kludge; - WRITE16_HANDLER( m92_spritecontrol_w ); WRITE16_HANDLER( m92_videocontrol_w ); READ16_HANDLER( m92_paletteram_r ); diff --git a/src/mame/includes/mexico86.h b/src/mame/includes/mexico86.h index 09787cdd9d5..3c327c579d2 100644 --- a/src/mame/includes/mexico86.h +++ b/src/mame/includes/mexico86.h @@ -28,6 +28,11 @@ public: device_t *audiocpu; device_t *subcpu; device_t *mcu; + + /* queue */ + UINT8 queue[64]; + int qfront; + int qstate; }; diff --git a/src/mame/includes/nycaptor.h b/src/mame/includes/nycaptor.h index e0c5c1814ac..bb8ae7290b1 100644 --- a/src/mame/includes/nycaptor.h +++ b/src/mame/includes/nycaptor.h @@ -29,6 +29,7 @@ public: UINT8 snd_data; int vol_ctrl[16]; int gametype; + int mask; /* devices */ device_t *maincpu; diff --git a/src/mame/includes/pitnrun.h b/src/mame/includes/pitnrun.h index db58711e76d..01396331a1c 100644 --- a/src/mame/includes/pitnrun.h +++ b/src/mame/includes/pitnrun.h @@ -5,6 +5,24 @@ public: : driver_device(machine, config) { } UINT8 *videoram; + int nmi; + UINT8* videoram2; + UINT8 fromz80; + UINT8 toz80; + int zaccept; + int zready; + UINT8 portA_in; + UINT8 portA_out; + int address; + int h_heed; + int v_heed; + int ha; + int scroll; + int char_bank; + int color_select; + bitmap_t *tmp_bitmap[4]; + tilemap_t *bg; + tilemap_t *fg; }; @@ -26,8 +44,6 @@ WRITE8_HANDLER( pitnrun_mcu_data_w ); /*----------- defined in video/pitnrun.c -----------*/ -extern UINT8* pitnrun_videoram2; - WRITE8_HANDLER( pitnrun_videoram_w ); WRITE8_HANDLER( pitnrun_videoram2_w ); WRITE8_HANDLER(pitnrun_ha_w); diff --git a/src/mame/includes/qix.h b/src/mame/includes/qix.h index ac1ec91e513..90a9eff0250 100644 --- a/src/mame/includes/qix.h +++ b/src/mame/includes/qix.h @@ -17,6 +17,8 @@ #define QIX_CHARACTER_CLOCK (20000000/2/16) +#define NUM_PENS (0x100) + class qix_state : public driver_device { public: @@ -38,6 +40,7 @@ public: UINT8 palette_bank; UINT8 leds; UINT8 *scanline_latch; + pen_t pens[NUM_PENS]; }; diff --git a/src/mame/includes/redalert.h b/src/mame/includes/redalert.h index 1417dbcaf9c..e6486f9a349 100644 --- a/src/mame/includes/redalert.h +++ b/src/mame/includes/redalert.h @@ -7,6 +7,23 @@ ****************************************************************************/ +class redalert_state : public driver_device +{ +public: + redalert_state(running_machine &machine, const driver_device_config_base &config) + : driver_device(machine, config) { } + + UINT8 ay8910_latch_1; + UINT8 ay8910_latch_2; + UINT8 *bitmap_videoram; + UINT8 *bitmap_color; + UINT8 *charmap_videoram; + UINT8 *video_control; + UINT8 *bitmap_colorram; + UINT8 control_xor; +}; + + /*----------- defined in audio/redalert.c -----------*/ WRITE8_HANDLER( redalert_audio_command_w ); @@ -21,10 +38,6 @@ MACHINE_CONFIG_EXTERN( demoneye_audio ); /*----------- defined in video/redalert.c -----------*/ -extern UINT8 *redalert_bitmap_videoram; -extern UINT8 *redalert_bitmap_color; -extern UINT8 *redalert_charmap_videoram; -extern UINT8 *redalert_video_control; WRITE8_HANDLER( redalert_bitmap_videoram_w ); MACHINE_CONFIG_EXTERN( ww3_video ); diff --git a/src/mame/includes/retofinv.h b/src/mame/includes/retofinv.h index 605249fcbc7..b776ff5f789 100644 --- a/src/mame/includes/retofinv.h +++ b/src/mame/includes/retofinv.h @@ -1,3 +1,33 @@ +class retofinv_state : public driver_device +{ +public: + retofinv_state(running_machine &machine, const driver_device_config_base &config) + : driver_device(machine, config) { } + + UINT8 cpu2_m6000; + UINT8 *fg_videoram; + UINT8 *bg_videoram; + UINT8 *sharedram; + UINT8 from_main; + UINT8 from_mcu; + int mcu_sent; + int main_sent; + UINT8 portA_in; + UINT8 portA_out; + UINT8 ddrA; + UINT8 portB_in; + UINT8 portB_out; + UINT8 ddrB; + UINT8 portC_in; + UINT8 portC_out; + UINT8 ddrC; + int fg_bank; + int bg_bank; + tilemap_t *bg_tilemap; + tilemap_t *fg_tilemap; +}; + + /*----------- defined in machine/retofinv.c -----------*/ READ8_HANDLER( retofinv_68705_portA_r ); @@ -16,10 +46,6 @@ READ8_HANDLER( retofinv_mcu_status_r ); /*----------- defined in video/retofinv.c -----------*/ -extern UINT8 *retofinv_fg_videoram; -extern UINT8 *retofinv_bg_videoram; -extern UINT8 *retofinv_sharedram; - VIDEO_START( retofinv ); PALETTE_INIT( retofinv ); VIDEO_UPDATE( retofinv ); diff --git a/src/mame/includes/rollrace.h b/src/mame/includes/rollrace.h index 6d35826116b..88534a525d7 100644 --- a/src/mame/includes/rollrace.h +++ b/src/mame/includes/rollrace.h @@ -1,7 +1,24 @@ -/*----------- defined in video/rollrace.c -----------*/ +class rollrace_state : public driver_device +{ +public: + rollrace_state(running_machine &machine, const driver_device_config_base &config) + : driver_device(machine, config) { } -extern UINT8 *rollrace_videoram; -extern UINT8 *rollrace_colorram; + UINT8 *videoram; + UINT8 *colorram; + int ra_charbank[2]; + int ra_bkgpage; + int ra_bkgflip; + int ra_chrbank; + int ra_bkgpen; + int ra_bkgcol; + int ra_flipy; + int ra_flipx; + int ra_spritebank; +}; + + +/*----------- defined in video/rollrace.c -----------*/ VIDEO_UPDATE( rollrace ); diff --git a/src/mame/includes/slapshot.h b/src/mame/includes/slapshot.h index fc2fe272c06..f062f7c027b 100644 --- a/src/mame/includes/slapshot.h +++ b/src/mame/includes/slapshot.h @@ -34,6 +34,7 @@ public: INT32 sprites_disabled, sprites_active_area, sprites_master_scrollx, sprites_master_scrolly; int sprites_flipscreen; int prepare_sprites; + int dislayer[5]; UINT16 spritebank[8]; diff --git a/src/mame/includes/superchs.h b/src/mame/includes/superchs.h index 095816fa2dc..14181da67d6 100644 --- a/src/mame/includes/superchs.h +++ b/src/mame/includes/superchs.h @@ -1,3 +1,28 @@ +struct tempsprite +{ + int gfx; + int code,color; + int flipx,flipy; + int x,y; + int zoomx,zoomy; + int primask; +}; + +class superchs_state : public driver_device +{ +public: + superchs_state(running_machine &machine, const driver_device_config_base &config) + : driver_device(machine, config) { } + + UINT16 coin_word; + UINT32 *ram; + UINT32 *shared_ram; + int steer; + struct tempsprite *spritelist; + UINT32 mem[2]; +}; + + /*----------- defined in video/superchs.c -----------*/ VIDEO_START( superchs ); diff --git a/src/mame/includes/superqix.h b/src/mame/includes/superqix.h index ba5d417f0eb..263b6682408 100644 --- a/src/mame/includes/superqix.h +++ b/src/mame/includes/superqix.h @@ -1,8 +1,39 @@ -/*----------- defined in video/superqix.c -----------*/ +class superqix_state : public driver_device +{ +public: + superqix_state(running_machine &machine, const driver_device_config_base &config) + : driver_device(machine, config) { } -extern UINT8 *superqix_videoram; -extern UINT8 *superqix_bitmapram,*superqix_bitmapram2; -extern int pbillian_show_power; + INT16 *samplebuf; + UINT8 port1; + UINT8 port2; + UINT8 port3; + UINT8 port3_latch; + UINT8 from_mcu; + UINT8 from_z80; + UINT8 portb; + int from_mcu_pending; + int from_z80_pending; + int invert_coin_lockout; + int oldpos[2]; + int sign[2]; + UINT8 portA_in; + UINT8 portB_out; + UINT8 portC; + int curr_player; + UINT8 *videoram; + UINT8 *bitmapram; + UINT8 *bitmapram2; + int pbillian_show_power; + int gfxbank; + bitmap_t *fg_bitmap[2]; + int show_bitmap; + tilemap_t *bg_tilemap; + int last_power[2]; +}; + + +/*----------- defined in video/superqix.c -----------*/ WRITE8_HANDLER( superqix_videoram_w ); WRITE8_HANDLER( superqix_bitmapram_w ); diff --git a/src/mame/includes/taitojc.h b/src/mame/includes/taitojc.h index 7f440ba9a5e..5bd91b2ac7b 100644 --- a/src/mame/includes/taitojc.h +++ b/src/mame/includes/taitojc.h @@ -51,6 +51,8 @@ public: UINT8 mcu_comm_hc11; UINT8 mcu_data_main; UINT8 mcu_data_hc11; + + UINT16 debug_dsp_ram[0x8000]; }; diff --git a/src/mame/includes/taitosj.h b/src/mame/includes/taitosj.h index 893eef867b0..60a61cd8d74 100644 --- a/src/mame/includes/taitosj.h +++ b/src/mame/includes/taitosj.h @@ -1,3 +1,47 @@ +class taitosj_state : public driver_device +{ +public: + taitosj_state(running_machine &machine, const driver_device_config_base &config) + : driver_device(machine, config) { } + + UINT8 sndnmi_disable; + UINT8 input_port_4_f0; + UINT8 kikstart_gears[2]; + INT8 dac_out; + UINT8 dac_vol; + UINT8 *videoram_1; + UINT8 *videoram_2; + UINT8 *videoram_3; + UINT8 *spriteram; + UINT8 *paletteram; + UINT8 *characterram; + UINT8 *scroll; + UINT8 *colscrolly; + UINT8 *gfxpointer; + UINT8 *colorbank; + UINT8 *video_mode; + UINT8 *video_priority; + UINT8 *collision_reg; + UINT8 *kikstart_scrollram; + UINT8 fromz80; + UINT8 toz80; + UINT8 zaccept; + UINT8 zready; + UINT8 busreq; + UINT8 portA_in; + UINT8 portA_out; + UINT8 spacecr_prot_value; + UINT8 protection_value; + UINT32 address; + bitmap_t *layer_bitmap[3]; + bitmap_t *sprite_sprite_collbitmap1; + bitmap_t *sprite_sprite_collbitmap2; + bitmap_t *sprite_layer_collbitmap1; + bitmap_t *sprite_layer_collbitmap2[3]; + int draw_order[32][4]; +}; + + /*----------- defined in machine/taitosj.c -----------*/ MACHINE_START( taitosj ); @@ -23,21 +67,6 @@ READ8_HANDLER( alpine_port_2_r ); /*----------- defined in video/taitosj.c -----------*/ -extern UINT8 *taitosj_videoram_1; -extern UINT8 *taitosj_videoram_2; -extern UINT8 *taitosj_videoram_3; -extern UINT8 *taitosj_spriteram; -extern UINT8 *taitosj_paletteram; -extern UINT8 *taitosj_characterram; -extern UINT8 *taitosj_scroll; -extern UINT8 *taitosj_colscrolly; -extern UINT8 *taitosj_gfxpointer; -extern UINT8 *taitosj_colorbank; -extern UINT8 *taitosj_video_mode; -extern UINT8 *taitosj_video_priority; -extern UINT8 *taitosj_collision_reg; -extern UINT8 *kikstart_scrollram; - READ8_HANDLER( taitosj_gfxrom_r ); WRITE8_HANDLER( taitosj_characterram_w ); WRITE8_HANDLER( junglhbr_characterram_w ); diff --git a/src/mame/includes/topspeed.h b/src/mame/includes/topspeed.h index 341c33e6f43..e3d245d89a7 100644 --- a/src/mame/includes/topspeed.h +++ b/src/mame/includes/topspeed.h @@ -33,6 +33,8 @@ public: device_t *pc080sn_1; device_t *pc080sn_2; device_t *tc0220ioc; + + UINT8 dislayer[5]; }; diff --git a/src/mame/includes/tsamurai.h b/src/mame/includes/tsamurai.h index 15fe82201c9..8076c7f9e70 100644 --- a/src/mame/includes/tsamurai.h +++ b/src/mame/includes/tsamurai.h @@ -1,8 +1,29 @@ -/*----------- defined in video/tsamurai.c -----------*/ +class tsamurai_state : public driver_device +{ +public: + tsamurai_state(running_machine &machine, const driver_device_config_base &config) + : driver_device(machine, config) { } -extern UINT8 *tsamurai_videoram; -extern UINT8 *tsamurai_colorram; -extern UINT8 *tsamurai_bg_videoram; + int nmi_enabled; + int sound_command1; + int sound_command2; + int sound_command3; + int vsgongf_sound_nmi_enabled; + UINT8 *videoram; + UINT8 *colorram; + UINT8 *bg_videoram; + int bgcolor; + int textbank1; + int textbank2; + tilemap_t *background; + tilemap_t *foreground; + int flicker; + int vsgongf_color; + int key_count; +}; + + +/*----------- defined in video/tsamurai.c -----------*/ WRITE8_HANDLER( vsgongf_color_w ); diff --git a/src/mame/includes/undrfire.h b/src/mame/includes/undrfire.h index 2230537a2dd..c5237831b2e 100644 --- a/src/mame/includes/undrfire.h +++ b/src/mame/includes/undrfire.h @@ -1,6 +1,31 @@ -/*----------- defined in video/undrfire.c -----------*/ +struct tempsprite +{ + int gfx; + int code,color; + int flipx,flipy; + int x,y; + int zoomx,zoomy; + int primask; +}; -extern UINT16 undrfire_rotate_ctrl[8]; +class undrfire_state : public driver_device +{ +public: + undrfire_state(running_machine &machine, const driver_device_config_base &config) + : driver_device(machine, config) { } + + UINT16 coin_word; + UINT16 port_sel; + int frame_counter; + UINT32 *ram; + UINT32 *shared_ram; + struct tempsprite *spritelist; + UINT16 rotate_ctrl[8]; + UINT8 dislayer[6]; +}; + + +/*----------- defined in video/undrfire.c -----------*/ VIDEO_START( undrfire ); VIDEO_UPDATE( undrfire ); diff --git a/src/mame/includes/wgp.h b/src/mame/includes/wgp.h index 89269963ddb..caa98617c30 100644 --- a/src/mame/includes/wgp.h +++ b/src/mame/includes/wgp.h @@ -27,6 +27,7 @@ public: UINT16 piv_zoom[3], piv_scrollx[3], piv_scrolly[3]; UINT16 rotate_ctrl[8]; int piv_xoffs, piv_yoffs; + UINT8 dislayer[4]; /* misc */ UINT16 cpua_ctrl; diff --git a/src/mame/machine/mexico86.c b/src/mame/machine/mexico86.c index 734e290e5bd..fae703be78d 100644 --- a/src/mame/machine/mexico86.c +++ b/src/mame/machine/mexico86.c @@ -181,30 +181,28 @@ static void kiki_clogic(running_machine *machine, int address, int latch) { mexico86_state *state = machine->driver_data(); static const UINT8 db[16]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x10,0x18,0x00,0x00,0x00,0x00}; - static UINT8 queue[64]; - static int qfront = 0, state = 0; int sy, sx, hw, i, qptr, diff1, diff2; - if (address != KIKI_CL_TRIGGER) // queue latched data + if (address != KIKI_CL_TRIGGER) // state->queue latched data { - queue[qfront++] = latch; - qfront &= 0x3f; + state->queue[state->qfront++] = latch; + state->qfront &= 0x3f; } - else if (state ^= 1) // scan queue + else if (state->qstate ^= 1) // scan state->queue { - sy = queue[(qfront-0x3a)&0x3f] + ((0x18-DCHEIGHT)>>1); - sx = queue[(qfront-0x39)&0x3f] + ((0x18-DCWIDTH)>>1); + sy = state->queue[(state->qfront-0x3a)&0x3f] + ((0x18-DCHEIGHT)>>1); + sx = state->queue[(state->qfront-0x39)&0x3f] + ((0x18-DCWIDTH)>>1); for (i=0x38; i; i-=8) { - qptr = qfront - i; - if (!(hw = db[queue[qptr&0x3f]&0xf])) continue; + qptr = state->qfront - i; + if (!(hw = db[state->queue[qptr&0x3f]&0xf])) continue; - diff1 = sx - (short)(queue[(qptr+6)&0x3f]<<8|queue[(qptr+7)&0x3f]) + DCWIDTH; + diff1 = sx - (short)(state->queue[(qptr+6)&0x3f]<<8|state->queue[(qptr+7)&0x3f]) + DCWIDTH; diff2 = diff1 - (hw + DCWIDTH); if ((diff1^diff2)<0) { - diff1 = sy - (short)(queue[(qptr+4)&0x3f]<<8|queue[(qptr+5)&0x3f]) + DCHEIGHT; + diff1 = sy - (short)(state->queue[(qptr+4)&0x3f]<<8|state->queue[(qptr+5)&0x3f]) + DCHEIGHT; diff2 = diff1 - (hw + DCHEIGHT); if ((diff1^diff2)<0) state->protection_ram[KIKI_CL_OUT] = 1; // we have a collision diff --git a/src/mame/machine/pitnrun.c b/src/mame/machine/pitnrun.c index 6889a163448..c649242f57b 100644 --- a/src/mame/machine/pitnrun.c +++ b/src/mame/machine/pitnrun.c @@ -12,32 +12,33 @@ #include "includes/pitnrun.h" -static UINT8 fromz80,toz80; -static int zaccept,zready; - MACHINE_RESET( pitnrun ) { - zaccept = 1; - zready = 0; + pitnrun_state *state = machine->driver_data(); + state->zaccept = 1; + state->zready = 0; cputag_set_input_line(machine, "mcu", 0, CLEAR_LINE); } static TIMER_CALLBACK( pitnrun_mcu_real_data_r ) { - zaccept = 1; + pitnrun_state *state = machine->driver_data(); + state->zaccept = 1; } READ8_HANDLER( pitnrun_mcu_data_r ) { + pitnrun_state *state = space->machine->driver_data(); timer_call_after_resynch(space->machine, NULL, 0,pitnrun_mcu_real_data_r); - return toz80; + return state->toz80; } static TIMER_CALLBACK( pitnrun_mcu_real_data_w ) { - zready = 1; + pitnrun_state *state = machine->driver_data(); + state->zready = 1; cputag_set_input_line(machine, "mcu", 0, ASSERT_LINE); - fromz80 = param; + state->fromz80 = param; } WRITE8_HANDLER( pitnrun_mcu_data_w ) @@ -48,22 +49,24 @@ WRITE8_HANDLER( pitnrun_mcu_data_w ) READ8_HANDLER( pitnrun_mcu_status_r ) { + pitnrun_state *state = space->machine->driver_data(); /* mcu synchronization */ /* bit 0 = the 68705 has read data from the Z80 */ /* bit 1 = the 68705 has written data for the Z80 */ - return ~((zready << 1) | (zaccept << 0)); + return ~((state->zready << 1) | (state->zaccept << 0)); } -static UINT8 portA_in,portA_out; READ8_HANDLER( pitnrun_68705_portA_r ) { - return portA_in; + pitnrun_state *state = space->machine->driver_data(); + return state->portA_in; } WRITE8_HANDLER( pitnrun_68705_portA_w ) { - portA_out = data; + pitnrun_state *state = space->machine->driver_data(); + state->portA_out = data; } @@ -91,49 +94,51 @@ READ8_HANDLER( pitnrun_68705_portB_r ) return 0xff; } -static int address; static TIMER_CALLBACK( pitnrun_mcu_data_real_r ) { - zready = 0; + pitnrun_state *state = machine->driver_data(); + state->zready = 0; } static TIMER_CALLBACK( pitnrun_mcu_status_real_w ) { - toz80 = param; - zaccept = 0; + pitnrun_state *state = machine->driver_data(); + state->toz80 = param; + state->zaccept = 0; } WRITE8_HANDLER( pitnrun_68705_portB_w ) { + pitnrun_state *state = space->machine->driver_data(); address_space *cpu0space = cputag_get_address_space(space->machine, "maincpu", ADDRESS_SPACE_PROGRAM); if (~data & 0x02) { /* 68705 is going to read data from the Z80 */ timer_call_after_resynch(space->machine, NULL, 0,pitnrun_mcu_data_real_r); cputag_set_input_line(space->machine, "mcu",0,CLEAR_LINE); - portA_in = fromz80; + state->portA_in = state->fromz80; } if (~data & 0x04) { /* 68705 is writing data for the Z80 */ - timer_call_after_resynch(space->machine, NULL, portA_out,pitnrun_mcu_status_real_w); + timer_call_after_resynch(space->machine, NULL, state->portA_out,pitnrun_mcu_status_real_w); } if (~data & 0x10) { - cpu0space->write_byte(address, portA_out); + cpu0space->write_byte(state->address, state->portA_out); } if (~data & 0x20) { - portA_in = cpu0space->read_byte(address); + state->portA_in = cpu0space->read_byte(state->address); } if (~data & 0x40) { - address = (address & 0xff00) | portA_out; + state->address = (state->address & 0xff00) | state->portA_out; } if (~data & 0x80) { - address = (address & 0x00ff) | (portA_out << 8); + state->address = (state->address & 0x00ff) | (state->portA_out << 8); } } @@ -149,5 +154,6 @@ WRITE8_HANDLER( pitnrun_68705_portB_w ) READ8_HANDLER( pitnrun_68705_portC_r ) { - return (zready << 0) | (zaccept << 1); + pitnrun_state *state = space->machine->driver_data(); + return (state->zready << 0) | (state->zaccept << 1); } diff --git a/src/mame/machine/retofinv.c b/src/mame/machine/retofinv.c index c743fced427..4b90ae9f066 100644 --- a/src/mame/machine/retofinv.c +++ b/src/mame/machine/retofinv.c @@ -3,33 +3,31 @@ #include "includes/retofinv.h" -static UINT8 from_main,from_mcu; -static int mcu_sent = 0,main_sent = 0; - - /*************************************************************************** Return of Invaders 68705 protection interface ***************************************************************************/ -static UINT8 portA_in,portA_out,ddrA; READ8_HANDLER( retofinv_68705_portA_r ) { -//logerror("%04x: 68705 port A read %02x\n",cpu_get_pc(space->cpu),portA_in); - return (portA_out & ddrA) | (portA_in & ~ddrA); + retofinv_state *state = space->machine->driver_data(); +//logerror("%04x: 68705 port A read %02x\n",cpu_get_pc(space->cpu),state->portA_in); + return (state->portA_out & state->ddrA) | (state->portA_in & ~state->ddrA); } WRITE8_HANDLER( retofinv_68705_portA_w ) { + retofinv_state *state = space->machine->driver_data(); //logerror("%04x: 68705 port A write %02x\n",cpu_get_pc(space->cpu),data); - portA_out = data; + state->portA_out = data; } WRITE8_HANDLER( retofinv_68705_ddrA_w ) { - ddrA = data; + retofinv_state *state = space->machine->driver_data(); + state->ddrA = data; } @@ -43,37 +41,39 @@ WRITE8_HANDLER( retofinv_68705_ddrA_w ) * 2 W loads latch to Z80 */ -static UINT8 portB_in,portB_out,ddrB; READ8_HANDLER( retofinv_68705_portB_r ) { - return (portB_out & ddrB) | (portB_in & ~ddrB); + retofinv_state *state = space->machine->driver_data(); + return (state->portB_out & state->ddrB) | (state->portB_in & ~state->ddrB); } WRITE8_HANDLER( retofinv_68705_portB_w ) { + retofinv_state *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->ddrB & 0x02) && (~data & 0x02) && (state->portB_out & 0x02)) { - portA_in = from_main; - if (main_sent) cputag_set_input_line(space->machine, "68705", 0, CLEAR_LINE); - main_sent = 0; -//logerror("read command %02x from main cpu\n",portA_in); + state->portA_in = state->from_main; + if (state->main_sent) cputag_set_input_line(space->machine, "68705", 0, CLEAR_LINE); + state->main_sent = 0; +//logerror("read command %02x from main cpu\n",state->portA_in); } - if ((ddrB & 0x04) && (data & 0x04) && (~portB_out & 0x04)) + if ((state->ddrB & 0x04) && (data & 0x04) && (~state->portB_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->portA_out); + state->from_mcu = state->portA_out; + state->mcu_sent = 1; } - portB_out = data; + state->portB_out = data; } WRITE8_HANDLER( retofinv_68705_ddrB_w ) { - ddrB = data; + retofinv_state *state = space->machine->driver_data(); + state->ddrB = data; } @@ -86,53 +86,58 @@ WRITE8_HANDLER( retofinv_68705_ddrB_w ) * 1 R 0 when pending command 68705->Z80 */ -static UINT8 portC_in,portC_out,ddrC; READ8_HANDLER( retofinv_68705_portC_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); + retofinv_state *state = space->machine->driver_data(); + state->portC_in = 0; + if (state->main_sent) state->portC_in |= 0x01; + if (!state->mcu_sent) state->portC_in |= 0x02; +//logerror("%04x: 68705 port C read %02x\n",cpu_get_pc(space->cpu),state->portC_in); + return (state->portC_out & state->ddrC) | (state->portC_in & ~state->ddrC); } WRITE8_HANDLER( retofinv_68705_portC_w ) { + retofinv_state *state = space->machine->driver_data(); logerror("%04x: 68705 port C write %02x\n",cpu_get_pc(space->cpu),data); - portC_out = data; + state->portC_out = data; } WRITE8_HANDLER( retofinv_68705_ddrC_w ) { - ddrC = data; + retofinv_state *state = space->machine->driver_data(); + state->ddrC = data; } WRITE8_HANDLER( retofinv_mcu_w ) { + retofinv_state *state = space->machine->driver_data(); logerror("%04x: mcu_w %02x\n",cpu_get_pc(space->cpu),data); - from_main = data; - main_sent = 1; + state->from_main = data; + state->main_sent = 1; cputag_set_input_line(space->machine, "68705", 0, ASSERT_LINE); } READ8_HANDLER( retofinv_mcu_r ) { -logerror("%04x: mcu_r %02x\n",cpu_get_pc(space->cpu),from_mcu); - mcu_sent = 0; - return from_mcu; + retofinv_state *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( retofinv_mcu_status_r ) { + retofinv_state *state = space->machine->driver_data(); int res = 0; /* bit 4 = when 1, mcu is ready to receive data from main cpu */ /* bit 5 = 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 |= 0x10; - if (mcu_sent) res |= 0x20; + if (!state->main_sent) res |= 0x10; + if (state->mcu_sent) res |= 0x20; return res; } diff --git a/src/mame/machine/starwars.c b/src/mame/machine/starwars.c index d8fccad1771..8d684ad3ae1 100644 --- a/src/mame/machine/starwars.c +++ b/src/mame/machine/starwars.c @@ -328,7 +328,7 @@ static void run_mproc(running_machine *machine) state->ACC += (((INT32)(state->A - state->B) << 1) * state->C) << 1; - /* state->A and state->B are sign extended (requred by the ls384). After + /* A and B are sign extended (requred by the ls384). After * multiplication they just contain the sign. */ state->A = (state->A & 0x8000)? 0xffff: 0; @@ -355,7 +355,7 @@ static void run_mproc(running_machine *machine) * leaking from one to another. It may not matter, but I've put it in anyway */ tmp = state->MPA + 1; - state->MPA = (state->MPA & 0x0300) | (tmp & 0x00ff); /* New state->MPA value */ + state->MPA = (state->MPA & 0x0300) | (tmp & 0x00ff); /* New MPA value */ M_STOP--; /* Decrease count */ } diff --git a/src/mame/machine/taitosj.c b/src/mame/machine/taitosj.c index 361f84255c4..0ac7f8702d5 100644 --- a/src/mame/machine/taitosj.c +++ b/src/mame/machine/taitosj.c @@ -16,47 +16,41 @@ #define LOG(x) do { if (VERBOSE) logerror x; } while (0) -static UINT8 fromz80,toz80; -static UINT8 zaccept,zready,busreq; -static UINT8 portA_in,portA_out; - -static UINT8 spacecr_prot_value; -static UINT8 protection_value; -static UINT32 address; - MACHINE_START( taitosj ) { + taitosj_state *state = machine->driver_data(); memory_configure_bank(machine, "bank1", 0, 1, machine->region("maincpu")->base() + 0x6000, 0); memory_configure_bank(machine, "bank1", 1, 1, machine->region("maincpu")->base() + 0x10000, 0); - state_save_register_global(machine, fromz80); - state_save_register_global(machine, toz80); - state_save_register_global(machine, zaccept); - state_save_register_global(machine, zready); - state_save_register_global(machine, busreq); + state_save_register_global(machine, state->fromz80); + state_save_register_global(machine, state->toz80); + state_save_register_global(machine, state->zaccept); + state_save_register_global(machine, state->zready); + state_save_register_global(machine, state->busreq); - state_save_register_global(machine, portA_in); - state_save_register_global(machine, portA_out); - state_save_register_global(machine, address); - state_save_register_global(machine, spacecr_prot_value); - state_save_register_global(machine, protection_value); + state_save_register_global(machine, state->portA_in); + state_save_register_global(machine, state->portA_out); + state_save_register_global(machine, state->address); + state_save_register_global(machine, state->spacecr_prot_value); + state_save_register_global(machine, state->protection_value); } MACHINE_RESET( taitosj ) { + taitosj_state *state = machine->driver_data(); address_space *space = cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM); /* set the default ROM bank (many games only have one bank and */ /* never write to the bank selector register) */ taitosj_bankswitch_w(space, 0, 0); - zaccept = 1; - zready = 0; - busreq = 0; + state->zaccept = 1; + state->zready = 0; + state->busreq = 0; if (machine->device("mcu") != NULL) cputag_set_input_line(machine, "mcu", 0, CLEAR_LINE); - spacecr_prot_value = 0; + state->spacecr_prot_value = 0; } @@ -104,17 +98,19 @@ READ8_HANDLER( taitosj_fake_status_r ) /* timer callback : */ READ8_HANDLER( taitosj_mcu_data_r ) { - LOG(("%04x: protection read %02x\n",cpu_get_pc(space->cpu),toz80)); - zaccept = 1; - return toz80; + taitosj_state *state = space->machine->driver_data(); + LOG(("%04x: protection read %02x\n",cpu_get_pc(space->cpu),state->toz80)); + state->zaccept = 1; + return state->toz80; } /* timer callback : */ static TIMER_CALLBACK( taitosj_mcu_real_data_w ) { - zready = 1; + taitosj_state *state = machine->driver_data(); + state->zready = 1; cputag_set_input_line(machine, "mcu", 0, ASSERT_LINE); - fromz80 = param; + state->fromz80 = param; } WRITE8_HANDLER( taitosj_mcu_data_w ) @@ -127,24 +123,27 @@ WRITE8_HANDLER( taitosj_mcu_data_w ) READ8_HANDLER( taitosj_mcu_status_r ) { + taitosj_state *state = space->machine->driver_data(); /* temporarily boost the interleave to sync things up */ cpuexec_boost_interleave(space->machine, attotime::zero, attotime::from_usec(10)); /* bit 0 = the 68705 has read data from the Z80 */ /* bit 1 = the 68705 has written data for the Z80 */ - return ~((zready << 0) | (zaccept << 1)); + return ~((state->zready << 0) | (state->zaccept << 1)); } READ8_HANDLER( taitosj_68705_portA_r ) { - LOG(("%04x: 68705 port A read %02x\n",cpu_get_pc(space->cpu),portA_in)); - return portA_in; + taitosj_state *state = space->machine->driver_data(); + LOG(("%04x: 68705 port A read %02x\n",cpu_get_pc(space->cpu),state->portA_in)); + return state->portA_in; } WRITE8_HANDLER( taitosj_68705_portA_w ) { + taitosj_state *state = space->machine->driver_data(); LOG(("%04x: 68705 port A write %02x\n",cpu_get_pc(space->cpu),data)); - portA_out = data; + state->portA_out = data; } @@ -177,18 +176,21 @@ READ8_HANDLER( taitosj_68705_portB_r ) /* timer callback : 68705 is going to read data from the Z80 */ static TIMER_CALLBACK( taitosj_mcu_data_real_r ) { - zready = 0; + taitosj_state *state = machine->driver_data(); + state->zready = 0; } /* timer callback : 68705 is writing data for the Z80 */ static TIMER_CALLBACK( taitosj_mcu_status_real_w ) { - toz80 = param; - zaccept = 0; + taitosj_state *state = machine->driver_data(); + state->toz80 = param; + state->zaccept = 0; } WRITE8_HANDLER( taitosj_68705_portB_w ) { + taitosj_state *state = space->machine->driver_data(); LOG(("%04x: 68705 port B write %02x\n", cpu_get_pc(space->cpu), data)); if (~data & 0x01) @@ -200,45 +202,45 @@ WRITE8_HANDLER( taitosj_68705_portB_w ) /* 68705 is going to read data from the Z80 */ timer_call_after_resynch(space->machine, NULL, 0, taitosj_mcu_data_real_r); cputag_set_input_line(space->machine, "mcu", 0, CLEAR_LINE); - portA_in = fromz80; - LOG(("%04x: 68705 <- Z80 %02x\n", cpu_get_pc(space->cpu), portA_in)); + state->portA_in = state->fromz80; + LOG(("%04x: 68705 <- Z80 %02x\n", cpu_get_pc(space->cpu), state->portA_in)); } if (~data & 0x08) - busreq = 1; + state->busreq = 1; else - busreq = 0; + state->busreq = 0; if (~data & 0x04) { - LOG(("%04x: 68705 -> Z80 %02x\n", cpu_get_pc(space->cpu), portA_out)); + LOG(("%04x: 68705 -> Z80 %02x\n", cpu_get_pc(space->cpu), state->portA_out)); /* 68705 is writing data for the Z80 */ - timer_call_after_resynch(space->machine, NULL, portA_out, taitosj_mcu_status_real_w); + timer_call_after_resynch(space->machine, NULL, state->portA_out, taitosj_mcu_status_real_w); } if (~data & 0x10) { address_space *cpu0space = cputag_get_address_space(space->machine, "maincpu", ADDRESS_SPACE_PROGRAM); - LOG(("%04x: 68705 write %02x to address %04x\n",cpu_get_pc(space->cpu), portA_out, address)); + LOG(("%04x: 68705 write %02x to state->address %04x\n",cpu_get_pc(space->cpu), state->portA_out, state->address)); - cpu0space->write_byte(address, portA_out); + cpu0space->write_byte(state->address, state->portA_out); /* increase low 8 bits of latched address for burst writes */ - address = (address & 0xff00) | ((address + 1) & 0xff); + state->address = (state->address & 0xff00) | ((state->address + 1) & 0xff); } if (~data & 0x20) { address_space *cpu0space = cputag_get_address_space(space->machine, "maincpu", ADDRESS_SPACE_PROGRAM); - portA_in = cpu0space->read_byte(address); - LOG(("%04x: 68705 read %02x from address %04x\n", cpu_get_pc(space->cpu), portA_in, address)); + state->portA_in = cpu0space->read_byte(state->address); + LOG(("%04x: 68705 read %02x from state->address %04x\n", cpu_get_pc(space->cpu), state->portA_in, state->address)); } if (~data & 0x40) { - LOG(("%04x: 68705 address low %02x\n", cpu_get_pc(space->cpu), portA_out)); - address = (address & 0xff00) | portA_out; + LOG(("%04x: 68705 state->address low %02x\n", cpu_get_pc(space->cpu), state->portA_out)); + state->address = (state->address & 0xff00) | state->portA_out; } if (~data & 0x80) { - LOG(("%04x: 68705 address high %02x\n", cpu_get_pc(space->cpu), portA_out)); - address = (address & 0x00ff) | (portA_out << 8); + LOG(("%04x: 68705 state->address high %02x\n", cpu_get_pc(space->cpu), state->portA_out)); + state->address = (state->address & 0x00ff) | (state->portA_out << 8); } } @@ -254,9 +256,10 @@ WRITE8_HANDLER( taitosj_68705_portB_w ) READ8_HANDLER( taitosj_68705_portC_r ) { + taitosj_state *state = space->machine->driver_data(); int res; - res = (zready << 0) | (zaccept << 1) | ((busreq^1) << 2); + res = (state->zready << 0) | (state->zaccept << 1) | ((state->busreq^1) << 2); LOG(("%04x: 68705 port C read %02x\n",cpu_get_pc(space->cpu),res)); return res; } @@ -266,14 +269,15 @@ READ8_HANDLER( taitosj_68705_portC_r ) READ8_HANDLER( spacecr_prot_r ) { + taitosj_state *state = space->machine->driver_data(); int pc = cpu_get_pc(space->cpu); if( pc != 0x368A && pc != 0x36A6 ) logerror("Read protection from an unknown location: %04X\n",pc); - spacecr_prot_value ^= 0xff; + state->spacecr_prot_value ^= 0xff; - return spacecr_prot_value; + return state->spacecr_prot_value; } @@ -281,35 +285,38 @@ READ8_HANDLER( spacecr_prot_r ) WRITE8_HANDLER( alpine_protection_w ) { + taitosj_state *state = space->machine->driver_data(); switch (data) { case 0x05: - protection_value = 0x18; + state->protection_value = 0x18; break; case 0x07: case 0x0c: case 0x0f: - protection_value = 0x00; /* not used as far as I can tell */ + state->protection_value = 0x00; /* not used as far as I can tell */ break; case 0x16: - protection_value = 0x08; + state->protection_value = 0x08; break; case 0x1d: - protection_value = 0x18; + state->protection_value = 0x18; break; default: - protection_value = data; /* not used as far as I can tell */ + state->protection_value = data; /* not used as far as I can tell */ break; } } WRITE8_HANDLER( alpinea_bankswitch_w ) { + taitosj_state *state = space->machine->driver_data(); taitosj_bankswitch_w(space, offset, data); - protection_value = data >> 2; + state->protection_value = data >> 2; } READ8_HANDLER( alpine_port_2_r ) { - return input_port_read(space->machine, "IN2") | protection_value; + taitosj_state *state = space->machine->driver_data(); + return input_port_read(space->machine, "IN2") | state->protection_value; } diff --git a/src/mame/video/crbaloon.c b/src/mame/video/crbaloon.c index 28f02a24e18..549bc902a30 100644 --- a/src/mame/video/crbaloon.c +++ b/src/mame/video/crbaloon.c @@ -10,15 +10,6 @@ #include "includes/crbaloon.h" -UINT8 *crbaloon_videoram; -UINT8 *crbaloon_colorram; -UINT8 *crbaloon_spriteram; - -static UINT16 crbaloon_collision_address; -static UINT8 crbaloon_collision_address_clear; -static tilemap_t *bg_tilemap; - - /*************************************************************************** Convert the color PROMs into a more useable format. @@ -58,52 +49,59 @@ PALETTE_INIT( crbaloon ) WRITE8_HANDLER( crbaloon_videoram_w ) { - crbaloon_videoram[offset] = data; - tilemap_mark_tile_dirty(bg_tilemap, offset); + crbaloon_state *state = space->machine->driver_data(); + state->videoram[offset] = data; + tilemap_mark_tile_dirty(state->bg_tilemap, offset); } WRITE8_HANDLER( crbaloon_colorram_w ) { - crbaloon_colorram[offset] = data; - tilemap_mark_tile_dirty(bg_tilemap, offset); + crbaloon_state *state = space->machine->driver_data(); + state->colorram[offset] = data; + tilemap_mark_tile_dirty(state->bg_tilemap, offset); } static TILE_GET_INFO( get_bg_tile_info ) { - int code = crbaloon_videoram[tile_index]; - int color = crbaloon_colorram[tile_index] & 0x0f; + crbaloon_state *state = machine->driver_data(); + int code = state->videoram[tile_index]; + int color = state->colorram[tile_index] & 0x0f; SET_TILE_INFO(0, code, color, 0); } VIDEO_START( crbaloon ) { - bg_tilemap = tilemap_create(machine, get_bg_tile_info, tilemap_scan_rows_flip_xy, 8, 8, 32, 32); + crbaloon_state *state = machine->driver_data(); + state->bg_tilemap = tilemap_create(machine, get_bg_tile_info, tilemap_scan_rows_flip_xy, 8, 8, 32, 32); - state_save_register_global(machine, crbaloon_collision_address); - state_save_register_global(machine, crbaloon_collision_address_clear); + state_save_register_global(machine, state->collision_address); + state_save_register_global(machine, state->collision_address_clear); } -UINT16 crbaloon_get_collision_address(void) +UINT16 crbaloon_get_collision_address(running_machine *machine) { - return crbaloon_collision_address_clear ? 0xffff : crbaloon_collision_address; + crbaloon_state *state = machine->driver_data(); + return state->collision_address_clear ? 0xffff : state->collision_address; } -void crbaloon_set_clear_collision_address(int _crbaloon_collision_address_clear) +void crbaloon_set_clear_collision_address(running_machine *machine, int _crbaloon_collision_address_clear) { - crbaloon_collision_address_clear = !_crbaloon_collision_address_clear; /* active LO */ + crbaloon_state *state = machine->driver_data(); + state->collision_address_clear = !_crbaloon_collision_address_clear; /* active LO */ } static void draw_sprite_and_check_collision(running_machine *machine, bitmap_t *bitmap) { + crbaloon_state *state = machine->driver_data(); int y; - UINT8 code = crbaloon_spriteram[0] & 0x0f; - UINT8 color = crbaloon_spriteram[0] >> 4; - UINT8 sy = crbaloon_spriteram[2] - 32; + UINT8 code = state->spriteram[0] & 0x0f; + UINT8 color = state->spriteram[0] >> 4; + UINT8 sy = state->spriteram[2] - 32; UINT8 *gfx = machine->region("gfx2")->base() + (code << 7); @@ -112,13 +110,13 @@ static void draw_sprite_and_check_collision(running_machine *machine, bitmap_t * sy += 32; /* assume no collision */ - crbaloon_collision_address = 0xffff; + state->collision_address = 0xffff; for (y = 0x1f; y >= 0; y--) { int x; UINT8 data = 0; - UINT8 sx = crbaloon_spriteram[1]; + UINT8 sx = state->spriteram[1]; for (x = 0x1f; x >= 0; x--) { @@ -136,7 +134,7 @@ static void draw_sprite_and_check_collision(running_machine *machine, bitmap_t * if (*BITMAP_ADDR16(bitmap, sy, sx) & 0x01) /* compute the collision address -- the +1 is via observation of the game code, probably wrong for cocktail mode */ - crbaloon_collision_address = ((((sy ^ 0xff) >> 3) << 5) | ((sx ^ 0xff) >> 3)) + 1; + state->collision_address = ((((sy ^ 0xff) >> 3) << 5) | ((sx ^ 0xff) >> 3)) + 1; *BITMAP_ADDR16(bitmap, sy, sx) = (color << 1) | 1; } @@ -152,7 +150,8 @@ static void draw_sprite_and_check_collision(running_machine *machine, bitmap_t * VIDEO_UPDATE( crbaloon ) { - tilemap_draw(bitmap, cliprect, bg_tilemap, 0, 0); + crbaloon_state *state = screen->machine->driver_data(); + tilemap_draw(bitmap, cliprect, state->bg_tilemap, 0, 0); draw_sprite_and_check_collision(screen->machine, bitmap); diff --git a/src/mame/video/darkmist.c b/src/mame/video/darkmist.c index 165b6cb4f4d..0358cc6d58a 100644 --- a/src/mame/video/darkmist.c +++ b/src/mame/video/darkmist.c @@ -2,8 +2,6 @@ #include "includes/darkmist.h" -UINT8 *darkmist_scroll; -UINT8 *darkmist_spritebank; /* vis. flags */ @@ -12,7 +10,6 @@ UINT8 *darkmist_spritebank; #define DISPLAY_BG 4 #define DISPLAY_TXT 16 -static tilemap_t *bgtilemap, *fgtilemap, *txtilemap; static TILE_GET_INFO( get_bgtile_info ) { @@ -122,35 +119,37 @@ static void set_pens(running_machine *machine) VIDEO_START(darkmist) { - bgtilemap = tilemap_create( machine, get_bgtile_info,tilemap_scan_rows,16,16,512,64 ); - fgtilemap = tilemap_create( machine, get_fgtile_info,tilemap_scan_rows,16,16,64,256 ); - txtilemap = tilemap_create( machine, get_txttile_info,tilemap_scan_rows,8,8,32,32 ); - tilemap_set_transparent_pen(fgtilemap, 0); - tilemap_set_transparent_pen(txtilemap, 0); + darkmist_state *state = machine->driver_data(); + state->bgtilemap = tilemap_create( machine, get_bgtile_info,tilemap_scan_rows,16,16,512,64 ); + state->fgtilemap = tilemap_create( machine, get_fgtile_info,tilemap_scan_rows,16,16,64,256 ); + state->txtilemap = tilemap_create( machine, get_txttile_info,tilemap_scan_rows,8,8,32,32 ); + tilemap_set_transparent_pen(state->fgtilemap, 0); + tilemap_set_transparent_pen(state->txtilemap, 0); } VIDEO_UPDATE( darkmist) { + darkmist_state *state = screen->machine->driver_data(); UINT8 *spriteram = screen->machine->generic.spriteram.u8; -#define DM_GETSCROLL(n) (((darkmist_scroll[(n)]<<1)&0xff) + ((darkmist_scroll[(n)]&0x80)?1:0) +( ((darkmist_scroll[(n)-1]<<4) | (darkmist_scroll[(n)-1]<<12) )&0xff00)) +#define DM_GETSCROLL(n) (((state->scroll[(n)]<<1)&0xff) + ((state->scroll[(n)]&0x80)?1:0) +( ((state->scroll[(n)-1]<<4) | (state->scroll[(n)-1]<<12) )&0xff00)) set_pens(screen->machine); - tilemap_set_scrollx(bgtilemap, 0, DM_GETSCROLL(0x2)); - tilemap_set_scrolly(bgtilemap, 0, DM_GETSCROLL(0x6)); - tilemap_set_scrollx(fgtilemap, 0, DM_GETSCROLL(0xa)); - tilemap_set_scrolly(fgtilemap, 0, DM_GETSCROLL(0xe)); + tilemap_set_scrollx(state->bgtilemap, 0, DM_GETSCROLL(0x2)); + tilemap_set_scrolly(state->bgtilemap, 0, DM_GETSCROLL(0x6)); + tilemap_set_scrollx(state->fgtilemap, 0, DM_GETSCROLL(0xa)); + tilemap_set_scrolly(state->fgtilemap, 0, DM_GETSCROLL(0xe)); bitmap_fill(bitmap, cliprect, get_black_pen(screen->machine)); - if(darkmist_hw & DISPLAY_BG) - tilemap_draw(bitmap,cliprect,bgtilemap, 0,0); + if(state->hw & DISPLAY_BG) + tilemap_draw(bitmap,cliprect,state->bgtilemap, 0,0); - if(darkmist_hw & DISPLAY_FG) - tilemap_draw(bitmap,cliprect,fgtilemap, 0,0); + if(state->hw & DISPLAY_FG) + tilemap_draw(bitmap,cliprect,state->fgtilemap, 0,0); - if(darkmist_hw & DISPLAY_SPR) + if(state->hw & DISPLAY_SPR) { /* Sprites @@ -172,7 +171,7 @@ VIDEO_UPDATE( darkmist) tile=spriteram[i+0]; if(spriteram[i+1]&0x20) - tile += (*darkmist_spritebank << 8); + tile += (*state->spritebank << 8); palette=((spriteram[i+1])>>1)&0xf; @@ -191,10 +190,10 @@ VIDEO_UPDATE( darkmist) } } - if(darkmist_hw & DISPLAY_TXT) + if(state->hw & DISPLAY_TXT) { - tilemap_mark_all_tiles_dirty(txtilemap); - tilemap_draw(bitmap,cliprect,txtilemap, 0,0); + tilemap_mark_all_tiles_dirty(state->txtilemap); + tilemap_draw(bitmap,cliprect,state->txtilemap, 0,0); } diff --git a/src/mame/video/exzisus.c b/src/mame/video/exzisus.c index 6fa0804028b..bb96957a2f3 100644 --- a/src/mame/video/exzisus.c +++ b/src/mame/video/exzisus.c @@ -12,64 +12,63 @@ Functions to emulate the video hardware of the machine. #include "includes/exzisus.h" -UINT8 *exzisus_videoram0; -UINT8 *exzisus_videoram1; -UINT8 *exzisus_objectram0; -UINT8 *exzisus_objectram1; -size_t exzisus_objectram_size0; -size_t exzisus_objectram_size1; - - - /*************************************************************************** Memory handlers ***************************************************************************/ READ8_HANDLER ( exzisus_videoram_0_r ) { - return exzisus_videoram0[offset]; + exzisus_state *state = space->machine->driver_data(); + return state->videoram0[offset]; } READ8_HANDLER ( exzisus_videoram_1_r ) { - return exzisus_videoram1[offset]; + exzisus_state *state = space->machine->driver_data(); + return state->videoram1[offset]; } READ8_HANDLER ( exzisus_objectram_0_r ) { - return exzisus_objectram0[offset]; + exzisus_state *state = space->machine->driver_data(); + return state->objectram0[offset]; } READ8_HANDLER ( exzisus_objectram_1_r ) { - return exzisus_objectram1[offset]; + exzisus_state *state = space->machine->driver_data(); + return state->objectram1[offset]; } WRITE8_HANDLER( exzisus_videoram_0_w ) { - exzisus_videoram0[offset] = data; + exzisus_state *state = space->machine->driver_data(); + state->videoram0[offset] = data; } WRITE8_HANDLER( exzisus_videoram_1_w ) { - exzisus_videoram1[offset] = data; + exzisus_state *state = space->machine->driver_data(); + state->videoram1[offset] = data; } WRITE8_HANDLER( exzisus_objectram_0_w ) { - exzisus_objectram0[offset] = data; + exzisus_state *state = space->machine->driver_data(); + state->objectram0[offset] = data; } WRITE8_HANDLER( exzisus_objectram_1_w ) { - exzisus_objectram1[offset] = data; + exzisus_state *state = space->machine->driver_data(); + state->objectram1[offset] = data; } @@ -79,6 +78,7 @@ WRITE8_HANDLER( exzisus_objectram_1_w ) VIDEO_UPDATE( exzisus ) { + exzisus_state *state = screen->machine->driver_data(); int offs; int sx, sy, xc, yc; int gfx_num, gfx_attr, gfx_offs; @@ -88,25 +88,25 @@ VIDEO_UPDATE( exzisus ) /* ---------- 1st TC0010VCU ---------- */ sx = 0; - for (offs = 0 ; offs < exzisus_objectram_size0 ; offs += 4) + for (offs = 0 ; offs < state->objectram_size0 ; offs += 4) { int height; /* Skip empty sprites. */ - if ( !(*(UINT32 *)(&exzisus_objectram0[offs])) ) + if ( !(*(UINT32 *)(&state->objectram0[offs])) ) { continue; } - gfx_num = exzisus_objectram0[offs + 1]; - gfx_attr = exzisus_objectram0[offs + 3]; + gfx_num = state->objectram0[offs + 1]; + gfx_attr = state->objectram0[offs + 3]; if ((gfx_num & 0x80) == 0) /* 16x16 sprites */ { gfx_offs = ((gfx_num & 0x7f) << 3); height = 2; - sx = exzisus_objectram0[offs + 2]; + sx = state->objectram0[offs + 2]; sx |= (gfx_attr & 0x40) << 2; } else /* tilemaps (each sprite is a 16x256 column) */ @@ -120,12 +120,12 @@ VIDEO_UPDATE( exzisus ) } else { - sx = exzisus_objectram0[offs + 2]; + sx = state->objectram0[offs + 2]; sx |= (gfx_attr & 0x40) << 2; } } - sy = 256 - (height << 3) - (exzisus_objectram0[offs]); + sy = 256 - (height << 3) - (state->objectram0[offs]); for (xc = 0 ; xc < 2 ; xc++) { @@ -134,8 +134,8 @@ VIDEO_UPDATE( exzisus ) { int code, color, x, y; - code = (exzisus_videoram0[goffs + 1] << 8) | exzisus_videoram0[goffs]; - color = (exzisus_videoram0[goffs + 1] >> 6) | (gfx_attr & 0x0f); + code = (state->videoram0[goffs + 1] << 8) | state->videoram0[goffs]; + color = (state->videoram0[goffs + 1] >> 6) | (gfx_attr & 0x0f); x = (sx + (xc << 3)) & 0xff; y = (sy + (yc << 3)) & 0xff; @@ -158,25 +158,25 @@ VIDEO_UPDATE( exzisus ) /* ---------- 2nd TC0010VCU ---------- */ sx = 0; - for (offs = 0 ; offs < exzisus_objectram_size1 ; offs += 4) + for (offs = 0 ; offs < state->objectram_size1 ; offs += 4) { int height; /* Skip empty sprites. */ - if ( !(*(UINT32 *)(&exzisus_objectram1[offs])) ) + if ( !(*(UINT32 *)(&state->objectram1[offs])) ) { continue; } - gfx_num = exzisus_objectram1[offs + 1]; - gfx_attr = exzisus_objectram1[offs + 3]; + gfx_num = state->objectram1[offs + 1]; + gfx_attr = state->objectram1[offs + 3]; if ((gfx_num & 0x80) == 0) /* 16x16 sprites */ { gfx_offs = ((gfx_num & 0x7f) << 3); height = 2; - sx = exzisus_objectram1[offs + 2]; + sx = state->objectram1[offs + 2]; sx |= (gfx_attr & 0x40) << 2; } else /* tilemaps (each sprite is a 16x256 column) */ @@ -190,11 +190,11 @@ VIDEO_UPDATE( exzisus ) } else { - sx = exzisus_objectram1[offs + 2]; + sx = state->objectram1[offs + 2]; sx |= (gfx_attr & 0x40) << 2; } } - sy = 256 - (height << 3) - (exzisus_objectram1[offs]); + sy = 256 - (height << 3) - (state->objectram1[offs]); for (xc = 0 ; xc < 2 ; xc++) { @@ -203,8 +203,8 @@ VIDEO_UPDATE( exzisus ) { int code, color, x, y; - code = (exzisus_videoram1[goffs + 1] << 8) | exzisus_videoram1[goffs]; - color = (exzisus_videoram1[goffs + 1] >> 6) | (gfx_attr & 0x0f); + code = (state->videoram1[goffs + 1] << 8) | state->videoram1[goffs]; + color = (state->videoram1[goffs + 1] >> 6) | (gfx_attr & 0x0f); x = (sx + (xc << 3)) & 0xff; y = (sy + (yc << 3)) & 0xff; diff --git a/src/mame/video/galastrm.c b/src/mame/video/galastrm.c index e546e5ed5ca..1176de2f726 100644 --- a/src/mame/video/galastrm.c +++ b/src/mame/video/galastrm.c @@ -6,21 +6,6 @@ #define X_OFFSET 96 #define Y_OFFSET 60 -struct tempsprite -{ - int gfx; - int code,color; - int flipx,flipy; - int x,y; - int zoomx,zoomy; - int primask; -}; -static struct tempsprite *spritelist; -static bitmap_t *tmpbitmaps; -static bitmap_t *polybitmap; -static poly_manager *poly; -INT16 galastrm_tc0610_ctrl_reg[2][8]; - typedef struct _poly_extra_data poly_extra_data; struct _poly_extra_data { @@ -39,17 +24,19 @@ struct _polygon static void galastrm_exit(running_machine &machine) { - poly_free(poly); + galastrm_state *state = machine.driver_data(); + poly_free(state->poly); } VIDEO_START( galastrm ) { - spritelist = auto_alloc_array(machine, struct tempsprite, 0x4000); + galastrm_state *state = machine->driver_data(); + state->spritelist = auto_alloc_array(machine, struct tempsprite, 0x4000); - tmpbitmaps = machine->primary_screen->alloc_compatible_bitmap(); - polybitmap = machine->primary_screen->alloc_compatible_bitmap(); + state->tmpbitmaps = machine->primary_screen->alloc_compatible_bitmap(); + state->polybitmap = machine->primary_screen->alloc_compatible_bitmap(); - poly = poly_alloc(machine, 16, sizeof(poly_extra_data), POLYFLAG_ALLOW_QUADS); + state->poly = poly_alloc(machine, 16, sizeof(poly_extra_data), POLYFLAG_ALLOW_QUADS); machine->add_notifier(MACHINE_NOTIFY_EXIT, galastrm_exit); } @@ -99,10 +86,9 @@ Heavy use is made of sprite zooming. ********************************************************/ -static struct tempsprite *sprite_ptr_pre; - static void draw_sprites_pre(running_machine *machine, int x_offs, int y_offs) { + galastrm_state *state = machine->driver_data(); UINT32 *spriteram32 = machine->generic.spriteram.u32; UINT16 *spritemap = (UINT16 *)machine->region("user1")->base(); int offs, data, tilenum, color, flipx, flipy; @@ -114,7 +100,7 @@ static void draw_sprites_pre(running_machine *machine, int x_offs, int y_offs) /* pdrawgfx() needs us to draw sprites front to back, so we have to build a list while processing sprite ram and then draw them all at the end */ - sprite_ptr_pre = spritelist; + state->sprite_ptr_pre = state->spritelist; for (offs = (machine->generic.spriteram_size/4-4);offs >= 0;offs -= 4) { @@ -189,18 +175,18 @@ static void draw_sprites_pre(running_machine *machine, int x_offs, int y_offs) flipy = !flipy; } - sprite_ptr_pre->gfx = 0; - sprite_ptr_pre->code = code; - sprite_ptr_pre->color = color; - sprite_ptr_pre->flipx = !flipx; - sprite_ptr_pre->flipy = flipy; - sprite_ptr_pre->x = curx; - sprite_ptr_pre->y = cury; - sprite_ptr_pre->zoomx = zx << 12; - sprite_ptr_pre->zoomy = zy << 12; - sprite_ptr_pre->primask = priority; + state->sprite_ptr_pre->gfx = 0; + state->sprite_ptr_pre->code = code; + state->sprite_ptr_pre->color = color; + state->sprite_ptr_pre->flipx = !flipx; + state->sprite_ptr_pre->flipy = flipy; + state->sprite_ptr_pre->x = curx; + state->sprite_ptr_pre->y = cury; + state->sprite_ptr_pre->zoomx = zx << 12; + state->sprite_ptr_pre->zoomy = zy << 12; + state->sprite_ptr_pre->primask = priority; - sprite_ptr_pre++; + state->sprite_ptr_pre++; } if (bad_chunks) logerror("Sprite number %04x had %02x invalid chunks\n",tilenum,bad_chunks); @@ -209,9 +195,10 @@ logerror("Sprite number %04x had %02x invalid chunks\n",tilenum,bad_chunks); static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect, const int *primasks, int priority) { - struct tempsprite *sprite_ptr = sprite_ptr_pre; + galastrm_state *state = machine->driver_data(); + struct tempsprite *sprite_ptr = state->sprite_ptr_pre; - while (sprite_ptr != spritelist) + while (sprite_ptr != state->spritelist) { sprite_ptr--; @@ -257,19 +244,19 @@ static void tc0610_draw_scanline(void *dest, INT32 scanline, const poly_extent * static void tc0610_rotate_draw(running_machine *machine, bitmap_t *bitmap, bitmap_t *srcbitmap, const rectangle *clip) { - poly_extra_data *extra = (poly_extra_data *)poly_get_extra_data(poly); + galastrm_state *state = machine->driver_data(); + poly_extra_data *extra = (poly_extra_data *)poly_get_extra_data(state->poly); poly_draw_scanline_func callback; poly_vertex vert[4]; - int rsx = galastrm_tc0610_ctrl_reg[1][0]; - int rsy = galastrm_tc0610_ctrl_reg[1][1]; - const int rzx = galastrm_tc0610_ctrl_reg[1][2]; - const int rzy = galastrm_tc0610_ctrl_reg[1][3]; - const int ryx = galastrm_tc0610_ctrl_reg[1][5]; - const int ryy = galastrm_tc0610_ctrl_reg[1][4]; + int rsx = state->tc0610_ctrl_reg[1][0]; + int rsy = state->tc0610_ctrl_reg[1][1]; + const int rzx = state->tc0610_ctrl_reg[1][2]; + const int rzy = state->tc0610_ctrl_reg[1][3]; + const int ryx = state->tc0610_ctrl_reg[1][5]; + const int ryy = state->tc0610_ctrl_reg[1][4]; const int lx = srcbitmap->width; const int ly = srcbitmap->height; - static int rsxb=0, rsyb=0, rsxoffs=0, rsyoffs=0; int yx, /*yy,*/ zx, zy, pxx, pxy, pyx, pyy; float /*ssn, scs, ysn, ycs,*/ zsn, zcs; @@ -300,48 +287,48 @@ static void tc0610_rotate_draw(running_machine *machine, bitmap_t *bitmap, bitma zcs = ((float)pxx/4096.0) / (float)(lx / 2); - if ((rsx == -240 && rsy == 1072) || !galastrm_tc0610_ctrl_reg[1][7]) + if ((rsx == -240 && rsy == 1072) || !state->tc0610_ctrl_reg[1][7]) { - rsxoffs = 0; - rsyoffs = 0; + state->rsxoffs = 0; + state->rsyoffs = 0; } else { - if (rsx > rsxb && rsxb < 0 && rsx-rsxb > 0x8000) + if (rsx > state->rsxb && state->rsxb < 0 && rsx-state->rsxb > 0x8000) { - if (rsxoffs == 0) - rsxoffs = -0x10000; + if (state->rsxoffs == 0) + state->rsxoffs = -0x10000; else - rsxoffs = 0; + state->rsxoffs = 0; } - if (rsx < rsxb && rsxb > 0 && rsxb-rsx > 0x8000) + if (rsx < state->rsxb && state->rsxb > 0 && state->rsxb-rsx > 0x8000) { - if (rsxoffs == 0) - rsxoffs = 0x10000-1; + if (state->rsxoffs == 0) + state->rsxoffs = 0x10000-1; else - rsxoffs = 0; + state->rsxoffs = 0; } - if (rsy > rsyb && rsyb < 0 && rsy-rsyb > 0x8000) + if (rsy > state->rsyb && state->rsyb < 0 && rsy-state->rsyb > 0x8000) { - if (rsyoffs == 0) - rsyoffs = -0x10000; + if (state->rsyoffs == 0) + state->rsyoffs = -0x10000; else - rsyoffs = 0; + state->rsyoffs = 0; } - if (rsy < rsyb && rsyb > 0 && rsyb-rsy > 0x8000) + if (rsy < state->rsyb && state->rsyb > 0 && state->rsyb-rsy > 0x8000) { - if (rsyoffs == 0) - rsyoffs = 0x10000-1; + if (state->rsyoffs == 0) + state->rsyoffs = 0x10000-1; else - rsyoffs = 0; + state->rsyoffs = 0; } } - rsxb = rsx; - rsyb = rsy; - if (rsxoffs) rsx += rsxoffs; - if (rsyoffs) rsy += rsyoffs; - if (rsx < -0x14000 || rsx >= 0x14000) rsxoffs = 0; - if (rsy < -0x14000 || rsy >= 0x14000) rsyoffs = 0; + state->rsxb = rsx; + state->rsyb = rsy; + if (state->rsxoffs) rsx += state->rsxoffs; + if (state->rsyoffs) rsy += state->rsyoffs; + if (rsx < -0x14000 || rsx >= 0x14000) state->rsxoffs = 0; + if (rsy < -0x14000 || rsy >= 0x14000) state->rsyoffs = 0; pxx = 0; @@ -355,7 +342,7 @@ static void tc0610_rotate_draw(running_machine *machine, bitmap_t *bitmap, bitma //ysn = 0.0; //ycs = 0.0; - if (galastrm_tc0610_ctrl_reg[1][7]) + if (state->tc0610_ctrl_reg[1][7]) { if (ryx != 0 || ryy != 0) @@ -441,7 +428,7 @@ static void tc0610_rotate_draw(running_machine *machine, bitmap_t *bitmap, bitma extra->texbase = srcbitmap; callback = tc0610_draw_scanline; - poly_render_quad(poly, bitmap, clip, callback, 2, &vert[0], &vert[1], &vert[2], &vert[3]); + poly_render_quad(state->poly, bitmap, clip, callback, 2, &vert[0], &vert[1], &vert[2], &vert[3]); } /************************************************************** @@ -450,6 +437,7 @@ static void tc0610_rotate_draw(running_machine *machine, bitmap_t *bitmap, bitma VIDEO_UPDATE( galastrm ) { + galastrm_state *state = screen->machine->driver_data(); device_t *tc0100scn = screen->machine->device("tc0100scn"); device_t *tc0480scp = screen->machine->device("tc0480scp"); UINT8 layer[5]; @@ -480,7 +468,7 @@ VIDEO_UPDATE( galastrm ) bitmap_fill(bitmap, cliprect, 0); bitmap_fill(priority_bitmap, &clip, 0); - bitmap_fill(tmpbitmaps, &clip, 0); + bitmap_fill(state->tmpbitmaps, &clip, 0); tc0100scn_tilemap_draw(tc0100scn, bitmap, cliprect, pivlayer[0], 0, 0); tc0100scn_tilemap_draw(tc0100scn, bitmap, cliprect, pivlayer[1], 0, 0); @@ -488,17 +476,17 @@ VIDEO_UPDATE( galastrm ) #if 0 if (layer[0]==0 && layer[1]==3 && layer[2]==2 && layer[3]==1) { - if (!input_code_pressed(screen->machine, KEYCODE_Z)) tc0480scp_tilemap_draw(tc0480scp, tmpbitmaps, &clip, layer[0], 0, 1); - if (!input_code_pressed(screen->machine, KEYCODE_X)) tc0480scp_tilemap_draw(tc0480scp, tmpbitmaps, &clip, layer[1], 0, 4); - if (!input_code_pressed(screen->machine, KEYCODE_C)) tc0480scp_tilemap_draw(tc0480scp, tmpbitmaps, &clip, layer[2], 0, 4); - if (!input_code_pressed(screen->machine, KEYCODE_V)) tc0480scp_tilemap_draw(tc0480scp, tmpbitmaps, &clip, layer[3], 0, 4); + if (!input_code_pressed(screen->machine, KEYCODE_Z)) tc0480scp_tilemap_draw(tc0480scp, state->tmpbitmaps, &clip, layer[0], 0, 1); + if (!input_code_pressed(screen->machine, KEYCODE_X)) tc0480scp_tilemap_draw(tc0480scp, state->tmpbitmaps, &clip, layer[1], 0, 4); + if (!input_code_pressed(screen->machine, KEYCODE_C)) tc0480scp_tilemap_draw(tc0480scp, state->tmpbitmaps, &clip, layer[2], 0, 4); + if (!input_code_pressed(screen->machine, KEYCODE_V)) tc0480scp_tilemap_draw(tc0480scp, state->tmpbitmaps, &clip, layer[3], 0, 4); } else { - if (!input_code_pressed(screen->machine, KEYCODE_Z)) tc0480scp_tilemap_draw(tc0480scp, tmpbitmaps, &clip, layer[0], 0, 1); - if (!input_code_pressed(screen->machine, KEYCODE_X)) tc0480scp_tilemap_draw(tc0480scp, tmpbitmaps, &clip, layer[1], 0, 2); - if (!input_code_pressed(screen->machine, KEYCODE_C)) tc0480scp_tilemap_draw(tc0480scp, tmpbitmaps, &clip, layer[2], 0, 4); - if (!input_code_pressed(screen->machine, KEYCODE_V)) tc0480scp_tilemap_draw(tc0480scp, tmpbitmaps, &clip, layer[3], 0, 8); + if (!input_code_pressed(screen->machine, KEYCODE_Z)) tc0480scp_tilemap_draw(tc0480scp, state->tmpbitmaps, &clip, layer[0], 0, 1); + if (!input_code_pressed(screen->machine, KEYCODE_X)) tc0480scp_tilemap_draw(tc0480scp, state->tmpbitmaps, &clip, layer[1], 0, 2); + if (!input_code_pressed(screen->machine, KEYCODE_C)) tc0480scp_tilemap_draw(tc0480scp, state->tmpbitmaps, &clip, layer[2], 0, 4); + if (!input_code_pressed(screen->machine, KEYCODE_V)) tc0480scp_tilemap_draw(tc0480scp, state->tmpbitmaps, &clip, layer[3], 0, 8); } if (layer[0]==3 && layer[1]==0 && layer[2]==1 && layer[3]==2) @@ -511,18 +499,18 @@ VIDEO_UPDATE( galastrm ) for (x=0; x < priority_bitmap->width; x++) { pri = BITMAP_ADDR8(priority_bitmap, y, x); - if (!(*pri & 0x02) && *BITMAP_ADDR16(tmpbitmaps, y, x)) + if (!(*pri & 0x02) && *BITMAP_ADDR16(state->tmpbitmaps, y, x)) *pri |= 0x04; } } } draw_sprites_pre(screen->machine, 42-X_OFFSET, -571+Y_OFFSET); - draw_sprites(screen->machine,tmpbitmaps,&clip,primasks,1); + draw_sprites(screen->machine,state->tmpbitmaps,&clip,primasks,1); - copybitmap_trans(bitmap,polybitmap,0,0, 0,0,cliprect,0); - bitmap_fill(polybitmap, &clip, 0); - tc0610_rotate_draw(screen->machine,polybitmap,tmpbitmaps,cliprect); + copybitmap_trans(bitmap,state->polybitmap,0,0, 0,0,cliprect,0); + bitmap_fill(state->polybitmap, &clip, 0); + tc0610_rotate_draw(screen->machine,state->polybitmap,state->tmpbitmaps,cliprect); bitmap_fill(priority_bitmap, cliprect, 0); draw_sprites(screen->machine,bitmap,cliprect,primasks,0); @@ -535,17 +523,17 @@ VIDEO_UPDATE( galastrm ) #else if (layer[0]==0 && layer[1]==3 && layer[2]==2 && layer[3]==1) { - tc0480scp_tilemap_draw(tc0480scp, tmpbitmaps, &clip, layer[0], 0, 1); - tc0480scp_tilemap_draw(tc0480scp, tmpbitmaps, &clip, layer[1], 0, 4); - tc0480scp_tilemap_draw(tc0480scp, tmpbitmaps, &clip, layer[2], 0, 4); - tc0480scp_tilemap_draw(tc0480scp, tmpbitmaps, &clip, layer[3], 0, 4); + tc0480scp_tilemap_draw(tc0480scp, state->tmpbitmaps, &clip, layer[0], 0, 1); + tc0480scp_tilemap_draw(tc0480scp, state->tmpbitmaps, &clip, layer[1], 0, 4); + tc0480scp_tilemap_draw(tc0480scp, state->tmpbitmaps, &clip, layer[2], 0, 4); + tc0480scp_tilemap_draw(tc0480scp, state->tmpbitmaps, &clip, layer[3], 0, 4); } else { - tc0480scp_tilemap_draw(tc0480scp, tmpbitmaps, &clip, layer[0], 0, 1); - tc0480scp_tilemap_draw(tc0480scp, tmpbitmaps, &clip, layer[1], 0, 2); - tc0480scp_tilemap_draw(tc0480scp, tmpbitmaps, &clip, layer[2], 0, 4); - tc0480scp_tilemap_draw(tc0480scp, tmpbitmaps, &clip, layer[3], 0, 8); + tc0480scp_tilemap_draw(tc0480scp, state->tmpbitmaps, &clip, layer[0], 0, 1); + tc0480scp_tilemap_draw(tc0480scp, state->tmpbitmaps, &clip, layer[1], 0, 2); + tc0480scp_tilemap_draw(tc0480scp, state->tmpbitmaps, &clip, layer[2], 0, 4); + tc0480scp_tilemap_draw(tc0480scp, state->tmpbitmaps, &clip, layer[3], 0, 8); } if (layer[0]==3 && layer[1]==0 && layer[2]==1 && layer[3]==2) @@ -558,18 +546,18 @@ VIDEO_UPDATE( galastrm ) for (x=0; x < priority_bitmap->width; x++) { pri = BITMAP_ADDR8(priority_bitmap, y, x); - if (!(*pri & 0x02) && *BITMAP_ADDR16(tmpbitmaps, y, x)) + if (!(*pri & 0x02) && *BITMAP_ADDR16(state->tmpbitmaps, y, x)) *pri |= 0x04; } } } draw_sprites_pre(screen->machine, 42-X_OFFSET, -571+Y_OFFSET); - draw_sprites(screen->machine,tmpbitmaps,&clip,primasks,1); + draw_sprites(screen->machine,state->tmpbitmaps,&clip,primasks,1); - copybitmap_trans(bitmap,polybitmap,0,0, 0,0,cliprect,0); - bitmap_fill(polybitmap, &clip, 0); - tc0610_rotate_draw(screen->machine,polybitmap,tmpbitmaps,cliprect); + copybitmap_trans(bitmap,state->polybitmap,0,0, 0,0,cliprect,0); + bitmap_fill(state->polybitmap, &clip, 0); + tc0610_rotate_draw(screen->machine,state->polybitmap,state->tmpbitmaps,cliprect); bitmap_fill(priority_bitmap, cliprect, 0); draw_sprites(screen->machine,bitmap,cliprect,primasks,0); diff --git a/src/mame/video/gladiatr.c b/src/mame/video/gladiatr.c index 7b5db99f03d..b89ae8395ee 100644 --- a/src/mame/video/gladiatr.c +++ b/src/mame/video/gladiatr.c @@ -7,16 +7,6 @@ #include "emu.h" #include "includes/gladiatr.h" -UINT8 *gladiatr_videoram, *gladiatr_colorram, *gladiatr_textram; - -static int video_attributes; -static int fg_scrollx, fg_scrolly, bg_scrollx, bg_scrolly; -static int sprite_bank, sprite_buffer; - - -static tilemap_t *fg_tilemap, *bg_tilemap; -static int fg_tile_bank, bg_tile_bank; - /*************************************************************************** @@ -26,20 +16,22 @@ static int fg_tile_bank, bg_tile_bank; static TILE_GET_INFO( bg_get_tile_info ) { - UINT8 attr = gladiatr_colorram[tile_index]; + gladiatr_state *state = machine->driver_data(); + UINT8 attr = state->colorram[tile_index]; SET_TILE_INFO( 1, - gladiatr_videoram[tile_index] + ((attr & 0x07) << 8) + (bg_tile_bank << 11), + state->videoram[tile_index] + ((attr & 0x07) << 8) + (state->bg_tile_bank << 11), (attr >> 3) ^ 0x1f, 0); } static TILE_GET_INFO( fg_get_tile_info ) { + gladiatr_state *state = machine->driver_data(); SET_TILE_INFO( 0, - gladiatr_textram[tile_index] + (fg_tile_bank << 8), + state->textram[tile_index] + (state->fg_tile_bank << 8), 0, 0); } @@ -54,27 +46,29 @@ static TILE_GET_INFO( fg_get_tile_info ) VIDEO_START( ppking ) { - bg_tilemap = tilemap_create(machine, bg_get_tile_info,tilemap_scan_rows,8,8,32,64); - fg_tilemap = tilemap_create(machine, fg_get_tile_info,tilemap_scan_rows,8,8,32,64); + gladiatr_state *state = machine->driver_data(); + state->bg_tilemap = tilemap_create(machine, bg_get_tile_info,tilemap_scan_rows,8,8,32,64); + state->fg_tilemap = tilemap_create(machine, fg_get_tile_info,tilemap_scan_rows,8,8,32,64); - tilemap_set_transparent_pen(fg_tilemap,0); + tilemap_set_transparent_pen(state->fg_tilemap,0); - tilemap_set_scroll_cols(bg_tilemap, 0x10); + tilemap_set_scroll_cols(state->bg_tilemap, 0x10); - sprite_bank = 1; + state->sprite_bank = 1; } VIDEO_START( gladiatr ) { - bg_tilemap = tilemap_create(machine, bg_get_tile_info,tilemap_scan_rows,8,8,64,32); - fg_tilemap = tilemap_create(machine, fg_get_tile_info,tilemap_scan_rows,8,8,64,32); + gladiatr_state *state = machine->driver_data(); + state->bg_tilemap = tilemap_create(machine, bg_get_tile_info,tilemap_scan_rows,8,8,64,32); + state->fg_tilemap = tilemap_create(machine, fg_get_tile_info,tilemap_scan_rows,8,8,64,32); - tilemap_set_transparent_pen(fg_tilemap,0); + tilemap_set_transparent_pen(state->fg_tilemap,0); - tilemap_set_scrolldx(bg_tilemap, -0x30, 0x12f); - tilemap_set_scrolldx(fg_tilemap, -0x30, 0x12f); + tilemap_set_scrolldx(state->bg_tilemap, -0x30, 0x12f); + tilemap_set_scrolldx(state->fg_tilemap, -0x30, 0x12f); - sprite_bank = 2; + state->sprite_bank = 2; } @@ -87,20 +81,23 @@ VIDEO_START( gladiatr ) WRITE8_HANDLER( gladiatr_videoram_w ) { - gladiatr_videoram[offset] = data; - tilemap_mark_tile_dirty(bg_tilemap,offset); + gladiatr_state *state = space->machine->driver_data(); + state->videoram[offset] = data; + tilemap_mark_tile_dirty(state->bg_tilemap,offset); } WRITE8_HANDLER( gladiatr_colorram_w ) { - gladiatr_colorram[offset] = data; - tilemap_mark_tile_dirty(bg_tilemap,offset); + gladiatr_state *state = space->machine->driver_data(); + state->colorram[offset] = data; + tilemap_mark_tile_dirty(state->bg_tilemap,offset); } WRITE8_HANDLER( gladiatr_textram_w ) { - gladiatr_textram[offset] = data; - tilemap_mark_tile_dirty(fg_tilemap,offset); + gladiatr_state *state = space->machine->driver_data(); + state->textram[offset] = data; + tilemap_mark_tile_dirty(state->fg_tilemap,offset); } WRITE8_HANDLER( gladiatr_paletteram_w ) @@ -124,69 +121,73 @@ WRITE8_HANDLER( gladiatr_paletteram_w ) WRITE8_HANDLER( gladiatr_spritebuffer_w ) { - sprite_buffer = data & 1; + gladiatr_state *state = space->machine->driver_data(); + state->sprite_buffer = data & 1; } WRITE8_HANDLER( gladiatr_spritebank_w ) { - sprite_bank = (data & 1) ? 4 : 2; + gladiatr_state *state = space->machine->driver_data(); + state->sprite_bank = (data & 1) ? 4 : 2; } WRITE8_HANDLER( ppking_video_registers_w ) { + gladiatr_state *state = space->machine->driver_data(); switch (offset & 0x300) { case 0x000: - tilemap_set_scrolly(bg_tilemap, offset & 0x0f, 0x100-data); + tilemap_set_scrolly(state->bg_tilemap, offset & 0x0f, 0x100-data); break; case 0x200: if (data & 0x80) - fg_scrolly = data + 0x100; + state->fg_scrolly = data + 0x100; else - fg_scrolly = data; + state->fg_scrolly = data; break; case 0x300: - if (fg_tile_bank != (data & 0x03)) + if (state->fg_tile_bank != (data & 0x03)) { - fg_tile_bank = data & 0x03; - tilemap_mark_all_tiles_dirty(fg_tilemap); + state->fg_tile_bank = data & 0x03; + tilemap_mark_all_tiles_dirty(state->fg_tilemap); } - video_attributes = data; + state->video_attributes = data; break; } -//popmessage("%02x %02x",fg_scrolly, video_attributes); +//popmessage("%02x %02x",state->fg_scrolly, state->video_attributes); } WRITE8_HANDLER( gladiatr_video_registers_w ) { + gladiatr_state *state = space->machine->driver_data(); switch (offset) { case 0x000: - fg_scrolly = data; + state->fg_scrolly = data; break; case 0x080: - if (fg_tile_bank != (data & 0x03)) + if (state->fg_tile_bank != (data & 0x03)) { - fg_tile_bank = data & 0x03; - tilemap_mark_all_tiles_dirty(fg_tilemap); + state->fg_tile_bank = data & 0x03; + tilemap_mark_all_tiles_dirty(state->fg_tilemap); } - if (bg_tile_bank != ((data & 0x10) >> 4)) + if (state->bg_tile_bank != ((data & 0x10) >> 4)) { - bg_tile_bank = (data & 0x10) >> 4; - tilemap_mark_all_tiles_dirty(bg_tilemap); + state->bg_tile_bank = (data & 0x10) >> 4; + tilemap_mark_all_tiles_dirty(state->bg_tilemap); } - video_attributes = data; + state->video_attributes = data; break; case 0x100: - fg_scrollx = data; + state->fg_scrollx = data; break; case 0x200: - bg_scrolly = data; + state->bg_scrolly = data; break; case 0x300: - bg_scrollx = data; + state->bg_scrollx = data; break; } } @@ -201,6 +202,7 @@ WRITE8_HANDLER( gladiatr_video_registers_w ) static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect) { + gladiatr_state *state = machine->driver_data(); int offs; for (offs = 0;offs < 0x80;offs += 2) @@ -210,10 +212,10 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const recta {0x0,0x1}, {0x2,0x3}, }; - UINT8 *src = &machine->generic.spriteram.u8[offs + (sprite_buffer << 7)]; + UINT8 *src = &machine->generic.spriteram.u8[offs + (state->sprite_buffer << 7)]; int attributes = src[0x800]; int size = (attributes & 0x10) >> 4; - int bank = (attributes & 0x01) + ((attributes & 0x02) ? sprite_bank : 0); + int bank = (attributes & 0x01) + ((attributes & 0x02) ? state->sprite_bank : 0); int tile_number = (src[0]+256*bank); int sx = src[0x400+1] + 256*(src[0x801]&1) - 0x38; int sy = 240 - src[0x400] - (size ? 16 : 0); @@ -251,7 +253,8 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const recta VIDEO_UPDATE( ppking ) { - tilemap_draw(bitmap,cliprect,bg_tilemap,0,0); + gladiatr_state *state = screen->machine->driver_data(); + tilemap_draw(bitmap,cliprect,state->bg_tilemap,0,0); draw_sprites(screen->machine, bitmap,cliprect); /* the fg layer just selects the upper palette bank on underlying pixels */ @@ -260,13 +263,13 @@ VIDEO_UPDATE( ppking ) int sx = cliprect->min_x; int sy = cliprect->min_y; - tilemap_get_pixmap( fg_tilemap ); - flagsbitmap = tilemap_get_flagsmap( fg_tilemap ); + tilemap_get_pixmap( state->fg_tilemap ); + flagsbitmap = tilemap_get_flagsmap( state->fg_tilemap ); while( sy <= cliprect->max_y ) { int x = sx; - int y = (sy + fg_scrolly) & 0x1ff; + int y = (sy + state->fg_scrolly) & 0x1ff; UINT16 *dest = BITMAP_ADDR16(bitmap, sy, sx); while( x <= cliprect->max_x ) @@ -286,22 +289,23 @@ VIDEO_UPDATE( ppking ) VIDEO_UPDATE( gladiatr ) { - if (video_attributes & 0x20) + gladiatr_state *state = screen->machine->driver_data(); + if (state->video_attributes & 0x20) { int scroll; - scroll = bg_scrollx + ((video_attributes & 0x04) << 6); - tilemap_set_scrollx(bg_tilemap, 0, scroll ^ (flip_screen_get(screen->machine) ? 0x0f : 0)); - scroll = fg_scrollx + ((video_attributes & 0x08) << 5); - tilemap_set_scrollx(fg_tilemap, 0, scroll ^ (flip_screen_get(screen->machine) ? 0x0f : 0)); + scroll = state->bg_scrollx + ((state->video_attributes & 0x04) << 6); + tilemap_set_scrollx(state->bg_tilemap, 0, scroll ^ (flip_screen_get(screen->machine) ? 0x0f : 0)); + scroll = state->fg_scrollx + ((state->video_attributes & 0x08) << 5); + tilemap_set_scrollx(state->fg_tilemap, 0, scroll ^ (flip_screen_get(screen->machine) ? 0x0f : 0)); // always 0 anyway - tilemap_set_scrolly(bg_tilemap, 0, bg_scrolly); - tilemap_set_scrolly(fg_tilemap, 0, fg_scrolly); + tilemap_set_scrolly(state->bg_tilemap, 0, state->bg_scrolly); + tilemap_set_scrolly(state->fg_tilemap, 0, state->fg_scrolly); - tilemap_draw(bitmap,cliprect,bg_tilemap,0,0); + tilemap_draw(bitmap,cliprect,state->bg_tilemap,0,0); draw_sprites(screen->machine, bitmap,cliprect); - tilemap_draw(bitmap,cliprect,fg_tilemap,0,0); + tilemap_draw(bitmap,cliprect,state->fg_tilemap,0,0); } else bitmap_fill( bitmap, cliprect , get_black_pen(screen->machine)); diff --git a/src/mame/video/groundfx.c b/src/mame/video/groundfx.c index ab536b516b0..6514824f956 100644 --- a/src/mame/video/groundfx.c +++ b/src/mame/video/groundfx.c @@ -2,31 +2,18 @@ #include "video/taitoic.h" #include "includes/groundfx.h" -UINT16 groundfx_rotate_ctrl[8]; - -struct tempsprite -{ - int gfx; - int code,color; - int flipx,flipy; - int x,y; - int zoomx,zoomy; - int pri; -}; -static struct tempsprite *spritelist; -static rectangle hack_cliprect; - /******************************************************************/ VIDEO_START( groundfx ) { - spritelist = auto_alloc_array(machine, struct tempsprite, 0x4000); + groundfx_state *state = machine->driver_data(); + state->spritelist = auto_alloc_array(machine, struct tempsprite, 0x4000); /* Hack */ - hack_cliprect.min_x = 69; - hack_cliprect.max_x = 250; - hack_cliprect.min_y = 24 + 5; - hack_cliprect.max_y = 24 + 44; + state->hack_cliprect.min_x = 69; + state->hack_cliprect.max_x = 250; + state->hack_cliprect.min_y = 24 + 5; + state->hack_cliprect.max_y = 24 + 44; } /*************************************************************** @@ -78,6 +65,7 @@ Heavy use is made of sprite zooming. static void draw_sprites(running_machine *machine, bitmap_t *bitmap,const rectangle *cliprect,int do_hack,int x_offs,int y_offs) { + groundfx_state *state = machine->driver_data(); UINT32 *spriteram32 = machine->generic.spriteram.u32; UINT16 *spritemap = (UINT16 *)machine->region("user1")->base(); int offs, data, tilenum, color, flipx, flipy; @@ -90,7 +78,7 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap,const rectan /* pdrawgfx() needs us to draw sprites front to back, so we have to build a list while processing sprite ram and then draw them all at the end */ - struct tempsprite *sprite_ptr = spritelist; + struct tempsprite *sprite_ptr = state->spritelist; for (offs = (machine->generic.spriteram_size/4-4);offs >= 0;offs -= 4) { @@ -186,14 +174,14 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap,const rectan } /* this happens only if primsks != NULL */ - while (sprite_ptr != spritelist) + while (sprite_ptr != state->spritelist) { const rectangle *clipper; sprite_ptr--; if (do_hack && sprite_ptr->pri==1 && sprite_ptr->y<100) - clipper=&hack_cliprect; + clipper=&state->hack_cliprect; else clipper=cliprect; @@ -213,6 +201,7 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap,const rectan VIDEO_UPDATE( groundfx ) { + groundfx_state *state = screen->machine->driver_data(); device_t *tc0100scn = screen->machine->device("tc0100scn"); device_t *tc0480scp = screen->machine->device("tc0480scp"); UINT8 layer[5]; @@ -266,7 +255,7 @@ VIDEO_UPDATE( groundfx ) //tc0100scn_tilemap_draw(tc0100scn, bitmap, cliprect, 0, pivlayer[2], 0, 0); if (tc0480scp_long_r(tc0480scp, 0x20 / 4, 0xffffffff) != 0x240866) /* Stupid hack for start of race */ - tc0480scp_tilemap_draw(tc0480scp, bitmap, &hack_cliprect, layer[0], 0, 0); + tc0480scp_tilemap_draw(tc0480scp, bitmap, &state->hack_cliprect, layer[0], 0, 0); draw_sprites(screen->machine, bitmap, cliprect, 1, 44, -574); } else diff --git a/src/mame/video/gsword.c b/src/mame/video/gsword.c index 44fde9f32a5..5106eb9ddb5 100644 --- a/src/mame/video/gsword.c +++ b/src/mame/video/gsword.c @@ -8,17 +8,6 @@ #include "emu.h" #include "includes/gsword.h" -size_t gsword_spritexy_size; - -//UINT8 *gsword_scrolly_ram; -UINT8 *gsword_spritexy_ram; -UINT8 *gsword_spritetile_ram; -UINT8 *gsword_spriteattrib_ram; - -static int charbank, charpalbank, flipscreen; - -static tilemap_t *bg_tilemap; - static PALETTE_INIT( common ) { @@ -106,20 +95,22 @@ WRITE8_HANDLER( gsword_videoram_w ) gsword_state *state = space->machine->driver_data(); UINT8 *videoram = state->videoram; videoram[offset] = data; - tilemap_mark_tile_dirty(bg_tilemap, offset); + tilemap_mark_tile_dirty(state->bg_tilemap, offset); } WRITE8_HANDLER( gsword_charbank_w ) { - if (charbank != data) + gsword_state *state = space->machine->driver_data(); + if (state->charbank != data) { - charbank = data; + state->charbank = data; tilemap_mark_all_tiles_dirty_all(space->machine); } } WRITE8_HANDLER( gsword_videoctrl_w ) { + gsword_state *state = space->machine->driver_data(); if (data & 0x8f) { popmessage("videoctrl %02x",data); @@ -127,17 +118,17 @@ WRITE8_HANDLER( gsword_videoctrl_w ) /* bits 5-6 are char palette bank */ - if (charpalbank != ((data & 0x60) >> 5)) + if (state->charpalbank != ((data & 0x60) >> 5)) { - charpalbank = (data & 0x60) >> 5; + state->charpalbank = (data & 0x60) >> 5; tilemap_mark_all_tiles_dirty_all(space->machine); } /* bit 4 is flip screen */ - if (flipscreen != (data & 0x10)) + if (state->flipscreen != (data & 0x10)) { - flipscreen = data & 0x10; + state->flipscreen = data & 0x10; tilemap_mark_all_tiles_dirty_all(space->machine); } @@ -148,43 +139,46 @@ WRITE8_HANDLER( gsword_videoctrl_w ) WRITE8_HANDLER( gsword_scroll_w ) { - tilemap_set_scrolly(bg_tilemap, 0, data); + gsword_state *state = space->machine->driver_data(); + tilemap_set_scrolly(state->bg_tilemap, 0, data); } static TILE_GET_INFO( get_bg_tile_info ) { gsword_state *state = machine->driver_data(); UINT8 *videoram = state->videoram; - int code = videoram[tile_index] + ((charbank & 0x03) << 8); - int color = ((code & 0x3c0) >> 6) + 16 * charpalbank; - int flags = flipscreen ? (TILE_FLIPX | TILE_FLIPY) : 0; + int code = videoram[tile_index] + ((state->charbank & 0x03) << 8); + int color = ((code & 0x3c0) >> 6) + 16 * state->charpalbank; + int flags = state->flipscreen ? (TILE_FLIPX | TILE_FLIPY) : 0; SET_TILE_INFO(0, code, color, flags); } VIDEO_START( gsword ) { - bg_tilemap = tilemap_create(machine, get_bg_tile_info, tilemap_scan_rows, + gsword_state *state = machine->driver_data(); + state->bg_tilemap = tilemap_create(machine, get_bg_tile_info, tilemap_scan_rows, 8, 8, 32, 64); } static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect) { + gsword_state *state = machine->driver_data(); int offs; - for (offs = 0; offs < gsword_spritexy_size - 1; offs+=2) + for (offs = 0; offs < state->spritexy_size - 1; offs+=2) { int sx,sy,flipx,flipy,spritebank,tile,color; - if (gsword_spritexy_ram[offs]!=0xf1) + if (state->spritexy_ram[offs]!=0xf1) { spritebank = 0; - tile = gsword_spritetile_ram[offs]; - color = gsword_spritetile_ram[offs+1] & 0x3f; - sy = 241-gsword_spritexy_ram[offs]; - sx = gsword_spritexy_ram[offs+1]-56; - flipx = gsword_spriteattrib_ram[offs] & 0x02; - flipy = gsword_spriteattrib_ram[offs] & 0x01; + tile = state->spritetile_ram[offs]; + color = state->spritetile_ram[offs+1] & 0x3f; + sy = 241-state->spritexy_ram[offs]; + sx = state->spritexy_ram[offs+1]-56; + flipx = state->spriteattrib_ram[offs] & 0x02; + flipy = state->spriteattrib_ram[offs] & 0x01; // Adjust sprites that should be far far right! if (sx<0) sx+=256; @@ -196,7 +190,7 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const recta tile -= 128; sy-=16; } - if (flipscreen) + if (state->flipscreen) { flipx = !flipx; flipy = !flipy; @@ -213,7 +207,8 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const recta VIDEO_UPDATE( gsword ) { - tilemap_draw(bitmap, cliprect, bg_tilemap, 0, 0); + gsword_state *state = screen->machine->driver_data(); + tilemap_draw(bitmap, cliprect, state->bg_tilemap, 0, 0); draw_sprites(screen->machine, bitmap, cliprect); return 0; } diff --git a/src/mame/video/gunbustr.c b/src/mame/video/gunbustr.c index 0848af2d91e..d8e207b4f78 100644 --- a/src/mame/video/gunbustr.c +++ b/src/mame/video/gunbustr.c @@ -2,22 +2,12 @@ #include "video/taitoic.h" #include "includes/gunbustr.h" -struct tempsprite -{ - int gfx; - int code,color; - int flipx,flipy; - int x,y; - int zoomx,zoomy; - int primask; -}; -static struct tempsprite *spritelist; - /************************************************************/ VIDEO_START( gunbustr ) { - spritelist = auto_alloc_array(machine, struct tempsprite, 0x4000); + gunbustr_state *state = machine->driver_data(); + state->spritelist = auto_alloc_array(machine, struct tempsprite, 0x4000); } /************************************************************ @@ -68,6 +58,7 @@ Heavy use is made of sprite zooming. static void draw_sprites(running_machine *machine, bitmap_t *bitmap,const rectangle *cliprect,const int *primasks,int x_offs,int y_offs) { + gunbustr_state *state = machine->driver_data(); UINT32 *spriteram32 = machine->generic.spriteram.u32; UINT16 *spritemap = (UINT16 *)machine->region("user1")->base(); int offs, data, tilenum, color, flipx, flipy; @@ -79,7 +70,7 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap,const rectan /* pdrawgfx() needs us to draw sprites front to back, so we have to build a list while processing sprite ram and then draw them all at the end */ - struct tempsprite *sprite_ptr = spritelist; + struct tempsprite *sprite_ptr = state->spritelist; for (offs = (machine->generic.spriteram_size/4-4);offs >= 0;offs -= 4) { @@ -191,7 +182,7 @@ logerror("Sprite number %04x had %02x invalid chunks\n",tilenum,bad_chunks); } /* this happens only if primsks != NULL */ - while (sprite_ptr != spritelist) + while (sprite_ptr != state->spritelist) { sprite_ptr--; diff --git a/src/mame/video/m10.c b/src/mame/video/m10.c index 2b9136cb0cc..50c6fadd43c 100644 --- a/src/mame/video/m10.c +++ b/src/mame/video/m10.c @@ -13,7 +13,10 @@ #include "emu.h" #include "includes/m10.h" -static UINT32 extyoffs[32 * 8]; // FIXME: this should be moved to m10_state, but backlayout would have problems +static const UINT32 extyoffs[] = +{ + STEP256(0, 8) +}; static const gfx_layout backlayout = @@ -103,10 +106,6 @@ INLINE void plot_pixel_m10( running_machine *machine, bitmap_t *bm, int x, int y VIDEO_START( m10 ) { m10_state *state = machine->driver_data(); - int i; - - for (i = 0; i < 32 * 8; i++) - extyoffs[i] = i * 8; state->tx_tilemap = tilemap_create(machine, get_tile_info, tilemap_scan, 8, 8, 32, 32); tilemap_set_transparent_pen(state->tx_tilemap, 0); diff --git a/src/mame/video/m107.c b/src/mame/video/m107.c index 7cae5cee347..13ef81b46d1 100644 --- a/src/mame/video/m107.c +++ b/src/mame/video/m107.c @@ -38,35 +38,19 @@ #include "emu.h" #include "includes/m107.h" -typedef struct _pf_layer_info pf_layer_info; -struct _pf_layer_info -{ - tilemap_t * tmap; - UINT16 vram_base; - UINT16 control[4]; -}; - -static pf_layer_info pf_layer[4]; - - -static UINT16 m107_control[0x10]; -static UINT16 *m107_spriteram; -UINT16 *m107_vram_data; -UINT16 m107_raster_irq_position; -UINT8 m107_spritesystem; -UINT8 m107_sprite_display; /*****************************************************************************/ static TILE_GET_INFO( get_pf_tile_info ) { + m107_state *state = machine->driver_data(); pf_layer_info *layer = (pf_layer_info *)param; int tile, attrib; tile_index = 2 * tile_index + layer->vram_base; - attrib = m107_vram_data[tile_index + 1]; - tile = m107_vram_data[tile_index] + ((attrib & 0x1000) << 4); + attrib = state->vram_data[tile_index + 1]; + tile = state->vram_data[tile_index] + ((attrib & 0x1000) << 4); SET_TILE_INFO( 0, @@ -82,22 +66,24 @@ static TILE_GET_INFO( get_pf_tile_info ) WRITE16_HANDLER( m107_vram_w ) { + m107_state *state = space->machine->driver_data(); int laynum; - COMBINE_DATA(&m107_vram_data[offset]); + COMBINE_DATA(&state->vram_data[offset]); for (laynum = 0; laynum < 4; laynum++) - if ((offset & 0x6000) == pf_layer[laynum].vram_base) - tilemap_mark_tile_dirty(pf_layer[laynum].tmap, (offset & 0x1fff) / 2); + if ((offset & 0x6000) == state->pf_layer[laynum].vram_base) + tilemap_mark_tile_dirty(state->pf_layer[laynum].tmap, (offset & 0x1fff) / 2); } /*****************************************************************************/ WRITE16_HANDLER( m107_control_w ) { - UINT16 old = m107_control[offset]; + m107_state *state = space->machine->driver_data(); + UINT16 old = state->control[offset]; pf_layer_info *layer; - COMBINE_DATA(&m107_control[offset]); + COMBINE_DATA(&state->control[offset]); switch (offset*2) { @@ -105,20 +91,20 @@ WRITE16_HANDLER( m107_control_w ) case 0x12: /* Playfield 2 */ case 0x14: /* Playfield 3 */ case 0x16: /* Playfield 4 (bottom layer) */ - layer = &pf_layer[offset - 0x08]; + layer = &state->pf_layer[offset - 0x08]; /* update VRAM base (bits 8-11) */ - layer->vram_base = ((m107_control[offset] >> 8) & 15) * 0x800; + layer->vram_base = ((state->control[offset] >> 8) & 15) * 0x800; /* update enable (bit 7) */ - tilemap_set_enable(layer->tmap, (~m107_control[offset] >> 7) & 1); + tilemap_set_enable(layer->tmap, (~state->control[offset] >> 7) & 1); /* mark everything dirty of the VRAM base changes */ - if ((old ^ m107_control[offset]) & 0x0f00) + if ((old ^ state->control[offset]) & 0x0f00) tilemap_mark_all_tiles_dirty(layer->tmap); - if(m107_control[offset] & 0xf07c) - printf("%04x %02x\n",m107_control[offset],offset*2); + if(state->control[offset] & 0xf07c) + printf("%04x %02x\n",state->control[offset],offset*2); break; @@ -128,7 +114,7 @@ WRITE16_HANDLER( m107_control_w ) break; case 0x1e: - m107_raster_irq_position = m107_control[offset] - 128; + state->raster_irq_position = state->control[offset] - 128; break; } } @@ -137,17 +123,18 @@ WRITE16_HANDLER( m107_control_w ) VIDEO_START( m107 ) { + m107_state *state = machine->driver_data(); int laynum; for (laynum = 0; laynum < 4; laynum++) { - pf_layer_info *layer = &pf_layer[laynum]; + pf_layer_info *layer = &state->pf_layer[laynum]; /* allocate a tilemaps per layer */ layer->tmap = tilemap_create(machine, get_pf_tile_info, tilemap_scan_rows, 8,8, 64,64); /* set the user data to point to the layer */ - tilemap_set_user_data(layer->tmap, &pf_layer[laynum]); + tilemap_set_user_data(layer->tmap, &state->pf_layer[laynum]); /* set scroll offsets */ tilemap_set_scrolldx(layer->tmap, -3 + 2 * laynum, -3 + 2 * laynum); @@ -158,13 +145,14 @@ VIDEO_START( m107 ) tilemap_set_transparent_pen(layer->tmap, 0); } - m107_spriteram = auto_alloc_array_clear(machine, UINT16, 0x1000/2); + state->spriteram = auto_alloc_array_clear(machine, UINT16, 0x1000/2); } /*****************************************************************************/ static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect) { + m107_state *state = machine->driver_data(); int offs; UINT8 *rom = machine->region("user1")->base(); @@ -172,26 +160,26 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const recta { int x,y,sprite,colour,fx,fy,y_multi,i,s_ptr,pri_mask; - pri_mask = (!(m107_spriteram[offs+2]&0x80)) ? 2 : 0; + pri_mask = (!(state->spriteram[offs+2]&0x80)) ? 2 : 0; - y=m107_spriteram[offs+0]; - x=m107_spriteram[offs+3]; + y=state->spriteram[offs+0]; + x=state->spriteram[offs+3]; x&=0x1ff; y&=0x1ff; if (x==0 || y==0) continue; /* offscreen */ - sprite=m107_spriteram[offs+1]&0x7fff; + sprite=state->spriteram[offs+1]&0x7fff; x = x - 16; y = 384 - 16 - y; - colour=m107_spriteram[offs+2]&0x7f; - fx=(m107_spriteram[offs+2]>>8)&0x1; - fy=(m107_spriteram[offs+2]>>8)&0x2; - y_multi=(m107_spriteram[offs+0]>>11)&0x3; + colour=state->spriteram[offs+2]&0x7f; + fx=(state->spriteram[offs+2]>>8)&0x1; + fy=(state->spriteram[offs+2]>>8)&0x2; + y_multi=(state->spriteram[offs+0]>>11)&0x3; - if (m107_spritesystem == 0) + if (state->spritesystem == 0) { y_multi=1 << y_multi; /* 1, 2, 4 or 8 */ @@ -284,8 +272,9 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const recta /*****************************************************************************/ -static void m107_update_scroll_positions(void) +static void m107_update_scroll_positions(running_machine *machine) { + m107_state *state = machine->driver_data(); int laynum; int i; @@ -295,16 +284,16 @@ static void m107_update_scroll_positions(void) Perhaps 0xdf000 - 0xdffff and bit 2-3 are respectively colscroll and colselect? */ - for (laynum = 0; laynum < 4; laynum++) - { - pf_layer_info *layer = &pf_layer[laynum]; + for (laynum = 0; laynum < 4; laynum++) + { + pf_layer_info *layer = &state->pf_layer[laynum]; - int scrolly = m107_control[0 + 2 * laynum]; - int scrollx = m107_control[1 + 2 * laynum]; + int scrolly = state->control[0 + 2 * laynum]; + int scrollx = state->control[1 + 2 * laynum]; - if (m107_control[0x08 + laynum] & 0x01) //used by World PK Soccer goal scrolling and Fire Barrel sea wave effect (stage 2) / canyon parallax effect (stage 6) + if (state->control[0x08 + laynum] & 0x01) //used by World PK Soccer goal scrolling and Fire Barrel sea wave effect (stage 2) / canyon parallax effect (stage 6) { - const UINT16 *scrolldata = m107_vram_data + (0xe000 + 0x200 * laynum) / 2; + const UINT16 *scrolldata = state->vram_data + (0xe000 + 0x200 * laynum) / 2; tilemap_set_scroll_rows(layer->tmap, 512); for (i = 0; i < 512; i++) @@ -325,6 +314,7 @@ static void m107_update_scroll_positions(void) static void m107_tilemap_draw(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect, int laynum, int category,int opaque) { + m107_state *state = machine->driver_data(); int line; rectangle clip; const rectangle &visarea = machine->primary_screen->visible_area(); @@ -333,29 +323,30 @@ static void m107_tilemap_draw(running_machine *machine, bitmap_t *bitmap, const clip.min_y = visarea.min_y; clip.max_y = visarea.max_y; - if (m107_control[0x08 + laynum] & 0x02) + if (state->control[0x08 + laynum] & 0x02) { for (line = cliprect->min_y; line <= cliprect->max_y;line++) { - const UINT16 *scrolldata = m107_vram_data + (0xe800 + 0x200 * laynum) / 2; + const UINT16 *scrolldata = state->vram_data + (0xe800 + 0x200 * laynum) / 2; clip.min_y = clip.max_y = line; - tilemap_set_scrollx(pf_layer[laynum].tmap,0, m107_control[1 + 2 * laynum]); - tilemap_set_scrolly(pf_layer[laynum].tmap,0, (m107_control[0 + 2 * laynum] + scrolldata[line])); + tilemap_set_scrollx(state->pf_layer[laynum].tmap,0, state->control[1 + 2 * laynum]); + tilemap_set_scrolly(state->pf_layer[laynum].tmap,0, (state->control[0 + 2 * laynum] + scrolldata[line])); - tilemap_draw(bitmap, &clip, pf_layer[laynum].tmap, category | opaque, category); + tilemap_draw(bitmap, &clip, state->pf_layer[laynum].tmap, category | opaque, category); } } else - tilemap_draw(bitmap, cliprect, pf_layer[laynum].tmap, category | opaque, category); + tilemap_draw(bitmap, cliprect, state->pf_layer[laynum].tmap, category | opaque, category); } static void m107_screenrefresh(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect) { + m107_state *state = machine->driver_data(); bitmap_fill(machine->priority_bitmap, cliprect, 0); - if ((~m107_control[0x0b] >> 7) & 1) + if ((~state->control[0x0b] >> 7) & 1) { m107_tilemap_draw(machine, bitmap, cliprect, 3, 0,0); m107_tilemap_draw(machine, bitmap, cliprect, 3, 1,0); @@ -364,14 +355,14 @@ static void m107_screenrefresh(running_machine *machine, bitmap_t *bitmap, const bitmap_fill(bitmap, cliprect, 0); /* note: the opaque flag is used if layer 3 is disabled, noticeable in World PK Soccer title and gameplay screens */ - m107_tilemap_draw(machine, bitmap, cliprect, 2, 0,(((m107_control[0x0b] >> 7) & 1) ? TILEMAP_DRAW_OPAQUE : 0)); + m107_tilemap_draw(machine, bitmap, cliprect, 2, 0,(((state->control[0x0b] >> 7) & 1) ? TILEMAP_DRAW_OPAQUE : 0)); m107_tilemap_draw(machine, bitmap, cliprect, 1, 0,0); m107_tilemap_draw(machine, bitmap, cliprect, 0, 0,0); m107_tilemap_draw(machine, bitmap, cliprect, 2, 1,0); m107_tilemap_draw(machine, bitmap, cliprect, 1, 1,0); m107_tilemap_draw(machine, bitmap, cliprect, 0, 1,0); - if(m107_sprite_display) + if(state->sprite_display) draw_sprites(machine, bitmap, cliprect); /* This hardware probably has more priority values - but I haven't found @@ -382,14 +373,15 @@ static void m107_screenrefresh(running_machine *machine, bitmap_t *bitmap, const WRITE16_HANDLER( m107_spritebuffer_w ) { + m107_state *state = space->machine->driver_data(); if (ACCESSING_BITS_0_7) { /* TODO: this register looks a lot more complex than how the game uses it. All of them seems to test various bit combinations during POST. */ // logerror("%04x: buffered spriteram\n",cpu_get_pc(space->cpu)); - m107_sprite_display = (!(data & 0x1000)); + state->sprite_display = (!(data & 0x1000)); - memcpy(m107_spriteram,space->machine->generic.spriteram.u16,0x1000); + memcpy(state->spriteram,space->machine->generic.spriteram.u16,0x1000); } } @@ -397,7 +389,7 @@ WRITE16_HANDLER( m107_spritebuffer_w ) VIDEO_UPDATE( m107 ) { - m107_update_scroll_positions(); + m107_update_scroll_positions(screen->machine); m107_screenrefresh(screen->machine, bitmap, cliprect); return 0; } diff --git a/src/mame/video/m72.c b/src/mame/video/m72.c index e77a74a9a05..37d26dc4e14 100644 --- a/src/mame/video/m72.c +++ b/src/mame/video/m72.c @@ -4,12 +4,6 @@ -UINT16 *m72_videoram1,*m72_videoram2,*majtitle_rowscrollram; -UINT32 m72_raster_irq_position; -static UINT16 *m72_spriteram; -static tilemap_t *fg_tilemap,*bg_tilemap; -static INT32 scrollx1,scrolly1,scrollx2,scrolly2; -static INT32 video_off; @@ -70,27 +64,32 @@ INLINE void rtype2_get_tile_info(running_machine *machine,tile_data *tileinfo,in static TILE_GET_INFO( m72_get_bg_tile_info ) { - m72_get_tile_info(machine,tileinfo,tile_index,m72_videoram2,2); + m72_state *state = machine->driver_data(); + m72_get_tile_info(machine,tileinfo,tile_index,state->videoram2,2); } static TILE_GET_INFO( m72_get_fg_tile_info ) { - m72_get_tile_info(machine,tileinfo,tile_index,m72_videoram1,1); + m72_state *state = machine->driver_data(); + m72_get_tile_info(machine,tileinfo,tile_index,state->videoram1,1); } static TILE_GET_INFO( hharry_get_bg_tile_info ) { - m72_get_tile_info(machine,tileinfo,tile_index,m72_videoram2,1); + m72_state *state = machine->driver_data(); + m72_get_tile_info(machine,tileinfo,tile_index,state->videoram2,1); } static TILE_GET_INFO( rtype2_get_bg_tile_info ) { - rtype2_get_tile_info(machine,tileinfo,tile_index,m72_videoram2,1); + m72_state *state = machine->driver_data(); + rtype2_get_tile_info(machine,tileinfo,tile_index,state->videoram2,1); } static TILE_GET_INFO( rtype2_get_fg_tile_info ) { - rtype2_get_tile_info(machine,tileinfo,tile_index,m72_videoram1,1); + m72_state *state = machine->driver_data(); + rtype2_get_tile_info(machine,tileinfo,tile_index,state->videoram1,1); } @@ -109,130 +108,136 @@ static TILEMAP_MAPPER( majtitle_scan_rows ) static void register_savestate(running_machine *machine) { - state_save_register_global(machine, m72_raster_irq_position); - state_save_register_global(machine, video_off); - state_save_register_global(machine, scrollx1); - state_save_register_global(machine, scrolly1); - state_save_register_global(machine, scrollx2); - state_save_register_global(machine, scrolly2); - state_save_register_global_pointer(machine, m72_spriteram, machine->generic.spriteram_size/2); + m72_state *state = machine->driver_data(); + state_save_register_global(machine, state->raster_irq_position); + state_save_register_global(machine, state->video_off); + state_save_register_global(machine, state->scrollx1); + state_save_register_global(machine, state->scrolly1); + state_save_register_global(machine, state->scrollx2); + state_save_register_global(machine, state->scrolly2); + state_save_register_global_pointer(machine, state->spriteram, machine->generic.spriteram_size/2); } VIDEO_START( m72 ) { - bg_tilemap = tilemap_create(machine, m72_get_bg_tile_info,tilemap_scan_rows,8,8,64,64); - fg_tilemap = tilemap_create(machine, m72_get_fg_tile_info,tilemap_scan_rows,8,8,64,64); + m72_state *state = machine->driver_data(); + state->bg_tilemap = tilemap_create(machine, m72_get_bg_tile_info,tilemap_scan_rows,8,8,64,64); + state->fg_tilemap = tilemap_create(machine, m72_get_fg_tile_info,tilemap_scan_rows,8,8,64,64); - m72_spriteram = auto_alloc_array(machine, UINT16, machine->generic.spriteram_size/2); + state->spriteram = auto_alloc_array(machine, UINT16, machine->generic.spriteram_size/2); - tilemap_set_transmask(fg_tilemap,0,0xffff,0x0001); - tilemap_set_transmask(fg_tilemap,1,0x00ff,0xff01); - tilemap_set_transmask(fg_tilemap,2,0x0001,0xffff); + tilemap_set_transmask(state->fg_tilemap,0,0xffff,0x0001); + tilemap_set_transmask(state->fg_tilemap,1,0x00ff,0xff01); + tilemap_set_transmask(state->fg_tilemap,2,0x0001,0xffff); - tilemap_set_transmask(bg_tilemap,0,0xffff,0x0000); - tilemap_set_transmask(bg_tilemap,1,0x00ff,0xff00); - //tilemap_set_transmask(bg_tilemap,2,0x0001,0xfffe); - tilemap_set_transmask(bg_tilemap,2,0x0007,0xfff8); + tilemap_set_transmask(state->bg_tilemap,0,0xffff,0x0000); + tilemap_set_transmask(state->bg_tilemap,1,0x00ff,0xff00); + //tilemap_set_transmask(state->bg_tilemap,2,0x0001,0xfffe); + tilemap_set_transmask(state->bg_tilemap,2,0x0007,0xfff8); - memset(m72_spriteram,0,machine->generic.spriteram_size); + memset(state->spriteram,0,machine->generic.spriteram_size); - tilemap_set_scrolldx(fg_tilemap,0,0); - tilemap_set_scrolldy(fg_tilemap,-128,16); + tilemap_set_scrolldx(state->fg_tilemap,0,0); + tilemap_set_scrolldy(state->fg_tilemap,-128,16); - tilemap_set_scrolldx(bg_tilemap,0,0); - tilemap_set_scrolldy(bg_tilemap,-128,16); + tilemap_set_scrolldx(state->bg_tilemap,0,0); + tilemap_set_scrolldy(state->bg_tilemap,-128,16); register_savestate(machine); } VIDEO_START( rtype2 ) { - bg_tilemap = tilemap_create(machine, rtype2_get_bg_tile_info,tilemap_scan_rows,8,8,64,64); - fg_tilemap = tilemap_create(machine, rtype2_get_fg_tile_info,tilemap_scan_rows,8,8,64,64); + m72_state *state = machine->driver_data(); + state->bg_tilemap = tilemap_create(machine, rtype2_get_bg_tile_info,tilemap_scan_rows,8,8,64,64); + state->fg_tilemap = tilemap_create(machine, rtype2_get_fg_tile_info,tilemap_scan_rows,8,8,64,64); - m72_spriteram = auto_alloc_array(machine, UINT16, machine->generic.spriteram_size/2); + state->spriteram = auto_alloc_array(machine, UINT16, machine->generic.spriteram_size/2); - tilemap_set_transmask(fg_tilemap,0,0xffff,0x0001); - tilemap_set_transmask(fg_tilemap,1,0x00ff,0xff01); - tilemap_set_transmask(fg_tilemap,2,0x0001,0xffff); + tilemap_set_transmask(state->fg_tilemap,0,0xffff,0x0001); + tilemap_set_transmask(state->fg_tilemap,1,0x00ff,0xff01); + tilemap_set_transmask(state->fg_tilemap,2,0x0001,0xffff); - tilemap_set_transmask(bg_tilemap,0,0xffff,0x0000); - tilemap_set_transmask(bg_tilemap,1,0x00ff,0xff00); - tilemap_set_transmask(bg_tilemap,2,0x0001,0xfffe); + tilemap_set_transmask(state->bg_tilemap,0,0xffff,0x0000); + tilemap_set_transmask(state->bg_tilemap,1,0x00ff,0xff00); + tilemap_set_transmask(state->bg_tilemap,2,0x0001,0xfffe); - memset(m72_spriteram,0,machine->generic.spriteram_size); + memset(state->spriteram,0,machine->generic.spriteram_size); - tilemap_set_scrolldx(fg_tilemap,4,0); - tilemap_set_scrolldy(fg_tilemap,-128,16); + tilemap_set_scrolldx(state->fg_tilemap,4,0); + tilemap_set_scrolldy(state->fg_tilemap,-128,16); - tilemap_set_scrolldx(bg_tilemap,4,0); - tilemap_set_scrolldy(bg_tilemap,-128,16); + tilemap_set_scrolldx(state->bg_tilemap,4,0); + tilemap_set_scrolldy(state->bg_tilemap,-128,16); register_savestate(machine); } VIDEO_START( poundfor ) { + m72_state *state = machine->driver_data(); VIDEO_START_CALL(rtype2); - tilemap_set_scrolldx(fg_tilemap,6,0); - tilemap_set_scrolldx(bg_tilemap,6,0); + tilemap_set_scrolldx(state->fg_tilemap,6,0); + tilemap_set_scrolldx(state->bg_tilemap,6,0); } /* Major Title has a larger background RAM, and rowscroll */ VIDEO_START( majtitle ) { + m72_state *state = machine->driver_data(); // The tilemap can be 256x64, but seems to be used at 128x64 (scroll wraparound). // The layout ramains 256x64, the right half is just not displayed. -// bg_tilemap = tilemap_create(machine, rtype2_get_bg_tile_info,tilemap_scan_rows,8,8,256,64); - bg_tilemap = tilemap_create(machine, rtype2_get_bg_tile_info,majtitle_scan_rows,8,8,128,64); - fg_tilemap = tilemap_create(machine, rtype2_get_fg_tile_info,tilemap_scan_rows,8,8,64,64); +// state->bg_tilemap = tilemap_create(machine, rtype2_get_bg_tile_info,tilemap_scan_rows,8,8,256,64); + state->bg_tilemap = tilemap_create(machine, rtype2_get_bg_tile_info,majtitle_scan_rows,8,8,128,64); + state->fg_tilemap = tilemap_create(machine, rtype2_get_fg_tile_info,tilemap_scan_rows,8,8,64,64); - m72_spriteram = auto_alloc_array(machine, UINT16, machine->generic.spriteram_size/2); + state->spriteram = auto_alloc_array(machine, UINT16, machine->generic.spriteram_size/2); - tilemap_set_transmask(fg_tilemap,0,0xffff,0x0001); - tilemap_set_transmask(fg_tilemap,1,0x00ff,0xff01); - tilemap_set_transmask(fg_tilemap,2,0x0001,0xffff); + tilemap_set_transmask(state->fg_tilemap,0,0xffff,0x0001); + tilemap_set_transmask(state->fg_tilemap,1,0x00ff,0xff01); + tilemap_set_transmask(state->fg_tilemap,2,0x0001,0xffff); - tilemap_set_transmask(bg_tilemap,0,0xffff,0x0000); - tilemap_set_transmask(bg_tilemap,1,0x00ff,0xff00); - tilemap_set_transmask(bg_tilemap,2,0x0001,0xfffe); + tilemap_set_transmask(state->bg_tilemap,0,0xffff,0x0000); + tilemap_set_transmask(state->bg_tilemap,1,0x00ff,0xff00); + tilemap_set_transmask(state->bg_tilemap,2,0x0001,0xfffe); - memset(m72_spriteram,0,machine->generic.spriteram_size); + memset(state->spriteram,0,machine->generic.spriteram_size); - tilemap_set_scrolldx(fg_tilemap,4,0); - tilemap_set_scrolldy(fg_tilemap,-128,16); + tilemap_set_scrolldx(state->fg_tilemap,4,0); + tilemap_set_scrolldy(state->fg_tilemap,-128,16); - tilemap_set_scrolldx(bg_tilemap,4,0); - tilemap_set_scrolldy(bg_tilemap,-128,16); + tilemap_set_scrolldx(state->bg_tilemap,4,0); + tilemap_set_scrolldy(state->bg_tilemap,-128,16); register_savestate(machine); } VIDEO_START( hharry ) { - bg_tilemap = tilemap_create(machine, hharry_get_bg_tile_info,tilemap_scan_rows,8,8,64,64); - fg_tilemap = tilemap_create(machine, m72_get_fg_tile_info, tilemap_scan_rows,8,8,64,64); + m72_state *state = machine->driver_data(); + state->bg_tilemap = tilemap_create(machine, hharry_get_bg_tile_info,tilemap_scan_rows,8,8,64,64); + state->fg_tilemap = tilemap_create(machine, m72_get_fg_tile_info, tilemap_scan_rows,8,8,64,64); - m72_spriteram = auto_alloc_array(machine, UINT16, machine->generic.spriteram_size/2); + state->spriteram = auto_alloc_array(machine, UINT16, machine->generic.spriteram_size/2); - tilemap_set_transmask(fg_tilemap,0,0xffff,0x0001); - tilemap_set_transmask(fg_tilemap,1,0x00ff,0xff01); - tilemap_set_transmask(fg_tilemap,2,0x0001,0xffff); + tilemap_set_transmask(state->fg_tilemap,0,0xffff,0x0001); + tilemap_set_transmask(state->fg_tilemap,1,0x00ff,0xff01); + tilemap_set_transmask(state->fg_tilemap,2,0x0001,0xffff); - tilemap_set_transmask(bg_tilemap,0,0xffff,0x0000); - tilemap_set_transmask(bg_tilemap,1,0x00ff,0xff00); - tilemap_set_transmask(bg_tilemap,2,0x0001,0xfffe); + tilemap_set_transmask(state->bg_tilemap,0,0xffff,0x0000); + tilemap_set_transmask(state->bg_tilemap,1,0x00ff,0xff00); + tilemap_set_transmask(state->bg_tilemap,2,0x0001,0xfffe); - memset(m72_spriteram,0,machine->generic.spriteram_size); + memset(state->spriteram,0,machine->generic.spriteram_size); - tilemap_set_scrolldx(fg_tilemap,4,0); - tilemap_set_scrolldy(fg_tilemap,-128,16); + tilemap_set_scrolldx(state->fg_tilemap,4,0); + tilemap_set_scrolldy(state->fg_tilemap,-128,16); - tilemap_set_scrolldx(bg_tilemap,6,0); - tilemap_set_scrolldy(bg_tilemap,-128,16); + tilemap_set_scrolldx(state->bg_tilemap,6,0); + tilemap_set_scrolldy(state->bg_tilemap,-128,16); register_savestate(machine); } @@ -295,50 +300,59 @@ WRITE16_HANDLER( m72_palette2_w ) WRITE16_HANDLER( m72_videoram1_w ) { - COMBINE_DATA(&m72_videoram1[offset]); - tilemap_mark_tile_dirty(fg_tilemap,offset/2); + m72_state *state = space->machine->driver_data(); + COMBINE_DATA(&state->videoram1[offset]); + tilemap_mark_tile_dirty(state->fg_tilemap,offset/2); } WRITE16_HANDLER( m72_videoram2_w ) { - COMBINE_DATA(&m72_videoram2[offset]); - tilemap_mark_tile_dirty(bg_tilemap,offset/2); + m72_state *state = space->machine->driver_data(); + COMBINE_DATA(&state->videoram2[offset]); + tilemap_mark_tile_dirty(state->bg_tilemap,offset/2); } WRITE16_HANDLER( m72_irq_line_w ) { - COMBINE_DATA(&m72_raster_irq_position); + m72_state *state = space->machine->driver_data(); + COMBINE_DATA(&state->raster_irq_position); } WRITE16_HANDLER( m72_scrollx1_w ) { - COMBINE_DATA(&scrollx1); + m72_state *state = space->machine->driver_data(); + COMBINE_DATA(&state->scrollx1); } WRITE16_HANDLER( m72_scrollx2_w ) { - COMBINE_DATA(&scrollx2); + m72_state *state = space->machine->driver_data(); + COMBINE_DATA(&state->scrollx2); } WRITE16_HANDLER( m72_scrolly1_w ) { - COMBINE_DATA(&scrolly1); + m72_state *state = space->machine->driver_data(); + COMBINE_DATA(&state->scrolly1); } WRITE16_HANDLER( m72_scrolly2_w ) { - COMBINE_DATA(&scrolly2); + m72_state *state = space->machine->driver_data(); + COMBINE_DATA(&state->scrolly2); } WRITE16_HANDLER( m72_dmaon_w ) { + m72_state *state = space->machine->driver_data(); if (ACCESSING_BITS_0_7) - memcpy(m72_spriteram,space->machine->generic.spriteram.u16,space->machine->generic.spriteram_size); + memcpy(state->spriteram,space->machine->generic.spriteram.u16,space->machine->generic.spriteram_size); } WRITE16_HANDLER( m72_port02_w ) { + m72_state *state = space->machine->driver_data(); if (ACCESSING_BITS_0_7) { if (data & 0xe0) logerror("write %02x to port 02\n",data); @@ -351,7 +365,7 @@ WRITE16_HANDLER( m72_port02_w ) flip_screen_set(space->machine, ((data & 0x04) >> 2) ^ ((~input_port_read(space->machine, "DSW") >> 8) & 1)); /* bit 3 is display disable */ - video_off = data & 0x08; + state->video_off = data & 0x08; /* bit 4 resets sound CPU (active low) */ if (data & 0x10) @@ -365,6 +379,7 @@ WRITE16_HANDLER( m72_port02_w ) WRITE16_HANDLER( rtype2_port02_w ) { + m72_state *state = space->machine->driver_data(); if (ACCESSING_BITS_0_7) { if (data & 0xe0) logerror("write %02x to port 02\n",data); @@ -377,22 +392,22 @@ WRITE16_HANDLER( rtype2_port02_w ) flip_screen_set(space->machine, ((data & 0x04) >> 2) ^ ((~input_port_read(space->machine, "DSW") >> 8) & 1)); /* bit 3 is display disable */ - video_off = data & 0x08; + state->video_off = data & 0x08; /* other bits unknown */ } } -static int majtitle_rowscroll; /* the following is mostly a kludge. This register seems to be used for something else */ WRITE16_HANDLER( majtitle_gfx_ctrl_w ) { + m72_state *state = space->machine->driver_data(); if (ACCESSING_BITS_8_15) { - if (data & 0xff00) majtitle_rowscroll = 1; - else majtitle_rowscroll = 0; + if (data & 0xff00) state->majtitle_rowscroll = 1; + else state->majtitle_rowscroll = 0; } } @@ -405,6 +420,7 @@ WRITE16_HANDLER( majtitle_gfx_ctrl_w ) static void m72_draw_sprites(running_machine *machine, bitmap_t *bitmap,const rectangle *cliprect) { + m72_state *state = machine->driver_data(); int offs; offs = 0; @@ -413,15 +429,15 @@ static void m72_draw_sprites(running_machine *machine, bitmap_t *bitmap,const re int code,color,sx,sy,flipx,flipy,w,h,x,y; - code = m72_spriteram[offs+1]; - color = m72_spriteram[offs+2] & 0x0f; - sx = -256+(m72_spriteram[offs+3] & 0x3ff); - sy = 384-(m72_spriteram[offs+0] & 0x1ff); - flipx = m72_spriteram[offs+2] & 0x0800; - flipy = m72_spriteram[offs+2] & 0x0400; + code = state->spriteram[offs+1]; + color = state->spriteram[offs+2] & 0x0f; + sx = -256+(state->spriteram[offs+3] & 0x3ff); + sy = 384-(state->spriteram[offs+0] & 0x1ff); + flipx = state->spriteram[offs+2] & 0x0800; + flipy = state->spriteram[offs+2] & 0x0400; - w = 1 << ((m72_spriteram[offs+2] & 0xc000) >> 14); - h = 1 << ((m72_spriteram[offs+2] & 0x3000) >> 12); + w = 1 << ((state->spriteram[offs+2] & 0xc000) >> 14); + h = 1 << ((state->spriteram[offs+2] & 0x3000) >> 12); sy -= 16 * h; if (flip_screen_get(machine)) @@ -507,59 +523,61 @@ static void majtitle_draw_sprites(running_machine *machine, bitmap_t *bitmap,con VIDEO_UPDATE( m72 ) { - if (video_off) + m72_state *state = screen->machine->driver_data(); + if (state->video_off) { bitmap_fill(bitmap,cliprect,get_black_pen(screen->machine)); return 0; } - tilemap_set_scrollx(fg_tilemap,0,scrollx1); - tilemap_set_scrolly(fg_tilemap,0,scrolly1); + tilemap_set_scrollx(state->fg_tilemap,0,state->scrollx1); + tilemap_set_scrolly(state->fg_tilemap,0,state->scrolly1); - tilemap_set_scrollx(bg_tilemap,0,scrollx2); - tilemap_set_scrolly(bg_tilemap,0,scrolly2); + tilemap_set_scrollx(state->bg_tilemap,0,state->scrollx2); + tilemap_set_scrolly(state->bg_tilemap,0,state->scrolly2); - tilemap_draw(bitmap,cliprect,bg_tilemap,TILEMAP_DRAW_LAYER1,0); - tilemap_draw(bitmap,cliprect,fg_tilemap,TILEMAP_DRAW_LAYER1,0); + tilemap_draw(bitmap,cliprect,state->bg_tilemap,TILEMAP_DRAW_LAYER1,0); + tilemap_draw(bitmap,cliprect,state->fg_tilemap,TILEMAP_DRAW_LAYER1,0); m72_draw_sprites(screen->machine, bitmap,cliprect); - tilemap_draw(bitmap,cliprect,bg_tilemap,TILEMAP_DRAW_LAYER0,0); - tilemap_draw(bitmap,cliprect,fg_tilemap,TILEMAP_DRAW_LAYER0,0); + tilemap_draw(bitmap,cliprect,state->bg_tilemap,TILEMAP_DRAW_LAYER0,0); + tilemap_draw(bitmap,cliprect,state->fg_tilemap,TILEMAP_DRAW_LAYER0,0); return 0; } VIDEO_UPDATE( majtitle ) { + m72_state *state = screen->machine->driver_data(); int i; - if (video_off) + if (state->video_off) { bitmap_fill(bitmap,cliprect,get_black_pen(screen->machine)); return 0; } - tilemap_set_scrollx(fg_tilemap,0,scrollx1); - tilemap_set_scrolly(fg_tilemap,0,scrolly1); + tilemap_set_scrollx(state->fg_tilemap,0,state->scrollx1); + tilemap_set_scrolly(state->fg_tilemap,0,state->scrolly1); - if (majtitle_rowscroll) + if (state->majtitle_rowscroll) { - tilemap_set_scroll_rows(bg_tilemap,512); + tilemap_set_scroll_rows(state->bg_tilemap,512); for (i = 0;i < 512;i++) - tilemap_set_scrollx(bg_tilemap,(i+scrolly2)&0x1ff, - 256 + majtitle_rowscrollram[i]); + tilemap_set_scrollx(state->bg_tilemap,(i+state->scrolly2)&0x1ff, + 256 + state->majtitle_rowscrollram[i]); } else { - tilemap_set_scroll_rows(bg_tilemap,1); - tilemap_set_scrollx(bg_tilemap,0,256 + scrollx2); + tilemap_set_scroll_rows(state->bg_tilemap,1); + tilemap_set_scrollx(state->bg_tilemap,0,256 + state->scrollx2); } - tilemap_set_scrolly(bg_tilemap,0,scrolly2); + tilemap_set_scrolly(state->bg_tilemap,0,state->scrolly2); - tilemap_draw(bitmap,cliprect,bg_tilemap,TILEMAP_DRAW_LAYER1,0); - tilemap_draw(bitmap,cliprect,fg_tilemap,TILEMAP_DRAW_LAYER1,0); + tilemap_draw(bitmap,cliprect,state->bg_tilemap,TILEMAP_DRAW_LAYER1,0); + tilemap_draw(bitmap,cliprect,state->fg_tilemap,TILEMAP_DRAW_LAYER1,0); majtitle_draw_sprites(screen->machine, bitmap,cliprect); m72_draw_sprites(screen->machine, bitmap,cliprect); - tilemap_draw(bitmap,cliprect,bg_tilemap,TILEMAP_DRAW_LAYER0,0); - tilemap_draw(bitmap,cliprect,fg_tilemap,TILEMAP_DRAW_LAYER0,0); + tilemap_draw(bitmap,cliprect,state->bg_tilemap,TILEMAP_DRAW_LAYER0,0); + tilemap_draw(bitmap,cliprect,state->fg_tilemap,TILEMAP_DRAW_LAYER0,0); return 0; } diff --git a/src/mame/video/m92.c b/src/mame/video/m92.c index cca3ef25a01..359c89663fc 100644 --- a/src/mame/video/m92.c +++ b/src/mame/video/m92.c @@ -42,39 +42,20 @@ #include "emu.h" #include "includes/m92.h" -typedef struct _pf_layer_info pf_layer_info; -struct _pf_layer_info -{ - tilemap_t * tmap; - tilemap_t * wide_tmap; - UINT16 vram_base; - UINT16 control[4]; -}; - -static pf_layer_info pf_layer[3]; - -static UINT16 pf_master_control[4]; -static INT32 m92_sprite_list; - -UINT32 m92_raster_irq_position; -UINT16 *m92_vram_data,*m92_spritecontrol; -UINT8 m92_game_kludge; - -UINT8 m92_sprite_buffer_busy; -static int m92_palette_bank; - /*****************************************************************************/ static TIMER_CALLBACK( spritebuffer_callback ) { - m92_sprite_buffer_busy = 1; - if (m92_game_kludge!=2) /* Major Title 2 doesn't like this interrupt!? */ + m92_state *state = machine->driver_data(); + state->sprite_buffer_busy = 1; + if (state->game_kludge!=2) /* Major Title 2 doesn't like this interrupt!? */ m92_sprite_interrupt(machine); } WRITE16_HANDLER( m92_spritecontrol_w ) { - COMBINE_DATA(&m92_spritecontrol[offset]); + m92_state *state = space->machine->driver_data(); + COMBINE_DATA(&state->spritecontrol[offset]); /* Sprite list size register - used in spriteroutine */ @@ -82,9 +63,9 @@ WRITE16_HANDLER( m92_spritecontrol_w ) if (offset==2 && ACCESSING_BITS_0_7) { if ((data & 0xff) == 8) - m92_sprite_list = (((0x100 - m92_spritecontrol[0]) & 0xff) * 4); + state->sprite_list = (((0x100 - state->spritecontrol[0]) & 0xff) * 4); else - m92_sprite_list = 0x400; + state->sprite_list = 0x400; /* Bit 0 is also significant */ } @@ -93,7 +74,7 @@ WRITE16_HANDLER( m92_spritecontrol_w ) if (offset==4) { buffer_spriteram16_w(space,0,0,0xffff); - m92_sprite_buffer_busy = 0; + state->sprite_buffer_busy = 0; /* Pixel clock is 26.6666 MHz, we have 0x800 bytes, or 0x400 words to copy from spriteram to the buffer. It seems safe to assume 1 @@ -105,6 +86,7 @@ WRITE16_HANDLER( m92_spritecontrol_w ) WRITE16_HANDLER( m92_videocontrol_w ) { + m92_state *state = space->machine->driver_data(); /* Many games write: 0x2000 @@ -121,31 +103,34 @@ WRITE16_HANDLER( m92_videocontrol_w ) if (ACCESSING_BITS_0_7) { /* Access to upper palette bank */ - m92_palette_bank = (data >> 1) & 1; + state->palette_bank = (data >> 1) & 1; } // logerror("%04x: m92_videocontrol_w %d = %02x\n",cpu_get_pc(space->cpu),offset,data); } READ16_HANDLER( m92_paletteram_r ) { - return space->machine->generic.paletteram.u16[offset + 0x400 * m92_palette_bank]; + m92_state *state = space->machine->driver_data(); + return space->machine->generic.paletteram.u16[offset + 0x400 * state->palette_bank]; } WRITE16_HANDLER( m92_paletteram_w ) { - paletteram16_xBBBBBGGGGGRRRRR_word_w(space, offset + 0x400 * m92_palette_bank, data, mem_mask); + m92_state *state = space->machine->driver_data(); + paletteram16_xBBBBBGGGGGRRRRR_word_w(space, offset + 0x400 * state->palette_bank, data, mem_mask); } /*****************************************************************************/ static TILE_GET_INFO( get_pf_tile_info ) { + m92_state *state = machine->driver_data(); pf_layer_info *layer = (pf_layer_info *)param; int tile, attrib; tile_index = 2 * tile_index + layer->vram_base; - attrib = m92_vram_data[tile_index + 1]; - tile = m92_vram_data[tile_index] + ((attrib & 0x8000) << 1); + attrib = state->vram_data[tile_index + 1]; + tile = state->vram_data[tile_index] + ((attrib & 0x8000) << 1); SET_TILE_INFO( 0, @@ -161,19 +146,20 @@ static TILE_GET_INFO( get_pf_tile_info ) WRITE16_HANDLER( m92_vram_w ) { + m92_state *state = space->machine->driver_data(); int laynum; - COMBINE_DATA(&m92_vram_data[offset]); + COMBINE_DATA(&state->vram_data[offset]); for (laynum = 0; laynum < 3; laynum++) { - if ((offset & 0x6000) == pf_layer[laynum].vram_base) + if ((offset & 0x6000) == state->pf_layer[laynum].vram_base) { - tilemap_mark_tile_dirty(pf_layer[laynum].tmap, (offset & 0x1fff) / 2); - tilemap_mark_tile_dirty(pf_layer[laynum].wide_tmap, (offset & 0x3fff) / 2); + tilemap_mark_tile_dirty(state->pf_layer[laynum].tmap, (offset & 0x1fff) / 2); + tilemap_mark_tile_dirty(state->pf_layer[laynum].wide_tmap, (offset & 0x3fff) / 2); } - if ((offset & 0x6000) == pf_layer[laynum].vram_base + 0x2000) - tilemap_mark_tile_dirty(pf_layer[laynum].wide_tmap, (offset & 0x3fff) / 2); + if ((offset & 0x6000) == state->pf_layer[laynum].vram_base + 0x2000) + tilemap_mark_tile_dirty(state->pf_layer[laynum].wide_tmap, (offset & 0x3fff) / 2); } } @@ -181,50 +167,54 @@ WRITE16_HANDLER( m92_vram_w ) WRITE16_HANDLER( m92_pf1_control_w ) { - COMBINE_DATA(&pf_layer[0].control[offset]); + m92_state *state = space->machine->driver_data(); + COMBINE_DATA(&state->pf_layer[0].control[offset]); } WRITE16_HANDLER( m92_pf2_control_w ) { - COMBINE_DATA(&pf_layer[1].control[offset]); + m92_state *state = space->machine->driver_data(); + COMBINE_DATA(&state->pf_layer[1].control[offset]); } WRITE16_HANDLER( m92_pf3_control_w ) { - COMBINE_DATA(&pf_layer[2].control[offset]); + m92_state *state = space->machine->driver_data(); + COMBINE_DATA(&state->pf_layer[2].control[offset]); } WRITE16_HANDLER( m92_master_control_w ) { - UINT16 old = pf_master_control[offset]; + m92_state *state = space->machine->driver_data(); + UINT16 old = state->pf_master_control[offset]; pf_layer_info *layer; - COMBINE_DATA(&pf_master_control[offset]); + COMBINE_DATA(&state->pf_master_control[offset]); switch (offset) { case 0: /* Playfield 1 (top layer) */ case 1: /* Playfield 2 (middle layer) */ case 2: /* Playfield 3 (bottom layer) */ - layer = &pf_layer[offset]; + layer = &state->pf_layer[offset]; /* update VRAM base (bits 0-1) */ - layer->vram_base = (pf_master_control[offset] & 3) * 0x2000; + layer->vram_base = (state->pf_master_control[offset] & 3) * 0x2000; /* update size (bit 2) */ - if (pf_master_control[offset] & 0x04) + if (state->pf_master_control[offset] & 0x04) { tilemap_set_enable(layer->tmap, FALSE); - tilemap_set_enable(layer->wide_tmap, (~pf_master_control[offset] >> 4) & 1); + tilemap_set_enable(layer->wide_tmap, (~state->pf_master_control[offset] >> 4) & 1); } else { - tilemap_set_enable(layer->tmap, (~pf_master_control[offset] >> 4) & 1); + tilemap_set_enable(layer->tmap, (~state->pf_master_control[offset] >> 4) & 1); tilemap_set_enable(layer->wide_tmap, FALSE); } /* mark everything dirty of the VRAM base or size changes */ - if ((old ^ pf_master_control[offset]) & 0x07) + if ((old ^ state->pf_master_control[offset]) & 0x07) { tilemap_mark_all_tiles_dirty(layer->tmap); tilemap_mark_all_tiles_dirty(layer->wide_tmap); @@ -232,7 +222,7 @@ WRITE16_HANDLER( m92_master_control_w ) break; case 3: - m92_raster_irq_position = pf_master_control[3] - 128; + state->raster_irq_position = state->pf_master_control[3] - 128; break; } } @@ -241,20 +231,21 @@ WRITE16_HANDLER( m92_master_control_w ) VIDEO_START( m92 ) { + m92_state *state = machine->driver_data(); int laynum; - memset(&pf_layer, 0, sizeof(pf_layer)); + memset(&state->pf_layer, 0, sizeof(state->pf_layer)); for (laynum = 0; laynum < 3; laynum++) { - pf_layer_info *layer = &pf_layer[laynum]; + pf_layer_info *layer = &state->pf_layer[laynum]; /* allocate two tilemaps per layer, one normal, one wide */ layer->tmap = tilemap_create(machine, get_pf_tile_info, tilemap_scan_rows, 8,8, 64,64); layer->wide_tmap = tilemap_create(machine, get_pf_tile_info, tilemap_scan_rows, 8,8, 128,64); /* set the user data for each one to point to the layer */ - tilemap_set_user_data(layer->tmap, &pf_layer[laynum]); - tilemap_set_user_data(layer->wide_tmap, &pf_layer[laynum]); + tilemap_set_user_data(layer->tmap, &state->pf_layer[laynum]); + tilemap_set_user_data(layer->wide_tmap, &state->pf_layer[laynum]); /* set scroll offsets */ tilemap_set_scrolldx(layer->tmap, 2 * laynum, -2 * laynum + 8); @@ -283,12 +274,12 @@ VIDEO_START( m92 ) memset(machine->generic.spriteram.u16,0,0x800); memset(machine->generic.buffered_spriteram.u16,0,0x800); - state_save_register_global_array(machine, pf_master_control); + state_save_register_global_array(machine, state->pf_master_control); - state_save_register_global(machine, m92_sprite_list); - state_save_register_global(machine, m92_raster_irq_position); - state_save_register_global(machine, m92_sprite_buffer_busy); - state_save_register_global(machine, m92_palette_bank); + state_save_register_global(machine, state->sprite_list); + state_save_register_global(machine, state->raster_irq_position); + state_save_register_global(machine, state->sprite_buffer_busy); + state_save_register_global(machine, state->palette_bank); state_save_register_global_pointer(machine, machine->generic.paletteram.u16, 0x1000); } @@ -297,12 +288,13 @@ VIDEO_START( m92 ) static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect) { + m92_state *state = machine->driver_data(); UINT16 *buffered_spriteram16 = machine->generic.buffered_spriteram.u16; int offs,k; for (k=0; k<8; k++) { - for (offs = 0; offs < m92_sprite_list; ) + for (offs = 0; offs < state->sprite_list; ) { int x,y,sprite,colour,fx,fy,x_multi,y_multi,i,j,s_ptr,pri_back,pri_sprite; @@ -381,8 +373,9 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const recta /*****************************************************************************/ -static void m92_update_scroll_positions(void) +static void m92_update_scroll_positions(running_machine *machine) { + m92_state *state = machine->driver_data(); int laynum; int i; @@ -399,11 +392,11 @@ static void m92_update_scroll_positions(void) for (laynum = 0; laynum < 3; laynum++) { - pf_layer_info *layer = &pf_layer[laynum]; + pf_layer_info *layer = &state->pf_layer[laynum]; - if (pf_master_control[laynum] & 0x40) + if (state->pf_master_control[laynum] & 0x40) { - const UINT16 *scrolldata = m92_vram_data + (0xf400 + 0x400 * laynum) / 2; + const UINT16 *scrolldata = state->vram_data + (0xf400 + 0x400 * laynum) / 2; tilemap_set_scroll_rows(layer->tmap, 512); tilemap_set_scroll_rows(layer->wide_tmap, 512); @@ -430,27 +423,28 @@ static void m92_update_scroll_positions(void) static void m92_screenrefresh(running_machine *machine, bitmap_t *bitmap,const rectangle *cliprect) { + m92_state *state = machine->driver_data(); bitmap_fill(machine->priority_bitmap, cliprect, 0); - if ((~pf_master_control[2] >> 4) & 1) + if ((~state->pf_master_control[2] >> 4) & 1) { - tilemap_draw(bitmap, cliprect, pf_layer[2].wide_tmap, TILEMAP_DRAW_LAYER1, 0); - tilemap_draw(bitmap, cliprect, pf_layer[2].tmap, TILEMAP_DRAW_LAYER1, 0); - tilemap_draw(bitmap, cliprect, pf_layer[2].wide_tmap, TILEMAP_DRAW_LAYER0, 1); - tilemap_draw(bitmap, cliprect, pf_layer[2].tmap, TILEMAP_DRAW_LAYER0, 1); + tilemap_draw(bitmap, cliprect, state->pf_layer[2].wide_tmap, TILEMAP_DRAW_LAYER1, 0); + tilemap_draw(bitmap, cliprect, state->pf_layer[2].tmap, TILEMAP_DRAW_LAYER1, 0); + tilemap_draw(bitmap, cliprect, state->pf_layer[2].wide_tmap, TILEMAP_DRAW_LAYER0, 1); + tilemap_draw(bitmap, cliprect, state->pf_layer[2].tmap, TILEMAP_DRAW_LAYER0, 1); } else bitmap_fill(bitmap, cliprect, 0); - tilemap_draw(bitmap, cliprect, pf_layer[1].wide_tmap, TILEMAP_DRAW_LAYER1, 0); - tilemap_draw(bitmap, cliprect, pf_layer[1].tmap, TILEMAP_DRAW_LAYER1, 0); - tilemap_draw(bitmap, cliprect, pf_layer[1].wide_tmap, TILEMAP_DRAW_LAYER0, 1); - tilemap_draw(bitmap, cliprect, pf_layer[1].tmap, TILEMAP_DRAW_LAYER0, 1); + tilemap_draw(bitmap, cliprect, state->pf_layer[1].wide_tmap, TILEMAP_DRAW_LAYER1, 0); + tilemap_draw(bitmap, cliprect, state->pf_layer[1].tmap, TILEMAP_DRAW_LAYER1, 0); + tilemap_draw(bitmap, cliprect, state->pf_layer[1].wide_tmap, TILEMAP_DRAW_LAYER0, 1); + tilemap_draw(bitmap, cliprect, state->pf_layer[1].tmap, TILEMAP_DRAW_LAYER0, 1); - tilemap_draw(bitmap, cliprect, pf_layer[0].wide_tmap, TILEMAP_DRAW_LAYER1, 0); - tilemap_draw(bitmap, cliprect, pf_layer[0].tmap, TILEMAP_DRAW_LAYER1, 0); - tilemap_draw(bitmap, cliprect, pf_layer[0].wide_tmap, TILEMAP_DRAW_LAYER0, 1); - tilemap_draw(bitmap, cliprect, pf_layer[0].tmap, TILEMAP_DRAW_LAYER0, 1); + tilemap_draw(bitmap, cliprect, state->pf_layer[0].wide_tmap, TILEMAP_DRAW_LAYER1, 0); + tilemap_draw(bitmap, cliprect, state->pf_layer[0].tmap, TILEMAP_DRAW_LAYER1, 0); + tilemap_draw(bitmap, cliprect, state->pf_layer[0].wide_tmap, TILEMAP_DRAW_LAYER0, 1); + tilemap_draw(bitmap, cliprect, state->pf_layer[0].tmap, TILEMAP_DRAW_LAYER0, 1); draw_sprites(machine, bitmap, cliprect); } @@ -458,7 +452,7 @@ static void m92_screenrefresh(running_machine *machine, bitmap_t *bitmap,const r VIDEO_UPDATE( m92 ) { - m92_update_scroll_positions(); + m92_update_scroll_positions(screen->machine); m92_screenrefresh(screen->machine, bitmap, cliprect); /* Flipscreen appears hardwired to the dipswitch - strange */ diff --git a/src/mame/video/nycaptor.c b/src/mame/video/nycaptor.c index e140c5e9a4b..2b23fe050e9 100644 --- a/src/mame/video/nycaptor.c +++ b/src/mame/video/nycaptor.c @@ -10,11 +10,6 @@ #define NYCAPTOR_DEBUG 0 -#if NYCAPTOR_DEBUG -static int nycaptor_mask = 0; -#endif - - /* 298 (e298) - spot (0-3) , 299 (e299) - lives spot number isn't set to 0 in main menu ; lives - yes @@ -60,7 +55,7 @@ static TILE_GET_INFO( get_tile_info ) tileinfo->group = 3; #if NYCAPTOR_DEBUG - if (nycaptor_mask & (1 << tileinfo->category)) + if (state->mask & (1 << tileinfo->category)) { if (nycaptor_spot(machine)) pal = 0xe; @@ -192,7 +187,7 @@ static void draw_sprites( running_machine *machine, bitmap_t *bitmap, const rect if (priori == pri) { #if NYCAPTOR_DEBUG - if (nycaptor_mask & (1 << (pri + 4))) pal = 0xd; + if (state->mask & (1 << (pri + 4))) pal = 0xd; #endif flipx = BIT(state->spriteram[offs + 1], 6); flipy = BIT(state->spriteram[offs + 1], 7); @@ -229,7 +224,7 @@ static void draw_sprites( running_machine *machine, bitmap_t *bitmap, const rect x - no bg/sprite pri. */ -#define mKEY_MASK(x,y) if (input_code_pressed_once(machine, x)) { nycaptor_mask |= y; tilemap_mark_all_tiles_dirty(state->bg_tilemap);} +#define mKEY_MASK(x,y) if (input_code_pressed_once(machine, x)) { state->mask |= y; tilemap_mark_all_tiles_dirty(state->bg_tilemap); } static void nycaptor_setmask( running_machine *machine ) { @@ -249,8 +244,8 @@ static void nycaptor_setmask( running_machine *machine ) mKEY_MASK(KEYCODE_J, 0x400); mKEY_MASK(KEYCODE_K, 0x800); - if (input_code_pressed_once(machine, KEYCODE_Z)){nycaptor_mask = 0; tilemap_mark_all_tiles_dirty(state->bg_tilemap);} /* disable */ - if (input_code_pressed_once(machine, KEYCODE_X)){nycaptor_mask |= 0x1000; tilemap_mark_all_tiles_dirty(state->bg_tilemap);} /* no layers */ + if (input_code_pressed_once(machine, KEYCODE_Z)){state->mask = 0; tilemap_mark_all_tiles_dirty(state->bg_tilemap);} /* disable */ + if (input_code_pressed_once(machine, KEYCODE_X)){state->mask |= 0x1000; tilemap_mark_all_tiles_dirty(state->bg_tilemap);} /* no layers */ } #endif @@ -260,7 +255,7 @@ VIDEO_UPDATE( nycaptor ) #if NYCAPTOR_DEBUG nycaptor_setmask(screen->machine); - if (nycaptor_mask & 0x1000) + if (state->mask & 0x1000) { tilemap_draw(bitmap, cliprect, state->bg_tilemap, TILEMAP_DRAW_LAYER1 | 3, 0); tilemap_draw(bitmap, cliprect, state->bg_tilemap, TILEMAP_DRAW_LAYER0 | 3, 0); diff --git a/src/mame/video/pitnrun.c b/src/mame/video/pitnrun.c index 25f68858d86..2bb1fe80974 100644 --- a/src/mame/video/pitnrun.c +++ b/src/mame/video/pitnrun.c @@ -19,15 +19,6 @@ In debug build press 'w' for spotlight and 'e' for lightning #include "emu.h" #include "includes/pitnrun.h" -static int pitnrun_h_heed; -static int pitnrun_v_heed; -static int pitnrun_ha; -static int pitnrun_scroll; -static int pitnrun_char_bank; -static int pitnrun_color_select; -static bitmap_t *tmp_bitmap[4]; -static tilemap_t *bg, *fg; -UINT8* pitnrun_videoram2; static TILE_GET_INFO( get_tile_info1 ) @@ -45,12 +36,13 @@ static TILE_GET_INFO( get_tile_info1 ) static TILE_GET_INFO( get_tile_info2 ) { + pitnrun_state *state = machine->driver_data(); int code; - code = pitnrun_videoram2[tile_index]; + code = state->videoram2[tile_index]; SET_TILE_INFO( 1, - code + (pitnrun_char_bank<<8), - pitnrun_color_select&1, + code + (state->char_bank<<8), + state->color_select&1, 0); } @@ -59,54 +51,62 @@ WRITE8_HANDLER( pitnrun_videoram_w ) pitnrun_state *state = space->machine->driver_data(); UINT8 *videoram = state->videoram; videoram[offset] = data; - tilemap_mark_all_tiles_dirty( fg ); + tilemap_mark_all_tiles_dirty( state->fg ); } WRITE8_HANDLER( pitnrun_videoram2_w ) { - pitnrun_videoram2[offset] = data; - tilemap_mark_all_tiles_dirty( bg ); + pitnrun_state *state = space->machine->driver_data(); + state->videoram2[offset] = data; + tilemap_mark_all_tiles_dirty( state->bg ); } WRITE8_HANDLER( pitnrun_char_bank_select ) { - if(pitnrun_char_bank!=data) + pitnrun_state *state = space->machine->driver_data(); + if(state->char_bank!=data) { - tilemap_mark_all_tiles_dirty( bg ); - pitnrun_char_bank=data; + tilemap_mark_all_tiles_dirty( state->bg ); + state->char_bank=data; } } WRITE8_HANDLER( pitnrun_scroll_w ) { - pitnrun_scroll = (pitnrun_scroll & (0xff<<((offset)?0:8))) |( data<<((offset)?8:0)); - tilemap_set_scrollx( bg, 0, pitnrun_scroll); + pitnrun_state *state = space->machine->driver_data(); + state->scroll = (state->scroll & (0xff<<((offset)?0:8))) |( data<<((offset)?8:0)); + tilemap_set_scrollx( state->bg, 0, state->scroll); } WRITE8_HANDLER(pitnrun_ha_w) { - pitnrun_ha=data; + pitnrun_state *state = space->machine->driver_data(); + state->ha=data; } WRITE8_HANDLER(pitnrun_h_heed_w) { - pitnrun_h_heed=data; + pitnrun_state *state = space->machine->driver_data(); + state->h_heed=data; } WRITE8_HANDLER(pitnrun_v_heed_w) { - pitnrun_v_heed=data; + pitnrun_state *state = space->machine->driver_data(); + state->v_heed=data; } WRITE8_HANDLER(pitnrun_color_select_w) { - pitnrun_color_select=data; + pitnrun_state *state = space->machine->driver_data(); + state->color_select=data; tilemap_mark_all_tiles_dirty_all(space->machine); } static void pitnrun_spotlights(running_machine *machine) { + pitnrun_state *state = machine->driver_data(); int x,y,i,b,datapix; UINT8 *ROM = machine->region("user1")->base(); for(i=0;i<4;i++) @@ -116,7 +116,7 @@ static void pitnrun_spotlights(running_machine *machine) datapix=ROM[128*16*i+x+y*16]; for(b=0;b<8;b++) { - *BITMAP_ADDR16(tmp_bitmap[i], y, x*8+(7-b)) = (datapix&1); + *BITMAP_ADDR16(state->tmp_bitmap[i], y, x*8+(7-b)) = (datapix&1); datapix>>=1; } } @@ -171,13 +171,14 @@ PALETTE_INIT (pitnrun) VIDEO_START(pitnrun) { - fg = tilemap_create( machine, get_tile_info1,tilemap_scan_rows,8,8,32,32 ); - bg = tilemap_create( machine, get_tile_info2,tilemap_scan_rows,8,8,32*4,32 ); - tilemap_set_transparent_pen( fg, 0 ); - tmp_bitmap[0] = auto_bitmap_alloc(machine,128,128,machine->primary_screen->format()); - tmp_bitmap[1] = auto_bitmap_alloc(machine,128,128,machine->primary_screen->format()); - tmp_bitmap[2] = auto_bitmap_alloc(machine,128,128,machine->primary_screen->format()); - tmp_bitmap[3] = auto_bitmap_alloc(machine,128,128,machine->primary_screen->format()); + pitnrun_state *state = machine->driver_data(); + state->fg = tilemap_create( machine, get_tile_info1,tilemap_scan_rows,8,8,32,32 ); + state->bg = tilemap_create( machine, get_tile_info2,tilemap_scan_rows,8,8,32*4,32 ); + tilemap_set_transparent_pen( state->fg, 0 ); + state->tmp_bitmap[0] = auto_bitmap_alloc(machine,128,128,machine->primary_screen->format()); + state->tmp_bitmap[1] = auto_bitmap_alloc(machine,128,128,machine->primary_screen->format()); + state->tmp_bitmap[2] = auto_bitmap_alloc(machine,128,128,machine->primary_screen->format()); + state->tmp_bitmap[3] = auto_bitmap_alloc(machine,128,128,machine->primary_screen->format()); pitnrun_spotlights(machine); } @@ -217,6 +218,7 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const recta VIDEO_UPDATE( pitnrun ) { + pitnrun_state *state = screen->machine->driver_data(); int dx=0,dy=0; rectangle myclip=*cliprect; @@ -243,12 +245,12 @@ VIDEO_UPDATE( pitnrun ) bitmap_fill(bitmap,cliprect,0); - if(!(pitnrun_ha&4)) - tilemap_draw(bitmap,cliprect,bg, 0,0); + if(!(state->ha&4)) + tilemap_draw(bitmap,cliprect,state->bg, 0,0); else { - dx=128-pitnrun_h_heed+((pitnrun_ha&8)<<5)+3; - dy=128-pitnrun_v_heed+((pitnrun_ha&0x10)<<4); + dx=128-state->h_heed+((state->ha&8)<<5)+3; + dy=128-state->v_heed+((state->ha&0x10)<<4); if (flip_screen_x_get(screen->machine)) dx=128-dx+16; @@ -268,14 +270,14 @@ VIDEO_UPDATE( pitnrun ) if(myclip.max_y>cliprect->max_y)myclip.max_y=cliprect->max_y; if(myclip.max_x>cliprect->max_x)myclip.max_x=cliprect->max_x; - tilemap_draw(bitmap,&myclip,bg, 0,0); + tilemap_draw(bitmap,&myclip,state->bg, 0,0); } draw_sprites(screen->machine,bitmap,&myclip); - if(pitnrun_ha&4) - copybitmap_trans(bitmap,tmp_bitmap[pitnrun_ha&3],flip_screen_x_get(screen->machine),flip_screen_y_get(screen->machine),dx,dy,&myclip, 1); - tilemap_draw(bitmap,cliprect,fg, 0,0); + if(state->ha&4) + copybitmap_trans(bitmap,state->tmp_bitmap[state->ha&3],flip_screen_x_get(screen->machine),flip_screen_y_get(screen->machine),dx,dy,&myclip, 1); + tilemap_draw(bitmap,cliprect,state->fg, 0,0); return 0; } diff --git a/src/mame/video/psikyosh.c b/src/mame/video/psikyosh.c index 7ba007f8113..6c2e4bf6c78 100644 --- a/src/mame/video/psikyosh.c +++ b/src/mame/video/psikyosh.c @@ -341,7 +341,7 @@ static void draw_bglayer( running_machine *machine, int layer, bitmap_t *bitmap, } -/* populate state->bg_bitmap for the given bank if it's not already */ +/* populate bg_bitmap for the given bank if it's not already */ static void cache_bitmap(int scanline, psikyosh_state *state, gfx_element *gfx, int size, int tilebank, int alpha, int *last_bank) { // test if the tile row is the cached one or not diff --git a/src/mame/video/qix.c b/src/mame/video/qix.c index cb5ec75f9e5..b19fa3e7cb5 100644 --- a/src/mame/video/qix.c +++ b/src/mame/video/qix.c @@ -215,8 +215,6 @@ static WRITE8_HANDLER( slither_addresslatch_w ) * *************************************/ -#define NUM_PENS (0x100) - static WRITE8_HANDLER( qix_paletteram_w ) { @@ -316,11 +314,9 @@ static MC6845_BEGIN_UPDATE( begin_update ) #endif /* create the pens */ - static pen_t pens[NUM_PENS]; + get_pens(state, state->pens); - get_pens(state, pens); - - return pens; + return state->pens; } diff --git a/src/mame/video/redalert.c b/src/mame/video/redalert.c index db93fe7876f..9162d800611 100644 --- a/src/mame/video/redalert.c +++ b/src/mame/video/redalert.c @@ -16,31 +16,6 @@ #define NUM_BITMAP_PENS 8 - -/************************************* - * - * Global variables - * - *************************************/ - -UINT8 *redalert_bitmap_videoram; -UINT8 *redalert_bitmap_color; -UINT8 *redalert_charmap_videoram; - -UINT8 *redalert_video_control; - - - -/************************************* - * - * Local variable - * - *************************************/ - -static UINT8 *redalert_bitmap_colorram; -static UINT8 redalert_control_xor; - - /************************************* * * Bitmap videoram write handler @@ -49,8 +24,9 @@ static UINT8 redalert_control_xor; WRITE8_HANDLER( redalert_bitmap_videoram_w ) { - redalert_bitmap_videoram[offset ] = data; - redalert_bitmap_colorram[offset >> 3] = *redalert_bitmap_color & 0x07; + redalert_state *state = space->machine->driver_data(); + state->bitmap_videoram[offset ] = data; + state->bitmap_colorram[offset >> 3] = *state->bitmap_color & 0x07; } @@ -187,18 +163,20 @@ static void get_panther_pens(running_machine *machine, pen_t *pens) static VIDEO_START( redalert ) { - redalert_bitmap_colorram = auto_alloc_array(machine, UINT8, 0x0400); + redalert_state *state = machine->driver_data(); + state->bitmap_colorram = auto_alloc_array(machine, UINT8, 0x0400); - state_save_register_global_pointer(machine, redalert_bitmap_colorram, 0x0400); + state_save_register_global_pointer(machine, state->bitmap_colorram, 0x0400); - redalert_control_xor = 0x00; + state->control_xor = 0x00; } static VIDEO_START( ww3 ) { + redalert_state *state = machine->driver_data(); VIDEO_START_CALL( redalert ); - redalert_control_xor = 0x04; + state->control_xor = 0x04; } @@ -210,6 +188,7 @@ static VIDEO_START( ww3 ) static VIDEO_UPDATE( redalert ) { + redalert_state *state = screen->machine->driver_data(); pen_t pens[NUM_CHARMAP_PENS + NUM_BITMAP_PENS + 1]; offs_t offs; @@ -224,22 +203,22 @@ static VIDEO_UPDATE( redalert ) UINT8 y = offs & 0xff; UINT8 x = (~offs >> 8) << 3; - UINT8 bitmap_data = redalert_bitmap_videoram[offs]; - UINT8 bitmap_color = redalert_bitmap_colorram[offs >> 3]; + UINT8 bitmap_data = state->bitmap_videoram[offs]; + UINT8 bitmap_color = state->bitmap_colorram[offs >> 3]; - UINT8 charmap_code = redalert_charmap_videoram[0x0000 | (offs >> 3)]; + UINT8 charmap_code = state->charmap_videoram[0x0000 | (offs >> 3)]; offs_t charmap_data_base = ((charmap_code & 0x7f) << 3) | (offs & 0x07); /* D7 of the char code selects the char set to use */ if (charmap_code & 0x80) { - charmap_data_1 = redalert_charmap_videoram[0x0400 | charmap_data_base]; - charmap_data_2 = redalert_charmap_videoram[0x0c00 | charmap_data_base]; + charmap_data_1 = state->charmap_videoram[0x0400 | charmap_data_base]; + charmap_data_2 = state->charmap_videoram[0x0c00 | charmap_data_base]; } else { charmap_data_1 = 0; /* effectively disables A0 of the color PROM */ - charmap_data_2 = redalert_charmap_videoram[0x0800 | charmap_data_base]; + charmap_data_2 = state->charmap_videoram[0x0800 | charmap_data_base]; } for (i = 0; i < 8; i++) @@ -255,7 +234,7 @@ static VIDEO_UPDATE( redalert ) else pen = pens[((charmap_code & 0xfe) << 1) | color_prom_a0_a1]; - if ((*redalert_video_control ^ redalert_control_xor) & 0x04) + if ((*state->video_control ^ state->control_xor) & 0x04) *BITMAP_ADDR32(bitmap, y, x) = pen; else *BITMAP_ADDR32(bitmap, y ^ 0xff, x ^ 0xff) = pen; @@ -282,6 +261,7 @@ static VIDEO_UPDATE( redalert ) static VIDEO_UPDATE( demoneye ) { + redalert_state *state = screen->machine->driver_data(); pen_t pens[NUM_CHARMAP_PENS + NUM_BITMAP_PENS + 1]; offs_t offs; @@ -296,27 +276,27 @@ static VIDEO_UPDATE( demoneye ) UINT8 y = offs & 0xff; UINT8 x = (~offs >> 8) << 3; - UINT8 bitmap_data = redalert_bitmap_videoram[offs]; - UINT8 bitmap_color = redalert_bitmap_colorram[offs >> 3]; + UINT8 bitmap_data = state->bitmap_videoram[offs]; + UINT8 bitmap_color = state->bitmap_colorram[offs >> 3]; - UINT8 charmap_code = redalert_charmap_videoram[0x1000 | (offs >> 3)]; + UINT8 charmap_code = state->charmap_videoram[0x1000 | (offs >> 3)]; offs_t charmap_data_base = ((charmap_code & 0x7f) << 3) | (offs & 0x07); /* D7 of the char code selects the char set to use */ if (charmap_code & 0x80) { - charmap_data_1 = redalert_charmap_videoram[0x0400 | charmap_data_base]; - charmap_data_2 = redalert_charmap_videoram[0x0c00 | charmap_data_base]; + charmap_data_1 = state->charmap_videoram[0x0400 | charmap_data_base]; + charmap_data_2 = state->charmap_videoram[0x0c00 | charmap_data_base]; } else { - charmap_data_1 = redalert_charmap_videoram[0x0000 | charmap_data_base]; - charmap_data_2 = redalert_charmap_videoram[0x0800 | charmap_data_base]; + charmap_data_1 = state->charmap_videoram[0x0000 | charmap_data_base]; + charmap_data_2 = state->charmap_videoram[0x0800 | charmap_data_base]; } /* this is the mapping of the 3rd char set */ - //charmap_data_1 = redalert_charmap_videoram[0x1400 | charmap_data_base]; - //charmap_data_2 = redalert_charmap_videoram[0x1c00 | charmap_data_base]; + //charmap_data_1 = state->charmap_videoram[0x1400 | charmap_data_base]; + //charmap_data_2 = state->charmap_videoram[0x1c00 | charmap_data_base]; for (i = 0; i < 8; i++) { @@ -331,7 +311,7 @@ static VIDEO_UPDATE( demoneye ) else pen = pens[((charmap_code & 0xfe) << 1) | color_prom_a0_a1]; - if (*redalert_video_control & 0x04) + if (*state->video_control & 0x04) *BITMAP_ADDR32(bitmap, y ^ 0xff, x ^ 0xff) = pen; else *BITMAP_ADDR32(bitmap, y, x) = pen; @@ -356,6 +336,7 @@ static VIDEO_UPDATE( demoneye ) static VIDEO_UPDATE( panther ) { + redalert_state *state = screen->machine->driver_data(); pen_t pens[NUM_CHARMAP_PENS + NUM_BITMAP_PENS + 1]; offs_t offs; @@ -370,22 +351,22 @@ static VIDEO_UPDATE( panther ) UINT8 y = offs & 0xff; UINT8 x = (~offs >> 8) << 3; - UINT8 bitmap_data = redalert_bitmap_videoram[offs]; - UINT8 bitmap_color = redalert_bitmap_colorram[offs >> 3]; + UINT8 bitmap_data = state->bitmap_videoram[offs]; + UINT8 bitmap_color = state->bitmap_colorram[offs >> 3]; - UINT8 charmap_code = redalert_charmap_videoram[0x0000 | (offs >> 3)]; + UINT8 charmap_code = state->charmap_videoram[0x0000 | (offs >> 3)]; offs_t charmap_data_base = ((charmap_code & 0x7f) << 3) | (offs & 0x07); /* D7 of the char code selects the char set to use */ if (charmap_code & 0x80) { - charmap_data_1 = redalert_charmap_videoram[0x0400 | charmap_data_base]; - charmap_data_2 = redalert_charmap_videoram[0x0c00 | charmap_data_base]; + charmap_data_1 = state->charmap_videoram[0x0400 | charmap_data_base]; + charmap_data_2 = state->charmap_videoram[0x0c00 | charmap_data_base]; } else { charmap_data_1 = 0; /* effectively disables A0 of the color PROM */ - charmap_data_2 = redalert_charmap_videoram[0x0800 | charmap_data_base]; + charmap_data_2 = state->charmap_videoram[0x0800 | charmap_data_base]; } for (i = 0; i < 8; i++) @@ -401,7 +382,7 @@ static VIDEO_UPDATE( panther ) else pen = pens[((charmap_code & 0xfe) << 1) | color_prom_a0_a1]; - if ((*redalert_video_control ^ redalert_control_xor) & 0x04) + if ((*state->video_control ^ state->control_xor) & 0x04) *BITMAP_ADDR32(bitmap, y, x) = pen; else *BITMAP_ADDR32(bitmap, y ^ 0xff, x ^ 0xff) = pen; diff --git a/src/mame/video/retofinv.c b/src/mame/video/retofinv.c index 01e0e055b77..969a0d20290 100644 --- a/src/mame/video/retofinv.c +++ b/src/mame/video/retofinv.c @@ -9,14 +9,6 @@ #include "emu.h" #include "includes/retofinv.h" -UINT8 *retofinv_bg_videoram; -UINT8 *retofinv_fg_videoram; -UINT8 *retofinv_sharedram; - -static int fg_bank,bg_bank; -static tilemap_t *bg_tilemap,*fg_tilemap; - - PALETTE_INIT( retofinv ) { @@ -81,22 +73,24 @@ static TILEMAP_MAPPER( tilemap_scan ) static TILE_GET_INFO( bg_get_tile_info ) { + retofinv_state *state = machine->driver_data(); SET_TILE_INFO( 2, - retofinv_bg_videoram[tile_index] + 256 * bg_bank, - retofinv_bg_videoram[0x400 + tile_index] & 0x3f, + state->bg_videoram[tile_index] + 256 * state->bg_bank, + state->bg_videoram[0x400 + tile_index] & 0x3f, 0); } static TILE_GET_INFO( fg_get_tile_info ) { - int color = retofinv_fg_videoram[0x400 + tile_index]; + retofinv_state *state = machine->driver_data(); + int color = state->fg_videoram[0x400 + tile_index]; tileinfo->group = color; SET_TILE_INFO( 0, - retofinv_fg_videoram[tile_index] + 256 * fg_bank, + state->fg_videoram[tile_index] + 256 * state->fg_bank, color, 0); } @@ -111,10 +105,11 @@ static TILE_GET_INFO( fg_get_tile_info ) VIDEO_START( retofinv ) { - bg_tilemap = tilemap_create(machine, bg_get_tile_info,tilemap_scan,8,8,36,28); - fg_tilemap = tilemap_create(machine, fg_get_tile_info,tilemap_scan,8,8,36,28); + retofinv_state *state = machine->driver_data(); + state->bg_tilemap = tilemap_create(machine, bg_get_tile_info,tilemap_scan,8,8,36,28); + state->fg_tilemap = tilemap_create(machine, fg_get_tile_info,tilemap_scan,8,8,36,28); - colortable_configure_tilemap_groups(machine->colortable, fg_tilemap, machine->gfx[0], 0); + colortable_configure_tilemap_groups(machine->colortable, state->fg_tilemap, machine->gfx[0], 0); } @@ -127,18 +122,21 @@ VIDEO_START( retofinv ) WRITE8_HANDLER( retofinv_bg_videoram_w ) { - retofinv_bg_videoram[offset] = data; - tilemap_mark_tile_dirty(bg_tilemap,offset & 0x3ff); + retofinv_state *state = space->machine->driver_data(); + state->bg_videoram[offset] = data; + tilemap_mark_tile_dirty(state->bg_tilemap,offset & 0x3ff); } WRITE8_HANDLER( retofinv_fg_videoram_w ) { - retofinv_fg_videoram[offset] = data; - tilemap_mark_tile_dirty(fg_tilemap,offset & 0x3ff); + retofinv_state *state = space->machine->driver_data(); + state->fg_videoram[offset] = data; + tilemap_mark_tile_dirty(state->fg_tilemap,offset & 0x3ff); } WRITE8_HANDLER( retofinv_gfx_ctrl_w ) { + retofinv_state *state = space->machine->driver_data(); switch (offset) { case 0: @@ -146,18 +144,18 @@ WRITE8_HANDLER( retofinv_gfx_ctrl_w ) break; case 1: - if (fg_bank != (data & 1)) + if (state->fg_bank != (data & 1)) { - fg_bank = data & 1; - tilemap_mark_all_tiles_dirty(fg_tilemap); + state->fg_bank = data & 1; + tilemap_mark_all_tiles_dirty(state->fg_tilemap); } break; case 2: - if (bg_bank != (data & 1)) + if (state->bg_bank != (data & 1)) { - bg_bank = data & 1; - tilemap_mark_all_tiles_dirty(bg_tilemap); + state->bg_bank = data & 1; + tilemap_mark_all_tiles_dirty(state->bg_tilemap); } break; } @@ -173,9 +171,10 @@ WRITE8_HANDLER( retofinv_gfx_ctrl_w ) static void draw_sprites(running_machine *machine, bitmap_t *bitmap) { - UINT8 *spriteram = retofinv_sharedram + 0x0780; - UINT8 *spriteram_2 = retofinv_sharedram + 0x0f80; - UINT8 *spriteram_3 = retofinv_sharedram + 0x1780; + retofinv_state *state = machine->driver_data(); + UINT8 *spriteram = state->sharedram + 0x0780; + UINT8 *spriteram_2 = state->sharedram + 0x0f80; + UINT8 *spriteram_3 = state->sharedram + 0x1780; int offs; static const rectangle spritevisiblearea = { @@ -232,8 +231,9 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap) VIDEO_UPDATE( retofinv ) { - tilemap_draw(bitmap,cliprect,bg_tilemap,0,0); + retofinv_state *state = screen->machine->driver_data(); + tilemap_draw(bitmap,cliprect,state->bg_tilemap,0,0); draw_sprites(screen->machine, bitmap); - tilemap_draw(bitmap,cliprect,fg_tilemap,0,0); + tilemap_draw(bitmap,cliprect,state->fg_tilemap,0,0); return 0; } diff --git a/src/mame/video/rollrace.c b/src/mame/video/rollrace.c index 4b56455094c..51dd89f9a93 100644 --- a/src/mame/video/rollrace.c +++ b/src/mame/video/rollrace.c @@ -1,18 +1,7 @@ #include "emu.h" #include "includes/rollrace.h" -UINT8 *rollrace_videoram; -UINT8 *rollrace_colorram; -static int ra_charbank[2] = { 0,0 }; -static int ra_bkgpage = 0; -static int ra_bkgflip = 0; -static int ra_chrbank = 0; -static int ra_bkgpen = 0; -static int ra_bkgcol = 0; -static int ra_flipy = 0; -static int ra_flipx = 0; -static int ra_spritebank =0 ; #define RA_FGCHAR_BASE 0 #define RA_BGCHAR_BASE 4 @@ -20,48 +9,56 @@ static int ra_spritebank =0 ; WRITE8_HANDLER( rollrace_charbank_w) { + rollrace_state *state = space->machine->driver_data(); - ra_charbank[offset&1] = data; - ra_chrbank = ra_charbank[0] | (ra_charbank[1] << 1) ; + state->ra_charbank[offset&1] = data; + state->ra_chrbank = state->ra_charbank[0] | (state->ra_charbank[1] << 1) ; } WRITE8_HANDLER( rollrace_bkgpen_w) { - ra_bkgpen = data; + rollrace_state *state = space->machine->driver_data(); + state->ra_bkgpen = data; } WRITE8_HANDLER(rollrace_spritebank_w) { - ra_spritebank = data; + rollrace_state *state = space->machine->driver_data(); + state->ra_spritebank = data; } WRITE8_HANDLER(rollrace_backgroundpage_w) { + rollrace_state *state = space->machine->driver_data(); - ra_bkgpage = data & 0x1f; - ra_bkgflip = ( data & 0x80 ) >> 7; + state->ra_bkgpage = data & 0x1f; + state->ra_bkgflip = ( data & 0x80 ) >> 7; /* 0x80 flip vertical */ } WRITE8_HANDLER( rollrace_backgroundcolor_w ) { - ra_bkgcol = data; + rollrace_state *state = space->machine->driver_data(); + state->ra_bkgcol = data; } WRITE8_HANDLER( rollrace_flipy_w ) { - ra_flipy = data & 0x01; + rollrace_state *state = space->machine->driver_data(); + state->ra_flipy = data & 0x01; } WRITE8_HANDLER( rollrace_flipx_w ) { - ra_flipx = data & 0x01; + rollrace_state *state = space->machine->driver_data(); + state->ra_flipx = data & 0x01; } VIDEO_UPDATE( rollrace ) { + rollrace_state *state = screen->machine->driver_data(); UINT8 *spriteram = screen->machine->generic.spriteram.u8; int offs; int sx, sy; @@ -70,12 +67,12 @@ VIDEO_UPDATE( rollrace ) const UINT8 *mem = screen->machine->region("user1")->base(); /* fill in background colour*/ - bitmap_fill(bitmap,cliprect,ra_bkgpen); + bitmap_fill(bitmap,cliprect,state->ra_bkgpen); /* draw road */ for (offs = 0x3ff; offs >= 0; offs--) { - if(!(ra_bkgflip)) + if(!(state->ra_bkgflip)) { sy = ( 31 - offs / 32 ) ; } @@ -84,18 +81,18 @@ VIDEO_UPDATE( rollrace ) sx = ( offs%32 ) ; - if(ra_flipx) + if(state->ra_flipx) sx = 31-sx ; - if(ra_flipy) + if(state->ra_flipy) sy = 31-sy ; drawgfx_transpen(bitmap, cliprect,screen->machine->gfx[RA_BGCHAR_BASE], - mem[offs + ( ra_bkgpage * 1024 )] - + ((( mem[offs + 0x4000 + ( ra_bkgpage * 1024 )] & 0xc0 ) >> 6 ) * 256 ) , - ra_bkgcol, - ra_flipx,(ra_bkgflip^ra_flipy), + mem[offs + ( state->ra_bkgpage * 1024 )] + + ((( mem[offs + 0x4000 + ( state->ra_bkgpage * 1024 )] & 0xc0 ) >> 6 ) * 256 ) , + state->ra_bkgcol, + state->ra_flipx,(state->ra_bkgflip^state->ra_flipy), sx*8,sy*8,0); @@ -116,9 +113,9 @@ VIDEO_UPDATE( rollrace ) if(sx && sy) { - if(ra_flipx) + if(state->ra_flipx) sx = 224 - sx; - if(ra_flipy) + if(state->ra_flipy) sy = 224 - sy; if(spriteram[offs+1] & 0x80) @@ -127,12 +124,12 @@ VIDEO_UPDATE( rollrace ) bank = (( spriteram[offs+1] & 0x40 ) >> 6 ) ; if(bank) - bank += ra_spritebank; + bank += state->ra_spritebank; drawgfx_transpen(bitmap, cliprect,screen->machine->gfx[ RA_SP_BASE + bank ], spriteram[offs+1] & 0x3f , spriteram[offs+2] & 0x1f, - ra_flipx,!(s_flipy^ra_flipy), + state->ra_flipx,!(s_flipy^state->ra_flipy), sx,sy,0); } } @@ -147,20 +144,20 @@ VIDEO_UPDATE( rollrace ) sx = offs % 32; sy = offs / 32; - scroll = ( 8 * sy + rollrace_colorram[2 * sx] ) % 256; - col = rollrace_colorram[ sx * 2 + 1 ]&0x1f; + scroll = ( 8 * sy + state->colorram[2 * sx] ) % 256; + col = state->colorram[ sx * 2 + 1 ]&0x1f; - if (!ra_flipy) + if (!state->ra_flipy) { scroll = (248 - scroll) % 256; } - if (ra_flipx) sx = 31 - sx; + if (state->ra_flipx) sx = 31 - sx; - drawgfx_transpen(bitmap,cliprect,screen->machine->gfx[RA_FGCHAR_BASE + ra_chrbank] , - rollrace_videoram[ offs ] , + drawgfx_transpen(bitmap,cliprect,screen->machine->gfx[RA_FGCHAR_BASE + state->ra_chrbank] , + state->videoram[ offs ] , col, - ra_flipx,ra_flipy, + state->ra_flipx,state->ra_flipy, 8*sx,scroll,0); } diff --git a/src/mame/video/slapshot.c b/src/mame/video/slapshot.c index 509a877481f..bc68a6d8e41 100644 --- a/src/mame/video/slapshot.c +++ b/src/mame/video/slapshot.c @@ -462,39 +462,35 @@ VIDEO_UPDATE( slapshot ) UINT8 spritepri[4]; UINT16 priority; -#ifdef MAME_DEBUG - static int dislayer[5]; /* Layer toggles to help get the layers correct */ -#endif - #ifdef MAME_DEBUG if (input_code_pressed_once (screen->machine, KEYCODE_Z)) { - dislayer[0] ^= 1; - popmessage("bg0: %01x",dislayer[0]); + state->dislayer[0] ^= 1; + popmessage("bg0: %01x",state->dislayer[0]); } if (input_code_pressed_once (screen->machine, KEYCODE_X)) { - dislayer[1] ^= 1; - popmessage("bg1: %01x",dislayer[1]); + state->dislayer[1] ^= 1; + popmessage("bg1: %01x",state->dislayer[1]); } if (input_code_pressed_once (screen->machine, KEYCODE_C)) { - dislayer[2] ^= 1; - popmessage("bg2: %01x",dislayer[2]); + state->dislayer[2] ^= 1; + popmessage("bg2: %01x",state->dislayer[2]); } if (input_code_pressed_once (screen->machine, KEYCODE_V)) { - dislayer[3] ^= 1; - popmessage("bg3: %01x",dislayer[3]); + state->dislayer[3] ^= 1; + popmessage("bg3: %01x",state->dislayer[3]); } if (input_code_pressed_once (screen->machine, KEYCODE_B)) { - dislayer[4] ^= 1; - popmessage("text: %01x",dislayer[4]); + state->dislayer[4] ^= 1; + popmessage("text: %01x",state->dislayer[4]); } #endif @@ -527,22 +523,22 @@ VIDEO_UPDATE( slapshot ) bitmap_fill(bitmap, cliprect, 0); #ifdef MAME_DEBUG - if (dislayer[layer[0]] == 0) + if (state->dislayer[layer[0]] == 0) #endif tc0480scp_tilemap_draw(state->tc0480scp, bitmap, cliprect, layer[0], 0, 1); #ifdef MAME_DEBUG - if (dislayer[layer[1]] == 0) + if (state->dislayer[layer[1]] == 0) #endif tc0480scp_tilemap_draw(state->tc0480scp, bitmap, cliprect, layer[1], 0, 2); #ifdef MAME_DEBUG - if (dislayer[layer[2]] == 0) + if (state->dislayer[layer[2]] == 0) #endif tc0480scp_tilemap_draw(state->tc0480scp, bitmap, cliprect, layer[2], 0, 4); #ifdef MAME_DEBUG - if (dislayer[layer[3]] == 0) + if (state->dislayer[layer[3]] == 0) #endif tc0480scp_tilemap_draw(state->tc0480scp, bitmap, cliprect, layer[3], 0, 8); @@ -568,7 +564,7 @@ VIDEO_UPDATE( slapshot ) */ #ifdef MAME_DEBUG - if (dislayer[layer[4]] == 0) + if (state->dislayer[layer[4]] == 0) #endif tc0480scp_tilemap_draw(state->tc0480scp, bitmap, cliprect, layer[4], 0, 0); return 0; diff --git a/src/mame/video/superchs.c b/src/mame/video/superchs.c index 915a55a8f24..61e97e8d045 100644 --- a/src/mame/video/superchs.c +++ b/src/mame/video/superchs.c @@ -2,20 +2,10 @@ #include "video/taitoic.h" #include "includes/superchs.h" -struct tempsprite -{ - int gfx; - int code,color; - int flipx,flipy; - int x,y; - int zoomx,zoomy; - int primask; -}; -static struct tempsprite *spritelist; - VIDEO_START( superchs ) { - spritelist = auto_alloc_array(machine, struct tempsprite, 0x4000); + superchs_state *state = machine->driver_data(); + state->spritelist = auto_alloc_array(machine, struct tempsprite, 0x4000); } /************************************************************ @@ -66,6 +56,7 @@ Heavy use is made of sprite zooming. static void draw_sprites(running_machine *machine, bitmap_t *bitmap,const rectangle *cliprect,const int *primasks,int x_offs,int y_offs) { + superchs_state *state = machine->driver_data(); UINT32 *spriteram32 = machine->generic.spriteram.u32; UINT16 *spritemap = (UINT16 *)machine->region("user1")->base(); int offs, data, tilenum, color, flipx, flipy; @@ -77,7 +68,7 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap,const rectan /* pdrawgfx() needs us to draw sprites front to back, so we have to build a list while processing sprite ram and then draw them all at the end */ - struct tempsprite *sprite_ptr = spritelist; + struct tempsprite *sprite_ptr = state->spritelist; for (offs = (machine->generic.spriteram_size/4-4);offs >= 0;offs -= 4) { @@ -189,7 +180,7 @@ logerror("Sprite number %04x had %02x invalid chunks\n",tilenum,bad_chunks); } /* this happens only if primsks != NULL */ - while (sprite_ptr != spritelist) + while (sprite_ptr != state->spritelist) { sprite_ptr--; diff --git a/src/mame/video/superqix.c b/src/mame/video/superqix.c index 1f48a15d1eb..72bbd12b606 100644 --- a/src/mame/video/superqix.c +++ b/src/mame/video/superqix.c @@ -9,15 +9,7 @@ #include "emu.h" #include "includes/superqix.h" -UINT8 *superqix_videoram; -UINT8 *superqix_bitmapram,*superqix_bitmapram2; -int pbillian_show_power; -static int gfxbank; -static bitmap_t *fg_bitmap[2]; -static int show_bitmap; -static tilemap_t *bg_tilemap; -static int last_power[2]; /*************************************************************************** @@ -28,20 +20,22 @@ static int last_power[2]; static TILE_GET_INFO( pb_get_bg_tile_info ) { - int attr = superqix_videoram[tile_index + 0x400]; - int code = superqix_videoram[tile_index] + 256 * (attr & 0x7); + superqix_state *state = machine->driver_data(); + int attr = state->videoram[tile_index + 0x400]; + int code = state->videoram[tile_index] + 256 * (attr & 0x7); int color = (attr & 0xf0) >> 4; SET_TILE_INFO(0, code, color, 0); } static TILE_GET_INFO( sqix_get_bg_tile_info ) { - int attr = superqix_videoram[tile_index + 0x400]; + superqix_state *state = machine->driver_data(); + int attr = state->videoram[tile_index + 0x400]; int bank = (attr & 0x04) ? 0 : 1; - int code = superqix_videoram[tile_index] + 256 * (attr & 0x03); + int code = state->videoram[tile_index] + 256 * (attr & 0x03); int color = (attr & 0xf0) >> 4; - if (bank) code += 1024 * gfxbank; + if (bank) code += 1024 * state->gfxbank; SET_TILE_INFO(bank, code, color, 0); tileinfo->group = (attr & 0x08) >> 3; @@ -57,27 +51,29 @@ static TILE_GET_INFO( sqix_get_bg_tile_info ) VIDEO_START( pbillian ) { - bg_tilemap = tilemap_create(machine, pb_get_bg_tile_info, tilemap_scan_rows, 8, 8,32,32); + superqix_state *state = machine->driver_data(); + state->bg_tilemap = tilemap_create(machine, pb_get_bg_tile_info, tilemap_scan_rows, 8, 8,32,32); /* Need to do save state here */ - state_save_register_global(machine, last_power[0]); - state_save_register_global(machine, last_power[1]); - state_save_register_global(machine, pbillian_show_power); + state_save_register_global(machine, state->last_power[0]); + state_save_register_global(machine, state->last_power[1]); + state_save_register_global(machine, state->pbillian_show_power); } VIDEO_START( superqix ) { - fg_bitmap[0] = auto_bitmap_alloc(machine, 256, 256, machine->primary_screen->format()); - fg_bitmap[1] = auto_bitmap_alloc(machine, 256, 256, machine->primary_screen->format()); - bg_tilemap = tilemap_create(machine, sqix_get_bg_tile_info, tilemap_scan_rows, 8, 8, 32, 32); + superqix_state *state = machine->driver_data(); + state->fg_bitmap[0] = auto_bitmap_alloc(machine, 256, 256, machine->primary_screen->format()); + state->fg_bitmap[1] = auto_bitmap_alloc(machine, 256, 256, machine->primary_screen->format()); + state->bg_tilemap = tilemap_create(machine, sqix_get_bg_tile_info, tilemap_scan_rows, 8, 8, 32, 32); - tilemap_set_transmask(bg_tilemap,0,0xffff,0x0000); /* split type 0 is totally transparent in front half */ - tilemap_set_transmask(bg_tilemap,1,0x0001,0xfffe); /* split type 1 has pen 0 transparent in front half */ + tilemap_set_transmask(state->bg_tilemap,0,0xffff,0x0000); /* split type 0 is totally transparent in front half */ + tilemap_set_transmask(state->bg_tilemap,1,0x0001,0xfffe); /* split type 1 has pen 0 transparent in front half */ - state_save_register_global(machine, gfxbank); - state_save_register_global(machine, show_bitmap); - state_save_register_global_bitmap(machine, fg_bitmap[0]); - state_save_register_global_bitmap(machine, fg_bitmap[1]); + state_save_register_global(machine, state->gfxbank); + state_save_register_global(machine, state->show_bitmap); + state_save_register_global_bitmap(machine, state->fg_bitmap[0]); + state_save_register_global_bitmap(machine, state->fg_bitmap[1]); } @@ -90,35 +86,38 @@ VIDEO_START( superqix ) WRITE8_HANDLER( superqix_videoram_w ) { - superqix_videoram[offset] = data; - tilemap_mark_tile_dirty(bg_tilemap, offset & 0x3ff); + superqix_state *state = space->machine->driver_data(); + state->videoram[offset] = data; + tilemap_mark_tile_dirty(state->bg_tilemap, offset & 0x3ff); } WRITE8_HANDLER( superqix_bitmapram_w ) { - if (superqix_bitmapram[offset] != data) + superqix_state *state = space->machine->driver_data(); + if (state->bitmapram[offset] != data) { int x = 2 * (offset % 128); int y = offset / 128 + 16; - superqix_bitmapram[offset] = data; + state->bitmapram[offset] = data; - *BITMAP_ADDR16(fg_bitmap[0], y, x) = data >> 4; - *BITMAP_ADDR16(fg_bitmap[0], y, x + 1) = data & 0x0f; + *BITMAP_ADDR16(state->fg_bitmap[0], y, x) = data >> 4; + *BITMAP_ADDR16(state->fg_bitmap[0], y, x + 1) = data & 0x0f; } } WRITE8_HANDLER( superqix_bitmapram2_w ) { - if (data != superqix_bitmapram2[offset]) + superqix_state *state = space->machine->driver_data(); + if (data != state->bitmapram2[offset]) { int x = 2 * (offset % 128); int y = offset / 128 + 16; - superqix_bitmapram2[offset] = data; + state->bitmapram2[offset] = data; - *BITMAP_ADDR16(fg_bitmap[1], y, x) = data >> 4; - *BITMAP_ADDR16(fg_bitmap[1], y, x + 1) = data & 0x0f; + *BITMAP_ADDR16(state->fg_bitmap[1], y, x) = data >> 4; + *BITMAP_ADDR16(state->fg_bitmap[1], y, x + 1) = data & 0x0f; } } @@ -144,15 +143,16 @@ WRITE8_HANDLER( pbillian_0410_w ) WRITE8_HANDLER( superqix_0410_w ) { + superqix_state *state = space->machine->driver_data(); /* bits 0-1 select the tile bank */ - if (gfxbank != (data & 0x03)) + if (state->gfxbank != (data & 0x03)) { - gfxbank = data & 0x03; - tilemap_mark_all_tiles_dirty(bg_tilemap); + state->gfxbank = data & 0x03; + tilemap_mark_all_tiles_dirty(state->bg_tilemap); } /* bit 2 selects which of the two bitmaps to display (for 2 players game) */ - show_bitmap = (data & 0x04) >> 2; + state->show_bitmap = (data & 0x04) >> 2; /* bit 3 enables NMI */ interrupt_enable_w(space,offset,data & 0x08); @@ -229,25 +229,26 @@ static void superqix_draw_sprites(running_machine *machine, bitmap_t *bitmap,con VIDEO_UPDATE( pbillian ) { - tilemap_draw(bitmap, cliprect, bg_tilemap, 0, 0); + superqix_state *state = screen->machine->driver_data(); + tilemap_draw(bitmap, cliprect, state->bg_tilemap, 0, 0); pbillian_draw_sprites(screen->machine, bitmap,cliprect); - if (pbillian_show_power) + if (state->pbillian_show_power) { int curr_power; curr_power = ((input_port_read(screen->machine, "PADDLE1") & 0x3f) * 100) / 0x3f; - if (last_power[0] != curr_power) + if (state->last_power[0] != curr_power) { popmessage ("Power %d%%", curr_power); - last_power[0] = curr_power; + state->last_power[0] = curr_power; } curr_power = ((input_port_read(screen->machine, "PADDLE2") & 0x3f) * 100) / 0x3f; - if (last_power[1] != curr_power) + if (state->last_power[1] != curr_power) { popmessage ("Power %d%%", curr_power); - last_power[1] = curr_power; + state->last_power[1] = curr_power; } } return 0; @@ -255,9 +256,10 @@ VIDEO_UPDATE( pbillian ) VIDEO_UPDATE( superqix ) { - tilemap_draw(bitmap, cliprect, bg_tilemap, TILEMAP_DRAW_LAYER1, 0); - copybitmap_trans(bitmap,fg_bitmap[show_bitmap],flip_screen_get(screen->machine),flip_screen_get(screen->machine),0,0,cliprect,0); + superqix_state *state = screen->machine->driver_data(); + tilemap_draw(bitmap, cliprect, state->bg_tilemap, TILEMAP_DRAW_LAYER1, 0); + copybitmap_trans(bitmap,state->fg_bitmap[state->show_bitmap],flip_screen_get(screen->machine),flip_screen_get(screen->machine),0,0,cliprect,0); superqix_draw_sprites(screen->machine, bitmap,cliprect); - tilemap_draw(bitmap, cliprect, bg_tilemap, TILEMAP_DRAW_LAYER0, 0); + tilemap_draw(bitmap, cliprect, state->bg_tilemap, TILEMAP_DRAW_LAYER0, 0); return 0; } diff --git a/src/mame/video/taitosj.c b/src/mame/video/taitosj.c index 69c2e289fb1..8635bdb5872 100644 --- a/src/mame/video/taitosj.c +++ b/src/mame/video/taitosj.c @@ -11,31 +11,13 @@ #include "includes/taitosj.h" -#define GLOBAL_FLIP_X (*taitosj_video_mode & 0x01) -#define GLOBAL_FLIP_Y (*taitosj_video_mode & 0x02) -#define SPRITE_RAM_PAGE_OFFSET ((*taitosj_video_mode & 0x04) ? 0x80 : 0x00) -#define SPRITES_ON (*taitosj_video_mode & 0x80) +#define GLOBAL_FLIP_X (*state->video_mode & 0x01) +#define GLOBAL_FLIP_Y (*state->video_mode & 0x02) +#define SPRITE_RAM_PAGE_OFFSET ((*state->video_mode & 0x04) ? 0x80 : 0x00) +#define SPRITES_ON (*state->video_mode & 0x80) #define TRANSPARENT_PEN (0x40) -UINT8 *taitosj_videoram_1; -UINT8 *taitosj_videoram_2; -UINT8 *taitosj_videoram_3; -UINT8 *taitosj_spriteram; -UINT8 *taitosj_paletteram; -UINT8 *taitosj_characterram; -UINT8 *taitosj_scroll; -UINT8 *taitosj_colscrolly; -UINT8 *taitosj_gfxpointer; -UINT8 *taitosj_colorbank; -UINT8 *taitosj_video_mode; -UINT8 *taitosj_video_priority; -UINT8 *taitosj_collision_reg; -UINT8 *kikstart_scrollram; -static bitmap_t *taitosj_layer_bitmap[3]; -static bitmap_t *sprite_sprite_collbitmap1,*sprite_sprite_collbitmap2; -static bitmap_t *sprite_layer_collbitmap1; -static bitmap_t *sprite_layer_collbitmap2[3]; static const int layer_enable_mask[3] = { 0x10, 0x20, 0x40 }; @@ -85,7 +67,6 @@ typedef void (*copy_layer_func_t)(running_machine *, bitmap_t *, ***************************************************************************/ -static int draw_order[32][4]; /*************************************************************************** @@ -111,6 +92,7 @@ static int draw_order[32][4]; static void set_pens(running_machine *machine) { + taitosj_state *state = machine->driver_data(); static const int resistances[3] = { 1000, 470, 270 }; double rweights[3], gweights[3], bweights[3]; int i; @@ -127,22 +109,22 @@ static void set_pens(running_machine *machine) int r, g, b, val; /* red component */ - val = taitosj_paletteram[(i << 1) | 0x01]; + val = state->paletteram[(i << 1) | 0x01]; bit0 = (~val >> 6) & 0x01; bit1 = (~val >> 7) & 0x01; - val = taitosj_paletteram[(i << 1) | 0x00]; + val = state->paletteram[(i << 1) | 0x00]; bit2 = (~val >> 0) & 0x01; r = combine_3_weights(rweights, bit0, bit1, bit2); /* green component */ - val = taitosj_paletteram[(i << 1) | 0x01]; + val = state->paletteram[(i << 1) | 0x01]; bit0 = (~val >> 3) & 0x01; bit1 = (~val >> 4) & 0x01; bit2 = (~val >> 5) & 0x01; g = combine_3_weights(gweights, bit0, bit1, bit2); /* blue component */ - val = taitosj_paletteram[(i << 1) | 0x01]; + val = state->paletteram[(i << 1) | 0x01]; bit0 = (~val >> 0) & 0x01; bit1 = (~val >> 1) & 0x01; bit2 = (~val >> 2) & 0x01; @@ -160,6 +142,7 @@ static void set_pens(running_machine *machine) static void compute_draw_order(running_machine *machine) { + taitosj_state *state = machine->driver_data(); int i; UINT8 *color_prom = machine->region("proms")->base(); @@ -182,7 +165,7 @@ static void compute_draw_order(running_machine *machine) mask |= (1 << data); /* in next loop, we'll see which of the remaining */ /* layers has top priority when this one is transparent */ - draw_order[i][j] = data; + state->draw_order[i][j] = data; } } } @@ -190,23 +173,24 @@ static void compute_draw_order(running_machine *machine) VIDEO_START( taitosj ) { + taitosj_state *state = machine->driver_data(); int i; - sprite_layer_collbitmap1 = auto_bitmap_alloc(machine,16,16,machine->primary_screen->format()); + state->sprite_layer_collbitmap1 = auto_bitmap_alloc(machine,16,16,machine->primary_screen->format()); for (i = 0; i < 3; i++) { - taitosj_layer_bitmap[i] = machine->primary_screen->alloc_compatible_bitmap(); - sprite_layer_collbitmap2[i] = machine->primary_screen->alloc_compatible_bitmap(); + state->layer_bitmap[i] = machine->primary_screen->alloc_compatible_bitmap(); + state->sprite_layer_collbitmap2[i] = machine->primary_screen->alloc_compatible_bitmap(); } - sprite_sprite_collbitmap1 = auto_bitmap_alloc(machine,32,32,machine->primary_screen->format()); - sprite_sprite_collbitmap2 = auto_bitmap_alloc(machine,32,32,machine->primary_screen->format()); + state->sprite_sprite_collbitmap1 = auto_bitmap_alloc(machine,32,32,machine->primary_screen->format()); + state->sprite_sprite_collbitmap2 = auto_bitmap_alloc(machine,32,32,machine->primary_screen->format()); - gfx_element_set_source(machine->gfx[0], taitosj_characterram); - gfx_element_set_source(machine->gfx[1], taitosj_characterram); - gfx_element_set_source(machine->gfx[2], taitosj_characterram + 0x1800); - gfx_element_set_source(machine->gfx[3], taitosj_characterram + 0x1800); + gfx_element_set_source(machine->gfx[0], state->characterram); + gfx_element_set_source(machine->gfx[1], state->characterram); + gfx_element_set_source(machine->gfx[2], state->characterram + 0x1800); + gfx_element_set_source(machine->gfx[3], state->characterram + 0x1800); compute_draw_order(machine); } @@ -215,9 +199,10 @@ VIDEO_START( taitosj ) READ8_HANDLER( taitosj_gfxrom_r ) { + taitosj_state *state = space->machine->driver_data(); UINT8 ret; - offs_t offs = taitosj_gfxpointer[0] | (taitosj_gfxpointer[1] << 8); + offs_t offs = state->gfxpointer[0] | (state->gfxpointer[1] << 8); if (offs < 0x8000) ret = space->machine->region("gfx1")->base()[offs]; @@ -226,8 +211,8 @@ READ8_HANDLER( taitosj_gfxrom_r ) offs = offs + 1; - taitosj_gfxpointer[0] = offs & 0xff; - taitosj_gfxpointer[1] = offs >> 8; + state->gfxpointer[0] = offs & 0xff; + state->gfxpointer[1] = offs >> 8; return ret; } @@ -236,7 +221,8 @@ READ8_HANDLER( taitosj_gfxrom_r ) WRITE8_HANDLER( taitosj_characterram_w ) { - if (taitosj_characterram[offset] != data) + taitosj_state *state = space->machine->driver_data(); + if (state->characterram[offset] != data) { if (offset < 0x1800) { @@ -249,7 +235,7 @@ WRITE8_HANDLER( taitosj_characterram_w ) gfx_element_mark_dirty(space->machine->gfx[3], (offset / 32) & 0x3f); } - taitosj_characterram[offset] = data; + state->characterram[offset] = data; } } @@ -261,19 +247,20 @@ WRITE8_HANDLER( junglhbr_characterram_w ) WRITE8_HANDLER( taitosj_collision_reg_clear_w ) { - taitosj_collision_reg[0] = 0; - taitosj_collision_reg[1] = 0; - taitosj_collision_reg[2] = 0; - taitosj_collision_reg[3] = 0; + taitosj_state *state = space->machine->driver_data(); + state->collision_reg[0] = 0; + state->collision_reg[1] = 0; + state->collision_reg[2] = 0; + state->collision_reg[3] = 0; } -INLINE int get_sprite_xy(UINT8 which, UINT8* sx, UINT8* sy) +INLINE int get_sprite_xy(taitosj_state *state, UINT8 which, UINT8* sx, UINT8* sy) { offs_t offs = which * 4; - *sx = taitosj_spriteram[SPRITE_RAM_PAGE_OFFSET + offs + 0] - 1; - *sy = 240 - taitosj_spriteram[SPRITE_RAM_PAGE_OFFSET + offs + 1]; + *sx = state->spriteram[SPRITE_RAM_PAGE_OFFSET + offs + 0] - 1; + *sy = 240 - state->spriteram[SPRITE_RAM_PAGE_OFFSET + offs + 1]; return (*sy < 240); } @@ -281,9 +268,10 @@ INLINE int get_sprite_xy(UINT8 which, UINT8* sx, UINT8* sy) INLINE const gfx_element *get_sprite_gfx_element(running_machine *machine, UINT8 which) { + taitosj_state *state = machine->driver_data(); offs_t offs = which * 4; - return machine->gfx[(taitosj_spriteram[SPRITE_RAM_PAGE_OFFSET + offs + 3] & 0x40) ? 3 : 1]; + return machine->gfx[(state->spriteram[SPRITE_RAM_PAGE_OFFSET + offs + 3] & 0x40) ? 3 : 1]; } @@ -291,6 +279,7 @@ static int check_sprite_sprite_bitpattern(running_machine *machine, int sx1, int sy1, int which1, int sx2, int sy2, int which2) { + taitosj_state *state = machine->driver_data(); int x, y, minx, miny, maxx = 16, maxy = 16; offs_t offs1 = which1 * 4; @@ -324,26 +313,26 @@ static int check_sprite_sprite_bitpattern(running_machine *machine, } /* draw the sprites into seperate bitmaps and check overlapping region */ - bitmap_fill(sprite_layer_collbitmap1, NULL, TRANSPARENT_PEN); - drawgfx_transpen(sprite_sprite_collbitmap1, 0, get_sprite_gfx_element(machine, which1), - taitosj_spriteram[SPRITE_RAM_PAGE_OFFSET + offs1 + 3] & 0x3f, + bitmap_fill(state->sprite_layer_collbitmap1, NULL, TRANSPARENT_PEN); + drawgfx_transpen(state->sprite_sprite_collbitmap1, 0, get_sprite_gfx_element(machine, which1), + state->spriteram[SPRITE_RAM_PAGE_OFFSET + offs1 + 3] & 0x3f, 0, - taitosj_spriteram[SPRITE_RAM_PAGE_OFFSET + offs1 + 2] & 0x01, - taitosj_spriteram[SPRITE_RAM_PAGE_OFFSET + offs1 + 2] & 0x02, + state->spriteram[SPRITE_RAM_PAGE_OFFSET + offs1 + 2] & 0x01, + state->spriteram[SPRITE_RAM_PAGE_OFFSET + offs1 + 2] & 0x02, sx1, sy1, 0); - bitmap_fill(sprite_sprite_collbitmap2, NULL, TRANSPARENT_PEN); - drawgfx_transpen(sprite_sprite_collbitmap2, 0, get_sprite_gfx_element(machine, which2), - taitosj_spriteram[SPRITE_RAM_PAGE_OFFSET + offs2 + 3] & 0x3f, + bitmap_fill(state->sprite_sprite_collbitmap2, NULL, TRANSPARENT_PEN); + drawgfx_transpen(state->sprite_sprite_collbitmap2, 0, get_sprite_gfx_element(machine, which2), + state->spriteram[SPRITE_RAM_PAGE_OFFSET + offs2 + 3] & 0x3f, 0, - taitosj_spriteram[SPRITE_RAM_PAGE_OFFSET + offs2 + 2] & 0x01, - taitosj_spriteram[SPRITE_RAM_PAGE_OFFSET + offs2 + 2] & 0x02, + state->spriteram[SPRITE_RAM_PAGE_OFFSET + offs2 + 2] & 0x01, + state->spriteram[SPRITE_RAM_PAGE_OFFSET + offs2 + 2] & 0x02, sx2, sy2, 0); for (y = miny; y < maxy; y++) for (x = minx; x < maxx; x++) - if ((*BITMAP_ADDR16(sprite_sprite_collbitmap1, y, x) != TRANSPARENT_PEN) && - (*BITMAP_ADDR16(sprite_sprite_collbitmap2, y, x) != TRANSPARENT_PEN)) + if ((*BITMAP_ADDR16(state->sprite_sprite_collbitmap1, y, x) != TRANSPARENT_PEN) && + (*BITMAP_ADDR16(state->sprite_sprite_collbitmap2, y, x) != TRANSPARENT_PEN)) return 1; /* collided */ return 0; @@ -352,6 +341,7 @@ static int check_sprite_sprite_bitpattern(running_machine *machine, static void check_sprite_sprite_collision(running_machine *machine) { + taitosj_state *state = machine->driver_data(); if (SPRITES_ON) { int which1; @@ -364,7 +354,7 @@ static void check_sprite_sprite_collision(running_machine *machine) if ((which1 >= 0x10) && (which1 <= 0x17)) continue; /* no sprites here */ - if (!get_sprite_xy(which1, &sx1, &sy1)) continue; + if (!get_sprite_xy(state, which1, &sx1, &sy1)) continue; for (which2 = which1 + 1; which2 < 0x20; which2++) { @@ -372,7 +362,7 @@ static void check_sprite_sprite_collision(running_machine *machine) if ((which2 >= 0x10) && (which2 <= 0x17)) continue; /* no sprites here */ - if (!get_sprite_xy(which2, &sx2, &sy2)) continue; + if (!get_sprite_xy(state, which2, &sx2, &sy2)) continue; /* quickly rule out any pairs that cannot be touching */ if ((abs((INT8)sx1 - (INT8)sx2) < 16) && @@ -393,14 +383,14 @@ static void check_sprite_sprite_collision(running_machine *machine) reg = which1 >> 3; if (reg == 3) reg = 2; - taitosj_collision_reg[reg] |= (1 << (which1 & 0x07)); + state->collision_reg[reg] |= (1 << (which1 & 0x07)); } else { reg = which2 >> 3; if (reg == 3) reg = 2; - taitosj_collision_reg[reg] |= (1 << (which2 & 0x07)); + state->collision_reg[reg] |= (1 << (which2 & 0x07)); } } } @@ -411,6 +401,7 @@ static void check_sprite_sprite_collision(running_machine *machine) static void calculate_sprite_areas(running_machine *machine, int *sprites_on, rectangle *sprite_areas) { + taitosj_state *state = machine->driver_data(); int which; int width = machine->primary_screen->width(); int height = machine->primary_screen->height(); @@ -421,7 +412,7 @@ static void calculate_sprite_areas(running_machine *machine, int *sprites_on, re if ((which >= 0x10) && (which <= 0x17)) continue; /* no sprites here */ - if (get_sprite_xy(which, &sx, &sy)) + if (get_sprite_xy(state, which, &sx, &sy)) { int minx, miny, maxx, maxy; @@ -461,41 +452,42 @@ static void calculate_sprite_areas(running_machine *machine, int *sprites_on, re static int check_sprite_layer_bitpattern(running_machine *machine, int which, rectangle *sprite_areas) { + taitosj_state *state = machine->driver_data(); int y, x; offs_t offs = which * 4; int result = 0; /* no collisions */ - int check_layer_1 = *taitosj_video_mode & layer_enable_mask[0]; - int check_layer_2 = *taitosj_video_mode & layer_enable_mask[1]; - int check_layer_3 = *taitosj_video_mode & layer_enable_mask[2]; + int check_layer_1 = *state->video_mode & layer_enable_mask[0]; + int check_layer_2 = *state->video_mode & layer_enable_mask[1]; + int check_layer_3 = *state->video_mode & layer_enable_mask[2]; int minx = sprite_areas[which].min_x; int miny = sprite_areas[which].min_y; int maxx = sprite_areas[which].max_x + 1; int maxy = sprite_areas[which].max_y + 1; - int flip_x = (taitosj_spriteram[SPRITE_RAM_PAGE_OFFSET + offs + 2] & 0x01) ^ GLOBAL_FLIP_X; - int flip_y = (taitosj_spriteram[SPRITE_RAM_PAGE_OFFSET + offs + 2] & 0x02) ^ GLOBAL_FLIP_Y; + int flip_x = (state->spriteram[SPRITE_RAM_PAGE_OFFSET + offs + 2] & 0x01) ^ GLOBAL_FLIP_X; + int flip_y = (state->spriteram[SPRITE_RAM_PAGE_OFFSET + offs + 2] & 0x02) ^ GLOBAL_FLIP_Y; /* draw sprite into a bitmap and check if layers collide */ - bitmap_fill(sprite_layer_collbitmap1, NULL, TRANSPARENT_PEN); - drawgfx_transpen(sprite_layer_collbitmap1, 0,get_sprite_gfx_element(machine, which), - taitosj_spriteram[SPRITE_RAM_PAGE_OFFSET + offs + 3] & 0x3f, + bitmap_fill(state->sprite_layer_collbitmap1, NULL, TRANSPARENT_PEN); + drawgfx_transpen(state->sprite_layer_collbitmap1, 0,get_sprite_gfx_element(machine, which), + state->spriteram[SPRITE_RAM_PAGE_OFFSET + offs + 3] & 0x3f, 0, flip_x, flip_y, 0,0,0); for (y = miny; y < maxy; y++) for (x = minx; x < maxx; x++) - if (*BITMAP_ADDR16(sprite_layer_collbitmap1, y - miny, x - minx) != TRANSPARENT_PEN) /* is there anything to check for ? */ + if (*BITMAP_ADDR16(state->sprite_layer_collbitmap1, y - miny, x - minx) != TRANSPARENT_PEN) /* is there anything to check for ? */ { - if (check_layer_1 && (*BITMAP_ADDR16(sprite_layer_collbitmap2[0], y, x) != TRANSPARENT_PEN)) + if (check_layer_1 && (*BITMAP_ADDR16(state->sprite_layer_collbitmap2[0], y, x) != TRANSPARENT_PEN)) result |= 0x01; /* collided with layer 1 */ - if (check_layer_2 && (*BITMAP_ADDR16(sprite_layer_collbitmap2[1], y, x) != TRANSPARENT_PEN)) + if (check_layer_2 && (*BITMAP_ADDR16(state->sprite_layer_collbitmap2[1], y, x) != TRANSPARENT_PEN)) result |= 0x02; /* collided with layer 2 */ - if (check_layer_3 && (*BITMAP_ADDR16(sprite_layer_collbitmap2[2], y, x) != TRANSPARENT_PEN)) + if (check_layer_3 && (*BITMAP_ADDR16(state->sprite_layer_collbitmap2[2], y, x) != TRANSPARENT_PEN)) result |= 0x04; /* collided with layer 3 */ } @@ -505,6 +497,7 @@ static int check_sprite_layer_bitpattern(running_machine *machine, int which, re static void check_sprite_layer_collision(running_machine *machine, int *sprites_on, rectangle *sprite_areas) { + taitosj_state *state = machine->driver_data(); if (SPRITES_ON) { int which; @@ -515,7 +508,7 @@ static void check_sprite_layer_collision(running_machine *machine, int *sprites_ if ((which >= 0x10) && (which <= 0x17)) continue; /* no sprites here */ if (sprites_on[which]) - taitosj_collision_reg[3] |= check_sprite_layer_bitpattern(machine, which, sprite_areas); + state->collision_reg[3] |= check_sprite_layer_bitpattern(machine, which, sprite_areas); } } } @@ -523,11 +516,12 @@ static void check_sprite_layer_collision(running_machine *machine, int *sprites_ static void draw_layers(running_machine *machine) { + taitosj_state *state = machine->driver_data(); offs_t offs; - bitmap_fill(taitosj_layer_bitmap[0], NULL, TRANSPARENT_PEN); - bitmap_fill(taitosj_layer_bitmap[1], NULL, TRANSPARENT_PEN); - bitmap_fill(taitosj_layer_bitmap[2], NULL, TRANSPARENT_PEN); + bitmap_fill(state->layer_bitmap[0], NULL, TRANSPARENT_PEN); + bitmap_fill(state->layer_bitmap[1], NULL, TRANSPARENT_PEN); + bitmap_fill(state->layer_bitmap[2], NULL, TRANSPARENT_PEN); for (offs = 0; offs < 0x0400; offs++) { @@ -537,21 +531,21 @@ static void draw_layers(running_machine *machine) if (GLOBAL_FLIP_X) sx = 31 - sx; if (GLOBAL_FLIP_Y) sy = 31 - sy; - drawgfx_transpen(taitosj_layer_bitmap[0],0,machine->gfx[taitosj_colorbank[0] & 0x08 ? 2 : 0], - taitosj_videoram_1[offs], - taitosj_colorbank[0] & 0x07, + drawgfx_transpen(state->layer_bitmap[0],0,machine->gfx[state->colorbank[0] & 0x08 ? 2 : 0], + state->videoram_1[offs], + state->colorbank[0] & 0x07, GLOBAL_FLIP_X,GLOBAL_FLIP_Y, 8*sx,8*sy,0); - drawgfx_transpen(taitosj_layer_bitmap[1],0,machine->gfx[taitosj_colorbank[0] & 0x80 ? 2 : 0], - taitosj_videoram_2[offs], - (taitosj_colorbank[0] >> 4) & 0x07, + drawgfx_transpen(state->layer_bitmap[1],0,machine->gfx[state->colorbank[0] & 0x80 ? 2 : 0], + state->videoram_2[offs], + (state->colorbank[0] >> 4) & 0x07, GLOBAL_FLIP_X,GLOBAL_FLIP_Y, 8*sx,8*sy,0); - drawgfx_transpen(taitosj_layer_bitmap[2],0,machine->gfx[taitosj_colorbank[1] & 0x08 ? 2 : 0], - taitosj_videoram_3[offs], - taitosj_colorbank[1] & 0x07, + drawgfx_transpen(state->layer_bitmap[2],0,machine->gfx[state->colorbank[1] & 0x08 ? 2 : 0], + state->videoram_3[offs], + state->colorbank[1] & 0x07, GLOBAL_FLIP_X,GLOBAL_FLIP_Y, 8*sx,8*sy,0); } @@ -560,6 +554,7 @@ static void draw_layers(running_machine *machine) static void draw_sprites(running_machine *machine, bitmap_t *bitmap) { + taitosj_state *state = machine->driver_data(); /* sprite visibility area is missing 4 pixels from the sides, surely to reduce wraparound side effects. This was verified on a real Elevator Action. @@ -591,12 +586,12 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap) if ((which >= 0x10) && (which <= 0x17)) continue; /* no sprites here */ - if (get_sprite_xy(which, &sx, &sy)) + if (get_sprite_xy(state, which, &sx, &sy)) { - int code = taitosj_spriteram[SPRITE_RAM_PAGE_OFFSET + offs + 3] & 0x3f; - int color = 2 * ((taitosj_colorbank[1] >> 4) & 0x03) + ((taitosj_spriteram[SPRITE_RAM_PAGE_OFFSET + offs + 2] >> 2) & 0x01); - int flip_x = taitosj_spriteram[SPRITE_RAM_PAGE_OFFSET + offs + 2] & 0x01; - int flip_y = taitosj_spriteram[SPRITE_RAM_PAGE_OFFSET + offs + 2] & 0x02; + int code = state->spriteram[SPRITE_RAM_PAGE_OFFSET + offs + 3] & 0x3f; + int color = 2 * ((state->colorbank[1] >> 4) & 0x03) + ((state->spriteram[SPRITE_RAM_PAGE_OFFSET + offs + 2] >> 2) & 0x01); + int flip_x = state->spriteram[SPRITE_RAM_PAGE_OFFSET + offs + 2] & 0x01; + int flip_y = state->spriteram[SPRITE_RAM_PAGE_OFFSET + offs + 2] & 0x02; if (GLOBAL_FLIP_X) { @@ -625,14 +620,15 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap) static void taitosj_copy_layer(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect, int which, int *sprites_on, rectangle *sprite_areas) { + taitosj_state *state = machine->driver_data(); static const int fudge1[3] = { 3, 1, -1 }; static const int fudge2[3] = { 8, 10, 12 }; - if (*taitosj_video_mode & layer_enable_mask[which]) + if (*state->video_mode & layer_enable_mask[which]) { int i, scrollx, scrolly[32]; - scrollx = taitosj_scroll[2 * which]; + scrollx = state->scroll[2 * which]; if (GLOBAL_FLIP_X) scrollx = (scrollx & 0xf8) + ((scrollx + fudge1[which]) & 7) + fudge2[which]; @@ -641,12 +637,12 @@ static void taitosj_copy_layer(running_machine *machine, bitmap_t *bitmap, const if (GLOBAL_FLIP_Y) for (i = 0;i < 32;i++) - scrolly[31 - i] = taitosj_colscrolly[32 * which + i] + taitosj_scroll[2 * which + 1]; + scrolly[31 - i] = state->colscrolly[32 * which + i] + state->scroll[2 * which + 1]; else for (i = 0;i < 32;i++) - scrolly[i] = -taitosj_colscrolly[32 * which + i] - taitosj_scroll[2 * which + 1]; + scrolly[i] = -state->colscrolly[32 * which + i] - state->scroll[2 * which + 1]; - copyscrollbitmap_trans(bitmap, taitosj_layer_bitmap[which], 1, &scrollx, 32, scrolly, cliprect, TRANSPARENT_PEN); + copyscrollbitmap_trans(bitmap, state->layer_bitmap[which], 1, &scrollx, 32, scrolly, cliprect, TRANSPARENT_PEN); /* store parts covered with sprites for sprites/layers collision detection */ for (i = 0; i < 0x20; i++) @@ -654,7 +650,7 @@ static void taitosj_copy_layer(running_machine *machine, bitmap_t *bitmap, const if ((i >= 0x10) && (i <= 0x17)) continue; /* no sprites here */ if (sprites_on[i]) - copyscrollbitmap(sprite_layer_collbitmap2[which], taitosj_layer_bitmap[which], 1, &scrollx, 32, scrolly, &sprite_areas[i]); + copyscrollbitmap(state->sprite_layer_collbitmap2[which], state->layer_bitmap[which], 1, &scrollx, 32, scrolly, &sprite_areas[i]); } } } @@ -663,7 +659,8 @@ static void taitosj_copy_layer(running_machine *machine, bitmap_t *bitmap, const static void kikstart_copy_layer(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect, int which, int *sprites_on, rectangle *sprite_areas) { - if (*taitosj_video_mode & layer_enable_mask[which]) + taitosj_state *state = machine->driver_data(); + if (*state->video_mode & layer_enable_mask[which]) { int i, scrolly, scrollx[32 * 8]; @@ -672,19 +669,19 @@ static void kikstart_copy_layer(running_machine *machine, bitmap_t *bitmap, cons switch (which) { case 0: scrollx[32 * 8 - i] = 0 ;break; - case 1: scrollx[32 * 8 - i] = kikstart_scrollram[i] + ((taitosj_scroll[2 * which] + 0x0a) & 0xff);break; - case 2: scrollx[32 * 8 - i] = kikstart_scrollram[0x100 + i] + ((taitosj_scroll[2 * which] + 0xc) & 0xff);break; + case 1: scrollx[32 * 8 - i] = state->kikstart_scrollram[i] + ((state->scroll[2 * which] + 0x0a) & 0xff);break; + case 2: scrollx[32 * 8 - i] = state->kikstart_scrollram[0x100 + i] + ((state->scroll[2 * which] + 0xc) & 0xff);break; } else switch (which) { case 0: scrollx[i] = 0 ;break; - case 1: scrollx[i] = 0xff - kikstart_scrollram[i - 1] - ((taitosj_scroll[2 * which] - 0x10) & 0xff);break; - case 2: scrollx[i] = 0xff - kikstart_scrollram[0x100 + i - 1] - ((taitosj_scroll[2 * which] - 0x12) & 0xff);break; + case 1: scrollx[i] = 0xff - state->kikstart_scrollram[i - 1] - ((state->scroll[2 * which] - 0x10) & 0xff);break; + case 2: scrollx[i] = 0xff - state->kikstart_scrollram[0x100 + i - 1] - ((state->scroll[2 * which] - 0x12) & 0xff);break; } - scrolly = taitosj_scroll[2 * which + 1]; /* always 0 */ - copyscrollbitmap_trans(bitmap, taitosj_layer_bitmap[which], 32 * 8, scrollx, 1, &scrolly, cliprect, TRANSPARENT_PEN); + scrolly = state->scroll[2 * which + 1]; /* always 0 */ + copyscrollbitmap_trans(bitmap, state->layer_bitmap[which], 32 * 8, scrollx, 1, &scrolly, cliprect, TRANSPARENT_PEN); /* store parts covered with sprites for sprites/layers collision detection */ for (i = 0; i < 0x20; i++) @@ -692,7 +689,7 @@ static void kikstart_copy_layer(running_machine *machine, bitmap_t *bitmap, cons if ((i >= 0x10) && (i <= 0x17)) continue; /* no sprites here */ if (sprites_on[i]) - copyscrollbitmap(sprite_layer_collbitmap2[which], taitosj_layer_bitmap[which], 32 * 8, scrollx, 1, &scrolly, &sprite_areas[i]); + copyscrollbitmap(state->sprite_layer_collbitmap2[which], state->layer_bitmap[which], 32 * 8, scrollx, 1, &scrolly, &sprite_areas[i]); } } } @@ -711,14 +708,15 @@ static void copy_layer(running_machine *machine, bitmap_t *bitmap, const rectang static void copy_layers(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect, copy_layer_func_t copy_layer_func, int *sprites_on, rectangle *sprite_areas) { + taitosj_state *state = machine->driver_data(); int i = 0; /* fill the screen with the background color */ - bitmap_fill(bitmap, cliprect, 8 * (taitosj_colorbank[1] & 0x07)); + bitmap_fill(bitmap, cliprect, 8 * (state->colorbank[1] & 0x07)); for (i = 0; i < 4; i++) { - int which = draw_order[*taitosj_video_priority & 0x1f][i]; + int which = state->draw_order[*state->video_priority & 0x1f][i]; copy_layer(machine, bitmap, cliprect, copy_layer_func, which, sprites_on, sprite_areas); } diff --git a/src/mame/video/topspeed.c b/src/mame/video/topspeed.c index 3d6e7e6396c..dd121493321 100644 --- a/src/mame/video/topspeed.c +++ b/src/mame/video/topspeed.c @@ -114,39 +114,35 @@ VIDEO_UPDATE( topspeed ) topspeed_state *state = screen->machine->driver_data(); UINT8 layer[4]; -#ifdef MAME_DEBUG - static UINT8 dislayer[5]; -#endif - #ifdef MAME_DEBUG if (input_code_pressed_once (screen->machine, KEYCODE_V)) { - dislayer[0] ^= 1; - popmessage("bg: %01x", dislayer[0]); + state->dislayer[0] ^= 1; + popmessage("bg: %01x", state->dislayer[0]); } if (input_code_pressed_once (screen->machine, KEYCODE_B)) { - dislayer[1] ^= 1; - popmessage("fg: %01x", dislayer[1]); + state->dislayer[1] ^= 1; + popmessage("fg: %01x", state->dislayer[1]); } if (input_code_pressed_once (screen->machine, KEYCODE_N)) { - dislayer[2] ^= 1; - popmessage("bg2: %01x", dislayer[2]); + state->dislayer[2] ^= 1; + popmessage("bg2: %01x", state->dislayer[2]); } if (input_code_pressed_once (screen->machine, KEYCODE_M)) { - dislayer[3] ^= 1; - popmessage("fg2: %01x", dislayer[3]); + state->dislayer[3] ^= 1; + popmessage("fg2: %01x", state->dislayer[3]); } if (input_code_pressed_once (screen->machine, KEYCODE_C)) { - dislayer[4] ^= 1; - popmessage("sprites: %01x", dislayer[4]); + state->dislayer[4] ^= 1; + popmessage("sprites: %01x", state->dislayer[4]); } #endif @@ -163,27 +159,27 @@ VIDEO_UPDATE( topspeed ) bitmap_fill(bitmap, cliprect, 0); #ifdef MAME_DEBUG - if (dislayer[3] == 0) + if (state->dislayer[3] == 0) #endif pc080sn_tilemap_draw(state->pc080sn_2, bitmap, cliprect, layer[0], TILEMAP_DRAW_OPAQUE, 1); #ifdef MAME_DEBUG - if (dislayer[2] == 0) + if (state->dislayer[2] == 0) #endif pc080sn_tilemap_draw_special(state->pc080sn_2, bitmap, cliprect, layer[1], 0, 2, state->raster_ctrl); #ifdef MAME_DEBUG - if (dislayer[1] == 0) + if (state->dislayer[1] == 0) #endif pc080sn_tilemap_draw_special(state->pc080sn_1, bitmap, cliprect, layer[2], 0, 4, state->raster_ctrl + 0x100); #ifdef MAME_DEBUG - if (dislayer[0] == 0) + if (state->dislayer[0] == 0) #endif pc080sn_tilemap_draw(state->pc080sn_1, bitmap, cliprect, layer[3], 0, 8); #ifdef MAME_DEBUG - if (dislayer[4] == 0) + if (state->dislayer[4] == 0) #endif draw_sprites(screen->machine, bitmap,cliprect); diff --git a/src/mame/video/tsamurai.c b/src/mame/video/tsamurai.c index 4f6dfeb5828..71fe579b90e 100644 --- a/src/mame/video/tsamurai.c +++ b/src/mame/video/tsamurai.c @@ -9,13 +9,7 @@ /* ** variables */ -UINT8 *tsamurai_videoram; -UINT8 *tsamurai_colorram; -UINT8 *tsamurai_bg_videoram; -static int bgcolor; -static int textbank1, textbank2; -static tilemap_t *background, *foreground; /*************************************************************************** @@ -26,8 +20,9 @@ static tilemap_t *background, *foreground; static TILE_GET_INFO( get_bg_tile_info ) { - UINT8 attributes = tsamurai_bg_videoram[2*tile_index+1]; - int tile_number = tsamurai_bg_videoram[2*tile_index]; + tsamurai_state *state = machine->driver_data(); + UINT8 attributes = state->bg_videoram[2*tile_index+1]; + int tile_number = state->bg_videoram[2*tile_index]; tile_number += (( attributes & 0xc0 ) >> 6 ) * 256; /* legacy */ tile_number += (( attributes & 0x20 ) >> 5 ) * 1024; /* Mission 660 add-on*/ SET_TILE_INFO( @@ -39,13 +34,14 @@ static TILE_GET_INFO( get_bg_tile_info ) static TILE_GET_INFO( get_fg_tile_info ) { - int tile_number = tsamurai_videoram[tile_index]; - if (textbank1 & 0x01) tile_number += 256; /* legacy */ - if (textbank2 & 0x01) tile_number += 512; /* Mission 660 add-on */ + tsamurai_state *state = machine->driver_data(); + int tile_number = state->videoram[tile_index]; + if (state->textbank1 & 0x01) tile_number += 256; /* legacy */ + if (state->textbank2 & 0x01) tile_number += 512; /* Mission 660 add-on */ SET_TILE_INFO( 1, tile_number, - tsamurai_colorram[((tile_index&0x1f)*2)+1] & 0x1f, + state->colorram[((tile_index&0x1f)*2)+1] & 0x1f, 0); } @@ -58,11 +54,12 @@ static TILE_GET_INFO( get_fg_tile_info ) VIDEO_START( tsamurai ) { - background = tilemap_create(machine, get_bg_tile_info,tilemap_scan_rows,8,8,32,32); - foreground = tilemap_create(machine, get_fg_tile_info,tilemap_scan_rows,8,8,32,32); + tsamurai_state *state = machine->driver_data(); + state->background = tilemap_create(machine, get_bg_tile_info,tilemap_scan_rows,8,8,32,32); + state->foreground = tilemap_create(machine, get_fg_tile_info,tilemap_scan_rows,8,8,32,32); - tilemap_set_transparent_pen(background,0); - tilemap_set_transparent_pen(foreground,0); + tilemap_set_transparent_pen(state->background,0); + tilemap_set_transparent_pen(state->foreground,0); } @@ -74,59 +71,67 @@ VIDEO_START( tsamurai ) WRITE8_HANDLER( tsamurai_scrolly_w ) { - tilemap_set_scrolly( background, 0, data ); + tsamurai_state *state = space->machine->driver_data(); + tilemap_set_scrolly( state->background, 0, data ); } WRITE8_HANDLER( tsamurai_scrollx_w ) { - tilemap_set_scrollx( background, 0, data ); + tsamurai_state *state = space->machine->driver_data(); + tilemap_set_scrollx( state->background, 0, data ); } WRITE8_HANDLER( tsamurai_bgcolor_w ) { - bgcolor = data; + tsamurai_state *state = space->machine->driver_data(); + state->bgcolor = data; } WRITE8_HANDLER( tsamurai_textbank1_w ) { - if( textbank1!=data ) + tsamurai_state *state = space->machine->driver_data(); + if( state->textbank1!=data ) { - textbank1 = data; - tilemap_mark_all_tiles_dirty( foreground ); + state->textbank1 = data; + tilemap_mark_all_tiles_dirty( state->foreground ); } } WRITE8_HANDLER( tsamurai_textbank2_w ) { - if( textbank2!=data ) + tsamurai_state *state = space->machine->driver_data(); + if( state->textbank2!=data ) { - textbank2 = data; - tilemap_mark_all_tiles_dirty( foreground ); + state->textbank2 = data; + tilemap_mark_all_tiles_dirty( state->foreground ); } } WRITE8_HANDLER( tsamurai_bg_videoram_w ) { - tsamurai_bg_videoram[offset]=data; + tsamurai_state *state = space->machine->driver_data(); + state->bg_videoram[offset]=data; offset = offset/2; - tilemap_mark_tile_dirty(background,offset); + tilemap_mark_tile_dirty(state->background,offset); } WRITE8_HANDLER( tsamurai_fg_videoram_w ) { - tsamurai_videoram[offset]=data; - tilemap_mark_tile_dirty(foreground,offset); + tsamurai_state *state = space->machine->driver_data(); + state->videoram[offset]=data; + tilemap_mark_tile_dirty(state->foreground,offset); } WRITE8_HANDLER( tsamurai_fg_colorram_w ) { - if( tsamurai_colorram[offset]!=data ) + tsamurai_state *state = space->machine->driver_data(); + if( state->colorram[offset]!=data ) { - tsamurai_colorram[offset]=data; + state->colorram[offset]=data; if (offset & 1) { int col = offset/2; int row; for (row = 0;row < 32;row++) - tilemap_mark_tile_dirty(foreground,32*row+col); + tilemap_mark_tile_dirty(state->foreground,32*row+col); } } } @@ -140,12 +145,12 @@ WRITE8_HANDLER( tsamurai_fg_colorram_w ) static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect ) { + tsamurai_state *state = machine->driver_data(); UINT8 *spriteram = machine->generic.spriteram.u8; gfx_element *gfx = machine->gfx[2]; const UINT8 *source = spriteram+32*4-4; const UINT8 *finish = spriteram; /* ? */ - static int flicker; - flicker = 1-flicker; + state->flicker = 1-state->flicker; while( source>=finish ) { @@ -200,28 +205,29 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const recta VIDEO_UPDATE( tsamurai ) { + tsamurai_state *state = screen->machine->driver_data(); int i; /* Do the column scroll used for the "660" logo on the title screen */ - tilemap_set_scroll_cols(foreground, 32); + tilemap_set_scroll_cols(state->foreground, 32); for (i = 0 ; i < 32 ; i++) { - tilemap_set_scrolly(foreground, i, tsamurai_colorram[i*2]); + tilemap_set_scrolly(state->foreground, i, state->colorram[i*2]); } /* end of column scroll code */ /* This following isn't particularly efficient. We'd be better off to - dynamically change every 8th palette to the background color, so we - could draw the background as an opaque tilemap. + dynamically change every 8th palette to the state->background color, so we + could draw the state->background as an opaque tilemap. - Note that the background color register isn't well understood + Note that the state->background color register isn't well understood (screenshots would be helpful) */ - bitmap_fill(bitmap,cliprect,bgcolor); - tilemap_draw(bitmap,cliprect,background,0,0); + bitmap_fill(bitmap,cliprect,state->bgcolor); + tilemap_draw(bitmap,cliprect,state->background,0,0); draw_sprites(screen->machine, bitmap,cliprect); - tilemap_draw(bitmap,cliprect,foreground,0,0); + tilemap_draw(bitmap,cliprect,state->foreground,0,0); return 0; } @@ -231,23 +237,24 @@ VS Gong Fight runs on older hardware ***************************************************************************/ -static int vsgongf_color; WRITE8_HANDLER( vsgongf_color_w ) { - if( vsgongf_color != data ) + tsamurai_state *state = space->machine->driver_data(); + if( state->vsgongf_color != data ) { - vsgongf_color = data; - tilemap_mark_all_tiles_dirty( foreground ); + state->vsgongf_color = data; + tilemap_mark_all_tiles_dirty( state->foreground ); } } static TILE_GET_INFO( get_vsgongf_tile_info ) { - int tile_number = tsamurai_videoram[tile_index]; - int color = vsgongf_color&0x1f; - if( textbank1 ) tile_number += 0x100; + tsamurai_state *state = machine->driver_data(); + int tile_number = state->videoram[tile_index]; + int color = state->vsgongf_color&0x1f; + if( state->textbank1 ) tile_number += 0x100; SET_TILE_INFO( 1, tile_number, @@ -257,23 +264,24 @@ static TILE_GET_INFO( get_vsgongf_tile_info ) VIDEO_START( vsgongf ) { - foreground = tilemap_create(machine, get_vsgongf_tile_info,tilemap_scan_rows,8,8,32,32); + tsamurai_state *state = machine->driver_data(); + state->foreground = tilemap_create(machine, get_vsgongf_tile_info,tilemap_scan_rows,8,8,32,32); } VIDEO_UPDATE( vsgongf ) { + tsamurai_state *state = screen->machine->driver_data(); #ifdef MAME_DEBUG - static int k; if( input_code_pressed( screen->machine, KEYCODE_Q ) ){ while( input_code_pressed( screen->machine, KEYCODE_Q ) ){ - k++; - vsgongf_color = k; - tilemap_mark_all_tiles_dirty( foreground ); + state->key_count++; + state->vsgongf_color = state->key_count; + tilemap_mark_all_tiles_dirty( state->foreground ); } } #endif - tilemap_draw(bitmap,cliprect,foreground,0,0); + tilemap_draw(bitmap,cliprect,state->foreground,0,0); draw_sprites(screen->machine,bitmap,cliprect); return 0; } diff --git a/src/mame/video/undrfire.c b/src/mame/video/undrfire.c index 46c49f3579f..3b1def31279 100644 --- a/src/mame/video/undrfire.c +++ b/src/mame/video/undrfire.c @@ -2,27 +2,16 @@ #include "video/taitoic.h" #include "includes/undrfire.h" -UINT16 undrfire_rotate_ctrl[8]; - -struct tempsprite -{ - int gfx; - int code,color; - int flipx,flipy; - int x,y; - int zoomx,zoomy; - int primask; -}; -static struct tempsprite *spritelist; /******************************************************************/ VIDEO_START( undrfire ) { + undrfire_state *state = machine->driver_data(); int i; - spritelist = auto_alloc_array(machine, struct tempsprite, 0x4000); + state->spritelist = auto_alloc_array(machine, struct tempsprite, 0x4000); for (i = 0; i < 16384; i++) /* Fix later - some weird colours in places */ palette_set_color(machine, i, MAKE_RGB(0,0,0)); @@ -77,6 +66,7 @@ Heavy use is made of sprite zooming. static void draw_sprites(running_machine *machine, bitmap_t *bitmap,const rectangle *cliprect,const int *primasks,int x_offs,int y_offs) { + undrfire_state *state = machine->driver_data(); UINT32 *spriteram32 = machine->generic.spriteram.u32; UINT16 *spritemap = (UINT16 *)machine->region("user1")->base(); int offs, data, tilenum, color, flipx, flipy; @@ -88,7 +78,7 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap,const rectan /* pdrawgfx() needs us to draw sprites front to back, so we have to build a list while processing sprite ram and then draw them all at the end */ - struct tempsprite *sprite_ptr = spritelist; + struct tempsprite *sprite_ptr = state->spritelist; for (offs = (machine->generic.spriteram_size/4-4);offs >= 0;offs -= 4) { @@ -203,7 +193,7 @@ logerror("Sprite number %04x had %02x invalid chunks\n",tilenum,bad_chunks); } /* this happens only if primsks != NULL */ - while (sprite_ptr != spritelist) + while (sprite_ptr != state->spritelist) { sprite_ptr--; @@ -220,6 +210,7 @@ logerror("Sprite number %04x had %02x invalid chunks\n",tilenum,bad_chunks); static void draw_sprites_cbombers(running_machine *machine, bitmap_t *bitmap,const rectangle *cliprect,const int *primasks,int x_offs,int y_offs) { + undrfire_state *state = machine->driver_data(); UINT32 *spriteram32 = machine->generic.spriteram.u32; UINT16 *spritemap = (UINT16 *)machine->region("user1")->base(); UINT8 *spritemapHibit = (UINT8 *)machine->region("user2")->base(); @@ -233,7 +224,7 @@ static void draw_sprites_cbombers(running_machine *machine, bitmap_t *bitmap,con /* pdrawgfx() needs us to draw sprites front to back, so we have to build a list while processing sprite ram and then draw them all at the end */ - struct tempsprite *sprite_ptr = spritelist; + struct tempsprite *sprite_ptr = state->spritelist; for (offs = (machine->generic.spriteram_size/4-4);offs >= 0;offs -= 4) { @@ -337,7 +328,7 @@ static void draw_sprites_cbombers(running_machine *machine, bitmap_t *bitmap,con } /* this happens only if primsks != NULL */ - while (sprite_ptr != spritelist) + while (sprite_ptr != state->spritelist) { sprite_ptr--; @@ -365,43 +356,40 @@ VIDEO_UPDATE( undrfire ) UINT16 priority; #ifdef MAME_DEBUG - static UINT8 dislayer[6]; /* Layer toggles to help get layers correct */ -#endif - -#ifdef MAME_DEBUG + undrfire_state *state = screen->machine->driver_data(); if (input_code_pressed_once (screen->machine, KEYCODE_X)) { - dislayer[5] ^= 1; - popmessage("piv text: %01x",dislayer[5]); + state->dislayer[5] ^= 1; + popmessage("piv text: %01x",state->dislayer[5]); } if (input_code_pressed_once (screen->machine, KEYCODE_C)) { - dislayer[0] ^= 1; - popmessage("bg0: %01x",dislayer[0]); + state->dislayer[0] ^= 1; + popmessage("bg0: %01x",state->dislayer[0]); } if (input_code_pressed_once (screen->machine, KEYCODE_V)) { - dislayer[1] ^= 1; - popmessage("bg1: %01x",dislayer[1]); + state->dislayer[1] ^= 1; + popmessage("bg1: %01x",state->dislayer[1]); } if (input_code_pressed_once (screen->machine, KEYCODE_B)) { - dislayer[2] ^= 1; - popmessage("bg2: %01x",dislayer[2]); + state->dislayer[2] ^= 1; + popmessage("bg2: %01x",state->dislayer[2]); } if (input_code_pressed_once (screen->machine, KEYCODE_N)) { - dislayer[3] ^= 1; - popmessage("bg3: %01x",dislayer[3]); + state->dislayer[3] ^= 1; + popmessage("bg3: %01x",state->dislayer[3]); } if (input_code_pressed_once (screen->machine, KEYCODE_M)) { - dislayer[4] ^= 1; - popmessage("sprites: %01x",dislayer[4]); + state->dislayer[4] ^= 1; + popmessage("sprites: %01x",state->dislayer[4]); } #endif @@ -434,27 +422,27 @@ VIDEO_UPDATE( undrfire ) tc0100scn_tilemap_draw(tc0100scn, bitmap, cliprect, pivlayer[1], 0, 0); #ifdef MAME_DEBUG - if (dislayer[layer[0]]==0) + if (state->dislayer[layer[0]]==0) #endif tc0480scp_tilemap_draw(tc0480scp, bitmap, cliprect, layer[0], 0, 1); #ifdef MAME_DEBUG - if (dislayer[layer[1]]==0) + if (state->dislayer[layer[1]]==0) #endif tc0480scp_tilemap_draw(tc0480scp, bitmap, cliprect, layer[1], 0, 2); #ifdef MAME_DEBUG - if (dislayer[layer[2]]==0) + if (state->dislayer[layer[2]]==0) #endif tc0480scp_tilemap_draw(tc0480scp, bitmap, cliprect, layer[2], 0, 4); #ifdef MAME_DEBUG - if (dislayer[layer[3]]==0) + if (state->dislayer[layer[3]]==0) #endif tc0480scp_tilemap_draw(tc0480scp, bitmap, cliprect, layer[3], 0, 8); #ifdef MAME_DEBUG - if (dislayer[4]==0) + if (state->dislayer[4]==0) #endif /* Sprites have variable priority (we kludge this on road levels) */ { @@ -471,7 +459,7 @@ VIDEO_UPDATE( undrfire ) } #ifdef MAME_DEBUG - if (dislayer[5]==0) + if (state->dislayer[5]==0) #endif tc0100scn_tilemap_draw(tc0100scn, bitmap, cliprect, pivlayer[2], 0, 0); /* piv text layer */ @@ -493,7 +481,7 @@ VIDEO_UPDATE( undrfire ) for (i = 0; i < 8; i += 1) { - sprintf (buf, "%02x: %04x", i, undrfire_rotate_ctrl[i]); + sprintf (buf, "%02x: %04x", i, state->rotate_ctrl[i]); ui_draw_text (buf, 0, i*8); } } @@ -511,43 +499,40 @@ VIDEO_UPDATE( cbombers ) UINT16 priority; #ifdef MAME_DEBUG - static UINT8 dislayer[6]; /* Layer toggles to help get layers correct */ -#endif - -#ifdef MAME_DEBUG + undrfire_state *state = screen->machine->driver_data(); if (input_code_pressed_once (screen->machine, KEYCODE_X)) { - dislayer[5] ^= 1; - popmessage("piv text: %01x",dislayer[5]); + state->dislayer[5] ^= 1; + popmessage("piv text: %01x",state->dislayer[5]); } if (input_code_pressed_once (screen->machine, KEYCODE_C)) { - dislayer[0] ^= 1; - popmessage("bg0: %01x",dislayer[0]); + state->dislayer[0] ^= 1; + popmessage("bg0: %01x",state->dislayer[0]); } if (input_code_pressed_once (screen->machine, KEYCODE_V)) { - dislayer[1] ^= 1; - popmessage("bg1: %01x",dislayer[1]); + state->dislayer[1] ^= 1; + popmessage("bg1: %01x",state->dislayer[1]); } if (input_code_pressed_once (screen->machine, KEYCODE_B)) { - dislayer[2] ^= 1; - popmessage("bg2: %01x",dislayer[2]); + state->dislayer[2] ^= 1; + popmessage("bg2: %01x",state->dislayer[2]); } if (input_code_pressed_once (screen->machine, KEYCODE_N)) { - dislayer[3] ^= 1; - popmessage("bg3: %01x",dislayer[3]); + state->dislayer[3] ^= 1; + popmessage("bg3: %01x",state->dislayer[3]); } if (input_code_pressed_once (screen->machine, KEYCODE_M)) { - dislayer[4] ^= 1; - popmessage("sprites: %01x",dislayer[4]); + state->dislayer[4] ^= 1; + popmessage("sprites: %01x",state->dislayer[4]); } #endif @@ -580,27 +565,27 @@ VIDEO_UPDATE( cbombers ) tc0100scn_tilemap_draw(tc0100scn, bitmap, cliprect, pivlayer[1], 0, 0); #ifdef MAME_DEBUG - if (dislayer[layer[0]]==0) + if (state->dislayer[layer[0]]==0) #endif tc0480scp_tilemap_draw(tc0480scp, bitmap, cliprect, layer[0], 0, 1); #ifdef MAME_DEBUG - if (dislayer[layer[1]]==0) + if (state->dislayer[layer[1]]==0) #endif tc0480scp_tilemap_draw(tc0480scp, bitmap, cliprect, layer[1], 0, 2); #ifdef MAME_DEBUG - if (dislayer[layer[2]]==0) + if (state->dislayer[layer[2]]==0) #endif tc0480scp_tilemap_draw(tc0480scp, bitmap, cliprect, layer[2], 0, 4); #ifdef MAME_DEBUG - if (dislayer[layer[3]]==0) + if (state->dislayer[layer[3]]==0) #endif tc0480scp_tilemap_draw(tc0480scp, bitmap, cliprect, layer[3], 0, 8); #ifdef MAME_DEBUG - if (dislayer[4]==0) + if (state->dislayer[4]==0) #endif /* Sprites have variable priority (we kludge this on road levels) */ { @@ -617,7 +602,7 @@ VIDEO_UPDATE( cbombers ) } #ifdef MAME_DEBUG - if (dislayer[5]==0) + if (state->dislayer[5]==0) #endif tc0100scn_tilemap_draw(tc0100scn, bitmap, cliprect, pivlayer[2], 0, 0); /* piv text layer */ @@ -631,7 +616,7 @@ VIDEO_UPDATE( cbombers ) for (i = 0; i < 8; i += 1) { - sprintf (buf, "%02x: %04x", i, undrfire_rotate_ctrl[i]); + sprintf (buf, "%02x: %04x", i, state->rotate_ctrl[i]); ui_draw_text (buf, 0, i*8); } } diff --git a/src/mame/video/wgp.c b/src/mame/video/wgp.c index 66d1d4e5263..9715ffefbb6 100644 --- a/src/mame/video/wgp.c +++ b/src/mame/video/wgp.c @@ -649,33 +649,29 @@ VIDEO_UPDATE( wgp ) int i; UINT8 layer[3]; -#ifdef MAME_DEBUG - static UINT8 dislayer[4]; -#endif - #ifdef MAME_DEBUG if (input_code_pressed_once (screen->machine, KEYCODE_V)) { - dislayer[0] ^= 1; - popmessage("piv0: %01x",dislayer[0]); + state->dislayer[0] ^= 1; + popmessage("piv0: %01x",state->dislayer[0]); } if (input_code_pressed_once (screen->machine, KEYCODE_B)) { - dislayer[1] ^= 1; - popmessage("piv1: %01x",dislayer[1]); + state->dislayer[1] ^= 1; + popmessage("piv1: %01x",state->dislayer[1]); } if (input_code_pressed_once (screen->machine, KEYCODE_N)) { - dislayer[2] ^= 1; - popmessage("piv2: %01x",dislayer[2]); + state->dislayer[2] ^= 1; + popmessage("piv2: %01x",state->dislayer[2]); } if (input_code_pressed_once (screen->machine, KEYCODE_M)) { - dislayer[3] ^= 1; - popmessage("TC0100SCN top bg layer: %01x",dislayer[3]); + state->dislayer[3] ^= 1; + popmessage("TC0100SCN top bg layer: %01x",state->dislayer[3]); } #endif @@ -702,17 +698,17 @@ VIDEO_UPDATE( wgp ) /* We should draw the following on a 1024x1024 bitmap... */ #ifdef MAME_DEBUG - if (dislayer[layer[0]] == 0) + if (state->dislayer[layer[0]] == 0) #endif wgp_piv_layer_draw(screen->machine, bitmap, cliprect, layer[0], TILEMAP_DRAW_OPAQUE, 1); #ifdef MAME_DEBUG - if (dislayer[layer[1]] == 0) + if (state->dislayer[layer[1]] == 0) #endif wgp_piv_layer_draw(screen->machine, bitmap, cliprect, layer[1], 0, 2); #ifdef MAME_DEBUG - if (dislayer[layer[2]] == 0) + if (state->dislayer[layer[2]] == 0) #endif wgp_piv_layer_draw(screen->machine, bitmap, cliprect, layer[2], 0, 4); @@ -726,7 +722,7 @@ VIDEO_UPDATE( wgp ) tc0100scn_tilemap_draw(state->tc0100scn, bitmap, cliprect, layer[0], 0, 0); #ifdef MAME_DEBUG - if (dislayer[3] == 0) + if (state->dislayer[3] == 0) #endif tc0100scn_tilemap_draw(state->tc0100scn, bitmap, cliprect, layer[1], 0, 0); tc0100scn_tilemap_draw(state->tc0100scn, bitmap, cliprect, layer[2], 0, 0);