Updated dbz.c, lethal.c, metro.c, rungun.c, tail2nos.c, tmnt.c, ultraman.c, wecleman.c, xmen.c & zr107.c to use Konami video devices instead of konamiic.h code

This commit is contained in:
Fabio Priuli 2009-12-21 22:28:54 +00:00
parent 1becf25fd5
commit 8b75692d5c
21 changed files with 1275 additions and 912 deletions

View File

@ -53,7 +53,7 @@ Notes:
#include "driver.h" #include "driver.h"
#include "deprecat.h" #include "deprecat.h"
#include "video/konamiic.h" #include "video/konicdev.h"
#include "cpu/m68000/m68000.h" #include "cpu/m68000/m68000.h"
#include "cpu/z80/z80.h" #include "cpu/z80/z80.h"
#include "sound/2151intf.h" #include "sound/2151intf.h"
@ -72,8 +72,14 @@ static int dbz_control;
VIDEO_START(dbz); VIDEO_START(dbz);
VIDEO_UPDATE(dbz); VIDEO_UPDATE(dbz);
extern void dbz_sprite_callback(running_machine *machine, int *code, int *color, int *priority_mask);
extern void dbz_tile_callback(running_machine *machine, int layer, int *code, int *color, int *flags);
static INTERRUPT_GEN( dbz_interrupt ) static INTERRUPT_GEN( dbz_interrupt )
{ {
const device_config *k053246 = devtag_get_device(device->machine, "k053246");
switch (cpu_getiloops(device)) switch (cpu_getiloops(device))
{ {
case 0: case 0:
@ -81,7 +87,7 @@ static INTERRUPT_GEN( dbz_interrupt )
break; break;
case 1: case 1:
if (K053246_is_IRQ_enabled()) if (k053246_is_irq_enabled(k053246))
cpu_set_input_line(device, M68K_IRQ_4, HOLD_LINE); cpu_set_input_line(device, M68K_IRQ_4, HOLD_LINE);
break; break;
} }
@ -96,17 +102,18 @@ static READ16_HANDLER( dbzcontrol_r )
static WRITE16_HANDLER( dbzcontrol_w ) static WRITE16_HANDLER( dbzcontrol_w )
{ {
const device_config *k053246 = devtag_get_device(space->machine, "k053246");
/* bit 10 = enable '246 readback */ /* bit 10 = enable '246 readback */
COMBINE_DATA(&dbz_control); COMBINE_DATA(&dbz_control);
if (data & 0x400) if (data & 0x400)
{ {
K053246_set_OBJCHA_line(ASSERT_LINE); k053246_set_objcha_line(k053246, ASSERT_LINE);
} }
else else
{ {
K053246_set_OBJCHA_line(CLEAR_LINE); k053246_set_objcha_line(k053246, CLEAR_LINE);
} }
coin_counter_w(space->machine, 0, data & 1); coin_counter_w(space->machine, 0, data & 1);
@ -134,19 +141,19 @@ static void dbz_sound_irq(const device_config *device, int irq)
static ADDRESS_MAP_START( dbz_map, ADDRESS_SPACE_PROGRAM, 16 ) static ADDRESS_MAP_START( dbz_map, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x000000, 0x0fffff) AM_ROM AM_RANGE(0x000000, 0x0fffff) AM_ROM
AM_RANGE(0x480000, 0x48ffff) AM_RAM AM_RANGE(0x480000, 0x48ffff) AM_RAM
AM_RANGE(0x490000, 0x491fff) AM_READWRITE(K056832_ram_word_r, K056832_ram_word_w) // '157 RAM is mirrored twice AM_RANGE(0x490000, 0x491fff) AM_DEVREADWRITE("k056832", k056832_ram_word_r, k056832_ram_word_w) // '157 RAM is mirrored twice
AM_RANGE(0x492000, 0x493fff) AM_READWRITE(K056832_ram_word_r, K056832_ram_word_w) AM_RANGE(0x492000, 0x493fff) AM_DEVREADWRITE("k056832", k056832_ram_word_r, k056832_ram_word_w)
AM_RANGE(0x498000, 0x49ffff) AM_READ(K056832_rom_word_8000_r) // code near a60 in dbz2, subroutine at 730 in dbz AM_RANGE(0x498000, 0x49ffff) AM_DEVREAD("k056832", k056832_rom_word_8000_r) // code near a60 in dbz2, subroutine at 730 in dbz
AM_RANGE(0x4a0000, 0x4a0fff) AM_READWRITE(K053247_word_r, K053247_word_w) AM_RANGE(0x4a0000, 0x4a0fff) AM_DEVREADWRITE("k053246", k053247_word_r, k053247_word_w)
AM_RANGE(0x4a1000, 0x4a3fff) AM_RAM AM_RANGE(0x4a1000, 0x4a3fff) AM_RAM
AM_RANGE(0x4a8000, 0x4abfff) AM_RAM_WRITE(paletteram16_xRRRRRGGGGGBBBBB_word_w) AM_BASE_GENERIC(paletteram) // palette AM_RANGE(0x4a8000, 0x4abfff) AM_RAM_WRITE(paletteram16_xRRRRRGGGGGBBBBB_word_w) AM_BASE_GENERIC(paletteram) // palette
AM_RANGE(0x4c0000, 0x4c0001) AM_READ(K053246_word_r) AM_RANGE(0x4c0000, 0x4c0001) AM_DEVREAD("k053246", k053246_word_r)
AM_RANGE(0x4c0000, 0x4c0007) AM_WRITE(K053246_word_w) AM_RANGE(0x4c0000, 0x4c0007) AM_DEVWRITE("k053246", k053246_word_w)
AM_RANGE(0x4c4000, 0x4c4007) AM_WRITE(K053246_word_w) AM_RANGE(0x4c4000, 0x4c4007) AM_DEVWRITE("k053246", k053246_word_w)
AM_RANGE(0x4c8000, 0x4c8007) AM_WRITE(K056832_b_word_w) AM_RANGE(0x4c8000, 0x4c8007) AM_DEVWRITE("k056832", k056832_b_word_w)
AM_RANGE(0x4cc000, 0x4cc03f) AM_WRITE(K056832_word_w) AM_RANGE(0x4cc000, 0x4cc03f) AM_DEVWRITE("k056832", k056832_word_w)
AM_RANGE(0x4d0000, 0x4d001f) AM_WRITEONLY AM_BASE(&K053936_0_ctrl) AM_RANGE(0x4d0000, 0x4d001f) AM_DEVWRITE("k053936_1", k053936_ctrl_w)
AM_RANGE(0x4d4000, 0x4d401f) AM_WRITEONLY AM_BASE(&K053936_1_ctrl) AM_RANGE(0x4d4000, 0x4d401f) AM_DEVWRITE("k053936_2", k053936_ctrl_w)
AM_RANGE(0x4e0000, 0x4e0001) AM_READ_PORT("P1_P2") AM_RANGE(0x4e0000, 0x4e0001) AM_READ_PORT("P1_P2")
AM_RANGE(0x4e0002, 0x4e0003) AM_READ_PORT("SYSTEM_DSW1") AM_RANGE(0x4e0002, 0x4e0003) AM_READ_PORT("SYSTEM_DSW1")
AM_RANGE(0x4e4000, 0x4e4001) AM_READ_PORT("DSW2") AM_RANGE(0x4e4000, 0x4e4001) AM_READ_PORT("DSW2")
@ -155,12 +162,12 @@ static ADDRESS_MAP_START( dbz_map, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x4f0000, 0x4f0001) AM_WRITE(dbz_sound_command_w) AM_RANGE(0x4f0000, 0x4f0001) AM_WRITE(dbz_sound_command_w)
AM_RANGE(0x4f4000, 0x4f4001) AM_WRITE(dbz_sound_cause_nmi) AM_RANGE(0x4f4000, 0x4f4001) AM_WRITE(dbz_sound_cause_nmi)
AM_RANGE(0x4f8000, 0x4f801f) AM_WRITENOP // 251 #1 AM_RANGE(0x4f8000, 0x4f801f) AM_WRITENOP // 251 #1
AM_RANGE(0x4fc000, 0x4fc01f) AM_WRITE(K053251_lsb_w) // 251 #2 AM_RANGE(0x4fc000, 0x4fc01f) AM_DEVWRITE("k053251", k053251_lsb_w) // 251 #2
AM_RANGE(0x500000, 0x501fff) AM_RAM_WRITE(dbz_bg2_videoram_w) AM_BASE(&dbz_bg2_videoram) AM_RANGE(0x500000, 0x501fff) AM_RAM_WRITE(dbz_bg2_videoram_w) AM_BASE(&dbz_bg2_videoram)
AM_RANGE(0x508000, 0x509fff) AM_RAM_WRITE(dbz_bg1_videoram_w) AM_BASE(&dbz_bg1_videoram) AM_RANGE(0x508000, 0x509fff) AM_RAM_WRITE(dbz_bg1_videoram_w) AM_BASE(&dbz_bg1_videoram)
AM_RANGE(0x510000, 0x513fff) AM_RAM AM_BASE(&K053936_0_linectrl) // ?? guess, it might not be AM_RANGE(0x510000, 0x513fff) AM_DEVREADWRITE("k053936_1", k053936_linectrl_r, k053936_linectrl_w) // ?? guess, it might not be
AM_RANGE(0x518000, 0x51bfff) AM_RAM AM_BASE(&K053936_1_linectrl) // ?? guess, it might not be AM_RANGE(0x518000, 0x51bfff) AM_DEVREADWRITE("k053936_2", k053936_linectrl_r, k053936_linectrl_w) // ?? guess, it might not be
AM_RANGE(0x600000, 0x6fffff) AM_READNOP // PSAC 1 ROM readback window AM_RANGE(0x600000, 0x6fffff) AM_READNOP // PSAC 1 ROM readback window
AM_RANGE(0x700000, 0x7fffff) AM_READNOP // PSAC 2 ROM readback window AM_RANGE(0x700000, 0x7fffff) AM_READNOP // PSAC 2 ROM readback window
ADDRESS_MAP_END ADDRESS_MAP_END
@ -318,6 +325,32 @@ GFXDECODE_END
/**********************************************************************************/ /**********************************************************************************/
static const k056832_interface dbz_k056832_intf =
{
"gfx1", 2,
K056832_BPP_4,
1, 1,
KONAMI_ROM_DEINTERLEAVE_2,
dbz_tile_callback, "none"
};
static const k053247_interface dbz_k053246_intf =
{
"screen",
"gfx2", 3,
NORMAL_PLANE_ORDER,
-52, 16,
KONAMI_ROM_DEINTERLEAVE_NONE,
dbz_sprite_callback
};
/* both k053936 use the same wrap/offs */
static const k053936_interface dbz_k053936_intf =
{
1, -46, -16
};
static MACHINE_DRIVER_START( dbz ) static MACHINE_DRIVER_START( dbz )
/* basic machine hardware */ /* basic machine hardware */
@ -345,6 +378,12 @@ static MACHINE_DRIVER_START( dbz )
MDRV_VIDEO_UPDATE(dbz) MDRV_VIDEO_UPDATE(dbz)
MDRV_PALETTE_LENGTH(0x4000/2) MDRV_PALETTE_LENGTH(0x4000/2)
MDRV_K056832_ADD("k056832", dbz_k056832_intf)
MDRV_K053246_ADD("k053246", dbz_k053246_intf)
MDRV_K053251_ADD("k053251")
MDRV_K053936_ADD("k053936_1", dbz_k053936_intf)
MDRV_K053936_ADD("k053936_2", dbz_k053936_intf)
/* sound hardware */ /* sound hardware */
MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
@ -441,8 +480,6 @@ static DRIVER_INIT( dbz )
{ {
UINT16 *ROM; UINT16 *ROM;
konami_rom_deinterleave_2(machine, "gfx1");
ROM = (UINT16 *)memory_region(machine, "maincpu"); ROM = (UINT16 *)memory_region(machine, "maincpu");
// nop out dbz1's mask rom test // nop out dbz1's mask rom test
@ -460,10 +497,5 @@ static DRIVER_INIT( dbz )
ROM[0x990/2] = 0x4e71; ROM[0x990/2] = 0x4e71;
} }
static DRIVER_INIT( dbz2 )
{
konami_rom_deinterleave_2(machine, "gfx1");
}
GAME( 1993, dbz, 0, dbz, dbz, dbz, ROT0, "Banpresto", "Dragonball Z", GAME_IMPERFECT_GRAPHICS ) GAME( 1993, dbz, 0, dbz, dbz, dbz, ROT0, "Banpresto", "Dragonball Z", GAME_IMPERFECT_GRAPHICS )
GAME( 1994, dbz2, 0, dbz, dbz2, dbz2, ROT0, "Banpresto", "Dragonball Z 2 - Super Battle", GAME_IMPERFECT_GRAPHICS ) GAME( 1994, dbz2, 0, dbz, dbz2, 0, ROT0, "Banpresto", "Dragonball Z 2 - Super Battle", GAME_IMPERFECT_GRAPHICS )

View File

@ -165,7 +165,7 @@ maybe some priority issues / sprite placement issues..
***************************************************************************/ ***************************************************************************/
#include "driver.h" #include "driver.h"
#include "video/konamiic.h" #include "video/konicdev.h"
#include "cpu/m6809/m6809.h" #include "cpu/m6809/m6809.h"
#include "cpu/hd6309/hd6309.h" #include "cpu/hd6309/hd6309.h"
#include "cpu/z80/z80.h" #include "cpu/z80/z80.h"
@ -186,6 +186,9 @@ VIDEO_START(lethalen);
VIDEO_UPDATE(lethalen); VIDEO_UPDATE(lethalen);
WRITE8_HANDLER(lethalen_palette_control); WRITE8_HANDLER(lethalen_palette_control);
extern void lethalen_sprite_callback(running_machine *machine, int *code, int *color, int *priority_mask);
extern void lethalen_tile_callback(running_machine *machine, int layer, int *code, int *color, int *flags);
static int init_eeprom_count; static int init_eeprom_count;
static UINT8 cur_control2; static UINT8 cur_control2;
@ -249,7 +252,10 @@ static WRITE8_HANDLER( control2_w )
static INTERRUPT_GEN(lethalen_interrupt) static INTERRUPT_GEN(lethalen_interrupt)
{ {
if (K056832_is_IRQ_enabled(0)) cpu_set_input_line(device, HD6309_IRQ_LINE, HOLD_LINE); const device_config *k056832 = devtag_get_device(device->machine, "k056832");
if (k056832_is_irq_enabled(k056832, 0))
cpu_set_input_line(device, HD6309_IRQ_LINE, HOLD_LINE);
} }
static WRITE8_HANDLER( sound_cmd_w ) static WRITE8_HANDLER( sound_cmd_w )
@ -281,6 +287,10 @@ static WRITE8_HANDLER( le_bankswitch_w )
static READ8_HANDLER( le_4800_r ) static READ8_HANDLER( le_4800_r )
{ {
const device_config *k056832 = devtag_get_device(space->machine, "k056832");
const device_config *k053244 = devtag_get_device(space->machine, "k053244");
const device_config *k054000 = devtag_get_device(space->machine, "k054000");
if (cur_control2 & 0x10) // RAM enable if (cur_control2 & 0x10) // RAM enable
{ {
return space->machine->generic.paletteram.u8[offset]; return space->machine->generic.paletteram.u8[offset];
@ -298,7 +308,7 @@ static READ8_HANDLER( le_4800_r )
case 0x44: case 0x44:
case 0x45: case 0x45:
case 0x46: case 0x46:
return K053244_r(space,offset-0x40); return k053244_r(k053244, offset - 0x40);
case 0x80: case 0x80:
case 0x81: case 0x81:
@ -332,22 +342,22 @@ static READ8_HANDLER( le_4800_r )
case 0x9d: case 0x9d:
case 0x9e: case 0x9e:
case 0x9f: case 0x9f:
return K054000_r(space,offset-0x80); return k054000_r(k054000, offset - 0x80);
case 0xca: case 0xca:
return sound_status_r(space,0); return sound_status_r(space, 0);
} }
} }
else if (offset < 0x1800) else if (offset < 0x1800)
return K053245_r(space,(offset - 0x0800) & 0x07ff); return k053245_r(k053244, (offset - 0x0800) & 0x07ff);
else if (offset < 0x2000) else if (offset < 0x2000)
return K056832_ram_code_lo_r(space,offset - 0x1800); return k056832_ram_code_lo_r(k056832, offset - 0x1800);
else if (offset < 0x2800) else if (offset < 0x2800)
return K056832_ram_code_hi_r(space,offset - 0x2000); return k056832_ram_code_hi_r(k056832, offset - 0x2000);
else if (offset < 0x3000) else if (offset < 0x3000)
return K056832_ram_attr_lo_r(space,offset - 0x2800); return k056832_ram_attr_lo_r(k056832, offset - 0x2800);
else // (offset < 0x3800) else // (offset < 0x3800)
return K056832_ram_attr_hi_r(space,offset - 0x3000); return k056832_ram_attr_hi_r(k056832, offset - 0x3000);
} }
return 0; return 0;
@ -355,6 +365,10 @@ static READ8_HANDLER( le_4800_r )
static WRITE8_HANDLER( le_4800_w ) static WRITE8_HANDLER( le_4800_w )
{ {
const device_config *k056832 = devtag_get_device(space->machine, "k056832");
const device_config *k053244 = devtag_get_device(space->machine, "k053244");
const device_config *k054000 = devtag_get_device(space->machine, "k054000");
if (cur_control2 & 0x10) // RAM enable if (cur_control2 & 0x10) // RAM enable
{ {
paletteram_xBBBBBGGGGGRRRRR_be_w(space,offset,data); paletteram_xBBBBBGGGGGRRRRR_be_w(space,offset,data);
@ -380,7 +394,7 @@ static WRITE8_HANDLER( le_4800_w )
case 0x44: case 0x44:
case 0x45: case 0x45:
case 0x46: case 0x46:
K053244_w(space, offset-0x40, data); k053244_w(k053244, offset - 0x40, data);
break; break;
case 0x80: case 0x80:
@ -415,7 +429,7 @@ static WRITE8_HANDLER( le_4800_w )
case 0x9d: case 0x9d:
case 0x9e: case 0x9e:
case 0x9f: case 0x9f:
K054000_w(space, offset-0x80, data); k054000_w(k054000, offset - 0x80, data);
break; break;
default: default:
@ -424,18 +438,15 @@ static WRITE8_HANDLER( le_4800_w )
} }
} }
else if (offset < 0x1800) else if (offset < 0x1800)
{ k053245_w(k053244, (offset - 0x0800) & 0x07ff, data);
K053245_w(space, (offset - 0x0800) & 0x07ff, data);
}
else if (offset < 0x2000) else if (offset < 0x2000)
K056832_ram_code_lo_w(space, offset - 0x1800, data); k056832_ram_code_lo_w(k056832, offset - 0x1800, data);
else if (offset < 0x2800) else if (offset < 0x2800)
K056832_ram_code_hi_w(space, offset - 0x2000, data); k056832_ram_code_hi_w(k056832, offset - 0x2000, data);
else if (offset < 0x3000) else if (offset < 0x3000)
K056832_ram_attr_lo_w(space, offset - 0x2800, data); k056832_ram_attr_lo_w(k056832, offset - 0x2800, data);
else // (offset < 0x3800) else // (offset < 0x3800)
K056832_ram_attr_hi_w(space, offset - 0x3000, data); k056832_ram_attr_hi_w(k056832, offset - 0x3000, data);
} }
} }
@ -450,20 +461,20 @@ static READ8_HANDLER(guns_r)
switch (offset) switch (offset)
{ {
case 0: case 0:
return GUNX(1)>>1; return GUNX(1) >> 1;
case 1: case 1:
if ((240-GUNY(1)) == 7) if ((240 - GUNY(1)) == 7)
return 0; return 0;
else else
return (240-GUNY(1)); return (240 - GUNY(1));
break; break;
case 2: case 2:
return GUNX(2)>>1; return GUNX(2) >> 1;
case 3: case 3:
if ((240-GUNY(2)) == 7) if ((240 - GUNY(2)) == 7)
return 0; return 0;
else else
return (240-GUNY(2)); return (240 - GUNY(2));
break; break;
} }
@ -483,8 +494,8 @@ static READ8_HANDLER(gunsaux_r)
static ADDRESS_MAP_START( le_main, ADDRESS_SPACE_PROGRAM, 8 ) static ADDRESS_MAP_START( le_main, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0x1fff) AM_ROMBANK("bank1") AM_RANGE(0x0000, 0x1fff) AM_ROMBANK("bank1")
AM_RANGE(0x2000, 0x3fff) AM_RAM // work RAM AM_RANGE(0x2000, 0x3fff) AM_RAM // work RAM
AM_RANGE(0x4000, 0x403f) AM_WRITE(K056832_w) AM_RANGE(0x4000, 0x403f) AM_DEVWRITE("k056832", k056832_w)
AM_RANGE(0x4040, 0x404f) AM_WRITE(K056832_b_w) AM_RANGE(0x4040, 0x404f) AM_DEVWRITE("k056832", k056832_b_w)
AM_RANGE(0x4080, 0x4080) AM_READNOP // watchdog AM_RANGE(0x4080, 0x4080) AM_READNOP // watchdog
AM_RANGE(0x4090, 0x4090) AM_READNOP AM_RANGE(0x4090, 0x4090) AM_READNOP
AM_RANGE(0x40a0, 0x40a0) AM_READNOP AM_RANGE(0x40a0, 0x40a0) AM_READNOP
@ -509,8 +520,6 @@ static ADDRESS_MAP_START( le_sound, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0xfc03, 0xfc03) AM_READNOP AM_RANGE(0xfc03, 0xfc03) AM_READNOP
ADDRESS_MAP_END ADDRESS_MAP_END
/* sound */
static INPUT_PORTS_START( lethalen ) static INPUT_PORTS_START( lethalen )
PORT_START("INPUTS") PORT_START("INPUTS")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
@ -569,6 +578,28 @@ static INPUT_PORTS_START( lethalej )
PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_Y ) PORT_CROSSHAIR(Y, -1.0, 0.0, 0) PORT_SENSITIVITY(25) PORT_KEYDELTA(15) PORT_PLAYER(2) PORT_REVERSE PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_Y ) PORT_CROSSHAIR(Y, -1.0, 0.0, 0) PORT_SENSITIVITY(25) PORT_KEYDELTA(15) PORT_PLAYER(2) PORT_REVERSE
INPUT_PORTS_END INPUT_PORTS_END
static const gfx_layout lethal_6bpp =
{
16,16,
RGN_FRAC(1,2),
6,
{ RGN_FRAC(1,2)+8,RGN_FRAC(1,2)+0, 8, 0, 24, 16 },
{ 0, 1, 2, 3, 4, 5, 6, 7,
8*32+0, 8*32+1, 8*32+2, 8*32+3, 8*32+4, 8*32+5, 8*32+6, 8*32+7 },
{ 0*32, 1*32, 2*32, 3*32, 4*32, 5*32, 6*32, 7*32,
16*32, 17*32, 18*32, 19*32, 20*32, 21*32, 22*32, 23*32 },
128*8
};
/* we use this decode instead of the one done by the sprite video start due to it being 6bpp */
static GFXDECODE_START( lethal )
GFXDECODE_ENTRY( "gfx2", 0, lethal_6bpp, 0x000/*0x400*/, 256 ) /* sprites tiles */
GFXDECODE_END
/* sound */
static const k054539_interface k054539_config = static const k054539_interface k054539_config =
{ {
NULL, NULL,
@ -591,23 +622,32 @@ static MACHINE_RESET( lethalen )
device_reset(cputag_get_cpu(machine, "maincpu")); device_reset(cputag_get_cpu(machine, "maincpu"));
} }
static const gfx_layout lethal_6bpp = static const k056832_interface lethalen_k056832_intf =
{ {
16,16, "gfx1", 1,
RGN_FRAC(1,2), K056832_BPP_8LE,
6, 1, 0,
{ RGN_FRAC(1,2)+8,RGN_FRAC(1,2)+0, 8, 0, 24, 16 }, KONAMI_ROM_DEINTERLEAVE_NONE,
{ 0, 1, 2, 3, 4, 5, 6, 7, lethalen_tile_callback, "none"
8*32+0, 8*32+1, 8*32+2, 8*32+3, 8*32+4, 8*32+5, 8*32+6, 8*32+7 },
{ 0*32, 1*32, 2*32, 3*32, 4*32, 5*32, 6*32, 7*32,
16*32, 17*32, 18*32, 19*32, 20*32, 21*32, 22*32, 23*32 },
128*8
}; };
/* we use this decode instead of the one done by the sprite video start due to it being 6bpp */ static const k05324x_interface lethalen_k05324x_intf =
static GFXDECODE_START( lethal ) {
GFXDECODE_ENTRY( "gfx2", 0, lethal_6bpp, 0x000/*0x400*/, 256 ) /* sprites tiles */ "gfx3", 2,
GFXDECODE_END NORMAL_PLANE_ORDER,
95, 0,
KONAMI_ROM_DEINTERLEAVE_2,
lethalen_sprite_callback
};
static const k05324x_interface lethalej_k05324x_intf =
{
"gfx3", 2,
NORMAL_PLANE_ORDER,
-105, 0,
KONAMI_ROM_DEINTERLEAVE_2,
lethalen_sprite_callback
};
static MACHINE_DRIVER_START( lethalen ) static MACHINE_DRIVER_START( lethalen )
/* basic machine hardware */ /* basic machine hardware */
@ -640,6 +680,10 @@ static MACHINE_DRIVER_START( lethalen )
MDRV_VIDEO_START(lethalen) MDRV_VIDEO_START(lethalen)
MDRV_VIDEO_UPDATE(lethalen) MDRV_VIDEO_UPDATE(lethalen)
MDRV_K056832_ADD("k056832", lethalen_k056832_intf)
MDRV_K053244_ADD("k053244", lethalen_k05324x_intf)
MDRV_K054000_ADD("k054000")
/* sound hardware */ /* sound hardware */
MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
@ -654,6 +698,9 @@ static MACHINE_DRIVER_START( lethalej )
MDRV_SCREEN_MODIFY("screen") MDRV_SCREEN_MODIFY("screen")
MDRV_SCREEN_VISIBLE_AREA(224, 512-1, 16, 240-1) MDRV_SCREEN_VISIBLE_AREA(224, 512-1, 16, 240-1)
MDRV_DEVICE_REMOVE("k053244")
MDRV_K053244_ADD("k053244", lethalej_k05324x_intf)
MACHINE_DRIVER_END MACHINE_DRIVER_END
ROM_START( lethalen ) // US version UAE ROM_START( lethalen ) // US version UAE
@ -864,9 +911,8 @@ ROM_END
static DRIVER_INIT( lethalen ) static DRIVER_INIT( lethalen )
{ {
konami_rom_deinterleave_2_half(machine, "gfx2"); konamid_rom_deinterleave_2_half(machine, "gfx2");
konami_rom_deinterleave_2(machine, "gfx3"); konamid_rom_deinterleave_2(machine, "gfx4");
konami_rom_deinterleave_2(machine, "gfx4");
} }
GAME( 1992, lethalen, 0, lethalen, lethalen, lethalen, ORIENTATION_FLIP_Y, "Konami", "Lethal Enforcers (ver UAE, 11/19/92 15:04)", GAME_IMPERFECT_GRAPHICS) // writes UE to eeprom GAME( 1992, lethalen, 0, lethalen, lethalen, lethalen, ORIENTATION_FLIP_Y, "Konami", "Lethal Enforcers (ver UAE, 11/19/92 15:04)", GAME_IMPERFECT_GRAPHICS) // writes UE to eeprom

View File

