diff options
Diffstat (limited to 'src/devices/cpu/sm510/sm510d.cpp')
-rw-r--r-- | src/devices/cpu/sm510/sm510d.cpp | 75 |
1 files changed, 52 insertions, 23 deletions
diff --git a/src/devices/cpu/sm510/sm510d.cpp b/src/devices/cpu/sm510/sm510d.cpp index 0d1ff7924f4..5a4bbc8fc8f 100644 --- a/src/devices/cpu/sm510/sm510d.cpp +++ b/src/devices/cpu/sm510/sm510d.cpp @@ -46,6 +46,38 @@ offs_t sm510_common_disassembler::increment_pc(offs_t pc, u8 pclen) // common lookup tables +enum sm510_common_disassembler::e_mnemonics : unsigned +{ + // SM510 common + mILL /* 0! */, mEXT, + mLB, mLBL, mSBM, mEXBLA, mINCB, mDECB, + mATPL, mRTN0, mRTN1, mTL, mTML, mTM, mT, + mEXC, mBDC, mEXCI, mEXCD, mLDA, mLAX, mPTW, mWR, mWS, + mKTA, mATBP, mATX, mATL, mATFC, mATR, + mADD, mADD11, mADX, mCOMA, mROT, mRC, mSC, + mTB, mTC, mTAM, mTMI, mTA0, mTABL, mTIS, mTAL, mTF1, mTF4, + mRM, mSM, + mPRE, mSME, mRME, mTMEL, + mSKIP, mCEND, mIDIV, mDR, mDTA, mCLKLO, mCLKHI, + + // SM500 common + mCOMCB, mRTN, mRTNS, mSSR, mTR, mTRS, mRBM, + mADDC, mPDTW, mTW, mDTW, + mATS, mEXKSA, mEXKFA, + mRMF, mSMF, mCOMCN, + mTA, mTM2, mTG, + + // SM530 common + mSABM, mSABL, mEXBL, + mTG2, mTBA, + mKETA, mATF, mSDS, mRDS, + mINIS, + + // SM590 common + mTAX, mLBLX, mMTR, mSTR, mINBM, mDEBM, mRTA, mBLTA, mEXAX, mTBA2, mADS, mADC, mLBMX, mTLS, + mNOP, mCCTRL, mINBL, mDEBL, mXBLA, mADCS, mTR7 // aliases +}; + const char *const sm510_common_disassembler::s_mnemonics[] = { // SM510 @@ -74,9 +106,8 @@ const char *const sm510_common_disassembler::s_mnemonics[] = "INIS", // SM590 - "NOP", "CCTRL", "INBL", "DEBL", "XBLA", "ADCS", "TR", - // " - "TAX", "LBLX", "MTR", "STR", "INBM", "DEBM", "RTA", "BLTA", "EXAX", "TBA", "ADS", "ADC", "LBMX", "TLS" + "TAX", "LBLX", "MTR", "STR", "INBM", "DEBM", "RTA", "BLTA", "EXAX", "TBA", "ADS", "ADC", "LBMX", "TLS", + "NOP", "CCTRL", "INBL", "DEBL", "XBLA", "ADCS", "TR" }; // number of bits per opcode parameter, 8 or larger means 2-byte opcode @@ -108,42 +139,40 @@ const u8 sm510_common_disassembler::s_bits[] = 0, // SM590 - 0, 0, 0, 0, 0, 0, 7, - // " - 4, 4, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 2, 2+8 + 4, 4, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 2, 2+8, + 0, 0, 0, 0, 0, 0, 7 }; const u32 sm510_common_disassembler::s_flags[] = { // SM510 0, 0, - 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, STEP_COND, STEP_COND, 0, STEP_OUT, STEP_OUT, 0, STEP_OVER, STEP_OVER, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, STEP_COND, STEP_COND, 0, 0, 0, 0, + STEP_COND, STEP_COND, STEP_COND, STEP_COND, STEP_COND, STEP_COND, STEP_COND, STEP_COND, STEP_COND, STEP_COND, 0, 0, 0, 0, 0, 0, 0, STEP_OVER, 0, 0, 0, 0, 0, // SM500 0, STEP_OUT, STEP_OUT, 0, 0, STEP_OVER, 0, - 0, 0, 0, 0, - 0, 0, 0, + STEP_COND, 0, 0, 0, 0, 0, 0, 0, 0, 0, + STEP_COND, STEP_COND, STEP_COND, // SM530 0, 0, 0, - 0, 0, + STEP_COND, STEP_COND, 0, 0, 0, 0, 0, // SM590 - 0, 0, 0, 0, 0, 0, STEP_OVER, - // " - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, STEP_OVER + STEP_COND, 0, 0, 0, 0, 0, 0, 0, 0, STEP_COND, 0, 0, 0, STEP_OVER, + 0, 0, 0, 0, 0, 0, STEP_OVER }; @@ -172,7 +201,7 @@ offs_t sm510_common_disassembler::common_disasm(const u8 *lut_mnemonic, const u8 instr = lut_extended[param]; // disassemble it - util::stream_format(stream, "%-6s ", s_mnemonics[instr]); + util::stream_format(stream, "%-8s", s_mnemonics[instr]); if (bits > 0) { if (bits <= 4) @@ -202,7 +231,7 @@ offs_t sm510_common_disassembler::common_disasm(const u8 *lut_mnemonic, const u8 const u8 sm510_disassembler::sm510_mnemonic[0x100] = { -/* 0 1 2 3 4 5 6 7 8 9 A B C D E F */ +// 0 1 2 3 4 5 6 7 8 9 A B C D E F mSKIP, mATBP, mSBM, mATPL, mRM, mRM, mRM, mRM, mADD, mADD11,mCOMA, mEXBLA,mSM, mSM, mSM, mSM, // 0 mEXC, mEXC, mEXC, mEXC, mEXCI, mEXCI, mEXCI, mEXCI, mLDA, mLDA, mLDA, mLDA, mEXCD, mEXCD, mEXCD, mEXCD, // 1 mLAX, mLAX, mLAX, mLAX, mLAX, mLAX, mLAX, mLAX, mLAX, mLAX, mLAX, mLAX, mLAX, mLAX, mLAX, mLAX, // 2 @@ -234,7 +263,7 @@ offs_t sm510_disassembler::disassemble(std::ostream &stream, offs_t pc, const da const u8 sm511_disassembler::sm511_mnemonic[0x100] = { -/* 0 1 2 3 4 5 6 7 8 9 A B C D E F */ +// 0 1 2 3 4 5 6 7 8 9 A B C D E F mROT, mDTA, mSBM, mATPL, mRM, mRM, mRM, mRM, mADD, mADD11,mCOMA, mEXBLA,mSM, mSM, mSM, mSM, // 0 mEXC, mEXC, mEXC, mEXC, mEXCI, mEXCI, mEXCI, mEXCI, mLDA, mLDA, mLDA, mLDA, mEXCD, mEXCD, mEXCD, mEXCD, // 1 mLAX, mLAX, mLAX, mLAX, mLAX, mLAX, mLAX, mLAX, mLAX, mLAX, mLAX, mLAX, mLAX, mLAX, mLAX, mLAX, // 2 @@ -276,7 +305,7 @@ offs_t sm511_disassembler::disassemble(std::ostream &stream, offs_t pc, const da const u8 sm500_disassembler::sm500_mnemonic[0x100] = { -/* 0 1 2 3 4 5 6 7 8 9 A B C D E F */ +// 0 1 2 3 4 5 6 7 8 9 A B C D E F mSKIP, mATR, mEXKSA,mATBP, mRM, mRM, mRM, mRM, mADD, mADDC, mCOMA, mEXBLA,mSM, mSM, mSM, mSM, // 0 mEXC, mEXC, mEXC, mEXC, mEXCI, mEXCI, mEXCI, mEXCI, mLDA, mLDA, mLDA, mLDA, mEXCD, mEXCD, mEXCD, mEXCD, // 1 mLAX, mLAX, mLAX, mLAX, mLAX, mLAX, mLAX, mLAX, mLAX, mLAX, mLAX, mLAX, mLAX, mLAX, mLAX, mLAX, // 2 @@ -318,7 +347,7 @@ offs_t sm500_disassembler::disassemble(std::ostream &stream, offs_t pc, const da const u8 sm5a_disassembler::sm5a_mnemonic[0x100] = { -/* 0 1 2 3 4 5 6 7 8 9 A B C D E F */ +// 0 1 2 3 4 5 6 7 8 9 A B C D E F mSKIP, mATR, mSBM, mATBP, mRM, mRM, mRM, mRM, mADD, mADDC, mCOMA, mEXBLA,mSM, mSM, mSM, mSM, // 0 mEXC, mEXC, mEXC, mEXC, mEXCI, mEXCI, mEXCI, mEXCI, mLDA, mLDA, mLDA, mLDA, mEXCD, mEXCD, mEXCD, mEXCD, // 1 mLAX, mLAX, mLAX, mLAX, mLAX, mLAX, mLAX, mLAX, mLAX, mLAX, mLAX, mLAX, mLAX, mLAX, mLAX, mLAX, // 2 @@ -360,8 +389,8 @@ offs_t sm5a_disassembler::disassemble(std::ostream &stream, offs_t pc, const dat const u8 sm530_disassembler::sm530_mnemonic[0x100] = { -/* 0 1 2 3 4 5 6 7 8 9 A B C D E F */ - mADX, mADX, mADX, mADX, mADX, mADX, mADX, mADX, mADX, mADX, mADX, mADX, mADX, mADX, mADX, mADX, // 0 - note: $00 has synonym SKIP +// 0 1 2 3 4 5 6 7 8 9 A B C D E F + mSKIP, mADX, mADX, mADX, mADX, mADX, mADX, mADX, mADX, mADX, mADX, mADX, mADX, mADX, mADX, mADX, // 0 mLAX, mLAX, mLAX, mLAX, mLAX, mLAX, mLAX, mLAX, mLAX, mLAX, mLAX, mLAX, mLAX, mLAX, mLAX, mLAX, // 1 mLDA, mLDA, mLDA, mLDA, mEXC, mEXC, mEXC, mEXC, mEXCI, mEXCI, mEXCI, mEXCI, mEXCD, mEXCD, mEXCD, mEXCD, // 2 mLB, mLB, mLB, mLB, mLB, mLB, mLB, mLB, mLB, mLB, mLB, mLB, mLB, mLB, mLB, mLB, // 3 @@ -392,7 +421,7 @@ offs_t sm530_disassembler::disassemble(std::ostream &stream, offs_t pc, const da const u8 sm590_disassembler::sm590_mnemonic[0x100] = { -/* 0 1 2 3 4 5 6 7 8 9 A B C D E F */ +// 0 1 2 3 4 5 6 7 8 9 A B C D E F mNOP, mADX, mADX, mADX, mADX, mADX, mADX, mADX, mADX, mADX, mADX, mADX, mADX, mADX, mADX, mADX, // 0 mTAX, mTAX, mTAX, mTAX, mTAX, mTAX, mTAX, mTAX, mTAX, mTAX, mTAX, mTAX, mTAX, mTAX, mTAX, mTAX, // 1 mLBLX, mLBLX, mLBLX, mLBLX, mLBLX, mLBLX, mLBLX, mLBLX, mLBLX, mLBLX, mLBLX, mLBLX, mLBLX, mLBLX, mLBLX, mLBLX, // 2 |