📄 i8085.c
字号:
break;
case 0xaf: I8085_ICount -= 4; /* XRA A */
M_XRA(I.AF.B.h);
break;
case 0xb0: I8085_ICount -= 4; /* ORA B */
M_ORA(I.BC.B.h);
break;
case 0xb1: I8085_ICount -= 4; /* ORA C */
M_ORA(I.BC.B.l);
break;
case 0xb2: I8085_ICount -= 4; /* ORA D */
M_ORA(I.DE.B.h);
break;
case 0xb3: I8085_ICount -= 4; /* ORA E */
M_ORA(I.DE.B.l);
break;
case 0xb4: I8085_ICount -= 4; /* ORA H */
M_ORA(I.HL.B.h);
break;
case 0xb5: I8085_ICount -= 4; /* ORA L */
M_ORA(I.HL.B.l);
break;
case 0xb6: I8085_ICount -= 7; /* ORA M */
M_ORA(RDMEM(I.HL.D));
break;
case 0xb7: I8085_ICount -= 4; /* ORA A */
M_ORA(I.AF.B.h);
break;
case 0xb8: I8085_ICount -= 4; /* CMP B */
M_CMP(I.BC.B.h);
break;
case 0xb9: I8085_ICount -= 4; /* CMP C */
M_CMP(I.BC.B.l);
break;
case 0xba: I8085_ICount -= 4; /* CMP D */
M_CMP(I.DE.B.h);
break;
case 0xbb: I8085_ICount -= 4; /* CMP E */
M_CMP(I.DE.B.l);
break;
case 0xbc: I8085_ICount -= 4; /* CMP H */
M_CMP(I.HL.B.h);
break;
case 0xbd: I8085_ICount -= 4; /* CMP L */
M_CMP(I.HL.B.l);
break;
case 0xbe: I8085_ICount -= 7; /* CMP M */
M_CMP(RDMEM(I.HL.D));
break;
case 0xbf: I8085_ICount -= 4; /* CMP A */
M_CMP(I.AF.B.h);
break;
case 0xc0: I8085_ICount -= 5; /* RNZ */
M_RET( !(I.AF.B.l & ZF) );
break;
case 0xc1: I8085_ICount -= 10; /* POP B */
M_POP(BC);
break;
case 0xc2: I8085_ICount -= 10; /* JNZ nnnn */
M_JMP( !(I.AF.B.l & ZF) );
break;
case 0xc3: I8085_ICount -= 10; /* JMP nnnn */
M_JMP(1);
break;
case 0xc4: I8085_ICount -= 10; /* CNZ nnnn */
M_CALL( !(I.AF.B.l & ZF) );
break;
case 0xc5: I8085_ICount -= 11; /* PUSH B */
M_PUSH(BC);
break;
case 0xc6: I8085_ICount -= 7; /* ADI nn */
I.XX.B.l = RDOPARG();
M_ADD(I.XX.B.l);
break;
case 0xc7: I8085_ICount -= 11; /* RST 0 */
M_RST(0);
break;
case 0xc8: I8085_ICount -= 5; /* RZ */
M_RET( I.AF.B.l & ZF );
break;
case 0xc9: I8085_ICount -= 4; /* RET */
M_RET(1);
break;
case 0xca: I8085_ICount -= 10; /* JZ nnnn */
M_JMP( I.AF.B.l & ZF );
break;
case 0xcb: I8085_ICount -= 4; /* ???? */
break;
case 0xcc: I8085_ICount -= 10; /* CZ nnnn */
M_CALL( I.AF.B.l & ZF );
break;
case 0xcd: I8085_ICount -= 10; /* CALL nnnn */
M_CALL(1);
break;
case 0xce: I8085_ICount -= 7; /* ACI nn */
I.XX.B.l = RDOPARG();
M_ADC(I.XX.B.l);
break;
case 0xcf: I8085_ICount -= 11; /* RST 1 */
M_RST(1);
break;
case 0xd0: I8085_ICount -= 5; /* RNC */
M_RET( !(I.AF.B.l & CF) );
break;
case 0xd1: I8085_ICount -= 10; /* POP D */
M_POP(DE);
break;
case 0xd2: I8085_ICount -= 10; /* JNC nnnn */
M_JMP( !(I.AF.B.l & CF) );
break;
case 0xd3: I8085_ICount -= 11; /* OUT nn */
M_OUT;
break;
case 0xd4: I8085_ICount -= 10; /* CNC nnnn */
M_CALL( !(I.AF.B.l & CF) );
break;
case 0xd5: I8085_ICount -= 11; /* PUSH D */
M_PUSH(DE);
break;
case 0xd6: I8085_ICount -= 7; /* SUI nn */
I.XX.B.l = RDOPARG();
M_SUB(I.XX.B.l);
break;
case 0xd7: I8085_ICount -= 11; /* RST 2 */
M_RST(2);
break;
case 0xd8: I8085_ICount -= 5; /* RC */
M_RET( I.AF.B.l & CF );
break;
case 0xd9: I8085_ICount -= 4; /* ???? */
break;
case 0xda: I8085_ICount -= 10; /* JC nnnn */
M_JMP( I.AF.B.l & CF );
break;
case 0xdb: I8085_ICount -= 11; /* IN nn */
M_IN;
break;
case 0xdc: I8085_ICount -= 10; /* CC nnnn */
M_CALL( I.AF.B.l & CF );
break;
case 0xdd: I8085_ICount -= 4; /* ???? */
break;
case 0xde: I8085_ICount -= 7; /* SBI nn */
I.XX.B.l = RDOPARG();
M_SBB(I.XX.B.l);
break;
case 0xdf: I8085_ICount -= 11; /* RST 3 */
M_RST(3);
break;
case 0xe0: I8085_ICount -= 5; /* RPE */
M_RET( !(I.AF.B.l & VF) );
break;
case 0xe1: I8085_ICount -= 10; /* POP H */
M_POP(HL);
break;
case 0xe2: I8085_ICount -= 10; /* JPE nnnn */
M_JMP( !(I.AF.B.l & VF) );
break;
case 0xe3: I8085_ICount -= 19; /* XTHL */
M_POP(XX);
M_PUSH(HL);
I.HL.D = I.XX.D;
break;
case 0xe4: I8085_ICount -= 10; /* CPE nnnn */
M_CALL( !(I.AF.B.l & VF) );
break;
case 0xe5: I8085_ICount -= 11; /* PUSH H */
M_PUSH(HL);
break;
case 0xe6: I8085_ICount -= 7; /* ANI nn */
I.XX.B.l = RDOPARG();
M_ANA(I.XX.B.l);
break;
case 0xe7: I8085_ICount -= 11; /* RST 4 */
M_RST(4);
break;
case 0xe8: I8085_ICount -= 5; /* RPO */
M_RET( I.AF.B.l & VF );
break;
case 0xe9: I8085_ICount -= 4; /* PCHL */
I.PC.D = I.HL.W.l;
change_pc16(I.PC.D);
break;
case 0xea: I8085_ICount -= 10; /* JPO nnnn */
M_JMP( I.AF.B.l & VF );
break;
case 0xeb: I8085_ICount -= 4; /* XCHG */
I.XX.D = I.DE.D;
I.DE.D = I.HL.D;
I.HL.D = I.XX.D;
break;
case 0xec: I8085_ICount -= 10; /* CPO nnnn */
M_CALL( I.AF.B.l & VF );
break;
case 0xed: I8085_ICount -= 4; /* ???? */
break;
case 0xee: I8085_ICount -= 7; /* XRI nn */
I.XX.B.l = RDOPARG();
M_XRA(I.XX.B.l);
break;
case 0xef: I8085_ICount -= 11; /* RST 5 */
M_RST(5);
break;
case 0xf0: I8085_ICount -= 5; /* RP */
M_RET( !(I.AF.B.l&SF) );
break;
case 0xf1: I8085_ICount -= 10; /* POP A */
M_POP(AF);
break;
case 0xf2: I8085_ICount -= 10; /* JP nnnn */
M_JMP( !(I.AF.B.l & SF) );
break;
case 0xf3: I8085_ICount -= 4; /* DI */
/* remove interrupt enable */
I.IM &= ~IM_IEN;
break;
case 0xf4: I8085_ICount -= 10; /* CP nnnn */
M_CALL( !(I.AF.B.l & SF) );
break;
case 0xf5: I8085_ICount -= 11; /* PUSH A */
M_PUSH(AF);
break;
case 0xf6: I8085_ICount -= 7; /* ORI nn */
I.XX.B.l = RDOPARG();
M_ORA(I.XX.B.l);
break;
case 0xf7: I8085_ICount -= 11; /* RST 6 */
M_RST(6);
break;
case 0xf8: I8085_ICount -= 5; /* RM */
M_RET( I.AF.B.l & SF );
break;
case 0xf9: I8085_ICount -= 6; /* SPHL */
I.SP.D = I.HL.D;
break;
case 0xfa: I8085_ICount -= 10; /* JM nnnn */
M_JMP( I.AF.B.l & SF );
break;
case 0xfb: I8085_ICount -= 4; /* EI */
/* set interrupt enable */
I.IM |= IM_IEN;
/* remove serviced IRQ flag */
I.IREQ &= ~I.ISRV;
/* reset serviced IRQ */
I.ISRV = 0;
/* find highest priority IREQ flag with
IM enabled and schedule for execution */
if (!(I.IM & IM_RST75) && (I.IREQ & IM_RST75))
{
I.ISRV = IM_RST75;
I.IRQ2 = ADDR_RST75;
}
else
if (!(I.IM & IM_RST65) && (I.IREQ & IM_RST65))
{
I.ISRV = IM_RST65;
I.IRQ2 = ADDR_RST65;
}
else
if (!(I.IM & IM_RST55) && (I.IREQ & IM_RST55))
{
I.ISRV = IM_RST55;
I.IRQ2 = ADDR_RST55;
}
else
if (!(I.IM & IM_INTR) && (I.IREQ & IM_INTR))
{
I.ISRV = IM_INTR;
I.IRQ2 = I.INTR;
}
break;
case 0xfc: I8085_ICount -= 10; /* CM nnnn */
M_CALL( I.AF.B.l & SF );
break;
case 0xfd: I8085_ICount -= 4; /* ???? */
break;
case 0xfe: I8085_ICount -= 7; /* CPI nn */
I.XX.B.l = RDOPARG();
M_CMP(I.XX.B.l);
break;
case 0xff: I8085_ICount -= 11; /* RST 7 */
M_RST(7);
break;
}
}
INLINE void Interrupt(void)
{
/* if the CPU was halted */
if (I.HALT)
{
I.PC.W.l++; /* skip HALT instr */
I.HALT = 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -