This essentially rewrites the CVS system video code. This fixes wallst071gre. Also fixed the S2650 registry window display.

This commit is contained in:
Zsolt Vasvari 2008-01-07 10:43:55 +00:00
parent 9d3cf20f84
commit 531aea4a38
11 changed files with 352 additions and 485 deletions

1
.gitattributes vendored
View File

@ -2148,6 +2148,7 @@ src/mame/includes/crbaloon.h svneol=native#text/plain
src/mame/includes/crgolf.h svneol=native#text/plain
src/mame/includes/crshrace.h svneol=native#text/plain
src/mame/includes/cubocd32.h svneol=native#text/plain
src/mame/includes/cvs.h svneol=native#text/plain
src/mame/includes/cyberbal.h svneol=native#text/plain
src/mame/includes/dc.h svneol=native#text/plain
src/mame/includes/dcheese.h svneol=native#text/plain

View File

@ -1605,9 +1605,9 @@ void s2650_get_info(UINT32 state, cpuinfo *info)
case CPUINFO_STR_REGISTER + S2650_R1: sprintf(info->s, "R1:%02X", S.reg[1]); break;
case CPUINFO_STR_REGISTER + S2650_R2: sprintf(info->s, "R2:%02X", S.reg[2]); break;
case CPUINFO_STR_REGISTER + S2650_R3: sprintf(info->s, "R3:%02X", S.reg[3]); break;
case CPUINFO_STR_REGISTER + S2650_R1A: sprintf(info->s, "R1'%02X", S.reg[4]); break;
case CPUINFO_STR_REGISTER + S2650_R2A: sprintf(info->s, "R2'%02X", S.reg[5]); break;
case CPUINFO_STR_REGISTER + S2650_R3A: sprintf(info->s, "R3'%02X", S.reg[6]); break;
case CPUINFO_STR_REGISTER + S2650_R1A: sprintf(info->s, "R1':%02X", S.reg[4]); break;
case CPUINFO_STR_REGISTER + S2650_R2A: sprintf(info->s, "R2':%02X", S.reg[5]); break;
case CPUINFO_STR_REGISTER + S2650_R3A: sprintf(info->s, "R3':%02X", S.reg[6]); break;
case CPUINFO_STR_REGISTER + S2650_HALT: sprintf(info->s, "HALT:%X", S.halt); break;
case CPUINFO_STR_REGISTER + S2650_SI: sprintf(info->s, "SI:%X", (S.psu & SI) ? 1 : 0); break;
case CPUINFO_STR_REGISTER + S2650_FO: sprintf(info->s, "FO:%X", (S.psu & FO) ? 1 : 0); break;

View File

