mirror of
https://github.com/holub/mame
synced 2025-04-21 07:52:35 +03:00
(MESS) New driver added :
- SWTPC S/09 [Robert Justice]
This commit is contained in:
parent
ffa1fd1120
commit
84ecd31bfa
3
.gitattributes
vendored
3
.gitattributes
vendored
@ -7931,6 +7931,7 @@ src/mess/drivers/svi318.c svneol=native#text/plain
|
||||
src/mess/drivers/svision.c svneol=native#text/plain
|
||||
src/mess/drivers/svmu.c svneol=native#text/plain
|
||||
src/mess/drivers/swtpc.c svneol=native#text/plain
|
||||
src/mess/drivers/swtpc09.c svneol=native#text/plain
|
||||
src/mess/drivers/sym1.c svneol=native#text/plain
|
||||
src/mess/drivers/sys2900.c svneol=native#text/plain
|
||||
src/mess/drivers/systec.c svneol=native#text/plain
|
||||
@ -8210,6 +8211,7 @@ src/mess/includes/super80.h svneol=native#text/plain
|
||||
src/mess/includes/superslave.h svneol=native#text/plain
|
||||
src/mess/includes/svi318.h svneol=native#text/plain
|
||||
src/mess/includes/svision.h svneol=native#text/plain
|
||||
src/mess/includes/swtpc09.h svneol=native#text/plain
|
||||
src/mess/includes/tandy1t.h svneol=native#text/plain
|
||||
src/mess/includes/tandy2k.h svneol=native#text/plain
|
||||
src/mess/includes/tdv2324.h svneol=native#text/plain
|
||||
@ -8573,6 +8575,7 @@ src/mess/machine/super80.c svneol=native#text/plain
|
||||
src/mess/machine/svi318.c svneol=native#text/plain
|
||||
src/mess/machine/swim.c svneol=native#text/plain
|
||||
src/mess/machine/swim.h svneol=native#text/plain
|
||||
src/mess/machine/swtpc09.c svneol=native#text/plain
|
||||
src/mess/machine/tandy1t.c svneol=native#text/plain
|
||||
src/mess/machine/tandy2kb.c svneol=native#text/plain
|
||||
src/mess/machine/tandy2kb.h svneol=native#text/plain
|
||||
|
@ -220,9 +220,6 @@ WRITE8_MEMBER( acia6850_device::control_w )
|
||||
|
||||
m_status &= SR_CTS;
|
||||
|
||||
/// TODO: find out if this should be set as data sheet says status is cleared apart from cts & dcd
|
||||
m_status |= SR_TDRE;
|
||||
|
||||
if (m_dcd)
|
||||
{
|
||||
m_status |= SR_DCD;
|
||||
@ -538,6 +535,8 @@ WRITE_LINE_MEMBER( acia6850_device::write_txc )
|
||||
case STATE_STOP:
|
||||
if (m_tx_counter == m_divide)
|
||||
{
|
||||
m_tx_counter = 0;
|
||||
|
||||
m_tx_bits++;
|
||||
|
||||
if (LOG) logerror("MC6850 '%s': TX STOP BIT %d\n", tag(), m_tx_bits);
|
||||
|
292
src/mess/drivers/swtpc09.c
Normal file
292
src/mess/drivers/swtpc09.c
Normal file
@ -0,0 +1,292 @@
|
||||
/**************************************************************************
|
||||
|
||||
SWTPC S/09 Mess driver
|
||||
Robert Justice ,2009-2014
|
||||
|
||||
Emulates four different fixed combinations of hardware
|
||||
1. swtpc09
|
||||
MP-09 with SBUG rom, MP-ID, MP-S2, DMF2.
|
||||
Will boot Flex operating system
|
||||
2. swtpc09i
|
||||
MP-09 with SBUG rom + HDrom, MP-ID, MP-S2, DMF2, PIAIDE.
|
||||
Will boot Flex operating system
|
||||
TODO: finish ide part and get this one working.
|
||||
3. swtpc09u
|
||||
MP-09 with UniBUG rom, MP-ID, MP-S2, DMF2.
|
||||
Will boot UniFlex operating system
|
||||
4. swtpc09d3
|
||||
MP-09 with UniBUG U3 rom, MP-ID, MP-S2, DMF3.
|
||||
Will boot UniFlex operating system
|
||||
TODO: add Harddisk support, DMF3 has WD1000 interface
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
#define ADDRESS_MAP_MODERN
|
||||
|
||||
#include "emu.h"
|
||||
#include "includes/swtpc09.h"
|
||||
|
||||
|
||||
|
||||
/**************************************************************************
|
||||
Address maps
|
||||
|
||||
56K of RAM from 0x0000 to 0xdfff
|
||||
2K of ROM from 0xf800 to 0xffff
|
||||
|
||||
E000 - E003 S2 MC6850 ACIA1 (used for UniFlex console)
|
||||
E004 - E007 S2 MC6850 ACIA2 (used for Flex console)
|
||||
E080 - E08F MPID MC6821 PIA
|
||||
E090 - E09F MPID MC6840 PTM
|
||||
|
||||
F000 - F01F DMF2 MC6844 DMAC
|
||||
F020 - F023 DMF2 WD1791 FDC
|
||||
F024 - F03F DMF2 Drive select register
|
||||
F040 - F041 DMF2 DMA Address register
|
||||
|
||||
F800 - FFFF ROM
|
||||
FFF0 - FFFF DAT RAM (only for writes)
|
||||
|
||||
|
||||
for DMF3 version
|
||||
F000 - F01F DMF3 MC6844 DMAC
|
||||
F020 - F023 DMF3 WD1791 FDC
|
||||
F024 - F024 DMF3 Drive select register
|
||||
F025 - F025 DMF3 DMA Address register
|
||||
F040 - F04F DMF3 6522 VIA
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
/* Address map is dynamically setup when DAT memory is written to */
|
||||
/* only ROM from FF00-FFFF and DAT memory at FFF0-FFFF (write only) is guaranteed always*/
|
||||
|
||||
static ADDRESS_MAP_START(swtpc09_mem, AS_PROGRAM, 8, swtpc09_state)
|
||||
AM_RANGE(0xff00, 0xffef) AM_ROM
|
||||
AM_RANGE(0xfff0, 0xffff) AM_ROM AM_WRITE(dat_w)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
/* Input ports */
|
||||
static INPUT_PORTS_START( swtpc09 )
|
||||
INPUT_PORTS_END
|
||||
|
||||
static LEGACY_FLOPPY_OPTIONS_START(swtpc09)
|
||||
LEGACY_FLOPPY_OPTION(dsdd40, "dsk", "flex 40 trks ds dd 5.25", basicdsk_identify_default, basicdsk_construct_default, NULL,
|
||||
HEADS([1])
|
||||
TRACKS([40])
|
||||
SECTORS([36])
|
||||
SECTOR_LENGTH([256])
|
||||
FIRST_SECTOR_ID([1]))
|
||||
LEGACY_FLOPPY_OPTION(ssdd40, "dsk", "flex 40 trks ss dd 5.25 ", basicdsk_identify_default, basicdsk_construct_default, NULL,
|
||||
HEADS([1])
|
||||
TRACKS([40])
|
||||
SECTORS([25])
|
||||
SECTOR_LENGTH([256])
|
||||
FIRST_SECTOR_ID([1]))
|
||||
LEGACY_FLOPPY_OPTION(sssd40, "dsk", "flex 40 trks ss sd 5.25", basicdsk_identify_default, basicdsk_construct_default, NULL,
|
||||
HEADS([1])
|
||||
TRACKS([40])
|
||||
SECTORS([10])
|
||||
SECTOR_LENGTH([256])
|
||||
FIRST_SECTOR_ID([1]))
|
||||
LEGACY_FLOPPY_OPTION(sssd35, "dsk", "flex 35 trks ss sd 5.25", basicdsk_identify_default, basicdsk_construct_default, NULL,
|
||||
HEADS([1])
|
||||
TRACKS([35])
|
||||
SECTORS([10])
|
||||
SECTOR_LENGTH([256])
|
||||
FIRST_SECTOR_ID([1]))
|
||||
LEGACY_FLOPPY_OPTION(flex144M, "dsk", "flex 1.44mb disk from swtpc emu", basicdsk_identify_default, basicdsk_construct_default, NULL,
|
||||
HEADS([1])
|
||||
TRACKS([80])
|
||||
SECTORS([72])
|
||||
SECTOR_LENGTH([256])
|
||||
FIRST_SECTOR_ID([1]))
|
||||
LEGACY_FLOPPY_OPTION(flexdssd8inch, "dsk", "Flex 8 inch ds sd floppy image", basicdsk_identify_default, basicdsk_construct_default, NULL,
|
||||
HEADS([1])
|
||||
TRACKS([77])
|
||||
SECTORS([30])
|
||||
SECTOR_LENGTH([256])
|
||||
FIRST_SECTOR_ID([1]))
|
||||
LEGACY_FLOPPY_OPTION(uniflexdssd8inch, "dsk", "UNIFlex 8 inch ds sd floppy image", basicdsk_identify_default, basicdsk_construct_default, NULL,
|
||||
HEADS([1])
|
||||
TRACKS([77])
|
||||
SECTORS([16])
|
||||
SECTOR_LENGTH([512])
|
||||
FIRST_SECTOR_ID([1]))
|
||||
LEGACY_FLOPPY_OPTION(uniflexdsdd8inch, "dsk", "UNIFlex 8 inch ds dd floppy image", basicdsk_identify_default, basicdsk_construct_default, NULL,
|
||||
HEADS([1])
|
||||
TRACKS([77])
|
||||
SECTORS([32])
|
||||
SECTOR_LENGTH([512])
|
||||
FIRST_SECTOR_ID([1]))
|
||||
LEGACY_FLOPPY_OPTIONS_END
|
||||
|
||||
|
||||
static const floppy_interface swtpc09_floppy_interface =
|
||||
{
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
FLOPPY_STANDARD_5_25_DSHD,
|
||||
LEGACY_FLOPPY_OPTIONS_NAME(swtpc09),
|
||||
NULL,
|
||||
NULL
|
||||
};
|
||||
|
||||
WRITE_LINE_MEMBER(swtpc09_state::write_acia_clock)
|
||||
{
|
||||
m_acia->write_txc(state);
|
||||
m_acia->write_rxc(state);
|
||||
}
|
||||
|
||||
/***************************************************************************
|
||||
Machine definitions
|
||||
****************************************************************************/
|
||||
|
||||
/* Machine driver */
|
||||
/* MPU09, MPID, MPS2 DMF2 */
|
||||
static MACHINE_CONFIG_START( swtpc09, swtpc09_state )
|
||||
/* basic machine hardware */
|
||||
MCFG_CPU_ADD("maincpu", M6809, 1000000)
|
||||
MCFG_CPU_PROGRAM_MAP(swtpc09_mem)
|
||||
|
||||
/* video hardware */
|
||||
MCFG_RS232_PORT_ADD("rs232", default_rs232_devices, "serial_terminal")
|
||||
MCFG_RS232_RXD_HANDLER(DEVWRITELINE("acia", acia6850_device, write_rxd))
|
||||
MCFG_RS232_CTS_HANDLER(DEVWRITELINE("acia", acia6850_device, write_cts))
|
||||
|
||||
MCFG_PTM6840_ADD("ptm", swtpc09_6840_intf)
|
||||
|
||||
MCFG_DEVICE_ADD("pia", PIA6821, 0)
|
||||
MCFG_PIA_READPA_HANDLER(READ8(swtpc09_state, pia0_a_r))
|
||||
MCFG_PIA_READPA_HANDLER(READ8(swtpc09_state, pia0_ca1_r))
|
||||
MCFG_PIA_IRQA_HANDLER(WRITELINE(swtpc09_state, pia0_irq_a))
|
||||
|
||||
MCFG_DEVICE_ADD("acia", ACIA6850, 0)
|
||||
MCFG_ACIA6850_TXD_HANDLER(DEVWRITELINE("rs232", rs232_port_device, write_txd))
|
||||
MCFG_ACIA6850_RTS_HANDLER(DEVWRITELINE("rs232", rs232_port_device, write_rts))
|
||||
MCFG_ACIA6850_IRQ_HANDLER(WRITELINE(swtpc09_state, acia_interrupt))
|
||||
|
||||
MCFG_DEVICE_ADD("acia_clock", CLOCK, 153600)
|
||||
MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE(swtpc09_state, write_acia_clock))
|
||||
|
||||
MCFG_FD1793_ADD("fdc", swtpc09_wd17xx_interface )
|
||||
MCFG_LEGACY_FLOPPY_4_DRIVES_ADD(swtpc09_floppy_interface)
|
||||
|
||||
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
/* MPU09, MPID, MPS2 DC4 PIAIDE*/
|
||||
static MACHINE_CONFIG_START( swtpc09i, swtpc09_state )
|
||||
/* basic machine hardware */
|
||||
MCFG_CPU_ADD("maincpu", M6809, 1000000)
|
||||
MCFG_CPU_PROGRAM_MAP(swtpc09_mem)
|
||||
|
||||
/* video hardware */
|
||||
MCFG_RS232_PORT_ADD("rs232", default_rs232_devices, "serial_terminal")
|
||||
MCFG_RS232_RXD_HANDLER(DEVWRITELINE("acia", acia6850_device, write_rxd))
|
||||
MCFG_RS232_CTS_HANDLER(DEVWRITELINE("acia", acia6850_device, write_cts))
|
||||
|
||||
MCFG_PTM6840_ADD("ptm", swtpc09_6840_intf)
|
||||
|
||||
MCFG_DEVICE_ADD("pia", PIA6821, 0)
|
||||
MCFG_PIA_READPA_HANDLER(READ8(swtpc09_state, pia0_a_r))
|
||||
MCFG_PIA_READPA_HANDLER(READ8(swtpc09_state, pia0_ca1_r))
|
||||
MCFG_PIA_IRQA_HANDLER(WRITELINE(swtpc09_state, pia0_irq_a))
|
||||
|
||||
MCFG_DEVICE_ADD("acia", ACIA6850, 0)
|
||||
MCFG_ACIA6850_TXD_HANDLER(DEVWRITELINE("rs232", rs232_port_device, write_txd))
|
||||
MCFG_ACIA6850_RTS_HANDLER(DEVWRITELINE("rs232", rs232_port_device, write_rts))
|
||||
MCFG_ACIA6850_IRQ_HANDLER(WRITELINE(swtpc09_state, acia_interrupt))
|
||||
|
||||
MCFG_DEVICE_ADD("acia_clock", CLOCK, 153600)
|
||||
MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE(swtpc09_state, write_acia_clock))
|
||||
|
||||
MCFG_FD1793_ADD("fdc", swtpc09_wd17xx_interface )
|
||||
MCFG_LEGACY_FLOPPY_4_DRIVES_ADD(swtpc09_floppy_interface)
|
||||
|
||||
MCFG_DEVICE_ADD("piaide", PIA6821, 0)
|
||||
|
||||
/* old start to adding ide support, needs major updating */
|
||||
/* this is to support an add on card driving IDE from a PIA */
|
||||
// MCFG_HARDDISK_ADD("harddisk")
|
||||
// MCFG_IDE_CONTROLLER_ADD("ide", NULL)
|
||||
// MCFG_IDE_CONTROLLER_REGIONS("harddisk", NULL)
|
||||
// MCFG_IDE_CONTROLLER_ADD( "ide", ide_intf, "hdd", NULL, false ) /* FIXME */ bebox
|
||||
|
||||
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
||||
/* MPU09, MPID, MPS2 DMF3 */
|
||||
static MACHINE_CONFIG_START( swtpc09d3, swtpc09_state )
|
||||
/* basic machine hardware */
|
||||
MCFG_CPU_ADD("maincpu", M6809, 2000000)
|
||||
MCFG_CPU_PROGRAM_MAP(swtpc09_mem)
|
||||
|
||||
/* video hardware */
|
||||
MCFG_RS232_PORT_ADD("rs232", default_rs232_devices, "serial_terminal")
|
||||
MCFG_RS232_RXD_HANDLER(DEVWRITELINE("acia", acia6850_device, write_rxd))
|
||||
MCFG_RS232_CTS_HANDLER(DEVWRITELINE("acia", acia6850_device, write_cts))
|
||||
|
||||
MCFG_PTM6840_ADD("ptm", swtpc09_6840_intf)
|
||||
|
||||
MCFG_DEVICE_ADD("pia", PIA6821, 0)
|
||||
MCFG_PIA_READPA_HANDLER(READ8(swtpc09_state, pia0_a_r))
|
||||
MCFG_PIA_READPA_HANDLER(READ8(swtpc09_state, pia0_ca1_r))
|
||||
MCFG_PIA_IRQA_HANDLER(WRITELINE(swtpc09_state, pia0_irq_a))
|
||||
|
||||
MCFG_DEVICE_ADD("acia", ACIA6850, 0)
|
||||
MCFG_ACIA6850_TXD_HANDLER(DEVWRITELINE("rs232", rs232_port_device, write_txd))
|
||||
MCFG_ACIA6850_RTS_HANDLER(DEVWRITELINE("rs232", rs232_port_device, write_rts))
|
||||
MCFG_ACIA6850_IRQ_HANDLER(WRITELINE(swtpc09_state, acia_interrupt))
|
||||
MCFG_ACIA6850_IRQ_HANDLER(DEVWRITELINE("maincpu", m6809_device, irq_line))
|
||||
|
||||
MCFG_DEVICE_ADD("acia_clock", CLOCK, 153600)
|
||||
MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE(swtpc09_state, write_acia_clock))
|
||||
|
||||
MCFG_FD1793_ADD("fdc", swtpc09_wd17xx_interface )
|
||||
MCFG_LEGACY_FLOPPY_4_DRIVES_ADD(swtpc09_floppy_interface)
|
||||
|
||||
MCFG_DEVICE_ADD("via", VIA6522, XTAL_4MHz / 4)
|
||||
MCFG_VIA6522_READPA_HANDLER(READ8(swtpc09_state, dmf3_via_read_porta))
|
||||
MCFG_VIA6522_READPB_HANDLER(READ8(swtpc09_state, dmf3_via_read_portb))
|
||||
MCFG_VIA6522_WRITEPA_HANDLER(WRITE8(swtpc09_state, dmf3_via_write_porta))
|
||||
//MCFG_VIA6522_CA1_HANDLER(WRITELINE(swtpc09_state, dmf3_via_write_ca1))
|
||||
MCFG_VIA6522_IRQ_HANDLER(WRITELINE(swtpc09_state, dmf3_via_irq))
|
||||
|
||||
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
||||
/* ROM definition */
|
||||
ROM_START( swtpc09 )
|
||||
ROM_REGION( 0x100000, "maincpu", 0 )
|
||||
ROM_LOAD ( "sbugh1-8.bin", 0xf800, 0x0800, CRC(10a045a7) SHA1(de547b77653951c7424a069520d52c5b0432e98d) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( swtpc09i )
|
||||
ROM_REGION( 0x100000, "maincpu", 0 )
|
||||
ROM_LOAD ( "hd-rom.bin", 0xe800, 0x0800, CRC(b898b4d7) SHA1(2806633eda7da4e9a243fc534f15526ee928b6bc) )
|
||||
ROM_LOAD ( "sbugh1-8.bin", 0xf800, 0x0800, CRC(10a045a7) SHA1(de547b77653951c7424a069520d52c5b0432e98d) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( swtpc09u )
|
||||
ROM_REGION( 0x100000, "maincpu", 0 )
|
||||
ROM_LOAD ( "unibug.bin", 0xf800, 0x0800, CRC(92e1cbf2) SHA1(db00f17ee9accdbfa1775fe0162d3556159b8e70) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( swtpc09d3 )
|
||||
ROM_REGION( 0x100000, "maincpu", 0 )
|
||||
ROM_LOAD ( "uos3.bin", 0xf800, 0x0800, CRC(e95eb3e0) SHA1(3e971d3b7e143bc87e4b506e18a8c928c089c25a) )
|
||||
ROM_END
|
||||
|
||||
/* Driver */
|
||||
|
||||
/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME FLAGS */
|
||||
COMP( 1980, swtpc09, 0, 0, swtpc09, swtpc09, swtpc09_state, swtpc09, "SWTPC", "swtpc S/09 Sbug", GAME_NO_SOUND_HW)
|
||||
COMP( 1980, swtpc09i, swtpc09, 0, swtpc09i, swtpc09, swtpc09_state, swtpc09i, "SWTPC", "swtpc S/09 Sbug + piaide", GAME_NOT_WORKING | GAME_NO_SOUND_HW)
|
||||
COMP( 1980, swtpc09u, swtpc09, 0, swtpc09, swtpc09, swtpc09_state, swtpc09u, "SWTPC", "swtpc S/09 UNIBug + DMF2", GAME_NO_SOUND_HW)
|
||||
COMP( 1980, swtpc09d3, swtpc09, 0, swtpc09d3, swtpc09, swtpc09_state, swtpc09d3, "SWTPC", "swtpc S/09 UNIBug + DMF3", GAME_NO_SOUND_HW)
|
131
src/mess/includes/swtpc09.h
Normal file
131
src/mess/includes/swtpc09.h
Normal file
@ -0,0 +1,131 @@
|
||||
/***************************************************************************
|
||||
swtpc09 include file
|
||||
Robert Justice ,2009-2014
|
||||
|
||||
****************************************************************************/
|
||||
|
||||
#ifndef swtpc09_H_
|
||||
#define swtpc09_H_
|
||||
|
||||
#include "emu.h"
|
||||
#include "cpu/m6809/m6809.h"
|
||||
#include "video/generic.h"
|
||||
#include "machine/wd17xx.h"
|
||||
#include "formats/basicdsk.h"
|
||||
#include "imagedev/flopdrv.h"
|
||||
#include "machine/wd17xx.h"
|
||||
#include "machine/6840ptm.h"
|
||||
#include "machine/6821pia.h"
|
||||
#include "machine/6850acia.h"
|
||||
#include "machine/6522via.h"
|
||||
#include "machine/terminal.h"
|
||||
#include "imagedev/harddriv.h"
|
||||
#include "machine/idectrl.h"
|
||||
#include "machine/clock.h"
|
||||
#include "bus/rs232/rs232.h"
|
||||
|
||||
|
||||
|
||||
class swtpc09_state : public driver_device
|
||||
{
|
||||
public:
|
||||
swtpc09_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: driver_device(mconfig, type, tag),
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_pia(*this, "pia"),
|
||||
m_ptm(*this, "ptm"),
|
||||
m_acia(*this, "acia"),
|
||||
m_fdc(*this, "fdc"),
|
||||
m_via(*this, "via"),
|
||||
m_piaide(*this, "piaide"),
|
||||
m_harddisk(*this, "harddisk"),
|
||||
m_ide(*this, "ide")
|
||||
{ }
|
||||
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<pia6821_device> m_pia;
|
||||
required_device<ptm6840_device> m_ptm;
|
||||
required_device<acia6850_device> m_acia;
|
||||
required_device<fd1793_device> m_fdc;
|
||||
optional_device<via6522_device> m_via;
|
||||
optional_device<pia6821_device> m_piaide;
|
||||
optional_device<device_t> m_harddisk;
|
||||
optional_device<ide_controller_device> m_ide;
|
||||
|
||||
DECLARE_READ8_MEMBER(pia0_a_r);
|
||||
DECLARE_READ8_MEMBER(pia0_ca1_r);
|
||||
DECLARE_WRITE_LINE_MEMBER( pia0_irq_a );
|
||||
|
||||
DECLARE_WRITE8_MEMBER( ptm_o1_callback );
|
||||
DECLARE_WRITE8_MEMBER( ptm_o3_callback );
|
||||
DECLARE_WRITE_LINE_MEMBER( ptm_irq );
|
||||
|
||||
DECLARE_WRITE_LINE_MEMBER( acia_interrupt );
|
||||
DECLARE_WRITE_LINE_MEMBER( write_acia_clock );
|
||||
|
||||
DECLARE_WRITE_LINE_MEMBER( fdc_intrq_w );
|
||||
DECLARE_WRITE_LINE_MEMBER( fdc_drq_w );
|
||||
|
||||
DECLARE_READ8_MEMBER( dmf3_via_read_porta );
|
||||
DECLARE_READ8_MEMBER( dmf3_via_read_portb );
|
||||
DECLARE_WRITE8_MEMBER( dmf3_via_write_porta );
|
||||
DECLARE_WRITE_LINE_MEMBER( dmf3_via_write_ca1 );
|
||||
DECLARE_WRITE_LINE_MEMBER( dmf3_via_irq );
|
||||
|
||||
DECLARE_READ8_MEMBER(piaide_a_r);
|
||||
DECLARE_READ8_MEMBER(piaide_b_r);
|
||||
DECLARE_WRITE8_MEMBER(piaide_a_w);
|
||||
DECLARE_WRITE8_MEMBER(piaide_b_w);
|
||||
|
||||
DECLARE_WRITE8_MEMBER(swtpc09_kbd_put);
|
||||
|
||||
DECLARE_READ8_MEMBER ( dmf2_dma_address_reg_r );
|
||||
DECLARE_WRITE8_MEMBER ( dmf2_dma_address_reg_w );
|
||||
DECLARE_READ8_MEMBER ( dmf2_control_reg_r );
|
||||
DECLARE_WRITE8_MEMBER ( dmf2_control_reg_w );
|
||||
|
||||
DECLARE_READ8_MEMBER ( dmf3_dma_address_reg_r );
|
||||
DECLARE_WRITE8_MEMBER ( dmf3_dma_address_reg_w );
|
||||
DECLARE_READ8_MEMBER ( dmf3_control_reg_r );
|
||||
DECLARE_WRITE8_MEMBER ( dmf3_control_reg_w );
|
||||
|
||||
DECLARE_WRITE8_MEMBER ( dc4_control_reg_w );
|
||||
|
||||
DECLARE_WRITE8_MEMBER(dat_w);
|
||||
|
||||
DECLARE_DRIVER_INIT( swtpc09 );
|
||||
DECLARE_DRIVER_INIT( swtpc09i );
|
||||
DECLARE_DRIVER_INIT( swtpc09u );
|
||||
DECLARE_DRIVER_INIT( swtpc09d3 );
|
||||
|
||||
void swtpc09_fdc_dma_transfer();
|
||||
void swtpc09_irq_handler(UINT8 peripheral, UINT8 state);
|
||||
|
||||
UINT8 m_term_data; // terminal keyboard value
|
||||
UINT8 m_pia_counter; // this is the counter on pia porta
|
||||
UINT8 m_fdc_dma_address_reg; // dmf2 or dmf3 dma extended address reg
|
||||
UINT8 m_system_type; // flag to indicate hw and rom combination
|
||||
UINT8 m_fdc_status; // for floppy controller
|
||||
UINT8 m_via_ca1_input; // dmf3 fdc interupt is connected here
|
||||
UINT8 m_dmf3_via_porta;
|
||||
UINT8 m_piaide_porta;
|
||||
UINT8 m_piaide_portb;
|
||||
UINT8 m_active_interrupt;
|
||||
UINT8 m_interrupt;
|
||||
|
||||
};
|
||||
|
||||
/*----------- defined in machine/swtpc09.c -----------*/
|
||||
|
||||
extern const wd17xx_interface swtpc09_wd17xx_interface;
|
||||
extern const ptm6840_interface swtpc09_6840_intf;
|
||||
|
||||
|
||||
READ8_HANDLER ( m6844_r );
|
||||
WRITE8_HANDLER ( m6844_w );
|
||||
|
||||
|
||||
#endif /* swtpc09_H_ */
|
||||
|
||||
|
||||
|
973
src/mess/machine/swtpc09.c
Normal file
973
src/mess/machine/swtpc09.c
Normal file
@ -0,0 +1,973 @@
|
||||
/***************************************************************************
|
||||
swtpc09 machine file
|
||||
Robert Justice ,2009-2014
|
||||
|
||||
****************************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
#include "includes/swtpc09.h"
|
||||
|
||||
#define DMAC_IRQ 0x01 // interrupt handler IDs
|
||||
#define ACIA_IRQ 0x02
|
||||
#define PTM_IRQ 0x04
|
||||
#define PIA_IRQ 0x08
|
||||
#define FDC_IRQ 0x10
|
||||
#define VIA_IRQ 0x20
|
||||
|
||||
#define FLEX_DMF2 1 // system type flags
|
||||
#define UNIFLEX_DMF2 2
|
||||
#define UNIFLEX_DMF3 3
|
||||
#define FLEX_DC4_PIAIDE 4
|
||||
|
||||
#define VERBOSE 0
|
||||
|
||||
#define LOG(x) do { if (VERBOSE) logerror x; } while (0)
|
||||
|
||||
|
||||
/* channel_data structure holds info about each 6844 DMA channel */
|
||||
typedef struct m6844_channel_data
|
||||
{
|
||||
int active;
|
||||
int address;
|
||||
int counter;
|
||||
UINT8 control;
|
||||
int start_address;
|
||||
int start_counter;
|
||||
} m6844_channel_data;
|
||||
|
||||
/* 6844 description */
|
||||
static m6844_channel_data m6844_channel[4];
|
||||
static UINT8 m6844_priority;
|
||||
static UINT8 m6844_interrupt;
|
||||
static UINT8 m6844_chain;
|
||||
|
||||
/******* MC6840 PTM on MPID Board *******/
|
||||
/* 6840 PTM interface */
|
||||
const ptm6840_interface swtpc09_6840_intf =
|
||||
{
|
||||
2000000,
|
||||
{ 50, 0, 50 },
|
||||
{ DEVCB_DRIVER_MEMBER(swtpc09_state, ptm_o1_callback), DEVCB_NULL, DEVCB_DRIVER_MEMBER(swtpc09_state, ptm_o3_callback) },
|
||||
DEVCB_DRIVER_LINE_MEMBER(swtpc09_state, ptm_irq)
|
||||
};
|
||||
|
||||
/* 6840 PTM handlers */
|
||||
WRITE8_MEMBER( swtpc09_state::ptm_o1_callback )
|
||||
{
|
||||
pia6821_device *pia = machine().device<pia6821_device>("pia");
|
||||
|
||||
m_pia_counter++;
|
||||
//pia_counter = pia_counter && 0xff;
|
||||
if (m_pia_counter && 0x80) pia->ca1_w(1);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER( swtpc09_state::ptm_o3_callback )
|
||||
{
|
||||
//ptm6840_device *ptm = machine().device<ptm6840_device>("ptm");
|
||||
/* the output from timer3 is the input clock for timer2 */
|
||||
//m_ptm->set_c2(data);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER( swtpc09_state::ptm_irq )
|
||||
{
|
||||
if (state)
|
||||
swtpc09_irq_handler(PTM_IRQ, ASSERT_LINE);
|
||||
else
|
||||
swtpc09_irq_handler(PTM_IRQ, CLEAR_LINE);
|
||||
}
|
||||
|
||||
/******* MC6821 PIA on MPID Board *******/
|
||||
/* Read/Write handlers for pia */
|
||||
|
||||
READ8_MEMBER( swtpc09_state::pia0_a_r )
|
||||
{
|
||||
return m_pia_counter;
|
||||
}
|
||||
|
||||
READ8_MEMBER( swtpc09_state::pia0_ca1_r )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER( swtpc09_state::pia0_irq_a )
|
||||
{
|
||||
pia6821_device *pia = machine().device<pia6821_device>("pia");
|
||||
|
||||
if ( pia->irq_a_state())
|
||||
swtpc09_irq_handler(PIA_IRQ, ASSERT_LINE);
|
||||
else
|
||||
swtpc09_irq_handler(PIA_IRQ, CLEAR_LINE);
|
||||
|
||||
}
|
||||
|
||||
|
||||
/******* MC6850 ACIA on MPS2 *******/
|
||||
|
||||
WRITE_LINE_MEMBER( swtpc09_state::acia_interrupt )
|
||||
{
|
||||
if (state)
|
||||
{
|
||||
swtpc09_irq_handler(ACIA_IRQ, ASSERT_LINE);
|
||||
LOG(("swtpc09_acia_irq_assert\n"));
|
||||
}
|
||||
else
|
||||
{
|
||||
swtpc09_irq_handler(ACIA_IRQ, CLEAR_LINE);
|
||||
LOG(("swtpc09_acia_irq_clear\n"));
|
||||
}
|
||||
}
|
||||
|
||||
/*********************************************************************/
|
||||
/* DMF2 Floppy Controller Board */
|
||||
/*********************************************************************/
|
||||
|
||||
/* DMF2 dma extended address register */
|
||||
READ8_MEMBER ( swtpc09_state::dmf2_dma_address_reg_r )
|
||||
{
|
||||
return m_fdc_dma_address_reg;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER ( swtpc09_state::dmf2_dma_address_reg_w )
|
||||
{
|
||||
m_fdc_dma_address_reg = data;
|
||||
|
||||
// bit 4 controls a gate enable/disable for DMF2 fdc irq line
|
||||
if ((m_fdc_dma_address_reg & 0x10) && (m_system_type == UNIFLEX_DMF2 || m_system_type == FLEX_DMF2))
|
||||
swtpc09_irq_handler(FDC_IRQ, CLEAR_LINE); //then clear the irq to cpu
|
||||
|
||||
LOG(("swtpc09_dmf2_dma_address_reg_w %02X\n", data));
|
||||
}
|
||||
|
||||
/* DMF2 fdc control register */
|
||||
READ8_MEMBER ( swtpc09_state::dmf2_control_reg_r )
|
||||
{
|
||||
//LOG(("swtpc09_dmf2_control_reg_r $%02X\n", m_fdc_status));
|
||||
return m_fdc_status;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER ( swtpc09_state::dmf2_control_reg_w )
|
||||
{
|
||||
LOG(("swtpc09_dmf2_control_reg_w $%02X\n", data));
|
||||
|
||||
switch (data & 0x0F)
|
||||
{
|
||||
case 0x0e:
|
||||
m_fdc->set_drive(0);
|
||||
// need to set drive ready as sw checks before doing anything
|
||||
floppy_drive_set_ready_state(machine().device("floppy0"), 1,0);
|
||||
break;
|
||||
case 0x0d:
|
||||
m_fdc->set_drive(1);
|
||||
floppy_drive_set_ready_state(machine().device("floppy1"), 1,0);
|
||||
break;
|
||||
|
||||
case 0x0b:
|
||||
m_fdc->set_drive(2);
|
||||
floppy_drive_set_ready_state(machine().device("floppy2"), 1,0);
|
||||
break;
|
||||
|
||||
case 0x07:
|
||||
m_fdc->set_drive(3);
|
||||
floppy_drive_set_ready_state(machine().device("floppy3"), 1,0);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
// ignore side select in emulation due to sector numbering
|
||||
////side select
|
||||
//if (!(data & 0x10)) {
|
||||
// wd17xx_set_side(fdc, 1);
|
||||
//}
|
||||
//if (data & 0x10) {
|
||||
// wd17xx_set_side(fdc, 0);
|
||||
//}
|
||||
|
||||
|
||||
/* bit 5 dden select */
|
||||
|
||||
if (!(data & 0x20)) {
|
||||
m_fdc->dden_w(0);
|
||||
LOG(("Density single\n"));
|
||||
}
|
||||
if (data & 0x20) {
|
||||
m_fdc->dden_w(1);
|
||||
LOG(("Density double\n"));
|
||||
}
|
||||
}
|
||||
|
||||
/* FDC controller dma transfer */
|
||||
void swtpc09_state::swtpc09_fdc_dma_transfer()
|
||||
{
|
||||
UINT8 *RAM = memregion("maincpu")->base();
|
||||
UINT32 offset;
|
||||
address_space &space = m_maincpu->space(AS_PROGRAM);
|
||||
|
||||
offset = (m_fdc_dma_address_reg & 0x0f)<<16;
|
||||
|
||||
if (m6844_channel[0].active == 1) //active dma transfer
|
||||
{
|
||||
if (!(m6844_channel[0].control & 0x01)) // dma write to memory
|
||||
{
|
||||
UINT8 data = m_fdc->data_r(space, 0);
|
||||
|
||||
LOG(("swtpc09_dma_write_mem %05X %02X\n", m6844_channel[0].address + offset, data));
|
||||
RAM[m6844_channel[0].address + offset] = data;
|
||||
}
|
||||
else
|
||||
{
|
||||
UINT8 data = RAM[m6844_channel[0].address + offset];
|
||||
|
||||
m_fdc->data_w(space, 0, data);
|
||||
//LOG(("swtpc09_dma_read_mem %04X %02X\n", m6844_channel[0].address, data));
|
||||
}
|
||||
|
||||
m6844_channel[0].address++;
|
||||
m6844_channel[0].counter--;
|
||||
|
||||
if (m6844_channel[0].counter == 0) // dma transfer has finished
|
||||
{
|
||||
m6844_channel[0].control |= 0x80; // set dend flag
|
||||
if (m6844_interrupt & 0x01) // interrupt for channel 0 is enabled?
|
||||
{
|
||||
m6844_interrupt |= 0x80; // set bit 7 to indicate active interrupt
|
||||
swtpc09_irq_handler(DMAC_IRQ, ASSERT_LINE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/* common interrupt handler */
|
||||
void swtpc09_state::swtpc09_irq_handler(UINT8 peripheral, UINT8 state)
|
||||
{
|
||||
LOG(("swtpc09_irq_handler peripheral:%02X state:%02X\n", peripheral, state));
|
||||
|
||||
switch (state)
|
||||
{
|
||||
case ASSERT_LINE:
|
||||
m_interrupt |= peripheral;
|
||||
break;
|
||||
|
||||
case CLEAR_LINE:
|
||||
m_interrupt &= (~peripheral & 0x3f);
|
||||
break;
|
||||
}
|
||||
|
||||
if (!m_active_interrupt && m_interrupt) //no active interrupt and it needs to be asserted
|
||||
{
|
||||
m_maincpu->set_input_line(INPUT_LINE_IRQ0, ASSERT_LINE);
|
||||
m_active_interrupt=TRUE;
|
||||
LOG(("swtpc09_irq_assert %02X\n", peripheral));
|
||||
}
|
||||
else if (m_active_interrupt && !m_interrupt) //active interrupt and it needs to be cleared
|
||||
{
|
||||
m_maincpu->set_input_line(INPUT_LINE_IRQ0, CLEAR_LINE);
|
||||
LOG(("swtpc09_irq_clear %02X\n", peripheral));
|
||||
m_active_interrupt=FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
/******* WD1791 FDC *******/
|
||||
/* wd1791 fdc interface */
|
||||
const wd17xx_interface swtpc09_wd17xx_interface =
|
||||
{
|
||||
DEVCB_NULL,
|
||||
DEVCB_DRIVER_LINE_MEMBER(swtpc09_state, fdc_intrq_w),
|
||||
DEVCB_DRIVER_LINE_MEMBER(swtpc09_state, fdc_drq_w),
|
||||
{FLOPPY_0, FLOPPY_1, FLOPPY_2, FLOPPY_3 }
|
||||
};
|
||||
|
||||
/* handlers for fdc */
|
||||
WRITE_LINE_MEMBER( swtpc09_state::fdc_intrq_w )
|
||||
{
|
||||
LOG(("swtpc09_fdc_intrq_w %02X\n", state));
|
||||
if ( m_system_type == UNIFLEX_DMF3 ) //IRQ from 1791 is connect into VIA ca2
|
||||
{
|
||||
if (state)
|
||||
{
|
||||
m_fdc_status |= 0x40;
|
||||
m_via->write_cb2(0); //fdc interrupt is connected to CA1
|
||||
m_dmf3_via_porta &= 0xfb; //clear pa3
|
||||
//m_via->write_porta(m_dmf3_via_porta); //and connected to PA3
|
||||
//swtpc09_irq_handler(FDC_IRQ, ASSERT_LINE);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_fdc_status &= ~0x40;
|
||||
m_via->write_cb2(1);
|
||||
m_dmf3_via_porta |= 0x04; //and connected to PA3
|
||||
//m_via->write_porta(m_dmf3_via_porta); //and connected to PA3
|
||||
//swtpc09_irq_handler(FDC_IRQ, CLEAR_LINE);
|
||||
}
|
||||
}
|
||||
else if ( m_system_type == FLEX_DC4_PIAIDE ) //for dc4 emulate irq jumper out
|
||||
{
|
||||
if (state)
|
||||
{
|
||||
m_fdc_status |= 0x40;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_fdc_status &= ~0x40;
|
||||
}
|
||||
}
|
||||
else //for dmf2 it is connected directly to cpu via a gate
|
||||
{
|
||||
if (state)
|
||||
{
|
||||
m_fdc_status |= 0x40;
|
||||
if (!(m_fdc_dma_address_reg & 0x10)) // is dmf2 fdc irq enabled
|
||||
{
|
||||
LOG(("swtpc09_fdc_int ** assert\n"));
|
||||
swtpc09_irq_handler(FDC_IRQ, ASSERT_LINE);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
m_fdc_status &= ~0x40;
|
||||
if (!(m_fdc_dma_address_reg & 0x10)) // is dmf2 fdc irq enabled
|
||||
{
|
||||
LOG(("swtpc09_fdc_int ** clear\n"));
|
||||
swtpc09_irq_handler(FDC_IRQ, CLEAR_LINE);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER( swtpc09_state::fdc_drq_w )
|
||||
{
|
||||
if (m_system_type == FLEX_DC4_PIAIDE) //for dc4 no dma
|
||||
{
|
||||
if (state)
|
||||
{
|
||||
m_fdc_status |= 0x80;
|
||||
}
|
||||
else
|
||||
m_fdc_status &= 0x7f;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (state)
|
||||
{
|
||||
m_fdc_status |= 0x80;
|
||||
swtpc09_fdc_dma_transfer();
|
||||
}
|
||||
else
|
||||
m_fdc_status &= 0x7f;
|
||||
}
|
||||
}
|
||||
|
||||
/*********************************************************************/
|
||||
/* DMF3 Board */
|
||||
/*********************************************************************/
|
||||
|
||||
/* via on dmf3 board */
|
||||
READ8_MEMBER( swtpc09_state::dmf3_via_read_porta )
|
||||
{
|
||||
return m_dmf3_via_porta;
|
||||
}
|
||||
|
||||
READ8_MEMBER( swtpc09_state::dmf3_via_read_portb )
|
||||
{
|
||||
return 0xff;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER( swtpc09_state::dmf3_via_write_porta )
|
||||
{
|
||||
m_dmf3_via_porta &= data;
|
||||
}
|
||||
|
||||
//WRITE_LINE_MEMBER( swtpc09_state::dmf3_via_write_ca1 )
|
||||
//{
|
||||
// return m_via_ca1_input;
|
||||
// LOG(("swtpc09_dmf3_via_write_ca1 %02X\n", state));
|
||||
|
||||
//}
|
||||
|
||||
WRITE_LINE_MEMBER( swtpc09_state::dmf3_via_irq )
|
||||
{
|
||||
if (state)
|
||||
swtpc09_irq_handler(VIA_IRQ, ASSERT_LINE);
|
||||
else
|
||||
swtpc09_irq_handler(VIA_IRQ, CLEAR_LINE);
|
||||
}
|
||||
|
||||
/* DMF3 dma extended address register */
|
||||
READ8_MEMBER ( swtpc09_state::dmf3_dma_address_reg_r )
|
||||
{
|
||||
return m_fdc_dma_address_reg;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER ( swtpc09_state::dmf3_dma_address_reg_w )
|
||||
{
|
||||
m_fdc_dma_address_reg = data;
|
||||
LOG(("swtpc09_dmf3_dma_address_reg_w %02X\n", data));
|
||||
}
|
||||
|
||||
/* DMF3 fdc control register */
|
||||
READ8_MEMBER ( swtpc09_state::dmf3_control_reg_r )
|
||||
{
|
||||
//LOG(("swtpc09_dmf3_control_reg_r $%02X\n", m_fdc_status));
|
||||
return m_fdc_status;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER ( swtpc09_state::dmf3_control_reg_w )
|
||||
{
|
||||
LOG(("swtpc09_dmf3_control_reg_w $%02X\n", data));
|
||||
|
||||
switch (data & 0x0F)
|
||||
{
|
||||
case 0x01:
|
||||
m_fdc->set_drive(0);
|
||||
// need to set drive ready as sw checks before doing anything
|
||||
floppy_drive_set_ready_state(machine().device("floppy0"), 1,0);
|
||||
break;
|
||||
case 0x02:
|
||||
m_fdc->set_drive(1);
|
||||
floppy_drive_set_ready_state(machine().device("floppy1"), 1,0);
|
||||
break;
|
||||
|
||||
case 0x04:
|
||||
m_fdc->set_drive(2);
|
||||
floppy_drive_set_ready_state(machine().device("floppy2"), 1,0);
|
||||
break;
|
||||
|
||||
case 0x08:
|
||||
m_fdc->set_drive(3);
|
||||
floppy_drive_set_ready_state(machine().device("floppy3"), 1,0);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
// ignore side select in emulation due to sector numbering
|
||||
////side select
|
||||
//if (!(data & 0x10)) {
|
||||
// wd17xx_set_side(fdc, 1);
|
||||
//}
|
||||
//if (data & 0x10) {
|
||||
// wd17xx_set_side(fdc, 0);
|
||||
//}
|
||||
|
||||
|
||||
/* bit 5 dden select */
|
||||
|
||||
if (data & 0x20) {
|
||||
m_fdc->dden_w(0);
|
||||
LOG(("Density single\n"));
|
||||
}
|
||||
if (!(data & 0x20)) {
|
||||
m_fdc->dden_w(1);
|
||||
LOG(("Density double\n"));
|
||||
}
|
||||
}
|
||||
|
||||
// DC4 drive select
|
||||
|
||||
WRITE8_MEMBER ( swtpc09_state::dc4_control_reg_w )
|
||||
{
|
||||
LOG(("swtpc09_dc4_control_reg_w $%02X\n", data));
|
||||
|
||||
switch (data & 0x03)
|
||||
{
|
||||
case 0x00:
|
||||
m_fdc->set_drive(0);
|
||||
// need to set drive ready as sw checks before doing anything
|
||||
floppy_drive_set_ready_state(machine().device("floppy0"), 1,0);
|
||||
break;
|
||||
case 0x01:
|
||||
m_fdc->set_drive(1);
|
||||
floppy_drive_set_ready_state(machine().device("floppy1"), 1,0);
|
||||
break;
|
||||
|
||||
case 0x02:
|
||||
m_fdc->set_drive(2);
|
||||
floppy_drive_set_ready_state(machine().device("floppy2"), 1,0);
|
||||
break;
|
||||
|
||||
case 0x03:
|
||||
m_fdc->set_drive(3);
|
||||
floppy_drive_set_ready_state(machine().device("floppy3"), 1,0);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
// ignore side select in emulation due to sector numbering
|
||||
}
|
||||
|
||||
|
||||
/******* MC6821 PIA on IDE Board *******/
|
||||
/* Read/Write handlers for pia ide */
|
||||
/* TODO: update and finish this off */
|
||||
|
||||
READ8_MEMBER( swtpc09_state::piaide_a_r )
|
||||
{
|
||||
return m_piaide_porta;
|
||||
}
|
||||
|
||||
READ8_MEMBER( swtpc09_state::piaide_b_r )
|
||||
{
|
||||
return m_piaide_portb;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER( swtpc09_state::piaide_a_w )
|
||||
{
|
||||
m_piaide_porta = data;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER( swtpc09_state::piaide_b_w )
|
||||
{
|
||||
int tempidedata;
|
||||
|
||||
m_piaide_portb = data;
|
||||
|
||||
if ((data & 0x40)&&(!(data&0x20))) //cs0=0 cs1=1 bit 5&6
|
||||
{
|
||||
if (!(data & 0x02)) //rd line bit 1
|
||||
{
|
||||
tempidedata = m_ide->read_cs0(space, (data&0x1c)>>2, 0xffff);
|
||||
LOG(("swtpc09_ide_bus_r: offset $%02X data %04X\n", (data&0x1c)>>2, tempidedata));
|
||||
m_piaide_porta = tempidedata & 0x00ff;
|
||||
}
|
||||
else if (!(data & 0x01)) //wr line bit 0
|
||||
{
|
||||
m_ide->write_cs0(space, (data&0x1c)>>2, m_piaide_porta, 0xffff);
|
||||
LOG(("swtpc09_ide_bus_w: offset $%02X data %04X\n", (data&0x1c)>>2, m_piaide_porta));
|
||||
}
|
||||
}
|
||||
else if ((data & 0x20)&&(!(data&0x40))) //cs0=1 cs1=0 bit 5&6
|
||||
{
|
||||
if (!(data & 0x02)) //rd line bit 1
|
||||
{
|
||||
tempidedata = m_ide->read_cs1(space, (data&0x1c)>>2, 0xffff);
|
||||
LOG(("swtpc09_ide_bus_r: offset $%02X data %04X\n", (data&0x1c)>>2, tempidedata));
|
||||
m_piaide_porta = tempidedata & 0x00ff;
|
||||
}
|
||||
else if (!(data & 0x01)) //wr line bit 0
|
||||
{
|
||||
m_ide->write_cs1(space, (data&0x1c)>>2, m_piaide_porta, 0xffff);
|
||||
LOG(("swtpc09_ide_bus_w: offset $%02X data %04X\n", (data&0x1c)>>2, m_piaide_porta));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* DAT ram write handler (Dynamic Address Translator) */
|
||||
/* This creates the address map when a page is mapped in */
|
||||
/* memory map is created based on system_type flag */
|
||||
/* this is accomodate the different cards installed */
|
||||
|
||||
WRITE8_MEMBER(swtpc09_state::dat_w)
|
||||
{
|
||||
UINT8 a16_to_a19, a12_to_a15;
|
||||
UINT8 *RAM = memregion("maincpu")->base();
|
||||
UINT32 physical_address, logical_address;
|
||||
|
||||
address_space &mem = m_maincpu->space(AS_PROGRAM);
|
||||
|
||||
fd1793_device *fdc = machine().device<fd1793_device>("fdc");
|
||||
pia6821_device *pia = machine().device<pia6821_device>("pia");
|
||||
ptm6840_device *ptm = machine().device<ptm6840_device>("ptm");
|
||||
acia6850_device *acia = machine().device<acia6850_device>("acia");
|
||||
via6522_device *via = machine().device<via6522_device>("via");
|
||||
pia6821_device *piaide = machine().device<pia6821_device>("piaide");
|
||||
|
||||
a16_to_a19 = data & 0xf0;
|
||||
a12_to_a15 = ~data & 0x0f; //lower 4 bits are inverted
|
||||
physical_address = ((a16_to_a19 + a12_to_a15) << 12);
|
||||
logical_address = offset << 12;
|
||||
LOG(("swtpc09_dat_bank_unmap Logical address:%04X\n", offset << 12 ));
|
||||
LOG(("swtpc09_dat_bank_set dat:%02X Logical address:%04X Physical address:%05X\n", data, offset << 12, physical_address ));
|
||||
|
||||
|
||||
// unmap page to be changed
|
||||
mem.unmap_readwrite(offset << 12, (offset << 12)+0x0fff);
|
||||
|
||||
// map in new page
|
||||
if (a12_to_a15 == 0x0e) // 0xE000 address range to be mapped in at this page
|
||||
{
|
||||
if (m_system_type == FLEX_DMF2) // if flex/sbug, map in acia at 0xE004
|
||||
{
|
||||
mem.nop_readwrite(logical_address+0x000, logical_address+0x003);
|
||||
mem.install_readwrite_handler(logical_address+0x004, logical_address+0x004, read8_delegate(FUNC(acia6850_device::status_r), acia), write8_delegate(FUNC(acia6850_device::control_w),acia));
|
||||
mem.install_readwrite_handler(logical_address+0x005, logical_address+0x005, read8_delegate(FUNC(acia6850_device::data_r), acia), write8_delegate(FUNC(acia6850_device::data_w),acia));
|
||||
mem.nop_readwrite(logical_address+0x006, logical_address+0x07f);
|
||||
mem.install_readwrite_handler(logical_address+0x080, logical_address+0x08f, read8_delegate(FUNC(pia6821_device::read), pia), write8_delegate(FUNC(pia6821_device::write), pia));
|
||||
mem.install_readwrite_handler(logical_address+0x090, logical_address+0x09f, read8_delegate(FUNC(ptm6840_device::read), ptm), write8_delegate(FUNC(ptm6840_device::write), ptm));
|
||||
mem.nop_readwrite(logical_address+0x0a0, logical_address+0xfff);
|
||||
}
|
||||
else if (m_system_type == FLEX_DC4_PIAIDE) // if flex/sbug and dc4 and piaide
|
||||
{
|
||||
mem.nop_readwrite(logical_address+0x000, logical_address+0x003);
|
||||
mem.install_readwrite_handler(logical_address+0x004, logical_address+0x004, read8_delegate(FUNC(acia6850_device::status_r), acia), write8_delegate(FUNC(acia6850_device::control_w),acia));
|
||||
mem.install_readwrite_handler(logical_address+0x005, logical_address+0x005, read8_delegate(FUNC(acia6850_device::data_r), acia), write8_delegate(FUNC(acia6850_device::data_w),acia));
|
||||
mem.install_write_handler(logical_address+0x014, logical_address+0x014, write8_delegate(FUNC(swtpc09_state::dc4_control_reg_w),this));
|
||||
mem.install_readwrite_handler(logical_address+0x018, logical_address+0x01b, read8_delegate(FUNC(fd1793_device::read), fdc), write8_delegate(FUNC(fd1793_device::write),fdc));
|
||||
//mem.nop_readwrite(logical_address+0x01c, logical_address+0x05f);
|
||||
mem.install_readwrite_handler(logical_address+0x060, logical_address+0x06f, read8_delegate(FUNC(pia6821_device::read), piaide), write8_delegate(FUNC(pia6821_device::write), piaide));
|
||||
//mem.nop_readwrite(logical_address+0x070, logical_address+0x07f);
|
||||
mem.install_readwrite_handler(logical_address+0x080, logical_address+0x08f, read8_delegate(FUNC(pia6821_device::read), pia), write8_delegate(FUNC(pia6821_device::write), pia));
|
||||
mem.install_readwrite_handler(logical_address+0x090, logical_address+0x09f, read8_delegate(FUNC(ptm6840_device::read), ptm), write8_delegate(FUNC(ptm6840_device::write), ptm));
|
||||
//mem.nop_readwrite(logical_address+0x0a0, logical_address+0x7ff);
|
||||
mem.install_rom(logical_address+0x800, logical_address+0xfff, &RAM[0xe800]); //piaide rom
|
||||
}
|
||||
else // assume unibug, map in acia at 0xE000
|
||||
{
|
||||
mem.install_readwrite_handler(logical_address+0x000, logical_address+0x000, read8_delegate(FUNC(acia6850_device::status_r), acia), write8_delegate(FUNC(acia6850_device::control_w), acia));
|
||||
mem.install_readwrite_handler(logical_address+0x001, logical_address+0x001, read8_delegate(FUNC(acia6850_device::data_r), acia), write8_delegate(FUNC(acia6850_device::data_w), acia));
|
||||
mem.nop_readwrite(logical_address+0x002, logical_address+0x07f);
|
||||
mem.install_readwrite_handler(logical_address+0x080, logical_address+0x08f, read8_delegate(FUNC(pia6821_device::read), pia), write8_delegate(FUNC(pia6821_device::write), pia));
|
||||
mem.install_readwrite_handler(logical_address+0x090, logical_address+0x09f, read8_delegate(FUNC(ptm6840_device::read), ptm), write8_delegate(FUNC(ptm6840_device::write), ptm));
|
||||
mem.nop_readwrite(logical_address+0x0a0, logical_address+0xfff);
|
||||
}
|
||||
}
|
||||
else if (a12_to_a15 == 0x0f) // 0xF000 address range to be mapped in at this page
|
||||
{
|
||||
if (m_system_type == UNIFLEX_DMF2 || m_system_type == FLEX_DMF2) // if DMF2 conroller this is the map
|
||||
{
|
||||
mem.install_legacy_readwrite_handler(logical_address+0x000, logical_address+0x01f, FUNC(m6844_r), FUNC(m6844_w));
|
||||
mem.install_readwrite_handler(logical_address+0x020, logical_address+0x023, read8_delegate(FUNC(fd1793_device::read), fdc), write8_delegate(FUNC(fd1793_device::write),fdc));
|
||||
mem.install_readwrite_handler(logical_address+0x024, logical_address+0x03f, read8_delegate(FUNC(swtpc09_state::dmf2_control_reg_r),this), write8_delegate(FUNC(swtpc09_state::dmf2_control_reg_w),this));
|
||||
mem.install_readwrite_handler(logical_address+0x040, logical_address+0x041, read8_delegate(FUNC(swtpc09_state::dmf2_dma_address_reg_r),this), write8_delegate(FUNC(swtpc09_state::dmf2_dma_address_reg_w),this));
|
||||
//mem.nop_readwrite(logical_address+0x042, logical_address+0x7ff);
|
||||
mem.install_rom(logical_address+0x800, logical_address+0xfff, &RAM[0xf800]);
|
||||
mem.install_write_handler(logical_address+0xff0, logical_address+0xfff, write8_delegate(FUNC(swtpc09_state::dat_w),this));
|
||||
}
|
||||
else if (m_system_type == FLEX_DC4_PIAIDE) // 2k ram for piaide on s09 board
|
||||
{
|
||||
//mem.install_legacy_readwrite_handler(logical_address+0x000, logical_address+0x01f, FUNC(m6844_r), FUNC(m6844_w));
|
||||
//mem.install_legacy_readwrite_handler(*fdc, logical_address+0x020, logical_address+0x023, 0, 0, FUNC(wd17xx_r), FUNC(wd17xx_w));
|
||||
//mem.install_readwrite_handler(logical_address+0x024, logical_address+0x03f, read8_delegate(FUNC(swtpc09_state::dmf2_control_reg_r),this), write8_delegate(FUNC(swtpc09_state::dmf2_control_reg_w),this));
|
||||
//mem.install_readwrite_handler(logical_address+0x040, logical_address+0x041, read8_delegate(FUNC(swtpc09_state::dmf2_dma_address_reg_r),this), write8_delegate(FUNC(swtpc09_state::dmf2_dma_address_reg_w),this));
|
||||
mem.install_ram(logical_address+0x000, logical_address+0x7ff, &RAM[0xf000]);
|
||||
mem.install_rom(logical_address+0x800, logical_address+0xfff, &RAM[0xf800]);
|
||||
mem.install_write_handler(logical_address+0xff0, logical_address+0xfff, write8_delegate(FUNC(swtpc09_state::dat_w),this));
|
||||
}
|
||||
else // assume DMF3 controller
|
||||
{
|
||||
mem.install_legacy_readwrite_handler(logical_address+0x000, logical_address+0x01f, FUNC(m6844_r), FUNC(m6844_w));
|
||||
mem.install_readwrite_handler(logical_address+0x020, logical_address+0x023, read8_delegate(FUNC(fd1793_device::read), fdc), write8_delegate(FUNC(fd1793_device::write),fdc));
|
||||
mem.install_readwrite_handler(logical_address+0x024, logical_address+0x024, read8_delegate(FUNC(swtpc09_state::dmf3_control_reg_r),this), write8_delegate(FUNC(swtpc09_state::dmf3_control_reg_w),this));
|
||||
mem.install_readwrite_handler(logical_address+0x025, logical_address+0x025, read8_delegate(FUNC(swtpc09_state::dmf3_dma_address_reg_r),this), write8_delegate(FUNC(swtpc09_state::dmf3_dma_address_reg_w),this));
|
||||
//mem.nop_readwrite(logical_address+0x030, logical_address+0x03f);
|
||||
mem.install_readwrite_handler(logical_address+0x040, logical_address+0x04f, read8_delegate(FUNC(via6522_device::read), via), write8_delegate(FUNC(via6522_device::write), via));
|
||||
//mem.nop_readwrite(logical_address+0x050, logical_address+0x7ff);
|
||||
mem.install_rom(logical_address+0x800, logical_address+0xfff, &RAM[0xf800]);
|
||||
mem.install_write_handler(logical_address+0xff0, logical_address+0xfff, write8_delegate(FUNC(swtpc09_state::dat_w),this));
|
||||
}
|
||||
}
|
||||
else if (offset==0x0f) // then we need to leave in top part of ram and dat write
|
||||
{
|
||||
mem.install_ram(logical_address, logical_address+0x0eff, 0, 0, &RAM[physical_address]);
|
||||
mem.install_rom(logical_address+0xf00, logical_address+0xfff, 0, 0, &RAM[0xff00]);
|
||||
mem.install_write_handler(logical_address+0xff0, logical_address+0xfff, write8_delegate(FUNC(swtpc09_state::dat_w),this));
|
||||
|
||||
}
|
||||
else // all the rest is treated as ram, 1MB ram emulated
|
||||
{
|
||||
mem.install_ram(logical_address, logical_address+0x0fff, &RAM[physical_address]);
|
||||
}
|
||||
|
||||
// unused code to limit to 256k ram
|
||||
// else if (!(a12_to_a15 & 0x0c) ) // limit ram to 256k || a12_to_a15 == 0x02
|
||||
// {
|
||||
// memory_install_ram(space, logical_address, logical_address+0x0fff, 0, 0, &RAM[physical_address]);
|
||||
// }
|
||||
//
|
||||
// else // all the rest is treated as unallocated
|
||||
// {
|
||||
// memory_nop_readwrite(space, logical_address, logical_address+0x0fff, 0, 0);
|
||||
// }
|
||||
|
||||
}
|
||||
|
||||
/* MC6844 DMA controller I/O */
|
||||
|
||||
READ8_HANDLER( m6844_r )
|
||||
{
|
||||
UINT8 result = 0;
|
||||
swtpc09_state *state = space.machine().driver_data<swtpc09_state>();
|
||||
|
||||
|
||||
/* switch off the offset we were given */
|
||||
switch (offset)
|
||||
{
|
||||
/* upper byte of address */
|
||||
case 0x00:
|
||||
case 0x04:
|
||||
case 0x08:
|
||||
case 0x0c:
|
||||
result = m6844_channel[offset / 4].address >> 8;
|
||||
break;
|
||||
|
||||
/* lower byte of address */
|
||||
case 0x01:
|
||||
case 0x05:
|
||||
case 0x09:
|
||||
case 0x0d:
|
||||
result = m6844_channel[offset / 4].address & 0xff;
|
||||
break;
|
||||
|
||||
/* upper byte of counter */
|
||||
case 0x02:
|
||||
case 0x06:
|
||||
case 0x0a:
|
||||
case 0x0e:
|
||||
result = m6844_channel[offset / 4].counter >> 8;
|
||||
break;
|
||||
|
||||
/* lower byte of counter */
|
||||
case 0x03:
|
||||
case 0x07:
|
||||
case 0x0b:
|
||||
case 0x0f:
|
||||
result = m6844_channel[offset / 4].counter & 0xff;
|
||||
break;
|
||||
|
||||
/* channel control */
|
||||
case 0x10:
|
||||
case 0x11:
|
||||
case 0x12:
|
||||
case 0x13:
|
||||
result = m6844_channel[offset - 0x10].control;
|
||||
|
||||
/* a read here clears the DMA end flag */
|
||||
m6844_channel[offset - 0x10].control &= ~0x80;
|
||||
if (m6844_interrupt && 0x80) // if interrupt is active, then clear
|
||||
{
|
||||
state->swtpc09_irq_handler(0x01, CLEAR_LINE);
|
||||
m6844_interrupt &= 0x7f; // clear interrupt indication bit 7
|
||||
LOG(("swtpc09_6844_r interrupt cleared \n"));
|
||||
}
|
||||
break;
|
||||
|
||||
/* priority control */
|
||||
case 0x14:
|
||||
result = m6844_priority;
|
||||
break;
|
||||
|
||||
/* interrupt control */
|
||||
case 0x15:
|
||||
result = m6844_interrupt;
|
||||
break;
|
||||
|
||||
/* chaining control */
|
||||
case 0x16:
|
||||
result = m6844_chain;
|
||||
break;
|
||||
|
||||
/* 0x17-0x1f not used */
|
||||
default: break;
|
||||
}
|
||||
//LOG(("swtpc09_6844_r %02X %02X\n", offset, result & 0xff));
|
||||
|
||||
if (state->m_system_type == UNIFLEX_DMF2 || state->m_system_type == FLEX_DMF2) // if DMF2 controller data bus is inverted to 6844
|
||||
{
|
||||
return ~result & 0xff;
|
||||
}
|
||||
else
|
||||
{
|
||||
return result & 0xff;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
WRITE8_HANDLER( m6844_w )
|
||||
{
|
||||
int i;
|
||||
swtpc09_state *state = space.machine().driver_data<swtpc09_state>();
|
||||
|
||||
if (state->m_system_type == UNIFLEX_DMF2 || state->m_system_type == FLEX_DMF2) // if DMF2 controller data bus is inverted to 6844
|
||||
data = ~data & 0xff;
|
||||
|
||||
LOG(("swtpc09_6844_w %02X %02X\n", offset, data));
|
||||
/* switch off the offset we were given */
|
||||
switch (offset)
|
||||
{
|
||||
/* upper byte of address */
|
||||
case 0x00:
|
||||
case 0x04:
|
||||
case 0x08:
|
||||
case 0x0c:
|
||||
m6844_channel[offset / 4].address = (m6844_channel[offset / 4].address & 0xff) | (data << 8);
|
||||
break;
|
||||
|
||||
/* lower byte of address */
|
||||
case 0x01:
|
||||
case 0x05:
|
||||
case 0x09:
|
||||
case 0x0d:
|
||||
m6844_channel[offset / 4].address = (m6844_channel[offset / 4].address & 0xff00) | (data & 0xff);
|
||||
break;
|
||||
|
||||
/* upper byte of counter */
|
||||
case 0x02:
|
||||
case 0x06:
|
||||
case 0x0a:
|
||||
case 0x0e:
|
||||
m6844_channel[offset / 4].counter = (m6844_channel[offset / 4].counter & 0xff) | (data << 8);
|
||||
break;
|
||||
|
||||
/* lower byte of counter */
|
||||
case 0x03:
|
||||
case 0x07:
|
||||
case 0x0b:
|
||||
case 0x0f:
|
||||
m6844_channel[offset / 4].counter = (m6844_channel[offset / 4].counter & 0xff00) | (data & 0xff);
|
||||
break;
|
||||
|
||||
/* channel control */
|
||||
case 0x10:
|
||||
case 0x11:
|
||||
case 0x12:
|
||||
case 0x13:
|
||||
m6844_channel[offset - 0x10].control = (m6844_channel[offset - 0x10].control & 0xc0) | (data & 0x3f);
|
||||
break;
|
||||
|
||||
/* priority control */
|
||||
case 0x14:
|
||||
m6844_priority = data;
|
||||
|
||||
/* update each channel */
|
||||
for (i = 0; i < 4; i++)
|
||||
{
|
||||
/* if we're going active... */
|
||||
if (!m6844_channel[i].active && (data & (1 << i)))
|
||||
{
|
||||
/* mark us active */
|
||||
m6844_channel[i].active = 1;
|
||||
LOG(("swtpc09_dma_channel active %02X\n", i));
|
||||
|
||||
/* set the DMA busy bit and clear the DMA end bit */
|
||||
m6844_channel[i].control |= 0x40;
|
||||
m6844_channel[i].control &= ~0x80;
|
||||
|
||||
/* set the starting address, counter, and time */
|
||||
m6844_channel[i].start_address = m6844_channel[i].address;
|
||||
m6844_channel[i].start_counter = m6844_channel[i].counter;
|
||||
|
||||
|
||||
/* generate and play the sample */
|
||||
//play_cvsd(space->machine, i);
|
||||
}
|
||||
|
||||
/* if we're going inactive... */
|
||||
else if (m6844_channel[i].active && !(data & (1 << i)))
|
||||
{
|
||||
/* mark us inactive */
|
||||
m6844_channel[i].active = 0;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
/* interrupt control */
|
||||
case 0x15:
|
||||
m6844_interrupt = (m6844_interrupt & 0x80) | (data & 0x7f);
|
||||
LOG(("swtpc09_m6844_interrupt_w %02X\n", m6844_interrupt));
|
||||
break;
|
||||
|
||||
/* chaining control */
|
||||
case 0x16:
|
||||
m6844_chain = data;
|
||||
break;
|
||||
|
||||
/* 0x17-0x1f not used */
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
DRIVER_INIT_MEMBER( swtpc09_state, swtpc09 )
|
||||
{
|
||||
int i;
|
||||
m_pia_counter = 0; // init ptm/pia counter to 0
|
||||
m_term_data = 0; // terminal keyboard input
|
||||
m_fdc_status = 0; // for floppy controller
|
||||
m_system_type = FLEX_DMF2;
|
||||
m_interrupt = 0;
|
||||
m_active_interrupt = FALSE;
|
||||
|
||||
/* reset the 6844 */
|
||||
for (i = 0; i < 4; i++)
|
||||
{
|
||||
m6844_channel[i].active = 0;
|
||||
m6844_channel[i].control = 0x00;
|
||||
}
|
||||
m6844_priority = 0x00;
|
||||
m6844_interrupt = 0x00;
|
||||
m6844_chain = 0x00;
|
||||
|
||||
}
|
||||
|
||||
DRIVER_INIT_MEMBER( swtpc09_state, swtpc09i )
|
||||
{
|
||||
int i;
|
||||
m_pia_counter = 0; // init ptm/pia counter to 0
|
||||
m_term_data = 0; // terminal keyboard input
|
||||
m_fdc_status = 0; // for floppy controller
|
||||
m_system_type = FLEX_DC4_PIAIDE;
|
||||
m_interrupt = 0;
|
||||
m_active_interrupt = FALSE;
|
||||
|
||||
/* reset the 6844 */
|
||||
for (i = 0; i < 4; i++)
|
||||
{
|
||||
m6844_channel[i].active = 0;
|
||||
m6844_channel[i].control = 0x00;
|
||||
}
|
||||
m6844_priority = 0x00;
|
||||
m6844_interrupt = 0x00;
|
||||
m6844_chain = 0x00;
|
||||
|
||||
}
|
||||
|
||||
DRIVER_INIT_MEMBER( swtpc09_state, swtpc09u )
|
||||
{
|
||||
int i;
|
||||
m_pia_counter = 0; //init ptm/pia counter to 0
|
||||
m_term_data = 0; //terminal keyboard input
|
||||
m_fdc_status = 0; // for floppy controller
|
||||
m_system_type = UNIFLEX_DMF2;
|
||||
m_interrupt = 0;
|
||||
m_active_interrupt = FALSE;
|
||||
|
||||
/* reset the 6844 */
|
||||
for (i = 0; i < 4; i++)
|
||||
{
|
||||
m6844_channel[i].active = 0;
|
||||
m6844_channel[i].control = 0x00;
|
||||
}
|
||||
m6844_priority = 0x00;
|
||||
m6844_interrupt = 0x00;
|
||||
m6844_chain = 0x00;
|
||||
|
||||
}
|
||||
|
||||
DRIVER_INIT_MEMBER( swtpc09_state, swtpc09d3 )
|
||||
{
|
||||
int i;
|
||||
m_pia_counter = 0; //init ptm/pia counter to 0
|
||||
m_term_data = 0; //terminal keyboard input
|
||||
m_fdc_status = 0; // for floppy controller
|
||||
m_via_ca1_input = 0;
|
||||
m_system_type = UNIFLEX_DMF3;
|
||||
m_interrupt = 0;
|
||||
m_active_interrupt = FALSE;
|
||||
|
||||
|
||||
/* reset the 6844 */
|
||||
for (i = 0; i < 4; i++)
|
||||
{
|
||||
m6844_channel[i].active = 0;
|
||||
m6844_channel[i].control = 0x00;
|
||||
}
|
||||
m6844_priority = 0x00;
|
||||
m6844_interrupt = 0x00;
|
||||
m6844_chain = 0x00;
|
||||
|
||||
}
|
@ -1876,6 +1876,13 @@ prof80
|
||||
prof180x
|
||||
prof181x
|
||||
|
||||
// SWTPC S/09
|
||||
swtpc09 // S09, DMF2 Floppy SBUG rom - FLEX
|
||||
swtpc09i // S09, DC4 Floppy + PIA IDE SBUG rom - FLEX
|
||||
swtpc09u // S09, DMF2 Floppy UNIBUG rom - UniFLEX
|
||||
swtpc09d3 // S09, DMF3 Floppy UNIBUG U3 rom - UniFLEX U3
|
||||
|
||||
|
||||
//***************Games******************************************************
|
||||
// Computer Electronic
|
||||
ccmk1 // Chess Champion MK I
|
||||
|
@ -728,6 +728,7 @@ DRVLIBS += \
|
||||
$(MESSOBJ)/sun.a \
|
||||
$(MESSOBJ)/svi.a \
|
||||
$(MESSOBJ)/svision.a \
|
||||
$(MESSOBJ)/swtpc09.a \
|
||||
$(MESSOBJ)/synertec.a \
|
||||
$(MESSOBJ)/ta.a \
|
||||
$(MESSOBJ)/tandberg.a \
|
||||
@ -1773,6 +1774,10 @@ $(MESSOBJ)/svision.a: \
|
||||
$(MESS_DRIVERS)/svision.o \
|
||||
$(MESS_AUDIO)/svision.o \
|
||||
|
||||
$(MESSOBJ)/swtpc09.a: \
|
||||
$(MESS_DRIVERS)/swtpc09.o \
|
||||
$(MESS_MACHINE)/swtpc09.o \
|
||||
|
||||
$(MESSOBJ)/synertec.a: \
|
||||
$(MESS_DRIVERS)/sym1.o \
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user