summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/cpu/tms0980
diff options
context:
space:
mode:
author hap <happppp@users.noreply.github.com>2016-02-28 21:38:04 +0100
committer hap <happppp@users.noreply.github.com>2016-02-28 21:38:04 +0100
commit736da52bce4e5065383989d3a11a1412501c4655 (patch)
tree4436c496282122e08df541d83600c2f3e2c572ae /src/devices/cpu/tms0980
parenta255223bbe0b645ec719d19001ca760fb1d0bda1 (diff)
tms1k: added TP0320 skeleton
Diffstat (limited to 'src/devices/cpu/tms0980')
-rw-r--r--src/devices/cpu/tms0980/tms0980.cpp23
-rw-r--r--src/devices/cpu/tms0980/tms0980.h14
2 files changed, 33 insertions, 4 deletions
diff --git a/src/devices/cpu/tms0980/tms0980.cpp b/src/devices/cpu/tms0980/tms0980.cpp
index 1389a080031..e067946bb7a 100644
--- a/src/devices/cpu/tms0980/tms0980.cpp
+++ b/src/devices/cpu/tms0980/tms0980.cpp
@@ -164,13 +164,17 @@ const device_type TMS1670 = &device_creator<tms1670_cpu_device>; // high voltage
// TMS0980
// - 64x9bit RAM array at the bottom-left (set up as 144x4)
// - 2048x9bit ROM array at the bottom-left
-// - main instructions PLA at the top half, to the right of the midline
+// - main instructions PLAs at the top half, to the right of the midline
+// * top section is assumed to be the CKI bus select
+// * middle section is for microinstruction redirection, this part may differ per die
+// * rest is fixed instructions select, from top-to-bottom: SEAC, LDX, COMX, COMX8,
+// TDO, SBIT, RETN, SETR, REAC, XDA, SAL, RBIT, ..., OFF, SBL, LDP, redir(------00- + R0^BL)
// - 64-term microinstructions PLA between the RAM and ROM, supporting 20 microinstructions
// - 16-term inverted output PLA and segment PLA above the RAM (rotate opla 90 degrees)
const device_type TMS0980 = &device_creator<tms0980_cpu_device>; // 28-pin DIP, 9 R pins
// TMS1980 is a TMS0980 with a TMS1x00 style opla
-// - RAM, ROM, and main instructions PLA is the same as TMS0980
+// - RAM, ROM, and main instructions PLAs is the same as TMS0980
// - one of the microinstructions redirects to a RSTR instruction, like on TMS0270
// - 32-term inverted output PLA above the RAM, 7 bits! (rotate opla 270 degrees)
const device_type TMS1980 = &device_creator<tms1980_cpu_device>; // 28-pin DIP, 7 O pins, 10 R pins, high voltage
@@ -182,20 +186,26 @@ const device_type TMS0950 = &device_creator<tms0950_cpu_device>; // 28-pin DIP,
// TMS0970 is a stripped-down version of the TMS0980, itself acting more like a TMS1000
// - RAM and ROM is the same as TMS1000
-// - main instructions PLA at the top half, to the right of the midline
+// - main instructions PLAs at the top half, to the right of the midline
+// * see TMS0980 notes, except that the fixed instruction list differs:
+// RETN, SETR, RBIT, SBIT, LDX, COMX, TDO, ..., redir(----0-00), LDP
// - 32-term microinstructions PLA between the RAM and ROM, supporting 15 microinstructions
// - 16-term inverted output PLA and segment PLA above the RAM (rotate opla 90 degrees)
const device_type TMS0970 = &device_creator<tms0970_cpu_device>; // 28-pin DIP, 11 R pins (note: pinout may slightly differ from chip to chip)
const device_type TMS1990 = &device_creator<tms1990_cpu_device>; // 28-pin DIP, ? R pins..
// TMS0270 on the other hand, is a TMS0980 with earrings and a new hat. The new changes look like a quick afterthought, almost hacky
-// - RAM, ROM, and main instructions PLA is the same as TMS0980
+// - RAM, ROM, and main instructions PLAs is the same as TMS0980
// - 64-term microinstructions PLA between the RAM and ROM, supporting 20 microinstructions plus optional separate lines for custom opcode handling
// - 48-term output PLA above the RAM (rotate opla 90 degrees)
const device_type TMS0270 = &device_creator<tms0270_cpu_device>; // 40-pin DIP, 16 O pins, 8+ R pins (some R pins are internally hooked up to support more I/O)
// newer TMS0270 chips (eg. Speak & Math) have 42 pins
// TMS0260 is same or similar?
+// TP0320 is TI's first CMOS MCU with integrated LCD controller, the die is still very similar to TMS0980
+// - x
+const device_type TP0320 = &device_creator<tp0320_cpu_device>; // 28-pin SDIP, ..
+
// internal memory maps
static ADDRESS_MAP_START(program_11bit_9, AS_PROGRAM, 16, tms1xxx_cpu_device)
@@ -336,6 +346,11 @@ tms0270_cpu_device::tms0270_cpu_device(const machine_config &mconfig, const char
{ }
+tp0320_cpu_device::tp0320_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : tms0980_cpu_device(mconfig, TP0320, "TP0320", tag, owner, clock, 7, 10, 7, 9, 4, 12, ADDRESS_MAP_NAME(program_11bit_9), 8, ADDRESS_MAP_NAME(data_64x9_as4), "tp0320", __FILE__)
+{ }
+
+
// machine configs
static MACHINE_CONFIG_FRAGMENT(tms1000)
diff --git a/src/devices/cpu/tms0980/tms0980.h b/src/devices/cpu/tms0980/tms0980.h
index 2572eb1b1ef..c253d28ee40 100644
--- a/src/devices/cpu/tms0980/tms0980.h
+++ b/src/devices/cpu/tms0980/tms0980.h
@@ -480,6 +480,19 @@ private:
};
+class tp0320_cpu_device : public tms0980_cpu_device
+{
+public:
+ tp0320_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
+protected:
+ // overrides
+ //virtual void device_start() override;
+ //virtual void device_reset() override;
+
+ //virtual machine_config_constructor device_mconfig_additions() const override;
+};
+
extern const device_type TMS1000;
extern const device_type TMS1070;
@@ -499,6 +512,7 @@ extern const device_type TMS1990;
extern const device_type TMS0980;
extern const device_type TMS1980;
extern const device_type TMS0270;
+extern const device_type TP0320;
#endif /* _TMS0980_H_ */