@ -76,7 +76,7 @@
#include "driver.h"
#include "s2636.h"
static const int SpriteOffset[4] = {0,0x10,0x20,0x40};
static const int sprite_offsets[4] = { 0x00, 0x10, 0x20, 0x40};
/* To adjust sprites against bitmap */
@ -88,8 +88,19 @@ mame_bitmap *s2636_1_bitmap;
mame_bitmap *s2636_2_bitmap;
mame_bitmap *s2636_3_bitmap;
int s2636_x_offset=0;
int s2636_y_offset=0;
int s2636_x_offset;
int s2636_y_offset;
const gfx_layout s2636_gfx_layout =
{
8,10,
5,
1,
{ 0 },
{ 0, 1, 2, 3, 4, 5, 6, 7 },
{ 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8, 8*8, 9*8 },
8*16
};
/*****************************************/
@ -103,20 +114,20 @@ static int SpriteCheck(running_machine *machine, int first,int second,UINT8 *wor
// Does not check shadow sprites yet
if((workram[SpriteOffset[first] + 10] != 0xff) && (workram[SpriteOffset[second] + 10] != 0xff))
if((workram[sprite_offsets[first] + 10] != 0xff) && (workram[sprite_offsets[second] + 10] != 0xff))
{
int fx1 = workram[SpriteOffset[first] + 10] + s2636_x_offset;
int fy1 = workram[SpriteOffset[first] + 12] + s2636_y_offset;
int fx2 = workram[SpriteOffset[second] + 10] + s2636_x_offset;
int fy2 = workram[SpriteOffset[second] + 12] + s2636_y_offset;
int fx1 = workram[sprite_offsets[first] + 10] + s2636_x_offset;
int fy1 = workram[sprite_offsets[first] + 12] + s2636_y_offset;
int fx2 = workram[sprite_offsets[second] + 10] + s2636_x_offset;
int fy2 = workram[sprite_offsets[second] + 12] + s2636_y_offset;
if((fx1>=0) && (fy1>=0) && (fx2>=0) && (fy2>=0))
{
int expand1 = 1 << (16+((workram[0xC0]>>(first<<1)) & 3));
int expand2 = 1 << (16+((workram[0xC0]>>(second<<1)) & 3));
int char1 = SpriteOffset[first]>>4;
int char2 = SpriteOffset[second]>>4;
int char1 = sprite_offsets[first]>>4;
int char2 = sprite_offsets[second]>>4;
/* Draw first sprite */
@ -197,7 +208,7 @@ void s2636_update_bitmap(running_machine *machine,mame_bitmap *bitmap,UINT8 *wor
for(spriteno=0;spriteno<4;spriteno++)
{
offs = SpriteOffset[spriteno];
offs = sprite_offsets[spriteno];
if(workram[offs+10]!=0xFF)
{

View File

@ -9,5 +9,7 @@ extern mame_bitmap *s2636_3_bitmap;
extern int s2636_x_offset;
extern int s2636_y_offset;
extern const gfx_layout s2636_gfx_layout;
void s2636_update_bitmap(running_machine *machine,mame_bitmap *bitmap,UINT8 *workram,int Graphics_Bank,mame_bitmap *collision_bitmap);

View File

@ -83,36 +83,13 @@ Hardware Info
***************************************************************************/
#include "driver.h"
#include "cvs.h"
#include "cpu/s2650/s2650.h"
#include "sound/dac.h"
#include "sound/5110intf.h"
#include "sound/tms5110.h"
#include "video/s2636.h"
INTERRUPT_GEN( cvs_interrupt );
PALETTE_INIT( cvs );
VIDEO_UPDATE( cvs );
VIDEO_START( cvs );
extern UINT8 *cvs_bullet_ram;
WRITE8_HANDLER( cvs_videoram_w );
WRITE8_HANDLER( cvs_bullet_w );
WRITE8_HANDLER( cvs_2636_1_w );
WRITE8_HANDLER( cvs_2636_2_w );
WRITE8_HANDLER( cvs_2636_3_w );
WRITE8_HANDLER( cvs_scroll_w );
WRITE8_HANDLER( cvs_video_fx_w );
READ8_HANDLER( cvs_collision_r );
READ8_HANDLER( cvs_collision_clear );
READ8_HANDLER( cvs_videoram_r );
READ8_HANDLER( cvs_bullet_r );
READ8_HANDLER( cvs_2636_1_r );
READ8_HANDLER( cvs_2636_2_r );
READ8_HANDLER( cvs_2636_3_r );
READ8_HANDLER( cvs_character_mode_r );
/***************************************************************************
Speech Calls
@ -229,11 +206,11 @@ static const struct TMS5110interface tms5110_interface =
static ADDRESS_MAP_START( cvs_cpu1_program, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0x13ff) AM_ROM
AM_RANGE(0x1400, 0x14ff) AM_MIRROR(0x6000) AM_READWRITE(cvs_bullet_r, cvs_bullet_w) AM_BASE(&cvs_bullet_ram)
AM_RANGE(0x1500, 0x15ff) AM_MIRROR(0x6000) AM_READWRITE(cvs_2636_3_r, cvs_2636_3_w) AM_BASE(&s2636_3_ram)
AM_RANGE(0x1600, 0x16ff) AM_MIRROR(0x6000) AM_READWRITE(cvs_2636_2_r, cvs_2636_2_w) AM_BASE(&s2636_2_ram)
AM_RANGE(0x1700, 0x17ff) AM_MIRROR(0x6000) AM_READWRITE(cvs_2636_1_r, cvs_2636_1_w) AM_BASE(&s2636_1_ram)
AM_RANGE(0x1800, 0x1bff) AM_MIRROR(0x6000) AM_READWRITE(cvs_videoram_r, cvs_videoram_w) AM_BASE(&videoram) AM_SIZE(&videoram_size)
AM_RANGE(0x1400, 0x14ff) AM_MIRROR(0x6000) AM_READWRITE(cvs_bullet_ram_or_palette_r, cvs_bullet_ram_or_palette_w) AM_BASE(&cvs_bullet_ram)
AM_RANGE(0x1500, 0x15ff) AM_MIRROR(0x6000) AM_READWRITE(cvs_s2636_3_or_character_ram_r, cvs_s2636_3_or_character_ram_w) AM_BASE(&s2636_3_ram)
AM_RANGE(0x1600, 0x16ff) AM_MIRROR(0x6000) AM_READWRITE(cvs_s2636_2_or_character_ram_r, cvs_s2636_2_or_character_ram_w) AM_BASE(&s2636_2_ram)
AM_RANGE(0x1700, 0x17ff) AM_MIRROR(0x6000) AM_READWRITE(cvs_s2636_1_or_character_ram_r, cvs_s2636_1_or_character_ram_w) AM_BASE(&s2636_1_ram)
AM_RANGE(0x1800, 0x1bff) AM_MIRROR(0x6000) AM_READWRITE(cvs_video_or_color_ram_r, cvs_video_or_color_ram_w) AM_BASE(&cvs_video_ram)
AM_RANGE(0x1c00, 0x1fff) AM_MIRROR(0x6000) AM_RAM
AM_RANGE(0x2000, 0x33ff) AM_ROM
AM_RANGE(0x4000, 0x53ff) AM_ROM
@ -241,14 +218,7 @@ static ADDRESS_MAP_START( cvs_cpu1_program, ADDRESS_SPACE_PROGRAM, 8 )
ADDRESS_MAP_END
static ADDRESS_MAP_START( cvs_cpu1_io, ADDRESS_SPACE_IO, 8 )
AM_RANGE(0x00, 0x00) AM_READ(input_port_0_r)
AM_RANGE(0x02, 0x02) AM_READ(input_port_1_r)
AM_RANGE(0x03, 0x03) AM_READ(input_port_2_r)
AM_RANGE(0x04, 0x04) AM_READ(input_port_3_r)
AM_RANGE(0x06, 0x06) AM_READ(input_port_4_r) // Dip 1
AM_RANGE(0x07, 0x07) AM_READ(input_port_5_r) // Dip 2
AM_RANGE(0x10, 0xff) AM_READ(cvs_character_mode_r) // Programmable Character Settings
AM_RANGE(0x00, 0xff) AM_WRITE(cvs_scroll_w)
AM_RANGE(0x00, 0xff) AM_READWRITE(cvs_input_r, cvs_scroll_w)
AM_RANGE(S2650_DATA_PORT, S2650_DATA_PORT) AM_READWRITE(cvs_collision_clear, cvs_video_fx_w)
AM_RANGE(S2650_CTRL_PORT, S2650_CTRL_PORT) AM_READWRITE(cvs_collision_r, control_port_w)
AM_RANGE(S2650_SENSE_PORT, S2650_SENSE_PORT) AM_READ(input_port_6_r)
@ -337,7 +307,7 @@ static INPUT_PORTS_START( cvs )
INPUT_PORTS_END
static const gfx_layout charlayout8colour =
static const gfx_layout charlayout =
{
8,8, /* 8*8 characters */
256, /* 256 characters */
@ -348,25 +318,11 @@ static const gfx_layout charlayout8colour =
8*8 /* every char takes 8 consecutive bytes */
};
/* S2636 Mappings */
static const gfx_layout s2636_character10 =
{
8,10,
5,
1,
{ 0 },
{ 0,1,2,3,4,5,6,7 },
{ 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8, 8*8, 9*8 },
8*16
};
static GFXDECODE_START( cvs )
GFXDECODE_ENTRY( REGION_GFX1, 0x0000, charlayout8colour, 0, 259 ) /* Rom chars */
GFXDECODE_ENTRY( REGION_GFX1, 0x0000, charlayout8colour, 0, 259 ) /* Ram chars */
GFXDECODE_ENTRY( REGION_GFX1, 0x0000, s2636_character10, 2072, 8 ) /* s2636 #1 */
GFXDECODE_ENTRY( REGION_GFX1, 0x0000, s2636_character10, 2072, 8 ) /* s2636 #2 */
GFXDECODE_ENTRY( REGION_GFX1, 0x0000, s2636_character10, 2072, 8 ) /* s2636 #3 */
GFXDECODE_ENTRY( REGION_GFX1, 0x0000, charlayout, 0, 259 ) /* chars */
GFXDECODE_ENTRY( REGION_GFX1, 0x0000, s2636_gfx_layout, 2072, 8 ) /* s2636 #1 */
GFXDECODE_ENTRY( REGION_GFX1, 0x0000, s2636_gfx_layout, 2072, 8 ) /* s2636 #2 */
GFXDECODE_ENTRY( REGION_GFX1, 0x0000, s2636_gfx_layout, 2072, 8 ) /* s2636 #3 */
GFXDECODE_END
static MACHINE_DRIVER_START( cvs )
@ -429,7 +385,7 @@ ROM_START( cvs )
ROM_LOAD( "82s185.10h", 0x0000, 0x0800, CRC(c205bca6) SHA1(ec9bd220e75f7b067ede6139763ef8aca0fb7a29) )
ROM_LOAD( "82s123.10k", 0x0800, 0x0020, CRC(b5221cec) SHA1(71d9830b33b1a8140b0fe1a2ba8024ba8e6e48e0) )
ROM_REGION( 0x1800, REGION_GFX1, ROMREGION_DISPOSE )
ROM_REGION( 0x1800, REGION_GFX1, 0 )
ROM_FILL(0x000000, 0x1800, 0 )
ROM_END
@ -467,7 +423,7 @@ ROM_START( huncholy )
ROM_REGION( 0x1000, REGION_SOUND1, 0 )
ROM_LOAD( "ho-sp1.bin", 0x0000, 0x1000, CRC(3fd39b1e) SHA1(f5d0b2cfaeda994762403f039a6f7933c5525234) )
ROM_REGION( 0x1800, REGION_GFX1, ROMREGION_DISPOSE )
ROM_REGION( 0x1800, REGION_GFX1, 0 )
ROM_LOAD( "ho-cp1.bin", 0x0000, 0x0800, CRC(c6c73d46) SHA1(63aba92f77105fedf46337b591b074020bec05d0) )
ROM_LOAD( "ho-cp2.bin", 0x0800, 0x0800, CRC(e596371c) SHA1(93a0d0ccdf830ae72d070b03b7e2222f4a737ead) )
ROM_LOAD( "ho-cp3.bin", 0x1000, 0x0800, CRC(11fae1cf) SHA1(5ceabfb1ff1a6f76d1649512f57d7151f5258ecb) )
@ -510,7 +466,7 @@ ROM_START( darkwar )
ROM_REGION( 0x1000, REGION_SOUND1, 0 )
ROM_LOAD( "dw-sp1.bin", 0x0000, 0x1000, CRC(ce815074) SHA1(105f24fb776131b30e35488cca29954298559518) )
ROM_REGION( 0x1800, REGION_GFX1, ROMREGION_DISPOSE )
ROM_REGION( 0x1800, REGION_GFX1, 0 )
ROM_LOAD( "dw-cp1.bin", 0x0000, 0x0800, CRC(7a0f9f3e) SHA1(0aa787923fbb614f15016d99c03093a59a0bfb88) )
ROM_LOAD( "dw-cp2.bin", 0x0800, 0x0800, CRC(232e5120) SHA1(76e4d6d17e8108306761604bd56d6269bfc431e1) )
ROM_LOAD( "dw-cp3.bin", 0x1000, 0x0800, CRC(573e0a17) SHA1(9c7991eac625b287bafb6cf722ffb405a9627e09) )
@ -553,7 +509,7 @@ ROM_START( 8ball )
ROM_REGION( 0x1000, REGION_SOUND1, 0 )
ROM_LOAD( "8b-sp1.bin", 0x0000, 0x0800, CRC(1ee167f3) SHA1(40c876a60832456a27108252ba0b9963f9fe70b0) )
ROM_REGION( 0x1800, REGION_GFX1, ROMREGION_DISPOSE )
ROM_REGION( 0x1800, REGION_GFX1, 0 )
ROM_LOAD( "8b-cp1.bin", 0x0000, 0x0800, CRC(c1f68754) SHA1(481c8e3dc35300f779b7925fa8a54320688dac54) )
ROM_LOAD( "8b-cp2.bin", 0x0800, 0x0800, CRC(6ec1d711) SHA1(768df8e621a7b110a963c93402ee01b1c9009286) )
ROM_LOAD( "8b-cp3.bin", 0x1000, 0x0800, CRC(4a9afce4) SHA1(187e5106aa2d0bdebf6ec9f2b7c2c2f67d47d221) )
@ -596,7 +552,7 @@ ROM_START( 8ball1 )
ROM_REGION( 0x1000, REGION_SOUND1, 0 )
ROM_LOAD( "8b-sp1.bin", 0x0000, 0x0800, CRC(1ee167f3) SHA1(40c876a60832456a27108252ba0b9963f9fe70b0) )
ROM_REGION( 0x1800, REGION_GFX1, ROMREGION_DISPOSE )
ROM_REGION( 0x1800, REGION_GFX1, 0 )
ROM_LOAD( "8a-cp1.bin", 0x0000, 0x0800, CRC(d9b36c16) SHA1(dbb496102fa2344f19b5d9a3eecdb29c433e4c08) )
ROM_LOAD( "8a-cp2.bin", 0x0800, 0x0800, CRC(6f66f0ff) SHA1(1e91474973356e97f89b4d9093565747a8331f50) )
ROM_LOAD( "8a-cp3.bin", 0x1000, 0x0800, CRC(baee8b17) SHA1(9f86f1d5903aeead17cc75dac8a2b892bb375dad) )
@ -639,7 +595,7 @@ ROM_START( hunchbak )
ROM_REGION( 0x1000, REGION_SOUND1, 0 )
ROM_LOAD( "hb-sp1.bin", 0x0000, 0x0800, CRC(ed1cd201) SHA1(6cc3842dda1bfddc06ffb436c55d14276286bd67) )
ROM_REGION( 0x1800, REGION_GFX1, ROMREGION_DISPOSE )
ROM_REGION( 0x1800, REGION_GFX1, 0 )
ROM_LOAD( "hb-cp1.bin", 0x0000, 0x0800, CRC(f256b047) SHA1(02d79882bad37ffdd58ef478e2658a1369c32ebc) )
ROM_LOAD( "hb-cp2.bin", 0x0800, 0x0800, CRC(b870c64f) SHA1(ce4f8de87568782ce02bba754edff85df7f5c393) )
ROM_LOAD( "hb-cp3.bin", 0x1000, 0x0800, CRC(9a7dab88) SHA1(cd39a9d4f982a7f49c478db1408d7e07335f2ddc) )
@ -682,7 +638,7 @@ ROM_START( hunchbka )
ROM_REGION( 0x1000, REGION_SOUND1, 0 )
ROM_LOAD( "hb-sp1.bin", 0x0000, 0x0800, CRC(ed1cd201) SHA1(6cc3842dda1bfddc06ffb436c55d14276286bd67) )
ROM_REGION( 0x1800, REGION_GFX1, ROMREGION_DISPOSE )
ROM_REGION( 0x1800, REGION_GFX1, 0 )
ROM_LOAD( "hb-cp1.bin", 0x0000, 0x0800, CRC(f256b047) SHA1(02d79882bad37ffdd58ef478e2658a1369c32ebc) )
ROM_LOAD( "hb-cp2.bin", 0x0800, 0x0800, CRC(b870c64f) SHA1(ce4f8de87568782ce02bba754edff85df7f5c393) )
ROM_LOAD( "hb-cp3.bin", 0x1000, 0x0800, CRC(9a7dab88) SHA1(cd39a9d4f982a7f49c478db1408d7e07335f2ddc) )
@ -725,7 +681,7 @@ ROM_START( wallst )
ROM_REGION( 0x1000, REGION_SOUND1, 0 )
ROM_LOAD( "ws-sp1.bin", 0x0000, 0x0800, CRC(84b72637) SHA1(9c5834320f39545403839fb7088c37177a6c8861) )
ROM_REGION( 0x1800, REGION_GFX1, ROMREGION_DISPOSE )
ROM_REGION( 0x1800, REGION_GFX1, 0 )
ROM_LOAD( "ws-cp1.bin", 0x0000, 0x0800, CRC(5aca11df) SHA1(5ef815b5b09445515ff8b958c4ea29f1a221cee1) )
ROM_LOAD( "ws-cp2.bin", 0x0800, 0x0800, CRC(ca530d85) SHA1(e5a78667c3583d06d8387848323b11e4a91091ec) )
ROM_LOAD( "ws-cp3.bin", 0x1000, 0x0800, CRC(1e0225d6) SHA1(410795046c64c24de6711b167315308808b54291) )
@ -768,7 +724,7 @@ ROM_START( dazzler )
ROM_REGION( 0x1000, REGION_SOUND1, 0 )
ROM_LOAD( "dz-sp1.bin", 0x0000, 0x0800, CRC(25da1fc1) SHA1(c14717ec3399ce7dc47a9d42c8ac8f585db770e9) )
ROM_REGION( 0x1800, REGION_GFX1, ROMREGION_DISPOSE )
ROM_REGION( 0x1800, REGION_GFX1, 0 )
ROM_LOAD( "dz-cp1.bin", 0x0000, 0x0800, CRC(0a8a9034) SHA1(9df3d4f387bd5ce3d3580ba678aeda1b65634ac2) )
ROM_LOAD( "dz-cp2.bin", 0x0800, 0x0800, CRC(3868dd82) SHA1(844584c5a80fb8f1797b4aa4e22024e75726293d) )
ROM_LOAD( "dz-cp3.bin", 0x1000, 0x0800, CRC(755d9ed2) SHA1(a7165a1d12a5a81d8bb941d8ad073e2097c90beb) )
@ -811,7 +767,7 @@ ROM_START( radarzon )
ROM_REGION( 0x1000, REGION_SOUND1, 0 )
ROM_LOAD( "rd-sp1.bin", 0x0000, 0x0800, CRC(43b17734) SHA1(59960f0c48ed24cedb4b4655f97f6f1fdac4445e) )
ROM_REGION( 0x1800, REGION_GFX1, ROMREGION_DISPOSE )
ROM_REGION( 0x1800, REGION_GFX1, 0 )
ROM_LOAD( "rd-cp1.bin", 0x0000, 0x0800, CRC(ed601677) SHA1(efe2b6033f319603ee80ed4ba66d3b3607537b13) )
ROM_LOAD( "rd-cp2.bin", 0x0800, 0x0800, CRC(35e317ff) SHA1(458550b431ec66006e2966d86a2286905c0495ed) )
ROM_LOAD( "rd-cp3.bin", 0x1000, 0x0800, CRC(90f2c43f) SHA1(406215217f6f20c1a78f31b2ae3c0a97391e3371) )
@ -854,7 +810,7 @@ ROM_START( radarzn1 )
ROM_REGION( 0x1000, REGION_SOUND1, 0 )
ROM_LOAD( "rd-sp1.bin", 0x0000, 0x0800, CRC(43b17734) SHA1(59960f0c48ed24cedb4b4655f97f6f1fdac4445e) )
ROM_REGION( 0x1800, REGION_GFX1, ROMREGION_DISPOSE )
ROM_REGION( 0x1800, REGION_GFX1, 0 )
ROM_LOAD( "rd-cp1.bin", 0x0000, 0x0800, CRC(ed601677) SHA1(efe2b6033f319603ee80ed4ba66d3b3607537b13) )
ROM_LOAD( "rd-cp2.bin", 0x0800, 0x0800, CRC(35e317ff) SHA1(458550b431ec66006e2966d86a2286905c0495ed) )
ROM_LOAD( "rd-cp3.bin", 0x1000, 0x0800, CRC(90f2c43f) SHA1(406215217f6f20c1a78f31b2ae3c0a97391e3371) )
@ -897,7 +853,7 @@ ROM_START( radarznt )
ROM_REGION( 0x1000, REGION_SOUND1, 0 )
ROM_LOAD( "rd-sp1.bin", 0x0000, 0x0800, CRC(43b17734) SHA1(59960f0c48ed24cedb4b4655f97f6f1fdac4445e) )
ROM_REGION( 0x1800, REGION_GFX1, ROMREGION_DISPOSE )
ROM_REGION( 0x1800, REGION_GFX1, 0 )
ROM_LOAD( "rd-cp1.bin", 0x0000, 0x0800, CRC(ed601677) SHA1(efe2b6033f319603ee80ed4ba66d3b3607537b13) )
ROM_LOAD( "rd-cp2.bin", 0x0800, 0x0800, CRC(35e317ff) SHA1(458550b431ec66006e2966d86a2286905c0495ed) )
ROM_LOAD( "rd-cp3.bin", 0x1000, 0x0800, CRC(90f2c43f) SHA1(406215217f6f20c1a78f31b2ae3c0a97391e3371) )
@ -940,7 +896,7 @@ ROM_START( outline )
ROM_REGION( 0x1000, REGION_SOUND1, 0 )
ROM_LOAD( "ot-sp1.bin", 0x0000, 0x1000, CRC(fa21422a) SHA1(a75d13455c65e5a77db02fc87f0c112e329d0d6d) )
ROM_REGION( 0x1800, REGION_GFX1, ROMREGION_DISPOSE )
ROM_REGION( 0x1800, REGION_GFX1, 0 )
ROM_LOAD( "rd-cp1.bin", 0x0000, 0x0800, CRC(ed601677) SHA1(efe2b6033f319603ee80ed4ba66d3b3607537b13) )
ROM_LOAD( "rd-cp2.bin", 0x0800, 0x0800, CRC(35e317ff) SHA1(458550b431ec66006e2966d86a2286905c0495ed) )
ROM_LOAD( "rd-cp3.bin", 0x1000, 0x0800, CRC(90f2c43f) SHA1(406215217f6f20c1a78f31b2ae3c0a97391e3371) )
@ -983,7 +939,7 @@ ROM_START( goldbug )
ROM_REGION( 0x1000, REGION_SOUND1, 0 )
ROM_LOAD( "gb-sp1.bin", 0x0000, 0x0800, CRC(5d0205c3) SHA1(578937058d56e5c9fba8a2204ddbb59a6d23dec7) )
ROM_REGION( 0x1800, REGION_GFX1, ROMREGION_DISPOSE )
ROM_REGION( 0x1800, REGION_GFX1, 0 )
ROM_LOAD( "gb-cp1.bin", 0x0000, 0x0800, CRC(80e1ad5a) SHA1(0a577b0faffd9d6807c39175ce213f017a5cc7f8) )
ROM_LOAD( "gb-cp2.bin", 0x0800, 0x0800, CRC(0a288b29) SHA1(0c6471a3517805a5c873857ff21ca94dfe91c24e) )
ROM_LOAD( "gb-cp3.bin", 0x1000, 0x0800, CRC(e5bcf8cf) SHA1(7f53b8ee6f87e6c8761d2200e8194a7d16d8c7ac) )
@ -1026,7 +982,7 @@ ROM_START( diggerc )
ROM_REGION( 0x1000, REGION_SOUND1, 0 )
ROM_LOAD( "dig-sp1.bin", 0x0000, 0x0800, CRC(db526ee1) SHA1(afe319e64350b0c54b72394294a6369c885fdb7f) )
ROM_REGION( 0x1800, REGION_GFX1, ROMREGION_DISPOSE )
ROM_REGION( 0x1800, REGION_GFX1, 0 )
ROM_LOAD( "dig-cp1.bin", 0x0000, 0x0800, CRC(ca30fb97) SHA1(148f3a6f20b1f256a73e7a1992262116d77cc0a8) )
ROM_LOAD( "dig-cp2.bin", 0x0800, 0x0800, CRC(bed2334c) SHA1(c93902d01174e13fb9265194e5e44f67b38c5970) )
ROM_LOAD( "dig-cp3.bin", 0x1000, 0x0800, CRC(46db9b65) SHA1(1c655b4611ab182b6e4a3cdd3ef930e0d4dad0d9) )
@ -1069,7 +1025,7 @@ ROM_START( superbik )
ROM_REGION( 0x1000, REGION_SOUND1, 0 )
ROM_LOAD( "sb-sp1.bin", 0x0000, 0x0800, CRC(0aeb9ccd) SHA1(e7123eed21e4e758bbe1cebfd5aad44a5de45c27) )
ROM_REGION( 0x1800, REGION_GFX1, ROMREGION_DISPOSE )
ROM_REGION( 0x1800, REGION_GFX1, 0 )
ROM_LOAD( "sb-cp1.bin", 0x0000, 0x0800, CRC(03ba7760) SHA1(4ed252e2c4ec7cea2199524f7c35a1dc7c44f8d8) )
ROM_LOAD( "sb-cp2.bin", 0x0800, 0x0800, CRC(04de69f2) SHA1(3ef3b3c159d47230622b6cc45baad8737bd93a90) )
ROM_LOAD( "sb-cp3.bin", 0x1000, 0x0800, CRC(bb7d0b9a) SHA1(94c72d6961204be9cab351ac854ac9c69b51e79a) )
@ -1112,7 +1068,7 @@ ROM_START( hero )
ROM_REGION( 0x1000, REGION_SOUND1, 0 )
ROM_LOAD( "hr-sp1.bin", 0x0000, 0x0800, CRC(a5c33cb1) SHA1(447ffb193b0dc4985bae5d8c214a893afd08664b) )
ROM_REGION( 0x1800, REGION_GFX1, ROMREGION_DISPOSE )
ROM_REGION( 0x1800, REGION_GFX1, 0 )
ROM_LOAD( "hr-cp1.bin", 0x0000, 0x0800, CRC(2d201496) SHA1(f195aa1b231a0e1752c7da824a10321f0527f8c9) )
ROM_LOAD( "hr-cp2.bin", 0x0800, 0x0800, CRC(21b61fe3) SHA1(31882003f0557ffc4ec38ae6ee07b5d294b4162c) )
ROM_LOAD( "hr-cp3.bin", 0x1000, 0x0800, CRC(9c8e3f9e) SHA1(9d949a4d12b45da12b434677670b2b109568564a) )
@ -1155,7 +1111,7 @@ ROM_START( logger )
ROM_REGION( 0x1000, REGION_SOUND1, 0 )
ROM_LOAD( "lg-sp1.bin", 0x0000, 0x0800, CRC(74f67815) SHA1(6a26a16c27a7e4d58b611e5127115005a60cff91) )
ROM_REGION( 0x1800, REGION_GFX1, ROMREGION_DISPOSE )
ROM_REGION( 0x1800, REGION_GFX1, 0 )
ROM_LOAD( "lg-cp1.bin", 0x0000, 0x0800, CRC(e4ede80e) SHA1(62f2bc78106a057b6a8420d40421908df609bf29) )
ROM_LOAD( "lg-cp2.bin", 0x0800, 0x0800, CRC(d3de8e5b) SHA1(f95320e001869c42e51195d9cc11e4f2555e153f) )
ROM_LOAD( "lg-cp3.bin", 0x1000, 0x0800, CRC(9b8d1031) SHA1(87ef12aeae80cc0f240dead651c6222848f8dccc) )
@ -1198,7 +1154,7 @@ ROM_START( cosmos )
ROM_REGION( 0x1000, REGION_SOUND1, 0 )
ROM_LOAD( "cs-sp1.bin", 0x0000, 0x1000, CRC(3c7fe86d) SHA1(9ae0b63b231a7092820650a196cde60588bc6b58) )
ROM_REGION( 0x1800, REGION_GFX1, ROMREGION_DISPOSE )
ROM_REGION( 0x1800, REGION_GFX1, 0 )
ROM_LOAD( "cs-cp1.bin", 0x0000, 0x0800, CRC(6a48c898) SHA1(c27f7bcdb2fe042ec52d1b9b4b9a4e47c288862d) )
ROM_LOAD( "cs-cp2.bin", 0x0800, 0x0800, CRC(db0dfd8c) SHA1(f2b0dd43f0e514fdae54e4066606187f45b98e38) )
ROM_LOAD( "cs-cp3.bin", 0x1000, 0x0800, CRC(01eee875) SHA1(6c41d716b5795f085229d855518862fb85f395a4) )
@ -1241,7 +1197,7 @@ ROM_START( heartatk )
ROM_REGION( 0x1000, REGION_SOUND1, 0 )
ROM_LOAD( "ha-sp1.bin", 0x0000, 0x1000, CRC(fa21422a) SHA1(a75d13455c65e5a77db02fc87f0c112e329d0d6d) )
ROM_REGION( 0x1800, REGION_GFX1, ROMREGION_DISPOSE )
ROM_REGION( 0x1800, REGION_GFX1, 0 )
ROM_LOAD( "ha-cp1.bin", 0x0000, 0x0800, CRC(2d0f6d13) SHA1(55e45eaf1bf24a7a78a2f34ffc0d99a4c191d138) )
ROM_LOAD( "ha-cp2.bin", 0x0800, 0x0800, CRC(7f5671bd) SHA1(7f4ae92a96c5a847c113f6f7e8d67d3e5ee0bcb0) )
ROM_LOAD( "ha-cp3.bin", 0x1000, 0x0800, CRC(35b05ab4) SHA1(f336eb0c674c3d52e84be0f37b70953cce6112dc) )
@ -1284,7 +1240,7 @@ ROM_START( spacefrt )
ROM_REGION( 0x1000, REGION_SOUND1, 0 )
ROM_LOAD( "sf-sp1.bin", 0x0000, 0x1000, CRC(c5628d30) SHA1(d29a5852a1762cbd5f3eba29ae2bf49b3a26f894) )
ROM_REGION( 0x1800, REGION_GFX1, ROMREGION_DISPOSE )
ROM_REGION( 0x1800, REGION_GFX1, 0 )
ROM_LOAD( "sf-cp1.bin", 0x0000, 0x0800, CRC(da194a68) SHA1(4215267e91644cf1e1f32f898bc9562bfba711f3) )
ROM_LOAD( "sf-cp2.bin", 0x0800, 0x0800, CRC(b96977c7) SHA1(8f0fab044f16787bce83562e2b22d962d0a2c209) )
ROM_LOAD( "sf-cp3.bin", 0x1000, 0x0800, CRC(f5d67b9a) SHA1(a492b41c53b1f28ac5f70969e5f06afa948c1a7d) )
@ -1327,7 +1283,7 @@ ROM_START( raiders )
ROM_REGION( 0x0800, REGION_SOUND1, 0 )
ROM_LOAD( "raidr1-8.bin", 0x0000, 0x0800, CRC(b6b90d2e) SHA1(a966fa208b72aec358b7fb277e603e47b6984aa7) )
ROM_REGION( 0x1800, REGION_GFX1, ROMREGION_DISPOSE )
ROM_REGION( 0x1800, REGION_GFX1, 0 )
ROM_LOAD( "raid4-11.bin", 0x0000, 0x0800, CRC(5eb7143b) SHA1(a19e803c15593b37ae2e61789f6e16f319620a37) )
ROM_LOAD( "raid4-10.bin", 0x0800, 0x0800, CRC(391948a4) SHA1(7e20ad4f7e5bf7ad5dcb08ba6475313e2b8b1f03) )
ROM_LOAD( "raid4-9b.bin", 0x1000, 0x0800, CRC(fecfde80) SHA1(23ea63080b8292fb00a743743cdff1a7ad0a8c6d) )

View File

@ -469,17 +469,6 @@ static const gfx_layout charlayout =
8*8
};
static const gfx_layout s2636_character10 =
{
8,10,
5,
1,
{ 0 },
{ 0,1,2,3,4,5,6,7 },
{ 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8, 8*8, 9*8 },
8*16
};
static const gfx_layout sprites_layout =
{
32,32,
@ -498,11 +487,11 @@ static const gfx_layout sprites_layout =
};
static GFXDECODE_START( laserbat )
GFXDECODE_ENTRY( REGION_GFX1, 0x0000, charlayout, 0, 256 ) /* Rom chars */
GFXDECODE_ENTRY( REGION_CPU1, 0x1500, s2636_character10, 0, 8 ) /* s2636 #1 */
GFXDECODE_ENTRY( REGION_CPU1, 0x1600, s2636_character10, 0, 8 ) /* s2636 #2 */
GFXDECODE_ENTRY( REGION_CPU1, 0x1700, s2636_character10, 0, 8 ) /* s2636 #3 */
GFXDECODE_ENTRY( REGION_GFX2, 0x0000, sprites_layout, 0, 8 ) /* Sprites */
GFXDECODE_ENTRY( REGION_GFX1, 0x0000, charlayout, 0, 256 ) /* Rom chars */
GFXDECODE_ENTRY( REGION_CPU1, 0x1500, s2636_gfx_layout, 0, 8 ) /* s2636 #1 */
GFXDECODE_ENTRY( REGION_CPU1, 0x1600, s2636_gfx_layout, 0, 8 ) /* s2636 #2 */
GFXDECODE_ENTRY( REGION_CPU1, 0x1700, s2636_gfx_layout, 0, 8 ) /* s2636 #3 */
GFXDECODE_ENTRY( REGION_GFX2, 0x0000, sprites_layout, 0, 8 ) /* Sprites */
GFXDECODE_END
static TILE_GET_INFO( get_tile_info )

View File

@ -324,17 +324,6 @@ static const gfx_layout charlayout =
// 8*8
};
static const gfx_layout s2636_character10 =
{
8,10,
5,
1,
{ 0 },
{ 0,1,2,3,4,5,6,7 },
{ 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8, 8*8, 9*8 },
8*16
};
static const gfx_layout saa5050_charlayout =
{
6, 10,
@ -373,12 +362,12 @@ static const gfx_layout saa5050_lolayout =
//add s2636 decodes here (i.e. from zac2650) and maybe re-arrange them
static GFXDECODE_START( malzak )
GFXDECODE_ENTRY( REGION_GFX1, 0, charlayout, 0, 16 )
GFXDECODE_ENTRY( REGION_CPU1, 0x0000, s2636_character10, 0, 8 ) /* s2636 #1 */
GFXDECODE_ENTRY( REGION_CPU1, 0x0000, s2636_character10, 0, 8 ) /* s2636 #2 */
GFXDECODE_ENTRY( REGION_GFX2, 0x0000, saa5050_charlayout, 0, 128)
GFXDECODE_ENTRY( REGION_GFX2, 0x0000, saa5050_hilayout, 0, 128)
GFXDECODE_ENTRY( REGION_GFX2, 0x0000, saa5050_lolayout, 0, 128)
GFXDECODE_ENTRY( REGION_GFX1, 0x0000, charlayout, 0, 16 )
GFXDECODE_ENTRY( REGION_CPU1, 0x0000, s2636_gfx_layout, 0, 8 ) /* s2636 #1 */
GFXDECODE_ENTRY( REGION_CPU1, 0x0000, s2636_gfx_layout, 0, 8 ) /* s2636 #2 */
GFXDECODE_ENTRY( REGION_GFX2, 0x0000, saa5050_charlayout, 0, 128 )
GFXDECODE_ENTRY( REGION_GFX2, 0x0000, saa5050_hilayout, 0, 128 )
GFXDECODE_ENTRY( REGION_GFX2, 0x0000, saa5050_lolayout, 0, 128 )
GFXDECODE_END

View File

@ -58,16 +58,17 @@ Sound Board 1b11107
************************************************************************/
#include "driver.h"
#include "cvs.h"
#include "cpu/s2650/s2650.h"
#include "cpu/i8039/i8039.h"
#include "sound/dac.h"
#include "video/s2636.h"
PALETTE_INIT( quasar );
VIDEO_UPDATE( quasar );
VIDEO_START( quasar );
extern UINT8 *cvs_bullet_ram;
extern UINT8 *quasar_effectram;
extern int quasar_effectcontrol;
@ -76,23 +77,6 @@ static int page = 0;
static int IOpage = 8;
WRITE8_HANDLER( cvs_videoram_w );
WRITE8_HANDLER( cvs_bullet_w );
WRITE8_HANDLER( cvs_2636_1_w );
WRITE8_HANDLER( cvs_2636_2_w );
WRITE8_HANDLER( cvs_2636_3_w );
WRITE8_HANDLER( cvs_scroll_w );
WRITE8_HANDLER( cvs_video_fx_w );
READ8_HANDLER( cvs_collision_r );
READ8_HANDLER( cvs_collision_clear );
READ8_HANDLER( cvs_videoram_r );
READ8_HANDLER( cvs_bullet_r );
READ8_HANDLER( cvs_2636_1_r );
READ8_HANDLER( cvs_2636_2_r );
READ8_HANDLER( cvs_2636_3_r );
READ8_HANDLER( cvs_character_mode_r );
/************************************************************************
Quasar memory layout
@ -145,15 +129,12 @@ static WRITE8_HANDLER( page_B_w )
static WRITE8_HANDLER( quasar_video_w )
{
if (page == 0) videoram_w(offset,data);
if (page == 1) colorram_w(offset,(data & 7)); // 3 bits of ram only - 3 x 2102
if (page == 2)
switch (page)
{
quasar_effectram[offset] = data;
}
if (page == 3)
{
quasar_effectcontrol = data;
case 0: cvs_video_ram[offset] = data; break;
case 1: cvs_color_ram[offset] = data & 7; break; // 3 bits of ram only - 3 x 2102
case 2: quasar_effectram[offset] = data; break;
case 3: quasar_effectcontrol = data; break;
}
}
@ -216,11 +197,11 @@ static WRITE8_HANDLER( Quasar_DAC_w )
static ADDRESS_MAP_START( quasar, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0x13ff) AM_ROM
AM_RANGE(0x1400, 0x14ff) AM_MIRROR(0x6000) AM_READWRITE(cvs_bullet_r, quasar_bullet_w) AM_BASE(&cvs_bullet_ram)
AM_RANGE(0x1500, 0x15ff) AM_MIRROR(0x6000) AM_READWRITE(cvs_2636_1_r, cvs_2636_1_w) AM_BASE(&s2636_1_ram)
AM_RANGE(0x1600, 0x16ff) AM_MIRROR(0x6000) AM_READWRITE(cvs_2636_2_r, cvs_2636_2_w) AM_BASE(&s2636_2_ram)
AM_RANGE(0x1700, 0x17ff) AM_MIRROR(0x6000) AM_READWRITE(cvs_2636_3_r, cvs_2636_3_w) AM_BASE(&s2636_3_ram)
AM_RANGE(0x1800, 0x1bff) AM_MIRROR(0x6000) AM_READWRITE(MRA8_RAM /*quasar_video_r*/, quasar_video_w) AM_BASE(&videoram) AM_SIZE(&videoram_size) //0 = background, 1 = colour, 2 = effect, 3 = port blank
AM_RANGE(0x1400, 0x14ff) AM_MIRROR(0x6000) AM_READWRITE(cvs_bullet_ram_or_palette_r, quasar_bullet_w) AM_BASE(&cvs_bullet_ram)
AM_RANGE(0x1500, 0x15ff) AM_MIRROR(0x6000) AM_READWRITE(cvs_s2636_1_or_character_ram_r, cvs_s2636_1_or_character_ram_w) AM_BASE(&s2636_1_ram)
AM_RANGE(0x1600, 0x16ff) AM_MIRROR(0x6000) AM_READWRITE(cvs_s2636_2_or_character_ram_r, cvs_s2636_2_or_character_ram_w) AM_BASE(&s2636_2_ram)
AM_RANGE(0x1700, 0x17ff) AM_MIRROR(0x6000) AM_READWRITE(cvs_s2636_3_or_character_ram_r, cvs_s2636_3_or_character_ram_w) AM_BASE(&s2636_3_ram)
AM_RANGE(0x1800, 0x1bff) AM_MIRROR(0x6000) AM_READWRITE(cvs_video_or_color_ram_r, quasar_video_w) AM_BASE(&cvs_video_ram)
AM_RANGE(0x1c00, 0x1fff) AM_MIRROR(0x6000) AM_RAM
AM_RANGE(0x2000, 0x33ff) AM_ROM
AM_RANGE(0x4000, 0x53ff) AM_ROM
@ -382,34 +363,11 @@ static const gfx_layout charlayout =
/* S2636 Mappings */
static const gfx_layout s2636_character10 =
{
8,10,
5,
1,
{ 0 },
{ 0,1,2,3,4,5,6,7 },
{ 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8, 8*8, 9*8 },
8*16
};
static const gfx_layout charlayout8colour =
{
8,8, /* 8*8 characters */
256, /* 256 characters */
3, /* 3 bits per pixel */
{ 0, 0x800*8, 0x1000*8 }, /* the bitplanes are separated */
{ 0, 1, 2, 3, 4, 5, 6, 7 },
{ 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 },
8*8 /* every char takes 8 consecutive bytes */
};
static GFXDECODE_START( quasar )
GFXDECODE_ENTRY( REGION_GFX1, 0x0000, charlayout, 0, 256) /* Rom chars */
GFXDECODE_ENTRY( REGION_GFX1, 0x0000, charlayout8colour, 0, 259 ) /* Ram chars (NOT USED) */
GFXDECODE_ENTRY( REGION_GFX1, 0x0000, s2636_character10, 2072, 8 ) /* s2636 #1 */
GFXDECODE_ENTRY( REGION_GFX1, 0x0000, s2636_character10, 2072, 8 ) /* s2636 #2 */
GFXDECODE_ENTRY( REGION_GFX1, 0x0000, s2636_character10, 2072, 8 ) /* s2636 #3 */
GFXDECODE_ENTRY( REGION_GFX1, 0x0000, charlayout, 0, 256 ) /* Rom chars */
GFXDECODE_ENTRY( REGION_GFX1, 0x0000, s2636_gfx_layout, 2072, 8 ) /* s2636 #1 */
GFXDECODE_ENTRY( REGION_GFX1, 0x0000, s2636_gfx_layout, 2072, 8 ) /* s2636 #2 */
GFXDECODE_ENTRY( REGION_GFX1, 0x0000, s2636_gfx_layout, 2072, 8 ) /* s2636 #3 */
GFXDECODE_END
static INTERRUPT_GEN( quasar_interrupt )

32
src/mame/includes/cvs.h Normal file
View File

@ -0,0 +1,32 @@
extern UINT8 *cvs_color_ram;
extern UINT8 *cvs_video_ram;
extern UINT8 *cvs_bullet_ram;
extern mame_bitmap *cvs_collision_bitmap;
extern mame_bitmap *cvs_collision_background;
extern int cvs_collision_register;
INTERRUPT_GEN( cvs_interrupt );
PALETTE_INIT( cvs );
VIDEO_UPDATE( cvs );
VIDEO_START( cvs );
READ8_HANDLER( cvs_video_or_color_ram_r );
WRITE8_HANDLER( cvs_video_or_color_ram_w );
READ8_HANDLER( cvs_bullet_ram_or_palette_r );
WRITE8_HANDLER( cvs_bullet_ram_or_palette_w );
READ8_HANDLER( cvs_s2636_1_or_character_ram_r );
WRITE8_HANDLER( cvs_s2636_1_or_character_ram_w );
READ8_HANDLER( cvs_s2636_2_or_character_ram_r );
WRITE8_HANDLER( cvs_s2636_2_or_character_ram_w );
READ8_HANDLER( cvs_s2636_3_or_character_ram_r );
WRITE8_HANDLER( cvs_s2636_3_or_character_ram_w );
WRITE8_HANDLER( cvs_scroll_w );
WRITE8_HANDLER( cvs_video_fx_w );
READ8_HANDLER( cvs_collision_r );
READ8_HANDLER( cvs_collision_clear );
READ8_HANDLER( cvs_input_r );

View File

@ -13,6 +13,7 @@
#define MAX_STARS 250
#define STARS_COLOR_BASE 16
#ifdef LSB_FIRST
#define BL0 0
#define BL1 1
@ -29,32 +30,35 @@
#define WL1 0
#endif
struct star
{
int x,y,code;
};
static struct star stars[MAX_STARS];
static int total_stars;
static int scroll[8];
static int stars_on=0;
static int character_mode=0;
static int character_page=0;
static int scroll_reg = 0;
static int stars_scroll=0;
static UINT8 *character_1_ram;
static UINT8 *character_2_ram;
static UINT8 *character_3_ram;
UINT8 *cvs_color_ram;
UINT8 *cvs_video_ram;
UINT8 *cvs_bullet_ram;
static UINT8 *palette_ram;
static UINT8 *character_ram;
static struct star stars[MAX_STARS];
static int total_stars;
static int stars_on;
static UINT8 character_mode;
static UINT16 character_ram_page;
static UINT8 scroll_reg;
static int stars_scroll;
static mame_bitmap *background_bitmap;
mame_bitmap *cvs_collision_bitmap;
mame_bitmap *cvs_collision_background;
static mame_bitmap *scrolled_background;
int cvs_collision_register=0;
int cvs_collision_register;
static const int ModeOffset[4] = {223,191,255,127};
/******************************************************
* Convert Colour prom to format for Mame Colour Map *
@ -79,7 +83,7 @@ PALETTE_INIT( cvs )
{
map = color_prom[(col * 256) + attr];
/* bits 1 and 3 are swopped over */
/* bits 0 and 2 are swapped */
COLOR(0,attr*8 + col) = ((map & 1) << 2) + (map & 2) + ((map & 4) >> 2);
}
@ -102,59 +106,56 @@ PALETTE_INIT( cvs )
COLOR(0,map*2 + 2073) = 8 + map;
}
/* Initialise Dirty Character Array */
character_1_ram = auto_malloc(0x2000);
character_2_ram = character_1_ram + 0x800;
character_3_ram = character_2_ram + 0x800;
memset(character_1_ram, 0, 1024);
memset(character_2_ram, 0, 1024);
memset(character_3_ram, 0, 1024);
/* Set Sprite chip offsets */
/* set the sprite chip offsets */
s2636_x_offset = -26;
s2636_y_offset = 3;
/* Set Scroll fixed areas */
scroll[0]=0;
scroll[6]=0;
scroll[7]=0;
}
WRITE8_HANDLER( cvs_video_fx_w )
{
logerror("%4x : Data Port = %2x\n",activecpu_get_pc(),data);
if (data & 0xce)
logerror("%4x : Unimplemented CVS video fx = %2x\n",activecpu_get_pc(),data);
/* Unimplemented */
stars_on = data & 0x01;
if(data & 2) logerror(" SHADE BRIGHTER TO RIGHT\n");
if(data & 4) logerror(" SCREEN ROTATE\n");
if(data & 8) logerror(" SHADE BRIGHTER TO LEFT\n");
if(data & 64) logerror(" SHADE BRIGHTER TO BOTTOM\n");
if(data & 128) logerror(" SHADE BRIGHTER TO TOP\n");
if (data & 0x02) logerror(" SHADE BRIGHTER TO RIGHT\n");
if (data & 0x04) logerror(" SCREEN ROTATE\n");
if (data & 0x08) logerror(" SHADE BRIGHTER TO LEFT\n");
/* Implemented */
set_led_status(1, data & 0x10); /* lamp 1 */
set_led_status(2, data & 0x20); /* lamp 2 */
stars_on = data & 1;
set_led_status(1,data & 16); /* Lamp 1 */
set_led_status(2,data & 32); /* Lamp 2 */
if (data & 0x40) logerror(" SHADE BRIGHTER TO BOTTOM\n");
if (data & 0x80) logerror(" SHADE BRIGHTER TO TOP\n");
}
READ8_HANDLER( cvs_character_mode_r )
READ8_HANDLER( cvs_input_r )
{
/* Really a write - uses address info */
UINT8 ret;
int value = offset + 0x10;
int newmode = (value >> 4) & 3;
/* the upper 4 bits of the address is used to select the tile banking attributes */
character_mode = (offset >> 4) & 0x03;
character_ram_page = (offset << 2) & 0x300;
character_mode = newmode;
character_page = (value << 2) & 0x300;
/* the lower 4 (or 3?) bits select the port to read */
switch (offset & 0x0f) /* might be 0x07 */
{
case 0x00: ret = input_port_0_r(0); break;
case 0x02: ret = input_port_1_r(0); break;
case 0x03: ret = input_port_2_r(0); break;
case 0x04: ret = input_port_3_r(0); break;
case 0x06: ret = input_port_4_r(0); break;
case 0x07: ret = input_port_5_r(0); break;
default: ret = 0x00; break;
}
return 0;
return ret;
}
READ8_HANDLER( cvs_collision_r )
{
return cvs_collision_register;
@ -162,190 +163,115 @@ READ8_HANDLER( cvs_collision_r )
READ8_HANDLER( cvs_collision_clear )
{
cvs_collision_register=0;
cvs_collision_register = 0;
return 0;
}
WRITE8_HANDLER( cvs_scroll_w )
{
scroll_reg = 255 - data;
scroll[1]=scroll_reg;
scroll[2]=scroll_reg;
scroll[3]=scroll_reg;
scroll[4]=scroll_reg;
scroll[5]=scroll_reg;
}
WRITE8_HANDLER( cvs_videoram_w )
READ8_HANDLER( cvs_video_or_color_ram_r )
{
if(!activecpu_get_reg(S2650_FO))
{
// Colour Map
colorram_w(offset,data);
}
else
{
// Data
videoram_w(offset,data);
}
if (!activecpu_get_reg(S2650_FO))
return cvs_color_ram[offset];
else
return cvs_video_ram[offset];
}
READ8_HANDLER( cvs_videoram_r )
WRITE8_HANDLER( cvs_video_or_color_ram_w )
{
if(!activecpu_get_reg(S2650_FO))
{
// Colour Map
return colorram[offset];
}
else
{
// Data
return videoram[offset];
}
if (!activecpu_get_reg(S2650_FO))
cvs_color_ram[offset] = data;
else
cvs_video_ram[offset] = data;
}
WRITE8_HANDLER( cvs_bullet_w )
READ8_HANDLER( cvs_bullet_ram_or_palette_r )
{
if(!activecpu_get_reg(S2650_FO))
{
// Bullet Ram
cvs_bullet_ram[offset] = data;
}
else
{
// Pallette Ram - Inverted ?
offset &= 0x0f;
data ^= 0xff;
paletteram[offset] = data;
palette_set_color_rgb(Machine, offset, pal2bit(data >> 0), pal3bit(data >> 2), pal3bit(data >> 5));
}
if (!activecpu_get_reg(S2650_FO))
return cvs_bullet_ram[offset];
else
return palette_ram[offset & 0x0f];
}
READ8_HANDLER( cvs_bullet_r )
WRITE8_HANDLER( cvs_bullet_ram_or_palette_w )
{
if(!activecpu_get_reg(S2650_FO))
{
// Bullet Ram
return cvs_bullet_ram[offset];
}
else
{
// Pallette Ram
return (paletteram[offset] ^ 0xff);
}
if (!activecpu_get_reg(S2650_FO))
cvs_bullet_ram[offset] = data;
else
palette_ram[offset & 0x0f] = data;
}
WRITE8_HANDLER( cvs_2636_1_w )
READ8_HANDLER( cvs_s2636_1_or_character_ram_r )
{
if(!activecpu_get_reg(S2650_FO))
{
// First 2636
s2636_1_ram[offset] = data;
}
else
{
// Character Ram 1
character_1_ram[character_page + offset] = data;
}
if (!activecpu_get_reg(S2650_FO))
return s2636_1_ram[offset];
else
return character_ram[(0 * 0x800) | 0x400 | character_ram_page | offset];
}
READ8_HANDLER( cvs_2636_1_r )
WRITE8_HANDLER( cvs_s2636_1_or_character_ram_w )
{
if(!activecpu_get_reg(S2650_FO))
{
// First 2636
return s2636_1_ram[offset];
}
else
{
// Character Ram 1
return character_1_ram[character_page + offset];
}
if (!activecpu_get_reg(S2650_FO))
s2636_1_ram[offset] = data;
else
character_ram[(0 * 0x800) | 0x400 | character_ram_page | offset] = data;
}
WRITE8_HANDLER( cvs_2636_2_w )
READ8_HANDLER( cvs_s2636_2_or_character_ram_r )
{
if(!activecpu_get_reg(S2650_FO))
{
// Second 2636
s2636_2_ram[offset] = data;
}
else
{
// Character Ram 2
character_2_ram[character_page + offset] = data;
}
if (!activecpu_get_reg(S2650_FO))
return s2636_2_ram[offset];
else
return character_ram[(1 * 0x800) | 0x400 | character_ram_page | offset];
}
READ8_HANDLER( cvs_2636_2_r )
WRITE8_HANDLER( cvs_s2636_2_or_character_ram_w )
{
if(!activecpu_get_reg(S2650_FO))
{
// Second 2636
return s2636_2_ram[offset];
}
else
{
// Character Ram 2
return character_2_ram[character_page + offset];
}
if (!activecpu_get_reg(S2650_FO))
s2636_2_ram[offset] = data;
else
character_ram[(1 * 0x800) | 0x400 | character_ram_page | offset] = data;
}
WRITE8_HANDLER( cvs_2636_3_w )
READ8_HANDLER( cvs_s2636_3_or_character_ram_r )
{
if(!activecpu_get_reg(S2650_FO))
{
// Third 2636
s2636_3_ram[offset] = data;
}
else
{
// Character Ram 3
character_3_ram[character_page + offset] = data;
}
if (!activecpu_get_reg(S2650_FO))
return s2636_3_ram[offset];
else
return character_ram[(2 * 0x800) | 0x400 | character_ram_page | offset];
}
READ8_HANDLER( cvs_2636_3_r )
WRITE8_HANDLER( cvs_s2636_3_or_character_ram_w )
{
if(!activecpu_get_reg(S2650_FO))
{
// Third 2636
return s2636_3_ram[offset];
}
else
{
// Character Ram 3
return character_3_ram[character_page + offset];
}
if (!activecpu_get_reg(S2650_FO))
s2636_3_ram[offset] = data;
else
character_ram[(2 * 0x800) | 0x400 | character_ram_page | offset] = data;
}
VIDEO_START( cvs )
{
int generator = 0;
int x,y;
int y;
colorram = auto_malloc(0x400);
paletteram = auto_malloc(0x100);
video_start_generic(machine);
/* allocate memory */
cvs_color_ram = auto_malloc(0x400);
palette_ram = auto_malloc(0x10);
character_ram = auto_malloc(3 * 0x800); /* only half is used, but
by allocating twice the amount,
we can use the same gfx_layout */
/* precalculate the star background */
@ -353,6 +279,8 @@ VIDEO_START( cvs )
for (y = 255;y >= 0;y--)
{
int x;
for (x = 511;x >= 0;x--)
{
int bit1,bit2;
@ -380,19 +308,22 @@ VIDEO_START( cvs )
}
}
/* Need 3 bitmaps for 2636 chips */
s2636_1_bitmap = auto_bitmap_alloc(machine->screen[0].width,machine->screen[0].height,BITMAP_FORMAT_INDEXED8);
s2636_2_bitmap = auto_bitmap_alloc(machine->screen[0].width,machine->screen[0].height,BITMAP_FORMAT_INDEXED8);
s2636_3_bitmap = auto_bitmap_alloc(machine->screen[0].width,machine->screen[0].height,BITMAP_FORMAT_INDEXED8);
/* create the bitmaps for the S2636 chips */
s2636_1_bitmap = auto_bitmap_alloc(machine->screen[0].width, machine->screen[0].height, BITMAP_FORMAT_INDEXED8);
s2636_2_bitmap = auto_bitmap_alloc(machine->screen[0].width, machine->screen[0].height, BITMAP_FORMAT_INDEXED8);
s2636_3_bitmap = auto_bitmap_alloc(machine->screen[0].width, machine->screen[0].height, BITMAP_FORMAT_INDEXED8);
/* 3 bitmaps for collision detection */
cvs_collision_bitmap = auto_bitmap_alloc(machine->screen[0].width,machine->screen[0].height,BITMAP_FORMAT_INDEXED8);
cvs_collision_background = auto_bitmap_alloc(machine->screen[0].width,machine->screen[0].height,BITMAP_FORMAT_INDEXED8);
scrolled_background = auto_bitmap_alloc(machine->screen[0].width,machine->screen[0].height,BITMAP_FORMAT_INDEXED8);
/* create helper bitmaps */
background_bitmap = auto_bitmap_alloc(machine->screen[0].width, machine->screen[0].height, machine->screen[0].format);
cvs_collision_bitmap = auto_bitmap_alloc(machine->screen[0].width, machine->screen[0].height, BITMAP_FORMAT_INDEXED8);
cvs_collision_background = auto_bitmap_alloc(machine->screen[0].width, machine->screen[0].height, BITMAP_FORMAT_INDEXED8);
scrolled_background = auto_bitmap_alloc(machine->screen[0].width, machine->screen[0].height, BITMAP_FORMAT_INDEXED8);
}
INTERRUPT_GEN( cvs_interrupt )
{
stars_scroll++;
@ -401,107 +332,106 @@ INTERRUPT_GEN( cvs_interrupt )
cpunum_set_input_line(0,0,PULSE_LINE);
}
INLINE void plot_star(running_machine* machine, mame_bitmap *bitmap, int x, int y)
{
if (flip_screen_x)
{
x = 255 - x;
}
if (flip_screen_y)
{
y = 255 - y;
}
if (*BITMAP_ADDR16(bitmap, y, x) == machine->pens[0])
{
*BITMAP_ADDR16(bitmap, y, x) = machine->pens[7];
}
}
VIDEO_UPDATE( cvs )
{
int offs;
const int ram_based_char_start_indecies[] = { 0xe0, 0xc0, 0x100, 0x80 };
int code;
offs_t offs;
int scroll[8];
/* for every character in the Video RAM, check if it has been modified */
/* since last time and update it accordingly. */
for (offs = videoram_size - 1;offs >= 0;offs--)
/* set the palette */
for (offs = 0; offs < 0x10; offs++)
{
int character_bank;
int forecolor;
UINT8 data = palette_ram[offs];
int character = videoram[offs];
palette_set_color_rgb(machine, offs, pal2bit(~data >> 0), pal3bit(~data >> 2), pal3bit(~data >> 5));
}
int sx = (offs % 32) * 8;
int sy = (offs / 32) * 8;
/* Decide if RAM or ROM based character */
/* create our background character set, which is a software
selectable mixture of RAM and ROM based tiles */
if(character > ModeOffset[character_mode])
{
decodechar(machine->gfx[1],character,character_1_ram-1024,machine->drv->gfxdecodeinfo[1].gfxlayout);
/* ROM based tiles first */
for (code = 0; code < ram_based_char_start_indecies[character_mode]; code++)
decodechar(machine->gfx[0], code, memory_region(REGION_GFX1),
machine->drv->gfxdecodeinfo[0].gfxlayout);
character_bank=1;
}
/* now the RAM based ones */
for (; code < 0x100; code++)
decodechar(machine->gfx[0], code, character_ram,
machine->drv->gfxdecodeinfo[0].gfxlayout);
/* draw the background */
for (offs = 0; offs < 0x0400; offs++)
{
int collision_color = 0;
UINT8 code = cvs_video_ram[offs];
UINT8 color = cvs_color_ram[offs];
UINT8 x = offs << 3;
UINT8 y = offs >> 5 << 3;
drawgfx(background_bitmap, machine->gfx[0],
code, color,
0, 0,
x, y,
0, TRANSPARENCY_NONE, 0);
/* foreground for collision detection */
if (color & 0x80)
collision_color = 258;
else
{
character_bank=0;
if ((color & 0x03) == 3)
collision_color = 256;
else if((color & 0x01) == 0)
collision_color = 257;
}
/* Main Screen */
drawgfx(tmpbitmap,machine->gfx[character_bank],
character,
colorram[offs],
0,0,
sx,sy,
0,TRANSPARENCY_NONE,0);
/* Foreground for Collision Detection */
forecolor = 0;
if(colorram[offs] & 0x80)
{
forecolor=258;
}
else
{
if((colorram[offs] & 0x03) == 3) forecolor=256;
else if((colorram[offs] & 0x01) == 0) forecolor=257;
}
if(forecolor)
drawgfx(cvs_collision_background,machine->gfx[character_bank],
character,
forecolor,
0,0,
sx,sy,
0,TRANSPARENCY_NONE,0);
if (collision_color)
drawgfx(cvs_collision_background, machine->gfx[0],
code, collision_color,
0, 0,
x, y,
0, TRANSPARENCY_NONE, 0);
}
/* Update screen - 8 regions, fixed scrolling area */
copyscrollbitmap(bitmap,tmpbitmap,0,0,8,scroll,&machine->screen[0].visarea,TRANSPARENCY_NONE,0);
scroll[0] = 0;
scroll[1] = scroll_reg;
scroll[2] = scroll_reg;
scroll[3] = scroll_reg;
scroll[4] = scroll_reg;
scroll[5] = scroll_reg;
scroll[6] = 0;
scroll[7] = 0;
copyscrollbitmap(bitmap,background_bitmap,0,0,8,scroll,&machine->screen[0].visarea,TRANSPARENCY_NONE,0);
copyscrollbitmap(scrolled_background,cvs_collision_background,0,0,8,scroll,&machine->screen[0].visarea,TRANSPARENCY_NONE,0);
/* 2636's */
fillbitmap(s2636_1_bitmap,0,0);
s2636_update_bitmap(machine,s2636_1_bitmap,s2636_1_ram,2,cvs_collision_bitmap);
s2636_update_bitmap(machine,s2636_1_bitmap,s2636_1_ram,1,cvs_collision_bitmap);
fillbitmap(s2636_2_bitmap,0,0);
s2636_update_bitmap(machine,s2636_2_bitmap,s2636_2_ram,3,cvs_collision_bitmap);
s2636_update_bitmap(machine,s2636_2_bitmap,s2636_2_ram,2,cvs_collision_bitmap);
fillbitmap(s2636_3_bitmap,0,0);
s2636_update_bitmap(machine,s2636_3_bitmap,s2636_3_ram,4,cvs_collision_bitmap);
s2636_update_bitmap(machine,s2636_3_bitmap,s2636_3_ram,3,cvs_collision_bitmap);
/* Bullet Hardware */
for (offs = 8; offs < 256; offs++ )
{
if(cvs_bullet_ram[offs] != 0)
if (cvs_bullet_ram[offs] != 0)
{
int ct;
for(ct=0;ct<4;ct++)
@ -534,16 +464,16 @@ VIDEO_UPDATE( cvs )
/* Update 2636 images */
{
int sx;
int x;
UINT32 S1,S2,S3,SB,pen;
for(sx=255;sx>7;sx--)
for(x=255;x>7;x--)
{
UINT32 *sp1 = (UINT32 *)BITMAP_ADDR8(s2636_1_bitmap, sx, 0);
UINT32 *sp2 = (UINT32 *)BITMAP_ADDR8(s2636_2_bitmap, sx, 0);
UINT32 *sp3 = (UINT32 *)BITMAP_ADDR8(s2636_3_bitmap, sx, 0);
UINT64 *dst = (UINT64 *)BITMAP_ADDR16(bitmap, sx, 0);
UINT8 *spb = (UINT8 *)BITMAP_ADDR8(scrolled_background, sx, 0);
UINT32 *sp1 = (UINT32 *)BITMAP_ADDR8(s2636_1_bitmap, x, 0);
UINT32 *sp2 = (UINT32 *)BITMAP_ADDR8(s2636_2_bitmap, x, 0);
UINT32 *sp3 = (UINT32 *)BITMAP_ADDR8(s2636_3_bitmap, x, 0);
UINT64 *dst = (UINT64 *)BITMAP_ADDR16(bitmap, x, 0);
UINT8 *spb = (UINT8 *)BITMAP_ADDR8(scrolled_background, x, 0);
for(offs=0;offs<62;offs++)
{
@ -587,28 +517,36 @@ VIDEO_UPDATE( cvs )
}
}
/* Stars */
if(stars_on)
{
/* stars circuit */
if (stars_on)
{
for (offs = 0;offs < total_stars;offs++)
{
int x,y;
x = ((stars[offs].x + stars_scroll) % 512) / 2;
y = (stars[offs].y + (stars_scroll + stars[offs].x) / 512) % 256;
UINT8 x = (stars[offs].x + stars_scroll) >> 1;
UINT8 y = stars[offs].y + ((stars_scroll + stars[offs].x) >> 9);
if (y >= machine->screen[0].visarea.min_y &&
y <= machine->screen[0].visarea.max_y)
{
if ((y & 1) ^ ((x >> 4) & 1))
{
plot_star(machine, bitmap, x, y);
if (flip_screen_x)
x = ~x;
if (flip_screen_y)
y = ~y;
if (*BITMAP_ADDR16(bitmap, y, x) == machine->pens[0])
{
*BITMAP_ADDR16(bitmap, y, x) = machine->pens[7];
}
}
}
}
}
}
return 0;
}

View File

@ -15,6 +15,7 @@
***************************************************************************/
#include "driver.h"
#include "cvs.h"
#include "video/s2636.h"
#include "cpu/s2650/s2650.h"
@ -34,18 +35,6 @@
#define WL1 0
#endif
// All defined in video/cvs.c
VIDEO_START( cvs );
extern UINT8 *cvs_bullet_ram;
extern mame_bitmap *cvs_collision_bitmap;
extern mame_bitmap *cvs_collision_background;
extern int cvs_collision_register;
// Used here
//static int scroll[8];
@ -55,6 +44,7 @@ UINT8 *quasar_effectram;
int quasar_effectcontrol;
static mame_bitmap *effect_bitmap;
static mame_bitmap *background_bitmap;
PALETTE_INIT( quasar )
{
@ -134,6 +124,7 @@ VIDEO_START( quasar )
quasar_effectram = auto_malloc(0x400);
effect_bitmap = auto_bitmap_alloc(machine->screen[0].width,machine->screen[0].height,machine->screen[0].format);
background_bitmap = auto_bitmap_alloc(machine->screen[0].width, machine->screen[0].height, machine->screen[0].format);
video_start_cvs(machine);
}
@ -147,9 +138,9 @@ VIDEO_UPDATE( quasar )
/* for every character in the Video RAM, check if it has been modified */
/* since last time and update it accordingly. */
for (offs = videoram_size - 1;offs >= 0;offs--)
for (offs = 0; offs < 0x0400; offs++)
{
character = videoram[offs];
character = cvs_video_ram[offs];
sx = (offs % 32) * 8;
sy = (offs / 32) * 8;
@ -168,9 +159,9 @@ VIDEO_UPDATE( quasar )
/* Main Screen */
drawgfx(tmpbitmap,machine->gfx[0],
drawgfx(background_bitmap,machine->gfx[0],
character,
colorram[offs],
cvs_color_ram[offs],
0,0,
sx,sy,
0,TRANSPARENCY_NONE,0);
@ -178,7 +169,7 @@ VIDEO_UPDATE( quasar )
/* background for Collision Detection (it can only hit certain items) */
if((colorram[offs] & 7) == 0)
if((cvs_color_ram[offs] & 7) == 0)
{
drawgfx(cvs_collision_background,machine->gfx[0],
character,
@ -192,18 +183,18 @@ VIDEO_UPDATE( quasar )
/* Update screen */
copybitmap(bitmap,effect_bitmap,0,0,0,0,&machine->screen[0].visarea,TRANSPARENCY_NONE,0);
copybitmap(bitmap,tmpbitmap,0,0,0,0,&machine->screen[0].visarea,TRANSPARENCY_PEN,0);
copybitmap(bitmap,background_bitmap,0,0,0,0,&machine->screen[0].visarea,TRANSPARENCY_PEN,0);
/* 2636's */
fillbitmap(s2636_1_bitmap,0,0);
s2636_update_bitmap(machine,s2636_1_bitmap,s2636_1_ram,2,cvs_collision_bitmap);
s2636_update_bitmap(machine,s2636_1_bitmap,s2636_1_ram,1,cvs_collision_bitmap);
fillbitmap(s2636_2_bitmap,0,0);
s2636_update_bitmap(machine,s2636_2_bitmap,s2636_2_ram,3,cvs_collision_bitmap);
s2636_update_bitmap(machine,s2636_2_bitmap,s2636_2_ram,2,cvs_collision_bitmap);
fillbitmap(s2636_3_bitmap,0,0);
s2636_update_bitmap(machine,s2636_3_bitmap,s2636_3_ram,4,cvs_collision_bitmap);
s2636_update_bitmap(machine,s2636_3_bitmap,s2636_3_ram,3,cvs_collision_bitmap);
/* Bullet Hardware */