**************************************************************** * * TRANSLATION MACROS FOR CSC 6502-TO-6809 TRANSLATOR V1.0 * * *= Translation Options are as Follows: *= A 6502 CC Format Conversion Subroutine *= B 6502 CC Format Conversion Inline *= C 6809 CC Format, No Conversion *= D ADC/SBC Special Code Inline *= E ADC/SBC Special Code Subroutine *= F ADC/SBC No Special Code *= H 6809 Hi-Lo Address Format, No Page Zero Wrap, Inline *= I 6502 Lo-Hi Address Format, Page Zero Wrap, Inline *= J 6502 Lo-Hi Address Format, Page Zero Wrap, Subroutine * * Multiple Options on a Line are AND-ed Together. * * When making changes to these macros, follow existing * fixed format. An underline appearing within a macro * body indicates to insert the parameter from the 6502 * opcode at that point in the code generation. * ADC ADCB _ Add With Carry D TFR CC,DP Save CC Register D TFR CC,A D ANDA #$02 D STA >sevflg Set V Flag Byte D TST >sedflg Check D Flag D BEQ *+11 D TFR DP,CC Restore CC Register D TFR B,A D DAA . Convert to Decimal D TFR A,B D BRA *+4 D TFR DP,CC Restore CC Register E LBSR adcsub ADCX H ADCB [_,X] Add With Carry I TFR CC,DP Save CC Register I EXG D,U Get and Wrap Address I TFR X,D I ADDB _ Get Address I EXG D,U I LDU ,U Get Pointer I EXG D,U Swap Address I EXG A,B I EXG D,U I TFR DP,CC Restore CC Register I ADCB ,U Add With Carry J LEAU _,X Get Address J LBSR inxind Do Indexed Indirect J ADCB ,U Add With Carry D TFR CC,DP Save CC Register D TFR CC,A D ANDA #$02 D STA >sevflg Set V Flag Byte D TST >sedflg Check D Flag D BEQ *+11 D TFR DP,CC Restore CC Register D TFR B,A D DAA . Convert to Decimal D TFR A,B D BRA *+4 D TFR DP,CC Restore CC Register E LBSR adcsub ADCY H TFR CC,DP Save CC Register H LDU _&$FF Get Address H EXG D,U Add Y Register H EXG D,Y H LEAY D,Y H EXG D,Y H EXG D,U H TFR DP,CC Restore CC Register H ADCB ,U Add With Carry I TFR CC,DP Save CC Register I LDU _&$FF Get Address I EXG D,U Add Y Register I EXG A,B I EXG D,Y I LEAY D,Y I EXG D,Y I EXG D,U I TFR DP,CC Restore CC Register I ADCB ,U Add With Carry J TFR CC,DP Save CC Register J LDU _&$FF Get Address J LBSR indinx Do Indirect Indexed J ADCB ,U Add With Carry D TFR CC,DP Save CC Register D TFR CC,A D ANDA #$02 D STA >sevflg Set V Flag Byte D TST >sedflg Check D Flag D BEQ *+11 D TFR DP,CC Restore CC Register D TFR B,A D DAA . Convert to Decimal D TFR A,B D BRA *+4 D TFR DP,CC Restore CC Register E LBSR adcsub ADCZX H ADCB _,X Add With Carry I LEAU _,X Get Address I TFR CC,DP Save CC Register I EXG D,U Wrap Page Zero I CLRA I EXG D,U I TFR DP,CC Restore CC Register I ADCB ,U Add With Carry J LEAU _,X Get Address J LBSR zropag J ADCB ,U Add With Carry D TFR CC,DP Save CC Register D TFR CC,A D ANDA #$02 D STA >sevflg Set V Flag Byte D TST >sedflg Check D Flag D BEQ *+11 D TFR DP,CC Restore CC Register D TFR B,A D DAA . Convert to Decimal D TFR A,B D BRA *+4 D TFR DP,CC Restore CC Register E LBSR adcsub AND ANDB _ AND Accumulator ANDX H ANDB [_,X] AND Accumulator I TFR CC,DP Save CC Register I EXG D,U Get and Wrap Address I TFR X,D I ADDB _ Get Address I EXG D,U I LDU ,U Get Pointer I EXG D,U Swap Address I EXG A,B I EXG D,U I TFR DP,CC Restore CC Register I ANDB ,U AND Accumulator J LEAU _,X Get Address J LBSR inxind Do Indexed Indirect J ANDB ,U AND Accumulator ANDY H TFR CC,DP Save CC Register H LDU _&$FF Get Address H EXG D,U Add Y Register H EXG D,Y H LEAY D,Y H EXG D,Y H EXG D,U H TFR DP,CC Restore CC Register H ANDB ,U AND Accumulator I TFR CC,DP Save CC Register I LDU _&$FF Get Address I EXG D,U Add Y Register I EXG A,B I EXG D,Y I LEAY D,Y I EXG D,Y I EXG D,U I TFR DP,CC Restore CC Register I ANDB ,U AND Accumulator J TFR CC,DP Save CC Register J LDU _&$FF Get Address J LBSR indinx Do Indirect Indexed J ANDB ,U AND Accumulator ANDZX H ANDB _,X AND Accumulator I LEAU _,X Get Address I TFR CC,DP Save CC Register I EXG D,U Wrap Page Zero I CLRA I EXG D,U I TFR DP,CC Restore CC Register I ANDB ,U AND Accumulator J LEAU _,X Get Address J LBSR zropag J ANDB ,U AND Accumulator ASL ASL _ Arithmetic Shift Left ASLA ASLB . Arithmetic Shift Left ASLZX H ASL _,X Arithmetic Shift Left I LEAU _,X Get Address I TFR CC,DP Save CC Register I EXG D,U Wrap Page Zero I CLRA I EXG D,U I TFR DP,CC Restore CC Register I ASL ,U Arithmetic Shift Left J LEAU _,X Get Address J LBSR zropag J ASL ,U Arithmetic Shift Left BCC LBCC _ Check C Flag BCS LBCS _ Check C Flag BEQ LBEQ _ Check Z Flag BIT A LDA _ Bit Test A STA >sevflg A BITB >sevflg A ANDCC #$F7 Reset N Flag A TFR CC,DP A TSTA . Check for Negative A BPL *+8 A TFR DP,CC Set N Flag A ORCC #$08 A TFR CC,DP A ANDA #$40 A STA >sevflg Change V Flag A TFR DP,CC Restore CC Register B LDA _ Bit Test B STA >sevflg B BITB >sevflg B ANDCC #$F7 Reset N Flag B TFR CC,DP B TSTA . Check for Negative B BPL *+8 B TFR DP,CC Set N Flag B ORCC #$08 B TFR CC,DP B ANDA #$40 B STA >sevflg Change V Flag B TFR DP,CC Restore CC Register C BITB _ Bit Test C*Warning: 6809 N And V Flag Handling Used BMI LBMI _ Check N Flag BNE LBNE _ Check Z Flag BPL LBPL _ Check N Flag BRK A*Warning: Interrupt Handler Must Process CC and B,D Flags B*Warning: Interrupt Handler Must Process CC and B,D Flags SWI . (Requires Vector) BVC A TFR CC,DP Save CC Register A TST >sevflg Check V Flag Byte A BNE *+7 Branch if set A TFR DP,CC Restore CC Register A LBRA _ Branch If V Clear A TFR DP,CC Restore CC Register B TFR CC,DP Save CC Register B TST >sevflg Check V Flag Byte B BNE *+7 Branch if set B TFR DP,CC Restore CC Register B LBRA _ Branch If V Clear B TFR DP,CC Restore CC Register C LBVC _ Branch if V Clear BVS A TFR CC,DP Save CC Register A TST >sevflg Check V Flag Byte A BEQ *+7 Branch if not set A TFR DP,CC Restore CC Register A LBRA _ Branch If V Set A TFR DP,CC Restore CC Register B TFR CC,DP Save CC Register B TST >sevflg Check V Flag Byte B BEQ *+7 Branch if not set B TFR DP,CC Restore CC Register B LBRA _ Branch If V Set B TFR DP,CC Restore CC Register C LBVS _ Branch if V Set CLC ANDCC #$FE Clear C Flag CLD A TFR CC,DP Save CC Register A CLR >sedflg Clear D Flag Byte A TFR DP,CC Restore CC Register B TFR CC,DP Save CC Register B CLR >sedflg Clear D Flag Byte B TFR DP,CC Restore CC Register C*Warning: 6809 CC Has no D Flag. CLI ANDCC #$EF Clear I Flag CLV A TFR CC,DP Save CC Register A CLR >sevflg Clear V Flag Byte A TFR DP,CC Restore CC Register B TFR CC,DP Save CC Register B CLR >sevflg Clear V Flag Byte B TFR DP,CC Restore CC Register C ANDCC #$FD Clear V Flag CMP CMPB _ Compare Accumulator CMPX H CMPB [_,X] Compare Accumulator I TFR CC,DP Save CC Register I EXG D,U Get and Wrap Address I TFR X,D I ADDB _ Get Address I EXG D,U I LDU ,U Get Pointer I EXG D,U Swap Address I EXG A,B I EXG D,U I TFR DP,CC Restore CC Register I CMPB ,U Compare Accumulator J LEAU _,X Get Address J LBSR inxind Do Indexed Indirect J CMPB ,U Compare Accumulator CMPY H TFR CC,DP Save CC Register H LDU _&$FF Get Address H EXG D,U Add Y Register H EXG D,Y H LEAY D,Y H EXG D,Y H EXG D,U H TFR DP,CC Restore CC Register H CMPB ,U Compare Accumulator I TFR CC,DP Save CC Register I LDU _&$FF Get Address I EXG D,U Add Y Register I EXG A,B I EXG D,Y I LEAY D,Y I EXG D,Y I EXG D,U I TFR DP,CC Restore CC Register I CMPB ,U Compare Accumulator J TFR CC,DP Save CC Register J LDU _&$FF Get Address J LBSR indinx Do Indirect Indexed J CMPB ,U Compare Accumulator CMPZX H CMPB _,X Compare Accumulator I LEAU _,X Get Address I TFR CC,DP Save CC Register I EXG D,U Wrap Page Zero I CLRA I EXG D,U I TFR DP,CC Restore CC Register I CMPB ,U Compare Accumulator J LEAU _,X Get Address J LBSR zropag J CMPB ,U Compare Accumulator CPX EXG D,X Prepare for Compare CMPB _ Compare X Register EXG X,D CPY EXG D,Y Prepare For Compare CMPB _ Compare Y Register EXG Y,D DEC DEC _ Bump Accumulator Down DECZX H DEC _,X Bump Accumulator Down I LEAU _,X Get Address I TFR CC,DP Save CC Register I EXG D,U Wrap Page Zero I CLRA I EXG D,U I TFR DP,CC Restore CC Register I DEC ,U Bump Accumulator Down J LEAU _,X Get Address J LBSR zropag J DEC ,U Bump Accumulator Down DEX EXG X,D Prepare For DEX LDA #$00 Clear MS 8 Bits, Not C Flag DECB . Bump X Down EXG D,X Correct D and X DEY EXG Y,D Prepare for DEY LDA #$00 Clear MS 8 Bits, Not C Flag DECB . Bump Y Down EXG D,Y Correct D and Y END EOR EORB _ EOR Accumulator EORX H EORB [_,X] EOR Accumulator I TFR CC,DP Save CC Register I EXG D,U Get and Wrap Address I TFR X,D I ADDB _ Get Address I EXG D,U I LDU ,U Get Pointer I EXG D,U Swap Address I EXG A,B I EXG D,U I TFR DP,CC Restore CC Register I EORB ,U EOR Accumulator J LEAU _,X Get Address J LBSR inxind Do Indexed Indirect J EORB ,U EOR Accumulator EORY H TFR CC,DP Save CC Register H LDU _&$FF Get Address H EXG D,U Add Y Register H EXG D,Y H LEAY D,Y H EXG D,Y H EXG D,U H TFR DP,CC Restore CC Register H EORB ,U EOR Accumulator I TFR CC,DP Save CC Register I LDU _&$FF Get Address I EXG D,U Add Y Register I EXG A,B I EXG D,Y I LEAY D,Y I EXG D,Y I EXG D,U I TFR DP,CC Restore CC Register I EORB ,U EOR Accumulator J TFR CC,DP Save CC Register J LDU _&$FF Get Address J LBSR indinx Do Indirect Indexed J EORB ,U EOR Accumulator EORZX H EORB _,X EOR Accumulator I LEAU _,X Get Address I TFR CC,DP Save CC Register I EXG D,U Wrap Page Zero I CLRA I EXG D,U I TFR DP,CC Restore CC Register I EORB ,U EOR Accumulator J LEAU _,X Get Address J LBSR zropag J EORB ,U EOR Accumulator INC INC _ Bump Accumulator INCZX H INC _,X Bump Accumulator I LEAU _,X Get Address I TFR CC,DP Save CC Register I EXG D,U Wrap Page Zero I CLRA I EXG D,U I TFR DP,CC Restore CC Register I INC ,U Bump Accumulator J LEAU _,X Get Address J LBSR zropag J INC ,U Bump Accumulator INX EXG X,D Prepare For INX LDA #$00 Clear MS 8 Bits, Not C Flag INCB . Bump X Up EXG D,X Correct D and X INY EXG Y,D Prepare For INY LDA #$00 Clear MS 8 Bits, Not C Flag INCB . Bump Y Up EXG D,Y Correct D and Y JMP JMP _ Jump JMPX H JMP [_] Jump Indirect I TFR CC,A Save CC Register I LDU _ Get Address I EXG D,U Swap Hi and Lo I EXG A,B I EXG D,U I TFR A,CC Restore CC Register I JMP ,U Jump Indirect J LDU #_ Get Address J LBRA jmpind Jump Indirect JMPY H JMP [_] Jump Indirect I TFR CC,A Save CC Register I LDU _ Get Address I EXG D,U Swap Hi and Lo I EXG A,B I EXG D,U I TFR A,CC Restore CC Register I JMP ,U Jump Indirect J LDU #_ Get Address J LBRA jmpind Jump Indirect JSR JSR _ Subroutine Call LDA LDB _ Load Accumulator LDAX H LDB [_,X] Load Accumulator I TFR CC,DP Save CC Register I EXG D,U Get and Wrap Address I TFR X,D I ADDB _ Get Address I EXG D,U I LDU ,U Get Pointer I EXG D,U Swap Address I EXG A,B I EXG D,U I TFR DP,CC Restore CC Register I LDB ,U Load Accumulator J LEAU _,X Get Address J LBSR inxind Do Indexed Indirect J LDB ,U Load Accumulator LDAY H TFR CC,DP Save CC Register H LDU _&$FF Get Address H EXG D,U Add Y Register H EXG D,Y H LEAY D,Y H EXG D,Y H EXG D,U H TFR DP,CC Restore CC Register H LDB ,U Load Accumulator I TFR CC,DP Save CC Register I LDU _&$FF Get Address I EXG D,U Add Y Register I EXG A,B I EXG D,Y I LEAY D,Y I EXG D,Y I EXG D,U I TFR DP,CC Restore CC Register I LDB ,U Load Accumulator J TFR CC,DP Save CC Register J LDU _&$FF Get Address J LBSR indinx Do Indirect Indexed J LDB ,U Load Accumulator LDAZX H LDA _,X Load Accumulator I LEAU _,X Get Address I TFR CC,DP Save CC Register I EXG D,U Wrap Page Zero I CLRA I EXG D,U I TFR DP,CC Restore CC Register I LDA ,U Load Accumulator J LEAU _,X Get Address J LBSR zropag J LDA ,U Load Accumulator LDX EXG X,D Prepare For LDX LDA #$00 Clear MS 8 Bits, Not C Flag LDB _ Load Value EXG D,X Correct D and X LDXZY H EXG X,D Prepare For LDX H LDA #$00 Clear MS 8 Bits, Not C Flag H LDB _,Y Load Value H EXG D,X Correct D and X I LEAU _,Y Get Address I TFR CC,DP Save CC Register I EXG D,U Wrap Page Zero I CLRA I EXG D,U I TFR DP,CC Restore CC Register I EXG X,D Prepare For LDX I LDA #$00 Clear MS 8 Bits, Not C Flag I LDB _,U Load Value I EXG D,X Correct D and X J LEAU _,Y Get Address J LBSR zropag J EXG X,D Prepare For LDX J LDA #$00 Clear MS 8 Bits, Not C Flag J LDB ,U Load Value J EXG D,X Correct D and X LDY EXG Y,D Prepare For LDY LDA #$00 Clear MS 8 Bits, Not C Flag LDB _ Load Value EXG D,Y Correct D and Y LDYZX H EXG Y,D Prepare For LDY H LDA #$00 Clear MS 8 Bits, Not C Flag H LDB _,X Load Value H EXG D,Y Correct D and Y I LEAU _,X Get Address I TFR CC,DP Save CC Register I EXG D,U Wrap Page Zero I CLRA I EXG D,U I TFR DP,CC Restore CC Register I EXG Y,D Prepare For LDY I LDA #$00 Clear MS 8 Bits, Not C Flag I LDB _,U Load Value I EXG D,Y Correct D and Y J LEAU _,X Get Address J LBSR zropag J EXG Y,D Prepare For LDY J LDA #$00 Clear MS 8 Bits, Not C Flag J LDB ,U Load Value J EXG D,Y Correct D and Y LSR LSR _ Logical Shift Right LSRA LSRB . Logical Shift Right LSRZX H LSR _,X Logical Shift Right I LEAU _,X Get Address I TFR CC,DP Save CC Register I EXG D,U Wrap Page Zero I CLRA I EXG D,U I TFR DP,CC Restore CC Register I LSR ,U Logical Shift Right J LEAU _,X Get Address J LBSR zropag J LSR ,U Logical Shift Right NOP NOP . No Operation ORA ORB _ OR Accumulator ORAX H ORB [_,X] OR Accumulator I TFR CC,DP Save CC Register I EXG D,U Get and Wrap Address I TFR X,D I ADDB _ Get Address I EXG D,U I LDU ,U Get Pointer I EXG D,U Swap Address I EXG A,B I EXG D,U I TFR DP,CC Restore CC Register I ORB ,U OR Accumulator J LEAU _,X Get Address J LBSR inxind Do Indexed Indirect J ORB ,U OR Accumulator ORAY H TFR CC,DP Save CC Register H LDU _&$FF Get Address H EXG D,U Add Y Register H EXG D,Y H LEAY D,Y H EXG D,Y H EXG D,U H TFR DP,CC Restore CC Register H ORB ,U OR Accumulator I TFR CC,DP Save CC Register I LDU _&$FF Get Address I EXG D,U Add Y Register I EXG A,B I EXG D,Y I LEAY D,Y I EXG D,Y I EXG D,U I TFR DP,CC Restore CC Register I ORB ,U OR Accumulator J TFR CC,DP Save CC Register J LDU _&$FF Get Address J LBSR indinx Do Indirect Indexed J ORB ,U OR Accumulator ORBZX H ORB _,X OR Accumulator I LEAU _,X Get Address I TFR CC,DP Save CC Register I EXG D,U Wrap Page Zero I CLRA I EXG D,U I TFR DP,CC Restore CC Register I ORB ,U OR Accumulator J LEAU _,X Get Address J LBSR zropag J ORB ,U OR Accumulator PHA PSHS B Push Accumulator PHP A LBSR cc0902 Translate 6809 CC to 6502 A PSHS A Push 6502 CC Register B TFR CC,DP Save CC Register B TFR D,U Save D Register B TFR CC,A B CLRB Zero 6502 Register B BITA #$10 I Flag B BEQ *+4 B ORAB #$04 B BITA #$08 N Flag B BEQ *+4 B ORAB #$80 B BITA #$04 Z Flag B BEQ *+4 B ORAB #$02 B TST >sevflg V Flag B BEQ *+4 B ORAB #$40 B BITA #$01 C Flag B BEQ *+4 B ORAB #$01 B TST >sedflg D Flag B BEQ *+4 B ORAB #$80 B TFR DP,CC Restore CC Register B TFR B,DP B TFR U,D Restore D Register B TFR DP,A 6502 CC in A Register B PSHS A Push 6502 CC Register C PSHS CC Push 6809 CC Register PLA PULS B Pull Accumulator TSTB . Set CC Register PLP A PULS A Pull 6502 CC Register A LBSR cc0209 Translate 6502 CC to 6809 B PULS A Pull 6502 CC Register B TFR D,U Save D Register B TFR A,DP Save 6502 CC Register B LDAB #$C0 Reset 6809 CC Register B BITA #$04 I Flag B BEQ *+4 B ORAB #$10 B BITA #$80 N Flag B BEQ *+4 B ORAB #$08 B BITA #$02 Z Flag B BEQ *+4 B ORAB #$04 B BITA #$01 C Flag B BEQ *+4 B ORAB #$01 B ANDA #$02 V Flag B STA >sevflg B TFR DP,A D Flag B ANDA #$04 B STA >sedflg B TFR B,CC Set 6809 CC Register B TFR U,D Restore D Register C PULS CC Pull 6809 CC Register ROL ROL _ Roll Left ROLA ROLB . Roll Left ROLZX H ROL _,X Roll Left I LEAU _,X Get Address I TFR CC,DP Save CC Register I EXG D,U Wrap Page Zero I CLRA I EXG D,U I TFR DP,CC Restore CC Register I ROL ,U Roll Left J LEAU _,X Get Address J LBSR zropag J ROL ,U Roll Left ROR ROR _ Roll Right RORA RORB . Roll Right RORZX H ROR _,X Roll Right I LEAU _,X Get Address I TFR CC,DP Save CC Register I EXG D,U Wrap Page Zero I CLRA I EXG D,U I TFR DP,CC Restore CC Register I ROR ,U Roll Right J LEAU _,X Get Address J LBSR zropag J ROR ,U Roll Right RTI A*Warning: Interrupt Handler Must Process CC and B,D Flags B*Warning: Interrupt Handler Must Process CC and B,D Flags RTI . Return From Interrupt RTS RTS . Exit Subroutine SBC D LDA _ Get Subtrahend D STA >svareg Save It D TST >sedflg Check D Flag D BEQ *+18 D SBCB >svareg Subtract With Borrow D TFR CC,DP Save CC Register D TFR CC,A D ANDA #$02 D STA >sevflg Set V Flag Byte D TFR DP,CC Restore CC Register D BRA *+39 Skip Decimal Mode Case D TFR DP,A Check C Flag D BITA #$01 D BNE *+11 D LDA >svareg Perform Borrow D ADDA #$99 D DAA . Convert to Decimal D STA >svareg Save Result D EXG A,B D LDB #$99 Form 10's Complement D SUBB >svareg D STB >svareg D ADDA >svareg Add Original Value D DAA . Convert to Decimal D TFR A,B Restore Result D TFR CC,A Flip C Flag D EORA #$01 D TFR A,CC Restore CC Register E LDA _ Get Subtrahend E LBSR sbcsub F SBCB _ Subtract with Borrow SBCX HD LDA [_,X] Get Subtrahend HE LDA [_,X] Get Subtrahend HE LBSR sbcsub HF SBCB [_,X] Subtract with Borrow I TFR CC,DP Save CC Register I EXG D,U Get and Wrap Address I TFR X,D I ADDB _ Get Address I EXG D,U I LDU ,U Get Pointer I EXG D,U Swap Address I EXG A,B I EXG D,U I TFR DP,CC Restore CC Register ID LDA ,U Get Subtrahend IE LDA ,U Get Subtrahend IE LBSR sbcsub IF SBCB ,U Subtract with Borrow J LEAU _,X Get Address J LBSR inxind Do Indexed Indirect JD LDA ,U Get Subtrahend D STA >svareg Save It D TST >sedflg Check D Flag D BEQ *+18 D SBCB >svareg Subtract With Borrow D TFR CC,DP Save CC Register D TFR CC,A D ANDA #$02 D STA >sevflg Set V Flag Byte D TFR DP,CC Restore CC Register D BRA *+39 Skip Decimal Mode Case D TFR DP,A Check C Flag D BITA #$01 D BNE *+11 D LDA >svareg Perform Borrow D ADDA #$99 D DAA . Convert to Decimal D STA >svareg Save Result D EXG A,B D LDB #$99 Form 10's Complement D SUBB >svareg D STB >svareg D ADDA >svareg Add Original Value D DAA . Convert to Decimal D TFR A,B Restore Result D TFR CC,A Flip C Flag D EORA #$01 D TFR A,CC Restore CC Register JE LDA ,U Get Subtrahend JE LBSR sbcsub JF SBCB ,U Subtract with Borrow SBCY H TFR CC,DP Save CC Register H LDU _&$FF Get Address H EXG D,U Add Y Register H EXG D,Y H LEAY D,Y H EXG D,Y H EXG D,U H TFR DP,CC Restore CC Register HD LDA ,U Get Subtrahend HE LDA ,U Get Subtrahend HE LBSR sbcsub HF SBCB ,U Subtract with Borrow I TFR CC,DP Save CC Register I LDU _&$FF Get Address I EXG D,U Add Y Register I EXG A,B I EXG D,Y I LEAY D,Y I EXG D,Y I EXG D,U I TFR DP,CC Restore CC Register ID LDA ,U Get Subtrahend IE LDA ,U Get Subtrahend IE LBSR sbcsub IF SBCB ,U Subtract with Borrow J TFR CC,DP Save CC Register J LDU _&$FF Get Address J LBSR indinx Do Indirect Indexed JD LDA ,U Get Subtrahend D STA >svareg Save It D TST >sedflg Check D Flag D BEQ *+18 D SBCB >svareg Subtract With Borrow D TFR CC,DP Save CC Register D TFR CC,A D ANDA #$02 D STA >sevflg Set V Flag Byte D TFR DP,CC Restore CC Register D BRA *+39 Skip Decimal Mode Case D TFR DP,A Check C Flag D BITA #$01 D BNE *+11 D LDA >svareg Perform Borrow D ADDA #$99 D DAA . Convert to Decimal D STA >svareg Save Result D EXG A,B D LDB #$99 Form 10's Complement D SUBB >svareg D STB >svareg D ADDA >svareg Add Original Value D DAA . Convert to Decimal D TFR A,B Restore Result D TFR CC,A Flip C Flag D EORA #$01 D TFR A,CC Restore CC Register JE LDA ,U Get Subtrahend JE LBSR sbcsub JF SBCB ,U Subtract with Borrow SBCZX H LDA _,X Get Subtrahend I LEAU _,X Get Address I TFR CC,DP Save CC Register I EXG D,U Wrap Page Zero I CLRA I EXG D,U I TFR DP,CC Restore CC Register I LDA ,U Get Subtrahend J LEAU _,X Get Address J LBSR zropag J LDA ,U Get Subtrahend D STA >svareg Save It D TST >sedflg Check D Flag D BEQ *+18 D SBCB >svareg Subtract With Borrow D TFR CC,DP Save CC Register D TFR CC,A D ANDA #$02 D STA >sevflg Set V Flag Byte D TFR DP,CC Restore CC Register D BRA *+39 Skip Decimal Mode Case D TFR DP,A Check C Flag D BITA #$01 D BNE *+11 D LDA >svareg Perform Borrow D ADDA #$99 D DAA . Convert to Decimal D STA >svareg Save Result D EXG A,B D LDB #$99 Form 10's Complement D SUBB >svareg D STB >svareg D ADDA >svareg Add Original Value D DAA . Convert to Decimal D TFR A,B Restore Result D TFR CC,A Flip C Flag D EORA #$01 D TFR A,CC Restore CC Register JE LDA ,U Get Subtrahend JE LBSR sbcsub JF SBCB _,X Subtract with Borrow SEC ORCC #$01 Set C Flag SED A TFR CC,A Save CC Register A STA >sedflg Set D Flag Byte A TFR A,CC Restore CC Register B TFR CC,A Save CC Register B STA >sedflg Set D Flag Byte B TFR A,CC Restore CC Register C*Warning: 6809 CC Has no D Flag. SEI ORCC #$10 Set I Flag STA TFR CC,A Save CC Register STB _ Store Accumulator TFR A,CC Restore CC Register STAX H TFR CC,A Save CC Register H STB [_,X] Store Accumulator H TFR A,CC Restore CC Register I TFR CC,DP Save CC Register I EXG D,U Get and Wrap Address I TFR X,D I ADDB _ Get Address I EXG D,U I LDU ,U Get Pointer I EXG D,U Swap Address I EXG A,B I EXG D,U I STB ,U Store Accumulator I TFR DP,CC Restore CC Register J LEAU _,X Get Address J LBSR inxind Do Indexed Indirect J STAB ,U STA Accumulator J TFR DP,CC Restore CC Register STAY H TFR CC,DP Save CC Register H LDU _&$FF Get Address H EXG D,U Add Y Register H EXG D,Y H LEAY D,Y H EXG D,Y H EXG D,U H STB ,U Store Accumulator H TFR DP,CC Restore CC Register I TFR CC,DP Save CC Register I LDU _&$FF Get Address I EXG D,U Add Y Register I EXG A,B I EXG D,Y I LEAY D,Y I EXG D,Y I EXG D,U I STB ,U Store Accumulator I TFR DP,CC Restore CC Register J TFR CC,DP Save CC Register J LDU _&$FF Get Address J LBSR indinx Do Indirect Indexed J STB ,U Store Accumulator J TFR DP,CC Restore CC Register STAZX H TFR CC,A Save CC Register H STB _,X Store Accumulator H TFR A,CC Restore CC Register I LEAU _,X Get Address I TFR CC,DP Save CC Register I EXG D,U Wrap Page Zero I CLRA I EXG D,U I STB ,U Store Accumulator I TFR DP,CC Restore CC Register J LEAU _,X Get Address J LBSR zropag J STB ,U Store Accumulator J TFR DP,CC Restore CC Register STX TFR CC,A Save CC Register EXG X,D Prepare For Store STB _ Store X Register EXG D,X Restore D and X TFR A,CC Restore CC Register STXZY H TFR CC,A Save CC Register H EXG X,D Prepare For Store H STB _,Y Store X Register H EXG D,X Restore D and X H TFR A,CC Restore CC Register I LEAU _,Y Get Address I TFR CC,DP Save CC Register I EXG D,U Wrap Page Zero I CLRA I EXG D,U I EXG X,D Prepare For Store I STB ,U Store X Register I EXG D,X Restore D and X I TFR DP,CC Restore CC Register J LEAU _,Y Get Address J LBSR zropag J EXG X,D Prepare For Store J STB ,U Store X Register J EXG D,X Restore D and X J TFR DP,CC Restore CC Register STY TFR CC,A Save CC Register EXG Y,D Prepare For Store STB _ Store Y Register EXG D,Y Restore D and Y TFR A,CC Restore CC Register STYZX H TFR CC,A Save CC Register H EXG Y,D Prepare For Store H STB _,X Store Y Register H EXG D,Y Restore D and Y H TFR A,CC Restore CC Register I LEAU _,X Get Address I TFR CC,DP Save CC Register I EXG D,U Wrap Page Zero I CLRA I EXG D,U I EXG Y,D Prepare For Store I STB ,U Store Y Register I EXG D,Y Restore D and Y I TFR DP,CC Restore CC Register J LEAU _,X Get Address J LBSR zropag J EXG Y,D Prepare For Store J STB ,U Store Y Register J EXG D,Y Restore D and Y J TFR DP,CC Restore CC Register TAX LDA #$00 Clear MS 8 Bits, Not C Flag TSTB . Set CC Register TFR D,X Set X to Accumulator TAY LDA #$00 Clear MS 8 Bits, Not C Flag TSTB . Set Condition Code TFR D,Y Set Y To Accumulator TSX *Warning: X Register set to LSB of S Register. TFR D,U Save D Register TFR S,D Get S Register LDA #$00 Clear MS 8 Bits, Not C Flag DECB . Correct Value TFR D,X Set X Register TFR U,D Restore D Register TXA TFR X,D Move X To Accumulator TSTB . Set CC Register TXS *Warning: S Register may not be set correctly. TFR D,U Save Registers TFR X,D Get X Register TFR CC,DP Save CC Register LDA #$01 Set MSB of S Register to $01 INCB . Correct Value TFR DP,CC Restore CC Register TFR D,S Set S Register TYA TFR Y,D Move Y To Accumulator TSTB . Set CC Register ****************************************************************