mirror of
https://github.com/holub/mame
synced 2025-05-20 12:48:53 +03:00
Added driver data class and save states to playmark.c, powerbal.c, pushman.c and pzletime.c [Fabio Priuli]
This commit is contained in:
parent
7db95005ef
commit
1e21b12b9e
1
.gitattributes
vendored
1
.gitattributes
vendored
@ -2745,6 +2745,7 @@ src/mame/includes/psikyo.h svneol=native#text/plain
|
||||
src/mame/includes/psikyo4.h svneol=native#text/plain
|
||||
src/mame/includes/psikyosh.h svneol=native#text/plain
|
||||
src/mame/includes/psx.h svneol=native#text/plain
|
||||
src/mame/includes/pushman.h svneol=native#text/plain
|
||||
src/mame/includes/qix.h svneol=native#text/plain
|
||||
src/mame/includes/raiden2.h svneol=native#text/plain
|
||||
src/mame/includes/rainbow.h svneol=native#text/plain
|
||||
|
@ -47,21 +47,15 @@ TODO:
|
||||
#include "includes/playmark.h"
|
||||
|
||||
|
||||
static UINT16 playmark_snd_command;
|
||||
static UINT16 playmark_snd_flag;
|
||||
static UINT8 playmark_oki_control;
|
||||
static UINT8 playmark_oki_command;
|
||||
|
||||
|
||||
static WRITE16_HANDLER( coinctrl_w )
|
||||
{
|
||||
if (ACCESSING_BITS_8_15)
|
||||
{
|
||||
coin_counter_w(space->machine, 0,data & 0x0100);
|
||||
coin_counter_w(space->machine, 1,data & 0x0200);
|
||||
coin_counter_w(space->machine, 0, data & 0x0100);
|
||||
coin_counter_w(space->machine, 1, data & 0x0200);
|
||||
}
|
||||
if (data & 0xfcff)
|
||||
logerror("Writing %04x to unknown coin control bits\n",data);
|
||||
logerror("Writing %04x to unknown coin control bits\n", data);
|
||||
}
|
||||
|
||||
|
||||
@ -86,62 +80,69 @@ static const eeprom_interface eeprom_intf =
|
||||
|
||||
static WRITE16_HANDLER( wbeachvl_coin_eeprom_w )
|
||||
{
|
||||
playmark_state *state = (playmark_state *)space->machine->driver_data;
|
||||
|
||||
if (ACCESSING_BITS_0_7)
|
||||
{
|
||||
running_device *eeprom = devtag_get_device(space->machine, "eeprom");
|
||||
|
||||
/* bits 0-3 are coin counters? (only 0 used?) */
|
||||
coin_counter_w(space->machine, 0,data & 0x01);
|
||||
coin_counter_w(space->machine, 1,data & 0x02);
|
||||
coin_counter_w(space->machine, 2,data & 0x04);
|
||||
coin_counter_w(space->machine, 3,data & 0x08);
|
||||
coin_counter_w(space->machine, 0, data & 0x01);
|
||||
coin_counter_w(space->machine, 1, data & 0x02);
|
||||
coin_counter_w(space->machine, 2, data & 0x04);
|
||||
coin_counter_w(space->machine, 3, data & 0x08);
|
||||
|
||||
/* bits 5-7 control EEPROM */
|
||||
eeprom_set_cs_line(eeprom, (data & 0x20) ? CLEAR_LINE : ASSERT_LINE);
|
||||
eeprom_write_bit(eeprom, data & 0x80);
|
||||
eeprom_set_clock_line(eeprom, (data & 0x40) ? CLEAR_LINE : ASSERT_LINE);
|
||||
eeprom_set_cs_line(state->eeprom, (data & 0x20) ? CLEAR_LINE : ASSERT_LINE);
|
||||
eeprom_write_bit(state->eeprom, data & 0x80);
|
||||
eeprom_set_clock_line(state->eeprom, (data & 0x40) ? CLEAR_LINE : ASSERT_LINE);
|
||||
}
|
||||
}
|
||||
|
||||
static WRITE16_HANDLER( hotmind_coin_eeprom_w )
|
||||
{
|
||||
playmark_state *state = (playmark_state *)space->machine->driver_data;
|
||||
|
||||
if (ACCESSING_BITS_0_7)
|
||||
{
|
||||
running_device *eeprom = devtag_get_device(space->machine, "eeprom");
|
||||
coin_counter_w(space->machine, 0,data & 0x20);
|
||||
|
||||
eeprom_set_cs_line(eeprom, (data & 1) ? CLEAR_LINE : ASSERT_LINE);
|
||||
eeprom_write_bit(eeprom, data & 4);
|
||||
eeprom_set_clock_line(eeprom, (data & 2) ? ASSERT_LINE : CLEAR_LINE );
|
||||
eeprom_set_cs_line(state->eeprom, (data & 1) ? CLEAR_LINE : ASSERT_LINE);
|
||||
eeprom_write_bit(state->eeprom, data & 4);
|
||||
eeprom_set_clock_line(state->eeprom, (data & 2) ? ASSERT_LINE : CLEAR_LINE );
|
||||
}
|
||||
}
|
||||
|
||||
static WRITE16_HANDLER( hrdtimes_coin_w )
|
||||
{
|
||||
coin_counter_w(space->machine, 0,data & 0x01);
|
||||
coin_counter_w(space->machine, 1,data & 0x02);
|
||||
coin_counter_w(space->machine, 0, data & 0x01);
|
||||
coin_counter_w(space->machine, 1, data & 0x02);
|
||||
}
|
||||
|
||||
static WRITE16_HANDLER( playmark_snd_command_w )
|
||||
{
|
||||
if (ACCESSING_BITS_0_7) {
|
||||
playmark_snd_command = (data & 0xff);
|
||||
playmark_snd_flag = 1;
|
||||
playmark_state *state = (playmark_state *)space->machine->driver_data;
|
||||
|
||||
if (ACCESSING_BITS_0_7)
|
||||
{
|
||||
state->snd_command = (data & 0xff);
|
||||
state->snd_flag = 1;
|
||||
cpu_yield(space->cpu);
|
||||
}
|
||||
}
|
||||
|
||||
static READ8_HANDLER( playmark_snd_command_r )
|
||||
{
|
||||
playmark_state *state = (playmark_state *)space->machine->driver_data;
|
||||
int data = 0;
|
||||
|
||||
if ((playmark_oki_control & 0x38) == 0x30) {
|
||||
data = playmark_snd_command;
|
||||
// logerror("PC$%03x PortB reading %02x from the 68K\n",cpu_get_previouspc(space->cpu),data);
|
||||
if ((state->oki_control & 0x38) == 0x30)
|
||||
{
|
||||
data = state->snd_command;
|
||||
// logerror("PC$%03x PortB reading %02x from the 68K\n", cpu_get_previouspc(space->cpu), data);
|
||||
}
|
||||
else if ((playmark_oki_control & 0x38) == 0x28) {
|
||||
data = (okim6295_r(devtag_get_device(space->machine, "oki"),0) & 0x0f);
|
||||
// logerror("PC$%03x PortB reading %02x from the OKI status port\n",cpu_get_previouspc(space->cpu),data);
|
||||
else if ((state->oki_control & 0x38) == 0x28)
|
||||
{
|
||||
data = (okim6295_r(state->oki, 0) & 0x0f);
|
||||
// logerror("PC$%03x PortB reading %02x from the OKI status port\n", cpu_get_previouspc(space->cpu), data);
|
||||
}
|
||||
|
||||
return data;
|
||||
@ -149,8 +150,11 @@ static READ8_HANDLER( playmark_snd_command_r )
|
||||
|
||||
static READ8_HANDLER( playmark_snd_flag_r )
|
||||
{
|
||||
if (playmark_snd_flag) {
|
||||
playmark_snd_flag = 0;
|
||||
playmark_state *state = (playmark_state *)space->machine->driver_data;
|
||||
|
||||
if (state->snd_flag)
|
||||
{
|
||||
state->snd_flag = 0;
|
||||
return 0x00;
|
||||
}
|
||||
|
||||
@ -160,26 +164,28 @@ static READ8_HANDLER( playmark_snd_flag_r )
|
||||
|
||||
static WRITE8_DEVICE_HANDLER( playmark_oki_banking_w )
|
||||
{
|
||||
static int old_bank = 0;
|
||||
playmark_state *state = (playmark_state *)device->machine->driver_data;
|
||||
|
||||
if(old_bank != (data & 7))
|
||||
if (state->old_oki_bank != (data & 7))
|
||||
{
|
||||
old_bank = data & 7;
|
||||
state->old_oki_bank = data & 7;
|
||||
|
||||
if(((old_bank - 1) * 0x40000) < memory_region_length(device->machine, "oki"))
|
||||
if (((state->old_oki_bank - 1) * 0x40000) < memory_region_length(device->machine, "oki"))
|
||||
{
|
||||
okim6295_set_bank_base(device, 0x40000 * (old_bank - 1));
|
||||
okim6295_set_bank_base(device, 0x40000 * (state->old_oki_bank - 1));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static WRITE8_HANDLER( playmark_oki_w )
|
||||
{
|
||||
playmark_oki_command = data;
|
||||
playmark_state *state = (playmark_state *)space->machine->driver_data;
|
||||
state->oki_command = data;
|
||||
}
|
||||
|
||||
static WRITE8_DEVICE_HANDLER( playmark_snd_control_w )
|
||||
{
|
||||
playmark_state *state = (playmark_state *)device->machine->driver_data;
|
||||
// const address_space *space = cputag_get_address_space(device->machine, "audiocpu", ADDRESS_SPACE_PROGRAM);
|
||||
|
||||
/* This port controls communications to and from the 68K, and the OKI
|
||||
@ -195,12 +201,12 @@ static WRITE8_DEVICE_HANDLER( playmark_snd_control_w )
|
||||
1 Not used
|
||||
0 Not used
|
||||
*/
|
||||
playmark_oki_control = data;
|
||||
state->oki_control = data;
|
||||
|
||||
if ((data & 0x38) == 0x18)
|
||||
{
|
||||
// logerror("PC$%03x Writing %02x to OKI1, PortC=%02x, Code=%02x\n",cpu_get_previouspc(space->cpu),playmark_oki_command,playmark_oki_control,playmark_snd_command);
|
||||
okim6295_w(device, 0, playmark_oki_command);
|
||||
// logerror("PC$%03x Writing %02x to OKI1, PortC=%02x, Code=%02x\n",cpu_get_previouspc(space->cpu),playmark_oki_command,playmark_oki_control,playmark_snd_command);
|
||||
okim6295_w(device, 0, state->oki_command);
|
||||
}
|
||||
}
|
||||
|
||||
@ -216,14 +222,14 @@ static READ8_HANDLER( PIC16C5X_T0_clk_r )
|
||||
static ADDRESS_MAP_START( bigtwin_main_map, ADDRESS_SPACE_PROGRAM, 16 )
|
||||
AM_RANGE(0x000000, 0x0fffff) AM_ROM
|
||||
AM_RANGE(0x304000, 0x304001) AM_NOP /* watchdog? irq ack? */
|
||||
AM_RANGE(0x440000, 0x4403ff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram)
|
||||
AM_RANGE(0x500000, 0x500fff) AM_WRITE(wbeachvl_fgvideoram_w) AM_BASE(&wbeachvl_videoram2)
|
||||
AM_RANGE(0x440000, 0x4403ff) AM_RAM AM_BASE_SIZE_MEMBER(playmark_state, spriteram, spriteram_size)
|
||||
AM_RANGE(0x500000, 0x500fff) AM_WRITE(wbeachvl_fgvideoram_w) AM_BASE_MEMBER(playmark_state, videoram2)
|
||||
AM_RANGE(0x501000, 0x501fff) AM_WRITENOP /* unused RAM? */
|
||||
AM_RANGE(0x502000, 0x503fff) AM_WRITE(wbeachvl_txvideoram_w) AM_BASE(&wbeachvl_videoram1)
|
||||
AM_RANGE(0x502000, 0x503fff) AM_WRITE(wbeachvl_txvideoram_w) AM_BASE_MEMBER(playmark_state, videoram1)
|
||||
AM_RANGE(0x504000, 0x50ffff) AM_WRITENOP /* unused RAM? */
|
||||
AM_RANGE(0x510000, 0x51000b) AM_WRITE(bigtwin_scroll_w)
|
||||
AM_RANGE(0x51000c, 0x51000d) AM_WRITENOP /* always 3? */
|
||||
AM_RANGE(0x600000, 0x67ffff) AM_RAM AM_BASE(&bigtwin_bgvideoram)
|
||||
AM_RANGE(0x600000, 0x67ffff) AM_RAM AM_BASE_MEMBER(playmark_state, bgvideoram)
|
||||
AM_RANGE(0x700010, 0x700011) AM_READ_PORT("SYSTEM")
|
||||
AM_RANGE(0x700012, 0x700013) AM_READ_PORT("P1")
|
||||
AM_RANGE(0x700014, 0x700015) AM_READ_PORT("P2")
|
||||
@ -238,11 +244,11 @@ ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( wbeachvl_main_map, ADDRESS_SPACE_PROGRAM, 16 )
|
||||
AM_RANGE(0x000000, 0x07ffff) AM_ROM
|
||||
AM_RANGE(0x440000, 0x440fff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram)
|
||||
AM_RANGE(0x500000, 0x501fff) AM_RAM_WRITE(wbeachvl_bgvideoram_w) AM_BASE(&wbeachvl_videoram3)
|
||||
AM_RANGE(0x504000, 0x505fff) AM_RAM_WRITE(wbeachvl_fgvideoram_w) AM_BASE(&wbeachvl_videoram2)
|
||||
AM_RANGE(0x508000, 0x509fff) AM_RAM_WRITE(wbeachvl_txvideoram_w) AM_BASE(&wbeachvl_videoram1)
|
||||
AM_RANGE(0x50f000, 0x50ffff) AM_RAM AM_BASE(&wbeachvl_rowscroll)
|
||||
AM_RANGE(0x440000, 0x440fff) AM_RAM AM_BASE_SIZE_MEMBER(playmark_state, spriteram, spriteram_size)
|
||||
AM_RANGE(0x500000, 0x501fff) AM_RAM_WRITE(wbeachvl_bgvideoram_w) AM_BASE_MEMBER(playmark_state, videoram3)
|
||||
AM_RANGE(0x504000, 0x505fff) AM_RAM_WRITE(wbeachvl_fgvideoram_w) AM_BASE_MEMBER(playmark_state, videoram2)
|
||||
AM_RANGE(0x508000, 0x509fff) AM_RAM_WRITE(wbeachvl_txvideoram_w) AM_BASE_MEMBER(playmark_state, videoram1)
|
||||
AM_RANGE(0x50f000, 0x50ffff) AM_RAM AM_BASE_MEMBER(playmark_state, rowscroll)
|
||||
AM_RANGE(0x510000, 0x51000b) AM_WRITE(wbeachvl_scroll_w)
|
||||
AM_RANGE(0x51000c, 0x51000d) AM_WRITENOP /* 2 and 3 */
|
||||
// AM_RANGE(0x700000, 0x700001) ?? written on startup
|
||||
@ -261,12 +267,12 @@ ADDRESS_MAP_END
|
||||
static ADDRESS_MAP_START( excelsr_main_map, ADDRESS_SPACE_PROGRAM, 16 )
|
||||
AM_RANGE(0x000000, 0x2fffff) AM_ROM
|
||||
AM_RANGE(0x304000, 0x304001) AM_WRITENOP /* watchdog? irq ack? */
|
||||
AM_RANGE(0x440000, 0x440cff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram)
|
||||
AM_RANGE(0x500000, 0x500fff) AM_RAM_WRITE(wbeachvl_fgvideoram_w) AM_BASE(&wbeachvl_videoram2)
|
||||
AM_RANGE(0x501000, 0x501fff) AM_RAM_WRITE(wbeachvl_txvideoram_w) AM_BASE(&wbeachvl_videoram1)
|
||||
AM_RANGE(0x440000, 0x440cff) AM_RAM AM_BASE_SIZE_MEMBER(playmark_state, spriteram, spriteram_size)
|
||||
AM_RANGE(0x500000, 0x500fff) AM_RAM_WRITE(wbeachvl_fgvideoram_w) AM_BASE_MEMBER(playmark_state, videoram2)
|
||||
AM_RANGE(0x501000, 0x501fff) AM_RAM_WRITE(wbeachvl_txvideoram_w) AM_BASE_MEMBER(playmark_state, videoram1)
|
||||
AM_RANGE(0x510000, 0x51000b) AM_WRITE(excelsr_scroll_w)
|
||||
AM_RANGE(0x51000c, 0x51000d) AM_WRITENOP /* 2 and 3 */
|
||||
AM_RANGE(0x600000, 0x67ffff) AM_RAM AM_BASE(&bigtwin_bgvideoram)
|
||||
AM_RANGE(0x600000, 0x67ffff) AM_RAM AM_BASE_MEMBER(playmark_state, bgvideoram)
|
||||
AM_RANGE(0x700010, 0x700011) AM_READ_PORT("SYSTEM")
|
||||
AM_RANGE(0x700012, 0x700013) AM_READ_PORT("P1")
|
||||
AM_RANGE(0x700014, 0x700015) AM_READ_PORT("P2")
|
||||
@ -280,11 +286,11 @@ ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( hotmind_main_map, ADDRESS_SPACE_PROGRAM, 16 )
|
||||
AM_RANGE(0x000000, 0x03ffff) AM_ROM
|
||||
AM_RANGE(0x100000, 0x103fff) AM_RAM_WRITE(hrdtimes_bgvideoram_w) AM_BASE(&wbeachvl_videoram3)
|
||||
AM_RANGE(0x104000, 0x107fff) AM_RAM_WRITE(hrdtimes_fgvideoram_w) AM_BASE(&wbeachvl_videoram2)
|
||||
AM_RANGE(0x108000, 0x10ffff) AM_RAM_WRITE(hrdtimes_txvideoram_w) AM_BASE(&wbeachvl_videoram1)
|
||||
AM_RANGE(0x100000, 0x103fff) AM_RAM_WRITE(hrdtimes_bgvideoram_w) AM_BASE_MEMBER(playmark_state, videoram3)
|
||||
AM_RANGE(0x104000, 0x107fff) AM_RAM_WRITE(hrdtimes_fgvideoram_w) AM_BASE_MEMBER(playmark_state, videoram2)
|
||||
AM_RANGE(0x108000, 0x10ffff) AM_RAM_WRITE(hrdtimes_txvideoram_w) AM_BASE_MEMBER(playmark_state, videoram1)
|
||||
AM_RANGE(0x110000, 0x11000d) AM_WRITE(hrdtimes_scroll_w)
|
||||
AM_RANGE(0x200000, 0x200fff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram)
|
||||
AM_RANGE(0x200000, 0x200fff) AM_RAM AM_BASE_SIZE_MEMBER(playmark_state, spriteram, spriteram_size)
|
||||
AM_RANGE(0x280000, 0x2807ff) AM_RAM_WRITE(bigtwin_paletteram_w) AM_BASE_GENERIC(paletteram)
|
||||
AM_RANGE(0x300010, 0x300011) AM_READ_PORT("SYSTEM")
|
||||
AM_RANGE(0x300012, 0x300013) AM_READ_PORT("P1")
|
||||
@ -300,11 +306,11 @@ static ADDRESS_MAP_START( hrdtimes_main_map, ADDRESS_SPACE_PROGRAM, 16 )
|
||||
AM_RANGE(0x000000, 0x07ffff) AM_ROM
|
||||
AM_RANGE(0x080000, 0x0bffff) AM_RAM
|
||||
AM_RANGE(0x0c0000, 0x0fffff) AM_ROM AM_REGION("maincpu", 0x0c0000)
|
||||
AM_RANGE(0x100000, 0x103fff) AM_RAM_WRITE(hrdtimes_bgvideoram_w) AM_BASE(&wbeachvl_videoram3)
|
||||
AM_RANGE(0x104000, 0x107fff) AM_RAM_WRITE(hrdtimes_fgvideoram_w) AM_BASE(&wbeachvl_videoram2)
|
||||
AM_RANGE(0x108000, 0x10ffff) AM_RAM_WRITE(hrdtimes_txvideoram_w) AM_BASE(&wbeachvl_videoram1)
|
||||
AM_RANGE(0x100000, 0x103fff) AM_RAM_WRITE(hrdtimes_bgvideoram_w) AM_BASE_MEMBER(playmark_state, videoram3)
|
||||
AM_RANGE(0x104000, 0x107fff) AM_RAM_WRITE(hrdtimes_fgvideoram_w) AM_BASE_MEMBER(playmark_state, videoram2)
|
||||
AM_RANGE(0x108000, 0x10ffff) AM_RAM_WRITE(hrdtimes_txvideoram_w) AM_BASE_MEMBER(playmark_state, videoram1)
|
||||
AM_RANGE(0x110000, 0x11000d) AM_WRITE(hrdtimes_scroll_w)
|
||||
AM_RANGE(0x200000, 0x200fff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram)
|
||||
AM_RANGE(0x200000, 0x200fff) AM_RAM AM_BASE_SIZE_MEMBER(playmark_state, spriteram, spriteram_size)
|
||||
AM_RANGE(0x280000, 0x2807ff) AM_RAM_WRITE(bigtwin_paletteram_w) AM_BASE_GENERIC(paletteram)
|
||||
AM_RANGE(0x280800, 0x280fff) AM_RAM // unused
|
||||
AM_RANGE(0x300010, 0x300011) AM_READ_PORT("SYSTEM")
|
||||
@ -894,13 +900,56 @@ static const gfx_layout hrdtimes_charlayout =
|
||||
|
||||
|
||||
static GFXDECODE_START( hrdtimes )
|
||||
GFXDECODE_ENTRY( "gfx2", 0, hrdtimes_tilelayout, 0x200, 32 ) /* colors 0x200-0x2ff */
|
||||
GFXDECODE_ENTRY( "gfx1", 0, hrdtimes_tilelayout, 0x000, 16 ) /* colors 0x000-0x0ff */
|
||||
GFXDECODE_ENTRY( "gfx2", 0, hrdtimes_tilelayout, 0x200, 32 ) /* colors 0x200-0x2ff */
|
||||
GFXDECODE_ENTRY( "gfx1", 0, hrdtimes_tilelayout, 0x000, 16 ) /* colors 0x000-0x0ff */
|
||||
GFXDECODE_ENTRY( "gfx1", 0, hrdtimes_charlayout, 0x100, 8 ) /* colors 0x100-0x17f */
|
||||
GFXDECODE_END
|
||||
|
||||
static MACHINE_START( playmark )
|
||||
{
|
||||
playmark_state *state = (playmark_state *)machine->driver_data;
|
||||
|
||||
state->oki = devtag_get_device(machine, "oki");
|
||||
state->eeprom = devtag_get_device(machine, "eeprom");
|
||||
|
||||
state_save_register_global(machine, state->bgscrollx);
|
||||
state_save_register_global(machine, state->bgscrolly);
|
||||
state_save_register_global(machine, state->bg_enable);
|
||||
state_save_register_global(machine, state->bg_full_size);
|
||||
state_save_register_global(machine, state->fgscrollx);
|
||||
state_save_register_global(machine, state->fg_rowscroll_enable);
|
||||
state_save_register_global_array(machine, state->scroll);
|
||||
|
||||
state_save_register_global(machine, state->snd_command);
|
||||
state_save_register_global(machine, state->snd_flag);
|
||||
state_save_register_global(machine, state->oki_control);
|
||||
state_save_register_global(machine, state->oki_command);
|
||||
state_save_register_global(machine, state->old_oki_bank);
|
||||
}
|
||||
|
||||
static MACHINE_RESET( playmark )
|
||||
{
|
||||
playmark_state *state = (playmark_state *)machine->driver_data;
|
||||
|
||||
state->bgscrollx = 0;
|
||||
state->bgscrolly = 0;
|
||||
state->bg_enable = 0;
|
||||
state->bg_full_size = 0;
|
||||
state->fgscrollx = 0;
|
||||
state->fg_rowscroll_enable = 0;
|
||||
memset(state->scroll, 0, ARRAY_LENGTH(state->scroll));
|
||||
|
||||
state->snd_command = 0;
|
||||
state->oki_control = 0;
|
||||
state->oki_command = 0;
|
||||
state->old_oki_bank = 0;
|
||||
}
|
||||
|
||||
static MACHINE_DRIVER_START( bigtwin )
|
||||
|
||||
/* driver data */
|
||||
MDRV_DRIVER_DATA(playmark_state)
|
||||
|
||||
/* basic machine hardware */
|
||||
MDRV_CPU_ADD("maincpu", M68000, 12000000) /* 12 MHz */
|
||||
MDRV_CPU_PROGRAM_MAP(bigtwin_main_map)
|
||||
@ -910,6 +959,9 @@ static MACHINE_DRIVER_START( bigtwin )
|
||||
/* Program and Data Maps are internal to the MCU */
|
||||
MDRV_CPU_IO_MAP(playmark_sound_io_map)
|
||||
|
||||
MDRV_MACHINE_START(playmark)
|
||||
MDRV_MACHINE_RESET(playmark)
|
||||
|
||||
/* video hardware */
|
||||
MDRV_SCREEN_ADD("screen", RASTER)
|
||||
MDRV_SCREEN_REFRESH_RATE(58)
|
||||
@ -935,6 +987,9 @@ MACHINE_DRIVER_END
|
||||
|
||||
static MACHINE_DRIVER_START( wbeachvl )
|
||||
|
||||
/* driver data */
|
||||
MDRV_DRIVER_DATA(playmark_state)
|
||||
|
||||
/* basic machine hardware */
|
||||
MDRV_CPU_ADD("maincpu", M68000, 12000000) /* 12 MHz */
|
||||
MDRV_CPU_PROGRAM_MAP(wbeachvl_main_map)
|
||||
@ -947,6 +1002,9 @@ static MACHINE_DRIVER_START( wbeachvl )
|
||||
MDRV_EEPROM_ADD("eeprom", eeprom_intf)
|
||||
MDRV_EEPROM_DEFAULT_VALUE(0)
|
||||
|
||||
MDRV_MACHINE_START(playmark)
|
||||
MDRV_MACHINE_RESET(playmark)
|
||||
|
||||
/* video hardware */
|
||||
MDRV_SCREEN_ADD("screen", RASTER)
|
||||
MDRV_SCREEN_REFRESH_RATE(58)
|
||||
@ -971,6 +1029,9 @@ MACHINE_DRIVER_END
|
||||
|
||||
static MACHINE_DRIVER_START( excelsr )
|
||||
|
||||
/* driver data */
|
||||
MDRV_DRIVER_DATA(playmark_state)
|
||||
|
||||
/* basic machine hardware */
|
||||
MDRV_CPU_ADD("maincpu", M68000, 12000000) /* 12 MHz */
|
||||
MDRV_CPU_PROGRAM_MAP(excelsr_main_map)
|
||||
@ -980,6 +1041,9 @@ static MACHINE_DRIVER_START( excelsr )
|
||||
/* Program and Data Maps are internal to the MCU */
|
||||
MDRV_CPU_IO_MAP(playmark_sound_io_map)
|
||||
|
||||
MDRV_MACHINE_START(playmark)
|
||||
MDRV_MACHINE_RESET(playmark)
|
||||
|
||||
/* video hardware */
|
||||
MDRV_SCREEN_ADD("screen", RASTER)
|
||||
MDRV_SCREEN_REFRESH_RATE(58)
|
||||
@ -1004,6 +1068,9 @@ MACHINE_DRIVER_END
|
||||
|
||||
static MACHINE_DRIVER_START( hotmind )
|
||||
|
||||
/* driver data */
|
||||
MDRV_DRIVER_DATA(playmark_state)
|
||||
|
||||
/* basic machine hardware */
|
||||
MDRV_CPU_ADD("maincpu", M68000, XTAL_24MHz/2) /* verified on pcb */
|
||||
MDRV_CPU_PROGRAM_MAP(hotmind_main_map)
|
||||
@ -1016,6 +1083,9 @@ static MACHINE_DRIVER_START( hotmind )
|
||||
MDRV_EEPROM_ADD("eeprom", eeprom_intf)
|
||||
MDRV_EEPROM_DEFAULT_VALUE(0)
|
||||
|
||||
MDRV_MACHINE_START(playmark)
|
||||
MDRV_MACHINE_RESET(playmark)
|
||||
|
||||
/* video hardware */
|
||||
MDRV_SCREEN_ADD("screen", RASTER)
|
||||
MDRV_SCREEN_REFRESH_RATE(58)
|
||||
@ -1040,6 +1110,9 @@ MACHINE_DRIVER_END
|
||||
|
||||
static MACHINE_DRIVER_START( hrdtimes )
|
||||
|
||||
/* driver data */
|
||||
MDRV_DRIVER_DATA(playmark_state)
|
||||
|
||||
/* basic machine hardware */
|
||||
MDRV_CPU_ADD("maincpu", M68000, XTAL_24MHz/2) /* verified on pcb */
|
||||
MDRV_CPU_PROGRAM_MAP(hrdtimes_main_map)
|
||||
@ -1049,6 +1122,9 @@ static MACHINE_DRIVER_START( hrdtimes )
|
||||
/* Program and Data Maps are internal to the MCU */
|
||||
// MDRV_CPU_IO_MAP(playmark_sound_io_map)
|
||||
|
||||
MDRV_MACHINE_START(playmark)
|
||||
MDRV_MACHINE_RESET(playmark)
|
||||
|
||||
/* video hardware */
|
||||
MDRV_SCREEN_ADD("screen", RASTER)
|
||||
MDRV_SCREEN_REFRESH_RATE(58)
|
||||
@ -1391,15 +1467,15 @@ static UINT8 playmark_asciitohex(UINT8 data)
|
||||
|
||||
static DRIVER_INIT( bigtwin )
|
||||
{
|
||||
playmark_state *state = (playmark_state *)machine->driver_data;
|
||||
UINT8 *playmark_PICROM_HEX = memory_region(machine, "user1");
|
||||
UINT16 *playmark_PICROM = (UINT16 *)memory_region(machine, "audiocpu");
|
||||
INT32 offs, data;
|
||||
UINT16 src_pos = 0;
|
||||
UINT16 dst_pos = 0;
|
||||
UINT8 data_hi, data_lo;
|
||||
INT32 offs, data;
|
||||
UINT16 src_pos = 0;
|
||||
UINT16 dst_pos = 0;
|
||||
UINT8 data_hi, data_lo;
|
||||
|
||||
|
||||
playmark_snd_flag = 0;
|
||||
state->snd_flag = 0;
|
||||
|
||||
/**** Convert the PIC16C57 ASCII HEX dumps to pure HEX ****/
|
||||
do
|
||||
@ -1414,12 +1490,14 @@ static DRIVER_INIT( bigtwin )
|
||||
{
|
||||
data_hi = playmark_asciitohex((playmark_PICROM_HEX[src_pos + offs + 0]));
|
||||
data_lo = playmark_asciitohex((playmark_PICROM_HEX[src_pos + offs + 1]));
|
||||
if ((data_hi <= 0x0f) && (data_lo <= 0x0f)) {
|
||||
data = (data_hi << 4) | (data_lo << 0);
|
||||
if ((data_hi <= 0x0f) && (data_lo <= 0x0f))
|
||||
{
|
||||
data = (data_hi << 4) | (data_lo << 0);
|
||||
data_hi = playmark_asciitohex((playmark_PICROM_HEX[src_pos + offs + 2]));
|
||||
data_lo = playmark_asciitohex((playmark_PICROM_HEX[src_pos + offs + 3]));
|
||||
|
||||
if ((data_hi <= 0x0f) && (data_lo <= 0x0f)) {
|
||||
if ((data_hi <= 0x0f) && (data_lo <= 0x0f))
|
||||
{
|
||||
data |= (data_hi << 12) | (data_lo << 8);
|
||||
playmark_PICROM[dst_pos] = data;
|
||||
dst_pos += 1;
|
||||
@ -1440,7 +1518,7 @@ static DRIVER_INIT( bigtwin )
|
||||
|
||||
data_hi = playmark_asciitohex((playmark_PICROM_HEX[src_pos + 0]));
|
||||
data_lo = playmark_asciitohex((playmark_PICROM_HEX[src_pos + 1]));
|
||||
data = (data_hi << 4) | (data_lo << 0);
|
||||
data = (data_hi << 4) | (data_lo << 0);
|
||||
data_hi = playmark_asciitohex((playmark_PICROM_HEX[src_pos + 2]));
|
||||
data_lo = playmark_asciitohex((playmark_PICROM_HEX[src_pos + 3]));
|
||||
data |= (data_hi << 12) | (data_lo << 8);
|
||||
@ -1453,10 +1531,10 @@ static DRIVER_INIT( bigtwin )
|
||||
} while (src_pos < 0x2d4c); /* 0x2d4c is the size of the HEX rom loaded */
|
||||
}
|
||||
|
||||
GAME( 1995, bigtwin, 0, bigtwin, bigtwin, bigtwin, ROT0, "Playmark", "Big Twin", GAME_NO_COCKTAIL )
|
||||
GAME( 1995, wbeachvl, 0, wbeachvl, wbeachvl, 0, ROT0, "Playmark", "World Beach Volley (set 1)", GAME_NO_COCKTAIL | GAME_NO_SOUND )
|
||||
GAME( 1995, wbeachvl2,wbeachvl, wbeachvl, wbeachvl, 0, ROT0, "Playmark", "World Beach Volley (set 2)", GAME_NO_COCKTAIL | GAME_NO_SOUND )
|
||||
GAME( 1996, excelsr, 0, excelsr, excelsr, bigtwin, ROT0, "Playmark", "Excelsior", 0 )
|
||||
GAME( 1995, hotmind, 0, hotmind, hotmind, bigtwin, ROT0, "Playmark", "Hot Mind", 0 )
|
||||
GAME( 1994, hrdtimes, 0, hrdtimes, hrdtimes, 0, ROT0, "Playmark", "Hard Times (set 1)", GAME_NO_SOUND )
|
||||
GAME( 1994, hrdtimesa,hrdtimes, hrdtimes, hrdtimes, 0, ROT0, "Playmark", "Hard Times (set 2)", GAME_NO_SOUND )
|
||||
GAME( 1995, bigtwin, 0, bigtwin, bigtwin, bigtwin, ROT0, "Playmark", "Big Twin", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE )
|
||||
GAME( 1995, wbeachvl, 0, wbeachvl, wbeachvl, 0, ROT0, "Playmark", "World Beach Volley (set 1)", GAME_NO_COCKTAIL | GAME_NO_SOUND | GAME_SUPPORTS_SAVE )
|
||||
GAME( 1995, wbeachvl2, wbeachvl, wbeachvl, wbeachvl, 0, ROT0, "Playmark", "World Beach Volley (set 2)", GAME_NO_COCKTAIL | GAME_NO_SOUND | GAME_SUPPORTS_SAVE )
|
||||
GAME( 1996, excelsr, 0, excelsr, excelsr, bigtwin, ROT0, "Playmark", "Excelsior", GAME_SUPPORTS_SAVE )
|
||||
GAME( 1995, hotmind, 0, hotmind, hotmind, bigtwin, ROT0, "Playmark", "Hot Mind", GAME_SUPPORTS_SAVE )
|
||||
GAME( 1994, hrdtimes, 0, hrdtimes, hrdtimes, 0, ROT0, "Playmark", "Hard Times (set 1)", GAME_NO_SOUND | GAME_SUPPORTS_SAVE )
|
||||
GAME( 1994, hrdtimesa, hrdtimes, hrdtimes, hrdtimes, 0, ROT0, "Playmark", "Hard Times (set 2)", GAME_NO_SOUND | GAME_SUPPORTS_SAVE )
|
||||
|
@ -19,14 +19,6 @@ Magic Sticks:
|
||||
#include "sound/okim6295.h"
|
||||
#include "includes/playmark.h"
|
||||
|
||||
static tilemap_t *bg_tilemap;
|
||||
static UINT16 *magicstk_videoram;
|
||||
static int magicstk_tilebank;
|
||||
|
||||
static int bg_yoffset;
|
||||
static int xoffset;
|
||||
static int yoffset;
|
||||
|
||||
static const eeprom_interface eeprom_intf =
|
||||
{
|
||||
6, /* address bits */
|
||||
@ -44,7 +36,7 @@ static WRITE16_DEVICE_HANDLER( magicstk_coin_eeprom_w )
|
||||
{
|
||||
if (ACCESSING_BITS_0_7)
|
||||
{
|
||||
coin_counter_w(device->machine, 0,data & 0x20);
|
||||
coin_counter_w(device->machine, 0, data & 0x20);
|
||||
|
||||
eeprom_set_cs_line(device, (data & 8) ? CLEAR_LINE : ASSERT_LINE);
|
||||
eeprom_write_bit(device, data & 2);
|
||||
@ -54,26 +46,30 @@ static WRITE16_DEVICE_HANDLER( magicstk_coin_eeprom_w )
|
||||
|
||||
static WRITE16_HANDLER( magicstk_bgvideoram_w )
|
||||
{
|
||||
COMBINE_DATA(&magicstk_videoram[offset]);
|
||||
tilemap_mark_tile_dirty(bg_tilemap,offset);
|
||||
playmark_state *state = (playmark_state *)space->machine->driver_data;
|
||||
|
||||
COMBINE_DATA(&state->videoram1[offset]);
|
||||
tilemap_mark_tile_dirty(state->bg_tilemap, offset);
|
||||
}
|
||||
|
||||
static WRITE16_HANDLER( tile_banking_w )
|
||||
{
|
||||
if(((data >> 12) & 0x0f) != magicstk_tilebank)
|
||||
playmark_state *state = (playmark_state *)space->machine->driver_data;
|
||||
|
||||
if (((data >> 12) & 0x0f) != state->tilebank)
|
||||
{
|
||||
magicstk_tilebank = (data >> 12) & 0x0f;
|
||||
tilemap_mark_all_tiles_dirty(bg_tilemap);
|
||||
state->tilebank = (data >> 12) & 0x0f;
|
||||
tilemap_mark_all_tiles_dirty(state->bg_tilemap);
|
||||
}
|
||||
}
|
||||
|
||||
static WRITE16_DEVICE_HANDLER( oki_banking )
|
||||
{
|
||||
if(data & 3)
|
||||
if (data & 3)
|
||||
{
|
||||
int addr = 0x40000 * ((data & 3) - 1);
|
||||
|
||||
if(addr < memory_region_length(device->machine, "oki"))
|
||||
if (addr < memory_region_length(device->machine, "oki"))
|
||||
okim6295_set_bank_base(device, addr);
|
||||
}
|
||||
}
|
||||
@ -84,7 +80,7 @@ static ADDRESS_MAP_START( magicstk_main_map, ADDRESS_SPACE_PROGRAM, 16 )
|
||||
AM_RANGE(0x094000, 0x094001) AM_WRITENOP
|
||||
AM_RANGE(0x094002, 0x094003) AM_WRITENOP
|
||||
AM_RANGE(0x094004, 0x094005) AM_WRITE(tile_banking_w)
|
||||
AM_RANGE(0x098180, 0x09917f) AM_RAM_WRITE(magicstk_bgvideoram_w) AM_BASE(&magicstk_videoram)
|
||||
AM_RANGE(0x098180, 0x09917f) AM_RAM_WRITE(magicstk_bgvideoram_w) AM_BASE_MEMBER(playmark_state, videoram1)
|
||||
AM_RANGE(0x0c2010, 0x0c2011) AM_READ_PORT("IN0")
|
||||
AM_RANGE(0x0c2012, 0x0c2013) AM_READ_PORT("IN1")
|
||||
AM_RANGE(0x0c2014, 0x0c2015) AM_READ_PORT("IN2") AM_DEVWRITE("eeprom", magicstk_coin_eeprom_w)
|
||||
@ -94,7 +90,7 @@ static ADDRESS_MAP_START( magicstk_main_map, ADDRESS_SPACE_PROGRAM, 16 )
|
||||
AM_RANGE(0x0c201e, 0x0c201f) AM_DEVREADWRITE8("oki", okim6295_r, okim6295_w, 0x00ff)
|
||||
AM_RANGE(0x0c4000, 0x0c4001) AM_WRITENOP
|
||||
AM_RANGE(0x0e0000, 0x0fffff) AM_RAM
|
||||
AM_RANGE(0x100000, 0x100fff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram)
|
||||
AM_RANGE(0x100000, 0x100fff) AM_RAM AM_BASE_SIZE_MEMBER(playmark_state, spriteram, spriteram_size)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( powerbal_main_map, ADDRESS_SPACE_PROGRAM, 16 )
|
||||
@ -103,7 +99,7 @@ static ADDRESS_MAP_START( powerbal_main_map, ADDRESS_SPACE_PROGRAM, 16 )
|
||||
AM_RANGE(0x094000, 0x094001) AM_WRITENOP
|
||||
AM_RANGE(0x094002, 0x094003) AM_WRITENOP
|
||||
AM_RANGE(0x094004, 0x094005) AM_WRITE(tile_banking_w)
|
||||
AM_RANGE(0x098000, 0x098fff) AM_RAM_WRITE(magicstk_bgvideoram_w) AM_BASE(&magicstk_videoram)
|
||||
AM_RANGE(0x098000, 0x098fff) AM_RAM_WRITE(magicstk_bgvideoram_w) AM_BASE_MEMBER(playmark_state, videoram1)
|
||||
AM_RANGE(0x099000, 0x09bfff) AM_RAM // not used
|
||||
AM_RANGE(0x0c2010, 0x0c2011) AM_READ_PORT("IN0")
|
||||
AM_RANGE(0x0c2012, 0x0c2013) AM_READ_PORT("IN1")
|
||||
@ -114,7 +110,7 @@ static ADDRESS_MAP_START( powerbal_main_map, ADDRESS_SPACE_PROGRAM, 16 )
|
||||
AM_RANGE(0x0c201e, 0x0c201f) AM_DEVREADWRITE8("oki", okim6295_r, okim6295_w, 0x00ff)
|
||||
AM_RANGE(0x0c4000, 0x0c4001) AM_WRITENOP
|
||||
AM_RANGE(0x0f0000, 0x0fffff) AM_RAM
|
||||
AM_RANGE(0x101000, 0x101fff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram)
|
||||
AM_RANGE(0x101000, 0x101fff) AM_RAM AM_BASE_SIZE_MEMBER(playmark_state, spriteram, spriteram_size)
|
||||
AM_RANGE(0x102000, 0x10200d) AM_WRITENOP // not used scroll regs?
|
||||
AM_RANGE(0x103000, 0x103fff) AM_RAM
|
||||
ADDRESS_MAP_END
|
||||
@ -381,54 +377,62 @@ INPUT_PORTS_END
|
||||
|
||||
static TILE_GET_INFO( powerbal_get_bg_tile_info )
|
||||
{
|
||||
int code = (magicstk_videoram[tile_index] & 0x07ff) + magicstk_tilebank * 0x800;
|
||||
int colr = magicstk_videoram[tile_index] & 0xf000;
|
||||
playmark_state *state = (playmark_state *)machine->driver_data;
|
||||
int code = (state->videoram1[tile_index] & 0x07ff) + state->tilebank * 0x800;
|
||||
int colr = state->videoram1[tile_index] & 0xf000;
|
||||
|
||||
if (magicstk_videoram[tile_index] & 0x800) code |= 0x8000;
|
||||
if (state->videoram1[tile_index] & 0x800)
|
||||
code |= 0x8000;
|
||||
|
||||
SET_TILE_INFO(1,code,colr >> 12,0);
|
||||
SET_TILE_INFO(1, code, colr >> 12, 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 )
|
||||
{
|
||||
UINT16 *spriteram16 = machine->generic.spriteram.u16;
|
||||
playmark_state *state = (playmark_state *)machine->driver_data;
|
||||
UINT16 *spriteram = state->spriteram;
|
||||
int offs;
|
||||
int height = machine->gfx[0]->height;
|
||||
|
||||
for (offs = 4;offs < machine->generic.spriteram_size/2;offs += 4)
|
||||
for (offs = 4; offs < state->spriteram_size / 2; offs += 4)
|
||||
{
|
||||
int sx,sy,code,color,flipx;
|
||||
int sx, sy, code, color, flipx;
|
||||
|
||||
sy = spriteram16[offs+3-4]; /* typical Playmark style... */
|
||||
if (sy & 0x8000) return; /* end of list marker */
|
||||
sy = spriteram[offs + 3 - 4]; /* typical Playmark style... */
|
||||
if (sy & 0x8000)
|
||||
return; /* end of list marker */
|
||||
|
||||
flipx = sy & 0x4000;
|
||||
sx = (spriteram16[offs+1] & 0x01ff) - 16-7;
|
||||
sy = (256-8-height - sy) & 0xff;
|
||||
code = spriteram16[offs+2];
|
||||
color = (spriteram16[offs+1] & 0xf000) >> 12;
|
||||
sx = (spriteram[offs + 1] & 0x01ff) - 16 - 7;
|
||||
sy = (256 - 8 - height - sy) & 0xff;
|
||||
code = spriteram[offs + 2];
|
||||
color = (spriteram[offs + 1] & 0xf000) >> 12;
|
||||
|
||||
drawgfx_transpen(bitmap,cliprect,machine->gfx[0],
|
||||
code,
|
||||
color,
|
||||
flipx,0,
|
||||
sx + xoffset,sy + yoffset,0);
|
||||
sx + state->xoffset,sy + state->yoffset,0);
|
||||
}
|
||||
}
|
||||
|
||||
static VIDEO_START( powerbal )
|
||||
{
|
||||
bg_tilemap = tilemap_create(machine, powerbal_get_bg_tile_info,tilemap_scan_rows,8, 8,64,32);
|
||||
playmark_state *state = (playmark_state *)machine->driver_data;
|
||||
|
||||
xoffset = -20;
|
||||
state->bg_tilemap = tilemap_create(machine, powerbal_get_bg_tile_info, tilemap_scan_rows, 8, 8, 64, 32);
|
||||
|
||||
tilemap_set_scrolly(bg_tilemap, 0, bg_yoffset);
|
||||
state->xoffset = -20;
|
||||
|
||||
tilemap_set_scrolly(state->bg_tilemap, 0, state->bg_yoffset);
|
||||
}
|
||||
|
||||
static VIDEO_UPDATE( powerbal )
|
||||
{
|
||||
tilemap_draw(bitmap,cliprect,bg_tilemap,0,0);
|
||||
draw_sprites(screen->machine,bitmap,cliprect);
|
||||
playmark_state *state = (playmark_state *)screen->machine->driver_data;
|
||||
|
||||
tilemap_draw(bitmap, cliprect, state->bg_tilemap, 0, 0);
|
||||
draw_sprites(screen->machine, bitmap, cliprect);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -463,12 +467,35 @@ static GFXDECODE_START( powerbal )
|
||||
GFXDECODE_ENTRY( "gfx1", 0, magicstk_charlayout, 0x000, 16 ) /* colors 0x000-0x0ff */
|
||||
GFXDECODE_END
|
||||
|
||||
|
||||
|
||||
static MACHINE_START( powerbal )
|
||||
{
|
||||
playmark_state *state = (playmark_state *)machine->driver_data;
|
||||
|
||||
state_save_register_global(machine, state->tilebank);
|
||||
}
|
||||
|
||||
static MACHINE_RESET( powerbal )
|
||||
{
|
||||
playmark_state *state = (playmark_state *)machine->driver_data;
|
||||
|
||||
state->tilebank = 0;
|
||||
}
|
||||
|
||||
static MACHINE_DRIVER_START( powerbal )
|
||||
|
||||
/* driver data */
|
||||
MDRV_DRIVER_DATA(playmark_state)
|
||||
|
||||
/* basic machine hardware */
|
||||
MDRV_CPU_ADD("maincpu", M68000, 12000000) /* 12 MHz */
|
||||
MDRV_CPU_PROGRAM_MAP(powerbal_main_map)
|
||||
MDRV_CPU_VBLANK_INT("screen", irq2_line_hold)
|
||||
|
||||
MDRV_MACHINE_START(powerbal)
|
||||
MDRV_MACHINE_RESET(powerbal)
|
||||
|
||||
/* video hardware */
|
||||
MDRV_SCREEN_ADD("screen", RASTER)
|
||||
MDRV_SCREEN_REFRESH_RATE(61)
|
||||
@ -492,6 +519,10 @@ static MACHINE_DRIVER_START( powerbal )
|
||||
MACHINE_DRIVER_END
|
||||
|
||||
static MACHINE_DRIVER_START( magicstk )
|
||||
|
||||
/* driver data */
|
||||
MDRV_DRIVER_DATA(playmark_state)
|
||||
|
||||
/* basic machine hardware */
|
||||
MDRV_CPU_ADD("maincpu", M68000, 12000000) /* 12 MHz */
|
||||
MDRV_CPU_PROGRAM_MAP(magicstk_main_map)
|
||||
@ -500,6 +531,9 @@ static MACHINE_DRIVER_START( magicstk )
|
||||
MDRV_EEPROM_ADD("eeprom", eeprom_intf)
|
||||
MDRV_EEPROM_DEFAULT_VALUE(0)
|
||||
|
||||
MDRV_MACHINE_START(powerbal)
|
||||
MDRV_MACHINE_RESET(powerbal)
|
||||
|
||||
/* video hardware */
|
||||
MDRV_SCREEN_ADD("screen", RASTER)
|
||||
MDRV_SCREEN_REFRESH_RATE(61)
|
||||
@ -656,14 +690,18 @@ ROM_END
|
||||
|
||||
static DRIVER_INIT( powerbal )
|
||||
{
|
||||
bg_yoffset = 16;
|
||||
yoffset = -8;
|
||||
playmark_state *state = (playmark_state *)machine->driver_data;
|
||||
|
||||
state->bg_yoffset = 16;
|
||||
state->yoffset = -8;
|
||||
}
|
||||
|
||||
static DRIVER_INIT( magicstk )
|
||||
{
|
||||
bg_yoffset = 0;
|
||||
yoffset = -5;
|
||||
playmark_state *state = (playmark_state *)machine->driver_data;
|
||||
|
||||
state->bg_yoffset = 0;
|
||||
state->yoffset = -5;
|
||||
}
|
||||
|
||||
/*************************
|
||||
@ -671,6 +709,6 @@ static DRIVER_INIT( magicstk )
|
||||
*************************/
|
||||
|
||||
/* YEAR NAME PARENT MACHINE INPUT INIT ROT COMPANY FULLNAME FLAGS */
|
||||
GAME( 1994, powerbal, 0, powerbal, powerbal, powerbal, ROT0, "Playmark", "Power Balls", 0 )
|
||||
GAME( 1995, magicstk, 0, magicstk, magicstk, magicstk, ROT0, "Playmark", "Magic Sticks", 0 )
|
||||
GAME( 1995, hotminda, hotmind, magicstk, hotminda, magicstk, ROT0, "Playmark", "Hot Mind (adjustable prize)", 0 )
|
||||
GAME( 1994, powerbal, 0, powerbal, powerbal, powerbal, ROT0, "Playmark", "Power Balls", GAME_SUPPORTS_SAVE )
|
||||
GAME( 1995, magicstk, 0, magicstk, magicstk, magicstk, ROT0, "Playmark", "Magic Sticks", GAME_SUPPORTS_SAVE )
|
||||
GAME( 1995, hotminda, hotmind, magicstk, hotminda, magicstk, ROT0, "Playmark", "Hot Mind (adjustable prize)", GAME_SUPPORTS_SAVE )
|
||||
|
@ -28,18 +28,9 @@
|
||||
#include "cpu/m68000/m68000.h"
|
||||
#include "cpu/z80/z80.h"
|
||||
#include "cpu/m6805/m6805.h"
|
||||
#include "includes/pushman.h"
|
||||
#include "sound/2203intf.h"
|
||||
|
||||
VIDEO_UPDATE( pushman );
|
||||
WRITE16_HANDLER( pushman_scroll_w );
|
||||
WRITE16_HANDLER( pushman_videoram_w );
|
||||
VIDEO_START( pushman );
|
||||
|
||||
static UINT8 shared_ram[8];
|
||||
static UINT16 latch,new_latch=0;
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
static WRITE16_HANDLER( pushman_flipscreen_w )
|
||||
{
|
||||
if (ACCESSING_BITS_8_15)
|
||||
@ -58,68 +49,81 @@ static WRITE16_HANDLER( pushman_control_w )
|
||||
|
||||
static READ16_HANDLER( pushman_68705_r )
|
||||
{
|
||||
pushman_state *state = (pushman_state *)space->machine->driver_data;
|
||||
|
||||
if (offset == 0)
|
||||
return latch;
|
||||
return state->latch;
|
||||
|
||||
if (offset == 3 && new_latch) { new_latch = 0; return 0; }
|
||||
if (offset == 3 && !new_latch) return 0xff;
|
||||
if (offset == 3 && state->new_latch)
|
||||
{
|
||||
state->new_latch = 0;
|
||||
return 0;
|
||||
}
|
||||
if (offset == 3 && !state->new_latch)
|
||||
return 0xff;
|
||||
|
||||
return (shared_ram[2 * offset + 1] << 8) + shared_ram[2 * offset];
|
||||
return (state->shared_ram[2 * offset + 1] << 8) + state->shared_ram[2 * offset];
|
||||
}
|
||||
|
||||
static WRITE16_HANDLER( pushman_68705_w )
|
||||
{
|
||||
pushman_state *state = (pushman_state *)space->machine->driver_data;
|
||||
|
||||
if (ACCESSING_BITS_8_15)
|
||||
shared_ram[2 * offset] = data >> 8;
|
||||
state->shared_ram[2 * offset] = data >> 8;
|
||||
if (ACCESSING_BITS_0_7)
|
||||
shared_ram[2 * offset + 1] = data & 0xff;
|
||||
state->shared_ram[2 * offset + 1] = data & 0xff;
|
||||
|
||||
if (offset == 1)
|
||||
{
|
||||
cputag_set_input_line(space->machine, "mcu", M68705_IRQ_LINE, HOLD_LINE);
|
||||
cpu_set_input_line(state->mcu, M68705_IRQ_LINE, HOLD_LINE);
|
||||
cpu_spin(space->cpu);
|
||||
new_latch = 0;
|
||||
state->new_latch = 0;
|
||||
}
|
||||
}
|
||||
|
||||
/* ElSemi - Bouncing balls protection. */
|
||||
static READ16_HANDLER( bballs_68705_r )
|
||||
{
|
||||
pushman_state *state = (pushman_state *)space->machine->driver_data;
|
||||
|
||||
if (offset == 0)
|
||||
return latch;
|
||||
if(offset == 3 && new_latch)
|
||||
return state->latch;
|
||||
if (offset == 3 && state->new_latch)
|
||||
{
|
||||
new_latch = 0;
|
||||
state->new_latch = 0;
|
||||
return 0;
|
||||
}
|
||||
if(offset == 3 && !new_latch)
|
||||
if (offset == 3 && !state->new_latch)
|
||||
return 0xff;
|
||||
|
||||
return (shared_ram[2 * offset + 1] << 8) + shared_ram[2 * offset];
|
||||
return (state->shared_ram[2 * offset + 1] << 8) + state->shared_ram[2 * offset];
|
||||
}
|
||||
|
||||
static WRITE16_HANDLER( bballs_68705_w )
|
||||
{
|
||||
if (ACCESSING_BITS_8_15)
|
||||
shared_ram[2 * offset] = data >> 8;
|
||||
if (ACCESSING_BITS_0_7)
|
||||
shared_ram[2 * offset + 1] = data & 0xff;
|
||||
pushman_state *state = (pushman_state *)space->machine->driver_data;
|
||||
|
||||
if(offset == 0)
|
||||
if (ACCESSING_BITS_8_15)
|
||||
state->shared_ram[2 * offset] = data >> 8;
|
||||
if (ACCESSING_BITS_0_7)
|
||||
state->shared_ram[2 * offset + 1] = data & 0xff;
|
||||
|
||||
if (offset == 0)
|
||||
{
|
||||
latch = 0;
|
||||
if(shared_ram[0] <= 0xf)
|
||||
state->latch = 0;
|
||||
if (state->shared_ram[0] <= 0xf)
|
||||
{
|
||||
latch = shared_ram[0] << 2;
|
||||
if(shared_ram[1])
|
||||
latch |= 2;
|
||||
new_latch = 1;
|
||||
state->latch = state->shared_ram[0] << 2;
|
||||
if (state->shared_ram[1])
|
||||
state->latch |= 2;
|
||||
state->new_latch = 1;
|
||||
}
|
||||
else if(shared_ram[0])
|
||||
else if (state->shared_ram[0])
|
||||
{
|
||||
if(shared_ram[1])
|
||||
latch |= 2;
|
||||
new_latch = 1;
|
||||
if (state->shared_ram[1])
|
||||
state->latch |= 2;
|
||||
state->new_latch = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -127,42 +131,40 @@ static WRITE16_HANDLER( bballs_68705_w )
|
||||
|
||||
static READ8_HANDLER( pushman_68000_r )
|
||||
{
|
||||
return shared_ram[offset];
|
||||
pushman_state *state = (pushman_state *)space->machine->driver_data;
|
||||
return state->shared_ram[offset];
|
||||
}
|
||||
|
||||
static WRITE8_HANDLER( pushman_68000_w )
|
||||
{
|
||||
if (offset == 2 && (shared_ram[2] & 2) == 0 && data & 2)
|
||||
{
|
||||
latch = (shared_ram[1] << 8) | shared_ram[0];
|
||||
new_latch = 1;
|
||||
}
|
||||
shared_ram[offset] = data;
|
||||
}
|
||||
pushman_state *state = (pushman_state *)space->machine->driver_data;
|
||||
|
||||
static MACHINE_RESET( bballs )
|
||||
{
|
||||
latch = 0x400;
|
||||
if (offset == 2 && (state->shared_ram[2] & 2) == 0 && data & 2)
|
||||
{
|
||||
state->latch = (state->shared_ram[1] << 8) | state->shared_ram[0];
|
||||
state->new_latch = 1;
|
||||
}
|
||||
state->shared_ram[offset] = data;
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
static ADDRESS_MAP_START( pushman_map, ADDRESS_SPACE_PROGRAM, 16 )
|
||||
AM_RANGE(0x000000, 0x01ffff) AM_ROM
|
||||
AM_RANGE(0x060000, 0x060007) AM_READWRITE(pushman_68705_r,pushman_68705_w)
|
||||
AM_RANGE(0xfe0800, 0xfe17ff) AM_RAM AM_BASE_GENERIC(spriteram)
|
||||
AM_RANGE(0x060000, 0x060007) AM_READWRITE(pushman_68705_r, pushman_68705_w)
|
||||
AM_RANGE(0xfe0800, 0xfe17ff) AM_RAM AM_BASE_MEMBER(pushman_state, spriteram)
|
||||
AM_RANGE(0xfe4000, 0xfe4001) AM_READ_PORT("INPUTS") AM_WRITE(pushman_flipscreen_w)
|
||||
AM_RANGE(0xfe4002, 0xfe4003) AM_READ_PORT("SYSTEM") AM_WRITE(pushman_control_w)
|
||||
AM_RANGE(0xfe4004, 0xfe4005) AM_READ_PORT("DSW")
|
||||
AM_RANGE(0xfe8000, 0xfe8003) AM_WRITE(pushman_scroll_w)
|
||||
AM_RANGE(0xfe800e, 0xfe800f) AM_WRITENOP /* ? */
|
||||
AM_RANGE(0xfec000, 0xfec7ff) AM_RAM_WRITE(pushman_videoram_w) AM_BASE_GENERIC(videoram)
|
||||
AM_RANGE(0xfec000, 0xfec7ff) AM_RAM_WRITE(pushman_videoram_w) AM_BASE_MEMBER(pushman_state, videoram)
|
||||
AM_RANGE(0xff8000, 0xff87ff) AM_RAM_WRITE(paletteram16_xxxxRRRRGGGGBBBB_word_w) AM_BASE_GENERIC(paletteram)
|
||||
AM_RANGE(0xffc000, 0xffffff) AM_RAM
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( mcu_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
AM_RANGE(0x0000, 0x0007) AM_READWRITE(pushman_68000_r,pushman_68000_w)
|
||||
AM_RANGE(0x0000, 0x0007) AM_READWRITE(pushman_68000_r, pushman_68000_w)
|
||||
AM_RANGE(0x0010, 0x007f) AM_RAM
|
||||
AM_RANGE(0x0080, 0x0fff) AM_ROM
|
||||
ADDRESS_MAP_END
|
||||
@ -182,14 +184,14 @@ ADDRESS_MAP_END
|
||||
static ADDRESS_MAP_START( bballs_map, ADDRESS_SPACE_PROGRAM, 16 )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xfffff)
|
||||
AM_RANGE(0x00000, 0x1ffff) AM_ROM
|
||||
AM_RANGE(0x60000, 0x60007) AM_READWRITE(bballs_68705_r,bballs_68705_w)
|
||||
AM_RANGE(0xe0800, 0xe17ff) AM_RAM AM_BASE_GENERIC(spriteram)
|
||||
AM_RANGE(0x60000, 0x60007) AM_READWRITE(bballs_68705_r, bballs_68705_w)
|
||||
AM_RANGE(0xe0800, 0xe17ff) AM_RAM AM_BASE_MEMBER(pushman_state, spriteram)
|
||||
AM_RANGE(0xe4000, 0xe4001) AM_READ_PORT("INPUTS") AM_WRITE(pushman_flipscreen_w)
|
||||
AM_RANGE(0xe4002, 0xe4003) AM_READ_PORT("SYSTEM") AM_WRITE(pushman_control_w)
|
||||
AM_RANGE(0xe4004, 0xe4005) AM_READ_PORT("DSW")
|
||||
AM_RANGE(0xe8000, 0xe8003) AM_WRITE(pushman_scroll_w)
|
||||
AM_RANGE(0xe800e, 0xe800f) AM_WRITENOP /* ? */
|
||||
AM_RANGE(0xec000, 0xec7ff) AM_RAM_WRITE(pushman_videoram_w) AM_BASE_GENERIC(videoram)
|
||||
AM_RANGE(0xec000, 0xec7ff) AM_RAM_WRITE(pushman_videoram_w) AM_BASE_MEMBER(pushman_state, videoram)
|
||||
AM_RANGE(0xf8000, 0xf87ff) AM_RAM_WRITE(paletteram16_xxxxRRRRGGGGBBBB_word_w) AM_BASE_GENERIC(paletteram)
|
||||
AM_RANGE(0xfc000, 0xfffff) AM_RAM
|
||||
ADDRESS_MAP_END
|
||||
@ -401,22 +403,52 @@ GFXDECODE_END
|
||||
|
||||
static void irqhandler(running_device *device, int irq)
|
||||
{
|
||||
cputag_set_input_line(device->machine, "audiocpu", 0, irq ? ASSERT_LINE : CLEAR_LINE);
|
||||
pushman_state *state = (pushman_state *)device->machine->driver_data;
|
||||
cpu_set_input_line(state->audiocpu, 0, irq ? ASSERT_LINE : CLEAR_LINE);
|
||||
}
|
||||
|
||||
static const ym2203_interface ym2203_config =
|
||||
{
|
||||
{
|
||||
AY8910_LEGACY_OUTPUT,
|
||||
AY8910_DEFAULT_LOADS,
|
||||
DEVCB_NULL, DEVCB_NULL, DEVCB_NULL, DEVCB_NULL,
|
||||
AY8910_LEGACY_OUTPUT,
|
||||
AY8910_DEFAULT_LOADS,
|
||||
DEVCB_NULL, DEVCB_NULL, DEVCB_NULL, DEVCB_NULL,
|
||||
},
|
||||
irqhandler
|
||||
};
|
||||
|
||||
|
||||
static MACHINE_START( pushman )
|
||||
{
|
||||
pushman_state *state = (pushman_state *)machine->driver_data;
|
||||
|
||||
state->maincpu = devtag_get_device(machine, "maincpu");
|
||||
state->audiocpu = devtag_get_device(machine, "audiocpu");
|
||||
state->mcu = devtag_get_device(machine, "mcu");
|
||||
|
||||
state_save_register_global_array(machine, state->control);
|
||||
state_save_register_global_array(machine, state->shared_ram);
|
||||
state_save_register_global(machine, state->latch);
|
||||
state_save_register_global(machine, state->new_latch);
|
||||
}
|
||||
|
||||
static MACHINE_RESET( pushman )
|
||||
{
|
||||
pushman_state *state = (pushman_state *)machine->driver_data;
|
||||
|
||||
state->latch = 0;
|
||||
state->new_latch = 0;
|
||||
state->control[0] = 0;
|
||||
state->control[1] = 0;
|
||||
|
||||
memset(state->shared_ram, 0, ARRAY_LENGTH(state->shared_ram));
|
||||
}
|
||||
|
||||
static MACHINE_DRIVER_START( pushman )
|
||||
|
||||
/* driver data */
|
||||
MDRV_DRIVER_DATA(pushman_state)
|
||||
|
||||
/* basic machine hardware */
|
||||
MDRV_CPU_ADD("maincpu", M68000, 8000000)
|
||||
MDRV_CPU_PROGRAM_MAP(pushman_map)
|
||||
@ -432,6 +464,9 @@ static MACHINE_DRIVER_START( pushman )
|
||||
|
||||
MDRV_QUANTUM_TIME(HZ(3600))
|
||||
|
||||
MDRV_MACHINE_START(pushman)
|
||||
MDRV_MACHINE_RESET(pushman)
|
||||
|
||||
/* video hardware */
|
||||
MDRV_SCREEN_ADD("screen", RASTER)
|
||||
MDRV_SCREEN_REFRESH_RATE(60)
|
||||
@ -457,8 +492,20 @@ static MACHINE_DRIVER_START( pushman )
|
||||
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.40)
|
||||
MACHINE_DRIVER_END
|
||||
|
||||
static MACHINE_RESET( bballs )
|
||||
{
|
||||
pushman_state *state = (pushman_state *)machine->driver_data;
|
||||
|
||||
MACHINE_RESET_CALL(pushman);
|
||||
|
||||
state->latch = 0x400;
|
||||
}
|
||||
|
||||
static MACHINE_DRIVER_START( bballs )
|
||||
|
||||
/* driver data */
|
||||
MDRV_DRIVER_DATA(pushman_state)
|
||||
|
||||
/* basic machine hardware */
|
||||
MDRV_CPU_ADD("maincpu", M68000, 8000000)
|
||||
MDRV_CPU_PROGRAM_MAP(bballs_map)
|
||||
@ -470,6 +517,7 @@ static MACHINE_DRIVER_START( bballs )
|
||||
|
||||
MDRV_QUANTUM_TIME(HZ(3600))
|
||||
|
||||
MDRV_MACHINE_START(pushman)
|
||||
MDRV_MACHINE_RESET(bballs)
|
||||
|
||||
/* video hardware */
|
||||
@ -665,8 +713,8 @@ ROM_START( bballs )
|
||||
ROM_LOAD( "bb_prom.e9", 0x0000, 0x0100, CRC(ec80ae36) SHA1(397ec8fc1b106c8b8d4bf6798aa429e8768a101a) ) /* priority (not used) N82S129 BPROM */
|
||||
ROM_END
|
||||
|
||||
GAME( 1990, pushman, 0, pushman, pushman, 0, ROT0, "Comad", "Pushman (Korea, set 1)", 0 )
|
||||
GAME( 1990, pushmana, pushman, pushman, pushman, 0, ROT0, "Comad", "Pushman (Korea, set 2)", 0 )
|
||||
GAME( 1990, pushmans, pushman, pushman, pushman, 0, ROT0, "Comad (American Sammy license)", "Pushman (American Sammy license)", 0 )
|
||||
GAME( 1990, pushmant, pushman, pushman, pushman, 0, ROT0, "Comad (Top Tronic license)", "Pushman (Top Tronic license)", 0 )
|
||||
GAME( 1991, bballs, 0, bballs, bballs, 0, ROT0, "Comad", "Bouncing Balls", 0 )
|
||||
GAME( 1990, pushman, 0, pushman, pushman, 0, ROT0, "Comad", "Pushman (Korea, set 1)", GAME_SUPPORTS_SAVE )
|
||||
GAME( 1990, pushmana, pushman, pushman, pushman, 0, ROT0, "Comad", "Pushman (Korea, set 2)", GAME_SUPPORTS_SAVE )
|
||||
GAME( 1990, pushmans, pushman, pushman, pushman, 0, ROT0, "Comad (American Sammy license)", "Pushman (American Sammy license)", GAME_SUPPORTS_SAVE )
|
||||
GAME( 1990, pushmant, pushman, pushman, pushman, 0, ROT0, "Comad (Top Tronic license)", "Pushman (Top Tronic license)", GAME_SUPPORTS_SAVE )
|
||||
GAME( 1991, bballs, 0, bballs, bballs, 0, ROT0, "Comad", "Bouncing Balls", GAME_SUPPORTS_SAVE )
|
||||
|
@ -19,117 +19,138 @@
|
||||
#include "sound/okim6295.h"
|
||||
#include "machine/eeprom.h"
|
||||
|
||||
static UINT16 *bg_videoram, *mid_videoram, *txt_videoram, *tilemap_regs, *video_regs;
|
||||
static tilemap_t *mid_tilemap, *txt_tilemap;
|
||||
static int ticket = 0;
|
||||
class pzletime_state
|
||||
{
|
||||
public:
|
||||
static void *alloc(running_machine &machine) { return auto_alloc_clear(&machine, pzletime_state(machine)); }
|
||||
|
||||
pzletime_state(running_machine &machine) { }
|
||||
|
||||
/* memory pointers */
|
||||
UINT16 * bg_videoram;
|
||||
UINT16 * mid_videoram;
|
||||
UINT16 * txt_videoram;
|
||||
UINT16 * tilemap_regs;
|
||||
UINT16 * video_regs;
|
||||
UINT16 * spriteram;
|
||||
// UINT16 * paletteram; // currently this uses generic palette handling
|
||||
|
||||
/* video-related */
|
||||
tilemap_t *mid_tilemap, *txt_tilemap;
|
||||
|
||||
/* misc */
|
||||
int ticket;
|
||||
};
|
||||
|
||||
|
||||
static TILE_GET_INFO( get_mid_tile_info )
|
||||
{
|
||||
int tileno,colour;
|
||||
|
||||
tileno = mid_videoram[tile_index] & 0x0fff;
|
||||
colour = mid_videoram[tile_index] & 0xf000;
|
||||
pzletime_state *state = (pzletime_state *)machine->driver_data;
|
||||
int tileno = state->mid_videoram[tile_index] & 0x0fff;
|
||||
int colour = state->mid_videoram[tile_index] & 0xf000;
|
||||
colour = colour >> 12;
|
||||
SET_TILE_INFO(2,tileno,colour,0);
|
||||
SET_TILE_INFO(2, tileno, colour, 0);
|
||||
}
|
||||
|
||||
static TILE_GET_INFO( get_txt_tile_info )
|
||||
{
|
||||
int tileno,colour;
|
||||
|
||||
tileno = txt_videoram[tile_index] & 0x0fff;
|
||||
colour = txt_videoram[tile_index] & 0xf000;
|
||||
pzletime_state *state = (pzletime_state *)machine->driver_data;
|
||||
int tileno = state->txt_videoram[tile_index] & 0x0fff;
|
||||
int colour = state->txt_videoram[tile_index] & 0xf000;
|
||||
colour = colour >> 12;
|
||||
|
||||
SET_TILE_INFO(0,tileno,colour,0);
|
||||
SET_TILE_INFO(0, tileno, colour, 0);
|
||||
|
||||
tileinfo->category = (colour & 8) ? 1 : 0;
|
||||
tileinfo->category = BIT(colour, 3);
|
||||
}
|
||||
|
||||
static VIDEO_START( pzletime )
|
||||
{
|
||||
mid_tilemap = tilemap_create(machine, get_mid_tile_info,tilemap_scan_cols, 16,16,64,16);
|
||||
txt_tilemap = tilemap_create(machine, get_txt_tile_info,tilemap_scan_rows, 8, 8,64,32);
|
||||
pzletime_state *state = (pzletime_state *)machine->driver_data;
|
||||
|
||||
tilemap_set_transparent_pen(mid_tilemap,0);
|
||||
tilemap_set_transparent_pen(txt_tilemap,0);
|
||||
state->mid_tilemap = tilemap_create(machine, get_mid_tile_info, tilemap_scan_cols, 16, 16, 64, 16);
|
||||
state->txt_tilemap = tilemap_create(machine, get_txt_tile_info, tilemap_scan_rows, 8, 8, 64, 32);
|
||||
|
||||
tilemap_set_transparent_pen(state->mid_tilemap, 0);
|
||||
tilemap_set_transparent_pen(state->txt_tilemap, 0);
|
||||
}
|
||||
|
||||
static VIDEO_UPDATE( pzletime )
|
||||
{
|
||||
pzletime_state *state = (pzletime_state *)screen->machine->driver_data;
|
||||
int count;
|
||||
int y,x;
|
||||
int y, x;
|
||||
|
||||
bitmap_fill(bitmap, cliprect, screen->machine->pens[0]); //bg pen
|
||||
|
||||
tilemap_set_scrolly(txt_tilemap, 0, tilemap_regs[0]-3);
|
||||
tilemap_set_scrollx(txt_tilemap, 0, tilemap_regs[1]);
|
||||
tilemap_set_scrolly(state->txt_tilemap, 0, state->tilemap_regs[0] - 3);
|
||||
tilemap_set_scrollx(state->txt_tilemap, 0, state->tilemap_regs[1]);
|
||||
|
||||
tilemap_set_scrolly(mid_tilemap, 0, tilemap_regs[2]-3);
|
||||
tilemap_set_scrollx(mid_tilemap, 0, tilemap_regs[3]-7);
|
||||
tilemap_set_scrolly(state->mid_tilemap, 0, state->tilemap_regs[2] - 3);
|
||||
tilemap_set_scrollx(state->mid_tilemap, 0, state->tilemap_regs[3] - 7);
|
||||
|
||||
if(video_regs[2] & 1)
|
||||
if (state->video_regs[2] & 1)
|
||||
{
|
||||
count = 0;
|
||||
|
||||
for(y=255;y>=0;y--)
|
||||
for (y = 255; y >= 0; y--)
|
||||
{
|
||||
for(x=0;x<512;x++)
|
||||
for (x = 0; x < 512; x++)
|
||||
{
|
||||
if(bg_videoram[count] & 0x8000)
|
||||
{
|
||||
*BITMAP_ADDR16(bitmap, (y - 18) & 0xff, (x - 32) & 0x1ff) = 0x300 + (bg_videoram[count] & 0x7fff);
|
||||
}
|
||||
if (state->bg_videoram[count] & 0x8000)
|
||||
*BITMAP_ADDR16(bitmap, (y - 18) & 0xff, (x - 32) & 0x1ff) = 0x300 + (state->bg_videoram[count] & 0x7fff);
|
||||
|
||||
count++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
tilemap_draw(bitmap,cliprect,mid_tilemap, 0,0);
|
||||
tilemap_draw(bitmap, cliprect, state->mid_tilemap, 0, 0);
|
||||
|
||||
{
|
||||
UINT16 *spriteram16 = screen->machine->generic.spriteram.u16;
|
||||
int offs,spr_offs,colour,sx,sy;
|
||||
UINT16 *spriteram = state->spriteram;
|
||||
int offs, spr_offs, colour, sx, sy;
|
||||
|
||||
for(offs = 0; offs < 0x2000/2; offs += 4)
|
||||
for(offs = 0; offs < 0x2000 / 2; offs += 4)
|
||||
{
|
||||
if(spriteram16[offs+0] == 8)
|
||||
if(spriteram[offs + 0] == 8)
|
||||
break;
|
||||
|
||||
spr_offs = spriteram16[offs+3] & 0x0fff;
|
||||
sy = 0x200-(spriteram16[offs+0] & 0x1ff)-35;
|
||||
sx = (spriteram16[offs+1] & 0x1ff)-30;
|
||||
colour = (spriteram16[offs+0] & 0xf000)>>12;
|
||||
spr_offs = spriteram[offs + 3] & 0x0fff;
|
||||
sy = 0x200 - (spriteram[offs + 0] & 0x1ff) - 35;
|
||||
sx = (spriteram[offs + 1] & 0x1ff) - 30;
|
||||
colour = (spriteram[offs + 0] & 0xf000) >> 12;
|
||||
|
||||
// is spriteram16[offs+0] & 0x200 flipy? it's always set
|
||||
// is spriteram[offs + 0] & 0x200 flipy? it's always set
|
||||
|
||||
drawgfx_transpen(bitmap,cliprect,screen->machine->gfx[1],spr_offs,colour,0,1,sx,sy,0);
|
||||
drawgfx_transpen(bitmap, cliprect, screen->machine->gfx[1], spr_offs, colour, 0, 1, sx, sy, 0);
|
||||
}
|
||||
}
|
||||
|
||||
tilemap_draw(bitmap,cliprect,txt_tilemap,0,0);
|
||||
if((video_screen_get_frame_number(screen) % 16) != 0)
|
||||
tilemap_draw(bitmap,cliprect,txt_tilemap,1,0);
|
||||
tilemap_draw(bitmap, cliprect, state->txt_tilemap, 0, 0);
|
||||
if ((video_screen_get_frame_number(screen) % 16) != 0)
|
||||
tilemap_draw(bitmap, cliprect, state->txt_tilemap, 1, 0);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static WRITE16_HANDLER( mid_videoram_w )
|
||||
{
|
||||
COMBINE_DATA(&mid_videoram[offset]);
|
||||
tilemap_mark_tile_dirty(mid_tilemap,offset);
|
||||
pzletime_state *state = (pzletime_state *)space->machine->driver_data;
|
||||
COMBINE_DATA(&state->mid_videoram[offset]);
|
||||
tilemap_mark_tile_dirty(state->mid_tilemap, offset);
|
||||
}
|
||||
|
||||
static WRITE16_HANDLER( txt_videoram_w )
|
||||
{
|
||||
COMBINE_DATA(&txt_videoram[offset]);
|
||||
tilemap_mark_tile_dirty(txt_tilemap,offset);
|
||||
pzletime_state *state = (pzletime_state *)space->machine->driver_data;
|
||||
COMBINE_DATA(&state->txt_videoram[offset]);
|
||||
tilemap_mark_tile_dirty(state->txt_tilemap, offset);
|
||||
}
|
||||
|
||||
static WRITE16_DEVICE_HANDLER( eeprom_w )
|
||||
{
|
||||
if( ACCESSING_BITS_0_7 )
|
||||
if (ACCESSING_BITS_0_7)
|
||||
{
|
||||
eeprom_write_bit(device, data & 0x01);
|
||||
eeprom_set_cs_line(device, (data & 0x02) ? CLEAR_LINE : ASSERT_LINE );
|
||||
@ -139,35 +160,36 @@ static WRITE16_DEVICE_HANDLER( eeprom_w )
|
||||
|
||||
static WRITE16_HANDLER( ticket_w )
|
||||
{
|
||||
if( ACCESSING_BITS_0_7 )
|
||||
{
|
||||
ticket = data & 1;
|
||||
}
|
||||
pzletime_state *state = (pzletime_state *)space->machine->driver_data;
|
||||
|
||||
if (ACCESSING_BITS_0_7)
|
||||
state->ticket = data & 1;
|
||||
}
|
||||
|
||||
static WRITE16_HANDLER( video_regs_w )
|
||||
{
|
||||
pzletime_state *state = (pzletime_state *)space->machine->driver_data;
|
||||
int i;
|
||||
|
||||
COMBINE_DATA(&video_regs[offset]);
|
||||
COMBINE_DATA(&state->video_regs[offset]);
|
||||
|
||||
if(offset == 0)
|
||||
if (offset == 0)
|
||||
{
|
||||
if(video_regs[0] > 0)
|
||||
if (state->video_regs[0] > 0)
|
||||
{
|
||||
for (i=0;i<0x300;i++)
|
||||
for (i = 0; i < 0x300; i++)
|
||||
{
|
||||
palette_set_pen_contrast(space->machine, i, (double)0x8000/(double)video_regs[0]);
|
||||
palette_set_pen_contrast(space->machine, i, (double)0x8000/(double)state->video_regs[0]);
|
||||
}
|
||||
}
|
||||
}
|
||||
else if(offset == 1)
|
||||
else if (offset == 1)
|
||||
{
|
||||
if(video_regs[1] > 0)
|
||||
if (state->video_regs[1] > 0)
|
||||
{
|
||||
for (i=0x300;i<32768 + 0x300;i++)
|
||||
for (i = 0x300; i < 32768 + 0x300; i++)
|
||||
{
|
||||
palette_set_pen_contrast(space->machine, i, (double)0x8000/(double)video_regs[1]);
|
||||
palette_set_pen_contrast(space->machine, i, (double)0x8000/(double)state->video_regs[1]);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -180,19 +202,20 @@ static WRITE16_DEVICE_HANDLER( oki_bank_w )
|
||||
|
||||
static CUSTOM_INPUT( ticket_status_r )
|
||||
{
|
||||
return ticket && !(video_screen_get_frame_number(field->port->machine->primary_screen)%128);
|
||||
pzletime_state *state = (pzletime_state *)field->port->machine->driver_data;
|
||||
return (state->ticket && !(video_screen_get_frame_number(field->port->machine->primary_screen) % 128));
|
||||
}
|
||||
|
||||
static ADDRESS_MAP_START( pzletime_map, ADDRESS_SPACE_PROGRAM, 16 )
|
||||
AM_RANGE(0x000000, 0x3fffff) AM_ROM
|
||||
AM_RANGE(0x700000, 0x700005) AM_RAM_WRITE(video_regs_w) AM_BASE(&video_regs)
|
||||
AM_RANGE(0x700000, 0x700005) AM_RAM_WRITE(video_regs_w) AM_BASE_MEMBER(pzletime_state, video_regs)
|
||||
AM_RANGE(0x800000, 0x800001) AM_DEVREADWRITE8("oki", okim6295_r, okim6295_w, 0x00ff)
|
||||
AM_RANGE(0x900000, 0x9005ff) AM_RAM_WRITE(paletteram16_xRRRRRGGGGGBBBBB_word_w) AM_BASE_GENERIC(paletteram)
|
||||
AM_RANGE(0xa00000, 0xa00007) AM_RAM AM_BASE(&tilemap_regs)
|
||||
AM_RANGE(0xb00000, 0xb3ffff) AM_RAM AM_BASE(&bg_videoram)
|
||||
AM_RANGE(0xc00000, 0xc00fff) AM_RAM_WRITE(mid_videoram_w) AM_BASE(&mid_videoram)
|
||||
AM_RANGE(0xc01000, 0xc01fff) AM_RAM_WRITE(txt_videoram_w) AM_BASE(&txt_videoram)
|
||||
AM_RANGE(0xd00000, 0xd01fff) AM_RAM AM_BASE_GENERIC(spriteram)
|
||||
AM_RANGE(0xa00000, 0xa00007) AM_RAM AM_BASE_MEMBER(pzletime_state, tilemap_regs)
|
||||
AM_RANGE(0xb00000, 0xb3ffff) AM_RAM AM_BASE_MEMBER(pzletime_state, bg_videoram)
|
||||
AM_RANGE(0xc00000, 0xc00fff) AM_RAM_WRITE(mid_videoram_w) AM_BASE_MEMBER(pzletime_state, mid_videoram)
|
||||
AM_RANGE(0xc01000, 0xc01fff) AM_RAM_WRITE(txt_videoram_w) AM_BASE_MEMBER(pzletime_state, txt_videoram)
|
||||
AM_RANGE(0xd00000, 0xd01fff) AM_RAM AM_BASE_MEMBER(pzletime_state, spriteram)
|
||||
AM_RANGE(0xe00000, 0xe00001) AM_READ_PORT("INPUT") AM_DEVWRITE("eeprom", eeprom_w)
|
||||
AM_RANGE(0xe00002, 0xe00003) AM_READ_PORT("SYSTEM") AM_WRITE(ticket_w)
|
||||
AM_RANGE(0xe00004, 0xe00005) AM_DEVWRITE("oki", oki_bank_w)
|
||||
@ -266,17 +289,37 @@ static PALETTE_INIT( pzletime )
|
||||
/* first 0x300 colors are dynamic */
|
||||
|
||||
/* initialize 555 RGB lookup */
|
||||
for (i = 0;i < 32768;i++)
|
||||
palette_set_color_rgb(machine,i+0x300,pal5bit(i >> 10),pal5bit(i >> 5),pal5bit(i >> 0));
|
||||
for (i = 0; i < 32768; i++)
|
||||
palette_set_color_rgb(machine, i + 0x300, pal5bit(i >> 10), pal5bit(i >> 5), pal5bit(i >> 0));
|
||||
}
|
||||
|
||||
static MACHINE_START( pzletime )
|
||||
{
|
||||
pzletime_state *state = (pzletime_state *)machine->driver_data;
|
||||
|
||||
state_save_register_global(machine, state->ticket);
|
||||
}
|
||||
|
||||
static MACHINE_RESET( pzletime )
|
||||
{
|
||||
pzletime_state *state = (pzletime_state *)machine->driver_data;
|
||||
|
||||
state->ticket = 0;
|
||||
}
|
||||
|
||||
static MACHINE_DRIVER_START( pzletime )
|
||||
|
||||
/* driver data */
|
||||
MDRV_DRIVER_DATA(pzletime_state)
|
||||
|
||||
/* basic machine hardware */
|
||||
MDRV_CPU_ADD("maincpu",M68000,10000000)
|
||||
MDRV_CPU_PROGRAM_MAP(pzletime_map)
|
||||
MDRV_CPU_VBLANK_INT("screen",irq4_line_hold)
|
||||
|
||||
MDRV_MACHINE_START(pzletime)
|
||||
MDRV_MACHINE_RESET(pzletime)
|
||||
|
||||
/* video hardware */
|
||||
MDRV_SCREEN_ADD("screen", RASTER)
|
||||
MDRV_SCREEN_REFRESH_RATE(60)
|
||||
@ -342,4 +385,4 @@ ROM_START( pzletime )
|
||||
ROM_LOAD( "pzletime.nv", 0x0000, 0x0080, CRC(e5ed3d40) SHA1(8c163a6e5839e5c82d52f046d3268202fdf9f4d1) )
|
||||
ROM_END
|
||||
|
||||
GAME( 199?, pzletime, 0, pzletime, pzletime, 0, ROT0, "Elettronica Video-Games S.R.L.", "Puzzle Time (Prototype)", 0 )
|
||||
GAME( 199?, pzletime, 0, pzletime, pzletime, 0, ROT0, "Elettronica Video-Games S.R.L.", "Puzzle Time (Prototype)", GAME_SUPPORTS_SAVE )
|
||||
|
@ -1,14 +1,50 @@
|
||||
|
||||
class playmark_state
|
||||
{
|
||||
public:
|
||||
static void *alloc(running_machine &machine) { return auto_alloc_clear(&machine, playmark_state(machine)); }
|
||||
|
||||
playmark_state(running_machine &machine) { }
|
||||
|
||||
/* memory pointers */
|
||||
UINT16 * bgvideoram;
|
||||
UINT16 * videoram1;
|
||||
UINT16 * videoram2;
|
||||
UINT16 * videoram3;
|
||||
UINT16 * rowscroll;
|
||||
UINT16 * spriteram;
|
||||
// UINT16 * paletteram; // currently this uses generic palette handling
|
||||
size_t spriteram_size;
|
||||
|
||||
/* video-related */
|
||||
tilemap_t *tx_tilemap, *fg_tilemap, *bg_tilemap;
|
||||
int bgscrollx, bgscrolly, bg_enable, bg_full_size;
|
||||
int fgscrollx, fg_rowscroll_enable;
|
||||
|
||||
int xoffset;
|
||||
int yoffset;
|
||||
int txt_tile_offset;
|
||||
int pri_masks[3];
|
||||
UINT16 scroll[7];
|
||||
|
||||
/* powerbal-specific */
|
||||
int tilebank;
|
||||
int bg_yoffset;
|
||||
|
||||
/* misc */
|
||||
UINT16 snd_command;
|
||||
UINT16 snd_flag;
|
||||
UINT8 oki_control;
|
||||
UINT8 oki_command;
|
||||
int old_oki_bank;
|
||||
|
||||
/* devices */
|
||||
running_device *oki;
|
||||
running_device *eeprom;
|
||||
};
|
||||
|
||||
/*----------- defined in video/playmark.c -----------*/
|
||||
|
||||
extern UINT16 *bigtwin_bgvideoram;
|
||||
extern UINT16 *wbeachvl_videoram1,*wbeachvl_videoram2,*wbeachvl_videoram3;
|
||||
extern UINT16 *wbeachvl_rowscroll;
|
||||
|
||||
VIDEO_START( bigtwin );
|
||||
VIDEO_START( wbeachvl );
|
||||
VIDEO_START( excelsr );
|
||||
VIDEO_START( hotmind );
|
||||
VIDEO_START( hrdtimes );
|
||||
WRITE16_HANDLER( wbeachvl_txvideoram_w );
|
||||
WRITE16_HANDLER( wbeachvl_fgvideoram_w );
|
||||
WRITE16_HANDLER( wbeachvl_bgvideoram_w );
|
||||
@ -20,6 +56,13 @@ WRITE16_HANDLER( bigtwin_scroll_w );
|
||||
WRITE16_HANDLER( wbeachvl_scroll_w );
|
||||
WRITE16_HANDLER( excelsr_scroll_w );
|
||||
WRITE16_HANDLER( hrdtimes_scroll_w );
|
||||
|
||||
VIDEO_START( bigtwin );
|
||||
VIDEO_START( wbeachvl );
|
||||
VIDEO_START( excelsr );
|
||||
VIDEO_START( hotmind );
|
||||
VIDEO_START( hrdtimes );
|
||||
|
||||
VIDEO_UPDATE( bigtwin );
|
||||
VIDEO_UPDATE( wbeachvl );
|
||||
VIDEO_UPDATE( excelsr );
|
||||
|
41
src/mame/includes/pushman.h
Normal file
41
src/mame/includes/pushman.h
Normal file
@ -0,0 +1,41 @@
|
||||
/*************************************************************************
|
||||
|
||||
Pushman
|
||||
|
||||
*************************************************************************/
|
||||
|
||||
class pushman_state
|
||||
{
|
||||
public:
|
||||
static void *alloc(running_machine &machine) { return auto_alloc_clear(&machine, pushman_state(machine)); }
|
||||
|
||||
pushman_state(running_machine &machine) { }
|
||||
|
||||
/* memory pointers */
|
||||
UINT16 * videoram;
|
||||
UINT16 * spriteram;
|
||||
// UINT16 * paletteram; // currently this uses generic palette handling
|
||||
|
||||
/* video-related */
|
||||
tilemap_t *bg_tilemap, *tx_tilemap;
|
||||
UINT16 control[2];
|
||||
|
||||
/* misc */
|
||||
UINT8 shared_ram[8];
|
||||
UINT16 latch, new_latch;
|
||||
|
||||
/* devices */
|
||||
running_device *maincpu;
|
||||
running_device *audiocpu;
|
||||
running_device *mcu;
|
||||
};
|
||||
|
||||
|
||||
/*----------- defined in video/pushman.c -----------*/
|
||||
|
||||
WRITE16_HANDLER( pushman_scroll_w );
|
||||
WRITE16_HANDLER( pushman_videoram_w );
|
||||
|
||||
VIDEO_START( pushman );
|
||||
|
||||
VIDEO_UPDATE( pushman );
|
@ -2,21 +2,6 @@
|
||||
#include "includes/playmark.h"
|
||||
|
||||
|
||||
UINT16 *bigtwin_bgvideoram;
|
||||
UINT16 *wbeachvl_videoram1,*wbeachvl_videoram2,*wbeachvl_videoram3;
|
||||
UINT16 *wbeachvl_rowscroll;
|
||||
|
||||
static int bgscrollx,bgscrolly,bg_enable,bg_full_size;
|
||||
static int fgscrollx,fg_rowscroll_enable;
|
||||
static tilemap_t *tx_tilemap,*fg_tilemap,*bg_tilemap;
|
||||
|
||||
static int xoffset = 0;
|
||||
static int yoffset = 0;
|
||||
static int txt_tile_offset = 0;
|
||||
static int pri_masks[3];
|
||||
static UINT16 playmark_scroll[7];
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
|
||||
Callbacks for the TileMap code
|
||||
@ -25,8 +10,9 @@ static UINT16 playmark_scroll[7];
|
||||
|
||||
static TILE_GET_INFO( bigtwin_get_tx_tile_info )
|
||||
{
|
||||
UINT16 code = wbeachvl_videoram1[2*tile_index];
|
||||
UINT16 color = wbeachvl_videoram1[2*tile_index+1];
|
||||
playmark_state *state = (playmark_state *)machine->driver_data;
|
||||
UINT16 code = state->videoram1[2 * tile_index];
|
||||
UINT16 color = state->videoram1[2 * tile_index + 1];
|
||||
SET_TILE_INFO(
|
||||
2,
|
||||
code,
|
||||
@ -36,8 +22,9 @@ static TILE_GET_INFO( bigtwin_get_tx_tile_info )
|
||||
|
||||
static TILE_GET_INFO( bigtwin_get_fg_tile_info )
|
||||
{
|
||||
UINT16 code = wbeachvl_videoram2[2*tile_index];
|
||||
UINT16 color = wbeachvl_videoram2[2*tile_index+1];
|
||||
playmark_state *state = (playmark_state *)machine->driver_data;
|
||||
UINT16 code = state->videoram2[2 * tile_index];
|
||||
UINT16 color = state->videoram2[2 * tile_index + 1];
|
||||
SET_TILE_INFO(
|
||||
1,
|
||||
code,
|
||||
@ -47,8 +34,9 @@ static TILE_GET_INFO( bigtwin_get_fg_tile_info )
|
||||
|
||||
static TILE_GET_INFO( wbeachvl_get_tx_tile_info )
|
||||
{
|
||||
UINT16 code = wbeachvl_videoram1[2*tile_index];
|
||||
UINT16 color = wbeachvl_videoram1[2*tile_index+1];
|
||||
playmark_state *state = (playmark_state *)machine->driver_data;
|
||||
UINT16 code = state->videoram1[2 * tile_index];
|
||||
UINT16 color = state->videoram1[2 * tile_index + 1];
|
||||
|
||||
SET_TILE_INFO(
|
||||
2,
|
||||
@ -59,8 +47,9 @@ static TILE_GET_INFO( wbeachvl_get_tx_tile_info )
|
||||
|
||||
static TILE_GET_INFO( wbeachvl_get_fg_tile_info )
|
||||
{
|
||||
UINT16 code = wbeachvl_videoram2[2*tile_index];
|
||||
UINT16 color = wbeachvl_videoram2[2*tile_index+1];
|
||||
playmark_state *state = (playmark_state *)machine->driver_data;
|
||||
UINT16 code = state->videoram2[2 * tile_index];
|
||||
UINT16 color = state->videoram2[2 * tile_index + 1];
|
||||
|
||||
SET_TILE_INFO(
|
||||
1,
|
||||
@ -71,8 +60,9 @@ static TILE_GET_INFO( wbeachvl_get_fg_tile_info )
|
||||
|
||||
static TILE_GET_INFO( wbeachvl_get_bg_tile_info )
|
||||
{
|
||||
UINT16 code = wbeachvl_videoram3[2*tile_index];
|
||||
UINT16 color = wbeachvl_videoram3[2*tile_index+1];
|
||||
playmark_state *state = (playmark_state *)machine->driver_data;
|
||||
UINT16 code = state->videoram3[2 * tile_index];
|
||||
UINT16 color = state->videoram3[2 * tile_index + 1];
|
||||
|
||||
SET_TILE_INFO(
|
||||
1,
|
||||
@ -83,26 +73,29 @@ static TILE_GET_INFO( wbeachvl_get_bg_tile_info )
|
||||
|
||||
static TILE_GET_INFO( hrdtimes_get_tx_tile_info )
|
||||
{
|
||||
int code = wbeachvl_videoram1[tile_index] & 0x03ff;
|
||||
int colr = wbeachvl_videoram1[tile_index] & 0xe000;
|
||||
playmark_state *state = (playmark_state *)machine->driver_data;
|
||||
int code = state->videoram1[tile_index] & 0x03ff;
|
||||
int colr = state->videoram1[tile_index] & 0xe000;
|
||||
|
||||
SET_TILE_INFO(2,code + txt_tile_offset,colr >> 13,0);
|
||||
SET_TILE_INFO(2,code + state->txt_tile_offset, colr >> 13, 0);
|
||||
}
|
||||
|
||||
static TILE_GET_INFO( hrdtimes_get_fg_tile_info )
|
||||
{
|
||||
int code = wbeachvl_videoram2[tile_index] & 0x1fff;
|
||||
int colr = wbeachvl_videoram2[tile_index] & 0xe000;
|
||||
playmark_state *state = (playmark_state *)machine->driver_data;
|
||||
int code = state->videoram2[tile_index] & 0x1fff;
|
||||
int colr = state->videoram2[tile_index] & 0xe000;
|
||||
|
||||
SET_TILE_INFO(1,code + 0x2000,(colr >> 13) + 8,0);
|
||||
}
|
||||
|
||||
static TILE_GET_INFO( hrdtimes_get_bg_tile_info )
|
||||
{
|
||||
int code = wbeachvl_videoram3[tile_index] & 0x1fff;
|
||||
int colr = wbeachvl_videoram3[tile_index] & 0xe000;
|
||||
playmark_state *state = (playmark_state *)machine->driver_data;
|
||||
int code = state->videoram3[tile_index] & 0x1fff;
|
||||
int colr = state->videoram3[tile_index] & 0xe000;
|
||||
|
||||
SET_TILE_INFO(1,code,colr >> 13,0);
|
||||
SET_TILE_INFO(1, code, colr >> 13, 0);
|
||||
}
|
||||
|
||||
/***************************************************************************
|
||||
@ -113,85 +106,107 @@ static TILE_GET_INFO( hrdtimes_get_bg_tile_info )
|
||||
|
||||
VIDEO_START( bigtwin )
|
||||
{
|
||||
tx_tilemap = tilemap_create(machine, bigtwin_get_tx_tile_info,tilemap_scan_rows, 8, 8,64,32);
|
||||
fg_tilemap = tilemap_create(machine, bigtwin_get_fg_tile_info,tilemap_scan_rows, 16,16,32,32);
|
||||
playmark_state *state = (playmark_state *)machine->driver_data;
|
||||
|
||||
tilemap_set_transparent_pen(tx_tilemap,0);
|
||||
state->tx_tilemap = tilemap_create(machine, bigtwin_get_tx_tile_info, tilemap_scan_rows, 8, 8, 64, 32);
|
||||
state->fg_tilemap = tilemap_create(machine, bigtwin_get_fg_tile_info, tilemap_scan_rows, 16, 16, 32, 32);
|
||||
|
||||
pri_masks[0] = 0;
|
||||
pri_masks[1] = 0;
|
||||
pri_masks[2] = 0;
|
||||
tilemap_set_transparent_pen(state->tx_tilemap, 0);
|
||||
|
||||
state->xoffset = 0;
|
||||
state->yoffset = 0;
|
||||
state->txt_tile_offset = 0;
|
||||
|
||||
state->pri_masks[0] = 0;
|
||||
state->pri_masks[1] = 0;
|
||||
state->pri_masks[2] = 0;
|
||||
}
|
||||
|
||||
|
||||
VIDEO_START( wbeachvl )
|
||||
{
|
||||
tx_tilemap = tilemap_create(machine, wbeachvl_get_tx_tile_info,tilemap_scan_rows, 8, 8,64,32);
|
||||
fg_tilemap = tilemap_create(machine, wbeachvl_get_fg_tile_info,tilemap_scan_rows,16,16,64,32);
|
||||
bg_tilemap = tilemap_create(machine, wbeachvl_get_bg_tile_info,tilemap_scan_rows, 16,16,64,32);
|
||||
playmark_state *state = (playmark_state *)machine->driver_data;
|
||||
|
||||
tilemap_set_transparent_pen(tx_tilemap,0);
|
||||
tilemap_set_transparent_pen(fg_tilemap,0);
|
||||
state->tx_tilemap = tilemap_create(machine, wbeachvl_get_tx_tile_info, tilemap_scan_rows, 8, 8, 64, 32);
|
||||
state->fg_tilemap = tilemap_create(machine, wbeachvl_get_fg_tile_info, tilemap_scan_rows, 16, 16, 64, 32);
|
||||
state->bg_tilemap = tilemap_create(machine, wbeachvl_get_bg_tile_info, tilemap_scan_rows, 16, 16, 64, 32);
|
||||
|
||||
pri_masks[0] = 0xfff0;
|
||||
pri_masks[1] = 0xfffc;
|
||||
pri_masks[2] = 0;
|
||||
tilemap_set_transparent_pen(state->tx_tilemap, 0);
|
||||
tilemap_set_transparent_pen(state->fg_tilemap, 0);
|
||||
|
||||
state->xoffset = 0;
|
||||
state->yoffset = 0;
|
||||
state->txt_tile_offset = 0;
|
||||
|
||||
state->pri_masks[0] = 0xfff0;
|
||||
state->pri_masks[1] = 0xfffc;
|
||||
state->pri_masks[2] = 0;
|
||||
}
|
||||
|
||||
VIDEO_START( excelsr )
|
||||
{
|
||||
tx_tilemap = tilemap_create(machine, bigtwin_get_tx_tile_info,tilemap_scan_rows,16,16,32,32);
|
||||
fg_tilemap = tilemap_create(machine, bigtwin_get_fg_tile_info,tilemap_scan_rows, 16,16,32,32);
|
||||
playmark_state *state = (playmark_state *)machine->driver_data;
|
||||
|
||||
tilemap_set_transparent_pen(tx_tilemap,0);
|
||||
state->tx_tilemap = tilemap_create(machine, bigtwin_get_tx_tile_info, tilemap_scan_rows, 16, 16, 32, 32);
|
||||
state->fg_tilemap = tilemap_create(machine, bigtwin_get_fg_tile_info, tilemap_scan_rows, 16, 16, 32, 32);
|
||||
|
||||
pri_masks[0] = 0;
|
||||
pri_masks[1] = 0xfffc;
|
||||
pri_masks[2] = 0xfff0;
|
||||
tilemap_set_transparent_pen(state->tx_tilemap, 0);
|
||||
|
||||
state->xoffset = 0;
|
||||
state->yoffset = 0;
|
||||
state->txt_tile_offset = 0;
|
||||
|
||||
state->pri_masks[0] = 0;
|
||||
state->pri_masks[1] = 0xfffc;
|
||||
state->pri_masks[2] = 0xfff0;
|
||||
}
|
||||
|
||||
VIDEO_START( hotmind )
|
||||
{
|
||||
tx_tilemap = tilemap_create(machine, hrdtimes_get_tx_tile_info,tilemap_scan_rows, 8, 8,64,64);
|
||||
fg_tilemap = tilemap_create(machine, hrdtimes_get_fg_tile_info,tilemap_scan_rows,16,16,32,32);
|
||||
bg_tilemap = tilemap_create(machine, hrdtimes_get_bg_tile_info,tilemap_scan_rows, 16,16,32,32);
|
||||
playmark_state *state = (playmark_state *)machine->driver_data;
|
||||
|
||||
tilemap_set_transparent_pen(tx_tilemap,0);
|
||||
tilemap_set_transparent_pen(fg_tilemap,0);
|
||||
state->tx_tilemap = tilemap_create(machine, hrdtimes_get_tx_tile_info, tilemap_scan_rows, 8, 8, 64, 64);
|
||||
state->fg_tilemap = tilemap_create(machine, hrdtimes_get_fg_tile_info, tilemap_scan_rows, 16, 16, 32, 32);
|
||||
state->bg_tilemap = tilemap_create(machine, hrdtimes_get_bg_tile_info, tilemap_scan_rows, 16, 16, 32, 32);
|
||||
|
||||
tilemap_set_scrolldx(tx_tilemap, -14, -14);
|
||||
tilemap_set_scrolldx(fg_tilemap, -14, -14);
|
||||
tilemap_set_scrolldx(bg_tilemap, -14, -14);
|
||||
tilemap_set_transparent_pen(state->tx_tilemap, 0);
|
||||
tilemap_set_transparent_pen(state->fg_tilemap, 0);
|
||||
|
||||
xoffset = -9;
|
||||
yoffset = -8;
|
||||
txt_tile_offset = 0x9000;
|
||||
tilemap_set_scrolldx(state->tx_tilemap, -14, -14);
|
||||
tilemap_set_scrolldx(state->fg_tilemap, -14, -14);
|
||||
tilemap_set_scrolldx(state->bg_tilemap, -14, -14);
|
||||
|
||||
pri_masks[0] = 0xfff0;
|
||||
pri_masks[1] = 0xfffc;
|
||||
pri_masks[2] = 0;
|
||||
state->xoffset = -9;
|
||||
state->yoffset = -8;
|
||||
state->txt_tile_offset = 0x9000;
|
||||
|
||||
state->pri_masks[0] = 0xfff0;
|
||||
state->pri_masks[1] = 0xfffc;
|
||||
state->pri_masks[2] = 0;
|
||||
}
|
||||
|
||||
VIDEO_START( hrdtimes )
|
||||
{
|
||||
tx_tilemap = tilemap_create(machine, hrdtimes_get_tx_tile_info,tilemap_scan_rows, 8, 8,64,64);
|
||||
fg_tilemap = tilemap_create(machine, hrdtimes_get_fg_tile_info,tilemap_scan_rows,16,16,32,32);
|
||||
bg_tilemap = tilemap_create(machine, hrdtimes_get_bg_tile_info,tilemap_scan_rows, 16,16,32,32);
|
||||
playmark_state *state = (playmark_state *)machine->driver_data;
|
||||
|
||||
tilemap_set_transparent_pen(tx_tilemap,0);
|
||||
tilemap_set_transparent_pen(fg_tilemap,0);
|
||||
state->tx_tilemap = tilemap_create(machine, hrdtimes_get_tx_tile_info,tilemap_scan_rows, 8, 8, 64, 64);
|
||||
state->fg_tilemap = tilemap_create(machine, hrdtimes_get_fg_tile_info,tilemap_scan_rows, 16, 16, 32, 32);
|
||||
state->bg_tilemap = tilemap_create(machine, hrdtimes_get_bg_tile_info,tilemap_scan_rows, 16, 16, 32, 32);
|
||||
|
||||
tilemap_set_scrolldx(tx_tilemap, -14, -14);
|
||||
tilemap_set_scrolldx(fg_tilemap, -10, -10);
|
||||
tilemap_set_scrolldx(bg_tilemap, -12, -12);
|
||||
tilemap_set_transparent_pen(state->tx_tilemap, 0);
|
||||
tilemap_set_transparent_pen(state->fg_tilemap, 0);
|
||||
|
||||
xoffset = -8;
|
||||
yoffset = -8;
|
||||
txt_tile_offset = 0xfc00;
|
||||
tilemap_set_scrolldx(state->tx_tilemap, -14, -14);
|
||||
tilemap_set_scrolldx(state->fg_tilemap, -10, -10);
|
||||
tilemap_set_scrolldx(state->bg_tilemap, -12, -12);
|
||||
|
||||
pri_masks[0] = 0xfff0;
|
||||
pri_masks[1] = 0xfffc;
|
||||
pri_masks[2] = 0;
|
||||
state->xoffset = -8;
|
||||
state->yoffset = -8;
|
||||
state->txt_tile_offset = 0xfc00;
|
||||
|
||||
state->pri_masks[0] = 0xfff0;
|
||||
state->pri_masks[1] = 0xfffc;
|
||||
state->pri_masks[2] = 0;
|
||||
}
|
||||
|
||||
/***************************************************************************
|
||||
@ -202,44 +217,56 @@ VIDEO_START( hrdtimes )
|
||||
|
||||
WRITE16_HANDLER( wbeachvl_txvideoram_w )
|
||||
{
|
||||
COMBINE_DATA(&wbeachvl_videoram1[offset]);
|
||||
tilemap_mark_tile_dirty(tx_tilemap,offset / 2);
|
||||
playmark_state *state = (playmark_state *)space->machine->driver_data;
|
||||
|
||||
COMBINE_DATA(&state->videoram1[offset]);
|
||||
tilemap_mark_tile_dirty(state->tx_tilemap, offset / 2);
|
||||
}
|
||||
|
||||
WRITE16_HANDLER( wbeachvl_fgvideoram_w )
|
||||
{
|
||||
COMBINE_DATA(&wbeachvl_videoram2[offset]);
|
||||
tilemap_mark_tile_dirty(fg_tilemap,offset / 2);
|
||||
playmark_state *state = (playmark_state *)space->machine->driver_data;
|
||||
|
||||
COMBINE_DATA(&state->videoram2[offset]);
|
||||
tilemap_mark_tile_dirty(state->fg_tilemap, offset / 2);
|
||||
}
|
||||
|
||||
WRITE16_HANDLER( wbeachvl_bgvideoram_w )
|
||||
{
|
||||
COMBINE_DATA(&wbeachvl_videoram3[offset]);
|
||||
tilemap_mark_tile_dirty(bg_tilemap,offset / 2);
|
||||
playmark_state *state = (playmark_state *)space->machine->driver_data;
|
||||
|
||||
COMBINE_DATA(&state->videoram3[offset]);
|
||||
tilemap_mark_tile_dirty(state->bg_tilemap, offset / 2);
|
||||
}
|
||||
|
||||
WRITE16_HANDLER( hrdtimes_txvideoram_w )
|
||||
{
|
||||
COMBINE_DATA(&wbeachvl_videoram1[offset]);
|
||||
tilemap_mark_tile_dirty(tx_tilemap,offset);
|
||||
playmark_state *state = (playmark_state *)space->machine->driver_data;
|
||||
|
||||
COMBINE_DATA(&state->videoram1[offset]);
|
||||
tilemap_mark_tile_dirty(state->tx_tilemap, offset);
|
||||
}
|
||||
|
||||
WRITE16_HANDLER( hrdtimes_fgvideoram_w )
|
||||
{
|
||||
COMBINE_DATA(&wbeachvl_videoram2[offset]);
|
||||
tilemap_mark_tile_dirty(fg_tilemap,offset);
|
||||
playmark_state *state = (playmark_state *)space->machine->driver_data;
|
||||
|
||||
COMBINE_DATA(&state->videoram2[offset]);
|
||||
tilemap_mark_tile_dirty(state->fg_tilemap, offset);
|
||||
}
|
||||
|
||||
WRITE16_HANDLER( hrdtimes_bgvideoram_w )
|
||||
{
|
||||
COMBINE_DATA(&wbeachvl_videoram3[offset]);
|
||||
tilemap_mark_tile_dirty(bg_tilemap,offset);
|
||||
playmark_state *state = (playmark_state *)space->machine->driver_data;
|
||||
|
||||
COMBINE_DATA(&state->videoram3[offset]);
|
||||
tilemap_mark_tile_dirty(state->bg_tilemap, offset);
|
||||
}
|
||||
|
||||
|
||||
WRITE16_HANDLER( bigtwin_paletteram_w )
|
||||
{
|
||||
int r,g,b,val;
|
||||
int r, g, b, val;
|
||||
|
||||
COMBINE_DATA(&space->machine->generic.paletteram.u16[offset]);
|
||||
|
||||
@ -252,74 +279,82 @@ WRITE16_HANDLER( bigtwin_paletteram_w )
|
||||
g |= ((val & 0x04) >> 2);
|
||||
b |= ((val & 0x02) >> 1);
|
||||
|
||||
palette_set_color_rgb(space->machine,offset,pal5bit(r),pal5bit(g),pal5bit(b));
|
||||
palette_set_color_rgb(space->machine, offset, pal5bit(r), pal5bit(g), pal5bit(b));
|
||||
}
|
||||
|
||||
WRITE16_HANDLER( bigtwin_scroll_w )
|
||||
{
|
||||
data = COMBINE_DATA(&playmark_scroll[offset]);
|
||||
playmark_state *state = (playmark_state *)space->machine->driver_data;
|
||||
|
||||
data = COMBINE_DATA(&state->scroll[offset]);
|
||||
|
||||
switch (offset)
|
||||
{
|
||||
case 0: tilemap_set_scrollx(tx_tilemap,0,data+2); break;
|
||||
case 1: tilemap_set_scrolly(tx_tilemap,0,data); break;
|
||||
case 2: bgscrollx = -(data+4); break;
|
||||
case 3: bgscrolly = (-data) & 0x1ff;
|
||||
bg_enable = data & 0x0200;
|
||||
bg_full_size = data & 0x0400;
|
||||
case 0: tilemap_set_scrollx(state->tx_tilemap, 0, data + 2); break;
|
||||
case 1: tilemap_set_scrolly(state->tx_tilemap, 0, data); break;
|
||||
case 2: state->bgscrollx = -(data + 4); break;
|
||||
case 3: state->bgscrolly = (-data) & 0x1ff;
|
||||
state->bg_enable = data & 0x0200;
|
||||
state->bg_full_size = data & 0x0400;
|
||||
break;
|
||||
case 4: tilemap_set_scrollx(fg_tilemap,0,data+6); break;
|
||||
case 5: tilemap_set_scrolly(fg_tilemap,0,data); break;
|
||||
case 4: tilemap_set_scrollx(state->fg_tilemap, 0, data + 6); break;
|
||||
case 5: tilemap_set_scrolly(state->fg_tilemap, 0, data); break;
|
||||
}
|
||||
}
|
||||
|
||||
WRITE16_HANDLER( wbeachvl_scroll_w )
|
||||
{
|
||||
data = COMBINE_DATA(&playmark_scroll[offset]);
|
||||
playmark_state *state = (playmark_state *)space->machine->driver_data;
|
||||
|
||||
data = COMBINE_DATA(&state->scroll[offset]);
|
||||
|
||||
switch (offset)
|
||||
{
|
||||
case 0: tilemap_set_scrollx(tx_tilemap,0,data+2); break;
|
||||
case 1: tilemap_set_scrolly(tx_tilemap,0,data); break;
|
||||
case 2: fgscrollx = data+4;break;
|
||||
case 3: tilemap_set_scrolly(fg_tilemap,0,data & 0x3ff);
|
||||
fg_rowscroll_enable = data & 0x0800;
|
||||
case 0: tilemap_set_scrollx(state->tx_tilemap, 0, data + 2); break;
|
||||
case 1: tilemap_set_scrolly(state->tx_tilemap, 0, data); break;
|
||||
case 2: state->fgscrollx = data + 4;break;
|
||||
case 3: tilemap_set_scrolly(state->fg_tilemap, 0, data & 0x3ff);
|
||||
state->fg_rowscroll_enable = data & 0x0800;
|
||||
break;
|
||||
case 4: tilemap_set_scrollx(bg_tilemap,0,data+6); break;
|
||||
case 5: tilemap_set_scrolly(bg_tilemap,0,data); break;
|
||||
case 4: tilemap_set_scrollx(state->bg_tilemap, 0, data + 6); break;
|
||||
case 5: tilemap_set_scrolly(state->bg_tilemap, 0, data); break;
|
||||
}
|
||||
}
|
||||
|
||||
WRITE16_HANDLER( excelsr_scroll_w )
|
||||
{
|
||||
data = COMBINE_DATA(&playmark_scroll[offset]);
|
||||
playmark_state *state = (playmark_state *)space->machine->driver_data;
|
||||
|
||||
data = COMBINE_DATA(&state->scroll[offset]);
|
||||
|
||||
switch (offset)
|
||||
{
|
||||
case 0: tilemap_set_scrollx(tx_tilemap,0,data+2); break;
|
||||
case 1: tilemap_set_scrolly(tx_tilemap,0,data); break;
|
||||
case 2: bgscrollx = -data; break;
|
||||
case 3: bgscrolly = (-data+2)& 0x1ff;
|
||||
bg_enable = data & 0x0200;
|
||||
bg_full_size = data & 0x0400;
|
||||
case 0: tilemap_set_scrollx(state->tx_tilemap, 0, data + 2); break;
|
||||
case 1: tilemap_set_scrolly(state->tx_tilemap, 0, data); break;
|
||||
case 2: state->bgscrollx = -data; break;
|
||||
case 3: state->bgscrolly = (-data + 2)& 0x1ff;
|
||||
state->bg_enable = data & 0x0200;
|
||||
state->bg_full_size = data & 0x0400;
|
||||
break;
|
||||
case 4: tilemap_set_scrollx(fg_tilemap,0,data+6); break;
|
||||
case 5: tilemap_set_scrolly(fg_tilemap,0,data); break;
|
||||
case 4: tilemap_set_scrollx(state->fg_tilemap, 0, data + 6); break;
|
||||
case 5: tilemap_set_scrolly(state->fg_tilemap, 0, data); break;
|
||||
}
|
||||
}
|
||||
|
||||
WRITE16_HANDLER( hrdtimes_scroll_w )
|
||||
{
|
||||
data = COMBINE_DATA(&playmark_scroll[offset]);
|
||||
playmark_state *state = (playmark_state *)space->machine->driver_data;
|
||||
|
||||
data = COMBINE_DATA(&state->scroll[offset]);
|
||||
|
||||
switch (offset)
|
||||
{
|
||||
case 0: tilemap_set_scrollx(tx_tilemap,0,data); break;
|
||||
case 1: tilemap_set_scrolly(tx_tilemap,0,data); break;
|
||||
case 2: tilemap_set_scrollx(fg_tilemap,0,data); break;
|
||||
case 3: tilemap_set_scrolly(fg_tilemap,0,data); break;
|
||||
case 4: tilemap_set_scrollx(bg_tilemap,0,data); break;
|
||||
case 5: tilemap_set_scrolly(bg_tilemap,0,data); break;
|
||||
case 0: tilemap_set_scrollx(state->tx_tilemap, 0, data); break;
|
||||
case 1: tilemap_set_scrolly(state->tx_tilemap, 0, data); break;
|
||||
case 2: tilemap_set_scrollx(state->fg_tilemap, 0, data); break;
|
||||
case 3: tilemap_set_scrolly(state->fg_tilemap, 0, data); break;
|
||||
case 4: tilemap_set_scrollx(state->bg_tilemap, 0, data); break;
|
||||
case 5: tilemap_set_scrolly(state->bg_tilemap, 0, data); break;
|
||||
}
|
||||
}
|
||||
|
||||
@ -329,35 +364,36 @@ WRITE16_HANDLER( hrdtimes_scroll_w )
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
static void draw_sprites(running_machine *machine, bitmap_t *bitmap,const rectangle *cliprect,int codeshift)
|
||||
static void draw_sprites( running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect, int codeshift )
|
||||
{
|
||||
int offs, start_offset = machine->generic.spriteram_size/2 - 4;
|
||||
playmark_state *state = (playmark_state *)machine->driver_data;
|
||||
int offs, start_offset = state->spriteram_size / 2 - 4;
|
||||
int height = machine->gfx[0]->height;
|
||||
int colordiv = machine->gfx[0]->color_granularity / 16;
|
||||
UINT16 *spriteram16 = machine->generic.spriteram.u16;
|
||||
UINT16 *spriteram = state->spriteram;
|
||||
|
||||
// find the "end of list" to draw the sprites in reverse order
|
||||
for (offs = 4;offs < machine->generic.spriteram_size/2;offs += 4)
|
||||
for (offs = 4; offs < state->spriteram_size / 2; offs += 4)
|
||||
{
|
||||
if (spriteram16[offs+3-4] == 0x2000) /* end of list marker */
|
||||
if (spriteram[offs + 3 - 4] == 0x2000) /* end of list marker */
|
||||
{
|
||||
start_offset = offs - 4;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
for (offs = start_offset;offs >= 4;offs -= 4)
|
||||
for (offs = start_offset; offs >= 4; offs -= 4)
|
||||
{
|
||||
int sx,sy,code,color,flipx,pri;
|
||||
int sx, sy, code, color, flipx, pri;
|
||||
|
||||
sy = spriteram16[offs+3-4]; /* -4? what the... ??? */
|
||||
sy = spriteram[offs + 3 - 4]; /* -4? what the... ??? */
|
||||
|
||||
flipx = sy & 0x4000;
|
||||
sx = (spriteram16[offs+1] & 0x01ff) - 16-7;
|
||||
sy = (256-8-height - sy) & 0xff;
|
||||
code = spriteram16[offs+2] >> codeshift;
|
||||
color = ((spriteram16[offs+1] & 0x3e00) >> 9) / colordiv;
|
||||
pri = (spriteram16[offs+1] & 0x8000) >> 15;
|
||||
sx = (spriteram[offs + 1] & 0x01ff) - 16 - 7;
|
||||
sy = (256 - 8 - height - sy) & 0xff;
|
||||
code = spriteram[offs + 2] >> codeshift;
|
||||
color = ((spriteram[offs + 1] & 0x3e00) >> 9) / colordiv;
|
||||
pri = (spriteram[offs + 1] & 0x8000) >> 15;
|
||||
|
||||
if(!pri && (color & 0x0c) == 0x0c)
|
||||
pri = 2;
|
||||
@ -366,42 +402,43 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap,const rectan
|
||||
code,
|
||||
color,
|
||||
flipx,0,
|
||||
sx + xoffset,sy + yoffset,
|
||||
machine->priority_bitmap,pri_masks[pri],0);
|
||||
sx + state->xoffset,sy + state->yoffset,
|
||||
machine->priority_bitmap,state->pri_masks[pri],0);
|
||||
}
|
||||
}
|
||||
|
||||
static void draw_bitmap(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect)
|
||||
static void draw_bitmap( running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect )
|
||||
{
|
||||
int x,y,count;
|
||||
playmark_state *state = (playmark_state *)machine->driver_data;
|
||||
int x, y, count;
|
||||
int color;
|
||||
UINT8 *pri;
|
||||
|
||||
count = 0;
|
||||
for (y=0;y<512;y++)
|
||||
for (y = 0; y < 512; y++)
|
||||
{
|
||||
for (x=0;x<512;x++)
|
||||
for (x = 0; x < 512; x++)
|
||||
{
|
||||
color = bigtwin_bgvideoram[count] & 0xff;
|
||||
color = state->bgvideoram[count] & 0xff;
|
||||
|
||||
if(color)
|
||||
if (color)
|
||||
{
|
||||
if(bg_full_size)
|
||||
if (state->bg_full_size)
|
||||
{
|
||||
*BITMAP_ADDR16(bitmap, (y + bgscrolly) & 0x1ff, (x + bgscrollx) & 0x1ff) = 0x100 + color;
|
||||
*BITMAP_ADDR16(bitmap, (y + state->bgscrolly) & 0x1ff, (x + state->bgscrollx) & 0x1ff) = 0x100 + color;
|
||||
|
||||
pri = BITMAP_ADDR8(machine->priority_bitmap, (y + bgscrolly) & 0x1ff, 0);
|
||||
pri[(x + bgscrollx) & 0x1ff] |= 2;
|
||||
pri = BITMAP_ADDR8(machine->priority_bitmap, (y + state->bgscrolly) & 0x1ff, 0);
|
||||
pri[(x + state->bgscrollx) & 0x1ff] |= 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* 50% size */
|
||||
if(!(x % 2) && !(y % 2))
|
||||
{
|
||||
*BITMAP_ADDR16(bitmap, (y / 2 + bgscrolly) & 0x1ff, (x / 2 + bgscrollx) & 0x1ff) = 0x100 + color;
|
||||
*BITMAP_ADDR16(bitmap, (y / 2 + state->bgscrolly) & 0x1ff, (x / 2 + state->bgscrollx) & 0x1ff) = 0x100 + color;
|
||||
|
||||
pri = BITMAP_ADDR8(machine->priority_bitmap, (y / 2 + bgscrolly) & 0x1ff, 0);
|
||||
pri[(x / 2 + bgscrollx) & 0x1ff] |= 2;
|
||||
pri = BITMAP_ADDR8(machine->priority_bitmap, (y / 2 + state->bgscrolly) & 0x1ff, 0);
|
||||
pri[(x / 2 + state->bgscrollx) & 0x1ff] |= 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -413,66 +450,74 @@ static void draw_bitmap(running_machine *machine, bitmap_t *bitmap, const rectan
|
||||
|
||||
VIDEO_UPDATE( bigtwin )
|
||||
{
|
||||
bitmap_fill(screen->machine->priority_bitmap,cliprect,0);
|
||||
playmark_state *state = (playmark_state *)screen->machine->driver_data;
|
||||
|
||||
tilemap_draw(bitmap,cliprect,fg_tilemap,0,0);
|
||||
if (bg_enable)
|
||||
bitmap_fill(screen->machine->priority_bitmap, cliprect, 0);
|
||||
|
||||
tilemap_draw(bitmap, cliprect, state->fg_tilemap, 0, 0);
|
||||
if (state->bg_enable)
|
||||
draw_bitmap(screen->machine, bitmap, cliprect);
|
||||
draw_sprites(screen->machine, bitmap,cliprect,4);
|
||||
tilemap_draw(bitmap,cliprect,tx_tilemap,0,0);
|
||||
draw_sprites(screen->machine, bitmap, cliprect, 4);
|
||||
tilemap_draw(bitmap, cliprect, state->tx_tilemap, 0, 0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
VIDEO_UPDATE( excelsr )
|
||||
{
|
||||
bitmap_fill(screen->machine->priority_bitmap,cliprect,0);
|
||||
playmark_state *state = (playmark_state *)screen->machine->driver_data;
|
||||
|
||||
tilemap_draw(bitmap,cliprect,fg_tilemap,0,1);
|
||||
if (bg_enable)
|
||||
bitmap_fill(screen->machine->priority_bitmap, cliprect, 0);
|
||||
|
||||
tilemap_draw(bitmap, cliprect, state->fg_tilemap, 0, 1);
|
||||
if (state->bg_enable)
|
||||
draw_bitmap(screen->machine, bitmap, cliprect);
|
||||
tilemap_draw(bitmap,cliprect,tx_tilemap,0,4);
|
||||
draw_sprites(screen->machine,bitmap,cliprect,2);
|
||||
tilemap_draw(bitmap, cliprect, state->tx_tilemap, 0, 4);
|
||||
draw_sprites(screen->machine, bitmap, cliprect, 2);
|
||||
return 0;
|
||||
}
|
||||
|
||||
VIDEO_UPDATE( wbeachvl )
|
||||
{
|
||||
if (fg_rowscroll_enable)
|
||||
playmark_state *state = (playmark_state *)screen->machine->driver_data;
|
||||
|
||||
if (state->fg_rowscroll_enable)
|
||||
{
|
||||
int i;
|
||||
|
||||
tilemap_set_scroll_rows(fg_tilemap,512);
|
||||
for (i = 0;i < 256;i++)
|
||||
tilemap_set_scrollx(fg_tilemap,i+1,wbeachvl_rowscroll[8*i]);
|
||||
tilemap_set_scroll_rows(state->fg_tilemap, 512);
|
||||
for (i = 0; i < 256; i++)
|
||||
tilemap_set_scrollx(state->fg_tilemap, i + 1, state->rowscroll[8 * i]);
|
||||
}
|
||||
else
|
||||
{
|
||||
tilemap_set_scroll_rows(fg_tilemap,1);
|
||||
tilemap_set_scrollx(fg_tilemap,0,fgscrollx);
|
||||
tilemap_set_scroll_rows(state->fg_tilemap, 1);
|
||||
tilemap_set_scrollx(state->fg_tilemap, 0, state->fgscrollx);
|
||||
}
|
||||
|
||||
bitmap_fill(screen->machine->priority_bitmap,cliprect,0);
|
||||
bitmap_fill(screen->machine->priority_bitmap, cliprect, 0);
|
||||
|
||||
tilemap_draw(bitmap,cliprect,bg_tilemap,0,1);
|
||||
tilemap_draw(bitmap,cliprect,fg_tilemap,0,2);
|
||||
draw_sprites(screen->machine,bitmap,cliprect,0);
|
||||
tilemap_draw(bitmap,cliprect,tx_tilemap,0,0);
|
||||
tilemap_draw(bitmap, cliprect, state->bg_tilemap, 0, 1);
|
||||
tilemap_draw(bitmap, cliprect, state->fg_tilemap, 0, 2);
|
||||
draw_sprites(screen->machine, bitmap, cliprect, 0);
|
||||
tilemap_draw(bitmap, cliprect, state->tx_tilemap, 0, 0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
VIDEO_UPDATE( hrdtimes )
|
||||
{
|
||||
bitmap_fill(screen->machine->priority_bitmap,cliprect,0);
|
||||
playmark_state *state = (playmark_state *)screen->machine->driver_data;
|
||||
|
||||
bitmap_fill(screen->machine->priority_bitmap, cliprect, 0);
|
||||
|
||||
// video enabled
|
||||
if(playmark_scroll[6] & 1)
|
||||
if (state->scroll[6] & 1)
|
||||
{
|
||||
tilemap_draw(bitmap,cliprect,bg_tilemap,0,1);
|
||||
tilemap_draw(bitmap,cliprect,fg_tilemap,0,2);
|
||||
draw_sprites(screen->machine,bitmap,cliprect,2);
|
||||
tilemap_draw(bitmap,cliprect,tx_tilemap,0,0);
|
||||
tilemap_draw(bitmap, cliprect, state->bg_tilemap, 0, 1);
|
||||
tilemap_draw(bitmap, cliprect, state->fg_tilemap, 0, 2);
|
||||
draw_sprites(screen->machine, bitmap, cliprect, 2);
|
||||
tilemap_draw(bitmap, cliprect, state->tx_tilemap, 0, 0);
|
||||
}
|
||||
else
|
||||
bitmap_fill(bitmap,cliprect,get_black_pen(screen->machine));
|
||||
bitmap_fill(bitmap, cliprect, get_black_pen(screen->machine));
|
||||
return 0;
|
||||
}
|
||||
|
@ -1,8 +1,5 @@
|
||||
#include "emu.h"
|
||||
|
||||
static tilemap_t *bg_tilemap,*tx_tilemap;
|
||||
static UINT16 control[2];
|
||||
|
||||
#include "includes/pushman.h"
|
||||
|
||||
/***************************************************************************
|
||||
|
||||
@ -13,30 +10,32 @@ static UINT16 control[2];
|
||||
static TILEMAP_MAPPER( background_scan_rows )
|
||||
{
|
||||
/* logical (col,row) -> memory offset */
|
||||
return ((col & 0x7)) + ((7-(row & 0x7)) << 3) + ((col & 0x78) <<3) + ((0x38-(row&0x38))<<7);
|
||||
return ((col & 0x7)) + ((7 - (row & 0x7)) << 3) + ((col & 0x78) << 3) + ((0x38 - (row & 0x38)) << 7);
|
||||
}
|
||||
|
||||
static TILE_GET_INFO( get_back_tile_info )
|
||||
{
|
||||
UINT8 *bgMap = memory_region(machine, "gfx4");
|
||||
UINT8 *bg_map = memory_region(machine, "gfx4");
|
||||
int tile;
|
||||
|
||||
tile=bgMap[tile_index<<1]+(bgMap[(tile_index<<1)+1]<<8);
|
||||
tile = bg_map[tile_index << 1] + (bg_map[(tile_index << 1) + 1] << 8);
|
||||
SET_TILE_INFO(
|
||||
2,
|
||||
(tile&0xff)|((tile&0x4000)>>6),
|
||||
(tile>>8)&0xf,
|
||||
(tile&0x2000)?TILE_FLIPX:0);
|
||||
(tile & 0xff) | ((tile & 0x4000) >> 6),
|
||||
(tile >> 8) & 0xf,
|
||||
(tile & 0x2000) ? TILE_FLIPX : 0);
|
||||
}
|
||||
|
||||
static TILE_GET_INFO( get_text_tile_info )
|
||||
{
|
||||
int tile = machine->generic.videoram.u16[tile_index];
|
||||
pushman_state *state = (pushman_state *)machine->driver_data;
|
||||
|
||||
int tile = state->videoram[tile_index];
|
||||
SET_TILE_INFO(
|
||||
0,
|
||||
(tile&0xff)|((tile&0xc000)>>6)|((tile&0x2000)>>3),
|
||||
(tile>>8)&0xf,
|
||||
(tile&0x1000)?TILE_FLIPY:0); /* not used? from Tiger Road */
|
||||
(tile & 0xff) | ((tile & 0xc000) >> 6) | ((tile & 0x2000) >> 3),
|
||||
(tile >> 8) & 0xf,
|
||||
(tile & 0x1000) ? TILE_FLIPY : 0); /* not used? from Tiger Road */
|
||||
}
|
||||
|
||||
|
||||
@ -49,10 +48,12 @@ static TILE_GET_INFO( get_text_tile_info )
|
||||
|
||||
VIDEO_START( pushman )
|
||||
{
|
||||
bg_tilemap = tilemap_create(machine, get_back_tile_info,background_scan_rows, 32,32,128,64);
|
||||
tx_tilemap = tilemap_create(machine, get_text_tile_info,tilemap_scan_rows, 8, 8, 32,32);
|
||||
pushman_state *state = (pushman_state *)machine->driver_data;
|
||||
|
||||
tilemap_set_transparent_pen(tx_tilemap,3);
|
||||
state->bg_tilemap = tilemap_create(machine, get_back_tile_info, background_scan_rows, 32, 32, 128, 64);
|
||||
state->tx_tilemap = tilemap_create(machine, get_text_tile_info, tilemap_scan_rows, 8, 8, 32, 32);
|
||||
|
||||
tilemap_set_transparent_pen(state->tx_tilemap, 3);
|
||||
}
|
||||
|
||||
|
||||
@ -65,13 +66,15 @@ VIDEO_START( pushman )
|
||||
|
||||
WRITE16_HANDLER( pushman_scroll_w )
|
||||
{
|
||||
COMBINE_DATA(&control[offset]);
|
||||
pushman_state *state = (pushman_state *)space->machine->driver_data;
|
||||
COMBINE_DATA(&state->control[offset]);
|
||||
}
|
||||
|
||||
WRITE16_HANDLER( pushman_videoram_w )
|
||||
{
|
||||
COMBINE_DATA(&space->machine->generic.videoram.u16[offset]);
|
||||
tilemap_mark_tile_dirty(tx_tilemap,offset);
|
||||
pushman_state *state = (pushman_state *)space->machine->driver_data;
|
||||
COMBINE_DATA(&state->videoram[offset]);
|
||||
tilemap_mark_tile_dirty(state->tx_tilemap, offset);
|
||||
}
|
||||
|
||||
|
||||
@ -82,23 +85,27 @@ WRITE16_HANDLER( pushman_videoram_w )
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
static void draw_sprites(running_machine *machine, bitmap_t *bitmap,const rectangle *cliprect)
|
||||
static void draw_sprites( running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect )
|
||||
{
|
||||
UINT16 *spriteram16 = machine->generic.spriteram.u16;
|
||||
int offs,x,y,color,sprite,flipx,flipy;
|
||||
pushman_state *state = (pushman_state *)machine->driver_data;
|
||||
UINT16 *spriteram = state->spriteram;
|
||||
int offs, x, y, color, sprite, flipx, flipy;
|
||||
|
||||
for (offs = 0x0800-4;offs >=0;offs -= 4)
|
||||
for (offs = 0x0800 - 4; offs >=0; offs -= 4)
|
||||
{
|
||||
/* Don't draw empty sprite table entries */
|
||||
x = spriteram16[offs+3]&0x1ff;
|
||||
if (x==0x180) continue;
|
||||
if (x>0xff) x=0-(0x200-x);
|
||||
y = 240-spriteram16[offs+2];
|
||||
color = ((spriteram16[offs+1]>>2)&0xf);
|
||||
sprite = spriteram16[offs]&0x7ff;
|
||||
x = spriteram[offs + 3] & 0x1ff;
|
||||
if (x == 0x180)
|
||||
continue;
|
||||
if (x > 0xff)
|
||||
x = 0 - (0x200 - x);
|
||||
|
||||
y = 240 - spriteram[offs + 2];
|
||||
color = ((spriteram[offs + 1] >> 2) & 0xf);
|
||||
sprite = spriteram[offs] & 0x7ff;
|
||||
/* ElSemi - Sprite flip info */
|
||||
flipx=spriteram16[offs+1]&2;
|
||||
flipy=spriteram16[offs+1]&1; /* flip y untested */
|
||||
flipx = spriteram[offs + 1] & 2;
|
||||
flipy = spriteram[offs + 1] & 1; /* flip y untested */
|
||||
|
||||
if (flip_screen_get(machine))
|
||||
{
|
||||
@ -108,20 +115,21 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap,const rectan
|
||||
flipy = !flipy;
|
||||
}
|
||||
|
||||
drawgfx_transpen(bitmap,cliprect,machine->gfx[1],
|
||||
sprite,
|
||||
color,flipx,flipy,x,y,15);
|
||||
drawgfx_transpen(bitmap,cliprect,machine->gfx[1], sprite,
|
||||
color, flipx, flipy, x, y, 15);
|
||||
}
|
||||
}
|
||||
|
||||
VIDEO_UPDATE( pushman )
|
||||
{
|
||||
/* Setup the tilemaps */
|
||||
tilemap_set_scrollx( bg_tilemap,0, control[0] );
|
||||
tilemap_set_scrolly( bg_tilemap,0, 0xf00-control[1] );
|
||||
pushman_state *state = (pushman_state *)screen->machine->driver_data;
|
||||
|
||||
tilemap_draw(bitmap,cliprect,bg_tilemap,0,0);
|
||||
draw_sprites(screen->machine,bitmap,cliprect);
|
||||
tilemap_draw(bitmap,cliprect,tx_tilemap,0,0);
|
||||
/* Setup the tilemaps */
|
||||
tilemap_set_scrollx(state->bg_tilemap, 0, state->control[0]);
|
||||
tilemap_set_scrolly(state->bg_tilemap, 0, 0xf00 - state->control[1]);
|
||||
|
||||
tilemap_draw(bitmap, cliprect, state->bg_tilemap, 0, 0);
|
||||
draw_sprites(screen->machine, bitmap, cliprect);
|
||||
tilemap_draw(bitmap, cliprect, state->tx_tilemap, 0, 0);
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user