mirror of
https://github.com/holub/mame
synced 2025-07-04 17:38:08 +03:00
champbas: merge driver files
This commit is contained in:
parent
e137725d9f
commit
8d081eac03
@ -68,26 +68,409 @@ Notes:
|
|||||||
original board has vastly improved sound hardware which is therefore missing
|
original board has vastly improved sound hardware which is therefore missing
|
||||||
from the bootleg.
|
from the bootleg.
|
||||||
|
|
||||||
|
|
||||||
TODO:
|
TODO:
|
||||||
-----
|
-----
|
||||||
- Exciting Soccer: interrupt source for sound CPU is unknown.
|
- Exciting Soccer: interrupt source for sound CPU is unknown.
|
||||||
|
|
||||||
- Exciting Soccer: sound CPU writes to unknown ports on startup. Timer configure?
|
- Exciting Soccer: sound CPU writes to unknown ports on startup. Timer configure?
|
||||||
|
|
||||||
- Exciting Soccer: Unknown writes to 8910 I/O ports (filters?)
|
- Exciting Soccer: Unknown writes to 8910 I/O ports (filters?)
|
||||||
|
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
#include "emu.h"
|
#include "emu.h"
|
||||||
#include "champbas.h"
|
|
||||||
|
#include "alpha8201.h"
|
||||||
|
|
||||||
#include "cpu/z80/z80.h"
|
#include "cpu/z80/z80.h"
|
||||||
#include "cpu/m6805/m68705.h"
|
#include "cpu/m6805/m68705.h"
|
||||||
|
#include "machine/74259.h"
|
||||||
#include "machine/gen_latch.h"
|
#include "machine/gen_latch.h"
|
||||||
|
#include "machine/timer.h"
|
||||||
#include "machine/watchdog.h"
|
#include "machine/watchdog.h"
|
||||||
#include "sound/ay8910.h"
|
#include "sound/ay8910.h"
|
||||||
#include "sound/dac.h"
|
#include "sound/dac.h"
|
||||||
|
#include "video/resnet.h"
|
||||||
|
|
||||||
|
#include "emupal.h"
|
||||||
#include "screen.h"
|
#include "screen.h"
|
||||||
#include "speaker.h"
|
#include "speaker.h"
|
||||||
|
#include "tilemap.h"
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
|
||||||
|
class champbas_state : public driver_device
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
champbas_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||||
|
driver_device(mconfig, type, tag),
|
||||||
|
m_maincpu(*this, "maincpu"),
|
||||||
|
m_mainlatch(*this, "mainlatch"),
|
||||||
|
m_alpha_8201(*this, "alpha_8201"),
|
||||||
|
m_watchdog(*this, "watchdog"),
|
||||||
|
m_gfxdecode(*this, "gfxdecode"),
|
||||||
|
m_palette(*this, "palette"),
|
||||||
|
m_mainram(*this, "mainram"),
|
||||||
|
m_vram(*this, "vram"),
|
||||||
|
m_spriteram(*this, "spriteram"),
|
||||||
|
m_spriteram2(*this, "spriteram2")
|
||||||
|
{ }
|
||||||
|
|
||||||
|
int watchdog_bit2();
|
||||||
|
|
||||||
|
void init_champbas();
|
||||||
|
|
||||||
|
void champbas(machine_config &config);
|
||||||
|
void champbb2(machine_config &config);
|
||||||
|
void champbb2j(machine_config &config);
|
||||||
|
void talbot(machine_config &config);
|
||||||
|
void tbasebal(machine_config &config);
|
||||||
|
void champbasjb(machine_config &config);
|
||||||
|
void champbasj(machine_config &config);
|
||||||
|
void champbasja(machine_config &config);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
// handlers
|
||||||
|
void irq_enable_w(int state);
|
||||||
|
uint8_t champbja_protection_r(offs_t offset);
|
||||||
|
|
||||||
|
void vblank_irq(int state);
|
||||||
|
|
||||||
|
void tilemap_w(offs_t offset, uint8_t data);
|
||||||
|
void gfxbank_w(int state);
|
||||||
|
void palette_bank_w(int state);
|
||||||
|
void flipscreen_w(int state);
|
||||||
|
|
||||||
|
void champbas_palette(palette_device &palette) const;
|
||||||
|
TILE_GET_INFO_MEMBER(champbas_get_bg_tile_info);
|
||||||
|
|
||||||
|
uint32_t screen_update_champbas(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||||
|
void champbas_draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||||
|
|
||||||
|
virtual void machine_start() override;
|
||||||
|
virtual void video_start() override;
|
||||||
|
|
||||||
|
void champbas_map(address_map &map);
|
||||||
|
void champbasj_map(address_map &map);
|
||||||
|
void champbasja_map(address_map &map);
|
||||||
|
void champbasjb_map(address_map &map);
|
||||||
|
void champbb2_map(address_map &map);
|
||||||
|
void champbb2j_map(address_map &map);
|
||||||
|
void tbasebal_map(address_map &map);
|
||||||
|
void champbas_sound_map(address_map &map);
|
||||||
|
|
||||||
|
// devices, memory pointers
|
||||||
|
required_device<cpu_device> m_maincpu;
|
||||||
|
required_device<ls259_device> m_mainlatch;
|
||||||
|
optional_device<alpha_8201_device> m_alpha_8201;
|
||||||
|
required_device<watchdog_timer_device> m_watchdog;
|
||||||
|
required_device<gfxdecode_device> m_gfxdecode;
|
||||||
|
required_device<palette_device> m_palette;
|
||||||
|
|
||||||
|
required_shared_ptr<uint8_t> m_mainram;
|
||||||
|
required_shared_ptr<uint8_t> m_vram;
|
||||||
|
required_shared_ptr<uint8_t> m_spriteram;
|
||||||
|
optional_shared_ptr<uint8_t> m_spriteram2;
|
||||||
|
|
||||||
|
// internal state
|
||||||
|
uint8_t m_irq_mask = 0U;
|
||||||
|
tilemap_t *m_bg_tilemap = nullptr;
|
||||||
|
uint8_t m_gfx_bank = 0U;
|
||||||
|
uint8_t m_palette_bank = 0U;
|
||||||
|
};
|
||||||
|
|
||||||
|
class exctsccr_state : public champbas_state
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
exctsccr_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||||
|
champbas_state(mconfig, type, tag),
|
||||||
|
m_audiocpu(*this, "audiocpu")
|
||||||
|
{ }
|
||||||
|
|
||||||
|
void init_exctsccr();
|
||||||
|
|
||||||
|
void exctsccr(machine_config &config);
|
||||||
|
void exctsccrb(machine_config &config);
|
||||||
|
void exctscc2(machine_config &config);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
TIMER_DEVICE_CALLBACK_MEMBER(exctsccr_sound_irq);
|
||||||
|
|
||||||
|
void exctsccr_palette(palette_device &palette) const;
|
||||||
|
TILE_GET_INFO_MEMBER(exctsccr_get_bg_tile_info);
|
||||||
|
|
||||||
|
uint32_t screen_update_exctsccr(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||||
|
|
||||||
|
void exctsccr_draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||||
|
|
||||||
|
virtual void video_start() override;
|
||||||
|
|
||||||
|
void exctsccr_map(address_map &map);
|
||||||
|
void exctsccrb_map(address_map &map);
|
||||||
|
void exctsccr_sound_map(address_map &map);
|
||||||
|
void exctsccr_sound_io_map(address_map &map);
|
||||||
|
void exctscc2_sound_io_map(address_map &map);
|
||||||
|
|
||||||
|
private:
|
||||||
|
required_device<cpu_device> m_audiocpu;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/***************************************************************************
|
||||||
|
|
||||||
|
Convert the color PROMs into a more useable format.
|
||||||
|
|
||||||
|
The palette PROM is connected to the RGB output this way:
|
||||||
|
|
||||||
|
bit 7 -- 220 ohm resistor -- BLUE
|
||||||
|
-- 470 ohm resistor -- BLUE
|
||||||
|
-- 220 ohm resistor -- GREEN
|
||||||
|
-- 470 ohm resistor -- GREEN
|
||||||
|
-- 1 kohm resistor -- GREEN
|
||||||
|
-- 220 ohm resistor -- RED
|
||||||
|
-- 470 ohm resistor -- RED
|
||||||
|
bit 0 -- 1 kohm resistor -- RED
|
||||||
|
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
void champbas_state::champbas_palette(palette_device &palette) const
|
||||||
|
{
|
||||||
|
const uint8_t *color_prom = memregion("proms")->base();
|
||||||
|
static const int resistances_rg[3] = { 1000, 470, 220 };
|
||||||
|
static const int resistances_b [2] = { 470, 220 };
|
||||||
|
|
||||||
|
/* compute the color output resistor weights */
|
||||||
|
double rweights[3], gweights[3], bweights[2];
|
||||||
|
compute_resistor_weights(0, 255, -1.0,
|
||||||
|
3, &resistances_rg[0], rweights, 0, 0,
|
||||||
|
3, &resistances_rg[0], gweights, 0, 0,
|
||||||
|
2, &resistances_b[0], bweights, 0, 0);
|
||||||
|
|
||||||
|
/* create a lookup table for the palette */
|
||||||
|
for (int i = 0; i < 0x20; i++)
|
||||||
|
{
|
||||||
|
int bit0, bit1, bit2;
|
||||||
|
|
||||||
|
/* red component */
|
||||||
|
bit0 = (color_prom[i] >> 0) & 0x01;
|
||||||
|
bit1 = (color_prom[i] >> 1) & 0x01;
|
||||||
|
bit2 = (color_prom[i] >> 2) & 0x01;
|
||||||
|
int const r = combine_weights(rweights, bit0, bit1, bit2);
|
||||||
|
|
||||||
|
/* green component */
|
||||||
|
bit0 = (color_prom[i] >> 3) & 0x01;
|
||||||
|
bit1 = (color_prom[i] >> 4) & 0x01;
|
||||||
|
bit2 = (color_prom[i] >> 5) & 0x01;
|
||||||
|
int const g = combine_weights(gweights, bit0, bit1, bit2);
|
||||||
|
|
||||||
|
/* blue component */
|
||||||
|
bit0 = (color_prom[i] >> 6) & 0x01;
|
||||||
|
bit1 = (color_prom[i] >> 7) & 0x01;
|
||||||
|
int const b = combine_weights(bweights, bit0, bit1);
|
||||||
|
|
||||||
|
palette.set_indirect_color(i, rgb_t(r, g, b));
|
||||||
|
}
|
||||||
|
|
||||||
|
color_prom += 0x20;
|
||||||
|
|
||||||
|
for (int i = 0; i < 0x200; i++)
|
||||||
|
{
|
||||||
|
uint8_t const ctabentry = (color_prom[i & 0xff] & 0x0f) | ((i & 0x100) >> 4);
|
||||||
|
palette.set_pen_indirect(i, ctabentry);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void exctsccr_state::exctsccr_palette(palette_device &palette) const
|
||||||
|
{
|
||||||
|
const uint8_t *color_prom = memregion("proms")->base();
|
||||||
|
|
||||||
|
/* create a lookup table for the palette */
|
||||||
|
for (int i = 0; i < 0x20; i++)
|
||||||
|
{
|
||||||
|
int bit0, bit1, bit2;
|
||||||
|
|
||||||
|
/* red component */
|
||||||
|
bit0 = (color_prom[i] >> 0) & 0x01;
|
||||||
|
bit1 = (color_prom[i] >> 1) & 0x01;
|
||||||
|
bit2 = (color_prom[i] >> 2) & 0x01;
|
||||||
|
int const r = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2;
|
||||||
|
|
||||||
|
/* green component */
|
||||||
|
bit0 = (color_prom[i] >> 3) & 0x01;
|
||||||
|
bit1 = (color_prom[i] >> 4) & 0x01;
|
||||||
|
bit2 = (color_prom[i] >> 5) & 0x01;
|
||||||
|
int const g = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2;
|
||||||
|
|
||||||
|
/* blue component */
|
||||||
|
bit0 = 0;
|
||||||
|
bit1 = (color_prom[i] >> 6) & 0x01;
|
||||||
|
bit2 = (color_prom[i] >> 7) & 0x01;
|
||||||
|
int const b = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2;
|
||||||
|
|
||||||
|
palette.set_indirect_color(i, rgb_t(r, g, b));
|
||||||
|
}
|
||||||
|
|
||||||
|
/* color_prom now points to the beginning of the lookup table */
|
||||||
|
color_prom += 0x20;
|
||||||
|
|
||||||
|
/* characters / sprites (3bpp) */
|
||||||
|
for (int i = 0; i < 0x100; i++)
|
||||||
|
{
|
||||||
|
int const swapped_i = bitswap<8>(i, 2, 7, 6, 5, 4, 3, 1, 0);
|
||||||
|
uint8_t const ctabentry = (color_prom[swapped_i] & 0x0f) | ((i & 0x80) >> 3);
|
||||||
|
palette.set_pen_indirect(i, ctabentry);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* sprites (4bpp) */
|
||||||
|
for (int i = 0; i < 0x100; i++)
|
||||||
|
{
|
||||||
|
uint8_t const ctabentry = (color_prom[0x100 + i] & 0x0f) | 0x10;
|
||||||
|
palette.set_pen_indirect(i + 0x100, ctabentry);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*************************************
|
||||||
|
*
|
||||||
|
* Callbacks for the TileMap code
|
||||||
|
*
|
||||||
|
*************************************/
|
||||||
|
|
||||||
|
TILE_GET_INFO_MEMBER(champbas_state::champbas_get_bg_tile_info)
|
||||||
|
{
|
||||||
|
int const code = m_vram[tile_index] | (m_gfx_bank << 8);
|
||||||
|
int const color = (m_vram[tile_index + 0x400] & 0x1f) | 0x20;
|
||||||
|
|
||||||
|
tileinfo.set(0, code, color, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
TILE_GET_INFO_MEMBER(exctsccr_state::exctsccr_get_bg_tile_info)
|
||||||
|
{
|
||||||
|
int const code = m_vram[tile_index] | (m_gfx_bank << 8);
|
||||||
|
int const color = m_vram[tile_index + 0x400] & 0x0f;
|
||||||
|
|
||||||
|
tileinfo.set(0, code, color, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*************************************
|
||||||
|
*
|
||||||
|
* Video system start
|
||||||
|
*
|
||||||
|
*************************************/
|
||||||
|
|
||||||
|
void champbas_state::video_start()
|
||||||
|
{
|
||||||
|
m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(champbas_state::champbas_get_bg_tile_info)), TILEMAP_SCAN_ROWS, 8, 8, 32, 32);
|
||||||
|
}
|
||||||
|
|
||||||
|
void exctsccr_state::video_start()
|
||||||
|
{
|
||||||
|
m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(exctsccr_state::exctsccr_get_bg_tile_info)), TILEMAP_SCAN_ROWS, 8, 8, 32, 32);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*************************************
|
||||||
|
*
|
||||||
|
* Video update
|
||||||
|
*
|
||||||
|
*************************************/
|
||||||
|
|
||||||
|
void champbas_state::champbas_draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||||
|
{
|
||||||
|
gfx_element* const gfx = m_gfxdecode->gfx(1);
|
||||||
|
assert (m_spriteram.bytes() == 0x10);
|
||||||
|
|
||||||
|
for (int offs = 0x10-2; offs >= 0; offs -= 2)
|
||||||
|
{
|
||||||
|
// spriteram holds x/y data
|
||||||
|
int sx = m_spriteram[offs + 1] - 16;
|
||||||
|
int sy = 255 - m_spriteram[offs];
|
||||||
|
|
||||||
|
// attribute data is from last section of mainram
|
||||||
|
uint8_t *attr = &(m_mainram[0x7f0]);
|
||||||
|
int code = (attr[offs] >> 2 & 0x3f) | (m_gfx_bank << 6);
|
||||||
|
int color = (attr[offs + 1] & 0x1f) | (m_palette_bank << 6);
|
||||||
|
int flipx = ~attr[offs] & 1;
|
||||||
|
int flipy = ~attr[offs] & 2;
|
||||||
|
|
||||||
|
gfx->transmask(bitmap, cliprect,
|
||||||
|
code, color,
|
||||||
|
flipx, flipy,
|
||||||
|
sx, sy,
|
||||||
|
m_palette->transpen_mask(*gfx, color, 0));
|
||||||
|
|
||||||
|
// wraparound
|
||||||
|
gfx->transmask(bitmap, cliprect,
|
||||||
|
code, color,
|
||||||
|
flipx, flipy,
|
||||||
|
sx + 256, sy,
|
||||||
|
m_palette->transpen_mask(*gfx, color, 0));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void exctsccr_state::exctsccr_draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||||
|
{
|
||||||
|
gfx_element* const gfx1 = m_gfxdecode->gfx(1);
|
||||||
|
gfx_element* const gfx2 = m_gfxdecode->gfx(2);
|
||||||
|
assert (m_spriteram.bytes() == 0x10);
|
||||||
|
|
||||||
|
for (int offs = 0x10-2; offs >= 0; offs -= 2)
|
||||||
|
{
|
||||||
|
// spriteram holds x/y data
|
||||||
|
int sx = m_spriteram[offs + 1] - 16;
|
||||||
|
int sy = 255 - m_spriteram[offs];
|
||||||
|
|
||||||
|
// attribute data is from videoram
|
||||||
|
int code = (m_vram[offs] >> 2 & 0x3f) | (m_vram[offs + 1] << 2 & 0x40);
|
||||||
|
int flipx = ~m_vram[offs] & 1;
|
||||||
|
int flipy = ~m_vram[offs] & 2;
|
||||||
|
int color = m_vram[offs + 1] & 0xf;
|
||||||
|
|
||||||
|
gfx1->transpen(bitmap, cliprect,
|
||||||
|
code, color,
|
||||||
|
flipx, flipy,
|
||||||
|
sx, sy, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int offs = 0x10-2; offs >= 0; offs -= 2)
|
||||||
|
{
|
||||||
|
// spriteram2 holds x/y data
|
||||||
|
int sx = m_spriteram2[offs + 1] - 16;
|
||||||
|
int sy = 255 - m_spriteram2[offs];
|
||||||
|
|
||||||
|
// attribute data is from mainram
|
||||||
|
int code = m_mainram[offs] >> 2 & 0x3f;
|
||||||
|
int flipx = ~m_mainram[offs] & 1;
|
||||||
|
int flipy = ~m_mainram[offs] & 2;
|
||||||
|
int color = m_mainram[offs + 1] & 0xf;
|
||||||
|
|
||||||
|
gfx2->transmask(bitmap, cliprect,
|
||||||
|
code, color,
|
||||||
|
flipx, flipy,
|
||||||
|
sx, sy,
|
||||||
|
m_palette->transpen_mask(*gfx2, color, 0x10));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
uint32_t champbas_state::screen_update_champbas(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||||
|
{
|
||||||
|
m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0);
|
||||||
|
champbas_draw_sprites(bitmap, cliprect);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t exctsccr_state::screen_update_exctsccr(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||||
|
{
|
||||||
|
m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0);
|
||||||
|
exctsccr_draw_sprites(bitmap, cliprect);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -115,6 +498,29 @@ TIMER_DEVICE_CALLBACK_MEMBER(exctsccr_state::exctsccr_sound_irq)
|
|||||||
m_audiocpu->set_input_line_and_vector(0, HOLD_LINE, 0xff); // Z80
|
m_audiocpu->set_input_line_and_vector(0, HOLD_LINE, 0xff); // Z80
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void champbas_state::tilemap_w(offs_t offset, uint8_t data)
|
||||||
|
{
|
||||||
|
m_vram[offset] = data;
|
||||||
|
m_bg_tilemap->mark_tile_dirty(offset & 0x3ff);
|
||||||
|
}
|
||||||
|
|
||||||
|
void champbas_state::gfxbank_w(int state)
|
||||||
|
{
|
||||||
|
m_gfx_bank = state;
|
||||||
|
m_bg_tilemap->mark_all_dirty();
|
||||||
|
}
|
||||||
|
|
||||||
|
void champbas_state::palette_bank_w(int state)
|
||||||
|
{
|
||||||
|
m_palette_bank = state;
|
||||||
|
m_bg_tilemap->set_palette_offset(m_palette_bank << 8);
|
||||||
|
}
|
||||||
|
|
||||||
|
void champbas_state::flipscreen_w(int state)
|
||||||
|
{
|
||||||
|
flip_screen_set(!state);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*************************************
|
/*************************************
|
||||||
@ -501,11 +907,6 @@ GFXDECODE_END
|
|||||||
|
|
||||||
void champbas_state::machine_start()
|
void champbas_state::machine_start()
|
||||||
{
|
{
|
||||||
// zerofill
|
|
||||||
m_irq_mask = 0;
|
|
||||||
m_palette_bank = 0;
|
|
||||||
m_gfx_bank = 0;
|
|
||||||
|
|
||||||
// register for savestates
|
// register for savestates
|
||||||
save_item(NAME(m_irq_mask));
|
save_item(NAME(m_irq_mask));
|
||||||
save_item(NAME(m_palette_bank));
|
save_item(NAME(m_palette_bank));
|
||||||
@ -1290,6 +1691,8 @@ void exctsccr_state::init_exctsccr()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
} // anonymous namespace
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*************************************
|
/*************************************
|
||||||
|
@ -1,139 +0,0 @@
|
|||||||
// license:BSD-3-Clause
|
|
||||||
// copyright-holders:Ernesto Corvi, Jarek Parchanski, Nicola Salmoria
|
|
||||||
/*************************************************************************
|
|
||||||
|
|
||||||
Talbot - Champion Base Ball - Exciting Soccer
|
|
||||||
|
|
||||||
*************************************************************************/
|
|
||||||
#ifndef MAME_ALPHA_CHAMPBAS_H
|
|
||||||
#define MAME_ALPHA_CHAMPBAS_H
|
|
||||||
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#include "machine/74259.h"
|
|
||||||
#include "alpha8201.h"
|
|
||||||
#include "machine/timer.h"
|
|
||||||
#include "machine/watchdog.h"
|
|
||||||
#include "emupal.h"
|
|
||||||
#include "tilemap.h"
|
|
||||||
|
|
||||||
|
|
||||||
class champbas_state : public driver_device
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
champbas_state(const machine_config &mconfig, device_type type, const char *tag) :
|
|
||||||
driver_device(mconfig, type, tag),
|
|
||||||
m_maincpu(*this, "maincpu"),
|
|
||||||
m_mainlatch(*this, "mainlatch"),
|
|
||||||
m_alpha_8201(*this, "alpha_8201"),
|
|
||||||
m_watchdog(*this, "watchdog"),
|
|
||||||
m_gfxdecode(*this, "gfxdecode"),
|
|
||||||
m_palette(*this, "palette"),
|
|
||||||
m_mainram(*this, "mainram"),
|
|
||||||
m_vram(*this, "vram"),
|
|
||||||
m_spriteram(*this, "spriteram"),
|
|
||||||
m_spriteram2(*this, "spriteram2")
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
int watchdog_bit2();
|
|
||||||
|
|
||||||
void init_champbas();
|
|
||||||
|
|
||||||
void champbas(machine_config &config);
|
|
||||||
void champbb2(machine_config &config);
|
|
||||||
void champbb2j(machine_config &config);
|
|
||||||
void talbot(machine_config &config);
|
|
||||||
void tbasebal(machine_config &config);
|
|
||||||
void champbasjb(machine_config &config);
|
|
||||||
void champbasj(machine_config &config);
|
|
||||||
void champbasja(machine_config &config);
|
|
||||||
|
|
||||||
protected:
|
|
||||||
// handlers
|
|
||||||
void irq_enable_w(int state);
|
|
||||||
uint8_t champbja_protection_r(offs_t offset);
|
|
||||||
|
|
||||||
void vblank_irq(int state);
|
|
||||||
|
|
||||||
void tilemap_w(offs_t offset, uint8_t data);
|
|
||||||
void gfxbank_w(int state);
|
|
||||||
void palette_bank_w(int state);
|
|
||||||
void flipscreen_w(int state);
|
|
||||||
|
|
||||||
void champbas_palette(palette_device &palette) const;
|
|
||||||
TILE_GET_INFO_MEMBER(champbas_get_bg_tile_info);
|
|
||||||
|
|
||||||
uint32_t screen_update_champbas(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
|
||||||
void champbas_draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect);
|
|
||||||
|
|
||||||
virtual void machine_start() override;
|
|
||||||
virtual void video_start() override;
|
|
||||||
|
|
||||||
void champbas_map(address_map &map);
|
|
||||||
void champbasj_map(address_map &map);
|
|
||||||
void champbasja_map(address_map &map);
|
|
||||||
void champbasjb_map(address_map &map);
|
|
||||||
void champbb2_map(address_map &map);
|
|
||||||
void champbb2j_map(address_map &map);
|
|
||||||
void tbasebal_map(address_map &map);
|
|
||||||
void champbas_sound_map(address_map &map);
|
|
||||||
|
|
||||||
// devices, memory pointers
|
|
||||||
required_device<cpu_device> m_maincpu;
|
|
||||||
required_device<ls259_device> m_mainlatch;
|
|
||||||
optional_device<alpha_8201_device> m_alpha_8201;
|
|
||||||
required_device<watchdog_timer_device> m_watchdog;
|
|
||||||
required_device<gfxdecode_device> m_gfxdecode;
|
|
||||||
required_device<palette_device> m_palette;
|
|
||||||
|
|
||||||
required_shared_ptr<uint8_t> m_mainram;
|
|
||||||
required_shared_ptr<uint8_t> m_vram;
|
|
||||||
required_shared_ptr<uint8_t> m_spriteram;
|
|
||||||
optional_shared_ptr<uint8_t> m_spriteram2;
|
|
||||||
|
|
||||||
// internal state
|
|
||||||
uint8_t m_irq_mask = 0U;
|
|
||||||
tilemap_t *m_bg_tilemap = nullptr;
|
|
||||||
uint8_t m_gfx_bank = 0U;
|
|
||||||
uint8_t m_palette_bank = 0U;
|
|
||||||
};
|
|
||||||
|
|
||||||
class exctsccr_state : public champbas_state
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
exctsccr_state(const machine_config &mconfig, device_type type, const char *tag) :
|
|
||||||
champbas_state(mconfig, type, tag),
|
|
||||||
m_audiocpu(*this, "audiocpu")
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void init_exctsccr();
|
|
||||||
|
|
||||||
void exctsccr(machine_config &config);
|
|
||||||
void exctsccrb(machine_config &config);
|
|
||||||
void exctscc2(machine_config &config);
|
|
||||||
|
|
||||||
protected:
|
|
||||||
TIMER_DEVICE_CALLBACK_MEMBER(exctsccr_sound_irq);
|
|
||||||
|
|
||||||
void exctsccr_palette(palette_device &palette) const;
|
|
||||||
TILE_GET_INFO_MEMBER(exctsccr_get_bg_tile_info);
|
|
||||||
|
|
||||||
uint32_t screen_update_exctsccr(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
|
||||||
|
|
||||||
void exctsccr_draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect);
|
|
||||||
|
|
||||||
virtual void video_start() override;
|
|
||||||
|
|
||||||
void exctsccr_map(address_map &map);
|
|
||||||
void exctsccrb_map(address_map &map);
|
|
||||||
void exctsccr_sound_map(address_map &map);
|
|
||||||
void exctsccr_sound_io_map(address_map &map);
|
|
||||||
void exctscc2_sound_io_map(address_map &map);
|
|
||||||
|
|
||||||
private:
|
|
||||||
required_device<cpu_device> m_audiocpu;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // MAME_ALPHA_CHAMPBAS_H
|
|
@ -1,299 +0,0 @@
|
|||||||
// license:BSD-3-Clause
|
|
||||||
// copyright-holders:Ernesto Corvi, Jarek Parchanski, Nicola Salmoria
|
|
||||||
/*************************************************************************
|
|
||||||
|
|
||||||
Talbot - Champion Base Ball - Exciting Soccer
|
|
||||||
|
|
||||||
*************************************************************************/
|
|
||||||
|
|
||||||
#include "emu.h"
|
|
||||||
#include "video/resnet.h"
|
|
||||||
#include "champbas.h"
|
|
||||||
|
|
||||||
|
|
||||||
/***************************************************************************
|
|
||||||
|
|
||||||
Convert the color PROMs into a more useable format.
|
|
||||||
|
|
||||||
The palette PROM is connected to the RGB output this way:
|
|
||||||
|
|
||||||
bit 7 -- 220 ohm resistor -- BLUE
|
|
||||||
-- 470 ohm resistor -- BLUE
|
|
||||||
-- 220 ohm resistor -- GREEN
|
|
||||||
-- 470 ohm resistor -- GREEN
|
|
||||||
-- 1 kohm resistor -- GREEN
|
|
||||||
-- 220 ohm resistor -- RED
|
|
||||||
-- 470 ohm resistor -- RED
|
|
||||||
bit 0 -- 1 kohm resistor -- RED
|
|
||||||
|
|
||||||
***************************************************************************/
|
|
||||||
|
|
||||||
void champbas_state::champbas_palette(palette_device &palette) const
|
|
||||||
{
|
|
||||||
const uint8_t *color_prom = memregion("proms")->base();
|
|
||||||
static const int resistances_rg[3] = { 1000, 470, 220 };
|
|
||||||
static const int resistances_b [2] = { 470, 220 };
|
|
||||||
|
|
||||||
/* compute the color output resistor weights */
|
|
||||||
double rweights[3], gweights[3], bweights[2];
|
|
||||||
compute_resistor_weights(0, 255, -1.0,
|
|
||||||
3, &resistances_rg[0], rweights, 0, 0,
|
|
||||||
3, &resistances_rg[0], gweights, 0, 0,
|
|
||||||
2, &resistances_b[0], bweights, 0, 0);
|
|
||||||
|
|
||||||
/* create a lookup table for the palette */
|
|
||||||
for (int i = 0; i < 0x20; i++)
|
|
||||||
{
|
|
||||||
int bit0, bit1, bit2;
|
|
||||||
|
|
||||||
/* red component */
|
|
||||||
bit0 = (color_prom[i] >> 0) & 0x01;
|
|
||||||
bit1 = (color_prom[i] >> 1) & 0x01;
|
|
||||||
bit2 = (color_prom[i] >> 2) & 0x01;
|
|
||||||
int const r = combine_weights(rweights, bit0, bit1, bit2);
|
|
||||||
|
|
||||||
/* green component */
|
|
||||||
bit0 = (color_prom[i] >> 3) & 0x01;
|
|
||||||
bit1 = (color_prom[i] >> 4) & 0x01;
|
|
||||||
bit2 = (color_prom[i] >> 5) & 0x01;
|
|
||||||
int const g = combine_weights(gweights, bit0, bit1, bit2);
|
|
||||||
|
|
||||||
/* blue component */
|
|
||||||
bit0 = (color_prom[i] >> 6) & 0x01;
|
|
||||||
bit1 = (color_prom[i] >> 7) & 0x01;
|
|
||||||
int const b = combine_weights(bweights, bit0, bit1);
|
|
||||||
|
|
||||||
palette.set_indirect_color(i, rgb_t(r, g, b));
|
|
||||||
}
|
|
||||||
|
|
||||||
color_prom += 0x20;
|
|
||||||
|
|
||||||
for (int i = 0; i < 0x200; i++)
|
|
||||||
{
|
|
||||||
uint8_t const ctabentry = (color_prom[i & 0xff] & 0x0f) | ((i & 0x100) >> 4);
|
|
||||||
palette.set_pen_indirect(i, ctabentry);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void exctsccr_state::exctsccr_palette(palette_device &palette) const
|
|
||||||
{
|
|
||||||
const uint8_t *color_prom = memregion("proms")->base();
|
|
||||||
|
|
||||||
/* create a lookup table for the palette */
|
|
||||||
for (int i = 0; i < 0x20; i++)
|
|
||||||
{
|
|
||||||
int bit0, bit1, bit2;
|
|
||||||
|
|
||||||
/* red component */
|
|
||||||
bit0 = (color_prom[i] >> 0) & 0x01;
|
|
||||||
bit1 = (color_prom[i] >> 1) & 0x01;
|
|
||||||
bit2 = (color_prom[i] >> 2) & 0x01;
|
|
||||||
int const r = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2;
|
|
||||||
|
|
||||||
/* green component */
|
|
||||||
bit0 = (color_prom[i] >> 3) & 0x01;
|
|
||||||
bit1 = (color_prom[i] >> 4) & 0x01;
|
|
||||||
bit2 = (color_prom[i] >> 5) & 0x01;
|
|
||||||
int const g = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2;
|
|
||||||
|
|
||||||
/* blue component */
|
|
||||||
bit0 = 0;
|
|
||||||
bit1 = (color_prom[i] >> 6) & 0x01;
|
|
||||||
bit2 = (color_prom[i] >> 7) & 0x01;
|
|
||||||
int const b = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2;
|
|
||||||
|
|
||||||
palette.set_indirect_color(i, rgb_t(r, g, b));
|
|
||||||
}
|
|
||||||
|
|
||||||
/* color_prom now points to the beginning of the lookup table */
|
|
||||||
color_prom += 0x20;
|
|
||||||
|
|
||||||
/* characters / sprites (3bpp) */
|
|
||||||
for (int i = 0; i < 0x100; i++)
|
|
||||||
{
|
|
||||||
int const swapped_i = bitswap<8>(i, 2, 7, 6, 5, 4, 3, 1, 0);
|
|
||||||
uint8_t const ctabentry = (color_prom[swapped_i] & 0x0f) | ((i & 0x80) >> 3);
|
|
||||||
palette.set_pen_indirect(i, ctabentry);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* sprites (4bpp) */
|
|
||||||
for (int i = 0; i < 0x100; i++)
|
|
||||||
{
|
|
||||||
uint8_t const ctabentry = (color_prom[0x100 + i] & 0x0f) | 0x10;
|
|
||||||
palette.set_pen_indirect(i + 0x100, ctabentry);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*************************************
|
|
||||||
*
|
|
||||||
* Callbacks for the TileMap code
|
|
||||||
*
|
|
||||||
*************************************/
|
|
||||||
|
|
||||||
TILE_GET_INFO_MEMBER(champbas_state::champbas_get_bg_tile_info)
|
|
||||||
{
|
|
||||||
int const code = m_vram[tile_index] | (m_gfx_bank << 8);
|
|
||||||
int const color = (m_vram[tile_index + 0x400] & 0x1f) | 0x20;
|
|
||||||
|
|
||||||
tileinfo.set(0, code, color, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
TILE_GET_INFO_MEMBER(exctsccr_state::exctsccr_get_bg_tile_info)
|
|
||||||
{
|
|
||||||
int const code = m_vram[tile_index] | (m_gfx_bank << 8);
|
|
||||||
int const color = m_vram[tile_index + 0x400] & 0x0f;
|
|
||||||
|
|
||||||
tileinfo.set(0, code, color, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*************************************
|
|
||||||
*
|
|
||||||
* Video system start
|
|
||||||
*
|
|
||||||
*************************************/
|
|
||||||
|
|
||||||
void champbas_state::video_start()
|
|
||||||
{
|
|
||||||
m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(champbas_state::champbas_get_bg_tile_info)), TILEMAP_SCAN_ROWS, 8, 8, 32, 32);
|
|
||||||
}
|
|
||||||
|
|
||||||
void exctsccr_state::video_start()
|
|
||||||
{
|
|
||||||
m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(exctsccr_state::exctsccr_get_bg_tile_info)), TILEMAP_SCAN_ROWS, 8, 8, 32, 32);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*************************************
|
|
||||||
*
|
|
||||||
* Memory handlers
|
|
||||||
*
|
|
||||||
*************************************/
|
|
||||||
|
|
||||||
void champbas_state::tilemap_w(offs_t offset, uint8_t data)
|
|
||||||
{
|
|
||||||
m_vram[offset] = data;
|
|
||||||
m_bg_tilemap->mark_tile_dirty(offset & 0x3ff);
|
|
||||||
}
|
|
||||||
|
|
||||||
void champbas_state::gfxbank_w(int state)
|
|
||||||
{
|
|
||||||
m_gfx_bank = state;
|
|
||||||
m_bg_tilemap->mark_all_dirty();
|
|
||||||
}
|
|
||||||
|
|
||||||
void champbas_state::palette_bank_w(int state)
|
|
||||||
{
|
|
||||||
m_palette_bank = state;
|
|
||||||
m_bg_tilemap->set_palette_offset(m_palette_bank << 8);
|
|
||||||
}
|
|
||||||
|
|
||||||
void champbas_state::flipscreen_w(int state)
|
|
||||||
{
|
|
||||||
flip_screen_set(!state);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*************************************
|
|
||||||
*
|
|
||||||
* Video update
|
|
||||||
*
|
|
||||||
*************************************/
|
|
||||||
|
|
||||||
void champbas_state::champbas_draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect)
|
|
||||||
{
|
|
||||||
gfx_element* const gfx = m_gfxdecode->gfx(1);
|
|
||||||
assert (m_spriteram.bytes() == 0x10);
|
|
||||||
|
|
||||||
for (int offs = 0x10-2; offs >= 0; offs -= 2)
|
|
||||||
{
|
|
||||||
// spriteram holds x/y data
|
|
||||||
int sx = m_spriteram[offs + 1] - 16;
|
|
||||||
int sy = 255 - m_spriteram[offs];
|
|
||||||
|
|
||||||
// attribute data is from last section of mainram
|
|
||||||
uint8_t *attr = &(m_mainram[0x7f0]);
|
|
||||||
int code = (attr[offs] >> 2 & 0x3f) | (m_gfx_bank << 6);
|
|
||||||
int color = (attr[offs + 1] & 0x1f) | (m_palette_bank << 6);
|
|
||||||
int flipx = ~attr[offs] & 1;
|
|
||||||
int flipy = ~attr[offs] & 2;
|
|
||||||
|
|
||||||
gfx->transmask(bitmap, cliprect,
|
|
||||||
code, color,
|
|
||||||
flipx, flipy,
|
|
||||||
sx, sy,
|
|
||||||
m_palette->transpen_mask(*gfx, color, 0));
|
|
||||||
|
|
||||||
// wraparound
|
|
||||||
gfx->transmask(bitmap, cliprect,
|
|
||||||
code, color,
|
|
||||||
flipx, flipy,
|
|
||||||
sx + 256, sy,
|
|
||||||
m_palette->transpen_mask(*gfx, color, 0));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void exctsccr_state::exctsccr_draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect)
|
|
||||||
{
|
|
||||||
gfx_element* const gfx1 = m_gfxdecode->gfx(1);
|
|
||||||
gfx_element* const gfx2 = m_gfxdecode->gfx(2);
|
|
||||||
assert (m_spriteram.bytes() == 0x10);
|
|
||||||
|
|
||||||
for (int offs = 0x10-2; offs >= 0; offs -= 2)
|
|
||||||
{
|
|
||||||
// spriteram holds x/y data
|
|
||||||
int sx = m_spriteram[offs + 1] - 16;
|
|
||||||
int sy = 255 - m_spriteram[offs];
|
|
||||||
|
|
||||||
// attribute data is from videoram
|
|
||||||
int code = (m_vram[offs] >> 2 & 0x3f) | (m_vram[offs + 1] << 2 & 0x40);
|
|
||||||
int flipx = ~m_vram[offs] & 1;
|
|
||||||
int flipy = ~m_vram[offs] & 2;
|
|
||||||
int color = m_vram[offs + 1] & 0xf;
|
|
||||||
|
|
||||||
gfx1->transpen(bitmap, cliprect,
|
|
||||||
code, color,
|
|
||||||
flipx, flipy,
|
|
||||||
sx, sy, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int offs = 0x10-2; offs >= 0; offs -= 2)
|
|
||||||
{
|
|
||||||
// spriteram2 holds x/y data
|
|
||||||
int sx = m_spriteram2[offs + 1] - 16;
|
|
||||||
int sy = 255 - m_spriteram2[offs];
|
|
||||||
|
|
||||||
// attribute data is from mainram
|
|
||||||
int code = m_mainram[offs] >> 2 & 0x3f;
|
|
||||||
int flipx = ~m_mainram[offs] & 1;
|
|
||||||
int flipy = ~m_mainram[offs] & 2;
|
|
||||||
int color = m_mainram[offs + 1] & 0xf;
|
|
||||||
|
|
||||||
gfx2->transmask(bitmap, cliprect,
|
|
||||||
code, color,
|
|
||||||
flipx, flipy,
|
|
||||||
sx, sy,
|
|
||||||
m_palette->transpen_mask(*gfx2, color, 0x10));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
uint32_t champbas_state::screen_update_champbas(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
|
||||||
{
|
|
||||||
m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0);
|
|
||||||
champbas_draw_sprites(bitmap, cliprect);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
uint32_t exctsccr_state::screen_update_exctsccr(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
|
||||||
{
|
|
||||||
m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0);
|
|
||||||
exctsccr_draw_sprites(bitmap, cliprect);
|
|
||||||
return 0;
|
|
||||||
}
|
|
@ -6,15 +6,13 @@ license:CC0-1.0
|
|||||||
|
|
||||||
<element name="overlay">
|
<element name="overlay">
|
||||||
|
|
||||||
<!-- backdrop -->
|
<!-- backdrop -->
|
||||||
|
|
||||||
<rect>
|
<rect>
|
||||||
<color red="0.0" green="0.85" blue="0.20" />
|
<color red="0.0" green="0.85" blue="0.20" />
|
||||||
<bounds x="0" y="0" width="6000" height="6000" />
|
<bounds x="0" y="0" width="6000" height="6000" />
|
||||||
</rect>
|
</rect>
|
||||||
|
|
||||||
<!-- top-left blob -->
|
<!-- top-left blob -->
|
||||||
|
|
||||||
<disk>
|
<disk>
|
||||||
<color red="0.0" green="0.85" blue="0.20" />
|
<color red="0.0" green="0.85" blue="0.20" />
|
||||||
<bounds x="0" y="0" width="2500" height="2500" />
|
<bounds x="0" y="0" width="2500" height="2500" />
|
||||||
@ -52,8 +50,7 @@ license:CC0-1.0
|
|||||||
<bounds x="304" y="304" width="1892" height="1892" />
|
<bounds x="304" y="304" width="1892" height="1892" />
|
||||||
</disk>
|
</disk>
|
||||||
|
|
||||||
<!-- top-right blob -->
|
<!-- top-right blob -->
|
||||||
|
|
||||||
<disk>
|
<disk>
|
||||||
<color red="0.0" green="0.85" blue="0.20" />
|
<color red="0.0" green="0.85" blue="0.20" />
|
||||||
<bounds x="3500" y="0" width="2500" height="2500" />
|
<bounds x="3500" y="0" width="2500" height="2500" />
|
||||||
@ -91,8 +88,7 @@ license:CC0-1.0
|
|||||||
<bounds x="3804" y="304" width="1892" height="1892" />
|
<bounds x="3804" y="304" width="1892" height="1892" />
|
||||||
</disk>
|
</disk>
|
||||||
|
|
||||||
<!-- bottom-left blob -->
|
<!-- bottom-left blob -->
|
||||||
|
|
||||||
<disk>
|
<disk>
|
||||||
<color red="0.0" green="0.85" blue="0.20" />
|
<color red="0.0" green="0.85" blue="0.20" />
|
||||||
<bounds x="0" y="3500" width="2500" height="2500" />
|
<bounds x="0" y="3500" width="2500" height="2500" />
|
||||||
@ -130,8 +126,7 @@ license:CC0-1.0
|
|||||||
<bounds x="304" y="3804" width="1892" height="1892" />
|
<bounds x="304" y="3804" width="1892" height="1892" />
|
||||||
</disk>
|
</disk>
|
||||||
|
|
||||||
<!-- bottom-right blob -->
|
<!-- bottom-right blob -->
|
||||||
|
|
||||||
<disk>
|
<disk>
|
||||||
<color red="0.0" green="0.85" blue="0.20" />
|
<color red="0.0" green="0.85" blue="0.20" />
|
||||||
<bounds x="3500" y="3500" width="2500" height="2500" />
|
<bounds x="3500" y="3500" width="2500" height="2500" />
|
||||||
@ -169,9 +164,8 @@ license:CC0-1.0
|
|||||||
<bounds x="3804" y="3804" width="1892" height="1892" />
|
<bounds x="3804" y="3804" width="1892" height="1892" />
|
||||||
</disk>
|
</disk>
|
||||||
|
|
||||||
<!-- middle blob - note: it should be a more diamond shape, -->
|
<!-- middle blob - note: it should be a more diamond shape, -->
|
||||||
<!-- see MT 1064, but MAME internal layout can't do that -->
|
<!-- see MT 1064, but MAME internal layout can't do that -->
|
||||||
|
|
||||||
<disk>
|
<disk>
|
||||||
<color red="0.0" green="0.85" blue="0.2" />
|
<color red="0.0" green="0.85" blue="0.2" />
|
||||||
<bounds x="2000" y="2000" width="2000" height="2000" />
|
<bounds x="2000" y="2000" width="2000" height="2000" />
|
||||||
@ -204,11 +198,9 @@ license:CC0-1.0
|
|||||||
<color red="1.0" green="0.85" blue="0.2" />
|
<color red="1.0" green="0.85" blue="0.2" />
|
||||||
<bounds x="2140" y="2140" width="1720" height="1720" />
|
<bounds x="2140" y="2140" width="1720" height="1720" />
|
||||||
</disk>
|
</disk>
|
||||||
|
|
||||||
</element>
|
</element>
|
||||||
|
|
||||||
|
<view name="Color Overlay (For B/W)">
|
||||||
<view name="Color Overlay">
|
|
||||||
<bounds left="0" top="0" right="400" bottom="300" />
|
<bounds left="0" top="0" right="400" bottom="300" />
|
||||||
|
|
||||||
<screen index="0">
|
<screen index="0">
|
||||||
@ -219,4 +211,5 @@ license:CC0-1.0
|
|||||||
<bounds x="-100" y="-150" width="600" height="600" />
|
<bounds x="-100" y="-150" width="600" height="600" />
|
||||||
</element>
|
</element>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
</mamelayout>
|
</mamelayout>
|
||||||
|
Loading…
Reference in New Issue
Block a user