summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/vega.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/vega.c')
-rw-r--r--src/mame/drivers/vega.c356
1 files changed, 178 insertions, 178 deletions
diff --git a/src/mame/drivers/vega.c b/src/mame/drivers/vega.c
index bfdf652750d..fc6f8997f5a 100644
--- a/src/mame/drivers/vega.c
+++ b/src/mame/drivers/vega.c
@@ -83,7 +83,7 @@ enum
OBJ_1,
OBJ_2,
OBJ_PLAYER,
-
+
NUM_OBJ
};
@@ -97,41 +97,41 @@ public:
m_i8255(*this, "ppi8255"),
m_ins8154(*this, "ins8154"),
m_ay8910(*this, "ay8910") {}
-
- required_device<cpu_device> m_maincpu;
- required_device<i8255_device> m_i8255;
- required_device<ins8154_device> m_ins8154;
- required_device<ay8910_device> m_ay8910;
-
+
+ required_device<cpu_device> m_maincpu;
+ required_device<i8255_device> m_i8255;
+ required_device<ins8154_device> m_ins8154;
+ required_device<ay8910_device> m_ay8910;
+
int m_p2_data;
- int m_ext_offset_w;
- int m_ext_offset_r;
-
- int m_tmp;
- int m_t1;
-
- UINT8 m_ins8154_ram[0x80];
+ int m_ext_offset_w;
+ int m_ext_offset_r;
+
+ int m_tmp;
+ int m_t1;
+
+ UINT8 m_ins8154_ram[0x80];
UINT8 m_txt_ram[0x400];
-
- vega_obj m_obj[NUM_OBJ];
-
- int m_frame_counter;
-
- int m_tilemap_offset_x, m_tilemap_offset_y, m_tilemap_flags, m_tilemap_top;
-
- DECLARE_READ8_MEMBER( extern_r );
- DECLARE_WRITE8_MEMBER(extern_w);
- DECLARE_WRITE8_MEMBER(p2_w);
+
+ vega_obj m_obj[NUM_OBJ];
+
+ int m_frame_counter;
+
+ int m_tilemap_offset_x, m_tilemap_offset_y, m_tilemap_flags, m_tilemap_top;
+
+ DECLARE_READ8_MEMBER( extern_r );
+ DECLARE_WRITE8_MEMBER(extern_w);
+ DECLARE_WRITE8_MEMBER(p2_w);
DECLARE_READ8_MEMBER(p2_r);
DECLARE_READ8_MEMBER(t1_r);
DECLARE_WRITE8_MEMBER(rombank_w);
-
+
DECLARE_READ8_MEMBER(txtram_r);
DECLARE_READ8_MEMBER(randomizer);
DECLARE_WRITE8_MEMBER(txtram_w);
DECLARE_WRITE8_MEMBER(ppi_pb_w);
DECLARE_WRITE8_MEMBER(ppi_pc_w);
-
+
DECLARE_READ8_MEMBER(ins8154_pa_r);
DECLARE_WRITE8_MEMBER(ins8154_pa_w);
DECLARE_READ8_MEMBER(ins8154_pb_r);
@@ -141,7 +141,7 @@ public:
DECLARE_WRITE8_MEMBER(ay8910_pa_w);
DECLARE_READ8_MEMBER(ay8910_pb_r);
DECLARE_WRITE8_MEMBER(ay8910_pb_w);
-
+
DECLARE_DRIVER_INIT(vega);
@@ -150,28 +150,28 @@ public:
WRITE8_MEMBER(vega_state::extern_w)
{
m_ext_offset_w=offset;
-
+
switch((m_p2_data>>2)&7) /* 7442 = lines 2,3,4 - select device */
{
-
+
case 0: /* 00-03 */
{
/* PPI 8255 /CS */
m_i8255->write(space, (m_p2_data>>6)&3, data);
}
break;
-
+
case 1: /* 04-07 */
{
/* AY 3-8910 */
ay8910_address_w(m_ay8910, 0, offset);
}
break;
-
+
case 2: /* 08-0b */
{
/* INS 8154 /CS0 */
-
+
if(m_p2_data&0x40) /* P26 connected to M/IO pin */
{
m_ins8154_ram[offset&0x7f]=data;
@@ -183,24 +183,24 @@ WRITE8_MEMBER(vega_state::extern_w)
}
}
break;
-
+
case 3: /* 0c-0f */
{
if(offset&4)
{
int num=0; //?
-
+
switch(offset&3)
{
- case 0:
+ case 0:
m_obj[num].m_x=(m_obj[num].m_x&0x80)|(data>>1); //?
m_obj[num].m_enable=data&1;
break;
-
- case 1:
+
+ case 1:
m_obj[num].m_x=(m_obj[num].m_x&0x7f)|((data&1)<<7);
break;
-
+
case 2: m_obj[num].m_y=data; break;
case 3: m_obj[num].m_type=data&0x0f; break;
}
@@ -210,78 +210,78 @@ WRITE8_MEMBER(vega_state::extern_w)
// 0 - y ?
switch(offset&3)
{
- case 0:
+ case 0:
m_obj[OBJ_PLAYER].m_y=data;
break;
-
+
case 1:
m_tilemap_offset_y=data;
break;
-
+
case 2:
m_tilemap_offset_x=((m_tilemap_offset_x)&(~0xff))|data;
break;
-
+
case 3:
m_tilemap_top=data&0x0f;
m_tilemap_flags=data>>4;
break;
}
-
+
}
-
+
}
break;
-
+
case 4: /* 10-13 */
{
int num=(offset&4)?1:2;
-
+
switch(offset&3)
{
- case 0:
+ case 0:
m_obj[num].m_x=(m_obj[num].m_x&0x80)|(data>>1);
m_obj[num].m_enable=data&1;
break;
-
- case 1:
+
+ case 1:
m_obj[num].m_x=(m_obj[num].m_x&0x7f)|((data&1)<<7);
break;
-
+
case 2: m_obj[num].m_y=data; break;
case 3: m_obj[num].m_type=data&0x0f; break;
-
+
}
-
+
}
break;
-
- // case 5: /* 14-17 */
- // {
- //
- // }
- // break;
- //
- // case 6: /* 18-1b */
- // {
- //
- // }
- // break;
- //
- // case 7: /* 1c-1f */
- // {
- //
- // }
- // break;
-
+
+ // case 5: /* 14-17 */
+ // {
+ //
+ // }
+ // break;
+ //
+ // case 6: /* 18-1b */
+ // {
+ //
+ // }
+ // break;
+ //
+ // case 7: /* 1c-1f */
+ // {
+ //
+ // }
+ // break;
+
default: logerror("unknown w %x %x %x\n",m_p2_data,offset, data);
-
+
}
}
READ8_MEMBER(vega_state::extern_r)
{
m_ext_offset_r=offset;
-
+
switch((m_p2_data>>2)&7)
{
case 0: /* PPI 8255 /CS */
@@ -289,7 +289,7 @@ READ8_MEMBER(vega_state::extern_r)
return m_i8255->read( space, m_p2_data>>6); /* A6,A7 -> A0,A1 */
}
break;
-
+
case 1: /* 04-07 */
{
/* AY 3-8910 */
@@ -298,11 +298,11 @@ READ8_MEMBER(vega_state::extern_r)
}
break;
-
+
case 2: /* 08-0b */
{
/* INS 8154 /CS0 */
-
+
if(m_p2_data&0x40) /* P26 connected to M/IO pin */
{
return m_ins8154_ram[offset&0x7f];
@@ -312,44 +312,44 @@ READ8_MEMBER(vega_state::extern_r)
//register r ?
return ins8154_r(m_ins8154,offset&0x7f);
}
-
+
}
break;
-#if 0
+#if 0
case 3: /* 0c-0f */
{
-
-
+
+
}
break;
-
+
case 4: /* 10-13 */
{
-
+
}
break;
-
+
case 5: /* 14-17 */
{
-
+
}
break;
-
+
case 6: /* 18-1b */
{
-
+
}
break;
-
+
case 7: /* 1c-1f */
{
-
+
}
break;
#endif
- default: logerror("unknown r %x %x\n",m_p2_data,offset);
+ default: logerror("unknown r %x %x\n",m_p2_data,offset);
}
-
+
return 0;
}
@@ -380,14 +380,14 @@ static ADDRESS_MAP_START( vega_map, AS_PROGRAM, 8, vega_state )
ADDRESS_MAP_END
/*
-MCS48_PORT_P0 = 0x100,
- MCS48_PORT_P1 = 0x101,
- MCS48_PORT_P2 = 0x102,
- MCS48_PORT_T0 = 0x110,
- MCS48_PORT_T1 = 0x111,
- MCS48_PORT_BUS = 0x120,
- MCS48_PORT_PROG = 0x121 0/1
- */
+MCS48_PORT_P0 = 0x100,
+ MCS48_PORT_P1 = 0x101,
+ MCS48_PORT_P2 = 0x102,
+ MCS48_PORT_T0 = 0x110,
+ MCS48_PORT_T1 = 0x111,
+ MCS48_PORT_BUS = 0x120,
+ MCS48_PORT_PROG = 0x121 0/1
+ */
static ADDRESS_MAP_START( vega_io_map, AS_IO, 8, vega_state )
AM_RANGE(0x00, 0xff) AM_READWRITE(extern_r, extern_w)
AM_RANGE(MCS48_PORT_P1, MCS48_PORT_P1) AM_READ_PORT("DSW") AM_WRITE(rombank_w) //101
@@ -414,62 +414,62 @@ static INPUT_PORTS_START( vega )
PORT_DIPSETTING( 0x08, DEF_STR( 1C_1C ) )
PORT_DIPSETTING( 0x10, DEF_STR( 1C_2C ) )
PORT_DIPSETTING( 0x18, DEF_STR( 1C_3C ) )
-
+
PORT_DIPNAME( 0x20, 0x20, "Speed" ) PORT_DIPLOCATION("SW1:6")
PORT_DIPSETTING( 0x20, DEF_STR( Normal ) )
PORT_DIPSETTING( 0x00, DEF_STR( High ) )
-
+
PORT_DIPNAME( 0x40, 0x40, "Ext Play at" ) PORT_DIPLOCATION("SW1:7")
PORT_DIPSETTING( 0x40, "3.000" )
PORT_DIPSETTING( 0x00, "4.000" )
-
+
PORT_DIPNAME( 0x80, 0x80, "Bomb Speed" ) PORT_DIPLOCATION("SW1:8")
PORT_DIPSETTING( 0x80, DEF_STR( Normal ) )
PORT_DIPSETTING( 0x00, DEF_STR( High ) )
-
+
//PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unused ) ) /* output */
-
+
PORT_START("IN0")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START1 )
-
+
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON2 )
-
+
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_UP )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON3 )
-
+
PORT_START("IN1")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_TILT )
PORT_BIT( 0x02, IP_ACTIVE_LOW,IPT_COIN1 )
PORT_BIT( 0x04, IP_ACTIVE_LOW,IPT_COIN2 )
-
+
PORT_DIPNAME( 0x08, 0x00, "1-3" ) //unused ?
PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
-
+
PORT_DIPNAME( 0x10, 0x00, "1-4" ) //unused ?
PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
-
+
PORT_DIPNAME( 0x20, 0x00, "1-5" ) //unused ?
PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
-
+
PORT_DIPNAME( 0x40, 0x00, "1-6" ) //some video status ?
PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
-
+
PORT_DIPNAME( 0x80, 0x00, "1-7" ) //some video status ?
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
-
+
INPUT_PORTS_END
@@ -488,41 +488,41 @@ static PALETTE_INIT( vega )
static void draw_tilemap(vega_state *state, screen_device& screen, bitmap_ind16& bitmap, const rectangle& cliprect)
{
{
-
+
UINT8 *map_lookup = state->memregion("tilemaps")->base();
int offset_y=state->m_tilemap_offset_y;
int offset_x=state->m_tilemap_offset_x;
-
+
//logerror("%d %d\n",offset_x, offset_y);
-
+
for(int xx=0;xx<128;++xx)
{
for(int yy=0;yy<8;yy++)
{
-
+
int x0=xx*32;
int y0=yy*32;
-
-
+
+
int id=map_lookup[((yy+xx*8)+ ((state->m_tilemap_flags&2)?0x400:0) + (state->m_tilemap_top<<6 ) ) &0x7ff];
-
+
int flip=BIT(id,5);
-
+
int num=(BITSWAP8( ((id>>2) &7), 7,6,5,4,3,0,1,2 ));
-
+
int bank=id&3;
-
+
if(bank!=3)
{
-
+
num+=bank*8;
-
+
num*=8*4;
-
-
+
+
for(int x=0;x<8;++x)
for(int y=0;y<4;++y)
{
@@ -535,24 +535,24 @@ static void draw_tilemap(vega_state *state, screen_device& screen, bitmap_ind16&
}
}
}
-
-
+
+
}
-
-
-
-
+
+
+
+
}
static SCREEN_UPDATE_IND16( vega )
{
vega_state *state = screen.machine().driver_data<vega_state>();
++state->m_frame_counter;
-
+
bitmap.fill(0, cliprect);
-
+
draw_tilemap(state, screen, bitmap, cliprect);
-
+
{
int x,y;
@@ -562,39 +562,39 @@ static SCREEN_UPDATE_IND16( vega )
for(y=0;y<25;++y)
for(x=0;x<40;++x)
{
-
+
int character=state->m_txt_ram[idx];
//int color=BITSWAP8(color_lookup[character],7,6,5,4,0,1,2,3)>>1;
int color=color_lookup[character]&0xf;
- /*
- bit 0 - unknown
- bit 1 - blue
- bit 2 - green
- bit 3 - red
- */
-
+ /*
+ bit 0 - unknown
+ bit 1 - blue
+ bit 2 - green
+ bit 3 - red
+ */
+
color=BITSWAP8(color,7,6,5,4,0,1,2,3)&0x7;
-
+
color^=0xf;
-
- // if(color==0) color=0xf;
-
+
+ // if(color==0) color=0xf;
+
drawgfx_transpen(bitmap, cliprect, screen.machine().gfx[0], character, color, 0, 0, x*7, y*10,0);
-
+
++idx;
}
-
+
}
-
+
{
for(int i=OBJ_0;i<OBJ_PLAYER;++i)
{
-
+
int x0=255-state->m_obj[i].m_x;
int y0=255-state->m_obj[i].m_y;
int num=state->m_obj[i].m_type&7;
int flip=state->m_obj[i].m_type&8;
-
+
num*=4*8;
for(int x=0;x<8;++x)
for(int y=0;y<4;++y)
@@ -610,11 +610,11 @@ static SCREEN_UPDATE_IND16( vega )
/*
- 64 strips
-
- x - - x x x
-
-
+ 64 strips
+
+ x - - x x x
+
+
*/
@@ -624,24 +624,24 @@ static SCREEN_UPDATE_IND16( vega )
{
int x0=state->m_obj[OBJ_PLAYER].m_x;
int y0=255-state->m_obj[OBJ_PLAYER].m_y-32;
-
+
UINT8 *sprite_lookup = state->memregion("proms")->base();
-
+
for(int x=0;x<16;++x)
{
int prom_data=sprite_lookup[ ((state->m_obj[OBJ_PLAYER].m_type&0xf)<<2)|((x>>2)&3)|(((state->m_frame_counter>>1)&3)<<6) ];
-
+
int xor_line=( ! (( ! ((BIT(prom_data,1))&(BIT(prom_data,2))&(BIT(prom_data,3))&(BIT(x,2)) ) ) &
( (BIT(prom_data,2)) | (BIT(prom_data,3)) | ( BIT(state->m_obj[OBJ_PLAYER].m_type,4)) ) ));
-
+
int strip_num=((prom_data)&0x7)|( ((x&3)^(xor_line?0x3:0)) <<3)|((BIT(prom_data,3))<<5);
-
+
strip_num<<=2;
-
+
for(int y=0;y<4;++y)
{
-
+
drawgfx_transpen(bitmap, cliprect, screen.machine().gfx[3], strip_num, 0, !xor_line, 0, x*4+x0, y*8+y0, 0);
++strip_num;
}
@@ -662,7 +662,7 @@ static const gfx_layout text_charlayout =
{ 1,2,3,4,5,6,7 },
/* y offsets */
{ 0*8, 8*8, 4*8, 12*8, 2*8, 10*8, 6*8, 14*8, 1*8, 9*8 },
- 8*16
+ 8*16
};
static const gfx_layout tile_layout2 =
@@ -722,7 +722,7 @@ WRITE8_MEMBER(vega_state::txtram_w)
READ8_MEMBER(vega_state::txtram_r)
{
-
+
return m_txt_ram[m_ext_offset_r+((m_p2_data&3)<<8)];
}
@@ -830,22 +830,22 @@ static const ay8910_interface ay8910_inf =
static MACHINE_START( vega )
{
-
+
}
static MACHINE_CONFIG_START( vega, vega_state )
-
- MCFG_CPU_ADD("maincpu", I8035, 4000000)
+
+ MCFG_CPU_ADD("maincpu", I8035, 4000000)
MCFG_CPU_PROGRAM_MAP(vega_map)
MCFG_CPU_IO_MAP(vega_io_map)
MCFG_CPU_VBLANK_INT("screen",irq0_line_hold)
-
+
MCFG_MACHINE_START(vega)
MCFG_MACHINE_RESET(vega)
-
+
MCFG_I8255A_ADD( "ppi8255", ppi8255_intf )
MCFG_INS8154_ADD( "ins8154", ins8154_intf)
@@ -862,7 +862,7 @@ static MACHINE_CONFIG_START( vega, vega_state )
MCFG_PALETTE_INIT(vega)
MCFG_SCREEN_UPDATE_STATIC(vega)
-
+
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
@@ -870,27 +870,27 @@ static MACHINE_CONFIG_START( vega, vega_state )
MCFG_SOUND_ADD("ay8910", AY8910, 1500000 )
MCFG_SOUND_CONFIG(ay8910_inf)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
-
+
MACHINE_CONFIG_END
ROM_START( vega )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "rom9.bin", 0x0800, 0x0800, CRC(191c73cd) SHA1(17b1c3790f82b276e55d25ea8a38a3c9cf20bf12) )
ROM_LOAD( "rom10a.bin", 0x1000, 0x1000, CRC(fca9a570) SHA1(598772db11b32518ed6bf5155a19f4f1761a4831) )
-
+
ROM_REGION( 0x01000, "gfx1", ROMREGION_INVERT )
ROM_LOAD( "rom8.bin", 0x0000, 0x0800, CRC(ccb8598c) SHA1(8c4a702f0653bb189db7d8ac4c2a06aacecc0de0) )
ROM_LOAD( "rom7.bin", 0x0800, 0x0800, CRC(1de564cd) SHA1(7408cd29f1afc111aa695ecb00160d8f7fba7532) )
-
+
ROM_REGION( 0x01800, "gfx2", ROMREGION_INVERT )
ROM_LOAD( "rom2.bin", 0x0000, 0x0800, CRC(718da952) SHA1(1a0023be1ee3a48ed3ddb8daddbb49ca3f442d46) )
ROM_LOAD( "rom3.bin", 0x0800, 0x0800, CRC(37944311) SHA1(8b20be3d3ca5cb27bef78a73ee7e977fdf76c7f1) )
ROM_LOAD( "rom4.bin", 0x1000, 0x0800, CRC(09453d7a) SHA1(75fe96ae25467f82c0725834c6c04a197f50cce7) )
-
+
ROM_REGION( 0x01000, "gfx3", ROMREGION_INVERT )
ROM_LOAD( "rom5.bin", 0x0000, 0x0800, CRC(be3df449) SHA1(acba1e07bdf9c0e971f47f2433d2760472c4326a) )
ROM_LOAD( "rom6.bin", 0x0800, 0x0800, CRC(dc46527c) SHA1(d10a54d8d3ce9ffd8a53bede3d089625aff445a2) )
-
+
ROM_REGION( 0x01000, "gfx4", ROMREGION_INVERT )
ROM_LOAD( "rom11.bin", 0x0000, 0x0800, CRC(d1896f77) SHA1(5b80bf7aa81508edfae4fa583b4b0077575a300c) )
ROM_LOAD( "rom12.bin", 0x0800, 0x0800, CRC(f5f1df2f) SHA1(5851b468702e5e4f085b64afbe7d8b797bb109b5) )
@@ -900,7 +900,7 @@ ROM_START( vega )
ROM_LOAD( "r9.bin", 0x0100, 0x0100, CRC(db0bcea5) SHA1(692bea2d9e28985fe7270a940e9f48ac64bdeaa8) ) // FIXED BITS (0000xxxx)
ROM_LOAD( "r10.bin", 0x0200, 0x0100, CRC(ca5a3627) SHA1(8c632fa9174e336c588074f92f3519b0cf224852) ) // FIXED BITS (0000xxxx) - txt layer lookup table
ROM_LOAD( "r11.bin", 0x0300, 0x0100, CRC(d8aab14a) SHA1(798feaa929dd7b71266220b568826997acd2a93e) ) // FIXED BITS (000011xx) - RNG? not used
-
+
ROM_REGION( 0x800, "tilemaps", 0 )
ROM_LOAD( "rom1.bin", 0x0000, 0x0800, CRC(a0c0e0af) SHA1(7ccbfe3c23cda4c3a639c89ff4b2f554e2876c98) ) // FIXED BITS (00xxxxxx) (tile attribs?)