New playable game added - Big Fight

Major improvements to Cycle Warriors video code (still not perfect, but road layer works now).
This commit is contained in:
Bryan McPhail 2008-01-06 17:32:28 +00:00
parent 0ce44c7911
commit 59c960b061
5 changed files with 595 additions and 134 deletions

View File

@ -3,6 +3,7 @@
Apache 3 ATF-011 Apache 3 ATF-011
Round Up 5 ATC-011 Round Up 5 ATC-011
Cycle Warriors ABA-011 Cycle Warriors ABA-011
Big Fight ABA-011
Incredibly complex hardware! These are all different boards, but share Incredibly complex hardware! These are all different boards, but share
a similar sprite chip (TZB215 on Apache 3, TZB315 on others). Other a similar sprite chip (TZB215 on Apache 3, TZB315 on others). Other
@ -18,6 +19,12 @@
Round Up 5 doesn't survive a reset Round Up 5 doesn't survive a reset
Dip switches Dip switches
Various other things.. Various other things..
Combine Big Fight & CycleWarriors video routines - currently each
game uses different sized tilemaps - these are probably software
controlled rather than hardwired, but I don't think either game
changes the size at runtime.
Big Fight/Cyclewarriors - misc graphics problems.
Cyclewarriors - test mode text does not appear as it needs a -256 Y scroll offset from somewhere.
Emulation by Bryan McPhail, mish@tendril.co.uk Emulation by Bryan McPhail, mish@tendril.co.uk
@ -66,6 +73,68 @@
CW27 CW27
Big Fight
Tatsumi, 1992
PCB Layout
----------
ABA-011
A-8
|-----------------------------------------------------------------|
| LM324 M6295 ROM15 TC5563 |
|LM324 VOL KA51 50MHz TC5563 PAL |-||
| TC51832 TC51832 |--------| | ||
| TC51832 TC51832 |TATSUMI | | ||
| TC51832 TC51832 |TZB315 | ROM20 | ||
| TC51832 TC51832 | | TMM2063 | ||
| ROM0 ROM8 |--------| Z80B | ||
| | ||
|J PAL 16MHz |-||
|A ROM2 ROM10 |--------------| PAL |
|M | 68000 | TMM2088 |
|M |--------------| |
|A ROM4 ROM12 TMM2088 |
| ROM16 ROM17 |-||
| PAL PAL TC51832 | ||
| ROM6 ROM14 ROM18 | ||
| EPL204 PAL TC51832 | ||
| |--------------| | ||
| CXD10950 CXD10950 | 68000 | ROM19 TC51832 | ||
| |--------------| | ||
| TC51832 |-||
| DSW3(4) DSW2(8) DSW1(8) |
|-----------------------------------------------------------------|
Z80 clock - 4.000MHz [16/4]
68k clocks - 12.500MHz [50/4]
M6295 clock - 2.000MHz [16/8]. Sample rate = 2000000/132
YM2151 clock - 4.000MHz [16/4]
|-------------------------|
| D65005(x16) |
|ROM21 |-||
| | ||
| | ||
| | ||
| | ||
| | ||
| | ||
|PAL |-||
| ROM24 PAL PAL|
| ROM23 HD6445 |
| ROM22 |
| TC51832(x4) |
| PAL |-||
| PAL | ||
| | ||
| | ||
| | ||
| | ||
| | ||
| |-||
|PAL |
|-------------------------|
***************************************************************************/ ***************************************************************************/
#include "driver.h" #include "driver.h"
@ -79,19 +148,22 @@ UINT16 *roundup5_d0000_ram, *roundup5_e0000_ram;
UINT8 *tatsumi_rom_sprite_lookup1, *tatsumi_rom_sprite_lookup2; UINT8 *tatsumi_rom_sprite_lookup1, *tatsumi_rom_sprite_lookup2;
UINT8 *tatsumi_rom_clut0, *tatsumi_rom_clut1; UINT8 *tatsumi_rom_clut0, *tatsumi_rom_clut1;
UINT16 *roundup5_unknown0, *roundup5_unknown1, *roundup5_unknown2; UINT16 *roundup5_unknown0, *roundup5_unknown1, *roundup5_unknown2;
UINT16 bigfight_a20000[8], bigfight_a40000[2], bigfight_a60000[2];
extern UINT16 bigfight_bank;
static UINT8 *apache3_bg_ram; static UINT8 *apache3_bg_ram;
/***************************************************************************/ /***************************************************************************/
//static READ16_HANDLER(cyclwarr_cpu_b_r) { return cyclwarr_cpub_ram[offset+0x800]; }
//static WRITE16_HANDLER(cyclwarr_cpu_b_w){ COMBINE_DATA(&cyclwarr_cpub_ram[offset+0x800]); }
static READ16_HANDLER(cyclwarr_cpu_bb_r){ return cyclwarr_cpub_ram[offset]; } static READ16_HANDLER(cyclwarr_cpu_bb_r){ return cyclwarr_cpub_ram[offset]; }
static WRITE16_HANDLER(cyclwarr_cpu_bb_w) { COMBINE_DATA(&cyclwarr_cpub_ram[offset]); } static WRITE16_HANDLER(cyclwarr_cpu_bb_w) { COMBINE_DATA(&cyclwarr_cpub_ram[offset]); }
static READ16_HANDLER(cyclwarr_palette_r) { return paletteram16[offset]; } static READ16_HANDLER(cyclwarr_palette_r) { return paletteram16[offset]; }
static READ16_HANDLER(cyclwarr_sprite_r) { return spriteram16[offset]; } static READ16_HANDLER(cyclwarr_sprite_r) { return spriteram16[offset]; }
static WRITE16_HANDLER(cyclwarr_sprite_w) { COMBINE_DATA(&spriteram16[offset]); } static WRITE16_HANDLER(cyclwarr_sprite_w) { COMBINE_DATA(&spriteram16[offset]); }
static READ16_HANDLER(cyclwarr_input_r) { return readinputport(offset); } static READ16_HANDLER(cyclwarr_input_r) { return readinputport(offset); }
static READ16_HANDLER(cyclwarr_input2_r) { return readinputport(offset+3); } static READ16_HANDLER(cyclwarr_input2_r) { return readinputport(offset+4); }
static WRITE16_HANDLER(bigfight_a20000_w) { COMBINE_DATA(&bigfight_a20000[offset]); }
static WRITE16_HANDLER(bigfight_a40000_w) { COMBINE_DATA(&bigfight_a40000[offset]); }
static WRITE16_HANDLER(bigfight_a60000_w) { COMBINE_DATA(&bigfight_a60000[offset]); }
/***************************************************************************/ /***************************************************************************/
@ -182,16 +254,18 @@ ADDRESS_MAP_END
/******************************************************************************/ /******************************************************************************/
static ADDRESS_MAP_START( cyclwarr_68000a_map, ADDRESS_SPACE_PROGRAM, 16 ) static ADDRESS_MAP_START( cyclwarr_68000a_map, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x000000, 0x00dfff) AM_RAM AM_BASE(&cyclwarr_cpua_ram) AM_RANGE(0x000000, 0x00ffff) AM_RAM AM_BASE(&cyclwarr_cpua_ram)
AM_RANGE(0x00e000, 0x00ffff) AM_RAM AM_BASE(&videoram16)
AM_RANGE(0x03e000, 0x03efff) AM_RAM AM_RANGE(0x03e000, 0x03efff) AM_RAM
AM_RANGE(0x040000, 0x043fff) AM_READWRITE(cyclwarr_cpu_bb_r, cyclwarr_cpu_bb_w) AM_RANGE(0x040000, 0x043fff) AM_READWRITE(cyclwarr_cpu_bb_r, cyclwarr_cpu_bb_w)
AM_RANGE(0x080000, 0x08ffff) AM_READWRITE(cyclwarr_videoram2_r, cyclwarr_videoram2_w) AM_BASE(&cyclwarr_videoram2) AM_RANGE(0x080000, 0x08ffff) AM_READWRITE(cyclwarr_videoram1_r, cyclwarr_videoram1_w) AM_BASE(&cyclwarr_videoram1)
AM_RANGE(0x090000, 0x09ffff) AM_READWRITE(cyclwarr_videoram_r, cyclwarr_videoram_w) AM_BASE(&cyclwarr_videoram) AM_RANGE(0x090000, 0x09ffff) AM_READWRITE(cyclwarr_videoram0_r, cyclwarr_videoram0_w) AM_BASE(&cyclwarr_videoram0)
AM_RANGE(0x0b9002, 0x0b9009) AM_READ(cyclwarr_input_r) //b9008 - dips
// ba000 + ba002 - dips AM_RANGE(0x0a2000, 0x0a2007) AM_WRITE(bigfight_a20000_w)
AM_RANGE(0x0ba000, 0x0ba003) AM_READ(cyclwarr_input2_r) //temp AM_RANGE(0x0a4000, 0x0a4001) AM_WRITE(bigfight_a40000_w)
AM_RANGE(0x0ba004, 0x0ba007) AM_READ(cyclwarr_input2_r) AM_RANGE(0x0a6000, 0x0a6001) AM_WRITE(bigfight_a60000_w)
AM_RANGE(0x0b9002, 0x0b9009) AM_READ(cyclwarr_input_r) /* Coins, P1 input, P2 input, dip 3 */
AM_RANGE(0x0ba000, 0x0ba007) AM_READ(cyclwarr_input2_r) /* Dip 1, Dip 2, P3 input, P4 input */
AM_RANGE(0x0ba008, 0x0ba009) AM_READWRITE(cyclwarr_control_r, cyclwarr_control_w) AM_RANGE(0x0ba008, 0x0ba009) AM_READWRITE(cyclwarr_control_r, cyclwarr_control_w)
AM_RANGE(0x0c0000, 0x0c3fff) AM_READWRITE(cyclwarr_sprite_r, cyclwarr_sprite_w) AM_BASE(&spriteram16) AM_RANGE(0x0c0000, 0x0c3fff) AM_READWRITE(cyclwarr_sprite_r, cyclwarr_sprite_w) AM_BASE(&spriteram16)
AM_RANGE(0x0ca000, 0x0ca1ff) AM_WRITE(tatsumi_sprite_control_w) AM_BASE(&tatsumi_sprite_control_ram) AM_RANGE(0x0ca000, 0x0ca1ff) AM_WRITE(tatsumi_sprite_control_w) AM_BASE(&tatsumi_sprite_control_ram)
@ -201,10 +275,19 @@ static ADDRESS_MAP_START( cyclwarr_68000a_map, ADDRESS_SPACE_PROGRAM, 16 )
ADDRESS_MAP_END ADDRESS_MAP_END
static ADDRESS_MAP_START( cyclwarr_68000b_map, ADDRESS_SPACE_PROGRAM, 16 ) static ADDRESS_MAP_START( cyclwarr_68000b_map, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x000000, 0x00dfff) AM_RAM AM_BASE(&cyclwarr_cpub_ram) AM_RANGE(0x000000, 0x00ffff) AM_RAM AM_BASE(&cyclwarr_cpub_ram)
AM_RANGE(0x00e000, 0x00ffff) AM_RAM
AM_RANGE(0x080000, 0x08ffff) AM_READWRITE(cyclwarr_videoram2_r, cyclwarr_videoram2_w) AM_RANGE(0x080000, 0x08ffff) AM_READWRITE(cyclwarr_videoram1_r, cyclwarr_videoram1_w)
AM_RANGE(0x090000, 0x09ffff) AM_READWRITE(cyclwarr_videoram_r, cyclwarr_videoram_w) AM_RANGE(0x090000, 0x09ffff) AM_READWRITE(cyclwarr_videoram0_r, cyclwarr_videoram0_w)
AM_RANGE(0x0a2000, 0x0a2007) AM_WRITE(bigfight_a20000_w)
AM_RANGE(0x0a4000, 0x0a4001) AM_WRITE(bigfight_a40000_w)
AM_RANGE(0x0a6000, 0x0a6001) AM_WRITE(bigfight_a60000_w)
AM_RANGE(0x0b9002, 0x0b9009) AM_READ(cyclwarr_input_r) /* Coins, P1 input, P2 input, dip 3 */
AM_RANGE(0x0ba000, 0x0ba007) AM_READ(cyclwarr_input2_r) /* Dip 1, Dip 2, P3 input, P4 input */
AM_RANGE(0x0ba008, 0x0ba009) AM_READ(cyclwarr_control_r)
AM_RANGE(0x0c0000, 0x0c3fff) AM_READWRITE(cyclwarr_sprite_r, cyclwarr_sprite_w) AM_RANGE(0x0c0000, 0x0c3fff) AM_READWRITE(cyclwarr_sprite_r, cyclwarr_sprite_w)
AM_RANGE(0x0ca000, 0x0ca1ff) AM_WRITE(tatsumi_sprite_control_w) AM_RANGE(0x0ca000, 0x0ca1ff) AM_WRITE(tatsumi_sprite_control_w)
AM_RANGE(0x0d0000, 0x0d3fff) AM_READWRITE(cyclwarr_palette_r, paletteram16_xRRRRRGGGGGBBBBB_word_w) AM_RANGE(0x0d0000, 0x0d3fff) AM_READWRITE(cyclwarr_palette_r, paletteram16_xRRRRRGGGGGBBBBB_word_w)
@ -228,6 +311,50 @@ ADDRESS_MAP_END
/******************************************************************************/ /******************************************************************************/
static ADDRESS_MAP_START( bigfight_68000a_map, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x000000, 0x00ffff) AM_RAM AM_BASE(&cyclwarr_cpua_ram)
AM_RANGE(0x03e000, 0x03efff) AM_RAM
AM_RANGE(0x040000, 0x04ffff) AM_READWRITE(cyclwarr_cpu_bb_r, cyclwarr_cpu_bb_w)
AM_RANGE(0x080000, 0x08ffff) AM_READWRITE(cyclwarr_videoram1_r, cyclwarr_videoram1_w) AM_BASE(&cyclwarr_videoram1)
AM_RANGE(0x090000, 0x09ffff) AM_READWRITE(cyclwarr_videoram0_r, cyclwarr_videoram0_w) AM_BASE(&cyclwarr_videoram0)
AM_RANGE(0x0a2000, 0x0a2007) AM_WRITE(bigfight_a20000_w)
AM_RANGE(0x0a4000, 0x0a4001) AM_WRITE(bigfight_a40000_w)
AM_RANGE(0x0a6000, 0x0a6001) AM_WRITE(bigfight_a60000_w)
AM_RANGE(0x0b9002, 0x0b9009) AM_READ(cyclwarr_input_r) /* Coins, P1 input, P2 input, dip 3 */
AM_RANGE(0x0ba000, 0x0ba007) AM_READ(cyclwarr_input2_r) /* Dip 1, Dip 2, P3 input, P4 input */
AM_RANGE(0x0ba008, 0x0ba009) AM_READWRITE(cyclwarr_control_r, cyclwarr_control_w)
AM_RANGE(0x0c0000, 0x0c3fff) AM_READWRITE(cyclwarr_sprite_r, cyclwarr_sprite_w) AM_BASE(&spriteram16)
AM_RANGE(0x0ca000, 0x0ca1ff) AM_WRITE(tatsumi_sprite_control_w) AM_BASE(&tatsumi_sprite_control_ram)
AM_RANGE(0x0d0000, 0x0d3fff) AM_READWRITE(cyclwarr_palette_r, paletteram16_xRRRRRGGGGGBBBBB_word_w) AM_BASE(&paletteram16)
AM_RANGE(0x100000, 0x17ffff) AM_ROMBANK(2) /* CPU A ROM */
AM_RANGE(0x200000, 0x27ffff) AM_ROMBANK(1) /* CPU B ROM */
ADDRESS_MAP_END
static ADDRESS_MAP_START( bigfight_68000b_map, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x000000, 0x00ffff) AM_RAM AM_BASE(&cyclwarr_cpub_ram)
AM_RANGE(0x080000, 0x08ffff) AM_READWRITE(cyclwarr_videoram1_r, cyclwarr_videoram1_w)
AM_RANGE(0x090000, 0x09ffff) AM_READWRITE(cyclwarr_videoram0_r, cyclwarr_videoram0_w)
AM_RANGE(0x0a2000, 0x0a2007) AM_WRITE(bigfight_a20000_w)
AM_RANGE(0x0a4000, 0x0a4001) AM_WRITE(bigfight_a40000_w)
AM_RANGE(0x0a6000, 0x0a6001) AM_WRITE(bigfight_a60000_w)
AM_RANGE(0x0b9002, 0x0b9009) AM_READ(cyclwarr_input_r) /* Coins, P1 input, P2 input, dip 3 */
AM_RANGE(0x0ba000, 0x0ba007) AM_READ(cyclwarr_input2_r) /* Dip 1, Dip 2, P3 input, P4 input */
AM_RANGE(0x0ba008, 0x0ba009) AM_READ(cyclwarr_control_r)
AM_RANGE(0x0c0000, 0x0c3fff) AM_READWRITE(cyclwarr_sprite_r, cyclwarr_sprite_w)
AM_RANGE(0x0ca000, 0x0ca1ff) AM_WRITE(tatsumi_sprite_control_w)
AM_RANGE(0x0d0000, 0x0d3fff) AM_READWRITE(cyclwarr_palette_r, paletteram16_xRRRRRGGGGGBBBBB_word_w)
AM_RANGE(0x100000, 0x17ffff) AM_ROMBANK(2) /* CPU A ROM */
AM_RANGE(0x200000, 0x27ffff) AM_ROMBANK(1) /* CPU B ROM */
ADDRESS_MAP_END
/******************************************************************************/
static INPUT_PORTS_START( apache3 ) static INPUT_PORTS_START( apache3 )
PORT_START PORT_START
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME( DEF_STR( Service_Mode )) PORT_CODE(KEYCODE_F2) PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME( DEF_STR( Service_Mode )) PORT_CODE(KEYCODE_F2)
@ -400,6 +527,72 @@ static INPUT_PORTS_START( cyclwarr )
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2) PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2)
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2) PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2)
PORT_START
PORT_DIPNAME( 0x0001, 0x0001, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW3:1")
PORT_DIPSETTING( 0x0001, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW3:2")
PORT_DIPSETTING( 0x0002, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW3:3")
PORT_DIPSETTING( 0x0004, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Test ) ) PORT_DIPLOCATION("SW3:4")
PORT_DIPSETTING( 0x0008, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_START
PORT_DIPNAME( 0x0001, 0x0001, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:1")
PORT_DIPSETTING( 0x0001, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:2")
PORT_DIPSETTING( 0x0002, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:3")
PORT_DIPSETTING( 0x0004, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:4")
PORT_DIPSETTING( 0x0008, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:5")
PORT_DIPSETTING( 0x0010, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:6")
PORT_DIPSETTING( 0x0020, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:7")
PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:8")
PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_START
PORT_DIPNAME( 0x0001, 0x0001, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:1")
PORT_DIPSETTING( 0x0001, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:2")
PORT_DIPSETTING( 0x0002, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:3")
PORT_DIPSETTING( 0x0004, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:4")
PORT_DIPSETTING( 0x0008, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:5")
PORT_DIPSETTING( 0x0010, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:6")
PORT_DIPSETTING( 0x0020, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:7")
PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:8")
PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_START PORT_START
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_START3 ) PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_START3 )
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(3) PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(3)
@ -419,15 +612,124 @@ static INPUT_PORTS_START( cyclwarr )
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(4) PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(4)
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(4) PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(4)
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(4) PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(4)
INPUT_PORTS_END
static INPUT_PORTS_START( bigfight )
PORT_START
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN3 )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_COIN4 )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE1 )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE2 )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE3 )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_SERVICE4 )
PORT_START PORT_START
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_START1 )
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1)
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1)
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1)
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1)
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1)
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1)
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1)
PORT_START PORT_START
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_START2 )
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2)
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2)
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2)
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2)
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2)
PORT_START PORT_START
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_DIPNAME( 0x0001, 0x0001, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW3:1")
PORT_DIPSETTING( 0x0001, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW3:2")
PORT_DIPSETTING( 0x0002, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW3:3")
PORT_DIPSETTING( 0x0004, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Test ) ) PORT_DIPLOCATION("SW3:4")
PORT_DIPSETTING( 0x0008, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_START
PORT_DIPNAME( 0x0001, 0x0001, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:1")
PORT_DIPSETTING( 0x0001, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:2")
PORT_DIPSETTING( 0x0002, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:3")
PORT_DIPSETTING( 0x0004, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:4")
PORT_DIPSETTING( 0x0008, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:5")
PORT_DIPSETTING( 0x0010, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:6")
PORT_DIPSETTING( 0x0020, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:7")
PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:8")
PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_START
PORT_DIPNAME( 0x0001, 0x0001, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:1")
PORT_DIPSETTING( 0x0001, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:2")
PORT_DIPSETTING( 0x0002, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:3")
PORT_DIPSETTING( 0x0004, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:4")
PORT_DIPSETTING( 0x0008, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:5")
PORT_DIPSETTING( 0x0010, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:6")
PORT_DIPSETTING( 0x0020, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:7")
PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:8")
PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_START
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_START3 )
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(3)
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(3)
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(3)
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(3)
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(3)
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(3)
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(3)
PORT_START
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_START4 )
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(4)
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(4)
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(4)
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(4)
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(4)
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(4)
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(4)
INPUT_PORTS_END INPUT_PORTS_END
/******************************************************************************/ /******************************************************************************/
@ -444,16 +746,6 @@ static const gfx_layout roundup5_charlayout =
}; };
static const gfx_layout cyclwarr_charlayout = static const gfx_layout cyclwarr_charlayout =
{
8,8,
RGN_FRAC(1,3),
3,
{ RGN_FRAC(0,3), RGN_FRAC(1,3), RGN_FRAC(2,3)},
{ 0, 1, 2, 3, 4, 5, 6, 7},
{ 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8},
8*8
};
static const gfx_layout cyclwarr_charlayout2 =
{ {
8,8, 8,8,
RGN_FRAC(1,3), RGN_FRAC(1,3),
@ -463,6 +755,7 @@ static const gfx_layout cyclwarr_charlayout2 =
{ 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8}, { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8},
8*8 8*8
}; };
static const gfx_layout roundup5_vramlayout = static const gfx_layout roundup5_vramlayout =
{ {
8,8, 8,8,
@ -487,7 +780,6 @@ GFXDECODE_END
static GFXDECODE_START( cyclwarr ) static GFXDECODE_START( cyclwarr )
GFXDECODE_ENTRY( REGION_GFX1, 0, roundup5_charlayout, 8192, 512) GFXDECODE_ENTRY( REGION_GFX1, 0, roundup5_charlayout, 8192, 512)
GFXDECODE_ENTRY( REGION_GFX5, 0, cyclwarr_charlayout, 0, 512) GFXDECODE_ENTRY( REGION_GFX5, 0, cyclwarr_charlayout, 0, 512)
GFXDECODE_ENTRY( REGION_GFX5, 0, cyclwarr_charlayout2, 0, 512)
GFXDECODE_END GFXDECODE_END
/******************************************************************************/ /******************************************************************************/
@ -597,15 +889,15 @@ MACHINE_DRIVER_END
static MACHINE_DRIVER_START( cyclwarr ) static MACHINE_DRIVER_START( cyclwarr )
/* basic machine hardware */ /* basic machine hardware */
MDRV_CPU_ADD(M68000,20000000 / 2) /* NEC V30 CPU, 20MHz / 2 */ MDRV_CPU_ADD(M68000, 50000000 / 4) /* Confirmed */
MDRV_CPU_PROGRAM_MAP(cyclwarr_68000a_map,0) MDRV_CPU_PROGRAM_MAP(cyclwarr_68000a_map,0)
MDRV_CPU_VBLANK_INT(irq5_line_hold,1) MDRV_CPU_VBLANK_INT(irq5_line_hold,1)
MDRV_CPU_ADD(M68000,20000000 / 2) /* 68000 CPU, 20MHz / 2 */ MDRV_CPU_ADD(M68000, 50000000 / 4) /* Confirmed */
MDRV_CPU_PROGRAM_MAP(cyclwarr_68000b_map,0) MDRV_CPU_PROGRAM_MAP(cyclwarr_68000b_map,0)
MDRV_CPU_VBLANK_INT(irq5_line_hold,1) MDRV_CPU_VBLANK_INT(irq5_line_hold,1)
MDRV_CPU_ADD(Z80, 4000000) //??? MDRV_CPU_ADD(Z80, 16000000 / 4) /* Confirmed */
MDRV_CPU_PROGRAM_MAP(cyclwarr_z80_map,0) MDRV_CPU_PROGRAM_MAP(cyclwarr_z80_map,0)
MDRV_SCREEN_REFRESH_RATE(60) MDRV_SCREEN_REFRESH_RATE(60)
@ -616,9 +908,9 @@ static MACHINE_DRIVER_START( cyclwarr )
MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER ) MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER )
MDRV_SCREEN_FORMAT(BITMAP_FORMAT_RGB32) MDRV_SCREEN_FORMAT(BITMAP_FORMAT_RGB32)
MDRV_SCREEN_SIZE(40*8, 32*8) MDRV_SCREEN_SIZE(40*8, 32*8)
MDRV_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 2*8, 30*8-1) MDRV_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 0*8, 30*8-1)
MDRV_GFXDECODE(cyclwarr) MDRV_GFXDECODE(cyclwarr)
MDRV_PALETTE_LENGTH(8192 + 8192) //todo MDRV_PALETTE_LENGTH(8192 + 8192)
MDRV_VIDEO_START(cyclwarr) MDRV_VIDEO_START(cyclwarr)
MDRV_VIDEO_UPDATE(cyclwarr) MDRV_VIDEO_UPDATE(cyclwarr)
@ -637,6 +929,49 @@ static MACHINE_DRIVER_START( cyclwarr )
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "right", 0.75) MDRV_SOUND_ROUTE(ALL_OUTPUTS, "right", 0.75)
MACHINE_DRIVER_END MACHINE_DRIVER_END
static MACHINE_DRIVER_START( bigfight )
/* basic machine hardware */
MDRV_CPU_ADD(M68000, 50000000 / 4) /* Confirmed */
MDRV_CPU_PROGRAM_MAP(bigfight_68000a_map,0)
MDRV_CPU_VBLANK_INT(irq5_line_hold,1)
MDRV_CPU_ADD(M68000, 50000000 / 4) /* Confirmed */
MDRV_CPU_PROGRAM_MAP(bigfight_68000b_map,0)
MDRV_CPU_VBLANK_INT(irq5_line_hold,1)
MDRV_CPU_ADD(Z80, 16000000 / 4) /* Confirmed */
MDRV_CPU_PROGRAM_MAP(cyclwarr_z80_map,0)
MDRV_SCREEN_REFRESH_RATE(60)
MDRV_SCREEN_VBLANK_TIME(DEFAULT_REAL_60HZ_VBLANK_DURATION)
MDRV_INTERLEAVE(200)
/* video hardware */
MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER )
MDRV_SCREEN_FORMAT(BITMAP_FORMAT_RGB32)
MDRV_SCREEN_SIZE(40*8, 32*8)
MDRV_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 0*8, 30*8-1)
MDRV_GFXDECODE(cyclwarr)
MDRV_PALETTE_LENGTH(8192 + 8192)
MDRV_VIDEO_START(bigfight)
MDRV_VIDEO_UPDATE(bigfight)
/* sound hardware */
MDRV_SPEAKER_STANDARD_STEREO("left", "right")
MDRV_SOUND_ADD(YM2151, 16000000/4)
MDRV_SOUND_CONFIG(ym2151_interface)
MDRV_SOUND_ROUTE(0, "left", 0.45)
MDRV_SOUND_ROUTE(1, "right", 0.45)
MDRV_SOUND_ADD(OKIM6295, 20000000/8)
MDRV_SOUND_CONFIG(okim6295_interface_region_1_pin7high)
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "left", 0.75)
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "right", 0.75)
MACHINE_DRIVER_END
/***************************************************************************/ /***************************************************************************/
ROM_START( apache3 ) ROM_START( apache3 )
@ -733,17 +1068,17 @@ ROM_START( roundup5 )
ROM_END ROM_END
ROM_START( cyclwarr ) ROM_START( cyclwarr )
ROM_REGION( 0x180000, REGION_CPU1, 0 ) /* 68000 main cpu */ ROM_REGION( 0x80000, REGION_CPU1, 0 ) /* 68000 main cpu */
ROM_LOAD16_BYTE( "cw16b", 0x100000, 0x20000, CRC(cb1a737a) SHA1(a603ee1256be5641d00a72f64efaaacb65ed9d7d) ) ROM_LOAD16_BYTE( "cw16b", 0x000000, 0x20000, CRC(cb1a737a) SHA1(a603ee1256be5641d00a72f64efaaacb65ed9d7d) )
ROM_LOAD16_BYTE( "cw18b", 0x100001, 0x20000, CRC(0633ddcb) SHA1(1196ab17065352ec5b37f2f6b383a43a2d0fa3a6) ) ROM_LOAD16_BYTE( "cw18b", 0x000001, 0x20000, CRC(0633ddcb) SHA1(1196ab17065352ec5b37f2f6b383a43a2d0fa3a6) )
ROM_LOAD16_BYTE( "cw17a", 0x140000, 0x20000, CRC(2ad6f836) SHA1(5fa4275b433013943ba1d1b64a3c725097f946f9) ) ROM_LOAD16_BYTE( "cw17a", 0x040000, 0x20000, CRC(2ad6f836) SHA1(5fa4275b433013943ba1d1b64a3c725097f946f9) )
ROM_LOAD16_BYTE( "cw19a", 0x140001, 0x20000, CRC(d3853658) SHA1(c9338083a04f55bd22285176831f4b0bdb78564f) ) ROM_LOAD16_BYTE( "cw19a", 0x040001, 0x20000, CRC(d3853658) SHA1(c9338083a04f55bd22285176831f4b0bdb78564f) )
ROM_REGION( 0x180000, REGION_CPU2, 0 ) /* 68000 sub cpu */ ROM_REGION( 0x80000, REGION_CPU2, 0 ) /* 68000 sub cpu */
ROM_LOAD16_BYTE( "cw20a", 0x100000, 0x20000, CRC(c3578ac1) SHA1(21d369da874f01922d0f0b757a42b4321df891d4) ) ROM_LOAD16_BYTE( "cw20a", 0x000000, 0x20000, CRC(c3578ac1) SHA1(21d369da874f01922d0f0b757a42b4321df891d4) )
ROM_LOAD16_BYTE( "cw22a", 0x100001, 0x20000, CRC(5339ed24) SHA1(5b0a54c2442dcf7373ff8b55b91af9772473ff77) ) ROM_LOAD16_BYTE( "cw22a", 0x000001, 0x20000, CRC(5339ed24) SHA1(5b0a54c2442dcf7373ff8b55b91af9772473ff77) )
ROM_LOAD16_BYTE( "cw21", 0x140000, 0x20000, CRC(ed90d956) SHA1(f533f93da31ac6eb631fb506357717e7cac8e186) ) ROM_LOAD16_BYTE( "cw21", 0x040000, 0x20000, CRC(ed90d956) SHA1(f533f93da31ac6eb631fb506357717e7cac8e186) )
ROM_LOAD16_BYTE( "cw23", 0x140001, 0x20000, CRC(009cdc78) SHA1(a77933a7736546397e8c69226703d6f9be7b55e5) ) ROM_LOAD16_BYTE( "cw23", 0x040001, 0x20000, CRC(009cdc78) SHA1(a77933a7736546397e8c69226703d6f9be7b55e5) )
ROM_REGION( 0x10000, REGION_CPU3, 0 ) /* 64k code for sound Z80 */ ROM_REGION( 0x10000, REGION_CPU3, 0 ) /* 64k code for sound Z80 */
ROM_LOAD( "cw26a", 0x000000, 0x10000, CRC(f7a70e3a) SHA1(5581633bf1f15d7f5c1e03de897d65d60f9f1e33) ) ROM_LOAD( "cw26a", 0x000000, 0x10000, CRC(f7a70e3a) SHA1(5581633bf1f15d7f5c1e03de897d65d60f9f1e33) )
@ -775,15 +1110,54 @@ ROM_START( cyclwarr )
ROM_LOAD( "cw27", 0x000000, 0x20000, CRC(2db48a9e) SHA1(16c307340d17cd3b5455ebcee681fbe0335dec58) ) ROM_LOAD( "cw27", 0x000000, 0x20000, CRC(2db48a9e) SHA1(16c307340d17cd3b5455ebcee681fbe0335dec58) )
ROM_REGION( 0x60000, REGION_GFX5, ROMREGION_DISPOSE ) ROM_REGION( 0x60000, REGION_GFX5, ROMREGION_DISPOSE )
ROM_LOAD( "cw28", 0x000000, 0x20000, CRC(3fc568ed) SHA1(91125c9deddc659449ca6791a847fe908c2818b2) ) ROM_LOAD( "cw30", 0x000000, 0x20000, CRC(331d0711) SHA1(82251fe1f1d36f079080943ab1fd04a60077c353) )
ROM_LOAD( "cw29", 0x020000, 0x20000, CRC(64dd519c) SHA1(e23611fc2be896861997063546c3eb03527eaf8e) ) ROM_LOAD( "cw29", 0x020000, 0x20000, CRC(64dd519c) SHA1(e23611fc2be896861997063546c3eb03527eaf8e) )
ROM_LOAD( "cw30", 0x040000, 0x20000, CRC(331d0711) SHA1(82251fe1f1d36f079080943ab1fd04a60077c353) ) ROM_LOAD( "cw28", 0x040000, 0x20000, CRC(3fc568ed) SHA1(91125c9deddc659449ca6791a847fe908c2818b2) )
ROM_REGION( 0x40000, REGION_SOUND1, 0 ) /* ADPCM samples */ ROM_REGION( 0x40000, REGION_SOUND1, 0 ) /* ADPCM samples */
ROM_LOAD( "cw24a", 0x000000, 0x20000, CRC(22600cba) SHA1(a1514fbe037942f1493a17eb0b7986949470cb22) ) ROM_LOAD( "cw24a", 0x000000, 0x20000, CRC(22600cba) SHA1(a1514fbe037942f1493a17eb0b7986949470cb22) )
ROM_LOAD( "cw25a", 0x020000, 0x20000, CRC(372c6bc8) SHA1(d4875bf3bffecf338bebba3b8d6a791585556a06) ) ROM_LOAD( "cw25a", 0x020000, 0x20000, CRC(372c6bc8) SHA1(d4875bf3bffecf338bebba3b8d6a791585556a06) )
ROM_END ROM_END
ROM_START( bigfight )
ROM_REGION( 0x80000, REGION_CPU1, 0 ) /* 68000 main cpu */
ROM_LOAD16_BYTE( "rom16.ic77", 0x000000, 0x40000, CRC(e7304ec8) SHA1(31a37e96bf963b349d36534bc5ebbf45e19ad00e) )
ROM_LOAD16_BYTE( "rom17.ic98", 0x000001, 0x40000, CRC(4cf090f6) SHA1(9ae0274c890e829a90108ce316aff9665128c982) )
ROM_REGION( 0x80000, REGION_CPU2, 0 ) /* 68000 sub cpu */
ROM_LOAD16_BYTE( "rom18.ic100", 0x000000, 0x40000, CRC(49df6207) SHA1(c4126f4542add11a3a3d236311c8787c24c98440) )
ROM_LOAD16_BYTE( "rom19.ic102", 0x000001, 0x40000, CRC(c12aa9e9) SHA1(19cc7feaa97c6f5148ae8c0077174f96be684f05) )
ROM_REGION( 0x10000, REGION_CPU3, 0 ) /* 64k code for sound Z80 */
ROM_LOAD( "rom20.ic91", 0x000000, 0x10000, CRC(b3add091) SHA1(8a67bfff75c13fe4d9b89d30449199200d11cea7) )
ROM_REGION( 0x400000, REGION_GFX1, ROMREGION_DISPOSE )
/* Filled in by both regions below */
ROM_REGION( 0x200000, REGION_GFX2, 0 )
ROM_LOAD32_BYTE( "rom0.ic26", 0x000000, 0x80000, CRC(a4a3c8d6) SHA1(b5365d9bc6068260c23ba9d5971c7c7d7cc07a97) )
ROM_LOAD32_BYTE( "rom8.ic45", 0x000001, 0x80000, CRC(220956ed) SHA1(68e0ba1e850101b4cc2778819dfa76f04d88d2d6) )
ROM_LOAD32_BYTE( "rom2.ic28", 0x000002, 0x80000, CRC(c4f6d243) SHA1(e23b241b5a40b332165a34e2f1bc4366973b2070) )
ROM_LOAD32_BYTE( "rom10.ic47", 0x000003, 0x80000, CRC(0212d472) SHA1(5549461195fd7b6b43c0174462d7fe1a1bac24e9) )
ROM_REGION( 0x200000, REGION_GFX3, 0 )
ROM_LOAD32_BYTE( "rom4.ic30", 0x000000, 0x80000, CRC(999ff7e9) SHA1(a53b06ad084722d7a52fcf01c52967f68620e609) )
ROM_LOAD32_BYTE( "rom12.ic49", 0x000001, 0x80000, CRC(cb4c1f0b) SHA1(32d64b78ed3d5971eb5d25be2c38e6f2c9048f74) )
ROM_LOAD32_BYTE( "rom6.ic32", 0x000002, 0x80000, CRC(f70e2d47) SHA1(00517b5f3b2deb6f3f3bd12df421e63884c22b2e) )
ROM_LOAD32_BYTE( "rom14.ic51", 0x000003, 0x80000, CRC(77430bc9) SHA1(0b1fd54ace84a9fb5b44d5600de8089a20bcbd47) )
ROM_REGION( 0x20000, REGION_GFX4, 0 )
ROM_LOAD( "rom21.ic128", 0x000000, 0x20000, CRC(da027dcf) SHA1(47d18a8a273fea72cb3ad3d58166fe38ca28a860) )
ROM_REGION( 0x60000, REGION_GFX5, ROMREGION_DISPOSE )
ROM_LOAD( "rom24.ic73", 0x000000, 0x20000, CRC(c564185d) SHA1(e9b5fc10a5a5014735852c22db2a054d5787d8cb) )
ROM_LOAD( "rom23.ic72", 0x020000, 0x20000, CRC(f8bb340b) SHA1(905a1ec778d6ed5c6f53d9d08cd105eed7e307ca) )
ROM_LOAD( "rom22.ic71", 0x040000, 0x20000, CRC(fb505074) SHA1(b6d9b20be7c3e971e5a4392736f087e807b9c850) )
ROM_REGION( 0x40000, REGION_SOUND1, 0 ) /* ADPCM samples */
ROM_LOAD( "rom15.ic39", 0x000000, 0x40000, CRC(58d136e8) SHA1(4aa063c4b9b057cba4655ecbe44a87c8c411e3aa) )
ROM_END
/***************************************************************************/ /***************************************************************************/
static DRIVER_INIT( apache3 ) static DRIVER_INIT( apache3 )
@ -844,7 +1218,7 @@ static DRIVER_INIT( cyclwarr )
UINT8 *src1 = memory_region(REGION_GFX2); UINT8 *src1 = memory_region(REGION_GFX2);
UINT8 *src2 = memory_region(REGION_GFX3); UINT8 *src2 = memory_region(REGION_GFX3);
int i; int i;
for (i=0; i<0x100000; i+=32) { for (i=0; i<memory_region_length(REGION_GFX2); i+=32) {
memcpy(dst,src1,32); memcpy(dst,src1,32);
src1+=32; src1+=32;
dst+=32; dst+=32;
@ -854,18 +1228,18 @@ static DRIVER_INIT( cyclwarr )
} }
dst = memory_region(REGION_CPU1); dst = memory_region(REGION_CPU1);
memcpy(cyclwarr_cpua_ram,dst+0x100000,8); memcpy(cyclwarr_cpua_ram,dst,8);
memory_set_bankptr(1, memory_region(REGION_CPU1) + 0x100000); memory_set_bankptr(1, memory_region(REGION_CPU1));
dst = memory_region(REGION_CPU2); dst = memory_region(REGION_CPU2);
memcpy(cyclwarr_cpub_ram,dst+0x100000,8); memcpy(cyclwarr_cpub_ram,dst,8);
memory_set_bankptr(2, memory_region(REGION_CPU2) + 0x100000); memory_set_bankptr(2, memory_region(REGION_CPU2));
// Copy sprite & palette data out of GFX rom area // Copy sprite & palette data out of GFX rom area
tatsumi_rom_sprite_lookup1 = memory_region(REGION_GFX2); tatsumi_rom_sprite_lookup1 = memory_region(REGION_GFX2);
tatsumi_rom_sprite_lookup2 = memory_region(REGION_GFX3); tatsumi_rom_sprite_lookup2 = memory_region(REGION_GFX3);
tatsumi_rom_clut0 = memory_region(REGION_GFX2)+ 0x100000 - 0x1000; tatsumi_rom_clut0 = memory_region(REGION_GFX2)+ memory_region_length(REGION_GFX2) - 0x1000;
tatsumi_rom_clut1 = memory_region(REGION_GFX3)+ 0x100000 - 0x1000; tatsumi_rom_clut1 = memory_region(REGION_GFX3)+ memory_region_length(REGION_GFX3) - 0x1000;
tatsumi_reset(); tatsumi_reset();
} }
@ -878,5 +1252,5 @@ static DRIVER_INIT( cyclwarr )
/* 1987 Gray Out */ /* 1987 Gray Out */
GAME( 1988, apache3, 0, apache3, apache3, apache3, ROT0, "Tatsumi", "Apache 3", GAME_IMPERFECT_GRAPHICS ) GAME( 1988, apache3, 0, apache3, apache3, apache3, ROT0, "Tatsumi", "Apache 3", GAME_IMPERFECT_GRAPHICS )
GAME( 1989, roundup5, 0, roundup5, roundup5, roundup5, ROT0, "Tatsumi", "Round Up 5 - Super Delta Force", GAME_IMPERFECT_GRAPHICS ) GAME( 1989, roundup5, 0, roundup5, roundup5, roundup5, ROT0, "Tatsumi", "Round Up 5 - Super Delta Force", GAME_IMPERFECT_GRAPHICS )
GAME( 1991, cyclwarr, 0, cyclwarr, cyclwarr, cyclwarr, ROT0, "Tatsumi", "Cycle Warriors", GAME_IMPERFECT_GRAPHICS ) GAME( 1991, cyclwarr, 0, cyclwarr, cyclwarr, cyclwarr, ROT0, "Tatsumi", "Cycle Warriors", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
/* 1992 Big Fight */ GAME( 1992, bigfight, 0, bigfight, bigfight, cyclwarr, ROT0, "Tatsumi", "Big Fight - Big Trouble In The Atlantic Ocean", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND)

View File

@ -46,22 +46,25 @@ WRITE16_HANDLER( roundup5_palette_w );
WRITE16_HANDLER( tatsumi_sprite_control_w ); WRITE16_HANDLER( tatsumi_sprite_control_w );
WRITE16_HANDLER( roundup5_text_w ); WRITE16_HANDLER( roundup5_text_w );
WRITE16_HANDLER( roundup5_crt_w ); WRITE16_HANDLER( roundup5_crt_w );
READ16_HANDLER( cyclwarr_videoram_r ); READ16_HANDLER( cyclwarr_videoram0_r );
WRITE16_HANDLER( cyclwarr_videoram_w ); WRITE16_HANDLER( cyclwarr_videoram0_w );
READ16_HANDLER( cyclwarr_videoram2_r ); READ16_HANDLER( cyclwarr_videoram1_r );
WRITE16_HANDLER( cyclwarr_videoram2_w ); WRITE16_HANDLER( cyclwarr_videoram1_w );
READ16_HANDLER(roundup5_vram_r); READ16_HANDLER(roundup5_vram_r);
WRITE16_HANDLER(roundup5_vram_w); WRITE16_HANDLER(roundup5_vram_w);
WRITE16_HANDLER(apache3_palette_w); WRITE16_HANDLER(apache3_palette_w);
extern UINT16* tatsumi_sprite_control_ram; extern UINT16* tatsumi_sprite_control_ram;
extern UINT16 *cyclwarr_videoram, *cyclwarr_videoram2; extern UINT16 *cyclwarr_videoram0, *cyclwarr_videoram1;
extern UINT16 *roundup_r_ram, *roundup_p_ram, *roundup_l_ram; extern UINT16 *roundup_r_ram, *roundup_p_ram, *roundup_l_ram;
VIDEO_START( apache3 ); VIDEO_START( apache3 );
VIDEO_START( roundup5 ); VIDEO_START( roundup5 );
VIDEO_START( cyclwarr ); VIDEO_START( cyclwarr );
VIDEO_START( bigfight );
VIDEO_UPDATE( roundup5 ); VIDEO_UPDATE( roundup5 );
VIDEO_UPDATE( apache3 ); VIDEO_UPDATE( apache3 );
VIDEO_UPDATE( cyclwarr ); VIDEO_UPDATE( cyclwarr );
VIDEO_UPDATE( bigfight );

View File

@ -352,7 +352,8 @@ READ8_HANDLER(tatsumi_hack_ym2151_r)
int r=YM2151_status_port_0_r(0); int r=YM2151_status_port_0_r(0);
if (activecpu_get_pc()==0x2aca || activecpu_get_pc()==0x29fe if (activecpu_get_pc()==0x2aca || activecpu_get_pc()==0x29fe
|| activecpu_get_pc()==0xf9721) || activecpu_get_pc()==0xf9721
|| activecpu_get_pc()==0x1b96 || activecpu_get_pc()==0x1c65) // BigFight
return 0x80; return 0x80;
return r; return r;
} }
@ -367,7 +368,8 @@ READ8_HANDLER(tatsumi_hack_oki_r)
|| activecpu_get_pc()==0x2acc || activecpu_get_pc()==0x2acc
|| activecpu_get_pc()==0xf9881) || activecpu_get_pc()==0xf9881)
return 0xf; return 0xf;
if (activecpu_get_pc()==0x2ba3 || activecpu_get_pc()==0x2a9b || activecpu_get_pc()==0x2adc) if (activecpu_get_pc()==0x2ba3 || activecpu_get_pc()==0x2a9b || activecpu_get_pc()==0x2adc
|| activecpu_get_pc()==0x1cac) // BigFight
return 0; return 0;
return r; return r;
} }

