Previous 199869 Revisions Next

r33733 Sunday 7th December, 2014 at 20:39:14 UTC by Jürgen Buchmüller
Fix the TM disassembly. Don't set m_I in ROP() and don't set m_I2 in ARG(). (nw)
[src/emu/cpu/pps4]pps4.c pps4dasm.c

trunk/src/emu/cpu/pps4/pps4.c
r242244r242245
115115 */
116116inline UINT8 pps4_device::ROP()
117117{
118    m_Ip = m_I;         // set previous opcode
119    m_I = m_direct->read_decrypted_byte(m_P & 0xFFF);
118    const UINT8 op = m_direct->read_decrypted_byte(m_P & 0xFFF);
119    m_Ip = m_I;         // save previous opcode
120120    m_P = (m_P + 1) & 0xFFF;
121121    m_icount -= 1;
122    return m_I;
122    return op;
123123}
124124
125125/**
r242244r242245
131131 */
132132inline UINT8 pps4_device::ARG()
133133{
134    m_I2 = m_direct->read_raw_byte(m_P & 0xFFF);
134    const UINT8 arg = m_direct->read_raw_byte(m_P & 0xFFF);
135135    m_P = (m_P + 1) & 0xFFF;
136136    m_icount -= 1;
137    return m_I2;
137    return arg;
138138}
139139
140140/**
r242244r242245
867867 */
868868void pps4_device::iLBL()
869869{
870    const UINT8 i8 = ~ARG() & 255;
870    m_I2 = ARG();
871871    // previous LB or LBL instruction?
872872    if (0xc0 == (m_Ip & 0xf0) || 0x00 == m_Ip) {
873873        LOG(("%s: skip prev:%02x op:%02x\n", __FUNCTION__, m_Ip, m_I));
874874        return;
875875    }
876    m_B = i8;
876    m_B = ~m_I2 & 255;  // Note: immediate is 1's complement
877877}
878878
879879/**
880 * @brief pps4_device::INCB
880 * @brief pps4_device::INCB Increment B lower, skip if 0000
881881 * OPCODE     cycles  mnemonic
882882 * -----------------------------
883883 * 0001 0111  1 cyc    INCB
r242244r242245
903903}
904904
905905/**
906 * @brief pps4_device::iDECB
906 * @brief pps4_device::iDECB Decrement B lower, skip if 1111
907907 * OPCODE     cycles  mnemonic
908908 * -----------------------------
909909 * 0001 1111  1 cyc    DECB
r242244r242245
11901190 */
11911191void pps4_device::iIOL()
11921192{
1193    const UINT8 ac = ~m_A & 15;
1193    UINT8 ac = ~m_A & 15;
11941194    m_I2 = ARG();
11951195    m_io->write_byte(m_I2, ac);
11961196    LOG(("%s: port:%02x <- %x\n", __FUNCTION__, m_I2, ac));
1197    m_A = ~m_io->read_byte(m_I2) & 15;
1198    LOG(("%s: port:%02x -> %x\n", __FUNCTION__, m_I2, m_A));
1197    ac = m_io->read_byte(m_I2) & 15;
1198    LOG(("%s: port:%02x -> %x\n", __FUNCTION__, m_I2, ac));
1199    m_A = ~ac & 15;
11991200}
12001201
12011202/**
trunk/src/emu/cpu/pps4/pps4dasm.c
r242244r242245
3333    t_I4c  = 1 <<  8,   /* immediate 4 bit constant, complemented */
3434    t_I4p  = 1 <<  9,   /* immediate 4 bit offset into page 3 */
3535    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) */
36    t_I6i  = 1 << 11,   /* immediate 6 bit indirect page 3 offset (16 ... 63) + followed by page 1 address */
37    t_I8   = 1 << 12,   /* immediate 8 bit constant (I/O port number) */
38    t_I8c  = 1 << 13,   /* immediate 8 bit constant inverted */
39    t_OVER = 1 << 14,   /* Debugger step over (CALL) */
40    t_OUT  = 1 << 15    /* Debugger step out (RETURN) */
4041}   pps4_token_e;
4142
4243static const char *token_str[t_COUNT] = {
r242244r242245
314315/* ce */ t_LB | t_I4p,
315316/* cf */ t_LB | t_I4p,
316317
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,
318/* d0 */ t_TM | t_I6i | t_OVER,
319/* d1 */ t_TM | t_I6i | t_OVER,
320/* d2 */ t_TM | t_I6i | t_OVER,
321/* d3 */ t_TM | t_I6i | t_OVER,
322/* d4 */ t_TM | t_I6i | t_OVER,
323/* d5 */ t_TM | t_I6i | t_OVER,
324/* d6 */ t_TM | t_I6i | t_OVER,
325/* d7 */ t_TM | t_I6i | t_OVER,
326/* d8 */ t_TM | t_I6i | t_OVER,
327/* d9 */ t_TM | t_I6i | t_OVER,
328/* da */ t_TM | t_I6i | t_OVER,
329/* db */ t_TM | t_I6i | t_OVER,
330/* dc */ t_TM | t_I6i | t_OVER,
331/* dd */ t_TM | t_I6i | t_OVER,
332/* de */ t_TM | t_I6i | t_OVER,
333/* df */ t_TM | t_I6i | t_OVER,
333334
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,
335/* e0 */ t_TM | t_I6i | t_OVER,
336/* e1 */ t_TM | t_I6i | t_OVER,
337/* e2 */ t_TM | t_I6i | t_OVER,
338/* e3 */ t_TM | t_I6i | t_OVER,
339/* e4 */ t_TM | t_I6i | t_OVER,
340/* e5 */ t_TM | t_I6i | t_OVER,
341/* e6 */ t_TM | t_I6i | t_OVER,
342/* e7 */ t_TM | t_I6i | t_OVER,
343/* e8 */ t_TM | t_I6i | t_OVER,
344/* e9 */ t_TM | t_I6i | t_OVER,
345/* ea */ t_TM | t_I6i | t_OVER,
346/* eb */ t_TM | t_I6i | t_OVER,
347/* ec */ t_TM | t_I6i | t_OVER,
348/* ed */ t_TM | t_I6i | t_OVER,
349/* ee */ t_TM | t_I6i | t_OVER,
350/* ef */ t_TM | t_I6i | t_OVER,
350351
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
352/* f0 */ t_TM | t_I6i | t_OVER,
353/* f1 */ t_TM | t_I6i | t_OVER,
354/* f2 */ t_TM | t_I6i | t_OVER,
355/* f3 */ t_TM | t_I6i | t_OVER,
356/* f4 */ t_TM | t_I6i | t_OVER,
357/* f5 */ t_TM | t_I6i | t_OVER,
358/* f6 */ t_TM | t_I6i | t_OVER,
359/* f7 */ t_TM | t_I6i | t_OVER,
360/* f8 */ t_TM | t_I6i | t_OVER,
361/* f9 */ t_TM | t_I6i | t_OVER,
362/* fa */ t_TM | t_I6i | t_OVER,
363/* fb */ t_TM | t_I6i | t_OVER,
364/* fc */ t_TM | t_I6i | t_OVER,
365/* fd */ t_TM | t_I6i | t_OVER,
366/* fe */ t_TM | t_I6i | t_OVER,
367/* ff */ t_TM | t_I6i | t_OVER
367368};
368369
369370CPU_DISASSEMBLE( pps4 )
r242244r242245
374375    UINT32 tok = table[op];
375376    char *dst = 0;
376377
377    if (0 == (tok & t_MASK))
378    if (0 == (tok & t_MASK)) {
378379        sprintf(buffer, "%s", token_str[tok & t_MASK]);
379    else
380    } else {
380381        dst = buffer + sprintf(buffer, "%-7s", token_str[tok & t_MASK]);
382    }
381383
382384    if (tok & t_I3c) {
383385        // 3 bit immediate, complemented
r242244r242245
410412        dst += sprintf(dst, "%x", (PC & ~63) | i);
411413    }
412414
415    if (tok & t_I6i) {
416        // 6 bit immediate offset into page 3
417        UINT16 i6p3 = (3 << 6) | (op & 63);
418        // 8 bit absolute offset at 0x0100
419        UINT16 addr = (1 << 8) | 0;     // ROM[ip3] can't be reached!?
420        (void)addr; // avoid unused variable warning
421        dst += sprintf(dst, "[%x]", i6p3);
422    }
423
413424    if (tok & t_I8) {
414425        // 8 bit immediate I/O port address
415426        UINT8 arg = ARG(pc++);


Previous 199869 Revisions Next


© 1997-2024 The MAME Team