mirror of
https://github.com/holub/mame
synced 2025-05-31 18:11:50 +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/dragrace.c svneol=native#text/plain
|
||||||
src/mame/audio/exidy.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/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/firetrk.c svneol=native#text/plain
|
||||||
src/mame/audio/flower.c svneol=native#text/plain
|
src/mame/audio/flower.c svneol=native#text/plain
|
||||||
src/mame/audio/galaga.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/hitme.c svneol=native#text/plain
|
||||||
src/mame/audio/invinco.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.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/jaguar.c svneol=native#text/plain
|
||||||
src/mame/audio/jedi.c svneol=native#text/plain
|
src/mame/audio/jedi.c svneol=native#text/plain
|
||||||
src/mame/audio/laserbat.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/inufuku.h svneol=native#text/plain
|
||||||
src/mame/includes/iqblock.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/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/irobot.h svneol=native#text/plain
|
||||||
src/mame/includes/itech32.h svneol=native#text/plain
|
src/mame/includes/itech32.h svneol=native#text/plain
|
||||||
src/mame/includes/itech8.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/lwings.h svneol=native#text/plain
|
||||||
src/mame/includes/m10.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/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/m72.h svneol=native#text/plain
|
||||||
src/mame/includes/m79amb.h svneol=native#text/plain
|
src/mame/includes/m79amb.h svneol=native#text/plain
|
||||||
src/mame/includes/m92.h svneol=native#text/plain
|
src/mame/includes/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/ay8910.h"
|
||||||
#include "sound/msm5205.h"
|
#include "sound/msm5205.h"
|
||||||
#include "sound/discrete.h"
|
#include "sound/discrete.h"
|
||||||
|
#include "includes/iremz80.h"
|
||||||
static UINT8 port1, port2;
|
|
||||||
|
|
||||||
|
|
||||||
/*************************************
|
/*************************************
|
||||||
@ -22,8 +21,15 @@ static UINT8 port1, port2;
|
|||||||
|
|
||||||
static SOUND_START( irem_audio )
|
static SOUND_START( irem_audio )
|
||||||
{
|
{
|
||||||
state_save_register_global(machine, port1);
|
irem_z80_state *state = (irem_z80_state *)machine->driver_data;
|
||||||
state_save_register_global(machine, port2);
|
|
||||||
|
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 )
|
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 )
|
static WRITE8_HANDLER( m6803_port2_w )
|
||||||
{
|
{
|
||||||
/* write latch */
|
irem_z80_state *state = (irem_z80_state *)space->machine->driver_data;
|
||||||
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");
|
|
||||||
|
|
||||||
|
/* write latch */
|
||||||
|
if ((state->port2 & 0x01) && !(data & 0x01))
|
||||||
|
{
|
||||||
/* control or data port? */
|
/* control or data port? */
|
||||||
if (port2 & 0x04)
|
if (state->port2 & 0x04)
|
||||||
{
|
{
|
||||||
/* PSG 0 or 1? */
|
/* PSG 0 or 1? */
|
||||||
if (port2 & 0x08)
|
if (state->port2 & 0x08)
|
||||||
ay8910_address_w(ay1, 0, port1);
|
ay8910_address_w(state->ay1, 0, state->port1);
|
||||||
if (port2 & 0x10)
|
if (state->port2 & 0x10)
|
||||||
ay8910_address_w(ay2, 0, port1);
|
ay8910_address_w(state->ay2, 0, state->port1);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* PSG 0 or 1? */
|
/* PSG 0 or 1? */
|
||||||
if (port2 & 0x08)
|
if (state->port2 & 0x08)
|
||||||
ay8910_data_w(ay1, 0, port1);
|
ay8910_data_w(state->ay1, 0, state->port1);
|
||||||
if (port2 & 0x10)
|
if (state->port2 & 0x10)
|
||||||
ay8910_data_w(ay2, 0, port1);
|
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 )
|
static READ8_HANDLER( m6803_port1_r )
|
||||||
{
|
{
|
||||||
|
irem_z80_state *state = (irem_z80_state *)space->machine->driver_data;
|
||||||
|
|
||||||
/* PSG 0 or 1? */
|
/* PSG 0 or 1? */
|
||||||
if (port2 & 0x08)
|
if (state->port2 & 0x08)
|
||||||
return ay8910_r(devtag_get_device(space->machine, "ay1"), 0);
|
return ay8910_r(state->ay1, 0);
|
||||||
if (port2 & 0x10)
|
if (state->port2 & 0x10)
|
||||||
return ay8910_r(devtag_get_device(space->machine, "ay2"), 0);
|
return ay8910_r(state->ay2, 0);
|
||||||
return 0xff;
|
return 0xff;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -120,18 +129,17 @@ static READ8_HANDLER( m6803_port2_r )
|
|||||||
|
|
||||||
static WRITE8_DEVICE_HANDLER( ay8910_0_portb_w )
|
static WRITE8_DEVICE_HANDLER( ay8910_0_portb_w )
|
||||||
{
|
{
|
||||||
const device_config *adpcm0 = devtag_get_device(device->machine, "msm1");
|
irem_z80_state *state = (irem_z80_state *)device->machine->driver_data;
|
||||||
const device_config *adpcm1 = devtag_get_device(device->machine, "msm2");
|
|
||||||
|
|
||||||
/* bits 2-4 select MSM5205 clock & 3b/4b playback mode */
|
/* bits 2-4 select MSM5205 clock & 3b/4b playback mode */
|
||||||
msm5205_playmode_w(adpcm0, (data >> 2) & 7);
|
msm5205_playmode_w(state->adpcm1, (data >> 2) & 7);
|
||||||
if (adpcm1 != NULL)
|
if (state->adpcm2 != NULL)
|
||||||
msm5205_playmode_w(adpcm1, ((data >> 2) & 4) | 3); /* always in slave mode */
|
msm5205_playmode_w(state->adpcm2, ((data >> 2) & 4) | 3); /* always in slave mode */
|
||||||
|
|
||||||
/* bits 0 and 1 reset the two chips */
|
/* bits 0 and 1 reset the two chips */
|
||||||
msm5205_reset_w(adpcm0, data & 1);
|
msm5205_reset_w(state->adpcm1, data & 1);
|
||||||
if (adpcm1 != NULL)
|
if (state->adpcm2 != NULL)
|
||||||
msm5205_reset_w(adpcm1, data & 2);
|
msm5205_reset_w(state->adpcm2, data & 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -158,23 +166,25 @@ static WRITE8_HANDLER( sound_irq_ack_w )
|
|||||||
|
|
||||||
static WRITE8_HANDLER( m52_adpcm_w )
|
static WRITE8_HANDLER( m52_adpcm_w )
|
||||||
{
|
{
|
||||||
|
irem_z80_state *state = (irem_z80_state *)space->machine->driver_data;
|
||||||
|
|
||||||
if (offset & 1)
|
if (offset & 1)
|
||||||
{
|
{
|
||||||
const device_config *adpcm = devtag_get_device(space->machine, "msm1");
|
msm5205_data_w(state->adpcm1, data);
|
||||||
msm5205_data_w(adpcm, data);
|
|
||||||
}
|
}
|
||||||
if (offset & 2)
|
if (offset & 2)
|
||||||
{
|
{
|
||||||
const device_config *adpcm = devtag_get_device(space->machine, "msm2");
|
if (state->adpcm2 != NULL)
|
||||||
if (adpcm != NULL)
|
msm5205_data_w(state->adpcm2, data);
|
||||||
msm5205_data_w(adpcm, data);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static WRITE8_HANDLER( m62_adpcm_w )
|
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)
|
if (adpcm != NULL)
|
||||||
msm5205_data_w(adpcm, data);
|
msm5205_data_w(adpcm, data);
|
||||||
}
|
}
|
||||||
@ -189,15 +199,15 @@ static WRITE8_HANDLER( m62_adpcm_w )
|
|||||||
|
|
||||||
static void adpcm_int(const device_config *device)
|
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);
|
cputag_set_input_line(device->machine, "iremsound", INPUT_LINE_NMI, PULSE_LINE);
|
||||||
|
|
||||||
/* the first MSM5205 clocks the second */
|
/* the first MSM5205 clocks the second */
|
||||||
if (msm2 != NULL)
|
if (state->adpcm2 != NULL)
|
||||||
{
|
{
|
||||||
msm5205_vclk_w(msm2, 1);
|
msm5205_vclk_w(state->adpcm2, 1);
|
||||||
msm5205_vclk_w(msm2, 0);
|
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 );
|
|
@ -136,10 +136,12 @@ static WRITE8_DEVICE_HANDLER(ic8j1_output_changed)
|
|||||||
|
|
||||||
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 */
|
/* written from /Q to A with slight delight */
|
||||||
LOG(("ic8j2: %d\n", data));
|
LOG(("ic8j2: %d\n", data));
|
||||||
ttl74123_a_w(device, 0, 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 =
|
static const ttl74123_config ic8j1_intf =
|
||||||
@ -189,12 +191,26 @@ static PALETTE_INIT( m10 )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static MACHINE_RESET( irem )
|
static MACHINE_START( m10 )
|
||||||
{
|
{
|
||||||
m10_state *state = (m10_state *)machine->driver_data;
|
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->bottomline);
|
||||||
state_save_register_global(machine, state->flip);
|
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 )
|
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;
|
m10_state *state = (m10_state *)space->machine->driver_data;
|
||||||
|
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
@ -249,27 +264,27 @@ static WRITE8_HANDLER( m10_ctrl_w )
|
|||||||
break;
|
break;
|
||||||
case 0x01:
|
case 0x01:
|
||||||
/* MISSILE sound */
|
/* MISSILE sound */
|
||||||
sample_start(samples, 0, 0, 0);
|
sample_start(state->samples, 0, 0, 0);
|
||||||
break;
|
break;
|
||||||
case 0x02:
|
case 0x02:
|
||||||
/* EXPLOSION sound */
|
/* EXPLOSION sound */
|
||||||
sample_start(samples, 1, 1, 0);
|
sample_start(state->samples, 1, 1, 0);
|
||||||
break;
|
break;
|
||||||
case 0x03:
|
case 0x03:
|
||||||
/* INVADER HIT sound */
|
/* INVADER HIT sound */
|
||||||
sample_start(samples, 2, 2, 0);
|
sample_start(state->samples, 2, 2, 0);
|
||||||
break;
|
break;
|
||||||
case 0x04:
|
case 0x04:
|
||||||
/* BONUS BASE sound */
|
/* BONUS BASE sound */
|
||||||
sample_start(samples, 3, 8, 0);
|
sample_start(state->samples, 3, 8, 0);
|
||||||
break;
|
break;
|
||||||
case 0x05:
|
case 0x05:
|
||||||
/* FLEET MOVE sound */
|
/* FLEET MOVE sound */
|
||||||
sample_start(samples, 3, 3, 0);
|
sample_start(state->samples, 3, 3, 0);
|
||||||
break;
|
break;
|
||||||
case 0x06:
|
case 0x06:
|
||||||
/* SAUCER HIT SOUND */
|
/* SAUCER HIT SOUND */
|
||||||
sample_start(samples, 2, 7, 0);
|
sample_start(state->samples, 2, 7, 0);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
popmessage("Unknown sound M10: %02x\n", data & 0x07);
|
popmessage("Unknown sound M10: %02x\n", data & 0x07);
|
||||||
@ -277,9 +292,9 @@ static WRITE8_HANDLER( m10_ctrl_w )
|
|||||||
}
|
}
|
||||||
/* UFO SOUND */
|
/* UFO SOUND */
|
||||||
if (data & 0x08)
|
if (data & 0x08)
|
||||||
sample_stop(samples, 4);
|
sample_stop(state->samples, 4);
|
||||||
else
|
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;
|
m10_state *state = (m10_state *)space->machine->driver_data;
|
||||||
|
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
if (data & 0x4C)
|
if (data & 0x4c)
|
||||||
popmessage("M11 ctrl: %02x",data);
|
popmessage("M11 ctrl: %02x",data);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -338,7 +353,7 @@ static WRITE8_HANDLER( m15_ctrl_w )
|
|||||||
m10_state *state = (m10_state *)space->machine->driver_data;
|
m10_state *state = (m10_state *)space->machine->driver_data;
|
||||||
|
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
if (data & 0xF0)
|
if (data & 0xf0)
|
||||||
popmessage("M15 ctrl: %02x",data);
|
popmessage("M15 ctrl: %02x",data);
|
||||||
#endif
|
#endif
|
||||||
if (input_port_read(space->machine, "CAB") & 0x01)
|
if (input_port_read(space->machine, "CAB") & 0x01)
|
||||||
@ -364,52 +379,51 @@ static WRITE8_HANDLER( m15_ctrl_w )
|
|||||||
static WRITE8_HANDLER( m10_a500_w )
|
static WRITE8_HANDLER( m10_a500_w )
|
||||||
{
|
{
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
if (data & 0xFC)
|
if (data & 0xfc)
|
||||||
popmessage("a500: %02x",data);
|
popmessage("a500: %02x",data);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static WRITE8_HANDLER( m11_a100_w )
|
static WRITE8_HANDLER( m11_a100_w )
|
||||||
{
|
{
|
||||||
static int last = 0x00;
|
m10_state *state = (m10_state *)space->machine->driver_data;
|
||||||
const device_config *samples = devtag_get_device(space->machine, "samples");
|
int raising_bits = data & ~state->last;
|
||||||
int raising_bits = data & ~last;
|
//int falling_bits = ~data & state->last;
|
||||||
//int falling_bits = ~data & last;
|
|
||||||
|
|
||||||
// should a falling bit stop a sample?
|
// should a falling bit stop a sample?
|
||||||
// This port is written to about 20x per vblank
|
// This port is written to about 20x per vblank
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
if ((last & 0xE8) != (data & 0xE8))
|
if ((state->last & 0xe8) != (data & 0xe8))
|
||||||
popmessage("A100: %02x\n", data);
|
popmessage("A100: %02x\n", data);
|
||||||
#endif
|
#endif
|
||||||
last = data;
|
state->last = data;
|
||||||
|
|
||||||
// audio control!
|
// audio control!
|
||||||
/* MISSILE sound */
|
/* MISSILE sound */
|
||||||
if (raising_bits & 0x01)
|
if (raising_bits & 0x01)
|
||||||
sample_start(samples, 0, 0, 0);
|
sample_start(state->samples, 0, 0, 0);
|
||||||
|
|
||||||
/* EXPLOSION sound */
|
/* EXPLOSION sound */
|
||||||
if (raising_bits & 0x02)
|
if (raising_bits & 0x02)
|
||||||
sample_start(samples, 1, 1, 0);
|
sample_start(state->samples, 1, 1, 0);
|
||||||
|
|
||||||
/* Rapidly falling parachute */
|
/* Rapidly falling parachute */
|
||||||
if (raising_bits & 0x04)
|
if (raising_bits & 0x04)
|
||||||
sample_start(samples, 3, 8, 0);
|
sample_start(state->samples, 3, 8, 0);
|
||||||
|
|
||||||
/* Background sound ? */
|
/* Background sound ? */
|
||||||
if (data & 0x10)
|
if (data & 0x10)
|
||||||
sample_start(samples, 4, 9, 1);
|
sample_start(state->samples, 4, 9, 1);
|
||||||
else
|
else
|
||||||
sample_stop(samples, 4);
|
sample_stop(state->samples, 4);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static WRITE8_HANDLER( m15_a100_w )
|
static WRITE8_HANDLER( m15_a100_w )
|
||||||
{
|
{
|
||||||
static int last = 0x00;
|
m10_state *state = (m10_state *)space->machine->driver_data;
|
||||||
const device_config *samples = devtag_get_device(space->machine, "samples");
|
//int raising_bits = data & ~state->last;
|
||||||
//int raising_bits = data & ~last;
|
int falling_bits = ~data & state->last;
|
||||||
int falling_bits = ~data & last;
|
|
||||||
|
|
||||||
// should a falling bit stop a sample?
|
// should a falling bit stop a sample?
|
||||||
// Bit 4 is used
|
// Bit 4 is used
|
||||||
@ -425,60 +439,62 @@ static WRITE8_HANDLER( m15_a100_w )
|
|||||||
// 0x40: dot
|
// 0x40: dot
|
||||||
|
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
if ((last & 0x82) != (data & 0x82))
|
if ((state->last & 0x82) != (data & 0x82))
|
||||||
popmessage("A100: %02x\n", data);
|
popmessage("A100: %02x\n", data);
|
||||||
#endif
|
#endif
|
||||||
/* DOT sound */
|
/* DOT sound */
|
||||||
if (falling_bits & 0x40)
|
if (falling_bits & 0x40)
|
||||||
sample_start(samples, 0, 0, 0);
|
sample_start(state->samples, 0, 0, 0);
|
||||||
#if 0
|
#if 0
|
||||||
if (raising_bits & 0x40)
|
if (raising_bits & 0x40)
|
||||||
sample_stop(samples, 0);
|
sample_stop(state->samples, 0);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* EXPLOSION sound */
|
/* EXPLOSION sound */
|
||||||
if (falling_bits & 0x08)
|
if (falling_bits & 0x08)
|
||||||
sample_start(samples, 1, 1, 0);
|
sample_start(state->samples, 1, 1, 0);
|
||||||
#if 0
|
#if 0
|
||||||
if (raising_bits & 0x08)
|
if (raising_bits & 0x08)
|
||||||
sample_stop(samples, 1);
|
sample_stop(state->samples, 1);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* player changes lane */
|
/* player changes lane */
|
||||||
if (falling_bits & 0x10)
|
if (falling_bits & 0x10)
|
||||||
sample_start(samples, 3, 3, 0);
|
sample_start(state->samples, 3, 3, 0);
|
||||||
#if 0
|
#if 0
|
||||||
if (raising_bits & 0x10)
|
if (raising_bits & 0x10)
|
||||||
sample_stop(samples, 3);
|
sample_stop(state->samples, 3);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* computer car changes lane */
|
/* computer car changes lane */
|
||||||
if (falling_bits & 0x20)
|
if (falling_bits & 0x20)
|
||||||
sample_start(samples, 4, 4, 0);
|
sample_start(state->samples, 4, 4, 0);
|
||||||
#if 0
|
#if 0
|
||||||
if (raising_bits & 0x20)
|
if (raising_bits & 0x20)
|
||||||
sample_stop(samples, 4);
|
sample_stop(state->samples, 4);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
last = data;
|
state->last = data;
|
||||||
}
|
}
|
||||||
|
|
||||||
static READ8_HANDLER( m10_a700_r )
|
static READ8_HANDLER( m10_a700_r )
|
||||||
{
|
{
|
||||||
|
m10_state *state = (m10_state *)space->machine->driver_data;
|
||||||
//LOG(("rd:%d\n",video_screen_get_vpos(space->machine->primary_screen)));
|
//LOG(("rd:%d\n",video_screen_get_vpos(space->machine->primary_screen)));
|
||||||
LOG(("clear\n"));
|
LOG(("clear\n"));
|
||||||
ttl74123_clear_w(devtag_get_device(space->machine, "ic8j1"), 0, 0);
|
ttl74123_clear_w(state->ic8j1, 0, 0);
|
||||||
ttl74123_clear_w(devtag_get_device(space->machine, "ic8j1"), 0, 1);
|
ttl74123_clear_w(state->ic8j1, 0, 1);
|
||||||
return 0x00;
|
return 0x00;
|
||||||
}
|
}
|
||||||
|
|
||||||
static READ8_HANDLER( m11_a700_r )
|
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)));
|
//LOG(("rd:%d\n",video_screen_get_vpos(space->machine->primary_screen)));
|
||||||
//cputag_set_input_line(space->machine, "maincpu", 0, CLEAR_LINE);
|
//cputag_set_input_line(space->machine, "maincpu", 0, CLEAR_LINE);
|
||||||
LOG(("clear\n"));
|
LOG(("clear\n"));
|
||||||
ttl74123_clear_w(devtag_get_device(space->machine, "ic8j1"), 0, 0);
|
ttl74123_clear_w(state->ic8j1, 0, 0);
|
||||||
ttl74123_clear_w(devtag_get_device(space->machine, "ic8j1"), 0, 1);
|
ttl74123_clear_w(state->ic8j1, 0, 1);
|
||||||
return 0x00;
|
return 0x00;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -540,8 +556,8 @@ static INTERRUPT_GEN( m15_interrupt )
|
|||||||
static ADDRESS_MAP_START( m10_main, ADDRESS_SPACE_PROGRAM, 8 )
|
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(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(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(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(&colorram) /* foreground colour */
|
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(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(0xa200, 0xa200) AM_READ_PORT("DSW")
|
||||||
AM_RANGE(0xa300, 0xa300) AM_READ_PORT("INPUTS")
|
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 )
|
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(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(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(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(&colorram) /* foreground colour */
|
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(0x5000, 0x53ff) AM_RAM AM_BASE_MEMBER(m10_state, chargen) /* background ????? */
|
||||||
AM_RANGE(0xa100, 0xa100) AM_WRITE(m11_a100_w) /* sound writes ???? */
|
AM_RANGE(0xa100, 0xa100) AM_WRITE(m11_a100_w) /* sound writes ???? */
|
||||||
AM_RANGE(0xa200, 0xa200) AM_READ_PORT("DSW")
|
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 )
|
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(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(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(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(&colorram) /* foreground colour */
|
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(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(0xa000, 0xa000) AM_READ_PORT("P2")
|
||||||
AM_RANGE(0xa100, 0xa100) AM_WRITE(m15_a100_w) /* sound writes ???? */
|
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_ADD("maincpu", M6502,IREMM10_CPU_CLOCK)
|
||||||
MDRV_CPU_PROGRAM_MAP(m10_main)
|
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)
|
//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_ADD("maincpu", M6502,IREMM15_CPU_CLOCK)
|
||||||
MDRV_CPU_PROGRAM_MAP(m15_main)
|
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)
|
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_LOAD( "gb9", 0x3000, 0x0400, CRC(c27b9ba3) SHA1(a2f4f0c4b61eb03bba13ae5d25dc01009a4f86ee) ) // ok ?
|
||||||
ROM_END
|
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, 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( 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( 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( 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( 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( 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( 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 "driver.h"
|
||||||
#include "cpu/i8085/i8085.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 )
|
static TILE_GET_INFO( m14_get_tile_info )
|
||||||
{
|
{
|
||||||
int code = videoram[tile_index];
|
m14_state *state = (m14_state *)machine->driver_data;
|
||||||
int color = colorram[tile_index] & 0xf;
|
|
||||||
|
int code = state->video_ram[tile_index];
|
||||||
|
int color = state->color_ram[tile_index] & 0x0f;
|
||||||
|
|
||||||
/* colorram & 0xf0 used but unknown purpose*/
|
/* colorram & 0xf0 used but unknown purpose*/
|
||||||
|
|
||||||
@ -95,26 +109,34 @@ static TILE_GET_INFO( m14_get_tile_info )
|
|||||||
|
|
||||||
static VIDEO_START( m14 )
|
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 )
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static WRITE8_HANDLER( m14_vram_w )
|
static WRITE8_HANDLER( m14_vram_w )
|
||||||
{
|
{
|
||||||
videoram[offset] = data;
|
m14_state *state = (m14_state *)space->machine->driver_data;
|
||||||
tilemap_mark_tile_dirty(m14_tilemap,offset);
|
|
||||||
|
state->video_ram[offset] = data;
|
||||||
|
tilemap_mark_tile_dirty(state->m14_tilemap, offset);
|
||||||
}
|
}
|
||||||
|
|
||||||
static WRITE8_HANDLER( m14_cram_w )
|
static WRITE8_HANDLER( m14_cram_w )
|
||||||
{
|
{
|
||||||
colorram[offset] = data;
|
m14_state *state = (m14_state *)space->machine->driver_data;
|
||||||
tilemap_mark_tile_dirty(m14_tilemap,offset);
|
|
||||||
|
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 )
|
static READ8_HANDLER( m14_rng_r )
|
||||||
{
|
{
|
||||||
/* graphic artifacts happens if this doesn't return random values. */
|
/* 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 */
|
/* Here routes the hopper & the inputs */
|
||||||
static READ8_HANDLER( input_buttons_r )
|
static READ8_HANDLER( input_buttons_r )
|
||||||
{
|
{
|
||||||
if(hop_mux) { hop_mux = 0; return 0; } //0x43 status bits
|
m14_state *state = (m14_state *)space->machine->driver_data;
|
||||||
else { return input_port_read(space->machine, "IN0"); }
|
|
||||||
|
if (state->hop_mux)
|
||||||
|
{
|
||||||
|
state->hop_mux = 0;
|
||||||
|
return 0; //0x43 status bits
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return input_port_read(space->machine, "IN0");
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
@ -151,9 +178,11 @@ static WRITE8_HANDLER( test_w )
|
|||||||
|
|
||||||
static WRITE8_HANDLER( hopper_w )
|
static WRITE8_HANDLER( hopper_w )
|
||||||
{
|
{
|
||||||
|
m14_state *state = (m14_state *)space->machine->driver_data;
|
||||||
|
|
||||||
/* ---- x--- coin out */
|
/* ---- x--- coin out */
|
||||||
/* ---- --x- hopper/input mux? */
|
/* ---- --x- hopper/input mux? */
|
||||||
hop_mux = data & 2;
|
state->hop_mux = data & 2;
|
||||||
//popmessage("%02x",data);
|
//popmessage("%02x",data);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -166,8 +195,8 @@ static WRITE8_HANDLER( hopper_w )
|
|||||||
static ADDRESS_MAP_START( m14_map, ADDRESS_SPACE_PROGRAM, 8 )
|
static ADDRESS_MAP_START( m14_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||||
AM_RANGE(0x0000, 0x1fff) AM_ROM
|
AM_RANGE(0x0000, 0x1fff) AM_ROM
|
||||||
AM_RANGE(0x2000, 0x23ff) AM_RAM
|
AM_RANGE(0x2000, 0x23ff) AM_RAM
|
||||||
AM_RANGE(0xe000, 0xe3ff) AM_RAM_WRITE(m14_vram_w) AM_BASE(&videoram)
|
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(&colorram)
|
AM_RANGE(0xe400, 0xe7ff) AM_RAM_WRITE(m14_cram_w) AM_BASE_MEMBER(m14_state, color_ram)
|
||||||
ADDRESS_MAP_END
|
ADDRESS_MAP_END
|
||||||
|
|
||||||
static ADDRESS_MAP_START( m14_io_map, ADDRESS_SPACE_IO, 8 )
|
static ADDRESS_MAP_START( m14_io_map, ADDRESS_SPACE_IO, 8 )
|
||||||
@ -275,14 +304,35 @@ static INTERRUPT_GEN( m14_irq )
|
|||||||
cpu_set_input_line(device, I8085_RST75_LINE, CLEAR_LINE);
|
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 )
|
static MACHINE_DRIVER_START( m14 )
|
||||||
|
|
||||||
|
/* driver data */
|
||||||
|
MDRV_DRIVER_DATA(m14_state)
|
||||||
|
|
||||||
/* basic machine hardware */
|
/* basic machine hardware */
|
||||||
MDRV_CPU_ADD("maincpu",8085A,6000000/2) //guess: 6 Mhz internally divided by 2
|
MDRV_CPU_ADD("maincpu",8085A,6000000/2) //guess: 6 Mhz internally divided by 2
|
||||||
MDRV_CPU_PROGRAM_MAP(m14_map)
|
MDRV_CPU_PROGRAM_MAP(m14_map)
|
||||||
MDRV_CPU_IO_MAP(m14_io_map)
|
MDRV_CPU_IO_MAP(m14_io_map)
|
||||||
MDRV_CPU_VBLANK_INT("screen",m14_irq)
|
MDRV_CPU_VBLANK_INT("screen",m14_irq)
|
||||||
|
|
||||||
|
MDRV_MACHINE_START(m14)
|
||||||
|
MDRV_MACHINE_RESET(m14)
|
||||||
|
|
||||||
/* video hardware */
|
/* video hardware */
|
||||||
MDRV_SCREEN_ADD("screen", RASTER)
|
MDRV_SCREEN_ADD("screen", RASTER)
|
||||||
MDRV_SCREEN_REFRESH_RATE(60)
|
MDRV_SCREEN_REFRESH_RATE(60)
|
||||||
@ -328,4 +378,4 @@ ROM_START( ptrmj )
|
|||||||
ROM_LOAD( "mgpa10.bin", 0x0400, 0x0400, CRC(e1a4ebdc) SHA1(d9df42424ede17f0634d8d0a56c0374a33c55333) )
|
ROM_LOAD( "mgpa10.bin", 0x0400, 0x0400, CRC(e1a4ebdc) SHA1(d9df42424ede17f0634d8d0a56c0374a33c55333) )
|
||||||
ROM_END
|
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 "driver.h"
|
||||||
#include "iremipt.h"
|
#include "iremipt.h"
|
||||||
#include "m52.h"
|
#include "includes/iremz80.h"
|
||||||
#include "audio/irem.h"
|
#include "audio/irem.h"
|
||||||
#include "cpu/z80/z80.h"
|
#include "cpu/z80/z80.h"
|
||||||
|
|
||||||
@ -60,10 +60,10 @@
|
|||||||
|
|
||||||
static ADDRESS_MAP_START( main_map, ADDRESS_SPACE_PROGRAM, 8 )
|
static ADDRESS_MAP_START( main_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||||
AM_RANGE(0x0000, 0x3fff) AM_ROM
|
AM_RANGE(0x0000, 0x3fff) AM_ROM
|
||||||
AM_RANGE(0x8000, 0x83ff) AM_RAM_WRITE(m52_videoram_w) AM_BASE(&videoram)
|
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(&colorram)
|
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(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(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(0xd001, 0xd001) AM_MIRROR(0x07fc) AM_WRITE(m52_flipscreen_w) /* + coin counters */
|
||||||
AM_RANGE(0xd000, 0xd000) AM_MIRROR(0x07f8) AM_READ_PORT("IN0")
|
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 )
|
static ADDRESS_MAP_START( alpha1v_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||||
AM_RANGE(0x0000, 0x6fff) AM_ROM
|
AM_RANGE(0x0000, 0x6fff) AM_ROM
|
||||||
AM_RANGE(0x8000, 0x83ff) AM_RAM_WRITE(m52_videoram_w) AM_BASE(&videoram)
|
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(&colorram)
|
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(&spriteram) AM_SIZE(&spriteram_size) AM_SHARE(1) // bigger or mirrored?
|
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(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(0xd001, 0xd001) AM_READ_PORT("IN1") AM_WRITE(alpha1v_flipscreen_w)
|
||||||
AM_RANGE(0xd002, 0xd002) AM_READ_PORT("IN2")
|
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 )
|
static MACHINE_DRIVER_START( m52 )
|
||||||
|
|
||||||
|
/* driver data */
|
||||||
|
MDRV_DRIVER_DATA(irem_z80_state)
|
||||||
|
|
||||||
/* basic machine hardware */
|
/* basic machine hardware */
|
||||||
MDRV_CPU_ADD("maincpu", Z80, MASTER_CLOCK/6)
|
MDRV_CPU_ADD("maincpu", Z80, MASTER_CLOCK/6)
|
||||||
MDRV_CPU_PROGRAM_MAP(main_map)
|
MDRV_CPU_PROGRAM_MAP(main_map)
|
||||||
MDRV_CPU_IO_MAP(main_portmap)
|
MDRV_CPU_IO_MAP(main_portmap)
|
||||||
MDRV_CPU_VBLANK_INT("screen", irq0_line_hold)
|
MDRV_CPU_VBLANK_INT("screen", irq0_line_hold)
|
||||||
|
|
||||||
|
MDRV_MACHINE_RESET(m52)
|
||||||
|
|
||||||
/* video hardware */
|
/* video hardware */
|
||||||
MDRV_GFXDECODE(m52)
|
MDRV_GFXDECODE(m52)
|
||||||
MDRV_PALETTE_LENGTH(128*4+16*4+3*4)
|
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, 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( 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
|
Ribbon cable connector to M57-A-A PCB
|
||||||
|
|
||||||
New Tropical Angel:
|
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.
|
license seal and genuine IREM serial number sticker.
|
||||||
The "new" roms have hand written labels, while those that match the current
|
The "new" roms have hand written labels, while those that match the current
|
||||||
Tropical Angel set look to be factory labeled chips.
|
Tropical Angel set look to be factory labeled chips.
|
||||||
@ -50,7 +50,7 @@
|
|||||||
#include "driver.h"
|
#include "driver.h"
|
||||||
#include "cpu/z80/z80.h"
|
#include "cpu/z80/z80.h"
|
||||||
#include "iremipt.h"
|
#include "iremipt.h"
|
||||||
#include "m57.h"
|
#include "includes/iremz80.h"
|
||||||
#include "audio/irem.h"
|
#include "audio/irem.h"
|
||||||
|
|
||||||
|
|
||||||
@ -66,9 +66,9 @@
|
|||||||
|
|
||||||
static ADDRESS_MAP_START( main_map, ADDRESS_SPACE_PROGRAM, 8 )
|
static ADDRESS_MAP_START( main_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||||
AM_RANGE(0x0000, 0x7fff) AM_ROM
|
AM_RANGE(0x0000, 0x7fff) AM_ROM
|
||||||
AM_RANGE(0x8000, 0x87ff) AM_RAM_WRITE(m57_videoram_w) AM_BASE(&videoram)
|
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(&m57_scroll)
|
AM_RANGE(0x9000, 0x91ff) AM_RAM AM_BASE_MEMBER(irem_z80_state, scrollram)
|
||||||
AM_RANGE(0xc820, 0xc8ff) AM_WRITE(SMH_RAM) AM_BASE(&spriteram) AM_SIZE(&spriteram_size)
|
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(0xd000, 0xd000) AM_WRITE(irem_sound_cmd_w)
|
||||||
AM_RANGE(0xd001, 0xd001) AM_WRITE(m57_flipscreen_w) /* + coin counters */
|
AM_RANGE(0xd001, 0xd001) AM_WRITE(m57_flipscreen_w) /* + coin counters */
|
||||||
AM_RANGE(0xd000, 0xd000) AM_READ_PORT("IN0")
|
AM_RANGE(0xd000, 0xd000) AM_READ_PORT("IN0")
|
||||||
@ -225,6 +225,9 @@ GFXDECODE_END
|
|||||||
|
|
||||||
static MACHINE_DRIVER_START( m57 )
|
static MACHINE_DRIVER_START( m57 )
|
||||||
|
|
||||||
|
/* driver data */
|
||||||
|
MDRV_DRIVER_DATA(irem_z80_state)
|
||||||
|
|
||||||
/* basic machine hardware */
|
/* basic machine hardware */
|
||||||
MDRV_CPU_ADD("maincpu", Z80, XTAL_18_432MHz/6) /* verified on pcb */
|
MDRV_CPU_ADD("maincpu", Z80, XTAL_18_432MHz/6) /* verified on pcb */
|
||||||
MDRV_CPU_PROGRAM_MAP(main_map)
|
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, troangel, 0, m57, troangel, 0, ROT0, "Irem", "Tropical Angel", GAME_SUPPORTS_SAVE )
|
||||||
GAME( 1983, newtangl, troangel, m57, troangel, 0, ROT0, "Irem", "New Tropical Angel", 0 )
|
GAME( 1983, newtangl, troangel, m57, troangel, 0, ROT0, "Irem", "New Tropical Angel", GAME_SUPPORTS_SAVE )
|
||||||
|
@ -12,7 +12,7 @@
|
|||||||
#include "driver.h"
|
#include "driver.h"
|
||||||
#include "cpu/z80/z80.h"
|
#include "cpu/z80/z80.h"
|
||||||
#include "iremipt.h"
|
#include "iremipt.h"
|
||||||
#include "m58.h"
|
#include "includes/iremz80.h"
|
||||||
#include "audio/irem.h"
|
#include "audio/irem.h"
|
||||||
|
|
||||||
#define MASTER_CLOCK XTAL_18_432MHz
|
#define MASTER_CLOCK XTAL_18_432MHz
|
||||||
@ -26,13 +26,13 @@
|
|||||||
|
|
||||||
static ADDRESS_MAP_START( yard_map, ADDRESS_SPACE_PROGRAM, 8 )
|
static ADDRESS_MAP_START( yard_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||||
AM_RANGE(0x0000, 0x5fff) AM_ROM
|
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(0x9000, 0x9fff) AM_WRITE(yard_scroll_panel_w)
|
||||||
AM_RANGE(0xc820, 0xc87f) AM_RAM AM_BASE(&spriteram) AM_SIZE(&spriteram_size)
|
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(&yard_scroll_x_low)
|
AM_RANGE(0xa000, 0xa000) AM_RAM AM_BASE_MEMBER(irem_z80_state, yard_scroll_x_low)
|
||||||
AM_RANGE(0xa200, 0xa200) AM_RAM AM_BASE(&yard_scroll_x_high)
|
AM_RANGE(0xa200, 0xa200) AM_RAM AM_BASE_MEMBER(irem_z80_state, yard_scroll_x_high)
|
||||||
AM_RANGE(0xa400, 0xa400) AM_RAM AM_BASE(&yard_scroll_y_low)
|
AM_RANGE(0xa400, 0xa400) AM_RAM AM_BASE_MEMBER(irem_z80_state, yard_scroll_y_low)
|
||||||
AM_RANGE(0xa800, 0xa800) AM_RAM AM_BASE(&yard_score_panel_disabled)
|
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(0xd000, 0xd000) AM_WRITE(irem_sound_cmd_w)
|
||||||
AM_RANGE(0xd001, 0xd001) AM_WRITE(yard_flipscreen_w) /* + coin counters */
|
AM_RANGE(0xd001, 0xd001) AM_WRITE(yard_flipscreen_w) /* + coin counters */
|
||||||
AM_RANGE(0xd000, 0xd000) AM_READ_PORT("IN0")
|
AM_RANGE(0xd000, 0xd000) AM_READ_PORT("IN0")
|
||||||
@ -190,6 +190,9 @@ GFXDECODE_END
|
|||||||
|
|
||||||
static MACHINE_DRIVER_START( yard )
|
static MACHINE_DRIVER_START( yard )
|
||||||
|
|
||||||
|
/* driver data */
|
||||||
|
MDRV_DRIVER_DATA(irem_z80_state)
|
||||||
|
|
||||||
/* basic machine hardware */
|
/* basic machine hardware */
|
||||||
MDRV_CPU_ADD("maincpu", Z80, MASTER_CLOCK/3/2)
|
MDRV_CPU_ADD("maincpu", Z80, MASTER_CLOCK/3/2)
|
||||||
MDRV_CPU_PROGRAM_MAP(yard_map)
|
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, 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)", 0 )
|
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)", 0 )
|
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)", 0 )
|
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 "driver.h"
|
||||||
#include "cpu/z80/z80.h"
|
#include "cpu/z80/z80.h"
|
||||||
#include "m62.h"
|
#include "includes/iremz80.h"
|
||||||
#include "iremipt.h"
|
#include "iremipt.h"
|
||||||
#include "audio/irem.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 */
|
/* 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 */
|
/* that to select the ROM. The only exception I make is a special case used in */
|
||||||
/* service mode to test the ROMs. */
|
/* service mode to test the ROMs. */
|
||||||
static int ldrun2_bankswap;
|
|
||||||
|
|
||||||
static READ8_HANDLER( ldrun2_bankswitch_r )
|
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 */
|
/* swap to bank #1 on second read */
|
||||||
if (ldrun2_bankswap == 0)
|
if (state->ldrun2_bankswap == 0)
|
||||||
memory_set_bank(space->machine, 1, 1);
|
memory_set_bank(space->machine, 1, 1);
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
@ -98,7 +98,7 @@ static READ8_HANDLER( ldrun2_bankswitch_r )
|
|||||||
|
|
||||||
static WRITE8_HANDLER( ldrun2_bankswitch_w )
|
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] =
|
static const int banks[30] =
|
||||||
{
|
{
|
||||||
0,0,0,0,0,1,0,1,0,0,
|
0,0,0,0,0,1,0,1,0,0,
|
||||||
@ -107,7 +107,8 @@ static WRITE8_HANDLER( ldrun2_bankswitch_w )
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
bankcontrol[offset] = data;
|
state->bankcontrol[offset] = data;
|
||||||
|
|
||||||
if (offset == 0)
|
if (offset == 0)
|
||||||
{
|
{
|
||||||
if (data < 1 || data > 30)
|
if (data < 1 || data > 30)
|
||||||
@ -119,10 +120,11 @@ logerror("unknown bank select %02x\n",data);
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (bankcontrol[0] == 0x01 && data == 0x0d)
|
if (state->bankcontrol[0] == 0x01 && data == 0x0d)
|
||||||
/* special case for service mode */
|
/* special case for service mode */
|
||||||
ldrun2_bankswap = 2;
|
state->ldrun2_bankswap = 2;
|
||||||
else ldrun2_bankswap = 0;
|
else
|
||||||
|
state->ldrun2_bankswap = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -174,10 +176,10 @@ static ADDRESS_MAP_START( kungfum_map, ADDRESS_SPACE_PROGRAM, 8 )
|
|||||||
AM_RANGE(0x0000, 0x7fff) AM_ROM
|
AM_RANGE(0x0000, 0x7fff) AM_ROM
|
||||||
AM_RANGE(0xa000, 0xa000) AM_WRITE(m62_hscroll_low_w)
|
AM_RANGE(0xa000, 0xa000) AM_WRITE(m62_hscroll_low_w)
|
||||||
AM_RANGE(0xb000, 0xb000) AM_WRITE(m62_hscroll_high_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 */
|
/* 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. */
|
/* 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
|
AM_RANGE(0xe000, 0xefff) AM_RAM
|
||||||
ADDRESS_MAP_END
|
ADDRESS_MAP_END
|
||||||
|
|
||||||
@ -193,9 +195,9 @@ ADDRESS_MAP_END
|
|||||||
static ADDRESS_MAP_START( battroad_map, ADDRESS_SPACE_PROGRAM, 8 )
|
static ADDRESS_MAP_START( battroad_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||||
AM_RANGE(0x0000, 0x7fff) AM_ROM
|
AM_RANGE(0x0000, 0x7fff) AM_ROM
|
||||||
AM_RANGE(0xa000, 0xbfff) AM_ROMBANK(1)
|
AM_RANGE(0xa000, 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, 0xcfff) AM_RAM_WRITE(m62_textram_w) AM_BASE(&m62_textram)
|
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(&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
|
AM_RANGE(0xe000, 0xefff) AM_RAM
|
||||||
ADDRESS_MAP_END
|
ADDRESS_MAP_END
|
||||||
|
|
||||||
@ -214,16 +216,16 @@ ADDRESS_MAP_END
|
|||||||
|
|
||||||
static ADDRESS_MAP_START( ldrun_map, ADDRESS_SPACE_PROGRAM, 8 )
|
static ADDRESS_MAP_START( ldrun_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||||
AM_RANGE(0x0000, 0x7fff) AM_ROM
|
AM_RANGE(0x0000, 0x7fff) AM_ROM
|
||||||
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(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
|
AM_RANGE(0xe000, 0xefff) AM_RAM
|
||||||
ADDRESS_MAP_END
|
ADDRESS_MAP_END
|
||||||
|
|
||||||
static ADDRESS_MAP_START( ldrun2_map, ADDRESS_SPACE_PROGRAM, 8 )
|
static ADDRESS_MAP_START( ldrun2_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||||
AM_RANGE(0x0000, 0x7fff) AM_ROM
|
AM_RANGE(0x0000, 0x7fff) AM_ROM
|
||||||
AM_RANGE(0x8000, 0x9fff) AM_ROMBANK(1)
|
AM_RANGE(0x8000, 0x9fff) 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(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
|
AM_RANGE(0xe000, 0xefff) AM_RAM
|
||||||
ADDRESS_MAP_END
|
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(0xc800, 0xc800) AM_READ(ldrun3_prot_5_r)
|
||||||
AM_RANGE(0xcc00, 0xcc00) AM_READ(ldrun3_prot_7_r)
|
AM_RANGE(0xcc00, 0xcc00) AM_READ(ldrun3_prot_7_r)
|
||||||
AM_RANGE(0xcfff, 0xcfff) 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(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(&m62_tileram)
|
AM_RANGE(0xd000, 0xdfff) AM_RAM_WRITE(m62_tileram_w) AM_BASE_MEMBER(irem_z80_state, m62_tileram)
|
||||||
AM_RANGE(0xd000, 0xefff) AM_RAM
|
AM_RANGE(0xd000, 0xefff) AM_RAM
|
||||||
ADDRESS_MAP_END
|
ADDRESS_MAP_END
|
||||||
|
|
||||||
@ -262,9 +264,9 @@ ADDRESS_MAP_END
|
|||||||
static ADDRESS_MAP_START( ldrun4_map, ADDRESS_SPACE_PROGRAM, 8 )
|
static ADDRESS_MAP_START( ldrun4_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||||
AM_RANGE(0x0000, 0x7fff) AM_ROM
|
AM_RANGE(0x0000, 0x7fff) AM_ROM
|
||||||
AM_RANGE(0x8000, 0xbfff) AM_ROMBANK(1)
|
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(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
|
AM_RANGE(0xe000, 0xefff) AM_RAM
|
||||||
ADDRESS_MAP_END
|
ADDRESS_MAP_END
|
||||||
|
|
||||||
@ -281,18 +283,18 @@ ADDRESS_MAP_END
|
|||||||
|
|
||||||
static ADDRESS_MAP_START( lotlot_map, ADDRESS_SPACE_PROGRAM, 8 )
|
static ADDRESS_MAP_START( lotlot_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||||
AM_RANGE(0x0000, 0x7fff) AM_ROM
|
AM_RANGE(0x0000, 0x7fff) AM_ROM
|
||||||
AM_RANGE(0xa000, 0xafff) AM_RAM_WRITE(m62_textram_w) AM_BASE(&m62_textram)
|
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(&spriteram) AM_SIZE(&spriteram_size)
|
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(&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
|
AM_RANGE(0xe000, 0xefff) AM_RAM
|
||||||
ADDRESS_MAP_END
|
ADDRESS_MAP_END
|
||||||
|
|
||||||
static ADDRESS_MAP_START( kidniki_map, ADDRESS_SPACE_PROGRAM, 8 )
|
static ADDRESS_MAP_START( kidniki_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||||
AM_RANGE(0x0000, 0x7fff) AM_ROM
|
AM_RANGE(0x0000, 0x7fff) AM_ROM
|
||||||
AM_RANGE(0x8000, 0x9fff) AM_ROMBANK(1)
|
AM_RANGE(0x8000, 0x9fff) AM_ROMBANK(1)
|
||||||
AM_RANGE(0xa000, 0xafff) AM_RAM_WRITE(m62_tileram_w) AM_BASE(&m62_tileram)
|
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(&spriteram) AM_SIZE(&spriteram_size)
|
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(&m62_textram)
|
AM_RANGE(0xd000, 0xdfff) AM_RAM_WRITE(m62_textram_w) AM_BASE_MEMBER(irem_z80_state, m62_textram)
|
||||||
AM_RANGE(0xe000, 0xefff) AM_RAM
|
AM_RANGE(0xe000, 0xefff) AM_RAM
|
||||||
ADDRESS_MAP_END
|
ADDRESS_MAP_END
|
||||||
|
|
||||||
@ -314,9 +316,9 @@ ADDRESS_MAP_END
|
|||||||
static ADDRESS_MAP_START( spelunkr_map, ADDRESS_SPACE_PROGRAM, 8 )
|
static ADDRESS_MAP_START( spelunkr_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||||
AM_RANGE(0x0000, 0x7fff) AM_ROM
|
AM_RANGE(0x0000, 0x7fff) AM_ROM
|
||||||
AM_RANGE(0x8000, 0x9fff) AM_ROMBANK(1)
|
AM_RANGE(0x8000, 0x9fff) AM_ROMBANK(1)
|
||||||
AM_RANGE(0xa000, 0xbfff) AM_RAM_WRITE(m62_tileram_w) AM_BASE(&m62_tileram)
|
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(&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, 0xcfff) AM_RAM_WRITE(m62_textram_w) AM_BASE(&m62_textram)
|
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(0xd000, 0xd000) AM_WRITE(m62_vscroll_low_w)
|
||||||
AM_RANGE(0xd001, 0xd001) AM_WRITE(m62_vscroll_high_w)
|
AM_RANGE(0xd001, 0xd001) AM_WRITE(m62_vscroll_high_w)
|
||||||
AM_RANGE(0xd002, 0xd002) AM_WRITE(m62_hscroll_low_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(0x0000, 0x7fff) AM_ROM
|
||||||
AM_RANGE(0x8000, 0x8fff) AM_ROMBANK(1)
|
AM_RANGE(0x8000, 0x8fff) AM_ROMBANK(1)
|
||||||
AM_RANGE(0x9000, 0x9fff) AM_ROMBANK(2)
|
AM_RANGE(0x9000, 0x9fff) AM_ROMBANK(2)
|
||||||
AM_RANGE(0xa000, 0xbfff) AM_RAM_WRITE(m62_tileram_w) AM_BASE(&m62_tileram)
|
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(&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, 0xcfff) AM_RAM_WRITE(m62_textram_w) AM_BASE(&m62_textram)
|
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(0xd000, 0xd000) AM_WRITE(m62_vscroll_low_w)
|
||||||
AM_RANGE(0xd001, 0xd001) AM_WRITE(m62_hscroll_low_w)
|
AM_RANGE(0xd001, 0xd001) AM_WRITE(m62_hscroll_low_w)
|
||||||
AM_RANGE(0xd002, 0xd002) AM_WRITE(spelunk2_gfxport_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 )
|
static ADDRESS_MAP_START( youjyudn_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||||
AM_RANGE(0x0000, 0x7fff) AM_ROM
|
AM_RANGE(0x0000, 0x7fff) AM_ROM
|
||||||
AM_RANGE(0x8000, 0xbfff) AM_ROMBANK(1)
|
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, 0xcfff) AM_RAM_WRITE(m62_textram_w) AM_BASE(&m62_textram)
|
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(&m62_tileram)
|
AM_RANGE(0xd000, 0xd7ff) AM_RAM_WRITE(m62_tileram_w) AM_BASE_MEMBER(irem_z80_state, m62_tileram)
|
||||||
AM_RANGE(0xe000, 0xefff) AM_RAM
|
AM_RANGE(0xe000, 0xefff) AM_RAM
|
||||||
ADDRESS_MAP_END
|
ADDRESS_MAP_END
|
||||||
|
|
||||||
@ -363,9 +365,9 @@ ADDRESS_MAP_END
|
|||||||
|
|
||||||
static ADDRESS_MAP_START( horizon_map, ADDRESS_SPACE_PROGRAM, 8 )
|
static ADDRESS_MAP_START( horizon_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||||
AM_RANGE(0x0000, 0xbfff) AM_ROM
|
AM_RANGE(0x0000, 0xbfff) AM_ROM
|
||||||
AM_RANGE(0xc000, 0xc1ff) AM_RAM AM_BASE(&spriteram) AM_SIZE(&spriteram_size)
|
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(&horizon_scrollram)
|
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(&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
|
AM_RANGE(0xe000, 0xefff) AM_RAM
|
||||||
ADDRESS_MAP_END
|
ADDRESS_MAP_END
|
||||||
|
|
||||||
@ -928,16 +930,45 @@ static GFXDECODE_START( youjyudn )
|
|||||||
GFXDECODE_END
|
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 )
|
static MACHINE_DRIVER_START( ldrun )
|
||||||
|
|
||||||
|
/* driver data */
|
||||||
|
MDRV_DRIVER_DATA(irem_z80_state)
|
||||||
|
|
||||||
/* basic machine hardware */
|
/* basic machine hardware */
|
||||||
MDRV_CPU_ADD("maincpu", Z80, 24000000/6)
|
MDRV_CPU_ADD("maincpu", Z80, 24000000/6)
|
||||||
MDRV_CPU_PROGRAM_MAP(ldrun_map)
|
MDRV_CPU_PROGRAM_MAP(ldrun_map)
|
||||||
MDRV_CPU_IO_MAP(kungfum_io_map)
|
MDRV_CPU_IO_MAP(kungfum_io_map)
|
||||||
MDRV_CPU_VBLANK_INT("screen", irq0_line_hold)
|
MDRV_CPU_VBLANK_INT("screen", irq0_line_hold)
|
||||||
|
|
||||||
|
MDRV_MACHINE_START(m62)
|
||||||
|
MDRV_MACHINE_RESET(m62)
|
||||||
|
|
||||||
/* video hardware */
|
/* video hardware */
|
||||||
MDRV_SCREEN_ADD("screen", RASTER)
|
MDRV_SCREEN_ADD("screen", RASTER)
|
||||||
MDRV_SCREEN_REFRESH_RATE(55)
|
MDRV_SCREEN_REFRESH_RATE(55)
|
||||||
@ -2180,25 +2211,25 @@ static DRIVER_INIT( youjyudn )
|
|||||||
memory_configure_bank(machine, 1, 0, 2, memory_region(machine, "maincpu") + 0x10000, 0x4000);
|
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, 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)", 0 )
|
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)", 0 )
|
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)", 0 )
|
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)", 0 )
|
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( 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)", 0 )
|
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)", 0 )
|
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" , 0) /* Japanese version is called Bangeringu Teikoku No Gyakushuu */
|
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", 0 )
|
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", 0 )
|
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", 0 )
|
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", 0 )
|
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( 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( 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( 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( 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", 0 )
|
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)", 0 )
|
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( 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)", 0 )
|
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( 1985, horizon, 0, horizon, horizon, 0, ROT0, "Irem", "Horizon", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )
|
||||||
|
@ -121,15 +121,30 @@ Dip locations verified for:
|
|||||||
#include "sound/ay8910.h"
|
#include "sound/ay8910.h"
|
||||||
#include "sound/samples.h"
|
#include "sound/samples.h"
|
||||||
|
|
||||||
SAMPLES_START( fghtbskt_sh_start );
|
typedef struct _m63_state m63_state;
|
||||||
WRITE8_HANDLER( fghtbskt_samples_w );
|
struct _m63_state
|
||||||
|
{
|
||||||
|
UINT8 * videoram;
|
||||||
|
UINT8 * colorram;
|
||||||
|
UINT8 * spriteram;
|
||||||
|
UINT8 * videoram2;
|
||||||
|
UINT8 * scrollram;
|
||||||
|
|
||||||
static UINT8 *m63_videoram2, *m63_scrollram;
|
/* video-related */
|
||||||
static int pal_bank, fg_flag, sy_offset;
|
tilemap *bg_tilemap, *fg_tilemap;
|
||||||
static tilemap *bg_tilemap, *fg_tilemap;
|
int pal_bank, fg_flag, sy_offset;
|
||||||
static UINT8 sound_irq;
|
|
||||||
static int sound_status;
|
/* sound-related */
|
||||||
static int p1,p2;
|
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 )
|
static PALETTE_INIT( m63 )
|
||||||
@ -189,28 +204,36 @@ static PALETTE_INIT( m63 )
|
|||||||
|
|
||||||
static WRITE8_HANDLER( m63_videoram_w )
|
static WRITE8_HANDLER( m63_videoram_w )
|
||||||
{
|
{
|
||||||
videoram[offset] = data;
|
m63_state *state = (m63_state *)space->machine->driver_data;
|
||||||
tilemap_mark_tile_dirty(bg_tilemap, offset);
|
|
||||||
|
state->videoram[offset] = data;
|
||||||
|
tilemap_mark_tile_dirty(state->bg_tilemap, offset);
|
||||||
}
|
}
|
||||||
|
|
||||||
static WRITE8_HANDLER( m63_colorram_w )
|
static WRITE8_HANDLER( m63_colorram_w )
|
||||||
{
|
{
|
||||||
colorram[offset] = data;
|
m63_state *state = (m63_state *)space->machine->driver_data;
|
||||||
tilemap_mark_tile_dirty(bg_tilemap, offset);
|
|
||||||
|
state->colorram[offset] = data;
|
||||||
|
tilemap_mark_tile_dirty(state->bg_tilemap, offset);
|
||||||
}
|
}
|
||||||
|
|
||||||
static WRITE8_HANDLER( m63_videoram2_w )
|
static WRITE8_HANDLER( m63_videoram2_w )
|
||||||
{
|
{
|
||||||
m63_videoram2[offset] = data;
|
m63_state *state = (m63_state *)space->machine->driver_data;
|
||||||
tilemap_mark_tile_dirty(fg_tilemap, offset);
|
|
||||||
|
state->videoram2[offset] = data;
|
||||||
|
tilemap_mark_tile_dirty(state->fg_tilemap, offset);
|
||||||
}
|
}
|
||||||
|
|
||||||
static WRITE8_HANDLER( m63_palbank_w )
|
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;
|
state->pal_bank = data & 0x01;
|
||||||
tilemap_mark_all_tiles_dirty(bg_tilemap);
|
tilemap_mark_all_tiles_dirty(state->bg_tilemap);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -225,58 +248,62 @@ static WRITE8_HANDLER( m63_flipscreen_w )
|
|||||||
|
|
||||||
static WRITE8_HANDLER( fghtbskt_flipscreen_w )
|
static WRITE8_HANDLER( fghtbskt_flipscreen_w )
|
||||||
{
|
{
|
||||||
|
m63_state *state = (m63_state *)space->machine->driver_data;
|
||||||
|
|
||||||
flip_screen_set(space->machine, 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 )
|
static TILE_GET_INFO( get_bg_tile_info )
|
||||||
{
|
{
|
||||||
int attr = colorram[tile_index];
|
m63_state *state = (m63_state *)machine->driver_data;
|
||||||
int code = videoram[tile_index] | ((attr & 0x30) << 4);
|
|
||||||
int color = (attr & 0x0f) + (pal_bank << 4);
|
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);
|
SET_TILE_INFO(1, code, color, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static TILE_GET_INFO( get_fg_tile_info )
|
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 )
|
static VIDEO_START( m63 )
|
||||||
{
|
{
|
||||||
bg_tilemap = tilemap_create(machine, get_bg_tile_info, tilemap_scan_rows,
|
m63_state *state = (m63_state *)machine->driver_data;
|
||||||
8, 8, 32, 32);
|
|
||||||
|
|
||||||
fg_tilemap = tilemap_create(machine, get_fg_tile_info, tilemap_scan_rows,
|
state->bg_tilemap = tilemap_create(machine, get_bg_tile_info, tilemap_scan_rows, 8, 8, 32, 32);
|
||||||
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_scroll_cols(state->bg_tilemap, 32);
|
||||||
tilemap_set_transparent_pen(fg_tilemap, 0);
|
tilemap_set_transparent_pen(state->fg_tilemap, 0);
|
||||||
|
|
||||||
fg_flag = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect)
|
static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect)
|
||||||
{
|
{
|
||||||
|
m63_state *state = (m63_state *)machine->driver_data;
|
||||||
int offs;
|
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 code = state->spriteram[offs + 1] | ((state->spriteram[offs + 2] & 0x10) << 4);
|
||||||
int color = (spriteram[offs + 2] & 0x0f) + (pal_bank << 4);
|
int color = (state->spriteram[offs + 2] & 0x0f) + (state->pal_bank << 4);
|
||||||
int flipx = spriteram[offs + 2] & 0x20;
|
int flipx = state->spriteram[offs + 2] & 0x20;
|
||||||
int flipy = 0;
|
int flipy = 0;
|
||||||
int sx = spriteram[offs + 3];
|
int sx = state->spriteram[offs + 3];
|
||||||
int sy = sy_offset - spriteram[offs];
|
int sy = state->sy_offset - state->spriteram[offs];
|
||||||
|
|
||||||
if (flip_screen_get(machine))
|
if (flip_screen_get(machine))
|
||||||
{
|
{
|
||||||
sx = 240 - sx;
|
sx = 240 - sx;
|
||||||
sy = sy_offset - sy;
|
sy = state->sy_offset - sy;
|
||||||
flipx = !flipx;
|
flipx = !flipx;
|
||||||
flipy = !flipy;
|
flipy = !flipy;
|
||||||
}
|
}
|
||||||
@ -302,14 +329,16 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const recta
|
|||||||
|
|
||||||
static VIDEO_UPDATE( m63 )
|
static VIDEO_UPDATE( m63 )
|
||||||
{
|
{
|
||||||
|
m63_state *state = (m63_state *)screen->machine->driver_data;
|
||||||
|
|
||||||
int col;
|
int col;
|
||||||
|
|
||||||
for (col = 0; col < 32; 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);
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -327,30 +356,32 @@ static WRITE8_HANDLER( snd_irq_w )
|
|||||||
|
|
||||||
static WRITE8_HANDLER( snddata_w )
|
static WRITE8_HANDLER( snddata_w )
|
||||||
{
|
{
|
||||||
const device_config *ay1 = devtag_get_device(space->machine, "ay1");
|
m63_state *state = (m63_state *)space->machine->driver_data;
|
||||||
const device_config *ay2 = devtag_get_device(space->machine, "ay2");
|
|
||||||
|
|
||||||
if ((p2 & 0xf0) == 0xe0)
|
if ((state->p2 & 0xf0) == 0xe0)
|
||||||
ay8910_address_w(ay1, 0, offset);
|
ay8910_address_w(state->ay1, 0, offset);
|
||||||
else if ((p2 & 0xf0) == 0xa0)
|
else if ((state->p2 & 0xf0) == 0xa0)
|
||||||
ay8910_data_w(ay1, 0, offset);
|
ay8910_data_w(state->ay1, 0, offset);
|
||||||
else if (ay2 != NULL && (p1 & 0xe0) == 0x60)
|
else if (state->ay2 != NULL && (state->p1 & 0xe0) == 0x60)
|
||||||
ay8910_address_w(ay2, 0, offset);
|
ay8910_address_w(state->ay2, 0, offset);
|
||||||
else if (ay2 != NULL && (p1 & 0xe0) == 0x40)
|
else if (state->ay2 != NULL && (state->p1 & 0xe0) == 0x40)
|
||||||
ay8910_data_w(ay2, 0, offset);
|
ay8910_data_w(state->ay2, 0, offset);
|
||||||
else if ((p2 & 0xf0) == 0x70 )
|
else if ((state->p2 & 0xf0) == 0x70 )
|
||||||
sound_status = offset;
|
state->sound_status = offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
static WRITE8_HANDLER( p1_w )
|
static WRITE8_HANDLER( p1_w )
|
||||||
{
|
{
|
||||||
p1 = data;
|
m63_state *state = (m63_state *)space->machine->driver_data;
|
||||||
|
state->p1 = data;
|
||||||
}
|
}
|
||||||
|
|
||||||
static WRITE8_HANDLER( p2_w )
|
static WRITE8_HANDLER( p2_w )
|
||||||
{
|
{
|
||||||
p2 = data;
|
m63_state *state = (m63_state *)space->machine->driver_data;
|
||||||
if((p2 & 0xf0) == 0x50)
|
|
||||||
|
state->p2 = data;
|
||||||
|
if((state->p2 & 0xf0) == 0x50)
|
||||||
{
|
{
|
||||||
cputag_set_input_line(space->machine, "soundcpu", 0, CLEAR_LINE);
|
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 )
|
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 )
|
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 1;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
@ -373,23 +407,32 @@ static READ8_HANDLER( irq_r )
|
|||||||
|
|
||||||
static READ8_HANDLER( snddata_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 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;
|
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 )
|
static ADDRESS_MAP_START( m63_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||||
AM_RANGE(0x0000, 0xbfff) AM_ROM
|
AM_RANGE(0x0000, 0xbfff) AM_ROM
|
||||||
AM_RANGE(0xd000, 0xdfff) AM_RAM
|
AM_RANGE(0xd000, 0xdfff) AM_RAM
|
||||||
AM_RANGE(0xe000, 0xe1ff) AM_RAM
|
AM_RANGE(0xe000, 0xe1ff) AM_RAM
|
||||||
AM_RANGE(0xe200, 0xe2ff) AM_RAM AM_BASE(&spriteram) AM_SIZE(&spriteram_size)
|
AM_RANGE(0xe200, 0xe2ff) AM_RAM AM_BASE_MEMBER(m63_state, spriteram) AM_SIZE(&spriteram_size)
|
||||||
AM_RANGE(0xe300, 0xe3ff) AM_RAM AM_BASE(&m63_scrollram)
|
AM_RANGE(0xe300, 0xe3ff) AM_RAM AM_BASE_MEMBER(m63_state, scrollram)
|
||||||
AM_RANGE(0xe400, 0xe7ff) AM_RAM_WRITE(m63_videoram2_w) AM_BASE(&m63_videoram2)
|
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(&videoram)
|
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(&colorram)
|
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(0xf000, 0xf000) AM_WRITE(interrupt_enable_w) /* NMI enable */
|
||||||
AM_RANGE(0xf002, 0xf002) AM_WRITE(m63_flipscreen_w)
|
AM_RANGE(0xf002, 0xf002) AM_WRITE(m63_flipscreen_w)
|
||||||
AM_RANGE(0xf003, 0xf003) AM_WRITE(m63_palbank_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(0x8000, 0xbfff) AM_ROM
|
||||||
AM_RANGE(0xc000, 0xc7ff) AM_RAM
|
AM_RANGE(0xc000, 0xc7ff) AM_RAM
|
||||||
AM_RANGE(0xd000, 0xd1ff) AM_RAM
|
AM_RANGE(0xd000, 0xd1ff) AM_RAM
|
||||||
AM_RANGE(0xd200, 0xd2ff) AM_RAM AM_BASE(&spriteram) AM_SIZE(&spriteram_size)
|
AM_RANGE(0xd200, 0xd2ff) AM_RAM AM_BASE_MEMBER(m63_state, spriteram) AM_SIZE(&spriteram_size)
|
||||||
AM_RANGE(0xd300, 0xd3ff) AM_RAM AM_BASE(&m63_scrollram)
|
AM_RANGE(0xd300, 0xd3ff) AM_RAM AM_BASE_MEMBER(m63_state, scrollram)
|
||||||
AM_RANGE(0xd400, 0xd7ff) AM_RAM_WRITE(m63_videoram2_w) AM_BASE(&m63_videoram2)
|
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(&videoram)
|
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(&colorram)
|
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(0xf000, 0xf000) AM_READ(snd_status_r)
|
||||||
AM_RANGE(0xf001, 0xf001) AM_READ_PORT("P1")
|
AM_RANGE(0xf001, 0xf001) AM_READ_PORT("P1")
|
||||||
AM_RANGE(0xf002, 0xf002) AM_READ_PORT("P2")
|
AM_RANGE(0xf002, 0xf002) AM_READ_PORT("P2")
|
||||||
@ -622,6 +665,20 @@ static GFXDECODE_START( fghtbskt )
|
|||||||
GFXDECODE_END
|
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 =
|
static const samples_interface fghtbskt_samples_interface =
|
||||||
{
|
{
|
||||||
1,
|
1,
|
||||||
@ -631,11 +688,46 @@ static const samples_interface fghtbskt_samples_interface =
|
|||||||
|
|
||||||
static INTERRUPT_GEN( snd_irq )
|
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 )
|
static MACHINE_DRIVER_START( m63 )
|
||||||
|
|
||||||
|
/* driver data */
|
||||||
|
MDRV_DRIVER_DATA(m63_state)
|
||||||
|
|
||||||
/* basic machine hardware */
|
/* basic machine hardware */
|
||||||
MDRV_CPU_ADD("maincpu",Z80,XTAL_12MHz/4) /* 3 MHz */
|
MDRV_CPU_ADD("maincpu",Z80,XTAL_12MHz/4) /* 3 MHz */
|
||||||
MDRV_CPU_PROGRAM_MAP(m63_map)
|
MDRV_CPU_PROGRAM_MAP(m63_map)
|
||||||
@ -646,6 +738,8 @@ static MACHINE_DRIVER_START( m63 )
|
|||||||
MDRV_CPU_IO_MAP(i8039_port_map)
|
MDRV_CPU_IO_MAP(i8039_port_map)
|
||||||
MDRV_CPU_PERIODIC_INT(snd_irq, 60)
|
MDRV_CPU_PERIODIC_INT(snd_irq, 60)
|
||||||
|
|
||||||
|
MDRV_MACHINE_START(m63)
|
||||||
|
MDRV_MACHINE_RESET(m63)
|
||||||
|
|
||||||
/* video hardware */
|
/* video hardware */
|
||||||
MDRV_SCREEN_ADD("screen", RASTER)
|
MDRV_SCREEN_ADD("screen", RASTER)
|
||||||
@ -680,6 +774,9 @@ MACHINE_DRIVER_END
|
|||||||
|
|
||||||
static MACHINE_DRIVER_START( fghtbskt )
|
static MACHINE_DRIVER_START( fghtbskt )
|
||||||
|
|
||||||
|
/* driver data */
|
||||||
|
MDRV_DRIVER_DATA(m63_state)
|
||||||
|
|
||||||
/* basic machine hardware */
|
/* basic machine hardware */
|
||||||
MDRV_CPU_ADD("maincpu", Z80, XTAL_12MHz/4) /* 3 MHz */
|
MDRV_CPU_ADD("maincpu", Z80, XTAL_12MHz/4) /* 3 MHz */
|
||||||
MDRV_CPU_PROGRAM_MAP(fghtbskt_map)
|
MDRV_CPU_PROGRAM_MAP(fghtbskt_map)
|
||||||
@ -690,6 +787,9 @@ static MACHINE_DRIVER_START( fghtbskt )
|
|||||||
MDRV_CPU_IO_MAP(i8039_port_map)
|
MDRV_CPU_IO_MAP(i8039_port_map)
|
||||||
MDRV_CPU_PERIODIC_INT(snd_irq, 60/2)
|
MDRV_CPU_PERIODIC_INT(snd_irq, 60/2)
|
||||||
|
|
||||||
|
MDRV_MACHINE_START(m63)
|
||||||
|
MDRV_MACHINE_RESET(m63)
|
||||||
|
|
||||||
/* video hardware */
|
/* video hardware */
|
||||||
MDRV_SCREEN_ADD("screen", RASTER)
|
MDRV_SCREEN_ADD("screen", RASTER)
|
||||||
MDRV_SCREEN_REFRESH_RATE(60)
|
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_r.9e", 0x0000, 0x0100, CRC(c5cdc8ba) SHA1(3fcef3ebe0dda72dfa35e042ff611758c345d749) )
|
||||||
ROM_LOAD( "fb_g.10e", 0x0100, 0x0100, CRC(1460c936) SHA1(f99a544c83931de098a6cfac391f63ae43f5cdd0) )
|
ROM_LOAD( "fb_g.10e", 0x0100, 0x0100, CRC(1460c936) SHA1(f99a544c83931de098a6cfac391f63ae43f5cdd0) )
|
||||||
ROM_LOAD( "fb_b.11e", 0x0200, 0x0100, CRC(fca5bf0e) SHA1(5846f43aa2906cac58e300fdab197b99f896e3ef) )
|
ROM_LOAD( "fb_b.11e", 0x0200, 0x0100, CRC(fca5bf0e) SHA1(5846f43aa2906cac58e300fdab197b99f896e3ef) )
|
||||||
|
|
||||||
|
|
||||||
ROM_END
|
ROM_END
|
||||||
|
|
||||||
static DRIVER_INIT( wilytowr )
|
static DRIVER_INIT( wilytowr )
|
||||||
{
|
{
|
||||||
sy_offset = 238;
|
m63_state *state = (m63_state *)machine->driver_data;
|
||||||
|
state->sy_offset = 238;
|
||||||
}
|
}
|
||||||
|
|
||||||
static DRIVER_INIT( fghtbskt )
|
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( 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)", 0 )
|
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)", 0 )
|
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", 0 )
|
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 "driver.h"
|
||||||
#include "cpu/z80/z80.h"
|
#include "cpu/z80/z80.h"
|
||||||
#include "audio/irem.h"
|
#include "audio/irem.h"
|
||||||
|
#include "includes/iremz80.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 );
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static ADDRESS_MAP_START( main_map, ADDRESS_SPACE_PROGRAM, 8 )
|
static ADDRESS_MAP_START( main_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||||
AM_RANGE(0x0000, 0x7fff) AM_ROM
|
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(0x9000, 0x9000) AM_WRITE(travrusa_scroll_x_low_w)
|
||||||
AM_RANGE(0xa000, 0xa000) AM_WRITE(travrusa_scroll_x_high_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(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(0xd001, 0xd001) AM_WRITE(travrusa_flipscreen_w) /* + coin counters - not written by shtrider */
|
||||||
AM_RANGE(0xd000, 0xd000) AM_READ_PORT("SYSTEM") /* IN0 */
|
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_ENTRY( "gfx2", 0, shtrider_spritelayout, 16*8, 16 )
|
||||||
GFXDECODE_END
|
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 )
|
static MACHINE_DRIVER_START( travrusa )
|
||||||
|
|
||||||
|
/* driver data */
|
||||||
|
MDRV_DRIVER_DATA(irem_z80_state)
|
||||||
|
|
||||||
/* basic machine hardware */
|
/* basic machine hardware */
|
||||||
MDRV_CPU_ADD("maincpu", Z80, 4000000) /* 4 MHz (?) */
|
MDRV_CPU_ADD("maincpu", Z80, 4000000) /* 4 MHz (?) */
|
||||||
MDRV_CPU_PROGRAM_MAP(main_map)
|
MDRV_CPU_PROGRAM_MAP(main_map)
|
||||||
MDRV_CPU_VBLANK_INT("screen", irq0_line_hold)
|
MDRV_CPU_VBLANK_INT("screen", irq0_line_hold)
|
||||||
|
|
||||||
|
MDRV_MACHINE_RESET(travrusa)
|
||||||
|
|
||||||
/* video hardware */
|
/* video hardware */
|
||||||
MDRV_SCREEN_ADD("screen", RASTER)
|
MDRV_SCREEN_ADD("screen", RASTER)
|
||||||
MDRV_SCREEN_REFRESH_RATE(56.75)
|
MDRV_SCREEN_REFRESH_RATE(56.75)
|
||||||
@ -486,7 +486,7 @@ static DRIVER_INIT( shtridra )
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
GAME( 1983, travrusa, 0, travrusa, travrusa, 0, ROT270, "Irem", "Traverse USA / Zippy Race", 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", 0 )
|
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", 0 )
|
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)", 0 )
|
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 );
|
@ -34,16 +34,27 @@ struct _m10_state
|
|||||||
UINT8 * chargen;
|
UINT8 * chargen;
|
||||||
UINT8 * memory;
|
UINT8 * memory;
|
||||||
UINT8 * rom;
|
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 */
|
/* video state */
|
||||||
UINT8 bottomline;
|
UINT8 bottomline;
|
||||||
UINT8 flip;
|
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( m10 );
|
||||||
VIDEO_START( m15 );
|
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)/travrusa.o $(VIDEO)/travrusa.o \
|
||||||
$(DRIVERS)/vigilant.o $(VIDEO)/vigilant.o \
|
$(DRIVERS)/vigilant.o $(VIDEO)/vigilant.o \
|
||||||
$(MACHINE)/irem_cpu.o \
|
$(MACHINE)/irem_cpu.o \
|
||||||
$(AUDIO)/fghtbskt.o \
|
|
||||||
$(AUDIO)/irem.o \
|
$(AUDIO)/irem.o \
|
||||||
|
|
||||||
$(MAMEOBJ)/itech.a: \
|
$(MAMEOBJ)/itech.a: \
|
||||||
|
@ -13,9 +13,8 @@
|
|||||||
#include "driver.h"
|
#include "driver.h"
|
||||||
#include "m10.h"
|
#include "m10.h"
|
||||||
|
|
||||||
static tilemap * tx_tilemap;
|
static UINT32 extyoffs[32 * 8]; // FIXME: this should be moved to m10_state, but backlayout would have problems
|
||||||
static gfx_element * back_gfx;
|
|
||||||
static UINT32 extyoffs[32*8];
|
|
||||||
|
|
||||||
static const gfx_layout backlayout =
|
static const gfx_layout backlayout =
|
||||||
{
|
{
|
||||||
@ -48,16 +47,20 @@ static UINT32 tilemap_scan(UINT32 col,UINT32 row,UINT32 num_cols,UINT32 num_rows
|
|||||||
|
|
||||||
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 )
|
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);
|
tilemap_mark_tile_dirty(state->tx_tilemap, offset);
|
||||||
colorram[offset] = data;
|
state->colorram[offset] = data;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -69,7 +72,7 @@ WRITE8_HANDLER( m10_chargen_w )
|
|||||||
if (state->chargen[offset] != data)
|
if (state->chargen[offset] != data)
|
||||||
{
|
{
|
||||||
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));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -93,8 +96,8 @@ INLINE void plot_pixel_m10(running_machine *machine, bitmap_t *bm, int x, int y,
|
|||||||
if (!state->flip)
|
if (!state->flip)
|
||||||
*BITMAP_ADDR16(bm, y, x) = col;
|
*BITMAP_ADDR16(bm, y, x) = col;
|
||||||
else
|
else
|
||||||
*BITMAP_ADDR16(bm, (IREMM10_VBSTART - 1)- (y - IREMM10_VBEND) + 6
|
*BITMAP_ADDR16(bm, (IREMM10_VBSTART - 1) - (y - IREMM10_VBEND) + 6,
|
||||||
, (IREMM10_HBSTART - 1)- (x- IREMM10_HBEND)) = col; // only when flip_screen(?)
|
(IREMM10_HBSTART - 1) - (x - IREMM10_HBEND)) = col; // only when flip_screen(?)
|
||||||
}
|
}
|
||||||
|
|
||||||
VIDEO_START( m10 )
|
VIDEO_START( m10 )
|
||||||
@ -105,14 +108,14 @@ VIDEO_START( m10 )
|
|||||||
for (i = 0; i < 32 * 8; i++)
|
for (i = 0; i < 32 * 8; i++)
|
||||||
extyoffs[i] = i * 8;
|
extyoffs[i] = i * 8;
|
||||||
|
|
||||||
tx_tilemap = tilemap_create(machine, get_tile_info,tilemap_scan,8,8,32,32);
|
state->tx_tilemap = tilemap_create(machine, get_tile_info, tilemap_scan, 8, 8, 32, 32);
|
||||||
tilemap_set_transparent_pen(tx_tilemap, 0);
|
tilemap_set_transparent_pen(state->tx_tilemap, 0);
|
||||||
tilemap_set_scrolldx(tx_tilemap, 0, 62);
|
tilemap_set_scrolldx(state->tx_tilemap, 0, 62);
|
||||||
tilemap_set_scrolldy(tx_tilemap, 0, 0);
|
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 ;
|
return ;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -122,9 +125,9 @@ VIDEO_START( m15 )
|
|||||||
|
|
||||||
machine->gfx[0] = gfx_element_alloc(machine, &charlayout, state->chargen, 8, 0);
|
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);
|
state->tx_tilemap = tilemap_create(machine, get_tile_info,tilemap_scan, 8, 8, 32, 32);
|
||||||
tilemap_set_scrolldx(tx_tilemap, 0, 116);
|
tilemap_set_scrolldx(state->tx_tilemap, 0, 116);
|
||||||
tilemap_set_scrolldy(tx_tilemap, 0, 0);
|
tilemap_set_scrolldy(state->tx_tilemap, 0, 0);
|
||||||
|
|
||||||
return ;
|
return ;
|
||||||
}
|
}
|
||||||
@ -134,6 +137,7 @@ VIDEO_START( m15 )
|
|||||||
Draw the game screen in the given bitmap_t.
|
Draw the game screen in the given bitmap_t.
|
||||||
|
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
VIDEO_UPDATE( m10 )
|
VIDEO_UPDATE( m10 )
|
||||||
{
|
{
|
||||||
m10_state *state = (m10_state *)screen->machine->driver_data;
|
m10_state *state = (m10_state *)screen->machine->driver_data;
|
||||||
@ -146,9 +150,9 @@ VIDEO_UPDATE( m10 )
|
|||||||
|
|
||||||
for (i = 0; i < 4; i++)
|
for (i = 0; i < 4; i++)
|
||||||
if (state->flip)
|
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
|
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)
|
if (state->bottomline)
|
||||||
{
|
{
|
||||||
@ -159,10 +163,10 @@ VIDEO_UPDATE( m10 )
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (offs = videoram_size - 1; offs >= 0; offs--)
|
for (offs = videoram_size - 1; offs >= 0; offs--)
|
||||||
tilemap_mark_tile_dirty(tx_tilemap, offs);
|
tilemap_mark_tile_dirty(state->tx_tilemap, offs);
|
||||||
|
|
||||||
tilemap_set_flip(tx_tilemap, state->flip ? TILEMAP_FLIPX | TILEMAP_FLIPY : 0);
|
tilemap_set_flip(state->tx_tilemap, state->flip ? TILEMAP_FLIPX | TILEMAP_FLIPY : 0);
|
||||||
tilemap_draw(bitmap,cliprect,tx_tilemap,0,0);
|
tilemap_draw(bitmap, cliprect, state->tx_tilemap, 0, 0);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -173,18 +177,18 @@ VIDEO_UPDATE( m10 )
|
|||||||
Draw the game screen in the given bitmap_t.
|
Draw the game screen in the given bitmap_t.
|
||||||
|
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
VIDEO_UPDATE( m15 )
|
VIDEO_UPDATE( m15 )
|
||||||
{
|
{
|
||||||
m10_state *state = (m10_state *)screen->machine->driver_data;
|
m10_state *state = (m10_state *)screen->machine->driver_data;
|
||||||
int offs;
|
int offs;
|
||||||
|
|
||||||
for (offs = videoram_size - 1; offs >= 0; offs--)
|
for (offs = videoram_size - 1; offs >= 0; offs--)
|
||||||
tilemap_mark_tile_dirty(tx_tilemap, offs);
|
tilemap_mark_tile_dirty(state->tx_tilemap, offs);
|
||||||
|
|
||||||
//tilemap_mark_all_tiles_dirty(tx_tilemap);
|
//tilemap_mark_all_tiles_dirty(state->tx_tilemap);
|
||||||
tilemap_set_flip(tx_tilemap, state->flip ? TILEMAP_FLIPX | TILEMAP_FLIPY : 0);
|
tilemap_set_flip(state->tx_tilemap, state->flip ? TILEMAP_FLIPX | TILEMAP_FLIPY : 0);
|
||||||
tilemap_draw(bitmap,cliprect,tx_tilemap,0,0);
|
tilemap_draw(bitmap, cliprect, state->tx_tilemap, 0, 0);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,19 +5,11 @@
|
|||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
#include "driver.h"
|
#include "driver.h"
|
||||||
#include "m52.h"
|
#include "includes/iremz80.h"
|
||||||
#include "video/resnet.h"
|
#include "video/resnet.h"
|
||||||
|
|
||||||
#define BGHEIGHT 64
|
#define BGHEIGHT 64
|
||||||
|
|
||||||
static UINT8 bg1xpos;
|
|
||||||
static UINT8 bg1ypos;
|
|
||||||
static UINT8 bg2xpos;
|
|
||||||
static UINT8 bg2ypos;
|
|
||||||
static UINT8 bgcontrol;
|
|
||||||
|
|
||||||
static tilemap* bg_tilemap;
|
|
||||||
|
|
||||||
|
|
||||||
/*************************************
|
/*************************************
|
||||||
*
|
*
|
||||||
@ -124,8 +116,9 @@ PALETTE_INIT( m52 )
|
|||||||
|
|
||||||
static TILE_GET_INFO( get_tile_info )
|
static TILE_GET_INFO( get_tile_info )
|
||||||
{
|
{
|
||||||
UINT8 video = videoram[tile_index];
|
irem_z80_state *state = (irem_z80_state *)machine->driver_data;
|
||||||
UINT8 color = colorram[tile_index];
|
UINT8 video = state->videoram[tile_index];
|
||||||
|
UINT8 color = state->colorram[tile_index];
|
||||||
|
|
||||||
int flag = 0;
|
int flag = 0;
|
||||||
int code = 0;
|
int code = 0;
|
||||||
@ -155,18 +148,20 @@ static TILE_GET_INFO( get_tile_info )
|
|||||||
|
|
||||||
VIDEO_START( m52 )
|
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);
|
state->bg_tilemap = tilemap_create(machine, get_tile_info, tilemap_scan_rows, 8, 8, 32, 32);
|
||||||
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_save_register_global(machine, bg1xpos);
|
tilemap_set_transparent_pen(state->bg_tilemap, 0);
|
||||||
state_save_register_global(machine, bg1ypos);
|
tilemap_set_scrolldx(state->bg_tilemap, 128 - 1, -1);
|
||||||
state_save_register_global(machine, bg2xpos);
|
tilemap_set_scrolldy(state->bg_tilemap, 16, 16);
|
||||||
state_save_register_global(machine, bg2ypos);
|
tilemap_set_scroll_rows(state->bg_tilemap, 4); /* only lines 192-256 scroll */
|
||||||
state_save_register_global(machine, bgcontrol);
|
|
||||||
|
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 )
|
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
|
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
|
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
|
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(state->bg_tilemap, 0, 255);
|
||||||
tilemap_set_scrollx(bg_tilemap, 1, 255);
|
tilemap_set_scrollx(state->bg_tilemap, 1, 255);
|
||||||
tilemap_set_scrollx(bg_tilemap, 2, 255);
|
tilemap_set_scrollx(state->bg_tilemap, 2, 255);
|
||||||
tilemap_set_scrollx(bg_tilemap, 3, -data);
|
tilemap_set_scrollx(state->bg_tilemap, 3, -data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -203,15 +198,19 @@ WRITE8_HANDLER( m52_scroll_w )
|
|||||||
|
|
||||||
WRITE8_HANDLER( m52_videoram_w )
|
WRITE8_HANDLER( m52_videoram_w )
|
||||||
{
|
{
|
||||||
videoram[offset] = data;
|
irem_z80_state *state = (irem_z80_state *)space->machine->driver_data;
|
||||||
tilemap_mark_tile_dirty(bg_tilemap, offset);
|
|
||||||
|
state->videoram[offset] = data;
|
||||||
|
tilemap_mark_tile_dirty(state->bg_tilemap, offset);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
WRITE8_HANDLER( m52_colorram_w )
|
WRITE8_HANDLER( m52_colorram_w )
|
||||||
{
|
{
|
||||||
colorram[offset] = data;
|
irem_z80_state *state = (irem_z80_state *)space->machine->driver_data;
|
||||||
tilemap_mark_tile_dirty(bg_tilemap, offset);
|
|
||||||
|
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) */
|
follows: result = popcount(value & 0x7f) ^ (value >> 7) */
|
||||||
READ8_HANDLER( m52_protection_r )
|
READ8_HANDLER( m52_protection_r )
|
||||||
{
|
{
|
||||||
|
irem_z80_state *state = (irem_z80_state *)space->machine->driver_data;
|
||||||
int popcount = 0;
|
int popcount = 0;
|
||||||
int temp;
|
int temp;
|
||||||
|
|
||||||
for (temp = bg1xpos & 0x7f; temp != 0; temp >>= 1)
|
for (temp = state->bg1xpos & 0x7f; temp != 0; temp >>= 1)
|
||||||
popcount += 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 )
|
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 )
|
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 )
|
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 )
|
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 )
|
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 )
|
VIDEO_UPDATE( m52 )
|
||||||
{
|
{
|
||||||
|
irem_z80_state *state = (irem_z80_state *)screen->machine->driver_data;
|
||||||
int offs;
|
int offs;
|
||||||
|
|
||||||
bitmap_fill(bitmap, cliprect, 0);
|
bitmap_fill(bitmap, cliprect, 0);
|
||||||
|
|
||||||
if (!(bgcontrol & 0x20))
|
if (!(state->bgcontrol & 0x20))
|
||||||
{
|
{
|
||||||
if (!(bgcontrol & 0x10))
|
if (!(state->bgcontrol & 0x10))
|
||||||
draw_background(screen->machine, bitmap, cliprect, bg2xpos, bg2ypos, 2); /* distant mountains */
|
draw_background(screen->machine, bitmap, cliprect, state->bg2xpos, state->bg2ypos, 2); /* distant mountains */
|
||||||
|
|
||||||
if (!(bgcontrol & 0x02))
|
if (!(state->bgcontrol & 0x02))
|
||||||
draw_background(screen->machine, bitmap, cliprect, bg1xpos, bg1ypos, 3); /* hills */
|
draw_background(screen->machine, bitmap, cliprect, state->bg1xpos, state->bg1ypos, 3); /* hills */
|
||||||
|
|
||||||
if (!(bgcontrol & 0x04))
|
if (!(state->bgcontrol & 0x04))
|
||||||
draw_background(screen->machine, bitmap, cliprect, bg1xpos, bg1ypos, 4); /* cityscape */
|
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 */
|
/* draw the sprites */
|
||||||
for (offs = 0xfc; offs >= 0; offs -= 4)
|
for (offs = 0xfc; offs >= 0; offs -= 4)
|
||||||
{
|
{
|
||||||
int sy = 257 - spriteram[offs];
|
int sy = 257 - state->spriteram[offs];
|
||||||
int color = spriteram[offs + 1] & 0x3f;
|
int color = state->spriteram[offs + 1] & 0x3f;
|
||||||
int flipx = spriteram[offs + 1] & 0x40;
|
int flipx = state->spriteram[offs + 1] & 0x40;
|
||||||
int flipy = spriteram[offs + 1] & 0x80;
|
int flipy = state->spriteram[offs + 1] & 0x80;
|
||||||
int code = spriteram[offs + 2];
|
int code = state->spriteram[offs + 2];
|
||||||
int sx = spriteram[offs + 3];
|
int sx = state->spriteram[offs + 3];
|
||||||
rectangle clip;
|
rectangle clip;
|
||||||
|
|
||||||
/* sprites from offsets $00-$7F are processed in the upper half of the frame */
|
/* sprites from offsets $00-$7F are processed in the upper half of the frame */
|
||||||
|
@ -5,13 +5,7 @@
|
|||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
#include "driver.h"
|
#include "driver.h"
|
||||||
#include "m57.h"
|
#include "includes/iremz80.h"
|
||||||
|
|
||||||
|
|
||||||
UINT8 *m57_scroll;
|
|
||||||
|
|
||||||
static int flipscreen;
|
|
||||||
static tilemap *bg_tilemap;
|
|
||||||
|
|
||||||
|
|
||||||
/***************************************************************************
|
/***************************************************************************
|
||||||
@ -35,6 +29,7 @@ static tilemap *bg_tilemap;
|
|||||||
bit 0 -- 1 kohm resistor -- BLUE
|
bit 0 -- 1 kohm resistor -- BLUE
|
||||||
|
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
PALETTE_INIT( m57 )
|
PALETTE_INIT( m57 )
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
@ -116,8 +111,10 @@ PALETTE_INIT( m57 )
|
|||||||
|
|
||||||
static TILE_GET_INFO( get_tile_info )
|
static TILE_GET_INFO( get_tile_info )
|
||||||
{
|
{
|
||||||
UINT8 attr = videoram[tile_index*2 + 0];
|
irem_z80_state *state = (irem_z80_state *)machine->driver_data;
|
||||||
UINT16 code = videoram[tile_index*2 + 1] | ((attr & 0xc0) << 2);
|
|
||||||
|
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));
|
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 )
|
WRITE8_HANDLER( m57_videoram_w )
|
||||||
{
|
{
|
||||||
videoram[offset] = data;
|
irem_z80_state *state = (irem_z80_state *)space->machine->driver_data;
|
||||||
tilemap_mark_tile_dirty(bg_tilemap, offset / 2);
|
|
||||||
|
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 )
|
VIDEO_START( m57 )
|
||||||
{
|
{
|
||||||
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_scroll_rows(bg_tilemap, 256);
|
|
||||||
|
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 )
|
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 */
|
/* screen flip is handled both by software and hardware */
|
||||||
flipscreen = (data & 0x01) ^ (~input_port_read(space->machine, "DSW2") & 0x01);
|
state->flipscreen = (data & 0x01) ^ (~input_port_read(space->machine, "DSW2") & 0x01);
|
||||||
tilemap_set_flip(bg_tilemap, flipscreen ? (TILEMAP_FLIPY | TILEMAP_FLIPX) : 0);
|
tilemap_set_flip(state->bg_tilemap, state->flipscreen ? (TILEMAP_FLIPY | TILEMAP_FLIPX) : 0);
|
||||||
|
|
||||||
coin_counter_w(0,data & 0x02);
|
coin_counter_w(0,data & 0x02);
|
||||||
coin_counter_w(1,data & 0x20);
|
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)
|
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;
|
int y,x;
|
||||||
INT16 scrolly;
|
INT16 scrolly;
|
||||||
|
|
||||||
// from 64 to 127: not wrapped
|
// from 64 to 127: not wrapped
|
||||||
for (y = 64; y < 128; y++)
|
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
|
// from 128 to 255: wrapped
|
||||||
for (y = 128; y <= cliprect->max_y; y++)
|
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)
|
if (scrolly >= 0)
|
||||||
{
|
{
|
||||||
@ -217,15 +223,15 @@ 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)
|
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;
|
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];
|
UINT8 attributes = state->spriteram[offs + 1];
|
||||||
int sx = spriteram[offs+3];
|
int sx = state->spriteram[offs + 3];
|
||||||
int sy = ((224-spriteram[offs+0]-32)&0xff)+32;
|
int sy = ((224 - state->spriteram[offs + 0] - 32) & 0xff) + 32;
|
||||||
int code = spriteram[offs+2];
|
int code = state->spriteram[offs + 2];
|
||||||
int color = attributes & 0x1f;
|
int color = attributes & 0x1f;
|
||||||
int flipy = attributes & 0x80;
|
int flipy = attributes & 0x80;
|
||||||
int flipx = attributes & 0x40;
|
int flipx = attributes & 0x40;
|
||||||
@ -236,7 +242,7 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const recta
|
|||||||
if (code & 0x80) bank += 1;
|
if (code & 0x80) bank += 1;
|
||||||
if (attributes & 0x20) bank += 2;
|
if (attributes & 0x20) bank += 2;
|
||||||
|
|
||||||
if (flipscreen)
|
if (state->flipscreen)
|
||||||
{
|
{
|
||||||
sx = 240 - sx;
|
sx = 240 - sx;
|
||||||
sy = 224 - sy;
|
sy = 224 - sy;
|
||||||
|
@ -5,17 +5,9 @@
|
|||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
#include "driver.h"
|
#include "driver.h"
|
||||||
#include "m58.h"
|
#include "includes/iremz80.h"
|
||||||
#include "video/resnet.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 SCROLL_PANEL_WIDTH (14*4)
|
||||||
#define RADAR_PALETTE_BASE (256)
|
#define RADAR_PALETTE_BASE (256)
|
||||||
|
|
||||||
@ -113,19 +105,24 @@ PALETTE_INIT( yard )
|
|||||||
|
|
||||||
WRITE8_HANDLER( yard_videoram_w )
|
WRITE8_HANDLER( yard_videoram_w )
|
||||||
{
|
{
|
||||||
videoram[offset] = data;
|
irem_z80_state *state = (irem_z80_state *)space->machine->driver_data;
|
||||||
tilemap_mark_tile_dirty(bg_tilemap, offset / 2);
|
|
||||||
|
state->videoram[offset] = data;
|
||||||
|
tilemap_mark_tile_dirty(state->bg_tilemap, offset / 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
WRITE8_HANDLER( yard_scroll_panel_w )
|
WRITE8_HANDLER( yard_scroll_panel_w )
|
||||||
{
|
{
|
||||||
|
irem_z80_state *state = (irem_z80_state *)space->machine->driver_data;
|
||||||
|
|
||||||
int sx,sy,i;
|
int sx,sy,i;
|
||||||
|
|
||||||
sx = ( offset % 16 );
|
sx = ( offset % 16 );
|
||||||
sy = ( offset / 16 );
|
sy = ( offset / 16 );
|
||||||
|
|
||||||
if (sx < 1 || sx > 14) return;
|
if (sx < 1 || sx > 14)
|
||||||
|
return;
|
||||||
|
|
||||||
sx = 4 * (sx - 1);
|
sx = 4 * (sx - 1);
|
||||||
|
|
||||||
@ -136,7 +133,7 @@ WRITE8_HANDLER( yard_scroll_panel_w )
|
|||||||
col = (data >> i) & 0x11;
|
col = (data >> i) & 0x11;
|
||||||
col = ((col >> 3) | col) & 3;
|
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 )
|
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 offs = tile_index * 2;
|
||||||
int attr = videoram[offs + 1];
|
int attr = state->videoram[offs + 1];
|
||||||
int code = videoram[offs] + ((attr & 0xc0) << 2);
|
int code = state->videoram[offs] + ((attr & 0xc0) << 2);
|
||||||
int color = attr & 0x1f;
|
int color = attr & 0x1f;
|
||||||
int flags = (attr & 0x20) ? TILE_FLIPX : 0;
|
int flags = (attr & 0x20) ? TILE_FLIPX : 0;
|
||||||
|
|
||||||
@ -179,16 +178,18 @@ static UINT32 yard_tilemap_scan_rows( UINT32 col, UINT32 row, UINT32 num_cols, U
|
|||||||
|
|
||||||
VIDEO_START( yard )
|
VIDEO_START( yard )
|
||||||
{
|
{
|
||||||
|
irem_z80_state *state = (irem_z80_state *)machine->driver_data;
|
||||||
|
|
||||||
int width = video_screen_get_width(machine->primary_screen);
|
int width = video_screen_get_width(machine->primary_screen);
|
||||||
int height = video_screen_get_height(machine->primary_screen);
|
int height = video_screen_get_height(machine->primary_screen);
|
||||||
bitmap_format format = video_screen_get_format(machine->primary_screen);
|
bitmap_format format = video_screen_get_format(machine->primary_screen);
|
||||||
const rectangle *visarea = video_screen_get_visible_area(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);
|
state->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_scrolldx(state->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));
|
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 )
|
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;
|
int offs;
|
||||||
const rectangle *visarea = video_screen_get_visible_area(machine->primary_screen);
|
const rectangle *visarea = video_screen_get_visible_area(machine->primary_screen);
|
||||||
|
|
||||||
for (offs = spriteram_size - 4; offs >= 0; offs -= 4)
|
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 bank = (attr & 0x20) >> 5;
|
||||||
int code1 = spriteram[offs + 2] & 0xbf;
|
int code1 = state->spriteram[offs + 2] & 0xbf;
|
||||||
int code2 = 0;
|
int code2 = 0;
|
||||||
int color = attr & 0x1f;
|
int color = attr & 0x1f;
|
||||||
int flipx = attr & 0x40;
|
int flipx = attr & 0x40;
|
||||||
int flipy = attr & 0x80;
|
int flipy = attr & 0x80;
|
||||||
int sx = spriteram[offs + 3];
|
int sx = state->spriteram[offs + 3];
|
||||||
int sy1 = 233 - spriteram[offs];
|
int sy1 = 233 - state->spriteram[offs];
|
||||||
int sy2 = 0;
|
int sy2 = 0;
|
||||||
|
|
||||||
if (flipy)
|
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 )
|
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 =
|
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;
|
clip.max_y += visarea->max_y + yoffs;
|
||||||
sect_rect(&clip, cliprect);
|
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);
|
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 )
|
VIDEO_UPDATE( yard )
|
||||||
{
|
{
|
||||||
tilemap_set_scrollx(bg_tilemap, 0, (*yard_scroll_x_high * 0x100) + *yard_scroll_x_low);
|
irem_z80_state *state = (irem_z80_state *)screen->machine->driver_data;
|
||||||
tilemap_set_scrolly(bg_tilemap, 0, *yard_scroll_y_low);
|
|
||||||
|
|
||||||
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_sprites(screen->machine, bitmap, cliprect);
|
||||||
draw_panel(screen->machine, bitmap, cliprect);
|
draw_panel(screen->machine, bitmap, cliprect);
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -14,32 +14,9 @@ Tile/sprite priority system (for the Kung Fu Master M62 board):
|
|||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
#include "driver.h"
|
#include "driver.h"
|
||||||
#include "m62.h"
|
#include "includes/iremz80.h"
|
||||||
#include "video/resnet.h"
|
#include "video/resnet.h"
|
||||||
|
|
||||||
UINT8 *m62_tileram;
|
|
||||||
UINT8 *m62_textram;
|
|
||||||
UINT8 *horizon_scrollram;
|
|
||||||
|
|
||||||
static tilemap *m62_background;
|
|
||||||
static tilemap *m62_foreground;
|
|
||||||
static UINT8 flipscreen;
|
|
||||||
static const UINT8 *sprite_height_prom;
|
|
||||||
static INT32 m62_background_hscroll;
|
|
||||||
static INT32 m62_background_vscroll;
|
|
||||||
|
|
||||||
static int ldrun3_topbottom_mask;
|
|
||||||
|
|
||||||
static UINT8 *irem_textram;
|
|
||||||
static size_t irem_textram_size;
|
|
||||||
|
|
||||||
static UINT8 kidniki_background_bank;
|
|
||||||
static INT32 kidniki_text_vscroll;
|
|
||||||
|
|
||||||
static INT32 spelunkr_palbank;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/***************************************************************************
|
/***************************************************************************
|
||||||
|
|
||||||
Convert the color PROMs into a more useable format.
|
Convert the color PROMs into a more useable format.
|
||||||
@ -205,6 +182,7 @@ static const res_net_decode_info spelunk2_sprite_decode_info =
|
|||||||
|
|
||||||
PALETTE_INIT( m62 )
|
PALETTE_INIT( m62 )
|
||||||
{
|
{
|
||||||
|
irem_z80_state *state = (irem_z80_state *)machine->driver_data;
|
||||||
rgb_t *rgb;
|
rgb_t *rgb;
|
||||||
|
|
||||||
rgb = compute_res_net_all(color_prom, &m62_tile_decode_info, &m62_tile_net_info);
|
rgb = compute_res_net_all(color_prom, &m62_tile_decode_info, &m62_tile_net_info);
|
||||||
@ -218,12 +196,13 @@ PALETTE_INIT( m62 )
|
|||||||
palette_normalize_range(machine->palette, 0x000, 0x1ff, 0x00, 0xff);
|
palette_normalize_range(machine->palette, 0x000, 0x1ff, 0x00, 0xff);
|
||||||
|
|
||||||
/* we'll need this at run time */
|
/* we'll need this at run time */
|
||||||
sprite_height_prom = color_prom + 0x600;
|
state->sprite_height_prom = color_prom + 0x600;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
PALETTE_INIT( lotlot )
|
PALETTE_INIT( lotlot )
|
||||||
{
|
{
|
||||||
|
irem_z80_state *state = (irem_z80_state *)machine->driver_data;
|
||||||
rgb_t *rgb;
|
rgb_t *rgb;
|
||||||
|
|
||||||
rgb = compute_res_net_all(color_prom, &lotlot_tile_decode_info, &m62_tile_net_info);
|
rgb = compute_res_net_all(color_prom, &lotlot_tile_decode_info, &m62_tile_net_info);
|
||||||
@ -237,12 +216,13 @@ PALETTE_INIT( lotlot )
|
|||||||
palette_normalize_range(machine->palette, 0x000, 0x2ff, 0x00, 0xff);
|
palette_normalize_range(machine->palette, 0x000, 0x2ff, 0x00, 0xff);
|
||||||
|
|
||||||
/* we'll need this at run time */
|
/* we'll need this at run time */
|
||||||
sprite_height_prom = color_prom + 0x900;
|
state->sprite_height_prom = color_prom + 0x900;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
PALETTE_INIT( battroad )
|
PALETTE_INIT( battroad )
|
||||||
{
|
{
|
||||||
|
irem_z80_state *state = (irem_z80_state *)machine->driver_data;
|
||||||
rgb_t *rgb;
|
rgb_t *rgb;
|
||||||
|
|
||||||
rgb = compute_res_net_all(color_prom, &m62_tile_decode_info, &m62_tile_net_info);
|
rgb = compute_res_net_all(color_prom, &m62_tile_decode_info, &m62_tile_net_info);
|
||||||
@ -259,12 +239,13 @@ PALETTE_INIT( battroad )
|
|||||||
|
|
||||||
palette_normalize_range(machine->palette, 0x000, 0x21f, 0x00, 0xff);
|
palette_normalize_range(machine->palette, 0x000, 0x21f, 0x00, 0xff);
|
||||||
|
|
||||||
sprite_height_prom = color_prom + 0x620; /* we'll need this at run time */
|
state->sprite_height_prom = color_prom + 0x620; /* we'll need this at run time */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
PALETTE_INIT( spelunk2 )
|
PALETTE_INIT( spelunk2 )
|
||||||
{
|
{
|
||||||
|
irem_z80_state *state = (irem_z80_state *)machine->driver_data;
|
||||||
rgb_t *rgb;
|
rgb_t *rgb;
|
||||||
|
|
||||||
rgb = compute_res_net_all(color_prom, &spelunk2_tile_decode_info, &m62_tile_net_info);
|
rgb = compute_res_net_all(color_prom, &spelunk2_tile_decode_info, &m62_tile_net_info);
|
||||||
@ -278,29 +259,33 @@ PALETTE_INIT( spelunk2 )
|
|||||||
palette_normalize_range(machine->palette, 0x000, 0x2ff, 0x00, 0xff);
|
palette_normalize_range(machine->palette, 0x000, 0x2ff, 0x00, 0xff);
|
||||||
|
|
||||||
/* we'll need this at run time */
|
/* we'll need this at run time */
|
||||||
sprite_height_prom = color_prom + 0x700;
|
state->sprite_height_prom = color_prom + 0x700;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static void register_savestate( running_machine *machine )
|
static void register_savestate( running_machine *machine )
|
||||||
{
|
{
|
||||||
state_save_register_global(machine, flipscreen);
|
irem_z80_state *state = (irem_z80_state *)machine->driver_data;
|
||||||
state_save_register_global(machine, kidniki_background_bank);
|
|
||||||
state_save_register_global(machine, m62_background_hscroll);
|
state_save_register_global(machine, state->flipscreen);
|
||||||
state_save_register_global(machine, m62_background_vscroll);
|
state_save_register_global(machine, state->m62_background_hscroll);
|
||||||
state_save_register_global(machine, kidniki_text_vscroll);
|
state_save_register_global(machine, state->m62_background_vscroll);
|
||||||
state_save_register_global(machine, spelunkr_palbank);
|
|
||||||
state_save_register_global_pointer(machine, irem_textram, irem_textram_size);
|
state_save_register_global(machine, state->kidniki_background_bank);
|
||||||
|
state_save_register_global(machine, state->kidniki_text_vscroll);
|
||||||
|
state_save_register_global(machine, state->ldrun3_topbottom_mask);
|
||||||
|
state_save_register_global(machine, state->spelunkr_palbank);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
WRITE8_HANDLER( m62_flipscreen_w )
|
WRITE8_HANDLER( m62_flipscreen_w )
|
||||||
{
|
{
|
||||||
|
irem_z80_state *state = (irem_z80_state *)space->machine->driver_data;
|
||||||
/* screen flip is handled both by software and hardware */
|
/* screen flip is handled both by software and hardware */
|
||||||
data ^= ~input_port_read(space->machine, "DSW2") & 1;
|
data ^= ~input_port_read(space->machine, "DSW2") & 1;
|
||||||
|
|
||||||
flipscreen = data & 0x01;
|
state->flipscreen = data & 0x01;
|
||||||
if (flipscreen)
|
if (state->flipscreen)
|
||||||
tilemap_set_flip_all(space->machine, TILEMAP_FLIPX | TILEMAP_FLIPY);
|
tilemap_set_flip_all(space->machine, TILEMAP_FLIPX | TILEMAP_FLIPY);
|
||||||
else
|
else
|
||||||
tilemap_set_flip_all(space->machine, 0);
|
tilemap_set_flip_all(space->machine, 0);
|
||||||
@ -311,55 +296,62 @@ WRITE8_HANDLER( m62_flipscreen_w )
|
|||||||
|
|
||||||
WRITE8_HANDLER( m62_hscroll_low_w )
|
WRITE8_HANDLER( m62_hscroll_low_w )
|
||||||
{
|
{
|
||||||
m62_background_hscroll = ( m62_background_hscroll & 0xff00 ) | data;
|
irem_z80_state *state = (irem_z80_state *)space->machine->driver_data;
|
||||||
|
state->m62_background_hscroll = (state->m62_background_hscroll & 0xff00) | data;
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE8_HANDLER( m62_hscroll_high_w )
|
WRITE8_HANDLER( m62_hscroll_high_w )
|
||||||
{
|
{
|
||||||
m62_background_hscroll = ( m62_background_hscroll & 0xff ) | ( data << 8 );
|
irem_z80_state *state = (irem_z80_state *)space->machine->driver_data;
|
||||||
|
state->m62_background_hscroll = (state->m62_background_hscroll & 0xff) | (data << 8);
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE8_HANDLER( m62_vscroll_low_w )
|
WRITE8_HANDLER( m62_vscroll_low_w )
|
||||||
{
|
{
|
||||||
m62_background_vscroll = ( m62_background_vscroll & 0xff00 ) | data;
|
irem_z80_state *state = (irem_z80_state *)space->machine->driver_data;
|
||||||
|
state->m62_background_vscroll = (state->m62_background_vscroll & 0xff00) | data;
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE8_HANDLER( m62_vscroll_high_w )
|
WRITE8_HANDLER( m62_vscroll_high_w )
|
||||||
{
|
{
|
||||||
m62_background_vscroll = ( m62_background_vscroll & 0xff ) | ( data << 8 );
|
irem_z80_state *state = (irem_z80_state *)space->machine->driver_data;
|
||||||
|
state->m62_background_vscroll = (state->m62_background_vscroll & 0xff) | (data << 8);
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE8_HANDLER( m62_tileram_w )
|
WRITE8_HANDLER( m62_tileram_w )
|
||||||
{
|
{
|
||||||
m62_tileram[ offset ] = data;
|
irem_z80_state *state = (irem_z80_state *)space->machine->driver_data;
|
||||||
tilemap_mark_tile_dirty( m62_background, offset >> 1 );
|
state->m62_tileram[offset] = data;
|
||||||
|
tilemap_mark_tile_dirty(state->bg_tilemap, offset >> 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE8_HANDLER( m62_textram_w )
|
WRITE8_HANDLER( m62_textram_w )
|
||||||
{
|
{
|
||||||
m62_textram[ offset ] = data;
|
irem_z80_state *state = (irem_z80_state *)space->machine->driver_data;
|
||||||
tilemap_mark_tile_dirty( m62_foreground, offset >> 1 );
|
state->m62_textram[offset] = data;
|
||||||
|
tilemap_mark_tile_dirty(state->fg_tilemap, offset >> 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void draw_sprites( running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect, int colormask, int prioritymask, int priority )
|
static void draw_sprites( running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect, int colormask, int prioritymask, int priority )
|
||||||
{
|
{
|
||||||
|
irem_z80_state *state = (irem_z80_state *)machine->driver_data;
|
||||||
int offs;
|
int offs;
|
||||||
|
|
||||||
for (offs = 0; offs < spriteram_size; offs += 8)
|
for (offs = 0; offs < spriteram_size; offs += 8)
|
||||||
{
|
{
|
||||||
int i, incr, code, col, flipx, flipy, sx, sy;
|
int i, incr, code, col, flipx, flipy, sx, sy;
|
||||||
|
|
||||||
if( ( spriteram[offs] & prioritymask ) == priority )
|
if ((state->spriteram[offs] & prioritymask) == priority)
|
||||||
{
|
{
|
||||||
code = spriteram[offs+4] + ((spriteram[offs+5] & 0x07) << 8);
|
code = state->spriteram[offs + 4] + ((state->spriteram[offs + 5] & 0x07) << 8);
|
||||||
col = spriteram[offs+0] & colormask;
|
col = state->spriteram[offs + 0] & colormask;
|
||||||
sx = 256 * (spriteram[offs+7] & 1) + spriteram[offs+6],
|
sx = 256 * (state->spriteram[offs + 7] & 1) + state->spriteram[offs + 6],
|
||||||
sy = 256+128-15 - (256 * (spriteram[offs+3] & 1) + spriteram[offs+2]),
|
sy = 256 + 128 - 15 - (256 * (state->spriteram[offs + 3] & 1) + state->spriteram[offs + 2]),
|
||||||
flipx = spriteram[offs+5] & 0x40;
|
flipx = state->spriteram[offs + 5] & 0x40;
|
||||||
flipy = spriteram[offs+5] & 0x80;
|
flipy = state->spriteram[offs + 5] & 0x80;
|
||||||
|
|
||||||
i = sprite_height_prom[(code >> 5) & 0x1f];
|
i = state->sprite_height_prom[(code >> 5) & 0x1f];
|
||||||
if (i == 1) /* double height */
|
if (i == 1) /* double height */
|
||||||
{
|
{
|
||||||
code &= ~1;
|
code &= ~1;
|
||||||
@ -372,7 +364,7 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const recta
|
|||||||
sy -= 3*16;
|
sy -= 3*16;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (flipscreen)
|
if (state->flipscreen)
|
||||||
{
|
{
|
||||||
sx = 496 - sx;
|
sx = 496 - sx;
|
||||||
sy = 242 - i*16 - sy; /* sprites are slightly misplaced by the hardware */
|
sy = 242 - i*16 - sy; /* sprites are slightly misplaced by the hardware */
|
||||||
@ -402,50 +394,45 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const recta
|
|||||||
|
|
||||||
static void m62_start( running_machine *machine, tile_get_info_func tile_get_info, int rows, int cols, int x1, int y1, int x2, int y2 )
|
static void m62_start( running_machine *machine, tile_get_info_func tile_get_info, int rows, int cols, int x1, int y1, int x2, int y2 )
|
||||||
{
|
{
|
||||||
m62_background = tilemap_create( machine, tile_get_info, tilemap_scan_rows, x1, y1, x2, y2 );
|
irem_z80_state *state = (irem_z80_state *)machine->driver_data;
|
||||||
|
state->bg_tilemap = tilemap_create(machine, tile_get_info, tilemap_scan_rows, x1, y1, x2, y2);
|
||||||
m62_background_hscroll = 0;
|
|
||||||
m62_background_vscroll = 0;
|
|
||||||
|
|
||||||
register_savestate(machine);
|
register_savestate(machine);
|
||||||
|
|
||||||
if (rows != 0)
|
if (rows != 0)
|
||||||
{
|
tilemap_set_scroll_rows(state->bg_tilemap, rows);
|
||||||
tilemap_set_scroll_rows( m62_background, rows );
|
|
||||||
}
|
|
||||||
if (cols != 0)
|
if (cols != 0)
|
||||||
{
|
tilemap_set_scroll_cols(state->bg_tilemap, cols);
|
||||||
tilemap_set_scroll_cols( m62_background, cols );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void m62_textlayer( running_machine *machine, tile_get_info_func tile_get_info, int rows, int cols, int x1, int y1, int x2, int y2 )
|
static void m62_textlayer( running_machine *machine, tile_get_info_func tile_get_info, int rows, int cols, int x1, int y1, int x2, int y2 )
|
||||||
{
|
{
|
||||||
m62_foreground = tilemap_create( machine, tile_get_info, tilemap_scan_rows, x1, y1, x2, y2 );
|
irem_z80_state *state = (irem_z80_state *)machine->driver_data;
|
||||||
|
state->fg_tilemap = tilemap_create(machine, tile_get_info, tilemap_scan_rows, x1, y1, x2, y2);
|
||||||
|
|
||||||
if (rows != 0)
|
if (rows != 0)
|
||||||
{
|
tilemap_set_scroll_rows(state->fg_tilemap, rows);
|
||||||
tilemap_set_scroll_rows( m62_foreground, rows );
|
|
||||||
}
|
|
||||||
if (cols != 0)
|
if (cols != 0)
|
||||||
{
|
tilemap_set_scroll_cols(state->fg_tilemap, cols);
|
||||||
tilemap_set_scroll_cols( m62_foreground, cols );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE8_HANDLER( kungfum_tileram_w )
|
WRITE8_HANDLER( kungfum_tileram_w )
|
||||||
{
|
{
|
||||||
m62_tileram[ offset ] = data;
|
irem_z80_state *state = (irem_z80_state *)space->machine->driver_data;
|
||||||
tilemap_mark_tile_dirty( m62_background, offset & 0x7ff );
|
state->m62_tileram[offset] = data;
|
||||||
|
tilemap_mark_tile_dirty(state->bg_tilemap, offset & 0x7ff);
|
||||||
}
|
}
|
||||||
|
|
||||||
static TILE_GET_INFO( get_kungfum_bg_tile_info )
|
static TILE_GET_INFO( get_kungfum_bg_tile_info )
|
||||||
{
|
{
|
||||||
|
irem_z80_state *state = (irem_z80_state *)machine->driver_data;
|
||||||
int code;
|
int code;
|
||||||
int color;
|
int color;
|
||||||
int flags;
|
int flags;
|
||||||
code = m62_tileram[ tile_index ];
|
code = state->m62_tileram[tile_index];
|
||||||
color = m62_tileram[ tile_index + 0x800 ];
|
color = state->m62_tileram[tile_index + 0x800];
|
||||||
flags = 0;
|
flags = 0;
|
||||||
if ((color & 0x20))
|
if ((color & 0x20))
|
||||||
{
|
{
|
||||||
@ -455,14 +442,10 @@ static TILE_GET_INFO( get_kungfum_bg_tile_info )
|
|||||||
|
|
||||||
/* is the following right? */
|
/* is the following right? */
|
||||||
if ((tile_index / 64) < 6 || ((color & 0x1f) >> 1) > 0x0c)
|
if ((tile_index / 64) < 6 || ((color & 0x1f) >> 1) > 0x0c)
|
||||||
{
|
|
||||||
tileinfo->category = 1;
|
tileinfo->category = 1;
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
tileinfo->category = 0;
|
tileinfo->category = 0;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
VIDEO_START( kungfum )
|
VIDEO_START( kungfum )
|
||||||
{
|
{
|
||||||
@ -471,30 +454,32 @@ VIDEO_START( kungfum )
|
|||||||
|
|
||||||
VIDEO_UPDATE( kungfum )
|
VIDEO_UPDATE( kungfum )
|
||||||
{
|
{
|
||||||
|
irem_z80_state *state = (irem_z80_state *)screen->machine->driver_data;
|
||||||
int i;
|
int i;
|
||||||
for (i = 0; i < 6; i++)
|
for (i = 0; i < 6; i++)
|
||||||
{
|
{
|
||||||
tilemap_set_scrollx( m62_background, i, 0 );
|
tilemap_set_scrollx(state->bg_tilemap, i, 0);
|
||||||
}
|
}
|
||||||
for (i = 6; i < 32; i++)
|
for (i = 6; i < 32; i++)
|
||||||
{
|
{
|
||||||
tilemap_set_scrollx( m62_background, i, m62_background_hscroll );
|
tilemap_set_scrollx(state->bg_tilemap, i, state->m62_background_hscroll);
|
||||||
}
|
}
|
||||||
tilemap_draw( bitmap, cliprect, m62_background, 0, 0 );
|
tilemap_draw(bitmap, cliprect, state->bg_tilemap, 0, 0);
|
||||||
draw_sprites(screen->machine, bitmap, cliprect, 0x1f, 0x00, 0x00);
|
draw_sprites(screen->machine, bitmap, cliprect, 0x1f, 0x00, 0x00);
|
||||||
tilemap_draw( bitmap, cliprect, m62_background, 1, 0 );
|
tilemap_draw(bitmap, cliprect, state->bg_tilemap, 1, 0);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static TILE_GET_INFO( get_ldrun_bg_tile_info )
|
static TILE_GET_INFO( get_ldrun_bg_tile_info )
|
||||||
{
|
{
|
||||||
|
irem_z80_state *state = (irem_z80_state *)machine->driver_data;
|
||||||
|
|
||||||
int code;
|
int code;
|
||||||
int color;
|
int color;
|
||||||
int flags;
|
int flags;
|
||||||
code = m62_tileram[ tile_index << 1 ];
|
code = state->m62_tileram[tile_index << 1];
|
||||||
color = m62_tileram[ ( tile_index << 1 ) | 1 ];
|
color = state->m62_tileram[(tile_index << 1) | 1];
|
||||||
flags = 0;
|
flags = 0;
|
||||||
if ((color & 0x20))
|
if ((color & 0x20))
|
||||||
{
|
{
|
||||||
@ -502,41 +487,41 @@ static TILE_GET_INFO( get_ldrun_bg_tile_info )
|
|||||||
}
|
}
|
||||||
SET_TILE_INFO(0, code | ((color & 0xc0) << 2), color & 0x1f, flags);
|
SET_TILE_INFO(0, code | ((color & 0xc0) << 2), color & 0x1f, flags);
|
||||||
if (((color & 0x1f) >> 1) >= 0x0c)
|
if (((color & 0x1f) >> 1) >= 0x0c)
|
||||||
{
|
|
||||||
tileinfo->group = 1;
|
tileinfo->group = 1;
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
tileinfo->group = 0;
|
tileinfo->group = 0;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
VIDEO_START( ldrun )
|
VIDEO_START( ldrun )
|
||||||
{
|
{
|
||||||
|
irem_z80_state *state = (irem_z80_state *)machine->driver_data;
|
||||||
|
|
||||||
m62_start(machine, get_ldrun_bg_tile_info, 1, 1, 8, 8, 64, 32);
|
m62_start(machine, get_ldrun_bg_tile_info, 1, 1, 8, 8, 64, 32);
|
||||||
tilemap_set_transmask(m62_background,0,0xffff,0x0000); /* split type 0 is totally transparent in front half */
|
tilemap_set_transmask(state->bg_tilemap, 0, 0xffff, 0x0000); /* split type 0 is totally transparent in front half */
|
||||||
tilemap_set_transmask(m62_background,1,0x0001,0xfffe); /* split type 1 has pen 0 transparent in front half */
|
tilemap_set_transmask(state->bg_tilemap, 1, 0x0001, 0xfffe); /* split type 1 has pen 0 transparent in front half */
|
||||||
}
|
}
|
||||||
|
|
||||||
VIDEO_UPDATE( ldrun )
|
VIDEO_UPDATE( ldrun )
|
||||||
{
|
{
|
||||||
tilemap_set_scrollx( m62_background, 0, m62_background_hscroll );
|
irem_z80_state *state = (irem_z80_state *)screen->machine->driver_data;
|
||||||
tilemap_set_scrolly( m62_background, 0, m62_background_vscroll );
|
tilemap_set_scrollx(state->bg_tilemap, 0, state->m62_background_hscroll);
|
||||||
|
tilemap_set_scrolly(state->bg_tilemap, 0, state->m62_background_vscroll);
|
||||||
|
|
||||||
tilemap_draw( bitmap, cliprect, m62_background, TILEMAP_DRAW_LAYER1, 0 );
|
tilemap_draw(bitmap, cliprect, state->bg_tilemap, TILEMAP_DRAW_LAYER1, 0);
|
||||||
draw_sprites(screen->machine, bitmap, cliprect, 0x0f, 0x10, 0x00);
|
draw_sprites(screen->machine, bitmap, cliprect, 0x0f, 0x10, 0x00);
|
||||||
tilemap_draw( bitmap, cliprect, m62_background, TILEMAP_DRAW_LAYER0, 0 );
|
tilemap_draw(bitmap, cliprect, state->bg_tilemap, TILEMAP_DRAW_LAYER0, 0);
|
||||||
draw_sprites(screen->machine, bitmap, cliprect, 0x0f, 0x10, 0x10);
|
draw_sprites(screen->machine, bitmap, cliprect, 0x0f, 0x10, 0x10);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static TILE_GET_INFO( get_ldrun2_bg_tile_info )
|
static TILE_GET_INFO( get_ldrun2_bg_tile_info )
|
||||||
{
|
{
|
||||||
|
irem_z80_state *state = (irem_z80_state *)machine->driver_data;
|
||||||
int code;
|
int code;
|
||||||
int color;
|
int color;
|
||||||
int flags;
|
int flags;
|
||||||
code = m62_tileram[ tile_index << 1 ];
|
code = state->m62_tileram[tile_index << 1];
|
||||||
color = m62_tileram[ ( tile_index << 1 ) | 1 ];
|
color = state->m62_tileram[(tile_index << 1) | 1];
|
||||||
flags = 0;
|
flags = 0;
|
||||||
if ((color & 0x20))
|
if ((color & 0x20))
|
||||||
{
|
{
|
||||||
@ -544,34 +529,32 @@ static TILE_GET_INFO( get_ldrun2_bg_tile_info )
|
|||||||
}
|
}
|
||||||
SET_TILE_INFO(0, code | ((color & 0xc0) << 2), color & 0x1f, flags);
|
SET_TILE_INFO(0, code | ((color & 0xc0) << 2), color & 0x1f, flags);
|
||||||
if (((color & 0x1f) >> 1) >= 0x04)
|
if (((color & 0x1f) >> 1) >= 0x04)
|
||||||
{
|
|
||||||
tileinfo->group = 1;
|
tileinfo->group = 1;
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
tileinfo->group = 0;
|
tileinfo->group = 0;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
VIDEO_START( ldrun2 )
|
VIDEO_START( ldrun2 )
|
||||||
{
|
{
|
||||||
|
irem_z80_state *state = (irem_z80_state *)machine->driver_data;
|
||||||
m62_start(machine, get_ldrun2_bg_tile_info, 1, 1, 8, 8, 64, 32);
|
m62_start(machine, get_ldrun2_bg_tile_info, 1, 1, 8, 8, 64, 32);
|
||||||
tilemap_set_transmask(m62_background,0,0xffff,0x0000); /* split type 0 is totally transparent in front half */
|
tilemap_set_transmask(state->bg_tilemap, 0, 0xffff, 0x0000); /* split type 0 is totally transparent in front half */
|
||||||
tilemap_set_transmask(m62_background,1,0x0001,0xfffe); /* split type 1 has pen 0 transparent in front half */
|
tilemap_set_transmask(state->bg_tilemap, 1, 0x0001, 0xfffe); /* split type 1 has pen 0 transparent in front half */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
WRITE8_HANDLER( ldrun3_topbottom_mask_w )
|
WRITE8_HANDLER( ldrun3_topbottom_mask_w )
|
||||||
{
|
{
|
||||||
ldrun3_topbottom_mask = data & 1;
|
irem_z80_state *state = (irem_z80_state *)space->machine->driver_data;
|
||||||
|
state->ldrun3_topbottom_mask = data & 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
VIDEO_UPDATE( ldrun3 )
|
VIDEO_UPDATE( ldrun3 )
|
||||||
{
|
{
|
||||||
|
irem_z80_state *state = (irem_z80_state *)screen->machine->driver_data;
|
||||||
VIDEO_UPDATE_CALL(ldrun);
|
VIDEO_UPDATE_CALL(ldrun);
|
||||||
|
|
||||||
if (ldrun3_topbottom_mask)
|
if (state->ldrun3_topbottom_mask)
|
||||||
{
|
{
|
||||||
rectangle my_cliprect = *cliprect;
|
rectangle my_cliprect = *cliprect;
|
||||||
|
|
||||||
@ -590,11 +573,12 @@ VIDEO_UPDATE( ldrun3 )
|
|||||||
|
|
||||||
static TILE_GET_INFO( get_battroad_bg_tile_info )
|
static TILE_GET_INFO( get_battroad_bg_tile_info )
|
||||||
{
|
{
|
||||||
|
irem_z80_state *state = (irem_z80_state *)machine->driver_data;
|
||||||
int code;
|
int code;
|
||||||
int color;
|
int color;
|
||||||
int flags;
|
int flags;
|
||||||
code = m62_tileram[ tile_index << 1 ];
|
code = state->m62_tileram[tile_index << 1];
|
||||||
color = m62_tileram[ ( tile_index << 1 ) | 1 ];
|
color = state->m62_tileram[(tile_index << 1) | 1];
|
||||||
flags = 0;
|
flags = 0;
|
||||||
if ((color & 0x20))
|
if ((color & 0x20))
|
||||||
{
|
{
|
||||||
@ -602,45 +586,44 @@ static TILE_GET_INFO( get_battroad_bg_tile_info )
|
|||||||
}
|
}
|
||||||
SET_TILE_INFO(0, code | ((color & 0x40) << 3) | ((color & 0x10) << 4), color & 0x0f, flags);
|
SET_TILE_INFO(0, code | ((color & 0x40) << 3) | ((color & 0x10) << 4), color & 0x0f, flags);
|
||||||
if (((color & 0x1f) >> 1) >= 0x04)
|
if (((color & 0x1f) >> 1) >= 0x04)
|
||||||
{
|
|
||||||
tileinfo->group = 1;
|
tileinfo->group = 1;
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
tileinfo->group = 0;
|
tileinfo->group = 0;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
static TILE_GET_INFO( get_battroad_fg_tile_info )
|
static TILE_GET_INFO( get_battroad_fg_tile_info )
|
||||||
{
|
{
|
||||||
|
irem_z80_state *state = (irem_z80_state *)machine->driver_data;
|
||||||
int code;
|
int code;
|
||||||
int color;
|
int color;
|
||||||
code = m62_textram[ tile_index << 1 ];
|
code = state->m62_textram[tile_index << 1];
|
||||||
color = m62_textram[ ( tile_index << 1 ) | 1 ];
|
color = state->m62_textram[(tile_index << 1) | 1];
|
||||||
SET_TILE_INFO(2, code | ((color & 0x40) << 3) | ((color & 0x10) << 4), color & 0x0f, 0);
|
SET_TILE_INFO(2, code | ((color & 0x40) << 3) | ((color & 0x10) << 4), color & 0x0f, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
VIDEO_START( battroad )
|
VIDEO_START( battroad )
|
||||||
{
|
{
|
||||||
|
irem_z80_state *state = (irem_z80_state *)machine->driver_data;
|
||||||
m62_start(machine, get_battroad_bg_tile_info, 1, 1, 8, 8, 64, 32);
|
m62_start(machine, get_battroad_bg_tile_info, 1, 1, 8, 8, 64, 32);
|
||||||
m62_textlayer(machine, get_battroad_fg_tile_info, 1, 1, 8, 8, 32, 32);
|
m62_textlayer(machine, get_battroad_fg_tile_info, 1, 1, 8, 8, 32, 32);
|
||||||
tilemap_set_transmask(m62_background,0,0xffff,0x0000); /* split type 0 is totally transparent in front half */
|
tilemap_set_transmask(state->bg_tilemap, 0, 0xffff, 0x0000); /* split type 0 is totally transparent in front half */
|
||||||
tilemap_set_transmask(m62_background,1,0x0001,0xfffe); /* split type 1 has pen 0 transparent in front half */
|
tilemap_set_transmask(state->bg_tilemap, 1, 0x0001, 0xfffe); /* split type 1 has pen 0 transparent in front half */
|
||||||
}
|
}
|
||||||
|
|
||||||
VIDEO_UPDATE( battroad )
|
VIDEO_UPDATE( battroad )
|
||||||
{
|
{
|
||||||
tilemap_set_scrollx( m62_background, 0, m62_background_hscroll );
|
irem_z80_state *state = (irem_z80_state *)screen->machine->driver_data;
|
||||||
tilemap_set_scrolly( m62_background, 0, m62_background_vscroll );
|
tilemap_set_scrollx(state->bg_tilemap, 0, state->m62_background_hscroll);
|
||||||
tilemap_set_scrollx( m62_foreground, 0, 128 );
|
tilemap_set_scrolly(state->bg_tilemap, 0, state->m62_background_vscroll);
|
||||||
tilemap_set_scrolly( m62_foreground, 0, 0 );
|
tilemap_set_scrollx(state->fg_tilemap, 0, 128);
|
||||||
tilemap_set_transparent_pen( m62_foreground, 0 );
|
tilemap_set_scrolly(state->fg_tilemap, 0, 0);
|
||||||
|
tilemap_set_transparent_pen(state->fg_tilemap, 0);
|
||||||
|
|
||||||
tilemap_draw( bitmap, cliprect, m62_background, TILEMAP_DRAW_LAYER1, 0 );
|
tilemap_draw(bitmap, cliprect, state->bg_tilemap, TILEMAP_DRAW_LAYER1, 0);
|
||||||
draw_sprites(screen->machine, bitmap, cliprect, 0x0f, 0x10, 0x00);
|
draw_sprites(screen->machine, bitmap, cliprect, 0x0f, 0x10, 0x00);
|
||||||
tilemap_draw( bitmap, cliprect, m62_background, TILEMAP_DRAW_LAYER0, 0 );
|
tilemap_draw(bitmap, cliprect, state->bg_tilemap, TILEMAP_DRAW_LAYER0, 0);
|
||||||
draw_sprites(screen->machine, bitmap, cliprect, 0x0f, 0x10, 0x10);
|
draw_sprites(screen->machine, bitmap, cliprect, 0x0f, 0x10, 0x10);
|
||||||
tilemap_draw( bitmap, cliprect, m62_foreground, 0, 0 );
|
tilemap_draw(bitmap, cliprect, state->fg_tilemap, 0, 0);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -649,10 +632,11 @@ VIDEO_UPDATE( battroad )
|
|||||||
/* no char x flip, and more sprites */
|
/* no char x flip, and more sprites */
|
||||||
static TILE_GET_INFO( get_ldrun4_bg_tile_info )
|
static TILE_GET_INFO( get_ldrun4_bg_tile_info )
|
||||||
{
|
{
|
||||||
|
irem_z80_state *state = (irem_z80_state *)machine->driver_data;
|
||||||
int code;
|
int code;
|
||||||
int color;
|
int color;
|
||||||
code = m62_tileram[ tile_index << 1 ];
|
code = state->m62_tileram[tile_index << 1];
|
||||||
color = m62_tileram[ ( tile_index << 1 ) | 1 ];
|
color = state->m62_tileram[(tile_index << 1) | 1];
|
||||||
SET_TILE_INFO(0, code | ((color & 0xc0) << 2) | ((color & 0x20) << 5), color & 0x1f, 0);
|
SET_TILE_INFO(0, code | ((color & 0xc0) << 2) | ((color & 0x20) << 5), color & 0x1f, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -663,9 +647,10 @@ VIDEO_START( ldrun4 )
|
|||||||
|
|
||||||
VIDEO_UPDATE( ldrun4 )
|
VIDEO_UPDATE( ldrun4 )
|
||||||
{
|
{
|
||||||
tilemap_set_scrollx( m62_background, 0, m62_background_hscroll-2 );
|
irem_z80_state *state = (irem_z80_state *)screen->machine->driver_data;
|
||||||
|
tilemap_set_scrollx(state->bg_tilemap, 0, state->m62_background_hscroll - 2);
|
||||||
|
|
||||||
tilemap_draw( bitmap, cliprect, m62_background, 0, 0 );
|
tilemap_draw(bitmap, cliprect, state->bg_tilemap, 0, 0);
|
||||||
draw_sprites(screen->machine, bitmap, cliprect, 0x1f, 0x00, 0x00);
|
draw_sprites(screen->machine, bitmap, cliprect, 0x1f, 0x00, 0x00);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -673,11 +658,12 @@ VIDEO_UPDATE( ldrun4 )
|
|||||||
|
|
||||||
static TILE_GET_INFO( get_lotlot_bg_tile_info )
|
static TILE_GET_INFO( get_lotlot_bg_tile_info )
|
||||||
{
|
{
|
||||||
|
irem_z80_state *state = (irem_z80_state *)machine->driver_data;
|
||||||
int code;
|
int code;
|
||||||
int color;
|
int color;
|
||||||
int flags;
|
int flags;
|
||||||
code = m62_tileram[ tile_index << 1 ];
|
code = state->m62_tileram[tile_index << 1];
|
||||||
color = m62_tileram[ ( tile_index << 1 ) | 1 ];
|
color = state->m62_tileram[(tile_index << 1) | 1];
|
||||||
flags = 0;
|
flags = 0;
|
||||||
if ((color & 0x20))
|
if ((color & 0x20))
|
||||||
{
|
{
|
||||||
@ -688,10 +674,11 @@ static TILE_GET_INFO( get_lotlot_bg_tile_info )
|
|||||||
|
|
||||||
static TILE_GET_INFO( get_lotlot_fg_tile_info )
|
static TILE_GET_INFO( get_lotlot_fg_tile_info )
|
||||||
{
|
{
|
||||||
|
irem_z80_state *state = (irem_z80_state *)machine->driver_data;
|
||||||
int code;
|
int code;
|
||||||
int color;
|
int color;
|
||||||
code = m62_textram[ tile_index << 1 ];
|
code = state->m62_textram[tile_index << 1];
|
||||||
color = m62_textram[ ( tile_index << 1 ) | 1 ];
|
color = state->m62_textram[(tile_index << 1) | 1];
|
||||||
SET_TILE_INFO(2, code | ((color & 0xc0) << 2), color & 0x1f, 0);
|
SET_TILE_INFO(2, code | ((color & 0xc0) << 2), color & 0x1f, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -703,14 +690,15 @@ VIDEO_START( lotlot )
|
|||||||
|
|
||||||
VIDEO_UPDATE( lotlot )
|
VIDEO_UPDATE( lotlot )
|
||||||
{
|
{
|
||||||
tilemap_set_scrollx( m62_background, 0, m62_background_hscroll - 64 );
|
irem_z80_state *state = (irem_z80_state *)screen->machine->driver_data;
|
||||||
tilemap_set_scrolly( m62_background, 0, m62_background_vscroll + 32 );
|
tilemap_set_scrollx(state->bg_tilemap, 0, state->m62_background_hscroll - 64);
|
||||||
tilemap_set_scrollx( m62_foreground, 0, -64 );
|
tilemap_set_scrolly(state->bg_tilemap, 0, state->m62_background_vscroll + 32);
|
||||||
tilemap_set_scrolly( m62_foreground, 0, 32 );
|
tilemap_set_scrollx(state->fg_tilemap, 0, -64);
|
||||||
tilemap_set_transparent_pen( m62_foreground, 0 );
|
tilemap_set_scrolly(state->fg_tilemap, 0, 32);
|
||||||
|
tilemap_set_transparent_pen(state->fg_tilemap, 0);
|
||||||
|
|
||||||
tilemap_draw( bitmap, cliprect, m62_background, 0, 0 );
|
tilemap_draw(bitmap, cliprect, state->bg_tilemap, 0, 0);
|
||||||
tilemap_draw( bitmap, cliprect, m62_foreground, 0, 0 );
|
tilemap_draw(bitmap, cliprect, state->fg_tilemap, 0, 0);
|
||||||
draw_sprites(screen->machine, bitmap, cliprect, 0x1f, 0x00, 0x00);
|
draw_sprites(screen->machine, bitmap, cliprect, 0x1f, 0x00, 0x00);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -718,51 +706,54 @@ VIDEO_UPDATE( lotlot )
|
|||||||
|
|
||||||
WRITE8_HANDLER( kidniki_text_vscroll_low_w )
|
WRITE8_HANDLER( kidniki_text_vscroll_low_w )
|
||||||
{
|
{
|
||||||
kidniki_text_vscroll = (kidniki_text_vscroll & 0xff00) | data;
|
irem_z80_state *state = (irem_z80_state *)space->machine->driver_data;
|
||||||
|
state->kidniki_text_vscroll = (state->kidniki_text_vscroll & 0xff00) | data;
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE8_HANDLER( kidniki_text_vscroll_high_w )
|
WRITE8_HANDLER( kidniki_text_vscroll_high_w )
|
||||||
{
|
{
|
||||||
kidniki_text_vscroll = (kidniki_text_vscroll & 0xff) | (data << 8);
|
irem_z80_state *state = (irem_z80_state *)space->machine->driver_data;
|
||||||
|
state->kidniki_text_vscroll = (state->kidniki_text_vscroll & 0xff) | (data << 8);
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE8_HANDLER( kidniki_background_bank_w )
|
WRITE8_HANDLER( kidniki_background_bank_w )
|
||||||
{
|
{
|
||||||
if (kidniki_background_bank != (data & 1))
|
irem_z80_state *state = (irem_z80_state *)space->machine->driver_data;
|
||||||
|
if (state->kidniki_background_bank != (data & 1))
|
||||||
{
|
{
|
||||||
kidniki_background_bank = data & 1;
|
state->kidniki_background_bank = data & 1;
|
||||||
tilemap_mark_all_tiles_dirty(m62_background);
|
tilemap_mark_all_tiles_dirty(state->bg_tilemap);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static TILE_GET_INFO( get_kidniki_bg_tile_info )
|
static TILE_GET_INFO( get_kidniki_bg_tile_info )
|
||||||
{
|
{
|
||||||
|
irem_z80_state *state = (irem_z80_state *)machine->driver_data;
|
||||||
int code;
|
int code;
|
||||||
int color;
|
int color;
|
||||||
code = m62_tileram[ tile_index << 1 ];
|
code = state->m62_tileram[tile_index << 1];
|
||||||
color = m62_tileram[ ( tile_index << 1 ) | 1 ];
|
color = state->m62_tileram[(tile_index << 1) | 1];
|
||||||
SET_TILE_INFO( 0, code | ( ( color & 0xe0 ) << 3 ) | ( kidniki_background_bank << 11 ), color & 0x1f, 0);
|
SET_TILE_INFO(0, code | ((color & 0xe0) << 3) | (state->kidniki_background_bank << 11), color & 0x1f, 0);
|
||||||
tileinfo->group = ((color & 0xe0) == 0xe0) ? 1 : 0;
|
tileinfo->group = ((color & 0xe0) == 0xe0) ? 1 : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static TILE_GET_INFO( get_kidniki_fg_tile_info )
|
static TILE_GET_INFO( get_kidniki_fg_tile_info )
|
||||||
{
|
{
|
||||||
|
irem_z80_state *state = (irem_z80_state *)machine->driver_data;
|
||||||
int code;
|
int code;
|
||||||
int color;
|
int color;
|
||||||
code = m62_textram[ tile_index << 1 ];
|
code = state->m62_textram[tile_index << 1];
|
||||||
color = m62_textram[ ( tile_index << 1 ) | 1 ];
|
color = state->m62_textram[(tile_index << 1) | 1];
|
||||||
SET_TILE_INFO(2, code | ( ( color & 0xc0 ) << 2 ), color & 0x1f, 0);
|
SET_TILE_INFO(2, code | ( ( color & 0xc0 ) << 2 ), color & 0x1f, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
VIDEO_START( kidniki )
|
VIDEO_START( kidniki )
|
||||||
{
|
{
|
||||||
m62_background = tilemap_create( machine, get_kidniki_bg_tile_info, tilemap_scan_rows, 8, 8, 64, 32 );
|
irem_z80_state *state = (irem_z80_state *)machine->driver_data;
|
||||||
|
|
||||||
m62_background_hscroll = 0;
|
state->bg_tilemap = tilemap_create(machine, get_kidniki_bg_tile_info, tilemap_scan_rows, 8, 8, 64, 32);
|
||||||
m62_background_vscroll = 0;
|
tilemap_set_transmask(state->bg_tilemap, 0, 0xffff, 0x0000); /* split type 0 is totally transparent in front half */
|
||||||
|
tilemap_set_transmask(state->bg_tilemap, 1, 0x0001, 0xfffe); /* split type 1 has pen 0 transparent in front half */
|
||||||
tilemap_set_transmask(m62_background,0,0xffff,0x0000); /* split type 0 is totally transparent in front half */
|
|
||||||
tilemap_set_transmask(m62_background,1,0x0001,0xfffe); /* split type 1 has pen 0 transparent in front half */
|
|
||||||
|
|
||||||
register_savestate(machine);
|
register_savestate(machine);
|
||||||
|
|
||||||
@ -771,46 +762,50 @@ VIDEO_START( kidniki )
|
|||||||
|
|
||||||
VIDEO_UPDATE( kidniki )
|
VIDEO_UPDATE( kidniki )
|
||||||
{
|
{
|
||||||
tilemap_set_scrollx( m62_background, 0, m62_background_hscroll );
|
irem_z80_state *state = (irem_z80_state *)screen->machine->driver_data;
|
||||||
tilemap_set_scrollx( m62_foreground, 0, -64 );
|
tilemap_set_scrollx(state->bg_tilemap, 0, state->m62_background_hscroll);
|
||||||
tilemap_set_scrolly( m62_foreground, 0, kidniki_text_vscroll + 128 );
|
tilemap_set_scrollx(state->fg_tilemap, 0, -64);
|
||||||
tilemap_set_transparent_pen( m62_foreground, 0 );
|
tilemap_set_scrolly(state->fg_tilemap, 0, state->kidniki_text_vscroll + 128);
|
||||||
|
tilemap_set_transparent_pen(state->fg_tilemap, 0);
|
||||||
|
|
||||||
tilemap_draw( bitmap, cliprect, m62_background, TILEMAP_DRAW_LAYER1, 0 );
|
tilemap_draw(bitmap, cliprect, state->bg_tilemap, TILEMAP_DRAW_LAYER1, 0);
|
||||||
draw_sprites(screen->machine, bitmap, cliprect, 0x1f, 0x00, 0x00);
|
draw_sprites(screen->machine, bitmap, cliprect, 0x1f, 0x00, 0x00);
|
||||||
tilemap_draw( bitmap, cliprect, m62_background, TILEMAP_DRAW_LAYER0, 0 );
|
tilemap_draw(bitmap, cliprect, state->bg_tilemap, TILEMAP_DRAW_LAYER0, 0);
|
||||||
tilemap_draw( bitmap, cliprect, m62_foreground, 0, 0 );
|
tilemap_draw(bitmap, cliprect, state->fg_tilemap, 0, 0);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
WRITE8_HANDLER( spelunkr_palbank_w )
|
WRITE8_HANDLER( spelunkr_palbank_w )
|
||||||
{
|
{
|
||||||
if (spelunkr_palbank != (data & 0x01))
|
irem_z80_state *state = (irem_z80_state *)space->machine->driver_data;
|
||||||
|
if (state->spelunkr_palbank != (data & 0x01))
|
||||||
{
|
{
|
||||||
spelunkr_palbank = data & 0x01;
|
state->spelunkr_palbank = data & 0x01;
|
||||||
tilemap_mark_all_tiles_dirty(m62_background);
|
tilemap_mark_all_tiles_dirty(state->bg_tilemap);
|
||||||
tilemap_mark_all_tiles_dirty(m62_foreground);
|
tilemap_mark_all_tiles_dirty(state->fg_tilemap);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static TILE_GET_INFO( get_spelunkr_bg_tile_info )
|
static TILE_GET_INFO( get_spelunkr_bg_tile_info )
|
||||||
{
|
{
|
||||||
|
irem_z80_state *state = (irem_z80_state *)machine->driver_data;
|
||||||
int code;
|
int code;
|
||||||
int color;
|
int color;
|
||||||
code = m62_tileram[ tile_index << 1 ];
|
code = state->m62_tileram[tile_index << 1];
|
||||||
color = m62_tileram[ ( tile_index << 1 ) | 1 ];
|
color = state->m62_tileram[(tile_index << 1) | 1];
|
||||||
SET_TILE_INFO( 0, code | ( ( color & 0x10 ) << 4 ) | ( ( color & 0x20 ) << 6 ) | ( ( color & 0xc0 ) << 3 ), ( color & 0x0f ) | ( spelunkr_palbank << 4 ), 0 );
|
SET_TILE_INFO(0, code | ((color & 0x10) << 4) | ((color & 0x20) << 6) | ((color & 0xc0) << 3), (color & 0x0f) | (state->spelunkr_palbank << 4), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static TILE_GET_INFO( get_spelunkr_fg_tile_info )
|
static TILE_GET_INFO( get_spelunkr_fg_tile_info )
|
||||||
{
|
{
|
||||||
|
irem_z80_state *state = (irem_z80_state *)machine->driver_data;
|
||||||
int code;
|
int code;
|
||||||
int color;
|
int color;
|
||||||
code = m62_textram[ tile_index << 1 ];
|
code = state->m62_textram[tile_index << 1];
|
||||||
color = m62_textram[ ( tile_index << 1 ) | 1 ];
|
color = state->m62_textram[(tile_index << 1) | 1];
|
||||||
if (color & 0xe0) popmessage("fg tilemap %x %x", tile_index, color & 0xe0);
|
if (color & 0xe0) popmessage("fg tilemap %x %x", tile_index, color & 0xe0);
|
||||||
SET_TILE_INFO( 2, code | ( ( color & 0x10 ) << 4 ), ( color & 0x0f ) | ( spelunkr_palbank << 4 ), 0 );
|
SET_TILE_INFO(2, code | ((color & 0x10) << 4), (color & 0x0f) | (state->spelunkr_palbank << 4), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
VIDEO_START( spelunkr )
|
VIDEO_START( spelunkr )
|
||||||
@ -821,38 +816,41 @@ VIDEO_START( spelunkr )
|
|||||||
|
|
||||||
VIDEO_UPDATE( spelunkr )
|
VIDEO_UPDATE( spelunkr )
|
||||||
{
|
{
|
||||||
tilemap_set_scrollx( m62_background, 0, m62_background_hscroll );
|
irem_z80_state *state = (irem_z80_state *)screen->machine->driver_data;
|
||||||
tilemap_set_scrolly( m62_background, 0, m62_background_vscroll + 128 );
|
tilemap_set_scrollx(state->bg_tilemap, 0, state->m62_background_hscroll);
|
||||||
tilemap_set_scrollx( m62_foreground, 0, -64 );
|
tilemap_set_scrolly(state->bg_tilemap, 0, state->m62_background_vscroll + 128);
|
||||||
tilemap_set_scrolly( m62_foreground, 0, 0 );
|
tilemap_set_scrollx(state->fg_tilemap, 0, -64);
|
||||||
tilemap_set_transparent_pen( m62_foreground, 0 );
|
tilemap_set_scrolly(state->fg_tilemap, 0, 0);
|
||||||
|
tilemap_set_transparent_pen(state->fg_tilemap, 0);
|
||||||
|
|
||||||
tilemap_draw( bitmap, cliprect, m62_background, 0, 0 );
|
tilemap_draw(bitmap, cliprect, state->bg_tilemap, 0, 0);
|
||||||
draw_sprites(screen->machine, bitmap, cliprect, 0x1f, 0x00, 0x00);
|
draw_sprites(screen->machine, bitmap, cliprect, 0x1f, 0x00, 0x00);
|
||||||
tilemap_draw( bitmap, cliprect, m62_foreground, 0, 0 );
|
tilemap_draw(bitmap, cliprect, state->fg_tilemap, 0, 0);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
WRITE8_HANDLER( spelunk2_gfxport_w )
|
WRITE8_HANDLER( spelunk2_gfxport_w )
|
||||||
{
|
{
|
||||||
|
irem_z80_state *state = (irem_z80_state *)space->machine->driver_data;
|
||||||
m62_hscroll_high_w(space, 0, (data & 2) >> 1);
|
m62_hscroll_high_w(space, 0, (data & 2) >> 1);
|
||||||
m62_vscroll_high_w(space, 0, (data & 1));
|
m62_vscroll_high_w(space, 0, (data & 1));
|
||||||
if (spelunkr_palbank != ((data & 0x0c) >> 2))
|
if (state->spelunkr_palbank != ((data & 0x0c) >> 2))
|
||||||
{
|
{
|
||||||
spelunkr_palbank = (data & 0x0c) >> 2;
|
state->spelunkr_palbank = (data & 0x0c) >> 2;
|
||||||
tilemap_mark_all_tiles_dirty(m62_background);
|
tilemap_mark_all_tiles_dirty(state->bg_tilemap);
|
||||||
tilemap_mark_all_tiles_dirty(m62_foreground);
|
tilemap_mark_all_tiles_dirty(state->fg_tilemap);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static TILE_GET_INFO( get_spelunk2_bg_tile_info )
|
static TILE_GET_INFO( get_spelunk2_bg_tile_info )
|
||||||
{
|
{
|
||||||
|
irem_z80_state *state = (irem_z80_state *)machine->driver_data;
|
||||||
int code;
|
int code;
|
||||||
int color;
|
int color;
|
||||||
code = m62_tileram[ tile_index << 1 ];
|
code = state->m62_tileram[tile_index << 1];
|
||||||
color = m62_tileram[ ( tile_index << 1 ) | 1 ];
|
color = state->m62_tileram[(tile_index << 1) | 1];
|
||||||
SET_TILE_INFO( 0, code | ( ( color & 0xf0 ) << 4 ), ( color & 0x0f ) | ( spelunkr_palbank << 4 ), 0 );
|
SET_TILE_INFO( 0, code | ((color & 0xf0) << 4), (color & 0x0f) | (state->spelunkr_palbank << 4), 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
VIDEO_START( spelunk2 )
|
VIDEO_START( spelunk2 )
|
||||||
@ -863,106 +861,108 @@ VIDEO_START( spelunk2 )
|
|||||||
|
|
||||||
VIDEO_UPDATE( spelunk2 )
|
VIDEO_UPDATE( spelunk2 )
|
||||||
{
|
{
|
||||||
tilemap_set_scrollx( m62_background, 0, m62_background_hscroll - 1);
|
irem_z80_state *state = (irem_z80_state *)screen->machine->driver_data;
|
||||||
tilemap_set_scrolly( m62_background, 0, m62_background_vscroll + 128 );
|
tilemap_set_scrollx(state->bg_tilemap, 0, state->m62_background_hscroll - 1);
|
||||||
tilemap_set_scrollx( m62_foreground, 0, -65 );
|
tilemap_set_scrolly(state->bg_tilemap, 0, state->m62_background_vscroll + 128);
|
||||||
tilemap_set_scrolly( m62_foreground, 0, 0 );
|
tilemap_set_scrollx(state->fg_tilemap, 0, -65);
|
||||||
tilemap_set_transparent_pen( m62_foreground, 0 );
|
tilemap_set_scrolly(state->fg_tilemap, 0, 0);
|
||||||
|
tilemap_set_transparent_pen(state->fg_tilemap, 0);
|
||||||
|
|
||||||
tilemap_draw( bitmap, cliprect, m62_background, 0, 0 );
|
tilemap_draw(bitmap, cliprect, state->bg_tilemap, 0, 0);
|
||||||
draw_sprites(screen->machine, bitmap, cliprect, 0x1f, 0x00, 0x00);
|
draw_sprites(screen->machine, bitmap, cliprect, 0x1f, 0x00, 0x00);
|
||||||
tilemap_draw( bitmap, cliprect, m62_foreground, 0, 0 );
|
tilemap_draw(bitmap, cliprect, state->fg_tilemap, 0, 0);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static TILE_GET_INFO( get_youjyudn_bg_tile_info )
|
static TILE_GET_INFO( get_youjyudn_bg_tile_info )
|
||||||
{
|
{
|
||||||
|
irem_z80_state *state = (irem_z80_state *)machine->driver_data;
|
||||||
int code;
|
int code;
|
||||||
int color;
|
int color;
|
||||||
code = m62_tileram[ tile_index << 1 ];
|
code = state->m62_tileram[tile_index << 1];
|
||||||
color = m62_tileram[ ( tile_index << 1 ) | 1 ];
|
color = state->m62_tileram[(tile_index << 1) | 1];
|
||||||
SET_TILE_INFO( 0, code | ((color & 0x60) << 3), color & 0x1f, 0);
|
SET_TILE_INFO( 0, code | ((color & 0x60) << 3), color & 0x1f, 0);
|
||||||
if (((color & 0x1f) >> 1) >= 0x08)
|
if (((color & 0x1f) >> 1) >= 0x08)
|
||||||
{
|
|
||||||
tileinfo->group = 1;
|
tileinfo->group = 1;
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
tileinfo->group = 0;
|
tileinfo->group = 0;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
static TILE_GET_INFO( get_youjyudn_fg_tile_info )
|
static TILE_GET_INFO( get_youjyudn_fg_tile_info )
|
||||||
{
|
{
|
||||||
|
irem_z80_state *state = (irem_z80_state *)machine->driver_data;
|
||||||
int code;
|
int code;
|
||||||
int color;
|
int color;
|
||||||
code = m62_textram[ tile_index << 1 ];
|
code = state->m62_textram[tile_index << 1];
|
||||||
color = m62_textram[ ( tile_index << 1 ) | 1 ];
|
color = state->m62_textram[(tile_index << 1) | 1];
|
||||||
SET_TILE_INFO(2, code | ((color & 0xc0) << 2), (color & 0x0f), 0);
|
SET_TILE_INFO(2, code | ((color & 0xc0) << 2), (color & 0x0f), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
VIDEO_START( youjyudn )
|
VIDEO_START( youjyudn )
|
||||||
{
|
{
|
||||||
|
irem_z80_state *state = (irem_z80_state *)machine->driver_data;
|
||||||
m62_start(machine, get_youjyudn_bg_tile_info, 1, 0, 8, 16, 64, 16);
|
m62_start(machine, get_youjyudn_bg_tile_info, 1, 0, 8, 16, 64, 16);
|
||||||
m62_textlayer(machine, get_youjyudn_fg_tile_info, 1, 1, 12, 8, 32, 32);
|
m62_textlayer(machine, get_youjyudn_fg_tile_info, 1, 1, 12, 8, 32, 32);
|
||||||
tilemap_set_transmask(m62_background,0,0xffff,0x0000); /* split type 0 is totally transparent in front half */
|
tilemap_set_transmask(state->bg_tilemap, 0, 0xffff, 0x0000); /* split type 0 is totally transparent in front half */
|
||||||
tilemap_set_transmask(m62_background,1,0x0001,0xfffe); /* split type 1 has pen 0 transparent in front half */
|
tilemap_set_transmask(state->bg_tilemap, 1, 0x0001, 0xfffe); /* split type 1 has pen 0 transparent in front half */
|
||||||
}
|
}
|
||||||
|
|
||||||
VIDEO_UPDATE( youjyudn )
|
VIDEO_UPDATE( youjyudn )
|
||||||
{
|
{
|
||||||
tilemap_set_scrollx( m62_background, 0, m62_background_hscroll );
|
irem_z80_state *state = (irem_z80_state *)screen->machine->driver_data;
|
||||||
tilemap_set_scrollx( m62_foreground, 0, -64 );
|
tilemap_set_scrollx(state->bg_tilemap, 0, state->m62_background_hscroll);
|
||||||
tilemap_set_scrolly( m62_foreground, 0, 0 );
|
tilemap_set_scrollx(state->fg_tilemap, 0, -64);
|
||||||
tilemap_set_transparent_pen( m62_foreground, 0 );
|
tilemap_set_scrolly(state->fg_tilemap, 0, 0);
|
||||||
|
tilemap_set_transparent_pen(state->fg_tilemap, 0);
|
||||||
|
|
||||||
tilemap_draw( bitmap, cliprect, m62_background, TILEMAP_DRAW_LAYER1, 0 );
|
tilemap_draw(bitmap, cliprect, state->bg_tilemap, TILEMAP_DRAW_LAYER1, 0);
|
||||||
draw_sprites(screen->machine, bitmap, cliprect, 0x1f, 0x00, 0x00);
|
draw_sprites(screen->machine, bitmap, cliprect, 0x1f, 0x00, 0x00);
|
||||||
tilemap_draw( bitmap, cliprect, m62_background, TILEMAP_DRAW_LAYER0, 0 );
|
tilemap_draw(bitmap, cliprect, state->bg_tilemap, TILEMAP_DRAW_LAYER0, 0);
|
||||||
tilemap_draw( bitmap, cliprect, m62_foreground, 0, 0 );
|
tilemap_draw(bitmap, cliprect, state->fg_tilemap, 0, 0);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
WRITE8_HANDLER( horizon_scrollram_w )
|
WRITE8_HANDLER( horizon_scrollram_w )
|
||||||
{
|
{
|
||||||
horizon_scrollram[ offset ] = data;
|
irem_z80_state *state = (irem_z80_state *)space->machine->driver_data;
|
||||||
|
state->scrollram[offset] = data;
|
||||||
}
|
}
|
||||||
|
|
||||||
static TILE_GET_INFO( get_horizon_bg_tile_info )
|
static TILE_GET_INFO( get_horizon_bg_tile_info )
|
||||||
{
|
{
|
||||||
|
irem_z80_state *state = (irem_z80_state *)machine->driver_data;
|
||||||
int code;
|
int code;
|
||||||
int color;
|
int color;
|
||||||
code = m62_tileram[ tile_index << 1 ];
|
code = state->m62_tileram[tile_index << 1];
|
||||||
color = m62_tileram[ ( tile_index << 1 ) | 1 ];
|
color = state->m62_tileram[(tile_index << 1) | 1];
|
||||||
SET_TILE_INFO(0, code | ((color & 0xc0) << 2) | ((color & 0x20) << 5), color & 0x1f, 0);
|
SET_TILE_INFO(0, code | ((color & 0xc0) << 2) | ((color & 0x20) << 5), color & 0x1f, 0);
|
||||||
|
|
||||||
if (((color & 0x1f) >> 1) >= 0x08)
|
if (((color & 0x1f) >> 1) >= 0x08)
|
||||||
{
|
|
||||||
tileinfo->group = 1;
|
tileinfo->group = 1;
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
tileinfo->group = 0;
|
tileinfo->group = 0;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
VIDEO_START( horizon )
|
VIDEO_START( horizon )
|
||||||
{
|
{
|
||||||
|
irem_z80_state *state = (irem_z80_state *)machine->driver_data;
|
||||||
m62_start(machine, get_horizon_bg_tile_info, 32, 0, 8, 8, 64, 32);
|
m62_start(machine, get_horizon_bg_tile_info, 32, 0, 8, 8, 64, 32);
|
||||||
tilemap_set_transmask(m62_background,0,0xffff,0x0000); /* split type 0 is totally transparent in front half */
|
tilemap_set_transmask(state->bg_tilemap, 0, 0xffff, 0x0000); /* split type 0 is totally transparent in front half */
|
||||||
tilemap_set_transmask(m62_background,1,0x0001,0xfffe); /* split type 1 has pen 0 transparent in front half */
|
tilemap_set_transmask(state->bg_tilemap, 1, 0x0001, 0xfffe); /* split type 1 has pen 0 transparent in front half */
|
||||||
}
|
}
|
||||||
|
|
||||||
VIDEO_UPDATE( horizon )
|
VIDEO_UPDATE( horizon )
|
||||||
{
|
{
|
||||||
|
irem_z80_state *state = (irem_z80_state *)screen->machine->driver_data;
|
||||||
int i;
|
int i;
|
||||||
for (i = 0; i < 32; i++)
|
for (i = 0; i < 32; i++)
|
||||||
{
|
{
|
||||||
tilemap_set_scrollx( m62_background, i, horizon_scrollram[ i << 1 ] | ( horizon_scrollram[ ( i << 1 ) | 1 ] << 8 ) );
|
tilemap_set_scrollx(state->bg_tilemap, i, state->scrollram[i << 1] | (state->scrollram[(i << 1) | 1] << 8));
|
||||||
}
|
}
|
||||||
tilemap_draw( bitmap, cliprect, m62_background, TILEMAP_DRAW_LAYER1, 0 );
|
tilemap_draw(bitmap, cliprect, state->bg_tilemap, TILEMAP_DRAW_LAYER1, 0);
|
||||||
draw_sprites(screen->machine, bitmap, cliprect, 0x1f, 0x00, 0x00);
|
draw_sprites(screen->machine, bitmap, cliprect, 0x1f, 0x00, 0x00);
|
||||||
tilemap_draw( bitmap, cliprect, m62_background, TILEMAP_DRAW_LAYER0, 0 );
|
tilemap_draw(bitmap, cliprect, state->bg_tilemap, TILEMAP_DRAW_LAYER0, 0);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -12,12 +12,7 @@ J Clegg
|
|||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
#include "driver.h"
|
#include "driver.h"
|
||||||
|
#include "includes/iremz80.h"
|
||||||
UINT8 *travrusa_videoram;
|
|
||||||
|
|
||||||
static tilemap *bg_tilemap;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/***************************************************************************
|
/***************************************************************************
|
||||||
|
|
||||||
@ -202,14 +197,15 @@ PALETTE_INIT( shtrider )
|
|||||||
|
|
||||||
static TILE_GET_INFO( get_tile_info )
|
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);
|
int flags = TILE_FLIPXY((attr & 0x30) >> 4);
|
||||||
|
|
||||||
tileinfo->group = ((attr & 0x0f) == 0x0f) ? 1 : 0; /* tunnels */
|
tileinfo->group = ((attr & 0x0f) == 0x0f) ? 1 : 0; /* tunnels */
|
||||||
|
|
||||||
SET_TILE_INFO(
|
SET_TILE_INFO(
|
||||||
0,
|
0,
|
||||||
travrusa_videoram[2*tile_index] + ((attr & 0xc0) << 2),
|
state->videoram[2 * tile_index] + ((attr & 0xc0) << 2),
|
||||||
attr & 0x0f,
|
attr & 0x0f,
|
||||||
flags);
|
flags);
|
||||||
}
|
}
|
||||||
@ -224,12 +220,16 @@ static TILE_GET_INFO( get_tile_info )
|
|||||||
|
|
||||||
VIDEO_START( travrusa )
|
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 */
|
state_save_register_global_array(machine, state->scrollx);
|
||||||
tilemap_set_transmask(bg_tilemap,1,0x3f,0xc0); /* split type 1 has pens 6 and 7 opaque - tunnels */
|
|
||||||
|
|
||||||
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 )
|
WRITE8_HANDLER( travrusa_videoram_w )
|
||||||
{
|
{
|
||||||
travrusa_videoram[offset] = data;
|
irem_z80_state *state = (irem_z80_state *)space->machine->driver_data;
|
||||||
tilemap_mark_tile_dirty(bg_tilemap,offset/2);
|
state->videoram[offset] = data;
|
||||||
|
tilemap_mark_tile_dirty(state->bg_tilemap, offset / 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static int scrollx[2];
|
static void set_scroll( running_machine *machine )
|
||||||
|
|
||||||
static void set_scroll(void)
|
|
||||||
{
|
{
|
||||||
|
irem_z80_state *state = (irem_z80_state *)machine->driver_data;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i = 0; i <= 2; i++)
|
for (i = 0; i <= 2; i++)
|
||||||
tilemap_set_scrollx(bg_tilemap,i,scrollx[0] + 256 * scrollx[1]);
|
tilemap_set_scrollx(state->bg_tilemap, i, state->scrollx[0] + 256 * state->scrollx[1]);
|
||||||
tilemap_set_scrollx(bg_tilemap,3,0);
|
|
||||||
|
tilemap_set_scrollx(state->bg_tilemap, 3, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE8_HANDLER( travrusa_scroll_x_low_w )
|
WRITE8_HANDLER( travrusa_scroll_x_low_w )
|
||||||
{
|
{
|
||||||
scrollx[0] = data;
|
irem_z80_state *state = (irem_z80_state *)space->machine->driver_data;
|
||||||
set_scroll();
|
state->scrollx[0] = data;
|
||||||
|
set_scroll(space->machine);
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE8_HANDLER( travrusa_scroll_x_high_w )
|
WRITE8_HANDLER( travrusa_scroll_x_high_w )
|
||||||
{
|
{
|
||||||
scrollx[1] = data;
|
irem_z80_state *state = (irem_z80_state *)space->machine->driver_data;
|
||||||
set_scroll();
|
state->scrollx[1] = data;
|
||||||
|
set_scroll(space->machine);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -292,6 +295,7 @@ WRITE8_HANDLER( travrusa_flipscreen_w )
|
|||||||
|
|
||||||
static void draw_sprites(running_machine *machine, bitmap_t *bitmap,const rectangle *cliprect)
|
static void draw_sprites(running_machine *machine, bitmap_t *bitmap,const rectangle *cliprect)
|
||||||
{
|
{
|
||||||
|
irem_z80_state *state = (irem_z80_state *)machine->driver_data;
|
||||||
int offs;
|
int offs;
|
||||||
static const rectangle spritevisiblearea =
|
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)
|
for (offs = spriteram_size - 4;offs >= 0;offs -= 4)
|
||||||
{
|
{
|
||||||
int sx = ((spriteram[offs + 3] + 8) & 0xff) - 8;
|
int sx = ((state->spriteram[offs + 3] + 8) & 0xff) - 8;
|
||||||
int sy = 240 - spriteram[offs];
|
int sy = 240 - state->spriteram[offs];
|
||||||
int code = spriteram[offs + 2];
|
int code = state->spriteram[offs + 2];
|
||||||
int attr = spriteram[offs + 1];
|
int attr = state->spriteram[offs + 1];
|
||||||
int flipx = attr & 0x40;
|
int flipx = attr & 0x40;
|
||||||
int flipy = attr & 0x80;
|
int flipy = attr & 0x80;
|
||||||
|
|
||||||
@ -338,8 +342,9 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap,const rectan
|
|||||||
|
|
||||||
VIDEO_UPDATE( travrusa )
|
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);
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user