From 02a4917f30ace7de14d561ad09e2b4579facaf13 Mon Sep 17 00:00:00 2001 From: AJR Date: Sun, 26 Nov 2017 12:21:11 -0500 Subject: swtpc: Split into two systems (SWTBUG and MIKBUG) - Define alternate XTAL for MIKBUG version (nw) - Add RAM configuration and MC14411 device (nw) - Reduce terminal baud rate to the supported maximum of 1200 (nw) - Add notes for future reference (nw) --- src/emu/drivers/xtal.h | 1 + src/mame/drivers/swtpc.cpp | 92 +++++++++++++++++++++++++++++++++++----------- src/mame/mame.lst | 1 + 3 files changed, 72 insertions(+), 22 deletions(-) diff --git a/src/emu/drivers/xtal.h b/src/emu/drivers/xtal.h index 862fc5a0a6c..8c9fb948510 100644 --- a/src/emu/drivers/xtal.h +++ b/src/emu/drivers/xtal.h @@ -58,6 +58,7 @@ enum XTAL_1MHz = 1000000, /* Used to drive OKI M6295 chips */ XTAL_1_2944MHz = 1294400, /* BBN BitGraph PSG */ XTAL_1_75MHz = 1750000, /* RCA CDP1861 */ + XTAL_1_7971MHz = 1797100, /* SWTPC 6800 (with MIKBUG) */ XTAL_1_8432MHz = 1843200, /* Bondwell 12/14 */ XTAL_1_9968MHz = 1996800, /* NEC PC-98xx */ XTAL_2MHz = 2000000, 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 m_maincpu; + required_device m_ram; + required_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 ) diff --git a/src/mame/mame.lst b/src/mame/mame.lst index 29fd68a767c..8fdd029705a 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -35566,6 +35566,7 @@ svmu // 1998 Sega Visual Memory Unit @source:swtpc.cpp swtpc // +swtpcm // @source:swtpc09.cpp swtpc09 // S09, DMF2 Floppy SBUG rom - FLEX -- cgit v1.2.3