summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/swtpc.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/swtpc.cpp')
-rw-r--r--src/mame/drivers/swtpc.cpp92
1 files changed, 70 insertions, 22 deletions
diff --git a/src/mame/drivers/swtpc.cpp b/src/mame/drivers/swtpc.cpp
index 464f1f6bac0..b801b10c34c 100644
--- a/src/mame/drivers/swtpc.cpp
+++ b/src/mame/drivers/swtpc.cpp
@@ -2,20 +2,27 @@
// copyright-holders:Robbbert
/***************************************************************************
- SWTPC 6800
+ SWTPC 6800 Computer System
10/12/2009 Skeleton driver.
http://www.swtpc.com/mholley/swtpc_6800.htm
- bios 0 (SWTBUG) is made for a PIA (parallel) interface.
- bios 1 (MIKBUG) is made for a ACIA (serial) interface at the same address.
+ MIKBUG is made for a PIA (parallel) interface.
+ SWTBUG is made for a ACIA (serial) interface at the same address.
MIKBUG will actually read the bits as they arrive and assemble a byte.
+ Its delay loops are based on an underclocked XTAL.
Note: All commands must be in uppercase. See the SWTBUG manual.
ToDo:
- - Split into 2 systems each with different hardware.
+ - Support selectable baud rate clocks (110, 150, 300, 600, 1200)
+ - Implement interface bus slots to allow selection of either MP-S
+ (ACIA) or MP-C or MP-L (PIA) for I/O slot #1 or seven other
+ fixed-address I/O slots
+ - Add DC-4 (WD1797 FDC) interface board as I/O slot option
+ - Emulate MP-A2 revision of CPU board, with four 2716 ROM sockets
+ and allowance for extra RAM boards at A000-BFFF and C000-DFFF
Commands:
@@ -38,7 +45,8 @@ Z Goto Prom (0xC000)
#include "emu.h"
#include "cpu/m6800/m6800.h"
#include "machine/6850acia.h"
-#include "machine/clock.h"
+#include "machine/mc14411.h"
+#include "machine/ram.h"
#include "bus/rs232/rs232.h"
class swtpc_state : public driver_device
@@ -47,54 +55,94 @@ public:
swtpc_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
, m_maincpu(*this, "maincpu")
+ , m_ram(*this, "ram")
+ , m_brg(*this, "brg")
{ }
+ virtual void machine_start() override;
+
private:
required_device<cpu_device> m_maincpu;
+ required_device<ram_device> m_ram;
+ required_device<mc14411_device> m_brg;
};
static ADDRESS_MAP_START(mem_map, AS_PROGRAM, 8, swtpc_state)
ADDRESS_MAP_UNMAP_HIGH
- AM_RANGE(0x8004, 0x8004) AM_MIRROR(2) AM_DEVREADWRITE("uart", acia6850_device, status_r, control_w)
- AM_RANGE(0x8005, 0x8005) AM_MIRROR(2) AM_DEVREADWRITE("uart", acia6850_device, data_r, data_w)
- AM_RANGE(0xa000, 0xa07f) AM_RAM
- AM_RANGE(0xe000, 0xe3ff) AM_MIRROR(0x1c00) AM_ROM
+ AM_RANGE(0x8004, 0x8004) AM_MIRROR(2) AM_DEVREADWRITE("acia", acia6850_device, status_r, control_w)
+ AM_RANGE(0x8005, 0x8005) AM_MIRROR(2) AM_DEVREADWRITE("acia", acia6850_device, data_r, data_w)
+ AM_RANGE(0xa000, 0xa07f) AM_RAM // MCM6810
+ AM_RANGE(0xe000, 0xe3ff) AM_MIRROR(0x1c00) AM_ROM AM_REGION("mcm6830", 0)
ADDRESS_MAP_END
/* Input ports */
static INPUT_PORTS_START( swtpc )
INPUT_PORTS_END
+static DEVICE_INPUT_DEFAULTS_START( terminal )
+ DEVICE_INPUT_DEFAULTS( "RS232_RXBAUD", 0xff, RS232_BAUD_1200 )
+ DEVICE_INPUT_DEFAULTS( "RS232_TXBAUD", 0xff, RS232_BAUD_1200 )
+ DEVICE_INPUT_DEFAULTS( "RS232_STARTBITS", 0xff, RS232_STARTBITS_1 )
+ DEVICE_INPUT_DEFAULTS( "RS232_DATABITS", 0xff, RS232_DATABITS_8 )
+ DEVICE_INPUT_DEFAULTS( "RS232_PARITY", 0xff, RS232_PARITY_NONE )
+ DEVICE_INPUT_DEFAULTS( "RS232_STOPBITS", 0xff, RS232_STOPBITS_1 )
+DEVICE_INPUT_DEFAULTS_END
+
+
+void swtpc_state::machine_start()
+{
+ m_brg->rsa_w(0);
+ m_brg->rsb_w(1);
+
+ m_maincpu->space(AS_PROGRAM).install_ram(0, m_ram->size() - 1, m_ram->pointer());
+}
static MACHINE_CONFIG_START( swtpc )
/* basic machine hardware */
- MCFG_CPU_ADD("maincpu", M6800, XTAL_1MHz)
+ MCFG_CPU_ADD("maincpu", M6800, XTAL_1_8432MHz / 2)
MCFG_CPU_PROGRAM_MAP(mem_map)
/* video hardware */
- MCFG_DEVICE_ADD("uart_clock", CLOCK, 153600)
- MCFG_CLOCK_SIGNAL_HANDLER(DEVWRITELINE("uart", acia6850_device, write_txc))
- MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("uart", acia6850_device, write_rxc))
+ MCFG_DEVICE_ADD("brg", MC14411, XTAL_1_8432MHz)
+ MCFG_MC14411_F7_CB(DEVWRITELINE("acia", acia6850_device, write_txc))
+ MCFG_DEVCB_CHAIN_OUTPUT(DEVWRITELINE("acia", acia6850_device, write_rxc))
+ // F8, F9, F11, F13 also present on system bus
- MCFG_DEVICE_ADD("uart", ACIA6850, XTAL_1MHz)
+ 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_RS232_PORT_ADD("rs232", default_rs232_devices, "terminal")
- MCFG_RS232_RXD_HANDLER(DEVWRITELINE("uart", acia6850_device, write_rxd))
- MCFG_RS232_CTS_HANDLER(DEVWRITELINE("uart", acia6850_device, write_cts))
+ MCFG_RS232_RXD_HANDLER(DEVWRITELINE("acia", acia6850_device, write_rxd))
+ MCFG_RS232_CTS_HANDLER(DEVWRITELINE("acia", acia6850_device, write_cts))
+ MCFG_DEVICE_CARD_DEVICE_INPUT_DEFAULTS("terminal", terminal)
+
+ MCFG_RAM_ADD(RAM_TAG)
+ MCFG_RAM_DEFAULT_SIZE("2K")
+ MCFG_RAM_EXTRA_OPTIONS("4K,8K,12K,16K,20K,24K,28K,32K")
+MACHINE_CONFIG_END
+
+static MACHINE_CONFIG_DERIVED( swtpcm, swtpc )
+ MCFG_CPU_MODIFY("maincpu")
+ MCFG_CPU_CLOCK(XTAL_1_7971MHz / 2)
+
+ MCFG_DEVICE_MODIFY("brg")
+ MCFG_DEVICE_CLOCK(XTAL_1_7971MHz)
MACHINE_CONFIG_END
/* ROM definition */
ROM_START( swtpc )
- ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF )
- ROM_SYSTEM_BIOS( 0, "swt", "SWTBUG" )
- ROMX_LOAD( "swtbug.bin", 0xe000, 0x0400, CRC(f9130ef4) SHA1(089b2d2a56ce9526c3e78ce5d49ce368b9eabc0c), ROM_BIOS(1))
- ROM_SYSTEM_BIOS( 1, "mik", "MIKBUG" )
- ROMX_LOAD( "mikbug.bin", 0xe000, 0x0400, CRC(e7f4d9d0) SHA1(5ad585218f9c9c70f38b3c74e3ed5dfe0357621c), ROM_BIOS(2))
+ ROM_REGION( 0x0400, "mcm6830", 0 )
+ ROM_LOAD("swtbug.bin", 0x0000, 0x0400, CRC(f9130ef4) SHA1(089b2d2a56ce9526c3e78ce5d49ce368b9eabc0c))
+ROM_END
+
+ROM_START( swtpcm )
+ ROM_REGION( 0x0400, "mcm6830", 0 )
+ ROM_LOAD("mikbug.bin", 0x0000, 0x0400, CRC(e7f4d9d0) SHA1(5ad585218f9c9c70f38b3c74e3ed5dfe0357621c))
ROM_END
/* Driver */
// YEAR NAME PARENT COMPAT MACHINE INPUT STATE INIT COMPANY FULLNAME FLAGS
-COMP( 1975, swtpc, 0, 0, swtpc, swtpc, swtpc_state, 0, "Southwest Technical Products Corporation", "SWTPC 6800", MACHINE_NO_SOUND_HW )
+COMP( 1977, swtpc, 0, 0, swtpc, swtpc, swtpc_state, 0, "Southwest Technical Products Corporation", "SWTPC 6800 Computer System (with SWTBUG)", MACHINE_NO_SOUND_HW )
+COMP( 1975, swtpcm, swtpc, 0, swtpcm, swtpc, swtpc_state, 0, "Southwest Technical Products Corporation", "SWTPC 6800 Computer System (with MIKBUG)", MACHINE_NO_SOUND_HW | MACHINE_NOT_WORKING )