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)
This commit is contained in:
AJR 2017-11-26 12:21:11 -05:00
parent fe9113c5ec
commit 02a4917f30
3 changed files with 72 additions and 22 deletions

View File

@ -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,

View File

@ -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 )

View File

@ -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