View File

@ -7315,10 +7315,16 @@ Other Sun games
DRIVER( hiryuken ) /* (c) 1985 Taito */ DRIVER( hiryuken ) /* (c) 1985 Taito */
/* Tatsumi Games */ /* Tatsumi Games */
DRIVER( lockon ) /* (c) 1986 */ DRIVER( tx1 ) /* (c) 1983 Tatsumi */
DRIVER( apache3 ) /* (c) 1988 */ DRIVER( tx1a ) /* (c) 1983 Tatsumi */
DRIVER( roundup5 ) /* (c) 1989 */ DRIVER( buggyboy ) /* (c) 1985 Tatsumi */
DRIVER( cyclwarr ) /* (c) 1991 */ DRIVER( buggybjr ) /* (c) 1986 Tatsumi */
DRIVER( lockon ) /* (c) 1986 Tatsumi */
/* Gray Out */ /* (c) 1987 Tatsumi */
DRIVER( apache3 ) /* (c) 1988 Tatsumi */
DRIVER( roundup5 ) /* (c) 1989 Tatsumi */
DRIVER( cyclwarr ) /* (c) 1991 Tatsumi */
DRIVER( bigfight ) /* (c) 1992 Tatsumi */
/* Electronic Devices */ /* Electronic Devices */
DRIVER( mugsmash ) /* (c) Electronic Devices (Italy) / 3D Games (England) */ DRIVER( mugsmash ) /* (c) Electronic Devices (Italy) / 3D Games (England) */
@ -7503,10 +7509,6 @@ Other Sun games
DRIVER( mosaic ) /* (c) 1990 Space */ DRIVER( mosaic ) /* (c) 1990 Space */
DRIVER( mosaica ) /* (c) 1990 Space + Fuuki license */ DRIVER( mosaica ) /* (c) 1990 Space + Fuuki license */
DRIVER( gfire2 ) /* (c) 1992 Topis Corp */ DRIVER( gfire2 ) /* (c) 1992 Topis Corp */
DRIVER( tx1 ) /* (c) 1983 Tatsumi */
DRIVER( tx1a ) /* (c) 1983 Tatsumi */
DRIVER( buggyboy ) /* (c) 1985 Tatsumi */
DRIVER( buggybjr ) /* (c) 1986 Tatsumi */
DRIVER( sprcros2 ) /* (c) 1986 GM Shoji */ DRIVER( sprcros2 ) /* (c) 1986 GM Shoji */
DRIVER( sprcrs2a ) /* (c) 1986 GM Shoji */ DRIVER( sprcrs2a ) /* (c) 1986 GM Shoji */
DRIVER( gcpinbal ) /* (c) 1994 Excellent System */ DRIVER( gcpinbal ) /* (c) 1994 Excellent System */

