Various improvements to the Zero Target / Counter Steer HW and cleaned-up the driver. [Angelo Salese]

This commit is contained in:
Angelo Salese 2009-03-03 17:56:52 +00:00
parent b259386789
commit c7c1046d0e

View File

@ -1,43 +1,38 @@
/******************************************************************************* /**************************************************************************************
Counter Steer (c) 1985 Data East Corporation Counter Steer (c) 1985 Data East Corporation
Zero Target (c) 1985 Data East Corporation Zero Target (c) 1985 Data East Corporation
Gekitsui Oh (c) 1985 Data East Corporation Gekitsui Oh (c) 1985 Data East Corporation
Emulation by Bryan McPhail, mish@tendril.co.uk Emulation by Bryan McPhail, mish@tendril.co.uk
Improvements by Pierpaolo Prazzoli, David Haywood Improvements by Pierpaolo Prazzoli, David Haywood, Angelo Salese
Various things aren't fully understood, for example the rotating BG layer Various things aren't fully understood, for example the rotating BG layer
todo: todo:
finish finish
sprite fixes sprite fixes
roz fixes correct roz rotation
colour fixes? colour fixes. Foreground layer & sprites
input fixes? Dip-Switches
sound make cntsteer work, comms looks awkward and probably different than Zero Target
make cntsteer work
cleanup cleanup
split into driver/video split into driver/video
add any missing sha info etc.
remove unneeded debug code
***************************************************************************************/
*******************************************************************************/
#include "driver.h" #include "driver.h"
#include "cpu/m6502/m6502.h" #include "cpu/m6502/m6502.h"
#include "deprecat.h"
#include "cpu/m6809/m6809.h" #include "cpu/m6809/m6809.h"
#include "sound/ay8910.h" #include "sound/ay8910.h"
#include "sound/2203intf.h"
static tilemap *bg_tilemap, *fg_tilemap; static tilemap *bg_tilemap, *fg_tilemap;
static UINT8 *videoram2; static UINT8 *videoram2;
static int flipscreen=0; static int flipscreen=0;
static int bg_bank = 0; static int bg_bank = 0,bg_color_bank;
static int scrolly = 0, scrollx = 0, scrollx_hi = 0, scrolly_hi = 0, rotation_x = 0, rotation_sign = 0;
static int disable_roz;
static PALETTE_INIT( zerotrgt ) static PALETTE_INIT( zerotrgt )
{ {
@ -47,38 +42,41 @@ static PALETTE_INIT( zerotrgt )
int bit0,bit1,bit2,r,g,b; int bit0,bit1,bit2,r,g,b;
/* red component */ /* red component */
bit0 = (color_prom[i] >> 0) & 0x01; bit0 = (color_prom[i] >> 2) & 0x01;
bit1 = (color_prom[i] >> 1) & 0x01; bit1 = (color_prom[i] >> 1) & 0x01;
bit2 = (color_prom[i] >> 2) & 0x01; bit2 = (color_prom[i] >> 0) & 0x01;
r = /*255 - */(0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2); r = /*255 - */(0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2);
/* green component */ /* green component */
bit0 = (color_prom[i] >> 4) & 0x01; bit0 = (color_prom[i] >> 6) & 0x01;
bit1 = (color_prom[i] >> 5) & 0x01; bit1 = (color_prom[i] >> 5) & 0x01;
bit2 = (color_prom[i] >> 6) & 0x01; bit2 = (color_prom[i] >> 4) & 0x01;
g =/* 255 - */(0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2); g =/* 255 - */(0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2);
/* blue component */ /* blue component */
bit0 = (color_prom[i+256] >> 0) & 0x01; bit0 = (color_prom[i+256] >> 2) & 0x01;
bit1 = (color_prom[i+256] >> 1) & 0x01; bit1 = (color_prom[i+256] >> 1) & 0x01;
bit2 = (color_prom[i+256] >> 2) & 0x01; bit2 = (color_prom[i+256] >> 0) & 0x01;
b = /*255 - */(0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2); b = /*255 - */(0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2);
palette_set_color(machine,i,MAKE_RGB(r,g,b)); palette_set_color(machine,i,MAKE_RGB(r,g,b));
} }
} }
static int colo=0;
static TILE_GET_INFO( get_bg_tile_info ) static TILE_GET_INFO( get_bg_tile_info )
{ {
int code = videoram2[tile_index]; int code = videoram2[tile_index];
SET_TILE_INFO(2, code + bg_bank, 0/*colo*/, 0); SET_TILE_INFO(2, code + bg_bank, bg_color_bank, 0);
} }
static TILE_GET_INFO( get_fg_tile_info ) static TILE_GET_INFO( get_fg_tile_info )
{ {
int code = videoram[tile_index]; int code = videoram[tile_index];
int attr = videoram[tile_index + 0x400]; int attr = colorram[tile_index];
SET_TILE_INFO(0, code + ((attr & 0x0f) << 8), ((attr & 0x70) >> 4)+colo, 0); code|= (attr & 0x01)<<8;
/*TODO: bit 3 (8) used on the plane junctions but unknown purpose (color mask? Inverted bitplanes?) */
SET_TILE_INFO(0, code, 0x20+((attr & 0x70)>>4), 0);
} }
static VIDEO_START( zerotrgt ) static VIDEO_START( zerotrgt )
@ -95,16 +93,14 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const recta
{ {
int offs; int offs;
/* Sprites */
for (offs = 0;offs < 0x200;offs += 4) for (offs = 0;offs < 0x200;offs += 4)
{ {
int multi,fx,fy,sx,sy,sy2,code,code2,color; int multi,fx,fy,sx,sy,sy2,code,code2,color;
code = spriteram[offs+3] + ( ( spriteram[offs+1] & 0xc0 ) << 2 ); code = spriteram[offs+3] + ( ( spriteram[offs+1] & 0xc0 ) << 2 );
//todo..
code2 = code+1; code2 = code+1;
sx = (241 - spriteram[offs+2]); sx = (241 - spriteram[offs+2]); //this is wrong.
//if (sx < -7) sx += 256; //if (sx < -7) sx += 256;
sy = 241 - spriteram[offs]; sy = 241 - spriteram[offs];
@ -118,8 +114,6 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const recta
multi = spriteram[offs+1] & 0x10; multi = spriteram[offs+1] & 0x10;
if (flipscreen) { if (flipscreen) {
sy=240-sy; sy=240-sy;
sx=240-sx; sx=240-sx;
@ -151,126 +145,68 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const recta
} }
} }
static int scrolly = 0, scrollx = 0, scrolly_hi = 0, rotation_x = 0, rotation_y = 0, rotation_sign = 0;
static VIDEO_UPDATE( zerotrgt ) static VIDEO_UPDATE( zerotrgt )
{ {
static int rot2=0,zoom=0; if(disable_roz)
static int scroll=0; bitmap_fill(bitmap,cliprect,get_black_pen(screen->machine)); //black or pen 0?
else
if (input_code_pressed_once(KEYCODE_Q))
{ {
colo++; tilemap_draw_roz(bitmap, cliprect, bg_tilemap,
mame_printf_debug("colo = %X\n",colo); (scrollx | scrollx_hi ) << 16, (scrolly | scrolly_hi) << 16,
tilemap_mark_all_tiles_dirty(bg_tilemap); 1<<16, (rotation_sign) ? -rotation_x<<8 : rotation_x<<8,
tilemap_mark_all_tiles_dirty(fg_tilemap); 0<<16, 1<<16,
1,
0, 0);
} }
if (input_code_pressed_once(KEYCODE_W))
{
colo--;
mame_printf_debug("colo = %X\n",colo);
tilemap_mark_all_tiles_dirty(bg_tilemap);
tilemap_mark_all_tiles_dirty(fg_tilemap);
}
if (input_code_pressed_once(KEYCODE_E))
{
rot2++;
mame_printf_debug("rot2 = %X\n",rot2);
}
if (input_code_pressed_once(KEYCODE_R))
{
rot2--;
mame_printf_debug("rot2 = %X\n",rot2);
}
if (input_code_pressed_once(KEYCODE_T))
{
zoom+=0x100;
mame_printf_debug("zoom= %X\n",zoom);
}
if (input_code_pressed_once(KEYCODE_Y))
{
zoom-=0x100;
mame_printf_debug("zoom= %X\n",zoom);
}
if (input_code_pressed_once(KEYCODE_A))
{
scroll+=0x10;
mame_printf_debug("scroll = %d\n",scroll);
}
if (input_code_pressed_once(KEYCODE_S))
{
scroll-=0x10;
mame_printf_debug("scroll = %d\n",scroll);
}
if (input_code_pressed_once(KEYCODE_I))
{
scrollx+=0x10;
mame_printf_debug("scrollx = %d\n",scrollx);
}
if (input_code_pressed_once(KEYCODE_O))
{
scrollx-=0x10;
mame_printf_debug("scrollx = %d\n",scrollx);
}
// if (input_code_pressed(KEYCODE_A)) cpu_cause_interrupt(0,M6809_INT_IRQ);
// spriteram=batwings_ram+0x100;
// tilemap_set_scrolly( bg_tilemap, 0, scrolly | scrolly_hi);
// tilemap_draw(bitmap,cliprect,bg_tilemap,0,0);
scrollx = 256;
if(rotation_sign)
rotation_x = -rotation_x;
tilemap_draw_roz(bitmap, cliprect, bg_tilemap,
scrollx << 16, (scrolly | scrolly_hi) << 16,
1<<16, rotation_x << 10,
rotation_y << 8, 1<<16,
1,
0, 0);
tilemap_draw(bitmap,cliprect,fg_tilemap,0,0); tilemap_draw(bitmap,cliprect,fg_tilemap,0,0);
draw_sprites(screen->machine,bitmap,cliprect,0); draw_sprites(screen->machine,bitmap,cliprect,0);
draw_sprites(screen->machine,bitmap,cliprect,1); draw_sprites(screen->machine,bitmap,cliprect,1);
#if 0
{
int i,j;
char buf[60];
struct osd_bitmap *mybitmap = bitmap;
UINT8 *RAM = memory_region(machine, "maincpu");
buf[0] = 0;
for (i = 0;i < 8;i+=2)
sprintf(&buf[strlen(buf)],"%04X\n",RAM[0x3000+i+1]+(RAM[0x3000+i]<<8));
ui_draw_text(buf,50,8*6);
}
#endif
return 0; return 0;
} }
static WRITE8_HANDLER( cntsteer_foreground_w ) /*
[0] = scroll y
[1] = scroll x
[2] = -x-- ---- disable roz layer (Used when you lose a life / start a new play)
--xx ---- bg bank
---- -xxx bg color bank
[3] = xx-- ---- high word scrolling x bits
--xx ---- high word scrolling y bits
---- -x-- flip screen bit (inverted)
---- ---x rotation sign (landscape should be turning right (0) == / , turning left (1) == \)
[4] = xxxx xxxx rotation factor?
*/
static WRITE8_HANDLER(cntsteer_vregs_w)
{
// static UINT8 test[5];
// test[offset] = data;
// popmessage("%02x %02x %02x %02x %02x",test[0],test[1],test[2],test[3],test[4]);
switch(offset)
{
case 0: scrolly = data; break;
case 1: scrollx = data; break;
case 2: bg_bank = (data & 0x30) << 4; bg_color_bank = (data & 7); disable_roz = (data & 0x40); tilemap_mark_all_tiles_dirty(bg_tilemap); break;
case 3: rotation_sign = (data & 1); flip_screen_set(space->machine, !(data & 4)); scrolly_hi = (data & 0x30) << 4; scrollx_hi = (data & 0xc0) << 2; break;
case 4: rotation_x = data; break;
}
}
static WRITE8_HANDLER( cntsteer_foreground_vram_w )
{ {
videoram[offset] = data; videoram[offset] = data;
tilemap_mark_tile_dirty(fg_tilemap, offset & 0x3ff); tilemap_mark_tile_dirty(fg_tilemap, offset);
}
static WRITE8_HANDLER( cntsteer_foreground_attr_w )
{
colorram[offset] = data;
tilemap_mark_tile_dirty(fg_tilemap, offset);
} }
static WRITE8_HANDLER( cntsteer_background_w ) static WRITE8_HANDLER( cntsteer_background_w )
@ -279,38 +215,26 @@ static WRITE8_HANDLER( cntsteer_background_w )
tilemap_mark_tile_dirty(bg_tilemap, offset); tilemap_mark_tile_dirty(bg_tilemap, offset);
} }
#if 0 /*************************************
static WRITE8_HANDLER( gekitsui_int_w ) *
{ * CPU comms
// if (errorlog) fprintf(errorlog,"%04x: CPU 2 causes NMI\n",cpu_get_pc()); *
cpu_set_input_line(space->machine->cpu[0], INPUT_LINE_NMI, ASSERT_LINE); *************************************/
}
static WRITE8_HANDLER( gekitsui_int2_w ) // not used..
{
// if (errorlog) fprintf(errorlog,"%04x: CPU 1 causes IRQ\n",cpu_get_pc());
cpu_set_input_line(space->machine->cpu[1], M6809_IRQ_LINE, ASSERT_LINE);
}
#endif
static WRITE8_HANDLER( gekitsui_sub_irq_ack ) static WRITE8_HANDLER( gekitsui_sub_irq_ack )
{ {
cpu_set_input_line(space->machine->cpu[1], M6809_IRQ_LINE, CLEAR_LINE); cpu_set_input_line(space->machine->cpu[1], M6809_IRQ_LINE, CLEAR_LINE);
} }
#if 0
static WRITE8_HANDLER( cntsteer_int_w )
{
cpu_set_input_line(space->machine->cpu[0], M6809_IRQ_LINE, ASSERT_LINE);
}
#endif
static WRITE8_HANDLER( cntsteer_sound_w ) static WRITE8_HANDLER( cntsteer_sound_w )
{ {
soundlatch_w(space,0,data); soundlatch_w(space,0,data);
cpu_set_input_line(space->machine->cpu[2], 0, HOLD_LINE);
} }
static WRITE8_HANDLER( zerotrgt_ctrl_w ) static WRITE8_HANDLER( zerotrgt_ctrl_w )
{ {
/*TODO: check this.*/
logerror("CTRL: %04x: %04x: %04x\n",cpu_get_pc(space->cpu),offset,data); logerror("CTRL: %04x: %04x: %04x\n",cpu_get_pc(space->cpu),offset,data);
// if (offset==0) cpu_set_input_line(space->machine->cpu[1], INPUT_LINE_RESET, ASSERT_LINE); // if (offset==0) cpu_set_input_line(space->machine->cpu[1], INPUT_LINE_RESET, ASSERT_LINE);
@ -319,156 +243,35 @@ static WRITE8_HANDLER( zerotrgt_ctrl_w )
// if (offset==2) cpu_set_input_line(space->machine->cpu[1], INPUT_LINE_RESET, CLEAR_LINE); // if (offset==2) cpu_set_input_line(space->machine->cpu[1], INPUT_LINE_RESET, CLEAR_LINE);
} }
#if 0
static WRITE8_HANDLER( cntsteer_halt_cpu0_w )
{
// if (errorlog) fprintf(errorlog,"%04x: CPU halt %02x\n",cpu_get_pc(),data);
// cpu_halt(0,0); /* Halt cpu */
}
static WRITE8_HANDLER( cntsteer_restart_cpu0_w )
{
// if (errorlog) fprintf(errorlog,"%04x: CPU restart %02x\n",cpu_get_pc(),data);
//if (data&0x4) cpu_halt(0,1); /* Restart cpu */
}
#endif
/***************************************************************************/ /***************************************************************************/
#if 0
static ADDRESS_MAP_START( cntsteer_cpu1_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0x0fff) AM_RAM AM_SHARE(1)
AM_RANGE(0x1000, 0x11ff) AM_RAM AM_BASE(&spriteram)
AM_RANGE(0x1200, 0x1fff) AM_RAM
AM_RANGE(0x2000, 0x27ff) AM_RAM_WRITE(cntsteer_foreground_w) AM_BASE(&videoram)
AM_RANGE(0x2800, 0x2fff) AM_RAM
// AM_RANGE(0x1b00, 0x1b00) AM_READ_PORT("DSW0")
// AM_RANGE(0x1b01, 0x1b01) AM_READ_PORT("DSW0")
// AM_RANGE(0x3000, 0x3003) AM_WRITE(zerotrgt_ctrl_w)
// AM_RANGE(0x3000, 0x3000) AM_WRITE(cntsteer_halt_cpu0_w)
// AM_RANGE(0x3001, 0x3001) AM_WRITE(gekitsui_int2_w)
// AM_RANGE(0x3003, 0x3003) AM_READ_PORT("DSW1")
AM_RANGE(0x8000, 0xffff) AM_ROM
ADDRESS_MAP_END
static ADDRESS_MAP_START( cntsteer_cpu2_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0x0fff) AM_RAM AM_SHARE(1)
AM_RANGE(0x1000, 0x1fff) AM_RAM_WRITE(cntsteer_background_w) AM_BASE(&videoram2)
AM_RANGE(0x3000, 0x3000) AM_READ_PORT("DSW0")
AM_RANGE(0x3001, 0x3001) AM_READ_PORT("DSW1")
AM_RANGE(0x3002, 0x3002) AM_READ_PORT("P1")
AM_RANGE(0x3003, 0x3003) AM_READ_PORT("P2")
// AM_RANGE(0x3002, 0x3002) AM_WRITE(gekitsui_int_w)
// AM_RANGE(0x3000, 0x3003) AM_WRITE(zerotrgt_ctrl_w)
// wrong 0 1 2 3 are scroll/rotate
// AM_RANGE(0x3002, 0x3002) AM_WRITE(cntsteer_restart_cpu0_w)
// AM_RANGE(0x3000, 0x3003) AM_WRITENOP
// 3007 and 3003 have values..
AM_RANGE(0x3007, 0x3007) AM_WRITE(cntsteer_sound_w)
// AM_RANGE(0x300a, 0x300a) AM_WRITE(cntsteer_int_w)
// AM_RANGE(0x3004, 0x3004) AM_WRITE(cntsteer_int_w)
AM_RANGE(0x4000, 0xffff) AM_ROM
ADDRESS_MAP_END
#endif
static ADDRESS_MAP_START( gekitsui_cpu1_map, ADDRESS_SPACE_PROGRAM, 8 ) static ADDRESS_MAP_START( gekitsui_cpu1_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0x0fff) AM_RAM AM_SHARE(1) AM_RANGE(0x0000, 0x0fff) AM_RAM AM_SHARE(1)
AM_RANGE(0x1000, 0x11ff) AM_RAM AM_BASE(&spriteram) AM_RANGE(0x1000, 0x11ff) AM_RAM AM_BASE(&spriteram)
AM_RANGE(0x1200, 0x1fff) AM_RAM AM_RANGE(0x1200, 0x1fff) AM_RAM
AM_RANGE(0x2000, 0x27ff) AM_RAM_WRITE(cntsteer_foreground_w) AM_BASE(&videoram) AM_RANGE(0x2000, 0x23ff) AM_RAM_WRITE(cntsteer_foreground_vram_w) AM_BASE(&videoram)
AM_RANGE(0x2400, 0x27ff) AM_RAM_WRITE(cntsteer_foreground_attr_w) AM_BASE(&colorram)
AM_RANGE(0x3000, 0x3003) AM_WRITE(zerotrgt_ctrl_w) AM_RANGE(0x3000, 0x3003) AM_WRITE(zerotrgt_ctrl_w)
AM_RANGE(0x8000, 0xffff) AM_ROM AM_RANGE(0x8000, 0xffff) AM_ROM
ADDRESS_MAP_END ADDRESS_MAP_END
static int newdata[5];
static WRITE8_HANDLER(scrivi)
{
if(offset == 0)
{
scrolly = data;
return;
}
if(offset == 1)
{
//rotation related? zoom?
// increment or decrement.. incyx?
rotation_y = data;
}
if(offset == 4)
{
rotation_x = data;
if(data != newdata[offset])
{newdata[offset] = data;
if(data >0x55)
mame_printf_debug("off = %X data = %X\n",offset,data);
}
return;
}
if(offset == 2)
{
bg_bank = (data & 0x30) << 4;
// scrollx = data & 0x0f;
// mame_printf_debug("scrollx = %d %X\n",scrollx<<8,scrollx);
if(data != newdata[offset])
{newdata[offset] = data;
if(data & ~0x30)
mame_printf_debug("off = %X data = %X\n",offset,data&~0x30);
}
tilemap_mark_all_tiles_dirty(bg_tilemap);
return;
}
if(offset == 3)
{
rotation_sign = !(data & 1);
flip_screen_set(space->machine, !(data & 4));
scrolly_hi = (data & 0xf0) << 4;
if(data != newdata[offset])
{newdata[offset] = data;
if(data & ~0xf5)
mame_printf_debug("off = %X data = %X\n",offset,data&~0xf5);
}
return;
}
if(data != newdata[offset] && offset !=1) {
newdata[offset] = data;
mame_printf_debug("off = %X data = %X\n",offset,data);
}
}
static ADDRESS_MAP_START( gekitsui_cpu2_map, ADDRESS_SPACE_PROGRAM, 8 ) static ADDRESS_MAP_START( gekitsui_cpu2_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0x0fff) AM_RAM AM_SHARE(1) AM_RANGE(0x0000, 0x0fff) AM_RAM AM_SHARE(1)
AM_RANGE(0x1000, 0x1fff) AM_RAM_WRITE(cntsteer_background_w) AM_BASE(&videoram2) AM_RANGE(0x1000, 0x1fff) AM_RAM_WRITE(cntsteer_background_w) AM_BASE(&videoram2)
AM_RANGE(0x3000, 0x3000) AM_READ_PORT("DSW0") AM_RANGE(0x3000, 0x3000) AM_READ_PORT("DSW0")
AM_RANGE(0x3001, 0x3001) AM_READ_PORT("DSW1") AM_RANGE(0x3001, 0x3001) AM_READ_PORT("P2")
AM_RANGE(0x3002, 0x3002) AM_READ_PORT("P1") AM_RANGE(0x3002, 0x3002) AM_READ_PORT("P1")
AM_RANGE(0x3003, 0x3003) AM_READ_PORT("P2") AM_RANGE(0x3003, 0x3003) AM_READ_PORT("COINS")
AM_RANGE(0x3000, 0x3004) AM_WRITE(scrivi) /* Scroll, gfx? */ AM_RANGE(0x3000, 0x3004) AM_WRITE(cntsteer_vregs_w)
AM_RANGE(0x3005, 0x3005) AM_WRITE(gekitsui_sub_irq_ack) AM_RANGE(0x3005, 0x3005) AM_WRITE(gekitsui_sub_irq_ack)
AM_RANGE(0x3007, 0x3007) AM_WRITE(cntsteer_sound_w) AM_RANGE(0x3007, 0x3007) AM_WRITE(cntsteer_sound_w)
AM_RANGE(0x4000, 0xffff) AM_ROM AM_RANGE(0x4000, 0xffff) AM_ROM
ADDRESS_MAP_END ADDRESS_MAP_END
/***************************************************************************/ /***************************************************************************/
static int nmimask; static int nmimask;
static WRITE8_HANDLER( nmimask_w ) { nmimask = data & 0x80; } static WRITE8_HANDLER( nmimask_w ) { nmimask = data & 0x80; }
static INTERRUPT_GEN ( sound_interrupt ) { if (!nmimask) cpu_set_input_line(device, INPUT_LINE_NMI, PULSE_LINE); } static INTERRUPT_GEN ( sound_interrupt ) { if (!nmimask) cpu_set_input_line(device, INPUT_LINE_NMI, PULSE_LINE); }
@ -487,6 +290,7 @@ ADDRESS_MAP_END
/***************************************************************************/ /***************************************************************************/
static INPUT_PORTS_START( cntsteer ) static INPUT_PORTS_START( cntsteer )
PORT_START("DSW0") PORT_START("DSW0")
PORT_DIPNAME( 0x01, 0x01, "0" ) PORT_DIPNAME( 0x01, 0x01, "0" )
@ -514,31 +318,14 @@ static INPUT_PORTS_START( cntsteer )
PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_START("DSW1") PORT_START("P2")
PORT_DIPNAME( 0x01, 0x01, "1" ) PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_COCKTAIL
PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_COCKTAIL
PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_COCKTAIL
PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_COCKTAIL
PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL
PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_BIT( 0x60, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_VBLANK )
PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_START("P1") PORT_START("P1")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY
@ -546,109 +333,24 @@ static INPUT_PORTS_START( cntsteer )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_START1 ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_START1 )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START2 ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START2 )
PORT_START("P2") PORT_START("COINS")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_COCKTAIL PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_COCKTAIL PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_COCKTAIL PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN3 )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_COCKTAIL PORT_BIT( 0xf8, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON3 )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON4 )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON5 )
// PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_VBLANK )
// PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON6 )
PORT_DIPNAME( 0x80, 0x80, "vblank" )
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
INPUT_PORTS_END INPUT_PORTS_END
#ifdef UNUSED_DEFINITION
static INPUT_PORTS_START( zerotrgt )
PORT_START("DSW0")
PORT_DIPNAME( 0x01, 0x01, "0" )
PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_START("DSW1")
PORT_DIPNAME( 0x01, 0x01, "1" )
PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_START("P1")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_START1 )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START2 )
PORT_START("P2")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_COCKTAIL
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_COCKTAIL
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_COCKTAIL
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_COCKTAIL
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON3 )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON4 )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON5 )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON6 )
INPUT_PORTS_END
#endif
/***************************************************************************/ /***************************************************************************/
/* this layout is bad and reads way beyond the end of the array */ /* this layout is bad and reads way beyond the end of the array */
static const gfx_layout cntsteer_charlayout = static const gfx_layout cntsteer_charlayout =
{ {
8,8, /* 8*8 characters */ 8,8, /* 8*8 characters */
RGN_FRAC(1,2), 0x200,
2, /* 2 bits per pixel */ 2, /* 2 bits per pixel */
{ 0, 4 }, /* the two bitplanes for 4 pixels are packed into one byte */ { 0, 4 }, /* the two bitplanes for 4 pixels are packed into one byte */
{ 0, 1, 2, 3, 0x800*8+0, 0x800*8+1, 0x800*8+2, 0x800*8+3 }, { 0, 1, 2, 3, 0x800*8+0, 0x800*8+1, 0x800*8+2, 0x800*8+3 },
@ -660,7 +362,7 @@ static const gfx_layout cntsteer_charlayout =
static const gfx_layout zerotrgt_charlayout = static const gfx_layout zerotrgt_charlayout =
{ {
8,8, 8,8,
RGN_FRAC(1,2), 0x200,
2, 2,
{ 4,0 }, { 4,0 },
{ 0, 1, 2, 3, 1024*8*8+0, 1024*8*8+1, 1024*8*8+2, 1024*8*8+3 }, { 0, 1, 2, 3, 1024*8*8+0, 1024*8*8+1, 1024*8*8+2, 1024*8*8+3 },
@ -683,7 +385,7 @@ static const gfx_layout sprites =
static const gfx_layout tilelayout = static const gfx_layout tilelayout =
{ {
16,16, 16,16,
0x200, 0x400,
3, /* 3 bits per pixel */ 3, /* 3 bits per pixel */
{ RGN_FRAC(4,8)+4, 0, 4 }, { RGN_FRAC(4,8)+4, 0, 4 },
{ 3, 2, 1, 0, 11, 10, 9 , 8, 19, 18, 17,16, 27, 26, 25, 24 }, { 3, 2, 1, 0, 11, 10, 9 , 8, 19, 18, 17,16, 27, 26, 25, 24 },
@ -716,7 +418,6 @@ static MACHINE_RESET( zerotrgt )
nmimask = 0; nmimask = 0;
} }
static MACHINE_DRIVER_START( cntsteer ) static MACHINE_DRIVER_START( cntsteer )
MDRV_CPU_ADD("maincpu", M6809, 2000000) /* ? */ MDRV_CPU_ADD("maincpu", M6809, 2000000) /* ? */
MDRV_CPU_PROGRAM_MAP(gekitsui_cpu1_map,0) MDRV_CPU_PROGRAM_MAP(gekitsui_cpu1_map,0)
@ -726,9 +427,9 @@ static MACHINE_DRIVER_START( cntsteer )
MDRV_CPU_PROGRAM_MAP(gekitsui_cpu2_map,0) MDRV_CPU_PROGRAM_MAP(gekitsui_cpu2_map,0)
// MDRV_CPU_VBLANK_INT("screen", nmi_line_pulse) /* ? */ // MDRV_CPU_VBLANK_INT("screen", nmi_line_pulse) /* ? */
// MDRV_CPU_ADD("audiocpu", M6502, 1500000) /* ? */ MDRV_CPU_ADD("audiocpu", M6502, 1500000) /* ? */
// MDRV_CPU_PROGRAM_MAP(sound_map,0) MDRV_CPU_PROGRAM_MAP(sound_map,0)
// MDRV_CPU_VBLANK_INT_HACK(nmi_line_pulse,16) /* ? */ // should be interrupt, 16? MDRV_CPU_PERIODIC_INT(sound_interrupt, 1000)
/* video hardware */ /* video hardware */
MDRV_SCREEN_ADD("screen", RASTER) MDRV_SCREEN_ADD("screen", RASTER)
@ -736,9 +437,10 @@ static MACHINE_DRIVER_START( cntsteer )
MDRV_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */) MDRV_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */)
MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
MDRV_SCREEN_SIZE(256, 256) MDRV_SCREEN_SIZE(256, 256)
MDRV_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 0*8, 32*8-1) MDRV_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 1*8, 31*8-1)
MDRV_QUANTUM_TIME(HZ(6000))
// interleave 200?
MDRV_GFXDECODE(cntsteer) MDRV_GFXDECODE(cntsteer)
MDRV_PALETTE_LENGTH(256) MDRV_PALETTE_LENGTH(256)
// MDRV_PALETTE_INIT(zerotrgt) // MDRV_PALETTE_INIT(zerotrgt)
@ -748,7 +450,11 @@ static MACHINE_DRIVER_START( cntsteer )
/* sound hardware */ /* sound hardware */
MDRV_SPEAKER_STANDARD_MONO("mono") MDRV_SPEAKER_STANDARD_MONO("mono")
// MDRV_SOUND_ADD("ym", YM2203, ym2203_config) MDRV_SOUND_ADD("ay1", AY8910, 1500000)
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
MDRV_SOUND_ADD("ay2", AY8910, 1500000)
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
MACHINE_DRIVER_END MACHINE_DRIVER_END
static MACHINE_DRIVER_START( zerotrgt ) static MACHINE_DRIVER_START( zerotrgt )
@ -762,20 +468,20 @@ static MACHINE_DRIVER_START( zerotrgt )
MDRV_CPU_ADD("audiocpu", M6502, 1500000) /* ? */ MDRV_CPU_ADD("audiocpu", M6502, 1500000) /* ? */
MDRV_CPU_PROGRAM_MAP(sound_map,0) MDRV_CPU_PROGRAM_MAP(sound_map,0)
MDRV_CPU_VBLANK_INT_HACK(irq0_line_pulse,16) /* ? */ // should be interrupt, 16?
MDRV_CPU_PERIODIC_INT(sound_interrupt, 1000) MDRV_CPU_PERIODIC_INT(sound_interrupt, 1000)
MDRV_QUANTUM_TIME(HZ(6000))
/* video hardware */ /* video hardware */
MDRV_SCREEN_ADD("screen", RASTER) MDRV_SCREEN_ADD("screen", RASTER)
MDRV_SCREEN_REFRESH_RATE(60) MDRV_SCREEN_REFRESH_RATE(60)
MDRV_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) MDRV_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
MDRV_SCREEN_SIZE(256, 256) MDRV_SCREEN_SIZE(256, 256)
MDRV_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 0*8, 32*8-1) MDRV_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 1*8, 31*8-1)
MDRV_MACHINE_RESET(zerotrgt) MDRV_MACHINE_RESET(zerotrgt)
// interleave 200?
MDRV_GFXDECODE(zerotrgt) MDRV_GFXDECODE(zerotrgt)
MDRV_PALETTE_LENGTH(256) MDRV_PALETTE_LENGTH(256)
@ -805,8 +511,8 @@ ROM_START( cntsteer )
ROM_LOAD( "by11", 0x8000, 0x4000, CRC(00624e34) SHA1(27bd472e9f2feef4a2c4753d8b0da26ff30d930d) ) ROM_LOAD( "by11", 0x8000, 0x4000, CRC(00624e34) SHA1(27bd472e9f2feef4a2c4753d8b0da26ff30d930d) )
ROM_LOAD( "by10", 0xc000, 0x4000, CRC(9227a9ce) SHA1(8c86f22f90a3a8853562469037ffa06693045f4c) ) ROM_LOAD( "by10", 0xc000, 0x4000, CRC(9227a9ce) SHA1(8c86f22f90a3a8853562469037ffa06693045f4c) )
ROM_REGION( 0x10000, "cpu2", 0 ) ROM_REGION( 0x10000, "audiocpu", 0 )
ROM_LOAD( "by00", 0xc000, 0x2000, CRC(740e4896) SHA1(959652515188966e1c2810eabf2f428fe31a31a9) ) ROM_LOAD( "by00", 0xe000, 0x2000, CRC(740e4896) SHA1(959652515188966e1c2810eabf2f428fe31a31a9) )
ROM_REGION( 0x4000, "gfx1", ROMREGION_DISPOSE ) /* Characters */ ROM_REGION( 0x4000, "gfx1", ROMREGION_DISPOSE ) /* Characters */
ROM_LOAD( "by09", 0x0000, 0x2000, CRC(273eddae) SHA1(4b5450407217d9110acb85e02ea9a6584552362e) ) ROM_LOAD( "by09", 0x0000, 0x2000, CRC(273eddae) SHA1(4b5450407217d9110acb85e02ea9a6584552362e) )
@ -833,6 +539,8 @@ ROM_START( cntsteer )
ROM_LOAD( "by20", 0x30000, 0x2000, CRC(e2198c9e) SHA1(afea262db9154301f4b9e53e1fc91985dd934170) ) ROM_LOAD( "by20", 0x30000, 0x2000, CRC(e2198c9e) SHA1(afea262db9154301f4b9e53e1fc91985dd934170) )
ROM_REGION( 0x200, "proms", ROMREGION_ERASE00 ) ROM_REGION( 0x200, "proms", ROMREGION_ERASE00 )
ROM_LOAD( "mb7118h.7k", 0x0000, 0x100, NO_DUMP )
ROM_LOAD( "mb7052.6k", 0x0100, 0x100, NO_DUMP )
ROM_END ROM_END
ROM_START( zerotrgt ) ROM_START( zerotrgt )
@ -960,16 +668,12 @@ static void init_cntsteer(void)
static DRIVER_INIT( zerotrgt ) static DRIVER_INIT( zerotrgt )
{ {
int i;
for (i=0; i<ARRAY_LENGTH(newdata); i++)
newdata[i] = -1;
zerotrgt_rearrange_gfx(machine, 0x02000, 0x10000); zerotrgt_rearrange_gfx(machine, 0x02000, 0x10000);
} }
/***************************************************************************/ /***************************************************************************/
GAME( 1985, cntsteer, 0, cntsteer, cntsteer, zerotrgt, ROT270, "Data East Corporation", "Counter Steer", GAME_NO_SOUND|GAME_NOT_WORKING ) GAME( 1985, cntsteer, 0, cntsteer, cntsteer, zerotrgt, ROT90, "Data East Corporation", "Counter Steer", GAME_IMPERFECT_GRAPHICS|GAME_NOT_WORKING )
GAME( 1985, zerotrgt, 0, zerotrgt, cntsteer, zerotrgt, ROT0, "Data East Corporation", "Zero Target (World)", GAME_NO_SOUND|GAME_NOT_WORKING ) GAME( 1985, zerotrgt, 0, zerotrgt, cntsteer, zerotrgt, ROT0, "Data East Corporation", "Zero Target (World)", GAME_IMPERFECT_GRAPHICS|GAME_NOT_WORKING )
GAME( 1985, gekitsui, zerotrgt, zerotrgt, cntsteer, zerotrgt, ROT0, "Data East Corporation", "Gekitsui Oh (Japan)", GAME_NO_SOUND|GAME_NOT_WORKING ) GAME( 1985, gekitsui, zerotrgt, zerotrgt, cntsteer, zerotrgt, ROT0, "Data East Corporation", "Gekitsui Oh (Japan)", GAME_IMPERFECT_GRAPHICS|GAME_NOT_WORKING )