I286FN v30shift_ea8_data8(void) { // C0: shift EA8, DATA8 UINT8 *out; UINT op; UINT32 madr; REG8 cl; GET_PCBYTE(op) if (op >= 0xc0) { I286_WORKCLOCK(5); out = REG8_B20(op); } else { I286_WORKCLOCK(8); madr = CALC_EA(op); if (madr >= I286_MEMWRITEMAX) { GET_PCBYTE(cl) I286_WORKCLOCK(cl); if (!(op & 0x20)) { // rotate if (!(op & 0x10)) { cl = rotatebase16[cl]; } else { // rotate with carry cl = rotatebase09[cl]; } } else { cl = max(cl, 9); } sft_e8cl_table[(op >> 3) & 7](madr, cl); return; } out = mem + madr; }
I286_F6 _dec_ea8(UINT op) { UINT32 madr; UINT8 *out; REG8 res; if (op >= 0xc0) { I286_WORKCLOCK(2); out = REG8_B20(op); } else { I286_WORKCLOCK(7); madr = CALC_EA(op); if (madr >= I286_MEMWRITEMAX) { res = i286_memoryread(madr); DECBYTE(res) i286_memorywrite(madr, res); return; } out = mem + madr; } res = *out; DECBYTE(res) *out = (UINT8)res; }