diff options
| author | 2016-04-11 21:45:07 +0200 | |
|---|---|---|
| committer | 2016-04-11 21:45:26 +0200 | |
| commit | bac87f62fa4bb838f0dadaf1db115fce21bcc388 (patch) | |
| tree | 6d7dac8e06ff608a9c4745914e3d2be6b9eb713e | |
| parent | 5f05b2d39e04310821b7bb56681c990b875c0426 (diff) | |
sm510: added KB1013VK1-2 disasm
| -rw-r--r-- | src/devices/cpu/sm510/kb1013vk1-2.h | 3 | ||||
| -rw-r--r-- | src/devices/cpu/sm510/kb1013vk1-2core.cpp | 94 | ||||
| -rw-r--r-- | src/devices/cpu/sm510/kb1013vk1-2op.cpp | 12 | ||||
| -rw-r--r-- | src/devices/cpu/sm510/sm510d.cpp | 70 | ||||
| -rw-r--r-- | src/tools/unidasm.cpp | 2 |
5 files changed, 135 insertions, 46 deletions
diff --git a/src/devices/cpu/sm510/kb1013vk1-2.h b/src/devices/cpu/sm510/kb1013vk1-2.h index bc436fb1e9b..7e8c739354d 100644 --- a/src/devices/cpu/sm510/kb1013vk1-2.h +++ b/src/devices/cpu/sm510/kb1013vk1-2.h @@ -26,9 +26,12 @@ public: kb1013vk12_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); protected: + virtual offs_t disasm_disassemble(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram, UINT32 options) override; virtual void execute_one() override; // opcode handlers + virtual void op_bs0(); + virtual void op_bs1(); }; diff --git a/src/devices/cpu/sm510/kb1013vk1-2core.cpp b/src/devices/cpu/sm510/kb1013vk1-2core.cpp index 8c65b908a9f..1aa40b87cdb 100644 --- a/src/devices/cpu/sm510/kb1013vk1-2core.cpp +++ b/src/devices/cpu/sm510/kb1013vk1-2core.cpp @@ -33,6 +33,14 @@ kb1013vk12_device::kb1013vk12_device(const machine_config &mconfig, const char * { } +// disasm +offs_t kb1013vk12_device::disasm_disassemble(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram, UINT32 options) +{ + extern CPU_DISASSEMBLE(kb1013vk12); + return CPU_DISASSEMBLE_NAME(kb1013vk12)(this, buffer, pc, oprom, opram, options); +} + + //------------------------------------------------- // execute @@ -42,75 +50,75 @@ void kb1013vk12_device::execute_one() { switch (m_op & 0xf0) { - case 0x20: op_lax(); break; - case 0x30: op_adx(); break; - case 0x40: op_lb(); break; - case 0x70: op_ssr(); break; + case 0x20: op_lax(); break; // LC + case 0x30: op_adx(); break; // AS/A10 + case 0x40: op_lb(); break; // LAS + case 0x70: op_ssr(); break; // LP case 0x80: case 0x90: case 0xa0: case 0xb0: - op_t(); break; + op_t(); break; // BR (LP+this=JMP) case 0xc0: case 0xd0: case 0xe0: case 0xf0: - op_trs(); break; + op_trs(); break; // CBR/CZP (LP+this=CAL) default: switch (m_op & 0xfc) { - case 0x04: op_rm(); break; - case 0x0c: op_sm(); break; - case 0x10: op_exc(); break; - case 0x14: op_exci(); break; - case 0x18: op_lda(); break; - case 0x1c: op_excd(); break; - case 0x54: op_tmi(); break; + case 0x04: op_rm(); break; // BM0 + case 0x0c: op_sm(); break; // BM1 + case 0x10: op_exc(); break; // XM/XE + case 0x14: op_exci(); break; // XI/XEI + case 0x18: op_lda(); break; // LE + case 0x1c: op_excd(); break; // XD/XED + case 0x54: op_tmi(); break; // SM1 default: switch (m_op) { - case 0x00: op_skip(); break; - case 0x01: op_atr(); break; - case 0x02: op_exksa(); break; + case 0x00: op_skip(); break; // NOP + case 0x01: op_atr(); break; // OAR + case 0x02: op_bs1(); break; // *BS1 case 0x03: op_atbp(); break; - case 0x08: op_add(); break; - case 0x09: op_add11(); break; - case 0x0a: op_coma(); break; - case 0x0b: op_exbla(); break; - - case 0x50: op_tal(); break; - case 0x51: op_tb(); break; - case 0x52: op_tc(); break; - case 0x53: op_tam(); break; - case 0x58: op_tis(); break; + case 0x08: op_add(); break; // AM + case 0x09: op_add11(); break; // AC + case 0x0a: op_coma(); break; // COM + case 0x0b: op_exbla(); break; // XL + + case 0x50: op_tal(); break; // SI1 + case 0x51: op_tb(); break; // SI0 + case 0x52: op_tc(); break; // SCO + case 0x53: op_tam(); break; // SAM + case 0x58: op_tis(); break; // TIM case 0x59: op_ptw(); break; - case 0x5a: op_ta0(); break; - case 0x5b: op_tabl(); break; + case 0x5a: op_ta0(); break; // SAO + case 0x5b: op_tabl(); break; // SAL case 0x5c: op_tw(); break; case 0x5d: op_dtw(); break; - case 0x5f: op_lbl(); break; + case 0x5f: op_lbl(); break; // LAF case 0x60: op_comcn(); break; case 0x61: op_pdtw(); break; case 0x62: op_wr(); break; case 0x63: op_ws(); break; - case 0x64: op_incb(); break; - case 0x65: op_idiv(); break; - case 0x66: op_rc(); break; - case 0x67: op_sc(); break; - case 0x68: op_rmf(); break; - case 0x69: op_smf(); break; - case 0x6a: op_kta(); break; - case 0x6b: op_exkfa(); break; - case 0x6c: op_decb(); break; - case 0x6d: op_comcb(); break; - case 0x6e: op_rtn0(); break; - case 0x6f: op_rtn1(); break; + case 0x64: op_incb(); break; // INC + case 0x65: op_idiv(); break; // SYN + case 0x66: op_rc(); break; // CLC + case 0x67: op_sc(); break; // STC + case 0x68: op_rmf(); break; // CLL + case 0x69: op_smf(); break; // LD0 + case 0x6a: op_kta(); break; // ICD + case 0x6b: op_bs0(); break; // *BS0 + case 0x6c: op_decb(); break; // DEC + case 0x6d: op_comcb(); break; // CMS + case 0x6e: op_rtn0(); break; // RT + case 0x6f: op_rtn1(); break; // RTS // extended opcodes case 0x5e: m_op = m_op << 8 | m_param; switch (m_param) { - case 0x00: op_cend(); break; - case 0x04: op_dta(); break; + case 0x00: op_cend(); break; // HLT + case 0x04: op_dta(); break; // LDF default: op_illegal(); break; } diff --git a/src/devices/cpu/sm510/kb1013vk1-2op.cpp b/src/devices/cpu/sm510/kb1013vk1-2op.cpp index 8d05aacb45f..3c5fcc548e7 100644 --- a/src/devices/cpu/sm510/kb1013vk1-2op.cpp +++ b/src/devices/cpu/sm510/kb1013vk1-2op.cpp @@ -7,3 +7,15 @@ // instruction set + +void kb1013vk12_device::op_bs0() +{ + // BS0: reset RAM address high bit + m_bm &= ~4; +} + +void kb1013vk12_device::op_bs1() +{ + // BS1: set RAM address high bit + m_bm |= 4; +} diff --git a/src/devices/cpu/sm510/sm510d.cpp b/src/devices/cpu/sm510/sm510d.cpp index 81ede8e5cf4..7c78c33b318 100644 --- a/src/devices/cpu/sm510/sm510d.cpp +++ b/src/devices/cpu/sm510/sm510d.cpp @@ -32,9 +32,13 @@ enum e_mnemonics mADDC, mPDTW, mTW, mDTW, mATS, mEXKSA, mEXKFA, mRMF, mSMF, mCOMCN, - mTA, mTM2, mTG + mTA, mTM2, mTG, // KB1013VK1-2 aliases + mLC, mLM, mLE, mLAF, mLAS, mLDF, mBS0, mBS1, mXL, mXM, mXI, mXEI, mXD, mXED, mXE, mBM0, mBM1, mSM1, + mAM, mAC, mA10, mAS, mCLL, mCOM, mCLC, mSTC, mSCO, mSAO, mINC, mDEC, mSAM, mSAL, mNOP, + mICD, mOAR, mOA0, mOA1, mDAF, mDAS, mABS, mABF, mCTB, mLD0, mEN, + mBR, mLP, mCBR, mCMS, mRT, mRTS, mSI1, mSI0, mSYN, mTIM, mHLT }; static const char *const s_mnemonics[] = @@ -56,6 +60,12 @@ static const char *const s_mnemonics[] = "ATS", "EXKSA", "EXKFA", "RMF", "SMF", "COMCN", "TA", "TM", "TG" + + // + "LC", "LM", "LE", "LAF", "LAS", "LDF", "BS0", "BS1", "XL", "XM", "XI", "XEI", "XD", "XED", "XE", "BM0", "BM1", "SM1", + "AM", "AC", "A10", "AS", "CLL", "COM", "CLC", "STC", "SCO", "SAO", "INC", "DEC", "SAM", "SAL", "NOP", + "ICD", "OAR", "OA0", "OA1", "DAF", "DAS", "ABS", "ABF", "CTB", "LD0", "EN", + "BR", "LP", "CBR", "CMS", "RT", "RTS", "SI1", "SI0", "SYN", "TIM", "HLT" }; // number of bits per opcode parameter, 8 or larger means 2-byte opcode @@ -77,7 +87,13 @@ static const UINT8 s_bits[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 2, 0 + 0, 2, 0, + + // + 4, 0, 2, 8, 4, 0, 0, 0, 0, 0, 0, 2, 0, 2, 2, 2, 2, 2, + 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 6, 4, 6, 0, 0, 0, 0, 0, 0, 0, 0 }; #define _OVER DASMFLAG_STEP_OVER @@ -101,7 +117,13 @@ static const UINT32 s_flags[] = 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, + 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, _OVER, 0, _OUT, _OUT, 0, 0, 0, 0, _OVER }; // next program counter in sequence (relative) @@ -286,3 +308,45 @@ CPU_DISASSEMBLE(sm500) return sm510_common_disasm(sm500_mnemonic, ext, buffer, pc, oprom, opram); } + + +// KB1013VK1-2 disasm + +static const UINT8 kb1013vk12_mnemonic[0x100] = +{ +/* 0 1 2 3 4 5 6 7 8 9 A B C D E F */ + mNOP, mOAR, mBS1, mEN, mBM0, mBM0, mBM0, mBM0, mAM, mAC, mCOM, mXL, mBM1, mBM1, mBM1, mBM1, // 0 + mXM, mXE, mXE, mXE, mXI, mXEI, mXEI, mXEI, mLE, mLE, mLE, mLDA, mXD, mXED, mXED, mXED, // 1 + mLC, mLC, mLC, mLC, mLC, mLC, mLC, mLC, mLC, mLC, mLC, mLC, mLC, mLC, mLC, mLC, // 2 + mAS, mAS, mAS, mAS, mAS, mAS, mAS, mAS, mAS, mAS, mA10, mAS, mAS, mAS, mAS, mAS, // 3 + + mLAS, mLAS, mLAS, mLAS, mLAS, mLAS, mLAS, mLAS, mLAS, mLAS, mLAS, mLAS, mLAS, mLAS, mLAS, mLAS, // 4 + mSI1, mSI0, mSCO, mSAM, mSM1, mSM1, mSM1, mSM1, mTIM, mABS, mSAO, mSAL, mABF, mDAF, mEXT, mLAF, // 5 + mCTB, mDAS, mOA1, mOA0, mINC, mSYN, mCLC, mSTC, mCLL, mLD0, mICD, mBS0, mDEC, mCMS, mRT, mRTS, // 6 + mLP, mLP, mLP, mLP, mLP, mLP, mLP, mLP, mLP, mLP, mLP, mLP, mLP, mLP, mLP, mLP, // 7 + + mBR, mBR, mBR, mBR, mBR, mBR, mBR, mBR, mBR, mBR, mBR, mBR, mBR, mBR, mBR, mBR, // 8 + mBR, mBR, mBR, mBR, mBR, mBR, mBR, mBR, mBR, mBR, mBR, mBR, mBR, mBR, mBR, mBR, // 9 + mBR, mBR, mBR, mBR, mBR, mBR, mBR, mBR, mBR, mBR, mBR, mBR, mBR, mBR, mBR, mBR, // A + mBR, mBR, mBR, mBR, mBR, mBR, mBR, mBR, mBR, mBR, mBR, mBR, mBR, mBR, mBR, mBR, // B + + mCBR, mCBR, mCBR, mCBR, mCBR, mCBR, mCBR, mCBR, mCBR, mCBR, mCBR, mCBR, mCBR, mCBR, mCBR, mCBR, // C + mCBR, mCBR, mCBR, mCBR, mCBR, mCBR, mCBR, mCBR, mCBR, mCBR, mCBR, mCBR, mCBR, mCBR, mCBR, mCBR, // D + mCBR, mCBR, mCBR, mCBR, mCBR, mCBR, mCBR, mCBR, mCBR, mCBR, mCBR, mCBR, mCBR, mCBR, mCBR, mCBR, // E + mCBR, mCBR, mCBR, mCBR, mCBR, mCBR, mCBR, mCBR, mCBR, mCBR, mCBR, mCBR, mCBR, mCBR, mCBR, mCBR // F +}; + +static const UINT8 kb1013vk12_extended[0x10] = +{ + mHLT, 0, 0, 0, mLDF, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 // 5E 0 +}; + +CPU_DISASSEMBLE(kb1013vk12) +{ + // create extended opcode table + UINT8 ext[0x100]; + memset(ext, 0, 0x100); + memcpy(ext + 0x00, kb1013vk12_extended, 0x10); + + return sm510_common_disasm(kb1013vk12_mnemonic, ext, buffer, pc, oprom, opram); +} diff --git a/src/tools/unidasm.cpp b/src/tools/unidasm.cpp index 05f622aa45a..e70f1fc13ac 100644 --- a/src/tools/unidasm.cpp +++ b/src/tools/unidasm.cpp @@ -110,6 +110,7 @@ CPU_DISASSEMBLE( i960 ); CPU_DISASSEMBLE( ie15 ); CPU_DISASSEMBLE( jaguardsp ); CPU_DISASSEMBLE( jaguargpu ); +CPU_DISASSEMBLE( kb1013vk12 ); CPU_DISASSEMBLE( konami ); CPU_DISASSEMBLE( lh5801 ); CPU_DISASSEMBLE( lr35902 ); @@ -266,6 +267,7 @@ static const dasm_table_entry dasm_table[] = { "ie15", _8bit, 0, CPU_DISASSEMBLE_NAME(ie15) }, { "jaguardsp", _16be, 0, CPU_DISASSEMBLE_NAME(jaguardsp) }, { "jaguargpu", _16be, 0, CPU_DISASSEMBLE_NAME(jaguargpu) }, + { "kb1013vk12", _8bit, 0, CPU_DISASSEMBLE_NAME(kb1013vk12) }, { "konami", _8bit, 0, CPU_DISASSEMBLE_NAME(konami) }, { "lh5801", _8bit, 0, CPU_DISASSEMBLE_NAME(lh5801) }, { "lr35902", _8bit, 0, CPU_DISASSEMBLE_NAME(lr35902) }, |
