--- np2/generic/unasm.c 2004/02/18 02:03:36 1.1 +++ np2/generic/unasm.c 2004/03/07 01:23:14 1.3 @@ -360,7 +360,7 @@ opeana_ea: if (ptr > term) { return(0); } - p = set_hex(p, LOADINTELWORD(ptr - 4), 16); + p = set_hex(p, LOADINTELDWORD(ptr - 4), 32); } *p++ = ']'; break; @@ -392,14 +392,15 @@ opeana_ea: f = (flag >> UAFLAG_REP) & UAFLAG_REPMASK; if (f) { p = set_str(p, rstr.ope[mnemonic]); - mnemonic = RSTR_REP; + mnemonic = RSTR_REP + (f - 1); } f = (flag >> UAFLAG_SOR) & UAFLAG_SOMASK; if (f) { - p[0] = rstr.reg[RSTR_SEG][f - 1][0]; + p[0] = ' '; + p[1] = rstr.reg[RSTR_SEG][f - 1][0]; p[1] = rstr.reg[RSTR_SEG][f - 1][1]; - p[2] = ':'; - p += 3; + p[3] = ':'; + p += 4; } break; @@ -430,20 +431,31 @@ opeana_ea: if (ptr > term) { return(0); } - addr += LOADINTELWORD(ptr - 4); + addr += LOADINTELDWORD(ptr - 4); addr += (ptr - org); p = set_hex(p, addr, 32); } break; case OP1_FAR: - ptr += 4; - if (ptr > term) { - return(0); + if (!(flag & (1 << UAFLAG_D))) { + ptr += 4; + if (ptr > term) { + return(0); + } + p = set_hex(p, LOADINTELWORD(ptr - 2), 16); + *p++ = ':'; + p = set_hex(p, LOADINTELWORD(ptr - 4), 16); + } + else { + ptr += 6; + if (ptr > term) { + return(0); + } + p = set_hex(p, LOADINTELWORD(ptr - 2), 16); + *p++ = ':'; + p = set_hex(p, LOADINTELDWORD(ptr - 6), 32); } - p = set_hex(p, LOADINTELWORD(ptr - 2), 16); - *p++ = ':'; - p = set_hex(p, LOADINTELWORD(ptr - 4), 16); break; case OP1_I10: