Added save state support and driver data struct to m10.c, m14.c, m52.c, m57.c, m58.c, m62.c, m63.c and travrusa.c.

Merged some include files and merged audio/fghtbskt.c in drivers/m63.c.
This commit is contained in:
Fabio Priuli 2009-11-18 06:47:40 +00:00
parent 693024974e
commit d8588f632f
25 changed files with 1312 additions and 1044 deletions

7
.gitattributes vendored
View File

@ -1149,7 +1149,6 @@ src/mame/audio/dkong.c svneol=native#text/plain
src/mame/audio/dragrace.c svneol=native#text/plain
src/mame/audio/exidy.c svneol=native#text/plain
src/mame/audio/exidy440.c svneol=native#text/plain
src/mame/audio/fghtbskt.c svneol=native#text/plain
src/mame/audio/firetrk.c svneol=native#text/plain
src/mame/audio/flower.c svneol=native#text/plain
src/mame/audio/galaga.c svneol=native#text/plain
@ -1165,7 +1164,6 @@ src/mame/audio/harddriv.c svneol=native#text/plain
src/mame/audio/hitme.c svneol=native#text/plain
src/mame/audio/invinco.c svneol=native#text/plain
src/mame/audio/irem.c svneol=native#text/plain
src/mame/audio/irem.h svneol=native#text/plain
src/mame/audio/jaguar.c svneol=native#text/plain
src/mame/audio/jedi.c svneol=native#text/plain
src/mame/audio/laserbat.c svneol=native#text/plain
@ -2422,6 +2420,7 @@ src/mame/includes/hyprduel.h svneol=native#text/plain
src/mame/includes/inufuku.h svneol=native#text/plain
src/mame/includes/iqblock.h svneol=native#text/plain
src/mame/includes/iremipt.h svneol=native#text/plain
src/mame/includes/iremz80.h svneol=native#text/plain
src/mame/includes/irobot.h svneol=native#text/plain
src/mame/includes/itech32.h svneol=native#text/plain
src/mame/includes/itech8.h svneol=native#text/plain
@ -2449,10 +2448,6 @@ src/mame/includes/lsasquad.h svneol=native#text/plain
src/mame/includes/lwings.h svneol=native#text/plain
src/mame/includes/m10.h svneol=native#text/plain
src/mame/includes/m107.h svneol=native#text/plain
src/mame/includes/m52.h svneol=native#text/plain
src/mame/includes/m57.h svneol=native#text/plain
src/mame/includes/m58.h svneol=native#text/plain
src/mame/includes/m62.h svneol=native#text/plain
src/mame/includes/m72.h svneol=native#text/plain
src/mame/includes/m79amb.h svneol=native#text/plain
src/mame/includes/m92.h svneol=native#text/plain

View File

@ -1,31 +0,0 @@
/*
Fighting Basketball PCM unsigned 8 bit mono samples
*/
#include "driver.h"
#include "sound/samples.h"
static INT16 *samplebuf;
WRITE8_HANDLER( fghtbskt_samples_w )
{
if( data & 1 )
{
const device_config *samples = devtag_get_device(space->machine, "samples");
sample_start_raw(samples, 0, samplebuf + ((data & 0xf0) << 8), 0x2000, 8000, 0);
}
}
SAMPLES_START( fghtbskt_sh_start )
{
running_machine *machine = device->machine;
int i, len = memory_region_length(machine, "samples");
UINT8 *ROM = memory_region(machine, "samples");
samplebuf = auto_alloc_array(machine, INT16, len);
for(i=0;i<len;i++)
samplebuf[i] = ((INT8)(ROM[i] ^ 0x80)) * 256;
}

View File

@ -10,8 +10,7 @@
#include "sound/ay8910.h"
#include "sound/msm5205.h"
#include "sound/discrete.h"
static UINT8 port1, port2;
#include "includes/iremz80.h"
/*************************************
@ -22,8 +21,15 @@ static UINT8 port1, port2;
static SOUND_START( irem_audio )
{
state_save_register_global(machine, port1);
state_save_register_global(machine, port2);
irem_z80_state *state = (irem_z80_state *)machine->driver_data;
state->adpcm1 = devtag_get_device(machine, "msm1");
state->adpcm2 = devtag_get_device(machine, "msm2");
state->ay1 = devtag_get_device(machine, "ay1");
state->ay2 = devtag_get_device(machine, "ay2");
state_save_register_global(machine, state->port1);
state_save_register_global(machine, state->port2);
}
@ -53,37 +59,38 @@ WRITE8_HANDLER( irem_sound_cmd_w )
static WRITE8_HANDLER( m6803_port1_w )
{
port1 = data;
irem_z80_state *state = (irem_z80_state *)space->machine->driver_data;
state->port1 = data;
}
static WRITE8_HANDLER( m6803_port2_w )
{
/* write latch */
if ((port2 & 0x01) && !(data & 0x01))
{
const device_config *ay1 = devtag_get_device(space->machine, "ay1");
const device_config *ay2 = devtag_get_device(space->machine, "ay2");
irem_z80_state *state = (irem_z80_state *)space->machine->driver_data;
/* write latch */
if ((state->port2 & 0x01) && !(data & 0x01))
{
/* control or data port? */
if (port2 & 0x04)
if (state->port2 & 0x04)
{
/* PSG 0 or 1? */
if (port2 & 0x08)
ay8910_address_w(ay1, 0, port1);
if (port2 & 0x10)
ay8910_address_w(ay2, 0, port1);
if (state->port2 & 0x08)
ay8910_address_w(state->ay1, 0, state->port1);
if (state->port2 & 0x10)
ay8910_address_w(state->ay2, 0, state->port1);
}
else
{
/* PSG 0 or 1? */
if (port2 & 0x08)
ay8910_data_w(ay1, 0, port1);
if (port2 & 0x10)
ay8910_data_w(ay2, 0, port1);
if (state->port2 & 0x08)
ay8910_data_w(state->ay1, 0, state->port1);
if (state->port2 & 0x10)
ay8910_data_w(state->ay2, 0, state->port1);
}
}
port2 = data;
state->port2 = data;
}
@ -96,11 +103,13 @@ static WRITE8_HANDLER( m6803_port2_w )
static READ8_HANDLER( m6803_port1_r )
{
irem_z80_state *state = (irem_z80_state *)space->machine->driver_data;
/* PSG 0 or 1? */
if (port2 & 0x08)
return ay8910_r(devtag_get_device(space->machine, "ay1"), 0);
if (port2 & 0x10)
return ay8910_r(devtag_get_device(space->machine, "ay2"), 0);
if (state->port2 & 0x08)
return ay8910_r(state->ay1, 0);
if (state->port2 & 0x10)
return ay8910_r(state->ay2, 0);
return 0xff;
}
@ -120,18 +129,17 @@ static READ8_HANDLER( m6803_port2_r )
static WRITE8_DEVICE_HANDLER( ay8910_0_portb_w )
{
const device_config *adpcm0 = devtag_get_device(device->machine, "msm1");
const device_config *adpcm1 = devtag_get_device(device->machine, "msm2");
irem_z80_state *state = (irem_z80_state *)device->machine->driver_data;
/* bits 2-4 select MSM5205 clock & 3b/4b playback mode */
msm5205_playmode_w(adpcm0, (data >> 2) & 7);
if (adpcm1 != NULL)
msm5205_playmode_w(adpcm1, ((data >> 2) & 4) | 3); /* always in slave mode */
msm5205_playmode_w(state->adpcm1, (data >> 2) & 7);
if (state->adpcm2 != NULL)
msm5205_playmode_w(state->adpcm2, ((data >> 2) & 4) | 3); /* always in slave mode */
/* bits 0 and 1 reset the two chips */
msm5205_reset_w(adpcm0, data & 1);
if (adpcm1 != NULL)
msm5205_reset_w(adpcm1, data & 2);
msm5205_reset_w(state->adpcm1, data & 1);
if (state->adpcm2 != NULL)
msm5205_reset_w(state->adpcm2, data & 2);
}
@ -158,23 +166,25 @@ static WRITE8_HANDLER( sound_irq_ack_w )
static WRITE8_HANDLER( m52_adpcm_w )
{
irem_z80_state *state = (irem_z80_state *)space->machine->driver_data;
if (offset & 1)
{
const device_config *adpcm = devtag_get_device(space->machine, "msm1");
msm5205_data_w(adpcm, data);
msm5205_data_w(state->adpcm1, data);
}
if (offset & 2)
{
const device_config *adpcm = devtag_get_device(space->machine, "msm2");
if (adpcm != NULL)
msm5205_data_w(adpcm, data);
if (state->adpcm2 != NULL)
msm5205_data_w(state->adpcm2, data);
}
}
static WRITE8_HANDLER( m62_adpcm_w )
{
const device_config *adpcm = devtag_get_device(space->machine, (offset & 1) ? "msm2" : "msm1");
irem_z80_state *state = (irem_z80_state *)space->machine->driver_data;
const device_config *adpcm = (offset & 1) ? state->adpcm2 : state->adpcm1;
if (adpcm != NULL)
msm5205_data_w(adpcm, data);
}
@ -189,15 +199,15 @@ static WRITE8_HANDLER( m62_adpcm_w )
static void adpcm_int(const device_config *device)
{
const device_config *msm2 = devtag_get_device(device->machine, "msm2");
irem_z80_state *state = (irem_z80_state *)device->machine->driver_data;
cputag_set_input_line(device->machine, "iremsound", INPUT_LINE_NMI, PULSE_LINE);
/* the first MSM5205 clocks the second */
if (msm2 != NULL)
if (state->adpcm2 != NULL)
{
msm5205_vclk_w(msm2, 1);
msm5205_vclk_w(msm2, 0);
msm5205_vclk_w(state->adpcm2, 1);
msm5205_vclk_w(state->adpcm2, 0);
}
}

View File

@ -1,11 +0,0 @@
/***************************************************************************
Irem audio interface
****************************************************************************/
MACHINE_DRIVER_EXTERN( m52_sound_c_audio );
MACHINE_DRIVER_EXTERN( m52_large_audio );
MACHINE_DRIVER_EXTERN( m62_audio );
WRITE8_HANDLER( irem_sound_cmd_w );

View File

@ -128,26 +128,28 @@ Notes (couriersud)
#define LOG(x) do { if (DEBUG) printf x; } while (0)
static WRITE8_DEVICE_HANDLER(ic8j1_output_changed)
static WRITE8_DEVICE_HANDLER( ic8j1_output_changed )
{
LOG(("ic8j1: %d %d\n", data, video_screen_get_vpos(device->machine->primary_screen)));
cputag_set_input_line(device->machine, "maincpu", 0, !data ? CLEAR_LINE : ASSERT_LINE);
}
static WRITE8_DEVICE_HANDLER(ic8j2_output_changed)
static WRITE8_DEVICE_HANDLER( ic8j2_output_changed )
{
m10_state *state = (m10_state *)device->machine->driver_data;
/* written from /Q to A with slight delight */
LOG(("ic8j2: %d\n", data));
ttl74123_a_w(device, 0, data);
ttl74123_a_w(devtag_get_device(device->machine, "ic8j1"), 0, data);
ttl74123_a_w(state->ic8j1, 0, data);
}
static const ttl74123_config ic8j1_intf =
{
/* completely illegible */
TTL74123_NOT_GROUNDED_DIODE, /* the hook up type */
RES_K(1), /* resistor connected to RCext */
CAP_U(1), /* capacitor connected to Cext and RCext */
RES_K(1), /* resistor connected to RCext */
CAP_U(1), /* capacitor connected to Cext and RCext */
1, /* A pin - driven by the CRTC */
1, /* B pin - pulled high */
1, /* Clear pin - pulled high */
@ -158,8 +160,8 @@ static const ttl74123_config ic8j2_intf =
{
TTL74123_NOT_GROUNDED_DIODE, /* the hook up type */
/* 10k + 20k variable resistor */
RES_K(22), /* resistor connected to RCext */
CAP_U(2.2), /* capacitor connected to Cext and RCext */
RES_K(22), /* resistor connected to RCext */
CAP_U(2.2), /* capacitor connected to Cext and RCext */
1, /* A pin - driven by the CRTC */
1, /* B pin - pulled high */
1, /* Clear pin - pulled high */
@ -189,12 +191,26 @@ static PALETTE_INIT( m10 )
}
}
static MACHINE_RESET( irem )
static MACHINE_START( m10 )
{
m10_state *state = (m10_state *)machine->driver_data;
state->ic8j1 = devtag_get_device(machine, "ic8j1");
state->ic8j2 = devtag_get_device(machine, "ic8j2");
state->samples = devtag_get_device(machine, "samples");
state_save_register_global(machine, state->bottomline);
state_save_register_global(machine, state->flip);
state_save_register_global(machine, state->last);
}
static MACHINE_RESET( m10 )
{
m10_state *state = (m10_state *)machine->driver_data;
state->bottomline = 0;
state->flip = 0;
state->last = 0;
}
/*************************************
@ -224,7 +240,6 @@ static MACHINE_RESET( irem )
static WRITE8_HANDLER( m10_ctrl_w )
{
const device_config *samples = devtag_get_device(space->machine, "samples");
m10_state *state = (m10_state *)space->machine->driver_data;
#if DEBUG
@ -249,27 +264,27 @@ static WRITE8_HANDLER( m10_ctrl_w )
break;
case 0x01:
/* MISSILE sound */
sample_start(samples, 0, 0, 0);
sample_start(state->samples, 0, 0, 0);
break;
case 0x02:
/* EXPLOSION sound */
sample_start(samples, 1, 1, 0);
sample_start(state->samples, 1, 1, 0);
break;
case 0x03:
/* INVADER HIT sound */
sample_start(samples, 2, 2, 0);
sample_start(state->samples, 2, 2, 0);
break;
case 0x04:
/* BONUS BASE sound */
sample_start(samples, 3, 8, 0);
sample_start(state->samples, 3, 8, 0);
break;
case 0x05:
/* FLEET MOVE sound */
sample_start(samples, 3, 3, 0);
sample_start(state->samples, 3, 3, 0);
break;
case 0x06:
/* SAUCER HIT SOUND */
sample_start(samples, 2, 7, 0);
sample_start(state->samples, 2, 7, 0);
break;
default:
popmessage("Unknown sound M10: %02x\n", data & 0x07);
@ -277,9 +292,9 @@ static WRITE8_HANDLER( m10_ctrl_w )
}
/* UFO SOUND */
if (data & 0x08)
sample_stop(samples, 4);
sample_stop(state->samples, 4);
else
sample_start(samples, 4, 9, 1);
sample_start(state->samples, 4, 9, 1);
}
@ -305,7 +320,7 @@ static WRITE8_HANDLER( m11_ctrl_w )
m10_state *state = (m10_state *)space->machine->driver_data;
#if DEBUG
if (data & 0x4C)
if (data & 0x4c)
popmessage("M11 ctrl: %02x",data);
#endif
@ -338,7 +353,7 @@ static WRITE8_HANDLER( m15_ctrl_w )
m10_state *state = (m10_state *)space->machine->driver_data;
#if DEBUG
if (data & 0xF0)
if (data & 0xf0)
popmessage("M15 ctrl: %02x",data);
#endif
if (input_port_read(space->machine, "CAB") & 0x01)
@ -364,52 +379,51 @@ static WRITE8_HANDLER( m15_ctrl_w )
static WRITE8_HANDLER( m10_a500_w )
{
#if DEBUG
if (data & 0xFC)
if (data & 0xfc)
popmessage("a500: %02x",data);
#endif
}
static WRITE8_HANDLER( m11_a100_w )
{
static int last = 0x00;
const device_config *samples = devtag_get_device(space->machine, "samples");
int raising_bits = data & ~last;
//int falling_bits = ~data & last;
m10_state *state = (m10_state *)space->machine->driver_data;
int raising_bits = data & ~state->last;
//int falling_bits = ~data & state->last;
// should a falling bit stop a sample?
// This port is written to about 20x per vblank
#if DEBUG
if ((last & 0xE8) != (data & 0xE8))
if ((state->last & 0xe8) != (data & 0xe8))
popmessage("A100: %02x\n", data);
#endif
last = data;
state->last = data;
// audio control!
/* MISSILE sound */
if (raising_bits & 0x01)
sample_start(samples, 0, 0, 0);
sample_start(state->samples, 0, 0, 0);
/* EXPLOSION sound */
if (raising_bits & 0x02)
sample_start(samples, 1, 1, 0);
sample_start(state->samples, 1, 1, 0);
/* Rapidly falling parachute */
if (raising_bits & 0x04)
sample_start(samples, 3, 8, 0);
sample_start(state->samples, 3, 8, 0);
/* Background sound ? */
if (data & 0x10)
sample_start(samples, 4, 9, 1);
sample_start(state->samples, 4, 9, 1);
else
sample_stop(samples, 4);
sample_stop(state->samples, 4);
}
static WRITE8_HANDLER( m15_a100_w )
{
static int last = 0x00;
const device_config *samples = devtag_get_device(space->machine, "samples");
//int raising_bits = data & ~last;
int falling_bits = ~data & last;
m10_state *state = (m10_state *)space->machine->driver_data;
//int raising_bits = data & ~state->last;
int falling_bits = ~data & state->last;
// should a falling bit stop a sample?
// Bit 4 is used
@ -425,60 +439,62 @@ static WRITE8_HANDLER( m15_a100_w )
// 0x40: dot
#if DEBUG
if ((last & 0x82) != (data & 0x82))
if ((state->last & 0x82) != (data & 0x82))
popmessage("A100: %02x\n", data);
#endif
/* DOT sound */
if (falling_bits & 0x40)
sample_start(samples, 0, 0, 0);
sample_start(state->samples, 0, 0, 0);
#if 0
if (raising_bits & 0x40)
sample_stop(samples, 0);
sample_stop(state->samples, 0);
#endif
/* EXPLOSION sound */
if (falling_bits & 0x08)
sample_start(samples, 1, 1, 0);
sample_start(state->samples, 1, 1, 0);
#if 0
if (raising_bits & 0x08)
sample_stop(samples, 1);
sample_stop(state->samples, 1);
#endif
/* player changes lane */
if (falling_bits & 0x10)
sample_start(samples, 3, 3, 0);
sample_start(state->samples, 3, 3, 0);
#if 0
if (raising_bits & 0x10)
sample_stop(samples, 3);
sample_stop(state->samples, 3);
#endif
/* computer car changes lane */
if (falling_bits & 0x20)
sample_start(samples, 4, 4, 0);
sample_start(state->samples, 4, 4, 0);
#if 0
if (raising_bits & 0x20)
sample_stop(samples, 4);
sample_stop(state->samples, 4);
#endif
last = data;
state->last = data;
}
static READ8_HANDLER( m10_a700_r )
{
//LOG(("rd:%d\n",video_screen_get_vpos(space->machine->primary_screen)));
m10_state *state = (m10_state *)space->machine->driver_data;
//LOG(("rd:%d\n",video_screen_get_vpos(space->machine->primary_screen)));
LOG(("clear\n"));
ttl74123_clear_w(devtag_get_device(space->machine, "ic8j1"), 0, 0);
ttl74123_clear_w(devtag_get_device(space->machine, "ic8j1"), 0, 1);
ttl74123_clear_w(state->ic8j1, 0, 0);
ttl74123_clear_w(state->ic8j1, 0, 1);
return 0x00;
}
static READ8_HANDLER( m11_a700_r )
{
m10_state *state = (m10_state *)space->machine->driver_data;
//LOG(("rd:%d\n",video_screen_get_vpos(space->machine->primary_screen)));
//cputag_set_input_line(space->machine, "maincpu", 0, CLEAR_LINE);
LOG(("clear\n"));
ttl74123_clear_w(devtag_get_device(space->machine, "ic8j1"), 0, 0);
ttl74123_clear_w(devtag_get_device(space->machine, "ic8j1"), 0, 1);
ttl74123_clear_w(state->ic8j1, 0, 0);
ttl74123_clear_w(state->ic8j1, 0, 1);
return 0x00;
}
@ -497,18 +513,18 @@ static INPUT_CHANGED( coin_inserted )
static TIMER_CALLBACK( interrupt_callback )
{
if (param==0)
{
cputag_set_input_line(machine, "maincpu", 0, ASSERT_LINE);
timer_set(machine, video_screen_get_time_until_pos(machine->primary_screen, IREMM10_VBSTART+16, 0), NULL, 1,interrupt_callback);
}
if (param==1)
{
cputag_set_input_line(machine, "maincpu", 0, ASSERT_LINE);
timer_set(machine, video_screen_get_time_until_pos(machine->primary_screen, IREMM10_VBSTART+24, 0), NULL, 2,interrupt_callback);
}
if (param==-1)
cputag_set_input_line(machine, "maincpu", 0, CLEAR_LINE);
if (param == 0)
{
cputag_set_input_line(machine, "maincpu", 0, ASSERT_LINE);
timer_set(machine, video_screen_get_time_until_pos(machine->primary_screen, IREMM10_VBSTART + 16, 0), NULL, 1, interrupt_callback);
}
if (param == 1)
{
cputag_set_input_line(machine, "maincpu", 0, ASSERT_LINE);
timer_set(machine, video_screen_get_time_until_pos(machine->primary_screen, IREMM10_VBSTART + 24, 0), NULL, 2, interrupt_callback);
}
if (param == -1)
cputag_set_input_line(machine, "maincpu", 0, CLEAR_LINE);
}
@ -516,7 +532,7 @@ static TIMER_CALLBACK( interrupt_callback )
static INTERRUPT_GEN( m11_interrupt )
{
cpu_set_input_line(device, 0, ASSERT_LINE);
//timer_set(device->machine, video_screen_get_time_until_pos(machine->primary_screen, IREMM10_VBEND, 0), NULL, -1,interrupt_callback);
//timer_set(device->machine, video_screen_get_time_until_pos(machine->primary_screen, IREMM10_VBEND, 0), NULL, -1, interrupt_callback);
}
static INTERRUPT_GEN( m10_interrupt )
@ -528,7 +544,7 @@ static INTERRUPT_GEN( m10_interrupt )
static INTERRUPT_GEN( m15_interrupt )
{
cpu_set_input_line(device, 0, ASSERT_LINE);
timer_set(device->machine, video_screen_get_time_until_pos(device->machine->primary_screen, IREMM10_VBSTART+1, 80), NULL, -1,interrupt_callback);
timer_set(device->machine, video_screen_get_time_until_pos(device->machine->primary_screen, IREMM10_VBSTART + 1, 80), NULL, -1, interrupt_callback);
}
/*************************************
@ -540,8 +556,8 @@ static INTERRUPT_GEN( m15_interrupt )
static ADDRESS_MAP_START( m10_main, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0x02ff) AM_RAM AM_BASE_MEMBER(m10_state, memory) /* scratch ram */
AM_RANGE(0x1000, 0x2fff) AM_READ(SMH_ROM) AM_BASE_MEMBER(m10_state, rom)
AM_RANGE(0x4000, 0x43ff) AM_RAM AM_BASE(&videoram) AM_SIZE(&videoram_size)
AM_RANGE(0x4800, 0x4bff) AM_RAM_WRITE(m10_colorram_w) AM_BASE(&colorram) /* foreground colour */
AM_RANGE(0x4000, 0x43ff) AM_RAM AM_BASE_MEMBER(m10_state, videoram) AM_SIZE(&videoram_size)
AM_RANGE(0x4800, 0x4bff) AM_RAM_WRITE(m10_colorram_w) AM_BASE_MEMBER(m10_state, colorram) /* foreground colour */
AM_RANGE(0x5000, 0x53ff) AM_RAM_WRITE(m10_chargen_w) AM_BASE_MEMBER(m10_state, chargen) /* background ????? */
AM_RANGE(0xa200, 0xa200) AM_READ_PORT("DSW")
AM_RANGE(0xa300, 0xa300) AM_READ_PORT("INPUTS")
@ -554,8 +570,8 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( m11_main, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0x02ff) AM_RAM AM_BASE_MEMBER(m10_state, memory) /* scratch ram */
AM_RANGE(0x1000, 0x2fff) AM_READ(SMH_ROM) AM_BASE_MEMBER(m10_state, rom)
AM_RANGE(0x4000, 0x43ff) AM_RAM AM_BASE(&videoram) AM_SIZE(&videoram_size)
AM_RANGE(0x4800, 0x4bff) AM_RAM_WRITE(m10_colorram_w) AM_BASE(&colorram) /* foreground colour */
AM_RANGE(0x4000, 0x43ff) AM_RAM AM_BASE_MEMBER(m10_state, videoram) AM_SIZE(&videoram_size)
AM_RANGE(0x4800, 0x4bff) AM_RAM_WRITE(m10_colorram_w) AM_BASE_MEMBER(m10_state, colorram) /* foreground colour */
AM_RANGE(0x5000, 0x53ff) AM_RAM AM_BASE_MEMBER(m10_state, chargen) /* background ????? */
AM_RANGE(0xa100, 0xa100) AM_WRITE(m11_a100_w) /* sound writes ???? */
AM_RANGE(0xa200, 0xa200) AM_READ_PORT("DSW")
@ -568,8 +584,8 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( m15_main, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0x02ff) AM_RAM AM_BASE_MEMBER(m10_state, memory) /* scratch ram */
AM_RANGE(0x1000, 0x33ff) AM_READ(SMH_ROM) AM_BASE_MEMBER(m10_state, rom)
AM_RANGE(0x4000, 0x43ff) AM_RAM AM_BASE(&videoram) AM_SIZE(&videoram_size)
AM_RANGE(0x4800, 0x4bff) AM_RAM_WRITE(m10_colorram_w) AM_BASE(&colorram) /* foreground colour */
AM_RANGE(0x4000, 0x43ff) AM_RAM AM_BASE_MEMBER(m10_state, videoram) AM_SIZE(&videoram_size)
AM_RANGE(0x4800, 0x4bff) AM_RAM_WRITE(m10_colorram_w) AM_BASE_MEMBER(m10_state, colorram) /* foreground colour */
AM_RANGE(0x5000, 0x57ff) AM_RAM_WRITE(m15_chargen_w) AM_BASE_MEMBER(m10_state, chargen) /* background ????? */
AM_RANGE(0xa000, 0xa000) AM_READ_PORT("P2")
AM_RANGE(0xa100, 0xa100) AM_WRITE(m15_a100_w) /* sound writes ???? */
@ -821,7 +837,8 @@ static MACHINE_DRIVER_START( m10 )
MDRV_CPU_ADD("maincpu", M6502,IREMM10_CPU_CLOCK)
MDRV_CPU_PROGRAM_MAP(m10_main)
MDRV_MACHINE_RESET(irem)
MDRV_MACHINE_START(m10)
MDRV_MACHINE_RESET(m10)
//MDRV_CPU_VBLANK_INT("screen", m10_interrupt)
@ -873,7 +890,8 @@ static MACHINE_DRIVER_START( m15 )
MDRV_CPU_ADD("maincpu", M6502,IREMM15_CPU_CLOCK)
MDRV_CPU_PROGRAM_MAP(m15_main)
MDRV_MACHINE_RESET(irem)
MDRV_MACHINE_START(m10)
MDRV_MACHINE_RESET(m10)
MDRV_CPU_VBLANK_INT("screen", m15_interrupt)
@ -1039,10 +1057,10 @@ ROM_START( greenber )
ROM_LOAD( "gb9", 0x3000, 0x0400, CRC(c27b9ba3) SHA1(a2f4f0c4b61eb03bba13ae5d25dc01009a4f86ee) ) // ok ?
ROM_END
GAME( 1979, andromed, 0, m11, skychut, andromed, ROT270, "Irem", "Andromeda (Japan?)", GAME_NO_COCKTAIL | GAME_NO_SOUND | GAME_IMPERFECT_COLORS | GAME_NOT_WORKING )
GAME( 1979, ipminvad, 0, m10, ipminvad, 0, ROT270, "Irem", "I P M Invader", GAME_IMPERFECT_SOUND | GAME_NO_COCKTAIL | GAME_IMPERFECT_COLORS )
GAME( 1979, ipminvad1, ipminvad, m10, ipminvad, ipminva1, ROT270, "Irem", "I P M Invader (Incomplete Dump)", GAME_IMPERFECT_SOUND | GAME_NOT_WORKING )
GAME( 1980, skychut, 0, m11, skychut, 0, ROT270, "Irem", "Sky Chuter", GAME_NO_COCKTAIL | GAME_NO_SOUND | GAME_IMPERFECT_COLORS )
GAME( 1979, spacbeam, 0, m15, spacbeam, 0, ROT270, "Irem", "Space Beam", GAME_NO_COCKTAIL | GAME_NO_SOUND | GAME_IMPERFECT_COLORS )
GAME( 1979, headoni, 0, headoni, headoni, 0, ROT270, "Irem", "Head On (Irem, M-15 Hardware)", GAME_NO_COCKTAIL | GAME_NO_SOUND | GAME_IMPERFECT_COLORS )
GAME( 1980, greenber, 0, m15, spacbeam, 0, ROT270, "Irem", "Green Beret (Irem)", GAME_NO_COCKTAIL | GAME_NO_SOUND | GAME_IMPERFECT_COLORS | GAME_NOT_WORKING )
GAME( 1979, andromed, 0, m11, skychut, andromed, ROT270, "Irem", "Andromeda (Japan?)", GAME_NO_COCKTAIL | GAME_NO_SOUND | GAME_IMPERFECT_COLORS | GAME_NOT_WORKING | GAME_SUPPORTS_SAVE )
GAME( 1979, ipminvad, 0, m10, ipminvad, 0, ROT270, "Irem", "I P M Invader", GAME_IMPERFECT_SOUND | GAME_NO_COCKTAIL | GAME_IMPERFECT_COLORS | GAME_SUPPORTS_SAVE )
GAME( 1979, ipminvad1, ipminvad, m10, ipminvad, ipminva1, ROT270, "Irem", "I P M Invader (Incomplete Dump)", GAME_IMPERFECT_SOUND | GAME_NOT_WORKING | GAME_SUPPORTS_SAVE )
GAME( 1980, skychut, 0, m11, skychut, 0, ROT270, "Irem", "Sky Chuter", GAME_NO_COCKTAIL | GAME_NO_SOUND | GAME_IMPERFECT_COLORS | GAME_SUPPORTS_SAVE )
GAME( 1979, spacbeam, 0, m15, spacbeam, 0, ROT270, "Irem", "Space Beam", GAME_NO_COCKTAIL | GAME_NO_SOUND | GAME_IMPERFECT_COLORS | GAME_SUPPORTS_SAVE )
GAME( 1979, headoni, 0, headoni, headoni, 0, ROT270, "Irem", "Head On (Irem, M-15 Hardware)", GAME_NO_COCKTAIL | GAME_NO_SOUND | GAME_IMPERFECT_COLORS | GAME_SUPPORTS_SAVE )
GAME( 1980, greenber, 0, m15, spacbeam, 0, ROT270, "Irem", "Green Beret (Irem)", GAME_NO_COCKTAIL | GAME_NO_SOUND | GAME_IMPERFECT_COLORS | GAME_NOT_WORKING | GAME_SUPPORTS_SAVE )

