diff options
-rw-r--r-- | .gitattributes | 4 | ||||
-rw-r--r-- | src/emu/sndintrf.c | 4 | ||||
-rw-r--r-- | src/emu/sndintrf.h | 1 | ||||
-rw-r--r-- | src/emu/sound/namco.c | 23 | ||||
-rw-r--r-- | src/emu/sound/namco.h | 2 | ||||
-rw-r--r-- | src/emu/sound/snkwave.c | 194 | ||||
-rw-r--r-- | src/emu/sound/snkwave.h | 9 | ||||
-rw-r--r-- | src/emu/sound/sound.mak | 12 | ||||
-rw-r--r-- | src/mame/drivers/mainsnk.c | 13 | ||||
-rw-r--r-- | src/mame/drivers/marvins.c | 784 | ||||
-rw-r--r-- | src/mame/drivers/snk.c | 797 | ||||
-rw-r--r-- | src/mame/includes/snk.h | 18 | ||||
-rw-r--r-- | src/mame/mame.mak | 2 | ||||
-rw-r--r-- | src/mame/video/marvins.c | 476 | ||||
-rw-r--r-- | src/mame/video/snk.c | 248 |
15 files changed, 1131 insertions, 1456 deletions
diff --git a/.gitattributes b/.gitattributes index 43960b2e791..17a7123afea 100644 --- a/.gitattributes +++ b/.gitattributes @@ -879,6 +879,8 @@ src/emu/sound/sn76477.c svneol=native#text/plain src/emu/sound/sn76477.h svneol=native#text/plain src/emu/sound/sn76496.c svneol=native#text/plain src/emu/sound/sn76496.h svneol=native#text/plain +src/emu/sound/snkwave.c svneol=native#text/plain +src/emu/sound/snkwave.h svneol=native#text/plain src/emu/sound/sound.mak svneol=native#text/plain src/emu/sound/sp0250.c svneol=native#text/plain src/emu/sound/sp0250.h svneol=native#text/plain @@ -1673,7 +1675,6 @@ src/mame/drivers/marineb.c svneol=native#text/plain src/mame/drivers/marinedt.c svneol=native#text/plain src/mame/drivers/mario.c svneol=native#text/plain src/mame/drivers/markham.c svneol=native#text/plain -src/mame/drivers/marvins.c svneol=native#text/plain src/mame/drivers/mastboy.c svneol=native#text/plain src/mame/drivers/matmania.c svneol=native#text/plain src/mame/drivers/maxaflex.c svneol=native#text/plain @@ -3038,7 +3039,6 @@ src/mame/video/mappy.c svneol=native#text/plain src/mame/video/marineb.c svneol=native#text/plain src/mame/video/mario.c svneol=native#text/plain src/mame/video/markham.c svneol=native#text/plain -src/mame/video/marvins.c svneol=native#text/plain src/mame/video/matmania.c svneol=native#text/plain src/mame/video/mayumi.c svneol=native#text/plain src/mame/video/mcatadv.c svneol=native#text/plain diff --git a/src/emu/sndintrf.c b/src/emu/sndintrf.c index 2a28c74fcfb..ce6f96abc87 100644 --- a/src/emu/sndintrf.c +++ b/src/emu/sndintrf.c @@ -106,6 +106,7 @@ void namco_cus30_get_info(void *token, UINT32 state, sndinfo *info); void namco_52xx_get_info(void *token, UINT32 state, sndinfo *info); void namco_63701x_get_info(void *token, UINT32 state, sndinfo *info); void namcona_get_info(void *token, UINT32 state, sndinfo *info); +void snkwave_get_info(void *token, UINT32 state, sndinfo *info); void tms36xx_get_info(void *token, UINT32 state, sndinfo *info); void tms3615_get_info(void *token, UINT32 state, sndinfo *info); void tms5100_get_info(void *token, UINT32 state, sndinfo *info); @@ -291,6 +292,9 @@ static const struct #if (HAS_NAMCONA) { SOUND_NAMCONA, namcona_get_info }, #endif +#if (HAS_SNKWAVE) + { SOUND_SNKWAVE, snkwave_get_info }, +#endif #if (HAS_TMS36XX) { SOUND_TMS36XX, tms36xx_get_info }, #endif diff --git a/src/emu/sndintrf.h b/src/emu/sndintrf.h index 35c047fdb50..280e6f3f5df 100644 --- a/src/emu/sndintrf.h +++ b/src/emu/sndintrf.h @@ -70,6 +70,7 @@ enum _sound_type SOUND_NAMCO_52XX, SOUND_NAMCO_63701X, SOUND_NAMCONA, + SOUND_SNKWAVE, SOUND_TMS36XX, SOUND_TMS3615, SOUND_TMS5100, diff --git a/src/emu/sound/namco.c b/src/emu/sound/namco.c index cc0d21cb223..2f3a0b9819a 100644 --- a/src/emu/sound/namco.c +++ b/src/emu/sound/namco.c @@ -799,29 +799,6 @@ WRITE8_HANDLER( _20pacgal_wavedata_w ) } } -/********************************************************************************/ - -WRITE8_HANDLER( snkwave_w ) -{ - struct namco_sound *chip = sndti_token(SOUND_NAMCO, 0); - static int freq0 = 0xff; - sound_channel *voice = chip->channel_list; - if( offset==0 ) freq0 = data; - if( offset==1 ) - { - stream_update(chip->stream); - if( data==0xff || freq0==0 ) - { - voice->volume[0] = 0x0; - } - else - { - voice->volume[0] = 0x8; - voice->frequency = (data<<16)/freq0; - } - } -} - diff --git a/src/emu/sound/namco.h b/src/emu/sound/namco.h index 187695220fb..8f123aacfb6 100644 --- a/src/emu/sound/namco.h +++ b/src/emu/sound/namco.h @@ -10,8 +10,6 @@ struct _namco_interface int stereo; /* set to 1 to indicate stereo (e.g., System 1) */ }; -WRITE8_HANDLER( snkwave_w ); - WRITE8_HANDLER( pacman_sound_enable_w ); WRITE8_HANDLER( pacman_sound_w ); diff --git a/src/emu/sound/snkwave.c b/src/emu/sound/snkwave.c new file mode 100644 index 00000000000..b9319acdc13 --- /dev/null +++ b/src/emu/sound/snkwave.c @@ -0,0 +1,194 @@ +/*************************************************************************** + + SNK Wave sound driver. + + This is a very simple single-voice generator with a programmable waveform. + +***************************************************************************/ + +#include "sndintrf.h" +#include "streams.h" +#include "snkwave.h" + + +#define WAVEFORM_LENGTH 16 + +#define CLOCK_SHIFT 8 + + +struct snkwave_sound +{ + /* global sound parameters */ + sound_stream * stream; + int external_clock; + int sample_rate; + + /* data about the sound system */ + UINT32 frequency; + UINT32 counter; + int waveform_position; + + /* decoded waveform table */ + INT16 waveform[WAVEFORM_LENGTH]; +}; + + +/* update the decoded waveform data */ +/* The programmable waveform consists of 8 3-bit nibbles. + The waveform goes to a 4-bit DAC and is played alternatingly forwards and + backwards. + When going forwards, bit 3 is 1. When going backwards, it's 0. + So the sequence 01234567 will play as + 89ABCDEF76543210 +*/ +static void update_waveform(struct snkwave_sound *chip, unsigned int offset, UINT8 data) +{ + assert(offset < WAVEFORM_LENGTH/4); + + chip->waveform[offset * 2] = ((data & 0x38) >> 3) << (12-CLOCK_SHIFT); + chip->waveform[offset * 2 + 1] = ((data & 0x07) >> 0) << (12-CLOCK_SHIFT); + chip->waveform[WAVEFORM_LENGTH-2 - offset * 2] = ~chip->waveform[offset * 2 + 1]; + chip->waveform[WAVEFORM_LENGTH-1 - offset * 2] = ~chip->waveform[offset * 2]; +} + + +/* generate sound to the mix buffer */ +static void snkwave_update(void *param, stream_sample_t **inputs, stream_sample_t **_buffer, int length) +{ + struct snkwave_sound *chip = param; + stream_sample_t *buffer = _buffer[0]; + + /* zap the contents of the buffer */ + memset(buffer, 0, length * sizeof(*buffer)); + + assert(chip->counter < 0x1000); + assert(chip->frequency < 0x1000); + + /* if no sound, we're done */ + if (chip->frequency == 0xfff) + return; + + /* generate sound into buffer while updating the counter */ + while (length-- > 0) + { + int loops; + INT16 out = 0; + + loops = 1 << CLOCK_SHIFT; + while (loops > 0) + { + int steps = 0x1000 - chip->counter; + + if (steps <= loops) + { + out += chip->waveform[chip->waveform_position] * steps; + chip->counter = chip->frequency; + chip->waveform_position = (chip->waveform_position + 1) & (WAVEFORM_LENGTH-1); + loops -= steps; + } + else + { + out += chip->waveform[chip->waveform_position] * loops; + chip->counter += loops; + loops = 0; + } + } + + *buffer++ = out; + } +} + + +static void *snkwave_start(const char *tag, int sndindex, int clock, const void *config) +{ + struct snkwave_sound *chip; + + assert(config == 0); + + chip = auto_malloc(sizeof(*chip)); + memset(chip, 0, sizeof(*chip)); + + /* adjust internal clock */ + chip->external_clock = clock; + + /* adjust output clock */ + chip->sample_rate = chip->external_clock >> CLOCK_SHIFT; + + /* get stream channels */ + chip->stream = stream_create(0, 1, chip->sample_rate, chip, snkwave_update); + + /* reset all the voices */ + chip->frequency = 0; + chip->counter = 0; + chip->waveform_position = 0; + + /* register with the save state system */ + state_save_register_item("snkwave", sndindex, chip->frequency); + state_save_register_item("snkwave", sndindex, chip->counter); + state_save_register_item("snkwave", sndindex, chip->waveform_position); + state_save_register_item_pointer("snkwave", sndindex, chip->waveform, WAVEFORM_LENGTH); + + return chip; +} + + +/********************************************************************************/ + +/* SNK wave register map + all registers are 6-bit + 0-1 frequency (12-bit) + 2-5 waveform (8 3-bit nibbles) +*/ + +WRITE8_HANDLER( snkwave_w ) +{ + struct snkwave_sound *chip = sndti_token(SOUND_SNKWAVE, 0); + + stream_update(chip->stream); + + // all registers are 6-bit + data &= 0x3f; + + if (offset == 0) + chip->frequency = (chip->frequency & 0x03f) | (data << 6); + else if (offset == 1) + chip->frequency = (chip->frequency & 0xfc0) | data; + else if (offset <= 5) + update_waveform(chip, offset - 2, data); +} + + + +/************************************************************************** + * Generic get_info + **************************************************************************/ + +static void snkwave_set_info(void *token, UINT32 state, sndinfo *info) +{ + switch (state) + { + /* no parameters to set */ + } +} + + +void snkwave_get_info(void *token, UINT32 state, sndinfo *info) +{ + switch (state) + { + /* --- the following bits of info are returned as 64-bit signed integers --- */ + + /* --- the following bits of info are returned as pointers to data or functions --- */ + case SNDINFO_PTR_SET_INFO: info->set_info = snkwave_set_info; break; + case SNDINFO_PTR_START: info->start = snkwave_start; break; + case SNDINFO_PTR_STOP: /* Nothing */ break; + case SNDINFO_PTR_RESET: /* Nothing */ break; + + /* --- the following bits of info are returned as NULL-terminated strings --- */ + case SNDINFO_STR_NAME: info->s = "SNK Wave"; break; + case SNDINFO_STR_CORE_FAMILY: info->s = "SNK Wave"; break; + case SNDINFO_STR_CORE_VERSION: info->s = "1.0"; break; + case SNDINFO_STR_CORE_FILE: info->s = __FILE__; break; + case SNDINFO_STR_CORE_CREDITS: info->s = "Copyright Nicola Salmoria and the MAME Team"; break; + } +} diff --git a/src/emu/sound/snkwave.h b/src/emu/sound/snkwave.h new file mode 100644 index 00000000000..d1851225fea --- /dev/null +++ b/src/emu/sound/snkwave.h @@ -0,0 +1,9 @@ +#pragma once + +#ifndef __SNKWAVE_H__ +#define __SNKWAVE_H__ + +WRITE8_HANDLER( snkwave_w ); + +#endif /* __SNKWAVE_H__ */ + diff --git a/src/emu/sound/sound.mak b/src/emu/sound/sound.mak index 6a853a9cae5..d954496b635 100644 --- a/src/emu/sound/sound.mak +++ b/src/emu/sound/sound.mak @@ -493,6 +493,18 @@ endif #------------------------------------------------- +# SNK custom wave generator +#------------------------------------------------- + +SOUNDDEFS += -DHAS_SNKWAVE=$(if $(filter SNKWAVE,$(SOUNDS)),1,0) + +ifneq ($(filter SNKWAVE,$(SOUNDS)),) +SOUNDOBJS += $(SOUNDOBJ)/snkwave.o +endif + + + +#------------------------------------------------- # Sony custom sound chips #------------------------------------------------- diff --git a/src/mame/drivers/mainsnk.c b/src/mame/drivers/mainsnk.c index 7e800c992dd..d0383ada5e8 100644 --- a/src/mame/drivers/mainsnk.c +++ b/src/mame/drivers/mainsnk.c @@ -72,7 +72,7 @@ cc_p14.j2 8192 0xedc6a1eb M5L2764k #include "driver.h" #include "sound/ay8910.h" -#include "sound/namco.h" +#include "sound/snkwave.h" extern UINT8 *mainsnk_fgram; extern UINT8 *mainsnk_bgram; @@ -135,7 +135,7 @@ static ADDRESS_MAP_START( main_map, ADDRESS_SPACE_PROGRAM, 8 ) ADDRESS_MAP_END static ADDRESS_MAP_START( sound_map, ADDRESS_SPACE_PROGRAM, 8 ) - AM_RANGE(0x0000, 0x7fff) AM_ROM AM_BASE(&namco_wavedata) + AM_RANGE(0x0000, 0x7fff) AM_ROM AM_RANGE(0x8000, 0x87ff) AM_RAM AM_RANGE(0xa000, 0xa000) AM_READ(sound_command_r) AM_RANGE(0xc000, 0xc000) AM_READ(sound_ack_r) @@ -356,12 +356,6 @@ static const gfx_layout sprite_layout = 256 }; -static const namco_interface snkwave_interface = -{ - 1, - 0 /* stereo */ -}; - static GFXDECODE_START( mainsnk ) GFXDECODE_ENTRY( "gfx1", 0x0, tile_layout, 0, 8 ) @@ -400,8 +394,7 @@ static MACHINE_DRIVER_START( mainsnk ) MDRV_SOUND_ADD("ay2", AY8910, 2000000) MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.35) - MDRV_SOUND_ADD("namco", NAMCO, 24000) - MDRV_SOUND_CONFIG(snkwave_interface) + MDRV_SOUND_ADD("wave", SNKWAVE, 8000000) MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.08) MACHINE_DRIVER_END diff --git a/src/mame/drivers/marvins.c b/src/mame/drivers/marvins.c deleted file mode 100644 index cbc866d6cba..00000000000 --- a/src/mame/drivers/marvins.c +++ /dev/null @@ -1,784 +0,0 @@ -/* -various early SNK games (1983-1985) -- Marvin's Maze -- Vanguard II -- Mad Crasher - -driver by Phil Stroffolino - -Known Issues: - Mad Crasher fails the ROM test, but ROMs are verified to be good (reason's unknown) - Mad Crasher sound effects aren't being played (fixed) - - -Change Log ----------- - -AT08XX03: - - added shadows - - fixed Mad Crasher bad background, sound effects and foreground priority. - (great now I can fall under the skyway like I did at Chuck'n Cheese;) - - fixed Vanguard2 scroll offsets - - tuned music tempo and wavegen frequency - -2008.04.04: Small note regarding DipSwitches. Locations and values have been -verified with the manual for both Marvin's Maze and Mad Crasher. Vanguard II -DIPs have been checked against jammaboards diplist, no manual available ATM. -DSW2:7 in madcrash is listed as Difficulty, but it's not clear how it affects -the gameplay difficulty - -*/ - -#include "driver.h" -#include "deprecat.h" -#include "cpu/z80/z80.h" -#include "snk.h" -#include "sound/ay8910.h" -#include "sound/namco.h" - -#define CREDITS "Phil Stroffolino\nTim Lindquist\nCarlos A. Lozano" - -extern int marvins_gamegroup; - -// FIXME this is definitely wrong, schematics clearly show that vblank triggers interrupt -// on both CPU at the same time. -static int snk_irq_delay = 1500; - -// see IRQ notes in drivers\marvins.c -static TIMER_CALLBACK( irq_trigger_callback ) { cpunum_set_input_line(machine, param, 0, HOLD_LINE); } - -static INTERRUPT_GEN( snk_irq_BA ) -{ - cpunum_set_input_line(machine, 1, 0, HOLD_LINE); - timer_set(ATTOTIME_IN_USEC(snk_irq_delay), NULL, 0, irq_trigger_callback); -} - - -/*************************************************************************** -** -** CPUA and CPUB communicate through shared RAM. -** -***************************************************************************/ - -extern WRITE8_HANDLER( marvins_background_ram_w ); -extern WRITE8_HANDLER( marvins_foreground_ram_w ); -extern WRITE8_HANDLER( marvins_text_ram_w ); -extern WRITE8_HANDLER( marvins_spriteram_w ); - - -/*************************************************************************** -** -** Video Driver -** -***************************************************************************/ - -extern VIDEO_START( marvins ); -extern VIDEO_UPDATE( marvins ); -extern VIDEO_UPDATE( madcrash ); - -extern WRITE8_HANDLER( marvins_palette_bank_w ); - - -/*************************************************************************** -** -** Interrupt Handling -** -** CPUA can trigger an interrupt on CPUB, and CPUB can trigger an interrupt -** on CPUA. Each CPU must re-enable interrupts on itself. -** -***************************************************************************/ - -// see drivers\snk.c - - -/*************************************************************************** -** -** Sound System -** -** The sound CPU is a slave, with communication. -** -** Sound Chips: PSGX2 + "Wave Generater" -** -** The Custom Wave Generator is controlled by 6 bytes -** -** The first pair of registers (0x8002, 0x8003) appear to define frequency -** as a fraction: RAM[0x8003]/RAM[0x8002]. -** -** (0x8004, 0x8005, 0x8006, 0x8007) are currently unmapped. Probably they -** control the shape of the wave being played. -** -** snkwave_interface is currently implemented with the "namco" sound component. -** -***************************************************************************/ - -static int sound_cpu_busy; - -static const namco_interface snkwave_interface = -{ - 1, /* number of voices */ - 0 /* stereo */ -}; - -static WRITE8_HANDLER( sound_command_w ) -{ - sound_cpu_busy = 0x01; - soundlatch_w(machine, 0, data); - cpunum_set_input_line(machine, 2, 0, HOLD_LINE); -} - -static READ8_HANDLER( sound_command_r ) -{ - sound_cpu_busy = 0; - return(soundlatch_r(machine,0)); -} - -static READ8_HANDLER( sound_nmi_ack_r ) -{ - cpunum_set_input_line(machine, 2, INPUT_LINE_NMI, CLEAR_LINE); - return 0; -} - -static CUSTOM_INPUT( sound_status_r ) -{ - return sound_cpu_busy; -} - -static ADDRESS_MAP_START( sound_map, ADDRESS_SPACE_PROGRAM, 8 ) - AM_RANGE(0x0000, 0x3fff) AM_ROM AM_BASE(&namco_wavedata) /* silly hack - this shouldn't be here */ - AM_RANGE(0x4000, 0x4000) AM_READ(sound_command_r) - AM_RANGE(0x8000, 0x8000) AM_WRITE(ay8910_control_port_0_w) - AM_RANGE(0x8001, 0x8001) AM_WRITE(ay8910_write_port_0_w) - AM_RANGE(0x8002, 0x8007) AM_WRITE(snkwave_w) - AM_RANGE(0x8008, 0x8008) AM_WRITE(ay8910_control_port_1_w) - AM_RANGE(0x8009, 0x8009) AM_WRITE(ay8910_write_port_1_w) - AM_RANGE(0xa000, 0xa000) AM_READ(sound_nmi_ack_r) - AM_RANGE(0xe000, 0xe7ff) AM_RAM -ADDRESS_MAP_END - -static ADDRESS_MAP_START( sound_portmap, ADDRESS_SPACE_IO, 8 ) - ADDRESS_MAP_GLOBAL_MASK(0xff) - AM_RANGE(0x00, 0x00) AM_READNOP -ADDRESS_MAP_END - - -/*************************************************************************** -** -** Memory Maps for CPUA, CPUB -** -** Shared RAM is shuffled in Mad Crasher/Vanguard II compared to -** Marvin's Maze. -** -** A few ports are mapped differently for each game. -** -***************************************************************************/ - -static ADDRESS_MAP_START( marvins_cpuA_map, ADDRESS_SPACE_PROGRAM, 8 ) - AM_RANGE(0x0000, 0x5fff) AM_ROM - AM_RANGE(0x6000, 0x6000) AM_WRITE(marvins_palette_bank_w) - AM_RANGE(0x8000, 0x8000) AM_READ_PORT("SYSTEM") - AM_RANGE(0x8100, 0x8100) AM_READ_PORT("P1") - AM_RANGE(0x8200, 0x8200) AM_READ_PORT("P2") - AM_RANGE(0x8300, 0x8300) AM_WRITE(sound_command_w) - AM_RANGE(0x8400, 0x8400) AM_READ_PORT("DSW1") - AM_RANGE(0x8500, 0x8500) AM_READ_PORT("DSW2") - AM_RANGE(0x8600, 0x8600) AM_RAM /* video attribute */ - AM_RANGE(0x8700, 0x8700) AM_READWRITE(snk_cpuB_nmi_trigger_r, snk_cpuA_nmi_ack_w) - AM_RANGE(0xc000, 0xcfff) AM_RAM AM_BASE(&spriteram) AM_SHARE(1) - AM_RANGE(0xd000, 0xdfff) AM_RAM_WRITE(marvins_background_ram_w) AM_SHARE(2) AM_BASE(&spriteram_3) - AM_RANGE(0xe000, 0xefff) AM_RAM_WRITE(marvins_foreground_ram_w) AM_SHARE(3) AM_BASE(&spriteram_2) - AM_RANGE(0xf000, 0xffff) AM_RAM_WRITE(marvins_text_ram_w) AM_SHARE(4) AM_BASE(&videoram) -ADDRESS_MAP_END - -static ADDRESS_MAP_START( marvins_cpuB_map, ADDRESS_SPACE_PROGRAM, 8 ) - AM_RANGE(0x0000, 0x5fff) AM_ROM - AM_RANGE(0x8700, 0x8700) AM_READWRITE(snk_cpuA_nmi_trigger_r, snk_cpuB_nmi_ack_w) - AM_RANGE(0xc000, 0xcfff) AM_RAM AM_SHARE(1) - AM_RANGE(0xd000, 0xdfff) AM_RAM_WRITE(marvins_background_ram_w) AM_SHARE(2) - AM_RANGE(0xe000, 0xefff) AM_RAM_WRITE(marvins_foreground_ram_w) AM_SHARE(3) - AM_RANGE(0xf000, 0xffff) AM_RAM_WRITE(marvins_text_ram_w) AM_SHARE(4) -ADDRESS_MAP_END - - -static ADDRESS_MAP_START( madcrash_cpuA_map, ADDRESS_SPACE_PROGRAM, 8 ) - AM_RANGE(0x0000, 0x7fff) AM_ROM - AM_RANGE(0x8000, 0x8000) AM_READ_PORT("SYSTEM") - AM_RANGE(0x8100, 0x8100) AM_READ_PORT("P1") - AM_RANGE(0x8200, 0x8200) AM_READ_PORT("P2") - AM_RANGE(0x8300, 0x8300) AM_WRITE(sound_command_w) - AM_RANGE(0x8400, 0x8400) AM_READ_PORT("DSW1") - AM_RANGE(0x8500, 0x8500) AM_READ_PORT("DSW2") - AM_RANGE(0x8600, 0x86ff) AM_RAM /* video attribute */ - AM_RANGE(0x8700, 0x8700) AM_READWRITE(snk_cpuB_nmi_trigger_r, snk_cpuA_nmi_ack_w) -// AM_RANGE(0xc800, 0xc800) AM_WRITE(marvins_palette_bank_w) // palette bank switch (c8f1 for Vanguard) - AM_RANGE(0xc800, 0xc8ff) AM_RAM - AM_RANGE(0xc000, 0xcfff) AM_RAM AM_BASE(&spriteram) AM_SHARE(1) - AM_RANGE(0xd000, 0xdfff) AM_RAM_WRITE(marvins_background_ram_w) AM_SHARE(2) AM_BASE(&spriteram_3) - AM_RANGE(0xe000, 0xefff) AM_RAM_WRITE(marvins_foreground_ram_w) AM_SHARE(3) AM_BASE(&spriteram_2) - AM_RANGE(0xf000, 0xffff) AM_RAM_WRITE(marvins_text_ram_w) AM_SHARE(4) AM_BASE(&videoram) -ADDRESS_MAP_END - -static ADDRESS_MAP_START( madcrash_cpuB_map, ADDRESS_SPACE_PROGRAM, 8 ) - AM_RANGE(0x8700, 0x8700) AM_WRITE(snk_cpuB_nmi_ack_w) /* Vangaurd II */ - AM_RANGE(0x0000, 0x9fff) AM_ROM - AM_RANGE(0xa000, 0xa000) AM_WRITE(snk_cpuB_nmi_ack_w) /* Mad Crasher */ - AM_RANGE(0xc000, 0xcfff) AM_RAM_WRITE(marvins_foreground_ram_w) AM_SHARE(3) - AM_RANGE(0xd000, 0xdfff) AM_RAM_WRITE(marvins_text_ram_w) AM_SHARE(4) - AM_RANGE(0xe000, 0xefff) AM_RAM AM_SHARE(1) - AM_RANGE(0xf000, 0xffff) AM_RAM_WRITE(marvins_background_ram_w) AM_SHARE(2) -ADDRESS_MAP_END - - -static INPUT_PORTS_START( marvins ) - PORT_START("SYSTEM") - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 ) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_COIN2 ) - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SERVICE1 ) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 ) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START2 ) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM(sound_status_r, NULL) /* sound CPU status */ - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) - - PORT_START("P1") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) - - PORT_START("P2") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_COCKTAIL - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_COCKTAIL - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_COCKTAIL - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_COCKTAIL - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) - - PORT_START("DSW1") - PORT_DIPNAME( 0x03, 0x02, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW1:1,2") - PORT_DIPSETTING( 0x00, "1" ) - PORT_DIPSETTING( 0x01, "2" ) - PORT_DIPSETTING( 0x02, "3" ) - PORT_DIPSETTING( 0x03, "5" ) - PORT_DIPNAME(0x04, 0x04, "Infinite Lives (Cheat)") PORT_DIPLOCATION("SW1:3") - PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x38, 0x00, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW1:4,5,6") - PORT_DIPSETTING( 0x38, DEF_STR( 5C_1C ) ) - PORT_DIPSETTING( 0x30, DEF_STR( 3C_1C ) ) - PORT_DIPSETTING( 0x28, DEF_STR( 2C_1C ) ) - PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) ) - PORT_DIPSETTING( 0x08, DEF_STR( 1C_2C ) ) - PORT_DIPSETTING( 0x10, DEF_STR( 1C_3C ) ) - PORT_DIPSETTING( 0x18, DEF_STR( 1C_5C ) ) - PORT_DIPSETTING( 0x20, DEF_STR( 1C_6C ) ) - PORT_DIPNAME( 0x40, 0x40, DEF_STR( Free_Play ) ) PORT_DIPLOCATION("SW1:7") - PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x80, 0x80, "Freeze" ) PORT_DIPLOCATION("SW1:8") - PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - - PORT_START("DSW2") - PORT_DIPNAME( 0x07, 0x00, "1st Bonus Life" ) PORT_DIPLOCATION("SW2:1,2,3") - PORT_DIPSETTING( 0x00, "10000" ) - PORT_DIPSETTING( 0x01, "20000" ) - PORT_DIPSETTING( 0x02, "30000" ) - PORT_DIPSETTING( 0x03, "40000" ) - PORT_DIPSETTING( 0x04, "50000" ) - PORT_DIPSETTING( 0x05, "60000" ) - PORT_DIPSETTING( 0x06, "70000" ) - PORT_DIPSETTING( 0x07, "80000" ) - PORT_DIPNAME( 0x18, 0x08, "2nd Bonus Life" ) PORT_DIPLOCATION("SW2:4,5") - PORT_DIPSETTING( 0x08, "1st bonus*2" ) - PORT_DIPSETTING( 0x10, "1st bonus*3" ) - PORT_DIPSETTING( 0x18, "1st bonus*4" ) - PORT_DIPSETTING( 0x00, DEF_STR( None ) ) - PORT_DIPNAME( 0x20, 0x20, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW2:6") - PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x20, DEF_STR( On ) ) - PORT_DIPNAME( 0x40, 0x00, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("SW2:7") - PORT_DIPSETTING( 0x00, DEF_STR( Upright ) ) - PORT_DIPSETTING( 0x40, DEF_STR( Cocktail ) ) - PORT_DIPNAME( 0x80, 0x80, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW2:8") - PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) -INPUT_PORTS_END - - -static INPUT_PORTS_START( vangrd2 ) - PORT_START("SYSTEM") - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 ) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNKNOWN ) - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNKNOWN ) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 ) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START2 ) - PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM(sound_status_r, NULL) /* sound CPU status */ - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) - - PORT_START("P1") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON2 ) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 ) - PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) - - PORT_START("P2") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_COCKTAIL - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_COCKTAIL - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_COCKTAIL - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_COCKTAIL - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL - PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) - - PORT_START("DSW1") - PORT_DIPNAME( 0x07, 0x07, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW1:1,2,3") - PORT_DIPSETTING( 0x00, DEF_STR( 6C_1C ) ) - PORT_DIPSETTING( 0x01, DEF_STR( 5C_1C ) ) - PORT_DIPSETTING( 0x02, DEF_STR( 3C_1C ) ) - PORT_DIPSETTING( 0x03, DEF_STR( 2C_1C ) ) - PORT_DIPSETTING( 0x07, DEF_STR( 1C_1C ) ) - PORT_DIPSETTING( 0x06, DEF_STR( 1C_2C ) ) - PORT_DIPSETTING( 0x05, DEF_STR( 1C_3C ) ) - PORT_DIPSETTING( 0x04, DEF_STR( 1C_5C ) ) - PORT_DIPNAME( 0x38, 0x38, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW1:4,5,6") - PORT_DIPSETTING( 0x38, "30000" ) - PORT_DIPSETTING( 0x30, "40000" ) - PORT_DIPSETTING( 0x28, "50000" ) - PORT_DIPSETTING( 0x20, "60000" ) - PORT_DIPSETTING( 0x18, "70000" ) - PORT_DIPSETTING( 0x10, "80000" ) - PORT_DIPSETTING( 0x08, "90000" ) - PORT_DIPSETTING( 0x00, "100000" ) - PORT_DIPNAME( 0xc0, 0x80, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW1:7,8") - PORT_DIPSETTING( 0x00, "1" ) - PORT_DIPSETTING( 0x40, "2" ) - PORT_DIPSETTING( 0x80, "3" ) - PORT_DIPSETTING( 0xc0, "5" ) - - PORT_START("DSW2") - PORT_DIPNAME( 0x01, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW2:1") - PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x02, 0x02, "Freeze" ) PORT_DIPLOCATION("SW2:2") - PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x04, 0x04, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("SW2:3") - PORT_DIPSETTING( 0x04, DEF_STR( Upright ) ) - PORT_DIPSETTING( 0x00, DEF_STR( Cocktail ) ) - PORT_DIPNAME( 0x08, 0x08, DEF_STR( Language ) ) PORT_DIPLOCATION("SW2:4") - PORT_DIPSETTING( 0x08, DEF_STR( English ) ) - PORT_DIPSETTING( 0x00, DEF_STR( Japanese ) ) - PORT_DIPNAME( 0x10, 0x00, "Bonus Life Occurence" ) PORT_DIPLOCATION("SW2:5") - PORT_DIPSETTING( 0x00, "Every bonus" ) - PORT_DIPSETTING( 0x10, "Bonus only" ) - PORT_DIPNAME( 0x20, 0x20, "Infinite Lives (Cheat)") PORT_DIPLOCATION("SW2:6") - PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x40, 0x40, DEF_STR( Free_Play ) ) PORT_DIPLOCATION("SW2:7") - PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x80, 0x80, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW2:8") - PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) -INPUT_PORTS_END - - -static INPUT_PORTS_START( madcrash ) - PORT_START("SYSTEM") - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 ) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_COIN2 ) - PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_COIN3 ) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 ) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START2 ) - PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM(sound_status_r, NULL) /* sound CPU status */ - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_SERVICE( 0x80, IP_ACTIVE_LOW ) - - PORT_START("P1") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON2 ) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 ) - PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) - - PORT_START("P2") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_COCKTAIL - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_COCKTAIL - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_COCKTAIL - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_COCKTAIL - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL - PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED ) - - PORT_START("DSW1") - PORT_DIPUNUSED_DIPLOC(0x01, IP_ACTIVE_LOW, "SW1:1") /* Listed as Unused */ - PORT_DIPNAME( 0x02, 0x00, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("SW1:2") - PORT_DIPSETTING( 0x00, DEF_STR( Upright ) ) - PORT_DIPSETTING( 0x02, DEF_STR( Cocktail ) ) - PORT_DIPNAME( 0x04, 0x04, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW1:3") - PORT_DIPSETTING( 0x04, "3" ) - PORT_DIPSETTING( 0x00, "5" ) - PORT_DIPNAME( 0x38, 0x38, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW1:4,5,6") -// PORT_DIPSETTING( 0x08, DEF_STR( 5C_1C ) ) - PORT_DIPSETTING( 0x10, DEF_STR( 5C_1C ) ) - PORT_DIPSETTING( 0x20, DEF_STR( 3C_1C ) ) - PORT_DIPSETTING( 0x18, DEF_STR( 2C_1C ) ) - PORT_DIPSETTING( 0x38, DEF_STR( 1C_1C ) ) - PORT_DIPSETTING( 0x30, DEF_STR( 1C_2C ) ) - PORT_DIPSETTING( 0x28, DEF_STR( 1C_3C ) ) - PORT_DIPSETTING( 0x00, DEF_STR( Free_Play ) ) - PORT_DIPNAME( 0xc0, 0xc0, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW1:7,8") - PORT_DIPSETTING( 0xc0, "20000 60000" ) - PORT_DIPSETTING( 0x80, "40000 90000" ) - PORT_DIPSETTING( 0x40, "50000 120000" ) - PORT_DIPSETTING( 0x00, DEF_STR( None ) ) - - PORT_START("DSW2") - PORT_DIPNAME( 0x01, 0x00, "Bonus Life Occurence" ) PORT_DIPLOCATION("SW2:1") - PORT_DIPSETTING( 0x01, "1st, 2nd, then every 2nd" ) /* Check the "Non Bugs" page */ - PORT_DIPSETTING( 0x00, "1st and 2nd only" ) - PORT_DIPNAME( 0x06, 0x04, "Scroll Speed" ) PORT_DIPLOCATION("SW2:2,3") - PORT_DIPSETTING( 0x06, "Slow" )//DEF_STR( Easy ) ) - PORT_DIPSETTING( 0x04, DEF_STR( Normal ) ) - PORT_DIPSETTING( 0x02, "Fast" )//DEF_STR( Hard ) ) - PORT_DIPSETTING( 0x00, "Faster" ) - PORT_DIPNAME( 0x18, 0x10, "Game mode" ) PORT_DIPLOCATION("SW2:4,5") - PORT_DIPSETTING( 0x18, "Demo Sounds Off" ) - PORT_DIPSETTING( 0x10, "Demo Sounds On" ) - PORT_DIPSETTING( 0x08, "Infinite Lives (Cheat)") - PORT_DIPSETTING( 0x00, "Freeze" ) - PORT_DIPNAME( 0x20, 0x20, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW2:6") - PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) /* Check the "Non Bugs" page */ - PORT_DIPNAME( 0x40, 0x40, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW2:7") - PORT_DIPSETTING( 0x40, DEF_STR( Easy ) ) - PORT_DIPSETTING( 0x00, DEF_STR( Hard ) ) - PORT_DIPUNKNOWN_DIPLOC(0x80, IP_ACTIVE_LOW, "SW2:8") /* Listed as Unused, it is actually tested in many places */ -INPUT_PORTS_END - - -/*************************************************************************** -** -** Graphics Layout -** -***************************************************************************/ - -static const gfx_layout sprite_layout = -{ - 16,16, - 0x100, - 3, - { 0,0x2000*8,0x4000*8 }, - { - 7,6,5,4,3,2,1,0, - 15,14,13,12,11,10,9,8 - }, - { - 0*16, 1*16, 2*16, 3*16, 4*16, 5*16, 6*16, 7*16, - 8*16, 9*16, 10*16, 11*16, 12*16, 13*16, 14*16, 15*16 - }, - 256 -}; - -static const gfx_layout tile_layout = -{ - 8,8, - 0x100, - 4, - { 0, 1, 2, 3 }, - { 4, 0, 12, 8, 20, 16, 28, 24}, - { 0*32, 1*32, 2*32, 3*32, 4*32, 5*32, 6*32, 7*32 }, - 256 -}; - -static GFXDECODE_START( marvins ) - GFXDECODE_ENTRY( "gfx1", 0, tile_layout, 0x080, 8 ) /* text layer */ - GFXDECODE_ENTRY( "gfx2", 0, tile_layout, 0x110, 1 ) /* background */ - GFXDECODE_ENTRY( "gfx3", 0, tile_layout, 0x100, 1 ) /* foreground */ - GFXDECODE_ENTRY( "gfx4", 0, sprite_layout, 0x000, 16 ) /* sprites */ -GFXDECODE_END - - -/*************************************************************************** -** -** Machine Driver -** -***************************************************************************/ - -static MACHINE_DRIVER_START( marvins ) - - /* basic machine hardware */ - MDRV_CPU_ADD("main", Z80, 3360000) /* 3.36 MHz */ - MDRV_CPU_PROGRAM_MAP(marvins_cpuA_map,0) - MDRV_CPU_VBLANK_INT("main", irq0_line_hold) - - MDRV_CPU_ADD("sub", Z80, 3360000) /* 3.36 MHz */ - MDRV_CPU_PROGRAM_MAP(marvins_cpuB_map,0) - MDRV_CPU_VBLANK_INT("main", irq0_line_hold) - - MDRV_CPU_ADD("audio", Z80, 4000000) /* 4.0 MHz */ - MDRV_CPU_PROGRAM_MAP(sound_map,0) - MDRV_CPU_IO_MAP(sound_portmap,0) - MDRV_CPU_PERIODIC_INT(nmi_line_assert, 244) // schematics show a separate 244Hz timer - - MDRV_INTERLEAVE(100) - - /* video hardware */ - MDRV_VIDEO_ATTRIBUTES(VIDEO_HAS_SHADOWS) - - MDRV_SCREEN_ADD("main", RASTER) - MDRV_SCREEN_REFRESH_RATE(60.606060) - MDRV_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */) - MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) - MDRV_SCREEN_SIZE(256+32, 224) - MDRV_SCREEN_VISIBLE_AREA(0, 255+32,0, 223) - - MDRV_GFXDECODE(marvins) - MDRV_PALETTE_LENGTH((16+2)*16) - - MDRV_VIDEO_START(marvins) - MDRV_VIDEO_UPDATE(marvins) - - /* sound hardware */ - MDRV_SPEAKER_STANDARD_MONO("mono") - - MDRV_SOUND_ADD("ay1", AY8910, 2000000) - MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) - - MDRV_SOUND_ADD("ay2", AY8910, 2000000) - MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) - - MDRV_SOUND_ADD("namco", NAMCO, 8000000/256) - MDRV_SOUND_CONFIG(snkwave_interface) - MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.10) -MACHINE_DRIVER_END - - -static MACHINE_DRIVER_START( vangrd2 ) - - /* basic machine hardware */ - MDRV_CPU_ADD("main", Z80, 3360000) /* 3.36 MHz */ - MDRV_CPU_PROGRAM_MAP(madcrash_cpuA_map,0) - MDRV_CPU_VBLANK_INT("main", irq0_line_hold) - - MDRV_CPU_ADD("sub", Z80, 3360000) /* 3.36 MHz */ - MDRV_CPU_PROGRAM_MAP(madcrash_cpuB_map,0) - MDRV_CPU_VBLANK_INT("main", irq0_line_hold) - - MDRV_CPU_ADD("audio", Z80, 4000000) /* 4.0 MHz */ - MDRV_CPU_PROGRAM_MAP(sound_map,0) - MDRV_CPU_IO_MAP(sound_portmap,0) - MDRV_CPU_PERIODIC_INT(nmi_line_assert, 244) - - MDRV_INTERLEAVE(100) - - /* video hardware */ - MDRV_VIDEO_ATTRIBUTES(VIDEO_HAS_SHADOWS) - - MDRV_SCREEN_ADD("main", RASTER) - MDRV_SCREEN_REFRESH_RATE(60.606060) - MDRV_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */) - MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) - MDRV_SCREEN_SIZE(256+32, 224) - MDRV_SCREEN_VISIBLE_AREA(0, 255+32,0, 223) - - MDRV_GFXDECODE(marvins) - MDRV_PALETTE_LENGTH((16+2)*16) - - MDRV_VIDEO_START(marvins) - MDRV_VIDEO_UPDATE(madcrash) - - /* sound hardware */ - MDRV_SPEAKER_STANDARD_MONO("mono") - - MDRV_SOUND_ADD("ay1", AY8910, 2000000) - MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) - - MDRV_SOUND_ADD("ay2", AY8910, 2000000) - MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) - - MDRV_SOUND_ADD("namco", NAMCO, 8000000/256) - MDRV_SOUND_CONFIG(snkwave_interface) - MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.10) -MACHINE_DRIVER_END - - -static MACHINE_DRIVER_START( madcrash ) - - /* basic machine hardware */ - MDRV_IMPORT_FROM( vangrd2 ) - - MDRV_CPU_MODIFY("main") - MDRV_CPU_VBLANK_INT_HACK(0, 0) - - MDRV_CPU_MODIFY("sub") - MDRV_CPU_VBLANK_INT("main", snk_irq_BA) - - MDRV_INTERLEAVE(300) - - /* video hardware */ - MDRV_SCREEN_MODIFY("main") - MDRV_SCREEN_VISIBLE_AREA(16, 16+256-1, 0, 0+216-1) -MACHINE_DRIVER_END - - -/*************************************************************************** -** -** ROM Loading -** -** note: -** Mad Crasher doesn't pass its internal checksum -** Also, some of the background graphics look to be incorrect. -** -***************************************************************************/ - -ROM_START( marvins ) - ROM_REGION( 0x10000, "main", 0 ) /* 64k for CPUA code */ - ROM_LOAD( "pa1", 0x0000, 0x2000, CRC(0008d791) SHA1(6ffb174b2d680314f74efeef83da9f3ee3e0c753) ) - ROM_LOAD( "pa2", 0x2000, 0x2000, CRC(9457003c) SHA1(05ecd5c638a12163e2a65bdfcc09875618f792e1) ) - ROM_LOAD( "pa3", 0x4000, 0x2000, CRC(54c33ecb) SHA1(cfbf9ffc125fbc51f2abef180f36781f9e748bbd) ) - - ROM_REGION( 0x10000, "sub", 0 ) /* 64k for CPUB code */ - ROM_LOAD( "pb1", 0x0000, 0x2000, CRC(3b6941a5) SHA1(9c29870196eaed87f34456fdb06bf7b69c8f489d) ) - - ROM_REGION( 0x10000, "audio", 0 ) /* 64k for sound code */ - ROM_LOAD( "m1", 0x0000, 0x2000, CRC(2314c696) SHA1(1b84a0c82a4dcff648752f53aa1f0abf5357c5d1) ) - ROM_LOAD( "m2", 0x2000, 0x2000, CRC(74ba5799) SHA1(c278b0e5c4134f6077d4ae7b51e3c5cba28af1a8) ) - - ROM_REGION( 0x2000, "gfx1", ROMREGION_DISPOSE ) - ROM_LOAD( "s1", 0x0000, 0x2000, CRC(327f70f3) SHA1(078dcc6b4697617d4d833ccd59c6a543b2a88d9e) ) /* characters */ - - ROM_REGION( 0x2000, "gfx2", ROMREGION_DISPOSE ) - ROM_LOAD( "b1", 0x0000, 0x2000, CRC(e528bc60) SHA1(3365ac7cbc57739054bc11e68831be87c0c1a97a) ) /* background tiles */ - - ROM_REGION( 0x2000, "gfx3", ROMREGION_DISPOSE ) - ROM_LOAD( "b2", 0x0000, 0x2000, CRC(e528bc60) SHA1(3365ac7cbc57739054bc11e68831be87c0c1a97a) ) /* foreground tiles */ - - ROM_REGION( 0x6000, "gfx4", ROMREGION_DISPOSE ) - ROM_LOAD( "f3", 0x0000, 0x2000, CRC(e55c9b83) SHA1(04b0d99955e4b11820015b7721ac6399a3d5a829) ) /* sprites */ - ROM_LOAD( "f2", 0x2000, 0x2000, CRC(8fc2b081) SHA1(fb345965375cb62ec1b947d6c6d071380dc0f395) ) - ROM_LOAD( "f1", 0x4000, 0x2000, CRC(0bd6b4e5) SHA1(c56747ff2135db734f1b5f6c2906de5ac8f53bbc) ) - - ROM_REGION( 0x0c00, "proms", 0 ) - ROM_LOAD( "marvmaze.j1", 0x000, 0x400, CRC(92f5b06d) SHA1(97979ffb6fb065d9c99da43173180fefb2de1886) ) - ROM_LOAD( "marvmaze.j2", 0x400, 0x400, CRC(d2b25665) SHA1(b913b8b9c5ee0a29b5a115b2432c5706979059cf) ) - ROM_LOAD( "marvmaze.j3", 0x800, 0x400, CRC(df9e6005) SHA1(8f633f664c3f8e4f6ca94bee74a68c8fda8873e3) ) -ROM_END - -ROM_START( madcrash ) - ROM_REGION( 0x10000, "main", 0 ) /* 64k for CPUA code */ - ROM_LOAD( "p8", 0x0000, 0x2000, CRC(ecb2fdc9) SHA1(7dd79fbbe286a9f18ed2cae45b1bfab765e549a1) ) - ROM_LOAD( "p9", 0x2000, 0x2000, CRC(0a87df26) SHA1(327710452bdc5dbb931abc853957225814f224c5) ) - ROM_LOAD( "p10", 0x4000, 0x2000, CRC(6eb8a87c) SHA1(375377df22b331175aaf1f9eb8d8ad83e8e146f6) ) - - ROM_REGION( 0x10000, "sub", 0 ) /* 64k for CPUB code */ - ROM_LOAD( "p4", 0x0000, 0x2000, CRC(5664d699) SHA1(5bfa57a0f8d718d522003da6513a70d7ca3a87a3) ) - ROM_LOAD( "p5", 0x2000, 0x2000, CRC(dea2865a) SHA1(0807281e35159ee29fbe2d1aa087b57804f1a14f) ) - ROM_LOAD( "p6", 0x4000, 0x2000, CRC(e25a9b9c) SHA1(26853611e3898907239e15f1a00f62290889f89b) ) - ROM_LOAD( "p7", 0x6000, 0x2000, CRC(55b14a36) SHA1(7d5566a6ba285af92ddf560efda60a79f1da84c2) ) - ROM_LOAD( "p3", 0x8000, 0x2000, CRC(e3c8c2cb) SHA1(b3e39eacd2609ff0fa0f511bff0fc83e6b3970d4) ) - - ROM_REGION( 0x10000, "audio", 0 ) /* 64k for sound code */ - ROM_LOAD( "p1", 0x0000, 0x2000, CRC(2dcd036d) SHA1(4da42ab1e502fff57f5d5787df406289538fa484) ) - ROM_LOAD( "p2", 0x2000, 0x2000, CRC(cc30ae8b) SHA1(ffedc747b9e0b616a163ff8bb1def318e522585b) ) - - ROM_REGION( 0x2000, "gfx1", ROMREGION_DISPOSE ) - ROM_LOAD( "p13", 0x0000, 0x2000, CRC(48c4ade0) SHA1(3628abb4f425b8c9d8659c8e4082735168b0f3e9) ) /* characters */ - - ROM_REGION( 0x2000, "gfx2", ROMREGION_DISPOSE ) - ROM_LOAD( "p11", 0x0000, 0x2000, CRC(67174956) SHA1(65a921176294212971c748932a9010f45e1fb499) ) /* background tiles */ - - ROM_REGION( 0x2000, "gfx3", ROMREGION_DISPOSE ) - ROM_LOAD( "p12", 0x0000, 0x2000, CRC(085094c1) SHA1(5c5599d1ed7f8a717ada54bbd28383a22e09a8fe) ) /* foreground tiles */ - - ROM_REGION( 0x6000, "gfx4", ROMREGION_DISPOSE ) - ROM_LOAD( "p14", 0x0000, 0x2000, CRC(07e807bc) SHA1(f651d3a5394ced8e0a1b2be3aa52b3e5a5d84c37) ) /* sprites */ - ROM_LOAD( "p15", 0x2000, 0x2000, CRC(a74149d4) SHA1(e8011a8d4d1a98a0ffe67fc28ea9fa192ca80321) ) - ROM_LOAD( "p16", 0x4000, 0x2000, CRC(6153611a) SHA1(b352f92b233761122f74830e46913cc4df800259) ) - - ROM_REGION( 0x0c00, "proms", 0 ) - ROM_LOAD( "m3-prom.j3", 0x000, 0x400, CRC(d19e8a91) SHA1(b21fbdb8ed8d0b27c3ec78cf2e115624f69c67e0) ) - ROM_LOAD( "m2-prom.j4", 0x400, 0x400, CRC(9fc325af) SHA1(a180662f168ba001376f25f5d9205cb119c1ffee) ) - ROM_LOAD( "m1-prom.j5", 0x800, 0x400, CRC(07678443) SHA1(267951886d8b031dd633dc4823d9bd862a585437) ) -ROM_END - -ROM_START( vangrd2 ) - ROM_REGION( 0x10000, "main", 0 ) - ROM_LOAD( "p1.9a", 0x0000, 0x2000, CRC(bc9eeca5) SHA1(5a737e0f0aa1a3a5296d1e1fec13b34aee970609) ) - ROM_LOAD( "p3.11a", 0x2000, 0x2000, CRC(3970f69d) SHA1(b0ef7494888804ab5b4002730fb0232a7fd6797b) ) - ROM_LOAD( "p2.12a", 0x4000, 0x2000, CRC(58b08b58) SHA1(eccc85191d678a0115a113002a43203afd857a5b) ) - ROM_LOAD( "p4.14a", 0x6000, 0x2000, CRC(a95f11ea) SHA1(8007efb4ad948c8768e474fc77134f3ce52da1d2) ) - - ROM_REGION( 0x10000, "sub", 0 ) - ROM_LOAD( "p5.4a", 0x0000, 0x2000, CRC(e4dfd0ba) SHA1(12d45ff147f3ea9c9e898c3831874cd7c1a071b7) ) - ROM_LOAD( "p6.6a", 0x2000, 0x2000, CRC(894ff00d) SHA1(1c66f327d8e94dc6ac386e11fcc5eb17c9081434) ) - ROM_LOAD( "p7.7a", 0x4000, 0x2000, CRC(40b4d069) SHA1(56c464bd055125ffc2da02d70137aa5efe5cd8f6) ) - - ROM_REGION( 0x10000, "audio", 0 ) /* 64k for sound code */ - ROM_LOAD( "p8.6a", 0x0000, 0x2000, CRC(a3daa438) SHA1(4e659ac7e3ebaf85bc3ce5c9946fcf0af23083b4) ) - ROM_LOAD( "p9.8a", 0x2000, 0x2000, CRC(9345101a) SHA1(b99ad1c2a79df50b0a60fdd43ca466f6cb38445b) ) - - ROM_REGION( 0x2000, "gfx1", ROMREGION_DISPOSE ) - ROM_LOAD( "p15.1e", 0x0000, 0x2000, CRC(85718a41) SHA1(4c9aa1f8b229410414cd67bac8cb10a14bea12f4) ) /* characters */ - - ROM_REGION( 0x2000, "gfx2", ROMREGION_DISPOSE ) - ROM_LOAD( "p13.1a", 0x0000, 0x2000, CRC(912f22c6) SHA1(5042edc80b58f77b3576b5e6eb8c6460c8a35494) ) /* background tiles */ - - ROM_REGION( 0x2000, "gfx3", ROMREGION_DISPOSE ) - ROM_LOAD( "p9", 0x0000, 0x2000, CRC(7aa0b684) SHA1(d52670ec50b1a07d6c2c537f67922063deacdeea) ) /* foreground tiles */ - - ROM_REGION( 0x6000, "gfx4", ROMREGION_DISPOSE ) - ROM_LOAD( "p12.1kl", 0x0000, 0x2000, CRC(8658ea6c) SHA1(d5ea9be2c1776b11abc77c944a653eeb73b27fc8) ) /* sprites */ - ROM_LOAD( "p11.3kl", 0x2000, 0x2000, CRC(620cd4ec) SHA1(a2fcc3d24d0d3c7cc601620ae7a709f46b613c0f) ) - ROM_LOAD( "p10.4kl", 0x4000, 0x2000, CRC(5bfc04c0) SHA1(4eb152fdf39cb0024f71d5bdf1bfc79c2b8c2329) ) - - ROM_REGION( 0x0c00, "proms", 0 ) - ROM_LOAD( "mb7054.3j", 0x000, 0x400, CRC(506f659a) SHA1(766f1a0dd462eba64546c514004e6542e200d7c3) ) - ROM_LOAD( "mb7054.4j", 0x400, 0x400, CRC(222133ce) SHA1(109a63c8c44608a8ad9183e7b5d269765cc5f067) ) - ROM_LOAD( "mb7054.5j", 0x800, 0x400, CRC(2e21a79b) SHA1(1956377c799e0bbd127bf4fae016adc148efe007) ) -ROM_END - - -/*******************************************************************************************/ - -static DRIVER_INIT( marvins ) -{ - sound_cpu_busy = 0; - marvins_gamegroup = 0; -} - -static DRIVER_INIT( madcrash ) -{ -/* - The following lines patch out the ROM test (which fails - probably - because of bit rot, so the rest of the test mode (what little there - is) can be explored. - - UINT8 *mem = memory_region(machine, "main"); - mem[0x3a5d] = 0; mem[0x3a5e] = 0; mem[0x3a5f] = 0; -*/ - sound_cpu_busy = 0; - marvins_gamegroup = 1; - snk_irq_delay = 1700; -} - -static DRIVER_INIT( vangrd2 ) -{ - sound_cpu_busy = 0; - marvins_gamegroup = 2; -} - - -GAME( 1983, marvins, 0, marvins, marvins, marvins, ROT270, "SNK", "Marvin's Maze", 0 ) -GAME( 1984, madcrash, 0, madcrash, madcrash, madcrash, ROT0, "SNK", "Mad Crasher", GAME_IMPERFECT_GRAPHICS ) -GAME( 1984, vangrd2, 0, vangrd2, vangrd2, vangrd2, ROT270, "SNK", "Vanguard II", 0 ) diff --git a/src/mame/drivers/snk.c b/src/mame/drivers/snk.c index 560162c5e8d..2f7d41116da 100644 --- a/src/mame/drivers/snk.c +++ b/src/mame/drivers/snk.c @@ -29,6 +29,7 @@ Fighting Soccer Credits (in alphabetical order) Marco Cassili Ernesto Corvi + Tim Lindquist Carlos A. Lozano Bryan McPhail Jarek Parchanski @@ -42,6 +43,9 @@ Credits (in alphabetical order) Notes: ------ - How to enter test mode: + 1983 marvins: n/a + 1984 madcrash: keep F2 pressed during boot + 1984 vangrd2: n/a 1984 jcross: n/a 1984 sgladiat: keep F2 pressed during boot 1985 hal21: n/a @@ -63,6 +67,22 @@ Notes: - the I/O area (C000-CFFF) is probably mirrored in large part on the two main CPUs, however I mapped only the addresses actually used by the games. +- the Flip Screen dip switch in madcrash doesn't work correctly, the screen is + inverted but the bg and sprite positions are wrong. This is a bug in the game; + the Cocktail dip switch works correctly and the screen is properly flipped + when player 2 plays. + +- madcrash fails the ROM test, but ROMs are verified to be good so it looks like + a bug. The service mode functionality is very limited anyway. To get past the + failed ROM test and see the service mode, use this ROM patch: + + UINT8 *mem = memory_region(machine, "main"); + mem[0x3a5d] = mem[0x3a5e] = mem[0x3a5f] = 0; + +- The "SNK Wave" custom sound circuitry is only actually used by marvins and + vangrd2. The madcrash pcb probably still has it, while later boards like jcross + might not have it at all. + - sgladiat runs on a modified jcross pcb (same pcb ID with flying wires). - the original sgladiat pcb is verified to have huge sprite lag. @@ -172,6 +192,12 @@ Notes: TODO: ----- +- madcrash shadows change color, however this should be the correct behaviour + as far as I can tell. Should be verified on the pcb. + +- one unknown dip switch in madcrash. Also the Difficulty dip switch is not + verified (though it's listed in the manual). + - jcross might be a bad dump. The current ROM set is made by mixing two sets which were marked as 'bad'. @@ -217,22 +243,24 @@ TODO: #include "driver.h" #include "snk.h" +#include "sound/snkwave.h" #include "sound/ay8910.h" #include "sound/3812intf.h" static int countryc_trackball; +static int marvins_sound_busy_flag; // FIXME this should be initialised on machine reset static int sound_status; /*********************************************************************/ -// Interrupt Handlers Common to All SNK Triple Z80 Games +// Interrupt handlers common to all SNK triple Z80 games READ8_HANDLER ( snk_cpuA_nmi_trigger_r ) { cpunum_set_input_line(machine, 0, INPUT_LINE_NMI, ASSERT_LINE); - return 0; + return 0xff; } WRITE8_HANDLER( snk_cpuA_nmi_ack_w ) @@ -243,7 +271,7 @@ WRITE8_HANDLER( snk_cpuA_nmi_ack_w ) READ8_HANDLER ( snk_cpuB_nmi_trigger_r ) { cpunum_set_input_line(machine, 1, INPUT_LINE_NMI, ASSERT_LINE); - return 0; + return 0xff; } WRITE8_HANDLER( snk_cpuB_nmi_ack_w ) @@ -264,6 +292,33 @@ enum CMDIRQ_CLEAR }; +/*********************************************************************/ + +static WRITE8_HANDLER( marvins_soundlatch_w ) +{ + marvins_sound_busy_flag = 1; + soundlatch_w(machine, offset, data); + cpunum_set_input_line(machine, 2, 0, HOLD_LINE); +} + +static READ8_HANDLER( marvins_soundlatch_r ) +{ + marvins_sound_busy_flag = 0; + return soundlatch_r(machine,0); +} + +static CUSTOM_INPUT( marvins_sound_busy ) +{ + return marvins_sound_busy_flag; +} + +static READ8_HANDLER( marvins_sound_nmi_ack_r ) +{ + cpunum_set_input_line(machine, 2, INPUT_LINE_NMI, CLEAR_LINE); + return 0xff; +} + +/*********************************************************************/ static TIMER_CALLBACK( sgladiat_sndirq_update_callback ) { @@ -311,10 +366,8 @@ static READ8_HANDLER( sgladiat_sound_irq_ack_r ) } -/*********************************************************************/ - +/********************************************************************* -/* All the later games (from athena onwards) have the same sound status flag handling. This 4 bit register is mapped at 0xf800. @@ -333,9 +386,8 @@ static READ8_HANDLER( sgladiat_sound_irq_ack_r ) bits since there is only one YM chip, and the bits are cleared using separate memory addresses. Additionally, clearing the cmd irq also clears the sound latch. -*/ -/*********************************************************************/ +*********************************************************************/ static TIMER_CALLBACK( sndirq_update_callback ) { @@ -759,6 +811,102 @@ static CUSTOM_INPUT( snk_bonus_r ) /************************************************************************/ +static ADDRESS_MAP_START( marvins_cpuA_map, ADDRESS_SPACE_PROGRAM, 8 ) + AM_RANGE(0x0000, 0x5fff) AM_ROM + AM_RANGE(0x6000, 0x6000) AM_WRITE(marvins_palette_bank_w) + AM_RANGE(0x8000, 0x8000) AM_READ_PORT("IN0") + AM_RANGE(0x8100, 0x8100) AM_READ_PORT("IN1") + AM_RANGE(0x8200, 0x8200) AM_READ_PORT("IN2") + AM_RANGE(0x8300, 0x8300) AM_WRITE(marvins_soundlatch_w) + AM_RANGE(0x8400, 0x8400) AM_READ_PORT("DSW1") + AM_RANGE(0x8500, 0x8500) AM_READ_PORT("DSW2") + AM_RANGE(0x8600, 0x8600) AM_WRITE(marvins_flipscreen_w) + AM_RANGE(0x8700, 0x8700) AM_READWRITE(snk_cpuB_nmi_trigger_r, snk_cpuA_nmi_ack_w) + AM_RANGE(0xc000, 0xcfff) AM_RAM AM_BASE(&spriteram) AM_SHARE(1) // + work ram + AM_RANGE(0xd000, 0xd7ff) AM_RAM_WRITE(marvins_fg_videoram_w) AM_SHARE(2) AM_BASE(&snk_fg_videoram) + AM_RANGE(0xd800, 0xdfff) AM_RAM AM_SHARE(3) + AM_RANGE(0xe000, 0xe7ff) AM_RAM_WRITE(marvins_bg_videoram_w) AM_SHARE(4) AM_BASE(&snk_bg_videoram) + AM_RANGE(0xe800, 0xefff) AM_RAM AM_SHARE(5) + AM_RANGE(0xf000, 0xf7ff) AM_RAM_WRITE(snk_tx_videoram_w) AM_SHARE(6) AM_BASE(&snk_tx_videoram) // + work RAM + AM_RANGE(0xf800, 0xf800) AM_WRITE(snk_sp16_scrolly_w) + AM_RANGE(0xf900, 0xf900) AM_WRITE(snk_sp16_scrollx_w) + AM_RANGE(0xfa00, 0xfa00) AM_WRITE(snk_fg_scrolly_w) + AM_RANGE(0xfb00, 0xfb00) AM_WRITE(snk_fg_scrollx_w) + AM_RANGE(0xfc00, 0xfc00) AM_WRITE(snk_bg_scrolly_w) + AM_RANGE(0xfd00, 0xfd00) AM_WRITE(snk_bg_scrollx_w) + AM_RANGE(0xfe00, 0xfe00) AM_WRITE(snk_sprite_split_point_w) + AM_RANGE(0xff00, 0xff00) AM_WRITE(marvins_scroll_msb_w) +ADDRESS_MAP_END + +static ADDRESS_MAP_START( marvins_cpuB_map, ADDRESS_SPACE_PROGRAM, 8 ) + AM_RANGE(0x0000, 0x5fff) AM_ROM + AM_RANGE(0x8700, 0x8700) AM_READWRITE(snk_cpuA_nmi_trigger_r, snk_cpuB_nmi_ack_w) + AM_RANGE(0xc000, 0xcfff) AM_RAM AM_SHARE(1) + AM_RANGE(0xd000, 0xd7ff) AM_RAM_WRITE(marvins_fg_videoram_w) AM_SHARE(2) + AM_RANGE(0xd800, 0xdfff) AM_RAM AM_SHARE(3) + AM_RANGE(0xe000, 0xe7ff) AM_RAM_WRITE(marvins_bg_videoram_w) AM_SHARE(4) + AM_RANGE(0xe800, 0xefff) AM_RAM AM_SHARE(5) + AM_RANGE(0xf000, 0xf7ff) AM_RAM_WRITE(snk_tx_videoram_w) AM_SHARE(6) + AM_RANGE(0xf800, 0xf800) AM_WRITE(snk_sp16_scrolly_w) + AM_RANGE(0xf900, 0xf900) AM_WRITE(snk_sp16_scrollx_w) + AM_RANGE(0xfa00, 0xfa00) AM_WRITE(snk_fg_scrolly_w) + AM_RANGE(0xfb00, 0xfb00) AM_WRITE(snk_fg_scrollx_w) + AM_RANGE(0xfc00, 0xfc00) AM_WRITE(snk_bg_scrolly_w) + AM_RANGE(0xfd00, 0xfd00) AM_WRITE(snk_bg_scrollx_w) + AM_RANGE(0xfe00, 0xfe00) AM_WRITE(snk_sprite_split_point_w) + AM_RANGE(0xff00, 0xff00) AM_WRITE(marvins_scroll_msb_w) +ADDRESS_MAP_END + + +// vangrd2 accesses video registers at xxF1 instead of xx00 +static ADDRESS_MAP_START( madcrash_cpuA_map, ADDRESS_SPACE_PROGRAM, 8 ) + AM_RANGE(0x0000, 0x7fff) AM_ROM + AM_RANGE(0x8000, 0x8000) AM_READ_PORT("IN0") + AM_RANGE(0x8100, 0x8100) AM_READ_PORT("IN1") + AM_RANGE(0x8200, 0x8200) AM_READ_PORT("IN2") + AM_RANGE(0x8300, 0x8300) AM_WRITE(marvins_soundlatch_w) + AM_RANGE(0x8400, 0x8400) AM_READ_PORT("DSW1") + AM_RANGE(0x8500, 0x8500) AM_READ_PORT("DSW2") + AM_RANGE(0x8600, 0x8600) AM_MIRROR(0xff) AM_WRITE(marvins_flipscreen_w) + AM_RANGE(0x8700, 0x8700) AM_READWRITE(snk_cpuB_nmi_trigger_r, snk_cpuA_nmi_ack_w) + AM_RANGE(0xc000, 0xc7ff) AM_RAM AM_BASE(&spriteram) AM_SHARE(1) // + work ram + AM_RANGE(0xc800, 0xc800) AM_MIRROR(0xff) AM_WRITE(marvins_palette_bank_w) + AM_RANGE(0xd000, 0xd7ff) AM_RAM_WRITE(marvins_bg_videoram_w) AM_SHARE(2) AM_BASE(&snk_bg_videoram) + AM_RANGE(0xd800, 0xdfff) AM_RAM AM_SHARE(3) + AM_RANGE(0xe000, 0xe7ff) AM_RAM_WRITE(marvins_fg_videoram_w) AM_SHARE(4) AM_BASE(&snk_fg_videoram) + AM_RANGE(0xe800, 0xefff) AM_RAM AM_SHARE(5) + AM_RANGE(0xf000, 0xf7ff) AM_RAM_WRITE(snk_tx_videoram_w) AM_SHARE(6) AM_BASE(&snk_tx_videoram) // + work RAM + AM_RANGE(0xf800, 0xf800) AM_MIRROR(0xff) AM_WRITE(snk_bg_scrolly_w) + AM_RANGE(0xf900, 0xf900) AM_MIRROR(0xff) AM_WRITE(snk_bg_scrollx_w) + AM_RANGE(0xfa00, 0xfa00) AM_MIRROR(0xff) AM_WRITE(snk_sprite_split_point_w) + AM_RANGE(0xfb00, 0xfb00) AM_MIRROR(0xff) AM_WRITE(marvins_scroll_msb_w) + AM_RANGE(0xfc00, 0xfc00) AM_MIRROR(0xff) AM_WRITE(snk_sp16_scrolly_w) + AM_RANGE(0xfd00, 0xfd00) AM_MIRROR(0xff) AM_WRITE(snk_sp16_scrollx_w) + AM_RANGE(0xfe00, 0xfe00) AM_MIRROR(0xff) AM_WRITE(snk_fg_scrolly_w) + AM_RANGE(0xff00, 0xff00) AM_MIRROR(0xff) AM_WRITE(snk_fg_scrollx_w) +ADDRESS_MAP_END + +static ADDRESS_MAP_START( madcrash_cpuB_map, ADDRESS_SPACE_PROGRAM, 8 ) + AM_RANGE(0x8700, 0x8700) AM_WRITE(snk_cpuB_nmi_ack_w) // vangrd2 + AM_RANGE(0x0000, 0x9fff) AM_ROM + AM_RANGE(0xa000, 0xa000) AM_WRITE(snk_cpuB_nmi_ack_w) // madcrash + AM_RANGE(0xc000, 0xc7ff) AM_RAM_WRITE(marvins_fg_videoram_w) AM_SHARE(4) + AM_RANGE(0xc800, 0xcfff) AM_RAM AM_SHARE(5) + AM_RANGE(0xd000, 0xd7ff) AM_RAM_WRITE(snk_tx_videoram_w) AM_SHARE(6) + AM_RANGE(0xd800, 0xd800) AM_WRITE(snk_bg_scrolly_w) + AM_RANGE(0xd900, 0xd900) AM_WRITE(snk_bg_scrollx_w) + AM_RANGE(0xda00, 0xda00) AM_WRITE(snk_sprite_split_point_w) + AM_RANGE(0xdb00, 0xdb00) AM_WRITE(marvins_scroll_msb_w) + AM_RANGE(0xdc00, 0xdc00) AM_WRITE(snk_sp16_scrolly_w) + AM_RANGE(0xdd00, 0xdd00) AM_WRITE(snk_sp16_scrollx_w) + AM_RANGE(0xde00, 0xde00) AM_WRITE(snk_fg_scrolly_w) + AM_RANGE(0xdf00, 0xdf00) AM_WRITE(snk_fg_scrollx_w) + AM_RANGE(0xe000, 0xe7ff) AM_RAM AM_SHARE(1) + AM_RANGE(0xf000, 0xf7ff) AM_RAM_WRITE(marvins_bg_videoram_w) AM_SHARE(2) + AM_RANGE(0xf800, 0xffff) AM_RAM AM_SHARE(3) +ADDRESS_MAP_END + + static ADDRESS_MAP_START( jcross_cpuA_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0x0000, 0x9fff) AM_ROM AM_RANGE(0xa000, 0xa000) AM_READ_PORT("IN0") @@ -774,9 +922,9 @@ static ADDRESS_MAP_START( jcross_cpuA_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0xd500, 0xd500) AM_WRITE(snk_sp16_scrollx_w) AM_RANGE(0xd600, 0xd600) AM_WRITE(snk_bg_scrolly_w) AM_RANGE(0xd700, 0xd700) AM_WRITE(snk_bg_scrollx_w) - AM_RANGE(0xd800, 0xdfff) AM_RAM AM_BASE(&spriteram) AM_SHARE(1) - AM_RANGE(0xe000, 0xefff) AM_RAM_WRITE(aso_bg_videoram_w) AM_SHARE(2) AM_BASE(&snk_bg_videoram) - AM_RANGE(0xf000, 0xf7ff) AM_RAM_WRITE(snk_fg_videoram_w) AM_SHARE(3) AM_BASE(&snk_fg_videoram) // + work RAM + AM_RANGE(0xd800, 0xdfff) AM_RAM AM_BASE(&spriteram) AM_SHARE(1) // + work ram + AM_RANGE(0xe000, 0xefff) AM_RAM_WRITE(marvins_bg_videoram_w) AM_SHARE(2) AM_BASE(&snk_bg_videoram) + AM_RANGE(0xf000, 0xf7ff) AM_RAM_WRITE(snk_tx_videoram_w) AM_SHARE(3) AM_BASE(&snk_tx_videoram) // + work RAM AM_RANGE(0xffff, 0xffff) AM_WRITENOP // simply a program patch to not write to two not existing video registers? ADDRESS_MAP_END @@ -784,8 +932,8 @@ static ADDRESS_MAP_START( jcross_cpuB_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0x0000, 0x7fff) AM_ROM AM_RANGE(0xa700, 0xa700) AM_READWRITE(snk_cpuA_nmi_trigger_r, snk_cpuB_nmi_ack_w) AM_RANGE(0xc000, 0xc7ff) AM_RAM AM_SHARE(1) - AM_RANGE(0xc800, 0xd7ff) AM_RAM_WRITE(aso_bg_videoram_w) AM_SHARE(2) - AM_RANGE(0xe000, 0xe7ff) AM_RAM_WRITE(snk_fg_videoram_w) AM_SHARE(3) + AM_RANGE(0xc800, 0xd7ff) AM_RAM_WRITE(marvins_bg_videoram_w) AM_SHARE(2) + AM_RANGE(0xe000, 0xe7ff) AM_RAM_WRITE(snk_tx_videoram_w) AM_SHARE(3) ADDRESS_MAP_END @@ -805,10 +953,10 @@ static ADDRESS_MAP_START( sgladiat_cpuA_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0xd500, 0xd500) AM_WRITE(snk_sp16_scrollx_w) AM_RANGE(0xd600, 0xd600) AM_WRITE(snk_bg_scrolly_w) AM_RANGE(0xd700, 0xd700) AM_WRITE(snk_bg_scrollx_w) - AM_RANGE(0xd800, 0xdfff) AM_RAM AM_BASE(&spriteram) AM_SHARE(1) - AM_RANGE(0xe000, 0xe7ff) AM_RAM_WRITE(aso_bg_videoram_w) AM_SHARE(2) AM_BASE(&snk_bg_videoram) + AM_RANGE(0xd800, 0xdfff) AM_RAM AM_BASE(&spriteram) AM_SHARE(1) // + work ram + AM_RANGE(0xe000, 0xe7ff) AM_RAM_WRITE(marvins_bg_videoram_w) AM_SHARE(2) AM_BASE(&snk_bg_videoram) AM_RANGE(0xe800, 0xefff) AM_RAM - AM_RANGE(0xf000, 0xf7ff) AM_RAM_WRITE(snk_fg_videoram_w) AM_SHARE(3) AM_BASE(&snk_fg_videoram) // + work RAM + AM_RANGE(0xf000, 0xf7ff) AM_RAM_WRITE(snk_tx_videoram_w) AM_SHARE(3) AM_BASE(&snk_tx_videoram) // + work RAM ADDRESS_MAP_END static ADDRESS_MAP_START( sgladiat_cpuB_map, ADDRESS_SPACE_PROGRAM, 8 ) @@ -816,14 +964,14 @@ static ADDRESS_MAP_START( sgladiat_cpuB_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0xa000, 0xa000) AM_READWRITE(snk_cpuA_nmi_trigger_r, snk_cpuB_nmi_ack_w) AM_RANGE(0xa600, 0xa600) AM_WRITE(sgladiat_flipscreen_w) // flip screen, bg palette bank AM_RANGE(0xc000, 0xc7ff) AM_RAM AM_SHARE(1) - AM_RANGE(0xc800, 0xcfff) AM_RAM_WRITE(aso_bg_videoram_w) AM_SHARE(2) + AM_RANGE(0xc800, 0xcfff) AM_RAM_WRITE(marvins_bg_videoram_w) AM_SHARE(2) AM_RANGE(0xda00, 0xda00) AM_WRITENOP // unknown AM_RANGE(0xdb00, 0xdb00) AM_WRITE(sgladiat_scroll_msb_w) AM_RANGE(0xdc00, 0xdc00) AM_WRITE(snk_sp16_scrolly_w) AM_RANGE(0xdd00, 0xdd00) AM_WRITE(snk_sp16_scrollx_w) AM_RANGE(0xde00, 0xde00) AM_WRITE(snk_bg_scrolly_w) AM_RANGE(0xdf00, 0xdf00) AM_WRITE(snk_bg_scrollx_w) - AM_RANGE(0xe000, 0xe7ff) AM_RAM_WRITE(snk_fg_videoram_w) AM_SHARE(3) + AM_RANGE(0xe000, 0xe7ff) AM_RAM_WRITE(snk_tx_videoram_w) AM_SHARE(3) ADDRESS_MAP_END @@ -842,17 +990,17 @@ static ADDRESS_MAP_START( hal21_cpuA_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0xd500, 0xd500) AM_WRITE(snk_sp16_scrollx_w) AM_RANGE(0xd600, 0xd600) AM_WRITE(snk_bg_scrolly_w) AM_RANGE(0xd700, 0xd700) AM_WRITE(snk_bg_scrollx_w) - AM_RANGE(0xe000, 0xe7ff) AM_RAM AM_BASE(&spriteram) AM_SHARE(1) - AM_RANGE(0xe800, 0xf7ff) AM_RAM_WRITE(aso_bg_videoram_w) AM_SHARE(2) AM_BASE(&snk_bg_videoram) - AM_RANGE(0xf800, 0xffff) AM_RAM_WRITE(snk_fg_videoram_w) AM_SHARE(3) AM_BASE(&snk_fg_videoram) // + work RAM + AM_RANGE(0xe000, 0xe7ff) AM_RAM AM_BASE(&spriteram) AM_SHARE(1) // + work ram + AM_RANGE(0xe800, 0xf7ff) AM_RAM_WRITE(marvins_bg_videoram_w) AM_SHARE(2) AM_BASE(&snk_bg_videoram) + AM_RANGE(0xf800, 0xffff) AM_RAM_WRITE(snk_tx_videoram_w) AM_SHARE(3) AM_BASE(&snk_tx_videoram) // + work RAM ADDRESS_MAP_END static ADDRESS_MAP_START( hal21_cpuB_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0x0000, 0x9fff) AM_ROM AM_RANGE(0xa000, 0xa000) AM_WRITE(snk_cpuB_nmi_ack_w) AM_RANGE(0xc000, 0xc7ff) AM_RAM AM_SHARE(1) - AM_RANGE(0xd000, 0xdfff) AM_RAM_WRITE(aso_bg_videoram_w) AM_SHARE(2) - AM_RANGE(0xe800, 0xefff) AM_RAM_WRITE(snk_fg_videoram_w) AM_SHARE(3) + AM_RANGE(0xd000, 0xdfff) AM_RAM_WRITE(marvins_bg_videoram_w) AM_SHARE(2) + AM_RANGE(0xe800, 0xefff) AM_RAM_WRITE(snk_tx_videoram_w) AM_SHARE(3) ADDRESS_MAP_END @@ -874,8 +1022,8 @@ static ADDRESS_MAP_START( aso_cpuA_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0xcf00, 0xcf00) AM_WRITE(aso_bg_bank_w) // tile and palette bank AM_RANGE(0xd800, 0xdfff) AM_RAM AM_SHARE(1) AM_RANGE(0xe000, 0xe7ff) AM_RAM AM_SHARE(2) AM_BASE(&spriteram) // + work ram - AM_RANGE(0xe800, 0xf7ff) AM_RAM_WRITE(aso_bg_videoram_w) AM_SHARE(3) AM_BASE(&snk_bg_videoram) - AM_RANGE(0xf800, 0xffff) AM_RAM_WRITE(snk_fg_videoram_w) AM_SHARE(4) AM_BASE(&snk_fg_videoram) // + work RAM + AM_RANGE(0xe800, 0xf7ff) AM_RAM_WRITE(marvins_bg_videoram_w) AM_SHARE(3) AM_BASE(&snk_bg_videoram) + AM_RANGE(0xf800, 0xffff) AM_RAM_WRITE(snk_tx_videoram_w) AM_SHARE(4) AM_BASE(&snk_tx_videoram) // + work RAM ADDRESS_MAP_END static ADDRESS_MAP_START( aso_cpuB_map, ADDRESS_SPACE_PROGRAM, 8 ) @@ -883,8 +1031,8 @@ static ADDRESS_MAP_START( aso_cpuB_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0xc000, 0xc000) AM_READWRITE(snk_cpuA_nmi_trigger_r, snk_cpuB_nmi_ack_w) AM_RANGE(0xc800, 0xcfff) AM_RAM AM_SHARE(1) AM_RANGE(0xd000, 0xd7ff) AM_RAM AM_SHARE(2) - AM_RANGE(0xd800, 0xe7ff) AM_RAM_WRITE(aso_bg_videoram_w) AM_SHARE(3) - AM_RANGE(0xf800, 0xffff) AM_RAM_WRITE(snk_fg_videoram_w) AM_SHARE(4) + AM_RANGE(0xd800, 0xe7ff) AM_RAM_WRITE(marvins_bg_videoram_w) AM_SHARE(3) + AM_RANGE(0xf800, 0xffff) AM_RAM_WRITE(snk_tx_videoram_w) AM_SHARE(4) ADDRESS_MAP_END @@ -908,7 +1056,7 @@ static ADDRESS_MAP_START( tnk3_cpuA_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0xcf00, 0xcf00) AM_WRITENOP // fitegolf/countryc only. Either 0 or 1. Video related? AM_RANGE(0xd000, 0xd7ff) AM_RAM AM_SHARE(1) AM_BASE(&spriteram) // + work ram AM_RANGE(0xd800, 0xf7ff) AM_RAM_WRITE(snk_bg_videoram_w) AM_SHARE(2) AM_BASE(&snk_bg_videoram) - AM_RANGE(0xf800, 0xffff) AM_RAM_WRITE(snk_fg_videoram_w) AM_SHARE(3) AM_BASE(&snk_fg_videoram) // + work RAM + AM_RANGE(0xf800, 0xffff) AM_RAM_WRITE(snk_tx_videoram_w) AM_SHARE(3) AM_BASE(&snk_tx_videoram) // + work RAM ADDRESS_MAP_END static ADDRESS_MAP_START( tnk3_cpuB_map, ADDRESS_SPACE_PROGRAM, 8 ) @@ -918,7 +1066,7 @@ static ADDRESS_MAP_START( tnk3_cpuB_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0xc800, 0xcfff) AM_RAM AM_SHARE(1) AM_RANGE(0xd000, 0xefff) AM_RAM_WRITE(snk_bg_videoram_w) AM_SHARE(2) AM_RANGE(0xf000, 0xf7ff) AM_RAM - AM_RANGE(0xf800, 0xffff) AM_RAM_WRITE(snk_fg_videoram_w) AM_SHARE(3) + AM_RANGE(0xf800, 0xffff) AM_RAM_WRITE(snk_tx_videoram_w) AM_SHARE(3) ADDRESS_MAP_END @@ -954,7 +1102,7 @@ static ADDRESS_MAP_START( ikari_cpuA_map, ADDRESS_SPACE_PROGRAM, 8 ) // note the mirror. ikari and victroad use d800, ikarijp uses d000 AM_RANGE(0xd000, 0xd7ff) AM_RAM_WRITE(snk_bg_videoram_w) AM_MIRROR(0x0800) AM_SHARE(2) AM_BASE(&snk_bg_videoram) AM_RANGE(0xe000, 0xf7ff) AM_RAM AM_SHARE(3) AM_BASE(&spriteram) // + work ram - AM_RANGE(0xf800, 0xffff) AM_RAM_WRITE(snk_fg_videoram_w) AM_SHARE(4) AM_BASE(&snk_fg_videoram) // + work RAM + AM_RANGE(0xf800, 0xffff) AM_RAM_WRITE(snk_tx_videoram_w) AM_SHARE(4) AM_BASE(&snk_tx_videoram) // + work RAM ADDRESS_MAP_END static ADDRESS_MAP_START( ikari_cpuB_map, ADDRESS_SPACE_PROGRAM, 8 ) @@ -973,7 +1121,7 @@ static ADDRESS_MAP_START( ikari_cpuB_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0xcee0, 0xcee0) AM_READ(hardflags7_r) AM_RANGE(0xd000, 0xd7ff) AM_RAM_WRITE(snk_bg_videoram_w) AM_MIRROR(0x0800) AM_SHARE(2) AM_RANGE(0xe000, 0xf7ff) AM_RAM AM_SHARE(3) - AM_RANGE(0xf800, 0xffff) AM_RAM_WRITE(snk_fg_videoram_w) AM_SHARE(4) + AM_RANGE(0xf800, 0xffff) AM_RAM_WRITE(snk_tx_videoram_w) AM_SHARE(4) ADDRESS_MAP_END @@ -990,7 +1138,7 @@ static ADDRESS_MAP_START( bermudat_cpuA_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0xc800, 0xc800) AM_WRITE(snk_bg_scrolly_w) AM_RANGE(0xc840, 0xc840) AM_WRITE(snk_bg_scrollx_w) AM_RANGE(0xc880, 0xc880) AM_WRITE(gwara_videoattrs_w) // flip screen, scroll msb - AM_RANGE(0xc8c0, 0xc8c0) AM_WRITE(gwar_fg_bank_w) // char and palette bank + AM_RANGE(0xc8c0, 0xc8c0) AM_WRITE(gwar_tx_bank_w) // char and palette bank AM_RANGE(0xc900, 0xc900) AM_WRITE(snk_sp16_scrolly_w) AM_RANGE(0xc940, 0xc940) AM_WRITE(snk_sp16_scrollx_w) AM_RANGE(0xc980, 0xc980) AM_WRITE(snk_sp32_scrolly_w) @@ -999,7 +1147,7 @@ static ADDRESS_MAP_START( bermudat_cpuA_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0xca00, 0xca00) AM_WRITE(turbocheck16_1_w) AM_RANGE(0xca40, 0xca40) AM_WRITE(turbocheck16_2_w) AM_RANGE(0xca80, 0xca80) AM_WRITE(gwara_sp_scroll_msb_w) - AM_RANGE(0xcac0, 0xcac0) AM_WRITE(gwar_sprite_split_point_w) + AM_RANGE(0xcac0, 0xcac0) AM_WRITE(snk_sprite_split_point_w) AM_RANGE(0xcb00, 0xcb00) AM_READ(turbocheck16_1_r) AM_RANGE(0xcb10, 0xcb10) AM_READ(turbocheck16_2_r) AM_RANGE(0xcb20, 0xcb20) AM_READ(turbocheck16_3_r) @@ -1018,7 +1166,7 @@ static ADDRESS_MAP_START( bermudat_cpuA_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0xd000, 0xd7ff) AM_RAM_WRITE(snk_bg_videoram_w) AM_SHARE(1) AM_BASE(&snk_bg_videoram) AM_RANGE(0xd800, 0xdfff) AM_RAM AM_SHARE(2) AM_RANGE(0xe000, 0xf7ff) AM_RAM AM_SHARE(3) AM_BASE(&spriteram) // + work ram - AM_RANGE(0xf800, 0xffff) AM_RAM_WRITE(snk_fg_videoram_w) AM_SHARE(4) AM_BASE(&snk_fg_videoram) // + work RAM + AM_RANGE(0xf800, 0xffff) AM_RAM_WRITE(snk_tx_videoram_w) AM_SHARE(4) AM_BASE(&snk_tx_videoram) // + work RAM ADDRESS_MAP_END static ADDRESS_MAP_START( bermudat_cpuB_map, ADDRESS_SPACE_PROGRAM, 8 ) @@ -1027,7 +1175,7 @@ static ADDRESS_MAP_START( bermudat_cpuB_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0xc800, 0xc800) AM_WRITE(snk_bg_scrolly_w) AM_RANGE(0xc840, 0xc840) AM_WRITE(snk_bg_scrollx_w) AM_RANGE(0xc880, 0xc880) AM_WRITE(gwara_videoattrs_w) // flip screen, scroll msb - AM_RANGE(0xc8c0, 0xc8c0) AM_WRITE(gwar_fg_bank_w) // char and palette bank + AM_RANGE(0xc8c0, 0xc8c0) AM_WRITE(gwar_tx_bank_w) // char and palette bank AM_RANGE(0xc900, 0xc900) AM_WRITE(snk_sp16_scrolly_w) AM_RANGE(0xc940, 0xc940) AM_WRITE(snk_sp16_scrollx_w) AM_RANGE(0xc980, 0xc980) AM_WRITE(snk_sp32_scrolly_w) @@ -1036,7 +1184,7 @@ static ADDRESS_MAP_START( bermudat_cpuB_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0xd000, 0xd7ff) AM_RAM_WRITE(snk_bg_videoram_w) AM_SHARE(1) AM_RANGE(0xd800, 0xdfff) AM_RAM AM_SHARE(2) AM_RANGE(0xe000, 0xf7ff) AM_RAM AM_SHARE(3) - AM_RANGE(0xf800, 0xffff) AM_RAM_WRITE(snk_fg_videoram_w) AM_SHARE(4) + AM_RANGE(0xf800, 0xffff) AM_RAM_WRITE(snk_tx_videoram_w) AM_SHARE(4) ADDRESS_MAP_END @@ -1053,28 +1201,28 @@ static ADDRESS_MAP_START( gwar_cpuA_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0xc800, 0xc800) AM_WRITE(snk_bg_scrolly_w) AM_RANGE(0xc840, 0xc840) AM_WRITE(snk_bg_scrollx_w) AM_RANGE(0xc880, 0xc880) AM_WRITE(gwar_videoattrs_w) // flip screen, scroll msb - AM_RANGE(0xc8c0, 0xc8c0) AM_WRITE(gwar_fg_bank_w) // char and palette bank + AM_RANGE(0xc8c0, 0xc8c0) AM_WRITE(gwar_tx_bank_w) // char and palette bank AM_RANGE(0xc900, 0xc900) AM_WRITE(snk_sp16_scrolly_w) AM_RANGE(0xc940, 0xc940) AM_WRITE(snk_sp16_scrollx_w) AM_RANGE(0xc980, 0xc980) AM_WRITE(snk_sp32_scrolly_w) AM_RANGE(0xc9c0, 0xc9c0) AM_WRITE(snk_sp32_scrollx_w) AM_RANGE(0xca00, 0xca00) AM_WRITENOP // always 0? AM_RANGE(0xca40, 0xca40) AM_WRITENOP // always 0? - AM_RANGE(0xcac0, 0xcac0) AM_WRITE(gwar_sprite_split_point_w) + AM_RANGE(0xcac0, 0xcac0) AM_WRITE(snk_sprite_split_point_w) AM_RANGE(0xd000, 0xd7ff) AM_RAM_WRITE(snk_bg_videoram_w) AM_SHARE(1) AM_BASE(&snk_bg_videoram) AM_RANGE(0xd800, 0xdfff) AM_RAM AM_SHARE(2) AM_RANGE(0xe000, 0xf7ff) AM_RAM AM_SHARE(3) AM_BASE(&spriteram) // + work ram - AM_RANGE(0xf800, 0xffff) AM_RAM_WRITE(snk_fg_videoram_w) AM_SHARE(4) AM_BASE(&snk_fg_videoram) // + work RAM + AM_RANGE(0xf800, 0xffff) AM_RAM_WRITE(snk_tx_videoram_w) AM_SHARE(4) AM_BASE(&snk_tx_videoram) // + work RAM ADDRESS_MAP_END static ADDRESS_MAP_START( gwar_cpuB_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0x0000, 0xbfff) AM_ROM AM_RANGE(0xc000, 0xc000) AM_READWRITE(snk_cpuA_nmi_trigger_r, snk_cpuB_nmi_ack_w) - AM_RANGE(0xc8c0, 0xc8c0) AM_WRITE(gwar_fg_bank_w) // char and palette bank + AM_RANGE(0xc8c0, 0xc8c0) AM_WRITE(gwar_tx_bank_w) // char and palette bank AM_RANGE(0xd000, 0xd7ff) AM_RAM_WRITE(snk_bg_videoram_w) AM_SHARE(1) AM_RANGE(0xd800, 0xdfff) AM_RAM AM_SHARE(2) AM_RANGE(0xe000, 0xf7ff) AM_RAM AM_SHARE(3) - AM_RANGE(0xf800, 0xffff) AM_RAM_WRITE(snk_fg_videoram_w) AM_SHARE(4) + AM_RANGE(0xf800, 0xffff) AM_RAM_WRITE(snk_tx_videoram_w) AM_SHARE(4) ADDRESS_MAP_END @@ -1088,30 +1236,30 @@ static ADDRESS_MAP_START( gwara_cpuA_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0xc500, 0xc500) AM_READ_PORT("DSW1") AM_RANGE(0xc600, 0xc600) AM_READ_PORT("DSW2") AM_RANGE(0xc700, 0xc700) AM_READWRITE(snk_cpuB_nmi_trigger_r, snk_cpuA_nmi_ack_w) - AM_RANGE(0xc800, 0xcfff) AM_RAM_WRITE(snk_fg_videoram_w) AM_SHARE(1) AM_BASE(&snk_fg_videoram) // + work RAM + AM_RANGE(0xc800, 0xcfff) AM_RAM_WRITE(snk_tx_videoram_w) AM_SHARE(1) AM_BASE(&snk_tx_videoram) // + work RAM AM_RANGE(0xd000, 0xd7ff) AM_RAM_WRITE(snk_bg_videoram_w) AM_SHARE(2) AM_BASE(&snk_bg_videoram) AM_RANGE(0xd800, 0xdfff) AM_RAM AM_SHARE(3) AM_RANGE(0xe000, 0xf7ff) AM_RAM AM_SHARE(4) AM_BASE(&spriteram) // + work ram AM_RANGE(0xf800, 0xf800) AM_WRITE(snk_bg_scrolly_w) AM_RANGE(0xf840, 0xf840) AM_WRITE(snk_bg_scrollx_w) AM_RANGE(0xf880, 0xf880) AM_WRITE(gwara_videoattrs_w) // flip screen, scroll msb - AM_RANGE(0xf8c0, 0xf8c0) AM_WRITE(gwar_fg_bank_w) // char and palette bank + AM_RANGE(0xf8c0, 0xf8c0) AM_WRITE(gwar_tx_bank_w) // char and palette bank AM_RANGE(0xf900, 0xf900) AM_WRITE(snk_sp16_scrolly_w) AM_RANGE(0xf940, 0xf940) AM_WRITE(snk_sp16_scrollx_w) AM_RANGE(0xf980, 0xf980) AM_WRITE(snk_sp32_scrolly_w) AM_RANGE(0xf9c0, 0xf9c0) AM_WRITE(snk_sp32_scrollx_w) AM_RANGE(0xfa80, 0xfa80) AM_WRITE(gwara_sp_scroll_msb_w) - AM_RANGE(0xfac0, 0xfac0) AM_WRITE(gwar_sprite_split_point_w) + AM_RANGE(0xfac0, 0xfac0) AM_WRITE(snk_sprite_split_point_w) ADDRESS_MAP_END static ADDRESS_MAP_START( gwara_cpuB_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0x0000, 0xbfff) AM_ROM AM_RANGE(0xc000, 0xc000) AM_READWRITE(snk_cpuA_nmi_trigger_r, snk_cpuB_nmi_ack_w) - AM_RANGE(0xc800, 0xcfff) AM_RAM_WRITE(snk_fg_videoram_w) AM_SHARE(1) + AM_RANGE(0xc800, 0xcfff) AM_RAM_WRITE(snk_tx_videoram_w) AM_SHARE(1) AM_RANGE(0xd000, 0xd7ff) AM_RAM_WRITE(snk_bg_videoram_w) AM_SHARE(2) AM_RANGE(0xd800, 0xdfff) AM_RAM AM_SHARE(3) AM_RANGE(0xe000, 0xf7ff) AM_RAM AM_SHARE(4) AM_BASE(&spriteram) // + work ram - AM_RANGE(0xf8c0, 0xf8c0) AM_WRITE(gwar_fg_bank_w) // char and palette bank + AM_RANGE(0xf8c0, 0xf8c0) AM_WRITE(gwar_tx_bank_w) // char and palette bank ADDRESS_MAP_END @@ -1135,29 +1283,47 @@ static ADDRESS_MAP_START( tdfever_cpuA_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0xc800, 0xc800) AM_WRITE(snk_bg_scrolly_w) AM_RANGE(0xc840, 0xc840) AM_WRITE(snk_bg_scrollx_w) AM_RANGE(0xc880, 0xc880) AM_WRITE(gwara_videoattrs_w) // flip screen, scroll msb - AM_RANGE(0xc8c0, 0xc8c0) AM_WRITE(gwar_fg_bank_w) // char and palette bank + AM_RANGE(0xc8c0, 0xc8c0) AM_WRITE(gwar_tx_bank_w) // char and palette bank AM_RANGE(0xc900, 0xc900) AM_WRITE(tdfever_sp_scroll_msb_w) AM_RANGE(0xc980, 0xc980) AM_WRITE(snk_sp32_scrolly_w) AM_RANGE(0xc9c0, 0xc9c0) AM_WRITE(snk_sp32_scrollx_w) AM_RANGE(0xd000, 0xd7ff) AM_RAM_WRITE(snk_bg_videoram_w) AM_SHARE(1) AM_BASE(&snk_bg_videoram) AM_RANGE(0xd800, 0xdfff) AM_RAM AM_SHARE(2) AM_RANGE(0xe000, 0xf7ff) AM_RAM_WRITE(tdfever_spriteram_w) AM_SHARE(3) AM_BASE(&spriteram) // + work ram - AM_RANGE(0xf800, 0xffff) AM_RAM_WRITE(snk_fg_videoram_w) AM_SHARE(4) AM_BASE(&snk_fg_videoram) // + work RAM + AM_RANGE(0xf800, 0xffff) AM_RAM_WRITE(snk_tx_videoram_w) AM_SHARE(4) AM_BASE(&snk_tx_videoram) // + work RAM ADDRESS_MAP_END static ADDRESS_MAP_START( tdfever_cpuB_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0x0000, 0xbfff) AM_ROM AM_RANGE(0xc000, 0xc000) AM_READWRITE(snk_cpuA_nmi_trigger_r, snk_cpuB_nmi_ack_w) // tdfever, tdfever2 AM_RANGE(0xc700, 0xc700) AM_READWRITE(snk_cpuA_nmi_trigger_r, snk_cpuB_nmi_ack_w) // fsoccer - AM_RANGE(0xc8c0, 0xc8c0) AM_WRITE(gwar_fg_bank_w) // char and palette bank + AM_RANGE(0xc8c0, 0xc8c0) AM_WRITE(gwar_tx_bank_w) // char and palette bank AM_RANGE(0xd000, 0xd7ff) AM_RAM_WRITE(snk_bg_videoram_w) AM_SHARE(1) AM_RANGE(0xd800, 0xdfff) AM_RAM AM_SHARE(2) AM_RANGE(0xe000, 0xf7ff) AM_RAM_WRITE(tdfever_spriteram_w) AM_SHARE(3) - AM_RANGE(0xf800, 0xffff) AM_RAM_WRITE(snk_fg_videoram_w) AM_SHARE(4) + AM_RANGE(0xf800, 0xffff) AM_RAM_WRITE(snk_tx_videoram_w) AM_SHARE(4) ADDRESS_MAP_END /***********************************************************************/ +static ADDRESS_MAP_START( marvins_sound_map, ADDRESS_SPACE_PROGRAM, 8 ) + AM_RANGE(0x0000, 0x3fff) AM_ROM + AM_RANGE(0x4000, 0x4000) AM_READ(marvins_soundlatch_r) + AM_RANGE(0x8000, 0x8000) AM_WRITE(ay8910_control_port_0_w) + AM_RANGE(0x8001, 0x8001) AM_WRITE(ay8910_write_port_0_w) + AM_RANGE(0x8002, 0x8007) AM_WRITE(snkwave_w) + AM_RANGE(0x8008, 0x8008) AM_WRITE(ay8910_control_port_1_w) + AM_RANGE(0x8009, 0x8009) AM_WRITE(ay8910_write_port_1_w) + AM_RANGE(0xa000, 0xa000) AM_READ(marvins_sound_nmi_ack_r) + AM_RANGE(0xe000, 0xe7ff) AM_RAM +ADDRESS_MAP_END + +static ADDRESS_MAP_START( marvins_sound_portmap, ADDRESS_SPACE_IO, 8 ) + ADDRESS_MAP_GLOBAL_MASK(0xff) + AM_RANGE(0x00, 0x00) AM_READNOP // read on startup, then the Z80 automatically pulls down the IORQ pin to ack irq +ADDRESS_MAP_END + + static ADDRESS_MAP_START( jcross_sound_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0x0000, 0x3fff) AM_ROM AM_RANGE(0x8000, 0x87ff) AM_RAM @@ -1165,7 +1331,7 @@ static ADDRESS_MAP_START( jcross_sound_map, ADDRESS_SPACE_PROGRAM, 8 ) AM_RANGE(0xc000, 0xc000) AM_READ(sgladiat_sound_nmi_ack_r) AM_RANGE(0xe000, 0xe000) AM_WRITE(ay8910_control_port_0_w) AM_RANGE(0xe001, 0xe001) AM_WRITE(ay8910_write_port_0_w) - AM_RANGE(0xe002, 0xe003) AM_WRITENOP // ? always FFFF + AM_RANGE(0xe002, 0xe003) AM_WRITENOP // ? always FFFF, snkwave leftover? AM_RANGE(0xe004, 0xe004) AM_WRITE(ay8910_control_port_1_w) AM_RANGE(0xe005, 0xe005) AM_WRITE(ay8910_write_port_1_w) ADDRESS_MAP_END @@ -1190,7 +1356,7 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( hal21_sound_portmap, ADDRESS_SPACE_IO, 8 ) ADDRESS_MAP_GLOBAL_MASK(0xff) - AM_RANGE(0x00, 0x00) AM_READNOP // ? only read on startup + AM_RANGE(0x00, 0x00) AM_READNOP // read on startup, then the Z80 automatically pulls down the IORQ pin to ack irq ADDRESS_MAP_END @@ -1270,6 +1436,251 @@ ADDRESS_MAP_END /*********************************************************************/ +static INPUT_PORTS_START( marvins ) + PORT_START("IN0") + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 ) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_COIN2 ) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SERVICE1 ) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START2 ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM(marvins_sound_busy, NULL) /* sound CPU status */ + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) // service switch according to schematics, see code at 0x0453. Goes to garbage. + + PORT_START("IN1") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START("IN2") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_COCKTAIL + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_COCKTAIL + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_COCKTAIL + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_COCKTAIL + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START("DSW1") + PORT_DIPNAME( 0x03, 0x02, DEF_STR( Lives ) ) PORT_DIPLOCATION("DSW1:1,2") + PORT_DIPSETTING( 0x00, "1" ) + PORT_DIPSETTING( 0x01, "2" ) + PORT_DIPSETTING( 0x02, "3" ) + PORT_DIPSETTING( 0x03, "5" ) + PORT_DIPNAME(0x04, 0x04, "Infinite Lives (Cheat)") PORT_DIPLOCATION("DSW1:3") + PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x38, 0x00, DEF_STR( Coinage ) ) PORT_DIPLOCATION("DSW1:4,5,6") + PORT_DIPSETTING( 0x38, DEF_STR( 5C_1C ) ) + PORT_DIPSETTING( 0x30, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x28, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x08, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x10, DEF_STR( 1C_3C ) ) + PORT_DIPSETTING( 0x18, DEF_STR( 1C_5C ) ) + PORT_DIPSETTING( 0x20, DEF_STR( 1C_6C ) ) + PORT_DIPNAME( 0x40, 0x40, DEF_STR( Free_Play ) ) PORT_DIPLOCATION("DSW1:7") + PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x80, 0x80, "Freeze" ) PORT_DIPLOCATION("DSW1:8") + PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + + PORT_START("DSW2") + PORT_DIPNAME( 0x07, 0x00, "1st Bonus Life" ) PORT_DIPLOCATION("DSW2:1,2,3") + PORT_DIPSETTING( 0x00, "10000" ) + PORT_DIPSETTING( 0x01, "20000" ) + PORT_DIPSETTING( 0x02, "30000" ) + PORT_DIPSETTING( 0x03, "40000" ) + PORT_DIPSETTING( 0x04, "50000" ) + PORT_DIPSETTING( 0x05, "60000" ) + PORT_DIPSETTING( 0x06, "70000" ) + PORT_DIPSETTING( 0x07, "80000" ) + PORT_DIPNAME( 0x18, 0x08, "2nd Bonus Life" ) PORT_DIPLOCATION("DSW2:4,5") + PORT_DIPSETTING( 0x08, "1st bonus*2" ) + PORT_DIPSETTING( 0x10, "1st bonus*3" ) + PORT_DIPSETTING( 0x18, "1st bonus*4" ) + PORT_DIPSETTING( 0x00, DEF_STR( None ) ) + PORT_DIPNAME( 0x20, 0x20, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("DSW2:6") + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x20, DEF_STR( On ) ) + PORT_DIPNAME( 0x40, 0x00, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("DSW2:7") + PORT_DIPSETTING( 0x00, DEF_STR( Upright ) ) + PORT_DIPSETTING( 0x40, DEF_STR( Cocktail ) ) + PORT_DIPNAME( 0x80, 0x80, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("DSW2:8") + PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) +INPUT_PORTS_END + + +static INPUT_PORTS_START( vangrd2 ) + PORT_START("IN0") + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 ) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNKNOWN ) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNKNOWN ) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START2 ) + PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM(marvins_sound_busy, NULL) /* sound CPU status */ + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START("IN1") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON2 ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START("IN2") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_COCKTAIL + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_COCKTAIL + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_COCKTAIL + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_COCKTAIL + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START("DSW1") + PORT_DIPNAME( 0x07, 0x07, DEF_STR( Coinage ) ) PORT_DIPLOCATION("DSW1:1,2,3") + PORT_DIPSETTING( 0x00, DEF_STR( 6C_1C ) ) + PORT_DIPSETTING( 0x01, DEF_STR( 5C_1C ) ) + PORT_DIPSETTING( 0x02, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x03, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x07, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x06, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x05, DEF_STR( 1C_3C ) ) + PORT_DIPSETTING( 0x04, DEF_STR( 1C_5C ) ) + PORT_DIPNAME( 0x38, 0x38, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("DSW1:4,5,6") + PORT_DIPSETTING( 0x38, "30000" ) + PORT_DIPSETTING( 0x30, "40000" ) + PORT_DIPSETTING( 0x28, "50000" ) + PORT_DIPSETTING( 0x20, "60000" ) + PORT_DIPSETTING( 0x18, "70000" ) + PORT_DIPSETTING( 0x10, "80000" ) + PORT_DIPSETTING( 0x08, "90000" ) + PORT_DIPSETTING( 0x00, "100000" ) + PORT_DIPNAME( 0xc0, 0x80, DEF_STR( Lives ) ) PORT_DIPLOCATION("DSW1:7,8") + PORT_DIPSETTING( 0x00, "1" ) + PORT_DIPSETTING( 0x40, "2" ) + PORT_DIPSETTING( 0x80, "3" ) + PORT_DIPSETTING( 0xc0, "5" ) + + PORT_START("DSW2") + PORT_DIPNAME( 0x01, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("DSW2:1") + PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x02, 0x02, "Freeze" ) PORT_DIPLOCATION("DSW2:2") + PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x04, 0x04, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("DSW2:3") + PORT_DIPSETTING( 0x04, DEF_STR( Upright ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Cocktail ) ) + PORT_DIPNAME( 0x08, 0x08, DEF_STR( Language ) ) PORT_DIPLOCATION("DSW2:4") + PORT_DIPSETTING( 0x08, DEF_STR( English ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Japanese ) ) + PORT_DIPNAME( 0x10, 0x00, "Bonus Life Occurence" ) PORT_DIPLOCATION("DSW2:5") + PORT_DIPSETTING( 0x00, "Every bonus" ) + PORT_DIPSETTING( 0x10, "Bonus only" ) + PORT_DIPNAME( 0x20, 0x20, "Infinite Lives (Cheat)") PORT_DIPLOCATION("DSW2:6") + PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x40, 0x40, DEF_STR( Free_Play ) ) PORT_DIPLOCATION("DSW2:7") + PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x80, 0x80, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("DSW2:8") + PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) +INPUT_PORTS_END + + +static INPUT_PORTS_START( madcrash ) + PORT_START("IN0") + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 ) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_COIN2 ) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_COIN3 ) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START2 ) + PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM(marvins_sound_busy, NULL) /* sound CPU status */ + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_SERVICE ) + + PORT_START("IN1") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON2 ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START("IN2") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_COCKTAIL + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_COCKTAIL + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_COCKTAIL + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_COCKTAIL + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START("DSW1") + PORT_DIPUNUSED_DIPLOC(0x01, IP_ACTIVE_LOW, "DSW1:1") /* Listed as Unused */ + PORT_DIPNAME( 0x02, 0x00, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("DSW1:2") + PORT_DIPSETTING( 0x00, DEF_STR( Upright ) ) + PORT_DIPSETTING( 0x02, DEF_STR( Cocktail ) ) + PORT_DIPNAME( 0x04, 0x04, DEF_STR( Lives ) ) PORT_DIPLOCATION("DSW1:3") + PORT_DIPSETTING( 0x04, "3" ) + PORT_DIPSETTING( 0x00, "5" ) + PORT_DIPNAME( 0x38, 0x38, DEF_STR( Coinage ) ) PORT_DIPLOCATION("DSW1:4,5,6") +// PORT_DIPSETTING( 0x08, DEF_STR( 5C_1C ) ) + PORT_DIPSETTING( 0x10, DEF_STR( 5C_1C ) ) + PORT_DIPSETTING( 0x20, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x18, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x38, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0x30, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x28, DEF_STR( 1C_3C ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Free_Play ) ) + PORT_DIPNAME( 0xc0, 0xc0, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("DSW1:7,8") + PORT_DIPSETTING( 0xc0, "20000 60000" ) + PORT_DIPSETTING( 0x80, "40000 90000" ) + PORT_DIPSETTING( 0x40, "50000 120000" ) + PORT_DIPSETTING( 0x00, DEF_STR( None ) ) + + PORT_START("DSW2") + PORT_DIPNAME( 0x01, 0x00, "Bonus Life Occurence" ) PORT_DIPLOCATION("DSW2:1") + PORT_DIPSETTING( 0x01, "1st, 2nd, then every 2nd" ) /* Check the "Non Bugs" page */ + PORT_DIPSETTING( 0x00, "1st and 2nd only" ) + PORT_DIPNAME( 0x06, 0x04, "Scroll Speed" ) PORT_DIPLOCATION("DSW2:2,3") + PORT_DIPSETTING( 0x06, "Slow" )//DEF_STR( Easy ) ) + PORT_DIPSETTING( 0x04, DEF_STR( Normal ) ) + PORT_DIPSETTING( 0x02, "Fast" )//DEF_STR( Hard ) ) + PORT_DIPSETTING( 0x00, "Faster" ) + PORT_DIPNAME( 0x18, 0x10, "Game mode" ) PORT_DIPLOCATION("DSW2:4,5") + PORT_DIPSETTING( 0x18, "Demo Sounds Off" ) + PORT_DIPSETTING( 0x10, "Demo Sounds On" ) + PORT_DIPSETTING( 0x08, "Infinite Lives (Cheat)") + PORT_DIPSETTING( 0x00, "Freeze" ) + PORT_DIPNAME( 0x20, 0x20, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("DSW2:6") + PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) /* Check the "Non Bugs" page */ + PORT_DIPNAME( 0x40, 0x40, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("DSW2:7") + PORT_DIPSETTING( 0x40, DEF_STR( Easy ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Hard ) ) + PORT_DIPUNKNOWN_DIPLOC(0x80, IP_ACTIVE_LOW, "DSW2:8") /* Listed as Unused, it is actually tested in many places */ +INPUT_PORTS_END + + static INPUT_PORTS_START( jcross ) PORT_START("IN0") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) @@ -1910,8 +2321,8 @@ static INPUT_PORTS_START( fitegolf ) PORT_DIPSETTING( 0x04, DEF_STR( Upright ) ) /* Dual Controls */ PORT_DIPSETTING( 0x00, DEF_STR( Cocktail ) ) PORT_DIPNAME( 0x08, 0x00, "Gameplay" ) PORT_CONDITION("DSW1", 0x01, PORTCOND_EQUALS, 0x01) PORT_DIPLOCATION("DSW1:4") /* code at 0x011e */ - PORT_DIPSETTING( 0x08, "Avid Golfer" ) PORT_CONDITION("DSW1", 0x01, PORTCOND_EQUALS, 0x01) PORT_DIPSETTING( 0x00, "Basic Player" ) PORT_CONDITION("DSW1", 0x01, PORTCOND_EQUALS, 0x01) + PORT_DIPSETTING( 0x08, "Avid Golfer" ) PORT_CONDITION("DSW1", 0x01, PORTCOND_EQUALS, 0x01) PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unused ) ) PORT_CONDITION("DSW1", 0x01, PORTCOND_EQUALS, 0x00) PORT_DIPLOCATION("DSW1:4") PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) PORT_CONDITION("DSW1", 0x01, PORTCOND_EQUALS, 0x00) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_CONDITION("DSW1", 0x01, PORTCOND_EQUALS, 0x00) @@ -3082,15 +3493,23 @@ static const gfx_layout bigspritelayout_4bpp = /*********************************************************************/ +static GFXDECODE_START( marvins ) + GFXDECODE_ENTRY( "tx_tiles", 0, charlayout_4bpp, 0x180, 0x080>>4 ) + GFXDECODE_ENTRY( "fg_tiles", 0, charlayout_4bpp, 0x080, 0x080>>4 ) + GFXDECODE_ENTRY( "bg_tiles", 0, charlayout_4bpp, 0x100, 0x080>>4 ) + GFXDECODE_ENTRY( "sp16_tiles", 0, spritelayout_3bpp, 0x000, 0x080>>3 ) + /* colors 0x200-0x3ff contain shadows */ +GFXDECODE_END + static GFXDECODE_START( tnk3 ) - GFXDECODE_ENTRY( "fg_tiles", 0, charlayout_4bpp, 0x180, 0x080>>4 ) + GFXDECODE_ENTRY( "tx_tiles", 0, charlayout_4bpp, 0x180, 0x080>>4 ) GFXDECODE_ENTRY( "bg_tiles", 0, charlayout_4bpp, 0x080, 0x100>>4 ) GFXDECODE_ENTRY( "sp16_tiles", 0, spritelayout_3bpp, 0x000, 0x080>>3 ) /* colors 0x200-0x3ff contain shadows */ GFXDECODE_END static GFXDECODE_START( ikari ) - GFXDECODE_ENTRY( "fg_tiles", 0, charlayout_4bpp, 0x180, 0x080>>4 ) + GFXDECODE_ENTRY( "tx_tiles", 0, charlayout_4bpp, 0x180, 0x080>>4 ) GFXDECODE_ENTRY( "bg_tiles", 0, tilelayout_4bpp, 0x100, 0x080>>4 ) GFXDECODE_ENTRY( "sp16_tiles", 0, spritelayout_3bpp, 0x000, 0x080>>3 ) GFXDECODE_ENTRY( "sp32_tiles", 0, bigspritelayout_3bpp, 0x080, 0x080>>3 ) @@ -3098,7 +3517,7 @@ static GFXDECODE_START( ikari ) GFXDECODE_END static GFXDECODE_START( gwar ) - GFXDECODE_ENTRY( "fg_tiles", 0, charlayout_4bpp, 0x000, 0x100>>4 ) + GFXDECODE_ENTRY( "tx_tiles", 0, charlayout_4bpp, 0x000, 0x100>>4 ) GFXDECODE_ENTRY( "bg_tiles", 0, tilelayout_4bpp, 0x300, 0x100>>4 ) GFXDECODE_ENTRY( "sp16_tiles", 0, spritelayout_4bpp, 0x100, 0x080>>4 ) GFXDECODE_ENTRY( "sp32_tiles", 0, bigspritelayout_4bpp, 0x200, 0x100>>4 ) @@ -3106,7 +3525,7 @@ static GFXDECODE_START( gwar ) GFXDECODE_END static GFXDECODE_START( tdfever ) - GFXDECODE_ENTRY( "fg_tiles", 0, charlayout_4bpp, 0x000, 0x100>>4 ) + GFXDECODE_ENTRY( "tx_tiles", 0, charlayout_4bpp, 0x000, 0x100>>4 ) GFXDECODE_ENTRY( "bg_tiles", 0, tilelayout_4bpp, 0x200, 0x100>>4 ) GFXDECODE_ENTRY( "sp32_tiles", 0, bigspritelayout_4bpp, 0x100, 0x100>>4 ) /* colors 0x300-0x3ff contain shadows */ @@ -3114,14 +3533,75 @@ GFXDECODE_END /**********************************************************************/ +static MACHINE_DRIVER_START( marvins ) + + /* basic machine hardware */ + MDRV_CPU_ADD("main", Z80, 3360000) /* 3.36 MHz */ + MDRV_CPU_PROGRAM_MAP(marvins_cpuA_map,0) + MDRV_CPU_VBLANK_INT("main", irq0_line_hold) + + MDRV_CPU_ADD("sub", Z80, 3360000) /* 3.36 MHz */ + MDRV_CPU_PROGRAM_MAP(marvins_cpuB_map,0) + MDRV_CPU_VBLANK_INT("main", irq0_line_hold) + + MDRV_CPU_ADD("audio", Z80, 4000000) /* verified on schematics */ + MDRV_CPU_PROGRAM_MAP(marvins_sound_map,0) + MDRV_CPU_IO_MAP(marvins_sound_portmap,0) + MDRV_CPU_PERIODIC_INT(nmi_line_assert, 244) // schematics show a separate 244Hz timer + + MDRV_INTERLEAVE(100) + + /* video hardware */ + MDRV_VIDEO_ATTRIBUTES(VIDEO_HAS_SHADOWS) + + MDRV_SCREEN_ADD("main", RASTER) + MDRV_SCREEN_REFRESH_RATE(60) + MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) + MDRV_SCREEN_SIZE(36*8, 28*8) + MDRV_SCREEN_VISIBLE_AREA(0*8, 36*8-1, 1*8, 28*8-1) + + MDRV_GFXDECODE(marvins) + MDRV_PALETTE_LENGTH(0x400) + + MDRV_PALETTE_INIT(tnk3) + MDRV_VIDEO_START(marvins) + MDRV_VIDEO_UPDATE(marvins) + + /* sound hardware */ + MDRV_SPEAKER_STANDARD_MONO("mono") + + MDRV_SOUND_ADD("ay1", AY8910, 2000000) /* verified on schematics */ + MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.35) + + MDRV_SOUND_ADD("ay2", AY8910, 2000000) /* verified on schematics */ + MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.35) + + MDRV_SOUND_ADD("wave", SNKWAVE, 8000000) /* verified on schematics */ + MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.30) +MACHINE_DRIVER_END + + +static MACHINE_DRIVER_START( vangrd2 ) + + MDRV_IMPORT_FROM(marvins) + + /* basic machine hardware */ + MDRV_CPU_MODIFY("main") + MDRV_CPU_PROGRAM_MAP(madcrash_cpuA_map,0) + + MDRV_CPU_MODIFY("sub") + MDRV_CPU_PROGRAM_MAP(madcrash_cpuB_map,0) +MACHINE_DRIVER_END + + static MACHINE_DRIVER_START( jcross ) /* basic machine hardware */ - MDRV_CPU_ADD("main", Z80, 3250000) /* NOT verified */ + MDRV_CPU_ADD("main", Z80, 3350000) /* NOT verified */ MDRV_CPU_PROGRAM_MAP(jcross_cpuA_map,0) MDRV_CPU_VBLANK_INT("main", irq0_line_hold) - MDRV_CPU_ADD("sub", Z80, 3250000) /* NOT verified */ + MDRV_CPU_ADD("sub", Z80, 3350000) /* NOT verified */ MDRV_CPU_PROGRAM_MAP(jcross_cpuB_map,0) MDRV_CPU_VBLANK_INT("main", irq0_line_hold) @@ -3524,6 +4004,118 @@ MACHINE_DRIVER_END /***********************************************************************/ +ROM_START( marvins ) + ROM_REGION( 0x10000, "main", 0 ) /* 64k for CPUA code */ + ROM_LOAD( "pa1", 0x0000, 0x2000, CRC(0008d791) SHA1(6ffb174b2d680314f74efeef83da9f3ee3e0c753) ) + ROM_LOAD( "pa2", 0x2000, 0x2000, CRC(9457003c) SHA1(05ecd5c638a12163e2a65bdfcc09875618f792e1) ) + ROM_LOAD( "pa3", 0x4000, 0x2000, CRC(54c33ecb) SHA1(cfbf9ffc125fbc51f2abef180f36781f9e748bbd) ) + + ROM_REGION( 0x10000, "sub", 0 ) /* 64k for CPUB code */ + ROM_LOAD( "pb1", 0x0000, 0x2000, CRC(3b6941a5) SHA1(9c29870196eaed87f34456fdb06bf7b69c8f489d) ) + + ROM_REGION( 0x10000, "audio", 0 ) /* 64k for sound code */ + ROM_LOAD( "m1", 0x0000, 0x2000, CRC(2314c696) SHA1(1b84a0c82a4dcff648752f53aa1f0abf5357c5d1) ) + ROM_LOAD( "m2", 0x2000, 0x2000, CRC(74ba5799) SHA1(c278b0e5c4134f6077d4ae7b51e3c5cba28af1a8) ) + + ROM_REGION( 0x2000, "tx_tiles", ROMREGION_DISPOSE ) + ROM_LOAD( "s1", 0x0000, 0x2000, CRC(327f70f3) SHA1(078dcc6b4697617d4d833ccd59c6a543b2a88d9e) ) + + ROM_REGION( 0x2000, "fg_tiles", ROMREGION_DISPOSE ) + ROM_LOAD( "b1", 0x0000, 0x2000, CRC(e528bc60) SHA1(3365ac7cbc57739054bc11e68831be87c0c1a97a) ) + + ROM_REGION( 0x2000, "bg_tiles", ROMREGION_DISPOSE ) + ROM_LOAD( "b2", 0x0000, 0x2000, CRC(e528bc60) SHA1(3365ac7cbc57739054bc11e68831be87c0c1a97a) ) + + ROM_REGION( 0x6000, "sp16_tiles", ROMREGION_DISPOSE ) + ROM_LOAD( "f1", 0x0000, 0x2000, CRC(0bd6b4e5) SHA1(c56747ff2135db734f1b5f6c2906de5ac8f53bbc) ) + ROM_LOAD( "f2", 0x2000, 0x2000, CRC(8fc2b081) SHA1(fb345965375cb62ec1b947d6c6d071380dc0f395) ) + ROM_LOAD( "f3", 0x4000, 0x2000, CRC(e55c9b83) SHA1(04b0d99955e4b11820015b7721ac6399a3d5a829) ) + + ROM_REGION( 0x0c00, "proms", 0 ) + ROM_LOAD( "marvmaze.j1", 0x000, 0x400, CRC(92f5b06d) SHA1(97979ffb6fb065d9c99da43173180fefb2de1886) ) + ROM_LOAD( "marvmaze.j2", 0x400, 0x400, CRC(d2b25665) SHA1(b913b8b9c5ee0a29b5a115b2432c5706979059cf) ) + ROM_LOAD( "marvmaze.j3", 0x800, 0x400, CRC(df9e6005) SHA1(8f633f664c3f8e4f6ca94bee74a68c8fda8873e3) ) +ROM_END + +/***********************************************************************/ + +ROM_START( madcrash ) + ROM_REGION( 0x10000, "main", 0 ) /* 64k for CPUA code */ + ROM_LOAD( "p8", 0x0000, 0x2000, CRC(ecb2fdc9) SHA1(7dd79fbbe286a9f18ed2cae45b1bfab765e549a1) ) + ROM_LOAD( "p9", 0x2000, 0x2000, CRC(0a87df26) SHA1(327710452bdc5dbb931abc853957225814f224c5) ) + ROM_LOAD( "p10", 0x4000, 0x2000, CRC(6eb8a87c) SHA1(375377df22b331175aaf1f9eb8d8ad83e8e146f6) ) + + ROM_REGION( 0x10000, "sub", 0 ) /* 64k for CPUB code */ + ROM_LOAD( "p4", 0x0000, 0x2000, CRC(5664d699) SHA1(5bfa57a0f8d718d522003da6513a70d7ca3a87a3) ) + ROM_LOAD( "p5", 0x2000, 0x2000, CRC(dea2865a) SHA1(0807281e35159ee29fbe2d1aa087b57804f1a14f) ) + ROM_LOAD( "p6", 0x4000, 0x2000, CRC(e25a9b9c) SHA1(26853611e3898907239e15f1a00f62290889f89b) ) + ROM_LOAD( "p7", 0x6000, 0x2000, CRC(55b14a36) SHA1(7d5566a6ba285af92ddf560efda60a79f1da84c2) ) + ROM_LOAD( "p3", 0x8000, 0x2000, CRC(e3c8c2cb) SHA1(b3e39eacd2609ff0fa0f511bff0fc83e6b3970d4) ) + + ROM_REGION( 0x10000, "audio", 0 ) /* 64k for sound code */ + ROM_LOAD( "p1", 0x0000, 0x2000, CRC(2dcd036d) SHA1(4da42ab1e502fff57f5d5787df406289538fa484) ) + ROM_LOAD( "p2", 0x2000, 0x2000, CRC(cc30ae8b) SHA1(ffedc747b9e0b616a163ff8bb1def318e522585b) ) + + ROM_REGION( 0x2000, "tx_tiles", ROMREGION_DISPOSE ) + ROM_LOAD( "p13", 0x0000, 0x2000, CRC(48c4ade0) SHA1(3628abb4f425b8c9d8659c8e4082735168b0f3e9) ) + + ROM_REGION( 0x2000, "fg_tiles", ROMREGION_DISPOSE ) + ROM_LOAD( "p11", 0x0000, 0x2000, CRC(67174956) SHA1(65a921176294212971c748932a9010f45e1fb499) ) + + ROM_REGION( 0x2000, "bg_tiles", ROMREGION_DISPOSE ) + ROM_LOAD( "p12", 0x0000, 0x2000, CRC(085094c1) SHA1(5c5599d1ed7f8a717ada54bbd28383a22e09a8fe) ) + + ROM_REGION( 0x6000, "sp16_tiles", ROMREGION_DISPOSE ) + ROM_LOAD( "p16", 0x0000, 0x2000, CRC(6153611a) SHA1(b352f92b233761122f74830e46913cc4df800259) ) + ROM_LOAD( "p15", 0x2000, 0x2000, CRC(a74149d4) SHA1(e8011a8d4d1a98a0ffe67fc28ea9fa192ca80321) ) + ROM_LOAD( "p14", 0x4000, 0x2000, CRC(07e807bc) SHA1(f651d3a5394ced8e0a1b2be3aa52b3e5a5d84c37) ) + + ROM_REGION( 0x0c00, "proms", 0 ) + ROM_LOAD( "m3-prom.j3", 0x000, 0x400, CRC(d19e8a91) SHA1(b21fbdb8ed8d0b27c3ec78cf2e115624f69c67e0) ) + ROM_LOAD( "m2-prom.j4", 0x400, 0x400, CRC(9fc325af) SHA1(a180662f168ba001376f25f5d9205cb119c1ffee) ) + ROM_LOAD( "m1-prom.j5", 0x800, 0x400, CRC(07678443) SHA1(267951886d8b031dd633dc4823d9bd862a585437) ) +ROM_END + +/***********************************************************************/ + +ROM_START( vangrd2 ) + ROM_REGION( 0x10000, "main", 0 ) + ROM_LOAD( "p1.9a", 0x0000, 0x2000, CRC(bc9eeca5) SHA1(5a737e0f0aa1a3a5296d1e1fec13b34aee970609) ) + ROM_LOAD( "p3.11a", 0x2000, 0x2000, CRC(3970f69d) SHA1(b0ef7494888804ab5b4002730fb0232a7fd6797b) ) + ROM_LOAD( "p2.12a", 0x4000, 0x2000, CRC(58b08b58) SHA1(eccc85191d678a0115a113002a43203afd857a5b) ) + ROM_LOAD( "p4.14a", 0x6000, 0x2000, CRC(a95f11ea) SHA1(8007efb4ad948c8768e474fc77134f3ce52da1d2) ) + + ROM_REGION( 0x10000, "sub", 0 ) + ROM_LOAD( "p5.4a", 0x0000, 0x2000, CRC(e4dfd0ba) SHA1(12d45ff147f3ea9c9e898c3831874cd7c1a071b7) ) + ROM_LOAD( "p6.6a", 0x2000, 0x2000, CRC(894ff00d) SHA1(1c66f327d8e94dc6ac386e11fcc5eb17c9081434) ) + ROM_LOAD( "p7.7a", 0x4000, 0x2000, CRC(40b4d069) SHA1(56c464bd055125ffc2da02d70137aa5efe5cd8f6) ) + + ROM_REGION( 0x10000, "audio", 0 ) /* 64k for sound code */ + ROM_LOAD( "p8.6a", 0x0000, 0x2000, CRC(a3daa438) SHA1(4e659ac7e3ebaf85bc3ce5c9946fcf0af23083b4) ) + ROM_LOAD( "p9.8a", 0x2000, 0x2000, CRC(9345101a) SHA1(b99ad1c2a79df50b0a60fdd43ca466f6cb38445b) ) + + ROM_REGION( 0x2000, "tx_tiles", ROMREGION_DISPOSE ) + ROM_LOAD( "p15.1e", 0x0000, 0x2000, CRC(85718a41) SHA1(4c9aa1f8b229410414cd67bac8cb10a14bea12f4) ) + + ROM_REGION( 0x2000, "fg_tiles", ROMREGION_DISPOSE ) + ROM_LOAD( "p13.1a", 0x0000, 0x2000, CRC(912f22c6) SHA1(5042edc80b58f77b3576b5e6eb8c6460c8a35494) ) + + ROM_REGION( 0x2000, "bg_tiles", ROMREGION_DISPOSE ) + ROM_LOAD( "p9", 0x0000, 0x2000, CRC(7aa0b684) SHA1(d52670ec50b1a07d6c2c537f67922063deacdeea) ) + + ROM_REGION( 0x6000, "sp16_tiles", ROMREGION_DISPOSE ) + ROM_LOAD( "p10.4kl", 0x0000, 0x2000, CRC(5bfc04c0) SHA1(4eb152fdf39cb0024f71d5bdf1bfc79c2b8c2329) ) + ROM_LOAD( "p11.3kl", 0x2000, 0x2000, CRC(620cd4ec) SHA1(a2fcc3d24d0d3c7cc601620ae7a709f46b613c0f) ) + ROM_LOAD( "p12.1kl", 0x4000, 0x2000, CRC(8658ea6c) SHA1(d5ea9be2c1776b11abc77c944a653eeb73b27fc8) ) + + ROM_REGION( 0x0c00, "proms", 0 ) + ROM_LOAD( "mb7054.3j", 0x000, 0x400, CRC(506f659a) SHA1(766f1a0dd462eba64546c514004e6542e200d7c3) ) + ROM_LOAD( "mb7054.4j", 0x400, 0x400, CRC(222133ce) SHA1(109a63c8c44608a8ad9183e7b5d269765cc5f067) ) + ROM_LOAD( "mb7054.5j", 0x800, 0x400, CRC(2e21a79b) SHA1(1956377c799e0bbd127bf4fae016adc148efe007) ) +ROM_END + +/***********************************************************************/ + ROM_START( jcross ) ROM_REGION( 0x10000, "main", 0 ) ROM_LOAD( "jcrossa0.10b", 0x0000, 0x2000, CRC(0e79bbcd) SHA1(7088a8effd30080529b797991e24e9807bf90475) ) @@ -3542,7 +4134,7 @@ ROM_START( jcross ) ROM_LOAD( "jcrosss0.f1", 0x0000, 0x2000, CRC(9ae8ea93) SHA1(1d824302305a41bf5c354c36e2e11981d1aa5ea4) ) ROM_LOAD( "jcrosss1.h2", 0x2000, 0x2000, CRC(83785601) SHA1(cd3d484ef5464090c4b543b1edbbedcc52b15071) ) - ROM_REGION( 0x4000, "fg_tiles", ROMREGION_DISPOSE ) + ROM_REGION( 0x4000, "tx_tiles", ROMREGION_DISPOSE ) ROM_LOAD( "jcrossb4.10a", 0x0000, 0x2000, CRC(08ad93fe) SHA1(04baf2d9735b0d794b114abeced5a6b899958ce7) ) ROM_LOAD( "jcrosss.d2", 0x2000, 0x2000, CRC(3ebb5beb) SHA1(de0a1f0fdb5b08b76dab9fa64d9ae3047c4ff84b) ) @@ -3576,7 +4168,7 @@ ROM_START( sgladiat ) ROM_LOAD( "glad.007", 0x0000, 0x2000, CRC(c25b6731) SHA1(519c6844bfec958b9bb65f148b3527b41fe38b99) ) ROM_LOAD( "glad.006", 0x2000, 0x2000, CRC(2024d716) SHA1(6ff069fc53524d13c386e8e714ba3056509adc4d) ) - ROM_REGION( 0x2000, "fg_tiles", ROMREGION_DISPOSE ) + ROM_REGION( 0x2000, "tx_tiles", ROMREGION_DISPOSE ) ROM_LOAD( "glad.011", 0x0000, 0x2000, CRC(305bb294) SHA1(e148571a581b12ff9502a65ec428e4d19bc757cb) ) ROM_REGION( 0x2000, "bg_tiles", ROMREGION_DISPOSE ) @@ -3612,7 +4204,7 @@ ROM_START( hal21 ) ROM_REGION( 0x10000, "audio", 0 ) ROM_LOAD( "hal21p10.bin", 0x0000, 0x4000, CRC(916f7ba0) SHA1(7b8bcd59d768c4cd226de96895d3b9755bb3ba79) ) - ROM_REGION( 0x2000, "fg_tiles", ROMREGION_DISPOSE ) + ROM_REGION( 0x2000, "tx_tiles", ROMREGION_DISPOSE ) ROM_LOAD( "hal21p12.bin", 0x0000, 0x2000, CRC(9839a7cd) SHA1(d3f9d964263a64aa3648faf5eb2e4fa532ae7852) ) ROM_REGION( 0x4000, "bg_tiles", ROMREGION_DISPOSE ) @@ -3646,7 +4238,7 @@ ROM_START( hal21j ) ROM_REGION( 0x10000, "audio", 0 ) ROM_LOAD( "hal21-10.bin", 0x0000, 0x4000, CRC(a182b3f0) SHA1(b76eff97a58a96467e9f3a74125a0a770e7678f8) ) - ROM_REGION( 0x2000, "fg_tiles", ROMREGION_DISPOSE ) + ROM_REGION( 0x2000, "tx_tiles", ROMREGION_DISPOSE ) ROM_LOAD( "hal21p12.bin", 0x0000, 0x2000, CRC(9839a7cd) SHA1(d3f9d964263a64aa3648faf5eb2e4fa532ae7852) ) ROM_REGION( 0x4000, "bg_tiles", ROMREGION_DISPOSE ) @@ -3681,7 +4273,7 @@ ROM_START( aso ) ROM_LOAD( "p8.f3", 0x4000, 0x4000, CRC(537726a9) SHA1(ddf66946be71d2e6ab2cc53150e3b36d45dde2eb) ) ROM_LOAD( "p9.f2", 0x8000, 0x4000, CRC(aef5a4f4) SHA1(e908e79e27ff892fe75d1ba5cb0bc9dc6b7b4268) ) - ROM_REGION( 0x2000, "fg_tiles", ROMREGION_DISPOSE ) + ROM_REGION( 0x2000, "tx_tiles", ROMREGION_DISPOSE ) ROM_LOAD( "aso_p14.h1", 0x0000, 0x2000, CRC(8baa2253) SHA1(e6e4a5aa005e89744c4e2a19a080cf322edc6b52) ) ROM_REGION( 0x8000, "bg_tiles", ROMREGION_DISPOSE ) @@ -3722,7 +4314,7 @@ ROM_START( alphamis ) ROM_LOAD( "p8.f3", 0x4000, 0x4000, CRC(537726a9) SHA1(ddf66946be71d2e6ab2cc53150e3b36d45dde2eb) ) ROM_LOAD( "p9.f2", 0x8000, 0x4000, CRC(aef5a4f4) SHA1(e908e79e27ff892fe75d1ba5cb0bc9dc6b7b4268) ) - ROM_REGION( 0x2000, "fg_tiles", ROMREGION_DISPOSE ) + ROM_REGION( 0x2000, "tx_tiles", ROMREGION_DISPOSE ) ROM_LOAD( "p14.rom", 0x0000, 0x2000, CRC(acbe29b2) SHA1(e304c6d30888fa7549d25e6329ba94d5088bd8b7) ) ROM_REGION( 0x8000, "bg_tiles", ROMREGION_DISPOSE ) @@ -3763,7 +4355,7 @@ ROM_START( arian ) ROM_LOAD( "p8.f3", 0x4000, 0x4000, CRC(537726a9) SHA1(ddf66946be71d2e6ab2cc53150e3b36d45dde2eb) ) ROM_LOAD( "p9.f2", 0x8000, 0x4000, CRC(aef5a4f4) SHA1(e908e79e27ff892fe75d1ba5cb0bc9dc6b7b4268) ) - ROM_REGION( 0x2000, "fg_tiles", ROMREGION_DISPOSE ) + ROM_REGION( 0x2000, "tx_tiles", ROMREGION_DISPOSE ) ROM_LOAD( "p14.h1", 0x0000, 0x2000, CRC(e599bd30) SHA1(bf70aae9a15d548bb532ca1fc8d7220dfa150d6e) ) ROM_REGION( 0x8000, "bg_tiles", ROMREGION_DISPOSE ) @@ -3810,7 +4402,7 @@ ROM_START( tnk3 ) ROM_LOAD( "7122.1", 0x400, 0x400, CRC(6d0ac66a) SHA1(e792218ec43dd10473dc020afed8527cf43ea0d0) ) ROM_LOAD( "7122.0", 0x800, 0x400, CRC(4662b4c8) SHA1(391c2b8a17ce2e092b46a17fc4170dc1e3bde426) ) - ROM_REGION( 0x4000, "fg_tiles", ROMREGION_DISPOSE ) + ROM_REGION( 0x4000, "tx_tiles", ROMREGION_DISPOSE ) ROM_LOAD( "tnk3-p14.bin", 0x0000, 0x2000, CRC(1fd18c43) SHA1(611b5aa97df84c0117681772deb006f32a899ad3) ) ROM_RELOAD( 0x2000, 0x2000 ) @@ -3844,7 +4436,7 @@ ROM_START( tnk3j ) ROM_LOAD( "7122.1", 0x400, 0x400, CRC(6d0ac66a) SHA1(e792218ec43dd10473dc020afed8527cf43ea0d0) ) ROM_LOAD( "7122.0", 0x800, 0x400, CRC(4662b4c8) SHA1(391c2b8a17ce2e092b46a17fc4170dc1e3bde426) ) - ROM_REGION( 0x4000, "fg_tiles", ROMREGION_DISPOSE ) + ROM_REGION( 0x4000, "tx_tiles", ROMREGION_DISPOSE ) ROM_LOAD( "p14.1e", 0x0000, 0x2000, CRC(6bd575ca) SHA1(446bb929fa19a7ff8b92731f71ab3e3252899f07) ) ROM_RELOAD( 0x2000, 0x2000 ) @@ -3878,7 +4470,7 @@ ROM_START( athena ) ROM_LOAD( "up02_b1.rom", 0x400, 0x400, CRC(d25c9099) SHA1(f3933075cce1255affc61dfefd9559b6e15ed29c) ) ROM_LOAD( "up02_c1.rom", 0x800, 0x400, CRC(a4a4e7dc) SHA1(aa694c2d44dcabc6cfd46307c55c3759eff57236) ) - ROM_REGION( 0x4000, "fg_tiles", ROMREGION_DISPOSE ) + ROM_REGION( 0x4000, "tx_tiles", ROMREGION_DISPOSE ) ROM_LOAD( "up01_d2.rom", 0x0000, 0x4000, CRC(18b4bcca) SHA1(2476aa6c8d55e117d840202a97fe2a65e252ad7f) ) ROM_REGION( 0x8000, "bg_tiles", ROMREGION_DISPOSE ) @@ -3910,7 +4502,7 @@ ROM_START( fitegolf ) ROM_LOAD( "82s137.1b", 0x00400, 0x00400, CRC(29e7986f) SHA1(85ba8d3443458c27728f633745857a1315dd183f) ) ROM_LOAD( "82s137.1c", 0x00800, 0x00400, CRC(27ba9ff9) SHA1(f021d10460f40de4447560df5ac47fa53bb57ff9) ) - ROM_REGION( 0x4000, "fg_tiles", ROMREGION_DISPOSE ) + ROM_REGION( 0x4000, "tx_tiles", ROMREGION_DISPOSE ) ROM_LOAD( "gu8", 0x0000, 0x4000, CRC(f1628dcf) SHA1(efea343d3a9dd45ef74947c297e166e34afbb680) ) ROM_REGION( 0x8000, "bg_tiles", ROMREGION_DISPOSE ) @@ -3945,7 +4537,7 @@ ROM_START( fitegol2 ) ROM_LOAD( "82s137.1b", 0x00400, 0x00400, CRC(29e7986f) SHA1(85ba8d3443458c27728f633745857a1315dd183f) ) ROM_LOAD( "82s137.1c", 0x00800, 0x00400, CRC(27ba9ff9) SHA1(f021d10460f40de4447560df5ac47fa53bb57ff9) ) - ROM_REGION( 0x4000, "fg_tiles", ROMREGION_DISPOSE ) + ROM_REGION( 0x4000, "tx_tiles", ROMREGION_DISPOSE ) ROM_LOAD( "gu8", 0x0000, 0x4000, CRC(f1628dcf) SHA1(efea343d3a9dd45ef74947c297e166e34afbb680) ) // D2.128 ROM_REGION( 0x8000, "bg_tiles", ROMREGION_DISPOSE ) @@ -4032,7 +4624,7 @@ ROM_START( countryc ) ROM_LOAD( "cc2pr.5g", 0x400, 0x00400, CRC(982e4f46) SHA1(c4703a35201bc4c6b43f629a9a6a4c66354c6305) ) ROM_LOAD( "cc3pr.5h", 0x800, 0x00400, CRC(47f2b83d) SHA1(6335be47f09ad33d7e05fda26a2f3fb9048dbbc2) ) - ROM_REGION( 0x4000, "fg_tiles", ROMREGION_DISPOSE ) + ROM_REGION( 0x4000, "tx_tiles", ROMREGION_DISPOSE ) ROM_LOAD( "cc11.1e", 0x0000, 0x4000, CRC(ce927ac7) SHA1(a0dd281912aa9ae7e408c2132fae30bffbc83750) ) ROM_REGION( 0x8000, "bg_tiles", ROMREGION_DISPOSE ) @@ -4062,7 +4654,7 @@ ROM_START( ikari ) ROM_LOAD( "7122eg.prm", 0x400, 0x400, CRC(0703a770) SHA1(62861ef4987003d4965ef5018ccdf7157981d939) ) ROM_LOAD( "7122eb.prm", 0x800, 0x400, CRC(0a11cdde) SHA1(faae17398341317e7afbd06b903b8e9e65967bf1) ) - ROM_REGION( 0x4000, "fg_tiles", ROMREGION_DISPOSE ) + ROM_REGION( 0x4000, "tx_tiles", ROMREGION_DISPOSE ) ROM_LOAD( "7.rom", 0x00000, 0x4000, CRC(a7eb4917) SHA1(6c07323cc243df4c5c30bc0daedbff3887309f65) ) ROM_REGION( 0x20000, "bg_tiles", ROMREGION_DISPOSE ) @@ -4103,7 +4695,7 @@ ROM_START( ikaria ) ROM_LOAD( "7122eg.prm", 0x400, 0x400, CRC(0703a770) SHA1(62861ef4987003d4965ef5018ccdf7157981d939) ) ROM_LOAD( "7122eb.prm", 0x800, 0x400, CRC(0a11cdde) SHA1(faae17398341317e7afbd06b903b8e9e65967bf1) ) - ROM_REGION( 0x4000, "fg_tiles", ROMREGION_DISPOSE ) + ROM_REGION( 0x4000, "tx_tiles", ROMREGION_DISPOSE ) ROM_LOAD( "7.rom", 0x00000, 0x4000, CRC(a7eb4917) SHA1(6c07323cc243df4c5c30bc0daedbff3887309f65) ) // p7 ROM_REGION( 0x20000, "bg_tiles", ROMREGION_DISPOSE ) @@ -4144,7 +4736,7 @@ ROM_START( ikarinc ) ROM_LOAD( "7122eg.prm", 0x400, 0x400, CRC(0703a770) SHA1(62861ef4987003d4965ef5018ccdf7157981d939) ) ROM_LOAD( "7122eb.prm", 0x800, 0x400, CRC(0a11cdde) SHA1(faae17398341317e7afbd06b903b8e9e65967bf1) ) - ROM_REGION( 0x4000, "fg_tiles", ROMREGION_DISPOSE ) + ROM_REGION( 0x4000, "tx_tiles", ROMREGION_DISPOSE ) ROM_LOAD( "7.rom", 0x00000, 0x4000, CRC(a7eb4917) SHA1(6c07323cc243df4c5c30bc0daedbff3887309f65) ) // p7 ROM_REGION( 0x20000, "bg_tiles", ROMREGION_DISPOSE ) @@ -4191,7 +4783,7 @@ ROM_START( ikarijp ) ROM_LOAD( "7122eg.prm", 0x400, 0x400, CRC(0703a770) SHA1(62861ef4987003d4965ef5018ccdf7157981d939) ) ROM_LOAD( "7122eb.prm", 0x800, 0x400, CRC(0a11cdde) SHA1(faae17398341317e7afbd06b903b8e9e65967bf1) ) - ROM_REGION( 0x4000, "fg_tiles", ROMREGION_DISPOSE ) + ROM_REGION( 0x4000, "tx_tiles", ROMREGION_DISPOSE ) ROM_LOAD( "ik7", 0x00000, 0x4000, CRC(9e88f536) SHA1(80e9aadeb626e60318a2139fd1b3875f6256c492) ) ROM_REGION( 0x20000, "bg_tiles", ROMREGION_DISPOSE ) @@ -4238,7 +4830,7 @@ ROM_START( ikarijpb ) ROM_LOAD( "7122eg.prm", 0x400, 0x400, CRC(0703a770) SHA1(62861ef4987003d4965ef5018ccdf7157981d939) ) ROM_LOAD( "7122eb.prm", 0x800, 0x400, CRC(0a11cdde) SHA1(faae17398341317e7afbd06b903b8e9e65967bf1) ) - ROM_REGION( 0x4000, "fg_tiles", ROMREGION_DISPOSE ) + ROM_REGION( 0x4000, "tx_tiles", ROMREGION_DISPOSE ) ROM_LOAD( "ik7", 0x0000, 0x4000, CRC(9e88f536) SHA1(80e9aadeb626e60318a2139fd1b3875f6256c492) ) ROM_REGION( 0x20000, "bg_tiles", ROMREGION_DISPOSE ) @@ -4278,7 +4870,7 @@ ROM_START( victroad ) ROM_LOAD( "mb7122e.2l", 0x400, 0x400, CRC(8feca424) SHA1(c3d666f4b4b914199b24ded02f9a1b643bf90d26) ) ROM_LOAD( "mb7122e.1l", 0x800, 0x400, CRC(220076ca) SHA1(a353c770c0ffb1105fb93c97977597ad2fda8ac8) ) - ROM_REGION( 0x4000, "fg_tiles", ROMREGION_DISPOSE ) + ROM_REGION( 0x4000, "tx_tiles", ROMREGION_DISPOSE ) ROM_LOAD( "p7", 0x0000, 0x4000, CRC(2b6ed95b) SHA1(dddf3aa21776778153572a20d29d47928a7116d8) ) ROM_REGION( 0x20000, "bg_tiles", ROMREGION_DISPOSE ) @@ -4320,7 +4912,7 @@ ROM_START( dogosoke ) ROM_LOAD( "up03_l2.rom", 0x400, 0x400, CRC(99dc9792) SHA1(dcdcea2bad524776e17eaeb70dd4882283f1b125) ) ROM_LOAD( "up03_l1.rom", 0x800, 0x400, CRC(e7213160) SHA1(bc762a346e1639c8a9636fe85c18d68a08c1b586) ) - ROM_REGION( 0x4000, "fg_tiles", ROMREGION_DISPOSE ) + ROM_REGION( 0x4000, "tx_tiles", ROMREGION_DISPOSE ) ROM_LOAD( "up02_b3.rom", 0x0000, 0x4000, CRC(51a4ec83) SHA1(8cb743c68a51b71ef3d78127b2cf6ab0877b13f6) ) ROM_REGION( 0x20000, "bg_tiles", ROMREGION_DISPOSE ) @@ -4362,7 +4954,7 @@ ROM_START( dogosokb ) ROM_LOAD( "up03_l2.rom", 0x400, 0x400, CRC(99dc9792) SHA1(dcdcea2bad524776e17eaeb70dd4882283f1b125) ) ROM_LOAD( "up03_l1.rom", 0x800, 0x400, CRC(e7213160) SHA1(bc762a346e1639c8a9636fe85c18d68a08c1b586) ) - ROM_REGION( 0x4000, "fg_tiles", ROMREGION_DISPOSE ) + ROM_REGION( 0x4000, "tx_tiles", ROMREGION_DISPOSE ) ROM_LOAD( "up02_b3.rom", 0x0000, 0x4000, CRC(51a4ec83) SHA1(8cb743c68a51b71ef3d78127b2cf6ab0877b13f6) ) ROM_REGION( 0x20000, "bg_tiles", ROMREGION_DISPOSE ) @@ -4646,7 +5238,7 @@ ROM_START( bermudat ) ROM_LOAD( "btj_h.prm", 0x0c00, 0x0400, CRC(c20b197b) SHA1(504cb28d652029fe87a5411d6239e78d93c83e91) ) /* ? */ ROM_LOAD( "btj_v.prm", 0x1000, 0x0400, CRC(5d0c617f) SHA1(845e52173c33500227cabe1e21b34919d2856215) ) /* ? */ - ROM_REGION( 0x8000, "fg_tiles", ROMREGION_DISPOSE ) + ROM_REGION( 0x8000, "tx_tiles", ROMREGION_DISPOSE ) ROM_LOAD( "bt_p10.rom", 0x0000, 0x8000, CRC(d3650211) SHA1(cc7cfe05c5903caf33f8f02c416f68e6d2f6baa7) ) ROM_REGION( 0x40000, "bg_tiles", ROMREGION_DISPOSE ) @@ -4693,7 +5285,7 @@ ROM_START( bermudaj ) ROM_LOAD( "btj_h.prm", 0x0c00, 0x0400, CRC(c20b197b) SHA1(504cb28d652029fe87a5411d6239e78d93c83e91) ) /* ? */ ROM_LOAD( "btj_v.prm", 0x1000, 0x0400, CRC(5d0c617f) SHA1(845e52173c33500227cabe1e21b34919d2856215) ) /* ? */ - ROM_REGION( 0x8000, "fg_tiles", ROMREGION_DISPOSE ) + ROM_REGION( 0x8000, "tx_tiles", ROMREGION_DISPOSE ) ROM_LOAD( "bt_p10.rom", 0x0000, 0x8000, CRC(d3650211) SHA1(cc7cfe05c5903caf33f8f02c416f68e6d2f6baa7) ) ROM_REGION( 0x40000, "bg_tiles", ROMREGION_DISPOSE ) @@ -4740,7 +5332,7 @@ ROM_START( worldwar ) ROM_LOAD( "btj_h.prm", 0x0c00, 0x0400, CRC(c20b197b) SHA1(504cb28d652029fe87a5411d6239e78d93c83e91) ) /* ? */ ROM_LOAD( "btj_v.prm", 0x1000, 0x0400, CRC(5d0c617f) SHA1(845e52173c33500227cabe1e21b34919d2856215) ) /* ? */ - ROM_REGION( 0x8000, "fg_tiles", ROMREGION_DISPOSE ) + ROM_REGION( 0x8000, "tx_tiles", ROMREGION_DISPOSE ) ROM_LOAD( "ww6.bin", 0x0000, 0x8000, CRC(d57570ab) SHA1(98997de12225d177be4916c7f2e6a7a2df24b8f2) ) ROM_REGION( 0x40000, "bg_tiles", ROMREGION_DISPOSE ) @@ -4787,7 +5379,7 @@ ROM_START( bermudaa ) ROM_LOAD( "btj_h.prm", 0x0c00, 0x0400, CRC(c20b197b) SHA1(504cb28d652029fe87a5411d6239e78d93c83e91) ) /* ? */ ROM_LOAD( "btj_v.prm", 0x1000, 0x0400, CRC(5d0c617f) SHA1(845e52173c33500227cabe1e21b34919d2856215) ) /* ? */ - ROM_REGION( 0x8000, "fg_tiles", ROMREGION_DISPOSE ) + ROM_REGION( 0x8000, "tx_tiles", ROMREGION_DISPOSE ) ROM_LOAD( "6", 0x0000, 0x8000, CRC(a0e6710c) SHA1(28010eaed046681295661b6fa3e76090ba86592b) ) ROM_REGION( 0x40000, "bg_tiles", ROMREGION_DISPOSE ) @@ -4836,7 +5428,7 @@ ROM_START( psychos ) ROM_LOAD( "mb7122e.8j", 0x0c00, 0x400, CRC(c20b197b) SHA1(504cb28d652029fe87a5411d6239e78d93c83e91) ) /* ? */ ROM_LOAD( "mb7122e.8k", 0x1000, 0x400, CRC(5d0c617f) SHA1(845e52173c33500227cabe1e21b34919d2856215) ) /* ? */ - ROM_REGION( 0x8000, "fg_tiles", ROMREGION_DISPOSE ) + ROM_REGION( 0x8000, "tx_tiles", ROMREGION_DISPOSE ) ROM_LOAD( "up02_a3.rom", 0x0000, 0x8000, CRC(11a71919) SHA1(ffb8c54ad5162ea5040508ccb9244b7cd087c047) ) ROM_REGION( 0x40000, "bg_tiles", ROMREGION_DISPOSE ) @@ -4885,7 +5477,7 @@ ROM_START( psychosj ) ROM_LOAD( "mb7122e.8j", 0x0c00, 0x400, CRC(c20b197b) SHA1(504cb28d652029fe87a5411d6239e78d93c83e91) ) /* ? */ ROM_LOAD( "mb7122e.8k", 0x1000, 0x400, CRC(5d0c617f) SHA1(845e52173c33500227cabe1e21b34919d2856215) ) /* ? */ - ROM_REGION( 0x8000, "fg_tiles", ROMREGION_DISPOSE ) + ROM_REGION( 0x8000, "tx_tiles", ROMREGION_DISPOSE ) ROM_LOAD( "up02_a3.rom", 0x0000, 0x8000, CRC(11a71919) SHA1(ffb8c54ad5162ea5040508ccb9244b7cd087c047) ) ROM_REGION( 0x40000, "bg_tiles", ROMREGION_DISPOSE ) @@ -4937,7 +5529,7 @@ ROM_START( gwar ) ROM_LOAD( "btj_v.prm", 0x1000, 0x0400, CRC(5d0c617f) SHA1(845e52173c33500227cabe1e21b34919d2856215) ) /* v-decode */ ROM_LOAD( "ls.bin", 0x1400, 0x1000, CRC(73df921d) SHA1(c0f765da3e0e80d104b0baaa7a83bdcc399254b3) ) /* ls-joystick encoder */ - ROM_REGION( 0x8000, "fg_tiles", ROMREGION_DISPOSE ) + ROM_REGION( 0x8000, "tx_tiles", ROMREGION_DISPOSE ) ROM_LOAD( "g05", 0x0000, 0x08000, CRC(80f73e2e) SHA1(820824fb10f7dfec6247b46dde8ff7124bde3734) ) ROM_REGION( 0x40000, "bg_tiles", ROMREGION_DISPOSE ) @@ -4984,7 +5576,7 @@ ROM_START( gwara ) ROM_LOAD( "btj_v.prm", 0x1000, 0x0400, CRC(5d0c617f) SHA1(845e52173c33500227cabe1e21b34919d2856215) ) /* v-decode */ ROM_LOAD( "ls.bin", 0x1400, 0x1000, CRC(73df921d) SHA1(c0f765da3e0e80d104b0baaa7a83bdcc399254b3) ) /* ls-joystick encoder */ - ROM_REGION( 0x8000, "fg_tiles", ROMREGION_DISPOSE ) + ROM_REGION( 0x8000, "tx_tiles", ROMREGION_DISPOSE ) ROM_LOAD( "g05", 0x0000, 0x08000, CRC(80f73e2e) SHA1(820824fb10f7dfec6247b46dde8ff7124bde3734) ) ROM_REGION( 0x40000, "bg_tiles", ROMREGION_DISPOSE ) @@ -5031,7 +5623,7 @@ ROM_START( gwarj ) ROM_LOAD( "btj_v.prm", 0x1000, 0x0400, CRC(5d0c617f) SHA1(845e52173c33500227cabe1e21b34919d2856215) ) /* v-decode */ ROM_LOAD( "ls.bin", 0x1400, 0x1000, CRC(73df921d) SHA1(c0f765da3e0e80d104b0baaa7a83bdcc399254b3) ) /* ls-joystick encoder */ - ROM_REGION( 0x8000, "fg_tiles", ROMREGION_DISPOSE ) + ROM_REGION( 0x8000, "tx_tiles", ROMREGION_DISPOSE ) ROM_LOAD( "792001", 0x0000, 0x08000, CRC(99d7ddf3) SHA1(4e4bc400d184e1fb9d0af3a33cc6f6d099bb3bee) ) ROM_REGION( 0x40000, "bg_tiles", ROMREGION_DISPOSE ) @@ -5075,7 +5667,7 @@ ROM_START( gwarb ) ROM_LOAD( "guprom.2", 0x400, 0x400, CRC(9147de69) SHA1(e4b3b546e429c195e82f97322e2a295882e38a58) ) /* green */ // up03_l1.rom ROM_LOAD( "guprom.1", 0x800, 0x400, CRC(7f9c839e) SHA1(2fa60fa335f76891d961c9bd0066fa7f82f76779) ) /* blue */ // up03_k2.rom - ROM_REGION( 0x8000, "fg_tiles", ROMREGION_DISPOSE ) + ROM_REGION( 0x8000, "tx_tiles", ROMREGION_DISPOSE ) ROM_LOAD( "g05", 0x0000, 0x08000, CRC(80f73e2e) SHA1(820824fb10f7dfec6247b46dde8ff7124bde3734) ) ROM_REGION( 0x40000, "bg_tiles", ROMREGION_DISPOSE ) @@ -5121,7 +5713,7 @@ ROM_START( chopper ) ROM_LOAD( "up03_l1.rom", 0x0400, 0x0400, CRC(15359fc3) SHA1(4ced674fb18b80ebe5fd6459e0fb9542461dbc74) ) /* green */ ROM_LOAD( "up03_k2.rom", 0x0800, 0x0400, CRC(79b50f7d) SHA1(41579e498046570a6a74309310b5341fcde9c7de) ) /* blue */ - ROM_REGION( 0x8000, "fg_tiles", ROMREGION_DISPOSE ) + ROM_REGION( 0x8000, "tx_tiles", ROMREGION_DISPOSE ) ROM_LOAD( "kk_05.rom", 0x0000, 0x8000, CRC(defc0987) SHA1(ea8eca852aadce90857eb8e65d78631409faac01) ) ROM_REGION( 0x40000, "bg_tiles", ROMREGION_DISPOSE ) @@ -5168,7 +5760,7 @@ ROM_START( choppera ) ROM_LOAD( "up03_l1.rom", 0x0400, 0x0400, CRC(15359fc3) SHA1(4ced674fb18b80ebe5fd6459e0fb9542461dbc74) ) /* green */ ROM_LOAD( "up03_k2.rom", 0x0800, 0x0400, CRC(79b50f7d) SHA1(41579e498046570a6a74309310b5341fcde9c7de) ) /* blue */ - ROM_REGION( 0x8000, "fg_tiles", ROMREGION_DISPOSE ) + ROM_REGION( 0x8000, "tx_tiles", ROMREGION_DISPOSE ) ROM_LOAD( "kk_05.rom", 0x0000, 0x8000, CRC(defc0987) SHA1(ea8eca852aadce90857eb8e65d78631409faac01) ) ROM_REGION( 0x40000, "bg_tiles", ROMREGION_DISPOSE ) @@ -5215,7 +5807,7 @@ ROM_START( chopperb ) ROM_LOAD( "up03_l1.rom", 0x0400, 0x0400, CRC(15359fc3) SHA1(4ced674fb18b80ebe5fd6459e0fb9542461dbc74) ) /* green */ ROM_LOAD( "up03_k2.rom", 0x0800, 0x0400, CRC(79b50f7d) SHA1(41579e498046570a6a74309310b5341fcde9c7de) ) /* blue */ - ROM_REGION( 0x8000, "fg_tiles", ROMREGION_DISPOSE ) + ROM_REGION( 0x8000, "tx_tiles", ROMREGION_DISPOSE ) ROM_LOAD( "kk_05.rom", 0x0000, 0x8000, CRC(defc0987) SHA1(ea8eca852aadce90857eb8e65d78631409faac01) ) ROM_REGION( 0x40000, "bg_tiles", ROMREGION_DISPOSE ) @@ -5262,7 +5854,7 @@ ROM_START( legofair ) ROM_LOAD( "up03_l1.rom", 0x0400, 0x0400, CRC(15359fc3) SHA1(4ced674fb18b80ebe5fd6459e0fb9542461dbc74) ) /* green */ ROM_LOAD( "up03_k2.rom", 0x0800, 0x0400, CRC(79b50f7d) SHA1(41579e498046570a6a74309310b5341fcde9c7de) ) /* blue */ - ROM_REGION( 0x8000, "fg_tiles", ROMREGION_DISPOSE ) + ROM_REGION( 0x8000, "tx_tiles", ROMREGION_DISPOSE ) ROM_LOAD( "kk_05.rom", 0x0000, 0x8000, CRC(defc0987) SHA1(ea8eca852aadce90857eb8e65d78631409faac01) ) ROM_REGION( 0x40000, "bg_tiles", ROMREGION_DISPOSE ) @@ -5308,7 +5900,7 @@ ROM_START( fsoccer ) ROM_LOAD( "1.8d", 0x400, 0x400, CRC(1bac8010) SHA1(16854b1b6f3d1be48a247796d65aeb90547099b6) ) /* green */ ROM_LOAD( "3.9e", 0x800, 0x400, CRC(dbeddb14) SHA1(6053b587a3c8272aefe728a7198a15aa7fb9b2fa) ) /* blue */ - ROM_REGION( 0x8000, "fg_tiles", ROMREGION_DISPOSE ) + ROM_REGION( 0x8000, "tx_tiles", ROMREGION_DISPOSE ) ROM_LOAD( "fs13.4n", 0x0000, 0x08000, CRC(0de7b7ad) SHA1(4fa54b2acf83f03d09d16fc054ad6623cafe0f4a) ) ROM_REGION( 0x50000, "bg_tiles", ROMREGION_DISPOSE ) @@ -5344,7 +5936,7 @@ ROM_START( fsoccerj ) ROM_LOAD( "1.8d", 0x400, 0x400, CRC(1bac8010) SHA1(16854b1b6f3d1be48a247796d65aeb90547099b6) ) /* green */ ROM_LOAD( "3.9e", 0x800, 0x400, CRC(dbeddb14) SHA1(6053b587a3c8272aefe728a7198a15aa7fb9b2fa) ) /* blue */ - ROM_REGION( 0x8000, "fg_tiles", ROMREGION_DISPOSE ) + ROM_REGION( 0x8000, "tx_tiles", ROMREGION_DISPOSE ) ROM_LOAD( "fs13.4n", 0x0000, 0x08000, CRC(0de7b7ad) SHA1(4fa54b2acf83f03d09d16fc054ad6623cafe0f4a) ) ROM_REGION( 0x50000, "bg_tiles", ROMREGION_DISPOSE ) @@ -5380,7 +5972,7 @@ ROM_START( fsoccerb ) ROM_LOAD( "1.8d", 0x400, 0x400, CRC(1bac8010) SHA1(16854b1b6f3d1be48a247796d65aeb90547099b6) ) /* green */ ROM_LOAD( "3.9e", 0x800, 0x400, CRC(dbeddb14) SHA1(6053b587a3c8272aefe728a7198a15aa7fb9b2fa) ) /* blue */ - ROM_REGION( 0x8000, "fg_tiles", ROMREGION_DISPOSE ) + ROM_REGION( 0x8000, "tx_tiles", ROMREGION_DISPOSE ) ROM_LOAD( "fs13.4n", 0x0000, 0x08000, CRC(0de7b7ad) SHA1(4fa54b2acf83f03d09d16fc054ad6623cafe0f4a) ) ROM_REGION( 0x50000, "bg_tiles", ROMREGION_DISPOSE ) @@ -5418,7 +6010,7 @@ ROM_START( tdfever ) ROM_LOAD( "up03_d8.rom", 0x400, 0x00400, CRC(9c4a9198) SHA1(2d9be23c6a622eba5d3fb0d9912bad03658e563b) ) ROM_LOAD( "up03_e9.rom", 0x800, 0x00400, CRC(c93c18e8) SHA1(9d4ca20c44bd35aabccab5f94cb45057361ccd99) ) - ROM_REGION( 0x8000, "fg_tiles", ROMREGION_DISPOSE ) + ROM_REGION( 0x8000, "tx_tiles", ROMREGION_DISPOSE ) ROM_LOAD( "td14ver3.4n", 0x0000, 0x8000, CRC(e841bf1a) SHA1(ba93163b00e973eb5da9ddc64becce2bbe9ede05) ) ROM_REGION( 0x50000, "bg_tiles", ROMREGION_DISPOSE ) @@ -5458,7 +6050,7 @@ ROM_START( tdfeverj ) ROM_LOAD( "up03_d8.rom", 0x400, 0x00400, CRC(9c4a9198) SHA1(2d9be23c6a622eba5d3fb0d9912bad03658e563b) ) /* green */ ROM_LOAD( "up03_e9.rom", 0x800, 0x00400, CRC(c93c18e8) SHA1(9d4ca20c44bd35aabccab5f94cb45057361ccd99) ) /* blue */ - ROM_REGION( 0x8000, "fg_tiles", ROMREGION_DISPOSE ) + ROM_REGION( 0x8000, "tx_tiles", ROMREGION_DISPOSE ) ROM_LOAD( "up01_n4.rom", 0x0000, 0x8000, CRC(af9bced5) SHA1(ec8b9c0649d33e4b0ed4f7d84530016581370278) ) ROM_REGION( 0x50000, "bg_tiles", ROMREGION_DISPOSE ) @@ -5498,7 +6090,7 @@ ROM_START( tdfever2 ) ROM_LOAD( "up03_d82.rom", 0x400, 0x00400, CRC(ac9df947) SHA1(214855e1015f7b519e336159c6ea62ab1f576353) ) ROM_LOAD( "up03_e92.rom", 0x800, 0x00400, CRC(73cdf192) SHA1(63d1aa1b00035bbfe5bebd9bc9992a5d6f5abd10) ) - ROM_REGION( 0x8000, "fg_tiles", ROMREGION_DISPOSE ) + ROM_REGION( 0x8000, "tx_tiles", ROMREGION_DISPOSE ) ROM_LOAD( "td06.3n", 0x0000, 0x8000, CRC(d6521b0d) SHA1(79aba420b2f039d580892fa34de5d63be1a4f222) ) ROM_REGION( 0x60000, "bg_tiles", ROMREGION_DISPOSE ) @@ -5535,6 +6127,11 @@ static DRIVER_INIT( countryc ) } + +GAME( 1983, marvins, 0, marvins, marvins, 0, ROT270, "SNK", "Marvin's Maze", 0 ) +GAME( 1984, vangrd2, 0, vangrd2, vangrd2, 0, ROT270, "SNK", "Vanguard II", 0 ) +GAME( 1984, madcrash, 0, vangrd2, madcrash, 0, ROT0, "SNK", "Mad Crasher", 0 ) + GAME( 1984, jcross, 0, jcross, jcross, 0, ROT270, "SNK", "Jumping Cross", 0 ) GAME( 1984, sgladiat, 0, sgladiat, sgladiat, 0, ROT0, "SNK", "Gladiator 1984", 0 ) GAME( 1985, hal21, 0, hal21, hal21, 0, ROT270, "SNK", "HAL21", 0 ) diff --git a/src/mame/includes/snk.h b/src/mame/includes/snk.h index e67c6042ce4..2c6efa7f6c0 100644 --- a/src/mame/includes/snk.h +++ b/src/mame/includes/snk.h @@ -19,6 +19,8 @@ extern WRITE8_HANDLER( snk_cpuB_nmi_ack_w ); extern PALETTE_INIT( tnk3 ); +extern VIDEO_START( marvins ); +extern VIDEO_START( madcrash ); extern VIDEO_START( jcross ); extern VIDEO_START( sgladiat ); extern VIDEO_START( hal21 ); @@ -28,11 +30,14 @@ extern VIDEO_START( ikari ); extern VIDEO_START( gwar ); extern VIDEO_START( tdfever ); +extern VIDEO_UPDATE( marvins ); extern VIDEO_UPDATE( tnk3 ); extern VIDEO_UPDATE( ikari ); extern VIDEO_UPDATE( gwar ); extern VIDEO_UPDATE( tdfever ); +extern WRITE8_HANDLER( snk_fg_scrollx_w ); +extern WRITE8_HANDLER( snk_fg_scrolly_w ); extern WRITE8_HANDLER( snk_bg_scrollx_w ); extern WRITE8_HANDLER( snk_bg_scrolly_w ); extern WRITE8_HANDLER( snk_sp16_scrollx_w ); @@ -40,8 +45,12 @@ extern WRITE8_HANDLER( snk_sp16_scrolly_w ); extern WRITE8_HANDLER( snk_sp32_scrollx_w ); extern WRITE8_HANDLER( snk_sp32_scrolly_w ); +extern WRITE8_HANDLER( snk_sprite_split_point_w ); +extern WRITE8_HANDLER( marvins_palette_bank_w ); +extern WRITE8_HANDLER( marvins_scroll_msb_w ); extern WRITE8_HANDLER( jcross_scroll_msb_w ); extern WRITE8_HANDLER( sgladiat_scroll_msb_w ); +extern WRITE8_HANDLER( marvins_flipscreen_w ); extern WRITE8_HANDLER( sgladiat_flipscreen_w ); extern WRITE8_HANDLER( hal21_flipscreen_w ); extern WRITE8_HANDLER( tnk3_videoattrs_w ); @@ -50,19 +59,20 @@ extern WRITE8_HANDLER( aso_bg_bank_w ); extern WRITE8_HANDLER( ikari_bg_scroll_msb_w ); extern WRITE8_HANDLER( ikari_sp_scroll_msb_w ); extern WRITE8_HANDLER( ikari_unknown_video_w ); -extern WRITE8_HANDLER( gwar_fg_bank_w ); +extern WRITE8_HANDLER( gwar_tx_bank_w ); extern WRITE8_HANDLER( gwar_videoattrs_w ); -extern WRITE8_HANDLER( gwar_sprite_split_point_w ); extern WRITE8_HANDLER( gwara_videoattrs_w ); extern WRITE8_HANDLER( gwara_sp_scroll_msb_w ); extern WRITE8_HANDLER( tdfever_sp_scroll_msb_w ); extern WRITE8_HANDLER( tdfever_spriteram_w ); +extern UINT8 *snk_tx_videoram; extern UINT8 *snk_fg_videoram; extern UINT8 *snk_bg_videoram; -extern WRITE8_HANDLER( snk_fg_videoram_w ); +extern WRITE8_HANDLER( snk_tx_videoram_w ); extern WRITE8_HANDLER( snk_bg_videoram_w ); -extern WRITE8_HANDLER( aso_bg_videoram_w ); +extern WRITE8_HANDLER( marvins_fg_videoram_w ); +extern WRITE8_HANDLER( marvins_bg_videoram_w ); /*----------- defined in drivers/hal21.c -----------*/ diff --git a/src/mame/mame.mak b/src/mame/mame.mak index bbd933b0db1..3495734268e 100644 --- a/src/mame/mame.mak +++ b/src/mame/mame.mak @@ -264,6 +264,7 @@ SOUNDS += NAMCO_CUS30 SOUNDS += NAMCO_52XX SOUNDS += NAMCO_63701X SOUNDS += NAMCONA +SOUNDS += SNKWAVE SOUNDS += C140 SOUNDS += C352 SOUNDS += TMS36XX @@ -1266,7 +1267,6 @@ $(MAMEOBJ)/snk.a: \ $(DRIVERS)/hng64.o $(VIDEO)/hng64.o \ $(DRIVERS)/lasso.o $(VIDEO)/lasso.o \ $(DRIVERS)/mainsnk.o $(VIDEO)/mainsnk.o \ - $(DRIVERS)/marvins.o $(VIDEO)/marvins.o \ $(DRIVERS)/munchmo.o $(VIDEO)/munchmo.o \ $(DRIVERS)/prehisle.o $(VIDEO)/prehisle.o \ $(DRIVERS)/rockola.o $(AUDIO)/rockola.o $(VIDEO)/rockola.o \ diff --git a/src/mame/video/marvins.c b/src/mame/video/marvins.c deleted file mode 100644 index d90b7babfbb..00000000000 --- a/src/mame/video/marvins.c +++ /dev/null @@ -1,476 +0,0 @@ -#include "driver.h" -#include "cpu/z80/z80.h" -#include "snk.h" - -int marvins_gamegroup; - -static int flipscreen, sprite_flip_adjust; -static tilemap *fg_tilemap, *bg_tilemap, *tx_tilemap; -static UINT8 bg_color, fg_color, old_bg_color, old_fg_color; -static rectangle tilemap_clip; -static int video_bank = 0; - -/*************************************************************************** -** -** Palette Handling: -** -** Each color entry is encoded by 12 bits in color proms -** -** There are sixteen 8-color sprite palettes -** sprite palette is selected by a nibble of spriteram -** -** There are eight 16-color text layer character palettes -** character palette is determined by character_number -** -** Background and Foreground tilemap layers each have eight 16-color -** palettes. A palette bank select register is associated with the whole -** layer. -** -***************************************************************************/ - -WRITE8_HANDLER( marvins_palette_bank_w ) -{ - bg_color = data>>4; - fg_color = data&0xf; -} - -static void stuff_palette( running_machine *machine, int source_index, int dest_index, int num_colors ) -{ - UINT8 *color_prom = memory_region(machine, "proms") + source_index; - int i; - for( i=0; i<num_colors; i++ ) - { - int bit0=0,bit1,bit2,bit3; - int red, green, blue; - - bit0 = (color_prom[0x800] >> 2) & 0x01; // ? - bit1 = (color_prom[0x000] >> 1) & 0x01; - bit2 = (color_prom[0x000] >> 2) & 0x01; - bit3 = (color_prom[0x000] >> 3) & 0x01; - red = 0x0e * bit0 + 0x1f * bit1 + 0x43 * bit2 + 0x8f * bit3; - - bit0 = (color_prom[0x800] >> 1) & 0x01; // ? - bit1 = (color_prom[0x400] >> 2) & 0x01; - bit2 = (color_prom[0x400] >> 3) & 0x01; - bit3 = (color_prom[0x000] >> 0) & 0x01; - green = 0x0e * bit0 + 0x1f * bit1 + 0x43 * bit2 + 0x8f * bit3; - - bit0 = (color_prom[0x800] >> 0) & 0x01; // ? - bit1 = (color_prom[0x800] >> 3) & 0x01; // ? - bit2 = (color_prom[0x400] >> 0) & 0x01; - bit3 = (color_prom[0x400] >> 1) & 0x01; - blue = 0x0e * bit0 + 0x1f * bit1 + 0x43 * bit2 + 0x8f * bit3; - - palette_set_color( machine, dest_index++, MAKE_RGB(red, green, blue) ); - color_prom++; - } - - for (i=0; i<=5; i++) gfx_drawmode_table[i] = DRAWMODE_SOURCE; - - gfx_drawmode_table[6] = DRAWMODE_SHADOW; - gfx_drawmode_table[7] = DRAWMODE_NONE; -} - -static void update_palette(running_machine *machine, int type ) -{ - if( bg_color!=old_bg_color ) - { - stuff_palette( machine, 256+16*(bg_color&0x7), (0x11-type)*16, 16 ); - old_bg_color = bg_color; - } - - if( fg_color!=old_fg_color ) - { - stuff_palette( machine, 128+16*(fg_color&0x7), (0x10+type)*16, 16 ); - old_fg_color = fg_color; - } -} - -/*************************************************************************** -** -** Memory Handlers -** -***************************************************************************/ - -#ifdef UNUSED_FUNCTION -WRITE8_HANDLER( marvins_spriteram_w ) -{ - spriteram[offset] = data; -} -#endif - -WRITE8_HANDLER( marvins_foreground_ram_w ) -{ - spriteram_2[offset] = data; - if (offset < 0x800 && !video_bank) tilemap_mark_tile_dirty(fg_tilemap,offset); - else if (offset >= 0x800 && video_bank) tilemap_mark_tile_dirty(fg_tilemap,offset - 0x800); -} - -WRITE8_HANDLER( marvins_background_ram_w ) -{ - spriteram_3[offset] = data; - if (offset < 0x800 && !video_bank) tilemap_mark_tile_dirty(bg_tilemap,offset); - else if (offset >= 0x800 && video_bank) tilemap_mark_tile_dirty(bg_tilemap,offset - 0x800); -} - -WRITE8_HANDLER( marvins_text_ram_w ) -{ - videoram[offset] = data; - if (offset < 0x400) tilemap_mark_tile_dirty(tx_tilemap,offset); -} - -/*************************************************************************** -** -** Callbacks for Tilemap Manager -** -***************************************************************************/ - -static TILE_GET_INFO( get_bg_tilemap_info ) -{ - SET_TILE_INFO( - 2, - spriteram_3[tile_index + video_bank * 0x800], - 0, - 0); -} - -static TILE_GET_INFO( get_fg_tilemap_info ) -{ - SET_TILE_INFO( - 1, - spriteram_2[tile_index + video_bank * 0x800], - 0, - 0); -} - -static TILE_GET_INFO( get_tx_tilemap_info ) -{ - int tile_number = videoram[tile_index]; - SET_TILE_INFO( - 0, - tile_number, - (tile_number>>5), - 0); -} - -/*************************************************************************** -** -** Video Initialization -** -***************************************************************************/ - -VIDEO_START( marvins ) -{ - flipscreen = -1; old_bg_color = old_fg_color = -1; - - stuff_palette( machine, 0, 0, 16*8 ); /* load sprite colors */ - stuff_palette( machine, 16*8*3, 16*8, 16*8 ); /* load text colors */ - - fg_tilemap = tilemap_create(get_fg_tilemap_info,tilemap_scan_cols,8,8,64,32); - bg_tilemap = tilemap_create(get_bg_tilemap_info,tilemap_scan_cols,8,8,64,32); - tx_tilemap = tilemap_create(get_tx_tilemap_info,tilemap_scan_cols,8,8,32,32); - - { - tilemap_clip = *video_screen_get_visible_area(machine->primary_screen); - if (marvins_gamegroup != 1) // not Mad Crasher - { - tilemap_clip.max_x-=16; - tilemap_clip.min_x+=16; - } - - tilemap_set_transparent_pen(fg_tilemap,0xf); - tilemap_set_transparent_pen(bg_tilemap,0xf); - tilemap_set_transparent_pen(tx_tilemap,0xf); - - switch (marvins_gamegroup) - { - case 0: // Marvin's Maze - tilemap_set_scrolldx( bg_tilemap, 271, 287 ); - tilemap_set_scrolldy( bg_tilemap, 0, -40 ); - - tilemap_set_scrolldx( fg_tilemap, 15, 13+18 ); - tilemap_set_scrolldy( fg_tilemap, 0, -40 ); - - tilemap_set_scrolldx( tx_tilemap, 16, 16 ); - tilemap_set_scrolldy( tx_tilemap, 0, 0 ); - - sprite_flip_adjust = 256+182+1; - break; - - case 1: // Mad Crasher - tilemap_set_scrolldx( bg_tilemap, 256, 0 ); - tilemap_set_scrolldy( bg_tilemap, 12, 0 ); - - tilemap_set_scrolldx( fg_tilemap, 0, 0 ); - tilemap_set_scrolldy( fg_tilemap, 6, -24 ); - - tilemap_set_scrolldx( tx_tilemap, 16, 16 ); - tilemap_set_scrolldy( tx_tilemap, 0, +8 ); - break; - - case 2: // VanguardII - tilemap_set_scrolldx( bg_tilemap, 7, +14 ); - tilemap_set_scrolldy( bg_tilemap, -20, -60 ); - - tilemap_set_scrolldx( fg_tilemap, 15, +32 ); - tilemap_set_scrolldy( fg_tilemap, 0, -40 ); - - tilemap_set_scrolldx( tx_tilemap, 16, 16 ); - tilemap_set_scrolldy( tx_tilemap, 0, 0 ); - - sprite_flip_adjust = 256+182; - break; - } - } -} - -/*************************************************************************** -** -** Screen Refresh -** -***************************************************************************/ - -static void draw_status(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect ) -{ - const UINT8 *base = videoram+0x400; - const gfx_element *gfx = machine->gfx[0]; - int row; - if (!flipscreen) - for( row=0; row<4; row++ ) - { - int sy,sx = (row&1)*8; - const UINT8 *source = base + (row&1)*32; - if( row>1 ) - { - sx+=256+16; - } - else - { - source+=30*32; - } - - for( sy=0; sy<256; sy+=8 ) - { - int tile_number = *source++; - drawgfx( bitmap, gfx, - tile_number, tile_number>>5, - 0,0, - sx,sy, - cliprect, - TRANSPARENCY_NONE, 0xf ); - } - } - else - for( row=0; row<4; row++ ) - { - int sy,sx = (row&1)*8; - const UINT8 *source = base + 30*32 + 32 - (row&1)*32; - if( row>1 ) - { - sx+=256+16; - } - else - { - source-=30*32; - } - - for( sy=255; sy>=0; sy-=8 ) - { - int tile_number = *source++; - drawgfx( bitmap, gfx, - tile_number, tile_number>>5, - 1,1, - sx,sy-5*8, - cliprect, - TRANSPARENCY_NONE, 0xf ); - } - } -} - -static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect, int scrollx, int scrolly, - int priority, UINT8 sprite_partition ) -{ - const gfx_element *gfx = machine->gfx[3]; - const UINT8 *source, *finish; - - if( sprite_partition>0x64 ) sprite_partition = 0x64; - - if( priority ) - { - source = spriteram + sprite_partition; - finish = spriteram + 0x64; - } - else - { - source = spriteram; - finish = spriteram + sprite_partition; - } - - while( source<finish ) - { - int attributes = source[3]; /* Y?F? CCCC */ - int tile_number = source[1]; - int sy = source[0] - scrolly; - int sx = source[2] - scrollx + ((attributes&0x80)?256:0); - int color = attributes&0xf; - int flipy = (attributes&0x20); - int flipx = 0; - - if( flipscreen ) - { - if( flipy ) - { - flipx = 1; flipy = 0; - } - else - { - flipx = flipy = 1; - } - sx = sprite_flip_adjust-sx; - sy = 246-sy; - } - - sx = (256-sx) & 0x1ff; - sy = sy & 0xff; - if (sx > 512-16) sx -= 512; - if (sy > 256-16) sy -= 256; - - drawgfx( bitmap,gfx, - tile_number, - color, - flipx, flipy, - sx, sy, - cliprect,TRANSPARENCY_PEN_TABLE,7); - - source+=4; - } -} - -VIDEO_UPDATE( marvins ) -{ - cpuintrf_push_context(0); - { - UINT8 sprite_partition = program_read_byte(0xfe00); - - int attributes = program_read_byte(0x8600); /* 0x20: normal, 0xa0: video flipped */ - int scroll_attributes = program_read_byte(0xff00); - int sprite_scrolly = program_read_byte(0xf800); - int sprite_scrollx = program_read_byte(0xf900); - - int bg_scrolly = program_read_byte(0xfa00); - int bg_scrollx = program_read_byte(0xfb00); - int fg_scrolly = program_read_byte(0xfc00); - int fg_scrollx = program_read_byte(0xfd00); - - rectangle finalclip = tilemap_clip; - sect_rect(&finalclip, cliprect); - - if(video_bank != ((attributes & 8) >> 3)) - { - video_bank = ((attributes & 8) >> 3); - - tilemap_mark_all_tiles_dirty(bg_tilemap); - tilemap_mark_all_tiles_dirty(fg_tilemap); - } - - if( (scroll_attributes & 4)==0 ) bg_scrollx += 256; - if( scroll_attributes & 1 ) sprite_scrollx += 256; - if( scroll_attributes & 2 ) fg_scrollx += 256; - - /* palette bank for background/foreground is set by a memory-write handler */ - update_palette(screen->machine, 0); - - if( flipscreen != (attributes&0x80) ) - { - flipscreen = attributes&0x80; - tilemap_set_flip( ALL_TILEMAPS, flipscreen?TILEMAP_FLIPY|TILEMAP_FLIPX:0); - } - - tilemap_set_scrollx( bg_tilemap, 0, bg_scrollx ); - tilemap_set_scrolly( bg_tilemap, 0, bg_scrolly ); - tilemap_set_scrollx( fg_tilemap, 0, fg_scrollx ); - tilemap_set_scrolly( fg_tilemap, 0, fg_scrolly ); - tilemap_set_scrollx( tx_tilemap, 0, 0 ); - tilemap_set_scrolly( tx_tilemap, 0, 0 ); - - tilemap_draw(bitmap,&finalclip,fg_tilemap,TILEMAP_DRAW_OPAQUE ,0); - draw_sprites(screen->machine,bitmap,cliprect, sprite_scrollx+29+1, sprite_scrolly+16, 0, sprite_partition ); - tilemap_draw(bitmap,&finalclip,bg_tilemap,0 ,0); - draw_sprites(screen->machine,bitmap,cliprect, sprite_scrollx+29+1, sprite_scrolly+16, 1, sprite_partition ); - tilemap_draw(bitmap,&finalclip,tx_tilemap,0 ,0); - draw_status(screen->machine,bitmap,cliprect ); - } - cpuintrf_pop_context(); - return 0; -} - -VIDEO_UPDATE( madcrash ) -{ -/*************************************************************************** -** -** Game Specific Initialization -** -** madcrash_vreg defines an offset for the video registers which is -** different in Mad Crasher and Vanguard II. -** -** init_sound defines the location of the polled sound CPU busy bit, -** which also varies across games. -** -***************************************************************************/ - - cpuintrf_push_context(0); - { - int madcrash_vreg = (marvins_gamegroup == 1) ? 0x00 : 0xf1; // Mad Crasher=0x00, VanguardII=0xf1 - - UINT8 sprite_partition = program_read_byte(0xfa00); - - int attributes = program_read_byte(0x8600+madcrash_vreg); /* 0x20: normal, 0xa0: video flipped */ - int bg_scrolly = program_read_byte(0xf800+madcrash_vreg); - int bg_scrollx = program_read_byte(0xf900+madcrash_vreg); - int scroll_attributes = program_read_byte(0xfb00+madcrash_vreg); - int sprite_scrolly = program_read_byte(0xfc00+madcrash_vreg); - int sprite_scrollx = program_read_byte(0xfd00+madcrash_vreg); - int fg_scrolly = program_read_byte(0xfe00+madcrash_vreg); - int fg_scrollx = program_read_byte(0xff00+madcrash_vreg); - - rectangle finalclip = tilemap_clip; - sect_rect(&finalclip, cliprect); - - if(video_bank != ((attributes & 8) >> 3)) - { - video_bank = ((attributes & 8) >> 3); - - tilemap_mark_all_tiles_dirty(bg_tilemap); - tilemap_mark_all_tiles_dirty(fg_tilemap); - } - - if( (scroll_attributes & 4)==0 ) bg_scrollx += 256; - if( scroll_attributes & 1 ) sprite_scrollx += 256; - if( scroll_attributes & 2 ) fg_scrollx += 256; - - marvins_palette_bank_w(screen->machine, 0, program_read_byte(0xc800+madcrash_vreg)); - update_palette(screen->machine, 1); - - if( flipscreen != (attributes&0x80) ) - { - flipscreen = attributes&0x80; - tilemap_set_flip( ALL_TILEMAPS, flipscreen?TILEMAP_FLIPY|TILEMAP_FLIPX:0); - } - tilemap_set_scrollx( bg_tilemap, 0, bg_scrollx ); - tilemap_set_scrolly( bg_tilemap, 0, bg_scrolly ); - tilemap_set_scrollx( fg_tilemap, 0, fg_scrollx ); - tilemap_set_scrolly( fg_tilemap, 0, fg_scrolly ); - tilemap_set_scrollx( tx_tilemap, 0, 0 ); - tilemap_set_scrolly( tx_tilemap, 0, 0 ); - - - tilemap_draw(bitmap,&finalclip,bg_tilemap,TILEMAP_DRAW_OPAQUE ,0); - draw_sprites(screen->machine,bitmap,cliprect, sprite_scrollx+29, sprite_scrolly+17, 0, sprite_partition ); - tilemap_draw(bitmap,&finalclip,fg_tilemap,0 ,0); - draw_sprites(screen->machine,bitmap,cliprect, sprite_scrollx+29, sprite_scrolly+17, 1, sprite_partition ); - tilemap_draw(bitmap,&finalclip,tx_tilemap,0 ,0); - draw_status(screen->machine,bitmap,cliprect ); - } - cpuintrf_pop_context(); - return 0; -} diff --git a/src/mame/video/snk.c b/src/mame/video/snk.c index 8e5789d773e..29b5ad4e515 100644 --- a/src/mame/video/snk.c +++ b/src/mame/video/snk.c @@ -22,12 +22,15 @@ *******************************************************************************/ +UINT8 *snk_tx_videoram; UINT8 *snk_fg_videoram; UINT8 *snk_bg_videoram; +static tilemap *tx_tilemap; static tilemap *fg_tilemap; static tilemap *bg_tilemap; -static int bg_scrollx, bg_scrolly, sp16_scrollx, sp16_scrolly, sp32_scrollx, sp32_scrolly; +static int fg_scrollx, fg_scrolly, bg_scrollx, bg_scrolly; +static int sp16_scrollx, sp16_scrolly, sp32_scrollx, sp32_scrolly; static UINT8 sprite_split_point; static int num_sprites, yscroll_mask; @@ -40,28 +43,24 @@ PALETTE_INIT( tnk3 ) int i; int num_colors = 0x400; - /* - palette format is RRRG GGBB B??? the three unknown bits are used but - I'm not sure how, I'm currently using them as least significant bit. - */ for( i=0; i<num_colors; i++ ) { int bit0=0,bit1,bit2,bit3,r,g,b; - bit0 = (color_prom[i + 2*num_colors] >> 2) & 0x01; + bit0 = (color_prom[i + 2*num_colors] >> 3) & 0x01; bit1 = (color_prom[i] >> 1) & 0x01; bit2 = (color_prom[i] >> 2) & 0x01; bit3 = (color_prom[i] >> 3) & 0x01; r = 0x0e * bit0 + 0x1f * bit1 + 0x43 * bit2 + 0x8f * bit3; - bit0 = (color_prom[i + 2*num_colors] >> 1) & 0x01; + bit0 = (color_prom[i + 2*num_colors] >> 2) & 0x01; bit1 = (color_prom[i + num_colors] >> 2) & 0x01; bit2 = (color_prom[i + num_colors] >> 3) & 0x01; bit3 = (color_prom[i] >> 0) & 0x01; g = 0x0e * bit0 + 0x1f * bit1 + 0x43 * bit2 + 0x8f * bit3; bit0 = (color_prom[i + 2*num_colors] >> 0) & 0x01; - bit1 = (color_prom[i + 2*num_colors] >> 3) & 0x01; + bit1 = (color_prom[i + 2*num_colors] >> 1) & 0x01; bit2 = (color_prom[i + num_colors] >> 0) & 0x01; bit3 = (color_prom[i + num_colors] >> 1) & 0x01; b = 0x0e * bit0 + 0x1f * bit1 + 0x43 * bit2 + 0x8f * bit3; @@ -72,7 +71,7 @@ PALETTE_INIT( tnk3 ) /**************************************************************************************/ -static TILEMAP_MAPPER( tnk3_fg_scan_cols ) +static TILEMAP_MAPPER( marvins_tx_scan_cols ) { // tilemap is 36x28, the central part is from the first RAM page and the // extra 4 columns are from the second page @@ -83,9 +82,9 @@ static TILEMAP_MAPPER( tnk3_fg_scan_cols ) return row + (col << 5); } -static TILE_GET_INFO( tnk3_get_fg_tile_info ) +static TILE_GET_INFO( marvins_get_tx_tile_info ) { - int code = snk_fg_videoram[tile_index]; + int code = snk_tx_videoram[tile_index]; int color = code >> 5; SET_TILE_INFO(0, code, @@ -93,18 +92,18 @@ static TILE_GET_INFO( tnk3_get_fg_tile_info ) tile_index & 0x400 ? TILE_FORCE_LAYER0 : 0); } -static TILE_GET_INFO( ikari_get_fg_tile_info ) +static TILE_GET_INFO( ikari_get_tx_tile_info ) { - int code = snk_fg_videoram[tile_index]; + int code = snk_tx_videoram[tile_index]; SET_TILE_INFO(0, code, 0, tile_index & 0x400 ? TILE_FORCE_LAYER0 : 0); } -static TILE_GET_INFO( gwar_get_fg_tile_info ) +static TILE_GET_INFO( gwar_get_tx_tile_info ) { - int code = snk_fg_videoram[tile_index]; + int code = snk_tx_videoram[tile_index]; SET_TILE_INFO(0, code, 0, @@ -112,6 +111,25 @@ static TILE_GET_INFO( gwar_get_fg_tile_info ) } +static TILE_GET_INFO( marvins_get_fg_tile_info ) +{ + int code = snk_fg_videoram[tile_index]; + SET_TILE_INFO(1, + code, + 0, + 0); +} + +static TILE_GET_INFO( marvins_get_bg_tile_info ) +{ + int code = snk_bg_videoram[tile_index]; + SET_TILE_INFO(2, + code, + 0, + 0); +} + + static TILE_GET_INFO( aso_get_bg_tile_info ) { int code = snk_bg_videoram[tile_index]; @@ -200,15 +218,34 @@ static VIDEO_START( snk_4bpp_shadow ) } +VIDEO_START( marvins ) +{ + VIDEO_START_CALL(snk_3bpp_shadow); + + tx_tilemap = tilemap_create(marvins_get_tx_tile_info, marvins_tx_scan_cols, 8, 8, 36, 28); + fg_tilemap = tilemap_create(marvins_get_fg_tile_info, tilemap_scan_cols, 8, 8, 64, 32); + bg_tilemap = tilemap_create(marvins_get_bg_tile_info, tilemap_scan_cols, 8, 8, 64, 32); + + tilemap_set_transparent_pen(tx_tilemap,15); + tilemap_set_scrolldy(tx_tilemap, 8, 8); + + tilemap_set_transparent_pen(fg_tilemap,15); + tilemap_set_scrolldx(fg_tilemap, 15, 31); + tilemap_set_scrolldy(fg_tilemap, 8, -32); + + tilemap_set_scrolldx(bg_tilemap, 15, 31); + tilemap_set_scrolldy(bg_tilemap, 8, -32); +} + VIDEO_START( jcross ) { VIDEO_START_CALL(snk_3bpp_shadow); - fg_tilemap = tilemap_create(tnk3_get_fg_tile_info, tnk3_fg_scan_cols, 8, 8, 36, 28); - bg_tilemap = tilemap_create(aso_get_bg_tile_info, tilemap_scan_cols, 8, 8, 64, 64); + tx_tilemap = tilemap_create(marvins_get_tx_tile_info, marvins_tx_scan_cols, 8, 8, 36, 28); + bg_tilemap = tilemap_create(aso_get_bg_tile_info, tilemap_scan_cols, 8, 8, 64, 64); - tilemap_set_transparent_pen(fg_tilemap, 15); - tilemap_set_scrolldy(fg_tilemap, 8, 8); + tilemap_set_transparent_pen(tx_tilemap, 15); + tilemap_set_scrolldy(tx_tilemap, 8, 8); tilemap_set_scrolldx(bg_tilemap, 15, 24); tilemap_set_scrolldy(bg_tilemap, 8, -32); @@ -219,7 +256,16 @@ VIDEO_START( jcross ) VIDEO_START( sgladiat ) { - VIDEO_START_CALL(jcross); + VIDEO_START_CALL(snk_3bpp_shadow); + + tx_tilemap = tilemap_create(marvins_get_tx_tile_info, marvins_tx_scan_cols, 8, 8, 36, 28); + bg_tilemap = tilemap_create(aso_get_bg_tile_info, tilemap_scan_cols, 8, 8, 64, 32); + + tilemap_set_transparent_pen(tx_tilemap, 15); + tilemap_set_scrolldy(tx_tilemap, 8, 8); + + tilemap_set_scrolldx(bg_tilemap, 15, 24); + tilemap_set_scrolldy(bg_tilemap, 8, -32); num_sprites = 25; yscroll_mask = 0x0ff; @@ -250,11 +296,11 @@ VIDEO_START( tnk3 ) { VIDEO_START_CALL(snk_3bpp_shadow); - fg_tilemap = tilemap_create(tnk3_get_fg_tile_info, tnk3_fg_scan_cols, 8, 8, 36, 28); - bg_tilemap = tilemap_create(tnk3_get_bg_tile_info, tilemap_scan_cols, 8, 8, 64, 64); + tx_tilemap = tilemap_create(marvins_get_tx_tile_info, marvins_tx_scan_cols, 8, 8, 36, 28); + bg_tilemap = tilemap_create(tnk3_get_bg_tile_info, tilemap_scan_cols, 8, 8, 64, 64); - tilemap_set_transparent_pen(fg_tilemap, 15); - tilemap_set_scrolldy(fg_tilemap, 8, 8); + tilemap_set_transparent_pen(tx_tilemap, 15); + tilemap_set_scrolldy(tx_tilemap, 8, 8); tilemap_set_scrolldx(bg_tilemap, 15, 24); tilemap_set_scrolldy(bg_tilemap, 8, -32); @@ -267,11 +313,11 @@ VIDEO_START( ikari ) { VIDEO_START_CALL(snk_3bpp_shadow); - fg_tilemap = tilemap_create(ikari_get_fg_tile_info, tnk3_fg_scan_cols, 8, 8, 36, 28); - bg_tilemap = tilemap_create(ikari_get_bg_tile_info, tilemap_scan_cols, 16, 16, 32, 32); + tx_tilemap = tilemap_create(ikari_get_tx_tile_info, marvins_tx_scan_cols, 8, 8, 36, 28); + bg_tilemap = tilemap_create(ikari_get_bg_tile_info, tilemap_scan_cols, 16, 16, 32, 32); - tilemap_set_transparent_pen(fg_tilemap, 15); - tilemap_set_scrolldy(fg_tilemap, 8, 8); + tilemap_set_transparent_pen(tx_tilemap, 15); + tilemap_set_scrolldy(tx_tilemap, 8, 8); tilemap_set_scrolldx(bg_tilemap, 15, 24); tilemap_set_scrolldy(bg_tilemap, 8, -32); @@ -281,10 +327,10 @@ VIDEO_START( gwar ) { memset(empty_tile,0xf,sizeof(empty_tile)); - fg_tilemap = tilemap_create(gwar_get_fg_tile_info, tilemap_scan_cols, 8, 8, 50, 32); + tx_tilemap = tilemap_create(gwar_get_tx_tile_info, tilemap_scan_cols, 8, 8, 50, 32); bg_tilemap = tilemap_create(gwar_get_bg_tile_info, tilemap_scan_cols, 16, 16, 32, 32); - tilemap_set_transparent_pen(fg_tilemap, 15); + tilemap_set_transparent_pen(tx_tilemap, 15); tilemap_set_scrolldx(bg_tilemap, 16, 143); tilemap_set_scrolldy(bg_tilemap, 0, -32); @@ -299,22 +345,39 @@ VIDEO_START( tdfever ) /**************************************************************************************/ -WRITE8_HANDLER( snk_fg_videoram_w ) +WRITE8_HANDLER( snk_tx_videoram_w ) +{ + snk_tx_videoram[offset] = data; + tilemap_mark_tile_dirty(tx_tilemap, offset); +} + +WRITE8_HANDLER( marvins_fg_videoram_w ) { snk_fg_videoram[offset] = data; tilemap_mark_tile_dirty(fg_tilemap, offset); } +WRITE8_HANDLER( marvins_bg_videoram_w ) +{ + snk_bg_videoram[offset] = data; + tilemap_mark_tile_dirty(bg_tilemap, offset); +} + WRITE8_HANDLER( snk_bg_videoram_w ) { snk_bg_videoram[offset] = data; tilemap_mark_tile_dirty(bg_tilemap, offset >> 1); } -WRITE8_HANDLER( aso_bg_videoram_w ) + +WRITE8_HANDLER( snk_fg_scrollx_w ) { - snk_bg_videoram[offset] = data; - tilemap_mark_tile_dirty(bg_tilemap, offset); + fg_scrollx = (fg_scrollx & ~0xff) | data; +} + +WRITE8_HANDLER( snk_fg_scrolly_w ) +{ + fg_scrolly = (fg_scrolly & ~0xff) | data; } WRITE8_HANDLER( snk_bg_scrollx_w ) @@ -347,6 +410,24 @@ WRITE8_HANDLER( snk_sp32_scrolly_w ) sp32_scrolly = (sp32_scrolly & ~0xff) | data; } +WRITE8_HANDLER( snk_sprite_split_point_w ) +{ + sprite_split_point = data; +} + + +WRITE8_HANDLER( marvins_palette_bank_w ) +{ + tilemap_set_palette_offset(bg_tilemap, data & 0x70); + tilemap_set_palette_offset(fg_tilemap, (data & 0x07) << 4); +} + +WRITE8_HANDLER( marvins_flipscreen_w ) +{ + flip_screen_set(data & 0x80); + + // other bits unknown +} WRITE8_HANDLER( sgladiat_flipscreen_w ) { @@ -367,6 +448,13 @@ WRITE8_HANDLER( hal21_flipscreen_w ) // other bits unknown } +WRITE8_HANDLER( marvins_scroll_msb_w ) +{ + bg_scrollx = (bg_scrollx & 0xff) | ((data & 0x04) << 6); + fg_scrollx = (fg_scrollx & 0xff) | ((data & 0x02) << 7); + sp16_scrollx = (sp16_scrollx & 0xff) | ((data & 0x01) << 8); +} + WRITE8_HANDLER( jcross_scroll_msb_w ) { bg_scrolly = (bg_scrolly & 0xff) | ((data & 0x10) << 4); @@ -419,7 +507,7 @@ WRITE8_HANDLER( tnk3_videoattrs_w ) flip_screen_set(data & 0x80); - tilemap_set_pen_data_offset(fg_tilemap, ((data & 0x40) << 2) * machine->gfx[0]->char_modulo); + tilemap_set_pen_data_offset(tx_tilemap, ((data & 0x40) << 2) * machine->gfx[0]->char_modulo); bg_scrolly = (bg_scrolly & 0xff) | ((data & 0x10) << 4); sp16_scrolly = (sp16_scrolly & 0xff) | ((data & 0x08) << 5); @@ -460,14 +548,14 @@ if (data != 0x20 && // normal data != 0xaa) // victroad spurious during boot popmessage("attrs %02x contact MAMEDEV", data); - tilemap_set_palette_offset(fg_tilemap, (data & 0x01) << 4); - tilemap_set_pen_data_offset(fg_tilemap, ((data & 0x10) << 4) * machine->gfx[0]->char_modulo); + tilemap_set_palette_offset(tx_tilemap, (data & 0x01) << 4); + tilemap_set_pen_data_offset(tx_tilemap, ((data & 0x10) << 4) * machine->gfx[0]->char_modulo); } -WRITE8_HANDLER( gwar_fg_bank_w ) +WRITE8_HANDLER( gwar_tx_bank_w ) { - tilemap_set_palette_offset(fg_tilemap, (data & 0xf) << 4); - tilemap_set_pen_data_offset(fg_tilemap, ((data & 0x30) << 4) * machine->gfx[0]->char_modulo); + tilemap_set_palette_offset(tx_tilemap, (data & 0xf) << 4); + tilemap_set_pen_data_offset(tx_tilemap, ((data & 0x30) << 4) * machine->gfx[0]->char_modulo); } WRITE8_HANDLER( gwar_videoattrs_w ) @@ -498,11 +586,6 @@ WRITE8_HANDLER( gwara_sp_scroll_msb_w ) sp16_scrolly = (sp16_scrolly & 0xff) | ((data & 0x04) << 6); } -WRITE8_HANDLER( gwar_sprite_split_point_w ) -{ - sprite_split_point = data; -} - WRITE8_HANDLER( tdfever_sp_scroll_msb_w ) { sp32_scrolly = (sp32_scrolly & 0xff) | ((data & 0x80) << 1); @@ -525,6 +608,50 @@ WRITE8_HANDLER( tdfever_spriteram_w ) /**************************************************************************************/ +static void marvins_draw_sprites(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect, + const int scrollx, const int scrolly, const int from, const int to) +{ + const gfx_element *gfx = machine->gfx[3]; + const UINT8 *source, *finish; + + source = spriteram + from*4; + finish = spriteram + to*4; + + while( source<finish ) + { + int attributes = source[3]; /* Y?F? CCCC */ + int tile_number = source[1]; + int sx = scrollx + 301 - 15 - source[2] + ((attributes&0x80)?256:0); + int sy = -scrolly - 8 + source[0]; + int color = attributes&0xf; + int flipy = (attributes&0x20); + int flipx = 0; + + if (flip_screen_get()) + { + sx = 89 - 16 - sx; + sy = 262 - 16 - sy; + flipx = !flipx; + flipy = !flipy; + } + + sx &= 0x1ff; + sy &= 0xff; + if (sx > 512-16) sx -= 512; + if (sy > 256-16) sy -= 256; + + drawgfx( bitmap,gfx, + tile_number, + color, + flipx, flipy, + sx, sy, + cliprect,TRANSPARENCY_PEN_TABLE,7); + + source+=4; + } +} + + static void tnk3_draw_sprites(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect, const int xscroll, const int yscroll) { const gfx_element *gfx = machine->gfx[2]; @@ -535,7 +662,7 @@ static void tnk3_draw_sprites(running_machine *machine, bitmap_t *bitmap, const /* jcross and sgladiat have only 25 sprites, the others 50 */ - /* jcross has 256 tiles, attribute bit 6 MIGHT be x-flip (uncertain) */ + /* jcross has 256 tiles, attribute bit 6 is unused and bit 5 is y-flip */ /* sgladiat and tnk3 have 512 tiles, bit 6 is bank and bit 5 is y-flip */ /* athena has 1024 tiles, bit 6 and bit 5 are bank */ @@ -555,10 +682,6 @@ static void tnk3_draw_sprites(running_machine *machine, bitmap_t *bitmap, const { tile_number |= (attributes & 0x40) << 2; } - else // jcross - { - xflip = attributes & 0x40; // uncertain (not used?) - } if (gfx->total_elements > 512) // athena { @@ -726,6 +849,23 @@ static void tdfever_draw_sprites(running_machine *machine, bitmap_t *bitmap, con /**************************************************************/ +VIDEO_UPDATE( marvins ) +{ + tilemap_set_scrollx(bg_tilemap, 0, bg_scrollx); + tilemap_set_scrolly(bg_tilemap, 0, bg_scrolly); + tilemap_set_scrollx(fg_tilemap, 0, fg_scrollx); + tilemap_set_scrolly(fg_tilemap, 0, fg_scrolly); + + tilemap_draw(bitmap,cliprect,bg_tilemap,0 ,0); + marvins_draw_sprites(screen->machine,bitmap,cliprect, sp16_scrollx, sp16_scrolly, 0, sprite_split_point>>2 ); + tilemap_draw(bitmap,cliprect,fg_tilemap,0 ,0); + marvins_draw_sprites(screen->machine,bitmap,cliprect, sp16_scrollx, sp16_scrolly, sprite_split_point>>2, 25 ); + tilemap_draw(bitmap,cliprect,tx_tilemap,0 ,0); + + return 0; +} + + VIDEO_UPDATE( tnk3 ) { tilemap_set_scrollx(bg_tilemap, 0, bg_scrollx); @@ -733,7 +873,7 @@ VIDEO_UPDATE( tnk3 ) tilemap_draw(bitmap, cliprect, bg_tilemap, 0, 0); tnk3_draw_sprites(screen->machine, bitmap, cliprect, sp16_scrollx, sp16_scrolly); - tilemap_draw(bitmap, cliprect, fg_tilemap, 0, 0); + tilemap_draw(bitmap, cliprect, tx_tilemap, 0, 0); return 0; } @@ -750,7 +890,7 @@ VIDEO_UPDATE( ikari ) ikari_draw_sprites(screen->machine, bitmap, cliprect, 0, sp32_scrollx, sp32_scrolly, spriteram, 3 ); ikari_draw_sprites(screen->machine, bitmap, cliprect, 25, sp16_scrollx, sp16_scrolly, spriteram + 0x800, 2 ); - tilemap_draw(bitmap, cliprect, fg_tilemap, 0, 0); + tilemap_draw(bitmap, cliprect, tx_tilemap, 0, 0); return 0; } @@ -766,7 +906,7 @@ VIDEO_UPDATE( gwar ) tdfever_draw_sprites(screen->machine, bitmap, cliprect, sp32_scrollx, sp32_scrolly, spriteram, 3, 0, 0, 32 ); tdfever_draw_sprites(screen->machine, bitmap, cliprect, sp16_scrollx, sp16_scrolly, spriteram + 0x800, 2, 0, sprite_split_point, 64 ); - tilemap_draw(bitmap, cliprect, fg_tilemap, 0, 0); + tilemap_draw(bitmap, cliprect, tx_tilemap, 0, 0); return 0; } @@ -781,7 +921,7 @@ VIDEO_UPDATE( tdfever ) tdfever_draw_sprites(screen->machine, bitmap, cliprect, sp32_scrollx, sp32_scrolly, spriteram, 2, 1, 0, 32 ); - tilemap_draw(bitmap, cliprect, fg_tilemap, 0, 0); + tilemap_draw(bitmap, cliprect, tx_tilemap, 0, 0); return 0; } |