mirror of
https://github.com/holub/mame
synced 2025-05-25 07:15:25 +03:00
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:
parent
693024974e
commit
d8588f632f
7
.gitattributes
vendored
7
.gitattributes
vendored
@ -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
|
||||
|
@ -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;
|
||||
}
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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 );
|
@ -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 )
|
||||
|
@ -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 )
|
||||
|
@ -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 )
|
||||
|
@ -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 )
|
||||
|
@ -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 )
|
||||
|
@ -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 )
|
||||
|
@ -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 )
|
||||
|
@ -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
175
src/mame/includes/iremz80.h
Normal 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 );
|
@ -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 );
|
||||
|
||||
|
@ -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 );
|
||||
|
||||
|
@ -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 );
|
||||
|
@ -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 );
|
@ -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;
|
@ -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: \
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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
@ -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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user