diff options
Diffstat (limited to 'src/devices/cpu/tx0/tx0dasm.cpp')
-rw-r--r-- | src/devices/cpu/tx0/tx0dasm.cpp | 67 |
1 files changed, 52 insertions, 15 deletions
diff --git a/src/devices/cpu/tx0/tx0dasm.cpp b/src/devices/cpu/tx0/tx0dasm.cpp index 1c6ca3e5d7c..a8152a43216 100644 --- a/src/devices/cpu/tx0/tx0dasm.cpp +++ b/src/devices/cpu/tx0/tx0dasm.cpp @@ -41,7 +41,14 @@ 1.7 | 600010 (CRY) Add carry digits to AC (according to MBR) 1.8 | 603000 (HLT) Halt computer - ANL and ORL were added in the first half of 1959 (M-5001-6). + ANL and ORL were added in May 1959, along with TRA (M-5001-6). + LLR and SLR were added a few months later (M-5001-7). + + A few derived OPRs not mentioned in M-5001-27 are documented in + the listing of the updated vocabulary table for the TRA-patched + version of UT3 and in a listing of "Macro ii-a=part 2" dated + 3-61 (though this also includes some OPRs which were probably + added after 1960). Mnemonics and relative timing of operate class micro-instructions after 1960 (as given in M-5001-27-3 and M-5001-27-4): @@ -77,6 +84,10 @@ 1.8 | 603000 (HLT) Halt computer Previously supported Input-Output Stop group codes were unchanged. + However, the old semantics of R1L cycling AC left after reading one + line are no longer obtainable because AMB now occurs before rather than + after IOS. Anticipation of this incompatibity (q.v. M-5001-16) is + likely why R1L is unlisted in M-5001-27. ***************************************************************************/ @@ -118,6 +129,8 @@ offs_t tx0_64kw_disassembler::disassemble(std::ostream &stream, offs_t pc, const { // Addressable instructions (only 3 in this version) util::stream_format(stream, "%s %06o", s_addressable_insts[(inst & 0600000) >> 13], inst & 0177777); + if (inst >= 0400000) // trn + return 1 | STEP_COND | SUPPORTED; } else dasm_opr(stream, inst); @@ -127,7 +140,7 @@ offs_t tx0_64kw_disassembler::disassemble(std::ostream &stream, offs_t pc, const void tx0_64kw_disassembler::dasm_opr(std::ostream &stream, u32 inst) { -switch (inst) + switch (inst) { case 0600012: stream << "cry"; @@ -153,10 +166,18 @@ switch (inst) stream << "amz"; break; + case 0600072: + stream << "lcd"; + break; + case 0600100: stream << "pen"; break; + case 0600121: + stream << "cpa"; + break; + case 0600200: stream << "lro"; break; @@ -193,6 +214,10 @@ switch (inst) stream << "dsc"; break; + case 0622100: + stream << "dip"; + break; + case 0624000: stream << "prt"; break; @@ -241,6 +266,10 @@ switch (inst) stream << "tac"; break; + case 0740012: + stream << "lal"; + break; + case 0740022: stream << "lac"; break; @@ -257,6 +286,10 @@ switch (inst) stream << "lcc"; break; + case 0740072: + stream << "laz"; + break; + case 0740200: stream << "cal"; break; @@ -282,10 +315,7 @@ switch (inst) break; default: - if (inst >= 0760000) - util::stream_format(stream, "ios %o", inst & 017777); - else - util::stream_format(stream, "opr %o", inst & 0177777); + util::stream_format(stream, "opr %o", inst & 0177777); break; } } @@ -301,6 +331,8 @@ offs_t tx0_8kwo_disassembler::disassemble(std::ostream &stream, offs_t pc, const util::stream_format(stream, "%06o", inst); else util::stream_format(stream, "%s %05o", s_addressable_insts[(inst & 0700000) >> 13], inst & 017777); + if ((inst & 0700000) == 0400000) // trn + return 1 | STEP_COND | SUPPORTED; } else switch (inst) { @@ -346,10 +378,15 @@ offs_t tx0_8kw_disassembler::disassemble(std::ostream &stream, offs_t pc, const { util::stream_format(stream, "%s %05o", str, inst & 017777); - if ((inst & 0760000) == 0440000) // tsx - return 1 | STEP_OVER | SUPPORTED; - else if ((inst & 0760000) == 0520000) // trx - return 1 | STEP_OUT | SUPPORTED; + if (inst >= 0400000) + { + if ((inst & 0760000) == 0440000) // tsx + return 1 | STEP_OVER | SUPPORTED; + else if ((inst & 0760000) == 0520000) // trx + return 1 | STEP_OUT | SUPPORTED; + else if ((inst & 0760000) != 0500000) // trn, tze, tix, tlv + return 1 | STEP_COND | SUPPORTED; + } } } else if ((inst & 037000) == 004000) @@ -730,7 +767,7 @@ offs_t tx0_8kw_disassembler::disassemble(std::ostream &stream, offs_t pc, const stream << "arx"; break; - case 0100000: case 0140000: + case 0100000: stream << "cla"; break; @@ -742,7 +779,7 @@ offs_t tx0_8kw_disassembler::disassemble(std::ostream &stream, offs_t pc, const stream << "lal"; break; - case 0100022: case 0140022: + case 0100022: stream << "lac"; break; @@ -750,7 +787,7 @@ offs_t tx0_8kw_disassembler::disassemble(std::ostream &stream, offs_t pc, const stream << "lacUlxr"; break; - case 0100040: case 0140040: + case 0100040: stream << "clc"; break; @@ -815,11 +852,11 @@ offs_t tx0_8kw_disassembler::disassemble(std::ostream &stream, offs_t pc, const break; case 0140065: - stream << "oraUcom"; // M-5001-19-1 names this 'orc' + stream << "orc"; // as in M-5001-19-1 break; case 0140067: - stream << "anaUcom"; // M-5001-19-1 names this 'anc' + stream << "anc"; // as in M-5001-19-1 break; case 0140205: |