View File

@ -53,7 +53,19 @@ Dumped by Chackn
#include "driver.h"
#include "cpu/i8085/i8085.h"
static tilemap *m14_tilemap;
typedef struct _m14_state m14_state;
struct _m14_state
{
/* video-related */
tilemap *m14_tilemap;
UINT8 * video_ram;
UINT8 * color_ram;
/* input-related */
UINT8 hop_mux;
};
/*************************************
*
@ -81,8 +93,10 @@ static PALETTE_INIT( m14 )
static TILE_GET_INFO( m14_get_tile_info )
{
int code = videoram[tile_index];
int color = colorram[tile_index] & 0xf;
m14_state *state = (m14_state *)machine->driver_data;
int code = state->video_ram[tile_index];
int color = state->color_ram[tile_index] & 0x0f;
/* colorram & 0xf0 used but unknown purpose*/
@ -95,26 +109,34 @@ static TILE_GET_INFO( m14_get_tile_info )
static VIDEO_START( m14 )
{
m14_tilemap = tilemap_create(machine, m14_get_tile_info,tilemap_scan_rows,8,8,32,32);
m14_state *state = (m14_state *)machine->driver_data;
state->m14_tilemap = tilemap_create(machine, m14_get_tile_info, tilemap_scan_rows, 8, 8, 32, 32);
}
static VIDEO_UPDATE( m14 )
{
tilemap_draw(bitmap,cliprect,m14_tilemap,0,0);
m14_state *state = (m14_state *)screen->machine->driver_data;
tilemap_draw(bitmap, cliprect, state->m14_tilemap, 0, 0);
return 0;
}
static WRITE8_HANDLER( m14_vram_w )
{
videoram[offset] = data;
tilemap_mark_tile_dirty(m14_tilemap,offset);
m14_state *state = (m14_state *)space->machine->driver_data;
state->video_ram[offset] = data;
tilemap_mark_tile_dirty(state->m14_tilemap, offset);
}
static WRITE8_HANDLER( m14_cram_w )
{
colorram[offset] = data;
tilemap_mark_tile_dirty(m14_tilemap,offset);
m14_state *state = (m14_state *)space->machine->driver_data;
state->color_ram[offset] = data;
tilemap_mark_tile_dirty(state->m14_tilemap, offset);
}
/*************************************
@ -123,8 +145,6 @@ static WRITE8_HANDLER( m14_cram_w )
*
*************************************/
static UINT8 hop_mux;
static READ8_HANDLER( m14_rng_r )
{
/* graphic artifacts happens if this doesn't return random values. */
@ -134,8 +154,15 @@ static READ8_HANDLER( m14_rng_r )
/* Here routes the hopper & the inputs */
static READ8_HANDLER( input_buttons_r )
{
if(hop_mux) { hop_mux = 0; return 0; } //0x43 status bits
else { return input_port_read(space->machine, "IN0"); }
m14_state *state = (m14_state *)space->machine->driver_data;
if (state->hop_mux)
{
state->hop_mux = 0;
return 0; //0x43 status bits
}
else
return input_port_read(space->machine, "IN0");
}
#if 0
@ -151,9 +178,11 @@ static WRITE8_HANDLER( test_w )
static WRITE8_HANDLER( hopper_w )
{
m14_state *state = (m14_state *)space->machine->driver_data;
/* ---- x--- coin out */
/* ---- --x- hopper/input mux? */
hop_mux = data & 2;
state->hop_mux = data & 2;
//popmessage("%02x",data);
}
@ -166,8 +195,8 @@ static WRITE8_HANDLER( hopper_w )
static ADDRESS_MAP_START( m14_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0x1fff) AM_ROM
AM_RANGE(0x2000, 0x23ff) AM_RAM
AM_RANGE(0xe000, 0xe3ff) AM_RAM_WRITE(m14_vram_w) AM_BASE(&videoram)
AM_RANGE(0xe400, 0xe7ff) AM_RAM_WRITE(m14_cram_w) AM_BASE(&colorram)
AM_RANGE(0xe000, 0xe3ff) AM_RAM_WRITE(m14_vram_w) AM_BASE_MEMBER(m14_state, video_ram)
AM_RANGE(0xe400, 0xe7ff) AM_RAM_WRITE(m14_cram_w) AM_BASE_MEMBER(m14_state, color_ram)
ADDRESS_MAP_END
static ADDRESS_MAP_START( m14_io_map, ADDRESS_SPACE_IO, 8 )
@ -188,14 +217,14 @@ ADDRESS_MAP_END
static INPUT_CHANGED( left_coin_inserted )
{
/* left coin insertion causes a rst6.5 (vector 0x34) */
if(newval)
if (newval)
cputag_set_input_line(field->port->machine, "maincpu", I8085_RST65_LINE, HOLD_LINE);
}
static INPUT_CHANGED( right_coin_inserted )
{
/* right coin insertion causes a rst5.5 (vector 0x2c) */
if(newval)
if (newval)
cputag_set_input_line(field->port->machine, "maincpu", I8085_RST55_LINE, HOLD_LINE);
}
@ -275,14 +304,35 @@ static INTERRUPT_GEN( m14_irq )
cpu_set_input_line(device, I8085_RST75_LINE, CLEAR_LINE);
}
static MACHINE_START( m14 )
{
m14_state *state = (m14_state *)machine->driver_data;
state_save_register_global(machine, state->hop_mux);
}
static MACHINE_RESET( m14 )
{
m14_state *state = (m14_state *)machine->driver_data;
state->hop_mux = 0;
}
static MACHINE_DRIVER_START( m14 )
/* driver data */
MDRV_DRIVER_DATA(m14_state)
/* basic machine hardware */
MDRV_CPU_ADD("maincpu",8085A,6000000/2) //guess: 6 Mhz internally divided by 2
MDRV_CPU_PROGRAM_MAP(m14_map)
MDRV_CPU_IO_MAP(m14_io_map)
MDRV_CPU_VBLANK_INT("screen",m14_irq)
MDRV_MACHINE_START(m14)
MDRV_MACHINE_RESET(m14)
/* video hardware */
MDRV_SCREEN_ADD("screen", RASTER)
MDRV_SCREEN_REFRESH_RATE(60)
@ -328,4 +378,4 @@ ROM_START( ptrmj )
ROM_LOAD( "mgpa10.bin", 0x0400, 0x0400, CRC(e1a4ebdc) SHA1(d9df42424ede17f0634d8d0a56c0374a33c55333) )
ROM_END
GAME( 1979, ptrmj, 0, m14, m14, 0, ROT0, "Irem", "PT Reach Mahjong (Japan)", GAME_NO_SOUND )
GAME( 1979, ptrmj, 0, m14, m14, 0, ROT0, "Irem", "PT Reach Mahjong (Japan)", GAME_NO_SOUND | GAME_SUPPORTS_SAVE )

View File

@ -44,7 +44,7 @@
#include "driver.h"
#include "iremipt.h"
#include "m52.h"
#include "includes/iremz80.h"
#include "audio/irem.h"
#include "cpu/z80/z80.h"
@ -60,10 +60,10 @@
static ADDRESS_MAP_START( main_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0x3fff) AM_ROM
AM_RANGE(0x8000, 0x83ff) AM_RAM_WRITE(m52_videoram_w) AM_BASE(&videoram)
AM_RANGE(0x8400, 0x87ff) AM_RAM_WRITE(m52_colorram_w) AM_BASE(&colorram)
AM_RANGE(0x8000, 0x83ff) AM_RAM_WRITE(m52_videoram_w) AM_BASE_MEMBER(irem_z80_state, videoram)
AM_RANGE(0x8400, 0x87ff) AM_RAM_WRITE(m52_colorram_w) AM_BASE_MEMBER(irem_z80_state, colorram)
AM_RANGE(0x8800, 0x8800) AM_MIRROR(0x07ff) AM_READ(m52_protection_r)
AM_RANGE(0xc800, 0xcbff) AM_MIRROR(0x0400) AM_WRITE(SMH_RAM) AM_BASE(&spriteram) AM_SIZE(&spriteram_size)
AM_RANGE(0xc800, 0xcbff) AM_MIRROR(0x0400) AM_WRITE(SMH_RAM) AM_BASE_MEMBER(irem_z80_state, spriteram) AM_SIZE(&spriteram_size)
AM_RANGE(0xd000, 0xd000) AM_MIRROR(0x07fc) AM_WRITE(irem_sound_cmd_w)
AM_RANGE(0xd001, 0xd001) AM_MIRROR(0x07fc) AM_WRITE(m52_flipscreen_w) /* + coin counters */
AM_RANGE(0xd000, 0xd000) AM_MIRROR(0x07f8) AM_READ_PORT("IN0")
@ -77,9 +77,9 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( alpha1v_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0x6fff) AM_ROM
AM_RANGE(0x8000, 0x83ff) AM_RAM_WRITE(m52_videoram_w) AM_BASE(&videoram)
AM_RANGE(0x8400, 0x87ff) AM_RAM_WRITE(m52_colorram_w) AM_BASE(&colorram)
AM_RANGE(0xc800, 0xc9ff) AM_WRITE(SMH_RAM) AM_BASE(&spriteram) AM_SIZE(&spriteram_size) AM_SHARE(1) // bigger or mirrored?
AM_RANGE(0x8000, 0x83ff) AM_RAM_WRITE(m52_videoram_w) AM_BASE_MEMBER(irem_z80_state, videoram)
AM_RANGE(0x8400, 0x87ff) AM_RAM_WRITE(m52_colorram_w) AM_BASE_MEMBER(irem_z80_state, colorram)
AM_RANGE(0xc800, 0xc9ff) AM_WRITE(SMH_RAM) AM_BASE_MEMBER(irem_z80_state, spriteram) AM_SIZE(&spriteram_size) AM_SHARE(1) // bigger or mirrored?
AM_RANGE(0xd000, 0xd000) AM_READ_PORT("IN0") AM_WRITE(irem_sound_cmd_w)
AM_RANGE(0xd001, 0xd001) AM_READ_PORT("IN1") AM_WRITE(alpha1v_flipscreen_w)
AM_RANGE(0xd002, 0xd002) AM_READ_PORT("IN2")
@ -380,14 +380,30 @@ GFXDECODE_END
*
*************************************/
static MACHINE_RESET( m52 )
{
irem_z80_state *state = (irem_z80_state *)machine->driver_data;
state->bg1xpos = 0;
state->bg1ypos = 0;
state->bg2xpos = 0;
state->bg2ypos = 0;
state->bgcontrol = 0;
}
static MACHINE_DRIVER_START( m52 )
/* driver data */
MDRV_DRIVER_DATA(irem_z80_state)
/* basic machine hardware */
MDRV_CPU_ADD("maincpu", Z80, MASTER_CLOCK/6)
MDRV_CPU_PROGRAM_MAP(main_map)
MDRV_CPU_IO_MAP(main_portmap)
MDRV_CPU_VBLANK_INT("screen", irq0_line_hold)
MDRV_MACHINE_RESET(m52)
/* video hardware */
MDRV_GFXDECODE(m52)
MDRV_PALETTE_LENGTH(128*4+16*4+3*4)
@ -540,4 +556,4 @@ ROM_END
GAME( 1982, mpatrol, 0, m52, mpatrol, 0, ROT0, "Irem", "Moon Patrol", GAME_SUPPORTS_SAVE )
GAME( 1982, mpatrolw, mpatrol, m52, mpatrolw, 0, ROT0, "Irem (Williams license)", "Moon Patrol (Williams)", GAME_SUPPORTS_SAVE )
GAME( 1988, alpha1v, 0, alpha1v, alpha1v, 0, ROT0, "Vision Electronics", "Alpha One (Vision Electronics / Kyle Hodgetts)", GAME_NOT_WORKING|GAME_NO_SOUND )
GAME( 1988, alpha1v, 0, alpha1v, alpha1v, 0, ROT0, "Vision Electronics", "Alpha One (Vision Electronics / Kyle Hodgetts)", GAME_NOT_WORKING|GAME_NO_SOUND|GAME_SUPPORTS_SAVE )

