summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/cpu/cops1/cops1d.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/cpu/cops1/cops1d.cpp')
-rw-r--r--src/devices/cpu/cops1/cops1d.cpp82
1 files changed, 47 insertions, 35 deletions
diff --git a/src/devices/cpu/cops1/cops1d.cpp b/src/devices/cpu/cops1/cops1d.cpp
index 60bab31a9f5..8ccdcf8ac08 100644
--- a/src/devices/cpu/cops1/cops1d.cpp
+++ b/src/devices/cpu/cops1/cops1d.cpp
@@ -32,6 +32,18 @@ offs_t cops1_common_disassembler::increment_pc(offs_t pc)
// common lookup tables
+enum cops1_common_disassembler::e_mnemonics : unsigned
+{
+ mILL,
+ mAD, mADD, mSUB, mCOMP, m0TA, mADX, mHXA, mTAM, mSC, mRSC, mTC,
+ mTIN, mTF, mTKB, mTIR,
+ mBTD, mDSPA, mDSPS, mAXO, mLDF, mREAD,
+ mGO, mCALL, mRET, mRETS, mLG, mLGCALL, mNOP,
+ mEXC, mEXCM, mEXCP, mMTA, mLM,
+ mSM1, mSM2, mSM4, mSM8, mRSM1, mRSM2, mRSM4, mRSM8, mTM,
+ mLB, mLBL, mATB, mBTA, mHXBR
+};
+
const char *const cops1_common_disassembler::s_name[] =
{
"?",
@@ -60,11 +72,11 @@ const u8 cops1_common_disassembler::s_bits[] =
const u32 cops1_common_disassembler::s_flags[] =
{
0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,
+ 0, STEP_COND, STEP_COND, 0, 0, STEP_COND, 0, STEP_COND, 0, 0, STEP_COND,
+ STEP_COND, STEP_COND, STEP_COND, STEP_COND,
0, 0, 0, 0, 0, 0,
0, STEP_OVER, STEP_OUT, STEP_OUT, 0, STEP_OVER, 0,
- 0, 0, 0, 0, 0,
+ 0, STEP_COND, STEP_COND, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0
};
@@ -96,7 +108,7 @@ offs_t cops1_common_disassembler::common_disasm(const u8 *lut_opmap, std::ostrea
u8 arg = params.r8(pc);
len++;
- if (instr == em_LG)
+ if (instr == mLG)
{
// bit 6 indicates GO or CALL
if (~arg & 0x40)
@@ -109,40 +121,40 @@ offs_t cops1_common_disassembler::common_disasm(const u8 *lut_opmap, std::ostrea
}
// disassemble it
- util::stream_format(stream, "%-8s ", s_name[instr]);
+ util::stream_format(stream, "%-8s", s_name[instr]);
if (mask > 0)
{
if (mask < 16)
{
// SM and RSM param is scrambled
- if (instr >= em_SM1 && instr <= em_SM8)
- param = instr - em_SM1;
- else if (instr >= em_RSM1 && instr <= em_RSM8)
- param = instr - em_RSM1;
+ if (instr >= mSM1 && instr <= mSM8)
+ param = instr - mSM1;
+ else if (instr >= mRSM1 && instr <= mRSM8)
+ param = instr - mRSM1;
// memory bit opcodes are 1,2,4,8
- if (instr >= em_SM1 && instr <= em_TM)
+ if (instr >= mSM1 && instr <= mTM)
param = 1 << param;
// TF is 1,2,3,4
- else if (instr == em_TF)
+ else if (instr == mTF)
param++;
// EXC type instructions omit param if it's 0
- if (!(param == 0 && (instr == em_EXC || instr == em_EXCM || instr == em_EXCP || instr == em_MTA)))
+ if (!(param == 0 && (instr == mEXC || instr == mEXCM || instr == mEXCP || instr == mMTA)))
util::stream_format(stream, "%d", param);
}
else
{
// exception for LG
- if (instr == em_LG || instr == em_LGCALL)
+ if (instr == mLG || instr == mLGCALL)
util::stream_format(stream, "$%02X,$%02X", param >> 6, param & 0x3f);
// exception for LB/LBL
- else if (instr == em_LB || instr == em_LBL)
+ else if (instr == mLB || instr == mLBL)
{
// LB x,10 is 0 by default
- if (instr == em_LB && (param & 0xf) == 10)
+ if (instr == mLB && (param & 0xf) == 10)
param &= 0x30;
util::stream_format(stream, "%d,%d", param >> 4, param & 0xf);
@@ -161,26 +173,26 @@ offs_t cops1_common_disassembler::common_disasm(const u8 *lut_opmap, std::ostrea
const u8 mm5799_disassembler::mm5799_opmap[0x100] =
{
-/* 0 1 2 3 4 5 6 7 8 9 A B C D E F */
- em_NOP, em_HXBR, em_ADD, em_SC, em_TF, em_TIR, em_MTA, em_EXC, em_EXCM, em_EXCP, em_LB, em_LB, em_LB, em_LB, em_LB, em_LB, // 0
- em_DSPA, em_DSPS, em_AD, em_LBL, em_TF, em_TKB, em_MTA, em_EXC, em_EXCM, em_EXCP, em_LB, em_LB, em_LB, em_LB, em_LB, em_LB, // 1
- em_COMP, em_AXO, em_SUB, em_RSC, em_TF, em_BTD, em_MTA, em_EXC, em_EXCM, em_EXCP, em_LB, em_LB, em_LB, em_LB, em_LB, em_LB, // 2
- em_0TA, em_HXA, em_TAM, em_LDF, em_READ, em_TIN, em_MTA, em_EXC, em_EXCM, em_EXCP, em_LB, em_LB, em_LB, em_LB, em_LB, em_LB, // 3
-
- em_RET, em_RETS, em_RSM8, em_BTA, em_TM, em_TM, em_TM, em_TM, em_RSM1, em_SM1, em_SM8, em_RSM4, em_RSM2, em_TC, em_SM2, em_SM4, // 4
- em_ATB, em_ADX, em_ADX, em_ADX, em_ADX, em_ADX, em_ADX, em_ADX, em_ADX, em_ADX, em_ADX, em_ADX, em_ADX, em_ADX, em_ADX, em_ADX, // 5
- em_LG, em_LG, em_LG, em_LG, em_LG, em_LG, em_LG, em_LG, em_LG, em_LG, em_LG, em_LG, em_LG, em_LG, em_LG, em_LG, // 6
- em_LM, em_LM, em_LM, em_LM, em_LM, em_LM, em_LM, em_LM, em_LM, em_LM, em_LM, em_LM, em_LM, em_LM, em_LM, em_LM, // 7
-
- em_CALL, em_CALL, em_CALL, em_CALL, em_CALL, em_CALL, em_CALL, em_CALL, em_CALL, em_CALL, em_CALL, em_CALL, em_CALL, em_CALL, em_CALL, em_CALL, // 8
- em_CALL, em_CALL, em_CALL, em_CALL, em_CALL, em_CALL, em_CALL, em_CALL, em_CALL, em_CALL, em_CALL, em_CALL, em_CALL, em_CALL, em_CALL, em_CALL, // 9
- em_CALL, em_CALL, em_CALL, em_CALL, em_CALL, em_CALL, em_CALL, em_CALL, em_CALL, em_CALL, em_CALL, em_CALL, em_CALL, em_CALL, em_CALL, em_CALL, // A
- em_CALL, em_CALL, em_CALL, em_CALL, em_CALL, em_CALL, em_CALL, em_CALL, em_CALL, em_CALL, em_CALL, em_CALL, em_CALL, em_CALL, em_CALL, em_CALL, // B
-
- em_GO, em_GO, em_GO, em_GO, em_GO, em_GO, em_GO, em_GO, em_GO, em_GO, em_GO, em_GO, em_GO, em_GO, em_GO, em_GO, // C
- em_GO, em_GO, em_GO, em_GO, em_GO, em_GO, em_GO, em_GO, em_GO, em_GO, em_GO, em_GO, em_GO, em_GO, em_GO, em_GO, // D
- em_GO, em_GO, em_GO, em_GO, em_GO, em_GO, em_GO, em_GO, em_GO, em_GO, em_GO, em_GO, em_GO, em_GO, em_GO, em_GO, // E
- em_GO, em_GO, em_GO, em_GO, em_GO, em_GO, em_GO, em_GO, em_GO, em_GO, em_GO, em_GO, em_GO, em_GO, em_GO, em_GO // F
+// 0 1 2 3 4 5 6 7 8 9 A B C D E F
+ mNOP, mHXBR, mADD, mSC, mTF, mTIR, mMTA, mEXC, mEXCM, mEXCP, mLB, mLB, mLB, mLB, mLB, mLB, // 0
+ mDSPA, mDSPS, mAD, mLBL, mTF, mTKB, mMTA, mEXC, mEXCM, mEXCP, mLB, mLB, mLB, mLB, mLB, mLB, // 1
+ mCOMP, mAXO, mSUB, mRSC, mTF, mBTD, mMTA, mEXC, mEXCM, mEXCP, mLB, mLB, mLB, mLB, mLB, mLB, // 2
+ m0TA, mHXA, mTAM, mLDF, mREAD, mTIN, mMTA, mEXC, mEXCM, mEXCP, mLB, mLB, mLB, mLB, mLB, mLB, // 3
+
+ mRET, mRETS, mRSM8, mBTA, mTM, mTM, mTM, mTM, mRSM1, mSM1, mSM8, mRSM4, mRSM2, mTC, mSM2, mSM4, // 4
+ mATB, mADX, mADX, mADX, mADX, mADX, mADX, mADX, mADX, mADX, mADX, mADX, mADX, mADX, mADX, mADX, // 5
+ mLG, mLG, mLG, mLG, mLG, mLG, mLG, mLG, mLG, mLG, mLG, mLG, mLG, mLG, mLG, mLG, // 6
+ mLM, mLM, mLM, mLM, mLM, mLM, mLM, mLM, mLM, mLM, mLM, mLM, mLM, mLM, mLM, mLM, // 7
+
+ mCALL, mCALL, mCALL, mCALL, mCALL, mCALL, mCALL, mCALL, mCALL, mCALL, mCALL, mCALL, mCALL, mCALL, mCALL, mCALL, // 8
+ mCALL, mCALL, mCALL, mCALL, mCALL, mCALL, mCALL, mCALL, mCALL, mCALL, mCALL, mCALL, mCALL, mCALL, mCALL, mCALL, // 9
+ mCALL, mCALL, mCALL, mCALL, mCALL, mCALL, mCALL, mCALL, mCALL, mCALL, mCALL, mCALL, mCALL, mCALL, mCALL, mCALL, // A
+ mCALL, mCALL, mCALL, mCALL, mCALL, mCALL, mCALL, mCALL, mCALL, mCALL, mCALL, mCALL, mCALL, mCALL, mCALL, mCALL, // B
+
+ mGO, mGO, mGO, mGO, mGO, mGO, mGO, mGO, mGO, mGO, mGO, mGO, mGO, mGO, mGO, mGO, // C
+ mGO, mGO, mGO, mGO, mGO, mGO, mGO, mGO, mGO, mGO, mGO, mGO, mGO, mGO, mGO, mGO, // D
+ mGO, mGO, mGO, mGO, mGO, mGO, mGO, mGO, mGO, mGO, mGO, mGO, mGO, mGO, mGO, mGO, // E
+ mGO, mGO, mGO, mGO, mGO, mGO, mGO, mGO, mGO, mGO, mGO, mGO, mGO, mGO, mGO, mGO // F
};
offs_t mm5799_disassembler::disassemble(std::ostream &stream, offs_t pc, const data_buffer &opcodes, const data_buffer &params)