@ -87,7 +87,7 @@ driver modified by Eisuke Watanabe
#include "cpu/h83002/h8.h" #include "cpu/h83002/h8.h"
#include "cpu/upd7810/upd7810.h" #include "cpu/upd7810/upd7810.h"
#include "machine/eeprom.h" #include "machine/eeprom.h"
#include "video/konamiic.h" #include "video/konicdev.h"
#include "sound/2610intf.h" #include "sound/2610intf.h"
#include "sound/2151intf.h" #include "sound/2151intf.h"
#include "sound/2413intf.h" #include "sound/2413intf.h"
@ -1705,8 +1705,8 @@ static ADDRESS_MAP_START( blzntrnd_map, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x279700, 0x279713) AM_WRITEONLY AM_BASE(&metro_videoregs) // Video Registers AM_RANGE(0x279700, 0x279713) AM_WRITEONLY AM_BASE(&metro_videoregs) // Video Registers
AM_RANGE(0x400000, 0x43ffff) AM_RAM_WRITE(metro_K053936_w) AM_BASE(&metro_K053936_ram) // 053936 AM_RANGE(0x400000, 0x43ffff) AM_RAM_WRITE(metro_K053936_w) AM_BASE(&metro_K053936_ram) // 053936
AM_RANGE(0x500000, 0x500fff) AM_WRITEONLY AM_BASE(&K053936_0_linectrl) // 053936 line control AM_RANGE(0x500000, 0x500fff) AM_DEVWRITE("k053936", k053936_linectrl_w) // 053936 line control
AM_RANGE(0x600000, 0x60001f) AM_WRITEONLY AM_BASE(&K053936_0_ctrl) // 053936 control AM_RANGE(0x600000, 0x60001f) AM_DEVWRITE("k053936", k053936_ctrl_w) // 053936 control
AM_RANGE(0xe00000, 0xe00001) AM_READ_PORT("DSW0") AM_WRITENOP // Inputs AM_RANGE(0xe00000, 0xe00001) AM_READ_PORT("DSW0") AM_WRITENOP // Inputs
AM_RANGE(0xe00002, 0xe00003) AM_READ_PORT("DSW1") AM_WRITE(blzntrnd_sound_w) // AM_RANGE(0xe00002, 0xe00003) AM_READ_PORT("DSW1") AM_WRITE(blzntrnd_sound_w) //
@ -2048,54 +2048,54 @@ static INPUT_PORTS_START( batlbubl )
COINS COINS
PORT_START("IN2") // Strangely mapped in the 0xc00000-0xc1ffff range PORT_START("IN2") // Strangely mapped in the 0xc00000-0xc1ffff range
PORT_DIPNAME( 0x0001, 0x0001, "0" ) PORT_DIPNAME( 0x0001, 0x0001, "0" )
PORT_DIPSETTING( 0x0001, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0001, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) ) PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x0002, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0002, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) ) PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x0004, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0004, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) ) PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x0008, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0008, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) ) PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x0010, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0010, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) ) PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x0020, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0020, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) ) PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x0040, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0080, 0x0080, "Debug Mode?" ) PORT_DIPNAME( 0x0080, 0x0080, "Debug Mode?" )
PORT_DIPSETTING( 0x0080, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0100, 0x0100, DEF_STR( Unknown ) ) PORT_DIPNAME( 0x0100, 0x0100, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x0100, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0100, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Unknown ) ) PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x0200, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0200, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0400, 0x0400, DEF_STR( Unknown ) ) PORT_DIPNAME( 0x0400, 0x0400, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x0400, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0400, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0800, 0x0800, DEF_STR( Unknown ) ) PORT_DIPNAME( 0x0800, 0x0800, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x0800, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0800, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x1000, 0x1000, DEF_STR( Unknown ) ) PORT_DIPNAME( 0x1000, 0x1000, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x1000, DEF_STR( Off ) ) PORT_DIPSETTING( 0x1000, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x2000, 0x2000, DEF_STR( Unknown ) ) PORT_DIPNAME( 0x2000, 0x2000, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x2000, DEF_STR( Off ) ) PORT_DIPSETTING( 0x2000, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Unknown ) ) PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x4000, DEF_STR( Off ) ) PORT_DIPSETTING( 0x4000, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Unknown ) ) PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x8000, DEF_STR( Off ) ) PORT_DIPSETTING( 0x8000, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
INPUT_PORTS_END INPUT_PORTS_END
/*************************************************************************** /***************************************************************************
@ -4222,6 +4222,11 @@ static MACHINE_DRIVER_START( mouja )
MACHINE_DRIVER_END MACHINE_DRIVER_END
static const k053936_interface blzntrnd_k053936_intf =
{
0, -69, -21
};
static MACHINE_DRIVER_START( blzntrnd ) static MACHINE_DRIVER_START( blzntrnd )
/* basic machine hardware */ /* basic machine hardware */
@ -4249,6 +4254,8 @@ static MACHINE_DRIVER_START( blzntrnd )
MDRV_VIDEO_START(blzntrnd) MDRV_VIDEO_START(blzntrnd)
MDRV_VIDEO_UPDATE(metro) MDRV_VIDEO_UPDATE(metro)
MDRV_K053936_ADD("k053936", blzntrnd_k053936_intf)
/* sound hardware */ /* sound hardware */
MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
@ -4261,6 +4268,12 @@ static MACHINE_DRIVER_START( blzntrnd )
MACHINE_DRIVER_END MACHINE_DRIVER_END
/* like blzntrnd but new vidstart / gfxdecode for the different bg tilemap */ /* like blzntrnd but new vidstart / gfxdecode for the different bg tilemap */
static const k053936_interface gstrik2_k053936_intf =
{
0, -69, -19
};
static MACHINE_DRIVER_START( gstrik2 ) static MACHINE_DRIVER_START( gstrik2 )
/* basic machine hardware */ /* basic machine hardware */
@ -4288,6 +4301,8 @@ static MACHINE_DRIVER_START( gstrik2 )
MDRV_VIDEO_START(gstrik2) MDRV_VIDEO_START(gstrik2)
MDRV_VIDEO_UPDATE(metro) MDRV_VIDEO_UPDATE(metro)
MDRV_K053936_ADD("k053936", gstrik2_k053936_intf)
/* sound hardware */ /* sound hardware */
MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")

View File

@ -37,12 +37,12 @@
#include "driver.h" #include "driver.h"
#include "video/konamiic.h" #include "video/konicdev.h"
#include "cpu/m68000/m68000.h" #include "cpu/m68000/m68000.h"
#include "cpu/z80/z80.h" #include "cpu/z80/z80.h"
#include "machine/eeprom.h" #include "machine/eeprom.h"
#include "sound/k054539.h" #include "sound/k054539.h"
#include "konamipt.h" #include "includes/konamipt.h"
VIDEO_START( rng ); VIDEO_START( rng );
VIDEO_UPDATE( rng ); VIDEO_UPDATE( rng );
@ -52,6 +52,7 @@ WRITE16_HANDLER( rng_ttl_ram_w );
WRITE16_HANDLER( rng_936_videoram_w ); WRITE16_HANDLER( rng_936_videoram_w );
extern UINT16 *rng_936_videoram; extern UINT16 *rng_936_videoram;
extern void rng_sprite_callback(running_machine *machine, int *code, int *color, int *priority_mask);
static UINT16 *rng_sysreg; static UINT16 *rng_sysreg;
static int init_eeprom_count; static int init_eeprom_count;
@ -95,20 +96,20 @@ static READ16_HANDLER( rng_sysregs_r )
{ {
case 0x00/2: case 0x00/2:
if (input_port_read(space->machine, "DSW") & 0x20) if (input_port_read(space->machine, "DSW") & 0x20)
return(input_port_read(space->machine, "P1") | input_port_read(space->machine, "P3")<<8); return(input_port_read(space->machine, "P1") | input_port_read(space->machine, "P3") << 8);
else else
{ {
data = input_port_read(space->machine, "P1") & input_port_read(space->machine, "P3"); data = input_port_read(space->machine, "P1") & input_port_read(space->machine, "P3");
return(data<<8 | data); return(data << 8 | data);
} }
case 0x02/2: case 0x02/2:
if (input_port_read(space->machine, "DSW") & 0x20) if (input_port_read(space->machine, "DSW") & 0x20)
return(input_port_read(space->machine, "P2") | input_port_read(space->machine, "P4")<<8); return(input_port_read(space->machine, "P2") | input_port_read(space->machine, "P4") << 8);
else else
{ {
data = input_port_read(space->machine, "P2") & input_port_read(space->machine, "P4"); data = input_port_read(space->machine, "P2") & input_port_read(space->machine, "P4");
return(data<<8 | data); return(data << 8 | data);
} }
case 0x04/2: case 0x04/2:
@ -138,6 +139,7 @@ static READ16_HANDLER( rng_sysregs_r )
static WRITE16_HANDLER( rng_sysregs_w ) static WRITE16_HANDLER( rng_sysregs_w )
{ {
const device_config *k055673 = devtag_get_device(space->machine, "k055673");
COMBINE_DATA(rng_sysreg + offset); COMBINE_DATA(rng_sysreg + offset);
switch (offset) switch (offset)
@ -169,7 +171,7 @@ static WRITE16_HANDLER( rng_sysregs_w )
bit 2 : OBJCHA bit 2 : OBJCHA
bit 3 : enable IRQ 5 bit 3 : enable IRQ 5
*/ */
K053246_set_OBJCHA_line((data & 0x04) ? ASSERT_LINE : CLEAR_LINE); k053246_set_objcha_line(k055673, (data & 0x04) ? ASSERT_LINE : CLEAR_LINE);
break; break;
} }
} }
@ -212,25 +214,25 @@ static ADDRESS_MAP_START( rungun_map, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x380000, 0x39ffff) AM_RAM // work RAM AM_RANGE(0x380000, 0x39ffff) AM_RAM // work RAM
AM_RANGE(0x400000, 0x43ffff) AM_READNOP // AM_READ( K053936_0_rom_r ) // '936 ROM readback window AM_RANGE(0x400000, 0x43ffff) AM_READNOP // AM_READ( K053936_0_rom_r ) // '936 ROM readback window
AM_RANGE(0x480000, 0x48001f) AM_READWRITE(rng_sysregs_r,rng_sysregs_w) AM_BASE(&rng_sysreg) AM_RANGE(0x480000, 0x48001f) AM_READWRITE(rng_sysregs_r,rng_sysregs_w) AM_BASE(&rng_sysreg)
AM_RANGE(0x4c0000, 0x4c001f) AM_READ(K053252_word_r) // CCU (for scanline and vblank polling) AM_RANGE(0x4c0000, 0x4c001f) AM_DEVREAD("k053252", k053252_word_r) // CCU (for scanline and vblank polling)
AM_RANGE(0x540000, 0x540001) AM_WRITE(sound_irq_w) AM_RANGE(0x540000, 0x540001) AM_WRITE(sound_irq_w)
AM_RANGE(0x58000c, 0x58000d) AM_WRITE(sound_cmd1_w) AM_RANGE(0x58000c, 0x58000d) AM_WRITE(sound_cmd1_w)
AM_RANGE(0x58000e, 0x58000f) AM_WRITE(sound_cmd2_w) AM_RANGE(0x58000e, 0x58000f) AM_WRITE(sound_cmd2_w)
AM_RANGE(0x580014, 0x580015) AM_READ(sound_status_msb_r) AM_RANGE(0x580014, 0x580015) AM_READ(sound_status_msb_r)
AM_RANGE(0x580000, 0x58001f) AM_RAM // sound regs read/write fall-through AM_RANGE(0x580000, 0x58001f) AM_RAM // sound regs read/write fall-through
AM_RANGE(0x5c0000, 0x5c000d) AM_READ(K053246_word_r) // 246A ROM readback window AM_RANGE(0x5c0000, 0x5c000d) AM_DEVREAD("k055673", k053246_word_r) // 246A ROM readback window
AM_RANGE(0x5c0010, 0x5c001f) AM_WRITE(K053247_reg_word_w) AM_RANGE(0x5c0010, 0x5c001f) AM_DEVWRITE("k055673", k053247_reg_word_w)
AM_RANGE(0x600000, 0x600fff) AM_READWRITE(K053247_word_r,K053247_word_w) // OBJ RAM AM_RANGE(0x600000, 0x600fff) AM_DEVREADWRITE("k055673", k053247_word_r, k053247_word_w) // OBJ RAM
AM_RANGE(0x601000, 0x601fff) AM_RAM // communication? second monitor buffer? AM_RANGE(0x601000, 0x601fff) AM_RAM // communication? second monitor buffer?
AM_RANGE(0x640000, 0x640007) AM_WRITE(K053246_word_w) // '246A registers AM_RANGE(0x640000, 0x640007) AM_DEVWRITE("k055673", k053246_word_w) // '246A registers
AM_RANGE(0x680000, 0x68001f) AM_WRITEONLY AM_BASE(&K053936_0_ctrl) // '936 registers AM_RANGE(0x680000, 0x68001f) AM_DEVWRITE("k053936", k053936_ctrl_w) // '936 registers
AM_RANGE(0x6c0000, 0x6cffff) AM_RAM_WRITE(rng_936_videoram_w) AM_BASE(&rng_936_videoram) // PSAC2 ('936) RAM (34v + 35v) AM_RANGE(0x6c0000, 0x6cffff) AM_RAM_WRITE(rng_936_videoram_w) AM_BASE(&rng_936_videoram) // PSAC2 ('936) RAM (34v + 35v)
AM_RANGE(0x700000, 0x7007ff) AM_RAM AM_BASE(&K053936_0_linectrl) // PSAC "Line RAM" AM_RANGE(0x700000, 0x7007ff) AM_DEVREADWRITE("k053936", k053936_linectrl_r, k053936_linectrl_w) // PSAC "Line RAM"
AM_RANGE(0x740000, 0x741fff) AM_READWRITE(rng_ttl_ram_r,rng_ttl_ram_w) // text plane RAM AM_RANGE(0x740000, 0x741fff) AM_READWRITE(rng_ttl_ram_r,rng_ttl_ram_w) // text plane RAM
AM_RANGE(0x7c0000, 0x7c0001) AM_WRITENOP // watchdog AM_RANGE(0x7c0000, 0x7c0001) AM_WRITENOP // watchdog
#if RNG_DEBUG #if RNG_DEBUG
AM_RANGE(0x5c0010, 0x5c001f) AM_READ(K053247_reg_word_r) AM_RANGE(0x5c0010, 0x5c001f) AM_DEVREAD("k055673", k053247_reg_word_r)
AM_RANGE(0x640000, 0x640007) AM_READ(K053246_reg_word_r) AM_RANGE(0x640000, 0x640007) AM_DEVREAD("k055673", k053246_reg_word_r)
#endif #endif
ADDRESS_MAP_END ADDRESS_MAP_END
@ -277,77 +279,6 @@ static ADDRESS_MAP_START( rungun_sound_map, ADDRESS_SPACE_PROGRAM, 8 )
ADDRESS_MAP_END ADDRESS_MAP_END
static const k054539_interface k054539_config =
{
"shared"
};
/**********************************************************************************/
static const gfx_layout bglayout =
{
16,16,
RGN_FRAC(1,1),
4,
{ 0, 1, 2, 3 },
{ 0*4, 1*4, 2*4, 3*4, 4*4, 5*4, 6*4, 7*4, 8*4,
9*4, 10*4, 11*4, 12*4, 13*4, 14*4, 15*4 },
{ 0*64, 1*64, 2*64, 3*64, 4*64, 5*64, 6*64, 7*64,
8*64, 9*64, 10*64, 11*64, 12*64, 13*64, 14*64, 15*64 },
128*8
};
static GFXDECODE_START( rungun )
GFXDECODE_ENTRY( "gfx1", 0, bglayout, 0x0000, 64 )
GFXDECODE_END
static MACHINE_DRIVER_START( rng )
/* basic machine hardware */
MDRV_CPU_ADD("maincpu", M68000, 16000000)
MDRV_CPU_PROGRAM_MAP(rungun_map)
MDRV_CPU_VBLANK_INT("screen", rng_interrupt)
MDRV_CPU_ADD("soundcpu", Z80, 10000000) // 8Mhz (10Mhz is much safer in self-test due to heavy sync)
MDRV_CPU_PROGRAM_MAP(rungun_sound_map)
MDRV_CPU_PERIODIC_INT(audio_interrupt, 480)
MDRV_QUANTUM_TIME(HZ(6000)) // higher if sound stutters
MDRV_GFXDECODE(rungun)
MDRV_MACHINE_RESET(rng)
MDRV_NVRAM_HANDLER(rungun)
/* video hardware */
MDRV_VIDEO_ATTRIBUTES(VIDEO_HAS_SHADOWS | VIDEO_HAS_HIGHLIGHTS | VIDEO_UPDATE_BEFORE_VBLANK)
MDRV_SCREEN_ADD("screen", RASTER)
MDRV_SCREEN_REFRESH_RATE(60)
MDRV_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
MDRV_SCREEN_SIZE(64*8, 32*8)
MDRV_SCREEN_VISIBLE_AREA(88, 88+384-1, 24, 24+224-1)
MDRV_PALETTE_LENGTH(1024)
MDRV_VIDEO_START(rng)
MDRV_VIDEO_UPDATE(rng)
/* sound hardware */
MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
MDRV_SOUND_ADD("konami1", K054539, 48000)
MDRV_SOUND_CONFIG(k054539_config)
MDRV_SOUND_ROUTE(0, "lspeaker", 1.0)
MDRV_SOUND_ROUTE(1, "rspeaker", 1.0)
MDRV_SOUND_ADD("konami2", K054539, 48000)
MDRV_SOUND_CONFIG(k054539_config)
MDRV_SOUND_ROUTE(0, "lspeaker", 1.0)
MDRV_SOUND_ROUTE(1, "rspeaker", 1.0)
MACHINE_DRIVER_END
static INPUT_PORTS_START( rng ) static INPUT_PORTS_START( rng )
PORT_START("SYSTEM") PORT_START("SYSTEM")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
@ -399,6 +330,102 @@ static INPUT_PORTS_START( rng )
INPUT_PORTS_END INPUT_PORTS_END
/**********************************************************************************/
static const gfx_layout bglayout =
{
16,16,
RGN_FRAC(1,1),
4,
{ 0, 1, 2, 3 },
{ 0*4, 1*4, 2*4, 3*4, 4*4, 5*4, 6*4, 7*4, 8*4,
9*4, 10*4, 11*4, 12*4, 13*4, 14*4, 15*4 },
{ 0*64, 1*64, 2*64, 3*64, 4*64, 5*64, 6*64, 7*64,
8*64, 9*64, 10*64, 11*64, 12*64, 13*64, 14*64, 15*64 },
128*8
};
static GFXDECODE_START( rungun )
GFXDECODE_ENTRY( "gfx1", 0, bglayout, 0x0000, 64 )
GFXDECODE_END
static const k054539_interface k054539_config =
{
"shared"
};
static const k053936_interface rng_k053936_intf =
{
0, 34, 9
};
static const k053247_interface rng_k055673_intf =
{
"screen",
"gfx2", 1,
K055673_LAYOUT_RNG,
-8, 15,
KONAMI_ROM_DEINTERLEAVE_NONE, // there is some interleave in VIDEO_START...
rng_sprite_callback
};
static MACHINE_DRIVER_START( rng )
/* basic machine hardware */
MDRV_CPU_ADD("maincpu", M68000, 16000000)
MDRV_CPU_PROGRAM_MAP(rungun_map)
MDRV_CPU_VBLANK_INT("screen", rng_interrupt)
MDRV_CPU_ADD("soundcpu", Z80, 10000000) // 8Mhz (10Mhz is much safer in self-test due to heavy sync)
MDRV_CPU_PROGRAM_MAP(rungun_sound_map)
MDRV_CPU_PERIODIC_INT(audio_interrupt, 480)
MDRV_QUANTUM_TIME(HZ(6000)) // higher if sound stutters
MDRV_GFXDECODE(rungun)
MDRV_MACHINE_RESET(rng)
MDRV_NVRAM_HANDLER(rungun)
/* video hardware */
MDRV_VIDEO_ATTRIBUTES(VIDEO_HAS_SHADOWS | VIDEO_HAS_HIGHLIGHTS | VIDEO_UPDATE_BEFORE_VBLANK)
MDRV_SCREEN_ADD("screen", RASTER)
MDRV_SCREEN_REFRESH_RATE(60)
MDRV_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
MDRV_SCREEN_SIZE(64*8, 32*8)
MDRV_SCREEN_VISIBLE_AREA(88, 88+384-1, 24, 24+224-1)
MDRV_PALETTE_LENGTH(1024)
MDRV_VIDEO_START(rng)
MDRV_VIDEO_UPDATE(rng)
MDRV_K053936_ADD("k053936", rng_k053936_intf)
MDRV_K055673_ADD("k055673", rng_k055673_intf)
MDRV_K053252_ADD("k053252")
/* sound hardware */
MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
MDRV_SOUND_ADD("konami1", K054539, 48000)
MDRV_SOUND_CONFIG(k054539_config)
MDRV_SOUND_ROUTE(0, "lspeaker", 1.0)
MDRV_SOUND_ROUTE(1, "rspeaker", 1.0)
MDRV_SOUND_ADD("konami2", K054539, 48000)
MDRV_SOUND_CONFIG(k054539_config)
MDRV_SOUND_ROUTE(0, "lspeaker", 1.0)
MDRV_SOUND_ROUTE(1, "rspeaker", 1.0)
MACHINE_DRIVER_END
ROM_START( rungun ) ROM_START( rungun )
/* main program Europe Version AA 1993, 10.8 */ /* main program Europe Version AA 1993, 10.8 */
ROM_REGION( 0x300000, "maincpu", 0) ROM_REGION( 0x300000, "maincpu", 0)

View File

@ -11,12 +11,13 @@ press F1+F3 to see ROM/RAM tests and the final animation
#include "driver.h" #include "driver.h"
#include "cpu/m68000/m68000.h" #include "cpu/m68000/m68000.h"
#include "video/konamiic.h" #include "video/konicdev.h"
#include "cpu/z80/z80.h" #include "cpu/z80/z80.h"
#include "sound/2608intf.h" #include "sound/2608intf.h"
extern UINT16 *tail2nos_bgvideoram; extern UINT16 *tail2nos_bgvideoram;
extern void tail2nos_zoom_callback(running_machine *machine, int *code,int *color,int *flags);
WRITE16_HANDLER( tail2nos_bgvideoram_w ); WRITE16_HANDLER( tail2nos_bgvideoram_w );
READ16_HANDLER( tail2nos_zoomdata_r ); READ16_HANDLER( tail2nos_zoomdata_r );
@ -46,6 +47,7 @@ static WRITE16_HANDLER( sound_command_w )
} }
} }
#if 0
static READ16_HANDLER( tail2nos_K051316_0_r ) static READ16_HANDLER( tail2nos_K051316_0_r )
{ {
return K051316_0_r(space,offset); return K051316_0_r(space,offset);
@ -62,6 +64,7 @@ static WRITE16_HANDLER( tail2nos_K051316_ctrl_0_w )
if (ACCESSING_BITS_0_7) if (ACCESSING_BITS_0_7)
K051316_ctrl_0_w(space,offset,data & 0xff); K051316_ctrl_0_w(space,offset,data & 0xff);
} }
#endif
static WRITE8_DEVICE_HANDLER( sound_bankswitch_w ) static WRITE8_DEVICE_HANDLER( sound_bankswitch_w )
{ {
@ -73,8 +76,8 @@ static ADDRESS_MAP_START( main_map, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x200000, 0x27ffff) AM_ROMBANK("bank1") /* extra ROM */ AM_RANGE(0x200000, 0x27ffff) AM_ROMBANK("bank1") /* extra ROM */
AM_RANGE(0x2c0000, 0x2dffff) AM_ROMBANK("bank2") AM_RANGE(0x2c0000, 0x2dffff) AM_ROMBANK("bank2")
AM_RANGE(0x400000, 0x41ffff) AM_READWRITE(tail2nos_zoomdata_r, tail2nos_zoomdata_w) AM_RANGE(0x400000, 0x41ffff) AM_READWRITE(tail2nos_zoomdata_r, tail2nos_zoomdata_w)
AM_RANGE(0x500000, 0x500fff) AM_READWRITE(tail2nos_K051316_0_r, tail2nos_K051316_0_w) AM_RANGE(0x500000, 0x500fff) AM_DEVREADWRITE8("k051316", k051316_r, k051316_w, 0x00ff)
AM_RANGE(0x510000, 0x51001f) AM_WRITE(tail2nos_K051316_ctrl_0_w) AM_RANGE(0x510000, 0x51001f) AM_DEVWRITE8("k051316", k051316_ctrl_w, 0x00ff)
AM_RANGE(0xff8000, 0xffbfff) AM_RAM /* work RAM */ AM_RANGE(0xff8000, 0xffbfff) AM_RAM /* work RAM */
AM_RANGE(0xffc000, 0xffc2ff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram) AM_RANGE(0xffc000, 0xffc2ff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram)
AM_RANGE(0xffc300, 0xffcfff) AM_RAM AM_RANGE(0xffc300, 0xffcfff) AM_RAM
@ -232,6 +235,13 @@ static const ym2608_interface ym2608_config =
}; };
static const k051316_interface tail2nos_k051316_intf =
{
"gfx3", 2,
-4, TRUE, 0,
1, -89, -14,
tail2nos_zoom_callback
};
static MACHINE_DRIVER_START( tail2nos ) static MACHINE_DRIVER_START( tail2nos )
@ -260,6 +270,8 @@ static MACHINE_DRIVER_START( tail2nos )
MDRV_VIDEO_START(tail2nos) MDRV_VIDEO_START(tail2nos)
MDRV_VIDEO_UPDATE(tail2nos) MDRV_VIDEO_UPDATE(tail2nos)
MDRV_K051316_ADD("k051316", tail2nos_k051316_intf)
/* sound hardware */ /* sound hardware */
MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")

View File

