Taito wip:

* Fixed TC0100SCN & TC0080VCO device start procedures to avoid pointers to non allocated memory and added missing multiscreen setups
* Converted asuka.c, ninjaw.c, othunder.c, taito_h.c, taito_o.c, taitoair.c, warriorb.c and wgp.c to use video devices
This commit is contained in:
Fabio Priuli 2009-12-28 17:36:00 +00:00
parent 7858c436fc
commit 34f4656cca
18 changed files with 633 additions and 558 deletions

View File

@ -216,7 +216,7 @@ DIP locations verified for:
#include "cpu/z80/z80.h"
#include "cpu/m68000/m68000.h"
#include "includes/taitoipt.h"
#include "video/taitoic.h"
#include "video/taiicdev.h"
#include "machine/taitoio.h"
#include "audio/taitosnd.h"
#include "sound/2610intf.h"
@ -226,9 +226,6 @@ DIP locations verified for:
WRITE16_HANDLER( asuka_spritectrl_w );
VIDEO_START( asuka );
VIDEO_START( galmedes );
VIDEO_START( cadash );
VIDEO_UPDATE( asuka );
VIDEO_UPDATE( bonzeadv );
@ -325,7 +322,7 @@ static ADDRESS_MAP_START( bonzeadv_map, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x000000, 0x03ffff) AM_ROM
AM_RANGE(0x080000, 0x0fffff) AM_ROM
AM_RANGE(0x10c000, 0x10ffff) AM_RAM
AM_RANGE(0x200000, 0x200007) AM_READWRITE(TC0110PCR_word_r, TC0110PCR_step1_word_w)
AM_RANGE(0x200000, 0x200007) AM_DEVREADWRITE("tc0110pcr", tc0110pcr_word_r, tc0110pcr_step1_word_w)
AM_RANGE(0x390000, 0x390001) AM_READ_PORT("DSWA")
AM_RANGE(0x3a0000, 0x3a0001) AM_WRITE(asuka_spritectrl_w)
AM_RANGE(0x3b0000, 0x3b0001) AM_READ_PORT("DSWB")
@ -336,24 +333,24 @@ static ADDRESS_MAP_START( bonzeadv_map, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x800000, 0x8007ff) AM_READWRITE(bonzeadv_cchip_ram_r, bonzeadv_cchip_ram_w)
AM_RANGE(0x800802, 0x800803) AM_READWRITE(bonzeadv_cchip_ctrl_r, bonzeadv_cchip_ctrl_w)
AM_RANGE(0x800c00, 0x800c01) AM_WRITE(bonzeadv_cchip_bank_w)
AM_RANGE(0xc00000, 0xc0ffff) AM_READWRITE(TC0100SCN_word_0_r, TC0100SCN_word_0_w) /* tilemaps */
AM_RANGE(0xc20000, 0xc2000f) AM_READWRITE(TC0100SCN_ctrl_word_0_r, TC0100SCN_ctrl_word_0_w)
AM_RANGE(0xd00000, 0xd03fff) AM_READWRITE(PC090OJ_word_0_r, PC090OJ_word_0_w) /* sprite ram */
AM_RANGE(0xc00000, 0xc0ffff) AM_DEVREADWRITE("tc0100scn", tc0100scn_word_r, tc0100scn_word_w) /* tilemaps */
AM_RANGE(0xc20000, 0xc2000f) AM_DEVREADWRITE("tc0100scn", tc0100scn_ctrl_word_r, tc0100scn_ctrl_word_w)
AM_RANGE(0xd00000, 0xd03fff) AM_DEVREADWRITE("pc090oj", pc090oj_word_r, pc090oj_word_w) /* sprite ram */
ADDRESS_MAP_END
static ADDRESS_MAP_START( asuka_map, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x000000, 0x0fffff) AM_ROM
AM_RANGE(0x100000, 0x103fff) AM_RAM
AM_RANGE(0x1076f0, 0x1076f1) AM_READNOP /* Mofflott init does dummy reads here */
AM_RANGE(0x200000, 0x20000f) AM_READWRITE(TC0110PCR_word_r, TC0110PCR_step1_word_w)
AM_RANGE(0x200000, 0x20000f) AM_DEVREADWRITE("tc0110pcr", tc0110pcr_word_r, tc0110pcr_step1_word_w)
AM_RANGE(0x3a0000, 0x3a0003) AM_WRITE(asuka_spritectrl_w)
AM_RANGE(0x3e0000, 0x3e0001) AM_READNOP AM_WRITE8(taitosound_port_w, 0x00ff)
AM_RANGE(0x3e0002, 0x3e0003) AM_READWRITE8(taitosound_comm_r, taitosound_comm_w, 0x00ff)
AM_RANGE(0x400000, 0x40000f) AM_DEVREADWRITE8("tc0220ioc", tc0220ioc_r, tc0220ioc_w, 0x00ff)
AM_RANGE(0xc00000, 0xc0ffff) AM_READWRITE(TC0100SCN_word_0_r, TC0100SCN_word_0_w) /* tilemaps */
AM_RANGE(0xc00000, 0xc0ffff) AM_DEVREADWRITE("tc0100scn", tc0100scn_word_r, tc0100scn_word_w) /* tilemaps */
AM_RANGE(0xc10000, 0xc103ff) AM_WRITENOP /* error in Asuka init code */
AM_RANGE(0xc20000, 0xc2000f) AM_READWRITE(TC0100SCN_ctrl_word_0_r, TC0100SCN_ctrl_word_0_w)
AM_RANGE(0xd00000, 0xd03fff) AM_READWRITE(PC090OJ_word_0_r, PC090OJ_word_0_w) /* sprite ram */
AM_RANGE(0xc20000, 0xc2000f) AM_DEVREADWRITE("tc0100scn", tc0100scn_ctrl_word_r, tc0100scn_ctrl_word_w)
AM_RANGE(0xd00000, 0xd03fff) AM_DEVREADWRITE("pc090oj", pc090oj_word_r, pc090oj_word_w) /* sprite ram */
ADDRESS_MAP_END
static ADDRESS_MAP_START( cadash_map, ADDRESS_SPACE_PROGRAM, 16 )
@ -364,25 +361,25 @@ static ADDRESS_MAP_START( cadash_map, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x100000, 0x107fff) AM_RAM
AM_RANGE(0x800000, 0x800fff) AM_RAM /* network ram */
AM_RANGE(0x900000, 0x90000f) AM_DEVREADWRITE8("tc0220ioc", tc0220ioc_r, tc0220ioc_w, 0x00ff)
AM_RANGE(0xa00000, 0xa0000f) AM_READWRITE(TC0110PCR_word_r, TC0110PCR_step1_4bpg_word_w)
AM_RANGE(0xb00000, 0xb03fff) AM_READWRITE(PC090OJ_word_0_r, PC090OJ_word_0_w) /* sprite ram */
AM_RANGE(0xc00000, 0xc0ffff) AM_READWRITE(TC0100SCN_word_0_r, TC0100SCN_word_0_w) /* tilemaps */
AM_RANGE(0xc20000, 0xc2000f) AM_READWRITE(TC0100SCN_ctrl_word_0_r, TC0100SCN_ctrl_word_0_w)
AM_RANGE(0xa00000, 0xa0000f) AM_DEVREADWRITE("tc0110pcr", tc0110pcr_word_r, tc0110pcr_step1_4bpg_word_w)
AM_RANGE(0xb00000, 0xb03fff) AM_DEVREADWRITE("pc090oj", pc090oj_word_r, pc090oj_word_w) /* sprite ram */
AM_RANGE(0xc00000, 0xc0ffff) AM_DEVREADWRITE("tc0100scn", tc0100scn_word_r, tc0100scn_word_w) /* tilemaps */
AM_RANGE(0xc20000, 0xc2000f) AM_DEVREADWRITE("tc0100scn", tc0100scn_ctrl_word_r, tc0100scn_ctrl_word_w)
ADDRESS_MAP_END
static ADDRESS_MAP_START( eto_map, ADDRESS_SPACE_PROGRAM, 16 ) /* N.B. tc100scn mirror overlaps spriteram */
AM_RANGE(0x000000, 0x0fffff) AM_ROM
AM_RANGE(0x100000, 0x10000f) AM_READWRITE(TC0110PCR_word_r, TC0110PCR_step1_word_w)
AM_RANGE(0x100000, 0x10000f) AM_DEVREADWRITE("tc0110pcr", tc0110pcr_word_r, tc0110pcr_step1_word_w)
AM_RANGE(0x200000, 0x203fff) AM_RAM
AM_RANGE(0x300000, 0x30000f) AM_DEVREADWRITE8("tc0220ioc", tc0220ioc_r, tc0220ioc_w, 0x00ff)
AM_RANGE(0x400000, 0x40000f) AM_DEVREAD8("tc0220ioc", tc0220ioc_r, 0x00ff) /* service mode mirror */
AM_RANGE(0x4a0000, 0x4a0003) AM_WRITE(asuka_spritectrl_w)
AM_RANGE(0x4e0000, 0x4e0001) AM_READNOP AM_WRITE8(taitosound_port_w, 0x00ff)
AM_RANGE(0x4e0002, 0x4e0003) AM_READWRITE8(taitosound_comm_r, taitosound_comm_w, 0x00ff)
AM_RANGE(0xc00000, 0xc03fff) AM_READWRITE(PC090OJ_word_0_r, PC090OJ_word_0_w) /* sprite ram */
AM_RANGE(0xc00000, 0xc0ffff) AM_WRITE(TC0100SCN_word_0_w) /* service mode mirror */
AM_RANGE(0xd00000, 0xd0ffff) AM_READWRITE(TC0100SCN_word_0_r, TC0100SCN_word_0_w) /* tilemaps */
AM_RANGE(0xd20000, 0xd2000f) AM_READWRITE(TC0100SCN_ctrl_word_0_r, TC0100SCN_ctrl_word_0_w)
AM_RANGE(0xc00000, 0xc03fff) AM_DEVREADWRITE("pc090oj", pc090oj_word_r, pc090oj_word_w) /* sprite ram */
AM_RANGE(0xc00000, 0xc0ffff) AM_DEVWRITE("tc0100scn", tc0100scn_word_w)
AM_RANGE(0xd00000, 0xd0ffff) AM_DEVREADWRITE("tc0100scn", tc0100scn_word_r, tc0100scn_word_w) /* tilemaps */
AM_RANGE(0xd20000, 0xd2000f) AM_DEVREADWRITE("tc0100scn", tc0100scn_ctrl_word_r, tc0100scn_ctrl_word_w)
ADDRESS_MAP_END
@ -783,9 +780,45 @@ static const msm5205_interface msm5205_config =
MACHINE DRIVERS
***********************************************************/
static const tc0100scn_interface asuka_tc0100scn_intf =
{
"screen",
1, 2, /* gfxnum, txnum */
0, 0, /* x_offset, y_offset */
0, 0, /* flip_xoff, flip_yoff */
0, 0, /* flip_text_xoff, flip_text_yoff */
0, 0
};
static const tc0100scn_interface cadash_tc0100scn_intf =
{
"screen",
1, 2, /* gfxnum, txnum */
1, 0, /* x_offset, y_offset */
0, 0, /* flip_xoff, flip_yoff */
0, 0, /* flip_text_xoff, flip_text_yoff */
0, 0
};
static const pc090oj_interface asuka_pc090oj_intf =
{
0, 0, 8, 0
};
static const pc090oj_interface cadash_pc090oj_intf =
{
0, 0, 8, 1
};
static const tc0110pcr_interface asuka_tc0110pcr_intf =
{
0
};
static VIDEO_EOF( asuka )
{
PC090OJ_eof_callback();
const device_config *pc090oj = devtag_get_device(machine, "pc090oj");
pc090oj_eof_callback(pc090oj);
}
static const tc0220ioc_interface asuka_io_intf =
@ -805,6 +838,9 @@ static MACHINE_DRIVER_START( bonzeadv )
MDRV_CPU_ADD("audiocpu", Z80,4000000) /* sound CPU, also required for test mode */
MDRV_CPU_PROGRAM_MAP(bonzeadv_z80_map)
MDRV_MACHINE_START(asuka)
MDRV_MACHINE_RESET(asuka)
MDRV_QUANTUM_TIME(HZ(600))
/* video hardware */
@ -817,13 +853,13 @@ static MACHINE_DRIVER_START( bonzeadv )
MDRV_GFXDECODE(asuka)
MDRV_PALETTE_LENGTH(4096)
MDRV_MACHINE_START(asuka)
MDRV_MACHINE_RESET(asuka)
MDRV_VIDEO_START(asuka)
MDRV_VIDEO_EOF(asuka)
MDRV_VIDEO_UPDATE(bonzeadv)
MDRV_PC090OJ_ADD("pc090oj", asuka_pc090oj_intf)
MDRV_TC0100SCN_ADD("tc0100scn", asuka_tc0100scn_intf)
MDRV_TC0110PCR_ADD("tc0110pcr", asuka_tc0110pcr_intf)
/* sound hardware */
MDRV_SPEAKER_STANDARD_MONO("mono")
@ -844,6 +880,9 @@ static MACHINE_DRIVER_START( asuka )
MDRV_CPU_ADD("audiocpu", Z80, XTAL_16MHz/4) /* verified on pcb */
MDRV_CPU_PROGRAM_MAP(z80_map)
MDRV_MACHINE_START(asuka)
MDRV_MACHINE_RESET(asuka)
MDRV_QUANTUM_TIME(HZ(600))
MDRV_TC0220IOC_ADD("tc0220ioc", asuka_io_intf)
@ -858,13 +897,13 @@ static MACHINE_DRIVER_START( asuka )
MDRV_GFXDECODE(asuka)
MDRV_PALETTE_LENGTH(4096)
MDRV_MACHINE_START(asuka)
MDRV_MACHINE_RESET(asuka)
MDRV_VIDEO_START(asuka)
MDRV_VIDEO_EOF(asuka)
MDRV_VIDEO_UPDATE(asuka)
MDRV_PC090OJ_ADD("pc090oj", asuka_pc090oj_intf)
MDRV_TC0100SCN_ADD("tc0100scn", asuka_tc0100scn_intf)
MDRV_TC0110PCR_ADD("tc0110pcr", asuka_tc0110pcr_intf)
/* sound hardware */
MDRV_SPEAKER_STANDARD_MONO("mono")
@ -888,6 +927,9 @@ static MACHINE_DRIVER_START( cadash )
MDRV_CPU_ADD("audiocpu", Z80, XTAL_8MHz/2) /* verified on pcb */
MDRV_CPU_PROGRAM_MAP(cadash_z80_map)
MDRV_MACHINE_START(asuka)
MDRV_MACHINE_RESET(asuka)
MDRV_QUANTUM_TIME(HZ(600))
MDRV_TC0220IOC_ADD("tc0220ioc", asuka_io_intf)
@ -902,13 +944,13 @@ static MACHINE_DRIVER_START( cadash )
MDRV_GFXDECODE(asuka)
MDRV_PALETTE_LENGTH(4096)
MDRV_MACHINE_START(asuka)
MDRV_MACHINE_RESET(asuka)
MDRV_VIDEO_START(cadash)
MDRV_VIDEO_EOF(asuka)
MDRV_VIDEO_UPDATE(bonzeadv)
MDRV_PC090OJ_ADD("pc090oj", cadash_pc090oj_intf)
MDRV_TC0100SCN_ADD("tc0100scn", cadash_tc0100scn_intf)
MDRV_TC0110PCR_ADD("tc0110pcr", asuka_tc0110pcr_intf)
/* sound hardware */
MDRV_SPEAKER_STANDARD_MONO("mono")
@ -928,6 +970,9 @@ static MACHINE_DRIVER_START( mofflott )
MDRV_CPU_ADD("audiocpu", Z80, 4000000) /* 4 MHz ??? */
MDRV_CPU_PROGRAM_MAP(z80_map)
MDRV_MACHINE_START(asuka)
MDRV_MACHINE_RESET(asuka)
MDRV_QUANTUM_TIME(HZ(600))
MDRV_TC0220IOC_ADD("tc0220ioc", asuka_io_intf)
@ -942,13 +987,13 @@ static MACHINE_DRIVER_START( mofflott )
MDRV_GFXDECODE(asuka)
MDRV_PALETTE_LENGTH(4096) /* only Mofflott uses full palette space */
MDRV_MACHINE_START(asuka)
MDRV_MACHINE_RESET(asuka)
MDRV_VIDEO_START(galmedes)
MDRV_VIDEO_EOF(asuka)
MDRV_VIDEO_UPDATE(asuka)
MDRV_PC090OJ_ADD("pc090oj", asuka_pc090oj_intf)
MDRV_TC0100SCN_ADD("tc0100scn", cadash_tc0100scn_intf)
MDRV_TC0110PCR_ADD("tc0110pcr", asuka_tc0110pcr_intf)
/* sound hardware */
MDRV_SPEAKER_STANDARD_MONO("mono")
@ -972,6 +1017,9 @@ static MACHINE_DRIVER_START( galmedes )
MDRV_CPU_ADD("audiocpu", Z80, 4000000) /* 4 MHz ??? */
MDRV_CPU_PROGRAM_MAP(cadash_z80_map)
MDRV_MACHINE_START(asuka)
MDRV_MACHINE_RESET(asuka)
MDRV_QUANTUM_TIME(HZ(600))
MDRV_TC0220IOC_ADD("tc0220ioc", asuka_io_intf)
@ -986,13 +1034,13 @@ static MACHINE_DRIVER_START( galmedes )
MDRV_GFXDECODE(asuka)
MDRV_PALETTE_LENGTH(4096) /* only Mofflott uses full palette space */
MDRV_MACHINE_START(asuka)
MDRV_MACHINE_RESET(asuka)
MDRV_VIDEO_START(galmedes)
MDRV_VIDEO_EOF(asuka)
MDRV_VIDEO_UPDATE(asuka)
MDRV_PC090OJ_ADD("pc090oj", asuka_pc090oj_intf)
MDRV_TC0100SCN_ADD("tc0100scn", cadash_tc0100scn_intf)
MDRV_TC0110PCR_ADD("tc0110pcr", asuka_tc0110pcr_intf)
/* sound hardware */
MDRV_SPEAKER_STANDARD_MONO("mono")
@ -1012,6 +1060,9 @@ static MACHINE_DRIVER_START( eto )
MDRV_CPU_ADD("audiocpu", Z80, 4000000) /* 4 MHz ??? */
MDRV_CPU_PROGRAM_MAP(cadash_z80_map)
MDRV_MACHINE_START(asuka)
MDRV_MACHINE_RESET(asuka)
MDRV_QUANTUM_TIME(HZ(600))
MDRV_TC0220IOC_ADD("tc0220ioc", asuka_io_intf)
@ -1026,13 +1077,13 @@ static MACHINE_DRIVER_START( eto )
MDRV_GFXDECODE(asuka)
MDRV_PALETTE_LENGTH(4096)
MDRV_MACHINE_START(asuka)
MDRV_MACHINE_RESET(asuka)
MDRV_VIDEO_START(galmedes)
MDRV_VIDEO_EOF(asuka)
MDRV_VIDEO_UPDATE(asuka)
MDRV_PC090OJ_ADD("pc090oj", asuka_pc090oj_intf)
MDRV_TC0100SCN_ADD("tc0100scn", cadash_tc0100scn_intf)
MDRV_TC0110PCR_ADD("tc0110pcr", asuka_tc0110pcr_intf)
/* sound hardware */
MDRV_SPEAKER_STANDARD_MONO("mono")