View File

@ -36,7 +36,7 @@
Ribbon cable connector to M57-A-A PCB
New Tropical Angel:
Roms where found on an official IREM board with genuine IREM Tropical Angel
Roms were found on an official IREM board with genuine IREM Tropical Angel
license seal and genuine IREM serial number sticker.
The "new" roms have hand written labels, while those that match the current
Tropical Angel set look to be factory labeled chips.
@ -50,7 +50,7 @@
#include "driver.h"
#include "cpu/z80/z80.h"
#include "iremipt.h"
#include "m57.h"
#include "includes/iremz80.h"
#include "audio/irem.h"
@ -66,9 +66,9 @@
static ADDRESS_MAP_START( main_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0x7fff) AM_ROM
AM_RANGE(0x8000, 0x87ff) AM_RAM_WRITE(m57_videoram_w) AM_BASE(&videoram)
AM_RANGE(0x9000, 0x91ff) AM_RAM AM_BASE(&m57_scroll)
AM_RANGE(0xc820, 0xc8ff) AM_WRITE(SMH_RAM) AM_BASE(&spriteram) AM_SIZE(&spriteram_size)
AM_RANGE(0x8000, 0x87ff) AM_RAM_WRITE(m57_videoram_w) AM_BASE_MEMBER(irem_z80_state, videoram)
AM_RANGE(0x9000, 0x91ff) AM_RAM AM_BASE_MEMBER(irem_z80_state, scrollram)
AM_RANGE(0xc820, 0xc8ff) AM_WRITE(SMH_RAM) AM_BASE_MEMBER(irem_z80_state, spriteram) AM_SIZE(&spriteram_size)
AM_RANGE(0xd000, 0xd000) AM_WRITE(irem_sound_cmd_w)
AM_RANGE(0xd001, 0xd001) AM_WRITE(m57_flipscreen_w) /* + coin counters */
AM_RANGE(0xd000, 0xd000) AM_READ_PORT("IN0")
@ -225,6 +225,9 @@ GFXDECODE_END
static MACHINE_DRIVER_START( m57 )
/* driver data */
MDRV_DRIVER_DATA(irem_z80_state)
/* basic machine hardware */
MDRV_CPU_ADD("maincpu", Z80, XTAL_18_432MHz/6) /* verified on pcb */
MDRV_CPU_PROGRAM_MAP(main_map)
@ -327,5 +330,5 @@ ROM_END
*
*************************************/
GAME( 1983, troangel, 0, m57, troangel, 0, ROT0, "Irem", "Tropical Angel", 0 )
GAME( 1983, newtangl, troangel, m57, troangel, 0, ROT0, "Irem", "New Tropical Angel", 0 )
GAME( 1983, troangel, 0, m57, troangel, 0, ROT0, "Irem", "Tropical Angel", GAME_SUPPORTS_SAVE )
GAME( 1983, newtangl, troangel, m57, troangel, 0, ROT0, "Irem", "New Tropical Angel", GAME_SUPPORTS_SAVE )

View File

@ -12,7 +12,7 @@
#include "driver.h"
#include "cpu/z80/z80.h"
#include "iremipt.h"
#include "m58.h"
#include "includes/iremz80.h"
#include "audio/irem.h"
#define MASTER_CLOCK XTAL_18_432MHz
@ -26,13 +26,13 @@
static ADDRESS_MAP_START( yard_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0x5fff) AM_ROM
AM_RANGE(0x8000, 0x8fff) AM_RAM_WRITE(yard_videoram_w) AM_BASE(&videoram)
AM_RANGE(0x8000, 0x8fff) AM_RAM_WRITE(yard_videoram_w) AM_BASE_MEMBER(irem_z80_state, videoram)
AM_RANGE(0x9000, 0x9fff) AM_WRITE(yard_scroll_panel_w)
AM_RANGE(0xc820, 0xc87f) AM_RAM AM_BASE(&spriteram) AM_SIZE(&spriteram_size)
AM_RANGE(0xa000, 0xa000) AM_RAM AM_BASE(&yard_scroll_x_low)
AM_RANGE(0xa200, 0xa200) AM_RAM AM_BASE(&yard_scroll_x_high)
AM_RANGE(0xa400, 0xa400) AM_RAM AM_BASE(&yard_scroll_y_low)
AM_RANGE(0xa800, 0xa800) AM_RAM AM_BASE(&yard_score_panel_disabled)
AM_RANGE(0xc820, 0xc87f) AM_RAM AM_BASE_MEMBER(irem_z80_state, spriteram) AM_SIZE(&spriteram_size)
AM_RANGE(0xa000, 0xa000) AM_RAM AM_BASE_MEMBER(irem_z80_state, yard_scroll_x_low)
AM_RANGE(0xa200, 0xa200) AM_RAM AM_BASE_MEMBER(irem_z80_state, yard_scroll_x_high)
AM_RANGE(0xa400, 0xa400) AM_RAM AM_BASE_MEMBER(irem_z80_state, yard_scroll_y_low)
AM_RANGE(0xa800, 0xa800) AM_RAM AM_BASE_MEMBER(irem_z80_state, yard_score_panel_disabled)
AM_RANGE(0xd000, 0xd000) AM_WRITE(irem_sound_cmd_w)
AM_RANGE(0xd001, 0xd001) AM_WRITE(yard_flipscreen_w) /* + coin counters */
AM_RANGE(0xd000, 0xd000) AM_READ_PORT("IN0")
@ -190,6 +190,9 @@ GFXDECODE_END
static MACHINE_DRIVER_START( yard )
/* driver data */
MDRV_DRIVER_DATA(irem_z80_state)
/* basic machine hardware */
MDRV_CPU_ADD("maincpu", Z80, MASTER_CLOCK/3/2)
MDRV_CPU_PROGRAM_MAP(yard_map)
@ -363,7 +366,7 @@ ROM_END
*
*************************************/
GAME( 1983, 10yard, 0, yard, yard, 0, ROT0, "Irem", "10-Yard Fight (World)", 0 )
GAME( 1983, 10yardj, 10yard, yard, yard, 0, ROT0, "Irem", "10-Yard Fight (Japan)", 0 )
GAME( 1984, vs10yard, 10yard, yard, vs10yard, 0, ROT0, "Irem", "Vs 10-Yard Fight (World, 11/05/84)", 0 )
GAME( 1984, vs10yardj,10yard, yard, vs10yarj, 0, ROT0, "Irem", "Vs 10-Yard Fight (Japan)", 0 )
GAME( 1983, 10yard, 0, yard, yard, 0, ROT0, "Irem", "10-Yard Fight (World)", GAME_SUPPORTS_SAVE )
GAME( 1983, 10yardj, 10yard, yard, yard, 0, ROT0, "Irem", "10-Yard Fight (Japan)", GAME_SUPPORTS_SAVE )
GAME( 1984, vs10yard, 10yard, yard, vs10yard, 0, ROT0, "Irem", "Vs 10-Yard Fight (World, 11/05/84)", GAME_SUPPORTS_SAVE )
GAME( 1984, vs10yardj,10yard, yard, vs10yarj, 0, ROT0, "Irem", "Vs 10-Yard Fight (Japan)", GAME_SUPPORTS_SAVE )

View File

