diff options
89 files changed, 5804 insertions, 3999 deletions
diff --git a/.gitattributes b/.gitattributes index 606dad125ca..509d20a98bc 100644 --- a/.gitattributes +++ b/.gitattributes @@ -2329,6 +2329,7 @@ src/mame/includes/aeroboto.h svneol=native#text/plain src/mame/includes/aerofgt.h svneol=native#text/plain src/mame/includes/airbustr.h svneol=native#text/plain src/mame/includes/ajax.h svneol=native#text/plain +src/mame/includes/aliens.h svneol=native#text/plain src/mame/includes/alpha68k.h svneol=native#text/plain src/mame/includes/ambush.h svneol=native#text/plain src/mame/includes/amiga.h svneol=native#text/plain @@ -2344,6 +2345,7 @@ src/mame/includes/arkanoid.h svneol=native#text/plain src/mame/includes/armedf.h svneol=native#text/plain src/mame/includes/artmagic.h svneol=native#text/plain src/mame/includes/ashnojoe.h svneol=native#text/plain +src/mame/includes/asterix.h svneol=native#text/plain src/mame/includes/asteroid.h svneol=native#text/plain src/mame/includes/astrocde.h svneol=native#text/plain src/mame/includes/astrof.h svneol=native#text/plain @@ -2371,15 +2373,18 @@ src/mame/includes/beathead.h svneol=native#text/plain src/mame/includes/beezer.h svneol=native#text/plain src/mame/includes/bigevglf.h svneol=native#text/plain src/mame/includes/bionicc.h svneol=native#text/plain +src/mame/includes/bishi.h svneol=native#text/plain src/mame/includes/bladestl.h svneol=native#text/plain src/mame/includes/blktiger.h svneol=native#text/plain src/mame/includes/blmbycar.h svneol=native#text/plain src/mame/includes/blockade.h svneol=native#text/plain +src/mame/includes/blockhl.h svneol=native#text/plain src/mame/includes/blockout.h svneol=native#text/plain src/mame/includes/blstroid.h svneol=native#text/plain src/mame/includes/blueprnt.h svneol=native#text/plain src/mame/includes/bogeyman.h svneol=native#text/plain src/mame/includes/bombjack.h svneol=native#text/plain +src/mame/includes/bottom9.h svneol=native#text/plain src/mame/includes/brkthru.h svneol=native#text/plain src/mame/includes/bsktball.h svneol=native#text/plain src/mame/includes/btime.h svneol=native#text/plain @@ -2404,6 +2409,7 @@ src/mame/includes/chaknpop.h svneol=native#text/plain src/mame/includes/champbas.h svneol=native#text/plain src/mame/includes/changela.h svneol=native#text/plain src/mame/includes/cheekyms.h svneol=native#text/plain +src/mame/includes/chqflag.h svneol=native#text/plain src/mame/includes/cidelsa.h svneol=native#text/plain src/mame/includes/cinemat.h svneol=native#text/plain src/mame/includes/circus.h svneol=native#text/plain @@ -2424,11 +2430,13 @@ src/mame/includes/cps1.h svneol=native#text/plain src/mame/includes/cps3.h svneol=native#text/plain src/mame/includes/crbaloon.h svneol=native#text/plain src/mame/includes/crgolf.h svneol=native#text/plain +src/mame/includes/crimfght.h svneol=native#text/plain src/mame/includes/crospang.h svneol=native#text/plain src/mame/includes/crshrace.h svneol=native#text/plain src/mame/includes/cubocd32.h svneol=native#text/plain src/mame/includes/cvs.h svneol=native#text/plain src/mame/includes/cyberbal.h svneol=native#text/plain +src/mame/includes/dbz.h svneol=native#text/plain src/mame/includes/dc.h svneol=native#text/plain src/mame/includes/dcheese.h svneol=native#text/plain src/mame/includes/dday.h svneol=native#text/plain @@ -2500,8 +2508,10 @@ src/mame/includes/gameplan.h svneol=native#text/plain src/mame/includes/gaplus.h svneol=native#text/plain src/mame/includes/gauntlet.h svneol=native#text/plain src/mame/includes/gberet.h svneol=native#text/plain +src/mame/includes/gbusters.h svneol=native#text/plain src/mame/includes/gcpinbal.h svneol=native#text/plain src/mame/includes/genesis.h svneol=native#text/plain +src/mame/includes/gijoe.h svneol=native#text/plain src/mame/includes/ginganin.h svneol=native#text/plain src/mame/includes/glass.h svneol=native#text/plain src/mame/includes/gng.h svneol=native#text/plain @@ -2570,6 +2580,7 @@ src/mame/includes/lazercmd.h svneol=native#text/plain src/mame/includes/legionna.h svneol=native#text/plain src/mame/includes/leland.h svneol=native#text/plain src/mame/includes/lemmings.h svneol=native#text/plain +src/mame/includes/lethal.h svneol=native#text/plain src/mame/includes/lethalj.h svneol=native#text/plain src/mame/includes/liberate.h svneol=native#text/plain src/mame/includes/liberatr.h svneol=native#text/plain @@ -2584,6 +2595,7 @@ src/mame/includes/m72.h svneol=native#text/plain src/mame/includes/m79amb.h svneol=native#text/plain src/mame/includes/m92.h svneol=native#text/plain src/mame/includes/madalien.h svneol=native#text/plain +src/mame/includes/mainevt.h svneol=native#text/plain src/mame/includes/malzak.h svneol=native#text/plain src/mame/includes/mappy.h svneol=native#text/plain src/mame/includes/mario.h svneol=native#text/plain @@ -2604,6 +2616,7 @@ src/mame/includes/mjkjidai.h svneol=native#text/plain src/mame/includes/model1.h svneol=native#text/plain src/mame/includes/model2.h svneol=native#text/plain src/mame/includes/model3.h svneol=native#text/plain +src/mame/includes/moo.h svneol=native#text/plain src/mame/includes/ms32.h svneol=native#text/plain src/mame/includes/mw8080bw.h svneol=native#text/plain src/mame/includes/mystston.h svneol=native#text/plain @@ -2637,9 +2650,11 @@ src/mame/includes/nycaptor.h svneol=native#text/plain src/mame/includes/offtwall.h svneol=native#text/plain src/mame/includes/oneshot.h svneol=native#text/plain src/mame/includes/orbit.h svneol=native#text/plain +src/mame/includes/overdriv.h svneol=native#text/plain src/mame/includes/pacman.h svneol=native#text/plain src/mame/includes/pandoras.h svneol=native#text/plain src/mame/includes/paradise.h svneol=native#text/plain +src/mame/includes/parodius.h svneol=native#text/plain src/mame/includes/pgm.h svneol=native#text/plain src/mame/includes/phoenix.h svneol=native#text/plain src/mame/includes/pitnrun.h svneol=native#text/plain @@ -2663,6 +2678,8 @@ src/mame/includes/redalert.h svneol=native#text/plain src/mame/includes/relief.h svneol=native#text/plain src/mame/includes/retofinv.h svneol=native#text/plain src/mame/includes/rockrage.h svneol=native#text/plain +src/mame/includes/rollerg.h svneol=native#text/plain +src/mame/includes/rungun.h svneol=native#text/plain src/mame/includes/segag80r.h svneol=native#text/plain src/mame/includes/segag80v.h svneol=native#text/plain src/mame/includes/segas24.h svneol=native#text/plain @@ -2689,6 +2706,7 @@ src/mame/includes/spacefb.h svneol=native#text/plain src/mame/includes/spiders.h svneol=native#text/plain src/mame/includes/sprint2.h svneol=native#text/plain src/mame/includes/sprint8.h svneol=native#text/plain +src/mame/includes/spy.h svneol=native#text/plain src/mame/includes/srmp2.h svneol=native#text/plain src/mame/includes/sspeedr.h svneol=native#text/plain src/mame/includes/st0016.h svneol=native#text/plain @@ -2703,7 +2721,9 @@ src/mame/includes/suna8.h svneol=native#text/plain src/mame/includes/suprnova.h svneol=native#text/plain src/mame/includes/suprridr.h svneol=native#text/plain src/mame/includes/suprslam.h svneol=native#text/plain +src/mame/includes/surpratk.h svneol=native#text/plain src/mame/includes/system16.h svneol=native#text/plain +src/mame/includes/tail2nos.h svneol=native#text/plain src/mame/includes/taito_b.h svneol=native#text/plain src/mame/includes/taito_f2.h svneol=native#text/plain src/mame/includes/taito_f3.h svneol=native#text/plain @@ -2719,6 +2739,7 @@ src/mame/includes/tecmosys.h svneol=native#text/plain src/mame/includes/tetrisp2.h svneol=native#text/plain src/mame/includes/thedeep.h svneol=native#text/plain src/mame/includes/thunderj.h svneol=native#text/plain +src/mame/includes/thunderx.h svneol=native#text/plain src/mame/includes/tiamc1.h svneol=native#text/plain src/mame/includes/timeplt.h svneol=native#text/plain src/mame/includes/tmnt.h svneol=native#text/plain @@ -2735,10 +2756,12 @@ src/mame/includes/turbo.h svneol=native#text/plain src/mame/includes/twin16.h svneol=native#text/plain src/mame/includes/twincobr.h svneol=native#text/plain src/mame/includes/tx1.h svneol=native#text/plain +src/mame/includes/ultraman.h svneol=native#text/plain src/mame/includes/ultratnk.h svneol=native#text/plain src/mame/includes/unico.h svneol=native#text/plain src/mame/includes/vastar.h svneol=native#text/plain src/mame/includes/vball.h svneol=native#text/plain +src/mame/includes/vendetta.h svneol=native#text/plain src/mame/includes/vertigo.h svneol=native#text/plain src/mame/includes/vicdual.h svneol=native#text/plain src/mame/includes/victory.h svneol=native#text/plain @@ -2751,6 +2774,7 @@ src/mame/includes/williams.h svneol=native#text/plain src/mame/includes/wiping.h svneol=native#text/plain src/mame/includes/wrally.h svneol=native#text/plain src/mame/includes/wwfwfest.h svneol=native#text/plain +src/mame/includes/xexex.h svneol=native#text/plain src/mame/includes/xmen.h svneol=native#text/plain src/mame/includes/xybots.h svneol=native#text/plain src/mame/includes/yunsun16.h svneol=native#text/plain diff --git a/src/mame/drivers/ajax.c b/src/mame/drivers/ajax.c index f191ea95d3b..f9dd7316c48 100644 --- a/src/mame/drivers/ajax.c +++ b/src/mame/drivers/ajax.c @@ -1,12 +1,12 @@ /*************************************************************************** -"AJAX/Typhoon" (Konami GX770) + "AJAX/Typhoon" (Konami GX770) -Driver by: - Manuel Abadia <manu@teleline.es> + Driver by: + Manuel Abadia <manu@teleline.es> -TO DO: -- Find the CPU core bug, that makes the 052001 to read from 0x0000 + TO DO: + - Find the CPU core bug, that makes the 052001 to read from 0x0000 ***************************************************************************/ @@ -23,11 +23,6 @@ TO DO: static WRITE8_DEVICE_HANDLER( k007232_extvol_w ); static WRITE8_HANDLER( sound_bank_w ); -extern void ajax_tile_callback(running_machine *machine, int layer,int bank,int *code,int *color,int *flags,int *priority); -extern void ajax_sprite_callback(running_machine *machine, int *code,int *color,int *priority,int *shadow); -extern void ajax_zoom_callback(running_machine *machine, int *code,int *color,int *flags); - - /****************************************************************************/ static ADDRESS_MAP_START( ajax_main_map, ADDRESS_SPACE_PROGRAM, 8 ) @@ -56,9 +51,9 @@ static ADDRESS_MAP_START( ajax_sound_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0x0000, 0x7fff) AM_ROM /* ROM F6 */ AM_RANGE(0x8000, 0x87ff) AM_RAM /* RAM 2128SL at D16 */ AM_RANGE(0x9000, 0x9000) AM_WRITE(sound_bank_w) /* 007232 bankswitch */ - AM_RANGE(0xa000, 0xa00d) AM_DEVREADWRITE("konami1", k007232_r, k007232_w) /* 007232 registers (chip 1) */ - AM_RANGE(0xb000, 0xb00d) AM_DEVREADWRITE("konami2", k007232_r, k007232_w) /* 007232 registers (chip 2) */ - AM_RANGE(0xb80c, 0xb80c) AM_DEVWRITE("konami2", k007232_extvol_w) /* extra volume, goes to the 007232 w/ A11 */ + AM_RANGE(0xa000, 0xa00d) AM_DEVREADWRITE("k007232_1", k007232_r, k007232_w) /* 007232 registers (chip 1) */ + AM_RANGE(0xb000, 0xb00d) AM_DEVREADWRITE("k007232_2", k007232_r, k007232_w) /* 007232 registers (chip 2) */ + AM_RANGE(0xb80c, 0xb80c) AM_DEVWRITE("k007232_2", k007232_extvol_w) /* extra volume, goes to the 007232 w/ A11 */ /* selecting a different latch for the external port */ AM_RANGE(0xc000, 0xc001) AM_DEVREADWRITE("ymsnd", ym2151_r, ym2151_w) /* YM2151 */ AM_RANGE(0xe000, 0xe000) AM_READ(soundlatch_r) /* soundlatch_r */ @@ -142,35 +137,36 @@ INPUT_PORTS_END static WRITE8_HANDLER( sound_bank_w ) { + ajax_state *state = (ajax_state *)space->machine->driver_data; int bank_A, bank_B; /* banks # for the 007232 (chip 1) */ - bank_A = ((data >> 1) & 0x01); - bank_B = ((data >> 0) & 0x01); - k007232_set_bank( devtag_get_device(space->machine, "konami1"), bank_A, bank_B ); + bank_A = BIT(data, 1); + bank_B = BIT(data, 0); + k007232_set_bank(state->k007232_1, bank_A, bank_B); /* banks # for the 007232 (chip 2) */ bank_A = ((data >> 4) & 0x03); bank_B = ((data >> 2) & 0x03); - k007232_set_bank( devtag_get_device(space->machine, "konami2"), bank_A, bank_B ); + k007232_set_bank(state->k007232_2, bank_A, bank_B); } static void volume_callback0(const device_config *device, int v) { - k007232_set_volume(device,0,(v >> 4) * 0x11,0); - k007232_set_volume(device,1,0,(v & 0x0f) * 0x11); + k007232_set_volume(device, 0, (v >> 4) * 0x11, 0); + k007232_set_volume(device, 1, 0, (v & 0x0f) * 0x11); } static WRITE8_DEVICE_HANDLER( k007232_extvol_w ) { /* channel A volume (mono) */ - k007232_set_volume(device,0,(data & 0x0f) * 0x11/2,(data & 0x0f) * 0x11/2); + k007232_set_volume(device, 0, (data & 0x0f) * 0x11/2, (data & 0x0f) * 0x11/2); } static void volume_callback1(const device_config *device, int v) { /* channel B volume/pan */ - k007232_set_volume(device,1,(v & 0x0f) * 0x11/2,(v >> 4) * 0x11/2); + k007232_set_volume(device, 1, (v & 0x0f) * 0x11/2, (v >> 4) * 0x11/2); } static const k007232_interface k007232_interface_1 = @@ -211,6 +207,9 @@ static const k051316_interface ajax_k051316_intf = static MACHINE_DRIVER_START( ajax ) + /* driver data */ + MDRV_DRIVER_DATA(ajax_state) + /* basic machine hardware */ MDRV_CPU_ADD("maincpu", KONAMI, 3000000) /* 12/4 MHz*/ MDRV_CPU_PROGRAM_MAP(ajax_main_map) @@ -252,14 +251,14 @@ static MACHINE_DRIVER_START( ajax ) MDRV_SOUND_ROUTE(0, "lspeaker", 1.0) MDRV_SOUND_ROUTE(1, "rspeaker", 1.0) - MDRV_SOUND_ADD("konami1", K007232, 3579545) + MDRV_SOUND_ADD("k007232_1", K007232, 3579545) MDRV_SOUND_CONFIG(k007232_interface_1) MDRV_SOUND_ROUTE(0, "lspeaker", 0.20) MDRV_SOUND_ROUTE(0, "rspeaker", 0.20) MDRV_SOUND_ROUTE(1, "lspeaker", 0.20) MDRV_SOUND_ROUTE(1, "rspeaker", 0.20) - MDRV_SOUND_ADD("konami2", K007232, 3579545) + MDRV_SOUND_ADD("k007232_2", K007232, 3579545) MDRV_SOUND_CONFIG(k007232_interface_2) MDRV_SOUND_ROUTE(0, "lspeaker", 0.50) MDRV_SOUND_ROUTE(1, "rspeaker", 0.50) @@ -326,13 +325,13 @@ ROM_START( ajax ) ROM_REGION( 0x0200, "proms", 0 ) ROM_LOAD( "63s241.j11", 0x0000, 0x0200, CRC(9bdd719f) SHA1(de98e562080a97714047a8ad17abc6662c188897) ) /* priority encoder (not used) */ - ROM_REGION( 0x040000, "konami1", 0 ) /* 007232 data (chip 1) */ + ROM_REGION( 0x040000, "k007232_1", 0 ) /* 007232 data (chip 1) */ ROM_LOAD( "770c10-a.a7", 0x000000, 0x010000, CRC(e45ec094) SHA1(540c56e1d778e6082db23aa3da64f6179b1f3635) ) ROM_LOAD( "770c10-b.a6", 0x010000, 0x010000, CRC(349db7d3) SHA1(210da067038abeb021a77b3bf2664c9a49b3410a) ) ROM_LOAD( "770c10-c.a5", 0x020000, 0x010000, CRC(71cb1f05) SHA1(57399806746b659f52114fb7bd4e11a7992a2c5d) ) ROM_LOAD( "770c10-d.a4", 0x030000, 0x010000, CRC(e8ab1844) SHA1(dc22c4d11d6396a051398ba9ec6380aa3f856e71) ) - ROM_REGION( 0x080000, "konami2", 0 ) /* 007232 data (chip 2) */ + ROM_REGION( 0x080000, "k007232_2", 0 ) /* 007232 data (chip 2) */ ROM_LOAD( "770c11-a.c6", 0x000000, 0x010000, CRC(8cccd9e0) SHA1(73e50a896ed212462046b7bfa04aad5e266425ca) ) ROM_LOAD( "770c11-b.c5", 0x010000, 0x010000, CRC(0af2fedd) SHA1(038189210a73f668a0d913ff2dfc4ffa2e6bd5f4) ) ROM_LOAD( "770c11-c.c4", 0x020000, 0x010000, CRC(7471f24a) SHA1(04d7a69ddc01017a773485fa891711d94c8ad47c) ) @@ -372,10 +371,10 @@ ROM_START( typhoon ) ROM_REGION( 0x0200, "proms", 0 ) ROM_LOAD( "63s241.j11", 0x0000, 0x0200, CRC(9bdd719f) SHA1(de98e562080a97714047a8ad17abc6662c188897) ) /* priority encoder (not used) */ - ROM_REGION( 0x040000, "konami1", 0 ) /* 007232 data (chip 1) */ + ROM_REGION( 0x040000, "k007232_1", 0 ) /* 007232 data (chip 1) */ ROM_LOAD( "770c10", 0x000000, 0x040000, CRC(7fac825f) SHA1(581522d7a02dad16d2803ff344b4db133f767e6b) ) - ROM_REGION( 0x080000, "konami2", 0 ) /* 007232 data (chip 2) */ + ROM_REGION( 0x080000, "k007232_2", 0 ) /* 007232 data (chip 2) */ ROM_LOAD( "770c11", 0x000000, 0x080000, CRC(299a615a) SHA1(29cdcc21998c72f4cf311792b904b79bde236bab) ) ROM_END @@ -408,10 +407,10 @@ ROM_START( ajaxj ) ROM_REGION( 0x0200, "proms", 0 ) ROM_LOAD( "63s241.j11", 0x0000, 0x0200, CRC(9bdd719f) SHA1(de98e562080a97714047a8ad17abc6662c188897) ) /* priority encoder (not used) */ - ROM_REGION( 0x040000, "konami1", 0 ) /* 007232 data (chip 1) */ + ROM_REGION( 0x040000, "k007232_1", 0 ) /* 007232 data (chip 1) */ ROM_LOAD( "770c10", 0x000000, 0x040000, CRC(7fac825f) SHA1(581522d7a02dad16d2803ff344b4db133f767e6b) ) - ROM_REGION( 0x080000, "konami2", 0 ) /* 007232 data (chip 2) */ + ROM_REGION( 0x080000, "k007232_2", 0 ) /* 007232 data (chip 2) */ ROM_LOAD( "770c11", 0x000000, 0x080000, CRC(299a615a) SHA1(29cdcc21998c72f4cf311792b904b79bde236bab) ) ROM_END diff --git a/src/mame/drivers/aliens.c b/src/mame/drivers/aliens.c index 13a98635050..9bb5a070dfa 100644 --- a/src/mame/drivers/aliens.c +++ b/src/mame/drivers/aliens.c @@ -14,65 +14,58 @@ Preliminary driver by: #include "sound/2151intf.h" #include "video/konicdev.h" #include "includes/konamipt.h" +#include "includes/aliens.h" /* prototypes */ -static MACHINE_RESET( aliens ); static KONAMI_SETLINES_CALLBACK( aliens_banking ); -extern void aliens_tile_callback(running_machine *machine, int layer,int bank,int *code,int *color, int *flags, int *priority); -extern void aliens_sprite_callback(running_machine *machine, int *code,int *color,int *priority_mask,int *shadow); - -VIDEO_START( aliens ); -VIDEO_UPDATE( aliens ); - - -static int palette_selected; -static UINT8 *ram; - - static INTERRUPT_GEN( aliens_interrupt ) { - const device_config *k051960 = devtag_get_device(device->machine, "k051960"); + aliens_state *state = (aliens_state *)device->machine->driver_data; - if (k051960_is_irq_enabled(k051960)) + if (k051960_is_irq_enabled(state->k051960)) cpu_set_input_line(device, KONAMI_IRQ_LINE, HOLD_LINE); } static READ8_HANDLER( bankedram_r ) { - if (palette_selected) + aliens_state *state = (aliens_state *)space->machine->driver_data; + + if (state->palette_selected) return space->machine->generic.paletteram.u8[offset]; else - return ram[offset]; + return state->ram[offset]; } static WRITE8_HANDLER( bankedram_w ) { - if (palette_selected) - paletteram_xBBBBBGGGGGRRRRR_be_w(space,offset,data); + aliens_state *state = (aliens_state *)space->machine->driver_data; + + if (state->palette_selected) + paletteram_xBBBBBGGGGGRRRRR_be_w(space, offset, data); else - ram[offset] = data; + state->ram[offset] = data; } static WRITE8_HANDLER( aliens_coin_counter_w ) { - const device_config *k052109 = devtag_get_device(space->machine, "k052109"); + aliens_state *state = (aliens_state *)space->machine->driver_data; /* bits 0-1 = coin counters */ - coin_counter_w(space->machine, 0,data & 0x01); - coin_counter_w(space->machine, 1,data & 0x02); + coin_counter_w(space->machine, 0, data & 0x01); + coin_counter_w(space->machine, 1, data & 0x02); /* bit 5 = select work RAM or palette */ - palette_selected = data & 0x20; + state->palette_selected = data & 0x20; /* bit 6 = enable char ROM reading through the video RAM */ - k052109_set_rmrd_line(k052109, (data & 0x40) ? ASSERT_LINE : CLEAR_LINE); + k052109_set_rmrd_line(state->k052109, (data & 0x40) ? ASSERT_LINE : CLEAR_LINE); /* other bits unknown */ #if 0 { char baf[40]; - sprintf(baf,"%02x",data); + sprintf(baf, "%02x", data); popmessage(baf); } #endif @@ -80,55 +73,57 @@ static WRITE8_HANDLER( aliens_coin_counter_w ) static WRITE8_HANDLER( aliens_sh_irqtrigger_w ) { - soundlatch_w(space,offset,data); - cputag_set_input_line_and_vector(space->machine, "audiocpu", 0, HOLD_LINE, 0xff); + aliens_state *state = (aliens_state *)space->machine->driver_data; + + soundlatch_w(space, offset, data); + cpu_set_input_line_and_vector(state->audiocpu, 0, HOLD_LINE, 0xff); } static WRITE8_DEVICE_HANDLER( aliens_snd_bankswitch_w ) { + aliens_state *state = (aliens_state *)device->machine->driver_data; + /* b1: bank for chanel A */ /* b0: bank for chanel B */ - int bank_A = ((data >> 1) & 0x01); - int bank_B = ((data) & 0x01); + int bank_A = BIT(data, 1); + int bank_B = BIT(data, 0); - k007232_set_bank( devtag_get_device(device->machine, "konami"), bank_A, bank_B ); + k007232_set_bank(state->k007232, bank_A, bank_B); } static READ8_HANDLER( k052109_051960_r ) { - const device_config *k052109 = devtag_get_device(space->machine, "k052109"); - const device_config *k051960 = devtag_get_device(space->machine, "k051960"); + aliens_state *state = (aliens_state *)space->machine->driver_data; - if (k052109_get_rmrd_line(k052109) == CLEAR_LINE) + if (k052109_get_rmrd_line(state->k052109) == CLEAR_LINE) { if (offset >= 0x3800 && offset < 0x3808) - return k051937_r(k051960, offset - 0x3800); + return k051937_r(state->k051960, offset - 0x3800); else if (offset < 0x3c00) - return k052109_r(k052109, offset); + return k052109_r(state->k052109, offset); else - return k051960_r(k051960, offset - 0x3c00); + return k051960_r(state->k051960, offset - 0x3c00); } else - return k052109_r(k052109, offset); + return k052109_r(state->k052109, offset); } static WRITE8_HANDLER( k052109_051960_w ) { - const device_config *k052109 = devtag_get_device(space->machine, "k052109"); - const device_config *k051960 = devtag_get_device(space->machine, "k051960"); + aliens_state *state = (aliens_state *)space->machine->driver_data; if (offset >= 0x3800 && offset < 0x3808) - k051937_w(k051960, offset - 0x3800, data); + k051937_w(state->k051960, offset - 0x3800, data); else if (offset < 0x3c00) - k052109_w(k052109, offset, data); + k052109_w(state->k052109, offset, data); else - k051960_w(k051960, offset - 0x3c00, data); + k051960_w(state->k051960, offset - 0x3c00, data); } static ADDRESS_MAP_START( aliens_map, ADDRESS_SPACE_PROGRAM, 8 ) - AM_RANGE(0x0000, 0x03ff) AM_READWRITE(bankedram_r, bankedram_w) AM_BASE(&ram) /* palette + work RAM */ + AM_RANGE(0x0000, 0x03ff) AM_READWRITE(bankedram_r, bankedram_w) AM_BASE_MEMBER(aliens_state, ram) /* palette + work RAM */ AM_RANGE(0x0400, 0x1fff) AM_RAM AM_RANGE(0x2000, 0x3fff) AM_ROMBANK("bank1") /* banked ROM */ AM_RANGE(0x5f80, 0x5f80) AM_READ_PORT("DSW3") @@ -147,7 +142,7 @@ static ADDRESS_MAP_START( aliens_sound_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0x8000, 0x87ff) AM_RAM /* RAM */ AM_RANGE(0xa000, 0xa001) AM_DEVREADWRITE("ymsnd", ym2151_r, ym2151_w) AM_RANGE(0xc000, 0xc000) AM_READ(soundlatch_r) /* soundlatch_r */ - AM_RANGE(0xe000, 0xe00d) AM_DEVREADWRITE("konami", k007232_r, k007232_w) + AM_RANGE(0xe000, 0xe00d) AM_DEVREADWRITE("k007232", k007232_r, k007232_w) ADDRESS_MAP_END @@ -206,10 +201,10 @@ INPUT_PORTS_END ***************************************************************************/ -static void volume_callback(const device_config *device, int v) +static void volume_callback( const device_config *device, int v ) { - k007232_set_volume(device,0,(v & 0x0f) * 0x11,0); - k007232_set_volume(device,1,0,(v >> 4) * 0x11); + k007232_set_volume(device, 0, (v & 0x0f) * 0x11, 0); + k007232_set_volume(device, 1, 0, (v >> 4) * 0x11); } static const k007232_interface k007232_config = @@ -240,8 +235,37 @@ static const k051960_interface aliens_k051960_intf = aliens_sprite_callback }; +static MACHINE_START( aliens ) +{ + aliens_state *state = (aliens_state *)machine->driver_data; + UINT8 *ROM = memory_region(machine, "maincpu"); + + memory_configure_bank(machine, "bank1", 0, 20, &ROM[0x10000], 0x2000); + memory_set_bank(machine, "bank1", 0); + + state->maincpu = devtag_get_device(machine, "maincpu"); + state->audiocpu = devtag_get_device(machine, "audiocpu"); + state->k007232 = devtag_get_device(machine, "k007232"); + state->k052109 = devtag_get_device(machine, "k052109"); + state->k051960 = devtag_get_device(machine, "k051960"); + + state_save_register_global(machine, state->palette_selected); +} + +static MACHINE_RESET( aliens ) +{ + aliens_state *state = (aliens_state *)machine->driver_data; + + konami_configure_set_lines(cputag_get_cpu(machine, "maincpu"), aliens_banking); + + state->palette_selected = 0; +} + static MACHINE_DRIVER_START( aliens ) + /* driver data */ + MDRV_DRIVER_DATA(aliens_state) + /* basic machine hardware */ /* external clock should be 12MHz probably, CPU internal divider and precise cycle timings */ @@ -253,6 +277,7 @@ static MACHINE_DRIVER_START( aliens ) MDRV_CPU_ADD("audiocpu", Z80, 3579545) MDRV_CPU_PROGRAM_MAP(aliens_sound_map) + MDRV_MACHINE_START(aliens) MDRV_MACHINE_RESET(aliens) /* video hardware */ @@ -281,7 +306,7 @@ static MACHINE_DRIVER_START( aliens ) MDRV_SOUND_ROUTE(0, "mono", 0.60) MDRV_SOUND_ROUTE(1, "mono", 0.60) - MDRV_SOUND_ADD("konami", K007232, 3579545) + MDRV_SOUND_ADD("k007232", K007232, 3579545) MDRV_SOUND_CONFIG(k007232_config) MDRV_SOUND_ROUTE(0, "mono", 0.20) MDRV_SOUND_ROUTE(1, "mono", 0.20) @@ -322,7 +347,7 @@ ROM_START( aliens ) ROM_REGION( 0x0100, "proms", 0 ) ROM_LOAD( "821a08.h14", 0x0000, 0x0100, CRC(7da55800) SHA1(3826f73569c8ae0431510a355bdfa082152b74a5) ) /* priority encoder (not used) */ - ROM_REGION( 0x40000, "konami", 0 ) /* samples for 007232 */ + ROM_REGION( 0x40000, "k007232", 0 ) /* samples for 007232 */ ROM_LOAD( "875b04.e05", 0x00000, 0x40000, CRC(4e209ac8) SHA1(09d9eaae61bfd04bf318555ccd44d7371571d86d) ) ROM_END @@ -354,7 +379,7 @@ ROM_START( aliens2 ) ROM_REGION( 0x0100, "proms", 0 ) ROM_LOAD( "821a08.h14", 0x0000, 0x0100, CRC(7da55800) SHA1(3826f73569c8ae0431510a355bdfa082152b74a5) ) /* priority encoder (not used) */ - ROM_REGION( 0x40000, "konami", 0 ) /* samples for 007232 */ + ROM_REGION( 0x40000, "k007232", 0 ) /* samples for 007232 */ ROM_LOAD( "875b04.e05", 0x00000, 0x40000, CRC(4e209ac8) SHA1(09d9eaae61bfd04bf318555ccd44d7371571d86d) ) ROM_END @@ -386,7 +411,7 @@ ROM_START( aliens3 ) ROM_REGION( 0x0100, "proms", 0 ) ROM_LOAD( "821a08.h14", 0x0000, 0x0100, CRC(7da55800) SHA1(3826f73569c8ae0431510a355bdfa082152b74a5) ) /* priority encoder (not used) */ - ROM_REGION( 0x40000, "konami", 0 ) /* samples for 007232 */ + ROM_REGION( 0x40000, "k007232", 0 ) /* samples for 007232 */ ROM_LOAD( "875b04.e05", 0x00000, 0x40000, CRC(4e209ac8) SHA1(09d9eaae61bfd04bf318555ccd44d7371571d86d) ) ROM_END @@ -418,7 +443,7 @@ ROM_START( aliensu ) ROM_REGION( 0x0100, "proms", 0 ) ROM_LOAD( "821a08.h14", 0x0000, 0x0100, CRC(7da55800) SHA1(3826f73569c8ae0431510a355bdfa082152b74a5) ) /* priority encoder (not used) */ - ROM_REGION( 0x40000, "konami", 0 ) /* samples for 007232 */ + ROM_REGION( 0x40000, "k007232", 0 ) /* samples for 007232 */ ROM_LOAD( "875b04.e05", 0x00000, 0x40000, CRC(4e209ac8) SHA1(09d9eaae61bfd04bf318555ccd44d7371571d86d) ) ROM_END @@ -450,7 +475,7 @@ ROM_START( aliensj ) ROM_REGION( 0x0100, "proms", 0 ) ROM_LOAD( "821a08.h14", 0x0000, 0x0100, CRC(7da55800) SHA1(3826f73569c8ae0431510a355bdfa082152b74a5) ) /* priority encoder (not used) */ - ROM_REGION( 0x40000, "konami", 0 ) /* samples for 007232 */ + ROM_REGION( 0x40000, "k007232", 0 ) /* samples for 007232 */ ROM_LOAD( "875b04.e05", 0x00000, 0x40000, CRC(4e209ac8) SHA1(09d9eaae61bfd04bf318555ccd44d7371571d86d) ) ROM_END @@ -482,7 +507,7 @@ ROM_START( aliensj2 ) ROM_REGION( 0x0100, "proms", 0 ) ROM_LOAD( "821a08.h14", 0x0000, 0x0100, CRC(7da55800) SHA1(3826f73569c8ae0431510a355bdfa082152b74a5) ) /* priority encoder (not used) */ - ROM_REGION( 0x40000, "konami", 0 ) /* samples for 007232 */ + ROM_REGION( 0x40000, "k007232", 0 ) /* samples for 007232 */ ROM_LOAD( "875b04.e05", 0x00000, 0x40000, CRC(4e209ac8) SHA1(09d9eaae61bfd04bf318555ccd44d7371571d86d) ) ROM_END @@ -514,7 +539,7 @@ ROM_START( aliensa ) ROM_REGION( 0x0100, "proms", 0 ) ROM_LOAD( "821a08.h14", 0x0000, 0x0100, CRC(7da55800) SHA1(3826f73569c8ae0431510a355bdfa082152b74a5) ) /* priority encoder (not used) */ - ROM_REGION( 0x40000, "konami", 0 ) /* samples for 007232 */ + ROM_REGION( 0x40000, "k007232", 0 ) /* samples for 007232 */ ROM_LOAD( "875b04.e05", 0x00000, 0x40000, CRC(4e209ac8) SHA1(09d9eaae61bfd04bf318555ccd44d7371571d86d) ) ROM_END @@ -526,38 +551,19 @@ ROM_END static KONAMI_SETLINES_CALLBACK( aliens_banking ) { - UINT8 *RAM = memory_region(device->machine, "maincpu"); - int offs = 0x18000; - - - if (lines & 0x10) offs -= 0x8000; - - offs += (lines & 0x0f)*0x2000; - memory_set_bankptr(device->machine, "bank1", &RAM[offs] ); -} - -static MACHINE_RESET( aliens ) -{ - UINT8 *RAM = memory_region(machine, "maincpu"); + int bank = 4; - konami_configure_set_lines(cputag_get_cpu(machine, "maincpu"), aliens_banking); + if (lines & 0x10) + bank -= 4; - /* init the default bank */ - memory_set_bankptr(machine, "bank1", &RAM[0x10000]); + bank += (lines & 0x0f); + memory_set_bank(device->machine, "bank1", bank); } - - -static DRIVER_INIT( aliens ) -{ - state_save_register_global(machine, palette_selected); -} - - -GAME( 1990, aliens, 0, aliens, aliens, aliens, ROT0, "Konami", "Aliens (World set 1)", GAME_SUPPORTS_SAVE ) -GAME( 1990, aliens2, aliens, aliens, aliens, aliens, ROT0, "Konami", "Aliens (World set 2)", GAME_SUPPORTS_SAVE ) -GAME( 1990, aliens3, aliens, aliens, aliens, aliens, ROT0, "Konami", "Aliens (World set 3)", GAME_SUPPORTS_SAVE ) -GAME( 1990, aliensu, aliens, aliens, aliens, aliens, ROT0, "Konami", "Aliens (US)", GAME_SUPPORTS_SAVE ) -GAME( 1990, aliensj, aliens, aliens, aliens, aliens, ROT0, "Konami", "Aliens (Japan set 1)", GAME_SUPPORTS_SAVE ) -GAME( 1990, aliensj2, aliens, aliens, aliens, aliens, ROT0, "Konami", "Aliens (Japan set 2)", GAME_SUPPORTS_SAVE ) -GAME( 1990, aliensa, aliens, aliens, aliens, aliens, ROT0, "Konami", "Aliens (Asia)", GAME_SUPPORTS_SAVE ) +GAME( 1990, aliens, 0, aliens, aliens, 0, ROT0, "Konami", "Aliens (World set 1)", GAME_SUPPORTS_SAVE ) +GAME( 1990, aliens2, aliens, aliens, aliens, 0, ROT0, "Konami", "Aliens (World set 2)", GAME_SUPPORTS_SAVE ) +GAME( 1990, aliens3, aliens, aliens, aliens, 0, ROT0, "Konami", "Aliens (World set 3)", GAME_SUPPORTS_SAVE ) +GAME( 1990, aliensu, aliens, aliens, aliens, 0, ROT0, "Konami", "Aliens (US)", GAME_SUPPORTS_SAVE ) +GAME( 1990, aliensj, aliens, aliens, aliens, 0, ROT0, "Konami", "Aliens (Japan set 1)", GAME_SUPPORTS_SAVE ) +GAME( 1990, aliensj2, aliens, aliens, aliens, 0, ROT0, "Konami", "Aliens (Japan set 2)", GAME_SUPPORTS_SAVE ) +GAME( 1990, aliensa, aliens, aliens, aliens, 0, ROT0, "Konami", "Aliens (Asia)", GAME_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/asterix.c b/src/mame/drivers/asterix.c index 8b3f642ef86..caeb3286298 100644 --- a/src/mame/drivers/asterix.c +++ b/src/mame/drivers/asterix.c @@ -17,14 +17,7 @@ colour, including the word "Konami" #include "sound/k053260.h" #include "video/konicdev.h" #include "includes/konamipt.h" - -VIDEO_UPDATE( asterix ); -WRITE16_HANDLER( asterix_spritebank_w ); - -extern void asterix_tile_callback(running_machine *machine, int layer, int *code, int *color, int *flags); -extern void asterix_sprite_callback(running_machine *machine, int *code, int *color, int *priority_mask); - -static UINT8 cur_control2; +#include "includes/asterix.h" static const eeprom_interface eeprom_intf = { @@ -40,36 +33,37 @@ static const eeprom_interface eeprom_intf = #if 0 static READ16_HANDLER( control2_r ) { - return cur_control2; + asterix_state *state = (asterix_state *)space->machine->driver_data; + return state->cur_control2; } #endif static WRITE16_HANDLER( control2_w ) { - const device_config *k056832 = devtag_get_device(space->machine, "k056832"); + asterix_state *state = (asterix_state *)space->machine->driver_data; if (ACCESSING_BITS_0_7) { - cur_control2 = data; + state->cur_control2 = data; /* bit 0 is data */ /* bit 1 is cs (active low) */ /* bit 2 is clock (active high) */ input_port_write(space->machine, "EEPROMOUT", data, 0xff); /* bit 5 is select tile bank */ - k056832_set_tile_bank(k056832, (data & 0x20) >> 5); + k056832_set_tile_bank(state->k056832, (data & 0x20) >> 5); } } static INTERRUPT_GEN( asterix_interrupt ) { - const device_config *k056832 = devtag_get_device(device->machine, "k056832"); + asterix_state *state = (asterix_state *)device->machine->driver_data; // global interrupt masking - if (!k056832_is_irq_enabled(k056832, 0)) return; + if (!k056832_is_irq_enabled(state->k056832, 0)) + return; - cpu_set_input_line(device, 5, HOLD_LINE); /* ??? All irqs have the same vector, and the - mask used is 0 or 7 */ + cpu_set_input_line(device, 5, HOLD_LINE); /* ??? All irqs have the same vector, and the mask used is 0 or 7 */ } static READ8_DEVICE_HANDLER( asterix_sound_r ) @@ -79,23 +73,66 @@ static READ8_DEVICE_HANDLER( asterix_sound_r ) static TIMER_CALLBACK( nmi_callback ) { - cputag_set_input_line(machine, "audiocpu", INPUT_LINE_NMI, ASSERT_LINE); + asterix_state *state = (asterix_state *)machine->driver_data; + cpu_set_input_line(state->audiocpu, INPUT_LINE_NMI, ASSERT_LINE); } static WRITE8_HANDLER( sound_arm_nmi_w ) { - cputag_set_input_line(space->machine, "audiocpu", INPUT_LINE_NMI, CLEAR_LINE); + asterix_state *state = (asterix_state *)space->machine->driver_data; + + cpu_set_input_line(state->audiocpu, INPUT_LINE_NMI, CLEAR_LINE); timer_set(space->machine, ATTOTIME_IN_USEC(5), NULL, 0, nmi_callback); } static WRITE16_HANDLER( sound_irq_w ) { - cputag_set_input_line(space->machine, "audiocpu", 0, HOLD_LINE); + asterix_state *state = (asterix_state *)space->machine->driver_data; + cpu_set_input_line(state->audiocpu, 0, HOLD_LINE); } // Check the routine at 7f30 in the ead version. // You're not supposed to laugh. // This emulation is grossly overkill but hey, I'm having fun. +#if 0 +static WRITE16_HANDLER( protection_w ) +{ + asterix_state *state = (asterix_state *)space->machine->driver_data; + COMBINE_DATA(state->prot + offset); + + if (offset == 1) + { + UINT32 cmd = (state->prot[0] << 16) | state->prot[1]; + switch (cmd >> 24) + { + case 0x64: + { + UINT32 param1 = (memory_read_word(space, cmd & 0xffffff) << 16) | memory_read_word(space, (cmd & 0xffffff) + 2); + UINT32 param2 = (memory_read_word(space, (cmd & 0xffffff) + 4) << 16) | memory_read_word(space, (cmd & 0xffffff) + 6); + + switch (param1 >> 24) + { + case 0x22: + { + int size = param2 >> 24; + param1 &= 0xffffff; + param2 &= 0xffffff; + while(size >= 0) + { + memory_write_word(space, param2, memory_read_word(space, param1)); + param1 += 2; + param2 += 2; + size--; + } + break; + } + } + break; + } + } + } +} +#endif static UINT16 prot[2]; @@ -138,8 +175,6 @@ static WRITE16_HANDLER( protection_w ) } } - - static ADDRESS_MAP_START( main_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x000000, 0x0fffff) AM_ROM AM_RANGE(0x100000, 0x107fff) AM_RAM @@ -151,7 +186,7 @@ static ADDRESS_MAP_START( main_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x380000, 0x380001) AM_READ_PORT("IN0") AM_RANGE(0x380002, 0x380003) AM_READ_PORT("IN1") AM_RANGE(0x380100, 0x380101) AM_WRITE(control2_w) - AM_RANGE(0x380200, 0x380203) AM_DEVREADWRITE8("konami", asterix_sound_r, k053260_w, 0x00ff) + AM_RANGE(0x380200, 0x380203) AM_DEVREADWRITE8("k053260", asterix_sound_r, k053260_w, 0x00ff) AM_RANGE(0x380300, 0x380301) AM_WRITE(sound_irq_w) AM_RANGE(0x380400, 0x380401) AM_WRITE(asterix_spritebank_w) AM_RANGE(0x380500, 0x38051f) AM_DEVWRITE("k053251", k053251_lsb_w) @@ -167,7 +202,7 @@ static ADDRESS_MAP_START( sound_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0x0000, 0xefff) AM_ROM AM_RANGE(0xf000, 0xf7ff) AM_RAM AM_RANGE(0xf801, 0xf801) AM_DEVREADWRITE("ymsnd", ym2151_status_port_r, ym2151_data_port_w) - AM_RANGE(0xfa00, 0xfa2f) AM_DEVREADWRITE("konami", k053260_r, k053260_w) + AM_RANGE(0xfa00, 0xfa2f) AM_DEVREADWRITE("k053260", k053260_r, k053260_w) AM_RANGE(0xfc00, 0xfc00) AM_WRITE(sound_arm_nmi_w) AM_RANGE(0xfe00, 0xfe00) AM_DEVWRITE("ymsnd", ym2151_register_port_w) ADDRESS_MAP_END @@ -214,8 +249,56 @@ static const k05324x_interface asterix_k05324x_intf = asterix_sprite_callback }; +static MACHINE_START( asterix ) +{ + asterix_state *state = (asterix_state *)machine->driver_data; + + state->maincpu = devtag_get_device(machine, "maincpu"); + state->audiocpu = devtag_get_device(machine, "audiocpu"); + state->k053260 = devtag_get_device(machine, "k053260"); + state->k056832 = devtag_get_device(machine, "k056832"); + state->k053244 = devtag_get_device(machine, "k053244"); + state->k053251 = devtag_get_device(machine, "k053251"); + + state_save_register_global(machine, state->cur_control2); + state_save_register_global_array(machine, state->prot); + + state_save_register_global(machine, state->sprite_colorbase); + state_save_register_global(machine, state->spritebank); + state_save_register_global_array(machine, state->layerpri); + state_save_register_global_array(machine, state->layer_colorbase); + state_save_register_global_array(machine, state->tilebanks); + state_save_register_global_array(machine, state->spritebanks); +} + +static MACHINE_RESET( asterix ) +{ + asterix_state *state = (asterix_state *)machine->driver_data; + int i; + + state->cur_control2 = 0; + state->prot[0] = 0; + state->prot[1] = 0; + + state->sprite_colorbase = 0; + state->spritebank = 0; + state->layerpri[0] = 0; + state->layerpri[1] = 0; + state->layerpri[2] = 0; + + for (i = 0; i < 4; i++) + { + state->layer_colorbase[i] = 0; + state->tilebanks[i] = 0; + state->spritebanks[i] = 0; + } +} + static MACHINE_DRIVER_START( asterix ) + /* driver data */ + MDRV_DRIVER_DATA(asterix_state) + /* basic machine hardware */ MDRV_CPU_ADD("maincpu", M68000, 12000000) MDRV_CPU_PROGRAM_MAP(main_map) @@ -224,6 +307,9 @@ static MACHINE_DRIVER_START( asterix ) MDRV_CPU_ADD("audiocpu", Z80, 8000000) MDRV_CPU_PROGRAM_MAP(sound_map) + MDRV_MACHINE_START(asterix) + MDRV_MACHINE_RESET(asterix) + MDRV_EEPROM_ADD("eeprom", eeprom_intf) /* video hardware */ @@ -250,7 +336,7 @@ static MACHINE_DRIVER_START( asterix ) MDRV_SOUND_ROUTE(0, "lspeaker", 1.0) MDRV_SOUND_ROUTE(1, "rspeaker", 1.0) - MDRV_SOUND_ADD("konami", K053260, 4000000) + MDRV_SOUND_ADD("k053260", K053260, 4000000) MDRV_SOUND_ROUTE(0, "lspeaker", 0.75) MDRV_SOUND_ROUTE(1, "rspeaker", 0.75) MACHINE_DRIVER_END @@ -274,7 +360,7 @@ ROM_START( asterix ) ROM_LOAD( "068a08.7k", 0x000000, 0x200000, CRC(c41278fe) SHA1(58e5f67a67ae97e0b264489828cd7e74662c5ed5) ) ROM_LOAD( "068a07.3k", 0x200000, 0x200000, CRC(32efdbc4) SHA1(b7e8610aa22249176d82b750e2549d1eea6abe4f) ) - ROM_REGION( 0x200000, "konami", 0 ) + ROM_REGION( 0x200000, "k053260", 0 ) ROM_LOAD( "068a06.1e", 0x000000, 0x200000, CRC(6df9ec0e) SHA1(cee60312e9813bd6579f3ac7c3c2521a8e633eca) ) ROM_END @@ -296,7 +382,7 @@ ROM_START( asterixeac ) ROM_LOAD( "068a08.7k", 0x000000, 0x200000, CRC(c41278fe) SHA1(58e5f67a67ae97e0b264489828cd7e74662c5ed5) ) ROM_LOAD( "068a07.3k", 0x200000, 0x200000, CRC(32efdbc4) SHA1(b7e8610aa22249176d82b750e2549d1eea6abe4f) ) - ROM_REGION( 0x200000, "konami", 0 ) + ROM_REGION( 0x200000, "k053260", 0 ) ROM_LOAD( "068a06.1e", 0x000000, 0x200000, CRC(6df9ec0e) SHA1(cee60312e9813bd6579f3ac7c3c2521a8e633eca) ) ROM_END @@ -318,7 +404,7 @@ ROM_START( asterixeaa ) ROM_LOAD( "068a08.7k", 0x000000, 0x200000, CRC(c41278fe) SHA1(58e5f67a67ae97e0b264489828cd7e74662c5ed5) ) ROM_LOAD( "068a07.3k", 0x200000, 0x200000, CRC(32efdbc4) SHA1(b7e8610aa22249176d82b750e2549d1eea6abe4f) ) - ROM_REGION( 0x200000, "konami", 0 ) + ROM_REGION( 0x200000, "k053260", 0 ) ROM_LOAD( "068a06.1e", 0x000000, 0x200000, CRC(6df9ec0e) SHA1(cee60312e9813bd6579f3ac7c3c2521a8e633eca) ) ROM_END @@ -340,7 +426,7 @@ ROM_START( asterixj ) ROM_LOAD( "068a08.7k", 0x000000, 0x200000, CRC(c41278fe) SHA1(58e5f67a67ae97e0b264489828cd7e74662c5ed5) ) ROM_LOAD( "068a07.3k", 0x200000, 0x200000, CRC(32efdbc4) SHA1(b7e8610aa22249176d82b750e2549d1eea6abe4f) ) - ROM_REGION( 0x200000, "konami", 0 ) + ROM_REGION( 0x200000, "k053260", 0 ) ROM_LOAD( "068a06.1e", 0x000000, 0x200000, CRC(6df9ec0e) SHA1(cee60312e9813bd6579f3ac7c3c2521a8e633eca) ) ROM_END @@ -354,7 +440,7 @@ static DRIVER_INIT( asterix ) } -GAME( 1992, asterix, 0, asterix, asterix, asterix, ROT0, "Konami", "Asterix (ver EAD)", GAME_IMPERFECT_GRAPHICS ) -GAME( 1992, asterixeac, asterix, asterix, asterix, asterix, ROT0, "Konami", "Asterix (ver EAC)", GAME_IMPERFECT_GRAPHICS ) -GAME( 1992, asterixeaa, asterix, asterix, asterix, asterix, ROT0, "Konami", "Asterix (ver EAA)", GAME_IMPERFECT_GRAPHICS ) -GAME( 1992, asterixj, asterix, asterix, asterix, asterix, ROT0, "Konami", "Asterix (ver JAD)", GAME_IMPERFECT_GRAPHICS ) +GAME( 1992, asterix, 0, asterix, asterix, asterix, ROT0, "Konami", "Asterix (ver EAD)", GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE ) +GAME( 1992, asterixeac, asterix, asterix, asterix, asterix, ROT0, "Konami", "Asterix (ver EAC)", GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE ) +GAME( 1992, asterixeaa, asterix, asterix, asterix, asterix, ROT0, "Konami", "Asterix (ver EAA)", GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE ) +GAME( 1992, asterixj, asterix, asterix, asterix, asterix, ROT0, "Konami", "Asterix (ver JAD)", GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/bishi.c b/src/mame/drivers/bishi.c index 5e97f7b511a..cb1d5c6bada 100644 --- a/src/mame/drivers/bishi.c +++ b/src/mame/drivers/bishi.c @@ -83,50 +83,37 @@ Notes: ***************************************************************************/ -#define CPU_CLOCK (XTAL_24MHz / 2) /* 68000 clock */ -#define SOUND_CLOCK XTAL_16_9344MHz /* YMZ280 clock */ - #include "driver.h" #include "deprecat.h" #include "video/konicdev.h" #include "cpu/m68000/m68000.h" #include "sound/ymz280b.h" - -VIDEO_START(bishi); -VIDEO_UPDATE(bishi); - -extern void bishi_tile_callback(running_machine *machine, int layer, int *code, int *color, int *flags); - - -static UINT16 cur_control, cur_control2; - -static MACHINE_START( bishi ) -{ - state_save_register_global(machine, cur_control); - state_save_register_global(machine, cur_control2); -} - +#include "includes/bishi.h" static READ16_HANDLER( control_r ) { - return cur_control; + bishi_state *state = (bishi_state *)space->machine->driver_data; + return state->cur_control; } static WRITE16_HANDLER( control_w ) { // bit 8 = interrupt gate - COMBINE_DATA(&cur_control); + bishi_state *state = (bishi_state *)space->machine->driver_data; + COMBINE_DATA(&state->cur_control); } static WRITE16_HANDLER( control2_w ) { // bit 12 = part of the banking calculation for the K056832 ROM readback - COMBINE_DATA(&cur_control2); + bishi_state *state = (bishi_state *)space->machine->driver_data; + COMBINE_DATA(&state->cur_control2); } static INTERRUPT_GEN(bishi_interrupt) { - if (cur_control & 0x800) + bishi_state *state = (bishi_state *)device->machine->driver_data; + if (state->cur_control & 0x800) { switch (cpu_getiloops(device)) { @@ -149,17 +136,17 @@ static READ16_HANDLER( bishi_mirror_r ) static READ16_HANDLER( bishi_K056832_rom_r ) { - const device_config *k056832 = devtag_get_device(space->machine, "k056832"); + bishi_state *state = (bishi_state *)space->machine->driver_data; UINT16 ouroffs; ouroffs = (offset >> 1) * 8; if (offset & 1) ouroffs++; - if (cur_control2 & 0x1000) + if (state->cur_control2 & 0x1000) ouroffs += 4; - return k056832_bishi_rom_word_r(k056832, ouroffs, mem_mask); + return k056832_bishi_rom_word_r(state->k056832, ouroffs, mem_mask); } static ADDRESS_MAP_START( main_map, ADDRESS_SPACE_PROGRAM, 16 ) @@ -380,16 +367,13 @@ static INPUT_PORTS_START( bishi2p ) INPUT_PORTS_END -static MACHINE_RESET( bishi ) -{ -} - static void sound_irq_gen(const device_config *device, int state) { + bishi_state *bishi = (bishi_state *)device->machine->driver_data; if (state) - cputag_set_input_line(device->machine, "maincpu", M68K_IRQ_1, ASSERT_LINE); + cpu_set_input_line(bishi->maincpu, M68K_IRQ_1, ASSERT_LINE); else - cputag_set_input_line(device->machine, "maincpu", M68K_IRQ_1, CLEAR_LINE); + cpu_set_input_line(bishi->maincpu, M68K_IRQ_1, CLEAR_LINE); } static const ymz280b_interface ymz280b_intf = @@ -414,8 +398,31 @@ static const k054338_interface bishi_k054338_intf = "none" }; +static MACHINE_START( bishi ) +{ + bishi_state *state = (bishi_state *)machine->driver_data; + + state->maincpu = devtag_get_device(machine, "maincpu"); + state->k056832 = devtag_get_device(machine, "k056832"); + state->k054338 = devtag_get_device(machine, "k054338"); + state->k055555 = devtag_get_device(machine, "k055555"); + + state_save_register_global(machine, state->cur_control); + state_save_register_global(machine, state->cur_control2); +} + +static MACHINE_RESET( bishi ) +{ + bishi_state *state = (bishi_state *)machine->driver_data; + state->cur_control = 0; + state->cur_control2 = 0; +} + static MACHINE_DRIVER_START( bishi ) + /* driver data */ + MDRV_DRIVER_DATA(bishi_state) + /* basic machine hardware */ MDRV_CPU_ADD("maincpu", M68000, CPU_CLOCK) /* 12MHz (24MHz OSC / 2 ) */ MDRV_CPU_PROGRAM_MAP(main_map) @@ -519,6 +526,6 @@ ROM_START( sbishik ) ROM_END -GAME( 1996, bishi, 0, bishi, bishi, 0, ROT0, "Konami", "Bishi Bashi Championship Mini Game Senshuken (ver JAA, 3 Players)", GAME_IMPERFECT_GRAPHICS) -GAME( 1998, sbishi, 0, bishi, bishi2p, 0, ROT0, "Konami", "Super Bishi Bashi Championship (ver JAA, 2 Players)", GAME_IMPERFECT_GRAPHICS) -GAME( 1998, sbishik, sbishi, bishi, bishi, 0, ROT0, "Konami", "Super Bishi Bashi Championship (ver KAA, 3 Players)", GAME_IMPERFECT_GRAPHICS) +GAME( 1996, bishi, 0, bishi, bishi, 0, ROT0, "Konami", "Bishi Bashi Championship Mini Game Senshuken (ver JAA, 3 Players)", GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE ) +GAME( 1998, sbishi, 0, bishi, bishi2p, 0, ROT0, "Konami", "Super Bishi Bashi Championship (ver JAA, 2 Players)", GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE ) +GAME( 1998, sbishik, sbishi, bishi, bishi, 0, ROT0, "Konami", "Super Bishi Bashi Championship (ver KAA, 3 Players)", GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/blockhl.c b/src/mame/drivers/blockhl.c index 123c67718df..aa5817153f3 100644 --- a/src/mame/drivers/blockhl.c +++ b/src/mame/drivers/blockhl.c @@ -1,23 +1,23 @@ -/*************************************************************************** +/******************************************************************************* -Block Hole (GX973) (c) 1989 Konami + Block Hole (GX973) (c) 1989 Konami -driver by Nicola Salmoria + driver by Nicola Salmoria -Notes: -Quarth works, but Block Hole crashes when it reaches the title screen. An -interrupt happens, and after rti the ROM bank is not the same as before so -it jumps to garbage code. -If you want to see this happen, place a breakpoint at 0x8612, and trace -after that. -The code is almost identical in the two versions, it looks like Quarth is -working just because luckily the interrupt doesn't happen at that point. -It seems that the interrupt handler trashes the selected ROM bank and forces -it to 0. To prevent crashes, I only generate interrupts when the ROM bank is -already 0. There might be another interrupt enable register, but I haven't -found it. + Notes: + Quarth works, but Block Hole crashes when it reaches the title screen. An + interrupt happens, and after rti the ROM bank is not the same as before so + it jumps to garbage code. + If you want to see this happen, place a breakpoint at 0x8612, and trace + after that. + The code is almost identical in the two versions, it looks like Quarth is + working just because luckily the interrupt doesn't happen at that point. + It seems that the interrupt handler trashes the selected ROM bank and forces + it to 0. To prevent crashes, I only generate interrupts when the ROM bank is + already 0. There might be another interrupt enable register, but I haven't + found it. -***************************************************************************/ +*******************************************************************************/ #include "driver.h" #include "cpu/z80/z80.h" @@ -25,81 +25,74 @@ found it. #include "video/konicdev.h" #include "sound/2151intf.h" #include "includes/konamipt.h" +#include "includes/blockhl.h" /* prototypes */ -static MACHINE_RESET( blockhl ); static KONAMI_SETLINES_CALLBACK( blockhl_banking ); -extern void blockhl_tile_callback(running_machine *machine, int layer,int bank,int *code,int *color, int *flags, int *priority); -extern void blockhl_sprite_callback(running_machine *machine, int *code,int *color,int *priority,int *shadow); - -VIDEO_START( blockhl ); -VIDEO_UPDATE( blockhl ); - -static int palette_selected; -static UINT8 *ram; -static int rombank; - static INTERRUPT_GEN( blockhl_interrupt ) { - const device_config *k052109 = devtag_get_device(device->machine, "k052109"); + blockhl_state *state = (blockhl_state *)device->machine->driver_data; - if (k052109_is_irq_enabled(k052109) && rombank == 0) /* kludge to prevent crashes */ + if (k052109_is_irq_enabled(state->k052109) && state->rombank == 0) /* kludge to prevent crashes */ cpu_set_input_line(device, KONAMI_IRQ_LINE, HOLD_LINE); } static READ8_HANDLER( bankedram_r ) { - if (palette_selected) + blockhl_state *state = (blockhl_state *)space->machine->driver_data; + + if (state->palette_selected) return space->machine->generic.paletteram.u8[offset]; else - return ram[offset]; + return state->ram[offset]; } static WRITE8_HANDLER( bankedram_w ) { - if (palette_selected) - paletteram_xBBBBBGGGGGRRRRR_be_w(space,offset,data); + blockhl_state *state = (blockhl_state *)space->machine->driver_data; + + if (state->palette_selected) + paletteram_xBBBBBGGGGGRRRRR_be_w(space, offset, data); else - ram[offset] = data; + state->ram[offset] = data; } static WRITE8_HANDLER( blockhl_sh_irqtrigger_w ) { - cputag_set_input_line_and_vector(space->machine, "audiocpu", 0, HOLD_LINE, 0xff); + blockhl_state *state = (blockhl_state *)space->machine->driver_data; + cpu_set_input_line_and_vector(state->audiocpu, 0, HOLD_LINE, 0xff); } /* special handlers to combine 052109 & 051960 */ static READ8_HANDLER( k052109_051960_r ) { - const device_config *k052109 = devtag_get_device(space->machine, "k052109"); - const device_config *k051960 = devtag_get_device(space->machine, "k051960"); + blockhl_state *state = (blockhl_state *)space->machine->driver_data; - if (k052109_get_rmrd_line(k052109) == CLEAR_LINE) + if (k052109_get_rmrd_line(state->k052109) == CLEAR_LINE) { if (offset >= 0x3800 && offset < 0x3808) - return k051937_r(k051960, offset - 0x3800); + return k051937_r(state->k051960, offset - 0x3800); else if (offset < 0x3c00) - return k052109_r(k052109, offset); + return k052109_r(state->k052109, offset); else - return k051960_r(k051960, offset - 0x3c00); + return k051960_r(state->k051960, offset - 0x3c00); } else - return k052109_r(k052109, offset); + return k052109_r(state->k052109, offset); } static WRITE8_HANDLER( k052109_051960_w ) { - const device_config *k052109 = devtag_get_device(space->machine, "k052109"); - const device_config *k051960 = devtag_get_device(space->machine, "k051960"); + blockhl_state *state = (blockhl_state *)space->machine->driver_data; if (offset >= 0x3800 && offset < 0x3808) - k051937_w(k051960, offset - 0x3800, data); + k051937_w(state->k051960, offset - 0x3800, data); else if (offset < 0x3c00) - k052109_w(k052109, offset, data); + k052109_w(state->k052109, offset, data); else - k051960_w(k051960, offset - 0x3c00, data); + k051960_w(state->k051960, offset - 0x3c00, data); } @@ -114,7 +107,7 @@ static ADDRESS_MAP_START( main_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0x1f98, 0x1f98) AM_READ_PORT("DSW2") AM_RANGE(0x0000, 0x3fff) AM_READWRITE(k052109_051960_r, k052109_051960_w) AM_RANGE(0x4000, 0x57ff) AM_RAM - AM_RANGE(0x5800, 0x5fff) AM_READWRITE(bankedram_r, bankedram_w) AM_BASE(&ram) + AM_RANGE(0x5800, 0x5fff) AM_READWRITE(bankedram_r, bankedram_w) AM_BASE_MEMBER(blockhl_state, ram) AM_RANGE(0x6000, 0x7fff) AM_ROMBANK("bank1") AM_RANGE(0x8000, 0xffff) AM_ROM ADDRESS_MAP_END @@ -198,8 +191,37 @@ static const k051960_interface blockhl_k051960_intf = blockhl_sprite_callback }; +static MACHINE_START( blockhl ) +{ + blockhl_state *state = (blockhl_state *)machine->driver_data; + UINT8 *ROM = memory_region(machine, "maincpu"); + + memory_configure_bank(machine, "bank1", 0, 4, &ROM[0x10000], 0x2000); + + state->maincpu = devtag_get_device(machine, "maincpu"); + state->audiocpu = devtag_get_device(machine, "audiocpu"); + state->k052109 = devtag_get_device(machine, "k052109"); + state->k051960 = devtag_get_device(machine, "k051960"); + + state_save_register_global(machine, state->palette_selected); + state_save_register_global(machine, state->rombank); +} + +static MACHINE_RESET( blockhl ) +{ + blockhl_state *state = (blockhl_state *)machine->driver_data; + + konami_configure_set_lines(devtag_get_device(machine, "maincpu"), blockhl_banking); + + state->palette_selected = 0; + state->rombank = 0; +} + static MACHINE_DRIVER_START( blockhl ) + /* driver data */ + MDRV_DRIVER_DATA(blockhl_state) + /* basic machine hardware */ MDRV_CPU_ADD("maincpu", KONAMI,3000000) /* Konami custom 052526 */ MDRV_CPU_PROGRAM_MAP(main_map) @@ -208,6 +230,7 @@ static MACHINE_DRIVER_START( blockhl ) MDRV_CPU_ADD("audiocpu", Z80, 3579545) MDRV_CPU_PROGRAM_MAP(audio_map) + MDRV_MACHINE_START(blockhl) MDRV_MACHINE_RESET(blockhl) /* video hardware */ @@ -244,7 +267,7 @@ MACHINE_DRIVER_END ***************************************************************************/ ROM_START( blockhl ) - ROM_REGION( 0x18800, "maincpu", 0 ) /* code + banked roms + space for banked RAM */ + ROM_REGION( 0x18000, "maincpu", 0 ) /* code + banked roms + space for banked RAM */ ROM_LOAD( "973l02.e21", 0x10000, 0x08000, CRC(e14f849a) SHA1(d44cf178cc98998b72ed32c6e20b6ebdf1f97579) ) ROM_CONTINUE( 0x08000, 0x08000 ) @@ -268,7 +291,7 @@ ROM_START( blockhl ) ROM_END ROM_START( quarth ) - ROM_REGION( 0x18800, "maincpu", 0 ) /* code + banked roms + space for banked RAM */ + ROM_REGION( 0x18000, "maincpu", 0 ) /* code + banked roms + space for banked RAM */ ROM_LOAD( "973j02.e21", 0x10000, 0x08000, CRC(27a90118) SHA1(51309385b93db29b9277d14252166c4ea1746303) ) ROM_CONTINUE( 0x08000, 0x08000 ) @@ -300,41 +323,30 @@ ROM_END static KONAMI_SETLINES_CALLBACK( blockhl_banking ) { - const device_config *k052109 = devtag_get_device(device->machine, "k052109"); - UINT8 *RAM = memory_region(device->machine, "maincpu"); - int offs; + blockhl_state *state = (blockhl_state *)device->machine->driver_data; /* bits 0-1 = ROM bank */ - rombank = lines & 0x03; - offs = 0x10000 + (lines & 0x03) * 0x2000; - memory_set_bankptr(device->machine, "bank1",&RAM[offs]); + state->rombank = lines & 0x03; + memory_set_bank(device->machine, "bank1", state->rombank); /* bits 3/4 = coin counters */ - coin_counter_w(device->machine, 0,lines & 0x08); - coin_counter_w(device->machine, 1,lines & 0x10); + coin_counter_w(device->machine, 0, lines & 0x08); + coin_counter_w(device->machine, 1, lines & 0x10); /* bit 5 = select palette RAM or work RAM at 5800-5fff */ - palette_selected = ~lines & 0x20; + state->palette_selected = ~lines & 0x20; /* bit 6 = enable char ROM reading through the video RAM */ - k052109_set_rmrd_line(k052109, (lines & 0x40) ? ASSERT_LINE : CLEAR_LINE); + k052109_set_rmrd_line(state->k052109, (lines & 0x40) ? ASSERT_LINE : CLEAR_LINE); /* bit 7 used but unknown */ /* other bits unknown */ - if ((lines & 0x84) != 0x80) logerror("%04x: setlines %02x\n",cpu_get_pc(device),lines); -} - -static MACHINE_RESET( blockhl ) -{ - UINT8 *RAM = memory_region(machine, "maincpu"); - - konami_configure_set_lines(cputag_get_cpu(machine, "maincpu"), blockhl_banking); - - machine->generic.paletteram.u8 = &RAM[0x18000]; + if ((lines & 0x84) != 0x80) + logerror("%04x: setlines %02x\n", cpu_get_pc(device), lines); } -GAME( 1989, blockhl, 0, blockhl, blockhl, 0, ROT0, "Konami", "Block Hole", 0 ) -GAME( 1989, quarth, blockhl, blockhl, blockhl, 0, ROT0, "Konami", "Quarth (Japan)", 0 ) +GAME( 1989, blockhl, 0, blockhl, blockhl, 0, ROT0, "Konami", "Block Hole", GAME_SUPPORTS_SAVE ) +GAME( 1989, quarth, blockhl, blockhl, blockhl, 0, ROT0, "Konami", "Quarth (Japan)", GAME_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/bottom9.c b/src/mame/drivers/bottom9.c index d80c8527037..9555cf91dc3 100644 --- a/src/mame/drivers/bottom9.c +++ b/src/mame/drivers/bottom9.c @@ -1,14 +1,14 @@ /*************************************************************************** -Bottom of the Ninth (c) 1989 Konami + Bottom of the Ninth (c) 1989 Konami -Similar to S.P.Y. + Similar to S.P.Y. -driver by Nicola Salmoria + driver by Nicola Salmoria -2008-07 -Dip locations and factory settings verified with US manual. -To be verified for Main Stadium + 2008-07 + Dip locations and factory settings verified with US manual. + To be verified for Main Stadium ***************************************************************************/ @@ -19,86 +19,75 @@ To be verified for Main Stadium #include "video/konicdev.h" #include "sound/k007232.h" #include "includes/konamipt.h" - -extern int bottom9_video_enable; - -VIDEO_START( bottom9 ); -VIDEO_UPDATE( bottom9 ); - -extern void bottom9_tile_callback(running_machine *machine, int layer,int bank,int *code,int *color,int *flags,int *priority); -extern void bottom9_sprite_callback(running_machine *machine, int *code,int *color,int *priority,int *shadow); -extern void bottom9_zoom_callback(running_machine *machine, int *code,int *color,int *flags); - +#include "includes/bottom9.h" static INTERRUPT_GEN( bottom9_interrupt ) { - const device_config *k052109 = devtag_get_device(device->machine, "k052109"); - if (k052109_is_irq_enabled(k052109)) + bottom9_state *state = (bottom9_state *)device->machine->driver_data; + + if (k052109_is_irq_enabled(state->k052109)) cpu_set_input_line(device, 0, HOLD_LINE); } - -static int zoomreadroms, k052109_selected; - static READ8_HANDLER( k052109_051960_r ) { - const device_config *k052109 = devtag_get_device(space->machine, "k052109"); - const device_config *k051960 = devtag_get_device(space->machine, "k051960"); + bottom9_state *state = (bottom9_state *)space->machine->driver_data; - if (k052109_get_rmrd_line(k052109) == CLEAR_LINE) + if (k052109_get_rmrd_line(state->k052109) == CLEAR_LINE) { if (offset >= 0x3800 && offset < 0x3808) - return k051937_r(k051960, offset - 0x3800); + return k051937_r(state->k051960, offset - 0x3800); else if (offset < 0x3c00) - return k052109_r(k052109, offset); + return k052109_r(state->k052109, offset); else - return k051960_r(k051960, offset - 0x3c00); + return k051960_r(state->k051960, offset - 0x3c00); } else - return k052109_r(k052109, offset); + return k052109_r(state->k052109, offset); } static WRITE8_HANDLER( k052109_051960_w ) { - const device_config *k052109 = devtag_get_device(space->machine, "k052109"); - const device_config *k051960 = devtag_get_device(space->machine, "k051960"); + bottom9_state *state = (bottom9_state *)space->machine->driver_data; if (offset >= 0x3800 && offset < 0x3808) - k051937_w(k051960, offset - 0x3800, data); + k051937_w(state->k051960, offset - 0x3800, data); else if (offset < 0x3c00) - k052109_w(k052109, offset, data); + k052109_w(state->k052109, offset, data); else - k051960_w(k051960, offset - 0x3c00, data); + k051960_w(state->k051960, offset - 0x3c00, data); } static READ8_HANDLER( bottom9_bankedram1_r ) { - const device_config *k051316 = devtag_get_device(space->machine, "k051316"); + bottom9_state *state = (bottom9_state *)space->machine->driver_data; - if (k052109_selected) + if (state->k052109_selected) return k052109_051960_r(space, offset); else { - if (zoomreadroms) - return k051316_rom_r(k051316, offset); + if (state->zoomreadroms) + return k051316_rom_r(state->k051316, offset); else - return k051316_r(k051316,offset); + return k051316_r(state->k051316, offset); } } static WRITE8_HANDLER( bottom9_bankedram1_w ) { - const device_config *k051316 = devtag_get_device(space->machine, "k051316"); + bottom9_state *state = (bottom9_state *)space->machine->driver_data; - if (k052109_selected) + if (state->k052109_selected) k052109_051960_w(space, offset, data); else - k051316_w(k051316, offset, data); + k051316_w(state->k051316, offset, data); } static READ8_HANDLER( bottom9_bankedram2_r ) { - if (k052109_selected) + bottom9_state *state = (bottom9_state *)space->machine->driver_data; + + if (state->k052109_selected) return k052109_051960_r(space, offset + 0x2000); else return space->machine->generic.paletteram.u8[offset]; @@ -106,7 +95,9 @@ static READ8_HANDLER( bottom9_bankedram2_r ) static WRITE8_HANDLER( bottom9_bankedram2_w ) { - if (k052109_selected) + bottom9_state *state = (bottom9_state *)space->machine->driver_data; + + if (state->k052109_selected) k052109_051960_w(space, offset + 0x2000, data); else paletteram_xBBBBBGGGGGRRRRR_be_w(space, offset, data); @@ -114,8 +105,7 @@ static WRITE8_HANDLER( bottom9_bankedram2_w ) static WRITE8_HANDLER( bankswitch_w ) { - UINT8 *RAM = memory_region(space->machine, "maincpu"); - int offs; + int bank; /* bit 0 = RAM bank */ if ((data & 1) == 0) @@ -123,62 +113,65 @@ static WRITE8_HANDLER( bankswitch_w ) /* bit 1-4 = ROM bank */ if (data & 0x10) - offs = 0x20000 + (data & 0x06) * 0x1000; + bank = 8 + ((data & 0x06) >> 1); else - offs = 0x10000 + (data & 0x0e) * 0x1000; + bank = ((data & 0x0e) >> 1); - memory_set_bankptr(space->machine, "bank1",&RAM[offs]); + memory_set_bank(space->machine, "bank1", bank); } static WRITE8_HANDLER( bottom9_1f90_w ) { - const device_config *k052109 = devtag_get_device(space->machine, "k052109"); + bottom9_state *state = (bottom9_state *)space->machine->driver_data; /* bits 0/1 = coin counters */ coin_counter_w(space->machine, 0, data & 0x01); coin_counter_w(space->machine, 1, data & 0x02); /* bit 2 = enable char ROM reading through the video RAM */ - k052109_set_rmrd_line(k052109, (data & 0x04) ? ASSERT_LINE : CLEAR_LINE); + k052109_set_rmrd_line(state->k052109, (data & 0x04) ? ASSERT_LINE : CLEAR_LINE); /* bit 3 = disable video */ - bottom9_video_enable = ~data & 0x08; + state->video_enable = ~data & 0x08; /* bit 4 = enable 051316 ROM reading */ - zoomreadroms = data & 0x10; + state->zoomreadroms = data & 0x10; /* bit 5 = RAM bank */ - k052109_selected = data & 0x20; + state->k052109_selected = data & 0x20; } static WRITE8_HANDLER( bottom9_sh_irqtrigger_w ) { - cputag_set_input_line_and_vector(space->machine, "audiocpu", 0, HOLD_LINE, 0xff); + bottom9_state *state = (bottom9_state *)space->machine->driver_data; + cpu_set_input_line_and_vector(state->audiocpu, 0, HOLD_LINE, 0xff); } -static int nmienable; - static INTERRUPT_GEN( bottom9_sound_interrupt ) { - if (nmienable) + bottom9_state *state = (bottom9_state *)device->machine->driver_data; + if (state->nmienable) cpu_set_input_line(device, INPUT_LINE_NMI, PULSE_LINE); } static WRITE8_HANDLER( nmi_enable_w ) { - nmienable = data; + bottom9_state *state = (bottom9_state *)space->machine->driver_data; + state->nmienable = data; } static WRITE8_HANDLER( sound_bank_w ) { - int bank_A,bank_B; + bottom9_state *state = (bottom9_state *)space->machine->driver_data; + int bank_A, bank_B; bank_A = ((data >> 0) & 0x03); bank_B = ((data >> 2) & 0x03); - k007232_set_bank( devtag_get_device(space->machine, "konami1"), bank_A, bank_B ); + k007232_set_bank(state->k007232_1, bank_A, bank_B); + bank_A = ((data >> 4) & 0x03); bank_B = ((data >> 6) & 0x03); - k007232_set_bank( devtag_get_device(space->machine, "konami2"), bank_A, bank_B ); + k007232_set_bank(state->k007232_2, bank_A, bank_B); } @@ -206,8 +199,8 @@ static ADDRESS_MAP_START( audio_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0x0000, 0x7fff) AM_ROM AM_RANGE(0x8000, 0x87ff) AM_RAM AM_RANGE(0x9000, 0x9000) AM_WRITE(sound_bank_w) - AM_RANGE(0xa000, 0xa00d) AM_DEVREADWRITE("konami1", k007232_r, k007232_w) - AM_RANGE(0xb000, 0xb00d) AM_DEVREADWRITE("konami2", k007232_r, k007232_w) + AM_RANGE(0xa000, 0xa00d) AM_DEVREADWRITE("k007232_1", k007232_r, k007232_w) + AM_RANGE(0xb000, 0xb00d) AM_DEVREADWRITE("k007232_2", k007232_r, k007232_w) AM_RANGE(0xd000, 0xd000) AM_READ(soundlatch_r) AM_RANGE(0xf000, 0xf000) AM_WRITE(nmi_enable_w) ADDRESS_MAP_END @@ -283,16 +276,16 @@ INPUT_PORTS_END -static void volume_callback0(const device_config *device, int v) +static void volume_callback0( const device_config *device, int v ) { - k007232_set_volume(device,0,(v >> 4) * 0x11,0); - k007232_set_volume(device,1,0,(v & 0x0f) * 0x11); + k007232_set_volume(device, 0, (v >> 4) * 0x11, 0); + k007232_set_volume(device, 1, 0, (v & 0x0f) * 0x11); } -static void volume_callback1(const device_config *device, int v) +static void volume_callback1( const device_config *device, int v ) { - k007232_set_volume(device,0,(v >> 4) * 0x11,0); - k007232_set_volume(device,1,0,(v & 0x0f) * 0x11); + k007232_set_volume(device, 0, (v >> 4) * 0x11, 0); + k007232_set_volume(device, 1, 0, (v & 0x0f) * 0x11); } static const k007232_interface k007232_interface_1 = @@ -331,8 +324,42 @@ static const k051316_interface bottom9_k051316_intf = bottom9_zoom_callback }; +static MACHINE_START( bottom9 ) +{ + bottom9_state *state = (bottom9_state *)machine->driver_data; + UINT8 *ROM = memory_region(machine, "maincpu"); + + memory_configure_bank(machine, "bank1", 0, 12, &ROM[0x10000], 0x2000); + + state->maincpu = devtag_get_device(machine, "maincpu"); + state->audiocpu = devtag_get_device(machine, "audiocpu"); + state->k052109 = devtag_get_device(machine, "k052109"); + state->k051960 = devtag_get_device(machine, "k051960"); + state->k051316 = devtag_get_device(machine, "k051316"); + state->k007232_1 = devtag_get_device(machine, "k007232_1"); + state->k007232_2 = devtag_get_device(machine, "k007232_2"); + + state_save_register_global(machine, state->video_enable); + state_save_register_global(machine, state->zoomreadroms); + state_save_register_global(machine, state->k052109_selected); + state_save_register_global(machine, state->nmienable); +} + +static MACHINE_RESET( bottom9 ) +{ + bottom9_state *state = (bottom9_state *)machine->driver_data; + + state->video_enable = 0; + state->zoomreadroms = 0; + state->k052109_selected = 0; + state->nmienable = 0; +} + static MACHINE_DRIVER_START( bottom9 ) + /* driver data */ + MDRV_DRIVER_DATA(bottom9_state) + /* basic machine hardware */ MDRV_CPU_ADD("maincpu", M6809, 2000000) /* ? */ MDRV_CPU_PROGRAM_MAP(main_map) @@ -342,6 +369,9 @@ static MACHINE_DRIVER_START( bottom9 ) MDRV_CPU_PROGRAM_MAP(audio_map) MDRV_CPU_VBLANK_INT_HACK(bottom9_sound_interrupt,8) /* irq is triggered by the main CPU */ + MDRV_MACHINE_START(bottom9) + MDRV_MACHINE_RESET(bottom9) + /* video hardware */ MDRV_VIDEO_ATTRIBUTES(VIDEO_HAS_SHADOWS) @@ -364,12 +394,12 @@ static MACHINE_DRIVER_START( bottom9 ) /* sound hardware */ MDRV_SPEAKER_STANDARD_MONO("mono") - MDRV_SOUND_ADD("konami1", K007232, 3579545) + MDRV_SOUND_ADD("k007232_1", K007232, 3579545) MDRV_SOUND_CONFIG(k007232_interface_1) MDRV_SOUND_ROUTE(0, "mono", 0.40) MDRV_SOUND_ROUTE(1, "mono", 0.40) - MDRV_SOUND_ADD("konami2", K007232, 3579545) + MDRV_SOUND_ADD("k007232_2", K007232, 3579545) MDRV_SOUND_CONFIG(k007232_interface_2) MDRV_SOUND_ROUTE(0, "mono", 0.40) MDRV_SOUND_ROUTE(1, "mono", 0.40) @@ -426,13 +456,13 @@ ROM_START( bottom9 ) ROM_REGION( 0x0200, "proms", 0 ) ROM_LOAD( "891b11.f23", 0x0000, 0x0100, CRC(ecb854aa) SHA1(3bd321ca3076d4e0042e0af656d51909fa6a5b3b) ) /* priority encoder (not used) */ - ROM_REGION( 0x40000, "konami1", 0 ) /* samples for 007232 #0 */ + ROM_REGION( 0x40000, "k007232_1", 0 ) /* samples for 007232 #0 */ ROM_LOAD( "891e08a", 0x00000, 0x10000, CRC(cef667bf) SHA1(e773fc0ced45e01e13cdee18c404d609356d2d0e) ) ROM_LOAD( "891e08b", 0x10000, 0x10000, CRC(f7c14a7a) SHA1(05261a065de33e158e8d72d74eb657035abb5d03) ) ROM_LOAD( "891e08c", 0x20000, 0x10000, CRC(756b7f3c) SHA1(6f36f0b4e08db27a8b6e180d12be6427677ad62d) ) ROM_LOAD( "891e08d", 0x30000, 0x10000, CRC(cd0d7305) SHA1(82403ce1f38014ebf94008a66c98697a572303f9) ) - ROM_REGION( 0x40000, "konami2", 0 ) /* samples for 007232 #1 */ + ROM_REGION( 0x40000, "k007232_2", 0 ) /* samples for 007232 #1 */ ROM_LOAD( "891e04a", 0x00000, 0x10000, CRC(daebbc74) SHA1(f61daebf80e5e4640c4cea4ea5767e64a49d928d) ) ROM_LOAD( "891e04b", 0x10000, 0x10000, CRC(5ffb9ad1) SHA1(e8f00c63dc3091aa344e82dc29f41aedd5a764b4) ) ROM_LOAD( "891e04c", 0x20000, 0x10000, CRC(2dbbf16b) SHA1(84b2005a1fe61a6a0cf1aa6e0fdf7ff8b1f8f82a) ) @@ -483,13 +513,13 @@ ROM_START( bottom9n ) ROM_REGION( 0x0200, "proms", 0 ) ROM_LOAD( "891b11.f23", 0x0000, 0x0100, CRC(ecb854aa) SHA1(3bd321ca3076d4e0042e0af656d51909fa6a5b3b) ) /* priority encoder (not used) */ - ROM_REGION( 0x40000, "konami1", 0 ) /* samples for 007232 #0 */ + ROM_REGION( 0x40000, "k007232_1", 0 ) /* samples for 007232 #0 */ ROM_LOAD( "891e08a", 0x00000, 0x10000, CRC(cef667bf) SHA1(e773fc0ced45e01e13cdee18c404d609356d2d0e) ) ROM_LOAD( "891e08b", 0x10000, 0x10000, CRC(f7c14a7a) SHA1(05261a065de33e158e8d72d74eb657035abb5d03) ) ROM_LOAD( "891e08c", 0x20000, 0x10000, CRC(756b7f3c) SHA1(6f36f0b4e08db27a8b6e180d12be6427677ad62d) ) ROM_LOAD( "891e08d", 0x30000, 0x10000, CRC(cd0d7305) SHA1(82403ce1f38014ebf94008a66c98697a572303f9) ) - ROM_REGION( 0x40000, "konami2", 0 ) /* samples for 007232 #1 */ + ROM_REGION( 0x40000, "k007232_2", 0 ) /* samples for 007232 #1 */ ROM_LOAD( "891e04a", 0x00000, 0x10000, CRC(daebbc74) SHA1(f61daebf80e5e4640c4cea4ea5767e64a49d928d) ) ROM_LOAD( "891e04b", 0x10000, 0x10000, CRC(5ffb9ad1) SHA1(e8f00c63dc3091aa344e82dc29f41aedd5a764b4) ) ROM_LOAD( "891e04c", 0x20000, 0x10000, CRC(2dbbf16b) SHA1(84b2005a1fe61a6a0cf1aa6e0fdf7ff8b1f8f82a) ) @@ -540,13 +570,13 @@ ROM_START( mstadium ) ROM_REGION( 0x0200, "proms", 0 ) ROM_LOAD( "891b11.f23", 0x0000, 0x0100, CRC(ecb854aa) SHA1(3bd321ca3076d4e0042e0af656d51909fa6a5b3b) ) /* priority encoder (not used) */ - ROM_REGION( 0x40000, "konami1", 0 ) /* samples for 007232 #0 */ + ROM_REGION( 0x40000, "k007232_1", 0 ) /* samples for 007232 #0 */ ROM_LOAD( "891e08a", 0x00000, 0x10000, CRC(cef667bf) SHA1(e773fc0ced45e01e13cdee18c404d609356d2d0e) ) ROM_LOAD( "891e08b", 0x10000, 0x10000, CRC(f7c14a7a) SHA1(05261a065de33e158e8d72d74eb657035abb5d03) ) ROM_LOAD( "891e08c", 0x20000, 0x10000, CRC(756b7f3c) SHA1(6f36f0b4e08db27a8b6e180d12be6427677ad62d) ) ROM_LOAD( "891e08d", 0x30000, 0x10000, CRC(cd0d7305) SHA1(82403ce1f38014ebf94008a66c98697a572303f9) ) - ROM_REGION( 0x40000, "konami2", 0 ) /* samples for 007232 #1 */ + ROM_REGION( 0x40000, "k007232_2", 0 ) /* samples for 007232 #1 */ ROM_LOAD( "891e04a", 0x00000, 0x10000, CRC(daebbc74) SHA1(f61daebf80e5e4640c4cea4ea5767e64a49d928d) ) ROM_LOAD( "891e04b", 0x10000, 0x10000, CRC(5ffb9ad1) SHA1(e8f00c63dc3091aa344e82dc29f41aedd5a764b4) ) ROM_LOAD( "891e04c", 0x20000, 0x10000, CRC(2dbbf16b) SHA1(84b2005a1fe61a6a0cf1aa6e0fdf7ff8b1f8f82a) ) @@ -555,6 +585,6 @@ ROM_END -GAME( 1989, bottom9, 0, bottom9, bottom9, 0, ROT0, "Konami", "Bottom of the Ninth (version T)", 0 ) -GAME( 1989, bottom9n, bottom9, bottom9, bottom9, 0, ROT0, "Konami", "Bottom of the Ninth (version N)", 0 ) -GAME( 1989, mstadium, bottom9, bottom9, mstadium, 0, ROT0, "Konami", "Main Stadium (Japan)", 0 ) +GAME( 1989, bottom9, 0, bottom9, bottom9, 0, ROT0, "Konami", "Bottom of the Ninth (version T)", GAME_SUPPORTS_SAVE ) +GAME( 1989, bottom9n, bottom9, bottom9, bottom9, 0, ROT0, "Konami", "Bottom of the Ninth (version N)", GAME_SUPPORTS_SAVE ) +GAME( 1989, mstadium, bottom9, bottom9, mstadium, 0, ROT0, "Konami", "Main Stadium (Japan)", GAME_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/chqflag.c b/src/mame/drivers/chqflag.c index daebe5cdf46..9011204a51b 100644 --- a/src/mame/drivers/chqflag.c +++ b/src/mame/drivers/chqflag.c @@ -1,13 +1,14 @@ /*************************************************************************** -Chequered Flag / Checkered Flag (GX717) (c) Konami 1988 + Chequered Flag / Checkered Flag (GX717) (c) Konami 1988 -Notes: -- Position counter doesn't behave correctly because of the K051733 protection. -- 007232 volume & panning control is almost certainly wrong. + Notes: + - Position counter doesn't behave correctly because of the K051733 + protection. + - 007232 volume & panning control is almost certainly wrong. -2008-07 -Dip locations and recommended settings verified with manual + 2008-07 + Dip locations and recommended settings verified with manual ***************************************************************************/ @@ -18,45 +19,38 @@ Dip locations and recommended settings verified with manual #include "video/konicdev.h" #include "sound/2151intf.h" #include "sound/k007232.h" +#include "includes/chqflag.h" #include "chqflag.lh" -static int k051316_readroms; static WRITE8_DEVICE_HANDLER( k007232_extvolume_w ); -/* from video/chqflag.c */ -VIDEO_START( chqflag ); -VIDEO_UPDATE( chqflag ); - -extern void chqflag_sprite_callback(running_machine *machine, int *code,int *color,int *priority,int *shadow); -extern void chqflag_zoom_callback_0(running_machine *machine, int *code,int *color,int *flags); -extern void chqflag_zoom_callback_1(running_machine *machine, int *code,int *color,int *flags); - static INTERRUPT_GEN( chqflag_interrupt ) { - const device_config *k051960 = devtag_get_device(device->machine, "k051960"); + chqflag_state *state = (chqflag_state *)device->machine->driver_data; + if (cpu_getiloops(device) == 0) { - if (k051960_is_irq_enabled(k051960)) + if (k051960_is_irq_enabled(state->k051960)) cpu_set_input_line(device, KONAMI_IRQ_LINE, HOLD_LINE); } else if (cpu_getiloops(device) % 2) { - if (k051960_is_nmi_enabled(k051960)) + if (k051960_is_nmi_enabled(state->k051960)) cpu_set_input_line(device, INPUT_LINE_NMI, PULSE_LINE); } } static WRITE8_HANDLER( chqflag_bankswitch_w ) { - const device_config *k051316_1 = devtag_get_device(space->machine, "k051316_1"); + chqflag_state *state = (chqflag_state *)space->machine->driver_data; int bankaddress; UINT8 *RAM = memory_region(space->machine, "maincpu"); /* bits 0-4 = ROM bank # (0x00-0x11) */ - bankaddress = 0x10000 + (data & 0x1f)*0x4000; - memory_set_bankptr(space->machine, "bank4",&RAM[bankaddress]); + bankaddress = 0x10000 + (data & 0x1f) * 0x4000; + memory_set_bankptr(space->machine, "bank4", &RAM[bankaddress]); /* bit 5 = memory bank select */ if (data & 0x20) @@ -65,10 +59,10 @@ static WRITE8_HANDLER( chqflag_bankswitch_w ) memory_install_write8_handler(space, 0x1800, 0x1fff, 0, 0, paletteram_xBBBBBGGGGGRRRRR_be_w); memory_set_bankptr(space->machine, "bank5", space->machine->generic.paletteram.v); - if (k051316_readroms) - memory_install_readwrite8_device_handler(space, k051316_1, 0x1000, 0x17ff, 0, 0, k051316_rom_r, k051316_w); /* 051316 #1 (ROM test) */ + if (state->k051316_readroms) + memory_install_readwrite8_device_handler(space, state->k051316_1, 0x1000, 0x17ff, 0, 0, k051316_rom_r, k051316_w); /* 051316 #1 (ROM test) */ else - memory_install_readwrite8_device_handler(space, k051316_1, 0x1000, 0x17ff, 0, 0, k051316_r, k051316_w); /* 051316 #1 */ + memory_install_readwrite8_device_handler(space, state->k051316_1, 0x1000, 0x17ff, 0, 0, k051316_r, k051316_w); /* 051316 #1 */ } else { @@ -81,19 +75,19 @@ static WRITE8_HANDLER( chqflag_bankswitch_w ) static WRITE8_HANDLER( chqflag_vreg_w ) { - const device_config *k051316_2 = devtag_get_device(space->machine, "k051316_2"); - static int last; + chqflag_state *state = (chqflag_state *)space->machine->driver_data; /* bits 0 & 1 = coin counters */ coin_counter_w(space->machine, 1, data & 0x01); coin_counter_w(space->machine, 0, data & 0x02); /* bit 4 = enable rom reading thru K051316 #1 & #2 */ - k051316_readroms = (data & 0x10); - if (k051316_readroms) - memory_install_read8_device_handler(space, k051316_2, 0x2800, 0x2fff, 0, 0, k051316_rom_r); /* 051316 (ROM test) */ + state->k051316_readroms = (data & 0x10); + + if (state->k051316_readroms) + memory_install_read8_device_handler(space, state->k051316_2, 0x2800, 0x2fff, 0, 0, k051316_rom_r); /* 051316 (ROM test) */ else - memory_install_read8_device_handler(space, k051316_2, 0x2800, 0x2fff, 0, 0, k051316_r); /* 051316 */ + memory_install_read8_device_handler(space, state->k051316_2, 0x2800, 0x2fff, 0, 0, k051316_r); /* 051316 */ /* Bits 3-7 probably control palette dimming in a similar way to TMNT2/Sunset Riders, */ /* however I don't have enough evidence to determine the exact behaviour. */ @@ -101,20 +95,20 @@ static WRITE8_HANDLER( chqflag_vreg_w ) /* the headlight (which have the shadow bit set) become highlights */ /* Maybe one of the bits inverts the SHAD line while the other darkens the background. */ if (data & 0x08) - palette_set_shadow_factor(space->machine,1/PALETTE_DEFAULT_SHADOW_FACTOR); + palette_set_shadow_factor(space->machine, 1 / PALETTE_DEFAULT_SHADOW_FACTOR); else - palette_set_shadow_factor(space->machine,PALETTE_DEFAULT_SHADOW_FACTOR); + palette_set_shadow_factor(space->machine, PALETTE_DEFAULT_SHADOW_FACTOR); - if ((data & 0x80) != last) + if ((data & 0x80) != state->last_vreg) { double brt = (data & 0x80) ? PALETTE_DEFAULT_SHADOW_FACTOR : 1.0; int i; - last = data & 0x80; + state->last_vreg = data & 0x80; /* only affect the background */ - for (i = 512;i < 1024;i++) - palette_set_pen_contrast(space->machine,i,brt); + for (i = 512; i < 1024; i++) + palette_set_pen_contrast(space->machine, i, brt); } //if ((data & 0xf8) && (data & 0xf8) != 0x88) @@ -124,22 +118,21 @@ static WRITE8_HANDLER( chqflag_vreg_w ) /* other bits unknown. bit 5 is used. */ } -static int analog_ctrl; - static WRITE8_HANDLER( select_analog_ctrl_w ) { - analog_ctrl = data; + chqflag_state *state = (chqflag_state *)space->machine->driver_data; + state->analog_ctrl = data; } static READ8_HANDLER( analog_read_r ) { - static int accel, wheel; - - switch (analog_ctrl & 0x03){ - case 0x00: return (accel = input_port_read(space->machine, "IN3")); /* accelerator */ - case 0x01: return (wheel = input_port_read(space->machine, "IN4")); /* steering */ - case 0x02: return accel; /* accelerator (previous?) */ - case 0x03: return wheel; /* steering (previous?) */ + chqflag_state *state = (chqflag_state *)space->machine->driver_data; + switch (state->analog_ctrl & 0x03) + { + case 0x00: return (state->accel = input_port_read(space->machine, "IN3")); /* accelerator */ + case 0x01: return (state->wheel = input_port_read(space->machine, "IN4")); /* steering */ + case 0x02: return state->accel; /* accelerator (previous?) */ + case 0x03: return state->wheel; /* steering (previous?) */ } return 0xff; @@ -147,8 +140,9 @@ static READ8_HANDLER( analog_read_r ) static WRITE8_HANDLER( chqflag_sh_irqtrigger_w ) { + chqflag_state *state = (chqflag_state *)space->machine->driver_data; soundlatch2_w(space, 0, data); - cputag_set_input_line(space->machine, "audiocpu", 0, HOLD_LINE); + cpu_set_input_line(state->audiocpu, 0, HOLD_LINE); } @@ -182,26 +176,27 @@ ADDRESS_MAP_END static WRITE8_HANDLER( k007232_bankswitch_w ) { + chqflag_state *state = (chqflag_state *)space->machine->driver_data; int bank_A, bank_B; /* banks # for the 007232 (chip 1) */ bank_A = ((data >> 4) & 0x03); bank_B = ((data >> 6) & 0x03); - k007232_set_bank( devtag_get_device(space->machine, "konami1"), bank_A, bank_B ); + k007232_set_bank(state->k007232_1, bank_A, bank_B); /* banks # for the 007232 (chip 2) */ bank_A = ((data >> 0) & 0x03); bank_B = ((data >> 2) & 0x03); - k007232_set_bank( devtag_get_device(space->machine, "konami2"), bank_A, bank_B ); + k007232_set_bank(state->k007232_2, bank_A, bank_B); } static ADDRESS_MAP_START( chqflag_sound_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0x0000, 0x7fff) AM_ROM /* ROM */ AM_RANGE(0x8000, 0x87ff) AM_RAM /* RAM */ AM_RANGE(0x9000, 0x9000) AM_WRITE(k007232_bankswitch_w) /* 007232 bankswitch */ - AM_RANGE(0xa000, 0xa00d) AM_DEVREADWRITE("konami1", k007232_r, k007232_w) /* 007232 (chip 1) */ - AM_RANGE(0xa01c, 0xa01c) AM_DEVWRITE("konami2", k007232_extvolume_w) /* extra volume, goes to the 007232 w/ A11 */ - AM_RANGE(0xb000, 0xb00d) AM_DEVREADWRITE("konami2", k007232_r, k007232_w) /* 007232 (chip 2) */ + AM_RANGE(0xa000, 0xa00d) AM_DEVREADWRITE("k007232_1", k007232_r, k007232_w) /* 007232 (chip 1) */ + AM_RANGE(0xa01c, 0xa01c) AM_DEVWRITE("k007232_2", k007232_extvolume_w) /* extra volume, goes to the 007232 w/ A11 */ + AM_RANGE(0xb000, 0xb00d) AM_DEVREADWRITE("k007232_2", k007232_r, k007232_w) /* 007232 (chip 2) */ AM_RANGE(0xc000, 0xc001) AM_DEVREADWRITE("ymsnd", ym2151_r, ym2151_w) /* YM2151 */ AM_RANGE(0xd000, 0xd000) AM_READ(soundlatch_r) /* soundlatch_r */ AM_RANGE(0xe000, 0xe000) AM_READ(soundlatch2_r) /* engine sound volume */ @@ -295,9 +290,10 @@ INPUT_PORTS_END -static void chqflag_ym2151_irq_w(const device_config *device, int data) +static void chqflag_ym2151_irq_w( const device_config *device, int data ) { - cputag_set_input_line(device->machine, "audiocpu", INPUT_LINE_NMI, data ? ASSERT_LINE : CLEAR_LINE); + chqflag_state *state = (chqflag_state *)device->machine->driver_data; + cpu_set_input_line(state->audiocpu, INPUT_LINE_NMI, data ? ASSERT_LINE : CLEAR_LINE); } @@ -306,20 +302,20 @@ static const ym2151_interface ym2151_config = chqflag_ym2151_irq_w }; -static void volume_callback0(const device_config *device, int v) +static void volume_callback0( const device_config *device, int v ) { - k007232_set_volume(device,0,(v & 0x0f)*0x11,0); - k007232_set_volume(device,1,0,(v >> 4)*0x11); + k007232_set_volume(device, 0, (v & 0x0f) * 0x11, 0); + k007232_set_volume(device, 1, 0, (v >> 4) * 0x11); } static WRITE8_DEVICE_HANDLER( k007232_extvolume_w ) { - k007232_set_volume(device,1,(data & 0x0f)*0x11/2,(data >> 4)*0x11/2); + k007232_set_volume(device, 1, (data & 0x0f) * 0x11/2, (data >> 4) * 0x11/2); } -static void volume_callback1(const device_config *device, int v) +static void volume_callback1( const device_config *device, int v ) { - k007232_set_volume(device,0,(v & 0x0f)*0x11/2,(v >> 4)*0x11/2); + k007232_set_volume(device, 0, (v & 0x0f) * 0x11/2, (v >> 4) * 0x11/2); } static const k007232_interface k007232_interface_1 = @@ -356,8 +352,44 @@ static const k051316_interface chqflag_k051316_intf_2 = chqflag_zoom_callback_1 }; +static MACHINE_START( chqflag ) +{ + chqflag_state *state = (chqflag_state *)machine->driver_data; + UINT8 *ROM = memory_region(machine, "maincpu"); + + memory_configure_bank(machine, "bank1", 0, 4, &ROM[0x10000], 0x2000); + + state->maincpu = devtag_get_device(machine, "maincpu"); + state->audiocpu = devtag_get_device(machine, "audiocpu"); + state->k051316_1 = devtag_get_device(machine, "k051316_1"); + state->k051316_2 = devtag_get_device(machine, "k051316_2"); + state->k051960 = devtag_get_device(machine, "k051960"); + state->k007232_1 = devtag_get_device(machine, "k007232_1"); + state->k007232_2 = devtag_get_device(machine, "k007232_2"); + + state_save_register_global(machine, state->k051316_readroms); + state_save_register_global(machine, state->last_vreg); + state_save_register_global(machine, state->analog_ctrl); + state_save_register_global(machine, state->accel); + state_save_register_global(machine, state->wheel); +} + +static MACHINE_RESET( chqflag ) +{ + chqflag_state *state = (chqflag_state *)machine->driver_data; + + state->k051316_readroms = 0; + state->last_vreg = 0; + state->analog_ctrl = 0; + state->accel = 0; + state->wheel = 0; +} + static MACHINE_DRIVER_START( chqflag ) + /* driver data */ + MDRV_DRIVER_DATA(chqflag_state) + /* basic machine hardware */ MDRV_CPU_ADD("maincpu", KONAMI,XTAL_24MHz/8) /* 052001 (verified on pcb) */ MDRV_CPU_PROGRAM_MAP(chqflag_map) @@ -368,6 +400,9 @@ static MACHINE_DRIVER_START( chqflag ) MDRV_QUANTUM_TIME(HZ(600)) + MDRV_MACHINE_START(chqflag) + MDRV_MACHINE_RESET(chqflag) + /* video hardware */ MDRV_VIDEO_ATTRIBUTES(VIDEO_HAS_SHADOWS) @@ -396,21 +431,21 @@ static MACHINE_DRIVER_START( chqflag ) MDRV_SOUND_ROUTE(0, "lspeaker", 0.80) MDRV_SOUND_ROUTE(1, "rspeaker", 0.80) - MDRV_SOUND_ADD("konami1", K007232, XTAL_3_579545MHz) /* verified on pcb */ + MDRV_SOUND_ADD("k007232_1", K007232, XTAL_3_579545MHz) /* verified on pcb */ MDRV_SOUND_CONFIG(k007232_interface_1) MDRV_SOUND_ROUTE(0, "lspeaker", 0.20) MDRV_SOUND_ROUTE(0, "rspeaker", 0.20) MDRV_SOUND_ROUTE(1, "lspeaker", 0.20) MDRV_SOUND_ROUTE(1, "rspeaker", 0.20) - MDRV_SOUND_ADD("konami2", K007232, XTAL_3_579545MHz) /* verified on pcb */ + MDRV_SOUND_ADD("k007232_2", K007232, XTAL_3_579545MHz) /* verified on pcb */ MDRV_SOUND_CONFIG(k007232_interface_2) MDRV_SOUND_ROUTE(0, "lspeaker", 0.20) MDRV_SOUND_ROUTE(1, "rspeaker", 0.20) MACHINE_DRIVER_END ROM_START( chqflag ) - ROM_REGION( 0x58800, "maincpu", 0 ) /* 052001 code */ + ROM_REGION( 0x58000, "maincpu", 0 ) /* 052001 code */ ROM_LOAD( "717h02", 0x050000, 0x008000, CRC(f5bd4e78) SHA1(7bab02152d055a6c3a322c88e7ee0b85a39d8ef2) ) /* banked ROM */ ROM_CONTINUE( 0x008000, 0x008000 ) /* fixed ROM */ ROM_LOAD( "717e10", 0x010000, 0x040000, CRC(72fc56f6) SHA1(433ea9a33f0230e046c731c70060f6a38db14ac7) ) /* banked ROM */ @@ -432,15 +467,15 @@ ROM_START( chqflag ) ROM_LOAD( "717e11", 0x080000, 0x040000, CRC(ebb171ec) SHA1(d65d4a6b169ce03e4427b2a397484634f938236b) ) /* zoom/rotate (N20) */ ROM_LOAD( "717e12", 0x0c0000, 0x040000, CRC(9269335d) SHA1(af298c8cff50d707d6abc806065f8e931f975dc0) ) /* zoom/rotate (N22) */ - ROM_REGION( 0x080000, "konami1", 0 ) /* 007232 data (chip 1) */ + ROM_REGION( 0x080000, "k007232_1", 0 ) /* 007232 data (chip 1) */ ROM_LOAD( "717e03", 0x000000, 0x080000, CRC(ebe73c22) SHA1(fad3334e5e91bf8d11b74ffdbbfd57567e6f6f8c) ) - ROM_REGION( 0x080000, "konami2", 0 ) /* 007232 data (chip 2) */ + ROM_REGION( 0x080000, "k007232_2", 0 ) /* 007232 data (chip 2) */ ROM_LOAD( "717e09", 0x000000, 0x080000, CRC(d74e857d) SHA1(00c851c857650d67fc4caccea4461d99be4acb3c) ) ROM_END ROM_START( chqflagj ) - ROM_REGION( 0x58800, "maincpu", 0 ) /* 052001 code */ + ROM_REGION( 0x58000, "maincpu", 0 ) /* 052001 code */ ROM_LOAD( "717j02.bin", 0x050000, 0x008000, CRC(05355daa) SHA1(130ddbc289c077565e44f33c63a63963e6417e19) ) /* banked ROM */ ROM_CONTINUE( 0x008000, 0x008000 ) /* fixed ROM */ ROM_LOAD( "717e10", 0x010000, 0x040000, CRC(72fc56f6) SHA1(433ea9a33f0230e046c731c70060f6a38db14ac7) ) /* banked ROM */ @@ -462,20 +497,13 @@ ROM_START( chqflagj ) ROM_LOAD( "717e11", 0x080000, 0x040000, CRC(ebb171ec) SHA1(d65d4a6b169ce03e4427b2a397484634f938236b) ) /* zoom/rotate (N20) */ ROM_LOAD( "717e12", 0x0c0000, 0x040000, CRC(9269335d) SHA1(af298c8cff50d707d6abc806065f8e931f975dc0) ) /* zoom/rotate (N22) */ - ROM_REGION( 0x080000, "konami1", 0 ) /* 007232 data (chip 1) */ + ROM_REGION( 0x080000, "k007232_1", 0 ) /* 007232 data (chip 1) */ ROM_LOAD( "717e03", 0x000000, 0x080000, CRC(ebe73c22) SHA1(fad3334e5e91bf8d11b74ffdbbfd57567e6f6f8c) ) - ROM_REGION( 0x080000, "konami2", 0 ) /* 007232 data (chip 2) */ + ROM_REGION( 0x080000, "k007232_2", 0 ) /* 007232 data (chip 2) */ ROM_LOAD( "717e09", 0x000000, 0x080000, CRC(d74e857d) SHA1(00c851c857650d67fc4caccea4461d99be4acb3c) ) ROM_END - -static DRIVER_INIT( chqflag ) -{ - UINT8 *RAM = memory_region(machine, "maincpu"); - machine->generic.paletteram.u8 = &RAM[0x58000]; -} - -GAMEL( 1988, chqflag, 0, chqflag, chqflag, chqflag, ROT90, "Konami", "Chequered Flag", GAME_UNEMULATED_PROTECTION | GAME_IMPERFECT_SOUND, layout_chqflag ) -GAMEL( 1988, chqflagj, chqflag, chqflag, chqflag, chqflag, ROT90, "Konami", "Chequered Flag (Japan)", GAME_UNEMULATED_PROTECTION | GAME_IMPERFECT_SOUND, layout_chqflag ) +GAMEL( 1988, chqflag, 0, chqflag, chqflag, 0, ROT90, "Konami", "Chequered Flag", GAME_UNEMULATED_PROTECTION | GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE, layout_chqflag ) +GAMEL( 1988, chqflagj, chqflag, chqflag, chqflag, 0, ROT90, "Konami", "Chequered Flag (Japan)", GAME_UNEMULATED_PROTECTION | GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE, layout_chqflag ) diff --git a/src/mame/drivers/crimfght.c b/src/mame/drivers/crimfght.c index 0e61d974534..46f40de3a58 100644 --- a/src/mame/drivers/crimfght.c +++ b/src/mame/drivers/crimfght.c @@ -1,13 +1,13 @@ /*************************************************************************** -Crime Fighters (Konami GX821) (c) 1989 Konami + Crime Fighters (Konami GX821) (c) 1989 Konami -Preliminary driver by: - Manuel Abadia <manu@teleline.es> + Preliminary driver by: + Manuel Abadia <manu@teleline.es> -2008-08 -Dip locations verified with manual (US) + 2008-08 + Dip locations verified with manual (US) ***************************************************************************/ @@ -18,28 +18,23 @@ Dip locations verified with manual (US) #include "sound/2151intf.h" #include "sound/k007232.h" #include "includes/konamipt.h" +#include "includes/crimfght.h" /* prototypes */ -static MACHINE_RESET( crimfght ); static KONAMI_SETLINES_CALLBACK( crimfght_banking ); -extern void crimfght_tile_callback(running_machine *machine, int layer,int bank,int *code,int *color,int *flags,int *priority); -extern void crimfght_sprite_callback(running_machine *machine, int *code,int *color,int *priority,int *shadow); - -VIDEO_START( crimfght ); -VIDEO_UPDATE( crimfght ); - static WRITE8_HANDLER( crimfght_coin_w ) { - coin_counter_w(space->machine, 0,data & 1); - coin_counter_w(space->machine, 1,data & 2); + coin_counter_w(space->machine, 0, data & 1); + coin_counter_w(space->machine, 1, data & 2); } static WRITE8_HANDLER( crimfght_sh_irqtrigger_w ) { - soundlatch_w(space,offset,data); - cputag_set_input_line_and_vector(space->machine, "audiocpu", 0, HOLD_LINE, 0xff); + crimfght_state *state = (crimfght_state *)space->machine->driver_data; + soundlatch_w(space, offset, data); + cpu_set_input_line_and_vector(state->audiocpu, 0, HOLD_LINE, 0xff); } static WRITE8_DEVICE_HANDLER( crimfght_snd_bankswitch_w ) @@ -47,40 +42,40 @@ static WRITE8_DEVICE_HANDLER( crimfght_snd_bankswitch_w ) /* b1: bank for channel A */ /* b0: bank for channel B */ - int bank_A = ((data >> 1) & 0x01); - int bank_B = ((data) & 0x01); - k007232_set_bank( devtag_get_device(device->machine, "konami"), bank_A, bank_B ); + crimfght_state *state = (crimfght_state *)device->machine->driver_data; + int bank_A = BIT(data, 1); + int bank_B = BIT(data, 0); + + k007232_set_bank(state->k007232, bank_A, bank_B ); } static READ8_HANDLER( k052109_051960_r ) { - const device_config *k052109 = devtag_get_device(space->machine, "k052109"); - const device_config *k051960 = devtag_get_device(space->machine, "k051960"); + crimfght_state *state = (crimfght_state *)space->machine->driver_data; - if (k052109_get_rmrd_line(k052109) == CLEAR_LINE) + if (k052109_get_rmrd_line(state->k052109) == CLEAR_LINE) { if (offset >= 0x3800 && offset < 0x3808) - return k051937_r(k051960, offset - 0x3800); + return k051937_r(state->k051960, offset - 0x3800); else if (offset < 0x3c00) - return k052109_r(k052109, offset); + return k052109_r(state->k052109, offset); else - return k051960_r(k051960, offset - 0x3c00); + return k051960_r(state->k051960, offset - 0x3c00); } else - return k052109_r(k052109, offset); + return k052109_r(state->k052109, offset); } static WRITE8_HANDLER( k052109_051960_w ) { - const device_config *k052109 = devtag_get_device(space->machine, "k052109"); - const device_config *k051960 = devtag_get_device(space->machine, "k051960"); + crimfght_state *state = (crimfght_state *)space->machine->driver_data; if (offset >= 0x3800 && offset < 0x3808) - k051937_w(k051960, offset - 0x3800, data); + k051937_w(state->k051960, offset - 0x3800, data); else if (offset < 0x3c00) - k052109_w(k052109, offset, data); + k052109_w(state->k052109, offset, data); else - k051960_w(k051960, offset - 0x3c00, data); + k051960_w(state->k051960, offset - 0x3c00, data); } /********************************************/ @@ -108,7 +103,7 @@ static ADDRESS_MAP_START( crimfght_sound_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0x8000, 0x87ff) AM_RAM /* RAM */ AM_RANGE(0xa000, 0xa001) AM_DEVREADWRITE("ymsnd", ym2151_r, ym2151_w) /* YM2151 */ AM_RANGE(0xc000, 0xc000) AM_READ(soundlatch_r) /* soundlatch_r */ - AM_RANGE(0xe000, 0xe00d) AM_DEVREADWRITE("konami", k007232_r, k007232_w) /* 007232 registers */ + AM_RANGE(0xe000, 0xe00d) AM_DEVREADWRITE("k007232", k007232_r, k007232_w) /* 007232 registers */ ADDRESS_MAP_END /*************************************************************************** @@ -232,10 +227,10 @@ static const ym2151_interface ym2151_config = crimfght_snd_bankswitch_w }; -static void volume_callback(const device_config *device, int v) +static void volume_callback( const device_config *device, int v ) { - k007232_set_volume(device,0,(v & 0x0f) * 0x11,0); - k007232_set_volume(device,1,0,(v >> 4) * 0x11); + k007232_set_volume(device, 0, (v & 0x0f) * 0x11, 0); + k007232_set_volume(device, 1, 0, (v >> 4) * 0x11); } static const k007232_interface k007232_config = @@ -244,7 +239,6 @@ static const k007232_interface k007232_config = }; - static const k052109_interface crimfght_k052109_intf = { "gfx1", 0, @@ -261,8 +255,31 @@ static const k051960_interface crimfght_k051960_intf = crimfght_sprite_callback }; +static MACHINE_START( crimfght ) +{ + crimfght_state *state = (crimfght_state *)machine->driver_data; + UINT8 *ROM = memory_region(machine, "maincpu"); + + memory_configure_bank(machine, "bank2", 0, 12, &ROM[0x10000], 0x2000); + memory_set_bank(machine, "bank2", 0); + + state->maincpu = devtag_get_device(machine, "maincpu"); + state->audiocpu = devtag_get_device(machine, "audiocpu"); + state->k052109 = devtag_get_device(machine, "k052109"); + state->k051960 = devtag_get_device(machine, "k051960"); + state->k007232 = devtag_get_device(machine, "k007232"); +} + +static MACHINE_RESET( crimfght ) +{ + konami_configure_set_lines(cputag_get_cpu(machine, "maincpu"), crimfght_banking); +} + static MACHINE_DRIVER_START( crimfght ) + /* driver data */ + MDRV_DRIVER_DATA(crimfght_state) + /* basic machine hardware */ MDRV_CPU_ADD("maincpu", KONAMI, 3000000) /* ? */ MDRV_CPU_PROGRAM_MAP(crimfght_map) @@ -271,6 +288,7 @@ static MACHINE_DRIVER_START( crimfght ) MDRV_CPU_ADD("audiocpu", Z80, 3579545) /* verified with PCB */ MDRV_CPU_PROGRAM_MAP(crimfght_sound_map) + MDRV_MACHINE_START(crimfght) MDRV_MACHINE_RESET(crimfght) /* video hardware */ @@ -299,7 +317,7 @@ static MACHINE_DRIVER_START( crimfght ) MDRV_SOUND_ROUTE(0, "lspeaker", 1.0) MDRV_SOUND_ROUTE(1, "rspeaker", 1.0) - MDRV_SOUND_ADD("konami", K007232, 3579545) + MDRV_SOUND_ADD("k007232", K007232, 3579545) MDRV_SOUND_CONFIG(k007232_config) MDRV_SOUND_ROUTE(0, "lspeaker", 0.20) MDRV_SOUND_ROUTE(0, "rspeaker", 0.20) @@ -332,7 +350,7 @@ ROM_START( crimfght ) ROM_REGION( 0x0100, "proms", 0 ) ROM_LOAD( "821a08.i15", 0x0000, 0x0100, CRC(7da55800) SHA1(3826f73569c8ae0431510a355bdfa082152b74a5) ) /* priority encoder (not used) */ - ROM_REGION( 0x40000, "konami", 0 ) /* data for the 007232 */ + ROM_REGION( 0x40000, "k007232", 0 ) /* data for the 007232 */ ROM_LOAD( "821k03.e5", 0x00000, 0x40000, CRC(fef8505a) SHA1(5c5121609f69001838963e961cb227d6b64e4f5f) ) ROM_END @@ -355,7 +373,7 @@ ROM_START( crimfghtj ) ROM_REGION( 0x0100, "proms", 0 ) ROM_LOAD( "821a08.i15", 0x0000, 0x0100, CRC(7da55800) SHA1(3826f73569c8ae0431510a355bdfa082152b74a5) ) /* priority encoder (not used) */ - ROM_REGION( 0x40000, "konami", 0 ) /* data for the 007232 */ + ROM_REGION( 0x40000, "k007232", 0 ) /* data for the 007232 */ ROM_LOAD( "821k03.e5", 0x00000, 0x40000, CRC(fef8505a) SHA1(5c5121609f69001838963e961cb227d6b64e4f5f) ) ROM_END @@ -378,7 +396,7 @@ ROM_REGION( 0x28000, "maincpu", 0 ) /* code + banked roms */ ROM_REGION( 0x0100, "proms", 0 ) ROM_LOAD( "821a08.i15", 0x0000, 0x0100, CRC(7da55800) SHA1(3826f73569c8ae0431510a355bdfa082152b74a5) ) /* priority encoder (not used) */ - ROM_REGION( 0x40000, "konami", 0 ) /* data for the 007232 */ + ROM_REGION( 0x40000, "k007232", 0 ) /* data for the 007232 */ ROM_LOAD( "821k03.e5", 0x00000, 0x40000, CRC(fef8505a) SHA1(5c5121609f69001838963e961cb227d6b64e4f5f) ) ROM_END @@ -390,9 +408,7 @@ ROM_END static KONAMI_SETLINES_CALLBACK( crimfght_banking ) { - const device_config *k052109 = devtag_get_device(device->machine, "k052109"); - UINT8 *RAM = memory_region(device->machine, "maincpu"); - int offs = 0; + crimfght_state *state = (crimfght_state *)device->machine->driver_data; /* bit 5 = select work RAM or palette */ if (lines & 0x20) @@ -405,22 +421,11 @@ static KONAMI_SETLINES_CALLBACK( crimfght_banking ) memory_install_readwrite_bank(cpu_get_address_space(device, ADDRESS_SPACE_PROGRAM), 0x0000, 0x03ff, 0, 0, "bank1"); /* RAM */ /* bit 6 = enable char ROM reading through the video RAM */ - k052109_set_rmrd_line(k052109, (lines & 0x40) ? ASSERT_LINE : CLEAR_LINE); - - offs = 0x10000 + ((lines & 0x0f) * 0x2000); - memory_set_bankptr(device->machine, "bank2", &RAM[offs]); -} - -static MACHINE_RESET( crimfght ) -{ - UINT8 *RAM = memory_region(machine, "maincpu"); - - konami_configure_set_lines(cputag_get_cpu(machine, "maincpu"), crimfght_banking); + k052109_set_rmrd_line(state->k052109, (lines & 0x40) ? ASSERT_LINE : CLEAR_LINE); - /* init the default bank */ - memory_set_bankptr(machine, "bank2", &RAM[0x10000] ); + memory_set_bank(device->machine, "bank2", lines & 0x0f); } -GAME( 1989, crimfght, 0, crimfght, crimfght, 0, ROT0, "Konami", "Crime Fighters (US 4 players)", 0 ) -GAME( 1989, crimfght2,crimfght, crimfght, crimfgtj, 0, ROT0, "Konami", "Crime Fighters (World 2 Players)", 0 ) -GAME( 1989, crimfghtj,crimfght, crimfght, crimfgtj, 0, ROT0, "Konami", "Crime Fighters (Japan 2 Players)", 0 ) +GAME( 1989, crimfght, 0, crimfght, crimfght, 0, ROT0, "k007232", "Crime Fighters (US 4 players)", GAME_SUPPORTS_SAVE ) +GAME( 1989, crimfght2, crimfght, crimfght, crimfgtj, 0, ROT0, "k007232", "Crime Fighters (World 2 Players)", GAME_SUPPORTS_SAVE ) +GAME( 1989, crimfghtj, crimfght, crimfght, crimfgtj, 0, ROT0, "k007232", "Crime Fighters (Japan 2 Players)", GAME_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/dbz.c b/src/mame/drivers/dbz.c index 85bb17c4fa3..5f9c84b2585 100644 --- a/src/mame/drivers/dbz.c +++ b/src/mame/drivers/dbz.c @@ -58,27 +58,12 @@ Notes: #include "cpu/z80/z80.h" #include "sound/2151intf.h" #include "sound/okim6295.h" - -/* BG LAYER */ - -extern UINT16 *dbz_bg1_videoram; -extern UINT16 *dbz_bg2_videoram; - -WRITE16_HANDLER(dbz_bg1_videoram_w); -WRITE16_HANDLER(dbz_bg2_videoram_w); - -static int dbz_control; - -VIDEO_START(dbz); -VIDEO_UPDATE(dbz); - -extern void dbz_sprite_callback(running_machine *machine, int *code, int *color, int *priority_mask); -extern void dbz_tile_callback(running_machine *machine, int layer, int *code, int *color, int *flags); +#include "includes/dbz.h" static INTERRUPT_GEN( dbz_interrupt ) { - const device_config *k053246 = devtag_get_device(device->machine, "k053246"); + dbz_state *state = (dbz_state *)device->machine->driver_data; switch (cpu_getiloops(device)) { @@ -87,7 +72,7 @@ static INTERRUPT_GEN( dbz_interrupt ) break; case 1: - if (k053246_is_irq_enabled(k053246)) + if (k053246_is_irq_enabled(state->k053246)) cpu_set_input_line(device, M68K_IRQ_4, HOLD_LINE); break; } @@ -96,25 +81,22 @@ static INTERRUPT_GEN( dbz_interrupt ) #if 0 static READ16_HANDLER( dbzcontrol_r ) { - return dbz_control; + dbz_state *state = (dbz_state *)space->machine->driver_data; + return state->control; } #endif static WRITE16_HANDLER( dbzcontrol_w ) { - const device_config *k053246 = devtag_get_device(space->machine, "k053246"); + dbz_state *state = (dbz_state *)space->machine->driver_data; /* bit 10 = enable '246 readback */ - COMBINE_DATA(&dbz_control); + COMBINE_DATA(&state->control); if (data & 0x400) - { - k053246_set_objcha_line(k053246, ASSERT_LINE); - } + k053246_set_objcha_line(state->k053246, ASSERT_LINE); else - { - k053246_set_objcha_line(k053246, CLEAR_LINE); - } + k053246_set_objcha_line(state->k053246, CLEAR_LINE); coin_counter_w(space->machine, 0, data & 1); coin_counter_w(space->machine, 1, data & 2); @@ -122,20 +104,23 @@ static WRITE16_HANDLER( dbzcontrol_w ) static WRITE16_HANDLER( dbz_sound_command_w ) { - soundlatch_w(space, 0, data>>8); + soundlatch_w(space, 0, data >> 8); } static WRITE16_HANDLER( dbz_sound_cause_nmi ) { - cputag_set_input_line(space->machine, "audiocpu", INPUT_LINE_NMI, PULSE_LINE); + dbz_state *state = (dbz_state *)space->machine->driver_data; + cpu_set_input_line(state->audiocpu, INPUT_LINE_NMI, PULSE_LINE); } -static void dbz_sound_irq(const device_config *device, int irq) +static void dbz_sound_irq( const device_config *device, int irq ) { + dbz_state *state = (dbz_state *)device->machine->driver_data; + if (irq) - cputag_set_input_line(device->machine, "audiocpu", 0, ASSERT_LINE); + cpu_set_input_line(state->audiocpu, 0, ASSERT_LINE); else - cputag_set_input_line(device->machine, "audiocpu", 0, CLEAR_LINE); + cpu_set_input_line(state->audiocpu, 0, CLEAR_LINE); } static ADDRESS_MAP_START( dbz_map, ADDRESS_SPACE_PROGRAM, 16 ) @@ -164,8 +149,8 @@ static ADDRESS_MAP_START( dbz_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x4f8000, 0x4f801f) AM_WRITENOP // 251 #1 AM_RANGE(0x4fc000, 0x4fc01f) AM_DEVWRITE("k053251", k053251_lsb_w) // 251 #2 - AM_RANGE(0x500000, 0x501fff) AM_RAM_WRITE(dbz_bg2_videoram_w) AM_BASE(&dbz_bg2_videoram) - AM_RANGE(0x508000, 0x509fff) AM_RAM_WRITE(dbz_bg1_videoram_w) AM_BASE(&dbz_bg1_videoram) + AM_RANGE(0x500000, 0x501fff) AM_RAM_WRITE(dbz_bg2_videoram_w) AM_BASE_MEMBER(dbz_state, bg2_videoram) + AM_RANGE(0x508000, 0x509fff) AM_RAM_WRITE(dbz_bg1_videoram_w) AM_BASE_MEMBER(dbz_state, bg1_videoram) AM_RANGE(0x510000, 0x513fff) AM_DEVREADWRITE("k053936_1", k053936_linectrl_r, k053936_linectrl_w) // ?? guess, it might not be AM_RANGE(0x518000, 0x51bfff) AM_DEVREADWRITE("k053936_2", k053936_linectrl_r, k053936_linectrl_w) // ?? guess, it might not be AM_RANGE(0x600000, 0x6fffff) AM_READNOP // PSAC 1 ROM readback window @@ -351,8 +336,44 @@ static const k053936_interface dbz_k053936_intf = }; +static MACHINE_START( dbz ) +{ + dbz_state *state = (dbz_state *)machine->driver_data; + + state->maincpu = devtag_get_device(machine, "maincpu"); + state->audiocpu = devtag_get_device(machine, "audiocpu"); + state->k053936_1 = devtag_get_device(machine, "k053936_1"); + state->k053936_2 = devtag_get_device(machine, "k053936_2"); + state->k056832 = devtag_get_device(machine, "k056832"); + state->k053246 = devtag_get_device(machine, "k053246"); + state->k053251 = devtag_get_device(machine, "k053251"); + + state_save_register_global(machine, state->control); + state_save_register_global(machine, state->sprite_colorbase); + state_save_register_global_array(machine, state->layerpri); + state_save_register_global_array(machine, state->layer_colorbase); +} + +static MACHINE_RESET( dbz ) +{ + dbz_state *state = (dbz_state *)machine->driver_data; + int i; + + for (i = 0; i < 5; i++) + state->layerpri[i] = 0; + + for (i = 0; i < 6; i++) + state->layer_colorbase[i] = 0; + + state->sprite_colorbase = 0; + state->control = 0; +} + static MACHINE_DRIVER_START( dbz ) + /* driver data */ + MDRV_DRIVER_DATA(dbz_state) + /* basic machine hardware */ MDRV_CPU_ADD("maincpu", M68000, 16000000) MDRV_CPU_PROGRAM_MAP(dbz_map) @@ -362,7 +383,8 @@ static MACHINE_DRIVER_START( dbz ) MDRV_CPU_PROGRAM_MAP(dbz_sound_map) MDRV_CPU_IO_MAP(dbz_sound_io_map) - MDRV_GFXDECODE(dbz) + MDRV_MACHINE_START(dbz) + MDRV_MACHINE_RESET(dbz) /* video hardware */ MDRV_VIDEO_ATTRIBUTES(VIDEO_HAS_SHADOWS) @@ -374,6 +396,8 @@ static MACHINE_DRIVER_START( dbz ) MDRV_SCREEN_SIZE(64*8, 32*8) MDRV_SCREEN_VISIBLE_AREA(0, 48*8-1, 0, 32*8-1) + MDRV_GFXDECODE(dbz) + MDRV_VIDEO_START(dbz) MDRV_VIDEO_UPDATE(dbz) MDRV_PALETTE_LENGTH(0x4000/2) @@ -497,5 +521,5 @@ static DRIVER_INIT( dbz ) ROM[0x990/2] = 0x4e71; } -GAME( 1993, dbz, 0, dbz, dbz, dbz, ROT0, "Banpresto", "Dragonball Z", GAME_IMPERFECT_GRAPHICS ) -GAME( 1994, dbz2, 0, dbz, dbz2, 0, ROT0, "Banpresto", "Dragonball Z 2 - Super Battle", GAME_IMPERFECT_GRAPHICS ) +GAME( 1993, dbz, 0, dbz, dbz, dbz, ROT0, "Banpresto", "Dragonball Z", GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE ) +GAME( 1994, dbz2, 0, dbz, dbz2, 0, ROT0, "Banpresto", "Dragonball Z 2 - Super Battle", GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/gbusters.c b/src/mame/drivers/gbusters.c index 3e9a1f6310b..4a45e06e60c 100644 --- a/src/mame/drivers/gbusters.c +++ b/src/mame/drivers/gbusters.c @@ -1,9 +1,9 @@ /*************************************************************************** -Gangbusters(GX878) (c) 1988 Konami + Gangbusters (GX878) (c) 1988 Konami -Preliminary driver by: - Manuel Abadia <manu@teleline.es> + Preliminary driver by: + Manuel Abadia <manu@teleline.es> ***************************************************************************/ @@ -14,57 +14,51 @@ Preliminary driver by: #include "sound/2151intf.h" #include "sound/k007232.h" #include "includes/konamipt.h" +#include "includes/gbusters.h" /* prototypes */ -static MACHINE_RESET( gbusters ); static KONAMI_SETLINES_CALLBACK( gbusters_banking ); -extern void gbusters_tile_callback(running_machine *machine, int layer,int bank,int *code,int *color,int *flags, int *priority); -extern void gbusters_sprite_callback(running_machine *machine, int *code,int *color,int *priority,int *shadow); - -extern int gbusters_priority; - -VIDEO_START( gbusters ); -VIDEO_UPDATE( gbusters ); - -static int palette_selected; -static UINT8 *ram; - static INTERRUPT_GEN( gbusters_interrupt ) { - const device_config *k052109 = devtag_get_device(device->machine, "k052109"); + gbusters_state *state = (gbusters_state *)device->machine->driver_data; - if (k052109_is_irq_enabled(k052109)) + if (k052109_is_irq_enabled(state->k052109)) cpu_set_input_line(device, KONAMI_IRQ_LINE, HOLD_LINE); } static READ8_HANDLER( bankedram_r ) { - if (palette_selected) + gbusters_state *state = (gbusters_state *)space->machine->driver_data; + + if (state->palette_selected) return space->machine->generic.paletteram.u8[offset]; else - return ram[offset]; + return state->ram[offset]; } static WRITE8_HANDLER( bankedram_w ) { - if (palette_selected) - paletteram_xBBBBBGGGGGRRRRR_be_w(space,offset,data); + gbusters_state *state = (gbusters_state *)space->machine->driver_data; + + if (state->palette_selected) + paletteram_xBBBBBGGGGGRRRRR_be_w(space, offset, data); else - ram[offset] = data; + state->ram[offset] = data; } static WRITE8_HANDLER( gbusters_1f98_w ) { - const device_config *k052109 = devtag_get_device(space->machine, "k052109"); + gbusters_state *state = (gbusters_state *)space->machine->driver_data; /* bit 0 = enable char ROM reading through the video RAM */ - k052109_set_rmrd_line(k052109, (data & 0x01) ? ASSERT_LINE : CLEAR_LINE); + k052109_set_rmrd_line(state->k052109, (data & 0x01) ? ASSERT_LINE : CLEAR_LINE); /* bit 7 used (during gfx rom tests), but unknown */ /* other bits unused/unknown */ - if (data & 0xfe){ + if (data & 0xfe) + { //logerror("%04x: (1f98) write %02x\n",cpu_get_pc(space->cpu), data); //popmessage("$1f98 = %02x", data); } @@ -72,15 +66,17 @@ static WRITE8_HANDLER( gbusters_1f98_w ) static WRITE8_HANDLER( gbusters_coin_counter_w ) { + gbusters_state *state = (gbusters_state *)space->machine->driver_data; + /* bit 0 select palette RAM or work RAM at 5800-5fff */ - palette_selected = ~data & 0x01; + state->palette_selected = ~data & 0x01; /* bits 1 & 2 = coin counters */ - coin_counter_w(space->machine, 0,data & 0x02); - coin_counter_w(space->machine, 1,data & 0x04); + coin_counter_w(space->machine, 0, data & 0x02); + coin_counter_w(space->machine, 1, data & 0x04); /* bits 3 selects tilemap priority */ - gbusters_priority = data & 0x08; + state->priority = data & 0x08; /* bit 7 is used but unknown */ @@ -89,10 +85,10 @@ static WRITE8_HANDLER( gbusters_coin_counter_w ) { #if 0 char baf[40]; - sprintf(baf,"ccnt = %02x", data); + sprintf(baf, "ccnt = %02x", data); popmessage(baf); #endif - logerror("%04x: (ccount) write %02x\n",cpu_get_pc(space->cpu), data); + logerror("%04x: (ccount) write %02x\n", cpu_get_pc(space->cpu), data); } } @@ -109,14 +105,15 @@ char baf[40]; static WRITE8_HANDLER( gbusters_sh_irqtrigger_w ) { - cputag_set_input_line_and_vector(space->machine, "audiocpu", 0, HOLD_LINE, 0xff); + gbusters_state *state = (gbusters_state *)space->machine->driver_data; + cpu_set_input_line_and_vector(state->audiocpu, 0, HOLD_LINE, 0xff); } static WRITE8_DEVICE_HANDLER( gbusters_snd_bankswitch_w ) { - int bank_B = ((data >> 2) & 0x01); /* ?? */ - int bank_A = ((data) & 0x01); /* ?? */ - k007232_set_bank( device, bank_A, bank_B ); + int bank_B = BIT(data, 2); /* ?? */ + int bank_A = BIT(data, 0); /* ?? */ + k007232_set_bank(device, bank_A, bank_B ); #if 0 { @@ -130,33 +127,31 @@ static WRITE8_DEVICE_HANDLER( gbusters_snd_bankswitch_w ) /* special handlers to combine 052109 & 051960 */ static READ8_HANDLER( k052109_051960_r ) { - const device_config *k052109 = devtag_get_device(space->machine, "k052109"); - const device_config *k051960 = devtag_get_device(space->machine, "k051960"); + gbusters_state *state = (gbusters_state *)space->machine->driver_data; - if (k052109_get_rmrd_line(k052109) == CLEAR_LINE) + if (k052109_get_rmrd_line(state->k052109) == CLEAR_LINE) { if (offset >= 0x3800 && offset < 0x3808) - return k051937_r(k051960, offset - 0x3800); + return k051937_r(state->k051960, offset - 0x3800); else if (offset < 0x3c00) - return k052109_r(k052109, offset); + return k052109_r(state->k052109, offset); else - return k051960_r(k051960, offset - 0x3c00); + return k051960_r(state->k051960, offset - 0x3c00); } else - return k052109_r(k052109, offset); + return k052109_r(state->k052109, offset); } static WRITE8_HANDLER( k052109_051960_w ) { - const device_config *k052109 = devtag_get_device(space->machine, "k052109"); - const device_config *k051960 = devtag_get_device(space->machine, "k051960"); + gbusters_state *state = (gbusters_state *)space->machine->driver_data; if (offset >= 0x3800 && offset < 0x3808) - k051937_w(k051960, offset - 0x3800, data); + k051937_w(state->k051960, offset - 0x3800, data); else if (offset < 0x3c00) - k052109_w(k052109, offset, data); + k052109_w(state->k052109, offset, data); else - k051960_w(k051960, offset - 0x3c00, data); + k051960_w(state->k051960, offset - 0x3c00, data); } @@ -175,7 +170,7 @@ static ADDRESS_MAP_START( gbusters_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0x1f9c, 0x1f9c) AM_WRITE(gbusters_unknown_w) /* ??? */ AM_RANGE(0x0000, 0x3fff) AM_READWRITE(k052109_051960_r, k052109_051960_w) /* tiles + sprites (RAM H21, G21 & H6) */ AM_RANGE(0x4000, 0x57ff) AM_RAM /* RAM I12 */ - AM_RANGE(0x5800, 0x5fff) AM_READWRITE(bankedram_r, bankedram_w) AM_BASE(&ram) /* palette + work RAM (RAM D16 & C16) */ + AM_RANGE(0x5800, 0x5fff) AM_READWRITE(bankedram_r, bankedram_w) AM_BASE_MEMBER(gbusters_state, ram) /* palette + work RAM (RAM D16 & C16) */ AM_RANGE(0x6000, 0x7fff) AM_ROMBANK("bank1") /* banked ROM */ AM_RANGE(0x8000, 0xffff) AM_ROM /* ROM 878n02.rom */ ADDRESS_MAP_END @@ -184,10 +179,10 @@ static ADDRESS_MAP_START( gbusters_sound_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0x0000, 0x7fff) AM_ROM /* ROM 878h01.rom */ AM_RANGE(0x8000, 0x87ff) AM_RAM /* RAM */ AM_RANGE(0xa000, 0xa000) AM_READ(soundlatch_r) /* soundlatch_r */ - AM_RANGE(0xb000, 0xb00d) AM_DEVREADWRITE("konami", k007232_r, k007232_w) /* 007232 registers */ + AM_RANGE(0xb000, 0xb00d) AM_DEVREADWRITE("k007232", k007232_r, k007232_w) /* 007232 registers */ AM_RANGE(0xc001, 0xc001) AM_DEVREAD("ymsnd", ym2151_status_port_r) /* YM 2151 */ AM_RANGE(0xc000, 0xc001) AM_DEVREADWRITE("ymsnd", ym2151_r, ym2151_w) /* YM 2151 */ - AM_RANGE(0xf000, 0xf000) AM_DEVWRITE("konami", gbusters_snd_bankswitch_w) /* 007232 bankswitch? */ + AM_RANGE(0xf000, 0xf000) AM_DEVWRITE("k007232", gbusters_snd_bankswitch_w) /* 007232 bankswitch? */ ADDRESS_MAP_END /*************************************************************************** @@ -250,10 +245,10 @@ INPUT_PORTS_END ***************************************************************************/ -static void volume_callback(const device_config *device, int v) +static void volume_callback( const device_config *device, int v ) { - k007232_set_volume(device,0,(v >> 4) * 0x11,0); - k007232_set_volume(device,1,0,(v & 0x0f) * 0x11); + k007232_set_volume(device, 0, (v >> 4) * 0x11, 0); + k007232_set_volume(device, 1, 0, (v & 0x0f) * 0x11); } static const k007232_interface k007232_config = @@ -277,8 +272,46 @@ static const k051960_interface gbusters_k051960_intf = gbusters_sprite_callback }; +static MACHINE_START( gbusters ) +{ + gbusters_state *state = (gbusters_state *)machine->driver_data; + UINT8 *ROM = memory_region(machine, "maincpu"); + + memory_configure_bank(machine, "bank1", 0, 16, &ROM[0x10000], 0x2000); + memory_set_bank(machine, "bank1", 0); + + machine->generic.paletteram.u8 = auto_alloc_array_clear(machine, UINT8, 0x800); + + state->maincpu = devtag_get_device(machine, "maincpu"); + state->audiocpu = devtag_get_device(machine, "audiocpu"); + state->k052109 = devtag_get_device(machine, "k052109"); + state->k051960 = devtag_get_device(machine, "k051960"); + state->k007232 = devtag_get_device(machine, "k007232"); + + state_save_register_global(machine, state->palette_selected); + state_save_register_global(machine, state->priority); + state_save_register_global_pointer(machine, machine->generic.paletteram.u8, 0x800); +} + +static MACHINE_RESET( gbusters ) +{ + gbusters_state *state = (gbusters_state *)machine->driver_data; + UINT8 *RAM = memory_region(machine, "maincpu"); + + konami_configure_set_lines(devtag_get_device(machine, "maincpu"), gbusters_banking); + + /* mirror address for banked ROM */ + memcpy(&RAM[0x18000], &RAM[0x10000], 0x08000); + + state->palette_selected = 0; + state->priority = 0; +} + static MACHINE_DRIVER_START( gbusters ) + /* driver data */ + MDRV_DRIVER_DATA(gbusters_state) + /* basic machine hardware */ MDRV_CPU_ADD("maincpu", KONAMI, 3000000) /* Konami custom 052526 */ MDRV_CPU_PROGRAM_MAP(gbusters_map) @@ -287,6 +320,7 @@ static MACHINE_DRIVER_START( gbusters ) MDRV_CPU_ADD("audiocpu", Z80, 3579545) /* ? */ MDRV_CPU_PROGRAM_MAP(gbusters_sound_map) + MDRV_MACHINE_START(gbusters) MDRV_MACHINE_RESET(gbusters) /* video hardware */ @@ -314,7 +348,7 @@ static MACHINE_DRIVER_START( gbusters ) MDRV_SOUND_ROUTE(0, "mono", 0.60) MDRV_SOUND_ROUTE(1, "mono", 0.60) - MDRV_SOUND_ADD("konami", K007232, 3579545) + MDRV_SOUND_ADD("k007232", K007232, 3579545) MDRV_SOUND_CONFIG(k007232_config) MDRV_SOUND_ROUTE(0, "mono", 0.30) MDRV_SOUND_ROUTE(1, "mono", 0.30) @@ -328,7 +362,7 @@ MACHINE_DRIVER_END ***************************************************************************/ ROM_START( gbusters ) - ROM_REGION( 0x30800, "maincpu", 0 ) /* code + banked roms + space for banked RAM */ + ROM_REGION( 0x30000, "maincpu", 0 ) /* code + banked roms + space for banked RAM */ ROM_LOAD( "878n02.k13", 0x10000, 0x08000, CRC(51697aaa) SHA1(1e6461e2e5e871d44085623a890158a4c1c4c404) ) ROM_CONTINUE( 0x08000, 0x08000 ) ROM_LOAD( "878j03.k15", 0x20000, 0x10000, CRC(3943a065) SHA1(6b0863f4182e6c973adfaa618f096bd4cc9b7b6d) ) @@ -347,12 +381,12 @@ ROM_START( gbusters ) ROM_REGION( 0x0100, "proms", 0 ) ROM_LOAD( "878a09.f20", 0x0000, 0x0100, CRC(e2d09a1b) SHA1(a9651e137486b2df367c39eb43f52d0833589e87) ) /* priority encoder (not used) */ - ROM_REGION( 0x40000, "konami", 0 ) /* samples for 007232 */ + ROM_REGION( 0x40000, "k007232", 0 ) /* samples for 007232 */ ROM_LOAD( "878c04.d5", 0x00000, 0x40000, CRC(9e982d1c) SHA1(a5b611c67b0f2ac50c679707931ee12ebbf72ebe) ) ROM_END ROM_START( gbustersa ) - ROM_REGION( 0x30800, "maincpu", 0 ) /* code + banked roms + space for banked RAM */ + ROM_REGION( 0x30000, "maincpu", 0 ) /* code + banked roms + space for banked RAM */ ROM_LOAD( "878_02.k13", 0x10000, 0x08000, CRC(57178414) SHA1(89b1403158f6ce18706c8a941109554d03cf77d9) ) /* unknown region/version leter */ ROM_CONTINUE( 0x08000, 0x08000 ) ROM_LOAD( "878_03.k15", 0x20000, 0x10000, CRC(6c59e660) SHA1(66a92eb8a93c9f542489fa31bec6ed1819d174da) ) /* unknown region/version leter */ @@ -371,12 +405,12 @@ ROM_START( gbustersa ) ROM_REGION( 0x0100, "proms", 0 ) ROM_LOAD( "878a09.f20", 0x0000, 0x0100, CRC(e2d09a1b) SHA1(a9651e137486b2df367c39eb43f52d0833589e87) ) /* priority encoder (not used) */ - ROM_REGION( 0x40000, "konami", 0 ) /* samples for 007232 */ + ROM_REGION( 0x40000, "k007232", 0 ) /* samples for 007232 */ ROM_LOAD( "878c04.d5", 0x00000, 0x40000, CRC(9e982d1c) SHA1(a5b611c67b0f2ac50c679707931ee12ebbf72ebe) ) ROM_END ROM_START( crazycop ) - ROM_REGION( 0x30800, "maincpu", 0 ) /* code + banked roms + space for banked RAM */ + ROM_REGION( 0x30000, "maincpu", 0 ) /* code + banked roms + space for banked RAM */ ROM_LOAD( "878m02.k13", 0x10000, 0x08000, CRC(9c1c9f52) SHA1(7a60ad20aac92da8258b43b04f8c7f27bb71f1df) ) ROM_CONTINUE( 0x08000, 0x08000 ) ROM_LOAD( "878j03.k15", 0x20000, 0x10000, CRC(3943a065) SHA1(6b0863f4182e6c973adfaa618f096bd4cc9b7b6d) ) @@ -395,21 +429,18 @@ ROM_START( crazycop ) ROM_REGION( 0x0100, "proms", 0 ) ROM_LOAD( "878a09.f20", 0x0000, 0x0100, CRC(e2d09a1b) SHA1(a9651e137486b2df367c39eb43f52d0833589e87) ) /* priority encoder (not used) */ - ROM_REGION( 0x40000, "konami", 0 ) /* samples for 007232 */ + ROM_REGION( 0x40000, "k007232", 0 ) /* samples for 007232 */ ROM_LOAD( "878c04.d5", 0x00000, 0x40000, CRC(9e982d1c) SHA1(a5b611c67b0f2ac50c679707931ee12ebbf72ebe) ) ROM_END static KONAMI_SETLINES_CALLBACK( gbusters_banking ) { - UINT8 *RAM = memory_region(device->machine, "maincpu"); - int offs = 0x10000; - /* bits 0-3 ROM bank */ - offs += (lines & 0x0f)*0x2000; - memory_set_bankptr(device->machine, "bank1", &RAM[offs] ); + memory_set_bank(device->machine, "bank1", lines & 0x0f); - if (lines & 0xf0){ + if (lines & 0xf0) + { //logerror("%04x: (lines) write %02x\n",cpu_get_pc(device), lines); //popmessage("lines = %02x", lines); } @@ -417,19 +448,7 @@ static KONAMI_SETLINES_CALLBACK( gbusters_banking ) /* other bits unknown */ } -static MACHINE_RESET( gbusters ) -{ - UINT8 *RAM = memory_region(machine, "maincpu"); - - konami_configure_set_lines(cputag_get_cpu(machine, "maincpu"), gbusters_banking); - - /* mirror address for banked ROM */ - memcpy(&RAM[0x18000], &RAM[0x10000], 0x08000 ); - - machine->generic.paletteram.u8 = &RAM[0x30000]; -} - -GAME( 1988, gbusters, 0, gbusters, gbusters, 0, ROT90, "Konami", "Gang Busters (set 1)", 0 ) /* N02 & J03 program roms */ -GAME( 1988, gbustersa,gbusters, gbusters, gbusters, 0, ROT90, "Konami", "Gang Busters (set 2)", 0 ) /* unknown region program roms */ -GAME( 1988, crazycop, gbusters, gbusters, gbusters, 0, ROT90, "Konami", "Crazy Cop (Japan)", 0 ) /* M02 & J03 program roms */ +GAME( 1988, gbusters, 0, gbusters, gbusters, 0, ROT90, "Konami", "Gang Busters (set 1)", GAME_SUPPORTS_SAVE ) /* N02 & J03 program roms */ +GAME( 1988, gbustersa, gbusters, gbusters, gbusters, 0, ROT90, "Konami", "Gang Busters (set 2)", GAME_SUPPORTS_SAVE ) /* unknown region program roms */ +GAME( 1988, crazycop, gbusters, gbusters, gbusters, 0, ROT90, "Konami", "Crazy Cop (Japan)", GAME_SUPPORTS_SAVE ) /* M02 & J03 program roms */ diff --git a/src/mame/drivers/gijoe.c b/src/mame/drivers/gijoe.c index fd6a53b6a53..47df033d472 100644 --- a/src/mame/drivers/gijoe.c +++ b/src/mame/drivers/gijoe.c @@ -1,9 +1,6 @@ -#define JOE_DEBUG 0 -#define JOE_DMADELAY attotime_add(ATTOTIME_IN_NSEC(42700), ATTOTIME_IN_NSEC(341300)) - /*************************************************************************** - GI Joe (c) 1992 Konami + G.I. Joe (c) 1992 Konami Change Log @@ -43,16 +40,11 @@ Known Issues #include "machine/eeprom.h" #include "sound/k054539.h" #include "includes/konamipt.h" +#include "includes/gijoe.h" -VIDEO_START( gijoe ); -VIDEO_UPDATE( gijoe ); - -extern void gijoe_sprite_callback(running_machine *machine, int *code, int *color, int *priority_mask); -extern void gijoe_tile_callback(running_machine *machine, int layer, int *code, int *color, int *flags); +#define JOE_DEBUG 0 +#define JOE_DMADELAY attotime_add(ATTOTIME_IN_NSEC(42700), ATTOTIME_IN_NSEC(341300)) -static UINT16 *gijoe_workram; -static UINT16 cur_control2; -static emu_timer *dmadelay_timer; static const eeprom_interface eeprom_intf = { @@ -68,13 +60,15 @@ static const eeprom_interface eeprom_intf = static READ16_HANDLER( control2_r ) { - return cur_control2; + gijoe_state *state = (gijoe_state *)space->machine->driver_data; + return state->cur_control2; } static WRITE16_HANDLER( control2_w ) { - const device_config *k053246 = devtag_get_device(space->machine, "k053246"); - if(ACCESSING_BITS_0_7) + gijoe_state *state = (gijoe_state *)space->machine->driver_data; + + if (ACCESSING_BITS_0_7) { /* bit 0 is data */ /* bit 1 is cs (active low) */ @@ -84,24 +78,24 @@ static WRITE16_HANDLER( control2_w ) /* bit 7 (unknown: enable irq 5?) */ input_port_write(space->machine, "EEPROMOUT", data, 0xff); - cur_control2 = data; + state->cur_control2 = data; /* bit 6 = enable sprite ROM reading */ - k053246_set_objcha_line(k053246, (data & 0x0040) ? ASSERT_LINE : CLEAR_LINE); + k053246_set_objcha_line(state->k053246, (data & 0x0040) ? ASSERT_LINE : CLEAR_LINE); } } -static void gijoe_objdma(running_machine *machine) +static void gijoe_objdma( running_machine *machine ) { - const device_config *k053246 = devtag_get_device(machine, "k053246"); + gijoe_state *state = (gijoe_state *)machine->driver_data; UINT16 *src_head, *src_tail, *dst_head, *dst_tail; - src_head = machine->generic.spriteram.u16; - src_tail = machine->generic.spriteram.u16 + 255*8; - k053247_get_ram(k053246, &dst_head); - dst_tail = dst_head + 255*8; + src_head = state->spriteram; + src_tail = state->spriteram + 255 * 8; + k053247_get_ram(state->k053246, &dst_head); + dst_tail = dst_head + 255 * 8; - for (; src_head<=src_tail; src_head+=8) + for (; src_head <= src_tail; src_head += 8) { if (*src_head & 0x8000) { @@ -118,35 +112,36 @@ static void gijoe_objdma(running_machine *machine) static TIMER_CALLBACK( dmaend_callback ) { - if (cur_control2 & 0x0020) - cputag_set_input_line(machine, "maincpu", 6, HOLD_LINE); + gijoe_state *state = (gijoe_state *)machine->driver_data; + + if (state->cur_control2 & 0x0020) + cpu_set_input_line(state->maincpu, 6, HOLD_LINE); } static INTERRUPT_GEN( gijoe_interrupt ) { - const device_config *k053246 = devtag_get_device(device->machine, "k053246"); - const device_config *k056832 = devtag_get_device(device->machine, "k056832"); + gijoe_state *state = (gijoe_state *)device->machine->driver_data; // global interrupt masking (*this game only) - if (!k056832_is_irq_enabled(k056832, 0)) + if (!k056832_is_irq_enabled(state->k056832, 0)) return; - if (k053246_is_irq_enabled(k053246)) + if (k053246_is_irq_enabled(state->k053246)) { gijoe_objdma(device->machine); // 42.7us(clr) + 341.3us(xfer) delay at 6Mhz dotclock - timer_adjust_oneshot(dmadelay_timer, JOE_DMADELAY, 0); + timer_adjust_oneshot(state->dmadelay_timer, JOE_DMADELAY, 0); } // trigger V-blank interrupt - if (cur_control2 & 0x0080) + if (state->cur_control2 & 0x0080) cpu_set_input_line(device, 5, HOLD_LINE); } static WRITE16_HANDLER( sound_cmd_w ) { - if(ACCESSING_BITS_0_7) + if (ACCESSING_BITS_0_7) { data &= 0xff; soundlatch_w(space, 0, data); @@ -155,37 +150,31 @@ static WRITE16_HANDLER( sound_cmd_w ) static WRITE16_HANDLER( sound_irq_w ) { - cputag_set_input_line(space->machine, "audiocpu", 0, HOLD_LINE); + gijoe_state *state = (gijoe_state *)space->machine->driver_data; + cpu_set_input_line(state->audiocpu, 0, HOLD_LINE); } static READ16_HANDLER( sound_status_r ) { - return soundlatch2_r(space,0); -} - -static void sound_nmi(const device_config *device) -{ - cputag_set_input_line(device->machine, "audiocpu", INPUT_LINE_NMI, PULSE_LINE); + return soundlatch2_r(space, 0); } -static MACHINE_START( gijoe ) +static void sound_nmi( const device_config *device ) { - state_save_register_global(machine, cur_control2); - - dmadelay_timer = timer_alloc(machine, dmaend_callback, NULL); + gijoe_state *state = (gijoe_state *)device->machine->driver_data; + cpu_set_input_line(state->audiocpu, INPUT_LINE_NMI, PULSE_LINE); } - static ADDRESS_MAP_START( gijoe_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x000000, 0x0fffff) AM_ROM - AM_RANGE(0x100000, 0x100fff) AM_RAM AM_BASE_GENERIC(spriteram) // Sprites + AM_RANGE(0x100000, 0x100fff) AM_RAM AM_BASE_MEMBER(gijoe_state, spriteram) // Sprites AM_RANGE(0x110000, 0x110007) AM_DEVWRITE("k053246", k053246_word_w) AM_RANGE(0x120000, 0x121fff) AM_DEVREADWRITE("k056832", k056832_ram_word_r, k056832_ram_word_w) // Graphic planes AM_RANGE(0x122000, 0x123fff) AM_DEVREADWRITE("k056832", k056832_ram_word_r, k056832_ram_word_w) // Graphic planes mirror read AM_RANGE(0x130000, 0x131fff) AM_DEVREAD("k056832", k056832_rom_word_r) // Passthrough to tile roms AM_RANGE(0x160000, 0x160007) AM_DEVWRITE("k056832", k056832_b_word_w) // VSCCS (board dependent) AM_RANGE(0x170000, 0x170001) AM_WRITENOP // Watchdog - AM_RANGE(0x180000, 0x18ffff) AM_RAM AM_BASE(&gijoe_workram) // Main RAM. Spec. 180000-1803ff, 180400-187fff + AM_RANGE(0x180000, 0x18ffff) AM_RAM AM_BASE_MEMBER(gijoe_state, workram) // Main RAM. Spec. 180000-1803ff, 180400-187fff AM_RANGE(0x190000, 0x190fff) AM_RAM_WRITE(paletteram16_xBBBBBGGGGGRRRRR_word_w) AM_BASE_GENERIC(paletteram) AM_RANGE(0x1a0000, 0x1a001f) AM_DEVWRITE("k053251", k053251_lsb_w) AM_RANGE(0x1b0000, 0x1b003f) AM_DEVWRITE("k056832", k056832_word_w) @@ -210,7 +199,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( sound_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0x0000, 0xebff) AM_ROM AM_RANGE(0xf000, 0xf7ff) AM_RAM - AM_RANGE(0xf800, 0xfa2f) AM_DEVREADWRITE("konami", k054539_r, k054539_w) + AM_RANGE(0xf800, 0xfa2f) AM_DEVREADWRITE("k054539", k054539_r, k054539_w) AM_RANGE(0xfc00, 0xfc00) AM_WRITE(soundlatch2_w) AM_RANGE(0xfc02, 0xfc02) AM_READ(soundlatch_r) ADDRESS_MAP_END @@ -285,8 +274,33 @@ static const k053247_interface gijoe_k053247_intf = gijoe_sprite_callback }; +static MACHINE_START( gijoe ) +{ + gijoe_state *state = (gijoe_state *)machine->driver_data; + + state->maincpu = devtag_get_device(machine, "maincpu"); + state->audiocpu = devtag_get_device(machine, "audiocpu"); + state->k054539 = devtag_get_device(machine, "k054539"); + state->k056832 = devtag_get_device(machine, "k056832"); + state->k053246 = devtag_get_device(machine, "k053246"); + state->k053251 = devtag_get_device(machine, "k053251"); + + state->dmadelay_timer = timer_alloc(machine, dmaend_callback, NULL); + + state_save_register_global(machine, state->cur_control2); +} + +static MACHINE_RESET( gijoe ) +{ + gijoe_state *state = (gijoe_state *)machine->driver_data; + state->cur_control2 = 0; +} + static MACHINE_DRIVER_START( gijoe ) + /* driver data */ + MDRV_DRIVER_DATA(gijoe_state) + /* basic machine hardware */ MDRV_CPU_ADD("maincpu", M68000, 16000000) /* Confirmed */ MDRV_CPU_PROGRAM_MAP(gijoe_map) @@ -296,6 +310,7 @@ static MACHINE_DRIVER_START( gijoe ) MDRV_CPU_PROGRAM_MAP(sound_map) MDRV_MACHINE_START(gijoe) + MDRV_MACHINE_RESET(gijoe) MDRV_EEPROM_ADD("eeprom", eeprom_intf) @@ -321,7 +336,7 @@ static MACHINE_DRIVER_START( gijoe ) /* sound hardware */ MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") - MDRV_SOUND_ADD("konami", K054539, 48000) + MDRV_SOUND_ADD("k054539", K054539, 48000) MDRV_SOUND_CONFIG(k054539_config) MDRV_SOUND_ROUTE(0, "lspeaker", 1.0) MDRV_SOUND_ROUTE(1, "rspeaker", 1.0) @@ -348,7 +363,7 @@ ROM_START( gijoe ) ROM_LOAD( "069a07", 0x200000, 0x100000, CRC(ccaa3971) SHA1(16989cbbd65fe1b41c4a85fea02ba1e9880818a9) ) ROM_LOAD( "069a06", 0x300000, 0x100000, CRC(63eba8e1) SHA1(aa318d356c2580765452106ea0d2228273a90523) ) - ROM_REGION( 0x200000, "konami", 0 ) + ROM_REGION( 0x200000, "k054539", 0 ) ROM_LOAD( "069a04", 0x000000, 0x200000, CRC(11d6dcd6) SHA1(04cbff9f61cd8641db538db809ddf20da29fd5ac) ) ROM_END @@ -372,7 +387,7 @@ ROM_START( gijoeu ) ROM_LOAD( "069a07", 0x200000, 0x100000, CRC(ccaa3971) SHA1(16989cbbd65fe1b41c4a85fea02ba1e9880818a9) ) ROM_LOAD( "069a06", 0x300000, 0x100000, CRC(63eba8e1) SHA1(aa318d356c2580765452106ea0d2228273a90523) ) - ROM_REGION( 0x200000, "konami", 0 ) + ROM_REGION( 0x200000, "k054539", 0 ) ROM_LOAD( "069a04", 0x000000, 0x200000, CRC(11d6dcd6) SHA1(04cbff9f61cd8641db538db809ddf20da29fd5ac) ) ROM_END @@ -396,11 +411,11 @@ ROM_START( gijoej ) ROM_LOAD( "069a07", 0x200000, 0x100000, CRC(ccaa3971) SHA1(16989cbbd65fe1b41c4a85fea02ba1e9880818a9) ) ROM_LOAD( "069a06", 0x300000, 0x100000, CRC(63eba8e1) SHA1(aa318d356c2580765452106ea0d2228273a90523) ) - ROM_REGION( 0x200000, "konami", 0 ) + ROM_REGION( 0x200000, "k054539", 0 ) ROM_LOAD( "069a04", 0x000000, 0x200000, CRC(11d6dcd6) SHA1(04cbff9f61cd8641db538db809ddf20da29fd5ac) ) ROM_END -GAME( 1992, gijoe, 0, gijoe, gijoe, 0, ROT0, "Konami", "GI Joe (World)", 0) -GAME( 1992, gijoeu, gijoe, gijoe, gijoe, 0, ROT0, "Konami", "GI Joe (US)", 0) -GAME( 1992, gijoej, gijoe, gijoe, gijoe, 0, ROT0, "Konami", "GI Joe (Japan)", 0) +GAME( 1992, gijoe, 0, gijoe, gijoe, 0, ROT0, "Konami", "G.I. Joe (World)", GAME_SUPPORTS_SAVE ) +GAME( 1992, gijoeu, gijoe, gijoe, gijoe, 0, ROT0, "Konami", "G.I. Joe (US)", GAME_SUPPORTS_SAVE ) +GAME( 1992, gijoej, gijoe, gijoe, gijoe, 0, ROT0, "Konami", "G.I. Joe (Japan)", GAME_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/lethal.c b/src/mame/drivers/lethal.c index 22412ad9b08..70b9099e887 100644 --- a/src/mame/drivers/lethal.c +++ b/src/mame/drivers/lethal.c @@ -171,6 +171,7 @@ maybe some priority issues / sprite placement issues.. #include "cpu/z80/z80.h" #include "machine/eeprom.h" #include "sound/k054539.h" +#include "includes/lethal.h" #define MAIN_CLOCK XTAL_24MHz #define SOUND_CLOCK XTAL_18_432MHz @@ -182,14 +183,6 @@ static const char *const gunnames[] = { "LIGHT0_X", "LIGHT0_Y", "LIGHT1_X", "LIG #define GUNX( a ) (( ( input_port_read(space->machine, gunnames[2 * (a - 1)]) * 287 ) / 0xff ) + 16) #define GUNY( a ) (( ( input_port_read(space->machine, gunnames[2 * (a - 1) + 1]) * 223 ) / 0xff ) + 10) -VIDEO_START(lethalen); -VIDEO_UPDATE(lethalen); -WRITE8_HANDLER(lethalen_palette_control); - -extern void lethalen_sprite_callback(running_machine *machine, int *code, int *color, int *priority_mask); -extern void lethalen_tile_callback(running_machine *machine, int layer, int *code, int *color, int *flags); - -static UINT8 cur_control2; /* Default Eeprom for the parent.. otherwise it will always complain first boot */ /* its easy to init but this saves me a bit of time.. */ @@ -219,17 +212,18 @@ static WRITE8_HANDLER( control2_w ) /* bit 4 bankswitches the 4800-4fff region: 0 = registers, 1 = RAM ("CBNK" on schematics) */ /* bit 6 is "SHD0" (some kind of shadow control) */ /* bit 7 is "SHD1" (ditto) */ + lethal_state *state = (lethal_state *)space->machine->driver_data; - cur_control2 = data; + state->cur_control2 = data; - input_port_write(space->machine, "EEPROMOUT", cur_control2, 0xff); + input_port_write(space->machine, "EEPROMOUT", state->cur_control2, 0xff); } static INTERRUPT_GEN(lethalen_interrupt) { - const device_config *k056832 = devtag_get_device(device->machine, "k056832"); + lethal_state *state = (lethal_state *)device->machine->driver_data; - if (k056832_is_irq_enabled(k056832, 0)) + if (k056832_is_irq_enabled(state->k056832, 0)) cpu_set_input_line(device, HD6309_IRQ_LINE, HOLD_LINE); } @@ -240,7 +234,8 @@ static WRITE8_HANDLER( sound_cmd_w ) static WRITE8_HANDLER( sound_irq_w ) { - cputag_set_input_line(space->machine, "soundcpu", 0, HOLD_LINE); + lethal_state *state = (lethal_state *)space->machine->driver_data; + cpu_set_input_line(state->audiocpu, 0, HOLD_LINE); } static READ8_HANDLER( sound_status_r ) @@ -248,25 +243,22 @@ static READ8_HANDLER( sound_status_r ) return 0xf; } -static void sound_nmi(const device_config *device) +static void sound_nmi( const device_config *device ) { - cputag_set_input_line(device->machine, "soundcpu", INPUT_LINE_NMI, PULSE_LINE); + lethal_state *state = (lethal_state *)device->machine->driver_data; + cpu_set_input_line(state->audiocpu, INPUT_LINE_NMI, PULSE_LINE); } static WRITE8_HANDLER( le_bankswitch_w ) { - UINT8 *prgrom = (UINT8 *)memory_region(space->machine, "maincpu")+0x10000; - - memory_set_bankptr(space->machine, "bank1", &prgrom[data * 0x2000]); + memory_set_bank(space->machine, "bank1", data); } static READ8_HANDLER( le_4800_r ) { - const device_config *k056832 = devtag_get_device(space->machine, "k056832"); - const device_config *k053244 = devtag_get_device(space->machine, "k053244"); - const device_config *k054000 = devtag_get_device(space->machine, "k054000"); + lethal_state *state = (lethal_state *)space->machine->driver_data; - if (cur_control2 & 0x10) // RAM enable + if (state->cur_control2 & 0x10) // RAM enable { return space->machine->generic.paletteram.u8[offset]; } @@ -283,7 +275,7 @@ static READ8_HANDLER( le_4800_r ) case 0x44: case 0x45: case 0x46: - return k053244_r(k053244, offset - 0x40); + return k053244_r(state->k053244, offset - 0x40); case 0x80: case 0x81: @@ -317,22 +309,22 @@ static READ8_HANDLER( le_4800_r ) case 0x9d: case 0x9e: case 0x9f: - return k054000_r(k054000, offset - 0x80); + return k054000_r(state->k054000, offset - 0x80); case 0xca: return sound_status_r(space, 0); } } else if (offset < 0x1800) - return k053245_r(k053244, (offset - 0x0800) & 0x07ff); + return k053245_r(state->k053244, (offset - 0x0800) & 0x07ff); else if (offset < 0x2000) - return k056832_ram_code_lo_r(k056832, offset - 0x1800); + return k056832_ram_code_lo_r(state->k056832, offset - 0x1800); else if (offset < 0x2800) - return k056832_ram_code_hi_r(k056832, offset - 0x2000); + return k056832_ram_code_hi_r(state->k056832, offset - 0x2000); else if (offset < 0x3000) - return k056832_ram_attr_lo_r(k056832, offset - 0x2800); + return k056832_ram_attr_lo_r(state->k056832, offset - 0x2800); else // (offset < 0x3800) - return k056832_ram_attr_hi_r(k056832, offset - 0x3000); + return k056832_ram_attr_hi_r(state->k056832, offset - 0x3000); } return 0; @@ -340,13 +332,11 @@ static READ8_HANDLER( le_4800_r ) static WRITE8_HANDLER( le_4800_w ) { - const device_config *k056832 = devtag_get_device(space->machine, "k056832"); - const device_config *k053244 = devtag_get_device(space->machine, "k053244"); - const device_config *k054000 = devtag_get_device(space->machine, "k054000"); + lethal_state *state = (lethal_state *)space->machine->driver_data; - if (cur_control2 & 0x10) // RAM enable + if (state->cur_control2 & 0x10) // RAM enable { - paletteram_xBBBBBGGGGGRRRRR_be_w(space,offset,data); + paletteram_xBBBBBGGGGGRRRRR_be_w(space, offset, data); } else { @@ -369,7 +359,7 @@ static WRITE8_HANDLER( le_4800_w ) case 0x44: case 0x45: case 0x46: - k053244_w(k053244, offset - 0x40, data); + k053244_w(state->k053244, offset - 0x40, data); break; case 0x80: @@ -404,7 +394,7 @@ static WRITE8_HANDLER( le_4800_w ) case 0x9d: case 0x9e: case 0x9f: - k054000_w(k054000, offset - 0x80, data); + k054000_w(state->k054000, offset - 0x80, data); break; default: @@ -413,25 +403,25 @@ static WRITE8_HANDLER( le_4800_w ) } } else if (offset < 0x1800) - k053245_w(k053244, (offset - 0x0800) & 0x07ff, data); + k053245_w(state->k053244, (offset - 0x0800) & 0x07ff, data); else if (offset < 0x2000) - k056832_ram_code_lo_w(k056832, offset - 0x1800, data); + k056832_ram_code_lo_w(state->k056832, offset - 0x1800, data); else if (offset < 0x2800) - k056832_ram_code_hi_w(k056832, offset - 0x2000, data); + k056832_ram_code_hi_w(state->k056832, offset - 0x2000, data); else if (offset < 0x3000) - k056832_ram_attr_lo_w(k056832, offset - 0x2800, data); + k056832_ram_attr_lo_w(state->k056832, offset - 0x2800, data); else // (offset < 0x3800) - k056832_ram_attr_hi_w(k056832, offset - 0x3000, data); + k056832_ram_attr_hi_w(state->k056832, offset - 0x3000, data); } } // use one more palette entry for the BG color -static WRITE8_HANDLER(le_bgcolor_w) +static WRITE8_HANDLER( le_bgcolor_w ) { - paletteram_xBBBBBGGGGGRRRRR_be_w(space,0x3800+offset, data); + paletteram_xBBBBBGGGGGRRRRR_be_w(space, 0x3800 + offset, data); } -static READ8_HANDLER(guns_r) +static READ8_HANDLER( guns_r ) { switch (offset) { @@ -456,7 +446,7 @@ static READ8_HANDLER(guns_r) return 0; } -static READ8_HANDLER(gunsaux_r) +static READ8_HANDLER( gunsaux_r ) { int res = 0; @@ -482,14 +472,14 @@ static ADDRESS_MAP_START( le_main, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0x40db, 0x40db) AM_READ(gunsaux_r) // top X bit of guns AM_RANGE(0x40dc, 0x40dc) AM_WRITE(le_bankswitch_w) AM_RANGE(0x47fe, 0x47ff) AM_WRITE(le_bgcolor_w) // BG color - AM_RANGE(0x4800, 0x7fff) AM_READWRITE(le_4800_r, le_4800_w) AM_BASE_GENERIC(paletteram) // bankswitched: RAM and registers + AM_RANGE(0x4800, 0x7fff) AM_READWRITE(le_4800_r, le_4800_w) // bankswitched: RAM and registers AM_RANGE(0x8000, 0xffff) AM_ROMBANK("bank2") ADDRESS_MAP_END static ADDRESS_MAP_START( le_sound, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0x0000, 0xefff) AM_ROM AM_RANGE(0xf000, 0xf7ff) AM_RAM - AM_RANGE(0xf800, 0xfa2f) AM_DEVREADWRITE("konami", k054539_r, k054539_w) + AM_RANGE(0xf800, 0xfa2f) AM_DEVREADWRITE("k054539", k054539_r, k054539_w) AM_RANGE(0xfc00, 0xfc00) AM_WRITE(soundlatch2_w) AM_RANGE(0xfc02, 0xfc02) AM_READ(soundlatch_r) AM_RANGE(0xfc03, 0xfc03) AM_READNOP @@ -589,17 +579,43 @@ static const k054539_interface k054539_config = static MACHINE_START( lethalen ) { - state_save_register_global(machine, cur_control2); + lethal_state *state = (lethal_state *)machine->driver_data; + UINT8 *ROM = memory_region(machine, "maincpu"); + + memory_configure_bank(machine, "bank1", 0, 0x20, &ROM[0x10000], 0x2000); + memory_set_bank(machine, "bank1", 0); + + machine->generic.paletteram.u8 = auto_alloc_array(machine, UINT8, 0x3800 + 0x02); + + state->maincpu = devtag_get_device(machine, "maincpu"); + state->audiocpu = devtag_get_device(machine, "soundcpu"); + state->k054539 = devtag_get_device(machine, "k054539"); + state->k053244 = devtag_get_device(machine, "k053244"); + state->k056832 = devtag_get_device(machine, "k056832"); + state->k054000 = devtag_get_device(machine, "k054000"); + + state_save_register_global(machine, state->cur_control2); + state_save_register_global(machine, state->sprite_colorbase); + state_save_register_global_array(machine, state->layer_colorbase); + + state_save_register_global_pointer(machine, machine->generic.paletteram.u8, 0x3800 + 0x02); } static MACHINE_RESET( lethalen ) { + lethal_state *state = (lethal_state *)machine->driver_data; UINT8 *prgrom = (UINT8 *)memory_region(machine, "maincpu"); + int i; - memory_set_bankptr(machine, "bank1", &prgrom[0x10000]); memory_set_bankptr(machine, "bank2", &prgrom[0x48000]); /* force reset again to read proper reset vector */ - device_reset(cputag_get_cpu(machine, "maincpu")); + device_reset(devtag_get_device(machine, "maincpu")); + + for (i = 0; i < 4; i++) + state->layer_colorbase[i] = 0; + + state->sprite_colorbase = 0; + state->cur_control2 = 0; } static const k056832_interface lethalen_k056832_intf = @@ -630,6 +646,10 @@ static const k05324x_interface lethalej_k05324x_intf = }; static MACHINE_DRIVER_START( lethalen ) + + /* driver data */ + MDRV_DRIVER_DATA(lethal_state) + /* basic machine hardware */ MDRV_CPU_ADD("maincpu", HD6309, MAIN_CLOCK/2) // ??? MDRV_CPU_PROGRAM_MAP(le_main) @@ -668,7 +688,7 @@ static MACHINE_DRIVER_START( lethalen ) /* sound hardware */ MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") - MDRV_SOUND_ADD("konami", K054539, 48000) + MDRV_SOUND_ADD("k054539", K054539, 48000) MDRV_SOUND_CONFIG(k054539_config) MDRV_SOUND_ROUTE(0, "lspeaker", 1.0) MDRV_SOUND_ROUTE(1, "rspeaker", 1.0) @@ -713,7 +733,7 @@ ROM_START( lethalen ) // US version UAE ROM_REGION( 0x200000, "gfx4", ROMREGION_ERASE00 ) ROM_COPY("gfx2",0x200000,0, 0x200000) - ROM_REGION( 0x200000, "konami", 0 ) + ROM_REGION( 0x200000, "k054539", 0 ) /* K054539 samples */ ROM_LOAD( "191a03", 0x000000, 0x200000, CRC(9b13fbe8) SHA1(19b02dbd9d6da54045b0ba4dfe7b282c72745c9c)) ROM_END @@ -747,7 +767,7 @@ ROM_START( lethalenj ) // Japan version JAD ROM_REGION( 0x200000, "gfx4", ROMREGION_ERASE00 ) ROM_COPY("gfx2",0x200000,0, 0x200000) - ROM_REGION( 0x200000, "konami", 0 ) + ROM_REGION( 0x200000, "k054539", 0 ) /* K054539 samples */ ROM_LOAD( "191a03", 0x000000, 0x200000, CRC(9b13fbe8) SHA1(19b02dbd9d6da54045b0ba4dfe7b282c72745c9c)) ROM_END @@ -781,7 +801,7 @@ ROM_START( lethalenux ) // US version ?, proto / hack?, very different to other ROM_REGION( 0x200000, "gfx4", ROMREGION_ERASE00 ) ROM_COPY("gfx2",0x200000,0, 0x200000) - ROM_REGION( 0x200000, "konami", 0 ) + ROM_REGION( 0x200000, "k054539", 0 ) /* K054539 samples */ ROM_LOAD( "191a03", 0x000000, 0x200000, CRC(9b13fbe8) SHA1(19b02dbd9d6da54045b0ba4dfe7b282c72745c9c)) ROM_END @@ -815,7 +835,7 @@ ROM_START( lethaleneab ) // Euro ver. EAB ROM_REGION( 0x200000, "gfx4", ROMREGION_ERASE00 ) ROM_COPY("gfx2",0x200000,0, 0x200000) - ROM_REGION( 0x200000, "konami", 0 ) + ROM_REGION( 0x200000, "k054539", 0 ) /* K054539 samples */ ROM_LOAD( "191a03", 0x000000, 0x200000, CRC(9b13fbe8) SHA1(19b02dbd9d6da54045b0ba4dfe7b282c72745c9c)) ROM_END @@ -849,7 +869,7 @@ ROM_START( lethaleneae ) // Euro ver. EAE ROM_REGION( 0x200000, "gfx4", ROMREGION_ERASE00 ) ROM_COPY("gfx2",0x200000,0, 0x200000) - ROM_REGION( 0x200000, "konami", 0 ) + ROM_REGION( 0x200000, "k054539", 0 ) /* K054539 samples */ ROM_LOAD( "191a03", 0x000000, 0x200000, CRC(9b13fbe8) SHA1(19b02dbd9d6da54045b0ba4dfe7b282c72745c9c)) ROM_END @@ -883,23 +903,22 @@ ROM_START( lethalenua ) // *might* be UAA (writes UA to Eeprom) ROM_REGION( 0x200000, "gfx4", ROMREGION_ERASE00 ) ROM_COPY("gfx2",0x200000,0, 0x200000) - ROM_REGION( 0x200000, "konami", 0 ) + ROM_REGION( 0x200000, "k054539", 0 ) /* K054539 samples */ ROM_LOAD( "191a03", 0x000000, 0x200000, CRC(9b13fbe8) SHA1(19b02dbd9d6da54045b0ba4dfe7b282c72745c9c)) ROM_END - static DRIVER_INIT( lethalen ) { konamid_rom_deinterleave_2_half(machine, "gfx2"); konamid_rom_deinterleave_2(machine, "gfx4"); } -GAME( 1992, lethalen, 0, lethalen, lethalen, lethalen, ORIENTATION_FLIP_Y, "Konami", "Lethal Enforcers (ver UAE, 11/19/92 15:04)", GAME_IMPERFECT_GRAPHICS) // writes UE to eeprom -GAME( 1992, lethalenua, lethalen, lethalen, lethalen, lethalen, ORIENTATION_FLIP_Y, "Konami", "Lethal Enforcers (ver unknown, US, 08/17/92 21:38)", GAME_IMPERFECT_GRAPHICS) // UAA? (writes UA to eeprom) -GAME( 1992, lethalenux, lethalen, lethalen, lethalen, lethalen, ORIENTATION_FLIP_Y, "Konami", "Lethal Enforcers (ver unknown, US, 08/06/92 15:11, hacked/proto?)", GAME_IMPERFECT_GRAPHICS) // writes UA to eeprom but earlier than suspected UAA set, might be a proto, might be hacked, fails rom test -GAME( 1992, lethaleneab,lethalen, lethalen, lethalen, lethalen, ORIENTATION_FLIP_Y, "Konami", "Lethal Enforcers (ver EAB, 10/14/92 19:53)", GAME_IMPERFECT_GRAPHICS) // writes EC to eeprom?! -GAME( 1992, lethaleneae,lethalen, lethalen, lethalen, lethalen, ORIENTATION_FLIP_Y, "Konami", "Lethal Enforcers (ver EAE, 11/19/92 16:24)", GAME_IMPERFECT_GRAPHICS) // writes EE to eeprom +GAME( 1992, lethalen, 0, lethalen, lethalen, lethalen, ORIENTATION_FLIP_Y, "Konami", "Lethal Enforcers (ver UAE, 11/19/92 15:04)", GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE ) // writes UE to eeprom +GAME( 1992, lethalenua, lethalen, lethalen, lethalen, lethalen, ORIENTATION_FLIP_Y, "Konami", "Lethal Enforcers (ver unknown, US, 08/17/92 21:38)", GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE ) // UAA? (writes UA to eeprom) +GAME( 1992, lethalenux, lethalen, lethalen, lethalen, lethalen, ORIENTATION_FLIP_Y, "Konami", "Lethal Enforcers (ver unknown, US, 08/06/92 15:11, hacked/proto?)", GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE ) // writes UA to eeprom but earlier than suspected UAA set, might be a proto, might be hacked, fails rom test +GAME( 1992, lethaleneab,lethalen, lethalen, lethalen, lethalen, ORIENTATION_FLIP_Y, "Konami", "Lethal Enforcers (ver EAB, 10/14/92 19:53)", GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE ) // writes EC to eeprom?! +GAME( 1992, lethaleneae,lethalen, lethalen, lethalen, lethalen, ORIENTATION_FLIP_Y, "Konami", "Lethal Enforcers (ver EAE, 11/19/92 16:24)", GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE ) // writes EE to eeprom // different mirror / display setup, shoot off the top of the screen to reload.. -GAME( 1992, lethalenj, lethalen, lethalej, lethalej, lethalen, ORIENTATION_FLIP_X, "Konami", "Lethal Enforcers (ver JAD, 12/04/92 17:16)", GAME_IMPERFECT_GRAPHICS) // writes JC to eeprom?! +GAME( 1992, lethalenj, lethalen, lethalej, lethalej, lethalen, ORIENTATION_FLIP_X, "Konami", "Lethal Enforcers (ver JAD, 12/04/92 17:16)", GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE ) // writes JC to eeprom?! diff --git a/src/mame/drivers/mainevt.c b/src/mame/drivers/mainevt.c index 432033df651..abc9f5c25b9 100644 --- a/src/mame/drivers/mainevt.c +++ b/src/mame/drivers/mainevt.c @@ -29,56 +29,43 @@ Notes: #include "sound/k007232.h" #include "sound/upd7759.h" #include "includes/konamipt.h" - -VIDEO_UPDATE( mainevt ); -VIDEO_UPDATE( dv ); -VIDEO_START( mainevt ); -VIDEO_START( dv ); - -extern void mainevt_tile_callback(running_machine *machine, int layer,int bank,int *code,int *color,int *flags,int *priority); -extern void dv_tile_callback(running_machine *machine, int layer,int bank,int *code,int *color,int *flags,int *priority); -extern void mainevt_sprite_callback(running_machine *machine, int *code,int *color,int *priority_mask,int *shadow); -extern void dv_sprite_callback(running_machine *machine, int *code,int *color,int *priority,int *shadow); - +#include "includes/mainevt.h" static INTERRUPT_GEN( mainevt_interrupt ) { - const device_config *k052109 = devtag_get_device(device->machine, "k052109"); + mainevt_state *state = (mainevt_state *)device->machine->driver_data; - if (k052109_is_irq_enabled(k052109)) + if (k052109_is_irq_enabled(state->k052109)) irq0_line_hold(device); } - -static int nmi_enable; - static WRITE8_HANDLER( dv_nmienable_w ) { - nmi_enable = data; + mainevt_state *state = (mainevt_state *)space->machine->driver_data; + state->nmi_enable = data; } static INTERRUPT_GEN( dv_interrupt ) { - if (nmi_enable) + mainevt_state *state = (mainevt_state *)device->machine->driver_data; + + if (state->nmi_enable) nmi_line_pulse(device); } static WRITE8_HANDLER( mainevt_bankswitch_w ) { - const device_config *k052109 = devtag_get_device(space->machine, "k052109"); - UINT8 *RAM = memory_region(space->machine, "maincpu"); - int bankaddress; + mainevt_state *state = (mainevt_state *)space->machine->driver_data; /* bit 0-1 ROM bank select */ - bankaddress = 0x10000 + (data & 0x03) * 0x2000; - memory_set_bankptr(space->machine, "bank1",&RAM[bankaddress]); + memory_set_bank(space->machine, "bank1", data & 0x03); /* TODO: bit 5 = select work RAM or palette? */ -// palette_selected = data & 0x20; + //palette_selected = data & 0x20; /* bit 6 = enable char ROM reading through the video RAM */ - k052109_set_rmrd_line(k052109, (data & 0x40) ? ASSERT_LINE : CLEAR_LINE); + k052109_set_rmrd_line(state->k052109, (data & 0x40) ? ASSERT_LINE : CLEAR_LINE); /* bit 7 = NINITSET (unknown) */ @@ -87,17 +74,18 @@ static WRITE8_HANDLER( mainevt_bankswitch_w ) static WRITE8_HANDLER( mainevt_coin_w ) { - coin_counter_w(space->machine, 0,data & 0x10); - coin_counter_w(space->machine, 1,data & 0x20); - set_led_status(space->machine, 0,data & 0x01); - set_led_status(space->machine, 1,data & 0x02); - set_led_status(space->machine, 2,data & 0x04); - set_led_status(space->machine, 3,data & 0x08); + coin_counter_w(space->machine, 0, data & 0x10); + coin_counter_w(space->machine, 1, data & 0x20); + set_led_status(space->machine, 0, data & 0x01); + set_led_status(space->machine, 1, data & 0x02); + set_led_status(space->machine, 2, data & 0x04); + set_led_status(space->machine, 3, data & 0x08); } static WRITE8_HANDLER( mainevt_sh_irqtrigger_w ) { - cputag_set_input_line_and_vector(space->machine, "audiocpu", 0, HOLD_LINE, 0xff); + mainevt_state *state = (mainevt_state *)space->machine->driver_data; + cpu_set_input_line_and_vector(state->audiocpu, 0, HOLD_LINE, 0xff); } static READ8_DEVICE_HANDLER( mainevt_sh_busy_r ) @@ -107,74 +95,74 @@ static READ8_DEVICE_HANDLER( mainevt_sh_busy_r ) static WRITE8_HANDLER( mainevt_sh_irqcontrol_w ) { - const device_config *upd = devtag_get_device(space->machine, "upd"); - upd7759_reset_w(upd, data & 2); - upd7759_start_w(upd, data & 1); + mainevt_state *state = (mainevt_state *)space->machine->driver_data; - interrupt_enable_w(space,0,data & 4); + upd7759_reset_w(state->upd, data & 2); + upd7759_start_w(state->upd, data & 1); + + interrupt_enable_w(space, 0, data & 4); } static WRITE8_HANDLER( devstor_sh_irqcontrol_w ) { - interrupt_enable_w(space,0,data & 4); + interrupt_enable_w(space, 0, data & 4); } static WRITE8_HANDLER( mainevt_sh_bankswitch_w ) { - int bank_A,bank_B; + mainevt_state *state = (mainevt_state *)space->machine->driver_data; + int bank_A, bank_B; //logerror("CPU #1 PC: %04x bank switch = %02x\n",cpu_get_pc(space->cpu),data); /* bits 0-3 select the 007232 banks */ - bank_A=(data&0x3); - bank_B=((data>>2)&0x3); - k007232_set_bank( devtag_get_device(space->machine, "konami"), bank_A, bank_B ); + bank_A = (data & 0x3); + bank_B = ((data >> 2) & 0x3); + k007232_set_bank(state->k007232, bank_A, bank_B); /* bits 4-5 select the UPD7759 bank */ - upd7759_set_bank_base(devtag_get_device(space->machine, "upd"), ((data >> 4) & 0x03) * 0x20000); + upd7759_set_bank_base(state->upd, ((data >> 4) & 0x03) * 0x20000); } static WRITE8_DEVICE_HANDLER( dv_sh_bankswitch_w ) { - int bank_A,bank_B; + int bank_A, bank_B; //logerror("CPU #1 PC: %04x bank switch = %02x\n",cpu_get_pc(space->cpu),data); /* bits 0-3 select the 007232 banks */ - bank_A=(data&0x3); - bank_B=((data>>2)&0x3); - k007232_set_bank( device, bank_A, bank_B ); + bank_A = (data & 0x3); + bank_B = ((data >> 2) & 0x3); + k007232_set_bank(device, bank_A, bank_B); } static READ8_HANDLER( k052109_051960_r ) { - const device_config *k052109 = devtag_get_device(space->machine, "k052109"); - const device_config *k051960 = devtag_get_device(space->machine, "k051960"); + mainevt_state *state = (mainevt_state *)space->machine->driver_data; - if (k052109_get_rmrd_line(k052109) == CLEAR_LINE) + if (k052109_get_rmrd_line(state->k052109) == CLEAR_LINE) { if (offset >= 0x3800 && offset < 0x3808) - return k051937_r(k051960, offset - 0x3800); + return k051937_r(state->k051960, offset - 0x3800); else if (offset < 0x3c00) - return k052109_r(k052109, offset); + return k052109_r(state->k052109, offset); else - return k051960_r(k051960, offset - 0x3c00); + return k051960_r(state->k051960, offset - 0x3c00); } else - return k052109_r(k052109, offset); + return k052109_r(state->k052109, offset); } static WRITE8_HANDLER( k052109_051960_w ) { - const device_config *k052109 = devtag_get_device(space->machine, "k052109"); - const device_config *k051960 = devtag_get_device(space->machine, "k051960"); + mainevt_state *state = (mainevt_state *)space->machine->driver_data; if (offset >= 0x3800 && offset < 0x3808) - k051937_w(k051960, offset - 0x3800, data); + k051937_w(state->k051960, offset - 0x3800, data); else if (offset < 0x3c00) - k052109_w(k052109, offset, data); + k052109_w(state->k052109, offset, data); else - k051960_w(k051960, offset - 0x3c00, data); + k051960_w(state->k051960, offset - 0x3c00, data); } @@ -232,7 +220,7 @@ static ADDRESS_MAP_START( mainevt_sound_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0x8000, 0x83ff) AM_RAM AM_RANGE(0x9000, 0x9000) AM_DEVWRITE("upd", upd7759_port_w) AM_RANGE(0xa000, 0xa000) AM_READ(soundlatch_r) - AM_RANGE(0xb000, 0xb00d) AM_DEVREADWRITE("konami", k007232_r,k007232_w) + AM_RANGE(0xb000, 0xb00d) AM_DEVREADWRITE("k007232", k007232_r,k007232_w) AM_RANGE(0xd000, 0xd000) AM_DEVREAD("upd", mainevt_sh_busy_r) AM_RANGE(0xe000, 0xe000) AM_WRITE(mainevt_sh_irqcontrol_w) AM_RANGE(0xf000, 0xf000) AM_WRITE(mainevt_sh_bankswitch_w) @@ -242,10 +230,10 @@ static ADDRESS_MAP_START( devstors_sound_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0x0000, 0x7fff) AM_ROM AM_RANGE(0x8000, 0x83ff) AM_RAM AM_RANGE(0xa000, 0xa000) AM_READ(soundlatch_r) - AM_RANGE(0xb000, 0xb00d) AM_DEVREADWRITE("konami", k007232_r,k007232_w) + AM_RANGE(0xb000, 0xb00d) AM_DEVREADWRITE("k007232", k007232_r,k007232_w) AM_RANGE(0xc000, 0xc001) AM_DEVREADWRITE("ymsnd", ym2151_r,ym2151_w) AM_RANGE(0xe000, 0xe000) AM_WRITE(devstor_sh_irqcontrol_w) - AM_RANGE(0xf000, 0xf000) AM_DEVWRITE("konami", dv_sh_bankswitch_w) + AM_RANGE(0xf000, 0xf000) AM_DEVWRITE("k007232", dv_sh_bankswitch_w) ADDRESS_MAP_END @@ -402,8 +390,8 @@ INPUT_PORTS_END static void volume_callback(const device_config *device, int v) { - k007232_set_volume(device,0,(v >> 4) * 0x11,0); - k007232_set_volume(device,1,0,(v & 0x0f) * 0x11); + k007232_set_volume(device, 0, (v >> 4) * 0x11, 0); + k007232_set_volume(device, 1, 0, (v & 0x0f) * 0x11); } static const k007232_interface k007232_config = @@ -427,8 +415,35 @@ static const k051960_interface mainevt_k051960_intf = mainevt_sprite_callback }; +static MACHINE_START( mainevt ) +{ + mainevt_state *state = (mainevt_state *)machine->driver_data; + UINT8 *ROM = memory_region(machine, "maincpu"); + + memory_configure_bank(machine, "bank1", 0, 4, &ROM[0x10000], 0x2000); + + state->maincpu = devtag_get_device(machine, "maincpu"); + state->audiocpu = devtag_get_device(machine, "audiocpu"); + state->upd = devtag_get_device(machine, "upd"); + state->k007232 = devtag_get_device(machine, "k007232"); + state->k052109 = devtag_get_device(machine, "k052109"); + state->k051960 = devtag_get_device(machine, "k051960"); + + state_save_register_global(machine, state->nmi_enable); +} + +static MACHINE_RESET( mainevt ) +{ + mainevt_state *state = (mainevt_state *)machine->driver_data; + + state->nmi_enable = 0; +} + static MACHINE_DRIVER_START( mainevt ) + /* driver data */ + MDRV_DRIVER_DATA(mainevt_state) + /* basic machine hardware */ MDRV_CPU_ADD("maincpu", HD6309, 3000000*4) /* ?? */ MDRV_CPU_PROGRAM_MAP(mainevt_map) @@ -438,6 +453,9 @@ static MACHINE_DRIVER_START( mainevt ) MDRV_CPU_PROGRAM_MAP(mainevt_sound_map) MDRV_CPU_PERIODIC_INT(nmi_line_pulse,8*60) /* ??? */ + MDRV_MACHINE_START(mainevt) + MDRV_MACHINE_RESET(mainevt) + /* video hardware */ MDRV_VIDEO_ATTRIBUTES(VIDEO_HAS_SHADOWS) @@ -459,7 +477,7 @@ static MACHINE_DRIVER_START( mainevt ) /* sound hardware */ MDRV_SPEAKER_STANDARD_MONO("mono") - MDRV_SOUND_ADD("konami", K007232, 3579545) + MDRV_SOUND_ADD("k007232", K007232, 3579545) MDRV_SOUND_CONFIG(k007232_config) MDRV_SOUND_ROUTE(0, "mono", 0.20) MDRV_SOUND_ROUTE(1, "mono", 0.20) @@ -487,6 +505,9 @@ static const k051960_interface dv_k051960_intf = static MACHINE_DRIVER_START( devstors ) + /* driver data */ + MDRV_DRIVER_DATA(mainevt_state) + /* basic machine hardware */ MDRV_CPU_ADD("maincpu", HD6309, 3000000*4) /* ?? */ MDRV_CPU_PROGRAM_MAP(devstors_map) @@ -496,6 +517,9 @@ static MACHINE_DRIVER_START( devstors ) MDRV_CPU_PROGRAM_MAP(devstors_sound_map) MDRV_CPU_PERIODIC_INT(irq0_line_hold,4*60) /* ??? */ + MDRV_MACHINE_START(mainevt) + MDRV_MACHINE_RESET(mainevt) + /* video hardware */ MDRV_VIDEO_ATTRIBUTES(VIDEO_HAS_SHADOWS) @@ -522,7 +546,7 @@ static MACHINE_DRIVER_START( devstors ) MDRV_SOUND_ROUTE(0, "mono", 0.30) MDRV_SOUND_ROUTE(1, "mono", 0.30) - MDRV_SOUND_ADD("konami", K007232, 3579545) + MDRV_SOUND_ADD("k007232", K007232, 3579545) MDRV_SOUND_CONFIG(k007232_config) MDRV_SOUND_ROUTE(0, "mono", 0.20) MDRV_SOUND_ROUTE(1, "mono", 0.20) @@ -559,7 +583,7 @@ ROM_START( mainevt ) ROM_REGION( 0x0100, "proms", 0 ) ROM_LOAD( "63s141n.k14", 0x0000, 0x0100, CRC(61f6c8d1) SHA1(c70f1f8e434aaaffb89e30e2230a08374ef324ad) ) /* priority encoder (not used) */ - ROM_REGION( 0x80000, "konami", 0 ) /* 512k for 007232 samples */ + ROM_REGION( 0x80000, "k007232", 0 ) /* 512k for 007232 samples */ ROM_LOAD( "799b03.d4", 0x00000, 0x80000, CRC(f1cfd342) SHA1(079afc5c631de7f5b652d0ce6fd44b3aacd14a1b) ) ROM_REGION( 0x80000, "upd", 0 ) /* 512k for the UPD7759C samples */ @@ -590,7 +614,7 @@ ROM_START( mainevto ) ROM_REGION( 0x0100, "proms", 0 ) ROM_LOAD( "63s141n.k14", 0x0000, 0x0100, CRC(61f6c8d1) SHA1(c70f1f8e434aaaffb89e30e2230a08374ef324ad) ) /* priority encoder (not used) */ - ROM_REGION( 0x80000, "konami", 0 ) /* 512k for 007232 samples */ + ROM_REGION( 0x80000, "k007232", 0 ) /* 512k for 007232 samples */ ROM_LOAD( "799b03.d4", 0x00000, 0x80000, CRC(f1cfd342) SHA1(079afc5c631de7f5b652d0ce6fd44b3aacd14a1b) ) ROM_REGION( 0x80000, "upd", 0 ) /* 512k for the UPD7759C samples */ @@ -621,7 +645,7 @@ ROM_START( mainevt2p ) ROM_REGION( 0x0100, "proms", 0 ) ROM_LOAD( "63s141n.k14", 0x0000, 0x0100, CRC(61f6c8d1) SHA1(c70f1f8e434aaaffb89e30e2230a08374ef324ad) ) /* priority encoder (not used) */ - ROM_REGION( 0x80000, "konami", 0 ) /* 512k for 007232 samples */ + ROM_REGION( 0x80000, "k007232", 0 ) /* 512k for 007232 samples */ ROM_LOAD( "799b03.d4", 0x00000, 0x80000, CRC(f1cfd342) SHA1(079afc5c631de7f5b652d0ce6fd44b3aacd14a1b) ) ROM_REGION( 0x80000, "upd", 0 ) /* 512k for the UPD7759C samples */ @@ -652,7 +676,7 @@ ROM_START( ringohja ) ROM_REGION( 0x0100, "proms", 0 ) ROM_LOAD( "63s141n.k14", 0x0000, 0x0100, CRC(61f6c8d1) SHA1(c70f1f8e434aaaffb89e30e2230a08374ef324ad) ) /* priority encoder (not used) */ - ROM_REGION( 0x80000, "konami", 0 ) /* 512k for 007232 samples */ + ROM_REGION( 0x80000, "k007232", 0 ) /* 512k for 007232 samples */ ROM_LOAD( "799b03.d4", 0x00000, 0x80000, CRC(f1cfd342) SHA1(079afc5c631de7f5b652d0ce6fd44b3aacd14a1b) ) ROM_REGION( 0x80000, "upd", 0 ) /* 512k for the UPD7759C samples */ @@ -680,7 +704,7 @@ ROM_START( devstors ) ROM_REGION( 0x0100, "proms", 0 ) ROM_LOAD( "63s141n.k14", 0x0000, 0x0100, CRC(d3620106) SHA1(528a0a34754902d0f262a9619c6105da6de99354) ) /* priority encoder (not used) */ - ROM_REGION( 0x80000, "konami", 0 ) /* 512k for 007232 samples */ + ROM_REGION( 0x80000, "k007232", 0 ) /* 512k for 007232 samples */ ROM_LOAD( "890f03.d4", 0x00000, 0x80000, CRC(19065031) SHA1(12c47fbe28f85fa2f901fe52601188a5e9633f22) ) ROM_END @@ -705,7 +729,7 @@ ROM_START( devstors2 ) ROM_REGION( 0x0100, "proms", 0 ) ROM_LOAD( "63s141n.k14", 0x0000, 0x0100, CRC(d3620106) SHA1(528a0a34754902d0f262a9619c6105da6de99354) ) /* priority encoder (not used) */ - ROM_REGION( 0x80000, "konami", 0 ) /* 512k for 007232 samples */ + ROM_REGION( 0x80000, "k007232", 0 ) /* 512k for 007232 samples */ ROM_LOAD( "890f03.d4", 0x00000, 0x80000, CRC(19065031) SHA1(12c47fbe28f85fa2f901fe52601188a5e9633f22) ) ROM_END @@ -730,7 +754,7 @@ ROM_START( devstors3 ) ROM_REGION( 0x0100, "proms", 0 ) ROM_LOAD( "63s141n.k14", 0x0000, 0x0100, CRC(d3620106) SHA1(528a0a34754902d0f262a9619c6105da6de99354) ) /* priority encoder (not used) */ - ROM_REGION( 0x80000, "konami", 0 ) /* 512k for 007232 samples */ + ROM_REGION( 0x80000, "k007232", 0 ) /* 512k for 007232 samples */ ROM_LOAD( "890f03.d4", 0x00000, 0x80000, CRC(19065031) SHA1(12c47fbe28f85fa2f901fe52601188a5e9633f22) ) ROM_END @@ -755,17 +779,17 @@ ROM_START( garuka ) ROM_REGION( 0x0100, "proms", 0 ) ROM_LOAD( "63s141n.k14", 0x0000, 0x0100, CRC(d3620106) SHA1(528a0a34754902d0f262a9619c6105da6de99354) ) /* priority encoder (not used) */ - ROM_REGION( 0x80000, "konami", 0 ) /* 512k for 007232 samples */ + ROM_REGION( 0x80000, "k007232", 0 ) /* 512k for 007232 samples */ ROM_LOAD( "890f03.d4", 0x00000, 0x80000, CRC(19065031) SHA1(12c47fbe28f85fa2f901fe52601188a5e9633f22) ) ROM_END -GAME( 1988, mainevt, 0, mainevt, mainevt, 0, ROT0, "Konami", "The Main Event (4 Players ver. Y)", 0 ) -GAME( 1988, mainevto, mainevt, mainevt, mainevt, 0, ROT0, "Konami", "The Main Event (4 Players ver. F)", 0 ) -GAME( 1988, mainevt2p,mainevt, mainevt, mainev2p, 0, ROT0, "Konami", "The Main Event (2 Players ver. X)", 0 ) -GAME( 1988, ringohja, mainevt, mainevt, mainev2p, 0, ROT0, "Konami", "Ring no Ohja (Japan 2 Players ver. N)", 0 ) -GAME( 1988, devstors, 0, devstors, devstors, 0, ROT90, "Konami", "Devastators (ver. Z)", 0 ) -GAME( 1988, devstors2,devstors, devstors, devstor2, 0, ROT90, "Konami", "Devastators (ver. X)", 0 ) -GAME( 1988, devstors3,devstors, devstors, devstors, 0, ROT90, "Konami", "Devastators (ver. V)", 0 ) -GAME( 1988, garuka, devstors, devstors, devstor2, 0, ROT90, "Konami", "Garuka (Japan ver. W)", 0 ) +GAME( 1988, mainevt, 0, mainevt, mainevt, 0, ROT0, "Konami", "The Main Event (4 Players ver. Y)", GAME_SUPPORTS_SAVE ) +GAME( 1988, mainevto, mainevt, mainevt, mainevt, 0, ROT0, "Konami", "The Main Event (4 Players ver. F)", GAME_SUPPORTS_SAVE ) +GAME( 1988, mainevt2p,mainevt, mainevt, mainev2p, 0, ROT0, "Konami", "The Main Event (2 Players ver. X)", GAME_SUPPORTS_SAVE ) +GAME( 1988, ringohja, mainevt, mainevt, mainev2p, 0, ROT0, "Konami", "Ring no Ohja (Japan 2 Players ver. N)", GAME_SUPPORTS_SAVE ) +GAME( 1988, devstors, 0, devstors, devstors, 0, ROT90, "Konami", "Devastators (ver. Z)", GAME_SUPPORTS_SAVE ) +GAME( 1988, devstors2,devstors, devstors, devstor2, 0, ROT90, "Konami", "Devastators (ver. X)", GAME_SUPPORTS_SAVE ) +GAME( 1988, devstors3,devstors, devstors, devstors, 0, ROT90, "Konami", "Devastators (ver. V)", GAME_SUPPORTS_SAVE ) +GAME( 1988, garuka, devstors, devstors, devstor2, 0, ROT90, "Konami", "Garuka (Japan ver. W)", GAME_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/moo.c b/src/mame/drivers/moo.c index 6ee8ccca8a4..b7769275f9e 100644 --- a/src/mame/drivers/moo.c +++ b/src/mame/drivers/moo.c @@ -1,6 +1,3 @@ -#define MOO_DEBUG 0 -#define MOO_DMADELAY (100) - /*************************************************************************** Wild West C.O.W.boys of Moo Mesa @@ -50,17 +47,10 @@ Bucky: #include "sound/k054539.h" #include "video/konicdev.h" #include "includes/konamipt.h" +#include "includes/moo.h" -VIDEO_START(moo); -VIDEO_UPDATE(moo); - -static int init_nosound_count, game_type; -static UINT16 *workram; -static UINT16 protram[16]; -static UINT16 cur_control2; - -extern void moo_tile_callback(running_machine *machine, int layer, int *code, int *color, int *flags); -extern void moo_sprite_callback(running_machine *machine, int *code, int *color, int *priority_mask); +#define MOO_DEBUG 0 +#define MOO_DMADELAY (100) static const eeprom_interface eeprom_intf = @@ -76,7 +66,8 @@ static const eeprom_interface eeprom_intf = static READ16_HANDLER( control2_r ) { - return cur_control2; + moo_state *state = (moo_state *)space->machine->driver_data; + return state->cur_control2; } static WRITE16_HANDLER( control2_w ) @@ -89,28 +80,27 @@ static WRITE16_HANDLER( control2_w ) /* bit 10 is watchdog */ /* bit 11 is enable irq 4 (unconfirmed) */ - const device_config *k053246 = devtag_get_device(space->machine, "k053246"); + moo_state *state = (moo_state *)space->machine->driver_data; + COMBINE_DATA(&state->cur_control2); - COMBINE_DATA(&cur_control2); - - input_port_write(space->machine, "EEPROMOUT", cur_control2, 0xff); + input_port_write(space->machine, "EEPROMOUT", state->cur_control2, 0xff); if (data & 0x100) - k053246_set_objcha_line(k053246, ASSERT_LINE); + k053246_set_objcha_line(state->k053246, ASSERT_LINE); else - k053246_set_objcha_line(k053246, CLEAR_LINE); + k053246_set_objcha_line(state->k053246, CLEAR_LINE); } -static void moo_objdma(running_machine *machine, int type) +static void moo_objdma( running_machine *machine, int type ) { + moo_state *state = (moo_state *)machine->driver_data; int num_inactive; UINT16 *src, *dst, zmask; - const device_config *k053246 = devtag_get_device(machine, "k053246"); - int counter = k053247_get_dy(k053246); + int counter = k053247_get_dy(state->k053246); - k053247_get_ram(k053246, &dst); - src = machine->generic.spriteram.u16; + k053247_get_ram(state->k053246, &dst); + src = state->spriteram; num_inactive = counter = 256; zmask = (type) ? 0x00ff : 0xffff; @@ -131,30 +121,31 @@ static void moo_objdma(running_machine *machine, int type) static TIMER_CALLBACK( dmaend_callback ) { - if (cur_control2 & 0x800) - cputag_set_input_line(machine, "maincpu", 4, HOLD_LINE); + moo_state *state = (moo_state *)machine->driver_data; + if (state->cur_control2 & 0x800) + cpu_set_input_line(state->maincpu, 4, HOLD_LINE); } -static INTERRUPT_GEN(moo_interrupt) +static INTERRUPT_GEN( moo_interrupt ) { - const device_config *k053246 = devtag_get_device(device->machine, "k053246"); - - if (k053246_is_irq_enabled(k053246)) + moo_state *state = (moo_state *)device->machine->driver_data; + if (k053246_is_irq_enabled(state->k053246)) { - moo_objdma(device->machine, game_type); + moo_objdma(device->machine, state->game_type); // schedule DMA end interrupt (delay shortened to catch up with V-blank) timer_set(device->machine, ATTOTIME_IN_USEC(MOO_DMADELAY), NULL, 0, dmaend_callback); } // trigger V-blank interrupt - if (cur_control2 & 0x20) + if (state->cur_control2 & 0x20) cpu_set_input_line(device, 5, HOLD_LINE); } -static INTERRUPT_GEN(moobl_interrupt) +static INTERRUPT_GEN( moobl_interrupt ) { - moo_objdma(device->machine, game_type); + moo_state *state = (moo_state *)device->machine->driver_data; + moo_objdma(device->machine, state->game_type); // schedule DMA end interrupt (delay shortened to catch up with V-blank) timer_set(device->machine, ATTOTIME_IN_USEC(MOO_DMADELAY), NULL, 0, dmaend_callback); @@ -165,7 +156,8 @@ static INTERRUPT_GEN(moobl_interrupt) static WRITE16_HANDLER( sound_cmd1_w ) { - if((data & 0x00ff0000) == 0) { + if ((data & 0x00ff0000) == 0) + { data &= 0xff; soundlatch_w(space, 0, data); } @@ -173,19 +165,19 @@ static WRITE16_HANDLER( sound_cmd1_w ) static WRITE16_HANDLER( sound_cmd2_w ) { - if((data & 0x00ff0000) == 0) { + if ((data & 0x00ff0000) == 0) soundlatch2_w(space, 0, data & 0xff); - } } static WRITE16_HANDLER( sound_irq_w ) { - cputag_set_input_line(space->machine, "soundcpu", 0, HOLD_LINE); + moo_state *state = (moo_state *)space->machine->driver_data; + cpu_set_input_line(state->audiocpu, 0, HOLD_LINE); } static READ16_HANDLER( sound_status_r ) { - return soundlatch3_r(space,0); + return soundlatch3_r(space, 0); } static WRITE8_HANDLER( sound_bankswitch_w ) @@ -200,28 +192,28 @@ static WRITE8_HANDLER( sound_bankswitch_w ) /* of RAM, but they put 0x10000 there. The CPU can access them all. */ static READ16_HANDLER( K053247_scattered_word_r ) { - const device_config *k053246 = devtag_get_device(device->machine, "k053246"); + moo_state *state = (moo_state *)space->machine->driver_data; if (offset & 0x0078) - return space->machine->generic.spriteram.u16[offset]; + return state->spriteram[offset]; else { offset = (offset & 0x0007) | ((offset & 0x7f80) >> 4); - return k053247_word_r(k053246, offset, mem_mask); + return k053247_word_r(state->k053246, offset, mem_mask); } } static WRITE16_HANDLER( K053247_scattered_word_w ) { - const device_config *k053246 = devtag_get_device(device->machine, "k053246"); + moo_state *state = (moo_state *)space->machine->driver_data; if (offset & 0x0078) - COMBINE_DATA(space->machine->generic.spriteram.u16+offset); + COMBINE_DATA(state->spriteram + offset); else { offset = (offset & 0x0007) | ((offset & 0x7f80) >> 4); - k053247_word_w(k053246, offset, data, mem_mask); + k053247_word_w(state->k053246, offset, data, mem_mask); } } @@ -230,22 +222,23 @@ static WRITE16_HANDLER( K053247_scattered_word_w ) static WRITE16_HANDLER( moo_prot_w ) { + moo_state *state = (moo_state *)space->machine->driver_data; UINT32 src1, src2, dst, length, a, b, res; - COMBINE_DATA(&protram[offset]); + COMBINE_DATA(&state->protram[offset]); if (offset == 0xc) // trigger operation { - src1 = (protram[1]&0xff)<<16 | protram[0]; - src2 = (protram[3]&0xff)<<16 | protram[2]; - dst = (protram[5]&0xff)<<16 | protram[4]; - length = protram[0xf]; + src1 = (state->protram[1] & 0xff) << 16 | state->protram[0]; + src2 = (state->protram[3] & 0xff) << 16 | state->protram[2]; + dst = (state->protram[5] & 0xff) << 16 | state->protram[4]; + length = state->protram[0xf]; while (length) { a = memory_read_word(space, src1); b = memory_read_word(space, src2); - res = a+2*b; + res = a + 2 * b; memory_write_word(space, dst, res); @@ -262,7 +255,7 @@ static WRITE16_DEVICE_HANDLER( moobl_oki_bank_w ) { logerror("%x to OKI bank\n", data); - okim6295_set_bank_base(device, (data & 0x0f)* 0x40000); + okim6295_set_bank_base(device, (data & 0x0f) * 0x40000); } static ADDRESS_MAP_START( moo_map, ADDRESS_SPACE_PROGRAM, 16 ) @@ -287,8 +280,8 @@ static ADDRESS_MAP_START( moo_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x0dc002, 0x0dc003) AM_READ_PORT("IN1") AM_RANGE(0x0de000, 0x0de001) AM_READWRITE(control2_r, control2_w) AM_RANGE(0x100000, 0x17ffff) AM_ROM - AM_RANGE(0x180000, 0x18ffff) AM_RAM AM_BASE(&workram) /* Work RAM */ - AM_RANGE(0x190000, 0x19ffff) AM_RAM AM_BASE_GENERIC(spriteram) /* Sprite RAM */ + AM_RANGE(0x180000, 0x18ffff) AM_RAM AM_BASE_MEMBER(moo_state, workram) /* Work RAM */ + AM_RANGE(0x190000, 0x19ffff) AM_RAM AM_BASE_MEMBER(moo_state, spriteram) /* Sprite RAM */ AM_RANGE(0x1a0000, 0x1a1fff) AM_DEVREADWRITE("k056832", k056832_ram_word_r, k056832_ram_word_w) /* Graphic planes */ AM_RANGE(0x1a2000, 0x1a3fff) AM_DEVREADWRITE("k056832", k056832_ram_word_r, k056832_ram_word_w) /* Graphic planes mirror */ AM_RANGE(0x1b0000, 0x1b1fff) AM_DEVREAD("k056832", k056832_rom_word_r) /* Passthrough to tile roms */ @@ -321,8 +314,8 @@ static ADDRESS_MAP_START( moobl_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x0dc002, 0x0dc003) AM_READ_PORT("IN1") AM_RANGE(0x0de000, 0x0de001) AM_READWRITE(control2_r, control2_w) AM_RANGE(0x100000, 0x17ffff) AM_ROM - AM_RANGE(0x180000, 0x18ffff) AM_RAM AM_BASE(&workram) /* Work RAM */ - AM_RANGE(0x190000, 0x19ffff) AM_RAM AM_BASE_GENERIC(spriteram) /* Sprite RAM */ + AM_RANGE(0x180000, 0x18ffff) AM_RAM AM_BASE_MEMBER(moo_state, workram) /* Work RAM */ + AM_RANGE(0x190000, 0x19ffff) AM_RAM AM_BASE_MEMBER(moo_state, spriteram) /* Sprite RAM */ AM_RANGE(0x1a0000, 0x1a1fff) AM_DEVREADWRITE("k056832", k056832_ram_word_r, k056832_ram_word_w) /* Graphic planes */ AM_RANGE(0x1a2000, 0x1a3fff) AM_DEVREADWRITE("k056832", k056832_ram_word_r, k056832_ram_word_w) /* Graphic planes mirror */ AM_RANGE(0x1b0000, 0x1b1fff) AM_DEVREAD("k056832", k056832_rom_word_r) /* Passthrough to tile roms */ @@ -332,7 +325,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( bucky_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x000000, 0x07ffff) AM_ROM AM_RANGE(0x080000, 0x08ffff) AM_RAM - AM_RANGE(0x090000, 0x09ffff) AM_RAM AM_BASE_GENERIC(spriteram) /* Sprite RAM */ + AM_RANGE(0x090000, 0x09ffff) AM_RAM AM_BASE_MEMBER(moo_state, spriteram) /* Sprite RAM */ AM_RANGE(0x0a0000, 0x0affff) AM_RAM /* extra sprite RAM? */ AM_RANGE(0x0c0000, 0x0c003f) AM_DEVWRITE("k056832", k056832_word_w) AM_RANGE(0x0c2000, 0x0c2007) AM_DEVWRITE("k053246", k053246_word_w) @@ -373,7 +366,7 @@ static ADDRESS_MAP_START( sound_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0x0000, 0x7fff) AM_ROM AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank1") AM_RANGE(0xc000, 0xdfff) AM_RAM - AM_RANGE(0xe000, 0xe22f) AM_DEVREADWRITE("konami", k054539_r,k054539_w) + AM_RANGE(0xe000, 0xe22f) AM_DEVREADWRITE("k054539", k054539_r,k054539_w) AM_RANGE(0xec00, 0xec01) AM_DEVREADWRITE("ymsnd", ym2151_r,ym2151_w) AM_RANGE(0xf000, 0xf000) AM_WRITE(soundlatch3_w) AM_RANGE(0xf002, 0xf002) AM_READ(soundlatch_r) @@ -438,15 +431,42 @@ INPUT_PORTS_END static MACHINE_START( moo ) { - state_save_register_global(machine, cur_control2); - state_save_register_global_array(machine, protram); + moo_state *state = (moo_state *)machine->driver_data; + + state->maincpu = devtag_get_device(machine, "maincpu"); + state->audiocpu = devtag_get_device(machine, "soundcpu"); + state->k054539 = devtag_get_device(machine, "k054539"); + state->k053246 = devtag_get_device(machine, "k053246"); + state->k053251 = devtag_get_device(machine, "k053251"); + state->k056832 = devtag_get_device(machine, "k056832"); + state->k054338 = devtag_get_device(machine, "k054338"); + + state_save_register_global(machine, state->cur_control2); + state_save_register_global(machine, state->alpha_enabled); + state_save_register_global(machine, state->sprite_colorbase); + state_save_register_global_array(machine, state->layer_colorbase); + state_save_register_global_array(machine, state->layerpri); + state_save_register_global_array(machine, state->protram); } static MACHINE_RESET( moo ) { - init_nosound_count = 0; -} + moo_state *state = (moo_state *)machine->driver_data; + int i; + + for (i = 0; i < 16; i++) + state->protram[i] = 0; + + for (i = 0; i < 4; i++) + state->layer_colorbase[i] = 0; + for (i = 0; i < 3; i++) + state->layerpri[i] = 0; + + state->cur_control2 = 0; + state->alpha_enabled = 0; + state->sprite_colorbase = 0; +} static const k056832_interface moo_k056832_intf = { @@ -487,6 +507,9 @@ static const k054338_interface moo_k054338_intf = static MACHINE_DRIVER_START( moo ) + /* driver data */ + MDRV_DRIVER_DATA(moo_state) + /* basic machine hardware */ MDRV_CPU_ADD("maincpu", M68000, 16000000) MDRV_CPU_PROGRAM_MAP(moo_map) @@ -527,13 +550,16 @@ static MACHINE_DRIVER_START( moo ) MDRV_SOUND_ROUTE(0, "lspeaker", 0.50) MDRV_SOUND_ROUTE(1, "rspeaker", 0.50) - MDRV_SOUND_ADD("konami", K054539, 48000) + MDRV_SOUND_ADD("k054539", K054539, 48000) MDRV_SOUND_ROUTE(0, "lspeaker", 0.75) MDRV_SOUND_ROUTE(1, "rspeaker", 0.75) MACHINE_DRIVER_END static MACHINE_DRIVER_START( moobl ) + /* driver data */ + MDRV_DRIVER_DATA(moo_state) + /* basic machine hardware */ MDRV_CPU_ADD("maincpu", M68000, 16100000) MDRV_CPU_PROGRAM_MAP(moobl_map) @@ -617,7 +643,7 @@ ROM_START( moo ) /* Version EA - Euro Ver A */ ROM_LOAD( "151a12", 0x400000, 0x200000, CRC(4978555f) SHA1(d9871f21d0c8a512b408e137e2e80e9392c2bf6f) ) ROM_LOAD( "151a13", 0x600000, 0x200000, CRC(4771f525) SHA1(218d86b6230919b5db0304dac00513eb6b27ba9a) ) - ROM_REGION( 0x200000, "konami", 0 ) + ROM_REGION( 0x200000, "k054539", 0 ) /* K054539 samples */ ROM_LOAD( "151a08", 0x000000, 0x200000, CRC(962251d7) SHA1(32dccf515d2ca8eeffb45cada3dcc60089991b77) ) ROM_END @@ -649,7 +675,7 @@ ROM_START( mooua ) /* Version UA - USA Ver A */ ROM_LOAD( "151a12", 0x400000, 0x200000, CRC(4978555f) SHA1(d9871f21d0c8a512b408e137e2e80e9392c2bf6f) ) ROM_LOAD( "151a13", 0x600000, 0x200000, CRC(4771f525) SHA1(218d86b6230919b5db0304dac00513eb6b27ba9a) ) - ROM_REGION( 0x200000, "konami", 0 ) + ROM_REGION( 0x200000, "k054539", 0 ) /* K054539 samples */ ROM_LOAD( "151a08", 0x000000, 0x200000, CRC(962251d7) SHA1(32dccf515d2ca8eeffb45cada3dcc60089991b77) ) ROM_END @@ -681,7 +707,7 @@ ROM_START( mooaa ) /* Version AA - Asia Ver A */ ROM_LOAD( "151a12", 0x400000, 0x200000, CRC(4978555f) SHA1(d9871f21d0c8a512b408e137e2e80e9392c2bf6f) ) ROM_LOAD( "151a13", 0x600000, 0x200000, CRC(4771f525) SHA1(218d86b6230919b5db0304dac00513eb6b27ba9a) ) - ROM_REGION( 0x200000, "konami", 0 ) + ROM_REGION( 0x200000, "k054539", 0 ) /* K054539 samples */ ROM_LOAD( "151a08", 0x000000, 0x200000, CRC(962251d7) SHA1(32dccf515d2ca8eeffb45cada3dcc60089991b77) ) ROM_END @@ -713,7 +739,7 @@ ROM_START( bucky ) ROM_LOAD( "173a12.b10", 0x400000, 0x200000, CRC(0fc2ad24) SHA1(6eda1043ee1266b8ba938a03a90bc7787210a936) ) ROM_LOAD( "173a13.a10", 0x600000, 0x200000, CRC(4cf85439) SHA1(8c298bf0e659a830a1830a1180f4ce71215ade45) ) - ROM_REGION( 0x400000, "konami", 0 ) + ROM_REGION( 0x400000, "k054539", 0 ) /* K054539 samples */ ROM_LOAD("173a08.b6", 0x000000, 0x200000, CRC(dcdded95) SHA1(8eeb546a0b60a35a6dce36c5ee872e6c93c577c9) ) ROM_LOAD("173a09.a6", 0x200000, 0x200000, CRC(c93697c4) SHA1(0528a604868267a30d281b822c187df118566691) ) @@ -746,7 +772,7 @@ ROM_START( buckyua ) ROM_LOAD( "173a12.b10", 0x400000, 0x200000, CRC(0fc2ad24) SHA1(6eda1043ee1266b8ba938a03a90bc7787210a936) ) ROM_LOAD( "173a13.a10", 0x600000, 0x200000, CRC(4cf85439) SHA1(8c298bf0e659a830a1830a1180f4ce71215ade45) ) - ROM_REGION( 0x400000, "konami", 0 ) + ROM_REGION( 0x400000, "k054539", 0 ) /* K054539 samples */ ROM_LOAD("173a08.b6", 0x000000, 0x200000, CRC(dcdded95) SHA1(8eeb546a0b60a35a6dce36c5ee872e6c93c577c9) ) ROM_LOAD("173a09.a6", 0x200000, 0x200000, CRC(c93697c4) SHA1(0528a604868267a30d281b822c187df118566691) ) @@ -779,18 +805,13 @@ ROM_START( buckyaa ) ROM_LOAD( "173a12.b10", 0x400000, 0x200000, CRC(0fc2ad24) SHA1(6eda1043ee1266b8ba938a03a90bc7787210a936) ) ROM_LOAD( "173a13.a10", 0x600000, 0x200000, CRC(4cf85439) SHA1(8c298bf0e659a830a1830a1180f4ce71215ade45) ) - ROM_REGION( 0x400000, "konami", 0 ) + ROM_REGION( 0x400000, "k054539", 0 ) /* K054539 samples */ ROM_LOAD("173a08.b6", 0x000000, 0x200000, CRC(dcdded95) SHA1(8eeb546a0b60a35a6dce36c5ee872e6c93c577c9) ) ROM_LOAD("173a09.a6", 0x200000, 0x200000, CRC(c93697c4) SHA1(0528a604868267a30d281b822c187df118566691) ) ROM_END -static DRIVER_INIT( moo ) -{ - game_type = (!strcmp(machine->gamedrv->name, "bucky") || !strcmp(machine->gamedrv->name, "buckyua")); -} - ROM_START( moobl ) ROM_REGION( 0x180000, "maincpu", 0 ) ROM_LOAD16_WORD_SWAP( "moo03.rom", 0x000000, 0x80000, CRC(fed6a1cb) SHA1(be58e266973930d643b5e15dcc974a82e1a3ae35) ) @@ -842,10 +863,17 @@ ROM_START( moobl ) ROM_CONTINUE( 0x300000+0x30000, 0x010000)//bank c hi ROM_END -GAME( 1992, moo, 0, moo, moo, moo, ROT0, "Konami", "Wild West C.O.W.-Boys of Moo Mesa (ver EA)", GAME_IMPERFECT_GRAPHICS) -GAME( 1992, mooua, moo, moo, moo, moo, ROT0, "Konami", "Wild West C.O.W.-Boys of Moo Mesa (ver UA)", GAME_IMPERFECT_GRAPHICS) -GAME( 1992, mooaa, moo, moo, moo, moo, ROT0, "Konami", "Wild West C.O.W.-Boys of Moo Mesa (ver AA)", GAME_IMPERFECT_GRAPHICS) -GAME( 1992, moobl, moo, moobl, moo, moo, ROT0, "bootleg", "Wild West C.O.W.-Boys of Moo Mesa (bootleg ver AA)", GAME_NOT_WORKING) -GAME( 1992, bucky, 0, bucky, bucky, moo, ROT0, "Konami", "Bucky O'Hare (ver EA)", 0) -GAME( 1992, buckyua, bucky, bucky, bucky, moo, ROT0, "Konami", "Bucky O'Hare (ver UA)", 0) -GAME( 1992, buckyaa, bucky, bucky, bucky, moo, ROT0, "Konami", "Bucky O'Hare (ver AA)", 0) +static DRIVER_INIT( moo ) +{ + moo_state *state = (moo_state *)machine->driver_data; + state->game_type = (!strcmp(machine->gamedrv->name, "bucky") || !strcmp(machine->gamedrv->name, "buckyua")); +} + + +GAME( 1992, moo, 0, moo, moo, moo, ROT0, "Konami", "Wild West C.O.W.-Boys of Moo Mesa (ver EA)", GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE ) +GAME( 1992, mooua, moo, moo, moo, moo, ROT0, "Konami", "Wild West C.O.W.-Boys of Moo Mesa (ver UA)", GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE ) +GAME( 1992, mooaa, moo, moo, moo, moo, ROT0, "Konami", "Wild West C.O.W.-Boys of Moo Mesa (ver AA)", GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE ) +GAME( 1992, moobl, moo, moobl, moo, moo, ROT0, "bootleg", "Wild West C.O.W.-Boys of Moo Mesa (bootleg ver AA)", GAME_NOT_WORKING | GAME_SUPPORTS_SAVE ) +GAME( 1992, bucky, 0, bucky, bucky, moo, ROT0, "Konami", "Bucky O'Hare (ver EA)", GAME_SUPPORTS_SAVE ) +GAME( 1992, buckyua, bucky, bucky, bucky, moo, ROT0, "Konami", "Bucky O'Hare (ver UA)", GAME_SUPPORTS_SAVE ) +GAME( 1992, buckyaa, bucky, bucky, bucky, moo, ROT0, "Konami", "Bucky O'Hare (ver AA)", GAME_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/overdriv.c b/src/mame/drivers/overdriv.c index 4e96b86b5ec..febd64828d9 100644 --- a/src/mame/drivers/overdriv.c +++ b/src/mame/drivers/overdriv.c @@ -1,20 +1,20 @@ /*************************************************************************** -Over Drive (GX789) (c) 1990 Konami - -driver by Nicola Salmoria - -Notes: -- Missing road (two unemulated K053250) -- Visible area and relative placement of sprites and tiles is most likely wrong. -- Test mode doesn't work well with 3 IRQ5 per frame, the ROM check doesn't work - and the coin A setting isn't shown. It's OK with 1 IRQ5 per frame. -- Some flickering sprites, this might be an interrupt/timing issue -- The screen is cluttered with sprites which aren't supposed to be visible, - increasing the coordinate mask in K053247_sprites_draw() from 0x3ff to 0xfff - fixes this but breaks other games (e.g. Vendetta). -- The "Continue?" sprites are not visible until you press start -- priorities + Over Drive (GX789) (c) 1990 Konami + + driver by Nicola Salmoria + + Notes: + - Missing road (two unemulated K053250) + - Visible area and relative placement of sprites and tiles is most likely wrong. + - Test mode doesn't work well with 3 IRQ5 per frame, the ROM check doesn't work + and the coin A setting isn't shown. It's OK with 1 IRQ5 per frame. + - Some flickering sprites, this might be an interrupt/timing issue + - The screen is cluttered with sprites which aren't supposed to be visible, + increasing the coordinate mask in K053247_sprites_draw() from 0x3ff to 0xfff + fixes this but breaks other games (e.g. Vendetta). + - The "Continue?" sprites are not visible until you press start + - priorities ***************************************************************************/ @@ -26,14 +26,9 @@ Notes: #include "cpu/m6809/m6809.h" #include "sound/2151intf.h" #include "sound/k053260.h" -#include "overdriv.lh" - -VIDEO_START( overdriv ); -VIDEO_UPDATE( overdriv ); +#include "includes/overdriv.h" -extern void overdriv_sprite_callback(running_machine *machine, int *code,int *color,int *priority_mask); -extern void overdriv_zoom_callback_0(running_machine *machine, int *code,int *color,int *flags); -extern void overdriv_zoom_callback_1(running_machine *machine, int *code,int *color,int *flags); +#include "overdriv.lh" /*************************************************************************** @@ -88,25 +83,21 @@ static INTERRUPT_GEN( cpuA_interrupt ) static INTERRUPT_GEN( cpuB_interrupt ) { - const device_config *k053246 = devtag_get_device(device->machine, "k053246"); + overdriv_state *state = (overdriv_state *)device->machine->driver_data; - if (k053246_is_irq_enabled(k053246)) + if (k053246_is_irq_enabled(state->k053246)) cpu_set_input_line(device, 4, HOLD_LINE); } -static MACHINE_RESET( overdriv ) -{ - /* start with cpu B halted */ - cputag_set_input_line(machine, "sub", INPUT_LINE_RESET, ASSERT_LINE); -} - static WRITE16_HANDLER( cpuA_ctrl_w ) { + overdriv_state *state = (overdriv_state *)space->machine->driver_data; + if (ACCESSING_BITS_0_7) { /* bit 0 probably enables the second 68000 */ - cputag_set_input_line(space->machine, "sub", INPUT_LINE_RESET, (data & 0x01) ? CLEAR_LINE : ASSERT_LINE); + cpu_set_input_line(state->subcpu, INPUT_LINE_RESET, (data & 0x01) ? CLEAR_LINE : ASSERT_LINE); /* bit 1 is clear during service mode - function unknown */ @@ -118,23 +109,21 @@ static WRITE16_HANDLER( cpuA_ctrl_w ) } } - -static UINT16 cpuB_ctrl; - static READ16_HANDLER( cpuB_ctrl_r ) { - return cpuB_ctrl; + overdriv_state *state = (overdriv_state *)space->machine->driver_data; + return state->cpuB_ctrl; } static WRITE16_HANDLER( cpuB_ctrl_w ) { - const device_config *k053246 = devtag_get_device(space->machine, "k053246"); - COMBINE_DATA(&cpuB_ctrl); + overdriv_state *state = (overdriv_state *)space->machine->driver_data; + COMBINE_DATA(&state->cpuB_ctrl); if (ACCESSING_BITS_0_7) { /* bit 0 = enable sprite ROM reading */ - k053246_set_objcha_line(k053246, (data & 0x01) ? ASSERT_LINE : CLEAR_LINE); + k053246_set_objcha_line(state->k053246, (data & 0x01) ? ASSERT_LINE : CLEAR_LINE); /* bit 1 used but unknown (irq enable?) */ @@ -150,22 +139,23 @@ static READ8_DEVICE_HANDLER( overdriv_sound_r ) static WRITE16_HANDLER( overdriv_soundirq_w ) { - cputag_set_input_line(space->machine, "audiocpu", M6809_IRQ_LINE, HOLD_LINE); + overdriv_state *state = (overdriv_state *)space->machine->driver_data; + cpu_set_input_line(state->audiocpu, M6809_IRQ_LINE, HOLD_LINE); } static WRITE16_HANDLER( overdriv_cpuB_irq5_w ) { - cputag_set_input_line(space->machine, "sub", 5, HOLD_LINE); + overdriv_state *state = (overdriv_state *)space->machine->driver_data; + cpu_set_input_line(state->subcpu, 5, HOLD_LINE); } static WRITE16_HANDLER( overdriv_cpuB_irq6_w ) { - cputag_set_input_line(space->machine, "sub", 6, HOLD_LINE); + overdriv_state *state = (overdriv_state *)space->machine->driver_data; + cpu_set_input_line(state->subcpu, 6, HOLD_LINE); } - - static ADDRESS_MAP_START( overdriv_master_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x000000, 0x03ffff) AM_ROM AM_RANGE(0x040000, 0x043fff) AM_RAM /* work RAM */ @@ -179,8 +169,8 @@ static ADDRESS_MAP_START( overdriv_master_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x1c0000, 0x1c001f) AM_DEVWRITE8("k051316_1", k051316_ctrl_w, 0xff00) AM_RANGE(0x1c8000, 0x1c801f) AM_DEVWRITE8("k051316_2", k051316_ctrl_w, 0xff00) AM_RANGE(0x1d0000, 0x1d001f) AM_DEVWRITE("k053251", k053251_msb_w) - AM_RANGE(0x1d8000, 0x1d8003) AM_DEVREADWRITE8("konami1", overdriv_sound_r, k053260_w, 0x00ff) /* K053260 */ - AM_RANGE(0x1e0000, 0x1e0003) AM_DEVREADWRITE8("konami2", overdriv_sound_r, k053260_w, 0x00ff) /* K053260 */ + AM_RANGE(0x1d8000, 0x1d8003) AM_DEVREADWRITE8("k053260_1", overdriv_sound_r, k053260_w, 0x00ff) /* K053260 */ + AM_RANGE(0x1e0000, 0x1e0003) AM_DEVREADWRITE8("k053260_2", overdriv_sound_r, k053260_w, 0x00ff) /* K053260 */ AM_RANGE(0x1e8000, 0x1e8001) AM_WRITE(overdriv_soundirq_w) AM_RANGE(0x1f0000, 0x1f0001) AM_WRITE(cpuA_ctrl_w) /* halt cpu B, coin counter, start lamp, other? */ AM_RANGE(0x1f8000, 0x1f8001) AM_WRITE(eeprom_w) @@ -201,7 +191,7 @@ static ADDRESS_MAP_START( overdriv_slave_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x108000, 0x10800f) AM_NOP // K053250 #1 AM_RANGE(0x118000, 0x118fff) AM_DEVREADWRITE("k053246", k053247_word_r, k053247_word_w) AM_RANGE(0x120000, 0x120001) AM_DEVREAD("k053246", k053246_word_r) - AM_RANGE(0x128000, 0x128001) AM_READWRITE(cpuB_ctrl_r,cpuB_ctrl_w) /* enable K053247 ROM reading, plus something else */ + AM_RANGE(0x128000, 0x128001) AM_READWRITE(cpuB_ctrl_r, cpuB_ctrl_w) /* enable K053247 ROM reading, plus something else */ AM_RANGE(0x130000, 0x130007) AM_DEVWRITE("k053246", k053246_word_w) AM_RANGE(0x200000, 0x203fff) AM_RAM AM_SHARE("share1") AM_RANGE(0x208000, 0x20bfff) AM_RAM @@ -211,8 +201,8 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( overdriv_sound_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0x0200, 0x0201) AM_DEVREADWRITE("ymsnd", ym2151_r,ym2151_w) - AM_RANGE(0x0400, 0x042f) AM_DEVREADWRITE("konami1", k053260_r,k053260_w) - AM_RANGE(0x0600, 0x062f) AM_DEVREADWRITE("konami2", k053260_r,k053260_w) + AM_RANGE(0x0400, 0x042f) AM_DEVREADWRITE("k053260_1", k053260_r, k053260_w) + AM_RANGE(0x0600, 0x062f) AM_DEVREADWRITE("k053260_2", k053260_r, k053260_w) AM_RANGE(0x0800, 0x0fff) AM_RAM AM_RANGE(0x1000, 0xffff) AM_ROM ADDRESS_MAP_END @@ -304,8 +294,46 @@ static const k051316_interface overdriv_k051316_intf_2 = }; +static MACHINE_START( overdriv ) +{ + overdriv_state *state = (overdriv_state *)machine->driver_data; + + state->maincpu = devtag_get_device(machine, "maincpu"); + state->audiocpu = devtag_get_device(machine, "audiocpu"); + state->subcpu = devtag_get_device(machine, "sub"); + state->k051316_1 = devtag_get_device(machine, "k051316_1"); + state->k051316_2 = devtag_get_device(machine, "k051316_2"); + state->k053260_1 = devtag_get_device(machine, "k053260_1"); + state->k053260_2 = devtag_get_device(machine, "k053260_2"); + state->k053246 = devtag_get_device(machine, "k053246"); + state->k053251 = devtag_get_device(machine, "k053251"); + + state_save_register_global(machine, state->cpuB_ctrl); + state_save_register_global(machine, state->sprite_colorbase); + state_save_register_global_array(machine, state->zoom_colorbase); + state_save_register_global_array(machine, state->road_colorbase); +} + +static MACHINE_RESET( overdriv ) +{ + overdriv_state *state = (overdriv_state *)machine->driver_data; + + state->cpuB_ctrl = 0; + state->sprite_colorbase = 0; + state->zoom_colorbase[0] = 0; + state->zoom_colorbase[1] = 0; + state->road_colorbase[0] = 0; + state->road_colorbase[1] = 0; + + /* start with cpu B halted */ + cputag_set_input_line(machine, "sub", INPUT_LINE_RESET, ASSERT_LINE); +} + static MACHINE_DRIVER_START( overdriv ) + /* driver data */ + MDRV_DRIVER_DATA(overdriv_state) + /* basic machine hardware */ MDRV_CPU_ADD("maincpu", M68000,24000000/2) /* 12 MHz */ MDRV_CPU_PROGRAM_MAP(overdriv_master_map) @@ -323,6 +351,7 @@ static MACHINE_DRIVER_START( overdriv ) MDRV_QUANTUM_TIME(HZ(12000)) + MDRV_MACHINE_START(overdriv) MDRV_MACHINE_RESET(overdriv) MDRV_EEPROM_ADD("eeprom", eeprom_intf) @@ -341,7 +370,6 @@ static MACHINE_DRIVER_START( overdriv ) // MDRV_GFXDECODE(overdriv) MDRV_PALETTE_LENGTH(2048) - MDRV_VIDEO_START(overdriv) MDRV_VIDEO_UPDATE(overdriv) MDRV_K053246_ADD("k053246", overdriv_k053246_intf) @@ -356,12 +384,12 @@ static MACHINE_DRIVER_START( overdriv ) MDRV_SOUND_ROUTE(0, "lspeaker", 0.5) MDRV_SOUND_ROUTE(1, "rspeaker", 0.5) - MDRV_SOUND_ADD("konami1", K053260, 3579545) + MDRV_SOUND_ADD("k053260_1", K053260, 3579545) MDRV_SOUND_CONFIG(k053260_config) MDRV_SOUND_ROUTE(0, "lspeaker", 0.35) MDRV_SOUND_ROUTE(1, "rspeaker", 0.35) - MDRV_SOUND_ADD("konami2", K053260, 3579545) + MDRV_SOUND_ADD("k053260_2", K053260, 3579545) MDRV_SOUND_CONFIG(k053260_config) MDRV_SOUND_ROUTE(0, "lspeaker", 0.35) MDRV_SOUND_ROUTE(1, "rspeaker", 0.35) @@ -414,4 +442,4 @@ ROM_START( overdriv ) ROM_END -GAMEL( 1990, overdriv, 0, overdriv, overdriv, 0, ROT90, "Konami", "Over Drive", GAME_IMPERFECT_GRAPHICS | GAME_NOT_WORKING, layout_overdriv ) +GAMEL( 1990, overdriv, 0, overdriv, overdriv, 0, ROT90, "Konami", "Over Drive", GAME_IMPERFECT_GRAPHICS | GAME_NOT_WORKING | GAME_SUPPORTS_SAVE, layout_overdriv ) diff --git a/src/mame/drivers/parodius.c b/src/mame/drivers/parodius.c index a00c2c252cc..c3ad01b141a 100644 --- a/src/mame/drivers/parodius.c +++ b/src/mame/drivers/parodius.c @@ -1,8 +1,8 @@ /*************************************************************************** -Parodius (Konami GX955) (c) 1990 Konami + Parodius (Konami GX955) (c) 1990 Konami -driver by Nicola Salmoria + driver by Nicola Salmoria ***************************************************************************/ @@ -13,115 +13,116 @@ driver by Nicola Salmoria #include "sound/2151intf.h" #include "sound/k053260.h" #include "includes/konamipt.h" +#include "includes/parodius.h" /* prototypes */ -static MACHINE_RESET( parodius ); static KONAMI_SETLINES_CALLBACK( parodius_banking ); -VIDEO_UPDATE( parodius ); -extern void parodius_tile_callback(running_machine *machine, int layer,int bank,int *code,int *color,int *flags,int *priority); -extern void parodius_sprite_callback(running_machine *machine, int *code,int *color,int *priority_mask); - -static int videobank; -static UINT8 *ram; static INTERRUPT_GEN( parodius_interrupt ) { - const device_config *k052109 = devtag_get_device(device->machine, "k052109"); - if (k052109_is_irq_enabled(k052109)) + parodius_state *state = (parodius_state *)device->machine->driver_data; + if (k052109_is_irq_enabled(state->k052109)) cpu_set_input_line(device, 0, HOLD_LINE); } static READ8_HANDLER( bankedram_r ) { - if (videobank & 0x01) + parodius_state *state = (parodius_state *)space->machine->driver_data; + + if (state->videobank & 0x01) { - if (videobank & 0x04) + if (state->videobank & 0x04) return space->machine->generic.paletteram.u8[offset + 0x0800]; else return space->machine->generic.paletteram.u8[offset]; } else - return ram[offset]; + return state->ram[offset]; } static WRITE8_HANDLER( bankedram_w ) { - if (videobank & 0x01) + parodius_state *state = (parodius_state *)space->machine->driver_data; + + if (state->videobank & 0x01) { - if (videobank & 0x04) - paletteram_xBBBBBGGGGGRRRRR_be_w(space,offset + 0x0800,data); + if (state->videobank & 0x04) + paletteram_xBBBBBGGGGGRRRRR_be_w(space, offset + 0x0800, data); else - paletteram_xBBBBBGGGGGRRRRR_be_w(space,offset,data); + paletteram_xBBBBBGGGGGRRRRR_be_w(space, offset, data); } else - ram[offset] = data; + state->ram[offset] = data; } static READ8_HANDLER( parodius_052109_053245_r ) { - const device_config *k053245 = devtag_get_device(space->machine, "k053245"); - const device_config *k052109 = devtag_get_device(space->machine, "k052109"); + parodius_state *state = (parodius_state *)space->machine->driver_data; - if (videobank & 0x02) - return k053245_r(k053245, offset); + if (state->videobank & 0x02) + return k053245_r(state->k053245, offset); else - return k052109_r(k052109, offset); + return k052109_r(state->k052109, offset); } static WRITE8_HANDLER( parodius_052109_053245_w ) { - const device_config *k053245 = devtag_get_device(space->machine, "k053245"); - const device_config *k052109 = devtag_get_device(space->machine, "k052109"); + parodius_state *state = (parodius_state *)space->machine->driver_data; - if (videobank & 0x02) - k053245_w(k053245, offset, data); + if (state->videobank & 0x02) + k053245_w(state->k053245, offset, data); else - k052109_w(k052109, offset, data); + k052109_w(state->k052109, offset, data); } static WRITE8_HANDLER( parodius_videobank_w ) { - if (videobank & 0xf8) logerror("%04x: videobank = %02x\n",cpu_get_pc(space->cpu),data); + parodius_state *state = (parodius_state *)space->machine->driver_data; + + if (state->videobank & 0xf8) + logerror("%04x: videobank = %02x\n",cpu_get_pc(space->cpu),data); /* bit 0 = select palette or work RAM at 0000-07ff */ /* bit 1 = select 052109 or 053245 at 2000-27ff */ /* bit 2 = select palette bank 0 or 1 */ - videobank = data; + state->videobank = data; } static WRITE8_HANDLER( parodius_3fc0_w ) { - const device_config *k052109 = devtag_get_device(space->machine, "k052109"); + parodius_state *state = (parodius_state *)space->machine->driver_data; - if ((data & 0xf4) != 0x10) logerror("%04x: 3fc0 = %02x\n",cpu_get_pc(space->cpu),data); + if ((data & 0xf4) != 0x10) + logerror("%04x: 3fc0 = %02x\n",cpu_get_pc(space->cpu),data); /* bit 0/1 = coin counters */ - coin_counter_w(space->machine, 0,data & 0x01); - coin_counter_w(space->machine, 1,data & 0x02); + coin_counter_w(space->machine, 0, data & 0x01); + coin_counter_w(space->machine, 1, data & 0x02); /* bit 3 = enable char ROM reading through the video RAM */ - k052109_set_rmrd_line(k052109, (data & 0x08) ? ASSERT_LINE : CLEAR_LINE); + k052109_set_rmrd_line(state->k052109, (data & 0x08) ? ASSERT_LINE : CLEAR_LINE); /* other bits unknown */ } static READ8_DEVICE_HANDLER( parodius_sound_r ) { - return k053260_r(device,2 + offset); + return k053260_r(device, 2 + offset); } static WRITE8_HANDLER( parodius_sh_irqtrigger_w ) { - cputag_set_input_line_and_vector(space->machine, "audiocpu", 0, HOLD_LINE, 0xff); + parodius_state *state = (parodius_state *)space->machine->driver_data; + cpu_set_input_line_and_vector(state->audiocpu, 0, HOLD_LINE, 0xff); } #if 0 -static int nmi_enabled; -static void sound_nmi_callback( int param ) +static void sound_nmi_callback( running_machine *machine, int param ) { - cputag_set_input_line(machine, "audiocpu", INPUT_LINE_NMI, ( nmi_enabled ) ? CLEAR_LINE : ASSERT_LINE ); + parodius_state *state = (parodius_state *)machine->driver_data; + cpu_set_input_line(state->audiocpu, INPUT_LINE_NMI, ( state->nmi_enabled ) ? CLEAR_LINE : ASSERT_LINE ); nmi_enabled = 0; } @@ -129,20 +130,22 @@ static void sound_nmi_callback( int param ) static TIMER_CALLBACK( nmi_callback ) { - cputag_set_input_line(machine, "audiocpu", INPUT_LINE_NMI, ASSERT_LINE); + parodius_state *state = (parodius_state *)machine->driver_data; + cpu_set_input_line(state->audiocpu, INPUT_LINE_NMI, ASSERT_LINE); } static WRITE8_HANDLER( sound_arm_nmi_w ) { -// sound_nmi_enabled = 1; - cputag_set_input_line(space->machine, "audiocpu", INPUT_LINE_NMI, CLEAR_LINE); + parodius_state *state = (parodius_state *)space->machine->driver_data; + + cpu_set_input_line(state->audiocpu, INPUT_LINE_NMI, CLEAR_LINE); timer_set(space->machine, ATTOTIME_IN_USEC(50), NULL, 0, nmi_callback); /* kludge until the K053260 is emulated correctly */ } /********************************************/ static ADDRESS_MAP_START( parodius_map, ADDRESS_SPACE_PROGRAM, 8 ) - AM_RANGE(0x0000, 0x07ff) AM_READWRITE(bankedram_r,bankedram_w) AM_BASE(&ram) + AM_RANGE(0x0000, 0x07ff) AM_READWRITE(bankedram_r, bankedram_w) AM_BASE_MEMBER(parodius_state, ram) AM_RANGE(0x0800, 0x1fff) AM_RAM AM_RANGE(0x3f8c, 0x3f8c) AM_READ_PORT("P1") AM_RANGE(0x3f8d, 0x3f8d) AM_READ_PORT("P2") @@ -154,8 +157,8 @@ static ADDRESS_MAP_START( parodius_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0x3fc0, 0x3fc0) AM_READWRITE(watchdog_reset_r,parodius_3fc0_w) AM_RANGE(0x3fc4, 0x3fc4) AM_WRITE(parodius_videobank_w) AM_RANGE(0x3fc8, 0x3fc8) AM_WRITE(parodius_sh_irqtrigger_w) - AM_RANGE(0x3fcc, 0x3fcd) AM_DEVREADWRITE("konami", parodius_sound_r,k053260_w) /* K053260 */ - AM_RANGE(0x2000, 0x27ff) AM_READWRITE(parodius_052109_053245_r,parodius_052109_053245_w) + AM_RANGE(0x3fcc, 0x3fcd) AM_DEVREADWRITE("k053260", parodius_sound_r, k053260_w) /* K053260 */ + AM_RANGE(0x2000, 0x27ff) AM_READWRITE(parodius_052109_053245_r, parodius_052109_053245_w) AM_RANGE(0x2000, 0x5fff) AM_DEVREADWRITE("k052109", k052109_r, k052109_w) AM_RANGE(0x6000, 0x9fff) AM_ROMBANK("bank1") /* banked ROM */ AM_RANGE(0xa000, 0xffff) AM_ROM /* ROM */ @@ -166,7 +169,7 @@ static ADDRESS_MAP_START( parodius_sound_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0xf000, 0xf7ff) AM_RAM AM_RANGE(0xf800, 0xf801) AM_DEVREADWRITE("ymsnd", ym2151_r,ym2151_w) AM_RANGE(0xfa00, 0xfa00) AM_WRITE(sound_arm_nmi_w) - AM_RANGE(0xfc00, 0xfc2f) AM_DEVREADWRITE("konami", k053260_r,k053260_w) + AM_RANGE(0xfc00, 0xfc2f) AM_DEVREADWRITE("k053260", k053260_r,k053260_w) ADDRESS_MAP_END @@ -252,8 +255,53 @@ static const k05324x_interface parodius_k05324x_intf = parodius_sprite_callback }; +static MACHINE_START( parodius ) +{ + parodius_state *state = (parodius_state *)machine->driver_data; + UINT8 *ROM = memory_region(machine, "maincpu"); + + memory_configure_bank(machine, "bank1", 0, 14, &ROM[0x10000], 0x4000); + memory_configure_bank(machine, "bank1", 14, 2, &ROM[0x08000], 0x4000); + memory_set_bank(machine, "bank1", 0); + + machine->generic.paletteram.u8 = auto_alloc_array_clear(machine, UINT8, 0x1000); + + state->maincpu = devtag_get_device(machine, "maincpu"); + state->audiocpu = devtag_get_device(machine, "audiocpu"); + state->k053260 = devtag_get_device(machine, "k053260"); + state->k053245 = devtag_get_device(machine, "k053245"); + state->k053251 = devtag_get_device(machine, "k053251"); + state->k052109 = devtag_get_device(machine, "k052109"); + + state_save_register_global(machine, state->videobank); + state_save_register_global(machine, state->sprite_colorbase); + state_save_register_global_array(machine, state->layer_colorbase); + state_save_register_global_array(machine, state->layerpri); + state_save_register_global_pointer(machine, machine->generic.paletteram.u8, 0x1000); +} + +static MACHINE_RESET( parodius ) +{ + parodius_state *state = (parodius_state *)machine->driver_data; + int i; + + konami_configure_set_lines(devtag_get_device(machine, "maincpu"), parodius_banking); + + for (i = 0; i < 3; i++) + { + state->layerpri[i] = 0; + state->layer_colorbase[i] = 0; + } + + state->sprite_colorbase = 0; + state->videobank = 0; +} + static MACHINE_DRIVER_START( parodius ) + /* driver data */ + MDRV_DRIVER_DATA(parodius_state) + /* basic machine hardware */ MDRV_CPU_ADD("maincpu", KONAMI, 3000000) /* 053248 */ MDRV_CPU_PROGRAM_MAP(parodius_map) @@ -262,7 +310,7 @@ static MACHINE_DRIVER_START( parodius ) MDRV_CPU_ADD("audiocpu", Z80, 3579545) MDRV_CPU_PROGRAM_MAP(parodius_sound_map) /* NMIs are triggered by the 053260 */ - + MDRV_MACHINE_START(parodius) MDRV_MACHINE_RESET(parodius) /* video hardware */ @@ -290,7 +338,7 @@ static MACHINE_DRIVER_START( parodius ) MDRV_SOUND_ROUTE(0, "lspeaker", 1.0) MDRV_SOUND_ROUTE(1, "rspeaker", 1.0) - MDRV_SOUND_ADD("konami", K053260, 3579545) + MDRV_SOUND_ADD("k053260", K053260, 3579545) MDRV_SOUND_ROUTE(0, "lspeaker", 0.70) MDRV_SOUND_ROUTE(1, "rspeaker", 0.70) MACHINE_DRIVER_END @@ -302,7 +350,7 @@ MACHINE_DRIVER_END ***************************************************************************/ ROM_START( parodius ) - ROM_REGION( 0x51000, "maincpu", 0 ) /* code + banked roms + palette RAM */ + ROM_REGION( 0x48000, "maincpu", 0 ) /* code + banked roms + palette RAM */ ROM_LOAD( "955l01.bin", 0x10000, 0x20000, CRC(49a658eb) SHA1(dd53060c4da99b8e1f896ebfec572296ef2b5665) ) ROM_LOAD( "955l02.bin", 0x30000, 0x18000, CRC(161d7322) SHA1(a752f28c19c58263680221ad1119f2fd57df4723) ) ROM_CONTINUE( 0x08000, 0x08000 ) @@ -318,12 +366,12 @@ ROM_START( parodius ) ROM_LOAD( "955d05.bin", 0x000000, 0x080000, CRC(7a1e55e0) SHA1(7a0e04ebde28d1e7b60aef3de926dc0e78662b1e) ) /* sprites */ ROM_LOAD( "955d06.bin", 0x080000, 0x080000, CRC(f4252875) SHA1(490f2e19b30cf8724e4b03b8d9f089c470ec13bd) ) /* sprites */ - ROM_REGION( 0x80000, "konami", 0 ) /* 053260 samples */ + ROM_REGION( 0x80000, "k053260", 0 ) /* 053260 samples */ ROM_LOAD( "955d04.bin", 0x00000, 0x80000, CRC(e671491a) SHA1(79e71cb5212eb7d14d3479b0734ea0270473a66d) ) ROM_END ROM_START( parodiusj ) - ROM_REGION( 0x51000, "maincpu", 0 ) /* code + banked roms + palette RAM */ + ROM_REGION( 0x48000, "maincpu", 0 ) /* code + banked roms + palette RAM */ ROM_LOAD( "955e01.bin", 0x10000, 0x20000, CRC(49baa334) SHA1(8902fbb2228111b15de6537bd168241933df134d) ) ROM_LOAD( "955e02.bin", 0x30000, 0x18000, CRC(14010d6f) SHA1(69fe162ea08c3bd4b3e78e9d10d278bd15444af4) ) ROM_CONTINUE( 0x08000, 0x08000 ) @@ -339,7 +387,7 @@ ROM_START( parodiusj ) ROM_LOAD( "955d05.bin", 0x000000, 0x080000, CRC(7a1e55e0) SHA1(7a0e04ebde28d1e7b60aef3de926dc0e78662b1e) ) /* sprites */ ROM_LOAD( "955d06.bin", 0x080000, 0x080000, CRC(f4252875) SHA1(490f2e19b30cf8724e4b03b8d9f089c470ec13bd) ) /* sprites */ - ROM_REGION( 0x80000, "konami", 0 ) /* 053260 samples */ + ROM_REGION( 0x80000, "k053260", 0 ) /* 053260 samples */ ROM_LOAD( "955d04.bin", 0x00000, 0x80000, CRC(e671491a) SHA1(79e71cb5212eb7d14d3479b0734ea0270473a66d) ) ROM_END @@ -351,30 +399,11 @@ ROM_END static KONAMI_SETLINES_CALLBACK( parodius_banking ) { - UINT8 *RAM = memory_region(device->machine, "maincpu"); - int offs = 0; - - if (lines & 0xf0) logerror("%04x: setlines %02x\n",cpu_get_pc(device),lines); - - offs = 0x10000 + (((lines & 0x0f)^0x0f) * 0x4000); - if (offs >= 0x48000) offs -= 0x40000; - memory_set_bankptr(device->machine, "bank1", &RAM[offs] ); -} - -static MACHINE_RESET( parodius ) -{ - UINT8 *RAM = memory_region(machine, "maincpu"); - - konami_configure_set_lines(cputag_get_cpu(machine, "maincpu"), parodius_banking); + if (lines & 0xf0) + logerror("%04x: setlines %02x\n", cpu_get_pc(device), lines); - machine->generic.paletteram.u8 = &memory_region(machine, "maincpu")[0x48000]; - - videobank = 0; - - /* init the default bank */ - memory_set_bankptr(machine, "bank1",&RAM[0x10000]); + memory_set_bank(device->machine, "bank1", (lines & 0x0f) ^ 0x0f); } - -GAME( 1990, parodius, 0, parodius, parodius, 0, ROT0, "Konami", "Parodius DA! (World)", 0 ) -GAME( 1990, parodiusj,parodius, parodius, parodius, 0, ROT0, "Konami", "Parodius DA! (Japan)", 0 ) +GAME( 1990, parodius, 0, parodius, parodius, 0, ROT0, "Konami", "Parodius DA! (World)", GAME_SUPPORTS_SAVE ) +GAME( 1990, parodiusj, parodius, parodius, parodius, 0, ROT0, "Konami", "Parodius DA! (Japan)", GAME_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/rollerg.c b/src/mame/drivers/rollerg.c index 21754f9013e..61fd9cc5854 100644 --- a/src/mame/drivers/rollerg.c +++ b/src/mame/drivers/rollerg.c @@ -1,12 +1,12 @@ /*************************************************************************** -Rollergames (GX999) (c) 1991 Konami + Rollergames (GX999) (c) 1991 Konami -driver by Nicola Salmoria + driver by Nicola Salmoria -2009-03: -Added dsw locations and verified factory settings based on Guru's notes + 2009-03: + Added dsw locations and verified factory settings based on Guru's notes ***************************************************************************/ @@ -16,44 +16,37 @@ Added dsw locations and verified factory settings based on Guru's notes #include "cpu/konami/konami.h" /* for the callback and the firq irq definition */ #include "sound/3812intf.h" #include "sound/k053260.h" +#include "includes/rollerg.h" /* prototypes */ -static MACHINE_RESET( rollerg ); static KONAMI_SETLINES_CALLBACK( rollerg_banking ); -VIDEO_START( rollerg ); -VIDEO_UPDATE( rollerg ); - -extern void rollerg_sprite_callback(running_machine *machine, int *code,int *color,int *priority_mask); -extern void rollerg_zoom_callback(running_machine *machine, int *code,int *color,int *flags); - -static int readzoomroms; - static WRITE8_HANDLER( rollerg_0010_w ) { - const device_config *k051316 = devtag_get_device(space->machine, "k051316"); - logerror("%04x: write %02x to 0010\n",cpu_get_pc(space->cpu),data); + rollerg_state *state = (rollerg_state *)space->machine->driver_data; + logerror("%04x: write %02x to 0010\n",cpu_get_pc(space->cpu), data); /* bits 0/1 are coin counters */ - coin_counter_w(space->machine, 0,data & 0x01); - coin_counter_w(space->machine, 1,data & 0x02); + coin_counter_w(space->machine, 0, data & 0x01); + coin_counter_w(space->machine, 1, data & 0x02); /* bit 2 enables 051316 ROM reading */ - readzoomroms = data & 0x04; + state->readzoomroms = data & 0x04; /* bit 5 enables 051316 wraparound */ - k051316_wraparound_enable(k051316, data & 0x20); + k051316_wraparound_enable(state->k051316, data & 0x20); /* other bits unknown */ } -static READ8_HANDLER( rollerg_K051316_r ) +static READ8_HANDLER( rollerg_k051316_r ) { - const device_config *k051316 = devtag_get_device(space->machine, "k051316"); - if (readzoomroms) - return k051316_rom_r(k051316, offset); + rollerg_state *state = (rollerg_state *)space->machine->driver_data; + + if (state->readzoomroms) + return k051316_rom_r(state->k051316, offset); else - return k051316_r(k051316, offset); + return k051316_r(state->k051316, offset); } static READ8_DEVICE_HANDLER( rollerg_sound_r ) @@ -65,18 +58,21 @@ static READ8_DEVICE_HANDLER( rollerg_sound_r ) static WRITE8_HANDLER( soundirq_w ) { - cputag_set_input_line_and_vector(space->machine, "audiocpu", 0, HOLD_LINE, 0xff); + rollerg_state *state = (rollerg_state *)space->machine->driver_data; + cpu_set_input_line_and_vector(state->audiocpu, 0, HOLD_LINE, 0xff); } static TIMER_CALLBACK( nmi_callback ) { - cputag_set_input_line(machine, "audiocpu", INPUT_LINE_NMI, ASSERT_LINE); + rollerg_state *state = (rollerg_state *)machine->driver_data; + cpu_set_input_line(state->audiocpu, INPUT_LINE_NMI, ASSERT_LINE); } static WRITE8_HANDLER( sound_arm_nmi_w ) { - cputag_set_input_line(space->machine, "audiocpu", INPUT_LINE_NMI, CLEAR_LINE); - timer_set(space->machine, ATTOTIME_IN_USEC(50), NULL,0,nmi_callback); /* kludge until the K053260 is emulated correctly */ + rollerg_state *state = (rollerg_state *)space->machine->driver_data; + cpu_set_input_line(state->audiocpu, INPUT_LINE_NMI, CLEAR_LINE); + timer_set(space->machine, ATTOTIME_IN_USEC(50), NULL, 0, nmi_callback); /* kludge until the K053260 is emulated correctly */ } static READ8_HANDLER( pip_r ) @@ -87,7 +83,7 @@ static READ8_HANDLER( pip_r ) static ADDRESS_MAP_START( rollerg_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0x0010, 0x0010) AM_WRITE(rollerg_0010_w) AM_RANGE(0x0020, 0x0020) AM_READWRITE(watchdog_reset_r,watchdog_reset_w) - AM_RANGE(0x0030, 0x0031) AM_DEVREADWRITE("konami", rollerg_sound_r,k053260_w) /* K053260 */ + AM_RANGE(0x0030, 0x0031) AM_DEVREADWRITE("k053260", rollerg_sound_r, k053260_w) /* K053260 */ AM_RANGE(0x0040, 0x0040) AM_WRITE(soundirq_w) AM_RANGE(0x0050, 0x0050) AM_READ_PORT("P1") AM_RANGE(0x0051, 0x0051) AM_READ_PORT("P2") @@ -98,7 +94,7 @@ static ADDRESS_MAP_START( rollerg_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0x0100, 0x010f) AM_WRITENOP /* 053252? */ AM_RANGE(0x0200, 0x020f) AM_DEVWRITE("k051316", k051316_ctrl_w) AM_RANGE(0x0300, 0x030f) AM_DEVREADWRITE("k053244", k053244_r, k053244_w) - AM_RANGE(0x0800, 0x0fff) AM_READ(rollerg_K051316_r) AM_DEVWRITE("k051316", k051316_w) + AM_RANGE(0x0800, 0x0fff) AM_READ(rollerg_k051316_r) AM_DEVWRITE("k051316", k051316_w) AM_RANGE(0x1000, 0x17ff) AM_DEVREADWRITE("k053244", k053245_r, k053245_w) AM_RANGE(0x1800, 0x1fff) AM_RAM_WRITE(paletteram_xBBBBBGGGGGRRRRR_be_w) AM_BASE_GENERIC(paletteram) AM_RANGE(0x2000, 0x3aff) AM_RAM @@ -109,7 +105,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( rollerg_sound_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0x0000, 0x7fff) AM_ROM AM_RANGE(0x8000, 0x87ff) AM_RAM - AM_RANGE(0xa000, 0xa02f) AM_DEVREADWRITE("konami", k053260_r,k053260_w) + AM_RANGE(0xa000, 0xa02f) AM_DEVREADWRITE("k053260", k053260_r,k053260_w) AM_RANGE(0xc000, 0xc001) AM_DEVREADWRITE("ymsnd", ym3812_r,ym3812_w) AM_RANGE(0xfc00, 0xfc00) AM_WRITE(sound_arm_nmi_w) ADDRESS_MAP_END @@ -238,8 +234,38 @@ static const k051316_interface rollerg_k051316_intf = rollerg_zoom_callback }; +static MACHINE_START( rollerg ) +{ + rollerg_state *state = (rollerg_state *)machine->driver_data; + UINT8 *ROM = memory_region(machine, "maincpu"); + + memory_configure_bank(machine, "bank1", 0, 6, &ROM[0x10000], 0x4000); + memory_configure_bank(machine, "bank1", 6, 2, &ROM[0x10000], 0x4000); + memory_set_bank(machine, "bank1", 0); + + state->maincpu = devtag_get_device(machine, "maincpu"); + state->audiocpu = devtag_get_device(machine, "audiocpu"); + state->k053244 = devtag_get_device(machine, "k053244"); + state->k051316 = devtag_get_device(machine, "k051316"); + state->k053260 = devtag_get_device(machine, "k053260"); + + state_save_register_global(machine, state->readzoomroms); +} + +static MACHINE_RESET( rollerg ) +{ + rollerg_state *state = (rollerg_state *)machine->driver_data; + + konami_configure_set_lines(devtag_get_device(machine, "maincpu"), rollerg_banking); + + state->readzoomroms = 0; +} + static MACHINE_DRIVER_START( rollerg ) + /* driver data */ + MDRV_DRIVER_DATA(rollerg_state) + /* basic machine hardware */ MDRV_CPU_ADD("maincpu", KONAMI, 3000000) /* ? */ MDRV_CPU_PROGRAM_MAP(rollerg_map) @@ -248,6 +274,7 @@ static MACHINE_DRIVER_START( rollerg ) MDRV_CPU_ADD("audiocpu", Z80, 3579545) MDRV_CPU_PROGRAM_MAP(rollerg_sound_map) /* NMIs are generated by the 053260 */ + MDRV_MACHINE_START(rollerg) MDRV_MACHINE_RESET(rollerg) /* video hardware */ @@ -274,7 +301,7 @@ static MACHINE_DRIVER_START( rollerg ) MDRV_SOUND_ADD("ymsnd", YM3812, 3579545) MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) - MDRV_SOUND_ADD("konami", K053260, 3579545) + MDRV_SOUND_ADD("k053260", K053260, 3579545) MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.70) MACHINE_DRIVER_END @@ -302,7 +329,7 @@ ROM_START( rollerg ) ROM_LOAD( "999h03.d23", 0x000000, 0x040000, CRC(ea1edbd2) SHA1(a17d19f873384287e1e47222d46274e7408b40d4) ) /* zoom */ ROM_LOAD( "999h04.f23", 0x040000, 0x040000, CRC(c1a35355) SHA1(615606d30500a8f2be19171893e985b085fff2fc) ) - ROM_REGION( 0x80000, "konami", 0 ) /* samples for 053260 */ + ROM_REGION( 0x80000, "k053260", 0 ) /* samples for 053260 */ ROM_LOAD( "999h09.c5", 0x000000, 0x080000, CRC(c5188783) SHA1(d9ab69e4197ba2b42e3b0bb713236c8037fc2ab3) ) ROM_END @@ -322,7 +349,7 @@ ROM_START( rollergj ) ROM_LOAD( "999h03.d23", 0x000000, 0x040000, CRC(ea1edbd2) SHA1(a17d19f873384287e1e47222d46274e7408b40d4) ) /* zoom */ ROM_LOAD( "999h04.f23", 0x040000, 0x040000, CRC(c1a35355) SHA1(615606d30500a8f2be19171893e985b085fff2fc) ) - ROM_REGION( 0x80000, "konami", 0 ) /* samples for 053260 */ + ROM_REGION( 0x80000, "k053260", 0 ) /* samples for 053260 */ ROM_LOAD( "999h09.c5", 0x000000, 0x080000, CRC(c5188783) SHA1(d9ab69e4197ba2b42e3b0bb713236c8037fc2ab3) ) ROM_END @@ -336,22 +363,9 @@ ROM_END static KONAMI_SETLINES_CALLBACK( rollerg_banking ) { - UINT8 *RAM = memory_region(device->machine, "maincpu"); - int offs = 0; - - - offs = 0x10000 + ((lines & 0x07) * 0x4000); - if (offs >= 0x28000) offs -= 0x20000; - memory_set_bankptr(device->machine, "bank1",&RAM[offs]); -} - -static MACHINE_RESET( rollerg ) -{ - konami_configure_set_lines(cputag_get_cpu(machine, "maincpu"), rollerg_banking); - - readzoomroms = 0; + memory_set_bank(device->machine, "bank1", lines & 0x07); } -GAME( 1991, rollerg, 0, rollerg, rollerg, 0, ROT0, "Konami", "Rollergames (US)", 0 ) -GAME( 1991, rollergj, rollerg, rollerg, rollerg, 0, ROT0, "Konami", "Rollergames (Japan)", 0 ) +GAME( 1991, rollerg, 0, rollerg, rollerg, 0, ROT0, "Konami", "Rollergames (US)", GAME_SUPPORTS_SAVE ) +GAME( 1991, rollergj, rollerg, rollerg, rollerg, 0, ROT0, "Konami", "Rollergames (Japan)", GAME_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/rungun.c b/src/mame/drivers/rungun.c index 384e18a4c47..b5cb1aaee7e 100644 --- a/src/mame/drivers/rungun.c +++ b/src/mame/drivers/rungun.c @@ -1,6 +1,5 @@ -#define RNG_DEBUG 0 +/************************************************************************* -/* Run and Gun / Slam Dunk (c) 1993 Konami @@ -33,7 +32,8 @@ - P3 and P4 coin chutes not working in 4-player mode - sprite palettes are not entirely right - ROZ update causes music to stutter -*/ + +*************************************************************************/ #include "driver.h" @@ -43,20 +43,10 @@ #include "machine/eeprom.h" #include "sound/k054539.h" #include "includes/konamipt.h" +#include "includes/rungun.h" -VIDEO_START( rng ); -VIDEO_UPDATE( rng ); -static MACHINE_RESET( rng ); -READ16_HANDLER( rng_ttl_ram_r ); -WRITE16_HANDLER( rng_ttl_ram_w ); -WRITE16_HANDLER( rng_936_videoram_w ); - -extern UINT16 *rng_936_videoram; -extern void rng_sprite_callback(running_machine *machine, int *code, int *color, int *priority_mask); +#define RNG_DEBUG 0 -static UINT16 *rng_sysreg; -static int rng_z80_control; -static int rng_sound_status; static const eeprom_interface eeprom_intf = { @@ -71,26 +61,27 @@ static const eeprom_interface eeprom_intf = static READ16_HANDLER( rng_sysregs_r ) { + rungun_state *state = (rungun_state *)space->machine->driver_data; UINT16 data = 0; switch (offset) { case 0x00/2: if (input_port_read(space->machine, "DSW") & 0x20) - return(input_port_read(space->machine, "P1") | input_port_read(space->machine, "P3") << 8); + return (input_port_read(space->machine, "P1") | input_port_read(space->machine, "P3") << 8); else { data = input_port_read(space->machine, "P1") & input_port_read(space->machine, "P3"); - return(data << 8 | data); + return (data << 8 | data); } case 0x02/2: if (input_port_read(space->machine, "DSW") & 0x20) - return(input_port_read(space->machine, "P2") | input_port_read(space->machine, "P4") << 8); + return (input_port_read(space->machine, "P2") | input_port_read(space->machine, "P4") << 8); else { data = input_port_read(space->machine, "P2") & input_port_read(space->machine, "P4"); - return(data << 8 | data); + return (data << 8 | data); } case 0x04/2: @@ -106,16 +97,17 @@ static READ16_HANDLER( rng_sysregs_r ) { data = input_port_read(space->machine, "DSW"); } - return((rng_sysreg[0x06/2] & 0xff00) | data); + return ((state->sysreg[0x06 / 2] & 0xff00) | data); } - return(rng_sysreg[offset]); + return state->sysreg[offset]; } static WRITE16_HANDLER( rng_sysregs_w ) { - const device_config *k055673 = devtag_get_device(space->machine, "k055673"); - COMBINE_DATA(rng_sysreg + offset); + rungun_state *state = (rungun_state *)space->machine->driver_data; + + COMBINE_DATA(state->sysreg + offset); switch (offset) { @@ -129,12 +121,10 @@ static WRITE16_HANDLER( rng_sysregs_w ) bit10 : IRQ5 ACK */ if (ACCESSING_BITS_0_7) - { input_port_write(space->machine, "EEPROMOUT", data, 0xff); - } if (!(data & 0x40)) - cputag_set_input_line(space->machine, "maincpu", M68K_IRQ_5, CLEAR_LINE); + cpu_set_input_line(state->maincpu, M68K_IRQ_5, CLEAR_LINE); break; case 0x0c/2: @@ -144,7 +134,7 @@ static WRITE16_HANDLER( rng_sysregs_w ) bit 2 : OBJCHA bit 3 : enable IRQ 5 */ - k053246_set_objcha_line(k055673, (data & 0x04) ? ASSERT_LINE : CLEAR_LINE); + k053246_set_objcha_line(state->k055673, (data & 0x04) ? ASSERT_LINE : CLEAR_LINE); break; } } @@ -158,26 +148,32 @@ static WRITE16_HANDLER( sound_cmd1_w ) static WRITE16_HANDLER( sound_cmd2_w ) { if (ACCESSING_BITS_8_15) - soundlatch2_w(space, 0, data>>8); + soundlatch2_w(space, 0, data >> 8); } static WRITE16_HANDLER( sound_irq_w ) { + rungun_state *state = (rungun_state *)space->machine->driver_data; + if (ACCESSING_BITS_8_15) - cputag_set_input_line(space->machine, "soundcpu", 0, HOLD_LINE); + cpu_set_input_line(state->audiocpu, 0, HOLD_LINE); } static READ16_HANDLER( sound_status_msb_r ) { + rungun_state *state = (rungun_state *)space->machine->driver_data; + if (ACCESSING_BITS_8_15) - return(rng_sound_status << 8); + return(state->sound_status << 8); - return(0); + return 0; } static INTERRUPT_GEN(rng_interrupt) { - if (rng_sysreg[0x0c/2] & 0x09) + rungun_state *state = (rungun_state *)device->machine->driver_data; + + if (state->sysreg[0x0c / 2] & 0x09) cpu_set_input_line(device, M68K_IRQ_5, ASSERT_LINE); } @@ -186,7 +182,7 @@ static ADDRESS_MAP_START( rungun_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x300000, 0x3007ff) AM_RAM_WRITE(paletteram16_xBBBBBGGGGGRRRRR_word_w) AM_BASE_GENERIC(paletteram) AM_RANGE(0x380000, 0x39ffff) AM_RAM // work RAM AM_RANGE(0x400000, 0x43ffff) AM_READNOP // AM_READ( K053936_0_rom_r ) // '936 ROM readback window - AM_RANGE(0x480000, 0x48001f) AM_READWRITE(rng_sysregs_r,rng_sysregs_w) AM_BASE(&rng_sysreg) + AM_RANGE(0x480000, 0x48001f) AM_READWRITE(rng_sysregs_r, rng_sysregs_w) AM_BASE_MEMBER(rungun_state, sysreg) AM_RANGE(0x4c0000, 0x4c001f) AM_DEVREAD("k053252", k053252_word_r) // CCU (for scanline and vblank polling) AM_RANGE(0x540000, 0x540001) AM_WRITE(sound_irq_w) AM_RANGE(0x58000c, 0x58000d) AM_WRITE(sound_cmd1_w) @@ -199,9 +195,9 @@ static ADDRESS_MAP_START( rungun_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x601000, 0x601fff) AM_RAM // communication? second monitor buffer? AM_RANGE(0x640000, 0x640007) AM_DEVWRITE("k055673", k053246_word_w) // '246A registers AM_RANGE(0x680000, 0x68001f) AM_DEVWRITE("k053936", k053936_ctrl_w) // '936 registers - AM_RANGE(0x6c0000, 0x6cffff) AM_RAM_WRITE(rng_936_videoram_w) AM_BASE(&rng_936_videoram) // PSAC2 ('936) RAM (34v + 35v) + AM_RANGE(0x6c0000, 0x6cffff) AM_RAM_WRITE(rng_936_videoram_w) AM_BASE_MEMBER(rungun_state, _936_videoram) // PSAC2 ('936) RAM (34v + 35v) AM_RANGE(0x700000, 0x7007ff) AM_DEVREADWRITE("k053936", k053936_linectrl_r, k053936_linectrl_w) // PSAC "Line RAM" - AM_RANGE(0x740000, 0x741fff) AM_READWRITE(rng_ttl_ram_r,rng_ttl_ram_w) // text plane RAM + AM_RANGE(0x740000, 0x741fff) AM_READWRITE(rng_ttl_ram_r, rng_ttl_ram_w) // text plane RAM AM_RANGE(0x7c0000, 0x7c0001) AM_WRITENOP // watchdog #if RNG_DEBUG AM_RANGE(0x5c0010, 0x5c001f) AM_DEVREAD("k055673", k053247_reg_word_r) @@ -214,22 +210,28 @@ ADDRESS_MAP_END static WRITE8_HANDLER( sound_status_w ) { - rng_sound_status = data; + rungun_state *state = (rungun_state *)space->machine->driver_data; + state->sound_status = data; } static WRITE8_HANDLER( z80ctrl_w ) { - rng_z80_control = data; + rungun_state *state = (rungun_state *)space->machine->driver_data; - memory_set_bankptr(space->machine, "bank2", memory_region(space->machine, "soundcpu") + 0x10000 + (data & 0x07) * 0x4000); + state->z80_control = data; + + memory_set_bank(space->machine, "bank2", data & 0x07); if (data & 0x10) - cputag_set_input_line(space->machine, "soundcpu", INPUT_LINE_NMI, CLEAR_LINE); + cpu_set_input_line(state->audiocpu, INPUT_LINE_NMI, CLEAR_LINE); } static INTERRUPT_GEN(audio_interrupt) { - if (rng_z80_control & 0x80) return; + rungun_state *state = (rungun_state *)device->machine->driver_data; + + if (state->z80_control & 0x80) + return; cpu_set_input_line(device, INPUT_LINE_NMI, ASSERT_LINE); } @@ -240,9 +242,9 @@ static ADDRESS_MAP_START( rungun_sound_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0x0000, 0x7fff) AM_ROM AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank2") AM_RANGE(0xc000, 0xdfff) AM_RAM - AM_RANGE(0xe000, 0xe22f) AM_DEVREADWRITE("konami1", k054539_r,k054539_w) + AM_RANGE(0xe000, 0xe22f) AM_DEVREADWRITE("k054539_1", k054539_r, k054539_w) AM_RANGE(0xe230, 0xe3ff) AM_RAM - AM_RANGE(0xe400, 0xe62f) AM_DEVREADWRITE("konami2", k054539_r,k054539_w) + AM_RANGE(0xe400, 0xe62f) AM_DEVREADWRITE("k054539_2", k054539_r, k054539_w) AM_RANGE(0xe630, 0xe7ff) AM_RAM AM_RANGE(0xf000, 0xf000) AM_WRITE(sound_status_w) AM_RANGE(0xf002, 0xf002) AM_READ(soundlatch_r) @@ -352,8 +354,45 @@ static const k053247_interface rng_k055673_intf = }; +static MACHINE_START( rng ) +{ + rungun_state *state = (rungun_state *)machine->driver_data; + UINT8 *ROM = memory_region(machine, "soundcpu"); + + memory_configure_bank(machine, "bank2", 0, 8, &ROM[0x10000], 0x4000); + + state->maincpu = devtag_get_device(machine, "maincpu"); + state->audiocpu = devtag_get_device(machine, "soundcpu"); + state->k053936 = devtag_get_device(machine, "k053936"); + state->k055673 = devtag_get_device(machine, "k055673"); + state->k053252 = devtag_get_device(machine, "k053252"); + state->k054539_1 = devtag_get_device(machine, "k054539_1"); + state->k054539_2 = devtag_get_device(machine, "k054539_2"); + + state_save_register_global(machine, state->z80_control); + state_save_register_global(machine, state->sound_status); + state_save_register_global_array(machine, state->sysreg); + state_save_register_global_array(machine, state->ttl_vram); +} + +static MACHINE_RESET( rng ) +{ + rungun_state *state = (rungun_state *)machine->driver_data; + + k054539_init_flags(devtag_get_device(machine, "k054539_1"), K054539_REVERSE_STEREO); + + memset(state->sysreg, 0, 0x20); + memset(state->ttl_vram, 0, 0x1000); + + state->z80_control = 0; + state->sound_status = 0; +} + static MACHINE_DRIVER_START( rng ) + /* driver data */ + MDRV_DRIVER_DATA(rungun_state) + /* basic machine hardware */ MDRV_CPU_ADD("maincpu", M68000, 16000000) MDRV_CPU_PROGRAM_MAP(rungun_map) @@ -367,6 +406,7 @@ static MACHINE_DRIVER_START( rng ) MDRV_GFXDECODE(rungun) + MDRV_MACHINE_START(rng) MDRV_MACHINE_RESET(rng) MDRV_EEPROM_ADD("eeprom", eeprom_intf) @@ -393,12 +433,12 @@ static MACHINE_DRIVER_START( rng ) /* sound hardware */ MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") - MDRV_SOUND_ADD("konami1", K054539, 48000) + MDRV_SOUND_ADD("k054539_1", K054539, 48000) MDRV_SOUND_CONFIG(k054539_config) MDRV_SOUND_ROUTE(0, "lspeaker", 1.0) MDRV_SOUND_ROUTE(1, "rspeaker", 1.0) - MDRV_SOUND_ADD("konami2", K054539, 48000) + MDRV_SOUND_ADD("k054539_2", K054539, 48000) MDRV_SOUND_CONFIG(k054539_config) MDRV_SOUND_ROUTE(0, "lspeaker", 1.0) MDRV_SOUND_ROUTE(1, "rspeaker", 1.0) @@ -593,22 +633,9 @@ ROM_START( slmdunkj ) ROM_LOAD( "247-a07", 0x200000, 0x200000, CRC(0108142d) SHA1(4dc6a36d976dad9c0da5a5b1f01f2eb3b369c99d) ) ROM_END -static DRIVER_INIT( rng ) -{ -} - -static MACHINE_RESET( rng ) -{ - k054539_init_flags(devtag_get_device(machine, "konami1"), K054539_REVERSE_STEREO); - - memset(rng_sysreg, 0, 0x20); - - rng_z80_control = 0; - rng_sound_status = 0; -} -GAME( 1993, rungun, 0, rng, rng, rng, ROT0, "Konami", "Run and Gun (ver EAA 1993 10.8)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_COLORS | GAME_IMPERFECT_SOUND ) -GAME( 1993, runguna, rungun, rng, rng, rng, ROT0, "Konami", "Run and Gun (ver EAA 1993 10.4)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_COLORS | GAME_IMPERFECT_SOUND ) -GAME( 1993, rungunu, rungun, rng, rng, rng, ROT0, "Konami", "Run and Gun (ver UAB 1993 10.12)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_COLORS | GAME_IMPERFECT_SOUND ) -GAME( 1993, rungunua, rungun, rng, rng, rng, ROT0, "Konami", "Run and Gun (ver UBA 1993 10.8)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_COLORS | GAME_IMPERFECT_SOUND ) -GAME( 1993, slmdunkj, rungun, rng, rng, rng, ROT0, "Konami", "Slam Dunk (ver JAA 1993 10.8)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_COLORS | GAME_IMPERFECT_SOUND ) +GAME( 1993, rungun, 0, rng, rng, 0, ROT0, "Konami", "Run and Gun (ver EAA 1993 10.8)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_COLORS | GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE ) +GAME( 1993, runguna, rungun, rng, rng, 0, ROT0, "Konami", "Run and Gun (ver EAA 1993 10.4)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_COLORS | GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE ) +GAME( 1993, rungunu, rungun, rng, rng, 0, ROT0, "Konami", "Run and Gun (ver UAB 1993 10.12)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_COLORS | GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE ) +GAME( 1993, rungunua, rungun, rng, rng, 0, ROT0, "Konami", "Run and Gun (ver UBA 1993 10.8)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_COLORS | GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE ) +GAME( 1993, slmdunkj, rungun, rng, rng, 0, ROT0, "Konami", "Slam Dunk (ver JAA 1993 10.8)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_COLORS | GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/simpsons.c b/src/mame/drivers/simpsons.c index 1a766c1e3b2..fe194588a91 100644 --- a/src/mame/drivers/simpsons.c +++ b/src/mame/drivers/simpsons.c @@ -96,7 +96,7 @@ static ADDRESS_MAP_START( main_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0x1fc0, 0x1fc0) AM_WRITE(simpsons_coin_counter_w) AM_RANGE(0x1fc2, 0x1fc2) AM_WRITE(simpsons_eeprom_w) AM_RANGE(0x1fc4, 0x1fc4) AM_READ(simpsons_sound_interrupt_r) - AM_RANGE(0x1fc6, 0x1fc7) AM_DEVREADWRITE("konami", simpsons_sound_r, k053260_w) + AM_RANGE(0x1fc6, 0x1fc7) AM_DEVREADWRITE("k053260", simpsons_sound_r, k053260_w) AM_RANGE(0x1fc8, 0x1fc9) AM_DEVREAD("k053246", k053246_r) AM_RANGE(0x1fca, 0x1fca) AM_READ(watchdog_reset_r) AM_RANGE(0x2000, 0x3fff) AM_RAMBANK("bank4") @@ -112,26 +112,25 @@ static WRITE8_HANDLER( z80_bankswitch_w ) } #if 0 -static int nmi_enabled; - static void sound_nmi_callback( running_machine *machine, int param ) { - cputag_set_input_line(machine, "audiocpu", INPUT_LINE_NMI, ( nmi_enabled ) ? CLEAR_LINE : ASSERT_LINE ); - - nmi_enabled = 0; + simpsons_state *state = (simpsons_state *)machine->driver_data; + cpu_set_input_line(state->audiocpu, INPUT_LINE_NMI, (state->nmi_enabled) ? CLEAR_LINE : ASSERT_LINE ); + state->nmi_enabled = 0; } #endif static TIMER_CALLBACK( nmi_callback ) { - cputag_set_input_line(machine, "audiocpu", INPUT_LINE_NMI, ASSERT_LINE); + simpsons_state *state = (simpsons_state *)machine->driver_data; + cpu_set_input_line(state->audiocpu, INPUT_LINE_NMI, ASSERT_LINE); } static WRITE8_HANDLER( z80_arm_nmi_w ) { -// sound_nmi_enabled = 1; - cputag_set_input_line(space->machine, "audiocpu", INPUT_LINE_NMI, CLEAR_LINE); - timer_set(space->machine, ATTOTIME_IN_USEC(25), NULL,0,nmi_callback); /* kludge until the K053260 is emulated correctly */ + simpsons_state *state = (simpsons_state *)space->machine->driver_data; + cpu_set_input_line(state->audiocpu, INPUT_LINE_NMI, CLEAR_LINE); + timer_set(space->machine, ATTOTIME_IN_USEC(25), NULL, 0, nmi_callback); /* kludge until the K053260 is emulated correctly */ } static ADDRESS_MAP_START( z80_map, ADDRESS_SPACE_PROGRAM, 8 ) @@ -140,7 +139,7 @@ static ADDRESS_MAP_START( z80_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0xf000, 0xf7ff) AM_RAM AM_RANGE(0xf800, 0xf801) AM_DEVREADWRITE("ymsnd", ym2151_r, ym2151_w) AM_RANGE(0xfa00, 0xfa00) AM_WRITE(z80_arm_nmi_w) - AM_RANGE(0xfc00, 0xfc2f) AM_DEVREADWRITE("konami", k053260_r, k053260_w) + AM_RANGE(0xfc00, 0xfc2f) AM_DEVREADWRITE("k053260", k053260_r, k053260_w) AM_RANGE(0xfe00, 0xfe00) AM_WRITE(z80_bankswitch_w) ADDRESS_MAP_END @@ -228,16 +227,16 @@ INPUT_PORTS_END ***************************************************************************/ -static void simpsons_objdma(running_machine *machine) +static void simpsons_objdma( running_machine *machine ) { - const device_config *k053246 = devtag_get_device(machine, "k053246"); + simpsons_state *state = (simpsons_state *)machine->driver_data; int counter, num_inactive; UINT16 *src, *dst; - k053247_get_ram(k053246, &dst); - counter = k053247_get_dy(k053246); + k053247_get_ram(state->k053246, &dst); + counter = k053247_get_dy(state->k053246); - src = machine->generic.spriteram.u16; + src = state->spriteram; num_inactive = counter = 256; do { @@ -256,24 +255,24 @@ static void simpsons_objdma(running_machine *machine) static TIMER_CALLBACK( dmaend_callback ) { - if (simpsons_firq_enabled) - cputag_set_input_line(machine, "maincpu", KONAMI_FIRQ_LINE, HOLD_LINE); + simpsons_state *state = (simpsons_state *)machine->driver_data; + if (state->firq_enabled) + cpu_set_input_line(state->maincpu, KONAMI_FIRQ_LINE, HOLD_LINE); } static INTERRUPT_GEN( simpsons_irq ) { - const device_config *k053246 = devtag_get_device(device->machine, "k053246"); - const device_config *k052109 = devtag_get_device(device->machine, "k052109"); + simpsons_state *state = (simpsons_state *)device->machine->driver_data; - if (k053246_is_irq_enabled(k053246)) + if (k053246_is_irq_enabled(state->k053246)) { simpsons_objdma(device->machine); // 32+256us delay at 8MHz dotclock; artificially shortened since actual V-blank length is unknown timer_set(device->machine, ATTOTIME_IN_USEC(30), NULL, 0, dmaend_callback); } - if (k052109_is_irq_enabled(k052109)) + if (k052109_is_irq_enabled(state->k052109)) cpu_set_input_line(device, KONAMI_IRQ_LINE, HOLD_LINE); } @@ -308,6 +307,9 @@ static const eeprom_interface eeprom_intf = static MACHINE_DRIVER_START( simpsons ) + /* driver data */ + MDRV_DRIVER_DATA(simpsons_state) + /* basic machine hardware */ MDRV_CPU_ADD("maincpu", KONAMI, XTAL_24MHz/2/4) /* pin 18 of konami cpu is 12Mhz, while pin 17 is 3mhz. Clock probably divided internally by 4 */ MDRV_CPU_PROGRAM_MAP(main_map) @@ -317,6 +319,7 @@ static MACHINE_DRIVER_START( simpsons ) MDRV_CPU_PROGRAM_MAP(z80_map) /* NMIs are generated by the 053260 */ + MDRV_MACHINE_START(simpsons) MDRV_MACHINE_RESET(simpsons) MDRV_EEPROM_ADD("eeprom", eeprom_intf) @@ -348,7 +351,7 @@ static MACHINE_DRIVER_START( simpsons ) MDRV_SOUND_ROUTE(1, "lspeaker", 0.0) MDRV_SOUND_ROUTE(1, "rspeaker", 0.0) - MDRV_SOUND_ADD("konami", K053260, XTAL_3_579545MHz) /* verified on pcb */ + MDRV_SOUND_ADD("k053260", K053260, XTAL_3_579545MHz) /* verified on pcb */ MDRV_SOUND_ROUTE(0, "lspeaker", 0.75) MDRV_SOUND_ROUTE(1, "rspeaker", 0.75) MACHINE_DRIVER_END @@ -361,7 +364,7 @@ MACHINE_DRIVER_END ***************************************************************************/ ROM_START( simpsons ) /* World 4 Player */ - ROM_REGION( 0x8b000, "maincpu", 0 ) /* code + banked roms + banked ram */ + ROM_REGION( 0x88000, "maincpu", 0 ) /* code + banked roms + banked ram */ ROM_LOAD( "072-g02.16c", 0x10000, 0x20000, CRC(580ce1d6) SHA1(5b07fb8e8041e1663980aa35d853fdc13b22dac5) ) ROM_LOAD( "072-g01.17c", 0x30000, 0x20000, CRC(9f843def) SHA1(858432b59101b0577c5cec6ac0c7c20ab0780c9a) ) ROM_LOAD( "072-j13.13c", 0x50000, 0x20000, CRC(aade2abd) SHA1(10f178d5ed399b4866266e075d91ca3db26798f8) ) @@ -382,13 +385,13 @@ ROM_START( simpsons ) /* World 4 Player */ ROM_LOAD( "072-b10.12n", 0x200000, 0x100000, CRC(577dbd53) SHA1(e603e03e3dcba766074561faa92afafa5761953d) ) ROM_LOAD( "072-b11.16l", 0x300000, 0x100000, CRC(55fab05d) SHA1(54db8559d71ed257de9a29c8808654eaea0df9e2) ) - ROM_REGION( 0x140000, "konami", 0 ) /* samples for the 053260 */ + ROM_REGION( 0x140000, "k053260", 0 ) /* samples for the 053260 */ ROM_LOAD( "072-d05.1f", 0x000000, 0x100000, CRC(1397a73b) SHA1(369422c84cca5472967af54b8351e29fcd69f621) ) ROM_LOAD( "072-d04.1d", 0x100000, 0x040000, CRC(78778013) SHA1(edbd6d83b0d1a20df39bb160b92395586fa3c32d) ) ROM_END ROM_START( simpsons4pa ) /* World 4 Player, later? (by use of later leters) */ - ROM_REGION( 0x8b000, "maincpu", 0 ) /* code + banked roms + banked ram */ + ROM_REGION( 0x88000, "maincpu", 0 ) /* code + banked roms + banked ram */ ROM_LOAD( "072-g02.16c", 0x10000, 0x20000, CRC(580ce1d6) SHA1(5b07fb8e8041e1663980aa35d853fdc13b22dac5) ) ROM_LOAD( "072-g01.17c", 0x30000, 0x20000, CRC(9f843def) SHA1(858432b59101b0577c5cec6ac0c7c20ab0780c9a) ) ROM_LOAD( "072-m13.13c", 0x50000, 0x20000, CRC(f36c9423) SHA1(4a7311ffcb2e6916006c1e79dfc231e7fc570781) ) @@ -409,14 +412,14 @@ ROM_START( simpsons4pa ) /* World 4 Player, later? (by use of later leters) */ ROM_LOAD( "072-b10.12n", 0x200000, 0x100000, CRC(577dbd53) SHA1(e603e03e3dcba766074561faa92afafa5761953d) ) ROM_LOAD( "072-b11.16l", 0x300000, 0x100000, CRC(55fab05d) SHA1(54db8559d71ed257de9a29c8808654eaea0df9e2) ) - ROM_REGION( 0x140000, "konami", 0 ) /* samples for the 053260 */ + ROM_REGION( 0x140000, "k053260", 0 ) /* samples for the 053260 */ ROM_LOAD( "072-d05.1f", 0x000000, 0x100000, CRC(1397a73b) SHA1(369422c84cca5472967af54b8351e29fcd69f621) ) ROM_LOAD( "072-d04.1d", 0x100000, 0x040000, CRC(78778013) SHA1(edbd6d83b0d1a20df39bb160b92395586fa3c32d) ) ROM_END ROM_START( simpsons2p ) /* World 2 Player */ - ROM_REGION( 0x8b000, "maincpu", 0 ) /* code + banked roms + banked ram */ + ROM_REGION( 0x88000, "maincpu", 0 ) /* code + banked roms + banked ram */ ROM_LOAD( "072-g02.16c", 0x10000, 0x20000, CRC(580ce1d6) SHA1(5b07fb8e8041e1663980aa35d853fdc13b22dac5) ) ROM_LOAD( "072-p01.17c", 0x30000, 0x20000, CRC(07ceeaea) SHA1(c18255ae1d578c2d53de80d6323cdf41cbe47b57) ) ROM_LOAD( "072-013.13c", 0x50000, 0x20000, CRC(8781105a) SHA1(ef2f16f7a56d3715536511c674df4b3aab1be2bd) ) @@ -437,13 +440,13 @@ ROM_START( simpsons2p ) /* World 2 Player */ ROM_LOAD( "072-b10.12n", 0x200000, 0x100000, CRC(577dbd53) SHA1(e603e03e3dcba766074561faa92afafa5761953d) ) ROM_LOAD( "072-b11.16l", 0x300000, 0x100000, CRC(55fab05d) SHA1(54db8559d71ed257de9a29c8808654eaea0df9e2) ) - ROM_REGION( 0x140000, "konami", 0 ) /* samples for the 053260 */ + ROM_REGION( 0x140000, "k053260", 0 ) /* samples for the 053260 */ ROM_LOAD( "072-d05.1f", 0x000000, 0x100000, CRC(1397a73b) SHA1(369422c84cca5472967af54b8351e29fcd69f621) ) ROM_LOAD( "072-d04.1d", 0x100000, 0x040000, CRC(78778013) SHA1(edbd6d83b0d1a20df39bb160b92395586fa3c32d) ) ROM_END ROM_START( simpsons2p2 ) /* World 2 Player, alt */ - ROM_REGION( 0x8b000, "maincpu", 0 ) /* code + banked roms + banked ram */ + ROM_REGION( 0x88000, "maincpu", 0 ) /* code + banked roms + banked ram */ ROM_LOAD( "072-g02.16c", 0x10000, 0x20000, CRC(580ce1d6) SHA1(5b07fb8e8041e1663980aa35d853fdc13b22dac5) ) ROM_LOAD( "072-p01.17c", 0x30000, 0x20000, CRC(07ceeaea) SHA1(c18255ae1d578c2d53de80d6323cdf41cbe47b57) ) ROM_LOAD( "072-_13.13c", 0x50000, 0x20000, CRC(54e6df66) SHA1(1b83ae56cf1deb51b04880fa421f06568c938a99) ) /* Uknown revision/region code */ @@ -464,13 +467,13 @@ ROM_START( simpsons2p2 ) /* World 2 Player, alt */ ROM_LOAD( "072-b10.12n", 0x200000, 0x100000, CRC(577dbd53) SHA1(e603e03e3dcba766074561faa92afafa5761953d) ) ROM_LOAD( "072-b11.16l", 0x300000, 0x100000, CRC(55fab05d) SHA1(54db8559d71ed257de9a29c8808654eaea0df9e2) ) - ROM_REGION( 0x140000, "konami", 0 ) /* samples for the 053260 */ + ROM_REGION( 0x140000, "k053260", 0 ) /* samples for the 053260 */ ROM_LOAD( "072-d05.1f", 0x000000, 0x100000, CRC(1397a73b) SHA1(369422c84cca5472967af54b8351e29fcd69f621) ) ROM_LOAD( "072-d04.1d", 0x100000, 0x040000, CRC(78778013) SHA1(edbd6d83b0d1a20df39bb160b92395586fa3c32d) ) ROM_END ROM_START( simpsons2pa ) /* Asia 2 Player */ - ROM_REGION( 0x8b000, "maincpu", 0 ) /* code + banked roms + banked ram */ + ROM_REGION( 0x88000, "maincpu", 0 ) /* code + banked roms + banked ram */ ROM_LOAD( "072-g02.16c", 0x10000, 0x20000, CRC(580ce1d6) SHA1(5b07fb8e8041e1663980aa35d853fdc13b22dac5) ) /* Same as both world 2p sets */ ROM_LOAD( "072-p01.17c", 0x30000, 0x20000, CRC(07ceeaea) SHA1(c18255ae1d578c2d53de80d6323cdf41cbe47b57) ) /* Same as both world 2p sets */ ROM_LOAD( "072-113.13c", 0x50000, 0x20000, CRC(8781105a) SHA1(ef2f16f7a56d3715536511c674df4b3aab1be2bd) ) /* Same as world set simpsn2p */ @@ -491,13 +494,13 @@ ROM_START( simpsons2pa ) /* Asia 2 Player */ ROM_LOAD( "072-b10.12n", 0x200000, 0x100000, CRC(577dbd53) SHA1(e603e03e3dcba766074561faa92afafa5761953d) ) ROM_LOAD( "072-b11.16l", 0x300000, 0x100000, CRC(55fab05d) SHA1(54db8559d71ed257de9a29c8808654eaea0df9e2) ) - ROM_REGION( 0x140000, "konami", 0 ) /* samples for the 053260 */ + ROM_REGION( 0x140000, "k053260", 0 ) /* samples for the 053260 */ ROM_LOAD( "072-d05.1f", 0x000000, 0x100000, CRC(1397a73b) SHA1(369422c84cca5472967af54b8351e29fcd69f621) ) ROM_LOAD( "072-d04.1d", 0x100000, 0x040000, CRC(78778013) SHA1(edbd6d83b0d1a20df39bb160b92395586fa3c32d) ) ROM_END ROM_START( simpsons2pj ) /* Japan 2 Player */ - ROM_REGION( 0x8b000, "maincpu", 0 ) /* code + banked roms + banked ram */ + ROM_REGION( 0x88000, "maincpu", 0 ) /* code + banked roms + banked ram */ ROM_LOAD( "072-s02.16c", 0x10000, 0x20000, CRC(265f7a47) SHA1(d39c19a5e303f822313409343b209947f4c47ae4) ) ROM_LOAD( "072-t01.17c", 0x30000, 0x20000, CRC(91de5c2d) SHA1(1e18a5585ed821ec7cda69bdcdbfa4e6c71455c6) ) ROM_LOAD( "072-213.13c", 0x50000, 0x20000, CRC(b326a9ae) SHA1(f222c33f2e8b306f2f0ef6f0da9febbf8219e1a4) ) @@ -518,7 +521,7 @@ ROM_START( simpsons2pj ) /* Japan 2 Player */ ROM_LOAD( "072-b10.12n", 0x200000, 0x100000, CRC(577dbd53) SHA1(e603e03e3dcba766074561faa92afafa5761953d) ) ROM_LOAD( "072-b11.16l", 0x300000, 0x100000, CRC(55fab05d) SHA1(54db8559d71ed257de9a29c8808654eaea0df9e2) ) - ROM_REGION( 0x140000, "konami", 0 ) /* samples for the 053260 */ + ROM_REGION( 0x140000, "k053260", 0 ) /* samples for the 053260 */ ROM_LOAD( "072-d05.1f", 0x000000, 0x100000, CRC(1397a73b) SHA1(369422c84cca5472967af54b8351e29fcd69f621) ) ROM_LOAD( "072-d04.1d", 0x100000, 0x040000, CRC(78778013) SHA1(edbd6d83b0d1a20df39bb160b92395586fa3c32d) ) ROM_END @@ -530,9 +533,9 @@ ROM_END ***************************************************************************/ // the region warning, if one exists, is shown after the high-score screen in attract mode -GAME( 1991, simpsons, 0, simpsons, simpsons, 0, ROT0, "Konami", "The Simpsons (4 Players World, set 1)", 0 ) -GAME( 1991, simpsons4pa, simpsons, simpsons, simpsons, 0, ROT0, "Konami", "The Simpsons (4 Players World, set 2)", 0 ) -GAME( 1991, simpsons2p, simpsons, simpsons, simpsn2p, 0, ROT0, "Konami", "The Simpsons (2 Players World, set 1)", 0 ) -GAME( 1991, simpsons2p2, simpsons, simpsons, simpsons, 0, ROT0, "Konami", "The Simpsons (2 Players World, set 2)", 0 ) -GAME( 1991, simpsons2pa, simpsons, simpsons, simpsn2p, 0, ROT0, "Konami", "The Simpsons (2 Players Asia)", 0 ) -GAME( 1991, simpsons2pj, simpsons, simpsons, simpsn2p, 0, ROT0, "Konami", "The Simpsons (2 Players Japan)", 0 ) +GAME( 1991, simpsons, 0, simpsons, simpsons, 0, ROT0, "Konami", "The Simpsons (4 Players World, set 1)", GAME_SUPPORTS_SAVE ) +GAME( 1991, simpsons4pa, simpsons, simpsons, simpsons, 0, ROT0, "Konami", "The Simpsons (4 Players World, set 2)", GAME_SUPPORTS_SAVE ) +GAME( 1991, simpsons2p, simpsons, simpsons, simpsn2p, 0, ROT0, "Konami", "The Simpsons (2 Players World, set 1)", GAME_SUPPORTS_SAVE ) +GAME( 1991, simpsons2p2, simpsons, simpsons, simpsons, 0, ROT0, "Konami", "The Simpsons (2 Players World, set 2)", GAME_SUPPORTS_SAVE ) +GAME( 1991, simpsons2pa, simpsons, simpsons, simpsn2p, 0, ROT0, "Konami", "The Simpsons (2 Players Asia)", GAME_SUPPORTS_SAVE ) +GAME( 1991, simpsons2pj, simpsons, simpsons, simpsn2p, 0, ROT0, "Konami", "The Simpsons (2 Players Japan)", GAME_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/spy.c b/src/mame/drivers/spy.c index d0044b82384..dff5f19e261 100644 --- a/src/mame/drivers/spy.c +++ b/src/mame/drivers/spy.c @@ -1,19 +1,19 @@ /*************************************************************************** -S.P.Y. (c) 1989 Konami + S.P.Y. (c) 1989 Konami -Similar to Bottom of the Ninth + Similar to Bottom of the Ninth -driver by Nicola Salmoria + driver by Nicola Salmoria -Revisions: + Revisions: -05-10-2002 Acho A. Tang -- simulated PMCU protection(guess only) -- changed priority scheme to fix graphics in 3D levels -- fixed crashes caused by bank switching -- disabled logging and debug messages + 05-10-2002 Acho A. Tang + - simulated PMCU protection(guess only) + - changed priority scheme to fix graphics in 3D levels + - fixed crashes caused by bank switching + - disabled logging and debug messages ***************************************************************************/ @@ -24,68 +24,61 @@ Revisions: #include "sound/3812intf.h" #include "sound/k007232.h" #include "includes/konamipt.h" - -VIDEO_START( spy ); -VIDEO_UPDATE( spy ); - -static UINT8 *pmcram; - -extern void spy_tile_callback(running_machine *machine, int layer,int bank,int *code,int *color,int *flags,int *priority); -extern void spy_sprite_callback(running_machine *machine, int *code,int *color,int *priority_mask,int *shadow); - +#include "includes/spy.h" static INTERRUPT_GEN( spy_interrupt ) { - const device_config *k052109 = devtag_get_device(device->machine, "k052109"); - if (k052109_is_irq_enabled(k052109)) + spy_state *state = (spy_state *)device->machine->driver_data; + + if (k052109_is_irq_enabled(state->k052109)) cpu_set_input_line(device, 0, HOLD_LINE); } - -static int rambank,pmcbank; -static UINT8 *ram; - static READ8_HANDLER( spy_bankedram1_r ) { - if (rambank & 1) + spy_state *state = (spy_state *)space->machine->driver_data; + + if (state->rambank & 1) { return space->machine->generic.paletteram.u8[offset]; } - else if (rambank & 2) + else if (state->rambank & 2) { - if (pmcbank) + if (state->pmcbank) { - //logerror("%04x read pmcram %04x\n",cpu_get_pc(space->cpu),offset); - return pmcram[offset]; + //logerror("%04x read pmcram %04x\n", cpu_get_pc(space->cpu), offset); + return state->pmcram[offset]; } else { - //logerror("%04x read pmc internal ram %04x\n",cpu_get_pc(space->cpu),offset); + //logerror("%04x read pmc internal ram %04x\n", cpu_get_pc(space->cpu), offset); return 0; } } else - return ram[offset]; + return state->ram[offset]; } static WRITE8_HANDLER( spy_bankedram1_w ) { - if (rambank & 1) + spy_state *state = (spy_state *)space->machine->driver_data; + + if (state->rambank & 1) { paletteram_xBBBBBGGGGGRRRRR_be_w(space,offset,data); } - else if (rambank & 2) + else if (state->rambank & 2) { - if (pmcbank) + if (state->pmcbank) { - //logerror("%04x pmcram %04x = %02x\n",cpu_get_pc(space->cpu),offset,data); - pmcram[offset] = data; + //logerror("%04x pmcram %04x = %02x\n", cpu_get_pc(space->cpu), offset, data); + state->pmcram[offset] = data; } //else - //logerror("%04x pmc internal ram %04x = %02x\n",cpu_get_pc(space->cpu),offset,data); + //logerror("%04x pmc internal ram %04x = %02x\n", cpu_get_pc(space->cpu), offset, data); } else - ram[offset] = data; + state->ram[offset] = data; } /* @@ -158,66 +151,70 @@ this is the data written to internal ram on startup: static WRITE8_HANDLER( bankswitch_w ) { - UINT8 *rom = memory_region(space->machine, "maincpu"); - int offs; + int bank; - /* bit 0 = RAM bank? */ -if ((data & 1) == 0) popmessage("bankswitch RAM bank 0"); + /* bit 0 = RAM bank */ + if ((data & 1) == 0) + popmessage("bankswitch RAM bank 0"); /* bit 1-4 = ROM bank */ - if (data & 0x10) offs = 0x20000 + (data & 0x06) * 0x1000; - else offs = 0x10000 + (data & 0x0e) * 0x1000; - memory_set_bankptr(space->machine, "bank1",&rom[offs]); + if (data & 0x10) + bank = 8 + ((data & 0x06) >> 1); + else + bank = ((data & 0x0e) >> 1); + + memory_set_bank(space->machine, "bank1", bank); } -//AT -static void spy_collision(void) +static void spy_collision( running_machine *machine ) { #define MAX_SPRITES 64 #define DEF_NEAR_PLANE 0x6400 #define NEAR_PLANE_ZOOM 0x0100 #define FAR_PLANE_ZOOM 0x0000 + spy_state *state = (spy_state *)machine->driver_data; int op1, x1, w1, z1, d1, y1, h1; int op2, x2, w2, z2, d2, y2, h2; int mode, i, loopend, nearplane; - mode = pmcram[0x1]; - op1 = pmcram[0x2]; + mode = state->pmcram[0x1]; + op1 = state->pmcram[0x2]; if (op1 == 1) { - x1 = (pmcram[0x3]<<8) + pmcram[0x4]; - w1 = (pmcram[0x5]<<8) + pmcram[0x6]; - z1 = (pmcram[0x7]<<8) + pmcram[0x8]; - d1 = (pmcram[0x9]<<8) + pmcram[0xa]; - y1 = (pmcram[0xb]<<8) + pmcram[0xc]; - h1 = (pmcram[0xd]<<8) + pmcram[0xe]; - - for (i=16; i<14*MAX_SPRITES + 2; i+=14) + x1 = (state->pmcram[0x3] << 8) + state->pmcram[0x4]; + w1 = (state->pmcram[0x5] << 8) + state->pmcram[0x6]; + z1 = (state->pmcram[0x7] << 8) + state->pmcram[0x8]; + d1 = (state->pmcram[0x9] << 8) + state->pmcram[0xa]; + y1 = (state->pmcram[0xb] << 8) + state->pmcram[0xc]; + h1 = (state->pmcram[0xd] << 8) + state->pmcram[0xe]; + + for (i = 16; i < 14 * MAX_SPRITES + 2; i += 14) { - op2 = pmcram[i]; - if (op2 || mode==0x0c) + op2 = state->pmcram[i]; + if (op2 || mode == 0x0c) { - x2 = (pmcram[i+0x1]<<8) + pmcram[i+0x2]; - w2 = (pmcram[i+0x3]<<8) + pmcram[i+0x4]; - z2 = (pmcram[i+0x5]<<8) + pmcram[i+0x6]; - d2 = (pmcram[i+0x7]<<8) + pmcram[i+0x8]; - y2 = (pmcram[i+0x9]<<8) + pmcram[i+0xa]; - h2 = (pmcram[i+0xb]<<8) + pmcram[i+0xc]; + x2 = (state->pmcram[i + 0x1] << 8) + state->pmcram[i + 0x2]; + w2 = (state->pmcram[i + 0x3] << 8) + state->pmcram[i + 0x4]; + z2 = (state->pmcram[i + 0x5] << 8) + state->pmcram[i + 0x6]; + d2 = (state->pmcram[i + 0x7] << 8) + state->pmcram[i + 0x8]; + y2 = (state->pmcram[i + 0x9] << 8) + state->pmcram[i + 0xa]; + h2 = (state->pmcram[i + 0xb] << 8) + state->pmcram[i + 0xc]; /* The mad scientist's laser truck has both a high sprite center and a small height value. It has to be measured from the ground to detect correctly. */ - if (w2==0x58 && d2==0x04 && h2==0x10 && y2==0x30) h2 = y2; + if (w2 == 0x58 && d2 == 0x04 && h2 == 0x10 && y2 == 0x30) + h2 = y2; // what other sprites fall into: - if ( (abs(x1-x2)<w1+w2) && (abs(z1-z2)<d1+d2) && (abs(y1-y2)<h1+h2) ) + if ((abs(x1 - x2) < w1 + w2) && (abs(z1 - z2) < d1 + d2) && (abs(y1 - y2) < h1 + h2)) { - pmcram[0xf] = 0; - pmcram[i+0xd] = 0; + state->pmcram[0xf] = 0; + state->pmcram[i + 0xd] = 0; } else - pmcram[i+0xd] = 1; + state->pmcram[i + 0xd] = 1; } } } @@ -228,33 +225,33 @@ static void spy_collision(void) the scale factors from the PMCU code. Plugging 0 and 0x100 to the far and near planes seems to do the trick though. */ - loopend = (pmcram[0]<<8) + pmcram[1]; - nearplane = (pmcram[2]<<8) + pmcram[3]; + loopend = (state->pmcram[0] << 8) + state->pmcram[1]; + nearplane = (state->pmcram[2] << 8) + state->pmcram[3]; // fail safe - if (loopend > MAX_SPRITES) loopend = MAX_SPRITES; - if (!nearplane) nearplane = DEF_NEAR_PLANE; + if (loopend > MAX_SPRITES) + loopend = MAX_SPRITES; + if (!nearplane) + nearplane = DEF_NEAR_PLANE; - loopend = (loopend<<1) + 4; + loopend = (loopend << 1) + 4; - for (i=4; i<loopend; i+=2) + for (i = 4; i < loopend; i += 2) { - op2 = (pmcram[i]<<8) + pmcram[i+1]; + op2 = (state->pmcram[i] << 8) + state->pmcram[i + 1]; op2 = (op2 * (NEAR_PLANE_ZOOM - FAR_PLANE_ZOOM)) / nearplane + FAR_PLANE_ZOOM; - pmcram[i] = op2 >> 8; - pmcram[i+1] = op2 & 0xff; + state->pmcram[i] = op2 >> 8; + state->pmcram[i + 1] = op2 & 0xff; } - memset(pmcram+loopend, 0, 0x800-loopend); // clean up for next frame + memset(state->pmcram + loopend, 0, 0x800 - loopend); // clean up for next frame } } -//ZT + static WRITE8_HANDLER( spy_3f90_w ) { - const device_config *k052109 = devtag_get_device(space->machine, "k052109"); - extern int spy_video_enable; - static int old; + spy_state *state = (spy_state *)space->machine->driver_data; /********************************************************************* * @@ -299,20 +296,20 @@ static WRITE8_HANDLER( spy_3f90_w ) coin_counter_w(space->machine, 1, data & 0x02); /* bit 2 = enable char ROM reading through the video RAM */ - k052109_set_rmrd_line(k052109, (data & 0x04) ? ASSERT_LINE : CLEAR_LINE); + k052109_set_rmrd_line(state->k052109, (data & 0x04) ? ASSERT_LINE : CLEAR_LINE); /* bit 3 = disable video */ - spy_video_enable = ~(data & 0x08); + state->video_enable = ~(data & 0x08); /* bit 4 = read RAM at 0000 (if set) else read color palette RAM */ /* bit 5 = PMCBK */ - rambank = (data & 0x30) >> 4; + state->rambank = (data & 0x30) >> 4; /* bit 7 = PMC-BK */ - pmcbank = (data & 0x80) >> 7; + state->pmcbank = (data & 0x80) >> 7; -//logerror("%04x: 3f90_w %02x\n",cpu_get_pc(space->cpu),data); +//logerror("%04x: 3f90_w %02x\n", cpu_get_pc(space->cpu), data); /* bit 6 = PMC-START */ - if ((data & 0x40) && !(old & 0x40)) + if ((data & 0x40) && !(state->old_3f90 & 0x40)) { /* we should handle collision here */ //AT @@ -321,74 +318,74 @@ static WRITE8_HANDLER( spy_3f90_w ) int i; logerror("collision test:\n"); - for (i = 0;i < 0xfe;i++) + for (i = 0; i < 0xfe; i++) { - logerror("%02x ",pmcram[i]); + logerror("%02x ", state->pmcram[i]); if (i == 0x0f || (i > 0x10 && (i - 0x10) % 14 == 13)) logerror("\n"); } } - spy_collision(); + spy_collision(space->machine); //ZT - cputag_set_input_line(space->machine, "maincpu", M6809_FIRQ_LINE, HOLD_LINE); + cpu_set_input_line(state->maincpu, M6809_FIRQ_LINE, HOLD_LINE); } - old = data; + state->old_3f90 = data; } static WRITE8_HANDLER( spy_sh_irqtrigger_w ) { - cputag_set_input_line_and_vector(space->machine, "audiocpu", 0, HOLD_LINE, 0xff); + spy_state *state = (spy_state *)space->machine->driver_data; + cpu_set_input_line_and_vector(state->audiocpu, 0, HOLD_LINE, 0xff); } static WRITE8_HANDLER( sound_bank_w ) { - int bank_A,bank_B; + spy_state *state = (spy_state *)space->machine->driver_data; + int bank_A, bank_B; bank_A = (data >> 0) & 0x03; bank_B = (data >> 2) & 0x03; - k007232_set_bank(devtag_get_device(space->machine, "konami1"),bank_A,bank_B); + k007232_set_bank(state->k007232_1, bank_A, bank_B); + bank_A = (data >> 4) & 0x03; bank_B = (data >> 6) & 0x03; - k007232_set_bank(devtag_get_device(space->machine, "konami2"),bank_A,bank_B); + k007232_set_bank(state->k007232_2, bank_A, bank_B); } - static READ8_HANDLER( k052109_051960_r ) { - const device_config *k052109 = devtag_get_device(space->machine, "k052109"); - const device_config *k051960 = devtag_get_device(space->machine, "k051960"); + spy_state *state = (spy_state *)space->machine->driver_data; - if (k052109_get_rmrd_line(k052109) == CLEAR_LINE) + if (k052109_get_rmrd_line(state->k052109) == CLEAR_LINE) { if (offset >= 0x3800 && offset < 0x3808) - return k051937_r(k051960, offset - 0x3800); + return k051937_r(state->k051960, offset - 0x3800); else if (offset < 0x3c00) - return k052109_r(k052109, offset); + return k052109_r(state->k052109, offset); else - return k051960_r(k051960, offset - 0x3c00); + return k051960_r(state->k051960, offset - 0x3c00); } else - return k052109_r(k052109, offset); + return k052109_r(state->k052109, offset); } static WRITE8_HANDLER( k052109_051960_w ) { - const device_config *k052109 = devtag_get_device(space->machine, "k052109"); - const device_config *k051960 = devtag_get_device(space->machine, "k051960"); + spy_state *state = (spy_state *)space->machine->driver_data; if (offset >= 0x3800 && offset < 0x3808) - k051937_w(k051960, offset - 0x3800, data); + k051937_w(state->k051960, offset - 0x3800, data); else if (offset < 0x3c00) - k052109_w(k052109, offset, data); + k052109_w(state->k052109, offset, data); else - k051960_w(k051960, offset - 0x3c00, data); + k051960_w(state->k051960, offset - 0x3c00, data); } static ADDRESS_MAP_START( spy_map, ADDRESS_SPACE_PROGRAM, 8 ) - AM_RANGE(0x0000, 0x07ff) AM_READWRITE(spy_bankedram1_r,spy_bankedram1_w) AM_BASE(&ram) + AM_RANGE(0x0000, 0x07ff) AM_READWRITE(spy_bankedram1_r, spy_bankedram1_w) AM_BASE_MEMBER(spy_state, ram) AM_RANGE(0x0800, 0x1aff) AM_RAM AM_RANGE(0x3f80, 0x3f80) AM_WRITE(bankswitch_w) AM_RANGE(0x3f90, 0x3f90) AM_WRITE(spy_3f90_w) @@ -409,8 +406,8 @@ static ADDRESS_MAP_START( spy_sound_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0x0000, 0x7fff) AM_ROM AM_RANGE(0x8000, 0x87ff) AM_RAM AM_RANGE(0x9000, 0x9000) AM_WRITE(sound_bank_w) - AM_RANGE(0xa000, 0xa00d) AM_DEVREADWRITE("konami1", k007232_r, k007232_w) - AM_RANGE(0xb000, 0xb00d) AM_DEVREADWRITE("konami2", k007232_r, k007232_w) + AM_RANGE(0xa000, 0xa00d) AM_DEVREADWRITE("k007232_1", k007232_r, k007232_w) + AM_RANGE(0xb000, 0xb00d) AM_DEVREADWRITE("k007232_2", k007232_r, k007232_w) AM_RANGE(0xc000, 0xc001) AM_DEVREADWRITE("ymsnd", ym3812_r,ym3812_w) AM_RANGE(0xd000, 0xd000) AM_READ(soundlatch_r) ADDRESS_MAP_END @@ -469,32 +466,22 @@ INPUT_PORTS_END -static void volume_callback0(const device_config *device, int v) -{ - k007232_set_volume(device,0,(v >> 4) * 0x11,0); - k007232_set_volume(device,1,0,(v & 0x0f) * 0x11); -} - -static void volume_callback1(const device_config *device, int v) +static void volume_callback( const device_config *device, int v ) { - k007232_set_volume(device,0,(v >> 4) * 0x11,0); - k007232_set_volume(device,1,0,(v & 0x0f) * 0x11); + k007232_set_volume(device, 0, (v >> 4) * 0x11, 0); + k007232_set_volume(device, 1, 0, (v & 0x0f) * 0x11); } -static const k007232_interface k007232_interface_1 = +static const k007232_interface spy_k007232_interface = { - volume_callback0 -}; - -static const k007232_interface k007232_interface_2 = -{ - volume_callback1 + volume_callback }; -static void irqhandler(const device_config *device, int linestate) +static void irqhandler( const device_config *device, int linestate ) { - cputag_set_input_line(device->machine, "audiocpu", INPUT_LINE_NMI, linestate); + spy_state *state = (spy_state *)device->machine->driver_data; + cpu_set_input_line(state->audiocpu, INPUT_LINE_NMI, linestate); } static const ym3812_interface ym3812_config = @@ -503,7 +490,6 @@ static const ym3812_interface ym3812_config = }; - static const k052109_interface spy_k052109_intf = { "gfx1", 0, @@ -520,8 +506,46 @@ static const k051960_interface spy_k051960_intf = spy_sprite_callback }; +static MACHINE_START( spy ) +{ + spy_state *state = (spy_state *)machine->driver_data; + UINT8 *ROM = memory_region(machine, "maincpu"); + + memory_configure_bank(machine, "bank1", 0, 12, &ROM[0x10000], 0x2000); + + machine->generic.paletteram.u8 = auto_alloc_array_clear(machine, UINT8, 0x800); + state->pmcram = auto_alloc_array_clear(machine, UINT8, 0x800); + + state->maincpu = devtag_get_device(machine, "maincpu"); + state->audiocpu = devtag_get_device(machine, "audiocpu"); + state->k052109 = devtag_get_device(machine, "k052109"); + state->k051960 = devtag_get_device(machine, "k051960"); + state->k007232_1 = devtag_get_device(machine, "k007232_1"); + state->k007232_2 = devtag_get_device(machine, "k007232_2"); + + state_save_register_global(machine, state->rambank); + state_save_register_global(machine, state->pmcbank); + state_save_register_global(machine, state->video_enable); + state_save_register_global(machine, state->old_3f90); + state_save_register_global_pointer(machine, machine->generic.paletteram.u8, 0x800); + state_save_register_global_pointer(machine, state->pmcram, 0x800); +} + +static MACHINE_RESET( spy ) +{ + spy_state *state = (spy_state *)machine->driver_data; + + state->rambank = 0; + state->pmcbank = 0; + state->video_enable = 0; + state->old_3f90 = -1; +} + static MACHINE_DRIVER_START( spy ) + /* driver data */ + MDRV_DRIVER_DATA(spy_state) + /* basic machine hardware */ MDRV_CPU_ADD("maincpu", M6809, 3000000) /* ? */ MDRV_CPU_PROGRAM_MAP(spy_map) @@ -531,6 +555,9 @@ static MACHINE_DRIVER_START( spy ) MDRV_CPU_PROGRAM_MAP(spy_sound_map) /* nmi by the sound chip */ + MDRV_MACHINE_START(spy) + MDRV_MACHINE_RESET(spy) + /* video hardware */ MDRV_VIDEO_ATTRIBUTES(VIDEO_HAS_SHADOWS) @@ -556,13 +583,13 @@ static MACHINE_DRIVER_START( spy ) MDRV_SOUND_CONFIG(ym3812_config) MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) - MDRV_SOUND_ADD("konami1", K007232, 3579545) - MDRV_SOUND_CONFIG(k007232_interface_1) + MDRV_SOUND_ADD("k007232_1", K007232, 3579545) + MDRV_SOUND_CONFIG(spy_k007232_interface) MDRV_SOUND_ROUTE(0, "mono", 0.20) MDRV_SOUND_ROUTE(1, "mono", 0.20) - MDRV_SOUND_ADD("konami2", K007232, 3579545) - MDRV_SOUND_CONFIG(k007232_interface_2) + MDRV_SOUND_ADD("k007232_2", K007232, 3579545) + MDRV_SOUND_CONFIG(spy_k007232_interface) MDRV_SOUND_ROUTE(0, "mono", 0.20) MDRV_SOUND_ROUTE(1, "mono", 0.20) MACHINE_DRIVER_END @@ -575,7 +602,7 @@ MACHINE_DRIVER_END ***************************************************************************/ ROM_START( spy ) - ROM_REGION( 0x29000, "maincpu", 0 ) /* code + banked roms + space for banked ram */ + ROM_REGION( 0x28000, "maincpu", 0 ) /* code + banked roms + space for banked ram */ ROM_LOAD( "857n03.bin", 0x10000, 0x10000, CRC(97993b38) SHA1(0afd561bc85fcbfe30f2d16807424ceec7188ce7) ) ROM_LOAD( "857n02.bin", 0x20000, 0x08000, CRC(31a97efe) SHA1(6c9ec3954e4d16634bf95835b8b404d3a6ef6e24) ) ROM_CONTINUE( 0x08000, 0x08000 ) @@ -594,15 +621,15 @@ ROM_START( spy ) ROM_REGION( 0x0200, "proms", 0 ) ROM_LOAD( "857a10.bin", 0x0000, 0x0100, CRC(32758507) SHA1(c21f89ad253502968a755fb0d23da98319f9cd93) ) /* priority encoder (not used) */ - ROM_REGION( 0x40000, "konami1", 0 ) /* samples for 007232 #0 */ + ROM_REGION( 0x40000, "k007232_1", 0 ) /* samples for 007232 #0 */ ROM_LOAD( "857b07.bin", 0x00000, 0x40000, CRC(ce3512d4) SHA1(1e7c3feabfc3ac89056982b76de39e283cf5894d) ) - ROM_REGION( 0x40000, "konami2", 0 ) /* samples for 007232 #1 */ + ROM_REGION( 0x40000, "k007232_2", 0 ) /* samples for 007232 #1 */ ROM_LOAD( "857b04.bin", 0x00000, 0x40000, CRC(20b83c13) SHA1(63062f1c0a9adbbced3d3d73682a2cd1217bee7d) ) ROM_END ROM_START( spyu ) - ROM_REGION( 0x29000, "maincpu", 0 ) /* code + banked roms + space for banked ram */ + ROM_REGION( 0x28000, "maincpu", 0 ) /* code + banked roms + space for banked ram */ ROM_LOAD( "857m03.bin", 0x10000, 0x10000, CRC(3bd87fa4) SHA1(257371ef31c8adcdc04f46e989b7a2f3531c2ab1) ) ROM_LOAD( "857m02.bin", 0x20000, 0x08000, CRC(306cc659) SHA1(91d150b8d320bf19c12bc46103ffdffacf4387c3) ) ROM_CONTINUE( 0x08000, 0x08000 ) @@ -621,21 +648,13 @@ ROM_START( spyu ) ROM_REGION( 0x0200, "proms", 0 ) ROM_LOAD( "857a10.bin", 0x0000, 0x0100, CRC(32758507) SHA1(c21f89ad253502968a755fb0d23da98319f9cd93) ) /* priority encoder (not used) */ - ROM_REGION( 0x40000, "konami1", 0 ) /* samples for 007232 #0 */ + ROM_REGION( 0x40000, "k007232_1", 0 ) /* samples for 007232 #0 */ ROM_LOAD( "857b07.bin", 0x00000, 0x40000, CRC(ce3512d4) SHA1(1e7c3feabfc3ac89056982b76de39e283cf5894d) ) - ROM_REGION( 0x40000, "konami2", 0 ) /* samples for 007232 #1 */ + ROM_REGION( 0x40000, "k007232_2", 0 ) /* samples for 007232 #1 */ ROM_LOAD( "857b04.bin", 0x00000, 0x40000, CRC(20b83c13) SHA1(63062f1c0a9adbbced3d3d73682a2cd1217bee7d) ) ROM_END -static DRIVER_INIT( spy ) -{ - machine->generic.paletteram.u8 = &memory_region(machine, "maincpu")[0x28000]; - pmcram = &memory_region(machine, "maincpu")[0x28800]; -} - - - -GAME( 1989, spy, 0, spy, spy, spy, ROT0, "Konami", "S.P.Y. - Special Project Y (World ver. N)", 0) -GAME( 1989, spyu, spy, spy, spy, spy, ROT0, "Konami", "S.P.Y. - Special Project Y (US ver. M)", 0) +GAME( 1989, spy, 0, spy, spy, 0, ROT0, "Konami", "S.P.Y. - Special Project Y (World ver. N)", GAME_SUPPORTS_SAVE ) +GAME( 1989, spyu, spy, spy, spy, 0, ROT0, "Konami", "S.P.Y. - Special Project Y (US ver. M)", GAME_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/surpratk.c b/src/mame/drivers/surpratk.c index e28722851c6..11471d46e9a 100644 --- a/src/mame/drivers/surpratk.c +++ b/src/mame/drivers/surpratk.c @@ -1,10 +1,10 @@ /*************************************************************************** -Surprise Attack (Konami GX911) (c) 1990 Konami + Surprise Attack (Konami GX911) (c) 1990 Konami -Very similar to Parodius + Very similar to Parodius -driver by Nicola Salmoria + driver by Nicola Salmoria ***************************************************************************/ @@ -13,78 +13,76 @@ driver by Nicola Salmoria #include "video/konicdev.h" #include "sound/2151intf.h" #include "includes/konamipt.h" +#include "includes/surpratk.h" /* prototypes */ -static MACHINE_RESET( surpratk ); static KONAMI_SETLINES_CALLBACK( surpratk_banking ); -VIDEO_UPDATE( surpratk ); - -extern void surpratk_tile_callback(running_machine *machine, int layer,int bank,int *code,int *color,int *flags,int *priority); -extern void surpratk_sprite_callback(running_machine *machine, int *code,int *color,int *priority_mask); - - -static int videobank; -static UINT8 *ram; static INTERRUPT_GEN( surpratk_interrupt ) { - const device_config *k052109 = devtag_get_device(device->machine, "k052109"); - if (k052109_is_irq_enabled(k052109)) - cpu_set_input_line(device,0,HOLD_LINE); + surpratk_state *state = (surpratk_state *)device->machine->driver_data; + if (k052109_is_irq_enabled(state->k052109)) + cpu_set_input_line(device, 0, HOLD_LINE); } static READ8_HANDLER( bankedram_r ) { - const device_config *k053244 = devtag_get_device(space->machine, "k053244"); - if (videobank & 0x02) + surpratk_state *state = (surpratk_state *)space->machine->driver_data; + + if (state->videobank & 0x02) { - if (videobank & 0x04) + if (state->videobank & 0x04) return space->machine->generic.paletteram.u8[offset + 0x0800]; else return space->machine->generic.paletteram.u8[offset]; } - else if (videobank & 0x01) - return k053245_r(k053244, offset); + else if (state->videobank & 0x01) + return k053245_r(state->k053244, offset); else - return ram[offset]; + return state->ram[offset]; } static WRITE8_HANDLER( bankedram_w ) { - const device_config *k053244 = devtag_get_device(space->machine, "k053244"); - if (videobank & 0x02) + surpratk_state *state = (surpratk_state *)space->machine->driver_data; + + if (state->videobank & 0x02) { - if (videobank & 0x04) + if (state->videobank & 0x04) paletteram_xBBBBBGGGGGRRRRR_be_w(space,offset + 0x0800,data); else paletteram_xBBBBBGGGGGRRRRR_be_w(space,offset,data); } - else if (videobank & 0x01) - k053245_w(k053244, offset, data); + else if (state->videobank & 0x01) + k053245_w(state->k053244, offset, data); else - ram[offset] = data; + state->ram[offset] = data; } static WRITE8_HANDLER( surpratk_videobank_w ) { -logerror("%04x: videobank = %02x\n",cpu_get_pc(space->cpu),data); + surpratk_state *state = (surpratk_state *)space->machine->driver_data; + + logerror("%04x: videobank = %02x\n",cpu_get_pc(space->cpu),data); /* bit 0 = select 053245 at 0000-07ff */ /* bit 1 = select palette at 0000-07ff */ /* bit 2 = select palette bank 0 or 1 */ - videobank = data; + state->videobank = data; } static WRITE8_HANDLER( surpratk_5fc0_w ) { - const device_config *k052109 = devtag_get_device(space->machine, "k052109"); - if ((data & 0xf4) != 0x10) logerror("%04x: 3fc0 = %02x\n",cpu_get_pc(space->cpu),data); + surpratk_state *state = (surpratk_state *)space->machine->driver_data; + + if ((data & 0xf4) != 0x10) + logerror("%04x: 3fc0 = %02x\n",cpu_get_pc(space->cpu),data); /* bit 0/1 = coin counters */ - coin_counter_w(space->machine, 0,data & 0x01); - coin_counter_w(space->machine, 1,data & 0x02); + coin_counter_w(space->machine, 0, data & 0x01); + coin_counter_w(space->machine, 1, data & 0x02); /* bit 3 = enable char ROM reading through the video RAM */ - k052109_set_rmrd_line(k052109, (data & 0x08) ? ASSERT_LINE : CLEAR_LINE); + k052109_set_rmrd_line(state->k052109, (data & 0x08) ? ASSERT_LINE : CLEAR_LINE); /* other bits unknown */ } @@ -93,7 +91,7 @@ static WRITE8_HANDLER( surpratk_5fc0_w ) /********************************************/ static ADDRESS_MAP_START( surpratk_map, ADDRESS_SPACE_PROGRAM, 8 ) - AM_RANGE(0x0000, 0x07ff) AM_READWRITE(bankedram_r, bankedram_w) AM_BASE(&ram) + AM_RANGE(0x0000, 0x07ff) AM_READWRITE(bankedram_r, bankedram_w) AM_BASE_MEMBER(surpratk_state, ram) AM_RANGE(0x0800, 0x1fff) AM_RAM AM_RANGE(0x2000, 0x3fff) AM_ROMBANK("bank1") /* banked ROM */ AM_RANGE(0x5f8c, 0x5f8c) AM_READ_PORT("P1") @@ -170,9 +168,10 @@ INPUT_PORTS_END -static void irqhandler(const device_config *device, int linestate) +static void irqhandler( const device_config *device, int linestate ) { - cputag_set_input_line(device->machine, "maincpu", KONAMI_FIRQ_LINE, linestate); + surpratk_state *state = (surpratk_state *)device->machine->driver_data; + cpu_set_input_line(state->maincpu, KONAMI_FIRQ_LINE, linestate); } static const ym2151_interface ym2151_config = @@ -199,13 +198,57 @@ static const k05324x_interface surpratk_k05324x_intf = surpratk_sprite_callback }; +static MACHINE_START( surpratk ) +{ + surpratk_state *state = (surpratk_state *)machine->driver_data; + UINT8 *ROM = memory_region(machine, "maincpu"); + + memory_configure_bank(machine, "bank1", 0, 28, &ROM[0x10000], 0x2000); + memory_configure_bank(machine, "bank1", 28, 4, &ROM[0x08000], 0x2000); + memory_set_bank(machine, "bank1", 0); + + machine->generic.paletteram.u8 = auto_alloc_array_clear(machine, UINT8, 0x1000); + + state->maincpu = devtag_get_device(machine, "maincpu"); + state->k053244 = devtag_get_device(machine, "k053244"); + state->k053251 = devtag_get_device(machine, "k053251"); + state->k052109 = devtag_get_device(machine, "k052109"); + + state_save_register_global(machine, state->videobank); + state_save_register_global(machine, state->sprite_colorbase); + state_save_register_global_array(machine, state->layer_colorbase); + state_save_register_global_array(machine, state->layerpri); + state_save_register_global_pointer(machine, machine->generic.paletteram.u8, 0x1000); +} + +static MACHINE_RESET( surpratk ) +{ + surpratk_state *state = (surpratk_state *)machine->driver_data; + int i; + + konami_configure_set_lines(cputag_get_cpu(machine, "maincpu"), surpratk_banking); + + for (i = 0; i < 3; i++) + { + state->layerpri[i] = 0; + state->layer_colorbase[i] = 0; + } + + state->sprite_colorbase = 0; + state->videobank = 0; +} + static MACHINE_DRIVER_START( surpratk ) + /* driver data */ + MDRV_DRIVER_DATA(surpratk_state) + /* basic machine hardware */ MDRV_CPU_ADD("maincpu", KONAMI, 3000000) /* 053248 */ MDRV_CPU_PROGRAM_MAP(surpratk_map) MDRV_CPU_VBLANK_INT("screen", surpratk_interrupt) + MDRV_MACHINE_START(surpratk) MDRV_MACHINE_RESET(surpratk) /* video hardware */ @@ -243,7 +286,7 @@ MACHINE_DRIVER_END ROM_START( suratk ) - ROM_REGION( 0x51000, "maincpu", 0 ) /* code + banked roms + palette RAM */ + ROM_REGION( 0x48000, "maincpu", 0 ) /* code + banked roms + palette RAM */ ROM_LOAD( "911j01.f5", 0x10000, 0x20000, CRC(1e647881) SHA1(241e421d5599ebd9fcfb8be9c48dfd3b4c671958) ) ROM_LOAD( "911k02.h5", 0x30000, 0x18000, CRC(ef10e7b6) SHA1(0b41a929c0c579d688653a8d90dd6b40db12cfb3) ) ROM_CONTINUE( 0x08000, 0x08000 ) @@ -258,7 +301,7 @@ ROM_START( suratk ) ROM_END ROM_START( suratka ) - ROM_REGION( 0x51000, "maincpu", 0 ) /* code + banked roms + palette RAM */ + ROM_REGION( 0x48000, "maincpu", 0 ) /* code + banked roms + palette RAM */ ROM_LOAD( "911j01.f5", 0x10000, 0x20000, CRC(1e647881) SHA1(241e421d5599ebd9fcfb8be9c48dfd3b4c671958) ) ROM_LOAD( "911l02.h5", 0x30000, 0x18000, CRC(11db8288) SHA1(09fe187855172ebf0c57f561cce7f41e47f53114) ) ROM_CONTINUE( 0x08000, 0x08000 ) @@ -273,7 +316,7 @@ ROM_START( suratka ) ROM_END ROM_START( suratkj ) - ROM_REGION( 0x51000, "maincpu", 0 ) /* code + banked roms + palette RAM */ + ROM_REGION( 0x48000, "maincpu", 0 ) /* code + banked roms + palette RAM */ ROM_LOAD( "911m01.f5", 0x10000, 0x20000, CRC(ee5b2cc8) SHA1(4b05f7ba4e804a3bccb41fe9d3258cbcfe5324aa) ) ROM_LOAD( "911m02.h5", 0x30000, 0x18000, CRC(5d4148a8) SHA1(4fa5947db777b4c742775d588dea38758812a916) ) ROM_CONTINUE( 0x08000, 0x08000 ) @@ -295,24 +338,11 @@ ROM_END static KONAMI_SETLINES_CALLBACK( surpratk_banking ) { - UINT8 *RAM = memory_region(device->machine, "maincpu"); - int offs = 0; - -logerror("%04x: setlines %02x\n",cpu_get_pc(device),lines); - - offs = 0x10000 + ((lines & 0x1f) * 0x2000); - if (offs >= 0x48000) offs -= 0x40000; - memory_set_bankptr(device->machine, "bank1",&RAM[offs]); -} - -static MACHINE_RESET( surpratk ) -{ - konami_configure_set_lines(cputag_get_cpu(machine, "maincpu"), surpratk_banking); - - machine->generic.paletteram.u8 = &memory_region(machine, "maincpu")[0x48000]; + logerror("%04x: setlines %02x\n",cpu_get_pc(device), lines); + memory_set_bank(device->machine, "bank1", lines & 0x1f); } -GAME( 1990, suratk, 0, surpratk, surpratk, 0, ROT0, "Konami", "Surprise Attack (World ver. K)", 0 ) -GAME( 1990, suratka, suratk, surpratk, surpratk, 0, ROT0, "Konami", "Surprise Attack (Asia ver. L)", 0 ) -GAME( 1990, suratkj, suratk, surpratk, surpratk, 0, ROT0, "Konami", "Surprise Attack (Japan ver. M)", 0 ) +GAME( 1990, suratk, 0, surpratk, surpratk, 0, ROT0, "Konami", "Surprise Attack (World ver. K)", GAME_SUPPORTS_SAVE ) +GAME( 1990, suratka, suratk, surpratk, surpratk, 0, ROT0, "Konami", "Surprise Attack (Asia ver. L)", GAME_SUPPORTS_SAVE ) +GAME( 1990, suratkj, suratk, surpratk, surpratk, 0, ROT0, "Konami", "Surprise Attack (Japan ver. M)", GAME_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/tail2nos.c b/src/mame/drivers/tail2nos.c index a00a814a675..27efe78d1a3 100644 --- a/src/mame/drivers/tail2nos.c +++ b/src/mame/drivers/tail2nos.c @@ -1,11 +1,11 @@ /*************************************************************************** -Tail to Nose / Super Formula - (c) 1989 Video System Co. + Tail to Nose / Super Formula - (c) 1989 Video System Co. -Driver by Nicola Salmoria + Driver by Nicola Salmoria -press F1+F3 to see ROM/RAM tests and the final animation + press F1+F3 to see ROM/RAM tests and the final animation ***************************************************************************/ @@ -14,61 +14,23 @@ press F1+F3 to see ROM/RAM tests and the final animation #include "video/konicdev.h" #include "cpu/z80/z80.h" #include "sound/2608intf.h" - - -extern UINT16 *tail2nos_bgvideoram; -extern void tail2nos_zoom_callback(running_machine *machine, int *code,int *color,int *flags); - -WRITE16_HANDLER( tail2nos_bgvideoram_w ); -READ16_HANDLER( tail2nos_zoomdata_r ); -WRITE16_HANDLER( tail2nos_zoomdata_w ); -WRITE16_HANDLER( tail2nos_gfxbank_w ); -VIDEO_START( tail2nos ); -VIDEO_UPDATE( tail2nos ); - - -static MACHINE_RESET( tail2nos ) -{ - /* point to the extra ROMs */ - memory_set_bankptr(machine, "bank1",memory_region(machine, "user1")); - memory_set_bankptr(machine, "bank2",memory_region(machine, "user2")); - - /* initialize sound bank */ - memory_set_bankptr(machine, "bank3",memory_region(machine, "audiocpu") + 0x10000); -} +#include "includes/tail2nos.h" static WRITE16_HANDLER( sound_command_w ) { + tail2nos_state *state = (tail2nos_state *)space->machine->driver_data; + if (ACCESSING_BITS_0_7) { - soundlatch_w(space,offset,data & 0xff); - cputag_set_input_line(space->machine, "audiocpu", INPUT_LINE_NMI, PULSE_LINE); + soundlatch_w(space, offset, data & 0xff); + cpu_set_input_line(state->audiocpu, INPUT_LINE_NMI, PULSE_LINE); } } -#if 0 -static READ16_HANDLER( tail2nos_K051316_0_r ) -{ - return K051316_0_r(space,offset); -} - -static WRITE16_HANDLER( tail2nos_K051316_0_w ) -{ - if (ACCESSING_BITS_0_7) - K051316_0_w(space,offset,data & 0xff); -} - -static WRITE16_HANDLER( tail2nos_K051316_ctrl_0_w ) -{ - if (ACCESSING_BITS_0_7) - K051316_ctrl_0_w(space,offset,data & 0xff); -} -#endif - static WRITE8_DEVICE_HANDLER( sound_bankswitch_w ) { - memory_set_bankptr(device->machine, "bank3",memory_region(device->machine, "audiocpu") + 0x10000 + (data & 0x01) * 0x8000); + memory_set_bank(device->machine, "bank3", data & 0x01); } static ADDRESS_MAP_START( main_map, ADDRESS_SPACE_PROGRAM, 16 ) @@ -79,9 +41,9 @@ static ADDRESS_MAP_START( main_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x500000, 0x500fff) AM_DEVREADWRITE8("k051316", k051316_r, k051316_w, 0x00ff) AM_RANGE(0x510000, 0x51001f) AM_DEVWRITE8("k051316", k051316_ctrl_w, 0x00ff) AM_RANGE(0xff8000, 0xffbfff) AM_RAM /* work RAM */ - AM_RANGE(0xffc000, 0xffc2ff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram) + AM_RANGE(0xffc000, 0xffc2ff) AM_RAM AM_BASE_SIZE_MEMBER(tail2nos_state, spriteram, spriteram_size) AM_RANGE(0xffc300, 0xffcfff) AM_RAM - AM_RANGE(0xffd000, 0xffdfff) AM_RAM_WRITE(tail2nos_bgvideoram_w) AM_BASE(&tail2nos_bgvideoram) + AM_RANGE(0xffd000, 0xffdfff) AM_RAM_WRITE(tail2nos_bgvideoram_w) AM_BASE_MEMBER(tail2nos_state, bgvideoram) AM_RANGE(0xffe000, 0xffefff) AM_RAM_WRITE(paletteram16_xRRRRRGGGGGBBBBB_word_w) AM_BASE_GENERIC(paletteram) AM_RANGE(0xfff000, 0xfff001) AM_READ_PORT("INPUTS") AM_WRITE(tail2nos_gfxbank_w) AM_RANGE(0xfff004, 0xfff005) AM_READ_PORT("DSW") @@ -216,9 +178,10 @@ GFXDECODE_END -static void irqhandler(const device_config *device, int irq) +static void irqhandler( const device_config *device, int irq ) { - cputag_set_input_line(device->machine, "audiocpu", 0, irq ? ASSERT_LINE : CLEAR_LINE); + tail2nos_state *state = (tail2nos_state *)device->machine->driver_data; + cpu_set_input_line(state->audiocpu, 0, irq ? ASSERT_LINE : CLEAR_LINE); } static const ym2608_interface ym2608_config = @@ -243,8 +206,41 @@ static const k051316_interface tail2nos_k051316_intf = tail2nos_zoom_callback }; +static MACHINE_START( tail2nos ) +{ + tail2nos_state *state = (tail2nos_state *)machine->driver_data; + UINT8 *ROM = memory_region(machine, "audiocpu"); + + memory_configure_bank(machine, "bank3", 0, 2, &ROM[0x10000], 0x8000); + memory_set_bank(machine, "bank3", 0); + + state->maincpu = devtag_get_device(machine, "maincpu"); + state->audiocpu = devtag_get_device(machine, "audiocpu"); + state->k051316 = devtag_get_device(machine, "k051316"); + + state_save_register_global(machine, state->charbank); + state_save_register_global(machine, state->charpalette); + state_save_register_global(machine, state->video_enable); +} + +static MACHINE_RESET( tail2nos ) +{ + tail2nos_state *state = (tail2nos_state *)machine->driver_data; + + /* point to the extra ROMs */ + memory_set_bankptr(machine, "bank1", memory_region(machine, "user1")); + memory_set_bankptr(machine, "bank2", memory_region(machine, "user2")); + + state->charbank = 0; + state->charpalette = 0; + state->video_enable = 0; +} + static MACHINE_DRIVER_START( tail2nos ) + /* driver data */ + MDRV_DRIVER_DATA(tail2nos_state) + /* basic machine hardware */ MDRV_CPU_ADD("maincpu", M68000,XTAL_20MHz/2) /* verified on pcb */ MDRV_CPU_PROGRAM_MAP(main_map) @@ -254,6 +250,7 @@ static MACHINE_DRIVER_START( tail2nos ) MDRV_CPU_PROGRAM_MAP(sound_map) MDRV_CPU_IO_MAP(sound_port_map) /* IRQs are triggered by the YM2608 */ + MDRV_MACHINE_START(tail2nos) MDRV_MACHINE_RESET(tail2nos) /* video hardware */ @@ -356,6 +353,5 @@ ROM_START( sformula ) ROM_END - -GAME( 1989, tail2nos, 0, tail2nos, tail2nos, 0, ROT90, "V-System Co.", "Tail to Nose - Great Championship", GAME_NO_COCKTAIL ) -GAME( 1989, sformula, tail2nos, tail2nos, tail2nos, 0, ROT90, "V-System Co.", "Super Formula (Japan)", GAME_NO_COCKTAIL ) +GAME( 1989, tail2nos, 0, tail2nos, tail2nos, 0, ROT90, "V-System Co.", "Tail to Nose - Great Championship", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE ) +GAME( 1989, sformula, tail2nos, tail2nos, tail2nos, 0, ROT90, "V-System Co.", "Super Formula (Japan)", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/thunderx.c b/src/mame/drivers/thunderx.c index 24843d8bd2a..9e5385f563a 100644 --- a/src/mame/drivers/thunderx.c +++ b/src/mame/drivers/thunderx.c @@ -1,10 +1,10 @@ /*************************************************************************** -Super Contra / Thunder Cross + Super Contra / Thunder Cross -driver by Bryan McPhail, Manuel Abadia + driver by Bryan McPhail, Manuel Abadia -K052591 emulation by Eddie Edwards + K052591 emulation by Eddie Edwards ***************************************************************************/ @@ -15,67 +15,58 @@ K052591 emulation by Eddie Edwards #include "sound/2151intf.h" #include "sound/k007232.h" #include "includes/konamipt.h" +#include "includes/thunderx.h" -static MACHINE_RESET( scontra ); -static MACHINE_RESET( thunderx ); static KONAMI_SETLINES_CALLBACK( thunderx_banking ); -extern int scontra_priority; -VIDEO_START( scontra ); -VIDEO_UPDATE( scontra ); - -static UINT8 thunderx_1f98_data = 0; - -extern void thunderx_tile_callback(running_machine *machine, int layer,int bank,int *code,int *color,int *flags,int *priority); -extern void thunderx_sprite_callback(running_machine *machine, int *code,int *color,int *priority_mask,int *shadow); - - /***************************************************************************/ static INTERRUPT_GEN( scontra_interrupt ) { - const device_config *k052109 = devtag_get_device(device->machine, "k052109"); + thunderx_state *state = (thunderx_state *)device->machine->driver_data; - if (k052109_is_irq_enabled(k052109)) + if (k052109_is_irq_enabled(state->k052109)) cpu_set_input_line(device, KONAMI_IRQ_LINE, HOLD_LINE); } static TIMER_CALLBACK( thunderx_firq_callback ) { - cputag_set_input_line(machine, "maincpu", KONAMI_FIRQ_LINE, HOLD_LINE); + thunderx_state *state = (thunderx_state *)machine->driver_data; + cpu_set_input_line(state->maincpu, KONAMI_FIRQ_LINE, HOLD_LINE); } - -static int palette_selected; -static int rambank,pmcbank; -static UINT8 *ram,*pmcram; - static READ8_HANDLER( scontra_bankedram_r ) { - if (palette_selected) + thunderx_state *state = (thunderx_state *)space->machine->driver_data; + + if (state->palette_selected) return space->machine->generic.paletteram.u8[offset]; else - return ram[offset]; + return state->ram[offset]; } static WRITE8_HANDLER( scontra_bankedram_w ) { - if (palette_selected) - paletteram_xBBBBBGGGGGRRRRR_be_w(space,offset,data); + thunderx_state *state = (thunderx_state *)space->machine->driver_data; + + if (state->palette_selected) + paletteram_xBBBBBGGGGGRRRRR_be_w(space, offset, data); else - ram[offset] = data; + state->ram[offset] = data; } static READ8_HANDLER( thunderx_bankedram_r ) { - if (rambank & 0x01) - return ram[offset]; - else if (rambank & 0x10) + thunderx_state *state = (thunderx_state *)space->machine->driver_data; + + if (state->rambank & 0x01) + return state->ram[offset]; + else if (state->rambank & 0x10) { - if (pmcbank) + if (state->pmcbank) { // logerror("%04x read pmcram %04x\n",cpu_get_pc(space->cpu),offset); - return pmcram[offset]; + return state->pmcram[offset]; } else { @@ -89,21 +80,22 @@ static READ8_HANDLER( thunderx_bankedram_r ) static WRITE8_HANDLER( thunderx_bankedram_w ) { - if (rambank & 0x01) - ram[offset] = data; - else if (rambank & 0x10) + thunderx_state *state = (thunderx_state *)space->machine->driver_data; + + if (state->rambank & 0x01) + state->ram[offset] = data; + else if (state->rambank & 0x10) { -// if (offset == 0x200) debug_signal_breakpoint(1); - if (pmcbank) + if (state->pmcbank) { logerror("%04x pmcram %04x = %02x\n",cpu_get_pc(space->cpu),offset,data); - pmcram[offset] = data; + state->pmcram[offset] = data; } else logerror("%04x pmc internal ram %04x = %02x\n",cpu_get_pc(space->cpu),offset,data); } else - paletteram_xBBBBBGGGGGRRRRR_be_w(space,offset,data); + paletteram_xBBBBBGGGGGRRRRR_be_w(space, offset, data); } /* @@ -193,16 +185,17 @@ this is the data written to internal ram on startup: // +3 : x (2 pixel units) of center of object // +4 : y (2 pixel units) of center of object -static void run_collisions(int s0, int e0, int s1, int e1, int cm, int hm) +static void run_collisions( running_machine *machine, int s0, int e0, int s1, int e1, int cm, int hm ) { - UINT8* p0; - UINT8* p1; - int ii,jj; + thunderx_state *state = (thunderx_state *)machine->driver_data; + UINT8* p0; + UINT8* p1; + int ii, jj; - p0 = &pmcram[16 + 5*s0]; + p0 = &state->pmcram[16 + 5 * s0]; for (ii = s0; ii < e0; ii++, p0 += 5) { - int l0,r0,b0,t0; + int l0, r0, b0, t0; // check valid if (!(p0[0] & cm)) continue; @@ -213,7 +206,7 @@ static void run_collisions(int s0, int e0, int s1, int e1, int cm, int hm) t0 = p0[4] - p0[2]; b0 = p0[4] + p0[2]; - p1 = &pmcram[16 + 5*s1]; + p1 = &state->pmcram[16 + 5 * s1]; for (jj = s1; jj < e1; jj++,p1 += 5) { int l1,r1,b1,t1; @@ -244,8 +237,9 @@ static void run_collisions(int s0, int e0, int s1, int e1, int cm, int hm) // // emulates K052591 collision detection -static void calculate_collisions( void ) +static void calculate_collisions( running_machine *machine ) { + thunderx_state *state = (thunderx_state *)machine->driver_data; int X0,Y0; int X1,Y1; int CM,HM; @@ -269,63 +263,65 @@ static void calculate_collisions( void ) // hit mask is 40 to set bit on object 0 and object 1 // hit mask is 20 to set bit on object 1 only - Y0 = pmcram[0]; - Y0 = (Y0 << 8) + pmcram[1]; + Y0 = state->pmcram[0]; + Y0 = (Y0 << 8) + state->pmcram[1]; Y0 = (Y0 - 15) / 5; - Y1 = (pmcram[2] - 15) / 5; + Y1 = (state->pmcram[2] - 15) / 5; - if (pmcram[5] < 16) + if (state->pmcram[5] < 16) { // US Thunder Cross uses this form - X0 = pmcram[5]; - X0 = (X0 << 8) + pmcram[6]; + X0 = state->pmcram[5]; + X0 = (X0 << 8) + state->pmcram[6]; X0 = (X0 - 16) / 5; - X1 = (pmcram[7] - 16) / 5; + X1 = (state->pmcram[7] - 16) / 5; } else { // Japan Thunder Cross uses this form - X0 = (pmcram[5] - 16) / 5; - X1 = (pmcram[6] - 16) / 5; + X0 = (state->pmcram[5] - 16) / 5; + X1 = (state->pmcram[6] - 16) / 5; } - CM = pmcram[3]; - HM = pmcram[4]; + CM = state->pmcram[3]; + HM = state->pmcram[4]; - run_collisions(X0,Y0,X1,Y1,CM,HM); + run_collisions(machine, X0, Y0, X1, Y1, CM, HM); } static READ8_HANDLER( thunderx_1f98_r ) { - return thunderx_1f98_data; + thunderx_state *state = (thunderx_state *)space->machine->driver_data; + return state->_1f98_data; } static WRITE8_HANDLER( thunderx_1f98_w ) { - const device_config *k052109 = devtag_get_device(space->machine, "k052109"); + thunderx_state *state = (thunderx_state *)space->machine->driver_data; - // logerror("%04x: 1f98_w %02x\n",cpu_get_pc(space->cpu),data); + // logerror("%04x: 1f98_w %02x\n", cpu_get_pc(space->cpu),data); /* bit 0 = enable char ROM reading through the video RAM */ - k052109_set_rmrd_line(k052109, (data & 0x01) ? ASSERT_LINE : CLEAR_LINE); + k052109_set_rmrd_line(state->k052109, (data & 0x01) ? ASSERT_LINE : CLEAR_LINE); /* bit 1 = PMC-BK */ - pmcbank = (data & 0x02) >> 1; + state->pmcbank = (data & 0x02) >> 1; /* bit 2 = do collision detection when 0->1 */ - if ((data & 4) && !(thunderx_1f98_data & 4)) + if ((data & 4) && !(state->_1f98_data & 4)) { - calculate_collisions(); + calculate_collisions(space->machine); /* 100 cycle delay is arbitrary */ timer_set(space->machine, cpu_clocks_to_attotime(space->cpu,100), NULL, 0, thunderx_firq_callback); } - thunderx_1f98_data = data; + state->_1f98_data = data; } static WRITE8_HANDLER( scontra_bankswitch_w ) { + thunderx_state *state = (thunderx_state *)space->machine->driver_data; UINT8 *RAM = memory_region(space->machine, "maincpu"); int offs; @@ -336,35 +332,37 @@ static WRITE8_HANDLER( scontra_bankswitch_w ) memory_set_bankptr(space->machine, "bank1", &RAM[offs] ); /* bit 4 select work RAM or palette RAM at 5800-5fff */ - palette_selected = ~data & 0x10; + state->palette_selected = ~data & 0x10; /* bits 5/6 coin counters */ - coin_counter_w(space->machine, 0,data & 0x20); - coin_counter_w(space->machine, 1,data & 0x40); + coin_counter_w(space->machine, 0, data & 0x20); + coin_counter_w(space->machine, 1, data & 0x40); /* bit 7 controls layer priority */ - scontra_priority = data & 0x80; + state->priority = data & 0x80; } static WRITE8_HANDLER( thunderx_videobank_w ) { -//logerror("%04x: select video ram bank %02x\n",cpu_get_pc(space->cpu),data); + thunderx_state *state = (thunderx_state *)space->machine->driver_data; + //logerror("%04x: select video ram bank %02x\n",cpu_get_pc(space->cpu),data); /* 0x01 = work RAM at 4000-5fff */ /* 0x00 = palette at 5800-5fff */ /* 0x10 = unknown RAM at 5800-5fff */ - rambank = data; + state->rambank = data; /* bits 1/2 coin counters */ - coin_counter_w(space->machine, 0,data & 0x02); - coin_counter_w(space->machine, 1,data & 0x04); + coin_counter_w(space->machine, 0, data & 0x02); + coin_counter_w(space->machine, 1, data & 0x04); /* bit 3 controls layer priority (seems to be always 1) */ - scontra_priority = data & 0x08; + state->priority = data & 0x08; } static WRITE8_HANDLER( thunderx_sh_irqtrigger_w ) { - cputag_set_input_line_and_vector(space->machine, "audiocpu", 0, HOLD_LINE, 0xff); + thunderx_state *state = (thunderx_state *)space->machine->driver_data; + cpu_set_input_line_and_vector(state->audiocpu, 0, HOLD_LINE, 0xff); } static WRITE8_DEVICE_HANDLER( scontra_snd_bankswitch_w ) @@ -374,38 +372,36 @@ static WRITE8_DEVICE_HANDLER( scontra_snd_bankswitch_w ) int bank_A = (data & 0x03); int bank_B = ((data >> 2) & 0x03); - k007232_set_bank( device, bank_A, bank_B ); + k007232_set_bank(device, bank_A, bank_B); } static READ8_HANDLER( k052109_051960_r ) { - const device_config *k052109 = devtag_get_device(space->machine, "k052109"); - const device_config *k051960 = devtag_get_device(space->machine, "k051960"); + thunderx_state *state = (thunderx_state *)space->machine->driver_data; - if (k052109_get_rmrd_line(k052109) == CLEAR_LINE) + if (k052109_get_rmrd_line(state->k052109) == CLEAR_LINE) { if (offset >= 0x3800 && offset < 0x3808) - return k051937_r(k051960, offset - 0x3800); + return k051937_r(state->k051960, offset - 0x3800); else if (offset < 0x3c00) - return k052109_r(k052109, offset); + return k052109_r(state->k052109, offset); else - return k051960_r(k051960, offset - 0x3c00); + return k051960_r(state->k051960, offset - 0x3c00); } else - return k052109_r(k052109, offset); + return k052109_r(state->k052109, offset); } static WRITE8_HANDLER( k052109_051960_w ) { - const device_config *k052109 = devtag_get_device(space->machine, "k052109"); - const device_config *k051960 = devtag_get_device(space->machine, "k051960"); + thunderx_state *state = (thunderx_state *)space->machine->driver_data; if (offset >= 0x3800 && offset < 0x3808) - k051937_w(k051960, offset - 0x3800, data); + k051937_w(state->k051960, offset - 0x3800, data); else if (offset < 0x3c00) - k052109_w(k052109, offset, data); + k052109_w(state->k052109, offset, data); else - k051960_w(k051960, offset - 0x3c00, data); + k051960_w(state->k051960, offset - 0x3c00, data); } /***************************************************************************/ @@ -425,7 +421,7 @@ static ADDRESS_MAP_START( scontra_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0x0000, 0x3fff) AM_READWRITE(k052109_051960_r, k052109_051960_w) /* video RAM + sprite RAM */ AM_RANGE(0x4000, 0x57ff) AM_RAM - AM_RANGE(0x5800, 0x5fff) AM_READWRITE(scontra_bankedram_r, scontra_bankedram_w) AM_BASE(&ram) /* palette + work RAM */ + AM_RANGE(0x5800, 0x5fff) AM_READWRITE(scontra_bankedram_r, scontra_bankedram_w) AM_BASE_MEMBER(thunderx_state, ram) /* palette + work RAM */ AM_RANGE(0x6000, 0x7fff) AM_ROMBANK("bank1") AM_RANGE(0x8000, 0xffff) AM_ROM ADDRESS_MAP_END @@ -445,7 +441,7 @@ static ADDRESS_MAP_START( thunderx_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0x0000, 0x3fff) AM_READWRITE(k052109_051960_r, k052109_051960_w) AM_RANGE(0x4000, 0x57ff) AM_RAM - AM_RANGE(0x5800, 0x5fff) AM_READWRITE(thunderx_bankedram_r, thunderx_bankedram_w) AM_BASE(&ram) /* palette + work RAM + unknown RAM */ + AM_RANGE(0x5800, 0x5fff) AM_READWRITE(thunderx_bankedram_r, thunderx_bankedram_w) AM_BASE_MEMBER(thunderx_state, ram) /* palette + work RAM + unknown RAM */ AM_RANGE(0x6000, 0x7fff) AM_ROMBANK("bank1") AM_RANGE(0x8000, 0xffff) AM_ROM ADDRESS_MAP_END @@ -454,9 +450,9 @@ static ADDRESS_MAP_START( scontra_sound_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0x0000, 0x7fff) AM_ROM /* ROM */ AM_RANGE(0x8000, 0x87ff) AM_RAM /* RAM */ AM_RANGE(0xa000, 0xa000) AM_READ(soundlatch_r) /* soundlatch_r */ - AM_RANGE(0xb000, 0xb00d) AM_DEVREADWRITE("konami", k007232_r, k007232_w) /* 007232 registers */ + AM_RANGE(0xb000, 0xb00d) AM_DEVREADWRITE("k007232", k007232_r, k007232_w) /* 007232 registers */ AM_RANGE(0xc000, 0xc001) AM_DEVREADWRITE("ymsnd", ym2151_r, ym2151_w) /* YM2151 */ - AM_RANGE(0xf000, 0xf000) AM_DEVWRITE("konami", scontra_snd_bankswitch_w) /* 007232 bank select */ + AM_RANGE(0xf000, 0xf000) AM_DEVWRITE("k007232", scontra_snd_bankswitch_w) /* 007232 bank select */ ADDRESS_MAP_END static ADDRESS_MAP_START( thunderx_sound_map, ADDRESS_SPACE_PROGRAM, 8 ) @@ -602,8 +598,8 @@ INPUT_PORTS_END static void volume_callback(const device_config *device, int v) { - k007232_set_volume(device,0,(v >> 4) * 0x11,0); - k007232_set_volume(device,1,0,(v & 0x0f) * 0x11); + k007232_set_volume(device, 0, (v >> 4) * 0x11, 0); + k007232_set_volume(device, 1, 0, (v & 0x0f) * 0x11); } static const k007232_interface k007232_config = @@ -629,8 +625,65 @@ static const k051960_interface thunderx_k051960_intf = thunderx_sprite_callback }; +static MACHINE_START( scontra ) +{ + thunderx_state *state = (thunderx_state *)machine->driver_data; + + machine->generic.paletteram.u8 = auto_alloc_array_clear(machine, UINT8, 0x800); + + state->maincpu = devtag_get_device(machine, "maincpu"); + state->audiocpu = devtag_get_device(machine, "audiocpu"); + state->k007232 = devtag_get_device(machine, "k007232"); + state->k052109 = devtag_get_device(machine, "k052109"); + state->k051960 = devtag_get_device(machine, "k051960"); + + state_save_register_global(machine, state->priority); + state_save_register_global(machine, state->_1f98_data); + state_save_register_global(machine, state->palette_selected); + state_save_register_global(machine, state->rambank); + state_save_register_global(machine, state->pmcbank); + state_save_register_global_pointer(machine, machine->generic.paletteram.u8, 0x800); +} + +static MACHINE_START( thunderx ) +{ + thunderx_state *state = (thunderx_state *)machine->driver_data; + UINT8 *ROM = memory_region(machine, "maincpu"); + + memory_configure_bank(machine, "bank1", 0, 12, &ROM[0x10000], 0x2000); + memory_configure_bank(machine, "bank1", 12, 4, &ROM[0x08000], 0x2000); + memory_set_bank(machine, "bank1", 0); + + state->pmcram = auto_alloc_array_clear(machine, UINT8, 0x800); + + MACHINE_START_CALL(scontra); + + state_save_register_global_pointer(machine, state->pmcram, 0x800); +} + +static MACHINE_RESET( scontra ) +{ + thunderx_state *state = (thunderx_state *)machine->driver_data; + + state->priority = 0; + state->_1f98_data = 0; + state->palette_selected = 0; + state->rambank = 0; + state->pmcbank = 0; +} + +static MACHINE_RESET( thunderx ) +{ + konami_configure_set_lines(cputag_get_cpu(machine, "maincpu"), thunderx_banking); + + MACHINE_RESET_CALL(scontra); +} + static MACHINE_DRIVER_START( scontra ) + /* driver data */ + MDRV_DRIVER_DATA(thunderx_state) + /* basic machine hardware */ MDRV_CPU_ADD("maincpu", KONAMI, 3000000) /* 052001 */ MDRV_CPU_PROGRAM_MAP(scontra_map) @@ -639,6 +692,7 @@ static MACHINE_DRIVER_START( scontra ) MDRV_CPU_ADD("audiocpu", Z80, 3579545) /* ? */ MDRV_CPU_PROGRAM_MAP(scontra_sound_map) + MDRV_MACHINE_START(scontra) MDRV_MACHINE_RESET(scontra) /* video hardware */ @@ -666,7 +720,7 @@ static MACHINE_DRIVER_START( scontra ) MDRV_SOUND_ROUTE(0, "mono", 1.0) MDRV_SOUND_ROUTE(1, "mono", 1.0) - MDRV_SOUND_ADD("konami", K007232, 3579545) + MDRV_SOUND_ADD("k007232", K007232, 3579545) MDRV_SOUND_CONFIG(k007232_config) MDRV_SOUND_ROUTE(0, "mono", 0.20) MDRV_SOUND_ROUTE(1, "mono", 0.20) @@ -675,6 +729,9 @@ MACHINE_DRIVER_END static MACHINE_DRIVER_START( thunderx ) + /* driver data */ + MDRV_DRIVER_DATA(thunderx_state) + /* basic machine hardware */ MDRV_CPU_ADD("maincpu", KONAMI, 3000000) /* ? */ MDRV_CPU_PROGRAM_MAP(thunderx_map) @@ -683,6 +740,7 @@ static MACHINE_DRIVER_START( thunderx ) MDRV_CPU_ADD("audiocpu", Z80, 3579545) /* ? */ MDRV_CPU_PROGRAM_MAP(thunderx_sound_map) + MDRV_MACHINE_START(thunderx) MDRV_MACHINE_RESET(thunderx) /* video hardware */ @@ -719,7 +777,7 @@ MACHINE_DRIVER_END ***************************************************************************/ ROM_START( scontra ) - ROM_REGION( 0x30800, "maincpu", 0 ) /* ROMs + banked RAM */ + ROM_REGION( 0x30000, "maincpu", 0 ) /* ROMs + banked RAM */ ROM_LOAD( "775-e02.k11", 0x10000, 0x08000, CRC(a61c0ead) SHA1(9a0aadc8d3538fc1d88b761753fffcac8923a218) ) /* banked ROM */ ROM_CONTINUE( 0x08000, 0x08000 ) /* fixed ROM */ ROM_LOAD( "775-e03.k13", 0x20000, 0x10000, CRC(00b02622) SHA1(caf1da53815e437e3fb952d29e71f2c314684cd9) ) /* banked ROM */ @@ -759,7 +817,7 @@ ROM_START( scontra ) ROM_LOAD16_BYTE( "775-f06d.bin", 0xe0000, 0x10000, CRC(c8b764fa) SHA1(62f7f59ed36dca7346ec9eb019a4e435e8476dc6) ) ROM_LOAD16_BYTE( "775-f06h.bin", 0xe0001, 0x10000, CRC(d6595f59) SHA1(777ea6da2026c90e7fbbc598275c8f95f2eb99c2) ) - ROM_REGION( 0x80000, "konami", 0 ) /* k007232 data */ + ROM_REGION( 0x80000, "k007232", 0 ) /* k007232 data */ ROM_LOAD( "775-a04a.bin", 0x00000, 0x10000, CRC(7efb2e0f) SHA1(fb350a056b547fe4f981bc211e2f9518ae5a3499) ) ROM_LOAD( "775-a04b.bin", 0x10000, 0x10000, CRC(f41a2b33) SHA1(dffa06360b6032f7370fe72698aacad4d8779472) ) ROM_LOAD( "775-a04c.bin", 0x20000, 0x10000, CRC(e4e58f14) SHA1(23dcb4dfa9a44115d1b730d9efcc314801b811c7) ) @@ -774,7 +832,7 @@ ROM_START( scontra ) ROM_END ROM_START( scontraj ) - ROM_REGION( 0x30800, "maincpu", 0 ) /* ROMs + banked RAM */ + ROM_REGION( 0x30000, "maincpu", 0 ) /* ROMs + banked RAM */ ROM_LOAD( "775-f02.bin", 0x10000, 0x08000, CRC(8d5933a7) SHA1(e13ec62a4209b790b609429d98620ec0d07bd0ee) ) /* banked ROM */ ROM_CONTINUE( 0x08000, 0x08000 ) /* fixed ROM */ ROM_LOAD( "775-f03.bin", 0x20000, 0x10000, CRC(1ef63d80) SHA1(8fa41038ec2928f9572d0d4511a4bb3a3d8de06d) ) /* banked ROM */ @@ -814,7 +872,7 @@ ROM_START( scontraj ) ROM_LOAD16_BYTE( "775-f06d.bin", 0xe0000, 0x10000, CRC(c8b764fa) SHA1(62f7f59ed36dca7346ec9eb019a4e435e8476dc6) ) ROM_LOAD16_BYTE( "775-f06h.bin", 0xe0001, 0x10000, CRC(d6595f59) SHA1(777ea6da2026c90e7fbbc598275c8f95f2eb99c2) ) - ROM_REGION( 0x80000, "konami", 0 ) /* k007232 data */ + ROM_REGION( 0x80000, "k007232", 0 ) /* k007232 data */ ROM_LOAD( "775-a04a.bin", 0x00000, 0x10000, CRC(7efb2e0f) SHA1(fb350a056b547fe4f981bc211e2f9518ae5a3499) ) ROM_LOAD( "775-a04b.bin", 0x10000, 0x10000, CRC(f41a2b33) SHA1(dffa06360b6032f7370fe72698aacad4d8779472) ) ROM_LOAD( "775-a04c.bin", 0x20000, 0x10000, CRC(e4e58f14) SHA1(23dcb4dfa9a44115d1b730d9efcc314801b811c7) ) @@ -829,7 +887,7 @@ ROM_START( scontraj ) ROM_END ROM_START( thunderx ) - ROM_REGION( 0x29000, "maincpu", 0 ) /* ROMs + banked RAM */ + ROM_REGION( 0x28000, "maincpu", 0 ) /* ROMs + banked RAM */ ROM_LOAD( "873-s03.k15", 0x10000, 0x10000, CRC(2aec2699) SHA1(8f52703a6a1ba6417c484925192ce697af9c73f1) ) ROM_LOAD( "873-s02.k13", 0x20000, 0x08000, CRC(6619333a) SHA1(1961658d528b0870c57f1cb78e016fb881f50392) ) ROM_CONTINUE( 0x08000, 0x08000 ) @@ -862,7 +920,7 @@ ROM_START( thunderx ) ROM_END ROM_START( thunderxa ) /* Alternate Starting stage then the other 2 sets, Perhaps a US set? */ - ROM_REGION( 0x29000, "maincpu", 0 ) /* ROMs + banked RAM */ + ROM_REGION( 0x28000, "maincpu", 0 ) /* ROMs + banked RAM */ ROM_LOAD( "873-k03.k15", 0x10000, 0x10000, CRC(276817ad) SHA1(34b1beecf2a4c54dd7cd150c5d83b44f67be288a) ) ROM_LOAD( "873-k02.k13", 0x20000, 0x08000, CRC(80cc1c45) SHA1(881bc6eea94671e8c3fdb7a10b0e742b18cb7212) ) ROM_CONTINUE( 0x08000, 0x08000 ) @@ -895,7 +953,7 @@ ROM_START( thunderxa ) /* Alternate Starting stage then the other 2 sets, Perhap ROM_END ROM_START( thunderxb ) /* Set had no labels, same starting stage as parent set */ - ROM_REGION( 0x29000, "maincpu", 0 ) /* ROMs + banked RAM */ + ROM_REGION( 0x28000, "maincpu", 0 ) /* ROMs + banked RAM */ ROM_LOAD( "873-03.k15", 0x10000, 0x10000, CRC(36680a4e) SHA1(9b3b6bf75a9c04e764448cd958277bd081cc4a53) ) ROM_LOAD( "873-02.k13", 0x20000, 0x08000, CRC(c58b2c34) SHA1(4050d2edc579ffedba3d40782a08e43ac89b1b86) ) ROM_CONTINUE( 0x08000, 0x08000 ) @@ -928,7 +986,7 @@ ROM_START( thunderxb ) /* Set had no labels, same starting stage as parent set * ROM_END ROM_START( thunderxj ) - ROM_REGION( 0x29000, "maincpu", 0 ) /* ROMs + banked RAM */ + ROM_REGION( 0x28000, "maincpu", 0 ) /* ROMs + banked RAM */ ROM_LOAD( "873-n03.k15", 0x10000, 0x10000, CRC(a01e2e3e) SHA1(eba0d95dc0c5eed18743a96e4bbda5e60d5d9c97) ) ROM_LOAD( "873-n02.k13", 0x20000, 0x08000, CRC(55afa2cc) SHA1(5fb9df0c7c7c0c2029dbe0f3c1e0340234a03e8a) ) ROM_CONTINUE( 0x08000, 0x08000 ) @@ -964,38 +1022,14 @@ ROM_END static KONAMI_SETLINES_CALLBACK( thunderx_banking ) { - UINT8 *RAM = memory_region(device->machine, "maincpu"); - int offs; - -// logerror("thunderx %04x: bank select %02x\n", cpu_get_pc(device->cpu), lines ); - - offs = 0x10000 + (((lines & 0x0f) ^ 0x08) * 0x2000); - if (offs >= 0x28000) offs -= 0x20000; - memory_set_bankptr(device->machine, "bank1", &RAM[offs] ); -} - -static MACHINE_RESET( scontra ) -{ - UINT8 *RAM = memory_region(machine, "maincpu"); - - machine->generic.paletteram.u8 = &RAM[0x30000]; -} - -static MACHINE_RESET( thunderx ) -{ - UINT8 *RAM = memory_region(machine, "maincpu"); - - konami_configure_set_lines(cputag_get_cpu(machine, "maincpu"), thunderx_banking); - memory_set_bankptr(machine, "bank1", &RAM[0x10000] ); /* init the default bank */ - - machine->generic.paletteram.u8 = &RAM[0x28000]; - pmcram = &RAM[0x28800]; + //logerror("thunderx %04x: bank select %02x\n", cpu_get_pc(device->cpu), lines); + memory_set_bank(device->machine, "bank1", ((lines & 0x0f) ^ 0x08)); } -GAME( 1988, scontra, 0, scontra, scontra, 0, ROT90, "Konami", "Super Contra", 0 ) -GAME( 1988, scontraj, scontra, scontra, scontra, 0, ROT90, "Konami", "Super Contra (Japan)", 0 ) -GAME( 1988, thunderx, 0, thunderx, thunderx, 0, ROT0, "Konami", "Thunder Cross (set 1)", 0 ) -GAME( 1988, thunderxa,thunderx, thunderx, thunderx, 0, ROT0, "Konami", "Thunder Cross (set 2)", 0 ) -GAME( 1988, thunderxb,thunderx, thunderx, thunderx, 0, ROT0, "Konami", "Thunder Cross (set 3)", 0 ) -GAME( 1988, thunderxj,thunderx, thunderx, thnderxj, 0, ROT0, "Konami", "Thunder Cross (Japan)", 0 ) -//GAME( 1988, thndrxja, thunderx, thunderx, thndrxja, 0, ROT0, "Konami", "Thunder Cross (Japan, newer revision)", 0 ) +GAME( 1988, scontra, 0, scontra, scontra, 0, ROT90, "Konami", "Super Contra", GAME_SUPPORTS_SAVE ) +GAME( 1988, scontraj, scontra, scontra, scontra, 0, ROT90, "Konami", "Super Contra (Japan)", GAME_SUPPORTS_SAVE ) +GAME( 1988, thunderx, 0, thunderx, thunderx, 0, ROT0, "Konami", "Thunder Cross (set 1)", GAME_SUPPORTS_SAVE ) +GAME( 1988, thunderxa, thunderx, thunderx, thunderx, 0, ROT0, "Konami", "Thunder Cross (set 2)", GAME_SUPPORTS_SAVE ) +GAME( 1988, thunderxb, thunderx, thunderx, thunderx, 0, ROT0, "Konami", "Thunder Cross (set 3)", GAME_SUPPORTS_SAVE ) +GAME( 1988, thunderxj, thunderx, thunderx, thnderxj, 0, ROT0, "Konami", "Thunder Cross (Japan)", GAME_SUPPORTS_SAVE ) +//GAME( 1988, thndrxja, thunderx, thunderx, thndrxja, 0, ROT0, "Konami", "Thunder Cross (Japan, newer revision)", GAME_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/tmnt.c b/src/mame/drivers/tmnt.c index d72304be577..3c3065ba441 100644 --- a/src/mame/drivers/tmnt.c +++ b/src/mame/drivers/tmnt.c @@ -33,7 +33,7 @@ Updates: - blswhstl: sprites are left on screen during attract mode(fixed) Sprite buffer should be cleared at vblank start. On the GX OBJDMA automatically occurs 32.0-42.7us after clearing but on older boards - using the K053245, DMA must be triggered manually. The game uses a + using the k053245, DMA must be triggered manually. The game uses a trick to disable sprites by simply not triggering OBJDMA. - a garbage sprite is STILL sticking on screen in ssriders.(fixed) - sprite colors / zoomed placement in tmnt2(improved MCU sim) @@ -80,121 +80,103 @@ Updates: #include "includes/tmnt.h" #include "includes/konamipt.h" +static UINT16 cuebrick_nvram[0x400 * 0x20]; // 32k paged in a 1k window -extern void mia_tile_callback(running_machine *machine, int layer,int bank,int *code,int *color,int *flags,int *priority); -extern void cuebrick_tile_callback(running_machine *machine, int layer,int bank,int *code,int *color,int *flags,int *priority); -extern void tmnt_tile_callback(running_machine *machine, int layer,int bank,int *code,int *color,int *flags,int *priority); -extern void ssbl_tile_callback(running_machine *machine, int layer,int bank,int *code,int *color,int *flags,int *priority); -extern void blswhstl_tile_callback(running_machine *machine, int layer,int bank,int *code,int *color,int *flags,int *priority); -extern void mia_sprite_callback(running_machine *machine, int *code,int *color,int *priority,int *shadow); -extern void tmnt_sprite_callback(running_machine *machine, int *code,int *color,int *priority,int *shadow); -extern void punkshot_sprite_callback(running_machine *machine, int *code,int *color,int *priority_mask,int *shadow); -extern void thndrx2_sprite_callback(running_machine *machine, int *code,int *color,int *priority_mask,int *shadow); -extern void lgtnfght_sprite_callback(running_machine *machine, int *code,int *color,int *priority_mask); -extern void blswhstl_sprite_callback(running_machine *machine, int *code,int *color,int *priority_mask); -extern void prmrsocr_sprite_callback(running_machine *machine, int *code,int *color,int *priority_mask); - -WRITE16_HANDLER( ssriders_eeprom_w ); /* in video/tmnt.c */ - -static int tmnt_soundlatch; -static int cuebrick_snd_irqlatch, cuebrick_nvram_bank; -static UINT16 cuebrick_nvram[0x400*0x20]; // 32k paged in a 1k window -static INT16 *sampledata; - - -static READ16_HANDLER( K052109_word_noA12_r ) +static READ16_HANDLER( k052109_word_noA12_r ) { - const device_config *k052109 = devtag_get_device(space->machine, "k052109"); + tmnt_state *state = (tmnt_state *)space->machine->driver_data; /* some games have the A12 line not connected, so the chip spans */ /* twice the memory range, with mirroring */ offset = ((offset & 0x3000) >> 1) | (offset & 0x07ff); - return k052109_word_r(k052109, offset, mem_mask); + return k052109_word_r(state->k052109, offset, mem_mask); } -static WRITE16_HANDLER( K052109_word_noA12_w ) +static WRITE16_HANDLER( k052109_word_noA12_w ) { - const device_config *k052109 = devtag_get_device(space->machine, "k052109"); + tmnt_state *state = (tmnt_state *)space->machine->driver_data; /* some games have the A12 line not connected, so the chip spans */ /* twice the memory range, with mirroring */ offset = ((offset & 0x3000) >> 1) | (offset & 0x07ff); - k052109_word_w(k052109, offset, data, mem_mask); + k052109_word_w(state->k052109, offset, data, mem_mask); } -static WRITE16_HANDLER( punkshot_K052109_word_w ) +static WRITE16_HANDLER( punkshot_k052109_word_w ) { - const device_config *k052109 = devtag_get_device(space->machine, "k052109"); + tmnt_state *state = (tmnt_state *)space->machine->driver_data; /* it seems that a word write is supposed to affect only the MSB. The */ /* "ROUND 1" text in punkshtj goes lost otherwise. */ if (ACCESSING_BITS_8_15) - k052109_w(k052109, offset, (data >> 8) & 0xff); + k052109_w(state->k052109, offset, (data >> 8) & 0xff); else if (ACCESSING_BITS_0_7) - k052109_w(k052109, offset + 0x2000, data & 0xff); + k052109_w(state->k052109, offset + 0x2000, data & 0xff); } -static WRITE16_HANDLER( punkshot_K052109_word_noA12_w ) +static WRITE16_HANDLER( punkshot_k052109_word_noA12_w ) { /* some games have the A12 line not connected, so the chip spans */ /* twice the memory range, with mirroring */ offset = ((offset & 0x3000) >> 1) | (offset & 0x07ff); - punkshot_K052109_word_w(space, offset, data, mem_mask); + punkshot_k052109_word_w(space, offset, data, mem_mask); } /* the interface with the 053245 is weird. The chip can address only 0x800 bytes */ /* of RAM, but they put 0x4000 there. The CPU can access them all. Address lines */ /* A1, A5 and A6 don't go to the 053245. */ -static READ16_HANDLER( K053245_scattered_word_r ) +static READ16_HANDLER( k053245_scattered_word_r ) { - const device_config *k053245 = devtag_get_device(space->machine, "k053245"); + tmnt_state *state = (tmnt_state *)space->machine->driver_data; if (offset & 0x0031) return space->machine->generic.spriteram.u16[offset]; else { offset = ((offset & 0x000e) >> 1) | ((offset & 0x1fc0) >> 3); - return k053245_word_r(k053245, offset, mem_mask); + return k053245_word_r(state->k053245, offset, mem_mask); } } -static WRITE16_HANDLER( K053245_scattered_word_w ) +static WRITE16_HANDLER( k053245_scattered_word_w ) { - const device_config *k053245 = devtag_get_device(space->machine, "k053245"); + tmnt_state *state = (tmnt_state *)space->machine->driver_data; COMBINE_DATA(space->machine->generic.spriteram.u16 + offset); if (!(offset & 0x0031)) { offset = ((offset & 0x000e) >> 1) | ((offset & 0x1fc0) >> 3); - k053245_word_w(k053245, offset, data, mem_mask); + k053245_word_w(state->k053245, offset, data, mem_mask); } } -static READ16_HANDLER( K053244_word_noA1_r ) +static READ16_HANDLER( k053244_word_noA1_r ) { - const device_config *k053245 = devtag_get_device(space->machine, "k053245"); + tmnt_state *state = (tmnt_state *)space->machine->driver_data; offset &= ~1; /* handle mirror address */ - return k053244_r(k053245, offset + 1) | (k053244_r(k053245, offset) << 8); + return k053244_r(state->k053245, offset + 1) | (k053244_r(state->k053245, offset) << 8); } -static WRITE16_HANDLER( K053244_word_noA1_w ) +static WRITE16_HANDLER( k053244_word_noA1_w ) { - const device_config *k053245 = devtag_get_device(space->machine, "k053245"); + tmnt_state *state = (tmnt_state *)space->machine->driver_data; offset &= ~1; /* handle mirror address */ if (ACCESSING_BITS_8_15) - k053244_w(k053245, offset, (data >> 8) & 0xff); + k053244_w(state->k053245, offset, (data >> 8) & 0xff); if (ACCESSING_BITS_0_7) - k053244_w(k053245, offset + 1, data & 0xff); + k053244_w(state->k053245, offset + 1, data & 0xff); } static INTERRUPT_GEN(cuebrick_interrupt) { + tmnt_state *state = (tmnt_state *)device->machine->driver_data; + // cheap IRQ multiplexing to avoid losing sound IRQs switch (cpu_getiloops(device)) { @@ -203,7 +185,7 @@ static INTERRUPT_GEN(cuebrick_interrupt) break; default: - if (cuebrick_snd_irqlatch) + if (state->cuebrick_snd_irqlatch) cpu_set_input_line(device, M68K_IRQ_6, HOLD_LINE); break; } @@ -211,17 +193,17 @@ static INTERRUPT_GEN(cuebrick_interrupt) static INTERRUPT_GEN( punkshot_interrupt ) { - const device_config *k052109 = devtag_get_device(device->machine, "k052109"); + tmnt_state *state = (tmnt_state *)device->machine->driver_data; - if (k052109_is_irq_enabled(k052109)) + if (k052109_is_irq_enabled(state->k052109)) irq4_line_hold(device); } static INTERRUPT_GEN( lgtnfght_interrupt ) { - const device_config *k052109 = devtag_get_device(device->machine, "k052109"); + tmnt_state *state = (tmnt_state *)device->machine->driver_data; - if (k052109_is_irq_enabled(k052109)) + if (k052109_is_irq_enabled(state->k052109)) irq5_line_hold(device); } @@ -242,15 +224,16 @@ static READ8_DEVICE_HANDLER( punkshot_sound_r ) static WRITE8_DEVICE_HANDLER( glfgreat_sound_w ) { + tmnt_state *state = (tmnt_state *)device->machine->driver_data; k053260_w(device, offset, data); if (offset) - cputag_set_input_line_and_vector(device->machine, "audiocpu", 0, HOLD_LINE, 0xff); + cpu_set_input_line_and_vector(state->audiocpu, 0, HOLD_LINE, 0xff); } static READ16_HANDLER( prmrsocr_sound_r ) { - return soundlatch3_r(space,0); + return soundlatch3_r(space, 0); } static WRITE16_HANDLER( prmrsocr_sound_cmd_w ) @@ -258,44 +241,47 @@ static WRITE16_HANDLER( prmrsocr_sound_cmd_w ) if (ACCESSING_BITS_0_7) { data &= 0xff; - if (offset == 0) soundlatch_w(space, 0, data); - else soundlatch2_w(space, 0, data); + if (offset == 0) + soundlatch_w(space, 0, data); + else + soundlatch2_w(space, 0, data); } } static WRITE16_HANDLER( prmrsocr_sound_irq_w ) { - cputag_set_input_line_and_vector(space->machine, "audiocpu", 0, HOLD_LINE, 0xff); + tmnt_state *state = (tmnt_state *)space->machine->driver_data; + cpu_set_input_line_and_vector(state->audiocpu, 0, HOLD_LINE, 0xff); } static WRITE8_HANDLER( prmrsocr_audio_bankswitch_w ) { - UINT8 *rom = memory_region(space->machine, "audiocpu") + 0x10000; - - memory_set_bankptr(space->machine, "bank1",rom + (data & 7) * 0x4000); + memory_set_bank(space->machine, "bank1", data & 7); } static READ8_HANDLER( tmnt_sres_r ) { - return tmnt_soundlatch; + tmnt_state *state = (tmnt_state *)space->machine->driver_data; + return state->tmnt_soundlatch; } static WRITE8_HANDLER( tmnt_sres_w ) { - const device_config *samples = devtag_get_device(space->machine, "samples"); - const device_config *upd = devtag_get_device(space->machine, "upd"); + tmnt_state *state = (tmnt_state *)space->machine->driver_data; /* bit 1 resets the UPD7795C sound chip */ - upd7759_reset_w(upd, data & 2); + upd7759_reset_w(state->upd, data & 2); /* bit 2 plays the title music */ if (data & 0x04) { - if (!sample_playing(samples, 0)) sample_start_raw(samples,0,sampledata,0x40000,20000,0); + if (!sample_playing(state->samples, 0)) + sample_start_raw(state->samples, 0, state->sampledata, 0x40000, 20000, 0); } - else sample_stop(samples, 0); - tmnt_soundlatch = data; + else + sample_stop(state->samples, 0); + state->tmnt_soundlatch = data; } static WRITE8_DEVICE_HANDLER( tmnt_upd_start_w ) @@ -312,10 +298,12 @@ static READ8_DEVICE_HANDLER( tmnt_upd_busy_r ) static SAMPLES_START( tmnt_decode_sample ) { running_machine *machine = device->machine; + tmnt_state *state = (tmnt_state *)machine->driver_data; int i; UINT8 *source = memory_region(machine, "title"); - sampledata = auto_alloc_array(machine, INT16, 0x40000); + state->sampledata = auto_alloc_array(machine, INT16, 0x40000); + state_save_register_global_pointer(machine, state->sampledata, 0x40000); /* Sound sample for TMNT.D05 is stored in the following mode (ym3012 format): * @@ -325,17 +313,17 @@ static SAMPLES_START( tmnt_decode_sample ) * (Sound info courtesy of Dave <dave@finalburn.com>) */ - for (i = 0;i < 0x40000;i++) + for (i = 0; i < 0x40000; i++) { - int val = source[2*i] + source[2*i+1] * 256; + int val = source[2 * i] + source[2 * i + 1] * 256; int expo = val >> 13; val = (val >> 3) & (0x3ff); /* 10 bit, Max Amplitude 0x400 */ val -= 0x200; /* Centralize value */ - val <<= (expo-3); + val <<= (expo - 3); - sampledata[i] = val; + state->sampledata[i] = val; } } @@ -352,14 +340,16 @@ static void sound_nmi_callback( int param ) static TIMER_CALLBACK( nmi_callback ) { - cputag_set_input_line(machine, "audiocpu", INPUT_LINE_NMI, ASSERT_LINE); + tmnt_state *state = (tmnt_state *)machine->driver_data; + cpu_set_input_line(state->audiocpu, INPUT_LINE_NMI, ASSERT_LINE); } static WRITE8_HANDLER( sound_arm_nmi_w ) { + tmnt_state *state = (tmnt_state *)space->machine->driver_data; // sound_nmi_enabled = 1; - cputag_set_input_line(space->machine, "audiocpu", INPUT_LINE_NMI, CLEAR_LINE); - timer_set(space->machine, ATTOTIME_IN_USEC(50), NULL,0,nmi_callback); /* kludge until the K053260 is emulated correctly */ + cpu_set_input_line(state->audiocpu, INPUT_LINE_NMI, CLEAR_LINE); + timer_set(space->machine, ATTOTIME_IN_USEC(50), NULL, 0, nmi_callback); /* kludge until the K053260 is emulated correctly */ } @@ -376,7 +366,7 @@ static READ16_HANDLER( punkshot_kludge_r ) /* protection simulation derived from a bootleg */ static READ16_HANDLER( ssriders_protection_r ) { - const device_config *k052109 = devtag_get_device(space->machine, "k052109"); + tmnt_state *state = (tmnt_state *)space->machine->driver_data; int data = memory_read_word(space, 0x105a0a); int cmd = memory_read_word(space, 0x1058fc); @@ -408,7 +398,7 @@ static READ16_HANDLER( ssriders_protection_r ) data = -memory_read_word(space, 0x105818); data = ((data / 8 - 4) & 0x1f) * 0x40; data += ((memory_read_word(space, 0x105cb0) + - 256 * k052109_r(k052109, 0x1a01) + k052109_r(k052109, 0x1a00) - 6) / 8 + 12) & 0x3f; + 256 * k052109_r(state->k052109, 0x1a01) + k052109_r(state->k052109, 0x1a00) - 6) / 8 + 12) & 0x3f; return data; default: @@ -420,23 +410,23 @@ static READ16_HANDLER( ssriders_protection_r ) static WRITE16_HANDLER( ssriders_protection_w ) { - const device_config *k053245 = devtag_get_device(space->machine, "k053245"); + tmnt_state *state = (tmnt_state *)space->machine->driver_data; if (offset == 1) { - int logical_pri,hardware_pri; + int logical_pri, hardware_pri; /* create sprite priority attributes */ hardware_pri = 1; - for (logical_pri = 1;logical_pri < 0x100;logical_pri <<= 1) + for (logical_pri = 1; logical_pri < 0x100; logical_pri <<= 1) { int i; - for (i = 0;i < 128;i++) + for (i = 0; i < 128; i++) { - if ((memory_read_word(space, 0x180006 + 128*i) >> 8) == logical_pri) + if ((memory_read_word(space, 0x180006 + 128 * i) >> 8) == logical_pri) { - k053245_word_w(k053245, 8 * i, hardware_pri, 0x00ff); + k053245_word_w(state->k053245, 8 * i, hardware_pri, 0x00ff); hardware_pri++; } } @@ -466,21 +456,21 @@ static const eeprom_interface eeprom_intf = static READ16_HANDLER( blswhstl_coin_r ) { + tmnt_state *state = (tmnt_state *)space->machine->driver_data; int res; - static int toggle; /* bit 3 is service button */ /* bit 6 is ??? VBLANK? OBJMPX? */ res = input_port_read(space->machine, "COINS"); - toggle ^= 0x40; - return res ^ toggle; + state->toggle ^= 0x40; + return res ^ state->toggle; } static READ16_HANDLER( ssriders_eeprom_r ) { + tmnt_state *state = (tmnt_state *)space->machine->driver_data; int res; - static int toggle; /* bit 0 is EEPROM data */ /* bit 1 is EEPROM ready */ @@ -488,14 +478,14 @@ static READ16_HANDLER( ssriders_eeprom_r ) /* bit 7 is service button */ res = input_port_read(space->machine, "EEPROM"); - toggle ^= 0x04; - return res ^ toggle; + state->toggle ^= 0x04; + return res ^ state->toggle; } static READ16_HANDLER( sunsetbl_eeprom_r ) { + tmnt_state *state = (tmnt_state *)space->machine->driver_data; int res; - static int toggle; /* bit 0 is EEPROM data */ /* bit 1 is EEPROM ready */ @@ -503,8 +493,8 @@ static READ16_HANDLER( sunsetbl_eeprom_r ) /* bit 3 is service button */ res = input_port_read(space->machine, "EEPROM"); - toggle ^= 0x04; - return res ^ toggle; + state->toggle ^= 0x04; + return res ^ state->toggle; } static WRITE16_HANDLER( blswhstl_eeprom_w ) @@ -531,22 +521,21 @@ static const eeprom_interface thndrx2_eeprom_intf = static READ16_HANDLER( thndrx2_eeprom_r ) { + tmnt_state *state = (tmnt_state *)space->machine->driver_data; int res; - static int toggle; /* bit 0 is EEPROM data */ /* bit 1 is EEPROM ready */ /* bit 3 is VBLANK (???) */ /* bit 7 is service button */ res = input_port_read(space->machine, "P2/EEPROM"); - toggle ^= 0x0800; - return (res ^ toggle); + state->toggle ^= 0x0800; + return (res ^ state->toggle); } static WRITE16_HANDLER( thndrx2_eeprom_w ) { - const device_config *k052109 = devtag_get_device(space->machine, "k052109"); - static int last; + tmnt_state *state = (tmnt_state *)space->machine->driver_data; if (ACCESSING_BITS_0_7) { @@ -556,12 +545,12 @@ static WRITE16_HANDLER( thndrx2_eeprom_w ) input_port_write(space->machine, "EEPROMOUT", data, 0xff); /* bit 5 triggers IRQ on sound cpu */ - if (last == 0 && (data & 0x20) != 0) - cputag_set_input_line_and_vector(space->machine, "audiocpu", 0, HOLD_LINE, 0xff); - last = data & 0x20; + if (state->last == 0 && (data & 0x20) != 0) + cpu_set_input_line_and_vector(state->audiocpu, 0, HOLD_LINE, 0xff); + state->last = data & 0x20; /* bit 6 = enable char ROM reading through the video RAM */ - k052109_set_rmrd_line(k052109, (data & 0x40) ? ASSERT_LINE : CLEAR_LINE); + k052109_set_rmrd_line(state->k052109, (data & 0x40) ? ASSERT_LINE : CLEAR_LINE); } } @@ -569,7 +558,7 @@ static WRITE16_HANDLER( prmrsocr_eeprom_w ) { if (ACCESSING_BITS_0_7) { - prmrsocr_122000_w(space,offset,data,mem_mask); + prmrsocr_122000_w(space, offset, data, mem_mask); } if (ACCESSING_BITS_8_15) @@ -583,17 +572,20 @@ static WRITE16_HANDLER( prmrsocr_eeprom_w ) static READ16_HANDLER( cuebrick_nv_r ) { - return cuebrick_nvram[offset + (cuebrick_nvram_bank*0x400/2)]; + tmnt_state *state = (tmnt_state *)space->machine->driver_data; + return cuebrick_nvram[offset + (state->cuebrick_nvram_bank * 0x400 / 2)]; } static WRITE16_HANDLER( cuebrick_nv_w ) { - COMBINE_DATA(&cuebrick_nvram[offset + (cuebrick_nvram_bank*0x400/2)]); + tmnt_state *state = (tmnt_state *)space->machine->driver_data; + COMBINE_DATA(&cuebrick_nvram[offset + (state->cuebrick_nvram_bank * 0x400 / 2)]); } static WRITE16_HANDLER( cuebrick_nvbank_w ) { - cuebrick_nvram_bank = (data>>8); + tmnt_state *state = (tmnt_state *)space->machine->driver_data; + state->cuebrick_nvram_bank = data >> 8; } static ADDRESS_MAP_START( cuebrick_main_map, ADDRESS_SPACE_PROGRAM, 16 ) @@ -611,7 +603,7 @@ static ADDRESS_MAP_START( cuebrick_main_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x0b0000, 0x0b03ff) AM_READWRITE(cuebrick_nv_r, cuebrick_nv_w) AM_RANGE(0x0b0400, 0x0b0401) AM_WRITE(cuebrick_nvbank_w) AM_RANGE(0x0c0000, 0x0c0003) AM_DEVREADWRITE8("ymsnd", ym2151_r, ym2151_w, 0xff00) - AM_RANGE(0x100000, 0x107fff) AM_READWRITE(K052109_word_noA12_r, K052109_word_noA12_w) + AM_RANGE(0x100000, 0x107fff) AM_READWRITE(k052109_word_noA12_r, k052109_word_noA12_w) AM_RANGE(0x140000, 0x140007) AM_DEVREADWRITE("k051960", k051937_word_r, k051937_word_w) AM_RANGE(0x140400, 0x1407ff) AM_DEVREADWRITE("k051960", k051960_word_r, k051960_word_w) ADDRESS_MAP_END @@ -632,7 +624,7 @@ static ADDRESS_MAP_START( mia_main_map, ADDRESS_SPACE_PROGRAM, 16 ) #if 0 AM_RANGE(0x0c0000, 0x0c0001) AM_WRITE(tmnt_priority_w) #endif - AM_RANGE(0x100000, 0x107fff) AM_READWRITE(K052109_word_noA12_r, K052109_word_noA12_w) + AM_RANGE(0x100000, 0x107fff) AM_READWRITE(k052109_word_noA12_r, k052109_word_noA12_w) // AM_RANGE(0x10e800, 0x10e801) AM_WRITENOP ??? AM_RANGE(0x140000, 0x140007) AM_DEVREADWRITE("k051960", k051937_word_r, k051937_word_w) AM_RANGE(0x140400, 0x1407ff) AM_DEVREADWRITE("k051960", k051960_word_r, k051960_word_w) @@ -653,7 +645,7 @@ static ADDRESS_MAP_START( tmnt_main_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x0a0014, 0x0a0015) AM_READ_PORT("P4") AM_RANGE(0x0a0018, 0x0a0019) AM_READ_PORT("DSW3") AM_RANGE(0x0c0000, 0x0c0001) AM_WRITE(tmnt_priority_w) - AM_RANGE(0x100000, 0x107fff) AM_READWRITE(K052109_word_noA12_r, K052109_word_noA12_w) + AM_RANGE(0x100000, 0x107fff) AM_READWRITE(k052109_word_noA12_r, k052109_word_noA12_w) // AM_RANGE(0x10e800, 0x10e801) AM_WRITENOP ??? AM_RANGE(0x140000, 0x140007) AM_DEVREADWRITE("k051960", k051937_word_r, k051937_word_w) AM_RANGE(0x140400, 0x1407ff) AM_DEVREADWRITE("k051960", k051960_word_r, k051960_word_w) @@ -669,11 +661,11 @@ static ADDRESS_MAP_START( punkshot_main_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x0a0004, 0x0a0005) AM_READ_PORT("P3/P4") AM_RANGE(0x0a0006, 0x0a0007) AM_READ_PORT("P1/P2") AM_RANGE(0x0a0020, 0x0a0021) AM_WRITE(punkshot_0a0020_w) - AM_RANGE(0x0a0040, 0x0a0043) AM_DEVREAD8("konami", punkshot_sound_r, 0x00ff) /* K053260 */ - AM_RANGE(0x0a0040, 0x0a0041) AM_DEVWRITE8("konami", k053260_w, 0x00ff) + AM_RANGE(0x0a0040, 0x0a0043) AM_DEVREAD8("k053260", punkshot_sound_r, 0x00ff) /* K053260 */ + AM_RANGE(0x0a0040, 0x0a0041) AM_DEVWRITE8("k053260", k053260_w, 0x00ff) AM_RANGE(0x0a0060, 0x0a007f) AM_DEVWRITE("k053251", k053251_lsb_w) AM_RANGE(0x0a0080, 0x0a0081) AM_WRITE(watchdog_reset16_w) - AM_RANGE(0x100000, 0x107fff) AM_READWRITE(K052109_word_noA12_r, punkshot_K052109_word_noA12_w) + AM_RANGE(0x100000, 0x107fff) AM_READWRITE(k052109_word_noA12_r, punkshot_k052109_word_noA12_w) AM_RANGE(0x110000, 0x110007) AM_DEVREADWRITE("k051960", k051937_word_r, k051937_word_w) AM_RANGE(0x110400, 0x1107ff) AM_DEVREADWRITE("k051960", k051960_word_r, k051960_word_w) AM_RANGE(0xfffffc, 0xffffff) AM_READ(punkshot_kludge_r) @@ -691,30 +683,32 @@ static ADDRESS_MAP_START( lgtnfght_main_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x0a0008, 0x0a0009) AM_READ_PORT("DSW2") AM_RANGE(0x0a0010, 0x0a0011) AM_READ_PORT("DSW3") AM_RANGE(0x0a0018, 0x0a0019) AM_WRITE(lgtnfght_0a0018_w) - AM_RANGE(0x0a0020, 0x0a0023) AM_DEVREAD8("konami", punkshot_sound_r, 0x00ff) /* K053260 */ - AM_RANGE(0x0a0020, 0x0a0021) AM_DEVWRITE8("konami", k053260_w, 0x00ff) + AM_RANGE(0x0a0020, 0x0a0023) AM_DEVREAD8("k053260", punkshot_sound_r, 0x00ff) /* K053260 */ + AM_RANGE(0x0a0020, 0x0a0021) AM_DEVWRITE8("k053260", k053260_w, 0x00ff) AM_RANGE(0x0a0028, 0x0a0029) AM_WRITE(watchdog_reset16_w) - AM_RANGE(0x0b0000, 0x0b3fff) AM_READWRITE(K053245_scattered_word_r, K053245_scattered_word_w) AM_BASE_GENERIC(spriteram) - AM_RANGE(0x0c0000, 0x0c001f) AM_READWRITE(K053244_word_noA1_r, K053244_word_noA1_w) + AM_RANGE(0x0b0000, 0x0b3fff) AM_READWRITE(k053245_scattered_word_r, k053245_scattered_word_w) AM_BASE_GENERIC(spriteram) + AM_RANGE(0x0c0000, 0x0c001f) AM_READWRITE(k053244_word_noA1_r, k053244_word_noA1_w) AM_RANGE(0x0e0000, 0x0e001f) AM_DEVWRITE("k053251", k053251_lsb_w) - AM_RANGE(0x100000, 0x107fff) AM_READWRITE(K052109_word_noA12_r, K052109_word_noA12_w) + AM_RANGE(0x100000, 0x107fff) AM_READWRITE(k052109_word_noA12_r, k052109_word_noA12_w) ADDRESS_MAP_END static WRITE16_HANDLER( ssriders_soundkludge_w ) { + tmnt_state *state = (tmnt_state *)space->machine->driver_data; + /* I think this is more than just a trigger */ - cputag_set_input_line_and_vector(space->machine, "audiocpu", 0, HOLD_LINE, 0xff); + cpu_set_input_line_and_vector(state->audiocpu, 0, HOLD_LINE, 0xff); } static ADDRESS_MAP_START( blswhstl_main_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x000000, 0x07ffff) AM_ROM AM_RANGE(0x180000, 0x183fff) AM_DEVREADWRITE("k052109", k052109_word_r, k052109_word_w) AM_RANGE(0x204000, 0x207fff) AM_RAM /* main RAM */ - AM_RANGE(0x300000, 0x303fff) AM_READWRITE(K053245_scattered_word_r, K053245_scattered_word_w) AM_BASE_GENERIC(spriteram) + AM_RANGE(0x300000, 0x303fff) AM_READWRITE(k053245_scattered_word_r, k053245_scattered_word_w) AM_BASE_GENERIC(spriteram) AM_RANGE(0x400000, 0x400fff) AM_RAM_WRITE(paletteram16_xBBBBBGGGGGRRRRR_word_w) AM_BASE_GENERIC(paletteram) AM_RANGE(0x500000, 0x50003f) AM_DEVREADWRITE("k054000", k054000_lsb_r, k054000_lsb_w) - AM_RANGE(0x680000, 0x68001f) AM_READWRITE(K053244_word_noA1_r, K053244_word_noA1_w) + AM_RANGE(0x680000, 0x68001f) AM_READWRITE(k053244_word_noA1_r, k053244_word_noA1_w) AM_RANGE(0x700000, 0x700001) AM_READ_PORT("P1") AM_RANGE(0x700002, 0x700003) AM_READ_PORT("P2") AM_RANGE(0x700004, 0x700005) AM_READ(blswhstl_coin_r) @@ -722,31 +716,30 @@ static ADDRESS_MAP_START( blswhstl_main_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x700200, 0x700201) AM_WRITE(blswhstl_eeprom_w) AM_RANGE(0x700300, 0x700301) AM_WRITE(blswhstl_700300_w) AM_RANGE(0x700400, 0x700401) AM_WRITE(watchdog_reset16_w) - AM_RANGE(0x780600, 0x780603) AM_DEVREAD8("konami", punkshot_sound_r, 0x00ff) /* K053260 */ - AM_RANGE(0x780600, 0x780601) AM_DEVWRITE8("konami", k053260_w, 0x00ff) + AM_RANGE(0x780600, 0x780603) AM_DEVREAD8("k053260", punkshot_sound_r, 0x00ff) /* K053260 */ + AM_RANGE(0x780600, 0x780601) AM_DEVWRITE8("k053260", k053260_w, 0x00ff) AM_RANGE(0x780604, 0x780605) AM_WRITE(ssriders_soundkludge_w) AM_RANGE(0x780700, 0x78071f) AM_DEVWRITE("k053251", k053251_lsb_w) ADDRESS_MAP_END -static WRITE16_HANDLER( K053251_glfgreat_w ) +static WRITE16_HANDLER( k053251_glfgreat_w ) { - const device_config *k053251 = devtag_get_device(space->machine, "k053251"); - const device_config *k052109 = devtag_get_device(space->machine, "k052109"); + tmnt_state *state = (tmnt_state *)space->machine->driver_data; int i; if (ACCESSING_BITS_8_15) { - k053251_w(k053251, offset, (data >> 8) & 0xff); + k053251_w(state->k053251, offset, (data >> 8) & 0xff); /* FIXME: in the old code k052109 tilemaps were tilemaps 2,3,4 for k053251 and got marked as dirty in the write above... how was the original hardware working?!? */ for (i = 0; i < 3; i++) { - if (k053251_get_tmap_dirty(k053251, 2 + i)) + if (k053251_get_tmap_dirty(state->k053251, 2 + i)) { - k052109_tilemap_mark_dirty(k052109, i); - k053251_set_tmap_dirty(k053251, 2 + i, 0); + k052109_tilemap_mark_dirty(state->k052109, i); + k053251_set_tmap_dirty(state->k053251, 2 + i, 0); } } } @@ -755,14 +748,14 @@ static WRITE16_HANDLER( K053251_glfgreat_w ) static ADDRESS_MAP_START( glfgreat_main_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x000000, 0x03ffff) AM_ROM AM_RANGE(0x100000, 0x103fff) AM_RAM /* main RAM */ - AM_RANGE(0x104000, 0x107fff) AM_READWRITE(K053245_scattered_word_r, K053245_scattered_word_w) AM_BASE_GENERIC(spriteram) + AM_RANGE(0x104000, 0x107fff) AM_READWRITE(k053245_scattered_word_r, k053245_scattered_word_w) AM_BASE_GENERIC(spriteram) AM_RANGE(0x108000, 0x108fff) AM_RAM_WRITE(paletteram16_xBBBBBGGGGGRRRRR_word_w) AM_BASE_GENERIC(paletteram) AM_RANGE(0x10c000, 0x10cfff) AM_DEVREADWRITE("k053936", k053936_linectrl_r, k053936_linectrl_w) /* 053936? */ - AM_RANGE(0x110000, 0x11001f) AM_WRITE(K053244_word_noA1_w) /* duplicate! */ + AM_RANGE(0x110000, 0x11001f) AM_WRITE(k053244_word_noA1_w) /* duplicate! */ AM_RANGE(0x114000, 0x11401f) AM_DEVREADWRITE("k053245", k053244_lsb_r, k053244_lsb_w) /* duplicate! */ AM_RANGE(0x118000, 0x11801f) AM_DEVWRITE("k053936", k053936_ctrl_w) AM_RANGE(0x11c000, 0x11c01f) AM_DEVWRITE("k053251", k053251_msb_w) - AM_RANGE(0x11c000, 0x11c01f) AM_WRITE(K053251_glfgreat_w) + AM_RANGE(0x11c000, 0x11c01f) AM_WRITE(k053251_glfgreat_w) AM_RANGE(0x120000, 0x120001) AM_READ_PORT("P1/P2") AM_RANGE(0x120002, 0x120003) AM_READ_PORT("P3/P4") AM_RANGE(0x120004, 0x120005) AM_READ_PORT("COINS/DSW3") @@ -770,8 +763,8 @@ static ADDRESS_MAP_START( glfgreat_main_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x121000, 0x121001) AM_READ(glfgreat_ball_r) /* returns the color of the center pixel of the roz layer */ AM_RANGE(0x122000, 0x122001) AM_WRITE(glfgreat_122000_w) AM_RANGE(0x124000, 0x124001) AM_WRITE(watchdog_reset16_w) - AM_RANGE(0x125000, 0x125003) AM_DEVREADWRITE8("konami", punkshot_sound_r, glfgreat_sound_w, 0xff00) /* K053260 */ - AM_RANGE(0x200000, 0x207fff) AM_READWRITE(K052109_word_noA12_r, K052109_word_noA12_w) + AM_RANGE(0x125000, 0x125003) AM_DEVREADWRITE8("k053260", punkshot_sound_r, glfgreat_sound_w, 0xff00) /* K053260 */ + AM_RANGE(0x200000, 0x207fff) AM_READWRITE(k052109_word_noA12_r, k052109_word_noA12_w) AM_RANGE(0x300000, 0x3fffff) AM_READ(glfgreat_rom_r) ADDRESS_MAP_END @@ -779,86 +772,94 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( prmrsocr_main_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x000000, 0x07ffff) AM_ROM AM_RANGE(0x100000, 0x103fff) AM_RAM /* main RAM */ - AM_RANGE(0x104000, 0x107fff) AM_READWRITE(K053245_scattered_word_r, K053245_scattered_word_w) AM_BASE_GENERIC(spriteram) + AM_RANGE(0x104000, 0x107fff) AM_READWRITE(k053245_scattered_word_r, k053245_scattered_word_w) AM_BASE_GENERIC(spriteram) AM_RANGE(0x108000, 0x108fff) AM_RAM_WRITE(paletteram16_xBBBBBGGGGGRRRRR_word_w) AM_BASE_GENERIC(paletteram) AM_RANGE(0x10c000, 0x10cfff) AM_DEVREADWRITE("k053936", k053936_linectrl_r, k053936_linectrl_w) - AM_RANGE(0x110000, 0x11001f) AM_WRITE(K053244_word_noA1_w) /* duplicate! */ + AM_RANGE(0x110000, 0x11001f) AM_WRITE(k053244_word_noA1_w) /* duplicate! */ AM_RANGE(0x114000, 0x11401f) AM_DEVREADWRITE("k053245", k053244_lsb_r, k053244_lsb_w) /* duplicate! */ AM_RANGE(0x118000, 0x11801f) AM_DEVWRITE("k053936", k053936_ctrl_w) AM_RANGE(0x11c000, 0x11c01f) AM_DEVWRITE("k053251", k053251_msb_w) - AM_RANGE(0x11c000, 0x11c01f) AM_WRITE(K053251_glfgreat_w) + AM_RANGE(0x11c000, 0x11c01f) AM_WRITE(k053251_glfgreat_w) AM_RANGE(0x120000, 0x120001) AM_READ_PORT("P1/COINS") AM_RANGE(0x120002, 0x120003) AM_READ_PORT("P2/EEPROM") AM_RANGE(0x12100c, 0x12100f) AM_WRITE(prmrsocr_sound_cmd_w) AM_RANGE(0x121014, 0x121015) AM_READ(prmrsocr_sound_r) AM_RANGE(0x122000, 0x122001) AM_WRITE(prmrsocr_eeprom_w) /* EEPROM + video control */ AM_RANGE(0x123000, 0x123001) AM_WRITE(prmrsocr_sound_irq_w) - AM_RANGE(0x200000, 0x207fff) AM_READWRITE(K052109_word_noA12_r, K052109_word_noA12_w) + AM_RANGE(0x200000, 0x207fff) AM_READWRITE(k052109_word_noA12_r, k052109_word_noA12_w) AM_RANGE(0x280000, 0x280001) AM_WRITE(watchdog_reset16_w) AM_RANGE(0x300000, 0x33ffff) AM_READ(prmrsocr_rom_r) ADDRESS_MAP_END -static UINT16 *tmnt2_1c0800,*sunset_104000; -static UINT16 *tmnt2_rom; - #if 1 -INLINE UINT32 tmnt2_get_word(running_machine *machine, UINT32 addr) +INLINE UINT32 tmnt2_get_word( running_machine *machine, UINT32 addr ) { - if (addr <= 0x07ffff/2) return(tmnt2_rom[addr]); else - if (addr >= 0x104000/2 && addr <= 0x107fff/2) return(sunset_104000[addr-0x104000/2]); else - if (addr >= 0x180000/2 && addr <= 0x183fff/2) return(machine->generic.spriteram.u16[addr-0x180000/2]); - return(0); + tmnt_state *state = (tmnt_state *)machine->driver_data; + + if (addr <= 0x07ffff / 2) + return(state->tmnt2_rom[addr]); + else if (addr >= 0x104000 / 2 && addr <= 0x107fff / 2) + return(state->sunset_104000[addr - 0x104000 / 2]); + else if (addr >= 0x180000 / 2 && addr <= 0x183fff / 2) + return(machine->generic.spriteram.u16[addr - 0x180000 / 2]); + return 0; } -static void tmnt2_put_word(const address_space *space, UINT32 addr, UINT16 data) +static void tmnt2_put_word( const address_space *space, UINT32 addr, UINT16 data ) { - const device_config *k053245 = devtag_get_device(space->machine, "k053245"); + tmnt_state *state = (tmnt_state *)space->machine->driver_data; UINT32 offs; - if (addr >= 0x180000/2 && addr <= 0x183fff/2) + if (addr >= 0x180000 / 2 && addr <= 0x183fff / 2) { - space->machine->generic.spriteram.u16[addr-0x180000/2] = data; - offs = addr-0x180000/2; + space->machine->generic.spriteram.u16[addr - 0x180000 / 2] = data; + offs = addr - 0x180000 / 2; if (!(offs & 0x0031)) { offs = ((offs & 0x000e) >> 1) | ((offs & 0x1fc0) >> 3); - k053245_word_w(k053245, offs, data, 0xffff); + k053245_word_w(state->k053245, offs, data, 0xffff); } } - else if (addr >= 0x104000/2 && addr <= 0x107fff/2) sunset_104000[addr-0x104000/2] = data; + else if (addr >= 0x104000 / 2 && addr <= 0x107fff / 2) + state->sunset_104000[addr - 0x104000 / 2] = data; } static WRITE16_HANDLER( tmnt2_1c0800_w ) { + tmnt_state *state = (tmnt_state *)space->machine->driver_data; UINT32 src_addr, dst_addr, mod_addr, attr1, code, attr2, cbase, cmod, color; int xoffs, yoffs, xmod, ymod, zmod, xzoom, yzoom, i; UINT16 *mcu; UINT16 src[4], mod[24]; UINT8 keepaspect, xlock, ylock, zlock; - COMBINE_DATA(tmnt2_1c0800 + offset); + COMBINE_DATA(state->tmnt2_1c0800 + offset); - if (offset != 0x18/2 || !ACCESSING_BITS_8_15) return; + if (offset != 0x18/2 || !ACCESSING_BITS_8_15) + return; - mcu = tmnt2_1c0800; - if ((mcu[8] & 0xff00) != 0x8200) return; + mcu = state->tmnt2_1c0800; + if ((mcu[8] & 0xff00) != 0x8200) + return; - src_addr = (mcu[0] | (mcu[1]&0xff)<<16) >> 1; - dst_addr = (mcu[2] | (mcu[3]&0xff)<<16) >> 1; - mod_addr = (mcu[4] | (mcu[5]&0xff)<<16) >> 1; + src_addr = (mcu[0] | (mcu[1] & 0xff) << 16) >> 1; + dst_addr = (mcu[2] | (mcu[3] & 0xff) << 16) >> 1; + mod_addr = (mcu[4] | (mcu[5] & 0xff) << 16) >> 1; zlock = (mcu[8] & 0xff) == 0x0001; - for (i=0; i< 4; i++) src[i] = tmnt2_get_word(space->machine, src_addr + i); - for (i=0; i<24; i++) mod[i] = tmnt2_get_word(space->machine, mod_addr + i); + for (i = 0; i < 4; i++) + src[i] = tmnt2_get_word(space->machine, src_addr + i); + for (i = 0; i < 24; i++) mod[i] = + tmnt2_get_word(space->machine, mod_addr + i); code = src[0]; // code - i= src[1]; - attr1 = i>>2 & 0x3f00; // flip y, flip x and sprite size + i = src[1]; + attr1 = i >> 2 & 0x3f00; // flip y, flip x and sprite size attr2 = i & 0x380; // mirror y, mirror x, shadow cbase = i & 0x01f; // base color - cmod = mod[0x2a/2]>>8; + cmod = mod[0x2a / 2] >> 8; color = (cbase != 0x0f && cmod <= 0x1f && !zlock) ? cmod : cbase; xoffs = (INT16)src[2]; // local x @@ -875,8 +876,8 @@ static WRITE16_HANDLER( tmnt2_1c0800_w ) xmod = (INT16)mod[6]; // global x ymod = (INT16)mod[7]; // global y zmod = (INT16)mod[8]; // global z - xzoom = mod[0x1c/2]; - yzoom = (keepaspect) ? xzoom : mod[0x1e/2]; + xzoom = mod[0x1c / 2]; + yzoom = (keepaspect) ? xzoom : mod[0x1e / 2]; ylock = xlock = (i & 0x0020 && (!xzoom || xzoom == 0x100)); @@ -891,7 +892,7 @@ static WRITE16_HANDLER( tmnt2_1c0800_w ) The most accurate method is to trace how MCU zoom is transformed from ROM data, reverse the maths, plug the result into the sprite zoom code and derive the scale factor from there; but zooming - would still suffer from precision loss in K053245_sprites_draw() + would still suffer from precision loss in k053245_sprites_draw() and drawgfx() producing gaps in logical sprite groups. A few sample points on the real curve: @@ -915,7 +916,7 @@ static WRITE16_HANDLER( tmnt2_1c0800_w ) } else if (i < 0) { - i = (i>>3) + (i>>4) + (i>>5) + (i>>6) + xzoom; + i = (i >> 3) + (i >> 4) + (i >> 5) + (i >> 6) + xzoom; xoffs = (i > 0) ? (xoffs * i / 0x4f00) : 0; } } @@ -929,7 +930,7 @@ static WRITE16_HANDLER( tmnt2_1c0800_w ) } else if (i < 0) { - i = (i>>3) + (i>>4) + (i>>5) + (i>>6) + yzoom; + i = (i >> 3) + (i >> 4) + (i >> 5) + (i >> 6) + yzoom; yoffs = (i > 0) ? (yoffs * i / 0x4f00) : 0; } @@ -947,8 +948,9 @@ static WRITE16_HANDLER( tmnt2_1c0800_w ) #else // for reference; do not remove static WRITE16_HANDLER( tmnt2_1c0800_w ) { - COMBINE_DATA( tmnt2_1c0800 + offset); - if ( offset == 0x0008 && ( tmnt2_1c0800[0x8] & 0xff00 ) == 0x8200 ) + tmnt_state *state = (tmnt_state *)space->machine->driver_data; + COMBINE_DATA(state->tmnt2_1c0800 + offset); + if (offset == 0x0008 && (state->tmnt2_1c0800[0x8] & 0xff00) == 0x8200) { UINT32 CellSrc; UINT32 CellVar; @@ -956,18 +958,18 @@ static WRITE16_HANDLER( tmnt2_1c0800_w ) int dst; int x,y; - CellVar = tmnt2_1c0800[0x04] | (tmnt2_1c0800[0x05] << 16 ); - dst = tmnt2_1c0800[0x02] | (tmnt2_1c0800[0x03] << 16 ); - CellSrc = tmnt2_1c0800[0x00] | (tmnt2_1c0800[0x01] << 16 ); -// if ( CellDest >= 0x180000 && CellDest < 0x183fe0 ) { + CellVar = state->tmnt2_1c0800[0x04] | (state->tmnt2_1c0800[0x05] << 16 ); + dst = state->tmnt2_1c0800[0x02] | (state->tmnt2_1c0800[0x03] << 16 ); + CellSrc = state->tmnt2_1c0800[0x00] | (state->tmnt2_1c0800[0x01] << 16 ); +// if (CellDest >= 0x180000 && CellDest < 0x183fe0) { CellVar -= 0x104000; src = (UINT16 *)(memory_region(space->machine, "maincpu") + CellSrc); CellVar >>= 1; - memory_write_word(space,dst+0x00, 0x8000 | ((src[1] & 0xfc00) >> 2)); /* size, flip xy */ - memory_write_word(space,dst+0x04, src[0]); /* code */ - memory_write_word(space,dst+0x18, (src[1] & 0x3ff) ^ /* color, mirror, priority */ + memory_write_word(space, dst + 0x00, 0x8000 | ((src[1] & 0xfc00) >> 2)); /* size, flip xy */ + memory_write_word(space, dst + 0x04, src[0]); /* code */ + memory_write_word(space, dst + 0x18, (src[1] & 0x3ff) ^ /* color, mirror, priority */ (sunset_104000[CellVar + 0x00] & 0x0060)); /* base color modifier */ @@ -976,55 +978,55 @@ static WRITE16_HANDLER( tmnt2_1c0800_w ) /* It fixes the enemies, though, they are not all purple when you throw them around. */ /* Also, the bosses don't blink when they are about to die - don't know */ /* if this is correct or not. */ -// if (sunset_104000[CellVar + 0x15] & 0x001f) -// memory_write_word(dst+0x18,(memory_read_word(space, dst+0x18) & 0xffe0) | -// (sunset_104000[CellVar + 0x15] & 0x001f)); +// if (state->sunset_104000[CellVar + 0x15] & 0x001f) +// memory_write_word(dst + 0x18, (memory_read_word(space, dst + 0x18) & 0xffe0) | +// (state->sunset_104000[CellVar + 0x15] & 0x001f)); x = src[2]; - if (sunset_104000[CellVar + 0x00] & 0x4000) + if (state->sunset_104000[CellVar + 0x00] & 0x4000) { /* flip x */ - memory_write_word(space,dst+0x00,memory_read_word(space, dst+0x00) ^ 0x1000); + memory_write_word(space, dst + 0x00, memory_read_word(space, dst + 0x00) ^ 0x1000); x = -x; } - x += sunset_104000[CellVar + 0x06]; - memory_write_word(space,dst+0x0c,x); + x += state->sunset_104000[CellVar + 0x06]; + memory_write_word(space, dst + 0x0c, x); y = src[3]; - y += sunset_104000[CellVar + 0x07]; + y += state->sunset_104000[CellVar + 0x07]; /* don't do second offset for shadows */ - if ((tmnt2_1c0800[0x08] & 0x00ff) != 0x01) - y += sunset_104000[CellVar + 0x08]; - memory_write_word(space,dst+0x08,y); + if ((state->tmnt2_1c0800[0x08] & 0x00ff) != 0x01) + y += state->sunset_104000[CellVar + 0x08]; + memory_write_word(space, dst + 0x08, y); #if 0 logerror("copy command %04x sprite %08x data %08x: %04x%04x %04x%04x modifiers %08x:%04x%04x %04x%04x %04x%04x %04x%04x %04x%04x %04x%04x %04x%04x %04x%04x %04x%04x %04x%04x %04x%04x %04x%04x\n", - tmnt2_1c0800[0x05], + state->tmnt2_1c0800[0x05], CellDest,CellSrc, src[0], src[1], src[2], src[3], CellVar*2, - sunset_104000[CellVar + 0x00], - sunset_104000[CellVar + 0x01], - sunset_104000[CellVar + 0x02], - sunset_104000[CellVar + 0x03], - sunset_104000[CellVar + 0x04], - sunset_104000[CellVar + 0x05], - sunset_104000[CellVar + 0x06], - sunset_104000[CellVar + 0x07], - sunset_104000[CellVar + 0x08], - sunset_104000[CellVar + 0x09], - sunset_104000[CellVar + 0x0a], - sunset_104000[CellVar + 0x0b], - sunset_104000[CellVar + 0x0c], - sunset_104000[CellVar + 0x0d], - sunset_104000[CellVar + 0x0e], - sunset_104000[CellVar + 0x0f], - sunset_104000[CellVar + 0x10], - sunset_104000[CellVar + 0x11], - sunset_104000[CellVar + 0x12], - sunset_104000[CellVar + 0x13], - sunset_104000[CellVar + 0x14], - sunset_104000[CellVar + 0x15], - sunset_104000[CellVar + 0x16], - sunset_104000[CellVar + 0x17] + state->sunset_104000[CellVar + 0x00], + state->sunset_104000[CellVar + 0x01], + state->sunset_104000[CellVar + 0x02], + state->sunset_104000[CellVar + 0x03], + state->sunset_104000[CellVar + 0x04], + state->sunset_104000[CellVar + 0x05], + state->sunset_104000[CellVar + 0x06], + state->sunset_104000[CellVar + 0x07], + state->sunset_104000[CellVar + 0x08], + state->sunset_104000[CellVar + 0x09], + state->sunset_104000[CellVar + 0x0a], + state->sunset_104000[CellVar + 0x0b], + state->sunset_104000[CellVar + 0x0c], + state->sunset_104000[CellVar + 0x0d], + state->sunset_104000[CellVar + 0x0e], + state->sunset_104000[CellVar + 0x0f], + state->sunset_104000[CellVar + 0x10], + state->sunset_104000[CellVar + 0x11], + state->sunset_104000[CellVar + 0x12], + state->sunset_104000[CellVar + 0x13], + state->sunset_104000[CellVar + 0x14], + state->sunset_104000[CellVar + 0x15], + state->sunset_104000[CellVar + 0x16], + state->sunset_104000[CellVar + 0x17] ); #endif // } @@ -1033,10 +1035,10 @@ logerror("copy command %04x sprite %08x data %08x: %04x%04x %04x%04x modifiers #endif static ADDRESS_MAP_START( tmnt2_main_map, ADDRESS_SPACE_PROGRAM, 16 ) - AM_RANGE(0x000000, 0x0fffff) AM_ROM AM_BASE(&tmnt2_rom) - AM_RANGE(0x104000, 0x107fff) AM_RAM AM_BASE(&sunset_104000) /* main RAM */ + AM_RANGE(0x000000, 0x0fffff) AM_ROM AM_BASE_MEMBER(tmnt_state, tmnt2_rom) + AM_RANGE(0x104000, 0x107fff) AM_RAM AM_BASE_MEMBER(tmnt_state, sunset_104000) /* main RAM */ AM_RANGE(0x140000, 0x140fff) AM_RAM_WRITE(paletteram16_xBBBBBGGGGGRRRRR_word_w) AM_BASE_GENERIC(paletteram) - AM_RANGE(0x180000, 0x183fff) AM_RAM_WRITE(K053245_scattered_word_w) AM_BASE_GENERIC(spriteram) // K053245_scattered_word_r + AM_RANGE(0x180000, 0x183fff) AM_RAM_WRITE(k053245_scattered_word_w) AM_BASE_GENERIC(spriteram) // k053245_scattered_word_r AM_RANGE(0x1c0000, 0x1c0001) AM_READ_PORT("P1") AM_RANGE(0x1c0002, 0x1c0003) AM_READ_PORT("P2") AM_RANGE(0x1c0004, 0x1c0005) AM_READ_PORT("P3") @@ -1048,10 +1050,10 @@ static ADDRESS_MAP_START( tmnt2_main_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x1c0400, 0x1c0401) AM_READWRITE(watchdog_reset16_r, watchdog_reset16_w) AM_RANGE(0x1c0500, 0x1c057f) AM_RAM /* TMNT2 only (1J) unknown, mostly MCU blit offsets */ // AM_RANGE(0x1c0800, 0x1c0801) AM_READ(ssriders_protection_r) /* protection device */ - AM_RANGE(0x1c0800, 0x1c081f) AM_WRITE(tmnt2_1c0800_w) AM_BASE(&tmnt2_1c0800) /* protection device */ - AM_RANGE(0x5a0000, 0x5a001f) AM_READWRITE(K053244_word_noA1_r, K053244_word_noA1_w) - AM_RANGE(0x5c0600, 0x5c0603) AM_DEVREAD8("konami", punkshot_sound_r, 0x00ff) /* K053260 */ - AM_RANGE(0x5c0600, 0x5c0601) AM_DEVWRITE8("konami", k053260_w, 0x00ff) + AM_RANGE(0x1c0800, 0x1c081f) AM_WRITE(tmnt2_1c0800_w) AM_BASE_MEMBER(tmnt_state, tmnt2_1c0800) /* protection device */ + AM_RANGE(0x5a0000, 0x5a001f) AM_READWRITE(k053244_word_noA1_r, k053244_word_noA1_w) + AM_RANGE(0x5c0600, 0x5c0603) AM_DEVREAD8("k053260", punkshot_sound_r, 0x00ff) /* K053260 */ + AM_RANGE(0x5c0600, 0x5c0601) AM_DEVWRITE8("k053260", k053260_w, 0x00ff) AM_RANGE(0x5c0604, 0x5c0605) AM_WRITE(ssriders_soundkludge_w) AM_RANGE(0x5c0700, 0x5c071f) AM_DEVWRITE("k053251", k053251_lsb_w) AM_RANGE(0x600000, 0x603fff) AM_DEVREADWRITE("k052109", k052109_word_r, k052109_word_w) @@ -1062,7 +1064,7 @@ static ADDRESS_MAP_START( ssriders_main_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x000000, 0x0bffff) AM_ROM AM_RANGE(0x104000, 0x107fff) AM_RAM /* main RAM */ AM_RANGE(0x140000, 0x140fff) AM_RAM_WRITE(paletteram16_xBBBBBGGGGGRRRRR_word_w) AM_BASE_GENERIC(paletteram) - AM_RANGE(0x180000, 0x183fff) AM_READWRITE(K053245_scattered_word_r, K053245_scattered_word_w) AM_BASE_GENERIC(spriteram) + AM_RANGE(0x180000, 0x183fff) AM_READWRITE(k053245_scattered_word_r, k053245_scattered_word_w) AM_BASE_GENERIC(spriteram) AM_RANGE(0x1c0000, 0x1c0001) AM_READ_PORT("P1") AM_RANGE(0x1c0002, 0x1c0003) AM_READ_PORT("P2") AM_RANGE(0x1c0004, 0x1c0005) AM_READ_PORT("P3") @@ -1075,9 +1077,9 @@ static ADDRESS_MAP_START( ssriders_main_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x1c0500, 0x1c057f) AM_RAM /* TMNT2 only (1J) unknown */ AM_RANGE(0x1c0800, 0x1c0801) AM_READ(ssriders_protection_r) AM_RANGE(0x1c0800, 0x1c0803) AM_WRITE(ssriders_protection_w) - AM_RANGE(0x5a0000, 0x5a001f) AM_READWRITE(K053244_word_noA1_r, K053244_word_noA1_w) - AM_RANGE(0x5c0600, 0x5c0603) AM_DEVREAD8("konami", punkshot_sound_r, 0x00ff) /* K053260 */ - AM_RANGE(0x5c0600, 0x5c0601) AM_DEVWRITE8("konami", k053260_w, 0x00ff) + AM_RANGE(0x5a0000, 0x5a001f) AM_READWRITE(k053244_word_noA1_r, k053244_word_noA1_w) + AM_RANGE(0x5c0600, 0x5c0603) AM_DEVREAD8("k053260", punkshot_sound_r, 0x00ff) /* K053260 */ + AM_RANGE(0x5c0600, 0x5c0601) AM_DEVWRITE8("k053260", k053260_w, 0x00ff) AM_RANGE(0x5c0604, 0x5c0605) AM_WRITE(ssriders_soundkludge_w) AM_RANGE(0x5c0700, 0x5c071f) AM_DEVWRITE("k053251", k053251_lsb_w) AM_RANGE(0x600000, 0x603fff) AM_DEVREADWRITE("k052109", k052109_word_r, k052109_word_w) @@ -1089,11 +1091,11 @@ static ADDRESS_MAP_START( sunsetbl_main_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x104000, 0x107fff) AM_RAM /* main RAM */ AM_RANGE(0x14c000, 0x14cfff) AM_RAM_WRITE(paletteram16_xBBBBBGGGGGRRRRR_word_w) AM_BASE_GENERIC(paletteram) AM_RANGE(0x14e700, 0x14e71f) AM_DEVWRITE("k053251", k053251_lsb_w) - AM_RANGE(0x180000, 0x183fff) AM_READWRITE(K053245_scattered_word_r, K053245_scattered_word_w) AM_BASE_GENERIC(spriteram) + AM_RANGE(0x180000, 0x183fff) AM_READWRITE(k053245_scattered_word_r, k053245_scattered_word_w) AM_BASE_GENERIC(spriteram) AM_RANGE(0x184000, 0x18ffff) AM_RAM AM_RANGE(0x1c0300, 0x1c0301) AM_WRITE(ssriders_1c0300_w) AM_RANGE(0x1c0400, 0x1c0401) AM_WRITENOP - AM_RANGE(0x5a0000, 0x5a001f) AM_READWRITE(K053244_word_noA1_r, K053244_word_noA1_w) + AM_RANGE(0x5a0000, 0x5a001f) AM_READWRITE(k053244_word_noA1_r, k053244_word_noA1_w) AM_RANGE(0x600000, 0x603fff) AM_DEVREADWRITE("k052109", k052109_word_r, k052109_word_w) AM_RANGE(0x604020, 0x60402f) AM_WRITENOP /* written every frame */ AM_RANGE(0x604200, 0x604201) AM_WRITENOP /* watchdog */ @@ -1115,14 +1117,14 @@ static ADDRESS_MAP_START( thndrx2_main_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x100000, 0x103fff) AM_RAM /* main RAM */ AM_RANGE(0x200000, 0x200fff) AM_RAM_WRITE(paletteram16_xBBBBBGGGGGRRRRR_word_w) AM_BASE_GENERIC(paletteram) AM_RANGE(0x300000, 0x30001f) AM_DEVWRITE("k053251", k053251_lsb_w) - AM_RANGE(0x400000, 0x400003) AM_DEVREAD8("konami", punkshot_sound_r, 0x00ff) /* K053260 */ - AM_RANGE(0x400000, 0x400001) AM_DEVWRITE8("konami", k053260_w, 0x00ff) + AM_RANGE(0x400000, 0x400003) AM_DEVREAD8("k053260", punkshot_sound_r, 0x00ff) /* K053260 */ + AM_RANGE(0x400000, 0x400001) AM_DEVWRITE8("k053260", k053260_w, 0x00ff) AM_RANGE(0x500000, 0x50003f) AM_DEVREADWRITE("k054000", k054000_lsb_r, k054000_lsb_w) AM_RANGE(0x500100, 0x500101) AM_WRITE(thndrx2_eeprom_w) AM_RANGE(0x500200, 0x500201) AM_READ_PORT("P1/COINS") AM_RANGE(0x500202, 0x500203) AM_READ(thndrx2_eeprom_r) AM_RANGE(0x500300, 0x500301) AM_WRITENOP /* watchdog reset? irq enable? */ - AM_RANGE(0x600000, 0x607fff) AM_READWRITE(K052109_word_noA12_r, K052109_word_noA12_w) + AM_RANGE(0x600000, 0x607fff) AM_READWRITE(k052109_word_noA12_r, k052109_word_noA12_w) AM_RANGE(0x700000, 0x700007) AM_DEVREADWRITE("k051960", k051937_word_r, k051937_word_w) AM_RANGE(0x700400, 0x7007ff) AM_DEVREADWRITE("k051960", k051960_word_r, k051960_word_w) ADDRESS_MAP_END @@ -1133,7 +1135,7 @@ static ADDRESS_MAP_START( mia_audio_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0x0000, 0x7fff) AM_ROM AM_RANGE(0x8000, 0x87ff) AM_RAM AM_RANGE(0xa000, 0xa000) AM_READ(soundlatch_r) - AM_RANGE(0xb000, 0xb00d) AM_DEVREADWRITE("konami", k007232_r, k007232_w) + AM_RANGE(0xb000, 0xb00d) AM_DEVREADWRITE("k007232", k007232_r, k007232_w) AM_RANGE(0xc000, 0xc001) AM_DEVREADWRITE("ymsnd", ym2151_r, ym2151_w) ADDRESS_MAP_END @@ -1143,7 +1145,7 @@ static ADDRESS_MAP_START( tmnt_audio_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0x8000, 0x87ff) AM_RAM AM_RANGE(0x9000, 0x9000) AM_READWRITE(tmnt_sres_r, tmnt_sres_w) /* title music & UPD7759C reset */ AM_RANGE(0xa000, 0xa000) AM_READ(soundlatch_r) - AM_RANGE(0xb000, 0xb00d) AM_DEVREADWRITE("konami", k007232_r, k007232_w) + AM_RANGE(0xb000, 0xb00d) AM_DEVREADWRITE("k007232", k007232_r, k007232_w) AM_RANGE(0xc000, 0xc001) AM_DEVREADWRITE("ymsnd", ym2151_r, ym2151_w) AM_RANGE(0xd000, 0xd000) AM_DEVWRITE("upd", upd7759_port_w) AM_RANGE(0xe000, 0xe000) AM_DEVWRITE("upd", tmnt_upd_start_w) @@ -1156,7 +1158,7 @@ static ADDRESS_MAP_START( punkshot_audio_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0xf000, 0xf7ff) AM_RAM AM_RANGE(0xf800, 0xf801) AM_DEVREADWRITE("ymsnd", ym2151_r, ym2151_w) AM_RANGE(0xfa00, 0xfa00) AM_WRITE(sound_arm_nmi_w) - AM_RANGE(0xfc00, 0xfc2f) AM_DEVREADWRITE("konami", k053260_r, k053260_w) + AM_RANGE(0xfc00, 0xfc2f) AM_DEVREADWRITE("k053260", k053260_r, k053260_w) ADDRESS_MAP_END @@ -1164,14 +1166,14 @@ static ADDRESS_MAP_START( lgtnfght_audio_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0x0000, 0x7fff) AM_ROM AM_RANGE(0x8000, 0x87ff) AM_RAM AM_RANGE(0xa000, 0xa001) AM_DEVREADWRITE("ymsnd", ym2151_r, ym2151_w) - AM_RANGE(0xc000, 0xc02f) AM_DEVREADWRITE("konami", k053260_r, k053260_w) + AM_RANGE(0xc000, 0xc02f) AM_DEVREADWRITE("k053260", k053260_r, k053260_w) ADDRESS_MAP_END static ADDRESS_MAP_START( glfgreat_audio_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0x0000, 0x7fff) AM_ROM AM_RANGE(0xf000, 0xf7ff) AM_RAM - AM_RANGE(0xf800, 0xf82f) AM_DEVREADWRITE("konami", k053260_r, k053260_w) + AM_RANGE(0xf800, 0xf82f) AM_DEVREADWRITE("k053260", k053260_r, k053260_w) AM_RANGE(0xfa00, 0xfa00) AM_WRITE(sound_arm_nmi_w) ADDRESS_MAP_END @@ -1180,7 +1182,7 @@ static ADDRESS_MAP_START( ssriders_audio_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0x0000, 0xefff) AM_ROM AM_RANGE(0xf000, 0xf7ff) AM_RAM AM_RANGE(0xf800, 0xf801) AM_DEVREADWRITE("ymsnd", ym2151_r, ym2151_w) - AM_RANGE(0xfa00, 0xfa2f) AM_DEVREADWRITE("konami", k053260_r, k053260_w) + AM_RANGE(0xfa00, 0xfa2f) AM_DEVREADWRITE("k053260", k053260_r, k053260_w) AM_RANGE(0xfc00, 0xfc00) AM_WRITE(sound_arm_nmi_w) ADDRESS_MAP_END @@ -1190,25 +1192,26 @@ static ADDRESS_MAP_START( thndrx2_audio_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0xf000, 0xf7ff) AM_RAM AM_RANGE(0xf800, 0xf801) AM_MIRROR(0x0010) AM_DEVREADWRITE("ymsnd", ym2151_r, ym2151_w) AM_RANGE(0xfa00, 0xfa00) AM_WRITE(sound_arm_nmi_w) - AM_RANGE(0xfc00, 0xfc2f) AM_DEVREADWRITE("konami", k053260_r, k053260_w) + AM_RANGE(0xfc00, 0xfc2f) AM_DEVREADWRITE("k053260", k053260_r, k053260_w) ADDRESS_MAP_END static READ8_DEVICE_HANDLER( k054539_ctrl_r ) { - return k054539_r(device,0x200+offset); + return k054539_r(device, 0x200 + offset); } + static WRITE8_DEVICE_HANDLER( k054539_ctrl_w ) { - k054539_w(device,0x200+offset,data); + k054539_w(device, 0x200 + offset, data); } static ADDRESS_MAP_START( prmrsocr_audio_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0x0000, 0x7fff) AM_ROM AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank1") AM_RANGE(0xc000, 0xdfff) AM_RAM - AM_RANGE(0xe000, 0xe0ff) AM_DEVREADWRITE("konami", k054539_r, k054539_w) - AM_RANGE(0xe100, 0xe12f) AM_DEVREADWRITE("konami", k054539_ctrl_r, k054539_ctrl_w) + AM_RANGE(0xe000, 0xe0ff) AM_DEVREADWRITE("k054539", k054539_r, k054539_w) + AM_RANGE(0xe100, 0xe12f) AM_DEVREADWRITE("k054539", k054539_ctrl_r, k054539_ctrl_w) AM_RANGE(0xf000, 0xf000) AM_WRITE(soundlatch3_w) AM_RANGE(0xf002, 0xf002) AM_READ(soundlatch_r) AM_RANGE(0xf003, 0xf003) AM_READ(soundlatch2_r) @@ -2060,9 +2063,10 @@ static INPUT_PORTS_START( prmrsocr ) INPUT_PORTS_END -static void cuebrick_irq_handler(const device_config *device, int state) +static void cuebrick_irq_handler( const device_config *device, int state ) { - cuebrick_snd_irqlatch = state; + tmnt_state *tmnt = (tmnt_state *)device->machine->driver_data; + tmnt->cuebrick_snd_irqlatch = state; } static const ym2151_interface ym2151_interface_cbj = @@ -2072,8 +2076,8 @@ static const ym2151_interface ym2151_interface_cbj = static void volume_callback(const device_config *device, int v) { - k007232_set_volume(device,0,(v >> 4) * 0x11,0); - k007232_set_volume(device,1,0,(v & 0x0f) * 0x11); + k007232_set_volume(device, 0, (v >> 4) * 0x11, 0); + k007232_set_volume(device, 1, 0, (v & 0x0f) * 0x11); } static const k007232_interface k007232_config = @@ -2229,13 +2233,60 @@ static const k053936_interface prmrsocr_k053936_interface = }; +static MACHINE_START( common ) +{ + tmnt_state *state = (tmnt_state *)machine->driver_data; + + state->maincpu = devtag_get_device(machine, "maincpu"); + state->audiocpu = devtag_get_device(machine, "audiocpu"); + state->k007232 = devtag_get_device(machine, "k007232"); + state->k053260 = devtag_get_device(machine, "k053260"); + state->k054539 = devtag_get_device(machine, "k054539"); + state->upd = devtag_get_device(machine, "upd"); + state->samples = devtag_get_device(machine, "samples"); + state->k052109 = devtag_get_device(machine, "k052109"); + state->k051960 = devtag_get_device(machine, "k051960"); + state->k053245 = devtag_get_device(machine, "k053245"); + state->k053251 = devtag_get_device(machine, "k053251"); + state->k053936 = devtag_get_device(machine, "k053936"); + state->k054000 = devtag_get_device(machine, "k054000"); + + state_save_register_global(machine, state->toggle); + state_save_register_global(machine, state->last); + state_save_register_global(machine, state->tmnt_soundlatch); + state_save_register_global(machine, state->cuebrick_snd_irqlatch); + state_save_register_global(machine, state->cuebrick_nvram_bank); + state_save_register_global(machine, state->sprite_colorbase); + state_save_register_global_array(machine, state->layer_colorbase); + state_save_register_global_array(machine, state->layerpri); + state_save_register_global_array(machine, state->sorted_layer); +} + +static MACHINE_RESET( common ) +{ + tmnt_state *state = (tmnt_state *)machine->driver_data; + + state->toggle = 0; + state->last = 0; + state->tmnt_soundlatch = 0; + state->cuebrick_snd_irqlatch = 0; + state->cuebrick_nvram_bank = 0; +} + + static MACHINE_DRIVER_START( cuebrick ) + /* driver data */ + MDRV_DRIVER_DATA(tmnt_state) + /* basic machine hardware */ MDRV_CPU_ADD("maincpu", M68000, 8000000) /* 8 MHz */ MDRV_CPU_PROGRAM_MAP(cuebrick_main_map) MDRV_CPU_VBLANK_INT_HACK(cuebrick_interrupt,10) + MDRV_MACHINE_START(common) + MDRV_MACHINE_RESET(common) + /* video hardware */ MDRV_VIDEO_ATTRIBUTES(VIDEO_HAS_SHADOWS | VIDEO_HAS_HIGHLIGHTS | VIDEO_UPDATE_AFTER_VBLANK) @@ -2267,6 +2318,9 @@ MACHINE_DRIVER_END static MACHINE_DRIVER_START( mia ) + /* driver data */ + MDRV_DRIVER_DATA(tmnt_state) + /* basic machine hardware */ MDRV_CPU_ADD("maincpu", M68000, XTAL_24MHz/3) MDRV_CPU_PROGRAM_MAP(mia_main_map) @@ -2275,6 +2329,9 @@ static MACHINE_DRIVER_START( mia ) MDRV_CPU_ADD("audiocpu", Z80, XTAL_3_579545MHz) MDRV_CPU_PROGRAM_MAP(mia_audio_map) + MDRV_MACHINE_START(common) + MDRV_MACHINE_RESET(common) + /* video hardware */ MDRV_VIDEO_ATTRIBUTES(VIDEO_HAS_SHADOWS | VIDEO_HAS_HIGHLIGHTS) @@ -2300,7 +2357,7 @@ static MACHINE_DRIVER_START( mia ) MDRV_SOUND_ROUTE(0, "mono", 1.0) MDRV_SOUND_ROUTE(1, "mono", 1.0) - MDRV_SOUND_ADD("konami", K007232, XTAL_3_579545MHz) + MDRV_SOUND_ADD("k007232", K007232, XTAL_3_579545MHz) MDRV_SOUND_CONFIG(k007232_config) MDRV_SOUND_ROUTE(0, "mono", 0.20) MDRV_SOUND_ROUTE(1, "mono", 0.20) @@ -2309,14 +2366,18 @@ MACHINE_DRIVER_END static MACHINE_RESET( tmnt ) { - const device_config *upd = devtag_get_device(machine, "upd"); + tmnt_state *state = (tmnt_state *)machine->driver_data; + /* the UPD7759 control flip-flops are cleared: /ST is 1, /RESET is 0 */ - upd7759_start_w(upd, 0); - upd7759_reset_w(upd, 1); + upd7759_start_w(state->upd, 0); + upd7759_reset_w(state->upd, 1); } static MACHINE_DRIVER_START( tmnt ) + /* driver data */ + MDRV_DRIVER_DATA(tmnt_state) + /* basic machine hardware */ MDRV_CPU_ADD("maincpu", M68000, XTAL_24MHz/3) MDRV_CPU_PROGRAM_MAP(tmnt_main_map) @@ -2325,6 +2386,7 @@ static MACHINE_DRIVER_START( tmnt ) MDRV_CPU_ADD("audiocpu", Z80, XTAL_3_579545MHz) MDRV_CPU_PROGRAM_MAP(tmnt_audio_map) + MDRV_MACHINE_START(common) MDRV_MACHINE_RESET(tmnt) /* video hardware */ @@ -2352,7 +2414,7 @@ static MACHINE_DRIVER_START( tmnt ) MDRV_SOUND_ROUTE(0, "mono", 1.0) MDRV_SOUND_ROUTE(1, "mono", 1.0) - MDRV_SOUND_ADD("konami", K007232, XTAL_3_579545MHz) + MDRV_SOUND_ADD("k007232", K007232, XTAL_3_579545MHz) MDRV_SOUND_CONFIG(k007232_config) MDRV_SOUND_ROUTE(0, "mono", 0.20) MDRV_SOUND_ROUTE(1, "mono", 0.20) @@ -2368,6 +2430,9 @@ MACHINE_DRIVER_END static MACHINE_DRIVER_START( punkshot ) + /* driver data */ + MDRV_DRIVER_DATA(tmnt_state) + /* basic machine hardware */ MDRV_CPU_ADD("maincpu", M68000, XTAL_24MHz/2) MDRV_CPU_PROGRAM_MAP(punkshot_main_map) @@ -2377,6 +2442,9 @@ static MACHINE_DRIVER_START( punkshot ) MDRV_CPU_PROGRAM_MAP(punkshot_audio_map) /* NMIs are generated by the 053260 */ + MDRV_MACHINE_START(common) + MDRV_MACHINE_RESET(common) + /* video hardware */ MDRV_VIDEO_ATTRIBUTES(VIDEO_HAS_SHADOWS | VIDEO_HAS_HIGHLIGHTS | VIDEO_UPDATE_AFTER_VBLANK) @@ -2402,13 +2470,16 @@ static MACHINE_DRIVER_START( punkshot ) MDRV_SOUND_ROUTE(0, "mono", 1.0) MDRV_SOUND_ROUTE(1, "mono", 1.0) - MDRV_SOUND_ADD("konami", K053260, XTAL_3_579545MHz) + MDRV_SOUND_ADD("k053260", K053260, XTAL_3_579545MHz) MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.70) MACHINE_DRIVER_END static MACHINE_DRIVER_START( lgtnfght ) + /* driver data */ + MDRV_DRIVER_DATA(tmnt_state) + /* basic machine hardware */ MDRV_CPU_ADD("maincpu", M68000, XTAL_24MHz/2) MDRV_CPU_PROGRAM_MAP(lgtnfght_main_map) @@ -2417,6 +2488,9 @@ static MACHINE_DRIVER_START( lgtnfght ) MDRV_CPU_ADD("audiocpu", Z80, XTAL_3_579545MHz) MDRV_CPU_PROGRAM_MAP(lgtnfght_audio_map) + MDRV_MACHINE_START(common) + MDRV_MACHINE_RESET(common) + /* video hardware */ MDRV_VIDEO_ATTRIBUTES(VIDEO_HAS_SHADOWS | VIDEO_HAS_HIGHLIGHTS | VIDEO_UPDATE_AFTER_VBLANK) @@ -2443,7 +2517,7 @@ static MACHINE_DRIVER_START( lgtnfght ) MDRV_SOUND_ROUTE(0, "lspeaker", 1.0) MDRV_SOUND_ROUTE(1, "rspeaker", 1.0) - MDRV_SOUND_ADD("konami", K053260, XTAL_3_579545MHz) + MDRV_SOUND_ADD("k053260", K053260, XTAL_3_579545MHz) MDRV_SOUND_ROUTE(0, "lspeaker", 0.70) MDRV_SOUND_ROUTE(1, "rspeaker", 0.70) MACHINE_DRIVER_END @@ -2451,6 +2525,9 @@ MACHINE_DRIVER_END static MACHINE_DRIVER_START( blswhstl ) + /* driver data */ + MDRV_DRIVER_DATA(tmnt_state) + /* basic machine hardware */ MDRV_CPU_ADD("maincpu", M68000, 16000000) /* 16 MHz */ MDRV_CPU_PROGRAM_MAP(blswhstl_main_map) @@ -2460,6 +2537,9 @@ static MACHINE_DRIVER_START( blswhstl ) MDRV_CPU_PROGRAM_MAP(ssriders_audio_map) /* NMIs are generated by the 053260 */ + MDRV_MACHINE_START(common) + MDRV_MACHINE_RESET(common) + MDRV_EEPROM_ADD("eeprom", eeprom_intf) /* video hardware */ @@ -2474,6 +2554,7 @@ static MACHINE_DRIVER_START( blswhstl ) MDRV_PALETTE_LENGTH(2048) + MDRV_VIDEO_START( blswhstl ) MDRV_VIDEO_UPDATE(lgtnfght) MDRV_VIDEO_EOF( blswhstl ) @@ -2489,7 +2570,7 @@ static MACHINE_DRIVER_START( blswhstl ) MDRV_SOUND_ROUTE(0, "lspeaker", 0.70) MDRV_SOUND_ROUTE(1, "rspeaker", 0.70) - MDRV_SOUND_ADD("konami", K053260, XTAL_3_579545MHz) + MDRV_SOUND_ADD("k053260", K053260, XTAL_3_579545MHz) MDRV_SOUND_ROUTE(0, "rspeaker", 0.50) /* fixed inverted stereo channels */ MDRV_SOUND_ROUTE(1, "lspeaker", 0.50) MACHINE_DRIVER_END @@ -2514,6 +2595,9 @@ GFXDECODE_END static MACHINE_DRIVER_START( glfgreat ) + /* driver data */ + MDRV_DRIVER_DATA(tmnt_state) + /* basic machine hardware */ MDRV_CPU_ADD("maincpu", M68000, 12000000) /* ? */ MDRV_CPU_PROGRAM_MAP(glfgreat_main_map) @@ -2523,6 +2607,9 @@ static MACHINE_DRIVER_START( glfgreat ) MDRV_CPU_PROGRAM_MAP(glfgreat_audio_map) /* NMIs are generated by the 053260 */ + MDRV_MACHINE_START(common) + MDRV_MACHINE_RESET(common) + /* video hardware */ MDRV_VIDEO_ATTRIBUTES(VIDEO_HAS_SHADOWS | VIDEO_HAS_HIGHLIGHTS | VIDEO_UPDATE_AFTER_VBLANK) @@ -2547,15 +2634,16 @@ static MACHINE_DRIVER_START( glfgreat ) /* sound hardware */ MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") - MDRV_SOUND_ADD("konami", K053260, XTAL_3_579545MHz) + MDRV_SOUND_ADD("k053260", K053260, XTAL_3_579545MHz) MDRV_SOUND_ROUTE(0, "lspeaker", 1.0) MDRV_SOUND_ROUTE(1, "rspeaker", 1.0) MACHINE_DRIVER_END -static void sound_nmi(const device_config *device) +static void sound_nmi( const device_config *device ) { - cputag_set_input_line(device->machine, "audiocpu", INPUT_LINE_NMI, PULSE_LINE); + tmnt_state *state = (tmnt_state *)device->machine->driver_data; + cpu_set_input_line(state->audiocpu, INPUT_LINE_NMI, PULSE_LINE); } static const k054539_interface k054539_config = @@ -2565,8 +2653,18 @@ static const k054539_interface k054539_config = sound_nmi }; +static MACHINE_START( prmrsocr ) +{ + UINT8 *ROM = memory_region(machine, "audiocpu"); + + memory_configure_bank(machine, "bank1", 0, 8, &ROM[0x10000], 0x4000); +} + static MACHINE_DRIVER_START( prmrsocr ) + /* driver data */ + MDRV_DRIVER_DATA(tmnt_state) + /* basic machine hardware */ MDRV_CPU_ADD("maincpu", M68000, 12000000) /* ? */ MDRV_CPU_PROGRAM_MAP(prmrsocr_main_map) @@ -2576,6 +2674,9 @@ static MACHINE_DRIVER_START( prmrsocr ) MDRV_CPU_PROGRAM_MAP(prmrsocr_audio_map) /* NMIs are generated by the 054539 */ + MDRV_MACHINE_START(prmrsocr) + MDRV_MACHINE_RESET(common) + MDRV_EEPROM_ADD("eeprom", thndrx2_eeprom_intf) /* video hardware */ @@ -2602,7 +2703,7 @@ static MACHINE_DRIVER_START( prmrsocr ) /* sound hardware */ MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") - MDRV_SOUND_ADD("konami", K054539, 48000) + MDRV_SOUND_ADD("k054539", K054539, 48000) MDRV_SOUND_CONFIG(k054539_config) MDRV_SOUND_ROUTE(0, "lspeaker", 1.0) MDRV_SOUND_ROUTE(1, "rspeaker", 1.0) @@ -2611,6 +2712,9 @@ MACHINE_DRIVER_END static MACHINE_DRIVER_START( tmnt2 ) + /* driver data */ + MDRV_DRIVER_DATA(tmnt_state) + /* basic machine hardware */ MDRV_CPU_ADD("maincpu", M68000, XTAL_32MHz/2) MDRV_CPU_PROGRAM_MAP(tmnt2_main_map) @@ -2624,6 +2728,9 @@ static MACHINE_DRIVER_START( tmnt2 ) MDRV_CPU_PROGRAM_MAP(ssriders_audio_map) /* NMIs are generated by the 053260 */ + MDRV_MACHINE_START(common) + MDRV_MACHINE_RESET(common) + MDRV_EEPROM_ADD("eeprom", eeprom_intf) /* video hardware */ @@ -2652,7 +2759,7 @@ static MACHINE_DRIVER_START( tmnt2 ) MDRV_SOUND_ROUTE(0, "lspeaker", 1.0) MDRV_SOUND_ROUTE(1, "rspeaker", 1.0) - MDRV_SOUND_ADD("konami", K053260, XTAL_3_579545MHz) + MDRV_SOUND_ADD("k053260", K053260, XTAL_3_579545MHz) MDRV_SOUND_ROUTE(0, "lspeaker", 0.75) MDRV_SOUND_ROUTE(1, "rspeaker", 0.75) MACHINE_DRIVER_END @@ -2660,6 +2767,9 @@ MACHINE_DRIVER_END static MACHINE_DRIVER_START( ssriders ) + /* driver data */ + MDRV_DRIVER_DATA(tmnt_state) + /* basic machine hardware */ MDRV_CPU_ADD("maincpu", M68000, XTAL_32MHz/2) MDRV_CPU_PROGRAM_MAP(ssriders_main_map) @@ -2669,6 +2779,9 @@ static MACHINE_DRIVER_START( ssriders ) MDRV_CPU_PROGRAM_MAP(ssriders_audio_map) /* NMIs are generated by the 053260 */ + MDRV_MACHINE_START(common) + MDRV_MACHINE_RESET(common) + MDRV_EEPROM_ADD("eeprom", eeprom_intf) /* video hardware */ @@ -2697,7 +2810,7 @@ static MACHINE_DRIVER_START( ssriders ) MDRV_SOUND_ROUTE(0, "lspeaker", 1.0) MDRV_SOUND_ROUTE(1, "rspeaker", 1.0) - MDRV_SOUND_ADD("konami", K053260, XTAL_3_579545MHz) + MDRV_SOUND_ADD("k053260", K053260, XTAL_3_579545MHz) MDRV_SOUND_ROUTE(0, "lspeaker", 0.70) MDRV_SOUND_ROUTE(1, "rspeaker", 0.70) MACHINE_DRIVER_END @@ -2705,11 +2818,17 @@ MACHINE_DRIVER_END static MACHINE_DRIVER_START( sunsetbl ) + /* driver data */ + MDRV_DRIVER_DATA(tmnt_state) + /* basic machine hardware */ MDRV_CPU_ADD("maincpu", M68000, 16000000) /* 16 MHz */ MDRV_CPU_PROGRAM_MAP(sunsetbl_main_map) MDRV_CPU_VBLANK_INT("screen", irq4_line_hold) + MDRV_MACHINE_START(common) + MDRV_MACHINE_RESET(common) + MDRV_EEPROM_ADD("eeprom", eeprom_intf) /* video hardware */ @@ -2741,6 +2860,9 @@ MACHINE_DRIVER_END static MACHINE_DRIVER_START( thndrx2 ) + /* driver data */ + MDRV_DRIVER_DATA(tmnt_state) + /* basic machine hardware */ MDRV_CPU_ADD("maincpu", M68000, 12000000) /* 12 MHz */ MDRV_CPU_PROGRAM_MAP(thndrx2_main_map) @@ -2750,6 +2872,9 @@ static MACHINE_DRIVER_START( thndrx2 ) MDRV_CPU_PROGRAM_MAP(thndrx2_audio_map) /* NMIs are generated by the 053260 */ + MDRV_MACHINE_START(common) + MDRV_MACHINE_RESET(common) + MDRV_EEPROM_ADD("eeprom", thndrx2_eeprom_intf) /* video hardware */ @@ -2778,7 +2903,7 @@ static MACHINE_DRIVER_START( thndrx2 ) MDRV_SOUND_ROUTE(0, "lspeaker", 1.0) MDRV_SOUND_ROUTE(1, "rspeaker", 1.0) - MDRV_SOUND_ADD("konami", K053260, XTAL_3_579545MHz) + MDRV_SOUND_ADD("k053260", K053260, XTAL_3_579545MHz) MDRV_SOUND_ROUTE(0, "lspeaker", 0.75) MDRV_SOUND_ROUTE(1, "rspeaker", 0.75) MACHINE_DRIVER_END @@ -2830,7 +2955,7 @@ ROM_START( mia ) ROM_REGION( 0x0100, "proms", 0 ) ROM_LOAD( "808a18.f16", 0x0000, 0x0100, CRC(eb95aede) SHA1(8153eb516ae9753910c6d6a2143e91e079586836) ) /* priority encoder (not used) */ - ROM_REGION( 0x20000, "konami", 0 ) /* 128k for the samples */ + ROM_REGION( 0x20000, "k007232", 0 ) /* 128k for the samples */ ROM_LOAD( "808d01.d4", 0x00000, 0x20000, CRC(fd4d37c0) SHA1(ef91c6e7bb57c27a9a51729fffd1bfe3e806fb61) ) /* samples for 007232 */ ROM_END @@ -2855,7 +2980,7 @@ ROM_START( mia2 ) ROM_REGION( 0x0100, "proms", 0 ) ROM_LOAD( "808a18.f16", 0x0000, 0x0100, CRC(eb95aede) SHA1(8153eb516ae9753910c6d6a2143e91e079586836) ) /* priority encoder (not used) */ - ROM_REGION( 0x20000, "konami", 0 ) /* 128k for the samples */ + ROM_REGION( 0x20000, "k007232", 0 ) /* 128k for the samples */ ROM_LOAD( "808d01.d4", 0x00000, 0x20000, CRC(fd4d37c0) SHA1(ef91c6e7bb57c27a9a51729fffd1bfe3e806fb61) ) /* samples for 007232 */ ROM_END @@ -2883,7 +3008,7 @@ ROM_START( tmnt ) ROM_LOAD( "963a30.g7", 0x0000, 0x0100, CRC(abd82680) SHA1(945a71e6ec65202f13209b45d45b616372d6c0f5) ) /* sprite address decoder */ ROM_LOAD( "963a31.g19", 0x0100, 0x0100, CRC(f8004a1c) SHA1(ed6694b8eebfe0238b50ebd05007d519f6e57b1b) ) /* priority encoder (not used) */ - ROM_REGION( 0x20000, "konami", 0 ) /* 128k for the samples */ + ROM_REGION( 0x20000, "k007232", 0 ) /* 128k for the samples */ ROM_LOAD( "963a26.c13", 0x00000, 0x20000, CRC(e2ac3063) SHA1(5bb294c46fb5eaba9935a18c0aa5d3931168f474) ) /* samples for 007232 */ ROM_REGION( 0x20000, "upd", 0 ) /* 128k for the samples */ @@ -2917,7 +3042,7 @@ ROM_START( tmntu ) ROM_LOAD( "963a30.g7", 0x0000, 0x0100, CRC(abd82680) SHA1(945a71e6ec65202f13209b45d45b616372d6c0f5) ) /* sprite address decoder */ ROM_LOAD( "963a31.g19", 0x0100, 0x0100, CRC(f8004a1c) SHA1(ed6694b8eebfe0238b50ebd05007d519f6e57b1b) ) /* priority encoder (not used) */ - ROM_REGION( 0x20000, "konami", 0 ) /* 128k for the samples */ + ROM_REGION( 0x20000, "k007232", 0 ) /* 128k for the samples */ ROM_LOAD( "963a26.c13", 0x00000, 0x20000, CRC(e2ac3063) SHA1(5bb294c46fb5eaba9935a18c0aa5d3931168f474) ) /* samples for 007232 */ ROM_REGION( 0x20000, "upd", 0 ) /* 128k for the samples */ @@ -2951,7 +3076,7 @@ ROM_START( tmntua ) ROM_LOAD( "963a30.g7", 0x0000, 0x0100, CRC(abd82680) SHA1(945a71e6ec65202f13209b45d45b616372d6c0f5) ) /* sprite address decoder */ ROM_LOAD( "963a31.g19", 0x0100, 0x0100, CRC(f8004a1c) SHA1(ed6694b8eebfe0238b50ebd05007d519f6e57b1b) ) /* priority encoder (not used) */ - ROM_REGION( 0x20000, "konami", 0 ) /* 128k for the samples */ + ROM_REGION( 0x20000, "k007232", 0 ) /* 128k for the samples */ ROM_LOAD( "963a26.c13", 0x00000, 0x20000, CRC(e2ac3063) SHA1(5bb294c46fb5eaba9935a18c0aa5d3931168f474) ) /* samples for 007232 */ ROM_REGION( 0x20000, "upd", 0 ) /* 128k for the samples */ @@ -2985,7 +3110,7 @@ ROM_START( tmht ) ROM_LOAD( "963a30.g7", 0x0000, 0x0100, CRC(abd82680) SHA1(945a71e6ec65202f13209b45d45b616372d6c0f5) ) /* sprite address decoder */ ROM_LOAD( "963a31.g19", 0x0100, 0x0100, CRC(f8004a1c) SHA1(ed6694b8eebfe0238b50ebd05007d519f6e57b1b) ) /* priority encoder (not used) */ - ROM_REGION( 0x20000, "konami", 0 ) /* 128k for the samples */ + ROM_REGION( 0x20000, "k007232", 0 ) /* 128k for the samples */ ROM_LOAD( "963a26.c13", 0x00000, 0x20000, CRC(e2ac3063) SHA1(5bb294c46fb5eaba9935a18c0aa5d3931168f474) ) /* samples for 007232 */ ROM_REGION( 0x20000, "upd", 0 ) /* 128k for the samples */ @@ -3019,7 +3144,7 @@ ROM_START( tmntj ) ROM_LOAD( "963a30.g7", 0x0000, 0x0100, CRC(abd82680) SHA1(945a71e6ec65202f13209b45d45b616372d6c0f5) ) /* sprite address decoder */ ROM_LOAD( "963a31.g19", 0x0100, 0x0100, CRC(f8004a1c) SHA1(ed6694b8eebfe0238b50ebd05007d519f6e57b1b) ) /* priority encoder (not used) */ - ROM_REGION( 0x20000, "konami", 0 ) /* 128k for the samples */ + ROM_REGION( 0x20000, "k007232", 0 ) /* 128k for the samples */ ROM_LOAD( "963a26.c13", 0x00000, 0x20000, CRC(e2ac3063) SHA1(5bb294c46fb5eaba9935a18c0aa5d3931168f474) ) /* samples for 007232 */ ROM_REGION( 0x20000, "upd", 0 ) /* 128k for the samples */ @@ -3053,7 +3178,7 @@ ROM_START( tmht2p ) ROM_LOAD( "963a30.g7", 0x0000, 0x0100, CRC(abd82680) SHA1(945a71e6ec65202f13209b45d45b616372d6c0f5) ) /* sprite address decoder */ ROM_LOAD( "963a31.g19", 0x0100, 0x0100, CRC(f8004a1c) SHA1(ed6694b8eebfe0238b50ebd05007d519f6e57b1b) ) /* priority encoder (not used) */ - ROM_REGION( 0x20000, "konami", 0 ) /* 128k for the samples */ + ROM_REGION( 0x20000, "k007232", 0 ) /* 128k for the samples */ ROM_LOAD( "963a26.c13", 0x00000, 0x20000, CRC(e2ac3063) SHA1(5bb294c46fb5eaba9935a18c0aa5d3931168f474) ) /* samples for 007232 */ ROM_REGION( 0x20000, "upd", 0 ) /* 128k for the samples */ @@ -3087,7 +3212,7 @@ ROM_START( tmht2pa ) ROM_LOAD( "963a30.g7", 0x0000, 0x0100, CRC(abd82680) SHA1(945a71e6ec65202f13209b45d45b616372d6c0f5) ) /* sprite address decoder */ ROM_LOAD( "963a31.g19", 0x0100, 0x0100, CRC(f8004a1c) SHA1(ed6694b8eebfe0238b50ebd05007d519f6e57b1b) ) /* priority encoder (not used) */ - ROM_REGION( 0x20000, "konami", 0 ) /* 128k for the samples */ + ROM_REGION( 0x20000, "k007232", 0 ) /* 128k for the samples */ ROM_LOAD( "963a26.c13", 0x00000, 0x20000, CRC(e2ac3063) SHA1(5bb294c46fb5eaba9935a18c0aa5d3931168f474) ) /* samples for 007232 */ ROM_REGION( 0x20000, "upd", 0 ) /* 128k for the samples */ @@ -3121,7 +3246,7 @@ ROM_START( tmnt2pj ) ROM_LOAD( "963a30.g7", 0x0000, 0x0100, CRC(abd82680) SHA1(945a71e6ec65202f13209b45d45b616372d6c0f5) ) /* sprite address decoder */ ROM_LOAD( "963a31.g19", 0x0100, 0x0100, CRC(f8004a1c) SHA1(ed6694b8eebfe0238b50ebd05007d519f6e57b1b) ) /* priority encoder (not used) */ - ROM_REGION( 0x20000, "konami", 0 ) /* 128k for the samples */ + ROM_REGION( 0x20000, "k007232", 0 ) /* 128k for the samples */ ROM_LOAD( "963a26.c13", 0x00000, 0x20000, CRC(e2ac3063) SHA1(5bb294c46fb5eaba9935a18c0aa5d3931168f474) ) /* samples for 007232 */ ROM_REGION( 0x20000, "upd", 0 ) /* 128k for the samples */ @@ -3155,7 +3280,7 @@ ROM_START( tmnt2po ) ROM_LOAD( "963a30.g7", 0x0000, 0x0100, CRC(abd82680) SHA1(945a71e6ec65202f13209b45d45b616372d6c0f5) ) /* sprite address decoder */ ROM_LOAD( "963a31.g19", 0x0100, 0x0100, CRC(f8004a1c) SHA1(ed6694b8eebfe0238b50ebd05007d519f6e57b1b) ) /* priority encoder (not used) */ - ROM_REGION( 0x20000, "konami", 0 ) /* 128k for the samples */ + ROM_REGION( 0x20000, "k007232", 0 ) /* 128k for the samples */ ROM_LOAD( "963a26.c13", 0x00000, 0x20000, CRC(e2ac3063) SHA1(5bb294c46fb5eaba9935a18c0aa5d3931168f474) ) /* samples for 007232 */ ROM_REGION( 0x20000, "upd", 0 ) /* 128k for the samples */ @@ -3181,7 +3306,7 @@ ROM_START( punkshot ) ROM_LOAD( "907d07.k2", 0x000000, 0x100000, CRC(b0fe4543) SHA1(3be1caef29084063dd8754c1eecc34a2ec842415) ) ROM_LOAD( "907d08.k7", 0x100000, 0x100000, CRC(d5ac8d9d) SHA1(cb330be1c5c016465ef7048b3b29c65a741ee45b) ) - ROM_REGION( 0x80000, "konami", 0 ) /* samples for 053260 */ + ROM_REGION( 0x80000, "k053260", 0 ) /* samples for 053260 */ ROM_LOAD( "907d04.d3", 0x0000, 0x80000, CRC(090feb5e) SHA1(2394907b62ff0724c277642caf6375239249e2d7) ) ROM_END @@ -3201,7 +3326,7 @@ ROM_START( punkshot2 ) ROM_LOAD( "907d07.k2", 0x000000, 0x100000, CRC(b0fe4543) SHA1(3be1caef29084063dd8754c1eecc34a2ec842415) ) ROM_LOAD( "907d08.k7", 0x100000, 0x100000, CRC(d5ac8d9d) SHA1(cb330be1c5c016465ef7048b3b29c65a741ee45b) ) - ROM_REGION( 0x80000, "konami", 0 ) /* samples for the 053260 */ + ROM_REGION( 0x80000, "k053260", 0 ) /* samples for the 053260 */ ROM_LOAD( "907d04.d3", 0x0000, 0x80000, CRC(090feb5e) SHA1(2394907b62ff0724c277642caf6375239249e2d7) ) ROM_END @@ -3221,7 +3346,7 @@ ROM_START( punkshotj ) ROM_LOAD( "907d07.k2", 0x000000, 0x100000, CRC(b0fe4543) SHA1(3be1caef29084063dd8754c1eecc34a2ec842415) ) ROM_LOAD( "907d08.k7", 0x100000, 0x100000, CRC(d5ac8d9d) SHA1(cb330be1c5c016465ef7048b3b29c65a741ee45b) ) - ROM_REGION( 0x80000, "konami", 0 ) /* samples for the 053260 */ + ROM_REGION( 0x80000, "k053260", 0 ) /* samples for the 053260 */ ROM_LOAD( "907d04.d3", 0x0000, 0x80000, CRC(090feb5e) SHA1(2394907b62ff0724c277642caf6375239249e2d7) ) ROM_END @@ -3241,7 +3366,7 @@ ROM_START( lgtnfght ) ROM_LOAD( "939a06.k8", 0x000000, 0x80000, CRC(e393c206) SHA1(9b35fc6dba1f15c3d9d69ff5a4e1673c539aa533) ) ROM_LOAD( "939a05.k2", 0x080000, 0x80000, CRC(3662d47a) SHA1(789c3f07ce812902050970f48be5115b8e95bea0) ) - ROM_REGION( 0x80000, "konami", 0 ) /* samples for the 053260 */ + ROM_REGION( 0x80000, "k053260", 0 ) /* samples for the 053260 */ ROM_LOAD( "939a04.c5", 0x0000, 0x80000, CRC(c24e2b6e) SHA1(affc142883c2383afd08dcf156e48709ceca49fd) ) ROM_END @@ -3261,7 +3386,7 @@ ROM_START( lgtnfghtu ) ROM_LOAD( "939a06.k8", 0x000000, 0x80000, CRC(e393c206) SHA1(9b35fc6dba1f15c3d9d69ff5a4e1673c539aa533) ) ROM_LOAD( "939a05.k2", 0x080000, 0x80000, CRC(3662d47a) SHA1(789c3f07ce812902050970f48be5115b8e95bea0) ) - ROM_REGION( 0x80000, "konami", 0 ) /* samples for the 053260 */ + ROM_REGION( 0x80000, "k053260", 0 ) /* samples for the 053260 */ ROM_LOAD( "939a04.c5", 0x0000, 0x80000, CRC(c24e2b6e) SHA1(affc142883c2383afd08dcf156e48709ceca49fd) ) ROM_END @@ -3281,7 +3406,7 @@ ROM_START( lgtnfghta ) ROM_LOAD( "939a06.k8", 0x000000, 0x80000, CRC(e393c206) SHA1(9b35fc6dba1f15c3d9d69ff5a4e1673c539aa533) ) ROM_LOAD( "939a05.k2", 0x080000, 0x80000, CRC(3662d47a) SHA1(789c3f07ce812902050970f48be5115b8e95bea0) ) - ROM_REGION( 0x80000, "konami", 0 ) /* samples for the 053260 */ + ROM_REGION( 0x80000, "k053260", 0 ) /* samples for the 053260 */ ROM_LOAD( "939a04.c5", 0x0000, 0x80000, CRC(c24e2b6e) SHA1(affc142883c2383afd08dcf156e48709ceca49fd) ) ROM_END @@ -3301,7 +3426,7 @@ ROM_START( trigon ) ROM_LOAD( "939a06.k8", 0x000000, 0x80000, CRC(e393c206) SHA1(9b35fc6dba1f15c3d9d69ff5a4e1673c539aa533) ) ROM_LOAD( "939a05.k2", 0x080000, 0x80000, CRC(3662d47a) SHA1(789c3f07ce812902050970f48be5115b8e95bea0) ) - ROM_REGION( 0x80000, "konami", 0 ) /* samples for the 053260 */ + ROM_REGION( 0x80000, "k053260", 0 ) /* samples for the 053260 */ ROM_LOAD( "939a04.c5", 0x0000, 0x80000, CRC(c24e2b6e) SHA1(affc142883c2383afd08dcf156e48709ceca49fd) ) ROM_END @@ -3323,7 +3448,7 @@ ROM_START( blswhstl ) ROM_LOAD16_WORD_SWAP( "060e06.k7", 0x000000, 0x080000, CRC(09381492) SHA1(5a3008dec99a8e0043405e9c4f5145794b8606e0) ) /* sprites */ ROM_LOAD16_WORD_SWAP( "060e05.k3", 0x080000, 0x080000, CRC(32454241) SHA1(7a246b255ff30118c4f8e07e6ba03a22fd5ddc8a) ) - ROM_REGION( 0x100000, "konami", 0 ) /* samples for the 053260 */ + ROM_REGION( 0x100000, "k053260", 0 ) /* samples for the 053260 */ ROM_LOAD( "060e04.d1", 0x0000, 0x100000, CRC(c680395d) SHA1(acde593a5ec501e89c8aaca6c4fbacf707a727e1) ) ROM_END @@ -3345,7 +3470,7 @@ ROM_START( detatwin ) ROM_LOAD16_WORD_SWAP( "060e06.k7", 0x000000, 0x080000, CRC(09381492) SHA1(5a3008dec99a8e0043405e9c4f5145794b8606e0) ) /* sprites */ ROM_LOAD16_WORD_SWAP( "060e05.k3", 0x080000, 0x080000, CRC(32454241) SHA1(7a246b255ff30118c4f8e07e6ba03a22fd5ddc8a) ) - ROM_REGION( 0x100000, "konami", 0 ) /* samples for the 053260 */ + ROM_REGION( 0x100000, "k053260", 0 ) /* samples for the 053260 */ ROM_LOAD( "060e04.d1", 0x0000, 0x100000, CRC(c680395d) SHA1(acde593a5ec501e89c8aaca6c4fbacf707a727e1) ) ROM_END @@ -3375,7 +3500,7 @@ ROM_START( glfgreat ) ROM_LOAD( "061b06.16d", 0x080000, 0x080000, CRC(41ada2ad) SHA1(7b200e44e040e3d79f2603a02c9991b4655407d4) ) ROM_LOAD( "061b05.15d", 0x100000, 0x020000, CRC(2456fb11) SHA1(e1bdb9f5983751d28addad6977a44df3d9899a14) ) - ROM_REGION( 0x100000, "konami", 0 ) /* samples for the 053260 */ + ROM_REGION( 0x100000, "k053260", 0 ) /* samples for the 053260 */ ROM_LOAD( "061e04.1d", 0x0000, 0x100000, CRC(7921d8df) SHA1(19ca4850ec489cca245e90a41bfc22493cd52263) ) ROM_END @@ -3405,7 +3530,7 @@ ROM_START( glfgreatj ) ROM_LOAD( "061b06.16d", 0x080000, 0x080000, CRC(41ada2ad) SHA1(7b200e44e040e3d79f2603a02c9991b4655407d4) ) ROM_LOAD( "061b05.15d", 0x100000, 0x020000, CRC(2456fb11) SHA1(e1bdb9f5983751d28addad6977a44df3d9899a14) ) - ROM_REGION( 0x100000, "konami", 0 ) /* samples for the 053260 */ + ROM_REGION( 0x100000, "k053260", 0 ) /* samples for the 053260 */ ROM_LOAD( "061e04.1d", 0x0000, 0x100000, CRC(7921d8df) SHA1(19ca4850ec489cca245e90a41bfc22493cd52263) ) ROM_END @@ -3431,7 +3556,7 @@ ROM_START( tmnt2 ) ROM_LOAD( "063b08", 0x300000, 0x080000, CRC(3b1ae36f) SHA1(9e69cae8b517497ac77c4d148f56f2bb6a23de89) ) /* second half empty */ - ROM_REGION( 0x200000, "konami", 0 ) /* samples for the 053260 */ + ROM_REGION( 0x200000, "k053260", 0 ) /* samples for the 053260 */ ROM_LOAD( "063b06", 0x0000, 0x200000, CRC(1e510aa5) SHA1(02b9bd6bb6b098026a620e4d671c40a31ad9e318) ) ROM_END @@ -3457,7 +3582,7 @@ ROM_START( tmnt22pu ) ROM_LOAD( "063b08", 0x300000, 0x080000, CRC(3b1ae36f) SHA1(9e69cae8b517497ac77c4d148f56f2bb6a23de89) ) /* second half empty */ - ROM_REGION( 0x200000, "konami", 0 ) /* samples for the 053260 */ + ROM_REGION( 0x200000, "k053260", 0 ) /* samples for the 053260 */ ROM_LOAD( "063b06", 0x0000, 0x200000, CRC(1e510aa5) SHA1(02b9bd6bb6b098026a620e4d671c40a31ad9e318) ) ROM_END @@ -3483,7 +3608,7 @@ ROM_START( tmht22pe ) ROM_LOAD( "063b08", 0x300000, 0x080000, CRC(3b1ae36f) SHA1(9e69cae8b517497ac77c4d148f56f2bb6a23de89) ) /* second half empty */ - ROM_REGION( 0x200000, "konami", 0 ) /* samples for the 053260 */ + ROM_REGION( 0x200000, "k053260", 0 ) /* samples for the 053260 */ ROM_LOAD( "063b06", 0x0000, 0x200000, CRC(1e510aa5) SHA1(02b9bd6bb6b098026a620e4d671c40a31ad9e318) ) ROM_END @@ -3509,7 +3634,7 @@ ROM_START( tmnt2a ) ROM_LOAD( "063b08", 0x300000, 0x080000, CRC(3b1ae36f) SHA1(9e69cae8b517497ac77c4d148f56f2bb6a23de89) ) /* second half empty */ - ROM_REGION( 0x200000, "konami", 0 ) /* samples for the 053260 */ + ROM_REGION( 0x200000, "k053260", 0 ) /* samples for the 053260 */ ROM_LOAD( "063b06", 0x0000, 0x200000, CRC(1e510aa5) SHA1(02b9bd6bb6b098026a620e4d671c40a31ad9e318) ) ROM_END @@ -3531,7 +3656,7 @@ ROM_START( qgakumon ) ROM_LOAD( "248a09.7l", 0x000000, 0x100000, CRC(a176e205) SHA1(e0b2176a1525711c6e692f88a913f57b9bdd0046) ) /* sprites */ ROM_LOAD( "248a07.3l", 0x200000, 0x100000, CRC(9595589f) SHA1(3e48f66448577a8fa39b6707e89c2267152b6f0b) ) - ROM_REGION( 0x200000, "konami", 0 ) /* samples for the 053260 */ + ROM_REGION( 0x200000, "k053260", 0 ) /* samples for the 053260 */ ROM_LOAD( "248a06.1d", 0x0000, 0x200000, CRC(0fba1def) SHA1(f2ba23213effd06f14c7a179acea974c78c2198f) ) ROM_END @@ -3553,7 +3678,7 @@ ROM_START( ssriders ) ROM_LOAD( "064e09.7l", 0x000000, 0x100000, CRC(4160c372) SHA1(0b36181e5ccd785c7fb89b9f41e458066a42c3b0) ) /* sprites */ ROM_LOAD( "064e07.3l", 0x100000, 0x100000, CRC(64dd673c) SHA1(bea4d17a71dd21c635866ee69b4892dc9d0ab455) ) - ROM_REGION( 0x100000, "konami", 0 ) /* samples for the 053260 */ + ROM_REGION( 0x100000, "k053260", 0 ) /* samples for the 053260 */ ROM_LOAD( "064e06.1d", 0x0000, 0x100000, CRC(59810df9) SHA1(a0affc6330bdbfab1447dc0cf13c20ff708c2c71) ) ROM_END @@ -3575,7 +3700,7 @@ ROM_START( ssridersebd ) ROM_LOAD( "064e09.7l", 0x000000, 0x100000, CRC(4160c372) SHA1(0b36181e5ccd785c7fb89b9f41e458066a42c3b0) ) /* sprites */ ROM_LOAD( "064e07.3l", 0x100000, 0x100000, CRC(64dd673c) SHA1(bea4d17a71dd21c635866ee69b4892dc9d0ab455) ) - ROM_REGION( 0x100000, "konami", 0 ) /* samples for the 053260 */ + ROM_REGION( 0x100000, "k053260", 0 ) /* samples for the 053260 */ ROM_LOAD( "064e06.1d", 0x0000, 0x100000, CRC(59810df9) SHA1(a0affc6330bdbfab1447dc0cf13c20ff708c2c71) ) ROM_END @@ -3597,7 +3722,7 @@ ROM_START( ssridersebc ) ROM_LOAD( "064e09.7l", 0x000000, 0x100000, CRC(4160c372) SHA1(0b36181e5ccd785c7fb89b9f41e458066a42c3b0) ) /* sprites */ ROM_LOAD( "064e07.3l", 0x100000, 0x100000, CRC(64dd673c) SHA1(bea4d17a71dd21c635866ee69b4892dc9d0ab455) ) - ROM_REGION( 0x100000, "konami", 0 ) /* samples for the 053260 */ + ROM_REGION( 0x100000, "k053260", 0 ) /* samples for the 053260 */ ROM_LOAD( "064e06.1d", 0x0000, 0x100000, CRC(59810df9) SHA1(a0affc6330bdbfab1447dc0cf13c20ff708c2c71) ) ROM_END @@ -3619,7 +3744,7 @@ ROM_START( ssriderseaa ) ROM_LOAD( "064e09.7l", 0x000000, 0x100000, CRC(4160c372) SHA1(0b36181e5ccd785c7fb89b9f41e458066a42c3b0) ) /* sprites */ ROM_LOAD( "064e07.3l", 0x100000, 0x100000, CRC(64dd673c) SHA1(bea4d17a71dd21c635866ee69b4892dc9d0ab455) ) - ROM_REGION( 0x100000, "konami", 0 ) /* samples for the 053260 */ + ROM_REGION( 0x100000, "k053260", 0 ) /* samples for the 053260 */ ROM_LOAD( "064e06.1d", 0x0000, 0x100000, CRC(59810df9) SHA1(a0affc6330bdbfab1447dc0cf13c20ff708c2c71) ) ROM_END @@ -3641,7 +3766,7 @@ ROM_START( ssridersuda ) ROM_LOAD( "064e09.7l", 0x000000, 0x100000, CRC(4160c372) SHA1(0b36181e5ccd785c7fb89b9f41e458066a42c3b0) ) /* sprites */ ROM_LOAD( "064e07.3l", 0x100000, 0x100000, CRC(64dd673c) SHA1(bea4d17a71dd21c635866ee69b4892dc9d0ab455) ) - ROM_REGION( 0x100000, "konami", 0 ) /* samples for the 053260 */ + ROM_REGION( 0x100000, "k053260", 0 ) /* samples for the 053260 */ ROM_LOAD( "064e06.1d", 0x0000, 0x100000, CRC(59810df9) SHA1(a0affc6330bdbfab1447dc0cf13c20ff708c2c71) ) ROM_END @@ -3663,7 +3788,7 @@ ROM_START( ssridersuac ) ROM_LOAD( "064e09.7l", 0x000000, 0x100000, CRC(4160c372) SHA1(0b36181e5ccd785c7fb89b9f41e458066a42c3b0) ) /* sprites */ ROM_LOAD( "064e07.3l", 0x100000, 0x100000, CRC(64dd673c) SHA1(bea4d17a71dd21c635866ee69b4892dc9d0ab455) ) - ROM_REGION( 0x100000, "konami", 0 ) /* samples for the 053260 */ + ROM_REGION( 0x100000, "k053260", 0 ) /* samples for the 053260 */ ROM_LOAD( "064e06.1d", 0x0000, 0x100000, CRC(59810df9) SHA1(a0affc6330bdbfab1447dc0cf13c20ff708c2c71) ) ROM_END @@ -3685,7 +3810,7 @@ ROM_START( ssridersubc ) ROM_LOAD( "064e09.7l", 0x000000, 0x100000, CRC(4160c372) SHA1(0b36181e5ccd785c7fb89b9f41e458066a42c3b0) ) /* sprites */ ROM_LOAD( "064e07.3l", 0x100000, 0x100000, CRC(64dd673c) SHA1(bea4d17a71dd21c635866ee69b4892dc9d0ab455) ) - ROM_REGION( 0x100000, "konami", 0 ) /* samples for the 053260 */ + ROM_REGION( 0x100000, "k053260", 0 ) /* samples for the 053260 */ ROM_LOAD( "064e06.1d", 0x0000, 0x100000, CRC(59810df9) SHA1(a0affc6330bdbfab1447dc0cf13c20ff708c2c71) ) ROM_END @@ -3707,7 +3832,7 @@ ROM_START( ssridersabd ) ROM_LOAD( "064e09.7l", 0x000000, 0x100000, CRC(4160c372) SHA1(0b36181e5ccd785c7fb89b9f41e458066a42c3b0) ) /* sprites */ ROM_LOAD( "064e07.3l", 0x100000, 0x100000, CRC(64dd673c) SHA1(bea4d17a71dd21c635866ee69b4892dc9d0ab455) ) - ROM_REGION( 0x100000, "konami", 0 ) /* samples for the 053260 */ + ROM_REGION( 0x100000, "k053260", 0 ) /* samples for the 053260 */ ROM_LOAD( "064e06.1d", 0x0000, 0x100000, CRC(59810df9) SHA1(a0affc6330bdbfab1447dc0cf13c20ff708c2c71) ) ROM_END @@ -3729,7 +3854,7 @@ ROM_START( ssridersadd ) ROM_LOAD( "064e09.7l", 0x000000, 0x100000, CRC(4160c372) SHA1(0b36181e5ccd785c7fb89b9f41e458066a42c3b0) ) /* sprites */ ROM_LOAD( "064e07.3l", 0x100000, 0x100000, CRC(64dd673c) SHA1(bea4d17a71dd21c635866ee69b4892dc9d0ab455) ) - ROM_REGION( 0x100000, "konami", 0 ) /* samples for the 053260 */ + ROM_REGION( 0x100000, "k053260", 0 ) /* samples for the 053260 */ ROM_LOAD( "064e06.1d", 0x0000, 0x100000, CRC(59810df9) SHA1(a0affc6330bdbfab1447dc0cf13c20ff708c2c71) ) ROM_END @@ -3751,7 +3876,7 @@ ROM_START( ssridersjbd ) ROM_LOAD( "064e09.7l", 0x000000, 0x100000, CRC(4160c372) SHA1(0b36181e5ccd785c7fb89b9f41e458066a42c3b0) ) /* sprites */ ROM_LOAD( "064e07.3l", 0x100000, 0x100000, CRC(64dd673c) SHA1(bea4d17a71dd21c635866ee69b4892dc9d0ab455) ) - ROM_REGION( 0x100000, "konami", 0 ) /* samples for the 053260 */ + ROM_REGION( 0x100000, "k053260", 0 ) /* samples for the 053260 */ ROM_LOAD( "064e06.1d", 0x0000, 0x100000, CRC(59810df9) SHA1(a0affc6330bdbfab1447dc0cf13c20ff708c2c71) ) ROM_END @@ -3792,7 +3917,7 @@ ROM_START( thndrx2 ) ROM_LOAD( "073-c07.7k", 0x000000, 0x080000, CRC(14e93f38) SHA1(bf111b68be722c9c2f0f9c7700b3af6cd8fd28be) ) /* sprites */ ROM_LOAD( "073-c08.3k", 0x080000, 0x080000, CRC(09fab3ab) SHA1(af54c7bfe8edc5b5ea2c4fba4d5c637cfcbbeff5) ) - ROM_REGION( 0x80000, "konami", 0 ) /* samples for the 053260 */ + ROM_REGION( 0x80000, "k053260", 0 ) /* samples for the 053260 */ ROM_LOAD( "073-b04.2d", 0x0000, 0x80000, CRC(05287a0b) SHA1(10784b8be6a93a5ebf22a884f99c116e51ae8743) ) ROM_END @@ -3812,7 +3937,7 @@ ROM_START( thndrx2a ) ROM_LOAD( "073-c07.7k", 0x000000, 0x080000, CRC(14e93f38) SHA1(bf111b68be722c9c2f0f9c7700b3af6cd8fd28be) ) /* sprites */ ROM_LOAD( "073-c08.3k", 0x080000, 0x080000, CRC(09fab3ab) SHA1(af54c7bfe8edc5b5ea2c4fba4d5c637cfcbbeff5) ) - ROM_REGION( 0x80000, "konami", 0 ) /* samples for the 053260 */ + ROM_REGION( 0x80000, "k053260", 0 ) /* samples for the 053260 */ ROM_LOAD( "073-b04.2d", 0x0000, 0x80000, CRC(05287a0b) SHA1(10784b8be6a93a5ebf22a884f99c116e51ae8743) ) ROM_END @@ -3832,7 +3957,7 @@ ROM_START( thndrx2j ) ROM_LOAD( "073-c07.7k", 0x000000, 0x080000, CRC(14e93f38) SHA1(bf111b68be722c9c2f0f9c7700b3af6cd8fd28be) ) /* sprites */ ROM_LOAD( "073-c08.3k", 0x080000, 0x080000, CRC(09fab3ab) SHA1(af54c7bfe8edc5b5ea2c4fba4d5c637cfcbbeff5) ) - ROM_REGION( 0x80000, "konami", 0 ) /* samples for the 053260 */ + ROM_REGION( 0x80000, "k053260", 0 ) /* samples for the 053260 */ ROM_LOAD( "073-b04.2d", 0x0000, 0x80000, CRC(05287a0b) SHA1(10784b8be6a93a5ebf22a884f99c116e51ae8743) ) ROM_END @@ -3860,7 +3985,7 @@ ROM_START( prmrsocr ) ROM_LOAD( "101a01.18d", 0x000000, 0x020000, CRC(716f910f) SHA1(fbe69cac266084ea1efb094a7f863dca39f12500) ) ROM_LOAD( "101a02.16d", 0x020000, 0x020000, CRC(222869c7) SHA1(0a9bea294ff3281f316dd4beecc4c94d75d52b49) ) - ROM_REGION( 0x200000, "konami", 0 ) /* samples for the 054539 */ + ROM_REGION( 0x200000, "k054539", 0 ) /* samples for the 054539 */ ROM_LOAD( "101a06.1d", 0x0000, 0x200000, CRC(4f48e043) SHA1(f50e8642d9d3a028c243777640e7cd13da1abf86) ) ROM_END @@ -3888,7 +4013,7 @@ ROM_START( prmrsocrj ) ROM_LOAD( "101a01.18d", 0x000000, 0x020000, CRC(716f910f) SHA1(fbe69cac266084ea1efb094a7f863dca39f12500) ) ROM_LOAD( "101a02.16d", 0x020000, 0x020000, CRC(222869c7) SHA1(0a9bea294ff3281f316dd4beecc4c94d75d52b49) ) - ROM_REGION( 0x200000, "konami", 0 ) /* samples for the 054539 */ + ROM_REGION( 0x200000, "k054539", 0 ) /* samples for the 054539 */ ROM_LOAD( "101a06.1d", 0x0000, 0x200000, CRC(4f48e043) SHA1(f50e8642d9d3a028c243777640e7cd13da1abf86) ) ROM_END @@ -3897,7 +4022,7 @@ static DRIVER_INIT( mia ) { UINT8 *gfxdata; int len; - int i,j,k,A,B; + int i, j, k, A, B; int bits[32]; UINT8 *temp; @@ -3908,17 +4033,17 @@ static DRIVER_INIT( mia ) */ gfxdata = memory_region(machine, "gfx1"); len = memory_region_length(machine, "gfx1"); - for (i = 0;i < len;i += 4) + for (i = 0; i < len; i += 4) { - for (j = 0;j < 4;j++) - for (k = 0;k < 8;k++) - bits[8*j + k] = (gfxdata[i + j] >> k) & 1; + for (j = 0; j < 4; j++) + for (k = 0; k < 8; k++) + bits[8 * j + k] = (gfxdata[i + j] >> k) & 1; - for (j = 0;j < 4;j++) + for (j = 0; j < 4; j++) { gfxdata[i + j] = 0; - for (k = 0;k < 8;k++) - gfxdata[i + j] |= bits[j + 4*k] << k; + for (k = 0; k < 8; k++) + gfxdata[i + j] |= bits[j + 4 * k] << k; } } @@ -3929,26 +4054,26 @@ static DRIVER_INIT( mia ) */ gfxdata = memory_region(machine, "gfx2"); len = memory_region_length(machine, "gfx2"); - for (i = 0;i < len;i += 4) + for (i = 0; i < len; i += 4) { - for (j = 0;j < 4;j++) - for (k = 0;k < 8;k++) - bits[8*j + k] = (gfxdata[i + j] >> k) & 1; + for (j = 0; j < 4; j++) + for (k = 0; k < 8; k++) + bits[8 * j + k] = (gfxdata[i + j] >> k) & 1; - for (j = 0;j < 4;j++) + for (j = 0; j < 4; j++) { gfxdata[i + j] = 0; - for (k = 0;k < 8;k++) - gfxdata[i + j] |= bits[j + 4*k] << k; + for (k = 0; k < 8; k++) + gfxdata[i + j] |= bits[j + 4 * k] << k; } } temp = alloc_array_or_die(UINT8, len); - memcpy(temp,gfxdata,len); - for (A = 0;A < len/4;A++) + memcpy(temp, gfxdata, len); + for (A = 0; A < len / 4; A++) { /* the bits to scramble are the low 8 ones */ - for (i = 0;i < 8;i++) + for (i = 0; i < 8; i++) bits[i] = (A >> i) & 0x01; B = A & 0x3ff00; @@ -3976,10 +4101,10 @@ static DRIVER_INIT( mia ) B |= bits[6] << 7; } - gfxdata[4*A+0] = temp[4*B+0]; - gfxdata[4*A+1] = temp[4*B+1]; - gfxdata[4*A+2] = temp[4*B+2]; - gfxdata[4*A+3] = temp[4*B+3]; + gfxdata[4 * A + 0] = temp[4 * B + 0]; + gfxdata[4 * A + 1] = temp[4 * B + 1]; + gfxdata[4 * A + 2] = temp[4 * B + 2]; + gfxdata[4 * A + 3] = temp[4 * B + 3]; } free(temp); } @@ -3990,7 +4115,7 @@ static DRIVER_INIT( tmnt ) UINT8 *gfxdata; const UINT8 *code_conv_table; int len; - int i,j,k,A,B,entry; + int i, j, k, A, B, entry; int bits[32]; UINT8 *temp; @@ -4001,17 +4126,17 @@ static DRIVER_INIT( tmnt ) */ gfxdata = memory_region(machine, "gfx1"); len = memory_region_length(machine, "gfx1"); - for (i = 0;i < len;i += 4) + for (i = 0; i < len; i += 4) { - for (j = 0;j < 4;j++) - for (k = 0;k < 8;k++) - bits[8*j + k] = (gfxdata[i + j] >> k) & 1; + for (j = 0; j < 4; j++) + for (k = 0; k < 8; k++) + bits[8 * j + k] = (gfxdata[i + j] >> k) & 1; - for (j = 0;j < 4;j++) + for (j = 0; j < 4; j++) { gfxdata[i + j] = 0; - for (k = 0;k < 8;k++) - gfxdata[i + j] |= bits[j + 4*k] << k; + for (k = 0; k < 8; k++) + gfxdata[i + j] |= bits[j + 4 * k] << k; } } @@ -4022,24 +4147,24 @@ static DRIVER_INIT( tmnt ) */ gfxdata = memory_region(machine, "gfx2"); len = memory_region_length(machine, "gfx2"); - for (i = 0;i < len;i += 4) + for (i = 0; i < len; i += 4) { - for (j = 0;j < 4;j++) - for (k = 0;k < 8;k++) - bits[8*j + k] = (gfxdata[i + j] >> k) & 1; + for (j = 0; j < 4; j++) + for (k = 0; k < 8; k++) + bits[8 * j + k] = (gfxdata[i + j] >> k) & 1; - for (j = 0;j < 4;j++) + for (j = 0; j < 4; j++) { gfxdata[i + j] = 0; - for (k = 0;k < 8;k++) - gfxdata[i + j] |= bits[j + 4*k] << k; + for (k = 0; k < 8; k++) + gfxdata[i + j] |= bits[j + 4 * k] << k; } } temp = alloc_array_or_die(UINT8, len); - memcpy(temp,gfxdata,len); + memcpy(temp, gfxdata, len); code_conv_table = &memory_region(machine, "proms")[0x0000]; - for (A = 0;A < len/4;A++) + for (A = 0; A < len / 4; A++) { #define CA0 0 #define CA1 1 @@ -4075,18 +4200,18 @@ static DRIVER_INIT( tmnt ) entry = code_conv_table[(A & 0x7f800) >> 11] & 7; /* the bits to scramble are the low 10 ones */ - for (i = 0;i < 10;i++) + for (i = 0; i < 10; i++) bits[i] = (A >> i) & 0x01; B = A & 0x7fc00; - for (i = 0;i < 10;i++) + for (i = 0; i < 10; i++) B |= bits[bit_pick_table[i][entry]] << i; - gfxdata[4*A+0] = temp[4*B+0]; - gfxdata[4*A+1] = temp[4*B+1]; - gfxdata[4*A+2] = temp[4*B+2]; - gfxdata[4*A+3] = temp[4*B+3]; + gfxdata[4 * A + 0] = temp[4 * B + 0]; + gfxdata[4 * A + 1] = temp[4 * B + 1]; + gfxdata[4 * A + 2] = temp[4 * B + 2]; + gfxdata[4 * A + 3] = temp[4 * B + 3]; } free(temp); } @@ -4094,61 +4219,61 @@ static DRIVER_INIT( tmnt ) static DRIVER_INIT( cuebrick ) { machine->generic.nvram.u8 = (UINT8 *)cuebrick_nvram; - machine->generic.nvram_size = 0x400*0x20; + machine->generic.nvram_size = 0x400 * 0x20; } -GAME( 1989, cuebrick, 0, cuebrick, cuebrick, cuebrick, ROT0, "Konami", "Cue Brick (World version D)", 0 ) - -GAME( 1989, mia, 0, mia, mia, mia, ROT0, "Konami", "M.I.A. - Missing in Action (version T)", 0 ) -GAME( 1989, mia2, mia, mia, mia, mia, ROT0, "Konami", "M.I.A. - Missing in Action (version S)", 0 ) - -GAME( 1989, tmnt, 0, tmnt, tmnt, tmnt, ROT0, "Konami", "Teenage Mutant Ninja Turtles (World 4 Players)", 0 ) -GAME( 1989, tmntu, tmnt, tmnt, tmnt, tmnt, ROT0, "Konami", "Teenage Mutant Ninja Turtles (US 4 Players, set 1)", 0 ) -GAME( 1989, tmntua, tmnt, tmnt, tmnt, tmnt, ROT0, "Konami", "Teenage Mutant Ninja Turtles (US 4 Players, set 2)", 0 ) -GAME( 1989, tmht, tmnt, tmnt, tmnt, tmnt, ROT0, "Konami", "Teenage Mutant Hero Turtles (UK 4 Players)", 0 ) -GAME( 1990, tmntj, tmnt, tmnt, tmnt, tmnt, ROT0, "Konami", "Teenage Mutant Ninja Turtles (Japan 4 Players)", 0 ) -GAME( 1989, tmht2p, tmnt, tmnt, tmnt2p, tmnt, ROT0, "Konami", "Teenage Mutant Hero Turtles (UK 2 Players, set 1)", 0 ) -GAME( 1989, tmht2pa, tmnt, tmnt, tmnt2p, tmnt, ROT0, "Konami", "Teenage Mutant Hero Turtles (UK 2 Players, set 2)", 0 ) -GAME( 1990, tmnt2pj, tmnt, tmnt, tmnt2p, tmnt, ROT0, "Konami", "Teenage Mutant Ninja Turtles (Japan 2 Players)", 0 ) -GAME( 1989, tmnt2po, tmnt, tmnt, tmnt2p, tmnt, ROT0, "Konami", "Teenage Mutant Ninja Turtles (Oceania 2 Players)", 0 ) - -GAME( 1990, punkshot, 0, punkshot, punkshot, 0, ROT0, "Konami", "Punk Shot (US 4 Players)", 0 ) -GAME( 1990, punkshot2,punkshot, punkshot, punksht2, 0, ROT0, "Konami", "Punk Shot (US 2 Players)", 0 ) -GAME( 1990, punkshotj,punkshot, punkshot, punksht2, 0, ROT0, "Konami", "Punk Shot (Japan 2 Players)", 0 ) - -GAME( 1990, lgtnfght, 0, lgtnfght, lgtnfght, 0, ROT90, "Konami", "Lightning Fighters (World)", 0 ) -GAME( 1990, lgtnfghta,lgtnfght, lgtnfght, lgtnfght, 0, ROT90, "Konami", "Lightning Fighters (Asia)", 0 ) -GAME( 1990, lgtnfghtu,lgtnfght, lgtnfght, lgtnfght, 0, ROT90, "Konami", "Lightning Fighters (US)", 0 ) -GAME( 1990, trigon, lgtnfght, lgtnfght, lgtnfght, 0, ROT90, "Konami", "Trigon (Japan)", 0 ) - -GAME( 1991, blswhstl, 0, blswhstl, blswhstl, 0, ROT90, "Konami", "Bells & Whistles (Version L)", 0 ) -GAME( 1991, detatwin, blswhstl, blswhstl, blswhstl, 0, ROT90, "Konami", "Detana!! Twin Bee (Japan ver. J)", 0 ) - -GAME( 1991, glfgreat, 0, glfgreat, glfgreat, 0, ROT0, "Konami", "Golfing Greats", GAME_UNEMULATED_PROTECTION | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND ) -GAME( 1991, glfgreatj,glfgreat, glfgreat, glfgreat, 0, ROT0, "Konami", "Golfing Greats (Japan)", GAME_UNEMULATED_PROTECTION | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND ) - -GAME( 1991, tmnt2, 0, tmnt2, ssridr4p, 0, ROT0, "Konami", "Teenage Mutant Ninja Turtles - Turtles in Time (4 Players ver UAA)", 0 ) // ver. UAA -GAME( 1991, tmnt2a, tmnt2, tmnt2, ssrid4ps, 0, ROT0, "Konami", "Teenage Mutant Ninja Turtles - Turtles in Time (4 Players ver ADA)", 0 ) // ver. ADA -GAME( 1991, tmht22pe, tmnt2, tmnt2, ssriders, 0, ROT0, "Konami", "Teenage Mutant Hero Turtles - Turtles in Time (2 Players ver EBA)", 0 ) // ver. EBA -GAME( 1991, tmnt22pu, tmnt2, tmnt2, ssriders, 0, ROT0, "Konami", "Teenage Mutant Ninja Turtles - Turtles in Time (2 Players ver UDA)", 0 ) // ver. UDA - -GAME( 1993, qgakumon, 0, tmnt2, qgakumon, 0, ROT0, "Konami", "Quiz Gakumon no Susume (Japan ver. JA2 Type L)", 0 ) - -GAME( 1991, ssriders, 0, ssriders, ssridr4p, 0, ROT0, "Konami", "Sunset Riders (4 Players ver EAC)", GAME_IMPERFECT_GRAPHICS ) -GAME( 1991, ssridersebd, ssriders, ssriders, ssriders, 0, ROT0, "Konami", "Sunset Riders (2 Players ver EBD)", GAME_IMPERFECT_GRAPHICS ) -GAME( 1991, ssridersebc, ssriders, ssriders, ssriders, 0, ROT0, "Konami", "Sunset Riders (2 Players ver EBC)", GAME_IMPERFECT_GRAPHICS ) -GAME( 1991, ssridersuda, ssriders, ssriders, ssrid4ps, 0, ROT0, "Konami", "Sunset Riders (4 Players ver UDA)", GAME_IMPERFECT_GRAPHICS ) -GAME( 1991, ssriderseaa, ssriders, ssriders, ssrid4ps, 0, ROT0, "Konami", "Sunset Riders (4 Players ver EAA)", GAME_IMPERFECT_GRAPHICS ) -GAME( 1991, ssridersuac, ssriders, ssriders, ssridr4p, 0, ROT0, "Konami", "Sunset Riders (4 Players ver UAC)", GAME_IMPERFECT_GRAPHICS ) -GAME( 1991, ssridersubc, ssriders, ssriders, ssriders, 0, ROT0, "Konami", "Sunset Riders (2 Players ver UBC)", GAME_IMPERFECT_GRAPHICS ) -GAME( 1991, ssridersabd, ssriders, ssriders, ssriders, 0, ROT0, "Konami", "Sunset Riders (2 Players ver ABD)", GAME_IMPERFECT_GRAPHICS ) -GAME( 1991, ssridersadd, ssriders, ssriders, ssrid4ps, 0, ROT0, "Konami", "Sunset Riders (4 Players ver ADD)", GAME_IMPERFECT_GRAPHICS ) -GAME( 1991, ssridersjbd, ssriders, ssriders, ssriders, 0, ROT0, "Konami", "Sunset Riders (2 Players ver JBD)", GAME_IMPERFECT_GRAPHICS ) -GAME( 1991, ssridersb, ssriders, sunsetbl, sunsetbl, 0, ROT0, "Konami", "Sunset Riders (bootleg 4 Players ver ADD)", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS ) - -GAME( 1991, thndrx2, 0, thndrx2, thndrx2, 0, ROT0, "Konami", "Thunder Cross II (World)", 0 ) -GAME( 1991, thndrx2a, thndrx2, thndrx2, thndrx2, 0, ROT0, "Konami", "Thunder Cross II (Asia)", 0 ) -GAME( 1991, thndrx2j, thndrx2, thndrx2, thndrx2, 0, ROT0, "Konami", "Thunder Cross II (Japan)", 0 ) - -GAME( 1993, prmrsocr, 0, prmrsocr, prmrsocr, 0, ROT0, "Konami", "Premier Soccer (ver EAB)", 0 ) -GAME( 1993, prmrsocrj,prmrsocr, prmrsocr, prmrsocr, 0, ROT0, "Konami", "Premier Soccer (ver JAB)", 0 ) +GAME( 1989, cuebrick, 0, cuebrick, cuebrick, cuebrick, ROT0, "Konami", "Cue Brick (World version D)", GAME_SUPPORTS_SAVE ) + +GAME( 1989, mia, 0, mia, mia, mia, ROT0, "Konami", "M.I.A. - Missing in Action (version T)", GAME_SUPPORTS_SAVE ) +GAME( 1989, mia2, mia, mia, mia, mia, ROT0, "Konami", "M.I.A. - Missing in Action (version S)", GAME_SUPPORTS_SAVE ) + +GAME( 1989, tmnt, 0, tmnt, tmnt, tmnt, ROT0, "Konami", "Teenage Mutant Ninja Turtles (World 4 Players)", GAME_SUPPORTS_SAVE ) +GAME( 1989, tmntu, tmnt, tmnt, tmnt, tmnt, ROT0, "Konami", "Teenage Mutant Ninja Turtles (US 4 Players, set 1)", GAME_SUPPORTS_SAVE ) +GAME( 1989, tmntua, tmnt, tmnt, tmnt, tmnt, ROT0, "Konami", "Teenage Mutant Ninja Turtles (US 4 Players, set 2)", GAME_SUPPORTS_SAVE ) +GAME( 1989, tmht, tmnt, tmnt, tmnt, tmnt, ROT0, "Konami", "Teenage Mutant Hero Turtles (UK 4 Players)", GAME_SUPPORTS_SAVE ) +GAME( 1990, tmntj, tmnt, tmnt, tmnt, tmnt, ROT0, "Konami", "Teenage Mutant Ninja Turtles (Japan 4 Players)", GAME_SUPPORTS_SAVE ) +GAME( 1989, tmht2p, tmnt, tmnt, tmnt2p, tmnt, ROT0, "Konami", "Teenage Mutant Hero Turtles (UK 2 Players, set 1)", GAME_SUPPORTS_SAVE ) +GAME( 1989, tmht2pa, tmnt, tmnt, tmnt2p, tmnt, ROT0, "Konami", "Teenage Mutant Hero Turtles (UK 2 Players, set 2)", GAME_SUPPORTS_SAVE ) +GAME( 1990, tmnt2pj, tmnt, tmnt, tmnt2p, tmnt, ROT0, "Konami", "Teenage Mutant Ninja Turtles (Japan 2 Players)", GAME_SUPPORTS_SAVE ) +GAME( 1989, tmnt2po, tmnt, tmnt, tmnt2p, tmnt, ROT0, "Konami", "Teenage Mutant Ninja Turtles (Oceania 2 Players)", GAME_SUPPORTS_SAVE ) + +GAME( 1990, punkshot, 0, punkshot, punkshot, 0, ROT0, "Konami", "Punk Shot (US 4 Players)", GAME_SUPPORTS_SAVE ) +GAME( 1990, punkshot2, punkshot, punkshot, punksht2, 0, ROT0, "Konami", "Punk Shot (US 2 Players)", GAME_SUPPORTS_SAVE ) +GAME( 1990, punkshotj, punkshot, punkshot, punksht2, 0, ROT0, "Konami", "Punk Shot (Japan 2 Players)", GAME_SUPPORTS_SAVE ) + +GAME( 1990, lgtnfght, 0, lgtnfght, lgtnfght, 0, ROT90, "Konami", "Lightning Fighters (World)", GAME_SUPPORTS_SAVE ) +GAME( 1990, lgtnfghta, lgtnfght, lgtnfght, lgtnfght, 0, ROT90, "Konami", "Lightning Fighters (Asia)", GAME_SUPPORTS_SAVE ) +GAME( 1990, lgtnfghtu, lgtnfght, lgtnfght, lgtnfght, 0, ROT90, "Konami", "Lightning Fighters (US)", GAME_SUPPORTS_SAVE ) +GAME( 1990, trigon, lgtnfght, lgtnfght, lgtnfght, 0, ROT90, "Konami", "Trigon (Japan)", GAME_SUPPORTS_SAVE ) + +GAME( 1991, blswhstl, 0, blswhstl, blswhstl, 0, ROT90, "Konami", "Bells & Whistles (Version L)", GAME_SUPPORTS_SAVE ) +GAME( 1991, detatwin, blswhstl, blswhstl, blswhstl, 0, ROT90, "Konami", "Detana!! Twin Bee (Japan ver. J)", GAME_SUPPORTS_SAVE ) + +GAME( 1991, glfgreat, 0, glfgreat, glfgreat, 0, ROT0, "Konami", "Golfing Greats", GAME_UNEMULATED_PROTECTION | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE ) +GAME( 1991, glfgreatj, glfgreat, glfgreat, glfgreat, 0, ROT0, "Konami", "Golfing Greats (Japan)", GAME_UNEMULATED_PROTECTION | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE ) + +GAME( 1991, tmnt2, 0, tmnt2, ssridr4p, 0, ROT0, "Konami", "Teenage Mutant Ninja Turtles - Turtles in Time (4 Players ver UAA)", GAME_SUPPORTS_SAVE ) // ver. UAA +GAME( 1991, tmnt2a, tmnt2, tmnt2, ssrid4ps, 0, ROT0, "Konami", "Teenage Mutant Ninja Turtles - Turtles in Time (4 Players ver ADA)", GAME_SUPPORTS_SAVE ) // ver. ADA +GAME( 1991, tmht22pe, tmnt2, tmnt2, ssriders, 0, ROT0, "Konami", "Teenage Mutant Hero Turtles - Turtles in Time (2 Players ver EBA)", GAME_SUPPORTS_SAVE ) // ver. EBA +GAME( 1991, tmnt22pu, tmnt2, tmnt2, ssriders, 0, ROT0, "Konami", "Teenage Mutant Ninja Turtles - Turtles in Time (2 Players ver UDA)", GAME_SUPPORTS_SAVE ) // ver. UDA + +GAME( 1993, qgakumon, 0, tmnt2, qgakumon, 0, ROT0, "Konami", "Quiz Gakumon no Susume (Japan ver. JA2 Type L)", GAME_SUPPORTS_SAVE ) + +GAME( 1991, ssriders, 0, ssriders, ssridr4p, 0, ROT0, "Konami", "Sunset Riders (4 Players ver EAC)", GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE ) +GAME( 1991, ssridersebd, ssriders, ssriders, ssriders, 0, ROT0, "Konami", "Sunset Riders (2 Players ver EBD)", GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE ) +GAME( 1991, ssridersebc, ssriders, ssriders, ssriders, 0, ROT0, "Konami", "Sunset Riders (2 Players ver EBC)", GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE ) +GAME( 1991, ssridersuda, ssriders, ssriders, ssrid4ps, 0, ROT0, "Konami", "Sunset Riders (4 Players ver UDA)", GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE ) +GAME( 1991, ssriderseaa, ssriders, ssriders, ssrid4ps, 0, ROT0, "Konami", "Sunset Riders (4 Players ver EAA)", GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE ) +GAME( 1991, ssridersuac, ssriders, ssriders, ssridr4p, 0, ROT0, "Konami", "Sunset Riders (4 Players ver UAC)", GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE ) +GAME( 1991, ssridersubc, ssriders, ssriders, ssriders, 0, ROT0, "Konami", "Sunset Riders (2 Players ver UBC)", GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE ) +GAME( 1991, ssridersabd, ssriders, ssriders, ssriders, 0, ROT0, "Konami", "Sunset Riders (2 Players ver ABD)", GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE ) +GAME( 1991, ssridersadd, ssriders, ssriders, ssrid4ps, 0, ROT0, "Konami", "Sunset Riders (4 Players ver ADD)", GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE ) +GAME( 1991, ssridersjbd, ssriders, ssriders, ssriders, 0, ROT0, "Konami", "Sunset Riders (2 Players ver JBD)", GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE ) +GAME( 1991, ssridersb, ssriders, sunsetbl, sunsetbl, 0, ROT0, "Konami", "Sunset Riders (bootleg 4 Players ver ADD)", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE ) + +GAME( 1991, thndrx2, 0, thndrx2, thndrx2, 0, ROT0, "Konami", "Thunder Cross II (World)", GAME_SUPPORTS_SAVE ) +GAME( 1991, thndrx2a, thndrx2, thndrx2, thndrx2, 0, ROT0, "Konami", "Thunder Cross II (Asia)", GAME_SUPPORTS_SAVE ) +GAME( 1991, thndrx2j, thndrx2, thndrx2, thndrx2, 0, ROT0, "Konami", "Thunder Cross II (Japan)", GAME_SUPPORTS_SAVE ) + +GAME( 1993, prmrsocr, 0, prmrsocr, prmrsocr, 0, ROT0, "Konami", "Premier Soccer (ver EAB)", GAME_SUPPORTS_SAVE ) +GAME( 1993, prmrsocrj, prmrsocr, prmrsocr, prmrsocr, 0, ROT0, "Konami", "Premier Soccer (ver JAB)", GAME_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/ultraman.c b/src/mame/drivers/ultraman.c index be3a7fc482d..bac8cb50be8 100644 --- a/src/mame/drivers/ultraman.c +++ b/src/mame/drivers/ultraman.c @@ -1,11 +1,11 @@ /*************************************************************************** -Ultraman (c) 1991 Banpresto / Bandai + Ultraman (c) 1991 Banpresto / Bandai -Driver by Manuel Abadia <manu@teleline.es> + Driver by Manuel Abadia <manu@teleline.es> -2009-03: -Added dsw locations and verified factory setting based on Guru's notes + 2009-03: + Added dsw locations and verified factory setting based on Guru's notes ***************************************************************************/ @@ -15,18 +15,7 @@ Added dsw locations and verified factory setting based on Guru's notes #include "video/konicdev.h" #include "sound/2151intf.h" #include "sound/okim6295.h" - - -/* from video/ultraman.c */ -WRITE16_HANDLER( ultraman_gfxctrl_w ); -VIDEO_START( ultraman ); -VIDEO_UPDATE( ultraman ); - -extern void ultraman_sprite_callback(running_machine *machine, int *code,int *color,int *priority,int *shadow); -extern void ultraman_zoom_callback_0(running_machine *machine, int *code,int *color,int *flags); -extern void ultraman_zoom_callback_1(running_machine *machine, int *code,int *color,int *flags); -extern void ultraman_zoom_callback_2(running_machine *machine, int *code,int *color,int *flags); - +#include "includes/ultraman.h" static WRITE16_HANDLER( sound_cmd_w ) { @@ -36,8 +25,10 @@ static WRITE16_HANDLER( sound_cmd_w ) static WRITE16_HANDLER( sound_irq_trigger_w ) { + ultraman_state *state = (ultraman_state *)space->machine->driver_data; + if (ACCESSING_BITS_0_7) - cputag_set_input_line(space->machine, "audiocpu", INPUT_LINE_NMI, PULSE_LINE); + cpu_set_input_line(state->audiocpu, INPUT_LINE_NMI, PULSE_LINE); } @@ -200,8 +191,36 @@ static const k051316_interface ultraman_k051316_intf_2 = ultraman_zoom_callback_2 }; +static MACHINE_START( ultraman ) +{ + ultraman_state *state = (ultraman_state *)machine->driver_data; + + state->maincpu = devtag_get_device(machine, "maincpu"); + state->audiocpu = devtag_get_device(machine, "audiocpu"); + state->k051960 = devtag_get_device(machine, "k051960"); + state->k051316_1 = devtag_get_device(machine, "k051316_1"); + state->k051316_2 = devtag_get_device(machine, "k051316_2"); + state->k051316_3 = devtag_get_device(machine, "k051316_3"); + + state_save_register_global(machine, state->bank0); + state_save_register_global(machine, state->bank1); + state_save_register_global(machine, state->bank2); +} + +static MACHINE_RESET( ultraman ) +{ + ultraman_state *state = (ultraman_state *)machine->driver_data; + + state->bank0 = -1; + state->bank1 = -1; + state->bank2 = -1; +} + static MACHINE_DRIVER_START( ultraman ) + /* driver data */ + MDRV_DRIVER_DATA(ultraman_state) + /* basic machine hardware */ MDRV_CPU_ADD("maincpu", M68000,24000000/2) /* 12 MHz? */ MDRV_CPU_PROGRAM_MAP(main_map) @@ -213,6 +232,9 @@ static MACHINE_DRIVER_START( ultraman ) MDRV_QUANTUM_TIME(HZ(600)) + MDRV_MACHINE_START(ultraman) + MDRV_MACHINE_RESET(ultraman) + /* video hardware */ MDRV_VIDEO_ATTRIBUTES(VIDEO_HAS_SHADOWS) @@ -286,4 +308,4 @@ ROM_START( ultraman ) ROM_END -GAME( 1991, ultraman, 0, ultraman, ultraman, 0, ROT0, "Banpresto/Bandai", "Ultraman (Japan)", 0 ) +GAME( 1991, ultraman, 0, ultraman, ultraman, 0, ROT0, "Banpresto/Bandai", "Ultraman (Japan)", GAME_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/vendetta.c b/src/mame/drivers/vendetta.c index 51476b80c26..95ffcb96ce1 100644 --- a/src/mame/drivers/vendetta.c +++ b/src/mame/drivers/vendetta.c @@ -1,88 +1,88 @@ /*************************************************************************** -Vendetta (GX081) (c) 1991 Konami - -Preliminary driver by: -Ernesto Corvi -someone@secureshell.com - -Notes: -- collision detection is handled by a protection chip. Its emulation might - not be 100% accurate. - -// ******************************************************************************** -// Game driver for "ESCAPE KIDS (TM)" (KONAMI, 1991) -// -------------------------------------------------------------------------------- -// -// This driver was made on the basis of 'src/drivers/vendetta.c' file. -// Driver by OHSAKI Masayuki (2002/08/13) -// -// ******************************************************************************** - - -// ***** NOTES ***** -// ------- -// 1) ESCAPE KIDS uses 053246's unknown function. (see video/konamiic.c) -// (053246 register #5 UnKnown Bit #5, #3, #2 always set "1") - - -// ***** On the "error.log" ***** -// -------------------- -// 1) "YM2151 Write 00 to undocumented register #xx" (xx=00-1f) -// Why??? - -// 2) "xxxx: read from unknown 052109 address yyyy" -// 3) "xxxx: write zz to unknown 052109 address yyyy" -// These are video/konamiic.c's message. -// "video/konamiic.c" checks 052109 RAM area access. -// If accessed over 0x1800 (0x3800), logged 2) or 3) messages. -// Escape Kids use 0x1800-0x19ff and 0x3800-0x39ff area. - - -// ***** UnEmulated ***** -// ------------ -// 1) 0x3fc0-0x3fcf (052109 RAM area) access (053252 ???) -// 2) 0x7c00 (Banked ROM area) access to data WRITE (???) -// 3) 0x3fda (053248 RAM area) access to data WRITE (Watchdog ???) - - -// ***** ESCAPE KIDS PCB layout/ Need to dump ***** -// -------------------------------------- -// (Parts side view) -// +-------------------------------------------------------+ -// | R ROM9 [CN1] | CN1:Player4 Input? -// | O [CN2] | (Labeled '4P') -// | M ROM8 ROM1 [SW1] | CN2:Player3 Input? -// | 7 [CUS1] +-+ (Labeled '3P') -// | [CUS7] [CUS8] +-+ CN3:Stereo sound out -// | R [CUS2] | -// | O J | SW1:Test Switch -// | M A | -// | 6 [CUS6] M | *** Custom Chips *** -// | M | CUS1: 053248 -// | R A | CUS2: 053252 -// | O [CUS5] 56P| CUS3: 053260 -// | M | CUS4: 053246 -// | 5 ROM2 [ Z80 ] +-+ CUS5: 053247 -// | +-+ CUS6: 053251 -// | R [CUS4] [CUS3] [YM2151] [CN3] | CUS7: 051962 -// | O | CUS8: 052109 -// | M ROM3 | -// | 4 [Sound AMP] | -// +-------------------------------------------------------+ -// -// *** Dump ROMs *** -// 1) ROM1 (17C) 32Pin 1Mbit UV-EPROM -> save "975r01" file -// 2) ROM2 ( 5F) 28Pin 512Kbit One-Time PROM -> save "975f02" file -// 3) ROM3 ( 1D) 40Pin 4Mbit MASK ROM -> save "975c03" file -// 4) ROM4 ( 3K) 42Pin 8Mbit MASK ROM -> save "975c04" file -// 5) ROM5 ( 8L) 42Pin 8Mbit MASK ROM -> save "975c05" file -// 6) ROM6 (12M) 42Pin 8Mbit MASK ROM -> save "975c06" file -// 7) ROM7 (16K) 42Pin 8Mbit MASK ROM -> save "975c07" file -// 8) ROM8 (16I) 40Pin 4Mbit MASK ROM -> save "975c08" file -// 9) ROM9 (18I) 40Pin 4Mbit MASK ROM -> save "975c09" file -// vvvvvvvvvvvv -// esckidsj.zip + Vendetta (GX081) (c) 1991 Konami + + Preliminary driver by: + Ernesto Corvi + someone@secureshell.com + + Notes: + - collision detection is handled by a protection chip. Its emulation might + not be 100% accurate. + +******************************************************************************** + Game driver for "ESCAPE KIDS (TM)" (KONAMI, 1991) + -------------------------------------------------------------------------------- + + This driver was made on the basis of 'src/drivers/vendetta.c' file. + Driver by OHSAKI Masayuki (2002/08/13) + + ******************************************************************************** + + + ***** NOTES ***** + ------- + 1) ESCAPE KIDS uses 053246's unknown function. (see video/konamiic.c) + (053246 register #5 UnKnown Bit #5, #3, #2 always set "1") + + + ***** On the "error.log" ***** + -------------------- + 1) "YM2151 Write 00 to undocumented register #xx" (xx=00-1f) + Why??? + + 2) "xxxx: read from unknown 052109 address yyyy" + 3) "xxxx: write zz to unknown 052109 address yyyy" + These are video/konamiic.c's message. + "video/konamiic.c" checks 052109 RAM area access. + If accessed over 0x1800 (0x3800), logged 2) or 3) messages. + Escape Kids use 0x1800-0x19ff and 0x3800-0x39ff area. + + + ***** UnEmulated ***** + ------------ + 1) 0x3fc0-0x3fcf (052109 RAM area) access (053252 ???) + 2) 0x7c00 (Banked ROM area) access to data WRITE (???) + 3) 0x3fda (053248 RAM area) access to data WRITE (Watchdog ???) + + + ***** ESCAPE KIDS PCB layout/ Need to dump ***** + -------------------------------------- + (Parts side view) + +-------------------------------------------------------+ + | R ROM9 [CN1] | CN1:Player4 Input? + | O [CN2] | (Labeled '4P') + | M ROM8 ROM1 [SW1] | CN2:Player3 Input? + | 7 [CUS1] +-+ (Labeled '3P') + | [CUS7] [CUS8] +-+ CN3:Stereo sound out + | R [CUS2] | + | O J | SW1:Test Switch + | M A | + | 6 [CUS6] M | *** Custom Chips *** + | M | CUS1: 053248 + | R A | CUS2: 053252 + | O [CUS5] 56P| CUS3: 053260 + | M | CUS4: 053246 + | 5 ROM2 [ Z80 ] +-+ CUS5: 053247 + | +-+ CUS6: 053251 + | R [CUS4] [CUS3] [YM2151] [CN3] | CUS7: 051962 + | O | CUS8: 052109 + | M ROM3 | + | 4 [Sound AMP] | + +-------------------------------------------------------+ + + *** Dump ROMs *** + 1) ROM1 (17C) 32Pin 1Mbit UV-EPROM -> save "975r01" file + 2) ROM2 ( 5F) 28Pin 512Kbit One-Time PROM -> save "975f02" file + 3) ROM3 ( 1D) 40Pin 4Mbit MASK ROM -> save "975c03" file + 4) ROM4 ( 3K) 42Pin 8Mbit MASK ROM -> save "975c04" file + 5) ROM5 ( 8L) 42Pin 8Mbit MASK ROM -> save "975c05" file + 6) ROM6 (12M) 42Pin 8Mbit MASK ROM -> save "975c06" file + 7) ROM7 (16K) 42Pin 8Mbit MASK ROM -> save "975c07" file + 8) ROM8 (16I) 40Pin 4Mbit MASK ROM -> save "975c08" file + 9) ROM9 (18I) 40Pin 4Mbit MASK ROM -> save "975c09" file + vvvvvvvvvvvv + esckidsj.zip ***************************************************************************/ @@ -94,19 +94,12 @@ Notes: #include "sound/2151intf.h" #include "sound/k053260.h" #include "includes/konamipt.h" +#include "includes/vendetta.h" /* prototypes */ -static MACHINE_RESET( vendetta ); static KONAMI_SETLINES_CALLBACK( vendetta_banking ); static void vendetta_video_banking( running_machine *machine, int select ); -VIDEO_UPDATE( vendetta ); - -extern void vendetta_tile_callback(running_machine *machine, int layer,int bank,int *code,int *color,int *flags,int *priority); -extern void esckids_tile_callback(running_machine *machine, int layer,int bank,int *code,int *color,int *flags,int *priority); -extern void vendetta_sprite_callback(running_machine *machine, int *code,int *color,int *priority_mask); - - /*************************************************************************** EEPROM @@ -124,9 +117,6 @@ static const eeprom_interface eeprom_intf = "0100110000000" /* unlock command */ }; - -static int irq_enabled; - static WRITE8_HANDLER( vendetta_eeprom_w ) { /* bit 0 - VOC0 - Video banking related */ @@ -138,64 +128,63 @@ static WRITE8_HANDLER( vendetta_eeprom_w ) /* bit 6 - IRQ enable */ /* bit 7 - Unused */ - if ( data == 0xff ) /* this is a bug in the eeprom write code */ + vendetta_state *state = (vendetta_state *)space->machine->driver_data; + + if (data == 0xff ) /* this is a bug in the eeprom write code */ return; /* EEPROM */ input_port_write(space->machine, "EEPROMOUT", data, 0xff); - irq_enabled = ( data >> 6 ) & 1; + state->irq_enabled = (data >> 6) & 1; - vendetta_video_banking( space->machine, data & 1 ); + vendetta_video_banking(space->machine, data & 1); } /********************************************/ static READ8_HANDLER( vendetta_K052109_r ) { - const device_config *k052109 = devtag_get_device(space->machine, "k052109"); - return k052109_r(k052109, offset + 0x2000); + vendetta_state *state = (vendetta_state *)space->machine->driver_data; + return k052109_r(state->k052109, offset + 0x2000); } static WRITE8_HANDLER( vendetta_K052109_w ) { - const device_config *k052109 = devtag_get_device(space->machine, "k052109"); + vendetta_state *state = (vendetta_state *)space->machine->driver_data; // ************************************************************************************* // * Escape Kids uses 052109's mirrored Tilemap ROM bank selector, but only during * // * Tilemap MASK-ROM Test (0x1d80<->0x3d80, 0x1e00<->0x3e00, 0x1f00<->0x3f00) * // ************************************************************************************* - if ( ( offset == 0x1d80 ) || ( offset == 0x1e00 ) || ( offset == 0x1f00 ) ) - k052109_w(k052109, offset, data); - k052109_w(k052109, offset + 0x2000, data); + if ((offset == 0x1d80) || (offset == 0x1e00) || (offset == 0x1f00)) + k052109_w(state->k052109, offset, data); + k052109_w(state->k052109, offset + 0x2000, data); } -static offs_t video_banking_base; static void vendetta_video_banking( running_machine *machine, int select ) { - const device_config *k052109 = devtag_get_device(machine, "k052109"); - const device_config *k053246 = devtag_get_device(machine, "k053246"); + vendetta_state *state = (vendetta_state *)machine->driver_data; const address_space *space = cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM); - if ( select & 1 ) + if (select & 1) { - memory_install_read_bank(space, video_banking_base + 0x2000, video_banking_base + 0x2fff, 0, 0, "bank4" ); - memory_install_write8_handler(space, video_banking_base + 0x2000, video_banking_base + 0x2fff, 0, 0, paletteram_xBBBBBGGGGGRRRRR_be_w ); - memory_install_readwrite8_device_handler(space, k053246, video_banking_base + 0x0000, video_banking_base + 0x0fff, 0, 0, k053247_r, k053247_w ); + memory_install_read_bank(space, state->video_banking_base + 0x2000, state->video_banking_base + 0x2fff, 0, 0, "bank4" ); + memory_install_write8_handler(space, state->video_banking_base + 0x2000, state->video_banking_base + 0x2fff, 0, 0, paletteram_xBBBBBGGGGGRRRRR_be_w ); + memory_install_readwrite8_device_handler(space, state->k053246, state->video_banking_base + 0x0000, state->video_banking_base + 0x0fff, 0, 0, k053247_r, k053247_w ); memory_set_bankptr(machine, "bank4", machine->generic.paletteram.v); } else { - memory_install_readwrite8_handler(space, video_banking_base + 0x2000, video_banking_base + 0x2fff, 0, 0, vendetta_K052109_r, vendetta_K052109_w ); - memory_install_readwrite8_device_handler(space, k052109, video_banking_base + 0x0000, video_banking_base + 0x0fff, 0, 0, k052109_r, k052109_w ); + memory_install_readwrite8_handler(space, state->video_banking_base + 0x2000, state->video_banking_base + 0x2fff, 0, 0, vendetta_K052109_r, vendetta_K052109_w ); + memory_install_readwrite8_device_handler(space, state->k052109, state->video_banking_base + 0x0000, state->video_banking_base + 0x0fff, 0, 0, k052109_r, k052109_w ); } } static WRITE8_HANDLER( vendetta_5fe0_w ) { - const device_config *k052109 = devtag_get_device(space->machine, "k052109"); - const device_config *k053246 = devtag_get_device(space->machine, "k053246"); + vendetta_state *state = (vendetta_state *)space->machine->driver_data; /* bit 0,1 coin counters */ coin_counter_w(space->machine, 0, data & 0x01); @@ -204,34 +193,38 @@ static WRITE8_HANDLER( vendetta_5fe0_w ) /* bit 2 = BRAMBK ?? */ /* bit 3 = enable char ROM reading through the video RAM */ - k052109_set_rmrd_line(k052109, (data & 0x08) ? ASSERT_LINE : CLEAR_LINE); + k052109_set_rmrd_line(state->k052109, (data & 0x08) ? ASSERT_LINE : CLEAR_LINE); /* bit 4 = INIT ?? */ /* bit 5 = enable sprite ROM reading */ - k053246_set_objcha_line(k053246, (data & 0x20) ? ASSERT_LINE : CLEAR_LINE); + k053246_set_objcha_line(state->k053246, (data & 0x20) ? ASSERT_LINE : CLEAR_LINE); } static TIMER_CALLBACK( z80_nmi_callback ) { - cputag_set_input_line(machine, "audiocpu", INPUT_LINE_NMI, ASSERT_LINE ); + vendetta_state *state = (vendetta_state *)machine->driver_data; + cpu_set_input_line(state->audiocpu, INPUT_LINE_NMI, ASSERT_LINE); } static WRITE8_HANDLER( z80_arm_nmi_w ) { - cputag_set_input_line(space->machine, "audiocpu", INPUT_LINE_NMI, CLEAR_LINE ); + vendetta_state *state = (vendetta_state *)space->machine->driver_data; + cpu_set_input_line(state->audiocpu, INPUT_LINE_NMI, CLEAR_LINE); timer_set(space->machine, ATTOTIME_IN_USEC(25), NULL, 0, z80_nmi_callback); } static WRITE8_HANDLER( z80_irq_w ) { - cputag_set_input_line_and_vector(space->machine, "audiocpu", 0, HOLD_LINE, 0xff ); + vendetta_state *state = (vendetta_state *)space->machine->driver_data; + cpu_set_input_line_and_vector(state->audiocpu, 0, HOLD_LINE, 0xff); } static READ8_HANDLER( vendetta_sound_interrupt_r ) { - cputag_set_input_line_and_vector(space->machine, "audiocpu", 0, HOLD_LINE, 0xff ); + vendetta_state *state = (vendetta_state *)space->machine->driver_data; + cpu_set_input_line_and_vector(state->audiocpu, 0, HOLD_LINE, 0xff); return 0x00; } @@ -257,7 +250,7 @@ static ADDRESS_MAP_START( main_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0x5fe0, 0x5fe0) AM_WRITE(vendetta_5fe0_w) AM_RANGE(0x5fe2, 0x5fe2) AM_WRITE(vendetta_eeprom_w) AM_RANGE(0x5fe4, 0x5fe4) AM_READWRITE(vendetta_sound_interrupt_r, z80_irq_w) - AM_RANGE(0x5fe6, 0x5fe7) AM_DEVREADWRITE("konami", vendetta_sound_r, k053260_w) + AM_RANGE(0x5fe6, 0x5fe7) AM_DEVREADWRITE("k053260", vendetta_sound_r, k053260_w) AM_RANGE(0x5fe8, 0x5fe9) AM_DEVREAD("k053246", k053246_r) AM_RANGE(0x5fea, 0x5fea) AM_READ(watchdog_reset_r) /* what is the desired effect of overlapping these memory regions anyway? */ @@ -281,7 +274,7 @@ static ADDRESS_MAP_START( esckids_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0x3fd0, 0x3fd0) AM_WRITE(vendetta_5fe0_w) // Coin Counter, 052109 RMRD, 053246 OBJCHA AM_RANGE(0x3fd2, 0x3fd2) AM_WRITE(vendetta_eeprom_w) // EEPROM, Video banking AM_RANGE(0x3fd4, 0x3fd4) AM_READWRITE(vendetta_sound_interrupt_r, z80_irq_w) // Sound - AM_RANGE(0x3fd6, 0x3fd7) AM_DEVREADWRITE("konami", vendetta_sound_r, k053260_w) // Sound + AM_RANGE(0x3fd6, 0x3fd7) AM_DEVREADWRITE("k053260", vendetta_sound_r, k053260_w) // Sound AM_RANGE(0x3fd8, 0x3fd9) AM_DEVREAD("k053246", k053246_r) // 053246 (Sprite) AM_RANGE(0x3fda, 0x3fda) AM_WRITENOP // Not Emulated (Watchdog ???) /* what is the desired effect of overlapping these memory regions anyway? */ @@ -298,7 +291,7 @@ static ADDRESS_MAP_START( sound_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0xf000, 0xf7ff) AM_RAM AM_RANGE(0xf800, 0xf801) AM_DEVREADWRITE("ymsnd", ym2151_r, ym2151_w) AM_RANGE(0xfa00, 0xfa00) AM_WRITE(z80_arm_nmi_w) - AM_RANGE(0xfc00, 0xfc2f) AM_DEVREADWRITE("konami", k053260_r, k053260_w) + AM_RANGE(0xfc00, 0xfc2f) AM_DEVREADWRITE("k053260", k053260_r, k053260_w) ADDRESS_MAP_END @@ -418,7 +411,8 @@ INPUT_PORTS_END static INTERRUPT_GEN( vendetta_irq ) { - if (irq_enabled) + vendetta_state *state = (vendetta_state *)device->machine->driver_data; + if (state->irq_enabled) cpu_set_input_line(device, KONAMI_IRQ_LINE, HOLD_LINE); } @@ -458,8 +452,56 @@ static const k053247_interface esckids_k053246_intf = vendetta_sprite_callback }; +static MACHINE_START( vendetta ) +{ + vendetta_state *state = (vendetta_state *)machine->driver_data; + UINT8 *ROM = memory_region(machine, "maincpu"); + + memory_configure_bank(machine, "bank1", 0, 28, &ROM[0x10000], 0x2000); + memory_set_bank(machine, "bank1", 0); + + machine->generic.paletteram.u8 = auto_alloc_array_clear(machine, UINT8, 0x1000); + + state->maincpu = devtag_get_device(machine, "maincpu"); + state->audiocpu = devtag_get_device(machine, "audiocpu"); + state->k053246 = devtag_get_device(machine, "k053246"); + state->k053251 = devtag_get_device(machine, "k053251"); + state->k052109 = devtag_get_device(machine, "k052109"); + state->k054000 = devtag_get_device(machine, "k054000"); + state->k053260 = devtag_get_device(machine, "k053260"); + + state_save_register_global(machine, state->irq_enabled); + state_save_register_global(machine, state->sprite_colorbase); + state_save_register_global_array(machine, state->layer_colorbase); + state_save_register_global_array(machine, state->layerpri); + state_save_register_global_pointer(machine, machine->generic.paletteram.u8, 0x1000); +} + +static MACHINE_RESET( vendetta ) +{ + vendetta_state *state = (vendetta_state *)machine->driver_data; + int i; + + konami_configure_set_lines(cputag_get_cpu(machine, "maincpu"), vendetta_banking); + + for (i = 0; i < 3; i++) + { + state->layerpri[i] = 0; + state->layer_colorbase[i] = 0; + } + + state->sprite_colorbase = 0; + state->irq_enabled = 0; + + /* init banks */ + vendetta_video_banking(machine, 0); +} + static MACHINE_DRIVER_START( vendetta ) + /* driver data */ + MDRV_DRIVER_DATA(vendetta_state) + /* basic machine hardware */ MDRV_CPU_ADD("maincpu", KONAMI, 6000000) /* this is strange, seems an overclock but */ // MDRV_CPU_ADD("maincpu", KONAMI, 3000000) /* is needed to have correct music speed */ @@ -470,6 +512,7 @@ static MACHINE_DRIVER_START( vendetta ) MDRV_CPU_PROGRAM_MAP(sound_map) /* interrupts are triggered by the main CPU */ + MDRV_MACHINE_START(vendetta) MDRV_MACHINE_RESET(vendetta) MDRV_EEPROM_ADD("eeprom", eeprom_intf) @@ -500,7 +543,7 @@ static MACHINE_DRIVER_START( vendetta ) MDRV_SOUND_ROUTE(0, "lspeaker", 1.0) MDRV_SOUND_ROUTE(1, "rspeaker", 1.0) - MDRV_SOUND_ADD("konami", K053260, 3579545) /* verified with PCB */ + MDRV_SOUND_ADD("k053260", K053260, 3579545) /* verified with PCB */ MDRV_SOUND_ROUTE(0, "lspeaker", 0.75) MDRV_SOUND_ROUTE(1, "rspeaker", 0.75) MACHINE_DRIVER_END @@ -533,7 +576,7 @@ MACHINE_DRIVER_END ***************************************************************************/ ROM_START( vendetta ) - ROM_REGION( 0x49000, "maincpu", 0 ) /* code + banked roms + banked ram */ + ROM_REGION( 0x48000, "maincpu", 0 ) /* code + banked roms + banked ram */ ROM_LOAD( "081t01", 0x10000, 0x38000, CRC(e76267f5) SHA1(efef6c2edb4c181374661f358dad09123741b63d) ) ROM_CONTINUE( 0x08000, 0x08000 ) @@ -550,12 +593,12 @@ ROM_START( vendetta ) ROM_LOAD( "081a06", 0x200000, 0x100000, CRC(e9fe6d80) SHA1(2b7fc9d7fe43cd85dc8b975fe639c273cb0d9256) ) /* sprites */ ROM_LOAD( "081a07", 0x300000, 0x100000, CRC(8a22b29a) SHA1(be539f21518e13038ab1d4cc2b2a901dd3e621f4) ) /* sprites */ - ROM_REGION( 0x100000, "konami", 0 ) /* 053260 samples */ + ROM_REGION( 0x100000, "k053260", 0 ) /* 053260 samples */ ROM_LOAD( "081a03", 0x000000, 0x100000, CRC(14b6baea) SHA1(fe15ee57f19f5acaad6c1642d51f390046a7468a) ) ROM_END ROM_START( vendettar ) - ROM_REGION( 0x49000, "maincpu", 0 ) /* code + banked roms + banked ram */ + ROM_REGION( 0x48000, "maincpu", 0 ) /* code + banked roms + banked ram */ ROM_LOAD( "081r01", 0x10000, 0x38000, CRC(84796281) SHA1(e4330c6eaa17adda5b4bd3eb824388c89fb07918) ) ROM_CONTINUE( 0x08000, 0x08000 ) @@ -572,12 +615,12 @@ ROM_START( vendettar ) ROM_LOAD( "081a06", 0x200000, 0x100000, CRC(e9fe6d80) SHA1(2b7fc9d7fe43cd85dc8b975fe639c273cb0d9256) ) /* sprites */ ROM_LOAD( "081a07", 0x300000, 0x100000, CRC(8a22b29a) SHA1(be539f21518e13038ab1d4cc2b2a901dd3e621f4) ) /* sprites */ - ROM_REGION( 0x100000, "konami", 0 ) /* 053260 samples */ + ROM_REGION( 0x100000, "k053260", 0 ) /* 053260 samples */ ROM_LOAD( "081a03", 0x000000, 0x100000, CRC(14b6baea) SHA1(fe15ee57f19f5acaad6c1642d51f390046a7468a) ) ROM_END ROM_START( vendetta2p ) - ROM_REGION( 0x49000, "maincpu", 0 ) /* code + banked roms + banked ram */ + ROM_REGION( 0x48000, "maincpu", 0 ) /* code + banked roms + banked ram */ ROM_LOAD( "081w01", 0x10000, 0x38000, CRC(cee57132) SHA1(8b6413877e127511daa76278910c2ee3247d613a) ) ROM_CONTINUE( 0x08000, 0x08000 ) @@ -594,12 +637,12 @@ ROM_START( vendetta2p ) ROM_LOAD( "081a06", 0x200000, 0x100000, CRC(e9fe6d80) SHA1(2b7fc9d7fe43cd85dc8b975fe639c273cb0d9256) ) /* sprites */ ROM_LOAD( "081a07", 0x300000, 0x100000, CRC(8a22b29a) SHA1(be539f21518e13038ab1d4cc2b2a901dd3e621f4) ) /* sprites */ - ROM_REGION( 0x100000, "konami", 0 ) /* 053260 samples */ + ROM_REGION( 0x100000, "k053260", 0 ) /* 053260 samples */ ROM_LOAD( "081a03", 0x000000, 0x100000, CRC(14b6baea) SHA1(fe15ee57f19f5acaad6c1642d51f390046a7468a) ) ROM_END ROM_START( vendetta2pu ) - ROM_REGION( 0x49000, "maincpu", 0 ) /* code + banked roms + banked ram */ + ROM_REGION( 0x48000, "maincpu", 0 ) /* code + banked roms + banked ram */ ROM_LOAD( "081u01", 0x10000, 0x38000, CRC(b4d9ade5) SHA1(fbd543738cb0b68c80ff05eed7849b608de03395) ) ROM_CONTINUE( 0x08000, 0x08000 ) @@ -616,12 +659,12 @@ ROM_START( vendetta2pu ) ROM_LOAD( "081a06", 0x200000, 0x100000, CRC(e9fe6d80) SHA1(2b7fc9d7fe43cd85dc8b975fe639c273cb0d9256) ) /* sprites */ ROM_LOAD( "081a07", 0x300000, 0x100000, CRC(8a22b29a) SHA1(be539f21518e13038ab1d4cc2b2a901dd3e621f4) ) /* sprites */ - ROM_REGION( 0x100000, "konami", 0 ) /* 053260 samples */ + ROM_REGION( 0x100000, "k053260", 0 ) /* 053260 samples */ ROM_LOAD( "081a03", 0x000000, 0x100000, CRC(14b6baea) SHA1(fe15ee57f19f5acaad6c1642d51f390046a7468a) ) ROM_END ROM_START( vendetta2pd ) - ROM_REGION( 0x49000, "maincpu", 0 ) /* code + banked roms + banked ram */ + ROM_REGION( 0x48000, "maincpu", 0 ) /* code + banked roms + banked ram */ ROM_LOAD( "081d01", 0x10000, 0x38000, CRC(335da495) SHA1(ea74680eb898aeecf9f1eec95f151bcf66e6b6cb) ) ROM_CONTINUE( 0x08000, 0x08000 ) @@ -638,12 +681,12 @@ ROM_START( vendetta2pd ) ROM_LOAD( "081a06", 0x200000, 0x100000, CRC(e9fe6d80) SHA1(2b7fc9d7fe43cd85dc8b975fe639c273cb0d9256) ) /* sprites */ ROM_LOAD( "081a07", 0x300000, 0x100000, CRC(8a22b29a) SHA1(be539f21518e13038ab1d4cc2b2a901dd3e621f4) ) /* sprites */ - ROM_REGION( 0x100000, "konami", 0 ) /* 053260 samples */ + ROM_REGION( 0x100000, "k053260", 0 ) /* 053260 samples */ ROM_LOAD( "081a03", 0x000000, 0x100000, CRC(14b6baea) SHA1(fe15ee57f19f5acaad6c1642d51f390046a7468a) ) ROM_END ROM_START( vendettaj ) - ROM_REGION( 0x49000, "maincpu", 0 ) /* code + banked roms + banked ram */ + ROM_REGION( 0x48000, "maincpu", 0 ) /* code + banked roms + banked ram */ ROM_LOAD( "081p01", 0x10000, 0x38000, CRC(5fe30242) SHA1(2ea98e66637fa2ad60044b1a2b0dd158a82403a2) ) ROM_CONTINUE( 0x08000, 0x08000 ) @@ -660,12 +703,12 @@ ROM_START( vendettaj ) ROM_LOAD( "081a06", 0x200000, 0x100000, CRC(e9fe6d80) SHA1(2b7fc9d7fe43cd85dc8b975fe639c273cb0d9256) ) /* sprites */ ROM_LOAD( "081a07", 0x300000, 0x100000, CRC(8a22b29a) SHA1(be539f21518e13038ab1d4cc2b2a901dd3e621f4) ) /* sprites */ - ROM_REGION( 0x100000, "konami", 0 ) /* 053260 samples */ + ROM_REGION( 0x100000, "k053260", 0 ) /* 053260 samples */ ROM_LOAD( "081a03", 0x000000, 0x100000, CRC(14b6baea) SHA1(fe15ee57f19f5acaad6c1642d51f390046a7468a) ) ROM_END ROM_START( esckids ) - ROM_REGION( 0x049000, "maincpu", 0 ) // Main CPU (053248) Code & Banked (1M x 1) + ROM_REGION( 0x048000, "maincpu", 0 ) // Main CPU (053248) Code & Banked (1M x 1) ROM_LOAD( "17c.bin", 0x010000, 0x018000, CRC(9dfba99c) SHA1(dbcb89aad5a9addaf7200b2524be999877313a6e) ) ROM_CONTINUE( 0x008000, 0x008000 ) @@ -682,13 +725,13 @@ ROM_START( esckids ) ROM_LOAD( "975c06", 0x200000, 0x100000, CRC(36d410f9) SHA1(2b1fd93c11839480aa05a8bf27feef7591704f3d) ) ROM_LOAD( "975c07", 0x300000, 0x100000, CRC(97ec541e) SHA1(d1aa186b17cfe6e505f5b305703319299fa54518) ) - ROM_REGION( 0x100000, "konami", 0 ) // Samples MASK-ROM (4M x 1) + ROM_REGION( 0x100000, "k053260", 0 ) // Samples MASK-ROM (4M x 1) ROM_LOAD( "975c03", 0x000000, 0x080000, CRC(dc4a1707) SHA1(f252d08483fd664f8fc03bf8f174efd452b4cdc5) ) ROM_END ROM_START( esckidsj ) - ROM_REGION( 0x049000, "maincpu", 0 ) // Main CPU (053248) Code & Banked (1M x 1) + ROM_REGION( 0x048000, "maincpu", 0 ) // Main CPU (053248) Code & Banked (1M x 1) ROM_LOAD( "975r01", 0x010000, 0x018000, CRC(7b5c5572) SHA1(b94b58c010539926d112c2dfd80bcbad76acc986) ) ROM_CONTINUE( 0x008000, 0x008000 ) @@ -705,7 +748,7 @@ ROM_START( esckidsj ) ROM_LOAD( "975c06", 0x200000, 0x100000, CRC(36d410f9) SHA1(2b1fd93c11839480aa05a8bf27feef7591704f3d) ) ROM_LOAD( "975c07", 0x300000, 0x100000, CRC(97ec541e) SHA1(d1aa186b17cfe6e505f5b305703319299fa54518) ) - ROM_REGION( 0x100000, "konami", 0 ) // Samples MASK-ROM (4M x 1) + ROM_REGION( 0x100000, "k053260", 0 ) // Samples MASK-ROM (4M x 1) ROM_LOAD( "975c03", 0x000000, 0x080000, CRC(dc4a1707) SHA1(f252d08483fd664f8fc03bf8f174efd452b4cdc5) ) ROM_END @@ -718,46 +761,31 @@ ROM_END static KONAMI_SETLINES_CALLBACK( vendetta_banking ) { - UINT8 *RAM = memory_region(device->machine, "maincpu"); - - if ( lines >= 0x1c ) - { - logerror("PC = %04x : Unknown bank selected %02x\n", cpu_get_pc(device), lines ); - } + if (lines >= 0x1c) + logerror("PC = %04x : Unknown bank selected %02x\n", cpu_get_pc(device), lines); else - memory_set_bankptr(device->machine, "bank1", &RAM[ 0x10000 + ( lines * 0x2000 ) ] ); + memory_set_bank(device->machine, "bank1", lines); } -static MACHINE_RESET( vendetta ) -{ - konami_configure_set_lines(cputag_get_cpu(machine, "maincpu"), vendetta_banking); - - machine->generic.paletteram.u8 = &memory_region(machine, "maincpu")[0x48000]; - irq_enabled = 0; - - /* init banks */ - memory_set_bankptr(machine, "bank1", &memory_region(machine, "maincpu")[0x10000] ); - vendetta_video_banking( machine, 0 ); -} - - static DRIVER_INIT( vendetta ) { - video_banking_base = 0x4000; + vendetta_state *state = (vendetta_state *)machine->driver_data; + state->video_banking_base = 0x4000; } static DRIVER_INIT( esckids ) { - video_banking_base = 0x2000; + vendetta_state *state = (vendetta_state *)machine->driver_data; + state->video_banking_base = 0x2000; } -GAME( 1991, vendetta, 0, vendetta, vendet4p, vendetta, ROT0, "Konami", "Vendetta (World 4 Players ver. T)", 0 ) -GAME( 1991, vendettar, vendetta, vendetta, vendet4p, vendetta, ROT0, "Konami", "Vendetta (World 4 Players ver. R)", 0 ) -GAME( 1991, vendetta2p, vendetta, vendetta, vendetta, vendetta, ROT0, "Konami", "Vendetta (World 2 Players ver. W)", 0 ) -GAME( 1991, vendetta2pu, vendetta, vendetta, vendetta, vendetta, ROT0, "Konami", "Vendetta (Asia 2 Players ver. U)", 0 ) -GAME( 1991, vendetta2pd, vendetta, vendetta, vendetta, vendetta, ROT0, "Konami", "Vendetta (Asia 2 Players ver. D)", 0 ) -GAME( 1991, vendettaj, vendetta, vendetta, vendetta, vendetta, ROT0, "Konami", "Crime Fighters 2 (Japan 2 Players ver. P)", 0 ) -GAME( 1991, esckids, 0, esckids, esckids, esckids, ROT0, "Konami", "Escape Kids (Asia, 4 Players)", 0 ) -GAME( 1991, esckidsj, esckids, esckids, esckidsj, esckids, ROT0, "Konami", "Escape Kids (Japan, 2 Players)", 0 ) +GAME( 1991, vendetta, 0, vendetta, vendet4p, vendetta, ROT0, "Konami", "Vendetta (World 4 Players ver. T)", GAME_SUPPORTS_SAVE ) +GAME( 1991, vendettar, vendetta, vendetta, vendet4p, vendetta, ROT0, "Konami", "Vendetta (World 4 Players ver. R)", GAME_SUPPORTS_SAVE ) +GAME( 1991, vendetta2p, vendetta, vendetta, vendetta, vendetta, ROT0, "Konami", "Vendetta (World 2 Players ver. W)", GAME_SUPPORTS_SAVE ) +GAME( 1991, vendetta2pu, vendetta, vendetta, vendetta, vendetta, ROT0, "Konami", "Vendetta (Asia 2 Players ver. U)", GAME_SUPPORTS_SAVE ) +GAME( 1991, vendetta2pd, vendetta, vendetta, vendetta, vendetta, ROT0, "Konami", "Vendetta (Asia 2 Players ver. D)", GAME_SUPPORTS_SAVE ) +GAME( 1991, vendettaj, vendetta, vendetta, vendetta, vendetta, ROT0, "Konami", "Crime Fighters 2 (Japan 2 Players ver. P)", GAME_SUPPORTS_SAVE ) +GAME( 1991, esckids, 0, esckids, esckids, esckids, ROT0, "Konami", "Escape Kids (Asia, 4 Players)", GAME_SUPPORTS_SAVE ) +GAME( 1991, esckidsj, esckids, esckids, esckidsj, esckids, ROT0, "Konami", "Escape Kids (Japan, 2 Players)", GAME_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/xexex.c b/src/mame/drivers/xexex.c index 9c1d31a33bd..7ad5330a5a5 100644 --- a/src/mame/drivers/xexex.c +++ b/src/mame/drivers/xexex.c @@ -1,7 +1,3 @@ -#define XE_DEBUG 0 -#define XE_SKIPIDLE 1 -#define XE_DMADELAY ATTOTIME_IN_USEC(256) - /*************************************************************************** Xexex (c) 1991 Konami - GX067 @@ -70,25 +66,12 @@ Unresolved Issues: #include "sound/k054539.h" #include "sound/2151intf.h" #include "sound/flt_vol.h" +#include "includes/xexex.h" #include "includes/konamipt.h" -VIDEO_START( xexex ); -VIDEO_UPDATE( xexex ); -void xexex_set_alpha(int on); - -extern void xexex_sprite_callback(running_machine *machine, int *code, int *color, int *priority_mask); -extern void xexex_tile_callback(running_machine *machine, int layer, int *code, int *color, int *flags); - -static MACHINE_START( xexex ); -static MACHINE_RESET( xexex ); - -static UINT16 *xexex_workram; -static UINT16 cur_control2; -static INT32 cur_sound_region, xexex_strip0x1a; -static int suspension_active, resume_trigger; -static emu_timer *dmadelay_timer; -static int frame; - +#define XE_DEBUG 0 +#define XE_SKIPIDLE 1 +#define XE_DMADELAY ATTOTIME_IN_USEC(256) static const eeprom_interface eeprom_intf = { @@ -108,47 +91,47 @@ static const eeprom_interface eeprom_intf = /* A1, A5 and A6 don't go to the 053247. */ static READ16_HANDLER( K053247_scattered_word_r ) { - const device_config *k053246 = devtag_get_device(space->machine, "k053246"); + xexex_state *state = (xexex_state *)space->machine->driver_data; if (offset & 0x0031) - return space->machine->generic.spriteram.u16[offset]; + return state->spriteram[offset]; else { offset = ((offset & 0x000e) >> 1) | ((offset & 0x3fc0) >> 3); - return k053247_word_r(k053246, offset, mem_mask); + return k053247_word_r(state->k053246, offset, mem_mask); } } static WRITE16_HANDLER( K053247_scattered_word_w ) { - const device_config *k053246 = devtag_get_device(space->machine, "k053246"); + xexex_state *state = (xexex_state *)space->machine->driver_data; if (offset & 0x0031) - COMBINE_DATA(space->machine->generic.spriteram.u16+offset); + COMBINE_DATA(state->spriteram + offset); else { offset = ((offset & 0x000e) >> 1) | ((offset & 0x3fc0) >> 3); - k053247_word_w(k053246, offset, data, mem_mask); + k053247_word_w(state->k053246, offset, data, mem_mask); } } #endif -static void xexex_objdma(running_machine *machine, int limiter) +static void xexex_objdma( running_machine *machine, int limiter ) { - const device_config *k053246 = devtag_get_device(machine, "k053246"); + xexex_state *state = (xexex_state *)machine->driver_data; int counter, num_inactive; UINT16 *src, *dst; - counter = frame; - frame = video_screen_get_frame_number(machine->primary_screen); - if (limiter && counter == frame) + counter = state->frame; + state->frame = video_screen_get_frame_number(machine->primary_screen); + if (limiter && counter == state->frame) return; // make sure we only do DMA transfer once per frame - k053247_get_ram(k053246, &dst); - counter = k053247_get_dy(k053246); - src = machine->generic.spriteram.u16; + k053247_get_ram(state->k053246, &dst); + counter = k053247_get_dy(state->k053246); + src = state->spriteram; num_inactive = counter = 256; do @@ -169,31 +152,35 @@ static void xexex_objdma(running_machine *machine, int limiter) if (num_inactive) do { *dst = 0; dst += 8; } while (--num_inactive); } -static READ16_HANDLER( spriteram16_mirror_r ) +static READ16_HANDLER( spriteram_mirror_r ) { - return(space->machine->generic.spriteram.u16[offset]); + xexex_state *state = (xexex_state *)space->machine->driver_data; + return state->spriteram[offset]; } -static WRITE16_HANDLER( spriteram16_mirror_w ) +static WRITE16_HANDLER( spriteram_mirror_w ) { - COMBINE_DATA(space->machine->generic.spriteram.u16+offset); + xexex_state *state = (xexex_state *)space->machine->driver_data; + COMBINE_DATA(state->spriteram + offset); } static READ16_HANDLER( xexex_waitskip_r ) { + xexex_state *state = (xexex_state *)space->machine->driver_data; + if (cpu_get_pc(space->cpu) == 0x1158) { - cpu_spinuntil_trigger(space->cpu, resume_trigger); - suspension_active = 1; + cpu_spinuntil_trigger(space->cpu, state->resume_trigger); + state->suspension_active = 1; } - return(xexex_workram[0x14/2]); + return state->workram[0x14/2]; } static void parse_control2( running_machine *machine ) { - const device_config *k053246 = devtag_get_device(machine, "k053246"); + xexex_state *state = (xexex_state *)machine->driver_data; /* bit 0 is data */ /* bit 1 is cs (active low) */ @@ -201,34 +188,39 @@ static void parse_control2( running_machine *machine ) /* bit 5 is enable irq 6 */ /* bit 6 is enable irq 5 */ /* bit 11 is watchdog */ - input_port_write(machine, "EEPROMOUT", cur_control2, 0xff); + input_port_write(machine, "EEPROMOUT", state->cur_control2, 0xff); /* bit 8 = enable sprite ROM reading */ - k053246_set_objcha_line(k053246, (cur_control2 & 0x0100) ? ASSERT_LINE : CLEAR_LINE); + k053246_set_objcha_line(state->k053246, (state->cur_control2 & 0x0100) ? ASSERT_LINE : CLEAR_LINE); /* bit 9 = disable alpha channel on K054157 plane 0 (under investigation) */ - xexex_set_alpha(!(cur_control2 & 0x200)); + state->cur_alpha = !(state->cur_control2 & 0x200); } static READ16_HANDLER( control2_r ) { - return cur_control2; + xexex_state *state = (xexex_state *)space->machine->driver_data; + return state->cur_control2; } static WRITE16_HANDLER( control2_w ) { - COMBINE_DATA(&cur_control2); + xexex_state *state = (xexex_state *)space->machine->driver_data; + COMBINE_DATA(&state->cur_control2); parse_control2(space->machine); } static WRITE16_HANDLER( sound_cmd1_w ) { + xexex_state *state = (xexex_state *)space->machine->driver_data; + if(ACCESSING_BITS_0_7) { // anyone knows why 0x1a keeps lurking the sound queue in the world version??? - if (xexex_strip0x1a) - if (soundlatch2_r(space, 0)==1 && data==0x1a) return; + if (state->strip_0x1a) + if (soundlatch2_r(space, 0) == 1 && data == 0x1a) + return; soundlatch_w(space, 0, data & 0xff); } @@ -237,14 +229,13 @@ static WRITE16_HANDLER( sound_cmd1_w ) static WRITE16_HANDLER( sound_cmd2_w ) { if (ACCESSING_BITS_0_7) - { soundlatch2_w(space, 0, data & 0xff); - } } static WRITE16_HANDLER( sound_irq_w ) { - cputag_set_input_line(space->machine, "audiocpu", 0, HOLD_LINE); + xexex_state *state = (xexex_state *)space->machine->driver_data; + cpu_set_input_line(state->audiocpu, 0, HOLD_LINE); } static READ16_HANDLER( sound_status_r ) @@ -254,71 +245,76 @@ static READ16_HANDLER( sound_status_r ) static void reset_sound_region(running_machine *machine) { - memory_set_bankptr(machine, "bank2", memory_region(machine, "audiocpu") + 0x10000 + cur_sound_region*0x4000); + xexex_state *state = (xexex_state *)machine->driver_data; + memory_set_bank(machine, "bank2", state->cur_sound_region & 0x07); } static WRITE8_HANDLER( sound_bankswitch_w ) { - cur_sound_region = data & 7; + xexex_state *state = (xexex_state *)space->machine->driver_data; + state->cur_sound_region = data & 7; reset_sound_region(space->machine); } static void ym_set_mixing(const device_config *device, double left, double right) { - flt_volume_set_volume(devtag_get_device(device->machine, "filter1l"), (71.0*left)/55.0); - flt_volume_set_volume(devtag_get_device(device->machine, "filter1r"), (71.0*right)/55.0); - flt_volume_set_volume(devtag_get_device(device->machine, "filter2l"), (71.0*left)/55.0); - flt_volume_set_volume(devtag_get_device(device->machine, "filter2r"), (71.0*right)/55.0); + xexex_state *state = (xexex_state *)device->machine->driver_data; + flt_volume_set_volume(state->filter1l, (71.0 * left) / 55.0); + flt_volume_set_volume(state->filter1r, (71.0 * right) / 55.0); + flt_volume_set_volume(state->filter2l, (71.0 * left) / 55.0); + flt_volume_set_volume(state->filter2r, (71.0 * right) / 55.0); } static TIMER_CALLBACK( dmaend_callback ) { - if (cur_control2 & 0x0040) + xexex_state *state = (xexex_state *)machine->driver_data; + + if (state->cur_control2 & 0x0040) { // foul-proof (CPU0 could be deactivated while we wait) - if (suspension_active) + if (state->suspension_active) { - suspension_active = 0; - cpuexec_trigger(machine, resume_trigger); + state->suspension_active = 0; + cpuexec_trigger(machine, state->resume_trigger); } // IRQ 5 is the "object DMA end interrupt" and shouldn't be triggered // if object data isn't ready for DMA within the frame. - cputag_set_input_line(machine, "maincpu", 5, HOLD_LINE); + cpu_set_input_line(state->maincpu, 5, HOLD_LINE); } } static INTERRUPT_GEN( xexex_interrupt ) { - const device_config *k053246 = devtag_get_device(device->machine, "k053246"); + xexex_state *state = (xexex_state *)device->machine->driver_data; - if (suspension_active) + if (state->suspension_active) { - suspension_active = 0; - cpuexec_trigger(device->machine, resume_trigger); + state->suspension_active = 0; + cpuexec_trigger(device->machine, state->resume_trigger); } switch (cpu_getiloops(device)) { case 0: // IRQ 6 is for test mode only - if (cur_control2 & 0x0020) + if (state->cur_control2 & 0x0020) cpu_set_input_line(device, 6, HOLD_LINE); break; case 1: - if (k053246_is_irq_enabled(k053246)) + if (k053246_is_irq_enabled(state->k053246)) { // OBJDMA starts at the beginning of V-blank xexex_objdma(device->machine, 0); // schedule DMA end interrupt - timer_adjust_oneshot(dmadelay_timer, XE_DMADELAY, 0); + timer_adjust_oneshot(state->dmadelay_timer, XE_DMADELAY, 0); } // IRQ 4 is the V-blank interrupt. It controls color, sound and // vital game logics that shouldn't be interfered by frame-drop. - if (cur_control2 & 0x0800) + if (state->cur_control2 & 0x0800) cpu_set_input_line(device, 4, HOLD_LINE); break; } @@ -327,14 +323,14 @@ static INTERRUPT_GEN( xexex_interrupt ) static ADDRESS_MAP_START( main_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x000000, 0x07ffff) AM_ROM - AM_RANGE(0x080000, 0x08ffff) AM_RAM AM_BASE(&xexex_workram) // work RAM + AM_RANGE(0x080000, 0x08ffff) AM_RAM AM_BASE_MEMBER(xexex_state, workram) // work RAM #if XE_SKIPIDLE AM_RANGE(0x080014, 0x080015) AM_READ(xexex_waitskip_r) // helps sound CPU by giving back control as early as possible #endif - AM_RANGE(0x090000, 0x097fff) AM_RAM AM_BASE_GENERIC(spriteram) // K053247 sprite RAM - AM_RANGE(0x098000, 0x09ffff) AM_READWRITE(spriteram16_mirror_r, spriteram16_mirror_w) // K053247 sprite RAM mirror read + AM_RANGE(0x090000, 0x097fff) AM_RAM AM_BASE_MEMBER(xexex_state, spriteram) // K053247 sprite RAM + AM_RANGE(0x098000, 0x09ffff) AM_READWRITE(spriteram_mirror_r, spriteram_mirror_w) // K053247 sprite RAM mirror read AM_RANGE(0x0c0000, 0x0c003f) AM_DEVWRITE("k056832", k056832_word_w) // VACSET (K054157) AM_RANGE(0x0c2000, 0x0c2007) AM_DEVWRITE("k053246", k053246_word_w) // OBJSET1 AM_RANGE(0x0c4000, 0x0c4001) AM_DEVREAD("k053246", k053246_word_r) // Passthrough to sprite roms @@ -377,7 +373,7 @@ static ADDRESS_MAP_START( sound_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank2") AM_RANGE(0x0000, 0xbfff) AM_ROM AM_RANGE(0xc000, 0xdfff) AM_RAM - AM_RANGE(0xe000, 0xe22f) AM_DEVREADWRITE("konami", k054539_r, k054539_w) + AM_RANGE(0xe000, 0xe22f) AM_DEVREADWRITE("k054539", k054539_r, k054539_w) AM_RANGE(0xec00, 0xec01) AM_DEVREADWRITE("ymsnd", ym2151_r, ym2151_w) AM_RANGE(0xf000, 0xf000) AM_WRITE(soundlatch3_w) AM_RANGE(0xf002, 0xf002) AM_READ(soundlatch_r) @@ -459,8 +455,75 @@ static const k053247_interface xexex_k053246_intf = xexex_sprite_callback }; +static STATE_POSTLOAD( xexex_postload ) +{ + parse_control2(machine); + reset_sound_region(machine); +} + +static MACHINE_START( xexex ) +{ + xexex_state *state = (xexex_state *)machine->driver_data; + UINT8 *ROM = memory_region(machine, "audiocpu"); + + memory_configure_bank(machine, "bank2", 0, 8, &ROM[0x10000], 0x4000); + memory_set_bank(machine, "bank2", 0); + + state->maincpu = devtag_get_device(machine, "maincpu"); + state->audiocpu = devtag_get_device(machine, "audiocpu"); + state->k053246 = devtag_get_device(machine, "k053246"); + state->k053250 = devtag_get_device(machine, "k053250"); + state->k053251 = devtag_get_device(machine, "k053251"); + state->k053252 = devtag_get_device(machine, "k053252"); + state->k056832 = devtag_get_device(machine, "k056832"); + state->k054338 = devtag_get_device(machine, "k054338"); + state->k054539 = devtag_get_device(machine, "k054539"); + state->filter1l = devtag_get_device(machine, "filter1l"); + state->filter1r = devtag_get_device(machine, "filter1r"); + state->filter2l = devtag_get_device(machine, "filter2l"); + state->filter2r = devtag_get_device(machine, "filter2r"); + + state_save_register_global(machine, state->cur_alpha); + state_save_register_global(machine, state->sprite_colorbase); + state_save_register_global_array(machine, state->layer_colorbase); + state_save_register_global_array(machine, state->layerpri); + + state_save_register_global(machine, state->suspension_active); + state_save_register_global(machine, state->frame); + + state_save_register_global(machine, state->cur_control2); + state_save_register_global(machine, state->cur_sound_region); + state_save_register_postload(machine, xexex_postload, NULL); + + state->dmadelay_timer = timer_alloc(machine, dmaend_callback, NULL); +} + +static MACHINE_RESET( xexex ) +{ + xexex_state *state = (xexex_state *)machine->driver_data; + int i; + + for (i = 0; i < 4; i++) + { + state->layerpri[i] = 0; + state->layer_colorbase[i] = 0; + } + + state->sprite_colorbase = 0; + + state->cur_control2 = 0; + state->cur_sound_region = 0; + state->suspension_active = 0; + state->resume_trigger = 1000; + state->frame = -1; + k054539_init_flags(devtag_get_device(machine, "k054539"), K054539_REVERSE_STEREO); +} + static MACHINE_DRIVER_START( xexex ) + /* driver data */ + MDRV_DRIVER_DATA(xexex_state) + /* basic machine hardware */ MDRV_CPU_ADD("maincpu", M68000, 16000000) // 16MHz (32MHz xtal) MDRV_CPU_PROGRAM_MAP(main_map) @@ -510,7 +573,7 @@ static MACHINE_DRIVER_START( xexex ) MDRV_SOUND_ROUTE(1, "filter2l", 0.50) MDRV_SOUND_ROUTE(1, "filter2r", 0.50) - MDRV_SOUND_ADD("konami", K054539, 48000) + MDRV_SOUND_ADD("k054539", K054539, 48000) MDRV_SOUND_CONFIG(k054539_config) MDRV_SOUND_ROUTE(0, "lspeaker", 1.0) MDRV_SOUND_ROUTE(0, "rspeaker", 1.0) @@ -552,7 +615,7 @@ ROM_START( xexex ) /* Europe, Version AA */ ROM_REGION( 0x100000, "gfx3", 0 ) // NOTE: region must be 2xROM size for unpacking ROM_LOAD( "067_b08.rom", 0x000000, 0x080000, CRC(ca816b7b) SHA1(769ce3700e41200c34adec98598c0fe371fe1e6d) ) - ROM_REGION( 0x300000, "konami", 0 ) + ROM_REGION( 0x300000, "k054539", 0 ) ROM_LOAD( "067_b06.rom", 0x000000, 0x200000, CRC(3b12fce4) SHA1(c69172d9965b8da8a539812fac92d5f1a3c80d17) ) ROM_LOAD( "067_b07.rom", 0x200000, 0x100000, CRC(ec87fe1b) SHA1(ec9823aea5a1fc5c47c8262e15e10b28be87231c) ) ROM_END @@ -581,7 +644,7 @@ ROM_START( xexexa ) /* Asia, Version AA */ ROM_REGION( 0x100000, "gfx3", 0 ) // NOTE: region must be 2xROM size for unpacking ROM_LOAD( "067_b08.rom", 0x000000, 0x080000, CRC(ca816b7b) SHA1(769ce3700e41200c34adec98598c0fe371fe1e6d) ) - ROM_REGION( 0x300000, "konami", 0 ) + ROM_REGION( 0x300000, "k054539", 0 ) ROM_LOAD( "067_b06.rom", 0x000000, 0x200000, CRC(3b12fce4) SHA1(c69172d9965b8da8a539812fac92d5f1a3c80d17) ) ROM_LOAD( "067_b07.rom", 0x200000, 0x100000, CRC(ec87fe1b) SHA1(ec9823aea5a1fc5c47c8262e15e10b28be87231c) ) ROM_END @@ -610,50 +673,27 @@ ROM_START( xexexj ) /* Japan, Version AA */ ROM_REGION( 0x100000, "gfx3", 0 ) // NOTE: region must be 2xROM size for unpacking ROM_LOAD( "067_b08.rom", 0x000000, 0x080000, CRC(ca816b7b) SHA1(769ce3700e41200c34adec98598c0fe371fe1e6d) ) - ROM_REGION( 0x300000, "konami", 0 ) + ROM_REGION( 0x300000, "k054539", 0 ) ROM_LOAD( "067_b06.rom", 0x000000, 0x200000, CRC(3b12fce4) SHA1(c69172d9965b8da8a539812fac92d5f1a3c80d17) ) ROM_LOAD( "067_b07.rom", 0x200000, 0x100000, CRC(ec87fe1b) SHA1(ec9823aea5a1fc5c47c8262e15e10b28be87231c) ) ROM_END -static MACHINE_RESET( xexex ) -{ - cur_control2 = 0; - cur_sound_region = 0; - suspension_active = 0; - resume_trigger = 0; - frame = -1; - k054539_init_flags(devtag_get_device(machine, "konami"), K054539_REVERSE_STEREO); -} - -static STATE_POSTLOAD( xexex_postload ) -{ - parse_control2(machine); - reset_sound_region(machine); -} -static MACHINE_START( xexex ) +static DRIVER_INIT( xexex ) { - state_save_register_global(machine, cur_control2); - state_save_register_global(machine, cur_sound_region); - state_save_register_postload(machine, xexex_postload, NULL); - - resume_trigger = 1000; - - dmadelay_timer = timer_alloc(machine, dmaend_callback, NULL); -} + xexex_state *state = (xexex_state *)machine->driver_data; + state->strip_0x1a = 0; -static DRIVER_INIT( xexex ) -{ if (!strcmp(machine->gamedrv->name, "xexex")) { // Invulnerability // *(UINT16 *)(memory_region(machine, "maincpu") + 0x648d4) = 0x4a79; // *(UINT16 *)(memory_region(machine, "maincpu") + 0x00008) = 0x5500; - xexex_strip0x1a = 1; + state->strip_0x1a = 1; } } -GAME( 1991, xexex, 0, xexex, xexex, xexex, ROT0, "Konami", "Xexex (ver EAA)", 0 ) -GAME( 1991, xexexa, xexex, xexex, xexex, xexex, ROT0, "Konami", "Xexex (ver AAA)", 0 ) -GAME( 1991, xexexj, xexex, xexex, xexex, xexex, ROT0, "Konami", "Xexex (ver JAA)", 0 ) +GAME( 1991, xexex, 0, xexex, xexex, xexex, ROT0, "Konami", "Xexex (ver EAA)", GAME_SUPPORTS_SAVE ) +GAME( 1991, xexexa, xexex, xexex, xexex, xexex, ROT0, "Konami", "Xexex (ver AAA)", GAME_SUPPORTS_SAVE ) +GAME( 1991, xexexj, xexex, xexex, xexex, xexex, ROT0, "Konami", "Xexex (ver JAA)", GAME_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/xmen.c b/src/mame/drivers/xmen.c index 5d57e41e034..269c9d01948 100644 --- a/src/mame/drivers/xmen.c +++ b/src/mame/drivers/xmen.c @@ -25,14 +25,6 @@ likewise be a 2 screen game #include "includes/xmen.h" #include "includes/konamipt.h" -UINT16 xmen_current_frame; - -/* 6p version */ -UINT16*xmen6p_spriteramleft; -UINT16*xmen6p_spriteramright; -UINT16*xmen6p_tilemapleft; -UINT16*xmen6p_tilemapright; - /*************************************************************************** EEPROM @@ -52,8 +44,7 @@ static const eeprom_interface eeprom_intf = static WRITE16_HANDLER( eeprom_w ) { - const device_config *k052109 = devtag_get_device(space->machine, "k052109"); - const device_config *k053246 = devtag_get_device(space->machine, "k053246"); + xmen_state *state = (xmen_state *)space->machine->driver_data; logerror("%06x: write %04x to 108000\n",cpu_get_pc(space->cpu),data); if (ACCESSING_BITS_0_7) @@ -69,9 +60,9 @@ static WRITE16_HANDLER( eeprom_w ) if (ACCESSING_BITS_8_15) { /* bit 8 = enable sprite ROM reading */ - k053246_set_objcha_line(k053246, (data & 0x0100) ? ASSERT_LINE : CLEAR_LINE); + k053246_set_objcha_line(state->k053246, (data & 0x0100) ? ASSERT_LINE : CLEAR_LINE); /* bit 9 = enable char ROM reading through the video RAM */ - k052109_set_rmrd_line(k052109, (data & 0x0200) ? ASSERT_LINE : CLEAR_LINE); + k052109_set_rmrd_line(state->k052109, (data & 0x0200) ? ASSERT_LINE : CLEAR_LINE); } } @@ -91,31 +82,29 @@ static WRITE16_HANDLER( sound_cmd_w ) static WRITE16_HANDLER( sound_irq_w ) { - cputag_set_input_line(space->machine, "audiocpu", 0, HOLD_LINE); + xmen_state *state = (xmen_state *)space->machine->driver_data; + cpu_set_input_line(state->audiocpu, 0, HOLD_LINE); } -//int xmen_irqenabled; - static WRITE16_HANDLER( xmen_18fa00_w ) { if(ACCESSING_BITS_0_7) { /* bit 2 is interrupt enable */ interrupt_enable_w(space, 0, data & 0x04); - // xmen_irqenabled = data; } } -static UINT8 sound_curbank; - -static void sound_reset_bank(running_machine *machine) +static void sound_reset_bank( running_machine *machine ) { - memory_set_bankptr(machine, "bank4", memory_region(machine, "audiocpu") + 0x10000 + (sound_curbank & 0x07) * 0x4000); + xmen_state *state = (xmen_state *)machine->driver_data; + memory_set_bank(machine, "bank4", state->sound_curbank & 0x07); } static WRITE8_HANDLER( sound_bankswitch_w ) { - sound_curbank = data; + xmen_state *state = (xmen_state *)space->machine->driver_data; + state->sound_curbank = data; sound_reset_bank(space->machine); } @@ -145,7 +134,7 @@ static ADDRESS_MAP_START( sound_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0x0000, 0x7fff) AM_ROM AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank4") AM_RANGE(0xc000, 0xdfff) AM_RAM - AM_RANGE(0xe000, 0xe22f) AM_DEVREADWRITE("konami", k054539_r, k054539_w) + AM_RANGE(0xe000, 0xe22f) AM_DEVREADWRITE("k054539", k054539_r, k054539_w) AM_RANGE(0xe800, 0xe801) AM_MIRROR(0x0400) AM_DEVREADWRITE("ymsnd", ym2151_r, ym2151_w) AM_RANGE(0xf000, 0xf000) AM_WRITE(soundlatch2_w) AM_RANGE(0xf002, 0xf002) AM_READ(soundlatch_r) @@ -156,9 +145,9 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( 6p_main_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x000000, 0x03ffff) AM_ROM AM_RANGE(0x080000, 0x0fffff) AM_ROM - AM_RANGE(0x100000, 0x100fff) AM_RAM AM_BASE(&xmen6p_spriteramleft) /* sprites (screen 1) */ + AM_RANGE(0x100000, 0x100fff) AM_RAM AM_BASE_MEMBER(xmen_state, xmen6p_spriteramleft) /* sprites (screen 1) */ AM_RANGE(0x101000, 0x101fff) AM_RAM - AM_RANGE(0x102000, 0x102fff) AM_RAM AM_BASE(&xmen6p_spriteramright) /* sprites (screen 2) */ + AM_RANGE(0x102000, 0x102fff) AM_RAM AM_BASE_MEMBER(xmen_state, xmen6p_spriteramright) /* sprites (screen 2) */ AM_RANGE(0x103000, 0x103fff) AM_RAM /* 6p - a buffer? */ AM_RANGE(0x104000, 0x104fff) AM_RAM_WRITE(paletteram16_xBBBBBGGGGGRRRRR_word_w) AM_BASE_GENERIC(paletteram) AM_RANGE(0x108000, 0x108001) AM_WRITE(eeprom_w) @@ -174,8 +163,8 @@ static ADDRESS_MAP_START( 6p_main_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x10a00c, 0x10a00d) AM_DEVREAD("k053246", k053246_word_r) /* sprites */ AM_RANGE(0x110000, 0x113fff) AM_RAM /* main RAM */ AM_RANGE(0x18fa00, 0x18fa01) AM_WRITE(xmen_18fa00_w) -/* AM_RANGE(0x18c000, 0x197fff) AM_DEVWRITE("k052109", k052109_lsb_w) AM_BASE(&xmen6p_tilemapleft) */ - AM_RANGE(0x18c000, 0x197fff) AM_RAM AM_BASE(&xmen6p_tilemapleft) /* left tilemap (p1,p2,p3 counters) */ +/* AM_RANGE(0x18c000, 0x197fff) AM_DEVWRITE("k052109", k052109_lsb_w) AM_BASE_MEMBER(xmen_state, xmen6p_tilemapleft) */ + AM_RANGE(0x18c000, 0x197fff) AM_RAM AM_BASE_MEMBER(xmen_state, xmen6p_tilemapleft) /* left tilemap (p1,p2,p3 counters) */ /* AM_RANGE(0x1ac000, 0x1af7ff) AM_READONLY AM_RANGE(0x1ac000, 0x1af7ff) AM_WRITEONLY @@ -186,7 +175,7 @@ static ADDRESS_MAP_START( 6p_main_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x1b4000, 0x1b77ff) AM_READONLY AM_RANGE(0x1b4000, 0x1b77ff) AM_WRITEONLY */ - AM_RANGE(0x1ac000, 0x1b7fff) AM_RAM AM_BASE(&xmen6p_tilemapright) /* right tilemap */ + AM_RANGE(0x1ac000, 0x1b7fff) AM_RAM AM_BASE_MEMBER(xmen_state, xmen6p_tilemapright) /* right tilemap */ /* what are the regions below buffers? (used by hw or software?) */ /* @@ -269,7 +258,8 @@ INPUT_PORTS_END static CUSTOM_INPUT( xmen_frame_r ) { - return xmen_current_frame; + xmen_state *state = (xmen_state *)field->port->machine->driver_data; + return state->current_frame; } static INPUT_PORTS_START( xmen6p ) @@ -308,8 +298,10 @@ INPUT_PORTS_END static INTERRUPT_GEN( xmen_interrupt ) { - if (cpu_getiloops(device) == 0) irq5_line_hold(device); - else irq3_line_hold(device); + if (cpu_getiloops(device) == 0) + irq5_line_hold(device); + else + irq3_line_hold(device); } static STATE_POSTLOAD( xmen_postload ) @@ -319,10 +311,42 @@ static STATE_POSTLOAD( xmen_postload ) static MACHINE_START( xmen ) { - state_save_register_global(machine, sound_curbank); + xmen_state *state = (xmen_state *)machine->driver_data; + UINT8 *ROM = memory_region(machine, "audiocpu"); + + memory_configure_bank(machine, "bank4", 0, 8, &ROM[0x10000], 0x4000); + memory_set_bank(machine, "bank4", 0); + + state->maincpu = devtag_get_device(machine, "maincpu"); + state->audiocpu = devtag_get_device(machine, "audiocpu"); + state->k053246 = devtag_get_device(machine, "k053246"); + state->k053251 = devtag_get_device(machine, "k053251"); + state->k052109 = devtag_get_device(machine, "k052109"); + state->k054539 = devtag_get_device(machine, "k054539"); + state->lscreen = devtag_get_device(machine, "lscreen"); + state->rscreen = devtag_get_device(machine, "rscreen"); + + state_save_register_global(machine, state->sound_curbank); + state_save_register_global(machine, state->sprite_colorbase); + state_save_register_global_array(machine, state->layer_colorbase); + state_save_register_global_array(machine, state->layerpri); state_save_register_postload(machine, xmen_postload, NULL); } +static MACHINE_RESET( xmen ) +{ + xmen_state *state = (xmen_state *)machine->driver_data; + int i; + + for (i = 0; i < 3; i++) + { + state->layerpri[i] = 0; + state->layer_colorbase[i] = 0; + } + + state->sprite_colorbase = 0; + state->sound_curbank = 0; +} static const k052109_interface xmen_k052109_intf = { @@ -344,6 +368,9 @@ static const k053247_interface xmen_k053246_intf = static MACHINE_DRIVER_START( xmen ) + /* driver data */ + MDRV_DRIVER_DATA(xmen_state) + /* basic machine hardware */ MDRV_CPU_ADD("maincpu", M68000, XTAL_16MHz) /* verified on pcb */ MDRV_CPU_PROGRAM_MAP(main_map) @@ -353,6 +380,7 @@ static MACHINE_DRIVER_START( xmen ) MDRV_CPU_PROGRAM_MAP(sound_map) MDRV_MACHINE_START(xmen) + MDRV_MACHINE_RESET(xmen) MDRV_EEPROM_ADD("eeprom", eeprom_intf) @@ -380,15 +408,25 @@ static MACHINE_DRIVER_START( xmen ) MDRV_SOUND_ROUTE(0, "lspeaker", 0.80) MDRV_SOUND_ROUTE(1, "rspeaker", 0.80) - MDRV_SOUND_ADD("konami", K054539, 48000) + MDRV_SOUND_ADD("k054539", K054539, 48000) MDRV_SOUND_ROUTE(0, "lspeaker", 0.80) MDRV_SOUND_ROUTE(1, "rspeaker", 0.80) MACHINE_DRIVER_END -static MACHINE_RESET(xmen6p) +static MACHINE_START( xmen6p ) { - xmen_current_frame = 0x00; + xmen_state *state = (xmen_state *)machine->driver_data; + + MACHINE_START_CALL(xmen); + + state_save_register_global(machine, state->current_frame); +} + +static MACHINE_RESET( xmen6p ) +{ + xmen_state *state = (xmen_state *)machine->driver_data; + state->current_frame = 0x00; } static INTERRUPT_GEN( xmen6p_interrupt ) @@ -404,7 +442,7 @@ static INTERRUPT_GEN( xmen6p_interrupt ) // if (xmen_irqenabled & 0x04) // { irq3_line_hold(device); -// xmen_current_frame = 0x00; +// state->current_frame = 0x00; // } } @@ -422,6 +460,9 @@ static const k053247_interface xmen6p_k053246_intf = static MACHINE_DRIVER_START( xmen6p ) + /* driver data */ + MDRV_DRIVER_DATA(xmen_state) + /* basic machine hardware */ MDRV_CPU_ADD("maincpu", M68000, 16000000) /* ? */ MDRV_CPU_PROGRAM_MAP(6p_main_map) @@ -430,6 +471,7 @@ static MACHINE_DRIVER_START( xmen6p ) MDRV_CPU_ADD("audiocpu", Z80,8000000) /* verified with M1, guessed but accurate */ MDRV_CPU_PROGRAM_MAP(sound_map) + MDRV_MACHINE_START(xmen6p) MDRV_MACHINE_RESET(xmen6p) MDRV_EEPROM_ADD("eeprom", eeprom_intf) @@ -468,7 +510,7 @@ static MACHINE_DRIVER_START( xmen6p ) MDRV_SOUND_ROUTE(0, "lspeaker", 0.80) MDRV_SOUND_ROUTE(1, "rspeaker", 0.80) - MDRV_SOUND_ADD("konami", K054539, 48000) + MDRV_SOUND_ADD("k054539", K054539, 48000) MDRV_SOUND_ROUTE(0, "lspeaker", 0.80) MDRV_SOUND_ROUTE(1, "rspeaker", 0.80) MACHINE_DRIVER_END @@ -551,7 +593,7 @@ ROM_START( xmen ) ROM_LOAD( "065-a12.1h", 0x200000, 0x100000, CRC(321ed07a) SHA1(5b00ed676daeea974bdce6701667cfe573099dad) ) ROM_LOAD( "065-a11.1l", 0x300000, 0x100000, CRC(46da948e) SHA1(168ac9178ee5bad5931557fb549e1237971d7839) ) - ROM_REGION( 0x200000, "konami", 0 ) /* samples for the 054539 */ + ROM_REGION( 0x200000, "k054539", 0 ) /* samples for the 054539 */ ROM_LOAD( "065-a06.1f", 0x000000, 0x200000, CRC(5adbcee0) SHA1(435feda697193bc51db80eba46be474cbbc1de4b) ) ROM_END @@ -576,7 +618,7 @@ ROM_START( xmenj ) ROM_LOAD( "065-a12.1h", 0x200000, 0x100000, CRC(321ed07a) SHA1(5b00ed676daeea974bdce6701667cfe573099dad) ) ROM_LOAD( "065-a11.1l", 0x300000, 0x100000, CRC(46da948e) SHA1(168ac9178ee5bad5931557fb549e1237971d7839) ) - ROM_REGION( 0x200000, "konami", 0 ) /* samples for the 054539 */ + ROM_REGION( 0x200000, "k054539", 0 ) /* samples for the 054539 */ ROM_LOAD( "065-a06.1f", 0x000000, 0x200000, CRC(5adbcee0) SHA1(435feda697193bc51db80eba46be474cbbc1de4b) ) ROM_END @@ -601,7 +643,7 @@ ROM_START( xmene ) ROM_LOAD( "065-a12.1h", 0x200000, 0x100000, CRC(321ed07a) SHA1(5b00ed676daeea974bdce6701667cfe573099dad) ) ROM_LOAD( "065-a11.1l", 0x300000, 0x100000, CRC(46da948e) SHA1(168ac9178ee5bad5931557fb549e1237971d7839) ) - ROM_REGION( 0x200000, "konami", 0 ) /* samples for the 054539 */ + ROM_REGION( 0x200000, "k054539", 0 ) /* samples for the 054539 */ ROM_LOAD( "065-a06.1f", 0x000000, 0x200000, CRC(5adbcee0) SHA1(435feda697193bc51db80eba46be474cbbc1de4b) ) ROM_END @@ -626,7 +668,7 @@ ROM_START( xmen2pe ) ROM_LOAD( "065-a12.1h", 0x200000, 0x100000, CRC(321ed07a) SHA1(5b00ed676daeea974bdce6701667cfe573099dad) ) ROM_LOAD( "065-a11.1l", 0x300000, 0x100000, CRC(46da948e) SHA1(168ac9178ee5bad5931557fb549e1237971d7839) ) - ROM_REGION( 0x200000, "konami", 0 ) /* samples for the 054539 */ + ROM_REGION( 0x200000, "k054539", 0 ) /* samples for the 054539 */ ROM_LOAD( "065-a06.1f", 0x000000, 0x200000, CRC(5adbcee0) SHA1(435feda697193bc51db80eba46be474cbbc1de4b) ) ROM_END @@ -651,7 +693,7 @@ ROM_START( xmen2pa ) ROM_LOAD( "065-a12.1h", 0x200000, 0x100000, CRC(321ed07a) SHA1(5b00ed676daeea974bdce6701667cfe573099dad) ) ROM_LOAD( "065-a11.1l", 0x300000, 0x100000, CRC(46da948e) SHA1(168ac9178ee5bad5931557fb549e1237971d7839) ) - ROM_REGION( 0x200000, "konami", 0 ) /* samples for the 054539 */ + ROM_REGION( 0x200000, "k054539", 0 ) /* samples for the 054539 */ ROM_LOAD( "065-a06.1f", 0x000000, 0x200000, CRC(5adbcee0) SHA1(435feda697193bc51db80eba46be474cbbc1de4b) ) ROM_END @@ -676,7 +718,7 @@ ROM_START( xmen2pj ) ROM_LOAD( "065-a12.1h", 0x200000, 0x100000, CRC(321ed07a) SHA1(5b00ed676daeea974bdce6701667cfe573099dad) ) ROM_LOAD( "065-a11.1l", 0x300000, 0x100000, CRC(46da948e) SHA1(168ac9178ee5bad5931557fb549e1237971d7839) ) - ROM_REGION( 0x200000, "konami", 0 ) /* samples for the 054539 */ + ROM_REGION( 0x200000, "k054539", 0 ) /* samples for the 054539 */ ROM_LOAD( "065-a06.1f", 0x000000, 0x200000, CRC(5adbcee0) SHA1(435feda697193bc51db80eba46be474cbbc1de4b) ) ROM_END @@ -755,7 +797,7 @@ ROM_START( xmen6p ) ROM_LOAD( "065-a12.22h", 0x200000, 0x100000, CRC(321ed07a) SHA1(5b00ed676daeea974bdce6701667cfe573099dad) ) ROM_LOAD( "065-a11.22l", 0x300000, 0x100000, CRC(46da948e) SHA1(168ac9178ee5bad5931557fb549e1237971d7839) ) - ROM_REGION( 0x200000, "konami", 0 ) /* samples for the 054539 */ + ROM_REGION( 0x200000, "k054539", 0 ) /* samples for the 054539 */ ROM_LOAD( "065-a06.1d", 0x000000, 0x200000, CRC(5adbcee0) SHA1(435feda697193bc51db80eba46be474cbbc1de4b) ) ROM_END @@ -781,16 +823,16 @@ ROM_START( xmen6pu ) ROM_LOAD( "065-a12.22h", 0x200000, 0x100000, CRC(321ed07a) SHA1(5b00ed676daeea974bdce6701667cfe573099dad) ) ROM_LOAD( "065-a11.22l", 0x300000, 0x100000, CRC(46da948e) SHA1(168ac9178ee5bad5931557fb549e1237971d7839) ) - ROM_REGION( 0x200000, "konami", 0 ) /* samples for the 054539 */ + ROM_REGION( 0x200000, "k054539", 0 ) /* samples for the 054539 */ ROM_LOAD( "065-a06.1d", 0x000000, 0x200000, CRC(5adbcee0) SHA1(435feda697193bc51db80eba46be474cbbc1de4b) ) ROM_END -GAME( 1992, xmen, 0, xmen, xmen, 0, ROT0, "Konami", "X-Men (4 Players ver UBB)", 0 ) /* Second "version" letter denotes players, A=2 players, B=4 players, C=6 players ??? */ -GAME( 1992, xmenj, xmen, xmen, xmen, 0, ROT0, "Konami", "X-Men (4 Players ver JBA)", 0 ) -GAME( 1992, xmene, xmen, xmen, xmen, 0, ROT0, "Konami", "X-Men (4 Players ver EBA)", 0 ) -GAME( 1992, xmen2pe, xmen, xmen, xmen2p, 0, ROT0, "Konami", "X-Men (2 Players ver EAA)", 0 ) -GAME( 1992, xmen2pa, xmen, xmen, xmen2p, 0, ROT0, "Konami", "X-Men (2 Players ver AAA)", 0 ) -GAME( 1992, xmen2pj, xmen, xmen, xmen2p, 0, ROT0, "Konami", "X-Men (2 Players ver JAA)", 0 ) +GAME( 1992, xmen, 0, xmen, xmen, 0, ROT0, "Konami", "X-Men (4 Players ver UBB)", GAME_SUPPORTS_SAVE ) /* Second "version" letter denotes players, A=2 players, B=4 players, C=6 players ??? */ +GAME( 1992, xmenj, xmen, xmen, xmen, 0, ROT0, "Konami", "X-Men (4 Players ver JBA)", GAME_SUPPORTS_SAVE ) +GAME( 1992, xmene, xmen, xmen, xmen, 0, ROT0, "Konami", "X-Men (4 Players ver EBA)", GAME_SUPPORTS_SAVE ) +GAME( 1992, xmen2pe, xmen, xmen, xmen2p, 0, ROT0, "Konami", "X-Men (2 Players ver EAA)", GAME_SUPPORTS_SAVE ) +GAME( 1992, xmen2pa, xmen, xmen, xmen2p, 0, ROT0, "Konami", "X-Men (2 Players ver AAA)", GAME_SUPPORTS_SAVE ) +GAME( 1992, xmen2pj, xmen, xmen, xmen2p, 0, ROT0, "Konami", "X-Men (2 Players ver JAA)", GAME_SUPPORTS_SAVE ) -GAME( 1992, xmen6p, xmen, xmen6p,xmen6p, 0, ROT0, "Konami", "X-Men (6 Players ver ECB)", GAME_IMPERFECT_GRAPHICS ) -GAME( 1992, xmen6pu, xmen, xmen6p,xmen6p, 0, ROT0, "Konami", "X-Men (6 Players ver UCB)", GAME_IMPERFECT_GRAPHICS ) +GAME( 1992, xmen6p, xmen, xmen6p, xmen6p, 0, ROT0, "Konami", "X-Men (6 Players ver ECB)", GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE ) +GAME( 1992, xmen6pu, xmen, xmen6p, xmen6p, 0, ROT0, "Konami", "X-Men (6 Players ver UCB)", GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE ) diff --git a/src/mame/includes/ajax.h b/src/mame/includes/ajax.h index 874e8cd33e4..09473fee379 100644 --- a/src/mame/includes/ajax.h +++ b/src/mame/includes/ajax.h @@ -1,3 +1,29 @@ + +typedef struct _ajax_state ajax_state; +struct _ajax_state +{ + /* memory pointers */ +// UINT8 * paletteram; // currently this uses generic palette handling + + /* video-related */ + int layer_colorbase[3], sprite_colorbase, zoom_colorbase; + UINT8 priority; + + /* misc */ + int firq_enable; + + /* devices */ + const device_config *maincpu; + const device_config *audiocpu; + const device_config *subcpu; + const device_config *k007232_1; + const device_config *k007232_2; + const device_config *k052109; + const device_config *k051960; + const device_config *k051316; +}; + + /*----------- defined in machine/ajax.c -----------*/ WRITE8_HANDLER( ajax_bankswitch_2_w ); @@ -7,10 +33,11 @@ MACHINE_START( ajax ); MACHINE_RESET( ajax ); INTERRUPT_GEN( ajax_interrupt ); - /*----------- defined in video/ajax.c -----------*/ -extern UINT8 ajax_priority; - VIDEO_START( ajax ); VIDEO_UPDATE( ajax ); + +extern void ajax_tile_callback(running_machine *machine, int layer,int bank,int *code,int *color,int *flags,int *priority); +extern void ajax_sprite_callback(running_machine *machine, int *code,int *color,int *priority,int *shadow); +extern void ajax_zoom_callback(running_machine *machine, int *code,int *color,int *flags); diff --git a/src/mame/includes/aliens.h b/src/mame/includes/aliens.h new file mode 100644 index 00000000000..65b30d782d3 --- /dev/null +++ b/src/mame/includes/aliens.h @@ -0,0 +1,34 @@ +/************************************************************************* + + Aliens + +*************************************************************************/ + +typedef struct _aliens_state aliens_state; +struct _aliens_state +{ + /* memory pointers */ + UINT8 * ram; +// UINT8 * paletteram; // currently this uses generic palette handling + + /* video-related */ + int layer_colorbase[3], sprite_colorbase; + + /* misc */ + int palette_selected; + + /* devices */ + const device_config *maincpu; + const device_config *audiocpu; + const device_config *k007232; + const device_config *k052109; + const device_config *k051960; +}; + +/*----------- defined in video/aliens.c -----------*/ + +extern void aliens_tile_callback(running_machine *machine, int layer,int bank,int *code,int *color, int *flags, int *priority); +extern void aliens_sprite_callback(running_machine *machine, int *code,int *color,int *priority_mask,int *shadow); + +VIDEO_START( aliens ); +VIDEO_UPDATE( aliens ); diff --git a/src/mame/includes/asterix.h b/src/mame/includes/asterix.h new file mode 100644 index 00000000000..8d8c3495a20 --- /dev/null +++ b/src/mame/includes/asterix.h @@ -0,0 +1,41 @@ +/************************************************************************* + + Asterix + +*************************************************************************/ + +typedef struct _asterix_state asterix_state; +struct _asterix_state +{ + /* memory pointers */ +// UINT16 * paletteram; // currently this uses generic palette handling + + /* video-related */ + int sprite_colorbase; + int layer_colorbase[4], layerpri[3]; + UINT16 spritebank; + int tilebanks[4]; + int spritebanks[4]; + + /* misc */ + UINT8 cur_control2; + UINT16 prot[2]; + + /* devices */ + const device_config *maincpu; + const device_config *audiocpu; + const device_config *k053260; + const device_config *k056832; + const device_config *k053244; + const device_config *k053251; +}; + + + +/*----------- defined in video/asterix.c -----------*/ + +VIDEO_UPDATE( asterix ); +WRITE16_HANDLER( asterix_spritebank_w ); + +extern void asterix_tile_callback(running_machine *machine, int layer, int *code, int *color, int *flags); +extern void asterix_sprite_callback(running_machine *machine, int *code, int *color, int *priority_mask); diff --git a/src/mame/includes/bishi.h b/src/mame/includes/bishi.h new file mode 100644 index 00000000000..04f07985a0b --- /dev/null +++ b/src/mame/includes/bishi.h @@ -0,0 +1,37 @@ +/************************************************************************* + + Bishi Bashi Champ Mini Game Senshuken + +*************************************************************************/ + +#define CPU_CLOCK (XTAL_24MHz / 2) /* 68000 clock */ +#define SOUND_CLOCK XTAL_16_9344MHz /* YMZ280 clock */ + +typedef struct _bishi_state bishi_state; +struct _bishi_state +{ + /* memory pointers */ + UINT8 * ram; +// UINT8 * paletteram; // currently this uses generic palette handling + + /* video-related */ + int layer_colorbase[4]; + + /* misc */ + UINT16 cur_control, cur_control2; + + /* devices */ + const device_config *maincpu; + const device_config *audiocpu; + const device_config *k007232; + const device_config *k056832; + const device_config *k054338; + const device_config *k055555; +}; + +/*----------- defined in video/bishi.c -----------*/ + +extern void bishi_tile_callback(running_machine *machine, int layer, int *code, int *color, int *flags); + +VIDEO_START(bishi); +VIDEO_UPDATE(bishi); diff --git a/src/mame/includes/blockhl.h b/src/mame/includes/blockhl.h new file mode 100644 index 00000000000..1a61b9f342d --- /dev/null +++ b/src/mame/includes/blockhl.h @@ -0,0 +1,34 @@ +/************************************************************************* + + Block Hole + +*************************************************************************/ + +typedef struct _blockhl_state blockhl_state; +struct _blockhl_state +{ + /* memory pointers */ + UINT8 * ram; +// UINT8 * paletteram; // currently this uses generic palette handling + + /* video-related */ + int layer_colorbase[3], sprite_colorbase; + + /* misc */ + int palette_selected; + int rombank; + + /* devices */ + const device_config *maincpu; + const device_config *audiocpu; + const device_config *k052109; + const device_config *k051960; +}; + +/*----------- defined in video/blockhl.c -----------*/ + +extern void blockhl_tile_callback(running_machine *machine, int layer,int bank,int *code,int *color, int *flags, int *priority); +extern void blockhl_sprite_callback(running_machine *machine, int *code,int *color,int *priority,int *shadow); + +VIDEO_START( blockhl ); +VIDEO_UPDATE( blockhl ); diff --git a/src/mame/includes/bottom9.h b/src/mame/includes/bottom9.h new file mode 100644 index 00000000000..8fbe72aa280 --- /dev/null +++ b/src/mame/includes/bottom9.h @@ -0,0 +1,38 @@ +/************************************************************************* + + Bottom of the Ninth + +*************************************************************************/ + +typedef struct _bottom9_state bottom9_state; +struct _bottom9_state +{ + /* memory pointers */ +// UINT8 * paletteram; // currently this uses generic palette handling + + /* video-related */ + int layer_colorbase[3], sprite_colorbase, zoom_colorbase; + + /* misc */ + int video_enable; + int zoomreadroms, k052109_selected; + int nmienable; + + /* devices */ + const device_config *maincpu; + const device_config *audiocpu; + const device_config *k007232_1; + const device_config *k007232_2; + const device_config *k052109; + const device_config *k051960; + const device_config *k051316; +}; + +/*----------- defined in video/bottom9.c -----------*/ + +extern void bottom9_tile_callback(running_machine *machine, int layer,int bank,int *code,int *color,int *flags,int *priority); +extern void bottom9_sprite_callback(running_machine *machine, int *code,int *color,int *priority,int *shadow); +extern void bottom9_zoom_callback(running_machine *machine, int *code,int *color,int *flags); + +VIDEO_START( bottom9 ); +VIDEO_UPDATE( bottom9 ); diff --git a/src/mame/includes/chqflag.h b/src/mame/includes/chqflag.h new file mode 100644 index 00000000000..99e2c6b7a97 --- /dev/null +++ b/src/mame/includes/chqflag.h @@ -0,0 +1,40 @@ +/************************************************************************* + + Chequered Flag + +*************************************************************************/ + +typedef struct _chqflag_state chqflag_state; +struct _chqflag_state +{ + /* memory pointers */ + UINT8 * ram; +// UINT8 * paletteram; // currently this uses generic palette handling + + /* video-related */ + int zoom_colorbase[2], sprite_colorbase; + + /* misc */ + int k051316_readroms; + int last_vreg; + int analog_ctrl; + int accel, wheel; + + /* devices */ + const device_config *maincpu; + const device_config *audiocpu; + const device_config *k007232_1; + const device_config *k007232_2; + const device_config *k051960; + const device_config *k051316_1; + const device_config *k051316_2; +}; + +/*----------- defined in video/chqflag.c -----------*/ + +extern void chqflag_sprite_callback(running_machine *machine, int *code,int *color,int *priority,int *shadow); +extern void chqflag_zoom_callback_0(running_machine *machine, int *code,int *color,int *flags); +extern void chqflag_zoom_callback_1(running_machine *machine, int *code,int *color,int *flags); + +VIDEO_START( chqflag ); +VIDEO_UPDATE( chqflag ); diff --git a/src/mame/includes/crimfght.h b/src/mame/includes/crimfght.h new file mode 100644 index 00000000000..55fd6b47264 --- /dev/null +++ b/src/mame/includes/crimfght.h @@ -0,0 +1,30 @@ +/************************************************************************* + + Crime Fighters + +*************************************************************************/ + +typedef struct _crimfght_state crimfght_state; +struct _crimfght_state +{ + /* memory pointers */ +// UINT8 * paletteram; // currently this uses generic palette handling + + /* video-related */ + int layer_colorbase[3], sprite_colorbase; + + /* devices */ + const device_config *maincpu; + const device_config *audiocpu; + const device_config *k007232; + const device_config *k052109; + const device_config *k051960; +}; + +/*----------- defined in video/crimfght.c -----------*/ + +extern void crimfght_tile_callback(running_machine *machine, int layer,int bank,int *code,int *color,int *flags,int *priority); +extern void crimfght_sprite_callback(running_machine *machine, int *code,int *color,int *priority,int *shadow); + +VIDEO_START( crimfght ); +VIDEO_UPDATE( crimfght ); diff --git a/src/mame/includes/dbz.h b/src/mame/includes/dbz.h new file mode 100644 index 00000000000..43a3dca295b --- /dev/null +++ b/src/mame/includes/dbz.h @@ -0,0 +1,42 @@ +/************************************************************************* + + Dragonball Z + +*************************************************************************/ + +typedef struct _dbz_state dbz_state; +struct _dbz_state +{ + /* memory pointers */ + UINT16 * bg1_videoram; + UINT16 * bg2_videoram; +// UINT16 * paletteram; // currently this uses generic palette handling + + /* video-related */ + tilemap_t *bg1_tilemap, *bg2_tilemap; + int layer_colorbase[6], layerpri[5], sprite_colorbase; + + /* misc */ + int control; + + /* devices */ + const device_config *maincpu; + const device_config *audiocpu; + const device_config *k053246; + const device_config *k053251; + const device_config *k056832; + const device_config *k053936_1; + const device_config *k053936_2; +}; + + +/*----------- defined in video/dbz.c -----------*/ + +extern void dbz_sprite_callback(running_machine *machine, int *code, int *color, int *priority_mask); +extern void dbz_tile_callback(running_machine *machine, int layer, int *code, int *color, int *flags); + +WRITE16_HANDLER(dbz_bg1_videoram_w); +WRITE16_HANDLER(dbz_bg2_videoram_w); + +VIDEO_START(dbz); +VIDEO_UPDATE(dbz); diff --git a/src/mame/includes/gbusters.h b/src/mame/includes/gbusters.h new file mode 100644 index 00000000000..a8ce2a5e8d2 --- /dev/null +++ b/src/mame/includes/gbusters.h @@ -0,0 +1,35 @@ +/************************************************************************* + + Gangbusters + +*************************************************************************/ + +typedef struct _gbusters_state gbusters_state; +struct _gbusters_state +{ + /* memory pointers */ + UINT8 * ram; +// UINT8 * paletteram; // currently this uses generic palette handling + + /* video-related */ + int layer_colorbase[3], sprite_colorbase; + + /* misc */ + int palette_selected; + int priority; + + /* devices */ + const device_config *maincpu; + const device_config *audiocpu; + const device_config *k007232; + const device_config *k052109; + const device_config *k051960; +}; + +/*----------- defined in video/gbusters.c -----------*/ + +extern void gbusters_tile_callback(running_machine *machine, int layer,int bank,int *code,int *color,int *flags, int *priority); +extern void gbusters_sprite_callback(running_machine *machine, int *code,int *color,int *priority,int *shadow); + +VIDEO_START( gbusters ); +VIDEO_UPDATE( gbusters ); diff --git a/src/mame/includes/gijoe.h b/src/mame/includes/gijoe.h new file mode 100644 index 00000000000..ecd21a45779 --- /dev/null +++ b/src/mame/includes/gijoe.h @@ -0,0 +1,39 @@ +/************************************************************************* + + GI Joe + +*************************************************************************/ + +typedef struct _gijoe_state gijoe_state; +struct _gijoe_state +{ + /* memory pointers */ + UINT16 * workram; + UINT16 * spriteram; +// UINT16 * paletteram; // currently this uses generic palette handling + + /* video-related */ + int avac_bits[4], avac_occupancy[4]; + int layer_colorbase[4], layer_pri[4]; + int avac_vrc, sprite_colorbase; + + /* misc */ + UINT16 cur_control2; + emu_timer *dmadelay_timer; + + /* devices */ + const device_config *maincpu; + const device_config *audiocpu; + const device_config *k054539; + const device_config *k056832; + const device_config *k053246; + const device_config *k053251; +}; + +/*----------- defined in video/gijoe.c -----------*/ + +extern void gijoe_sprite_callback(running_machine *machine, int *code, int *color, int *priority_mask); +extern void gijoe_tile_callback(running_machine *machine, int layer, int *code, int *color, int *flags); + +VIDEO_START( gijoe ); +VIDEO_UPDATE( gijoe ); diff --git a/src/mame/includes/lethal.h b/src/mame/includes/lethal.h new file mode 100644 index 00000000000..1dfd35d658b --- /dev/null +++ b/src/mame/includes/lethal.h @@ -0,0 +1,36 @@ +/************************************************************************* + + Lethal Enforcers + +*************************************************************************/ + +typedef struct _lethal_state lethal_state; +struct _lethal_state +{ + /* memory pointers */ +// UINT8 * paletteram; // currently this uses generic palette handling + + /* video-related */ + int layer_colorbase[4], sprite_colorbase; + + /* misc */ + UINT8 cur_control2; + + /* devices */ + const device_config *maincpu; + const device_config *audiocpu; + const device_config *k054539; + const device_config *k056832; + const device_config *k053244; + const device_config *k054000; +}; + +/*----------- defined in video/lethal.c -----------*/ + +extern void lethalen_sprite_callback(running_machine *machine, int *code, int *color, int *priority_mask); +extern void lethalen_tile_callback(running_machine *machine, int layer, int *code, int *color, int *flags); + +WRITE8_HANDLER(lethalen_palette_control); + +VIDEO_START(lethalen); +VIDEO_UPDATE(lethalen); diff --git a/src/mame/includes/mainevt.h b/src/mame/includes/mainevt.h new file mode 100644 index 00000000000..6c409bc0821 --- /dev/null +++ b/src/mame/includes/mainevt.h @@ -0,0 +1,39 @@ +/************************************************************************* + + The Main Event / Devastators + +*************************************************************************/ + +typedef struct _mainevt_state mainevt_state; +struct _mainevt_state +{ + /* memory pointers */ +// UINT8 * paletteram; // currently this uses generic palette handling + + /* video-related */ + int layer_colorbase[3], sprite_colorbase; + + /* misc */ + int nmi_enable; + + /* devices */ + const device_config *maincpu; + const device_config *audiocpu; + const device_config *upd; + const device_config *k007232; + const device_config *k052109; + const device_config *k051960; +}; + +/*----------- defined in video/mainevt.c -----------*/ + +extern void mainevt_tile_callback(running_machine *machine, int layer,int bank,int *code,int *color,int *flags,int *priority); +extern void dv_tile_callback(running_machine *machine, int layer,int bank,int *code,int *color,int *flags,int *priority); +extern void mainevt_sprite_callback(running_machine *machine, int *code,int *color,int *priority_mask,int *shadow); +extern void dv_sprite_callback(running_machine *machine, int *code,int *color,int *priority,int *shadow); + +VIDEO_START( mainevt ); +VIDEO_START( dv ); + +VIDEO_UPDATE( mainevt ); +VIDEO_UPDATE( dv ); diff --git a/src/mame/includes/moo.h b/src/mame/includes/moo.h new file mode 100644 index 00000000000..28986e45ef7 --- /dev/null +++ b/src/mame/includes/moo.h @@ -0,0 +1,43 @@ +/************************************************************************* + + Wild West C.O.W.boys of Moo Mesa / Bucky O'Hare + +*************************************************************************/ + +typedef struct _moo_state moo_state; +struct _moo_state +{ + /* memory pointers */ + UINT16 * workram; + UINT16 * spriteram; +// UINT16 * paletteram; // currently this uses generic palette handling + + /* video-related */ + int sprite_colorbase; + int layer_colorbase[4], layerpri[3]; + int alpha_enabled; + + /* misc */ + int game_type; + UINT16 protram[16]; + UINT16 cur_control2; + + /* devices */ + const device_config *maincpu; + const device_config *audiocpu; + const device_config *k054539; + const device_config *k053246; + const device_config *k053251; + const device_config *k056832; + const device_config *k054338; +}; + + + +/*----------- defined in video/moo.c -----------*/ + +extern void moo_tile_callback(running_machine *machine, int layer, int *code, int *color, int *flags); +extern void moo_sprite_callback(running_machine *machine, int *code, int *color, int *priority_mask); + +VIDEO_START(moo); +VIDEO_UPDATE(moo); diff --git a/src/mame/includes/overdriv.h b/src/mame/includes/overdriv.h new file mode 100644 index 00000000000..d1e3c4435b2 --- /dev/null +++ b/src/mame/includes/overdriv.h @@ -0,0 +1,37 @@ +/************************************************************************* + + Over Drive + +*************************************************************************/ + +typedef struct _overdriv_state overdriv_state; +struct _overdriv_state +{ + /* memory pointers */ +// UINT16 * paletteram; // currently this uses generic palette handling + + /* video-related */ + int zoom_colorbase[2], road_colorbase[2], sprite_colorbase; + + /* misc */ + UINT16 cpuB_ctrl; + + /* devices */ + const device_config *maincpu; + const device_config *subcpu; + const device_config *audiocpu; + const device_config *k053260_1; + const device_config *k053260_2; + const device_config *k051316_1; + const device_config *k051316_2; + const device_config *k053246; + const device_config *k053251; +}; + +/*----------- defined in video/overdriv.c -----------*/ + +extern void overdriv_sprite_callback(running_machine *machine, int *code,int *color,int *priority_mask); +extern void overdriv_zoom_callback_0(running_machine *machine, int *code,int *color,int *flags); +extern void overdriv_zoom_callback_1(running_machine *machine, int *code,int *color,int *flags); + +VIDEO_UPDATE( overdriv ); diff --git a/src/mame/includes/parodius.h b/src/mame/includes/parodius.h new file mode 100644 index 00000000000..496f4bd09eb --- /dev/null +++ b/src/mame/includes/parodius.h @@ -0,0 +1,36 @@ +/************************************************************************* + + Parodius + +*************************************************************************/ + +typedef struct _parodius_state parodius_state; +struct _parodius_state +{ + /* memory pointers */ + UINT8 * ram; +// UINT8 * paletteram; // currently this uses generic palette handling + + /* video-related */ + int layer_colorbase[3], sprite_colorbase; + int layerpri[3]; + + /* misc */ + int videobank; + //int nmi_enabled; + + /* devices */ + const device_config *maincpu; + const device_config *audiocpu; + const device_config *k053260; + const device_config *k052109; + const device_config *k053245; + const device_config *k053251; +}; + +/*----------- defined in video/parodius.c -----------*/ + +extern void parodius_tile_callback(running_machine *machine, int layer,int bank,int *code,int *color,int *flags,int *priority); +extern void parodius_sprite_callback(running_machine *machine, int *code,int *color,int *priority_mask); + +VIDEO_UPDATE( parodius ); diff --git a/src/mame/includes/rollerg.h b/src/mame/includes/rollerg.h new file mode 100644 index 00000000000..17d661eca0d --- /dev/null +++ b/src/mame/includes/rollerg.h @@ -0,0 +1,33 @@ +/************************************************************************* + + Rollergames + +*************************************************************************/ + +typedef struct _rollerg_state rollerg_state; +struct _rollerg_state +{ + /* memory pointers */ +// UINT8 * paletteram; // currently this uses generic palette handling + + /* video-related */ + int sprite_colorbase, zoom_colorbase; + + /* misc */ + int readzoomroms; + + /* devices */ + const device_config *maincpu; + const device_config *audiocpu; + const device_config *k053260; + const device_config *k053244; + const device_config *k051316; +}; + +/*----------- defined in video/rollerg.c -----------*/ + +extern void rollerg_sprite_callback(running_machine *machine, int *code,int *color,int *priority_mask); +extern void rollerg_zoom_callback(running_machine *machine, int *code,int *color,int *flags); + +VIDEO_START( rollerg ); +VIDEO_UPDATE( rollerg ); diff --git a/src/mame/includes/rungun.h b/src/mame/includes/rungun.h new file mode 100644 index 00000000000..2e6aaac06de --- /dev/null +++ b/src/mame/includes/rungun.h @@ -0,0 +1,46 @@ +/************************************************************************* + + Run and Gun / Slam Dunk + +*************************************************************************/ + +typedef struct _rungun_state rungun_state; +struct _rungun_state +{ + /* memory pointers */ + UINT16 * _936_videoram; +// UINT16 * paletteram; // currently this uses generic palette handling + + /* video-related */ + tilemap_t *ttl_tilemap, *_936_tilemap; + UINT16 ttl_vram[0x1000]; + int ttl_gfx_index, sprite_colorbase; + + /* misc */ + UINT16 sysreg[0x20]; + int z80_control; + int sound_status; + + /* devices */ + const device_config *maincpu; + const device_config *audiocpu; + const device_config *k054539_1; + const device_config *k054539_2; + const device_config *k053936; + const device_config *k055673; + const device_config *k053252; +}; + + + + +/*----------- defined in video/rungun.c -----------*/ + +extern void rng_sprite_callback(running_machine *machine, int *code, int *color, int *priority_mask); + +READ16_HANDLER( rng_ttl_ram_r ); +WRITE16_HANDLER( rng_ttl_ram_w ); +WRITE16_HANDLER( rng_936_videoram_w ); + +VIDEO_START( rng ); +VIDEO_UPDATE( rng ); diff --git a/src/mame/includes/simpsons.h b/src/mame/includes/simpsons.h index b36862c2091..3a1f3c9cc90 100644 --- a/src/mame/includes/simpsons.h +++ b/src/mame/includes/simpsons.h @@ -1,17 +1,42 @@ -/*----------- defined in machine/simpsons.c -----------*/ -extern int simpsons_firq_enabled; +typedef struct _simpsons_state simpsons_state; +struct _simpsons_state +{ + /* memory pointers */ + UINT8 * ram; + UINT8 * xtraram; + UINT16 * spriteram; +// UINT8 * paletteram; // currently this uses generic palette handling + + /* video-related */ + int sprite_colorbase, layer_colorbase[3]; + int layerpri[3]; + + /* misc */ + int firq_enabled; + int video_bank; + //int nmi_enabled; + + /* devices */ + const device_config *maincpu; + const device_config *audiocpu; + const device_config *k053260; + const device_config *k052109; + const device_config *k053246; + const device_config *k053251; +}; + +/*----------- defined in machine/simpsons.c -----------*/ WRITE8_HANDLER( simpsons_eeprom_w ); WRITE8_HANDLER( simpsons_coin_counter_w ); READ8_HANDLER( simpsons_sound_interrupt_r ); READ8_DEVICE_HANDLER( simpsons_sound_r ); MACHINE_RESET( simpsons ); +MACHINE_START( simpsons ); /*----------- defined in video/simpsons.c -----------*/ -extern UINT8 *simpsons_xtraram; - void simpsons_video_banking( running_machine *machine, int select ); VIDEO_UPDATE( simpsons ); diff --git a/src/mame/includes/spy.h b/src/mame/includes/spy.h new file mode 100644 index 00000000000..4ca590c61d4 --- /dev/null +++ b/src/mame/includes/spy.h @@ -0,0 +1,39 @@ +/************************************************************************* + + S.P.Y. + +*************************************************************************/ + +typedef struct _spy_state spy_state; +struct _spy_state +{ + /* memory pointers */ + UINT8 * ram; + UINT8 * pmcram; +// UINT8 * paletteram; // currently this uses generic palette handling + + /* video-related */ + int layer_colorbase[3], sprite_colorbase; + + /* misc */ + int rambank, pmcbank; + int video_enable; + int old_3f90; + + /* devices */ + const device_config *maincpu; + const device_config *audiocpu; + const device_config *k007232_1; + const device_config *k007232_2; + const device_config *k052109; + const device_config *k051960; +}; + + +/*----------- defined in video/spy.c -----------*/ + +extern void spy_tile_callback(running_machine *machine, int layer,int bank,int *code,int *color,int *flags,int *priority); +extern void spy_sprite_callback(running_machine *machine, int *code,int *color,int *priority_mask,int *shadow); + +VIDEO_START( spy ); +VIDEO_UPDATE( spy ); diff --git a/src/mame/includes/surpratk.h b/src/mame/includes/surpratk.h new file mode 100644 index 00000000000..dd91aa5a139 --- /dev/null +++ b/src/mame/includes/surpratk.h @@ -0,0 +1,33 @@ +/************************************************************************* + + Surprise Attack + +*************************************************************************/ + +typedef struct _surpratk_state surpratk_state; +struct _surpratk_state +{ + /* memory pointers */ + UINT8 * ram; +// UINT8 * paletteram; // currently this uses generic palette handling + + /* video-related */ + int layer_colorbase[3], sprite_colorbase; + int layerpri[3]; + + /* misc */ + int videobank; + + /* devices */ + const device_config *maincpu; + const device_config *k052109; + const device_config *k053244; + const device_config *k053251; +}; + +/*----------- defined in video/surpratk.c -----------*/ + +extern void surpratk_tile_callback(running_machine *machine, int layer,int bank,int *code,int *color,int *flags,int *priority); +extern void surpratk_sprite_callback(running_machine *machine, int *code,int *color,int *priority_mask); + +VIDEO_UPDATE( surpratk ); diff --git a/src/mame/includes/tail2nos.h b/src/mame/includes/tail2nos.h new file mode 100644 index 00000000000..528ce7ea4df --- /dev/null +++ b/src/mame/includes/tail2nos.h @@ -0,0 +1,38 @@ +/************************************************************************* + + Tail to Nose / Super Formula + +*************************************************************************/ + +typedef struct _tail2nos_state tail2nos_state; +struct _tail2nos_state +{ + /* memory pointers */ + UINT16 * bgvideoram; + UINT16 * spriteram; + UINT16 * zoomdata; +// UINT16 * paletteram; // currently this uses generic palette handling + size_t spriteram_size; + + /* video-related */ + tilemap_t *bg_tilemap; + int charbank, charpalette, video_enable; + + /* devices */ + const device_config *maincpu; + const device_config *audiocpu; + const device_config *k051316; +}; + + +/*----------- defined in video/tail2nos.c -----------*/ + +extern void tail2nos_zoom_callback(running_machine *machine, int *code,int *color,int *flags); + +WRITE16_HANDLER( tail2nos_bgvideoram_w ); +READ16_HANDLER( tail2nos_zoomdata_r ); +WRITE16_HANDLER( tail2nos_zoomdata_w ); +WRITE16_HANDLER( tail2nos_gfxbank_w ); + +VIDEO_START( tail2nos ); +VIDEO_UPDATE( tail2nos ); diff --git a/src/mame/includes/thunderx.h b/src/mame/includes/thunderx.h new file mode 100644 index 00000000000..8532b05f6a1 --- /dev/null +++ b/src/mame/includes/thunderx.h @@ -0,0 +1,39 @@ +/************************************************************************* + + Super Contra / Thunder Cross + +*************************************************************************/ + +typedef struct _thunderx_state thunderx_state; +struct _thunderx_state +{ + /* memory pointers */ + UINT8 * ram; + UINT8 * pmcram; +// UINT8 * paletteram; // currently this uses generic palette handling + + /* video-related */ + int layer_colorbase[3], sprite_colorbase; + + /* misc */ + int priority; + UINT8 _1f98_data; + int palette_selected; + int rambank, pmcbank; + + /* devices */ + const device_config *maincpu; + const device_config *audiocpu; + const device_config *k007232; + const device_config *k052109; + const device_config *k051960; +}; + + +/*----------- defined in video/thunderx.c -----------*/ + +extern void thunderx_tile_callback(running_machine *machine, int layer,int bank,int *code,int *color,int *flags,int *priority); +extern void thunderx_sprite_callback(running_machine *machine, int *code,int *color,int *priority_mask,int *shadow); + +VIDEO_START( scontra ); +VIDEO_UPDATE( scontra ); diff --git a/src/mame/includes/tmnt.h b/src/mame/includes/tmnt.h index 64a6f3caeb4..f8b24915b5d 100644 --- a/src/mame/includes/tmnt.h +++ b/src/mame/includes/tmnt.h @@ -1,5 +1,66 @@ + +typedef struct _tmnt_state tmnt_state; +struct _tmnt_state +{ + /* memory pointers */ + INT16 * sampledata; + UINT16 * tmnt2_1c0800; + UINT16 * sunset_104000; + UINT16 * tmnt2_rom; +// UINT16 * paletteram; // currently this uses generic palette handling +// UINT8 * nvram; // currently cuebrick uses generic nvram handling +// UINT8 * cuebrick_nvram; + + /* video-related */ + int layer_colorbase[3], sprite_colorbase; + int layerpri[3]; + int sorted_layer[3]; // this might not be necessary, but tmnt2 uses it in a strange way... + + tilemap_t *roz_tilemap; + int glfgreat_roz_rom_bank, glfgreat_roz_char_bank, glfgreat_roz_rom_mode; + int glfgreat_pixel; + int prmrsocr_sprite_bank; + int blswhstl_rombank; + int tmnt_priorityflag; + int lastdim, lasten, dim_c, dim_v; /* lgtnfght, ssriders, tmnt2 only */ + + /* misc */ + int tmnt_soundlatch; + int cuebrick_snd_irqlatch, cuebrick_nvram_bank; + int toggle, last; + + /* devices */ + const device_config *maincpu; + const device_config *audiocpu; + const device_config *k007232; + const device_config *k053260; + const device_config *k054539; + const device_config *k052109; + const device_config *k051960; + const device_config *k053245; + const device_config *k053251; + const device_config *k053936; + const device_config *k054000; + const device_config *upd; + const device_config *samples; +}; + + /*----------- defined in video/tmnt.c -----------*/ +extern void mia_tile_callback(running_machine *machine, int layer,int bank,int *code,int *color,int *flags,int *priority); +extern void cuebrick_tile_callback(running_machine *machine, int layer,int bank,int *code,int *color,int *flags,int *priority); +extern void tmnt_tile_callback(running_machine *machine, int layer,int bank,int *code,int *color,int *flags,int *priority); +extern void ssbl_tile_callback(running_machine *machine, int layer,int bank,int *code,int *color,int *flags,int *priority); +extern void blswhstl_tile_callback(running_machine *machine, int layer,int bank,int *code,int *color,int *flags,int *priority); +extern void mia_sprite_callback(running_machine *machine, int *code,int *color,int *priority,int *shadow); +extern void tmnt_sprite_callback(running_machine *machine, int *code,int *color,int *priority,int *shadow); +extern void punkshot_sprite_callback(running_machine *machine, int *code,int *color,int *priority_mask,int *shadow); +extern void thndrx2_sprite_callback(running_machine *machine, int *code,int *color,int *priority_mask,int *shadow); +extern void lgtnfght_sprite_callback(running_machine *machine, int *code,int *color,int *priority_mask); +extern void blswhstl_sprite_callback(running_machine *machine, int *code,int *color,int *priority_mask); +extern void prmrsocr_sprite_callback(running_machine *machine, int *code,int *color,int *priority_mask); + WRITE16_HANDLER( tmnt_paletteram_word_w ); WRITE16_HANDLER( tmnt_0a0000_w ); WRITE16_HANDLER( punkshot_0a0020_w ); @@ -13,12 +74,15 @@ WRITE16_HANDLER( prmrsocr_122000_w ); WRITE16_HANDLER( tmnt_priority_w ); READ16_HANDLER( glfgreat_ball_r ); READ16_HANDLER( prmrsocr_rom_r ); + VIDEO_START( cuebrick ); VIDEO_START( mia ); VIDEO_START( tmnt ); VIDEO_START( lgtnfght ); +VIDEO_START( blswhstl ); VIDEO_START( glfgreat ); VIDEO_START( prmrsocr ); + VIDEO_UPDATE( mia ); VIDEO_UPDATE( tmnt ); VIDEO_UPDATE( punkshot ); @@ -26,4 +90,5 @@ VIDEO_UPDATE( lgtnfght ); VIDEO_UPDATE( glfgreat ); VIDEO_UPDATE( tmnt2 ); VIDEO_UPDATE( thndrx2 ); + VIDEO_EOF( blswhstl ); diff --git a/src/mame/includes/ultraman.h b/src/mame/includes/ultraman.h new file mode 100644 index 00000000000..362e1b81a0a --- /dev/null +++ b/src/mame/includes/ultraman.h @@ -0,0 +1,38 @@ +/************************************************************************* + + Ultraman + +*************************************************************************/ + +typedef struct _ultraman_state ultraman_state; +struct _ultraman_state +{ + /* memory pointers */ +// UINT16 * paletteram; // currently this uses generic palette handling + + /* video-related */ + int sprite_colorbase, zoom_colorbase[3]; + int bank0, bank1, bank2; + + /* devices */ + const device_config *maincpu; + const device_config *audiocpu; + const device_config *k051316_1; + const device_config *k051316_2; + const device_config *k051316_3; + const device_config *k051960; +}; + + + +/*----------- defined in video/ultraman.c -----------*/ + +extern void ultraman_sprite_callback(running_machine *machine, int *code,int *color,int *priority,int *shadow); +extern void ultraman_zoom_callback_0(running_machine *machine, int *code,int *color,int *flags); +extern void ultraman_zoom_callback_1(running_machine *machine, int *code,int *color,int *flags); +extern void ultraman_zoom_callback_2(running_machine *machine, int *code,int *color,int *flags); + +WRITE16_HANDLER( ultraman_gfxctrl_w ); + +VIDEO_START( ultraman ); +VIDEO_UPDATE( ultraman ); diff --git a/src/mame/includes/vendetta.h b/src/mame/includes/vendetta.h new file mode 100644 index 00000000000..c6b68f23586 --- /dev/null +++ b/src/mame/includes/vendetta.h @@ -0,0 +1,38 @@ +/************************************************************************* + + Vendetta + +*************************************************************************/ + +typedef struct _vendetta_state vendetta_state; +struct _vendetta_state +{ + /* memory pointers */ + UINT8 * ram; +// UINT8 * paletteram; // currently this uses generic palette handling + + /* video-related */ + int layer_colorbase[3], sprite_colorbase; + int layerpri[3]; + + /* misc */ + int irq_enabled; + offs_t video_banking_base; + + /* devices */ + const device_config *maincpu; + const device_config *audiocpu; + const device_config *k053260; + const device_config *k052109; + const device_config *k053246; + const device_config *k053251; + const device_config *k054000; +}; + +/*----------- defined in video/vendetta.c -----------*/ + +extern void vendetta_tile_callback(running_machine *machine, int layer,int bank,int *code,int *color,int *flags,int *priority); +extern void esckids_tile_callback(running_machine *machine, int layer,int bank,int *code,int *color,int *flags,int *priority); +extern void vendetta_sprite_callback(running_machine *machine, int *code,int *color,int *priority_mask); + +VIDEO_UPDATE( vendetta ); diff --git a/src/mame/includes/xexex.h b/src/mame/includes/xexex.h new file mode 100644 index 00000000000..08b7675fef2 --- /dev/null +++ b/src/mame/includes/xexex.h @@ -0,0 +1,50 @@ +/************************************************************************* + + Xexex + +*************************************************************************/ + +typedef struct _xexex_state xexex_state; +struct _xexex_state +{ + /* memory pointers */ + UINT16 * workram; + UINT16 * spriteram; +// UINT16 * paletteram; // currently this uses generic palette handling + + /* video-related */ + int layer_colorbase[4], sprite_colorbase; + int layerpri[4]; + int cur_alpha; + + /* misc */ + UINT16 cur_control2; + INT32 cur_sound_region, strip_0x1a; + int suspension_active, resume_trigger; + emu_timer *dmadelay_timer; + int frame; + + /* devices */ + const device_config *maincpu; + const device_config *audiocpu; + const device_config *k054539; + const device_config *filter1l; + const device_config *filter1r; + const device_config *filter2l; + const device_config *filter2r; + const device_config *k056832; + const device_config *k053246; + const device_config *k053250; + const device_config *k053251; + const device_config *k053252; + const device_config *k054338; +}; + + +/*----------- defined in video/xexex.c -----------*/ + +extern void xexex_sprite_callback(running_machine *machine, int *code, int *color, int *priority_mask); +extern void xexex_tile_callback(running_machine *machine, int layer, int *code, int *color, int *flags); + +VIDEO_START( xexex ); +VIDEO_UPDATE( xexex ); diff --git a/src/mame/includes/xmen.h b/src/mame/includes/xmen.h index d19e69d8395..b806eef4417 100644 --- a/src/mame/includes/xmen.h +++ b/src/mame/includes/xmen.h @@ -1,11 +1,37 @@ -/*----------- defined in drivers/xmen.c -----------*/ -extern UINT16 xmen_current_frame; -extern UINT16 *xmen6p_spriteramleft; -extern UINT16 *xmen6p_spriteramright; -extern UINT16 *xmen6p_tilemapleft; -extern UINT16 *xmen6p_tilemapright; +typedef struct _xmen_state xmen_state; +struct _xmen_state +{ + /* memory pointers */ +// UINT16 * paletteram; // currently this uses generic palette handling + /* video-related */ + int layer_colorbase[3], sprite_colorbase; + int layerpri[3]; + + /* for xmen6p */ + bitmap_t *screen_right; + bitmap_t *screen_left; + UINT16 * xmen6p_spriteramleft; + UINT16 * xmen6p_spriteramright; + UINT16 * xmen6p_tilemapleft; + UINT16 * xmen6p_tilemapright; + UINT16 * k053247_ram; + UINT16 current_frame; + + /* misc */ + UINT8 sound_curbank; + + /* devices */ + const device_config *maincpu; + const device_config *audiocpu; + const device_config *k054539; + const device_config *k052109; + const device_config *k053246; + const device_config *k053251; + const device_config *lscreen; + const device_config *rscreen; +}; /*----------- defined in video/xmen.c -----------*/ diff --git a/src/mame/machine/ajax.c b/src/mame/machine/ajax.c index 4ce553a977d..f3a42385950 100644 --- a/src/mame/machine/ajax.c +++ b/src/mame/machine/ajax.c @@ -14,8 +14,6 @@ #include "video/konicdev.h" #include "includes/ajax.h" -static int firq_enable; - /* ajax_bankswitch_w: Handled by the LS273 Octal +ve edge trigger D-type Flip-flop with Reset at H11: @@ -35,22 +33,23 @@ static int firq_enable; static WRITE8_HANDLER( ajax_bankswitch_w ) { - UINT8 *RAM = memory_region(space->machine, "maincpu"); - int bankaddress = 0; + ajax_state *state = (ajax_state *)space->machine->driver_data; + int bank = 0; /* rom select */ - if (!(data & 0x80)) bankaddress += 0x8000; + if (!(data & 0x80)) + bank += 4; /* coin counters */ - coin_counter_w(space->machine, 0,data & 0x20); - coin_counter_w(space->machine, 1,data & 0x40); + coin_counter_w(space->machine, 0, data & 0x20); + coin_counter_w(space->machine, 1, data & 0x40); /* priority */ - ajax_priority = data & 0x08; + state->priority = data & 0x08; /* bank # (ROMS N11 and N12) */ - bankaddress += 0x10000 + (data & 0x07)*0x2000; - memory_set_bankptr(space->machine, "bank2",&RAM[bankaddress]); + bank += (data & 0x07); + memory_set_bank(space->machine, "bank2", bank); } /* ajax_lamps_w: @@ -79,14 +78,14 @@ static WRITE8_HANDLER( ajax_bankswitch_w ) static WRITE8_HANDLER( ajax_lamps_w ) { - set_led_status(space->machine, 1,data & 0x02); /* super weapon lamp */ - set_led_status(space->machine, 2,data & 0x04); /* power up lamps */ - set_led_status(space->machine, 5,data & 0x04); /* power up lamps */ - set_led_status(space->machine, 0,data & 0x20); /* start lamp */ - set_led_status(space->machine, 3,data & 0x40); /* game over lamps */ - set_led_status(space->machine, 6,data & 0x40); /* game over lamps */ - set_led_status(space->machine, 4,data & 0x80); /* game over lamps */ - set_led_status(space->machine, 7,data & 0x80); /* game over lamps */ + set_led_status(space->machine, 1, data & 0x02); /* super weapon lamp */ + set_led_status(space->machine, 2, data & 0x04); /* power up lamps */ + set_led_status(space->machine, 5, data & 0x04); /* power up lamps */ + set_led_status(space->machine, 0, data & 0x20); /* start lamp */ + set_led_status(space->machine, 3, data & 0x40); /* game over lamps */ + set_led_status(space->machine, 6, data & 0x40); /* game over lamps */ + set_led_status(space->machine, 4, data & 0x80); /* game over lamps */ + set_led_status(space->machine, 7, data & 0x80); /* game over lamps */ } /* ajax_ls138_f10: @@ -136,20 +135,23 @@ READ8_HANDLER( ajax_ls138_f10_r ) WRITE8_HANDLER( ajax_ls138_f10_w ) { - switch ((offset & 0x01c0) >> 6){ + ajax_state *state = (ajax_state *)space->machine->driver_data; + + switch ((offset & 0x01c0) >> 6) + { case 0x00: /* NSFIRQ + AFR */ if (offset) watchdog_reset_w(space, 0, data); else{ - if (firq_enable) /* Cause interrupt on slave CPU */ - cputag_set_input_line(space->machine, "sub", M6809_FIRQ_LINE, HOLD_LINE); + if (state->firq_enable) /* Cause interrupt on slave CPU */ + cpu_set_input_line(state->subcpu, M6809_FIRQ_LINE, HOLD_LINE); } break; case 0x01: /* Cause interrupt on audio CPU */ - cputag_set_input_line(space->machine, "audiocpu", 0, HOLD_LINE); + cpu_set_input_line(state->audiocpu, 0, HOLD_LINE); break; case 0x02: /* Sound command number */ - soundlatch_w(space,offset,data); + soundlatch_w(space, offset, data); break; case 0x03: /* Bankswitch + coin counters + priority*/ ajax_bankswitch_w(space, 0, data); @@ -159,7 +161,7 @@ WRITE8_HANDLER( ajax_ls138_f10_w ) break; default: - logerror("%04x: (ls138_f10) write %02x to an unknown address %02x\n",cpu_get_pc(space->cpu), data, offset); + logerror("%04x: (ls138_f10) write %02x to an unknown address %02x\n", cpu_get_pc(space->cpu), data, offset); } } @@ -180,40 +182,58 @@ WRITE8_HANDLER( ajax_ls138_f10_w ) WRITE8_HANDLER( ajax_bankswitch_2_w ) { - const device_config *k052109 = devtag_get_device(space->machine, "k052109"); - const device_config *k051316 = devtag_get_device(space->machine, "k051316"); - UINT8 *RAM = memory_region(space->machine, "sub"); - int bankaddress; + ajax_state *state = (ajax_state *)space->machine->driver_data; /* enable char ROM reading through the video RAM */ - k052109_set_rmrd_line(k052109, (data & 0x40) ? ASSERT_LINE : CLEAR_LINE); + k052109_set_rmrd_line(state->k052109, (data & 0x40) ? ASSERT_LINE : CLEAR_LINE); /* bit 5 enables 051316 wraparound */ - k051316_wraparound_enable(k051316, data & 0x20); + k051316_wraparound_enable(state->k051316, data & 0x20); /* FIRQ control */ - firq_enable = data & 0x10; + state->firq_enable = data & 0x10; /* bank # (ROMS G16 and I16) */ - bankaddress = 0x10000 + (data & 0x0f)*0x2000; - memory_set_bankptr(space->machine, "bank1",&RAM[bankaddress]); + memory_set_bank(space->machine, "bank1", data & 0x0f); } MACHINE_START( ajax ) { - state_save_register_global(machine, firq_enable); + ajax_state *state = (ajax_state *)machine->driver_data; + UINT8 *MAIN = memory_region(machine, "maincpu"); + UINT8 *SUB = memory_region(machine, "sub"); + + memory_configure_bank(machine, "bank1", 0, 9, &SUB[0x10000], 0x2000); + memory_configure_bank(machine, "bank2", 0, 12, &MAIN[0x10000], 0x2000); + + memory_set_bank(machine, "bank1", 0); + memory_set_bank(machine, "bank2", 0); + + state->maincpu = devtag_get_device(machine, "maincpu"); + state->audiocpu = devtag_get_device(machine, "audiocpu"); + state->subcpu = devtag_get_device(machine, "sub"); + state->k007232_1 = devtag_get_device(machine, "k007232_1"); + state->k007232_2 = devtag_get_device(machine, "k007232_2"); + state->k052109 = devtag_get_device(machine, "k052109"); + state->k051960 = devtag_get_device(machine, "k051960"); + state->k051316 = devtag_get_device(machine, "k051316"); + + state_save_register_global(machine, state->priority); + state_save_register_global(machine, state->firq_enable); } MACHINE_RESET( ajax ) { - const address_space *space = cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM); - ajax_bankswitch_w(space, 0, 0); - ajax_bankswitch_2_w(space, 0, 0); + ajax_state *state = (ajax_state *)machine->driver_data; + + state->priority = 0; + state->firq_enable = 0; } INTERRUPT_GEN( ajax_interrupt ) { - const device_config *k051960 = devtag_get_device(device->machine, "k051960"); - if (k051960_is_irq_enabled(k051960)) + ajax_state *state = (ajax_state *)device->machine->driver_data; + + if (k051960_is_irq_enabled(state->k051960)) cpu_set_input_line(device, KONAMI_IRQ_LINE, HOLD_LINE); } diff --git a/src/mame/machine/simpsons.c b/src/mame/machine/simpsons.c index 16f469a15fb..1820dec711e 100644 --- a/src/mame/machine/simpsons.c +++ b/src/mame/machine/simpsons.c @@ -5,8 +5,6 @@ #include "sound/k053260.h" #include "includes/simpsons.h" -int simpsons_firq_enabled; - /*************************************************************************** EEPROM @@ -15,14 +13,17 @@ int simpsons_firq_enabled; WRITE8_HANDLER( simpsons_eeprom_w ) { + simpsons_state *state = (simpsons_state *)space->machine->driver_data; + if (data == 0xff) return; input_port_write(space->machine, "EEPROMOUT", data, 0xff); - simpsons_video_banking(space->machine, data & 3); + state->video_bank = data & 0x03; + simpsons_video_banking(space->machine, state->video_bank); - simpsons_firq_enabled = data & 0x04; + state->firq_enabled = data & 0x04; } /*************************************************************************** @@ -33,23 +34,23 @@ WRITE8_HANDLER( simpsons_eeprom_w ) WRITE8_HANDLER( simpsons_coin_counter_w ) { - const device_config *k053246 = devtag_get_device(space->machine, "k053246"); - const device_config *k052109 = devtag_get_device(space->machine, "k052109"); + simpsons_state *state = (simpsons_state *)space->machine->driver_data; /* bit 0,1 coin counters */ - coin_counter_w(space->machine, 0,data & 0x01); - coin_counter_w(space->machine, 1,data & 0x02); + coin_counter_w(space->machine, 0, data & 0x01); + coin_counter_w(space->machine, 1, data & 0x02); /* bit 2 selects mono or stereo sound */ /* bit 3 = enable char ROM reading through the video RAM */ - k052109_set_rmrd_line(k052109, (data & 0x08) ? ASSERT_LINE : CLEAR_LINE); + k052109_set_rmrd_line(state->k052109, (data & 0x08) ? ASSERT_LINE : CLEAR_LINE); /* bit 4 = INIT (unknown) */ /* bit 5 = enable sprite ROM reading */ - k053246_set_objcha_line(k053246, (~data & 0x20) ? ASSERT_LINE : CLEAR_LINE); + k053246_set_objcha_line(state->k053246, (~data & 0x20) ? ASSERT_LINE : CLEAR_LINE); } READ8_HANDLER( simpsons_sound_interrupt_r ) { - cputag_set_input_line_and_vector(space->machine, "audiocpu", 0, HOLD_LINE, 0xff ); + simpsons_state *state = (simpsons_state *)space->machine->driver_data; + cpu_set_input_line_and_vector(state->audiocpu, 0, HOLD_LINE, 0xff ); return 0x00; } @@ -70,17 +71,55 @@ static KONAMI_SETLINES_CALLBACK( simpsons_banking ) memory_set_bank(device->machine, "bank1", lines & 0x3f); } +static STATE_POSTLOAD( simpsons_postload ) +{ + simpsons_state *state = (simpsons_state *)machine->driver_data; + + simpsons_video_banking(machine, state->video_bank); +} + +MACHINE_START( simpsons ) +{ + simpsons_state *state = (simpsons_state *)machine->driver_data; + + machine->generic.paletteram.u8 = auto_alloc_array_clear(machine, UINT8, 0x1000); + state->xtraram = auto_alloc_array_clear(machine, UINT8, 0x1000); + state->spriteram = auto_alloc_array_clear(machine, UINT16, 0x1000 / 2); + + state->maincpu = devtag_get_device(machine, "maincpu"); + state->audiocpu = devtag_get_device(machine, "audiocpu"); + state->k053260 = devtag_get_device(machine, "k053260"); + state->k052109 = devtag_get_device(machine, "k052109"); + state->k053246 = devtag_get_device(machine, "k053246"); + state->k053251 = devtag_get_device(machine, "k053251"); + + state_save_register_global(machine, state->firq_enabled); + state_save_register_global(machine, state->video_bank); + state_save_register_global(machine, state->sprite_colorbase); + state_save_register_global_array(machine, state->layer_colorbase); + state_save_register_global_array(machine, state->layerpri); + state_save_register_global_pointer(machine, machine->generic.paletteram.u8, 0x1000); + state_save_register_global_pointer(machine, state->xtraram, 0x1000); + state_save_register_global_pointer(machine, state->spriteram, 0x1000 / 2); + state_save_register_postload(machine, simpsons_postload, NULL); +} + MACHINE_RESET( simpsons ) { - UINT8 *RAM = memory_region(machine, "maincpu"); + simpsons_state *state = (simpsons_state *)machine->driver_data; + int i; konami_configure_set_lines(cputag_get_cpu(machine, "maincpu"), simpsons_banking); - machine->generic.paletteram.u8 = &RAM[0x88000]; - simpsons_xtraram = &RAM[0x89000]; - machine->generic.spriteram.u16 = (UINT16 *)&RAM[0x8a000]; + for (i = 0; i < 3; i++) + { + state->layerpri[i] = 0; + state->layer_colorbase[i] = 0; + } - simpsons_firq_enabled = 0; + state->sprite_colorbase = 0; + state->firq_enabled = 0; + state->video_bank = 0; /* init the default banks */ memory_configure_bank(machine, "bank1", 0, 64, memory_region(machine, "maincpu") + 0x10000, 0x2000); @@ -90,5 +129,5 @@ MACHINE_RESET( simpsons ) memory_configure_bank(machine, "bank2", 2, 6, memory_region(machine, "audiocpu") + 0x10000, 0x4000); memory_set_bank(machine, "bank2", 0); - simpsons_video_banking( machine, 0 ); + simpsons_video_banking(machine, 0); } diff --git a/src/mame/video/ajax.c b/src/mame/video/ajax.c index 4766261a9f2..cd60dd3b095 100644 --- a/src/mame/video/ajax.c +++ b/src/mame/video/ajax.c @@ -11,20 +11,17 @@ #include "includes/ajax.h" -UINT8 ajax_priority; -static int layer_colorbase[3],sprite_colorbase,zoom_colorbase; - - /*************************************************************************** Callbacks for the K052109 ***************************************************************************/ -void ajax_tile_callback(running_machine *machine, int layer,int bank,int *code,int *color,int *flags,int *priority) +void ajax_tile_callback( running_machine *machine, int layer, int bank, int *code, int *color, int *flags, int *priority ) { + ajax_state *state = (ajax_state *)machine->driver_data; *code |= ((*color & 0x0f) << 8) | (bank << 12); - *color = layer_colorbase[layer] + ((*color & 0xf0) >> 4); + *color = state->layer_colorbase[layer] + ((*color & 0xf0) >> 4); } @@ -34,7 +31,7 @@ void ajax_tile_callback(running_machine *machine, int layer,int bank,int *code,i ***************************************************************************/ -void ajax_sprite_callback(running_machine *machine, int *code,int *color,int *priority,int *shadow) +void ajax_sprite_callback( running_machine *machine, int *code, int *color, int *priority, int *shadow ) { /* priority bits: 4 over zoom (0 = have priority) @@ -42,11 +39,12 @@ void ajax_sprite_callback(running_machine *machine, int *code,int *color,int *pr 6 over A (1 = have priority) never over F */ + ajax_state *state = (ajax_state *)machine->driver_data; *priority = 0xff00; /* F = 8 */ if ( *color & 0x10) *priority |= 0xf0f0; /* Z = 4 */ if (~*color & 0x40) *priority |= 0xcccc; /* A = 2 */ if ( *color & 0x20) *priority |= 0xaaaa; /* B = 1 */ - *color = sprite_colorbase + (*color & 0x0f); + *color = state->sprite_colorbase + (*color & 0x0f); } @@ -56,10 +54,11 @@ void ajax_sprite_callback(running_machine *machine, int *code,int *color,int *pr ***************************************************************************/ -void ajax_zoom_callback(running_machine *machine, int *code,int *color,int *flags) +void ajax_zoom_callback( running_machine *machine, int *code, int *color, int *flags ) { + ajax_state *state = (ajax_state *)machine->driver_data; *code |= ((*color & 0x07) << 8); - *color = zoom_colorbase + ((*color & 0x08) >> 3); + *color = state->zoom_colorbase + ((*color & 0x08) >> 3); } @@ -71,12 +70,13 @@ void ajax_zoom_callback(running_machine *machine, int *code,int *color,int *flag VIDEO_START( ajax ) { - layer_colorbase[0] = 64; - layer_colorbase[1] = 0; - layer_colorbase[2] = 32; - sprite_colorbase = 16; - zoom_colorbase = 6; /* == 48 since it's 7-bit graphics */ - state_save_register_global(machine, ajax_priority); + ajax_state *state = (ajax_state *)machine->driver_data; + + state->layer_colorbase[0] = 64; + state->layer_colorbase[1] = 0; + state->layer_colorbase[2] = 32; + state->sprite_colorbase = 16; + state->zoom_colorbase = 6; /* == 48 since it's 7-bit graphics */ } @@ -89,30 +89,28 @@ VIDEO_START( ajax ) VIDEO_UPDATE( ajax ) { - const device_config *k051316 = devtag_get_device(screen->machine, "k051316"); - const device_config *k052109 = devtag_get_device(screen->machine, "k052109"); - const device_config *k051960 = devtag_get_device(screen->machine, "k051960"); + ajax_state *state = (ajax_state *)screen->machine->driver_data; - k052109_tilemap_update(k052109); + k052109_tilemap_update(state->k052109); - bitmap_fill(screen->machine->priority_bitmap,cliprect,0); + bitmap_fill(screen->machine->priority_bitmap, cliprect, 0); bitmap_fill(bitmap,cliprect,get_black_pen(screen->machine)); - k052109_tilemap_draw(k052109, bitmap, cliprect, 2, 0, 1); - if (ajax_priority) + k052109_tilemap_draw(state->k052109, bitmap, cliprect, 2, 0, 1); + if (state->priority) { /* basic layer order is B, zoom, A, F */ - k051316_zoom_draw(k051316, bitmap, cliprect, 0, 4); - k052109_tilemap_draw(k052109, bitmap, cliprect, 1, 0, 2); + k051316_zoom_draw(state->k051316, bitmap, cliprect, 0, 4); + k052109_tilemap_draw(state->k052109, bitmap, cliprect, 1, 0, 2); } else { /* basic layer order is B, A, zoom, F */ - k052109_tilemap_draw(k052109, bitmap, cliprect, 1, 0, 2); - k051316_zoom_draw(k051316, bitmap, cliprect, 0, 4); + k052109_tilemap_draw(state->k052109, bitmap, cliprect, 1, 0, 2); + k051316_zoom_draw(state->k051316, bitmap, cliprect, 0, 4); } - k052109_tilemap_draw(k052109, bitmap, cliprect, 0, 0, 8); + k052109_tilemap_draw(state->k052109, bitmap, cliprect, 0, 0, 8); - k051960_sprites_draw(k051960, bitmap, cliprect, -1, -1); + k051960_sprites_draw(state->k051960, bitmap, cliprect, -1, -1); return 0; } diff --git a/src/mame/video/aliens.c b/src/mame/video/aliens.c index 15b0f6b15f1..be362a82a7a 100644 --- a/src/mame/video/aliens.c +++ b/src/mame/video/aliens.c @@ -1,8 +1,6 @@ #include "driver.h" #include "video/konicdev.h" - - -static int layer_colorbase[3],sprite_colorbase; +#include "includes/aliens.h" /*************************************************************************** @@ -10,10 +8,12 @@ static int layer_colorbase[3],sprite_colorbase; ***************************************************************************/ -void aliens_tile_callback(running_machine *machine, int layer,int bank,int *code,int *color, int *flags, int *priority) +void aliens_tile_callback( running_machine *machine, int layer, int bank, int *code, int *color, int *flags, int *priority ) { + aliens_state *state = (aliens_state *)machine->driver_data; + *code |= ((*color & 0x3f) << 8) | (bank << 14); - *color = layer_colorbase[layer] + ((*color & 0xc0) >> 6); + *color = state->layer_colorbase[layer] + ((*color & 0xc0) >> 6); } @@ -23,8 +23,10 @@ void aliens_tile_callback(running_machine *machine, int layer,int bank,int *code ***************************************************************************/ -void aliens_sprite_callback(running_machine *machine, int *code,int *color,int *priority_mask,int *shadow) +void aliens_sprite_callback( running_machine *machine, int *code, int *color, int *priority_mask, int *shadow ) { + aliens_state *state = (aliens_state *)machine->driver_data; + /* The PROM allows for mixed priorities, where sprites would have */ /* priority over text but not on one or both of the other two planes. */ switch (*color & 0x70) @@ -39,7 +41,7 @@ void aliens_sprite_callback(running_machine *machine, int *code,int *color,int * case 0x70: *priority_mask = 0xcc|0xaa; break; /* over F, not AB */ } *code |= (*color & 0x80) << 6; - *color = sprite_colorbase + (*color & 0x0f); + *color = state->sprite_colorbase + (*color & 0x0f); *shadow = 0; /* shadows are not used by this game */ } @@ -53,12 +55,16 @@ void aliens_sprite_callback(running_machine *machine, int *code,int *color,int * VIDEO_START( aliens ) { + aliens_state *state = (aliens_state *)machine->driver_data; + machine->generic.paletteram.u8 = auto_alloc_array(machine, UINT8, 0x400); - layer_colorbase[0] = 0; - layer_colorbase[1] = 4; - layer_colorbase[2] = 8; - sprite_colorbase = 16; + state->layer_colorbase[0] = 0; + state->layer_colorbase[1] = 4; + state->layer_colorbase[2] = 8; + state->sprite_colorbase = 16; + + state_save_register_global_pointer(machine, machine->generic.paletteram.u8, 0x400); } @@ -71,18 +77,17 @@ VIDEO_START( aliens ) VIDEO_UPDATE( aliens ) { - const device_config *k052109 = devtag_get_device(screen->machine, "k052109"); - const device_config *k051960 = devtag_get_device(screen->machine, "k051960"); + aliens_state *state = (aliens_state *)screen->machine->driver_data; - k052109_tilemap_update(k052109); + k052109_tilemap_update(state->k052109); - bitmap_fill(screen->machine->priority_bitmap,cliprect,0); - bitmap_fill(bitmap,cliprect,layer_colorbase[1] * 16); + bitmap_fill(screen->machine->priority_bitmap, cliprect, 0); + bitmap_fill(bitmap, cliprect, state->layer_colorbase[1] * 16); - k052109_tilemap_draw(k052109, bitmap, cliprect, 1, 0,1); - k052109_tilemap_draw(k052109, bitmap, cliprect, 2, 0,2); - k052109_tilemap_draw(k052109, bitmap, cliprect, 0, 0,4); + k052109_tilemap_draw(state->k052109, bitmap, cliprect, 1, 0, 1); + k052109_tilemap_draw(state->k052109, bitmap, cliprect, 2, 0, 2); + k052109_tilemap_draw(state->k052109, bitmap, cliprect, 0, 0, 4); - k051960_sprites_draw(k051960, bitmap,cliprect,-1,-1); + k051960_sprites_draw(state->k051960, bitmap, cliprect, -1, -1); return 0; } diff --git a/src/mame/video/asterix.c b/src/mame/video/asterix.c index 707580a6bfd..b30ea2cee7b 100644 --- a/src/mame/video/asterix.c +++ b/src/mame/video/asterix.c @@ -1,127 +1,112 @@ #include "driver.h" #include "video/konicdev.h" +#include "includes/asterix.h" -static int sprite_colorbase; -static int layer_colorbase[4], layerpri[3]; -static UINT16 spritebank; -static int tilebanks[4]; -static int spritebanks[4]; - static void reset_spritebank( running_machine *machine ) { - const device_config *k053244 = devtag_get_device(machine, "k053244"); - k053244_bankselect(k053244, spritebank & 7); - spritebanks[0] = (spritebank << 12) & 0x7000; - spritebanks[1] = (spritebank << 9) & 0x7000; - spritebanks[2] = (spritebank << 6) & 0x7000; - spritebanks[3] = (spritebank << 3) & 0x7000; + asterix_state *state = (asterix_state *)machine->driver_data; + k053244_bankselect(state->k053244, state->spritebank & 7); + state->spritebanks[0] = (state->spritebank << 12) & 0x7000; + state->spritebanks[1] = (state->spritebank << 9) & 0x7000; + state->spritebanks[2] = (state->spritebank << 6) & 0x7000; + state->spritebanks[3] = (state->spritebank << 3) & 0x7000; } WRITE16_HANDLER( asterix_spritebank_w ) { - COMBINE_DATA(&spritebank); + asterix_state *state = (asterix_state *)space->machine->driver_data; + COMBINE_DATA(&state->spritebank); reset_spritebank(space->machine); } -void asterix_sprite_callback(running_machine *machine, int *code, int *color, int *priority_mask) +void asterix_sprite_callback( running_machine *machine, int *code, int *color, int *priority_mask ) { + asterix_state *state = (asterix_state *)machine->driver_data; int pri = (*color & 0x00e0) >> 2; - if (pri <= layerpri[2]) *priority_mask = 0; - else if (pri > layerpri[2] && pri <= layerpri[1]) *priority_mask = 0xf0; - else if (pri > layerpri[1] && pri <= layerpri[0]) *priority_mask = 0xf0|0xcc; - else *priority_mask = 0xf0|0xcc|0xaa; - *color = sprite_colorbase | (*color & 0x001f); - *code = (*code & 0xfff) | spritebanks[(*code >> 12) & 3]; + if (pri <= state->layerpri[2]) + *priority_mask = 0; + else if (pri > state->layerpri[2] && pri <= state->layerpri[1]) + *priority_mask = 0xf0; + else if (pri > state->layerpri[1] && pri <= state->layerpri[0]) + *priority_mask = 0xf0 | 0xcc; + else + *priority_mask = 0xf0 | 0xcc | 0xaa; + *color = state->sprite_colorbase | (*color & 0x001f); + *code = (*code & 0xfff) | state->spritebanks[(*code >> 12) & 3]; } -void asterix_tile_callback(running_machine *machine, int layer, int *code, int *color, int *flags) -{ - *flags = *code & 0x1000 ? TILE_FLIPX : 0; - *color = (layer_colorbase[layer] + ((*code & 0xe000) >> 13)) & 0x7f; - *code = (*code & 0x03ff) | tilebanks[(*code >> 10) & 3]; -} - -/* useful function to sort the three tile layers by priority order */ -static void sortlayers(int *layer,int *pri) +void asterix_tile_callback( running_machine *machine, int layer, int *code, int *color, int *flags ) { -#define SWAP(a,b) \ - if (pri[a] < pri[b]) \ - { \ - int t; \ - t = pri[a]; pri[a] = pri[b]; pri[b] = t; \ - t = layer[a]; layer[a] = layer[b]; layer[b] = t; \ - } + asterix_state *state = (asterix_state *)machine->driver_data; - SWAP(0,1) - SWAP(0,2) - SWAP(1,2) + *flags = *code & 0x1000 ? TILE_FLIPX : 0; + *color = (state->layer_colorbase[layer] + ((*code & 0xe000) >> 13)) & 0x7f; + *code = (*code & 0x03ff) | state->tilebanks[(*code >> 10) & 3]; } VIDEO_UPDATE( asterix ) { + asterix_state *state = (asterix_state *)screen->machine->driver_data; static const int K053251_CI[4] = { K053251_CI0, K053251_CI2, K053251_CI3, K053251_CI4 }; - const device_config *k053244 = devtag_get_device(screen->machine, "k053244"); - const device_config *k056832 = devtag_get_device(screen->machine, "k056832"); - const device_config *k053251 = devtag_get_device(screen->machine, "k053251"); int layer[3], plane, new_colorbase; /* Layer offsets are different if horizontally flipped */ - if (k056832_read_register(k056832, 0x0) & 0x10) + if (k056832_read_register(state->k056832, 0x0) & 0x10) { - k056832_set_layer_offs(k056832, 0, 89 - 176, 0); - k056832_set_layer_offs(k056832, 1, 91 - 176, 0); - k056832_set_layer_offs(k056832, 2, 89 - 176, 0); - k056832_set_layer_offs(k056832, 3, 95 - 176, 0); + k056832_set_layer_offs(state->k056832, 0, 89 - 176, 0); + k056832_set_layer_offs(state->k056832, 1, 91 - 176, 0); + k056832_set_layer_offs(state->k056832, 2, 89 - 176, 0); + k056832_set_layer_offs(state->k056832, 3, 95 - 176, 0); } else { - k056832_set_layer_offs(k056832, 0, 89, 0); - k056832_set_layer_offs(k056832, 1, 91, 0); - k056832_set_layer_offs(k056832, 2, 89, 0); - k056832_set_layer_offs(k056832, 3, 95, 0); + k056832_set_layer_offs(state->k056832, 0, 89, 0); + k056832_set_layer_offs(state->k056832, 1, 91, 0); + k056832_set_layer_offs(state->k056832, 2, 89, 0); + k056832_set_layer_offs(state->k056832, 3, 95, 0); } - tilebanks[0] = (k056832_get_lookup(k056832, 0) << 10); - tilebanks[1] = (k056832_get_lookup(k056832, 1) << 10); - tilebanks[2] = (k056832_get_lookup(k056832, 2) << 10); - tilebanks[3] = (k056832_get_lookup(k056832, 3) << 10); + state->tilebanks[0] = (k056832_get_lookup(state->k056832, 0) << 10); + state->tilebanks[1] = (k056832_get_lookup(state->k056832, 1) << 10); + state->tilebanks[2] = (k056832_get_lookup(state->k056832, 2) << 10); + state->tilebanks[3] = (k056832_get_lookup(state->k056832, 3) << 10); // update color info and refresh tilemaps - sprite_colorbase = k053251_get_palette_index(k053251, K053251_CI1); + state->sprite_colorbase = k053251_get_palette_index(state->k053251, K053251_CI1); for (plane = 0; plane < 4; plane++) { - new_colorbase = k053251_get_palette_index(k053251, K053251_CI[plane]); - if (layer_colorbase[plane] != new_colorbase) + new_colorbase = k053251_get_palette_index(state->k053251, K053251_CI[plane]); + if (state->layer_colorbase[plane] != new_colorbase) { - layer_colorbase[plane] = new_colorbase; - k056832_mark_plane_dirty(k056832, plane); + state->layer_colorbase[plane] = new_colorbase; + k056832_mark_plane_dirty(state->k056832, plane); } } layer[0] = 0; - layerpri[0] = k053251_get_priority(k053251, K053251_CI0); + state->layerpri[0] = k053251_get_priority(state->k053251, K053251_CI0); layer[1] = 1; - layerpri[1] = k053251_get_priority(k053251, K053251_CI2); + state->layerpri[1] = k053251_get_priority(state->k053251, K053251_CI2); layer[2] = 3; - layerpri[2] = k053251_get_priority(k053251, K053251_CI4); + state->layerpri[2] = k053251_get_priority(state->k053251, K053251_CI4); - sortlayers(layer, layerpri); + konami_sortlayers3(layer, state->layerpri); bitmap_fill(screen->machine->priority_bitmap, cliprect, 0); bitmap_fill(bitmap, cliprect, 0); - k056832_tilemap_draw(k056832, bitmap, cliprect, layer[0], 0, 1); - k056832_tilemap_draw(k056832, bitmap, cliprect, layer[1], 0, 2); - k056832_tilemap_draw(k056832, bitmap, cliprect, layer[2], 0, 4); + k056832_tilemap_draw(state->k056832, bitmap, cliprect, layer[0], 0, 1); + k056832_tilemap_draw(state->k056832, bitmap, cliprect, layer[1], 0, 2); + k056832_tilemap_draw(state->k056832, bitmap, cliprect, layer[2], 0, 4); /* this isn't supported anymore and it is unsure if still needed; keeping here for reference pdrawgfx_shadow_lowpri = 1; fix shadows in front of feet */ - k053245_sprites_draw(k053244, bitmap, cliprect); + k053245_sprites_draw(state->k053244, bitmap, cliprect); - k056832_tilemap_draw(k056832, bitmap, cliprect, 2, 0, 0); + k056832_tilemap_draw(state->k056832, bitmap, cliprect, 2, 0, 0); return 0; } diff --git a/src/mame/video/bishi.c b/src/mame/video/bishi.c index b20b0e12666..53cad62d714 100644 --- a/src/mame/video/bishi.c +++ b/src/mame/video/bishi.c @@ -10,86 +10,67 @@ #include "driver.h" #include "video/konicdev.h" //#include "includes/konamigx.h" +#include "includes/bishi.h" -static int layer_colorbase[4], layerpri[4]; -void bishi_tile_callback(running_machine *machine, int layer, int *code, int *color, int *flags) +void bishi_tile_callback( running_machine *machine, int layer, int *code, int *color, int *flags ) { + bishi_state *state = (bishi_state *)machine->driver_data; + // *code -= '0'; -// *color = layer_colorbase[layer] | (*color>>2 & 0x0f); +// *color = state->layer_colorbase[layer] | (*color>>2 & 0x0f); // K055555GX_decode_vmixcolor(layer, color); // if (*color) mame_printf_debug("plane %x col %x [55 %x %x]\n", layer, *color, layer_colorbase[layer], K055555_get_palette_index(layer)); - *color = layer_colorbase[layer] + ((*color & 0xf0)); + *color = state->layer_colorbase[layer] + ((*color & 0xf0)); } -VIDEO_START(bishi) +VIDEO_START( bishi ) { - const device_config *k056832 = devtag_get_device(machine, "k056832"); + bishi_state *state = (bishi_state *)machine->driver_data; assert(video_screen_get_format(machine->primary_screen) == BITMAP_FORMAT_RGB32); - k056832_set_layer_association(k056832, 0); + k056832_set_layer_association(state->k056832, 0); - k056832_set_layer_offs(k056832, 0, -2, 0); - k056832_set_layer_offs(k056832, 1, 2, 0); - k056832_set_layer_offs(k056832, 2, 4, 0); - k056832_set_layer_offs(k056832, 3, 6, 0); + k056832_set_layer_offs(state->k056832, 0, -2, 0); + k056832_set_layer_offs(state->k056832, 1, 2, 0); + k056832_set_layer_offs(state->k056832, 2, 4, 0); + k056832_set_layer_offs(state->k056832, 3, 6, 0); // the 55555 is set to "0x10, 0x11, 0x12, 0x13", but these values are almost correct... - layer_colorbase[0] = 0x00; - layer_colorbase[1] = 0x40; // this one is wrong - layer_colorbase[2] = 0x80; - layer_colorbase[3] = 0xc0; -} - -/* useful function to sort the three tile layers by priority order */ -static void sortlayers(int *layer,int *pri) -{ -#define SWAP(a,b) \ - if (pri[a] < pri[b]) \ - { \ - int t; \ - t = pri[a]; pri[a] = pri[b]; pri[b] = t; \ - t = layer[a]; layer[a] = layer[b]; layer[b] = t; \ - } - - SWAP(0,1) - SWAP(0,2) - SWAP(0,3) - SWAP(1,2) - SWAP(1,3) - SWAP(2,3) + state->layer_colorbase[0] = 0x00; + state->layer_colorbase[1] = 0x40; // this one is wrong + state->layer_colorbase[2] = 0x80; + state->layer_colorbase[3] = 0xc0; } VIDEO_UPDATE(bishi) { - const device_config *k056832 = devtag_get_device(screen->machine, "k056832"); - const device_config *k054338 = devtag_get_device(screen->machine, "k054338"); - const device_config *k055555 = devtag_get_device(screen->machine, "k055555"); - int layers[4], i;/*, old;*/ + bishi_state *state = (bishi_state *)screen->machine->driver_data; + int layers[4], layerpri[4], i;/*, old;*/ /* int bg_colorbase, new_colorbase, plane, dirty; */ static const int pris[4] = { K55_PRIINP_0, K55_PRIINP_3, K55_PRIINP_6, K55_PRIINP_7 }; static const int enables[4] = { K55_INP_VRAM_A, K55_INP_VRAM_B, K55_INP_VRAM_C, K55_INP_VRAM_D }; - k054338_update_all_shadows(k054338, 0); - k054338_fill_backcolor(k054338, bitmap, 0); + k054338_update_all_shadows(state->k054338, 0); + k054338_fill_backcolor(state->k054338, bitmap, 0); for (i = 0; i < 4; i++) { layers[i] = i; - layerpri[i] = k055555_read_register(k055555, pris[i]); + layerpri[i] = k055555_read_register(state->k055555, pris[i]); } - sortlayers(layers, layerpri); + konami_sortlayers4(layers, layerpri); - bitmap_fill(screen->machine->priority_bitmap,cliprect,0); + bitmap_fill(screen->machine->priority_bitmap, cliprect, 0); for (i = 0; i < 4; i++) { - if (k055555_read_register(k055555, K55_INPUT_ENABLES) & enables[layers[i]]) + if (k055555_read_register(state->k055555, K55_INPUT_ENABLES) & enables[layers[i]]) { - k056832_tilemap_draw(k056832, bitmap, cliprect, layers[i], 0, 1 << i); + k056832_tilemap_draw(state->k056832, bitmap, cliprect, layers[i], 0, 1 << i); } } return 0; diff --git a/src/mame/video/blockhl.c b/src/mame/video/blockhl.c index 9e3ef3a9147..19e3e8933d9 100644 --- a/src/mame/video/blockhl.c +++ b/src/mame/video/blockhl.c @@ -1,20 +1,19 @@ #include "driver.h" #include "video/konicdev.h" +#include "includes/blockhl.h" - -static int layer_colorbase[3],sprite_colorbase; - /*************************************************************************** Callbacks for the K052109 ***************************************************************************/ -void blockhl_tile_callback(running_machine *machine, int layer,int bank,int *code,int *color, int *flags, int *priority) +void blockhl_tile_callback( running_machine *machine, int layer, int bank, int *code, int *color, int *flags, int *priority ) { + blockhl_state *state = (blockhl_state *)machine->driver_data; *code |= ((*color & 0x0f) << 8); - *color = layer_colorbase[layer] + ((*color & 0xe0) >> 5); + *color = state->layer_colorbase[layer] + ((*color & 0xe0) >> 5); } /*************************************************************************** @@ -23,14 +22,16 @@ void blockhl_tile_callback(running_machine *machine, int layer,int bank,int *cod ***************************************************************************/ -void blockhl_sprite_callback(running_machine *machine, int *code,int *color,int *priority,int *shadow) +void blockhl_sprite_callback( running_machine *machine, int *code, int *color, int *priority, int *shadow ) { + blockhl_state *state = (blockhl_state *)machine->driver_data; + if(*color & 0x10) *priority = 0xfe; // under K052109_tilemap[0] else *priority = 0xfc; // under K052109_tilemap[1] - *color = sprite_colorbase + (*color & 0x0f); + *color = state->sprite_colorbase + (*color & 0x0f); } @@ -42,26 +43,30 @@ void blockhl_sprite_callback(running_machine *machine, int *code,int *color,int VIDEO_START( blockhl ) { - layer_colorbase[0] = 0; - layer_colorbase[1] = 16; - layer_colorbase[2] = 32; - sprite_colorbase = 48; -} + blockhl_state *state = (blockhl_state *)machine->driver_data; + machine->generic.paletteram.u8 = auto_alloc_array(machine, UINT8, 0x800); + + state->layer_colorbase[0] = 0; + state->layer_colorbase[1] = 16; + state->layer_colorbase[2] = 32; + state->sprite_colorbase = 48; + + state_save_register_global_pointer(machine, machine->generic.paletteram.u8, 0x800); +} VIDEO_UPDATE( blockhl ) { - const device_config *k052109 = devtag_get_device(screen->machine, "k052109"); - const device_config *k051960 = devtag_get_device(screen->machine, "k051960"); + blockhl_state *state = (blockhl_state *)screen->machine->driver_data; - bitmap_fill(screen->machine->priority_bitmap,cliprect,0); + bitmap_fill(screen->machine->priority_bitmap, cliprect, 0); - k052109_tilemap_update(k052109); + k052109_tilemap_update(state->k052109); - k052109_tilemap_draw(k052109, bitmap, cliprect, 2, TILEMAP_DRAW_OPAQUE, 0); // tile 2 - k052109_tilemap_draw(k052109, bitmap, cliprect, 1, 0, 1); // tile 1 - k052109_tilemap_draw(k052109, bitmap, cliprect, 0, 0, 2); // tile 0 + k052109_tilemap_draw(state->k052109, bitmap, cliprect, 2, TILEMAP_DRAW_OPAQUE, 0); // tile 2 + k052109_tilemap_draw(state->k052109, bitmap, cliprect, 1, 0, 1); // tile 1 + k052109_tilemap_draw(state->k052109, bitmap, cliprect, 0, 0, 2); // tile 0 - k051960_sprites_draw(k051960, bitmap,cliprect,0,-1); + k051960_sprites_draw(state->k051960, bitmap, cliprect, 0, -1); return 0; } diff --git a/src/mame/video/bottom9.c b/src/mame/video/bottom9.c index 95d24ea4fac..b4ff073273a 100644 --- a/src/mame/video/bottom9.c +++ b/src/mame/video/bottom9.c @@ -1,11 +1,6 @@ #include "driver.h" #include "video/konicdev.h" - - - -int bottom9_video_enable; - -static int layer_colorbase[3],sprite_colorbase,zoom_colorbase; +#include "includes/bottom9.h" /*************************************************************************** @@ -14,10 +9,11 @@ static int layer_colorbase[3],sprite_colorbase,zoom_colorbase; ***************************************************************************/ -void bottom9_tile_callback(running_machine *machine, int layer,int bank,int *code,int *color,int *flags,int *priority) +void bottom9_tile_callback( running_machine *machine, int layer, int bank, int *code, int *color, int *flags, int *priority ) { + bottom9_state *state = (bottom9_state *)machine->driver_data; *code |= (*color & 0x3f) << 8; - *color = layer_colorbase[layer] + ((*color & 0xc0) >> 6); + *color = state->layer_colorbase[layer] + ((*color & 0xc0) >> 6); } @@ -27,12 +23,13 @@ void bottom9_tile_callback(running_machine *machine, int layer,int bank,int *cod ***************************************************************************/ -void bottom9_sprite_callback(running_machine *machine, int *code,int *color,int *priority,int *shadow) +void bottom9_sprite_callback( running_machine *machine, int *code, int *color, int *priority, int *shadow ) { /* bit 4 = priority over zoom (0 = have priority) */ /* bit 5 = priority over B (1 = have priority) */ + bottom9_state *state = (bottom9_state *)machine->driver_data; *priority = (*color & 0x30) >> 4; - *color = sprite_colorbase + (*color & 0x0f); + *color = state->sprite_colorbase + (*color & 0x0f); } @@ -42,11 +39,12 @@ void bottom9_sprite_callback(running_machine *machine, int *code,int *color,int ***************************************************************************/ -void bottom9_zoom_callback(running_machine *machine, int *code,int *color,int *flags) +void bottom9_zoom_callback( running_machine *machine, int *code, int *color, int *flags ) { + bottom9_state *state = (bottom9_state *)machine->driver_data; *flags = (*color & 0x40) ? TILE_FLIPX : 0; *code |= ((*color & 0x03) << 8); - *color = zoom_colorbase + ((*color & 0x3c) >> 2); + *color = state->zoom_colorbase + ((*color & 0x3c) >> 2); } @@ -58,11 +56,13 @@ void bottom9_zoom_callback(running_machine *machine, int *code,int *color,int *f VIDEO_START( bottom9 ) { - layer_colorbase[0] = 0; /* not used */ - layer_colorbase[1] = 0; - layer_colorbase[2] = 16; - sprite_colorbase = 32; - zoom_colorbase = 48; + bottom9_state *state = (bottom9_state *)machine->driver_data; + + state->layer_colorbase[0] = 0; /* not used */ + state->layer_colorbase[1] = 0; + state->layer_colorbase[2] = 16; + state->sprite_colorbase = 32; + state->zoom_colorbase = 48; } @@ -75,24 +75,22 @@ VIDEO_START( bottom9 ) VIDEO_UPDATE( bottom9 ) { - const device_config *k052109 = devtag_get_device(screen->machine, "k052109"); - const device_config *k051960 = devtag_get_device(screen->machine, "k051960"); - const device_config *k051316 = devtag_get_device(screen->machine, "k051316"); + bottom9_state *state = (bottom9_state *)screen->machine->driver_data; - k052109_tilemap_update(k052109); + k052109_tilemap_update(state->k052109); /* note: FIX layer is not used */ - bitmap_fill(bitmap,cliprect,layer_colorbase[1]); -// if (bottom9_video_enable) + bitmap_fill(bitmap, cliprect, state->layer_colorbase[1]); +// if (state->video_enable) { - k051960_sprites_draw(k051960, bitmap, cliprect, 1, 1); - k051316_zoom_draw(k051316, bitmap, cliprect, 0, 0); - k051960_sprites_draw(k051960, bitmap, cliprect, 0, 0); - k052109_tilemap_draw(k052109, bitmap, cliprect, 2, 0, 0); + k051960_sprites_draw(state->k051960, bitmap, cliprect, 1, 1); + k051316_zoom_draw(state->k051316, bitmap, cliprect, 0, 0); + k051960_sprites_draw(state->k051960, bitmap, cliprect, 0, 0); + k052109_tilemap_draw(state->k052109, bitmap, cliprect, 2, 0, 0); /* note that priority 3 is opposite to the basic layer priority! */ /* (it IS used, but hopefully has no effect) */ - k051960_sprites_draw(k051960, bitmap, cliprect, 2, 3); - k052109_tilemap_draw(k052109, bitmap, cliprect, 1, 0, 0); + k051960_sprites_draw(state->k051960, bitmap, cliprect, 2, 3); + k052109_tilemap_draw(state->k052109, bitmap, cliprect, 1, 0, 0); } return 0; } diff --git a/src/mame/video/chqflag.c b/src/mame/video/chqflag.c index fbb635f852f..0ed148121f9 100644 --- a/src/mame/video/chqflag.c +++ b/src/mame/video/chqflag.c @@ -8,8 +8,8 @@ #include "driver.h" #include "video/konicdev.h" +#include "includes/chqflag.h" -static int sprite_colorbase,zoom_colorbase[2]; /*************************************************************************** @@ -17,10 +17,11 @@ static int sprite_colorbase,zoom_colorbase[2]; ***************************************************************************/ -void chqflag_sprite_callback(running_machine *machine, int *code,int *color,int *priority,int *shadow) +void chqflag_sprite_callback( running_machine *machine, int *code, int *color, int *priority, int *shadow ) { + chqflag_state *state = (chqflag_state *)machine->driver_data; *priority = (*color & 0x10) >> 4; - *color = sprite_colorbase + (*color & 0x0f); + *color = state->sprite_colorbase + (*color & 0x0f); } @@ -30,16 +31,19 @@ void chqflag_sprite_callback(running_machine *machine, int *code,int *color,int ***************************************************************************/ -void chqflag_zoom_callback_0(running_machine *machine, int *code,int *color,int *flags) -{ *code |= ((*color & 0x03) << 8); - *color = zoom_colorbase[0] + ((*color & 0x3c) >> 2); +void chqflag_zoom_callback_0( running_machine *machine, int *code, int *color, int *flags ) +{ + chqflag_state *state = (chqflag_state *)machine->driver_data; + *code |= ((*color & 0x03) << 8); + *color = state->zoom_colorbase[0] + ((*color & 0x3c) >> 2); } -void chqflag_zoom_callback_1(running_machine *machine, int *code,int *color,int *flags) +void chqflag_zoom_callback_1( running_machine *machine, int *code, int *color, int *flags ) { + chqflag_state *state = (chqflag_state *)machine->driver_data; *flags = TILE_FLIPYX((*color & 0xc0) >> 6); *code |= ((*color & 0x0f) << 8); - *color = zoom_colorbase[1] + ((*color & 0x10) >> 4); + *color = state->zoom_colorbase[1] + ((*color & 0x10) >> 4); } /*************************************************************************** @@ -50,9 +54,15 @@ void chqflag_zoom_callback_1(running_machine *machine, int *code,int *color,int VIDEO_START( chqflag ) { - sprite_colorbase = 0; - zoom_colorbase[0] = 0x10; - zoom_colorbase[1] = 0x02; + chqflag_state *state = (chqflag_state *)machine->driver_data; + + machine->generic.paletteram.u8 = auto_alloc_array(machine, UINT8, 0x800); + + state->sprite_colorbase = 0; + state->zoom_colorbase[0] = 0x10; + state->zoom_colorbase[1] = 0x02; + + state_save_register_global_pointer(machine, machine->generic.paletteram.u8, 0x800); } /*************************************************************************** @@ -63,16 +73,14 @@ VIDEO_START( chqflag ) VIDEO_UPDATE( chqflag ) { - const device_config *k051960 = devtag_get_device(screen->machine, "k051960"); - const device_config *k051316_1 = devtag_get_device(screen->machine, "k051316_1"); - const device_config *k051316_2 = devtag_get_device(screen->machine, "k051316_2"); + chqflag_state *state = (chqflag_state *)screen->machine->driver_data; bitmap_fill(bitmap, cliprect, 0); - k051316_zoom_draw(k051316_2, bitmap, cliprect, TILEMAP_DRAW_LAYER1, 0); - k051960_sprites_draw(k051960, bitmap, cliprect, 0, 0); - k051316_zoom_draw(k051316_2, bitmap, cliprect, TILEMAP_DRAW_LAYER0, 0); - k051960_sprites_draw(k051960, bitmap, cliprect, 1, 1); - k051316_zoom_draw(k051316_1, bitmap, cliprect, 0, 0); + k051316_zoom_draw(state->k051316_2, bitmap, cliprect, TILEMAP_DRAW_LAYER1, 0); + k051960_sprites_draw(state->k051960, bitmap, cliprect, 0, 0); + k051316_zoom_draw(state->k051316_2, bitmap, cliprect, TILEMAP_DRAW_LAYER0, 0); + k051960_sprites_draw(state->k051960, bitmap, cliprect, 1, 1); + k051316_zoom_draw(state->k051316_1, bitmap, cliprect, 0, 0); return 0; } diff --git a/src/mame/video/crimfght.c b/src/mame/video/crimfght.c index 73e044f5e11..221c6202724 100644 --- a/src/mame/video/crimfght.c +++ b/src/mame/video/crimfght.c @@ -1,20 +1,21 @@ #include "driver.h" #include "video/konicdev.h" +#include "includes/crimfght.h" -static int layer_colorbase[3],sprite_colorbase; - /*************************************************************************** Callbacks for the K052109 ***************************************************************************/ -void crimfght_tile_callback(running_machine *machine, int layer,int bank,int *code,int *color,int *flags,int *priority) +void crimfght_tile_callback( running_machine *machine, int layer, int bank, int *code, int *color, int *flags, int *priority ) { + crimfght_state *state = (crimfght_state *)machine->driver_data; + *flags = (*color & 0x20) ? TILE_FLIPX : 0; *code |= ((*color & 0x1f) << 8) | (bank << 13); - *color = layer_colorbase[layer] + ((*color & 0xc0) >> 6); + *color = state->layer_colorbase[layer] + ((*color & 0xc0) >> 6); } /*************************************************************************** @@ -23,12 +24,14 @@ void crimfght_tile_callback(running_machine *machine, int layer,int bank,int *co ***************************************************************************/ -void crimfght_sprite_callback(running_machine *machine, int *code,int *color,int *priority,int *shadow) +void crimfght_sprite_callback( running_machine *machine, int *code, int *color, int *priority, int *shadow ) { /* Weird priority scheme. Why use three bits when two would suffice? */ /* The PROM allows for mixed priorities, where sprites would have */ /* priority over text but not on one or both of the other two planes. */ /* Luckily, this isn't used by the game. */ + crimfght_state *state = (crimfght_state *)machine->driver_data; + switch (*color & 0x70) { case 0x10: *priority = 0; break; @@ -42,7 +45,7 @@ void crimfght_sprite_callback(running_machine *machine, int *code,int *color,int } /* bit 7 is on in the "Game Over" sprites, meaning unknown */ /* in Aliens it is the top bit of the code, but that's not needed here */ - *color = sprite_colorbase + (*color & 0x0f); + *color = state->sprite_colorbase + (*color & 0x0f); } @@ -54,12 +57,16 @@ void crimfght_sprite_callback(running_machine *machine, int *code,int *color,int VIDEO_START( crimfght ) { + crimfght_state *state = (crimfght_state *)machine->driver_data; + machine->generic.paletteram.u8 = auto_alloc_array(machine, UINT8, 0x400); - layer_colorbase[0] = 0; - layer_colorbase[1] = 4; - layer_colorbase[2] = 8; - sprite_colorbase = 16; + state->layer_colorbase[0] = 0; + state->layer_colorbase[1] = 4; + state->layer_colorbase[2] = 8; + state->sprite_colorbase = 16; + + state_save_register_global_pointer(machine, machine->generic.paletteram.u8, 0x400); } @@ -72,16 +79,15 @@ VIDEO_START( crimfght ) VIDEO_UPDATE( crimfght ) { - const device_config *k052109 = devtag_get_device(screen->machine, "k052109"); - const device_config *k051960 = devtag_get_device(screen->machine, "k051960"); + crimfght_state *state = (crimfght_state *)screen->machine->driver_data; - k052109_tilemap_update(k052109); + k052109_tilemap_update(state->k052109); - k052109_tilemap_draw(k052109, bitmap, cliprect, 1, TILEMAP_DRAW_OPAQUE, 0); - k051960_sprites_draw(k051960, bitmap,cliprect,2,2); - k052109_tilemap_draw(k052109, bitmap, cliprect, 2, 0, 0); - k051960_sprites_draw(k051960, bitmap,cliprect,1,1); - k052109_tilemap_draw(k052109, bitmap, cliprect, 0, 0, 0); - k051960_sprites_draw(k051960, bitmap,cliprect,0,0); + k052109_tilemap_draw(state->k052109, bitmap, cliprect, 1, TILEMAP_DRAW_OPAQUE, 0); + k051960_sprites_draw(state->k051960, bitmap, cliprect, 2, 2); + k052109_tilemap_draw(state->k052109, bitmap, cliprect, 2, 0, 0); + k051960_sprites_draw(state->k051960, bitmap, cliprect, 1, 1); + k052109_tilemap_draw(state->k052109, bitmap, cliprect, 0, 0, 0); + k051960_sprites_draw(state->k051960, bitmap, cliprect, 0, 0); return 0; } diff --git a/src/mame/video/dbz.c b/src/mame/video/dbz.c index 2cbfc6477b9..459d6f9e1d6 100644 --- a/src/mame/video/dbz.c +++ b/src/mame/video/dbz.c @@ -10,150 +10,130 @@ #include "driver.h" #include "video/konicdev.h" +#include "includes/dbz.h" -static tilemap_t *dbz_bg1_tilemap, *dbz_bg2_tilemap; -UINT16 *dbz_bg1_videoram, *dbz_bg2_videoram; -static int sprite_colorbase, layer_colorbase[6], layer[5], layerpri[5]; -void dbz_tile_callback(running_machine *machine, int layer, int *code, int *color, int *flags) +void dbz_tile_callback( running_machine *machine, int layer, int *code, int *color, int *flags ) { - *color = (layer_colorbase[layer] << 1) + ((*color & 0x3c) >> 2); + dbz_state *state = (dbz_state *)machine->driver_data; + *color = (state->layer_colorbase[layer] << 1) + ((*color & 0x3c) >> 2); } -void dbz_sprite_callback(running_machine *machine, int *code, int *color, int *priority_mask) +void dbz_sprite_callback( running_machine *machine, int *code, int *color, int *priority_mask ) { + dbz_state *state = (dbz_state *)machine->driver_data; int pri = (*color & 0x3c0) >> 5; - if(pri <= layerpri[3]) *priority_mask = 0xff00; - else if (pri > layerpri[3] && pri <= layerpri[2]) *priority_mask = 0xfff0; - else if (pri > layerpri[2] && pri <= layerpri[1]) *priority_mask = 0xfffc; - else *priority_mask = 0xfffe; + if (pri <= state->layerpri[3]) + *priority_mask = 0xff00; + else if (pri > state->layerpri[3] && pri <= state->layerpri[2]) + *priority_mask = 0xfff0; + else if (pri > state->layerpri[2] && pri <= state->layerpri[1]) + *priority_mask = 0xfffc; + else + *priority_mask = 0xfffe; - *color = (sprite_colorbase << 1) + (*color & 0x1f); + *color = (state->sprite_colorbase << 1) + (*color & 0x1f); } /* Background Tilemaps */ WRITE16_HANDLER( dbz_bg2_videoram_w ) { - COMBINE_DATA(&dbz_bg2_videoram[offset]); - tilemap_mark_tile_dirty(dbz_bg2_tilemap,offset/2); + dbz_state *state = (dbz_state *)space->machine->driver_data; + COMBINE_DATA(&state->bg2_videoram[offset]); + tilemap_mark_tile_dirty(state->bg2_tilemap, offset / 2); } static TILE_GET_INFO( get_dbz_bg2_tile_info ) { + dbz_state *state = (dbz_state *)machine->driver_data; int tileno, colour, flag; - tileno = dbz_bg2_videoram[tile_index*2+1] & 0x7fff; - colour = (dbz_bg2_videoram[tile_index*2] & 0x000f); - flag = (dbz_bg2_videoram[tile_index*2] & 0x0080) ? TILE_FLIPX : 0; + tileno = state->bg2_videoram[tile_index * 2 + 1] & 0x7fff; + colour = (state->bg2_videoram[tile_index * 2] & 0x000f); + flag = (state->bg2_videoram[tile_index * 2] & 0x0080) ? TILE_FLIPX : 0; - SET_TILE_INFO(0,tileno,colour + (layer_colorbase[5] << 1),flag); + SET_TILE_INFO(0, tileno, colour + (state->layer_colorbase[5] << 1), flag); } WRITE16_HANDLER( dbz_bg1_videoram_w ) { - COMBINE_DATA(&dbz_bg1_videoram[offset]); - tilemap_mark_tile_dirty(dbz_bg1_tilemap,offset/2); + dbz_state *state = (dbz_state *)space->machine->driver_data; + COMBINE_DATA(&state->bg1_videoram[offset]); + tilemap_mark_tile_dirty(state->bg1_tilemap, offset / 2); } static TILE_GET_INFO( get_dbz_bg1_tile_info ) { + dbz_state *state = (dbz_state *)machine->driver_data; int tileno, colour, flag; - tileno = dbz_bg1_videoram[tile_index*2+1] & 0x7fff; - colour = (dbz_bg1_videoram[tile_index*2] & 0x000f); - flag = (dbz_bg1_videoram[tile_index*2] & 0x0080) ? TILE_FLIPX : 0; + tileno = state->bg1_videoram[tile_index * 2 + 1] & 0x7fff; + colour = (state->bg1_videoram[tile_index * 2] & 0x000f); + flag = (state->bg1_videoram[tile_index * 2] & 0x0080) ? TILE_FLIPX : 0; - SET_TILE_INFO(1,tileno,colour + (layer_colorbase[4] << 1),flag); -} - -/* useful function to sort the four tile layers by priority order */ -static void sortlayers(int *layer, int *pri) -{ -#define SWAP(a,b) \ - if (pri[a] <= pri[b]) \ - { \ - int t; \ - t = pri[a]; pri[a] = pri[b]; pri[b] = t; \ - t = layer[a]; layer[a] = layer[b]; layer[b] = t; \ - } - - SWAP(0, 1) - SWAP(0, 2) - SWAP(0, 3) - SWAP(0, 4) - SWAP(1, 2) - SWAP(1, 3) - SWAP(1, 4) - SWAP(2, 3) - SWAP(2, 4) - SWAP(3, 4) + SET_TILE_INFO(1, tileno, colour + (state->layer_colorbase[4] << 1), flag); } VIDEO_START( dbz ) { - const device_config *k056832 = devtag_get_device(machine, "k056832"); - const device_config *k053246 = devtag_get_device(machine, "k053246"); + dbz_state *state = (dbz_state *)machine->driver_data; - dbz_bg1_tilemap = tilemap_create(machine, get_dbz_bg1_tile_info, tilemap_scan_rows, 16, 16, 64, 32); - dbz_bg2_tilemap = tilemap_create(machine, get_dbz_bg2_tile_info, tilemap_scan_rows, 16, 16, 64, 32); + state->bg1_tilemap = tilemap_create(machine, get_dbz_bg1_tile_info, tilemap_scan_rows, 16, 16, 64, 32); + state->bg2_tilemap = tilemap_create(machine, get_dbz_bg2_tile_info, tilemap_scan_rows, 16, 16, 64, 32); - tilemap_set_transparent_pen(dbz_bg1_tilemap, 0); - tilemap_set_transparent_pen(dbz_bg2_tilemap, 0); + tilemap_set_transparent_pen(state->bg1_tilemap, 0); + tilemap_set_transparent_pen(state->bg2_tilemap, 0); if (!strcmp(machine->gamedrv->name, "dbz")) - k056832_set_layer_offs(k056832, 0, -34, -16); + k056832_set_layer_offs(state->k056832, 0, -34, -16); else - k056832_set_layer_offs(k056832, 0, -35, -16); + k056832_set_layer_offs(state->k056832, 0, -35, -16); - k056832_set_layer_offs(k056832, 1, -31, -16); - k056832_set_layer_offs(k056832, 3, -31, -16); //? + k056832_set_layer_offs(state->k056832, 1, -31, -16); + k056832_set_layer_offs(state->k056832, 3, -31, -16); //? - k053247_set_sprite_offs(k053246, -87, 32); + k053247_set_sprite_offs(state->k053246, -87, 32); } VIDEO_UPDATE( dbz ) { + dbz_state *state = (dbz_state *)screen->machine->driver_data; static const int K053251_CI[6] = { K053251_CI3, K053251_CI4, K053251_CI4, K053251_CI4, K053251_CI2, K053251_CI1 }; - const device_config *k056832 = devtag_get_device(screen->machine, "k056832"); - const device_config *k053246 = devtag_get_device(screen->machine, "k053246"); - const device_config *k053251 = devtag_get_device(screen->machine, "k053251"); - const device_config *k053936_1 = devtag_get_device(screen->machine, "k053936_1"); - const device_config *k053936_2 = devtag_get_device(screen->machine, "k053936_2"); - int plane, new_colorbase; + int layer[5], plane, new_colorbase; - sprite_colorbase = k053251_get_palette_index(k053251, K053251_CI0); + state->sprite_colorbase = k053251_get_palette_index(state->k053251, K053251_CI0); for (plane = 0; plane < 6; plane++) { - new_colorbase = k053251_get_palette_index(k053251, K053251_CI[plane]); - if (layer_colorbase[plane] != new_colorbase) + new_colorbase = k053251_get_palette_index(state->k053251, K053251_CI[plane]); + if (state->layer_colorbase[plane] != new_colorbase) { - layer_colorbase[plane] = new_colorbase; + state->layer_colorbase[plane] = new_colorbase; if (plane <= 3) - k056832_mark_plane_dirty(k056832, plane); - else if(plane == 4) - tilemap_mark_all_tiles_dirty(dbz_bg1_tilemap); - else if(plane == 5) - tilemap_mark_all_tiles_dirty(dbz_bg2_tilemap); + k056832_mark_plane_dirty(state->k056832, plane); + else if (plane == 4) + tilemap_mark_all_tiles_dirty(state->bg1_tilemap); + else if (plane == 5) + tilemap_mark_all_tiles_dirty(state->bg2_tilemap); } } //layers priority layer[0] = 0; - layerpri[0] = k053251_get_priority(k053251, K053251_CI3); + state->layerpri[0] = k053251_get_priority(state->k053251, K053251_CI3); layer[1] = 1; - layerpri[1] = k053251_get_priority(k053251, K053251_CI4); + state->layerpri[1] = k053251_get_priority(state->k053251, K053251_CI4); layer[2] = 3; - layerpri[2] = k053251_get_priority(k053251, K053251_CI0); + state->layerpri[2] = k053251_get_priority(state->k053251, K053251_CI0); layer[3] = 4; - layerpri[3] = k053251_get_priority(k053251, K053251_CI2); + state->layerpri[3] = k053251_get_priority(state->k053251, K053251_CI2); layer[4] = 5; - layerpri[4] = k053251_get_priority(k053251, K053251_CI1); + state->layerpri[4] = k053251_get_priority(state->k053251, K053251_CI1); - sortlayers(layer, layerpri); + konami_sortlayers5(layer, state->layerpri); bitmap_fill(screen->machine->priority_bitmap, cliprect, 0); @@ -173,14 +153,14 @@ VIDEO_UPDATE( dbz ) } if(layer[plane] == 4) - k053936_zoom_draw(k053936_2, bitmap, cliprect, dbz_bg1_tilemap, flag, pri, 1); + k053936_zoom_draw(state->k053936_2, bitmap, cliprect, state->bg1_tilemap, flag, pri, 1); else if(layer[plane] == 5) - k053936_zoom_draw(k053936_1, bitmap, cliprect, dbz_bg2_tilemap, flag, pri, 1); + k053936_zoom_draw(state->k053936_1, bitmap, cliprect, state->bg2_tilemap, flag, pri, 1); else - k056832_tilemap_draw(k056832, bitmap, cliprect, layer[plane], flag, pri); + k056832_tilemap_draw(state->k056832, bitmap, cliprect, layer[plane], flag, pri); } - k053247_sprites_draw(k053246, bitmap, cliprect); + k053247_sprites_draw(state->k053246, bitmap, cliprect); return 0; } diff --git a/src/mame/video/gbusters.c b/src/mame/video/gbusters.c index 84b5c9b5925..ce0ef553bbe 100644 --- a/src/mame/video/gbusters.c +++ b/src/mame/video/gbusters.c @@ -1,22 +1,20 @@ #include "driver.h" #include "video/konicdev.h" +#include "includes/gbusters.h" - -int gbusters_priority; -static int layer_colorbase[3],sprite_colorbase; - /*************************************************************************** Callbacks for the K052109 ***************************************************************************/ -void gbusters_tile_callback(running_machine *machine, int layer,int bank,int *code,int *color,int *flags, int *priority) +void gbusters_tile_callback( running_machine *machine, int layer, int bank, int *code, int *color, int *flags, int *priority ) { + gbusters_state *state = (gbusters_state *)machine->driver_data; /* (color & 0x02) is flip y handled internally by the 052109 */ *code |= ((*color & 0x0d) << 8) | ((*color & 0x10) << 5) | (bank << 12); - *color = layer_colorbase[layer] + ((*color & 0xe0) >> 5); + *color = state->layer_colorbase[layer] + ((*color & 0xe0) >> 5); } /*************************************************************************** @@ -25,10 +23,11 @@ void gbusters_tile_callback(running_machine *machine, int layer,int bank,int *co ***************************************************************************/ -void gbusters_sprite_callback(running_machine *machine, int *code,int *color,int *priority,int *shadow) +void gbusters_sprite_callback( running_machine *machine, int *code, int *color, int *priority, int *shadow ) { + gbusters_state *state = (gbusters_state *)machine->driver_data; *priority = (*color & 0x30) >> 4; - *color = sprite_colorbase + (*color & 0x0f); + *color = state->sprite_colorbase + (*color & 0x0f); } @@ -40,38 +39,38 @@ void gbusters_sprite_callback(running_machine *machine, int *code,int *color,int VIDEO_START( gbusters ) { - layer_colorbase[0] = 48; - layer_colorbase[1] = 0; - layer_colorbase[2] = 16; - sprite_colorbase = 32; + gbusters_state *state = (gbusters_state *)machine->driver_data; + state->layer_colorbase[0] = 48; + state->layer_colorbase[1] = 0; + state->layer_colorbase[2] = 16; + state->sprite_colorbase = 32; } VIDEO_UPDATE( gbusters ) { - const device_config *k052109 = devtag_get_device(screen->machine, "k052109"); - const device_config *k051960 = devtag_get_device(screen->machine, "k051960"); + gbusters_state *state = (gbusters_state *)screen->machine->driver_data; - k052109_tilemap_update(k052109); + k052109_tilemap_update(state->k052109); /* sprite priority 3 = disable */ - if (gbusters_priority) + if (state->priority) { -// k051960_sprites_draw(k051960, bitmap, cliprect, 1, 1); /* are these used? */ - k052109_tilemap_draw(k052109, bitmap, cliprect, 2, TILEMAP_DRAW_OPAQUE, 0); - k051960_sprites_draw(k051960, bitmap, cliprect, 2, 2); - k052109_tilemap_draw(k052109, bitmap, cliprect, 1, 0, 0); - k051960_sprites_draw(k051960, bitmap, cliprect, 0, 0); - k052109_tilemap_draw(k052109, bitmap, cliprect, 0, 0, 0); +// k051960_sprites_draw(state->k051960, bitmap, cliprect, 1, 1); /* are these used? */ + k052109_tilemap_draw(state->k052109, bitmap, cliprect, 2, TILEMAP_DRAW_OPAQUE, 0); + k051960_sprites_draw(state->k051960, bitmap, cliprect, 2, 2); + k052109_tilemap_draw(state->k052109, bitmap, cliprect, 1, 0, 0); + k051960_sprites_draw(state->k051960, bitmap, cliprect, 0, 0); + k052109_tilemap_draw(state->k052109, bitmap, cliprect, 0, 0, 0); } else { -// k051960_sprites_draw(k051960, bitmap, cliprect, 1, 1); /* are these used? */ - k052109_tilemap_draw(k052109, bitmap, cliprect, 1, TILEMAP_DRAW_OPAQUE, 0); - k051960_sprites_draw(k051960, bitmap, cliprect, 2, 2); - k052109_tilemap_draw(k052109, bitmap, cliprect, 2, 0, 0); - k051960_sprites_draw(k051960, bitmap, cliprect, 0, 0); - k052109_tilemap_draw(k052109, bitmap, cliprect, 0, 0, 0); +// k051960_sprites_draw(state->k051960, bitmap, cliprect, 1, 1); /* are these used? */ + k052109_tilemap_draw(state->k052109, bitmap, cliprect, 1, TILEMAP_DRAW_OPAQUE, 0); + k051960_sprites_draw(state->k051960, bitmap, cliprect, 2, 2); + k052109_tilemap_draw(state->k052109, bitmap, cliprect, 2, 0, 0); + k051960_sprites_draw(state->k051960, bitmap, cliprect, 0, 0); + k052109_tilemap_draw(state->k052109, bitmap, cliprect, 0, 0, 0); } return 0; } diff --git a/src/mame/video/gijoe.c b/src/mame/video/gijoe.c index 91df46b25c9..0c6e59c26d7 100644 --- a/src/mame/video/gijoe.c +++ b/src/mame/video/gijoe.c @@ -1,122 +1,125 @@ #include "driver.h" #include "video/konicdev.h" +#include "includes/gijoe.h" - -static int AVAC_bits[4], AVAC_occupancy[4]; -static int layer_colorbase[4], layer_pri[4]; -static int AVAC_vrc, sprite_colorbase; - -void gijoe_sprite_callback(running_machine *machine, int *code, int *color, int *priority_mask) +void gijoe_sprite_callback( running_machine *machine, int *code, int *color, int *priority_mask ) { - int pri, c = *color; - - pri = (c & 0x03e0) >> 4; - - if (pri <= layer_pri[3]) *priority_mask = 0; else - if (pri > layer_pri[3] && pri <= layer_pri[2]) *priority_mask = 0xff00; else - if (pri > layer_pri[2] && pri <= layer_pri[1]) *priority_mask = 0xff00|0xf0f0; else - if (pri > layer_pri[1] && pri <= layer_pri[0]) *priority_mask = 0xff00|0xf0f0|0xcccc; else - *priority_mask = 0xff00|0xf0f0|0xcccc|0xaaaa; + gijoe_state *state = (gijoe_state *)machine->driver_data; + int pri = (*color & 0x03e0) >> 4; + + if (pri <= state->layer_pri[3]) + *priority_mask = 0; + else if (pri > state->layer_pri[3] && pri <= state->layer_pri[2]) + *priority_mask = 0xff00; + else if (pri > state->layer_pri[2] && pri <= state->layer_pri[1]) + *priority_mask = 0xff00 | 0xf0f0; + else if (pri > state->layer_pri[1] && pri <= state->layer_pri[0]) + *priority_mask = 0xff00 | 0xf0f0 | 0xcccc; + else + *priority_mask = 0xff00 | 0xf0f0 | 0xcccc | 0xaaaa; - *color = sprite_colorbase | (c & 0x001f); + *color = state->sprite_colorbase | (*color & 0x001f); } -void gijoe_tile_callback(running_machine *machine, int layer, int *code, int *color, int *flags) +void gijoe_tile_callback( running_machine *machine, int layer, int *code, int *color, int *flags ) { + gijoe_state *state = (gijoe_state *)machine->driver_data; int tile = *code; if (tile >= 0xf000 && tile <= 0xf4ff) { tile &= 0x0fff; - if (tile < 0x0310) { AVAC_occupancy[layer] |= 0x0f00; tile |= AVAC_bits[0]; } else - if (tile < 0x0470) { AVAC_occupancy[layer] |= 0xf000; tile |= AVAC_bits[1]; } else - { AVAC_occupancy[layer] |= 0x00f0; tile |= AVAC_bits[2]; } + if (tile < 0x0310) + { + state->avac_occupancy[layer] |= 0x0f00; + tile |= state->avac_bits[0]; + } + else if (tile < 0x0470) + { + state->avac_occupancy[layer] |= 0xf000; + tile |= state->avac_bits[1]; + } + else + { + state->avac_occupancy[layer] |= 0x00f0; + tile |= state->avac_bits[2]; + } *code = tile; } - *color = (*color>>2 & 0x0f) | layer_colorbase[layer]; + *color = (*color >> 2 & 0x0f) | state->layer_colorbase[layer]; } VIDEO_START( gijoe ) { - const device_config *k056832 = devtag_get_device(machine, "k056832"); + gijoe_state *state = (gijoe_state *)machine->driver_data; int i; - k056832_linemap_enable(k056832, 1); + k056832_linemap_enable(state->k056832, 1); for (i = 0; i < 4; i++) - AVAC_occupancy[i] = 0; - - AVAC_vrc = 0xffff; -} - -/* useful function to sort the four tile layers by priority order */ -static void sortlayers(int *layer, int *pri) -{ -#define SWAP(a,b) \ - if (pri[a] <= pri[b]) \ - { \ - int t; \ - t = pri[a]; pri[a] = pri[b]; pri[b] = t; \ - t = layer[a]; layer[a] = layer[b]; layer[b] = t; \ + { + state->avac_occupancy[i] = 0; + state->avac_bits[i] = 0; + state->layer_colorbase[i] = 0; + state->layer_pri[i] = 0; } - SWAP(0, 1) - SWAP(0, 2) - SWAP(0, 3) - SWAP(1, 2) - SWAP(1, 3) - SWAP(2, 3) + state->avac_vrc = 0xffff; + + state_save_register_global(machine, state->avac_vrc); + state_save_register_global(machine, state->sprite_colorbase); + state_save_register_global_array(machine, state->avac_occupancy); + state_save_register_global_array(machine, state->avac_bits); // these could possibly be re-created at postload k056832 elements + state_save_register_global_array(machine, state->layer_colorbase); + state_save_register_global_array(machine, state->layer_pri); } VIDEO_UPDATE( gijoe ) { - const device_config *k056832 = devtag_get_device(screen->machine, "k056832"); - const device_config *k053251 = devtag_get_device(screen->machine, "k053251"); - const device_config *k053246 = devtag_get_device(screen->machine, "k053246"); + gijoe_state *state = (gijoe_state *)screen->machine->driver_data; static const int K053251_CI[4] = { K053251_CI1, K053251_CI2, K053251_CI3, K053251_CI4 }; int layer[4]; int vrc_mode, vrc_new, colorbase_new, primode, dirty, i; int mask = 0; // update tile offsets - k056832_read_avac(k056832, &vrc_mode, &vrc_new); + k056832_read_avac(state->k056832, &vrc_mode, &vrc_new); if (vrc_mode) { for (dirty = 0xf000; dirty; dirty >>= 4) - if ((AVAC_vrc & dirty) != (vrc_new & dirty)) + if ((state->avac_vrc & dirty) != (vrc_new & dirty)) mask |= dirty; - AVAC_vrc = vrc_new; - AVAC_bits[0] = vrc_new<<4 & 0xf000; - AVAC_bits[1] = vrc_new & 0xf000; - AVAC_bits[2] = vrc_new<<8 & 0xf000; - AVAC_bits[3] = vrc_new<<12 & 0xf000; + state->avac_vrc = vrc_new; + state->avac_bits[0] = vrc_new << 4 & 0xf000; + state->avac_bits[1] = vrc_new & 0xf000; + state->avac_bits[2] = vrc_new << 8 & 0xf000; + state->avac_bits[3] = vrc_new << 12 & 0xf000; } else - AVAC_bits[3] = AVAC_bits[2] = AVAC_bits[1] = AVAC_bits[0] = 0xf000; + state->avac_bits[3] = state->avac_bits[2] = state->avac_bits[1] = state->avac_bits[0] = 0xf000; // update color info and refresh tilemaps - sprite_colorbase = k053251_get_palette_index(k053251, K053251_CI0); + state->sprite_colorbase = k053251_get_palette_index(state->k053251, K053251_CI0); for (i = 0; i < 4; i++) { dirty = 0; - - colorbase_new = k053251_get_palette_index(k053251, K053251_CI[i]); - if (layer_colorbase[i] != colorbase_new) + colorbase_new = k053251_get_palette_index(state->k053251, K053251_CI[i]); + if (state->layer_colorbase[i] != colorbase_new) { - layer_colorbase[i] = colorbase_new; + state->layer_colorbase[i] = colorbase_new; dirty = 1; } - if (AVAC_occupancy[i] & mask) + if (state->avac_occupancy[i] & mask) dirty = 1; if (dirty) { - AVAC_occupancy[i] = 0; - k056832_mark_plane_dirty(k056832, i); + state->avac_occupancy[i] = 0; + k056832_mark_plane_dirty(state->k056832, i); } } @@ -126,43 +129,43 @@ VIDEO_UPDATE( gijoe ) written to the layer's X-scroll register otherwise the chip expects totally different alignment values. */ - if (k056832_read_register(k056832, 0x14) == 2) + if (k056832_read_register(state->k056832, 0x14) == 2) { - k056832_set_layer_offs(k056832, 0, 2, 0); - k056832_set_layer_offs(k056832, 1, 4, 0); - k056832_set_layer_offs(k056832, 2, 6, 0); // 7? - k056832_set_layer_offs(k056832, 3, 8, 0); + k056832_set_layer_offs(state->k056832, 0, 2, 0); + k056832_set_layer_offs(state->k056832, 1, 4, 0); + k056832_set_layer_offs(state->k056832, 2, 6, 0); // 7? + k056832_set_layer_offs(state->k056832, 3, 8, 0); } else { - k056832_set_layer_offs(k056832, 0, 0, 0); - k056832_set_layer_offs(k056832, 1, 8, 0); - k056832_set_layer_offs(k056832, 2, 14, 0); - k056832_set_layer_offs(k056832, 3, 16, 0); // smaller? + k056832_set_layer_offs(state->k056832, 0, 0, 0); + k056832_set_layer_offs(state->k056832, 1, 8, 0); + k056832_set_layer_offs(state->k056832, 2, 14, 0); + k056832_set_layer_offs(state->k056832, 3, 16, 0); // smaller? } // seems to switch the K053251 between different priority modes, detail unknown - primode = k053251_get_priority(k053251, K053251_CI1); + primode = k053251_get_priority(state->k053251, K053251_CI1); layer[0] = 0; - layer_pri[0] = 0; // not sure + state->layer_pri[0] = 0; // not sure layer[1] = 1; - layer_pri[1] = k053251_get_priority(k053251, K053251_CI2); + state->layer_pri[1] = k053251_get_priority(state->k053251, K053251_CI2); layer[2] = 2; - layer_pri[2] = k053251_get_priority(k053251, K053251_CI3); + state->layer_pri[2] = k053251_get_priority(state->k053251, K053251_CI3); layer[3] = 3; - layer_pri[3] = k053251_get_priority(k053251, K053251_CI4); + state->layer_pri[3] = k053251_get_priority(state->k053251, K053251_CI4); - sortlayers(layer, layer_pri); + konami_sortlayers4(layer, state->layer_pri); bitmap_fill(bitmap, cliprect, get_black_pen(screen->machine)); bitmap_fill(screen->machine->priority_bitmap, cliprect, 0); - k056832_tilemap_draw(k056832, bitmap,cliprect, layer[0], 0, 1); - k056832_tilemap_draw(k056832, bitmap,cliprect, layer[1], 0, 2); - k056832_tilemap_draw(k056832, bitmap,cliprect, layer[2], 0, 4); - k056832_tilemap_draw(k056832, bitmap,cliprect, layer[3], 0, 8); + k056832_tilemap_draw(state->k056832, bitmap, cliprect, layer[0], 0, 1); + k056832_tilemap_draw(state->k056832, bitmap, cliprect, layer[1], 0, 2); + k056832_tilemap_draw(state->k056832, bitmap, cliprect, layer[2], 0, 4); + k056832_tilemap_draw(state->k056832, bitmap, cliprect, layer[3], 0, 8); - k053247_sprites_draw(k053246, bitmap, cliprect); + k053247_sprites_draw(state->k053246, bitmap, cliprect); return 0; } diff --git a/src/mame/video/konicdev.c b/src/mame/video/konicdev.c index c3f7d9fb5cb..8cbe96429a3 100644 --- a/src/mame/video/konicdev.c +++ b/src/mame/video/konicdev.c @@ -1262,6 +1262,68 @@ static void deinterleave_gfx(running_machine *machine, const char *gfx_memory_re } } +/* useful function to sort three tile layers by priority order */ +void konami_sortlayers3( int *layer, int *pri ) +{ +#define SWAP(a,b) \ + if (pri[a] < pri[b]) \ + { \ + int t; \ + t = pri[a]; pri[a] = pri[b]; pri[b] = t; \ + t = layer[a]; layer[a] = layer[b]; layer[b] = t; \ + } + + SWAP(0,1) + SWAP(0,2) + SWAP(1,2) +#undef SWAP +} + +/* useful function to sort four tile layers by priority order */ +void konami_sortlayers4( int *layer, int *pri ) +{ +#define SWAP(a,b) \ + if (pri[a] <= pri[b]) \ + { \ + int t; \ + t = pri[a]; pri[a] = pri[b]; pri[b] = t; \ + t = layer[a]; layer[a] = layer[b]; layer[b] = t; \ + } + + SWAP(0, 1) + SWAP(0, 2) + SWAP(0, 3) + SWAP(1, 2) + SWAP(1, 3) + SWAP(2, 3) +#undef SWAP +} + +/* useful function to sort five tile layers by priority order */ +void konami_sortlayers5( int *layer, int *pri ) +{ +#define SWAP(a,b) \ + if (pri[a] <= pri[b]) \ + { \ + int t; \ + t = pri[a]; pri[a] = pri[b]; pri[b] = t; \ + t = layer[a]; layer[a] = layer[b]; layer[b] = t; \ + } + + SWAP(0, 1) + SWAP(0, 2) + SWAP(0, 3) + SWAP(0, 4) + SWAP(1, 2) + SWAP(1, 3) + SWAP(1, 4) + SWAP(2, 3) + SWAP(2, 4) + SWAP(3, 4) +#undef SWAP +} + + /***************************************************************************/ /* */ /* 007121 */ @@ -2108,7 +2170,7 @@ struct _k052109_state UINT8 charrombank[4]; UINT8 charrombank_2[4]; UINT8 has_extra_video_ram; - INT32 RMRD_line; + INT32 rmrd_line; UINT8 irq_enabled; INT32 dx[3], dy[3]; UINT8 romsubbank, scrollctrl; @@ -2147,7 +2209,7 @@ READ8_DEVICE_HANDLER( k052109_r ) { k052109_state *k052109 = k052109_get_safe_token(device); - if (k052109->RMRD_line == CLEAR_LINE) + if (k052109->rmrd_line == CLEAR_LINE) { if ((offset & 0x1fff) >= 0x1800) { @@ -2347,13 +2409,13 @@ WRITE16_DEVICE_HANDLER( k052109_lsb_w ) void k052109_set_rmrd_line( const device_config *device, int state ) { k052109_state *k052109 = k052109_get_safe_token(device); - k052109->RMRD_line = state; + k052109->rmrd_line = state; } int k052109_get_rmrd_line(const device_config *device ) { k052109_state *k052109 = k052109_get_safe_token(device); - return k052109->RMRD_line; + return k052109->rmrd_line; } @@ -2694,7 +2756,7 @@ static DEVICE_START( k052109 ) tilemap_set_transparent_pen(k052109->tilemap[2], 0); state_save_register_device_item_pointer(device, 0, k052109->ram, 0x6000); - state_save_register_device_item(device, 0, k052109->RMRD_line); + state_save_register_device_item(device, 0, k052109->rmrd_line); state_save_register_device_item(device, 0, k052109->romsubbank); state_save_register_device_item(device, 0, k052109->scrollctrl); state_save_register_device_item(device, 0, k052109->irq_enabled); @@ -2711,15 +2773,22 @@ static DEVICE_RESET( k052109 ) k052109_state *k052109 = k052109_get_safe_token(device); int i; - k052109->RMRD_line = CLEAR_LINE; + k052109->rmrd_line = CLEAR_LINE; k052109->irq_enabled = 0; + k052109->romsubbank = 0; + k052109->scrollctrl = 0; k052109->has_extra_video_ram = 0; for (i = 0; i < 3; i++) k052109->dx[i] = k052109->dy[i] = 0; -} + for (i = 0; i < 4; i++) + { + k052109->charrombank[i] = 0; + k052109->charrombank_2[i] = 0; + } +} /***************************************************************************/ /* */ @@ -3245,36 +3314,18 @@ static DEVICE_RESET( k051960 ) k051960->dx = k051960->dy = 0; k051960->k051937_counter = 0; -} + k051960->romoffset = 0; + k051960->spriteflip = 0; + k051960->readroms = 0; + k051960->irq_enabled = 0; + k051960->nmi_enabled = 0; -#if 0 // to be moved in the specific drivers! -READ8_DEVICE_HANDLER( k052109_051960_r ) -{ - if (k052109_RMRD_line == CLEAR_LINE) - { - if (offset >= 0x3800 && offset < 0x3808) - return k051937_r(space,offset - 0x3800); - else if (offset < 0x3c00) - return k052109_r(space,offset); - else - return k051960_r(space,offset - 0x3c00); - } - else return k052109_r(space,offset); + k051960->spriterombank[0] = 0; + k051960->spriterombank[1] = 0; + k051960->spriterombank[2] = 0; } -WRITE8_DEVICE_HANDLER( k052109_051960_w ) -{ - if (offset >= 0x3800 && offset < 0x3808) - k051937_w(space,offset - 0x3800,data); - else if (offset < 0x3c00) - k052109_w(space,offset,data); - else - k051960_w(space,offset - 0x3c00,data); -} -#endif - - /***************************************************************************/ /* */ /* 05324x Family Sprite Generators */ @@ -4084,8 +4135,8 @@ struct _k053247_state gfx_element *gfx; - UINT8 Kx46_regs[8]; - UINT16 Kx47_regs[16]; + UINT8 kx46_regs[8]; + UINT16 kx47_regs[16]; int dx, dy, wraparound; UINT8 objcha_line; int z_rejection; @@ -4158,13 +4209,13 @@ int k053247_get_dy( const device_config *device ) int k053246_read_register( const device_config *device, int regnum ) { k053247_state *k053247 = k053247_get_safe_token(device); - return(k053247->Kx46_regs[regnum]); + return(k053247->kx46_regs[regnum]); } int k053247_read_register( const device_config *device, int regnum ) { k053247_state *k053247 = k053247_get_safe_token(device); - return(k053247->Kx47_regs[regnum]); + return(k053247->kx47_regs[regnum]); } void k053247_set_sprite_offs( const device_config *device, int offsx, int offsy ) @@ -4183,17 +4234,17 @@ void k053247_wraparound_enable( const device_config *device, int status ) WRITE16_DEVICE_HANDLER( k053247_reg_word_w ) // write-only OBJSET2 registers (see p.43 table 6.1) { k053247_state *k053247 = k053247_get_safe_token(device); - COMBINE_DATA(k053247->Kx47_regs + offset); + COMBINE_DATA(k053247->kx47_regs + offset); } WRITE32_DEVICE_HANDLER( k053247_reg_long_w ) { k053247_state *k053247 = k053247_get_safe_token(device); offset <<= 1; - COMBINE_DATA(k053247->Kx47_regs + offset + 1); + COMBINE_DATA(k053247->kx47_regs + offset + 1); mem_mask >>= 16; data >>= 16; - COMBINE_DATA(k053247->Kx47_regs + offset); + COMBINE_DATA(k053247->kx47_regs + offset); } READ16_DEVICE_HANDLER( k053247_word_r ) @@ -4261,7 +4312,7 @@ READ16_DEVICE_HANDLER( k055673_rom_word_r ) // 5bpp size4 *= 4 * 1024 * 1024; // get offset to 5th bit ROM8 += size4; - romofs = k053246->Kx46_regs[6] << 16 | k053246->Kx46_regs[7] << 8 | k053246->Kx46_regs[4]; + romofs = k053246->kx46_regs[6] << 16 | k053246->kx46_regs[7] << 8 | k053246->kx46_regs[4]; switch (offset) { @@ -4295,7 +4346,7 @@ READ16_DEVICE_HANDLER( k055673_GX6bpp_rom_word_r ) UINT16 *ROM = (UINT16 *)memory_region(device->machine, k053246->memory_region); int romofs; - romofs = k053246->Kx46_regs[6] << 16 | k053246->Kx46_regs[7] << 8 | k053246->Kx46_regs[4]; + romofs = k053246->kx46_regs[6] << 16 | k053246->kx46_regs[7] << 8 | k053246->kx46_regs[4]; romofs /= 4; // romofs increments 4 at a time romofs *= 12 / 2; // each increment of romofs = 12 new bytes (6 new words) @@ -4331,7 +4382,7 @@ READ8_DEVICE_HANDLER( k053246_r ) { int addr; - addr = (k053246->Kx46_regs[6] << 17) | (k053246->Kx46_regs[7] << 9) | (k053246->Kx46_regs[4] << 1) | ((offset & 1) ^ 1); + addr = (k053246->kx46_regs[6] << 17) | (k053246->kx46_regs[7] << 9) | (k053246->kx46_regs[4] << 1) | ((offset & 1) ^ 1); addr &= memory_region_length(device->machine, k053246->memory_region) - 1; // if (VERBOSE) // popmessage("%04x: offset %02x addr %06x", cpu_get_pc(space->cpu), offset, addr); @@ -4347,7 +4398,7 @@ READ8_DEVICE_HANDLER( k053246_r ) WRITE8_DEVICE_HANDLER( k053246_w ) { k053247_state *k053247 = k053247_get_safe_token(device); - k053247->Kx46_regs[offset] = data; + k053247->kx46_regs[offset] = data; } READ16_DEVICE_HANDLER( k053246_word_r ) @@ -4387,7 +4438,7 @@ int k053246_is_irq_enabled( const device_config *device ) { k053247_state *k053247 = k053247_get_safe_token(device); // This bit enables obj DMA rather than obj IRQ even though the two functions usually coincide. - return k053247->Kx46_regs[5] & 0x10; + return k053247->kx46_regs[5] & 0x10; } /* @@ -4443,10 +4494,10 @@ void k053247_sprites_draw( const device_config *device, bitmap_t *bitmap, const int ox, oy, color, code, size, w, h, x, y, xa, ya, flipx, flipy, mirrorx, mirrory, shadow, zoomx, zoomy, primask; int shdmask, nozoom, count, temp; - int flipscreenx = k053246->Kx46_regs[5] & 0x01; - int flipscreeny = k053246->Kx46_regs[5] & 0x02; - int offx = (short)((k053246->Kx46_regs[0] << 8) | k053246->Kx46_regs[1]); - int offy = (short)((k053246->Kx46_regs[2] << 8) | k053246->Kx46_regs[3]); + int flipscreenx = k053246->kx46_regs[5] & 0x01; + int flipscreeny = k053246->kx46_regs[5] & 0x02; + int offx = (short)((k053246->kx46_regs[0] << 8) | k053246->kx46_regs[1]); + int offy = (short)((k053246->kx46_regs[2] << 8) | k053246->kx46_regs[3]); int screen_width = video_screen_get_width(k053246->screen); UINT8 drawmode_table[256]; @@ -4519,7 +4570,7 @@ void k053247_sprites_draw( const device_config *device, bitmap_t *bitmap, const count--; h = count; - if (!(k053246->Kx47_regs[0xc / 2] & 0x10)) + if (!(k053246->kx47_regs[0xc / 2] & 0x10)) { // sort objects in decending order(smaller z closer) when OPSET PRI is clear for (y = 0; y < h; y++) @@ -4633,7 +4684,7 @@ void k053247_sprites_draw( const device_config *device, bitmap_t *bitmap, const // Below 7 lines supports this 053246's(???) function. // Don't rely on it, Please. But, Escape Kids works correctly! // ************************************************************************************ - if ( k053246->Kx46_regs[5] & 0x08 ) // Check only "Bit #3 is '1'?" (NOTE: good guess) + if ( k053246->kx46_regs[5] & 0x08 ) // Check only "Bit #3 is '1'?" (NOTE: good guess) { zoomx >>= 1; // Fix sprite width to HALF size ox = (ox >> 1) + 1; // Fix sprite draw position @@ -4878,11 +4929,11 @@ static DEVICE_START( k053247 ) k053247->gfx = machine->gfx[intf->gfx_num]; k053247->callback = intf->callback; - k053247->ram = auto_alloc_array(machine, UINT16, 0x1000/2); + k053247->ram = auto_alloc_array_clear(machine, UINT16, 0x1000 / 2); - state_save_register_device_item_pointer(device, 0, k053247->ram, 0x800); - state_save_register_device_item_array(device, 0, k053247->Kx46_regs); - state_save_register_device_item_array(device, 0, k053247->Kx47_regs); + state_save_register_device_item_pointer(device, 0, k053247->ram, 0x1000 / 2); + state_save_register_device_item_array(device, 0, k053247->kx46_regs); + state_save_register_device_item_array(device, 0, k053247->kx47_regs); state_save_register_device_item(device, 0, k053247->objcha_line); state_save_register_device_item(device, 0, k053247->wraparound); state_save_register_device_item(device, 0, k053247->z_rejection); @@ -5004,8 +5055,8 @@ static DEVICE_START( k055673 ) k053247->ram = auto_alloc_array(machine, UINT16, 0x1000 / 2); state_save_register_device_item_pointer(device, 0, k053247->ram, 0x800); - state_save_register_device_item_array(device, 0, k053247->Kx46_regs); - state_save_register_device_item_array(device, 0, k053247->Kx47_regs); + state_save_register_device_item_array(device, 0, k053247->kx46_regs); + state_save_register_device_item_array(device, 0, k053247->kx47_regs); state_save_register_device_item(device, 0, k053247->objcha_line); state_save_register_device_item(device, 0, k053247->wraparound); state_save_register_device_item(device, 0, k053247->z_rejection); @@ -5019,8 +5070,8 @@ static DEVICE_RESET( k053247 ) k053247->z_rejection = -1; k053247->objcha_line = CLEAR_LINE; - memset(k053247->Kx46_regs, 0, 8); - memset(k053247->Kx47_regs, 0, 32); + memset(k053247->kx46_regs, 0, 8); + memset(k053247->kx47_regs, 0, 32); } /* @@ -5722,6 +5773,8 @@ static DEVICE_RESET( k053251 ) k053251_state *k053251 = k053251_get_safe_token(device); int i; + k053251->tilemaps_set = 0; + for (i = 0; i < 0x10; i++) k053251->ram[i] = 0; @@ -10762,13 +10815,13 @@ READ16_DEVICE_HANDLER( k056832_b_word_r ) READ16_DEVICE_HANDLER( k053246_reg_word_r ) { k053247_state *k053247 = k053247_get_safe_token(device); - return(k053247->Kx46_regs[offset * 2] << 8 | k053247->Kx46_regs[offset * 2 + 1]); + return(k053247->kx46_regs[offset * 2] << 8 | k053247->kx46_regs[offset * 2 + 1]); } // OBJSET1 READ16_DEVICE_HANDLER( k053247_reg_word_r ) { k053247_state *k053247 = k053247_get_safe_token(device); - return(k053247->Kx47_regs[offset]); + return(k053247->kx47_regs[offset]); } // OBJSET2 READ16_DEVICE_HANDLER( k054338_word_r ) diff --git a/src/mame/video/konicdev.h b/src/mame/video/konicdev.h index 69b2eb07094..170b9646e09 100644 --- a/src/mame/video/konicdev.h +++ b/src/mame/video/konicdev.h @@ -354,6 +354,13 @@ void konamid_rom_deinterleave_2_half(running_machine *machine, const char *mem_r /* helper function to join four 16-bit ROMs and form a 64-bit data stream */ void konamid_rom_deinterleave_4(running_machine *machine, const char *mem_region); +/* helper function to sort three tile layers by priority order */ +void konami_sortlayers3(int *layer, int *pri); +/* helper function to sort four tile layers by priority order */ +void konami_sortlayers4(int *layer, int *pri); +/* helper function to sort five tile layers by priority order */ +void konami_sortlayers5(int *layer, int *pri); + /*************************************************************************** DEVICE I/O FUNCTIONS ***************************************************************************/ diff --git a/src/mame/video/lethal.c b/src/mame/video/lethal.c index d23b91c8f03..c93e8ffb1d8 100644 --- a/src/mame/video/lethal.c +++ b/src/mame/video/lethal.c @@ -1,119 +1,122 @@ /*************************************************************************** - Lethal Enforcers - (c) 1992 Konami + Lethal Enforcers + (c) 1992 Konami - Video hardware emulation. + Video hardware emulation. ***************************************************************************/ #include "driver.h" #include "video/konicdev.h" +#include "includes/lethal.h" - -static int sprite_colorbase; -static int layer_colorbase[4]; -//static int layerpri[4] ={ 1,2,4,0 }; - -void lethalen_sprite_callback(running_machine *machine, int *code, int *color, int *priority_mask) +void lethalen_sprite_callback( running_machine *machine, int *code, int *color, int *priority_mask ) { int pri = (*color & 0xfff0); *color = *color & 0x000f; - *color+=0x400/64; // colourbase? + *color += 0x400 / 64; // colourbase? /* this isn't ideal.. shouldn't need to hardcode it? not 100% sure about it anyway*/ - if (pri==0x10) *priority_mask = 0xf0; // guys on first level - else if (pri==0x90) *priority_mask = 0xf0; // car doors - else if (pri==0x20) *priority_mask = 0xf0|0xcc; // people behind glass on 1st level - else if (pri==0xa0) *priority_mask = 0xf0|0xcc; // glass on 1st/2nd level - else if (pri==0x40) *priority_mask = 0; // blood splats? - else if (pri==0x00) *priority_mask = 0; // gunshots etc - else if (pri==0x30) *priority_mask = 0xf0|0xcc|0xaa; // mask sprites (always in a bad colour, used to do special effects i think + if (pri == 0x10) + *priority_mask = 0xf0; // guys on first level + else if (pri == 0x90) + *priority_mask = 0xf0; // car doors + else if (pri == 0x20) + *priority_mask = 0xf0 | 0xcc; // people behind glass on 1st level + else if (pri == 0xa0) + *priority_mask = 0xf0 | 0xcc; // glass on 1st/2nd level + else if (pri == 0x40) + *priority_mask = 0; // blood splats? + else if (pri == 0x00) + *priority_mask = 0; // gunshots etc + else if (pri == 0x30) + *priority_mask = 0xf0 | 0xcc | 0xaa; // mask sprites (always in a bad colour, used to do special effects i think else { - popmessage("unknown pri %04x\n",pri); + popmessage("unknown pri %04x\n", pri); *priority_mask = 0; } *code = (*code & 0x3fff); // | spritebanks[(*code >> 12) & 3]; } -void lethalen_tile_callback(running_machine *machine, int layer, int *code, int *color, int *flags) +void lethalen_tile_callback( running_machine *machine, int layer, int *code, int *color, int *flags ) { - *color = layer_colorbase[layer] + ((*color & 0x3c)<<2); + lethal_state *state = (lethal_state *)machine->driver_data; + *color = state->layer_colorbase[layer] + ((*color & 0x3c) << 2); } VIDEO_START(lethalen) { - const device_config *k056832 = devtag_get_device(machine, "k056832"); + lethal_state *state = (lethal_state *)machine->driver_data; // this game uses external linescroll RAM - k056832_SetExtLinescroll(k056832); + k056832_SetExtLinescroll(state->k056832); // the US and Japanese cabinets apparently use different mirror setups if (!strcmp(machine->gamedrv->name, "lethalenj")) { - k056832_set_layer_offs(k056832, 0, -196, 0); - k056832_set_layer_offs(k056832, 1, -194, 0); - k056832_set_layer_offs(k056832, 2, -192, 0); - k056832_set_layer_offs(k056832, 3, -190, 0); + k056832_set_layer_offs(state->k056832, 0, -196, 0); + k056832_set_layer_offs(state->k056832, 1, -194, 0); + k056832_set_layer_offs(state->k056832, 2, -192, 0); + k056832_set_layer_offs(state->k056832, 3, -190, 0); } else { /* fixme */ - k056832_set_layer_offs(k056832, 0, 188, 0); - k056832_set_layer_offs(k056832, 1, 190, 0); - k056832_set_layer_offs(k056832, 2, 192, 0); - k056832_set_layer_offs(k056832, 3, 194, 0); + k056832_set_layer_offs(state->k056832, 0, 188, 0); + k056832_set_layer_offs(state->k056832, 1, 190, 0); + k056832_set_layer_offs(state->k056832, 2, 192, 0); + k056832_set_layer_offs(state->k056832, 3, 194, 0); } - layer_colorbase[0] = 0x00; - layer_colorbase[1] = 0x40; - layer_colorbase[2] = 0x80; - layer_colorbase[3] = 0xc0; + state->layer_colorbase[0] = 0x00; + state->layer_colorbase[1] = 0x40; + state->layer_colorbase[2] = 0x80; + state->layer_colorbase[3] = 0xc0; } WRITE8_HANDLER(lethalen_palette_control) { - const device_config *k056832 = devtag_get_device(space->machine, "k056832"); + lethal_state *state = (lethal_state *)space->machine->driver_data; switch (offset) { case 0: // 40c8 - PCU1 from schematics - layer_colorbase[0] = ((data & 0x7)-1) * 0x40; - layer_colorbase[1] = (((data>>4) & 0x7)-1) * 0x40; - k056832_mark_plane_dirty(k056832, 0); - k056832_mark_plane_dirty(k056832, 1); + state->layer_colorbase[0] = ((data & 0x7) - 1) * 0x40; + state->layer_colorbase[1] = (((data >> 4) & 0x7) - 1) * 0x40; + k056832_mark_plane_dirty(state->k056832, 0); + k056832_mark_plane_dirty(state->k056832, 1); break; case 4: // 40cc - PCU2 from schematics - layer_colorbase[2] = ((data & 0x7)-1) * 0x40; - layer_colorbase[3] = (((data>>4) & 0x7)-1) * 0x40; - k056832_mark_plane_dirty(k056832, 2); - k056832_mark_plane_dirty(k056832, 3); + state->layer_colorbase[2] = ((data & 0x7) - 1) * 0x40; + state->layer_colorbase[3] = (((data >> 4) & 0x7) - 1) * 0x40; + k056832_mark_plane_dirty(state->k056832, 2); + k056832_mark_plane_dirty(state->k056832, 3); break; case 8: // 40d0 - PCU3 from schematics - sprite_colorbase = ((data & 0x7)-1) * 0x40; + state->sprite_colorbase = ((data & 0x7) - 1) * 0x40; break; } } VIDEO_UPDATE(lethalen) { - const device_config *k056832 = devtag_get_device(screen->machine, "k056832"); - const device_config *k053244 = devtag_get_device(screen->machine, "k053244"); + lethal_state *state = (lethal_state *)screen->machine->driver_data; bitmap_fill(bitmap, cliprect, 7168); bitmap_fill(screen->machine->priority_bitmap, cliprect, 0); - k056832_tilemap_draw(k056832, bitmap, cliprect, 3, 0, 1); - k056832_tilemap_draw(k056832, bitmap, cliprect, 2, 0, 2); - k056832_tilemap_draw(k056832, bitmap, cliprect, 1, 0, 4); + k056832_tilemap_draw(state->k056832, bitmap, cliprect, 3, 0, 1); + k056832_tilemap_draw(state->k056832, bitmap, cliprect, 2, 0, 2); + k056832_tilemap_draw(state->k056832, bitmap, cliprect, 1, 0, 4); - k053245_sprites_draw_lethal(k053244, bitmap, cliprect); + k053245_sprites_draw_lethal(state->k053244, bitmap, cliprect); // force "A" layer over top of everything - k056832_tilemap_draw(k056832, bitmap, cliprect, 0, 0, 0); + k056832_tilemap_draw(state->k056832, bitmap, cliprect, 0, 0, 0); return 0; } diff --git a/src/mame/video/mainevt.c b/src/mame/video/mainevt.c index e8e455a281c..e9585490ae8 100644 --- a/src/mame/video/mainevt.c +++ b/src/mame/video/mainevt.c @@ -8,10 +8,7 @@ #include "driver.h" #include "video/konicdev.h" - - -static int layer_colorbase[3],sprite_colorbase; - +#include "includes/mainevt.h" /*************************************************************************** @@ -20,21 +17,25 @@ static int layer_colorbase[3],sprite_colorbase; ***************************************************************************/ -void mainevt_tile_callback(running_machine *machine, int layer,int bank,int *code,int *color,int *flags,int *priority) +void mainevt_tile_callback( running_machine *machine, int layer, int bank, int *code, int *color, int *flags, int *priority ) { + mainevt_state *state = (mainevt_state *)machine->driver_data; + *flags = (*color & 0x02) ? TILE_FLIPX : 0; /* priority relative to HALF priority sprites */ *priority = (layer == 2) ? (*color & 0x20) >> 5 : 0; *code |= ((*color & 0x01) << 8) | ((*color & 0x1c) << 7); - *color = layer_colorbase[layer] + ((*color & 0xc0) >> 6); + *color = state->layer_colorbase[layer] + ((*color & 0xc0) >> 6); } -void dv_tile_callback(running_machine *machine, int layer,int bank,int *code,int *color,int *flags,int *priority) +void dv_tile_callback( running_machine *machine, int layer, int bank, int *code, int *color, int *flags, int *priority ) { + mainevt_state *state = (mainevt_state *)machine->driver_data; + /* (color & 0x02) is flip y handled internally by the 052109 */ *code |= ((*color & 0x01) << 8) | ((*color & 0x3c) << 7); - *color = layer_colorbase[layer] + ((*color & 0xc0) >> 6); + *color = state->layer_colorbase[layer] + ((*color & 0xc0) >> 6); } @@ -46,20 +47,27 @@ void dv_tile_callback(running_machine *machine, int layer,int bank,int *code,int void mainevt_sprite_callback(running_machine *machine, int *code,int *color,int *priority_mask,int *shadow) { + mainevt_state *state = (mainevt_state *)machine->driver_data; + /* bit 5 = priority over layer B (has precedence) */ /* bit 6 = HALF priority over layer B (used for crowd when you get out of the ring) */ - if (*color & 0x20) *priority_mask = 0xff00; - else if (*color & 0x40) *priority_mask = 0xff00|0xf0f0; - else *priority_mask = 0xff00|0xf0f0|0xcccc; + if (*color & 0x20) + *priority_mask = 0xff00; + else if (*color & 0x40) + *priority_mask = 0xff00 | 0xf0f0; + else + *priority_mask = 0xff00 | 0xf0f0 | 0xcccc; /* bit 7 is shadow, not used */ - *color = sprite_colorbase + (*color & 0x03); + *color = state->sprite_colorbase + (*color & 0x03); } void dv_sprite_callback(running_machine *machine, int *code,int *color,int *priority,int *shadow) { + mainevt_state *state = (mainevt_state *)machine->driver_data; + /* TODO: the priority/shadow handling (bits 5-7) seems to be quite complex (see PROM) */ - *color = sprite_colorbase + (*color & 0x07); + *color = state->sprite_colorbase + (*color & 0x07); } @@ -67,49 +75,49 @@ void dv_sprite_callback(running_machine *machine, int *code,int *color,int *prio VIDEO_START( mainevt ) { - layer_colorbase[0] = 0; - layer_colorbase[1] = 8; - layer_colorbase[2] = 4; - sprite_colorbase = 12; + mainevt_state *state = (mainevt_state *)machine->driver_data; + state->layer_colorbase[0] = 0; + state->layer_colorbase[1] = 8; + state->layer_colorbase[2] = 4; + state->sprite_colorbase = 12; } VIDEO_START( dv ) { - layer_colorbase[0] = 0; - layer_colorbase[1] = 0; - layer_colorbase[2] = 4; - sprite_colorbase = 8; + mainevt_state *state = (mainevt_state *)machine->driver_data; + state->layer_colorbase[0] = 0; + state->layer_colorbase[1] = 0; + state->layer_colorbase[2] = 4; + state->sprite_colorbase = 8; } /*****************************************************************************/ VIDEO_UPDATE( mainevt ) { - const device_config *k052109 = devtag_get_device(screen->machine, "k052109"); - const device_config *k051960 = devtag_get_device(screen->machine, "k051960"); + mainevt_state *state = (mainevt_state *)screen->machine->driver_data; - k052109_tilemap_update(k052109); + k052109_tilemap_update(state->k052109); - bitmap_fill(screen->machine->priority_bitmap,cliprect,0); - k052109_tilemap_draw(k052109, bitmap, cliprect, 1, TILEMAP_DRAW_OPAQUE, 1); - k052109_tilemap_draw(k052109, bitmap, cliprect, 2, 1, 2); /* low priority part of layer */ - k052109_tilemap_draw(k052109, bitmap, cliprect, 2, 0, 4); /* high priority part of layer */ - k052109_tilemap_draw(k052109, bitmap, cliprect, 0, 0, 8); + bitmap_fill(screen->machine->priority_bitmap, cliprect, 0); + k052109_tilemap_draw(state->k052109, bitmap, cliprect, 1, TILEMAP_DRAW_OPAQUE, 1); + k052109_tilemap_draw(state->k052109, bitmap, cliprect, 2, 1, 2); /* low priority part of layer */ + k052109_tilemap_draw(state->k052109, bitmap, cliprect, 2, 0, 4); /* high priority part of layer */ + k052109_tilemap_draw(state->k052109, bitmap, cliprect, 0, 0, 8); - k051960_sprites_draw(k051960, bitmap, cliprect, -1, -1); + k051960_sprites_draw(state->k051960, bitmap, cliprect, -1, -1); return 0; } VIDEO_UPDATE( dv ) { - const device_config *k052109 = devtag_get_device(screen->machine, "k052109"); - const device_config *k051960 = devtag_get_device(screen->machine, "k051960"); + mainevt_state *state = (mainevt_state *)screen->machine->driver_data; - k052109_tilemap_update(k052109); + k052109_tilemap_update(state->k052109); - k052109_tilemap_draw(k052109, bitmap, cliprect, 1, TILEMAP_DRAW_OPAQUE, 0); - k052109_tilemap_draw(k052109, bitmap, cliprect, 2, 0, 0); - k051960_sprites_draw(k051960, bitmap, cliprect, 0, 0); - k052109_tilemap_draw(k052109, bitmap, cliprect, 0, 0, 0); + k052109_tilemap_draw(state->k052109, bitmap, cliprect, 1, TILEMAP_DRAW_OPAQUE, 0); + k052109_tilemap_draw(state->k052109, bitmap, cliprect, 2, 0, 0); + k051960_sprites_draw(state->k051960, bitmap, cliprect, 0, 0); + k052109_tilemap_draw(state->k052109, bitmap, cliprect, 0, 0, 0); return 0; } diff --git a/src/mame/video/moo.c b/src/mame/video/moo.c index b9ebbb16468..0a260c2bd10 100644 --- a/src/mame/video/moo.c +++ b/src/mame/video/moo.c @@ -10,101 +10,79 @@ #include "driver.h" #include "video/konicdev.h" +#include "includes/moo.h" -static int sprite_colorbase; -static int layer_colorbase[4], layerpri[3]; -static int alpha_enabled; - -#ifdef UNUSED_FUNCTION -void moo_set_alpha(int on) -{ - alpha_enabled = on; -} -#endif - -void moo_sprite_callback(running_machine *machine, int *code, int *color, int *priority_mask) +void moo_sprite_callback( running_machine *machine, int *code, int *color, int *priority_mask ) { + moo_state *state = (moo_state *)machine->driver_data; int pri = (*color & 0x03e0) >> 4; - if (pri <= layerpri[2]) *priority_mask = 0; - else if (pri <= layerpri[1]) *priority_mask = 0xf0; - else if (pri <= layerpri[0]) *priority_mask = 0xf0|0xcc; - else *priority_mask = 0xf0|0xcc|0xaa; + if (pri <= state->layerpri[2]) + *priority_mask = 0; + else if (pri <= state->layerpri[1]) + *priority_mask = 0xf0; + else if (pri <= state->layerpri[0]) + *priority_mask = 0xf0|0xcc; + else + *priority_mask = 0xf0|0xcc|0xaa; - *color = sprite_colorbase | (*color & 0x001f); + *color = state->sprite_colorbase | (*color & 0x001f); } -void moo_tile_callback(running_machine *machine, int layer, int *code, int *color, int *flags) +void moo_tile_callback( running_machine *machine, int layer, int *code, int *color, int *flags ) { - *color = layer_colorbase[layer] | (*color>>2 & 0x0f); + moo_state *state = (moo_state *)machine->driver_data; + *color = state->layer_colorbase[layer] | (*color >> 2 & 0x0f); } VIDEO_START(moo) { - const device_config *k056832 = devtag_get_device(machine, "k056832"); + moo_state *state = (moo_state *)machine->driver_data; + assert(video_screen_get_format(machine->primary_screen) == BITMAP_FORMAT_RGB32); - alpha_enabled = 0; + state->alpha_enabled = 0; if (!strcmp(machine->gamedrv->name, "bucky") || !strcmp(machine->gamedrv->name, "buckyua") || !strcmp(machine->gamedrv->name, "buckyaa")) { // Bucky doesn't chain tilemaps - k056832_set_layer_association(k056832, 0); + k056832_set_layer_association(state->k056832, 0); - k056832_set_layer_offs(k056832, 0, -2, 0); - k056832_set_layer_offs(k056832, 1, 2, 0); - k056832_set_layer_offs(k056832, 2, 4, 0); - k056832_set_layer_offs(k056832, 3, 6, 0); + k056832_set_layer_offs(state->k056832, 0, -2, 0); + k056832_set_layer_offs(state->k056832, 1, 2, 0); + k056832_set_layer_offs(state->k056832, 2, 4, 0); + k056832_set_layer_offs(state->k056832, 3, 6, 0); } else { // other than the intro showing one blank line alignment is good through the game - k056832_set_layer_offs(k056832, 0, -2+1, 0); - k056832_set_layer_offs(k056832, 1, 2+1, 0); - k056832_set_layer_offs(k056832, 2, 4+1, 0); - k056832_set_layer_offs(k056832, 3, 6+1, 0); + k056832_set_layer_offs(state->k056832, 0, -2 + 1, 0); + k056832_set_layer_offs(state->k056832, 1, 2 + 1, 0); + k056832_set_layer_offs(state->k056832, 2, 4 + 1, 0); + k056832_set_layer_offs(state->k056832, 3, 6 + 1, 0); } } -/* useful function to sort the three tile layers by priority order */ -static void sortlayers(int *layer,int *pri) -{ -#define SWAP(a,b) \ - if (pri[a] < pri[b]) \ - { \ - int t; \ - t = pri[a]; pri[a] = pri[b]; pri[b] = t; \ - t = layer[a]; layer[a] = layer[b]; layer[b] = t; \ - } - - SWAP(0,1) - SWAP(0,2) - SWAP(1,2) -} - VIDEO_UPDATE(moo) { - const device_config *k053246 = devtag_get_device(screen->machine, "k053246"); - const device_config *k056832 = devtag_get_device(screen->machine, "k056832"); - const device_config *k053251 = devtag_get_device(screen->machine, "k053251"); - const device_config *k054338 = devtag_get_device(screen->machine, "k054338"); + moo_state *state = (moo_state *)screen->machine->driver_data; static const int K053251_CI[4] = { K053251_CI1, K053251_CI2, K053251_CI3, K053251_CI4 }; int layers[3]; int bg_colorbase, new_colorbase, plane, dirty, alpha; - bg_colorbase = k053251_get_palette_index(k053251, K053251_CI1); - sprite_colorbase = k053251_get_palette_index(k053251, K053251_CI0); - layer_colorbase[0] = 0x70; + bg_colorbase = k053251_get_palette_index(state->k053251, K053251_CI1); + state->sprite_colorbase = k053251_get_palette_index(state->k053251, K053251_CI0); + state->layer_colorbase[0] = 0x70; - if (k056832_get_layer_association(k056832)) + if (k056832_get_layer_association(state->k056832)) { for (plane = 1; plane < 4; plane++) { - new_colorbase = k053251_get_palette_index(k053251, K053251_CI[plane]); - if (layer_colorbase[plane] != new_colorbase) + new_colorbase = k053251_get_palette_index(state->k053251, K053251_CI[plane]); + if (state->layer_colorbase[plane] != new_colorbase) { - layer_colorbase[plane] = new_colorbase; - k056832_mark_plane_dirty(k056832, plane); + state->layer_colorbase[plane] = new_colorbase; + k056832_mark_plane_dirty(state->k056832, plane); } } } @@ -112,47 +90,47 @@ VIDEO_UPDATE(moo) { for (dirty = 0, plane = 1; plane < 4; plane++) { - new_colorbase = k053251_get_palette_index(k053251, K053251_CI[plane]); - if (layer_colorbase[plane] != new_colorbase) + new_colorbase = k053251_get_palette_index(state->k053251, K053251_CI[plane]); + if (state->layer_colorbase[plane] != new_colorbase) { - layer_colorbase[plane] = new_colorbase; + state->layer_colorbase[plane] = new_colorbase; dirty = 1; } } if (dirty) - k056832_mark_all_tmaps_dirty(k056832); + k056832_mark_all_tmaps_dirty(state->k056832); } layers[0] = 1; - layerpri[0] = k053251_get_priority(k053251, K053251_CI2); + state->layerpri[0] = k053251_get_priority(state->k053251, K053251_CI2); layers[1] = 2; - layerpri[1] = k053251_get_priority(k053251, K053251_CI3); + state->layerpri[1] = k053251_get_priority(state->k053251, K053251_CI3); layers[2] = 3; - layerpri[2] = k053251_get_priority(k053251, K053251_CI4); + state->layerpri[2] = k053251_get_priority(state->k053251, K053251_CI4); - sortlayers(layers, layerpri); + konami_sortlayers3(layers, state->layerpri); - k054338_update_all_shadows(k054338, 0); - k054338_fill_backcolor(k054338, bitmap, 0); + k054338_update_all_shadows(state->k054338, 0); + k054338_fill_backcolor(state->k054338, bitmap, 0); - bitmap_fill(screen->machine->priority_bitmap,cliprect,0); + bitmap_fill(screen->machine->priority_bitmap, cliprect, 0); - if (layerpri[0] < k053251_get_priority(k053251, K053251_CI1)) /* bucky hides back layer behind background */ - k056832_tilemap_draw(k056832, bitmap, cliprect, layers[0], 0, 1); + if (state->layerpri[0] < k053251_get_priority(state->k053251, K053251_CI1)) /* bucky hides back layer behind background */ + k056832_tilemap_draw(state->k056832, bitmap, cliprect, layers[0], 0, 1); - k056832_tilemap_draw(k056832, bitmap, cliprect, layers[1], 0, 2); + k056832_tilemap_draw(state->k056832, bitmap, cliprect, layers[1], 0, 2); // Enabling alpha improves fog and fading in Moo but causes other things to disappear. // There is probably a control bit somewhere to turn off alpha blending. - alpha_enabled = k054338_register_r(k054338, K338_REG_CONTROL) & K338_CTL_MIXPRI; // DUMMY + state->alpha_enabled = k054338_register_r(state->k054338, K338_REG_CONTROL) & K338_CTL_MIXPRI; // DUMMY - alpha = (alpha_enabled) ? k054338_set_alpha_level(k054338, 1) : 255; + alpha = (state->alpha_enabled) ? k054338_set_alpha_level(state->k054338, 1) : 255; if (alpha > 0) - k056832_tilemap_draw(k056832, bitmap, cliprect, layers[2], TILEMAP_DRAW_ALPHA(alpha), 4); + k056832_tilemap_draw(state->k056832, bitmap, cliprect, layers[2], TILEMAP_DRAW_ALPHA(alpha), 4); - k053247_sprites_draw(k053246, bitmap, cliprect); + k053247_sprites_draw(state->k053246, bitmap, cliprect); - k056832_tilemap_draw(k056832, bitmap, cliprect, 0, 0, 0); + k056832_tilemap_draw(state->k056832, bitmap, cliprect, 0, 0, 0); return 0; } diff --git a/src/mame/video/overdriv.c b/src/mame/video/overdriv.c index 0aad165f3c0..af22033acbd 100644 --- a/src/mame/video/overdriv.c +++ b/src/mame/video/overdriv.c @@ -1,9 +1,6 @@ #include "driver.h" #include "video/konicdev.h" - - -static int zoom_colorbase[2],road_colorbase[2],sprite_colorbase; - +#include "includes/overdriv.h" /*************************************************************************** @@ -11,13 +8,16 @@ static int zoom_colorbase[2],road_colorbase[2],sprite_colorbase; ***************************************************************************/ -void overdriv_sprite_callback(running_machine *machine, int *code,int *color,int *priority_mask) +void overdriv_sprite_callback( running_machine *machine, int *code, int *color, int *priority_mask ) { + overdriv_state *state = (overdriv_state *)machine->driver_data; int pri = (*color & 0xffe0) >> 5; /* ??????? */ - if (pri) *priority_mask = 0x02; - else *priority_mask = 0x00; + if (pri) + *priority_mask = 0x02; + else + *priority_mask = 0x00; - *color = sprite_colorbase + (*color & 0x001f); + *color = state->sprite_colorbase + (*color & 0x001f); } @@ -27,45 +27,23 @@ void overdriv_sprite_callback(running_machine *machine, int *code,int *color,int ***************************************************************************/ -void overdriv_zoom_callback_0(running_machine *machine, int *code,int *color,int *flags) +void overdriv_zoom_callback_0( running_machine *machine, int *code, int *color, int *flags ) { + overdriv_state *state = (overdriv_state *)machine->driver_data; *flags = (*color & 0x40) ? TILE_FLIPX : 0; *code |= ((*color & 0x03) << 8); - *color = zoom_colorbase[0] + ((*color & 0x3c) >> 2); + *color = state->zoom_colorbase[0] + ((*color & 0x3c) >> 2); } -void overdriv_zoom_callback_1(running_machine *machine, int *code,int *color,int *flags) +void overdriv_zoom_callback_1( running_machine *machine, int *code, int *color, int *flags ) { + overdriv_state *state = (overdriv_state *)machine->driver_data; *flags = (*color & 0x40) ? TILE_FLIPX : 0; *code |= ((*color & 0x03) << 8); - *color = zoom_colorbase[1] + ((*color & 0x3c) >> 2); -} - - - -/*************************************************************************** - - Start the video hardware emulation. - -***************************************************************************/ - -VIDEO_START( overdriv ) -{ -// const device_config *k051316_1 = devtag_get_device(machine, "k051316_1"); -// const device_config *k051316_2 = devtag_get_device(machine, "k051316_2"); - -// K053251_vh_start(machine); -// K051316_vh_start_0(machine,"gfx2",4,TRUE,0,zoom_callback_0); -// K051316_vh_start_1(machine,"gfx3",4,FALSE,0,zoom_callback_1); -// K053247_vh_start(machine,"gfx1",77,22,NORMAL_PLANE_ORDER,overdriv_sprite_callback); - -// k051316_wraparound_enable(k051316_1, 1); -// k051316_set_offset(k051316_1, 14, -1); -// k051316_set_offset(k051316_2, 15, 0); + *color = state->zoom_colorbase[1] + ((*color & 0x3c) >> 2); } - /*************************************************************************** Display refresh @@ -74,22 +52,19 @@ VIDEO_START( overdriv ) VIDEO_UPDATE( overdriv ) { - const device_config *k051316_1 = devtag_get_device(screen->machine, "k051316_1"); - const device_config *k051316_2 = devtag_get_device(screen->machine, "k051316_2"); - const device_config *k053246 = devtag_get_device(screen->machine, "k053246"); - const device_config *k053251 = devtag_get_device(screen->machine, "k053251"); + overdriv_state *state = (overdriv_state *)screen->machine->driver_data; - sprite_colorbase = k053251_get_palette_index(k053251, K053251_CI0); - road_colorbase[1] = k053251_get_palette_index(k053251, K053251_CI1); - road_colorbase[0] = k053251_get_palette_index(k053251, K053251_CI2); - zoom_colorbase[1] = k053251_get_palette_index(k053251, K053251_CI3); - zoom_colorbase[0] = k053251_get_palette_index(k053251, K053251_CI4); + state->sprite_colorbase = k053251_get_palette_index(state->k053251, K053251_CI0); + state->road_colorbase[1] = k053251_get_palette_index(state->k053251, K053251_CI1); + state->road_colorbase[0] = k053251_get_palette_index(state->k053251, K053251_CI2); + state->zoom_colorbase[1] = k053251_get_palette_index(state->k053251, K053251_CI3); + state->zoom_colorbase[0] = k053251_get_palette_index(state->k053251, K053251_CI4); bitmap_fill(screen->machine->priority_bitmap, cliprect, 0); - k051316_zoom_draw(k051316_1, bitmap, cliprect, 0, 0); - k051316_zoom_draw(k051316_2, bitmap, cliprect, 0, 1); + k051316_zoom_draw(state->k051316_1, bitmap, cliprect, 0, 0); + k051316_zoom_draw(state->k051316_2, bitmap, cliprect, 0, 1); - k053247_sprites_draw(k053246, bitmap,cliprect); + k053247_sprites_draw(state->k053246, bitmap,cliprect); return 0; } diff --git a/src/mame/video/parodius.c b/src/mame/video/parodius.c index ce939161fc4..08bfa4ef7da 100644 --- a/src/mame/video/parodius.c +++ b/src/mame/video/parodius.c @@ -1,9 +1,6 @@ #include "driver.h" #include "video/konicdev.h" - - -static int layer_colorbase[3],sprite_colorbase,bg_colorbase; -static int layerpri[3]; +#include "includes/parodius.h" /*************************************************************************** @@ -12,10 +9,11 @@ static int layerpri[3]; ***************************************************************************/ -void parodius_tile_callback(running_machine *machine, int layer,int bank,int *code,int *color,int *flags,int *priority) +void parodius_tile_callback( running_machine *machine, int layer, int bank, int *code, int *color, int *flags, int *priority ) { + parodius_state *state = (parodius_state *)machine->driver_data; *code |= ((*color & 0x03) << 8) | ((*color & 0x10) << 6) | ((*color & 0x0c) << 9) | (bank << 13); - *color = layer_colorbase[layer] + ((*color & 0xe0) >> 5); + *color = state->layer_colorbase[layer] + ((*color & 0xe0) >> 5); } /*************************************************************************** @@ -24,15 +22,20 @@ void parodius_tile_callback(running_machine *machine, int layer,int bank,int *co ***************************************************************************/ -void parodius_sprite_callback(running_machine *machine, int *code,int *color,int *priority_mask) +void parodius_sprite_callback( running_machine *machine, int *code, int *color, int *priority_mask ) { + parodius_state *state = (parodius_state *)machine->driver_data; int pri = 0x20 | ((*color & 0x60) >> 2); - if (pri <= layerpri[2]) *priority_mask = 0; - else if (pri > layerpri[2] && pri <= layerpri[1]) *priority_mask = 0xf0; - else if (pri > layerpri[1] && pri <= layerpri[0]) *priority_mask = 0xf0|0xcc; - else *priority_mask = 0xf0|0xcc|0xaa; - - *color = sprite_colorbase + (*color & 0x1f); + if (pri <= state->layerpri[2]) + *priority_mask = 0; + else if (pri > state->layerpri[2] && pri <= state->layerpri[1]) + *priority_mask = 0xf0; + else if (pri > state->layerpri[1] && pri <= state->layerpri[0]) + *priority_mask = 0xf0 | 0xcc; + else + *priority_mask = 0xf0 | 0xcc | 0xaa; + + *color = state->sprite_colorbase + (*color & 0x1f); } @@ -42,52 +45,34 @@ void parodius_sprite_callback(running_machine *machine, int *code,int *color,int ***************************************************************************/ -/* useful function to sort the three tile layers by priority order */ -static void sortlayers(int *layer,int *pri) -{ -#define SWAP(a,b) \ - if (pri[a] < pri[b]) \ - { \ - int t; \ - t = pri[a]; pri[a] = pri[b]; pri[b] = t; \ - t = layer[a]; layer[a] = layer[b]; layer[b] = t; \ - } - - SWAP(0,1) - SWAP(0,2) - SWAP(1,2) -} - VIDEO_UPDATE( parodius ) { - const device_config *k053245 = devtag_get_device(screen->machine, "k053245"); - const device_config *k053251 = devtag_get_device(screen->machine, "k053251"); - const device_config *k052109 = devtag_get_device(screen->machine, "k052109"); - int layer[3]; + parodius_state *state = (parodius_state *)screen->machine->driver_data; + int layer[3], bg_colorbase; - bg_colorbase = k053251_get_palette_index(k053251, K053251_CI0); - sprite_colorbase = k053251_get_palette_index(k053251, K053251_CI1); - layer_colorbase[0] = k053251_get_palette_index(k053251, K053251_CI2); - layer_colorbase[1] = k053251_get_palette_index(k053251, K053251_CI4); - layer_colorbase[2] = k053251_get_palette_index(k053251, K053251_CI3); + bg_colorbase = k053251_get_palette_index(state->k053251, K053251_CI0); + state->sprite_colorbase = k053251_get_palette_index(state->k053251, K053251_CI1); + state->layer_colorbase[0] = k053251_get_palette_index(state->k053251, K053251_CI2); + state->layer_colorbase[1] = k053251_get_palette_index(state->k053251, K053251_CI4); + state->layer_colorbase[2] = k053251_get_palette_index(state->k053251, K053251_CI3); - k052109_tilemap_update(k052109); + k052109_tilemap_update(state->k052109); layer[0] = 0; - layerpri[0] = k053251_get_priority(k053251, K053251_CI2); + state->layerpri[0] = k053251_get_priority(state->k053251, K053251_CI2); layer[1] = 1; - layerpri[1] = k053251_get_priority(k053251, K053251_CI4); + state->layerpri[1] = k053251_get_priority(state->k053251, K053251_CI4); layer[2] = 2; - layerpri[2] = k053251_get_priority(k053251, K053251_CI3); + state->layerpri[2] = k053251_get_priority(state->k053251, K053251_CI3); - sortlayers(layer, layerpri); + konami_sortlayers3(layer, state->layerpri); - bitmap_fill(screen->machine->priority_bitmap,cliprect,0); - bitmap_fill(bitmap,cliprect,16 * bg_colorbase); - k052109_tilemap_draw(k052109, bitmap, cliprect, layer[0], 0,1); - k052109_tilemap_draw(k052109, bitmap, cliprect, layer[1], 0,2); - k052109_tilemap_draw(k052109, bitmap, cliprect, layer[2], 0,4); + bitmap_fill(screen->machine->priority_bitmap, cliprect, 0); + bitmap_fill(bitmap, cliprect, 16 * bg_colorbase); + k052109_tilemap_draw(state->k052109, bitmap, cliprect, layer[0], 0,1); + k052109_tilemap_draw(state->k052109, bitmap, cliprect, layer[1], 0,2); + k052109_tilemap_draw(state->k052109, bitmap, cliprect, layer[2], 0,4); - k053245_sprites_draw(k053245, bitmap, cliprect); + k053245_sprites_draw(state->k053245, bitmap, cliprect); return 0; } diff --git a/src/mame/video/rollerg.c b/src/mame/video/rollerg.c index 8105a78bd1b..fb33c40f5be 100644 --- a/src/mame/video/rollerg.c +++ b/src/mame/video/rollerg.c @@ -1,10 +1,6 @@ #include "driver.h" #include "video/konicdev.h" - - -static int bg_colorbase,sprite_colorbase,zoom_colorbase; - - +#include "includes/rollerg.h" /*************************************************************************** @@ -12,16 +8,17 @@ static int bg_colorbase,sprite_colorbase,zoom_colorbase; ***************************************************************************/ -void rollerg_sprite_callback(running_machine *machine, int *code,int *color,int *priority_mask) +void rollerg_sprite_callback( running_machine *machine, int *code, int *color, int *priority_mask ) { + rollerg_state *state = (rollerg_state *)machine->driver_data; #if 0 -if (input_code_pressed(machine, KEYCODE_Q) && (*color & 0x80)) *color = rand(); -if (input_code_pressed(machine, KEYCODE_W) && (*color & 0x40)) *color = rand(); -if (input_code_pressed(machine, KEYCODE_E) && (*color & 0x20)) *color = rand(); -if (input_code_pressed(machine, KEYCODE_R) && (*color & 0x10)) *color = rand(); + if (input_code_pressed(machine, KEYCODE_Q) && (*color & 0x80)) *color = rand(); + if (input_code_pressed(machine, KEYCODE_W) && (*color & 0x40)) *color = rand(); + if (input_code_pressed(machine, KEYCODE_E) && (*color & 0x20)) *color = rand(); + if (input_code_pressed(machine, KEYCODE_R) && (*color & 0x10)) *color = rand(); #endif *priority_mask = (*color & 0x10) ? 0 : 0x02; - *color = sprite_colorbase + (*color & 0x0f); + *color = state->sprite_colorbase + (*color & 0x0f); } @@ -31,11 +28,12 @@ if (input_code_pressed(machine, KEYCODE_R) && (*color & 0x10)) *color = rand(); ***************************************************************************/ -void rollerg_zoom_callback(running_machine *machine, int *code,int *color,int *flags) +void rollerg_zoom_callback( running_machine *machine, int *code, int *color, int *flags ) { + rollerg_state *state = (rollerg_state *)machine->driver_data; *flags = TILE_FLIPYX((*color & 0xc0) >> 6); *code |= ((*color & 0x0f) << 8); - *color = zoom_colorbase + ((*color & 0x30) >> 4); + *color = state->zoom_colorbase + ((*color & 0x30) >> 4); } @@ -48,9 +46,9 @@ void rollerg_zoom_callback(running_machine *machine, int *code,int *color,int *f VIDEO_START( rollerg ) { - bg_colorbase = 16; - sprite_colorbase = 16; - zoom_colorbase = 0; + rollerg_state *state = (rollerg_state *)machine->driver_data; + state->sprite_colorbase = 16; + state->zoom_colorbase = 0; } @@ -63,12 +61,12 @@ VIDEO_START( rollerg ) VIDEO_UPDATE( rollerg ) { - const device_config *k053244 = devtag_get_device(screen->machine, "k053244"); - const device_config *k051316 = devtag_get_device(screen->machine, "k051316"); + rollerg_state *state = (rollerg_state *)screen->machine->driver_data; + int bg_colorbase = 16; bitmap_fill(screen->machine->priority_bitmap, cliprect, 0); bitmap_fill(bitmap, cliprect, 16 * bg_colorbase); - k051316_zoom_draw(k051316, bitmap, cliprect, 0, 1); - k053245_sprites_draw(k053244, bitmap, cliprect); + k051316_zoom_draw(state->k051316, bitmap, cliprect, 0, 1); + k053245_sprites_draw(state->k053244, bitmap, cliprect); return 0; } diff --git a/src/mame/video/rungun.c b/src/mame/video/rungun.c index cbf8cc1b14d..7cd465701ad 100644 --- a/src/mame/video/rungun.c +++ b/src/mame/video/rungun.c @@ -1,74 +1,72 @@ -/* +/************************************************************************* + Run and Gun (c) 1993 Konami Video hardware emulation. Driver by R. Belmont -*/ + +*************************************************************************/ #include "driver.h" #include "video/konicdev.h" - -static int ttl_gfx_index; -static tilemap_t *ttl_tilemap, *rng_936_tilemap; -static UINT16 ttl_vram[0x1000]; - -static int sprite_colorbase; -UINT16 *rng_936_videoram; +#include "includes/rungun.h" /* TTL text plane stuff */ - static TILE_GET_INFO( ttl_get_tile_info ) { - UINT32 *lvram = (UINT32 *)ttl_vram; + rungun_state *state = (rungun_state *)machine->driver_data; + UINT32 *lvram = (UINT32 *)state->ttl_vram; int attr, code; - code = (lvram[tile_index]>>16)&0xffff; - code |= (lvram[tile_index]&0x0f)<<8; /* tile "bank" */ + code = (lvram[tile_index] >> 16) & 0xffff; + code |= (lvram[tile_index] & 0x0f) << 8; /* tile "bank" */ + attr = ((lvram[tile_index] & 0xf0) >> 4); /* palette */ - attr = ((lvram[tile_index]&0xf0)>>4); /* palette */ - - SET_TILE_INFO(ttl_gfx_index, code, attr, 0); + SET_TILE_INFO(state->ttl_gfx_index, code, attr, 0); } -void rng_sprite_callback(running_machine *machine, int *code, int *color, int *priority_mask) +void rng_sprite_callback( running_machine *machine, int *code, int *color, int *priority_mask ) { - *color = sprite_colorbase | (*color & 0x001f); + rungun_state *state = (rungun_state *)machine->driver_data; + *color = state->sprite_colorbase | (*color & 0x001f); } READ16_HANDLER( rng_ttl_ram_r ) { - return(ttl_vram[offset]); + rungun_state *state = (rungun_state *)space->machine->driver_data; + return state->ttl_vram[offset]; } WRITE16_HANDLER( rng_ttl_ram_w ) { - COMBINE_DATA(&ttl_vram[offset]); + rungun_state *state = (rungun_state *)space->machine->driver_data; + COMBINE_DATA(&state->ttl_vram[offset]); } /* 53936 (PSAC2) rotation/zoom plane */ - WRITE16_HANDLER(rng_936_videoram_w) { - COMBINE_DATA(&rng_936_videoram[offset]); - tilemap_mark_tile_dirty(rng_936_tilemap, offset/2); + rungun_state *state = (rungun_state *)space->machine->driver_data; + COMBINE_DATA(&state->_936_videoram[offset]); + tilemap_mark_tile_dirty(state->_936_tilemap, offset / 2); } static TILE_GET_INFO( get_rng_936_tile_info ) { + rungun_state *state = (rungun_state *)machine->driver_data; int tileno, colour, flipx; - tileno = rng_936_videoram[tile_index*2+1] & 0x3fff; - flipx = (rng_936_videoram[tile_index*2+1] & 0xc000) >> 14; - - colour = 0x10 + (rng_936_videoram[tile_index*2] & 0x000f); + tileno = state->_936_videoram[tile_index * 2 + 1] & 0x3fff; + flipx = (state->_936_videoram[tile_index * 2 + 1] & 0xc000) >> 14; + colour = 0x10 + (state->_936_videoram[tile_index * 2] & 0x000f); SET_TILE_INFO(0, tileno, colour, TILE_FLIPYX(flipx)); } -VIDEO_START(rng) +VIDEO_START( rng ) { static const gfx_layout charlayout = { @@ -81,47 +79,43 @@ VIDEO_START(rng) 8*8*4 }; -// K055673_vh_start(machine, "gfx2", 1, -8, 15, rng_sprite_callback); + rungun_state *state = (rungun_state *)machine->driver_data; + int gfx_index; -// K053936_wraparound_enable(0, 0); -// K053936_set_offset(0, 34, 9); - - rng_936_tilemap = tilemap_create(machine, get_rng_936_tile_info, tilemap_scan_rows, 16, 16, 128, 128); - tilemap_set_transparent_pen(rng_936_tilemap, 0); + state->_936_tilemap = tilemap_create(machine, get_rng_936_tile_info, tilemap_scan_rows, 16, 16, 128, 128); + tilemap_set_transparent_pen(state->_936_tilemap, 0); /* find first empty slot to decode gfx */ - for (ttl_gfx_index = 0; ttl_gfx_index < MAX_GFX_ELEMENTS; ttl_gfx_index++) - if (machine->gfx[ttl_gfx_index] == 0) + for (gfx_index = 0; gfx_index < MAX_GFX_ELEMENTS; gfx_index++) + if (machine->gfx[gfx_index] == 0) break; - assert(ttl_gfx_index != MAX_GFX_ELEMENTS); + assert(gfx_index != MAX_GFX_ELEMENTS); // decode the ttl layer's gfx - machine->gfx[ttl_gfx_index] = gfx_element_alloc(machine, &charlayout, memory_region(machine, "gfx3"), machine->config->total_colors / 16, 0); + machine->gfx[gfx_index] = gfx_element_alloc(machine, &charlayout, memory_region(machine, "gfx3"), machine->config->total_colors / 16, 0); + state->ttl_gfx_index = gfx_index; // create the tilemap - ttl_tilemap = tilemap_create(machine, ttl_get_tile_info, tilemap_scan_rows, 8, 8, 64, 32); - - tilemap_set_transparent_pen(ttl_tilemap, 0); + state->ttl_tilemap = tilemap_create(machine, ttl_get_tile_info, tilemap_scan_rows, 8, 8, 64, 32); - state_save_register_global_array(machine, ttl_vram); + tilemap_set_transparent_pen(state->ttl_tilemap, 0); - sprite_colorbase = 0x20; + state->sprite_colorbase = 0x20; } VIDEO_UPDATE(rng) { - const device_config *k055673 = devtag_get_device(screen->machine, "k055673"); - const device_config *k053936 = devtag_get_device(screen->machine, "k053936"); + rungun_state *state = (rungun_state *)screen->machine->driver_data; bitmap_fill(bitmap, cliprect, get_black_pen(screen->machine)); bitmap_fill(screen->machine->priority_bitmap, cliprect, 0); - k053936_zoom_draw(k053936, bitmap, cliprect, rng_936_tilemap, 0, 0, 1); + k053936_zoom_draw(state->k053936, bitmap, cliprect, state->_936_tilemap, 0, 0, 1); - k053247_sprites_draw(k055673, bitmap, cliprect); + k053247_sprites_draw(state->k055673, bitmap, cliprect); - tilemap_mark_all_tiles_dirty(ttl_tilemap); - tilemap_draw(bitmap, cliprect, ttl_tilemap, 0, 0); + tilemap_mark_all_tiles_dirty(state->ttl_tilemap); + tilemap_draw(bitmap, cliprect, state->ttl_tilemap, 0, 0); return 0; } diff --git a/src/mame/video/simpsons.c b/src/mame/video/simpsons.c index 53179472599..c2d6583b5e1 100644 --- a/src/mame/video/simpsons.c +++ b/src/mame/video/simpsons.c @@ -2,21 +2,17 @@ #include "video/konicdev.h" #include "includes/simpsons.h" -static int bg_colorbase,sprite_colorbase,layer_colorbase[3]; -UINT8 *simpsons_xtraram; -static int layerpri[3]; - - /*************************************************************************** Callbacks for the K052109 ***************************************************************************/ -void simpsons_tile_callback(running_machine *machine, int layer,int bank,int *code,int *color,int *flags,int *priority) +void simpsons_tile_callback( running_machine *machine, int layer, int bank, int *code, int *color, int *flags, int *priority ) { + simpsons_state *state = (simpsons_state *)machine->driver_data; *code |= ((*color & 0x3f) << 8) | (bank << 14); - *color = layer_colorbase[layer] + ((*color & 0xc0) >> 6); + *color = state->layer_colorbase[layer] + ((*color & 0xc0) >> 6); } @@ -26,15 +22,21 @@ void simpsons_tile_callback(running_machine *machine, int layer,int bank,int *co ***************************************************************************/ -void simpsons_sprite_callback(running_machine *machine, int *code,int *color,int *priority_mask) +void simpsons_sprite_callback( running_machine *machine, int *code, int *color, int *priority_mask ) { + simpsons_state *state = (simpsons_state *)machine->driver_data; int pri = (*color & 0x0f80) >> 6; /* ??????? */ - if (pri <= layerpri[2]) *priority_mask = 0; - else if (pri > layerpri[2] && pri <= layerpri[1]) *priority_mask = 0xf0; - else if (pri > layerpri[1] && pri <= layerpri[0]) *priority_mask = 0xf0|0xcc; - else *priority_mask = 0xf0|0xcc|0xaa; - *color = sprite_colorbase + (*color & 0x001f); + if (pri <= state->layerpri[2]) + *priority_mask = 0; + else if (pri > state->layerpri[2] && pri <= state->layerpri[1]) + *priority_mask = 0xf0; + else if (pri > state->layerpri[1] && pri <= state->layerpri[0]) + *priority_mask = 0xf0 | 0xcc; + else + *priority_mask = 0xf0 | 0xcc | 0xaa; + + *color = state->sprite_colorbase + (*color & 0x001f); } @@ -44,20 +46,21 @@ void simpsons_sprite_callback(running_machine *machine, int *code,int *color,int ***************************************************************************/ -static READ8_HANDLER( simpsons_K052109_r ) +static READ8_HANDLER( simpsons_k052109_r ) { - const device_config *k052109 = devtag_get_device(space->machine, "k052109"); - return k052109_r(k052109, offset + 0x2000); + simpsons_state *state = (simpsons_state *)space->machine->driver_data; + return k052109_r(state->k052109, offset + 0x2000); } -static WRITE8_HANDLER( simpsons_K052109_w ) +static WRITE8_HANDLER( simpsons_k052109_w ) { - const device_config *k052109 = devtag_get_device(space->machine, "k052109"); - k052109_w(k052109, offset + 0x2000, data); + simpsons_state *state = (simpsons_state *)space->machine->driver_data; + k052109_w(state->k052109, offset + 0x2000, data); } -static READ8_HANDLER( simpsons_K053247_r ) +static READ8_HANDLER( simpsons_k053247_r ) { + simpsons_state *state = (simpsons_state *)space->machine->driver_data; int offs; if (offset < 0x1000) @@ -65,33 +68,35 @@ static READ8_HANDLER( simpsons_K053247_r ) offs = offset >> 1; if (offset & 1) - return(space->machine->generic.spriteram.u16[offs] & 0xff); + return(state->spriteram[offs] & 0xff); else - return(space->machine->generic.spriteram.u16[offs] >> 8); + return(state->spriteram[offs] >> 8); } - else return simpsons_xtraram[offset - 0x1000]; + else + return state->xtraram[offset - 0x1000]; } -static WRITE8_HANDLER( simpsons_K053247_w ) +static WRITE8_HANDLER( simpsons_k053247_w ) { + simpsons_state *state = (simpsons_state *)space->machine->driver_data; int offs; if (offset < 0x1000) { - UINT16 *spriteram16 = space->machine->generic.spriteram.u16; + UINT16 *spriteram = state->spriteram; offs = offset >> 1; if (offset & 1) - spriteram16[offs] = (spriteram16[offs] & 0xff00) | data; + spriteram[offs] = (spriteram[offs] & 0xff00) | data; else - spriteram16[offs] = (spriteram16[offs] & 0x00ff) | (data<<8); + spriteram[offs] = (spriteram[offs] & 0x00ff) | (data << 8); } - else simpsons_xtraram[offset - 0x1000] = data; + else state->xtraram[offset - 0x1000] = data; } -void simpsons_video_banking(running_machine *machine, int bank) +void simpsons_video_banking( running_machine *machine, int bank ) { - const device_config *k052109 = devtag_get_device(machine, "k052109"); + simpsons_state *state = (simpsons_state *)machine->driver_data; const address_space *space = cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM); if (bank & 1) @@ -101,12 +106,12 @@ void simpsons_video_banking(running_machine *machine, int bank) memory_set_bankptr(machine, "bank5", machine->generic.paletteram.v); } else - memory_install_readwrite8_device_handler(space, k052109, 0x0000, 0x0fff, 0, 0, k052109_r, k052109_w); + memory_install_readwrite8_device_handler(space, state->k052109, 0x0000, 0x0fff, 0, 0, k052109_r, k052109_w); if (bank & 2) - memory_install_readwrite8_handler(space, 0x2000, 0x3fff, 0, 0, simpsons_K053247_r, simpsons_K053247_w); + memory_install_readwrite8_handler(space, 0x2000, 0x3fff, 0, 0, simpsons_k053247_r, simpsons_k053247_w); else - memory_install_readwrite8_handler(space, 0x2000, 0x3fff, 0, 0, simpsons_K052109_r, simpsons_K052109_w); + memory_install_readwrite8_handler(space, 0x2000, 0x3fff, 0, 0, simpsons_k052109_r, simpsons_k052109_w); } @@ -117,52 +122,34 @@ void simpsons_video_banking(running_machine *machine, int bank) ***************************************************************************/ -/* useful function to sort the three tile layers by priority order */ -static void sortlayers(int *layer,int *pri) -{ -#define SWAP(a,b) \ - if (pri[a] < pri[b]) \ - { \ - int t; \ - t = pri[a]; pri[a] = pri[b]; pri[b] = t; \ - t = layer[a]; layer[a] = layer[b]; layer[b] = t; \ - } - - SWAP(0,1) - SWAP(0,2) - SWAP(1,2) -} - VIDEO_UPDATE( simpsons ) { - const device_config *k053246 = devtag_get_device(screen->machine, "k053246"); - const device_config *k053251 = devtag_get_device(screen->machine, "k053251"); - const device_config *k052109 = devtag_get_device(screen->machine, "k052109"); - int layer[3]; + simpsons_state *state = (simpsons_state *)screen->machine->driver_data; + int layer[3], bg_colorbase; - bg_colorbase = k053251_get_palette_index(k053251, K053251_CI0); - sprite_colorbase = k053251_get_palette_index(k053251, K053251_CI1); - layer_colorbase[0] = k053251_get_palette_index(k053251, K053251_CI2); - layer_colorbase[1] = k053251_get_palette_index(k053251, K053251_CI3); - layer_colorbase[2] = k053251_get_palette_index(k053251, K053251_CI4); + bg_colorbase = k053251_get_palette_index(state->k053251, K053251_CI0); + state->sprite_colorbase = k053251_get_palette_index(state->k053251, K053251_CI1); + state->layer_colorbase[0] = k053251_get_palette_index(state->k053251, K053251_CI2); + state->layer_colorbase[1] = k053251_get_palette_index(state->k053251, K053251_CI3); + state->layer_colorbase[2] = k053251_get_palette_index(state->k053251, K053251_CI4); - k052109_tilemap_update(k052109); + k052109_tilemap_update(state->k052109); layer[0] = 0; - layerpri[0] = k053251_get_priority(k053251, K053251_CI2); + state->layerpri[0] = k053251_get_priority(state->k053251, K053251_CI2); layer[1] = 1; - layerpri[1] = k053251_get_priority(k053251, K053251_CI3); + state->layerpri[1] = k053251_get_priority(state->k053251, K053251_CI3); layer[2] = 2; - layerpri[2] = k053251_get_priority(k053251, K053251_CI4); + state->layerpri[2] = k053251_get_priority(state->k053251, K053251_CI4); - sortlayers(layer,layerpri); + konami_sortlayers3(layer, state->layerpri); - bitmap_fill(screen->machine->priority_bitmap,cliprect,0); - bitmap_fill(bitmap,cliprect,16 * bg_colorbase); - k052109_tilemap_draw(k052109, bitmap, cliprect, layer[0], 0,1); - k052109_tilemap_draw(k052109, bitmap, cliprect, layer[1], 0,2); - k052109_tilemap_draw(k052109, bitmap, cliprect, layer[2], 0,4); + bitmap_fill(screen->machine->priority_bitmap, cliprect, 0); + bitmap_fill(bitmap, cliprect, 16 * bg_colorbase); + k052109_tilemap_draw(state->k052109, bitmap, cliprect, layer[0], 0, 1); + k052109_tilemap_draw(state->k052109, bitmap, cliprect, layer[1], 0, 2); + k052109_tilemap_draw(state->k052109, bitmap, cliprect, layer[2], 0, 4); - k053247_sprites_draw(k053246, bitmap, cliprect); + k053247_sprites_draw(state->k053246, bitmap, cliprect); return 0; } diff --git a/src/mame/video/spy.c b/src/mame/video/spy.c index 5c1bc196e56..9d806e07289 100644 --- a/src/mame/video/spy.c +++ b/src/mame/video/spy.c @@ -1,10 +1,6 @@ #include "driver.h" #include "video/konicdev.h" - - -int spy_video_enable; - -static int layer_colorbase[3],sprite_colorbase; +#include "includes/spy.h" /*************************************************************************** @@ -13,12 +9,12 @@ static int layer_colorbase[3],sprite_colorbase; ***************************************************************************/ -void spy_tile_callback(running_machine *machine, int layer,int bank,int *code,int *color,int *flags,int *priority) +void spy_tile_callback( running_machine *machine, int layer, int bank, int *code, int *color, int *flags, int *priority ) { + spy_state *state = (spy_state *)machine->driver_data; *flags = (*color & 0x20) ? TILE_FLIPX : 0; - *code |= ((*color & 0x03) << 8) | ((*color & 0x10) << 6) | ((*color & 0x0c) << 9) - | (bank << 13); - *color = layer_colorbase[layer] + ((*color & 0xc0) >> 6); + *code |= ((*color & 0x03) << 8) | ((*color & 0x10) << 6) | ((*color & 0x0c) << 9) | (bank << 13); + *color = state->layer_colorbase[layer] + ((*color & 0xc0) >> 6); } @@ -28,15 +24,17 @@ void spy_tile_callback(running_machine *machine, int layer,int bank,int *code,in ***************************************************************************/ -void spy_sprite_callback(running_machine *machine, int *code,int *color,int *priority_mask,int *shadow) +void spy_sprite_callback( running_machine *machine, int *code, int *color, int *priority_mask, int *shadow ) { + spy_state *state = (spy_state *)machine->driver_data; + /* bit 4 = priority over layer A (0 = have priority) */ /* bit 5 = priority over layer B (1 = have priority) */ *priority_mask = 0x00; if ( *color & 0x10) *priority_mask |= 0xa; if (~*color & 0x20) *priority_mask |= 0xc; - *color = sprite_colorbase + (*color & 0x0f); + *color = state->sprite_colorbase + (*color & 0x0f); } @@ -48,10 +46,12 @@ void spy_sprite_callback(running_machine *machine, int *code,int *color,int *pri VIDEO_START( spy ) { - layer_colorbase[0] = 48; - layer_colorbase[1] = 0; - layer_colorbase[2] = 16; - sprite_colorbase = 32; + spy_state *state = (spy_state *)machine->driver_data; + + state->layer_colorbase[0] = 48; + state->layer_colorbase[1] = 0; + state->layer_colorbase[2] = 16; + state->sprite_colorbase = 32; } @@ -64,21 +64,20 @@ VIDEO_START( spy ) VIDEO_UPDATE( spy ) { - const device_config *k052109 = devtag_get_device(screen->machine, "k052109"); - const device_config *k051960 = devtag_get_device(screen->machine, "k051960"); + spy_state *state = (spy_state *)screen->machine->driver_data; - k052109_tilemap_update(k052109); + k052109_tilemap_update(state->k052109); bitmap_fill(screen->machine->priority_bitmap, cliprect, 0); - if (!spy_video_enable) - bitmap_fill(bitmap,cliprect,16 * layer_colorbase[0]); + if (!state->video_enable) + bitmap_fill(bitmap, cliprect, 16 * state->layer_colorbase[0]); else { - k052109_tilemap_draw(k052109, bitmap, cliprect, 1, TILEMAP_DRAW_OPAQUE, 1); - k052109_tilemap_draw(k052109, bitmap, cliprect, 2, 0, 2); - k051960_sprites_draw(k051960, bitmap, cliprect, -1, -1); - k052109_tilemap_draw(k052109, bitmap, cliprect, 0, 0, 0); + k052109_tilemap_draw(state->k052109, bitmap, cliprect, 1, TILEMAP_DRAW_OPAQUE, 1); + k052109_tilemap_draw(state->k052109, bitmap, cliprect, 2, 0, 2); + k051960_sprites_draw(state->k051960, bitmap, cliprect, -1, -1); + k052109_tilemap_draw(state->k052109, bitmap, cliprect, 0, 0, 0); } return 0; diff --git a/src/mame/video/surpratk.c b/src/mame/video/surpratk.c index 575f494ba5e..44a04431a68 100644 --- a/src/mame/video/surpratk.c +++ b/src/mame/video/surpratk.c @@ -1,8 +1,6 @@ #include "driver.h" #include "video/konicdev.h" - -static int layer_colorbase[3],sprite_colorbase,bg_colorbase; -static int layerpri[3]; +#include "includes/surpratk.h" /*************************************************************************** @@ -11,11 +9,12 @@ static int layerpri[3]; ***************************************************************************/ -void surpratk_tile_callback(running_machine *machine, int layer,int bank,int *code,int *color,int *flags,int *priority) +void surpratk_tile_callback( running_machine *machine, int layer, int bank, int *code, int *color, int *flags, int *priority ) { + surpratk_state *state = (surpratk_state *)machine->driver_data; *flags = (*color & 0x80) ? TILE_FLIPX : 0; *code |= ((*color & 0x03) << 8) | ((*color & 0x10) << 6) | ((*color & 0x0c) << 9) | (bank << 13); - *color = layer_colorbase[layer] + ((*color & 0x60) >> 5); + *color = state->layer_colorbase[layer] + ((*color & 0x60) >> 5); } /*************************************************************************** @@ -24,15 +23,20 @@ void surpratk_tile_callback(running_machine *machine, int layer,int bank,int *co ***************************************************************************/ -void surpratk_sprite_callback(running_machine *machine, int *code,int *color,int *priority_mask) +void surpratk_sprite_callback( running_machine *machine, int *code, int *color, int *priority_mask ) { + surpratk_state *state = (surpratk_state *)machine->driver_data; int pri = 0x20 | ((*color & 0x60) >> 2); - if (pri <= layerpri[2]) *priority_mask = 0; - else if (pri > layerpri[2] && pri <= layerpri[1]) *priority_mask = 0xf0; - else if (pri > layerpri[1] && pri <= layerpri[0]) *priority_mask = 0xf0|0xcc; - else *priority_mask = 0xf0|0xcc|0xaa; - - *color = sprite_colorbase + (*color & 0x1f); + if (pri <= state->layerpri[2]) + *priority_mask = 0; + else if (pri > state->layerpri[2] && pri <= state->layerpri[1]) + *priority_mask = 0xf0; + else if (pri > state->layerpri[1] && pri <= state->layerpri[0]) + *priority_mask = 0xf0 | 0xcc; + else + *priority_mask = 0xf0 | 0xcc | 0xaa; + + *color = state->sprite_colorbase + (*color & 0x1f); } @@ -42,53 +46,34 @@ void surpratk_sprite_callback(running_machine *machine, int *code,int *color,int ***************************************************************************/ -/* useful function to sort the three tile layers by priority order */ -static void sortlayers(int *layer,int *pri) -{ -#define SWAP(a,b) \ - if (pri[a] < pri[b]) \ - { \ - int t; \ - t = pri[a]; pri[a] = pri[b]; pri[b] = t; \ - t = layer[a]; layer[a] = layer[b]; layer[b] = t; \ - } - - SWAP(0,1) - SWAP(0,2) - SWAP(1,2) -} - VIDEO_UPDATE( surpratk ) { - const device_config *k052109 = devtag_get_device(screen->machine, "k052109"); - const device_config *k053244 = devtag_get_device(screen->machine, "k053244"); - const device_config *k053251 = devtag_get_device(screen->machine, "k053251"); - int layer[3]; - + surpratk_state *state = (surpratk_state *)screen->machine->driver_data; + int layer[3], bg_colorbase; - bg_colorbase = k053251_get_palette_index(k053251, K053251_CI0); - sprite_colorbase = k053251_get_palette_index(k053251, K053251_CI1); - layer_colorbase[0] = k053251_get_palette_index(k053251, K053251_CI2); - layer_colorbase[1] = k053251_get_palette_index(k053251, K053251_CI4); - layer_colorbase[2] = k053251_get_palette_index(k053251, K053251_CI3); + bg_colorbase = k053251_get_palette_index(state->k053251, K053251_CI0); + state->sprite_colorbase = k053251_get_palette_index(state->k053251, K053251_CI1); + state->layer_colorbase[0] = k053251_get_palette_index(state->k053251, K053251_CI2); + state->layer_colorbase[1] = k053251_get_palette_index(state->k053251, K053251_CI4); + state->layer_colorbase[2] = k053251_get_palette_index(state->k053251, K053251_CI3); - k052109_tilemap_update(k052109); + k052109_tilemap_update(state->k052109); layer[0] = 0; - layerpri[0] = k053251_get_priority(k053251, K053251_CI2); + state->layerpri[0] = k053251_get_priority(state->k053251, K053251_CI2); layer[1] = 1; - layerpri[1] = k053251_get_priority(k053251, K053251_CI4); + state->layerpri[1] = k053251_get_priority(state->k053251, K053251_CI4); layer[2] = 2; - layerpri[2] = k053251_get_priority(k053251, K053251_CI3); + state->layerpri[2] = k053251_get_priority(state->k053251, K053251_CI3); - sortlayers(layer, layerpri); + konami_sortlayers3(layer, state->layerpri); bitmap_fill(screen->machine->priority_bitmap, cliprect, 0); bitmap_fill(bitmap, cliprect, 16 * bg_colorbase); - k052109_tilemap_draw(k052109, bitmap, cliprect, layer[0], 0, 1); - k052109_tilemap_draw(k052109, bitmap, cliprect, layer[1], 0, 2); - k052109_tilemap_draw(k052109, bitmap, cliprect, layer[2], 0, 4); + k052109_tilemap_draw(state->k052109, bitmap, cliprect, layer[0], 0, 1); + k052109_tilemap_draw(state->k052109, bitmap, cliprect, layer[1], 0, 2); + k052109_tilemap_draw(state->k052109, bitmap, cliprect, layer[2], 0, 4); - k053245_sprites_draw(k053244, bitmap, cliprect); + k053245_sprites_draw(state->k053244, bitmap, cliprect); return 0; } diff --git a/src/mame/video/tail2nos.c b/src/mame/video/tail2nos.c index e696265237a..e4e0d70c293 100644 --- a/src/mame/video/tail2nos.c +++ b/src/mame/video/tail2nos.c @@ -1,18 +1,10 @@ #include "driver.h" #include "video/konicdev.h" +#include "includes/tail2nos.h" -UINT16 *tail2nos_bgvideoram; - - -static tilemap_t *bg_tilemap; - -static int charbank,charpalette,video_enable; -static UINT16 *zoomdata; - #define TOTAL_CHARS 0x400 - /*************************************************************************** Callbacks for the TileMap code @@ -21,11 +13,12 @@ static UINT16 *zoomdata; static TILE_GET_INFO( get_tile_info ) { - UINT16 code = tail2nos_bgvideoram[tile_index]; + tail2nos_state *state = (tail2nos_state *)machine->driver_data; + UINT16 code = state->bgvideoram[tile_index]; SET_TILE_INFO( 0, - (code & 0x1fff) + (charbank << 13), - ((code & 0xe000) >> 13) + charpalette * 16, + (code & 0x1fff) + (state->charbank << 13), + ((code & 0xe000) >> 13) + state->charpalette * 16, 0); } @@ -36,7 +29,7 @@ static TILE_GET_INFO( get_tile_info ) ***************************************************************************/ -void tail2nos_zoom_callback(running_machine *machine, int *code,int *color,int *flags) +void tail2nos_zoom_callback( running_machine *machine, int *code, int *color, int *flags ) { *code |= ((*color & 0x03) << 8); *color = 32 + ((*color & 0x38) >> 3); @@ -48,13 +41,31 @@ void tail2nos_zoom_callback(running_machine *machine, int *code,int *color,int * ***************************************************************************/ +static STATE_POSTLOAD( tail2nos_postload ) +{ + tail2nos_state *state = (tail2nos_state *)machine->driver_data; + int i; + + tilemap_mark_all_tiles_dirty(state->bg_tilemap); + + for (i = 0; i < 0x20000; i += 64) + { + gfx_element_mark_dirty(machine->gfx[2], i / 64); + } +} + VIDEO_START( tail2nos ) { - bg_tilemap = tilemap_create(machine, get_tile_info,tilemap_scan_rows,8,8,64,32); + tail2nos_state *state = (tail2nos_state *)machine->driver_data; + + state->bg_tilemap = tilemap_create(machine, get_tile_info, tilemap_scan_rows, 8, 8, 64, 32); - tilemap_set_transparent_pen(bg_tilemap,15); + tilemap_set_transparent_pen(state->bg_tilemap, 15); - zoomdata = (UINT16 *)memory_region(machine, "gfx3"); + state->zoomdata = (UINT16 *)memory_region(machine, "gfx3"); + + state_save_register_global_pointer(machine, state->zoomdata, 0x20000 / 2); + state_save_register_postload(machine, tail2nos_postload, NULL); } @@ -67,52 +78,64 @@ VIDEO_START( tail2nos ) WRITE16_HANDLER( tail2nos_bgvideoram_w ) { - COMBINE_DATA(&tail2nos_bgvideoram[offset]); - tilemap_mark_tile_dirty(bg_tilemap,offset); + tail2nos_state *state = (tail2nos_state *)space->machine->driver_data; + + COMBINE_DATA(&state->bgvideoram[offset]); + tilemap_mark_tile_dirty(state->bg_tilemap, offset); } READ16_HANDLER( tail2nos_zoomdata_r ) { - return zoomdata[offset]; + tail2nos_state *state = (tail2nos_state *)space->machine->driver_data; + return state->zoomdata[offset]; } WRITE16_HANDLER( tail2nos_zoomdata_w ) { - int oldword = zoomdata[offset]; - COMBINE_DATA(&zoomdata[offset]); - if (oldword != zoomdata[offset]) + tail2nos_state *state = (tail2nos_state *)space->machine->driver_data; + int oldword = state->zoomdata[offset]; + + COMBINE_DATA(&state->zoomdata[offset]); + if (oldword != state->zoomdata[offset]) gfx_element_mark_dirty(space->machine->gfx[2], offset / 64); } WRITE16_HANDLER( tail2nos_gfxbank_w ) { + tail2nos_state *state = (tail2nos_state *)space->machine->driver_data; + if (ACCESSING_BITS_0_7) { int bank; /* bits 0 and 2 select char bank */ - if (data & 0x04) bank = 2; - else if (data & 0x01) bank = 1; - else bank = 0; - - if (charbank != bank) + if (data & 0x04) + bank = 2; + else if (data & 0x01) + bank = 1; + else + bank = 0; + + if (state->charbank != bank) { - charbank = bank; - tilemap_mark_all_tiles_dirty(bg_tilemap); + state->charbank = bank; + tilemap_mark_all_tiles_dirty(state->bg_tilemap); } /* bit 5 seems to select palette bank (used on startup) */ - if (data & 0x20) bank = 7; - else bank = 3; + if (data & 0x20) + bank = 7; + else + bank = 3; - if (charpalette != bank) + if (state->charpalette != bank) { - charpalette = bank; - tilemap_mark_all_tiles_dirty(bg_tilemap); + state->charpalette = bank; + tilemap_mark_all_tiles_dirty(state->bg_tilemap); } /* bit 4 seems to be video enable */ - video_enable = data & 0x10; + state->video_enable = data & 0x10; } } @@ -123,24 +146,27 @@ WRITE16_HANDLER( tail2nos_gfxbank_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 ) { - UINT16 *spriteram16 = machine->generic.spriteram.u16; + tail2nos_state *state = (tail2nos_state *)machine->driver_data; + UINT16 *spriteram = state->spriteram; int offs; - for (offs = 0;offs < machine->generic.spriteram_size/2;offs += 4) + for (offs = 0; offs < state->spriteram_size / 2; offs += 4) { - int sx,sy,flipx,flipy,code,color; - - sx = spriteram16[offs + 1]; - if (sx >= 0x8000) sx -= 0x10000; - sy = 0x10000 - spriteram16[offs + 0]; - if (sy >= 0x8000) sy -= 0x10000; - code = spriteram16[offs + 2] & 0x07ff; - color = (spriteram16[offs + 2] & 0xe000) >> 13; - flipx = spriteram16[offs + 2] & 0x1000; - flipy = spriteram16[offs + 2] & 0x0800; + int sx, sy, flipx, flipy, code, color; + + sx = spriteram[offs + 1]; + if (sx >= 0x8000) + sx -= 0x10000; + sy = 0x10000 - spriteram[offs + 0]; + if (sy >= 0x8000) + sy -= 0x10000; + code = spriteram[offs + 2] & 0x07ff; + color = (spriteram[offs + 2] & 0xe000) >> 13; + flipx = spriteram[offs + 2] & 0x1000; + flipy = spriteram[offs + 2] & 0x0800; drawgfx_transpen(bitmap,/* placement relative to zoom layer verified on the real thing */ cliprect,machine->gfx[1], @@ -153,13 +179,13 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap,const rectan VIDEO_UPDATE( tail2nos ) { - const device_config *k051316 = devtag_get_device(screen->machine, "k051316"); + tail2nos_state *state = (tail2nos_state *)screen->machine->driver_data; - if (video_enable) + if (state->video_enable) { - k051316_zoom_draw(k051316, bitmap,cliprect, 0, 0); + k051316_zoom_draw(state->k051316, bitmap, cliprect, 0, 0); draw_sprites(screen->machine, bitmap, cliprect); - tilemap_draw(bitmap, cliprect, bg_tilemap, 0, 0); + tilemap_draw(bitmap, cliprect, state->bg_tilemap, 0, 0); } else bitmap_fill(bitmap, cliprect, 0); diff --git a/src/mame/video/thunderx.c b/src/mame/video/thunderx.c index adba68d629a..962107ca6b7 100644 --- a/src/mame/video/thunderx.c +++ b/src/mame/video/thunderx.c @@ -1,8 +1,6 @@ #include "driver.h" #include "video/konicdev.h" - -int scontra_priority; -static int layer_colorbase[3],sprite_colorbase; +#include "includes/thunderx.h" /*************************************************************************** @@ -10,10 +8,11 @@ static int layer_colorbase[3],sprite_colorbase; ***************************************************************************/ -void thunderx_tile_callback(running_machine *machine, int layer,int bank,int *code,int *color,int *flags,int *priority) +void thunderx_tile_callback( running_machine *machine, int layer, int bank, int *code, int *color, int *flags, int *priority ) { + thunderx_state *state = (thunderx_state *)machine->driver_data; *code |= ((*color & 0x1f) << 8) | (bank << 13); - *color = layer_colorbase[layer] + ((*color & 0xe0) >> 5); + *color = state->layer_colorbase[layer] + ((*color & 0xe0) >> 5); } @@ -23,20 +22,22 @@ void thunderx_tile_callback(running_machine *machine, int layer,int bank,int *co ***************************************************************************/ -void thunderx_sprite_callback(running_machine *machine, int *code,int *color,int *priority_mask,int *shadow) +void thunderx_sprite_callback( running_machine *machine, int *code,int *color, int *priority_mask, int *shadow ) { + thunderx_state *state = (thunderx_state *)machine->driver_data; + /* Sprite priority 1 means appear behind background, used only to mask sprites */ /* in the foreground */ /* Sprite priority 3 means don't draw (not used) */ switch (*color & 0x30) { case 0x00: *priority_mask = 0xf0; break; - case 0x10: *priority_mask = 0xf0|0xcc|0xaa; break; - case 0x20: *priority_mask = 0xf0|0xcc; break; + case 0x10: *priority_mask = 0xf0 | 0xcc | 0xaa; break; + case 0x20: *priority_mask = 0xf0 | 0xcc; break; case 0x30: *priority_mask = 0xffff; break; } - *color = sprite_colorbase + (*color & 0x0f); + *color = state->sprite_colorbase + (*color & 0x0f); } @@ -49,10 +50,11 @@ void thunderx_sprite_callback(running_machine *machine, int *code,int *color,int VIDEO_START( scontra ) { - layer_colorbase[0] = 48; - layer_colorbase[1] = 0; - layer_colorbase[2] = 16; - sprite_colorbase = 32; + thunderx_state *state = (thunderx_state *)machine->driver_data; + state->layer_colorbase[0] = 48; + state->layer_colorbase[1] = 0; + state->layer_colorbase[2] = 16; + state->sprite_colorbase = 32; } @@ -64,27 +66,26 @@ VIDEO_START( scontra ) VIDEO_UPDATE( scontra ) { - const device_config *k052109 = devtag_get_device(screen->machine, "k052109"); - const device_config *k051960 = devtag_get_device(screen->machine, "k051960"); + thunderx_state *state = (thunderx_state *)screen->machine->driver_data; - k052109_tilemap_update(k052109); + k052109_tilemap_update(state->k052109); - bitmap_fill(screen->machine->priority_bitmap,cliprect,0); + bitmap_fill(screen->machine->priority_bitmap, cliprect, 0); /* The background color is always from layer 1 - but it's always black anyway */ -// bitmap_fill(bitmap,cliprect,16 * layer_colorbase[1]); - if (scontra_priority) +// bitmap_fill(bitmap,cliprect,16 * state->layer_colorbase[1]); + if (state->priority) { - k052109_tilemap_draw(k052109, bitmap, cliprect, 2, TILEMAP_DRAW_OPAQUE, 1); - k052109_tilemap_draw(k052109, bitmap, cliprect, 1, 0, 2); + k052109_tilemap_draw(state->k052109, bitmap, cliprect, 2, TILEMAP_DRAW_OPAQUE, 1); + k052109_tilemap_draw(state->k052109, bitmap, cliprect, 1, 0, 2); } else { - k052109_tilemap_draw(k052109, bitmap, cliprect, 1, TILEMAP_DRAW_OPAQUE, 1); - k052109_tilemap_draw(k052109, bitmap, cliprect, 2, 0, 2); + k052109_tilemap_draw(state->k052109, bitmap, cliprect, 1, TILEMAP_DRAW_OPAQUE, 1); + k052109_tilemap_draw(state->k052109, bitmap, cliprect, 2, 0, 2); } - k052109_tilemap_draw(k052109, bitmap, cliprect, 0, 0, 4); + k052109_tilemap_draw(state->k052109, bitmap, cliprect, 0, 0, 4); - k051960_sprites_draw(k051960, bitmap, cliprect, -1, -1); + k051960_sprites_draw(state->k051960, bitmap, cliprect, -1, -1); return 0; } diff --git a/src/mame/video/tmnt.c b/src/mame/video/tmnt.c index 4730f453eaf..edad9e4b9d7 100644 --- a/src/mame/video/tmnt.c +++ b/src/mame/video/tmnt.c @@ -2,38 +2,25 @@ #include "video/konicdev.h" #include "includes/tmnt.h" - -static int layer_colorbase[3],sprite_colorbase,bg_colorbase; -static int priorityflag; -static int layerpri[3]; -static int prmrsocr_sprite_bank; -static int sorted_layer[3]; -static int dim_c,dim_v; /* ssriders, tmnt2 */ -static int lastdim,lasten; - -static tilemap_t *roz_tilemap; - - -static int glfgreat_roz_rom_bank,glfgreat_roz_char_bank,glfgreat_roz_rom_mode; - static TILE_GET_INFO( glfgreat_get_roz_tile_info ) { + tmnt_state *state = (tmnt_state *)machine->driver_data; UINT8 *rom = memory_region(machine, "user1"); int code; - tile_index += 0x40000 * glfgreat_roz_rom_bank; + tile_index += 0x40000 * state->glfgreat_roz_rom_bank; - code = rom[tile_index+0x80000] + 256*rom[tile_index] + 256*256*((rom[tile_index/4+0x100000]>>(2*(tile_index&3)))&3); + code = rom[tile_index + 0x80000] + 256 * rom[tile_index] + 256 * 256 * ((rom[tile_index / 4 + 0x100000] >> (2 * (tile_index & 3))) & 3); - SET_TILE_INFO(0,code & 0x3fff,code >> 14,0); + SET_TILE_INFO(0, code & 0x3fff, code >> 14, 0); } static TILE_GET_INFO( prmrsocr_get_roz_tile_info ) { UINT8 *rom = memory_region(machine, "user1"); - int code = rom[tile_index+0x20000] + 256*rom[tile_index]; + int code = rom[tile_index + 0x20000] + 256 * rom[tile_index]; - SET_TILE_INFO(0,code & 0x1fff,code >> 13,0); + SET_TILE_INFO(0, code & 0x1fff, code >> 13, 0); } @@ -46,69 +33,68 @@ static TILE_GET_INFO( prmrsocr_get_roz_tile_info ) /* Missing in Action */ -void mia_tile_callback(running_machine *machine, int layer,int bank,int *code,int *color,int *flags,int *priority) +void mia_tile_callback( running_machine *machine, int layer, int bank, int *code, int *color, int *flags, int *priority ) { + tmnt_state *state = (tmnt_state *)machine->driver_data; *flags = (*color & 0x04) ? TILE_FLIPX : 0; if (layer == 0) { *code |= ((*color & 0x01) << 8); - *color = layer_colorbase[layer] + ((*color & 0x80) >> 5) + ((*color & 0x10) >> 1); + *color = state->layer_colorbase[layer] + ((*color & 0x80) >> 5) + ((*color & 0x10) >> 1); } else { *code |= ((*color & 0x01) << 8) | ((*color & 0x18) << 6) | (bank << 11); - *color = layer_colorbase[layer] + ((*color & 0xe0) >> 5); + *color = state->layer_colorbase[layer] + ((*color & 0xe0) >> 5); } } -void cuebrick_tile_callback(running_machine *machine, int layer,int bank,int *code,int *color,int *flags,int *priority) +void cuebrick_tile_callback( running_machine *machine, int layer, int bank, int *code, int *color, int *flags, int *priority ) { - const device_config *k052109 = devtag_get_device(machine, "k052109"); + tmnt_state *state = (tmnt_state *)machine->driver_data; - if ((k052109_get_rmrd_line(k052109) == CLEAR_LINE) && (layer == 0)) + if ((k052109_get_rmrd_line(state->k052109) == CLEAR_LINE) && (layer == 0)) { *code |= ((*color & 0x01) << 8); - *color = layer_colorbase[layer] + ((*color & 0x80) >> 5) + ((*color & 0x10) >> 1); + *color = state->layer_colorbase[layer] + ((*color & 0x80) >> 5) + ((*color & 0x10) >> 1); } else { *code |= ((*color & 0xf) << 8); - *color = layer_colorbase[layer] + ((*color & 0xe0) >> 5); + *color = state->layer_colorbase[layer] + ((*color & 0xe0) >> 5); } } -void tmnt_tile_callback(running_machine *machine, int layer,int bank,int *code,int *color,int *flags,int *priority) +void tmnt_tile_callback( running_machine *machine, int layer, int bank, int *code, int *color, int *flags, int *priority ) { - *code |= ((*color & 0x03) << 8) | ((*color & 0x10) << 6) | ((*color & 0x0c) << 9) - | (bank << 13); - *color = layer_colorbase[layer] + ((*color & 0xe0) >> 5); + tmnt_state *state = (tmnt_state *)machine->driver_data; + *code |= ((*color & 0x03) << 8) | ((*color & 0x10) << 6) | ((*color & 0x0c) << 9) | (bank << 13); + *color = state->layer_colorbase[layer] + ((*color & 0xe0) >> 5); } -void ssbl_tile_callback(running_machine *machine, int layer,int bank,int *code,int *color,int *flags,int *priority) +void ssbl_tile_callback( running_machine *machine, int layer, int bank, int *code, int *color, int *flags, int *priority ) { + tmnt_state *state = (tmnt_state *)machine->driver_data; if (layer == 0) { - *code |= ((*color & 0x03) << 8) | ((*color & 0x10) << 6) | ((*color & 0x0c) << 9) - | (bank << 13); + *code |= ((*color & 0x03) << 8) | ((*color & 0x10) << 6) | ((*color & 0x0c) << 9) | (bank << 13); } else { - *code |= ((*color & 0x03) << 8) | ((*color & 0x10) << 6) | ((*color & 0x0c) << 9) - | (bank << 13); + *code |= ((*color & 0x03) << 8) | ((*color & 0x10) << 6) | ((*color & 0x0c) << 9) | (bank << 13); // mame_printf_debug("L%d: bank %d code %x color %x\n", layer, bank, *code, *color); } - *color = layer_colorbase[layer] + ((*color & 0xe0) >> 5); + *color = state->layer_colorbase[layer] + ((*color & 0xe0) >> 5); } -static int blswhstl_rombank; - -void blswhstl_tile_callback(running_machine *machine, int layer,int bank,int *code,int *color,int *flags,int *priority) +void blswhstl_tile_callback( running_machine *machine, int layer, int bank, int *code, int *color, int *flags, int *priority ) { + tmnt_state *state = (tmnt_state *)machine->driver_data; + /* (color & 0x02) is flip y handled internally by the 052109 */ - *code |= ((*color & 0x01) << 8) | ((*color & 0x10) << 5) | ((*color & 0x0c) << 8) - | (bank << 12) | blswhstl_rombank << 14; - *color = layer_colorbase[layer] + ((*color & 0xe0) >> 5); + *code |= ((*color & 0x01) << 8) | ((*color & 0x10) << 5) | ((*color & 0x0c) << 8) | (bank << 12) | state->blswhstl_rombank << 14; + *color = state->layer_colorbase[layer] + ((*color & 0xe0) >> 5); } @@ -119,38 +105,50 @@ void blswhstl_tile_callback(running_machine *machine, int layer,int bank,int *co ***************************************************************************/ -void mia_sprite_callback(running_machine *machine, int *code,int *color,int *priority,int *shadow) +void mia_sprite_callback( running_machine *machine, int *code, int *color, int *priority, int *shadow ) { - *color = sprite_colorbase + (*color & 0x0f); + tmnt_state *state = (tmnt_state *)machine->driver_data; + *color = state->sprite_colorbase + (*color & 0x0f); } -void tmnt_sprite_callback(running_machine *machine, int *code,int *color,int *priority,int *shadow) +void tmnt_sprite_callback( running_machine *machine, int *code, int *color, int *priority, int *shadow ) { + tmnt_state *state = (tmnt_state *)machine->driver_data; *code |= (*color & 0x10) << 9; - *color = sprite_colorbase + (*color & 0x0f); + *color = state->sprite_colorbase + (*color & 0x0f); } -void punkshot_sprite_callback(running_machine *machine, int *code,int *color,int *priority_mask,int *shadow) +void punkshot_sprite_callback( running_machine *machine, int *code, int *color, int *priority_mask, int *shadow ) { + tmnt_state *state = (tmnt_state *)machine->driver_data; int pri = 0x20 | ((*color & 0x60) >> 2); - if (pri <= layerpri[2]) *priority_mask = 0; - else if (pri > layerpri[2] && pri <= layerpri[1]) *priority_mask = 0xf0; - else if (pri > layerpri[1] && pri <= layerpri[0]) *priority_mask = 0xf0|0xcc; - else *priority_mask = 0xf0|0xcc|0xaa; + if (pri <= state->layerpri[2]) + *priority_mask = 0; + else if (pri > state->layerpri[2] && pri <= state->layerpri[1]) + *priority_mask = 0xf0; + else if (pri > state->layerpri[1] && pri <= state->layerpri[0]) + *priority_mask = 0xf0 | 0xcc; + else + *priority_mask = 0xf0 | 0xcc | 0xaa; *code |= (*color & 0x10) << 9; - *color = sprite_colorbase + (*color & 0x0f); + *color = state->sprite_colorbase + (*color & 0x0f); } -void thndrx2_sprite_callback(running_machine *machine, int *code,int *color,int *priority_mask,int *shadow) +void thndrx2_sprite_callback( running_machine *machine, int *code, int *color, int *priority_mask, int *shadow ) { + tmnt_state *state = (tmnt_state *)machine->driver_data; int pri = 0x20 | ((*color & 0x60) >> 2); - if (pri <= layerpri[2]) *priority_mask = 0; - else if (pri > layerpri[2] && pri <= layerpri[1]) *priority_mask = 0xf0; - else if (pri > layerpri[1] && pri <= layerpri[0]) *priority_mask = 0xf0|0xcc; - else *priority_mask = 0xf0|0xcc|0xaa; + if (pri <= state->layerpri[2]) + *priority_mask = 0; + else if (pri > state->layerpri[2] && pri <= state->layerpri[1]) + *priority_mask = 0xf0; + else if (pri > state->layerpri[1] && pri <= state->layerpri[0]) + *priority_mask = 0xf0 | 0xcc; + else + *priority_mask = 0xf0 | 0xcc | 0xaa; - *color = sprite_colorbase + (*color & 0x0f); + *color = state->sprite_colorbase + (*color & 0x0f); } @@ -160,44 +158,59 @@ void thndrx2_sprite_callback(running_machine *machine, int *code,int *color,int ***************************************************************************/ -void lgtnfght_sprite_callback(running_machine *machine, int *code,int *color,int *priority_mask) +void lgtnfght_sprite_callback( running_machine *machine, int *code, int *color, int *priority_mask ) { + tmnt_state *state = (tmnt_state *)machine->driver_data; int pri = 0x20 | ((*color & 0x60) >> 2); - if (pri <= layerpri[2]) *priority_mask = 0; - else if (pri > layerpri[2] && pri <= layerpri[1]) *priority_mask = 0xf0; - else if (pri > layerpri[1] && pri <= layerpri[0]) *priority_mask = 0xf0|0xcc; - else *priority_mask = 0xf0|0xcc|0xaa; + if (pri <= state->layerpri[2]) + *priority_mask = 0; + else if (pri > state->layerpri[2] && pri <= state->layerpri[1]) + *priority_mask = 0xf0; + else if (pri > state->layerpri[1] && pri <= state->layerpri[0]) + *priority_mask = 0xf0 | 0xcc; + else + *priority_mask = 0xf0 | 0xcc | 0xaa; - *color = sprite_colorbase + (*color & 0x1f); + *color = state->sprite_colorbase + (*color & 0x1f); } -void blswhstl_sprite_callback(running_machine *machine, int *code,int *color,int *priority_mask) +void blswhstl_sprite_callback( running_machine *machine, int *code, int *color, int *priority_mask ) { + tmnt_state *state = (tmnt_state *)machine->driver_data; #if 0 if (input_code_pressed(machine, KEYCODE_Q) && (*color & 0x20)) *color = rand(); if (input_code_pressed(machine, KEYCODE_W) && (*color & 0x40)) *color = rand(); if (input_code_pressed(machine, KEYCODE_E) && (*color & 0x80)) *color = rand(); #endif int pri = 0x20 | ((*color & 0x60) >> 2); - if (pri <= layerpri[2]) *priority_mask = 0; - else if (pri > layerpri[2] && pri <= layerpri[1]) *priority_mask = 0xf0; - else if (pri > layerpri[1] && pri <= layerpri[0]) *priority_mask = 0xf0|0xcc; - else *priority_mask = 0xf0|0xcc|0xaa; + if (pri <= state->layerpri[2]) + *priority_mask = 0; + else if (pri > state->layerpri[2] && pri <= state->layerpri[1]) + *priority_mask = 0xf0; + else if (pri > state->layerpri[1] && pri <= state->layerpri[0]) + *priority_mask = 0xf0 | 0xcc; + else + *priority_mask = 0xf0 | 0xcc | 0xaa; - *color = sprite_colorbase + (*color & 0x1f); + *color = state->sprite_colorbase + (*color & 0x1f); } -void prmrsocr_sprite_callback(running_machine *machine, int *code,int *color,int *priority_mask) +void prmrsocr_sprite_callback( running_machine *machine, int *code, int *color, int *priority_mask ) { + tmnt_state *state = (tmnt_state *)machine->driver_data; int pri = 0x20 | ((*color & 0x60) >> 2); - if (pri <= layerpri[2]) *priority_mask = 0; - else if (pri > layerpri[2] && pri <= layerpri[1]) *priority_mask = 0xf0; - else if (pri > layerpri[1] && pri <= layerpri[0]) *priority_mask = 0xf0|0xcc; - else *priority_mask = 0xf0|0xcc|0xaa; + if (pri <= state->layerpri[2]) + *priority_mask = 0; + else if (pri > state->layerpri[2] && pri <= state->layerpri[1]) + *priority_mask = 0xf0; + else if (pri > state->layerpri[1] && pri <= state->layerpri[0]) + *priority_mask = 0xf0 | 0xcc; + else + *priority_mask = 0xf0 | 0xcc | 0xaa; - *code |= prmrsocr_sprite_bank << 14; + *code |= state->prmrsocr_sprite_bank << 14; - *color = sprite_colorbase + (*color & 0x1f); + *color = state->sprite_colorbase + (*color & 0x1f); } @@ -210,54 +223,85 @@ void prmrsocr_sprite_callback(running_machine *machine, int *code,int *color,int VIDEO_START( cuebrick ) { - layer_colorbase[0] = 0; - layer_colorbase[1] = 32; - layer_colorbase[2] = 40; - sprite_colorbase = 16; + tmnt_state *state = (tmnt_state *)machine->driver_data; + state->layer_colorbase[0] = 0; + state->layer_colorbase[1] = 32; + state->layer_colorbase[2] = 40; + state->sprite_colorbase = 16; } VIDEO_START( mia ) { - layer_colorbase[0] = 0; - layer_colorbase[1] = 32; - layer_colorbase[2] = 40; - sprite_colorbase = 16; + tmnt_state *state = (tmnt_state *)machine->driver_data; + state->layer_colorbase[0] = 0; + state->layer_colorbase[1] = 32; + state->layer_colorbase[2] = 40; + state->sprite_colorbase = 16; + + state->tmnt_priorityflag = 0; + state_save_register_global(machine, state->tmnt_priorityflag); } VIDEO_START( tmnt ) { - layer_colorbase[0] = 0; - layer_colorbase[1] = 32; - layer_colorbase[2] = 40; - sprite_colorbase = 16; + tmnt_state *state = (tmnt_state *)machine->driver_data; + state->layer_colorbase[0] = 0; + state->layer_colorbase[1] = 32; + state->layer_colorbase[2] = 40; + state->sprite_colorbase = 16; + + state->tmnt_priorityflag = 0; + state_save_register_global(machine, state->tmnt_priorityflag); } VIDEO_START( lgtnfght ) /* also tmnt2, ssriders */ { - const device_config *k053245 = devtag_get_device(machine, "k053245"); + tmnt_state *state = (tmnt_state *)machine->driver_data; - k05324x_set_z_rejection(k053245, 0); + k05324x_set_z_rejection(state->k053245, 0); - dim_c = dim_v = lastdim = lasten = 0; + state->dim_c = state->dim_v = state->lastdim = state->lasten = 0; - state_save_register_global(machine, dim_c); - state_save_register_global(machine, dim_v); - state_save_register_global(machine, lastdim); - state_save_register_global(machine, lasten); + state_save_register_global(machine, state->dim_c); + state_save_register_global(machine, state->dim_v); + state_save_register_global(machine, state->lastdim); + state_save_register_global(machine, state->lasten); } VIDEO_START( glfgreat ) { - roz_tilemap = tilemap_create(machine, glfgreat_get_roz_tile_info,tilemap_scan_rows,16,16,512,512); + tmnt_state *state = (tmnt_state *)machine->driver_data; + + state->roz_tilemap = tilemap_create(machine, glfgreat_get_roz_tile_info, tilemap_scan_rows, 16, 16, 512, 512); + tilemap_set_transparent_pen(state->roz_tilemap,0); - tilemap_set_transparent_pen(roz_tilemap,0); + state->glfgreat_roz_rom_bank = 0; + state->glfgreat_roz_char_bank = 0; + state->glfgreat_roz_rom_mode = 0; + state_save_register_global(machine, state->glfgreat_roz_rom_bank); + state_save_register_global(machine, state->glfgreat_roz_char_bank); + state_save_register_global(machine, state->glfgreat_roz_rom_mode); } VIDEO_START( prmrsocr ) { - roz_tilemap = tilemap_create(machine, prmrsocr_get_roz_tile_info,tilemap_scan_rows,16,16,512,256); + tmnt_state *state = (tmnt_state *)machine->driver_data; - tilemap_set_transparent_pen(roz_tilemap,0); + state->roz_tilemap = tilemap_create(machine, prmrsocr_get_roz_tile_info, tilemap_scan_rows, 16, 16, 512, 256); + tilemap_set_transparent_pen(state->roz_tilemap,0); + + state->prmrsocr_sprite_bank = 0; + state->glfgreat_roz_char_bank = 0; + state_save_register_global(machine, state->prmrsocr_sprite_bank); + state_save_register_global(machine, state->glfgreat_roz_char_bank); +} + +VIDEO_START( blswhstl ) +{ + tmnt_state *state = (tmnt_state *)machine->driver_data; + + state->blswhstl_rombank = -1; + state_save_register_global(machine, state->blswhstl_rombank); } @@ -272,35 +316,33 @@ WRITE16_HANDLER( tmnt_paletteram_word_w ) COMBINE_DATA(space->machine->generic.paletteram.u16 + offset); offset &= ~1; - data = (space->machine->generic.paletteram.u16[offset] << 8) | space->machine->generic.paletteram.u16[offset+1]; - palette_set_color_rgb(space->machine,offset / 2,pal5bit(data >> 0),pal5bit(data >> 5),pal5bit(data >> 10)); + data = (space->machine->generic.paletteram.u16[offset] << 8) | space->machine->generic.paletteram.u16[offset + 1]; + palette_set_color_rgb(space->machine, offset / 2, pal5bit(data >> 0), pal5bit(data >> 5), pal5bit(data >> 10)); } WRITE16_HANDLER( tmnt_0a0000_w ) { - const device_config *k052109 = devtag_get_device(space->machine, "k052109"); + tmnt_state *state = (tmnt_state *)space->machine->driver_data; if (ACCESSING_BITS_0_7) { - static int last; - /* bit 0/1 = coin counters */ coin_counter_w(space->machine, 0, data & 0x01); coin_counter_w(space->machine, 1, data & 0x02); /* 2 players version */ /* bit 3 high then low triggers irq on sound CPU */ - if (last == 0x08 && (data & 0x08) == 0) - cputag_set_input_line_and_vector(space->machine, "audiocpu", 0, HOLD_LINE, 0xff); + if (state->last == 0x08 && (data & 0x08) == 0) + cpu_set_input_line_and_vector(state->audiocpu, 0, HOLD_LINE, 0xff); - last = data & 0x08; + state->last = data & 0x08; /* bit 5 = irq enable */ interrupt_enable_w(space, 0, data & 0x20); /* bit 7 = enable char ROM reading through the video RAM */ - k052109_set_rmrd_line(k052109, (data & 0x80) ? ASSERT_LINE : CLEAR_LINE); + k052109_set_rmrd_line(state->k052109, (data & 0x80) ? ASSERT_LINE : CLEAR_LINE); /* other bits unused */ } @@ -308,53 +350,48 @@ WRITE16_HANDLER( tmnt_0a0000_w ) WRITE16_HANDLER( punkshot_0a0020_w ) { - const device_config *k052109 = devtag_get_device(space->machine, "k052109"); + tmnt_state *state = (tmnt_state *)space->machine->driver_data; if (ACCESSING_BITS_0_7) { - static int last; - - /* bit 0 = coin counter */ coin_counter_w(space->machine, 0, data & 0x01); /* bit 2 = trigger irq on sound CPU */ - if (last == 0x04 && (data & 0x04) == 0) - cputag_set_input_line_and_vector(space->machine, "audiocpu", 0, HOLD_LINE, 0xff); + if (state->last == 0x04 && (data & 0x04) == 0) + cpu_set_input_line_and_vector(state->audiocpu, 0, HOLD_LINE, 0xff); - last = data & 0x04; + state->last = data & 0x04; /* bit 3 = enable char ROM reading through the video RAM */ - k052109_set_rmrd_line(k052109, (data & 0x08) ? ASSERT_LINE : CLEAR_LINE); + k052109_set_rmrd_line(state->k052109, (data & 0x08) ? ASSERT_LINE : CLEAR_LINE); } } WRITE16_HANDLER( lgtnfght_0a0018_w ) { - const device_config *k052109 = devtag_get_device(space->machine, "k052109"); + tmnt_state *state = (tmnt_state *)space->machine->driver_data; if (ACCESSING_BITS_0_7) { - static int last; - /* bit 0,1 = coin counter */ coin_counter_w(space->machine, 0, data & 0x01); coin_counter_w(space->machine, 1, data & 0x02); /* bit 2 = trigger irq on sound CPU */ - if (last == 0x00 && (data & 0x04) == 0x04) - cputag_set_input_line_and_vector(space->machine, "audiocpu", 0, HOLD_LINE, 0xff); + if (state->last == 0x00 && (data & 0x04) == 0x04) + cpu_set_input_line_and_vector(state->audiocpu, 0, HOLD_LINE, 0xff); - last = data & 0x04; + state->last = data & 0x04; /* bit 3 = enable char ROM reading through the video RAM */ - k052109_set_rmrd_line(k052109, (data & 0x08) ? ASSERT_LINE : CLEAR_LINE); + k052109_set_rmrd_line(state->k052109, (data & 0x08) ? ASSERT_LINE : CLEAR_LINE); } } WRITE16_HANDLER( blswhstl_700300_w ) { - const device_config *k052109 = devtag_get_device(space->machine, "k052109"); + tmnt_state *state = (tmnt_state *)space->machine->driver_data; if (ACCESSING_BITS_0_7) { @@ -363,12 +400,12 @@ WRITE16_HANDLER( blswhstl_700300_w ) coin_counter_w(space->machine, 1,data & 0x02); /* bit 3 = enable char ROM reading through the video RAM */ - k052109_set_rmrd_line(k052109, (data & 0x08) ? ASSERT_LINE : CLEAR_LINE); + k052109_set_rmrd_line(state->k052109, (data & 0x08) ? ASSERT_LINE : CLEAR_LINE); /* bit 7 = select char ROM bank */ - if (blswhstl_rombank != ((data & 0x80) >> 7)) + if (state->blswhstl_rombank != ((data & 0x80) >> 7)) { - blswhstl_rombank = (data & 0x80) >> 7; + state->blswhstl_rombank = (data & 0x80) >> 7; tilemap_mark_all_tiles_dirty_all(space->machine); } @@ -379,54 +416,55 @@ WRITE16_HANDLER( blswhstl_700300_w ) READ16_HANDLER( glfgreat_rom_r ) { - if (glfgreat_roz_rom_mode) - return memory_region(space->machine, "gfx3")[glfgreat_roz_char_bank * 0x80000 + offset]; + tmnt_state *state = (tmnt_state *)space->machine->driver_data; + + if (state->glfgreat_roz_rom_mode) + return memory_region(space->machine, "gfx3")[state->glfgreat_roz_char_bank * 0x80000 + offset]; else if (offset < 0x40000) { UINT8 *usr = memory_region(space->machine, "user1"); - return usr[offset + 0x80000 + glfgreat_roz_rom_bank * 0x40000] + - 256 * usr[offset + glfgreat_roz_rom_bank * 0x40000]; + return usr[offset + 0x80000 + state->glfgreat_roz_rom_bank * 0x40000] + 256 * usr[offset + state->glfgreat_roz_rom_bank * 0x40000]; } else - return memory_region(space->machine, "user1")[((offset & 0x3ffff) >> 2) + 0x100000 + glfgreat_roz_rom_bank * 0x10000]; + return memory_region(space->machine, "user1")[((offset & 0x3ffff) >> 2) + 0x100000 + state->glfgreat_roz_rom_bank * 0x10000]; } WRITE16_HANDLER( glfgreat_122000_w ) { - const device_config *k052109 = devtag_get_device(space->machine, "k052109"); + tmnt_state *state = (tmnt_state *)space->machine->driver_data; if (ACCESSING_BITS_0_7) { /* bit 0,1 = coin counter */ - coin_counter_w(space->machine, 0,data & 0x01); - coin_counter_w(space->machine, 1,data & 0x02); + coin_counter_w(space->machine, 0, data & 0x01); + coin_counter_w(space->machine, 1, data & 0x02); /* bit 4 = enable char ROM reading through the video RAM */ - k052109_set_rmrd_line(k052109, (data & 0x10) ? ASSERT_LINE : CLEAR_LINE); + k052109_set_rmrd_line(state->k052109, (data & 0x10) ? ASSERT_LINE : CLEAR_LINE); /* bit 5 = 53596 tile rom bank selection */ - if (glfgreat_roz_rom_bank != (data & 0x20) >> 5) + if (state->glfgreat_roz_rom_bank != (data & 0x20) >> 5) { - glfgreat_roz_rom_bank = (data & 0x20) >> 5; - tilemap_mark_all_tiles_dirty(roz_tilemap); + state->glfgreat_roz_rom_bank = (data & 0x20) >> 5; + tilemap_mark_all_tiles_dirty(state->roz_tilemap); } /* bit 6,7 = 53596 char bank selection for ROM test */ - glfgreat_roz_char_bank = (data & 0xc0) >> 6; + state->glfgreat_roz_char_bank = (data & 0xc0) >> 6; /* other bits unknown */ } if (ACCESSING_BITS_8_15) { /* bit 8 = 53596 char/rom selection for ROM test */ - glfgreat_roz_rom_mode = data & 0x100; + state->glfgreat_roz_rom_mode = data & 0x100; } } WRITE16_HANDLER( ssriders_eeprom_w ) { - const device_config *k053245 = devtag_get_device(space->machine, "k053245"); + tmnt_state *state = (tmnt_state *)space->machine->driver_data; if (ACCESSING_BITS_0_7) { @@ -438,51 +476,50 @@ WRITE16_HANDLER( ssriders_eeprom_w ) /* bits 3-4 control palette dimming */ /* 4 = DIMPOL = when set, negate SHAD */ /* 3 = DIMMOD = when set, or BRIT with [negated] SHAD */ - dim_c = data & 0x18; + state->dim_c = data & 0x18; /* bit 5 selects sprite ROM for testing in TMNT2 (bits 5-7, actually, according to the schematics) */ - k053244_bankselect(k053245, ((data & 0x20) >> 5) << 2); + k053244_bankselect(state->k053245, ((data & 0x20) >> 5) << 2); } } WRITE16_HANDLER( ssriders_1c0300_w ) { - const device_config *k052109 = devtag_get_device(space->machine, "k052109"); + tmnt_state *state = (tmnt_state *)space->machine->driver_data; if (ACCESSING_BITS_0_7) { /* bit 0,1 = coin counter */ - coin_counter_w(space->machine, 0,data & 0x01); - coin_counter_w(space->machine, 1,data & 0x02); + coin_counter_w(space->machine, 0, data & 0x01); + coin_counter_w(space->machine, 1, data & 0x02); /* bit 3 = enable char ROM reading through the video RAM */ - k052109_set_rmrd_line(k052109, (data & 0x08) ? ASSERT_LINE : CLEAR_LINE); + k052109_set_rmrd_line(state->k052109, (data & 0x08) ? ASSERT_LINE : CLEAR_LINE); /* bits 4-6 control palette dimming (DIM0-DIM2) */ - dim_v = (data & 0x70) >> 4; + state->dim_v = (data & 0x70) >> 4; } } WRITE16_HANDLER( prmrsocr_122000_w ) { - const device_config *k052109 = devtag_get_device(space->machine, "k052109"); - const device_config *k053245 = devtag_get_device(space->machine, "k053245"); + tmnt_state *state = (tmnt_state *)space->machine->driver_data; if (ACCESSING_BITS_0_7) { /* bit 0,1 = coin counter */ - coin_counter_w(space->machine, 0,data & 0x01); - coin_counter_w(space->machine, 1,data & 0x02); + coin_counter_w(space->machine, 0, data & 0x01); + coin_counter_w(space->machine, 1, data & 0x02); /* bit 4 = enable char ROM reading through the video RAM */ - k052109_set_rmrd_line(k052109, (data & 0x10) ? ASSERT_LINE : CLEAR_LINE); + k052109_set_rmrd_line(state->k052109, (data & 0x10) ? ASSERT_LINE : CLEAR_LINE); /* bit 6 = sprite ROM bank */ - prmrsocr_sprite_bank = (data & 0x40) >> 6; - k053244_bankselect(k053245, prmrsocr_sprite_bank << 2); + state->prmrsocr_sprite_bank = (data & 0x40) >> 6; + k053244_bankselect(state->k053245, state->prmrsocr_sprite_bank << 2); /* bit 7 = 53596 region selector for ROM test */ - glfgreat_roz_char_bank = (data & 0x80) >> 7; + state->glfgreat_roz_char_bank = (data & 0x80) >> 7; /* other bits unknown (unused?) */ } @@ -490,7 +527,9 @@ WRITE16_HANDLER( prmrsocr_122000_w ) READ16_HANDLER( prmrsocr_rom_r ) { - if(glfgreat_roz_char_bank) + tmnt_state *state = (tmnt_state *)space->machine->driver_data; + + if(state->glfgreat_roz_char_bank) return memory_region(space->machine, "gfx3")[offset]; else { @@ -501,6 +540,8 @@ READ16_HANDLER( prmrsocr_rom_r ) WRITE16_HANDLER( tmnt_priority_w ) { + tmnt_state *state = (tmnt_state *)space->machine->driver_data; + if (ACCESSING_BITS_0_7) { /* bit 2/3 = priority; other bits unused */ @@ -521,7 +562,7 @@ WRITE16_HANDLER( tmnt_priority_w ) are 0) is taken from the *foreground* palette, not the background one as would be more intuitive. */ - priorityflag = (data & 0x0c) >> 2; + state->tmnt_priorityflag = (data & 0x0c) >> 2; } } @@ -533,50 +574,32 @@ WRITE16_HANDLER( tmnt_priority_w ) ***************************************************************************/ -/* useful function to sort the three tile layers by priority order */ -static void sortlayers(int *layer,int *pri) -{ -#define SWAP(a,b) \ - if (pri[a] < pri[b]) \ - { \ - int t; \ - t = pri[a]; pri[a] = pri[b]; pri[b] = t; \ - t = layer[a]; layer[a] = layer[b]; layer[b] = t; \ - } - - SWAP(0,1) - SWAP(0,2) - SWAP(1,2) -} - VIDEO_UPDATE( mia ) { - const device_config *k052109 = devtag_get_device(screen->machine, "k052109"); - const device_config *k051960 = devtag_get_device(screen->machine, "k051960"); + tmnt_state *state = (tmnt_state *)screen->machine->driver_data; - k052109_tilemap_update(k052109); + k052109_tilemap_update(state->k052109); - k052109_tilemap_draw(k052109, bitmap, cliprect, 2, TILEMAP_DRAW_OPAQUE,0); - if ((priorityflag & 1) == 1) k051960_sprites_draw(k051960,bitmap,cliprect,0,0); - k052109_tilemap_draw(k052109, bitmap, cliprect, 1, 0, 0); - if ((priorityflag & 1) == 0) k051960_sprites_draw(k051960,bitmap,cliprect,0,0); - k052109_tilemap_draw(k052109, bitmap, cliprect, 0, 0, 0); + k052109_tilemap_draw(state->k052109, bitmap, cliprect, 2, TILEMAP_DRAW_OPAQUE,0); + if ((state->tmnt_priorityflag & 1) == 1) k051960_sprites_draw(state->k051960, bitmap, cliprect, 0, 0); + k052109_tilemap_draw(state->k052109, bitmap, cliprect, 1, 0, 0); + if ((state->tmnt_priorityflag & 1) == 0) k051960_sprites_draw(state->k051960, bitmap, cliprect, 0, 0); + k052109_tilemap_draw(state->k052109, bitmap, cliprect, 0, 0, 0); return 0; } VIDEO_UPDATE( tmnt ) { - const device_config *k052109 = devtag_get_device(screen->machine, "k052109"); - const device_config *k051960 = devtag_get_device(screen->machine, "k051960"); + tmnt_state *state = (tmnt_state *)screen->machine->driver_data; - k052109_tilemap_update(k052109); + k052109_tilemap_update(state->k052109); - k052109_tilemap_draw(k052109, bitmap, cliprect, 2, TILEMAP_DRAW_OPAQUE,0); - if ((priorityflag & 1) == 1) k051960_sprites_draw(k051960,bitmap,cliprect,0,0); - k052109_tilemap_draw(k052109, bitmap, cliprect, 1, 0, 0); - if ((priorityflag & 1) == 0) k051960_sprites_draw(k051960,bitmap,cliprect,0,0); - k052109_tilemap_draw(k052109, bitmap, cliprect, 0, 0, 0); + k052109_tilemap_draw(state->k052109, bitmap, cliprect, 2, TILEMAP_DRAW_OPAQUE,0); + if ((state->tmnt_priorityflag & 1) == 1) k051960_sprites_draw(state->k051960, bitmap, cliprect, 0, 0); + k052109_tilemap_draw(state->k052109, bitmap, cliprect, 1, 0, 0); + if ((state->tmnt_priorityflag & 1) == 0) k051960_sprites_draw(state->k051960, bitmap, cliprect, 0, 0); + k052109_tilemap_draw(state->k052109, bitmap, cliprect, 0, 0, 0); return 0; } @@ -584,153 +607,153 @@ VIDEO_UPDATE( tmnt ) VIDEO_UPDATE( punkshot ) { - const device_config *k052109 = devtag_get_device(screen->machine, "k052109"); - const device_config *k053251 = devtag_get_device(screen->machine, "k053251"); - const device_config *k051960 = devtag_get_device(screen->machine, "k051960"); + tmnt_state *state = (tmnt_state *)screen->machine->driver_data; + int bg_colorbase; - bg_colorbase = k053251_get_palette_index(k053251, K053251_CI0); - sprite_colorbase = k053251_get_palette_index(k053251, K053251_CI1); - layer_colorbase[0] = k053251_get_palette_index(k053251, K053251_CI2); - layer_colorbase[1] = k053251_get_palette_index(k053251, K053251_CI4); - layer_colorbase[2] = k053251_get_palette_index(k053251, K053251_CI3); + bg_colorbase = k053251_get_palette_index(state->k053251, K053251_CI0); + state->sprite_colorbase = k053251_get_palette_index(state->k053251, K053251_CI1); + state->layer_colorbase[0] = k053251_get_palette_index(state->k053251, K053251_CI2); + state->layer_colorbase[1] = k053251_get_palette_index(state->k053251, K053251_CI4); + state->layer_colorbase[2] = k053251_get_palette_index(state->k053251, K053251_CI3); - k052109_tilemap_update(k052109); + k052109_tilemap_update(state->k052109); - sorted_layer[0] = 0; - layerpri[0] = k053251_get_priority(k053251, K053251_CI2); - sorted_layer[1] = 1; - layerpri[1] = k053251_get_priority(k053251, K053251_CI4); - sorted_layer[2] = 2; - layerpri[2] = k053251_get_priority(k053251, K053251_CI3); + state->sorted_layer[0] = 0; + state->layerpri[0] = k053251_get_priority(state->k053251, K053251_CI2); + state->sorted_layer[1] = 1; + state->layerpri[1] = k053251_get_priority(state->k053251, K053251_CI4); + state->sorted_layer[2] = 2; + state->layerpri[2] = k053251_get_priority(state->k053251, K053251_CI3); - sortlayers(sorted_layer,layerpri); + konami_sortlayers3(state->sorted_layer, state->layerpri); - bitmap_fill(screen->machine->priority_bitmap,cliprect,0); - k052109_tilemap_draw(k052109, bitmap, cliprect, sorted_layer[0], TILEMAP_DRAW_OPAQUE, 1); - k052109_tilemap_draw(k052109, bitmap, cliprect, sorted_layer[1], 0, 2); - k052109_tilemap_draw(k052109, bitmap, cliprect, sorted_layer[2], 0, 4); + bitmap_fill(screen->machine->priority_bitmap, cliprect, 0); + k052109_tilemap_draw(state->k052109, bitmap, cliprect, state->sorted_layer[0], TILEMAP_DRAW_OPAQUE, 1); + k052109_tilemap_draw(state->k052109, bitmap, cliprect, state->sorted_layer[1], 0, 2); + k052109_tilemap_draw(state->k052109, bitmap, cliprect, state->sorted_layer[2], 0, 4); - k051960_sprites_draw(k051960, bitmap, cliprect, -1, -1); + k051960_sprites_draw(state->k051960, bitmap, cliprect, -1, -1); return 0; } VIDEO_UPDATE( lgtnfght ) { - const device_config *k052109 = devtag_get_device(screen->machine, "k052109"); - const device_config *k053251 = devtag_get_device(screen->machine, "k053251"); - const device_config *k053245 = devtag_get_device(screen->machine, "k053245"); + tmnt_state *state = (tmnt_state *)screen->machine->driver_data; + int bg_colorbase; - bg_colorbase = k053251_get_palette_index(k053251, K053251_CI0); - sprite_colorbase = k053251_get_palette_index(k053251, K053251_CI1); - layer_colorbase[0] = k053251_get_palette_index(k053251, K053251_CI2); - layer_colorbase[1] = k053251_get_palette_index(k053251, K053251_CI4); - layer_colorbase[2] = k053251_get_palette_index(k053251, K053251_CI3); + bg_colorbase = k053251_get_palette_index(state->k053251, K053251_CI0); + state->sprite_colorbase = k053251_get_palette_index(state->k053251, K053251_CI1); + state->layer_colorbase[0] = k053251_get_palette_index(state->k053251, K053251_CI2); + state->layer_colorbase[1] = k053251_get_palette_index(state->k053251, K053251_CI4); + state->layer_colorbase[2] = k053251_get_palette_index(state->k053251, K053251_CI3); - k052109_tilemap_update(k052109); + k052109_tilemap_update(state->k052109); - sorted_layer[0] = 0; - layerpri[0] = k053251_get_priority(k053251, K053251_CI2); - sorted_layer[1] = 1; - layerpri[1] = k053251_get_priority(k053251, K053251_CI4); - sorted_layer[2] = 2; - layerpri[2] = k053251_get_priority(k053251, K053251_CI3); + state->sorted_layer[0] = 0; + state->layerpri[0] = k053251_get_priority(state->k053251, K053251_CI2); + state->sorted_layer[1] = 1; + state->layerpri[1] = k053251_get_priority(state->k053251, K053251_CI4); + state->sorted_layer[2] = 2; + state->layerpri[2] = k053251_get_priority(state->k053251, K053251_CI3); - sortlayers(sorted_layer,layerpri); + konami_sortlayers3(state->sorted_layer, state->layerpri); - bitmap_fill(screen->machine->priority_bitmap,cliprect,0); - bitmap_fill(bitmap,cliprect,16 * bg_colorbase); - k052109_tilemap_draw(k052109, bitmap, cliprect, sorted_layer[0], 0, 1); - k052109_tilemap_draw(k052109, bitmap, cliprect, sorted_layer[1], 0, 2); - k052109_tilemap_draw(k052109, bitmap, cliprect, sorted_layer[2], 0, 4); + bitmap_fill(screen->machine->priority_bitmap, cliprect, 0); + bitmap_fill(bitmap, cliprect, 16 * bg_colorbase); + k052109_tilemap_draw(state->k052109, bitmap, cliprect, state->sorted_layer[0], 0, 1); + k052109_tilemap_draw(state->k052109, bitmap, cliprect, state->sorted_layer[1], 0, 2); + k052109_tilemap_draw(state->k052109, bitmap, cliprect, state->sorted_layer[2], 0, 4); - k053245_sprites_draw(k053245, bitmap, cliprect); + k053245_sprites_draw(state->k053245, bitmap, cliprect); return 0; } -static int glfgreat_pixel; READ16_HANDLER( glfgreat_ball_r ) { + tmnt_state *state = (tmnt_state *)space->machine->driver_data; + #ifdef MAME_DEBUG -popmessage("%04x",glfgreat_pixel); +popmessage("%04x", state->glfgreat_pixel); #endif /* if out of the ROZ layer palette range, it's in the water - return 0 */ - if (glfgreat_pixel < 0x400 || glfgreat_pixel >= 0x500) return 0; - else return glfgreat_pixel & 0xff; + if (state->glfgreat_pixel < 0x400 || state->glfgreat_pixel >= 0x500) + return 0; + else + return state->glfgreat_pixel & 0xff; } VIDEO_UPDATE( glfgreat ) { - const device_config *k052109 = devtag_get_device(screen->machine, "k052109"); - const device_config *k053251 = devtag_get_device(screen->machine, "k053251"); - const device_config *k053245 = devtag_get_device(screen->machine, "k053245"); - const device_config *k053936 = devtag_get_device(screen->machine, "k053936"); + tmnt_state *state = (tmnt_state *)screen->machine->driver_data; + int bg_colorbase; - bg_colorbase = k053251_get_palette_index(k053251, K053251_CI0); - sprite_colorbase = k053251_get_palette_index(k053251, K053251_CI1); - layer_colorbase[0] = k053251_get_palette_index(k053251, K053251_CI2); - layer_colorbase[1] = k053251_get_palette_index(k053251, K053251_CI3) + 8; /* weird... */ - layer_colorbase[2] = k053251_get_palette_index(k053251, K053251_CI4); + bg_colorbase = k053251_get_palette_index(state->k053251, K053251_CI0); + state->sprite_colorbase = k053251_get_palette_index(state->k053251, K053251_CI1); + state->layer_colorbase[0] = k053251_get_palette_index(state->k053251, K053251_CI2); + state->layer_colorbase[1] = k053251_get_palette_index(state->k053251, K053251_CI3) + 8; /* weird... */ + state->layer_colorbase[2] = k053251_get_palette_index(state->k053251, K053251_CI4); - k052109_tilemap_update(k052109); + k052109_tilemap_update(state->k052109); - sorted_layer[0] = 0; - layerpri[0] = k053251_get_priority(k053251, K053251_CI2); - sorted_layer[1] = 1; - layerpri[1] = k053251_get_priority(k053251, K053251_CI3); - sorted_layer[2] = 2; - layerpri[2] = k053251_get_priority(k053251, K053251_CI4); + state->sorted_layer[0] = 0; + state->layerpri[0] = k053251_get_priority(state->k053251, K053251_CI2); + state->sorted_layer[1] = 1; + state->layerpri[1] = k053251_get_priority(state->k053251, K053251_CI3); + state->sorted_layer[2] = 2; + state->layerpri[2] = k053251_get_priority(state->k053251, K053251_CI4); - sortlayers(sorted_layer,layerpri); + konami_sortlayers3(state->sorted_layer, state->layerpri); /* not sure about the 053936 priority, but it seems to work */ - bitmap_fill(screen->machine->priority_bitmap,cliprect,0); - bitmap_fill(bitmap,cliprect,16 * bg_colorbase); - k052109_tilemap_draw(k052109, bitmap, cliprect, sorted_layer[0], 0, 1); + bitmap_fill(screen->machine->priority_bitmap, cliprect, 0); + bitmap_fill(bitmap, cliprect,16 * bg_colorbase); + k052109_tilemap_draw(state->k052109, bitmap, cliprect, state->sorted_layer[0], 0, 1); - if (layerpri[0] >= 0x30 && layerpri[1] < 0x30) + if (state->layerpri[0] >= 0x30 && state->layerpri[1] < 0x30) { - k053936_zoom_draw(k053936, bitmap, cliprect, roz_tilemap, 0, 1, 1); - glfgreat_pixel = *BITMAP_ADDR16(bitmap,0x80,0x105); + k053936_zoom_draw(state->k053936, bitmap, cliprect, state->roz_tilemap, 0, 1, 1); + state->glfgreat_pixel = *BITMAP_ADDR16(bitmap, 0x80, 0x105); } - k052109_tilemap_draw(k052109, bitmap, cliprect, sorted_layer[1], 0, 2); + k052109_tilemap_draw(state->k052109, bitmap, cliprect, state->sorted_layer[1], 0, 2); - if (layerpri[1] >= 0x30 && layerpri[2] < 0x30) + if (state->layerpri[1] >= 0x30 && state->layerpri[2] < 0x30) { - k053936_zoom_draw(k053936, bitmap, cliprect, roz_tilemap, 0, 1, 1); - glfgreat_pixel = *BITMAP_ADDR16(bitmap,0x80,0x105); + k053936_zoom_draw(state->k053936, bitmap, cliprect, state->roz_tilemap, 0, 1, 1); + state->glfgreat_pixel = *BITMAP_ADDR16(bitmap, 0x80, 0x105); } - k052109_tilemap_draw(k052109, bitmap, cliprect, sorted_layer[2], 0, 4); + k052109_tilemap_draw(state->k052109, bitmap, cliprect, state->sorted_layer[2], 0, 4); - if (layerpri[2] >= 0x30) + if (state->layerpri[2] >= 0x30) { - k053936_zoom_draw(k053936, bitmap, cliprect, roz_tilemap, 0, 1, 1); - glfgreat_pixel = *BITMAP_ADDR16(bitmap,0x80,0x105); + k053936_zoom_draw(state->k053936, bitmap, cliprect, state->roz_tilemap, 0, 1, 1); + state->glfgreat_pixel = *BITMAP_ADDR16(bitmap, 0x80, 0x105); } - k053245_sprites_draw(k053245, bitmap, cliprect); + k053245_sprites_draw(state->k053245, bitmap, cliprect); return 0; } VIDEO_UPDATE( tmnt2 ) { - const device_config *k053251 = devtag_get_device(screen->machine, "k053251"); + tmnt_state *state = (tmnt_state *)screen->machine->driver_data; double brt; int i, newdim, newen, cb, ce; - newdim = dim_v | ((~dim_c & 0x10) >> 1); - newen = (k053251_get_priority(k053251, 5) && k053251_get_priority(k053251, 5) != 0x3e); + newdim = state->dim_v | ((~state->dim_c & 0x10) >> 1); + newen = (k053251_get_priority(state->k053251, 5) && k053251_get_priority(state->k053251, 5) != 0x3e); - if (newdim != lastdim || newen != lasten) + if (newdim != state->lastdim || newen != state->lasten) { brt = 1.0; - if (newen) brt -= (1.0-PALETTE_DEFAULT_SHADOW_FACTOR)*newdim/8; - lastdim = newdim; - lasten = newen; + if (newen) + brt -= (1.0 - PALETTE_DEFAULT_SHADOW_FACTOR) * newdim / 8; + state->lastdim = newdim; + state->lasten = newen; /* Only affect the background and sprites, not text layer. @@ -741,7 +764,7 @@ VIDEO_UPDATE( tmnt2 ) */ // find the text layer's palette range - cb = layer_colorbase[sorted_layer[2]] << 4; + cb = state->layer_colorbase[state->sorted_layer[2]] << 4; ce = cb + 128; // dim all colors before it @@ -757,7 +780,7 @@ VIDEO_UPDATE( tmnt2 ) palette_set_pen_contrast(screen->machine, i, brt); // toggle shadow/highlight - if (~dim_c & 0x10) + if (~state->dim_c & 0x10) palette_set_shadow_mode(screen->machine, 1); else palette_set_shadow_mode(screen->machine, 0); @@ -770,34 +793,33 @@ VIDEO_UPDATE( tmnt2 ) VIDEO_UPDATE( thndrx2 ) { - const device_config *k052109 = devtag_get_device(screen->machine, "k052109"); - const device_config *k053251 = devtag_get_device(screen->machine, "k053251"); - const device_config *k051960 = devtag_get_device(screen->machine, "k051960"); + tmnt_state *state = (tmnt_state *)screen->machine->driver_data; + int bg_colorbase; - bg_colorbase = k053251_get_palette_index(k053251, K053251_CI0); - sprite_colorbase = k053251_get_palette_index(k053251, K053251_CI1); - layer_colorbase[0] = k053251_get_palette_index(k053251, K053251_CI2); - layer_colorbase[1] = k053251_get_palette_index(k053251, K053251_CI4); - layer_colorbase[2] = k053251_get_palette_index(k053251, K053251_CI3); + bg_colorbase = k053251_get_palette_index(state->k053251, K053251_CI0); + state->sprite_colorbase = k053251_get_palette_index(state->k053251, K053251_CI1); + state->layer_colorbase[0] = k053251_get_palette_index(state->k053251, K053251_CI2); + state->layer_colorbase[1] = k053251_get_palette_index(state->k053251, K053251_CI4); + state->layer_colorbase[2] = k053251_get_palette_index(state->k053251, K053251_CI3); - k052109_tilemap_update(k052109); + k052109_tilemap_update(state->k052109); - sorted_layer[0] = 0; - layerpri[0] = k053251_get_priority(k053251, K053251_CI2); - sorted_layer[1] = 1; - layerpri[1] = k053251_get_priority(k053251, K053251_CI4); - sorted_layer[2] = 2; - layerpri[2] = k053251_get_priority(k053251, K053251_CI3); + state->sorted_layer[0] = 0; + state->layerpri[0] = k053251_get_priority(state->k053251, K053251_CI2); + state->sorted_layer[1] = 1; + state->layerpri[1] = k053251_get_priority(state->k053251, K053251_CI4); + state->sorted_layer[2] = 2; + state->layerpri[2] = k053251_get_priority(state->k053251, K053251_CI3); - sortlayers(sorted_layer,layerpri); + konami_sortlayers3(state->sorted_layer, state->layerpri); - bitmap_fill(screen->machine->priority_bitmap,cliprect,0); - bitmap_fill(bitmap,cliprect,16 * bg_colorbase); - k052109_tilemap_draw(k052109, bitmap, cliprect, sorted_layer[0], 0, 1); - k052109_tilemap_draw(k052109, bitmap, cliprect, sorted_layer[1], 0, 2); - k052109_tilemap_draw(k052109, bitmap, cliprect, sorted_layer[2], 0, 4); + bitmap_fill(screen->machine->priority_bitmap, cliprect, 0); + bitmap_fill(bitmap, cliprect, 16 * bg_colorbase); + k052109_tilemap_draw(state->k052109, bitmap, cliprect, state->sorted_layer[0], 0, 1); + k052109_tilemap_draw(state->k052109, bitmap, cliprect, state->sorted_layer[1], 0, 2); + k052109_tilemap_draw(state->k052109, bitmap, cliprect, state->sorted_layer[2], 0, 4); - k051960_sprites_draw(k051960, bitmap, cliprect, -1, -1); + k051960_sprites_draw(state->k051960, bitmap, cliprect, -1, -1); return 0; } @@ -811,6 +833,6 @@ VIDEO_UPDATE( thndrx2 ) VIDEO_EOF( blswhstl ) { - const device_config *k053245 = devtag_get_device(machine, "k053245"); - k053245_clear_buffer(k053245); + tmnt_state *state = (tmnt_state *)machine->driver_data; + k053245_clear_buffer(state->k053245); } diff --git a/src/mame/video/ultraman.c b/src/mame/video/ultraman.c index 8317c01c257..b3accbbd3f6 100644 --- a/src/mame/video/ultraman.c +++ b/src/mame/video/ultraman.c @@ -1,9 +1,6 @@ #include "driver.h" #include "video/konicdev.h" - -static int sprite_colorbase, zoom_colorbase[3]; -static int bank0,bank1,bank2; - +#include "includes/ultraman.h" /*************************************************************************** @@ -11,10 +8,12 @@ static int bank0,bank1,bank2; ***************************************************************************/ -void ultraman_sprite_callback(running_machine *machine, int *code,int *color,int *priority,int *shadow) +void ultraman_sprite_callback( running_machine *machine, int *code, int *color, int *priority, int *shadow ) { + ultraman_state *state = (ultraman_state *)machine->driver_data; + *priority = (*color & 0x80) >> 7; - *color = sprite_colorbase + ((*color & 0x7e) >> 1); + *color = state->sprite_colorbase + ((*color & 0x7e) >> 1); *shadow = 0; } @@ -25,22 +24,25 @@ void ultraman_sprite_callback(running_machine *machine, int *code,int *color,int ***************************************************************************/ -void ultraman_zoom_callback_0(running_machine *machine, int *code,int *color,int *flags) +void ultraman_zoom_callback_0(running_machine *machine, int *code, int *color, int *flags ) { - *code |= ((*color & 0x07) << 8) | (bank0 << 11); - *color = zoom_colorbase[0] + ((*color & 0xf8) >> 3); + ultraman_state *state = (ultraman_state *)machine->driver_data; + *code |= ((*color & 0x07) << 8) | (state->bank0 << 11); + *color = state->zoom_colorbase[0] + ((*color & 0xf8) >> 3); } -void ultraman_zoom_callback_1(running_machine *machine, int *code,int *color,int *flags) +void ultraman_zoom_callback_1(running_machine *machine, int *code, int *color, int *flags ) { - *code |= ((*color & 0x07) << 8) | (bank1 << 11); - *color = zoom_colorbase[1] + ((*color & 0xf8) >> 3); + ultraman_state *state = (ultraman_state *)machine->driver_data; + *code |= ((*color & 0x07) << 8) | (state->bank1 << 11); + *color = state->zoom_colorbase[1] + ((*color & 0xf8) >> 3); } -void ultraman_zoom_callback_2(running_machine *machine, int *code,int *color,int *flags) +void ultraman_zoom_callback_2(running_machine *machine, int *code, int *color, int *flags ) { - *code |= ((*color & 0x07) << 8) | (bank2 << 11); - *color = zoom_colorbase[2] + ((*color & 0xf8) >> 3); + ultraman_state *state = (ultraman_state *)machine->driver_data; + *code |= ((*color & 0x07) << 8) | (state->bank2 << 11); + *color = state->zoom_colorbase[2] + ((*color & 0xf8) >> 3); } @@ -53,10 +55,11 @@ void ultraman_zoom_callback_2(running_machine *machine, int *code,int *color,int VIDEO_START( ultraman ) { - sprite_colorbase = 192; - zoom_colorbase[0] = 0; - zoom_colorbase[1] = 64; - zoom_colorbase[2] = 128; + ultraman_state *state = (ultraman_state *)machine->driver_data; + state->sprite_colorbase = 192; + state->zoom_colorbase[0] = 0; + state->zoom_colorbase[1] = 64; + state->zoom_colorbase[2] = 128; } @@ -69,9 +72,7 @@ VIDEO_START( ultraman ) WRITE16_HANDLER( ultraman_gfxctrl_w ) { - const device_config *k051316_1 = devtag_get_device(space->machine, "k051316_1"); - const device_config *k051316_2 = devtag_get_device(space->machine, "k051316_2"); - const device_config *k051316_3 = devtag_get_device(space->machine, "k051316_3"); + ultraman_state *state = (ultraman_state *)space->machine->driver_data; if (ACCESSING_BITS_0_7) { @@ -84,27 +85,27 @@ WRITE16_HANDLER( ultraman_gfxctrl_w ) bit 6: coin counter 1 bit 7: coin counter 2 */ - k051316_wraparound_enable(k051316_1, data & 0x01); + k051316_wraparound_enable(state->k051316_1, data & 0x01); - if (bank0 != ((data & 0x02) >> 1)) + if (state->bank0 != ((data & 0x02) >> 1)) { - bank0 = (data & 0x02) >> 1; + state->bank0 = (data & 0x02) >> 1; tilemap_mark_all_tiles_dirty_all(space->machine); /* should mark only zoom0 */ } - k051316_wraparound_enable(k051316_2, data & 0x04); + k051316_wraparound_enable(state->k051316_2, data & 0x04); - if (bank1 != ((data & 0x08) >> 3)) + if (state->bank1 != ((data & 0x08) >> 3)) { - bank1 = (data & 0x08) >> 3; + state->bank1 = (data & 0x08) >> 3; tilemap_mark_all_tiles_dirty_all(space->machine); /* should mark only zoom1 */ } - k051316_wraparound_enable(k051316_3, data & 0x10); + k051316_wraparound_enable(state->k051316_3, data & 0x10); - if (bank2 != ((data & 0x20) >> 5)) + if (state->bank2 != ((data & 0x20) >> 5)) { - bank2 = (data & 0x20) >> 5; + state->bank2 = (data & 0x20) >> 5; tilemap_mark_all_tiles_dirty_all(space->machine); /* should mark only zoom2 */ } @@ -123,15 +124,12 @@ WRITE16_HANDLER( ultraman_gfxctrl_w ) VIDEO_UPDATE( ultraman ) { - const device_config *k051316_1 = devtag_get_device(screen->machine, "k051316_1"); - const device_config *k051316_2 = devtag_get_device(screen->machine, "k051316_2"); - const device_config *k051316_3 = devtag_get_device(screen->machine, "k051316_3"); - const device_config *k051960 = devtag_get_device(screen->machine, "k051960"); - - k051316_zoom_draw(k051316_3, bitmap, cliprect, 0, 0); - k051316_zoom_draw(k051316_2, bitmap, cliprect, 0, 0); - k051960_sprites_draw(k051960, bitmap, cliprect, 0, 0); - k051316_zoom_draw(k051316_1, bitmap, cliprect, 0, 0); - k051960_sprites_draw(k051960, bitmap, cliprect, 1, 1); + ultraman_state *state = (ultraman_state *)screen->machine->driver_data; + + k051316_zoom_draw(state->k051316_3, bitmap, cliprect, 0, 0); + k051316_zoom_draw(state->k051316_2, bitmap, cliprect, 0, 0); + k051960_sprites_draw(state->k051960, bitmap, cliprect, 0, 0); + k051316_zoom_draw(state->k051316_1, bitmap, cliprect, 0, 0); + k051960_sprites_draw(state->k051960, bitmap, cliprect, 1, 1); return 0; } diff --git a/src/mame/video/vendetta.c b/src/mame/video/vendetta.c index 42377de0a3e..7bba000663a 100644 --- a/src/mame/video/vendetta.c +++ b/src/mame/video/vendetta.c @@ -1,10 +1,6 @@ #include "driver.h" #include "video/konicdev.h" - - -static int layer_colorbase[3],bg_colorbase,sprite_colorbase; -static int layerpri[3]; - +#include "includes/vendetta.h" /*************************************************************************** @@ -12,18 +8,18 @@ static int layerpri[3]; ***************************************************************************/ -void vendetta_tile_callback(running_machine *machine, int layer,int bank,int *code,int *color,int *flags,int *priority) +void vendetta_tile_callback( running_machine *machine, int layer, int bank, int *code, int *color, int *flags, int *priority ) { - *code |= ((*color & 0x03) << 8) | ((*color & 0x30) << 6) | - ((*color & 0x0c) << 10) | (bank << 14); - *color = layer_colorbase[layer] + ((*color & 0xc0) >> 6); + vendetta_state *state = (vendetta_state *)machine->driver_data; + *code |= ((*color & 0x03) << 8) | ((*color & 0x30) << 6) | ((*color & 0x0c) << 10) | (bank << 14); + *color = state->layer_colorbase[layer] + ((*color & 0xc0) >> 6); } -void esckids_tile_callback(running_machine *machine, int layer,int bank,int *code,int *color,int *flags,int *priority) +void esckids_tile_callback( running_machine *machine, int layer, int bank, int *code, int *color, int *flags, int *priority ) { - *code |= ((*color & 0x03) << 8) | ((*color & 0x10) << 6) | - ((*color & 0x0c) << 9) | (bank << 13); - *color = layer_colorbase[layer] + ((*color & 0xe0) >> 5); + vendetta_state *state = (vendetta_state *)machine->driver_data; + *code |= ((*color & 0x03) << 8) | ((*color & 0x10) << 6) | ((*color & 0x0c) << 9) | (bank << 13); + *color = state->layer_colorbase[layer] + ((*color & 0xe0) >> 5); } @@ -33,15 +29,20 @@ void esckids_tile_callback(running_machine *machine, int layer,int bank,int *cod ***************************************************************************/ -void vendetta_sprite_callback(running_machine *machine, int *code,int *color,int *priority_mask) +void vendetta_sprite_callback( running_machine *machine, int *code, int *color, int *priority_mask ) { + vendetta_state *state = (vendetta_state *)machine->driver_data; int pri = (*color & 0x03e0) >> 4; /* ??????? */ - if (pri <= layerpri[2]) *priority_mask = 0; - else if (pri > layerpri[2] && pri <= layerpri[1]) *priority_mask = 0xf0; - else if (pri > layerpri[1] && pri <= layerpri[0]) *priority_mask = 0xf0|0xcc; - else *priority_mask = 0xf0|0xcc|0xaa; - - *color = sprite_colorbase + (*color & 0x001f); + if (pri <= state->layerpri[2]) + *priority_mask = 0; + else if (pri > state->layerpri[2] && pri <= state->layerpri[1]) + *priority_mask = 0xf0; + else if (pri > state->layerpri[1] && pri <= state->layerpri[0]) + *priority_mask = 0xf0 | 0xcc; + else + *priority_mask = 0xf0 | 0xcc | 0xaa; + + *color = state->sprite_colorbase + (*color & 0x001f); } @@ -51,52 +52,33 @@ void vendetta_sprite_callback(running_machine *machine, int *code,int *color,int ***************************************************************************/ -/* useful function to sort the three tile layers by priority order */ -static void sortlayers(int *layer,int *pri) -{ -#define SWAP(a,b) \ - if (pri[a] < pri[b]) \ - { \ - int t; \ - t = pri[a]; pri[a] = pri[b]; pri[b] = t; \ - t = layer[a]; layer[a] = layer[b]; layer[b] = t; \ - } - - SWAP(0,1) - SWAP(0,2) - SWAP(1,2) -} - VIDEO_UPDATE( vendetta ) { - const device_config *k053246 = devtag_get_device(screen->machine, "k053246"); - const device_config *k053251 = devtag_get_device(screen->machine, "k053251"); - const device_config *k052109 = devtag_get_device(screen->machine, "k052109"); - int layer[3]; - + vendetta_state *state = (vendetta_state *)screen->machine->driver_data; + int layer[3], bg_colorbase; - bg_colorbase = k053251_get_palette_index(k053251, K053251_CI0); - sprite_colorbase = k053251_get_palette_index(k053251, K053251_CI1); - layer_colorbase[0] = k053251_get_palette_index(k053251, K053251_CI2); - layer_colorbase[1] = k053251_get_palette_index(k053251, K053251_CI3); - layer_colorbase[2] = k053251_get_palette_index(k053251, K053251_CI4); + bg_colorbase = k053251_get_palette_index(state->k053251, K053251_CI0); + state->sprite_colorbase = k053251_get_palette_index(state->k053251, K053251_CI1); + state->layer_colorbase[0] = k053251_get_palette_index(state->k053251, K053251_CI2); + state->layer_colorbase[1] = k053251_get_palette_index(state->k053251, K053251_CI3); + state->layer_colorbase[2] = k053251_get_palette_index(state->k053251, K053251_CI4); - k052109_tilemap_update(k052109); + k052109_tilemap_update(state->k052109); layer[0] = 0; - layerpri[0] = k053251_get_priority(k053251, K053251_CI2); + state->layerpri[0] = k053251_get_priority(state->k053251, K053251_CI2); layer[1] = 1; - layerpri[1] = k053251_get_priority(k053251, K053251_CI3); + state->layerpri[1] = k053251_get_priority(state->k053251, K053251_CI3); layer[2] = 2; - layerpri[2] = k053251_get_priority(k053251, K053251_CI4); + state->layerpri[2] = k053251_get_priority(state->k053251, K053251_CI4); - sortlayers(layer,layerpri); + konami_sortlayers3(layer, state->layerpri); - bitmap_fill(screen->machine->priority_bitmap,cliprect,0); - k052109_tilemap_draw(k052109, bitmap, cliprect, layer[0], TILEMAP_DRAW_OPAQUE, 1); - k052109_tilemap_draw(k052109, bitmap, cliprect, layer[1], 0, 2); - k052109_tilemap_draw(k052109, bitmap, cliprect, layer[2], 0, 4); + bitmap_fill(screen->machine->priority_bitmap, cliprect, 0); + k052109_tilemap_draw(state->k052109, bitmap, cliprect, layer[0], TILEMAP_DRAW_OPAQUE, 1); + k052109_tilemap_draw(state->k052109, bitmap, cliprect, layer[1], 0, 2); + k052109_tilemap_draw(state->k052109, bitmap, cliprect, layer[2], 0, 4); - k053247_sprites_draw(k053246, bitmap, cliprect); + k053247_sprites_draw(state->k053246, bitmap, cliprect); return 0; } diff --git a/src/mame/video/xexex.c b/src/mame/video/xexex.c index 72b39e50884..030f9024748 100644 --- a/src/mame/video/xexex.c +++ b/src/mame/video/xexex.c @@ -1,137 +1,112 @@ #include "driver.h" #include "video/konicdev.h" +#include "includes/xexex.h" -static int sprite_colorbase; -static int layer_colorbase[4], layerpri[4]; -static int cur_alpha; - -void xexex_set_alpha(int on) -{ - cur_alpha = on; -} - -void xexex_sprite_callback(running_machine *machine, int *code, int *color, int *priority_mask) +void xexex_sprite_callback( running_machine *machine, int *code, int *color, int *priority_mask ) { - int pri, c = *color; + xexex_state *state = (xexex_state *)machine->driver_data; + int pri; // Xexex doesn't seem to use bit8 and 9 as effect selectors so this should be safe. // (pdrawgfx() still needs change to fix Elaine's end-game graphics) - pri = (c & 0x3e0) >> 4; - - if (pri <= layerpri[3]) *priority_mask = 0; else - if (pri > layerpri[3] && pri <= layerpri[2]) *priority_mask = 0xff00; else - if (pri > layerpri[2] && pri <= layerpri[1]) *priority_mask = 0xff00|0xf0f0; else - if (pri > layerpri[1] && pri <= layerpri[0]) *priority_mask = 0xff00|0xf0f0|0xcccc; else - *priority_mask = 0xff00|0xf0f0|0xcccc|0xaaaa; - - *color = sprite_colorbase | (c & 0x001f); + pri = (*color & 0x3e0) >> 4; + + if (pri <= state->layerpri[3]) + *priority_mask = 0; + else if (pri > state->layerpri[3] && pri <= state->layerpri[2]) + *priority_mask = 0xff00; + else if (pri > state->layerpri[2] && pri <= state->layerpri[1]) + *priority_mask = 0xff00 | 0xf0f0; + else if (pri > state->layerpri[1] && pri <= state->layerpri[0]) + *priority_mask = 0xff00 | 0xf0f0 | 0xcccc; + else + *priority_mask = 0xff00 | 0xf0f0 | 0xcccc | 0xaaaa; + + *color = state->sprite_colorbase | (*color & 0x001f); } void xexex_tile_callback(running_machine *machine, int layer, int *code, int *color, int *flags) { - *color = layer_colorbase[layer] | (*color>>2 & 0x0f); + xexex_state *state = (xexex_state *)machine->driver_data; + *color = state->layer_colorbase[layer] | (*color >> 2 & 0x0f); } VIDEO_START( xexex ) { - const device_config *k056832 = devtag_get_device(machine, "k056832"); + xexex_state *state = (xexex_state *)machine->driver_data; assert(video_screen_get_format(machine->primary_screen) == BITMAP_FORMAT_RGB32); - cur_alpha = 0; + state->cur_alpha = 0; // Xexex has relative plane offsets of -2,2,4,6 vs. -2,0,2,3 in MW and GX. - k056832_set_layer_offs(k056832, 0, -2, 16); - k056832_set_layer_offs(k056832, 1, 2, 16); - k056832_set_layer_offs(k056832, 2, 4, 16); - k056832_set_layer_offs(k056832, 3, 6, 16); -} - -/* useful function to sort the four tile layers by priority order */ -/* suboptimal, but for such a size who cares ? */ -static void sortlayers(int *layer, int *pri) -{ -#define SWAP(a,b) \ - if (pri[a] < pri[b]) \ - { \ - int t; \ - t = pri[a]; pri[a] = pri[b]; pri[b] = t; \ - t = layer[a]; layer[a] = layer[b]; layer[b] = t; \ - } - - SWAP(0, 1) - SWAP(0, 2) - SWAP(0, 3) - SWAP(1, 2) - SWAP(1, 3) - SWAP(2, 3) + k056832_set_layer_offs(state->k056832, 0, -2, 16); + k056832_set_layer_offs(state->k056832, 1, 2, 16); + k056832_set_layer_offs(state->k056832, 2, 4, 16); + k056832_set_layer_offs(state->k056832, 3, 6, 16); } VIDEO_UPDATE( xexex ) { static const int K053251_CI[4] = { K053251_CI1, K053251_CI2, K053251_CI3, K053251_CI4 }; - const device_config *k056832 = devtag_get_device(screen->machine, "k056832"); - const device_config *k053246 = devtag_get_device(screen->machine, "k053246"); - const device_config *k053251 = devtag_get_device(screen->machine, "k053251"); - const device_config *k053250 = devtag_get_device(screen->machine, "k053250"); - const device_config *k054338 = devtag_get_device(screen->machine, "k054338"); + xexex_state *state = (xexex_state *)screen->machine->driver_data; int layer[4]; int bg_colorbase, new_colorbase, plane, alpha; - sprite_colorbase = k053251_get_palette_index(k053251, K053251_CI0); - bg_colorbase = k053251_get_palette_index(k053251, K053251_CI1); - layer_colorbase[0] = 0x70; + state->sprite_colorbase = k053251_get_palette_index(state->k053251, K053251_CI0); + bg_colorbase = k053251_get_palette_index(state->k053251, K053251_CI1); + state->layer_colorbase[0] = 0x70; for (plane = 1; plane < 4; plane++) { - new_colorbase = k053251_get_palette_index(k053251, K053251_CI[plane]); - if (layer_colorbase[plane] != new_colorbase) + new_colorbase = k053251_get_palette_index(state->k053251, K053251_CI[plane]); + if (state->layer_colorbase[plane] != new_colorbase) { - layer_colorbase[plane] = new_colorbase; - k056832_mark_plane_dirty(k056832, plane); + state->layer_colorbase[plane] = new_colorbase; + k056832_mark_plane_dirty(state->k056832, plane); } } layer[0] = 1; - layerpri[0] = k053251_get_priority(k053251, K053251_CI2); + state->layerpri[0] = k053251_get_priority(state->k053251, K053251_CI2); layer[1] = 2; - layerpri[1] = k053251_get_priority(k053251, K053251_CI3); + state->layerpri[1] = k053251_get_priority(state->k053251, K053251_CI3); layer[2] = 3; - layerpri[2] = k053251_get_priority(k053251, K053251_CI4); + state->layerpri[2] = k053251_get_priority(state->k053251, K053251_CI4); layer[3] = -1; - layerpri[3] = k053251_get_priority(k053251, K053251_CI1); + state->layerpri[3] = k053251_get_priority(state->k053251, K053251_CI1); - sortlayers(layer, layerpri); + konami_sortlayers4(layer, state->layerpri); - k054338_update_all_shadows(k054338, 0); - k054338_fill_backcolor(k054338, bitmap, 0); + k054338_update_all_shadows(state->k054338, 0); + k054338_fill_backcolor(state->k054338, bitmap, 0); bitmap_fill(screen->machine->priority_bitmap, cliprect, 0); - for (plane=0; plane<4; plane++) + for (plane = 0; plane < 4; plane++) { if (layer[plane] < 0) { - k053250_draw(k053250, bitmap, cliprect, bg_colorbase, 0, 1 << plane); + k053250_draw(state->k053250, bitmap, cliprect, bg_colorbase, 0, 1 << plane); } - else if (!cur_alpha || layer[plane] != 1) + else if (!state->cur_alpha || layer[plane] != 1) { - k056832_tilemap_draw(k056832, bitmap, cliprect, layer[plane], 0, 1 << plane); + k056832_tilemap_draw(state->k056832, bitmap, cliprect, layer[plane], 0, 1 << plane); } } - k053247_sprites_draw(k053246, bitmap, cliprect); + k053247_sprites_draw(state->k053246, bitmap, cliprect); - if (cur_alpha) + if (state->cur_alpha) { - alpha = k054338_set_alpha_level(k054338, 1); + alpha = k054338_set_alpha_level(state->k054338, 1); if (alpha > 0) { - k056832_tilemap_draw(k056832, bitmap, cliprect, 1, TILEMAP_DRAW_ALPHA(alpha), 0); + k056832_tilemap_draw(state->k056832, bitmap, cliprect, 1, TILEMAP_DRAW_ALPHA(alpha), 0); } } - k056832_tilemap_draw(k056832, bitmap, cliprect, 0, 0, 0); + k056832_tilemap_draw(state->k056832, bitmap, cliprect, 0, 0, 0); return 0; } diff --git a/src/mame/video/xmen.c b/src/mame/video/xmen.c index 36b54efe3f1..d4bb6efbf0d 100644 --- a/src/mame/video/xmen.c +++ b/src/mame/video/xmen.c @@ -3,23 +3,21 @@ #include "includes/xmen.h" -static int layer_colorbase[3],sprite_colorbase,bg_colorbase; -static int layerpri[3]; - - /*************************************************************************** Callbacks for the K052109 ***************************************************************************/ -void xmen_tile_callback(running_machine *machine, int layer,int bank,int *code,int *color,int *flags,int *priority) +void xmen_tile_callback( running_machine *machine, int layer, int bank, int *code, int *color, int *flags, int *priority ) { + xmen_state *state = (xmen_state *)machine->driver_data; + /* (color & 0x02) is flip y handled internally by the 052109 */ if (layer == 0) - *color = layer_colorbase[layer] + ((*color & 0xf0) >> 4); + *color = state->layer_colorbase[layer] + ((*color & 0xf0) >> 4); else - *color = layer_colorbase[layer] + ((*color & 0x7c) >> 2); + *color = state->layer_colorbase[layer] + ((*color & 0x7c) >> 2); } /*************************************************************************** @@ -28,15 +26,21 @@ void xmen_tile_callback(running_machine *machine, int layer,int bank,int *code,i ***************************************************************************/ -void xmen_sprite_callback(running_machine *machine, int *code,int *color,int *priority_mask) +void xmen_sprite_callback( running_machine *machine, int *code, int *color, int *priority_mask ) { + xmen_state *state = (xmen_state *)machine->driver_data; int pri = (*color & 0x00e0) >> 4; /* ??????? */ - if (pri <= layerpri[2]) *priority_mask = 0; - else if (pri > layerpri[2] && pri <= layerpri[1]) *priority_mask = 0xf0; - else if (pri > layerpri[1] && pri <= layerpri[0]) *priority_mask = 0xf0|0xcc; - else *priority_mask = 0xf0|0xcc|0xaa; - *color = sprite_colorbase + (*color & 0x001f); + if (pri <= state->layerpri[2]) + *priority_mask = 0; + else if (pri > state->layerpri[2] && pri <= state->layerpri[1]) + *priority_mask = 0xf0; + else if (pri > state->layerpri[1] && pri <= state->layerpri[0]) + *priority_mask = 0xf0 | 0xcc; + else + *priority_mask = 0xf0 | 0xcc | 0xaa; + + *color = state->sprite_colorbase + (*color & 0x001f); } @@ -47,18 +51,17 @@ void xmen_sprite_callback(running_machine *machine, int *code,int *color,int *pr ***************************************************************************/ -static bitmap_t * screen_right; -static bitmap_t * screen_left; -static UINT16 *K053247_ram; - VIDEO_START( xmen6p ) { - const device_config *k053246 = devtag_get_device(machine, "k053246"); + xmen_state *state = (xmen_state *)machine->driver_data; + + k053247_get_ram(state->k053246, &state->k053247_ram); - k053247_get_ram(k053246, &K053247_ram); + state->screen_left = auto_bitmap_alloc(machine, 64 * 8, 32 * 8, BITMAP_FORMAT_INDEXED16); + state->screen_right = auto_bitmap_alloc(machine, 64 * 8, 32 * 8, BITMAP_FORMAT_INDEXED16); - screen_left = auto_bitmap_alloc(machine, 64*8, 32*8, BITMAP_FORMAT_INDEXED16); - screen_right = auto_bitmap_alloc(machine, 64*8, 32*8, BITMAP_FORMAT_INDEXED16); + state_save_register_global_bitmap(machine, state->screen_left); + state_save_register_global_bitmap(machine, state->screen_right); } @@ -68,81 +71,61 @@ VIDEO_START( xmen6p ) ***************************************************************************/ -/* useful function to sort the three tile layers by priority order */ -static void sortlayers(int *layer,int *pri) -{ -#define SWAP(a,b) \ - if (pri[a] < pri[b]) \ - { \ - int t; \ - t = pri[a]; pri[a] = pri[b]; pri[b] = t; \ - t = layer[a]; layer[a] = layer[b]; layer[b] = t; \ - } - - SWAP(0,1) - SWAP(0,2) - SWAP(1,2) -} - - VIDEO_UPDATE( xmen ) { - const device_config *k052109 = devtag_get_device(screen->machine, "k052109"); - const device_config *k053246 = devtag_get_device(screen->machine, "k053246"); - const device_config *k053251 = devtag_get_device(screen->machine, "k053251"); - int layer[3]; + xmen_state *state = (xmen_state *)screen->machine->driver_data; + int layer[3], bg_colorbase; - bg_colorbase = k053251_get_palette_index(k053251, K053251_CI4); - sprite_colorbase = k053251_get_palette_index(k053251, K053251_CI1); - layer_colorbase[0] = k053251_get_palette_index(k053251, K053251_CI3); - layer_colorbase[1] = k053251_get_palette_index(k053251, K053251_CI0); - layer_colorbase[2] = k053251_get_palette_index(k053251, K053251_CI2); + bg_colorbase = k053251_get_palette_index(state->k053251, K053251_CI4); + state->sprite_colorbase = k053251_get_palette_index(state->k053251, K053251_CI1); + state->layer_colorbase[0] = k053251_get_palette_index(state->k053251, K053251_CI3); + state->layer_colorbase[1] = k053251_get_palette_index(state->k053251, K053251_CI0); + state->layer_colorbase[2] = k053251_get_palette_index(state->k053251, K053251_CI2); - k052109_tilemap_update(k052109); + k052109_tilemap_update(state->k052109); layer[0] = 0; - layerpri[0] = k053251_get_priority(k053251, K053251_CI3); + state->layerpri[0] = k053251_get_priority(state->k053251, K053251_CI3); layer[1] = 1; - layerpri[1] = k053251_get_priority(k053251, K053251_CI0); + state->layerpri[1] = k053251_get_priority(state->k053251, K053251_CI0); layer[2] = 2; - layerpri[2] = k053251_get_priority(k053251, K053251_CI2); + state->layerpri[2] = k053251_get_priority(state->k053251, K053251_CI2); - sortlayers(layer,layerpri); + konami_sortlayers3(layer, state->layerpri); - bitmap_fill(screen->machine->priority_bitmap,cliprect,0); + bitmap_fill(screen->machine->priority_bitmap, cliprect, 0); /* note the '+1' in the background color!!! */ - bitmap_fill(bitmap,cliprect,16 * bg_colorbase+1); - k052109_tilemap_draw(k052109, bitmap, cliprect, layer[0], 0, 1); - k052109_tilemap_draw(k052109, bitmap, cliprect, layer[1], 0, 2); - k052109_tilemap_draw(k052109, bitmap, cliprect, layer[2], 0, 4); + bitmap_fill(bitmap, cliprect, 16 * bg_colorbase + 1); + k052109_tilemap_draw(state->k052109, bitmap, cliprect, layer[0], 0, 1); + k052109_tilemap_draw(state->k052109, bitmap, cliprect, layer[1], 0, 2); + k052109_tilemap_draw(state->k052109, bitmap, cliprect, layer[2], 0, 4); /* this isn't supported anymore and it is unsure if still needed; keeping here for reference pdrawgfx_shadow_lowpri = 1; fix shadows of boulders in front of feet */ - k053247_sprites_draw(k053246, bitmap, cliprect); + k053247_sprites_draw(state->k053246, bitmap, cliprect); return 0; } VIDEO_UPDATE( xmen6p ) { - const device_config *left_screen = devtag_get_device(screen->machine, "lscreen"); - const device_config *right_screen = devtag_get_device(screen->machine, "rscreen"); - int x,y; + xmen_state *state = (xmen_state *)screen->machine->driver_data; + int x, y; - if (screen == left_screen) + if (screen == state->lscreen) for(y = 0; y < 32 * 8; y++) { UINT16* line_dest = BITMAP_ADDR16(bitmap, y, 0); - UINT16* line_src = BITMAP_ADDR16(screen_left, y, 0); + UINT16* line_src = BITMAP_ADDR16(state->screen_left, y, 0); for (x = 12 * 8; x < 52 * 8; x++) line_dest[x] = line_src[x]; } - else if (screen == right_screen) + else if (screen == state->rscreen) for(y = 0; y < 32 * 8; y++) { UINT16* line_dest = BITMAP_ADDR16(bitmap, y, 0); - UINT16* line_src = BITMAP_ADDR16(screen_right, y, 0); + UINT16* line_src = BITMAP_ADDR16(state->screen_right, y, 0); for (x = 12 * 8; x < 52 * 8; x++) line_dest[x] = line_src[x]; @@ -154,15 +137,13 @@ VIDEO_UPDATE( xmen6p ) /* my lefts and rights are mixed up in several places.. */ VIDEO_EOF( xmen6p ) { - const device_config *k052109 = devtag_get_device(machine, "k052109"); - const device_config *k053246 = devtag_get_device(machine, "k053246"); - const device_config *k053251 = devtag_get_device(machine, "k053251"); - int layer[3]; + xmen_state *state = (xmen_state *)machine->driver_data; + int layer[3], bg_colorbase; bitmap_t * renderbitmap; rectangle cliprect; int offset; - xmen_current_frame ^= 0x01; + state->current_frame ^= 0x01; // const rectangle *visarea = video_screen_get_visible_area(machine->primary_screen); // cliprect.min_x = visarea->min_x; @@ -176,11 +157,11 @@ VIDEO_EOF( xmen6p ) cliprect.max_y = 30 * 8 - 1; - if (xmen_current_frame & 0x01) + if (state->current_frame & 0x01) { /* copy the desired spritelist to the chip */ - memcpy(K053247_ram, xmen6p_spriteramright, 0x1000); + memcpy(state->k053247_ram, state->xmen6p_spriteramright, 0x1000); /* we write the entire content of the tileram to the chip to ensure everything gets marked as dirty and the desired tilemap is rendered @@ -189,16 +170,16 @@ VIDEO_EOF( xmen6p ) for (offset = 0; offset < (0xc000 / 2); offset++) { // K052109_lsb_w - k052109_w(k052109, offset, xmen6p_tilemapright[offset] & 0x00ff); + k052109_w(state->k052109, offset, state->xmen6p_tilemapright[offset] & 0x00ff); } - renderbitmap = screen_right; + renderbitmap = state->screen_right; } else { /* copy the desired spritelist to the chip */ - memcpy(K053247_ram, xmen6p_spriteramleft, 0x1000); + memcpy(state->k053247_ram, state->xmen6p_spriteramleft, 0x1000); /* we write the entire content of the tileram to the chip to ensure everything gets marked as dirty and the desired tilemap is rendered @@ -208,39 +189,39 @@ VIDEO_EOF( xmen6p ) for (offset = 0; offset < (0xc000 / 2); offset++) { // K052109_lsb_w - k052109_w(k052109, offset, xmen6p_tilemapleft[offset] & 0x00ff); + k052109_w(state->k052109, offset, state->xmen6p_tilemapleft[offset] & 0x00ff); } - renderbitmap = screen_left; + renderbitmap = state->screen_left; } - bg_colorbase = k053251_get_palette_index(k053251, K053251_CI4); - sprite_colorbase = k053251_get_palette_index(k053251, K053251_CI1); - layer_colorbase[0] = k053251_get_palette_index(k053251, K053251_CI3); - layer_colorbase[1] = k053251_get_palette_index(k053251, K053251_CI0); - layer_colorbase[2] = k053251_get_palette_index(k053251, K053251_CI2); + bg_colorbase = k053251_get_palette_index(state->k053251, K053251_CI4); + state->sprite_colorbase = k053251_get_palette_index(state->k053251, K053251_CI1); + state->layer_colorbase[0] = k053251_get_palette_index(state->k053251, K053251_CI3); + state->layer_colorbase[1] = k053251_get_palette_index(state->k053251, K053251_CI0); + state->layer_colorbase[2] = k053251_get_palette_index(state->k053251, K053251_CI2); - k052109_tilemap_update(k052109); + k052109_tilemap_update(state->k052109); layer[0] = 0; - layerpri[0] = k053251_get_priority(k053251, K053251_CI3); + state->layerpri[0] = k053251_get_priority(state->k053251, K053251_CI3); layer[1] = 1; - layerpri[1] = k053251_get_priority(k053251, K053251_CI0); + state->layerpri[1] = k053251_get_priority(state->k053251, K053251_CI0); layer[2] = 2; - layerpri[2] = k053251_get_priority(k053251, K053251_CI2); + state->layerpri[2] = k053251_get_priority(state->k053251, K053251_CI2); - sortlayers(layer,layerpri); + konami_sortlayers3(layer, state->layerpri); bitmap_fill(machine->priority_bitmap, &cliprect, 0); /* note the '+1' in the background color!!! */ bitmap_fill(renderbitmap, &cliprect, 16 * bg_colorbase + 1); - k052109_tilemap_draw(k052109, renderbitmap, &cliprect, layer[0], 0, 1); - k052109_tilemap_draw(k052109, renderbitmap, &cliprect, layer[1], 0, 2); - k052109_tilemap_draw(k052109, renderbitmap, &cliprect, layer[2], 0, 4); + k052109_tilemap_draw(state->k052109, renderbitmap, &cliprect, layer[0], 0, 1); + k052109_tilemap_draw(state->k052109, renderbitmap, &cliprect, layer[1], 0, 2); + k052109_tilemap_draw(state->k052109, renderbitmap, &cliprect, layer[2], 0, 4); /* this isn't supported anymore and it is unsure if still needed; keeping here for reference pdrawgfx_shadow_lowpri = 1; fix shadows of boulders in front of feet */ - k053247_sprites_draw(k053246, renderbitmap, &cliprect); + k053247_sprites_draw(state->k053246, renderbitmap, &cliprect); } |
