diff --git a/src/libsrc/apple/jit.pla b/src/libsrc/apple/jit.pla index 4f5c27f..129abf3 100644 --- a/src/libsrc/apple/jit.pla +++ b/src/libsrc/apple/jit.pla @@ -520,7 +520,7 @@ def compiler(defptr)#0 VX++ // INX A_IS_TOSL = FALSE break - is $34 + is $34 // DUP //puts("DUP") if A_IS_TOSL & TOSL_DIRTY *codeptr = $D095+(VX<<8) // STA ESTKL,X @@ -554,7 +554,7 @@ def compiler(defptr)#0 // Should never happen // //break - is $38 + is $38 // ADDI i++ //puts("ADDI $"); putb(^(bytecode+i)) if not A_IS_TOSL @@ -577,7 +577,7 @@ def compiler(defptr)#0 codeptr = codeptr + 7 A_IS_TOSL = TOSL_DIRTY break - is $3A + is $3A // SUBI i++ //puts("SUBI $"); putb(^(bytecode+i)) if not A_IS_TOSL @@ -600,7 +600,7 @@ def compiler(defptr)#0 codeptr = codeptr + 7 A_IS_TOSL = TOSL_DIRTY break - is $3C + is $3C // ANDI i++ //puts("ANDI $"); putb(^(bytecode+i)) if not A_IS_TOSL @@ -618,7 +618,7 @@ def compiler(defptr)#0 codeptr = codeptr + 4 A_IS_TOSL = TOSL_DIRTY break - is $3E + is $3E // ORI i++ //puts("ORI $"); putb(^(bytecode+i)) if not A_IS_TOSL @@ -634,87 +634,115 @@ def compiler(defptr)#0 A_IS_TOSL = TOSL_DIRTY break // ISEQ,ISNE,ISGT,ISLT,ISGE,ISLE,BRFLS,BRTRU ; 40 42 44 46 48 4A 4C 4E - is $40 + is $40 // ISEQ //puts("ISEQ") if not A_IS_TOSL *codeptr = $D0B5+(VX<<8) // LDA ESTKL,X codeptr = codeptr + 2 fin - ^codeptr = $D5; codeptr++ // CMP zp,X - ^codeptr = $D0+1+VX; codeptr++ // ESTKL+1 - ^codeptr = $D0; codeptr++ // BNE rel - ^codeptr = $07; codeptr++ // +7 - ^codeptr = $B5; codeptr++ // LDA zp,X - ^codeptr = $C0+VX; codeptr++ // ESTKH - ^codeptr = $D5; codeptr++ // CMP zp,X - ^codeptr = $C0+1+VX; codeptr++ // ESTKH+1 - ^codeptr = $D0; codeptr++ // BNE rel - ^codeptr = $01; codeptr++ // +1 - ^codeptr = $88; codeptr++ // DEY - ^codeptr = $98; codeptr++ // TYA - ^codeptr = $94; codeptr++ // STY zp,X - ^codeptr = $C0+1+VX; codeptr++ // ESTKH+1 - ^codeptr = $A0; codeptr++ // LDY #imm - ^codeptr = $00; codeptr++ // $00 + codeptr=>0 = ($D0D5+$0100)+(VX<<8) // CMP ESTKL+1,X + //^codeptr = $D5; codeptr++ // CMP zp,X + //^codeptr = $D0+1+VX; codeptr++ // ESTKL+1 + codeptr=>2 = $07D0 // BNE +7 + //^codeptr = $D0; codeptr++ // BNE rel + //^codeptr = $07; codeptr++ // +7 + codeptr=>4 = $C0B5+(VX<<8) // LDA ESTKH,X + //^codeptr = $B5; codeptr++ // LDA zp,X + //^codeptr = $C0+VX; codeptr++ // ESTKH + codeptr=>6 = ($C0D5+$0100)+(VX<<8) // CMP ESTKH+1 + //^codeptr = $D5; codeptr++ // CMP zp,X + //^codeptr = $C0+1+VX; codeptr++ // ESTKH+1 + codeptr=>8 = $01D0 // BNE +1 + //^codeptr = $D0; codeptr++ // BNE rel + //^codeptr = $01; codeptr++ // +1 + codeptr=>10 = $9888 // DEY TYA + //^codeptr = $88; codeptr++ // DEY + //^codeptr = $98; codeptr++ // TYA + codeptr=>12 = ($C094+$0100)+(VX<<8) // STY ESTKH+1,X + //^codeptr = $94; codeptr++ // STY zp,X + //^codeptr = $C0+1+VX; codeptr++ // ESTKH+1 + codeptr=>14 = $00A0 // LDY #$00 + //^codeptr = $A0; codeptr++ // LDY #imm + //^codeptr = $00; codeptr++ // $00 VX++ // INX //^codeptr = $95; codeptr++ // STA zp,X //^codeptr = $D0+VX; codeptr++ // ESTKL + codeptr = codeptr + 16 A_IS_TOSL = TOSL_DIRTY break - is $42 + is $42 // ISNE //puts("ISNE") if not A_IS_TOSL *codeptr = $D0B5+(VX<<8) // LDA ESTKL,X codeptr = codeptr + 2 fin - ^codeptr = $D5; codeptr++ // CMP zp,X - ^codeptr = $D0+1+VX; codeptr++ // ESTKL+1 - ^codeptr = $D0; codeptr++ // BNE rel - ^codeptr = $06; codeptr++ // +6 - ^codeptr = $B5; codeptr++ // LDA zp,X - ^codeptr = $C0+VX; codeptr++ // ESTKH - ^codeptr = $D5; codeptr++ // CMP zp,X - ^codeptr = $C0+1+VX; codeptr++ // ESTKH+1 - ^codeptr = $F0; codeptr++ // BEQ rel - ^codeptr = $01; codeptr++ // +1 - ^codeptr = $88; codeptr++ // DEY - ^codeptr = $98; codeptr++ // TYA - ^codeptr = $94; codeptr++ // STY zp,X - ^codeptr = $C0+1+VX; codeptr++ // ESTKH+1 - ^codeptr = $A0; codeptr++ // LDY #imm - ^codeptr = $00; codeptr++ // $00 + codeptr=>0 = ($D0D5+$0100)+(VX<<8) // CMP ESTKL+1,X + //^codeptr = $D5; codeptr++ // CMP zp,X + //^codeptr = $D0+1+VX; codeptr++ // ESTKL+1 + codeptr=>2 = $06D0 // BNE +6 + //^codeptr = $D0; codeptr++ // BNE rel + //^codeptr = $06; codeptr++ // +6 + codeptr=>4 = $C0B5+(VX<<8) // LDA ESTKH,X + //^codeptr = $B5; codeptr++ // LDA zp,X + //^codeptr = $C0+VX; codeptr++ // ESTKH + codeptr=>6 = ($C0D5+$0100)+(VX<<8) // CMP ESTKH+1 + //^codeptr = $D5; codeptr++ // CMP zp,X + //^codeptr = $C0+1+VX; codeptr++ // ESTKH+1 + codeptr=>8 = $01F0 // BEQ +1 + //^codeptr = $F0; codeptr++ // BEQ rel + //^codeptr = $01; codeptr++ // +1 + codeptr=>10 = $9888 // DEY TYA + //^codeptr = $88; codeptr++ // DEY + //^codeptr = $98; codeptr++ // TYA + codeptr=>12 = ($C094+$0100)+(VX<<8) // STY ESTKH+1,X + //^codeptr = $94; codeptr++ // STY zp,X + //^codeptr = $C0+1+VX; codeptr++ // ESTKH+1 + codeptr=>14 = $00A0 // LDY #$00 + //^codeptr = $A0; codeptr++ // LDY #imm + //^codeptr = $00; codeptr++ // $00 VX++ // INX //^codeptr = $95; codeptr++ // STA zp,X //^codeptr = $D0+VX; codeptr++ // ESTKL + codeptr = codeptr + 16 A_IS_TOSL = TOSL_DIRTY break - is $44 + is $44 // ISGT //puts("ISGT") if not A_IS_TOSL *codeptr = $D0B5+(VX<<8) // LDA ESTKL,X codeptr = codeptr + 2 fin - ^codeptr = $D5; codeptr++ // CMP zp,X - ^codeptr = $D0+1+VX; codeptr++ // ESTKL+1 - ^codeptr = $B5; codeptr++ // LDA zp,X - ^codeptr = $C0+VX; codeptr++ // ESTKH - ^codeptr = $F5; codeptr++ // SBC zp,X - ^codeptr = $C0+1+VX; codeptr++ // ESTKH+1 - ^codeptr = $50; codeptr++ // BVC rel - ^codeptr = $02; codeptr++ // +2 - ^codeptr = $49; codeptr++ // EOR #imm - ^codeptr = $80; codeptr++ // $80 - ^codeptr = $10; codeptr++ // BPL rel - ^codeptr = $01; codeptr++ // +1 - ^codeptr = $88; codeptr++ // DEY - ^codeptr = $98; codeptr++ // TYA - ^codeptr = $94; codeptr++ // STY zp,X - ^codeptr = $C0+1+VX; codeptr++ // ESTKH+1 - ^codeptr = $A0; codeptr++ // LDY #imm - ^codeptr = $00; codeptr++ // $00 + codeptr=>0 = ($D0D5+$0100)+(VX<<8) // CMP ESTKL+1,X + //^codeptr = $D5; codeptr++ // CMP zp,X + //^codeptr = $D0+1+VX; codeptr++ // ESTKL+1 + codeptr=>2 = $C0B5+(VX<<8) // LDA ESTKH,X + //^codeptr = $B5; codeptr++ // LDA zp,X + //^codeptr = $C0+VX; codeptr++ // ESTKH + codeptr=>4 = ($C0F5+$0100)+(VX<<8) // SBC ESTKH+1 + //^codeptr = $F5; codeptr++ // SBC zp,X + //^codeptr = $C0+1+VX; codeptr++ // ESTKH+1 + codeptr=>6 = $0250 // BVC +2 + //^codeptr = $50; codeptr++ // BVC rel + //^codeptr = $02; codeptr++ // +2 + codeptr=>8 = $8049 // EOR #$80 + //^codeptr = $49; codeptr++ // EOR #imm + //^codeptr = $80; codeptr++ // $80 + codeptr=>10 = $0110 // BPL +1 + //^codeptr = $10; codeptr++ // BPL rel + //^codeptr = $01; codeptr++ // +1 + codeptr=>12 = $9888 // DEY TYA + //^codeptr = $88; codeptr++ // DEY + //^codeptr = $98; codeptr++ // TYA + codeptr=>14 = ($C094+$0100)+(VX<<8) // STY ESTKH+1,X + //^codeptr = $94; codeptr++ // STY zp,X + //^codeptr = $C0+1+VX; codeptr++ // ESTKH+1 + codeptr=>16 = $00A0 // LDY #$00 + //^codeptr = $A0; codeptr++ // LDY #imm + //^codeptr = $00; codeptr++ // $00 VX++ // INX //^codeptr = $95; codeptr++ // STA zp,X //^codeptr = $D0+VX; codeptr++ // ESTKL + codeptr = codeptr + 18 A_IS_TOSL = TOSL_DIRTY break is $46 @@ -723,29 +751,40 @@ def compiler(defptr)#0 *codeptr = $D095+(VX<<8) // STA ESTKL,X codeptr = codeptr + 2 fin - ^codeptr = $B5; codeptr++ // LDA zp,X - ^codeptr = $D0+1+VX; codeptr++ // ESTKL+1 - ^codeptr = $D5; codeptr++ // CMP zp,X - ^codeptr = $D0+VX; codeptr++ // ESTKL - ^codeptr = $B5; codeptr++ // LDA zp,X - ^codeptr = $C0+1+VX; codeptr++ // ESTKH+1 - ^codeptr = $F5; codeptr++ // SBC zp,X - ^codeptr = $C0+VX; codeptr++ // ESTKH - ^codeptr = $50; codeptr++ // BVC rel - ^codeptr = $02; codeptr++ // +2 - ^codeptr = $49; codeptr++ // EOR #imm - ^codeptr = $80; codeptr++ // $80 - ^codeptr = $10; codeptr++ // BPL rel - ^codeptr = $01; codeptr++ // +1 - ^codeptr = $88; codeptr++ // DEY - ^codeptr = $98; codeptr++ // TYA - ^codeptr = $94; codeptr++ // STY zp,X - ^codeptr = $C0+1+VX; codeptr++ // ESTKH+1 - ^codeptr = $A0; codeptr++ // LDY #imm - ^codeptr = $00; codeptr++ // $00 + codeptr=>0 = ($D0B5+$0100)+(VX<<8) // LDA ESTKL+1,X + //^codeptr = $B5; codeptr++ // LDA zp,X + //^codeptr = $D0+1+VX; codeptr++ // ESTKL+1 + codeptr=>2 = $D0D5+(VX<<8) // CMP ESTKL,X + //^codeptr = $D5; codeptr++ // CMP zp,X + //^codeptr = $D0+VX; codeptr++ // ESTKL + codeptr=>4 = ($C0B5+$0100)+(VX<<8) // LDA ESTKH+1,X + //^codeptr = $B5; codeptr++ // LDA zp,X + //^codeptr = $C0+1+VX; codeptr++ // ESTKH+1 + codeptr=>6 = $C0F5+(VX<<8) // SBC ESTKH + //^codeptr = $F5; codeptr++ // SBC zp,X + //^codeptr = $C0+VX; codeptr++ // ESTKH + codeptr=>8 = $0250 // BVC +2 + //^codeptr = $50; codeptr++ // BVC rel + //^codeptr = $02; codeptr++ // +2 + codeptr=>10 = $8049 // EOR #$80 + //^codeptr = $49; codeptr++ // EOR #imm + //^codeptr = $80; codeptr++ // $80 + codeptr=>12 = $0110 // BPL +1 + //^codeptr = $10; codeptr++ // BPL rel + //^codeptr = $01; codeptr++ // +1 + codeptr=>14 = $9888 // DEY TYA + //^codeptr = $88; codeptr++ // DEY + //^codeptr = $98; codeptr++ // TYA + codeptr=>16 = ($C094+$0100)+(VX<<8) // STY ESTKH+1,X + //^codeptr = $94; codeptr++ // STY zp,X + //^codeptr = $C0+1+VX; codeptr++ // ESTKH+1 + codeptr=>18 = $00A0 // LDY #$00 + //^codeptr = $A0; codeptr++ // LDY #imm + //^codeptr = $00; codeptr++ // $00 VX++ // INX //^codeptr = $95; codeptr++ // STA zp,X //^codeptr = $D0+VX; codeptr++ // ESTKL + codeptr = codeptr + 20 A_IS_TOSL = TOSL_DIRTY break is $48 @@ -754,61 +793,82 @@ def compiler(defptr)#0 *codeptr = $D095+(VX<<8) // STA ESTKL,X codeptr = codeptr + 2 fin - ^codeptr = $B5; codeptr++ // LDA zp,X - ^codeptr = $D0+1+VX; codeptr++ // ESTKL+1 - ^codeptr = $D5; codeptr++ // CMP zp,X - ^codeptr = $D0+VX; codeptr++ // ESTKL - ^codeptr = $B5; codeptr++ // LDA zp,X - ^codeptr = $C0+1+VX; codeptr++ // ESTKH+1 - ^codeptr = $F5; codeptr++ // SBC zp,X - ^codeptr = $C0+VX; codeptr++ // ESTKH - ^codeptr = $50; codeptr++ // BVC rel - ^codeptr = $02; codeptr++ // +2 - ^codeptr = $49; codeptr++ // EOR #imm - ^codeptr = $80; codeptr++ // $80 - ^codeptr = $30; codeptr++ // BMI rel - ^codeptr = $01; codeptr++ // +1 - ^codeptr = $88; codeptr++ // DEY - ^codeptr = $98; codeptr++ // TYA - ^codeptr = $94; codeptr++ // STY zp,X - ^codeptr = $C0+1+VX; codeptr++ // ESTKH+1 - ^codeptr = $A0; codeptr++ // LDY #imm - ^codeptr = $00; codeptr++ // $00 + codeptr=>0 = ($D0B5+$0100)+(VX<<8) // LDA ESTKL+1,X + //^codeptr = $B5; codeptr++ // LDA zp,X + //^codeptr = $D0+1+VX; codeptr++ // ESTKL+1 + codeptr=>2 = $D0D5+(VX<<8) // CMP ESTKL,X + //^codeptr = $D5; codeptr++ // CMP zp,X + //^codeptr = $D0+VX; codeptr++ // ESTKL + codeptr=>4 = ($C0B5+$0100)+(VX<<8) // LDA ESTKH+1,X + //^codeptr = $B5; codeptr++ // LDA zp,X + //^codeptr = $C0+1+VX; codeptr++ // ESTKH+1 + codeptr=>6 = $C0F5+(VX<<8) // SBC ESTKH + //^codeptr = $F5; codeptr++ // SBC zp,X + //^codeptr = $C0+VX; codeptr++ // ESTKH + codeptr=>8 = $0250 // BVC +2 + //^codeptr = $50; codeptr++ // BVC rel + //^codeptr = $02; codeptr++ // +2 + codeptr=>10 = $8049 // EOR #$80 + //^codeptr = $49; codeptr++ // EOR #imm + //^codeptr = $80; codeptr++ // $80 + codeptr=>12 = $0130 // BMI +1 + //^codeptr = $30; codeptr++ // BMI rel + //^codeptr = $01; codeptr++ // +1 + codeptr=>14 = $9888 // DEY TYA + //^codeptr = $88; codeptr++ // DEY + //^codeptr = $98; codeptr++ // TYA + codeptr=>16 = ($C094+$0100)+(VX<<8) // STY ESTKH+1,X + //^codeptr = $94; codeptr++ // STY zp,X + //^codeptr = $C0+1+VX; codeptr++ // ESTKH+1 + codeptr=>18 = $00A0 // LDY #$00 + //^codeptr = $A0; codeptr++ // LDY #imm + //^codeptr = $00; codeptr++ // $00 VX++ // INX //^codeptr = $95; codeptr++ // STA zp,X //^codeptr = $D0+VX; codeptr++ // ESTKL + codeptr = codeptr + 20 A_IS_TOSL = TOSL_DIRTY break - is $4A + is $4A // ISLE //puts("ISLE") if not A_IS_TOSL *codeptr = $D0B5+(VX<<8) // LDA ESTKL,X codeptr = codeptr + 2 fin - ^codeptr = $D5; codeptr++ // CMP zp,X - ^codeptr = $D0+1+VX; codeptr++ // ESTKL+1 - ^codeptr = $B5; codeptr++ // LDA zp,X - ^codeptr = $C0+VX; codeptr++ // ESTKH - ^codeptr = $F5; codeptr++ // SBC zp,X - ^codeptr = $C0+1+VX; codeptr++ // ESTKH+1 - ^codeptr = $50; codeptr++ // BVC rel - ^codeptr = $02; codeptr++ // +2 - ^codeptr = $49; codeptr++ // EOR #imm - ^codeptr = $80; codeptr++ // $80 - ^codeptr = $30; codeptr++ // BMI rel - ^codeptr = $01; codeptr++ // +1 - ^codeptr = $88; codeptr++ // DEY - ^codeptr = $98; codeptr++ // TYA - ^codeptr = $94; codeptr++ // STY zp,X - ^codeptr = $C0+1+VX; codeptr++ // ESTKH+1 - ^codeptr = $A0; codeptr++ // LDY #imm - ^codeptr = $00; codeptr++ // $00 + codeptr=>0 = ($D0D5+$0100)+(VX<<8) // CMP ESTKL+1,X + //^codeptr = $D5; codeptr++ // CMP zp,X + //^codeptr = $D0+1+VX; codeptr++ // ESTKL+1 + codeptr=>2 = $C0B5+(VX<<8) // LDA ESTKH,X + //^codeptr = $B5; codeptr++ // LDA zp,X + //^codeptr = $C0+VX; codeptr++ // ESTKH + codeptr=>4 = ($C0F5+$0100)+(VX<<8) // SBC ESTKH+1 + //^codeptr = $F5; codeptr++ // SBC zp,X + //^codeptr = $C0+1+VX; codeptr++ // ESTKH+1 + codeptr=>6 = $0250 // BVC +2 + //^codeptr = $50; codeptr++ // BVC rel + //^codeptr = $02; codeptr++ // +2 + codeptr=>8 = $8049 // EOR #$80 + //^codeptr = $49; codeptr++ // EOR #imm + //^codeptr = $80; codeptr++ // $80 + codeptr=>10 = $0130 // BMI +1 + //^codeptr = $30; codeptr++ // BMI rel + //^codeptr = $01; codeptr++ // +1 + codeptr=>12 = $9888 // DEY TYA + //^codeptr = $88; codeptr++ // DEY + //^codeptr = $98; codeptr++ // TYA + codeptr=>14 = ($C094+$0100)+(VX<<8) // STY ESTKH+1,X + //^codeptr = $94; codeptr++ // STY zp,X + //^codeptr = $C0+1+VX; codeptr++ // ESTKH+1 + codeptr=>16 = $00A0 // LDY #$00 + //^codeptr = $A0; codeptr++ // LDY #imm + //^codeptr = $00; codeptr++ // $00 VX++ // INX //^codeptr = $95; codeptr++ // STA zp,X //^codeptr = $D0+VX; codeptr++ // ESTKL + codeptr = codeptr + 18 A_IS_TOSL = TOSL_DIRTY break - is $4C + is $4C // BRFLS i++ dest = i + *(bytecode+i) i++ @@ -819,19 +879,26 @@ def compiler(defptr)#0 *codeptr = ($D0B5-$0100)+(VX<<8) // LDA ESTKL-1,X codeptr = codeptr + 2 fin - ^codeptr = $15; codeptr++ // ORA zp,X - ^codeptr = $C0-1+VX; codeptr++ // ESTKH-1 - ^codeptr = $D0; codeptr++ // BNE rel - ^codeptr = $03; codeptr++ // +3 - ^codeptr = $4C; codeptr++ // JMP abs - *codeptr = addrxlate=>[dest] - if not (*codeptr & $8000) // Unresolved address list - addrxlate=>[dest] = codeptr - *jitcodeptr + codeptr=>0 = ($C015-$0100)+(VX<<8) // ORA ESTKH-1,X + //^codeptr = $15; codeptr++ // ORA zp,X + //^codeptr = $C0-1+VX; codeptr++ // ESTKH-1 + codeptr=>2 = $03D0 // BNE +3 + //^codeptr = $D0; codeptr++ // BNE rel + //^codeptr = $03; codeptr++ // +3 + codeptr->4 = $4C // JMP abs + //^codeptr = $4C; codeptr++ // JMP abs + codeptr=>5 = addrxlate=>[dest] + //*codeptr = addrxlate=>[dest] + if not (codeptr->6 & $80) // Unresolved address list + //if not (*codeptr & $8000) // Unresolved address list + addrxlate=>[dest] = codeptr + 5 - *jitcodeptr + //addrxlate=>[dest] = codeptr - *jitcodeptr fin - codeptr = codeptr + 2 + codeptr = codeptr + 7 + //codeptr = codeptr + 2 A_IS_TOSL = FALSE break - is $4E + is $4E // BRTRU i++ dest = i + *(bytecode+i) i++ @@ -842,16 +909,23 @@ def compiler(defptr)#0 *codeptr = ($D0B5-$0100)+(VX<<8) // LDA ESTKL-1,X codeptr = codeptr + 2 fin - ^codeptr = $15; codeptr++ // ORA zp,X - ^codeptr = $C0-1+VX; codeptr++ // ESTKH-1 - ^codeptr = $F0; codeptr++ // BEQ rel - ^codeptr = $03; codeptr++ // +3 - ^codeptr = $4C; codeptr++ // JMP abs - *codeptr = addrxlate=>[dest] - if not (*codeptr & $8000) // Unresolved address list - addrxlate=>[dest] = codeptr - *jitcodeptr + codeptr=>0 = ($C015-$0100)+(VX<<8) // ORA ESTKH-1,X + //^codeptr = $15; codeptr++ // ORA zp,X + //^codeptr = $C0-1+VX; codeptr++ // ESTKH-1 + codeptr=>2 = $03F0 // BEQ +3 + //^codeptr = $F0; codeptr++ // BEQ rel + //^codeptr = $03; codeptr++ // +3 + codeptr->4 = $4C // JMP abs + //^codeptr = $4C; codeptr++ // JMP abs + codeptr=>5 = addrxlate=>[dest] + //*codeptr = addrxlate=>[dest] + if not (codeptr->6 & $80) // Unresolved address list + //if not (*codeptr & $8000) // Unresolved address list + addrxlate=>[dest] = codeptr + 5 - *jitcodeptr + //addrxlate=>[dest] = codeptr - *jitcodeptr fin - codeptr = codeptr + 2 + codeptr = codeptr + 7 + //codeptr = codeptr + 2 A_IS_TOSL = FALSE break // BRNCH,SEL,CALL,ICAL,ENTER,LEAVE,RET,CFFB ; 50 52 54 56 58 5A 5C 5E