@ -69,7 +69,7 @@ other supported games as well.
#include "driver.h"
#include "cpu/z80/z80.h"
#include "m62.h"
#include "includes/iremz80.h"
#include "iremipt.h"
#include "audio/irem.h"
@ -81,16 +81,16 @@ other supported games as well.
/* Since the data written to 0x80 is always the level number, I just use */
/* that to select the ROM. The only exception I make is a special case used in */
/* service mode to test the ROMs. */
static int ldrun2_bankswap;
static READ8_HANDLER( ldrun2_bankswitch_r )
{
if (ldrun2_bankswap)
irem_z80_state *state = (irem_z80_state *)space->machine->driver_data;
if (state->ldrun2_bankswap)
{
ldrun2_bankswap--;
state->ldrun2_bankswap--;
/* swap to bank #1 on second read */
if (ldrun2_bankswap == 0)
if (state->ldrun2_bankswap == 0)
memory_set_bank(space->machine, 1, 1);
}
return 0;
@ -98,7 +98,7 @@ static READ8_HANDLER( ldrun2_bankswitch_r )
static WRITE8_HANDLER( ldrun2_bankswitch_w )
{
static int bankcontrol[2];
irem_z80_state *state = (irem_z80_state *)space->machine->driver_data;
static const int banks[30] =
{
0,0,0,0,0,1,0,1,0,0,
@ -107,22 +107,24 @@ static WRITE8_HANDLER( ldrun2_bankswitch_w )
};
bankcontrol[offset] = data;
state->bankcontrol[offset] = data;
if (offset == 0)
{
if (data < 1 || data > 30)
{
logerror("unknown bank select %02x\n",data);
logerror("unknown bank select %02x\n",data);
return;
}
memory_set_bank(space->machine, 1, banks[data-1]);
memory_set_bank(space->machine, 1, banks[data - 1]);
}
else
{
if (bankcontrol[0] == 0x01 && data == 0x0d)
if (state->bankcontrol[0] == 0x01 && data == 0x0d)
/* special case for service mode */
ldrun2_bankswap = 2;
else ldrun2_bankswap = 0;
state->ldrun2_bankswap = 2;
else
state->ldrun2_bankswap = 0;
}
}
@ -160,8 +162,8 @@ static WRITE8_HANDLER( spelunkr_bankswitch_w )
static WRITE8_HANDLER( spelunk2_bankswitch_w )
{
memory_set_bank(space->machine, 1, (data & 0xc0)>>6);
memory_set_bank(space->machine, 2, (data & 0x3c)>>2);
memory_set_bank(space->machine, 1, (data & 0xc0) >> 6);
memory_set_bank(space->machine, 2, (data & 0x3c) >> 2);
}
static WRITE8_HANDLER( youjyudn_bankswitch_w )
@ -174,10 +176,10 @@ static ADDRESS_MAP_START( kungfum_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0x7fff) AM_ROM
AM_RANGE(0xa000, 0xa000) AM_WRITE(m62_hscroll_low_w)
AM_RANGE(0xb000, 0xb000) AM_WRITE(m62_hscroll_high_w)
AM_RANGE(0xc000, 0xc0ff) AM_WRITEONLY AM_BASE(&spriteram) AM_SIZE(&spriteram_size)
AM_RANGE(0xc000, 0xc0ff) AM_WRITEONLY AM_BASE_MEMBER(irem_z80_state, spriteram) AM_SIZE(&spriteram_size)
/* Kung Fu Master is the only game in this driver to have separated (but */
/* contiguous) videoram and colorram. They are interleaved in all the others. */
AM_RANGE(0xd000, 0xdfff) AM_RAM_WRITE(kungfum_tileram_w) AM_BASE(&m62_tileram)
AM_RANGE(0xd000, 0xdfff) AM_RAM_WRITE(kungfum_tileram_w) AM_BASE_MEMBER(irem_z80_state, m62_tileram)
AM_RANGE(0xe000, 0xefff) AM_RAM
ADDRESS_MAP_END
@ -193,9 +195,9 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( battroad_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0x7fff) AM_ROM
AM_RANGE(0xa000, 0xbfff) AM_ROMBANK(1)
AM_RANGE(0xc000, 0xc0ff) AM_WRITEONLY AM_BASE(&spriteram) AM_SIZE(&spriteram_size)
AM_RANGE(0xc800, 0xcfff) AM_RAM_WRITE(m62_textram_w) AM_BASE(&m62_textram)
AM_RANGE(0xd000, 0xdfff) AM_RAM_WRITE(m62_tileram_w) AM_BASE(&m62_tileram)
AM_RANGE(0xc000, 0xc0ff) AM_WRITEONLY AM_BASE_MEMBER(irem_z80_state, spriteram) AM_SIZE(&spriteram_size)
AM_RANGE(0xc800, 0xcfff) AM_RAM_WRITE(m62_textram_w) AM_BASE_MEMBER(irem_z80_state, m62_textram)
AM_RANGE(0xd000, 0xdfff) AM_RAM_WRITE(m62_tileram_w) AM_BASE_MEMBER(irem_z80_state, m62_tileram)
AM_RANGE(0xe000, 0xefff) AM_RAM
ADDRESS_MAP_END
@ -214,16 +216,16 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( ldrun_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0x7fff) AM_ROM
AM_RANGE(0xc000, 0xc0ff) AM_WRITEONLY AM_BASE(&spriteram) AM_SIZE(&spriteram_size)
AM_RANGE(0xd000, 0xdfff) AM_RAM_WRITE(m62_tileram_w) AM_BASE(&m62_tileram)
AM_RANGE(0xc000, 0xc0ff) AM_WRITEONLY AM_BASE_MEMBER(irem_z80_state, spriteram) AM_SIZE(&spriteram_size)
AM_RANGE(0xd000, 0xdfff) AM_RAM_WRITE(m62_tileram_w) AM_BASE_MEMBER(irem_z80_state, m62_tileram)
AM_RANGE(0xe000, 0xefff) AM_RAM
ADDRESS_MAP_END
static ADDRESS_MAP_START( ldrun2_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0x7fff) AM_ROM
AM_RANGE(0x8000, 0x9fff) AM_ROMBANK(1)
AM_RANGE(0xc000, 0xc0ff) AM_WRITEONLY AM_BASE(&spriteram) AM_SIZE(&spriteram_size)
AM_RANGE(0xd000, 0xdfff) AM_RAM_WRITE(m62_tileram_w) AM_BASE(&m62_tileram)
AM_RANGE(0xc000, 0xc0ff) AM_WRITEONLY AM_BASE_MEMBER(irem_z80_state, spriteram) AM_SIZE(&spriteram_size)
AM_RANGE(0xd000, 0xdfff) AM_RAM_WRITE(m62_tileram_w) AM_BASE_MEMBER(irem_z80_state, m62_tileram)
AM_RANGE(0xe000, 0xefff) AM_RAM
ADDRESS_MAP_END
@ -243,8 +245,8 @@ static ADDRESS_MAP_START( ldrun3_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0xc800, 0xc800) AM_READ(ldrun3_prot_5_r)
AM_RANGE(0xcc00, 0xcc00) AM_READ(ldrun3_prot_7_r)
AM_RANGE(0xcfff, 0xcfff) AM_READ(ldrun3_prot_7_r)
AM_RANGE(0xc000, 0xc0ff) AM_WRITEONLY AM_BASE(&spriteram) AM_SIZE(&spriteram_size)
AM_RANGE(0xd000, 0xdfff) AM_RAM_WRITE(m62_tileram_w) AM_BASE(&m62_tileram)
AM_RANGE(0xc000, 0xc0ff) AM_WRITEONLY AM_BASE_MEMBER(irem_z80_state, spriteram) AM_SIZE(&spriteram_size)
AM_RANGE(0xd000, 0xdfff) AM_RAM_WRITE(m62_tileram_w) AM_BASE_MEMBER(irem_z80_state, m62_tileram)
AM_RANGE(0xd000, 0xefff) AM_RAM
ADDRESS_MAP_END
@ -262,9 +264,9 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( ldrun4_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0x7fff) AM_ROM
AM_RANGE(0x8000, 0xbfff) AM_ROMBANK(1)
AM_RANGE(0xc000, 0xc0ff) AM_WRITEONLY AM_BASE(&spriteram) AM_SIZE(&spriteram_size)
AM_RANGE(0xc000, 0xc0ff) AM_WRITEONLY AM_BASE_MEMBER(irem_z80_state, spriteram) AM_SIZE(&spriteram_size)
AM_RANGE(0xc800, 0xc800) AM_WRITE(ldrun4_bankswitch_w)
AM_RANGE(0xd000, 0xdfff) AM_RAM_WRITE(m62_tileram_w) AM_BASE(&m62_tileram)
AM_RANGE(0xd000, 0xdfff) AM_RAM_WRITE(m62_tileram_w) AM_BASE_MEMBER(irem_z80_state, m62_tileram)
AM_RANGE(0xe000, 0xefff) AM_RAM
ADDRESS_MAP_END
@ -281,18 +283,18 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( lotlot_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0x7fff) AM_ROM
AM_RANGE(0xa000, 0xafff) AM_RAM_WRITE(m62_textram_w) AM_BASE(&m62_textram)
AM_RANGE(0xc000, 0xc0ff) AM_WRITEONLY AM_BASE(&spriteram) AM_SIZE(&spriteram_size)
AM_RANGE(0xd000, 0xdfff) AM_RAM_WRITE(m62_tileram_w) AM_BASE(&m62_tileram)
AM_RANGE(0xa000, 0xafff) AM_RAM_WRITE(m62_textram_w) AM_BASE_MEMBER(irem_z80_state, m62_textram)
AM_RANGE(0xc000, 0xc0ff) AM_WRITEONLY AM_BASE_MEMBER(irem_z80_state, spriteram) AM_SIZE(&spriteram_size)
AM_RANGE(0xd000, 0xdfff) AM_RAM_WRITE(m62_tileram_w) AM_BASE_MEMBER(irem_z80_state, m62_tileram)
AM_RANGE(0xe000, 0xefff) AM_RAM
ADDRESS_MAP_END
static ADDRESS_MAP_START( kidniki_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0x7fff) AM_ROM
AM_RANGE(0x8000, 0x9fff) AM_ROMBANK(1)
AM_RANGE(0xa000, 0xafff) AM_RAM_WRITE(m62_tileram_w) AM_BASE(&m62_tileram)
AM_RANGE(0xc000, 0xc0ff) AM_WRITEONLY AM_BASE(&spriteram) AM_SIZE(&spriteram_size)
AM_RANGE(0xd000, 0xdfff) AM_RAM_WRITE(m62_textram_w) AM_BASE(&m62_textram)
AM_RANGE(0xa000, 0xafff) AM_RAM_WRITE(m62_tileram_w) AM_BASE_MEMBER(irem_z80_state, m62_tileram)
AM_RANGE(0xc000, 0xc0ff) AM_WRITEONLY AM_BASE_MEMBER(irem_z80_state, spriteram) AM_SIZE(&spriteram_size)
AM_RANGE(0xd000, 0xdfff) AM_RAM_WRITE(m62_textram_w) AM_BASE_MEMBER(irem_z80_state, m62_textram)
AM_RANGE(0xe000, 0xefff) AM_RAM
ADDRESS_MAP_END
@ -314,9 +316,9 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( spelunkr_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0x7fff) AM_ROM
AM_RANGE(0x8000, 0x9fff) AM_ROMBANK(1)
AM_RANGE(0xa000, 0xbfff) AM_RAM_WRITE(m62_tileram_w) AM_BASE(&m62_tileram)
AM_RANGE(0xc000, 0xc0ff) AM_WRITEONLY AM_BASE(&spriteram) AM_SIZE(&spriteram_size)
AM_RANGE(0xc800, 0xcfff) AM_RAM_WRITE(m62_textram_w) AM_BASE(&m62_textram)
AM_RANGE(0xa000, 0xbfff) AM_RAM_WRITE(m62_tileram_w) AM_BASE_MEMBER(irem_z80_state, m62_tileram)
AM_RANGE(0xc000, 0xc0ff) AM_WRITEONLY AM_BASE_MEMBER(irem_z80_state, spriteram) AM_SIZE(&spriteram_size)
AM_RANGE(0xc800, 0xcfff) AM_RAM_WRITE(m62_textram_w) AM_BASE_MEMBER(irem_z80_state, m62_textram)
AM_RANGE(0xd000, 0xd000) AM_WRITE(m62_vscroll_low_w)
AM_RANGE(0xd001, 0xd001) AM_WRITE(m62_vscroll_high_w)
AM_RANGE(0xd002, 0xd002) AM_WRITE(m62_hscroll_low_w)
@ -330,9 +332,9 @@ static ADDRESS_MAP_START( spelunk2_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0x7fff) AM_ROM
AM_RANGE(0x8000, 0x8fff) AM_ROMBANK(1)
AM_RANGE(0x9000, 0x9fff) AM_ROMBANK(2)
AM_RANGE(0xa000, 0xbfff) AM_RAM_WRITE(m62_tileram_w) AM_BASE(&m62_tileram)
AM_RANGE(0xc000, 0xc0ff) AM_WRITEONLY AM_BASE(&spriteram) AM_SIZE(&spriteram_size)
AM_RANGE(0xc800, 0xcfff) AM_RAM_WRITE(m62_textram_w) AM_BASE(&m62_textram)
AM_RANGE(0xa000, 0xbfff) AM_RAM_WRITE(m62_tileram_w) AM_BASE_MEMBER(irem_z80_state, m62_tileram)
AM_RANGE(0xc000, 0xc0ff) AM_WRITEONLY AM_BASE_MEMBER(irem_z80_state, spriteram) AM_SIZE(&spriteram_size)
AM_RANGE(0xc800, 0xcfff) AM_RAM_WRITE(m62_textram_w) AM_BASE_MEMBER(irem_z80_state, m62_textram)
AM_RANGE(0xd000, 0xd000) AM_WRITE(m62_vscroll_low_w)
AM_RANGE(0xd001, 0xd001) AM_WRITE(m62_hscroll_low_w)
AM_RANGE(0xd002, 0xd002) AM_WRITE(spelunk2_gfxport_w)
@ -343,9 +345,9 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( youjyudn_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0x7fff) AM_ROM
AM_RANGE(0x8000, 0xbfff) AM_ROMBANK(1)
AM_RANGE(0xc000, 0xc0ff) AM_WRITEONLY AM_BASE(&spriteram) AM_SIZE(&spriteram_size)
AM_RANGE(0xc800, 0xcfff) AM_RAM_WRITE(m62_textram_w) AM_BASE(&m62_textram)
AM_RANGE(0xd000, 0xd7ff) AM_RAM_WRITE(m62_tileram_w) AM_BASE(&m62_tileram)
AM_RANGE(0xc000, 0xc0ff) AM_WRITEONLY AM_BASE_MEMBER(irem_z80_state, spriteram) AM_SIZE(&spriteram_size)
AM_RANGE(0xc800, 0xcfff) AM_RAM_WRITE(m62_textram_w) AM_BASE_MEMBER(irem_z80_state, m62_textram)
AM_RANGE(0xd000, 0xd7ff) AM_RAM_WRITE(m62_tileram_w) AM_BASE_MEMBER(irem_z80_state, m62_tileram)
AM_RANGE(0xe000, 0xefff) AM_RAM
ADDRESS_MAP_END
@ -363,9 +365,9 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( horizon_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0xbfff) AM_ROM
AM_RANGE(0xc000, 0xc1ff) AM_RAM AM_BASE(&spriteram) AM_SIZE(&spriteram_size)
AM_RANGE(0xc800, 0xc83f) AM_RAM_WRITE(horizon_scrollram_w) AM_BASE(&horizon_scrollram)
AM_RANGE(0xd000, 0xdfff) AM_RAM_WRITE(m62_tileram_w) AM_BASE(&m62_tileram)
AM_RANGE(0xc000, 0xc1ff) AM_RAM AM_BASE_MEMBER(irem_z80_state, spriteram) AM_SIZE(&spriteram_size)
AM_RANGE(0xc800, 0xc83f) AM_RAM_WRITE(horizon_scrollram_w) AM_BASE_MEMBER(irem_z80_state, scrollram)
AM_RANGE(0xd000, 0xdfff) AM_RAM_WRITE(m62_tileram_w) AM_BASE_MEMBER(irem_z80_state, m62_tileram)
AM_RANGE(0xe000, 0xefff) AM_RAM
ADDRESS_MAP_END
@ -928,16 +930,45 @@ static GFXDECODE_START( youjyudn )
GFXDECODE_END
static MACHINE_START( m62 )
{
irem_z80_state *state = (irem_z80_state *)machine->driver_data;
state_save_register_global(machine, state->ldrun2_bankswap);
state_save_register_global_array(machine, state->bankcontrol);
}
static MACHINE_RESET( m62 )
{
irem_z80_state *state = (irem_z80_state *)machine->driver_data;
state->flipscreen = 0;
state->m62_background_hscroll = 0;
state->m62_background_vscroll = 0;
state->kidniki_background_bank = 0;
state->kidniki_text_vscroll = 0;
state->ldrun3_topbottom_mask = 0;
state->spelunkr_palbank = 0;
state->ldrun2_bankswap = 0;
state->bankcontrol[0] = 0;
state->bankcontrol[1] = 0;
}
static MACHINE_DRIVER_START( ldrun )
/* driver data */
MDRV_DRIVER_DATA(irem_z80_state)
/* basic machine hardware */
MDRV_CPU_ADD("maincpu", Z80, 24000000/6)
MDRV_CPU_PROGRAM_MAP(ldrun_map)
MDRV_CPU_IO_MAP(kungfum_io_map)
MDRV_CPU_VBLANK_INT("screen", irq0_line_hold)
MDRV_MACHINE_START(m62)
MDRV_MACHINE_RESET(m62)
/* video hardware */
MDRV_SCREEN_ADD("screen", RASTER)
MDRV_SCREEN_REFRESH_RATE(55)
@ -1296,7 +1327,7 @@ ROM_START( kungfub )
ROM_LOAD( "tbp24s10-main-1b.bin", 0x0400, 0x0100, CRC(550563e1) SHA1(11edb45acba8b28a462c49956ebb1ba0a8b2ff26) ) /* character palette blue component */
ROM_LOAD( "tbp24s10-gfx-1p.bin", 0x0500, 0x0100, CRC(35e45021) SHA1(511b94507f41b377f38184ed9a85f34949b28d26) ) /* sprite palette blue component */
ROM_LOAD( "18s030-gfx-8t.bin", 0x0600, 0x0020, CRC(7a601c3d) SHA1(5c5cdf51b2c9fdb2b05402d9c260208ae73fe245) ) /* sprite height, one entry per 32 */
/* sprites. Used at run time! */
/* sprites. Used at run time! */
ROM_LOAD( "tbp24s10-gfx-9k.bin", 0x0620, 0x0100, CRC(82c20d12) SHA1(268903f7d9be58a70d030b02bf31a2d6b5b6e249) ) /* video timing - same as battroad */
ROM_LOAD( "18s030-gfx-10a.bin", 0x0720, 0x0020, CRC(3858acd0) SHA1(49c96467c0e7146ed89f5107bcb7908bf4ce721a) )
ROM_LOAD( "18s030-gfx-5d.bin", 0x0740, 0x0020, CRC(51304fcd) SHA1(be4d659e526f6fa5318b4cd3b6612c5b73f24437) )
@ -1402,7 +1433,7 @@ ROM_START( battroad )
ROM_LOAD( "br-b-1l", 0x0500, 0x0100, CRC(5271c7d8) SHA1(1254b61133ed8fd6e032df04482fb775c3f66981) ) /* sprite palette blue component */
ROM_LOAD( "br-c-1j", 0x0600, 0x0020, CRC(78eb5d77) SHA1(dd82f7843bea8c953f491faade6ced17e57ddf3c) ) /* character palette */
ROM_LOAD( "br-b-5p", 0x0620, 0x0020, CRC(ce746937) SHA1(387e73a9ca684ac2e30061fca281970ff20ef0a5) ) /* sprite height, one entry per 32 */
/* sprites. Used at run time! */
/* sprites. Used at run time! */
ROM_LOAD( "br-b-6f", 0x0640, 0x0100, CRC(82c20d12) SHA1(268903f7d9be58a70d030b02bf31a2d6b5b6e249) ) /* video timing - same as kungfum */
ROM_END
@ -1435,7 +1466,7 @@ ROM_START( ldrun )
ROM_LOAD( "lr-e-3n", 0x0400, 0x0100, CRC(5b716837) SHA1(e3ea250891fec43a97e92ac1c3a4fbb5ee2d4a4d) ) /* character palette blue component */
ROM_LOAD( "lr-b-1l", 0x0500, 0x0100, CRC(08d8cf9a) SHA1(a46213e0dc04e44b0544401eb341fd49eef331dd) ) /* sprite palette blue component */
ROM_LOAD( "lr-b-5p", 0x0600, 0x0020, CRC(e01f69e2) SHA1(0d00ef348025ea4a9c274a7e3dbb006217d8449d) ) /* sprite height, one entry per 32 */
/* sprites. Used at run time! */
/* sprites. Used at run time! */
ROM_LOAD( "lr-b-6f", 0x0620, 0x0100, CRC(34d88d3c) SHA1(727f4c5cfff33538886fa0a29fd119aa085d7008) ) /* video timing - common to the other games */
ROM_END
@ -1468,7 +1499,7 @@ ROM_START( ldruna )
ROM_LOAD( "lr-e-3n", 0x0400, 0x0100, CRC(5b716837) SHA1(e3ea250891fec43a97e92ac1c3a4fbb5ee2d4a4d) ) /* character palette blue component */
ROM_LOAD( "lr-b-1l", 0x0500, 0x0100, CRC(08d8cf9a) SHA1(a46213e0dc04e44b0544401eb341fd49eef331dd) ) /* sprite palette blue component */
ROM_LOAD( "lr-b-5p", 0x0600, 0x0020, CRC(e01f69e2) SHA1(0d00ef348025ea4a9c274a7e3dbb006217d8449d) ) /* sprite height, one entry per 32 */
/* sprites. Used at run time! */
/* sprites. Used at run time! */
ROM_LOAD( "lr-b-6f", 0x0620, 0x0100, CRC(34d88d3c) SHA1(727f4c5cfff33538886fa0a29fd119aa085d7008) ) /* video timing - common to the other games */
ROM_END
@ -1507,7 +1538,7 @@ ROM_START( ldrun2 )
ROM_LOAD( "lr2-h-3n", 0x0400, 0x0100, CRC(2b28aec5) SHA1(946633bd7203ba1481250f900f3232c18538613b) ) /* character palette blue component */
ROM_LOAD( "lr2-b-1l", 0x0500, 0x0100, CRC(c8fb708a) SHA1(ed38f36fa7918179c7176c762c0fcc86b5ddb218) ) /* sprite palette blue component */
ROM_LOAD( "lr2-b-5p", 0x0600, 0x0020, CRC(e01f69e2) SHA1(0d00ef348025ea4a9c274a7e3dbb006217d8449d) ) /* sprite height, one entry per 32 */
/* sprites. Used at run time! */
/* sprites. Used at run time! */
ROM_LOAD( "lr2-b-6f", 0x0620, 0x0100, CRC(34d88d3c) SHA1(727f4c5cfff33538886fa0a29fd119aa085d7008) ) /* video timing - common to the other games */
ROM_END
@ -1542,7 +1573,7 @@ ROM_START( ldrun3 )
ROM_LOAD( "lr3-n-2m", 0x0400, 0x0100, CRC(69ad8678) SHA1(96134aa530cb93a5e3b56fffa996aefa08a666a2) ) /* character palette blue component */
ROM_LOAD( "lr3-b-1l", 0x0500, 0x0100, CRC(5b11c41d) SHA1(186ca7bfa2894311fc573f3f5882da677e029f2a) ) /* sprite palette blue component */
ROM_LOAD( "lr3-b-5p", 0x0600, 0x0020, CRC(e01f69e2) SHA1(0d00ef348025ea4a9c274a7e3dbb006217d8449d) ) /* sprite height, one entry per 32 */
/* sprites. Used at run time! */
/* sprites. Used at run time! */
ROM_LOAD( "lr3-n-4f", 0x0620, 0x0100, CRC(df674be9) SHA1(4d8c5378234bc24fac62dc227d8cd72f1ab7a35c) ) /* unknown */
ROM_LOAD( "lr3-b-6f", 0x0720, 0x0100, CRC(34d88d3c) SHA1(727f4c5cfff33538886fa0a29fd119aa085d7008) ) /* video timing - common to the other games */
ROM_END
@ -1575,7 +1606,7 @@ ROM_START( ldrun3j )
ROM_LOAD( "lr3-n-2m", 0x0400, 0x0100, CRC(69ad8678) SHA1(96134aa530cb93a5e3b56fffa996aefa08a666a2) ) /* character palette blue component */
ROM_LOAD( "lr3-b-1l", 0x0500, 0x0100, CRC(5b11c41d) SHA1(186ca7bfa2894311fc573f3f5882da677e029f2a) ) /* sprite palette blue component */
ROM_LOAD( "lr3-b-5p", 0x0600, 0x0020, CRC(e01f69e2) SHA1(0d00ef348025ea4a9c274a7e3dbb006217d8449d) ) /* sprite height, one entry per 32 */
/* sprites. Used at run time! */
/* sprites. Used at run time! */
ROM_LOAD( "lr3-n-4f", 0x0620, 0x0100, CRC(df674be9) SHA1(4d8c5378234bc24fac62dc227d8cd72f1ab7a35c) ) /* unknown */
ROM_LOAD( "lr3-b-6f", 0x0720, 0x0100, CRC(34d88d3c) SHA1(727f4c5cfff33538886fa0a29fd119aa085d7008) ) /* video timing - common to the other games */
ROM_END
@ -1611,7 +1642,7 @@ ROM_START( ldrun4 )
ROM_LOAD( "lr4-v-1p", 0x0400, 0x0100, CRC(0df23ebe) SHA1(054736b762aa6698c1e6d827f8db62ae0342c83f) ) /* character palette blue component */
ROM_LOAD( "lr4-b-1l", 0x0500, 0x0100, CRC(0d89b692) SHA1(b2854290c46c34934ff91980d72768070ebc8bf3) ) /* sprite palette blue component */
ROM_LOAD( "lr4-b-5p", 0x0600, 0x0020, CRC(e01f69e2) SHA1(0d00ef348025ea4a9c274a7e3dbb006217d8449d) ) /* sprite height, one entry per 32 */
/* sprites. Used at run time! */
/* sprites. Used at run time! */
ROM_LOAD( "lr4-v-4h", 0x0620, 0x0100, CRC(df674be9) SHA1(4d8c5378234bc24fac62dc227d8cd72f1ab7a35c) ) /* unknown */
ROM_LOAD( "lr4-b-6f", 0x0720, 0x0100, CRC(34d88d3c) SHA1(727f4c5cfff33538886fa0a29fd119aa085d7008) ) /* video timing - common to the other games */
ROM_END
@ -1650,7 +1681,7 @@ ROM_START( lotlot )
ROM_LOAD( "lot-b-1l", 0x0700, 0x0100, CRC(8b6fcde3) SHA1(04e9ce04b77a5f8737f2ec0aaeadaccdbbdda573) ) /* sprite palette blue component */
ROM_LOAD( "lot-k-2j", 0x0800, 0x0100, CRC(e791ef2a) SHA1(cb1236630cbbc23e2e684ad3b7f51e52389eea2e) ) /* character palette blue component */
ROM_LOAD( "lot-b-5p", 0x0900, 0x0020, CRC(110b21fd) SHA1(a7a660ff18540e2d73a80f341cd50c5f4d184085) ) /* sprite height, one entry per 32 */
/* sprites. Used at run time! */
/* sprites. Used at run time! */
ROM_LOAD( "lot-k-7e", 0x0920, 0x0200, CRC(6cef0fbd) SHA1(0c5c63a203e7bd852a3574c18f212487caf529ca) ) /* unknown */
ROM_LOAD( "lot-k-7h", 0x0b20, 0x0200, CRC(04442bee) SHA1(37d10b605830b9355b00256af479c06cd4b97950) ) /* unknown */
ROM_LOAD( "lot-b-6f", 0x0d20, 0x0100, CRC(34d88d3c) SHA1(727f4c5cfff33538886fa0a29fd119aa085d7008) ) /* video timing - common to the other games */
@ -1701,7 +1732,7 @@ ROM_START( kidniki )
ROM_LOAD( "dr27.3j", 0x0400, 0x0100, CRC(70d668ef) SHA1(2cc647f2708932105bb9a5130aacc5a8a160e418) ) /* character palette blue component */
ROM_LOAD( "dr29.1l", 0x0500, 0x0100, CRC(1173a754) SHA1(dbb7d02b72ae1842e0d17aee324a5b85ff2a2178) ) /* sprite palette blue component */
ROM_LOAD( "dr32.5p", 0x0600, 0x0020, CRC(11cd1f2e) SHA1(45ceb84ff373127ff370610c1ce8d83fc6045bcb) ) /* sprite height, one entry per 32 */
/* sprites. Used at run time! */
/* sprites. Used at run time! */
ROM_LOAD( "dr28.8f", 0x0620, 0x0200, CRC(6cef0fbd) SHA1(0c5c63a203e7bd852a3574c18f212487caf529ca) ) /* unknown */
ROM_LOAD( "dr33.6f", 0x0820, 0x0100, CRC(34d88d3c) SHA1(727f4c5cfff33538886fa0a29fd119aa085d7008) ) /* video timing - common to the other games */
ROM_END
@ -1751,7 +1782,7 @@ ROM_START( kidnikiu )
ROM_LOAD( "dr27.3j", 0x0400, 0x0100, CRC(70d668ef) SHA1(2cc647f2708932105bb9a5130aacc5a8a160e418) ) /* character palette blue component */
ROM_LOAD( "dr29.1l", 0x0500, 0x0100, CRC(1173a754) SHA1(dbb7d02b72ae1842e0d17aee324a5b85ff2a2178) ) /* sprite palette blue component */
ROM_LOAD( "dr32.5p", 0x0600, 0x0020, CRC(11cd1f2e) SHA1(45ceb84ff373127ff370610c1ce8d83fc6045bcb) ) /* sprite height, one entry per 32 */
/* sprites. Used at run time! */
/* sprites. Used at run time! */
ROM_LOAD( "dr28.8f", 0x0620, 0x0200, CRC(6cef0fbd) SHA1(0c5c63a203e7bd852a3574c18f212487caf529ca) ) /* unknown */
ROM_LOAD( "dr33.6f", 0x0820, 0x0100, CRC(34d88d3c) SHA1(727f4c5cfff33538886fa0a29fd119aa085d7008) ) /* video timing - common to the other games */
ROM_END
@ -1802,7 +1833,7 @@ ROM_START( yanchamr )
ROM_LOAD( "dr27.3j", 0x0400, 0x0100, CRC(70d668ef) SHA1(2cc647f2708932105bb9a5130aacc5a8a160e418) ) /* character palette blue component */
ROM_LOAD( "dr29.1l", 0x0500, 0x0100, CRC(1173a754) SHA1(dbb7d02b72ae1842e0d17aee324a5b85ff2a2178) ) /* sprite palette blue component */
ROM_LOAD( "dr32.5p", 0x0600, 0x0020, CRC(11cd1f2e) SHA1(45ceb84ff373127ff370610c1ce8d83fc6045bcb) ) /* sprite height, one entry per 32 */
/* sprites. Used at run time! */
/* sprites. Used at run time! */
ROM_LOAD( "dr28.8f", 0x0620, 0x0200, CRC(6cef0fbd) SHA1(0c5c63a203e7bd852a3574c18f212487caf529ca) ) /* unknown */
ROM_LOAD( "dr33.6f", 0x0820, 0x0100, CRC(34d88d3c) SHA1(727f4c5cfff33538886fa0a29fd119aa085d7008) ) /* video timing - common to the other games */
ROM_END
@ -1845,7 +1876,7 @@ ROM_START( lithero )
ROM_LOAD( "dr27.3j", 0x0400, 0x0100, CRC(70d668ef) SHA1(2cc647f2708932105bb9a5130aacc5a8a160e418) ) /* character palette blue component */
ROM_LOAD( "dr29.1l", 0x0500, 0x0100, CRC(1173a754) SHA1(dbb7d02b72ae1842e0d17aee324a5b85ff2a2178) ) /* sprite palette blue component */
ROM_LOAD( "dr32.5p", 0x0600, 0x0020, CRC(11cd1f2e) SHA1(45ceb84ff373127ff370610c1ce8d83fc6045bcb) ) /* sprite height, one entry per 32 */
/* sprites. Used at run time! */
/* sprites. Used at run time! */
ROM_LOAD( "dr28.8f", 0x0620, 0x0200, CRC(6cef0fbd) SHA1(0c5c63a203e7bd852a3574c18f212487caf529ca) ) /* unknown */
ROM_LOAD( "dr33.6f", 0x0820, 0x0100, CRC(34d88d3c) SHA1(727f4c5cfff33538886fa0a29fd119aa085d7008) ) /* video timing - common to the other games */
ROM_END
@ -2180,25 +2211,25 @@ static DRIVER_INIT( youjyudn )
memory_configure_bank(machine, 1, 0, 2, memory_region(machine, "maincpu") + 0x10000, 0x4000);
}
GAME( 1984, kungfum, 0, kungfum, kungfum, 0, ROT0, "Irem", "Kung-Fu Master", 0 )
GAME( 1984, kungfumd, kungfum, kungfum, kungfum, 0, ROT0, "Irem (Data East license)", "Kung-Fu Master (Data East)", 0 )
GAME( 1984, spartanx, kungfum, kungfum, kungfum, 0, ROT0, "Irem", "Spartan X (Japan)", 0 )
GAME( 1984, kungfub, kungfum, kungfum, kungfum, 0, ROT0, "bootleg", "Kung-Fu Master (bootleg set 1)", 0 )
GAME( 1984, kungfub2, kungfum, kungfum, kungfum, 0, ROT0, "bootleg", "Kung-Fu Master (bootleg set 2)", 0 )
GAME( 1984, battroad, 0, battroad, battroad, battroad, ROT90, "Irem", "The Battle-Road", GAME_IMPERFECT_COLORS )
GAME( 1984, ldrun, 0, ldrun, ldrun, 0, ROT0, "Irem (licensed from Broderbund)", "Lode Runner (set 1)", 0 )
GAME( 1984, ldruna, ldrun, ldrun, ldrun, 0, ROT0, "Irem (licensed from Broderbund)", "Lode Runner (set 2)", 0 )
GAME( 1984, ldrun2, 0, ldrun2, ldrun2, ldrun2, ROT0, "Irem (licensed from Broderbund)", "Lode Runner II - The Bungeling Strikes Back" , 0) /* Japanese version is called Bangeringu Teikoku No Gyakushuu */
GAME( 1985, ldrun3, 0, ldrun3, ldrun3, 0, ROT0, "Irem (licensed from Broderbund)", "Lode Runner III - The Golden Labyrinth", 0 )
GAME( 1985, ldrun3j, ldrun3, ldrun3, ldrun3, 0, ROT0, "Irem (licensed from Broderbund)", "Lode Runner III - Majin No Fukkatsu", 0 )
GAME( 1986, ldrun4, 0, ldrun4, ldrun4, ldrun4, ROT0, "Irem (licensed from Broderbund)", "Lode Runner IV - Teikoku Karano Dasshutsu", 0 )
GAME( 1985, lotlot, 0, lotlot, lotlot, 0, ROT0, "Irem (licensed from Tokuma Shoten)", "Lot Lot", 0 )
GAME( 1986, kidniki, 0, kidniki, kidniki, kidniki, ROT0, "Irem", "Kid Niki - Radical Ninja (World)", GAME_IMPERFECT_SOUND )
GAME( 1986, kidnikiu, kidniki, kidniki, kidniki, kidniki, ROT0, "Irem (Data East USA license)", "Kid Niki - Radical Ninja (US)", GAME_IMPERFECT_SOUND )
GAME( 1986, yanchamr, kidniki, kidniki, kidniki, kidniki, ROT0, "Irem", "Kaiketsu Yanchamaru (Japan)", GAME_IMPERFECT_SOUND )
GAME( 1987, lithero, kidniki, kidniki, kidniki, kidniki, ROT0, "bootleg", "Little Hero", GAME_IMPERFECT_SOUND )
GAME( 1985, spelunkr, 0, spelunkr, spelunkr, spelunkr, ROT0, "Irem (licensed from Broderbund)", "Spelunker", 0 )
GAME( 1985, spelunkrj,spelunkr, spelunkr, spelunkr, spelunkr, ROT0, "Irem (licensed from Broderbund)", "Spelunker (Japan)", 0 )
GAME( 1986, spelunk2, 0, spelunk2, spelunk2, spelunk2, ROT0, "Irem (licensed from Broderbund)", "Spelunker II", GAME_IMPERFECT_SOUND )
GAME( 1986, youjyudn, 0, youjyudn, youjyudn, youjyudn, ROT270, "Irem", "Youjyuden (Japan)", 0 )
GAME( 1985, horizon, 0, horizon, horizon, 0, ROT0, "Irem", "Horizon", GAME_IMPERFECT_SOUND )
GAME( 1984, kungfum, 0, kungfum, kungfum, 0, ROT0, "Irem", "Kung-Fu Master", GAME_SUPPORTS_SAVE )
GAME( 1984, kungfumd, kungfum, kungfum, kungfum, 0, ROT0, "Irem (Data East license)", "Kung-Fu Master (Data East)", GAME_SUPPORTS_SAVE )
GAME( 1984, spartanx, kungfum, kungfum, kungfum, 0, ROT0, "Irem", "Spartan X (Japan)", GAME_SUPPORTS_SAVE )
GAME( 1984, kungfub, kungfum, kungfum, kungfum, 0, ROT0, "bootleg", "Kung-Fu Master (bootleg set 1)", GAME_SUPPORTS_SAVE )
GAME( 1984, kungfub2, kungfum, kungfum, kungfum, 0, ROT0, "bootleg", "Kung-Fu Master (bootleg set 2)", GAME_SUPPORTS_SAVE )
GAME( 1984, battroad, 0, battroad, battroad, battroad, ROT90, "Irem", "The Battle-Road", GAME_IMPERFECT_COLORS | GAME_SUPPORTS_SAVE )
GAME( 1984, ldrun, 0, ldrun, ldrun, 0, ROT0, "Irem (licensed from Broderbund)", "Lode Runner (set 1)", GAME_SUPPORTS_SAVE )
GAME( 1984, ldruna, ldrun, ldrun, ldrun, 0, ROT0, "Irem (licensed from Broderbund)", "Lode Runner (set 2)", GAME_SUPPORTS_SAVE )
GAME( 1984, ldrun2, 0, ldrun2, ldrun2, ldrun2, ROT0, "Irem (licensed from Broderbund)", "Lode Runner II - The Bungeling Strikes Back", GAME_SUPPORTS_SAVE ) /* Japanese version is called Bangeringu Teikoku No Gyakushuu */
GAME( 1985, ldrun3, 0, ldrun3, ldrun3, 0, ROT0, "Irem (licensed from Broderbund)", "Lode Runner III - The Golden Labyrinth", GAME_SUPPORTS_SAVE )
GAME( 1985, ldrun3j, ldrun3, ldrun3, ldrun3, 0, ROT0, "Irem (licensed from Broderbund)", "Lode Runner III - Majin No Fukkatsu", GAME_SUPPORTS_SAVE )
GAME( 1986, ldrun4, 0, ldrun4, ldrun4, ldrun4, ROT0, "Irem (licensed from Broderbund)", "Lode Runner IV - Teikoku Karano Dasshutsu", GAME_SUPPORTS_SAVE )
GAME( 1985, lotlot, 0, lotlot, lotlot, 0, ROT0, "Irem (licensed from Tokuma Shoten)", "Lot Lot", GAME_SUPPORTS_SAVE )
GAME( 1986, kidniki, 0, kidniki, kidniki, kidniki, ROT0, "Irem", "Kid Niki - Radical Ninja (World)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )
GAME( 1986, kidnikiu, kidniki, kidniki, kidniki, kidniki, ROT0, "Irem (Data East USA license)", "Kid Niki - Radical Ninja (US)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )
GAME( 1986, yanchamr, kidniki, kidniki, kidniki, kidniki, ROT0, "Irem", "Kaiketsu Yanchamaru (Japan)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )
GAME( 1987, lithero, kidniki, kidniki, kidniki, kidniki, ROT0, "bootleg", "Little Hero", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )
GAME( 1985, spelunkr, 0, spelunkr, spelunkr, spelunkr, ROT0, "Irem (licensed from Broderbund)", "Spelunker", GAME_SUPPORTS_SAVE )
GAME( 1985, spelunkrj,spelunkr, spelunkr, spelunkr, spelunkr, ROT0, "Irem (licensed from Broderbund)", "Spelunker (Japan)", GAME_SUPPORTS_SAVE )
GAME( 1986, spelunk2, 0, spelunk2, spelunk2, spelunk2, ROT0, "Irem (licensed from Broderbund)", "Spelunker II", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )
GAME( 1986, youjyudn, 0, youjyudn, youjyudn, youjyudn, ROT270, "Irem", "Youjyuden (Japan)", GAME_SUPPORTS_SAVE )
GAME( 1985, horizon, 0, horizon, horizon, 0, ROT0, "Irem", "Horizon", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )

View File

@ -121,24 +121,39 @@ Dip locations verified for:
#include "sound/ay8910.h"
#include "sound/samples.h"
SAMPLES_START( fghtbskt_sh_start );
WRITE8_HANDLER( fghtbskt_samples_w );
typedef struct _m63_state m63_state;
struct _m63_state
{
UINT8 * videoram;
UINT8 * colorram;
UINT8 * spriteram;
UINT8 * videoram2;
UINT8 * scrollram;
static UINT8 *m63_videoram2, *m63_scrollram;
static int pal_bank, fg_flag, sy_offset;
static tilemap *bg_tilemap, *fg_tilemap;
static UINT8 sound_irq;
static int sound_status;
static int p1,p2;
/* video-related */
tilemap *bg_tilemap, *fg_tilemap;
int pal_bank, fg_flag, sy_offset;
/* sound-related */
UINT8 sound_irq;
int sound_status;
int p1, p2;
INT16 *samplebuf;
/* sound devices */
const device_config *ay1;
const device_config *ay2;
const device_config *samples;
};
static PALETTE_INIT( m63 )
{
int i;
for (i = 0;i < 256;i++)
for (i = 0; i < 256; i++)
{
int bit0,bit1,bit2,bit3,r,g,b;
int bit0, bit1, bit2, bit3, r, g, b;
/* red component */
bit0 = (color_prom[i] >> 0) & 0x01;
@ -162,11 +177,11 @@ static PALETTE_INIT( m63 )
palette_set_color(machine,i,MAKE_RGB(r,g,b));
}
color_prom += 3*256;
color_prom += 3 * 256;
for (i = 0;i < 4;i++)
for (i = 0; i < 4; i++)
{
int bit0,bit1,bit2,r,g,b;
int bit0, bit1, bit2, r, g, b;
/* red component */
bit0 = (color_prom[i] >> 0) & 0x01;
@ -189,28 +204,36 @@ static PALETTE_INIT( m63 )
static WRITE8_HANDLER( m63_videoram_w )
{
videoram[offset] = data;
tilemap_mark_tile_dirty(bg_tilemap, offset);
m63_state *state = (m63_state *)space->machine->driver_data;
state->videoram[offset] = data;
tilemap_mark_tile_dirty(state->bg_tilemap, offset);
}
static WRITE8_HANDLER( m63_colorram_w )
{
colorram[offset] = data;
tilemap_mark_tile_dirty(bg_tilemap, offset);
m63_state *state = (m63_state *)space->machine->driver_data;
state->colorram[offset] = data;
tilemap_mark_tile_dirty(state->bg_tilemap, offset);
}
static WRITE8_HANDLER( m63_videoram2_w )
{
m63_videoram2[offset] = data;
tilemap_mark_tile_dirty(fg_tilemap, offset);
m63_state *state = (m63_state *)space->machine->driver_data;
state->videoram2[offset] = data;
tilemap_mark_tile_dirty(state->fg_tilemap, offset);
}
static WRITE8_HANDLER( m63_palbank_w )
{
if (pal_bank != (data & 0x01))
m63_state *state = (m63_state *)space->machine->driver_data;
if (state->pal_bank != (data & 0x01))
{
pal_bank = data & 0x01;
tilemap_mark_all_tiles_dirty(bg_tilemap);
state->pal_bank = data & 0x01;
tilemap_mark_all_tiles_dirty(state->bg_tilemap);
}
}
@ -225,58 +248,62 @@ static WRITE8_HANDLER( m63_flipscreen_w )
static WRITE8_HANDLER( fghtbskt_flipscreen_w )
{
m63_state *state = (m63_state *)space->machine->driver_data;
flip_screen_set(space->machine, data);
fg_flag = flip_screen_get(space->machine) ? TILE_FLIPX : 0;
state->fg_flag = flip_screen_get(space->machine) ? TILE_FLIPX : 0;
}
static TILE_GET_INFO( get_bg_tile_info )
{
int attr = colorram[tile_index];
int code = videoram[tile_index] | ((attr & 0x30) << 4);
int color = (attr & 0x0f) + (pal_bank << 4);
m63_state *state = (m63_state *)machine->driver_data;
int attr = state->colorram[tile_index];
int code = state->videoram[tile_index] | ((attr & 0x30) << 4);
int color = (attr & 0x0f) + (state->pal_bank << 4);
SET_TILE_INFO(1, code, color, 0);
}
static TILE_GET_INFO( get_fg_tile_info )
{
int code = m63_videoram2[tile_index];
m63_state *state = (m63_state *)machine->driver_data;
SET_TILE_INFO(0, code, 0, fg_flag);
int code = state->videoram2[tile_index];
SET_TILE_INFO(0, code, 0, state->fg_flag);
}
static VIDEO_START( m63 )
{
bg_tilemap = tilemap_create(machine, get_bg_tile_info, tilemap_scan_rows,
8, 8, 32, 32);
m63_state *state = (m63_state *)machine->driver_data;
fg_tilemap = tilemap_create(machine, get_fg_tile_info, tilemap_scan_rows,
8, 8, 32, 32);
state->bg_tilemap = tilemap_create(machine, get_bg_tile_info, tilemap_scan_rows, 8, 8, 32, 32);
state->fg_tilemap = tilemap_create(machine, get_fg_tile_info, tilemap_scan_rows, 8, 8, 32, 32);
tilemap_set_scroll_cols(bg_tilemap, 32);
tilemap_set_transparent_pen(fg_tilemap, 0);
fg_flag = 0;
tilemap_set_scroll_cols(state->bg_tilemap, 32);
tilemap_set_transparent_pen(state->fg_tilemap, 0);
}
static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect)
{
m63_state *state = (m63_state *)machine->driver_data;
int offs;
for (offs = 0;offs < spriteram_size;offs += 4)
for (offs = 0; offs < spriteram_size; offs += 4)
{
int code = spriteram[offs + 1] | ((spriteram[offs + 2] & 0x10) << 4);
int color = (spriteram[offs + 2] & 0x0f) + (pal_bank << 4);
int flipx = spriteram[offs + 2] & 0x20;
int code = state->spriteram[offs + 1] | ((state->spriteram[offs + 2] & 0x10) << 4);
int color = (state->spriteram[offs + 2] & 0x0f) + (state->pal_bank << 4);
int flipx = state->spriteram[offs + 2] & 0x20;
int flipy = 0;
int sx = spriteram[offs + 3];
int sy = sy_offset - spriteram[offs];
int sx = state->spriteram[offs + 3];
int sy = state->sy_offset - state->spriteram[offs];
if (flip_screen_get(machine))
{
sx = 240 - sx;
sy = sy_offset - sy;
sy = state->sy_offset - sy;
flipx = !flipx;
flipy = !flipy;
}
@ -294,7 +321,7 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const recta
machine->gfx[2],
code, color,
flipx, flipy,
sx-0x100, sy, 0);
sx - 0x100, sy, 0);
}
}
@ -302,14 +329,16 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const recta
static VIDEO_UPDATE( m63 )
{
m63_state *state = (m63_state *)screen->machine->driver_data;
int col;
for (col = 0; col < 32; col++)
tilemap_set_scrolly(bg_tilemap, col, m63_scrollram[col * 8]);
tilemap_set_scrolly(state->bg_tilemap, col, state->scrollram[col * 8]);
tilemap_draw(bitmap, cliprect, bg_tilemap, 0, 0);
tilemap_draw(bitmap, cliprect, state->bg_tilemap, 0, 0);
draw_sprites(screen->machine, bitmap, cliprect);
tilemap_draw(bitmap, cliprect, fg_tilemap, 0, 0);
tilemap_draw(bitmap, cliprect, state->fg_tilemap, 0, 0);
return 0;
}
@ -327,30 +356,32 @@ static WRITE8_HANDLER( snd_irq_w )
static WRITE8_HANDLER( snddata_w )
{
const device_config *ay1 = devtag_get_device(space->machine, "ay1");
const device_config *ay2 = devtag_get_device(space->machine, "ay2");
m63_state *state = (m63_state *)space->machine->driver_data;
if ((p2 & 0xf0) == 0xe0)
ay8910_address_w(ay1, 0, offset);
else if ((p2 & 0xf0) == 0xa0)
ay8910_data_w(ay1, 0, offset);
else if (ay2 != NULL && (p1 & 0xe0) == 0x60)
ay8910_address_w(ay2, 0, offset);
else if (ay2 != NULL && (p1 & 0xe0) == 0x40)
ay8910_data_w(ay2, 0, offset);
else if ((p2 & 0xf0) == 0x70 )
sound_status = offset;
if ((state->p2 & 0xf0) == 0xe0)
ay8910_address_w(state->ay1, 0, offset);
else if ((state->p2 & 0xf0) == 0xa0)
ay8910_data_w(state->ay1, 0, offset);
else if (state->ay2 != NULL && (state->p1 & 0xe0) == 0x60)
ay8910_address_w(state->ay2, 0, offset);
else if (state->ay2 != NULL && (state->p1 & 0xe0) == 0x40)
ay8910_data_w(state->ay2, 0, offset);
else if ((state->p2 & 0xf0) == 0x70 )
state->sound_status = offset;
}
static WRITE8_HANDLER( p1_w )
{
p1 = data;
m63_state *state = (m63_state *)space->machine->driver_data;
state->p1 = data;
}
static WRITE8_HANDLER( p2_w )
{
p2 = data;
if((p2 & 0xf0) == 0x50)
m63_state *state = (m63_state *)space->machine->driver_data;
state->p2 = data;
if((state->p2 & 0xf0) == 0x50)
{
cputag_set_input_line(space->machine, "soundcpu", 0, CLEAR_LINE);
}
@ -358,14 +389,17 @@ static WRITE8_HANDLER( p2_w )
static READ8_HANDLER( snd_status_r )
{
return sound_status;
m63_state *state = (m63_state *)space->machine->driver_data;
return state->sound_status;
}
static READ8_HANDLER( irq_r )
{
if (sound_irq)
m63_state *state = (m63_state *)space->machine->driver_data;
if (state->sound_irq)
{
sound_irq = 0;
state->sound_irq = 0;
return 1;
}
return 0;
@ -373,23 +407,32 @@ static READ8_HANDLER( irq_r )
static READ8_HANDLER( snddata_r )
{
switch(p2 & 0xf0)
m63_state *state = (m63_state *)space->machine->driver_data;
switch (state->p2 & 0xf0)
{
case 0x60: return soundlatch_r(space, 0); ;
case 0x70: return memory_region(space->machine, "user1")[((p1 & 0x1f) << 8) | offset];
case 0x70: return memory_region(space->machine, "user1")[((state->p1 & 0x1f) << 8) | offset];
}
return 0xff;
}
static WRITE8_HANDLER( fghtbskt_samples_w )
{
m63_state *state = (m63_state *)space->machine->driver_data;
if (data & 1)
sample_start_raw(state->samples, 0, state->samplebuf + ((data & 0xf0) << 8), 0x2000, 8000, 0);
}
static ADDRESS_MAP_START( m63_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0xbfff) AM_ROM
AM_RANGE(0xd000, 0xdfff) AM_RAM
AM_RANGE(0xe000, 0xe1ff) AM_RAM
AM_RANGE(0xe200, 0xe2ff) AM_RAM AM_BASE(&spriteram) AM_SIZE(&spriteram_size)
AM_RANGE(0xe300, 0xe3ff) AM_RAM AM_BASE(&m63_scrollram)
AM_RANGE(0xe400, 0xe7ff) AM_RAM_WRITE(m63_videoram2_w) AM_BASE(&m63_videoram2)
AM_RANGE(0xe800, 0xebff) AM_RAM_WRITE(m63_videoram_w) AM_BASE(&videoram)
AM_RANGE(0xec00, 0xefff) AM_RAM_WRITE(m63_colorram_w) AM_BASE(&colorram)
AM_RANGE(0xe200, 0xe2ff) AM_RAM AM_BASE_MEMBER(m63_state, spriteram) AM_SIZE(&spriteram_size)
AM_RANGE(0xe300, 0xe3ff) AM_RAM AM_BASE_MEMBER(m63_state, scrollram)
AM_RANGE(0xe400, 0xe7ff) AM_RAM_WRITE(m63_videoram2_w) AM_BASE_MEMBER(m63_state, videoram2)
AM_RANGE(0xe800, 0xebff) AM_RAM_WRITE(m63_videoram_w) AM_BASE_MEMBER(m63_state, videoram)
AM_RANGE(0xec00, 0xefff) AM_RAM_WRITE(m63_colorram_w) AM_BASE_MEMBER(m63_state, colorram)
AM_RANGE(0xf000, 0xf000) AM_WRITE(interrupt_enable_w) /* NMI enable */
AM_RANGE(0xf002, 0xf002) AM_WRITE(m63_flipscreen_w)
AM_RANGE(0xf003, 0xf003) AM_WRITE(m63_palbank_w)
@ -406,11 +449,11 @@ static ADDRESS_MAP_START( fghtbskt_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x8000, 0xbfff) AM_ROM
AM_RANGE(0xc000, 0xc7ff) AM_RAM
AM_RANGE(0xd000, 0xd1ff) AM_RAM
AM_RANGE(0xd200, 0xd2ff) AM_RAM AM_BASE(&spriteram) AM_SIZE(&spriteram_size)
AM_RANGE(0xd300, 0xd3ff) AM_RAM AM_BASE(&m63_scrollram)
AM_RANGE(0xd400, 0xd7ff) AM_RAM_WRITE(m63_videoram2_w) AM_BASE(&m63_videoram2)
AM_RANGE(0xd800, 0xdbff) AM_RAM_WRITE(m63_videoram_w) AM_BASE(&videoram)
AM_RANGE(0xdc00, 0xdfff) AM_RAM_WRITE(m63_colorram_w) AM_BASE(&colorram)
AM_RANGE(0xd200, 0xd2ff) AM_RAM AM_BASE_MEMBER(m63_state, spriteram) AM_SIZE(&spriteram_size)
AM_RANGE(0xd300, 0xd3ff) AM_RAM AM_BASE_MEMBER(m63_state, scrollram)
AM_RANGE(0xd400, 0xd7ff) AM_RAM_WRITE(m63_videoram2_w) AM_BASE_MEMBER(m63_state, videoram2)
AM_RANGE(0xd800, 0xdbff) AM_RAM_WRITE(m63_videoram_w) AM_BASE_MEMBER(m63_state, videoram)
AM_RANGE(0xdc00, 0xdfff) AM_RAM_WRITE(m63_colorram_w) AM_BASE_MEMBER(m63_state, colorram)
AM_RANGE(0xf000, 0xf000) AM_READ(snd_status_r)
AM_RANGE(0xf001, 0xf001) AM_READ_PORT("P1")
AM_RANGE(0xf002, 0xf002) AM_READ_PORT("P2")
@ -622,6 +665,20 @@ static GFXDECODE_START( fghtbskt )
GFXDECODE_END
static SAMPLES_START( fghtbskt_sh_start )
{
running_machine *machine = device->machine;
m63_state *state = (m63_state *)machine->driver_data;
int i, len = memory_region_length(machine, "samples");
UINT8 *ROM = memory_region(machine, "samples");
state->samplebuf = auto_alloc_array(machine, INT16, len);
state_save_register_global_pointer(machine, state->samplebuf, len);
for(i = 0; i < len; i++)
state->samplebuf[i] = ((INT8)(ROM[i] ^ 0x80)) * 256;
}
static const samples_interface fghtbskt_samples_interface =
{
1,
@ -631,11 +688,46 @@ static const samples_interface fghtbskt_samples_interface =
static INTERRUPT_GEN( snd_irq )
{
sound_irq = 1;
m63_state *state = (m63_state *)device->machine->driver_data;
state->sound_irq = 1;
}
static MACHINE_START( m63 )
{
m63_state *state = (m63_state *)machine->driver_data;
state->ay1 = devtag_get_device(machine, "ay1");
state->ay2 = devtag_get_device(machine, "ay2");
state->samples = devtag_get_device(machine, "samples");
state_save_register_global(machine, state->pal_bank);
state_save_register_global(machine, state->fg_flag);
state_save_register_global(machine, state->sy_offset);
/* sound-related */
state_save_register_global(machine, state->sound_irq);
state_save_register_global(machine, state->sound_status);
state_save_register_global(machine, state->p1);
state_save_register_global(machine, state->p2);
}
static MACHINE_RESET( m63 )
{
m63_state *state = (m63_state *)machine->driver_data;
state->pal_bank = 0;
state->fg_flag = 0;
state->sound_irq = 0;
state->sound_status = 0;
state->p1 = 0;
state->p2 = 0;
}
static MACHINE_DRIVER_START( m63 )
/* driver data */
MDRV_DRIVER_DATA(m63_state)
/* basic machine hardware */
MDRV_CPU_ADD("maincpu",Z80,XTAL_12MHz/4) /* 3 MHz */
MDRV_CPU_PROGRAM_MAP(m63_map)
@ -646,6 +738,8 @@ static MACHINE_DRIVER_START( m63 )
MDRV_CPU_IO_MAP(i8039_port_map)
MDRV_CPU_PERIODIC_INT(snd_irq, 60)
MDRV_MACHINE_START(m63)
MDRV_MACHINE_RESET(m63)
/* video hardware */
MDRV_SCREEN_ADD("screen", RASTER)
@ -680,6 +774,9 @@ MACHINE_DRIVER_END
static MACHINE_DRIVER_START( fghtbskt )
/* driver data */
MDRV_DRIVER_DATA(m63_state)
/* basic machine hardware */
MDRV_CPU_ADD("maincpu", Z80, XTAL_12MHz/4) /* 3 MHz */
MDRV_CPU_PROGRAM_MAP(fghtbskt_map)
@ -690,6 +787,9 @@ static MACHINE_DRIVER_START( fghtbskt )
MDRV_CPU_IO_MAP(i8039_port_map)
MDRV_CPU_PERIODIC_INT(snd_irq, 60/2)
MDRV_MACHINE_START(m63)
MDRV_MACHINE_RESET(m63)
/* video hardware */
MDRV_SCREEN_ADD("screen", RASTER)
MDRV_SCREEN_REFRESH_RATE(60)
@ -888,21 +988,21 @@ ROM_START( fghtbskt )
ROM_LOAD( "fb_r.9e", 0x0000, 0x0100, CRC(c5cdc8ba) SHA1(3fcef3ebe0dda72dfa35e042ff611758c345d749) )
ROM_LOAD( "fb_g.10e", 0x0100, 0x0100, CRC(1460c936) SHA1(f99a544c83931de098a6cfac391f63ae43f5cdd0) )
ROM_LOAD( "fb_b.11e", 0x0200, 0x0100, CRC(fca5bf0e) SHA1(5846f43aa2906cac58e300fdab197b99f896e3ef) )
ROM_END
static DRIVER_INIT( wilytowr )
{
sy_offset = 238;
m63_state *state = (m63_state *)machine->driver_data;
state->sy_offset = 238;
}
static DRIVER_INIT( fghtbskt )
{
sy_offset = 240;
m63_state *state = (m63_state *)machine->driver_data;
state->sy_offset = 240;
}
GAME( 1984, wilytowr, 0, m63, wilytowr, wilytowr, ROT180, "Irem", "Wily Tower", 0 )
GAME( 1985, atomboy, wilytowr, atomboy, wilytowr, wilytowr, ROT180, "Irem (Memetron license)", "Atomic Boy (revision B)", 0 )
GAME( 1985, atomboya, wilytowr, atomboy, wilytowr, wilytowr, ROT180, "Irem (Memetron license)", "Atomic Boy (revision A)", 0 )
GAME( 1984, fghtbskt, 0, fghtbskt, fghtbskt, fghtbskt, ROT0, "Paradise Co. Ltd.", "Fighting Basketball", 0 )
GAME( 1984, wilytowr, 0, m63, wilytowr, wilytowr, ROT180, "Irem", "Wily Tower", GAME_SUPPORTS_SAVE )
GAME( 1985, atomboy, wilytowr, atomboy, wilytowr, wilytowr, ROT180, "Irem (Memetron license)", "Atomic Boy (revision B)", GAME_SUPPORTS_SAVE )
GAME( 1985, atomboya, wilytowr, atomboy, wilytowr, wilytowr, ROT180, "Irem (Memetron license)", "Atomic Boy (revision A)", GAME_SUPPORTS_SAVE )
GAME( 1984, fghtbskt, 0, fghtbskt, fghtbskt, fghtbskt, ROT0, "Paradise Co. Ltd.", "Fighting Basketball", GAME_SUPPORTS_SAVE )

View File

@ -50,26 +50,15 @@ and 2764 eprom (swapped D3/D4 and D5/D6 data lines)
#include "driver.h"
#include "cpu/z80/z80.h"
#include "audio/irem.h"
extern UINT8 *travrusa_videoram;
PALETTE_INIT( travrusa );
PALETTE_INIT( shtrider );
VIDEO_START( travrusa );
WRITE8_HANDLER( travrusa_videoram_w );
WRITE8_HANDLER( travrusa_scroll_x_low_w );
WRITE8_HANDLER( travrusa_scroll_x_high_w );
WRITE8_HANDLER( travrusa_flipscreen_w );
VIDEO_UPDATE( travrusa );
#include "includes/iremz80.h"
static ADDRESS_MAP_START( main_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0x7fff) AM_ROM
AM_RANGE(0x8000, 0x8fff) AM_RAM_WRITE(travrusa_videoram_w) AM_BASE(&travrusa_videoram)
AM_RANGE(0x8000, 0x8fff) AM_RAM_WRITE(travrusa_videoram_w) AM_BASE_MEMBER(irem_z80_state, videoram)
AM_RANGE(0x9000, 0x9000) AM_WRITE(travrusa_scroll_x_low_w)
AM_RANGE(0xa000, 0xa000) AM_WRITE(travrusa_scroll_x_high_w)
AM_RANGE(0xc800, 0xc9ff) AM_WRITE(SMH_RAM) AM_BASE(&spriteram) AM_SIZE(&spriteram_size)
AM_RANGE(0xc800, 0xc9ff) AM_WRITE(SMH_RAM) AM_BASE_MEMBER(irem_z80_state, spriteram) AM_SIZE(&spriteram_size)
AM_RANGE(0xd000, 0xd000) AM_WRITE(irem_sound_cmd_w)
AM_RANGE(0xd001, 0xd001) AM_WRITE(travrusa_flipscreen_w) /* + coin counters - not written by shtrider */
AM_RANGE(0xd000, 0xd000) AM_READ_PORT("SYSTEM") /* IN0 */
@ -300,15 +289,26 @@ static GFXDECODE_START( shtrider )
GFXDECODE_ENTRY( "gfx2", 0, shtrider_spritelayout, 16*8, 16 )
GFXDECODE_END
static MACHINE_RESET( travrusa )
{
irem_z80_state *state = (irem_z80_state *)machine->driver_data;
state->scrollx[0] = 0;
state->scrollx[1] = 0;
}
static MACHINE_DRIVER_START( travrusa )
/* driver data */
MDRV_DRIVER_DATA(irem_z80_state)
/* basic machine hardware */
MDRV_CPU_ADD("maincpu", Z80, 4000000) /* 4 MHz (?) */
MDRV_CPU_PROGRAM_MAP(main_map)
MDRV_CPU_VBLANK_INT("screen", irq0_line_hold)
MDRV_MACHINE_RESET(travrusa)
/* video hardware */
MDRV_SCREEN_ADD("screen", RASTER)
MDRV_SCREEN_REFRESH_RATE(56.75)
@ -458,14 +458,14 @@ ROM_END
static DRIVER_INIT( motorace )
{
int A,j;
int A, j;
UINT8 *rom = memory_region(machine, "maincpu");
UINT8 *buffer = alloc_array_or_die(UINT8, 0x2000);
memcpy(buffer,rom,0x2000);
memcpy(buffer, rom, 0x2000);
/* The first CPU ROM has the address and data lines scrambled */
for (A = 0;A < 0x2000;A++)
for (A = 0; A < 0x2000; A++)
{
j = BITSWAP16(A,15,14,13,9,7,5,3,1,12,10,8,6,4,2,0,11);
rom[j] = BITSWAP8(buffer[A],2,7,4,1,6,3,0,5);
@ -486,7 +486,7 @@ static DRIVER_INIT( shtridra )
GAME( 1983, travrusa, 0, travrusa, travrusa, 0, ROT270, "Irem", "Traverse USA / Zippy Race", 0 )
GAME( 1983, motorace, travrusa, travrusa, motorace, motorace, ROT270, "Irem (Williams license)", "MotoRace USA", 0 )
GAME( 1985, shtrider, 0, shtrider, shtrider, 0, ROT270|ORIENTATION_FLIP_X, "Seibu Kaihatsu", "Shot Rider", 0 )
GAME( 1984, shtridera,shtrider, shtrider, shtrider, shtridra, ROT270|ORIENTATION_FLIP_X, "Seibu Kaihatsu (Sigma license)", "Shot Rider (Sigma license)", 0 )
GAME( 1983, travrusa, 0, travrusa, travrusa, 0, ROT270, "Irem", "Traverse USA / Zippy Race", GAME_SUPPORTS_SAVE )
GAME( 1983, motorace, travrusa, travrusa, motorace, motorace, ROT270, "Irem (Williams license)", "MotoRace USA", GAME_SUPPORTS_SAVE )
GAME( 1985, shtrider, 0, shtrider, shtrider, 0, ROT270|ORIENTATION_FLIP_X, "Seibu Kaihatsu", "Shot Rider", GAME_SUPPORTS_SAVE )
GAME( 1984, shtridera,shtrider, shtrider, shtrider, shtridra, ROT270|ORIENTATION_FLIP_X, "Seibu Kaihatsu (Sigma license)", "Shot Rider (Sigma license)", GAME_SUPPORTS_SAVE )

175
src/mame/includes/iremz80.h Normal file
View File

@ -0,0 +1,175 @@
/*************************************************************************
Irem Z80 hardware - M52, M57, M58 and M62 boards
*************************************************************************/
/* These share sound hardware (in audio/irem.h) and hence driver data */
typedef struct _irem_z80_state irem_z80_state;
struct _irem_z80_state
{
/* memory pointers */
UINT8 * videoram; // m52, m57, m58
UINT8 * spriteram; // m52, m57, m58, m62
UINT8 * colorram; // m52
UINT8 * m62_tileram; // m62
UINT8 * m62_textram; // m62
UINT8 * scrollram; // m57, m62 (horizon only)
/* sound-related */
UINT8 port1, port2;
/* video-related */
tilemap* bg_tilemap; // m52, m57, m58, m62
tilemap* fg_tilemap; // m62
int flipscreen; // m57, m62
/* driver specific (video-related) */
/* travrusa */
int scrollx[2];
/* M52 */
UINT8 bg1xpos, bg1ypos;
UINT8 bg2xpos, bg2ypos;
UINT8 bgcontrol;
/* M58 */
UINT8 *yard_scroll_x_low;
UINT8 *yard_scroll_x_high;
UINT8 *yard_scroll_y_low;
UINT8 *yard_score_panel_disabled;
bitmap_t *scroll_panel_bitmap;
/* M62 */
const UINT8 *sprite_height_prom;
INT32 m62_background_hscroll;
INT32 m62_background_vscroll;
UINT8 kidniki_background_bank;
INT32 kidniki_text_vscroll;
int ldrun3_topbottom_mask;
INT32 spelunkr_palbank;
/* misc */
int ldrun2_bankswap; //ldrun2
int bankcontrol[2]; //ldrun2
/* sound devices */
const device_config *ay1;
const device_config *ay2;
const device_config *adpcm1;
const device_config *adpcm2;
};
/*----------- defined in audio/irem.c -----------*/
MACHINE_DRIVER_EXTERN( m52_sound_c_audio );
MACHINE_DRIVER_EXTERN( m52_large_audio );
MACHINE_DRIVER_EXTERN( m62_audio );
WRITE8_HANDLER( irem_sound_cmd_w );
/* Video hardware is different otoh */
/*----------- defined in video/m52.c -----------*/
READ8_HANDLER( m52_protection_r );
WRITE8_HANDLER( m52_scroll_w );
WRITE8_HANDLER( m52_bg1xpos_w );
WRITE8_HANDLER( m52_bg1ypos_w );
WRITE8_HANDLER( m52_bg2xpos_w );
WRITE8_HANDLER( m52_bg2ypos_w );
WRITE8_HANDLER( m52_bgcontrol_w );
WRITE8_HANDLER( m52_flipscreen_w );
WRITE8_HANDLER( alpha1v_flipscreen_w );
WRITE8_HANDLER( m52_videoram_w );
WRITE8_HANDLER( m52_colorram_w );
PALETTE_INIT( m52 );
VIDEO_START( m52 );
VIDEO_UPDATE( m52 );
/*----------- defined in video/m57.c -----------*/
WRITE8_HANDLER( m57_videoram_w );
WRITE8_HANDLER( m57_flipscreen_w );
PALETTE_INIT( m57 );
VIDEO_START( m57 );
VIDEO_UPDATE( m57 );
/*----------- defined in video/m58.c -----------*/
WRITE8_HANDLER( yard_videoram_w );
WRITE8_HANDLER( yard_scroll_panel_w );
WRITE8_HANDLER( yard_flipscreen_w );
PALETTE_INIT( yard );
VIDEO_START( yard );
VIDEO_UPDATE( yard );
/*----------- defined in video/travrusa.c -----------*/
WRITE8_HANDLER( travrusa_videoram_w );
WRITE8_HANDLER( travrusa_scroll_x_low_w );
WRITE8_HANDLER( travrusa_scroll_x_high_w );
WRITE8_HANDLER( travrusa_flipscreen_w );
PALETTE_INIT( travrusa );
PALETTE_INIT( shtrider );
VIDEO_START( travrusa );
VIDEO_UPDATE( travrusa );
/*----------- defined in video/m62.c -----------*/
WRITE8_HANDLER( m62_tileram_w );
WRITE8_HANDLER( m62_textram_w );
WRITE8_HANDLER( m62_flipscreen_w );
WRITE8_HANDLER( m62_hscroll_low_w );
WRITE8_HANDLER( m62_hscroll_high_w );
WRITE8_HANDLER( m62_vscroll_low_w );
WRITE8_HANDLER( m62_vscroll_high_w );
WRITE8_HANDLER( horizon_scrollram_w );
WRITE8_HANDLER( kidniki_text_vscroll_low_w );
WRITE8_HANDLER( kidniki_text_vscroll_high_w );
WRITE8_HANDLER( kidniki_background_bank_w );
WRITE8_HANDLER( kungfum_tileram_w );
WRITE8_HANDLER( ldrun3_topbottom_mask_w );
WRITE8_HANDLER( spelunkr_palbank_w );
WRITE8_HANDLER( spelunk2_gfxport_w );
PALETTE_INIT( m62 );
PALETTE_INIT( lotlot );
PALETTE_INIT( battroad );
PALETTE_INIT( spelunk2 );
VIDEO_START( battroad );
VIDEO_START( horizon );
VIDEO_START( kidniki );
VIDEO_START( kungfum );
VIDEO_START( ldrun );
VIDEO_START( ldrun2 );
VIDEO_START( ldrun4 );
VIDEO_START( lotlot );
VIDEO_START( spelunkr );
VIDEO_START( spelunk2 );
VIDEO_START( youjyudn );
VIDEO_UPDATE( battroad );
VIDEO_UPDATE( horizon );
VIDEO_UPDATE( kidniki );
VIDEO_UPDATE( kungfum );
VIDEO_UPDATE( ldrun );
VIDEO_UPDATE( ldrun3 );
VIDEO_UPDATE( ldrun4 );
VIDEO_UPDATE( lotlot );
VIDEO_UPDATE( spelunkr );
VIDEO_UPDATE( spelunk2 );
VIDEO_UPDATE( youjyudn );

View File

@ -31,19 +31,30 @@ typedef struct _m10_state m10_state;
struct _m10_state
{
/* memory pointers */
UINT8 * chargen;
UINT8 * memory;
UINT8 * rom;
UINT8 * chargen;
UINT8 * memory;
UINT8 * rom;
UINT8 * videoram;
UINT8 * colorram;
/* machine states */
/* video-related */
tilemap * tx_tilemap;
gfx_element * back_gfx;
/* sound state */
/* this is currently unused, because it is needed by gfx_layout (which has no machine) */
UINT32 extyoffs[32 * 8];
/* video state */
UINT8 bottomline;
UINT8 flip;
UINT8 bottomline;
UINT8 flip;
/* Specific states */
/* misc */
int last;
/* devices */
const device_config *ic8j1;
const device_config *ic8j2;
const device_config *samples;
};
@ -59,4 +70,3 @@ VIDEO_UPDATE( m15 );
VIDEO_START( m10 );
VIDEO_START( m15 );

View File

@ -1,25 +0,0 @@
/*************************************************************************
Irem M52 hardware
*************************************************************************/
/*----------- defined in video/m52.c -----------*/
READ8_HANDLER( m52_protection_r );
WRITE8_HANDLER( m52_scroll_w );
WRITE8_HANDLER( m52_bg1xpos_w );
WRITE8_HANDLER( m52_bg1ypos_w );
WRITE8_HANDLER( m52_bg2xpos_w );
WRITE8_HANDLER( m52_bg2ypos_w );
WRITE8_HANDLER( m52_bgcontrol_w );
WRITE8_HANDLER( m52_flipscreen_w );
WRITE8_HANDLER( alpha1v_flipscreen_w );
WRITE8_HANDLER( m52_videoram_w );
WRITE8_HANDLER( m52_colorram_w );
PALETTE_INIT( m52 );
VIDEO_START( m52 );
VIDEO_UPDATE( m52 );

View File

@ -1,17 +0,0 @@
/*************************************************************************
Irem M57 hardware
*************************************************************************/
/*----------- defined in video/m57.c -----------*/
extern UINT8 *m57_scroll;
WRITE8_HANDLER( m57_videoram_w );
WRITE8_HANDLER( m57_flipscreen_w );
PALETTE_INIT( m57 );
VIDEO_START( m57 );
VIDEO_UPDATE( m57 );

View File

@ -1,20 +0,0 @@
/*************************************************************************
Irem M58 hardware
*************************************************************************/
/*----------- defined in video/m58.c -----------*/
extern UINT8 *yard_scroll_x_low;
extern UINT8 *yard_scroll_x_high;
extern UINT8 *yard_scroll_y_low;
extern UINT8 *yard_score_panel_disabled;
WRITE8_HANDLER( yard_videoram_w );
WRITE8_HANDLER( yard_scroll_panel_w );
WRITE8_HANDLER( yard_flipscreen_w );
PALETTE_INIT( yard );
VIDEO_START( yard );
VIDEO_UPDATE( yard );

View File

@ -1,65 +0,0 @@
/*************************************************************************
Irem M62 hardware
*************************************************************************/
/*----------- defined in video/m62.c -----------*/
PALETTE_INIT( m62 );
PALETTE_INIT( lotlot );
PALETTE_INIT( battroad );
PALETTE_INIT( spelunk2 );
WRITE8_HANDLER( m62_tileram_w );
WRITE8_HANDLER( m62_textram_w );
WRITE8_HANDLER( m62_flipscreen_w );
WRITE8_HANDLER( m62_hscroll_low_w );
WRITE8_HANDLER( m62_hscroll_high_w );
WRITE8_HANDLER( m62_vscroll_low_w );
WRITE8_HANDLER( m62_vscroll_high_w );
WRITE8_HANDLER( ldrun3_topbottom_mask_w );
extern UINT8 *m62_tileram;
extern UINT8 *m62_textram;
VIDEO_START( kungfum );
VIDEO_UPDATE( kungfum );
WRITE8_HANDLER( kungfum_tileram_w );
VIDEO_START( ldrun );
VIDEO_UPDATE( ldrun );
VIDEO_START( ldrun2 );
VIDEO_UPDATE( ldrun3 );
VIDEO_START( battroad );
VIDEO_UPDATE( battroad );
VIDEO_START( ldrun4 );
VIDEO_UPDATE( ldrun4 );
VIDEO_START( lotlot );
VIDEO_UPDATE( lotlot );
WRITE8_HANDLER( kidniki_text_vscroll_low_w );
WRITE8_HANDLER( kidniki_text_vscroll_high_w );
WRITE8_HANDLER( kidniki_background_bank_w );
VIDEO_START( kidniki );
VIDEO_UPDATE( kidniki );
WRITE8_HANDLER( spelunkr_palbank_w );
VIDEO_START( spelunkr );
VIDEO_UPDATE( spelunkr );
WRITE8_HANDLER( spelunk2_gfxport_w );
VIDEO_START( spelunk2 );
VIDEO_UPDATE( spelunk2 );
VIDEO_START( youjyudn );
VIDEO_UPDATE( youjyudn );
VIDEO_START( horizon );
VIDEO_UPDATE( horizon );
WRITE8_HANDLER( horizon_scrollram_w );
extern UINT8 *horizon_scrollram;

View File

@ -705,7 +705,6 @@ $(MAMEOBJ)/irem.a: \
$(DRIVERS)/travrusa.o $(VIDEO)/travrusa.o \
$(DRIVERS)/vigilant.o $(VIDEO)/vigilant.o \
$(MACHINE)/irem_cpu.o \
$(AUDIO)/fghtbskt.o \
$(AUDIO)/irem.o \
$(MAMEOBJ)/itech.a: \

View File

@ -13,9 +13,8 @@
#include "driver.h"
#include "m10.h"
static tilemap * tx_tilemap;
static gfx_element * back_gfx;
static UINT32 extyoffs[32*8];
static UINT32 extyoffs[32 * 8]; // FIXME: this should be moved to m10_state, but backlayout would have problems
static const gfx_layout backlayout =
{
@ -40,24 +39,28 @@ static const gfx_layout charlayout =
8*8 /* every char takes 8 consecutive bytes */
};
static UINT32 tilemap_scan(UINT32 col,UINT32 row,UINT32 num_cols,UINT32 num_rows)
static UINT32 tilemap_scan( UINT32 col, UINT32 row, UINT32 num_cols, UINT32 num_rows )
{
return (31-col)*32 + row;
return (31 - col) * 32 + row;
}
static void get_tile_info(running_machine *machine, tile_data *tileinfo, tilemap_memory_index tile_index, void *param)
static void get_tile_info( running_machine *machine, tile_data *tileinfo, tilemap_memory_index tile_index, void *param )
{
SET_TILE_INFO(0, videoram[tile_index], colorram[tile_index] & 0x07, 0);
m10_state *state = (m10_state *)machine->driver_data;
SET_TILE_INFO(0, state->videoram[tile_index], state->colorram[tile_index] & 0x07, 0);
}
WRITE8_HANDLER( m10_colorram_w )
{
if (colorram[offset] != data)
m10_state *state = (m10_state *)space->machine->driver_data;
if (state->colorram[offset] != data)
{
tilemap_mark_tile_dirty(tx_tilemap, offset);
colorram[offset] = data;
tilemap_mark_tile_dirty(state->tx_tilemap, offset);
state->colorram[offset] = data;
}
}
@ -69,7 +72,7 @@ WRITE8_HANDLER( m10_chargen_w )
if (state->chargen[offset] != data)
{
state->chargen[offset] = data;
gfx_element_mark_dirty(back_gfx, offset >> (3+5));
gfx_element_mark_dirty(state->back_gfx, offset >> (3 + 5));
}
}
@ -81,20 +84,20 @@ WRITE8_HANDLER( m15_chargen_w )
if (state->chargen[offset] != data)
{
state->chargen[offset] = data;
gfx_element_mark_dirty(space->machine->gfx[0],offset >> 3);
gfx_element_mark_dirty(space->machine->gfx[0], offset >> 3);
}
}
INLINE void plot_pixel_m10(running_machine *machine, bitmap_t *bm, int x, int y, int col)
INLINE void plot_pixel_m10( running_machine *machine, bitmap_t *bm, int x, int y, int col )
{
m10_state *state = (m10_state *)machine->driver_data;
if (!state->flip)
*BITMAP_ADDR16(bm, y, x) = col;
else
*BITMAP_ADDR16(bm, (IREMM10_VBSTART - 1)- (y - IREMM10_VBEND) + 6
, (IREMM10_HBSTART - 1)- (x- IREMM10_HBEND)) = col; // only when flip_screen(?)
*BITMAP_ADDR16(bm, (IREMM10_VBSTART - 1) - (y - IREMM10_VBEND) + 6,
(IREMM10_HBSTART - 1) - (x - IREMM10_HBEND)) = col; // only when flip_screen(?)
}
VIDEO_START( m10 )
@ -102,17 +105,17 @@ VIDEO_START( m10 )
m10_state *state = (m10_state *)machine->driver_data;
int i;
for (i=0;i<32*8;i++)
extyoffs[i] = i*8;
for (i = 0; i < 32 * 8; i++)
extyoffs[i] = i * 8;
tx_tilemap = tilemap_create(machine, get_tile_info,tilemap_scan,8,8,32,32);
tilemap_set_transparent_pen(tx_tilemap, 0);
tilemap_set_scrolldx(tx_tilemap, 0, 62);
tilemap_set_scrolldy(tx_tilemap, 0, 0);
state->tx_tilemap = tilemap_create(machine, get_tile_info, tilemap_scan, 8, 8, 32, 32);
tilemap_set_transparent_pen(state->tx_tilemap, 0);
tilemap_set_scrolldx(state->tx_tilemap, 0, 62);
tilemap_set_scrolldy(state->tx_tilemap, 0, 0);
back_gfx = gfx_element_alloc(machine, &backlayout, state->chargen, 8, 0);
state->back_gfx = gfx_element_alloc(machine, &backlayout, state->chargen, 8, 0);
machine->gfx[1] = back_gfx;
machine->gfx[1] = state->back_gfx;
return ;
}
@ -122,9 +125,9 @@ VIDEO_START( m15 )
machine->gfx[0] = gfx_element_alloc(machine, &charlayout, state->chargen, 8, 0);
tx_tilemap = tilemap_create(machine, get_tile_info,tilemap_scan,8,8,32,32);
tilemap_set_scrolldx(tx_tilemap, 0, 116);
tilemap_set_scrolldy(tx_tilemap, 0, 0);
state->tx_tilemap = tilemap_create(machine, get_tile_info,tilemap_scan, 8, 8, 32, 32);
tilemap_set_scrolldx(state->tx_tilemap, 0, 116);
tilemap_set_scrolldy(state->tx_tilemap, 0, 0);
return ;
}
@ -134,6 +137,7 @@ VIDEO_START( m15 )
Draw the game screen in the given bitmap_t.
***************************************************************************/
VIDEO_UPDATE( m10 )
{
m10_state *state = (m10_state *)screen->machine->driver_data;
@ -142,27 +146,27 @@ VIDEO_UPDATE( m10 )
static const int xpos[4] = { 4*8, 26*8, 7*8, 6*8};
int i;
bitmap_fill(bitmap,cliprect,0);
bitmap_fill(bitmap, cliprect, 0);
for (i=0;i<4;i++)
for (i = 0; i < 4; i++)
if (state->flip)
drawgfx_opaque(bitmap, cliprect, back_gfx, i, color[i], 1, 1, 31*8 - xpos[i], 6);
drawgfx_opaque(bitmap, cliprect, state->back_gfx, i, color[i], 1, 1, 31 * 8 - xpos[i], 6);
else
drawgfx_opaque(bitmap, cliprect, back_gfx, i, color[i], 0, 0, xpos[i], 0);
drawgfx_opaque(bitmap, cliprect, state->back_gfx, i, color[i], 0, 0, xpos[i], 0);
if (state->bottomline)
{
int y;
for (y = IREMM10_VBEND;y < IREMM10_VBSTART;y++)
plot_pixel_m10(screen->machine, bitmap,16,y,1);
for (y = IREMM10_VBEND; y < IREMM10_VBSTART; y++)
plot_pixel_m10(screen->machine, bitmap, 16, y, 1);
}
for (offs = videoram_size - 1;offs >= 0;offs--)
tilemap_mark_tile_dirty(tx_tilemap, offs);
for (offs = videoram_size - 1; offs >= 0; offs--)
tilemap_mark_tile_dirty(state->tx_tilemap, offs);
tilemap_set_flip(tx_tilemap, state->flip ? TILEMAP_FLIPX | TILEMAP_FLIPY : 0);
tilemap_draw(bitmap,cliprect,tx_tilemap,0,0);
tilemap_set_flip(state->tx_tilemap, state->flip ? TILEMAP_FLIPX | TILEMAP_FLIPY : 0);
tilemap_draw(bitmap, cliprect, state->tx_tilemap, 0, 0);
return 0;
}
@ -173,18 +177,18 @@ VIDEO_UPDATE( m10 )
Draw the game screen in the given bitmap_t.
***************************************************************************/
VIDEO_UPDATE( m15 )
{
m10_state *state = (m10_state *)screen->machine->driver_data;
int offs;
for (offs = videoram_size - 1;offs >= 0;offs--)
tilemap_mark_tile_dirty(tx_tilemap, offs);
for (offs = videoram_size - 1; offs >= 0; offs--)
tilemap_mark_tile_dirty(state->tx_tilemap, offs);
//tilemap_mark_all_tiles_dirty(tx_tilemap);
tilemap_set_flip(tx_tilemap, state->flip ? TILEMAP_FLIPX | TILEMAP_FLIPY : 0);
tilemap_draw(bitmap,cliprect,tx_tilemap,0,0);
//tilemap_mark_all_tiles_dirty(state->tx_tilemap);
tilemap_set_flip(state->tx_tilemap, state->flip ? TILEMAP_FLIPX | TILEMAP_FLIPY : 0);
tilemap_draw(bitmap, cliprect, state->tx_tilemap, 0, 0);
return 0;
}

View File

@ -5,19 +5,11 @@
***************************************************************************/
#include "driver.h"
#include "m52.h"
#include "includes/iremz80.h"
#include "video/resnet.h"
#define BGHEIGHT 64
static UINT8 bg1xpos;
static UINT8 bg1ypos;
static UINT8 bg2xpos;
static UINT8 bg2ypos;
static UINT8 bgcontrol;
static tilemap* bg_tilemap;
/*************************************
*
@ -36,7 +28,7 @@ PALETTE_INIT( m52 )
double weights_r[3], weights_g[3], weights_b[3], scale;
int i;
machine->colortable = colortable_alloc(machine, 512+32+32);
machine->colortable = colortable_alloc(machine, 512 + 32 + 32);
/* compute palette information for characters/backgrounds */
scale = compute_resistor_weights(0, 255, -1.0,
@ -80,7 +72,7 @@ PALETTE_INIT( m52 )
int g = combine_3_weights(weights_g, BIT(promval,3), BIT(promval,4), BIT(promval,5));
int b = combine_3_weights(weights_b, BIT(promval,0), BIT(promval,1), BIT(promval,2));
colortable_palette_set_color(machine->colortable, 512+32+i, MAKE_RGB(r,g,b));
colortable_palette_set_color(machine->colortable, 512 + 32 + i, MAKE_RGB(r,g,b));
}
/* character lookup table */
@ -88,10 +80,10 @@ PALETTE_INIT( m52 )
colortable_entry_set_value(machine->colortable, i, i);
/* sprite lookup table */
for (i = 0; i < 16*4; i++)
for (i = 0; i < 16 * 4; i++)
{
UINT8 promval = sprite_table[(i & 3) | ((i & ~3) << 1)];
colortable_entry_set_value(machine->colortable, 512+i, 512+32+promval);
colortable_entry_set_value(machine->colortable, 512 + i, 512 + 32 + promval);
}
/* background */
@ -124,8 +116,9 @@ PALETTE_INIT( m52 )
static TILE_GET_INFO( get_tile_info )
{
UINT8 video = videoram[tile_index];
UINT8 color = colorram[tile_index];
irem_z80_state *state = (irem_z80_state *)machine->driver_data;
UINT8 video = state->videoram[tile_index];
UINT8 color = state->colorram[tile_index];
int flag = 0;
int code = 0;
@ -155,18 +148,20 @@ static TILE_GET_INFO( get_tile_info )
VIDEO_START( m52 )
{
bg_tilemap = tilemap_create(machine, get_tile_info, tilemap_scan_rows, 8, 8, 32, 32);
irem_z80_state *state = (irem_z80_state *)machine->driver_data;
tilemap_set_transparent_pen(bg_tilemap, 0);
tilemap_set_scrolldx(bg_tilemap, 128 - 1, -1);
tilemap_set_scrolldy(bg_tilemap, 16, 16);
tilemap_set_scroll_rows(bg_tilemap, 4); /* only lines 192-256 scroll */
state->bg_tilemap = tilemap_create(machine, get_tile_info, tilemap_scan_rows, 8, 8, 32, 32);
state_save_register_global(machine, bg1xpos);
state_save_register_global(machine, bg1ypos);
state_save_register_global(machine, bg2xpos);
state_save_register_global(machine, bg2ypos);
state_save_register_global(machine, bgcontrol);
tilemap_set_transparent_pen(state->bg_tilemap, 0);
tilemap_set_scrolldx(state->bg_tilemap, 128 - 1, -1);
tilemap_set_scrolldy(state->bg_tilemap, 16, 16);
tilemap_set_scroll_rows(state->bg_tilemap, 4); /* only lines 192-256 scroll */
state_save_register_global(machine, state->bg1xpos);
state_save_register_global(machine, state->bg1ypos);
state_save_register_global(machine, state->bg2xpos);
state_save_register_global(machine, state->bg2ypos);
state_save_register_global(machine, state->bgcontrol);
}
@ -179,7 +174,7 @@ VIDEO_START( m52 )
WRITE8_HANDLER( m52_scroll_w )
{
irem_z80_state *state = (irem_z80_state *)space->machine->driver_data;
/*
According to the schematics there is only one video register that holds the X scroll value
with a NAND gate on the V64 and V128 lines to control when it's read, and when
@ -187,10 +182,10 @@ WRITE8_HANDLER( m52_scroll_w )
So we set the first 3 quarters to 255 and the last to the scroll value
*/
tilemap_set_scrollx(bg_tilemap, 0, 255);
tilemap_set_scrollx(bg_tilemap, 1, 255);
tilemap_set_scrollx(bg_tilemap, 2, 255);
tilemap_set_scrollx(bg_tilemap, 3, -data);
tilemap_set_scrollx(state->bg_tilemap, 0, 255);
tilemap_set_scrollx(state->bg_tilemap, 1, 255);
tilemap_set_scrollx(state->bg_tilemap, 2, 255);
tilemap_set_scrollx(state->bg_tilemap, 3, -data);
}
@ -203,15 +198,19 @@ WRITE8_HANDLER( m52_scroll_w )
WRITE8_HANDLER( m52_videoram_w )
{
videoram[offset] = data;
tilemap_mark_tile_dirty(bg_tilemap, offset);
irem_z80_state *state = (irem_z80_state *)space->machine->driver_data;
state->videoram[offset] = data;
tilemap_mark_tile_dirty(state->bg_tilemap, offset);
}
WRITE8_HANDLER( m52_colorram_w )
{
colorram[offset] = data;
tilemap_mark_tile_dirty(bg_tilemap, offset);
irem_z80_state *state = (irem_z80_state *)space->machine->driver_data;
state->colorram[offset] = data;
tilemap_mark_tile_dirty(state->bg_tilemap, offset);
}
@ -227,12 +226,13 @@ WRITE8_HANDLER( m52_colorram_w )
follows: result = popcount(value & 0x7f) ^ (value >> 7) */
READ8_HANDLER( m52_protection_r )
{
irem_z80_state *state = (irem_z80_state *)space->machine->driver_data;
int popcount = 0;
int temp;
for (temp = bg1xpos & 0x7f; temp != 0; temp >>= 1)
for (temp = state->bg1xpos & 0x7f; temp != 0; temp >>= 1)
popcount += temp & 1;
return popcount ^ (bg1xpos >> 7);
return popcount ^ (state->bg1xpos >> 7);
}
@ -245,27 +245,32 @@ READ8_HANDLER( m52_protection_r )
WRITE8_HANDLER( m52_bg1ypos_w )
{
bg1ypos = data;
irem_z80_state *state = (irem_z80_state *)space->machine->driver_data;
state->bg1ypos = data;
}
WRITE8_HANDLER( m52_bg1xpos_w )
{
bg1xpos = data;
irem_z80_state *state = (irem_z80_state *)space->machine->driver_data;
state->bg1xpos = data;
}
WRITE8_HANDLER( m52_bg2xpos_w )
{
bg2xpos = data;
irem_z80_state *state = (irem_z80_state *)space->machine->driver_data;
state->bg2xpos = data;
}
WRITE8_HANDLER( m52_bg2ypos_w )
{
bg2ypos = data;
irem_z80_state *state = (irem_z80_state *)space->machine->driver_data;
state->bg2ypos = data;
}
WRITE8_HANDLER( m52_bgcontrol_w )
{
bgcontrol = data;
irem_z80_state *state = (irem_z80_state *)space->machine->driver_data;
state->bgcontrol = data;
}
@ -357,35 +362,36 @@ static void draw_background(running_machine *machine, bitmap_t *bitmap, const re
VIDEO_UPDATE( m52 )
{
irem_z80_state *state = (irem_z80_state *)screen->machine->driver_data;
int offs;
bitmap_fill(bitmap, cliprect, 0);
if (!(bgcontrol & 0x20))
if (!(state->bgcontrol & 0x20))
{
if (!(bgcontrol & 0x10))
draw_background(screen->machine, bitmap, cliprect, bg2xpos, bg2ypos, 2); /* distant mountains */
if (!(state->bgcontrol & 0x10))
draw_background(screen->machine, bitmap, cliprect, state->bg2xpos, state->bg2ypos, 2); /* distant mountains */
if (!(bgcontrol & 0x02))
draw_background(screen->machine, bitmap, cliprect, bg1xpos, bg1ypos, 3); /* hills */
if (!(state->bgcontrol & 0x02))
draw_background(screen->machine, bitmap, cliprect, state->bg1xpos, state->bg1ypos, 3); /* hills */
if (!(bgcontrol & 0x04))
draw_background(screen->machine, bitmap, cliprect, bg1xpos, bg1ypos, 4); /* cityscape */
if (!(state->bgcontrol & 0x04))
draw_background(screen->machine, bitmap, cliprect, state->bg1xpos, state->bg1ypos, 4); /* cityscape */
}
tilemap_set_flip(bg_tilemap, flip_screen_get(screen->machine) ? TILEMAP_FLIPX | TILEMAP_FLIPY : 0);
tilemap_set_flip(state->bg_tilemap, flip_screen_get(screen->machine) ? TILEMAP_FLIPX | TILEMAP_FLIPY : 0);
tilemap_draw(bitmap, cliprect, bg_tilemap, 0, 0);
tilemap_draw(bitmap, cliprect, state->bg_tilemap, 0, 0);
/* draw the sprites */
for (offs = 0xfc; offs >= 0; offs -= 4)
{
int sy = 257 - spriteram[offs];
int color = spriteram[offs + 1] & 0x3f;
int flipx = spriteram[offs + 1] & 0x40;
int flipy = spriteram[offs + 1] & 0x80;
int code = spriteram[offs + 2];
int sx = spriteram[offs + 3];
int sy = 257 - state->spriteram[offs];
int color = state->spriteram[offs + 1] & 0x3f;
int flipx = state->spriteram[offs + 1] & 0x40;
int flipy = state->spriteram[offs + 1] & 0x80;
int code = state->spriteram[offs + 2];
int sx = state->spriteram[offs + 3];
rectangle clip;
/* sprites from offsets $00-$7F are processed in the upper half of the frame */
@ -419,7 +425,7 @@ VIDEO_UPDATE( m52 )
drawgfx_transmask(bitmap, &clip, screen->machine->gfx[1],
code, color, flipx, flipy, sx, sy,
colortable_get_transpen_mask(screen->machine->colortable, screen->machine->gfx[1], color, 512+32));
colortable_get_transpen_mask(screen->machine->colortable, screen->machine->gfx[1], color, 512 + 32));
}
return 0;
}

View File

@ -5,13 +5,7 @@
****************************************************************************/
#include "driver.h"
#include "m57.h"
UINT8 *m57_scroll;
static int flipscreen;
static tilemap *bg_tilemap;
#include "includes/iremz80.h"
/***************************************************************************
@ -35,16 +29,17 @@ static tilemap *bg_tilemap;
bit 0 -- 1 kohm resistor -- BLUE
***************************************************************************/
PALETTE_INIT( m57 )
{
int i;
machine->colortable = colortable_alloc(machine, 32*8+16);
machine->colortable = colortable_alloc(machine, 32 * 8 + 16);
/* character palette */
for (i = 0;i < 256;i++)
for (i = 0; i < 256; i++)
{
int bit0,bit1,bit2,r,g,b;
int bit0, bit1, bit2, r, g, b;
/* red component */
bit0 = 0;
@ -62,8 +57,8 @@ PALETTE_INIT( m57 )
bit2 = (color_prom[0] >> 2) & 0x01;
b = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2;
colortable_palette_set_color(machine->colortable,i,MAKE_RGB(r,g,b));
colortable_entry_set_value(machine->colortable,i,i);
colortable_palette_set_color(machine->colortable, i, MAKE_RGB(r,g,b));
colortable_entry_set_value(machine->colortable, i, i);
color_prom++;
}
@ -71,9 +66,9 @@ PALETTE_INIT( m57 )
/* color_prom now points to the beginning of the sprite palette */
/* sprite palette */
for (i = 0;i < 16;i++)
for (i = 0; i < 16; i++)
{
int bit0,bit1,bit2,r,g,b;
int bit0, bit1, bit2, r, g, b;
/* red component */
bit0 = 0;
@ -91,7 +86,7 @@ PALETTE_INIT( m57 )
bit2 = (*color_prom >> 2) & 0x01;
b = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2;
colortable_palette_set_color(machine->colortable,i+256,MAKE_RGB(r,g,b));
colortable_palette_set_color(machine->colortable, i + 256, MAKE_RGB(r,g,b));
color_prom++;
}
@ -100,9 +95,9 @@ PALETTE_INIT( m57 )
/* sprite lookup table */
for (i = 0;i < 32*8;i++)
for (i = 0; i < 32 * 8; i++)
{
colortable_entry_set_value(machine->colortable,i+32*8,256 + (~*color_prom & 0x0f));
colortable_entry_set_value(machine->colortable, i + 32 * 8, 256 + (~*color_prom & 0x0f));
color_prom++;
}
}
@ -116,8 +111,10 @@ PALETTE_INIT( m57 )
static TILE_GET_INFO( get_tile_info )
{
UINT8 attr = videoram[tile_index*2 + 0];
UINT16 code = videoram[tile_index*2 + 1] | ((attr & 0xc0) << 2);
irem_z80_state *state = (irem_z80_state *)machine->driver_data;
UINT8 attr = state->videoram[tile_index * 2 + 0];
UINT16 code = state->videoram[tile_index * 2 + 1] | ((attr & 0xc0) << 2);
SET_TILE_INFO(0, code, attr & 0x0f, TILE_FLIPXY(attr >> 4));
}
@ -131,8 +128,10 @@ static TILE_GET_INFO( get_tile_info )
WRITE8_HANDLER( m57_videoram_w )
{
videoram[offset] = data;
tilemap_mark_tile_dirty(bg_tilemap, offset / 2);
irem_z80_state *state = (irem_z80_state *)space->machine->driver_data;
state->videoram[offset] = data;
tilemap_mark_tile_dirty(state->bg_tilemap, offset / 2);
}
@ -144,8 +143,12 @@ WRITE8_HANDLER( m57_videoram_w )
VIDEO_START( m57 )
{
bg_tilemap = tilemap_create(machine, get_tile_info, tilemap_scan_rows, 8, 8, 32, 32);
tilemap_set_scroll_rows(bg_tilemap, 256);
irem_z80_state *state = (irem_z80_state *)machine->driver_data;
state->bg_tilemap = tilemap_create(machine, get_tile_info, tilemap_scan_rows, 8, 8, 32, 32);
tilemap_set_scroll_rows(state->bg_tilemap, 256);
state_save_register_global(machine, state->flipscreen);
}
@ -157,9 +160,11 @@ VIDEO_START( m57 )
WRITE8_HANDLER( m57_flipscreen_w )
{
irem_z80_state *state = (irem_z80_state *)space->machine->driver_data;
/* screen flip is handled both by software and hardware */
flipscreen = (data & 0x01) ^ (~input_port_read(space->machine, "DSW2") & 0x01);
tilemap_set_flip(bg_tilemap, flipscreen ? (TILEMAP_FLIPY | TILEMAP_FLIPX) : 0);
state->flipscreen = (data & 0x01) ^ (~input_port_read(space->machine, "DSW2") & 0x01);
tilemap_set_flip(state->bg_tilemap, state->flipscreen ? (TILEMAP_FLIPY | TILEMAP_FLIPX) : 0);
coin_counter_w(0,data & 0x02);
coin_counter_w(1,data & 0x20);
@ -174,19 +179,20 @@ WRITE8_HANDLER( m57_flipscreen_w )
static void draw_background(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect)
{
irem_z80_state *state = (irem_z80_state *)machine->driver_data;
int y,x;
INT16 scrolly;
// from 64 to 127: not wrapped
for (y = 64; y < 128; y++)
tilemap_set_scrollx(bg_tilemap, y, m57_scroll[0x40]);
tilemap_set_scrollx(state->bg_tilemap, y, state->scrollram[0x40]);
tilemap_draw(bitmap, cliprect, bg_tilemap, 0, 0);
tilemap_draw(bitmap, cliprect, state->bg_tilemap, 0, 0);
// from 128 to 255: wrapped
for (y = 128; y <= cliprect->max_y; y++)
{
scrolly = m57_scroll[y] + (m57_scroll[y + 0x100] << 8);
scrolly = state->scrollram[y] + (state->scrollram[y + 0x100] << 8);
if (scrolly >= 0)
{
@ -217,26 +223,26 @@ static void draw_background(running_machine *machine, bitmap_t *bitmap, const re
static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect)
{
irem_z80_state *state = (irem_z80_state *)machine->driver_data;
int offs;
for (offs = spriteram_size-4;offs >= 0;offs -= 4)
for (offs = spriteram_size - 4; offs >= 0; offs -= 4)
{
UINT8 attributes = spriteram[offs+1];
int sx = spriteram[offs+3];
int sy = ((224-spriteram[offs+0]-32)&0xff)+32;
int code = spriteram[offs+2];
int color = attributes&0x1f;
int flipy = attributes&0x80;
int flipx = attributes&0x40;
UINT8 attributes = state->spriteram[offs + 1];
int sx = state->spriteram[offs + 3];
int sy = ((224 - state->spriteram[offs + 0] - 32) & 0xff) + 32;
int code = state->spriteram[offs + 2];
int color = attributes & 0x1f;
int flipy = attributes & 0x80;
int flipx = attributes & 0x40;
int tile_number = code & 0x3f;
int bank = 0;
if( code&0x80 ) bank += 1;
if( attributes&0x20 ) bank += 2;
if (code & 0x80) bank += 1;
if (attributes & 0x20) bank += 2;
if (flipscreen)
if (state->flipscreen)
{
sx = 240 - sx;
sy = 224 - sy;
@ -244,12 +250,12 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const recta
flipy = !flipy;
}
drawgfx_transmask(bitmap,cliprect,machine->gfx[1+bank],
drawgfx_transmask(bitmap, cliprect, machine->gfx[1 + bank],
tile_number,
color,
flipx,flipy,
sx,sy,
colortable_get_transpen_mask(machine->colortable, machine->gfx[1], color, 256+15));
flipx, flipy,
sx, sy,
colortable_get_transpen_mask(machine->colortable, machine->gfx[1], color, 256 + 15));
}
}

View File

@ -5,17 +5,9 @@
***************************************************************************/
#include "driver.h"
#include "m58.h"
#include "includes/iremz80.h"
#include "video/resnet.h"
UINT8 *yard_scroll_x_low;
UINT8 *yard_scroll_x_high;
UINT8 *yard_scroll_y_low;
UINT8 *yard_score_panel_disabled;
static bitmap_t *scroll_panel_bitmap;
static tilemap *bg_tilemap;
#define SCROLL_PANEL_WIDTH (14*4)
#define RADAR_PALETTE_BASE (256)
@ -113,19 +105,24 @@ PALETTE_INIT( yard )
WRITE8_HANDLER( yard_videoram_w )
{
videoram[offset] = data;
tilemap_mark_tile_dirty(bg_tilemap, offset / 2);
irem_z80_state *state = (irem_z80_state *)space->machine->driver_data;
state->videoram[offset] = data;
tilemap_mark_tile_dirty(state->bg_tilemap, offset / 2);
}
WRITE8_HANDLER( yard_scroll_panel_w )
{
irem_z80_state *state = (irem_z80_state *)space->machine->driver_data;
int sx,sy,i;
sx = ( offset % 16 );
sy = ( offset / 16 );
if (sx < 1 || sx > 14) return;
if (sx < 1 || sx > 14)
return;
sx = 4 * (sx - 1);
@ -136,7 +133,7 @@ WRITE8_HANDLER( yard_scroll_panel_w )
col = (data >> i) & 0x11;
col = ((col >> 3) | col) & 3;
*BITMAP_ADDR16(scroll_panel_bitmap, sy, sx + i) = RADAR_PALETTE_BASE + (sy & 0xfc) + col;
*BITMAP_ADDR16(state->scroll_panel_bitmap, sy, sx + i) = RADAR_PALETTE_BASE + (sy & 0xfc) + col;
}
}
@ -150,9 +147,11 @@ WRITE8_HANDLER( yard_scroll_panel_w )
static TILE_GET_INFO( yard_get_bg_tile_info )
{
irem_z80_state *state = (irem_z80_state *)machine->driver_data;
int offs = tile_index * 2;
int attr = videoram[offs + 1];
int code = videoram[offs] + ((attr & 0xc0) << 2);
int attr = state->videoram[offs + 1];
int code = state->videoram[offs] + ((attr & 0xc0) << 2);
int color = attr & 0x1f;
int flags = (attr & 0x20) ? TILE_FLIPX : 0;
@ -164,9 +163,9 @@ static UINT32 yard_tilemap_scan_rows( UINT32 col, UINT32 row, UINT32 num_cols, U
{
/* logical (col,row) -> memory offset */
if (col >= 32)
return (row+32)*32 + col-32;
return (row + 32) * 32 + col - 32;
else
return row*32 + col;
return row * 32 + col;
}
@ -179,16 +178,18 @@ static UINT32 yard_tilemap_scan_rows( UINT32 col, UINT32 row, UINT32 num_cols, U
VIDEO_START( yard )
{
irem_z80_state *state = (irem_z80_state *)machine->driver_data;
int width = video_screen_get_width(machine->primary_screen);
int height = video_screen_get_height(machine->primary_screen);
bitmap_format format = video_screen_get_format(machine->primary_screen);
const rectangle *visarea = video_screen_get_visible_area(machine->primary_screen);
bg_tilemap = tilemap_create(machine, yard_get_bg_tile_info, yard_tilemap_scan_rows, 8, 8, 64, 32);
tilemap_set_scrolldx(bg_tilemap, visarea->min_x, width - (visarea->max_x + 1));
tilemap_set_scrolldy(bg_tilemap, visarea->min_y - 8, height + 16 - (visarea->max_y + 1));
state->bg_tilemap = tilemap_create(machine, yard_get_bg_tile_info, yard_tilemap_scan_rows, 8, 8, 64, 32);
tilemap_set_scrolldx(state->bg_tilemap, visarea->min_x, width - (visarea->max_x + 1));
tilemap_set_scrolldy(state->bg_tilemap, visarea->min_y - 8, height + 16 - (visarea->max_y + 1));
scroll_panel_bitmap = auto_bitmap_alloc(machine, SCROLL_PANEL_WIDTH, height, format);
state->scroll_panel_bitmap = auto_bitmap_alloc(machine, SCROLL_PANEL_WIDTH, height, format);
}
@ -220,20 +221,21 @@ WRITE8_HANDLER( yard_flipscreen_w )
static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect )
{
irem_z80_state *state = (irem_z80_state *)machine->driver_data;
int offs;
const rectangle *visarea = video_screen_get_visible_area(machine->primary_screen);
for (offs = spriteram_size - 4; offs >= 0; offs -= 4)
{
int attr = spriteram[offs + 1];
int attr = state->spriteram[offs + 1];
int bank = (attr & 0x20) >> 5;
int code1 = spriteram[offs + 2] & 0xbf;
int code1 = state->spriteram[offs + 2] & 0xbf;
int code2 = 0;
int color = attr & 0x1f;
int flipx = attr & 0x40;
int flipy = attr & 0x80;
int sx = spriteram[offs + 3];
int sy1 = 233 - spriteram[offs];
int sx = state->spriteram[offs + 3];
int sy1 = 233 - state->spriteram[offs];
int sy2 = 0;
if (flipy)
@ -274,7 +276,9 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const recta
static void draw_panel( running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect )
{
if (! *yard_score_panel_disabled)
irem_z80_state *state = (irem_z80_state *)machine->driver_data;
if (!*state->yard_score_panel_disabled)
{
static const rectangle clippanel =
{
@ -295,7 +299,7 @@ static void draw_panel( running_machine *machine, bitmap_t *bitmap, const rectan
clip.max_y += visarea->max_y + yoffs;
sect_rect(&clip, cliprect);
copybitmap(bitmap, scroll_panel_bitmap, flip_screen_get(machine), flip_screen_get(machine),
copybitmap(bitmap, state->scroll_panel_bitmap, flip_screen_get(machine), flip_screen_get(machine),
sx, visarea->min_y + yoffs, &clip);
}
}
@ -310,10 +314,12 @@ static void draw_panel( running_machine *machine, bitmap_t *bitmap, const rectan
VIDEO_UPDATE( yard )
{
tilemap_set_scrollx(bg_tilemap, 0, (*yard_scroll_x_high * 0x100) + *yard_scroll_x_low);
tilemap_set_scrolly(bg_tilemap, 0, *yard_scroll_y_low);
irem_z80_state *state = (irem_z80_state *)screen->machine->driver_data;
tilemap_draw(bitmap, cliprect, bg_tilemap, 0, 0);
tilemap_set_scrollx(state->bg_tilemap, 0, (*state->yard_scroll_x_high * 0x100) + *state->yard_scroll_x_low);
tilemap_set_scrolly(state->bg_tilemap, 0, *state->yard_scroll_y_low);
tilemap_draw(bitmap, cliprect, state->bg_tilemap, 0, 0);
draw_sprites(screen->machine, bitmap, cliprect);
draw_panel(screen->machine, bitmap, cliprect);
return 0;

File diff suppressed because it is too large Load Diff

View File

@ -12,12 +12,7 @@ J Clegg
***************************************************************************/
#include "driver.h"
UINT8 *travrusa_videoram;
static tilemap *bg_tilemap;
#include "includes/iremz80.h"
/***************************************************************************
@ -202,14 +197,15 @@ PALETTE_INIT( shtrider )
static TILE_GET_INFO( get_tile_info )
{
UINT8 attr = travrusa_videoram[2*tile_index+1];
irem_z80_state *state = (irem_z80_state *)machine->driver_data;
UINT8 attr = state->videoram[2 * tile_index + 1];
int flags = TILE_FLIPXY((attr & 0x30) >> 4);
tileinfo->group = ((attr & 0x0f) == 0x0f) ? 1 : 0; /* tunnels */
SET_TILE_INFO(
0,
travrusa_videoram[2*tile_index] + ((attr & 0xc0) << 2),
state->videoram[2 * tile_index] + ((attr & 0xc0) << 2),
attr & 0x0f,
flags);
}
@ -224,12 +220,16 @@ static TILE_GET_INFO( get_tile_info )
VIDEO_START( travrusa )
{
bg_tilemap = tilemap_create(machine, get_tile_info,tilemap_scan_rows,8,8,64,32);
irem_z80_state *state = (irem_z80_state *)machine->driver_data;
tilemap_set_transmask(bg_tilemap,0,0xff,0x00); /* split type 0 is totally transparent in front half */
tilemap_set_transmask(bg_tilemap,1,0x3f,0xc0); /* split type 1 has pens 6 and 7 opaque - tunnels */
state_save_register_global_array(machine, state->scrollx);
tilemap_set_scroll_rows(bg_tilemap,4);
state->bg_tilemap = tilemap_create(machine, get_tile_info, tilemap_scan_rows, 8, 8, 64, 32);
tilemap_set_transmask(state->bg_tilemap, 0, 0xff, 0x00); /* split type 0 is totally transparent in front half */
tilemap_set_transmask(state->bg_tilemap, 1, 0x3f, 0xc0); /* split type 1 has pens 6 and 7 opaque - tunnels */
tilemap_set_scroll_rows(state->bg_tilemap, 4);
}
@ -242,32 +242,35 @@ VIDEO_START( travrusa )
WRITE8_HANDLER( travrusa_videoram_w )
{
travrusa_videoram[offset] = data;
tilemap_mark_tile_dirty(bg_tilemap,offset/2);
irem_z80_state *state = (irem_z80_state *)space->machine->driver_data;
state->videoram[offset] = data;
tilemap_mark_tile_dirty(state->bg_tilemap, offset / 2);
}
static int scrollx[2];
static void set_scroll(void)
static void set_scroll( running_machine *machine )
{
irem_z80_state *state = (irem_z80_state *)machine->driver_data;
int i;
for (i = 0;i <= 2;i++)
tilemap_set_scrollx(bg_tilemap,i,scrollx[0] + 256 * scrollx[1]);
tilemap_set_scrollx(bg_tilemap,3,0);
for (i = 0; i <= 2; i++)
tilemap_set_scrollx(state->bg_tilemap, i, state->scrollx[0] + 256 * state->scrollx[1]);
tilemap_set_scrollx(state->bg_tilemap, 3, 0);
}
WRITE8_HANDLER( travrusa_scroll_x_low_w )
{
scrollx[0] = data;
set_scroll();
irem_z80_state *state = (irem_z80_state *)space->machine->driver_data;
state->scrollx[0] = data;
set_scroll(space->machine);
}
WRITE8_HANDLER( travrusa_scroll_x_high_w )
{
scrollx[1] = data;
set_scroll();
irem_z80_state *state = (irem_z80_state *)space->machine->driver_data;
state->scrollx[1] = data;
set_scroll(space->machine);
}
@ -278,8 +281,8 @@ WRITE8_HANDLER( travrusa_flipscreen_w )
flip_screen_set(space->machine, data & 1);
coin_counter_w(0,data & 0x02);
coin_counter_w(1,data & 0x20);
coin_counter_w(0, data & 0x02);
coin_counter_w(1, data & 0x20);
}
@ -292,6 +295,7 @@ WRITE8_HANDLER( travrusa_flipscreen_w )
static void draw_sprites(running_machine *machine, bitmap_t *bitmap,const rectangle *cliprect)
{
irem_z80_state *state = (irem_z80_state *)machine->driver_data;
int offs;
static const rectangle spritevisiblearea =
{
@ -312,10 +316,10 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap,const rectan
for (offs = spriteram_size - 4;offs >= 0;offs -= 4)
{
int sx = ((spriteram[offs + 3] + 8) & 0xff) - 8;
int sy = 240 - spriteram[offs];
int code = spriteram[offs + 2];
int attr = spriteram[offs + 1];
int sx = ((state->spriteram[offs + 3] + 8) & 0xff) - 8;
int sy = 240 - state->spriteram[offs];
int code = state->spriteram[offs + 2];
int attr = state->spriteram[offs + 1];
int flipx = attr & 0x40;
int flipy = attr & 0x80;
@ -327,19 +331,20 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap,const rectan
flipy = !flipy;
}
drawgfx_transpen(bitmap,&clip,machine->gfx[1],
drawgfx_transpen(bitmap, &clip, machine->gfx[1],
code,
attr & 0x0f,
flipx,flipy,
sx,sy,0);
flipx, flipy,
sx, sy, 0);
}
}
VIDEO_UPDATE( travrusa )
{
tilemap_draw(bitmap,cliprect,bg_tilemap,TILEMAP_DRAW_LAYER1,0);
irem_z80_state *state = (irem_z80_state *)screen->machine->driver_data;
tilemap_draw(bitmap, cliprect, state->bg_tilemap, TILEMAP_DRAW_LAYER1, 0);
draw_sprites(screen->machine, bitmap,cliprect);
tilemap_draw(bitmap,cliprect,bg_tilemap,TILEMAP_DRAW_LAYER0,0);
tilemap_draw(bitmap, cliprect, state->bg_tilemap, TILEMAP_DRAW_LAYER0, 0);
return 0;
}