From a47eb26d5bd1974eb42100174ec2d307effad3be Mon Sep 17 00:00:00 2001 From: Fabio Priuli Date: Tue, 23 Feb 2010 19:18:49 +0000 Subject: [PATCH] Added driver_data struct and save states to the following drivers: matmania.c, metlclsh.c, mexico86.c, mouser.c, mrflea.c, mrjong.c, munchmo.c and mwarr.c Added driver_data struct to the following drivers: mgolf.c, minivadr.c, mosaic.c and mrdo.c Enabled save states to mugsmash.c (everything was already saved) --- .gitattributes | 7 + src/mame/drivers/matmania.c | 176 ++++++++++--- src/mame/drivers/metlclsh.c | 90 ++++--- src/mame/drivers/mexico86.c | 154 ++++++++--- src/mame/drivers/mgolf.c | 133 ++++++---- src/mame/drivers/minivadr.c | 19 +- src/mame/drivers/mosaic.c | 83 +++--- src/mame/drivers/mouser.c | 66 +++-- src/mame/drivers/mrdo.c | 24 +- src/mame/drivers/mrflea.c | 479 ++++++++++++++++++++--------------- src/mame/drivers/mrjong.c | 107 +++++--- src/mame/drivers/mugsmash.c | 28 +- src/mame/drivers/munchmo.c | 125 ++++++--- src/mame/drivers/mwarr.c | 304 ++++++++++++++-------- src/mame/includes/matmania.h | 65 +++-- src/mame/includes/metlclsh.h | 38 +++ src/mame/includes/mexico86.h | 48 +++- src/mame/includes/mosaic.h | 29 +++ src/mame/includes/mouser.h | 31 +++ src/mame/includes/mrdo.h | 32 +++ src/mame/includes/mrflea.h | 36 +++ src/mame/includes/mrjong.h | 27 ++ src/mame/includes/mugsmash.h | 5 + src/mame/includes/munchmo.h | 40 +++ src/mame/machine/maniach.c | 123 +++++---- src/mame/machine/mexico86.c | 225 ++++++++-------- src/mame/video/matmania.c | 215 +++++++--------- src/mame/video/metlclsh.c | 127 +++++----- src/mame/video/mexico86.c | 95 +++---- src/mame/video/mosaic.c | 41 +-- src/mame/video/mouser.c | 59 +++-- src/mame/video/mrdo.c | 94 ++++--- src/mame/video/mrflea.c | 90 ++++--- src/mame/video/mrjong.c | 64 ++--- src/mame/video/mugsmash.c | 50 ++-- src/mame/video/munchmo.c | 111 ++++---- 36 files changed, 2158 insertions(+), 1282 deletions(-) create mode 100644 src/mame/includes/metlclsh.h create mode 100644 src/mame/includes/mosaic.h create mode 100644 src/mame/includes/mouser.h create mode 100644 src/mame/includes/mrdo.h create mode 100644 src/mame/includes/mrflea.h create mode 100644 src/mame/includes/mrjong.h create mode 100644 src/mame/includes/munchmo.h diff --git a/.gitattributes b/.gitattributes index 479bdf92a43..a7f2ba562d0 100644 --- a/.gitattributes +++ b/.gitattributes @@ -2640,6 +2640,7 @@ src/mame/includes/megasys1.h svneol=native#text/plain src/mame/includes/megazone.h svneol=native#text/plain src/mame/includes/mermaid.h svneol=native#text/plain src/mame/includes/metalmx.h svneol=native#text/plain +src/mame/includes/metlclsh.h svneol=native#text/plain src/mame/includes/mexico86.h svneol=native#text/plain src/mame/includes/mhavoc.h svneol=native#text/plain src/mame/includes/micro3d.h svneol=native#text/plain @@ -2656,8 +2657,14 @@ src/mame/includes/model2.h svneol=native#text/plain src/mame/includes/model3.h svneol=native#text/plain src/mame/includes/momoko.h svneol=native#text/plain src/mame/includes/moo.h svneol=native#text/plain +src/mame/includes/mosaic.h svneol=native#text/plain +src/mame/includes/mouser.h svneol=native#text/plain +src/mame/includes/mrdo.h svneol=native#text/plain +src/mame/includes/mrflea.h svneol=native#text/plain +src/mame/includes/mrjong.h svneol=native#text/plain src/mame/includes/ms32.h svneol=native#text/plain src/mame/includes/mugsmash.h svneol=native#text/plain +src/mame/includes/munchmo.h svneol=native#text/plain src/mame/includes/mw8080bw.h svneol=native#text/plain src/mame/includes/mystston.h svneol=native#text/plain src/mame/includes/n64.h svneol=native#text/plain diff --git a/src/mame/drivers/matmania.c b/src/mame/drivers/matmania.c index f8afaee4b74..4d0a43700e7 100644 --- a/src/mame/drivers/matmania.c +++ b/src/mame/drivers/matmania.c @@ -39,53 +39,66 @@ The driver has been updated accordingly. #include "sound/3526intf.h" #include "includes/matmania.h" +/************************************* + * + * Memory handlers + * + *************************************/ + static WRITE8_HANDLER( matmania_sh_command_w ) { - soundlatch_w(space,offset,data); - cputag_set_input_line(space->machine, "audiocpu", M6502_IRQ_LINE, HOLD_LINE); + matmania_state *state = (matmania_state *)space->machine->driver_data; + soundlatch_w(space, offset, data); + cpu_set_input_line(state->audiocpu, M6502_IRQ_LINE, HOLD_LINE); } static WRITE8_HANDLER( maniach_sh_command_w ) { + matmania_state *state = (matmania_state *)space->machine->driver_data; soundlatch_w(space, offset, data); - cputag_set_input_line(space->machine, "audiocpu", M6809_IRQ_LINE, HOLD_LINE); + cpu_set_input_line(state->audiocpu, M6809_IRQ_LINE, HOLD_LINE); } +/************************************* + * + * Address maps + * + *************************************/ static ADDRESS_MAP_START( matmania_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0x0000, 0x077f) AM_RAM - AM_RANGE(0x0780, 0x07df) AM_WRITEONLY AM_BASE_SIZE_GENERIC(spriteram) - AM_RANGE(0x1000, 0x13ff) AM_RAM AM_BASE(&matmania_videoram2) AM_SIZE(&matmania_videoram2_size) - AM_RANGE(0x1400, 0x17ff) AM_RAM AM_BASE(&matmania_colorram2) - AM_RANGE(0x2000, 0x21ff) AM_RAM AM_BASE(&matmania_videoram) AM_SIZE(&matmania_videoram_size) - AM_RANGE(0x2200, 0x23ff) AM_RAM AM_BASE(&matmania_colorram) - AM_RANGE(0x2400, 0x25ff) AM_RAM AM_BASE(&matmania_videoram3) AM_SIZE(&matmania_videoram3_size) - AM_RANGE(0x2600, 0x27ff) AM_RAM AM_BASE(&matmania_colorram3) - AM_RANGE(0x3000, 0x3000) AM_READ_PORT("IN0") AM_WRITEONLY AM_BASE(&matmania_pageselect) + AM_RANGE(0x0780, 0x07df) AM_WRITEONLY AM_BASE_SIZE_MEMBER(matmania_state, spriteram, spriteram_size) + AM_RANGE(0x1000, 0x13ff) AM_RAM AM_BASE_SIZE_MEMBER(matmania_state, videoram2, videoram2_size) + AM_RANGE(0x1400, 0x17ff) AM_RAM AM_BASE_MEMBER(matmania_state, colorram2) + AM_RANGE(0x2000, 0x21ff) AM_RAM AM_BASE_SIZE_MEMBER(matmania_state, videoram, videoram_size) + AM_RANGE(0x2200, 0x23ff) AM_RAM AM_BASE_MEMBER(matmania_state, colorram) + AM_RANGE(0x2400, 0x25ff) AM_RAM AM_BASE_SIZE_MEMBER(matmania_state, videoram3, videoram3_size) + AM_RANGE(0x2600, 0x27ff) AM_RAM AM_BASE_MEMBER(matmania_state, colorram3) + AM_RANGE(0x3000, 0x3000) AM_READ_PORT("IN0") AM_WRITEONLY AM_BASE_MEMBER(matmania_state, pageselect) AM_RANGE(0x3010, 0x3010) AM_READ_PORT("IN1") AM_WRITE(matmania_sh_command_w) - AM_RANGE(0x3020, 0x3020) AM_READ_PORT("DSW2") AM_WRITEONLY AM_BASE(&matmania_scroll) + AM_RANGE(0x3020, 0x3020) AM_READ_PORT("DSW2") AM_WRITEONLY AM_BASE_MEMBER(matmania_state, scroll) AM_RANGE(0x3030, 0x3030) AM_READ_PORT("DSW1") AM_WRITENOP /* ?? */ - AM_RANGE(0x3050, 0x307f) AM_WRITE(matmania_paletteram_w) AM_BASE_GENERIC(paletteram) + AM_RANGE(0x3050, 0x307f) AM_WRITE(matmania_paletteram_w) AM_BASE_MEMBER(matmania_state, paletteram) AM_RANGE(0x4000, 0xffff) AM_ROM ADDRESS_MAP_END static ADDRESS_MAP_START( maniach_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0x0000, 0x077f) AM_RAM - AM_RANGE(0x0780, 0x07df) AM_RAM AM_BASE_SIZE_GENERIC(spriteram) - AM_RANGE(0x1000, 0x13ff) AM_RAM AM_BASE(&matmania_videoram2) AM_SIZE(&matmania_videoram2_size) - AM_RANGE(0x1400, 0x17ff) AM_RAM AM_BASE(&matmania_colorram2) - AM_RANGE(0x2000, 0x21ff) AM_RAM AM_BASE(&matmania_videoram) AM_SIZE(&matmania_videoram_size) - AM_RANGE(0x2200, 0x23ff) AM_RAM AM_BASE(&matmania_colorram) - AM_RANGE(0x2400, 0x25ff) AM_RAM AM_BASE(&matmania_videoram3) AM_SIZE(&matmania_videoram3_size) - AM_RANGE(0x2600, 0x27ff) AM_RAM AM_BASE(&matmania_colorram3) - AM_RANGE(0x3000, 0x3000) AM_READ_PORT("IN0") AM_WRITEONLY AM_BASE(&matmania_pageselect) + AM_RANGE(0x0780, 0x07df) AM_RAM AM_BASE_SIZE_MEMBER(matmania_state, spriteram, spriteram_size) + AM_RANGE(0x1000, 0x13ff) AM_RAM AM_BASE_SIZE_MEMBER(matmania_state, videoram2, videoram2_size) + AM_RANGE(0x1400, 0x17ff) AM_RAM AM_BASE_MEMBER(matmania_state, colorram2) + AM_RANGE(0x2000, 0x21ff) AM_RAM AM_BASE_SIZE_MEMBER(matmania_state, videoram, videoram_size) + AM_RANGE(0x2200, 0x23ff) AM_RAM AM_BASE_MEMBER(matmania_state, colorram) + AM_RANGE(0x2400, 0x25ff) AM_RAM AM_BASE_SIZE_MEMBER(matmania_state, videoram3, videoram3_size) + AM_RANGE(0x2600, 0x27ff) AM_RAM AM_BASE_MEMBER(matmania_state, colorram3) + AM_RANGE(0x3000, 0x3000) AM_READ_PORT("IN0") AM_WRITEONLY AM_BASE_MEMBER(matmania_state, pageselect) AM_RANGE(0x3010, 0x3010) AM_READ_PORT("IN1") AM_WRITE(maniach_sh_command_w) - AM_RANGE(0x3020, 0x3020) AM_READ_PORT("DSW2") AM_WRITEONLY AM_BASE(&matmania_scroll) + AM_RANGE(0x3020, 0x3020) AM_READ_PORT("DSW2") AM_WRITEONLY AM_BASE_MEMBER(matmania_state, scroll) AM_RANGE(0x3030, 0x3030) AM_READ_PORT("DSW1") AM_WRITENOP /* ?? */ AM_RANGE(0x3040, 0x3040) AM_READWRITE(maniach_mcu_r,maniach_mcu_w) AM_RANGE(0x3041, 0x3041) AM_READ(maniach_mcu_status_r) - AM_RANGE(0x3050, 0x307f) AM_WRITE(matmania_paletteram_w) AM_BASE_GENERIC(paletteram) + AM_RANGE(0x3050, 0x307f) AM_WRITE(matmania_paletteram_w) AM_BASE_MEMBER(matmania_state, paletteram) AM_RANGE(0x4000, 0xffff) AM_ROM ADDRESS_MAP_END @@ -110,17 +123,23 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( maniach_mcu_map, ADDRESS_SPACE_PROGRAM, 8 ) ADDRESS_MAP_GLOBAL_MASK(0x7ff) - AM_RANGE(0x0000, 0x0000) AM_READWRITE(maniach_68705_portA_r,maniach_68705_portA_w) - AM_RANGE(0x0001, 0x0001) AM_READWRITE(maniach_68705_portB_r,maniach_68705_portB_w) - AM_RANGE(0x0002, 0x0002) AM_READWRITE(maniach_68705_portC_r,maniach_68705_portC_w) - AM_RANGE(0x0004, 0x0004) AM_WRITE(maniach_68705_ddrA_w) - AM_RANGE(0x0005, 0x0005) AM_WRITE(maniach_68705_ddrB_w) - AM_RANGE(0x0006, 0x0006) AM_WRITE(maniach_68705_ddrC_w) + AM_RANGE(0x0000, 0x0000) AM_READWRITE(maniach_68705_port_a_r,maniach_68705_port_a_w) + AM_RANGE(0x0001, 0x0001) AM_READWRITE(maniach_68705_port_b_r,maniach_68705_port_b_w) + AM_RANGE(0x0002, 0x0002) AM_READWRITE(maniach_68705_port_c_r,maniach_68705_port_c_w) + AM_RANGE(0x0004, 0x0004) AM_WRITE(maniach_68705_ddr_a_w) + AM_RANGE(0x0005, 0x0005) AM_WRITE(maniach_68705_ddr_b_w) + AM_RANGE(0x0006, 0x0006) AM_WRITE(maniach_68705_ddr_c_w) AM_RANGE(0x0010, 0x007f) AM_RAM AM_RANGE(0x0080, 0x07ff) AM_ROM ADDRESS_MAP_END +/************************************* + * + * Input ports + * + *************************************/ + static INPUT_PORTS_START( matmania ) PORT_START("IN0") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY @@ -191,6 +210,12 @@ static INPUT_PORTS_START( maniach ) INPUT_PORTS_END +/************************************* + * + * Graphics definitions + * + *************************************/ + static const gfx_layout charlayout = { 8,8, /* 8*8 characters */ @@ -268,8 +293,26 @@ GFXDECODE_END +/************************************* + * + * Machine driver + * + *************************************/ + +static MACHINE_START( matmania ) +{ + matmania_state *state = (matmania_state *)machine->driver_data; + + state->maincpu = devtag_get_device(machine, "maincpu"); + state->audiocpu = devtag_get_device(machine, "audiocpu"); + state->mcu = devtag_get_device(machine, "mcu"); +} + static MACHINE_DRIVER_START( matmania ) + /* driver data */ + MDRV_DRIVER_DATA(matmania_state) + /* basic machine hardware */ MDRV_CPU_ADD("maincpu", M6502, 1500000) /* 1.5 MHz ???? */ MDRV_CPU_PROGRAM_MAP(matmania_map) @@ -281,6 +324,8 @@ static MACHINE_DRIVER_START( matmania ) /* IRQs are caused by the main CPU */ MDRV_QUANTUM_TIME(HZ(600)) + MDRV_MACHINE_START(matmania) + /* video hardware */ MDRV_SCREEN_ADD("screen", RASTER) MDRV_SCREEN_REFRESH_RATE(60) @@ -314,7 +359,8 @@ MACHINE_DRIVER_END /* handler called by the 3526 emulator when the internal timers cause an IRQ */ static void irqhandler(running_device *device, int linestate) { - cputag_set_input_line(device->machine, "audiocpu", 1, linestate); + matmania_state *state = (matmania_state *)device->machine->driver_data; + cpu_set_input_line(state->audiocpu, 1, linestate); } static const ym3526_interface ym3526_config = @@ -323,8 +369,51 @@ static const ym3526_interface ym3526_config = }; +static MACHINE_START( maniach ) +{ + matmania_state *state = (matmania_state *)machine->driver_data; + + MACHINE_START_CALL(matmania); + + state_save_register_global(machine, state->port_a_in); + state_save_register_global(machine, state->port_a_out); + state_save_register_global(machine, state->ddr_a); + state_save_register_global(machine, state->port_b_in); + state_save_register_global(machine, state->port_b_out); + state_save_register_global(machine, state->ddr_b); + state_save_register_global(machine, state->port_c_in); + state_save_register_global(machine, state->port_c_out); + state_save_register_global(machine, state->ddr_c); + state_save_register_global(machine, state->mcu_sent); + state_save_register_global(machine, state->main_sent); + state_save_register_global(machine, state->from_main); + state_save_register_global(machine, state->from_mcu); +} + +static MACHINE_RESET( maniach ) +{ + matmania_state *state = (matmania_state *)machine->driver_data; + + state->port_a_in = 0; + state->port_a_out = 0; + state->ddr_a = 0; + state->port_b_in = 0; + state->port_b_out = 0; + state->ddr_b = 0; + state->port_c_in = 0; + state->port_c_out = 0; + state->ddr_c = 0; + state->mcu_sent = 0; + state->main_sent = 0; + state->from_main = 0; + state->from_mcu = 0; +} + static MACHINE_DRIVER_START( maniach ) + /* driver data */ + MDRV_DRIVER_DATA(matmania_state) + /* basic machine hardware */ MDRV_CPU_ADD("maincpu", M6502, 1500000) /* 1.5 MHz ???? */ MDRV_CPU_PROGRAM_MAP(maniach_map) @@ -339,6 +428,9 @@ static MACHINE_DRIVER_START( maniach ) MDRV_QUANTUM_TIME(HZ(6000)) /* 100 CPU slice per frame - high interleaving to sync main and mcu */ + MDRV_MACHINE_START(maniach) + MDRV_MACHINE_RESET(maniach) + /* video hardware */ MDRV_SCREEN_ADD("screen", RASTER) MDRV_SCREEN_REFRESH_RATE(60) @@ -365,11 +457,11 @@ static MACHINE_DRIVER_START( maniach ) MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.40) MACHINE_DRIVER_END -/*************************************************************************** - - Mat Mania driver - -***************************************************************************/ +/************************************* + * + * ROM definition(s) + * + *************************************/ ROM_START( matmania ) ROM_REGION( 0x10000, "maincpu", 0 ) @@ -593,7 +685,13 @@ ROM_END -GAME( 1985, matmania, 0, matmania, matmania, 0, ROT270, "Technos Japan (Taito America license)", "Mat Mania", 0 ) -GAME( 1985, excthour, matmania, matmania, maniach, 0, ROT270, "Technos Japan (Taito license)", "Exciting Hour", 0 ) -GAME( 1986, maniach, 0, maniach, maniach, 0, ROT270, "Technos Japan (Taito America license)", "Mania Challenge (set 1)", 0 ) -GAME( 1986, maniach2, maniach, maniach, maniach, 0, ROT270, "Technos Japan (Taito America license)", "Mania Challenge (set 2)" , 0) /* earlier version? */ +/************************************* + * + * Game driver(s) + * + *************************************/ + +GAME( 1985, matmania, 0, matmania, matmania, 0, ROT270, "Technos Japan (Taito America license)", "Mat Mania", GAME_SUPPORTS_SAVE ) +GAME( 1985, excthour, matmania, matmania, maniach, 0, ROT270, "Technos Japan (Taito license)", "Exciting Hour", GAME_SUPPORTS_SAVE ) +GAME( 1986, maniach, 0, maniach, maniach, 0, ROT270, "Technos Japan (Taito America license)", "Mania Challenge (set 1)", GAME_SUPPORTS_SAVE ) +GAME( 1986, maniach2, maniach, maniach, maniach, 0, ROT270, "Technos Japan (Taito America license)", "Mania Challenge (set 2)", GAME_SUPPORTS_SAVE ) /* earlier version? */ diff --git a/src/mame/drivers/metlclsh.c b/src/mame/drivers/metlclsh.c index c91c0878b17..741c2b63bcb 100644 --- a/src/mame/drivers/metlclsh.c +++ b/src/mame/drivers/metlclsh.c @@ -36,20 +36,8 @@ metlclsh: #include "cpu/m6809/m6809.h" #include "sound/2203intf.h" #include "sound/3526intf.h" +#include "includes/metlclsh.h" -/* Variables defined in video: */ - -extern UINT8 *metlclsh_bgram, *metlclsh_fgram, *metlclsh_scrollx; - -/* Functions defined in video: */ - -WRITE8_HANDLER( metlclsh_bgram_w ); -WRITE8_HANDLER( metlclsh_fgram_w ); -WRITE8_HANDLER( metlclsh_gfxbank_w ); -WRITE8_HANDLER( metlclsh_rambank_w ); - -VIDEO_START( metlclsh ); -VIDEO_UPDATE( metlclsh ); /*************************************************************************** @@ -59,12 +47,14 @@ VIDEO_UPDATE( metlclsh ); static WRITE8_HANDLER( metlclsh_cause_irq ) { - cputag_set_input_line(space->machine, "sub", M6809_IRQ_LINE, ASSERT_LINE); + metlclsh_state *state = (metlclsh_state *)space->machine->driver_data; + cpu_set_input_line(state->subcpu, M6809_IRQ_LINE, ASSERT_LINE); } static WRITE8_HANDLER( metlclsh_ack_nmi ) { - cputag_set_input_line(space->machine, "maincpu", INPUT_LINE_NMI, CLEAR_LINE); + metlclsh_state *state = (metlclsh_state *)space->machine->driver_data; + cpu_set_input_line(state->maincpu, INPUT_LINE_NMI, CLEAR_LINE); } static ADDRESS_MAP_START( metlclsh_master_map, ADDRESS_SPACE_PROGRAM, 8 ) @@ -81,9 +71,9 @@ static ADDRESS_MAP_START( metlclsh_master_map, ADDRESS_SPACE_PROGRAM, 8 ) /**/AM_RANGE(0xc800, 0xc82f) AM_RAM_WRITE(paletteram_xxxxBBBBGGGGRRRR_split1_w) AM_BASE_GENERIC(paletteram) /**/AM_RANGE(0xcc00, 0xcc2f) AM_RAM_WRITE(paletteram_xxxxBBBBGGGGRRRR_split2_w) AM_BASE_GENERIC(paletteram2) AM_RANGE(0xd000, 0xd001) AM_DEVREADWRITE("ym1", ym2203_r,ym2203_w) -/**/AM_RANGE(0xd800, 0xdfff) AM_RAM_WRITE(metlclsh_fgram_w) AM_BASE(&metlclsh_fgram) +/**/AM_RANGE(0xd800, 0xdfff) AM_RAM_WRITE(metlclsh_fgram_w) AM_BASE_MEMBER(metlclsh_state, fgram) AM_RANGE(0xe000, 0xe001) AM_DEVWRITE("ym2", ym3526_w ) - AM_RANGE(0xe800, 0xe9ff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram) + AM_RANGE(0xe800, 0xe9ff) AM_RAM AM_BASE_SIZE_MEMBER(metlclsh_state, spriteram, spriteram_size) AM_RANGE(0xfff0, 0xffff) AM_ROM // Reset/IRQ vectors ADDRESS_MAP_END @@ -96,17 +86,20 @@ ADDRESS_MAP_END static WRITE8_HANDLER( metlclsh_cause_nmi2 ) { - cputag_set_input_line(space->machine, "maincpu", INPUT_LINE_NMI, ASSERT_LINE); + metlclsh_state *state = (metlclsh_state *)space->machine->driver_data; + cpu_set_input_line(state->maincpu, INPUT_LINE_NMI, ASSERT_LINE); } static WRITE8_HANDLER( metlclsh_ack_irq2 ) { - cputag_set_input_line(space->machine, "sub", M6809_IRQ_LINE, CLEAR_LINE); + metlclsh_state *state = (metlclsh_state *)space->machine->driver_data; + cpu_set_input_line(state->subcpu, M6809_IRQ_LINE, CLEAR_LINE); } static WRITE8_HANDLER( metlclsh_ack_nmi2 ) { - cputag_set_input_line(space->machine, "sub", INPUT_LINE_NMI, CLEAR_LINE); + metlclsh_state *state = (metlclsh_state *)space->machine->driver_data; + cpu_set_input_line(state->subcpu, INPUT_LINE_NMI, CLEAR_LINE); } static WRITE8_HANDLER( metlclsh_flipscreen_w ) @@ -123,10 +116,10 @@ static ADDRESS_MAP_START( metlclsh_slave_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0xc003, 0xc003) AM_READ_PORT("DSW") AM_RANGE(0xc0c0, 0xc0c0) AM_WRITE(metlclsh_cause_nmi2) // cause nmi on cpu #1 AM_RANGE(0xc0c1, 0xc0c1) AM_WRITE(metlclsh_ack_irq2) // irq ack - AM_RANGE(0xd000, 0xd7ff) AM_ROMBANK("bank1") AM_WRITE(metlclsh_bgram_w) AM_BASE(&metlclsh_bgram) // this is banked + AM_RANGE(0xd000, 0xd7ff) AM_ROMBANK("bank1") AM_WRITE(metlclsh_bgram_w) AM_BASE_MEMBER(metlclsh_state, bgram) // this is banked AM_RANGE(0xe301, 0xe301) AM_WRITE(metlclsh_flipscreen_w) // 0/1 AM_RANGE(0xe401, 0xe401) AM_WRITE(metlclsh_rambank_w) - AM_RANGE(0xe402, 0xe403) AM_WRITEONLY AM_BASE(&metlclsh_scrollx) + AM_RANGE(0xe402, 0xe403) AM_WRITEONLY AM_BASE_MEMBER(metlclsh_state, scrollx) // AM_RANGE(0xe404, 0xe404) AM_WRITENOP // ? 0 // AM_RANGE(0xe410, 0xe410) AM_WRITENOP // ? 0 on startup only AM_RANGE(0xe417, 0xe417) AM_WRITE(metlclsh_ack_nmi2) // nmi ack @@ -167,22 +160,22 @@ static INPUT_PORTS_START( metlclsh ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_START("IN1") /* c001 */ - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_START1 ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START2 ) + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_START1 ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START2 ) PORT_START("IN2") /* c002 */ - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_COCKTAIL - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_COCKTAIL - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_COCKTAIL - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_COCKTAIL - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_COCKTAIL + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_COCKTAIL + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_COCKTAIL + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_COCKTAIL + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(1) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(1) @@ -262,7 +255,8 @@ GFXDECODE_END static void metlclsh_irqhandler(running_device *device, int linestate) { - cputag_set_input_line(device->machine, "maincpu", M6809_IRQ_LINE, linestate); + metlclsh_state *state = (metlclsh_state *)device->machine->driver_data; + cpu_set_input_line(state->maincpu, M6809_IRQ_LINE, linestate); } static const ym3526_interface ym3526_config = @@ -279,13 +273,32 @@ static INTERRUPT_GEN( metlclsh_interrupt2 ) cpu_set_input_line(device, INPUT_LINE_NMI, ASSERT_LINE); } +static MACHINE_START( metlclsh ) +{ + metlclsh_state *state = (metlclsh_state *)machine->driver_data; + + state->maincpu = devtag_get_device(machine, "maincpu"); + state->subcpu = devtag_get_device(machine, "sub"); + + state_save_register_global(machine, state->write_mask); + state_save_register_global(machine, state->gfxbank); +} + static MACHINE_RESET( metlclsh ) { + metlclsh_state *state = (metlclsh_state *)machine->driver_data; + flip_screen_set(machine, 0); + + state->write_mask = 0; + state->gfxbank = 0; } static MACHINE_DRIVER_START( metlclsh ) + /* driver data */ + MDRV_DRIVER_DATA(metlclsh_state) + /* basic machine hardware */ MDRV_CPU_ADD("maincpu", M6809, 1500000) // ? MDRV_CPU_PROGRAM_MAP(metlclsh_master_map) @@ -296,6 +309,7 @@ static MACHINE_DRIVER_START( metlclsh ) MDRV_CPU_VBLANK_INT_HACK(metlclsh_interrupt2,2) // IRQ by cpu #1, NMI by coins insertion + MDRV_MACHINE_START(metlclsh) MDRV_MACHINE_RESET(metlclsh) /* video hardware */ @@ -430,4 +444,4 @@ ROM_START( metlclsh ) ROM_LOAD( "82s123.prm", 0x0000, 0x20, CRC(6844cc88) SHA1(89d23367aa6ff541205416e82781fe938dfeeb52) ) ROM_END -GAME( 1985, metlclsh, 0, metlclsh, metlclsh, 0, ROT0, "Data East", "Metal Clash (Japan)", 0 ) +GAME( 1985, metlclsh, 0, metlclsh, metlclsh, 0, ROT0, "Data East", "Metal Clash (Japan)", GAME_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/mexico86.c b/src/mame/drivers/mexico86.c index 2ae605b0cf1..c7338f11220 100644 --- a/src/mame/drivers/mexico86.c +++ b/src/mame/drivers/mexico86.c @@ -41,7 +41,7 @@ Notes: Note MCU labeling: -Bubble Bobble KiKi KaiKai Kick and RUN +Bubble Bobble KiKi KaiKai Kick and Run ------------- ------------- ------------- TAITO A78-01 TAITO A85-01 TAITO A87-01 JPH1011P JPH1020P JPH1021P @@ -57,24 +57,38 @@ PS4 J8635 PS4 J8541 PS4 J8648 #include "sound/2203intf.h" #include "includes/mexico86.h" -//AT + +/************************************* + * + * Memory handlers + * + *************************************/ + static READ8_DEVICE_HANDLER( kiki_ym2203_r ) { UINT8 result = ym2203_r(device, offset); + if (offset == 0) result &= 0x7f; + return result; } -//ZT + + +/************************************* + * + * Address maps + * + *************************************/ static ADDRESS_MAP_START( mexico86_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0x0000, 0x7fff) AM_ROM AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank1") /* banked roms */ AM_RANGE(0xc000, 0xe7ff) AM_RAM AM_SHARE("share1") /* shared with sound cpu */ - AM_RANGE(0xd500, 0xd7ff) AM_RAM AM_BASE(&mexico86_objectram) AM_SIZE(&mexico86_objectram_size) - AM_RANGE(0xe800, 0xe8ff) AM_RAM AM_BASE(&mexico86_protection_ram) /* shared with mcu */ + AM_RANGE(0xd500, 0xd7ff) AM_RAM AM_BASE_SIZE_MEMBER(mexico86_state, objectram, objectram_size) + AM_RANGE(0xe800, 0xe8ff) AM_RAM AM_BASE_MEMBER(mexico86_state, protection_ram) /* shared with mcu */ AM_RANGE(0xe900, 0xefff) AM_RAM - AM_RANGE(0xc000, 0xd4ff) AM_RAM AM_BASE(&mexico86_videoram) //AT: corrected size + AM_RANGE(0xc000, 0xd4ff) AM_RAM AM_BASE_MEMBER(mexico86_state, videoram) AM_RANGE(0xf000, 0xf000) AM_WRITE(mexico86_bankswitch_w) /* program and gfx ROM banks */ AM_RANGE(0xf008, 0xf008) AM_WRITE(mexico86_f008_w) /* cpu reset lines + other unknown stuff */ AM_RANGE(0xf010, 0xf010) AM_READ_PORT("IN3") @@ -91,11 +105,11 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( mexico86_m68705_map, ADDRESS_SPACE_PROGRAM, 8 ) ADDRESS_MAP_GLOBAL_MASK(0x7ff) - AM_RANGE(0x0000, 0x0000) AM_READWRITE(mexico86_68705_portA_r,mexico86_68705_portA_w) - AM_RANGE(0x0001, 0x0001) AM_READWRITE(mexico86_68705_portB_r,mexico86_68705_portB_w) + AM_RANGE(0x0000, 0x0000) AM_READWRITE(mexico86_68705_port_a_r,mexico86_68705_port_a_w) + AM_RANGE(0x0001, 0x0001) AM_READWRITE(mexico86_68705_port_b_r,mexico86_68705_port_b_w) AM_RANGE(0x0002, 0x0002) AM_READ_PORT("IN0") /* COIN */ - AM_RANGE(0x0004, 0x0004) AM_WRITE(mexico86_68705_ddrA_w) - AM_RANGE(0x0005, 0x0005) AM_WRITE(mexico86_68705_ddrB_w) + AM_RANGE(0x0004, 0x0004) AM_WRITE(mexico86_68705_ddr_a_w) + AM_RANGE(0x0005, 0x0005) AM_WRITE(mexico86_68705_ddr_b_w) AM_RANGE(0x000a, 0x000a) AM_WRITENOP /* looks like a bug in the code, writes to */ /* 0x0a (=10dec) instead of 0x10 */ AM_RANGE(0x0010, 0x007f) AM_RAM @@ -121,8 +135,14 @@ static ADDRESS_MAP_START( mexico86_sub_cpu_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0xc004, 0xc004) AM_WRITE(mexico86_sub_output_w) ADDRESS_MAP_END +/************************************* + * + * Input ports + * + *************************************/ + static INPUT_PORTS_START( mexico86 ) - PORT_START("IN0") /* IN0 */ + PORT_START("IN0") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) @@ -132,7 +152,7 @@ static INPUT_PORTS_START( mexico86 ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_START("IN1") /* IN1 */ + PORT_START("IN1") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1) @@ -142,7 +162,7 @@ static INPUT_PORTS_START( mexico86 ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_SERVICE ) /* service 2 */ - PORT_START("IN2") /* IN2 */ + PORT_START("IN2") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2) @@ -247,7 +267,7 @@ static INPUT_PORTS_START( mexico86 ) INPUT_PORTS_END static INPUT_PORTS_START( kikikai ) - PORT_START("IN0") /* IN0 */ + PORT_START("IN0") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) @@ -257,7 +277,7 @@ static INPUT_PORTS_START( kikikai ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_START("IN1") /* IN1 */ + PORT_START("IN1") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY @@ -267,7 +287,7 @@ static INPUT_PORTS_START( kikikai ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_START("IN2") /* IN2 */ + PORT_START("IN2") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_COCKTAIL PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_COCKTAIL PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_COCKTAIL @@ -277,8 +297,7 @@ static INPUT_PORTS_START( kikikai ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) -//AT - PORT_START("DSW0") /* DSW0 */ + PORT_START("DSW0") PORT_DIPNAME( 0x01, 0x00, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("SW1:1") PORT_DIPSETTING( 0x00, DEF_STR( Upright ) ) PORT_DIPSETTING( 0x01, DEF_STR( Cocktail ) ) @@ -315,7 +334,7 @@ static INPUT_PORTS_START( kikikai ) PORT_DIPSETTING( 0x00, DEF_STR( 2C_3C ) ) PORT_DIPSETTING( 0x80, DEF_STR( 1C_2C ) ) - PORT_START("DSW1") /* DSW1 */ + PORT_START("DSW1") PORT_DIPNAME( 0x03, 0x03, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW2:1,2") PORT_DIPSETTING( 0x02, DEF_STR( Easy ) ) PORT_DIPSETTING( 0x03, DEF_STR( Normal ) ) @@ -337,7 +356,6 @@ static INPUT_PORTS_START( kikikai ) PORT_DIPNAME( 0x80, 0x00, "Number Match" ) PORT_DIPLOCATION("SW2:8") PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) -//ZT PORT_START("IN3") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN3 ) @@ -352,6 +370,12 @@ INPUT_PORTS_END +/************************************* + * + * Graphics definitions + * + *************************************/ + static const gfx_layout charlayout = { 8,8, @@ -369,6 +393,12 @@ GFXDECODE_END +/************************************* + * + * Sound interfaces + * + *************************************/ + static const ym2203_interface ym2203_config = { { @@ -383,15 +413,69 @@ static const ym2203_interface ym2203_config = }; +/************************************* + * + * Machine driver + * + *************************************/ + +static MACHINE_START( mexico86 ) +{ + mexico86_state *state = (mexico86_state *)machine->driver_data; + UINT8 *ROM = memory_region(machine, "maincpu"); + + memory_configure_bank(machine, "bank1", 0, 6, &ROM[0x10000], 0x4000); + + state->maincpu = devtag_get_device(machine, "maincpu"); + state->audiocpu = devtag_get_device(machine, "audiocpu"); + state->subcpu = devtag_get_device(machine, "sub"); + state->mcu = devtag_get_device(machine, "mcu"); + + state_save_register_global(machine, state->port_a_in); + state_save_register_global(machine, state->port_a_out); + state_save_register_global(machine, state->ddr_a); + state_save_register_global(machine, state->port_b_in); + state_save_register_global(machine, state->port_b_out); + state_save_register_global(machine, state->ddr_b); + state_save_register_global(machine, state->address); + state_save_register_global(machine, state->latch); + + state_save_register_global(machine, state->mcu_running); + state_save_register_global(machine, state->mcu_initialised); + state_save_register_global(machine, state->coin_last); + + state_save_register_global(machine, state->charbank); +} + static MACHINE_RESET( mexico86 ) { + mexico86_state *state = (mexico86_state *)machine->driver_data; + /*TODO: check the PCB and see how the halt / reset lines are connected. */ if (devtag_get_device(machine, "sub") != NULL) cputag_set_input_line(machine, "sub", INPUT_LINE_RESET, (input_port_read(machine, "DSW1") & 0x80) ? ASSERT_LINE : CLEAR_LINE); + + state->port_a_in = 0; + state->port_a_out = 0; + state->ddr_a = 0; + state->port_b_in = 0; + state->port_b_out = 0; + state->ddr_b = 0; + state->address = 0; + state->latch = 0; + + state->mcu_running = 0; + state->mcu_initialised = 0; + state->coin_last = 0; + + state->charbank = 0; } static MACHINE_DRIVER_START( mexico86 ) + /* driver data */ + MDRV_DRIVER_DATA(mexico86_state) + /* basic machine hardware */ MDRV_CPU_ADD("maincpu",Z80, 24000000/4) /* 6 MHz, Uses clock divided 24MHz OSC */ MDRV_CPU_PROGRAM_MAP(mexico86_map) @@ -408,9 +492,9 @@ static MACHINE_DRIVER_START( mexico86 ) MDRV_CPU_PROGRAM_MAP(mexico86_sub_cpu_map) MDRV_CPU_VBLANK_INT("screen", irq0_line_hold) - MDRV_QUANTUM_TIME(HZ(6000)) /* 100 CPU slices per frame - an high value to ensure proper */ - /* synchronization of the CPUs */ + MDRV_QUANTUM_TIME(HZ(6000)) /* 100 CPU slices per frame - an high value to ensure proper synchronization of the CPUs */ + MDRV_MACHINE_START(mexico86) MDRV_MACHINE_RESET(mexico86) /* video hardware */ @@ -466,11 +550,11 @@ static MACHINE_DRIVER_START( kikikai ) MACHINE_DRIVER_END -/*************************************************************************** - - Game driver(s) - -***************************************************************************/ +/************************************* + * + * ROM definition(s) + * + *************************************/ ROM_START( kikikai ) ROM_REGION( 0x28000, "maincpu", 0 ) @@ -622,8 +706,14 @@ ROM_START( mexico86 ) ROM_END -GAME( 1986, kikikai, 0, kikikai, kikikai, 0, ROT90, "Taito Corporation", "KiKi KaiKai", 0 ) -GAME( 1986, knightb, kikikai, knightb, kikikai, 0, ROT90, "bootleg", "Knight Boy", 0 ) -GAME( 1986, kicknrun, 0, mexico86, mexico86, 0, ROT0, "Taito Corporation", "Kick and Run (World)", 0 ) -GAME( 1986, kicknrunu,kicknrun, mexico86, mexico86, 0, ROT0, "Taito America Corp", "Kick and Run (US)", 0 ) -GAME( 1986, mexico86, kicknrun, mexico86, mexico86, 0, ROT0, "bootleg", "Mexico 86", 0 ) +/************************************* + * + * Game driver(s) + * + *************************************/ + +GAME( 1986, kikikai, 0, kikikai, kikikai, 0, ROT90, "Taito Corporation", "KiKi KaiKai", GAME_SUPPORTS_SAVE ) +GAME( 1986, knightb, kikikai, knightb, kikikai, 0, ROT90, "bootleg", "Knight Boy", GAME_SUPPORTS_SAVE ) +GAME( 1986, kicknrun, 0, mexico86, mexico86, 0, ROT0, "Taito Corporation", "Kick and Run (World)", GAME_SUPPORTS_SAVE ) +GAME( 1986, kicknrunu,kicknrun, mexico86, mexico86, 0, ROT0, "Taito America Corp", "Kick and Run (US)", GAME_SUPPORTS_SAVE ) +GAME( 1986, mexico86, kicknrun, mexico86, mexico86, 0, ROT0, "bootleg", "Mexico 86", GAME_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/mgolf.c b/src/mame/drivers/mgolf.c index f29dc4ac00d..6891e3f92ab 100644 --- a/src/mame/drivers/mgolf.c +++ b/src/mame/drivers/mgolf.c @@ -7,20 +7,30 @@ #include "emu.h" #include "cpu/m6502/m6502.h" -static UINT8* mgolf_video_ram; +typedef struct _mgolf_state mgolf_state; +struct _mgolf_state +{ + /* memory pointers */ + UINT8* video_ram; -static attotime time_pushed; -static attotime time_released; + /* video-related */ + tilemap_t* bg_tilemap; -static UINT8 prev = 0; -static UINT8 mask = 0; + /* misc */ + UINT8 prev; + UINT8 mask; + attotime time_pushed; + attotime time_released; -static tilemap_t* bg_tilemap; + /* devices */ + running_device *maincpu; +}; static TILE_GET_INFO( get_tile_info ) { - UINT8 code = mgolf_video_ram[tile_index]; + mgolf_state *state = (mgolf_state *)machine->driver_data; + UINT8 code = state->video_ram[tile_index]; SET_TILE_INFO(0, code, code >> 7, 0); } @@ -28,75 +38,78 @@ static TILE_GET_INFO( get_tile_info ) static WRITE8_HANDLER( mgolf_vram_w ) { - mgolf_video_ram[offset] = data; - tilemap_mark_tile_dirty(bg_tilemap, offset); + mgolf_state *state = (mgolf_state *)space->machine->driver_data; + state->video_ram[offset] = data; + tilemap_mark_tile_dirty(state->bg_tilemap, offset); } static VIDEO_START( mgolf ) { - bg_tilemap = tilemap_create(machine, get_tile_info, tilemap_scan_rows, 8, 8, 32, 32); + mgolf_state *state = (mgolf_state *)machine->driver_data; + state->bg_tilemap = tilemap_create(machine, get_tile_info, tilemap_scan_rows, 8, 8, 32, 32); } static VIDEO_UPDATE( mgolf ) { + mgolf_state *state = (mgolf_state *)screen->machine->driver_data; int i; /* draw playfield */ - - tilemap_draw(bitmap, cliprect, bg_tilemap, 0, 0); + tilemap_draw(bitmap, cliprect, state->bg_tilemap, 0, 0); /* draw sprites */ - for (i = 0; i < 2; i++) { drawgfx_transpen(bitmap, cliprect, screen->machine->gfx[1], - mgolf_video_ram[0x399 + 4 * i], + state->video_ram[0x399 + 4 * i], i, 0, 0, - mgolf_video_ram[0x390 + 2 * i] - 7, - mgolf_video_ram[0x398 + 4 * i] - 16, 0); + state->video_ram[0x390 + 2 * i] - 7, + state->video_ram[0x398 + 4 * i] - 16, 0); drawgfx_transpen(bitmap, cliprect, screen->machine->gfx[1], - mgolf_video_ram[0x39b + 4 * i], + state->video_ram[0x39b + 4 * i], i, 0, 0, - mgolf_video_ram[0x390 + 2 * i] - 15, - mgolf_video_ram[0x39a + 4 * i] - 16, 0); + state->video_ram[0x390 + 2 * i] - 15, + state->video_ram[0x39a + 4 * i] - 16, 0); } return 0; } -static void update_plunger(running_machine *machine) +static void update_plunger( running_machine *machine ) { + mgolf_state *state = (mgolf_state *)machine->driver_data; UINT8 val = input_port_read(machine, "BUTTON"); - if (prev != val) + if (state->prev != val) { if (val == 0) { - time_released = timer_get_time(machine); + state->time_released = timer_get_time(machine); - if (!mask) - cputag_set_input_line(machine, "maincpu", INPUT_LINE_NMI, PULSE_LINE); + if (!state->mask) + cpu_set_input_line(state->maincpu, INPUT_LINE_NMI, PULSE_LINE); } else - time_pushed = timer_get_time(machine); + state->time_pushed = timer_get_time(machine); - prev = val; + state->prev = val; } } static TIMER_CALLBACK( interrupt_callback ) { + mgolf_state *state = (mgolf_state *)machine->driver_data; int scanline = param; update_plunger(machine); - generic_pulse_irq_line(devtag_get_device(machine, "maincpu"), 0); + generic_pulse_irq_line(state->maincpu, 0); scanline = scanline + 32; @@ -109,28 +122,15 @@ static TIMER_CALLBACK( interrupt_callback ) static double calc_plunger_pos(running_machine *machine) { - return (attotime_to_double(timer_get_time(machine)) - attotime_to_double(time_released)) * (attotime_to_double(time_released) - attotime_to_double(time_pushed) + 0.2); -} - - -static MACHINE_RESET( mgolf ) -{ - timer_set(machine, video_screen_get_time_until_pos(machine->primary_screen, 16, 0), NULL, 16, interrupt_callback); -} - - -static PALETTE_INIT( mgolf ) -{ - palette_set_color(machine, 0, MAKE_RGB(0x80, 0x80, 0x80)); - palette_set_color(machine, 1, MAKE_RGB(0x00, 0x00, 0x00)); - palette_set_color(machine, 2, MAKE_RGB(0x80, 0x80, 0x80)); - palette_set_color(machine, 3, MAKE_RGB(0xff, 0xff, 0xff)); + mgolf_state *state = (mgolf_state *)machine->driver_data; + return (attotime_to_double(timer_get_time(machine)) - attotime_to_double(state->time_released)) * (attotime_to_double(state->time_released) - attotime_to_double(state->time_pushed) + 0.2); } static READ8_HANDLER( mgolf_wram_r ) { - return mgolf_video_ram[0x380 + offset]; + mgolf_state *state = (mgolf_state *)space->machine->driver_data; + return state->video_ram[0x380 + offset]; } @@ -172,7 +172,8 @@ static READ8_HANDLER( mgolf_misc_r ) static WRITE8_HANDLER( mgolf_wram_w ) { - mgolf_video_ram[0x380 + offset] = data; + mgolf_state *state = (mgolf_state *)space->machine->driver_data; + state->video_ram[0x380 + offset] = data; } @@ -201,7 +202,7 @@ static ADDRESS_MAP_START( cpu_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0x006d, 0x006d) AM_WRITENOP AM_RANGE(0x0080, 0x00ff) AM_WRITE(mgolf_wram_w) AM_RANGE(0x0180, 0x01ff) AM_WRITE(mgolf_wram_w) - AM_RANGE(0x0800, 0x0bff) AM_WRITE(mgolf_vram_w) AM_BASE(&mgolf_video_ram) + AM_RANGE(0x0800, 0x0bff) AM_WRITE(mgolf_vram_w) AM_BASE_MEMBER(mgolf_state, video_ram) AM_RANGE(0x2000, 0x3fff) AM_ROM ADDRESS_MAP_END @@ -209,7 +210,7 @@ ADDRESS_MAP_END static INPUT_PORTS_START( mgolf ) - PORT_START("40") /* 40 */ + PORT_START("40") PORT_DIPNAME( 0x30, 0x00, DEF_STR( Language ) ) PORT_DIPSETTING( 0x00, DEF_STR( English ) ) PORT_DIPSETTING( 0x10, DEF_STR( French ) ) @@ -221,19 +222,19 @@ static INPUT_PORTS_START( mgolf ) PORT_DIPSETTING( 0x80, "35" ) PORT_DIPSETTING( 0xc0, "40" ) - PORT_START("41") /* 41 */ + PORT_START("41") PORT_BIT ( 0x01, IP_ACTIVE_HIGH, IPT_SPECIAL ) /* DIAL A */ PORT_BIT ( 0x02, IP_ACTIVE_HIGH, IPT_SPECIAL ) /* DIAL B */ PORT_BIT ( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_BIT ( 0x08, IP_ACTIVE_HIGH, IPT_VBLANK ) - PORT_START("60") /* 60 */ + PORT_START("60") PORT_SERVICE( 0x10, IP_ACTIVE_LOW ) PORT_BIT ( 0x20, IP_ACTIVE_LOW, IPT_TILT ) PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_COIN1 ) PORT_IMPULSE(1) PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_COIN2 ) PORT_IMPULSE(1) - PORT_START("61") /* 61 */ + PORT_START("61") PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("Course Select") PORT_CODE(KEYCODE_SPACE) PORT_BIT ( 0x20, IP_ACTIVE_LOW, IPT_SPECIAL ) /* PLUNGER 1 */ PORT_BIT ( 0x40, IP_ACTIVE_LOW, IPT_SPECIAL ) /* PLUNGER 2 */ @@ -248,6 +249,14 @@ static INPUT_PORTS_START( mgolf ) INPUT_PORTS_END +static PALETTE_INIT( mgolf ) +{ + palette_set_color(machine, 0, MAKE_RGB(0x80, 0x80, 0x80)); + palette_set_color(machine, 1, MAKE_RGB(0x00, 0x00, 0x00)); + palette_set_color(machine, 2, MAKE_RGB(0x80, 0x80, 0x80)); + palette_set_color(machine, 3, MAKE_RGB(0xff, 0xff, 0xff)); +} + static const gfx_layout tile_layout = { 8, 8, @@ -287,12 +296,36 @@ static GFXDECODE_START( mgolf ) GFXDECODE_END +static MACHINE_START( mgolf ) +{ + mgolf_state *state = (mgolf_state *)machine->driver_data; + + state->maincpu = devtag_get_device(machine, "maincpu"); + + state_save_register_global(machine, state->prev); + state_save_register_global(machine, state->mask); +} + +static MACHINE_RESET( mgolf ) +{ + mgolf_state *state = (mgolf_state *)machine->driver_data; + timer_set(machine, video_screen_get_time_until_pos(machine->primary_screen, 16, 0), NULL, 16, interrupt_callback); + + state->mask = 0; + state->prev = 0; +} + + static MACHINE_DRIVER_START( mgolf ) + /* driver data */ + MDRV_DRIVER_DATA(mgolf_state) + /* basic machine hardware */ MDRV_CPU_ADD("maincpu", M6502, 12096000 / 16) /* ? */ MDRV_CPU_PROGRAM_MAP(cpu_map) + MDRV_MACHINE_START(mgolf) MDRV_MACHINE_RESET(mgolf) /* video hardware */ diff --git a/src/mame/drivers/minivadr.c b/src/mame/drivers/minivadr.c index c6fb8cdc88d..f0afe90e63b 100644 --- a/src/mame/drivers/minivadr.c +++ b/src/mame/drivers/minivadr.c @@ -14,6 +14,13 @@ Japan). It has no sound. #include "cpu/z80/z80.h" +typedef struct _minivadr_state minivadr_state; +struct _minivadr_state +{ + /* memory pointers */ + UINT8 * videoram; + size_t videoram_size; +}; /************************************* * @@ -23,15 +30,16 @@ Japan). It has no sound. static VIDEO_UPDATE( minivadr ) { + minivadr_state *state = (minivadr_state *)screen->machine->driver_data; offs_t offs; - for (offs = 0; offs < screen->machine->generic.videoram_size; offs++) + for (offs = 0; offs < state->videoram_size; offs++) { int i; UINT8 x = offs << 3; int y = offs >> 5; - UINT8 data = screen->machine->generic.videoram.u8[offs]; + UINT8 data = state->videoram[offs]; for (i = 0; i < 8; i++) { @@ -49,7 +57,7 @@ static VIDEO_UPDATE( minivadr ) static ADDRESS_MAP_START( minivadr_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0x0000, 0x1fff) AM_ROM - AM_RANGE(0xa000, 0xbfff) AM_RAM AM_BASE_GENERIC(videoram) AM_SIZE_GENERIC(videoram) + AM_RANGE(0xa000, 0xbfff) AM_RAM AM_BASE_SIZE_MEMBER(minivadr_state, videoram, videoram_size) AM_RANGE(0xe008, 0xe008) AM_READ_PORT("INPUTS") AM_WRITENOP // W - ??? ADDRESS_MAP_END @@ -69,6 +77,9 @@ INPUT_PORTS_END static MACHINE_DRIVER_START( minivadr ) + /* driver data */ + MDRV_DRIVER_DATA(minivadr_state) + /* basic machine hardware */ MDRV_CPU_ADD("maincpu", Z80,24000000 / 6) /* 4 MHz ? */ MDRV_CPU_PROGRAM_MAP(minivadr_map) @@ -100,4 +111,4 @@ ROM_START( minivadr ) ROM_END -GAME( 1990, minivadr, 0, minivadr, minivadr, 0, ROT0, "Taito Corporation", "Minivader", GAME_SUPPORTS_SAVE | GAME_NO_SOUND_HW) +GAME( 1990, minivadr, 0, minivadr, minivadr, 0, ROT0, "Taito Corporation", "Minivader", GAME_SUPPORTS_SAVE | GAME_NO_SOUND_HW ) diff --git a/src/mame/drivers/mosaic.c b/src/mame/drivers/mosaic.c index d7639922e73..f686ba86468 100644 --- a/src/mame/drivers/mosaic.c +++ b/src/mame/drivers/mosaic.c @@ -1,34 +1,25 @@ /*************************************************************************** -Mosaic (c) 1990 Space + Mosaic (c) 1990 Space -Notes: -- the ROM OK / RAM OK message in service mode is fake: ROM and RAM are not tested. + Notes: + - the ROM OK / RAM OK message in service mode is fake: ROM and RAM are not tested. ***************************************************************************/ #include "emu.h" #include "cpu/z180/z180.h" #include "sound/2203intf.h" - - -extern UINT8 *mosaic_fgvideoram; -extern UINT8 *mosaic_bgvideoram; -WRITE8_HANDLER( mosaic_fgvideoram_w ); -WRITE8_HANDLER( mosaic_bgvideoram_w ); -VIDEO_START( mosaic ); -VIDEO_UPDATE( mosaic ); - - - -static int prot_val; +#include "includes/mosaic.h" static WRITE8_HANDLER( protection_w ) { - if ((data & 0x80) == 0) + mosaic_state *state = (mosaic_state *)space->machine->driver_data; + + if (!BIT(data, 7)) { /* simply increment given value */ - prot_val = (data + 1) << 8; + state->prot_val = (data + 1) << 8; } else { @@ -43,24 +34,27 @@ static WRITE8_HANDLER( protection_w ) 0x411f, 0x473f }; - prot_val = jumptable[data & 0x7f]; + state->prot_val = jumptable[data & 0x7f]; } } static READ8_HANDLER( protection_r ) { - int res = (prot_val >> 8) & 0xff; + mosaic_state *state = (mosaic_state *)space->machine->driver_data; + int res = (state->prot_val >> 8) & 0xff; - logerror("%06x: protection_r %02x\n",cpu_get_pc(space->cpu),res); + logerror("%06x: protection_r %02x\n", cpu_get_pc(space->cpu), res); - prot_val <<= 8; + state->prot_val <<= 8; return res; } static WRITE8_HANDLER( gfire2_protection_w ) { - logerror("%06x: protection_w %02x\n",cpu_get_pc(space->cpu),data); + mosaic_state *state = (mosaic_state *)space->machine->driver_data; + + logerror("%06x: protection_w %02x\n", cpu_get_pc(space->cpu), data); switch(data) { @@ -68,28 +62,29 @@ static WRITE8_HANDLER( gfire2_protection_w ) /* written repeatedly; no effect?? */ break; case 0x02: - prot_val = 0x0a10; + state->prot_val = 0x0a10; break; case 0x04: - prot_val = 0x0a15; + state->prot_val = 0x0a15; break; case 0x06: - prot_val = 0x80e3; + state->prot_val = 0x80e3; break; case 0x08: - prot_val = 0x0965; + state->prot_val = 0x0965; break; case 0x0a: - prot_val = 0x04b4; + state->prot_val = 0x04b4; break; } } static READ8_HANDLER( gfire2_protection_r ) { - int res = prot_val & 0xff; + mosaic_state *state = (mosaic_state *)space->machine->driver_data; + int res = state->prot_val & 0xff; - prot_val >>= 8; + state->prot_val >>= 8; return res; } @@ -99,16 +94,16 @@ static READ8_HANDLER( gfire2_protection_r ) static ADDRESS_MAP_START( mosaic_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0x00000, 0x0ffff) AM_ROM AM_RANGE(0x20000, 0x21fff) AM_RAM - AM_RANGE(0x22000, 0x22fff) AM_RAM_WRITE(mosaic_bgvideoram_w) AM_BASE(&mosaic_bgvideoram) - AM_RANGE(0x23000, 0x23fff) AM_RAM_WRITE(mosaic_fgvideoram_w) AM_BASE(&mosaic_fgvideoram) + AM_RANGE(0x22000, 0x22fff) AM_RAM_WRITE(mosaic_bgvideoram_w) AM_BASE_MEMBER(mosaic_state, bgvideoram) + AM_RANGE(0x23000, 0x23fff) AM_RAM_WRITE(mosaic_fgvideoram_w) AM_BASE_MEMBER(mosaic_state, fgvideoram) AM_RANGE(0x24000, 0x241ff) AM_RAM_WRITE(paletteram_xRRRRRGGGGGBBBBB_le_w) AM_BASE_GENERIC(paletteram) ADDRESS_MAP_END static ADDRESS_MAP_START( gfire2_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0x00000, 0x0ffff) AM_ROM AM_RANGE(0x10000, 0x17fff) AM_RAM - AM_RANGE(0x22000, 0x22fff) AM_RAM_WRITE(mosaic_bgvideoram_w) AM_BASE(&mosaic_bgvideoram) - AM_RANGE(0x23000, 0x23fff) AM_RAM_WRITE(mosaic_fgvideoram_w) AM_BASE(&mosaic_fgvideoram) + AM_RANGE(0x22000, 0x22fff) AM_RAM_WRITE(mosaic_bgvideoram_w) AM_BASE_MEMBER(mosaic_state, bgvideoram) + AM_RANGE(0x23000, 0x23fff) AM_RAM_WRITE(mosaic_fgvideoram_w) AM_BASE_MEMBER(mosaic_state, fgvideoram) AM_RANGE(0x24000, 0x241ff) AM_RAM_WRITE(paletteram_xRRRRRGGGGGBBBBB_le_w) AM_BASE_GENERIC(paletteram) ADDRESS_MAP_END @@ -258,12 +253,34 @@ static const ym2203_interface ym2203_config = +static MACHINE_START( mosaic ) +{ + mosaic_state *state = (mosaic_state *)machine->driver_data; + + state_save_register_global(machine, state->prot_val); +} + +static MACHINE_RESET( mosaic ) +{ + mosaic_state *state = (mosaic_state *)machine->driver_data; + + state->prot_val = 0; +} + static MACHINE_DRIVER_START( mosaic ) + + /* driver data */ + MDRV_DRIVER_DATA(mosaic_state) + + /* basic machine hardware */ MDRV_CPU_ADD("maincpu", Z180, 7000000) /* ??? */ MDRV_CPU_PROGRAM_MAP(mosaic_map) MDRV_CPU_IO_MAP(mosaic_io_map) MDRV_CPU_VBLANK_INT("screen", irq0_line_hold) + MDRV_MACHINE_START(mosaic) + MDRV_MACHINE_RESET(mosaic) + /* video hardware */ MDRV_SCREEN_ADD("screen", RASTER) MDRV_SCREEN_REFRESH_RATE(60) diff --git a/src/mame/drivers/mouser.c b/src/mame/drivers/mouser.c index 64e4473acc8..683145b9795 100644 --- a/src/mame/drivers/mouser.c +++ b/src/mame/drivers/mouser.c @@ -16,30 +16,21 @@ #include "cpu/z80/z80.h" #include "deprecat.h" #include "sound/ay8910.h" - -static UINT8 mouser_sound_byte; -static UINT8 mouser_nmi_enable; - -/* From "video/mouser.c" */ -extern UINT8 *mouser_videoram; -extern UINT8 *mouser_colorram; - -PALETTE_INIT( mouser ); -WRITE8_HANDLER( mouser_flip_screen_x_w ); -WRITE8_HANDLER( mouser_flip_screen_y_w ); -VIDEO_UPDATE( mouser ); +#include "includes/mouser.h" /* Mouser has external masking circuitry around * the NMI input on the main CPU */ - static WRITE8_HANDLER( mouser_nmi_enable_w ) { - mouser_nmi_enable = data; + mouser_state *state = (mouser_state *)space->machine->driver_data; + state->nmi_enable = data; } static INTERRUPT_GEN( mouser_nmi_interrupt ) { - if ((mouser_nmi_enable & 1) == 1) + mouser_state *state = (mouser_state *)device->machine->driver_data; + + if (BIT(state->nmi_enable, 0)) nmi_line_pulse(device); } @@ -47,22 +38,24 @@ static INTERRUPT_GEN( mouser_nmi_interrupt ) static WRITE8_HANDLER( mouser_sound_interrupt_w ) { - mouser_sound_byte = data; - cputag_set_input_line(space->machine, "audiocpu", 0, HOLD_LINE); + mouser_state *state = (mouser_state *)space->machine->driver_data; + state->sound_byte = data; + cpu_set_input_line(state->audiocpu, 0, HOLD_LINE); } static READ8_HANDLER( mouser_sound_byte_r ) { - return mouser_sound_byte; + mouser_state *state = (mouser_state *)space->machine->driver_data; + return state->sound_byte; } static ADDRESS_MAP_START( mouser_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0x0000, 0x5fff) AM_ROM AM_RANGE(0x6000, 0x6bff) AM_RAM AM_RANGE(0x8800, 0x88ff) AM_WRITENOP /* unknown */ - AM_RANGE(0x9000, 0x93ff) AM_RAM AM_BASE(&mouser_videoram) - AM_RANGE(0x9800, 0x9cff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram) - AM_RANGE(0x9c00, 0x9fff) AM_RAM AM_BASE(&mouser_colorram) + AM_RANGE(0x9000, 0x93ff) AM_RAM AM_BASE_MEMBER(mouser_state, videoram) + AM_RANGE(0x9800, 0x9cff) AM_RAM AM_BASE_SIZE_MEMBER(mouser_state, spriteram, spriteram_size) + AM_RANGE(0x9c00, 0x9fff) AM_RAM AM_BASE_MEMBER(mouser_state, colorram) AM_RANGE(0xa000, 0xa000) AM_READ_PORT("P1") AM_WRITE(mouser_nmi_enable_w) /* bit 0 = NMI Enable */ AM_RANGE(0xa001, 0xa001) AM_WRITE(mouser_flip_screen_x_w) AM_RANGE(0xa002, 0xa002) AM_WRITE(mouser_flip_screen_y_w) @@ -178,8 +171,30 @@ static GFXDECODE_START( mouser ) GFXDECODE_END +static MACHINE_START( mouser ) +{ + mouser_state *state = (mouser_state *)machine->driver_data; + + state->maincpu = devtag_get_device(machine, "maincpu"); + state->audiocpu = devtag_get_device(machine, "audiocpu"); + + state_save_register_global(machine, state->sound_byte); + state_save_register_global(machine, state->nmi_enable); +} + +static MACHINE_RESET( mouser ) +{ + mouser_state *state = (mouser_state *)machine->driver_data; + + state->sound_byte = 0; + state->nmi_enable = 0; +} + static MACHINE_DRIVER_START( mouser ) + /* driver data */ + MDRV_DRIVER_DATA(mouser_state) + /* basic machine hardware */ MDRV_CPU_ADD("maincpu", Z80, 4000000) /* 4 MHz ? */ MDRV_CPU_PROGRAM_MAP(mouser_map) @@ -190,6 +205,9 @@ static MACHINE_DRIVER_START( mouser ) MDRV_CPU_IO_MAP(mouser_sound_io_map) MDRV_CPU_VBLANK_INT_HACK(nmi_line_pulse,4) /* ??? This controls the sound tempo */ + MDRV_MACHINE_START(mouser) + MDRV_MACHINE_RESET(mouser) + /* video hardware */ MDRV_SCREEN_ADD("screen", RASTER) MDRV_SCREEN_REFRESH_RATE(60) @@ -275,12 +293,12 @@ static DRIVER_INIT( mouser ) memory_set_decrypted_region(space, 0x0000, 0x5fff, decrypted); - for (i = 0;i < 0x6000;i++) + for (i = 0; i < 0x6000; i++) { decrypted[i] = table[rom[i]]; } } -GAME( 1983, mouser, 0, mouser, mouser, mouser, ROT90, "UPL", "Mouser", 0 ) -GAME( 1983, mouserc, mouser, mouser, mouser, mouser, ROT90, "[UPL] (Cosmos license)", "Mouser (Cosmos)", 0 ) +GAME( 1983, mouser, 0, mouser, mouser, mouser, ROT90, "UPL", "Mouser", GAME_SUPPORTS_SAVE ) +GAME( 1983, mouserc, mouser, mouser, mouser, mouser, ROT90, "[UPL] (Cosmos license)", "Mouser (Cosmos)", GAME_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/mrdo.c b/src/mame/drivers/mrdo.c index c1e5e167043..472bce69630 100644 --- a/src/mame/drivers/mrdo.c +++ b/src/mame/drivers/mrdo.c @@ -22,38 +22,29 @@ There's a chance that certain bootlegs might have the different 8/20 MHz XTALS. #include "emu.h" #include "cpu/z80/z80.h" #include "sound/sn76496.h" +#include "includes/mrdo.h" + #define MAIN_CLOCK XTAL_8_2MHz #define VIDEO_CLOCK XTAL_19_6MHz -extern UINT8 *mrdo_bgvideoram,*mrdo_fgvideoram; -WRITE8_HANDLER( mrdo_bgvideoram_w ); -WRITE8_HANDLER( mrdo_fgvideoram_w ); -WRITE8_HANDLER( mrdo_scrollx_w ); -WRITE8_HANDLER( mrdo_scrolly_w ); -WRITE8_HANDLER( mrdo_flipscreen_w ); -PALETTE_INIT( mrdo ); -VIDEO_START( mrdo ); -VIDEO_UPDATE( mrdo ); - - /* this looks like some kind of protection. The game doesn't clear the screen */ /* if a read from this address doesn't return the value it expects. */ static READ8_HANDLER( mrdo_SECRE_r ) { UINT8 *RAM = memory_region(space->machine, "maincpu"); - return RAM[ cpu_get_reg(space->cpu, Z80_HL) ]; + return RAM[cpu_get_reg(space->cpu, Z80_HL)]; } static ADDRESS_MAP_START( main_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0x0000, 0x7fff) AM_ROM - AM_RANGE(0x8000, 0x87ff) AM_RAM_WRITE(mrdo_bgvideoram_w) AM_BASE(&mrdo_bgvideoram) - AM_RANGE(0x8800, 0x8fff) AM_RAM_WRITE(mrdo_fgvideoram_w) AM_BASE(&mrdo_fgvideoram) - AM_RANGE(0x9000, 0x90ff) AM_WRITEONLY AM_BASE_SIZE_GENERIC(spriteram) + AM_RANGE(0x8000, 0x87ff) AM_RAM_WRITE(mrdo_bgvideoram_w) AM_BASE_MEMBER(mrdo_state, bgvideoram) + AM_RANGE(0x8800, 0x8fff) AM_RAM_WRITE(mrdo_fgvideoram_w) AM_BASE_MEMBER(mrdo_state, fgvideoram) + AM_RANGE(0x9000, 0x90ff) AM_WRITEONLY AM_BASE_SIZE_MEMBER(mrdo_state, spriteram, spriteram_size) AM_RANGE(0x9800, 0x9800) AM_WRITE(mrdo_flipscreen_w) /* screen flip + playfield priority */ AM_RANGE(0x9801, 0x9801) AM_DEVWRITE("sn1", sn76496_w) AM_RANGE(0x9802, 0x9802) AM_DEVWRITE("sn2", sn76496_w) @@ -176,6 +167,9 @@ GFXDECODE_END static MACHINE_DRIVER_START( mrdo ) + /* driver data */ + MDRV_DRIVER_DATA(mrdo_state) + /* basic machine hardware */ MDRV_CPU_ADD("maincpu", Z80, MAIN_CLOCK/2) /* Verified */ MDRV_CPU_PROGRAM_MAP(main_map) diff --git a/src/mame/drivers/mrflea.c b/src/mame/drivers/mrflea.c index ea4dcac3d0c..14023690eba 100644 --- a/src/mame/drivers/mrflea.c +++ b/src/mame/drivers/mrflea.c @@ -43,19 +43,231 @@ Video Board #include "deprecat.h" #include "cpu/z80/z80.h" #include "sound/ay8910.h" +#include "includes/mrflea.h" -static int mrflea_io; -static int mrflea_main; -static int mrflea_status; +/************************************* + * + * Memory handlers + * + *************************************/ -static int mrflea_select1; +static WRITE8_HANDLER( mrflea_main_w ) +{ + mrflea_state *state = (mrflea_state *)space->machine->driver_data; + state->status |= 0x01; // pending command to main CPU + state->main = data; +} -extern WRITE8_HANDLER( mrflea_gfx_bank_w ); -extern WRITE8_HANDLER( mrflea_videoram_w ); -extern WRITE8_HANDLER( mrflea_spriteram_w ); -extern VIDEO_START( mrflea ); -extern VIDEO_UPDATE( mrflea ); +static WRITE8_HANDLER( mrflea_io_w ) +{ + mrflea_state *state = (mrflea_state *)space->machine->driver_data; + state->status |= 0x08; // pending command to IO CPU + state->io = data; + cpu_set_input_line(state->subcpu, 0, HOLD_LINE ); +} + +static READ8_HANDLER( mrflea_main_r ) +{ + mrflea_state *state = (mrflea_state *)space->machine->driver_data; + state->status &= ~0x01; // main CPU command read + return state->main; +} + +static READ8_HANDLER( mrflea_io_r ) +{ + mrflea_state *state = (mrflea_state *)space->machine->driver_data; + state->status &= ~0x08; // IO CPU command read + return state->io; +} + +static READ8_HANDLER( mrflea_main_status_r ) +{ + mrflea_state *state = (mrflea_state *)space->machine->driver_data; + + /* 0x01: main CPU command pending + 0x08: io cpu ready */ + return state->status ^ 0x08; +} + +static READ8_HANDLER( mrflea_io_status_r ) +{ + mrflea_state *state = (mrflea_state *)space->machine->driver_data; + + /* 0x08: IO CPU command pending + 0x01: main cpu ready */ + return state->status ^ 0x01; +} + +static INTERRUPT_GEN( mrflea_slave_interrupt ) +{ + mrflea_state *state = (mrflea_state *)device->machine->driver_data; + if (cpu_getiloops(device) == 0 || (state->status & 0x08)) + cpu_set_input_line(device, 0, HOLD_LINE); +} + +static READ8_HANDLER( mrflea_interrupt_type_r ) +{ +/* there are two interrupt types: + 1. triggered (in response to sound command) + 2. heartbeat (for music timing) +*/ + mrflea_state *state = (mrflea_state *)space->machine->driver_data; + + if (state->status & 0x08 ) + return 0x00; /* process command */ + + return 0x01; /* music/sound update? */ +} + +static WRITE8_HANDLER( mrflea_select1_w ) +{ + mrflea_state *state = (mrflea_state *)space->machine->driver_data; + state->select1 = data; +} + +static READ8_HANDLER( mrflea_input1_r ) +{ + return 0x00; +} + +static WRITE8_HANDLER( mrflea_data1_w ) +{ +} + +/************************************* + * + * Address maps + * + *************************************/ + +static ADDRESS_MAP_START( mrflea_master_map, ADDRESS_SPACE_PROGRAM, 8 ) + AM_RANGE(0x0000, 0xbfff) AM_ROM + AM_RANGE(0xc000, 0xcfff) AM_RAM + AM_RANGE(0xe000, 0xe7ff) AM_RAM_WRITE(mrflea_videoram_w) AM_BASE_MEMBER(mrflea_state, videoram) + AM_RANGE(0xe800, 0xe83f) AM_RAM_WRITE(paletteram_xxxxRRRRGGGGBBBB_le_w) AM_BASE_GENERIC(paletteram) + AM_RANGE(0xec00, 0xecff) AM_RAM_WRITE(mrflea_spriteram_w) AM_BASE_MEMBER(mrflea_state, spriteram) +ADDRESS_MAP_END + +static ADDRESS_MAP_START( mrflea_master_io_map, ADDRESS_SPACE_IO, 8 ) + ADDRESS_MAP_GLOBAL_MASK(0xff) + AM_RANGE(0x00, 0x00) AM_WRITENOP /* watchdog? */ + AM_RANGE(0x40, 0x40) AM_WRITE(mrflea_io_w) + AM_RANGE(0x41, 0x41) AM_READ(mrflea_main_r) + AM_RANGE(0x42, 0x42) AM_READ(mrflea_main_status_r) + AM_RANGE(0x43, 0x43) AM_WRITENOP /* 0xa6,0x0d,0x05 */ + AM_RANGE(0x60, 0x60) AM_WRITE(mrflea_gfx_bank_w) +ADDRESS_MAP_END + + +static ADDRESS_MAP_START( mrflea_slave_map, ADDRESS_SPACE_PROGRAM, 8 ) + AM_RANGE(0x0000, 0x0fff) AM_ROM + AM_RANGE(0x2000, 0x3fff) AM_ROM + AM_RANGE(0x8000, 0x80ff) AM_RAM + AM_RANGE(0x9000, 0x905a) AM_RAM /* ? */ +ADDRESS_MAP_END + +static ADDRESS_MAP_START( mrflea_slave_io_map, ADDRESS_SPACE_IO, 8 ) + ADDRESS_MAP_GLOBAL_MASK(0xff) + AM_RANGE(0x00, 0x00) AM_WRITENOP /* watchdog */ + AM_RANGE(0x10, 0x10) AM_READ(mrflea_interrupt_type_r) AM_WRITENOP /* ? / irq ACK */ + AM_RANGE(0x11, 0x11) AM_WRITENOP /* 0x83,0x00,0xfc */ + AM_RANGE(0x20, 0x20) AM_READ(mrflea_io_r) + AM_RANGE(0x21, 0x21) AM_WRITE(mrflea_main_w) + AM_RANGE(0x22, 0x22) AM_READ(mrflea_io_status_r) + AM_RANGE(0x23, 0x23) AM_WRITENOP /* 0xb4,0x09,0x05 */ + AM_RANGE(0x40, 0x40) AM_DEVREAD("ay1", ay8910_r) + AM_RANGE(0x40, 0x41) AM_DEVWRITE("ay1", ay8910_data_address_w) + AM_RANGE(0x42, 0x42) AM_READWRITE(mrflea_input1_r, mrflea_data1_w) + AM_RANGE(0x43, 0x43) AM_WRITE(mrflea_select1_w) + AM_RANGE(0x44, 0x44) AM_DEVREAD("ay2", ay8910_r) + AM_RANGE(0x44, 0x45) AM_DEVWRITE("ay2", ay8910_data_address_w) + AM_RANGE(0x46, 0x46) AM_DEVREAD("ay3", ay8910_r) + AM_RANGE(0x46, 0x47) AM_DEVWRITE("ay3", ay8910_data_address_w) +ADDRESS_MAP_END + +/************************************* + * + * Input ports + * + *************************************/ + +static INPUT_PORTS_START( mrflea ) + PORT_START("IN0") + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_4WAY + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_4WAY + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START2 ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 ) + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START("IN1") + PORT_BIT( 0x03, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN1 ) + PORT_BIT( 0xf8, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START("DSW1") +/* + ------xx + -----x-- + ----x--- +*/ + PORT_DIPNAME( 0x03, 0x03, "Bonus?" ) + PORT_DIPSETTING( 0x03, "A" ) + PORT_DIPSETTING( 0x02, "B" ) + PORT_DIPSETTING( 0x01, "C" ) + PORT_DIPSETTING( 0x00, "D" ) + PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unused ) ) + PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unused ) ) + PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unused ) ) + PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unused ) ) + PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + + PORT_START("DSW2") + PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coinage ) ) + PORT_DIPSETTING( 0x02, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x03, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x00, DEF_STR( 2C_3C ) ) + PORT_DIPSETTING( 0x01, DEF_STR( 1C_2C ) ) + PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Lives ) ) + PORT_DIPSETTING( 0x0c, "3" ) + PORT_DIPSETTING( 0x08, "4" ) + PORT_DIPSETTING( 0x04, "5" ) + PORT_DIPSETTING( 0x00, "7" ) + PORT_DIPNAME( 0x30, 0x30, DEF_STR( Difficulty ) ) + PORT_DIPSETTING( 0x30, DEF_STR( Easy ) ) + PORT_DIPSETTING( 0x20, DEF_STR( Medium ) ) + PORT_DIPSETTING( 0x10, DEF_STR( Hard ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) ) + PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unused ) ) + PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unused ) ) + PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) +INPUT_PORTS_END + + +/************************************* + * + * Graphics definitions + * + *************************************/ static const gfx_layout tile_layout = { 8,8, @@ -85,128 +297,11 @@ static GFXDECODE_START( mrflea ) GFXDECODE_ENTRY( "gfx2", 0, tile_layout, 0x00, 1 ) GFXDECODE_END -/*******************************************************/ - -static WRITE8_HANDLER( mrflea_main_w ) -{ - mrflea_status |= 0x01; // pending command to main CPU - mrflea_main = data; -} - -static WRITE8_HANDLER( mrflea_io_w ) -{ - mrflea_status |= 0x08; // pending command to IO CPU - mrflea_io = data; - cputag_set_input_line(space->machine, "sub", 0, HOLD_LINE ); -} - -static READ8_HANDLER( mrflea_main_r ) -{ - mrflea_status &= ~0x01; // main CPU command read - return mrflea_main; -} - -static READ8_HANDLER( mrflea_io_r ) -{ - mrflea_status &= ~0x08; // IO CPU command read - return mrflea_io; -} - -/*******************************************************/ - -static READ8_HANDLER( mrflea_main_status_r ) -{ - /* 0x01: main CPU command pending - 0x08: io cpu ready */ - return mrflea_status^0x08; -} - -static READ8_HANDLER( mrflea_io_status_r ) -{ - /* 0x08: IO CPU command pending - 0x01: main cpu ready */ - return mrflea_status^0x01; -} - -static INTERRUPT_GEN( mrflea_slave_interrupt ) -{ - if( cpu_getiloops(device)==0 || (mrflea_status&0x08) ) - cpu_set_input_line(device, 0, HOLD_LINE); -} - -static READ8_HANDLER( mrflea_interrupt_type_r ) -{ -/* there are two interrupt types: - 1. triggered (in response to sound command) - 2. heartbeat (for music timing) -*/ - if( mrflea_status&0x08 ) return 0x00; /* process command */ - return 0x01; /* music/sound update? */ -} - -/*******************************************************/ - -static ADDRESS_MAP_START( mrflea_master_map, ADDRESS_SPACE_PROGRAM, 8 ) - AM_RANGE(0x0000, 0xbfff) AM_ROM - AM_RANGE(0xc000, 0xcfff) AM_RAM - AM_RANGE(0xe000, 0xe7ff) AM_RAM_WRITE(mrflea_videoram_w) AM_BASE_GENERIC(videoram) - AM_RANGE(0xe800, 0xe83f) AM_RAM_WRITE(paletteram_xxxxRRRRGGGGBBBB_le_w) AM_BASE_GENERIC(paletteram) - AM_RANGE(0xec00, 0xecff) AM_RAM_WRITE(mrflea_spriteram_w) AM_BASE_GENERIC(spriteram) -ADDRESS_MAP_END - -static ADDRESS_MAP_START( mrflea_master_io_map, ADDRESS_SPACE_IO, 8 ) - ADDRESS_MAP_GLOBAL_MASK(0xff) - AM_RANGE(0x00, 0x00) AM_WRITENOP /* watchdog? */ - AM_RANGE(0x40, 0x40) AM_WRITE(mrflea_io_w) - AM_RANGE(0x41, 0x41) AM_READ(mrflea_main_r) - AM_RANGE(0x42, 0x42) AM_READ(mrflea_main_status_r) - AM_RANGE(0x43, 0x43) AM_WRITENOP /* 0xa6,0x0d,0x05 */ - AM_RANGE(0x60, 0x60) AM_WRITE(mrflea_gfx_bank_w) -ADDRESS_MAP_END - -/*******************************************************/ - -static WRITE8_HANDLER( mrflea_select1_w ) -{ - mrflea_select1 = data; -} - -static READ8_HANDLER( mrflea_input1_r ) -{ - return 0x00; -} - -static WRITE8_HANDLER( mrflea_data1_w ) -{ -} - -static ADDRESS_MAP_START( mrflea_slave_map, ADDRESS_SPACE_PROGRAM, 8 ) - AM_RANGE(0x0000, 0x0fff) AM_ROM - AM_RANGE(0x2000, 0x3fff) AM_ROM - AM_RANGE(0x8000, 0x80ff) AM_RAM - AM_RANGE(0x9000, 0x905a) AM_RAM /* ? */ -ADDRESS_MAP_END - -static ADDRESS_MAP_START( mrflea_slave_io_map, ADDRESS_SPACE_IO, 8 ) - ADDRESS_MAP_GLOBAL_MASK(0xff) - AM_RANGE(0x00, 0x00) AM_WRITENOP /* watchdog */ - AM_RANGE(0x10, 0x10) AM_READ(mrflea_interrupt_type_r) AM_WRITENOP /* ? / irq ACK */ - AM_RANGE(0x11, 0x11) AM_WRITENOP /* 0x83,0x00,0xfc */ - AM_RANGE(0x20, 0x20) AM_READ(mrflea_io_r) - AM_RANGE(0x21, 0x21) AM_WRITE(mrflea_main_w) - AM_RANGE(0x22, 0x22) AM_READ(mrflea_io_status_r) - AM_RANGE(0x23, 0x23) AM_WRITENOP /* 0xb4,0x09,0x05 */ - AM_RANGE(0x40, 0x40) AM_DEVREAD("ay1", ay8910_r) - AM_RANGE(0x40, 0x41) AM_DEVWRITE("ay1", ay8910_data_address_w) - AM_RANGE(0x42, 0x42) AM_READWRITE(mrflea_input1_r, mrflea_data1_w) - AM_RANGE(0x43, 0x43) AM_WRITE(mrflea_select1_w) - AM_RANGE(0x44, 0x44) AM_DEVREAD("ay2", ay8910_r) - AM_RANGE(0x44, 0x45) AM_DEVWRITE("ay2", ay8910_data_address_w) - AM_RANGE(0x46, 0x46) AM_DEVREAD("ay3", ay8910_r) - AM_RANGE(0x46, 0x47) AM_DEVWRITE("ay3", ay8910_data_address_w) -ADDRESS_MAP_END - -/*******************************************************/ +/************************************* + * + * Sound interfaces + * + *************************************/ static const ay8910_interface mrflea_ay8910_interface_0 = { @@ -224,8 +319,42 @@ static const ay8910_interface mrflea_ay8910_interface_1 = DEVCB_INPUT_PORT("DSW1") }; +/************************************* + * + * Machine driver + * + *************************************/ + +static MACHINE_START( mrflea ) +{ + mrflea_state *state = (mrflea_state *)machine->driver_data; + + state->maincpu = devtag_get_device(machine, "maincpu"); + state->subcpu = devtag_get_device(machine, "sub"); + + state_save_register_global(machine, state->gfx_bank); + state_save_register_global(machine, state->io); + state_save_register_global(machine, state->main); + state_save_register_global(machine, state->status); + state_save_register_global(machine, state->select1); +} + +static MACHINE_RESET( mrflea ) +{ + mrflea_state *state = (mrflea_state *)machine->driver_data; + + state->gfx_bank = 0; + state->io = 0; + state->main = 0; + state->status = 0; + state->select1 = 0; +} + static MACHINE_DRIVER_START( mrflea ) + /* driver data */ + MDRV_DRIVER_DATA(mrflea_state) + /* basic machine hardware */ MDRV_CPU_ADD("maincpu", Z80, 4000000) /* 4 MHz? */ MDRV_CPU_PROGRAM_MAP(mrflea_master_map) @@ -239,6 +368,9 @@ static MACHINE_DRIVER_START( mrflea ) MDRV_QUANTUM_TIME(HZ(6000)) + MDRV_MACHINE_START(mrflea) + MDRV_MACHINE_RESET(mrflea) + /* video hardware */ MDRV_SCREEN_ADD("screen", RASTER) MDRV_SCREEN_REFRESH_RATE(60) @@ -250,7 +382,6 @@ static MACHINE_DRIVER_START( mrflea ) MDRV_GFXDECODE(mrflea) MDRV_PALETTE_LENGTH(32) - MDRV_VIDEO_START(mrflea) MDRV_VIDEO_UPDATE(mrflea) /* sound hardware */ @@ -268,6 +399,12 @@ static MACHINE_DRIVER_START( mrflea ) MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) MACHINE_DRIVER_END +/************************************* + * + * ROM definition(s) + * + *************************************/ + ROM_START( mrflea ) ROM_REGION( 0x10000, "maincpu", 0 ) /* Z80 code; main CPU */ ROM_LOAD( "cpu_d1", 0x0000, 0x2000, CRC(d286217c) SHA1(d750d64bb70f735a38b737881abb9a5fbde1c98c) ) @@ -303,76 +440,10 @@ ROM_START( mrflea ) ROM_LOAD( "vd_l4", 0xe000, 0x2000, CRC(423735a5) SHA1(4ee93f93cd2b08560e148525e08880d64c64fcd2) ) ROM_END -static INPUT_PORTS_START( mrflea ) - PORT_START("IN0") - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_4WAY - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_4WAY - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 ) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START2 ) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 ) - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) - - PORT_START("IN1") - PORT_BIT( 0x03, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN1 ) - PORT_BIT( 0xf8, IP_ACTIVE_LOW, IPT_UNKNOWN ) - - PORT_START("DSW1") /* DSW1 */ -/* - ------xx - -----x-- - ----x--- -*/ - PORT_DIPNAME( 0x03, 0x03, "Bonus?" ) - PORT_DIPSETTING( 0x03, "A" ) - PORT_DIPSETTING( 0x02, "B" ) - PORT_DIPSETTING( 0x01, "C" ) - PORT_DIPSETTING( 0x00, "D" ) - PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unused ) ) - PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unused ) ) - PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unused ) ) - PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unused ) ) - PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - - PORT_START("DSW2") /* DSW2 */ - PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coinage ) ) - PORT_DIPSETTING( 0x02, DEF_STR( 2C_1C ) ) - PORT_DIPSETTING( 0x03, DEF_STR( 1C_1C ) ) - PORT_DIPSETTING( 0x00, DEF_STR( 2C_3C ) ) - PORT_DIPSETTING( 0x01, DEF_STR( 1C_2C ) ) - PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Lives ) ) - PORT_DIPSETTING( 0x0c, "3" ) - PORT_DIPSETTING( 0x08, "4" ) - PORT_DIPSETTING( 0x04, "5" ) - PORT_DIPSETTING( 0x00, "7" ) - PORT_DIPNAME( 0x30, 0x30, DEF_STR( Difficulty ) ) - PORT_DIPSETTING( 0x30, DEF_STR( Easy ) ) - PORT_DIPSETTING( 0x20, DEF_STR( Medium ) ) - PORT_DIPSETTING( 0x10, DEF_STR( Hard ) ) - PORT_DIPSETTING( 0x00, DEF_STR( Hardest ) ) - PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unused ) ) - PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unused ) ) - PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) -INPUT_PORTS_END - - -GAME( 1982, mrflea, 0, mrflea, mrflea, 0, ROT270, "Pacific Novelty", "The Amazing Adventures of Mr. F. Lea" , 0 ) +/************************************* + * + * Game driver(s) + * + *************************************/ +GAME( 1982, mrflea, 0, mrflea, mrflea, 0, ROT270, "Pacific Novelty", "The Amazing Adventures of Mr. F. Lea" , GAME_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/mrjong.c b/src/mame/drivers/mrjong.c index e7b8074e1a9..766679fb539 100644 --- a/src/mame/drivers/mrjong.c +++ b/src/mame/drivers/mrjong.c @@ -1,15 +1,16 @@ /*************************************************************************** -Mr.Jong -(c)1983 Kiwako (This game is distributed by Sanritsu.) + Mr. Jong + (c)1983 Kiwako (This game is distributed by Sanritsu.) -Crazy Blocks -(c)1983 Kiwako/ECI + Crazy Blocks + (c)1983 Kiwako/ECI -Driver by Takahiro Nogi (nogi@kt.rim.or.jp) 2000/03/20 - + Driver by Takahiro Nogi (nogi@kt.rim.or.jp) 2000/03/20 - + + Block Buster + (c)1983 Kiwako/ECI -Block Buster -(c)1983 Kiwako/ECI PCB Layout ---------- @@ -45,32 +46,14 @@ ROMs 6A, 7A, 8A, 9A: 2764 #include "emu.h" #include "cpu/z80/z80.h" #include "sound/sn76496.h" +#include "includes/mrjong.h" -extern UINT8 *mrjong_videoram; -extern UINT8 *mrjong_colorram; - -extern WRITE8_HANDLER( mrjong_videoram_w ); -extern WRITE8_HANDLER( mrjong_colorram_w ); -extern WRITE8_HANDLER( mrjong_flipscreen_w ); - -extern PALETTE_INIT( mrjong ); -extern VIDEO_START( mrjong ); -extern VIDEO_UPDATE( mrjong ); - - -static ADDRESS_MAP_START( mrjong_map, ADDRESS_SPACE_PROGRAM, 8 ) - AM_RANGE(0x0000, 0x7fff) AM_ROM - AM_RANGE(0x8000, 0x87ff) AM_RAM - AM_RANGE(0xa000, 0xa7ff) AM_RAM - AM_RANGE(0xe000, 0xe3ff) AM_RAM_WRITE(mrjong_videoram_w) AM_BASE(&mrjong_videoram) - AM_RANGE(0xe400, 0xe7ff) AM_RAM_WRITE(mrjong_colorram_w) AM_BASE(&mrjong_colorram) -ADDRESS_MAP_END - -static WRITE8_HANDLER( io_0x00_w ) -{ - mrjong_flipscreen_w(space, 0, ((data & 0x04) > 2)); -} +/************************************* + * + * Memory handlers + * + *************************************/ static READ8_HANDLER( io_0x03_r ) { @@ -78,14 +61,34 @@ static READ8_HANDLER( io_0x03_r ) } +/************************************* + * + * Address maps + * + *************************************/ + +static ADDRESS_MAP_START( mrjong_map, ADDRESS_SPACE_PROGRAM, 8 ) + AM_RANGE(0x0000, 0x7fff) AM_ROM + AM_RANGE(0x8000, 0x87ff) AM_RAM + AM_RANGE(0xa000, 0xa7ff) AM_RAM + AM_RANGE(0xe000, 0xe3ff) AM_RAM_WRITE(mrjong_videoram_w) AM_BASE_MEMBER(mrjong_state, videoram) + AM_RANGE(0xe400, 0xe7ff) AM_RAM_WRITE(mrjong_colorram_w) AM_BASE_MEMBER(mrjong_state, colorram) +ADDRESS_MAP_END + static ADDRESS_MAP_START( mrjong_io_map, ADDRESS_SPACE_IO, 8 ) ADDRESS_MAP_GLOBAL_MASK(0xff) - AM_RANGE(0x00, 0x00) AM_READ_PORT("P2") AM_WRITE(io_0x00_w) + AM_RANGE(0x00, 0x00) AM_READ_PORT("P2") AM_WRITE(mrjong_flipscreen_w) AM_RANGE(0x01, 0x01) AM_READ_PORT("P1") AM_DEVWRITE("sn1", sn76496_w) AM_RANGE(0x02, 0x02) AM_READ_PORT("DSW") AM_DEVWRITE("sn2", sn76496_w) AM_RANGE(0x03, 0x03) AM_READ(io_0x03_r) // Unknown ADDRESS_MAP_END +/************************************* + * + * Input ports + * + *************************************/ + static INPUT_PORTS_START( mrjong ) PORT_START("P2") PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_4WAY PORT_PLAYER(2) @@ -133,6 +136,12 @@ static INPUT_PORTS_START( mrjong ) INPUT_PORTS_END +/************************************* + * + * Graphics definitions + * + *************************************/ + static const gfx_layout tilelayout = { 8, 8, /* 8*8 characters */ @@ -163,8 +172,17 @@ static GFXDECODE_START( mrjong ) GFXDECODE_END +/************************************* + * + * Machine driver + * + *************************************/ + static MACHINE_DRIVER_START( mrjong ) + /* driver data */ + MDRV_DRIVER_DATA(mrjong_state) + /* basic machine hardware */ MDRV_CPU_ADD("maincpu", Z80,15468000/6) /* 2.578 MHz?? */ MDRV_CPU_PROGRAM_MAP(mrjong_map) @@ -189,19 +207,19 @@ static MACHINE_DRIVER_START( mrjong ) /* sound hardware */ MDRV_SPEAKER_STANDARD_MONO("mono") - MDRV_SOUND_ADD("sn1", SN76489, 15468000/6) + MDRV_SOUND_ADD("sn1", SN76489, 15468000/6) MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) - MDRV_SOUND_ADD("sn2", SN76489, 15468000/6) + MDRV_SOUND_ADD("sn2", SN76489, 15468000/6) MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) MACHINE_DRIVER_END -/*************************************************************************** - - Game driver(s) - -***************************************************************************/ +/************************************* + * + * ROM definition(s) + * + *************************************/ ROM_START( mrjong ) ROM_REGION( 0x10000, "maincpu", 0 ) /* code */ @@ -251,7 +269,12 @@ ROM_START( blkbustr ) ROM_LOAD( "clr.g5", 0x0020, 0x0100, CRC(bcb1e2e3) SHA1(c09731836a9d4e50316a84b86f61b599a1ef944d) ) ROM_END -GAME( 1983, mrjong, 0, mrjong, mrjong, 0, ROT90, "Kiwako", "Mr. Jong (Japan)", 0 ) -GAME( 1983, crazyblk, mrjong, mrjong, mrjong, 0, ROT90, "Kiwako (ECI license)", "Crazy Blocks", 0 ) -GAME( 1983, blkbustr, mrjong, mrjong, mrjong, 0, ROT90, "Kiwako (ECI license)", "BlockBuster", 0 ) +/************************************* + * + * Game driver(s) + * + *************************************/ +GAME( 1983, mrjong, 0, mrjong, mrjong, 0, ROT90, "Kiwako", "Mr. Jong (Japan)", GAME_SUPPORTS_SAVE ) +GAME( 1983, crazyblk, mrjong, mrjong, mrjong, 0, ROT90, "Kiwako (ECI license)", "Crazy Blocks", GAME_SUPPORTS_SAVE ) +GAME( 1983, blkbustr, mrjong, mrjong, mrjong, 0, ROT90, "Kiwako (ECI license)", "BlockBuster", GAME_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/mugsmash.c b/src/mame/drivers/mugsmash.c index c30c56bb995..dc09cd28497 100644 --- a/src/mame/drivers/mugsmash.c +++ b/src/mame/drivers/mugsmash.c @@ -49,6 +49,7 @@ behavior we use . static WRITE16_HANDLER( mugsmash_reg2_w ) { mugsmash_state *state = (mugsmash_state *)space->machine->driver_data; + state->regs2[offset] = data; //popmessage ("Regs2 %04x, %04x, %04x, %04x", state->regs2[0], state->regs2[1], state->regs2[2], state->regs2[3]); @@ -56,7 +57,7 @@ static WRITE16_HANDLER( mugsmash_reg2_w ) { case 1: soundlatch_w(space, 1, data & 0xff); - cputag_set_input_line(space->machine, "audiocpu", INPUT_LINE_NMI, PULSE_LINE ); + cpu_set_input_line(state->audiocpu, INPUT_LINE_NMI, PULSE_LINE ); break; default: @@ -173,14 +174,14 @@ static READ16_HANDLER ( mugsmash_input_ports_r ) static ADDRESS_MAP_START( mugsmash_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x000000, 0x07ffff) AM_ROM - AM_RANGE(0x080000, 0x080fff) AM_RAM_WRITE(mugsmash_videoram1_w) AM_BASE_MEMBER(mugsmash_state,videoram1) - AM_RANGE(0x082000, 0x082fff) AM_RAM_WRITE(mugsmash_videoram2_w) AM_BASE_MEMBER(mugsmash_state,videoram2) - AM_RANGE(0x0c0000, 0x0c0007) AM_WRITE(mugsmash_reg_w) AM_BASE_MEMBER(mugsmash_state,regs1) /* video registers*/ + AM_RANGE(0x080000, 0x080fff) AM_RAM_WRITE(mugsmash_videoram1_w) AM_BASE_MEMBER(mugsmash_state, videoram1) + AM_RANGE(0x082000, 0x082fff) AM_RAM_WRITE(mugsmash_videoram2_w) AM_BASE_MEMBER(mugsmash_state, videoram2) + AM_RANGE(0x0c0000, 0x0c0007) AM_WRITE(mugsmash_reg_w) AM_BASE_MEMBER(mugsmash_state, regs1) /* video registers*/ AM_RANGE(0x100000, 0x1005ff) AM_RAM_WRITE(paletteram16_xRRRRRGGGGGBBBBB_word_w) AM_BASE_GENERIC(paletteram) - AM_RANGE(0x140000, 0x140007) AM_WRITE(mugsmash_reg2_w) AM_BASE_MEMBER(mugsmash_state,regs2) /* sound + ? */ + AM_RANGE(0x140000, 0x140007) AM_WRITE(mugsmash_reg2_w) AM_BASE_MEMBER(mugsmash_state, regs2) /* sound + ? */ AM_RANGE(0x1c0000, 0x1c3fff) AM_RAM /* main ram? */ AM_RANGE(0x1c4000, 0x1cffff) AM_RAM - AM_RANGE(0x200000, 0x203fff) AM_RAM AM_BASE_MEMBER(mugsmash_state,spriteram) /* sprite ram */ + AM_RANGE(0x200000, 0x203fff) AM_RAM AM_BASE_MEMBER(mugsmash_state, spriteram) /* sprite ram */ #if USE_FAKE_INPUT_PORTS AM_RANGE(0x180000, 0x180007) AM_READ(mugsmash_input_ports_r) #else @@ -390,7 +391,8 @@ GFXDECODE_END static void irq_handler(running_device *device, int irq) { - cputag_set_input_line(device->machine, "audiocpu", 0 , irq ? ASSERT_LINE : CLEAR_LINE ); + mugsmash_state *state = (mugsmash_state *)device->machine->driver_data; + cpu_set_input_line(state->audiocpu, 0 , irq ? ASSERT_LINE : CLEAR_LINE ); } static const ym2151_interface ym2151_config = @@ -398,6 +400,14 @@ static const ym2151_interface ym2151_config = irq_handler }; +static MACHINE_START( mugsmash ) +{ + mugsmash_state *state = (mugsmash_state *)machine->driver_data; + + state->maincpu = devtag_get_device(machine, "maincpu"); + state->audiocpu = devtag_get_device(machine, "audiocpu"); +} + static MACHINE_DRIVER_START( mugsmash ) MDRV_DRIVER_DATA( mugsmash_state ) @@ -409,6 +419,8 @@ static MACHINE_DRIVER_START( mugsmash ) MDRV_CPU_ADD("audiocpu", Z80, 4000000) /* Guess */ MDRV_CPU_PROGRAM_MAP(mugsmash_sound_map) + MDRV_MACHINE_START(mugsmash) + MDRV_SCREEN_ADD("screen", RASTER) MDRV_SCREEN_REFRESH_RATE(60) MDRV_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) @@ -462,4 +474,4 @@ ROM_START( mugsmash ) ROM_LOAD( "mugs_15.bin", 0x180000, 0x080000, CRC(82e8187c) SHA1(c7a0e1b3d90dbbe2588886a27a07a9c336447ae3) ) ROM_END -GAME( 1990?, mugsmash, 0, mugsmash, mugsmash, 0, ROT0, "Electronic Devices Italy / 3D Games England", "Mug Smashers", 0 ) +GAME( 1990?, mugsmash, 0, mugsmash, mugsmash, 0, ROT0, "Electronic Devices Italy / 3D Games England", "Mug Smashers", GAME_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/munchmo.c b/src/mame/drivers/munchmo.c index d712963c35e..e419dc5867a 100644 --- a/src/mame/drivers/munchmo.c +++ b/src/mame/drivers/munchmo.c @@ -28,58 +28,62 @@ Stephh's notes (based on the game Z80 code and some tests) : #include "deprecat.h" #include "cpu/z80/z80.h" #include "sound/ay8910.h" - -extern UINT8 *mnchmobl_vreg; -extern UINT8 *mnchmobl_status_vram; -extern UINT8 *mnchmobl_sprite_xpos; -extern UINT8 *mnchmobl_sprite_attr; -extern UINT8 *mnchmobl_sprite_tile; - -PALETTE_INIT( mnchmobl ); -VIDEO_START( mnchmobl ); -WRITE8_HANDLER( mnchmobl_palette_bank_w ); -WRITE8_HANDLER( mnchmobl_flipscreen_w ); -VIDEO_UPDATE( mnchmobl ); +#include "includes/munchmo.h" -/***************************************************************************/ - -static int mnchmobl_nmi_enable = 0; +/************************************* + * + * Memory handlers + * + *************************************/ static WRITE8_HANDLER( mnchmobl_nmi_enable_w ) { - mnchmobl_nmi_enable = data; + munchmo_state *state = (munchmo_state *)space->machine->driver_data; + state->nmi_enable = data; } static INTERRUPT_GEN( mnchmobl_interrupt ) { - static int which; - which = !which; - if( which ) cpu_set_input_line(device, 0, HOLD_LINE); - else if( mnchmobl_nmi_enable ) cpu_set_input_line(device, INPUT_LINE_NMI, PULSE_LINE); + munchmo_state *state = (munchmo_state *)device->machine->driver_data; + state->which = !state->which; + + if (state->which) + cpu_set_input_line(device, 0, HOLD_LINE); + else if (state->nmi_enable) + cpu_set_input_line(device, INPUT_LINE_NMI, PULSE_LINE); } static WRITE8_HANDLER( mnchmobl_soundlatch_w ) { - soundlatch_w( space, offset, data ); - cputag_set_input_line(space->machine, "audiocpu", 0, HOLD_LINE ); + munchmo_state *state = (munchmo_state *)space->machine->driver_data; + + soundlatch_w(space, offset, data); + cpu_set_input_line(state->audiocpu, 0, HOLD_LINE ); } static WRITE8_HANDLER( sound_nmi_ack_w ) { - cputag_set_input_line(space->machine, "audiocpu", INPUT_LINE_NMI, CLEAR_LINE); + munchmo_state *state = (munchmo_state *)space->machine->driver_data; + cpu_set_input_line(state->audiocpu, INPUT_LINE_NMI, CLEAR_LINE); } +/************************************* + * + * Address maps + * + *************************************/ + static ADDRESS_MAP_START( mnchmobl_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0x0000, 0x3fff) AM_ROM AM_RANGE(0x8000, 0x83ff) AM_RAM - AM_RANGE(0xa000, 0xa3ff) AM_MIRROR(0x0400) AM_RAM AM_BASE(&mnchmobl_sprite_xpos) - AM_RANGE(0xa800, 0xabff) AM_MIRROR(0x0400) AM_RAM AM_BASE(&mnchmobl_sprite_tile) - AM_RANGE(0xb000, 0xb3ff) AM_MIRROR(0x0400) AM_RAM AM_BASE(&mnchmobl_sprite_attr) - AM_RANGE(0xb800, 0xb8ff) AM_MIRROR(0x0100) AM_RAM AM_BASE_GENERIC(videoram) + AM_RANGE(0xa000, 0xa3ff) AM_MIRROR(0x0400) AM_RAM AM_BASE_MEMBER(munchmo_state, sprite_xpos) + AM_RANGE(0xa800, 0xabff) AM_MIRROR(0x0400) AM_RAM AM_BASE_MEMBER(munchmo_state, sprite_tile) + AM_RANGE(0xb000, 0xb3ff) AM_MIRROR(0x0400) AM_RAM AM_BASE_MEMBER(munchmo_state, sprite_attr) + AM_RANGE(0xb800, 0xb8ff) AM_MIRROR(0x0100) AM_RAM AM_BASE_MEMBER(munchmo_state, videoram) AM_RANGE(0xbaba, 0xbaba) AM_WRITENOP /* ? */ - AM_RANGE(0xbc00, 0xbc7f) AM_RAM AM_BASE(&mnchmobl_status_vram) + AM_RANGE(0xbc00, 0xbc7f) AM_RAM AM_BASE_MEMBER(munchmo_state, status_vram) AM_RANGE(0xbe00, 0xbe00) AM_WRITE(mnchmobl_soundlatch_w) AM_RANGE(0xbe01, 0xbe01) AM_WRITE(mnchmobl_palette_bank_w) AM_RANGE(0xbe02, 0xbe02) AM_READ_PORT("DSW1") @@ -89,7 +93,7 @@ static ADDRESS_MAP_START( mnchmobl_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0xbe31, 0xbe31) AM_WRITENOP /* ? */ AM_RANGE(0xbe41, 0xbe41) AM_WRITE(mnchmobl_flipscreen_w) AM_RANGE(0xbe61, 0xbe61) AM_WRITE(mnchmobl_nmi_enable_w) /* ENI 1-10C */ - AM_RANGE(0xbf00, 0xbf07) AM_WRITEONLY AM_BASE(&mnchmobl_vreg) /* MY0 1-8C */ + AM_RANGE(0xbf00, 0xbf07) AM_WRITEONLY AM_BASE_MEMBER(munchmo_state, vreg) /* MY0 1-8C */ AM_RANGE(0xbf01, 0xbf01) AM_READ_PORT("SYSTEM") AM_RANGE(0xbf02, 0xbf02) AM_READ_PORT("P1") AM_RANGE(0xbf03, 0xbf03) AM_READ_PORT("P2") @@ -109,6 +113,12 @@ static ADDRESS_MAP_START( sound_map, ADDRESS_SPACE_PROGRAM, 8 ) ADDRESS_MAP_END +/************************************* + * + * Input ports + * + *************************************/ + static INPUT_PORTS_START( mnchmobl ) PORT_START("SYSTEM") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) @@ -199,6 +209,12 @@ static INPUT_PORTS_START( mnchmobl ) PORT_DIPSETTING( 0x80, DEF_STR( Yes ) ) INPUT_PORTS_END +/************************************* + * + * Graphics definitions + * + *************************************/ + static const gfx_layout char_layout = { 8,8, @@ -268,8 +284,40 @@ static GFXDECODE_START( mnchmobl ) GFXDECODE_ENTRY( "gfx4", 0, sprite_layout2, 128, 16 ) /* colors 128-255 */ GFXDECODE_END +/************************************* + * + * Machine driver + * + *************************************/ + +static MACHINE_START( munchmo ) +{ + munchmo_state *state = (munchmo_state *)machine->driver_data; + + state->maincpu = devtag_get_device(machine, "maincpu"); + state->audiocpu = devtag_get_device(machine, "audiocpu"); + + state_save_register_global(machine, state->palette_bank); + state_save_register_global(machine, state->flipscreen); + state_save_register_global(machine, state->nmi_enable); + state_save_register_global(machine, state->which); +} + +static MACHINE_RESET( munchmo ) +{ + munchmo_state *state = (munchmo_state *)machine->driver_data; + + state->palette_bank = 0; + state->flipscreen = 0; + state->nmi_enable = 0; + state->which = 0; +} + static MACHINE_DRIVER_START( mnchmobl ) + /* driver data */ + MDRV_DRIVER_DATA(munchmo_state) + /* basic machine hardware */ MDRV_CPU_ADD("maincpu", Z80, XTAL_15MHz/4) /* ? */ MDRV_CPU_PROGRAM_MAP(mnchmobl_map) @@ -279,6 +327,9 @@ static MACHINE_DRIVER_START( mnchmobl ) MDRV_CPU_PROGRAM_MAP(sound_map) MDRV_CPU_VBLANK_INT("screen", nmi_line_assert) + MDRV_MACHINE_START(munchmo) + MDRV_MACHINE_RESET(munchmo) + /* video hardware */ MDRV_SCREEN_ADD("screen", RASTER) MDRV_SCREEN_REFRESH_RATE(57) @@ -306,6 +357,12 @@ static MACHINE_DRIVER_START( mnchmobl ) MACHINE_DRIVER_END +/************************************* + * + * ROM definition(s) + * + *************************************/ + ROM_START( joyfulr ) ROM_REGION( 0x10000, "maincpu", 0 ) /* 64k for CPUA */ ROM_LOAD( "m1j.10e", 0x0000, 0x2000, CRC(1fe86e25) SHA1(e13abc20741dfd8a260f354efda3b3a25c820343) ) @@ -363,5 +420,11 @@ ROM_START( mnchmobl ) ROM_END -GAME( 1983, joyfulr, 0, mnchmobl, mnchmobl, 0, ROT270, "SNK", "Joyful Road (Japan)", GAME_IMPERFECT_SOUND | GAME_NO_COCKTAIL ) -GAME( 1983, mnchmobl, joyfulr, mnchmobl, mnchmobl, 0, ROT270, "SNK (Centuri license)", "Munch Mobile (US)", GAME_IMPERFECT_SOUND | GAME_NO_COCKTAIL ) +/************************************* + * + * Game driver(s) + * + *************************************/ + +GAME( 1983, joyfulr, 0, mnchmobl, mnchmobl, 0, ROT270, "SNK", "Joyful Road (Japan)", GAME_IMPERFECT_SOUND | GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE ) +GAME( 1983, mnchmobl, joyfulr, mnchmobl, mnchmobl, 0, ROT270, "SNK (Centuri license)", "Munch Mobile (US)", GAME_IMPERFECT_SOUND | GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/mwarr.c b/src/mame/drivers/mwarr.c index c139e7837b8..e7cfafffc34 100644 --- a/src/mame/drivers/mwarr.c +++ b/src/mame/drivers/mwarr.c @@ -42,36 +42,64 @@ Notes: #include "cpu/m68000/m68000.h" #include "sound/okim6295.h" -#define MASTER_CLOCK XTAL_12MHz -#define SOUND_CLOCK XTAL_45MHz +#define MASTER_CLOCK XTAL_12MHz +#define SOUND_CLOCK XTAL_45MHz -static tilemap_t *bg_tilemap, *mlow_tilemap, *mhigh_tilemap, *tx_tilemap; -static UINT16 *bg_videoram, *mlow_videoram, *mhigh_videoram, *tx_videoram, *sprites_buffer; -static UINT16 *bg_scrollram, *mlow_scrollram, *mhigh_scrollram, *vidattrram; -static UINT16 *mwarr_ram; + +typedef struct _mwarr_state mwarr_state; +struct _mwarr_state +{ + /* memory pointers */ + UINT16 *bg_videoram, *mlow_videoram, *mhigh_videoram, *tx_videoram, *sprites_buffer; + UINT16 *bg_scrollram, *mlow_scrollram, *mhigh_scrollram, *vidattrram; + UINT16 *spriteram; +// UINT16 *paletteram; // currently this uses generic palette handling + UINT16 *mwarr_ram; + + /* video-related */ + tilemap_t *bg_tilemap, *mlow_tilemap, *mhigh_tilemap, *tx_tilemap; + + /* misc */ + int which; +}; + + +/************************************* + * + * Memory handlers + * + *************************************/ static WRITE16_HANDLER( bg_videoram_w ) { - COMBINE_DATA(&bg_videoram[offset]); - tilemap_mark_tile_dirty(bg_tilemap,offset); + mwarr_state *state = (mwarr_state *)space->machine->driver_data; + + COMBINE_DATA(&state->bg_videoram[offset]); + tilemap_mark_tile_dirty(state->bg_tilemap,offset); } static WRITE16_HANDLER( mlow_videoram_w ) { - COMBINE_DATA(&mlow_videoram[offset]); - tilemap_mark_tile_dirty(mlow_tilemap,offset); + mwarr_state *state = (mwarr_state *)space->machine->driver_data; + + COMBINE_DATA(&state->mlow_videoram[offset]); + tilemap_mark_tile_dirty(state->mlow_tilemap,offset); } static WRITE16_HANDLER( mhigh_videoram_w ) { - COMBINE_DATA(&mhigh_videoram[offset]); - tilemap_mark_tile_dirty(mhigh_tilemap,offset); + mwarr_state *state = (mwarr_state *)space->machine->driver_data; + + COMBINE_DATA(&state->mhigh_videoram[offset]); + tilemap_mark_tile_dirty(state->mhigh_tilemap,offset); } static WRITE16_HANDLER( tx_videoram_w ) { - COMBINE_DATA(&tx_videoram[offset]); - tilemap_mark_tile_dirty(tx_tilemap,offset); + mwarr_state *state = (mwarr_state *)space->machine->driver_data; + + COMBINE_DATA(&state->tx_videoram[offset]); + tilemap_mark_tile_dirty(state->tx_tilemap,offset); } static WRITE16_DEVICE_HANDLER( oki1_bank_w ) @@ -81,30 +109,30 @@ static WRITE16_DEVICE_HANDLER( oki1_bank_w ) static WRITE16_HANDLER( sprites_commands_w ) { - static int which = 0; + mwarr_state *state = (mwarr_state *)space->machine->driver_data; - if( which ) + if (state->which) { int i; - switch(data) + switch (data) { case 0: /* clear sprites on screen */ - for( i = 0; i < 0x800; i++) + for (i = 0; i < 0x800; i++) { - sprites_buffer[i] = 0; + state->sprites_buffer[i] = 0; } - which = 0; + state->which = 0; break; default: logerror("used unknown sprites command %02X\n",data); case 0xf: /* refresh sprites on screen */ - for( i = 0; i < 0x800; i++) + for (i = 0; i < 0x800; i++) { - sprites_buffer[i] = space->machine->generic.spriteram.u16[i]; + state->sprites_buffer[i] = state->spriteram[i]; } break; @@ -114,47 +142,61 @@ static WRITE16_HANDLER( sprites_commands_w ) } } - which ^= 1; + state->which ^= 1; } static WRITE16_HANDLER( mwarr_brightness_w ) { + mwarr_state *state = (mwarr_state *)space->machine->driver_data; int i; double brightness; - COMBINE_DATA(&mwarr_ram[0x14/2]); + COMBINE_DATA(&state->mwarr_ram[0x14 / 2]); brightness = (double)(data & 0xff); - for (i=0;i<0x800;i++) + for (i = 0; i < 0x800; i++) { palette_set_pen_contrast(space->machine, i, brightness/255); } } +/************************************* + * + * Address maps + * + *************************************/ + static ADDRESS_MAP_START( mwarr_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x000000, 0x0fffff) AM_ROM - AM_RANGE(0x100000, 0x1007ff) AM_RAM_WRITE(bg_videoram_w) AM_BASE(&bg_videoram) - AM_RANGE(0x100800, 0x100fff) AM_RAM_WRITE(mlow_videoram_w) AM_BASE(&mlow_videoram) - AM_RANGE(0x101000, 0x1017ff) AM_RAM_WRITE(mhigh_videoram_w) AM_BASE(&mhigh_videoram) - AM_RANGE(0x101800, 0x1027ff) AM_RAM_WRITE(tx_videoram_w) AM_BASE(&tx_videoram) - AM_RANGE(0x103000, 0x1033ff) AM_RAM AM_BASE(&bg_scrollram) - AM_RANGE(0x103400, 0x1037ff) AM_RAM AM_BASE(&mlow_scrollram) - AM_RANGE(0x103800, 0x103bff) AM_RAM AM_BASE(&mhigh_scrollram) - AM_RANGE(0x103c00, 0x103fff) AM_RAM AM_BASE(&vidattrram) + AM_RANGE(0x100000, 0x1007ff) AM_RAM_WRITE(bg_videoram_w) AM_BASE_MEMBER(mwarr_state, bg_videoram) + AM_RANGE(0x100800, 0x100fff) AM_RAM_WRITE(mlow_videoram_w) AM_BASE_MEMBER(mwarr_state, mlow_videoram) + AM_RANGE(0x101000, 0x1017ff) AM_RAM_WRITE(mhigh_videoram_w) AM_BASE_MEMBER(mwarr_state, mhigh_videoram) + AM_RANGE(0x101800, 0x1027ff) AM_RAM_WRITE(tx_videoram_w) AM_BASE_MEMBER(mwarr_state, tx_videoram) + AM_RANGE(0x103000, 0x1033ff) AM_RAM AM_BASE_MEMBER(mwarr_state, bg_scrollram) + AM_RANGE(0x103400, 0x1037ff) AM_RAM AM_BASE_MEMBER(mwarr_state, mlow_scrollram) + AM_RANGE(0x103800, 0x103bff) AM_RAM AM_BASE_MEMBER(mwarr_state, mhigh_scrollram) + AM_RANGE(0x103c00, 0x103fff) AM_RAM AM_BASE_MEMBER(mwarr_state, vidattrram) AM_RANGE(0x104000, 0x104fff) AM_RAM_WRITE(paletteram16_xBBBBBGGGGGRRRRR_word_w) AM_BASE_GENERIC(paletteram) - AM_RANGE(0x108000, 0x108fff) AM_RAM AM_BASE_GENERIC(spriteram) + AM_RANGE(0x108000, 0x108fff) AM_RAM AM_BASE_MEMBER(mwarr_state, spriteram) AM_RANGE(0x110000, 0x110001) AM_READ_PORT("P1_P2") AM_RANGE(0x110002, 0x110003) AM_READ_PORT("SYSTEM") AM_RANGE(0x110004, 0x110005) AM_READ_PORT("DSW") AM_RANGE(0x110010, 0x110011) AM_DEVWRITE("oki2", oki1_bank_w) AM_RANGE(0x110014, 0x110015) AM_WRITE(mwarr_brightness_w) AM_RANGE(0x110016, 0x110017) AM_WRITE(sprites_commands_w) - AM_RANGE(0x110000, 0x11ffff) AM_RAM AM_BASE(&mwarr_ram) + AM_RANGE(0x110000, 0x11ffff) AM_RAM AM_BASE_MEMBER(mwarr_state, mwarr_ram) AM_RANGE(0x180000, 0x180001) AM_DEVREADWRITE8("oki1", okim6295_r, okim6295_w, 0x00ff) AM_RANGE(0x190000, 0x190001) AM_DEVREADWRITE8("oki2", okim6295_r, okim6295_w, 0x00ff) ADDRESS_MAP_END + +/************************************* + * + * Input ports + * + *************************************/ + static INPUT_PORTS_START( mwarr ) PORT_START("P1_P2") PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1) @@ -229,6 +271,12 @@ static INPUT_PORTS_START( mwarr ) PORT_SERVICE_NO_TOGGLE( 0x8000, IP_ACTIVE_LOW ) INPUT_PORTS_END +/************************************* + * + * Graphics definitions + * + *************************************/ + static const gfx_layout mwarr_tile8_layout = { 8,8, @@ -271,75 +319,82 @@ static GFXDECODE_START( mwarr ) GFXDECODE_ENTRY( "gfx5", 0, mwarr_tile16_layout, 0, 8 ) GFXDECODE_END +/************************************* + * + * Video emulation + * + *************************************/ + static TILE_GET_INFO( get_bg_tile_info ) { - int tileno,colour; + mwarr_state *state = (mwarr_state *)machine->driver_data; + int tileno = state->bg_videoram[tile_index] & 0x1fff; + int colour = (state->bg_videoram[tile_index] & 0xe000) >> 13; - tileno = bg_videoram[tile_index] & 0x1fff; - colour = (bg_videoram[tile_index] & 0xe000) >> 13; - - SET_TILE_INFO(4,tileno,colour,0); + SET_TILE_INFO(4, tileno, colour, 0); } static TILE_GET_INFO( get_mlow_tile_info ) { - int tileno,colour; + mwarr_state *state = (mwarr_state *)machine->driver_data; + int tileno = state->mlow_videoram[tile_index] & 0x1fff; + int colour = (state->mlow_videoram[tile_index] & 0xe000) >> 13; - tileno = mlow_videoram[tile_index] & 0x1fff; - colour = (mlow_videoram[tile_index] & 0xe000) >> 13; - - SET_TILE_INFO(3,tileno,colour,0); + SET_TILE_INFO(3, tileno, colour, 0); } static TILE_GET_INFO( get_mhigh_tile_info ) { - int tileno,colour; + mwarr_state *state = (mwarr_state *)machine->driver_data; + int tileno = state->mhigh_videoram[tile_index] & 0x1fff; + int colour = (state->mhigh_videoram[tile_index] & 0xe000) >> 13; - tileno = mhigh_videoram[tile_index] & 0x1fff; - colour = (mhigh_videoram[tile_index] & 0xe000) >> 13; - - SET_TILE_INFO(2,tileno,colour,0); + SET_TILE_INFO(2, tileno, colour, 0); } static TILE_GET_INFO( get_tx_tile_info ) { - int tileno,colour; + mwarr_state *state = (mwarr_state *)machine->driver_data; + int tileno = state->tx_videoram[tile_index] & 0x1fff; + int colour = (state->tx_videoram[tile_index] & 0xe000) >> 13; - tileno = tx_videoram[tile_index] & 0x1fff; - colour = (tx_videoram[tile_index] & 0xe000) >> 13; - - SET_TILE_INFO(1,tileno,colour,0); + SET_TILE_INFO(1, tileno, colour, 0); } static VIDEO_START( mwarr ) { - bg_tilemap = tilemap_create(machine, get_bg_tile_info, tilemap_scan_cols, 16, 16,64,16); - mlow_tilemap = tilemap_create(machine, get_mlow_tile_info, tilemap_scan_cols, 16, 16,64,16); - mhigh_tilemap = tilemap_create(machine, get_mhigh_tile_info,tilemap_scan_cols, 16, 16,64,16); - tx_tilemap = tilemap_create(machine, get_tx_tile_info, tilemap_scan_rows, 8, 8,64,32); + mwarr_state *state = (mwarr_state *)machine->driver_data; - sprites_buffer = auto_alloc_array(machine, UINT16, 0x800); + state->bg_tilemap = tilemap_create(machine, get_bg_tile_info, tilemap_scan_cols, 16, 16, 64, 16); + state->mlow_tilemap = tilemap_create(machine, get_mlow_tile_info, tilemap_scan_cols, 16, 16, 64, 16); + state->mhigh_tilemap = tilemap_create(machine, get_mhigh_tile_info, tilemap_scan_cols, 16, 16, 64, 16); + state->tx_tilemap = tilemap_create(machine, get_tx_tile_info, tilemap_scan_rows, 8, 8, 64, 32); - tilemap_set_transparent_pen(mlow_tilemap,0); - tilemap_set_transparent_pen(mhigh_tilemap,0); - tilemap_set_transparent_pen(tx_tilemap,0); + state->sprites_buffer = auto_alloc_array(machine, UINT16, 0x800); - tilemap_set_scroll_rows(bg_tilemap, 256); - tilemap_set_scroll_rows(mlow_tilemap, 256); - tilemap_set_scroll_rows(mhigh_tilemap, 256); + tilemap_set_transparent_pen(state->mlow_tilemap, 0); + tilemap_set_transparent_pen(state->mhigh_tilemap, 0); + tilemap_set_transparent_pen(state->tx_tilemap, 0); + + tilemap_set_scroll_rows(state->bg_tilemap, 256); + tilemap_set_scroll_rows(state->mlow_tilemap, 256); + tilemap_set_scroll_rows(state->mhigh_tilemap, 256); + + state_save_register_global_pointer(machine, state->sprites_buffer, 0x800); } -static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect ) +static void draw_sprites( running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect ) { - const UINT16 *source = sprites_buffer+0x800-4; - const UINT16 *finish = sprites_buffer; + mwarr_state *state = (mwarr_state *)machine->driver_data; + const UINT16 *source = state->sprites_buffer + 0x800 - 4; + const UINT16 *finish = state->sprites_buffer; const gfx_element *gfx = machine->gfx[0]; int x, y, color, flipx, dy, pri, pri_mask, i; - while( source>=finish ) + while (source >= finish) { /* draw sprite */ - if( source[0] & 0x0800 ) + if (source[0] & 0x0800) { y = 512 - (source[0] & 0x01ff); x = (source[3] & 0x3ff) - 9; @@ -347,12 +402,12 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const recta color = source[1] & 0x000f; flipx = source[1] & 0x0200; - dy = (source[0] & 0xf000)>>12; + dy = (source[0] & 0xf000) >> 12; - pri = ((source[1] & 0x3c00)>>10); // Priority (1 = Low) - pri_mask = ~((1 << (pri+1)) - 1); // Above the first "pri" levels + pri = ((source[1] & 0x3c00) >> 10); // Priority (1 = Low) + pri_mask = ~((1 << (pri + 1)) - 1); // Above the first "pri" levels - for(i=0;i<=dy;i++) + for (i = 0; i <= dy; i++) { pdrawgfx_transpen( bitmap, cliprect, @@ -401,66 +456,93 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const recta static VIDEO_UPDATE( mwarr ) { + mwarr_state *state = (mwarr_state *)screen->machine->driver_data; int i; - bitmap_fill(screen->machine->priority_bitmap,cliprect,0); + bitmap_fill(screen->machine->priority_bitmap, cliprect, 0); - if(vidattrram[6] & 1) + if (BIT(state->vidattrram[6], 0)) { - for(i=0;i<256;i++) - tilemap_set_scrollx(bg_tilemap, i, bg_scrollram[i]+20); + for (i = 0; i < 256; i++) + tilemap_set_scrollx(state->bg_tilemap, i, state->bg_scrollram[i] + 20); } else { - for(i=0;i<256;i++) - tilemap_set_scrollx(bg_tilemap, i, bg_scrollram[0]+19); + for (i = 0; i < 256; i++) + tilemap_set_scrollx(state->bg_tilemap, i, state->bg_scrollram[0] + 19); } - if(vidattrram[6] & 4) + if (BIT(state->vidattrram[6], 2)) { - for(i=0;i<256;i++) - tilemap_set_scrollx(mlow_tilemap, i, mlow_scrollram[i]+19); + for (i = 0; i < 256; i++) + tilemap_set_scrollx(state->mlow_tilemap, i, state->mlow_scrollram[i] + 19); } else { - for(i=0;i<256;i++) - tilemap_set_scrollx(mlow_tilemap, i, mlow_scrollram[0]+19); + for (i = 0; i < 256; i++) + tilemap_set_scrollx(state->mlow_tilemap, i, state->mlow_scrollram[0] + 19); } - if(vidattrram[6] & 0x10) + if (BIT(state->vidattrram[6], 4)) { - for(i=0;i<256;i++) - tilemap_set_scrollx(mhigh_tilemap, i, mhigh_scrollram[i]+19); + for (i = 0; i < 256; i++) + tilemap_set_scrollx(state->mhigh_tilemap, i, state->mhigh_scrollram[i] + 19); } else { - for(i=0;i<256;i++) - tilemap_set_scrollx(mhigh_tilemap, i, mhigh_scrollram[0]+19); + for (i = 0; i < 256; i++) + tilemap_set_scrollx(state->mhigh_tilemap, i, state->mhigh_scrollram[0] + 19); } - tilemap_set_scrolly(bg_tilemap, 0, vidattrram[1]+1); - tilemap_set_scrolly(mlow_tilemap, 0, vidattrram[2]+1); - tilemap_set_scrolly(mhigh_tilemap, 0, vidattrram[3]+1); + tilemap_set_scrolly(state->bg_tilemap, 0, state->vidattrram[1] + 1); + tilemap_set_scrolly(state->mlow_tilemap, 0, state->vidattrram[2] + 1); + tilemap_set_scrolly(state->mhigh_tilemap, 0, state->vidattrram[3] + 1); - tilemap_set_scrollx(tx_tilemap, 0, vidattrram[0]+16); - tilemap_set_scrolly(tx_tilemap, 0, vidattrram[4]+1); + tilemap_set_scrollx(state->tx_tilemap, 0, state->vidattrram[0] + 16); + tilemap_set_scrolly(state->tx_tilemap, 0, state->vidattrram[4] + 1); - tilemap_draw(bitmap,cliprect,bg_tilemap, 0,0x01); - tilemap_draw(bitmap,cliprect,mlow_tilemap, 0,0x02); - tilemap_draw(bitmap,cliprect,mhigh_tilemap,0,0x04); - tilemap_draw(bitmap,cliprect,tx_tilemap, 0,0x10); - draw_sprites(screen->machine, bitmap,cliprect); + tilemap_draw(bitmap, cliprect, state->bg_tilemap, 0, 0x01); + tilemap_draw(bitmap, cliprect, state->mlow_tilemap, 0, 0x02); + tilemap_draw(bitmap, cliprect, state->mhigh_tilemap, 0, 0x04); + tilemap_draw(bitmap, cliprect, state->tx_tilemap, 0, 0x10); + draw_sprites(screen->machine, bitmap, cliprect); return 0; } +/************************************* + * + * Machine driver + * + *************************************/ + +static MACHINE_START( mwarr ) +{ + mwarr_state *state = (mwarr_state *)machine->driver_data; + + state_save_register_global(machine, state->which); +} + +static MACHINE_RESET( mwarr ) +{ + mwarr_state *state = (mwarr_state *)machine->driver_data; + + state->which = 0; +} + static MACHINE_DRIVER_START( mwarr ) + + /* driver data */ + MDRV_DRIVER_DATA(mwarr_state) + + /* basic machine hardware */ MDRV_CPU_ADD("maincpu", M68000, MASTER_CLOCK) MDRV_CPU_PROGRAM_MAP(mwarr_map) MDRV_CPU_VBLANK_INT("screen", irq4_line_hold) - MDRV_GFXDECODE(mwarr) - + MDRV_MACHINE_START(mwarr) + MDRV_MACHINE_RESET(mwarr) + /* video hardware */ MDRV_SCREEN_ADD("screen", RASTER) MDRV_SCREEN_REFRESH_RATE(54) MDRV_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */) @@ -468,11 +550,13 @@ static MACHINE_DRIVER_START( mwarr ) MDRV_SCREEN_SIZE(64*8, 32*8) MDRV_SCREEN_VISIBLE_AREA(8+1, 48*8-1-8-1, 0, 30*8-1) + MDRV_GFXDECODE(mwarr) MDRV_PALETTE_LENGTH(0x800) MDRV_VIDEO_START(mwarr) MDRV_VIDEO_UPDATE(mwarr) + /* sound hardware */ MDRV_SPEAKER_STANDARD_MONO("mono") MDRV_SOUND_ADD("oki1", OKIM6295, SOUND_CLOCK/48 ) @@ -485,6 +569,12 @@ static MACHINE_DRIVER_START( mwarr ) MACHINE_DRIVER_END +/************************************* + * + * ROM definition(s) + * + *************************************/ + ROM_START( mwarr ) ROM_REGION( 0x100000, "maincpu", 0 ) /* 68000 Code */ ROM_LOAD16_BYTE( "prg_ev", 0x00000, 0x80000, CRC(d1d5e0a6) SHA1(f47955459d41c904b96de000b32cae156ee3bcba) ) @@ -545,4 +635,10 @@ ROM_START( mwarr ) ROM_COPY( "user1", 0x060000, 0x0e0000, 0x020000) ROM_END -GAME( 199?, mwarr, 0, mwarr, mwarr, 0, ROT0, "Elettronica Video-Games S.R.L.", "Mighty Warriors", 0 ) +/************************************* + * + * Game driver(s) + * + *************************************/ + +GAME( 199?, mwarr, 0, mwarr, mwarr, 0, ROT0, "Elettronica Video-Games S.R.L.", "Mighty Warriors", GAME_SUPPORTS_SAVE ) diff --git a/src/mame/includes/matmania.h b/src/mame/includes/matmania.h index fc6846d9db6..044f3c58b18 100644 --- a/src/mame/includes/matmania.h +++ b/src/mame/includes/matmania.h @@ -1,14 +1,52 @@ + +typedef struct _matmania_state matmania_state; +struct _matmania_state +{ + /* memory pointers */ + UINT8 * videoram; + UINT8 * videoram2; + UINT8 * videoram3; + UINT8 * colorram; + UINT8 * colorram2; + UINT8 * colorram3; + UINT8 * scroll; + UINT8 * pageselect; + UINT8 * spriteram; + UINT8 * paletteram; + size_t videoram_size; + size_t videoram2_size; + size_t videoram3_size; + size_t spriteram_size; + + /* video-related */ + bitmap_t *tmpbitmap; + bitmap_t *tmpbitmap2; + + /* mcu */ + /* maniach 68705 protection */ + UINT8 port_a_in, port_a_out, ddr_a; + UINT8 port_b_in, port_b_out, ddr_b; + UINT8 port_c_in, port_c_out, ddr_c; + UINT8 from_main, from_mcu; + int mcu_sent, main_sent; + + /* devices */ + running_device *maincpu; + running_device *audiocpu; + running_device *mcu; +}; + /*----------- defined in machine/maniach.c -----------*/ -READ8_HANDLER( maniach_68705_portA_r ); -WRITE8_HANDLER( maniach_68705_portA_w ); -READ8_HANDLER( maniach_68705_portB_r ); -WRITE8_HANDLER( maniach_68705_portB_w ); -READ8_HANDLER( maniach_68705_portC_r ); -WRITE8_HANDLER( maniach_68705_portC_w ); -WRITE8_HANDLER( maniach_68705_ddrA_w ); -WRITE8_HANDLER( maniach_68705_ddrB_w ); -WRITE8_HANDLER( maniach_68705_ddrC_w ); +READ8_HANDLER( maniach_68705_port_a_r ); +WRITE8_HANDLER( maniach_68705_port_a_w ); +READ8_HANDLER( maniach_68705_port_b_r ); +WRITE8_HANDLER( maniach_68705_port_b_w ); +READ8_HANDLER( maniach_68705_port_c_r ); +WRITE8_HANDLER( maniach_68705_port_c_w ); +WRITE8_HANDLER( maniach_68705_ddr_a_w ); +WRITE8_HANDLER( maniach_68705_ddr_b_w ); +WRITE8_HANDLER( maniach_68705_ddr_c_w ); WRITE8_HANDLER( maniach_mcu_w ); READ8_HANDLER( maniach_mcu_r ); READ8_HANDLER( maniach_mcu_status_r ); @@ -16,15 +54,6 @@ READ8_HANDLER( maniach_mcu_status_r ); /*----------- defined in video/matmania.c -----------*/ -extern UINT8 *matmania_videoram,*matmania_colorram; -extern size_t matmania_videoram_size; -extern UINT8 *matmania_videoram2,*matmania_colorram2; -extern size_t matmania_videoram2_size; -extern UINT8 *matmania_videoram3,*matmania_colorram3; -extern size_t matmania_videoram3_size; -extern UINT8 *matmania_scroll; -extern UINT8 *matmania_pageselect; - WRITE8_HANDLER( matmania_paletteram_w ); PALETTE_INIT( matmania ); VIDEO_UPDATE( maniach ); diff --git a/src/mame/includes/metlclsh.h b/src/mame/includes/metlclsh.h new file mode 100644 index 00000000000..88d1cf0388c --- /dev/null +++ b/src/mame/includes/metlclsh.h @@ -0,0 +1,38 @@ +/************************************************************************* + + Metal Clash + +*************************************************************************/ + +typedef struct _metlclsh_state metlclsh_state; +struct _metlclsh_state +{ + /* memory pointers */ + UINT8 * bgram; + UINT8 * fgram; + UINT8 * scrollx; + UINT8 * otherram; +// UINT8 * paletteram; // currently this uses generic palette handling +// UINT8 * paletteram2; // currently this uses generic palette handling + UINT8 * spriteram; + size_t spriteram_size; + + /* video-related */ + tilemap_t *bg_tilemap,*fg_tilemap; + UINT8 write_mask, gfxbank; + + /* devices */ + running_device *maincpu; + running_device *subcpu; +}; + + +/*----------- defined in video/metlclsh.c -----------*/ + +WRITE8_HANDLER( metlclsh_bgram_w ); +WRITE8_HANDLER( metlclsh_fgram_w ); +WRITE8_HANDLER( metlclsh_gfxbank_w ); +WRITE8_HANDLER( metlclsh_rambank_w ); + +VIDEO_START( metlclsh ); +VIDEO_UPDATE( metlclsh ); diff --git a/src/mame/includes/mexico86.h b/src/mame/includes/mexico86.h index c168bc40eea..65a822bcdd0 100644 --- a/src/mame/includes/mexico86.h +++ b/src/mame/includes/mexico86.h @@ -1,23 +1,49 @@ -/*----------- defined in machine/mexico86.c -----------*/ -extern UINT8 *mexico86_protection_ram; +typedef struct _mexico86_state mexico86_state; +struct _mexico86_state +{ + /* memory pointers */ + UINT8 * protection_ram; + UINT8 * videoram; + UINT8 * objectram; + size_t objectram_size; + + /* video-related */ + int charbank; + + /* mcu */ + /* mexico86 68705 protection */ + UINT8 port_a_in, port_a_out, ddr_a; + UINT8 port_b_in, port_b_out, ddr_b; + int address, latch; + /* kikikai mcu simulation */ + int mcu_running, mcu_initialised; + int coin_last; + + /* devices */ + running_device *maincpu; + running_device *audiocpu; + running_device *subcpu; + running_device *mcu; +}; + + +/*----------- defined in machine/mexico86.c -----------*/ WRITE8_HANDLER( mexico86_f008_w ); INTERRUPT_GEN( kikikai_interrupt ); INTERRUPT_GEN( mexico86_m68705_interrupt ); -READ8_HANDLER( mexico86_68705_portA_r ); -WRITE8_HANDLER( mexico86_68705_portA_w ); -WRITE8_HANDLER( mexico86_68705_ddrA_w ); -READ8_HANDLER( mexico86_68705_portB_r ); -WRITE8_HANDLER( mexico86_68705_portB_w ); -WRITE8_HANDLER( mexico86_68705_ddrB_w ); +READ8_HANDLER( mexico86_68705_port_a_r ); +WRITE8_HANDLER( mexico86_68705_port_a_w ); +WRITE8_HANDLER( mexico86_68705_ddr_a_w ); +READ8_HANDLER( mexico86_68705_port_b_r ); +WRITE8_HANDLER( mexico86_68705_port_b_w ); +WRITE8_HANDLER( mexico86_68705_ddr_b_w ); /*----------- defined in video/mexico86.c -----------*/ -extern UINT8 *mexico86_videoram,*mexico86_objectram; -extern size_t mexico86_objectram_size; - WRITE8_HANDLER( mexico86_bankswitch_w ); + VIDEO_UPDATE( mexico86 ); VIDEO_UPDATE( kikikai ); diff --git a/src/mame/includes/mosaic.h b/src/mame/includes/mosaic.h new file mode 100644 index 00000000000..8696c0137ca --- /dev/null +++ b/src/mame/includes/mosaic.h @@ -0,0 +1,29 @@ +/************************************************************************* + + Mosaic + +*************************************************************************/ + +typedef struct _mosaic_state mosaic_state; +struct _mosaic_state +{ + /* memory pointers */ + UINT8 * fgvideoram; + UINT8 * bgvideoram; +// UINT8 * paletteram; // currently this uses generic palette handling + + /* video-related */ + tilemap_t *bg_tilemap,*fg_tilemap; + + /* misc */ + int prot_val; +}; + + +/*----------- defined in video/mosaic.c -----------*/ + +WRITE8_HANDLER( mosaic_fgvideoram_w ); +WRITE8_HANDLER( mosaic_bgvideoram_w ); + +VIDEO_START( mosaic ); +VIDEO_UPDATE( mosaic ); diff --git a/src/mame/includes/mouser.h b/src/mame/includes/mouser.h new file mode 100644 index 00000000000..3f58b32fa4d --- /dev/null +++ b/src/mame/includes/mouser.h @@ -0,0 +1,31 @@ +/************************************************************************* + + Mouser + +*************************************************************************/ + +typedef struct _mouser_state mouser_state; +struct _mouser_state +{ + /* memory pointers */ + UINT8 * videoram; + UINT8 * colorram; + UINT8 * spriteram; + size_t spriteram_size; + + /* misc */ + UINT8 sound_byte; + UINT8 nmi_enable; + + /* devices */ + running_device *maincpu; + running_device *audiocpu; +}; + +/*----------- defined in video/mouser.c -----------*/ + +WRITE8_HANDLER( mouser_flip_screen_x_w ); +WRITE8_HANDLER( mouser_flip_screen_y_w ); + +PALETTE_INIT( mouser ); +VIDEO_UPDATE( mouser ); diff --git a/src/mame/includes/mrdo.h b/src/mame/includes/mrdo.h new file mode 100644 index 00000000000..5420eabe156 --- /dev/null +++ b/src/mame/includes/mrdo.h @@ -0,0 +1,32 @@ +/************************************************************************* + + Mr. Do + +*************************************************************************/ + +typedef struct _mrdo_state mrdo_state; +struct _mrdo_state +{ + /* memory pointers */ + UINT8 * bgvideoram; + UINT8 * fgvideoram; + UINT8 * spriteram; + size_t spriteram_size; + + /* video-related */ + tilemap_t *bg_tilemap, *fg_tilemap; + int flipscreen; +}; + + +/*----------- defined in video/mrdo.c -----------*/ + +WRITE8_HANDLER( mrdo_bgvideoram_w ); +WRITE8_HANDLER( mrdo_fgvideoram_w ); +WRITE8_HANDLER( mrdo_scrollx_w ); +WRITE8_HANDLER( mrdo_scrolly_w ); +WRITE8_HANDLER( mrdo_flipscreen_w ); + +PALETTE_INIT( mrdo ); +VIDEO_START( mrdo ); +VIDEO_UPDATE( mrdo ); diff --git a/src/mame/includes/mrflea.h b/src/mame/includes/mrflea.h new file mode 100644 index 00000000000..227472efa2f --- /dev/null +++ b/src/mame/includes/mrflea.h @@ -0,0 +1,36 @@ +/************************************************************************* + + Mr. Flea + +*************************************************************************/ + +typedef struct _mrflea_state mrflea_state; +struct _mrflea_state +{ + /* memory pointers */ + UINT8 * videoram; + UINT8 * spriteram; +// UINT8 * paletteram; // currently this uses generic palette handling + + /* video-related */ + int gfx_bank; + + /* misc */ + int io; + int main; + int status; + int select1; + + /* devices */ + running_device *maincpu; + running_device *subcpu; +}; + + +/*----------- defined in video/mrflea.c -----------*/ + +WRITE8_HANDLER( mrflea_gfx_bank_w ); +WRITE8_HANDLER( mrflea_videoram_w ); +WRITE8_HANDLER( mrflea_spriteram_w ); + +VIDEO_UPDATE( mrflea ); diff --git a/src/mame/includes/mrjong.h b/src/mame/includes/mrjong.h new file mode 100644 index 00000000000..5484ff48649 --- /dev/null +++ b/src/mame/includes/mrjong.h @@ -0,0 +1,27 @@ +/************************************************************************* + + Mr. Jong + +*************************************************************************/ + +typedef struct _mrjong_state mrjong_state; +struct _mrjong_state +{ + /* memory pointers */ + UINT8 * videoram; + UINT8 * colorram; + + /* video-related */ + tilemap_t *bg_tilemap; +}; + + +/*----------- defined in video/mrjong.c -----------*/ + +WRITE8_HANDLER( mrjong_videoram_w ); +WRITE8_HANDLER( mrjong_colorram_w ); +WRITE8_HANDLER( mrjong_flipscreen_w ); + +PALETTE_INIT( mrjong ); +VIDEO_START( mrjong ); +VIDEO_UPDATE( mrjong ); diff --git a/src/mame/includes/mugsmash.h b/src/mame/includes/mugsmash.h index c2986b57b4c..bd2c30b609f 100644 --- a/src/mame/includes/mugsmash.h +++ b/src/mame/includes/mugsmash.h @@ -1,3 +1,4 @@ + typedef struct _mugsmash_state mugsmash_state; struct _mugsmash_state { @@ -6,8 +7,12 @@ struct _mugsmash_state UINT16 *spriteram; UINT16 *regs1; UINT16 *regs2; + tilemap_t *tilemap1; tilemap_t *tilemap2; + + running_device *maincpu; + running_device *audiocpu; }; diff --git a/src/mame/includes/munchmo.h b/src/mame/includes/munchmo.h new file mode 100644 index 00000000000..d79d08d069e --- /dev/null +++ b/src/mame/includes/munchmo.h @@ -0,0 +1,40 @@ +/************************************************************************* + + Munch Mobile + +*************************************************************************/ + +typedef struct _munchmo_state munchmo_state; +struct _munchmo_state +{ + /* memory pointers */ + UINT8 * vreg; + UINT8 * status_vram; + UINT8 * sprite_xpos; + UINT8 * sprite_attr; + UINT8 * sprite_tile; + UINT8 * videoram; + + /* video-related */ + bitmap_t *tmpbitmap; + int palette_bank; + int flipscreen; + + /* misc */ + int nmi_enable; + int which; + + /* devices */ + running_device *maincpu; + running_device *audiocpu; +}; + + +/*----------- defined in video/munchmo.c -----------*/ + +WRITE8_HANDLER( mnchmobl_palette_bank_w ); +WRITE8_HANDLER( mnchmobl_flipscreen_w ); + +PALETTE_INIT( mnchmobl ); +VIDEO_START( mnchmobl ); +VIDEO_UPDATE( mnchmobl ); diff --git a/src/mame/machine/maniach.c b/src/mame/machine/maniach.c index 390c710caf1..1e3a6b15b6e 100644 --- a/src/mame/machine/maniach.c +++ b/src/mame/machine/maniach.c @@ -11,10 +11,6 @@ #include "includes/matmania.h" -static UINT8 from_main,from_mcu; -static int mcu_sent = 0,main_sent = 0; - - /*************************************************************************** Mania Challenge 68705 protection interface @@ -23,23 +19,26 @@ static int mcu_sent = 0,main_sent = 0; ***************************************************************************/ -static UINT8 portA_in,portA_out,ddrA; - -READ8_HANDLER( maniach_68705_portA_r ) +READ8_HANDLER( maniach_68705_port_a_r ) { -//logerror("%04x: 68705 port A read %02x\n",cpu_get_pc(space->cpu),portA_in); - return (portA_out & ddrA) | (portA_in & ~ddrA); + matmania_state *state = (matmania_state *)space->machine->driver_data; + + //logerror("%04x: 68705 port A read %02x\n", cpu_get_pc(space->cpu), state->port_a_in); + return (state->port_a_out & state->ddr_a) | (state->port_a_in & ~state->ddr_a); } -WRITE8_HANDLER( maniach_68705_portA_w ) +WRITE8_HANDLER( maniach_68705_port_a_w ) { -//logerror("%04x: 68705 port A write %02x\n",cpu_get_pc(space->cpu),data); - portA_out = data; + matmania_state *state = (matmania_state *)space->machine->driver_data; + + //logerror("%04x: 68705 port A write %02x\n", cpu_get_pc(space->cpu), data); + state->port_a_out = data; } -WRITE8_HANDLER( maniach_68705_ddrA_w ) +WRITE8_HANDLER( maniach_68705_ddr_a_w ) { - ddrA = data; + matmania_state *state = (matmania_state *)space->machine->driver_data; + state->ddr_a = data; } @@ -53,85 +52,103 @@ WRITE8_HANDLER( maniach_68705_ddrA_w ) * 2 W when 0->1, copies port A to the latch for the main CPU */ -static UINT8 portB_in,portB_out,ddrB; - -READ8_HANDLER( maniach_68705_portB_r ) +READ8_HANDLER( maniach_68705_port_b_r ) { - return (portB_out & ddrB) | (portB_in & ~ddrB); + matmania_state *state = (matmania_state *)space->machine->driver_data; + return (state->port_b_out & state->ddr_b) | (state->port_b_in & ~state->ddr_b); } -WRITE8_HANDLER( maniach_68705_portB_w ) +WRITE8_HANDLER( maniach_68705_port_b_w ) { -//logerror("%04x: 68705 port B write %02x\n",cpu_get_pc(space->cpu),data); + matmania_state *state = (matmania_state *)space->machine->driver_data; - if ((ddrB & 0x02) && (~data & 0x02) && (portB_out & 0x02)) + //logerror("%04x: 68705 port B write %02x\n", cpu_get_pc(space->cpu), data); + + if (BIT(state->ddr_b, 1) && BIT(~data, 1) && BIT(state->port_b_out, 1)) { - portA_in = from_main; - main_sent = 0; -//logerror("read command %02x from main cpu\n",portA_in); + state->port_a_in = state->from_main; + state->main_sent = 0; + //logerror("read command %02x from main cpu\n", state->port_a_in); } - if ((ddrB & 0x04) && (data & 0x04) && (~portB_out & 0x04)) + if (BIT(state->ddr_b, 2) && BIT(data, 2) && BIT(~state->port_b_out, 2)) { -//logerror("send command %02x to main cpu\n",portA_out); - from_mcu = portA_out; - mcu_sent = 1; + //logerror("send command %02x to main cpu\n", state->port_a_out); + state->from_mcu = state->port_a_out; + state->mcu_sent = 1; } - portB_out = data; + state->port_b_out = data; } -WRITE8_HANDLER( maniach_68705_ddrB_w ) +WRITE8_HANDLER( maniach_68705_ddr_b_w ) { - ddrB = data; + matmania_state *state = (matmania_state *)space->machine->driver_data; + state->ddr_b = data; } -static UINT8 portC_in,portC_out,ddrC; - -READ8_HANDLER( maniach_68705_portC_r ) +READ8_HANDLER( maniach_68705_port_c_r ) { - portC_in = 0; - if (main_sent) portC_in |= 0x01; - if (!mcu_sent) portC_in |= 0x02; -//logerror("%04x: 68705 port C read %02x\n",cpu_get_pc(space->cpu),portC_in); - return (portC_out & ddrC) | (portC_in & ~ddrC); + matmania_state *state = (matmania_state *)space->machine->driver_data; + + state->port_c_in = 0; + + if (state->main_sent) + state->port_c_in |= 0x01; + + if (!state->mcu_sent) + state->port_c_in |= 0x02; + + //logerror("%04x: 68705 port C read %02x\n",state->cpu_get_pc(space->cpu), state->port_c_in); + + return (state->port_c_out & state->ddr_c) | (state->port_c_in & ~state->ddr_c); } -WRITE8_HANDLER( maniach_68705_portC_w ) +WRITE8_HANDLER( maniach_68705_port_c_w ) { -//logerror("%04x: 68705 port C write %02x\n",cpu_get_pc(space->cpu),data); - portC_out = data; + matmania_state *state = (matmania_state *)space->machine->driver_data; + + //logerror("%04x: 68705 port C write %02x\n", cpu_get_pc(space->cpu), data); + state->port_c_out = data; } -WRITE8_HANDLER( maniach_68705_ddrC_w ) +WRITE8_HANDLER( maniach_68705_ddr_c_w ) { - ddrC = data; + matmania_state *state = (matmania_state *)space->machine->driver_data; + state->ddr_c = data; } WRITE8_HANDLER( maniach_mcu_w ) { -//logerror("%04x: 3040_w %02x\n",cpu_get_pc(space->cpu),data); - from_main = data; - main_sent = 1; + matmania_state *state = (matmania_state *)space->machine->driver_data; + + //logerror("%04x: 3040_w %02x\n", cpu_get_pc(space->cpu), data); + state->from_main = data; + state->main_sent = 1; } READ8_HANDLER( maniach_mcu_r ) { -//logerror("%04x: 3040_r %02x\n",cpu_get_pc(space->cpu),from_mcu); - mcu_sent = 0; - return from_mcu; + matmania_state *state = (matmania_state *)space->machine->driver_data; + + //logerror("%04x: 3040_r %02x\n", cpu_get_pc(space->cpu), state->from_mcu); + state->mcu_sent = 0; + return state->from_mcu; } READ8_HANDLER( maniach_mcu_status_r ) { + matmania_state *state = (matmania_state *)space->machine->driver_data; int res = 0; /* bit 0 = when 0, mcu has sent data to the main cpu */ /* bit 1 = when 1, mcu is ready to receive data from main cpu */ -//logerror("%04x: 3041_r\n",cpu_get_pc(space->cpu)); - if (!mcu_sent) res |= 0x01; - if (!main_sent) res |= 0x02; + //logerror("%04x: 3041_r\n", cpu_get_pc(space->cpu)); + if (!state->mcu_sent) + res |= 0x01; + if (!state->main_sent) + res |= 0x02; return res; } diff --git a/src/mame/machine/mexico86.c b/src/mame/machine/mexico86.c index 5a9244e3089..ee340fc5a1b 100644 --- a/src/mame/machine/mexico86.c +++ b/src/mame/machine/mexico86.c @@ -2,13 +2,6 @@ #include "deprecat.h" #include "includes/mexico86.h" - -UINT8 *mexico86_protection_ram; - - -static int kikikai_mcu_running, kikikai_mcu_initialised; - - /* $f008 - write bit 7 = ? (unused?) @@ -22,18 +15,22 @@ bit 0 = ? (unused?) */ WRITE8_HANDLER( mexico86_f008_w ) { - cputag_set_input_line(space->machine, "audiocpu", INPUT_LINE_RESET, (data & 4) ? CLEAR_LINE : ASSERT_LINE); - if (devtag_get_device(space->machine, "mcu") != NULL) + mexico86_state *state = (mexico86_state *)space->machine->driver_data; + + cpu_set_input_line(state->audiocpu, INPUT_LINE_RESET, (data & 4) ? CLEAR_LINE : ASSERT_LINE); + + if (state->mcu != NULL) { // mexico 86, knight boy - cputag_set_input_line(space->machine, "mcu", INPUT_LINE_RESET, (data & 2) ? CLEAR_LINE : ASSERT_LINE); + cpu_set_input_line(state->mcu, INPUT_LINE_RESET, (data & 2) ? CLEAR_LINE : ASSERT_LINE); } else { // simulation for KiKi KaiKai - kikikai_mcu_running = data & 2; - if (!kikikai_mcu_running) - kikikai_mcu_initialised = 0; + state->mcu_running = data & 2; + + if (!state->mcu_running) + state->mcu_initialised = 0; } } @@ -47,67 +44,66 @@ WRITE8_HANDLER( mexico86_f008_w ) ***************************************************************************/ -static void mcu_simulate(running_machine *machine) +static void mcu_simulate( running_machine *machine ) { - if (!kikikai_mcu_initialised) + mexico86_state *state = (mexico86_state *)machine->driver_data; + + if (!state->mcu_initialised) { - if (mexico86_protection_ram[0x01] == 0x00) + if (state->protection_ram[0x01] == 0x00) { -logerror("initialising MCU\n"); - mexico86_protection_ram[0x04] = 0xfc; // coin inputs - mexico86_protection_ram[0x02] = 0xff; // player 1 - mexico86_protection_ram[0x03] = 0xff; // player 2 - mexico86_protection_ram[0x1b] = 0xff; // active player - mexico86_protection_ram[0x06] = 0xff; // must be FF otherwise PS4 ERROR - mexico86_protection_ram[0x07] = 0x03; // must be 03 otherwise PS4 ERROR - mexico86_protection_ram[0x00] = 0x00; - kikikai_mcu_initialised = 1; + logerror("initialising MCU\n"); + state->protection_ram[0x04] = 0xfc; // coin inputs + state->protection_ram[0x02] = 0xff; // player 1 + state->protection_ram[0x03] = 0xff; // player 2 + state->protection_ram[0x1b] = 0xff; // active player + state->protection_ram[0x06] = 0xff; // must be FF otherwise PS4 ERROR + state->protection_ram[0x07] = 0x03; // must be 03 otherwise PS4 ERROR + state->protection_ram[0x00] = 0x00; + state->mcu_initialised = 1; } } - if (kikikai_mcu_initialised) + if (state->mcu_initialised) { int i; - static int coin_last; int coin_curr; - coin_curr = ~input_port_read(machine, "IN0") & 1; - if (coin_curr && !coin_last && mexico86_protection_ram[0x01] < 9) + if (coin_curr && !state->coin_last && state->protection_ram[0x01] < 9) { - mexico86_protection_ram[0x01]++; // increase credits counter - mexico86_protection_ram[0x0a] = 0x01; // set flag (coin inserted sound is not played otherwise) + state->protection_ram[0x01]++; // increase credits counter + state->protection_ram[0x0a] = 0x01; // set flag (coin inserted sound is not played otherwise) } - coin_last = coin_curr; + state->coin_last = coin_curr; - mexico86_protection_ram[0x04] = 0x3c; // coin inputs + state->protection_ram[0x04] = 0x3c; // coin inputs - mexico86_protection_ram[0x02] = BITSWAP8(input_port_read(machine, "IN1"), 7,6,5,4,2,3,1,0); // player 1 - mexico86_protection_ram[0x03] = BITSWAP8(input_port_read(machine, "IN2"), 7,6,5,4,2,3,1,0); // player 2 + state->protection_ram[0x02] = BITSWAP8(input_port_read(machine, "IN1"), 7,6,5,4,2,3,1,0); // player 1 + state->protection_ram[0x03] = BITSWAP8(input_port_read(machine, "IN2"), 7,6,5,4,2,3,1,0); // player 2 - if (mexico86_protection_ram[0x19] == 0xaa) // player 2 active - mexico86_protection_ram[0x1b] = mexico86_protection_ram[0x03]; + if (state->protection_ram[0x19] == 0xaa) // player 2 active + state->protection_ram[0x1b] = state->protection_ram[0x03]; else - mexico86_protection_ram[0x1b] = mexico86_protection_ram[0x02]; + state->protection_ram[0x1b] = state->protection_ram[0x02]; for (i = 0; i < 0x10; i += 2) - mexico86_protection_ram[i + 0xb1] = mexico86_protection_ram[i + 0xb0]; + state->protection_ram[i + 0xb1] = state->protection_ram[i + 0xb0]; for (i = 0; i < 0x0a; i++) - mexico86_protection_ram[i + 0xc0] = mexico86_protection_ram[i + 0x90] + 1; + state->protection_ram[i + 0xc0] = state->protection_ram[i + 0x90] + 1; - if (mexico86_protection_ram[0xd1] == 0xff) + if (state->protection_ram[0xd1] == 0xff) { - if (mexico86_protection_ram[0xd0] > 0 && mexico86_protection_ram[0xd0] < 4) + if (state->protection_ram[0xd0] > 0 && state->protection_ram[0xd0] < 4) { - mexico86_protection_ram[0xd2] = 0x81; - mexico86_protection_ram[0xd0] = 0xff; + state->protection_ram[0xd2] = 0x81; + state->protection_ram[0xd0] = 0xff; } } - - if (mexico86_protection_ram[0xe0] > 0 && mexico86_protection_ram[0xe0] < 4) + if (state->protection_ram[0xe0] > 0 && state->protection_ram[0xe0] < 4) { static const UINT8 answers[3][16] = { @@ -115,17 +111,17 @@ logerror("initialising MCU\n"); { 0x00,0x04,0x08,0x0C,0x10,0x14,0x18,0x1C,0x20,0x31,0x2B,0x35,0x00,0x00,0x00,0x00 }, { 0x00,0x0C,0x0D,0x0E,0x0F,0x10,0x11,0x12,0x03,0x0A,0x0B,0x14,0x00,0x00,0x00,0x00 }, }; - int table = mexico86_protection_ram[0xe0] - 1; + int table = state->protection_ram[0xe0] - 1; for (i = 1; i < 0x10; i++) - mexico86_protection_ram[0xe0 + i] = answers[table][i]; - mexico86_protection_ram[0xe0] = 0xff; + state->protection_ram[0xe0 + i] = answers[table][i]; + state->protection_ram[0xe0] = 0xff; } - if (mexico86_protection_ram[0xf0] > 0 && mexico86_protection_ram[0xf0] < 4) + if (state->protection_ram[0xf0] > 0 && state->protection_ram[0xf0] < 4) { - mexico86_protection_ram[0xf1] = 0xb3; - mexico86_protection_ram[0xf0] = 0xff; + state->protection_ram[0xf1] = 0xb3; + state->protection_ram[0xf0] = 0xff; } @@ -133,21 +129,21 @@ logerror("initialising MCU\n"); // this should be equivalent to the obfuscated kiki_clogic() below { static const UINT8 db[16]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x10,0x18,0x00,0x00,0x00,0x00}; - UINT16 sy = mexico86_protection_ram[0xa0] + ((0x18)>>1); - UINT16 sx = mexico86_protection_ram[0xa1] + ((0x18)>>1); + UINT16 sy = state->protection_ram[0xa0] + ((0x18) >> 1); + UINT16 sx = state->protection_ram[0xa1] + ((0x18) >> 1); for (i = 0; i < 0x38; i += 8) { - UINT8 hw = db[mexico86_protection_ram[0x20 + i] & 0xf]; + UINT8 hw = db[state->protection_ram[0x20 + i] & 0xf]; if (hw) { - UINT16 xdiff = sx - ((UINT16)mexico86_protection_ram[0x20 + i+6] << 8 | mexico86_protection_ram[0x20 + i+7]); + UINT16 xdiff = sx - ((UINT16)state->protection_ram[0x20 + i + 6] << 8 | state->protection_ram[0x20 + i + 7]); if (xdiff < hw) { - UINT16 ydiff = sy - ((UINT16)mexico86_protection_ram[0x20 + i+4] << 8 | mexico86_protection_ram[0x20 + i+5]); + UINT16 ydiff = sy - ((UINT16)state->protection_ram[0x20 + i + 4] << 8 | state->protection_ram[0x20 + i + 5]); if (ydiff < hw) - mexico86_protection_ram[0xa2] = 1; // we have a collision + state->protection_ram[0xa2] = 1; // we have a collision } } } @@ -158,11 +154,13 @@ logerror("initialising MCU\n"); INTERRUPT_GEN( kikikai_interrupt ) { - if (kikikai_mcu_running) + mexico86_state *state = (mexico86_state *)device->machine->driver_data; + + if (state->mcu_running) mcu_simulate(device->machine); - cpu_set_input_line_vector(device,0,mexico86_protection_ram[0]); - cpu_set_input_line(device,0,HOLD_LINE); + cpu_set_input_line_vector(device, 0, state->protection_ram[0]); + cpu_set_input_line(device, 0, HOLD_LINE); } @@ -179,8 +177,9 @@ INTERRUPT_GEN( kikikai_interrupt ) #define DCWIDTH 0 #define DCHEIGHT 0 -static void kiki_clogic(int address, int latch) +static void kiki_clogic(running_machine *machine, int address, int latch) { + mexico86_state *state = (mexico86_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; @@ -208,7 +207,7 @@ static void kiki_clogic(int address, int latch) diff1 = sy - (short)(queue[(qptr+4)&0x3f]<<8|queue[(qptr+5)&0x3f]) + DCHEIGHT; diff2 = diff1 - (hw + DCHEIGHT); if ((diff1^diff2)<0) - mexico86_protection_ram[KIKI_CL_OUT] = 1; // we have a collision + state->protection_ram[KIKI_CL_OUT] = 1; // we have a collision } } } @@ -229,30 +228,32 @@ INTERRUPT_GEN( mexico86_m68705_interrupt ) { /* I don't know how to handle the interrupt line so I just toggle it every time. */ if (cpu_getiloops(device) & 1) - cpu_set_input_line(device,0,CLEAR_LINE); + cpu_set_input_line(device, 0, CLEAR_LINE); else - cpu_set_input_line(device,0,ASSERT_LINE); + cpu_set_input_line(device, 0, ASSERT_LINE); } - -static UINT8 portA_in,portA_out,ddrA; - -READ8_HANDLER( mexico86_68705_portA_r ) +READ8_HANDLER( mexico86_68705_port_a_r ) { -//logerror("%04x: 68705 port A read %02x\n",cpu_get_pc(space->cpu),portA_in); - return (portA_out & ddrA) | (portA_in & ~ddrA); + mexico86_state *state = (mexico86_state *)space->machine->driver_data; + + //logerror("%04x: 68705 port A read %02x\n", cpu_get_pc(space->cpu), state->port_a_in); + return (state->port_a_out & state->ddr_a) | (state->port_a_in & ~state->ddr_a); } -WRITE8_HANDLER( mexico86_68705_portA_w ) +WRITE8_HANDLER( mexico86_68705_port_a_w ) { -//logerror("%04x: 68705 port A write %02x\n",cpu_get_pc(space->cpu),data); - portA_out = data; + mexico86_state *state = (mexico86_state *)space->machine->driver_data; + + //logerror("%04x: 68705 port A write %02x\n", cpu_get_pc(space->cpu), data); + state->port_a_out = data; } -WRITE8_HANDLER( mexico86_68705_ddrA_w ) +WRITE8_HANDLER( mexico86_68705_ddr_a_w ) { - ddrA = data; + mexico86_state *state = (mexico86_state *)space->machine->driver_data; + state->ddr_a = data; } @@ -273,67 +274,71 @@ WRITE8_HANDLER( mexico86_68705_ddrA_w ) * 7 W not used? */ -static UINT8 portB_in,portB_out,ddrB; - -READ8_HANDLER( mexico86_68705_portB_r ) +READ8_HANDLER( mexico86_68705_port_b_r ) { - return (portB_out & ddrB) | (portB_in & ~ddrB); + mexico86_state *state = (mexico86_state *)space->machine->driver_data; + return (state->port_b_out & state->ddr_b) | (state->port_b_in & ~state->ddr_b); } -static int address,latch; - -WRITE8_HANDLER( mexico86_68705_portB_w ) +WRITE8_HANDLER( mexico86_68705_port_b_w ) { -//logerror("%04x: 68705 port B write %02x\n",cpu_get_pc(space->cpu),data); + mexico86_state *state = (mexico86_state *)space->machine->driver_data; + //logerror("%04x: 68705 port B write %02x\n", cpu_get_pc(space->cpu), data); - if ((ddrB & 0x01) && (~data & 0x01) && (portB_out & 0x01)) + if (BIT(state->ddr_b, 0) && BIT(~data, 0) && BIT(state->port_b_out, 0)) { - portA_in = latch; + state->port_a_in = state->latch; } - if ((ddrB & 0x02) && (data & 0x02) && (~portB_out & 0x02)) /* positive edge trigger */ + + if (BIT(state->ddr_b, 1) && BIT(data, 1) && BIT(~state->port_b_out, 1)) /* positive edge trigger */ { - address = portA_out; -//if (address >= 0x80) logerror("%04x: 68705 address %02x\n",cpu_get_pc(space->cpu),portA_out); + state->address = state->port_a_out; + //if (state->address >= 0x80) logerror("%04x: 68705 address %02x\n", cpu_get_pc(space->cpu), state->port_a_out); } - if ((ddrB & 0x08) && (~data & 0x08) && (portB_out & 0x08)) + + if (BIT(state->ddr_b, 3) && BIT(~data, 3) && BIT(state->port_b_out, 3)) { if (data & 0x10) /* read */ { if (data & 0x04) { -//logerror("%04x: 68705 read %02x from address %04x\n",cpu_get_pc(space->cpu),shared[0x800+address],address); - latch = mexico86_protection_ram[address]; + //logerror("%04x: 68705 read %02x from address %04x\n", cpu_get_pc(space->cpu), state->protection_ram[state->address], state->address); + state->latch = state->protection_ram[state->address]; } else { -//logerror("%04x: 68705 read input port %04x\n",cpu_get_pc(space->cpu),address); - latch = input_port_read(space->machine, (address & 1) ? "IN2" : "IN1"); + //logerror("%04x: 68705 read input port %04x\n", cpu_get_pc(space->cpu), state->address); + state->latch = input_port_read(space->machine, (state->address & 1) ? "IN2" : "IN1"); } } else /* write */ { -//logerror("%04x: 68705 write %02x to address %04x\n",cpu_get_pc(space->cpu),portA_out,address); - mexico86_protection_ram[address] = portA_out; + //logerror("%04x: 68705 write %02x to address %04x\n",cpu_get_pc(space->cpu), port_a_out, state->address); + state->protection_ram[state->address] = state->port_a_out; } } - if ((ddrB & 0x20) && (data & 0x20) && (~portB_out & 0x20)) + + if (BIT(state->ddr_b, 5) && BIT(data, 5) && BIT(~state->port_b_out, 5)) { - cpu_set_input_line_vector(devtag_get_device(space->machine, "maincpu"), 0, mexico86_protection_ram[0]); - cputag_set_input_line(space->machine, "maincpu", 0, HOLD_LINE); //AT: HOLD_LINE works better in Z80 interrupt mode 1. - } - if ((ddrB & 0x40) && (~data & 0x40) && (portB_out & 0x40)) - { -logerror("%04x: 68705 unknown port B bit %02x\n",cpu_get_pc(space->cpu),data); - } - if ((ddrB & 0x80) && (~data & 0x80) && (portB_out & 0x80)) - { -logerror("%04x: 68705 unknown port B bit %02x\n",cpu_get_pc(space->cpu),data); + cpu_set_input_line_vector(state->maincpu, 0, state->protection_ram[0]); + cpu_set_input_line(state->maincpu, 0, HOLD_LINE); //AT: HOLD_LINE works better in Z80 interrupt mode 1. } - portB_out = data; + if (BIT(state->ddr_b, 6) && BIT(~data, 6) && BIT(state->port_b_out, 6)) + { + logerror("%04x: 68705 unknown port B bit %02x\n", cpu_get_pc(space->cpu), data); + } + + if (BIT(state->ddr_b, 7) && BIT(~data, 7) && BIT(state->port_b_out, 7)) + { + logerror("%04x: 68705 unknown port B bit %02x\n", cpu_get_pc(space->cpu), data); + } + + state->port_b_out = data; } -WRITE8_HANDLER( mexico86_68705_ddrB_w ) +WRITE8_HANDLER( mexico86_68705_ddr_b_w ) { - ddrB = data; + mexico86_state *state = (mexico86_state *)space->machine->driver_data; + state->ddr_b = data; } diff --git a/src/mame/video/matmania.c b/src/mame/video/matmania.c index 03d69a04bf6..4335b63a437 100644 --- a/src/mame/video/matmania.c +++ b/src/mame/video/matmania.c @@ -16,19 +16,6 @@ #include "includes/matmania.h" - -UINT8 *matmania_videoram,*matmania_colorram; -size_t matmania_videoram_size; -UINT8 *matmania_videoram2,*matmania_colorram2; -size_t matmania_videoram2_size; -UINT8 *matmania_videoram3,*matmania_colorram3; -size_t matmania_videoram3_size; -UINT8 *matmania_scroll; -static bitmap_t *tmpbitmap; -static bitmap_t *tmpbitmap2; - -UINT8 *matmania_pageselect; - /*************************************************************************** Convert the color PROMs into a more useable format. @@ -58,25 +45,24 @@ PALETTE_INIT( matmania ) { int i; - for (i = 0;i < 64;i++) + for (i = 0; i < 64; i++) { - int bit0,bit1,bit2,bit3,r,g,b; + int bit0, bit1, bit2, bit3, r, g, b; - - bit0 = (color_prom[0] >> 0) & 0x01; - bit1 = (color_prom[0] >> 1) & 0x01; - bit2 = (color_prom[0] >> 2) & 0x01; - bit3 = (color_prom[0] >> 3) & 0x01; + bit0 = BIT(color_prom[0], 0); + bit1 = BIT(color_prom[0], 1); + bit2 = BIT(color_prom[0], 2); + bit3 = BIT(color_prom[0], 3); r = 0x0e * bit0 + 0x1f * bit1 + 0x43 * bit2 + 0x8f * bit3; - bit0 = (color_prom[0] >> 4) & 0x01; - bit1 = (color_prom[0] >> 5) & 0x01; - bit2 = (color_prom[0] >> 6) & 0x01; - bit3 = (color_prom[0] >> 7) & 0x01; + bit0 = BIT(color_prom[0], 4); + bit1 = BIT(color_prom[0], 5); + bit2 = BIT(color_prom[0], 6); + bit3 = BIT(color_prom[0], 7); g = 0x0e * bit0 + 0x1f * bit1 + 0x43 * bit2 + 0x8f * bit3; - bit0 = (color_prom[64] >> 0) & 0x01; - bit1 = (color_prom[64] >> 1) & 0x01; - bit2 = (color_prom[64] >> 2) & 0x01; - bit3 = (color_prom[64] >> 3) & 0x01; + bit0 = BIT(color_prom[64], 0); + bit1 = BIT(color_prom[64], 1); + bit2 = BIT(color_prom[64], 2); + bit3 = BIT(color_prom[64], 3); b = 0x0e * bit0 + 0x1f * bit1 + 0x43 * bit2 + 0x8f * bit3; palette_set_color(machine,i,MAKE_RGB(r,g,b)); @@ -88,33 +74,33 @@ PALETTE_INIT( matmania ) WRITE8_HANDLER( matmania_paletteram_w ) { - int bit0,bit1,bit2,bit3,val; - int r,g,b; + matmania_state *state = (matmania_state *)space->machine->driver_data; + int bit0, bit1, bit2, bit3, val; + int r, g, b; int offs2; - - space->machine->generic.paletteram.u8[offset] = data; + state->paletteram[offset] = data; offs2 = offset & 0x0f; - val = space->machine->generic.paletteram.u8[offs2]; - bit0 = (val >> 0) & 0x01; - bit1 = (val >> 1) & 0x01; - bit2 = (val >> 2) & 0x01; - bit3 = (val >> 3) & 0x01; + val = state->paletteram[offs2]; + bit0 = BIT(val, 0); + bit1 = BIT(val, 1); + bit2 = BIT(val, 2); + bit3 = BIT(val, 3); r = 0x0e * bit0 + 0x1f * bit1 + 0x43 * bit2 + 0x8f * bit3; - val = space->machine->generic.paletteram.u8[offs2 | 0x10]; - bit0 = (val >> 0) & 0x01; - bit1 = (val >> 1) & 0x01; - bit2 = (val >> 2) & 0x01; - bit3 = (val >> 3) & 0x01; + val = state->paletteram[offs2 | 0x10]; + bit0 = BIT(val, 0); + bit1 = BIT(val, 1); + bit2 = BIT(val, 2); + bit3 = BIT(val, 3); g = 0x0e * bit0 + 0x1f * bit1 + 0x43 * bit2 + 0x8f * bit3; - val = space->machine->generic.paletteram.u8[offs2 | 0x20]; - bit0 = (val >> 0) & 0x01; - bit1 = (val >> 1) & 0x01; - bit2 = (val >> 2) & 0x01; - bit3 = (val >> 3) & 0x01; + val = state->paletteram[offs2 | 0x20]; + bit0 = BIT(val, 0); + bit1 = BIT(val, 1); + bit2 = BIT(val, 2); + bit3 = BIT(val, 3); b = 0x0e * bit0 + 0x1f * bit1 + 0x43 * bit2 + 0x8f * bit3; palette_set_color(space->machine,offs2 + 64,MAKE_RGB(r,g,b)); @@ -126,97 +112,87 @@ WRITE8_HANDLER( matmania_paletteram_w ) Start the video hardware emulation. ***************************************************************************/ + VIDEO_START( matmania ) { + matmania_state *state = (matmania_state *)machine->driver_data; int width = video_screen_get_width(machine->primary_screen); int height = video_screen_get_height(machine->primary_screen); bitmap_format format = video_screen_get_format(machine->primary_screen); /* Mat Mania has a virtual screen twice as large as the visible screen */ - tmpbitmap = auto_bitmap_alloc(machine, width, 2*height, format); - tmpbitmap2 = auto_bitmap_alloc(machine, width, 2*height, format); + state->tmpbitmap = auto_bitmap_alloc(machine, width, 2 * height, format); + state->tmpbitmap2 = auto_bitmap_alloc(machine, width, 2 * height, format); } VIDEO_UPDATE( matmania ) { - UINT8 *spriteram = screen->machine->generic.spriteram.u8; + matmania_state *state = (matmania_state *)screen->machine->driver_data; + UINT8 *spriteram = state->spriteram; int offs; /* Update the tiles in the left tile ram bank */ - for (offs = matmania_videoram_size - 1;offs >= 0;offs--) + for (offs = state->videoram_size - 1; offs >= 0; offs--) { - int sx,sy; + int sx = 15 - offs / 32; + int sy = offs % 32; - - sx = 15 - offs / 32; - sy = offs % 32; - - drawgfx_opaque(tmpbitmap,0,screen->machine->gfx[1], - matmania_videoram[offs] + ((matmania_colorram[offs] & 0x08) << 5), - (matmania_colorram[offs] & 0x30) >> 4, + drawgfx_opaque(state->tmpbitmap, 0, screen->machine->gfx[1], + state->videoram[offs] + ((state->colorram[offs] & 0x08) << 5), + (state->colorram[offs] & 0x30) >> 4, 0,sy >= 16, /* flip horizontally tiles on the right half of the bitmap */ - 16*sx,16*sy); + 16 * sx, 16 * sy); } /* Update the tiles in the right tile ram bank */ - for (offs = matmania_videoram3_size - 1;offs >= 0;offs--) + for (offs = state->videoram3_size - 1; offs >= 0; offs--) { - int sx,sy; + int sx = 15 - offs / 32; + int sy = offs % 32; - - sx = 15 - offs / 32; - sy = offs % 32; - - drawgfx_opaque(tmpbitmap2,0,screen->machine->gfx[1], - matmania_videoram3[offs] + ((matmania_colorram3[offs] & 0x08) << 5), - (matmania_colorram3[offs] & 0x30) >> 4, + drawgfx_opaque(state->tmpbitmap2, 0, screen->machine->gfx[1], + state->videoram3[offs] + ((state->colorram3[offs] & 0x08) << 5), + (state->colorram3[offs] & 0x30) >> 4, 0,sy >= 16, /* flip horizontally tiles on the right half of the bitmap */ 16*sx,16*sy); } - /* copy the temporary bitmap to the screen */ { - int scrolly; - - - scrolly = -*matmania_scroll; - if (matmania_pageselect[0]&0x01) // maniach sets 0x20 sometimes, which must have a different meaning - copyscrollbitmap(bitmap,tmpbitmap2,0,0,1,&scrolly,cliprect); + int scrolly = -*state->scroll; + if (state->pageselect[0] & 0x01) // maniach sets 0x20 sometimes, which must have a different meaning + copyscrollbitmap(bitmap, state->tmpbitmap2, 0, 0, 1, &scrolly, cliprect); else - copyscrollbitmap(bitmap,tmpbitmap,0,0,1,&scrolly,cliprect); + copyscrollbitmap(bitmap, state->tmpbitmap, 0, 0, 1, &scrolly, cliprect); } /* Draw the sprites */ - for (offs = 0;offs < screen->machine->generic.spriteram_size;offs += 4) + for (offs = 0; offs < state->spriteram_size; offs += 4) { if (spriteram[offs] & 0x01) { - drawgfx_transpen(bitmap,cliprect,screen->machine->gfx[2], - spriteram[offs+1] + ((spriteram[offs] & 0xf0) << 4), + drawgfx_transpen(bitmap, cliprect, screen->machine->gfx[2], + spriteram[offs + 1] + ((spriteram[offs] & 0xf0) << 4), (spriteram[offs] & 0x08) >> 3, - spriteram[offs] & 0x04,spriteram[offs] & 0x02, - 239 - spriteram[offs+3],(240 - spriteram[offs+2]) & 0xff,0); + spriteram[offs] & 0x04, spriteram[offs] & 0x02, + 239 - spriteram[offs + 3],(240 - spriteram[offs + 2]) & 0xff,0); } } /* draw the frontmost playfield. They are characters, but draw them as sprites */ - for (offs = matmania_videoram2_size - 1;offs >= 0;offs--) + for (offs = state->videoram2_size - 1; offs >= 0; offs--) { - int sx,sy; - - - sx = 31 - offs / 32; - sy = offs % 32; + int sx = 31 - offs / 32; + int sy = offs % 32; drawgfx_transpen(bitmap,cliprect,screen->machine->gfx[0], - matmania_videoram2[offs] + 256 * (matmania_colorram2[offs] & 0x07), - (matmania_colorram2[offs] & 0x30) >> 4, + state->videoram2[offs] + 256 * (state->colorram2[offs] & 0x07), + (state->colorram2[offs] & 0x30) >> 4, 0,0, 8*sx,8*sy,0); } @@ -225,38 +201,33 @@ VIDEO_UPDATE( matmania ) VIDEO_UPDATE( maniach ) { - UINT8 *spriteram = screen->machine->generic.spriteram.u8; + matmania_state *state = (matmania_state *)screen->machine->driver_data; + UINT8 *spriteram = state->spriteram; int offs; /* Update the tiles in the left tile ram bank */ - for (offs = matmania_videoram_size - 1;offs >= 0;offs--) + for (offs = state->videoram_size - 1; offs >= 0; offs--) { - int sx,sy; + int sx = 15 - offs / 32; + int sy = offs % 32; - - sx = 15 - offs / 32; - sy = offs % 32; - - drawgfx_opaque(tmpbitmap,0,screen->machine->gfx[1], - matmania_videoram[offs] + ((matmania_colorram[offs] & 0x03) << 8), - (matmania_colorram[offs] & 0x30) >> 4, + drawgfx_opaque(state->tmpbitmap, 0, screen->machine->gfx[1], + state->videoram[offs] + ((state->colorram[offs] & 0x03) << 8), + (state->colorram[offs] & 0x30) >> 4, 0,sy >= 16, /* flip horizontally tiles on the right half of the bitmap */ 16*sx,16*sy); } /* Update the tiles in the right tile ram bank */ - for (offs = matmania_videoram3_size - 1;offs >= 0;offs--) + for (offs = state->videoram3_size - 1; offs >= 0; offs--) { - int sx,sy; + int sx = 15 - offs / 32; + int sy = offs % 32; - - sx = 15 - offs / 32; - sy = offs % 32; - - drawgfx_opaque(tmpbitmap2,0,screen->machine->gfx[1], - matmania_videoram3[offs] + ((matmania_colorram3[offs] & 0x03) << 8), - (matmania_colorram3[offs] & 0x30) >> 4, + drawgfx_opaque(state->tmpbitmap2, 0, screen->machine->gfx[1], + state->videoram3[offs] + ((state->colorram3[offs] & 0x03) << 8), + (state->colorram3[offs] & 0x30) >> 4, 0,sy >= 16, /* flip horizontally tiles on the right half of the bitmap */ 16*sx,16*sy); } @@ -264,20 +235,17 @@ VIDEO_UPDATE( maniach ) /* copy the temporary bitmap to the screen */ { - int scrolly; + int scrolly = -*state->scroll; - - scrolly = -*matmania_scroll; - - if (matmania_pageselect[0]&0x01) // this sets 0x20 sometimes, which must have a different meaning - copyscrollbitmap(bitmap,tmpbitmap2,0,0,1,&scrolly,cliprect); + if (state->pageselect[0] & 0x01) // this sets 0x20 sometimes, which must have a different meaning + copyscrollbitmap(bitmap, state->tmpbitmap2, 0, 0, 1, &scrolly, cliprect); else - copyscrollbitmap(bitmap,tmpbitmap,0,0,1,&scrolly,cliprect); + copyscrollbitmap(bitmap, state->tmpbitmap, 0, 0, 1, &scrolly, cliprect); } /* Draw the sprites */ - for (offs = 0;offs < screen->machine->generic.spriteram_size;offs += 4) + for (offs = 0; offs < state->spriteram_size; offs += 4) { if (spriteram[offs] & 0x01) { @@ -291,17 +259,14 @@ VIDEO_UPDATE( maniach ) /* draw the frontmost playfield. They are characters, but draw them as sprites */ - for (offs = matmania_videoram2_size - 1;offs >= 0;offs--) + for (offs = state->videoram2_size - 1; offs >= 0; offs--) { - int sx,sy; - - - sx = 31 - offs / 32; - sy = offs % 32; + int sx = 31 - offs / 32; + int sy = offs % 32; drawgfx_transpen(bitmap,cliprect,screen->machine->gfx[0], - matmania_videoram2[offs] + 256 * (matmania_colorram2[offs] & 0x07), - (matmania_colorram2[offs] & 0x30) >> 4, + state->videoram2[offs] + 256 * (state->colorram2[offs] & 0x07), + (state->colorram2[offs] & 0x30) >> 4, 0,0, 8*sx,8*sy,0); } diff --git a/src/mame/video/metlclsh.c b/src/mame/video/metlclsh.c index 344d1fff3f4..10e32e94e9b 100644 --- a/src/mame/video/metlclsh.c +++ b/src/mame/video/metlclsh.c @@ -19,40 +19,33 @@ ***************************************************************************/ #include "emu.h" +#include "includes/metlclsh.h" -/* Local variables: */ - -static tilemap_t *bg_tilemap,*fg_tilemap; - -static UINT8 metlclsh_write_mask, *metlclsh_otherram; - -/* Variables that driver has access to: */ - -UINT8 *metlclsh_bgram, *metlclsh_fgram, *metlclsh_scrollx; - -/* Functions that driver has access to: */ WRITE8_HANDLER( metlclsh_rambank_w ) { + metlclsh_state *state = (metlclsh_state *)space->machine->driver_data; + if (data & 1) { - metlclsh_write_mask = 0; - memory_set_bankptr(space->machine, "bank1", metlclsh_bgram); + state->write_mask = 0; + memory_set_bankptr(space->machine, "bank1", state->bgram); } else { - metlclsh_write_mask = 1 << (data >> 1); - memory_set_bankptr(space->machine, "bank1", metlclsh_otherram); + state->write_mask = 1 << (data >> 1); + memory_set_bankptr(space->machine, "bank1", state->otherram); } } -static UINT8 metlclsh_gfxbank; WRITE8_HANDLER( metlclsh_gfxbank_w ) { - if (!(data & 4) && (metlclsh_gfxbank != data)) + metlclsh_state *state = (metlclsh_state *)space->machine->driver_data; + + if (!(data & 4) && (state->gfxbank != data)) { - tilemap_mark_all_tiles_dirty(bg_tilemap); - metlclsh_gfxbank = data & 3; + tilemap_mark_all_tiles_dirty(state->bg_tilemap); + state->gfxbank = data & 3; } } @@ -80,14 +73,17 @@ static TILEMAP_MAPPER( metlclsh_bgtilemap_scan ) static TILE_GET_INFO( get_bg_tile_info ) { - SET_TILE_INFO(1, metlclsh_bgram[tile_index] + (metlclsh_gfxbank << 7),0,0); + metlclsh_state *state = (metlclsh_state *)machine->driver_data; + SET_TILE_INFO(1, state->bgram[tile_index] + (state->gfxbank << 7), 0, 0); } WRITE8_HANDLER( metlclsh_bgram_w ) { + metlclsh_state *state = (metlclsh_state *)space->machine->driver_data; + /* This ram is banked: it's either the tilemap (e401 = 1) or bit n of another area (e401 = n << 1)? (that I don't understand) */ - if (metlclsh_write_mask) + if (state->write_mask) { /* unknown area - the following is almost surely wrong */ // 405b (e401 = e c a 8 6 4 2 0) writes d400++ @@ -95,14 +91,14 @@ WRITE8_HANDLER( metlclsh_bgram_w ) // 4085 (e401 = e a 6 2) writes d000++ // 405b (e401 = e a 6 2) writes d000++ -// metlclsh_otherram[offset] |= (data & metlclsh_write_mask); - metlclsh_otherram[offset] = (metlclsh_otherram[offset] & ~metlclsh_write_mask) | (data & metlclsh_write_mask); +// state->otherram[offset] |= (data & state->write_mask); + state->otherram[offset] = (state->otherram[offset] & ~state->write_mask) | (data & state->write_mask); } else { /* tilemap */ - metlclsh_bgram[offset] = data; - tilemap_mark_tile_dirty(bg_tilemap,offset & 0x1ff); + state->bgram[offset] = data; + tilemap_mark_tile_dirty(state->bg_tilemap,offset & 0x1ff); } } @@ -121,16 +117,18 @@ WRITE8_HANDLER( metlclsh_bgram_w ) static TILE_GET_INFO( get_fg_tile_info ) { - UINT8 code = metlclsh_fgram[tile_index + 0x000]; - UINT8 attr = metlclsh_fgram[tile_index + 0x400]; + metlclsh_state *state = (metlclsh_state *)machine->driver_data; + UINT8 code = state->fgram[tile_index + 0x000]; + UINT8 attr = state->fgram[tile_index + 0x400]; SET_TILE_INFO(2, code + ((attr & 0x03) << 8), (attr >> 5) & 3, 0); tileinfo->category = ((attr & 0x80) ? 1 : 2); } WRITE8_HANDLER( metlclsh_fgram_w ) { - metlclsh_fgram[offset] = data; - tilemap_mark_tile_dirty(fg_tilemap,offset & 0x3ff); + metlclsh_state *state = (metlclsh_state *)space->machine->driver_data; + state->fgram[offset] = data; + tilemap_mark_tile_dirty(state->fg_tilemap, offset & 0x3ff); } @@ -142,13 +140,17 @@ WRITE8_HANDLER( metlclsh_fgram_w ) VIDEO_START( metlclsh ) { - metlclsh_otherram = auto_alloc_array(machine, UINT8, 0x800); // banked ram + metlclsh_state *state = (metlclsh_state *)machine->driver_data; - bg_tilemap = tilemap_create(machine, get_bg_tile_info,metlclsh_bgtilemap_scan,16,16,32,16); - fg_tilemap = tilemap_create(machine, get_fg_tile_info,tilemap_scan_rows,8,8,32,32); + state->otherram = auto_alloc_array(machine, UINT8, 0x800); // banked ram - tilemap_set_transparent_pen( bg_tilemap, 0 ); - tilemap_set_transparent_pen( fg_tilemap, 0 ); + state->bg_tilemap = tilemap_create(machine, get_bg_tile_info, metlclsh_bgtilemap_scan, 16, 16, 32, 16); + state->fg_tilemap = tilemap_create(machine, get_fg_tile_info, tilemap_scan_rows, 8, 8, 32, 32); + + tilemap_set_transparent_pen(state->bg_tilemap, 0); + tilemap_set_transparent_pen(state->fg_tilemap, 0); + + state_save_register_global_pointer(machine, state->otherram, 0x800); } @@ -172,38 +174,42 @@ VIDEO_START( metlclsh ) ***************************************************************************/ -static void draw_sprites(running_machine *machine, bitmap_t *bitmap,const rectangle *cliprect) +static void draw_sprites( running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect ) { - UINT8 *spriteram = machine->generic.spriteram.u8; + metlclsh_state *state = (metlclsh_state *)machine->driver_data; + UINT8 *spriteram = state->spriteram; gfx_element *gfx = machine->gfx[0]; int offs; - for (offs = 0;offs < machine->generic.spriteram_size; offs += 4) + for (offs = 0; offs < state->spriteram_size; offs += 4) { - int attr,code,color,sx,sy,flipx,flipy,wrapy,sizey; + int attr, code, color, sx, sy, flipx, flipy, wrapy, sizey; - attr = spriteram[offs]; - if (!(attr & 0x01)) continue; // enable + attr = spriteram[offs]; + if (!(attr & 0x01)) + continue; // enable - flipy = (attr & 0x02); - flipx = (attr & 0x04); - color = (attr & 0x08) >> 3; - sizey = (attr & 0x10); // double height - code = ((attr & 0x60) << 3) + spriteram[offs+1]; + flipy = (attr & 0x02); + flipx = (attr & 0x04); + color = (attr & 0x08) >> 3; + sizey = (attr & 0x10); // double height + code = ((attr & 0x60) << 3) + spriteram[offs + 1]; - sx = 240 - spriteram[offs+3]; - if (sx < -7) sx += 256; - sy = 240 - spriteram[offs+2]; + sx = 240 - spriteram[offs + 3]; + if (sx < -7) + sx += 256; + + sy = 240 - spriteram[offs + 2]; if (flip_screen_get(machine)) { sx = 240 - sx; flipx = !flipx; - sy = 240 - sy; flipy = !flipy; if (sizey) sy+=16; + sy = 240 - sy; flipy = !flipy; if (sizey) sy += 16; if (sy > 240) sy -= 256; } /* Draw twice, at sy and sy + 256 (wrap around) */ - for ( wrapy = 0; wrapy <= 256; wrapy += 256 ) + for (wrapy = 0; wrapy <= 256; wrapy += 256) { if (sizey) { @@ -238,20 +244,23 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap,const rectan VIDEO_UPDATE( metlclsh ) { - bitmap_fill(bitmap,cliprect,0x10); + metlclsh_state *state = (metlclsh_state *)screen->machine->driver_data; - tilemap_draw(bitmap,cliprect,fg_tilemap,1,0); // low priority tiles of foreground - if (metlclsh_scrollx[0] & 0x08) // background (if enabled) + bitmap_fill(bitmap, cliprect, 0x10); + + tilemap_draw(bitmap, cliprect, state->fg_tilemap, 1, 0); // low priority tiles of foreground + + if (state->scrollx[0] & 0x08) // background (if enabled) { /* The background seems to be always flipped along x */ - tilemap_set_flip(bg_tilemap, (flip_screen_get(screen->machine) ? (TILEMAP_FLIPX|TILEMAP_FLIPY) : 0) ^ TILEMAP_FLIPX); - tilemap_set_scrollx(bg_tilemap, 0,metlclsh_scrollx[1] + ((metlclsh_scrollx[0]&0x02)<<7) ); - tilemap_draw(bitmap,cliprect,bg_tilemap,0,0); + tilemap_set_flip(state->bg_tilemap, (flip_screen_get(screen->machine) ? (TILEMAP_FLIPX | TILEMAP_FLIPY) : 0) ^ TILEMAP_FLIPX); + tilemap_set_scrollx(state->bg_tilemap, 0, state->scrollx[1] + ((state->scrollx[0] & 0x02) << 7) ); + tilemap_draw(bitmap, cliprect, state->bg_tilemap, 0, 0); } - draw_sprites(screen->machine,bitmap,cliprect); // sprites - tilemap_draw(bitmap,cliprect,fg_tilemap,2,0); // high priority tiles of foreground + draw_sprites(screen->machine, bitmap, cliprect); // sprites + tilemap_draw(bitmap, cliprect, state->fg_tilemap, 2, 0); // high priority tiles of foreground -// popmessage("%02X",metlclsh_scrollx[0]); +// popmessage("%02X", state->scrollx[0]); return 0; } diff --git a/src/mame/video/mexico86.c b/src/mame/video/mexico86.c index e4f8c21bf84..93680cf68e4 100644 --- a/src/mame/video/mexico86.c +++ b/src/mame/video/mexico86.c @@ -1,58 +1,57 @@ #include "emu.h" #include "includes/mexico86.h" -UINT8 *mexico86_videoram,*mexico86_objectram; -size_t mexico86_objectram_size; -static int charbank; - - WRITE8_HANDLER( mexico86_bankswitch_w ) { - UINT8 *RAM = memory_region(space->machine, "maincpu"); + mexico86_state *state = (mexico86_state *)space->machine->driver_data; if ((data & 7) > 5) - popmessage( "Switching to invalid bank!" ); + popmessage("Switching to invalid bank!"); - memory_set_bankptr(space->machine, "bank1", &RAM[0x10000 + 0x4000 * (data & 0x07)]); + memory_set_bank(space->machine, "bank1", data & 0x07); - charbank = (data & 0x20) >> 5; + state->charbank = BIT(data, 5); } VIDEO_UPDATE( mexico86 ) { + mexico86_state *state = (mexico86_state *)screen->machine->driver_data; int offs; - int sx,sy,xc,yc; - int gfx_num,gfx_attr,gfx_offs; + int sx, sy, xc, yc; + int gfx_num, gfx_attr, gfx_offs; /* Bubble Bobble doesn't have a real video RAM. All graphics (characters */ /* and sprites) are stored in the same memory region, and information on */ /* the background character columns is stored inthe area dd00-dd3f */ - - bitmap_fill(bitmap,cliprect,255); + bitmap_fill(bitmap, cliprect, 255); sx = 0; -/* the score display seems to be outside of the main objectram. */ - for (offs = 0;offs < mexico86_objectram_size+0x200;offs += 4) + + /* the score display seems to be outside of the main objectram. */ + for (offs = 0; offs < state->objectram_size + 0x200; offs += 4) { int height; -if (offs >= mexico86_objectram_size && offs < mexico86_objectram_size+0x180) continue; -if (offs >= mexico86_objectram_size+0x1c0) continue; + if (offs >= state->objectram_size && offs < state->objectram_size + 0x180) + continue; + + if (offs >= state->objectram_size + 0x1c0) + continue; /* skip empty sprites */ /* this is dword aligned so the UINT32 * cast shouldn't give problems */ /* on any architecture */ - if (*(UINT32 *)(&mexico86_objectram[offs]) == 0) + if (*(UINT32 *)(&state->objectram[offs]) == 0) continue; - gfx_num = mexico86_objectram[offs + 1]; - gfx_attr = mexico86_objectram[offs + 3]; + gfx_num = state->objectram[offs + 1]; + gfx_attr = state->objectram[offs + 3]; - if ((gfx_num & 0x80) == 0) /* 16x16 sprites */ + if (!BIT(gfx_num, 7)) /* 16x16 sprites */ { gfx_offs = ((gfx_num & 0x1f) * 0x80) + ((gfx_num & 0x60) >> 1) + 12; height = 2; @@ -67,24 +66,25 @@ if (offs >= mexico86_objectram_size+0x1c0) continue; sx += 16; else { - sx = mexico86_objectram[offs + 2]; -// if (gfx_attr & 0x40) sx -= 256; + sx = state->objectram[offs + 2]; + //if (gfx_attr & 0x40) sx -= 256; } - sy = 256 - height*8 - (mexico86_objectram[offs + 0]); + sy = 256 - height * 8 - (state->objectram[offs + 0]); - for (xc = 0;xc < 2;xc++) + for (xc = 0; xc < 2; xc++) { - for (yc = 0;yc < height;yc++) + for (yc = 0; yc < height; yc++) { - int goffs,code,color,flipx,flipy,x,y; + int goffs, code, color, flipx, flipy, x, y; goffs = gfx_offs + xc * 0x40 + yc * 0x02; - code = mexico86_videoram[goffs] + ((mexico86_videoram[goffs + 1] & 0x07) << 8) - + ((mexico86_videoram[goffs + 1] & 0x80) << 4) + (charbank << 12); - color = ((mexico86_videoram[goffs + 1] & 0x38) >> 3) + ((gfx_attr & 0x02) << 2); - flipx = mexico86_videoram[goffs + 1] & 0x40; + code = state->videoram[goffs] + ((state->videoram[goffs + 1] & 0x07) << 8) + + ((state->videoram[goffs + 1] & 0x80) << 4) + (state->charbank << 12); + color = ((state->videoram[goffs + 1] & 0x38) >> 3) + ((gfx_attr & 0x02) << 2); + flipx = state->videoram[goffs + 1] & 0x40; flipy = 0; -// x = sx + xc * 8; + + //x = sx + xc * 8; x = (sx + xc * 8) & 0xff; y = (sy + yc * 8) & 0xff; @@ -101,23 +101,25 @@ if (offs >= mexico86_objectram_size+0x1c0) continue; VIDEO_UPDATE( kikikai ) { + mexico86_state *state = (mexico86_state *)screen->machine->driver_data; int offs; - int sx,sy,yc; - int gfx_num,gfx_attr,gfx_offs; + int sx, sy, yc; + int gfx_num, gfx_attr, gfx_offs; int height; - int goffs,code,color,y; + int goffs, code, color, y; int tx, ty; bitmap_fill(bitmap, cliprect, get_black_pen(screen->machine)); sx = 0; - for (offs=0; offsobjectram_size; offs += 4) { - if (*(UINT32*)(mexico86_objectram + offs) == 0) continue; + if (*(UINT32*)(state->objectram + offs) == 0) + continue; - ty = mexico86_objectram[offs]; - gfx_num = mexico86_objectram[offs + 1]; - tx = mexico86_objectram[offs + 2]; - gfx_attr = mexico86_objectram[offs + 3]; + ty = state->objectram[offs]; + gfx_num = state->objectram[offs + 1]; + tx = state->objectram[offs + 2]; + gfx_attr = state->objectram[offs + 3]; if (gfx_num & 0x80) { @@ -133,15 +135,16 @@ VIDEO_UPDATE( kikikai ) height = 2; sx = tx; } + sy = 256 - (height << 3) - ty; height <<= 1; - for (yc=0; yc> 5; + code = state->videoram[goffs] + ((state->videoram[goffs + 1] & 0x1f) << 8); + color = (state->videoram[goffs + 1] & 0xe0) >> 5; goffs += 0x40; drawgfx_transpen(bitmap,cliprect,screen->machine->gfx[0], @@ -150,8 +153,8 @@ VIDEO_UPDATE( kikikai ) 0,0, sx&0xff,y,15); - code = mexico86_videoram[goffs] + ((mexico86_videoram[goffs + 1] & 0x1f) << 8); - color = (mexico86_videoram[goffs + 1] & 0xe0) >> 5; + code = state->videoram[goffs] + ((state->videoram[goffs + 1] & 0x1f) << 8); + color = (state->videoram[goffs + 1] & 0xe0) >> 5; drawgfx_transpen(bitmap,cliprect,screen->machine->gfx[0], code, diff --git a/src/mame/video/mosaic.c b/src/mame/video/mosaic.c index 8639cd9664c..0fcfd18b6bd 100644 --- a/src/mame/video/mosaic.c +++ b/src/mame/video/mosaic.c @@ -7,14 +7,7 @@ ***************************************************************************/ #include "emu.h" - - -UINT8 *mosaic_fgvideoram; -UINT8 *mosaic_bgvideoram; - -static tilemap_t *bg_tilemap,*fg_tilemap; - - +#include "includes/mosaic.h" /*************************************************************************** @@ -24,20 +17,22 @@ static tilemap_t *bg_tilemap,*fg_tilemap; static TILE_GET_INFO( get_fg_tile_info ) { + mosaic_state *state = (mosaic_state *)machine->driver_data; tile_index *= 2; SET_TILE_INFO( 0, - mosaic_fgvideoram[tile_index] + (mosaic_fgvideoram[tile_index+1] << 8), + state->fgvideoram[tile_index] + (state->fgvideoram[tile_index+1] << 8), 0, 0); } static TILE_GET_INFO( get_bg_tile_info ) { + mosaic_state *state = (mosaic_state *)machine->driver_data; tile_index *= 2; SET_TILE_INFO( 1, - mosaic_bgvideoram[tile_index] + (mosaic_bgvideoram[tile_index+1] << 8), + state->bgvideoram[tile_index] + (state->bgvideoram[tile_index+1] << 8), 0, 0); } @@ -52,10 +47,12 @@ static TILE_GET_INFO( get_bg_tile_info ) VIDEO_START( mosaic ) { - fg_tilemap = tilemap_create(machine, get_fg_tile_info,tilemap_scan_rows,8,8,64,32); - bg_tilemap = tilemap_create(machine, get_bg_tile_info,tilemap_scan_rows, 8,8,64,32); + mosaic_state *state = (mosaic_state *)machine->driver_data; - tilemap_set_transparent_pen(fg_tilemap,0xff); + state->fg_tilemap = tilemap_create(machine, get_fg_tile_info, tilemap_scan_rows, 8, 8, 64, 32); + state->bg_tilemap = tilemap_create(machine, get_bg_tile_info, tilemap_scan_rows, 8, 8, 64, 32); + + tilemap_set_transparent_pen(state->fg_tilemap, 0xff); } @@ -67,21 +64,27 @@ VIDEO_START( mosaic ) WRITE8_HANDLER( mosaic_fgvideoram_w ) { - mosaic_fgvideoram[offset] = data; - tilemap_mark_tile_dirty(fg_tilemap,offset/2); + mosaic_state *state = (mosaic_state *)space->machine->driver_data; + + state->fgvideoram[offset] = data; + tilemap_mark_tile_dirty(state->fg_tilemap, offset / 2); } WRITE8_HANDLER( mosaic_bgvideoram_w ) { - mosaic_bgvideoram[offset] = data; - tilemap_mark_tile_dirty(bg_tilemap,offset/2); + mosaic_state *state = (mosaic_state *)space->machine->driver_data; + + state->bgvideoram[offset] = data; + tilemap_mark_tile_dirty(state->bg_tilemap, offset / 2); } VIDEO_UPDATE( mosaic ) { - tilemap_draw(bitmap,cliprect,bg_tilemap,0,0); - tilemap_draw(bitmap,cliprect,fg_tilemap,0,0); + mosaic_state *state = (mosaic_state *)screen->machine->driver_data; + + tilemap_draw(bitmap, cliprect, state->bg_tilemap, 0, 0); + tilemap_draw(bitmap, cliprect, state->fg_tilemap, 0, 0); return 0; } diff --git a/src/mame/video/mouser.c b/src/mame/video/mouser.c index 5b86896295f..538a5efbaa3 100644 --- a/src/mame/video/mouser.c +++ b/src/mame/video/mouser.c @@ -14,31 +14,29 @@ *******************************************************************************/ #include "emu.h" - -UINT8 *mouser_videoram; -UINT8 *mouser_colorram; +#include "includes/mouser.h" PALETTE_INIT( mouser ) { int i; - for (i = 0;i < machine->config->total_colors;i++) + for (i = 0; i < machine->config->total_colors; i++) { - int bit0,bit1,bit2,r,g,b; + int bit0, bit1, bit2, r, g, b; /* red component */ - bit0 = BIT(*color_prom,0); - bit1 = BIT(*color_prom,1); - bit2 = BIT(*color_prom,2); + bit0 = BIT(*color_prom, 0); + bit1 = BIT(*color_prom, 1); + bit2 = BIT(*color_prom, 2); r = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2; /* green component */ - bit0 = BIT(*color_prom,3); - bit1 = BIT(*color_prom,4); - bit2 = BIT(*color_prom,5); + bit0 = BIT(*color_prom, 3); + bit1 = BIT(*color_prom, 4); + bit2 = BIT(*color_prom, 5); g = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2; /* blue component */ - bit0 = BIT(*color_prom,6); - bit1 = BIT(*color_prom,7); + bit0 = BIT(*color_prom, 6); + bit1 = BIT(*color_prom, 7); b = 0x4f * bit0 + 0xa8 * bit1; palette_set_color(machine,i,MAKE_RGB(r,g,b)); @@ -58,10 +56,11 @@ WRITE8_HANDLER( mouser_flip_screen_y_w ) VIDEO_UPDATE( mouser ) { - UINT8 *spriteram = screen->machine->generic.spriteram.u8; + mouser_state *state = (mouser_state *)screen->machine->driver_data; + UINT8 *spriteram = state->spriteram; int offs; - int sx,sy; - int flipx,flipy; + int sx, sy; + int flipx, flipy; /* for every character in the Video RAM */ for (offs = 0x3ff; offs >= 0; offs--) @@ -89,11 +88,11 @@ VIDEO_UPDATE( mouser ) /* Ideally we would merge these on a pixel-by-pixel basis, but it's ok to do this char-by-char, */ /* Since it's only for the MOUSER logo and it looks fine */ /* Note: this is _not_ dependant on flipping */ - color_offs = offs%32 + ((256 + 8*(offs/32) - spriteram[offs%32])%256)/8*32; + color_offs = offs % 32 + ((256 + 8 * (offs / 32) - spriteram[offs % 32] )% 256) / 8 * 32; drawgfx_opaque(bitmap,cliprect,screen->machine->gfx[0], - mouser_videoram[offs] | (mouser_colorram[color_offs]>>5)*256 | ((mouser_colorram[color_offs]>>4)&1)*512, - mouser_colorram[color_offs]%16, + state->videoram[offs] | (state->colorram[color_offs] >> 5) * 256 | ((state->colorram[color_offs] >> 4) & 1) * 512, + state->colorram[color_offs]%16, flip_screen_x_get(screen->machine),flip_screen_y_get(screen->machine), 8*sx,scrolled_y_position); } @@ -103,11 +102,11 @@ VIDEO_UPDATE( mouser ) /* This is the first set of 7 sprites */ for(offs = 0x0084; offs < 0x00A0; offs += 4) { - sx = spriteram[offs+3]; - sy = 0xef-spriteram[offs+2]; + sx = spriteram[offs + 3]; + sy = 0xef - spriteram[offs + 2]; - flipx = (spriteram[offs]&0x40)>>6; - flipy = (spriteram[offs]&0x80)>>7; + flipx = BIT(spriteram[offs], 6); + flipy = BIT(spriteram[offs], 7); if (flip_screen_x_get(screen->machine)) { @@ -121,7 +120,7 @@ VIDEO_UPDATE( mouser ) sy = 238 - sy; } - if ((spriteram[offs+1]&0x10)>>4) + if (BIT(spriteram[offs + 1], 4)) drawgfx_transpen(bitmap,cliprect,screen->machine->gfx[1+((spriteram[offs+1]&0x20)>>5)], spriteram[offs]&0x3f, spriteram[offs+1]%16, @@ -130,13 +129,13 @@ VIDEO_UPDATE( mouser ) } /* This is the second set of 8 sprites */ - for(offs = 0x00C4; offs < 0x00E4; offs += 4) + for(offs = 0x00C4; offs < 0x00e4; offs += 4) { - sx = spriteram[offs+3]; - sy = 0xef-spriteram[offs+2]; + sx = spriteram[offs + 3]; + sy = 0xef - spriteram[offs + 2]; - flipx = (spriteram[offs]&0x40)>>6; - flipy = (spriteram[offs]&0x80)>>7; + flipx = BIT(spriteram[offs], 6); + flipy = BIT(spriteram[offs], 7); if (flip_screen_x_get(screen->machine)) { @@ -150,7 +149,7 @@ VIDEO_UPDATE( mouser ) sy = 238 - sy; } - if ((spriteram[offs+1]&0x10)>>4) + if (BIT(spriteram[offs + 1], 4)) drawgfx_transpen(bitmap,cliprect,screen->machine->gfx[1+((spriteram[offs+1]&0x20)>>5)], spriteram[offs]&0x3f, spriteram[offs+1]%16, diff --git a/src/mame/video/mrdo.c b/src/mame/video/mrdo.c index 8f8effa7b60..5f542ea36c3 100644 --- a/src/mame/video/mrdo.c +++ b/src/mame/video/mrdo.c @@ -7,12 +7,7 @@ ***************************************************************************/ #include "emu.h" - - -UINT8 *mrdo_bgvideoram,*mrdo_fgvideoram; -static tilemap_t *bg_tilemap,*fg_tilemap; -static int flipscreen; - +#include "includes/mrdo.h" /*************************************************************************** @@ -46,6 +41,7 @@ static int flipscreen; 200 ohm pulldown on all three components ***************************************************************************/ + PALETTE_INIT( mrdo ) { int i; @@ -138,20 +134,22 @@ PALETTE_INIT( mrdo ) static TILE_GET_INFO( get_bg_tile_info ) { - UINT8 attr = mrdo_bgvideoram[tile_index]; + mrdo_state *state = (mrdo_state *)machine->driver_data; + UINT8 attr = state->bgvideoram[tile_index]; SET_TILE_INFO( 1, - mrdo_bgvideoram[tile_index+0x400] + ((attr & 0x80) << 1), + state->bgvideoram[tile_index + 0x400] + ((attr & 0x80) << 1), attr & 0x3f, (attr & 0x40) ? TILE_FORCE_LAYER0 : 0); } static TILE_GET_INFO( get_fg_tile_info ) { - UINT8 attr = mrdo_fgvideoram[tile_index]; + mrdo_state *state = (mrdo_state *)machine->driver_data; + UINT8 attr = state->fgvideoram[tile_index]; SET_TILE_INFO( 0, - mrdo_fgvideoram[tile_index+0x400] + ((attr & 0x80) << 1), + state->fgvideoram[tile_index+0x400] + ((attr & 0x80) << 1), attr & 0x3f, (attr & 0x40) ? TILE_FORCE_LAYER0 : 0); } @@ -166,18 +164,22 @@ static TILE_GET_INFO( get_fg_tile_info ) VIDEO_START( mrdo ) { - bg_tilemap = tilemap_create(machine, get_bg_tile_info,tilemap_scan_rows,8,8,32,32); - fg_tilemap = tilemap_create(machine, get_fg_tile_info,tilemap_scan_rows,8,8,32,32); + mrdo_state *state = (mrdo_state *)machine->driver_data; - tilemap_set_transparent_pen(bg_tilemap,0); - tilemap_set_transparent_pen(fg_tilemap,0); + state->bg_tilemap = tilemap_create(machine, get_bg_tile_info,tilemap_scan_rows,8,8,32,32); + state->fg_tilemap = tilemap_create(machine, get_fg_tile_info,tilemap_scan_rows,8,8,32,32); - tilemap_set_scrolldx(bg_tilemap, 0, 56); - tilemap_set_scrolldx(fg_tilemap, 0, 56); - tilemap_set_scrolldy(bg_tilemap, 0, 6); - tilemap_set_scrolldy(fg_tilemap, 0, 6); + tilemap_set_transparent_pen(state->bg_tilemap,0); + tilemap_set_transparent_pen(state->fg_tilemap,0); - state_save_register_global(machine, flipscreen); + tilemap_set_scrolldx(state->bg_tilemap, 0, 56); + tilemap_set_scrolldx(state->fg_tilemap, 0, 56); + tilemap_set_scrolldy(state->bg_tilemap, 0, 6); + tilemap_set_scrolldy(state->fg_tilemap, 0, 6); + + state->flipscreen = 0; + + state_save_register_global(machine, state->flipscreen); } @@ -190,38 +192,46 @@ VIDEO_START( mrdo ) WRITE8_HANDLER( mrdo_bgvideoram_w ) { - mrdo_bgvideoram[offset] = data; - tilemap_mark_tile_dirty(bg_tilemap,offset & 0x3ff); + mrdo_state *state = (mrdo_state *)space->machine->driver_data; + state->bgvideoram[offset] = data; + tilemap_mark_tile_dirty(state->bg_tilemap, offset & 0x3ff); } WRITE8_HANDLER( mrdo_fgvideoram_w ) { - mrdo_fgvideoram[offset] = data; - tilemap_mark_tile_dirty(fg_tilemap,offset & 0x3ff); + mrdo_state *state = (mrdo_state *)space->machine->driver_data; + state->fgvideoram[offset] = data; + tilemap_mark_tile_dirty(state->fg_tilemap, offset & 0x3ff); } WRITE8_HANDLER( mrdo_scrollx_w ) { - tilemap_set_scrollx(bg_tilemap,0,data); + mrdo_state *state = (mrdo_state *)space->machine->driver_data; + tilemap_set_scrollx(state->bg_tilemap, 0, data); } WRITE8_HANDLER( mrdo_scrolly_w ) { - /* This is NOT affected by flipscreen (so stop it happening) */ + mrdo_state *state = (mrdo_state *)space->machine->driver_data; - if (flipscreen) tilemap_set_scrolly(bg_tilemap,0,((256-data) & 0xff)); - else tilemap_set_scrolly(bg_tilemap,0,data); + /* This is NOT affected by flipscreen (so stop it happening) */ + if (state->flipscreen) + tilemap_set_scrolly(state->bg_tilemap, 0,((256 - data) & 0xff)); + else + tilemap_set_scrolly(state->bg_tilemap, 0, data); } WRITE8_HANDLER( mrdo_flipscreen_w ) { + mrdo_state *state = (mrdo_state *)space->machine->driver_data; + /* bits 1-3 control the playfield priority, but they are not used by */ /* Mr. Do! so we don't emulate them */ - flipscreen = data & 0x01; - tilemap_set_flip_all(space->machine,flipscreen ? (TILEMAP_FLIPY | TILEMAP_FLIPX) : 0); + state->flipscreen = data & 0x01; + tilemap_set_flip_all(space->machine, state->flipscreen ? (TILEMAP_FLIPY | TILEMAP_FLIPX) : 0); } @@ -232,29 +242,31 @@ WRITE8_HANDLER( mrdo_flipscreen_w ) ***************************************************************************/ -static void draw_sprites(running_machine *machine, bitmap_t *bitmap,const rectangle *cliprect) +static void draw_sprites( running_machine *machine, bitmap_t *bitmap,const rectangle *cliprect ) { - UINT8 *spriteram = machine->generic.spriteram.u8; + mrdo_state *state = (mrdo_state *)machine->driver_data; + UINT8 *spriteram = state->spriteram; int offs; - - for (offs = machine->generic.spriteram_size - 4;offs >= 0;offs -= 4) + for (offs = state->spriteram_size - 4; offs >= 0; offs -= 4) { if (spriteram[offs + 1] != 0) { - drawgfx_transpen(bitmap,cliprect,machine->gfx[2], - spriteram[offs],spriteram[offs + 2] & 0x0f, - spriteram[offs + 2] & 0x10,spriteram[offs + 2] & 0x20, - spriteram[offs + 3],256 - spriteram[offs + 1],0); + drawgfx_transpen(bitmap, cliprect, machine->gfx[2], + spriteram[offs], spriteram[offs + 2] & 0x0f, + spriteram[offs + 2] & 0x10, spriteram[offs + 2] & 0x20, + spriteram[offs + 3], 256 - spriteram[offs + 1], 0); } } } VIDEO_UPDATE( mrdo ) { - bitmap_fill(bitmap,cliprect,0); - tilemap_draw(bitmap,cliprect,bg_tilemap,0,0); - tilemap_draw(bitmap,cliprect,fg_tilemap,0,0); - draw_sprites(screen->machine,bitmap,cliprect); + mrdo_state *state = (mrdo_state *)screen->machine->driver_data; + + bitmap_fill(bitmap, cliprect,0); + tilemap_draw(bitmap, cliprect, state->bg_tilemap, 0, 0); + tilemap_draw(bitmap, cliprect, state->fg_tilemap, 0, 0); + draw_sprites(screen->machine, bitmap, cliprect); return 0; } diff --git a/src/mame/video/mrflea.c b/src/mame/video/mrflea.c index 5bbe991e053..5900d5cbea4 100644 --- a/src/mame/video/mrflea.c +++ b/src/mame/video/mrflea.c @@ -6,46 +6,59 @@ Mr. F. Lea ******************************************************************/ #include "emu.h" +#include "includes/mrflea.h" -static int mrflea_gfx_bank; +WRITE8_HANDLER( mrflea_gfx_bank_w ) +{ + mrflea_state *state = (mrflea_state *)space->machine->driver_data; + state->gfx_bank = data; -WRITE8_HANDLER( mrflea_gfx_bank_w ){ - mrflea_gfx_bank = data; - if( data & ~0x14 ){ - logerror( "unknown gfx bank: 0x%02x\n", data ); - } + if (data & ~0x14) + logerror("unknown gfx bank: 0x%02x\n", data); } -WRITE8_HANDLER( mrflea_videoram_w ){ - int bank = offset/0x400; +WRITE8_HANDLER( mrflea_videoram_w ) +{ + mrflea_state *state = (mrflea_state *)space->machine->driver_data; + int bank = offset / 0x400; + offset &= 0x3ff; - space->machine->generic.videoram.u8[offset] = data; - space->machine->generic.videoram.u8[offset+0x400] = bank; - /* the address range that tile data is written to sets one bit of - ** the bank select. The remaining bits are from a video register. - */ + state->videoram[offset] = data; + state->videoram[offset + 0x400] = bank; + /* the address range that tile data is written to sets one bit of + the bank select. The remaining bits are from a video register. */ } -WRITE8_HANDLER( mrflea_spriteram_w ){ - if( offset&2 ){ /* tile_number */ - space->machine->generic.spriteram.u8[offset|1] = offset&1; +WRITE8_HANDLER( mrflea_spriteram_w ) +{ + mrflea_state *state = (mrflea_state *)space->machine->driver_data; + + if (offset & 2) + { + /* tile_number */ + state->spriteram[offset | 1] = offset & 1; offset &= ~1; } - space->machine->generic.spriteram.u8[offset] = data; + + state->spriteram[offset] = data; } -static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect) +static void draw_sprites( running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect ) { + mrflea_state *state = (mrflea_state *)machine->driver_data; const gfx_element *gfx = machine->gfx[0]; - const UINT8 *source = machine->generic.spriteram.u8; - const UINT8 *finish = source+0x100; + const UINT8 *source = state->spriteram; + const UINT8 *finish = source + 0x100; rectangle clip = *video_screen_get_visible_area(machine->primary_screen); + clip.max_x -= 24; clip.min_x += 16; - while( sourcegeneric.videoram.u8; + mrflea_state *state = (mrflea_state *)machine->driver_data; + const UINT8 *source = state->videoram; const gfx_element *gfx = machine->gfx[1]; - int sx,sy; + int sx, sy; int base = 0; - if( mrflea_gfx_bank&0x04 ) base |= 0x400; - if( mrflea_gfx_bank&0x10 ) base |= 0x200; - for( sy=0; sy<256; sy+=8 ){ - for( sx=0; sx<256; sx+=8 ){ - int tile_number = base+source[0]+source[0x400]*0x100; + + if (BIT(state->gfx_bank, 2)) + base |= 0x400; + + if (BIT(state->gfx_bank, 4)) + base |= 0x200; + + for (sy = 0; sy < 256; sy += 8) + { + for (sx = 0; sx < 256; sx += 8) + { + int tile_number = base + source[0] + source[0x400] * 0x100; source++; drawgfx_opaque( bitmap, cliprect, gfx, @@ -83,9 +104,6 @@ static void draw_background(running_machine *machine, bitmap_t *bitmap, const re } } -VIDEO_START( mrflea ){ -} - VIDEO_UPDATE( mrflea ) { draw_background(screen->machine, bitmap, cliprect); diff --git a/src/mame/video/mrjong.c b/src/mame/video/mrjong.c index eb93b1fb0cc..3241bf04ee9 100644 --- a/src/mame/video/mrjong.c +++ b/src/mame/video/mrjong.c @@ -7,16 +7,15 @@ ***************************************************************************/ #include "emu.h" +#include "includes/mrjong.h" -UINT8 *mrjong_videoram; -UINT8 *mrjong_colorram; -static tilemap_t *bg_tilemap; /*************************************************************************** Convert the color PROMs. (from video/pengo.c) ***************************************************************************/ + PALETTE_INIT( mrjong ) { int i; @@ -31,21 +30,21 @@ PALETTE_INIT( mrjong ) int r, g, b; /* red component */ - bit0 = (color_prom[i] >> 0) & 0x01; - bit1 = (color_prom[i] >> 1) & 0x01; - bit2 = (color_prom[i] >> 2) & 0x01; + bit0 = BIT(color_prom[i], 0); + bit1 = BIT(color_prom[i], 1); + bit2 = BIT(color_prom[i], 2); r = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2; /* green component */ - bit0 = (color_prom[i] >> 3) & 0x01; - bit1 = (color_prom[i] >> 4) & 0x01; - bit2 = (color_prom[i] >> 5) & 0x01; + bit0 = BIT(color_prom[i], 3); + bit1 = BIT(color_prom[i], 4); + bit2 = BIT(color_prom[i], 5); g = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2; /* blue component */ bit0 = 0; - bit1 = (color_prom[i] >> 6) & 0x01; - bit2 = (color_prom[i] >> 7) & 0x01; + bit1 = BIT(color_prom[i], 6); + bit2 = BIT(color_prom[i], 7); b = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2; colortable_palette_set_color(machine->colortable, i, MAKE_RGB(r, g, b)); @@ -68,46 +67,52 @@ PALETTE_INIT( mrjong ) Display control parameter. ***************************************************************************/ + WRITE8_HANDLER( mrjong_videoram_w ) { - mrjong_videoram[offset] = data; - tilemap_mark_tile_dirty(bg_tilemap, offset); + mrjong_state *state = (mrjong_state *)space->machine->driver_data; + state->videoram[offset] = data; + tilemap_mark_tile_dirty(state->bg_tilemap, offset); } WRITE8_HANDLER( mrjong_colorram_w ) { - mrjong_colorram[offset] = data; - tilemap_mark_tile_dirty(bg_tilemap, offset); + mrjong_state *state = (mrjong_state *)space->machine->driver_data; + state->colorram[offset] = data; + tilemap_mark_tile_dirty(state->bg_tilemap, offset); } WRITE8_HANDLER( mrjong_flipscreen_w ) { - if (flip_screen_get(space->machine) != (data & 0x01)) + if (flip_screen_get(space->machine) != BIT(data, 2)) { - flip_screen_set(space->machine, data & 0x01); + flip_screen_set(space->machine, BIT(data, 2)); tilemap_mark_all_tiles_dirty_all(space->machine); } } static TILE_GET_INFO( get_bg_tile_info ) { - int code = mrjong_videoram[tile_index] | ((mrjong_colorram[tile_index] & 0x20) << 3); - int color = mrjong_colorram[tile_index] & 0x1f; - int flags = ((mrjong_colorram[tile_index] & 0x40) ? TILE_FLIPX : 0) | ((mrjong_colorram[tile_index] & 0x80) ? TILE_FLIPY : 0); + mrjong_state *state = (mrjong_state *)machine->driver_data; + int code = state->videoram[tile_index] | ((state->colorram[tile_index] & 0x20) << 3); + int color = state->colorram[tile_index] & 0x1f; + int flags = ((state->colorram[tile_index] & 0x40) ? TILE_FLIPX : 0) | ((state->colorram[tile_index] & 0x80) ? TILE_FLIPY : 0); SET_TILE_INFO(0, code, color, flags); } VIDEO_START( mrjong ) { - bg_tilemap = tilemap_create(machine, get_bg_tile_info, tilemap_scan_rows_flip_xy, 8, 8, 32, 32); + mrjong_state *state = (mrjong_state *)machine->driver_data; + state->bg_tilemap = tilemap_create(machine, get_bg_tile_info, tilemap_scan_rows_flip_xy, 8, 8, 32, 32); } /* Note: First 0x40 entries in the videoram are actually spriteram */ -static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect) +static void draw_sprites( running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect ) { + mrjong_state *state = (mrjong_state *)machine->driver_data; int offs; for (offs = (0x40 - 4); offs >= 0; offs -= 4) @@ -117,13 +122,13 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const recta int sx, sy; int flipx, flipy; - sprt = (((mrjong_videoram[offs + 1] >> 2) & 0x3f) | ((mrjong_videoram[offs + 3] & 0x20) << 1)); - flipx = (mrjong_videoram[offs + 1] & 0x01) >> 0; - flipy = (mrjong_videoram[offs + 1] & 0x02) >> 1; - color = (mrjong_videoram[offs + 3] & 0x1f); + sprt = (((state->videoram[offs + 1] >> 2) & 0x3f) | ((state->videoram[offs + 3] & 0x20) << 1)); + flipx = (state->videoram[offs + 1] & 0x01) >> 0; + flipy = (state->videoram[offs + 1] & 0x02) >> 1; + color = (state->videoram[offs + 3] & 0x1f); - sx = 224 - mrjong_videoram[offs + 2]; - sy = mrjong_videoram[offs + 0]; + sx = 224 - state->videoram[offs + 2]; + sy = state->videoram[offs + 0]; if (flip_screen_get(machine)) { sx = 208 - sx; @@ -142,7 +147,8 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const recta VIDEO_UPDATE( mrjong ) { - tilemap_draw(bitmap, cliprect, bg_tilemap, 0, 0); + mrjong_state *state = (mrjong_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/mugsmash.c b/src/mame/video/mugsmash.c index f141ea9b9c1..e068059aa60 100644 --- a/src/mame/video/mugsmash.c +++ b/src/mame/video/mugsmash.c @@ -27,16 +27,16 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const recta mugsmash_state *state = (mugsmash_state *)machine->driver_data; const UINT16 *source = state->spriteram; - const UINT16 *finish = source+0x2000; + const UINT16 *finish = source + 0x2000; const gfx_element *gfx = machine->gfx[0]; - while( source>7; + int flipx = (attr & 0x0080) >> 7; int colour = (attr & 0x000f); xpos += ((attr & 0x0020) >> 5) * 0x100; @@ -71,13 +71,13 @@ static TILE_GET_INFO( get_mugsmash_tile_info1 ) */ mugsmash_state *state = (mugsmash_state *)machine->driver_data; - int tileno,colour,fx; + int tileno, colour, fx; - tileno = state->videoram1[tile_index *2 +1]; - colour = state->videoram1[tile_index *2] & 0x000f; - fx = (state->videoram1[tile_index *2] & 0xc0) >>6; + tileno = state->videoram1[tile_index * 2 + 1]; + colour = state->videoram1[tile_index * 2] & 0x000f; + fx = (state->videoram1[tile_index * 2] & 0xc0) >> 6; - SET_TILE_INFO(1,tileno,colour,TILE_FLIPYX(fx)); + SET_TILE_INFO(1, tileno, colour, TILE_FLIPYX(fx)); } WRITE16_HANDLER( mugsmash_videoram1_w ) @@ -85,7 +85,7 @@ WRITE16_HANDLER( mugsmash_videoram1_w ) mugsmash_state *state = (mugsmash_state *)space->machine->driver_data; state->videoram1[offset] = data; - tilemap_mark_tile_dirty(state->tilemap1,offset/2); + tilemap_mark_tile_dirty(state->tilemap1, offset / 2); } static TILE_GET_INFO( get_mugsmash_tile_info2 ) @@ -100,13 +100,13 @@ static TILE_GET_INFO( get_mugsmash_tile_info2 ) */ mugsmash_state *state = (mugsmash_state *)machine->driver_data; - int tileno,colour,fx; + int tileno, colour, fx; - tileno = state->videoram2[tile_index *2 +1]; - colour = state->videoram2[tile_index *2] & 0x000f; - fx = (state->videoram2[tile_index *2] & 0xc0) >>6; + tileno = state->videoram2[tile_index * 2 + 1]; + colour = state->videoram2[tile_index * 2] & 0x000f; + fx = (state->videoram2[tile_index * 2] & 0xc0) >> 6; - SET_TILE_INFO(1,tileno,16+colour,TILE_FLIPYX(fx)); + SET_TILE_INFO(1, tileno, 16 + colour, TILE_FLIPYX(fx)); } WRITE16_HANDLER( mugsmash_videoram2_w ) @@ -114,7 +114,7 @@ WRITE16_HANDLER( mugsmash_videoram2_w ) mugsmash_state *state = (mugsmash_state *)space->machine->driver_data; state->videoram2[offset] = data; - tilemap_mark_tile_dirty(state->tilemap2,offset/2); + tilemap_mark_tile_dirty(state->tilemap2, offset / 2); } WRITE16_HANDLER (mugsmash_reg_w) @@ -127,16 +127,16 @@ WRITE16_HANDLER (mugsmash_reg_w) switch (offset) { case 0: - tilemap_set_scrollx(state->tilemap2,0, state->regs1[2]+7); + tilemap_set_scrollx(state->tilemap2, 0, state->regs1[2] + 7); break; case 1: - tilemap_set_scrolly(state->tilemap2,0, state->regs1[3]+4); + tilemap_set_scrolly(state->tilemap2, 0, state->regs1[3] + 4); break; case 2: - tilemap_set_scrollx(state->tilemap1,0, state->regs1[0]+3); + tilemap_set_scrollx(state->tilemap1, 0, state->regs1[0] + 3); break; case 3: - tilemap_set_scrolly(state->tilemap1,0, state->regs1[1]+4); + tilemap_set_scrolly(state->tilemap1, 0, state->regs1[1] + 4); break; } } @@ -145,18 +145,18 @@ VIDEO_START( mugsmash ) { mugsmash_state *state = (mugsmash_state *)machine->driver_data; - state->tilemap1 = tilemap_create(machine, get_mugsmash_tile_info1,tilemap_scan_rows, 16, 16,32,32); - tilemap_set_transparent_pen(state->tilemap1,0); + state->tilemap1 = tilemap_create(machine, get_mugsmash_tile_info1, tilemap_scan_rows, 16, 16, 32, 32); + tilemap_set_transparent_pen(state->tilemap1, 0); - state->tilemap2 = tilemap_create(machine, get_mugsmash_tile_info2,tilemap_scan_rows, 16, 16,32,32); + state->tilemap2 = tilemap_create(machine, get_mugsmash_tile_info2, tilemap_scan_rows, 16, 16, 32, 32); } VIDEO_UPDATE( mugsmash ) { mugsmash_state *state = (mugsmash_state *)screen->machine->driver_data; - tilemap_draw(bitmap,cliprect,state->tilemap2,0,0); - tilemap_draw(bitmap,cliprect,state->tilemap1,0,0); - draw_sprites(screen->machine,bitmap,cliprect); + tilemap_draw(bitmap, cliprect, state->tilemap2, 0, 0); + tilemap_draw(bitmap, cliprect, state->tilemap1, 0, 0); + draw_sprites(screen->machine, bitmap, cliprect); return 0; } diff --git a/src/mame/video/munchmo.c b/src/mame/video/munchmo.c index 8866d91f778..54bff88e29a 100644 --- a/src/mame/video/munchmo.c +++ b/src/mame/video/munchmo.c @@ -1,73 +1,70 @@ #include "emu.h" +#include "includes/munchmo.h" -UINT8 *mnchmobl_vreg; -UINT8 *mnchmobl_status_vram; -UINT8 *mnchmobl_sprite_xpos; -UINT8 *mnchmobl_sprite_attr; -UINT8 *mnchmobl_sprite_tile; - -static int mnchmobl_palette_bank; -static int flipscreen; - PALETTE_INIT( mnchmobl ) { int i; - for (i = 0;i < machine->config->total_colors;i++) + for (i = 0; i < machine->config->total_colors; i++) { - int bit0,bit1,bit2,r,g,b; + int bit0, bit1, bit2, r, g, b; /* red component */ - bit0 = (color_prom[i] >> 0) & 0x01; - bit1 = (color_prom[i] >> 1) & 0x01; - bit2 = (color_prom[i] >> 2) & 0x01; + bit0 = BIT(color_prom[i], 0); + bit1 = BIT(color_prom[i], 1); + bit2 = BIT(color_prom[i], 2); r = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2; /* green component */ - bit0 = (color_prom[i] >> 3) & 0x01; - bit1 = (color_prom[i] >> 4) & 0x01; - bit2 = (color_prom[i] >> 5) & 0x01; + bit0 = BIT(color_prom[i], 3); + bit1 = BIT(color_prom[i], 4); + bit2 = BIT(color_prom[i], 5); g = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2; /* blue component */ - bit0 = (color_prom[i] >> 6) & 0x01; - bit1 = (color_prom[i] >> 7) & 0x01; + bit0 = BIT(color_prom[i], 6); + bit1 = BIT(color_prom[i], 7); b = 0x4f * bit0 + 0xa8 * bit1; - palette_set_color(machine,i,MAKE_RGB(r,g,b)); + palette_set_color(machine, i, MAKE_RGB(r, g, b)); } } WRITE8_HANDLER( mnchmobl_palette_bank_w ) { - mnchmobl_palette_bank = data&0x3; + munchmo_state *state = (munchmo_state *)space->machine->driver_data; + state->palette_bank = data & 0x3; } WRITE8_HANDLER( mnchmobl_flipscreen_w ) { - flipscreen = data; + munchmo_state *state = (munchmo_state *)space->machine->driver_data; + state->flipscreen = data; } VIDEO_START( mnchmobl ) { - machine->generic.tmpbitmap = auto_bitmap_alloc(machine,512,512,video_screen_get_format(machine->primary_screen)); + munchmo_state *state = (munchmo_state *)machine->driver_data; + state->tmpbitmap = auto_bitmap_alloc(machine, 512, 512, video_screen_get_format(machine->primary_screen)); } -static void draw_status(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect) +static void draw_status( running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect ) { + munchmo_state *state = (munchmo_state *)machine->driver_data; const gfx_element *gfx = machine->gfx[0]; int row; - for( row=0; row<4; row++ ) + for (row = 0; row < 4; row++) { - int sy,sx = (row&1)*8; - const UINT8 *source = mnchmobl_status_vram + (~row&1)*32; - if( row<=1 ) + int sy, sx = (row & 1) * 8; + const UINT8 *source = state->status_vram + (~row & 1) * 32; + if (row <= 1) { - source+=2*32; - sx+=256+32+16; + source += 2 * 32; + sx += 256 + 32 + 16; } - for( sy=0; sy<256; sy+=8 ) + + for (sy = 0; sy < 256; sy += 8) { drawgfx_opaque( bitmap, cliprect, gfx, @@ -79,62 +76,64 @@ static void draw_status(running_machine *machine, bitmap_t *bitmap, const rectan } } -static void draw_background(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect) +static void draw_background( running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect ) { /* ROM B1.2C contains 256 tilemaps defining 4x4 configurations of the tiles in ROM B2.2B */ + munchmo_state *state = (munchmo_state *)machine->driver_data; UINT8 *rom = memory_region(machine, "gfx2"); const gfx_element *gfx = machine->gfx[1]; int offs; - for( offs=0; offs<0x100; offs++ ) + for (offs = 0; offs < 0x100; offs++) { - int sy = (offs%16)*32; - int sx = (offs/16)*32; - int tile_number = machine->generic.videoram.u8[offs]; - int row,col; + int sy = (offs % 16) * 32; + int sx = (offs / 16) * 32; + int tile_number = state->videoram[offs]; + int row, col; - for( row=0; row<4; row++ ) + for (row = 0; row < 4; row++) { - for( col=0; col<4; col++ ) + for (col = 0; col < 4; col++) { - drawgfx_opaque( machine->generic.tmpbitmap,0, gfx, - rom[col+tile_number*4+row*0x400], - mnchmobl_palette_bank, + drawgfx_opaque(state->tmpbitmap, 0, gfx, + rom[col + tile_number * 4 + row * 0x400], + state->palette_bank, 0,0, /* flip */ - sx+col*8, sy+row*8 ); + sx + col * 8, sy + row * 8 ); } } } { - int scrollx = -(mnchmobl_vreg[6]*2+(mnchmobl_vreg[7]>>7))-64-128-16; + int scrollx = -(state->vreg[6] *2 + (state->vreg[7] >> 7)) - 64 - 128 - 16; int scrolly = 0; - copyscrollbitmap(bitmap,machine->generic.tmpbitmap, 1,&scrollx,1,&scrolly, cliprect); + copyscrollbitmap(bitmap, state->tmpbitmap, 1, &scrollx, 1, &scrolly, cliprect); } } -static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect) +static void draw_sprites( running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect ) { - int scroll = mnchmobl_vreg[6]; - int flags = mnchmobl_vreg[7]; /* XB?????? */ + munchmo_state *state = (munchmo_state *)machine->driver_data; + int scroll = state->vreg[6]; + int flags = state->vreg[7]; /* XB?????? */ int xadjust = - 128 - 16 - ((flags & 0x80) ? 1 : 0); int bank = (flags & 0x40) ? 1 : 0; const gfx_element *gfx = machine->gfx[2 + bank]; - int color_base = mnchmobl_palette_bank * 4 + 3; + int color_base = state->palette_bank * 4 + 3; int i, j; - int firstsprite = mnchmobl_vreg[4] & 0x3f; - for( i = firstsprite; i < firstsprite + 0x40; i++ ) + int firstsprite = state->vreg[4] & 0x3f; + for (i = firstsprite; i < firstsprite + 0x40; i++) { - for( j = 0; j < 8; j++ ) + for (j = 0; j < 8; j++) { - int offs = (j << 6) | ( i & 0x3f ); - int tile_number = mnchmobl_sprite_tile[offs]; /* ETTTTTTT */ - int attributes = mnchmobl_sprite_attr[offs]; /* XYYYYYCC */ - int sx = mnchmobl_sprite_xpos[offs]; /* XXXXXXX? */ + int offs = (j << 6) | (i & 0x3f); + int tile_number = state->sprite_tile[offs]; /* ETTTTTTT */ + int attributes = state->sprite_attr[offs]; /* XYYYYYCC */ + int sx = state->sprite_xpos[offs]; /* XXXXXXX? */ int sy = (offs >> 6) << 5; /* Y YY------ */ sy += (attributes >> 2) & 0x1f; if( attributes & 0x80 )