mirror of
https://github.com/holub/mame
synced 2025-10-06 09:00:04 +03:00
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:
parent
7858c436fc
commit
34f4656cca
@ -216,7 +216,7 @@ DIP locations verified for:
|
||||
#include "cpu/z80/z80.h"
|
||||
#include "cpu/m68000/m68000.h"
|
||||
#include "includes/taitoipt.h"
|
||||
#include "video/taitoic.h"
|
||||
#include "video/taiicdev.h"
|
||||
#include "machine/taitoio.h"
|
||||
#include "audio/taitosnd.h"
|
||||
#include "sound/2610intf.h"
|
||||
@ -226,9 +226,6 @@ DIP locations verified for:
|
||||
|
||||
WRITE16_HANDLER( asuka_spritectrl_w );
|
||||
|
||||
VIDEO_START( asuka );
|
||||
VIDEO_START( galmedes );
|
||||
VIDEO_START( cadash );
|
||||
VIDEO_UPDATE( asuka );
|
||||
VIDEO_UPDATE( bonzeadv );
|
||||
|
||||
@ -325,7 +322,7 @@ static ADDRESS_MAP_START( bonzeadv_map, ADDRESS_SPACE_PROGRAM, 16 )
|
||||
AM_RANGE(0x000000, 0x03ffff) AM_ROM
|
||||
AM_RANGE(0x080000, 0x0fffff) AM_ROM
|
||||
AM_RANGE(0x10c000, 0x10ffff) AM_RAM
|
||||
AM_RANGE(0x200000, 0x200007) AM_READWRITE(TC0110PCR_word_r, TC0110PCR_step1_word_w)
|
||||
AM_RANGE(0x200000, 0x200007) AM_DEVREADWRITE("tc0110pcr", tc0110pcr_word_r, tc0110pcr_step1_word_w)
|
||||
AM_RANGE(0x390000, 0x390001) AM_READ_PORT("DSWA")
|
||||
AM_RANGE(0x3a0000, 0x3a0001) AM_WRITE(asuka_spritectrl_w)
|
||||
AM_RANGE(0x3b0000, 0x3b0001) AM_READ_PORT("DSWB")
|
||||
@ -336,24 +333,24 @@ static ADDRESS_MAP_START( bonzeadv_map, ADDRESS_SPACE_PROGRAM, 16 )
|
||||
AM_RANGE(0x800000, 0x8007ff) AM_READWRITE(bonzeadv_cchip_ram_r, bonzeadv_cchip_ram_w)
|
||||
AM_RANGE(0x800802, 0x800803) AM_READWRITE(bonzeadv_cchip_ctrl_r, bonzeadv_cchip_ctrl_w)
|
||||
AM_RANGE(0x800c00, 0x800c01) AM_WRITE(bonzeadv_cchip_bank_w)
|
||||
AM_RANGE(0xc00000, 0xc0ffff) AM_READWRITE(TC0100SCN_word_0_r, TC0100SCN_word_0_w) /* tilemaps */
|
||||
AM_RANGE(0xc20000, 0xc2000f) AM_READWRITE(TC0100SCN_ctrl_word_0_r, TC0100SCN_ctrl_word_0_w)
|
||||
AM_RANGE(0xd00000, 0xd03fff) AM_READWRITE(PC090OJ_word_0_r, PC090OJ_word_0_w) /* sprite ram */
|
||||
AM_RANGE(0xc00000, 0xc0ffff) AM_DEVREADWRITE("tc0100scn", tc0100scn_word_r, tc0100scn_word_w) /* tilemaps */
|
||||
AM_RANGE(0xc20000, 0xc2000f) AM_DEVREADWRITE("tc0100scn", tc0100scn_ctrl_word_r, tc0100scn_ctrl_word_w)
|
||||
AM_RANGE(0xd00000, 0xd03fff) AM_DEVREADWRITE("pc090oj", pc090oj_word_r, pc090oj_word_w) /* sprite ram */
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( asuka_map, ADDRESS_SPACE_PROGRAM, 16 )
|
||||
AM_RANGE(0x000000, 0x0fffff) AM_ROM
|
||||
AM_RANGE(0x100000, 0x103fff) AM_RAM
|
||||
AM_RANGE(0x1076f0, 0x1076f1) AM_READNOP /* Mofflott init does dummy reads here */
|
||||
AM_RANGE(0x200000, 0x20000f) AM_READWRITE(TC0110PCR_word_r, TC0110PCR_step1_word_w)
|
||||
AM_RANGE(0x200000, 0x20000f) AM_DEVREADWRITE("tc0110pcr", tc0110pcr_word_r, tc0110pcr_step1_word_w)
|
||||
AM_RANGE(0x3a0000, 0x3a0003) AM_WRITE(asuka_spritectrl_w)
|
||||
AM_RANGE(0x3e0000, 0x3e0001) AM_READNOP AM_WRITE8(taitosound_port_w, 0x00ff)
|
||||
AM_RANGE(0x3e0002, 0x3e0003) AM_READWRITE8(taitosound_comm_r, taitosound_comm_w, 0x00ff)
|
||||
AM_RANGE(0x400000, 0x40000f) AM_DEVREADWRITE8("tc0220ioc", tc0220ioc_r, tc0220ioc_w, 0x00ff)
|
||||
AM_RANGE(0xc00000, 0xc0ffff) AM_READWRITE(TC0100SCN_word_0_r, TC0100SCN_word_0_w) /* tilemaps */
|
||||
AM_RANGE(0xc00000, 0xc0ffff) AM_DEVREADWRITE("tc0100scn", tc0100scn_word_r, tc0100scn_word_w) /* tilemaps */
|
||||
AM_RANGE(0xc10000, 0xc103ff) AM_WRITENOP /* error in Asuka init code */
|
||||
AM_RANGE(0xc20000, 0xc2000f) AM_READWRITE(TC0100SCN_ctrl_word_0_r, TC0100SCN_ctrl_word_0_w)
|
||||
AM_RANGE(0xd00000, 0xd03fff) AM_READWRITE(PC090OJ_word_0_r, PC090OJ_word_0_w) /* sprite ram */
|
||||
AM_RANGE(0xc20000, 0xc2000f) AM_DEVREADWRITE("tc0100scn", tc0100scn_ctrl_word_r, tc0100scn_ctrl_word_w)
|
||||
AM_RANGE(0xd00000, 0xd03fff) AM_DEVREADWRITE("pc090oj", pc090oj_word_r, pc090oj_word_w) /* sprite ram */
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( cadash_map, ADDRESS_SPACE_PROGRAM, 16 )
|
||||
@ -364,25 +361,25 @@ static ADDRESS_MAP_START( cadash_map, ADDRESS_SPACE_PROGRAM, 16 )
|
||||
AM_RANGE(0x100000, 0x107fff) AM_RAM
|
||||
AM_RANGE(0x800000, 0x800fff) AM_RAM /* network ram */
|
||||
AM_RANGE(0x900000, 0x90000f) AM_DEVREADWRITE8("tc0220ioc", tc0220ioc_r, tc0220ioc_w, 0x00ff)
|
||||
AM_RANGE(0xa00000, 0xa0000f) AM_READWRITE(TC0110PCR_word_r, TC0110PCR_step1_4bpg_word_w)
|
||||
AM_RANGE(0xb00000, 0xb03fff) AM_READWRITE(PC090OJ_word_0_r, PC090OJ_word_0_w) /* sprite ram */
|
||||
AM_RANGE(0xc00000, 0xc0ffff) AM_READWRITE(TC0100SCN_word_0_r, TC0100SCN_word_0_w) /* tilemaps */
|
||||
AM_RANGE(0xc20000, 0xc2000f) AM_READWRITE(TC0100SCN_ctrl_word_0_r, TC0100SCN_ctrl_word_0_w)
|
||||
AM_RANGE(0xa00000, 0xa0000f) AM_DEVREADWRITE("tc0110pcr", tc0110pcr_word_r, tc0110pcr_step1_4bpg_word_w)
|
||||
AM_RANGE(0xb00000, 0xb03fff) AM_DEVREADWRITE("pc090oj", pc090oj_word_r, pc090oj_word_w) /* sprite ram */
|
||||
AM_RANGE(0xc00000, 0xc0ffff) AM_DEVREADWRITE("tc0100scn", tc0100scn_word_r, tc0100scn_word_w) /* tilemaps */
|
||||
AM_RANGE(0xc20000, 0xc2000f) AM_DEVREADWRITE("tc0100scn", tc0100scn_ctrl_word_r, tc0100scn_ctrl_word_w)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( eto_map, ADDRESS_SPACE_PROGRAM, 16 ) /* N.B. tc100scn mirror overlaps spriteram */
|
||||
AM_RANGE(0x000000, 0x0fffff) AM_ROM
|
||||
AM_RANGE(0x100000, 0x10000f) AM_READWRITE(TC0110PCR_word_r, TC0110PCR_step1_word_w)
|
||||
AM_RANGE(0x100000, 0x10000f) AM_DEVREADWRITE("tc0110pcr", tc0110pcr_word_r, tc0110pcr_step1_word_w)
|
||||
AM_RANGE(0x200000, 0x203fff) AM_RAM
|
||||
AM_RANGE(0x300000, 0x30000f) AM_DEVREADWRITE8("tc0220ioc", tc0220ioc_r, tc0220ioc_w, 0x00ff)
|
||||
AM_RANGE(0x400000, 0x40000f) AM_DEVREAD8("tc0220ioc", tc0220ioc_r, 0x00ff) /* service mode mirror */
|
||||
AM_RANGE(0x4a0000, 0x4a0003) AM_WRITE(asuka_spritectrl_w)
|
||||
AM_RANGE(0x4e0000, 0x4e0001) AM_READNOP AM_WRITE8(taitosound_port_w, 0x00ff)
|
||||
AM_RANGE(0x4e0002, 0x4e0003) AM_READWRITE8(taitosound_comm_r, taitosound_comm_w, 0x00ff)
|
||||
AM_RANGE(0xc00000, 0xc03fff) AM_READWRITE(PC090OJ_word_0_r, PC090OJ_word_0_w) /* sprite ram */
|
||||
AM_RANGE(0xc00000, 0xc0ffff) AM_WRITE(TC0100SCN_word_0_w) /* service mode mirror */
|
||||
AM_RANGE(0xd00000, 0xd0ffff) AM_READWRITE(TC0100SCN_word_0_r, TC0100SCN_word_0_w) /* tilemaps */
|
||||
AM_RANGE(0xd20000, 0xd2000f) AM_READWRITE(TC0100SCN_ctrl_word_0_r, TC0100SCN_ctrl_word_0_w)
|
||||
AM_RANGE(0xc00000, 0xc03fff) AM_DEVREADWRITE("pc090oj", pc090oj_word_r, pc090oj_word_w) /* sprite ram */
|
||||
AM_RANGE(0xc00000, 0xc0ffff) AM_DEVWRITE("tc0100scn", tc0100scn_word_w)
|
||||
AM_RANGE(0xd00000, 0xd0ffff) AM_DEVREADWRITE("tc0100scn", tc0100scn_word_r, tc0100scn_word_w) /* tilemaps */
|
||||
AM_RANGE(0xd20000, 0xd2000f) AM_DEVREADWRITE("tc0100scn", tc0100scn_ctrl_word_r, tc0100scn_ctrl_word_w)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
@ -783,9 +780,45 @@ static const msm5205_interface msm5205_config =
|
||||
MACHINE DRIVERS
|
||||
***********************************************************/
|
||||
|
||||
static const tc0100scn_interface asuka_tc0100scn_intf =
|
||||
{
|
||||
"screen",
|
||||
1, 2, /* gfxnum, txnum */
|
||||
0, 0, /* x_offset, y_offset */
|
||||
0, 0, /* flip_xoff, flip_yoff */
|
||||
0, 0, /* flip_text_xoff, flip_text_yoff */
|
||||
0, 0
|
||||
};
|
||||
|
||||
static const tc0100scn_interface cadash_tc0100scn_intf =
|
||||
{
|
||||
"screen",
|
||||
1, 2, /* gfxnum, txnum */
|
||||
1, 0, /* x_offset, y_offset */
|
||||
0, 0, /* flip_xoff, flip_yoff */
|
||||
0, 0, /* flip_text_xoff, flip_text_yoff */
|
||||
0, 0
|
||||
};
|
||||
|
||||
static const pc090oj_interface asuka_pc090oj_intf =
|
||||
{
|
||||
0, 0, 8, 0
|
||||
};
|
||||
|
||||
static const pc090oj_interface cadash_pc090oj_intf =
|
||||
{
|
||||
0, 0, 8, 1
|
||||
};
|
||||
|
||||
static const tc0110pcr_interface asuka_tc0110pcr_intf =
|
||||
{
|
||||
0
|
||||
};
|
||||
|
||||
static VIDEO_EOF( asuka )
|
||||
{
|
||||
PC090OJ_eof_callback();
|
||||
const device_config *pc090oj = devtag_get_device(machine, "pc090oj");
|
||||
pc090oj_eof_callback(pc090oj);
|
||||
}
|
||||
|
||||
static const tc0220ioc_interface asuka_io_intf =
|
||||
@ -805,6 +838,9 @@ static MACHINE_DRIVER_START( bonzeadv )
|
||||
MDRV_CPU_ADD("audiocpu", Z80,4000000) /* sound CPU, also required for test mode */
|
||||
MDRV_CPU_PROGRAM_MAP(bonzeadv_z80_map)
|
||||
|
||||
MDRV_MACHINE_START(asuka)
|
||||
MDRV_MACHINE_RESET(asuka)
|
||||
|
||||
MDRV_QUANTUM_TIME(HZ(600))
|
||||
|
||||
/* video hardware */
|
||||
@ -817,13 +853,13 @@ static MACHINE_DRIVER_START( bonzeadv )
|
||||
MDRV_GFXDECODE(asuka)
|
||||
MDRV_PALETTE_LENGTH(4096)
|
||||
|
||||
MDRV_MACHINE_START(asuka)
|
||||
MDRV_MACHINE_RESET(asuka)
|
||||
|
||||
MDRV_VIDEO_START(asuka)
|
||||
MDRV_VIDEO_EOF(asuka)
|
||||
MDRV_VIDEO_UPDATE(bonzeadv)
|
||||
|
||||
MDRV_PC090OJ_ADD("pc090oj", asuka_pc090oj_intf)
|
||||
MDRV_TC0100SCN_ADD("tc0100scn", asuka_tc0100scn_intf)
|
||||
MDRV_TC0110PCR_ADD("tc0110pcr", asuka_tc0110pcr_intf)
|
||||
|
||||
/* sound hardware */
|
||||
MDRV_SPEAKER_STANDARD_MONO("mono")
|
||||
|
||||
@ -844,6 +880,9 @@ static MACHINE_DRIVER_START( asuka )
|
||||
MDRV_CPU_ADD("audiocpu", Z80, XTAL_16MHz/4) /* verified on pcb */
|
||||
MDRV_CPU_PROGRAM_MAP(z80_map)
|
||||
|
||||
MDRV_MACHINE_START(asuka)
|
||||
MDRV_MACHINE_RESET(asuka)
|
||||
|
||||
MDRV_QUANTUM_TIME(HZ(600))
|
||||
|
||||
MDRV_TC0220IOC_ADD("tc0220ioc", asuka_io_intf)
|
||||
@ -858,13 +897,13 @@ static MACHINE_DRIVER_START( asuka )
|
||||
MDRV_GFXDECODE(asuka)
|
||||
MDRV_PALETTE_LENGTH(4096)
|
||||
|
||||
MDRV_MACHINE_START(asuka)
|
||||
MDRV_MACHINE_RESET(asuka)
|
||||
|
||||
MDRV_VIDEO_START(asuka)
|
||||
MDRV_VIDEO_EOF(asuka)
|
||||
MDRV_VIDEO_UPDATE(asuka)
|
||||
|
||||
MDRV_PC090OJ_ADD("pc090oj", asuka_pc090oj_intf)
|
||||
MDRV_TC0100SCN_ADD("tc0100scn", asuka_tc0100scn_intf)
|
||||
MDRV_TC0110PCR_ADD("tc0110pcr", asuka_tc0110pcr_intf)
|
||||
|
||||
/* sound hardware */
|
||||
MDRV_SPEAKER_STANDARD_MONO("mono")
|
||||
|
||||
@ -888,6 +927,9 @@ static MACHINE_DRIVER_START( cadash )
|
||||
MDRV_CPU_ADD("audiocpu", Z80, XTAL_8MHz/2) /* verified on pcb */
|
||||
MDRV_CPU_PROGRAM_MAP(cadash_z80_map)
|
||||
|
||||
MDRV_MACHINE_START(asuka)
|
||||
MDRV_MACHINE_RESET(asuka)
|
||||
|
||||
MDRV_QUANTUM_TIME(HZ(600))
|
||||
|
||||
MDRV_TC0220IOC_ADD("tc0220ioc", asuka_io_intf)
|
||||
@ -902,13 +944,13 @@ static MACHINE_DRIVER_START( cadash )
|
||||
MDRV_GFXDECODE(asuka)
|
||||
MDRV_PALETTE_LENGTH(4096)
|
||||
|
||||
MDRV_MACHINE_START(asuka)
|
||||
MDRV_MACHINE_RESET(asuka)
|
||||
|
||||
MDRV_VIDEO_START(cadash)
|
||||
MDRV_VIDEO_EOF(asuka)
|
||||
MDRV_VIDEO_UPDATE(bonzeadv)
|
||||
|
||||
MDRV_PC090OJ_ADD("pc090oj", cadash_pc090oj_intf)
|
||||
MDRV_TC0100SCN_ADD("tc0100scn", cadash_tc0100scn_intf)
|
||||
MDRV_TC0110PCR_ADD("tc0110pcr", asuka_tc0110pcr_intf)
|
||||
|
||||
/* sound hardware */
|
||||
MDRV_SPEAKER_STANDARD_MONO("mono")
|
||||
|
||||
@ -928,6 +970,9 @@ static MACHINE_DRIVER_START( mofflott )
|
||||
MDRV_CPU_ADD("audiocpu", Z80, 4000000) /* 4 MHz ??? */
|
||||
MDRV_CPU_PROGRAM_MAP(z80_map)
|
||||
|
||||
MDRV_MACHINE_START(asuka)
|
||||
MDRV_MACHINE_RESET(asuka)
|
||||
|
||||
MDRV_QUANTUM_TIME(HZ(600))
|
||||
|
||||
MDRV_TC0220IOC_ADD("tc0220ioc", asuka_io_intf)
|
||||
@ -942,13 +987,13 @@ static MACHINE_DRIVER_START( mofflott )
|
||||
MDRV_GFXDECODE(asuka)
|
||||
MDRV_PALETTE_LENGTH(4096) /* only Mofflott uses full palette space */
|
||||
|
||||
MDRV_MACHINE_START(asuka)
|
||||
MDRV_MACHINE_RESET(asuka)
|
||||
|
||||
MDRV_VIDEO_START(galmedes)
|
||||
MDRV_VIDEO_EOF(asuka)
|
||||
MDRV_VIDEO_UPDATE(asuka)
|
||||
|
||||
MDRV_PC090OJ_ADD("pc090oj", asuka_pc090oj_intf)
|
||||
MDRV_TC0100SCN_ADD("tc0100scn", cadash_tc0100scn_intf)
|
||||
MDRV_TC0110PCR_ADD("tc0110pcr", asuka_tc0110pcr_intf)
|
||||
|
||||
/* sound hardware */
|
||||
MDRV_SPEAKER_STANDARD_MONO("mono")
|
||||
|
||||
@ -972,6 +1017,9 @@ static MACHINE_DRIVER_START( galmedes )
|
||||
MDRV_CPU_ADD("audiocpu", Z80, 4000000) /* 4 MHz ??? */
|
||||
MDRV_CPU_PROGRAM_MAP(cadash_z80_map)
|
||||
|
||||
MDRV_MACHINE_START(asuka)
|
||||
MDRV_MACHINE_RESET(asuka)
|
||||
|
||||
MDRV_QUANTUM_TIME(HZ(600))
|
||||
|
||||
MDRV_TC0220IOC_ADD("tc0220ioc", asuka_io_intf)
|
||||
@ -986,13 +1034,13 @@ static MACHINE_DRIVER_START( galmedes )
|
||||
MDRV_GFXDECODE(asuka)
|
||||
MDRV_PALETTE_LENGTH(4096) /* only Mofflott uses full palette space */
|
||||
|
||||
MDRV_MACHINE_START(asuka)
|
||||
MDRV_MACHINE_RESET(asuka)
|
||||
|
||||
MDRV_VIDEO_START(galmedes)
|
||||
MDRV_VIDEO_EOF(asuka)
|
||||
MDRV_VIDEO_UPDATE(asuka)
|
||||
|
||||
MDRV_PC090OJ_ADD("pc090oj", asuka_pc090oj_intf)
|
||||
MDRV_TC0100SCN_ADD("tc0100scn", cadash_tc0100scn_intf)
|
||||
MDRV_TC0110PCR_ADD("tc0110pcr", asuka_tc0110pcr_intf)
|
||||
|
||||
/* sound hardware */
|
||||
MDRV_SPEAKER_STANDARD_MONO("mono")
|
||||
|
||||
@ -1012,6 +1060,9 @@ static MACHINE_DRIVER_START( eto )
|
||||
MDRV_CPU_ADD("audiocpu", Z80, 4000000) /* 4 MHz ??? */
|
||||
MDRV_CPU_PROGRAM_MAP(cadash_z80_map)
|
||||
|
||||
MDRV_MACHINE_START(asuka)
|
||||
MDRV_MACHINE_RESET(asuka)
|
||||
|
||||
MDRV_QUANTUM_TIME(HZ(600))
|
||||
|
||||
MDRV_TC0220IOC_ADD("tc0220ioc", asuka_io_intf)
|
||||
@ -1026,13 +1077,13 @@ static MACHINE_DRIVER_START( eto )
|
||||
MDRV_GFXDECODE(asuka)
|
||||
MDRV_PALETTE_LENGTH(4096)
|
||||
|
||||
MDRV_MACHINE_START(asuka)
|
||||
MDRV_MACHINE_RESET(asuka)
|
||||
|
||||
MDRV_VIDEO_START(galmedes)
|
||||
MDRV_VIDEO_EOF(asuka)
|
||||
MDRV_VIDEO_UPDATE(asuka)
|
||||
|
||||
MDRV_PC090OJ_ADD("pc090oj", asuka_pc090oj_intf)
|
||||
MDRV_TC0100SCN_ADD("tc0100scn", cadash_tc0100scn_intf)
|
||||
MDRV_TC0110PCR_ADD("tc0110pcr", asuka_tc0110pcr_intf)
|
||||
|
||||
/* sound hardware */
|
||||
MDRV_SPEAKER_STANDARD_MONO("mono")
|
||||
|
||||
|
@ -314,7 +314,7 @@ rumbling on a subwoofer in the cabinet.)
|
||||
#include "cpu/z80/z80.h"
|
||||
#include "includes/taitoipt.h"
|
||||
#include "cpu/m68000/m68000.h"
|
||||
#include "video/taitoic.h"
|
||||
#include "video/taiicdev.h"
|
||||
#include "machine/taitoio.h"
|
||||
#include "audio/taitosnd.h"
|
||||
#include "sound/2610intf.h"
|
||||
@ -401,6 +401,17 @@ static WRITE8_HANDLER( ninjaw_pancontrol )
|
||||
}
|
||||
|
||||
|
||||
WRITE16_HANDLER( tc0100scn_triple_screen_w )
|
||||
{
|
||||
const device_config *tc0100scn_1 = devtag_get_device(space->machine, "tc0100scn_1");
|
||||
const device_config *tc0100scn_2 = devtag_get_device(space->machine, "tc0100scn_2");
|
||||
const device_config *tc0100scn_3 = devtag_get_device(space->machine, "tc0100scn_3");
|
||||
|
||||
tc0100scn_word_w(tc0100scn_1, offset, data, mem_mask);
|
||||
tc0100scn_word_w(tc0100scn_2, offset, data, mem_mask);
|
||||
tc0100scn_word_w(tc0100scn_3, offset, data, mem_mask);
|
||||
}
|
||||
|
||||
/***********************************************************
|
||||
MEMORY STRUCTURES
|
||||
***********************************************************/
|
||||
@ -414,15 +425,15 @@ static ADDRESS_MAP_START( ninjaw_master_map, ADDRESS_SPACE_PROGRAM, 16 )
|
||||
AM_RANGE(0x220000, 0x220003) AM_READWRITE(ninjaw_sound_r,ninjaw_sound_w)
|
||||
AM_RANGE(0x240000, 0x24ffff) AM_RAM AM_SHARE("share1")
|
||||
AM_RANGE(0x260000, 0x263fff) AM_RAM AM_SHARE("share2") AM_BASE_SIZE_GENERIC(spriteram)
|
||||
AM_RANGE(0x280000, 0x293fff) AM_READWRITE(TC0100SCN_word_0_r,TC0100SCN_triple_screen_w) /* tilemaps (1st screen/all screens) */
|
||||
AM_RANGE(0x2a0000, 0x2a000f) AM_READWRITE(TC0100SCN_ctrl_word_0_r,TC0100SCN_ctrl_word_0_w)
|
||||
AM_RANGE(0x2c0000, 0x2d3fff) AM_READWRITE(TC0100SCN_word_1_r,TC0100SCN_word_1_w) /* tilemaps (2nd screen) */
|
||||
AM_RANGE(0x2e0000, 0x2e000f) AM_READWRITE(TC0100SCN_ctrl_word_1_r,TC0100SCN_ctrl_word_1_w)
|
||||
AM_RANGE(0x300000, 0x313fff) AM_READWRITE(TC0100SCN_word_2_r,TC0100SCN_word_2_w) /* tilemaps (3rd screen) */
|
||||
AM_RANGE(0x320000, 0x32000f) AM_READWRITE(TC0100SCN_ctrl_word_2_r,TC0100SCN_ctrl_word_2_w)
|
||||
AM_RANGE(0x340000, 0x340007) AM_READWRITE(TC0110PCR_word_r,TC0110PCR_step1_word_w) /* palette (1st screen) */
|
||||
AM_RANGE(0x350000, 0x350007) AM_READWRITE(TC0110PCR_word_1_r,TC0110PCR_step1_word_1_w) /* palette (2nd screen) */
|
||||
AM_RANGE(0x360000, 0x360007) AM_READWRITE(TC0110PCR_word_2_r,TC0110PCR_step1_word_2_w) /* palette (3rd screen) */
|
||||
AM_RANGE(0x280000, 0x293fff) AM_DEVREAD("tc0100scn_1", tc0100scn_word_r) AM_WRITE(tc0100scn_triple_screen_w) /* tilemaps (1st screen/all screens) */
|
||||
AM_RANGE(0x2a0000, 0x2a000f) AM_DEVREADWRITE("tc0100scn_1", tc0100scn_ctrl_word_r, tc0100scn_ctrl_word_w)
|
||||
AM_RANGE(0x2c0000, 0x2d3fff) AM_DEVREADWRITE("tc0100scn_2", tc0100scn_word_r, tc0100scn_word_w) /* tilemaps (2nd screen) */
|
||||
AM_RANGE(0x2e0000, 0x2e000f) AM_DEVREADWRITE("tc0100scn_2", tc0100scn_ctrl_word_r, tc0100scn_ctrl_word_w)
|
||||
AM_RANGE(0x300000, 0x313fff) AM_DEVREADWRITE("tc0100scn_3", tc0100scn_word_r, tc0100scn_word_w) /* tilemaps (3rd screen) */
|
||||
AM_RANGE(0x320000, 0x32000f) AM_DEVREADWRITE("tc0100scn_3", tc0100scn_ctrl_word_r, tc0100scn_ctrl_word_w)
|
||||
AM_RANGE(0x340000, 0x340007) AM_DEVREADWRITE("tc0110pcr_1", tc0110pcr_word_r, tc0110pcr_step1_word_w) /* palette (1st screen) */
|
||||
AM_RANGE(0x350000, 0x350007) AM_DEVREADWRITE("tc0110pcr_2", tc0110pcr_word_r, tc0110pcr_step1_word_w) /* palette (2nd screen) */
|
||||
AM_RANGE(0x360000, 0x360007) AM_DEVREADWRITE("tc0110pcr_3", tc0110pcr_word_r, tc0110pcr_step1_word_w) /* palette (3rd screen) */
|
||||
ADDRESS_MAP_END
|
||||
|
||||
// NB there could be conflicts between which cpu writes what to the
|
||||
@ -435,10 +446,10 @@ static ADDRESS_MAP_START( ninjaw_slave_map, ADDRESS_SPACE_PROGRAM, 16 )
|
||||
AM_RANGE(0x200002, 0x200003) AM_DEVREADWRITE8("tc0220ioc", tc0220ioc_port_r, tc0220ioc_port_w, 0x00ff)
|
||||
AM_RANGE(0x240000, 0x24ffff) AM_RAM AM_SHARE("share1")
|
||||
AM_RANGE(0x260000, 0x263fff) AM_RAM AM_SHARE("share2")
|
||||
AM_RANGE(0x280000, 0x293fff) AM_READWRITE(TC0100SCN_word_0_r,TC0100SCN_triple_screen_w) /* tilemaps (1st screen/all screens) */
|
||||
AM_RANGE(0x340000, 0x340007) AM_READWRITE(TC0110PCR_word_r,TC0110PCR_step1_word_w) /* palette (1st screen) */
|
||||
AM_RANGE(0x350000, 0x350007) AM_READWRITE(TC0110PCR_word_1_r,TC0110PCR_step1_word_1_w) /* palette (2nd screen) */
|
||||
AM_RANGE(0x360000, 0x360007) AM_READWRITE(TC0110PCR_word_2_r,TC0110PCR_step1_word_2_w) /* palette (3rd screen) */
|
||||
AM_RANGE(0x280000, 0x293fff) AM_DEVREAD("tc0100scn_1", tc0100scn_word_r) AM_WRITE(tc0100scn_triple_screen_w) /* tilemaps (1st screen/all screens) */
|
||||
AM_RANGE(0x340000, 0x340007) AM_DEVREADWRITE("tc0110pcr_1", tc0110pcr_word_r, tc0110pcr_step1_word_w) /* palette (1st screen) */
|
||||
AM_RANGE(0x350000, 0x350007) AM_DEVREADWRITE("tc0110pcr_2", tc0110pcr_word_r, tc0110pcr_step1_word_w) /* palette (2nd screen) */
|
||||
AM_RANGE(0x360000, 0x360007) AM_DEVREADWRITE("tc0110pcr_3", tc0110pcr_word_r, tc0110pcr_step1_word_w) /* palette (3rd screen) */
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( darius2_master_map, ADDRESS_SPACE_PROGRAM, 16 )
|
||||
@ -450,15 +461,15 @@ static ADDRESS_MAP_START( darius2_master_map, ADDRESS_SPACE_PROGRAM, 16 )
|
||||
AM_RANGE(0x220000, 0x220003) AM_READWRITE(ninjaw_sound_r,ninjaw_sound_w)
|
||||
AM_RANGE(0x240000, 0x24ffff) AM_RAM AM_SHARE("share1")
|
||||
AM_RANGE(0x260000, 0x263fff) AM_RAM AM_SHARE("share2") AM_BASE_SIZE_GENERIC(spriteram)
|
||||
AM_RANGE(0x280000, 0x293fff) AM_READWRITE(TC0100SCN_word_0_r,TC0100SCN_triple_screen_w) /* tilemaps (1st screen/all screens) */
|
||||
AM_RANGE(0x2a0000, 0x2a000f) AM_READWRITE(TC0100SCN_ctrl_word_0_r,TC0100SCN_ctrl_word_0_w)
|
||||
AM_RANGE(0x2c0000, 0x2d3fff) AM_READWRITE(TC0100SCN_word_1_r,TC0100SCN_word_1_w) /* tilemaps (2nd screen) */
|
||||
AM_RANGE(0x2e0000, 0x2e000f) AM_READWRITE(TC0100SCN_ctrl_word_1_r,TC0100SCN_ctrl_word_1_w)
|
||||
AM_RANGE(0x300000, 0x313fff) AM_READWRITE(TC0100SCN_word_2_r,TC0100SCN_word_2_w) /* tilemaps (3rd screen) */
|
||||
AM_RANGE(0x320000, 0x32000f) AM_READWRITE(TC0100SCN_ctrl_word_2_r,TC0100SCN_ctrl_word_2_w)
|
||||
AM_RANGE(0x340000, 0x340007) AM_READWRITE(TC0110PCR_word_r,TC0110PCR_step1_word_w) /* palette (1st screen) */
|
||||
AM_RANGE(0x350000, 0x350007) AM_READWRITE(TC0110PCR_word_1_r,TC0110PCR_step1_word_1_w) /* palette (2nd screen) */
|
||||
AM_RANGE(0x360000, 0x360007) AM_READWRITE(TC0110PCR_word_2_r,TC0110PCR_step1_word_2_w) /* palette (3rd screen) */
|
||||
AM_RANGE(0x280000, 0x293fff) AM_DEVREAD("tc0100scn_1", tc0100scn_word_r) AM_WRITE(tc0100scn_triple_screen_w) /* tilemaps (1st screen/all screens) */
|
||||
AM_RANGE(0x2a0000, 0x2a000f) AM_DEVREADWRITE("tc0100scn_1", tc0100scn_ctrl_word_r, tc0100scn_ctrl_word_w)
|
||||
AM_RANGE(0x2c0000, 0x2d3fff) AM_DEVREADWRITE("tc0100scn_2", tc0100scn_word_r, tc0100scn_word_w) /* tilemaps (2nd screen) */
|
||||
AM_RANGE(0x2e0000, 0x2e000f) AM_DEVREADWRITE("tc0100scn_2", tc0100scn_ctrl_word_r, tc0100scn_ctrl_word_w)
|
||||
AM_RANGE(0x300000, 0x313fff) AM_DEVREADWRITE("tc0100scn_3", tc0100scn_word_r, tc0100scn_word_w) /* tilemaps (3rd screen) */
|
||||
AM_RANGE(0x320000, 0x32000f) AM_DEVREADWRITE("tc0100scn_3", tc0100scn_ctrl_word_r, tc0100scn_ctrl_word_w)
|
||||
AM_RANGE(0x340000, 0x340007) AM_DEVREADWRITE("tc0110pcr_1", tc0110pcr_word_r, tc0110pcr_step1_word_w) /* palette (1st screen) */
|
||||
AM_RANGE(0x350000, 0x350007) AM_DEVREADWRITE("tc0110pcr_2", tc0110pcr_word_r, tc0110pcr_step1_word_w) /* palette (2nd screen) */
|
||||
AM_RANGE(0x360000, 0x360007) AM_DEVREADWRITE("tc0110pcr_3", tc0110pcr_word_r, tc0110pcr_step1_word_w) /* palette (3rd screen) */
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( darius2_slave_map, ADDRESS_SPACE_PROGRAM, 16 )
|
||||
@ -468,7 +479,7 @@ static ADDRESS_MAP_START( darius2_slave_map, ADDRESS_SPACE_PROGRAM, 16 )
|
||||
AM_RANGE(0x200002, 0x200003) AM_DEVREADWRITE8("tc0220ioc", tc0220ioc_port_r, tc0220ioc_port_w, 0x00ff)
|
||||
AM_RANGE(0x240000, 0x24ffff) AM_RAM AM_SHARE("share1")
|
||||
AM_RANGE(0x260000, 0x263fff) AM_RAM AM_SHARE("share2")
|
||||
AM_RANGE(0x280000, 0x293fff) AM_READWRITE(TC0100SCN_word_0_r,TC0100SCN_triple_screen_w) /* tilemaps (1st screen/all screens) */
|
||||
AM_RANGE(0x280000, 0x293fff) AM_DEVREAD("tc0100scn_1", tc0100scn_word_r) AM_WRITE(tc0100scn_triple_screen_w) /* tilemaps (1st screen/all screens) */
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
@ -682,6 +693,40 @@ to the scrolling background.
|
||||
Darius2: arbitrary interleaving of 10 to keep cpus synced.
|
||||
*************************************************************/
|
||||
|
||||
static const tc0100scn_interface darius2_tc0100scn_intf_l =
|
||||
{
|
||||
"lscreen",
|
||||
1, 3, /* gfxnum, txnum */
|
||||
22, 0, /* x_offset, y_offset */
|
||||
0, 0, /* flip_xoff, flip_yoff */
|
||||
0, 0, /* flip_text_xoff, flip_text_yoff */
|
||||
0, 0
|
||||
};
|
||||
|
||||
static const tc0100scn_interface darius2_tc0100scn_intf_m =
|
||||
{
|
||||
"mscreen",
|
||||
2, 3, /* gfxnum, txnum */
|
||||
22, 0, /* x_offset, y_offset */
|
||||
0, 0, /* flip_xoff, flip_yoff */
|
||||
0, 0, /* flip_text_xoff, flip_text_yoff */
|
||||
2, 1
|
||||
};
|
||||
|
||||
static const tc0100scn_interface darius2_tc0100scn_intf_r =
|
||||
{
|
||||
"rscreen",
|
||||
2, 3, /* gfxnum, txnum */
|
||||
22, 0, /* x_offset, y_offset */
|
||||
0, 0, /* flip_xoff, flip_yoff */
|
||||
0, 0, /* flip_text_xoff, flip_text_yoff */
|
||||
4, 1
|
||||
};
|
||||
|
||||
static const tc0110pcr_interface darius2_tc0110pcr_intf_l = { 0 /* pal_offs / 0x1000 */ };
|
||||
static const tc0110pcr_interface darius2_tc0110pcr_intf_m = { 1 /* pal_offs / 0x1000 */ };
|
||||
static const tc0110pcr_interface darius2_tc0110pcr_intf_r = { 2 /* pal_offs / 0x1000 */ };
|
||||
|
||||
static const tc0220ioc_interface ninjaw_io_intf =
|
||||
{
|
||||
DEVCB_INPUT_PORT("DSWA"), DEVCB_INPUT_PORT("DSWB"),
|
||||
@ -738,6 +783,13 @@ static MACHINE_DRIVER_START( ninjaw )
|
||||
MDRV_VIDEO_START(ninjaw)
|
||||
MDRV_VIDEO_UPDATE(ninjaw)
|
||||
|
||||
MDRV_TC0100SCN_ADD("tc0100scn_1", darius2_tc0100scn_intf_l)
|
||||
MDRV_TC0100SCN_ADD("tc0100scn_2", darius2_tc0100scn_intf_m)
|
||||
MDRV_TC0100SCN_ADD("tc0100scn_3", darius2_tc0100scn_intf_r)
|
||||
MDRV_TC0110PCR_ADD("tc0110pcr_1", darius2_tc0110pcr_intf_l)
|
||||
MDRV_TC0110PCR_ADD("tc0110pcr_2", darius2_tc0110pcr_intf_m)
|
||||
MDRV_TC0110PCR_ADD("tc0110pcr_3", darius2_tc0110pcr_intf_r)
|
||||
|
||||
/* sound hardware */
|
||||
MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
|
||||
|
||||
@ -813,6 +865,13 @@ static MACHINE_DRIVER_START( darius2 )
|
||||
MDRV_VIDEO_START(ninjaw)
|
||||
MDRV_VIDEO_UPDATE(ninjaw)
|
||||
|
||||
MDRV_TC0100SCN_ADD("tc0100scn_1", darius2_tc0100scn_intf_l)
|
||||
MDRV_TC0100SCN_ADD("tc0100scn_2", darius2_tc0100scn_intf_m)
|
||||
MDRV_TC0100SCN_ADD("tc0100scn_3", darius2_tc0100scn_intf_r)
|
||||
MDRV_TC0110PCR_ADD("tc0110pcr_1", darius2_tc0110pcr_intf_l)
|
||||
MDRV_TC0110PCR_ADD("tc0110pcr_2", darius2_tc0110pcr_intf_m)
|
||||
MDRV_TC0110PCR_ADD("tc0110pcr_3", darius2_tc0110pcr_intf_r)
|
||||
|
||||
/* sound hardware */
|
||||
MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
|
||||
|
||||
|
@ -235,7 +235,7 @@ TODO:
|
||||
#include "includes/taitoipt.h"
|
||||
#include "cpu/m68000/m68000.h"
|
||||
#include "machine/eeprom.h"
|
||||
#include "video/taitoic.h"
|
||||
#include "video/taiicdev.h"
|
||||
#include "machine/taitoio.h"
|
||||
#include "audio/taitosnd.h"
|
||||
#include "sound/2610intf.h"
|
||||
@ -478,9 +478,9 @@ static ADDRESS_MAP_START( othunder_map, ADDRESS_SPACE_PROGRAM, 16 )
|
||||
AM_RANGE(0x090000, 0x09000f) AM_READWRITE(othunder_tc0220ioc_r, othunder_tc0220ioc_w)
|
||||
// AM_RANGE(0x090006, 0x090007) AM_WRITE(eeprom_w)
|
||||
// AM_RANGE(0x09000c, 0x09000d) AM_WRITENOP /* ?? (keeps writing 0x77) */
|
||||
AM_RANGE(0x100000, 0x100007) AM_READWRITE(TC0110PCR_word_r, TC0110PCR_step1_rbswap_word_w) /* palette */
|
||||
AM_RANGE(0x200000, 0x20ffff) AM_READWRITE(TC0100SCN_word_0_r, TC0100SCN_word_0_w) /* tilemaps */
|
||||
AM_RANGE(0x220000, 0x22000f) AM_READWRITE(TC0100SCN_ctrl_word_0_r, TC0100SCN_ctrl_word_0_w)
|
||||
AM_RANGE(0x100000, 0x100007) AM_DEVREADWRITE("tc0110pcr", tc0110pcr_word_r, tc0110pcr_step1_rbswap_word_w) /* palette */
|
||||
AM_RANGE(0x200000, 0x20ffff) AM_DEVREADWRITE("tc0100scn", tc0100scn_word_r, tc0100scn_word_w) /* tilemaps */
|
||||
AM_RANGE(0x220000, 0x22000f) AM_DEVREADWRITE("tc0100scn", tc0100scn_ctrl_word_r, tc0100scn_ctrl_word_w)
|
||||
AM_RANGE(0x300000, 0x300003) AM_READWRITE(othunder_sound_r, othunder_sound_w)
|
||||
AM_RANGE(0x400000, 0x4005ff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram)
|
||||
AM_RANGE(0x500000, 0x500007) AM_READWRITE(othunder_lightgun_r, othunder_lightgun_w)
|
||||
@ -663,6 +663,21 @@ static const ym2610_interface ym2610_config =
|
||||
MACHINE DRIVERS
|
||||
***********************************************************/
|
||||
|
||||
static const tc0100scn_interface othunder_tc0100scn_intf =
|
||||
{
|
||||
"screen",
|
||||
1, 2, /* gfxnum, txnum */
|
||||
4, 0, /* x_offset, y_offset */
|
||||
0, 0, /* flip_xoff, flip_yoff */
|
||||
0, 0, /* flip_text_xoff, flip_text_yoff */
|
||||
0, 0
|
||||
};
|
||||
|
||||
static const tc0110pcr_interface othunder_tc0110pcr_intf =
|
||||
{
|
||||
0
|
||||
};
|
||||
|
||||
static const tc0220ioc_interface othunder_io_intf =
|
||||
{
|
||||
DEVCB_INPUT_PORT("DSWA"), DEVCB_INPUT_PORT("DSWB"),
|
||||
@ -701,6 +716,9 @@ static MACHINE_DRIVER_START( othunder )
|
||||
MDRV_VIDEO_START(othunder)
|
||||
MDRV_VIDEO_UPDATE(othunder)
|
||||
|
||||
MDRV_TC0100SCN_ADD("tc0100scn", othunder_tc0100scn_intf)
|
||||
MDRV_TC0110PCR_ADD("tc0110pcr", othunder_tc0110pcr_intf)
|
||||
|
||||
/* sound hardware */
|
||||
MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
|
||||
|
||||
|
@ -139,18 +139,16 @@ some kind of zoom table?
|
||||
|
||||
****************************************************************************/
|
||||
|
||||
|
||||
#include "driver.h"
|
||||
#include "cpu/z80/z80.h"
|
||||
#include "cpu/m68000/m68000.h"
|
||||
#include "includes/taitoipt.h"
|
||||
#include "audio/taitosnd.h"
|
||||
#include "machine/taitoio.h"
|
||||
#include "video/taitoic.h"
|
||||
#include "video/taiicdev.h"
|
||||
#include "sound/2610intf.h"
|
||||
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
|
||||
Variable
|
||||
@ -159,9 +157,6 @@ some kind of zoom table?
|
||||
|
||||
static UINT16 *taitoh_68000_mainram;
|
||||
|
||||
VIDEO_START( syvalion );
|
||||
VIDEO_START( recordbr );
|
||||
VIDEO_START( dleague );
|
||||
VIDEO_UPDATE( syvalion );
|
||||
VIDEO_UPDATE( recordbr );
|
||||
VIDEO_UPDATE( dleague );
|
||||
@ -274,7 +269,7 @@ static ADDRESS_MAP_START( syvalion_map, ADDRESS_SPACE_PROGRAM, 16 )
|
||||
AM_RANGE(0x200002, 0x200003) AM_DEVREADWRITE8("tc0220ioc", tc0220ioc_port_r, tc0220ioc_port_w, 0x00ff)
|
||||
AM_RANGE(0x300000, 0x300001) AM_READNOP AM_WRITE8(taitosound_port_w, 0x00ff)
|
||||
AM_RANGE(0x300002, 0x300003) AM_READWRITE8(taitosound_comm_r, taitosound_comm_w, 0x00ff)
|
||||
AM_RANGE(0x400000, 0x420fff) AM_READWRITE(TC0080VCO_word_r, TC0080VCO_word_w)
|
||||
AM_RANGE(0x400000, 0x420fff) AM_DEVREADWRITE("tc0080vco", tc0080vco_word_r, tc0080vco_word_w)
|
||||
AM_RANGE(0x500800, 0x500fff) AM_RAM_WRITE(paletteram16_xBBBBBGGGGGRRRRR_word_w) AM_BASE_GENERIC(paletteram)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
@ -285,7 +280,7 @@ static ADDRESS_MAP_START( recordbr_map, ADDRESS_SPACE_PROGRAM, 16 )
|
||||
AM_RANGE(0x200002, 0x200003) AM_DEVREADWRITE8("tc0220ioc", tc0220ioc_port_r, tc0220ioc_port_w, 0x00ff)
|
||||
AM_RANGE(0x300000, 0x300001) AM_READNOP AM_WRITE8(taitosound_port_w, 0x00ff)
|
||||
AM_RANGE(0x300002, 0x300003) AM_READWRITE8(taitosound_comm_r, taitosound_comm_w, 0x00ff)
|
||||
AM_RANGE(0x400000, 0x420fff) AM_READWRITE(TC0080VCO_word_r, TC0080VCO_word_w)
|
||||
AM_RANGE(0x400000, 0x420fff) AM_DEVREADWRITE("tc0080vco", tc0080vco_word_r, tc0080vco_word_w)
|
||||
AM_RANGE(0x500800, 0x500fff) AM_RAM_WRITE(paletteram16_xBBBBBGGGGGRRRRR_word_w) AM_BASE_GENERIC(paletteram)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
@ -295,7 +290,7 @@ static ADDRESS_MAP_START( dleague_map, ADDRESS_SPACE_PROGRAM, 16 )
|
||||
AM_RANGE(0x200000, 0x20000f) AM_DEVREADWRITE8("tc0220ioc", tc0220ioc_r, tc0220ioc_w, 0x00ff)
|
||||
AM_RANGE(0x300000, 0x300001) AM_READNOP AM_WRITE8(taitosound_port_w, 0x00ff)
|
||||
AM_RANGE(0x300002, 0x300003) AM_READWRITE8(taitosound_comm_r, taitosound_comm_w, 0x00ff)
|
||||
AM_RANGE(0x400000, 0x420fff) AM_READWRITE(TC0080VCO_word_r, TC0080VCO_word_w)
|
||||
AM_RANGE(0x400000, 0x420fff) AM_DEVREADWRITE("tc0080vco", tc0080vco_word_r, tc0080vco_word_w)
|
||||
AM_RANGE(0x500800, 0x500fff) AM_RAM_WRITE(paletteram16_xBBBBBGGGGGRRRRR_word_w) AM_BASE_GENERIC(paletteram)
|
||||
AM_RANGE(0x600000, 0x600001) AM_WRITENOP /* ?? writes zero once per frame */
|
||||
ADDRESS_MAP_END
|
||||
@ -546,6 +541,20 @@ static MACHINE_START( taitoh )
|
||||
}
|
||||
|
||||
|
||||
static const tc0080vco_interface syvalion_tc0080vco_intf =
|
||||
{
|
||||
0, 1, /* gfxnum, txnum */
|
||||
1, 1, -2,
|
||||
1
|
||||
};
|
||||
|
||||
static const tc0080vco_interface recordbr_tc0080vco_intf =
|
||||
{
|
||||
0, 1, /* gfxnum, txnum */
|
||||
1, 1, -2,
|
||||
0
|
||||
};
|
||||
|
||||
static const tc0220ioc_interface taitoh_io_intf =
|
||||
{
|
||||
DEVCB_INPUT_PORT("DSWA"), DEVCB_INPUT_PORT("DSWB"),
|
||||
@ -580,9 +589,10 @@ static MACHINE_DRIVER_START( syvalion )
|
||||
MDRV_GFXDECODE(syvalion)
|
||||
MDRV_PALETTE_LENGTH(33*16)
|
||||
|
||||
MDRV_VIDEO_START(syvalion)
|
||||
MDRV_VIDEO_UPDATE(syvalion)
|
||||
|
||||
MDRV_TC0080VCO_ADD("tc0080vco", syvalion_tc0080vco_intf)
|
||||
|
||||
/* sound hardware */
|
||||
MDRV_SPEAKER_STANDARD_MONO("mono")
|
||||
|
||||
@ -622,9 +632,10 @@ static MACHINE_DRIVER_START( recordbr )
|
||||
MDRV_GFXDECODE(recordbr)
|
||||
MDRV_PALETTE_LENGTH(32*16)
|
||||
|
||||
MDRV_VIDEO_START(recordbr)
|
||||
MDRV_VIDEO_UPDATE(recordbr)
|
||||
|
||||
MDRV_TC0080VCO_ADD("tc0080vco", recordbr_tc0080vco_intf)
|
||||
|
||||
/* sound hardware */
|
||||
MDRV_SPEAKER_STANDARD_MONO("mono")
|
||||
|
||||
@ -664,9 +675,10 @@ static MACHINE_DRIVER_START( dleague )
|
||||
MDRV_GFXDECODE(dleague)
|
||||
MDRV_PALETTE_LENGTH(33*16)
|
||||
|
||||
MDRV_VIDEO_START(dleague)
|
||||
MDRV_VIDEO_UPDATE(dleague)
|
||||
|
||||
MDRV_TC0080VCO_ADD("tc0080vco", recordbr_tc0080vco_intf)
|
||||
|
||||
/* sound hardware */
|
||||
MDRV_SPEAKER_STANDARD_MONO("mono")
|
||||
|
||||
|
@ -32,12 +32,11 @@ TODO:
|
||||
#include "deprecat.h"
|
||||
#include "cpu/z80/z80.h"
|
||||
#include "cpu/m68000/m68000.h"
|
||||
#include "video/taitoic.h"
|
||||
#include "video/taiicdev.h"
|
||||
#include "sound/2203intf.h"
|
||||
|
||||
static const int clear_hack=1;
|
||||
|
||||
VIDEO_START( parentj );
|
||||
VIDEO_UPDATE( parentj );
|
||||
|
||||
static WRITE16_HANDLER(io_w)
|
||||
@ -67,7 +66,7 @@ static ADDRESS_MAP_START( parentj_map, ADDRESS_SPACE_PROGRAM, 16 )
|
||||
AM_RANGE(0x100000, 0x10ffff) AM_MIRROR(0x010000) AM_RAM
|
||||
AM_RANGE(0x200000, 0x20000f) AM_READWRITE(io_r, io_w) /* TC0220IOC ? */
|
||||
AM_RANGE(0x300000, 0x300003) AM_DEVREADWRITE8("ymsnd", ym2203_r, ym2203_w, 0x00ff)
|
||||
AM_RANGE(0x400000, 0x420fff) AM_READWRITE(TC0080VCO_word_r, TC0080VCO_word_w)
|
||||
AM_RANGE(0x400000, 0x420fff) AM_DEVREADWRITE("tc0080vco", tc0080vco_word_r, tc0080vco_word_w)
|
||||
AM_RANGE(0x500800, 0x500fff) AM_RAM_WRITE(paletteram16_xBBBBBGGGGGRRRRR_word_w) AM_BASE_GENERIC(paletteram)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
@ -232,6 +231,13 @@ static const ym2203_interface ym2203_config =
|
||||
NULL
|
||||
};
|
||||
|
||||
static const tc0080vco_interface parentj_intf =
|
||||
{
|
||||
0, 1, /* gfxnum, txnum */
|
||||
1, 1, -2,
|
||||
0
|
||||
};
|
||||
|
||||
static MACHINE_DRIVER_START( parentj )
|
||||
|
||||
|
||||
@ -249,9 +255,10 @@ static MACHINE_DRIVER_START( parentj )
|
||||
MDRV_GFXDECODE(parentj)
|
||||
MDRV_PALETTE_LENGTH(33*16)
|
||||
|
||||
MDRV_VIDEO_START(parentj)
|
||||
MDRV_VIDEO_UPDATE(parentj)
|
||||
|
||||
MDRV_TC0080VCO_ADD("tc0080vco", parentj_intf)
|
||||
|
||||
MDRV_SPEAKER_STANDARD_MONO("mono")
|
||||
|
||||
MDRV_SOUND_ADD("ymsnd", YM2203, 2000000) /*?? MHz */
|
||||
|
@ -220,7 +220,7 @@ cpu #2 (PC=0000060E): unmapped memory word read from 0000683A & FFFF
|
||||
#include "cpu/m68000/m68000.h"
|
||||
#include "includes/taitoipt.h"
|
||||
#include "audio/taitosnd.h"
|
||||
#include "video/taitoic.h"
|
||||
#include "video/taiicdev.h"
|
||||
#include "machine/taitoio.h"
|
||||
#include "cpu/tms32025/tms32025.h"
|
||||
#include "sound/2610intf.h"
|
||||
@ -231,7 +231,6 @@ static UINT16 *taitoh_68000_mainram;
|
||||
UINT16 *taitoair_line_ram;
|
||||
static UINT16 *dsp_ram; /* Shared 68000/TMS32025 RAM */
|
||||
|
||||
VIDEO_START( taitoair );
|
||||
VIDEO_UPDATE( taitoair );
|
||||
|
||||
|
||||
@ -383,7 +382,7 @@ static ADDRESS_MAP_START( airsys_map, ADDRESS_SPACE_PROGRAM, 16 )
|
||||
AM_RANGE(0x180000, 0x183fff) AM_RAM /* "gradiation ram (0)" */
|
||||
AM_RANGE(0x184000, 0x187fff) AM_RAM /* "gradiation ram (1)" */
|
||||
AM_RANGE(0x188000, 0x18bfff) AM_RAM_WRITE(airsys_paletteram16_w) AM_BASE_GENERIC(paletteram)
|
||||
AM_RANGE(0x800000, 0x820fff) AM_READWRITE(TC0080VCO_word_r, TC0080VCO_word_w) /* tilemaps, sprites */
|
||||
AM_RANGE(0x800000, 0x820fff) AM_DEVREADWRITE("tc0080vco", tc0080vco_word_r, tc0080vco_word_w) /* tilemaps, sprites */
|
||||
AM_RANGE(0x908000, 0x90ffff) AM_RAM AM_BASE(&taitoair_line_ram) /* "line ram" */
|
||||
AM_RANGE(0x910000, 0x91ffff) AM_RAM AM_BASE(&dsp_ram) /* "dsp common ram" (TMS320C25) */
|
||||
AM_RANGE(0xa00000, 0xa00007) AM_READ(stick_input_r)
|
||||
@ -596,6 +595,13 @@ static const ym2610_interface airsys_ym2610_interface =
|
||||
MACHINE DRIVERS
|
||||
************************************************************/
|
||||
|
||||
static const tc0080vco_interface airsys_tc0080vco_intf =
|
||||
{
|
||||
0, 1, /* gfxnum, txnum */
|
||||
1, 1, -2,
|
||||
0
|
||||
};
|
||||
|
||||
static const tc0220ioc_interface airsys_io_intf =
|
||||
{
|
||||
DEVCB_INPUT_PORT("DSWA"), DEVCB_INPUT_PORT("DSWB"),
|
||||
@ -634,9 +640,10 @@ static MACHINE_DRIVER_START( airsys )
|
||||
MDRV_GFXDECODE(airsys)
|
||||
MDRV_PALETTE_LENGTH(512*16)
|
||||
|
||||
MDRV_VIDEO_START(taitoair)
|
||||
MDRV_VIDEO_UPDATE(taitoair)
|
||||
|
||||
MDRV_TC0080VCO_ADD("tc0080vco", airsys_tc0080vco_intf)
|
||||
|
||||
/* sound hardware */
|
||||
MDRV_SPEAKER_STANDARD_MONO("mono")
|
||||
|
||||
|
@ -148,7 +148,7 @@ Colscroll effects?
|
||||
#include "includes/taitoipt.h"
|
||||
#include "rendlay.h"
|
||||
#include "cpu/m68000/m68000.h"
|
||||
#include "video/taitoic.h"
|
||||
#include "video/taiicdev.h"
|
||||
#include "machine/taitoio.h"
|
||||
#include "audio/taitosnd.h"
|
||||
#include "sound/2610intf.h"
|
||||
@ -157,7 +157,6 @@ Colscroll effects?
|
||||
static MACHINE_START( warriorb );
|
||||
static MACHINE_RESET( taito_dualscreen );
|
||||
|
||||
VIDEO_START( darius2d );
|
||||
VIDEO_START( warriorb );
|
||||
VIDEO_UPDATE( warriorb );
|
||||
|
||||
@ -210,6 +209,14 @@ static WRITE8_HANDLER( warriorb_pancontrol )
|
||||
}
|
||||
|
||||
|
||||
WRITE16_HANDLER( tc0100scn_dual_screen_w )
|
||||
{
|
||||
const device_config *tc0100scn_1 = devtag_get_device(space->machine, "tc0100scn_1");
|
||||
const device_config *tc0100scn_2 = devtag_get_device(space->machine, "tc0100scn_2");
|
||||
|
||||
tc0100scn_word_w(tc0100scn_1, offset, data, mem_mask);
|
||||
tc0100scn_word_w(tc0100scn_2, offset, data, mem_mask);
|
||||
}
|
||||
|
||||
/***********************************************************
|
||||
MEMORY STRUCTURES
|
||||
@ -218,13 +225,13 @@ static WRITE8_HANDLER( warriorb_pancontrol )
|
||||
static ADDRESS_MAP_START( darius2d_map, ADDRESS_SPACE_PROGRAM, 16 )
|
||||
AM_RANGE(0x000000, 0x0fffff) AM_ROM
|
||||
AM_RANGE(0x100000, 0x10ffff) AM_RAM /* main ram */
|
||||
AM_RANGE(0x200000, 0x213fff) AM_READWRITE(TC0100SCN_word_0_r, TC0100SCN_dual_screen_w) /* tilemaps (all screens) */
|
||||
AM_RANGE(0x200000, 0x213fff) AM_DEVREAD("tc0100scn_1", tc0100scn_word_r) AM_WRITE(tc0100scn_dual_screen_w) /* tilemaps (all screens) */
|
||||
AM_RANGE(0x214000, 0x2141ff) AM_WRITENOP /* error in screen clearing code ? */
|
||||
AM_RANGE(0x220000, 0x22000f) AM_READWRITE(TC0100SCN_ctrl_word_0_r, TC0100SCN_ctrl_word_0_w)
|
||||
AM_RANGE(0x240000, 0x253fff) AM_READWRITE(TC0100SCN_word_1_r, TC0100SCN_word_1_w) /* tilemaps (2nd screen) */
|
||||
AM_RANGE(0x260000, 0x26000f) AM_READWRITE(TC0100SCN_ctrl_word_1_r, TC0100SCN_ctrl_word_1_w)
|
||||
AM_RANGE(0x400000, 0x400007) AM_READWRITE(TC0110PCR_word_r, TC0110PCR_step1_word_w) /* palette (1st screen) */
|
||||
AM_RANGE(0x420000, 0x420007) AM_READWRITE(TC0110PCR_word_1_r, TC0110PCR_step1_word_1_w) /* palette (2nd screen) */
|
||||
AM_RANGE(0x220000, 0x22000f) AM_DEVREADWRITE("tc0100scn_1", tc0100scn_ctrl_word_r, tc0100scn_ctrl_word_w)
|
||||
AM_RANGE(0x240000, 0x253fff) AM_DEVREADWRITE("tc0100scn_2", tc0100scn_word_r, tc0100scn_word_w) /* tilemaps (2nd screen) */
|
||||
AM_RANGE(0x260000, 0x26000f) AM_DEVREADWRITE("tc0100scn_2", tc0100scn_ctrl_word_r, tc0100scn_ctrl_word_w)
|
||||
AM_RANGE(0x400000, 0x400007) AM_DEVREADWRITE("tc0110pcr_1", tc0110pcr_word_r, tc0110pcr_step1_word_w) /* palette (1st screen) */
|
||||
AM_RANGE(0x420000, 0x420007) AM_DEVREADWRITE("tc0110pcr_2", tc0110pcr_word_r, tc0110pcr_step1_word_w) /* palette (2nd screen) */
|
||||
AM_RANGE(0x600000, 0x6013ff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram)
|
||||
AM_RANGE(0x800000, 0x80000f) AM_DEVREADWRITE8("tc0220ioc", tc0220ioc_r, tc0220ioc_w, 0x00ff)
|
||||
// AM_RANGE(0x820000, 0x820001) AM_WRITENOP // ???
|
||||
@ -234,12 +241,12 @@ ADDRESS_MAP_END
|
||||
static ADDRESS_MAP_START( warriorb_map, ADDRESS_SPACE_PROGRAM, 16 )
|
||||
AM_RANGE(0x000000, 0x1fffff) AM_ROM
|
||||
AM_RANGE(0x200000, 0x213fff) AM_RAM
|
||||
AM_RANGE(0x300000, 0x313fff) AM_READWRITE(TC0100SCN_word_0_r, TC0100SCN_dual_screen_w) /* tilemaps (all screens) */
|
||||
AM_RANGE(0x320000, 0x32000f) AM_READWRITE(TC0100SCN_ctrl_word_0_r, TC0100SCN_ctrl_word_0_w)
|
||||
AM_RANGE(0x340000, 0x353fff) AM_READWRITE(TC0100SCN_word_1_r, TC0100SCN_word_1_w) /* tilemaps (2nd screen) */
|
||||
AM_RANGE(0x360000, 0x36000f) AM_READWRITE(TC0100SCN_ctrl_word_1_r, TC0100SCN_ctrl_word_1_w)
|
||||
AM_RANGE(0x400000, 0x400007) AM_READWRITE(TC0110PCR_word_r, TC0110PCR_step1_word_w) /* palette (1st screen) */
|
||||
AM_RANGE(0x420000, 0x420007) AM_READWRITE(TC0110PCR_word_1_r, TC0110PCR_step1_word_1_w) /* palette (2nd screen) */
|
||||
AM_RANGE(0x300000, 0x313fff) AM_DEVREAD("tc0100scn_1", tc0100scn_word_r) AM_WRITE(tc0100scn_dual_screen_w) /* tilemaps (all screens) */
|
||||
AM_RANGE(0x320000, 0x32000f) AM_DEVREADWRITE("tc0100scn_1", tc0100scn_ctrl_word_r, tc0100scn_ctrl_word_w)
|
||||
AM_RANGE(0x340000, 0x353fff) AM_DEVREADWRITE("tc0100scn_2", tc0100scn_word_r, tc0100scn_word_w) /* tilemaps (2nd screen) */
|
||||
AM_RANGE(0x360000, 0x36000f) AM_DEVREADWRITE("tc0100scn_2", tc0100scn_ctrl_word_r, tc0100scn_ctrl_word_w)
|
||||
AM_RANGE(0x400000, 0x400007) AM_DEVREADWRITE("tc0110pcr_1", tc0110pcr_word_r, tc0110pcr_step1_word_w) /* palette (1st screen) */
|
||||
AM_RANGE(0x420000, 0x420007) AM_DEVREADWRITE("tc0110pcr_2", tc0110pcr_word_r, tc0110pcr_step1_word_w) /* palette (2nd screen) */
|
||||
AM_RANGE(0x600000, 0x6013ff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram)
|
||||
AM_RANGE(0x800000, 0x80000f) AM_DEVREADWRITE("tc0510nio", tc0510nio_halfword_r, tc0510nio_halfword_w)
|
||||
// AM_RANGE(0x820000, 0x820001) AM_WRITENOP // ? uses bits 0,2,3
|
||||
@ -445,6 +452,57 @@ static DEVICE_GET_INFO( subwoofer )
|
||||
MACHINE DRIVERS
|
||||
***********************************************************/
|
||||
|
||||
static const tc0100scn_interface darius2d_tc0100scn_intf_l =
|
||||
{
|
||||
"lscreen",
|
||||
1, 3, /* gfxnum, txnum */
|
||||
4, 0, /* x_offset, y_offset */
|
||||
0, 0, /* flip_xoff, flip_yoff */
|
||||
0, 0, /* flip_text_xoff, flip_text_yoff */
|
||||
0, 0
|
||||
};
|
||||
|
||||
static const tc0100scn_interface darius2d_tc0100scn_intf_r =
|
||||
{
|
||||
"rscreen",
|
||||
2, 3, /* gfxnum, txnum */
|
||||
4, 0, /* x_offset, y_offset */
|
||||
0, 0, /* flip_xoff, flip_yoff */
|
||||
0, 0, /* flip_text_xoff, flip_text_yoff */
|
||||
0, 1
|
||||
};
|
||||
|
||||
static const tc0100scn_interface warriorb_tc0100scn_intf_l =
|
||||
{
|
||||
"lscreen",
|
||||
1, 3, /* gfxnum, txnum */
|
||||
4, 0, /* x_offset, y_offset */
|
||||
0, 0, /* flip_xoff, flip_yoff */
|
||||
0, 0, /* flip_text_xoff, flip_text_yoff */
|
||||
0, 0
|
||||
};
|
||||
|
||||
static const tc0100scn_interface warriorb_tc0100scn_intf_r =
|
||||
{
|
||||
"rscreen",
|
||||
2, 3, /* gfxnum, txnum */
|
||||
4, 0, /* x_offset, y_offset */
|
||||
0, 0, /* flip_xoff, flip_yoff */
|
||||
0, 0, /* flip_text_xoff, flip_text_yoff */
|
||||
1, 1
|
||||
};
|
||||
|
||||
static const tc0110pcr_interface darius2d_tc0110pcr_intf_l =
|
||||
{
|
||||
0
|
||||
};
|
||||
|
||||
static const tc0110pcr_interface darius2d_tc0110pcr_intf_r =
|
||||
{
|
||||
1
|
||||
};
|
||||
|
||||
|
||||
static const tc0220ioc_interface darius2d_io_intf =
|
||||
{
|
||||
DEVCB_INPUT_PORT("DSWA"), DEVCB_INPUT_PORT("DSWB"),
|
||||
@ -491,9 +549,14 @@ static MACHINE_DRIVER_START( darius2d )
|
||||
MDRV_SCREEN_SIZE(40*8, 32*8)
|
||||
MDRV_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 3*8, 32*8-1)
|
||||
|
||||
MDRV_VIDEO_START(darius2d)
|
||||
MDRV_VIDEO_START(warriorb)
|
||||
MDRV_VIDEO_UPDATE(warriorb)
|
||||
|
||||
MDRV_TC0100SCN_ADD("tc0100scn_1", darius2d_tc0100scn_intf_l)
|
||||
MDRV_TC0100SCN_ADD("tc0100scn_2", darius2d_tc0100scn_intf_r)
|
||||
MDRV_TC0110PCR_ADD("tc0110pcr_1", darius2d_tc0110pcr_intf_l)
|
||||
MDRV_TC0110PCR_ADD("tc0110pcr_2", darius2d_tc0110pcr_intf_r)
|
||||
|
||||
/* sound hardware */
|
||||
MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
|
||||
|
||||
@ -554,6 +617,11 @@ static MACHINE_DRIVER_START( warriorb )
|
||||
MDRV_VIDEO_START(warriorb)
|
||||
MDRV_VIDEO_UPDATE(warriorb)
|
||||
|
||||
MDRV_TC0100SCN_ADD("tc0100scn_1", warriorb_tc0100scn_intf_l)
|
||||
MDRV_TC0100SCN_ADD("tc0100scn_2", warriorb_tc0100scn_intf_r)
|
||||
MDRV_TC0110PCR_ADD("tc0110pcr_1", darius2d_tc0110pcr_intf_l)
|
||||
MDRV_TC0110PCR_ADD("tc0110pcr_2", darius2d_tc0110pcr_intf_r)
|
||||
|
||||
/* sound hardware */
|
||||
MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
|
||||
|
||||
|
@ -398,7 +398,7 @@ Stephh's notes (based on the game M68000 code and some tests) :
|
||||
#include "includes/taitoipt.h"
|
||||
#include "cpu/m68000/m68000.h"
|
||||
#include "machine/taitoio.h"
|
||||
#include "video/taitoic.h"
|
||||
#include "video/taiicdev.h"
|
||||
#include "audio/taitosnd.h"
|
||||
#include "sound/2610intf.h"
|
||||
|
||||
@ -661,8 +661,8 @@ static ADDRESS_MAP_START( main_map, ADDRESS_SPACE_PROGRAM, 16 )
|
||||
AM_RANGE(0x180000, 0x18000f) AM_DEVREADWRITE8("tc0220ioc", tc0220ioc_r, tc0220ioc_w, 0xff00)
|
||||
AM_RANGE(0x1c0000, 0x1c0001) AM_WRITE(cpua_ctrl_w)
|
||||
AM_RANGE(0x200000, 0x20000f) AM_READWRITE(wgp_adinput_r,wgp_adinput_w)
|
||||
AM_RANGE(0x300000, 0x30ffff) AM_READWRITE(TC0100SCN_word_0_r,TC0100SCN_word_0_w) /* tilemaps */
|
||||
AM_RANGE(0x320000, 0x32000f) AM_READWRITE(TC0100SCN_ctrl_word_0_r,TC0100SCN_ctrl_word_0_w)
|
||||
AM_RANGE(0x300000, 0x30ffff) AM_DEVREADWRITE("tc0100scn", tc0100scn_word_r, tc0100scn_word_w) /* tilemaps */
|
||||
AM_RANGE(0x320000, 0x32000f) AM_DEVREADWRITE("tc0100scn", tc0100scn_ctrl_word_r, tc0100scn_ctrl_word_w)
|
||||
AM_RANGE(0x400000, 0x40bfff) AM_RAM AM_BASE(&wgp_spritemap) AM_SIZE(&wgp_spritemap_size) /* sprite tilemaps */
|
||||
AM_RANGE(0x40c000, 0x40dfff) AM_RAM AM_BASE_SIZE_GENERIC(spriteram) /* sprite ram */
|
||||
AM_RANGE(0x40fff0, 0x40fff1) AM_WRITENOP /* ?? (writes 0x8000 and 0 alternately - Wgp2 just 0) */
|
||||
@ -897,9 +897,7 @@ static const gfx_layout charlayout =
|
||||
32*8 /* every sprite takes 32 consecutive bytes */
|
||||
};
|
||||
|
||||
/* taitoic.c TC0100SCN routines expect scr stuff to be in second gfx
|
||||
slot */
|
||||
|
||||
/* taitoic.c TC0100SCN routines expect scr stuff to be in second gfx slot */
|
||||
static GFXDECODE_START( wgp )
|
||||
GFXDECODE_ENTRY( "gfx3", 0x0, wgp_tilelayout, 0, 256 ) /* sprites */
|
||||
GFXDECODE_ENTRY( "gfx1", 0x0, charlayout, 0, 256 ) /* sprites & playfield */
|
||||
@ -951,6 +949,26 @@ static MACHINE_START( wgp )
|
||||
state_save_register_postload(machine, wgp_postload, NULL);
|
||||
}
|
||||
|
||||
static const tc0100scn_interface wgp_tc0100scn_intf =
|
||||
{
|
||||
"screen",
|
||||
1, 3, /* gfxnum, txnum */
|
||||
0, 0, /* x_offset, y_offset */
|
||||
0, 0, /* flip_xoff, flip_yoff */
|
||||
0, 0, /* flip_text_xoff, flip_text_yoff */
|
||||
0, 0
|
||||
};
|
||||
|
||||
static const tc0100scn_interface wgp2_tc0100scn_intf =
|
||||
{
|
||||
"screen",
|
||||
1, 3, /* gfxnum, txnum */
|
||||
4, 2, /* x_offset, y_offset */
|
||||
0, 0, /* flip_xoff, flip_yoff */
|
||||
0, 0, /* flip_text_xoff, flip_text_yoff */
|
||||
0, 0
|
||||
};
|
||||
|
||||
static const tc0220ioc_interface wgp_io_intf =
|
||||
{
|
||||
DEVCB_INPUT_PORT("DSWA"), DEVCB_INPUT_PORT("DSWB"),
|
||||
@ -992,6 +1010,8 @@ static MACHINE_DRIVER_START( wgp )
|
||||
MDRV_VIDEO_START(wgp)
|
||||
MDRV_VIDEO_UPDATE(wgp)
|
||||
|
||||
MDRV_TC0100SCN_ADD("tc0100scn", wgp_tc0100scn_intf)
|
||||
|
||||
/* sound hardware */
|
||||
MDRV_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
|
||||
|
||||
@ -1010,6 +1030,9 @@ static MACHINE_DRIVER_START( wgp2 )
|
||||
MDRV_QUANTUM_TIME(HZ(12000))
|
||||
/* video hardware */
|
||||
MDRV_VIDEO_START(wgp2)
|
||||
|
||||
MDRV_DEVICE_REMOVE("tc0100scn")
|
||||
MDRV_TC0100SCN_ADD("tc0100scn", wgp2_tc0100scn_intf)
|
||||
MACHINE_DRIVER_END
|
||||
|
||||
|
||||
|
@ -1,32 +1,5 @@
|
||||
#include "driver.h"
|
||||
#include "video/taitoic.h"
|
||||
|
||||
#define TC0100SCN_GFX_NUM 1
|
||||
|
||||
|
||||
/**********************************************************/
|
||||
|
||||
static void asuka_core_video_start(running_machine *machine, int x_offs,int buffering)
|
||||
{
|
||||
PC090OJ_vh_start(machine,0,0,8,buffering); /* gfxset, x offset, y offset, buffering */
|
||||
TC0100SCN_vh_start(machine,1,TC0100SCN_GFX_NUM,x_offs,0,0,0,0,0,0);
|
||||
TC0110PCR_vh_start(machine);
|
||||
}
|
||||
|
||||
VIDEO_START( asuka )
|
||||
{
|
||||
asuka_core_video_start(machine, 0,0);
|
||||
}
|
||||
|
||||
VIDEO_START( galmedes )
|
||||
{
|
||||
asuka_core_video_start(machine, 1,0);
|
||||
}
|
||||
|
||||
VIDEO_START( cadash )
|
||||
{
|
||||
asuka_core_video_start(machine, 1,1);
|
||||
}
|
||||
#include "video/taiicdev.h"
|
||||
|
||||
/**************************************************************
|
||||
SPRITE READ AND WRITE HANDLERS
|
||||
@ -34,8 +7,10 @@ VIDEO_START( cadash )
|
||||
|
||||
WRITE16_HANDLER( asuka_spritectrl_w )
|
||||
{
|
||||
const device_config *pc090oj = devtag_get_device(space->machine, "pc090oj");
|
||||
|
||||
/* Bits 2-5 are color bank; in asuka games bit 0 is global priority */
|
||||
PC090OJ_sprite_ctrl = ((data & 0x3c) >> 2) | ((data & 0x1) << 15);
|
||||
pc090oj_set_sprite_ctrl(pc090oj, ((data & 0x3c) >> 2) | ((data & 0x1) << 15));
|
||||
}
|
||||
|
||||
|
||||
@ -45,11 +20,13 @@ WRITE16_HANDLER( asuka_spritectrl_w )
|
||||
|
||||
VIDEO_UPDATE( asuka )
|
||||
{
|
||||
const device_config *tc0100scn = devtag_get_device(screen->machine, "tc0100scn");
|
||||
const device_config *pc090oj = devtag_get_device(screen->machine, "pc090oj");
|
||||
UINT8 layer[3];
|
||||
|
||||
TC0100SCN_tilemap_update(screen->machine);
|
||||
tc0100scn_tilemap_update(tc0100scn);
|
||||
|
||||
layer[0] = TC0100SCN_bottomlayer(0);
|
||||
layer[0] = tc0100scn_bottomlayer(tc0100scn);
|
||||
layer[1] = layer[0]^1;
|
||||
layer[2] = 2;
|
||||
|
||||
@ -58,36 +35,38 @@ VIDEO_UPDATE( asuka )
|
||||
/* Ensure screen blanked even when bottom layer not drawn due to disable bit */
|
||||
bitmap_fill(bitmap, cliprect, 0);
|
||||
|
||||
TC0100SCN_tilemap_draw(screen->machine,bitmap,cliprect,0,layer[0],TILEMAP_DRAW_OPAQUE,1);
|
||||
TC0100SCN_tilemap_draw(screen->machine,bitmap,cliprect,0,layer[1],0,2);
|
||||
TC0100SCN_tilemap_draw(screen->machine,bitmap,cliprect,0,layer[2],0,4);
|
||||
tc0100scn_tilemap_draw(tc0100scn, bitmap, cliprect, layer[0], TILEMAP_DRAW_OPAQUE, 1);
|
||||
tc0100scn_tilemap_draw(tc0100scn, bitmap, cliprect, layer[1], 0, 2);
|
||||
tc0100scn_tilemap_draw(tc0100scn, bitmap, cliprect, layer[2], 0, 4);
|
||||
|
||||
/* Sprites may be over or under top bg layer */
|
||||
PC090OJ_draw_sprites(screen->machine,bitmap,cliprect,2);
|
||||
pc090oj_draw_sprites(pc090oj, bitmap, cliprect, 2);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
VIDEO_UPDATE( bonzeadv )
|
||||
{
|
||||
const device_config *tc0100scn = devtag_get_device(screen->machine, "tc0100scn");
|
||||
const device_config *pc090oj = devtag_get_device(screen->machine, "pc090oj");
|
||||
UINT8 layer[3];
|
||||
|
||||
TC0100SCN_tilemap_update(screen->machine);
|
||||
tc0100scn_tilemap_update(tc0100scn);
|
||||
|
||||
layer[0] = TC0100SCN_bottomlayer(0);
|
||||
layer[1] = layer[0]^1;
|
||||
layer[0] = tc0100scn_bottomlayer(tc0100scn);
|
||||
layer[1] = layer[0] ^ 1;
|
||||
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 */
|
||||
bitmap_fill(bitmap, cliprect, 0);
|
||||
|
||||
TC0100SCN_tilemap_draw(screen->machine,bitmap,cliprect,0,layer[0],TILEMAP_DRAW_OPAQUE,1);
|
||||
TC0100SCN_tilemap_draw(screen->machine,bitmap,cliprect,0,layer[1],0,2);
|
||||
TC0100SCN_tilemap_draw(screen->machine,bitmap,cliprect,0,layer[2],0,4);
|
||||
tc0100scn_tilemap_draw(tc0100scn, bitmap, cliprect, layer[0], TILEMAP_DRAW_OPAQUE, 1);
|
||||
tc0100scn_tilemap_draw(tc0100scn, bitmap, cliprect, layer[1], 0, 2);
|
||||
tc0100scn_tilemap_draw(tc0100scn, bitmap, cliprect, layer[2], 0, 4);
|
||||
|
||||
/* Sprites are always over both bg layers */
|
||||
PC090OJ_draw_sprites(screen->machine,bitmap,cliprect,0);
|
||||
pc090oj_draw_sprites(pc090oj, bitmap, cliprect, 0);
|
||||
return 0;
|
||||
}
|
||||
|
@ -1,7 +1,5 @@
|
||||
#include "driver.h"
|
||||
#include "video/taitoic.h"
|
||||
|
||||
#define TC0100SCN_GFX_NUM 1
|
||||
#include "video/taiicdev.h"
|
||||
|
||||
struct tempsprite
|
||||
{
|
||||
@ -14,43 +12,17 @@ struct tempsprite
|
||||
};
|
||||
static struct tempsprite *spritelist;
|
||||
|
||||
static int taito_hide_pixels;
|
||||
|
||||
|
||||
|
||||
/**********************************************************/
|
||||
|
||||
static VIDEO_START( ninjaw_core )
|
||||
VIDEO_START( ninjaw )
|
||||
{
|
||||
int chips;
|
||||
int mask;
|
||||
const device_config *tc0100scn = devtag_get_device(machine, "tc0100scn_1");
|
||||
|
||||
spritelist = auto_alloc_array(machine, struct tempsprite, 0x1000);
|
||||
|
||||
chips = TC0100SCN_count(machine);
|
||||
|
||||
assert_always(chips > 0, "we have an erroneous TC0100SCN configuration");
|
||||
|
||||
TC0100SCN_vh_start(machine,chips,TC0100SCN_GFX_NUM,taito_hide_pixels,0,0,0,0,0,2);
|
||||
|
||||
mask = TC0110PCR_mask(machine);
|
||||
if (mask & 1)
|
||||
TC0110PCR_vh_start(machine);
|
||||
|
||||
if (mask & 2)
|
||||
TC0110PCR_1_vh_start(machine);
|
||||
|
||||
if (mask & 4)
|
||||
TC0110PCR_2_vh_start(machine);
|
||||
|
||||
/* Ensure palette from correct TC0110PCR used for each screen */
|
||||
TC0100SCN_set_chip_colbanks(0x0,0x100,0x200);
|
||||
}
|
||||
|
||||
VIDEO_START( ninjaw )
|
||||
{
|
||||
taito_hide_pixels = 22;
|
||||
VIDEO_START_CALL(ninjaw_core);
|
||||
tc0100scn_set_colbanks(tc0100scn, 0x0, 0x100, 0x200);
|
||||
}
|
||||
|
||||
/************************************************************
|
||||
@ -149,51 +121,53 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap,const rectan
|
||||
|
||||
VIDEO_UPDATE( ninjaw )
|
||||
{
|
||||
int xoffs = 0, screen_number = -1;
|
||||
int xoffs = 0;
|
||||
UINT8 layer[3], nodraw;
|
||||
|
||||
const device_config *left_screen = devtag_get_device(screen->machine, "lscreen");
|
||||
const device_config *middle_screen = devtag_get_device(screen->machine, "mscreen");
|
||||
const device_config *right_screen = devtag_get_device(screen->machine, "rscreen");
|
||||
const device_config *tc0100scn = NULL;
|
||||
|
||||
if (screen == left_screen)
|
||||
{
|
||||
xoffs = 36*8*0;
|
||||
screen_number = 0;
|
||||
xoffs = 36 * 8 * 0;
|
||||
tc0100scn = devtag_get_device(screen->machine, "tc0100scn_1");
|
||||
}
|
||||
else if (screen == middle_screen)
|
||||
{
|
||||
xoffs = 36*8*1;
|
||||
screen_number = 1;
|
||||
xoffs = 36 * 8 * 1;
|
||||
tc0100scn = devtag_get_device(screen->machine, "tc0100scn_2");
|
||||
}
|
||||
else if (screen == right_screen)
|
||||
{
|
||||
xoffs = 36*8*2;
|
||||
screen_number = 2;
|
||||
xoffs = 36 * 8 * 2;
|
||||
tc0100scn = devtag_get_device(screen->machine, "tc0100scn_3");
|
||||
}
|
||||
|
||||
TC0100SCN_tilemap_update(screen->machine);
|
||||
tc0100scn_tilemap_update(tc0100scn);
|
||||
|
||||
layer[0] = TC0100SCN_bottomlayer(0);
|
||||
layer[1] = layer[0]^1;
|
||||
layer[0] = tc0100scn_bottomlayer(tc0100scn);
|
||||
layer[1] = layer[0] ^ 1;
|
||||
layer[2] = 2;
|
||||
|
||||
/* chip 0 does tilemaps on the left, chip 1 center, chip 2 the right */
|
||||
// draw bottom layer
|
||||
nodraw = TC0100SCN_tilemap_draw(screen->machine,bitmap,cliprect,screen_number,layer[0],TILEMAP_DRAW_OPAQUE,0); /* left */
|
||||
nodraw = tc0100scn_tilemap_draw(tc0100scn, bitmap, cliprect, layer[0], TILEMAP_DRAW_OPAQUE, 0); /* left */
|
||||
|
||||
/* Ensure screen blanked even when bottom layers not drawn due to disable bit */
|
||||
if (nodraw) bitmap_fill(bitmap, cliprect, get_black_pen(screen->machine));
|
||||
if (nodraw)
|
||||
bitmap_fill(bitmap, cliprect, get_black_pen(screen->machine));
|
||||
|
||||
/* Sprites can be under/over the layer below text layer */
|
||||
draw_sprites(screen->machine,bitmap,cliprect,1,xoffs,8); // draw sprites with priority 1 which are under the mid layer
|
||||
draw_sprites(screen->machine, bitmap, cliprect, 1, xoffs, 8); // draw sprites with priority 1 which are under the mid layer
|
||||
|
||||
// draw middle layer
|
||||
TC0100SCN_tilemap_draw(screen->machine,bitmap,cliprect,screen_number,layer[1],0,0);
|
||||
tc0100scn_tilemap_draw(tc0100scn, bitmap, cliprect, layer[1], 0, 0);
|
||||
|
||||
draw_sprites(screen->machine,bitmap,cliprect,0,xoffs,8); // draw sprites with priority 0 which are over the mid layer
|
||||
|
||||
// draw top(text) layer
|
||||
TC0100SCN_tilemap_draw(screen->machine,bitmap,cliprect,screen_number,layer[2],0,0);
|
||||
tc0100scn_tilemap_draw(tc0100scn, bitmap, cliprect, layer[2], 0, 0);
|
||||
return 0;
|
||||
}
|
||||
|
@ -1,7 +1,5 @@
|
||||
#include "driver.h"
|
||||
#include "video/taitoic.h"
|
||||
|
||||
#define TC0100SCN_GFX_NUM 1
|
||||
#include "video/taiicdev.h"
|
||||
|
||||
struct tempsprite
|
||||
{
|
||||
@ -23,13 +21,7 @@ VIDEO_START( othunder )
|
||||
/* Up to $800/8 big sprites, requires 0x100 * sizeof(*spritelist)
|
||||
Multiply this by 32 to give room for the number of small sprites,
|
||||
which are what actually get put in the structure. */
|
||||
|
||||
spritelist = auto_alloc_array(machine, struct tempsprite, 0x2000);
|
||||
|
||||
TC0100SCN_vh_start(machine,1,TC0100SCN_GFX_NUM,4,0,0,0,0,0,0);
|
||||
|
||||
if (TC0110PCR_mask(machine) & 1)
|
||||
TC0110PCR_vh_start(machine);
|
||||
}
|
||||
|
||||
|
||||
@ -220,27 +212,28 @@ logerror("Sprite number %04x had %02x invalid chunks\n",tilenum,bad_chunks);
|
||||
|
||||
VIDEO_UPDATE( othunder )
|
||||
{
|
||||
const device_config *tc0100scn = devtag_get_device(screen->machine, "tc0100scn");
|
||||
int layer[3];
|
||||
|
||||
TC0100SCN_tilemap_update(screen->machine);
|
||||
tc0100scn_tilemap_update(tc0100scn);
|
||||
|
||||
layer[0] = TC0100SCN_bottomlayer(0);
|
||||
layer[1] = layer[0]^1;
|
||||
layer[0] = tc0100scn_bottomlayer(tc0100scn);
|
||||
layer[1] = layer[0] ^ 1;
|
||||
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 */
|
||||
bitmap_fill(bitmap, cliprect, 0);
|
||||
|
||||
TC0100SCN_tilemap_draw(screen->machine,bitmap,cliprect,0,layer[0],TILEMAP_DRAW_OPAQUE,1);
|
||||
TC0100SCN_tilemap_draw(screen->machine,bitmap,cliprect,0,layer[1],0,2);
|
||||
TC0100SCN_tilemap_draw(screen->machine,bitmap,cliprect,0,layer[2],0,4);
|
||||
tc0100scn_tilemap_draw(tc0100scn, bitmap, cliprect, layer[0], TILEMAP_DRAW_OPAQUE, 1);
|
||||
tc0100scn_tilemap_draw(tc0100scn, bitmap, cliprect, layer[1], 0, 2);
|
||||
tc0100scn_tilemap_draw(tc0100scn, bitmap, cliprect, layer[2], 0, 4);
|
||||
|
||||
/* Sprites can be under/over the layer below text layer */
|
||||
{
|
||||
static const int primasks[2] = {0xf0,0xfc};
|
||||
draw_sprites(screen->machine, bitmap,cliprect,primasks,3);
|
||||
static const int primasks[2] = {0xf0, 0xfc};
|
||||
draw_sprites(screen->machine, bitmap, cliprect, primasks, 3);
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
@ -1800,7 +1800,8 @@ void tc0080vco_tilemap_draw( const device_config *device, bitmap_t *bitmap, cons
|
||||
}
|
||||
}
|
||||
|
||||
/* FIXME: these could replace the external uses of RAM regions... completely untested! */
|
||||
/* FIXME: maybe it would be better to provide pointers to these RAM regions
|
||||
which can be accessed directly by the drivers... */
|
||||
READ16_DEVICE_HANDLER( tc0080vco_cram_0_r )
|
||||
{
|
||||
tc0080vco_state *tc0080vco = tc0080vco_get_safe_token(device);
|
||||
@ -1831,36 +1832,6 @@ READ_LINE_DEVICE_HANDLER( tc0080vco_flipscreen_r )
|
||||
return tc0080vco->flipscreen;
|
||||
}
|
||||
|
||||
WRITE16_DEVICE_HANDLER( tc0080vco_cram_0_w )
|
||||
{
|
||||
tc0080vco_state *tc0080vco = tc0080vco_get_safe_token(device);
|
||||
COMBINE_DATA(&tc0080vco->chain_ram_0[offset]);
|
||||
}
|
||||
|
||||
WRITE16_DEVICE_HANDLER( tc0080vco_cram_1_w )
|
||||
{
|
||||
tc0080vco_state *tc0080vco = tc0080vco_get_safe_token(device);
|
||||
COMBINE_DATA(&tc0080vco->chain_ram_1[offset]);
|
||||
}
|
||||
|
||||
WRITE16_DEVICE_HANDLER( tc0080vco_sprram_w )
|
||||
{
|
||||
tc0080vco_state *tc0080vco = tc0080vco_get_safe_token(device);
|
||||
COMBINE_DATA(&tc0080vco->spriteram[offset]);
|
||||
}
|
||||
|
||||
WRITE16_DEVICE_HANDLER( tc0080vco_scrram_w )
|
||||
{
|
||||
tc0080vco_state *tc0080vco = tc0080vco_get_safe_token(device);
|
||||
COMBINE_DATA(&tc0080vco->scroll_ram[offset]);
|
||||
}
|
||||
|
||||
WRITE_LINE_DEVICE_HANDLER( tc0080vco_flipscreen_w )
|
||||
{
|
||||
tc0080vco_state *tc0080vco = tc0080vco_get_safe_token(device);
|
||||
tc0080vco->flipscreen = state;
|
||||
}
|
||||
|
||||
|
||||
static STATE_POSTLOAD( tc0080vco_postload )
|
||||
{
|
||||
@ -1912,9 +1883,6 @@ static DEVICE_START( tc0080vco )
|
||||
/* Perform extra initialisations for text layer */
|
||||
tc0080vco->tilemap[2] = tilemap_create_device(device, tc0080vco_get_tx_tile_info, tilemap_scan_rows, 8, 8, 64, 64);
|
||||
|
||||
/* create the char set (gfx will then be updated dynamically from RAM) */
|
||||
device->machine->gfx[tc0080vco->tx_gfx] = gfx_element_alloc(device->machine, &tc0080vco_charlayout, (UINT8 *)tc0080vco->char_ram, 64, 0);
|
||||
|
||||
tilemap_set_scrolldx(tc0080vco->tilemap[2], 0, 0);
|
||||
tilemap_set_scrolldy(tc0080vco->tilemap[2], 48, -448);
|
||||
|
||||
@ -1938,6 +1906,9 @@ static DEVICE_START( tc0080vco )
|
||||
tc0080vco->spriteram = tc0080vco->ram + 0x20400 / 2;
|
||||
tc0080vco->scroll_ram = tc0080vco->ram + 0x20800 / 2;
|
||||
|
||||
/* create the char set (gfx will then be updated dynamically from RAM) */
|
||||
device->machine->gfx[tc0080vco->tx_gfx] = gfx_element_alloc(device->machine, &tc0080vco_charlayout, (UINT8 *)tc0080vco->char_ram, 64, 0);
|
||||
|
||||
state_save_register_device_item_pointer(device, 0, tc0080vco->ram, TC0080VCO_RAM_SIZE / 2);
|
||||
state_save_register_postload(device->machine, tc0080vco_postload, tc0080vco);
|
||||
}
|
||||
@ -2220,21 +2191,6 @@ WRITE16_DEVICE_HANDLER( tc0100scn_word_w )
|
||||
}
|
||||
}
|
||||
|
||||
#if 0 // these must be moved to the drivers
|
||||
WRITE16_DEVICE_HANDLER( TC0100SCN_dual_screen_w )
|
||||
{
|
||||
TC0100SCN_word_0_w(space,offset,data,mem_mask);
|
||||
TC0100SCN_word_1_w(space,offset,data,mem_mask);
|
||||
}
|
||||
|
||||
WRITE16_DEVICE_HANDLER( TC0100SCN_triple_screen_w )
|
||||
{
|
||||
TC0100SCN_word_0_w(space,offset,data,mem_mask);
|
||||
TC0100SCN_word_1_w(space,offset,data,mem_mask);
|
||||
TC0100SCN_word_2_w(space,offset,data,mem_mask);
|
||||
}
|
||||
#endif
|
||||
|
||||
READ16_DEVICE_HANDLER( tc0100scn_ctrl_word_r )
|
||||
{
|
||||
tc0100scn_state *tc0100scn = tc0100scn_get_safe_token(device);
|
||||
@ -2468,14 +2424,17 @@ static DEVICE_START( tc0100scn )
|
||||
|
||||
tc0100scn->screen = devtag_get_device(device->machine, intf->screen);
|
||||
|
||||
/* Set up clipping for multi-TC0100SCN games. We assume
|
||||
this code won't ever affect single screen games:
|
||||
Thundfox is the only one of those with two chips, and
|
||||
we're safe as it uses single width tilemaps. */
|
||||
|
||||
tc0100scn->cliprect = *video_screen_get_visible_area(tc0100scn->screen);
|
||||
|
||||
/* create the char set (gfx will then be updated dynamically from RAM) */
|
||||
device->machine->gfx[intf->txnum] = gfx_element_alloc(device->machine, &tc0100scn_charlayout, (UINT8 *)tc0100scn->char_ram, 64, 0);
|
||||
/* use the given gfx sets for bg/tx tiles*/
|
||||
tc0100scn->bg_gfx = intf->gfxnum; /* 2nd/3rd chips will use the same gfx set */
|
||||
tc0100scn->tx_gfx = intf->txnum;
|
||||
|
||||
tc0100scn->bg_gfx = intf->gfxnum; /* use the given gfx set for bg tiles; 2nd/3rd chips will use the same gfx set */
|
||||
|
||||
/* Single width versions */
|
||||
tc0100scn->tilemap[0][0] = tilemap_create_device(device, tc0100scn_get_bg_tile_info, tilemap_scan_rows, 8, 8, 64, 64);
|
||||
tc0100scn->tilemap[1][0] = tilemap_create_device(device, tc0100scn_get_fg_tile_info, tilemap_scan_rows, 8, 8, 64, 64);
|
||||
@ -2486,13 +2445,6 @@ static DEVICE_START( tc0100scn )
|
||||
tc0100scn->tilemap[1][1] = tilemap_create_device(device, tc0100scn_get_fg_tile_info, tilemap_scan_rows, 8, 8, 128, 64);
|
||||
tc0100scn->tilemap[2][1] = tilemap_create_device(device, tc0100scn_get_tx_tile_info, tilemap_scan_rows, 8, 8, 128, 32);
|
||||
|
||||
/* Set up clipping for multi-TC0100SCN games. We assume
|
||||
this code won't ever affect single screen games:
|
||||
Thundfox is the only one of those with two chips, and
|
||||
we're safe as it uses single width tilemaps. */
|
||||
|
||||
tc0100scn_set_layer_ptrs(tc0100scn);
|
||||
|
||||
tilemap_set_transparent_pen(tc0100scn->tilemap[0][0], 0);
|
||||
tilemap_set_transparent_pen(tc0100scn->tilemap[1][0], 0);
|
||||
tilemap_set_transparent_pen(tc0100scn->tilemap[2][0], 0);
|
||||
@ -2505,9 +2457,8 @@ static DEVICE_START( tc0100scn )
|
||||
7 bits higher and 2 pixels to the left than chip #1 because
|
||||
that's how thundfox wants it. */
|
||||
|
||||
// FIXME: use intf->multiscrn_xoffs to deal screen 2 & 3!
|
||||
xd = -intf->x_offset;
|
||||
yd = 8 - intf->y_offset;
|
||||
xd = (intf->multiscrn_hack == 0) ? (-intf->x_offset) : (-intf->x_offset - 2);
|
||||
yd = (intf->multiscrn_hack == 0) ? (8 - intf->y_offset) : (1 - intf->y_offset);
|
||||
|
||||
tilemap_set_scrolldx(tc0100scn->tilemap[0][0], xd - 16, -intf->flip_xoffs - xd - 16);
|
||||
tilemap_set_scrolldy(tc0100scn->tilemap[0][0], yd, -intf->flip_yoffs - yd);
|
||||
@ -2521,7 +2472,8 @@ static DEVICE_START( tc0100scn )
|
||||
display not from the edges of individual screens.
|
||||
NB flipscreen tilemap offsets are based on Cameltry */
|
||||
|
||||
// FIXME: use intf->multiscrn_xoffs to deal screen 2 & 3!
|
||||
xd = -intf->x_offset - intf->multiscrn_xoffs;
|
||||
yd = 8 - intf->y_offset;
|
||||
|
||||
tilemap_set_scrolldx(tc0100scn->tilemap[0][1], xd - 16, -intf->flip_xoffs - xd - 16);
|
||||
tilemap_set_scrolldy(tc0100scn->tilemap[0][1], yd, -intf->flip_yoffs - yd);
|
||||
@ -2546,11 +2498,18 @@ static DEVICE_START( tc0100scn )
|
||||
if (device->machine->gfx[intf->gfxnum]->color_granularity == 0x40) /* Undrfire */
|
||||
tc0100scn->tx_col_mult = 4;
|
||||
|
||||
//logerror("TC0100SCN bg gfx granularity %04x: multiplier %04x\n",
|
||||
//device->machine->gfx[intf->gfxnum]->color_granularity,TC0100SCN_tx_col_mult);
|
||||
//logerror("TC0100SCN bg gfx granularity %04x: multiplier %04x\n", device->machine->gfx[intf->gfxnum]->color_granularity, tc0100scn->tx_col_mult);
|
||||
|
||||
tc0100scn->ram = auto_alloc_array_clear(device->machine, UINT16, TC0100SCN_RAM_SIZE / 2);
|
||||
|
||||
tc0100scn_set_layer_ptrs(tc0100scn);
|
||||
|
||||
tc0100scn_set_colbanks(device, 0, 0, 0); /* standard values, only Wgp & multiscreen games change them */
|
||||
/* we call this here, so that they can be modified at VIDEO_START*/
|
||||
|
||||
/* create the char set (gfx will then be updated dynamically from RAM) */
|
||||
device->machine->gfx[tc0100scn->tx_gfx] = gfx_element_alloc(device->machine, &tc0100scn_charlayout, (UINT8 *)tc0100scn->char_ram, 64, 0);
|
||||
|
||||
state_save_register_device_item_pointer(device, 0, tc0100scn->ram, TC0100SCN_RAM_SIZE / 2);
|
||||
state_save_register_device_item_array(device, 0, tc0100scn->ctrl);
|
||||
state_save_register_device_item(device, 0, tc0100scn->dblwidth);
|
||||
@ -2567,7 +2526,6 @@ static DEVICE_RESET( tc0100scn )
|
||||
tc0100scn->dblwidth = 0;
|
||||
tc0100scn->colbank = 0;
|
||||
tc0100scn->gfxbank = 0; /* Mjnquest uniquely banks tiles */
|
||||
tc0100scn_set_colbanks(device, 0, 0, 0); /* standard values, only Wgp changes them */
|
||||
|
||||
for (i = 0; i < 8; i++)
|
||||
tc0100scn->ctrl[i] = 0;
|
||||
@ -2585,7 +2543,7 @@ struct _tc0280grd_state
|
||||
{
|
||||
UINT16 * ram;
|
||||
|
||||
tilemap_t *tilemap;
|
||||
tilemap_t *tilemap;
|
||||
|
||||
UINT16 ctrl[8];
|
||||
int gfxnum, base_color;
|
||||
|
@ -58,6 +58,7 @@ struct _tc0100scn_interface
|
||||
int flip_text_xoffs, flip_text_yoffs;
|
||||
|
||||
int multiscrn_xoffs;
|
||||
int multiscrn_hack;
|
||||
};
|
||||
|
||||
|
||||
@ -232,23 +233,9 @@ READ16_DEVICE_HANDLER( tc0080vco_cram_1_r );
|
||||
READ16_DEVICE_HANDLER( tc0080vco_sprram_r );
|
||||
READ16_DEVICE_HANDLER( tc0080vco_scrram_r );
|
||||
READ_LINE_DEVICE_HANDLER( tc0080vco_flipscreen_r );
|
||||
WRITE16_DEVICE_HANDLER( tc0080vco_cram_0_w );
|
||||
WRITE16_DEVICE_HANDLER( tc0080vco_cram_1_w );
|
||||
WRITE16_DEVICE_HANDLER( tc0080vco_sprram_w );
|
||||
WRITE16_DEVICE_HANDLER( tc0080vco_scrram_w );
|
||||
WRITE_LINE_DEVICE_HANDLER( tc0080vco_flipscreen_w );
|
||||
|
||||
#if 0
|
||||
extern UINT16 *TC0080VCO_chain_ram_0;
|
||||
extern UINT16 *TC0080VCO_chain_ram_1;
|
||||
extern UINT16 *TC0080VCO_spriteram;
|
||||
extern UINT16 *TC0080VCO_scroll_ram;
|
||||
extern int TC0080VCO_flipscreen;
|
||||
#endif
|
||||
|
||||
|
||||
/** TC0100SCN **/
|
||||
|
||||
#define TC0100SCN_SINGLE_VDU 1024
|
||||
|
||||
/* Function to set separate color banks for the three tilemapped layers.
|
||||
@ -276,12 +263,6 @@ WRITE32_DEVICE_HANDLER( tc0100scn_long_w );
|
||||
READ32_DEVICE_HANDLER( tc0100scn_ctrl_long_r );
|
||||
WRITE32_DEVICE_HANDLER( tc0100scn_ctrl_long_w );
|
||||
|
||||
#if 0
|
||||
/* Functions to write multiple TC0100SCNs with the same data */
|
||||
WRITE16_DEVICE_HANDLER( TC0100SCN_dual_screen_w );
|
||||
WRITE16_DEVICE_HANDLER( TC0100SCN_triple_screen_w );
|
||||
#endif
|
||||
|
||||
void tc0100scn_tilemap_update(const device_config *device);
|
||||
int tc0100scn_tilemap_draw(const device_config *device, bitmap_t *bitmap, const rectangle *cliprect, int layer, int flags, UINT32 priority);
|
||||
|
||||
@ -291,7 +272,6 @@ int tc0100scn_bottomlayer(const device_config *device);
|
||||
|
||||
|
||||
/** TC0280GRD & TC0430GRW **/
|
||||
|
||||
READ16_DEVICE_HANDLER( tc0280grd_word_r );
|
||||
WRITE16_DEVICE_HANDLER( tc0280grd_word_w );
|
||||
WRITE16_DEVICE_HANDLER( tc0280grd_ctrl_word_w );
|
||||
@ -306,7 +286,6 @@ void TC0430GRW_zoom_draw(const device_config *device, bitmap_t *bitmap, const re
|
||||
|
||||
|
||||
/** TC0360PRI **/
|
||||
|
||||
WRITE8_DEVICE_HANDLER( tc0360pri_w );
|
||||
READ8_DEVICE_HANDLER( tc0360pri_r );
|
||||
|
||||
@ -339,7 +318,6 @@ int tc0480scp_get_bg_priority(const device_config *device);
|
||||
//extern int TC0480SCP_pri_reg;
|
||||
|
||||
|
||||
|
||||
/** TC0150ROD **/
|
||||
READ16_DEVICE_HANDLER( tc0150rod_word_r );
|
||||
WRITE16_DEVICE_HANDLER( tc0150rod_word_w );
|
||||
@ -365,4 +343,3 @@ WRITE16_DEVICE_HANDLER( tc0180vcu_scroll_w );
|
||||
READ16_DEVICE_HANDLER( tc0180vcu_word_r );
|
||||
WRITE16_DEVICE_HANDLER( tc0180vcu_word_w );
|
||||
void tc0180vcu_tilemap_draw(const device_config *device, bitmap_t *bitmap, const rectangle *cliprect, int tmap_num, int plane);
|
||||
|
||||
|
@ -46,7 +46,7 @@ sprite RAM
|
||||
***************************************************************************/
|
||||
|
||||
#include "driver.h"
|
||||
#include "taitoic.h"
|
||||
#include "taiicdev.h"
|
||||
|
||||
|
||||
/* These are hand-tuned values */
|
||||
@ -65,33 +65,13 @@ static const int zoomy_conv_table[] =
|
||||
};
|
||||
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
Initialize and destroy video hardware emulation
|
||||
***************************************************************************/
|
||||
|
||||
VIDEO_START( syvalion )
|
||||
{
|
||||
TC0080VCO_vh_start(machine,0,1,1,1,-2);
|
||||
}
|
||||
|
||||
VIDEO_START( recordbr )
|
||||
{
|
||||
TC0080VCO_vh_start(machine,0,0,1,1,-2);
|
||||
}
|
||||
|
||||
VIDEO_START( dleague )
|
||||
{
|
||||
TC0080VCO_vh_start(machine,0,0,1,1,-2);
|
||||
}
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
Screen refresh
|
||||
***************************************************************************/
|
||||
|
||||
static void syvalion_draw_sprites(running_machine *machine,bitmap_t *bitmap,const rectangle *cliprect)
|
||||
static void syvalion_draw_sprites( running_machine *machine,bitmap_t *bitmap,const rectangle *cliprect )
|
||||
{
|
||||
const device_config *tc0080vco = devtag_get_device(machine, "tc0080vco");
|
||||
/* Y chain size is 16/32?/64/64? pixels. X chain size
|
||||
is always 64 pixels. */
|
||||
|
||||
@ -103,13 +83,13 @@ static void syvalion_draw_sprites(running_machine *machine,bitmap_t *bitmap,cons
|
||||
int tile_offs; /* sprite chain offset */
|
||||
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;
|
||||
y0 = TC0080VCO_spriteram[offs + 0] & 0x3ff;
|
||||
zoomx = (TC0080VCO_spriteram[offs + 2] & 0x7f00) >> 8;
|
||||
tile_offs = (TC0080VCO_spriteram[offs + 3] & 0x1fff) << 2;
|
||||
ysize = size[ ( TC0080VCO_spriteram[ offs ] & 0x0c00 ) >> 10 ];
|
||||
x0 = tc0080vco_sprram_r(tc0080vco, offs + 1, 0xffff) & 0x3ff;
|
||||
y0 = tc0080vco_sprram_r(tc0080vco, offs + 0, 0xffff) & 0x3ff;
|
||||
zoomx = (tc0080vco_sprram_r(tc0080vco, offs + 2, 0xffff) & 0x7f00) >> 8;
|
||||
tile_offs = (tc0080vco_sprram_r(tc0080vco, offs + 3, 0xffff) & 0x1fff) << 2;
|
||||
ysize = size[(tc0080vco_sprram_r(tc0080vco, offs, 0xffff) & 0x0c00) >> 10];
|
||||
|
||||
if (tile_offs)
|
||||
{
|
||||
@ -131,7 +111,7 @@ static void syvalion_draw_sprites(running_machine *machine,bitmap_t *bitmap,cons
|
||||
if (x0 >= 0x200) x0 -= 0x400;
|
||||
if (y0 >= 0x200) y0 -= 0x400;
|
||||
|
||||
if (TC0080VCO_flipscreen)
|
||||
if (tc0080vco_flipscreen_r(tc0080vco))
|
||||
{
|
||||
x0 = 497 - x0;
|
||||
y0 = 498 - y0;
|
||||
@ -144,21 +124,21 @@ static void syvalion_draw_sprites(running_machine *machine,bitmap_t *bitmap,cons
|
||||
}
|
||||
|
||||
y = y0;
|
||||
for ( j = 0 ; j < ysize ; j ++ )
|
||||
for (j = 0 ; j < ysize ; j++)
|
||||
{
|
||||
x = x0;
|
||||
for (k = 0 ; k < 4 ; k ++ )
|
||||
for (k = 0 ; k < 4 ; k++)
|
||||
{
|
||||
if (tile_offs >= 0x1000)
|
||||
{
|
||||
int tile, color, flipx, flipy;
|
||||
|
||||
tile = TC0080VCO_chain_ram_0[tile_offs] & 0x7fff;
|
||||
color = TC0080VCO_chain_ram_1[tile_offs] & 0x001f;
|
||||
flipx = TC0080VCO_chain_ram_1[tile_offs] & 0x0040;
|
||||
flipy = TC0080VCO_chain_ram_1[tile_offs] & 0x0080;
|
||||
tile = tc0080vco_cram_0_r(tc0080vco, tile_offs, 0xffff) & 0x7fff;
|
||||
color = tc0080vco_cram_1_r(tc0080vco, tile_offs, 0xffff) & 0x001f;
|
||||
flipx = tc0080vco_cram_1_r(tc0080vco, tile_offs, 0xffff) & 0x0040;
|
||||
flipy = tc0080vco_cram_1_r(tc0080vco, tile_offs, 0xffff) & 0x0080;
|
||||
|
||||
if (TC0080VCO_flipscreen)
|
||||
if (tc0080vco_flipscreen_r(tc0080vco))
|
||||
{
|
||||
flipx ^= 0x0040;
|
||||
flipy ^= 0x0080;
|
||||
@ -184,6 +164,7 @@ static void syvalion_draw_sprites(running_machine *machine,bitmap_t *bitmap,cons
|
||||
|
||||
static void recordbr_draw_sprites(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect, int priority)
|
||||
{
|
||||
const device_config *tc0080vco = devtag_get_device(machine, "tc0080vco");
|
||||
/* Y chain size is 16/32?/64/64? pixels. X chain size
|
||||
is always 64 pixels. */
|
||||
|
||||
@ -200,12 +181,12 @@ static void recordbr_draw_sprites(running_machine *machine, bitmap_t *bitmap, co
|
||||
if (offs < 0x01b0 && priority == 0) continue;
|
||||
if (offs >= 0x01b0 && priority == 1) continue;
|
||||
|
||||
x0 = TC0080VCO_spriteram[offs + 1] & 0x3ff;
|
||||
y0 = TC0080VCO_spriteram[offs + 0] & 0x3ff;
|
||||
zoomx = (TC0080VCO_spriteram[offs + 2] & 0x7f00) >> 8;
|
||||
zoomy = (TC0080VCO_spriteram[offs + 2] & 0x007f);
|
||||
tile_offs = (TC0080VCO_spriteram[offs + 3] & 0x1fff) << 2;
|
||||
ysize = size[ ( TC0080VCO_spriteram[ offs ] & 0x0c00 ) >> 10 ];
|
||||
x0 = tc0080vco_sprram_r(tc0080vco, offs + 1, 0xffff) & 0x3ff;
|
||||
y0 = tc0080vco_sprram_r(tc0080vco, offs + 0, 0xffff) & 0x3ff;
|
||||
zoomx = (tc0080vco_sprram_r(tc0080vco, offs + 2, 0xffff) & 0x7f00) >> 8;
|
||||
zoomy = (tc0080vco_sprram_r(tc0080vco, offs + 2, 0xffff) & 0x007f);
|
||||
tile_offs = (tc0080vco_sprram_r(tc0080vco, offs + 3, 0xffff) & 0x1fff) << 2;
|
||||
ysize = size[(tc0080vco_sprram_r(tc0080vco, offs, 0xffff) & 0x0c00) >> 10];
|
||||
|
||||
if (tile_offs)
|
||||
{
|
||||
@ -241,7 +222,7 @@ static void recordbr_draw_sprites(running_machine *machine, bitmap_t *bitmap, co
|
||||
if (x0 >= 0x200) x0 -= 0x400;
|
||||
if (y0 >= 0x200) y0 -= 0x400;
|
||||
|
||||
if (TC0080VCO_flipscreen)
|
||||
if (tc0080vco_flipscreen_r(tc0080vco))
|
||||
{
|
||||
x0 = 497 - x0;
|
||||
y0 = 498 - y0;
|
||||
@ -264,12 +245,12 @@ static void recordbr_draw_sprites(running_machine *machine, bitmap_t *bitmap, co
|
||||
{
|
||||
int tile, color, flipx, flipy;
|
||||
|
||||
tile = TC0080VCO_chain_ram_0[tile_offs] & 0x7fff;
|
||||
color = TC0080VCO_chain_ram_1[tile_offs] & 0x001f;
|
||||
flipx = TC0080VCO_chain_ram_1[tile_offs] & 0x0040;
|
||||
flipy = TC0080VCO_chain_ram_1[tile_offs] & 0x0080;
|
||||
tile = tc0080vco_cram_0_r(tc0080vco, tile_offs, 0xffff) & 0x7fff;
|
||||
color = tc0080vco_cram_1_r(tc0080vco, tile_offs, 0xffff) & 0x001f;
|
||||
flipx = tc0080vco_cram_1_r(tc0080vco, tile_offs, 0xffff) & 0x0040;
|
||||
flipy = tc0080vco_cram_1_r(tc0080vco, tile_offs, 0xffff) & 0x0080;
|
||||
|
||||
if (TC0080VCO_flipscreen)
|
||||
if (tc0080vco_flipscreen_r(tc0080vco))
|
||||
{
|
||||
flipx ^= 0x0040;
|
||||
flipy ^= 0x0080;
|
||||
@ -295,6 +276,7 @@ static void recordbr_draw_sprites(running_machine *machine, bitmap_t *bitmap, co
|
||||
|
||||
static void dleague_draw_sprites(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect, int priority)
|
||||
{
|
||||
const device_config *tc0080vco = devtag_get_device(machine, "tc0080vco");
|
||||
/* Y chain size is 16/32?/64/64? pixels. X chain size
|
||||
is always 64 pixels. */
|
||||
|
||||
@ -309,12 +291,12 @@ static void dleague_draw_sprites(running_machine *machine, bitmap_t *bitmap, con
|
||||
|
||||
for (offs = 0x03f8 / 2 ; offs >= 0 ; offs -= 0x008 / 2)
|
||||
{
|
||||
x0 = TC0080VCO_spriteram[offs + 1] & 0x3ff;
|
||||
y0 = TC0080VCO_spriteram[offs + 0] & 0x3ff;
|
||||
zoomx = (TC0080VCO_spriteram[offs + 2] & 0x7f00) >> 8;
|
||||
tile_offs = (TC0080VCO_spriteram[offs + 3] & 0x1fff) << 2;
|
||||
pribit = (TC0080VCO_spriteram[offs + 0] & 0x1000) >> 12;
|
||||
ysize = size[ ( TC0080VCO_spriteram[ offs ] & 0x0c00 ) >> 10 ];
|
||||
x0 = tc0080vco_sprram_r(tc0080vco, offs + 1, 0xffff) & 0x3ff;
|
||||
y0 = tc0080vco_sprram_r(tc0080vco, offs + 0, 0xffff) & 0x3ff;
|
||||
zoomx = (tc0080vco_sprram_r(tc0080vco, offs + 2, 0xffff) & 0x7f00) >> 8;
|
||||
tile_offs = (tc0080vco_sprram_r(tc0080vco, offs + 3, 0xffff) & 0x1fff) << 2;
|
||||
pribit = (tc0080vco_sprram_r(tc0080vco, offs + 0, 0xffff) & 0x1000) >> 12;
|
||||
ysize = size[(tc0080vco_sprram_r(tc0080vco, offs, 0xffff) & 0x0c00) >> 10];
|
||||
|
||||
if (tile_offs)
|
||||
{
|
||||
@ -334,13 +316,13 @@ static void dleague_draw_sprites(running_machine *machine, bitmap_t *bitmap, con
|
||||
zx = (dx + ex) << 12;
|
||||
}
|
||||
|
||||
if (TC0080VCO_scroll_ram[0x0002] & 0x8000)
|
||||
if (tc0080vco_scrram_r(tc0080vco, 0x0002, 0xffff) & 0x8000)
|
||||
pribit = 1;
|
||||
|
||||
if (x0 >= 0x200) x0 -= 0x400;
|
||||
if (y0 >= 0x200) y0 -= 0x400;
|
||||
|
||||
if (TC0080VCO_flipscreen)
|
||||
if (tc0080vco_flipscreen_r(tc0080vco))
|
||||
{
|
||||
x0 = 497 - x0;
|
||||
y0 = 498 - y0;
|
||||
@ -352,24 +334,25 @@ static void dleague_draw_sprites(running_machine *machine, bitmap_t *bitmap, con
|
||||
y0 += 2;
|
||||
}
|
||||
|
||||
if ( priority == pribit )
|
||||
if (priority == pribit)
|
||||
{
|
||||
y = y0;
|
||||
for ( j = 0 ; j < ysize ; j ++ )
|
||||
for (j = 0; j < ysize; j ++)
|
||||
{
|
||||
x = x0;
|
||||
for (k = 0 ; k < 4 ; k ++ )
|
||||
for (k = 0; k < 4; k ++ )
|
||||
{
|
||||
if (tile_offs >= 0x1000) /* or pitcher gets blanked */
|
||||
{
|
||||
int tile, color, flipx, flipy;
|
||||
|
||||
tile = TC0080VCO_chain_ram_0[tile_offs] & 0x7fff;
|
||||
color = TC0080VCO_chain_ram_1[tile_offs] & 0x001f;
|
||||
flipx = TC0080VCO_chain_ram_1[tile_offs] & 0x0040;
|
||||
flipy = TC0080VCO_chain_ram_1[tile_offs] & 0x0080;
|
||||
tile = tc0080vco_cram_0_r(tc0080vco, tile_offs, 0xffff) & 0x7fff;
|
||||
color = tc0080vco_cram_1_r(tc0080vco, tile_offs, 0xffff) & 0x001f;
|
||||
flipx = tc0080vco_cram_1_r(tc0080vco, tile_offs, 0xffff) & 0x0040;
|
||||
flipy = tc0080vco_cram_1_r(tc0080vco, tile_offs, 0xffff) & 0x0080;
|
||||
|
||||
if (TC0080VCO_flipscreen)
|
||||
|
||||
if (tc0080vco_flipscreen_r(tc0080vco))
|
||||
{
|
||||
flipx ^= 0x0040;
|
||||
flipy ^= 0x0080;
|
||||
@ -409,23 +392,27 @@ static void taitoh_log_vram(running_machine *machine)
|
||||
|
||||
VIDEO_UPDATE( syvalion )
|
||||
{
|
||||
TC0080VCO_tilemap_update(screen->machine);
|
||||
const device_config *tc0080vco = devtag_get_device(screen->machine, "tc0080vco");
|
||||
|
||||
tc0080vco_tilemap_update(tc0080vco);
|
||||
|
||||
taitoh_log_vram(screen->machine);
|
||||
|
||||
bitmap_fill(bitmap, cliprect, 0);
|
||||
|
||||
TC0080VCO_tilemap_draw(screen->machine,bitmap,cliprect,0,TILEMAP_DRAW_OPAQUE,0);
|
||||
TC0080VCO_tilemap_draw(screen->machine,bitmap,cliprect,1,0,0);
|
||||
syvalion_draw_sprites(screen->machine,bitmap,cliprect);
|
||||
TC0080VCO_tilemap_draw(screen->machine,bitmap,cliprect,2,0,0);
|
||||
tc0080vco_tilemap_draw(tc0080vco, bitmap, cliprect, 0, TILEMAP_DRAW_OPAQUE, 0);
|
||||
tc0080vco_tilemap_draw(tc0080vco, bitmap, cliprect, 1, 0, 0);
|
||||
syvalion_draw_sprites(screen->machine, bitmap,cliprect);
|
||||
tc0080vco_tilemap_draw(tc0080vco, bitmap, cliprect, 2, 0, 0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
VIDEO_UPDATE( recordbr )
|
||||
{
|
||||
TC0080VCO_tilemap_update(screen->machine);
|
||||
const device_config *tc0080vco = devtag_get_device(screen->machine, "tc0080vco");
|
||||
|
||||
tc0080vco_tilemap_update(tc0080vco);
|
||||
|
||||
taitoh_log_vram(screen->machine);
|
||||
|
||||
@ -433,28 +420,30 @@ VIDEO_UPDATE( recordbr )
|
||||
|
||||
#ifdef MAME_DEBUG
|
||||
if ( !input_code_pressed(screen->machine, KEYCODE_A) )
|
||||
TC0080VCO_tilemap_draw(screen->machine,bitmap,cliprect,0,TILEMAP_DRAW_OPAQUE,0);
|
||||
tc0080vco_tilemap_draw(tc0080vco, bitmap, cliprect, 0, TILEMAP_DRAW_OPAQUE, 0);
|
||||
if ( !input_code_pressed(screen->machine, KEYCODE_S) )
|
||||
recordbr_draw_sprites(screen->machine,bitmap,cliprect,0);
|
||||
recordbr_draw_sprites(screen->machine, bitmap, cliprect, 0);
|
||||
if ( !input_code_pressed(screen->machine, KEYCODE_D) )
|
||||
TC0080VCO_tilemap_draw(screen->machine,bitmap,cliprect,1,0,0);
|
||||
tc0080vco_tilemap_draw(tc0080vco, bitmap, cliprect, 1, 0, 0);
|
||||
if ( !input_code_pressed(screen->machine, KEYCODE_F) )
|
||||
recordbr_draw_sprites(screen->machine,bitmap,cliprect,1);
|
||||
recordbr_draw_sprites(screen->machine, bitmap, cliprect, 1);
|
||||
#else
|
||||
TC0080VCO_tilemap_draw(screen->machine,bitmap,cliprect,0,TILEMAP_DRAW_OPAQUE,0);
|
||||
recordbr_draw_sprites(screen->machine,bitmap,cliprect,0);
|
||||
TC0080VCO_tilemap_draw(screen->machine,bitmap,cliprect,1,0,0);
|
||||
recordbr_draw_sprites(screen->machine,bitmap,cliprect,1);
|
||||
tc0080vco_tilemap_draw(tc0080vco, bitmap, cliprect, 0, TILEMAP_DRAW_OPAQUE, 0);
|
||||
recordbr_draw_sprites(screen->machine, bitmap, cliprect, 0);
|
||||
tc0080vco_tilemap_draw(tc0080vco, bitmap, cliprect, 1, 0, 0);
|
||||
recordbr_draw_sprites(screen->machine, bitmap, cliprect, 1);
|
||||
#endif
|
||||
|
||||
TC0080VCO_tilemap_draw(screen->machine,bitmap,cliprect,2,0,0);
|
||||
tc0080vco_tilemap_draw(tc0080vco, bitmap, cliprect, 2, 0, 0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
VIDEO_UPDATE( dleague )
|
||||
{
|
||||
TC0080VCO_tilemap_update(screen->machine);
|
||||
const device_config *tc0080vco = devtag_get_device(screen->machine, "tc0080vco");
|
||||
|
||||
tc0080vco_tilemap_update(tc0080vco);
|
||||
|
||||
taitoh_log_vram(screen->machine);
|
||||
|
||||
@ -462,21 +451,21 @@ VIDEO_UPDATE( dleague )
|
||||
|
||||
#ifdef MAME_DEBUG
|
||||
if ( !input_code_pressed(screen->machine, KEYCODE_A) )
|
||||
TC0080VCO_tilemap_draw(screen->machine,bitmap,cliprect,0,TILEMAP_DRAW_OPAQUE,0);
|
||||
tc0080vco_tilemap_draw(tc0080vco, bitmap, cliprect, 0, TILEMAP_DRAW_OPAQUE, 0);
|
||||
if ( !input_code_pressed(screen->machine, KEYCODE_S) )
|
||||
dleague_draw_sprites(screen->machine,bitmap,cliprect,0);
|
||||
dleague_draw_sprites(screen->machine, bitmap, cliprect, 0);
|
||||
if ( !input_code_pressed(screen->machine, KEYCODE_D) )
|
||||
TC0080VCO_tilemap_draw(screen->machine,bitmap,cliprect,1,0,0);
|
||||
tc0080vco_tilemap_draw(tc0080vco, bitmap, cliprect, 1, 0, 0);
|
||||
if ( !input_code_pressed(screen->machine, KEYCODE_F) )
|
||||
dleague_draw_sprites(screen->machine,bitmap,cliprect,1);
|
||||
dleague_draw_sprites(screen->machine, bitmap, cliprect, 1);
|
||||
#else
|
||||
TC0080VCO_tilemap_draw(screen->machine,bitmap,cliprect,0,TILEMAP_DRAW_OPAQUE,0);
|
||||
dleague_draw_sprites (screen->machine,bitmap,cliprect,0);
|
||||
TC0080VCO_tilemap_draw(screen->machine,bitmap,cliprect,1,0,0);
|
||||
dleague_draw_sprites (screen->machine,bitmap,cliprect,1);
|
||||
tc0080vco_tilemap_draw(tc0080vco, bitmap, cliprect, 0, TILEMAP_DRAW_OPAQUE, 0);
|
||||
dleague_draw_sprites (screen->machine, bitmap, cliprect, 0);
|
||||
tc0080vco_tilemap_draw(tc0080vco, bitmap, cliprect, 1, 0, 0);
|
||||
dleague_draw_sprites (screen->machine, bitmap, cliprect, 1);
|
||||
#endif
|
||||
|
||||
TC0080VCO_tilemap_draw(screen->machine,bitmap,cliprect,2,0,0);
|
||||
tc0080vco_tilemap_draw(tc0080vco, bitmap, cliprect, 2, 0, 0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -5,7 +5,7 @@ Based on taito_h.c
|
||||
***************************************************************************/
|
||||
|
||||
#include "driver.h"
|
||||
#include "taitoic.h"
|
||||
#include "taiicdev.h"
|
||||
|
||||
|
||||
/* These are hand-tuned values */
|
||||
@ -23,14 +23,10 @@ static const int zoomy_conv_table[] =
|
||||
0x67,0x68,0x6a,0x6b,0x6c,0x6e,0x6f,0x71, 0x72,0x74,0x76,0x78,0x80,0x7b,0x7d,0x7f
|
||||
};
|
||||
|
||||
VIDEO_START( parentj )
|
||||
{
|
||||
TC0080VCO_vh_start(machine,0,0,1,1,-2);
|
||||
}
|
||||
|
||||
|
||||
static void parentj_draw_sprites(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect, int priority)
|
||||
{
|
||||
const device_config *tc0080vco = devtag_get_device(machine, "tc0080vco");
|
||||
/* Y chain size is 16/32?/64/64? pixels. X chain size
|
||||
is always 64 pixels. */
|
||||
|
||||
@ -47,12 +43,12 @@ static void parentj_draw_sprites(running_machine *machine, bitmap_t *bitmap, con
|
||||
if (offs < 0x01b0 && priority == 0) continue;
|
||||
if (offs >= 0x01b0 && priority == 1) continue;
|
||||
|
||||
x0 = TC0080VCO_spriteram[offs + 1] & 0x3ff;
|
||||
y0 = TC0080VCO_spriteram[offs + 0] & 0x3ff;
|
||||
zoomx = (TC0080VCO_spriteram[offs + 2] & 0x7f00) >> 8;
|
||||
zoomy = (TC0080VCO_spriteram[offs + 2] & 0x007f);
|
||||
tile_offs = (TC0080VCO_spriteram[offs + 3] & 0x1fff) << 2;
|
||||
ysize = size[ ( TC0080VCO_spriteram[ offs ] & 0x0c00 ) >> 10 ];
|
||||
x0 = tc0080vco_sprram_r(tc0080vco, offs + 1, 0xffff) & 0x3ff;
|
||||
y0 = tc0080vco_sprram_r(tc0080vco, offs + 0, 0xffff) & 0x3ff;
|
||||
zoomx = (tc0080vco_sprram_r(tc0080vco, offs + 2, 0xffff) & 0x7f00) >> 8;
|
||||
zoomy = (tc0080vco_sprram_r(tc0080vco, offs + 2, 0xffff) & 0x007f);
|
||||
tile_offs = (tc0080vco_sprram_r(tc0080vco, offs + 3, 0xffff) & 0x1fff) << 2;
|
||||
ysize = size[(tc0080vco_sprram_r(tc0080vco, offs, 0xffff) & 0x0c00) >> 10];
|
||||
|
||||
if (tile_offs)
|
||||
{
|
||||
@ -88,7 +84,7 @@ static void parentj_draw_sprites(running_machine *machine, bitmap_t *bitmap, con
|
||||
if (x0 >= 0x200) x0 -= 0x400;
|
||||
if (y0 >= 0x200) y0 -= 0x400;
|
||||
|
||||
if (TC0080VCO_flipscreen)
|
||||
if (tc0080vco_flipscreen_r(tc0080vco))
|
||||
{
|
||||
x0 = 497 - x0;
|
||||
y0 = 498 - y0;
|
||||
@ -111,12 +107,12 @@ static void parentj_draw_sprites(running_machine *machine, bitmap_t *bitmap, con
|
||||
{
|
||||
int tile, color, flipx, flipy;
|
||||
|
||||
tile = TC0080VCO_chain_ram_0[tile_offs] & 0x7fff;
|
||||
color = TC0080VCO_chain_ram_1[tile_offs] & 0x001f;
|
||||
flipx = TC0080VCO_chain_ram_1[tile_offs] & 0x0040;
|
||||
flipy = TC0080VCO_chain_ram_1[tile_offs] & 0x0080;
|
||||
tile = tc0080vco_cram_0_r(tc0080vco, tile_offs, 0xffff) & 0x7fff;
|
||||
color = tc0080vco_cram_1_r(tc0080vco, tile_offs, 0xffff) & 0x001f;
|
||||
flipx = tc0080vco_cram_1_r(tc0080vco, tile_offs, 0xffff) & 0x0040;
|
||||
flipy = tc0080vco_cram_1_r(tc0080vco, tile_offs, 0xffff) & 0x0080;
|
||||
|
||||
if (TC0080VCO_flipscreen)
|
||||
if (tc0080vco_flipscreen_r(tc0080vco))
|
||||
{
|
||||
flipx ^= 0x0040;
|
||||
flipy ^= 0x0080;
|
||||
@ -143,13 +139,14 @@ static void parentj_draw_sprites(running_machine *machine, bitmap_t *bitmap, con
|
||||
|
||||
VIDEO_UPDATE( parentj )
|
||||
{
|
||||
TC0080VCO_tilemap_update(screen->machine);
|
||||
const device_config *tc0080vco = devtag_get_device(screen->machine, "tc0080vco");
|
||||
tc0080vco_tilemap_update(tc0080vco);
|
||||
bitmap_fill(bitmap, cliprect, 0);
|
||||
TC0080VCO_tilemap_draw(screen->machine,bitmap,cliprect,0,TILEMAP_DRAW_OPAQUE,0);
|
||||
parentj_draw_sprites(screen->machine,bitmap,cliprect,0);
|
||||
parentj_draw_sprites(screen->machine,bitmap,cliprect,1);
|
||||
TC0080VCO_tilemap_draw(screen->machine,bitmap,cliprect,1,0,0);
|
||||
TC0080VCO_tilemap_draw(screen->machine,bitmap,cliprect,2,0,0);
|
||||
tc0080vco_tilemap_draw(tc0080vco, bitmap, cliprect, 0, TILEMAP_DRAW_OPAQUE, 0);
|
||||
parentj_draw_sprites(screen->machine, bitmap, cliprect, 0);
|
||||
parentj_draw_sprites(screen->machine, bitmap, cliprect, 1);
|
||||
tc0080vco_tilemap_draw(tc0080vco, bitmap, cliprect, 1, 0, 0);
|
||||
tc0080vco_tilemap_draw(tc0080vco, bitmap, cliprect, 2, 0, 0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -46,7 +46,7 @@ sprite RAM
|
||||
***************************************************************************/
|
||||
|
||||
#include "driver.h"
|
||||
#include "taitoic.h"
|
||||
#include "taiicdev.h"
|
||||
|
||||
|
||||
/* These are hand-tuned values */
|
||||
@ -64,24 +64,13 @@ static const int zoomy_conv_table[] =
|
||||
0x67,0x68,0x6a,0x6b,0x6c,0x6e,0x6f,0x71, 0x72,0x74,0x76,0x78,0x80,0x7b,0x7d,0x7f
|
||||
};
|
||||
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
Initialize and destroy video hardware emulation
|
||||
***************************************************************************/
|
||||
|
||||
VIDEO_START( taitoair )
|
||||
{
|
||||
TC0080VCO_vh_start(machine,0,0,1,1,-2);
|
||||
}
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
Screen refresh
|
||||
***************************************************************************/
|
||||
|
||||
static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect, int priority)
|
||||
{
|
||||
const device_config *tc0080vco = devtag_get_device(machine, "tc0080vco");
|
||||
/* Y chain size is 16/32?/64/64? pixels. X chain size
|
||||
is always 64 pixels. */
|
||||
|
||||
@ -93,17 +82,17 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const recta
|
||||
int tile_offs; /* sprite chain offset */
|
||||
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 == 1) continue;
|
||||
|
||||
x0 = TC0080VCO_spriteram[offs + 1] & 0x3ff;
|
||||
y0 = TC0080VCO_spriteram[offs + 0] & 0x3ff;
|
||||
zoomx = (TC0080VCO_spriteram[offs + 2] & 0x7f00) >> 8;
|
||||
zoomy = (TC0080VCO_spriteram[offs + 2] & 0x007f);
|
||||
tile_offs = (TC0080VCO_spriteram[offs + 3] & 0x1fff) << 2;
|
||||
ysize = size[ ( TC0080VCO_spriteram[ offs ] & 0x0c00 ) >> 10 ];
|
||||
x0 = tc0080vco_sprram_r(tc0080vco, offs + 1, 0xffff) & 0x3ff;
|
||||
y0 = tc0080vco_sprram_r(tc0080vco, offs + 0, 0xffff) & 0x3ff;
|
||||
zoomx = (tc0080vco_sprram_r(tc0080vco, offs + 2, 0xffff) & 0x7f00) >> 8;
|
||||
zoomy = (tc0080vco_sprram_r(tc0080vco, offs + 2, 0xffff) & 0x007f);
|
||||
tile_offs = (tc0080vco_sprram_r(tc0080vco, offs + 3, 0xffff) & 0x1fff) << 2;
|
||||
ysize = size[(tc0080vco_sprram_r(tc0080vco, offs, 0xffff) & 0x0c00) >> 10];
|
||||
|
||||
if (tile_offs)
|
||||
{
|
||||
@ -139,7 +128,7 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const recta
|
||||
if (x0 >= 0x200) x0 -= 0x400;
|
||||
if (y0 >= 0x200) y0 -= 0x400;
|
||||
|
||||
if (TC0080VCO_flipscreen)
|
||||
if (tc0080vco_flipscreen_r(tc0080vco))
|
||||
{
|
||||
x0 = 497 - x0;
|
||||
y0 = 498 - y0;
|
||||
@ -153,21 +142,21 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const recta
|
||||
}
|
||||
|
||||
y = y0;
|
||||
for (j = 0 ; j < ysize ; j ++)
|
||||
for (j = 0; j < ysize; j ++)
|
||||
{
|
||||
x = x0;
|
||||
for (k = 0 ; k < 4 ; k ++)
|
||||
for (k = 0; k < 4; k ++)
|
||||
{
|
||||
if (tile_offs >= 0x1000)
|
||||
{
|
||||
int tile, color, flipx, flipy;
|
||||
|
||||
tile = TC0080VCO_chain_ram_0[tile_offs] & 0x7fff;
|
||||
color = TC0080VCO_chain_ram_1[tile_offs] & 0x001f;
|
||||
flipx = TC0080VCO_chain_ram_1[tile_offs] & 0x0040;
|
||||
flipy = TC0080VCO_chain_ram_1[tile_offs] & 0x0080;
|
||||
tile = tc0080vco_cram_0_r(tc0080vco, tile_offs, 0xffff) & 0x7fff;
|
||||
color = tc0080vco_cram_1_r(tc0080vco, tile_offs, 0xffff) & 0x001f;
|
||||
flipx = tc0080vco_cram_1_r(tc0080vco, tile_offs, 0xffff) & 0x0040;
|
||||
flipy = tc0080vco_cram_1_r(tc0080vco, tile_offs, 0xffff) & 0x0080;
|
||||
|
||||
if (TC0080VCO_flipscreen)
|
||||
if (tc0080vco_flipscreen_r(tc0080vco))
|
||||
{
|
||||
flipx ^= 0x0040;
|
||||
flipy ^= 0x0080;
|
||||
@ -356,29 +345,32 @@ static void fill_poly(bitmap_t *bitmap, const struct poly *q)
|
||||
|
||||
VIDEO_UPDATE( taitoair )
|
||||
{
|
||||
TC0080VCO_tilemap_update(screen->machine);
|
||||
const device_config *tc0080vco = devtag_get_device(screen->machine, "tc0080vco");
|
||||
|
||||
tc0080vco_tilemap_update(tc0080vco);
|
||||
|
||||
bitmap_fill(bitmap, cliprect, 0x41);
|
||||
|
||||
#ifdef MAME_DEBUG
|
||||
if ( !input_code_pressed(screen->machine, KEYCODE_A) )
|
||||
TC0080VCO_tilemap_draw(screen->machine,bitmap,cliprect,0,0,0);
|
||||
tc0080vco_tilemap_draw(tc0080vco, bitmap, cliprect, 0, 0, 0);
|
||||
if ( !input_code_pressed(screen->machine, KEYCODE_S) )
|
||||
draw_sprites(screen->machine,bitmap,cliprect,0);
|
||||
draw_sprites(screen->machine, bitmap, cliprect, 0);
|
||||
if ( !input_code_pressed(screen->machine, KEYCODE_D) )
|
||||
TC0080VCO_tilemap_draw(screen->machine,bitmap,cliprect,1,0,0);
|
||||
tc0080vco_tilemap_draw(tc0080vco, bitmap, cliprect, 1, 0, 0);
|
||||
if ( !input_code_pressed(screen->machine, KEYCODE_F) )
|
||||
draw_sprites(screen->machine,bitmap,cliprect,1);
|
||||
draw_sprites(screen->machine, bitmap, cliprect, 1);
|
||||
#else
|
||||
TC0080VCO_tilemap_draw(screen->machine,bitmap,cliprect,0,0,0);
|
||||
draw_sprites (screen->machine,bitmap,cliprect,0);
|
||||
TC0080VCO_tilemap_draw(screen->machine,bitmap,cliprect,1,0,0);
|
||||
draw_sprites (screen->machine,bitmap,cliprect,1);
|
||||
tc0080vco_tilemap_draw(tc0080vco, bitmap, cliprect, 0, 0, 0);
|
||||
draw_sprites(screen->machine, bitmap, cliprect, 0);
|
||||
tc0080vco_tilemap_draw(tc0080vco, bitmap, cliprect, 1, 0, 0);
|
||||
draw_sprites(screen->machine, bitmap, cliprect, 1);
|
||||
#endif
|
||||
|
||||
TC0080VCO_tilemap_draw(screen->machine,bitmap,cliprect,2,0,0);
|
||||
tc0080vco_tilemap_draw(tc0080vco, bitmap, cliprect, 2, 0, 0);
|
||||
|
||||
if(taitoair_line_ram[0x3fff]) {
|
||||
if (taitoair_line_ram[0x3fff])
|
||||
{
|
||||
int adr = 0x3fff;
|
||||
struct poly q;
|
||||
view.x1 = cliprect->min_x;
|
||||
@ -386,16 +378,19 @@ VIDEO_UPDATE( taitoair )
|
||||
view.x2 = cliprect->max_x;
|
||||
view.y2 = cliprect->max_y;
|
||||
|
||||
while(adr>=0 && taitoair_line_ram[adr] && taitoair_line_ram[adr] != 0x4000) {
|
||||
while(adr>=0 && taitoair_line_ram[adr] && taitoair_line_ram[adr] != 0x4000)
|
||||
{
|
||||
int pcount;
|
||||
if(!(taitoair_line_ram[adr] & 0x8000) || adr<10) {
|
||||
if(!(taitoair_line_ram[adr] & 0x8000) || adr < 10)
|
||||
{
|
||||
logerror("quad: unknown value %04x at %04x\n", taitoair_line_ram[adr], adr);
|
||||
break;
|
||||
}
|
||||
q.col = (taitoair_line_ram[adr] & 0x7fff) + 0x300;
|
||||
adr--;
|
||||
pcount = 0;
|
||||
while(pcount < POLY_MAX_PT && adr>=1 && !(taitoair_line_ram[adr] & 0xc000)) {
|
||||
while(pcount < POLY_MAX_PT && adr>=1 && !(taitoair_line_ram[adr] & 0xc000))
|
||||
{
|
||||
q.p[pcount].y = taitoair_line_ram[adr]+3*16;
|
||||
q.p[pcount].x = taitoair_line_ram[adr-1];
|
||||
pcount++;
|
||||
|
@ -1,40 +1,14 @@
|
||||
#include "driver.h"
|
||||
#include "video/taitoic.h"
|
||||
|
||||
#define TC0100SCN_GFX_NUM 1
|
||||
#include "video/taiicdev.h"
|
||||
|
||||
/**********************************************************/
|
||||
|
||||
static void warriorb_core_vh_start(running_machine *machine, int x_offs,int multiscrn_xoffs)
|
||||
{
|
||||
int chips;
|
||||
int mask;
|
||||
|
||||
chips = TC0100SCN_count(machine);
|
||||
|
||||
assert_always(chips > 0, "erroneous TC0100SCN configuration");
|
||||
|
||||
TC0100SCN_vh_start(machine,chips,TC0100SCN_GFX_NUM,x_offs,0,0,0,0,0,multiscrn_xoffs);
|
||||
|
||||
mask = TC0110PCR_mask(machine);
|
||||
if (mask & 1)
|
||||
TC0110PCR_vh_start(machine);
|
||||
|
||||
if (mask & 2)
|
||||
TC0110PCR_1_vh_start(machine);
|
||||
|
||||
/* Ensure palette from correct TC0110PCR used for each screen */
|
||||
TC0100SCN_set_chip_colbanks(0,0x100,0x0);
|
||||
}
|
||||
|
||||
VIDEO_START( darius2d )
|
||||
{
|
||||
warriorb_core_vh_start(machine, 4,0);
|
||||
}
|
||||
|
||||
VIDEO_START( warriorb )
|
||||
{
|
||||
warriorb_core_vh_start(machine, 4,1);
|
||||
const device_config *tc0100scn = devtag_get_device(machine, "tc0100scn_1");
|
||||
|
||||
/* Ensure palette from correct TC0110PCR used for each screen */
|
||||
tc0100scn_set_colbanks(tc0100scn, 0x0, 0x100, 0x0);
|
||||
}
|
||||
|
||||
|
||||
@ -110,27 +84,28 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap,const rectan
|
||||
|
||||
VIDEO_UPDATE( warriorb )
|
||||
{
|
||||
int xoffs = 0, screen_number = -1;
|
||||
int xoffs = 0;
|
||||
UINT8 layer[3], nodraw;
|
||||
|
||||
const device_config *left_screen = devtag_get_device(screen->machine, "lscreen");
|
||||
const device_config *right_screen = devtag_get_device(screen->machine, "rscreen");
|
||||
const device_config *tc0100scn = NULL;
|
||||
|
||||
if (screen == left_screen)
|
||||
{
|
||||
xoffs = 40*8*0;
|
||||
screen_number = 0;
|
||||
xoffs = 40 * 8 * 0;
|
||||
tc0100scn = devtag_get_device(screen->machine, "tc0100scn_1");
|
||||
}
|
||||
else if (screen == right_screen)
|
||||
{
|
||||
xoffs = 40*8*1;
|
||||
screen_number = 1;
|
||||
xoffs = 40 * 8 * 1;
|
||||
tc0100scn = devtag_get_device(screen->machine, "tc0100scn_2");
|
||||
}
|
||||
|
||||
TC0100SCN_tilemap_update(screen->machine);
|
||||
tc0100scn_tilemap_update(tc0100scn);
|
||||
|
||||
layer[0] = TC0100SCN_bottomlayer(0);
|
||||
layer[1] = layer[0]^1;
|
||||
layer[0] = tc0100scn_bottomlayer(tc0100scn);
|
||||
layer[1] = layer[0] ^ 1;
|
||||
layer[2] = 2;
|
||||
|
||||
/* 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 */
|
||||
// draw bottom layer
|
||||
nodraw = TC0100SCN_tilemap_draw(screen->machine,bitmap,cliprect,screen_number,layer[0],TILEMAP_DRAW_OPAQUE,0); /* left */
|
||||
nodraw = tc0100scn_tilemap_draw(tc0100scn, bitmap, cliprect, layer[0], TILEMAP_DRAW_OPAQUE, 0); /* left */
|
||||
|
||||
/* Ensure screen blanked even when bottom layers not drawn due to disable bit */
|
||||
if(nodraw) bitmap_fill(bitmap, cliprect, get_black_pen(screen->machine));
|
||||
if (nodraw)
|
||||
bitmap_fill(bitmap, cliprect, get_black_pen(screen->machine));
|
||||
|
||||
// draw middle layer
|
||||
TC0100SCN_tilemap_draw(screen->machine,bitmap,cliprect,screen_number,layer[1],0,1);
|
||||
tc0100scn_tilemap_draw(tc0100scn, bitmap, cliprect, layer[1], 0, 1);
|
||||
|
||||
/* Sprites can be under/over the layer below text layer */
|
||||
draw_sprites(screen->machine, bitmap,cliprect,xoffs,8); // draw sprites
|
||||
draw_sprites(screen->machine, bitmap, cliprect, xoffs, 8); // draw sprites
|
||||
|
||||
// draw top(text) layer
|
||||
TC0100SCN_tilemap_draw(screen->machine,bitmap,cliprect,screen_number,layer[2],0,0);
|
||||
tc0100scn_tilemap_draw(tc0100scn, bitmap, cliprect, layer[2], 0, 0);
|
||||
return 0;
|
||||
}
|
||||
|
@ -1,7 +1,5 @@
|
||||
#include "driver.h"
|
||||
#include "video/taitoic.h"
|
||||
|
||||
#define TC0100SCN_GFX_NUM 1
|
||||
#include "video/taiicdev.h"
|
||||
|
||||
static tilemap_t *wgp_piv_tilemap[3];
|
||||
|
||||
@ -47,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);
|
||||
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);
|
||||
const device_config *tc0100scn = devtag_get_device(machine, "tc0100scn");
|
||||
|
||||
TC0100SCN_vh_start(machine,1,TC0100SCN_GFX_NUM,x_offs,y_offs,0,0,0,0,0);
|
||||
|
||||
if (TC0110PCR_mask(machine) & 1)
|
||||
TC0110PCR_vh_start(machine);
|
||||
wgp_piv_tilemap[0] = tilemap_create(machine, get_piv0_tile_info, tilemap_scan_rows, 16, 16, 64, 64);
|
||||
wgp_piv_tilemap[1] = tilemap_create(machine, get_piv1_tile_info, tilemap_scan_rows, 16, 16, 64, 64);
|
||||
wgp_piv_tilemap[2] = tilemap_create(machine, get_piv2_tile_info, tilemap_scan_rows, 16, 16, 64, 64);
|
||||
|
||||
wgp_piv_xoffs = piv_xoffs;
|
||||
wgp_piv_yoffs = piv_yoffs;
|
||||
|
||||
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[2],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[2], 0);
|
||||
|
||||
/* flipscreen n/a */
|
||||
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[2],-piv_xoffs,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[2],-piv_yoffs,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[2], -piv_xoffs, 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[2], -piv_yoffs, 0);
|
||||
|
||||
/* We don't need tilemap_set_scroll_rows, as the custom draw routine
|
||||
applies rowscroll manually */
|
||||
|
||||
TC0100SCN_set_colbanks(0x80,0xc0,0x40);
|
||||
/* We don't need tilemap_set_scroll_rows, as the custom draw routine applies rowscroll manually */
|
||||
tc0100scn_set_colbanks(tc0100scn, 0x80, 0xc0, 0x40);
|
||||
}
|
||||
|
||||
VIDEO_START( wgp )
|
||||
{
|
||||
wgp_core_vh_start(machine, 0,0,32,16);
|
||||
wgp_core_vh_start(machine, 32, 16);
|
||||
}
|
||||
|
||||
VIDEO_START( wgp2 )
|
||||
{
|
||||
wgp_core_vh_start(machine, 4,2,32,16);
|
||||
wgp_core_vh_start(machine, 32, 16);
|
||||
}
|
||||
|
||||
|
||||
@ -646,6 +639,7 @@ static void wgp_piv_layer_draw(running_machine *machine,bitmap_t *bitmap,const r
|
||||
|
||||
VIDEO_UPDATE( wgp )
|
||||
{
|
||||
const device_config *tc0100scn = devtag_get_device(screen->machine, "tc0100scn");
|
||||
int i;
|
||||
UINT8 layer[3];
|
||||
|
||||
@ -685,7 +679,7 @@ VIDEO_UPDATE( wgp )
|
||||
tilemap_set_scrolly(wgp_piv_tilemap[i], 0, wgp_piv_scrolly[i]);
|
||||
}
|
||||
|
||||
TC0100SCN_tilemap_update(screen->machine);
|
||||
tc0100scn_tilemap_update(tc0100scn);
|
||||
|
||||
bitmap_fill(bitmap, cliprect, 0);
|
||||
|
||||
@ -702,36 +696,34 @@ VIDEO_UPDATE( wgp )
|
||||
/* We should draw the following on a 1024x1024 bitmap... */
|
||||
|
||||
#ifdef MAME_DEBUG
|
||||
if (dislayer[layer[0]]==0)
|
||||
if (dislayer[layer[0]] == 0)
|
||||
#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
|
||||
if (dislayer[layer[1]]==0)
|
||||
if (dislayer[layer[1]] == 0)
|
||||
#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
|
||||
if (dislayer[layer[2]]==0)
|
||||
if (dislayer[layer[2]] == 0)
|
||||
#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
|
||||
the bitmap before we draw the TC0100SCN layers on it */
|
||||
|
||||
layer[0] = TC0100SCN_bottomlayer(0);
|
||||
layer[1] = layer[0]^1;
|
||||
/* ... then here we should apply rotation from wgp_sate_ctrl[] to the bitmap before we draw the TC0100SCN layers on it */
|
||||
layer[0] = tc0100scn_bottomlayer(tc0100scn);
|
||||
layer[1] = layer[0] ^ 1;
|
||||
layer[2] = 2;
|
||||
|
||||
TC0100SCN_tilemap_draw(screen->machine,bitmap,cliprect,0,layer[0],0,0);
|
||||
tc0100scn_tilemap_draw(tc0100scn, bitmap, cliprect, layer[0], 0, 0);
|
||||
|
||||
#ifdef MAME_DEBUG
|
||||
if (dislayer[3]==0)
|
||||
if (dislayer[3] == 0)
|
||||
#endif
|
||||
TC0100SCN_tilemap_draw(screen->machine,bitmap,cliprect,0,layer[1],0,0);
|
||||
TC0100SCN_tilemap_draw(screen->machine,bitmap,cliprect,0,layer[2],0,0);
|
||||
tc0100scn_tilemap_draw(tc0100scn, bitmap, cliprect, layer[1], 0, 0);
|
||||
tc0100scn_tilemap_draw(tc0100scn, bitmap, cliprect, layer[2], 0, 0);
|
||||
|
||||
#if 0
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user