diff options
Diffstat (limited to 'src/mame/drivers/vega.c')
-rw-r--r-- | src/mame/drivers/vega.c | 356 |
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?) |