View File

@ -314,7 +314,7 @@ rumbling on a subwoofer in the cabinet.)
#include "cpu/z80/z80.h"
#include "includes/taitoipt.h"
#include "cpu/m68000/m68000.h"
#include "video/taitoic.h"
#include "video/taiicdev.h"
#include "machine/taitoio.h"
#include "audio/taitosnd.h"
#include "sound/2610intf.h"
@ -401,6 +401,17 @@ static WRITE8_HANDLER( ninjaw_pancontrol )
}
WRITE16_HANDLER( tc0100scn_triple_screen_w )
{
const device_config *tc0100scn_1 = devtag_get_device(space->machine, "tc0100scn_1");
const device_config *tc0100scn_2 = devtag_get_device(space->machine, "tc0100scn_2");
const device_config *tc0100scn_3 = devtag_get_device(space->machine, "tc0100scn_3");
tc0100scn_word_w(tc0100scn_1, offset, data, mem_mask);
tc0100scn_word_w(tc0100scn_2, offset, data, mem_mask);
tc0100scn_word_w(tc0100scn_3, offset, data, mem_mask);
}
/***********************************************************
MEMORY STRUCTURES
***********************************************************/
@ -414,15 +425,15 @@ static ADDRESS_MAP_START( ninjaw_master_map, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x220000, 0x220003) AM_READWRITE(ninjaw_sound_r,ninjaw_sound_w)
AM_RANGE(0x240000, 0x24ffff) AM_RAM AM_SHARE("share1")
AM_RANGE(0x260000, 0x263fff) AM_RAM AM_SHARE("share2") AM_BASE_SIZE_GENERIC(spriteram)
AM_RANGE(0x280000, 0x293fff) AM_READWRITE(TC0100SCN_word_0_r,TC0100SCN_triple_screen_w) /* tilemaps (1st screen/all screens) */
AM_RANGE(0x2a0000, 0x2a000f) AM_READWRITE(TC0100SCN_ctrl_word_0_r,TC0100SCN_ctrl_word_0_w)
AM_RANGE(0x2c0000, 0x2d3fff) AM_READWRITE(TC0100SCN_word_1_r,TC0100SCN_word_1_w) /* tilemaps (2nd screen) */
AM_RANGE(0x2e0000, 0x2e000f) AM_READWRITE(TC0100SCN_ctrl_word_1_r,TC0100SCN_ctrl_word_1_w)
AM_RANGE(0x300000, 0x313fff) AM_READWRITE(TC0100SCN_word_2_r,TC0100SCN_word_2_w) /* tilemaps (3rd screen) */
AM_RANGE(0x320000, 0x32000f) AM_READWRITE(TC0100SCN_ctrl_word_2_r,TC0100SCN_ctrl_word_2_w)
AM_RANGE(0x340000, 0x340007) AM_READWRITE(TC0110PCR_word_r,TC0110PCR_step1_word_w) /* palette (1st screen) */
AM_RANGE(0x350000, 0x350007) AM_READWRITE(TC0110PCR_word_1_r,TC0110PCR_step1_word_1_w) /* palette (2nd screen) */
AM_RANGE(0x360000, 0x360007) AM_READWRITE(TC0110PCR_word_2_r,TC0110PCR_step1_word_2_w) /* palette (3rd screen) */
AM_RANGE(0x280000, 0x293fff) AM_DEVREAD("tc0100scn_1", tc0100scn_word_r) AM_WRITE(tc0100scn_triple_screen_w) /* tilemaps (1st screen/all screens) */
AM_RANGE(0x2a0000, 0x2a000f) AM_DEVREADWRITE("tc0100scn_1", tc0100scn_ctrl_word_r, tc0100scn_ctrl_word_w)
AM_RANGE(0x2c0000, 0x2d3fff) AM_DEVREADWRITE("tc0100scn_2", tc0100scn_word_r, tc0100scn_word_w) /* tilemaps (2nd screen) */
AM_RANGE(0x2e0000, 0x2e000f) AM_DEVREADWRITE("tc0100scn_2", tc0100scn_ctrl_word_r, tc0100scn_ctrl_word_w)
AM_RANGE(0x300000, 0x313fff) AM_DEVREADWRITE("tc0100scn_3", tc0100scn_word_r, tc0100scn_word_w) /* tilemaps (3rd screen) */
AM_RANGE(0x320000, 0x32000f) AM_DEVREADWRITE("tc0100scn_3", tc0100scn_ctrl_word_r, tc0100scn_ctrl_word_w)
AM_RANGE(0x340000, 0x340007) AM_DEVREADWRITE("tc0110pcr_1", tc0110pcr_word_r, tc0110pcr_step1_word_w) /* palette (1st screen) */
AM_RANGE(0x350000, 0x350007) AM_DEVREADWRITE("tc0110pcr_2", tc0110pcr_word_r, tc0110pcr_step1_word_w) /* palette (2nd screen) */
AM_RANGE(0x360000, 0x360007) AM_DEVREADWRITE("tc0110pcr_3", tc0110pcr_word_r, tc0110pcr_step1_word_w) /* palette (3rd screen) */
ADDRESS_MAP_END
// NB there could be conflicts between which cpu writes what to the
@ -435,10 +446,10 @@ static ADDRESS_MAP_START( ninjaw_slave_map, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x200002, 0x200003) AM_DEVREADWRITE8("tc0220ioc", tc0220ioc_port_r, tc0220ioc_port_w, 0x00ff)
AM_RANGE(0x240000, 0x24ffff) AM_RAM AM_SHARE("share1")
AM_RANGE(0x260000, 0x263fff) AM_RAM AM_SHARE("share2")
AM_RANGE(0x280000, 0x293fff) AM_READWRITE(TC0100SCN_word_0_r,TC0100SCN_triple_screen_w) /* tilemaps (1st screen/all screens) */
AM_RANGE(0x340000, 0x340007) AM_READWRITE(TC0110PCR_word_r,TC0110PCR_step1_word_w) /* palette (1st screen) */
AM_RANGE(0x350000, 0x350007) AM_READWRITE(TC0110PCR_word_1_r,TC0110PCR_step1_word_1_w) /* palette (2nd screen) */
AM_RANGE(0x360000, 0x360007) AM_READWRITE(TC0110PCR_word_2_r,TC0110PCR_step1_word_2_w) /* palette (3rd screen) */
AM_RANGE(0x280000, 0x293fff) AM_DEVREAD("tc0100scn_1", tc0100scn_word_r) AM_WRITE(tc0100scn_triple_screen_w) /* tilemaps (1st screen/all screens) */
AM_RANGE(0x340000, 0x340007) AM_DEVREADWRITE("tc0110pcr_1", tc0110pcr_word_r, tc0110pcr_step1_word_w) /* palette (1st screen) */
AM_RANGE(0x350000, 0x350007) AM_DEVREADWRITE("tc0110pcr_2", tc0110pcr_word_r, tc0110pcr_step1_word_w) /* palette (2nd screen) */
AM_RANGE(0x360000, 0x360007) AM_DEVREADWRITE("tc0110pcr_3", tc0110pcr_word_r, tc0110pcr_step1_word_w) /* palette (3rd screen) */
ADDRESS_MAP_END
static ADDRESS_MAP_START( darius2_master_map, ADDRESS_SPACE_PROGRAM, 16 )
@ -450,15 +461,15 @@ static ADDRESS_MAP_START( darius2_master_map, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x220000, 0x220003) AM_READWRITE(ninjaw_sound_r,ninjaw_sound_w)
AM_RANGE(0x240000, 0x24ffff) AM_RAM AM_SHARE("share1")
AM_RANGE(0x260000, 0x263fff) AM_RAM AM_SHARE("share2") AM_BASE_SIZE_GENERIC(spriteram)
AM_RANGE(0x280000, 0x293fff) AM_READWRITE(TC0100SCN_word_0_r,TC0100SCN_triple_screen_w) /* tilemaps (1st screen/all screens) */
AM_RANGE(0x2a0000, 0x2a000f) AM_READWRITE(TC0100SCN_ctrl_word_0_r,TC0100SCN_ctrl_word_0_w)
AM_RANGE(0x2c0000, 0x2d3fff) AM_READWRITE(TC0100SCN_word_1_r,TC0100SCN_word_1_w) /* tilemaps (2nd screen) */
AM_RANGE(0x2e0000, 0x2e000f) AM_READWRITE(TC0100SCN_ctrl_word_1_r,TC0100SCN_ctrl_word_1_w)
AM_RANGE(0x300000, 0x313fff) AM_READWRITE(TC0100SCN_word_2_r,TC0100SCN_word_2_w) /* tilemaps (3rd screen) */
AM_RANGE(0x320000, 0x32000f) AM_READWRITE(TC0100SCN_ctrl_word_2_r,TC0100SCN_ctrl_word_2_w)
AM_RANGE(0x340000, 0x340007) AM_READWRITE(TC0110PCR_word_r,TC0110PCR_step1_word_w) /* palette (1st screen) */
AM_RANGE(0x350000, 0x350007) AM_READWRITE(TC0110PCR_word_1_r,TC0110PCR_step1_word_1_w) /* palette (2nd screen) */
AM_RANGE(0x360000, 0x360007) AM_READWRITE(TC0110PCR_word_2_r,TC0110PCR_step1_word_2_w) /* palette (3rd screen) */
AM_RANGE(0x280000, 0x293fff) AM_DEVREAD("tc0100scn_1", tc0100scn_word_r) AM_WRITE(tc0100scn_triple_screen_w) /* tilemaps (1st screen/all screens) */
AM_RANGE(0x2a0000, 0x2a000f) AM_DEVREADWRITE("tc0100scn_1", tc0100scn_ctrl_word_r, tc0100scn_ctrl_word_w)
AM_RANGE(0x2c0000, 0x2d3fff) AM_DEVREADWRITE("tc0100scn_2", tc0100scn_word_r, tc0100scn_word_w) /* tilemaps (2nd screen) */
AM_RANGE(0x2e0000, 0x2e000f) AM_DEVREADWRITE("tc0100scn_2", tc0100scn_ctrl_word_r, tc0100scn_ctrl_word_w)
AM_RANGE(0x300000, 0x313fff) AM_DEVREADWRITE("tc0100scn_3", tc0100scn_word_r, tc0100scn_word_w) /* tilemaps (3rd screen) */
AM_RANGE(0x320000, 0x32000f) AM_DEVREADWRITE("tc0100scn_3", tc0100scn_ctrl_word_r, tc0100scn_ctrl_word_w)
AM_RANGE(0x340000, 0x340007) AM_DEVREADWRITE("tc0110pcr_1", tc0110pcr_word_r, tc0110pcr_step1_word_w) /* palette (1st screen) */
AM_RANGE(0x350000, 0x350007) AM_DEVREADWRITE("tc0110pcr_2", tc0110pcr_word_r, tc0110pcr_step1_word_w) /* palette (2nd screen) */
AM_RANGE(0x360000, 0x360007) AM_DEVREADWRITE("tc0110pcr_3", tc0110pcr_word_r, tc0110pcr_step1_word_w) /* palette (3rd screen) */
ADDRESS_MAP_END
static ADDRESS_MAP_START( darius2_slave_map, ADDRESS_SPACE_PROGRAM, 16 )
@ -468,7 +479,7 @@ static ADDRESS_MAP_START( darius2_slave_map, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x200002, 0x200003) AM_DEVREADWRITE8("tc0220ioc", tc0220ioc_port_r, tc0220ioc_port_w, 0x00ff)
AM_RANGE(0x240000, 0x24ffff) AM_RAM AM_SHARE("share1")
AM_RANGE(0x260000, 0x263fff) AM_RAM AM_SHARE("share2")
AM_RANGE(0x280000, 0x293fff) AM_READWRITE(TC0100SCN_word_0_r,TC0100SCN_triple_screen_w) /* tilemaps (1st screen/all screens) */
AM_RANGE(0x280000, 0x293fff) AM_DEVREAD("tc0100scn_1", tc0100scn_word_r) AM_WRITE(tc0100scn_triple_screen_w) /* tilemaps (1st screen/all screens) */
ADDRESS_MAP_END
@ -682,6 +693,40 @@ to the scrolling background.
Darius2: arbitrary interleaving of 10 to keep cpus synced.
*************************************************************/
static const tc0100scn_interface darius2_tc0100scn_intf_l =
{
"lscreen",
1, 3, /* gfxnum, txnum */
22, 0, /* x_offset, y_offset */
0, 0, /* flip_xoff, flip_yoff */
0, 0, /* flip_text_xoff, flip_text_yoff */
0, 0
};
static const tc0100scn_interface darius2_tc0100scn_intf_m =
{
"mscreen",
2, 3, /* gfxnum, txnum */
22, 0, /* x_offset, y_offset */
0, 0, /* flip_xoff, flip_yoff */
0, 0, /* flip_text_xoff, flip_text_yoff */
2, 1
};
static const tc0100scn_interface darius2_tc0100scn_intf_r =
{
"rscreen",
2, 3, /* gfxnum, txnum */
22, 0, /* x_offset, y_offset */
0, 0, /* flip_xoff, flip_yoff */
0, 0, /* flip_text_xoff, flip_text_yoff */
4, 1
};
static const tc0110pcr_interface darius2_tc0110pcr_intf_l = { 0 /* pal_offs / 0x1000 */ };
static const tc0110pcr_interface darius2_tc0110pcr_intf_m = { 1 /* pal_offs / 0x1000 */ };
static const tc0110pcr_interface darius2_tc0110pcr_intf_r = { 2 /* pal_offs / 0x1000 */ };
static const tc0220ioc_interface ninjaw_io_intf =
{
DEVCB_INPUT_PORT("DSWA"), DEVCB_INPUT_PORT("DSWB"),
@ -738,6 +783,13 @@ static MACHINE_DRIVER_START( ninjaw )
MDRV_VIDEO_START(ninjaw)
MDRV_VIDEO_UPDATE(ninjaw)
MDRV_TC0100SCN_ADD("tc0100scn_1", darius2_tc0100scn_intf_l)
MDRV_TC0100SCN_ADD("tc0100scn_2", darius2_tc0100scn_intf_m)
MDRV_TC0100SCN_ADD("tc0100scn_3", darius2_tc0100scn_intf_r)
MDRV_TC0110PCR_ADD("tc0110pcr_1", darius2_tc0110pcr_intf_l)
MDRV_TC0110PCR_ADD("tc0110pcr_2", darius2_tc0110pcr_intf_m)
MDRV_TC0110PCR_ADD("tc0110pcr_3", darius2_tc0110pcr_intf_r)
/* sound hardware */
MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
@ -813,6 +865,13 @@ static MACHINE_DRIVER_START( darius2 )
MDRV_VIDEO_START(ninjaw)
MDRV_VIDEO_UPDATE(ninjaw)
MDRV_TC0100SCN_ADD("tc0100scn_1", darius2_tc0100scn_intf_l)
MDRV_TC0100SCN_ADD("tc0100scn_2", darius2_tc0100scn_intf_m)
MDRV_TC0100SCN_ADD("tc0100scn_3", darius2_tc0100scn_intf_r)
MDRV_TC0110PCR_ADD("tc0110pcr_1", darius2_tc0110pcr_intf_l)
MDRV_TC0110PCR_ADD("tc0110pcr_2", darius2_tc0110pcr_intf_m)
MDRV_TC0110PCR_ADD("tc0110pcr_3", darius2_tc0110pcr_intf_r)
/* sound hardware */
MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")

View File

@ -235,7 +235,7 @@ TODO:
#include "includes/taitoipt.h"
#include "cpu/m68000/m68000.h"
#include "machine/eeprom.h"
#include "video/taitoic.h"
#include "video/taiicdev.h"
#include "machine/taitoio.h"
#include "audio/taitosnd.h"
#include "sound/2610intf.h"
@ -478,9 +478,9 @@ static ADDRESS_MAP_START( othunder_map, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x090000, 0x09000f) AM_READWRITE(othunder_tc0220ioc_r, othunder_tc0220ioc_w)
// AM_RANGE(0x090006, 0x090007) AM_WRITE(eeprom_w)
// AM_RANGE(0x09000c, 0x09000d) AM_WRITENOP /* ?? (keeps writing 0x77) */
AM_RANGE(0x100000, 0x100007) AM_READWRITE(TC0110PCR_word_r, TC0110PCR_step1_rbswap_word_w) /* palette */
AM_RANGE(0x200000, 0x20ffff) AM_READWRITE(TC0100SCN_word_0_r, TC0100SCN_word_0_w) /* tilemaps */
AM_RANGE(0x220000, 0x22000f) AM_READWRITE(TC0100SCN_ctrl_word_0_r, TC0100SCN_ctrl_word_0_w)
AM_RANGE(0x100000, 0x100007) AM_DEVREADWRITE("tc0110pcr", tc0110pcr_word_r, tc0110pcr_step1_rbswap_word_w) /* palette */
AM_RANGE(0x200000, 0x20ffff) AM_DEVREADWRITE("tc0100scn", tc0100scn_word_r, tc0100scn_word_w) /* tilemaps */
AM_RANGE(0x220000, 0x22000f) AM_DEVREADWRITE("tc0100scn", tc0100scn_ctrl_word_r, tc0100scn_ctrl_word_w)
AM_RANGE(0x300000, 0x300003) AM_READWRITE(othunder_sound_r, othunder_sound_w)
AM_RANGE(0x400000, 0x4005ff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram)
AM_RANGE(0x500000, 0x500007) AM_READWRITE(othunder_lightgun_r, othunder_lightgun_w)
@ -663,6 +663,21 @@ static const ym2610_interface ym2610_config =
MACHINE DRIVERS
***********************************************************/
static const tc0100scn_interface othunder_tc0100scn_intf =
{
"screen",
1, 2, /* gfxnum, txnum */
4, 0, /* x_offset, y_offset */
0, 0, /* flip_xoff, flip_yoff */
0, 0, /* flip_text_xoff, flip_text_yoff */
0, 0
};
static const tc0110pcr_interface othunder_tc0110pcr_intf =
{
0
};
static const tc0220ioc_interface othunder_io_intf =
{
DEVCB_INPUT_PORT("DSWA"), DEVCB_INPUT_PORT("DSWB"),
@ -701,6 +716,9 @@ static MACHINE_DRIVER_START( othunder )
MDRV_VIDEO_START(othunder)
MDRV_VIDEO_UPDATE(othunder)
MDRV_TC0100SCN_ADD("tc0100scn", othunder_tc0100scn_intf)
MDRV_TC0110PCR_ADD("tc0110pcr", othunder_tc0110pcr_intf)
/* sound hardware */
MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")

View File

@ -139,18 +139,16 @@ some kind of zoom table?
****************************************************************************/
#include "driver.h"
#include "cpu/z80/z80.h"
#include "cpu/m68000/m68000.h"
#include "includes/taitoipt.h"
#include "audio/taitosnd.h"
#include "machine/taitoio.h"
#include "video/taitoic.h"
#include "video/taiicdev.h"
#include "sound/2610intf.h"
/***************************************************************************
Variable
@ -159,9 +157,6 @@ some kind of zoom table?
static UINT16 *taitoh_68000_mainram;
VIDEO_START( syvalion );
VIDEO_START( recordbr );
VIDEO_START( dleague );
VIDEO_UPDATE( syvalion );
VIDEO_UPDATE( recordbr );
VIDEO_UPDATE( dleague );
@ -274,7 +269,7 @@ static ADDRESS_MAP_START( syvalion_map, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x200002, 0x200003) AM_DEVREADWRITE8("tc0220ioc", tc0220ioc_port_r, tc0220ioc_port_w, 0x00ff)
AM_RANGE(0x300000, 0x300001) AM_READNOP AM_WRITE8(taitosound_port_w, 0x00ff)
AM_RANGE(0x300002, 0x300003) AM_READWRITE8(taitosound_comm_r, taitosound_comm_w, 0x00ff)
AM_RANGE(0x400000, 0x420fff) AM_READWRITE(TC0080VCO_word_r, TC0080VCO_word_w)
AM_RANGE(0x400000, 0x420fff) AM_DEVREADWRITE("tc0080vco", tc0080vco_word_r, tc0080vco_word_w)
AM_RANGE(0x500800, 0x500fff) AM_RAM_WRITE(paletteram16_xBBBBBGGGGGRRRRR_word_w) AM_BASE_GENERIC(paletteram)
ADDRESS_MAP_END
@ -285,7 +280,7 @@ static ADDRESS_MAP_START( recordbr_map, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x200002, 0x200003) AM_DEVREADWRITE8("tc0220ioc", tc0220ioc_port_r, tc0220ioc_port_w, 0x00ff)
AM_RANGE(0x300000, 0x300001) AM_READNOP AM_WRITE8(taitosound_port_w, 0x00ff)
AM_RANGE(0x300002, 0x300003) AM_READWRITE8(taitosound_comm_r, taitosound_comm_w, 0x00ff)
AM_RANGE(0x400000, 0x420fff) AM_READWRITE(TC0080VCO_word_r, TC0080VCO_word_w)
AM_RANGE(0x400000, 0x420fff) AM_DEVREADWRITE("tc0080vco", tc0080vco_word_r, tc0080vco_word_w)
AM_RANGE(0x500800, 0x500fff) AM_RAM_WRITE(paletteram16_xBBBBBGGGGGRRRRR_word_w) AM_BASE_GENERIC(paletteram)
ADDRESS_MAP_END
@ -295,7 +290,7 @@ static ADDRESS_MAP_START( dleague_map, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x200000, 0x20000f) AM_DEVREADWRITE8("tc0220ioc", tc0220ioc_r, tc0220ioc_w, 0x00ff)
AM_RANGE(0x300000, 0x300001) AM_READNOP AM_WRITE8(taitosound_port_w, 0x00ff)
AM_RANGE(0x300002, 0x300003) AM_READWRITE8(taitosound_comm_r, taitosound_comm_w, 0x00ff)
AM_RANGE(0x400000, 0x420fff) AM_READWRITE(TC0080VCO_word_r, TC0080VCO_word_w)
AM_RANGE(0x400000, 0x420fff) AM_DEVREADWRITE("tc0080vco", tc0080vco_word_r, tc0080vco_word_w)
AM_RANGE(0x500800, 0x500fff) AM_RAM_WRITE(paletteram16_xBBBBBGGGGGRRRRR_word_w) AM_BASE_GENERIC(paletteram)
AM_RANGE(0x600000, 0x600001) AM_WRITENOP /* ?? writes zero once per frame */
ADDRESS_MAP_END
@ -546,6 +541,20 @@ static MACHINE_START( taitoh )
}
static const tc0080vco_interface syvalion_tc0080vco_intf =
{
0, 1, /* gfxnum, txnum */
1, 1, -2,
1
};
static const tc0080vco_interface recordbr_tc0080vco_intf =
{
0, 1, /* gfxnum, txnum */
1, 1, -2,
0
};
static const tc0220ioc_interface taitoh_io_intf =
{
DEVCB_INPUT_PORT("DSWA"), DEVCB_INPUT_PORT("DSWB"),
@ -580,9 +589,10 @@ static MACHINE_DRIVER_START( syvalion )
MDRV_GFXDECODE(syvalion)
MDRV_PALETTE_LENGTH(33*16)
MDRV_VIDEO_START(syvalion)
MDRV_VIDEO_UPDATE(syvalion)
MDRV_TC0080VCO_ADD("tc0080vco", syvalion_tc0080vco_intf)
/* sound hardware */
MDRV_SPEAKER_STANDARD_MONO("mono")
@ -622,9 +632,10 @@ static MACHINE_DRIVER_START( recordbr )
MDRV_GFXDECODE(recordbr)
MDRV_PALETTE_LENGTH(32*16)
MDRV_VIDEO_START(recordbr)
MDRV_VIDEO_UPDATE(recordbr)
MDRV_TC0080VCO_ADD("tc0080vco", recordbr_tc0080vco_intf)
/* sound hardware */
MDRV_SPEAKER_STANDARD_MONO("mono")
@ -664,9 +675,10 @@ static MACHINE_DRIVER_START( dleague )
MDRV_GFXDECODE(dleague)
MDRV_PALETTE_LENGTH(33*16)
MDRV_VIDEO_START(dleague)
MDRV_VIDEO_UPDATE(dleague)
MDRV_TC0080VCO_ADD("tc0080vco", recordbr_tc0080vco_intf)
/* sound hardware */
MDRV_SPEAKER_STANDARD_MONO("mono")

View File

@ -32,12 +32,11 @@ TODO:
#include "deprecat.h"
#include "cpu/z80/z80.h"
#include "cpu/m68000/m68000.h"
#include "video/taitoic.h"
#include "video/taiicdev.h"
#include "sound/2203intf.h"
static const int clear_hack=1;
VIDEO_START( parentj );
VIDEO_UPDATE( parentj );
static WRITE16_HANDLER(io_w)
@ -67,7 +66,7 @@ static ADDRESS_MAP_START( parentj_map, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x100000, 0x10ffff) AM_MIRROR(0x010000) AM_RAM
AM_RANGE(0x200000, 0x20000f) AM_READWRITE(io_r, io_w) /* TC0220IOC ? */
AM_RANGE(0x300000, 0x300003) AM_DEVREADWRITE8("ymsnd", ym2203_r, ym2203_w, 0x00ff)
AM_RANGE(0x400000, 0x420fff) AM_READWRITE(TC0080VCO_word_r, TC0080VCO_word_w)
AM_RANGE(0x400000, 0x420fff) AM_DEVREADWRITE("tc0080vco", tc0080vco_word_r, tc0080vco_word_w)
AM_RANGE(0x500800, 0x500fff) AM_RAM_WRITE(paletteram16_xBBBBBGGGGGRRRRR_word_w) AM_BASE_GENERIC(paletteram)
ADDRESS_MAP_END
@ -232,6 +231,13 @@ static const ym2203_interface ym2203_config =
NULL
};
static const tc0080vco_interface parentj_intf =
{
0, 1, /* gfxnum, txnum */
1, 1, -2,
0
};
static MACHINE_DRIVER_START( parentj )
@ -249,9 +255,10 @@ static MACHINE_DRIVER_START( parentj )
MDRV_GFXDECODE(parentj)
MDRV_PALETTE_LENGTH(33*16)
MDRV_VIDEO_START(parentj)
MDRV_VIDEO_UPDATE(parentj)
MDRV_TC0080VCO_ADD("tc0080vco", parentj_intf)
MDRV_SPEAKER_STANDARD_MONO("mono")
MDRV_SOUND_ADD("ymsnd", YM2203, 2000000) /*?? MHz */

View File

@ -220,7 +220,7 @@ cpu #2 (PC=0000060E): unmapped memory word read from 0000683A & FFFF
#include "cpu/m68000/m68000.h"
#include "includes/taitoipt.h"
#include "audio/taitosnd.h"
#include "video/taitoic.h"
#include "video/taiicdev.h"
#include "machine/taitoio.h"
#include "cpu/tms32025/tms32025.h"
#include "sound/2610intf.h"
@ -231,7 +231,6 @@ static UINT16 *taitoh_68000_mainram;
UINT16 *taitoair_line_ram;
static UINT16 *dsp_ram; /* Shared 68000/TMS32025 RAM */
VIDEO_START( taitoair );
VIDEO_UPDATE( taitoair );
@ -383,7 +382,7 @@ static ADDRESS_MAP_START( airsys_map, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x180000, 0x183fff) AM_RAM /* "gradiation ram (0)" */
AM_RANGE(0x184000, 0x187fff) AM_RAM /* "gradiation ram (1)" */
AM_RANGE(0x188000, 0x18bfff) AM_RAM_WRITE(airsys_paletteram16_w) AM_BASE_GENERIC(paletteram)
AM_RANGE(0x800000, 0x820fff) AM_READWRITE(TC0080VCO_word_r, TC0080VCO_word_w) /* tilemaps, sprites */
AM_RANGE(0x800000, 0x820fff) AM_DEVREADWRITE("tc0080vco", tc0080vco_word_r, tc0080vco_word_w) /* tilemaps, sprites */
AM_RANGE(0x908000, 0x90ffff) AM_RAM AM_BASE(&taitoair_line_ram) /* "line ram" */
AM_RANGE(0x910000, 0x91ffff) AM_RAM AM_BASE(&dsp_ram) /* "dsp common ram" (TMS320C25) */
AM_RANGE(0xa00000, 0xa00007) AM_READ(stick_input_r)
@ -596,6 +595,13 @@ static const ym2610_interface airsys_ym2610_interface =
MACHINE DRIVERS
************************************************************/
static const tc0080vco_interface airsys_tc0080vco_intf =
{
0, 1, /* gfxnum, txnum */
1, 1, -2,
0
};
static const tc0220ioc_interface airsys_io_intf =
{
DEVCB_INPUT_PORT("DSWA"), DEVCB_INPUT_PORT("DSWB"),
@ -634,9 +640,10 @@ static MACHINE_DRIVER_START( airsys )
MDRV_GFXDECODE(airsys)
MDRV_PALETTE_LENGTH(512*16)
MDRV_VIDEO_START(taitoair)
MDRV_VIDEO_UPDATE(taitoair)
MDRV_TC0080VCO_ADD("tc0080vco", airsys_tc0080vco_intf)
/* sound hardware */
MDRV_SPEAKER_STANDARD_MONO("mono")

View File

@ -148,7 +148,7 @@ Colscroll effects?
#include "includes/taitoipt.h"
#include "rendlay.h"
#include "cpu/m68000/m68000.h"
#include "video/taitoic.h"
#include "video/taiicdev.h"
#include "machine/taitoio.h"
#include "audio/taitosnd.h"
#include "sound/2610intf.h"
@ -157,7 +157,6 @@ Colscroll effects?
static MACHINE_START( warriorb );
static MACHINE_RESET( taito_dualscreen );
VIDEO_START( darius2d );
VIDEO_START( warriorb );
VIDEO_UPDATE( warriorb );
@ -210,6 +209,14 @@ static WRITE8_HANDLER( warriorb_pancontrol )
}
WRITE16_HANDLER( tc0100scn_dual_screen_w )
{
const device_config *tc0100scn_1 = devtag_get_device(space->machine, "tc0100scn_1");
const device_config *tc0100scn_2 = devtag_get_device(space->machine, "tc0100scn_2");
tc0100scn_word_w(tc0100scn_1, offset, data, mem_mask);
tc0100scn_word_w(tc0100scn_2, offset, data, mem_mask);
}
/***********************************************************
MEMORY STRUCTURES
@ -218,13 +225,13 @@ static WRITE8_HANDLER( warriorb_pancontrol )
static ADDRESS_MAP_START( darius2d_map, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x000000, 0x0fffff) AM_ROM
AM_RANGE(0x100000, 0x10ffff) AM_RAM /* main ram */
AM_RANGE(0x200000, 0x213fff) AM_READWRITE(TC0100SCN_word_0_r, TC0100SCN_dual_screen_w) /* tilemaps (all screens) */
AM_RANGE(0x200000, 0x213fff) AM_DEVREAD("tc0100scn_1", tc0100scn_word_r) AM_WRITE(tc0100scn_dual_screen_w) /* tilemaps (all screens) */
AM_RANGE(0x214000, 0x2141ff) AM_WRITENOP /* error in screen clearing code ? */
AM_RANGE(0x220000, 0x22000f) AM_READWRITE(TC0100SCN_ctrl_word_0_r, TC0100SCN_ctrl_word_0_w)
AM_RANGE(0x240000, 0x253fff) AM_READWRITE(TC0100SCN_word_1_r, TC0100SCN_word_1_w) /* tilemaps (2nd screen) */
AM_RANGE(0x260000, 0x26000f) AM_READWRITE(TC0100SCN_ctrl_word_1_r, TC0100SCN_ctrl_word_1_w)
AM_RANGE(0x400000, 0x400007) AM_READWRITE(TC0110PCR_word_r, TC0110PCR_step1_word_w) /* palette (1st screen) */
AM_RANGE(0x420000, 0x420007) AM_READWRITE(TC0110PCR_word_1_r, TC0110PCR_step1_word_1_w) /* palette (2nd screen) */
AM_RANGE(0x220000, 0x22000f) AM_DEVREADWRITE("tc0100scn_1", tc0100scn_ctrl_word_r, tc0100scn_ctrl_word_w)
AM_RANGE(0x240000, 0x253fff) AM_DEVREADWRITE("tc0100scn_2", tc0100scn_word_r, tc0100scn_word_w) /* tilemaps (2nd screen) */
AM_RANGE(0x260000, 0x26000f) AM_DEVREADWRITE("tc0100scn_2", tc0100scn_ctrl_word_r, tc0100scn_ctrl_word_w)
AM_RANGE(0x400000, 0x400007) AM_DEVREADWRITE("tc0110pcr_1", tc0110pcr_word_r, tc0110pcr_step1_word_w) /* palette (1st screen) */
AM_RANGE(0x420000, 0x420007) AM_DEVREADWRITE("tc0110pcr_2", tc0110pcr_word_r, tc0110pcr_step1_word_w) /* palette (2nd screen) */
AM_RANGE(0x600000, 0x6013ff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram)
AM_RANGE(0x800000, 0x80000f) AM_DEVREADWRITE8("tc0220ioc", tc0220ioc_r, tc0220ioc_w, 0x00ff)
// AM_RANGE(0x820000, 0x820001) AM_WRITENOP // ???
@ -234,12 +241,12 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( warriorb_map, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x000000, 0x1fffff) AM_ROM
AM_RANGE(0x200000, 0x213fff) AM_RAM
AM_RANGE(0x300000, 0x313fff) AM_READWRITE(TC0100SCN_word_0_r, TC0100SCN_dual_screen_w) /* tilemaps (all screens) */
AM_RANGE(0x320000, 0x32000f) AM_READWRITE(TC0100SCN_ctrl_word_0_r, TC0100SCN_ctrl_word_0_w)
AM_RANGE(0x340000, 0x353fff) AM_READWRITE(TC0100SCN_word_1_r, TC0100SCN_word_1_w) /* tilemaps (2nd screen) */
AM_RANGE(0x360000, 0x36000f) AM_READWRITE(TC0100SCN_ctrl_word_1_r, TC0100SCN_ctrl_word_1_w)
AM_RANGE(0x400000, 0x400007) AM_READWRITE(TC0110PCR_word_r, TC0110PCR_step1_word_w) /* palette (1st screen) */
AM_RANGE(0x420000, 0x420007) AM_READWRITE(TC0110PCR_word_1_r, TC0110PCR_step1_word_1_w) /* palette (2nd screen) */
AM_RANGE(0x300000, 0x313fff) AM_DEVREAD("tc0100scn_1", tc0100scn_word_r) AM_WRITE(tc0100scn_dual_screen_w) /* tilemaps (all screens) */
AM_RANGE(0x320000, 0x32000f) AM_DEVREADWRITE("tc0100scn_1", tc0100scn_ctrl_word_r, tc0100scn_ctrl_word_w)
AM_RANGE(0x340000, 0x353fff) AM_DEVREADWRITE("tc0100scn_2", tc0100scn_word_r, tc0100scn_word_w) /* tilemaps (2nd screen) */
AM_RANGE(0x360000, 0x36000f) AM_DEVREADWRITE("tc0100scn_2", tc0100scn_ctrl_word_r, tc0100scn_ctrl_word_w)
AM_RANGE(0x400000, 0x400007) AM_DEVREADWRITE("tc0110pcr_1", tc0110pcr_word_r, tc0110pcr_step1_word_w) /* palette (1st screen) */
AM_RANGE(0x420000, 0x420007) AM_DEVREADWRITE("tc0110pcr_2", tc0110pcr_word_r, tc0110pcr_step1_word_w) /* palette (2nd screen) */
AM_RANGE(0x600000, 0x6013ff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram)
AM_RANGE(0x800000, 0x80000f) AM_DEVREADWRITE("tc0510nio", tc0510nio_halfword_r, tc0510nio_halfword_w)
// AM_RANGE(0x820000, 0x820001) AM_WRITENOP // ? uses bits 0,2,3
@ -445,6 +452,57 @@ static DEVICE_GET_INFO( subwoofer )
MACHINE DRIVERS
***********************************************************/
static const tc0100scn_interface darius2d_tc0100scn_intf_l =
{
"lscreen",
1, 3, /* gfxnum, txnum */
4, 0, /* x_offset, y_offset */
0, 0, /* flip_xoff, flip_yoff */
0, 0, /* flip_text_xoff, flip_text_yoff */
0, 0
};
static const tc0100scn_interface darius2d_tc0100scn_intf_r =
{
"rscreen",
2, 3, /* gfxnum, txnum */
4, 0, /* x_offset, y_offset */
0, 0, /* flip_xoff, flip_yoff */
0, 0, /* flip_text_xoff, flip_text_yoff */
0, 1
};
static const tc0100scn_interface warriorb_tc0100scn_intf_l =
{
"lscreen",
1, 3, /* gfxnum, txnum */
4, 0, /* x_offset, y_offset */
0, 0, /* flip_xoff, flip_yoff */
0, 0, /* flip_text_xoff, flip_text_yoff */
0, 0
};
static const tc0100scn_interface warriorb_tc0100scn_intf_r =
{
"rscreen",
2, 3, /* gfxnum, txnum */
4, 0, /* x_offset, y_offset */
0, 0, /* flip_xoff, flip_yoff */
0, 0, /* flip_text_xoff, flip_text_yoff */
1, 1
};
static const tc0110pcr_interface darius2d_tc0110pcr_intf_l =
{
0
};
static const tc0110pcr_interface darius2d_tc0110pcr_intf_r =
{
1
};
static const tc0220ioc_interface darius2d_io_intf =
{
DEVCB_INPUT_PORT("DSWA"), DEVCB_INPUT_PORT("DSWB"),
@ -491,9 +549,14 @@ static MACHINE_DRIVER_START( darius2d )
MDRV_SCREEN_SIZE(40*8, 32*8)
MDRV_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 3*8, 32*8-1)
MDRV_VIDEO_START(darius2d)
MDRV_VIDEO_START(warriorb)
MDRV_VIDEO_UPDATE(warriorb)
MDRV_TC0100SCN_ADD("tc0100scn_1", darius2d_tc0100scn_intf_l)
MDRV_TC0100SCN_ADD("tc0100scn_2", darius2d_tc0100scn_intf_r)
MDRV_TC0110PCR_ADD("tc0110pcr_1", darius2d_tc0110pcr_intf_l)
MDRV_TC0110PCR_ADD("tc0110pcr_2", darius2d_tc0110pcr_intf_r)
/* sound hardware */
MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
@ -554,6 +617,11 @@ static MACHINE_DRIVER_START( warriorb )
MDRV_VIDEO_START(warriorb)
MDRV_VIDEO_UPDATE(warriorb)
MDRV_TC0100SCN_ADD("tc0100scn_1", warriorb_tc0100scn_intf_l)
MDRV_TC0100SCN_ADD("tc0100scn_2", warriorb_tc0100scn_intf_r)
MDRV_TC0110PCR_ADD("tc0110pcr_1", darius2d_tc0110pcr_intf_l)
MDRV_TC0110PCR_ADD("tc0110pcr_2", darius2d_tc0110pcr_intf_r)
/* sound hardware */
MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")

View File

@ -398,7 +398,7 @@ Stephh's notes (based on the game M68000 code and some tests) :
#include "includes/taitoipt.h"
#include "cpu/m68000/m68000.h"
#include "machine/taitoio.h"
#include "video/taitoic.h"
#include "video/taiicdev.h"
#include "audio/taitosnd.h"
#include "sound/2610intf.h"
@ -661,8 +661,8 @@ static ADDRESS_MAP_START( main_map, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x180000, 0x18000f) AM_DEVREADWRITE8("tc0220ioc", tc0220ioc_r, tc0220ioc_w, 0xff00)
AM_RANGE(0x1c0000, 0x1c0001) AM_WRITE(cpua_ctrl_w)
AM_RANGE(0x200000, 0x20000f) AM_READWRITE(wgp_adinput_r,wgp_adinput_w)
AM_RANGE(0x300000, 0x30ffff) AM_READWRITE(TC0100SCN_word_0_r,TC0100SCN_word_0_w) /* tilemaps */
AM_RANGE(0x320000, 0x32000f) AM_READWRITE(TC0100SCN_ctrl_word_0_r,TC0100SCN_ctrl_word_0_w)
AM_RANGE(0x300000, 0x30ffff) AM_DEVREADWRITE("tc0100scn", tc0100scn_word_r, tc0100scn_word_w) /* tilemaps */
AM_RANGE(0x320000, 0x32000f) AM_DEVREADWRITE("tc0100scn", tc0100scn_ctrl_word_r, tc0100scn_ctrl_word_w)
AM_RANGE(0x400000, 0x40bfff) AM_RAM AM_BASE(&wgp_spritemap) AM_SIZE(&wgp_spritemap_size) /* sprite tilemaps */
AM_RANGE(0x40c000, 0x40dfff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram) /* sprite ram */
AM_RANGE(0x40fff0, 0x40fff1) AM_WRITENOP /* ?? (writes 0x8000 and 0 alternately - Wgp2 just 0) */
@ -897,9 +897,7 @@ static const gfx_layout charlayout =
32*8 /* every sprite takes 32 consecutive bytes */
};
/* taitoic.c TC0100SCN routines expect scr stuff to be in second gfx
slot */
/* taitoic.c TC0100SCN routines expect scr stuff to be in second gfx slot */
static GFXDECODE_START( wgp )
GFXDECODE_ENTRY( "gfx3", 0x0, wgp_tilelayout, 0, 256 ) /* sprites */
GFXDECODE_ENTRY( "gfx1", 0x0, charlayout, 0, 256 ) /* sprites & playfield */
@ -951,6 +949,26 @@ static MACHINE_START( wgp )
state_save_register_postload(machine, wgp_postload, NULL);
}
static const tc0100scn_interface wgp_tc0100scn_intf =
{
"screen",
1, 3, /* gfxnum, txnum */
0, 0, /* x_offset, y_offset */
0, 0, /* flip_xoff, flip_yoff */
0, 0, /* flip_text_xoff, flip_text_yoff */
0, 0
};
static const tc0100scn_interface wgp2_tc0100scn_intf =
{
"screen",
1, 3, /* gfxnum, txnum */
4, 2, /* x_offset, y_offset */
0, 0, /* flip_xoff, flip_yoff */
0, 0, /* flip_text_xoff, flip_text_yoff */
0, 0
};
static const tc0220ioc_interface wgp_io_intf =
{
DEVCB_INPUT_PORT("DSWA"), DEVCB_INPUT_PORT("DSWB"),
@ -992,6 +1010,8 @@ static MACHINE_DRIVER_START( wgp )
MDRV_VIDEO_START(wgp)
MDRV_VIDEO_UPDATE(wgp)
MDRV_TC0100SCN_ADD("tc0100scn", wgp_tc0100scn_intf)
/* sound hardware */
MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
@ -1010,6 +1030,9 @@ static MACHINE_DRIVER_START( wgp2 )
MDRV_QUANTUM_TIME(HZ(12000))
/* video hardware */
MDRV_VIDEO_START(wgp2)
MDRV_DEVICE_REMOVE("tc0100scn")
MDRV_TC0100SCN_ADD("tc0100scn", wgp2_tc0100scn_intf)
MACHINE_DRIVER_END

View File

@ -1,32 +1,5 @@
#include "driver.h"
#include "video/taitoic.h"
#define TC0100SCN_GFX_NUM 1
/**********************************************************/
static void asuka_core_video_start(running_machine *machine, int x_offs,int buffering)
{
PC090OJ_vh_start(machine,0,0,8,buffering); /* gfxset, x offset, y offset, buffering */
TC0100SCN_vh_start(machine,1,TC0100SCN_GFX_NUM,x_offs,0,0,0,0,0,0);
TC0110PCR_vh_start(machine);
}
VIDEO_START( asuka )
{
asuka_core_video_start(machine, 0,0);
}
VIDEO_START( galmedes )
{
asuka_core_video_start(machine, 1,0);
}
VIDEO_START( cadash )
{
asuka_core_video_start(machine, 1,1);
}
#include "video/taiicdev.h"
/**************************************************************
SPRITE READ AND WRITE HANDLERS
@ -34,8 +7,10 @@ VIDEO_START( cadash )
WRITE16_HANDLER( asuka_spritectrl_w )
{
const device_config *pc090oj = devtag_get_device(space->machine, "pc090oj");
/* Bits 2-5 are color bank; in asuka games bit 0 is global priority */
PC090OJ_sprite_ctrl = ((data & 0x3c) >> 2) | ((data & 0x1) << 15);
pc090oj_set_sprite_ctrl(pc090oj, ((data & 0x3c) >> 2) | ((data & 0x1) << 15));
}
@ -45,11 +20,13 @@ WRITE16_HANDLER( asuka_spritectrl_w )
VIDEO_UPDATE( asuka )
{
const device_config *tc0100scn = devtag_get_device(screen->machine, "tc0100scn");
const device_config *pc090oj = devtag_get_device(screen->machine, "pc090oj");
UINT8 layer[3];
TC0100SCN_tilemap_update(screen->machine);
tc0100scn_tilemap_update(tc0100scn);
layer[0] = TC0100SCN_bottomlayer(0);
layer[0] = tc0100scn_bottomlayer(tc0100scn);
layer[1] = layer[0]^1;
layer[2] = 2;
@ -58,23 +35,25 @@ VIDEO_UPDATE( asuka )
/* Ensure screen blanked even when bottom layer not drawn due to disable bit */
bitmap_fill(bitmap, cliprect, 0);
TC0100SCN_tilemap_draw(screen->machine,bitmap,cliprect,0,layer[0],TILEMAP_DRAW_OPAQUE,1);
TC0100SCN_tilemap_draw(screen->machine,bitmap,cliprect,0,layer[1],0,2);
TC0100SCN_tilemap_draw(screen->machine,bitmap,cliprect,0,layer[2],0,4);
tc0100scn_tilemap_draw(tc0100scn, bitmap, cliprect, layer[0], TILEMAP_DRAW_OPAQUE, 1);
tc0100scn_tilemap_draw(tc0100scn, bitmap, cliprect, layer[1], 0, 2);
tc0100scn_tilemap_draw(tc0100scn, bitmap, cliprect, layer[2], 0, 4);
/* Sprites may be over or under top bg layer */
PC090OJ_draw_sprites(screen->machine,bitmap,cliprect,2);
pc090oj_draw_sprites(pc090oj, bitmap, cliprect, 2);
return 0;
}
VIDEO_UPDATE( bonzeadv )
{
const device_config *tc0100scn = devtag_get_device(screen->machine, "tc0100scn");
const device_config *pc090oj = devtag_get_device(screen->machine, "pc090oj");
UINT8 layer[3];
TC0100SCN_tilemap_update(screen->machine);
tc0100scn_tilemap_update(tc0100scn);
layer[0] = TC0100SCN_bottomlayer(0);
layer[0] = tc0100scn_bottomlayer(tc0100scn);
layer[1] = layer[0] ^ 1;
layer[2] = 2;
@ -83,11 +62,11 @@ VIDEO_UPDATE( bonzeadv )
/* Ensure screen blanked even when bottom layer not drawn due to disable bit */
bitmap_fill(bitmap, cliprect, 0);
TC0100SCN_tilemap_draw(screen->machine,bitmap,cliprect,0,layer[0],TILEMAP_DRAW_OPAQUE,1);
TC0100SCN_tilemap_draw(screen->machine,bitmap,cliprect,0,layer[1],0,2);
TC0100SCN_tilemap_draw(screen->machine,bitmap,cliprect,0,layer[2],0,4);
tc0100scn_tilemap_draw(tc0100scn, bitmap, cliprect, layer[0], TILEMAP_DRAW_OPAQUE, 1);
tc0100scn_tilemap_draw(tc0100scn, bitmap, cliprect, layer[1], 0, 2);
tc0100scn_tilemap_draw(tc0100scn, bitmap, cliprect, layer[2], 0, 4);
/* Sprites are always over both bg layers */
PC090OJ_draw_sprites(screen->machine,bitmap,cliprect,0);
pc090oj_draw_sprites(pc090oj, bitmap, cliprect, 0);
return 0;
}

