From b0e88ea91548035993d295e80733e684236afb37 Mon Sep 17 00:00:00 2001 From: hap Date: Fri, 7 Apr 2023 19:27:26 +0200 Subject: [PATCH] smc1102: add device skeleton --- scripts/src/cpu.lua | 3 ++ src/devices/cpu/tms1000/smc1102.cpp | 69 ++++++++++++++++++++++++++++ src/devices/cpu/tms1000/smc1102.h | 68 +++++++++++++++++++++++++++ src/devices/cpu/tms1000/tms0970.cpp | 8 ++-- src/devices/cpu/tms1000/tms0980.cpp | 20 ++++---- src/devices/cpu/tms1000/tms0980.h | 4 +- src/devices/cpu/tms1000/tms1000.cpp | 22 +++++---- src/devices/cpu/tms1000/tms1000.h | 2 +- src/devices/cpu/tms1000/tms1000c.cpp | 4 +- src/devices/cpu/tms1000/tms1000c.h | 2 +- src/devices/cpu/tms1000/tms1100.cpp | 8 ++-- src/devices/cpu/tms1000/tms1400.cpp | 22 ++++----- src/devices/cpu/tms1000/tms1k_base.h | 28 +++++------ src/devices/cpu/tms1000/tms2100.cpp | 15 +++--- src/devices/cpu/tms1000/tms2400.cpp | 15 +++--- src/devices/cpu/tms1000/tp0320.cpp | 6 +-- src/devices/cpu/tms1000/tp0320.h | 4 +- src/mame/miltonbradley/microvsn.cpp | 50 ++++++++++---------- src/mame/tiger/k28m2.cpp | 10 +++- 19 files changed, 258 insertions(+), 102 deletions(-) create mode 100644 src/devices/cpu/tms1000/smc1102.cpp create mode 100644 src/devices/cpu/tms1000/smc1102.h diff --git a/scripts/src/cpu.lua b/scripts/src/cpu.lua index d346efde3ca..f7d852955a4 100644 --- a/scripts/src/cpu.lua +++ b/scripts/src/cpu.lua @@ -2499,6 +2499,7 @@ end --@src/devices/cpu/tms1000/tms0980.h,CPUS["TMS1000"] = true --@src/devices/cpu/tms1000/tms0270.h,CPUS["TMS1000"] = true --@src/devices/cpu/tms1000/tp0320.h,CPUS["TMS1000"] = true +--@src/devices/cpu/tms1000/smc1102.h,CPUS["TMS1000"] = true -------------------------------------------------- if CPUS["TMS1000"] then @@ -2525,6 +2526,8 @@ if CPUS["TMS1000"] then MAME_DIR .. "src/devices/cpu/tms1000/tms0270.h", MAME_DIR .. "src/devices/cpu/tms1000/tp0320.cpp", MAME_DIR .. "src/devices/cpu/tms1000/tp0320.h", + MAME_DIR .. "src/devices/cpu/tms1000/smc1102.cpp", + MAME_DIR .. "src/devices/cpu/tms1000/smc1102.h", } end diff --git a/src/devices/cpu/tms1000/smc1102.cpp b/src/devices/cpu/tms1000/smc1102.cpp new file mode 100644 index 00000000000..f0ad714fdc1 --- /dev/null +++ b/src/devices/cpu/tms1000/smc1102.cpp @@ -0,0 +1,69 @@ +// license:BSD-3-Clause +// copyright-holders:hap +/* + + Suwa Seikosha (now Seiko Epson) SMC1102, SMC1112 + +SMC1102 is a CMOS MCU based on TMS1100, keeping the same ALU and opcode mnemonics. +They added a timer, interrupts, and a built-in LCD controller. + +In the USA, it was marketed by S-MOS Systems, an affiliate of the Seiko Group. + +SMC1112 die notes (SMC1102 is assumed to be the same): +- 128x4 RAM array at top-left +- 256*64 8-bit ROM array at the bottom +- 30-term MPLA with 14 microinstructions, and 16 fixed opcodes next to it + (assumed neither of them is supposed to be customized) +- 32x4 LCD RAM at the left +- no output PLA + +TODO: +- x + +*/ + +#include "emu.h" +#include "smc1102.h" +#include "tms1k_dasm.h" + + +// device definitions +DEFINE_DEVICE_TYPE(SMC1102, smc1102_cpu_device, "smc1102", "Suwa Seikosha SMC1102") // 60-pin QFP or 42-pin DIP +DEFINE_DEVICE_TYPE(SMC1112, smc1112_cpu_device, "smc1112", "Suwa Seikosha SMC1112") // low power version + + +smc1102_cpu_device::smc1102_cpu_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock, u8 o_pins, u8 r_pins, u8 pc_bits, u8 byte_bits, u8 x_bits, u8 stack_levels, int rom_width, address_map_constructor rom_map, int ram_width, address_map_constructor ram_map) : + tms1100_cpu_device(mconfig, type, tag, owner, clock, o_pins, r_pins, pc_bits, byte_bits, x_bits, stack_levels, rom_width, rom_map, ram_width, ram_map) +{ } + +smc1102_cpu_device::smc1102_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) : + smc1102_cpu_device(mconfig, SMC1102, tag, owner, clock, 0 /* o pins */, 8 /* r pins */, 6 /* pc bits */, 8 /* byte width */, 3 /* x width */, 4 /* stack levels */, 11 /* rom width */, address_map_constructor(FUNC(smc1102_cpu_device::rom_11bit), this), 7 /* ram width */, address_map_constructor(FUNC(smc1102_cpu_device::ram_7bit), this)) +{ } + +smc1112_cpu_device::smc1112_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) : + smc1102_cpu_device(mconfig, SMC1112, tag, owner, clock, 0, 8, 6, 8, 3, 4, 11, address_map_constructor(FUNC(smc1112_cpu_device::rom_11bit), this), 7, address_map_constructor(FUNC(smc1112_cpu_device::ram_7bit), this)) +{ } + + +// disasm +std::unique_ptr smc1102_cpu_device::create_disassembler() +{ + return std::make_unique(); +} + + +// device_start/reset +void smc1102_cpu_device::device_start() +{ + tms1100_cpu_device::device_start(); +} + +u32 smc1102_cpu_device::decode_micro(offs_t offset) +{ + return 0; +} + +void smc1102_cpu_device::device_reset() +{ + tms1100_cpu_device::device_reset(); +} diff --git a/src/devices/cpu/tms1000/smc1102.h b/src/devices/cpu/tms1000/smc1102.h new file mode 100644 index 00000000000..c400b124f71 --- /dev/null +++ b/src/devices/cpu/tms1000/smc1102.h @@ -0,0 +1,68 @@ +// license:BSD-3-Clause +// copyright-holders:hap +/* + + Suwa Seikosha (now Seiko Epson) SMC1102, SMC1112 + +*/ + +#ifndef MAME_CPU_TMS1000_SMC1102_H +#define MAME_CPU_TMS1000_SMC1102_H + +#pragma once + +#include "tms1100.h" + + +// pinout reference (brief) + +/* + +SMC1102F (60-pin QFP): SMC1102C (24-pin DIP): +- R0-R7: pin 25-21,19-17 - R0-R5: pin 41-34 +- K1-K8: pin 6-9 - K1-K8: pin 25-28 +- HLT: pin 13, INIT: pin 14 - HLT: pin 32, INIT: pin 33 +- COM1-COM4: pin 1-4 - COM1-COM4: pin 20,22-24 +- D0-D31: pin 27,28,30-44,46-60 - D0-D18: pin 1-19 + +SMC1112F (60-pin QFP): +- R0-R7: pin 26-19 +- K1-K8: pin 6-9 +- HLT: pin 15, INIT: pin 16 +- COM1-COM4: pin 1-4 +- D0-D31: pin 28,30-60 + +*/ + + +class smc1102_cpu_device : public tms1100_cpu_device +{ +public: + smc1102_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); + +protected: + smc1102_cpu_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock, u8 o_pins, u8 r_pins, u8 pc_bits, u8 byte_bits, u8 x_bits, u8 stack_levels, int rom_width, address_map_constructor rom_map, int ram_width, address_map_constructor ram_map); + + // overrides + virtual void device_start() override; + virtual void device_reset() override; + + virtual void device_add_mconfig(machine_config &config) override { } + virtual std::unique_ptr create_disassembler() override; + + virtual u32 decode_micro(offs_t offset) override; + + virtual void write_o_reg(u8 index) override { } // no O pins +}; + +class smc1112_cpu_device : public smc1102_cpu_device +{ +public: + smc1112_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); +}; + + +DECLARE_DEVICE_TYPE(SMC1102, smc1102_cpu_device) +DECLARE_DEVICE_TYPE(SMC1112, smc1112_cpu_device) + +#endif // MAME_CPU_TMS1000_SMC1102_H diff --git a/src/devices/cpu/tms1000/tms0970.cpp b/src/devices/cpu/tms1000/tms0970.cpp index 98bb14e905f..258e33efd86 100644 --- a/src/devices/cpu/tms1000/tms0970.cpp +++ b/src/devices/cpu/tms1000/tms0970.cpp @@ -29,14 +29,14 @@ DEFINE_DEVICE_TYPE(TMS0970, tms0970_cpu_device, "tms0970", "Texas Instruments TM DEFINE_DEVICE_TYPE(TMS1990, tms1990_cpu_device, "tms1990", "Texas Instruments TMS1990") // 28-pin DIP, ? R pins.. -tms0970_cpu_device::tms0970_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) : - tms0970_cpu_device(mconfig, TMS0970, tag, owner, clock, 8 /* o pins */, 11 /* r pins */, 6 /* pc bits */, 8 /* byte width */, 2 /* x width */, 1 /* stack levels */, 10 /* rom width */, address_map_constructor(FUNC(tms0970_cpu_device::rom_10bit), this), 6 /* ram width */, address_map_constructor(FUNC(tms0970_cpu_device::ram_6bit), this)) -{ } - tms0970_cpu_device::tms0970_cpu_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock, u8 o_pins, u8 r_pins, u8 pc_bits, u8 byte_bits, u8 x_bits, u8 stack_levels, int rom_width, address_map_constructor rom_map, int ram_width, address_map_constructor ram_map) : tms1000_cpu_device(mconfig, type, tag, owner, clock, o_pins, r_pins, pc_bits, byte_bits, x_bits, stack_levels, rom_width, rom_map, ram_width, ram_map) { } +tms0970_cpu_device::tms0970_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) : + tms0970_cpu_device(mconfig, TMS0970, tag, owner, clock, 8 /* o pins */, 11 /* r pins */, 6 /* pc bits */, 8 /* byte width */, 2 /* x width */, 1 /* stack levels */, 10 /* rom width */, address_map_constructor(FUNC(tms0970_cpu_device::rom_10bit), this), 6 /* ram width */, address_map_constructor(FUNC(tms0970_cpu_device::ram_6bit), this)) +{ } + tms0950_cpu_device::tms0950_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) : tms0970_cpu_device(mconfig, TMS0950, tag, owner, clock, 8, 11, 6, 8, 2, 1, 10, address_map_constructor(FUNC(tms0950_cpu_device::rom_10bit), this), 6, address_map_constructor(FUNC(tms0950_cpu_device::ram_6bit), this)) { } diff --git a/src/devices/cpu/tms1000/tms0980.cpp b/src/devices/cpu/tms1000/tms0980.cpp index 8b54bda87c5..20923550985 100644 --- a/src/devices/cpu/tms1000/tms0980.cpp +++ b/src/devices/cpu/tms1000/tms0980.cpp @@ -4,7 +4,7 @@ TMS1000 family - TMS0980, TMS1980 -TMS0980 +TMS0980 die notes: - 144x4bit RAM array at the bottom-left (128+16, set up as 8x18x4) - 2048x9bit ROM array at the bottom-left - main instructions PLAs at the top half, to the right of the midline @@ -32,14 +32,14 @@ DEFINE_DEVICE_TYPE(TMS0980, tms0980_cpu_device, "tms0980", "Texas Instruments TM DEFINE_DEVICE_TYPE(TMS1980, tms1980_cpu_device, "tms1980", "Texas Instruments TMS1980") // 28-pin DIP, 7 O pins, 10 R pins, high voltage -tms0980_cpu_device::tms0980_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) : - tms0980_cpu_device(mconfig, TMS0980, tag, owner, clock, 8 /* o pins */, 9 /* r pins */, 7 /* pc bits */, 9 /* byte width */, 4 /* x width */, 1 /* stack levels */, 11 /* rom width */, address_map_constructor(FUNC(tms0980_cpu_device::rom_11bit), this), 8 /* ram width */, address_map_constructor(FUNC(tms0980_cpu_device::ram_144x4), this)) -{ } - tms0980_cpu_device::tms0980_cpu_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock, u8 o_pins, u8 r_pins, u8 pc_bits, u8 byte_bits, u8 x_bits, u8 stack_levels, int rom_width, address_map_constructor rom_map, int ram_width, address_map_constructor ram_map) : tms0970_cpu_device(mconfig, type, tag, owner, clock, o_pins, r_pins, pc_bits, byte_bits, x_bits, stack_levels, rom_width, rom_map, ram_width, ram_map) { } +tms0980_cpu_device::tms0980_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) : + tms0980_cpu_device(mconfig, TMS0980, tag, owner, clock, 8 /* o pins */, 9 /* r pins */, 7 /* pc bits */, 9 /* byte width */, 4 /* x width */, 1 /* stack levels */, 11 /* rom width */, address_map_constructor(FUNC(tms0980_cpu_device::rom_11bit), this), 8 /* ram width */, address_map_constructor(FUNC(tms0980_cpu_device::ram_144x4), this)) +{ } + tms1980_cpu_device::tms1980_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) : tms0980_cpu_device(mconfig, TMS1980, tag, owner, clock, 7, 10, 7, 9, 4, 1, 11, address_map_constructor(FUNC(tms1980_cpu_device::rom_11bit), this), 8, address_map_constructor(FUNC(tms1980_cpu_device::ram_144x4), this)) { } @@ -80,10 +80,10 @@ std::unique_ptr tms0980_cpu_device::create_disassembler( // device_reset -u32 tms0980_cpu_device::decode_fixed(u16 op) +u32 tms0980_cpu_device::decode_fixed(offs_t offset) { u32 decode = 0; - u32 mask = m_ipla->read(op); + u32 mask = m_ipla->read(offset); // 1 line per PLA row, no OR-mask const u32 id[15] = { F_LDP, F_SBL, F_OFF, F_RBIT, F_SAL, F_XDA, F_REAC, F_SETR, F_RETN, F_SBIT, F_TDO, F_COMX8, F_COMX, F_LDX, F_SEAC }; @@ -95,11 +95,11 @@ u32 tms0980_cpu_device::decode_fixed(u16 op) return decode; } -u32 tms0980_cpu_device::decode_micro(u8 sel) +u32 tms0980_cpu_device::decode_micro(offs_t offset) { u32 decode = 0; - sel = bitswap<8>(sel,7,6,0,1,2,3,4,5); // lines are reversed - u32 mask = m_mpla->read(sel); + offset = bitswap<6>(offset,0,1,2,3,4,5); // lines are reversed + u32 mask = m_mpla->read(offset); mask ^= 0x43fc3; // invert active-negative // M_RSTR is specific to TMS02x0/TMS1980, it redirects to F_RSTR diff --git a/src/devices/cpu/tms1000/tms0980.h b/src/devices/cpu/tms1000/tms0980.h index 038f54cf2e2..b2d8b4c106d 100644 --- a/src/devices/cpu/tms1000/tms0980.h +++ b/src/devices/cpu/tms1000/tms0980.h @@ -49,8 +49,8 @@ protected: void ram_144x4(address_map &map); // overrides - virtual u32 decode_fixed(u16 op); - virtual u32 decode_micro(u8 sel) override; + virtual u32 decode_fixed(offs_t offset); + virtual u32 decode_micro(offs_t offset) override; virtual void device_reset() override; virtual void device_add_mconfig(machine_config &config) override; diff --git a/src/devices/cpu/tms1000/tms1000.cpp b/src/devices/cpu/tms1000/tms1000.cpp index 92c6fc73192..75faa0279ca 100644 --- a/src/devices/cpu/tms1000/tms1000.cpp +++ b/src/devices/cpu/tms1000/tms1000.cpp @@ -4,7 +4,7 @@ TMS1000 family - TMS1000, TMS1070, TMS1040, TMS1200, TMS1270, TMS1700, TMS1730 -TMS1000 +TMS1000 die notes: - 64x4bit RAM array at the bottom-left - 1024x8bit ROM array at the bottom-right * FYI, the row-selector to the left of it is laid out as: @@ -35,14 +35,14 @@ DEFINE_DEVICE_TYPE(TMS1700, tms1700_cpu_device, "tms1700", "Texas Instruments DEFINE_DEVICE_TYPE(TMS1730, tms1730_cpu_device, "tms1730", "Texas Instruments 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) -tms1000_cpu_device::tms1000_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) : - tms1000_cpu_device(mconfig, TMS1000, tag, owner, clock, 8 /* o pins */, 11 /* r pins */, 6 /* pc bits */, 8 /* byte width */, 2 /* x width */, 1 /* stack levels */, 10 /* rom width */, address_map_constructor(FUNC(tms1000_cpu_device::rom_10bit), this), 6 /* ram width */, address_map_constructor(FUNC(tms1000_cpu_device::ram_6bit), this)) -{ } - tms1000_cpu_device::tms1000_cpu_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock, u8 o_pins, u8 r_pins, u8 pc_bits, u8 byte_bits, u8 x_bits, u8 stack_levels, int rom_width, address_map_constructor rom_map, int ram_width, address_map_constructor ram_map) : tms1k_base_device(mconfig, type, tag, owner, clock, o_pins, r_pins, pc_bits, byte_bits, x_bits, stack_levels, rom_width, rom_map, ram_width, ram_map) { } +tms1000_cpu_device::tms1000_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) : + tms1000_cpu_device(mconfig, TMS1000, tag, owner, clock, 8 /* o pins */, 11 /* r pins */, 6 /* pc bits */, 8 /* byte width */, 2 /* x width */, 1 /* stack levels */, 10 /* rom width */, address_map_constructor(FUNC(tms1000_cpu_device::rom_10bit), this), 6 /* ram width */, address_map_constructor(FUNC(tms1000_cpu_device::ram_6bit), this)) +{ } + tms1040_cpu_device::tms1040_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) : tms1000_cpu_device(mconfig, TMS1040, tag, owner, clock, 8, 11, 6, 8, 2, 1, 10, address_map_constructor(FUNC(tms1040_cpu_device::rom_10bit), this), 6, address_map_constructor(FUNC(tms1040_cpu_device::ram_6bit), this)) { } @@ -51,18 +51,20 @@ tms1200_cpu_device::tms1200_cpu_device(const machine_config &mconfig, const char tms1000_cpu_device(mconfig, TMS1200, tag, owner, clock, 8, 13, 6, 8, 2, 1, 10, address_map_constructor(FUNC(tms1200_cpu_device::rom_10bit), this), 6, address_map_constructor(FUNC(tms1200_cpu_device::ram_6bit), this)) { } -tms1070_cpu_device::tms1070_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) : - tms1070_cpu_device(mconfig, TMS1070, tag, owner, clock, 8, 11, 6, 8, 2, 1, 10, address_map_constructor(FUNC(tms1070_cpu_device::rom_10bit), this), 6, address_map_constructor(FUNC(tms1070_cpu_device::ram_6bit), this)) -{ } tms1070_cpu_device::tms1070_cpu_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock, u8 o_pins, u8 r_pins, u8 pc_bits, u8 byte_bits, u8 x_bits, u8 stack_levels, int rom_width, address_map_constructor rom_map, int ram_width, address_map_constructor ram_map) : tms1000_cpu_device(mconfig, type, tag, owner, clock, o_pins, r_pins, pc_bits, byte_bits, x_bits, stack_levels, rom_width, rom_map, ram_width, ram_map) { } +tms1070_cpu_device::tms1070_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) : + tms1070_cpu_device(mconfig, TMS1070, tag, owner, clock, 8, 11, 6, 8, 2, 1, 10, address_map_constructor(FUNC(tms1070_cpu_device::rom_10bit), this), 6, address_map_constructor(FUNC(tms1070_cpu_device::ram_6bit), this)) +{ } + tms1270_cpu_device::tms1270_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) : tms1070_cpu_device(mconfig, TMS1270, tag, owner, clock, 10, 13, 6, 8, 2, 1, 10, address_map_constructor(FUNC(tms1270_cpu_device::rom_10bit), this), 6, address_map_constructor(FUNC(tms1270_cpu_device::ram_6bit), this)) { } + tms1700_cpu_device::tms1700_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) : tms1000_cpu_device(mconfig, TMS1700, tag, owner, clock, 8, 9, 6, 8, 2, 1, 10, address_map_constructor(FUNC(tms1700_cpu_device::rom_9bitm), this), 6, address_map_constructor(FUNC(tms1700_cpu_device::ram_32x4), this)) { } @@ -108,11 +110,11 @@ std::unique_ptr tms1000_cpu_device::create_disassembler( // device_reset -u32 tms1000_cpu_device::decode_micro(u8 sel) +u32 tms1000_cpu_device::decode_micro(offs_t offset) { // _____ _____ ______ _____ ______ _____ _____ _____ _____ const u32 md[16] = { M_STSL, M_AUTY, M_AUTA, M_CIN, M_C8, M_NE, M_CKN, M_15TN, M_MTN, M_NATN, M_ATN, M_MTP, M_YTP, M_CKP, M_CKM, M_STO }; - u16 mask = m_mpla->read(sel); + u16 mask = m_mpla->read(offset); mask ^= 0x3fc8; // invert active-negative u32 decode = 0; diff --git a/src/devices/cpu/tms1000/tms1000.h b/src/devices/cpu/tms1000/tms1000.h index 1cdc073ed03..c850b98e6d0 100644 --- a/src/devices/cpu/tms1000/tms1000.h +++ b/src/devices/cpu/tms1000/tms1000.h @@ -76,7 +76,7 @@ protected: virtual void device_add_mconfig(machine_config &config) override; virtual std::unique_ptr create_disassembler() override; - virtual u32 decode_micro(u8 sel); + virtual u32 decode_micro(offs_t offset); }; class tms1040_cpu_device : public tms1000_cpu_device diff --git a/src/devices/cpu/tms1000/tms1000c.cpp b/src/devices/cpu/tms1000/tms1000c.cpp index 1266032ea83..0ef0687855e 100644 --- a/src/devices/cpu/tms1000/tms1000c.cpp +++ b/src/devices/cpu/tms1000/tms1000c.cpp @@ -41,10 +41,10 @@ void tms1000c_cpu_device::device_add_mconfig(machine_config &config) // microinstructions decode (different order, no active-negative) -u32 tms1000c_cpu_device::decode_micro(u8 sel) +u32 tms1000c_cpu_device::decode_micro(offs_t offset) { const u32 md[16] = { M_AUTY, M_AUTA, M_STSL, M_NE, M_C8, M_CIN, M_CKP, M_YTP, M_MTP, M_NATN, M_CKN, M_MTN, M_ATN, M_15TN, M_CKM, M_STO }; - u16 mask = m_mpla->read(sel); + u16 mask = m_mpla->read(offset); u32 decode = 0; for (int bit = 0; bit < 16; bit++) diff --git a/src/devices/cpu/tms1000/tms1000c.h b/src/devices/cpu/tms1000/tms1000c.h index bf165550045..b698a575615 100644 --- a/src/devices/cpu/tms1000/tms1000c.h +++ b/src/devices/cpu/tms1000/tms1000c.h @@ -22,7 +22,7 @@ public: protected: // overrides virtual void device_add_mconfig(machine_config &config) override; - virtual u32 decode_micro(u8 sel) override; + virtual u32 decode_micro(offs_t offset) override; }; diff --git a/src/devices/cpu/tms1000/tms1100.cpp b/src/devices/cpu/tms1000/tms1100.cpp index 7af1237a5ad..54d30a8348e 100644 --- a/src/devices/cpu/tms1000/tms1100.cpp +++ b/src/devices/cpu/tms1000/tms1100.cpp @@ -23,14 +23,14 @@ DEFINE_DEVICE_TYPE(TMS1300, tms1300_cpu_device, "tms1300", "Texas Instruments TM DEFINE_DEVICE_TYPE(TMS1370, tms1370_cpu_device, "tms1370", "Texas Instruments TMS1370") // high voltage version, also seen in 28-pin package(some O/R pins unavailable) -tms1100_cpu_device::tms1100_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) : - tms1100_cpu_device(mconfig, TMS1100, tag, owner, clock, 8 /* o pins */, 11 /* r pins */, 6 /* pc bits */, 8 /* byte width */, 3 /* x width */, 1 /* stack levels */, 11 /* rom width */, address_map_constructor(FUNC(tms1100_cpu_device::rom_11bit), this), 7 /* ram width */, address_map_constructor(FUNC(tms1100_cpu_device::ram_7bit), this)) -{ } - tms1100_cpu_device::tms1100_cpu_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock, u8 o_pins, u8 r_pins, u8 pc_bits, u8 byte_bits, u8 x_bits, u8 stack_levels, int rom_width, address_map_constructor rom_map, int ram_width, address_map_constructor ram_map) : tms1000_cpu_device(mconfig, type, tag, owner, clock, o_pins, r_pins, pc_bits, byte_bits, x_bits, stack_levels, rom_width, rom_map, ram_width, ram_map) { } +tms1100_cpu_device::tms1100_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) : + tms1100_cpu_device(mconfig, TMS1100, tag, owner, clock, 8 /* o pins */, 11 /* r pins */, 6 /* pc bits */, 8 /* byte width */, 3 /* x width */, 1 /* stack levels */, 11 /* rom width */, address_map_constructor(FUNC(tms1100_cpu_device::rom_11bit), this), 7 /* ram width */, address_map_constructor(FUNC(tms1100_cpu_device::ram_7bit), this)) +{ } + tms1170_cpu_device::tms1170_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) : tms1100_cpu_device(mconfig, TMS1170, tag, owner, clock, 8, 11, 6, 8, 3, 1, 11, address_map_constructor(FUNC(tms1170_cpu_device::rom_11bit), this), 7, address_map_constructor(FUNC(tms1170_cpu_device::ram_7bit), this)) { } diff --git a/src/devices/cpu/tms1000/tms1400.cpp b/src/devices/cpu/tms1000/tms1400.cpp index 1823badd574..ca8832a5a85 100644 --- a/src/devices/cpu/tms1000/tms1400.cpp +++ b/src/devices/cpu/tms1000/tms1400.cpp @@ -33,36 +33,36 @@ DEFINE_DEVICE_TYPE(TMS1600, tms1600_cpu_device, "tms1600", "Texas Instruments TM DEFINE_DEVICE_TYPE(TMS1670, tms1670_cpu_device, "tms1670", "Texas Instruments TMS1670") // high voltage version -tms1400_cpu_device::tms1400_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) : - tms1400_cpu_device(mconfig, TMS1400, tag, owner, clock, 8 /* o pins */, 11 /* r pins */, 6 /* pc bits */, 8 /* byte width */, 3 /* x width */, 3 /* stack levels */, 12 /* rom width */, address_map_constructor(FUNC(tms1400_cpu_device::rom_12bit), this), 7 /* ram width */, address_map_constructor(FUNC(tms1400_cpu_device::ram_7bit), this)) -{ } - tms1400_cpu_device::tms1400_cpu_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock, u8 o_pins, u8 r_pins, u8 pc_bits, u8 byte_bits, u8 x_bits, u8 stack_levels, int rom_width, address_map_constructor rom_map, int ram_width, address_map_constructor ram_map) : tms1100_cpu_device(mconfig, type, tag, owner, clock, o_pins, r_pins, pc_bits, byte_bits, x_bits, stack_levels, rom_width, rom_map, ram_width, ram_map) { } - -tms1470_cpu_device::tms1470_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) : - tms1470_cpu_device(mconfig, TMS1470, tag, owner, clock, 8, 10, 6, 8, 3, 3, 12, address_map_constructor(FUNC(tms1470_cpu_device::rom_12bit), this), 7, address_map_constructor(FUNC(tms1470_cpu_device::ram_7bit), this)) +tms1400_cpu_device::tms1400_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) : + tms1400_cpu_device(mconfig, TMS1400, tag, owner, clock, 8 /* o pins */, 11 /* r pins */, 6 /* pc bits */, 8 /* byte width */, 3 /* x width */, 3 /* stack levels */, 12 /* rom width */, address_map_constructor(FUNC(tms1400_cpu_device::rom_12bit), this), 7 /* ram width */, address_map_constructor(FUNC(tms1400_cpu_device::ram_7bit), this)) { } + tms1470_cpu_device::tms1470_cpu_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock, u8 o_pins, u8 r_pins, u8 pc_bits, u8 byte_bits, u8 x_bits, u8 stack_levels, int rom_width, address_map_constructor rom_map, int ram_width, address_map_constructor ram_map) : tms1400_cpu_device(mconfig, type, tag, owner, clock, o_pins, r_pins, pc_bits, byte_bits, x_bits, stack_levels, rom_width, rom_map, ram_width, ram_map) { } +tms1470_cpu_device::tms1470_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) : + tms1470_cpu_device(mconfig, TMS1470, tag, owner, clock, 8, 10, 6, 8, 3, 3, 12, address_map_constructor(FUNC(tms1470_cpu_device::rom_12bit), this), 7, address_map_constructor(FUNC(tms1470_cpu_device::ram_7bit), this)) +{ } + tms1475_cpu_device::tms1475_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) : tms1470_cpu_device(mconfig, TMS1475, tag, owner, clock, 8, 22, 6, 8, 3, 3, 12, address_map_constructor(FUNC(tms1475_cpu_device::rom_12bit), this), 7, address_map_constructor(FUNC(tms1475_cpu_device::ram_7bit), this)) { } -tms1600_cpu_device::tms1600_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) : - tms1600_cpu_device(mconfig, TMS1600, tag, owner, clock, 8, 16, 6, 8, 3, 3, 12, address_map_constructor(FUNC(tms1600_cpu_device::rom_12bit), this), 7, address_map_constructor(FUNC(tms1600_cpu_device::ram_7bit), this)) -{ } - tms1600_cpu_device::tms1600_cpu_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock, u8 o_pins, u8 r_pins, u8 pc_bits, u8 byte_bits, u8 x_bits, u8 stack_levels, int rom_width, address_map_constructor rom_map, int ram_width, address_map_constructor ram_map) : tms1400_cpu_device(mconfig, type, tag, owner, clock, o_pins, r_pins, pc_bits, byte_bits, x_bits, stack_levels, rom_width, rom_map, ram_width, ram_map) { } +tms1600_cpu_device::tms1600_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) : + tms1600_cpu_device(mconfig, TMS1600, tag, owner, clock, 8, 16, 6, 8, 3, 3, 12, address_map_constructor(FUNC(tms1600_cpu_device::rom_12bit), this), 7, address_map_constructor(FUNC(tms1600_cpu_device::ram_7bit), this)) +{ } + tms1670_cpu_device::tms1670_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) : tms1600_cpu_device(mconfig, TMS1670, tag, owner, clock, 8, 16, 6, 8, 3, 3, 12, address_map_constructor(FUNC(tms1670_cpu_device::rom_12bit), this), 7, address_map_constructor(FUNC(tms1670_cpu_device::ram_7bit), this)) { } diff --git a/src/devices/cpu/tms1000/tms1k_base.h b/src/devices/cpu/tms1000/tms1k_base.h index fa2ce2b7e8d..7674ffe266f 100644 --- a/src/devices/cpu/tms1000/tms1k_base.h +++ b/src/devices/cpu/tms1000/tms1k_base.h @@ -150,7 +150,7 @@ protected: virtual void write_r_output(u32 data) { m_write_r(data & m_r_mask); } virtual u8 read_k_input() { return m_read_k() & 0xf; } virtual void set_cki_bus(); - virtual void dynamic_output() { ; } // not used by default + virtual void dynamic_output() { } // not used by default virtual void read_opcode(); virtual void op_br(); @@ -171,20 +171,20 @@ protected: virtual void op_comc(); virtual void op_tpc(); - virtual void op_tax() { ; } - virtual void op_txa() { ; } - virtual void op_tra() { ; } - virtual void op_tac() { ; } - virtual void op_tca() { ; } - virtual void op_tadm() { ; } - virtual void op_tma() { ; } + virtual void op_tax() { } + virtual void op_txa() { } + virtual void op_tra() { } + virtual void op_tac() { } + virtual void op_tca() { } + virtual void op_tadm() { } + virtual void op_tma() { } - virtual void op_xda() { ; } - virtual void op_off() { ; } - virtual void op_seac() { ; } - virtual void op_reac() { ; } - virtual void op_sal() { ; } - virtual void op_sbl() { ; } + virtual void op_xda() { } + virtual void op_off() { } + virtual void op_seac() { } + virtual void op_reac() { } + virtual void op_sal() { } + virtual void op_sbl() { } address_space_config m_program_config; address_space_config m_data_config; diff --git a/src/devices/cpu/tms1000/tms2100.cpp b/src/devices/cpu/tms1000/tms2100.cpp index 9d68dd79843..367b5ec9ee2 100644 --- a/src/devices/cpu/tms1000/tms2100.cpp +++ b/src/devices/cpu/tms1000/tms2100.cpp @@ -40,26 +40,27 @@ DEFINE_DEVICE_TYPE(TMS2300, tms2300_cpu_device, "tms2300", "Texas Instruments TM DEFINE_DEVICE_TYPE(TMS2370, tms2370_cpu_device, "tms2370", "Texas Instruments TMS2370") // high voltage version, 1 R pin removed for Vpp -tms2100_cpu_device::tms2100_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) : - tms2100_cpu_device(mconfig, TMS2100, tag, owner, clock, 8 /* o pins */, 7 /* r pins */, 6 /* pc bits */, 8 /* byte width */, 3 /* x width */, 4 /* stack levels */, 11 /* rom width */, address_map_constructor(FUNC(tms2100_cpu_device::rom_11bit), this), 7 /* ram width */, address_map_constructor(FUNC(tms2100_cpu_device::ram_7bit), this)) -{ } - tms2100_cpu_device::tms2100_cpu_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock, u8 o_pins, u8 r_pins, u8 pc_bits, u8 byte_bits, u8 x_bits, u8 stack_levels, int rom_width, address_map_constructor rom_map, int ram_width, address_map_constructor ram_map) : tms1100_cpu_device(mconfig, type, tag, owner, clock, o_pins, r_pins, pc_bits, byte_bits, x_bits, stack_levels, rom_width, rom_map, ram_width, ram_map) { } +tms2100_cpu_device::tms2100_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) : + tms2100_cpu_device(mconfig, TMS2100, tag, owner, clock, 8 /* o pins */, 7 /* r pins */, 6 /* pc bits */, 8 /* byte width */, 3 /* x width */, 4 /* stack levels */, 11 /* rom width */, address_map_constructor(FUNC(tms2100_cpu_device::rom_11bit), this), 7 /* ram width */, address_map_constructor(FUNC(tms2100_cpu_device::ram_7bit), this)) +{ } + tms2170_cpu_device::tms2170_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) : tms2100_cpu_device(mconfig, TMS2170, tag, owner, clock, 8, 6, 6, 8, 3, 4, 11, address_map_constructor(FUNC(tms2170_cpu_device::rom_11bit), this), 7, address_map_constructor(FUNC(tms2170_cpu_device::ram_7bit), this)) { } -tms2300_cpu_device::tms2300_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) : - tms2300_cpu_device(mconfig, TMS2300, tag, owner, clock, 8, 15, 6, 8, 3, 4, 11, address_map_constructor(FUNC(tms2300_cpu_device::rom_11bit), this), 7, address_map_constructor(FUNC(tms2300_cpu_device::ram_7bit), this)) -{ } tms2300_cpu_device::tms2300_cpu_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock, u8 o_pins, u8 r_pins, u8 pc_bits, u8 byte_bits, u8 x_bits, u8 stack_levels, int rom_width, address_map_constructor rom_map, int ram_width, address_map_constructor ram_map) : tms2100_cpu_device(mconfig, type, tag, owner, clock, o_pins, r_pins, pc_bits, byte_bits, x_bits, stack_levels, rom_width, rom_map, ram_width, ram_map) { } +tms2300_cpu_device::tms2300_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) : + tms2300_cpu_device(mconfig, TMS2300, tag, owner, clock, 8, 15, 6, 8, 3, 4, 11, address_map_constructor(FUNC(tms2300_cpu_device::rom_11bit), this), 7, address_map_constructor(FUNC(tms2300_cpu_device::ram_7bit), this)) +{ } + tms2370_cpu_device::tms2370_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) : tms2300_cpu_device(mconfig, TMS2370, tag, owner, clock, 8, 14, 6, 8, 3, 4, 11, address_map_constructor(FUNC(tms2370_cpu_device::rom_11bit), this), 7, address_map_constructor(FUNC(tms2370_cpu_device::ram_7bit), this)) { } diff --git a/src/devices/cpu/tms1000/tms2400.cpp b/src/devices/cpu/tms1000/tms2400.cpp index 289e4f94692..a8c3bf6dea4 100644 --- a/src/devices/cpu/tms1000/tms2400.cpp +++ b/src/devices/cpu/tms1000/tms2400.cpp @@ -20,26 +20,27 @@ DEFINE_DEVICE_TYPE(TMS2600, tms2600_cpu_device, "tms2600", "Texas Instruments TM DEFINE_DEVICE_TYPE(TMS2670, tms2670_cpu_device, "tms2670", "Texas Instruments TMS2670") // high voltage version, 1 R pin removed for Vpp -tms2400_cpu_device::tms2400_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) : - tms2400_cpu_device(mconfig, TMS2400, tag, owner, clock, 8 /* o pins */, 7 /* r pins */, 6 /* pc bits */, 8 /* byte width */, 4 /* x width */, 4 /* stack levels */, 12 /* rom width */, address_map_constructor(FUNC(tms2400_cpu_device::rom_12bit), this), 8 /* ram width */, address_map_constructor(FUNC(tms2400_cpu_device::ram_8bit), this)) -{ } - tms2400_cpu_device::tms2400_cpu_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock, u8 o_pins, u8 r_pins, u8 pc_bits, u8 byte_bits, u8 x_bits, u8 stack_levels, int rom_width, address_map_constructor rom_map, int ram_width, address_map_constructor ram_map) : tms2100_cpu_device(mconfig, type, tag, owner, clock, o_pins, r_pins, pc_bits, byte_bits, x_bits, stack_levels, rom_width, rom_map, ram_width, ram_map) { } +tms2400_cpu_device::tms2400_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) : + tms2400_cpu_device(mconfig, TMS2400, tag, owner, clock, 8 /* o pins */, 7 /* r pins */, 6 /* pc bits */, 8 /* byte width */, 4 /* x width */, 4 /* stack levels */, 12 /* rom width */, address_map_constructor(FUNC(tms2400_cpu_device::rom_12bit), this), 8 /* ram width */, address_map_constructor(FUNC(tms2400_cpu_device::ram_8bit), this)) +{ } + tms2470_cpu_device::tms2470_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) : tms2400_cpu_device(mconfig, TMS2470, tag, owner, clock, 8, 6, 6, 8, 4, 4, 12, address_map_constructor(FUNC(tms2470_cpu_device::rom_12bit), this), 8, address_map_constructor(FUNC(tms2470_cpu_device::ram_8bit), this)) { } -tms2600_cpu_device::tms2600_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) : - tms2600_cpu_device(mconfig, TMS2600, tag, owner, clock, 8, 15, 6, 8, 4, 4, 12, address_map_constructor(FUNC(tms2600_cpu_device::rom_12bit), this), 8, address_map_constructor(FUNC(tms2600_cpu_device::ram_8bit), this)) -{ } tms2600_cpu_device::tms2600_cpu_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock, u8 o_pins, u8 r_pins, u8 pc_bits, u8 byte_bits, u8 x_bits, u8 stack_levels, int rom_width, address_map_constructor rom_map, int ram_width, address_map_constructor ram_map) : tms2400_cpu_device(mconfig, type, tag, owner, clock, o_pins, r_pins, pc_bits, byte_bits, x_bits, stack_levels, rom_width, rom_map, ram_width, ram_map) { } +tms2600_cpu_device::tms2600_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) : + tms2600_cpu_device(mconfig, TMS2600, tag, owner, clock, 8, 15, 6, 8, 4, 4, 12, address_map_constructor(FUNC(tms2600_cpu_device::rom_12bit), this), 8, address_map_constructor(FUNC(tms2600_cpu_device::ram_8bit), this)) +{ } + tms2670_cpu_device::tms2670_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) : tms2600_cpu_device(mconfig, TMS2670, tag, owner, clock, 8, 14, 6, 8, 4, 4, 12, address_map_constructor(FUNC(tms2670_cpu_device::rom_12bit), this), 8, address_map_constructor(FUNC(tms2670_cpu_device::ram_8bit), this)) { } diff --git a/src/devices/cpu/tms1000/tp0320.cpp b/src/devices/cpu/tms1000/tp0320.cpp index cf3a7e2f1f4..38140d29566 100644 --- a/src/devices/cpu/tms1000/tp0320.cpp +++ b/src/devices/cpu/tms1000/tp0320.cpp @@ -58,12 +58,12 @@ std::unique_ptr tp0320_cpu_device::create_disassembler() // device_reset -u32 tp0320_cpu_device::decode_micro(u8 sel) +u32 tp0320_cpu_device::decode_micro(offs_t offset) { u32 decode = 0; - sel = bitswap<8>(sel,7,6,0,1,2,3,4,5); // lines are reversed - u32 mask = m_mpla->read(sel); + offset = bitswap<6>(offset,0,1,2,3,4,5); // lines are reversed + u32 mask = m_mpla->read(offset); mask ^= 0x0bff0; // invert active-negative // _____ _______ ______ _____ _____ ______ _____ _____ ______ _____ _____ diff --git a/src/devices/cpu/tms1000/tp0320.h b/src/devices/cpu/tms1000/tp0320.h index 710dfb5b787..c972e009b1b 100644 --- a/src/devices/cpu/tms1000/tp0320.h +++ b/src/devices/cpu/tms1000/tp0320.h @@ -23,8 +23,8 @@ protected: void ram_192x4(address_map &map); // overrides - virtual u32 decode_fixed(u16 op) override { return 0; } // not yet - virtual u32 decode_micro(u8 sel) override; + virtual u32 decode_fixed(offs_t offset) override { return 0; } // not yet + virtual u32 decode_micro(offs_t offset) override; virtual void device_reset() override; virtual std::unique_ptr create_disassembler() override; diff --git a/src/mame/miltonbradley/microvsn.cpp b/src/mame/miltonbradley/microvsn.cpp index c20ae643624..dc4ffe08cc3 100644 --- a/src/mame/miltonbradley/microvsn.cpp +++ b/src/mame/miltonbradley/microvsn.cpp @@ -86,7 +86,7 @@ private: required_ioport m_paddle; required_ioport m_conf; - u32 tms1100_decode_micro(offs_t offset); + u32 tms1100_micro_pla(offs_t offset); DECLARE_DEVICE_IMAGE_LOAD_MEMBER(cart_load); void apply_settings(void); @@ -134,7 +134,7 @@ void microvision_state::machine_start() Cartridge Init ******************************************************************************/ -static const u16 microvision_output_pla[2][0x20] = +static const u16 tms1100_output_pla[2][0x20] = { // default TMS1100 O output PLA // verified for: blckbstr, pinball @@ -155,34 +155,38 @@ static const u16 microvision_output_pla[2][0x20] = } }; -u32 microvision_state::tms1100_decode_micro(offs_t offset) +u32 microvision_state::tms1100_micro_pla(offs_t offset) { // default TMS1100 microinstructions PLA - this should work for all games // verified for: blckbstr, bowling, pinball, vegasslt - static const u16 micro[0x80] = + + // TCY, YNEC, TMCIY, AxAAC + static const u16 micro1[4] = { 0x0108, 0x9080, 0x8068, 0x0136 }; + + // 0x20, 0x30, 0x00 + static const u16 micro2[0x30] = { - 0x1402, 0x0c30, 0xd002, 0x2404, 0x8019, 0x8038, 0x0416, 0x0415, - 0x0104, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1100, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, - 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000a, 0x0404, 0x0408, 0x8004, 0xa019, 0xa038, 0x2004, 0x2000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1580, 0x1580, 0x1580, 0x1580, 0x0c34, 0x0834, 0x0434, 0x1400, - 0x0108, 0x0108, 0x0108, 0x0108, 0x0108, 0x0108, 0x0108, 0x0108, - 0x0108, 0x0108, 0x0108, 0x0108, 0x0108, 0x0108, 0x0108, 0x0108, - 0x9080, 0x9080, 0x9080, 0x9080, 0x9080, 0x9080, 0x9080, 0x9080, - 0x9080, 0x9080, 0x9080, 0x9080, 0x9080, 0x9080, 0x9080, 0x9080, - 0x8068, 0x8068, 0x8068, 0x8068, 0x8068, 0x8068, 0x8068, 0x8068, - 0x8068, 0x8068, 0x8068, 0x8068, 0x8068, 0x8068, 0x8068, 0x8068, - 0x0136, 0x0136, 0x0136, 0x0136, 0x0136, 0x0136, 0x0136, 0x0136, - 0x0136, 0x0136, 0x0136, 0x0136, 0x0136, 0x0136, 0x0136, 0x0134 + + 0x1402, 0x0c30, 0xd002, 0x2404, 0x8019, 0x8038, 0x0416, 0x0415, + 0x0104, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1100, 0x0000, }; - if (offset >= 0x80 || micro[offset] == 0) - return 0x8fa3; - else - return micro[offset]; + u16 data = 0; + + if (offset >= 0x40 && offset < 0x80) + { + data = micro1[offset >> 4 & 3]; + if (offset == 0x7f) data ^= 2; + } + else if (offset < 0x40 && (offset & 0xf0) != 0x10) + data = micro2[offset ^ 0x20]; + + return (data == 0) ? 0x8fa3 : data; } DEVICE_IMAGE_LOAD_MEMBER(microvision_state::cart_load) @@ -244,7 +248,7 @@ void microvision_state::apply_settings() m_button_mask = (conf & 1) ? m_butmask_auto : 0xfff; u8 pla = ((conf & 0x18) == 0x10) ? m_pla_auto : (conf >> 3 & 1); - m_tms1100->set_output_pla(microvision_output_pla[pla]); + m_tms1100->set_output_pla(tms1100_output_pla[pla]); m_paddle_on = ((conf & 6) == 4) ? m_paddle_auto : bool(conf & 2); } @@ -443,8 +447,8 @@ void microvision_state::microvision(machine_config &config) { /* basic machine hardware */ TMS1100(config, m_tms1100, 0); - m_tms1100->set_output_pla(microvision_output_pla[0]); - m_tms1100->set_decode_micro().set(FUNC(microvision_state::tms1100_decode_micro)); + m_tms1100->set_output_pla(tms1100_output_pla[0]); + m_tms1100->set_decode_micro().set(FUNC(microvision_state::tms1100_micro_pla)); m_tms1100->read_k().set(FUNC(microvision_state::tms1100_k_r)); m_tms1100->write_o().set(FUNC(microvision_state::tms1100_o_w)); m_tms1100->write_r().set(FUNC(microvision_state::tms1100_r_w)); diff --git a/src/mame/tiger/k28m2.cpp b/src/mame/tiger/k28m2.cpp index 9d60b8b05b6..7f5c5d59f52 100644 --- a/src/mame/tiger/k28m2.cpp +++ b/src/mame/tiger/k28m2.cpp @@ -14,7 +14,7 @@ Hardware notes: - MCU: TMS1400 MP7324 (die label: TMS1400, MP7324, 28L 01D D000 R100) - TMS51xx: TMS5110A - VSM: 16KB CM62084 -- LCD: SMOS SMC1112 MCU under epoxy (die label: SMC1112 D2N0), 8*14-seg display +- LCD: SMC1112 MCU under epoxy (die label: SMC1112 D2N0), 8*14-seg display - module slot (not compatible with the 1981 version(s)) TODO: @@ -27,6 +27,7 @@ TODO: #include "bus/generic/carts.h" #include "bus/generic/slot.h" +#include "cpu/tms1000/smc1102.h" #include "cpu/tms1000/tms1400.h" #include "machine/tms6100.h" #include "sound/tms5110.h" @@ -46,6 +47,7 @@ public: k28m2_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), m_maincpu(*this, "maincpu"), + m_subcpu(*this, "subcpu"), m_tms5100(*this, "tms5100"), m_tms6100(*this, "tms6100"), m_cart(*this, "cartslot"), @@ -63,6 +65,7 @@ protected: private: // devices/pointers required_device m_maincpu; + required_device m_subcpu; required_device m_tms5100; required_device m_tms6100; optional_device m_cart; @@ -256,6 +259,8 @@ void k28m2_state::k28m2(machine_config &config) m_maincpu->write_o().set(FUNC(k28m2_state::write_o)); m_maincpu->write_r().set(FUNC(k28m2_state::write_r)); + SMC1112(config, m_subcpu, 32.768_kHz_XTAL); + config.set_default_layout(layout_k28m2); // sound hardware @@ -292,6 +297,9 @@ ROM_START( k28m2 ) ROM_REGION( 557, "maincpu:opla", 0 ) ROM_LOAD( "tms1400_k28m2_output.pla", 0, 557, CRC(3a5c7005) SHA1(3fe5819c138a90e7fc12817415f2622ca81b40b2) ) + ROM_REGION( 0x0800, "subcpu", 0 ) + ROM_LOAD( "smc1112_d2n0", 0x0000, 0x0800, NO_DUMP ) + ROM_REGION( 0x10000, "tms6100", ROMREGION_ERASEFF ) // 8000-bfff? = space reserved for cartridge ROM_LOAD( "cm62084.vsm", 0x0000, 0x4000, CRC(cd1376f7) SHA1(96fa484c392c451599bc083b8376cad9c998df7d) ) ROM_END