mirror of
https://github.com/holub/mame
synced 2025-05-22 05:38:52 +03:00

Use shorter / correct type values, Remove unnecessary arguments in handlers, Duplicates device/bus/coco/cococart.cpp : Allow various types of delegates for install handler 5clown.cpp : Remove unnecessary arguments in some handler kchamp.cpp : Remove unnecessary arguments in some handler
144 lines
3.7 KiB
C++
144 lines
3.7 KiB
C++
// license:BSD-3-Clause
|
|
// copyright-holders:R. Belmont, Golden Child
|
|
/*********************************************************************
|
|
|
|
ssprite.cpp
|
|
|
|
Implementation of the Synetix SuperSprite
|
|
|
|
*********************************************************************/
|
|
|
|
#include "emu.h"
|
|
#include "ssprite.h"
|
|
#include "sound/tms5220.h"
|
|
#include "speaker.h"
|
|
|
|
|
|
/***************************************************************************
|
|
PARAMETERS
|
|
***************************************************************************/
|
|
|
|
#define TMS_TAG "ssprite_tms"
|
|
#define TMS5220_TAG "ssprite_tms5220"
|
|
#define AY_TAG "ssprite_ay"
|
|
#define SCREEN_TAG "screen"
|
|
|
|
//**************************************************************************
|
|
// GLOBAL VARIABLES
|
|
//**************************************************************************
|
|
|
|
DEFINE_DEVICE_TYPE(A2BUS_SSPRITE, a2bus_ssprite_device, "a2ssprite", "Synetix SuperSprite")
|
|
|
|
//-------------------------------------------------
|
|
// device_add_mconfig - add device configuration
|
|
//-------------------------------------------------
|
|
|
|
void a2bus_ssprite_device::device_add_mconfig(machine_config &config)
|
|
{
|
|
TMS9918A(config, m_tms, XTAL(10'738'635)).set_screen(SCREEN_TAG);
|
|
m_tms->set_vram_size(0x4000); // 16k of VRAM
|
|
m_tms->int_callback().set(FUNC(a2bus_ssprite_device::tms_irq_w));
|
|
SCREEN(config, SCREEN_TAG, SCREEN_TYPE_RASTER);
|
|
|
|
SPEAKER(config, "mono").front_center();
|
|
AY8912(config, m_ay, 1022727).add_route(ALL_OUTPUTS, "mono", 1.0);
|
|
TMS5220(config, m_tms5220, 640000).add_route(ALL_OUTPUTS, "mono", 1.0);
|
|
}
|
|
|
|
//**************************************************************************
|
|
// LIVE DEVICE
|
|
//**************************************************************************
|
|
|
|
a2bus_ssprite_device::a2bus_ssprite_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
|
|
a2bus_ssprite_device(mconfig, A2BUS_SSPRITE, tag, owner, clock)
|
|
{
|
|
}
|
|
|
|
a2bus_ssprite_device::a2bus_ssprite_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) :
|
|
device_t(mconfig, type, tag, owner, clock),
|
|
device_a2bus_card_interface(mconfig, *this),
|
|
m_tms(*this, TMS_TAG),
|
|
m_ay(*this, AY_TAG),
|
|
m_tms5220(*this, TMS5220_TAG)
|
|
{
|
|
}
|
|
|
|
//-------------------------------------------------
|
|
// device_start - device-specific startup
|
|
//-------------------------------------------------
|
|
|
|
void a2bus_ssprite_device::device_start()
|
|
{
|
|
}
|
|
|
|
void a2bus_ssprite_device::device_reset()
|
|
{
|
|
}
|
|
|
|
/*
|
|
C0nx map: (info from Synetix SuperSprite Owners manual.pdf page 33 of 266)
|
|
0 - TMS9918 VDP vram read/write
|
|
1 - TMS9918 VDP register write
|
|
2 - TMS5220 Speech read/write
|
|
3 - Video Switch APPLE VIDEO IN OFF
|
|
4 - Video Switch APPLE VIDEO IN ON
|
|
5 - Video Switch APPLE ONLY OUT
|
|
6 - Video Switch MIX VDP/EXTERNAL VIDEO
|
|
7 - TMS 9918 WRITE ONLY/FRAME RESET
|
|
C - AY Sound data write
|
|
D - AY Sound data write
|
|
E - AY Sound register write or data read
|
|
F - AY Sound register write or data read
|
|
*/
|
|
|
|
|
|
uint8_t a2bus_ssprite_device::read_c0nx(uint8_t offset)
|
|
{
|
|
switch (offset)
|
|
{
|
|
case 0:
|
|
return m_tms->vram_read();
|
|
case 1:
|
|
return m_tms->register_read();
|
|
case 2:
|
|
return 0x1f | m_tms5220->status_r();
|
|
case 14:
|
|
case 15:
|
|
return m_ay->data_r();
|
|
}
|
|
|
|
return 0xff;
|
|
}
|
|
|
|
void a2bus_ssprite_device::write_c0nx(uint8_t offset, uint8_t data)
|
|
{
|
|
switch (offset)
|
|
{
|
|
case 0:
|
|
m_tms->vram_write(data);
|
|
break;
|
|
case 1:
|
|
m_tms->register_write(data);
|
|
break;
|
|
case 2:
|
|
m_tms5220->data_w(data);
|
|
break;
|
|
case 12:
|
|
case 13:
|
|
m_ay->data_w(data);
|
|
break;
|
|
case 14:
|
|
case 15:
|
|
m_ay->address_w(data);
|
|
break;
|
|
}
|
|
}
|
|
|
|
WRITE_LINE_MEMBER( a2bus_ssprite_device::tms_irq_w )
|
|
{
|
|
if (state)
|
|
raise_slot_irq();
|
|
else
|
|
lower_slot_irq();
|
|
}
|