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/z80/z80.h"
#include "cpu/m68000/m68000.h" #include "cpu/m68000/m68000.h"
#include "includes/taitoipt.h" #include "includes/taitoipt.h"
#include "video/taitoic.h" #include "video/taiicdev.h"
#include "machine/taitoio.h" #include "machine/taitoio.h"
#include "audio/taitosnd.h" #include "audio/taitosnd.h"
#include "sound/2610intf.h" #include "sound/2610intf.h"
@ -226,9 +226,6 @@ DIP locations verified for:
WRITE16_HANDLER( asuka_spritectrl_w ); WRITE16_HANDLER( asuka_spritectrl_w );
VIDEO_START( asuka );
VIDEO_START( galmedes );
VIDEO_START( cadash );
VIDEO_UPDATE( asuka ); VIDEO_UPDATE( asuka );
VIDEO_UPDATE( bonzeadv ); 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(0x000000, 0x03ffff) AM_ROM
AM_RANGE(0x080000, 0x0fffff) AM_ROM AM_RANGE(0x080000, 0x0fffff) AM_ROM
AM_RANGE(0x10c000, 0x10ffff) AM_RAM 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(0x390000, 0x390001) AM_READ_PORT("DSWA")
AM_RANGE(0x3a0000, 0x3a0001) AM_WRITE(asuka_spritectrl_w) AM_RANGE(0x3a0000, 0x3a0001) AM_WRITE(asuka_spritectrl_w)
AM_RANGE(0x3b0000, 0x3b0001) AM_READ_PORT("DSWB") 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(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(0x800802, 0x800803) AM_READWRITE(bonzeadv_cchip_ctrl_r, bonzeadv_cchip_ctrl_w)
AM_RANGE(0x800c00, 0x800c01) AM_WRITE(bonzeadv_cchip_bank_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(0xc00000, 0xc0ffff) AM_DEVREADWRITE("tc0100scn", tc0100scn_word_r, tc0100scn_word_w) /* tilemaps */
AM_RANGE(0xc20000, 0xc2000f) AM_READWRITE(TC0100SCN_ctrl_word_0_r, TC0100SCN_ctrl_word_0_w) AM_RANGE(0xc20000, 0xc2000f) AM_DEVREADWRITE("tc0100scn", tc0100scn_ctrl_word_r, tc0100scn_ctrl_word_w)
AM_RANGE(0xd00000, 0xd03fff) AM_READWRITE(PC090OJ_word_0_r, PC090OJ_word_0_w) /* sprite ram */ AM_RANGE(0xd00000, 0xd03fff) AM_DEVREADWRITE("pc090oj", pc090oj_word_r, pc090oj_word_w) /* sprite ram */
ADDRESS_MAP_END ADDRESS_MAP_END
static ADDRESS_MAP_START( asuka_map, ADDRESS_SPACE_PROGRAM, 16 ) static ADDRESS_MAP_START( asuka_map, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x000000, 0x0fffff) AM_ROM AM_RANGE(0x000000, 0x0fffff) AM_ROM
AM_RANGE(0x100000, 0x103fff) AM_RAM AM_RANGE(0x100000, 0x103fff) AM_RAM
AM_RANGE(0x1076f0, 0x1076f1) AM_READNOP /* Mofflott init does dummy reads here */ 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(0x3a0000, 0x3a0003) AM_WRITE(asuka_spritectrl_w)
AM_RANGE(0x3e0000, 0x3e0001) AM_READNOP AM_WRITE8(taitosound_port_w, 0x00ff) 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(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(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(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(0xc20000, 0xc2000f) AM_DEVREADWRITE("tc0100scn", tc0100scn_ctrl_word_r, tc0100scn_ctrl_word_w)
AM_RANGE(0xd00000, 0xd03fff) AM_READWRITE(PC090OJ_word_0_r, PC090OJ_word_0_w) /* sprite ram */ AM_RANGE(0xd00000, 0xd03fff) AM_DEVREADWRITE("pc090oj", pc090oj_word_r, pc090oj_word_w) /* sprite ram */
ADDRESS_MAP_END ADDRESS_MAP_END
static ADDRESS_MAP_START( cadash_map, ADDRESS_SPACE_PROGRAM, 16 ) 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(0x100000, 0x107fff) AM_RAM
AM_RANGE(0x800000, 0x800fff) AM_RAM /* network ram */ AM_RANGE(0x800000, 0x800fff) AM_RAM /* network ram */
AM_RANGE(0x900000, 0x90000f) AM_DEVREADWRITE8("tc0220ioc", tc0220ioc_r, tc0220ioc_w, 0x00ff) 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(0xa00000, 0xa0000f) AM_DEVREADWRITE("tc0110pcr", 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(0xb00000, 0xb03fff) AM_DEVREADWRITE("pc090oj", pc090oj_word_r, pc090oj_word_w) /* sprite ram */
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(0xc20000, 0xc2000f) AM_READWRITE(TC0100SCN_ctrl_word_0_r, TC0100SCN_ctrl_word_0_w) AM_RANGE(0xc20000, 0xc2000f) AM_DEVREADWRITE("tc0100scn", tc0100scn_ctrl_word_r, tc0100scn_ctrl_word_w)
ADDRESS_MAP_END ADDRESS_MAP_END
static ADDRESS_MAP_START( eto_map, ADDRESS_SPACE_PROGRAM, 16 ) /* N.B. tc100scn mirror overlaps spriteram */ static ADDRESS_MAP_START( eto_map, ADDRESS_SPACE_PROGRAM, 16 ) /* N.B. tc100scn mirror overlaps spriteram */
AM_RANGE(0x000000, 0x0fffff) AM_ROM 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(0x200000, 0x203fff) AM_RAM
AM_RANGE(0x300000, 0x30000f) AM_DEVREADWRITE8("tc0220ioc", tc0220ioc_r, tc0220ioc_w, 0x00ff) 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(0x400000, 0x40000f) AM_DEVREAD8("tc0220ioc", tc0220ioc_r, 0x00ff) /* service mode mirror */
AM_RANGE(0x4a0000, 0x4a0003) AM_WRITE(asuka_spritectrl_w) AM_RANGE(0x4a0000, 0x4a0003) AM_WRITE(asuka_spritectrl_w)
AM_RANGE(0x4e0000, 0x4e0001) AM_READNOP AM_WRITE8(taitosound_port_w, 0x00ff) 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(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, 0xc03fff) AM_DEVREADWRITE("pc090oj", pc090oj_word_r, pc090oj_word_w) /* sprite ram */
AM_RANGE(0xc00000, 0xc0ffff) AM_WRITE(TC0100SCN_word_0_w) /* service mode mirror */ AM_RANGE(0xc00000, 0xc0ffff) AM_DEVWRITE("tc0100scn", tc0100scn_word_w)
AM_RANGE(0xd00000, 0xd0ffff) AM_READWRITE(TC0100SCN_word_0_r, TC0100SCN_word_0_w) /* tilemaps */ AM_RANGE(0xd00000, 0xd0ffff) AM_DEVREADWRITE("tc0100scn", tc0100scn_word_r, tc0100scn_word_w) /* tilemaps */
AM_RANGE(0xd20000, 0xd2000f) AM_READWRITE(TC0100SCN_ctrl_word_0_r, TC0100SCN_ctrl_word_0_w) AM_RANGE(0xd20000, 0xd2000f) AM_DEVREADWRITE("tc0100scn", tc0100scn_ctrl_word_r, tc0100scn_ctrl_word_w)
ADDRESS_MAP_END ADDRESS_MAP_END
@ -783,9 +780,45 @@ static const msm5205_interface msm5205_config =
MACHINE DRIVERS 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 ) 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 = 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_ADD("audiocpu", Z80,4000000) /* sound CPU, also required for test mode */
MDRV_CPU_PROGRAM_MAP(bonzeadv_z80_map) MDRV_CPU_PROGRAM_MAP(bonzeadv_z80_map)
MDRV_MACHINE_START(asuka)
MDRV_MACHINE_RESET(asuka)
MDRV_QUANTUM_TIME(HZ(600)) MDRV_QUANTUM_TIME(HZ(600))
/* video hardware */ /* video hardware */
@ -817,13 +853,13 @@ static MACHINE_DRIVER_START( bonzeadv )
MDRV_GFXDECODE(asuka) MDRV_GFXDECODE(asuka)
MDRV_PALETTE_LENGTH(4096) MDRV_PALETTE_LENGTH(4096)
MDRV_MACHINE_START(asuka)
MDRV_MACHINE_RESET(asuka)
MDRV_VIDEO_START(asuka)
MDRV_VIDEO_EOF(asuka) MDRV_VIDEO_EOF(asuka)
MDRV_VIDEO_UPDATE(bonzeadv) 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 */ /* sound hardware */
MDRV_SPEAKER_STANDARD_MONO("mono") 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_ADD("audiocpu", Z80, XTAL_16MHz/4) /* verified on pcb */
MDRV_CPU_PROGRAM_MAP(z80_map) MDRV_CPU_PROGRAM_MAP(z80_map)
MDRV_MACHINE_START(asuka)
MDRV_MACHINE_RESET(asuka)
MDRV_QUANTUM_TIME(HZ(600)) MDRV_QUANTUM_TIME(HZ(600))
MDRV_TC0220IOC_ADD("tc0220ioc", asuka_io_intf) MDRV_TC0220IOC_ADD("tc0220ioc", asuka_io_intf)
@ -858,13 +897,13 @@ static MACHINE_DRIVER_START( asuka )
MDRV_GFXDECODE(asuka) MDRV_GFXDECODE(asuka)
MDRV_PALETTE_LENGTH(4096) MDRV_PALETTE_LENGTH(4096)
MDRV_MACHINE_START(asuka)
MDRV_MACHINE_RESET(asuka)
MDRV_VIDEO_START(asuka)
MDRV_VIDEO_EOF(asuka) MDRV_VIDEO_EOF(asuka)
MDRV_VIDEO_UPDATE(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 */ /* sound hardware */
MDRV_SPEAKER_STANDARD_MONO("mono") 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_ADD("audiocpu", Z80, XTAL_8MHz/2) /* verified on pcb */
MDRV_CPU_PROGRAM_MAP(cadash_z80_map) MDRV_CPU_PROGRAM_MAP(cadash_z80_map)
MDRV_MACHINE_START(asuka)
MDRV_MACHINE_RESET(asuka)
MDRV_QUANTUM_TIME(HZ(600)) MDRV_QUANTUM_TIME(HZ(600))
MDRV_TC0220IOC_ADD("tc0220ioc", asuka_io_intf) MDRV_TC0220IOC_ADD("tc0220ioc", asuka_io_intf)
@ -902,13 +944,13 @@ static MACHINE_DRIVER_START( cadash )
MDRV_GFXDECODE(asuka) MDRV_GFXDECODE(asuka)
MDRV_PALETTE_LENGTH(4096) MDRV_PALETTE_LENGTH(4096)
MDRV_MACHINE_START(asuka)
MDRV_MACHINE_RESET(asuka)
MDRV_VIDEO_START(cadash)
MDRV_VIDEO_EOF(asuka) MDRV_VIDEO_EOF(asuka)
MDRV_VIDEO_UPDATE(bonzeadv) 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 */ /* sound hardware */
MDRV_SPEAKER_STANDARD_MONO("mono") MDRV_SPEAKER_STANDARD_MONO("mono")
@ -928,6 +970,9 @@ static MACHINE_DRIVER_START( mofflott )
MDRV_CPU_ADD("audiocpu", Z80, 4000000) /* 4 MHz ??? */ MDRV_CPU_ADD("audiocpu", Z80, 4000000) /* 4 MHz ??? */
MDRV_CPU_PROGRAM_MAP(z80_map) MDRV_CPU_PROGRAM_MAP(z80_map)
MDRV_MACHINE_START(asuka)
MDRV_MACHINE_RESET(asuka)
MDRV_QUANTUM_TIME(HZ(600)) MDRV_QUANTUM_TIME(HZ(600))
MDRV_TC0220IOC_ADD("tc0220ioc", asuka_io_intf) MDRV_TC0220IOC_ADD("tc0220ioc", asuka_io_intf)
@ -942,13 +987,13 @@ static MACHINE_DRIVER_START( mofflott )
MDRV_GFXDECODE(asuka) MDRV_GFXDECODE(asuka)
MDRV_PALETTE_LENGTH(4096) /* only Mofflott uses full palette space */ 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_EOF(asuka)
MDRV_VIDEO_UPDATE(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 */ /* sound hardware */
MDRV_SPEAKER_STANDARD_MONO("mono") MDRV_SPEAKER_STANDARD_MONO("mono")
@ -972,6 +1017,9 @@ static MACHINE_DRIVER_START( galmedes )
MDRV_CPU_ADD("audiocpu", Z80, 4000000) /* 4 MHz ??? */ MDRV_CPU_ADD("audiocpu", Z80, 4000000) /* 4 MHz ??? */
MDRV_CPU_PROGRAM_MAP(cadash_z80_map) MDRV_CPU_PROGRAM_MAP(cadash_z80_map)
MDRV_MACHINE_START(asuka)
MDRV_MACHINE_RESET(asuka)
MDRV_QUANTUM_TIME(HZ(600)) MDRV_QUANTUM_TIME(HZ(600))
MDRV_TC0220IOC_ADD("tc0220ioc", asuka_io_intf) MDRV_TC0220IOC_ADD("tc0220ioc", asuka_io_intf)
@ -986,13 +1034,13 @@ static MACHINE_DRIVER_START( galmedes )
MDRV_GFXDECODE(asuka) MDRV_GFXDECODE(asuka)
MDRV_PALETTE_LENGTH(4096) /* only Mofflott uses full palette space */ 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_EOF(asuka)
MDRV_VIDEO_UPDATE(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 */ /* sound hardware */
MDRV_SPEAKER_STANDARD_MONO("mono") MDRV_SPEAKER_STANDARD_MONO("mono")
@ -1012,6 +1060,9 @@ static MACHINE_DRIVER_START( eto )
MDRV_CPU_ADD("audiocpu", Z80, 4000000) /* 4 MHz ??? */ MDRV_CPU_ADD("audiocpu", Z80, 4000000) /* 4 MHz ??? */
MDRV_CPU_PROGRAM_MAP(cadash_z80_map) MDRV_CPU_PROGRAM_MAP(cadash_z80_map)
MDRV_MACHINE_START(asuka)
MDRV_MACHINE_RESET(asuka)
MDRV_QUANTUM_TIME(HZ(600)) MDRV_QUANTUM_TIME(HZ(600))
MDRV_TC0220IOC_ADD("tc0220ioc", asuka_io_intf) MDRV_TC0220IOC_ADD("tc0220ioc", asuka_io_intf)
@ -1026,13 +1077,13 @@ static MACHINE_DRIVER_START( eto )
MDRV_GFXDECODE(asuka) MDRV_GFXDECODE(asuka)
MDRV_PALETTE_LENGTH(4096) MDRV_PALETTE_LENGTH(4096)
MDRV_MACHINE_START(asuka)
MDRV_MACHINE_RESET(asuka)
MDRV_VIDEO_START(galmedes)
MDRV_VIDEO_EOF(asuka) MDRV_VIDEO_EOF(asuka)
MDRV_VIDEO_UPDATE(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 */ /* sound hardware */
MDRV_SPEAKER_STANDARD_MONO("mono") MDRV_SPEAKER_STANDARD_MONO("mono")

View File

@ -314,7 +314,7 @@ rumbling on a subwoofer in the cabinet.)
#include "cpu/z80/z80.h" #include "cpu/z80/z80.h"
#include "includes/taitoipt.h" #include "includes/taitoipt.h"
#include "cpu/m68000/m68000.h" #include "cpu/m68000/m68000.h"
#include "video/taitoic.h" #include "video/taiicdev.h"
#include "machine/taitoio.h" #include "machine/taitoio.h"
#include "audio/taitosnd.h" #include "audio/taitosnd.h"
#include "sound/2610intf.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 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(0x220000, 0x220003) AM_READWRITE(ninjaw_sound_r,ninjaw_sound_w)
AM_RANGE(0x240000, 0x24ffff) AM_RAM AM_SHARE("share1") 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(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(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_READWRITE(TC0100SCN_ctrl_word_0_r,TC0100SCN_ctrl_word_0_w) AM_RANGE(0x2a0000, 0x2a000f) AM_DEVREADWRITE("tc0100scn_1", tc0100scn_ctrl_word_r, tc0100scn_ctrl_word_w)
AM_RANGE(0x2c0000, 0x2d3fff) AM_READWRITE(TC0100SCN_word_1_r,TC0100SCN_word_1_w) /* tilemaps (2nd screen) */ AM_RANGE(0x2c0000, 0x2d3fff) AM_DEVREADWRITE("tc0100scn_2", tc0100scn_word_r, tc0100scn_word_w) /* tilemaps (2nd screen) */
AM_RANGE(0x2e0000, 0x2e000f) AM_READWRITE(TC0100SCN_ctrl_word_1_r,TC0100SCN_ctrl_word_1_w) AM_RANGE(0x2e0000, 0x2e000f) AM_DEVREADWRITE("tc0100scn_2", tc0100scn_ctrl_word_r, tc0100scn_ctrl_word_w)
AM_RANGE(0x300000, 0x313fff) AM_READWRITE(TC0100SCN_word_2_r,TC0100SCN_word_2_w) /* tilemaps (3rd screen) */ AM_RANGE(0x300000, 0x313fff) AM_DEVREADWRITE("tc0100scn_3", tc0100scn_word_r, tc0100scn_word_w) /* tilemaps (3rd screen) */
AM_RANGE(0x320000, 0x32000f) AM_READWRITE(TC0100SCN_ctrl_word_2_r,TC0100SCN_ctrl_word_2_w) AM_RANGE(0x320000, 0x32000f) AM_DEVREADWRITE("tc0100scn_3", tc0100scn_ctrl_word_r, tc0100scn_ctrl_word_w)
AM_RANGE(0x340000, 0x340007) AM_READWRITE(TC0110PCR_word_r,TC0110PCR_step1_word_w) /* palette (1st screen) */ AM_RANGE(0x340000, 0x340007) AM_DEVREADWRITE("tc0110pcr_1", 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(0x350000, 0x350007) AM_DEVREADWRITE("tc0110pcr_2", tc0110pcr_word_r, tc0110pcr_step1_word_w) /* palette (2nd screen) */
AM_RANGE(0x360000, 0x360007) AM_READWRITE(TC0110PCR_word_2_r,TC0110PCR_step1_word_2_w) /* palette (3rd screen) */ AM_RANGE(0x360000, 0x360007) AM_DEVREADWRITE("tc0110pcr_3", tc0110pcr_word_r, tc0110pcr_step1_word_w) /* palette (3rd screen) */
ADDRESS_MAP_END ADDRESS_MAP_END
// NB there could be conflicts between which cpu writes what to the // 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(0x200002, 0x200003) AM_DEVREADWRITE8("tc0220ioc", tc0220ioc_port_r, tc0220ioc_port_w, 0x00ff)
AM_RANGE(0x240000, 0x24ffff) AM_RAM AM_SHARE("share1") AM_RANGE(0x240000, 0x24ffff) AM_RAM AM_SHARE("share1")
AM_RANGE(0x260000, 0x263fff) AM_RAM AM_SHARE("share2") 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) */
AM_RANGE(0x340000, 0x340007) AM_READWRITE(TC0110PCR_word_r,TC0110PCR_step1_word_w) /* palette (1st screen) */ AM_RANGE(0x340000, 0x340007) AM_DEVREADWRITE("tc0110pcr_1", 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(0x350000, 0x350007) AM_DEVREADWRITE("tc0110pcr_2", tc0110pcr_word_r, tc0110pcr_step1_word_w) /* palette (2nd screen) */
AM_RANGE(0x360000, 0x360007) AM_READWRITE(TC0110PCR_word_2_r,TC0110PCR_step1_word_2_w) /* palette (3rd screen) */ AM_RANGE(0x360000, 0x360007) AM_DEVREADWRITE("tc0110pcr_3", tc0110pcr_word_r, tc0110pcr_step1_word_w) /* palette (3rd screen) */
ADDRESS_MAP_END ADDRESS_MAP_END
static ADDRESS_MAP_START( darius2_master_map, ADDRESS_SPACE_PROGRAM, 16 ) 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(0x220000, 0x220003) AM_READWRITE(ninjaw_sound_r,ninjaw_sound_w)
AM_RANGE(0x240000, 0x24ffff) AM_RAM AM_SHARE("share1") 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(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(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_READWRITE(TC0100SCN_ctrl_word_0_r,TC0100SCN_ctrl_word_0_w) AM_RANGE(0x2a0000, 0x2a000f) AM_DEVREADWRITE("tc0100scn_1", tc0100scn_ctrl_word_r, tc0100scn_ctrl_word_w)
AM_RANGE(0x2c0000, 0x2d3fff) AM_READWRITE(TC0100SCN_word_1_r,TC0100SCN_word_1_w) /* tilemaps (2nd screen) */ AM_RANGE(0x2c0000, 0x2d3fff) AM_DEVREADWRITE("tc0100scn_2", tc0100scn_word_r, tc0100scn_word_w) /* tilemaps (2nd screen) */
AM_RANGE(0x2e0000, 0x2e000f) AM_READWRITE(TC0100SCN_ctrl_word_1_r,TC0100SCN_ctrl_word_1_w) AM_RANGE(0x2e0000, 0x2e000f) AM_DEVREADWRITE("tc0100scn_2", tc0100scn_ctrl_word_r, tc0100scn_ctrl_word_w)
AM_RANGE(0x300000, 0x313fff) AM_READWRITE(TC0100SCN_word_2_r,TC0100SCN_word_2_w) /* tilemaps (3rd screen) */ AM_RANGE(0x300000, 0x313fff) AM_DEVREADWRITE("tc0100scn_3", tc0100scn_word_r, tc0100scn_word_w) /* tilemaps (3rd screen) */
AM_RANGE(0x320000, 0x32000f) AM_READWRITE(TC0100SCN_ctrl_word_2_r,TC0100SCN_ctrl_word_2_w) AM_RANGE(0x320000, 0x32000f) AM_DEVREADWRITE("tc0100scn_3", tc0100scn_ctrl_word_r, tc0100scn_ctrl_word_w)
AM_RANGE(0x340000, 0x340007) AM_READWRITE(TC0110PCR_word_r,TC0110PCR_step1_word_w) /* palette (1st screen) */ AM_RANGE(0x340000, 0x340007) AM_DEVREADWRITE("tc0110pcr_1", 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(0x350000, 0x350007) AM_DEVREADWRITE("tc0110pcr_2", tc0110pcr_word_r, tc0110pcr_step1_word_w) /* palette (2nd screen) */
AM_RANGE(0x360000, 0x360007) AM_READWRITE(TC0110PCR_word_2_r,TC0110PCR_step1_word_2_w) /* palette (3rd screen) */ AM_RANGE(0x360000, 0x360007) AM_DEVREADWRITE("tc0110pcr_3", tc0110pcr_word_r, tc0110pcr_step1_word_w) /* palette (3rd screen) */
ADDRESS_MAP_END ADDRESS_MAP_END
static ADDRESS_MAP_START( darius2_slave_map, ADDRESS_SPACE_PROGRAM, 16 ) 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(0x200002, 0x200003) AM_DEVREADWRITE8("tc0220ioc", tc0220ioc_port_r, tc0220ioc_port_w, 0x00ff)
AM_RANGE(0x240000, 0x24ffff) AM_RAM AM_SHARE("share1") AM_RANGE(0x240000, 0x24ffff) AM_RAM AM_SHARE("share1")
AM_RANGE(0x260000, 0x263fff) AM_RAM AM_SHARE("share2") 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 ADDRESS_MAP_END
@ -682,6 +693,40 @@ to the scrolling background.
Darius2: arbitrary interleaving of 10 to keep cpus synced. 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 = static const tc0220ioc_interface ninjaw_io_intf =
{ {
DEVCB_INPUT_PORT("DSWA"), DEVCB_INPUT_PORT("DSWB"), DEVCB_INPUT_PORT("DSWA"), DEVCB_INPUT_PORT("DSWB"),
@ -738,6 +783,13 @@ static MACHINE_DRIVER_START( ninjaw )
MDRV_VIDEO_START(ninjaw) MDRV_VIDEO_START(ninjaw)
MDRV_VIDEO_UPDATE(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 */ /* sound hardware */
MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
@ -813,6 +865,13 @@ static MACHINE_DRIVER_START( darius2 )
MDRV_VIDEO_START(ninjaw) MDRV_VIDEO_START(ninjaw)
MDRV_VIDEO_UPDATE(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 */ /* sound hardware */
MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")

View File

@ -235,7 +235,7 @@ TODO:
#include "includes/taitoipt.h" #include "includes/taitoipt.h"
#include "cpu/m68000/m68000.h" #include "cpu/m68000/m68000.h"
#include "machine/eeprom.h" #include "machine/eeprom.h"
#include "video/taitoic.h" #include "video/taiicdev.h"
#include "machine/taitoio.h" #include "machine/taitoio.h"
#include "audio/taitosnd.h" #include "audio/taitosnd.h"
#include "sound/2610intf.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(0x090000, 0x09000f) AM_READWRITE(othunder_tc0220ioc_r, othunder_tc0220ioc_w)
// AM_RANGE(0x090006, 0x090007) AM_WRITE(eeprom_w) // AM_RANGE(0x090006, 0x090007) AM_WRITE(eeprom_w)
// AM_RANGE(0x09000c, 0x09000d) AM_WRITENOP /* ?? (keeps writing 0x77) */ // 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(0x100000, 0x100007) AM_DEVREADWRITE("tc0110pcr", 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(0x200000, 0x20ffff) AM_DEVREADWRITE("tc0100scn", tc0100scn_word_r, tc0100scn_word_w) /* tilemaps */
AM_RANGE(0x220000, 0x22000f) AM_READWRITE(TC0100SCN_ctrl_word_0_r, TC0100SCN_ctrl_word_0_w) 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(0x300000, 0x300003) AM_READWRITE(othunder_sound_r, othunder_sound_w)
AM_RANGE(0x400000, 0x4005ff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram) AM_RANGE(0x400000, 0x4005ff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram)
AM_RANGE(0x500000, 0x500007) AM_READWRITE(othunder_lightgun_r, othunder_lightgun_w) AM_RANGE(0x500000, 0x500007) AM_READWRITE(othunder_lightgun_r, othunder_lightgun_w)
@ -663,6 +663,21 @@ static const ym2610_interface ym2610_config =
MACHINE DRIVERS 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 = static const tc0220ioc_interface othunder_io_intf =
{ {
DEVCB_INPUT_PORT("DSWA"), DEVCB_INPUT_PORT("DSWB"), DEVCB_INPUT_PORT("DSWA"), DEVCB_INPUT_PORT("DSWB"),
@ -701,6 +716,9 @@ static MACHINE_DRIVER_START( othunder )
MDRV_VIDEO_START(othunder) MDRV_VIDEO_START(othunder)
MDRV_VIDEO_UPDATE(othunder) MDRV_VIDEO_UPDATE(othunder)
MDRV_TC0100SCN_ADD("tc0100scn", othunder_tc0100scn_intf)
MDRV_TC0110PCR_ADD("tc0110pcr", othunder_tc0110pcr_intf)
/* sound hardware */ /* sound hardware */
MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")

View File

@ -139,18 +139,16 @@ some kind of zoom table?
****************************************************************************/ ****************************************************************************/
#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 "includes/taitoipt.h" #include "includes/taitoipt.h"
#include "audio/taitosnd.h" #include "audio/taitosnd.h"
#include "machine/taitoio.h" #include "machine/taitoio.h"
#include "video/taitoic.h" #include "video/taiicdev.h"
#include "sound/2610intf.h" #include "sound/2610intf.h"
/*************************************************************************** /***************************************************************************
Variable Variable
@ -159,9 +157,6 @@ some kind of zoom table?
static UINT16 *taitoh_68000_mainram; static UINT16 *taitoh_68000_mainram;
VIDEO_START( syvalion );
VIDEO_START( recordbr );
VIDEO_START( dleague );
VIDEO_UPDATE( syvalion ); VIDEO_UPDATE( syvalion );
VIDEO_UPDATE( recordbr ); VIDEO_UPDATE( recordbr );
VIDEO_UPDATE( dleague ); 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(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(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(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(0x500800, 0x500fff) AM_RAM_WRITE(paletteram16_xBBBBBGGGGGRRRRR_word_w) AM_BASE_GENERIC(paletteram)
ADDRESS_MAP_END 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(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(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(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(0x500800, 0x500fff) AM_RAM_WRITE(paletteram16_xBBBBBGGGGGRRRRR_word_w) AM_BASE_GENERIC(paletteram)
ADDRESS_MAP_END 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(0x200000, 0x20000f) AM_DEVREADWRITE8("tc0220ioc", tc0220ioc_r, tc0220ioc_w, 0x00ff)
AM_RANGE(0x300000, 0x300001) AM_READNOP AM_WRITE8(taitosound_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(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(0x500800, 0x500fff) AM_RAM_WRITE(paletteram16_xBBBBBGGGGGRRRRR_word_w) AM_BASE_GENERIC(paletteram)
AM_RANGE(0x600000, 0x600001) AM_WRITENOP /* ?? writes zero once per frame */ AM_RANGE(0x600000, 0x600001) AM_WRITENOP /* ?? writes zero once per frame */
ADDRESS_MAP_END 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 = static const tc0220ioc_interface taitoh_io_intf =
{ {
DEVCB_INPUT_PORT("DSWA"), DEVCB_INPUT_PORT("DSWB"), DEVCB_INPUT_PORT("DSWA"), DEVCB_INPUT_PORT("DSWB"),
@ -580,9 +589,10 @@ static MACHINE_DRIVER_START( syvalion )
MDRV_GFXDECODE(syvalion) MDRV_GFXDECODE(syvalion)
MDRV_PALETTE_LENGTH(33*16) MDRV_PALETTE_LENGTH(33*16)
MDRV_VIDEO_START(syvalion)
MDRV_VIDEO_UPDATE(syvalion) MDRV_VIDEO_UPDATE(syvalion)
MDRV_TC0080VCO_ADD("tc0080vco", syvalion_tc0080vco_intf)
/* sound hardware */ /* sound hardware */
MDRV_SPEAKER_STANDARD_MONO("mono") MDRV_SPEAKER_STANDARD_MONO("mono")
@ -622,9 +632,10 @@ static MACHINE_DRIVER_START( recordbr )
MDRV_GFXDECODE(recordbr) MDRV_GFXDECODE(recordbr)
MDRV_PALETTE_LENGTH(32*16) MDRV_PALETTE_LENGTH(32*16)
MDRV_VIDEO_START(recordbr)
MDRV_VIDEO_UPDATE(recordbr) MDRV_VIDEO_UPDATE(recordbr)
MDRV_TC0080VCO_ADD("tc0080vco", recordbr_tc0080vco_intf)
/* sound hardware */ /* sound hardware */
MDRV_SPEAKER_STANDARD_MONO("mono") MDRV_SPEAKER_STANDARD_MONO("mono")
@ -664,9 +675,10 @@ static MACHINE_DRIVER_START( dleague )
MDRV_GFXDECODE(dleague) MDRV_GFXDECODE(dleague)
MDRV_PALETTE_LENGTH(33*16) MDRV_PALETTE_LENGTH(33*16)
MDRV_VIDEO_START(dleague)
MDRV_VIDEO_UPDATE(dleague) MDRV_VIDEO_UPDATE(dleague)
MDRV_TC0080VCO_ADD("tc0080vco", recordbr_tc0080vco_intf)
/* sound hardware */ /* sound hardware */
MDRV_SPEAKER_STANDARD_MONO("mono") MDRV_SPEAKER_STANDARD_MONO("mono")

View File

@ -32,12 +32,11 @@ TODO:
#include "deprecat.h" #include "deprecat.h"
#include "cpu/z80/z80.h" #include "cpu/z80/z80.h"
#include "cpu/m68000/m68000.h" #include "cpu/m68000/m68000.h"
#include "video/taitoic.h" #include "video/taiicdev.h"
#include "sound/2203intf.h" #include "sound/2203intf.h"
static const int clear_hack=1; static const int clear_hack=1;
VIDEO_START( parentj );
VIDEO_UPDATE( parentj ); VIDEO_UPDATE( parentj );
static WRITE16_HANDLER(io_w) 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(0x100000, 0x10ffff) AM_MIRROR(0x010000) AM_RAM
AM_RANGE(0x200000, 0x20000f) AM_READWRITE(io_r, io_w) /* TC0220IOC ? */ 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(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) AM_RANGE(0x500800, 0x500fff) AM_RAM_WRITE(paletteram16_xBBBBBGGGGGRRRRR_word_w) AM_BASE_GENERIC(paletteram)
ADDRESS_MAP_END ADDRESS_MAP_END
@ -232,6 +231,13 @@ static const ym2203_interface ym2203_config =
NULL NULL
}; };
static const tc0080vco_interface parentj_intf =
{
0, 1, /* gfxnum, txnum */
1, 1, -2,
0
};
static MACHINE_DRIVER_START( parentj ) static MACHINE_DRIVER_START( parentj )
@ -249,9 +255,10 @@ static MACHINE_DRIVER_START( parentj )
MDRV_GFXDECODE(parentj) MDRV_GFXDECODE(parentj)
MDRV_PALETTE_LENGTH(33*16) MDRV_PALETTE_LENGTH(33*16)
MDRV_VIDEO_START(parentj)
MDRV_VIDEO_UPDATE(parentj) MDRV_VIDEO_UPDATE(parentj)
MDRV_TC0080VCO_ADD("tc0080vco", parentj_intf)
MDRV_SPEAKER_STANDARD_MONO("mono") MDRV_SPEAKER_STANDARD_MONO("mono")
MDRV_SOUND_ADD("ymsnd", YM2203, 2000000) /*?? MHz */ 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 "cpu/m68000/m68000.h"
#include "includes/taitoipt.h" #include "includes/taitoipt.h"
#include "audio/taitosnd.h" #include "audio/taitosnd.h"
#include "video/taitoic.h" #include "video/taiicdev.h"
#include "machine/taitoio.h" #include "machine/taitoio.h"
#include "cpu/tms32025/tms32025.h" #include "cpu/tms32025/tms32025.h"
#include "sound/2610intf.h" #include "sound/2610intf.h"
@ -231,7 +231,6 @@ static UINT16 *taitoh_68000_mainram;
UINT16 *taitoair_line_ram; UINT16 *taitoair_line_ram;
static UINT16 *dsp_ram; /* Shared 68000/TMS32025 RAM */ static UINT16 *dsp_ram; /* Shared 68000/TMS32025 RAM */
VIDEO_START( taitoair );
VIDEO_UPDATE( 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(0x180000, 0x183fff) AM_RAM /* "gradiation ram (0)" */
AM_RANGE(0x184000, 0x187fff) AM_RAM /* "gradiation ram (1)" */ 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(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(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(0x910000, 0x91ffff) AM_RAM AM_BASE(&dsp_ram) /* "dsp common ram" (TMS320C25) */
AM_RANGE(0xa00000, 0xa00007) AM_READ(stick_input_r) AM_RANGE(0xa00000, 0xa00007) AM_READ(stick_input_r)
@ -596,6 +595,13 @@ static const ym2610_interface airsys_ym2610_interface =
MACHINE DRIVERS MACHINE DRIVERS
************************************************************/ ************************************************************/
static const tc0080vco_interface airsys_tc0080vco_intf =
{
0, 1, /* gfxnum, txnum */
1, 1, -2,
0
};
static const tc0220ioc_interface airsys_io_intf = static const tc0220ioc_interface airsys_io_intf =
{ {
DEVCB_INPUT_PORT("DSWA"), DEVCB_INPUT_PORT("DSWB"), DEVCB_INPUT_PORT("DSWA"), DEVCB_INPUT_PORT("DSWB"),
@ -634,9 +640,10 @@ static MACHINE_DRIVER_START( airsys )
MDRV_GFXDECODE(airsys) MDRV_GFXDECODE(airsys)
MDRV_PALETTE_LENGTH(512*16) MDRV_PALETTE_LENGTH(512*16)
MDRV_VIDEO_START(taitoair)
MDRV_VIDEO_UPDATE(taitoair) MDRV_VIDEO_UPDATE(taitoair)
MDRV_TC0080VCO_ADD("tc0080vco", airsys_tc0080vco_intf)
/* sound hardware */ /* sound hardware */
MDRV_SPEAKER_STANDARD_MONO("mono") MDRV_SPEAKER_STANDARD_MONO("mono")

View File

@ -148,7 +148,7 @@ Colscroll effects?
#include "includes/taitoipt.h" #include "includes/taitoipt.h"
#include "rendlay.h" #include "rendlay.h"
#include "cpu/m68000/m68000.h" #include "cpu/m68000/m68000.h"
#include "video/taitoic.h" #include "video/taiicdev.h"
#include "machine/taitoio.h" #include "machine/taitoio.h"
#include "audio/taitosnd.h" #include "audio/taitosnd.h"
#include "sound/2610intf.h" #include "sound/2610intf.h"
@ -157,7 +157,6 @@ Colscroll effects?
static MACHINE_START( warriorb ); static MACHINE_START( warriorb );
static MACHINE_RESET( taito_dualscreen ); static MACHINE_RESET( taito_dualscreen );
VIDEO_START( darius2d );
VIDEO_START( warriorb ); VIDEO_START( warriorb );
VIDEO_UPDATE( 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 MEMORY STRUCTURES
@ -218,13 +225,13 @@ static WRITE8_HANDLER( warriorb_pancontrol )
static ADDRESS_MAP_START( darius2d_map, ADDRESS_SPACE_PROGRAM, 16 ) static ADDRESS_MAP_START( darius2d_map, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x000000, 0x0fffff) AM_ROM AM_RANGE(0x000000, 0x0fffff) AM_ROM
AM_RANGE(0x100000, 0x10ffff) AM_RAM /* main ram */ 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(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(0x220000, 0x22000f) AM_DEVREADWRITE("tc0100scn_1", tc0100scn_ctrl_word_r, tc0100scn_ctrl_word_w)
AM_RANGE(0x240000, 0x253fff) AM_READWRITE(TC0100SCN_word_1_r, TC0100SCN_word_1_w) /* tilemaps (2nd screen) */ AM_RANGE(0x240000, 0x253fff) AM_DEVREADWRITE("tc0100scn_2", tc0100scn_word_r, tc0100scn_word_w) /* tilemaps (2nd screen) */
AM_RANGE(0x260000, 0x26000f) AM_READWRITE(TC0100SCN_ctrl_word_1_r, TC0100SCN_ctrl_word_1_w) AM_RANGE(0x260000, 0x26000f) AM_DEVREADWRITE("tc0100scn_2", tc0100scn_ctrl_word_r, tc0100scn_ctrl_word_w)
AM_RANGE(0x400000, 0x400007) AM_READWRITE(TC0110PCR_word_r, TC0110PCR_step1_word_w) /* palette (1st screen) */ AM_RANGE(0x400000, 0x400007) AM_DEVREADWRITE("tc0110pcr_1", 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(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(0x600000, 0x6013ff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram)
AM_RANGE(0x800000, 0x80000f) AM_DEVREADWRITE8("tc0220ioc", tc0220ioc_r, tc0220ioc_w, 0x00ff) AM_RANGE(0x800000, 0x80000f) AM_DEVREADWRITE8("tc0220ioc", tc0220ioc_r, tc0220ioc_w, 0x00ff)
// AM_RANGE(0x820000, 0x820001) AM_WRITENOP // ??? // AM_RANGE(0x820000, 0x820001) AM_WRITENOP // ???
@ -234,12 +241,12 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( warriorb_map, ADDRESS_SPACE_PROGRAM, 16 ) static ADDRESS_MAP_START( warriorb_map, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x000000, 0x1fffff) AM_ROM AM_RANGE(0x000000, 0x1fffff) AM_ROM
AM_RANGE(0x200000, 0x213fff) AM_RAM 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(0x300000, 0x313fff) AM_DEVREAD("tc0100scn_1", tc0100scn_word_r) AM_WRITE(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(0x320000, 0x32000f) AM_DEVREADWRITE("tc0100scn_1", tc0100scn_ctrl_word_r, tc0100scn_ctrl_word_w)
AM_RANGE(0x340000, 0x353fff) AM_READWRITE(TC0100SCN_word_1_r, TC0100SCN_word_1_w) /* tilemaps (2nd screen) */ AM_RANGE(0x340000, 0x353fff) AM_DEVREADWRITE("tc0100scn_2", tc0100scn_word_r, tc0100scn_word_w) /* tilemaps (2nd screen) */
AM_RANGE(0x360000, 0x36000f) AM_READWRITE(TC0100SCN_ctrl_word_1_r, TC0100SCN_ctrl_word_1_w) AM_RANGE(0x360000, 0x36000f) AM_DEVREADWRITE("tc0100scn_2", tc0100scn_ctrl_word_r, tc0100scn_ctrl_word_w)
AM_RANGE(0x400000, 0x400007) AM_READWRITE(TC0110PCR_word_r, TC0110PCR_step1_word_w) /* palette (1st screen) */ AM_RANGE(0x400000, 0x400007) AM_DEVREADWRITE("tc0110pcr_1", 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(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(0x600000, 0x6013ff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram)
AM_RANGE(0x800000, 0x80000f) AM_DEVREADWRITE("tc0510nio", tc0510nio_halfword_r, tc0510nio_halfword_w) AM_RANGE(0x800000, 0x80000f) AM_DEVREADWRITE("tc0510nio", tc0510nio_halfword_r, tc0510nio_halfword_w)
// AM_RANGE(0x820000, 0x820001) AM_WRITENOP // ? uses bits 0,2,3 // AM_RANGE(0x820000, 0x820001) AM_WRITENOP // ? uses bits 0,2,3
@ -445,6 +452,57 @@ static DEVICE_GET_INFO( subwoofer )
MACHINE DRIVERS 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 = static const tc0220ioc_interface darius2d_io_intf =
{ {
DEVCB_INPUT_PORT("DSWA"), DEVCB_INPUT_PORT("DSWB"), 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_SIZE(40*8, 32*8)
MDRV_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 3*8, 32*8-1) 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_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 */ /* sound hardware */
MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
@ -554,6 +617,11 @@ static MACHINE_DRIVER_START( warriorb )
MDRV_VIDEO_START(warriorb) MDRV_VIDEO_START(warriorb)
MDRV_VIDEO_UPDATE(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 */ /* sound hardware */
MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") 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 "includes/taitoipt.h"
#include "cpu/m68000/m68000.h" #include "cpu/m68000/m68000.h"
#include "machine/taitoio.h" #include "machine/taitoio.h"
#include "video/taitoic.h" #include "video/taiicdev.h"
#include "audio/taitosnd.h" #include "audio/taitosnd.h"
#include "sound/2610intf.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(0x180000, 0x18000f) AM_DEVREADWRITE8("tc0220ioc", tc0220ioc_r, tc0220ioc_w, 0xff00)
AM_RANGE(0x1c0000, 0x1c0001) AM_WRITE(cpua_ctrl_w) AM_RANGE(0x1c0000, 0x1c0001) AM_WRITE(cpua_ctrl_w)
AM_RANGE(0x200000, 0x20000f) AM_READWRITE(wgp_adinput_r,wgp_adinput_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(0x300000, 0x30ffff) AM_DEVREADWRITE("tc0100scn", tc0100scn_word_r, tc0100scn_word_w) /* tilemaps */
AM_RANGE(0x320000, 0x32000f) AM_READWRITE(TC0100SCN_ctrl_word_0_r,TC0100SCN_ctrl_word_0_w) 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(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(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) */ 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 */ 32*8 /* every sprite takes 32 consecutive bytes */
}; };
/* taitoic.c TC0100SCN routines expect scr stuff to be in second gfx /* taitoic.c TC0100SCN routines expect scr stuff to be in second gfx slot */
slot */
static GFXDECODE_START( wgp ) static GFXDECODE_START( wgp )
GFXDECODE_ENTRY( "gfx3", 0x0, wgp_tilelayout, 0, 256 ) /* sprites */ GFXDECODE_ENTRY( "gfx3", 0x0, wgp_tilelayout, 0, 256 ) /* sprites */
GFXDECODE_ENTRY( "gfx1", 0x0, charlayout, 0, 256 ) /* sprites & playfield */ 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); 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 = static const tc0220ioc_interface wgp_io_intf =
{ {
DEVCB_INPUT_PORT("DSWA"), DEVCB_INPUT_PORT("DSWB"), DEVCB_INPUT_PORT("DSWA"), DEVCB_INPUT_PORT("DSWB"),
@ -992,6 +1010,8 @@ static MACHINE_DRIVER_START( wgp )
MDRV_VIDEO_START(wgp) MDRV_VIDEO_START(wgp)
MDRV_VIDEO_UPDATE(wgp) MDRV_VIDEO_UPDATE(wgp)
MDRV_TC0100SCN_ADD("tc0100scn", wgp_tc0100scn_intf)
/* sound hardware */ /* sound hardware */
MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
@ -1010,6 +1030,9 @@ static MACHINE_DRIVER_START( wgp2 )
MDRV_QUANTUM_TIME(HZ(12000)) MDRV_QUANTUM_TIME(HZ(12000))
/* video hardware */ /* video hardware */
MDRV_VIDEO_START(wgp2) MDRV_VIDEO_START(wgp2)
MDRV_DEVICE_REMOVE("tc0100scn")
MDRV_TC0100SCN_ADD("tc0100scn", wgp2_tc0100scn_intf)
MACHINE_DRIVER_END MACHINE_DRIVER_END

View File

@ -1,32 +1,5 @@
#include "driver.h" #include "driver.h"
#include "video/taitoic.h" #include "video/taiicdev.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);
}
/************************************************************** /**************************************************************
SPRITE READ AND WRITE HANDLERS SPRITE READ AND WRITE HANDLERS
@ -34,8 +7,10 @@ VIDEO_START( cadash )
WRITE16_HANDLER( asuka_spritectrl_w ) 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 */ /* 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 ) 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]; 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[1] = layer[0]^1;
layer[2] = 2; layer[2] = 2;
@ -58,36 +35,38 @@ VIDEO_UPDATE( asuka )
/* Ensure screen blanked even when bottom layer not drawn due to disable bit */ /* Ensure screen blanked even when bottom layer not drawn due to disable bit */
bitmap_fill(bitmap, cliprect, 0); bitmap_fill(bitmap, cliprect, 0);
TC0100SCN_tilemap_draw(screen->machine,bitmap,cliprect,0,layer[0],TILEMAP_DRAW_OPAQUE,1); tc0100scn_tilemap_draw(tc0100scn, bitmap, cliprect, layer[0], TILEMAP_DRAW_OPAQUE, 1);
TC0100SCN_tilemap_draw(screen->machine,bitmap,cliprect,0,layer[1],0,2); tc0100scn_tilemap_draw(tc0100scn, bitmap, cliprect, layer[1], 0, 2);
TC0100SCN_tilemap_draw(screen->machine,bitmap,cliprect,0,layer[2],0,4); tc0100scn_tilemap_draw(tc0100scn, bitmap, cliprect, layer[2], 0, 4);
/* Sprites may be over or under top bg layer */ /* 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; return 0;
} }
VIDEO_UPDATE( bonzeadv ) 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]; 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[1] = layer[0] ^ 1;
layer[2] = 2; layer[2] = 2;
bitmap_fill(screen->machine->priority_bitmap,cliprect,0); bitmap_fill(screen->machine->priority_bitmap, cliprect, 0);
/* Ensure screen blanked even when bottom layer not drawn due to disable bit */ /* Ensure screen blanked even when bottom layer not drawn due to disable bit */
bitmap_fill(bitmap, cliprect, 0); bitmap_fill(bitmap, cliprect, 0);
TC0100SCN_tilemap_draw(screen->machine,bitmap,cliprect,0,layer[0],TILEMAP_DRAW_OPAQUE,1); tc0100scn_tilemap_draw(tc0100scn, bitmap, cliprect, layer[0], TILEMAP_DRAW_OPAQUE, 1);
TC0100SCN_tilemap_draw(screen->machine,bitmap,cliprect,0,layer[1],0,2); tc0100scn_tilemap_draw(tc0100scn, bitmap, cliprect, layer[1], 0, 2);
TC0100SCN_tilemap_draw(screen->machine,bitmap,cliprect,0,layer[2],0,4); tc0100scn_tilemap_draw(tc0100scn, bitmap, cliprect, layer[2], 0, 4);
/* Sprites are always over both bg layers */ /* Sprites are always over both bg layers */
PC090OJ_draw_sprites(screen->machine,bitmap,cliprect,0); pc090oj_draw_sprites(pc090oj, bitmap, cliprect, 0);
return 0; return 0;
} }

View File

@ -1,7 +1,5 @@
#include "driver.h" #include "driver.h"
#include "video/taitoic.h" #include "video/taiicdev.h"
#define TC0100SCN_GFX_NUM 1
struct tempsprite struct tempsprite
{ {
@ -14,43 +12,17 @@ struct tempsprite
}; };
static struct tempsprite *spritelist; static struct tempsprite *spritelist;
static int taito_hide_pixels;
/**********************************************************/ /**********************************************************/
static VIDEO_START( ninjaw_core ) VIDEO_START( ninjaw )
{ {
int chips; const device_config *tc0100scn = devtag_get_device(machine, "tc0100scn_1");
int mask;
spritelist = auto_alloc_array(machine, struct tempsprite, 0x1000); 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 */ /* Ensure palette from correct TC0110PCR used for each screen */
TC0100SCN_set_chip_colbanks(0x0,0x100,0x200); tc0100scn_set_colbanks(tc0100scn, 0x0, 0x100, 0x200);
}
VIDEO_START( ninjaw )
{
taito_hide_pixels = 22;
VIDEO_START_CALL(ninjaw_core);
} }
/************************************************************ /************************************************************
@ -149,51 +121,53 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap,const rectan
VIDEO_UPDATE( ninjaw ) VIDEO_UPDATE( ninjaw )
{ {
int xoffs = 0, screen_number = -1; int xoffs = 0;
UINT8 layer[3], nodraw; UINT8 layer[3], nodraw;
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 *middle_screen = devtag_get_device(screen->machine, "mscreen"); 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 *right_screen = devtag_get_device(screen->machine, "rscreen");
const device_config *tc0100scn = NULL;
if (screen == left_screen) if (screen == left_screen)
{ {
xoffs = 36*8*0; xoffs = 36 * 8 * 0;
screen_number = 0; tc0100scn = devtag_get_device(screen->machine, "tc0100scn_1");
} }
else if (screen == middle_screen) else if (screen == middle_screen)
{ {
xoffs = 36*8*1; xoffs = 36 * 8 * 1;
screen_number = 1; tc0100scn = devtag_get_device(screen->machine, "tc0100scn_2");
} }
else if (screen == right_screen) else if (screen == right_screen)
{ {
xoffs = 36*8*2; 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[1] = layer[0] ^ 1;
layer[2] = 2; layer[2] = 2;
/* chip 0 does tilemaps on the left, chip 1 center, chip 2 the right */ /* chip 0 does tilemaps on the left, chip 1 center, chip 2 the right */
// draw bottom layer // 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 */ /* 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 */ /* 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_sprites(screen->machine, bitmap, cliprect, 1, xoffs, 8); // draw sprites with priority 1 which are under the mid layer
// draw middle 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_sprites(screen->machine,bitmap,cliprect,0,xoffs,8); // draw sprites with priority 0 which are over the mid layer
// draw top(text) 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; return 0;
} }

View File

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

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 ) READ16_DEVICE_HANDLER( tc0080vco_cram_0_r )
{ {
tc0080vco_state *tc0080vco = tc0080vco_get_safe_token(device); tc0080vco_state *tc0080vco = tc0080vco_get_safe_token(device);
@ -1831,36 +1832,6 @@ READ_LINE_DEVICE_HANDLER( tc0080vco_flipscreen_r )
return tc0080vco->flipscreen; 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 ) static STATE_POSTLOAD( tc0080vco_postload )
{ {
@ -1912,9 +1883,6 @@ static DEVICE_START( tc0080vco )
/* Perform extra initialisations for text layer */ /* 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); 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_scrolldx(tc0080vco->tilemap[2], 0, 0);
tilemap_set_scrolldy(tc0080vco->tilemap[2], 48, -448); tilemap_set_scrolldy(tc0080vco->tilemap[2], 48, -448);
@ -1938,6 +1906,9 @@ static DEVICE_START( tc0080vco )
tc0080vco->spriteram = tc0080vco->ram + 0x20400 / 2; tc0080vco->spriteram = tc0080vco->ram + 0x20400 / 2;
tc0080vco->scroll_ram = tc0080vco->ram + 0x20800 / 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_device_item_pointer(device, 0, tc0080vco->ram, TC0080VCO_RAM_SIZE / 2);
state_save_register_postload(device->machine, tc0080vco_postload, tc0080vco); 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 ) READ16_DEVICE_HANDLER( tc0100scn_ctrl_word_r )
{ {
tc0100scn_state *tc0100scn = tc0100scn_get_safe_token(device); 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); 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); tc0100scn->cliprect = *video_screen_get_visible_area(tc0100scn->screen);
/* create the char set (gfx will then be updated dynamically from RAM) */ /* use the given gfx sets for bg/tx tiles*/
device->machine->gfx[intf->txnum] = gfx_element_alloc(device->machine, &tc0100scn_charlayout, (UINT8 *)tc0100scn->char_ram, 64, 0); tc0100scn->bg_gfx = intf->gfxnum; /* 2nd/3rd chips will use the same gfx set */
tc0100scn->tx_gfx = intf->txnum; 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 */ /* 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[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); 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[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); 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[0][0], 0);
tilemap_set_transparent_pen(tc0100scn->tilemap[1][0], 0); tilemap_set_transparent_pen(tc0100scn->tilemap[1][0], 0);
tilemap_set_transparent_pen(tc0100scn->tilemap[2][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 7 bits higher and 2 pixels to the left than chip #1 because
that's how thundfox wants it. */ that's how thundfox wants it. */
// FIXME: use intf->multiscrn_xoffs to deal screen 2 & 3! xd = (intf->multiscrn_hack == 0) ? (-intf->x_offset) : (-intf->x_offset - 2);
xd = -intf->x_offset; yd = (intf->multiscrn_hack == 0) ? (8 - intf->y_offset) : (1 - intf->y_offset);
yd = 8 - intf->y_offset;
tilemap_set_scrolldx(tc0100scn->tilemap[0][0], xd - 16, -intf->flip_xoffs - xd - 16); 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); 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. display not from the edges of individual screens.
NB flipscreen tilemap offsets are based on Cameltry */ 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_scrolldx(tc0100scn->tilemap[0][1], xd - 16, -intf->flip_xoffs - xd - 16);
tilemap_set_scrolldy(tc0100scn->tilemap[0][1], yd, -intf->flip_yoffs - yd); 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 */ if (device->machine->gfx[intf->gfxnum]->color_granularity == 0x40) /* Undrfire */
tc0100scn->tx_col_mult = 4; tc0100scn->tx_col_mult = 4;
//logerror("TC0100SCN bg gfx granularity %04x: multiplier %04x\n", //logerror("TC0100SCN bg gfx granularity %04x: multiplier %04x\n", device->machine->gfx[intf->gfxnum]->color_granularity, tc0100scn->tx_col_mult);
//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->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_pointer(device, 0, tc0100scn->ram, TC0100SCN_RAM_SIZE / 2);
state_save_register_device_item_array(device, 0, tc0100scn->ctrl); state_save_register_device_item_array(device, 0, tc0100scn->ctrl);
state_save_register_device_item(device, 0, tc0100scn->dblwidth); state_save_register_device_item(device, 0, tc0100scn->dblwidth);
@ -2567,7 +2526,6 @@ static DEVICE_RESET( tc0100scn )
tc0100scn->dblwidth = 0; tc0100scn->dblwidth = 0;
tc0100scn->colbank = 0; tc0100scn->colbank = 0;
tc0100scn->gfxbank = 0; /* Mjnquest uniquely banks tiles */ 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++) for (i = 0; i < 8; i++)
tc0100scn->ctrl[i] = 0; tc0100scn->ctrl[i] = 0;
@ -2585,7 +2543,7 @@ struct _tc0280grd_state
{ {
UINT16 * ram; UINT16 * ram;
tilemap_t *tilemap; tilemap_t *tilemap;
UINT16 ctrl[8]; UINT16 ctrl[8];
int gfxnum, base_color; int gfxnum, base_color;

View File

@ -58,6 +58,7 @@ struct _tc0100scn_interface
int flip_text_xoffs, flip_text_yoffs; int flip_text_xoffs, flip_text_yoffs;
int multiscrn_xoffs; 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_sprram_r );
READ16_DEVICE_HANDLER( tc0080vco_scrram_r ); READ16_DEVICE_HANDLER( tc0080vco_scrram_r );
READ_LINE_DEVICE_HANDLER( tc0080vco_flipscreen_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 **/ /** TC0100SCN **/
#define TC0100SCN_SINGLE_VDU 1024 #define TC0100SCN_SINGLE_VDU 1024
/* Function to set separate color banks for the three tilemapped layers. /* 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 ); READ32_DEVICE_HANDLER( tc0100scn_ctrl_long_r );
WRITE32_DEVICE_HANDLER( tc0100scn_ctrl_long_w ); 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); 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); 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 **/ /** TC0280GRD & TC0430GRW **/
READ16_DEVICE_HANDLER( tc0280grd_word_r ); READ16_DEVICE_HANDLER( tc0280grd_word_r );
WRITE16_DEVICE_HANDLER( tc0280grd_word_w ); WRITE16_DEVICE_HANDLER( tc0280grd_word_w );
WRITE16_DEVICE_HANDLER( tc0280grd_ctrl_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 **/ /** TC0360PRI **/
WRITE8_DEVICE_HANDLER( tc0360pri_w ); WRITE8_DEVICE_HANDLER( tc0360pri_w );
READ8_DEVICE_HANDLER( tc0360pri_r ); READ8_DEVICE_HANDLER( tc0360pri_r );
@ -339,7 +318,6 @@ int tc0480scp_get_bg_priority(const device_config *device);
//extern int TC0480SCP_pri_reg; //extern int TC0480SCP_pri_reg;
/** TC0150ROD **/ /** TC0150ROD **/
READ16_DEVICE_HANDLER( tc0150rod_word_r ); READ16_DEVICE_HANDLER( tc0150rod_word_r );
WRITE16_DEVICE_HANDLER( tc0150rod_word_w ); WRITE16_DEVICE_HANDLER( tc0150rod_word_w );
@ -365,4 +343,3 @@ WRITE16_DEVICE_HANDLER( tc0180vcu_scroll_w );
READ16_DEVICE_HANDLER( tc0180vcu_word_r ); READ16_DEVICE_HANDLER( tc0180vcu_word_r );
WRITE16_DEVICE_HANDLER( tc0180vcu_word_w ); 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); 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 "driver.h"
#include "taitoic.h" #include "taiicdev.h"
/* These are hand-tuned values */ /* 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 Screen refresh
***************************************************************************/ ***************************************************************************/
static void syvalion_draw_sprites(running_machine *machine,bitmap_t *bitmap,const rectangle *cliprect) 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 /* Y chain size is 16/32?/64/64? pixels. X chain size
is always 64 pixels. */ is always 64 pixels. */
@ -103,13 +83,13 @@ static void syvalion_draw_sprites(running_machine *machine,bitmap_t *bitmap,cons
int tile_offs; /* sprite chain offset */ int tile_offs; /* sprite chain offset */
int zoomx; /* zoomx value */ int zoomx; /* zoomx value */
for (offs = 0x03f8 / 2 ; offs >= 0 ; offs -= 0x008 / 2) for (offs = 0x03f8 / 2; offs >= 0; offs -= 0x008 / 2)
{ {
x0 = TC0080VCO_spriteram[offs + 1] & 0x3ff; x0 = tc0080vco_sprram_r(tc0080vco, offs + 1, 0xffff) & 0x3ff;
y0 = TC0080VCO_spriteram[offs + 0] & 0x3ff; y0 = tc0080vco_sprram_r(tc0080vco, offs + 0, 0xffff) & 0x3ff;
zoomx = (TC0080VCO_spriteram[offs + 2] & 0x7f00) >> 8; zoomx = (tc0080vco_sprram_r(tc0080vco, offs + 2, 0xffff) & 0x7f00) >> 8;
tile_offs = (TC0080VCO_spriteram[offs + 3] & 0x1fff) << 2; tile_offs = (tc0080vco_sprram_r(tc0080vco, offs + 3, 0xffff) & 0x1fff) << 2;
ysize = size[ ( TC0080VCO_spriteram[ offs ] & 0x0c00 ) >> 10 ]; ysize = size[(tc0080vco_sprram_r(tc0080vco, offs, 0xffff) & 0x0c00) >> 10];
if (tile_offs) 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 (x0 >= 0x200) x0 -= 0x400;
if (y0 >= 0x200) y0 -= 0x400; if (y0 >= 0x200) y0 -= 0x400;
if (TC0080VCO_flipscreen) if (tc0080vco_flipscreen_r(tc0080vco))
{ {
x0 = 497 - x0; x0 = 497 - x0;
y0 = 498 - y0; y0 = 498 - y0;
@ -144,21 +124,21 @@ static void syvalion_draw_sprites(running_machine *machine,bitmap_t *bitmap,cons
} }
y = y0; y = y0;
for ( j = 0 ; j < ysize ; j ++ ) for (j = 0 ; j < ysize ; j++)
{ {
x = x0; x = x0;
for (k = 0 ; k < 4 ; k ++ ) for (k = 0 ; k < 4 ; k++)
{ {
if (tile_offs >= 0x1000) if (tile_offs >= 0x1000)
{ {
int tile, color, flipx, flipy; int tile, color, flipx, flipy;
tile = TC0080VCO_chain_ram_0[tile_offs] & 0x7fff; tile = tc0080vco_cram_0_r(tc0080vco, tile_offs, 0xffff) & 0x7fff;
color = TC0080VCO_chain_ram_1[tile_offs] & 0x001f; color = tc0080vco_cram_1_r(tc0080vco, tile_offs, 0xffff) & 0x001f;
flipx = TC0080VCO_chain_ram_1[tile_offs] & 0x0040; flipx = tc0080vco_cram_1_r(tc0080vco, tile_offs, 0xffff) & 0x0040;
flipy = TC0080VCO_chain_ram_1[tile_offs] & 0x0080; flipy = tc0080vco_cram_1_r(tc0080vco, tile_offs, 0xffff) & 0x0080;
if (TC0080VCO_flipscreen) if (tc0080vco_flipscreen_r(tc0080vco))
{ {
flipx ^= 0x0040; flipx ^= 0x0040;
flipy ^= 0x0080; 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) 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 /* Y chain size is 16/32?/64/64? pixels. X chain size
is always 64 pixels. */ 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 == 0) continue;
if (offs >= 0x01b0 && priority == 1) continue; if (offs >= 0x01b0 && priority == 1) continue;
x0 = TC0080VCO_spriteram[offs + 1] & 0x3ff; x0 = tc0080vco_sprram_r(tc0080vco, offs + 1, 0xffff) & 0x3ff;
y0 = TC0080VCO_spriteram[offs + 0] & 0x3ff; y0 = tc0080vco_sprram_r(tc0080vco, offs + 0, 0xffff) & 0x3ff;
zoomx = (TC0080VCO_spriteram[offs + 2] & 0x7f00) >> 8; zoomx = (tc0080vco_sprram_r(tc0080vco, offs + 2, 0xffff) & 0x7f00) >> 8;
zoomy = (TC0080VCO_spriteram[offs + 2] & 0x007f); zoomy = (tc0080vco_sprram_r(tc0080vco, offs + 2, 0xffff) & 0x007f);
tile_offs = (TC0080VCO_spriteram[offs + 3] & 0x1fff) << 2; tile_offs = (tc0080vco_sprram_r(tc0080vco, offs + 3, 0xffff) & 0x1fff) << 2;
ysize = size[ ( TC0080VCO_spriteram[ offs ] & 0x0c00 ) >> 10 ]; ysize = size[(tc0080vco_sprram_r(tc0080vco, offs, 0xffff) & 0x0c00) >> 10];
if (tile_offs) 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 (x0 >= 0x200) x0 -= 0x400;
if (y0 >= 0x200) y0 -= 0x400; if (y0 >= 0x200) y0 -= 0x400;
if (TC0080VCO_flipscreen) if (tc0080vco_flipscreen_r(tc0080vco))
{ {
x0 = 497 - x0; x0 = 497 - x0;
y0 = 498 - y0; y0 = 498 - y0;
@ -264,12 +245,12 @@ static void recordbr_draw_sprites(running_machine *machine, bitmap_t *bitmap, co
{ {
int tile, color, flipx, flipy; int tile, color, flipx, flipy;
tile = TC0080VCO_chain_ram_0[tile_offs] & 0x7fff; tile = tc0080vco_cram_0_r(tc0080vco, tile_offs, 0xffff) & 0x7fff;
color = TC0080VCO_chain_ram_1[tile_offs] & 0x001f; color = tc0080vco_cram_1_r(tc0080vco, tile_offs, 0xffff) & 0x001f;
flipx = TC0080VCO_chain_ram_1[tile_offs] & 0x0040; flipx = tc0080vco_cram_1_r(tc0080vco, tile_offs, 0xffff) & 0x0040;
flipy = TC0080VCO_chain_ram_1[tile_offs] & 0x0080; flipy = tc0080vco_cram_1_r(tc0080vco, tile_offs, 0xffff) & 0x0080;
if (TC0080VCO_flipscreen) if (tc0080vco_flipscreen_r(tc0080vco))
{ {
flipx ^= 0x0040; flipx ^= 0x0040;
flipy ^= 0x0080; 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) 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 /* Y chain size is 16/32?/64/64? pixels. X chain size
is always 64 pixels. */ 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) for (offs = 0x03f8 / 2 ; offs >= 0 ; offs -= 0x008 / 2)
{ {
x0 = TC0080VCO_spriteram[offs + 1] & 0x3ff; x0 = tc0080vco_sprram_r(tc0080vco, offs + 1, 0xffff) & 0x3ff;
y0 = TC0080VCO_spriteram[offs + 0] & 0x3ff; y0 = tc0080vco_sprram_r(tc0080vco, offs + 0, 0xffff) & 0x3ff;
zoomx = (TC0080VCO_spriteram[offs + 2] & 0x7f00) >> 8; zoomx = (tc0080vco_sprram_r(tc0080vco, offs + 2, 0xffff) & 0x7f00) >> 8;
tile_offs = (TC0080VCO_spriteram[offs + 3] & 0x1fff) << 2; tile_offs = (tc0080vco_sprram_r(tc0080vco, offs + 3, 0xffff) & 0x1fff) << 2;
pribit = (TC0080VCO_spriteram[offs + 0] & 0x1000) >> 12; pribit = (tc0080vco_sprram_r(tc0080vco, offs + 0, 0xffff) & 0x1000) >> 12;
ysize = size[ ( TC0080VCO_spriteram[ offs ] & 0x0c00 ) >> 10 ]; ysize = size[(tc0080vco_sprram_r(tc0080vco, offs, 0xffff) & 0x0c00) >> 10];
if (tile_offs) if (tile_offs)
{ {
@ -334,13 +316,13 @@ static void dleague_draw_sprites(running_machine *machine, bitmap_t *bitmap, con
zx = (dx + ex) << 12; zx = (dx + ex) << 12;
} }
if (TC0080VCO_scroll_ram[0x0002] & 0x8000) if (tc0080vco_scrram_r(tc0080vco, 0x0002, 0xffff) & 0x8000)
pribit = 1; pribit = 1;
if (x0 >= 0x200) x0 -= 0x400; if (x0 >= 0x200) x0 -= 0x400;
if (y0 >= 0x200) y0 -= 0x400; if (y0 >= 0x200) y0 -= 0x400;
if (TC0080VCO_flipscreen) if (tc0080vco_flipscreen_r(tc0080vco))
{ {
x0 = 497 - x0; x0 = 497 - x0;
y0 = 498 - y0; y0 = 498 - y0;
@ -352,24 +334,25 @@ static void dleague_draw_sprites(running_machine *machine, bitmap_t *bitmap, con
y0 += 2; y0 += 2;
} }
if ( priority == pribit ) if (priority == pribit)
{ {
y = y0; y = y0;
for ( j = 0 ; j < ysize ; j ++ ) for (j = 0; j < ysize; j ++)
{ {
x = x0; x = x0;
for (k = 0 ; k < 4 ; k ++ ) for (k = 0; k < 4; k ++ )
{ {
if (tile_offs >= 0x1000) /* or pitcher gets blanked */ if (tile_offs >= 0x1000) /* or pitcher gets blanked */
{ {
int tile, color, flipx, flipy; int tile, color, flipx, flipy;
tile = TC0080VCO_chain_ram_0[tile_offs] & 0x7fff; tile = tc0080vco_cram_0_r(tc0080vco, tile_offs, 0xffff) & 0x7fff;
color = TC0080VCO_chain_ram_1[tile_offs] & 0x001f; color = tc0080vco_cram_1_r(tc0080vco, tile_offs, 0xffff) & 0x001f;
flipx = TC0080VCO_chain_ram_1[tile_offs] & 0x0040; flipx = tc0080vco_cram_1_r(tc0080vco, tile_offs, 0xffff) & 0x0040;
flipy = TC0080VCO_chain_ram_1[tile_offs] & 0x0080; flipy = tc0080vco_cram_1_r(tc0080vco, tile_offs, 0xffff) & 0x0080;
if (TC0080VCO_flipscreen)
if (tc0080vco_flipscreen_r(tc0080vco))
{ {
flipx ^= 0x0040; flipx ^= 0x0040;
flipy ^= 0x0080; flipy ^= 0x0080;
@ -409,23 +392,27 @@ static void taitoh_log_vram(running_machine *machine)
VIDEO_UPDATE( syvalion ) 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); taitoh_log_vram(screen->machine);
bitmap_fill(bitmap, cliprect, 0); 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);
TC0080VCO_tilemap_draw(screen->machine,bitmap,cliprect,1,0,0); tc0080vco_tilemap_draw(tc0080vco, bitmap, cliprect, 1, 0, 0);
syvalion_draw_sprites(screen->machine,bitmap,cliprect); 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; return 0;
} }
VIDEO_UPDATE( recordbr ) 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); taitoh_log_vram(screen->machine);
@ -433,28 +420,30 @@ VIDEO_UPDATE( recordbr )
#ifdef MAME_DEBUG #ifdef MAME_DEBUG
if ( !input_code_pressed(screen->machine, KEYCODE_A) ) 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) ) if ( !input_code_pressed(screen->machine, KEYCODE_S) )
recordbr_draw_sprites(screen->machine,bitmap,cliprect,0); recordbr_draw_sprites(screen->machine, bitmap, cliprect, 0);
if ( !input_code_pressed(screen->machine, KEYCODE_D) ) 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) ) if ( !input_code_pressed(screen->machine, KEYCODE_F) )
recordbr_draw_sprites(screen->machine,bitmap,cliprect,1); recordbr_draw_sprites(screen->machine, bitmap, cliprect, 1);
#else #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); 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); recordbr_draw_sprites(screen->machine, bitmap, cliprect, 1);
#endif #endif
TC0080VCO_tilemap_draw(screen->machine,bitmap,cliprect,2,0,0); tc0080vco_tilemap_draw(tc0080vco, bitmap, cliprect, 2, 0, 0);
return 0; return 0;
} }
VIDEO_UPDATE( dleague ) 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); taitoh_log_vram(screen->machine);
@ -462,21 +451,21 @@ VIDEO_UPDATE( dleague )
#ifdef MAME_DEBUG #ifdef MAME_DEBUG
if ( !input_code_pressed(screen->machine, KEYCODE_A) ) 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) ) if ( !input_code_pressed(screen->machine, KEYCODE_S) )
dleague_draw_sprites(screen->machine,bitmap,cliprect,0); dleague_draw_sprites(screen->machine, bitmap, cliprect, 0);
if ( !input_code_pressed(screen->machine, KEYCODE_D) ) 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) ) if ( !input_code_pressed(screen->machine, KEYCODE_F) )
dleague_draw_sprites(screen->machine,bitmap,cliprect,1); dleague_draw_sprites(screen->machine, bitmap, cliprect, 1);
#else #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); 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); dleague_draw_sprites (screen->machine, bitmap, cliprect, 1);
#endif #endif
TC0080VCO_tilemap_draw(screen->machine,bitmap,cliprect,2,0,0); tc0080vco_tilemap_draw(tc0080vco, bitmap, cliprect, 2, 0, 0);
return 0; return 0;
} }

View File

@ -5,7 +5,7 @@ Based on taito_h.c
***************************************************************************/ ***************************************************************************/
#include "driver.h" #include "driver.h"
#include "taitoic.h" #include "taiicdev.h"
/* These are hand-tuned values */ /* 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 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) 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 /* Y chain size is 16/32?/64/64? pixels. X chain size
is always 64 pixels. */ 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 == 0) continue;
if (offs >= 0x01b0 && priority == 1) continue; if (offs >= 0x01b0 && priority == 1) continue;
x0 = TC0080VCO_spriteram[offs + 1] & 0x3ff; x0 = tc0080vco_sprram_r(tc0080vco, offs + 1, 0xffff) & 0x3ff;
y0 = TC0080VCO_spriteram[offs + 0] & 0x3ff; y0 = tc0080vco_sprram_r(tc0080vco, offs + 0, 0xffff) & 0x3ff;
zoomx = (TC0080VCO_spriteram[offs + 2] & 0x7f00) >> 8; zoomx = (tc0080vco_sprram_r(tc0080vco, offs + 2, 0xffff) & 0x7f00) >> 8;
zoomy = (TC0080VCO_spriteram[offs + 2] & 0x007f); zoomy = (tc0080vco_sprram_r(tc0080vco, offs + 2, 0xffff) & 0x007f);
tile_offs = (TC0080VCO_spriteram[offs + 3] & 0x1fff) << 2; tile_offs = (tc0080vco_sprram_r(tc0080vco, offs + 3, 0xffff) & 0x1fff) << 2;
ysize = size[ ( TC0080VCO_spriteram[ offs ] & 0x0c00 ) >> 10 ]; ysize = size[(tc0080vco_sprram_r(tc0080vco, offs, 0xffff) & 0x0c00) >> 10];
if (tile_offs) 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 (x0 >= 0x200) x0 -= 0x400;
if (y0 >= 0x200) y0 -= 0x400; if (y0 >= 0x200) y0 -= 0x400;
if (TC0080VCO_flipscreen) if (tc0080vco_flipscreen_r(tc0080vco))
{ {
x0 = 497 - x0; x0 = 497 - x0;
y0 = 498 - y0; y0 = 498 - y0;
@ -111,12 +107,12 @@ static void parentj_draw_sprites(running_machine *machine, bitmap_t *bitmap, con
{ {
int tile, color, flipx, flipy; int tile, color, flipx, flipy;
tile = TC0080VCO_chain_ram_0[tile_offs] & 0x7fff; tile = tc0080vco_cram_0_r(tc0080vco, tile_offs, 0xffff) & 0x7fff;
color = TC0080VCO_chain_ram_1[tile_offs] & 0x001f; color = tc0080vco_cram_1_r(tc0080vco, tile_offs, 0xffff) & 0x001f;
flipx = TC0080VCO_chain_ram_1[tile_offs] & 0x0040; flipx = tc0080vco_cram_1_r(tc0080vco, tile_offs, 0xffff) & 0x0040;
flipy = TC0080VCO_chain_ram_1[tile_offs] & 0x0080; flipy = tc0080vco_cram_1_r(tc0080vco, tile_offs, 0xffff) & 0x0080;
if (TC0080VCO_flipscreen) if (tc0080vco_flipscreen_r(tc0080vco))
{ {
flipx ^= 0x0040; flipx ^= 0x0040;
flipy ^= 0x0080; flipy ^= 0x0080;
@ -143,13 +139,14 @@ static void parentj_draw_sprites(running_machine *machine, bitmap_t *bitmap, con
VIDEO_UPDATE( parentj ) 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); 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, 0);
parentj_draw_sprites(screen->machine,bitmap,cliprect,1); parentj_draw_sprites(screen->machine, bitmap, cliprect, 1);
TC0080VCO_tilemap_draw(screen->machine,bitmap,cliprect,1,0,0); tc0080vco_tilemap_draw(tc0080vco, bitmap, cliprect, 1, 0, 0);
TC0080VCO_tilemap_draw(screen->machine,bitmap,cliprect,2,0,0); tc0080vco_tilemap_draw(tc0080vco, bitmap, cliprect, 2, 0, 0);
return 0; return 0;
} }

View File

@ -46,7 +46,7 @@ sprite RAM
***************************************************************************/ ***************************************************************************/
#include "driver.h" #include "driver.h"
#include "taitoic.h" #include "taiicdev.h"
/* These are hand-tuned values */ /* 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 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 Screen refresh
***************************************************************************/ ***************************************************************************/
static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect, int priority) 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 /* Y chain size is 16/32?/64/64? pixels. X chain size
is always 64 pixels. */ is always 64 pixels. */
@ -93,17 +82,17 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const recta
int tile_offs; /* sprite chain offset */ int tile_offs; /* sprite chain offset */
int zoomx, zoomy; /* zoom value */ int zoomx, zoomy; /* zoom value */
for (offs = 0x03f8 / 2 ; offs >= 0 ; offs -= 0x008 / 2) for (offs = 0x03f8 / 2; offs >= 0; offs -= 0x008 / 2)
{ {
if (offs < 0x01b0 && priority == 0) continue; if (offs < 0x01b0 && priority == 0) continue;
if (offs >= 0x01b0 && priority == 1) continue; if (offs >= 0x01b0 && priority == 1) continue;
x0 = TC0080VCO_spriteram[offs + 1] & 0x3ff; x0 = tc0080vco_sprram_r(tc0080vco, offs + 1, 0xffff) & 0x3ff;
y0 = TC0080VCO_spriteram[offs + 0] & 0x3ff; y0 = tc0080vco_sprram_r(tc0080vco, offs + 0, 0xffff) & 0x3ff;
zoomx = (TC0080VCO_spriteram[offs + 2] & 0x7f00) >> 8; zoomx = (tc0080vco_sprram_r(tc0080vco, offs + 2, 0xffff) & 0x7f00) >> 8;
zoomy = (TC0080VCO_spriteram[offs + 2] & 0x007f); zoomy = (tc0080vco_sprram_r(tc0080vco, offs + 2, 0xffff) & 0x007f);
tile_offs = (TC0080VCO_spriteram[offs + 3] & 0x1fff) << 2; tile_offs = (tc0080vco_sprram_r(tc0080vco, offs + 3, 0xffff) & 0x1fff) << 2;
ysize = size[ ( TC0080VCO_spriteram[ offs ] & 0x0c00 ) >> 10 ]; ysize = size[(tc0080vco_sprram_r(tc0080vco, offs, 0xffff) & 0x0c00) >> 10];
if (tile_offs) 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 (x0 >= 0x200) x0 -= 0x400;
if (y0 >= 0x200) y0 -= 0x400; if (y0 >= 0x200) y0 -= 0x400;
if (TC0080VCO_flipscreen) if (tc0080vco_flipscreen_r(tc0080vco))
{ {
x0 = 497 - x0; x0 = 497 - x0;
y0 = 498 - y0; y0 = 498 - y0;
@ -153,21 +142,21 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const recta
} }
y = y0; y = y0;
for (j = 0 ; j < ysize ; j ++) for (j = 0; j < ysize; j ++)
{ {
x = x0; x = x0;
for (k = 0 ; k < 4 ; k ++) for (k = 0; k < 4; k ++)
{ {
if (tile_offs >= 0x1000) if (tile_offs >= 0x1000)
{ {
int tile, color, flipx, flipy; int tile, color, flipx, flipy;
tile = TC0080VCO_chain_ram_0[tile_offs] & 0x7fff; tile = tc0080vco_cram_0_r(tc0080vco, tile_offs, 0xffff) & 0x7fff;
color = TC0080VCO_chain_ram_1[tile_offs] & 0x001f; color = tc0080vco_cram_1_r(tc0080vco, tile_offs, 0xffff) & 0x001f;
flipx = TC0080VCO_chain_ram_1[tile_offs] & 0x0040; flipx = tc0080vco_cram_1_r(tc0080vco, tile_offs, 0xffff) & 0x0040;
flipy = TC0080VCO_chain_ram_1[tile_offs] & 0x0080; flipy = tc0080vco_cram_1_r(tc0080vco, tile_offs, 0xffff) & 0x0080;
if (TC0080VCO_flipscreen) if (tc0080vco_flipscreen_r(tc0080vco))
{ {
flipx ^= 0x0040; flipx ^= 0x0040;
flipy ^= 0x0080; flipy ^= 0x0080;
@ -356,29 +345,32 @@ static void fill_poly(bitmap_t *bitmap, const struct poly *q)
VIDEO_UPDATE( taitoair ) 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); bitmap_fill(bitmap, cliprect, 0x41);
#ifdef MAME_DEBUG #ifdef MAME_DEBUG
if ( !input_code_pressed(screen->machine, KEYCODE_A) ) 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) ) if ( !input_code_pressed(screen->machine, KEYCODE_S) )
draw_sprites(screen->machine,bitmap,cliprect,0); draw_sprites(screen->machine, bitmap, cliprect, 0);
if ( !input_code_pressed(screen->machine, KEYCODE_D) ) 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) ) if ( !input_code_pressed(screen->machine, KEYCODE_F) )
draw_sprites(screen->machine,bitmap,cliprect,1); draw_sprites(screen->machine, bitmap, cliprect, 1);
#else #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); 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); draw_sprites(screen->machine, bitmap, cliprect, 1);
#endif #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; int adr = 0x3fff;
struct poly q; struct poly q;
view.x1 = cliprect->min_x; view.x1 = cliprect->min_x;
@ -386,16 +378,19 @@ VIDEO_UPDATE( taitoair )
view.x2 = cliprect->max_x; view.x2 = cliprect->max_x;
view.y2 = cliprect->max_y; 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; 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); logerror("quad: unknown value %04x at %04x\n", taitoair_line_ram[adr], adr);
break; break;
} }
q.col = (taitoair_line_ram[adr] & 0x7fff) + 0x300; q.col = (taitoair_line_ram[adr] & 0x7fff) + 0x300;
adr--; adr--;
pcount = 0; 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].y = taitoair_line_ram[adr]+3*16;
q.p[pcount].x = taitoair_line_ram[adr-1]; q.p[pcount].x = taitoair_line_ram[adr-1];
pcount++; pcount++;

View File

@ -1,40 +1,14 @@
#include "driver.h" #include "driver.h"
#include "video/taitoic.h" #include "video/taiicdev.h"
#define TC0100SCN_GFX_NUM 1
/**********************************************************/ /**********************************************************/
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 ) 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,27 +84,28 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap,const rectan
VIDEO_UPDATE( warriorb ) VIDEO_UPDATE( warriorb )
{ {
int xoffs = 0, screen_number = -1; int xoffs = 0;
UINT8 layer[3], nodraw; UINT8 layer[3], nodraw;
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");
const device_config *tc0100scn = NULL;
if (screen == left_screen) if (screen == left_screen)
{ {
xoffs = 40*8*0; xoffs = 40 * 8 * 0;
screen_number = 0; tc0100scn = devtag_get_device(screen->machine, "tc0100scn_1");
} }
else if (screen == right_screen) else if (screen == right_screen)
{ {
xoffs = 40*8*1; 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[1] = layer[0] ^ 1;
layer[2] = 2; layer[2] = 2;
/* Clear priority bitmap */ /* Clear priority bitmap */
@ -138,18 +113,19 @@ VIDEO_UPDATE( warriorb )
/* chip 0 does tilemaps on the left, chip 1 does the ones on the right */ /* chip 0 does tilemaps on the left, chip 1 does the ones on the right */
// draw bottom layer // 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 */ /* 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 // 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 */ /* Sprites can be under/over the layer below text layer */
draw_sprites(screen->machine, bitmap,cliprect,xoffs,8); // draw sprites draw_sprites(screen->machine, bitmap, cliprect, xoffs, 8); // draw sprites
// draw top(text) 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; return 0;
} }

View File

@ -1,7 +1,5 @@
#include "driver.h" #include "driver.h"
#include "video/taitoic.h" #include "video/taiicdev.h"
#define TC0100SCN_GFX_NUM 1
static tilemap_t *wgp_piv_tilemap[3]; static tilemap_t *wgp_piv_tilemap[3];
@ -47,46 +45,41 @@ 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)
{ {
wgp_piv_tilemap[0] = tilemap_create(machine, get_piv0_tile_info,tilemap_scan_rows,16,16,64,64); const device_config *tc0100scn = devtag_get_device(machine, "tc0100scn");
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); 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);
if (TC0110PCR_mask(machine) & 1) wgp_piv_tilemap[2] = tilemap_create(machine, get_piv2_tile_info, tilemap_scan_rows, 16, 16, 64, 64);
TC0110PCR_vh_start(machine);
wgp_piv_xoffs = piv_xoffs; wgp_piv_xoffs = piv_xoffs;
wgp_piv_yoffs = piv_yoffs; wgp_piv_yoffs = piv_yoffs;
tilemap_set_transparent_pen( wgp_piv_tilemap[0],0 ); tilemap_set_transparent_pen(wgp_piv_tilemap[0], 0);
tilemap_set_transparent_pen( wgp_piv_tilemap[1],0 ); tilemap_set_transparent_pen(wgp_piv_tilemap[1], 0);
tilemap_set_transparent_pen( wgp_piv_tilemap[2],0 ); tilemap_set_transparent_pen(wgp_piv_tilemap[2], 0);
/* flipscreen n/a */ /* flipscreen n/a */
tilemap_set_scrolldx( wgp_piv_tilemap[0],-piv_xoffs,0 ); tilemap_set_scrolldx(wgp_piv_tilemap[0], -piv_xoffs, 0);
tilemap_set_scrolldx( wgp_piv_tilemap[1],-piv_xoffs,0 ); tilemap_set_scrolldx(wgp_piv_tilemap[1], -piv_xoffs, 0);
tilemap_set_scrolldx( wgp_piv_tilemap[2],-piv_xoffs,0 ); tilemap_set_scrolldx(wgp_piv_tilemap[2], -piv_xoffs, 0);
tilemap_set_scrolldy( wgp_piv_tilemap[0],-piv_yoffs,0 ); tilemap_set_scrolldy(wgp_piv_tilemap[0], -piv_yoffs, 0);
tilemap_set_scrolldy( wgp_piv_tilemap[1],-piv_yoffs,0 ); tilemap_set_scrolldy(wgp_piv_tilemap[1], -piv_yoffs, 0);
tilemap_set_scrolldy( wgp_piv_tilemap[2],-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 /* We don't need tilemap_set_scroll_rows, as the custom draw routine applies rowscroll manually */
applies rowscroll manually */ tc0100scn_set_colbanks(tc0100scn, 0x80, 0xc0, 0x40);
TC0100SCN_set_colbanks(0x80,0xc0,0x40);
} }
VIDEO_START( wgp ) VIDEO_START( wgp )
{ {
wgp_core_vh_start(machine, 0,0,32,16); wgp_core_vh_start(machine, 32, 16);
} }
VIDEO_START( wgp2 ) 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 ) VIDEO_UPDATE( wgp )
{ {
const device_config *tc0100scn = devtag_get_device(screen->machine, "tc0100scn");
int i; int i;
UINT8 layer[3]; UINT8 layer[3];
@ -685,7 +679,7 @@ VIDEO_UPDATE( wgp )
tilemap_set_scrolly(wgp_piv_tilemap[i], 0, wgp_piv_scrolly[i]); 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); bitmap_fill(bitmap, cliprect, 0);
@ -702,36 +696,34 @@ VIDEO_UPDATE( wgp )
/* We should draw the following on a 1024x1024 bitmap... */ /* We should draw the following on a 1024x1024 bitmap... */
#ifdef MAME_DEBUG #ifdef MAME_DEBUG
if (dislayer[layer[0]]==0) if (dislayer[layer[0]] == 0)
#endif #endif
wgp_piv_layer_draw(screen->machine,bitmap,cliprect,layer[0],TILEMAP_DRAW_OPAQUE,1); wgp_piv_layer_draw(screen->machine, bitmap, cliprect, layer[0], TILEMAP_DRAW_OPAQUE, 1);
#ifdef MAME_DEBUG #ifdef MAME_DEBUG
if (dislayer[layer[1]]==0) if (dislayer[layer[1]] == 0)
#endif #endif
wgp_piv_layer_draw(screen->machine,bitmap,cliprect,layer[1],0,2); wgp_piv_layer_draw(screen->machine, bitmap, cliprect, layer[1], 0, 2);
#ifdef MAME_DEBUG #ifdef MAME_DEBUG
if (dislayer[layer[2]]==0) if (dislayer[layer[2]] == 0)
#endif #endif
wgp_piv_layer_draw(screen->machine,bitmap,cliprect,layer[2],0,4); wgp_piv_layer_draw(screen->machine, bitmap, cliprect, layer[2], 0, 4);
draw_sprites(screen->machine, bitmap,cliprect,16); draw_sprites(screen->machine, bitmap, cliprect, 16);
/* ... then here we should apply rotation from wgp_sate_ctrl[] to /* ... then here we should apply rotation from wgp_sate_ctrl[] to the bitmap before we draw the TC0100SCN layers on it */
the bitmap before we draw the TC0100SCN layers on it */ layer[0] = tc0100scn_bottomlayer(tc0100scn);
layer[1] = layer[0] ^ 1;
layer[0] = TC0100SCN_bottomlayer(0);
layer[1] = layer[0]^1;
layer[2] = 2; 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 #ifdef MAME_DEBUG
if (dislayer[3]==0) if (dislayer[3] == 0)
#endif #endif
TC0100SCN_tilemap_draw(screen->machine,bitmap,cliprect,0,layer[1],0,0); tc0100scn_tilemap_draw(tc0100scn, bitmap, cliprect, layer[1], 0, 0);
TC0100SCN_tilemap_draw(screen->machine,bitmap,cliprect,0,layer[2],0,0); tc0100scn_tilemap_draw(tc0100scn, bitmap, cliprect, layer[2], 0, 0);
#if 0 #if 0
{ {