示例#1
0
 public Opcode(string mneu, ushort length, int cycles, OpcodeHandler handler, List <string> args)
 {
     Length          = length;
     EffectiveLength = Length;
     Mneumonic       = mneu;
     Handler         = handler;
     Args            = args;
     Cycles          = cycles;
 }
示例#2
0
 public TCPClient(Client client, OpcodeHandler handler)
 {
     this.handler = handler;
     this.client  = client;
     handler.RegisterHandler();
 }
示例#3
0
 public Opcode(OpcodeAttribute attr, OpcodeHandler handler)
 {
     this.attr = attr;
     this.handler = handler;
 }
示例#4
0
        void InstallOpcodes()
        {
            Opcodes = new OpcodeHandler[0x100];
            ushort EA;

            Opcodes[0x65] = delegate { EA = aZPG();  clk(3); iADC(Mem[EA]); };
            Opcodes[0x75] = delegate { EA = aZPX();  clk(4); iADC(Mem[EA]); };
            Opcodes[0x61] = delegate { EA = aIDX();  clk(6); iADC(Mem[EA]); };
            Opcodes[0x71] = delegate { EA = aIDY(1); clk(5); iADC(Mem[EA]); };
            Opcodes[0x79] = delegate { EA = aABY(1); clk(4); iADC(Mem[EA]); };
            Opcodes[0x6d] = delegate { EA = aABS();  clk(4); iADC(Mem[EA]); };
            Opcodes[0x7d] = delegate { EA = aABX(1); clk(4); iADC(Mem[EA]); };
            Opcodes[0x69] = delegate { /*aIMM*/ clk(2); iADC(Mem[PC++]); };

            Opcodes[0x25] = delegate { EA = aZPG();  clk(3); iAND(Mem[EA]); }; // may be 2 clk
            Opcodes[0x35] = delegate { EA = aZPX();  clk(4); iAND(Mem[EA]); }; // may be 3 clk
            Opcodes[0x21] = delegate { EA = aIDX();  clk(6); iAND(Mem[EA]); };
            Opcodes[0x31] = delegate { EA = aIDY(1); clk(5); iAND(Mem[EA]); };
            Opcodes[0x2d] = delegate { EA = aABS();  clk(4); iAND(Mem[EA]); };
            Opcodes[0x39] = delegate { EA = aABY(1); clk(4); iAND(Mem[EA]); };
            Opcodes[0x3d] = delegate { EA = aABX(1); clk(4); iAND(Mem[EA]); };
            Opcodes[0x29] = delegate { /*aIMM*/ clk(2); iAND(Mem[PC++]); };

            Opcodes[0x06] = delegate { EA = aZPG();  clk(5); Mem[EA] = iASL(Mem[EA]); };
            Opcodes[0x16] = delegate { EA = aZPX();  clk(6); Mem[EA] = iASL(Mem[EA]); };
            Opcodes[0x0e] = delegate { EA = aABS();  clk(6); Mem[EA] = iASL(Mem[EA]); };
            Opcodes[0x1e] = delegate { EA = aABX(0); clk(7); Mem[EA] = iASL(Mem[EA]); };
            Opcodes[0x0a] = delegate { /*aACC*/ clk(2);       A = iASL(A); };

            Opcodes[0x24] = delegate { EA = aZPG();  clk(3); iBIT(Mem[EA]); };
            Opcodes[0x2c] = delegate { EA = aABS();  clk(4); iBIT(Mem[EA]); };

            Opcodes[0x10] = delegate { EA = aREL();  clk(2); br(!fN, EA); /* BPL */ };
            Opcodes[0x30] = delegate { EA = aREL();  clk(2); br(fN, EA); /* BMI */ };
            Opcodes[0x50] = delegate { EA = aREL();  clk(2); br(!fV, EA); /* BVC */ };
            Opcodes[0x70] = delegate { EA = aREL();  clk(2); br(fV, EA); /* BVS */ };
            Opcodes[0x90] = delegate { EA = aREL();  clk(2); br(!fC, EA); /* BCC */ };
            Opcodes[0xb0] = delegate { EA = aREL();  clk(2); br(fC, EA); /* BCS */ };
            Opcodes[0xd0] = delegate { EA = aREL();  clk(2); br(!fZ, EA); /* BNE */ };
            Opcodes[0xf0] = delegate { EA = aREL();  clk(2); br(fZ, EA); /* BEQ */ };

            Opcodes[0x00] = delegate { /*aIMP*/ clk(7); iBRK(); };

            Opcodes[0x18] = delegate { /*aIMP*/ clk(2); iCLC(); };

            Opcodes[0xd8] = delegate { /*aIMP*/ clk(2); iCLD(); };

            Opcodes[0x58] = delegate { /*aIMP*/ clk(2); iCLI(); };

            Opcodes[0xb8] = delegate { /*aIMP*/ clk(2); iCLV(); };

            Opcodes[0xc5] = delegate { EA = aZPG();  clk(3); iCMP(Mem[EA]); };
            Opcodes[0xd5] = delegate { EA = aZPX();  clk(4); iCMP(Mem[EA]); };
            Opcodes[0xc1] = delegate { EA = aIDX();  clk(6); iCMP(Mem[EA]); };
            Opcodes[0xd1] = delegate { EA = aIDY(1); clk(5); iCMP(Mem[EA]); };
            Opcodes[0xcd] = delegate { EA = aABS();  clk(4); iCMP(Mem[EA]); };
            Opcodes[0xdd] = delegate { EA = aABX(1); clk(4); iCMP(Mem[EA]); };
            Opcodes[0xd9] = delegate { EA = aABY(1); clk(4); iCMP(Mem[EA]); };
            Opcodes[0xc9] = delegate { /*aIMM*/ clk(2); iCMP(Mem[PC++]); };

            Opcodes[0xe4] = delegate { EA = aZPG();  clk(3); iCPX(Mem[EA]); };
            Opcodes[0xec] = delegate { EA = aABS();  clk(4); iCPX(Mem[EA]); };
            Opcodes[0xe0] = delegate { /*aIMM*/ clk(2); iCPX(Mem[PC++]); };

            Opcodes[0xc4] = delegate { EA = aZPG();  clk(3); iCPY(Mem[EA]); };
            Opcodes[0xcc] = delegate { EA = aABS();  clk(4); iCPY(Mem[EA]); };
            Opcodes[0xc0] = delegate { /*aIMM*/ clk(2); iCPY(Mem[PC++]); };

            Opcodes[0xc6] = delegate { EA = aZPG();  clk(5); Mem[EA] = iDEC(Mem[EA]); };
            Opcodes[0xd6] = delegate { EA = aZPX();  clk(6); Mem[EA] = iDEC(Mem[EA]); };
            Opcodes[0xce] = delegate { EA = aABS();  clk(6); Mem[EA] = iDEC(Mem[EA]); };
            Opcodes[0xde] = delegate { EA = aABX(0); clk(7); Mem[EA] = iDEC(Mem[EA]); };

            Opcodes[0xca] = delegate { /*aIMP*/ clk(2); iDEX(); };

            Opcodes[0x88] = delegate { /*aIMP*/ clk(2); iDEY(); };

            Opcodes[0x45] = delegate { EA = aZPG();  clk(3); iEOR(Mem[EA]); };
            Opcodes[0x55] = delegate { EA = aZPX();  clk(4); iEOR(Mem[EA]); };
            Opcodes[0x41] = delegate { EA = aIDX();  clk(6); iEOR(Mem[EA]); };
            Opcodes[0x51] = delegate { EA = aIDY(1); clk(5); iEOR(Mem[EA]); };
            Opcodes[0x4d] = delegate { EA = aABS();  clk(4); iEOR(Mem[EA]); };
            Opcodes[0x5d] = delegate { EA = aABX(1); clk(4); iEOR(Mem[EA]); };
            Opcodes[0x59] = delegate { EA = aABY(1); clk(4); iEOR(Mem[EA]); };
            Opcodes[0x49] = delegate { /*aIMM*/ clk(2); iEOR(Mem[PC++]); };

            Opcodes[0xe6] = delegate { EA = aZPG();  clk(5); Mem[EA] = iINC(Mem[EA]); };
            Opcodes[0xf6] = delegate { EA = aZPX();  clk(6); Mem[EA] = iINC(Mem[EA]); };
            Opcodes[0xee] = delegate { EA = aABS();  clk(6); Mem[EA] = iINC(Mem[EA]); };
            Opcodes[0xfe] = delegate { EA = aABX(0); clk(7); Mem[EA] = iINC(Mem[EA]); };

            Opcodes[0xe8] = delegate { /*aIMP*/ clk(2); iINX(); };

            Opcodes[0xc8] = delegate { /*aIMP*/ clk(2); iINY(); };

            Opcodes[0xa5] = delegate { EA = aZPG();  clk(3); iLDA(Mem[EA]); };
            Opcodes[0xb5] = delegate { EA = aZPX();  clk(4); iLDA(Mem[EA]); };
            Opcodes[0xa1] = delegate { EA = aIDX();  clk(6); iLDA(Mem[EA]); };
            Opcodes[0xb1] = delegate { EA = aIDY(1); clk(5); iLDA(Mem[EA]); };
            Opcodes[0xad] = delegate { EA = aABS();  clk(4); iLDA(Mem[EA]); };
            Opcodes[0xbd] = delegate { EA = aABX(1); clk(4); iLDA(Mem[EA]); };
            Opcodes[0xb9] = delegate { EA = aABY(1); clk(4); iLDA(Mem[EA]); };
            Opcodes[0xa9] = delegate { /*aIMM*/ clk(2); iLDA(Mem[PC++]); };

            Opcodes[0xa6] = delegate { EA = aZPG();  clk(3); iLDX(Mem[EA]); };
            Opcodes[0xb6] = delegate { EA = aZPY();  clk(4); iLDX(Mem[EA]); };
            Opcodes[0xae] = delegate { EA = aABS();  clk(4); iLDX(Mem[EA]); };
            Opcodes[0xbe] = delegate { EA = aABY(1); clk(4); iLDX(Mem[EA]); };
            Opcodes[0xa2] = delegate { /*aIMM*/ clk(2); iLDX(Mem[PC++]); };

            Opcodes[0xa4] = delegate { EA = aZPG();  clk(3); iLDY(Mem[EA]); };
            Opcodes[0xb4] = delegate { EA = aZPX();  clk(4); iLDY(Mem[EA]); };
            Opcodes[0xac] = delegate { EA = aABS();  clk(4); iLDY(Mem[EA]); };
            Opcodes[0xbc] = delegate { EA = aABX(1); clk(4); iLDY(Mem[EA]); };
            Opcodes[0xa0] = delegate { /*aIMM*/ clk(2); iLDY(Mem[PC++]); };

            Opcodes[0x46] = delegate { EA = aZPG();  clk(5); Mem[EA] = iLSR(Mem[EA]); };
            Opcodes[0x56] = delegate { EA = aZPX();  clk(6); Mem[EA] = iLSR(Mem[EA]); };
            Opcodes[0x4e] = delegate { EA = aABS();  clk(6); Mem[EA] = iLSR(Mem[EA]); };
            Opcodes[0x5e] = delegate { EA = aABX(0); clk(7); Mem[EA] = iLSR(Mem[EA]); };
            Opcodes[0x4a] = delegate { /*aACC*/ clk(2);       A = iLSR(A); };

            Opcodes[0x4c] = delegate { EA = aABS();  clk(3); iJMP(EA); };
            Opcodes[0x6c] = delegate { EA = aIND();  clk(5); iJMP(EA); };

            Opcodes[0x20] = delegate { EA = aABS();  clk(6); iJSR(EA); };

            Opcodes[0xea] = delegate { /*aIMP*/ clk(2); iNOP(); };

            Opcodes[0x05] = delegate { EA = aZPG();  clk(3); iORA(Mem[EA]); }; // may be 2 clk
            Opcodes[0x15] = delegate { EA = aZPX();  clk(4); iORA(Mem[EA]); }; // may be 3 clk
            Opcodes[0x01] = delegate { EA = aIDX();  clk(6); iORA(Mem[EA]); };
            Opcodes[0x11] = delegate { EA = aIDY(1); clk(5); iORA(Mem[EA]); };
            Opcodes[0x0d] = delegate { EA = aABS();  clk(4); iORA(Mem[EA]); };
            Opcodes[0x1d] = delegate { EA = aABX(1); clk(4); iORA(Mem[EA]); };
            Opcodes[0x19] = delegate { EA = aABY(1); clk(4); iORA(Mem[EA]); };
            Opcodes[0x09] = delegate { /*aIMM*/ clk(2); iORA(Mem[PC++]); };

            Opcodes[0x48] = delegate { /*aIMP*/ clk(3); iPHA(); };

            Opcodes[0x68] = delegate { /*aIMP*/ clk(4); iPLA(); };

            Opcodes[0x08] = delegate { /*aIMP*/ clk(3); iPHP(); };

            Opcodes[0x28] = delegate { /*aIMP*/ clk(4); iPLP(); };

            Opcodes[0x26] = delegate { EA = aZPG();  clk(5); Mem[EA] = iROL(Mem[EA]); };
            Opcodes[0x36] = delegate { EA = aZPX();  clk(6); Mem[EA] = iROL(Mem[EA]); };
            Opcodes[0x2e] = delegate { EA = aABS();  clk(6); Mem[EA] = iROL(Mem[EA]); };
            Opcodes[0x3e] = delegate { EA = aABX(0); clk(7); Mem[EA] = iROL(Mem[EA]); };
            Opcodes[0x2a] = delegate { /*aACC*/ clk(2);       A = iROL(A); };

            Opcodes[0x66] = delegate { EA = aZPG();  clk(5); Mem[EA] = iROR(Mem[EA]); };
            Opcodes[0x76] = delegate { EA = aZPX();  clk(6); Mem[EA] = iROR(Mem[EA]); };
            Opcodes[0x6e] = delegate { EA = aABS();  clk(6); Mem[EA] = iROR(Mem[EA]); };
            Opcodes[0x7e] = delegate { EA = aABX(0); clk(7); Mem[EA] = iROR(Mem[EA]); };
            Opcodes[0x6a] = delegate { /*aACC*/ clk(2);       A = iROR(A); };

            Opcodes[0x40] = delegate { /*aIMP*/ clk(6); iRTI(); };

            Opcodes[0x60] = delegate { /*aIMP*/ clk(6); iRTS(); };

            Opcodes[0xe5] = delegate { EA = aZPG();  clk(3); iSBC(Mem[EA]); };
            Opcodes[0xf5] = delegate { EA = aZPX();  clk(4); iSBC(Mem[EA]); };
            Opcodes[0xe1] = delegate { EA = aIDX();  clk(6); iSBC(Mem[EA]); };
            Opcodes[0xf1] = delegate { EA = aIDY(1); clk(5); iSBC(Mem[EA]); };
            Opcodes[0xed] = delegate { EA = aABS();  clk(4); iSBC(Mem[EA]); };
            Opcodes[0xfd] = delegate { EA = aABX(1); clk(4); iSBC(Mem[EA]); };
            Opcodes[0xf9] = delegate { EA = aABY(1); clk(4); iSBC(Mem[EA]); };
            Opcodes[0xe9] = delegate { /*aIMM*/ clk(2); iSBC(Mem[PC++]); };

            Opcodes[0x38] = delegate { /*aIMP*/ clk(2); iSEC(); };

            Opcodes[0xf8] = delegate { /*aIMP*/ clk(2); iSED(); };

            Opcodes[0x78] = delegate { /*aIMP*/ clk(2); iSEI(); };

            Opcodes[0x85] = delegate { EA = aZPG();  clk(3); Mem[EA] = iSTA(); };
            Opcodes[0x95] = delegate { EA = aZPX();  clk(4); Mem[EA] = iSTA(); };
            Opcodes[0x81] = delegate { EA = aIDX();  clk(6); Mem[EA] = iSTA(); };
            Opcodes[0x91] = delegate { EA = aIDY(0); clk(6); Mem[EA] = iSTA(); };
            Opcodes[0x8d] = delegate { EA = aABS();  clk(4); Mem[EA] = iSTA(); };
            Opcodes[0x99] = delegate { EA = aABY(0); clk(5); Mem[EA] = iSTA(); };
            Opcodes[0x9d] = delegate { EA = aABX(0); clk(5); Mem[EA] = iSTA(); };

            Opcodes[0x86] = delegate { EA = aZPG();  clk(3); Mem[EA] = iSTX(); };
            Opcodes[0x96] = delegate { EA = aZPY();  clk(4); Mem[EA] = iSTX(); };
            Opcodes[0x8e] = delegate { EA = aABS();  clk(4); Mem[EA] = iSTX(); };

            Opcodes[0x84] = delegate { EA = aZPG();  clk(3); Mem[EA] = iSTY(); };
            Opcodes[0x94] = delegate { EA = aZPX();  clk(4); Mem[EA] = iSTY(); };
            Opcodes[0x8c] = delegate { EA = aABS();  clk(4); Mem[EA] = iSTY(); };

            Opcodes[0xaa] = delegate { /*aIMP*/ clk(2); iTAX(); };

            Opcodes[0xa8] = delegate { /*aIMP*/ clk(2); iTAY(); };

            Opcodes[0xba] = delegate { /*aIMP*/ clk(2); iTSX(); };

            Opcodes[0x8a] = delegate { /*aIMP*/ clk(2); iTXA(); };

            Opcodes[0x9a] = delegate { /*aIMP*/ clk(2); iTXS(); };

            Opcodes[0x98] = delegate { /*aIMP*/ clk(2); iTYA(); };

            // Illegal opcodes
            foreach (int opCode in new ushort[] { 0x02, 0x12, 0x22, 0x32, 0x42, 0x52, 0x62, 0x72, 0x92, 0xb2, 0xd2, 0xf2 })
            {
                Opcodes[opCode] = delegate { clk(2); iKIL(); };
            }
            Opcodes[0x3f] = delegate { EA = aABX(0); clk(4); iRLA(Mem[EA]); };
            Opcodes[0xa7] = delegate { EA = aZPX();  clk(3); iLAX(Mem[EA]); };
            Opcodes[0xb3] = delegate { EA = aIDY(0); clk(6); iLAX(Mem[EA]); };
            Opcodes[0xef] = delegate { EA = aABS();  clk(6); iISB(Mem[EA]); };
            Opcodes[0x0c] = delegate { EA = aABS();  clk(2); iNOP(); };
            foreach (int opCode in new ushort[] { 0x1c, 0x3c, 0x5c, 0x7c, 0x9c, 0xdc, 0xfc })
            {
                Opcodes[opCode] = delegate { EA = aABX(0); clk(2); iNOP(); };
            }
            Opcodes[0x83] = delegate { EA = aIDX();  clk(6); Mem[EA] = iSAX(); };
            Opcodes[0x87] = delegate { EA = aZPG();  clk(3); Mem[EA] = iSAX(); };
            Opcodes[0x8f] = delegate { EA = aABS();  clk(4); Mem[EA] = iSAX(); };
            Opcodes[0x97] = delegate { EA = aZPY();  clk(4); Mem[EA] = iSAX(); };
            Opcodes[0xa3] = delegate { EA = aIDX();  clk(6); iLAX(Mem[EA]); };
            Opcodes[0xb7] = delegate { EA = aZPY();  clk(4); iLAX(Mem[EA]); };
            Opcodes[0xaf] = delegate { EA = aABS();  clk(5); iLAX(Mem[EA]); };
            Opcodes[0xbf] = delegate { EA = aABY(0); clk(6); iLAX(Mem[EA]); };
            Opcodes[0xff] = delegate { EA = aABX(0); clk(7); iISB(Mem[EA]); };

            OpcodeHandler opNULL = () => Log("{0}:**UNKNOWN OPCODE: ${1:x2} at ${2:x4}\n", this, Mem[(ushort)(PC - 1)], PC - 1);

            for (var i = 0; i < Opcodes.Length; i++)
            {
                if (Opcodes[i] == null)
                {
                    Opcodes[i] = opNULL;
                }
            }
        }
