📄 exedexes.c
字号:
/***************************************************************************
Exed Exes memory map (preliminary) - RD 29/07/97
MAIN CPU
0000-bfff ROM
d000-d3ff Character Video RAM
d400-d7ff Character Color RAM
e000-efff RAM
f000-ffff Sprites
Sprite information (4 bytes long) is stored every 32 bytes in the
regions f000-f5ff and f800-fbff, possibly in other areas as well.
Sprite Data layout:
Byte 0 - Sprite number 0-255
Byte 1 - bits 0 to 3 Sprite color 0-15
- bit 4 Sprite x-flip
- bit 5 Sprite y-flip
- bit 6 ?
- bit 7 Sprite Y position MSB
Byte 2 - Sprite X position
Byte 3 - Sprite Y position
The background consists of two vertically scrolling layers, one made
up of 16x16 tiles similarly to 1942, the other made up of smaller
8x8 or perhaps 8x16 tiles. The 16x16 tiled foreground is dislayed on
top of the 8x? tiled background in a similar way to Star Force.
read:
c000 IN0 Coin and start switches
c001 IN1 Joystick 1
c002 IN2 Joystick 2
c003 DSW1 ?
c004 DSW2 ?
write:
c800 Sound command
c804 Coin ack ?
c806 ?
d800-d83f only seems to use:
d800-d801 near background y-scroll
d802-d803 near background x-scroll
d804-d805 8x? tile vertical scroll
d806-d807 ?
SOUND CPU
0000-3fff ROM
4000-47ff RAM
write:
8000 YM2203 #1 control
8001 YM2203 #1 write
8002 YM2203 #2 control ?
8003 YM2203 #2 write ?
***************************************************************************/
#include "driver.h"
#include "vidhrdw/generic.h"
void c1942_bankswitch_w(int offset,int data);
int c1942_bankedrom_r(int offset);
int c1942_interrupt(void);
extern unsigned char *exedexes_bg_scroll;
extern unsigned char *exedexes_nbg_yscroll;
extern unsigned char *exedexes_nbg_xscroll;
void exedexes_vh_convert_color_prom(unsigned char *palette, unsigned short *colortable,const unsigned char *color_prom);
void exedexes_vh_screenrefresh(struct osd_bitmap *bitmap,int full_refresh);
static struct MemoryReadAddress readmem[] =
{
{ 0x0000, 0xbfff, MRA_ROM },
{ 0xc000, 0xc000, input_port_0_r },
{ 0xc001, 0xc001, input_port_1_r },
{ 0xc002, 0xc002, input_port_2_r },
{ 0xc003, 0xc003, input_port_3_r },
{ 0xc004, 0xc004, input_port_4_r },
{ 0xe000, 0xefff, MRA_RAM }, /* Work RAM */
{ 0xf000, 0xffff, MRA_RAM }, /* Sprite RAM */
{ -1 } /* end of table */
};
static struct MemoryWriteAddress writemem[] =
{
{ 0x0000, 0xbfff, MWA_ROM },
{ 0xc800, 0xc800, soundlatch_w },
{ 0xc806, 0xc806, MWA_NOP }, /* Watchdog ?? */
{ 0xd000, 0xd3ff, videoram_w, &videoram, &videoram_size },
{ 0xd400, 0xd7ff, colorram_w, &colorram },
{ 0xd800, 0xd801, MWA_RAM, &exedexes_nbg_yscroll },
{ 0xd802, 0xd803, MWA_RAM, &exedexes_nbg_xscroll },
{ 0xd804, 0xd805, MWA_RAM, &exedexes_bg_scroll },
{ 0xe000, 0xefff, MWA_RAM },
{ 0xf000, 0xffff, MWA_RAM, &spriteram, &spriteram_size },
{ -1 } /* end of table */
};
static struct MemoryReadAddress sound_readmem[] =
{
{ 0x0000, 0x3fff, MRA_ROM },
{ 0x4000, 0x47ff, MRA_RAM },
{ 0x6000, 0x6000, soundlatch_r },
{ -1 } /* end of table */
};
static struct MemoryWriteAddress sound_writemem[] =
{
{ 0x0000, 0x3fff, MWA_ROM },
{ 0x4000, 0x47ff, MWA_RAM },
{ 0x8000, 0x8000, AY8910_control_port_0_w },
{ 0x8001, 0x8001, AY8910_write_port_0_w },
{ 0x8002, 0x8002, SN76496_0_w },
{ 0x8003, 0x8003, SN76496_1_w },
{ -1 } /* end of table */
};
INPUT_PORTS_START( input_ports )
PORT_START /* IN0 */
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START2 )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* probably unused */
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* probably unused */
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* probably unused */
PORT_BITX(0x20, IP_ACTIVE_LOW, IPT_COIN3 | IPF_IMPULSE, "Coin Aux", IP_KEY_DEFAULT, IP_JOY_DEFAULT, 8 )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN2 )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN1 )
PORT_START /* IN1 */
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 ) /* probably unused */
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* probably unused */
PORT_START /* IN2 */
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY | IPF_PLAYER2 )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_8WAY | IPF_PLAYER2 )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN | IPF_8WAY | IPF_PLAYER2 )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_UP | IPF_8WAY | IPF_PLAYER2 )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_PLAYER2 )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_PLAYER2 )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* probably unused */
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* probably unused */
PORT_START /* DSW0 */
PORT_DIPNAME( 0x03, 0x03, "Difficulty", IP_KEY_NONE )
PORT_DIPSETTING( 0x02, "Easy" )
PORT_DIPSETTING( 0x03, "Normal" )
PORT_DIPSETTING( 0x01, "Hard" )
PORT_DIPSETTING( 0x00, "Hardest" )
PORT_DIPNAME( 0x0c, 0x0c, "Lives", IP_KEY_NONE )
PORT_DIPSETTING( 0x08, "1" )
PORT_DIPSETTING( 0x04, "2" )
PORT_DIPSETTING( 0x0c, "3" )
PORT_DIPSETTING( 0x00, "5" )
PORT_DIPNAME( 0x10, 0x10, "2 Players Game", IP_KEY_NONE )
PORT_DIPSETTING( 0x00, "1 Credit" )
PORT_DIPSETTING( 0x10, "2 Credits" )
PORT_DIPNAME( 0x20, 0x00, "Language", IP_KEY_NONE )
PORT_DIPSETTING( 0x00, "English")
PORT_DIPSETTING( 0x20, "Japanese")
PORT_DIPNAME( 0x40, 0x40, "Freeze", IP_KEY_NONE )
PORT_DIPSETTING( 0x40, "Off")
PORT_DIPSETTING( 0x00, "On" )
PORT_BITX( 0x80, 0x80, IPT_DIPSWITCH_NAME | IPF_TOGGLE, "Service Mode", OSD_KEY_F2, IP_JOY_NONE, 0 )
PORT_DIPSETTING( 0x80, "Off" )
PORT_DIPSETTING( 0x00, "On" )
PORT_START /* DSW1 */
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/5 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/5 Credits" )
PORT_DIPNAME( 0x40, 0x40, "Allow Continue", IP_KEY_NONE )
PORT_DIPSETTING( 0x00, "No" )
PORT_DIPSETTING( 0x40, "Yes" )
PORT_DIPNAME( 0x80, 0x80, "Demo Sounds", IP_KEY_NONE )
PORT_DIPSETTING( 0x00, "Off" )
PORT_DIPSETTING( 0x80, "On" )
INPUT_PORTS_END
static struct GfxLayout charlayout =
{
8,8, /* 8*8 characters */
512, /* 512 characters */
2, /* 2 bits per pixel */
{ 4, 0 },
{ 0*16, 1*16, 2*16, 3*16, 4*16, 5*16, 6*16, 7*16 },
{ 8+3, 8+2, 8+1, 8+0, 3, 2, 1, 0 },
16*8 /* every char takes 16 consecutive bytes */
};
static struct GfxLayout spritelayout =
{
16,16, /* 16*16 sprites */
256, /* 256 sprites */
4, /* 4 bits per pixel */
{ 0x4000*8+4, 0x4000*8+0, 4, 0 },
{ 0*16, 1*16, 2*16, 3*16, 4*16, 5*16, 6*16, 7*16,
8*16, 9*16, 10*16, 11*16, 12*16, 13*16, 14*16, 15*16 },
{ 33*8+3, 33*8+2, 33*8+1, 33*8+0, 32*8+3, 32*8+2, 32*8+1, 32*8+0,
8+3, 8+2, 8+1, 8+0, 3, 2, 1, 0 },
64*8 /* every sprite takes 64 consecutive bytes */
};
static struct GfxLayout tilelayout =
{
32,32, /* 32*32 tiles */
64, /* 64 tiles */
2, /* 2 bits per pixel */
{ 4, 0 },
{ 0*16, 1*16, 2*16, 3*16, 4*16, 5*16, 6*16, 7*16,
8*16, 9*16, 10*16, 11*16, 12*16, 13*16, 14*16, 15*16,
16*16, 17*16, 18*16, 19*16, 20*16, 21*16, 22*16, 23*16,
24*16, 25*16, 26*16, 27*16, 28*16, 29*16, 30*16, 31*16 },
{ 192*8+8+3, 192*8+8+2, 192*8+8+1, 192*8+8+0, 192*8+3, 192*8+2, 192*8+1, 192*8+0,
128*8+8+3, 128*8+8+2, 128*8+8+1, 128*8+8+0, 128*8+3, 128*8+2, 128*8+1, 128*8+0,
64*8+8+3, 64*8+8+2, 64*8+8+1, 64*8+8+0, 64*8+3, 64*8+2, 64*8+1, 64*8+0,
8+3, 8+2, 8+1, 8+0, 3, 2, 1, 0 },
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -