summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/cpu/tms1000/tms1000.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/cpu/tms1000/tms1000.cpp')
-rw-r--r--src/devices/cpu/tms1000/tms1000.cpp40
1 files changed, 34 insertions, 6 deletions
diff --git a/src/devices/cpu/tms1000/tms1000.cpp b/src/devices/cpu/tms1000/tms1000.cpp
index 55ac2a01d8c..ce21213a1d2 100644
--- a/src/devices/cpu/tms1000/tms1000.cpp
+++ b/src/devices/cpu/tms1000/tms1000.cpp
@@ -2,17 +2,19 @@
// copyright-holders:hap
/*
- TMS1000 family - TMS1000, TMS1070, TMS1040, TMS1200, TMS1700, TMS1730,
+ TMS1000 family - TMS1000, TMS1000C, TMS1070, TMS1040, TMS1200, TMS1700, TMS1730,
and second source Motorola MC141000, MC141200.
TODO:
- add TMS1270 (10 O pins, how does that work?)
- - add TMS1000C, TMS1200C (CMOS, and 3-level stack)
+ - add TMS1200C (has L input pins like TMS1600)
+ - add TMS1000C-specific mpla
*/
#include "emu.h"
#include "tms1000.h"
+#include "tms1k_dasm.h"
#include "debugger.h"
// TMS1000
@@ -31,6 +33,17 @@ DEFINE_DEVICE_TYPE(TMS1200, tms1200_cpu_device, "tms1200", "TMS1200") // 40-p
DEFINE_DEVICE_TYPE(TMS1700, tms1700_cpu_device, "tms1700", "TMS1700") // 28-pin DIP, RAM/ROM size halved, 9 R pins
DEFINE_DEVICE_TYPE(TMS1730, tms1730_cpu_device, "tms1730", "TMS1730") // 20-pin DIP, same die as TMS1700, package has less pins: 6 R pins, 5 O pins (output PLA is still 8-bit, O1,O3,O5 unused)
+// CMOS versions (3-level stack, HALT pin)
+// - RAM at top-left, ROM at top-right(rotate CCW)
+// - ROM ordering is different:
+// * row select is linear (0-63)
+// * bit select is 7-0 instead of 0-7
+// * page select doesn't flip in the middle
+// - 32-term mpla at bottom-right, different order
+// - 32-term opla at bottom-left, ordered O7-O0(0 or 1), and A8,4,2,1,S
+DEFINE_DEVICE_TYPE(TMS1000C, tms1000c_cpu_device, "tms1000c", "TMS1000C") // 28-pin SDIP, 10 R pins
+
+// 2nd source Motorola chips
DEFINE_DEVICE_TYPE(MC141000, mc141000_cpu_device, "mc141000", "MC141000") // CMOS, pin-compatible with TMS1000(reverse polarity)
DEFINE_DEVICE_TYPE(MC141200, mc141200_cpu_device, "mc141200", "MC141200") // CMOS, 40-pin DIP, 16 R pins
@@ -90,6 +103,11 @@ tms1730_cpu_device::tms1730_cpu_device(const machine_config &mconfig, const char
{
}
+tms1000c_cpu_device::tms1000c_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
+ : tms1000_cpu_device(mconfig, TMS1000C, tag, owner, clock, 8, 10, 6, 8, 2, 10, ADDRESS_MAP_NAME(program_10bit_8), 6, ADDRESS_MAP_NAME(data_64x4))
+{
+}
+
mc141000_cpu_device::mc141000_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: tms1000_cpu_device(mconfig, MC141000, tag, owner, clock, 8, 11, 6, 8, 2, 10, ADDRESS_MAP_NAME(program_10bit_8), 6, ADDRESS_MAP_NAME(data_64x4))
{
@@ -102,7 +120,7 @@ mc141200_cpu_device::mc141200_cpu_device(const machine_config &mconfig, const ch
// machine configs
- MACHINE_CONFIG_MEMBER(tms1000_cpu_device::device_add_mconfig)
+MACHINE_CONFIG_MEMBER(tms1000_cpu_device::device_add_mconfig)
// microinstructions PLA, output PLA
MCFG_PLA_ADD("mpla", 8, 16, 30)
@@ -111,11 +129,21 @@ mc141200_cpu_device::mc141200_cpu_device(const machine_config &mconfig, const ch
MCFG_PLA_FILEFORMAT(BERKELEY)
MACHINE_CONFIG_END
+MACHINE_CONFIG_MEMBER(tms1000c_cpu_device::device_add_mconfig)
+
+ // microinstructions PLA, output PLA
+ //MCFG_PLA_ADD("mpla", 8, 16, 32)
+ MCFG_PLA_ADD("mpla", 8, 16, 30)
+ MCFG_PLA_FILEFORMAT(BERKELEY)
+ MCFG_PLA_ADD("opla", 5, 8, 32)
+ MCFG_PLA_FILEFORMAT(BERKELEY)
+MACHINE_CONFIG_END
+
+
// disasm
-offs_t tms1000_cpu_device::disasm_disassemble(std::ostream &stream, offs_t pc, const u8 *oprom, const u8 *opram, u32 options)
+util::disasm_interface *tms1000_cpu_device::create_disassembler()
{
- extern CPU_DISASSEMBLE(tms1000);
- return CPU_DISASSEMBLE_NAME(tms1000)(this, stream, pc, oprom, opram, options);
+ return new tms1000_disassembler;
}