Previous 199869 Revisions Next

r36299 Saturday 7th March, 2015 at 01:41:47 UTC by hap
opcode table WIP
[src/emu/cpu/hmcs40]hmcs40.c hmcs40.h hmcs40d.c hmcs40op.inc
[src/mess/drivers]hh_hmcs40.c

trunk/src/emu/cpu/hmcs40/hmcs40.c
r244810r244811
77  References:
88  - 1985 #AP1 Hitachi 4-bit Single-Chip Microcomputer Data Book
99  - 1988 HMCS400 Series Handbook (note: *400 is a newer MCU series, with similarities)
10  - opcode decoding by Tatsuyuki Satoh, Olivier Galibert, Kevin Horton, Lord Nightmare
1011
1112*/
1213
r244810r244811
316317      debugger_instruction_hook(this, m_pc);
317318      m_op = m_program->read_word(m_pc << 1) & 0x3ff;
318319      increment_pc();
320
321      // handle opcode
322      switch (m_op)
323      {
324         /* 0x000 */
325         
326         case 0x000: case 0x001: case 0x002: case 0x003:
327            op_xsp(); break;
328         case 0x004: case 0x005: case 0x006: case 0x007:
329            op_sem(); break;
330         case 0x008: case 0x009: case 0x00a: case 0x00b:
331            op_lam(); break;
332         case 0x010: case 0x011: case 0x012: case 0x013: case 0x014: case 0x015: case 0x016: case 0x017:
333         case 0x018: case 0x019: case 0x01a: case 0x01b: case 0x01c: case 0x01d: case 0x01e: case 0x01f:
334            op_lmiiy(); break;
335         case 0x020: case 0x021: case 0x022: case 0x023:
336            op_lbm(); break;
337         case 0x030:
338            op_amc(); break;
339         case 0x03c:
340            op_lta(); break;
341         
342         case 0x040:
343            op_lxa(); break;
344         case 0x04b:
345            op_rec(); break;
346         case 0x04f:
347            op_sec(); break;
348         case 0x050:
349            op_lya(); break;
350         case 0x054:
351            op_iy(); break;
352         case 0x060:
353            op_lba(); break;
354         case 0x064:
355            op_ib(); break;
356         case 0x070: case 0x071: case 0x072: case 0x073: case 0x074: case 0x075: case 0x076: case 0x077:
357         case 0x078: case 0x079: case 0x07a: case 0x07b: case 0x07c: case 0x07d: case 0x07e: case 0x07f:
358            op_lai(); break;
359         
360         case 0x080: case 0x081: case 0x082: case 0x083: case 0x084: case 0x085: case 0x086: case 0x087:
361         case 0x088: case 0x089: case 0x08a: case 0x08b: case 0x08c: case 0x08d: case 0x08e: case 0x08f:
362            op_ai(); break;
363         case 0x090:
364            op_sed(); break;
365         case 0x094:
366            op_td(); break;
367         case 0x0a0:
368            op_seif1(); break;
369         case 0x0a1:
370            op_secf(); break;
371         case 0x0a2:
372            op_seif0(); break;
373         case 0x0a4:
374            op_seie(); break;
375         case 0x0a5:
376            op_setf(); break;
377
378         case 0x0c0: case 0x0c1: case 0x0c2: case 0x0c3: case 0x0c4: case 0x0c5: case 0x0c6: case 0x0c7:
379            op_lar(); break;
380         case 0x0d0: case 0x0d1: case 0x0d2: case 0x0d3: case 0x0d4: case 0x0d5: case 0x0d6: case 0x0d7:
381         case 0x0d8: case 0x0d9: case 0x0da: case 0x0db: case 0x0dc: case 0x0dd: case 0x0de: case 0x0df:
382            op_sedd(); break;
383         case 0x0e0: case 0x0e1: case 0x0e2: case 0x0e3: case 0x0e4: case 0x0e5: case 0x0e6: case 0x0e7:
384            op_lbr(); break;
385         case 0x0f0: case 0x0f1: case 0x0f2: case 0x0f3: case 0x0f4: case 0x0f5: case 0x0f6: case 0x0f7:
386         case 0x0f8: case 0x0f9: case 0x0fa: case 0x0fb: case 0x0fc: case 0x0fd: case 0x0fe: case 0x0ff:
387            op_xamr(); break;
388         
389         
390         /* 0x100 */
391         
392         case 0x110: case 0x111:
393            op_lmaiy(); break;
394         case 0x114: case 0x115:
395            op_lmady(); break;
396         case 0x120:
397            op_or(); break;
398
399         case 0x140: case 0x141: case 0x142: case 0x143: case 0x144: case 0x145: case 0x146: case 0x147:
400         case 0x148: case 0x149: case 0x14a: case 0x14b: case 0x14c: case 0x14d: case 0x14e: case 0x14f:
401            op_lxi(); break;
402         case 0x150: case 0x151: case 0x152: case 0x153: case 0x154: case 0x155: case 0x156: case 0x157:
403         case 0x158: case 0x159: case 0x15a: case 0x15b: case 0x15c: case 0x15d: case 0x15e: case 0x15f:
404            op_lyi(); break;
405         case 0x160: case 0x161: case 0x162: case 0x163: case 0x164: case 0x165: case 0x166: case 0x167:
406         case 0x168: case 0x169: case 0x16a: case 0x16b: case 0x16c: case 0x16d: case 0x16e: case 0x16f:
407            op_lbi(); break;
408         case 0x170: case 0x171: case 0x172: case 0x173: case 0x174: case 0x175: case 0x176: case 0x177:
409         case 0x178: case 0x179: case 0x17a: case 0x17b: case 0x17c: case 0x17d: case 0x17e: case 0x17f:
410            op_lti(); break;
411         
412         case 0x1a0:
413            op_tif1(); break;
414         case 0x1a1:
415            op_ti1(); break;
416         case 0x1a2:
417            op_tif0(); break;
418         case 0x1a3:
419            op_ti0(); break;
420         case 0x1a5:
421            op_ttf(); break;
422
423         case 0x1c0: case 0x1c1: case 0x1c2: case 0x1c3: case 0x1c4: case 0x1c5: case 0x1c6: case 0x1c7:
424         case 0x1c8: case 0x1c9: case 0x1ca: case 0x1cb: case 0x1cc: case 0x1cd: case 0x1ce: case 0x1cf:
425         case 0x1d0: case 0x1d1: case 0x1d2: case 0x1d3: case 0x1d4: case 0x1d5: case 0x1d6: case 0x1d7:
426         case 0x1d8: case 0x1d9: case 0x1da: case 0x1db: case 0x1dc: case 0x1dd: case 0x1de: case 0x1df:
427         case 0x1e0: case 0x1e1: case 0x1e2: case 0x1e3: case 0x1e4: case 0x1e5: case 0x1e6: case 0x1e7:
428         case 0x1e8: case 0x1e9: case 0x1ea: case 0x1eb: case 0x1ec: case 0x1ed: case 0x1ee: case 0x1ef:
429         case 0x1f0: case 0x1f1: case 0x1f2: case 0x1f3: case 0x1f4: case 0x1f5: case 0x1f6: case 0x1f7:
430         case 0x1f8: case 0x1f9: case 0x1fa: case 0x1fb: case 0x1fc: case 0x1fd: case 0x1fe: case 0x1ff:
431            op_br(); break;
432
433
434         /* 0x200 */
435         
436         case 0x200: case 0x201: case 0x202: case 0x203:
437            op_tm(); break;
438         case 0x204: case 0x205: case 0x206: case 0x207:
439            op_rem(); break;
440         case 0x208: case 0x209: case 0x20a: case 0x20b:
441            op_xma(); break;
442         case 0x210: case 0x211: case 0x212: case 0x213: case 0x214: case 0x215: case 0x216: case 0x217:
443         case 0x218: case 0x219: case 0x21a: case 0x21b: case 0x21c: case 0x21d: case 0x21e: case 0x21f:
444            op_mnei(); break;
445         case 0x220: case 0x221: case 0x222: case 0x223:
446            op_xmb(); break;
447         case 0x224:
448            op_rotr(); break;
449         case 0x225:
450            op_rotl(); break;
451         case 0x230:
452            op_smc(); break;
453         case 0x23c:
454            op_lat(); break;
455         
456         case 0x240:
457            op_laspx(); break;
458         case 0x24f:
459            op_tc(); break;
460         case 0x250:
461            op_laspy(); break;
462         case 0x254:
463            op_dy(); break;
464         case 0x260:
465            op_lab(); break;
466         case 0x264:
467            op_db(); break;
468         case 0x270: case 0x271: case 0x272: case 0x273: case 0x274: case 0x275: case 0x276: case 0x277:
469         case 0x278: case 0x279: case 0x27a: case 0x27b: case 0x27c: case 0x27d: case 0x27e: case 0x27f:
470            op_alei(); break;
471
472         case 0x280: case 0x281: case 0x282: case 0x283: case 0x284: case 0x285: case 0x286: case 0x287:
473         case 0x288: case 0x289: case 0x28a: case 0x28b: case 0x28c: case 0x28d: case 0x28e: case 0x28f:
474            op_ynei(); break;
475         case 0x290:
476            op_red(); break;
477         case 0x2a0:
478            op_reif1(); break;
479         case 0x2a1:
480            op_recf(); break;
481         case 0x2a2:
482            op_reif0(); break;
483         case 0x2a4:
484            op_reie(); break;
485         case 0x2a5:
486            op_retf(); break;
487
488         case 0x2c0: case 0x2c1: case 0x2c2: case 0x2c3: case 0x2c4: case 0x2c5: case 0x2c6: case 0x2c7:
489            op_lra(); break;
490         case 0x2d0: case 0x2d1: case 0x2d2: case 0x2d3: case 0x2d4: case 0x2d5: case 0x2d6: case 0x2d7:
491         case 0x2d8: case 0x2d9: case 0x2da: case 0x2db: case 0x2dc: case 0x2dd: case 0x2de: case 0x2df:
492            op_redd(); break;
493         case 0x2e0: case 0x2e1: case 0x2e2: case 0x2e3: case 0x2e4: case 0x2e5: case 0x2e6: case 0x2e7:
494            op_lrb(); break;
495
496
497         /* 0x300 */
498         case 0x320:
499            op_comb(); break;
500
501         case 0x340: case 0x341: case 0x342: case 0x343: case 0x344: case 0x345: case 0x346: case 0x347:
502         case 0x348: case 0x349: case 0x34a: case 0x34b: case 0x34c: case 0x34d: case 0x34e: case 0x34f:
503         case 0x350: case 0x351: case 0x352: case 0x353: case 0x354: case 0x355: case 0x356: case 0x357:
504         case 0x358: case 0x359: case 0x35a: case 0x35b: case 0x35c: case 0x35d: case 0x35e: case 0x35f:
505            op_lpu(); break;
506         case 0x360: case 0x361: case 0x362: case 0x363: case 0x364: case 0x365: case 0x366: case 0x367:
507            op_tbr(); break;
508         case 0x368: case 0x369: case 0x36a: case 0x36b: case 0x36c: case 0x36d: case 0x36e: case 0x36f:
509            op_p(); break;
510
511         case 0x3a4:
512            op_rtni(); break;
513         case 0x3a7:
514            op_rtn(); break;
515
516         case 0x3c0: case 0x3c1: case 0x3c2: case 0x3c3: case 0x3c4: case 0x3c5: case 0x3c6: case 0x3c7:
517         case 0x3c8: case 0x3c9: case 0x3ca: case 0x3cb: case 0x3cc: case 0x3cd: case 0x3ce: case 0x3cf:
518         case 0x3d0: case 0x3d1: case 0x3d2: case 0x3d3: case 0x3d4: case 0x3d5: case 0x3d6: case 0x3d7:
519         case 0x3d8: case 0x3d9: case 0x3da: case 0x3db: case 0x3dc: case 0x3dd: case 0x3de: case 0x3df:
520         case 0x3e0: case 0x3e1: case 0x3e2: case 0x3e3: case 0x3e4: case 0x3e5: case 0x3e6: case 0x3e7:
521         case 0x3e8: case 0x3e9: case 0x3ea: case 0x3eb: case 0x3ec: case 0x3ed: case 0x3ee: case 0x3ef:
522         case 0x3f0: case 0x3f1: case 0x3f2: case 0x3f3: case 0x3f4: case 0x3f5: case 0x3f6: case 0x3f7:
523         case 0x3f8: case 0x3f9: case 0x3fa: case 0x3fb: case 0x3fc: case 0x3fd: case 0x3fe: case 0x3ff:
524            op_cal(); break;
525         
526         
527         default:
528            op_illegal(); break;
529      } /* big switch */
319530   }
320531}
trunk/src/emu/cpu/hmcs40/hmcs40.h
r244810r244811
1515// I/O ports setup
1616
1717// max 8 4-bit R ports
18#define MCFG_HMCS40_READ_R_CB(_r, _devcb) \
19   hmcs40_cpu_device::set_read_r##_r_callback(*device, DEVCB_##_devcb);
20#define MCFG_HMCS40_WRITE_R_CB(_r, _devcb) \
21   hmcs40_cpu_device::set_write_r##_r_callback(*device, DEVCB_##_devcb);
18#define MCFG_HMCS40_READ_R_CB(R, _devcb) \
19   hmcs40_cpu_device::set_read_r##R##_callback(*device, DEVCB_##_devcb);
20#define MCFG_HMCS40_WRITE_R_CB(R, _devcb) \
21   hmcs40_cpu_device::set_write_r##R##_callback(*device, DEVCB_##_devcb);
2222
2323// 16-bit discrete
24#define MCFG_HMCS40_READ_A_CB(_devcb) \
24#define MCFG_HMCS40_READ_D_CB(_devcb) \
2525   hmcs40_cpu_device::set_read_d_callback(*device, DEVCB_##_devcb);
2626#define MCFG_HMCS40_WRITE_D_CB(_devcb) \
2727   hmcs40_cpu_device::set_write_d_callback(*device, DEVCB_##_devcb);
r244810r244811
143143   virtual void write_d(int index, int state);
144144
145145   // opcode handlers
146   void op_illegal();
147
146148   void op_lab();
147149   void op_lba();
148150   void op_lay();
r244810r244811
158160   void op_dy();
159161   void op_ayy();
160162   void op_syy();
161   void op_xspx();
162   void op_xspy();
163   void op_xspxy();
163   void op_xsp();
164164
165165   void op_lam();
166166   void op_lbm();
r244810r244811
238238   void op_lra();
239239   void op_lrb();
240240   void op_p();
241
242   void op_nop();
243   void op_illegal();
244241};
245242
246243
trunk/src/emu/cpu/hmcs40/hmcs40d.c
r244810r244811
1111#include "hmcs40.h"
1212
1313
14enum e_mnemonics
15{
16   mLAB, mLBA, mLAY, mLASPX, mLASPY, mXAMR,
17   mLXA, mLYA, mLXI, mLYI, mIY, mDY, mAYY, mSYY, mXSP,
18   mLAM, mLBM, mXMA, mXMB, mLMAIY, mLMADY,
19   mLMIIY, mLAI, mLBI,
20   mAI, mIB, mDB, mAMC, mSMC, mAM, mDAA, mDAS, mNEGA, mCOMB, mSEC, mREC, mTC, mROTL, mROTR, mOR,
21   mMNEI, mYNEI, mANEM, mBNEM, mALEI, mALEM, mBLEM,
22   mSEM, mREM, mTM,
23   mBR, mCAL, mLPU, mTBR, mRTN,
24   mSEIE, mSEIF0, mSEIF1, mSETF, mSECF, mREIE, mREIF0, mREIF1, mRETF, mRECF, mTI0, mTI1, mTIF0, mTIF1, mTTF, mLTI, mLTA, mLAT, mRTNI,
25   mSED, mRED, mTD, mSEDD, mREDD, mLAR, mLBR, mLRA, mLRB, mP,
26   mNOP, mILL
27};
28
29static const char *const s_mnemonics[] =
30{
31   "LAB", "LBA", "LAY", "LASPX", "LASPY", "XAMR",
32   "LXA", "LYA", "LXI", "LYI", "IY", "DY", "AYY", "SYY", "XSP",
33   "LAM", "LBM", "XMA", "XMB", "LMAIY", "LMADY",
34   "LMIIY", "LAI", "LBI",
35   "AI", "IB", "DB", "AMC", "SMC", "AM", "DAA", "DAS", "NEGA", "COMB", "SEC", "REC", "TC", "ROTL", "ROTR", "OR",
36   "MNEI", "YNEI", "ANEM", "BNEM", "ALEI", "ALEM", "BLEM",
37   "SEM", "REM", "TM",
38   "BR", "CAL", "LPU", "TBR", "RTN",
39   "SEIE", "SEIF0", "SEIF1", "SETF", "SECF", "REIE", "REIF0", "REIF1", "RETF", "RECF", "TI0", "TI1", "TIF0", "TIF1", "TTF", "LTI", "LTA", "LAT", "RTNI",
40   "SED", "RED", "TD", "SEDD", "REDD", "LAR", "LBR", "LRA", "LRB", "P",
41   "NOP", "?"
42};
43
44// number of bits per opcode parameter, -3 means (XY) parameter
45static const INT8 s_bits[] =
46{
47   0, 0, 0, 0, 0, 4,
48   0, 0, 4, 4, 0, 0, 0, 0, -3,
49   -3, -3, -3, -3, -3, -3,
50   4, 4, 4,
51   4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
52   4, 4, 0, 0, 4, 0, 0,
53   2, 2, 2,
54   6, 6, 5, 3, 0,
55   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0,
56   0, 0, 0, 4, 4, 3, 3, 3, 3, 3,
57   0, 0
58};
59
60#define _OVER DASMFLAG_STEP_OVER
61#define _OUT  DASMFLAG_STEP_OUT
62
63static const UINT32 s_flags[] =
64{
65   0, 0, 0, 0, 0, 0,
66   0, 0, 0, 0, 0, 0, 0, 0, 0,
67   0, 0, 0, 0, 0, 0,
68   0, 0, 0,
69   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
70   0, 0, 0, 0, 0, 0, 0,
71   0, 0, 0,
72   0, _OVER, 0, 0, _OUT,
73   0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _OUT,
74   0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
75   0, 0
76};
77
78
79static const UINT8 hmcs40_mnemonic[0x400] =
80{
81/*  0       1       2       3       4       5       6       7       8       9       A       B       C       D       E       F      */
82   /* 0x000 */
83   mNOP,   mXSP,   mXSP,   mXSP,   mSEM,   mSEM,   mSEM,   mSEM,   mLAM,   mLAM,   mLAM,   mLAM,   mILL,   mILL,   mILL,   mILL,
84   mLMIIY, mLMIIY, mLMIIY, mLMIIY, mLMIIY, mLMIIY, mLMIIY, mLMIIY, mLMIIY, mLMIIY, mLMIIY, mLMIIY, mLMIIY, mLMIIY, mLMIIY, mLMIIY,
85   mLBM,   mLBM,   mLBM,   mLBM,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,
86   mAMC,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mLTA,   mILL,   mILL,   mILL,
87   /* 0x040 */
88   mLXA,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mREC,   mILL,   mILL,   mILL,   mSEC,
89   mLYA,   mILL,   mILL,   mILL,   mIY,    mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,
90   mLBA,   mILL,   mILL,   mILL,   mIB,    mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,
91   mLAI,   mLAI,   mLAI,   mLAI,   mLAI,   mLAI,   mLAI,   mLAI,   mLAI,   mLAI,   mLAI,   mLAI,   mLAI,   mLAI,   mLAI,   mLAI,
92   /* 0x080 */
93   mAI,    mAI,    mAI,    mAI,    mAI,    mAI,    mAI,    mAI,    mAI,    mAI,    mAI,    mAI,    mAI,    mAI,    mAI,    mAI,
94   mSED,   mILL,   mILL,   mILL,   mTD,    mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,
95   mSEIF1, mSECF,  mSEIF0, mILL,   mSEIE,  mSETF,  mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,
96   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,
97   /* 0x0c0 */
98   mLAR,   mLAR,   mLAR,   mLAR,   mLAR,   mLAR,   mLAR,   mLAR,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,
99   mSEDD,  mSEDD,  mSEDD,  mSEDD,  mSEDD,  mSEDD,  mSEDD,  mSEDD,  mSEDD,  mSEDD,  mSEDD,  mSEDD,  mSEDD,  mSEDD,  mSEDD,  mSEDD,
100   mLBR,   mLBR,   mLBR,   mLBR,   mLBR,   mLBR,   mLBR,   mLBR,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,
101   mXAMR,  mXAMR,  mXAMR,  mXAMR,  mXAMR,  mXAMR,  mXAMR,  mXAMR,  mXAMR,  mXAMR,  mXAMR,  mXAMR,  mXAMR,  mXAMR,  mXAMR,  mXAMR,
102
103/*  0       1       2       3       4       5       6       7       8       9       A       B       C       D       E       F      */
104   /* 0x100 */
105   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,
106   mLMAIY, mLMAIY, mILL,   mILL,   mLMADY, mLMADY, mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,
107   mOR,    mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,
108   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,
109   /* 0x140 */
110   mLXI,   mLXI,   mLXI,   mLXI,   mLXI,   mLXI,   mLXI,   mLXI,   mLXI,   mLXI,   mLXI,   mLXI,   mLXI,   mLXI,   mLXI,   mLXI,
111   mLYI,   mLYI,   mLYI,   mLYI,   mLYI,   mLYI,   mLYI,   mLYI,   mLYI,   mLYI,   mLYI,   mLYI,   mLYI,   mLYI,   mLYI,   mLYI,
112   mLBI,   mLBI,   mLBI,   mLBI,   mLBI,   mLBI,   mLBI,   mLBI,   mLBI,   mLBI,   mLBI,   mLBI,   mLBI,   mLBI,   mLBI,   mLBI,
113   mLTI,   mLTI,   mLTI,   mLTI,   mLTI,   mLTI,   mLTI,   mLTI,   mLTI,   mLTI,   mLTI,   mLTI,   mLTI,   mLTI,   mLTI,   mLTI,
114   /* 0x180 */
115   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,
116   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,
117   mTIF1,  mTI1,   mTIF0,  mTI0,   mILL,   mTTF,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,
118   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,
119   /* 0x1c0 */
120   mBR,    mBR,    mBR,    mBR,    mBR,    mBR,    mBR,    mBR,    mBR,    mBR,    mBR,    mBR,    mBR,    mBR,    mBR,    mBR,
121   mBR,    mBR,    mBR,    mBR,    mBR,    mBR,    mBR,    mBR,    mBR,    mBR,    mBR,    mBR,    mBR,    mBR,    mBR,    mBR,
122   mBR,    mBR,    mBR,    mBR,    mBR,    mBR,    mBR,    mBR,    mBR,    mBR,    mBR,    mBR,    mBR,    mBR,    mBR,    mBR,
123   mBR,    mBR,    mBR,    mBR,    mBR,    mBR,    mBR,    mBR,    mBR,    mBR,    mBR,    mBR,    mBR,    mBR,    mBR,    mBR,
124
125/*  0       1       2       3       4       5       6       7       8       9       A       B       C       D       E       F      */
126   /* 0x200 */
127   mTM,    mTM,    mTM,    mTM,    mREM,   mREM,   mREM,   mREM,   mXMA,   mXMA,   mXMA,   mXMA,   mILL,   mILL,   mILL,   mILL,
128   mMNEI,  mMNEI,  mMNEI,  mMNEI,  mMNEI,  mMNEI,  mMNEI,  mMNEI,  mMNEI,  mMNEI,  mMNEI,  mMNEI,  mMNEI,  mMNEI,  mMNEI,  mMNEI,
129   mXMB,   mXMB,   mXMB,   mXMB,   mROTR,  mROTL,  mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,
130   mSMC,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mLAT,   mILL,   mILL,   mILL,
131   /* 0x240 */
132   mLASPX, mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mTC,
133   mLASPY, mILL,   mILL,   mILL,   mDY,    mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,
134   mLAB,   mILL,   mILL,   mILL,   mDB,    mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,
135   mALEI,  mALEI,  mALEI,  mALEI,  mALEI,  mALEI,  mALEI,  mALEI,  mALEI,  mALEI,  mALEI,  mALEI,  mALEI,  mALEI,  mALEI,  mALEI,
136   /* 0x280 */
137   mYNEI,  mYNEI,  mYNEI,  mYNEI,  mYNEI,  mYNEI,  mYNEI,  mYNEI,  mYNEI,  mYNEI,  mYNEI,  mYNEI,  mYNEI,  mYNEI,  mYNEI,  mYNEI,
138   mRED,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,
139   mREIF1, mRECF,  mREIF0, mILL,   mREIE,  mRETF,  mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,
140   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,
141   /* 0x2c0 */
142   mLRA,   mLRA,   mLRA,   mLRA,   mLRA,   mLRA,   mLRA,   mLRA,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,
143   mREDD,  mREDD,  mREDD,  mREDD,  mREDD,  mREDD,  mREDD,  mREDD,  mREDD,  mREDD,  mREDD,  mREDD,  mREDD,  mREDD,  mREDD,  mREDD,
144   mLRB,   mLRB,   mLRB,   mLRB,   mLRB,   mLRB,   mLRB,   mLRB,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,
145   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,
146
147/*  0       1       2       3       4       5       6       7       8       9       A       B       C       D       E       F      */
148   /* 0x300 */
149   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,
150   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,
151   mCOMB,  mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,
152   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,
153   /* 0x340 */
154   mLPU,   mLPU,   mLPU,   mLPU,   mLPU,   mLPU,   mLPU,   mLPU,   mLPU,   mLPU,   mLPU,   mLPU,   mLPU,   mLPU,   mLPU,   mLPU,
155   mLPU,   mLPU,   mLPU,   mLPU,   mLPU,   mLPU,   mLPU,   mLPU,   mLPU,   mLPU,   mLPU,   mLPU,   mLPU,   mLPU,   mLPU,   mLPU,
156   mTBR,   mTBR,   mTBR,   mTBR,   mTBR,   mTBR,   mTBR,   mTBR,   mP,     mP,     mP,     mP,     mP,     mP,     mP,     mP,
157   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,
158   /* 0x380 */
159   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,
160   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,
161   mILL,   mILL,   mILL,   mILL,   mRTNI,  mILL,   mILL,   mRTN,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,
162   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,   mILL,
163   /* 0x3c0 */
164   mCAL,   mCAL,   mCAL,   mCAL,   mCAL,   mCAL,   mCAL,   mCAL,   mCAL,   mCAL,   mCAL,   mCAL,   mCAL,   mCAL,   mCAL,   mCAL,
165   mCAL,   mCAL,   mCAL,   mCAL,   mCAL,   mCAL,   mCAL,   mCAL,   mCAL,   mCAL,   mCAL,   mCAL,   mCAL,   mCAL,   mCAL,   mCAL,
166   mCAL,   mCAL,   mCAL,   mCAL,   mCAL,   mCAL,   mCAL,   mCAL,   mCAL,   mCAL,   mCAL,   mCAL,   mCAL,   mCAL,   mCAL,   mCAL,
167   mCAL,   mCAL,   mCAL,   mCAL,   mCAL,   mCAL,   mCAL,   mCAL,   mCAL,   mCAL,   mCAL,   mCAL,   mCAL,   mCAL,   mCAL,   mCAL
168};
169
170
171
14172CPU_DISASSEMBLE(hmcs40)
15173{
16   int pos = 1;//0;
17//   UINT16 op = (oprom[pos] | oprom[pos + 1] << 8) & 0x3ff;
18//   pos += 2;
19//   UINT8 instr = hmcs40_mnemonic[op];
20
174   int pos = 0;
175   UINT16 op = (oprom[pos] | oprom[pos + 1] << 8) & 0x3ff;
176   pos++;
21177   char *dst = buffer;
22   dst += sprintf(dst, "ABC");
178   UINT8 instr = hmcs40_mnemonic[op];
179   INT8 bits = s_bits[instr];
180   
181   // special case for (XY) opcode
182   if (bits == -3)
183   {
184      dst += sprintf(dst, "%s", s_mnemonics[instr]);
23185
24   return pos | 0 | DASMFLAG_SUPPORTED;
186      if (op & 1)
187         dst += sprintf(dst, "X");
188      if (op & 2)
189         dst += sprintf(dst, "Y");
190   }
191   else
192      dst += sprintf(dst, "%-6s ", s_mnemonics[instr]);
193   
194   // opcode parameter
195   if (bits > 0)
196   {
197      UINT8 param = op & ((1 << bits) - 1);
198
199      if (bits > 5)
200         dst += sprintf(dst, "$%02X", param);
201      else
202         dst += sprintf(dst, "%d", param);
203   }
204
205   return pos | s_flags[instr] | DASMFLAG_SUPPORTED;
25206}
trunk/src/emu/cpu/hmcs40/hmcs40op.inc
r244810r244811
170170
171171// instruction set
172172
173void hmcs40_cpu_device::op_illegal()
174{
175   logerror("%s unknown opcode $%03X at $%04X\n", tag(), m_op, m_prev_pc << 1);
176}
177
178
173179// Register-to-Register Instruction
174180
175181void hmcs40_cpu_device::op_lab()
r244810r244811
273279   m_y &= 0xf;
274280}
275281
276void hmcs40_cpu_device::op_xspx()
282void hmcs40_cpu_device::op_xsp()
277283{
278   // XSPX: Exchange X and SPX
279   UINT8 old_x = m_x;
280   m_x = m_spx;
281   m_spx = old_x;
284   // XSP (XY): Exchange X and SPX, Y and SPY, or NOP if 0
285   if (m_op & 1)
286   {
287      UINT8 old_x = m_x;
288      m_x = m_spx;
289      m_spx = old_x;
290   }
291   if (m_op & 2)
292   {
293      UINT8 old_y = m_y;
294      m_y = m_spy;
295      m_spy = old_y;
296   }
282297}
283298
284void hmcs40_cpu_device::op_xspy()
285{
286   // XSPY: Exchange Y and SPY
287   UINT8 old_y = m_y;
288   m_y = m_spy;
289   m_spy = old_y;
290}
291299
292void hmcs40_cpu_device::op_xspxy()
293{
294   // XSPXY: Exchange X and SPX, Y and SPY
295   op_xspx();
296   op_xspy();
297}
298
299
300300// Ram Register Instruction
301301
302302void hmcs40_cpu_device::op_lam()
303303{
304304   // LAM (XY): Load A from Memory
305305   m_a = ram_r();
306   op_xspxy();
306   op_xsp();
307307}
308308
309309void hmcs40_cpu_device::op_lbm()
310310{
311311   // LBM (XY): Load B from Memory
312312   m_b = ram_r();
313   op_xspxy();
313   op_xsp();
314314}
315315
316316void hmcs40_cpu_device::op_xma()
r244810r244811
319319   UINT8 old_a = m_a;
320320   m_a = ram_r();
321321   ram_w(old_a);
322   op_xspxy();
322   op_xsp();
323323}
324324
325325void hmcs40_cpu_device::op_xmb()
r244810r244811
328328   UINT8 old_b = m_b;
329329   m_b = ram_r();
330330   ram_w(old_b);
331   op_xspxy();
331   op_xsp();
332332}
333333
334334void hmcs40_cpu_device::op_lmaiy()
r244810r244811
336336   // LMAIY (X): Load Memory from A, Increment Y
337337   ram_w(m_a);
338338   op_iy();
339   op_xspx();
339   op_xsp();
340340}
341341
342342void hmcs40_cpu_device::op_lmady()
r244810r244811
344344   // LMADY (X): Load Memory from A, Decrement Y
345345   ram_w(m_a);
346346   op_dy();
347   op_xspx();
347   op_xsp();
348348}
349349
350350
r244810r244811
796796      write_r(3, o & 0xf);
797797   }
798798}
799
800
801// Control Instruction
802
803void hmcs40_cpu_device::op_nop()
804{
805   // NOP: No Operation
806}
807
808
809void hmcs40_cpu_device::op_illegal()
810{
811   logerror("%s unknown opcode $%03X at $%04X\n", tag(), m_op, m_prev_pc << 1);
812}
trunk/src/mess/drivers/hh_hmcs40.c
r244810r244811
257257
258258   /* basic machine hardware */
259259   MCFG_CPU_ADD("maincpu", HD38800, 400000) // approximation - RC osc.
260   MCFG_HMCS40_WRITE_R_CB(0, WRITE8(hh_hmcs40_state, alnattck_plate_w))
261   MCFG_HMCS40_WRITE_R_CB(1, WRITE8(hh_hmcs40_state, alnattck_plate_w))
262   MCFG_HMCS40_WRITE_R_CB(2, WRITE8(hh_hmcs40_state, alnattck_plate_w))
263   MCFG_HMCS40_WRITE_R_CB(3, WRITE8(hh_hmcs40_state, alnattck_plate_w))
264   MCFG_HMCS40_READ_D_CB(READ16(hh_hmcs40_state, alnattck_d_r))
265   MCFG_HMCS40_WRITE_D_CB(WRITE16(hh_hmcs40_state, alnattck_d_w))
260266
261267   MCFG_TIMER_DRIVER_ADD_PERIODIC("display_decay", hh_hmcs40_state, display_decay_tick, attotime::from_msec(1))
262268   MCFG_DEFAULT_LAYOUT(layout_alnattck)


Previous 199869 Revisions Next


© 1997-2024 The MAME Team