View File

@ -1,7 +1,5 @@
#include "driver.h"
#include "video/taitoic.h"
#define TC0100SCN_GFX_NUM 1
#include "video/taiicdev.h"
struct tempsprite
{
@ -14,43 +12,17 @@ struct tempsprite
};
static struct tempsprite *spritelist;
static int taito_hide_pixels;
/**********************************************************/
static VIDEO_START( ninjaw_core )
VIDEO_START( ninjaw )
{
int chips;
int mask;
const device_config *tc0100scn = devtag_get_device(machine, "tc0100scn_1");
spritelist = auto_alloc_array(machine, struct tempsprite, 0x1000);
chips = TC0100SCN_count(machine);
assert_always(chips > 0, "we have an erroneous TC0100SCN configuration");
TC0100SCN_vh_start(machine,chips,TC0100SCN_GFX_NUM,taito_hide_pixels,0,0,0,0,0,2);
mask = TC0110PCR_mask(machine);
if (mask & 1)
TC0110PCR_vh_start(machine);
if (mask & 2)
TC0110PCR_1_vh_start(machine);
if (mask & 4)
TC0110PCR_2_vh_start(machine);
/* Ensure palette from correct TC0110PCR used for each screen */
TC0100SCN_set_chip_colbanks(0x0,0x100,0x200);
}
VIDEO_START( ninjaw )
{
taito_hide_pixels = 22;
VIDEO_START_CALL(ninjaw_core);
tc0100scn_set_colbanks(tc0100scn, 0x0, 0x100, 0x200);
}
/************************************************************
@ -149,51 +121,53 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap,const rectan
VIDEO_UPDATE( ninjaw )
{
int xoffs = 0, screen_number = -1;
int xoffs = 0;
UINT8 layer[3], nodraw;
const device_config *left_screen = devtag_get_device(screen->machine, "lscreen");
const device_config *middle_screen = devtag_get_device(screen->machine, "mscreen");
const device_config *right_screen = devtag_get_device(screen->machine, "rscreen");
const device_config *tc0100scn = NULL;
if (screen == left_screen)
{
xoffs = 36 * 8 * 0;
screen_number = 0;
tc0100scn = devtag_get_device(screen->machine, "tc0100scn_1");
}
else if (screen == middle_screen)
{
xoffs = 36 * 8 * 1;
screen_number = 1;
tc0100scn = devtag_get_device(screen->machine, "tc0100scn_2");
}
else if (screen == right_screen)
{
xoffs = 36 * 8 * 2;
screen_number = 2;
tc0100scn = devtag_get_device(screen->machine, "tc0100scn_3");
}
TC0100SCN_tilemap_update(screen->machine);
tc0100scn_tilemap_update(tc0100scn);
layer[0] = TC0100SCN_bottomlayer(0);
layer[0] = tc0100scn_bottomlayer(tc0100scn);
layer[1] = layer[0] ^ 1;
layer[2] = 2;
/* chip 0 does tilemaps on the left, chip 1 center, chip 2 the right */
// draw bottom layer
nodraw = TC0100SCN_tilemap_draw(screen->machine,bitmap,cliprect,screen_number,layer[0],TILEMAP_DRAW_OPAQUE,0); /* left */
nodraw = tc0100scn_tilemap_draw(tc0100scn, bitmap, cliprect, layer[0], TILEMAP_DRAW_OPAQUE, 0); /* left */
/* Ensure screen blanked even when bottom layers not drawn due to disable bit */
if (nodraw) bitmap_fill(bitmap, cliprect, get_black_pen(screen->machine));
if (nodraw)
bitmap_fill(bitmap, cliprect, get_black_pen(screen->machine));
/* Sprites can be under/over the layer below text layer */
draw_sprites(screen->machine, bitmap, cliprect, 1, xoffs, 8); // draw sprites with priority 1 which are under the mid layer
// draw middle layer
TC0100SCN_tilemap_draw(screen->machine,bitmap,cliprect,screen_number,layer[1],0,0);
tc0100scn_tilemap_draw(tc0100scn, bitmap, cliprect, layer[1], 0, 0);
draw_sprites(screen->machine,bitmap,cliprect,0,xoffs,8); // draw sprites with priority 0 which are over the mid layer
// draw top(text) layer
TC0100SCN_tilemap_draw(screen->machine,bitmap,cliprect,screen_number,layer[2],0,0);
tc0100scn_tilemap_draw(tc0100scn, bitmap, cliprect, layer[2], 0, 0);
return 0;
}

