diff options
| author | 2026-03-28 16:29:00 -0400 | |
|---|---|---|
| committer | 2026-03-28 16:29:00 -0400 | |
| commit | 607a052f9a12beca3ca252b5e6aa2af81c1c32cc (patch) | |
| tree | d5b987f3b8c2267f72b6c3e8469bf1e738865398 /src/devices/cpu | |
| parent | a3d864ad9efdd6dd03977e3e73671f28ec0887f2 (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.cpp | 11 | ||||
| -rw-r--r-- | src/devices/cpu/upd7810/upd7810.h | 3 | ||||
| -rw-r--r-- | src/devices/cpu/upd7810/upd7810_dasm.cpp | 238 | ||||
| -rw-r--r-- | src/devices/cpu/upd7810/upd7810_opcodes.cpp | 12 |
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 ¶ms) { 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() |
