mirror of
https://github.com/holub/mame
synced 2025-05-05 13:54:42 +03:00
(MESS) Apple II: Added support for Street Electronics Echo Plus and Zip Technologies ZipDrive cards [R. Belmont, Lord Nightmare]
This commit is contained in:
parent
b151e90f28
commit
d9cdaf1649
2
.gitattributes
vendored
2
.gitattributes
vendored
@ -6752,6 +6752,8 @@ src/mess/machine/a2videoterm.c svneol=native#text/plain
|
|||||||
src/mess/machine/a2videoterm.h svneol=native#text/plain
|
src/mess/machine/a2videoterm.h svneol=native#text/plain
|
||||||
src/mess/machine/a2vulcan.c svneol=native#text/plain
|
src/mess/machine/a2vulcan.c svneol=native#text/plain
|
||||||
src/mess/machine/a2vulcan.h svneol=native#text/plain
|
src/mess/machine/a2vulcan.h svneol=native#text/plain
|
||||||
|
src/mess/machine/a2zipdrive.c svneol=native#text/plain
|
||||||
|
src/mess/machine/a2zipdrive.h svneol=native#text/plain
|
||||||
src/mess/machine/a7800.c svneol=native#text/plain
|
src/mess/machine/a7800.c svneol=native#text/plain
|
||||||
src/mess/machine/abc1600_bus.c svneol=native#text/plain
|
src/mess/machine/abc1600_bus.c svneol=native#text/plain
|
||||||
src/mess/machine/abc1600_bus.h svneol=native#text/plain
|
src/mess/machine/abc1600_bus.h svneol=native#text/plain
|
||||||
|
@ -212,6 +212,7 @@ Apple 3.5 and Apple 5.25 drives - up to three devices
|
|||||||
#include "machine/a2echoii.h"
|
#include "machine/a2echoii.h"
|
||||||
#include "machine/a2arcadebd.h"
|
#include "machine/a2arcadebd.h"
|
||||||
#include "machine/a2midi.h"
|
#include "machine/a2midi.h"
|
||||||
|
#include "machine/a2zipdrive.h"
|
||||||
#include "machine/a2estd80col.h"
|
#include "machine/a2estd80col.h"
|
||||||
#include "machine/a2eext80col.h"
|
#include "machine/a2eext80col.h"
|
||||||
#include "machine/a2eramworks3.h"
|
#include "machine/a2eramworks3.h"
|
||||||
@ -634,6 +635,8 @@ static SLOT_INTERFACE_START(apple2_cards)
|
|||||||
SLOT_INTERFACE("vtc2", A2BUS_VTC2) /* Unknown VideoTerm clone #2 */
|
SLOT_INTERFACE("vtc2", A2BUS_VTC2) /* Unknown VideoTerm clone #2 */
|
||||||
SLOT_INTERFACE("arcbd", A2BUS_ARCADEBOARD) /* Third Millenium Engineering Arcade Board */
|
SLOT_INTERFACE("arcbd", A2BUS_ARCADEBOARD) /* Third Millenium Engineering Arcade Board */
|
||||||
SLOT_INTERFACE("midi", A2BUS_MIDI) /* Generic 6840+6850 MIDI board */
|
SLOT_INTERFACE("midi", A2BUS_MIDI) /* Generic 6840+6850 MIDI board */
|
||||||
|
SLOT_INTERFACE("zipdrive", A2BUS_ZIPDRIVE) /* ZIP Technologies IDE card */
|
||||||
|
SLOT_INTERFACE("echoiiplus", A2BUS_ECHOPLUS) /* Street Electronics Echo Plus (Echo II + Mockingboard clone) */
|
||||||
// SLOT_INTERFACE("scsi", A2BUS_SCSI) /* Apple II SCSI Card */
|
// SLOT_INTERFACE("scsi", A2BUS_SCSI) /* Apple II SCSI Card */
|
||||||
SLOT_INTERFACE_END
|
SLOT_INTERFACE_END
|
||||||
|
|
||||||
|
@ -64,12 +64,16 @@
|
|||||||
#include "machine/a2cffa.h"
|
#include "machine/a2cffa.h"
|
||||||
#include "machine/a2memexp.h"
|
#include "machine/a2memexp.h"
|
||||||
#include "machine/a2scsi.h"
|
#include "machine/a2scsi.h"
|
||||||
|
#include "machine/a2thunderclock.h"
|
||||||
|
#include "machine/a2ssc.h"
|
||||||
#include "machine/a2softcard.h"
|
#include "machine/a2softcard.h"
|
||||||
#include "machine/a2sam.h"
|
#include "machine/a2sam.h"
|
||||||
#include "machine/a2alfam2.h"
|
#include "machine/a2alfam2.h"
|
||||||
|
#include "machine/a2echoii.h"
|
||||||
|
#include "machine/a2arcadebd.h"
|
||||||
#include "machine/a2midi.h"
|
#include "machine/a2midi.h"
|
||||||
#include "machine/a2vulcan.h"
|
#include "machine/a2vulcan.h"
|
||||||
#include "machine/a2ssc.h"
|
#include "machine/a2zipdrive.h"
|
||||||
|
|
||||||
static const gfx_layout apple2gs_text_layout =
|
static const gfx_layout apple2gs_text_layout =
|
||||||
{
|
{
|
||||||
@ -293,11 +297,16 @@ static SLOT_INTERFACE_START(apple2_cards)
|
|||||||
SLOT_INTERFACE("cffa202", A2BUS_CFFA2_6502) /* CFFA2000 Compact Flash for Apple II (www.dreher.net), 6502 firmware */
|
SLOT_INTERFACE("cffa202", A2BUS_CFFA2_6502) /* CFFA2000 Compact Flash for Apple II (www.dreher.net), 6502 firmware */
|
||||||
SLOT_INTERFACE("memexp", A2BUS_MEMEXP) /* Apple II Memory Expansion Card */
|
SLOT_INTERFACE("memexp", A2BUS_MEMEXP) /* Apple II Memory Expansion Card */
|
||||||
SLOT_INTERFACE("ramfactor", A2BUS_RAMFACTOR) /* Applied Engineering RamFactor */
|
SLOT_INTERFACE("ramfactor", A2BUS_RAMFACTOR) /* Applied Engineering RamFactor */
|
||||||
|
SLOT_INTERFACE("thclock", A2BUS_THUNDERCLOCK) /* ThunderWare ThunderClock Plus */
|
||||||
|
SLOT_INTERFACE("ssc", A2BUS_SSC) /* Apple Super Serial Card */
|
||||||
SLOT_INTERFACE("sam", A2BUS_SAM) /* SAM Software Automated Mouth (8-bit DAC + speaker) */
|
SLOT_INTERFACE("sam", A2BUS_SAM) /* SAM Software Automated Mouth (8-bit DAC + speaker) */
|
||||||
SLOT_INTERFACE("alfam2", A2BUS_ALFAM2) /* ALF Apple Music II */
|
SLOT_INTERFACE("alfam2", A2BUS_ALFAM2) /* ALF Apple Music II */
|
||||||
|
SLOT_INTERFACE("echoii", A2BUS_ECHOII) /* Street Electronics Echo II */
|
||||||
|
SLOT_INTERFACE("arcbd", A2BUS_ARCADEBOARD) /* Third Millenium Engineering Arcade Board */
|
||||||
SLOT_INTERFACE("midi", A2BUS_MIDI) /* Generic 6840+6850 MIDI board */
|
SLOT_INTERFACE("midi", A2BUS_MIDI) /* Generic 6840+6850 MIDI board */
|
||||||
SLOT_INTERFACE("vulcan", A2BUS_VULCAN) /* AE Vulcan IDE card */
|
SLOT_INTERFACE("vulcan", A2BUS_VULCAN) /* AE Vulcan IDE card */
|
||||||
SLOT_INTERFACE("ssc", A2BUS_SSC) /* Apple Super Serial Card */
|
SLOT_INTERFACE("zipdrive", A2BUS_ZIPDRIVE) /* ZIP Technologies IDE card */
|
||||||
|
SLOT_INTERFACE("echoiiplus", A2BUS_ECHOPLUS) /* Street Electronics Echo Plus (Echo II + Mockingboard clone) */
|
||||||
// SLOT_INTERFACE("softcard", A2BUS_SOFTCARD) /* Microsoft SoftCard */ // appears not to be IIgs compatible?
|
// SLOT_INTERFACE("softcard", A2BUS_SOFTCARD) /* Microsoft SoftCard */ // appears not to be IIgs compatible?
|
||||||
// SLOT_INTERFACE("scsi", A2BUS_SCSI) /* Apple II SCSI Card */
|
// SLOT_INTERFACE("scsi", A2BUS_SCSI) /* Apple II SCSI Card */
|
||||||
SLOT_INTERFACE_END
|
SLOT_INTERFACE_END
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
a2mockingboard.c
|
a2mockingboard.c
|
||||||
|
|
||||||
Implementation of the Sweet Micro Systems Mockingboard card
|
Implementation of the Sweet Micro Systems Mockingboard card
|
||||||
|
and friends.
|
||||||
|
|
||||||
*********************************************************************/
|
*********************************************************************/
|
||||||
|
|
||||||
@ -20,6 +21,7 @@
|
|||||||
#define AY2_TAG "mockbd_ay2"
|
#define AY2_TAG "mockbd_ay2"
|
||||||
#define AY3_TAG "mockbd_ay3"
|
#define AY3_TAG "mockbd_ay3"
|
||||||
#define AY4_TAG "mockbd_ay4"
|
#define AY4_TAG "mockbd_ay4"
|
||||||
|
#define E2P_TMS_TAG "tms5220"
|
||||||
|
|
||||||
//**************************************************************************
|
//**************************************************************************
|
||||||
// GLOBAL VARIABLES
|
// GLOBAL VARIABLES
|
||||||
@ -27,6 +29,7 @@
|
|||||||
|
|
||||||
const device_type A2BUS_MOCKINGBOARD = &device_creator<a2bus_mockingboard_device>;
|
const device_type A2BUS_MOCKINGBOARD = &device_creator<a2bus_mockingboard_device>;
|
||||||
const device_type A2BUS_PHASOR = &device_creator<a2bus_phasor_device>;
|
const device_type A2BUS_PHASOR = &device_creator<a2bus_phasor_device>;
|
||||||
|
const device_type A2BUS_ECHOPLUS = &device_creator<a2bus_echoplus_device>;
|
||||||
|
|
||||||
static const ay8910_interface mockingboard_ay8910_interface =
|
static const ay8910_interface mockingboard_ay8910_interface =
|
||||||
{
|
{
|
||||||
@ -90,6 +93,23 @@ MACHINE_CONFIG_FRAGMENT( phasor )
|
|||||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker2", 1.0)
|
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker2", 1.0)
|
||||||
MACHINE_CONFIG_END
|
MACHINE_CONFIG_END
|
||||||
|
|
||||||
|
MACHINE_CONFIG_FRAGMENT( echoplus )
|
||||||
|
MCFG_VIA6522_ADD(VIA1_TAG, 1022727, mockingboard_via1_intf)
|
||||||
|
MCFG_VIA6522_ADD(VIA2_TAG, 1022727, mockingboard_via2_intf)
|
||||||
|
|
||||||
|
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
|
||||||
|
MCFG_SOUND_ADD(AY1_TAG, AY8913, 1022727)
|
||||||
|
MCFG_SOUND_CONFIG(mockingboard_ay8910_interface)
|
||||||
|
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 1.0)
|
||||||
|
MCFG_SOUND_ADD(AY2_TAG, AY8913, 1022727)
|
||||||
|
MCFG_SOUND_CONFIG(mockingboard_ay8910_interface)
|
||||||
|
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1.0)
|
||||||
|
|
||||||
|
MCFG_SPEAKER_STANDARD_MONO("echosp")
|
||||||
|
MCFG_SOUND_ADD(E2P_TMS_TAG, TMS5220, 720000)
|
||||||
|
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "echosp", 1.0)
|
||||||
|
MACHINE_CONFIG_END
|
||||||
|
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
// machine_config_additions - device-specific
|
// machine_config_additions - device-specific
|
||||||
// machine configurations
|
// machine configurations
|
||||||
@ -105,6 +125,11 @@ machine_config_constructor a2bus_phasor_device::device_mconfig_additions() const
|
|||||||
return MACHINE_CONFIG_NAME( phasor );
|
return MACHINE_CONFIG_NAME( phasor );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
machine_config_constructor a2bus_echoplus_device::device_mconfig_additions() const
|
||||||
|
{
|
||||||
|
return MACHINE_CONFIG_NAME( echoplus );
|
||||||
|
}
|
||||||
|
|
||||||
//**************************************************************************
|
//**************************************************************************
|
||||||
// LIVE DEVICE
|
// LIVE DEVICE
|
||||||
//**************************************************************************
|
//**************************************************************************
|
||||||
@ -137,6 +162,15 @@ a2bus_phasor_device::a2bus_phasor_device(const machine_config &mconfig, const ch
|
|||||||
m_PhasorNative = false;
|
m_PhasorNative = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
a2bus_echoplus_device::a2bus_echoplus_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
|
||||||
|
a2bus_ayboard_device(mconfig, A2BUS_ECHOPLUS, "Street Electronics Echo Plus", tag, owner, clock),
|
||||||
|
m_tms(*this, E2P_TMS_TAG)
|
||||||
|
{
|
||||||
|
m_shortname = "a2echop";
|
||||||
|
m_isPhasor = false;
|
||||||
|
m_PhasorNative = false;
|
||||||
|
}
|
||||||
|
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
// device_start - device-specific startup
|
// device_start - device-specific startup
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
@ -156,7 +190,7 @@ void a2bus_ayboard_device::device_reset()
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*-------------------------------------------------
|
/*-------------------------------------------------
|
||||||
read_cnxx - called for reads from this card's c0nx space
|
read_cnxx - called for reads from this card's cnxx space
|
||||||
-------------------------------------------------*/
|
-------------------------------------------------*/
|
||||||
|
|
||||||
UINT8 a2bus_ayboard_device::read_cnxx(address_space &space, UINT8 offset)
|
UINT8 a2bus_ayboard_device::read_cnxx(address_space &space, UINT8 offset)
|
||||||
@ -508,3 +542,25 @@ void a2bus_ayboard_device::write_c0nx(address_space &space, UINT8 offset, UINT8
|
|||||||
m_PhasorNative = (offset & 1) ? true : false;
|
m_PhasorNative = (offset & 1) ? true : false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
UINT8 a2bus_echoplus_device::read_c0nx(address_space &space, UINT8 offset)
|
||||||
|
{
|
||||||
|
switch (offset)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
return 0x1f | tms5220_status_r(m_tms, space, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void a2bus_echoplus_device::write_c0nx(address_space &space, UINT8 offset, UINT8 data)
|
||||||
|
{
|
||||||
|
switch (offset)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
tms5220_data_w(m_tms, space, offset, data);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -13,6 +13,7 @@
|
|||||||
#include "machine/a2bus.h"
|
#include "machine/a2bus.h"
|
||||||
#include "machine/6522via.h"
|
#include "machine/6522via.h"
|
||||||
#include "sound/ay8910.h"
|
#include "sound/ay8910.h"
|
||||||
|
#include "sound/tms5220.h"
|
||||||
|
|
||||||
//**************************************************************************
|
//**************************************************************************
|
||||||
// TYPE DEFINITIONS
|
// TYPE DEFINITIONS
|
||||||
@ -77,8 +78,22 @@ public:
|
|||||||
virtual machine_config_constructor device_mconfig_additions() const;
|
virtual machine_config_constructor device_mconfig_additions() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class a2bus_echoplus_device : public a2bus_ayboard_device
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
a2bus_echoplus_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||||
|
|
||||||
|
virtual UINT8 read_c0nx(address_space &space, UINT8 offset);
|
||||||
|
virtual void write_c0nx(address_space &space, UINT8 offset, UINT8 data);
|
||||||
|
|
||||||
|
required_device<tms5220_device> m_tms;
|
||||||
|
|
||||||
|
virtual machine_config_constructor device_mconfig_additions() const;
|
||||||
|
};
|
||||||
|
|
||||||
// device type definition
|
// device type definition
|
||||||
extern const device_type A2BUS_MOCKINGBOARD;
|
extern const device_type A2BUS_MOCKINGBOARD;
|
||||||
extern const device_type A2BUS_PHASOR;
|
extern const device_type A2BUS_PHASOR;
|
||||||
|
extern const device_type A2BUS_ECHOPLUS;
|
||||||
|
|
||||||
#endif /* __A2BUS_MOCKINGBOARD__ */
|
#endif /* __A2BUS_MOCKINGBOARD__ */
|
||||||
|
199
src/mess/machine/a2zipdrive.c
Normal file
199
src/mess/machine/a2zipdrive.c
Normal file
@ -0,0 +1,199 @@
|
|||||||
|
/*********************************************************************
|
||||||
|
|
||||||
|
a2zipdrive.c
|
||||||
|
|
||||||
|
ZIP Technologies ZipDrive IDE card
|
||||||
|
|
||||||
|
NOTE: No known dump exists of the formatter utility and the
|
||||||
|
format of the custom partition record (block 0) that the card
|
||||||
|
expects has not yet been determined, so this is largely untested
|
||||||
|
and will work only with a drive dump from real h/w.
|
||||||
|
|
||||||
|
PLEASE use it only on a backup copy of said dump and contact MESSdev
|
||||||
|
if you have one!
|
||||||
|
|
||||||
|
Partition block format:
|
||||||
|
+0000: ASCII "Zip Technologies"
|
||||||
|
|
||||||
|
*********************************************************************/
|
||||||
|
|
||||||
|
#include "a2zipdrive.h"
|
||||||
|
#include "includes/apple2.h"
|
||||||
|
#include "machine/idectrl.h"
|
||||||
|
#include "imagedev/harddriv.h"
|
||||||
|
|
||||||
|
//**************************************************************************
|
||||||
|
// GLOBAL VARIABLES
|
||||||
|
//**************************************************************************
|
||||||
|
|
||||||
|
const device_type A2BUS_ZIPDRIVE = &device_creator<a2bus_zipdrive_device>;
|
||||||
|
|
||||||
|
#define ZIPDRIVE_ROM_REGION "zipdrive_rom"
|
||||||
|
#define ZIPDRIVE_IDE_TAG "zipdrive_ide"
|
||||||
|
|
||||||
|
static MACHINE_CONFIG_FRAGMENT( zipdrive )
|
||||||
|
MCFG_IDE_CONTROLLER_ADD(ZIPDRIVE_IDE_TAG, ide_image_devices, "hdd", "hdd", false)
|
||||||
|
MACHINE_CONFIG_END
|
||||||
|
|
||||||
|
ROM_START( zipdrive )
|
||||||
|
ROM_REGION(0x2000, ZIPDRIVE_ROM_REGION, 0)
|
||||||
|
ROM_LOAD( "zip drive - rom.bin", 0x000000, 0x002000, CRC(fd800a40) SHA1(46636bfed88c864139e3d2826661908a8c07c459) )
|
||||||
|
ROM_END
|
||||||
|
|
||||||
|
/***************************************************************************
|
||||||
|
FUNCTION PROTOTYPES
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// machine_config_additions - device-specific
|
||||||
|
// machine configurations
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
machine_config_constructor a2bus_zipdrivebase_device::device_mconfig_additions() const
|
||||||
|
{
|
||||||
|
return MACHINE_CONFIG_NAME( zipdrive );
|
||||||
|
}
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// rom_region - device-specific ROM region
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
const rom_entry *a2bus_zipdrivebase_device::device_rom_region() const
|
||||||
|
{
|
||||||
|
return ROM_NAME( zipdrive );
|
||||||
|
}
|
||||||
|
|
||||||
|
//**************************************************************************
|
||||||
|
// LIVE DEVICE
|
||||||
|
//**************************************************************************
|
||||||
|
|
||||||
|
a2bus_zipdrivebase_device::a2bus_zipdrivebase_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock) :
|
||||||
|
device_t(mconfig, type, name, tag, owner, clock),
|
||||||
|
device_a2bus_card_interface(mconfig, *this),
|
||||||
|
m_ide(*this, ZIPDRIVE_IDE_TAG)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
a2bus_zipdrive_device::a2bus_zipdrive_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
|
||||||
|
a2bus_zipdrivebase_device(mconfig, A2BUS_ZIPDRIVE, "Zip Technologies ZipDrive", tag, owner, clock)
|
||||||
|
{
|
||||||
|
m_shortname = "a2zipdrv";
|
||||||
|
}
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// device_start - device-specific startup
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void a2bus_zipdrivebase_device::device_start()
|
||||||
|
{
|
||||||
|
// set_a2bus_device makes m_slot valid
|
||||||
|
set_a2bus_device();
|
||||||
|
|
||||||
|
astring tempstring;
|
||||||
|
m_rom = device().machine().root_device().memregion(this->subtag(tempstring, ZIPDRIVE_ROM_REGION))->base();
|
||||||
|
|
||||||
|
save_item(NAME(m_lastdata));
|
||||||
|
}
|
||||||
|
|
||||||
|
void a2bus_zipdrivebase_device::device_reset()
|
||||||
|
{
|
||||||
|
popmessage("Zip Drive partition format unknown, contact MESSdev if you have the software or a drive dump!");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*-------------------------------------------------
|
||||||
|
read_c0nx - called for reads from this card's c0nx space
|
||||||
|
-------------------------------------------------*/
|
||||||
|
|
||||||
|
UINT8 a2bus_zipdrivebase_device::read_c0nx(address_space &space, UINT8 offset)
|
||||||
|
{
|
||||||
|
switch (offset)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
case 1:
|
||||||
|
case 2:
|
||||||
|
case 3:
|
||||||
|
case 4:
|
||||||
|
case 5:
|
||||||
|
case 6:
|
||||||
|
case 7:
|
||||||
|
return ide_controller_r(m_ide, 0x1f0+offset, 1);
|
||||||
|
|
||||||
|
case 8: // data port
|
||||||
|
m_lastdata = ide_controller_r(m_ide, 0x1f0, 2);
|
||||||
|
// printf("%04x @ IDE data\n", m_lastdata);
|
||||||
|
return m_lastdata&0xff;
|
||||||
|
|
||||||
|
case 9:
|
||||||
|
return (m_lastdata>>8) & 0xff;
|
||||||
|
|
||||||
|
default:
|
||||||
|
logerror("a2zipdrive: unhandled read @ C0n%x\n", offset);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0xff;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*-------------------------------------------------
|
||||||
|
write_c0nx - called for writes to this card's c0nx space
|
||||||
|
-------------------------------------------------*/
|
||||||
|
|
||||||
|
void a2bus_zipdrivebase_device::write_c0nx(address_space &space, UINT8 offset, UINT8 data)
|
||||||
|
{
|
||||||
|
switch (offset)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
case 1:
|
||||||
|
case 2:
|
||||||
|
case 3:
|
||||||
|
case 4:
|
||||||
|
case 5:
|
||||||
|
case 6:
|
||||||
|
case 7:
|
||||||
|
// printf("%02x to IDE controller @ %x\n", data, offset);
|
||||||
|
ide_controller_w(m_ide, 0x1f0+offset, 1, data);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 8:
|
||||||
|
// printf("%02x to IDE data lo\n", data);
|
||||||
|
m_lastdata = data;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 9:
|
||||||
|
// printf("%02x to IDE data hi\n", data);
|
||||||
|
m_lastdata &= 0x00ff;
|
||||||
|
m_lastdata |= (data << 8);
|
||||||
|
ide_controller_w(m_ide, 0x1f0, 2, m_lastdata);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
logerror("a2zipdrive: write %02x @ unhandled C0n%x\n", data, offset);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*-------------------------------------------------
|
||||||
|
read_cnxx - called for reads from this card's cnxx space
|
||||||
|
-------------------------------------------------*/
|
||||||
|
|
||||||
|
UINT8 a2bus_zipdrivebase_device::read_cnxx(address_space &space, UINT8 offset)
|
||||||
|
{
|
||||||
|
int slotimg = m_slot * 0x100;
|
||||||
|
|
||||||
|
// ROM contains CnXX images for each of slots 1-7 at 0x0 and 0x1000
|
||||||
|
return m_rom[offset+slotimg+0x1000];
|
||||||
|
}
|
||||||
|
|
||||||
|
/*-------------------------------------------------
|
||||||
|
read_c800 - called for reads from this card's c800 space
|
||||||
|
-------------------------------------------------*/
|
||||||
|
|
||||||
|
UINT8 a2bus_zipdrivebase_device::read_c800(address_space &space, UINT16 offset)
|
||||||
|
{
|
||||||
|
offset &= 0x7ff;
|
||||||
|
|
||||||
|
return m_rom[offset+0x1800];
|
||||||
|
}
|
||||||
|
|
63
src/mess/machine/a2zipdrive.h
Normal file
63
src/mess/machine/a2zipdrive.h
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
/*********************************************************************
|
||||||
|
|
||||||
|
a2zipdrive.h
|
||||||
|
|
||||||
|
ZIP Technologies ZipDrive IDE card
|
||||||
|
|
||||||
|
See important NOTE at the top of a2zipdrive.c!
|
||||||
|
|
||||||
|
*********************************************************************/
|
||||||
|
|
||||||
|
#ifndef __A2BUS_ZIPDRIVE__
|
||||||
|
#define __A2BUS_ZIPDRIVE__
|
||||||
|
|
||||||
|
#include "emu.h"
|
||||||
|
#include "machine/a2bus.h"
|
||||||
|
#include "machine/idectrl.h"
|
||||||
|
|
||||||
|
//**************************************************************************
|
||||||
|
// TYPE DEFINITIONS
|
||||||
|
//**************************************************************************
|
||||||
|
|
||||||
|
class a2bus_zipdrivebase_device:
|
||||||
|
public device_t,
|
||||||
|
public device_a2bus_card_interface
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
// construction/destruction
|
||||||
|
a2bus_zipdrivebase_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock);
|
||||||
|
|
||||||
|
// optional information overrides
|
||||||
|
virtual machine_config_constructor device_mconfig_additions() const;
|
||||||
|
virtual const rom_entry *device_rom_region() const;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual void device_start();
|
||||||
|
virtual void device_reset();
|
||||||
|
|
||||||
|
// overrides of standard a2bus slot functions
|
||||||
|
virtual UINT8 read_c0nx(address_space &space, UINT8 offset);
|
||||||
|
virtual void write_c0nx(address_space &space, UINT8 offset, UINT8 data);
|
||||||
|
virtual UINT8 read_cnxx(address_space &space, UINT8 offset);
|
||||||
|
virtual UINT8 read_c800(address_space &space, UINT16 offset);
|
||||||
|
|
||||||
|
required_device<ide_controller_device> m_ide;
|
||||||
|
|
||||||
|
UINT8 *m_rom;
|
||||||
|
|
||||||
|
private:
|
||||||
|
UINT16 m_lastdata;
|
||||||
|
};
|
||||||
|
|
||||||
|
class a2bus_zipdrive_device : public a2bus_zipdrivebase_device
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
a2bus_zipdrive_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
};
|
||||||
|
|
||||||
|
// device type definition
|
||||||
|
extern const device_type A2BUS_ZIPDRIVE;
|
||||||
|
|
||||||
|
#endif /* __A2BUS_ZIPDRIVE__ */
|
@ -689,6 +689,7 @@ $(MESSOBJ)/apple.a: \
|
|||||||
$(MESS_MACHINE)/a2arcadebd.o \
|
$(MESS_MACHINE)/a2arcadebd.o \
|
||||||
$(MESS_MACHINE)/a2midi.o \
|
$(MESS_MACHINE)/a2midi.o \
|
||||||
$(MESS_MACHINE)/a2vulcan.o \
|
$(MESS_MACHINE)/a2vulcan.o \
|
||||||
|
$(MESS_MACHINE)/a2zipdrive.o \
|
||||||
$(MESS_MACHINE)/a2estd80col.o \
|
$(MESS_MACHINE)/a2estd80col.o \
|
||||||
$(MESS_MACHINE)/a2eext80col.o \
|
$(MESS_MACHINE)/a2eext80col.o \
|
||||||
$(MESS_MACHINE)/a2eramworks3.o \
|
$(MESS_MACHINE)/a2eramworks3.o \
|
||||||
|
Loading…
Reference in New Issue
Block a user