@ -66,7 +66,7 @@ Updates:
#include "driver.h" #include "driver.h"
#include "deprecat.h" #include "deprecat.h"
#include "video/konamiic.h" #include "video/konicdev.h"
#include "machine/eeprom.h" #include "machine/eeprom.h"
#include "cpu/m68000/m68000.h" #include "cpu/m68000/m68000.h"
#include "cpu/z80/z80.h" #include "cpu/z80/z80.h"
@ -78,37 +78,58 @@ Updates:
#include "sound/k007232.h" #include "sound/k007232.h"
#include "sound/upd7759.h" #include "sound/upd7759.h"
#include "includes/tmnt.h" #include "includes/tmnt.h"
#include "konamipt.h" #include "includes/konamipt.h"
extern void mia_tile_callback(running_machine *machine, int layer,int bank,int *code,int *color,int *flags,int *priority);
extern void cuebrick_tile_callback(running_machine *machine, int layer,int bank,int *code,int *color,int *flags,int *priority);
extern void tmnt_tile_callback(running_machine *machine, int layer,int bank,int *code,int *color,int *flags,int *priority);
extern void ssbl_tile_callback(running_machine *machine, int layer,int bank,int *code,int *color,int *flags,int *priority);
extern void blswhstl_tile_callback(running_machine *machine, int layer,int bank,int *code,int *color,int *flags,int *priority);
extern void mia_sprite_callback(running_machine *machine, int *code,int *color,int *priority,int *shadow);
extern void tmnt_sprite_callback(running_machine *machine, int *code,int *color,int *priority,int *shadow);
extern void punkshot_sprite_callback(running_machine *machine, int *code,int *color,int *priority_mask,int *shadow);
extern void thndrx2_sprite_callback(running_machine *machine, int *code,int *color,int *priority_mask,int *shadow);
extern void lgtnfght_sprite_callback(running_machine *machine, int *code,int *color,int *priority_mask);
extern void blswhstl_sprite_callback(running_machine *machine, int *code,int *color,int *priority_mask);
extern void prmrsocr_sprite_callback(running_machine *machine, int *code,int *color,int *priority_mask);
static int tmnt_soundlatch; static int tmnt_soundlatch;
static int cuebrick_snd_irqlatch, cuebrick_nvram_bank; static int cuebrick_snd_irqlatch, cuebrick_nvram_bank;
static UINT16 cuebrick_nvram[0x400*0x20]; // 32k paged in a 1k window static UINT16 cuebrick_nvram[0x400*0x20]; // 32k paged in a 1k window
static INT16 *sampledata; static INT16 *sampledata;
static READ16_HANDLER( K052109_word_noA12_r ) static READ16_HANDLER( K052109_word_noA12_r )
{ {
const device_config *k052109 = devtag_get_device(space->machine, "k052109");
/* some games have the A12 line not connected, so the chip spans */ /* some games have the A12 line not connected, so the chip spans */
/* twice the memory range, with mirroring */ /* twice the memory range, with mirroring */
offset = ((offset & 0x3000) >> 1) | (offset & 0x07ff); offset = ((offset & 0x3000) >> 1) | (offset & 0x07ff);
return K052109_word_r(space,offset,mem_mask); return k052109_word_r(k052109, offset, mem_mask);
} }
static WRITE16_HANDLER( K052109_word_noA12_w ) static WRITE16_HANDLER( K052109_word_noA12_w )
{ {
const device_config *k052109 = devtag_get_device(space->machine, "k052109");
/* some games have the A12 line not connected, so the chip spans */ /* some games have the A12 line not connected, so the chip spans */
/* twice the memory range, with mirroring */ /* twice the memory range, with mirroring */
offset = ((offset & 0x3000) >> 1) | (offset & 0x07ff); offset = ((offset & 0x3000) >> 1) | (offset & 0x07ff);
K052109_word_w(space,offset,data,mem_mask); k052109_word_w(k052109, offset, data, mem_mask);
} }
static WRITE16_HANDLER( punkshot_K052109_word_w ) static WRITE16_HANDLER( punkshot_K052109_word_w )
{ {
const device_config *k052109 = devtag_get_device(space->machine, "k052109");
/* it seems that a word write is supposed to affect only the MSB. The */ /* it seems that a word write is supposed to affect only the MSB. The */
/* "ROUND 1" text in punkshtj goes lost otherwise. */ /* "ROUND 1" text in punkshtj goes lost otherwise. */
if (ACCESSING_BITS_8_15) if (ACCESSING_BITS_8_15)
K052109_w(space,offset,(data >> 8) & 0xff); k052109_w(k052109, offset, (data >> 8) & 0xff);
else if (ACCESSING_BITS_0_7) else if (ACCESSING_BITS_0_7)
K052109_w(space,offset + 0x2000,data & 0xff); k052109_w(k052109, offset + 0x2000, data & 0xff);
} }
static WRITE16_HANDLER( punkshot_K052109_word_noA12_w ) static WRITE16_HANDLER( punkshot_K052109_word_noA12_w )
@ -116,7 +137,7 @@ static WRITE16_HANDLER( punkshot_K052109_word_noA12_w )
/* some games have the A12 line not connected, so the chip spans */ /* some games have the A12 line not connected, so the chip spans */
/* twice the memory range, with mirroring */ /* twice the memory range, with mirroring */
offset = ((offset & 0x3000) >> 1) | (offset & 0x07ff); offset = ((offset & 0x3000) >> 1) | (offset & 0x07ff);
punkshot_K052109_word_w(space,offset,data,mem_mask); punkshot_K052109_word_w(space, offset, data, mem_mask);
} }
@ -125,41 +146,49 @@ static WRITE16_HANDLER( punkshot_K052109_word_noA12_w )
/* A1, A5 and A6 don't go to the 053245. */ /* A1, A5 and A6 don't go to the 053245. */
static READ16_HANDLER( K053245_scattered_word_r ) static READ16_HANDLER( K053245_scattered_word_r )
{ {
const device_config *k053245 = devtag_get_device(space->machine, "k053245");
if (offset & 0x0031) if (offset & 0x0031)
return space->machine->generic.spriteram.u16[offset]; return space->machine->generic.spriteram.u16[offset];
else else
{ {
offset = ((offset & 0x000e) >> 1) | ((offset & 0x1fc0) >> 3); offset = ((offset & 0x000e) >> 1) | ((offset & 0x1fc0) >> 3);
return K053245_word_r(space,offset,mem_mask); return k053245_word_r(k053245, offset, mem_mask);
} }
} }
static WRITE16_HANDLER( K053245_scattered_word_w ) static WRITE16_HANDLER( K053245_scattered_word_w )
{ {
const device_config *k053245 = devtag_get_device(space->machine, "k053245");
COMBINE_DATA(space->machine->generic.spriteram.u16 + offset); COMBINE_DATA(space->machine->generic.spriteram.u16 + offset);
if (!(offset & 0x0031)) if (!(offset & 0x0031))
{ {
offset = ((offset & 0x000e) >> 1) | ((offset & 0x1fc0) >> 3); offset = ((offset & 0x000e) >> 1) | ((offset & 0x1fc0) >> 3);
K053245_word_w(space,offset,data,mem_mask); k053245_word_w(k053245, offset, data, mem_mask);
} }
} }
static READ16_HANDLER( K053244_word_noA1_r ) static READ16_HANDLER( K053244_word_noA1_r )
{ {
const device_config *k053245 = devtag_get_device(space->machine, "k053245");
offset &= ~1; /* handle mirror address */ offset &= ~1; /* handle mirror address */
return K053244_r(space,offset + 1) | (K053244_r(space,offset) << 8); return k053244_r(k053245, offset + 1) | (k053244_r(k053245, offset) << 8);
} }
static WRITE16_HANDLER( K053244_word_noA1_w ) static WRITE16_HANDLER( K053244_word_noA1_w )
{ {
const device_config *k053245 = devtag_get_device(space->machine, "k053245");
offset &= ~1; /* handle mirror address */ offset &= ~1; /* handle mirror address */
if (ACCESSING_BITS_8_15) if (ACCESSING_BITS_8_15)
K053244_w(space,offset,(data >> 8) & 0xff); k053244_w(k053245, offset, (data >> 8) & 0xff);
if (ACCESSING_BITS_0_7) if (ACCESSING_BITS_0_7)
K053244_w(space,offset + 1,data & 0xff); k053244_w(k053245, offset + 1, data & 0xff);
} }
static INTERRUPT_GEN(cuebrick_interrupt) static INTERRUPT_GEN(cuebrick_interrupt)
@ -180,14 +209,18 @@ static INTERRUPT_GEN(cuebrick_interrupt)
static INTERRUPT_GEN( punkshot_interrupt ) static INTERRUPT_GEN( punkshot_interrupt )
{ {
if (K052109_is_IRQ_enabled()) irq4_line_hold(device); const device_config *k052109 = devtag_get_device(device->machine, "k052109");
if (k052109_is_irq_enabled(k052109))
irq4_line_hold(device);
} }
static INTERRUPT_GEN( lgtnfght_interrupt ) static INTERRUPT_GEN( lgtnfght_interrupt )
{ {
if (K052109_is_IRQ_enabled()) irq5_line_hold(device); const device_config *k052109 = devtag_get_device(device->machine, "k052109");
if (k052109_is_irq_enabled(k052109))
irq5_line_hold(device);
} }
@ -344,8 +377,9 @@ static READ16_HANDLER( punkshot_kludge_r )
/* protection simulation derived from a bootleg */ /* protection simulation derived from a bootleg */
static READ16_HANDLER( ssriders_protection_r ) static READ16_HANDLER( ssriders_protection_r )
{ {
int data = memory_read_word(space, 0x105a0a); const device_config *k052109 = devtag_get_device(space->machine, "k052109");
int cmd = memory_read_word(space, 0x1058fc); int data = memory_read_word(space, 0x105a0a);
int cmd = memory_read_word(space, 0x1058fc);
switch (cmd) switch (cmd)
{ {
@ -375,7 +409,7 @@ static READ16_HANDLER( ssriders_protection_r )
data = -memory_read_word(space, 0x105818); data = -memory_read_word(space, 0x105818);
data = ((data / 8 - 4) & 0x1f) * 0x40; data = ((data / 8 - 4) & 0x1f) * 0x40;
data += ((memory_read_word(space, 0x105cb0) + data += ((memory_read_word(space, 0x105cb0) +
256*K052109_r(space,0x1a01) + K052109_r(space,0x1a00) - 6) / 8 + 12) & 0x3f; 256 * k052109_r(k052109, 0x1a01) + k052109_r(k052109, 0x1a00) - 6) / 8 + 12) & 0x3f;
return data; return data;
default: default:
@ -387,6 +421,8 @@ static READ16_HANDLER( ssriders_protection_r )
static WRITE16_HANDLER( ssriders_protection_w ) static WRITE16_HANDLER( ssriders_protection_w )
{ {
const device_config *k053245 = devtag_get_device(space->machine, "k053245");
if (offset == 1) if (offset == 1)
{ {
int logical_pri,hardware_pri; int logical_pri,hardware_pri;
@ -401,7 +437,7 @@ static WRITE16_HANDLER( ssriders_protection_w )
{ {
if ((memory_read_word(space, 0x180006 + 128*i) >> 8) == logical_pri) if ((memory_read_word(space, 0x180006 + 128*i) >> 8) == logical_pri)
{ {
K053245_word_w(space,8*i,hardware_pri,0x00ff); k053245_word_w(k053245, 8 * i, hardware_pri, 0x00ff);
hardware_pri++; hardware_pri++;
} }
} }
@ -578,6 +614,7 @@ static READ16_HANDLER( thndrx2_eeprom_r )
static WRITE16_HANDLER( thndrx2_eeprom_w ) static WRITE16_HANDLER( thndrx2_eeprom_w )
{ {
const device_config *k052109 = devtag_get_device(space->machine, "k052109");
static int last; static int last;
if (ACCESSING_BITS_0_7) if (ACCESSING_BITS_0_7)
@ -595,7 +632,7 @@ static WRITE16_HANDLER( thndrx2_eeprom_w )
last = data & 0x20; last = data & 0x20;
/* bit 6 = enable char ROM reading through the video RAM */ /* bit 6 = enable char ROM reading through the video RAM */
K052109_set_RMRD_line((data & 0x40) ? ASSERT_LINE : CLEAR_LINE); k052109_set_rmrd_line(k052109, (data & 0x40) ? ASSERT_LINE : CLEAR_LINE);
} }
} }
@ -663,8 +700,8 @@ static ADDRESS_MAP_START( cuebrick_main_map, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x0b0400, 0x0b0401) AM_WRITE(cuebrick_nvbank_w) AM_RANGE(0x0b0400, 0x0b0401) AM_WRITE(cuebrick_nvbank_w)
AM_RANGE(0x0c0000, 0x0c0003) AM_DEVREADWRITE8("ymsnd", ym2151_r, ym2151_w, 0xff00) AM_RANGE(0x0c0000, 0x0c0003) AM_DEVREADWRITE8("ymsnd", ym2151_r, ym2151_w, 0xff00)
AM_RANGE(0x100000, 0x107fff) AM_READWRITE(K052109_word_noA12_r, K052109_word_noA12_w) AM_RANGE(0x100000, 0x107fff) AM_READWRITE(K052109_word_noA12_r, K052109_word_noA12_w)
AM_RANGE(0x140000, 0x140007) AM_READWRITE(K051937_word_r, K051937_word_w) AM_RANGE(0x140000, 0x140007) AM_DEVREADWRITE("k051960", k051937_word_r, k051937_word_w)
AM_RANGE(0x140400, 0x1407ff) AM_READWRITE(K051960_word_r, K051960_word_w) AM_RANGE(0x140400, 0x1407ff) AM_DEVREADWRITE("k051960", k051960_word_r, k051960_word_w)
ADDRESS_MAP_END ADDRESS_MAP_END
@ -685,8 +722,8 @@ static ADDRESS_MAP_START( mia_main_map, ADDRESS_SPACE_PROGRAM, 16 )
#endif #endif
AM_RANGE(0x100000, 0x107fff) AM_READWRITE(K052109_word_noA12_r, K052109_word_noA12_w) AM_RANGE(0x100000, 0x107fff) AM_READWRITE(K052109_word_noA12_r, K052109_word_noA12_w)
// AM_RANGE(0x10e800, 0x10e801) AM_WRITENOP ??? // AM_RANGE(0x10e800, 0x10e801) AM_WRITENOP ???
AM_RANGE(0x140000, 0x140007) AM_READWRITE(K051937_word_r, K051937_word_w) AM_RANGE(0x140000, 0x140007) AM_DEVREADWRITE("k051960", k051937_word_r, k051937_word_w)
AM_RANGE(0x140400, 0x1407ff) AM_READWRITE(K051960_word_r, K051960_word_w) AM_RANGE(0x140400, 0x1407ff) AM_DEVREADWRITE("k051960", k051960_word_r, k051960_word_w)
ADDRESS_MAP_END ADDRESS_MAP_END
@ -706,8 +743,8 @@ static ADDRESS_MAP_START( tmnt_main_map, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x0c0000, 0x0c0001) AM_WRITE(tmnt_priority_w) AM_RANGE(0x0c0000, 0x0c0001) AM_WRITE(tmnt_priority_w)
AM_RANGE(0x100000, 0x107fff) AM_READWRITE(K052109_word_noA12_r, K052109_word_noA12_w) AM_RANGE(0x100000, 0x107fff) AM_READWRITE(K052109_word_noA12_r, K052109_word_noA12_w)
// AM_RANGE(0x10e800, 0x10e801) AM_WRITENOP ??? // AM_RANGE(0x10e800, 0x10e801) AM_WRITENOP ???
AM_RANGE(0x140000, 0x140007) AM_READWRITE(K051937_word_r, K051937_word_w) AM_RANGE(0x140000, 0x140007) AM_DEVREADWRITE("k051960", k051937_word_r, k051937_word_w)
AM_RANGE(0x140400, 0x1407ff) AM_READWRITE(K051960_word_r, K051960_word_w) AM_RANGE(0x140400, 0x1407ff) AM_DEVREADWRITE("k051960", k051960_word_r, k051960_word_w)
ADDRESS_MAP_END ADDRESS_MAP_END
@ -722,11 +759,11 @@ static ADDRESS_MAP_START( punkshot_main_map, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x0a0020, 0x0a0021) AM_WRITE(punkshot_0a0020_w) AM_RANGE(0x0a0020, 0x0a0021) AM_WRITE(punkshot_0a0020_w)
AM_RANGE(0x0a0040, 0x0a0043) AM_DEVREAD8("konami", punkshot_sound_r, 0x00ff) /* K053260 */ AM_RANGE(0x0a0040, 0x0a0043) AM_DEVREAD8("konami", punkshot_sound_r, 0x00ff) /* K053260 */
AM_RANGE(0x0a0040, 0x0a0041) AM_DEVWRITE8("konami", k053260_w, 0x00ff) AM_RANGE(0x0a0040, 0x0a0041) AM_DEVWRITE8("konami", k053260_w, 0x00ff)
AM_RANGE(0x0a0060, 0x0a007f) AM_WRITE(K053251_lsb_w) AM_RANGE(0x0a0060, 0x0a007f) AM_DEVWRITE("k053251", k053251_lsb_w)
AM_RANGE(0x0a0080, 0x0a0081) AM_WRITE(watchdog_reset16_w) AM_RANGE(0x0a0080, 0x0a0081) AM_WRITE(watchdog_reset16_w)
AM_RANGE(0x100000, 0x107fff) AM_READWRITE(K052109_word_noA12_r, punkshot_K052109_word_noA12_w) AM_RANGE(0x100000, 0x107fff) AM_READWRITE(K052109_word_noA12_r, punkshot_K052109_word_noA12_w)
AM_RANGE(0x110000, 0x110007) AM_READWRITE(K051937_word_r, K051937_word_w) AM_RANGE(0x110000, 0x110007) AM_DEVREADWRITE("k051960", k051937_word_r, k051937_word_w)
AM_RANGE(0x110400, 0x1107ff) AM_READWRITE(K051960_word_r, K051960_word_w) AM_RANGE(0x110400, 0x1107ff) AM_DEVREADWRITE("k051960", k051960_word_r, k051960_word_w)
AM_RANGE(0xfffffc, 0xffffff) AM_READ(punkshot_kludge_r) AM_RANGE(0xfffffc, 0xffffff) AM_READ(punkshot_kludge_r)
ADDRESS_MAP_END ADDRESS_MAP_END
@ -747,7 +784,7 @@ static ADDRESS_MAP_START( lgtnfght_main_map, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x0a0028, 0x0a0029) AM_WRITE(watchdog_reset16_w) AM_RANGE(0x0a0028, 0x0a0029) AM_WRITE(watchdog_reset16_w)
AM_RANGE(0x0b0000, 0x0b3fff) AM_READWRITE(K053245_scattered_word_r, K053245_scattered_word_w) AM_BASE_GENERIC(spriteram) AM_RANGE(0x0b0000, 0x0b3fff) AM_READWRITE(K053245_scattered_word_r, K053245_scattered_word_w) AM_BASE_GENERIC(spriteram)
AM_RANGE(0x0c0000, 0x0c001f) AM_READWRITE(K053244_word_noA1_r, K053244_word_noA1_w) AM_RANGE(0x0c0000, 0x0c001f) AM_READWRITE(K053244_word_noA1_r, K053244_word_noA1_w)
AM_RANGE(0x0e0000, 0x0e001f) AM_WRITE(K053251_lsb_w) AM_RANGE(0x0e0000, 0x0e001f) AM_DEVWRITE("k053251", k053251_lsb_w)
AM_RANGE(0x100000, 0x107fff) AM_READWRITE(K052109_word_noA12_r, K052109_word_noA12_w) AM_RANGE(0x100000, 0x107fff) AM_READWRITE(K052109_word_noA12_r, K052109_word_noA12_w)
ADDRESS_MAP_END ADDRESS_MAP_END
@ -760,11 +797,11 @@ static WRITE16_HANDLER( ssriders_soundkludge_w )
static ADDRESS_MAP_START( blswhstl_main_map, ADDRESS_SPACE_PROGRAM, 16 ) static ADDRESS_MAP_START( blswhstl_main_map, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x000000, 0x07ffff) AM_ROM AM_RANGE(0x000000, 0x07ffff) AM_ROM
AM_RANGE(0x180000, 0x183fff) AM_READWRITE(K052109_word_r, K052109_word_w) AM_RANGE(0x180000, 0x183fff) AM_DEVREADWRITE("k052109", k052109_word_r, k052109_word_w)
AM_RANGE(0x204000, 0x207fff) AM_RAM /* main RAM */ AM_RANGE(0x204000, 0x207fff) AM_RAM /* main RAM */
AM_RANGE(0x300000, 0x303fff) AM_READWRITE(K053245_scattered_word_r, K053245_scattered_word_w) AM_BASE_GENERIC(spriteram) AM_RANGE(0x300000, 0x303fff) AM_READWRITE(K053245_scattered_word_r, K053245_scattered_word_w) AM_BASE_GENERIC(spriteram)
AM_RANGE(0x400000, 0x400fff) AM_RAM_WRITE(paletteram16_xBBBBBGGGGGRRRRR_word_w) AM_BASE_GENERIC(paletteram) AM_RANGE(0x400000, 0x400fff) AM_RAM_WRITE(paletteram16_xBBBBBGGGGGRRRRR_word_w) AM_BASE_GENERIC(paletteram)
AM_RANGE(0x500000, 0x50003f) AM_READWRITE(K054000_lsb_r, K054000_lsb_w) AM_RANGE(0x500000, 0x50003f) AM_DEVREADWRITE("k054000", k054000_lsb_r, k054000_lsb_w)
AM_RANGE(0x680000, 0x68001f) AM_READWRITE(K053244_word_noA1_r, K053244_word_noA1_w) AM_RANGE(0x680000, 0x68001f) AM_READWRITE(K053244_word_noA1_r, K053244_word_noA1_w)
AM_RANGE(0x700000, 0x700001) AM_READ_PORT("P1") AM_RANGE(0x700000, 0x700001) AM_READ_PORT("P1")
AM_RANGE(0x700002, 0x700003) AM_READ_PORT("P2") AM_RANGE(0x700002, 0x700003) AM_READ_PORT("P2")
@ -772,24 +809,48 @@ static ADDRESS_MAP_START( blswhstl_main_map, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x700006, 0x700007) AM_READ_PORT("EEPROM") AM_RANGE(0x700006, 0x700007) AM_READ_PORT("EEPROM")
AM_RANGE(0x700200, 0x700201) AM_WRITE(blswhstl_eeprom_w) AM_RANGE(0x700200, 0x700201) AM_WRITE(blswhstl_eeprom_w)
AM_RANGE(0x700300, 0x700301) AM_WRITE(blswhstl_700300_w) AM_RANGE(0x700300, 0x700301) AM_WRITE(blswhstl_700300_w)
AM_RANGE(0x700400, 0x700401) AM_WRITE(watchdog_reset16_w) AM_RANGE(0x700400, 0x700401) AM_WRITE(watchdog_reset16_w)
AM_RANGE(0x780600, 0x780603) AM_DEVREAD8("konami", punkshot_sound_r, 0x00ff) /* K053260 */ AM_RANGE(0x780600, 0x780603) AM_DEVREAD8("konami", punkshot_sound_r, 0x00ff) /* K053260 */
AM_RANGE(0x780600, 0x780601) AM_DEVWRITE8("konami", k053260_w, 0x00ff) AM_RANGE(0x780600, 0x780601) AM_DEVWRITE8("konami", k053260_w, 0x00ff)
AM_RANGE(0x780604, 0x780605) AM_WRITE(ssriders_soundkludge_w) AM_RANGE(0x780604, 0x780605) AM_WRITE(ssriders_soundkludge_w)
AM_RANGE(0x780700, 0x78071f) AM_WRITE(K053251_lsb_w) AM_RANGE(0x780700, 0x78071f) AM_DEVWRITE("k053251", k053251_lsb_w)
ADDRESS_MAP_END ADDRESS_MAP_END
static WRITE16_HANDLER( K053251_glfgreat_w )
{
const device_config *k053251 = devtag_get_device(space->machine, "k053251");
const device_config *k052109 = devtag_get_device(space->machine, "k052109");
int i;
if (ACCESSING_BITS_8_15)
{
k053251_w(k053251, offset, (data >> 8) & 0xff);
/* FIXME: in the old code k052109 tilemaps were tilemaps 2,3,4 for k053251
and got marked as dirty in the write above... how was the original hardware working?!? */
for (i = 0; i < 3; i++)
{
if (k053251_get_tmap_dirty(k053251, 2 + i))
{
k052109_tilemap_mark_dirty(k052109, i);
k053251_set_tmap_dirty(k053251, 2 + i, 0);
}
}
}
}
static ADDRESS_MAP_START( glfgreat_main_map, ADDRESS_SPACE_PROGRAM, 16 ) static ADDRESS_MAP_START( glfgreat_main_map, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x000000, 0x03ffff) AM_ROM AM_RANGE(0x000000, 0x03ffff) AM_ROM
AM_RANGE(0x100000, 0x103fff) AM_RAM /* main RAM */ AM_RANGE(0x100000, 0x103fff) AM_RAM /* main RAM */
AM_RANGE(0x104000, 0x107fff) AM_READWRITE(K053245_scattered_word_r, K053245_scattered_word_w) AM_BASE_GENERIC(spriteram) AM_RANGE(0x104000, 0x107fff) AM_READWRITE(K053245_scattered_word_r, K053245_scattered_word_w) AM_BASE_GENERIC(spriteram)
AM_RANGE(0x108000, 0x108fff) AM_RAM_WRITE(paletteram16_xBBBBBGGGGGRRRRR_word_w) AM_BASE_GENERIC(paletteram) AM_RANGE(0x108000, 0x108fff) AM_RAM_WRITE(paletteram16_xBBBBBGGGGGRRRRR_word_w) AM_BASE_GENERIC(paletteram)
AM_RANGE(0x10c000, 0x10cfff) AM_RAM AM_BASE(&K053936_0_linectrl) /* 053936? */ AM_RANGE(0x10c000, 0x10cfff) AM_DEVREADWRITE("k053936", k053936_linectrl_r, k053936_linectrl_w) /* 053936? */
AM_RANGE(0x110000, 0x11001f) AM_WRITE(K053244_word_noA1_w) /* duplicate! */ AM_RANGE(0x110000, 0x11001f) AM_WRITE(K053244_word_noA1_w) /* duplicate! */
AM_RANGE(0x114000, 0x11401f) AM_READWRITE(K053244_lsb_r, K053244_lsb_w) /* duplicate! */ AM_RANGE(0x114000, 0x11401f) AM_DEVREADWRITE("k053245", k053244_lsb_r, k053244_lsb_w) /* duplicate! */
AM_RANGE(0x118000, 0x11801f) AM_WRITEONLY AM_BASE(&K053936_0_ctrl) AM_RANGE(0x118000, 0x11801f) AM_DEVWRITE("k053936", k053936_ctrl_w)
AM_RANGE(0x11c000, 0x11c01f) AM_WRITE(K053251_msb_w) // AM_RANGE(0x11c000, 0x11c01f) AM_DEVWRITE("k053251", k053251_msb_w)
AM_RANGE(0x11c000, 0x11c01f) AM_WRITE(K053251_glfgreat_w)
AM_RANGE(0x120000, 0x120001) AM_READ_PORT("P1/P2") AM_RANGE(0x120000, 0x120001) AM_READ_PORT("P1/P2")
AM_RANGE(0x120002, 0x120003) AM_READ_PORT("P3/P4") AM_RANGE(0x120002, 0x120003) AM_READ_PORT("P3/P4")
AM_RANGE(0x120004, 0x120005) AM_READ_PORT("COINS/DSW3") AM_RANGE(0x120004, 0x120005) AM_READ_PORT("COINS/DSW3")
@ -808,11 +869,12 @@ static ADDRESS_MAP_START( prmrsocr_main_map, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x100000, 0x103fff) AM_RAM /* main RAM */ AM_RANGE(0x100000, 0x103fff) AM_RAM /* main RAM */
AM_RANGE(0x104000, 0x107fff) AM_READWRITE(K053245_scattered_word_r, K053245_scattered_word_w) AM_BASE_GENERIC(spriteram) AM_RANGE(0x104000, 0x107fff) AM_READWRITE(K053245_scattered_word_r, K053245_scattered_word_w) AM_BASE_GENERIC(spriteram)
AM_RANGE(0x108000, 0x108fff) AM_RAM_WRITE(paletteram16_xBBBBBGGGGGRRRRR_word_w) AM_BASE_GENERIC(paletteram) AM_RANGE(0x108000, 0x108fff) AM_RAM_WRITE(paletteram16_xBBBBBGGGGGRRRRR_word_w) AM_BASE_GENERIC(paletteram)
AM_RANGE(0x10c000, 0x10cfff) AM_RAM AM_BASE(&K053936_0_linectrl) AM_RANGE(0x10c000, 0x10cfff) AM_DEVREADWRITE("k053936", k053936_linectrl_r, k053936_linectrl_w)
AM_RANGE(0x110000, 0x11001f) AM_WRITE(K053244_word_noA1_w) /* duplicate! */ AM_RANGE(0x110000, 0x11001f) AM_WRITE(K053244_word_noA1_w) /* duplicate! */
AM_RANGE(0x114000, 0x11401f) AM_READWRITE(K053244_lsb_r, K053244_lsb_w) /* duplicate! */ AM_RANGE(0x114000, 0x11401f) AM_DEVREADWRITE("k053245", k053244_lsb_r, k053244_lsb_w) /* duplicate! */
AM_RANGE(0x118000, 0x11801f) AM_WRITEONLY AM_BASE(&K053936_0_ctrl) AM_RANGE(0x118000, 0x11801f) AM_DEVWRITE("k053936", k053936_ctrl_w)
AM_RANGE(0x11c000, 0x11c01f) AM_WRITE(K053251_msb_w) // AM_RANGE(0x11c000, 0x11c01f) AM_DEVWRITE("k053251", k053251_msb_w)
AM_RANGE(0x11c000, 0x11c01f) AM_WRITE(K053251_glfgreat_w)
AM_RANGE(0x120000, 0x120001) AM_READ(prmrsocr_IN0_r) AM_RANGE(0x120000, 0x120001) AM_READ(prmrsocr_IN0_r)
AM_RANGE(0x120002, 0x120003) AM_READ_PORT("P2/EEPROM") AM_RANGE(0x120002, 0x120003) AM_READ_PORT("P2/EEPROM")
AM_RANGE(0x12100c, 0x12100f) AM_WRITE(prmrsocr_sound_cmd_w) AM_RANGE(0x12100c, 0x12100f) AM_WRITE(prmrsocr_sound_cmd_w)
@ -839,6 +901,8 @@ INLINE UINT32 tmnt2_get_word(running_machine *machine, UINT32 addr)
static void tmnt2_put_word(const address_space *space, UINT32 addr, UINT16 data) static void tmnt2_put_word(const address_space *space, UINT32 addr, UINT16 data)
{ {
const device_config *k053245 = devtag_get_device(space->machine, "k053245");
UINT32 offs; UINT32 offs;
if (addr >= 0x180000/2 && addr <= 0x183fff/2) if (addr >= 0x180000/2 && addr <= 0x183fff/2)
{ {
@ -847,7 +911,7 @@ static void tmnt2_put_word(const address_space *space, UINT32 addr, UINT16 data)
if (!(offs & 0x0031)) if (!(offs & 0x0031))
{ {
offs = ((offs & 0x000e) >> 1) | ((offs & 0x1fc0) >> 3); offs = ((offs & 0x000e) >> 1) | ((offs & 0x1fc0) >> 3);
K053245_word_w(space, offs, data, 0xffff); k053245_word_w(k053245, offs, data, 0xffff);
} }
} }
else if (addr >= 0x104000/2 && addr <= 0x107fff/2) sunset_104000[addr-0x104000/2] = data; else if (addr >= 0x104000/2 && addr <= 0x107fff/2) sunset_104000[addr-0x104000/2] = data;
@ -971,8 +1035,8 @@ static WRITE16_HANDLER( tmnt2_1c0800_w )
#else // for reference; do not remove #else // for reference; do not remove
static WRITE16_HANDLER( tmnt2_1c0800_w ) static WRITE16_HANDLER( tmnt2_1c0800_w )
{ {
COMBINE_DATA( tmnt2_1c0800 + offset); COMBINE_DATA( tmnt2_1c0800 + offset);
if ( offset == 0x0008 && ( tmnt2_1c0800[0x8] & 0xff00 ) == 0x8200 ) if ( offset == 0x0008 && ( tmnt2_1c0800[0x8] & 0xff00 ) == 0x8200 )
{ {
UINT32 CellSrc; UINT32 CellSrc;
UINT32 CellVar; UINT32 CellVar;
@ -984,14 +1048,14 @@ static WRITE16_HANDLER( tmnt2_1c0800_w )
dst = tmnt2_1c0800[0x02] | (tmnt2_1c0800[0x03] << 16 ); dst = tmnt2_1c0800[0x02] | (tmnt2_1c0800[0x03] << 16 );
CellSrc = tmnt2_1c0800[0x00] | (tmnt2_1c0800[0x01] << 16 ); CellSrc = tmnt2_1c0800[0x00] | (tmnt2_1c0800[0x01] << 16 );
// if ( CellDest >= 0x180000 && CellDest < 0x183fe0 ) { // if ( CellDest >= 0x180000 && CellDest < 0x183fe0 ) {
CellVar -= 0x104000; CellVar -= 0x104000;
src = (UINT16 *)(memory_region(space->machine, "maincpu") + CellSrc); src = (UINT16 *)(memory_region(space->machine, "maincpu") + CellSrc);
CellVar >>= 1; CellVar >>= 1;
memory_write_word(space,dst+0x00, 0x8000 | ((src[1] & 0xfc00) >> 2)); /* size, flip xy */ memory_write_word(space,dst+0x00, 0x8000 | ((src[1] & 0xfc00) >> 2)); /* size, flip xy */
memory_write_word(space,dst+0x04, src[0]); /* code */ memory_write_word(space,dst+0x04, src[0]); /* code */
memory_write_word(space,dst+0x18, (src[1] & 0x3ff) ^ /* color, mirror, priority */ memory_write_word(space,dst+0x18, (src[1] & 0x3ff) ^ /* color, mirror, priority */
(sunset_104000[CellVar + 0x00] & 0x0060)); (sunset_104000[CellVar + 0x00] & 0x0060));
/* base color modifier */ /* base color modifier */
@ -1077,8 +1141,8 @@ static ADDRESS_MAP_START( tmnt2_main_map, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x5c0600, 0x5c0603) AM_DEVREAD8("konami", punkshot_sound_r, 0x00ff) /* K053260 */ AM_RANGE(0x5c0600, 0x5c0603) AM_DEVREAD8("konami", punkshot_sound_r, 0x00ff) /* K053260 */
AM_RANGE(0x5c0600, 0x5c0601) AM_DEVWRITE8("konami", k053260_w, 0x00ff) AM_RANGE(0x5c0600, 0x5c0601) AM_DEVWRITE8("konami", k053260_w, 0x00ff)
AM_RANGE(0x5c0604, 0x5c0605) AM_WRITE(ssriders_soundkludge_w) AM_RANGE(0x5c0604, 0x5c0605) AM_WRITE(ssriders_soundkludge_w)
AM_RANGE(0x5c0700, 0x5c071f) AM_WRITE(K053251_lsb_w) AM_RANGE(0x5c0700, 0x5c071f) AM_DEVWRITE("k053251", k053251_lsb_w)
AM_RANGE(0x600000, 0x603fff) AM_READWRITE(K052109_word_r, K052109_word_w) AM_RANGE(0x600000, 0x603fff) AM_DEVREADWRITE("k052109", k052109_word_r, k052109_word_w)
ADDRESS_MAP_END ADDRESS_MAP_END
@ -1103,8 +1167,8 @@ static ADDRESS_MAP_START( ssriders_main_map, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x5c0600, 0x5c0603) AM_DEVREAD8("konami", punkshot_sound_r, 0x00ff) /* K053260 */ AM_RANGE(0x5c0600, 0x5c0603) AM_DEVREAD8("konami", punkshot_sound_r, 0x00ff) /* K053260 */
AM_RANGE(0x5c0600, 0x5c0601) AM_DEVWRITE8("konami", k053260_w, 0x00ff) AM_RANGE(0x5c0600, 0x5c0601) AM_DEVWRITE8("konami", k053260_w, 0x00ff)
AM_RANGE(0x5c0604, 0x5c0605) AM_WRITE(ssriders_soundkludge_w) AM_RANGE(0x5c0604, 0x5c0605) AM_WRITE(ssriders_soundkludge_w)
AM_RANGE(0x5c0700, 0x5c071f) AM_WRITE(K053251_lsb_w) AM_RANGE(0x5c0700, 0x5c071f) AM_DEVWRITE("k053251", k053251_lsb_w)
AM_RANGE(0x600000, 0x603fff) AM_READWRITE(K052109_word_r, K052109_word_w) AM_RANGE(0x600000, 0x603fff) AM_DEVREADWRITE("k052109", k052109_word_r, k052109_word_w)
ADDRESS_MAP_END ADDRESS_MAP_END
@ -1112,13 +1176,13 @@ static ADDRESS_MAP_START( sunsetbl_main_map, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x000000, 0x0bffff) AM_ROM AM_RANGE(0x000000, 0x0bffff) AM_ROM
AM_RANGE(0x104000, 0x107fff) AM_RAM /* main RAM */ AM_RANGE(0x104000, 0x107fff) AM_RAM /* main RAM */
AM_RANGE(0x14c000, 0x14cfff) AM_RAM_WRITE(paletteram16_xBBBBBGGGGGRRRRR_word_w) AM_BASE_GENERIC(paletteram) AM_RANGE(0x14c000, 0x14cfff) AM_RAM_WRITE(paletteram16_xBBBBBGGGGGRRRRR_word_w) AM_BASE_GENERIC(paletteram)
AM_RANGE(0x14e700, 0x14e71f) AM_WRITE(K053251_lsb_w) AM_RANGE(0x14e700, 0x14e71f) AM_DEVWRITE("k053251", k053251_lsb_w)
AM_RANGE(0x180000, 0x183fff) AM_READWRITE(K053245_scattered_word_r, K053245_scattered_word_w) AM_BASE_GENERIC(spriteram) AM_RANGE(0x180000, 0x183fff) AM_READWRITE(K053245_scattered_word_r, K053245_scattered_word_w) AM_BASE_GENERIC(spriteram)
AM_RANGE(0x184000, 0x18ffff) AM_RAM AM_RANGE(0x184000, 0x18ffff) AM_RAM
AM_RANGE(0x1c0300, 0x1c0301) AM_WRITE(ssriders_1c0300_w) AM_RANGE(0x1c0300, 0x1c0301) AM_WRITE(ssriders_1c0300_w)
AM_RANGE(0x1c0400, 0x1c0401) AM_WRITENOP AM_RANGE(0x1c0400, 0x1c0401) AM_WRITENOP
AM_RANGE(0x5a0000, 0x5a001f) AM_READWRITE(K053244_word_noA1_r, K053244_word_noA1_w) AM_RANGE(0x5a0000, 0x5a001f) AM_READWRITE(K053244_word_noA1_r, K053244_word_noA1_w)
AM_RANGE(0x600000, 0x603fff) AM_READWRITE(K052109_word_r, K052109_word_w) AM_RANGE(0x600000, 0x603fff) AM_DEVREADWRITE("k052109", k052109_word_r, k052109_word_w)
AM_RANGE(0x604020, 0x60402f) AM_WRITENOP /* written every frame */ AM_RANGE(0x604020, 0x60402f) AM_WRITENOP /* written every frame */
AM_RANGE(0x604200, 0x604201) AM_WRITENOP /* watchdog */ AM_RANGE(0x604200, 0x604201) AM_WRITENOP /* watchdog */
AM_RANGE(0x6119e2, 0x6119e3) AM_WRITENOP /* written a lot in some test menus (PC=18204) */ AM_RANGE(0x6119e2, 0x6119e3) AM_WRITENOP /* written a lot in some test menus (PC=18204) */
@ -1138,17 +1202,17 @@ static ADDRESS_MAP_START( thndrx2_main_map, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x000000, 0x03ffff) AM_ROM AM_RANGE(0x000000, 0x03ffff) AM_ROM
AM_RANGE(0x100000, 0x103fff) AM_RAM /* main RAM */ AM_RANGE(0x100000, 0x103fff) AM_RAM /* main RAM */
AM_RANGE(0x200000, 0x200fff) AM_RAM_WRITE(paletteram16_xBBBBBGGGGGRRRRR_word_w) AM_BASE_GENERIC(paletteram) AM_RANGE(0x200000, 0x200fff) AM_RAM_WRITE(paletteram16_xBBBBBGGGGGRRRRR_word_w) AM_BASE_GENERIC(paletteram)
AM_RANGE(0x300000, 0x30001f) AM_WRITE(K053251_lsb_w) AM_RANGE(0x300000, 0x30001f) AM_DEVWRITE("k053251", k053251_lsb_w)
AM_RANGE(0x400000, 0x400003) AM_DEVREAD8("konami", punkshot_sound_r, 0x00ff) /* K053260 */ AM_RANGE(0x400000, 0x400003) AM_DEVREAD8("konami", punkshot_sound_r, 0x00ff) /* K053260 */
AM_RANGE(0x400000, 0x400001) AM_DEVWRITE8("konami", k053260_w, 0x00ff) AM_RANGE(0x400000, 0x400001) AM_DEVWRITE8("konami", k053260_w, 0x00ff)
AM_RANGE(0x500000, 0x50003f) AM_READWRITE(K054000_lsb_r, K054000_lsb_w) AM_RANGE(0x500000, 0x50003f) AM_DEVREADWRITE("k054000", k054000_lsb_r, k054000_lsb_w)
AM_RANGE(0x500100, 0x500101) AM_WRITE(thndrx2_eeprom_w) AM_RANGE(0x500100, 0x500101) AM_WRITE(thndrx2_eeprom_w)
AM_RANGE(0x500200, 0x500201) AM_READ(thndrx2_in0_r) AM_RANGE(0x500200, 0x500201) AM_READ(thndrx2_in0_r)
AM_RANGE(0x500202, 0x500203) AM_READ(thndrx2_eeprom_r) AM_RANGE(0x500202, 0x500203) AM_READ(thndrx2_eeprom_r)
AM_RANGE(0x500300, 0x500301) AM_WRITENOP /* watchdog reset? irq enable? */ AM_RANGE(0x500300, 0x500301) AM_WRITENOP /* watchdog reset? irq enable? */
AM_RANGE(0x600000, 0x607fff) AM_READWRITE(K052109_word_noA12_r, K052109_word_noA12_w) AM_RANGE(0x600000, 0x607fff) AM_READWRITE(K052109_word_noA12_r, K052109_word_noA12_w)
AM_RANGE(0x700000, 0x700007) AM_READWRITE(K051937_word_r, K051937_word_w) AM_RANGE(0x700000, 0x700007) AM_DEVREADWRITE("k051960", k051937_word_r, k051937_word_w)
AM_RANGE(0x700400, 0x7007ff) AM_READWRITE(K051960_word_r, K051960_word_w) AM_RANGE(0x700400, 0x7007ff) AM_DEVREADWRITE("k051960", k051960_word_r, k051960_word_w)
ADDRESS_MAP_END ADDRESS_MAP_END
@ -2072,6 +2136,147 @@ static const samples_interface tmnt_samples_interface =
tmnt_decode_sample tmnt_decode_sample
}; };
/* 052109 interfaces */
static const k052109_interface cuebrick_k052109_intf =
{
"gfx1", 0,
NORMAL_PLANE_ORDER,
KONAMI_ROM_SHUFFLE8,
cuebrick_tile_callback
};
static const k052109_interface mia_k052109_intf =
{
"gfx1", 0,
NORMAL_PLANE_ORDER,
KONAMI_ROM_DEINTERLEAVE_2,
mia_tile_callback
};
static const k052109_interface tmnt_k052109_intf =
{
"gfx1", 0,
NORMAL_PLANE_ORDER,
KONAMI_ROM_DEINTERLEAVE_2,
tmnt_tile_callback
};
static const k052109_interface glfgreat_k052109_intf =
{
"gfx1", 1,
NORMAL_PLANE_ORDER,
KONAMI_ROM_SHUFFLE8,
tmnt_tile_callback
};
static const k052109_interface sunsetbl_k052109_intf =
{
"gfx1", 0,
NORMAL_PLANE_ORDER,
KONAMI_ROM_DEINTERLEAVE_2,
ssbl_tile_callback
};
static const k052109_interface blswhstl_k052109_intf =
{
"gfx1", 0,
NORMAL_PLANE_ORDER,
KONAMI_ROM_DEINTERLEAVE_2,
blswhstl_tile_callback
};
/* 053245 interfaces */
static const k05324x_interface lgtnfght_k05324x_intf =
{
"gfx2", 1,
NORMAL_PLANE_ORDER,
0, 0,
KONAMI_ROM_DEINTERLEAVE_2,
lgtnfght_sprite_callback
};
static const k05324x_interface prmrsocr_k05324x_intf =
{
"gfx2", 2,
NORMAL_PLANE_ORDER,
0, 0,
KONAMI_ROM_SHUFFLE8,
prmrsocr_sprite_callback
};
static const k05324x_interface blswhstl_k05324x_intf =
{
"gfx2", 1,
NORMAL_PLANE_ORDER,
0, 0,
KONAMI_ROM_DEINTERLEAVE_2,
blswhstl_sprite_callback
};
static const k05324x_interface glfgreat_k05324x_intf =
{
"gfx2", 2,
NORMAL_PLANE_ORDER,
0, 0,
KONAMI_ROM_SHUFFLE8,
lgtnfght_sprite_callback
};
/* 051960 interfaces */
static const k051960_interface cuebrick_k051960_intf =
{
"gfx2", 1,
REVERSE_PLANE_ORDER,
KONAMI_ROM_SHUFFLE8,
mia_sprite_callback
};
static const k051960_interface mia_k051960_intf =
{
"gfx2", 1,
REVERSE_PLANE_ORDER,
KONAMI_ROM_DEINTERLEAVE_2,
mia_sprite_callback
};
static const k051960_interface tmnt_k051960_intf =
{
"gfx2", 1,
REVERSE_PLANE_ORDER,
KONAMI_ROM_DEINTERLEAVE_2,
tmnt_sprite_callback
};
static const k051960_interface punkshot_k051960_intf =
{
"gfx2", 1,
NORMAL_PLANE_ORDER,
KONAMI_ROM_DEINTERLEAVE_2,
punkshot_sprite_callback
};
static const k051960_interface thndrx2_k051960_intf =
{
"gfx2", 1,
NORMAL_PLANE_ORDER,
KONAMI_ROM_DEINTERLEAVE_2,
thndrx2_sprite_callback
};
/* 053936 interfaces */
static const k053936_interface glfgreat_k053936_interface =
{
1, 85, 0 /* wrap, xoff, yoff */
};
static const k053936_interface prmrsocr_k053936_interface =
{
0, 85, 1 /* wrap, xoff, yoff */
};
static MACHINE_DRIVER_START( cuebrick ) static MACHINE_DRIVER_START( cuebrick )
/* basic machine hardware */ /* basic machine hardware */
@ -2095,6 +2300,9 @@ static MACHINE_DRIVER_START( cuebrick )
MDRV_VIDEO_START(cuebrick) MDRV_VIDEO_START(cuebrick)
MDRV_VIDEO_UPDATE(mia) MDRV_VIDEO_UPDATE(mia)
MDRV_K052109_ADD("k052109", cuebrick_k052109_intf)
MDRV_K051960_ADD("k051960", cuebrick_k051960_intf)
/* sound hardware */ /* sound hardware */
MDRV_SPEAKER_STANDARD_MONO("mono") MDRV_SPEAKER_STANDARD_MONO("mono")
@ -2130,6 +2338,9 @@ static MACHINE_DRIVER_START( mia )
MDRV_VIDEO_START(mia) MDRV_VIDEO_START(mia)
MDRV_VIDEO_UPDATE(mia) MDRV_VIDEO_UPDATE(mia)
MDRV_K052109_ADD("k052109", mia_k052109_intf)
MDRV_K051960_ADD("k051960", mia_k051960_intf)
/* sound hardware */ /* sound hardware */
MDRV_SPEAKER_STANDARD_MONO("mono") MDRV_SPEAKER_STANDARD_MONO("mono")
@ -2179,6 +2390,9 @@ static MACHINE_DRIVER_START( tmnt )
MDRV_VIDEO_START(tmnt) MDRV_VIDEO_START(tmnt)
MDRV_VIDEO_UPDATE(tmnt) MDRV_VIDEO_UPDATE(tmnt)
MDRV_K052109_ADD("k052109", tmnt_k052109_intf)
MDRV_K051960_ADD("k051960", tmnt_k051960_intf)
/* sound hardware */ /* sound hardware */
MDRV_SPEAKER_STANDARD_MONO("mono") MDRV_SPEAKER_STANDARD_MONO("mono")
@ -2226,6 +2440,10 @@ static MACHINE_DRIVER_START( punkshot )
MDRV_VIDEO_START(punkshot) MDRV_VIDEO_START(punkshot)
MDRV_VIDEO_UPDATE(punkshot) MDRV_VIDEO_UPDATE(punkshot)
MDRV_K052109_ADD("k052109", tmnt_k052109_intf)
MDRV_K051960_ADD("k051960", punkshot_k051960_intf)
MDRV_K053251_ADD("k053251")
/* sound hardware */ /* sound hardware */
MDRV_SPEAKER_STANDARD_MONO("mono") MDRV_SPEAKER_STANDARD_MONO("mono")
@ -2263,6 +2481,10 @@ static MACHINE_DRIVER_START( lgtnfght )
MDRV_VIDEO_START(lgtnfght) MDRV_VIDEO_START(lgtnfght)
MDRV_VIDEO_UPDATE(lgtnfght) MDRV_VIDEO_UPDATE(lgtnfght)
MDRV_K052109_ADD("k052109", tmnt_k052109_intf)
MDRV_K053245_ADD("k053245", lgtnfght_k05324x_intf)
MDRV_K053251_ADD("k053251")
/* sound hardware */ /* sound hardware */
MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
@ -2305,6 +2527,11 @@ static MACHINE_DRIVER_START( blswhstl )
MDRV_VIDEO_UPDATE(lgtnfght) MDRV_VIDEO_UPDATE(lgtnfght)
MDRV_VIDEO_EOF( blswhstl ) MDRV_VIDEO_EOF( blswhstl )
MDRV_K052109_ADD("k052109", blswhstl_k052109_intf)
MDRV_K053245_ADD("k053245", blswhstl_k05324x_intf)
MDRV_K053251_ADD("k053251")
MDRV_K054000_ADD("k054000")
/* sound hardware */ /* sound hardware */
MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
@ -2362,6 +2589,11 @@ static MACHINE_DRIVER_START( glfgreat )
MDRV_VIDEO_START(glfgreat) MDRV_VIDEO_START(glfgreat)
MDRV_VIDEO_UPDATE(glfgreat) MDRV_VIDEO_UPDATE(glfgreat)
MDRV_K052109_ADD("k052109", glfgreat_k052109_intf)
MDRV_K053245_ADD("k053245", glfgreat_k05324x_intf)
MDRV_K053936_ADD("k053936", glfgreat_k053936_interface)
MDRV_K053251_ADD("k053251")
/* sound hardware */ /* sound hardware */
MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
@ -2412,6 +2644,11 @@ static MACHINE_DRIVER_START( prmrsocr )
MDRV_VIDEO_START(prmrsocr) MDRV_VIDEO_START(prmrsocr)
MDRV_VIDEO_UPDATE(glfgreat) MDRV_VIDEO_UPDATE(glfgreat)
MDRV_K052109_ADD("k052109", glfgreat_k052109_intf)
MDRV_K053245_ADD("k053245", prmrsocr_k05324x_intf)
MDRV_K053936_ADD("k053936", prmrsocr_k053936_interface)
MDRV_K053251_ADD("k053251")
/* sound hardware */ /* sound hardware */
MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
@ -2454,6 +2691,10 @@ static MACHINE_DRIVER_START( tmnt2 )
MDRV_VIDEO_START(lgtnfght) MDRV_VIDEO_START(lgtnfght)
MDRV_VIDEO_UPDATE(tmnt2) MDRV_VIDEO_UPDATE(tmnt2)
MDRV_K052109_ADD("k052109", tmnt_k052109_intf)
MDRV_K053245_ADD("k053245", lgtnfght_k05324x_intf)
MDRV_K053251_ADD("k053251")
/* sound hardware */ /* sound hardware */
MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
@ -2495,6 +2736,10 @@ static MACHINE_DRIVER_START( ssriders )
MDRV_VIDEO_START(lgtnfght) MDRV_VIDEO_START(lgtnfght)
MDRV_VIDEO_UPDATE(tmnt2) MDRV_VIDEO_UPDATE(tmnt2)
MDRV_K052109_ADD("k052109", tmnt_k052109_intf)
MDRV_K053245_ADD("k053245", lgtnfght_k05324x_intf)
MDRV_K053251_ADD("k053251")
/* sound hardware */ /* sound hardware */
MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
@ -2529,6 +2774,10 @@ static MACHINE_DRIVER_START( sunsetbl )
MDRV_PALETTE_LENGTH(2048) MDRV_PALETTE_LENGTH(2048)
MDRV_K052109_ADD("k052109", sunsetbl_k052109_intf)
MDRV_K053245_ADD("k053245", lgtnfght_k05324x_intf)
MDRV_K053251_ADD("k053251")
MDRV_VIDEO_START(sunsetbl) MDRV_VIDEO_START(sunsetbl)
MDRV_VIDEO_UPDATE(tmnt2) MDRV_VIDEO_UPDATE(tmnt2)
@ -2569,6 +2818,11 @@ static MACHINE_DRIVER_START( thndrx2 )
MDRV_VIDEO_START(thndrx2) MDRV_VIDEO_START(thndrx2)
MDRV_VIDEO_UPDATE(thndrx2) MDRV_VIDEO_UPDATE(thndrx2)
MDRV_K052109_ADD("k052109", tmnt_k052109_intf)
MDRV_K051960_ADD("k051960", thndrx2_k051960_intf)
MDRV_K053251_ADD("k053251")
MDRV_K054000_ADD("k054000")
/* sound hardware */ /* sound hardware */
MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
@ -3690,11 +3944,6 @@ ROM_START( prmrsocrj )
ROM_LOAD( "101a06.1d", 0x0000, 0x200000, CRC(4f48e043) SHA1(f50e8642d9d3a028c243777640e7cd13da1abf86) ) ROM_LOAD( "101a06.1d", 0x0000, 0x200000, CRC(4f48e043) SHA1(f50e8642d9d3a028c243777640e7cd13da1abf86) )
ROM_END ROM_END
static DRIVER_INIT( gfx )
{
konami_rom_deinterleave_2(machine, "gfx1");
konami_rom_deinterleave_2(machine, "gfx2");
}
static DRIVER_INIT( mia ) static DRIVER_INIT( mia )
{ {
@ -3704,9 +3953,6 @@ static DRIVER_INIT( mia )
int bits[32]; int bits[32];
UINT8 *temp; UINT8 *temp;
DRIVER_INIT_CALL(gfx);
/* /*
along with the normal byte reordering, TMNT also needs the bits to along with the normal byte reordering, TMNT also needs the bits to
be shuffled around because the ROMs are connected differently to the be shuffled around because the ROMs are connected differently to the
@ -3800,9 +4046,6 @@ static DRIVER_INIT( tmnt )
int bits[32]; int bits[32];
UINT8 *temp; UINT8 *temp;
DRIVER_INIT_CALL(gfx);
/* /*
along with the normal byte reordering, TMNT also needs the bits to along with the normal byte reordering, TMNT also needs the bits to
be shuffled around because the ROMs are connected differently to the be shuffled around because the ROMs are connected differently to the
@ -3900,43 +4143,10 @@ static DRIVER_INIT( tmnt )
free(temp); free(temp);
} }
static void shuffle(UINT8 *buf,int len)
{
int i;
UINT8 t;
if (len == 2) return;
if (len % 4) fatalerror("shuffle() - not modulo 4"); /* must not happen */
len /= 2;
for (i = 0;i < len/2;i++)
{
t = buf[len/2 + i];
buf[len/2 + i] = buf[len + i];
buf[len + i] = t;
}
shuffle(buf,len);
shuffle(buf + len,len);
}
static DRIVER_INIT( glfgreat )
{
/* ROMs are interleaved at byte level */
shuffle(memory_region(machine, "gfx1"),memory_region_length(machine, "gfx1"));
shuffle(memory_region(machine, "gfx2"),memory_region_length(machine, "gfx2"));
}
static DRIVER_INIT( cuebrick ) static DRIVER_INIT( cuebrick )
{ {
machine->generic.nvram.u8 = (UINT8 *)cuebrick_nvram; machine->generic.nvram.u8 = (UINT8 *)cuebrick_nvram;
machine->generic.nvram_size = 0x400*0x20; machine->generic.nvram_size = 0x400*0x20;
/* ROMs are interleaved at byte level */
shuffle(memory_region(machine, "gfx1"),memory_region_length(machine, "gfx1"));
shuffle(memory_region(machine, "gfx2"),memory_region_length(machine, "gfx2"));
} }
GAME( 1989, cuebrick, 0, cuebrick, cuebrick, cuebrick, ROT0, "Konami", "Cue Brick (World version D)", 0 ) GAME( 1989, cuebrick, 0, cuebrick, cuebrick, cuebrick, ROT0, "Konami", "Cue Brick (World version D)", 0 )
@ -3954,43 +4164,43 @@ GAME( 1989, tmht2pa, tmnt, tmnt, tmnt2p, tmnt, ROT0, "Konami", "
GAME( 1990, tmnt2pj, tmnt, tmnt, tmnt2p, tmnt, ROT0, "Konami", "Teenage Mutant Ninja Turtles (Japan 2 Players)", 0 ) GAME( 1990, tmnt2pj, tmnt, tmnt, tmnt2p, tmnt, ROT0, "Konami", "Teenage Mutant Ninja Turtles (Japan 2 Players)", 0 )
GAME( 1989, tmnt2po, tmnt, tmnt, tmnt2p, tmnt, ROT0, "Konami", "Teenage Mutant Ninja Turtles (Oceania 2 Players)", 0 ) GAME( 1989, tmnt2po, tmnt, tmnt, tmnt2p, tmnt, ROT0, "Konami", "Teenage Mutant Ninja Turtles (Oceania 2 Players)", 0 )
GAME( 1990, punkshot, 0, punkshot, punkshot, gfx, ROT0, "Konami", "Punk Shot (US 4 Players)", 0 ) GAME( 1990, punkshot, 0, punkshot, punkshot, 0, ROT0, "Konami", "Punk Shot (US 4 Players)", 0 )
GAME( 1990, punkshot2,punkshot, punkshot, punksht2, gfx, ROT0, "Konami", "Punk Shot (US 2 Players)", 0 ) GAME( 1990, punkshot2,punkshot, punkshot, punksht2, 0, ROT0, "Konami", "Punk Shot (US 2 Players)", 0 )
GAME( 1990, punkshotj,punkshot, punkshot, punksht2, gfx, ROT0, "Konami", "Punk Shot (Japan 2 Players)", 0 ) GAME( 1990, punkshotj,punkshot, punkshot, punksht2, 0, ROT0, "Konami", "Punk Shot (Japan 2 Players)", 0 )
GAME( 1990, lgtnfght, 0, lgtnfght, lgtnfght, gfx, ROT90, "Konami", "Lightning Fighters (World)", 0 ) GAME( 1990, lgtnfght, 0, lgtnfght, lgtnfght, 0, ROT90, "Konami", "Lightning Fighters (World)", 0 )
GAME( 1990, lgtnfghta,lgtnfght, lgtnfght, lgtnfght, gfx, ROT90, "Konami", "Lightning Fighters (Asia)", 0 ) GAME( 1990, lgtnfghta,lgtnfght, lgtnfght, lgtnfght, 0, ROT90, "Konami", "Lightning Fighters (Asia)", 0 )
GAME( 1990, lgtnfghtu,lgtnfght, lgtnfght, lgtnfght, gfx, ROT90, "Konami", "Lightning Fighters (US)", 0 ) GAME( 1990, lgtnfghtu,lgtnfght, lgtnfght, lgtnfght, 0, ROT90, "Konami", "Lightning Fighters (US)", 0 )
GAME( 1990, trigon, lgtnfght, lgtnfght, lgtnfght, gfx, ROT90, "Konami", "Trigon (Japan)", 0 ) GAME( 1990, trigon, lgtnfght, lgtnfght, lgtnfght, 0, ROT90, "Konami", "Trigon (Japan)", 0 )
GAME( 1991, blswhstl, 0, blswhstl, blswhstl, gfx, ROT90, "Konami", "Bells & Whistles (Version L)", 0 ) GAME( 1991, blswhstl, 0, blswhstl, blswhstl, 0, ROT90, "Konami", "Bells & Whistles (Version L)", 0 )
GAME( 1991, detatwin, blswhstl, blswhstl, blswhstl, gfx, ROT90, "Konami", "Detana!! Twin Bee (Japan ver. J)", 0 ) GAME( 1991, detatwin, blswhstl, blswhstl, blswhstl, 0, ROT90, "Konami", "Detana!! Twin Bee (Japan ver. J)", 0 )
GAME( 1991, glfgreat, 0, glfgreat, glfgreat, glfgreat, ROT0, "Konami", "Golfing Greats", GAME_UNEMULATED_PROTECTION | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND ) GAME( 1991, glfgreat, 0, glfgreat, glfgreat, 0, ROT0, "Konami", "Golfing Greats", GAME_UNEMULATED_PROTECTION | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
GAME( 1991, glfgreatj,glfgreat, glfgreat, glfgreat, glfgreat, ROT0, "Konami", "Golfing Greats (Japan)", GAME_UNEMULATED_PROTECTION | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND ) GAME( 1991, glfgreatj,glfgreat, glfgreat, glfgreat, 0, ROT0, "Konami", "Golfing Greats (Japan)", GAME_UNEMULATED_PROTECTION | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
GAME( 1991, tmnt2, 0, tmnt2, ssridr4p, gfx, ROT0, "Konami", "Teenage Mutant Ninja Turtles - Turtles in Time (4 Players ver UAA)", 0 ) // ver. UAA GAME( 1991, tmnt2, 0, tmnt2, ssridr4p, 0, ROT0, "Konami", "Teenage Mutant Ninja Turtles - Turtles in Time (4 Players ver UAA)", 0 ) // ver. UAA
GAME( 1991, tmnt2a, tmnt2, tmnt2, ssrid4ps, gfx, ROT0, "Konami", "Teenage Mutant Ninja Turtles - Turtles in Time (4 Players ver ADA)", 0 ) // ver. ADA GAME( 1991, tmnt2a, tmnt2, tmnt2, ssrid4ps, 0, ROT0, "Konami", "Teenage Mutant Ninja Turtles - Turtles in Time (4 Players ver ADA)", 0 ) // ver. ADA
GAME( 1991, tmht22pe, tmnt2, tmnt2, ssriders, gfx, ROT0, "Konami", "Teenage Mutant Hero Turtles - Turtles in Time (2 Players ver EBA)", 0 ) // ver. EBA GAME( 1991, tmht22pe, tmnt2, tmnt2, ssriders, 0, ROT0, "Konami", "Teenage Mutant Hero Turtles - Turtles in Time (2 Players ver EBA)", 0 ) // ver. EBA
GAME( 1991, tmnt22pu, tmnt2, tmnt2, ssriders, gfx, ROT0, "Konami", "Teenage Mutant Ninja Turtles - Turtles in Time (2 Players ver UDA)", 0 ) // ver. UDA GAME( 1991, tmnt22pu, tmnt2, tmnt2, ssriders, 0, ROT0, "Konami", "Teenage Mutant Ninja Turtles - Turtles in Time (2 Players ver UDA)", 0 ) // ver. UDA
GAME( 1993, qgakumon, 0, tmnt2, qgakumon, gfx, ROT0, "Konami", "Quiz Gakumon no Susume (Japan ver. JA2 Type L)", 0 ) GAME( 1993, qgakumon, 0, tmnt2, qgakumon, 0, ROT0, "Konami", "Quiz Gakumon no Susume (Japan ver. JA2 Type L)", 0 )
GAME( 1991, ssriders, 0, ssriders, ssridr4p, gfx, ROT0, "Konami", "Sunset Riders (4 Players ver EAC)", GAME_IMPERFECT_GRAPHICS ) GAME( 1991, ssriders, 0, ssriders, ssridr4p, 0, ROT0, "Konami", "Sunset Riders (4 Players ver EAC)", GAME_IMPERFECT_GRAPHICS )
GAME( 1991, ssridersebd, ssriders, ssriders, ssriders, gfx, ROT0, "Konami", "Sunset Riders (2 Players ver EBD)", GAME_IMPERFECT_GRAPHICS ) GAME( 1991, ssridersebd, ssriders, ssriders, ssriders, 0, ROT0, "Konami", "Sunset Riders (2 Players ver EBD)", GAME_IMPERFECT_GRAPHICS )
GAME( 1991, ssridersebc, ssriders, ssriders, ssriders, gfx, ROT0, "Konami", "Sunset Riders (2 Players ver EBC)", GAME_IMPERFECT_GRAPHICS ) GAME( 1991, ssridersebc, ssriders, ssriders, ssriders, 0, ROT0, "Konami", "Sunset Riders (2 Players ver EBC)", GAME_IMPERFECT_GRAPHICS )
GAME( 1991, ssridersuda, ssriders, ssriders, ssrid4ps, gfx, ROT0, "Konami", "Sunset Riders (4 Players ver UDA)", GAME_IMPERFECT_GRAPHICS ) GAME( 1991, ssridersuda, ssriders, ssriders, ssrid4ps, 0, ROT0, "Konami", "Sunset Riders (4 Players ver UDA)", GAME_IMPERFECT_GRAPHICS )
GAME( 1991, ssriderseaa, ssriders, ssriders, ssrid4ps, gfx, ROT0, "Konami", "Sunset Riders (4 Players ver EAA)", GAME_IMPERFECT_GRAPHICS ) GAME( 1991, ssriderseaa, ssriders, ssriders, ssrid4ps, 0, ROT0, "Konami", "Sunset Riders (4 Players ver EAA)", GAME_IMPERFECT_GRAPHICS )
GAME( 1991, ssridersuac, ssriders, ssriders, ssridr4p, gfx, ROT0, "Konami", "Sunset Riders (4 Players ver UAC)", GAME_IMPERFECT_GRAPHICS ) GAME( 1991, ssridersuac, ssriders, ssriders, ssridr4p, 0, ROT0, "Konami", "Sunset Riders (4 Players ver UAC)", GAME_IMPERFECT_GRAPHICS )
GAME( 1991, ssridersubc, ssriders, ssriders, ssriders, gfx, ROT0, "Konami", "Sunset Riders (2 Players ver UBC)", GAME_IMPERFECT_GRAPHICS ) GAME( 1991, ssridersubc, ssriders, ssriders, ssriders, 0, ROT0, "Konami", "Sunset Riders (2 Players ver UBC)", GAME_IMPERFECT_GRAPHICS )
GAME( 1991, ssridersabd, ssriders, ssriders, ssriders, gfx, ROT0, "Konami", "Sunset Riders (2 Players ver ABD)", GAME_IMPERFECT_GRAPHICS ) GAME( 1991, ssridersabd, ssriders, ssriders, ssriders, 0, ROT0, "Konami", "Sunset Riders (2 Players ver ABD)", GAME_IMPERFECT_GRAPHICS )
GAME( 1991, ssridersadd, ssriders, ssriders, ssrid4ps, gfx, ROT0, "Konami", "Sunset Riders (4 Players ver ADD)", GAME_IMPERFECT_GRAPHICS ) GAME( 1991, ssridersadd, ssriders, ssriders, ssrid4ps, 0, ROT0, "Konami", "Sunset Riders (4 Players ver ADD)", GAME_IMPERFECT_GRAPHICS )
GAME( 1991, ssridersjbd, ssriders, ssriders, ssriders, gfx, ROT0, "Konami", "Sunset Riders (2 Players ver JBD)", GAME_IMPERFECT_GRAPHICS ) GAME( 1991, ssridersjbd, ssriders, ssriders, ssriders, 0, ROT0, "Konami", "Sunset Riders (2 Players ver JBD)", GAME_IMPERFECT_GRAPHICS )
GAME( 1991, ssridersb, ssriders, sunsetbl, sunsetbl, gfx, ROT0, "Konami", "Sunset Riders (bootleg 4 Players ver ADD)", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS ) GAME( 1991, ssridersb, ssriders, sunsetbl, sunsetbl, 0, ROT0, "Konami", "Sunset Riders (bootleg 4 Players ver ADD)", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS )
GAME( 1991, thndrx2, 0, thndrx2, thndrx2, gfx, ROT0, "Konami", "Thunder Cross II (World)", 0 ) GAME( 1991, thndrx2, 0, thndrx2, thndrx2, 0, ROT0, "Konami", "Thunder Cross II (World)", 0 )
GAME( 1991, thndrx2a, thndrx2, thndrx2, thndrx2, gfx, ROT0, "Konami", "Thunder Cross II (Asia)", 0 ) GAME( 1991, thndrx2a, thndrx2, thndrx2, thndrx2, 0, ROT0, "Konami", "Thunder Cross II (Asia)", 0 )
GAME( 1991, thndrx2j, thndrx2, thndrx2, thndrx2, gfx, ROT0, "Konami", "Thunder Cross II (Japan)", 0 ) GAME( 1991, thndrx2j, thndrx2, thndrx2, thndrx2, 0, ROT0, "Konami", "Thunder Cross II (Japan)", 0 )
GAME( 1993, prmrsocr, 0, prmrsocr, prmrsocr, glfgreat, ROT0, "Konami", "Premier Soccer (ver EAB)", 0 ) GAME( 1993, prmrsocr, 0, prmrsocr, prmrsocr, 0, ROT0, "Konami", "Premier Soccer (ver EAB)", 0 )
GAME( 1993, prmrsocrj,prmrsocr, prmrsocr, prmrsocr, glfgreat, ROT0, "Konami", "Premier Soccer (ver JAB)", 0 ) GAME( 1993, prmrsocrj,prmrsocr, prmrsocr, prmrsocr, 0, ROT0, "Konami", "Premier Soccer (ver JAB)", 0 )

View File

@ -12,7 +12,7 @@ Added dsw locations and verified factory setting based on Guru's notes
#include "driver.h" #include "driver.h"
#include "cpu/z80/z80.h" #include "cpu/z80/z80.h"
#include "cpu/m68000/m68000.h" #include "cpu/m68000/m68000.h"
#include "video/konamiic.h" #include "video/konicdev.h"
#include "sound/2151intf.h" #include "sound/2151intf.h"
#include "sound/okim6295.h" #include "sound/okim6295.h"
@ -22,82 +22,12 @@ WRITE16_HANDLER( ultraman_gfxctrl_w );
VIDEO_START( ultraman ); VIDEO_START( ultraman );
VIDEO_UPDATE( ultraman ); VIDEO_UPDATE( ultraman );
extern void ultraman_sprite_callback(running_machine *machine, int *code,int *color,int *priority,int *shadow);
extern void ultraman_zoom_callback_0(running_machine *machine, int *code,int *color,int *flags);
extern void ultraman_zoom_callback_1(running_machine *machine, int *code,int *color,int *flags);
extern void ultraman_zoom_callback_2(running_machine *machine, int *code,int *color,int *flags);
static READ16_HANDLER( ultraman_K051937_r )
{
return K051937_r(space, offset);
}
static READ16_HANDLER( ultraman_K051960_r )
{
return K051960_r(space, offset);
}
static READ16_HANDLER( ultraman_K051316_0_r )
{
return K051316_0_r(space, offset);
}
static READ16_HANDLER( ultraman_K051316_1_r )
{
return K051316_1_r(space, offset);
}
static READ16_HANDLER( ultraman_K051316_2_r )
{
return K051316_2_r(space, offset);
}
static WRITE16_HANDLER( ultraman_K051316_0_w )
{
if (ACCESSING_BITS_0_7)
K051316_0_w(space, offset, data & 0xff);
}
static WRITE16_HANDLER( ultraman_K051316_1_w )
{
if (ACCESSING_BITS_0_7)
K051316_1_w(space, offset, data & 0xff);
}
static WRITE16_HANDLER( ultraman_K051316_2_w )
{
if (ACCESSING_BITS_0_7)
K051316_2_w(space, offset, data & 0xff);
}
static WRITE16_HANDLER( ultraman_K051316_ctrl_0_w )
{
if (ACCESSING_BITS_0_7)
K051316_ctrl_0_w(space, offset, data & 0xff);
}
static WRITE16_HANDLER( ultraman_K051316_ctrl_1_w )
{
if (ACCESSING_BITS_0_7)
K051316_ctrl_1_w(space, offset, data & 0xff);
}
static WRITE16_HANDLER( ultraman_K051316_ctrl_2_w )
{
if (ACCESSING_BITS_0_7)
K051316_ctrl_2_w(space, offset, data & 0xff);
}
static WRITE16_HANDLER( ultraman_K051937_w )
{
if (ACCESSING_BITS_0_7)
K051937_w(space, offset, data & 0xff);
}
static WRITE16_HANDLER( ultraman_K051960_w )
{
if (ACCESSING_BITS_0_7)
K051960_w(space, offset, data & 0xff);
}
static WRITE16_HANDLER( sound_cmd_w ) static WRITE16_HANDLER( sound_cmd_w )
{ {
if (ACCESSING_BITS_0_7) if (ACCESSING_BITS_0_7)
@ -111,7 +41,6 @@ static WRITE16_HANDLER( sound_irq_trigger_w )
} }
static ADDRESS_MAP_START( main_map, ADDRESS_SPACE_PROGRAM, 16 ) static ADDRESS_MAP_START( main_map, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x000000, 0x03ffff) AM_ROM AM_RANGE(0x000000, 0x03ffff) AM_ROM
AM_RANGE(0x080000, 0x08ffff) AM_RAM AM_RANGE(0x080000, 0x08ffff) AM_RAM
@ -125,14 +54,14 @@ static ADDRESS_MAP_START( main_map, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x1c0020, 0x1c0021) AM_WRITE(sound_cmd_w) AM_RANGE(0x1c0020, 0x1c0021) AM_WRITE(sound_cmd_w)
AM_RANGE(0x1c0028, 0x1c0029) AM_WRITE(sound_irq_trigger_w) AM_RANGE(0x1c0028, 0x1c0029) AM_WRITE(sound_irq_trigger_w)
AM_RANGE(0x1c0030, 0x1c0031) AM_WRITE(watchdog_reset16_w) AM_RANGE(0x1c0030, 0x1c0031) AM_WRITE(watchdog_reset16_w)
AM_RANGE(0x204000, 0x204fff) AM_READWRITE(ultraman_K051316_0_r, ultraman_K051316_0_w) /* K051316 #0 RAM */ AM_RANGE(0x204000, 0x204fff) AM_DEVREADWRITE8("k051316_1", k051316_r, k051316_w, 0x00ff) /* K051316 #0 RAM */
AM_RANGE(0x205000, 0x205fff) AM_READWRITE(ultraman_K051316_1_r, ultraman_K051316_1_w) /* K051316 #1 RAM */ AM_RANGE(0x205000, 0x205fff) AM_DEVREADWRITE8("k051316_2", k051316_r, k051316_w, 0x00ff) /* K051316 #1 RAM */
AM_RANGE(0x206000, 0x206fff) AM_READWRITE(ultraman_K051316_2_r, ultraman_K051316_2_w) /* K051316 #2 RAM */ AM_RANGE(0x206000, 0x206fff) AM_DEVREADWRITE8("k051316_3", k051316_r, k051316_w, 0x00ff) /* K051316 #2 RAM */
AM_RANGE(0x207f80, 0x207f9f) AM_WRITE(ultraman_K051316_ctrl_0_w ) /* K051316 #0 registers */ AM_RANGE(0x207f80, 0x207f9f) AM_DEVWRITE8("k051316_1", k051316_ctrl_w, 0x00ff) /* K051316 #0 registers */
AM_RANGE(0x207fa0, 0x207fbf) AM_WRITE(ultraman_K051316_ctrl_1_w ) /* K051316 #1 registers */ AM_RANGE(0x207fa0, 0x207fbf) AM_DEVWRITE8("k051316_2", k051316_ctrl_w, 0x00ff) /* K051316 #1 registers */
AM_RANGE(0x207fc0, 0x207fdf) AM_WRITE(ultraman_K051316_ctrl_2_w ) /* K051316 #2 registers */ AM_RANGE(0x207fc0, 0x207fdf) AM_DEVWRITE8("k051316_3", k051316_ctrl_w, 0x00ff) /* K051316 #2 registers */
AM_RANGE(0x304000, 0x30400f) AM_READWRITE(ultraman_K051937_r, ultraman_K051937_w) /* Sprite control */ AM_RANGE(0x304000, 0x30400f) AM_DEVREADWRITE8("k051960", k051937_r, k051937_w, 0x00ff) /* Sprite control */
AM_RANGE(0x304800, 0x304fff) AM_READWRITE(ultraman_K051960_r, ultraman_K051960_w) /* Sprite RAM */ AM_RANGE(0x304800, 0x304fff) AM_DEVREADWRITE8("k051960", k051960_r, k051960_w, 0x00ff) /* Sprite RAM */
ADDRESS_MAP_END ADDRESS_MAP_END
static ADDRESS_MAP_START( sound_map, ADDRESS_SPACE_PROGRAM, 8 ) static ADDRESS_MAP_START( sound_map, ADDRESS_SPACE_PROGRAM, 8 )
@ -239,7 +168,37 @@ static INPUT_PORTS_START( ultraman )
INPUT_PORTS_END INPUT_PORTS_END
static const k051960_interface ultraman_k051960_intf =
{
"gfx1", 0,
NORMAL_PLANE_ORDER,
KONAMI_ROM_DEINTERLEAVE_2,
ultraman_sprite_callback
};
static const k051316_interface ultraman_k051316_intf_0 =
{
"gfx2", 1,
4, FALSE, 0,
0, 8, 0,
ultraman_zoom_callback_0
};
static const k051316_interface ultraman_k051316_intf_1 =
{
"gfx3", 2,
4, FALSE, 0,
0, 8, 0,
ultraman_zoom_callback_1
};
static const k051316_interface ultraman_k051316_intf_2 =
{
"gfx4", 3,
4, TRUE, 0,
0, 8, 0,
ultraman_zoom_callback_2
};
static MACHINE_DRIVER_START( ultraman ) static MACHINE_DRIVER_START( ultraman )
@ -269,6 +228,11 @@ static MACHINE_DRIVER_START( ultraman )
MDRV_VIDEO_START(ultraman) MDRV_VIDEO_START(ultraman)
MDRV_VIDEO_UPDATE(ultraman) MDRV_VIDEO_UPDATE(ultraman)
MDRV_K051960_ADD("k051960", ultraman_k051960_intf)
MDRV_K051316_ADD("k051316_1", ultraman_k051316_intf_0)
MDRV_K051316_ADD("k051316_2", ultraman_k051316_intf_1)
MDRV_K051316_ADD("k051316_3", ultraman_k051316_intf_2)
/* sound hardware */ /* sound hardware */
MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
@ -322,11 +286,4 @@ ROM_START( ultraman )
ROM_END ROM_END
GAME( 1991, ultraman, 0, ultraman, ultraman, 0, ROT0, "Banpresto/Bandai", "Ultraman (Japan)", 0 )
static DRIVER_INIT( ultraman )
{
konami_rom_deinterleave_2(machine, "gfx1");
}
GAME( 1991, ultraman, 0, ultraman, ultraman, ultraman, ROT0, "Banpresto/Bandai", "Ultraman (Japan)", 0 )

View File

@ -273,7 +273,7 @@ TODO:
#include "cpu/z80/z80.h" #include "cpu/z80/z80.h"
#include "cpu/m68000/m68000.h" #include "cpu/m68000/m68000.h"
#include "deprecat.h" #include "deprecat.h"
#include "video/konamiic.h" #include "video/konicdev.h"
#include "cpu/m6809/m6809.h" #include "cpu/m6809/m6809.h"
#include "sound/2151intf.h" #include "sound/2151intf.h"
#include "sound/k007232.h" #include "sound/k007232.h"
@ -305,6 +305,8 @@ VIDEO_START( wecleman );
VIDEO_UPDATE( hotchase ); VIDEO_UPDATE( hotchase );
VIDEO_START( hotchase ); VIDEO_START( hotchase );
extern void hotchase_zoom_callback_0(running_machine *machine, int *code,int *color,int *flags);
extern void hotchase_zoom_callback_1(running_machine *machine, int *code,int *color,int *flags);
/*************************************************************************** /***************************************************************************
Common Routines Common Routines
@ -564,46 +566,16 @@ ADDRESS_MAP_END
Hot Chase Main CPU Handlers Hot Chase Main CPU Handlers
***************************************************************************/ ***************************************************************************/
static READ16_HANDLER( hotchase_K051316_0_r )
{
return K051316_0_r(space, offset) & 0xff;
}
static READ16_HANDLER( hotchase_K051316_1_r )
{
return K051316_1_r(space, offset) & 0xff;
}
static WRITE16_HANDLER( hotchase_K051316_0_w )
{
if (ACCESSING_BITS_0_7) K051316_0_w(space, offset, data & 0xff);
}
static WRITE16_HANDLER( hotchase_K051316_1_w )
{
if (ACCESSING_BITS_0_7) K051316_1_w(space, offset, data & 0xff);
}
static WRITE16_HANDLER( hotchase_K051316_ctrl_0_w )
{
if (ACCESSING_BITS_0_7) K051316_ctrl_0_w(space, offset, data & 0xff);
}
static WRITE16_HANDLER( hotchase_K051316_ctrl_1_w )
{
if (ACCESSING_BITS_0_7) K051316_ctrl_1_w(space, offset, data & 0xff);
}
static WRITE16_HANDLER( hotchase_soundlatch_w ); static WRITE16_HANDLER( hotchase_soundlatch_w );
static ADDRESS_MAP_START( hotchase_map, ADDRESS_SPACE_PROGRAM, 16 ) static ADDRESS_MAP_START( hotchase_map, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x000000, 0x03ffff) AM_ROM AM_RANGE(0x000000, 0x03ffff) AM_ROM
AM_RANGE(0x040000, 0x063fff) AM_RAM // RAM (weird size!?) AM_RANGE(0x040000, 0x063fff) AM_RAM // RAM (weird size!?)
AM_RANGE(0x080000, 0x080011) AM_RAM_WRITE(blitter_w) AM_BASE(&blitter_regs) // Blitter AM_RANGE(0x080000, 0x080011) AM_RAM_WRITE(blitter_w) AM_BASE(&blitter_regs) // Blitter
AM_RANGE(0x100000, 0x100fff) AM_READWRITE(hotchase_K051316_0_r, hotchase_K051316_0_w) // Background AM_RANGE(0x100000, 0x100fff) AM_DEVREADWRITE8("k051316_1", k051316_r, k051316_w, 0x00ff) // Background
AM_RANGE(0x101000, 0x10101f) AM_WRITE(hotchase_K051316_ctrl_0_w) // Background Ctrl AM_RANGE(0x101000, 0x10101f) AM_DEVWRITE8("k051316_1", k051316_ctrl_w, 0x00ff) // Background Ctrl
AM_RANGE(0x102000, 0x102fff) AM_READWRITE(hotchase_K051316_1_r, hotchase_K051316_1_w) // Foreground AM_RANGE(0x102000, 0x102fff) AM_DEVREADWRITE8("k051316_2", k051316_r, k051316_w, 0x00ff) // Foreground
AM_RANGE(0x103000, 0x10301f) AM_WRITE(hotchase_K051316_ctrl_1_w) // Foreground Ctrl AM_RANGE(0x103000, 0x10301f) AM_DEVWRITE8("k051316_2", k051316_ctrl_w, 0x00ff) // Foreground Ctrl
AM_RANGE(0x110000, 0x111fff) AM_RAM_WRITE(hotchase_paletteram16_SBGRBBBBGGGGRRRR_word_w) AM_BASE_GENERIC(paletteram) AM_RANGE(0x110000, 0x111fff) AM_RAM_WRITE(hotchase_paletteram16_SBGRBBBBGGGGRRRR_word_w) AM_BASE_GENERIC(paletteram)
AM_RANGE(0x120000, 0x123fff) AM_RAM AM_SHARE("share1") // Shared with sub CPU AM_RANGE(0x120000, 0x123fff) AM_RAM AM_SHARE("share1") // Shared with sub CPU
AM_RANGE(0x130000, 0x130fff) AM_RAM AM_BASE_GENERIC(spriteram) // Sprites AM_RANGE(0x130000, 0x130fff) AM_RAM AM_BASE_GENERIC(spriteram) // Sprites
@ -1135,6 +1107,22 @@ static INTERRUPT_GEN( hotchase_sound_timer )
generic_pulse_irq_line(device, M6809_FIRQ_LINE); generic_pulse_irq_line(device, M6809_FIRQ_LINE);
} }
static const k051316_interface hotchase_k051316_intf_0 =
{
"gfx2", 1,
4, FALSE, 0,
1, -0xb0 / 2, -16,
hotchase_zoom_callback_0
};
static const k051316_interface hotchase_k051316_intf_1 =
{
"gfx3", 2,
4, FALSE, 0,
0, -0xb0 / 2, -16,
hotchase_zoom_callback_1
};
static MACHINE_DRIVER_START( hotchase ) static MACHINE_DRIVER_START( hotchase )
/* basic machine hardware */ /* basic machine hardware */
@ -1167,6 +1155,9 @@ static MACHINE_DRIVER_START( hotchase )
MDRV_VIDEO_START(hotchase) MDRV_VIDEO_START(hotchase)
MDRV_VIDEO_UPDATE(hotchase) MDRV_VIDEO_UPDATE(hotchase)
MDRV_K051316_ADD("k051316_1", hotchase_k051316_intf_0)
MDRV_K051316_ADD("k051316_2", hotchase_k051316_intf_1)
/* sound hardware */ /* sound hardware */
MDRV_SPEAKER_STANDARD_MONO("mono") MDRV_SPEAKER_STANDARD_MONO("mono")

View File

@ -16,14 +16,14 @@ likewise be a 2 screen game
#include "driver.h" #include "driver.h"
#include "cpu/m68000/m68000.h" #include "cpu/m68000/m68000.h"
#include "deprecat.h" #include "deprecat.h"
#include "video/konamiic.h" #include "video/konicdev.h"
#include "machine/eeprom.h" #include "machine/eeprom.h"
#include "cpu/z80/z80.h" #include "cpu/z80/z80.h"
#include "sound/2151intf.h" #include "sound/2151intf.h"
#include "sound/k054539.h" #include "sound/k054539.h"
#include "rendlay.h" #include "rendlay.h"
#include "includes/xmen.h" #include "includes/xmen.h"
#include "konamipt.h" #include "includes/konamipt.h"
UINT16 xmen_current_frame; UINT16 xmen_current_frame;
@ -91,7 +91,10 @@ logerror("%06x eeprom_r\n",cpu_get_pc(space->cpu));
static WRITE16_HANDLER( eeprom_w ) static WRITE16_HANDLER( eeprom_w )
{ {
logerror("%06x: write %04x to 108000\n",cpu_get_pc(space->cpu),data); const device_config *k052109 = devtag_get_device(space->machine, "k052109");
const device_config *k053246 = devtag_get_device(space->machine, "k053246");
logerror("%06x: write %04x to 108000\n",cpu_get_pc(space->cpu),data);
if (ACCESSING_BITS_0_7) if (ACCESSING_BITS_0_7)
{ {
/* bit 0 = coin counter */ /* bit 0 = coin counter */
@ -107,9 +110,9 @@ logerror("%06x: write %04x to 108000\n",cpu_get_pc(space->cpu),data);
if (ACCESSING_BITS_8_15) if (ACCESSING_BITS_8_15)
{ {
/* bit 8 = enable sprite ROM reading */ /* bit 8 = enable sprite ROM reading */
K053246_set_OBJCHA_line((data & 0x0100) ? ASSERT_LINE : CLEAR_LINE); k053246_set_objcha_line(k053246, (data & 0x0100) ? ASSERT_LINE : CLEAR_LINE);
/* bit 9 = enable char ROM reading through the video RAM */ /* bit 9 = enable char ROM reading through the video RAM */
K052109_set_RMRD_line((data & 0x0200) ? ASSERT_LINE : CLEAR_LINE); k052109_set_rmrd_line(k052109, (data & 0x0200) ? ASSERT_LINE : CLEAR_LINE);
} }
} }
@ -161,22 +164,22 @@ static WRITE8_HANDLER( sound_bankswitch_w )
static ADDRESS_MAP_START( main_map, ADDRESS_SPACE_PROGRAM, 16 ) static ADDRESS_MAP_START( main_map, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x000000, 0x03ffff) AM_ROM AM_RANGE(0x000000, 0x03ffff) AM_ROM
AM_RANGE(0x080000, 0x0fffff) AM_ROM AM_RANGE(0x080000, 0x0fffff) AM_ROM
AM_RANGE(0x100000, 0x100fff) AM_READWRITE(K053247_word_r, K053247_word_w) AM_RANGE(0x100000, 0x100fff) AM_DEVREADWRITE("k053246", k053247_word_r, k053247_word_w)
AM_RANGE(0x101000, 0x101fff) AM_RAM AM_RANGE(0x101000, 0x101fff) AM_RAM
AM_RANGE(0x104000, 0x104fff) AM_RAM_WRITE(paletteram16_xBBBBBGGGGGRRRRR_word_w) AM_BASE_GENERIC(paletteram) AM_RANGE(0x104000, 0x104fff) AM_RAM_WRITE(paletteram16_xBBBBBGGGGGRRRRR_word_w) AM_BASE_GENERIC(paletteram)
AM_RANGE(0x108000, 0x108001) AM_WRITE(eeprom_w) AM_RANGE(0x108000, 0x108001) AM_WRITE(eeprom_w)
AM_RANGE(0x108020, 0x108027) AM_WRITE(K053246_word_w) AM_RANGE(0x108020, 0x108027) AM_DEVWRITE("k053246", k053246_word_w)
AM_RANGE(0x10804c, 0x10804d) AM_WRITE(sound_cmd_w) AM_RANGE(0x10804c, 0x10804d) AM_WRITE(sound_cmd_w)
AM_RANGE(0x10804e, 0x10804f) AM_WRITE(sound_irq_w) AM_RANGE(0x10804e, 0x10804f) AM_WRITE(sound_irq_w)
AM_RANGE(0x108054, 0x108055) AM_READ(sound_status_r) AM_RANGE(0x108054, 0x108055) AM_READ(sound_status_r)
AM_RANGE(0x108060, 0x10807f) AM_WRITE(K053251_lsb_w) AM_RANGE(0x108060, 0x10807f) AM_DEVWRITE("k053251", k053251_lsb_w)
AM_RANGE(0x10a000, 0x10a001) AM_READ_PORT("P2_P4") AM_WRITE(watchdog_reset16_w) AM_RANGE(0x10a000, 0x10a001) AM_READ_PORT("P2_P4") AM_WRITE(watchdog_reset16_w)
AM_RANGE(0x10a002, 0x10a003) AM_READ_PORT("P1_P3") AM_RANGE(0x10a002, 0x10a003) AM_READ_PORT("P1_P3")
AM_RANGE(0x10a004, 0x10a005) AM_READ(eeprom_r) AM_RANGE(0x10a004, 0x10a005) AM_READ(eeprom_r)
AM_RANGE(0x10a00c, 0x10a00d) AM_READ(K053246_word_r) AM_RANGE(0x10a00c, 0x10a00d) AM_DEVREAD("k053246", k053246_word_r)
AM_RANGE(0x110000, 0x113fff) AM_RAM /* main RAM */ AM_RANGE(0x110000, 0x113fff) AM_RAM /* main RAM */
AM_RANGE(0x18fa00, 0x18fa01) AM_WRITE(xmen_18fa00_w) AM_RANGE(0x18fa00, 0x18fa01) AM_WRITE(xmen_18fa00_w)
AM_RANGE(0x18c000, 0x197fff) AM_READWRITE(K052109_lsb_r, K052109_lsb_w) AM_RANGE(0x18c000, 0x197fff) AM_DEVREADWRITE("k052109", k052109_lsb_r, k052109_lsb_w)
ADDRESS_MAP_END ADDRESS_MAP_END
static ADDRESS_MAP_START( sound_map, ADDRESS_SPACE_PROGRAM, 8 ) static ADDRESS_MAP_START( sound_map, ADDRESS_SPACE_PROGRAM, 8 )
@ -200,19 +203,19 @@ static ADDRESS_MAP_START( 6p_main_map, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x103000, 0x103fff) AM_RAM /* 6p - a buffer? */ AM_RANGE(0x103000, 0x103fff) AM_RAM /* 6p - a buffer? */
AM_RANGE(0x104000, 0x104fff) AM_RAM_WRITE(paletteram16_xBBBBBGGGGGRRRRR_word_w) AM_BASE_GENERIC(paletteram) AM_RANGE(0x104000, 0x104fff) AM_RAM_WRITE(paletteram16_xBBBBBGGGGGRRRRR_word_w) AM_BASE_GENERIC(paletteram)
AM_RANGE(0x108000, 0x108001) AM_WRITE(eeprom_w) AM_RANGE(0x108000, 0x108001) AM_WRITE(eeprom_w)
AM_RANGE(0x108020, 0x108027) AM_WRITE(K053246_word_w) /* sprites */ AM_RANGE(0x108020, 0x108027) AM_DEVWRITE("k053246", k053246_word_w) /* sprites */
AM_RANGE(0x10804c, 0x10804d) AM_WRITE(sound_cmd_w) AM_RANGE(0x10804c, 0x10804d) AM_WRITE(sound_cmd_w)
AM_RANGE(0x10804e, 0x10804f) AM_WRITE(sound_irq_w) AM_RANGE(0x10804e, 0x10804f) AM_WRITE(sound_irq_w)
AM_RANGE(0x108054, 0x108055) AM_READ(sound_status_r) AM_RANGE(0x108054, 0x108055) AM_READ(sound_status_r)
AM_RANGE(0x108060, 0x10807f) AM_WRITE(K053251_lsb_w) AM_RANGE(0x108060, 0x10807f) AM_DEVWRITE("k053251", k053251_lsb_w)
AM_RANGE(0x10a000, 0x10a001) AM_READ_PORT("P2_P4") AM_WRITE(watchdog_reset16_w) AM_RANGE(0x10a000, 0x10a001) AM_READ_PORT("P2_P4") AM_WRITE(watchdog_reset16_w)
AM_RANGE(0x10a002, 0x10a003) AM_READ_PORT("P1_P3") AM_RANGE(0x10a002, 0x10a003) AM_READ_PORT("P1_P3")
AM_RANGE(0x10a004, 0x10a005) AM_READ(eeprom_r) AM_RANGE(0x10a004, 0x10a005) AM_READ(eeprom_r)
AM_RANGE(0x10a006, 0x10a007) AM_READ_PORT("P5_P6") AM_RANGE(0x10a006, 0x10a007) AM_READ_PORT("P5_P6")
AM_RANGE(0x10a00c, 0x10a00d) AM_READ(K053246_word_r) /* sprites */ AM_RANGE(0x10a00c, 0x10a00d) AM_DEVREAD("k053246", k053246_word_r) /* sprites */
AM_RANGE(0x110000, 0x113fff) AM_RAM /* main RAM */ AM_RANGE(0x110000, 0x113fff) AM_RAM /* main RAM */
AM_RANGE(0x18fa00, 0x18fa01) AM_WRITE(xmen_18fa00_w) AM_RANGE(0x18fa00, 0x18fa01) AM_WRITE(xmen_18fa00_w)
/* AM_RANGE(0x18c000, 0x197fff) AM_WRITE(K052109_lsb_w) AM_BASE(&xmen6p_tilemapleft) */ /* AM_RANGE(0x18c000, 0x197fff) AM_DEVWRITE("k052109", k052109_lsb_w) AM_BASE(&xmen6p_tilemapleft) */
AM_RANGE(0x18c000, 0x197fff) AM_RAM AM_BASE(&xmen6p_tilemapleft) /* left tilemap (p1,p2,p3 counters) */ AM_RANGE(0x18c000, 0x197fff) AM_RAM AM_BASE(&xmen6p_tilemapleft) /* left tilemap (p1,p2,p3 counters) */
/* /*
AM_RANGE(0x1ac000, 0x1af7ff) AM_READONLY AM_RANGE(0x1ac000, 0x1af7ff) AM_READONLY
@ -346,6 +349,25 @@ static MACHINE_START( xmen )
state_save_register_postload(machine, xmen_postload, NULL); state_save_register_postload(machine, xmen_postload, NULL);
} }
static const k052109_interface xmen_k052109_intf =
{
"gfx1", 0,
NORMAL_PLANE_ORDER,
KONAMI_ROM_DEINTERLEAVE_2,
xmen_tile_callback
};
static const k053247_interface xmen_k053246_intf =
{
"screen",
"gfx2", 1,
NORMAL_PLANE_ORDER,
53, -2,
KONAMI_ROM_DEINTERLEAVE_4,
xmen_sprite_callback
};
static MACHINE_DRIVER_START( xmen ) static MACHINE_DRIVER_START( xmen )
/* basic machine hardware */ /* basic machine hardware */
@ -371,9 +393,12 @@ static MACHINE_DRIVER_START( xmen )
MDRV_SCREEN_VISIBLE_AREA(13*8, (64-13)*8-1, 2*8, 30*8-1 ) /* correct, same issue of TMNT2 */ MDRV_SCREEN_VISIBLE_AREA(13*8, (64-13)*8-1, 2*8, 30*8-1 ) /* correct, same issue of TMNT2 */
MDRV_PALETTE_LENGTH(2048) MDRV_PALETTE_LENGTH(2048)
MDRV_VIDEO_START(xmen)
MDRV_VIDEO_UPDATE(xmen) MDRV_VIDEO_UPDATE(xmen)
MDRV_K052109_ADD("k052109", xmen_k052109_intf)
MDRV_K053246_ADD("k053246", xmen_k053246_intf)
MDRV_K053251_ADD("k053251")
/* sound hardware */ /* sound hardware */
MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
@ -402,7 +427,7 @@ static INTERRUPT_GEN( xmen6p_interrupt )
} }
else else
{ {
// if (xmen_irqenabled&0x04) // if (xmen_irqenabled & 0x04)
// { // {
irq3_line_hold(device); irq3_line_hold(device);
// xmen_current_frame = 0x00; // xmen_current_frame = 0x00;
@ -411,6 +436,16 @@ static INTERRUPT_GEN( xmen6p_interrupt )
} }
} }
static const k053247_interface xmen6p_k053246_intf =
{
"lscreen", /* is this correct? */
"gfx2", 1,
NORMAL_PLANE_ORDER,
53, -2,
KONAMI_ROM_DEINTERLEAVE_4,
xmen_sprite_callback
};
static MACHINE_DRIVER_START( xmen6p ) static MACHINE_DRIVER_START( xmen6p )
/* basic machine hardware */ /* basic machine hardware */
@ -421,7 +456,6 @@ static MACHINE_DRIVER_START( xmen6p )
MDRV_CPU_ADD("audiocpu", Z80,8000000) /* verified with M1, guessed but accurate */ MDRV_CPU_ADD("audiocpu", Z80,8000000) /* verified with M1, guessed but accurate */
MDRV_CPU_PROGRAM_MAP(sound_map) MDRV_CPU_PROGRAM_MAP(sound_map)
MDRV_NVRAM_HANDLER(xmen) MDRV_NVRAM_HANDLER(xmen)
MDRV_MACHINE_RESET(xmen6p) MDRV_MACHINE_RESET(xmen6p)
@ -445,11 +479,14 @@ static MACHINE_DRIVER_START( xmen6p )
MDRV_SCREEN_SIZE(64*8, 32*8) MDRV_SCREEN_SIZE(64*8, 32*8)
MDRV_SCREEN_VISIBLE_AREA(16*8, 52*8-1, 2*8, 30*8-1) MDRV_SCREEN_VISIBLE_AREA(16*8, 52*8-1, 2*8, 30*8-1)
MDRV_VIDEO_START(xmen6p) MDRV_VIDEO_START(xmen6p)
MDRV_VIDEO_UPDATE(xmen6p) MDRV_VIDEO_UPDATE(xmen6p)
MDRV_VIDEO_EOF(xmen6p) MDRV_VIDEO_EOF(xmen6p)
MDRV_K052109_ADD("k052109", xmen_k052109_intf)
MDRV_K053246_ADD("k053246", xmen6p_k053246_intf)
MDRV_K053251_ADD("k053251")
/* sound hardware */ /* sound hardware */
MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
@ -774,21 +811,12 @@ ROM_START( xmen6pu )
ROM_LOAD( "065-a06.1d", 0x000000, 0x200000, CRC(5adbcee0) SHA1(435feda697193bc51db80eba46be474cbbc1de4b) ) ROM_LOAD( "065-a06.1d", 0x000000, 0x200000, CRC(5adbcee0) SHA1(435feda697193bc51db80eba46be474cbbc1de4b) )
ROM_END ROM_END
GAME( 1992, xmen, 0, xmen, xmen, 0, ROT0, "Konami", "X-Men (4 Players ver UBB)", 0 ) /* Second "version" letter denotes players, A=2 players, B=4 players, C=6 players ??? */
GAME( 1992, xmenj, xmen, xmen, xmen, 0, ROT0, "Konami", "X-Men (4 Players ver JBA)", 0 )
GAME( 1992, xmene, xmen, xmen, xmen, 0, ROT0, "Konami", "X-Men (4 Players ver EBA)", 0 )
GAME( 1992, xmen2pe, xmen, xmen, xmen2p, 0, ROT0, "Konami", "X-Men (2 Players ver EAA)", 0 )
GAME( 1992, xmen2pa, xmen, xmen, xmen2p, 0, ROT0, "Konami", "X-Men (2 Players ver AAA)", 0 )
GAME( 1992, xmen2pj, xmen, xmen, xmen2p, 0, ROT0, "Konami", "X-Men (2 Players ver JAA)", 0 )
GAME( 1992, xmen6p, xmen, xmen6p,xmen6p, 0, ROT0, "Konami", "X-Men (6 Players ver ECB)", GAME_IMPERFECT_GRAPHICS )
GAME( 1992, xmen6pu, xmen, xmen6p,xmen6p, 0, ROT0, "Konami", "X-Men (6 Players ver UCB)", GAME_IMPERFECT_GRAPHICS )
static DRIVER_INIT( xmen )
{
konami_rom_deinterleave_2(machine, "gfx1");
konami_rom_deinterleave_4(machine, "gfx2");
}
GAME( 1992, xmen, 0, xmen, xmen, xmen, ROT0, "Konami", "X-Men (4 Players ver UBB)", 0 ) /* Second "version" letter denotes players, A=2 players, B=4 players, C=6 players ??? */
GAME( 1992, xmenj, xmen, xmen, xmen, xmen, ROT0, "Konami", "X-Men (4 Players ver JBA)", 0 )
GAME( 1992, xmene, xmen, xmen, xmen, xmen, ROT0, "Konami", "X-Men (4 Players ver EBA)", 0 )
GAME( 1992, xmen2pe, xmen, xmen, xmen2p, xmen, ROT0, "Konami", "X-Men (2 Players ver EAA)", 0 )
GAME( 1992, xmen2pa, xmen, xmen, xmen2p, xmen, ROT0, "Konami", "X-Men (2 Players ver AAA)", 0 )
GAME( 1992, xmen2pj, xmen, xmen, xmen2p, xmen, ROT0, "Konami", "X-Men (2 Players ver JAA)", 0 )
GAME( 1992, xmen6p, xmen, xmen6p,xmen6p, xmen, ROT0, "Konami", "X-Men (6 Players ver ECB)", GAME_IMPERFECT_GRAPHICS )
GAME( 1992, xmen6pu, xmen, xmen6p,xmen6p, xmen, ROT0, "Konami", "X-Men (6 Players ver UCB)", GAME_IMPERFECT_GRAPHICS )

View File

@ -171,7 +171,7 @@ Check gticlub.c for details on the bottom board.
#include "machine/konppc.h" #include "machine/konppc.h"
#include "machine/adc083x.h" #include "machine/adc083x.h"
#include "machine/eepromdev.h" #include "machine/eepromdev.h"
#include "video/konamiic.h" #include "video/konicdev.h"
#include "video/gticlub.h" #include "video/gticlub.h"
#include "sound/k056800.h" #include "sound/k056800.h"
@ -236,39 +236,36 @@ static WRITE32_HANDLER( paletteram32_w )
#define NUM_LAYERS 2 #define NUM_LAYERS 2
static void game_tile_callback(int layer, int *code, int *color, int *flags) static void game_tile_callback(running_machine *machine, int layer, int *code, int *color, int *flags)
{ {
*color += layer * 0x40; *color += layer * 0x40;
} }
static VIDEO_START( zr107 ) static VIDEO_START( zr107 )
{ {
static int scrolld[NUM_LAYERS][4][2] = { const device_config *k056832 = devtag_get_device(machine, "k056832");
{{ 0, 0}, {0, 0}, {0, 0}, {0, 0}},
{{ 0, 0}, {0, 0}, {0, 0}, {0, 0}} k056832_set_layer_offs(k056832, 0, -29, -27);
}; k056832_set_layer_offs(k056832, 1, -29, -27);
k056832_set_layer_offs(k056832, 2, -29, -27);
k056832_set_layer_offs(k056832, 3, -29, -27);
k056832_set_layer_offs(k056832, 4, -29, -27);
k056832_set_layer_offs(k056832, 5, -29, -27);
k056832_set_layer_offs(k056832, 6, -29, -27);
k056832_set_layer_offs(k056832, 7, -29, -27);
K056832_vh_start(machine, "gfx2", K056832_BPP_8, 1, scrolld, game_tile_callback, 0);
K001006_init(machine); K001006_init(machine);
K001005_init(machine); K001005_init(machine);
} }
static VIDEO_UPDATE( zr107 ) static VIDEO_UPDATE( zr107 )
{ {
const device_config *k056832 = devtag_get_device(screen->machine, "k056832");
bitmap_fill(bitmap, cliprect, screen->machine->pens[0]); bitmap_fill(bitmap, cliprect, screen->machine->pens[0]);
K056832_set_LayerOffset(0, -29, -27); k056832_tilemap_draw(k056832, bitmap, cliprect, 1, 0, 0);
K056832_set_LayerOffset(1, -29, -27);
K056832_set_LayerOffset(2, -29, -27);
K056832_set_LayerOffset(3, -29, -27);
K056832_set_LayerOffset(4, -29, -27);
K056832_set_LayerOffset(5, -29, -27);
K056832_set_LayerOffset(6, -29, -27);
K056832_set_LayerOffset(7, -29, -27);
K056832_tilemap_draw(screen->machine, bitmap, cliprect, 1, 0, 0);
K001005_draw(bitmap, cliprect); K001005_draw(bitmap, cliprect);
K056832_tilemap_draw(screen->machine, bitmap, cliprect, 0, 0, 0); k056832_tilemap_draw(k056832, bitmap, cliprect, 0, 0, 0);
draw_7segment_led(bitmap, 3, 3, led_reg0); draw_7segment_led(bitmap, 3, 3, led_reg0);
draw_7segment_led(bitmap, 9, 3, led_reg1); draw_7segment_led(bitmap, 9, 3, led_reg1);
@ -409,11 +406,11 @@ static MACHINE_START( zr107 )
static ADDRESS_MAP_START( zr107_map, ADDRESS_SPACE_PROGRAM, 32 ) static ADDRESS_MAP_START( zr107_map, ADDRESS_SPACE_PROGRAM, 32 )
AM_RANGE(0x00000000, 0x000fffff) AM_RAM AM_BASE(&workram) /* Work RAM */ AM_RANGE(0x00000000, 0x000fffff) AM_RAM AM_BASE(&workram) /* Work RAM */
AM_RANGE(0x74000000, 0x74003fff) AM_READWRITE(K056832_ram_long_r, K056832_ram_long_w) AM_RANGE(0x74000000, 0x74003fff) AM_DEVREADWRITE("k056832", k056832_ram_long_r, k056832_ram_long_w)
AM_RANGE(0x74020000, 0x7402003f) AM_READWRITE(K056832_long_r, K056832_long_w) AM_RANGE(0x74020000, 0x7402003f) AM_DEVREADWRITE("k056832", k056832_long_r, k056832_long_w)
AM_RANGE(0x74060000, 0x7406003f) AM_READWRITE(ccu_r, ccu_w) AM_RANGE(0x74060000, 0x7406003f) AM_READWRITE(ccu_r, ccu_w)
AM_RANGE(0x74080000, 0x74081fff) AM_RAM_WRITE(paletteram32_w) AM_BASE_GENERIC(paletteram) AM_RANGE(0x74080000, 0x74081fff) AM_RAM_WRITE(paletteram32_w) AM_BASE_GENERIC(paletteram)
AM_RANGE(0x740a0000, 0x740a3fff) AM_READ(K056832_rom_long_r) AM_RANGE(0x740a0000, 0x740a3fff) AM_DEVREAD("k056832", k056832_rom_long_r)
AM_RANGE(0x78000000, 0x7800ffff) AM_READWRITE(cgboard_dsp_shared_r_ppc, cgboard_dsp_shared_w_ppc) /* 21N 21K 23N 23K */ AM_RANGE(0x78000000, 0x7800ffff) AM_READWRITE(cgboard_dsp_shared_r_ppc, cgboard_dsp_shared_w_ppc) /* 21N 21K 23N 23K */
AM_RANGE(0x78010000, 0x7801ffff) AM_WRITE(cgboard_dsp_shared_w_ppc) AM_RANGE(0x78010000, 0x7801ffff) AM_WRITE(cgboard_dsp_shared_w_ppc)
AM_RANGE(0x78040000, 0x7804000f) AM_READWRITE(K001006_0_r, K001006_0_w) AM_RANGE(0x78040000, 0x7804000f) AM_READWRITE(K001006_0_r, K001006_0_w)
@ -699,6 +696,14 @@ static const k056800_interface zr107_k056800_interface =
sound_irq_callback sound_irq_callback
}; };
static const k056832_interface zr107_k056832_intf =
{
"gfx2", 1,
K056832_BPP_8,
1, 0,
KONAMI_ROM_DEINTERLEAVE_NONE,
game_tile_callback, "none"
};
/* PowerPC interrupts /* PowerPC interrupts
@ -749,6 +754,8 @@ static MACHINE_DRIVER_START( zr107 )
MDRV_VIDEO_START(zr107) MDRV_VIDEO_START(zr107)
MDRV_VIDEO_UPDATE(zr107) MDRV_VIDEO_UPDATE(zr107)
MDRV_K056832_ADD("k056832", zr107_k056832_intf)
MDRV_K056800_ADD("k056800", zr107_k056800_interface) MDRV_K056800_ADD("k056800", zr107_k056800_interface)
MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")

View File

@ -9,7 +9,9 @@ extern UINT16 *xmen6p_tilemapright;
/*----------- defined in video/xmen.c -----------*/ /*----------- defined in video/xmen.c -----------*/
VIDEO_START( xmen ); void xmen_tile_callback(running_machine *machine, int layer,int bank,int *code,int *color,int *flags,int *priority);
void xmen_sprite_callback(running_machine *machine, int *code,int *color,int *priority_mask);
VIDEO_START( xmen6p ); VIDEO_START( xmen6p );
VIDEO_UPDATE( xmen ); VIDEO_UPDATE( xmen );
VIDEO_UPDATE( xmen6p ); VIDEO_UPDATE( xmen6p );

View File

@ -9,18 +9,18 @@
#include "driver.h" #include "driver.h"
#include "video/konamiic.h" #include "video/konicdev.h"
static tilemap *dbz_bg1_tilemap, *dbz_bg2_tilemap; static tilemap *dbz_bg1_tilemap, *dbz_bg2_tilemap;
UINT16 *dbz_bg1_videoram, *dbz_bg2_videoram; UINT16 *dbz_bg1_videoram, *dbz_bg2_videoram;
static int sprite_colorbase, layer_colorbase[6], layer[5], layerpri[5]; static int sprite_colorbase, layer_colorbase[6], layer[5], layerpri[5];
static void dbz_tile_callback(int layer, int *code, int *color, int *flags) void dbz_tile_callback(running_machine *machine, int layer, int *code, int *color, int *flags)
{ {
*color = (layer_colorbase[layer] << 1) + ((*color & 0x3c) >> 2); *color = (layer_colorbase[layer] << 1) + ((*color & 0x3c) >> 2);
} }
static void dbz_sprite_callback(int *code, int *color, int *priority_mask) void dbz_sprite_callback(running_machine *machine, int *code, int *color, int *priority_mask)
{ {
int pri = (*color & 0x3c0) >> 5; int pri = (*color & 0x3c0) >> 5;
@ -93,48 +93,46 @@ static void sortlayers(int *layer, int *pri)
VIDEO_START( dbz ) VIDEO_START( dbz )
{ {
K053251_vh_start(machine); const device_config *k056832 = devtag_get_device(machine, "k056832");
K056832_vh_start(machine, "gfx1", K056832_BPP_4, 1, NULL, dbz_tile_callback, 1); const device_config *k053246 = devtag_get_device(machine, "k053246");
K053247_vh_start(machine, "gfx2", -52, 16, NORMAL_PLANE_ORDER, dbz_sprite_callback);
dbz_bg1_tilemap = tilemap_create(machine, get_dbz_bg1_tile_info,tilemap_scan_rows, 16, 16,64,32); dbz_bg1_tilemap = tilemap_create(machine, get_dbz_bg1_tile_info, tilemap_scan_rows, 16, 16, 64, 32);
dbz_bg2_tilemap = tilemap_create(machine, get_dbz_bg2_tile_info,tilemap_scan_rows, 16, 16,64,32); dbz_bg2_tilemap = tilemap_create(machine, get_dbz_bg2_tile_info, tilemap_scan_rows, 16, 16, 64, 32);
tilemap_set_transparent_pen(dbz_bg1_tilemap,0); tilemap_set_transparent_pen(dbz_bg1_tilemap, 0);
tilemap_set_transparent_pen(dbz_bg2_tilemap,0); tilemap_set_transparent_pen(dbz_bg2_tilemap, 0);
K053936_wraparound_enable(0, 1);
K053936_set_offset(0, -46, -16);
K053936_wraparound_enable(1, 1);
K053936_set_offset(1, -46, -16);
if (!strcmp(machine->gamedrv->name, "dbz")) if (!strcmp(machine->gamedrv->name, "dbz"))
K056832_set_LayerOffset(0, -34, -16); k056832_set_layer_offs(k056832, 0, -34, -16);
else else
K056832_set_LayerOffset(0, -35, -16); k056832_set_layer_offs(k056832, 0, -35, -16);
K056832_set_LayerOffset(1, -31, -16); k056832_set_layer_offs(k056832, 1, -31, -16);
K056832_set_LayerOffset(3, -31, -16); //? k056832_set_layer_offs(k056832, 3, -31, -16); //?
K053247_set_SpriteOffset(-87,32); k053247_set_sprite_offs(k053246, -87, 32);
} }
VIDEO_UPDATE( dbz ) VIDEO_UPDATE( dbz )
{ {
static const int K053251_CI[6] = { K053251_CI3, K053251_CI4, K053251_CI4, K053251_CI4, K053251_CI2, K053251_CI1 }; static const int K053251_CI[6] = { K053251_CI3, K053251_CI4, K053251_CI4, K053251_CI4, K053251_CI2, K053251_CI1 };
const device_config *k056832 = devtag_get_device(screen->machine, "k056832");
const device_config *k053246 = devtag_get_device(screen->machine, "k053246");
const device_config *k053251 = devtag_get_device(screen->machine, "k053251");
const device_config *k053936_1 = devtag_get_device(screen->machine, "k053936_1");
const device_config *k053936_2 = devtag_get_device(screen->machine, "k053936_2");
int plane, new_colorbase; int plane, new_colorbase;
sprite_colorbase = K053251_get_palette_index(K053251_CI0); sprite_colorbase = k053251_get_palette_index(k053251, K053251_CI0);
for (plane=0; plane<6; plane++) for (plane = 0; plane < 6; plane++)
{ {
new_colorbase = K053251_get_palette_index(K053251_CI[plane]); new_colorbase = k053251_get_palette_index(k053251, K053251_CI[plane]);
if (layer_colorbase[plane] != new_colorbase) if (layer_colorbase[plane] != new_colorbase)
{ {
layer_colorbase[plane] = new_colorbase; layer_colorbase[plane] = new_colorbase;
if(plane <= 3) if (plane <= 3)
K056832_mark_plane_dirty(plane); k056832_mark_plane_dirty(k056832, plane);
else if(plane == 4) else if(plane == 4)
tilemap_mark_all_tiles_dirty(dbz_bg1_tilemap); tilemap_mark_all_tiles_dirty(dbz_bg1_tilemap);
else if(plane == 5) else if(plane == 5)
@ -145,25 +143,25 @@ VIDEO_UPDATE( dbz )
//layers priority //layers priority
layer[0] = 0; layer[0] = 0;
layerpri[0] = K053251_get_priority(K053251_CI3); layerpri[0] = k053251_get_priority(k053251, K053251_CI3);
layer[1] = 1; layer[1] = 1;
layerpri[1] = K053251_get_priority(K053251_CI4); layerpri[1] = k053251_get_priority(k053251, K053251_CI4);
layer[2] = 3; layer[2] = 3;
layerpri[2] = K053251_get_priority(K053251_CI0); layerpri[2] = k053251_get_priority(k053251, K053251_CI0);
layer[3] = 4; layer[3] = 4;
layerpri[3] = K053251_get_priority(K053251_CI2); layerpri[3] = k053251_get_priority(k053251, K053251_CI2);
layer[4] = 5; layer[4] = 5;
layerpri[4] = K053251_get_priority(K053251_CI1); layerpri[4] = k053251_get_priority(k053251, K053251_CI1);
sortlayers(layer, layerpri); sortlayers(layer, layerpri);
bitmap_fill(screen->machine->priority_bitmap, cliprect, 0); bitmap_fill(screen->machine->priority_bitmap, cliprect, 0);
for(plane = 0; plane < 5; plane++) for (plane = 0; plane < 5; plane++)
{ {
int flag, pri; int flag, pri;
if(plane == 0) if (plane == 0)
{ {
flag = TILEMAP_DRAW_OPAQUE; flag = TILEMAP_DRAW_OPAQUE;
pri = 0; pri = 0;
@ -175,14 +173,14 @@ VIDEO_UPDATE( dbz )
} }
if(layer[plane] == 4) if(layer[plane] == 4)
K053936_1_zoom_draw(bitmap,cliprect,dbz_bg1_tilemap,flag,pri,1); k053936_zoom_draw(k053936_2, bitmap, cliprect, dbz_bg1_tilemap, flag, pri, 1);
else if(layer[plane] == 5) else if(layer[plane] == 5)
K053936_0_zoom_draw(bitmap,cliprect,dbz_bg2_tilemap,flag,pri,1); k053936_zoom_draw(k053936_1, bitmap, cliprect, dbz_bg2_tilemap, flag, pri, 1);
else else
K056832_tilemap_draw(screen->machine, bitmap,cliprect,layer[plane],flag,pri); k056832_tilemap_draw(k056832, bitmap, cliprect, layer[plane], flag, pri);
} }
K053247_sprites_draw(screen->machine, bitmap, cliprect); k053247_sprites_draw(k053246, bitmap, cliprect);
return 0; return 0;
} }

View File

@ -5170,7 +5170,7 @@ WRITE8_DEVICE_HANDLER( k051316_ctrl_w )
//if (offset >= 0x0c) logerror("%s: write %02x to 051316 reg %x\n", cpuexec_describe_context(device->machine), data, offset); //if (offset >= 0x0c) logerror("%s: write %02x to 051316 reg %x\n", cpuexec_describe_context(device->machine), data, offset);
} }
// a few games (ajax, rollerg, etc.) can enable and disable wraparound after start // a few games (ajax, rollerg, ultraman, etc.) can enable and disable wraparound after start
void k051316_wraparound_enable( const device_config *device, int status ) void k051316_wraparound_enable( const device_config *device, int status )
{ {
k051316_state *k051316= k051316_get_safe_token(device); k051316_state *k051316= k051316_get_safe_token(device);
@ -5585,14 +5585,14 @@ static DEVICE_START( k053936 )
const k053936_interface *intf = k053936_get_interface(device); const k053936_interface *intf = k053936_get_interface(device);
k053936->ctrl = auto_alloc_array(device->machine, UINT16, 0x20); k053936->ctrl = auto_alloc_array(device->machine, UINT16, 0x20);
k053936->linectrl = auto_alloc_array(device->machine, UINT16, 0x1000); k053936->linectrl = auto_alloc_array(device->machine, UINT16, 0x4000);
k053936->wraparound = intf->wrap; k053936->wraparound = intf->wrap;
k053936->offset[0] = intf->xoff; k053936->offset[0] = intf->xoff;
k053936->offset[1] = intf->yoff; k053936->offset[1] = intf->yoff;
state_save_register_device_item_pointer(device, 0, k053936->ctrl, 0x20); state_save_register_device_item_pointer(device, 0, k053936->ctrl, 0x20);
state_save_register_device_item_pointer(device, 0, k053936->linectrl, 0x1000); state_save_register_device_item_pointer(device, 0, k053936->linectrl, 0x4000);
} }
static DEVICE_RESET( k053936 ) static DEVICE_RESET( k053936 )
@ -5600,7 +5600,7 @@ static DEVICE_RESET( k053936 )
k053936_state *k053936 = k053936_get_safe_token(device); k053936_state *k053936 = k053936_get_safe_token(device);
memset(k053936->ctrl, 0, 0x20); memset(k053936->ctrl, 0, 0x20);
memset(k053936->linectrl, 0, 0x1000); memset(k053936->linectrl, 0, 0x4000);
} }
/***************************************************************************/ /***************************************************************************/

View File

@ -8,14 +8,14 @@
***************************************************************************/ ***************************************************************************/
#include "driver.h" #include "driver.h"
#include "video/konamiic.h" #include "video/konicdev.h"
static int sprite_colorbase; static int sprite_colorbase;
static int layer_colorbase[4]; static int layer_colorbase[4];
//static int layerpri[4] ={ 1,2,4,0 }; //static int layerpri[4] ={ 1,2,4,0 };
static void lethalen_sprite_callback(int *code, int *color, int *priority_mask) void lethalen_sprite_callback(running_machine *machine, int *code, int *color, int *priority_mask)
{ {
int pri = (*color & 0xfff0); int pri = (*color & 0xfff0);
*color = *color & 0x000f; *color = *color & 0x000f;
@ -38,38 +38,32 @@ static void lethalen_sprite_callback(int *code, int *color, int *priority_mask)
*code = (*code & 0x3fff); // | spritebanks[(*code >> 12) & 3]; *code = (*code & 0x3fff); // | spritebanks[(*code >> 12) & 3];
} }
static void lethalen_tile_callback(int layer, int *code, int *color, int *flags) void lethalen_tile_callback(running_machine *machine, int layer, int *code, int *color, int *flags)
{ {
*color = layer_colorbase[layer] + ((*color & 0x3c)<<2); *color = layer_colorbase[layer] + ((*color & 0x3c)<<2);
} }
VIDEO_START(lethalen) VIDEO_START(lethalen)
{ {
K053251_vh_start(machine); const device_config *k056832 = devtag_get_device(machine, "k056832");
K056832_vh_start(machine, "gfx1", K056832_BPP_8LE, 1, NULL, lethalen_tile_callback, 0);
K053245_vh_start(machine, 0, "gfx3",NORMAL_PLANE_ORDER, lethalen_sprite_callback);
// this game uses external linescroll RAM // this game uses external linescroll RAM
K056832_SetExtLinescroll(); k056832_SetExtLinescroll(k056832);
// the US and Japanese cabinets apparently use different mirror setups // the US and Japanese cabinets apparently use different mirror setups
if (!strcmp(machine->gamedrv->name, "lethalenj")) if (!strcmp(machine->gamedrv->name, "lethalenj"))
{ {
K056832_set_LayerOffset(0, -196, 0); k056832_set_layer_offs(k056832, 0, -196, 0);
K056832_set_LayerOffset(1, -194, 0); k056832_set_layer_offs(k056832, 1, -194, 0);
K056832_set_LayerOffset(2, -192, 0); k056832_set_layer_offs(k056832, 2, -192, 0);
K056832_set_LayerOffset(3, -190, 0); k056832_set_layer_offs(k056832, 3, -190, 0);
K053245_set_SpriteOffset(0, -105, 0);
} }
else else
{ /* fixme */ { /* fixme */
K056832_set_LayerOffset(0, 188, 0); k056832_set_layer_offs(k056832, 0, 188, 0);
K056832_set_LayerOffset(1, 190, 0); k056832_set_layer_offs(k056832, 1, 190, 0);
K056832_set_LayerOffset(2, 192, 0); k056832_set_layer_offs(k056832, 2, 192, 0);
K056832_set_LayerOffset(3, 194, 0); k056832_set_layer_offs(k056832, 3, 194, 0);
K053245_set_SpriteOffset(0, 95, 0);
} }
layer_colorbase[0] = 0x00; layer_colorbase[0] = 0x00;
@ -80,20 +74,22 @@ VIDEO_START(lethalen)
WRITE8_HANDLER(lethalen_palette_control) WRITE8_HANDLER(lethalen_palette_control)
{ {
const device_config *k056832 = devtag_get_device(space->machine, "k056832");
switch (offset) switch (offset)
{ {
case 0: // 40c8 - PCU1 from schematics case 0: // 40c8 - PCU1 from schematics
layer_colorbase[0] = ((data & 0x7)-1) * 0x40; layer_colorbase[0] = ((data & 0x7)-1) * 0x40;
layer_colorbase[1] = (((data>>4) & 0x7)-1) * 0x40; layer_colorbase[1] = (((data>>4) & 0x7)-1) * 0x40;
K056832_mark_plane_dirty(0); k056832_mark_plane_dirty(k056832, 0);
K056832_mark_plane_dirty(1); k056832_mark_plane_dirty(k056832, 1);
break; break;
case 4: // 40cc - PCU2 from schematics case 4: // 40cc - PCU2 from schematics
layer_colorbase[2] = ((data & 0x7)-1) * 0x40; layer_colorbase[2] = ((data & 0x7)-1) * 0x40;
layer_colorbase[3] = (((data>>4) & 0x7)-1) * 0x40; layer_colorbase[3] = (((data>>4) & 0x7)-1) * 0x40;
K056832_mark_plane_dirty(2); k056832_mark_plane_dirty(k056832, 2);
K056832_mark_plane_dirty(3); k056832_mark_plane_dirty(k056832, 3);
break; break;
case 8: // 40d0 - PCU3 from schematics case 8: // 40d0 - PCU3 from schematics
@ -104,31 +100,20 @@ WRITE8_HANDLER(lethalen_palette_control)
VIDEO_UPDATE(lethalen) VIDEO_UPDATE(lethalen)
{ {
const device_config *k056832 = devtag_get_device(screen->machine, "k056832");
const device_config *k053244 = devtag_get_device(screen->machine, "k053244");
bitmap_fill(bitmap, cliprect, 7168); bitmap_fill(bitmap, cliprect, 7168);
bitmap_fill(screen->machine->priority_bitmap, cliprect, 0); bitmap_fill(screen->machine->priority_bitmap, cliprect, 0);
K056832_tilemap_draw(screen->machine, bitmap, cliprect, 3, 0, 1); k056832_tilemap_draw(k056832, bitmap, cliprect, 3, 0, 1);
K056832_tilemap_draw(screen->machine, bitmap, cliprect, 2, 0, 2); k056832_tilemap_draw(k056832, bitmap, cliprect, 2, 0, 2);
K056832_tilemap_draw(screen->machine, bitmap, cliprect, 1, 0, 4); k056832_tilemap_draw(k056832, bitmap, cliprect, 1, 0, 4);
K053245_sprites_draw_lethal(screen->machine,0, bitmap, cliprect); k053245_sprites_draw_lethal(k053244, bitmap, cliprect);
// force "A" layer over top of everything // force "A" layer over top of everything
K056832_tilemap_draw(screen->machine, bitmap, cliprect, 0, 0, 0); k056832_tilemap_draw(k056832, bitmap, cliprect, 0, 0, 0);
#if 0
{
extern UINT16 *K056832_videoram;
FILE *fp;
fp=fopen("K056832_videoram", "w+b");
if (fp)
{
fwrite(K056832_videoram, 0x10000, 2, fp);
fclose(fp);
}
}
#endif
return 0; return 0;
} }

View File

@ -52,7 +52,7 @@ Note: if MAME_DEBUG is defined, pressing Z with:
***************************************************************************/ ***************************************************************************/
#include "driver.h" #include "driver.h"
#include "video/konamiic.h" #include "video/konicdev.h"
/* Variables that driver has access to: */ /* Variables that driver has access to: */
@ -419,14 +419,14 @@ VIDEO_START( metro_14100 )
tilemap_16x16[1] = NULL; tilemap_16x16[1] = NULL;
tilemap_16x16[2] = NULL; tilemap_16x16[2] = NULL;
tilemap_map_pen_to_layer(bg_tilemap[0], 0, 15, TILEMAP_PIXEL_TRANSPARENT); tilemap_map_pen_to_layer(bg_tilemap[0], 0, 15, TILEMAP_PIXEL_TRANSPARENT);
tilemap_map_pen_to_layer(bg_tilemap[0], 1, 255, TILEMAP_PIXEL_TRANSPARENT); tilemap_map_pen_to_layer(bg_tilemap[0], 1, 255, TILEMAP_PIXEL_TRANSPARENT);
tilemap_map_pen_to_layer(bg_tilemap[1], 0, 15, TILEMAP_PIXEL_TRANSPARENT); tilemap_map_pen_to_layer(bg_tilemap[1], 0, 15, TILEMAP_PIXEL_TRANSPARENT);
tilemap_map_pen_to_layer(bg_tilemap[1], 1, 255, TILEMAP_PIXEL_TRANSPARENT); tilemap_map_pen_to_layer(bg_tilemap[1], 1, 255, TILEMAP_PIXEL_TRANSPARENT);
tilemap_map_pen_to_layer(bg_tilemap[2], 0, 15, TILEMAP_PIXEL_TRANSPARENT); tilemap_map_pen_to_layer(bg_tilemap[2], 0, 15, TILEMAP_PIXEL_TRANSPARENT);
tilemap_map_pen_to_layer(bg_tilemap[2], 1, 255, TILEMAP_PIXEL_TRANSPARENT); tilemap_map_pen_to_layer(bg_tilemap[2], 1, 255, TILEMAP_PIXEL_TRANSPARENT);
} }
@ -448,14 +448,14 @@ VIDEO_START( metro_14220 )
tilemap_16x16[1] = NULL; tilemap_16x16[1] = NULL;
tilemap_16x16[2] = NULL; tilemap_16x16[2] = NULL;
tilemap_map_pen_to_layer(bg_tilemap[0], 0, 15, TILEMAP_PIXEL_TRANSPARENT); tilemap_map_pen_to_layer(bg_tilemap[0], 0, 15, TILEMAP_PIXEL_TRANSPARENT);
tilemap_map_pen_to_layer(bg_tilemap[0], 1, 255, TILEMAP_PIXEL_TRANSPARENT); tilemap_map_pen_to_layer(bg_tilemap[0], 1, 255, TILEMAP_PIXEL_TRANSPARENT);
tilemap_map_pen_to_layer(bg_tilemap[1], 0, 15, TILEMAP_PIXEL_TRANSPARENT); tilemap_map_pen_to_layer(bg_tilemap[1], 0, 15, TILEMAP_PIXEL_TRANSPARENT);
tilemap_map_pen_to_layer(bg_tilemap[1], 1, 255, TILEMAP_PIXEL_TRANSPARENT); tilemap_map_pen_to_layer(bg_tilemap[1], 1, 255, TILEMAP_PIXEL_TRANSPARENT);
tilemap_map_pen_to_layer(bg_tilemap[2], 0, 15, TILEMAP_PIXEL_TRANSPARENT); tilemap_map_pen_to_layer(bg_tilemap[2], 0, 15, TILEMAP_PIXEL_TRANSPARENT);
tilemap_map_pen_to_layer(bg_tilemap[2], 1, 255, TILEMAP_PIXEL_TRANSPARENT); tilemap_map_pen_to_layer(bg_tilemap[2], 1, 255, TILEMAP_PIXEL_TRANSPARENT);
tilemap_set_scrolldx(bg_tilemap[0], -2, 2); tilemap_set_scrolldx(bg_tilemap[0], -2, 2);
tilemap_set_scrolldx(bg_tilemap[1], -2, 2); tilemap_set_scrolldx(bg_tilemap[1], -2, 2);
@ -480,24 +480,24 @@ VIDEO_START( metro_14300 )
tilemap_16x16[1] = tilemap_create(machine, get_tile_info_1_16x16_8bit,tilemap_scan_rows,16,16,WIN_NX,WIN_NY); tilemap_16x16[1] = tilemap_create(machine, get_tile_info_1_16x16_8bit,tilemap_scan_rows,16,16,WIN_NX,WIN_NY);
tilemap_16x16[2] = tilemap_create(machine, get_tile_info_2_16x16_8bit,tilemap_scan_rows,16,16,WIN_NX,WIN_NY); tilemap_16x16[2] = tilemap_create(machine, get_tile_info_2_16x16_8bit,tilemap_scan_rows,16,16,WIN_NX,WIN_NY);
tilemap_map_pen_to_layer(bg_tilemap[0], 0, 15, TILEMAP_PIXEL_TRANSPARENT); tilemap_map_pen_to_layer(bg_tilemap[0], 0, 15, TILEMAP_PIXEL_TRANSPARENT);
tilemap_map_pen_to_layer(bg_tilemap[0], 1, 255, TILEMAP_PIXEL_TRANSPARENT); tilemap_map_pen_to_layer(bg_tilemap[0], 1, 255, TILEMAP_PIXEL_TRANSPARENT);
tilemap_map_pen_to_layer(bg_tilemap[1], 0, 15, TILEMAP_PIXEL_TRANSPARENT); tilemap_map_pen_to_layer(bg_tilemap[1], 0, 15, TILEMAP_PIXEL_TRANSPARENT);
tilemap_map_pen_to_layer(bg_tilemap[1], 1, 255, TILEMAP_PIXEL_TRANSPARENT); tilemap_map_pen_to_layer(bg_tilemap[1], 1, 255, TILEMAP_PIXEL_TRANSPARENT);
tilemap_map_pen_to_layer(bg_tilemap[2], 0, 15, TILEMAP_PIXEL_TRANSPARENT); tilemap_map_pen_to_layer(bg_tilemap[2], 0, 15, TILEMAP_PIXEL_TRANSPARENT);
tilemap_map_pen_to_layer(bg_tilemap[2], 1, 255, TILEMAP_PIXEL_TRANSPARENT); tilemap_map_pen_to_layer(bg_tilemap[2], 1, 255, TILEMAP_PIXEL_TRANSPARENT);
tilemap_map_pen_to_layer(tilemap_16x16[0], 0, 15, TILEMAP_PIXEL_TRANSPARENT); tilemap_map_pen_to_layer(tilemap_16x16[0], 0, 15, TILEMAP_PIXEL_TRANSPARENT);
tilemap_map_pen_to_layer(tilemap_16x16[0], 1, 255, TILEMAP_PIXEL_TRANSPARENT); tilemap_map_pen_to_layer(tilemap_16x16[0], 1, 255, TILEMAP_PIXEL_TRANSPARENT);
tilemap_map_pen_to_layer(tilemap_16x16[1], 0, 15, TILEMAP_PIXEL_TRANSPARENT); tilemap_map_pen_to_layer(tilemap_16x16[1], 0, 15, TILEMAP_PIXEL_TRANSPARENT);
tilemap_map_pen_to_layer(tilemap_16x16[1], 1, 255, TILEMAP_PIXEL_TRANSPARENT); tilemap_map_pen_to_layer(tilemap_16x16[1], 1, 255, TILEMAP_PIXEL_TRANSPARENT);
tilemap_map_pen_to_layer(tilemap_16x16[2], 0, 15, TILEMAP_PIXEL_TRANSPARENT); tilemap_map_pen_to_layer(tilemap_16x16[2], 0, 15, TILEMAP_PIXEL_TRANSPARENT);
tilemap_map_pen_to_layer(tilemap_16x16[2], 1, 255, TILEMAP_PIXEL_TRANSPARENT); tilemap_map_pen_to_layer(tilemap_16x16[2], 1, 255, TILEMAP_PIXEL_TRANSPARENT);
} }
@ -507,11 +507,7 @@ VIDEO_START( blzntrnd )
has_zoom = 1; has_zoom = 1;
metro_K053936_tilemap = tilemap_create(machine, metro_K053936_get_tile_info, tilemap_scan_rows, metro_K053936_tilemap = tilemap_create(machine, metro_K053936_get_tile_info, tilemap_scan_rows, 8,8, 256, 512 );
8,8, 256, 512 );
K053936_wraparound_enable(0, 0);
K053936_set_offset(0, -69, -21);
tilemap_set_scrolldx(bg_tilemap[0], 8, -8); tilemap_set_scrolldx(bg_tilemap[0], 8, -8);
tilemap_set_scrolldx(bg_tilemap[1], 8, -8); tilemap_set_scrolldx(bg_tilemap[1], 8, -8);
@ -524,11 +520,7 @@ VIDEO_START( gstrik2 )
has_zoom = 1; has_zoom = 1;
metro_K053936_tilemap = tilemap_create(machine, metro_K053936_gstrik2_get_tile_info, tilemap_scan_gstrik2, metro_K053936_tilemap = tilemap_create(machine, metro_K053936_gstrik2_get_tile_info, tilemap_scan_gstrik2, 16,16, 128, 256 );
16,16, 128, 256 );
K053936_wraparound_enable(0, 0);
K053936_set_offset(0, -69, -19);
tilemap_set_scrolldx(bg_tilemap[0], 8, -8); tilemap_set_scrolldx(bg_tilemap[0], 8, -8);
tilemap_set_scrolldx(bg_tilemap[1], 0, 0); tilemap_set_scrolldx(bg_tilemap[1], 0, 0);
@ -856,6 +848,7 @@ static void dirty_tiles(int layer,UINT16 *vram)
VIDEO_UPDATE( metro ) VIDEO_UPDATE( metro )
{ {
const device_config *k053936 = devtag_get_device(screen->machine, "k053936");
int i,pri,layers_ctrl = -1; int i,pri,layers_ctrl = -1;
UINT16 screenctrl = *metro_screenctrl; UINT16 screenctrl = *metro_screenctrl;
@ -941,10 +934,10 @@ if (input_code_pressed(screen->machine, KEYCODE_Z))
} }
#endif #endif
if (has_zoom) K053936_0_zoom_draw(bitmap,cliprect,metro_K053936_tilemap,0,0, 1); if (has_zoom)
k053936_zoom_draw(k053936, bitmap, cliprect, metro_K053936_tilemap, 0, 0, 1);
for (pri = 3; pri >= 0; pri--)
for (pri=3; pri>=0; pri--)
draw_layers(screen->machine, bitmap,cliprect,pri,layers_ctrl); draw_layers(screen->machine, bitmap,cliprect,pri,layers_ctrl);
if (layers_ctrl & 0x08) if (layers_ctrl & 0x08)

View File

@ -8,7 +8,7 @@
*/ */
#include "driver.h" #include "driver.h"
#include "video/konamiic.h" #include "video/konicdev.h"
static int ttl_gfx_index; static int ttl_gfx_index;
static tilemap *ttl_tilemap, *rng_936_tilemap; static tilemap *ttl_tilemap, *rng_936_tilemap;
@ -32,7 +32,7 @@ static TILE_GET_INFO( ttl_get_tile_info )
SET_TILE_INFO(ttl_gfx_index, code, attr, 0); SET_TILE_INFO(ttl_gfx_index, code, attr, 0);
} }
static void rng_sprite_callback(int *code, int *color, int *priority_mask) void rng_sprite_callback(running_machine *machine, int *code, int *color, int *priority_mask)
{ {
*color = sprite_colorbase | (*color & 0x001f); *color = sprite_colorbase | (*color & 0x001f);
} }
@ -81,10 +81,10 @@ VIDEO_START(rng)
8*8*4 8*8*4
}; };
K055673_vh_start(machine, "gfx2", 1, -8, 15, rng_sprite_callback); // K055673_vh_start(machine, "gfx2", 1, -8, 15, rng_sprite_callback);
K053936_wraparound_enable(0, 0); // K053936_wraparound_enable(0, 0);
K053936_set_offset(0, 34, 9); // K053936_set_offset(0, 34, 9);
rng_936_tilemap = tilemap_create(machine, get_rng_936_tile_info, tilemap_scan_rows, 16, 16, 128, 128); rng_936_tilemap = tilemap_create(machine, get_rng_936_tile_info, tilemap_scan_rows, 16, 16, 128, 128);
tilemap_set_transparent_pen(rng_936_tilemap, 0); tilemap_set_transparent_pen(rng_936_tilemap, 0);
@ -111,12 +111,15 @@ VIDEO_START(rng)
VIDEO_UPDATE(rng) VIDEO_UPDATE(rng)
{ {
const device_config *k055673 = devtag_get_device(screen->machine, "k055673");
const device_config *k053936 = devtag_get_device(screen->machine, "k053936");
bitmap_fill(bitmap, cliprect, get_black_pen(screen->machine)); bitmap_fill(bitmap, cliprect, get_black_pen(screen->machine));
bitmap_fill(screen->machine->priority_bitmap, cliprect, 0); bitmap_fill(screen->machine->priority_bitmap, cliprect, 0);
K053936_0_zoom_draw(bitmap, cliprect, rng_936_tilemap, 0, 0, 1); k053936_zoom_draw(k053936, bitmap, cliprect, rng_936_tilemap, 0, 0, 1);
K053247_sprites_draw(screen->machine, bitmap, cliprect); k053247_sprites_draw(k055673, bitmap, cliprect);
tilemap_mark_all_tiles_dirty(ttl_tilemap); tilemap_mark_all_tiles_dirty(ttl_tilemap);
tilemap_draw(bitmap, cliprect, ttl_tilemap, 0, 0); tilemap_draw(bitmap, cliprect, ttl_tilemap, 0, 0);

View File

@ -1,5 +1,5 @@
#include "driver.h" #include "driver.h"
#include "konamiic.h" #include "video/konicdev.h"
UINT16 *tail2nos_bgvideoram; UINT16 *tail2nos_bgvideoram;
@ -36,7 +36,7 @@ static TILE_GET_INFO( get_tile_info )
***************************************************************************/ ***************************************************************************/
static void zoom_callback(int *code,int *color,int *flags) void tail2nos_zoom_callback(running_machine *machine, int *code,int *color,int *flags)
{ {
*code |= ((*color & 0x03) << 8); *code |= ((*color & 0x03) << 8);
*color = 32 + ((*color & 0x38) >> 3); *color = 32 + ((*color & 0x38) >> 3);
@ -52,12 +52,8 @@ VIDEO_START( tail2nos )
{ {
bg_tilemap = tilemap_create(machine, get_tile_info,tilemap_scan_rows,8,8,64,32); bg_tilemap = tilemap_create(machine, get_tile_info,tilemap_scan_rows,8,8,64,32);
K051316_vh_start_0(machine,"gfx3",-4,TRUE,0,zoom_callback);
tilemap_set_transparent_pen(bg_tilemap,15); tilemap_set_transparent_pen(bg_tilemap,15);
K051316_wraparound_enable(0,1);
K051316_set_offset(0,-89,-14);
zoomdata = (UINT16 *)memory_region(machine, "gfx3"); zoomdata = (UINT16 *)memory_region(machine, "gfx3");
} }
@ -157,13 +153,16 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap,const rectan
VIDEO_UPDATE( tail2nos ) VIDEO_UPDATE( tail2nos )
{ {
const device_config *k051316 = devtag_get_device(screen->machine, "k051316");
if (video_enable) if (video_enable)
{ {
K051316_zoom_draw_0(bitmap,cliprect,0,0); k051316_zoom_draw(k051316, bitmap,cliprect, 0, 0);
draw_sprites(screen->machine, bitmap,cliprect); draw_sprites(screen->machine, bitmap, cliprect);
tilemap_draw(bitmap,cliprect,bg_tilemap,0,0); tilemap_draw(bitmap, cliprect, bg_tilemap, 0, 0);
} }
else else
bitmap_fill(bitmap,cliprect,0); bitmap_fill(bitmap, cliprect, 0);
return 0; return 0;
} }

View File

@ -1,6 +1,6 @@
#include "driver.h" #include "driver.h"
#include "machine/eeprom.h" #include "machine/eeprom.h"
#include "video/konamiic.h" #include "video/konicdev.h"
#include "includes/tmnt.h" #include "includes/tmnt.h"
@ -47,7 +47,7 @@ static TILE_GET_INFO( prmrsocr_get_roz_tile_info )
/* Missing in Action */ /* Missing in Action */
static void mia_tile_callback(int layer,int bank,int *code,int *color,int *flags,int *priority) void mia_tile_callback(running_machine *machine, int layer,int bank,int *code,int *color,int *flags,int *priority)
{ {
*flags = (*color & 0x04) ? TILE_FLIPX : 0; *flags = (*color & 0x04) ? TILE_FLIPX : 0;
if (layer == 0) if (layer == 0)
@ -62,9 +62,11 @@ static void mia_tile_callback(int layer,int bank,int *code,int *color,int *flags
} }
} }
static void cuebrick_tile_callback(int layer,int bank,int *code,int *color,int *flags,int *priority) void cuebrick_tile_callback(running_machine *machine, int layer,int bank,int *code,int *color,int *flags,int *priority)
{ {
if ((K052109_get_RMRD_line() == CLEAR_LINE) && (layer == 0)) const device_config *k052109 = devtag_get_device(machine, "k052109");
if ((k052109_get_rmrd_line(k052109) == CLEAR_LINE) && (layer == 0))
{ {
*code |= ((*color & 0x01) << 8); *code |= ((*color & 0x01) << 8);
*color = layer_colorbase[layer] + ((*color & 0x80) >> 5) + ((*color & 0x10) >> 1); *color = layer_colorbase[layer] + ((*color & 0x80) >> 5) + ((*color & 0x10) >> 1);
@ -76,14 +78,14 @@ static void cuebrick_tile_callback(int layer,int bank,int *code,int *color,int *
} }
} }
static void tmnt_tile_callback(int layer,int bank,int *code,int *color,int *flags,int *priority) void tmnt_tile_callback(running_machine *machine, int layer,int bank,int *code,int *color,int *flags,int *priority)
{ {
*code |= ((*color & 0x03) << 8) | ((*color & 0x10) << 6) | ((*color & 0x0c) << 9) *code |= ((*color & 0x03) << 8) | ((*color & 0x10) << 6) | ((*color & 0x0c) << 9)
| (bank << 13); | (bank << 13);
*color = layer_colorbase[layer] + ((*color & 0xe0) >> 5); *color = layer_colorbase[layer] + ((*color & 0xe0) >> 5);
} }
static void ssbl_tile_callback(int layer,int bank,int *code,int *color,int *flags,int *priority) void ssbl_tile_callback(running_machine *machine, int layer,int bank,int *code,int *color,int *flags,int *priority)
{ {
if (layer == 0) if (layer == 0)
{ {
@ -102,7 +104,7 @@ static void ssbl_tile_callback(int layer,int bank,int *code,int *color,int *flag
static int blswhstl_rombank; static int blswhstl_rombank;
static void blswhstl_tile_callback(int layer,int bank,int *code,int *color,int *flags,int *priority) void blswhstl_tile_callback(running_machine *machine, int layer,int bank,int *code,int *color,int *flags,int *priority)
{ {
/* (color & 0x02) is flip y handled internally by the 052109 */ /* (color & 0x02) is flip y handled internally by the 052109 */
*code |= ((*color & 0x01) << 8) | ((*color & 0x10) << 5) | ((*color & 0x0c) << 8) *code |= ((*color & 0x01) << 8) | ((*color & 0x10) << 5) | ((*color & 0x0c) << 8)
@ -118,18 +120,18 @@ static void blswhstl_tile_callback(int layer,int bank,int *code,int *color,int *
***************************************************************************/ ***************************************************************************/
static void mia_sprite_callback(int *code,int *color,int *priority,int *shadow) void mia_sprite_callback(running_machine *machine, int *code,int *color,int *priority,int *shadow)
{ {
*color = sprite_colorbase + (*color & 0x0f); *color = sprite_colorbase + (*color & 0x0f);
} }
static void tmnt_sprite_callback(int *code,int *color,int *priority,int *shadow) void tmnt_sprite_callback(running_machine *machine, int *code,int *color,int *priority,int *shadow)
{ {
*code |= (*color & 0x10) << 9; *code |= (*color & 0x10) << 9;
*color = sprite_colorbase + (*color & 0x0f); *color = sprite_colorbase + (*color & 0x0f);
} }
static void punkshot_sprite_callback(int *code,int *color,int *priority_mask,int *shadow) void punkshot_sprite_callback(running_machine *machine, int *code,int *color,int *priority_mask,int *shadow)
{ {
int pri = 0x20 | ((*color & 0x60) >> 2); int pri = 0x20 | ((*color & 0x60) >> 2);
if (pri <= layerpri[2]) *priority_mask = 0; if (pri <= layerpri[2]) *priority_mask = 0;
@ -141,7 +143,7 @@ static void punkshot_sprite_callback(int *code,int *color,int *priority_mask,int
*color = sprite_colorbase + (*color & 0x0f); *color = sprite_colorbase + (*color & 0x0f);
} }
static void thndrx2_sprite_callback(int *code,int *color,int *priority_mask,int *shadow) void thndrx2_sprite_callback(running_machine *machine, int *code,int *color,int *priority_mask,int *shadow)
{ {
int pri = 0x20 | ((*color & 0x60) >> 2); int pri = 0x20 | ((*color & 0x60) >> 2);
if (pri <= layerpri[2]) *priority_mask = 0; if (pri <= layerpri[2]) *priority_mask = 0;
@ -159,7 +161,7 @@ static void thndrx2_sprite_callback(int *code,int *color,int *priority_mask,int
***************************************************************************/ ***************************************************************************/
static void lgtnfght_sprite_callback(int *code,int *color,int *priority_mask) void lgtnfght_sprite_callback(running_machine *machine, int *code,int *color,int *priority_mask)
{ {
int pri = 0x20 | ((*color & 0x60) >> 2); int pri = 0x20 | ((*color & 0x60) >> 2);
if (pri <= layerpri[2]) *priority_mask = 0; if (pri <= layerpri[2]) *priority_mask = 0;
@ -170,7 +172,7 @@ static void lgtnfght_sprite_callback(int *code,int *color,int *priority_mask)
*color = sprite_colorbase + (*color & 0x1f); *color = sprite_colorbase + (*color & 0x1f);
} }
static void blswhstl_sprite_callback(int *code,int *color,int *priority_mask) void blswhstl_sprite_callback(running_machine *machine, int *code,int *color,int *priority_mask)
{ {
#if 0 #if 0
if (input_code_pressed(machine, KEYCODE_Q) && (*color & 0x20)) *color = rand(); if (input_code_pressed(machine, KEYCODE_Q) && (*color & 0x20)) *color = rand();
@ -186,7 +188,7 @@ if (input_code_pressed(machine, KEYCODE_E) && (*color & 0x80)) *color = rand();
*color = sprite_colorbase + (*color & 0x1f); *color = sprite_colorbase + (*color & 0x1f);
} }
static void prmrsocr_sprite_callback(int *code,int *color,int *priority_mask) void prmrsocr_sprite_callback(running_machine *machine, int *code,int *color,int *priority_mask)
{ {
int pri = 0x20 | ((*color & 0x60) >> 2); int pri = 0x20 | ((*color & 0x60) >> 2);
if (pri <= layerpri[2]) *priority_mask = 0; if (pri <= layerpri[2]) *priority_mask = 0;
@ -207,24 +209,24 @@ static void prmrsocr_sprite_callback(int *code,int *color,int *priority_mask)
***************************************************************************/ ***************************************************************************/
VIDEO_START( mia )
{
layer_colorbase[0] = 0;
layer_colorbase[1] = 32;
layer_colorbase[2] = 40;
sprite_colorbase = 16;
K052109_vh_start(machine,"gfx1",NORMAL_PLANE_ORDER,mia_tile_callback);
K051960_vh_start(machine,"gfx2",REVERSE_PLANE_ORDER,mia_sprite_callback);
}
VIDEO_START( cuebrick ) VIDEO_START( cuebrick )
{ {
layer_colorbase[0] = 0; layer_colorbase[0] = 0;
layer_colorbase[1] = 32; layer_colorbase[1] = 32;
layer_colorbase[2] = 40; layer_colorbase[2] = 40;
sprite_colorbase = 16; sprite_colorbase = 16;
K052109_vh_start(machine,"gfx1",NORMAL_PLANE_ORDER,cuebrick_tile_callback); // K052109_vh_start(machine,"gfx1",NORMAL_PLANE_ORDER,cuebrick_tile_callback);
K051960_vh_start(machine,"gfx2",REVERSE_PLANE_ORDER,mia_sprite_callback); // K051960_vh_start(machine,"gfx2",REVERSE_PLANE_ORDER,mia_sprite_callback);
}
VIDEO_START( mia )
{
layer_colorbase[0] = 0;
layer_colorbase[1] = 32;
layer_colorbase[2] = 40;
sprite_colorbase = 16;
// K052109_vh_start(machine,"gfx1",NORMAL_PLANE_ORDER,mia_tile_callback);
// K051960_vh_start(machine,"gfx2",REVERSE_PLANE_ORDER,mia_sprite_callback);
} }
VIDEO_START( tmnt ) VIDEO_START( tmnt )
@ -233,24 +235,26 @@ VIDEO_START( tmnt )
layer_colorbase[1] = 32; layer_colorbase[1] = 32;
layer_colorbase[2] = 40; layer_colorbase[2] = 40;
sprite_colorbase = 16; sprite_colorbase = 16;
K052109_vh_start(machine,"gfx1",NORMAL_PLANE_ORDER,tmnt_tile_callback); // K052109_vh_start(machine,"gfx1",NORMAL_PLANE_ORDER,tmnt_tile_callback);
K051960_vh_start(machine,"gfx2",REVERSE_PLANE_ORDER,tmnt_sprite_callback); // K051960_vh_start(machine,"gfx2",REVERSE_PLANE_ORDER,tmnt_sprite_callback);
} }
VIDEO_START( punkshot ) VIDEO_START( punkshot )
{ {
K053251_vh_start(machine); // K053251_vh_start(machine);
K052109_vh_start(machine,"gfx1",NORMAL_PLANE_ORDER,tmnt_tile_callback); // K052109_vh_start(machine,"gfx1",NORMAL_PLANE_ORDER,tmnt_tile_callback);
K051960_vh_start(machine,"gfx2",NORMAL_PLANE_ORDER,punkshot_sprite_callback); // K051960_vh_start(machine,"gfx2",NORMAL_PLANE_ORDER,punkshot_sprite_callback);
} }
VIDEO_START( lgtnfght ) /* also tmnt2, ssriders */ VIDEO_START( lgtnfght ) /* also tmnt2, ssriders */
{ {
K053251_vh_start(machine); const device_config *k053245 = devtag_get_device(machine, "k053245");
K052109_vh_start(machine,"gfx1",NORMAL_PLANE_ORDER,tmnt_tile_callback);
K053245_vh_start(machine,0, "gfx2",NORMAL_PLANE_ORDER,lgtnfght_sprite_callback);
K05324x_set_z_rejection(0); // K053251_vh_start(machine);
// K052109_vh_start(machine,"gfx1",NORMAL_PLANE_ORDER,tmnt_tile_callback);
// K053245_vh_start(machine,0, "gfx2",NORMAL_PLANE_ORDER,lgtnfght_sprite_callback);
k05324x_set_z_rejection(k053245, 0);
dim_c = dim_v = lastdim = lasten = 0; dim_c = dim_v = lastdim = lasten = 0;
@ -262,55 +266,54 @@ VIDEO_START( lgtnfght ) /* also tmnt2, ssriders */
VIDEO_START( sunsetbl ) VIDEO_START( sunsetbl )
{ {
K053251_vh_start(machine); // K053251_vh_start(machine);
K052109_vh_start(machine,"gfx1",NORMAL_PLANE_ORDER,ssbl_tile_callback); // K052109_vh_start(machine,"gfx1",NORMAL_PLANE_ORDER,ssbl_tile_callback);
K053245_vh_start(machine,0, "gfx2",NORMAL_PLANE_ORDER,lgtnfght_sprite_callback); // K053245_vh_start(machine,0, "gfx2",NORMAL_PLANE_ORDER,lgtnfght_sprite_callback);
} }
VIDEO_START( blswhstl ) VIDEO_START( blswhstl )
{ {
K053251_vh_start(machine); // K053251_vh_start(machine);
K052109_vh_start(machine,"gfx1",NORMAL_PLANE_ORDER,blswhstl_tile_callback); // K052109_vh_start(machine,"gfx1",NORMAL_PLANE_ORDER,blswhstl_tile_callback);
K053245_vh_start(machine,0, "gfx2",NORMAL_PLANE_ORDER,blswhstl_sprite_callback); // K053245_vh_start(machine,0, "gfx2",NORMAL_PLANE_ORDER,blswhstl_sprite_callback);
} }
VIDEO_START( glfgreat ) VIDEO_START( glfgreat )
{ {
K053251_vh_start(machine); // K053251_vh_start(machine);
K052109_vh_start(machine,"gfx1",NORMAL_PLANE_ORDER,tmnt_tile_callback); // K052109_vh_start(machine,"gfx1",NORMAL_PLANE_ORDER,tmnt_tile_callback);
K053245_vh_start(machine,0, "gfx2",NORMAL_PLANE_ORDER,lgtnfght_sprite_callback); // K053245_vh_start(machine,0, "gfx2",NORMAL_PLANE_ORDER,lgtnfght_sprite_callback);
roz_tilemap = tilemap_create(machine, glfgreat_get_roz_tile_info,tilemap_scan_rows,16,16,512,512); roz_tilemap = tilemap_create(machine, glfgreat_get_roz_tile_info,tilemap_scan_rows,16,16,512,512);
tilemap_set_transparent_pen(roz_tilemap,0); tilemap_set_transparent_pen(roz_tilemap,0);
K053936_wraparound_enable(0, 1); // k053936_wraparound_enable(k053936, 1);
K053936_set_offset(0, 85, 0); // k053936_set_offset(k053936, 85, 0);
} }
VIDEO_START( thndrx2 ) VIDEO_START( thndrx2 )
{ {
K053251_vh_start(machine); // K053251_vh_start(machine);
K052109_vh_start(machine,"gfx1",NORMAL_PLANE_ORDER,tmnt_tile_callback); // K052109_vh_start(machine,"gfx1",NORMAL_PLANE_ORDER,tmnt_tile_callback);
K051960_vh_start(machine,"gfx2",NORMAL_PLANE_ORDER,thndrx2_sprite_callback); // K051960_vh_start(machine,"gfx2",NORMAL_PLANE_ORDER,thndrx2_sprite_callback);
} }
VIDEO_START( prmrsocr ) VIDEO_START( prmrsocr )
{ {
K053251_vh_start(machine); // K053251_vh_start(machine);
K052109_vh_start(machine,"gfx1",NORMAL_PLANE_ORDER,tmnt_tile_callback); // K052109_vh_start(machine,"gfx1",NORMAL_PLANE_ORDER,tmnt_tile_callback);
K053245_vh_start(machine,0, "gfx2",NORMAL_PLANE_ORDER,prmrsocr_sprite_callback); // K053245_vh_start(machine,0, "gfx2",NORMAL_PLANE_ORDER,prmrsocr_sprite_callback);
roz_tilemap = tilemap_create(machine, prmrsocr_get_roz_tile_info,tilemap_scan_rows,16,16,512,256); roz_tilemap = tilemap_create(machine, prmrsocr_get_roz_tile_info,tilemap_scan_rows,16,16,512,256);
tilemap_set_transparent_pen(roz_tilemap,0); tilemap_set_transparent_pen(roz_tilemap,0);
K053936_wraparound_enable(0, 0); // k053936_wraparound_enable(k053936, 0, 0);
K053936_set_offset(0, 85, 1); // k053936_set_offset(k053936, 0, 85, 1);
} }
/*************************************************************************** /***************************************************************************
Memory handlers Memory handlers
@ -330,6 +333,8 @@ WRITE16_HANDLER( tmnt_paletteram_word_w )
WRITE16_HANDLER( tmnt_0a0000_w ) WRITE16_HANDLER( tmnt_0a0000_w )
{ {
const device_config *k052109 = devtag_get_device(space->machine, "k052109");
if (ACCESSING_BITS_0_7) if (ACCESSING_BITS_0_7)
{ {
static int last; static int last;
@ -348,7 +353,7 @@ WRITE16_HANDLER( tmnt_0a0000_w )
interrupt_enable_w(space, 0, data & 0x20); interrupt_enable_w(space, 0, data & 0x20);
/* bit 7 = enable char ROM reading through the video RAM */ /* bit 7 = enable char ROM reading through the video RAM */
K052109_set_RMRD_line((data & 0x80) ? ASSERT_LINE : CLEAR_LINE); k052109_set_rmrd_line(k052109, (data & 0x80) ? ASSERT_LINE : CLEAR_LINE);
/* other bits unused */ /* other bits unused */
} }
@ -356,6 +361,8 @@ WRITE16_HANDLER( tmnt_0a0000_w )
WRITE16_HANDLER( punkshot_0a0020_w ) WRITE16_HANDLER( punkshot_0a0020_w )
{ {
const device_config *k052109 = devtag_get_device(space->machine, "k052109");
if (ACCESSING_BITS_0_7) if (ACCESSING_BITS_0_7)
{ {
static int last; static int last;
@ -371,17 +378,18 @@ WRITE16_HANDLER( punkshot_0a0020_w )
last = data & 0x04; last = data & 0x04;
/* bit 3 = enable char ROM reading through the video RAM */ /* bit 3 = enable char ROM reading through the video RAM */
K052109_set_RMRD_line((data & 0x08) ? ASSERT_LINE : CLEAR_LINE); k052109_set_rmrd_line(k052109, (data & 0x08) ? ASSERT_LINE : CLEAR_LINE);
} }
} }
WRITE16_HANDLER( lgtnfght_0a0018_w ) WRITE16_HANDLER( lgtnfght_0a0018_w )
{ {
const device_config *k052109 = devtag_get_device(space->machine, "k052109");
if (ACCESSING_BITS_0_7) if (ACCESSING_BITS_0_7)
{ {
static int last; static int last;
/* bit 0,1 = coin counter */ /* bit 0,1 = coin counter */
coin_counter_w(space->machine, 0, data & 0x01); coin_counter_w(space->machine, 0, data & 0x01);
coin_counter_w(space->machine, 1, data & 0x02); coin_counter_w(space->machine, 1, data & 0x02);
@ -393,12 +401,14 @@ WRITE16_HANDLER( lgtnfght_0a0018_w )
last = data & 0x04; last = data & 0x04;
/* bit 3 = enable char ROM reading through the video RAM */ /* bit 3 = enable char ROM reading through the video RAM */
K052109_set_RMRD_line((data & 0x08) ? ASSERT_LINE : CLEAR_LINE); k052109_set_rmrd_line(k052109, (data & 0x08) ? ASSERT_LINE : CLEAR_LINE);
} }
} }
WRITE16_HANDLER( blswhstl_700300_w ) WRITE16_HANDLER( blswhstl_700300_w )
{ {
const device_config *k052109 = devtag_get_device(space->machine, "k052109");
if (ACCESSING_BITS_0_7) if (ACCESSING_BITS_0_7)
{ {
/* bit 0,1 = coin counter */ /* bit 0,1 = coin counter */
@ -406,7 +416,7 @@ WRITE16_HANDLER( blswhstl_700300_w )
coin_counter_w(space->machine, 1,data & 0x02); coin_counter_w(space->machine, 1,data & 0x02);
/* bit 3 = enable char ROM reading through the video RAM */ /* bit 3 = enable char ROM reading through the video RAM */
K052109_set_RMRD_line((data & 0x08) ? ASSERT_LINE : CLEAR_LINE); k052109_set_rmrd_line(k052109, (data & 0x08) ? ASSERT_LINE : CLEAR_LINE);
/* bit 7 = select char ROM bank */ /* bit 7 = select char ROM bank */
if (blswhstl_rombank != ((data & 0x80) >> 7)) if (blswhstl_rombank != ((data & 0x80) >> 7))
@ -436,6 +446,8 @@ READ16_HANDLER( glfgreat_rom_r )
WRITE16_HANDLER( glfgreat_122000_w ) WRITE16_HANDLER( glfgreat_122000_w )
{ {
const device_config *k052109 = devtag_get_device(space->machine, "k052109");
if (ACCESSING_BITS_0_7) if (ACCESSING_BITS_0_7)
{ {
/* bit 0,1 = coin counter */ /* bit 0,1 = coin counter */
@ -443,7 +455,7 @@ WRITE16_HANDLER( glfgreat_122000_w )
coin_counter_w(space->machine, 1,data & 0x02); coin_counter_w(space->machine, 1,data & 0x02);
/* bit 4 = enable char ROM reading through the video RAM */ /* bit 4 = enable char ROM reading through the video RAM */
K052109_set_RMRD_line((data & 0x10) ? ASSERT_LINE : CLEAR_LINE); k052109_set_rmrd_line(k052109, (data & 0x10) ? ASSERT_LINE : CLEAR_LINE);
/* bit 5 = 53596 tile rom bank selection */ /* bit 5 = 53596 tile rom bank selection */
if (glfgreat_roz_rom_bank != (data & 0x20) >> 5) if (glfgreat_roz_rom_bank != (data & 0x20) >> 5)
@ -467,6 +479,8 @@ WRITE16_HANDLER( glfgreat_122000_w )
WRITE16_HANDLER( ssriders_eeprom_w ) WRITE16_HANDLER( ssriders_eeprom_w )
{ {
const device_config *k053245 = devtag_get_device(space->machine, "k053245");
if (ACCESSING_BITS_0_7) if (ACCESSING_BITS_0_7)
{ {
/* bit 0 is data */ /* bit 0 is data */
@ -482,12 +496,14 @@ WRITE16_HANDLER( ssriders_eeprom_w )
dim_c = data & 0x18; dim_c = data & 0x18;
/* bit 5 selects sprite ROM for testing in TMNT2 (bits 5-7, actually, according to the schematics) */ /* bit 5 selects sprite ROM for testing in TMNT2 (bits 5-7, actually, according to the schematics) */
K053244_bankselect(0, ((data & 0x20) >> 5) << 2); k053244_bankselect(k053245, ((data & 0x20) >> 5) << 2);
} }
} }
WRITE16_HANDLER( ssriders_1c0300_w ) WRITE16_HANDLER( ssriders_1c0300_w )
{ {
const device_config *k052109 = devtag_get_device(space->machine, "k052109");
if (ACCESSING_BITS_0_7) if (ACCESSING_BITS_0_7)
{ {
/* bit 0,1 = coin counter */ /* bit 0,1 = coin counter */
@ -495,7 +511,7 @@ WRITE16_HANDLER( ssriders_1c0300_w )
coin_counter_w(space->machine, 1,data & 0x02); coin_counter_w(space->machine, 1,data & 0x02);
/* bit 3 = enable char ROM reading through the video RAM */ /* bit 3 = enable char ROM reading through the video RAM */
K052109_set_RMRD_line((data & 0x08) ? ASSERT_LINE : CLEAR_LINE); k052109_set_rmrd_line(k052109, (data & 0x08) ? ASSERT_LINE : CLEAR_LINE);
/* bits 4-6 control palette dimming (DIM0-DIM2) */ /* bits 4-6 control palette dimming (DIM0-DIM2) */
dim_v = (data & 0x70) >> 4; dim_v = (data & 0x70) >> 4;
@ -504,6 +520,9 @@ WRITE16_HANDLER( ssriders_1c0300_w )
WRITE16_HANDLER( prmrsocr_122000_w ) WRITE16_HANDLER( prmrsocr_122000_w )
{ {
const device_config *k052109 = devtag_get_device(space->machine, "k052109");
const device_config *k053245 = devtag_get_device(space->machine, "k053245");
if (ACCESSING_BITS_0_7) if (ACCESSING_BITS_0_7)
{ {
/* bit 0,1 = coin counter */ /* bit 0,1 = coin counter */
@ -511,11 +530,11 @@ WRITE16_HANDLER( prmrsocr_122000_w )
coin_counter_w(space->machine, 1,data & 0x02); coin_counter_w(space->machine, 1,data & 0x02);
/* bit 4 = enable char ROM reading through the video RAM */ /* bit 4 = enable char ROM reading through the video RAM */
K052109_set_RMRD_line((data & 0x10) ? ASSERT_LINE : CLEAR_LINE); k052109_set_rmrd_line(k052109, (data & 0x10) ? ASSERT_LINE : CLEAR_LINE);
/* bit 6 = sprite ROM bank */ /* bit 6 = sprite ROM bank */
prmrsocr_sprite_bank = (data & 0x40) >> 6; prmrsocr_sprite_bank = (data & 0x40) >> 6;
K053244_bankselect(0, prmrsocr_sprite_bank << 2); k053244_bankselect(k053245, prmrsocr_sprite_bank << 2);
/* bit 7 = 53596 region selector for ROM test */ /* bit 7 = 53596 region selector for ROM test */
glfgreat_roz_char_bank = (data & 0x80) >> 7; glfgreat_roz_char_bank = (data & 0x80) >> 7;
@ -587,84 +606,100 @@ static void sortlayers(int *layer,int *pri)
VIDEO_UPDATE( mia ) VIDEO_UPDATE( mia )
{ {
K052109_tilemap_update(); const device_config *k052109 = devtag_get_device(screen->machine, "k052109");
const device_config *k051960 = devtag_get_device(screen->machine, "k051960");
k052109_tilemap_update(k052109);
k052109_tilemap_draw(k052109, bitmap, cliprect, 2, TILEMAP_DRAW_OPAQUE,0);
if ((priorityflag & 1) == 1) k051960_sprites_draw(k051960,bitmap,cliprect,0,0);
k052109_tilemap_draw(k052109, bitmap, cliprect, 1, 0, 0);
if ((priorityflag & 1) == 0) k051960_sprites_draw(k051960,bitmap,cliprect,0,0);
k052109_tilemap_draw(k052109, bitmap, cliprect, 0, 0, 0);
tilemap_draw(bitmap,cliprect,K052109_tilemap[2],TILEMAP_DRAW_OPAQUE,0);
if ((priorityflag & 1) == 1) K051960_sprites_draw(screen->machine,bitmap,cliprect,0,0);
tilemap_draw(bitmap,cliprect,K052109_tilemap[1],0,0);
if ((priorityflag & 1) == 0) K051960_sprites_draw(screen->machine,bitmap,cliprect,0,0);
tilemap_draw(bitmap,cliprect,K052109_tilemap[0],0,0);
return 0; return 0;
} }
VIDEO_UPDATE( tmnt ) VIDEO_UPDATE( tmnt )
{ {
K052109_tilemap_update(); const device_config *k052109 = devtag_get_device(screen->machine, "k052109");
const device_config *k051960 = devtag_get_device(screen->machine, "k051960");
k052109_tilemap_update(k052109);
k052109_tilemap_draw(k052109, bitmap, cliprect, 2, TILEMAP_DRAW_OPAQUE,0);
if ((priorityflag & 1) == 1) k051960_sprites_draw(k051960,bitmap,cliprect,0,0);
k052109_tilemap_draw(k052109, bitmap, cliprect, 1, 0, 0);
if ((priorityflag & 1) == 0) k051960_sprites_draw(k051960,bitmap,cliprect,0,0);
k052109_tilemap_draw(k052109, bitmap, cliprect, 0, 0, 0);
tilemap_draw(bitmap,cliprect,K052109_tilemap[2],TILEMAP_DRAW_OPAQUE,0);
if ((priorityflag & 1) == 1) K051960_sprites_draw(screen->machine,bitmap,cliprect,0,0);
tilemap_draw(bitmap,cliprect,K052109_tilemap[1],0,0);
if ((priorityflag & 1) == 0) K051960_sprites_draw(screen->machine,bitmap,cliprect,0,0);
tilemap_draw(bitmap,cliprect,K052109_tilemap[0],0,0);
return 0; return 0;
} }
VIDEO_UPDATE( punkshot ) VIDEO_UPDATE( punkshot )
{ {
bg_colorbase = K053251_get_palette_index(K053251_CI0); const device_config *k052109 = devtag_get_device(screen->machine, "k052109");
sprite_colorbase = K053251_get_palette_index(K053251_CI1); const device_config *k053251 = devtag_get_device(screen->machine, "k053251");
layer_colorbase[0] = K053251_get_palette_index(K053251_CI2); const device_config *k051960 = devtag_get_device(screen->machine, "k051960");
layer_colorbase[1] = K053251_get_palette_index(K053251_CI4);
layer_colorbase[2] = K053251_get_palette_index(K053251_CI3);
K052109_tilemap_update(); bg_colorbase = k053251_get_palette_index(k053251, K053251_CI0);
sprite_colorbase = k053251_get_palette_index(k053251, K053251_CI1);
layer_colorbase[0] = k053251_get_palette_index(k053251, K053251_CI2);
layer_colorbase[1] = k053251_get_palette_index(k053251, K053251_CI4);
layer_colorbase[2] = k053251_get_palette_index(k053251, K053251_CI3);
k052109_tilemap_update(k052109);
sorted_layer[0] = 0; sorted_layer[0] = 0;
layerpri[0] = K053251_get_priority(K053251_CI2); layerpri[0] = k053251_get_priority(k053251, K053251_CI2);
sorted_layer[1] = 1; sorted_layer[1] = 1;
layerpri[1] = K053251_get_priority(K053251_CI4); layerpri[1] = k053251_get_priority(k053251, K053251_CI4);
sorted_layer[2] = 2; sorted_layer[2] = 2;
layerpri[2] = K053251_get_priority(K053251_CI3); layerpri[2] = k053251_get_priority(k053251, K053251_CI3);
sortlayers(sorted_layer,layerpri); sortlayers(sorted_layer,layerpri);
bitmap_fill(screen->machine->priority_bitmap,cliprect,0); bitmap_fill(screen->machine->priority_bitmap,cliprect,0);
tilemap_draw(bitmap,cliprect,K052109_tilemap[sorted_layer[0]],TILEMAP_DRAW_OPAQUE,1); k052109_tilemap_draw(k052109, bitmap, cliprect, sorted_layer[0], TILEMAP_DRAW_OPAQUE, 1);
tilemap_draw(bitmap,cliprect,K052109_tilemap[sorted_layer[1]],0,2); k052109_tilemap_draw(k052109, bitmap, cliprect, sorted_layer[1], 0, 2);
tilemap_draw(bitmap,cliprect,K052109_tilemap[sorted_layer[2]],0,4); k052109_tilemap_draw(k052109, bitmap, cliprect, sorted_layer[2], 0, 4);
K051960_sprites_draw(screen->machine,bitmap,cliprect,-1,-1); k051960_sprites_draw(k051960, bitmap, cliprect, -1, -1);
return 0; return 0;
} }
VIDEO_UPDATE( lgtnfght ) VIDEO_UPDATE( lgtnfght )
{ {
bg_colorbase = K053251_get_palette_index(K053251_CI0); const device_config *k052109 = devtag_get_device(screen->machine, "k052109");
sprite_colorbase = K053251_get_palette_index(K053251_CI1); const device_config *k053251 = devtag_get_device(screen->machine, "k053251");
layer_colorbase[0] = K053251_get_palette_index(K053251_CI2); const device_config *k053245 = devtag_get_device(screen->machine, "k053245");
layer_colorbase[1] = K053251_get_palette_index(K053251_CI4);
layer_colorbase[2] = K053251_get_palette_index(K053251_CI3);
K052109_tilemap_update(); bg_colorbase = k053251_get_palette_index(k053251, K053251_CI0);
sprite_colorbase = k053251_get_palette_index(k053251, K053251_CI1);
layer_colorbase[0] = k053251_get_palette_index(k053251, K053251_CI2);
layer_colorbase[1] = k053251_get_palette_index(k053251, K053251_CI4);
layer_colorbase[2] = k053251_get_palette_index(k053251, K053251_CI3);
k052109_tilemap_update(k052109);
sorted_layer[0] = 0; sorted_layer[0] = 0;
layerpri[0] = K053251_get_priority(K053251_CI2); layerpri[0] = k053251_get_priority(k053251, K053251_CI2);
sorted_layer[1] = 1; sorted_layer[1] = 1;
layerpri[1] = K053251_get_priority(K053251_CI4); layerpri[1] = k053251_get_priority(k053251, K053251_CI4);
sorted_layer[2] = 2; sorted_layer[2] = 2;
layerpri[2] = K053251_get_priority(K053251_CI3); layerpri[2] = k053251_get_priority(k053251, K053251_CI3);
sortlayers(sorted_layer,layerpri); sortlayers(sorted_layer,layerpri);
bitmap_fill(screen->machine->priority_bitmap,cliprect,0); bitmap_fill(screen->machine->priority_bitmap,cliprect,0);
bitmap_fill(bitmap,cliprect,16 * bg_colorbase); bitmap_fill(bitmap,cliprect,16 * bg_colorbase);
tilemap_draw(bitmap,cliprect,K052109_tilemap[sorted_layer[0]],0,1); k052109_tilemap_draw(k052109, bitmap, cliprect, sorted_layer[0], 0, 1);
tilemap_draw(bitmap,cliprect,K052109_tilemap[sorted_layer[1]],0,2); k052109_tilemap_draw(k052109, bitmap, cliprect, sorted_layer[1], 0, 2);
tilemap_draw(bitmap,cliprect,K052109_tilemap[sorted_layer[2]],0,4); k052109_tilemap_draw(k052109, bitmap, cliprect, sorted_layer[2], 0, 4);
K053245_sprites_draw(screen->machine, 0, bitmap,cliprect); k053245_sprites_draw(k053245, bitmap, cliprect);
return 0; return 0;
} }
@ -680,24 +715,45 @@ popmessage("%04x",glfgreat_pixel);
else return glfgreat_pixel & 0xff; else return glfgreat_pixel & 0xff;
} }
static void glfgreat_update_dirtytile(running_machine *machine)
{
// const device_config *k052109 = devtag_get_device(machine, "k052109");
// const device_config *k053251 = devtag_get_device(machine, "k053251");
// int i;
//
// for (i = 0; i < 3; i++)
// {
// if (k053251_get_tmap_dirty(k053251, 2 + i))
// {
// k053251_set_tmap_dirty(k053251, 2 + i, 0);
// tilemap_mark_all_tiles_dirty(k052109_get_tilemap(k052109, i));
// }
// }
}
VIDEO_UPDATE( glfgreat ) VIDEO_UPDATE( glfgreat )
{ {
K053251_set_tilemaps(NULL,NULL,K052109_tilemap[0],K052109_tilemap[1],K052109_tilemap[2]); const device_config *k052109 = devtag_get_device(screen->machine, "k052109");
const device_config *k053251 = devtag_get_device(screen->machine, "k053251");
const device_config *k053245 = devtag_get_device(screen->machine, "k053245");
const device_config *k053936 = devtag_get_device(screen->machine, "k053936");
bg_colorbase = K053251_get_palette_index(K053251_CI0); glfgreat_update_dirtytile(screen->machine);
sprite_colorbase = K053251_get_palette_index(K053251_CI1);
layer_colorbase[0] = K053251_get_palette_index(K053251_CI2);
layer_colorbase[1] = K053251_get_palette_index(K053251_CI3) + 8; /* weird... */
layer_colorbase[2] = K053251_get_palette_index(K053251_CI4);
K052109_tilemap_update(); bg_colorbase = k053251_get_palette_index(k053251, K053251_CI0);
sprite_colorbase = k053251_get_palette_index(k053251, K053251_CI1);
layer_colorbase[0] = k053251_get_palette_index(k053251, K053251_CI2);
layer_colorbase[1] = k053251_get_palette_index(k053251, K053251_CI3) + 8; /* weird... */
layer_colorbase[2] = k053251_get_palette_index(k053251, K053251_CI4);
k052109_tilemap_update(k052109);
sorted_layer[0] = 0; sorted_layer[0] = 0;
layerpri[0] = K053251_get_priority(K053251_CI2); layerpri[0] = k053251_get_priority(k053251, K053251_CI2);
sorted_layer[1] = 1; sorted_layer[1] = 1;
layerpri[1] = K053251_get_priority(K053251_CI3); layerpri[1] = k053251_get_priority(k053251, K053251_CI3);
sorted_layer[2] = 2; sorted_layer[2] = 2;
layerpri[2] = K053251_get_priority(K053251_CI4); layerpri[2] = k053251_get_priority(k053251, K053251_CI4);
sortlayers(sorted_layer,layerpri); sortlayers(sorted_layer,layerpri);
@ -705,36 +761,42 @@ VIDEO_UPDATE( glfgreat )
bitmap_fill(screen->machine->priority_bitmap,cliprect,0); bitmap_fill(screen->machine->priority_bitmap,cliprect,0);
bitmap_fill(bitmap,cliprect,16 * bg_colorbase); bitmap_fill(bitmap,cliprect,16 * bg_colorbase);
tilemap_draw(bitmap,cliprect,K052109_tilemap[sorted_layer[0]],0,1); k052109_tilemap_draw(k052109, bitmap, cliprect, sorted_layer[0], 0, 1);
if (layerpri[0] >= 0x30 && layerpri[1] < 0x30) if (layerpri[0] >= 0x30 && layerpri[1] < 0x30)
{ {
K053936_0_zoom_draw(bitmap,cliprect,roz_tilemap,0,1,1); k053936_zoom_draw(k053936, bitmap, cliprect, roz_tilemap, 0, 1, 1);
glfgreat_pixel = *BITMAP_ADDR16(bitmap,0x80,0x105);
}
tilemap_draw(bitmap,cliprect,K052109_tilemap[sorted_layer[1]],0,2);
if (layerpri[1] >= 0x30 && layerpri[2] < 0x30)
{
K053936_0_zoom_draw(bitmap,cliprect,roz_tilemap,0,1,1);
glfgreat_pixel = *BITMAP_ADDR16(bitmap,0x80,0x105);
}
tilemap_draw(bitmap,cliprect,K052109_tilemap[sorted_layer[2]],0,4);
if (layerpri[2] >= 0x30)
{
K053936_0_zoom_draw(bitmap,cliprect,roz_tilemap,0,1,1);
glfgreat_pixel = *BITMAP_ADDR16(bitmap,0x80,0x105); glfgreat_pixel = *BITMAP_ADDR16(bitmap,0x80,0x105);
} }
K053245_sprites_draw(screen->machine, 0, bitmap,cliprect); k052109_tilemap_draw(k052109, bitmap, cliprect, sorted_layer[1], 0, 2);
if (layerpri[1] >= 0x30 && layerpri[2] < 0x30)
{
k053936_zoom_draw(k053936, bitmap, cliprect, roz_tilemap, 0, 1, 1);
glfgreat_pixel = *BITMAP_ADDR16(bitmap,0x80,0x105);
}
k052109_tilemap_draw(k052109, bitmap, cliprect, sorted_layer[2], 0, 4);
if (layerpri[2] >= 0x30)
{
k053936_zoom_draw(k053936, bitmap, cliprect, roz_tilemap, 0, 1, 1);
glfgreat_pixel = *BITMAP_ADDR16(bitmap,0x80,0x105);
}
k053245_sprites_draw(k053245, bitmap, cliprect);
return 0; return 0;
} }
VIDEO_UPDATE( tmnt2 ) VIDEO_UPDATE( tmnt2 )
{ {
const device_config *k053251 = devtag_get_device(screen->machine, "k053251");
double brt; double brt;
int i, newdim, newen, cb, ce; int i, newdim, newen, cb, ce;
newdim = dim_v | ((~dim_c & 0x10) >> 1); newdim = dim_v | ((~dim_c & 0x10) >> 1);
newen = (K053251_get_priority(5) && K053251_get_priority(5) != 0x3e); newen = (k053251_get_priority(k053251, 5) && k053251_get_priority(k053251, 5) != 0x3e);
if (newdim != lastdim || newen != lasten) if (newdim != lastdim || newen != lasten)
{ {
@ -756,16 +818,16 @@ VIDEO_UPDATE( tmnt2 )
ce = cb + 128; ce = cb + 128;
// dim all colors before it // dim all colors before it
for (i=0; i<cb; i++) for (i = 0; i < cb; i++)
palette_set_pen_contrast(screen->machine,i,brt); palette_set_pen_contrast(screen->machine, i, brt);
// reset all colors in range // reset all colors in range
for (i=cb; i<ce; i++) for (i = cb; i < ce; i++)
palette_set_pen_contrast(screen->machine,i,1.0); palette_set_pen_contrast(screen->machine, i, 1.0);
// dim all colors after it // dim all colors after it
for (i=ce; i<2048; i++) for (i = ce; i < 2048; i++)
palette_set_pen_contrast(screen->machine,i,brt); palette_set_pen_contrast(screen->machine, i, brt);
// toggle shadow/highlight // toggle shadow/highlight
if (~dim_c & 0x10) if (~dim_c & 0x10)
@ -781,30 +843,34 @@ VIDEO_UPDATE( tmnt2 )
VIDEO_UPDATE( thndrx2 ) VIDEO_UPDATE( thndrx2 )
{ {
bg_colorbase = K053251_get_palette_index(K053251_CI0); const device_config *k052109 = devtag_get_device(screen->machine, "k052109");
sprite_colorbase = K053251_get_palette_index(K053251_CI1); const device_config *k053251 = devtag_get_device(screen->machine, "k053251");
layer_colorbase[0] = K053251_get_palette_index(K053251_CI2); const device_config *k051960 = devtag_get_device(screen->machine, "k051960");
layer_colorbase[1] = K053251_get_palette_index(K053251_CI4);
layer_colorbase[2] = K053251_get_palette_index(K053251_CI3);
K052109_tilemap_update(); bg_colorbase = k053251_get_palette_index(k053251, K053251_CI0);
sprite_colorbase = k053251_get_palette_index(k053251, K053251_CI1);
layer_colorbase[0] = k053251_get_palette_index(k053251, K053251_CI2);
layer_colorbase[1] = k053251_get_palette_index(k053251, K053251_CI4);
layer_colorbase[2] = k053251_get_palette_index(k053251, K053251_CI3);
k052109_tilemap_update(k052109);
sorted_layer[0] = 0; sorted_layer[0] = 0;
layerpri[0] = K053251_get_priority(K053251_CI2); layerpri[0] = k053251_get_priority(k053251, K053251_CI2);
sorted_layer[1] = 1; sorted_layer[1] = 1;
layerpri[1] = K053251_get_priority(K053251_CI4); layerpri[1] = k053251_get_priority(k053251, K053251_CI4);
sorted_layer[2] = 2; sorted_layer[2] = 2;
layerpri[2] = K053251_get_priority(K053251_CI3); layerpri[2] = k053251_get_priority(k053251, K053251_CI3);
sortlayers(sorted_layer,layerpri); sortlayers(sorted_layer,layerpri);
bitmap_fill(screen->machine->priority_bitmap,cliprect,0); bitmap_fill(screen->machine->priority_bitmap,cliprect,0);
bitmap_fill(bitmap,cliprect,16 * bg_colorbase); bitmap_fill(bitmap,cliprect,16 * bg_colorbase);
tilemap_draw(bitmap,cliprect,K052109_tilemap[sorted_layer[0]],0,1); k052109_tilemap_draw(k052109, bitmap, cliprect, sorted_layer[0], 0, 1);
tilemap_draw(bitmap,cliprect,K052109_tilemap[sorted_layer[1]],0,2); k052109_tilemap_draw(k052109, bitmap, cliprect, sorted_layer[1], 0, 2);
tilemap_draw(bitmap,cliprect,K052109_tilemap[sorted_layer[2]],0,4); k052109_tilemap_draw(k052109, bitmap, cliprect, sorted_layer[2], 0, 4);
K051960_sprites_draw(screen->machine,bitmap,cliprect,-1,-1); k051960_sprites_draw(k051960, bitmap, cliprect, -1, -1);
return 0; return 0;
} }
@ -818,5 +884,6 @@ VIDEO_UPDATE( thndrx2 )
VIDEO_EOF( blswhstl ) VIDEO_EOF( blswhstl )
{ {
K053245_clear_buffer(0); const device_config *k053245 = devtag_get_device(machine, "k053245");
k053245_clear_buffer(k053245);
} }

View File

@ -1,10 +1,5 @@
#include "driver.h" #include "driver.h"
#include "video/konamiic.h" #include "video/konicdev.h"
#define SPRITEROM_MEM_REGION "gfx1"
#define ZOOMROM0_MEM_REGION "gfx2"
#define ZOOMROM1_MEM_REGION "gfx3"
#define ZOOMROM2_MEM_REGION "gfx4"
static int sprite_colorbase, zoom_colorbase[3]; static int sprite_colorbase, zoom_colorbase[3];
static int bank0,bank1,bank2; static int bank0,bank1,bank2;
@ -16,7 +11,7 @@ static int bank0,bank1,bank2;
***************************************************************************/ ***************************************************************************/
static void sprite_callback(int *code,int *color,int *priority,int *shadow) void ultraman_sprite_callback(running_machine *machine, int *code,int *color,int *priority,int *shadow)
{ {
*priority = (*color & 0x80) >> 7; *priority = (*color & 0x80) >> 7;
*color = sprite_colorbase + ((*color & 0x7e) >> 1); *color = sprite_colorbase + ((*color & 0x7e) >> 1);
@ -30,19 +25,19 @@ static void sprite_callback(int *code,int *color,int *priority,int *shadow)
***************************************************************************/ ***************************************************************************/
static void zoom_callback_0(int *code,int *color,int *flags) void ultraman_zoom_callback_0(running_machine *machine, int *code,int *color,int *flags)
{ {
*code |= ((*color & 0x07) << 8) | (bank0 << 11); *code |= ((*color & 0x07) << 8) | (bank0 << 11);
*color = zoom_colorbase[0] + ((*color & 0xf8) >> 3); *color = zoom_colorbase[0] + ((*color & 0xf8) >> 3);
} }
static void zoom_callback_1(int *code,int *color,int *flags) void ultraman_zoom_callback_1(running_machine *machine, int *code,int *color,int *flags)
{ {
*code |= ((*color & 0x07) << 8) | (bank1 << 11); *code |= ((*color & 0x07) << 8) | (bank1 << 11);
*color = zoom_colorbase[1] + ((*color & 0xf8) >> 3); *color = zoom_colorbase[1] + ((*color & 0xf8) >> 3);
} }
static void zoom_callback_2(int *code,int *color,int *flags) void ultraman_zoom_callback_2(running_machine *machine, int *code,int *color,int *flags)
{ {
*code |= ((*color & 0x07) << 8) | (bank2 << 11); *code |= ((*color & 0x07) << 8) | (bank2 << 11);
*color = zoom_colorbase[2] + ((*color & 0xf8) >> 3); *color = zoom_colorbase[2] + ((*color & 0xf8) >> 3);
@ -62,15 +57,6 @@ VIDEO_START( ultraman )
zoom_colorbase[0] = 0; zoom_colorbase[0] = 0;
zoom_colorbase[1] = 64; zoom_colorbase[1] = 64;
zoom_colorbase[2] = 128; zoom_colorbase[2] = 128;
K051960_vh_start(machine,SPRITEROM_MEM_REGION,NORMAL_PLANE_ORDER,sprite_callback);
K051316_vh_start_0(machine,ZOOMROM0_MEM_REGION,4,FALSE,0,zoom_callback_0);
K051316_vh_start_1(machine,ZOOMROM1_MEM_REGION,4,FALSE,0,zoom_callback_1);
K051316_vh_start_2(machine,ZOOMROM2_MEM_REGION,4,TRUE,0,zoom_callback_2);
K051316_set_offset(0, 8, 0);
K051316_set_offset(1, 8, 0);
K051316_set_offset(2, 8, 0);
} }
@ -83,6 +69,10 @@ VIDEO_START( ultraman )
WRITE16_HANDLER( ultraman_gfxctrl_w ) WRITE16_HANDLER( ultraman_gfxctrl_w )
{ {
const device_config *k051316_1 = devtag_get_device(space->machine, "k051316_1");
const device_config *k051316_2 = devtag_get_device(space->machine, "k051316_2");
const device_config *k051316_3 = devtag_get_device(space->machine, "k051316_3");
if (ACCESSING_BITS_0_7) if (ACCESSING_BITS_0_7)
{ {
/* bit 0: enable wraparound for scr #1 /* bit 0: enable wraparound for scr #1
@ -93,24 +83,31 @@ WRITE16_HANDLER( ultraman_gfxctrl_w )
bit 5: msb of code for scr #3 bit 5: msb of code for scr #3
bit 6: coin counter 1 bit 6: coin counter 1
bit 7: coin counter 2 */ bit 7: coin counter 2 */
K051316_wraparound_enable(0,data & 0x01);
k051316_wraparound_enable(k051316_1, data & 0x01);
if (bank0 != ((data & 0x02) >> 1)) if (bank0 != ((data & 0x02) >> 1))
{ {
bank0 = (data & 0x02) >> 1; bank0 = (data & 0x02) >> 1;
tilemap_mark_all_tiles_dirty_all(space->machine); /* should mark only zoom0 */ tilemap_mark_all_tiles_dirty_all(space->machine); /* should mark only zoom0 */
} }
K051316_wraparound_enable(1,data & 0x04);
k051316_wraparound_enable(k051316_2, data & 0x04);
if (bank1 != ((data & 0x08) >> 3)) if (bank1 != ((data & 0x08) >> 3))
{ {
bank1 = (data & 0x08) >> 3; bank1 = (data & 0x08) >> 3;
tilemap_mark_all_tiles_dirty_all(space->machine); /* should mark only zoom1 */ tilemap_mark_all_tiles_dirty_all(space->machine); /* should mark only zoom1 */
} }
K051316_wraparound_enable(2,data & 0x10);
k051316_wraparound_enable(k051316_3, data & 0x10);
if (bank2 != ((data & 0x20) >> 5)) if (bank2 != ((data & 0x20) >> 5))
{ {
bank2 = (data & 0x20) >> 5; bank2 = (data & 0x20) >> 5;
tilemap_mark_all_tiles_dirty_all(space->machine); /* should mark only zoom2 */ tilemap_mark_all_tiles_dirty_all(space->machine); /* should mark only zoom2 */
} }
coin_counter_w(space->machine, 0, data & 0x40); coin_counter_w(space->machine, 0, data & 0x40);
coin_counter_w(space->machine, 1, data & 0x80); coin_counter_w(space->machine, 1, data & 0x80);
} }
@ -126,10 +123,15 @@ WRITE16_HANDLER( ultraman_gfxctrl_w )
VIDEO_UPDATE( ultraman ) VIDEO_UPDATE( ultraman )
{ {
K051316_zoom_draw_2(bitmap,cliprect,0,0); const device_config *k051316_1 = devtag_get_device(screen->machine, "k051316_1");
K051316_zoom_draw_1(bitmap,cliprect,0,0); const device_config *k051316_2 = devtag_get_device(screen->machine, "k051316_2");
K051960_sprites_draw(screen->machine,bitmap,cliprect,0,0); const device_config *k051316_3 = devtag_get_device(screen->machine, "k051316_3");
K051316_zoom_draw_0(bitmap,cliprect,0,0); const device_config *k051960 = devtag_get_device(screen->machine, "k051960");
K051960_sprites_draw(screen->machine,bitmap,cliprect,1,1);
k051316_zoom_draw(k051316_3, bitmap, cliprect, 0, 0);
k051316_zoom_draw(k051316_2, bitmap, cliprect, 0, 0);
k051960_sprites_draw(k051960, bitmap, cliprect, 0, 0);
k051316_zoom_draw(k051316_1, bitmap, cliprect, 0, 0);
k051960_sprites_draw(k051960, bitmap, cliprect, 1, 1);
return 0; return 0;
} }

View File

@ -8,7 +8,7 @@
***************************************************************************/ ***************************************************************************/
#include "driver.h" #include "driver.h"
#include "video/konamiic.h" #include "video/konicdev.h"
#define BMP_PAD 8 #define BMP_PAD 8
#define BLEND_STEPS 16 #define BLEND_STEPS 16
@ -983,16 +983,14 @@ VIDEO_START( wecleman )
} }
// Callbacks for the K051316 // Callbacks for the K051316
#define ZOOMROM0_MEM_REGION "gfx2"
#define ZOOMROM1_MEM_REGION "gfx3"
static void zoom_callback_0(int *code,int *color,int *flags) void hotchase_zoom_callback_0(running_machine *machine, int *code,int *color,int *flags)
{ {
*code |= (*color & 0x03) << 8; *code |= (*color & 0x03) << 8;
*color = (*color & 0xfc) >> 2; *color = (*color & 0xfc) >> 2;
} }
static void zoom_callback_1(int *code,int *color,int *flags) void hotchase_zoom_callback_1(running_machine *machine, int *code,int *color,int *flags)
{ {
*code |= (*color & 0x01) << 8; *code |= (*color & 0x01) << 8;
*color = ((*color & 0x3f) << 1) | ((*code & 0x80) >> 7); *color = ((*color & 0x3f) << 1) | ((*code & 0x80) >> 7);
@ -1025,14 +1023,6 @@ VIDEO_START( hotchase )
spr_ptr_list = (struct sprite **)buffer; spr_ptr_list = (struct sprite **)buffer;
sprite_list = auto_alloc_array_clear(machine, struct sprite, NUM_SPRITES); sprite_list = auto_alloc_array_clear(machine, struct sprite, NUM_SPRITES);
K051316_vh_start_0(machine,ZOOMROM0_MEM_REGION,4,FALSE,0,zoom_callback_0);
K051316_vh_start_1(machine,ZOOMROM1_MEM_REGION,4,FALSE,0,zoom_callback_1);
K051316_wraparound_enable(0,1);
// K051316_wraparound_enable(1,1);
K051316_set_offset(0, -0xB0/2, -16);
K051316_set_offset(1, -0xB0/2, -16);
} }
@ -1135,6 +1125,8 @@ VIDEO_UPDATE ( wecleman )
VIDEO_UPDATE( hotchase ) VIDEO_UPDATE( hotchase )
{ {
const device_config *k051316_1 = devtag_get_device(screen->machine, "k051316_1");
const device_config *k051316_2 = devtag_get_device(screen->machine, "k051316_2");
int video_on; int video_on;
video_on = wecleman_irqctrl & 0x40; video_on = wecleman_irqctrl & 0x40;
@ -1146,15 +1138,19 @@ VIDEO_UPDATE( hotchase )
bitmap_fill(bitmap, cliprect, black_pen); bitmap_fill(bitmap, cliprect, black_pen);
/* Draw the background */ /* Draw the background */
if (video_on) K051316_zoom_draw_0(bitmap,cliprect, 0, 0); if (video_on)
k051316_zoom_draw(k051316_1, bitmap, cliprect, 0, 0);
/* Draw the road */ /* Draw the road */
if (video_on) hotchase_draw_road(screen->machine, bitmap, cliprect); if (video_on)
hotchase_draw_road(screen->machine, bitmap, cliprect);
/* Draw the sprites */ /* Draw the sprites */
if (video_on) sprite_draw(bitmap,cliprect); if (video_on)
sprite_draw(bitmap,cliprect);
/* Draw the foreground (text) */ /* Draw the foreground (text) */
if (video_on) K051316_zoom_draw_1(bitmap,cliprect, 0, 0); if (video_on)
k051316_zoom_draw(k051316_2, bitmap, cliprect, 0, 0);
return 0; return 0;
} }

View File

@ -1,5 +1,5 @@
#include "driver.h" #include "driver.h"
#include "video/konamiic.h" #include "video/konicdev.h"
#include "includes/xmen.h" #include "includes/xmen.h"
@ -13,7 +13,7 @@ static int layerpri[3];
***************************************************************************/ ***************************************************************************/
static void xmen_tile_callback(int layer,int bank,int *code,int *color,int *flags,int *priority) void xmen_tile_callback(running_machine *machine, int layer,int bank,int *code,int *color,int *flags,int *priority)
{ {
/* (color & 0x02) is flip y handled internally by the 052109 */ /* (color & 0x02) is flip y handled internally by the 052109 */
if (layer == 0) if (layer == 0)
@ -28,7 +28,7 @@ static void xmen_tile_callback(int layer,int bank,int *code,int *color,int *flag
***************************************************************************/ ***************************************************************************/
static void xmen_sprite_callback(int *code,int *color,int *priority_mask) void xmen_sprite_callback(running_machine *machine, int *code,int *color,int *priority_mask)
{ {
int pri = (*color & 0x00e0) >> 4; /* ??????? */ int pri = (*color & 0x00e0) >> 4; /* ??????? */
if (pri <= layerpri[2]) *priority_mask = 0; if (pri <= layerpri[2]) *priority_mask = 0;
@ -47,25 +47,15 @@ static void xmen_sprite_callback(int *code,int *color,int *priority_mask)
***************************************************************************/ ***************************************************************************/
VIDEO_START( xmen )
{
K053251_vh_start(machine);
K052109_vh_start(machine,"gfx1",NORMAL_PLANE_ORDER,xmen_tile_callback);
K053247_vh_start(machine,"gfx2",53,-2,NORMAL_PLANE_ORDER,xmen_sprite_callback);
}
static bitmap_t * screen_right; static bitmap_t * screen_right;
static bitmap_t * screen_left; static bitmap_t * screen_left;
static UINT16 *K053247_ram; static UINT16 *K053247_ram;
VIDEO_START( xmen6p ) VIDEO_START( xmen6p )
{ {
K053251_vh_start(machine); const device_config *k053246 = devtag_get_device(machine, "k053246");
K052109_vh_start(machine,"gfx1",NORMAL_PLANE_ORDER,xmen_tile_callback); k053247_get_ram(k053246, &K053247_ram);
K053247_vh_start(machine,"gfx2",53,-2,NORMAL_PLANE_ORDER,xmen_sprite_callback);
K053247_export_config(&K053247_ram, NULL, NULL, NULL, NULL);
screen_left = auto_bitmap_alloc(machine, 64*8, 32*8, BITMAP_FORMAT_INDEXED16); screen_left = auto_bitmap_alloc(machine, 64*8, 32*8, BITMAP_FORMAT_INDEXED16);
screen_right = auto_bitmap_alloc(machine, 64*8, 32*8, BITMAP_FORMAT_INDEXED16); screen_right = auto_bitmap_alloc(machine, 64*8, 32*8, BITMAP_FORMAT_INDEXED16);
@ -97,63 +87,64 @@ static void sortlayers(int *layer,int *pri)
VIDEO_UPDATE( xmen ) VIDEO_UPDATE( xmen )
{ {
const device_config *k052109 = devtag_get_device(screen->machine, "k052109");
const device_config *k053246 = devtag_get_device(screen->machine, "k053246");
const device_config *k053251 = devtag_get_device(screen->machine, "k053251");
int layer[3]; int layer[3];
bg_colorbase = k053251_get_palette_index(k053251, K053251_CI4);
sprite_colorbase = k053251_get_palette_index(k053251, K053251_CI1);
layer_colorbase[0] = k053251_get_palette_index(k053251, K053251_CI3);
layer_colorbase[1] = k053251_get_palette_index(k053251, K053251_CI0);
layer_colorbase[2] = k053251_get_palette_index(k053251, K053251_CI2);
bg_colorbase = K053251_get_palette_index(K053251_CI4); k052109_tilemap_update(k052109);
sprite_colorbase = K053251_get_palette_index(K053251_CI1);
layer_colorbase[0] = K053251_get_palette_index(K053251_CI3);
layer_colorbase[1] = K053251_get_palette_index(K053251_CI0);
layer_colorbase[2] = K053251_get_palette_index(K053251_CI2);
K052109_tilemap_update();
layer[0] = 0; layer[0] = 0;
layerpri[0] = K053251_get_priority(K053251_CI3); layerpri[0] = k053251_get_priority(k053251, K053251_CI3);
layer[1] = 1; layer[1] = 1;
layerpri[1] = K053251_get_priority(K053251_CI0); layerpri[1] = k053251_get_priority(k053251, K053251_CI0);
layer[2] = 2; layer[2] = 2;
layerpri[2] = K053251_get_priority(K053251_CI2); layerpri[2] = k053251_get_priority(k053251, K053251_CI2);
sortlayers(layer,layerpri); sortlayers(layer,layerpri);
bitmap_fill(screen->machine->priority_bitmap,cliprect,0); bitmap_fill(screen->machine->priority_bitmap,cliprect,0);
/* note the '+1' in the background color!!! */ /* note the '+1' in the background color!!! */
bitmap_fill(bitmap,cliprect,16 * bg_colorbase+1); bitmap_fill(bitmap,cliprect,16 * bg_colorbase+1);
tilemap_draw(bitmap,cliprect,K052109_tilemap[layer[0]],0,1); k052109_tilemap_draw(k052109, bitmap, cliprect, layer[0], 0, 1);
tilemap_draw(bitmap,cliprect,K052109_tilemap[layer[1]],0,2); k052109_tilemap_draw(k052109, bitmap, cliprect, layer[1], 0, 2);
tilemap_draw(bitmap,cliprect,K052109_tilemap[layer[2]],0,4); k052109_tilemap_draw(k052109, bitmap, cliprect, layer[2], 0, 4);
/* this isn't supported anymore and it is unsure if still needed; keeping here for reference /* this isn't supported anymore and it is unsure if still needed; keeping here for reference
pdrawgfx_shadow_lowpri = 1; fix shadows of boulders in front of feet */ pdrawgfx_shadow_lowpri = 1; fix shadows of boulders in front of feet */
K053247_sprites_draw(screen->machine, bitmap,cliprect); k053247_sprites_draw(k053246, bitmap, cliprect);
return 0; return 0;
} }
VIDEO_UPDATE( xmen6p ) VIDEO_UPDATE( xmen6p )
{ {
int x,y;
const device_config *left_screen = devtag_get_device(screen->machine, "lscreen"); const device_config *left_screen = devtag_get_device(screen->machine, "lscreen");
const device_config *right_screen = devtag_get_device(screen->machine, "rscreen"); const device_config *right_screen = devtag_get_device(screen->machine, "rscreen");
int x,y;
if (screen == left_screen) if (screen == left_screen)
for(y=0;y<32*8;y++) for(y = 0; y < 32 * 8; y++)
{ {
UINT16* line_dest = BITMAP_ADDR16(bitmap, y, 0); UINT16* line_dest = BITMAP_ADDR16(bitmap, y, 0);
UINT16* line_src = BITMAP_ADDR16(screen_left, y, 0); UINT16* line_src = BITMAP_ADDR16(screen_left, y, 0);
for (x=12*8;x<52*8;x++) for (x = 12 * 8; x < 52 * 8; x++)
line_dest[x] = line_src[x]; line_dest[x] = line_src[x];
} }
else if (screen == right_screen) else if (screen == right_screen)
for(y=0;y<32*8;y++) for(y = 0; y < 32 * 8; y++)
{ {
UINT16* line_dest = BITMAP_ADDR16(bitmap, y, 0); UINT16* line_dest = BITMAP_ADDR16(bitmap, y, 0);
UINT16* line_src = BITMAP_ADDR16(screen_right, y, 0); UINT16* line_src = BITMAP_ADDR16(screen_right, y, 0);
for (x=12*8;x<52*8;x++) for (x = 12 * 8; x < 52 * 8; x++)
line_dest[x] = line_src[x]; line_dest[x] = line_src[x];
} }
@ -163,7 +154,9 @@ VIDEO_UPDATE( xmen6p )
/* my lefts and rights are mixed up in several places.. */ /* my lefts and rights are mixed up in several places.. */
VIDEO_EOF( xmen6p ) VIDEO_EOF( xmen6p )
{ {
const address_space *space = cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM); const device_config *k052109 = devtag_get_device(machine, "k052109");
const device_config *k053246 = devtag_get_device(machine, "k053246");
const device_config *k053251 = devtag_get_device(machine, "k053251");
int layer[3]; int layer[3];
bitmap_t * renderbitmap; bitmap_t * renderbitmap;
rectangle cliprect; rectangle cliprect;
@ -186,17 +179,17 @@ VIDEO_EOF( xmen6p )
if (xmen_current_frame & 0x01) if (xmen_current_frame & 0x01)
{ {
/* copy the desired spritelist to the chip */ /* copy the desired spritelist to the chip */
memcpy(K053247_ram, xmen6p_spriteramright, 0x1000); memcpy(K053247_ram, xmen6p_spriteramright, 0x1000);
/* we write the entire content of the tileram to the chip to ensure /* we write the entire content of the tileram to the chip to ensure
everything gets marked as dirty and the desired tilemap is rendered everything gets marked as dirty and the desired tilemap is rendered
this is not very efficient! this is not very efficient!
*/ */
for (offset = 0; offset < (0xc000 / 2); offset++) for (offset = 0; offset < (0xc000 / 2); offset++)
{ {
// K052109_lsb_w // K052109_lsb_w
K052109_w(space, offset, xmen6p_tilemapright[offset] & 0x00ff); k052109_w(k052109, offset, xmen6p_tilemapright[offset] & 0x00ff);
} }
@ -215,7 +208,7 @@ VIDEO_EOF( xmen6p )
for (offset = 0; offset < (0xc000 / 2); offset++) for (offset = 0; offset < (0xc000 / 2); offset++)
{ {
// K052109_lsb_w // K052109_lsb_w
K052109_w(space, offset, xmen6p_tilemapleft[offset] & 0x00ff); k052109_w(k052109, offset, xmen6p_tilemapleft[offset] & 0x00ff);
} }
@ -223,31 +216,31 @@ VIDEO_EOF( xmen6p )
} }
bg_colorbase = K053251_get_palette_index(K053251_CI4); bg_colorbase = k053251_get_palette_index(k053251, K053251_CI4);
sprite_colorbase = K053251_get_palette_index(K053251_CI1); sprite_colorbase = k053251_get_palette_index(k053251, K053251_CI1);
layer_colorbase[0] = K053251_get_palette_index(K053251_CI3); layer_colorbase[0] = k053251_get_palette_index(k053251, K053251_CI3);
layer_colorbase[1] = K053251_get_palette_index(K053251_CI0); layer_colorbase[1] = k053251_get_palette_index(k053251, K053251_CI0);
layer_colorbase[2] = K053251_get_palette_index(K053251_CI2); layer_colorbase[2] = k053251_get_palette_index(k053251, K053251_CI2);
K052109_tilemap_update(); k052109_tilemap_update(k052109);
layer[0] = 0; layer[0] = 0;
layerpri[0] = K053251_get_priority(K053251_CI3); layerpri[0] = k053251_get_priority(k053251, K053251_CI3);
layer[1] = 1; layer[1] = 1;
layerpri[1] = K053251_get_priority(K053251_CI0); layerpri[1] = k053251_get_priority(k053251, K053251_CI0);
layer[2] = 2; layer[2] = 2;
layerpri[2] = K053251_get_priority(K053251_CI2); layerpri[2] = k053251_get_priority(k053251, K053251_CI2);
sortlayers(layer,layerpri); sortlayers(layer,layerpri);
bitmap_fill(machine->priority_bitmap, &cliprect, 0); bitmap_fill(machine->priority_bitmap, &cliprect, 0);
/* note the '+1' in the background color!!! */ /* note the '+1' in the background color!!! */
bitmap_fill(renderbitmap, &cliprect, 16 * bg_colorbase + 1); bitmap_fill(renderbitmap, &cliprect, 16 * bg_colorbase + 1);
tilemap_draw(renderbitmap, &cliprect, K052109_tilemap[layer[0]], 0, 1); k052109_tilemap_draw(k052109, renderbitmap, &cliprect, layer[0], 0, 1);
tilemap_draw(renderbitmap, &cliprect, K052109_tilemap[layer[1]], 0, 2); k052109_tilemap_draw(k052109, renderbitmap, &cliprect, layer[1], 0, 2);
tilemap_draw(renderbitmap, &cliprect, K052109_tilemap[layer[2]], 0, 4); k052109_tilemap_draw(k052109, renderbitmap, &cliprect, layer[2], 0, 4);
/* this isn't supported anymore and it is unsure if still needed; keeping here for reference /* this isn't supported anymore and it is unsure if still needed; keeping here for reference
pdrawgfx_shadow_lowpri = 1; fix shadows of boulders in front of feet */ pdrawgfx_shadow_lowpri = 1; fix shadows of boulders in front of feet */
K053247_sprites_draw(machine, renderbitmap, &cliprect); k053247_sprites_draw(k053246, renderbitmap, &cliprect);
} }