galaxia: correct screen resolution, correct astowar colors, small cleanup, starfield removed temporary

This commit is contained in:
hap 2024-11-29 12:29:16 +01:00
parent cffaa099a9
commit 6dd638277f
4 changed files with 95 additions and 163 deletions

View File

@ -905,7 +905,7 @@ void s2650_device::state_string_export(const device_state_entry &entry, std::str
switch (entry.index())
{
case STATE_GENFLAGS:
str = string_format("%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c",
str = string_format("%c%c%c%c%c%c%c%c %c%c%c%c%c%c%c%c",
m_psu & 0x80 ? 'S':'.',
m_psu & 0x40 ? 'O':'.',
m_psu & 0x20 ? 'I':'.',

View File

@ -29,7 +29,7 @@ protected:
: driver_device(mconfig, type, tag)
, m_bullet_ram(*this, "bullet_ram")
, m_maincpu(*this, "maincpu")
, m_s2636(*this, "s2636%u", 0U)
, m_s2636(*this, "s2636_%u", 0U)
, m_gfxdecode(*this, "gfxdecode")
, m_screen(*this, "screen")
, m_palette(*this, "palette")

View File

@ -51,14 +51,7 @@ Quick PCB sketch:
Astro Wars (port of Astro Fighter) is on a stripped down board of Galaxia,
using only one 2636 chip, less RAM, and no PROM.
Manual and Schematic for Galaxia can be found at:
http://www.zzzaccaria.com/manuals/SuperGalaxiansTechnicalManual.zip
http://www.zzzaccaria.com/manuals/GalaxiaSchematics.zip
The manual for Astro Wars can also be found at:
http://www.opdenkelder.com/Astrowars_manual.zip
HW has many similarities with quasar.cpp / cvs.cpp / zac2650.cpp
HW has many similarities with quasar.cpp / cvs.cpp / zac1b1120.cpp
real hardware video of Astro Wars can be seen here: youtu.be/eSrQFBMeDlM
--------------------------------------------------------------------------------
@ -102,25 +95,27 @@ public:
void galaxia(machine_config &config) ATTR_COLD;
void init_common() ATTR_COLD;
protected:
virtual void video_start() override ATTR_COLD;
bitmap_ind16 m_temp_bitmap;
tilemap_t *m_bg_tilemap = nullptr;
template <uint8_t Which> void video_w(offs_t offset, uint8_t data);
void data_map(address_map &map) ATTR_COLD;
void io_map(address_map &map) ATTR_COLD;
TILE_GET_INFO_MEMBER(get_bg_tile_info);
virtual void palette(palette_device &palette) const ATTR_COLD;
void draw_background(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
virtual uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
virtual void mem_map(address_map &map) ATTR_COLD;
private:
void scroll_w(uint8_t data);
void ctrlport_w(uint8_t data);
void dataport_w(uint8_t data);
TILE_GET_INFO_MEMBER(get_bg_tile_info);
void palette(palette_device &palette) const ATTR_COLD;
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
void mem_map(address_map &map) ATTR_COLD;
};
class astrowar_state : public galaxia_state
@ -133,14 +128,9 @@ public:
void astrowar(machine_config &config) ATTR_COLD;
protected:
virtual void video_start() override ATTR_COLD;
private:
bitmap_ind16 m_temp_bitmap;
TILE_GET_INFO_MEMBER(get_bg_tile_info);
void palette(palette_device &palette) const ATTR_COLD;
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
void mem_map(address_map &map) ATTR_COLD;
virtual void palette(palette_device &palette) const override ATTR_COLD;
virtual uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) override;
virtual void mem_map(address_map &map) override ATTR_COLD;
};
@ -150,11 +140,6 @@ private:
*******************************************************************************/
static constexpr uint8_t SPRITE_PEN_BASE = 0x10;
static constexpr uint8_t STAR_PEN = 0x18;
static constexpr uint8_t BULLET_PEN = 0x19;
// Colors are 3bpp, but how they are generated is a mystery
// there's no color PROM on the PCB, nor palette RAM
@ -174,95 +159,81 @@ void galaxia_state::palette(palette_device &palette) const
for (int i = 0; i < 0x18; i++)
palette.set_pen_color(i, pal1bit(lut_clr[i] >> 0), pal1bit(lut_clr[i] >> 1), pal1bit(lut_clr[i] >> 2));
// stars/bullets
palette.set_pen_color(STAR_PEN, pal1bit(1), pal1bit(1), pal1bit(1));
palette.set_pen_color(BULLET_PEN, pal1bit(1), pal1bit(1), pal1bit(1));
}
void astrowar_state::palette(palette_device &palette) const
{
// no reference material available(?), except for Data East astrof
constexpr int lut_clr[8] = { 7, 3, 5, 1, 4, 2, 6, 7 };
for (int i = 0; i < 8; i++)
{
// background
palette.set_pen_color(i * 2, 0, 0, 0);
palette.set_pen_color(i * 2 + 1, pal1bit(lut_clr[i] >> 0), pal1bit(lut_clr[i] >> 1), pal1bit(lut_clr[i] >> 2));
palette.set_pen_color(i * 2 + 1, pal1bit(BIT(~i, 2)), pal1bit(BIT(~i, 1)), pal1bit(BIT(~i, 0)));
// sprites
palette.set_pen_color(i | SPRITE_PEN_BASE, pal1bit(i >> 0), pal1bit(i >> 1), pal1bit(i >> 2));
palette.set_pen_color(i | 0x10, pal1bit(BIT(i, 0)), pal1bit(BIT(i, 1)), pal1bit(BIT(i, 2)));
}
// stars/bullets
palette.set_pen_color(STAR_PEN, pal1bit(1), pal1bit(1), pal1bit(1));
palette.set_pen_color(BULLET_PEN, pal1bit(1), pal1bit(1), pal1bit(1));
}
TILE_GET_INFO_MEMBER(galaxia_state::get_bg_tile_info)
{
uint8_t code = m_video_ram[tile_index] & 0x7f; // d7 unused
uint8_t color = m_color_ram[tile_index] & 3; // highest bits unused
uint8_t code = m_video_ram[tile_index]; // d7 unused for galaxia
uint8_t color = m_color_ram[tile_index]; // highest bits unused
tileinfo.set(0, code, color, 0);
}
TILE_GET_INFO_MEMBER(astrowar_state::get_bg_tile_info)
{
uint8_t code = m_video_ram[tile_index];
uint8_t color = m_color_ram[tile_index] & 7; // highest bits unused
tileinfo.set(0, code, color, 0);
}
void galaxia_state::init_common()
{
assert((STAR_PEN & 7) == 0);
init_stars();
}
void galaxia_state::video_start()
{
init_common();
//init_stars();
m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(galaxia_state::get_bg_tile_info)), TILEMAP_SCAN_ROWS, 8, 8, 32, 32);
m_bg_tilemap->set_transparent_pen(0);
m_bg_tilemap->set_scroll_cols(8);
}
void astrowar_state::video_start()
{
init_common();
m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(astrowar_state::get_bg_tile_info)), TILEMAP_SCAN_ROWS, 8, 8, 32, 32);
m_bg_tilemap->set_transparent_pen(0);
m_bg_tilemap->set_scroll_cols(8);
m_bg_tilemap->set_scrolldx(8, 8);
m_screen->register_screen_bitmap(m_temp_bitmap);
}
static GFXDECODE_START( gfx_galaxia )
GFXDECODE_ENTRY( "tiles", 0, gfx_8x8x2_planar, 0, 4 )
GFXDECODE_END
static GFXDECODE_START( gfx_astrowar )
GFXDECODE_ENTRY( "tiles", 0, gfx_8x8x1, 0, 8 )
GFXDECODE_END
/********************************************************************************/
void galaxia_state::draw_background(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
bitmap.fill(m_palette->black_pen(), cliprect);
//update_stars(bitmap, cliprect, 0x18, 1);
// tilemap doesn't wrap
rectangle bg_clip = cliprect;
bg_clip.max_y = 32*8-1;
bg_clip &= cliprect;
m_temp_bitmap.fill(0, cliprect);
m_bg_tilemap->draw(screen, m_temp_bitmap, bg_clip, 0);
copybitmap_trans(bitmap, m_temp_bitmap, 0, 0, 0, 0, cliprect, 0);
}
uint32_t galaxia_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
bitmap_ind16 const &s2636_0_bitmap = m_s2636[0]->update(cliprect);
bitmap_ind16 const &s2636_1_bitmap = m_s2636[1]->update(cliprect);
bitmap_ind16 const &s2636_2_bitmap = m_s2636[2]->update(cliprect);
bitmap.fill(0, cliprect);
update_stars(bitmap, cliprect, STAR_PEN, 1);
m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0);
draw_background(screen, bitmap, cliprect);
for (int y = cliprect.top(); y <= cliprect.bottom(); y++)
{
for (int x = cliprect.left(); x <= cliprect.right(); x++)
{
bool const bullet = m_bullet_ram[y] && x == (m_bullet_ram[y] ^ 0xff);
bool const background = (bitmap.pix(y, x) & 3) != 0;
int const bullet_pos = (((y < 0x100) ? m_bullet_ram[y] : 0) ^ 0xff) - 8;
bool const bullet = (bullet_pos != 0xff - 8) && (x <= bullet_pos && x > bullet_pos - 4);
bool const background = (m_temp_bitmap.pix(y, x) & 3) != 0;
// draw bullets
if (bullet)
@ -271,11 +242,7 @@ uint32_t galaxia_state::screen_update(screen_device &screen, bitmap_ind16 &bitma
if (background) m_collision_register |= 0x80;
// draw white 1x4-size bullet
for (int bx = 0; bx < 4; bx++)
{
if (cliprect.contains(x - bx, y))
bitmap.pix(y, x - bx) = BULLET_PEN;
}
bitmap.pix(y, x) = m_palette->white_pen();
}
// copy the S2636 images into the main bitmap and check collision
@ -304,7 +271,7 @@ uint32_t galaxia_state::screen_update(screen_device &screen, bitmap_ind16 &bitma
if (S2636_IS_PIXEL_DRAWN(pixel2)) m_collision_register |= 0x40;
}
bitmap.pix(y, x) = S2636_PIXEL_COLOR(pixel) | SPRITE_PEN_BASE;
bitmap.pix(y, x) = S2636_PIXEL_COLOR(pixel) | 0x10;
}
}
}
@ -318,33 +285,30 @@ uint32_t astrowar_state::screen_update(screen_device &screen, bitmap_ind16 &bitm
// astrowar has only one S2636
bitmap_ind16 const &s2636_0_bitmap = m_s2636[0]->update(cliprect);
bitmap.fill(0, cliprect);
update_stars(bitmap, cliprect, STAR_PEN, 1);
m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0);
copybitmap(m_temp_bitmap, bitmap, 0, 0, 0, 0, cliprect);
draw_background(screen, bitmap, cliprect);
for (int y = cliprect.top(); y <= cliprect.bottom(); y++)
{
// draw bullets
if (m_bullet_ram[y])
for (int x = cliprect.left(); x <= cliprect.right(); x++)
{
uint8_t const pos = m_bullet_ram[y] ^ 0xff;
int const bullet_pos = (((y < 0x100) ? m_bullet_ram[y] : 0) ^ 0xff) - 8;
bool const bullet = (bullet_pos != 0xff - 8) && (x <= bullet_pos && x > bullet_pos - 4);
// background vs. bullet collision detection
if (m_temp_bitmap.pix(y, pos) & 1)
m_collision_register |= 0x02;
// draw white 1x4-size bullet
for (int bx = 0; bx < 4; bx++)
// draw bullets first
if (bullet)
{
if (cliprect.contains(pos - bx, y))
bitmap.pix(y, pos - bx) = BULLET_PEN;
// background vs. bullet collision detection
if (m_temp_bitmap.pix(y, x) & 1)
m_collision_register |= 0x02;
// draw white 1x4-size bullet
bitmap.pix(y, x) = m_palette->white_pen();
}
}
for (int x = cliprect.left(); x <= cliprect.right(); x++)
{
// NOTE: similar to zac2650.cpp, the sprite chip runs at a different frequency than the background generator
// NOTE: similar to zac1b1120.cpp, the sprite chip runs at a different frequency than the background generator
// the exact timing ratio is unknown, so we'll have to do with guesswork
float const s_ratio = 256.0f / 196.0f;
@ -361,8 +325,8 @@ uint32_t astrowar_state::screen_update(screen_device &screen, bitmap_ind16 &bitm
if ((m_temp_bitmap.pix(y, int(sx)) | m_temp_bitmap.pix(y, int(sx + 0.5f))) & 1)
m_collision_register |= 0x01;
bitmap.pix(y, int(sx)) = S2636_PIXEL_COLOR(pixel) | SPRITE_PEN_BASE;
bitmap.pix(y, int(sx + 0.5f)) = S2636_PIXEL_COLOR(pixel) | SPRITE_PEN_BASE;
bitmap.pix(y, int(sx)) = S2636_PIXEL_COLOR(pixel) | 0x10;
bitmap.pix(y, int(sx + 0.5f)) = S2636_PIXEL_COLOR(pixel) | 0x10;
}
}
}
@ -371,6 +335,7 @@ uint32_t astrowar_state::screen_update(screen_device &screen, bitmap_ind16 &bitm
}
/*******************************************************************************
I/O
@ -451,6 +416,7 @@ void galaxia_state::data_map(address_map &map)
}
/*******************************************************************************
Inputs
@ -530,32 +496,13 @@ static INPUT_PORTS_START( galaxia )
INPUT_PORTS_END
/*******************************************************************************
Machine Configs
*******************************************************************************/
static const gfx_layout tiles8x8x2_layout =
{
8,8,
RGN_FRAC(1,2),
2,
{ RGN_FRAC(0,2), RGN_FRAC(1,2) },
{ 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
};
static GFXDECODE_START( gfx_galaxia )
GFXDECODE_ENTRY( "tiles", 0, tiles8x8x2_layout, 0, 4 )
GFXDECODE_END
static GFXDECODE_START( gfx_astrowar )
GFXDECODE_ENTRY( "tiles", 0, gfx_8x8x1, 0, 8 )
GFXDECODE_END
void galaxia_state::galaxia(machine_config &config)
{
// basic machine hardware
@ -572,26 +519,26 @@ void galaxia_state::galaxia(machine_config &config)
m_screen->set_video_attributes(VIDEO_ALWAYS_UPDATE);
m_screen->set_refresh_hz(50);
m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(3500));
m_screen->set_size(256, 256);
m_screen->set_visarea(0*8, 30*8-1, 2*8, 32*8-1);
m_screen->set_size(256, 312);
m_screen->set_visarea(0*8, 29*8-1, 0*8, 34*8-1);
m_screen->set_screen_update(FUNC(galaxia_state::screen_update));
m_screen->set_palette(m_palette);
m_screen->screen_vblank().set_inputline(m_maincpu, 0, ASSERT_LINE);
m_screen->screen_vblank().append(FUNC(galaxia_state::scroll_start));
//m_screen->screen_vblank().append(FUNC(galaxia_state::scroll_stars));
GFXDECODE(config, m_gfxdecode, m_palette, gfx_galaxia);
PALETTE(config, m_palette, FUNC(galaxia_state::palette), 0x18+2);
PALETTE(config, m_palette, FUNC(galaxia_state::palette), 0x18);
S2636(config, m_s2636[0], 0);
m_s2636[0]->set_offsets(-13, -26);
m_s2636[0]->set_offsets(3, -26);
m_s2636[0]->add_route(ALL_OUTPUTS, "mono", 0.25);
S2636(config, m_s2636[1], 0);
m_s2636[1]->set_offsets(-13, -26);
m_s2636[1]->set_offsets(3, -26);
m_s2636[1]->add_route(ALL_OUTPUTS, "mono", 0.25);
S2636(config, m_s2636[2], 0);
m_s2636[2]->set_offsets(-13, -26);
m_s2636[2]->set_offsets(3, -26);
m_s2636[2]->add_route(ALL_OUTPUTS, "mono", 0.25);
// sound hardware
@ -600,39 +547,18 @@ void galaxia_state::galaxia(machine_config &config)
void astrowar_state::astrowar(machine_config &config)
{
// basic machine hardware
S2650(config, m_maincpu, 14.318181_MHz_XTAL / 8);
m_maincpu->set_addrmap(AS_PROGRAM, &astrowar_state::mem_map);
m_maincpu->set_addrmap(AS_IO, &astrowar_state::io_map);
m_maincpu->set_addrmap(AS_DATA, &astrowar_state::data_map);
m_maincpu->sense_handler().set("screen", FUNC(screen_device::vblank));
m_maincpu->flag_handler().set([this] (int state) { m_ram_view.select(state); });
m_maincpu->intack_handler().set([this]() { m_maincpu->set_input_line(0, CLEAR_LINE); return 0x03; });
galaxia(config);
// video hardware
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
m_screen->set_video_attributes(VIDEO_ALWAYS_UPDATE);
m_screen->set_refresh_hz(50);
m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(3500));
m_screen->set_size(256, 256);
m_screen->set_visarea(1*8, 31*8-1, 2*8, 32*8-1);
m_screen->set_screen_update(FUNC(astrowar_state::screen_update));
m_screen->set_palette(m_palette);
m_screen->screen_vblank().set_inputline(m_maincpu, 0, ASSERT_LINE);
m_screen->screen_vblank().append(FUNC(astrowar_state::scroll_start));
GFXDECODE(config.replace(), m_gfxdecode, m_palette, gfx_astrowar);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_astrowar);
PALETTE(config, m_palette, FUNC(astrowar_state::palette), 0x18+2);
S2636(config, m_s2636[0], 0);
m_s2636[0]->set_offsets(-13, -8);
m_s2636[0]->add_route(ALL_OUTPUTS, "mono", 0.25);
// sound hardware
SPEAKER(config, "mono").front_center();
m_s2636[0]->set_offsets(3, -8);
config.device_remove("s2636_1");
config.device_remove("s2636_2");
}
/*******************************************************************************
Game drivers
@ -653,8 +579,8 @@ ROM_START( galaxia )
ROM_LOAD( "galaxia.13l", 0x03000, 0x0400, CRC(3a9c38c7) SHA1(d1e934092b69c0f3f9636eba05a1d8a6d9588e6b) )
ROM_REGION( 0x0800, "tiles", 0 )
ROM_LOAD( "galaxia.1d", 0x00000, 0x0400, CRC(2dd50aab) SHA1(758d7a5383c9a1ee134d99e3f7025819cfbe0e0f) )
ROM_LOAD( "galaxia.3d", 0x00400, 0x0400, CRC(1dc30185) SHA1(e3c75eecb80b376ece98f602e1b9587487841824) )
ROM_LOAD( "galaxia.3d", 0x00000, 0x0400, CRC(1dc30185) SHA1(e3c75eecb80b376ece98f602e1b9587487841824) )
ROM_LOAD( "galaxia.1d", 0x00400, 0x0400, CRC(2dd50aab) SHA1(758d7a5383c9a1ee134d99e3f7025819cfbe0e0f) )
ROM_REGION( 0x0200, "proms", 0 ) // unknown function
ROM_LOAD( "prom.11o", 0x0000, 0x0200, CRC(ae816417) SHA1(9497857d13c943a2735c3b85798199054e613b2c) )
@ -674,8 +600,8 @@ ROM_START( galaxiaa )
ROM_LOAD( "galaxia.13l", 0x03000, 0x0400, CRC(3a9c38c7) SHA1(d1e934092b69c0f3f9636eba05a1d8a6d9588e6b) )
ROM_REGION( 0x0800, "tiles", 0 )
ROM_LOAD( "galaxia.1d", 0x00000, 0x0400, CRC(2dd50aab) SHA1(758d7a5383c9a1ee134d99e3f7025819cfbe0e0f) ) // taken from parent
ROM_LOAD( "galaxia.3d", 0x00400, 0x0400, CRC(1dc30185) SHA1(e3c75eecb80b376ece98f602e1b9587487841824) ) // taken from parent
ROM_LOAD( "galaxia.3d", 0x00000, 0x0400, CRC(1dc30185) SHA1(e3c75eecb80b376ece98f602e1b9587487841824) ) // taken from parent
ROM_LOAD( "galaxia.1d", 0x00400, 0x0400, CRC(2dd50aab) SHA1(758d7a5383c9a1ee134d99e3f7025819cfbe0e0f) ) // taken from parent
ROM_REGION( 0x0200, "proms", 0 ) // unknown function
ROM_LOAD( "prom.11o", 0x0000, 0x0200, CRC(ae816417) SHA1(9497857d13c943a2735c3b85798199054e613b2c) )
@ -695,8 +621,8 @@ ROM_START( galaxiab )
ROM_LOAD( "galaxia.13l", 0x03000, 0x0400, CRC(3a9c38c7) SHA1(d1e934092b69c0f3f9636eba05a1d8a6d9588e6b) )
ROM_REGION( 0x0800, "tiles", 0 )
ROM_LOAD( "galaxia.1d", 0x00000, 0x0400, CRC(2dd50aab) SHA1(758d7a5383c9a1ee134d99e3f7025819cfbe0e0f) ) // taken from parent
ROM_LOAD( "galaxia.3d", 0x00400, 0x0400, CRC(1dc30185) SHA1(e3c75eecb80b376ece98f602e1b9587487841824) ) // taken from parent
ROM_LOAD( "galaxia.3d", 0x00000, 0x0400, CRC(1dc30185) SHA1(e3c75eecb80b376ece98f602e1b9587487841824) ) // taken from parent
ROM_LOAD( "galaxia.1d", 0x00400, 0x0400, CRC(2dd50aab) SHA1(758d7a5383c9a1ee134d99e3f7025819cfbe0e0f) ) // taken from parent
ROM_REGION( 0x0200, "proms", 0 ) // unknown function
ROM_LOAD( "prom.11o", 0x0000, 0x0200, CRC(ae816417) SHA1(9497857d13c943a2735c3b85798199054e613b2c) )
@ -716,8 +642,8 @@ ROM_START( galaxiac )
ROM_LOAD( "galaxia.13l", 0x03000, 0x0400, CRC(3a9c38c7) SHA1(d1e934092b69c0f3f9636eba05a1d8a6d9588e6b) )
ROM_REGION( 0x0800, "tiles", 0 )
ROM_LOAD( "galaxia.1d", 0x00000, 0x0400, CRC(2dd50aab) SHA1(758d7a5383c9a1ee134d99e3f7025819cfbe0e0f) ) // taken from parent
ROM_LOAD( "galaxia.3d", 0x00400, 0x0400, CRC(1dc30185) SHA1(e3c75eecb80b376ece98f602e1b9587487841824) ) // taken from parent
ROM_LOAD( "galaxia.3d", 0x00000, 0x0400, CRC(1dc30185) SHA1(e3c75eecb80b376ece98f602e1b9587487841824) ) // taken from parent
ROM_LOAD( "galaxia.1d", 0x00400, 0x0400, CRC(2dd50aab) SHA1(758d7a5383c9a1ee134d99e3f7025819cfbe0e0f) ) // taken from parent
ROM_REGION( 0x0200, "proms", 0 ) // unknown function
ROM_LOAD( "prom.11o", 0x0000, 0x0200, CRC(ae816417) SHA1(9497857d13c943a2735c3b85798199054e613b2c) )
@ -749,4 +675,4 @@ GAME( 1979, galaxia, 0, galaxia, galaxia, galaxia_state, empty_init, RO
GAME( 1979, galaxiaa, galaxia, galaxia, galaxia, galaxia_state, empty_init, ROT90, "Zaccaria / Zelco", "Galaxia (set 2)", MACHINE_IMPERFECT_COLORS | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
GAME( 1979, galaxiab, galaxia, galaxia, galaxia, galaxia_state, empty_init, ROT90, "Zaccaria / Zelco", "Galaxia (set 3)", MACHINE_IMPERFECT_COLORS | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
GAME( 1979, galaxiac, galaxia, galaxia, galaxia, galaxia_state, empty_init, ROT90, "Zaccaria / Zelco", "Galaxia (set 4)", MACHINE_IMPERFECT_COLORS | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
GAME( 1980, astrowar, 0, astrowar, galaxia, astrowar_state, empty_init, ROT90, "Zaccaria / Zelco", "Astro Wars", MACHINE_IMPERFECT_COLORS | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
GAME( 1980, astrowar, 0, astrowar, galaxia, astrowar_state, empty_init, ROT90, "Zaccaria / Zelco", "Astro Wars", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )

View File

@ -148,6 +148,7 @@ void quasar_state::machine_reset()
}
/*******************************************************************************
Video
@ -310,6 +311,7 @@ uint32_t quasar_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap
}
/*******************************************************************************
Quasar memory layout
@ -409,6 +411,7 @@ void quasar_state::data(address_map &map)
}
/*******************************************************************************
Sound board memory handlers
@ -447,6 +450,7 @@ void quasar_state::sound_portmap(address_map &map)
}
/*******************************************************************************
Input Ports
@ -551,6 +555,7 @@ static GFXDECODE_START( gfx_quasar )
GFXDECODE_END
/*******************************************************************************
Machine Configuration
@ -579,7 +584,7 @@ void quasar_state::quasar(machine_config &config)
m_screen->set_video_attributes(VIDEO_ALWAYS_UPDATE);
m_screen->set_refresh_hz(50); // from dot clock
m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(3500));
m_screen->set_size(256, 256);
m_screen->set_size(256, 312);
m_screen->set_visarea(1*8+1, 29*8-1, 2*8, 32*8-1);
m_screen->set_screen_update(FUNC(quasar_state::screen_update));
m_screen->set_palette(m_palette);
@ -607,6 +612,7 @@ void quasar_state::quasar(machine_config &config)
}
/*******************************************************************************
ROM Definitions