示例#5
0
 private void InstallOpcodeHandlers()
 {
     Opcodes[0x65] = new OpcodeHandler(op65);
     Opcodes[0x75] = new OpcodeHandler(op75);
     Opcodes[0x61] = new OpcodeHandler(op61);
     Opcodes[0x71] = new OpcodeHandler(op71);
     Opcodes[0x79] = new OpcodeHandler(op79);
     Opcodes[0x6d] = new OpcodeHandler(op6d);
     Opcodes[0x7d] = new OpcodeHandler(op7d);
     Opcodes[0x69] = new OpcodeHandler(op69);
     Opcodes[0x25] = new OpcodeHandler(op25);
     Opcodes[0x35] = new OpcodeHandler(op35);
     Opcodes[0x21] = new OpcodeHandler(op21);
     Opcodes[0x31] = new OpcodeHandler(op31);
     Opcodes[0x2d] = new OpcodeHandler(op2d);
     Opcodes[0x39] = new OpcodeHandler(op39);
     Opcodes[0x3d] = new OpcodeHandler(op3d);
     Opcodes[0x29] = new OpcodeHandler(op29);
     Opcodes[0x06] = new OpcodeHandler(op06);
     Opcodes[0x16] = new OpcodeHandler(op16);
     Opcodes[0x0e] = new OpcodeHandler(op0e);
     Opcodes[0x1e] = new OpcodeHandler(op1e);
     Opcodes[0x0a] = new OpcodeHandler(op0a);
     Opcodes[0x24] = new OpcodeHandler(op24);
     Opcodes[0x2c] = new OpcodeHandler(op2c);
     Opcodes[0x10] = new OpcodeHandler(op10);
     Opcodes[0x30] = new OpcodeHandler(op30);
     Opcodes[0x50] = new OpcodeHandler(op50);
     Opcodes[0x70] = new OpcodeHandler(op70);
     Opcodes[0x90] = new OpcodeHandler(op90);
     Opcodes[0xb0] = new OpcodeHandler(opb0);
     Opcodes[0xd0] = new OpcodeHandler(opd0);
     Opcodes[0xf0] = new OpcodeHandler(opf0);
     Opcodes[0x00] = new OpcodeHandler(op00);
     Opcodes[0x18] = new OpcodeHandler(op18);
     Opcodes[0xd8] = new OpcodeHandler(opd8);
     Opcodes[0x58] = new OpcodeHandler(op58);
     Opcodes[0xb8] = new OpcodeHandler(opb8);
     Opcodes[0xc5] = new OpcodeHandler(opc5);
     Opcodes[0xd5] = new OpcodeHandler(opd5);
     Opcodes[0xc1] = new OpcodeHandler(opc1);
     Opcodes[0xd1] = new OpcodeHandler(opd1);
     Opcodes[0xcd] = new OpcodeHandler(opcd);
     Opcodes[0xdd] = new OpcodeHandler(opdd);
     Opcodes[0xd9] = new OpcodeHandler(opd9);
     Opcodes[0xc9] = new OpcodeHandler(opc9);
     Opcodes[0xe4] = new OpcodeHandler(ope4);
     Opcodes[0xec] = new OpcodeHandler(opec);
     Opcodes[0xe0] = new OpcodeHandler(ope0);
     Opcodes[0xc4] = new OpcodeHandler(opc4);
     Opcodes[0xcc] = new OpcodeHandler(opcc);
     Opcodes[0xc0] = new OpcodeHandler(opc0);
     Opcodes[0xc6] = new OpcodeHandler(opc6);
     Opcodes[0xd6] = new OpcodeHandler(opd6);
     Opcodes[0xce] = new OpcodeHandler(opce);
     Opcodes[0xde] = new OpcodeHandler(opde);
     Opcodes[0xca] = new OpcodeHandler(opca);
     Opcodes[0x88] = new OpcodeHandler(op88);
     Opcodes[0x45] = new OpcodeHandler(op45);
     Opcodes[0x55] = new OpcodeHandler(op55);
     Opcodes[0x41] = new OpcodeHandler(op41);
     Opcodes[0x51] = new OpcodeHandler(op51);
     Opcodes[0x4d] = new OpcodeHandler(op4d);
     Opcodes[0x5d] = new OpcodeHandler(op5d);
     Opcodes[0x59] = new OpcodeHandler(op59);
     Opcodes[0x49] = new OpcodeHandler(op49);
     Opcodes[0xe6] = new OpcodeHandler(ope6);
     Opcodes[0xf6] = new OpcodeHandler(opf6);
     Opcodes[0xee] = new OpcodeHandler(opee);
     Opcodes[0xfe] = new OpcodeHandler(opfe);
     Opcodes[0xe8] = new OpcodeHandler(ope8);
     Opcodes[0xc8] = new OpcodeHandler(opc8);
     Opcodes[0xa5] = new OpcodeHandler(opa5);
     Opcodes[0xb5] = new OpcodeHandler(opb5);
     Opcodes[0xa1] = new OpcodeHandler(opa1);
     Opcodes[0xb1] = new OpcodeHandler(opb1);
     Opcodes[0xad] = new OpcodeHandler(opad);
     Opcodes[0xbd] = new OpcodeHandler(opbd);
     Opcodes[0xb9] = new OpcodeHandler(opb9);
     Opcodes[0xa9] = new OpcodeHandler(opa9);
     Opcodes[0xa6] = new OpcodeHandler(opa6);
     Opcodes[0xb6] = new OpcodeHandler(opb6);
     Opcodes[0xae] = new OpcodeHandler(opae);
     Opcodes[0xbe] = new OpcodeHandler(opbe);
     Opcodes[0xa2] = new OpcodeHandler(opa2);
     Opcodes[0xa4] = new OpcodeHandler(opa4);
     Opcodes[0xb4] = new OpcodeHandler(opb4);
     Opcodes[0xac] = new OpcodeHandler(opac);
     Opcodes[0xbc] = new OpcodeHandler(opbc);
     Opcodes[0xa0] = new OpcodeHandler(opa0);
     Opcodes[0x46] = new OpcodeHandler(op46);
     Opcodes[0x56] = new OpcodeHandler(op56);
     Opcodes[0x4e] = new OpcodeHandler(op4e);
     Opcodes[0x5e] = new OpcodeHandler(op5e);
     Opcodes[0x4a] = new OpcodeHandler(op4a);
     Opcodes[0x4c] = new OpcodeHandler(op4c);
     Opcodes[0x6c] = new OpcodeHandler(op6c);
     Opcodes[0x20] = new OpcodeHandler(op20);
     Opcodes[0xea] = new OpcodeHandler(opea);
     Opcodes[0x05] = new OpcodeHandler(op05);
     Opcodes[0x15] = new OpcodeHandler(op15);
     Opcodes[0x01] = new OpcodeHandler(op01);
     Opcodes[0x11] = new OpcodeHandler(op11);
     Opcodes[0x0d] = new OpcodeHandler(op0d);
     Opcodes[0x1d] = new OpcodeHandler(op1d);
     Opcodes[0x19] = new OpcodeHandler(op19);
     Opcodes[0x09] = new OpcodeHandler(op09);
     Opcodes[0x48] = new OpcodeHandler(op48);
     Opcodes[0x68] = new OpcodeHandler(op68);
     Opcodes[0x08] = new OpcodeHandler(op08);
     Opcodes[0x28] = new OpcodeHandler(op28);
     Opcodes[0x26] = new OpcodeHandler(op26);
     Opcodes[0x36] = new OpcodeHandler(op36);
     Opcodes[0x2e] = new OpcodeHandler(op2e);
     Opcodes[0x3e] = new OpcodeHandler(op3e);
     Opcodes[0x2a] = new OpcodeHandler(op2a);
     Opcodes[0x66] = new OpcodeHandler(op66);
     Opcodes[0x76] = new OpcodeHandler(op76);
     Opcodes[0x6e] = new OpcodeHandler(op6e);
     Opcodes[0x7e] = new OpcodeHandler(op7e);
     Opcodes[0x6a] = new OpcodeHandler(op6a);
     Opcodes[0x40] = new OpcodeHandler(op40);
     Opcodes[0x60] = new OpcodeHandler(op60);
     Opcodes[0xe5] = new OpcodeHandler(ope5);
     Opcodes[0xf5] = new OpcodeHandler(opf5);
     Opcodes[0xe1] = new OpcodeHandler(ope1);
     Opcodes[0xf1] = new OpcodeHandler(opf1);
     Opcodes[0xed] = new OpcodeHandler(oped);
     Opcodes[0xfd] = new OpcodeHandler(opfd);
     Opcodes[0xf9] = new OpcodeHandler(opf9);
     Opcodes[0xe9] = new OpcodeHandler(ope9);
     Opcodes[0x38] = new OpcodeHandler(op38);
     Opcodes[0xf8] = new OpcodeHandler(opf8);
     Opcodes[0x78] = new OpcodeHandler(op78);
     Opcodes[0x85] = new OpcodeHandler(op85);
     Opcodes[0x95] = new OpcodeHandler(op95);
     Opcodes[0x81] = new OpcodeHandler(op81);
     Opcodes[0x91] = new OpcodeHandler(op91);
     Opcodes[0x8d] = new OpcodeHandler(op8d);
     Opcodes[0x99] = new OpcodeHandler(op99);
     Opcodes[0x9d] = new OpcodeHandler(op9d);
     Opcodes[0x86] = new OpcodeHandler(op86);
     Opcodes[0x96] = new OpcodeHandler(op96);
     Opcodes[0x8e] = new OpcodeHandler(op8e);
     Opcodes[0x84] = new OpcodeHandler(op84);
     Opcodes[0x94] = new OpcodeHandler(op94);
     Opcodes[0x8c] = new OpcodeHandler(op8c);
     Opcodes[0xaa] = new OpcodeHandler(opaa);
     Opcodes[0xa8] = new OpcodeHandler(opa8);
     Opcodes[0xba] = new OpcodeHandler(opba);
     Opcodes[0x8a] = new OpcodeHandler(op8a);
     Opcodes[0x9a] = new OpcodeHandler(op9a);
     Opcodes[0x98] = new OpcodeHandler(op98);
     for (int i = 0; i < Opcodes.Length; i++)
     {
         if (Opcodes[i] == null)
         {
             Opcodes[i] = new OpcodeHandler(opXX);
         }
     }
 }