Previous 199869 Revisions Next

r33668 Thursday 4th December, 2014 at 03:10:08 UTC by Jürgen Buchmüller
Introduc m_Skip to skip ops. Clean up + fixes (nw)
[src/emu/cpu/pps4]pps4.c pps4.h pps4dasm.c

trunk/src/emu/cpu/pps4/pps4.c
r242179r242180
3333#include "pps4.h"
3434
3535
36#define VERBOSE 0       //!< set to 1 to log certain instruction conditions
36#define VERBOSE 1       //!< set to 1 to log certain instruction conditions
3737
3838#if VERBOSE
3939#define LOG(x) logerror x
r242179r242180
8181
8282/**
8383 * @brief pps4_device::ROP Read the next opcode (instruction)
84 * @return m_I
84 * The previous opcode mask (upper four bits) is set from the
85 * previous instruction. The new opcode is fetched and the
86 * program counter is incremented. The icount is decremented.
87 * @return m_I the next opcode
8588 */
8689inline UINT8 pps4_device::ROP()
8790{
r242179r242180
9396}
9497
9598/**
96 * @brief pps4_device::ARG Read the next argument (instrunction 2)
97 * @return m_I2
99 * @brief pps4_device::ARG Read the next argument (instruction 2)
100 * The byte at program counter is read from the unencrypted
101 * direct space. The program count is incremented and the
102 * icount is decremented.
103 * @return m_I2 the next argument
98104 */
99105inline UINT8 pps4_device::ARG()
100106{
r242179r242180
141147void pps4_device::iAD()
142148{
143149    m_A = m_A + M();
144    m_C = m_A >> 4;
150    m_C = (m_A >> 4) & 1;
145151    m_A = m_A & 15;
146152}
147153
r242179r242180
183189{
184190    m_A = m_A + M();
185191    m_C = m_A >> 4;
192    m_Skip = m_C;
186193    m_A = m_A & 15;
187    m_P = (m_P + m_C) & 0xFFF;
188194}
189195
190196/**
r242179r242180
205211{
206212    m_A = m_A + M() + m_C;
207213    m_C = m_A >> 4;
214    m_Skip = m_C;
208215    m_A = m_A & 15;
209    m_P = (m_P + m_C) & 0xFFF;
210216}
211217
212218/**
213 * @brief pps4_device::iAND Logical AND
214 * OPCODE     cycles  mnemonic
215 * -----------------------------
216 * 0000 1101  1 cyc   AND
217 *
218 * Symbolic equation
219 * -----------------------------
220 * A <- A & M
221 *
222 * The result of logical AND of accumulator and
223 * 4-bit contents of RAM currently addressed by
224 * B register replaces contents of accumulator.
225 */
226void pps4_device::iAND()
227{
228    m_A = m_A & M();
229}
230
231/**
232219 * @brief pps4_device::iADI Add immediate
233220 * OPCODE     cycles  mnemonic
234221 * -----------------------------
r242179r242180
253240{
254241    const UINT8 imm = ~m_I & 15;
255242    m_A = m_A + imm;
256    m_P = m_P + (m_A > 15) ? 1 : 0;
243    m_Skip = (m_A >> 4) & 1;
257244    m_A = m_A & 15;
258    m_P = m_P & 0xFFF;
259245}
260246
261247/**
r242179r242180
266252 *
267253 * Symbolic equation
268254 * -----------------------------
269 * A <- A + 1010b
255 * A <- A + 1010
270256 *
271257 * Decimal correction of accumulator.
272258 * Binary 1010 is added to the contents of the accumulator.
r242179r242180
279265}
280266
281267/**
268 * @brief pps4_device::iAND Logical AND
269 * OPCODE     cycles  mnemonic
270 * -----------------------------
271 * 0000 1101  1 cyc   AND
272 *
273 * Symbolic equation
274 * -----------------------------
275 * A <- A & M
276 *
277 * The result of logical AND of accumulator and
278 * 4-bit contents of RAM currently addressed by
279 * B register replaces contents of accumulator.
280 */
281void pps4_device::iAND()
282{
283    m_A = m_A & M();
284}
285
286/**
282287 * @brief pps4_device::iOR Logical OR
283288 * OPCODE     cycles  mnemonic
284289 * -----------------------------
r242179r242180
288293 * -----------------------------
289294 * A <- A | M
290295 *
291 * The result of logical OIR of accumulator and
296 * The result of logical OR of accumulator and
292297 * 4-bit contents of RAM currently addressed by
293298 * B register replaces contents of accumulator.
294299 */
r242179r242180
441446 * @brief pps4_device::iLD Load accumulator from memory
442447 * OPCODE     cycles  mnemonic
443448 * -----------------------------
444 * 0011 0xxx  1 cyc   LDx
449 * 0011 0xxx  1 cyc   LD x
445450 *
446451 * Symbolic equation
447452 * -----------------------------
r242179r242180
467472 * @brief pps4_device::iEX Exchange accumulator and memory
468473 * OPCODE     cycles  mnemonic
469474 * -----------------------------
470 * 0011 1xxx  1 cyc   EXx
475 * 0011 1xxx  1 cyc   EX x
471476 *
472477 * Symbolic equation
473478 * -----------------------------
r242179r242180
519524    if (0 == bl) {
520525        // decrement BL wraps to 1111b
521526        bl = 15;
522        m_P = (m_P + 1) & 0xFFF;
527        m_Skip = 1;
523528    } else {
524529        // decrement BL
525530        bl = bl - 1;
r242179r242180
550555{
551556    // previous LDI instruction?
552557    if (0x70 == m_Ip) {
553        LOG(("%s: skip prev:%02x\n", __FUNCTION__, m_Ip));
558        LOG(("%s: skip prev:%02x op:%02x\n", __FUNCTION__, m_Ip, m_I));
554559        return;
555560    }
556561    m_A = ~m_I & 15;
r242179r242180
686691void pps4_device::iXBMX()
687692{
688693    // swap X and BM
689    UINT8 bm = (m_B >> 4) & 15;
694    const UINT8 bm = (m_B >> 4) & 15;
690695    m_B = (m_B & ~(15 << 4)) | (m_X << 4);
691696    m_X = bm;
692697}
r242179r242180
764769 * @brief pps4_device::iLB
765770 * OPCODE     cycles  mnemonic
766771 * -----------------------------
767 * 1100 0000  2 cyc    LB
772 * 1100 xxxx  2 cyc    LB x
768773 *
769774 * Symbolic equation
770775 * -----------------------------
r242179r242180
797802{
798803    // previous LB or LBL instruction?
799804    if (0xc0 == m_Ip|| 0x00 == m_Ip) {
800        LOG(("%s: skip prev:%02X\n", __FUNCTION__, m_Ip));
805        LOG(("%s: skip prev:%02x op:%02x\n", __FUNCTION__, m_Ip, m_I));
801806        return;
802807    }
803808    m_SB = m_SA;
804809    m_SA = (m_P + 1) & 0xFFF;
805    m_P = (3 << 8) | (m_I & 15);
810    m_P = (3 << 6) | (m_I & 15);
806811    m_B = ~ARG() & 255;
807812    m_P = m_SA;
808813    // swap SA and SB
r242179r242180
838843{
839844    // previous LB or LBL instruction?
840845    if (0xc0 == m_Ip || 0x00 == m_Ip) {
841        LOG(("%s: skip prev:%02X\n", __FUNCTION__, m_Ip));
846        LOG(("%s: skip prev:%02x op:%02x\n", __FUNCTION__, m_Ip, m_I));
842847        return;
843848    }
844849    m_B = ~ARG() & 255;
r242179r242180
865870    bl = (bl + 1) & 15;
866871    if (0 == bl) {
867872        LOG(("%s: skip BL=%x\n", __FUNCTION__, bl));
868        m_P = (m_P + 1) & 0xFFF;
873        m_Skip = 1;
869874    }
870875    m_B = (m_B & ~15) | bl;
871876}
r242179r242180
874879 * @brief pps4_device::iDECB
875880 * OPCODE     cycles  mnemonic
876881 * -----------------------------
877 * 0001 1111  1 cyc    DECB
882 * 0001 1111  1 cyc    DECq
878883 *
879884 * Symbolic equation
880885 * -----------------------------
r242179r242180
891896    bl = (bl - 1) & 15;
892897    if (15 == bl) {
893898        LOG(("%s: skip BL=%x\n", __FUNCTION__, bl));
894        m_P = (m_P + 1) & 0xFFF;
899        m_Skip = 1;
895900    }
896901    m_B = (m_B & ~15) | bl;
897902}
r242179r242180
922927 * @brief pps4_device::iTM Transfer and mark indirect
923928 * OPCODE     cycles  mnemonic
924929 * -----------------------------
925 * 11xx xxxx  2 cyc    TM *
930 * 11xx xxxx  2 cyc    TM x
926931 * yyyy yyyy  from page 3
927932 *
928933 * Symbolic equation
r242179r242180
949954    m_SA = m_P;
950955    m_P = 3 << 6;
951956    m_P = m_P | (m_I & 63);
952    ARG();
953    m_P = 1 << 8;
954    m_P |= m_I2;
957    m_I2 = ARG();
958    m_P = (1 << 8) | m_I2;
955959}
956960
957961/**
958962 * @brief pps4_device::iTL Transfer long
959963 * OPCODE     cycles  mnemonic
960964 * -----------------------------
961 * 0101 xxxx  2 cyc    TL *
965 * 0101 xxxx  2 cyc    TL xyy
962966 * yyyy yyyy
963967 *
964968 * Symbolic equation
r242179r242180
973977 */
974978void pps4_device::iTL()
975979{
976    ARG();
980    m_I2 = ARG();
977981    m_P = (m_I & 15) << 8;
978982    m_P = m_P | m_I2;
979983}
r242179r242180
982986 * @brief pps4_device::iTML Transfer and mark long
983987 * OPCODE     cycles  mnemonic
984988 * -----------------------------
985 * 0101 xxxx  2 cyc    TML *
989 * 0101 xxxx  2 cyc    TML xyy
986990 * yyyy yyyy
987991 *
988992 * Symbolic equation
r242179r242180
9991003 */
10001004void pps4_device::iTML()
10011005{
1002    ARG();
1006    m_I2 = ARG();
10031007    m_SB = m_SA;
10041008    m_SA = m_P;
1005    m_P = (m_I & 15) << 8;
1006    m_P = m_P | m_I2;
1009    m_P = ((m_I & 15) << 8) | m_I2;
10071010}
10081011
10091012/**
r242179r242180
10201023 */
10211024void pps4_device::iSKC()
10221025{
1023    m_P = m_P + m_C;
1024    m_P = m_P & 0xFFF;
1026    m_Skip = m_C;
10251027}
10261028
10271029/**
r242179r242180
10381040 */
10391041void pps4_device::iSKZ()
10401042{
1041    m_P = m_P + (0 == m_A) ? 1 : 0;
1042    m_P = m_P & 0xFFF;
1043    m_Skip = 0 == m_A ? 1 : 0;
10431044}
10441045
10451046/**
r242179r242180
10581059 */
10591060void pps4_device::iSKBI()
10601061{
1061    const unsigned imm = m_I & 15;
1062    m_P = m_P + (imm == (m_B & 15)) ? 1 : 0;
1063    m_P = m_P & 0xFFF;
1062    const UINT8 imm = m_I & 15;
1063    const UINT8 bl = m_B & 15;
1064    m_Skip = bl == imm ? 1 : 0;
10641065}
10651066
10661067/**
r242179r242180
10751076 */
10761077void pps4_device::iSKF1()
10771078{
1078    m_P = m_P + m_FF1;
1079    m_P = m_P & 0xFFF;
1079    m_Skip = m_FF1;
10801080}
10811081
10821082/**
r242179r242180
10911091 */
10921092void pps4_device::iSKF2()
10931093{
1094    m_P = m_P + m_FF2;
1095    m_P = m_P & 0xFFF;
1094    m_Skip = m_FF2;
10961095}
10971096
10981097/**
r242179r242180
11111110 */
11121111void pps4_device::iRTN()
11131112{
1114    m_P = m_SA;
1113    m_P = m_SA & 0xFFF;
11151114    // swap SA and SB
11161115    m_SA ^= m_SB;
11171116    m_SB ^= m_SA;
r242179r242180
11291128 * P <- SA, SA <-> SB
11301129 * P <- P + 1
11311130 *
1132 * Same as RTN expect the first ROM word encountered
1131 * Same as RTN except the first ROM word encountered
11331132 * after the return from subroutine is skipped.
11341133 */
11351134void pps4_device::iRTNSK()
11361135{
1137    m_P = m_SA;
1138    ROP();      // ignored
1139    m_I = 0;    // avoid LB/LBL or LDI skipping
1136    m_P = m_SA & 0xFFF;
11401137    // swap SA and SB
11411138    m_SA ^= m_SB;
11421139    m_SB ^= m_SA;
11431140    m_SA ^= m_SB;
1144    m_P = m_P & 0xFFF;
1141    ROP();      // next opcode is ignored
1142    m_I = 0;    // avoid LB/LBL or LDI skipping due to m_Ip
11451143}
11461144
11471145/**
11481146 * @brief pps4_device::IOL
11491147 * OPCODE     cycles  mnemonic
11501148 * -----------------------------
1151 * 0001 1100  2 cyc    IOL
1149 * 0001 1100  2 cyc    IOL yy
11521150 * yyyy yyyy
11531151 *
11541152 * Symbolic equation
r242179r242180
11681166 */
11691167void pps4_device::iIOL()
11701168{
1171    const unsigned a = ~m_A & 15;
1172    ARG();
1173    LOG(("%s: port:%X <- %02X\n", __FUNCTION__, m_I2, a));
1169    const UINT8 a = ~m_A & 15;
1170    m_I2 = ARG();
11741171    m_io->write_byte(m_I2, a);
1172    LOG(("%s: port:%02x <- %x\n", __FUNCTION__, m_I2, a));
11751173    m_A = ~m_io->read_byte(m_I2) & 15;
1176    LOG(("%s: port:%X -> %02X\n", __FUNCTION__, m_I2, m_A));
1174    LOG(("%s: port:%02x -> %x\n", __FUNCTION__, m_I2, m_A));
11771175}
11781176
11791177/**
r242179r242180
12491247 */
12501248void pps4_device::iSAG()
12511249{
1252    // mask bits 12:5
1250    // mask bits 12:5 on next memory access
12531251    m_SAG = 0xff0;
12541252}
12551253
r242179r242180
12591257void pps4_device::execute_one()
12601258{
12611259    m_I = ROP();
1260    if (m_Skip) {
1261        m_Skip = 0;
1262        LOG(("%s: skip op:%02x\n", __FUNCTION__, m_I));
1263        return;
1264    }
12621265    switch (m_I) {
12631266    case 0x00:
12641267        iLBL();
r242179r242180
14921495    save_item(NAME(m_P));
14931496    save_item(NAME(m_SA));
14941497    save_item(NAME(m_SB));
1498    save_item(NAME(m_Skip));
14951499    save_item(NAME(m_SAG));
14961500    save_item(NAME(m_B));
14971501    save_item(NAME(m_C));
r242179r242180
15061510    state_add( PPS4_X,  "X",  m_X ).formatstr("%01X");
15071511    state_add( PPS4_SA, "SA", m_SA ).formatstr("%03X");
15081512    state_add( PPS4_SB, "SB", m_SB ).formatstr("%03X");
1513    state_add( PPS4_Skip,  "Skip",  m_Skip ).formatstr("%01X");
1514    state_add( PPS4_SAG,  "SAG",  m_SAG ).formatstr("%03X");
15091515    state_add( PPS4_B,  "B",  m_B ).formatstr("%03X");
1510    state_add( PPS4_SAG,  "SAG",  m_SAG ).formatstr("%03X");
1516    state_add( PPS4_I2,  "I",  m_I ).formatstr("%02X").noshow();
15111517    state_add( PPS4_I2,  "I2",  m_I2 ).formatstr("%02X").noshow();
15121518    state_add( PPS4_Ip,  "Ip",  m_Ip ).formatstr("%02X").noshow();
15131519    state_add( STATE_GENPC, "GENPC", m_P ).noshow();
trunk/src/emu/cpu/pps4/pps4.h
r242179r242180
1515    PPS4_SA,
1616    PPS4_SB,
1717    PPS4_B,
18    PPS4_Skip,
1819    PPS4_SAG,
1920    PPS4_I2,
2021    PPS4_Ip,
r242179r242180
8384    UINT16  m_P;        //!< program counter P(12:1)
8485    UINT16  m_SA;       //!< Shift register SA(12:1)
8586    UINT16  m_SB;       //!< Shift register SB(12:1)
87    UINT8   m_Skip;     //!< Skip next instruction
8688    UINT16  m_SAG;      //!< Special address generation mask
8789    UINT16  m_B;        //!< B register B(12:1) (BL, BM and BH)
8890    UINT8   m_C;        //!< Carry flip-flop
trunk/src/emu/cpu/pps4/pps4dasm.c
r242179r242180
2828    t_IOL,      t_DIA,      t_DIB,      t_DOA,      t_SAG,
2929    t_COUNT,
3030    t_MASK = (1 << 6) - 1,
31    t_I3c = 1 << 6,   /* immediate 3 bit constant, complemented */
32    t_I4  = 1 << 7,   /* immediate 4 bit constant */
33    t_I4c = 1 << 8,   /* immediate 4 bit constant, complemented */
34    t_I4p = 1 << 9,   /* immediate 4 bit offset into page 3 */
35    t_I6p = 1 << 10,  /* immediate 6 bit constant; address in current page */
36    t_I8  = 1 << 11,  /* immediate 8 bit constant (I/O port number) */
37    t_I8c = 1 << 12,  /* immediate 8 bit constant inverted */
31    t_I3c  = 1 <<  6,   /* immediate 3 bit constant, complemented */
32    t_I4   = 1 <<  7,   /* immediate 4 bit constant */
33    t_I4c  = 1 <<  8,   /* immediate 4 bit constant, complemented */
34    t_I4p  = 1 <<  9,   /* immediate 4 bit offset into page 3 */
35    t_I6p  = 1 << 10,   /* immediate 6 bit constant; address in current page */
36    t_I8   = 1 << 11,   /* immediate 8 bit constant (I/O port number) */
37    t_I8c  = 1 << 12,   /* immediate 8 bit constant inverted */
38    t_OVER = 1 << 13,   /* Debugger step over (CALL) */
39    t_OUT  = 1 << 14    /* Debugger step out (RETURN) */
3840}   pps4_token_e;
3941
4042static const char *token_str[t_COUNT] = {
r242179r242180
9193};
9294
9395static const UINT16 table[] = {
94    t_LBL | t_I8c,       /* 00 */
95    t_TML | t_I4 | t_I8, /* 01 */
96    t_TML | t_I4 | t_I8, /* 02 */
97    t_TML | t_I4 | t_I8, /* 03 */
98    t_LBUA,              /* 04 */
99    t_RTN,               /* 05 */
100    t_XS,                /* 06 */
101    t_RTNSK,             /* 07 */
102    t_ADCSK,             /* 08 */
103    t_ADSK,              /* 09 */
104    t_ADC,               /* 0a */
105    t_AD,                /* 0b */
106    t_EOR,               /* 0c */
107    t_AND,               /* 0d */
108    t_COMP,              /* 0e */
109    t_OR,                /* 0f */
96/* 00 */ t_LBL | t_I8c,
97/* 01 */ t_TML | t_I4 | t_I8,
98/* 02 */ t_TML | t_I4 | t_I8,
99/* 03 */ t_TML | t_I4 | t_I8,
100/* 04 */ t_LBUA,
101/* 05 */ t_RTN | t_OUT,
102/* 06 */ t_XS,
103/* 07 */ t_RTNSK | t_OUT,
104/* 08 */ t_ADCSK,
105/* 09 */ t_ADSK,
106/* 0a */ t_ADC,
107/* 0b */ t_AD,
108/* 0c */ t_EOR,
109/* 0d */ t_AND,
110/* 0e */ t_COMP,
111/* 0f */ t_OR,
110112
111    t_LBMX,              /* 10 */
112    t_LABL,              /* 11 */
113    t_LAX,               /* 12 */
114    t_SAG,               /* 13 */
115    t_SKF2,              /* 14 */
116    t_SKC,               /* 15 */
117    t_SKF1,              /* 16 */
118    t_INCB,              /* 17 */
119    t_XBMX,              /* 18 */
120    t_XABL,              /* 19 */
121    t_XAX,               /* 1a */
122    t_LXA,               /* 1b */
123    t_IOL | t_I8,        /* 1c */
124    t_DOA,               /* 1d */
125    t_SKZ,               /* 1e */
126    t_DECB,              /* 1f */
113/* 10 */ t_LBMX,
114/* 11 */ t_LABL,
115/* 12 */ t_LAX,
116/* 13 */ t_SAG,
117/* 14 */ t_SKF2,
118/* 15 */ t_SKC,
119/* 16 */ t_SKF1,
120/* 17 */ t_INCB,
121/* 18 */ t_XBMX,
122/* 19 */ t_XABL,
123/* 1a */ t_XAX,
124/* 1b */ t_LXA,
125/* 1c */ t_IOL | t_I8,
126/* 1d */ t_DOA,
127/* 1e */ t_SKZ,
128/* 1f */ t_DECB,
127129
128    t_SC,                /* 20 */
129    t_SF2,               /* 21 */
130    t_SF1,               /* 22 */
131    t_DIB,               /* 23 */
132    t_RC,                /* 24 */
133    t_RF2,               /* 25 */
134    t_RF1,               /* 26 */
135    t_DIA,               /* 27 */
136    t_EXD | t_I3c,       /* 28 */
137    t_EXD | t_I3c,       /* 29 */
138    t_EXD | t_I3c,       /* 2a */
139    t_EXD | t_I3c,       /* 2b */
140    t_EXD | t_I3c,       /* 2c */
141    t_EXD | t_I3c,       /* 2d */
142    t_EXD | t_I3c,       /* 2e */
143    t_EXD | t_I3c,       /* 2f */
130/* 20 */ t_SC,
131/* 21 */ t_SF2,
132/* 22 */ t_SF1,
133/* 23 */ t_DIB,
134/* 24 */ t_RC,
135/* 25 */ t_RF2,
136/* 26 */ t_RF1,
137/* 27 */ t_DIA,
138/* 28 */ t_EXD | t_I3c,
139/* 29 */ t_EXD | t_I3c,
140/* 2a */ t_EXD | t_I3c,
141/* 2b */ t_EXD | t_I3c,
142/* 2c */ t_EXD | t_I3c,
143/* 2d */ t_EXD | t_I3c,
144/* 2e */ t_EXD | t_I3c,
145/* 2f */ t_EXD | t_I3c,
144146
145    t_LD | t_I3c,        /* 30 */
146    t_LD | t_I3c,        /* 31 */
147    t_LD | t_I3c,        /* 32 */
148    t_LD | t_I3c,        /* 33 */
149    t_LD | t_I3c,        /* 34 */
150    t_LD | t_I3c,        /* 35 */
151    t_LD | t_I3c,        /* 36 */
152    t_LD | t_I3c,        /* 37 */
153    t_EX | t_I3c,        /* 38 */
154    t_EX | t_I3c,        /* 39 */
155    t_EX | t_I3c,        /* 3a */
156    t_EX | t_I3c,        /* 3b */
157    t_EX | t_I3c,        /* 3c */
158    t_EX | t_I3c,        /* 3d */
159    t_EX | t_I3c,        /* 3e */
160    t_EX | t_I3c,        /* 3f */
147/* 30 */ t_LD | t_I3c,
148/* 31 */ t_LD | t_I3c,
149/* 32 */ t_LD | t_I3c,
150/* 33 */ t_LD | t_I3c,
151/* 34 */ t_LD | t_I3c,
152/* 35 */ t_LD | t_I3c,
153/* 36 */ t_LD | t_I3c,
154/* 37 */ t_LD | t_I3c,
155/* 38 */ t_EX | t_I3c,
156/* 39 */ t_EX | t_I3c,
157/* 3a */ t_EX | t_I3c,
158/* 3b */ t_EX | t_I3c,
159/* 3c */ t_EX | t_I3c,
160/* 3d */ t_EX | t_I3c,
161/* 3e */ t_EX | t_I3c,
162/* 3f */ t_EX | t_I3c,
161163
162    t_SKBI | t_I4,       /* 40 */
163    t_SKBI | t_I4,       /* 41 */
164    t_SKBI | t_I4,       /* 42 */
165    t_SKBI | t_I4,       /* 43 */
166    t_SKBI | t_I4,       /* 44 */
167    t_SKBI | t_I4,       /* 45 */
168    t_SKBI | t_I4,       /* 46 */
169    t_SKBI | t_I4,       /* 47 */
170    t_SKBI | t_I4,       /* 48 */
171    t_SKBI | t_I4,       /* 49 */
172    t_SKBI | t_I4,       /* 4a */
173    t_SKBI | t_I4,       /* 4b */
174    t_SKBI | t_I4,       /* 4c */
175    t_SKBI | t_I4,       /* 4d */
176    t_SKBI | t_I4,       /* 4e */
177    t_SKBI | t_I4,       /* 4f */
164/* 40 */ t_SKBI | t_I4,
165/* 41 */ t_SKBI | t_I4,
166/* 42 */ t_SKBI | t_I4,
167/* 43 */ t_SKBI | t_I4,
168/* 44 */ t_SKBI | t_I4,
169/* 45 */ t_SKBI | t_I4,
170/* 46 */ t_SKBI | t_I4,
171/* 47 */ t_SKBI | t_I4,
172/* 48 */ t_SKBI | t_I4,
173/* 49 */ t_SKBI | t_I4,
174/* 4a */ t_SKBI | t_I4,
175/* 4b */ t_SKBI | t_I4,
176/* 4c */ t_SKBI | t_I4,
177/* 4d */ t_SKBI | t_I4,
178/* 4e */ t_SKBI | t_I4,
179/* 4f */ t_SKBI | t_I4,
178180
179    t_TL | t_I4 | t_I8,  /* 50 */
180    t_TL | t_I4 | t_I8,  /* 51 */
181    t_TL | t_I4 | t_I8,  /* 52 */
182    t_TL | t_I4 | t_I8,  /* 53 */
183    t_TL | t_I4 | t_I8,  /* 54 */
184    t_TL | t_I4 | t_I8,  /* 55 */
185    t_TL | t_I4 | t_I8,  /* 56 */
186    t_TL | t_I4 | t_I8,  /* 57 */
187    t_TL | t_I4 | t_I8,  /* 58 */
188    t_TL | t_I4 | t_I8,  /* 59 */
189    t_TL | t_I4 | t_I8,  /* 5a */
190    t_TL | t_I4 | t_I8,  /* 5b */
191    t_TL | t_I4 | t_I8,  /* 5c */
192    t_TL | t_I4 | t_I8,  /* 5d */
193    t_TL | t_I4 | t_I8,  /* 5e */
194    t_TL | t_I4 | t_I8,  /* 5f */
181/* 50 */ t_TL | t_I4 | t_I8 | t_OVER,
182/* 51 */ t_TL | t_I4 | t_I8 | t_OVER,
183/* 52 */ t_TL | t_I4 | t_I8 | t_OVER,
184/* 53 */ t_TL | t_I4 | t_I8 | t_OVER,
185/* 54 */ t_TL | t_I4 | t_I8 | t_OVER,
186/* 55 */ t_TL | t_I4 | t_I8 | t_OVER,
187/* 56 */ t_TL | t_I4 | t_I8 | t_OVER,
188/* 57 */ t_TL | t_I4 | t_I8 | t_OVER,
189/* 58 */ t_TL | t_I4 | t_I8 | t_OVER,
190/* 59 */ t_TL | t_I4 | t_I8 | t_OVER,
191/* 5a */ t_TL | t_I4 | t_I8 | t_OVER,
192/* 5b */ t_TL | t_I4 | t_I8 | t_OVER,
193/* 5c */ t_TL | t_I4 | t_I8 | t_OVER,
194/* 5d */ t_TL | t_I4 | t_I8 | t_OVER,
195/* 5e */ t_TL | t_I4 | t_I8 | t_OVER,
196/* 5f */ t_TL | t_I4 | t_I8 | t_OVER,
195197
196    t_ADI | t_I4c,       /* 60 */
197    t_ADI | t_I4c,       /* 61 */
198    t_ADI | t_I4c,       /* 62 */
199    t_ADI | t_I4c,       /* 63 */
200    t_ADI | t_I4c,       /* 64 */
201    t_DC,                /* 65 */
202    t_ADI | t_I4c,       /* 66 */
203    t_ADI | t_I4c,       /* 67 */
204    t_ADI | t_I4c,       /* 68 */
205    t_ADI | t_I4c,       /* 69 */
206    t_ADI | t_I4c,       /* 6a */
207    t_ADI | t_I4c,       /* 6b */
208    t_ADI | t_I4c,       /* 6c */
209    t_ADI | t_I4c,       /* 6d */
210    t_ADI | t_I4c,       /* 6e */
211    t_CYS,               /* 6f */
198/* 60 */ t_ADI | t_I4c,
199/* 61 */ t_ADI | t_I4c,
200/* 62 */ t_ADI | t_I4c,
201/* 63 */ t_ADI | t_I4c,
202/* 64 */ t_ADI | t_I4c,
203/* 65 */ t_DC,
204/* 66 */ t_ADI | t_I4c,
205/* 67 */ t_ADI | t_I4c,
206/* 68 */ t_ADI | t_I4c,
207/* 69 */ t_ADI | t_I4c,
208/* 6a */ t_ADI | t_I4c,
209/* 6b */ t_ADI | t_I4c,
210/* 6c */ t_ADI | t_I4c,
211/* 6d */ t_ADI | t_I4c,
212/* 6e */ t_ADI | t_I4c,
213/* 6f */ t_CYS,
212214
213    t_LDI | t_I4c,       /* 70 */
214    t_LDI | t_I4c,       /* 71 */
215    t_LDI | t_I4c,       /* 72 */
216    t_LDI | t_I4c,       /* 73 */
217    t_LDI | t_I4c,       /* 74 */
218    t_LDI | t_I4c,       /* 75 */
219    t_LDI | t_I4c,       /* 76 */
220    t_LDI | t_I4c,       /* 77 */
221    t_LDI | t_I4c,       /* 78 */
222    t_LDI | t_I4c,       /* 79 */
223    t_LDI | t_I4c,       /* 7a */
224    t_LDI | t_I4c,       /* 7b */
225    t_LDI | t_I4c,       /* 7c */
226    t_LDI | t_I4c,       /* 7d */
227    t_LDI | t_I4c,       /* 7e */
228    t_LDI | t_I4c,       /* 7f */
215/* 70 */ t_LDI | t_I4c,
216/* 71 */ t_LDI | t_I4c,
217/* 72 */ t_LDI | t_I4c,
218/* 73 */ t_LDI | t_I4c,
219/* 74 */ t_LDI | t_I4c,
220/* 75 */ t_LDI | t_I4c,
221/* 76 */ t_LDI | t_I4c,
222/* 77 */ t_LDI | t_I4c,
223/* 78 */ t_LDI | t_I4c,
224/* 79 */ t_LDI | t_I4c,
225/* 7a */ t_LDI | t_I4c,
226/* 7b */ t_LDI | t_I4c,
227/* 7c */ t_LDI | t_I4c,
228/* 7d */ t_LDI | t_I4c,
229/* 7e */ t_LDI | t_I4c,
230/* 7f */ t_LDI | t_I4c,
229231
230    t_T | t_I6p,         /* 80 */
231    t_T | t_I6p,         /* 81 */
232    t_T | t_I6p,         /* 82 */
233    t_T | t_I6p,         /* 83 */
234    t_T | t_I6p,         /* 84 */
235    t_T | t_I6p,         /* 85 */
236    t_T | t_I6p,         /* 86 */
237    t_T | t_I6p,         /* 87 */
238    t_T | t_I6p,         /* 88 */
239    t_T | t_I6p,         /* 89 */
240    t_T | t_I6p,         /* 8a */
241    t_T | t_I6p,         /* 8b */
242    t_T | t_I6p,         /* 8c */
243    t_T | t_I6p,         /* 8d */
244    t_T | t_I6p,         /* 8e */
245    t_T | t_I6p,         /* 8f */
232/* 80 */ t_T | t_I6p,
233/* 81 */ t_T | t_I6p,
234/* 82 */ t_T | t_I6p,
235/* 83 */ t_T | t_I6p,
236/* 84 */ t_T | t_I6p,
237/* 85 */ t_T | t_I6p,
238/* 86 */ t_T | t_I6p,
239/* 87 */ t_T | t_I6p,
240/* 88 */ t_T | t_I6p,
241/* 89 */ t_T | t_I6p,
242/* 8a */ t_T | t_I6p,
243/* 8b */ t_T | t_I6p,
244/* 8c */ t_T | t_I6p,
245/* 8d */ t_T | t_I6p,
246/* 8e */ t_T | t_I6p,
247/* 8f */ t_T | t_I6p,
246248
247    t_T | t_I6p,         /* 90 */
248    t_T | t_I6p,         /* 91 */
249    t_T | t_I6p,         /* 92 */
250    t_T | t_I6p,         /* 93 */
251    t_T | t_I6p,         /* 94 */
252    t_T | t_I6p,         /* 95 */
253    t_T | t_I6p,         /* 96 */
254    t_T | t_I6p,         /* 97 */
255    t_T | t_I6p,         /* 98 */
256    t_T | t_I6p,         /* 99 */
257    t_T | t_I6p,         /* 9a */
258    t_T | t_I6p,         /* 9b */
259    t_T | t_I6p,         /* 9c */
260    t_T | t_I6p,         /* 9d */
261    t_T | t_I6p,         /* 9e */
262    t_T | t_I6p,         /* 9f */
249/* 90 */ t_T | t_I6p,
250/* 91 */ t_T | t_I6p,
251/* 92 */ t_T | t_I6p,
252/* 93 */ t_T | t_I6p,
253/* 94 */ t_T | t_I6p,
254/* 95 */ t_T | t_I6p,
255/* 96 */ t_T | t_I6p,
256/* 97 */ t_T | t_I6p,
257/* 98 */ t_T | t_I6p,
258/* 99 */ t_T | t_I6p,
259/* 9a */ t_T | t_I6p,
260/* 9b */ t_T | t_I6p,
261/* 9c */ t_T | t_I6p,
262/* 9d */ t_T | t_I6p,
263/* 9e */ t_T | t_I6p,
264/* 9f */ t_T | t_I6p,
263265
264    t_T | t_I6p,         /* a0 */
265    t_T | t_I6p,         /* a1 */
266    t_T | t_I6p,         /* a2 */
267    t_T | t_I6p,         /* a3 */
268    t_T | t_I6p,         /* a4 */
269    t_T | t_I6p,         /* a5 */
270    t_T | t_I6p,         /* a6 */
271    t_T | t_I6p,         /* a7 */
272    t_T | t_I6p,         /* a8 */
273    t_T | t_I6p,         /* a9 */
274    t_T | t_I6p,         /* aa */
275    t_T | t_I6p,         /* ab */
276    t_T | t_I6p,         /* ac */
277    t_T | t_I6p,         /* ad */
278    t_T | t_I6p,         /* ae */
279    t_T | t_I6p,         /* af */
266/* a0 */ t_T | t_I6p,
267/* a1 */ t_T | t_I6p,
268/* a2 */ t_T | t_I6p,
269/* a3 */ t_T | t_I6p,
270/* a4 */ t_T | t_I6p,
271/* a5 */ t_T | t_I6p,
272/* a6 */ t_T | t_I6p,
273/* a7 */ t_T | t_I6p,
274/* a8 */ t_T | t_I6p,
275/* a9 */ t_T | t_I6p,
276/* aa */ t_T | t_I6p,
277/* ab */ t_T | t_I6p,
278/* ac */ t_T | t_I6p,
279/* ad */ t_T | t_I6p,
280/* ae */ t_T | t_I6p,
281/* af */ t_T | t_I6p,
280282
281    t_T | t_I6p,         /* b0 */
282    t_T | t_I6p,         /* b1 */
283    t_T | t_I6p,         /* b2 */
284    t_T | t_I6p,         /* b3 */
285    t_T | t_I6p,         /* b4 */
286    t_T | t_I6p,         /* b5 */
287    t_T | t_I6p,         /* b6 */
288    t_T | t_I6p,         /* b7 */
289    t_T | t_I6p,         /* b8 */
290    t_T | t_I6p,         /* b9 */
291    t_T | t_I6p,         /* ba */
292    t_T | t_I6p,         /* bb */
293    t_T | t_I6p,         /* bc */
294    t_T | t_I6p,         /* bd */
295    t_T | t_I6p,         /* be */
296    t_T | t_I6p,         /* bf */
283/* b0 */ t_T | t_I6p,
284/* b1 */ t_T | t_I6p,
285/* b2 */ t_T | t_I6p,
286/* b3 */ t_T | t_I6p,
287/* b4 */ t_T | t_I6p,
288/* b5 */ t_T | t_I6p,
289/* b6 */ t_T | t_I6p,
290/* b7 */ t_T | t_I6p,
291/* b8 */ t_T | t_I6p,
292/* b9 */ t_T | t_I6p,
293/* ba */ t_T | t_I6p,
294/* bb */ t_T | t_I6p,
295/* bc */ t_T | t_I6p,
296/* bd */ t_T | t_I6p,
297/* be */ t_T | t_I6p,
298/* bf */ t_T | t_I6p,
297299
298    t_LB | t_I4p,        /* c0 */
299    t_LB | t_I4p,        /* c1 */
300    t_LB | t_I4p,        /* c2 */
301    t_LB | t_I4p,        /* c3 */
302    t_LB | t_I4p,        /* c4 */
303    t_LB | t_I4p,        /* c5 */
304    t_LB | t_I4p,        /* c6 */
305    t_LB | t_I4p,        /* c7 */
306    t_LB | t_I4p,        /* c8 */
307    t_LB | t_I4p,        /* c9 */
308    t_LB | t_I4p,        /* ca */
309    t_LB | t_I4p,        /* cb */
310    t_LB | t_I4p,        /* cc */
311    t_LB | t_I4p,        /* cd */
312    t_LB | t_I4p,        /* ce */
313    t_LB | t_I4p,        /* cf */
300/* c0 */ t_LB | t_I4p,
301/* c1 */ t_LB | t_I4p,
302/* c2 */ t_LB | t_I4p,
303/* c3 */ t_LB | t_I4p,
304/* c4 */ t_LB | t_I4p,
305/* c5 */ t_LB | t_I4p,
306/* c6 */ t_LB | t_I4p,
307/* c7 */ t_LB | t_I4p,
308/* c8 */ t_LB | t_I4p,
309/* c9 */ t_LB | t_I4p,
310/* ca */ t_LB | t_I4p,
311/* cb */ t_LB | t_I4p,
312/* cc */ t_LB | t_I4p,
313/* cd */ t_LB | t_I4p,
314/* ce */ t_LB | t_I4p,
315/* cf */ t_LB | t_I4p,
314316
315    t_TM | t_I6p,        /* d0 */
316    t_TM | t_I6p,        /* d1 */
317    t_TM | t_I6p,        /* d2 */
318    t_TM | t_I6p,        /* d3 */
319    t_TM | t_I6p,        /* d4 */
320    t_TM | t_I6p,        /* d5 */
321    t_TM | t_I6p,        /* d6 */
322    t_TM | t_I6p,        /* d7 */
323    t_TM | t_I6p,        /* d8 */
324    t_TM | t_I6p,        /* d9 */
325    t_TM | t_I6p,        /* da */
326    t_TM | t_I6p,        /* db */
327    t_TM | t_I6p,        /* dc */
328    t_TM | t_I6p,        /* dd */
329    t_TM | t_I6p,        /* de */
330    t_TM | t_I6p,        /* df */
317/* d0 */ t_TM | t_I6p | t_OVER,
318/* d1 */ t_TM | t_I6p | t_OVER,
319/* d2 */ t_TM | t_I6p | t_OVER,
320/* d3 */ t_TM | t_I6p | t_OVER,
321/* d4 */ t_TM | t_I6p | t_OVER,
322/* d5 */ t_TM | t_I6p | t_OVER,
323/* d6 */ t_TM | t_I6p | t_OVER,
324/* d7 */ t_TM | t_I6p | t_OVER,
325/* d8 */ t_TM | t_I6p | t_OVER,
326/* d9 */ t_TM | t_I6p | t_OVER,
327/* da */ t_TM | t_I6p | t_OVER,
328/* db */ t_TM | t_I6p | t_OVER,
329/* dc */ t_TM | t_I6p | t_OVER,
330/* dd */ t_TM | t_I6p | t_OVER,
331/* de */ t_TM | t_I6p | t_OVER,
332/* df */ t_TM | t_I6p | t_OVER,
331333
332    t_TM | t_I6p,        /* e0 */
333    t_TM | t_I6p,        /* e1 */
334    t_TM | t_I6p,        /* e2 */
335    t_TM | t_I6p,        /* e3 */
336    t_TM | t_I6p,        /* e4 */
337    t_TM | t_I6p,        /* e5 */
338    t_TM | t_I6p,        /* e6 */
339    t_TM | t_I6p,        /* e7 */
340    t_TM | t_I6p,        /* e8 */
341    t_TM | t_I6p,        /* e9 */
342    t_TM | t_I6p,        /* ea */
343    t_TM | t_I6p,        /* eb */
344    t_TM | t_I6p,        /* ec */
345    t_TM | t_I6p,        /* ed */
346    t_TM | t_I6p,        /* ee */
347    t_TM | t_I6p,        /* ef */
334/* e0 */ t_TM | t_I6p | t_OVER,
335/* e1 */ t_TM | t_I6p | t_OVER,
336/* e2 */ t_TM | t_I6p | t_OVER,
337/* e3 */ t_TM | t_I6p | t_OVER,
338/* e4 */ t_TM | t_I6p | t_OVER,
339/* e5 */ t_TM | t_I6p | t_OVER,
340/* e6 */ t_TM | t_I6p | t_OVER,
341/* e7 */ t_TM | t_I6p | t_OVER,
342/* e8 */ t_TM | t_I6p | t_OVER,
343/* e9 */ t_TM | t_I6p | t_OVER,
344/* ea */ t_TM | t_I6p | t_OVER,
345/* eb */ t_TM | t_I6p | t_OVER,
346/* ec */ t_TM | t_I6p | t_OVER,
347/* ed */ t_TM | t_I6p | t_OVER,
348/* ee */ t_TM | t_I6p | t_OVER,
349/* ef */ t_TM | t_I6p | t_OVER,
348350
349    t_TM | t_I6p,        /* f0 */
350    t_TM | t_I6p,        /* f1 */
351    t_TM | t_I6p,        /* f2 */
352    t_TM | t_I6p,        /* f3 */
353    t_TM | t_I6p,        /* f4 */
354    t_TM | t_I6p,        /* f5 */
355    t_TM | t_I6p,        /* f6 */
356    t_TM | t_I6p,        /* f7 */
357    t_TM | t_I6p,        /* f8 */
358    t_TM | t_I6p,        /* f9 */
359    t_TM | t_I6p,        /* fa */
360    t_TM | t_I6p,        /* fb */
361    t_TM | t_I6p,        /* fc */
362    t_TM | t_I6p,        /* fd */
363    t_TM | t_I6p,        /* fe */
364    t_TM | t_I6p,        /* ff */
351/* f0 */ t_TM | t_I6p | t_OVER,
352/* f1 */ t_TM | t_I6p | t_OVER,
353/* f2 */ t_TM | t_I6p | t_OVER,
354/* f3 */ t_TM | t_I6p | t_OVER,
355/* f4 */ t_TM | t_I6p | t_OVER,
356/* f5 */ t_TM | t_I6p | t_OVER,
357/* f6 */ t_TM | t_I6p | t_OVER,
358/* f7 */ t_TM | t_I6p | t_OVER,
359/* f8 */ t_TM | t_I6p | t_OVER,
360/* f9 */ t_TM | t_I6p | t_OVER,
361/* fa */ t_TM | t_I6p | t_OVER,
362/* fb */ t_TM | t_I6p | t_OVER,
363/* fc */ t_TM | t_I6p | t_OVER,
364/* fd */ t_TM | t_I6p | t_OVER,
365/* fe */ t_TM | t_I6p | t_OVER,
366/* ff */ t_TM | t_I6p | t_OVER
365367};
366368
367369CPU_DISASSEMBLE( pps4 )
r242179r242180
380382    if (tok & t_I3c) {
381383        // 3 bit immediate, complemented
382384        UINT8 i = ~op & 7;
383        dst += sprintf(dst, "%x", i);
385        if (0 != i)  // only print if non-zero
386            dst += sprintf(dst, "%x", i);
384387    }
385388
386389    if (tok & t_I4) {
r242179r242180
419422        dst += sprintf(dst, "%03x", arg);
420423    }
421424
422    if (0x05 == op || 0x07 == op)   // RTN or RTNSK
425    if (tok & t_OVER)  // TL or TML
426            flags |= DASMFLAG_STEP_OVER;
427
428    if (tok & t_OUT)   // RTN or RTNSK
423429            flags |= DASMFLAG_STEP_OUT;
424430
425431    return (pc - PC) | flags | DASMFLAG_SUPPORTED;


Previous 199869 Revisions Next


© 1997-2024 The MAME Team