📄 tigeroad.c
字号:
/***************************************************************************
remaining issues:
busy loop should be patched out
Please contact Phil Stroffolino (phil@maya.com) if there are any questions
regarding this driver.
Tiger Road is (C) 1987 Romstar/Capcom USA
Memory Overview:
0xfe0800 sprites
0xfec000 text
0xfe4000 input ports,dip switches (read); sound out, video reg (write)
0xfe8000 scroll registers
0xff8200 palette
0xffC000 working RAM
0xffEC70 high scores (not saved)
***************************************************************************/
#include "driver.h"
#include "vidhrdw/generic.h"
#include "Z80/Z80.h"
extern int tigeroad_base_bank;
extern unsigned char *tigeroad_scrollram;
void tigeroad_scrollram_w(int offset,int data);
void tigeroad_vh_screenrefresh(struct osd_bitmap *bitmap,int full_refresh);
static unsigned char *ram; /* for hi score save */
static void tigeroad_control_w( int offset, int data )
{
switch( offset )
{
case 0:
tigeroad_base_bank = (data>>8)&0xF;
break;
case 2:
soundlatch_w(offset,(data >> 8) & 0xff);
break;
}
}
static int tigeroad_input_r (int offset);
static int tigeroad_input_r (int offset){
switch (offset){
case 0: return (input_port_1_r( offset )<<8) |
input_port_0_r( offset );
case 2: return (input_port_3_r( offset )<<8) |
input_port_2_r( offset );
case 4: return (input_port_5_r( offset )<<8) |
input_port_4_r( offset );
}
return 0x00;
}
int tigeroad_interrupt(void){
return 2;
}
/***************************************************************************/
static struct MemoryReadAddress readmem[] =
{
{ 0x000000, 0x03ffff, MRA_ROM },
{ 0xfe0800, 0xfe0cff, MRA_BANK1 },
{ 0xfe0d00, 0xfe1807, MRA_BANK2 },
{ 0xfe4000, 0xfe4007, tigeroad_input_r },
{ 0xfec000, 0xfec7ff, MRA_BANK3 },
{ 0xff8200, 0xff867f, paletteram_word_r },
{ 0xffc000, 0xffffff, MRA_BANK5 },
{ -1 } /* end of table */
};
static struct MemoryWriteAddress writemem[] =
{
{ 0x000000, 0x03ffff, MWA_ROM },
{ 0xfe0800, 0xfe0cff, MWA_BANK1, &spriteram, &spriteram_size },
{ 0xfe0d00, 0xfe1807, MWA_BANK2 }, /* still part of OBJ RAM */
{ 0xfe4000, 0xfe4003, tigeroad_control_w },
{ 0xfec000, 0xfec7ff, MWA_BANK3, &videoram, &videoram_size },
{ 0xfe8000, 0xfe8003, MWA_BANK4, &tigeroad_scrollram },
{ 0xfe800c, 0xfe800f, MWA_NOP }, /* fe800e = watchdog or IRQ acknowledge */
{ 0xff8200, 0xff867f, paletteram_xxxxRRRRGGGGBBBB_word_w, &paletteram },
{ 0xffc000, 0xffffff, MWA_BANK5, &ram },
{ -1 } /* end of table */
};
static struct MemoryReadAddress sound_readmem[] =
{
{ 0x0000, 0x7fff, MRA_ROM },
{ 0x8000, 0x8000, YM2203_status_port_0_r },
{ 0xa000, 0xa000, YM2203_status_port_1_r },
{ 0xc000, 0xc7ff, MRA_RAM },
{ 0xe000, 0xe000, soundlatch_r },
{ -1 } /* end of table */
};
static struct MemoryWriteAddress sound_writemem[] =
{
{ 0x0000, 0x7fff, MWA_ROM },
{ 0x8000, 0x8000, YM2203_control_port_0_w },
{ 0x8001, 0x8001, YM2203_write_port_0_w },
{ 0xa000, 0xa000, YM2203_control_port_1_w },
{ 0xa001, 0xa001, YM2203_write_port_1_w },
{ 0xc000, 0xc7ff, MWA_RAM },
{ -1 } /* end of table */
};
static struct IOWritePort sound_writeport[] =
{
{ 0x00, 0x01, IOWP_NOP }, /* ??? */
{ -1 } /* end of table */
};
INPUT_PORTS_START( tigeroad_input_ports )
PORT_START /* IN0 */
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_8WAY )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN | IPF_8WAY )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_UP | IPF_8WAY )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY | IPF_COCKTAIL )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_8WAY | IPF_COCKTAIL )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN | IPF_8WAY | IPF_COCKTAIL )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_UP | IPF_8WAY | IPF_COCKTAIL )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_COCKTAIL )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_COCKTAIL )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START2 )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN3 )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1 )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN2 )
PORT_START /* dipswitch A */
PORT_DIPNAME( 0x07, 0x07, "Coin B", IP_KEY_NONE )
PORT_DIPSETTING( 0x00, "4 Coins/1 Credit" )
PORT_DIPSETTING( 0x01, "3 Coins/1 Credit" )
PORT_DIPSETTING( 0x02, "2 Coins/1 Credit" )
PORT_DIPSETTING( 0x07, "1 Coin/1 Credit" )
PORT_DIPSETTING( 0x06, "1 Coin/2 Credits" )
PORT_DIPSETTING( 0x05, "1 Coin/3 Credits" )
PORT_DIPSETTING( 0x04, "1 Coin/4 Credits" )
PORT_DIPSETTING( 0x03, "1 Coin/6 Credits" )
PORT_DIPNAME( 0x38, 0x38, "Coin A", IP_KEY_NONE )
PORT_DIPSETTING( 0x00, "4 Coins/1 Credit" )
PORT_DIPSETTING( 0x08, "3 Coins/1 Credit" )
PORT_DIPSETTING( 0x10, "2 Coins/1 Credit" )
PORT_DIPSETTING( 0x38, "1 Coin/1 Credit" )
PORT_DIPSETTING( 0x30, "1 Coin/2 Credits" )
PORT_DIPSETTING( 0x28, "1 Coin/3 Credits" )
PORT_DIPSETTING( 0x20, "1 Coin/4 Credits" )
PORT_DIPSETTING( 0x18, "1 Coin/6 Credits" )
PORT_BITX( 0x40, 0x40, IPT_DIPSWITCH_NAME | IPF_TOGGLE, "Service Mode", OSD_KEY_F2, IP_JOY_NONE, 0 )
PORT_DIPSETTING( 0x40, "Off" )
PORT_DIPSETTING( 0x00, "On" )
PORT_DIPNAME( 0x80, 0x80, "Flip Screen", IP_KEY_NONE )
PORT_DIPSETTING( 0x80, "Off")
PORT_DIPSETTING( 0x00, "On" )
PORT_START /* dipswitch B */
PORT_DIPNAME( 0x03, 0x03, "Lives", IP_KEY_NONE )
PORT_DIPSETTING( 0x03, "3" )
PORT_DIPSETTING( 0x02, "4" )
PORT_DIPSETTING( 0x01, "5" )
PORT_DIPSETTING( 0x00, "7" )
PORT_DIPNAME( 0x04, 0x00, "Cabinet", IP_KEY_NONE )
PORT_DIPSETTING( 0x00, "Upright")
PORT_DIPSETTING( 0x04, "Cocktail")
PORT_DIPNAME( 0x18, 0x18, "Bonus Life", IP_KEY_NONE )
PORT_DIPSETTING( 0x18, "20000 70000 70000" )
PORT_DIPSETTING( 0x10, "20000 80000 80000" )
PORT_DIPSETTING( 0x08, "30000 80000 80000" )
PORT_DIPSETTING( 0x00, "30000 90000 90000" )
PORT_DIPNAME( 0x60, 0x60, "Difficulty", IP_KEY_NONE )
PORT_DIPSETTING( 0x20, "Very Easy" )
PORT_DIPSETTING( 0x40, "Easy" )
PORT_DIPSETTING( 0x60, "Normal" )
PORT_DIPSETTING( 0x00, "Difficult" )
PORT_DIPNAME( 0x80, 0x80, "Allow Continue", IP_KEY_NONE )
PORT_DIPSETTING( 0x00, "No" )
PORT_DIPSETTING( 0x80, "Yes" )
INPUT_PORTS_END
INPUT_PORTS_START( f1dream_input_ports )
PORT_START /* IN0 */
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_8WAY )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN | IPF_8WAY )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_UP | IPF_8WAY )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY | IPF_COCKTAIL )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_8WAY | IPF_COCKTAIL )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN | IPF_8WAY | IPF_COCKTAIL )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_UP | IPF_8WAY | IPF_COCKTAIL )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_COCKTAIL )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_COCKTAIL )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START2 )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN3 )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1 )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN2 )
PORT_START /* dipswitch A */
PORT_DIPNAME( 0x07, 0x07, "Coin B", IP_KEY_NONE )
PORT_DIPSETTING( 0x00, "4 Coins/1 Credit" )
PORT_DIPSETTING( 0x01, "3 Coins/1 Credit" )
PORT_DIPSETTING( 0x02, "2 Coins/1 Credit" )
PORT_DIPSETTING( 0x07, "1 Coin/1 Credit" )
PORT_DIPSETTING( 0x06, "1 Coin/2 Credits" )
PORT_DIPSETTING( 0x05, "1 Coin/3 Credits" )
PORT_DIPSETTING( 0x04, "1 Coin/4 Credits" )
PORT_DIPSETTING( 0x03, "1 Coin/6 Credits" )
PORT_DIPNAME( 0x38, 0x38, "Coin A", IP_KEY_NONE )
PORT_DIPSETTING( 0x00, "4 Coins/1 Credit" )
PORT_DIPSETTING( 0x08, "3 Coins/1 Credit" )
PORT_DIPSETTING( 0x10, "2 Coins/1 Credit" )
PORT_DIPSETTING( 0x38, "1 Coin/1 Credit" )
PORT_DIPSETTING( 0x30, "1 Coin/2 Credits" )
PORT_DIPSETTING( 0x28, "1 Coin/3 Credits" )
PORT_DIPSETTING( 0x20, "1 Coin/4 Credits" )
PORT_DIPSETTING( 0x18, "1 Coin/6 Credits" )
PORT_BITX( 0x40, 0x40, IPT_DIPSWITCH_NAME | IPF_TOGGLE, "Service Mode", OSD_KEY_F2, IP_JOY_NONE, 0 )
PORT_DIPSETTING( 0x40, "Off" )
PORT_DIPSETTING( 0x00, "On" )
PORT_DIPNAME( 0x80, 0x80, "Flip Screen", IP_KEY_NONE )
PORT_DIPSETTING( 0x80, "Off")
PORT_DIPSETTING( 0x00, "On" )
PORT_START /* dipswitch B */
PORT_DIPNAME( 0x03, 0x03, "Lives", IP_KEY_NONE )
PORT_DIPSETTING( 0x03, "3" )
PORT_DIPSETTING( 0x02, "4" )
PORT_DIPSETTING( 0x01, "5" )
PORT_DIPSETTING( 0x00, "7" )
PORT_DIPNAME( 0x04, 0x00, "Cabinet", IP_KEY_NONE )
PORT_DIPSETTING( 0x00, "Upright")
PORT_DIPSETTING( 0x04, "Cocktail")
PORT_DIPNAME( 0x18, 0x18, "F1 Up Point", IP_KEY_NONE )
PORT_DIPSETTING( 0x18, "12" )
PORT_DIPSETTING( 0x10, "16" )
PORT_DIPSETTING( 0x08, "18" )
PORT_DIPSETTING( 0x00, "20" )
PORT_DIPNAME( 0x20, 0x20, "Difficulty", IP_KEY_NONE )
PORT_DIPSETTING( 0x20, "Normal" )
PORT_DIPSETTING( 0x00, "Difficult" )
PORT_DIPNAME( 0x40, 0x00, "Version", IP_KEY_NONE )
PORT_DIPSETTING( 0x00, "International" )
PORT_DIPSETTING( 0x40, "Japan" )
PORT_DIPNAME( 0x80, 0x80, "Allow Continue", IP_KEY_NONE )
PORT_DIPSETTING( 0x00, "No" )
PORT_DIPSETTING( 0x80, "Yes" )
INPUT_PORTS_END
static struct GfxLayout text_layout =
{
8,8, /* character size */
2048, /* number of characters */
2, /* bits per pixel */
{ 4, 0 }, /* plane offsets */
{ 0, 1, 2, 3, 8+0, 8+1, 8+2, 8+3 }, /* x offsets */
{ 0*16, 1*16, 2*16, 3*16, 4*16, 5*16, 6*16, 7*16 }, /* y offsets */
16*8
};
static struct GfxLayout tile_layout =
{
32,32, /* tile size */
2048, /* number of tiles */
4, /* bits per pixel */
{ 2048*256*8+4, 2048*256*8+0, 4, 0 },
{ /* x offsets */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -