Previous 199869 Revisions Next

r34911 Saturday 7th February, 2015 at 15:50:19 UTC by hap
ucom4 disassembler
[src/emu/cpu/amis2000]amis2000d.c
[src/emu/cpu/ucom4]ucom4.c ucom4.h ucom4d.c

trunk/src/emu/cpu/amis2000/amis2000d.c
r243422r243423
3131   "INP", "OUT", "DISB", "DISN", "MVS", "PSH", "PSL", "EUR"
3232};
3333
34// number of bits per opcode parameter, negative indicates complement
35static const INT8 s_bits[] =
36{
37   0, 0, 4, 2, 2, 2, 2, 0, 0, 0,
38   -2, -2, -2, -2, 2, 2,
39   0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,
40   0, 2, 0, 0, 0, 0, 0, 0, 0,
41   -4, 6, 6, 0, 0, 0, 0,
42   0, 0, 0, 0, 0, 0, 0, 0
43};
3444
3545#define _OVER DASMFLAG_STEP_OVER
3646#define _OUT  DASMFLAG_STEP_OUT
r243422r243423
4656};
4757
4858
49static const int s_bits[] =
50{
51   0, 0, 4, 2, 2, 2, 2, 0, 0, 0,
52   -2, -2, -2, -2, 2, 2,
53   0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,
54   0, 2, 0, 0, 0, 0, 0, 0, 0,
55   -4, 6, 6, 0, 0, 0, 0,
56   0, 0, 0, 0, 0, 0, 0, 0
57};
58
59
6059static const UINT8 s2000_mnemonic[0x100] =
6160{
6261   /* 0x00 */
trunk/src/emu/cpu/ucom4/ucom4.c
r243422r243423
33/*
44
55  NEC uCOM-4 MCU family cores
6 
7  reference: 1981 NEC Microcomputers Catalog (later editions may have errors!)
8  also looked at asterick's JavaScript D553 emulator for verification, with permission
69
710*/
811
r243422r243423
5861{
5962   switch (entry.index())
6063   {
64      // obviously not from a single flags register
6165      case STATE_GENFLAGS:
62         string.printf("%c%c%c%c",
66         string.printf("%c%c%c%c%c",
6367            m_inte_f  ? 'E':'e',
6468            m_int_f   ? 'I':'i',
6569            m_timer_f ? 'T':'t',
70            m_carry_s ? 'S':'s',
6671            m_carry_f ? 'C':'c'
6772         );
6873         break;
r243422r243423
118123   m_dpl = 0;
119124   m_dph = 0;
120125   m_carry_f = 0;
126   m_carry_s = 0;
121127   m_timer_f = 0;
122128   m_int_f = 0;
123129   m_inte_f = 0;
r243422r243423
131137   save_item(NAME(m_dpl));
132138   save_item(NAME(m_dph));
133139   save_item(NAME(m_carry_f));
140   save_item(NAME(m_carry_s));
134141   save_item(NAME(m_timer_f));
135142   save_item(NAME(m_int_f));
136143   save_item(NAME(m_inte_f));
r243422r243423
142149   state_add(UCOM4_ACC, "ACC", m_acc).formatstr("%01X");
143150
144151   state_add(STATE_GENPC, "curpc", m_pc).formatstr("%04X").noshow();
145   state_add(STATE_GENFLAGS, "GENFLAGS", m_carry_f).formatstr("%4s").noshow(); // dummy
152   state_add(STATE_GENFLAGS, "GENFLAGS", m_carry_f).formatstr("%5s").noshow(); // dummy
146153
147154   m_icountptr = &m_icount;
148155}
r243422r243423
155162
156163void ucom4_cpu_device::device_reset()
157164{
165   m_inte_f = 1;
158166   m_pc = 0;
159167   m_op = 0;
160168}
trunk/src/emu/cpu/ucom4/ucom4.h
r243422r243423
125125   UINT8 m_dpl;        // 4-bit data pointer low (RAM x)
126126   UINT8 m_dph;        // 1/2/3-bit data pointer high (RAM y)
127127   UINT8 m_carry_f;    // carry flag
128   UINT8 m_carry_s;    // carry save
128129   UINT8 m_timer_f;    // timer out flag
129130   UINT8 m_int_f;      // interrupt flag
130131   UINT8 m_inte_f;     // interrupt enable flag
trunk/src/emu/cpu/ucom4/ucom4d.c
r243422r243423
1111#include "ucom4.h"
1212
1313
14enum e_mnemonics
15{
16   mLI, mL, mLM, mLDI, mLDZ, mS, mTAL, mTLA,
17   mX, mXI, mXD, mXM, mXMI, mXMD, mAD, mADC, mADS, mDAA, mDAS,
18   mEXL, mCLA, mCMA, mCIA, mCLC, mSTC, mTC, mINC, mDEC, mIND, mDED,
19   mRMB, mSMB, mREB, mSEB, mRPB, mSPB, mJMP, mJCP, mJPA, mCAL, mCZP, mRT, mRTS,
20   mCI, mCM, mCMB, mTAB, mCLI, mTMB, mTPA, mTPB,
21   mTIT, mIA, mIP, mOE, mOP, mOCD, mNOP,
22   mILL,
23   mTAW, mTAZ, mTHX, mTLY, mXAW, mXAZ, mXHR, mXHX, mXLS, mXLY, mXC,
24   mSFB, mRFB, mFBT, mFBF, mRAR, mINM, mDEM, mSTM, mTTM, mEI, mDI
25};
26
27static const char *const s_mnemonics[] =
28{
29   "LI", "L", "LM", "LDI", "LDZ", "S", "TAL", "TLA",
30   "X", "XI", "XD", "XM", "XMI", "XMD", "AD", "ADC", "ADS", "DAA", "DAS",
31   "EXL", "CLA", "CMA", "CIA", "CLC", "STC", "TC", "INC", "DEC", "IND", "DED",
32   "RMB", "SMB", "REB", "SEB", "RPB", "SPB", "JMP", "JCP", "JPA", "CAL", "CZP", "RT", "RTS",
33   "CI", "CM", "CMB", "TAB", "CLI", "TMB", "TPA", "TPB",
34   "TIT", "IA", "IP", "OE", "OP", "OCD", "NOP",
35   "?",
36   "TAW", "TAZ", "THX", "TLY", "XAW", "XAZ", "XHR", "XHX", "XLS", "XLY", "XC",
37   "SFB", "RFB", "FBT", "FBF", "RAR", "INM", "DEM", "STM", "TTM", "EI", "DI"
38};
39
40// number of bits per opcode parameter, 2 digits means opcode is 2 bytes
41static const UINT8 s_bits[] =
42{
43   4, 0, 2, 80, 4, 0, 0, 0,
44   0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0,
45   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
46   2, 2, 2, 2, 2, 2, 83, 6, 0, 83, 4, 0, 0,
47   40, 0, 2, 2, 40, 2, 2, 2,
48   0, 0, 0, 0, 0, 80, 0,
49   0,
50   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
51   2, 2, 2, 2, 0, 0, 0, 80, 0, 0, 0
52};
53
54#define _OVER DASMFLAG_STEP_OVER
55#define _OUT  DASMFLAG_STEP_OUT
56
57static const UINT32 s_flags[] =
58{
59   0, 0, 0, 0, 0, 0, 0, 0,
60   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
61   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
62   0, 0, 0, 0, 0, 0, 0, 0, 0, _OVER, _OVER, _OUT, _OUT,
63   0, 0, 0, 0, 0, 0, 0, 0,
64   0, 0, 0, 0, 0, 0, 0,
65   0,
66   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
67   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
68};
69
70
71static const UINT8 ucom4_mnemonic[0x100] =
72{
73   /* 0x00 */
74   mNOP, mDI, mS, mTIT, mTC, mTTM, mDAA, mTAL,
75   mAD, mADS, mDAS, mCLC, mCM, mINC, mOP, mDEC,
76   mCMA, mCIA, mTLA, mDED, mSTM, mLDI, mCLI, mCI,
77   mEXL, mADC, mXC, mSTC, mILL, mINM, mOCD, mDEM,
78   /* 0x20 */
79   mFBF, mFBF, mFBF, mFBF, mTAB, mTAB, mTAB, mTAB,
80   mX, mXM, mXM, mXM, mXD, mXMD, mXMD, mXMD,
81   mRAR, mEI, mIP, mIND, mCMB, mCMB, mCMB, mCMB,
82   mL, mLM, mLM, mLM, mXI, mXMI, mXMI, mXMI,
83   /* 0x40 */
84   mIA, mJPA, mTAZ, mTAW, mOE, mILL, mTLY, mTHX,
85   mRT, mRTS, mXAZ, mXAW, mXLS, mXHR, mXLY, mXHX,
86   mTPB, mTPB, mTPB, mTPB, mTPA, mTPA, mTPA, mTPA,
87   mTMB, mTMB, mTMB, mTMB, mFBT, mFBT, mFBT, mFBT,
88   /* 0x60 */
89   mRPB, mRPB, mRPB, mRPB, mREB, mREB, mREB, mREB,
90   mRMB, mRMB, mRMB, mRMB, mRFB, mRFB, mRFB, mRFB,
91   mSPB, mSPB, mSPB, mSPB, mSEB, mSEB, mSEB, mSEB,
92   mSMB, mSMB, mSMB, mSMB, mSFB, mSFB, mSFB, mSFB,
93   /* 0x80 */
94   mLDZ, mLDZ, mLDZ, mLDZ, mLDZ, mLDZ, mLDZ, mLDZ,
95   mLDZ, mLDZ, mLDZ, mLDZ, mLDZ, mLDZ, mLDZ, mLDZ,
96   mCLA, mLI, mLI, mLI, mLI, mLI, mLI, mLI,
97   mLI, mLI, mLI, mLI, mLI, mLI, mLI, mLI,
98   /* 0xa0 */
99   mJMP, mJMP, mJMP, mJMP, mJMP, mJMP, mJMP, mJMP,
100   mCAL, mCAL, mCAL, mCAL, mCAL, mCAL, mCAL, mCAL,
101   mCZP, mCZP, mCZP, mCZP, mCZP, mCZP, mCZP, mCZP,
102   mCZP, mCZP, mCZP, mCZP, mCZP, mCZP, mCZP, mCZP,
103   /* 0xc0 */
104   mJCP, mJCP, mJCP, mJCP, mJCP, mJCP, mJCP, mJCP,
105   mJCP, mJCP, mJCP, mJCP, mJCP, mJCP, mJCP, mJCP,
106   mJCP, mJCP, mJCP, mJCP, mJCP, mJCP, mJCP, mJCP,
107   mJCP, mJCP, mJCP, mJCP, mJCP, mJCP, mJCP, mJCP,
108   mJCP, mJCP, mJCP, mJCP, mJCP, mJCP, mJCP, mJCP,
109   mJCP, mJCP, mJCP, mJCP, mJCP, mJCP, mJCP, mJCP,
110   mJCP, mJCP, mJCP, mJCP, mJCP, mJCP, mJCP, mJCP,
111   mJCP, mJCP, mJCP, mJCP, mJCP, mJCP, mJCP, mJCP
112};
113
114
115
14116CPU_DISASSEMBLE(ucom4)
15117{
16   int pos = 1;//0;
17//   UINT8 op = oprom[pos++];
18//   UINT8 instr = ucom4_mnemonic[op];
118   int pos = 0;
119   UINT8 op = oprom[pos++];
120   UINT8 instr = ucom4_mnemonic[op];
19121
20122   char *dst = buffer;
21   dst += sprintf(dst, "ABC");
123   dst += sprintf(dst, "%-4s ", s_mnemonics[instr]);
124   
125   // opcode parameter
126   int bits = s_bits[instr];
127   if (bits)
128   {
129      UINT16 param = op & ((1 << (bits % 10)) - 1);
130      if (bits / 10)
131      {
132         UINT8 op2 = oprom[pos++];
133         param = (param << (bits / 10)) | (op2 & ((1 << (bits / 10)) - 1));
134         bits = (bits % 10) + (bits / 10);
135      }
136     
137      // special case for CZP
138      if (instr == mCZP)
139      {
140         param <<= 2;
141         bits += 2;
142      }
22143
23   return pos | 0 | DASMFLAG_SUPPORTED;
144      if (bits <= 4)
145         dst += sprintf(dst, "%d", param);
146      else if (bits <= 8)
147         dst += sprintf(dst, "$%02X", param);
148      else
149         dst += sprintf(dst, "$%03X", param);
150   }
151
152   return pos | s_flags[instr] | DASMFLAG_SUPPORTED;
24153}


Previous 199869 Revisions Next


© 1997-2024 The MAME Team