mirror of
https://github.com/holub/mame
synced 2025-04-19 23:12:11 +03:00
smc1102: add device skeleton
This commit is contained in:
parent
48477df39f
commit
b0e88ea915
@ -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
|
||||
|
||||
|
69
src/devices/cpu/tms1000/smc1102.cpp
Normal file
69
src/devices/cpu/tms1000/smc1102.cpp
Normal file
@ -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<util::disasm_interface> smc1102_cpu_device::create_disassembler()
|
||||
{
|
||||
return std::make_unique<smc1102_disassembler>();
|
||||
}
|
||||
|
||||
|
||||
// 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();
|
||||
}
|
68
src/devices/cpu/tms1000/smc1102.h
Normal file
68
src/devices/cpu/tms1000/smc1102.h
Normal file
@ -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<util::disasm_interface> 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
|
@ -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))
|
||||
{ }
|
||||
|
@ -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<util::disasm_interface> 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
|
||||
|
@ -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;
|
||||
|
@ -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<util::disasm_interface> 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;
|
||||
|
||||
|
@ -76,7 +76,7 @@ protected:
|
||||
virtual void device_add_mconfig(machine_config &config) override;
|
||||
virtual std::unique_ptr<util::disasm_interface> create_disassembler() override;
|
||||
|
||||
virtual u32 decode_micro(u8 sel);
|
||||
virtual u32 decode_micro(offs_t offset);
|
||||
};
|
||||
|
||||
class tms1040_cpu_device : public tms1000_cpu_device
|
||||
|
@ -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++)
|
||||
|
@ -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;
|
||||
};
|
||||
|
||||
|
||||
|
@ -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))
|
||||
{ }
|
||||
|
@ -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))
|
||||
{ }
|
||||
|
@ -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;
|
||||
|
@ -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))
|
||||
{ }
|
||||
|
@ -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))
|
||||
{ }
|
||||
|
@ -58,12 +58,12 @@ std::unique_ptr<util::disasm_interface> 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
|
||||
|
||||
// _____ _______ ______ _____ _____ ______ _____ _____ ______ _____ _____
|
||||
|
@ -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<util::disasm_interface> create_disassembler() override;
|
||||
|
||||
|
@ -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));
|
||||
|
@ -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<tms1400_cpu_device> m_maincpu;
|
||||
required_device<smc1112_cpu_device> m_subcpu;
|
||||
required_device<tms5110_device> m_tms5100;
|
||||
required_device<tms6100_device> m_tms6100;
|
||||
optional_device<generic_slot_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
|
||||
|
Loading…
Reference in New Issue
Block a user