View File

@ -2,14 +2,25 @@
#include "tatsumi.h" #include "tatsumi.h"
#include <math.h> #include <math.h>
static tilemap *bg_layer,*tx_layer; static tilemap *tx_layer;
static tilemap *layer0, *layer1, *layer2, *layer3;
static mame_bitmap *temp_bitmap; static mame_bitmap *temp_bitmap;
UINT16 *roundup_r_ram, *roundup_p_ram, *roundup_l_ram; UINT16 *roundup_r_ram, *roundup_p_ram, *roundup_l_ram;
UINT16 *cyclwarr_videoram, *cyclwarr_videoram2; UINT16 *cyclwarr_videoram0, *cyclwarr_videoram1;
UINT16* tatsumi_sprite_control_ram; UINT16* tatsumi_sprite_control_ram;
static UINT16* roundup5_vram; static UINT16* roundup5_vram;
extern UINT16 bigfight_a20000[8], bigfight_a40000[2], bigfight_a60000[8];
static UINT16 bigfight_bank, bigfight_last_bank;
static UINT8 roundupt_crt_selected_reg;
static UINT8 roundupt_crt_reg[64];
extern UINT16 debugA,debugB,debugC,debugD;
static UINT8* shadow_pen_array;
/******************************************************************************/ /******************************************************************************/
WRITE16_HANDLER(tatsumi_sprite_control_w) WRITE16_HANDLER(tatsumi_sprite_control_w)
@ -113,39 +124,35 @@ WRITE16_HANDLER( roundup5_text_w )
tilemap_mark_tile_dirty( tx_layer,offset); tilemap_mark_tile_dirty( tx_layer,offset);
} }
READ16_HANDLER( cyclwarr_videoram_r ) READ16_HANDLER( cyclwarr_videoram0_r )
{ {
return cyclwarr_videoram[offset]; return cyclwarr_videoram0[offset];
} }
READ16_HANDLER( cyclwarr_videoram2_r ) READ16_HANDLER( cyclwarr_videoram1_r )
{ {
return cyclwarr_videoram2[offset]; return cyclwarr_videoram1[offset];
} }
WRITE16_HANDLER( cyclwarr_videoram_w ) WRITE16_HANDLER( cyclwarr_videoram0_w )
{ {
COMBINE_DATA(&cyclwarr_videoram[offset]); COMBINE_DATA(&cyclwarr_videoram0[offset]);
if (offset>=0x400 && offset<0x1400) if (offset>=0x400)
tilemap_mark_tile_dirty( tx_layer,offset - 0x400); {
if (offset>=0x1400 && offset<0x3400) tilemap_mark_tile_dirty( layer0, offset-0x400);
tilemap_mark_tile_dirty( bg_layer,offset - 0x1400); tilemap_mark_tile_dirty( layer1, offset-0x400);
}
} }
WRITE16_HANDLER( cyclwarr_videoram2_w ) WRITE16_HANDLER( cyclwarr_videoram1_w )
{ {
COMBINE_DATA(&cyclwarr_videoram2[offset]); COMBINE_DATA(&cyclwarr_videoram1[offset]);
if (offset>=0x400 && offset<0x1400) if (offset>=0x400)
tilemap_mark_tile_dirty( tx_layer,offset - 0x400); {
if (offset>=0x1400 && offset<0x3400) tilemap_mark_tile_dirty( layer2, offset-0x400);
tilemap_mark_tile_dirty( bg_layer,offset - 0x1400); tilemap_mark_tile_dirty( layer3, offset-0x400);
}
} }
static UINT8 roundupt_crt_selected_reg;
static UINT8 roundupt_crt_reg[64];
extern UINT16 debugA,debugB,debugC,debugD;
static UINT8* shadow_pen_array;
WRITE16_HANDLER( roundup5_crt_w ) WRITE16_HANDLER( roundup5_crt_w )
{ {
@ -170,32 +177,18 @@ static TILE_GET_INFO( get_text_tile_info )
0); 0);
} }
static TILE_GET_INFO( get_bg_tile_info_cyclwarr ) static TILE_GET_INFO( get_tile_info_bigfight_0 )
{ {
int tile=cyclwarr_videoram2[tile_index+0x1400]; int tile=cyclwarr_videoram0[(tile_index+0x400)%0x8000];
int color=tile >> 14; int bank = (bigfight_a40000[0] >> (((tile&0xc00)>>10)*4))&0xf;
SET_TILE_INFO(1,(tile&0x3ff)+(bank<<10),(tile>>12)&0xf,0);
tile=(tile&0x3fff) | 0x000;
SET_TILE_INFO(
1,
tile,
color,
0);
} }
static TILE_GET_INFO( get_text_tile_info_cyclwarr ) static TILE_GET_INFO( get_tile_info_bigfight_1 )
{ {
int tile=cyclwarr_videoram[tile_index+0x400]; int tile=cyclwarr_videoram1[(tile_index+0x400)%0x8000];
int color=tile >> 12; int bank = (bigfight_a40000[0] >> (((tile&0xc00)>>10)*4))&0xf;
SET_TILE_INFO(1,(tile&0x3ff)+(bank<<10),(tile>>12)&0xf,0);
tile=tile&0xfff;
SET_TILE_INFO(
1,
tile,
color,
0);
} }
/********************************************************************/ /********************************************************************/
@ -222,13 +215,25 @@ VIDEO_START( roundup5 )
VIDEO_START( cyclwarr ) VIDEO_START( cyclwarr )
{ {
bg_layer = tilemap_create(get_bg_tile_info_cyclwarr,tilemap_scan_rows,TILEMAP_TYPE_PEN,8,8,256,256); layer0 = tilemap_create(get_tile_info_bigfight_0,tilemap_scan_rows,TILEMAP_TYPE_PEN,8,8,64,512);
tx_layer = tilemap_create(get_text_tile_info_cyclwarr,tilemap_scan_rows,TILEMAP_TYPE_PEN,8,8,64,64); //layer1 = tilemap_create(get_tile_info_bigfight_0,tilemap_scan_rows,TILEMAP_TYPE_PEN,8,8,64,512);
shadow_pen_array = auto_malloc(8192); layer1 = tilemap_create(get_tile_info_bigfight_0,tilemap_scan_rows,TILEMAP_TYPE_PEN,8,8,128,256);
layer2 = tilemap_create(get_tile_info_bigfight_1,tilemap_scan_rows,TILEMAP_TYPE_PEN,8,8,64,512);
layer3 = tilemap_create(get_tile_info_bigfight_1,tilemap_scan_rows,TILEMAP_TYPE_PEN,8,8,64,512);
shadow_pen_array = auto_malloc(8192);
memset(shadow_pen_array, 0, 8192);
}
VIDEO_START( bigfight )
{
layer0 = tilemap_create(get_tile_info_bigfight_0,tilemap_scan_rows,TILEMAP_TYPE_PEN,8,8,128,256);
layer1 = tilemap_create(get_tile_info_bigfight_0,tilemap_scan_rows,TILEMAP_TYPE_PEN,8,8,128,256);
layer2 = tilemap_create(get_tile_info_bigfight_1,tilemap_scan_rows,TILEMAP_TYPE_PEN,8,8,128,256);
layer3 = tilemap_create(get_tile_info_bigfight_1,tilemap_scan_rows,TILEMAP_TYPE_PEN,8,8,128,256);
shadow_pen_array = auto_malloc(8192);
memset(shadow_pen_array, 0, 8192); memset(shadow_pen_array, 0, 8192);
tilemap_set_transparent_pen(bg_layer,0);
tilemap_set_transparent_pen(tx_layer,0);
} }
/********************************************************************/ /********************************************************************/
@ -537,7 +542,8 @@ static void draw_sprites(running_machine *machine, mame_bitmap *bitmap, const re
0x0007 - ? 0x0007 - ?
Word 2: 0xffff - X position Word 2: 0xffff - X position
Word 3: 0xffff - Y position Word 3: 0xffff - Y position
Word 4: 0x01ff - Rotation Word 4: 0x01ff - Scale
Word 5: 0x01ff - Rotation
Sprite ROM table format, alternate lines come from each bank, with the Sprite ROM table format, alternate lines come from each bank, with the
very first line indicating control information: very first line indicating control information:
@ -556,7 +562,7 @@ static void draw_sprites(running_machine *machine, mame_bitmap *bitmap, const re
*/ */
y = spriteram16[offs+3]; y = spriteram16[offs+3];
x = spriteram16[offs+2]; x = spriteram16[offs+2];
scale = spriteram16[offs+4]&0xff; scale = spriteram16[offs+4]&0x1ff;
color = (spriteram16[offs+1]>>3)&0x1ff; color = (spriteram16[offs+1]>>3)&0x1ff;
fx = spriteram16[offs+1]&0x8000; fx = spriteram16[offs+1]&0x8000;
rotate = 0;//spriteram16[offs+5]&0x1ff; // Todo: Turned off for now rotate = 0;//spriteram16[offs+5]&0x1ff; // Todo: Turned off for now
@ -570,7 +576,7 @@ static void draw_sprites(running_machine *machine, mame_bitmap *bitmap, const re
if (index==0xffff || spriteram16[offs+4]==0xffff) //todo if (index==0xffff || spriteram16[offs+4]==0xffff) //todo
return; return;
if (index>=0x1000) if (index>=0x4000)
continue; continue;
src1 = tatsumi_rom_sprite_lookup1 + (index*4); src1 = tatsumi_rom_sprite_lookup1 + (index*4);
@ -618,7 +624,7 @@ extent_x=extent_y=0;
if (!rotate) if (!rotate)
{ {
if (fx) if (fx)
x_pos=render_x-x_offs; x_pos=render_x-x_offs-scale*8;
else else
x_pos=render_x+x_offs; x_pos=render_x+x_offs;
} }
@ -955,6 +961,43 @@ static void update_cluts(running_machine *machine, int fake_palette_offset, int
/**********************************************************************/ /**********************************************************************/
static void draw_bg(running_machine *machine, mame_bitmap *dst, tilemap *src, const UINT16* scrollx, const UINT16* scrolly, const UINT16* tilemap_ram, int tile_bank, int xscroll_offset, int yscroll_offset, int xsize, int ysize)
{
/*
Each tile (0x4000 of them) has a lookup table in ROM to build an individual 3-bit palette
from sets of 8 bit palettes!
*/
const UINT8* tile_cluts = memory_region(REGION_GFX4);
const mame_bitmap *src_bitmap = tilemap_get_pixmap(src);
int src_y_mask=ysize-1;
int src_x_mask=xsize-1;
int tile_y_mask=(ysize/8)-1;
int tile_x_mask=(xsize/8)-1;
int tiles_per_x_line=(xsize/8);
int x, y, p, pp, ppp;
for (y=0; y<240; y++)
{
for (x=0; x<320; x++)
{
int src_x = x + scrollx[y] + xscroll_offset;
int src_y = y + scrolly[y] + yscroll_offset;
int tile_index = (((src_x>>3)&tile_x_mask) + (((src_y>>3)&tile_y_mask) * tiles_per_x_line));
int bank = (tile_bank >> (((tilemap_ram[(tile_index+0x400)&0x7fff]&0xc00)>>10)*4))&0xf;
int tile = (tilemap_ram[(tile_index+0x400)&0x7fff]&0x3ff) | (bank<<10);
p=*BITMAP_ADDR16(src_bitmap, src_y&src_y_mask, src_x&src_x_mask);
pp=tile_cluts[tile*8 + (p&0x7)];
ppp=pp + ((p&0x78)<<5);
if ((p&0x7)!=0 || ((p&0x7)==0 && (pp&0x7)!=0)) // Not quite correct - some opaque pixels show as transparent
*BITMAP_ADDR32(dst, y, x) = machine->pens[ppp];
}
}
}
/**********************************************************************/
VIDEO_UPDATE( apache3 ) VIDEO_UPDATE( apache3 )
{ {
update_cluts(machine, 1024, 0, 2048); update_cluts(machine, 1024, 0, 2048);
@ -988,10 +1031,47 @@ VIDEO_UPDATE( roundup5 )
VIDEO_UPDATE( cyclwarr ) VIDEO_UPDATE( cyclwarr )
{ {
bigfight_bank=bigfight_a40000[0];
if (bigfight_bank!=bigfight_last_bank)
{
tilemap_mark_all_tiles_dirty(layer0);
tilemap_mark_all_tiles_dirty(layer1);
tilemap_mark_all_tiles_dirty(layer2);
tilemap_mark_all_tiles_dirty(layer3);
bigfight_last_bank=bigfight_bank;
}
fillbitmap(bitmap,machine->pens[0],cliprect); fillbitmap(bitmap,machine->pens[0],cliprect);
// tilemap_draw(bitmap,cliprect,bg_layer,0,0);
draw_bg(machine, bitmap, layer3, &cyclwarr_videoram1[0x000], &cyclwarr_videoram1[0x100], cyclwarr_videoram1, bigfight_a40000[0], 8, -0x80, 512, 4096);
draw_bg(machine, bitmap, layer2, &cyclwarr_videoram1[0x200], &cyclwarr_videoram1[0x300], cyclwarr_videoram1, bigfight_a40000[0], 8, -0x80, 512, 4096);
draw_bg(machine, bitmap, layer1, &cyclwarr_videoram0[0x000], &cyclwarr_videoram0[0x100], cyclwarr_videoram0, bigfight_a40000[0], 8, -0x40, 1024, 2048);
update_cluts(machine, 8192, 4096, 8192); update_cluts(machine, 8192, 4096, 8192);
draw_sprites(machine, bitmap,cliprect,0,(tatsumi_sprite_control_ram[0xe0]&0x1000) ? 0x1000 : 0); draw_sprites(machine, bitmap,cliprect,0,(tatsumi_sprite_control_ram[0xe0]&0x1000) ? 0x1000 : 0);
tilemap_draw(bitmap,cliprect,tx_layer,0,0); draw_bg(machine, bitmap, layer0, &cyclwarr_videoram0[0x200], &cyclwarr_videoram0[0x300], cyclwarr_videoram0, bigfight_a40000[0], 0x10, -0x80, 512, 4096);
return 0;
}
VIDEO_UPDATE( bigfight )
{
bigfight_bank=bigfight_a40000[0];
if (bigfight_bank!=bigfight_last_bank)
{
tilemap_mark_all_tiles_dirty(layer0);
tilemap_mark_all_tiles_dirty(layer1);
tilemap_mark_all_tiles_dirty(layer2);
tilemap_mark_all_tiles_dirty(layer3);
bigfight_last_bank=bigfight_bank;
}
fillbitmap(bitmap,machine->pens[0],cliprect);
draw_bg(machine, bitmap, layer3, &cyclwarr_videoram1[0x000], &cyclwarr_videoram1[0x100], cyclwarr_videoram1, bigfight_a40000[0], 8, -0x40, 1024, 2048);
draw_bg(machine, bitmap, layer2, &cyclwarr_videoram1[0x200], &cyclwarr_videoram1[0x300], cyclwarr_videoram1, bigfight_a40000[0], 8, -0x40, 1024, 2048);
draw_bg(machine, bitmap, layer1, &cyclwarr_videoram0[0x000], &cyclwarr_videoram0[0x100], cyclwarr_videoram0, bigfight_a40000[0], 8, -0x40, 1024, 2048);
update_cluts(machine, 8192, 4096, 8192);
draw_sprites(machine, bitmap,cliprect,0,(tatsumi_sprite_control_ram[0xe0]&0x1000) ? 0x1000 : 0);
draw_bg(machine, bitmap, layer0, &cyclwarr_videoram0[0x200], &cyclwarr_videoram0[0x300], cyclwarr_videoram0, bigfight_a40000[0], 0x10, -0x40, 1024, 2048);
return 0; return 0;
} }