mirror of
https://github.com/holub/mame
synced 2025-10-05 08:41:31 +03:00
champbas.c driver needs cleanup, i'll continue on that if i can sort out MCU emulation for it (via hmcs40 instead simulation)
This commit is contained in:
parent
44f7998a9a
commit
a6094ce5aa
@ -256,6 +256,7 @@ void running_machine::start()
|
||||
m_memory.initialize();
|
||||
|
||||
// initialize the watchdog
|
||||
m_watchdog_counter = 0;
|
||||
m_watchdog_timer = m_scheduler.timer_alloc(timer_expired_delegate(FUNC(running_machine::watchdog_fired), this));
|
||||
if (config().m_watchdog_vblank_count != 0 && primary_screen != NULL)
|
||||
primary_screen->register_vblank_callback(vblank_state_delegate(FUNC(running_machine::watchdog_vblank), this));
|
||||
|
@ -226,6 +226,7 @@ public:
|
||||
// watchdog control
|
||||
void watchdog_reset();
|
||||
void watchdog_enable(bool enable = true);
|
||||
INT32 get_vblank_watchdog_counter() { return m_watchdog_counter; }
|
||||
|
||||
// misc
|
||||
void CLIB_DECL vlogerror(const char *format, va_list args);
|
||||
|
@ -40,7 +40,7 @@ write:
|
||||
7001 8910 control
|
||||
8ff0-8fff sprites
|
||||
a000 ?
|
||||
a006 MCU HALT controll
|
||||
a006 MCU HALT control
|
||||
a007 NOP (MCU shared RAM switch)
|
||||
a060-a06f sprites
|
||||
a080 command for the sound CPU
|
||||
@ -86,6 +86,7 @@ TODO:
|
||||
#include "emu.h"
|
||||
#include "cpu/z80/z80.h"
|
||||
#include "cpu/alph8201/alph8201.h"
|
||||
//#include "cpu/hmcs40/hmcs40.h"
|
||||
#include "sound/ay8910.h"
|
||||
#include "sound/dac.h"
|
||||
#include "includes/champbas.h"
|
||||
@ -567,7 +568,7 @@ GFXDECODE_END
|
||||
|
||||
/*************************************
|
||||
*
|
||||
* Machine driver
|
||||
* Machine drivers
|
||||
*
|
||||
*************************************/
|
||||
|
||||
@ -581,6 +582,7 @@ MACHINE_START_MEMBER(champbas_state,champbas)
|
||||
MACHINE_START_MEMBER(champbas_state,exctsccr)
|
||||
{
|
||||
// FIXME
|
||||
// I dun wanna
|
||||
machine().scheduler().timer_pulse(attotime::from_hz(75), timer_expired_delegate(FUNC(champbas_state::exctsccr_fm_callback),this)); /* updates fm */
|
||||
|
||||
MACHINE_START_CALL_MEMBER(champbas);
|
||||
@ -595,7 +597,7 @@ MACHINE_RESET_MEMBER(champbas_state,champbas)
|
||||
|
||||
INTERRUPT_GEN_MEMBER(champbas_state::vblank_irq)
|
||||
{
|
||||
if(m_irq_mask)
|
||||
if (m_irq_mask)
|
||||
device.execute().set_input_line(0, ASSERT_LINE);
|
||||
}
|
||||
|
||||
@ -608,7 +610,7 @@ static MACHINE_CONFIG_START( talbot, champbas_state )
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("screen", champbas_state, vblank_irq)
|
||||
|
||||
/* MCU */
|
||||
MCFG_CPU_ADD(CPUTAG_MCU, ALPHA8201, XTAL_18_432MHz/6/8)
|
||||
MCFG_CPU_ADD("mcu", ALPHA8201, XTAL_18_432MHz/6/8)
|
||||
MCFG_CPU_PROGRAM_MAP(mcu_map)
|
||||
|
||||
MCFG_MACHINE_START_OVERRIDE(champbas_state,champbas)
|
||||
@ -681,7 +683,7 @@ static MACHINE_CONFIG_DERIVED( champmcu, champbas )
|
||||
/* basic machine hardware */
|
||||
|
||||
/* MCU */
|
||||
MCFG_CPU_ADD(CPUTAG_MCU, ALPHA8201, XTAL_18_432MHz/6/8)
|
||||
MCFG_CPU_ADD("mcu", ALPHA8201, XTAL_18_432MHz/6/8)
|
||||
MCFG_CPU_PROGRAM_MAP(mcu_map)
|
||||
|
||||
/* to MCU timeout champbbj */
|
||||
@ -702,7 +704,7 @@ static MACHINE_CONFIG_START( exctsccr, champbas_state )
|
||||
MCFG_CPU_PERIODIC_INT_DRIVER(champbas_state, nmi_line_pulse, 4000) /* 4 kHz, updates the dac */
|
||||
|
||||
/* MCU */
|
||||
MCFG_CPU_ADD(CPUTAG_MCU, ALPHA8301, XTAL_18_432MHz/6/8) /* Actually 8302 */
|
||||
MCFG_CPU_ADD("mcu", ALPHA8301, XTAL_18_432MHz/6/8) /* Actually 8302 */
|
||||
MCFG_CPU_PROGRAM_MAP(mcu_map)
|
||||
|
||||
MCFG_MACHINE_START_OVERRIDE(champbas_state,exctsccr)
|
||||
|
@ -6,10 +6,9 @@
|
||||
|
||||
*************************************************************************/
|
||||
|
||||
|
||||
#define CPUTAG_MCU "mcu"
|
||||
#include "sound/dac.h"
|
||||
|
||||
|
||||
class champbas_state : public driver_device
|
||||
{
|
||||
public:
|
||||
@ -20,12 +19,13 @@ public:
|
||||
m_spriteram_2(*this, "spriteram_2"),
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_audiocpu(*this, "audiocpu"),
|
||||
m_mcu(*this, CPUTAG_MCU),
|
||||
m_mcu(*this, "mcu"),
|
||||
m_dac(*this, "dac"),
|
||||
m_dac1(*this, "dac1"),
|
||||
m_dac2(*this, "dac2"),
|
||||
m_gfxdecode(*this, "gfxdecode"),
|
||||
m_palette(*this, "palette"){ }
|
||||
m_palette(*this, "palette")
|
||||
{ }
|
||||
|
||||
/* memory pointers */
|
||||
required_shared_ptr<UINT8> m_bg_videoram;
|
||||
|
@ -1,5 +1,11 @@
|
||||
// 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 "includes/champbas.h"
|
||||
@ -28,7 +34,6 @@ PALETTE_INIT_MEMBER(champbas_state,champbas)
|
||||
static const int resistances_rg[3] = { 1000, 470, 220 };
|
||||
static const int resistances_b [2] = { 470, 220 };
|
||||
double rweights[3], gweights[3], bweights[2];
|
||||
int i;
|
||||
|
||||
/* compute the color output resistor weights */
|
||||
compute_resistor_weights(0, 255, -1.0,
|
||||
@ -37,7 +42,7 @@ PALETTE_INIT_MEMBER(champbas_state,champbas)
|
||||
2, &resistances_b[0], bweights, 0, 0);
|
||||
|
||||
/* create a lookup table for the palette */
|
||||
for (i = 0; i < 0x20; i++)
|
||||
for (int i = 0; i < 0x20; i++)
|
||||
{
|
||||
int bit0, bit1, bit2;
|
||||
int r, g, b;
|
||||
@ -64,7 +69,7 @@ PALETTE_INIT_MEMBER(champbas_state,champbas)
|
||||
|
||||
color_prom += 0x20;
|
||||
|
||||
for (i = 0; i < 0x200; i++)
|
||||
for (int i = 0; i < 0x200; i++)
|
||||
{
|
||||
UINT8 ctabentry = (color_prom[i & 0xff] & 0x0f) | ((i & 0x100) >> 4);
|
||||
palette.set_pen_indirect(i, ctabentry);
|
||||
@ -75,10 +80,9 @@ PALETTE_INIT_MEMBER(champbas_state,champbas)
|
||||
PALETTE_INIT_MEMBER(champbas_state,exctsccr)
|
||||
{
|
||||
const UINT8 *color_prom = memregion("proms")->base();
|
||||
int i;
|
||||
|
||||
/* create a lookup table for the palette */
|
||||
for (i = 0; i < 0x20; i++)
|
||||
for (int i = 0; i < 0x20; i++)
|
||||
{
|
||||
int bit0, bit1, bit2;
|
||||
int r, g, b;
|
||||
@ -108,7 +112,7 @@ PALETTE_INIT_MEMBER(champbas_state,exctsccr)
|
||||
color_prom += 0x20;
|
||||
|
||||
/* characters / sprites (3bpp) */
|
||||
for (i = 0; i < 0x100; i++)
|
||||
for (int i = 0; i < 0x100; i++)
|
||||
{
|
||||
int swapped_i = BITSWAP8(i, 2, 7, 6, 5, 4, 3, 1, 0);
|
||||
UINT8 ctabentry = (color_prom[swapped_i] & 0x0f) | ((i & 0x80) >> 3);
|
||||
@ -116,7 +120,7 @@ PALETTE_INIT_MEMBER(champbas_state,exctsccr)
|
||||
}
|
||||
|
||||
/* sprites (4bpp) */
|
||||
for (i = 0; i < 0x100; i++)
|
||||
for (int i = 0; i < 0x100; i++)
|
||||
{
|
||||
UINT8 ctabentry = (color_prom[0x100 + i] & 0x0f) | 0x10;
|
||||
palette.set_pen_indirect(i + 0x100, ctabentry);
|
||||
@ -186,10 +190,9 @@ WRITE8_MEMBER(champbas_state::champbas_flipscreen_w)
|
||||
|
||||
void champbas_state::champbas_draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect )
|
||||
{
|
||||
int offs;
|
||||
gfx_element* const gfx = m_gfxdecode->gfx(1);
|
||||
|
||||
for (offs = m_spriteram.bytes() - 2; offs >= 0; offs -= 2)
|
||||
for (int offs = m_spriteram.bytes() - 2; offs >= 0; offs -= 2)
|
||||
{
|
||||
int code = (m_spriteram[offs] >> 2) | (m_gfx_bank << 6);
|
||||
int color = (m_spriteram[offs + 1] & 0x1f) | (m_palette_bank << 6);
|
||||
@ -198,32 +201,29 @@ void champbas_state::champbas_draw_sprites( bitmap_ind16 &bitmap, const rectangl
|
||||
int sx = m_spriteram_2[offs + 1] - 16;
|
||||
int sy = 255 - m_spriteram_2[offs];
|
||||
|
||||
|
||||
gfx->transmask(bitmap,cliprect,
|
||||
code, color,
|
||||
flipx, flipy,
|
||||
sx, sy,
|
||||
m_palette->transpen_mask(*gfx, color, 0));
|
||||
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));
|
||||
gfx->transmask(bitmap,cliprect,
|
||||
code, color,
|
||||
flipx, flipy,
|
||||
sx + 256, sy,
|
||||
m_palette->transpen_mask(*gfx, color, 0));
|
||||
}
|
||||
}
|
||||
|
||||
void champbas_state::exctsccr_draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect )
|
||||
{
|
||||
int offs;
|
||||
UINT8 *obj1, *obj2;
|
||||
|
||||
obj1 = m_bg_videoram;
|
||||
obj2 = &(m_spriteram[0x20]);
|
||||
|
||||
for (offs = 0x0e; offs >= 0; offs -= 2)
|
||||
for (int offs = 0x0e; offs >= 0; offs -= 2)
|
||||
{
|
||||
int sx, sy, code, bank, flipx, flipy, color;
|
||||
|
||||
@ -236,18 +236,17 @@ void champbas_state::exctsccr_draw_sprites( bitmap_ind16 &bitmap, const rectangl
|
||||
color = (obj1[offs + 1]) & 0x0f;
|
||||
bank = ((obj1[offs + 1] >> 4) & 1);
|
||||
|
||||
|
||||
m_gfxdecode->gfx(1)->transpen(bitmap,cliprect,
|
||||
code + (bank << 6),
|
||||
color,
|
||||
flipx, flipy,
|
||||
sx,sy,0);
|
||||
m_gfxdecode->gfx(1)->transpen(bitmap,cliprect,
|
||||
code + (bank << 6),
|
||||
color,
|
||||
flipx, flipy,
|
||||
sx,sy,0);
|
||||
}
|
||||
|
||||
obj1 = m_spriteram_2;
|
||||
obj2 = m_spriteram;
|
||||
|
||||
for (offs = 0x0e; offs >= 0; offs -= 2)
|
||||
for (int offs = 0x0e; offs >= 0; offs -= 2)
|
||||
{
|
||||
int sx, sy, code, flipx, flipy, color;
|
||||
|
||||
@ -259,13 +258,12 @@ void champbas_state::exctsccr_draw_sprites( bitmap_ind16 &bitmap, const rectangl
|
||||
flipy = (~obj1[offs]) & 0x02;
|
||||
color = (obj1[offs + 1]) & 0x0f;
|
||||
|
||||
|
||||
m_gfxdecode->gfx(2)->transmask(bitmap,cliprect,
|
||||
code,
|
||||
color,
|
||||
flipx, flipy,
|
||||
sx,sy,
|
||||
m_palette->transpen_mask(*m_gfxdecode->gfx(2), color, 0x10));
|
||||
m_gfxdecode->gfx(2)->transmask(bitmap,cliprect,
|
||||
code,
|
||||
color,
|
||||
flipx, flipy,
|
||||
sx,sy,
|
||||
m_palette->transpen_mask(*m_gfxdecode->gfx(2), color, 0x10));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1832,7 +1832,7 @@ static device_info *rawinput_device_create(running_machine &machine, device_info
|
||||
if ((*get_rawinput_device_info)(device->hDevice, RIDI_DEVICENAME, NULL, &name_length) != 0)
|
||||
goto error;
|
||||
tname = global_alloc_array_clear(TCHAR, name_length+1);
|
||||
if (name_length != 1 && (*get_rawinput_device_info)(device->hDevice, RIDI_DEVICENAME, tname, &name_length) == -1)
|
||||
if (name_length > 1 && (*get_rawinput_device_info)(device->hDevice, RIDI_DEVICENAME, tname, &name_length) == -1)
|
||||
goto error;
|
||||
|
||||
// if this is an RDP name, skip it
|
||||
|
Loading…
Reference in New Issue
Block a user