View File

@ -1,7 +1,5 @@
#include "driver.h"
#include "video/taitoic.h"
#define TC0100SCN_GFX_NUM 1
#include "video/taiicdev.h"
struct tempsprite
{
@ -23,13 +21,7 @@ VIDEO_START( othunder )
/* Up to $800/8 big sprites, requires 0x100 * sizeof(*spritelist)
Multiply this by 32 to give room for the number of small sprites,
which are what actually get put in the structure. */
spritelist = auto_alloc_array(machine, struct tempsprite, 0x2000);
TC0100SCN_vh_start(machine,1,TC0100SCN_GFX_NUM,4,0,0,0,0,0,0);
if (TC0110PCR_mask(machine) & 1)
TC0110PCR_vh_start(machine);
}
@ -220,11 +212,12 @@ logerror("Sprite number %04x had %02x invalid chunks\n",tilenum,bad_chunks);
VIDEO_UPDATE( othunder )
{
const device_config *tc0100scn = devtag_get_device(screen->machine, "tc0100scn");
int layer[3];
TC0100SCN_tilemap_update(screen->machine);
tc0100scn_tilemap_update(tc0100scn);
layer[0] = TC0100SCN_bottomlayer(0);
layer[0] = tc0100scn_bottomlayer(tc0100scn);
layer[1] = layer[0] ^ 1;
layer[2] = 2;
@ -233,9 +226,9 @@ VIDEO_UPDATE( othunder )
/* Ensure screen blanked even when bottom layer not drawn due to disable bit */
bitmap_fill(bitmap, cliprect, 0);
TC0100SCN_tilemap_draw(screen->machine,bitmap,cliprect,0,layer[0],TILEMAP_DRAW_OPAQUE,1);
TC0100SCN_tilemap_draw(screen->machine,bitmap,cliprect,0,layer[1],0,2);
TC0100SCN_tilemap_draw(screen->machine,bitmap,cliprect,0,layer[2],0,4);
tc0100scn_tilemap_draw(tc0100scn, bitmap, cliprect, layer[0], TILEMAP_DRAW_OPAQUE, 1);
tc0100scn_tilemap_draw(tc0100scn, bitmap, cliprect, layer[1], 0, 2);
tc0100scn_tilemap_draw(tc0100scn, bitmap, cliprect, layer[2], 0, 4);
/* Sprites can be under/over the layer below text layer */
{

View File

@ -1800,7 +1800,8 @@ void tc0080vco_tilemap_draw( const device_config *device, bitmap_t *bitmap, cons
}
}
/* FIXME: these could replace the external uses of RAM regions... completely untested! */
/* FIXME: maybe it would be better to provide pointers to these RAM regions
which can be accessed directly by the drivers... */
READ16_DEVICE_HANDLER( tc0080vco_cram_0_r )
{
tc0080vco_state *tc0080vco = tc0080vco_get_safe_token(device);
@ -1831,36 +1832,6 @@ READ_LINE_DEVICE_HANDLER( tc0080vco_flipscreen_r )
return tc0080vco->flipscreen;
}
WRITE16_DEVICE_HANDLER( tc0080vco_cram_0_w )
{
tc0080vco_state *tc0080vco = tc0080vco_get_safe_token(device);
COMBINE_DATA(&tc0080vco->chain_ram_0[offset]);
}
WRITE16_DEVICE_HANDLER( tc0080vco_cram_1_w )
{
tc0080vco_state *tc0080vco = tc0080vco_get_safe_token(device);
COMBINE_DATA(&tc0080vco->chain_ram_1[offset]);
}
WRITE16_DEVICE_HANDLER( tc0080vco_sprram_w )
{
tc0080vco_state *tc0080vco = tc0080vco_get_safe_token(device);
COMBINE_DATA(&tc0080vco->spriteram[offset]);
}
WRITE16_DEVICE_HANDLER( tc0080vco_scrram_w )
{
tc0080vco_state *tc0080vco = tc0080vco_get_safe_token(device);
COMBINE_DATA(&tc0080vco->scroll_ram[offset]);
}
WRITE_LINE_DEVICE_HANDLER( tc0080vco_flipscreen_w )
{
tc0080vco_state *tc0080vco = tc0080vco_get_safe_token(device);
tc0080vco->flipscreen = state;
}
static STATE_POSTLOAD( tc0080vco_postload )
{
@ -1912,9 +1883,6 @@ static DEVICE_START( tc0080vco )
/* Perform extra initialisations for text layer */
tc0080vco->tilemap[2] = tilemap_create_device(device, tc0080vco_get_tx_tile_info, tilemap_scan_rows, 8, 8, 64, 64);
/* create the char set (gfx will then be updated dynamically from RAM) */
device->machine->gfx[tc0080vco->tx_gfx] = gfx_element_alloc(device->machine, &tc0080vco_charlayout, (UINT8 *)tc0080vco->char_ram, 64, 0);
tilemap_set_scrolldx(tc0080vco->tilemap[2], 0, 0);
tilemap_set_scrolldy(tc0080vco->tilemap[2], 48, -448);
@ -1938,6 +1906,9 @@ static DEVICE_START( tc0080vco )
tc0080vco->spriteram = tc0080vco->ram + 0x20400 / 2;
tc0080vco->scroll_ram = tc0080vco->ram + 0x20800 / 2;
/* create the char set (gfx will then be updated dynamically from RAM) */
device->machine->gfx[tc0080vco->tx_gfx] = gfx_element_alloc(device->machine, &tc0080vco_charlayout, (UINT8 *)tc0080vco->char_ram, 64, 0);
state_save_register_device_item_pointer(device, 0, tc0080vco->ram, TC0080VCO_RAM_SIZE / 2);
state_save_register_postload(device->machine, tc0080vco_postload, tc0080vco);
}
@ -2220,21 +2191,6 @@ WRITE16_DEVICE_HANDLER( tc0100scn_word_w )
}
}
#if 0 // these must be moved to the drivers
WRITE16_DEVICE_HANDLER( TC0100SCN_dual_screen_w )
{
TC0100SCN_word_0_w(space,offset,data,mem_mask);
TC0100SCN_word_1_w(space,offset,data,mem_mask);
}
WRITE16_DEVICE_HANDLER( TC0100SCN_triple_screen_w )
{
TC0100SCN_word_0_w(space,offset,data,mem_mask);
TC0100SCN_word_1_w(space,offset,data,mem_mask);
TC0100SCN_word_2_w(space,offset,data,mem_mask);
}
#endif
READ16_DEVICE_HANDLER( tc0100scn_ctrl_word_r )
{
tc0100scn_state *tc0100scn = tc0100scn_get_safe_token(device);
@ -2468,14 +2424,17 @@ static DEVICE_START( tc0100scn )
tc0100scn->screen = devtag_get_device(device->machine, intf->screen);
/* Set up clipping for multi-TC0100SCN games. We assume
this code won't ever affect single screen games:
Thundfox is the only one of those with two chips, and
we're safe as it uses single width tilemaps. */
tc0100scn->cliprect = *video_screen_get_visible_area(tc0100scn->screen);
/* create the char set (gfx will then be updated dynamically from RAM) */
device->machine->gfx[intf->txnum] = gfx_element_alloc(device->machine, &tc0100scn_charlayout, (UINT8 *)tc0100scn->char_ram, 64, 0);
/* use the given gfx sets for bg/tx tiles*/
tc0100scn->bg_gfx = intf->gfxnum; /* 2nd/3rd chips will use the same gfx set */
tc0100scn->tx_gfx = intf->txnum;
tc0100scn->bg_gfx = intf->gfxnum; /* use the given gfx set for bg tiles; 2nd/3rd chips will use the same gfx set */
/* Single width versions */
tc0100scn->tilemap[0][0] = tilemap_create_device(device, tc0100scn_get_bg_tile_info, tilemap_scan_rows, 8, 8, 64, 64);
tc0100scn->tilemap[1][0] = tilemap_create_device(device, tc0100scn_get_fg_tile_info, tilemap_scan_rows, 8, 8, 64, 64);
@ -2486,13 +2445,6 @@ static DEVICE_START( tc0100scn )
tc0100scn->tilemap[1][1] = tilemap_create_device(device, tc0100scn_get_fg_tile_info, tilemap_scan_rows, 8, 8, 128, 64);
tc0100scn->tilemap[2][1] = tilemap_create_device(device, tc0100scn_get_tx_tile_info, tilemap_scan_rows, 8, 8, 128, 32);
/* Set up clipping for multi-TC0100SCN games. We assume
this code won't ever affect single screen games:
Thundfox is the only one of those with two chips, and
we're safe as it uses single width tilemaps. */
tc0100scn_set_layer_ptrs(tc0100scn);
tilemap_set_transparent_pen(tc0100scn->tilemap[0][0], 0);
tilemap_set_transparent_pen(tc0100scn->tilemap[1][0], 0);
tilemap_set_transparent_pen(tc0100scn->tilemap[2][0], 0);
@ -2505,9 +2457,8 @@ static DEVICE_START( tc0100scn )
7 bits higher and 2 pixels to the left than chip #1 because
that's how thundfox wants it. */
// FIXME: use intf->multiscrn_xoffs to deal screen 2 & 3!
xd = -intf->x_offset;
yd = 8 - intf->y_offset;
xd = (intf->multiscrn_hack == 0) ? (-intf->x_offset) : (-intf->x_offset - 2);
yd = (intf->multiscrn_hack == 0) ? (8 - intf->y_offset) : (1 - intf->y_offset);
tilemap_set_scrolldx(tc0100scn->tilemap[0][0], xd - 16, -intf->flip_xoffs - xd - 16);
tilemap_set_scrolldy(tc0100scn->tilemap[0][0], yd, -intf->flip_yoffs - yd);
@ -2521,7 +2472,8 @@ static DEVICE_START( tc0100scn )
display not from the edges of individual screens.
NB flipscreen tilemap offsets are based on Cameltry */
// FIXME: use intf->multiscrn_xoffs to deal screen 2 & 3!
xd = -intf->x_offset - intf->multiscrn_xoffs;
yd = 8 - intf->y_offset;
tilemap_set_scrolldx(tc0100scn->tilemap[0][1], xd - 16, -intf->flip_xoffs - xd - 16);
tilemap_set_scrolldy(tc0100scn->tilemap[0][1], yd, -intf->flip_yoffs - yd);
@ -2546,11 +2498,18 @@ static DEVICE_START( tc0100scn )
if (device->machine->gfx[intf->gfxnum]->color_granularity == 0x40) /* Undrfire */
tc0100scn->tx_col_mult = 4;
//logerror("TC0100SCN bg gfx granularity %04x: multiplier %04x\n",
//device->machine->gfx[intf->gfxnum]->color_granularity,TC0100SCN_tx_col_mult);
//logerror("TC0100SCN bg gfx granularity %04x: multiplier %04x\n", device->machine->gfx[intf->gfxnum]->color_granularity, tc0100scn->tx_col_mult);
tc0100scn->ram = auto_alloc_array_clear(device->machine, UINT16, TC0100SCN_RAM_SIZE / 2);
tc0100scn_set_layer_ptrs(tc0100scn);
tc0100scn_set_colbanks(device, 0, 0, 0); /* standard values, only Wgp & multiscreen games change them */
/* we call this here, so that they can be modified at VIDEO_START*/
/* create the char set (gfx will then be updated dynamically from RAM) */
device->machine->gfx[tc0100scn->tx_gfx] = gfx_element_alloc(device->machine, &tc0100scn_charlayout, (UINT8 *)tc0100scn->char_ram, 64, 0);
state_save_register_device_item_pointer(device, 0, tc0100scn->ram, TC0100SCN_RAM_SIZE / 2);
state_save_register_device_item_array(device, 0, tc0100scn->ctrl);
state_save_register_device_item(device, 0, tc0100scn->dblwidth);
@ -2567,7 +2526,6 @@ static DEVICE_RESET( tc0100scn )
tc0100scn->dblwidth = 0;
tc0100scn->colbank = 0;
tc0100scn->gfxbank = 0; /* Mjnquest uniquely banks tiles */
tc0100scn_set_colbanks(device, 0, 0, 0); /* standard values, only Wgp changes them */
for (i = 0; i < 8; i++)
tc0100scn->ctrl[i] = 0;

View File

@ -58,6 +58,7 @@ struct _tc0100scn_interface
int flip_text_xoffs, flip_text_yoffs;
int multiscrn_xoffs;
int multiscrn_hack;
};
@ -232,23 +233,9 @@ READ16_DEVICE_HANDLER( tc0080vco_cram_1_r );
READ16_DEVICE_HANDLER( tc0080vco_sprram_r );
READ16_DEVICE_HANDLER( tc0080vco_scrram_r );
READ_LINE_DEVICE_HANDLER( tc0080vco_flipscreen_r );
WRITE16_DEVICE_HANDLER( tc0080vco_cram_0_w );
WRITE16_DEVICE_HANDLER( tc0080vco_cram_1_w );
WRITE16_DEVICE_HANDLER( tc0080vco_sprram_w );
WRITE16_DEVICE_HANDLER( tc0080vco_scrram_w );
WRITE_LINE_DEVICE_HANDLER( tc0080vco_flipscreen_w );
#if 0
extern UINT16 *TC0080VCO_chain_ram_0;
extern UINT16 *TC0080VCO_chain_ram_1;
extern UINT16 *TC0080VCO_spriteram;
extern UINT16 *TC0080VCO_scroll_ram;
extern int TC0080VCO_flipscreen;
#endif
/** TC0100SCN **/
#define TC0100SCN_SINGLE_VDU 1024
/* Function to set separate color banks for the three tilemapped layers.
@ -276,12 +263,6 @@ WRITE32_DEVICE_HANDLER( tc0100scn_long_w );
READ32_DEVICE_HANDLER( tc0100scn_ctrl_long_r );
WRITE32_DEVICE_HANDLER( tc0100scn_ctrl_long_w );
#if 0
/* Functions to write multiple TC0100SCNs with the same data */
WRITE16_DEVICE_HANDLER( TC0100SCN_dual_screen_w );
WRITE16_DEVICE_HANDLER( TC0100SCN_triple_screen_w );
#endif
void tc0100scn_tilemap_update(const device_config *device);
int tc0100scn_tilemap_draw(const device_config *device, bitmap_t *bitmap, const rectangle *cliprect, int layer, int flags, UINT32 priority);
@ -291,7 +272,6 @@ int tc0100scn_bottomlayer(const device_config *device);
/** TC0280GRD & TC0430GRW **/
READ16_DEVICE_HANDLER( tc0280grd_word_r );
WRITE16_DEVICE_HANDLER( tc0280grd_word_w );
WRITE16_DEVICE_HANDLER( tc0280grd_ctrl_word_w );
@ -306,7 +286,6 @@ void TC0430GRW_zoom_draw(const device_config *device, bitmap_t *bitmap, const re
/** TC0360PRI **/
WRITE8_DEVICE_HANDLER( tc0360pri_w );
READ8_DEVICE_HANDLER( tc0360pri_r );
@ -339,7 +318,6 @@ int tc0480scp_get_bg_priority(const device_config *device);
//extern int TC0480SCP_pri_reg;
/** TC0150ROD **/
READ16_DEVICE_HANDLER( tc0150rod_word_r );
WRITE16_DEVICE_HANDLER( tc0150rod_word_w );
@ -365,4 +343,3 @@ WRITE16_DEVICE_HANDLER( tc0180vcu_scroll_w );
READ16_DEVICE_HANDLER( tc0180vcu_word_r );
WRITE16_DEVICE_HANDLER( tc0180vcu_word_w );
void tc0180vcu_tilemap_draw(const device_config *device, bitmap_t *bitmap, const rectangle *cliprect, int tmap_num, int plane);

View File

@ -46,7 +46,7 @@ sprite RAM
***************************************************************************/
#include "driver.h"
#include "taitoic.h"
#include "taiicdev.h"
/* These are hand-tuned values */
@ -65,33 +65,13 @@ static const int zoomy_conv_table[] =
};
/***************************************************************************
Initialize and destroy video hardware emulation
***************************************************************************/
VIDEO_START( syvalion )
{
TC0080VCO_vh_start(machine,0,1,1,1,-2);
}
VIDEO_START( recordbr )
{
TC0080VCO_vh_start(machine,0,0,1,1,-2);
}
VIDEO_START( dleague )
{
TC0080VCO_vh_start(machine,0,0,1,1,-2);
}
/***************************************************************************
Screen refresh
***************************************************************************/
static void syvalion_draw_sprites( running_machine *machine,bitmap_t *bitmap,const rectangle *cliprect )
{
const device_config *tc0080vco = devtag_get_device(machine, "tc0080vco");
/* Y chain size is 16/32?/64/64? pixels. X chain size
is always 64 pixels. */
@ -105,11 +85,11 @@ static void syvalion_draw_sprites(running_machine *machine,bitmap_t *bitmap,cons
for (offs = 0x03f8 / 2; offs >= 0; offs -= 0x008 / 2)
{
x0 = TC0080VCO_spriteram[offs + 1] & 0x3ff;
y0 = TC0080VCO_spriteram[offs + 0] & 0x3ff;
zoomx = (TC0080VCO_spriteram[offs + 2] & 0x7f00) >> 8;
tile_offs = (TC0080VCO_spriteram[offs + 3] & 0x1fff) << 2;
ysize = size[ ( TC0080VCO_spriteram[ offs ] & 0x0c00 ) >> 10 ];
x0 = tc0080vco_sprram_r(tc0080vco, offs + 1, 0xffff) & 0x3ff;
y0 = tc0080vco_sprram_r(tc0080vco, offs + 0, 0xffff) & 0x3ff;
zoomx = (tc0080vco_sprram_r(tc0080vco, offs + 2, 0xffff) & 0x7f00) >> 8;
tile_offs = (tc0080vco_sprram_r(tc0080vco, offs + 3, 0xffff) & 0x1fff) << 2;
ysize = size[(tc0080vco_sprram_r(tc0080vco, offs, 0xffff) & 0x0c00) >> 10];
if (tile_offs)
{
@ -131,7 +111,7 @@ static void syvalion_draw_sprites(running_machine *machine,bitmap_t *bitmap,cons
if (x0 >= 0x200) x0 -= 0x400;
if (y0 >= 0x200) y0 -= 0x400;
if (TC0080VCO_flipscreen)
if (tc0080vco_flipscreen_r(tc0080vco))
{
x0 = 497 - x0;
y0 = 498 - y0;
@ -153,12 +133,12 @@ static void syvalion_draw_sprites(running_machine *machine,bitmap_t *bitmap,cons
{
int tile, color, flipx, flipy;
tile = TC0080VCO_chain_ram_0[tile_offs] & 0x7fff;
color = TC0080VCO_chain_ram_1[tile_offs] & 0x001f;
flipx = TC0080VCO_chain_ram_1[tile_offs] & 0x0040;
flipy = TC0080VCO_chain_ram_1[tile_offs] & 0x0080;
tile = tc0080vco_cram_0_r(tc0080vco, tile_offs, 0xffff) & 0x7fff;
color = tc0080vco_cram_1_r(tc0080vco, tile_offs, 0xffff) & 0x001f;
flipx = tc0080vco_cram_1_r(tc0080vco, tile_offs, 0xffff) & 0x0040;
flipy = tc0080vco_cram_1_r(tc0080vco, tile_offs, 0xffff) & 0x0080;
if (TC0080VCO_flipscreen)
if (tc0080vco_flipscreen_r(tc0080vco))
{
flipx ^= 0x0040;
flipy ^= 0x0080;
@ -184,6 +164,7 @@ static void syvalion_draw_sprites(running_machine *machine,bitmap_t *bitmap,cons
static void recordbr_draw_sprites(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect, int priority)
{
const device_config *tc0080vco = devtag_get_device(machine, "tc0080vco");
/* Y chain size is 16/32?/64/64? pixels. X chain size
is always 64 pixels. */
@ -200,12 +181,12 @@ static void recordbr_draw_sprites(running_machine *machine, bitmap_t *bitmap, co
if (offs < 0x01b0 && priority == 0) continue;
if (offs >= 0x01b0 && priority == 1) continue;
x0 = TC0080VCO_spriteram[offs + 1] & 0x3ff;
y0 = TC0080VCO_spriteram[offs + 0] & 0x3ff;
zoomx = (TC0080VCO_spriteram[offs + 2] & 0x7f00) >> 8;
zoomy = (TC0080VCO_spriteram[offs + 2] & 0x007f);
tile_offs = (TC0080VCO_spriteram[offs + 3] & 0x1fff) << 2;
ysize = size[ ( TC0080VCO_spriteram[ offs ] & 0x0c00 ) >> 10 ];
x0 = tc0080vco_sprram_r(tc0080vco, offs + 1, 0xffff) & 0x3ff;
y0 = tc0080vco_sprram_r(tc0080vco, offs + 0, 0xffff) & 0x3ff;
zoomx = (tc0080vco_sprram_r(tc0080vco, offs + 2, 0xffff) & 0x7f00) >> 8;
zoomy = (tc0080vco_sprram_r(tc0080vco, offs + 2, 0xffff) & 0x007f);
tile_offs = (tc0080vco_sprram_r(tc0080vco, offs + 3, 0xffff) & 0x1fff) << 2;
ysize = size[(tc0080vco_sprram_r(tc0080vco, offs, 0xffff) & 0x0c00) >> 10];
if (tile_offs)
{
@ -241,7 +222,7 @@ static void recordbr_draw_sprites(running_machine *machine, bitmap_t *bitmap, co
if (x0 >= 0x200) x0 -= 0x400;
if (y0 >= 0x200) y0 -= 0x400;
if (TC0080VCO_flipscreen)
if (tc0080vco_flipscreen_r(tc0080vco))
{
x0 = 497 - x0;
y0 = 498 - y0;
@ -264,12 +245,12 @@ static void recordbr_draw_sprites(running_machine *machine, bitmap_t *bitmap, co
{
int tile, color, flipx, flipy;
tile = TC0080VCO_chain_ram_0[tile_offs] & 0x7fff;
color = TC0080VCO_chain_ram_1[tile_offs] & 0x001f;
flipx = TC0080VCO_chain_ram_1[tile_offs] & 0x0040;
flipy = TC0080VCO_chain_ram_1[tile_offs] & 0x0080;
tile = tc0080vco_cram_0_r(tc0080vco, tile_offs, 0xffff) & 0x7fff;
color = tc0080vco_cram_1_r(tc0080vco, tile_offs, 0xffff) & 0x001f;
flipx = tc0080vco_cram_1_r(tc0080vco, tile_offs, 0xffff) & 0x0040;
flipy = tc0080vco_cram_1_r(tc0080vco, tile_offs, 0xffff) & 0x0080;
if (TC0080VCO_flipscreen)
if (tc0080vco_flipscreen_r(tc0080vco))
{
flipx ^= 0x0040;
flipy ^= 0x0080;
@ -295,6 +276,7 @@ static void recordbr_draw_sprites(running_machine *machine, bitmap_t *bitmap, co
static void dleague_draw_sprites(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect, int priority)
{
const device_config *tc0080vco = devtag_get_device(machine, "tc0080vco");
/* Y chain size is 16/32?/64/64? pixels. X chain size
is always 64 pixels. */
@ -309,12 +291,12 @@ static void dleague_draw_sprites(running_machine *machine, bitmap_t *bitmap, con
for (offs = 0x03f8 / 2 ; offs >= 0 ; offs -= 0x008 / 2)
{
x0 = TC0080VCO_spriteram[offs + 1] & 0x3ff;
y0 = TC0080VCO_spriteram[offs + 0] & 0x3ff;
zoomx = (TC0080VCO_spriteram[offs + 2] & 0x7f00) >> 8;
tile_offs = (TC0080VCO_spriteram[offs + 3] & 0x1fff) << 2;
pribit = (TC0080VCO_spriteram[offs + 0] & 0x1000) >> 12;
ysize = size[ ( TC0080VCO_spriteram[ offs ] & 0x0c00 ) >> 10 ];
x0 = tc0080vco_sprram_r(tc0080vco, offs + 1, 0xffff) & 0x3ff;
y0 = tc0080vco_sprram_r(tc0080vco, offs + 0, 0xffff) & 0x3ff;
zoomx = (tc0080vco_sprram_r(tc0080vco, offs + 2, 0xffff) & 0x7f00) >> 8;
tile_offs = (tc0080vco_sprram_r(tc0080vco, offs + 3, 0xffff) & 0x1fff) << 2;
pribit = (tc0080vco_sprram_r(tc0080vco, offs + 0, 0xffff) & 0x1000) >> 12;
ysize = size[(tc0080vco_sprram_r(tc0080vco, offs, 0xffff) & 0x0c00) >> 10];
if (tile_offs)
{
@ -334,13 +316,13 @@ static void dleague_draw_sprites(running_machine *machine, bitmap_t *bitmap, con
zx = (dx + ex) << 12;
}
if (TC0080VCO_scroll_ram[0x0002] & 0x8000)
if (tc0080vco_scrram_r(tc0080vco, 0x0002, 0xffff) & 0x8000)
pribit = 1;
if (x0 >= 0x200) x0 -= 0x400;
if (y0 >= 0x200) y0 -= 0x400;
if (TC0080VCO_flipscreen)
if (tc0080vco_flipscreen_r(tc0080vco))
{
x0 = 497 - x0;
y0 = 498 - y0;
@ -364,12 +346,13 @@ static void dleague_draw_sprites(running_machine *machine, bitmap_t *bitmap, con
{
int tile, color, flipx, flipy;
tile = TC0080VCO_chain_ram_0[tile_offs] & 0x7fff;
color = TC0080VCO_chain_ram_1[tile_offs] & 0x001f;
flipx = TC0080VCO_chain_ram_1[tile_offs] & 0x0040;
flipy = TC0080VCO_chain_ram_1[tile_offs] & 0x0080;
tile = tc0080vco_cram_0_r(tc0080vco, tile_offs, 0xffff) & 0x7fff;
color = tc0080vco_cram_1_r(tc0080vco, tile_offs, 0xffff) & 0x001f;
flipx = tc0080vco_cram_1_r(tc0080vco, tile_offs, 0xffff) & 0x0040;
flipy = tc0080vco_cram_1_r(tc0080vco, tile_offs, 0xffff) & 0x0080;
if (TC0080VCO_flipscreen)
if (tc0080vco_flipscreen_r(tc0080vco))
{
flipx ^= 0x0040;
flipy ^= 0x0080;
@ -409,23 +392,27 @@ static void taitoh_log_vram(running_machine *machine)
VIDEO_UPDATE( syvalion )
{
TC0080VCO_tilemap_update(screen->machine);
const device_config *tc0080vco = devtag_get_device(screen->machine, "tc0080vco");
tc0080vco_tilemap_update(tc0080vco);
taitoh_log_vram(screen->machine);
bitmap_fill(bitmap, cliprect, 0);
TC0080VCO_tilemap_draw(screen->machine,bitmap,cliprect,0,TILEMAP_DRAW_OPAQUE,0);
TC0080VCO_tilemap_draw(screen->machine,bitmap,cliprect,1,0,0);
tc0080vco_tilemap_draw(tc0080vco, bitmap, cliprect, 0, TILEMAP_DRAW_OPAQUE, 0);
tc0080vco_tilemap_draw(tc0080vco, bitmap, cliprect, 1, 0, 0);
syvalion_draw_sprites(screen->machine, bitmap,cliprect);
TC0080VCO_tilemap_draw(screen->machine,bitmap,cliprect,2,0,0);
tc0080vco_tilemap_draw(tc0080vco, bitmap, cliprect, 2, 0, 0);
return 0;
}
VIDEO_UPDATE( recordbr )
{
TC0080VCO_tilemap_update(screen->machine);
const device_config *tc0080vco = devtag_get_device(screen->machine, "tc0080vco");
tc0080vco_tilemap_update(tc0080vco);
taitoh_log_vram(screen->machine);
@ -433,28 +420,30 @@ VIDEO_UPDATE( recordbr )
#ifdef MAME_DEBUG
if ( !input_code_pressed(screen->machine, KEYCODE_A) )
TC0080VCO_tilemap_draw(screen->machine,bitmap,cliprect,0,TILEMAP_DRAW_OPAQUE,0);
tc0080vco_tilemap_draw(tc0080vco, bitmap, cliprect, 0, TILEMAP_DRAW_OPAQUE, 0);
if ( !input_code_pressed(screen->machine, KEYCODE_S) )
recordbr_draw_sprites(screen->machine, bitmap, cliprect, 0);
if ( !input_code_pressed(screen->machine, KEYCODE_D) )
TC0080VCO_tilemap_draw(screen->machine,bitmap,cliprect,1,0,0);
tc0080vco_tilemap_draw(tc0080vco, bitmap, cliprect, 1, 0, 0);
if ( !input_code_pressed(screen->machine, KEYCODE_F) )
recordbr_draw_sprites(screen->machine, bitmap, cliprect, 1);
#else
TC0080VCO_tilemap_draw(screen->machine,bitmap,cliprect,0,TILEMAP_DRAW_OPAQUE,0);
tc0080vco_tilemap_draw(tc0080vco, bitmap, cliprect, 0, TILEMAP_DRAW_OPAQUE, 0);
recordbr_draw_sprites(screen->machine, bitmap, cliprect, 0);
TC0080VCO_tilemap_draw(screen->machine,bitmap,cliprect,1,0,0);
tc0080vco_tilemap_draw(tc0080vco, bitmap, cliprect, 1, 0, 0);
recordbr_draw_sprites(screen->machine, bitmap, cliprect, 1);
#endif
TC0080VCO_tilemap_draw(screen->machine,bitmap,cliprect,2,0,0);
tc0080vco_tilemap_draw(tc0080vco, bitmap, cliprect, 2, 0, 0);
return 0;
}
VIDEO_UPDATE( dleague )
{
TC0080VCO_tilemap_update(screen->machine);
const device_config *tc0080vco = devtag_get_device(screen->machine, "tc0080vco");
tc0080vco_tilemap_update(tc0080vco);
taitoh_log_vram(screen->machine);
@ -462,21 +451,21 @@ VIDEO_UPDATE( dleague )
#ifdef MAME_DEBUG
if ( !input_code_pressed(screen->machine, KEYCODE_A) )
TC0080VCO_tilemap_draw(screen->machine,bitmap,cliprect,0,TILEMAP_DRAW_OPAQUE,0);
tc0080vco_tilemap_draw(tc0080vco, bitmap, cliprect, 0, TILEMAP_DRAW_OPAQUE, 0);
if ( !input_code_pressed(screen->machine, KEYCODE_S) )
dleague_draw_sprites(screen->machine, bitmap, cliprect, 0);
if ( !input_code_pressed(screen->machine, KEYCODE_D) )
TC0080VCO_tilemap_draw(screen->machine,bitmap,cliprect,1,0,0);
tc0080vco_tilemap_draw(tc0080vco, bitmap, cliprect, 1, 0, 0);
if ( !input_code_pressed(screen->machine, KEYCODE_F) )
dleague_draw_sprites(screen->machine, bitmap, cliprect, 1);
#else
TC0080VCO_tilemap_draw(screen->machine,bitmap,cliprect,0,TILEMAP_DRAW_OPAQUE,0);
tc0080vco_tilemap_draw(tc0080vco, bitmap, cliprect, 0, TILEMAP_DRAW_OPAQUE, 0);
dleague_draw_sprites (screen->machine, bitmap, cliprect, 0);
TC0080VCO_tilemap_draw(screen->machine,bitmap,cliprect,1,0,0);
tc0080vco_tilemap_draw(tc0080vco, bitmap, cliprect, 1, 0, 0);
dleague_draw_sprites (screen->machine, bitmap, cliprect, 1);
#endif
TC0080VCO_tilemap_draw(screen->machine,bitmap,cliprect,2,0,0);
tc0080vco_tilemap_draw(tc0080vco, bitmap, cliprect, 2, 0, 0);
return 0;
}

View File

@ -5,7 +5,7 @@ Based on taito_h.c
***************************************************************************/
#include "driver.h"
#include "taitoic.h"
#include "taiicdev.h"
/* These are hand-tuned values */
@ -23,14 +23,10 @@ static const int zoomy_conv_table[] =
0x67,0x68,0x6a,0x6b,0x6c,0x6e,0x6f,0x71, 0x72,0x74,0x76,0x78,0x80,0x7b,0x7d,0x7f
};
VIDEO_START( parentj )
{
TC0080VCO_vh_start(machine,0,0,1,1,-2);
}
static void parentj_draw_sprites(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect, int priority)
{
const device_config *tc0080vco = devtag_get_device(machine, "tc0080vco");
/* Y chain size is 16/32?/64/64? pixels. X chain size
is always 64 pixels. */
@ -47,12 +43,12 @@ static void parentj_draw_sprites(running_machine *machine, bitmap_t *bitmap, con
if (offs < 0x01b0 && priority == 0) continue;
if (offs >= 0x01b0 && priority == 1) continue;
x0 = TC0080VCO_spriteram[offs + 1] & 0x3ff;
y0 = TC0080VCO_spriteram[offs + 0] & 0x3ff;
zoomx = (TC0080VCO_spriteram[offs + 2] & 0x7f00) >> 8;
zoomy = (TC0080VCO_spriteram[offs + 2] & 0x007f);
tile_offs = (TC0080VCO_spriteram[offs + 3] & 0x1fff) << 2;
ysize = size[ ( TC0080VCO_spriteram[ offs ] & 0x0c00 ) >> 10 ];
x0 = tc0080vco_sprram_r(tc0080vco, offs + 1, 0xffff) & 0x3ff;
y0 = tc0080vco_sprram_r(tc0080vco, offs + 0, 0xffff) & 0x3ff;
zoomx = (tc0080vco_sprram_r(tc0080vco, offs + 2, 0xffff) & 0x7f00) >> 8;
zoomy = (tc0080vco_sprram_r(tc0080vco, offs + 2, 0xffff) & 0x007f);
tile_offs = (tc0080vco_sprram_r(tc0080vco, offs + 3, 0xffff) & 0x1fff) << 2;
ysize = size[(tc0080vco_sprram_r(tc0080vco, offs, 0xffff) & 0x0c00) >> 10];
if (tile_offs)
{
@ -88,7 +84,7 @@ static void parentj_draw_sprites(running_machine *machine, bitmap_t *bitmap, con
if (x0 >= 0x200) x0 -= 0x400;
if (y0 >= 0x200) y0 -= 0x400;
if (TC0080VCO_flipscreen)
if (tc0080vco_flipscreen_r(tc0080vco))
{
x0 = 497 - x0;
y0 = 498 - y0;
@ -111,12 +107,12 @@ static void parentj_draw_sprites(running_machine *machine, bitmap_t *bitmap, con
{
int tile, color, flipx, flipy;
tile = TC0080VCO_chain_ram_0[tile_offs] & 0x7fff;
color = TC0080VCO_chain_ram_1[tile_offs] & 0x001f;
flipx = TC0080VCO_chain_ram_1[tile_offs] & 0x0040;
flipy = TC0080VCO_chain_ram_1[tile_offs] & 0x0080;
tile = tc0080vco_cram_0_r(tc0080vco, tile_offs, 0xffff) & 0x7fff;
color = tc0080vco_cram_1_r(tc0080vco, tile_offs, 0xffff) & 0x001f;
flipx = tc0080vco_cram_1_r(tc0080vco, tile_offs, 0xffff) & 0x0040;
flipy = tc0080vco_cram_1_r(tc0080vco, tile_offs, 0xffff) & 0x0080;
if (TC0080VCO_flipscreen)
if (tc0080vco_flipscreen_r(tc0080vco))
{
flipx ^= 0x0040;
flipy ^= 0x0080;
@ -143,13 +139,14 @@ static void parentj_draw_sprites(running_machine *machine, bitmap_t *bitmap, con
VIDEO_UPDATE( parentj )
{
TC0080VCO_tilemap_update(screen->machine);
const device_config *tc0080vco = devtag_get_device(screen->machine, "tc0080vco");
tc0080vco_tilemap_update(tc0080vco);
bitmap_fill(bitmap, cliprect, 0);
TC0080VCO_tilemap_draw(screen->machine,bitmap,cliprect,0,TILEMAP_DRAW_OPAQUE,0);
tc0080vco_tilemap_draw(tc0080vco, bitmap, cliprect, 0, TILEMAP_DRAW_OPAQUE, 0);
parentj_draw_sprites(screen->machine, bitmap, cliprect, 0);
parentj_draw_sprites(screen->machine, bitmap, cliprect, 1);
TC0080VCO_tilemap_draw(screen->machine,bitmap,cliprect,1,0,0);
TC0080VCO_tilemap_draw(screen->machine,bitmap,cliprect,2,0,0);
tc0080vco_tilemap_draw(tc0080vco, bitmap, cliprect, 1, 0, 0);
tc0080vco_tilemap_draw(tc0080vco, bitmap, cliprect, 2, 0, 0);
return 0;
}

View File

@ -46,7 +46,7 @@ sprite RAM
***************************************************************************/
#include "driver.h"
#include "taitoic.h"
#include "taiicdev.h"
/* These are hand-tuned values */
@ -64,24 +64,13 @@ static const int zoomy_conv_table[] =
0x67,0x68,0x6a,0x6b,0x6c,0x6e,0x6f,0x71, 0x72,0x74,0x76,0x78,0x80,0x7b,0x7d,0x7f
};
/***************************************************************************
Initialize and destroy video hardware emulation
***************************************************************************/
VIDEO_START( taitoair )
{
TC0080VCO_vh_start(machine,0,0,1,1,-2);
}
/***************************************************************************
Screen refresh
***************************************************************************/
static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect, int priority)
{
const device_config *tc0080vco = devtag_get_device(machine, "tc0080vco");
/* Y chain size is 16/32?/64/64? pixels. X chain size
is always 64 pixels. */
@ -98,12 +87,12 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const recta
if (offs < 0x01b0 && priority == 0) continue;
if (offs >= 0x01b0 && priority == 1) continue;
x0 = TC0080VCO_spriteram[offs + 1] & 0x3ff;
y0 = TC0080VCO_spriteram[offs + 0] & 0x3ff;
zoomx = (TC0080VCO_spriteram[offs + 2] & 0x7f00) >> 8;
zoomy = (TC0080VCO_spriteram[offs + 2] & 0x007f);
tile_offs = (TC0080VCO_spriteram[offs + 3] & 0x1fff) << 2;
ysize = size[ ( TC0080VCO_spriteram[ offs ] & 0x0c00 ) >> 10 ];
x0 = tc0080vco_sprram_r(tc0080vco, offs + 1, 0xffff) & 0x3ff;
y0 = tc0080vco_sprram_r(tc0080vco, offs + 0, 0xffff) & 0x3ff;
zoomx = (tc0080vco_sprram_r(tc0080vco, offs + 2, 0xffff) & 0x7f00) >> 8;
zoomy = (tc0080vco_sprram_r(tc0080vco, offs + 2, 0xffff) & 0x007f);
tile_offs = (tc0080vco_sprram_r(tc0080vco, offs + 3, 0xffff) & 0x1fff) << 2;
ysize = size[(tc0080vco_sprram_r(tc0080vco, offs, 0xffff) & 0x0c00) >> 10];
if (tile_offs)
{
@ -139,7 +128,7 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const recta
if (x0 >= 0x200) x0 -= 0x400;
if (y0 >= 0x200) y0 -= 0x400;
if (TC0080VCO_flipscreen)
if (tc0080vco_flipscreen_r(tc0080vco))
{
x0 = 497 - x0;
y0 = 498 - y0;
@ -162,12 +151,12 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const recta
{
int tile, color, flipx, flipy;
tile = TC0080VCO_chain_ram_0[tile_offs] & 0x7fff;
color = TC0080VCO_chain_ram_1[tile_offs] & 0x001f;
flipx = TC0080VCO_chain_ram_1[tile_offs] & 0x0040;
flipy = TC0080VCO_chain_ram_1[tile_offs] & 0x0080;
tile = tc0080vco_cram_0_r(tc0080vco, tile_offs, 0xffff) & 0x7fff;
color = tc0080vco_cram_1_r(tc0080vco, tile_offs, 0xffff) & 0x001f;
flipx = tc0080vco_cram_1_r(tc0080vco, tile_offs, 0xffff) & 0x0040;
flipy = tc0080vco_cram_1_r(tc0080vco, tile_offs, 0xffff) & 0x0080;
if (TC0080VCO_flipscreen)
if (tc0080vco_flipscreen_r(tc0080vco))
{
flipx ^= 0x0040;
flipy ^= 0x0080;
@ -356,29 +345,32 @@ static void fill_poly(bitmap_t *bitmap, const struct poly *q)
VIDEO_UPDATE( taitoair )
{
TC0080VCO_tilemap_update(screen->machine);
const device_config *tc0080vco = devtag_get_device(screen->machine, "tc0080vco");
tc0080vco_tilemap_update(tc0080vco);
bitmap_fill(bitmap, cliprect, 0x41);
#ifdef MAME_DEBUG
if ( !input_code_pressed(screen->machine, KEYCODE_A) )
TC0080VCO_tilemap_draw(screen->machine,bitmap,cliprect,0,0,0);
tc0080vco_tilemap_draw(tc0080vco, bitmap, cliprect, 0, 0, 0);
if ( !input_code_pressed(screen->machine, KEYCODE_S) )
draw_sprites(screen->machine, bitmap, cliprect, 0);
if ( !input_code_pressed(screen->machine, KEYCODE_D) )
TC0080VCO_tilemap_draw(screen->machine,bitmap,cliprect,1,0,0);
tc0080vco_tilemap_draw(tc0080vco, bitmap, cliprect, 1, 0, 0);
if ( !input_code_pressed(screen->machine, KEYCODE_F) )
draw_sprites(screen->machine, bitmap, cliprect, 1);
#else
TC0080VCO_tilemap_draw(screen->machine,bitmap,cliprect,0,0,0);
tc0080vco_tilemap_draw(tc0080vco, bitmap, cliprect, 0, 0, 0);
draw_sprites(screen->machine, bitmap, cliprect, 0);
TC0080VCO_tilemap_draw(screen->machine,bitmap,cliprect,1,0,0);
tc0080vco_tilemap_draw(tc0080vco, bitmap, cliprect, 1, 0, 0);
draw_sprites(screen->machine, bitmap, cliprect, 1);
#endif
TC0080VCO_tilemap_draw(screen->machine,bitmap,cliprect,2,0,0);
tc0080vco_tilemap_draw(tc0080vco, bitmap, cliprect, 2, 0, 0);
if(taitoair_line_ram[0x3fff]) {
if (taitoair_line_ram[0x3fff])
{
int adr = 0x3fff;
struct poly q;
view.x1 = cliprect->min_x;
@ -386,16 +378,19 @@ VIDEO_UPDATE( taitoair )
view.x2 = cliprect->max_x;
view.y2 = cliprect->max_y;
while(adr>=0 && taitoair_line_ram[adr] && taitoair_line_ram[adr] != 0x4000) {
while(adr>=0 && taitoair_line_ram[adr] && taitoair_line_ram[adr] != 0x4000)
{
int pcount;
if(!(taitoair_line_ram[adr] & 0x8000) || adr<10) {
if(!(taitoair_line_ram[adr] & 0x8000) || adr < 10)
{
logerror("quad: unknown value %04x at %04x\n", taitoair_line_ram[adr], adr);
break;
}
q.col = (taitoair_line_ram[adr] & 0x7fff) + 0x300;
adr--;
pcount = 0;
while(pcount < POLY_MAX_PT && adr>=1 && !(taitoair_line_ram[adr] & 0xc000)) {
while(pcount < POLY_MAX_PT && adr>=1 && !(taitoair_line_ram[adr] & 0xc000))
{
q.p[pcount].y = taitoair_line_ram[adr]+3*16;
q.p[pcount].x = taitoair_line_ram[adr-1];
pcount++;

View File

@ -1,40 +1,14 @@
#include "driver.h"
#include "video/taitoic.h"
#define TC0100SCN_GFX_NUM 1
#include "video/taiicdev.h"
/**********************************************************/
static void warriorb_core_vh_start(running_machine *machine, int x_offs,int multiscrn_xoffs)
{
int chips;
int mask;
chips = TC0100SCN_count(machine);
assert_always(chips > 0, "erroneous TC0100SCN configuration");
TC0100SCN_vh_start(machine,chips,TC0100SCN_GFX_NUM,x_offs,0,0,0,0,0,multiscrn_xoffs);
mask = TC0110PCR_mask(machine);
if (mask & 1)
TC0110PCR_vh_start(machine);
if (mask & 2)
TC0110PCR_1_vh_start(machine);
/* Ensure palette from correct TC0110PCR used for each screen */
TC0100SCN_set_chip_colbanks(0,0x100,0x0);
}
VIDEO_START( darius2d )
{
warriorb_core_vh_start(machine, 4,0);
}
VIDEO_START( warriorb )
{
warriorb_core_vh_start(machine, 4,1);
const device_config *tc0100scn = devtag_get_device(machine, "tc0100scn_1");
/* Ensure palette from correct TC0110PCR used for each screen */
tc0100scn_set_colbanks(tc0100scn, 0x0, 0x100, 0x0);
}
@ -110,26 +84,27 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap,const rectan
VIDEO_UPDATE( warriorb )
{
int xoffs = 0, screen_number = -1;
int xoffs = 0;
UINT8 layer[3], nodraw;
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 *tc0100scn = NULL;
if (screen == left_screen)
{
xoffs = 40 * 8 * 0;
screen_number = 0;
tc0100scn = devtag_get_device(screen->machine, "tc0100scn_1");
}
else if (screen == right_screen)
{
xoffs = 40 * 8 * 1;
screen_number = 1;
tc0100scn = devtag_get_device(screen->machine, "tc0100scn_2");
}
TC0100SCN_tilemap_update(screen->machine);
tc0100scn_tilemap_update(tc0100scn);
layer[0] = TC0100SCN_bottomlayer(0);
layer[0] = tc0100scn_bottomlayer(tc0100scn);
layer[1] = layer[0] ^ 1;
layer[2] = 2;
@ -138,18 +113,19 @@ VIDEO_UPDATE( warriorb )
/* chip 0 does tilemaps on the left, chip 1 does the ones on the right */
// draw bottom layer
nodraw = TC0100SCN_tilemap_draw(screen->machine,bitmap,cliprect,screen_number,layer[0],TILEMAP_DRAW_OPAQUE,0); /* left */
nodraw = tc0100scn_tilemap_draw(tc0100scn, bitmap, cliprect, layer[0], TILEMAP_DRAW_OPAQUE, 0); /* left */
/* Ensure screen blanked even when bottom layers not drawn due to disable bit */
if(nodraw) bitmap_fill(bitmap, cliprect, get_black_pen(screen->machine));
if (nodraw)
bitmap_fill(bitmap, cliprect, get_black_pen(screen->machine));
// draw middle layer
TC0100SCN_tilemap_draw(screen->machine,bitmap,cliprect,screen_number,layer[1],0,1);
tc0100scn_tilemap_draw(tc0100scn, bitmap, cliprect, layer[1], 0, 1);
/* Sprites can be under/over the layer below text layer */
draw_sprites(screen->machine, bitmap, cliprect, xoffs, 8); // draw sprites
// draw top(text) layer
TC0100SCN_tilemap_draw(screen->machine,bitmap,cliprect,screen_number,layer[2],0,0);
tc0100scn_tilemap_draw(tc0100scn, bitmap, cliprect, layer[2], 0, 0);
return 0;
}

View File

@ -1,7 +1,5 @@
#include "driver.h"
#include "video/taitoic.h"
#define TC0100SCN_GFX_NUM 1
#include "video/taiicdev.h"
static tilemap_t *wgp_piv_tilemap[3];
@ -47,17 +45,14 @@ static TILE_GET_INFO( get_piv2_tile_info )
}
static void wgp_core_vh_start(running_machine *machine, int x_offs,int y_offs,int piv_xoffs,int piv_yoffs)
static void wgp_core_vh_start(running_machine *machine, int piv_xoffs, int piv_yoffs)
{
const device_config *tc0100scn = devtag_get_device(machine, "tc0100scn");
wgp_piv_tilemap[0] = tilemap_create(machine, get_piv0_tile_info, tilemap_scan_rows, 16, 16, 64, 64);
wgp_piv_tilemap[1] = tilemap_create(machine, get_piv1_tile_info, tilemap_scan_rows, 16, 16, 64, 64);
wgp_piv_tilemap[2] = tilemap_create(machine, get_piv2_tile_info, tilemap_scan_rows, 16, 16, 64, 64);
TC0100SCN_vh_start(machine,1,TC0100SCN_GFX_NUM,x_offs,y_offs,0,0,0,0,0);
if (TC0110PCR_mask(machine) & 1)
TC0110PCR_vh_start(machine);
wgp_piv_xoffs = piv_xoffs;
wgp_piv_yoffs = piv_yoffs;
@ -73,20 +68,18 @@ static void wgp_core_vh_start(running_machine *machine, int x_offs,int y_offs,in
tilemap_set_scrolldy(wgp_piv_tilemap[1], -piv_yoffs, 0);
tilemap_set_scrolldy(wgp_piv_tilemap[2], -piv_yoffs, 0);
/* We don't need tilemap_set_scroll_rows, as the custom draw routine
applies rowscroll manually */
TC0100SCN_set_colbanks(0x80,0xc0,0x40);
/* We don't need tilemap_set_scroll_rows, as the custom draw routine applies rowscroll manually */
tc0100scn_set_colbanks(tc0100scn, 0x80, 0xc0, 0x40);
}
VIDEO_START( wgp )
{
wgp_core_vh_start(machine, 0,0,32,16);
wgp_core_vh_start(machine, 32, 16);
}
VIDEO_START( wgp2 )
{
wgp_core_vh_start(machine, 4,2,32,16);
wgp_core_vh_start(machine, 32, 16);
}
@ -646,6 +639,7 @@ static void wgp_piv_layer_draw(running_machine *machine,bitmap_t *bitmap,const r
VIDEO_UPDATE( wgp )
{
const device_config *tc0100scn = devtag_get_device(screen->machine, "tc0100scn");
int i;
UINT8 layer[3];
@ -685,7 +679,7 @@ VIDEO_UPDATE( wgp )
tilemap_set_scrolly(wgp_piv_tilemap[i], 0, wgp_piv_scrolly[i]);
}
TC0100SCN_tilemap_update(screen->machine);
tc0100scn_tilemap_update(tc0100scn);
bitmap_fill(bitmap, cliprect, 0);
@ -718,20 +712,18 @@ VIDEO_UPDATE( wgp )
draw_sprites(screen->machine, bitmap, cliprect, 16);
/* ... then here we should apply rotation from wgp_sate_ctrl[] to
the bitmap before we draw the TC0100SCN layers on it */
layer[0] = TC0100SCN_bottomlayer(0);
/* ... then here we should apply rotation from wgp_sate_ctrl[] to the bitmap before we draw the TC0100SCN layers on it */
layer[0] = tc0100scn_bottomlayer(tc0100scn);
layer[1] = layer[0] ^ 1;
layer[2] = 2;
TC0100SCN_tilemap_draw(screen->machine,bitmap,cliprect,0,layer[0],0,0);
tc0100scn_tilemap_draw(tc0100scn, bitmap, cliprect, layer[0], 0, 0);
#ifdef MAME_DEBUG
if (dislayer[3] == 0)
#endif
TC0100SCN_tilemap_draw(screen->machine,bitmap,cliprect,0,layer[1],0,0);
TC0100SCN_tilemap_draw(screen->machine,bitmap,cliprect,0,layer[2],0,0);
tc0100scn_tilemap_draw(tc0100scn, bitmap, cliprect, layer[1], 0, 0);
tc0100scn_tilemap_draw(tc0100scn, bitmap, cliprect, layer[2], 0, 0);
#if 0
{