⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 i8085.c

📁 这个是延伸mame的在wince平台下的游戏模拟器的代码
💻 C
📖 第 1 页 / 共 4 页
字号:
                        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 + -