summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/cpu
diff options
context:
space:
mode:
author Devin Acker <d@revenant1.net>2026-03-28 16:29:00 -0400
committer GitHub <noreply@github.com>2026-03-28 16:29:00 -0400
commit607a052f9a12beca3ca252b5e6aa2af81c1c32cc (patch)
treed5b987f3b8c2267f72b6c3e8469bf1e738865398 /src/devices/cpu
parenta3d864ad9efdd6dd03977e3e73671f28ec0887f2 (diff)
bus/centronics: Add NEC PC-6022 plotter [Devin Acker] (#15162)
Diffstat (limited to 'src/devices/cpu')
-rw-r--r--src/devices/cpu/upd7810/upd7810.cpp11
-rw-r--r--src/devices/cpu/upd7810/upd7810.h3
-rw-r--r--src/devices/cpu/upd7810/upd7810_dasm.cpp238
-rw-r--r--src/devices/cpu/upd7810/upd7810_opcodes.cpp12
4 files changed, 146 insertions, 118 deletions
diff --git a/src/devices/cpu/upd7810/upd7810.cpp b/src/devices/cpu/upd7810/upd7810.cpp
index c6dcc437bd2..4c6b9da34fb 100644
--- a/src/devices/cpu/upd7810/upd7810.cpp
+++ b/src/devices/cpu/upd7810/upd7810.cpp
@@ -436,6 +436,7 @@ upd7810_device::upd7810_device(const machine_config &mconfig, device_type type,
, m_pf_out_cb(*this)
, m_pt_in_cb(*this, 0) // TODO: uPD7807 only
, m_program_config("program", ENDIANNESS_LITTLE, 8, 16, 0, internal_map)
+ , m_io_config("io", ENDIANNESS_LITTLE, 8, 16, 0)
, m_ram_view(*this, "ram_view")
, m_pa_pullups(0xff)
, m_pb_pullups(0xff)
@@ -568,6 +569,14 @@ device_memory_interface::space_config_vector upd7810_device::memory_space_config
};
}
+device_memory_interface::space_config_vector upd7801_device::memory_space_config() const
+{
+ return space_config_vector {
+ std::make_pair(AS_PROGRAM, &m_program_config),
+ std::make_pair(AS_IO, &m_io_config)
+ };
+}
+
std::unique_ptr<util::disasm_interface> upd7810_device::create_disassembler()
{
return std::make_unique<upd7810_disassembler>();
@@ -1670,6 +1679,8 @@ void upd7810_device::base_device_start()
{
space(AS_PROGRAM).specific(m_program);
space(AS_PROGRAM).cache(m_opcodes);
+ if (has_space(AS_IO))
+ space(AS_IO).specific(m_io);
configure_ops();
diff --git a/src/devices/cpu/upd7810/upd7810.h b/src/devices/cpu/upd7810/upd7810.h
index 503f9fcf270..f5f78d9afd2 100644
--- a/src/devices/cpu/upd7810/upd7810.h
+++ b/src/devices/cpu/upd7810/upd7810.h
@@ -239,6 +239,7 @@ protected:
static const struct opcode_s s_opXX_78c06[256];
address_space_config m_program_config;
+ address_space_config m_io_config; // 7800/01/02 only
memory_view m_ram_view;
PAIR m_ppc; /* previous program counter */
@@ -344,6 +345,7 @@ protected:
const struct opcode_s *m_op74;
memory_access<16, 0, 0, ENDIANNESS_LITTLE>::cache m_opcodes;
memory_access<16, 0, 0, ENDIANNESS_LITTLE>::specific m_program;
+ memory_access<16, 0, 0, ENDIANNESS_LITTLE>::specific m_io;
int m_icount;
uint8_t RP(offs_t port);
@@ -1418,6 +1420,7 @@ protected:
virtual uint64_t execute_clocks_to_cycles(uint64_t clocks) const noexcept override { return (clocks + 2 - 1) / 2; }
virtual uint64_t execute_cycles_to_clocks(uint64_t cycles) const noexcept override { return (cycles * 2); }
virtual void execute_set_input(int inputnum, int state) override;
+ virtual space_config_vector memory_space_config() const override;
virtual std::unique_ptr<util::disasm_interface> create_disassembler() override;
virtual void handle_timers(int cycles) override;
virtual void upd7810_take_irq() override;
diff --git a/src/devices/cpu/upd7810/upd7810_dasm.cpp b/src/devices/cpu/upd7810/upd7810_dasm.cpp
index 6f07126a029..c08cc4a111a 100644
--- a/src/devices/cpu/upd7810/upd7810_dasm.cpp
+++ b/src/devices/cpu/upd7810/upd7810_dasm.cpp
@@ -3921,67 +3921,67 @@ const upd7810_base_disassembler::dasm_s upd7801_disassembler::d48_7801[256] = {
const upd7810_base_disassembler::dasm_s upd7801_disassembler::d4C_7801[256] = {
// 0x00 - 0x3F
- { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
- { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
- { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
- { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
-
- { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
- { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
- { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
- { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
-
- { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
- { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
- { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
- { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
-
- { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
- { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
- { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
- { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
+ { IN, "%A" }, { IN, "%A" }, { IN, "%A" }, { IN, "%A" },
+ { IN, "%A" }, { IN, "%A" }, { IN, "%A" }, { IN, "%A" },
+ { IN, "%A" }, { IN, "%A" }, { IN, "%A" }, { IN, "%A" },
+ { IN, "%A" }, { IN, "%A" }, { IN, "%A" }, { IN, "%A" },
+
+ { IN, "%A" }, { IN, "%A" }, { IN, "%A" }, { IN, "%A" },
+ { IN, "%A" }, { IN, "%A" }, { IN, "%A" }, { IN, "%A" },
+ { IN, "%A" }, { IN, "%A" }, { IN, "%A" }, { IN, "%A" },
+ { IN, "%A" }, { IN, "%A" }, { IN, "%A" }, { IN, "%A" },
+
+ { IN, "%A" }, { IN, "%A" }, { IN, "%A" }, { IN, "%A" },
+ { IN, "%A" }, { IN, "%A" }, { IN, "%A" }, { IN, "%A" },
+ { IN, "%A" }, { IN, "%A" }, { IN, "%A" }, { IN, "%A" },
+ { IN, "%A" }, { IN, "%A" }, { IN, "%A" }, { IN, "%A" },
+
+ { IN, "%A" }, { IN, "%A" }, { IN, "%A" }, { IN, "%A" },
+ { IN, "%A" }, { IN, "%A" }, { IN, "%A" }, { IN, "%A" },
+ { IN, "%A" }, { IN, "%A" }, { IN, "%A" }, { IN, "%A" },
+ { IN, "%A" }, { IN, "%A" }, { IN, "%A" }, { IN, "%A" },
// 0x40 - 0x7F
- { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
- { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
- { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
- { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
-
- { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
- { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
- { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
- { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
-
- { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
- { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
- { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
- { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
-
- { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
- { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
- { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
- { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
+ { IN, "%A" }, { IN, "%A" }, { IN, "%A" }, { IN, "%A" },
+ { IN, "%A" }, { IN, "%A" }, { IN, "%A" }, { IN, "%A" },
+ { IN, "%A" }, { IN, "%A" }, { IN, "%A" }, { IN, "%A" },
+ { IN, "%A" }, { IN, "%A" }, { IN, "%A" }, { IN, "%A" },
+
+ { IN, "%A" }, { IN, "%A" }, { IN, "%A" }, { IN, "%A" },
+ { IN, "%A" }, { IN, "%A" }, { IN, "%A" }, { IN, "%A" },
+ { IN, "%A" }, { IN, "%A" }, { IN, "%A" }, { IN, "%A" },
+ { IN, "%A" }, { IN, "%A" }, { IN, "%A" }, { IN, "%A" },
+
+ { IN, "%A" }, { IN, "%A" }, { IN, "%A" }, { IN, "%A" },
+ { IN, "%A" }, { IN, "%A" }, { IN, "%A" }, { IN, "%A" },
+ { IN, "%A" }, { IN, "%A" }, { IN, "%A" }, { IN, "%A" },
+ { IN, "%A" }, { IN, "%A" }, { IN, "%A" }, { IN, "%A" },
+
+ { IN, "%A" }, { IN, "%A" }, { IN, "%A" }, { IN, "%A" },
+ { IN, "%A" }, { IN, "%A" }, { IN, "%A" }, { IN, "%A" },
+ { IN, "%A" }, { IN, "%A" }, { IN, "%A" }, { IN, "%A" },
+ { IN, "%A" }, { IN, "%A" }, { IN, "%A" }, { IN, "%A" },
// 0x80 - 0xBF
- { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
- { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
- { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
- { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
-
- { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
- { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
- { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
- { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
-
- { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
- { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
- { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
- { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
-
- { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
- { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
- { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
- { IN, nullptr }, { IN, nullptr }, { IN, nullptr }, { IN, nullptr },
+ { IN, "%A" }, { IN, "%A" }, { IN, "%A" }, { IN, "%A" },
+ { IN, "%A" }, { IN, "%A" }, { IN, "%A" }, { IN, "%A" },
+ { IN, "%A" }, { IN, "%A" }, { IN, "%A" }, { IN, "%A" },
+ { IN, "%A" }, { IN, "%A" }, { IN, "%A" }, { IN, "%A" },
+
+ { IN, "%A" }, { IN, "%A" }, { IN, "%A" }, { IN, "%A" },
+ { IN, "%A" }, { IN, "%A" }, { IN, "%A" }, { IN, "%A" },
+ { IN, "%A" }, { IN, "%A" }, { IN, "%A" }, { IN, "%A" },
+ { IN, "%A" }, { IN, "%A" }, { IN, "%A" }, { IN, "%A" },
+
+ { IN, "%A" }, { IN, "%A" }, { IN, "%A" }, { IN, "%A" },
+ { IN, "%A" }, { IN, "%A" }, { IN, "%A" }, { IN, "%A" },
+ { IN, "%A" }, { IN, "%A" }, { IN, "%A" }, { IN, "%A" },
+ { IN, "%A" }, { IN, "%A" }, { IN, "%A" }, { IN, "%A" },
+
+ { IN, "%A" }, { IN, "%A" }, { IN, "%A" }, { IN, "%A" },
+ { IN, "%A" }, { IN, "%A" }, { IN, "%A" }, { IN, "%A" },
+ { IN, "%A" }, { IN, "%A" }, { IN, "%A" }, { IN, "%A" },
+ { IN, "%A" }, { IN, "%A" }, { IN, "%A" }, { IN, "%A" },
// 0xC0 - 0xFF
{ MOV, "A,PA" }, { MOV, "A,PB" }, { MOV, "A,PC" }, { MOV, "A,MK" },
@@ -4007,67 +4007,67 @@ const upd7810_base_disassembler::dasm_s upd7801_disassembler::d4C_7801[256] = {
const upd7810_base_disassembler::dasm_s upd7801_disassembler::d4D_7801[256] = {
// 0x00 - 0x3F
- { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
- { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
- { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
- { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
-
- { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
- { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
- { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
- { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
-
- { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
- { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
- { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
- { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
-
- { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
- { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
- { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
- { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
+ { OUT, "%A" }, { OUT, "%A" }, { OUT, "%A" }, { OUT, "%A" },
+ { OUT, "%A" }, { OUT, "%A" }, { OUT, "%A" }, { OUT, "%A" },
+ { OUT, "%A" }, { OUT, "%A" }, { OUT, "%A" }, { OUT, "%A" },
+ { OUT, "%A" }, { OUT, "%A" }, { OUT, "%A" }, { OUT, "%A" },
+
+ { OUT, "%A" }, { OUT, "%A" }, { OUT, "%A" }, { OUT, "%A" },
+ { OUT, "%A" }, { OUT, "%A" }, { OUT, "%A" }, { OUT, "%A" },
+ { OUT, "%A" }, { OUT, "%A" }, { OUT, "%A" }, { OUT, "%A" },
+ { OUT, "%A" }, { OUT, "%A" }, { OUT, "%A" }, { OUT, "%A" },
+
+ { OUT, "%A" }, { OUT, "%A" }, { OUT, "%A" }, { OUT, "%A" },
+ { OUT, "%A" }, { OUT, "%A" }, { OUT, "%A" }, { OUT, "%A" },
+ { OUT, "%A" }, { OUT, "%A" }, { OUT, "%A" }, { OUT, "%A" },
+ { OUT, "%A" }, { OUT, "%A" }, { OUT, "%A" }, { OUT, "%A" },
+
+ { OUT, "%A" }, { OUT, "%A" }, { OUT, "%A" }, { OUT, "%A" },
+ { OUT, "%A" }, { OUT, "%A" }, { OUT, "%A" }, { OUT, "%A" },
+ { OUT, "%A" }, { OUT, "%A" }, { OUT, "%A" }, { OUT, "%A" },
+ { OUT, "%A" }, { OUT, "%A" }, { OUT, "%A" }, { OUT, "%A" },
// 0x40 - 0x7F
- { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
- { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
- { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
- { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
-
- { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
- { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
- { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
- { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
-
- { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
- { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
- { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
- { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
-
- { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
- { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
- { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
- { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
+ { OUT, "%A" }, { OUT, "%A" }, { OUT, "%A" }, { OUT, "%A" },
+ { OUT, "%A" }, { OUT, "%A" }, { OUT, "%A" }, { OUT, "%A" },
+ { OUT, "%A" }, { OUT, "%A" }, { OUT, "%A" }, { OUT, "%A" },
+ { OUT, "%A" }, { OUT, "%A" }, { OUT, "%A" }, { OUT, "%A" },
+
+ { OUT, "%A" }, { OUT, "%A" }, { OUT, "%A" }, { OUT, "%A" },
+ { OUT, "%A" }, { OUT, "%A" }, { OUT, "%A" }, { OUT, "%A" },
+ { OUT, "%A" }, { OUT, "%A" }, { OUT, "%A" }, { OUT, "%A" },
+ { OUT, "%A" }, { OUT, "%A" }, { OUT, "%A" }, { OUT, "%A" },
+
+ { OUT, "%A" }, { OUT, "%A" }, { OUT, "%A" }, { OUT, "%A" },
+ { OUT, "%A" }, { OUT, "%A" }, { OUT, "%A" }, { OUT, "%A" },
+ { OUT, "%A" }, { OUT, "%A" }, { OUT, "%A" }, { OUT, "%A" },
+ { OUT, "%A" }, { OUT, "%A" }, { OUT, "%A" }, { OUT, "%A" },
+
+ { OUT, "%A" }, { OUT, "%A" }, { OUT, "%A" }, { OUT, "%A" },
+ { OUT, "%A" }, { OUT, "%A" }, { OUT, "%A" }, { OUT, "%A" },
+ { OUT, "%A" }, { OUT, "%A" }, { OUT, "%A" }, { OUT, "%A" },
+ { OUT, "%A" }, { OUT, "%A" }, { OUT, "%A" }, { OUT, "%A" },
// 0x80 - 0xBF
- { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
- { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
- { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
- { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
-
- { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
- { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
- { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
- { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
-
- { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
- { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
- { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
- { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
-
- { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
- { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
- { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
- { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr }, { OUT, nullptr },
+ { OUT, "%A" }, { OUT, "%A" }, { OUT, "%A" }, { OUT, "%A" },
+ { OUT, "%A" }, { OUT, "%A" }, { OUT, "%A" }, { OUT, "%A" },
+ { OUT, "%A" }, { OUT, "%A" }, { OUT, "%A" }, { OUT, "%A" },
+ { OUT, "%A" }, { OUT, "%A" }, { OUT, "%A" }, { OUT, "%A" },
+
+ { OUT, "%A" }, { OUT, "%A" }, { OUT, "%A" }, { OUT, "%A" },
+ { OUT, "%A" }, { OUT, "%A" }, { OUT, "%A" }, { OUT, "%A" },
+ { OUT, "%A" }, { OUT, "%A" }, { OUT, "%A" }, { OUT, "%A" },
+ { OUT, "%A" }, { OUT, "%A" }, { OUT, "%A" }, { OUT, "%A" },
+
+ { OUT, "%A" }, { OUT, "%A" }, { OUT, "%A" }, { OUT, "%A" },
+ { OUT, "%A" }, { OUT, "%A" }, { OUT, "%A" }, { OUT, "%A" },
+ { OUT, "%A" }, { OUT, "%A" }, { OUT, "%A" }, { OUT, "%A" },
+ { OUT, "%A" }, { OUT, "%A" }, { OUT, "%A" }, { OUT, "%A" },
+
+ { OUT, "%A" }, { OUT, "%A" }, { OUT, "%A" }, { OUT, "%A" },
+ { OUT, "%A" }, { OUT, "%A" }, { OUT, "%A" }, { OUT, "%A" },
+ { OUT, "%A" }, { OUT, "%A" }, { OUT, "%A" }, { OUT, "%A" },
+ { OUT, "%A" }, { OUT, "%A" }, { OUT, "%A" }, { OUT, "%A" },
// 0xC0 - 0xFF
{ MOV, "PA,A" }, { MOV, "PB,A" }, { MOV, "PC,A" }, { MOV, "MK,A" },
@@ -5232,10 +5232,13 @@ const char *const upd7810_base_disassembler::regname[32] =
offs_t upd7810_base_disassembler::disassemble(std::ostream &stream, offs_t pc, const data_buffer &opcodes, const data_buffer &params)
{
offs_t idx = pc;
- const uint8_t op = opcodes.r8(idx++);
+ uint8_t op = opcodes.r8(idx++);
const dasm_s *desc = &m_dasmXX[op];
if (desc->is_prefix())
- desc = &desc->prefix_get(opcodes.r8(idx++));
+ {
+ op = opcodes.r8(idx++);
+ desc = &desc->prefix_get(op);
+ }
util::stream_format(stream, "%-8.8s", desc->name());
@@ -5255,6 +5258,9 @@ offs_t upd7810_base_disassembler::disassemble(std::ostream &stream, offs_t pc, c
op2 = params.r8(idx++);
util::stream_format(stream, "VV:%02X", op2);
break;
+ case 'A': /* I/O address (7801) */
+ util::stream_format(stream, "$%02X", op);
+ break;
case 'b': /* immediate byte */
util::stream_format(stream, "$%02X", params.r8(idx++));
break;
diff --git a/src/devices/cpu/upd7810/upd7810_opcodes.cpp b/src/devices/cpu/upd7810/upd7810_opcodes.cpp
index 89117d84b95..49c3b6b38bf 100644
--- a/src/devices/cpu/upd7810/upd7810_opcodes.cpp
+++ b/src/devices/cpu/upd7810/upd7810_opcodes.cpp
@@ -9404,12 +9404,20 @@ void upd7810_device::CALT_7801()
void upd7810_device::IN()
{
- logerror("unimplemented instruction: IN\n");
+ PAIR ea;
+ ea.b.h = B;
+ ea.b.l = OP2;
+
+ A = m_io.read_byte(ea.w.l);
}
void upd7810_device::OUT()
{
- logerror("unimplemented instruction: OUT\n");
+ PAIR ea;
+ ea.b.h = B;
+ ea.b.l = OP2;
+
+ m_io.write_byte(ea.w.l, A);
}
void upd7810_device::MOV_A_S()