?? sega.c
字號:
/***************************************************************************
Sega Vector memory map (preliminary)
Most of the info here comes from the wiretap archive at:
http://www.spies.com/arcade/simulation/gameHardware/
* Sega G80 Vector Simulation
ROM Address Map
---------------
Eliminator Elim4Player Space Fury Zektor TAC/SCAN Star Trk
-----+-----------+-----------+-----------+-------+---------+---------+
0000 | 969 | 1390 | 969 | 1611 | 1711 | 1873 | CPU u25
-----+-----------+-----------+-----------+-------+---------+---------+
0800 | 1333 | 1347 | 960 | 1586 | 1670 | 1848 | ROM u1
-----+-----------+-----------+-----------+-------+---------+---------+
1000 | 1334 | 1348 | 961 | 1587 | 1671 | 1849 | ROM u2
-----+-----------+-----------+-----------+-------+---------+---------+
1800 | 1335 | 1349 | 962 | 1588 | 1672 | 1850 | ROM u3
-----+-----------+-----------+-----------+-------+---------+---------+
2000 | 1336 | 1350 | 963 | 1589 | 1673 | 1851 | ROM u4
-----+-----------+-----------+-----------+-------+---------+---------+
2800 | 1337 | 1351 | 964 | 1590 | 1674 | 1852 | ROM u5
-----+-----------+-----------+-----------+-------+---------+---------+
3000 | 1338 | 1352 | 965 | 1591 | 1675 | 1853 | ROM u6
-----+-----------+-----------+-----------+-------+---------+---------+
3800 | 1339 | 1353 | 966 | 1592 | 1676 | 1854 | ROM u7
-----+-----------+-----------+-----------+-------+---------+---------+
4000 | 1340 | 1354 | 967 | 1593 | 1677 | 1855 | ROM u8
-----+-----------+-----------+-----------+-------+---------+---------+
4800 | 1341 | 1355 | 968 | 1594 | 1678 | 1856 | ROM u9
-----+-----------+-----------+-----------+-------+---------+---------+
5000 | 1342 | 1356 | | 1595 | 1679 | 1857 | ROM u10
-----+-----------+-----------+-----------+-------+---------+---------+
5800 | 1343 | 1357 | | 1596 | 1680 | 1858 | ROM u11
-----+-----------+-----------+-----------+-------+---------+---------+
6000 | 1344 | 1358 | | 1597 | 1681 | 1859 | ROM u12
-----+-----------+-----------+-----------+-------+---------+---------+
6800 | 1345 | 1359 | | 1598 | 1682 | 1860 | ROM u13
-----+-----------+-----------+-----------+-------+---------+---------+
7000 | | 1360 | | 1599 | 1683 | 1861 | ROM u14
-----+-----------+-----------+-----------+-------+---------+---------+
7800 | | 1600 | 1684 | 1862 | ROM u15
-----+-----------+-----------+-----------+-------+---------+---------+
8000 | | 1601 | 1685 | 1863 | ROM u16
-----+-----------+-----------+-----------+-------+---------+---------+
8800 | | 1602 | 1686 | 1864 | ROM u17
-----+-----------+-----------+-----------+-------+---------+---------+
9000 | | 1603 | 1687 | 1865 | ROM u18
-----+-----------+-----------+-----------+-------+---------+---------+
9800 | | 1604 | 1688 | 1866 | ROM u19
-----+-----------+-----------+-----------+-------+---------+---------+
A000 | | 1605 | 1709 | 1867 | ROM u20
-----+-----------+-----------+-----------+-------+---------+---------+
A800 | | 1606 | 1710 | 1868 | ROM u21
-----+-----------+-----------+-----------+-------+---------+---------+
B000 | | 1869 | ROM u22
-----+-----------+-----------+-----------+-------+---------+---------+
B800 | | 1870 | ROM u23
-----+-----------+-----------+-----------+-------+---------+---------+
I/O ports:
read:
write:
These games all have dipswitches, but they are mapped in such a way as to make
using them with MAME extremely difficult. I might try to implement them in the
future.
SWITCH MAPPINGS
---------------
+------+------+------+------+------+------+------+------+
|SW1-8 |SW1-7 |SW1-6 |SW1-5 |SW1-4 |SW1-3 |SW1-2 |SW1-1 |
+------+------+------+------+------+------+------+------+
F8:08 |F9:08 |FA:08 |FB:08 |F8:04 |F9:04 FA:04 FB:04 Zektor &
| | | | | | Space Fury
| | | | | |
1 -|------|------|------|------|------|--------------- upright
0 -|------|------|------|------|------|--------------- cocktail
| | | | | |
| 1 -|------|------|------|------|--------------- voice
| 0 -|------|------|------|------|--------------- no voice
| | | | |
| 1 | 1 -|------|------|--------------- 5 ships
| 0 | 1 -|------|------|--------------- 4 ships
| 1 | 0 -|------|------|--------------- 3 ships
| 0 | 0 -|------|------|--------------- 2 ships
| | |
| 1 | 1 -|--------------- hardest
| 0 | 1 -|--------------- hard
1 = Open | 1 | 0 -|--------------- medium
0 = Closed | 0 | 0 -|--------------- easy
+------+------+------+------+------+------+------+------+
|SW2-8 |SW2-7 |SW2-6 |SW2-5 |SW2-4 |SW2-3 |SW2-2 |SW2-1 |
+------+------+------+------+------+------+------+------+
|F8:02 |F9:02 |FA:02 |FB:02 |F8:01 |F9:01 |FA:01 |FB:01 |
| | | | | | | | |
| 1 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 1 coin/ 1 play
+------+------+------+------+------+------+------+------+
Known problems:
1 The games seem to run too fast. This is most noticable
with the speech samples in Zektor - they don't match the mouth.
Slowing down the Z80 doesn't help and in fact hurts performance.
2 Cocktail mode isn't implemented.
Is 1) still valid?
***************************************************************************/
#include "driver.h"
#include "vidhrdw/vector.h"
extern unsigned char *sega_mem;
extern void sega_security(int chip);
extern void sega_wr(int offset, int data);
int sega_read_ports (int offset);
int sega_IN4_r (int offset);
int elim4_IN4_r (int offset);
int sega_interrupt(void);
int sega_mult_r (int offset);
void sega_mult1_w (int offset, int data);
void sega_mult2_w (int offset, int data);
void sega_switch_w (int offset, int data);
/* Sound hardware prototypes */
int sega_sh_start (void);
int sega_sh_r (int offset);
void sega_sh_speech_w (int offset, int data);
void sega_sh_update(void);
void elim1_sh_w (int offset, int data);
void elim2_sh_w (int offset, int data);
void spacfury1_sh_w (int offset, int data);
void spacfury2_sh_w (int offset, int data);
int tacscan_sh_start (void);
void tacscan_sh_w (int offset, int data);
void tacscan_sh_update(void);
void startrek_sh_w (int offset, int data);
/* Video hardware prototypes */
void sega_init_colors (unsigned char *palette, unsigned short *colortable,const unsigned char *color_prom);
int sega_vh_start (void);
void sega_vh_stop (void);
void sega_vh_screenrefresh(struct osd_bitmap *bitmap,int full_refresh);
static struct MemoryReadAddress readmem[] =
{
{ 0x0000, 0xbfff, MRA_ROM },
{ 0xc800, 0xcfff, MRA_RAM },
{ 0xe000, 0xefff, MRA_RAM, &vectorram, &vectorram_size },
{ 0xd000, 0xdfff, MRA_RAM }, /* sound ram */
{ -1 } /* end of table */
};
static struct MemoryWriteAddress writemem[] =
{
{ 0x0000, 0xFFFF, sega_wr, &sega_mem },
{ -1 }
};
static struct IOReadPort spacfury_readport[] =
{
{ 0x3f, 0x3f, sega_sh_r },
{ 0xbe, 0xbe, sega_mult_r },
{ 0xf8, 0xfb, sega_read_ports },
{ -1 } /* end of table */
};
static struct IOWritePort spacfury_writeport[] =
{
{ 0x38, 0x38, sega_sh_speech_w },
{ 0x3e, 0x3e, spacfury1_sh_w },
{ 0x3f, 0x3f, spacfury2_sh_w },
{ 0xbd, 0xbd, sega_mult1_w },
{ 0xbe, 0xbe, sega_mult2_w },
{ 0xf9, 0xf9, coin_counter_w }, /* 0x80 = enable, 0x00 = disable */
{ -1 } /* end of table */
};
static struct IOReadPort zektor_readport[] =
{
{ 0x3f, 0x3f, sega_sh_r },
{ 0xbe, 0xbe, sega_mult_r },
{ 0xf8, 0xfb, sega_read_ports },
{ 0xfc, 0xfc, sega_IN4_r },
{ -1 } /* end of table */
};
static struct IOWritePort zektor_writeport[] =
{
{ 0x38, 0x38, sega_sh_speech_w },
{ 0xbd, 0xbd, sega_mult1_w },
{ 0xbe, 0xbe, sega_mult2_w },
{ 0xf8, 0xf8, sega_switch_w },
{ 0xf9, 0xf9, coin_counter_w }, /* 0x80 = enable, 0x00 = disable */
{ -1 } /* end of table */
};
static struct IOWritePort tacscan_writeport[] =
{
{ 0x3f, 0x3f, tacscan_sh_w },
{ 0xbd, 0xbd, sega_mult1_w },
{ 0xbe, 0xbe, sega_mult2_w },
{ 0xf8, 0xf8, sega_switch_w },
{ 0xf9, 0xf9, coin_counter_w }, /* 0x80 = enable, 0x00 = disable */
{ -1 } /* end of table */
};
static struct IOReadPort elim2_readport[] =
{
{ 0x3f, 0x3f, sega_sh_r },
{ 0xbe, 0xbe, sega_mult_r },
{ 0xf8, 0xfb, sega_read_ports },
{ 0xfc, 0xfc, input_port_4_r },
{ -1 } /* end of table */
};
static struct IOReadPort elim4_readport[] =
{
{ 0x3f, 0x3f, sega_sh_r },
{ 0xbe, 0xbe, sega_mult_r },
{ 0xf8, 0xfb, sega_read_ports },
{ 0xfc, 0xfc, elim4_IN4_r },
{ -1 } /* end of table */
};
static struct IOWritePort elim_writeport[] =
{
{ 0x3e, 0x3e, elim1_sh_w },
{ 0x3f, 0x3f, elim2_sh_w },
{ 0xbd, 0xbd, sega_mult1_w },
{ 0xbe, 0xbe, sega_mult2_w },
{ 0xf8, 0xf8, sega_switch_w },
{ 0xf9, 0xf9, coin_counter_w }, /* 0x80 = enable, 0x00 = disable */
{ -1 } /* end of table */
};
static struct IOWritePort startrek_writeport[] =
{
{ 0x38, 0x38, sega_sh_speech_w },
{ 0x3f, 0x3f, startrek_sh_w },
{ 0xbd, 0xbd, sega_mult1_w },
{ 0xbe, 0xbe, sega_mult2_w },
{ 0xf8, 0xf8, sega_switch_w },
{ 0xf9, 0xf9, coin_counter_w }, /* 0x80 = enable, 0x00 = disable */
{ -1 } /* end of table */
};
INPUT_PORTS_START( spacfury_input_ports )
PORT_START /* IN0 - port 0xf8 */
/* The next bit is referred to as the Service switch in the self test - it just adds a credit */
PORT_BITX( 0x20, IP_ACTIVE_LOW, IPT_COIN3 | IPF_IMPULSE, IP_NAME_DEFAULT, IP_KEY_DEFAULT, IP_JOY_DEFAULT, 3 )
PORT_BITX( 0x40, IP_ACTIVE_LOW, IPT_COIN2 | IPF_IMPULSE, IP_NAME_DEFAULT, IP_KEY_DEFAULT, IP_JOY_DEFAULT, 3 )
PORT_BITX( 0x80, IP_ACTIVE_LOW, IPT_COIN1 | IPF_IMPULSE, IP_NAME_DEFAULT, IP_KEY_DEFAULT, IP_JOY_DEFAULT, 3 )
PORT_START /* IN1 - port 0xf9 */
PORT_BIT ( 0x10, IP_ACTIVE_LOW, IPT_START2 )
PORT_BIT ( 0x20, IP_ACTIVE_LOW, IPT_START1 )
PORT_BIT ( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START /* IN2 - port 0xfa */
PORT_BIT ( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT )
PORT_BIT ( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT )
PORT_BIT ( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START /* IN3 - port 0xfb */
PORT_BIT ( 0x10, IP_ACTIVE_LOW, IPT_BUTTON2 )
PORT_BIT ( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 )
PORT_BIT ( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START /* IN4 - FAKE - lazy way to move the self-test fake input port to 5 */
PORT_BIT ( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START /* IN5 - FAKE */
/* This fake input port is used to get the status of the F2 key, */
/* and activate the test mode, which is triggered by a NMI */
PORT_BITX(0x01, IP_ACTIVE_HIGH, IPT_SERVICE, "Service Mode", OSD_KEY_F2, IP_JOY_NONE, 0 )
PORT_START /* FAKE */
/* This fake input port is used for DIP Switch 1 */
PORT_DIPNAME( 0x03, 0x01, "Bonus Ship", IP_KEY_NONE )
PORT_DIPSETTING( 0x03, "40K Points" )
PORT_DIPSETTING( 0x01, "30K Points" )
PORT_DIPSETTING( 0x02, "20K Points" )
PORT_DIPSETTING( 0x00, "10K Points" )
PORT_DIPNAME( 0x0c, 0x00, "Difficulty", IP_KEY_NONE )
PORT_DIPSETTING( 0x0c, "Very Hard" )
PORT_DIPSETTING( 0x04, "Hard" )
PORT_DIPSETTING( 0x08, "Moderate" )
PORT_DIPSETTING( 0x00, "Easy" )
PORT_DIPNAME( 0x30, 0x30, "Number of Ships", IP_KEY_NONE )
PORT_DIPSETTING( 0x30, "5 Ships" )
PORT_DIPSETTING( 0x10, "4 Ships" )
PORT_DIPSETTING( 0x20, "3 Ships" )
PORT_DIPSETTING( 0x00, "2 Ships" )
PORT_DIPNAME( 0x40, 0x00, "Attract Sound", IP_KEY_NONE )
PORT_DIPSETTING( 0x40, "Off" )
PORT_DIPSETTING( 0x00, "On" )
PORT_DIPNAME( 0x80, 0x80, "Orientation", IP_KEY_NONE )
PORT_DIPSETTING( 0x80, "Upright" )
PORT_DIPSETTING( 0x00, "Cocktail" )
PORT_START /* FAKE */
/* This fake input port is used for DIP Switch 2 */
PORT_DIPNAME( 0x0F, 0x0C, "Coins/Credits (R)", IP_KEY_NONE )
PORT_DIPSETTING( 0x00, "4 / 1" )
PORT_DIPSETTING( 0x08, "3 / 1" )
PORT_DIPSETTING( 0x04, "2 / 1" )
PORT_DIPSETTING( 0x0C, "1 / 1" )
PORT_DIPSETTING( 0x02, "1 / 2" )
PORT_DIPSETTING( 0x0A, "1 / 3" )
PORT_DIPSETTING( 0x06, "1 / 4" )
PORT_DIPSETTING( 0x0E, "1 / 5" )
PORT_DIPSETTING( 0x01, "1 / 6" )
PORT_DIPSETTING( 0x09, "2/4/5 / 1/2/3" )
PORT_DIPSETTING( 0x05, "2/4 / 1/3" )
PORT_DIPSETTING( 0x0D, "1/2/3/4/5 / 1/2/3/4/6" )
PORT_DIPSETTING( 0x03, "1/2/3/4 / 1/2/3/5" )
PORT_DIPSETTING( 0x0B, "1/2 / 1/3" )
PORT_DIPSETTING( 0x07, "1/2/3/4/5 / 2/4/6/8/11" )
PORT_DIPSETTING( 0x0F, "1/2/3/4 / 2/4/6/9" )
PORT_DIPNAME( 0xF0, 0xC0, "Coins/Credits (L)", IP_KEY_NONE )
PORT_DIPSETTING( 0x00, "4 / 1" )
PORT_DIPSETTING( 0x80, "3 / 1" )
PORT_DIPSETTING( 0x40, "2 / 1" )
PORT_DIPSETTING( 0xC0, "1 / 1" )
PORT_DIPSETTING( 0x20, "1 / 2" )
PORT_DIPSETTING( 0xA0, "1 / 3" )
PORT_DIPSETTING( 0x60, "1 / 4" )
PORT_DIPSETTING( 0xE0, "1 / 5" )
PORT_DIPSETTING( 0x10, "1 / 6" )
PORT_DIPSETTING( 0x90, "2/4/5 / 1/2/3" )
PORT_DIPSETTING( 0x50, "2/4 / 1/3" )
PORT_DIPSETTING( 0xD0, "1/2/3/4/5 / 1/2/3/4/6" )
PORT_DIPSETTING( 0x30, "1/2/3/4 / 1/2/3/5" )
PORT_DIPSETTING( 0xB0, "1/2 / 1/3" )
PORT_DIPSETTING( 0x70, "1/2/3/4/5 / 2/4/6/8/11" )
PORT_DIPSETTING( 0xF0, "1/2/3/4 / 2/4/6/9" )
INPUT_PORTS_END
INPUT_PORTS_START( zektor_input_ports )
PORT_START /* IN0 - port 0xf8 */
/* The next bit is referred to as the Service switch in the self test - it just adds a credit */
PORT_BITX( 0x20, IP_ACTIVE_LOW, IPT_COIN3 | IPF_IMPULSE, IP_NAME_DEFAULT, IP_KEY_DEFAULT, IP_JOY_DEFAULT, 3 )
PORT_BITX( 0x40, IP_ACTIVE_LOW, IPT_COIN2 | IPF_IMPULSE, IP_NAME_DEFAULT, IP_KEY_DEFAULT, IP_JOY_DEFAULT, 3 )
PORT_BITX( 0x80, IP_ACTIVE_LOW, IPT_COIN1 | IPF_IMPULSE, IP_NAME_DEFAULT, IP_KEY_DEFAULT, IP_JOY_DEFAULT, 3 )
PORT_START /* IN1 - port 0xf9 */
PORT_BIT ( 0xf0, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START /* IN2 - port 0xfa */
PORT_BIT ( 0xf0, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START /* IN3 - port 0xfb */
PORT_BIT ( 0xf0, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START /* IN4 - port 0xfc - read in machine/sega.c */
PORT_BIT ( 0x01, IP_ACTIVE_HIGH, IPT_START1 )
PORT_BIT ( 0x02, IP_ACTIVE_HIGH, IPT_START2 )
PORT_BIT ( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON1 )
PORT_BIT ( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON2 )
PORT_BIT ( 0xf0, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START /* IN5 - FAKE */
/* This fake input port is used to get the status of the F2 key, */
/* and activate the test mode, which is triggered by a NMI */
PORT_BITX(0x01, IP_ACTIVE_HIGH, IPT_SERVICE, "Service Mode", OSD_KEY_F2, IP_JOY_NONE, 0 )
PORT_START /* FAKE */
/* This fake input port is used for DIP Switch 1 */
PORT_DIPNAME( 0x0c, 0x00, "Difficulty", IP_KEY_NONE )
PORT_DIPSETTING( 0x0c, "Very Hard" )
PORT_DIPSETTING( 0x04, "Hard" )
PORT_DIPSETTING( 0x08, "Moderate" )
PORT_DIPSETTING( 0x00, "Easy" )
PORT_DIPNAME( 0x30, 0x30, "Number of Ships", IP_KEY_NONE )
PORT_DIPSETTING( 0x30, "5 Ships" )
PORT_DIPSETTING( 0x10, "4 Ships" )
PORT_DIPSETTING( 0x20, "3 Ships" )
PORT_DIPSETTING( 0x00, "2 Ships" )
PORT_DIPNAME( 0x40, 0x00, "Attract Sound", IP_KEY_NONE )
PORT_DIPSETTING( 0x40, "Off" )
PORT_DIPSETTING( 0x00, "On" )
PORT_DIPNAME( 0x80, 0x80, "Orientation", IP_KEY_NONE )
PORT_DIPSETTING( 0x80, "Upright" )
PORT_START /* FAKE */
/* This fake input port is used for DIP Switch 2 */
PORT_DIPNAME( 0x0F, 0x0C, "Coins/Credits (R)", IP_KEY_NONE )
PORT_DIPSETTING( 0x00, "4 / 1" )
PORT_DIPSETTING( 0x08, "3 / 1" )
PORT_DIPSETTING( 0x04, "2 / 1" )
PORT_DIPSETTING( 0x0C, "1 / 1" )
PORT_DIPSETTING( 0x02, "1 / 2" )
PORT_DIPSETTING( 0x0A, "1 / 3" )
PORT_DIPSETTING( 0x06, "1 / 4" )
PORT_DIPSETTING( 0x0E, "1 / 5" )
PORT_DIPSETTING( 0x01, "1 / 6" )
PORT_DIPSETTING( 0x09, "2/4/5 / 1/2/3" )
PORT_DIPSETTING( 0x05, "2/4 / 1/3" )
PORT_DIPSETTING( 0x0D, "1/2/3/4/5 / 1/2/3/4/6" )
PORT_DIPSETTING( 0x03, "1/2/3/4 / 1/2/3/5" )
PORT_DIPSETTING( 0x0B, "1/2 / 1/3" )
PORT_DIPSETTING( 0x07, "1/2/3/4/5 / 2/4/6/8/11" )
PORT_DIPSETTING( 0x0F, "1/2/3/4 / 2/4/6/9" )
PORT_DIPNAME( 0xF0, 0xC0, "Coins/Credits (L)", IP_KEY_NONE )
PORT_DIPSETTING( 0x00, "4 / 1" )
PORT_DIPSETTING( 0x80, "3 / 1" )
PORT_DIPSETTING( 0x40, "2 / 1" )
PORT_DIPSETTING( 0xC0, "1 / 1" )
PORT_DIPSETTING( 0x20, "1 / 2" )
PORT_DIPSETTING( 0xA0, "1 / 3" )
PORT_DIPSETTING( 0x60, "1 / 4" )
PORT_DIPSETTING( 0xE0, "1 / 5" )
PORT_DIPSETTING( 0x10, "1 / 6" )
PORT_DIPSETTING( 0x90, "2/4/5 / 1/2/3" )
PORT_DIPSETTING( 0x50, "2/4 / 1/3" )
PORT_DIPSETTING( 0xD0, "1/2/3/4/5 / 1/2/3/4/6" )
PORT_DIPSETTING( 0x30, "1/2/3/4 / 1/2/3/5" )
PORT_DIPSETTING( 0xB0, "1/2 / 1/3" )
PORT_DIPSETTING( 0x70, "1/2/3/4/5 / 2/4/6/8/11" )
PORT_DIPSETTING( 0xF0, "1/2/3/4 / 2/4/6/9" )
PORT_START /* IN8 - FAKE port for the dial */
PORT_ANALOG ( 0xff, 0x00, IPT_DIAL|IPF_CENTER, 10, 0, 0, 0 )
INPUT_PORTS_END
INPUT_PORTS_START( startrek_input_ports )
PORT_START /* IN0 - port 0xf8 */
/* The next bit is referred to as the Service switch in the self test - it just adds a credit */
PORT_BITX( 0x20, IP_ACTIVE_LOW, IPT_COIN3 | IPF_IMPULSE, IP_NAME_DEFAULT, IP_KEY_DEFAULT, IP_JOY_DEFAULT, 3 )
PORT_BITX( 0x40, IP_ACTIVE_LOW, IPT_COIN2 | IPF_IMPULSE, IP_NAME_DEFAULT, IP_KEY_DEFAULT, IP_JOY_DEFAULT, 3 )
PORT_BITX( 0x80, IP_ACTIVE_LOW, IPT_COIN1 | IPF_IMPULSE, IP_NAME_DEFAULT, IP_KEY_DEFAULT, IP_JOY_DEFAULT, 3 )
PORT_START /* IN1 - port 0xf9 */
PORT_BIT ( 0xf0, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START /* IN2 - port 0xfa */
PORT_BIT ( 0xf0, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START /* IN3 - port 0xfb */
PORT_BIT ( 0xf0, IP_ACTIVE_LOW, IPT_UNUSED )
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -