ca65 V2.17 - Git 582aa41 Main file : branch_offset_calc.ca65 Current file: branch_offset_calc.ca65 000000r 1 ; 000000r 1 ; ACORN System 1 Applications: Branch Offset Calculator 000000r 1 ; 000000r 1 ; From the Acorn System 1 User's Manual 000000r 1 ; 000000r 1 ; (Chris Oddy January 2022) 000000r 1 ; 000000r 1 ; entry point $0200 000000r 1 ; 000000r 1 .setcpu "6502" 000000r 1 .listbytes unlimited 000000r 1 ; 000000r 1 D := $10 000000r 1 MESSL := $20 000000r 1 MESSH := $21 000000r 1 FROMH := $22 000000r 1 FROML := $23 000000r 1 TOL := $24 000000r 1 TOH := $25 000000r 1 DISPLAY := $FE0C ; scan the display 000000r 1 RDHEXTD := $FE60 ; right double hex to display 000000r 1 QDATFET := $FE88 ; quad data fetch 000000r 1 RESTART := $FF04 ; Monitor reentry point 000000r 1 ; 000000r 1 .org $0200 000200 1 ; 000200 1 D8 OFFSET: cld 000201 1 A9 02 AGAIN: lda #$02 000203 1 85 21 sta MESSH ; initialise message pointer 000205 1 84 22 sty FROMH ; setup prompt 000207 1 84 23 sty FROML 000209 1 A2 22 ldx #FROMH 00020B 1 20 88 FE jsr QDATFET ; fetch first address 00020E 1 A9 11 lda #$11 ; set up 2nd prompt 000210 1 85 24 sta TOL 000212 1 85 25 sta TOH 000214 1 A2 24 ldx #TOL 000216 1 20 88 FE jsr QDATFET ; fetch second adress 000219 1 A5 22 lda FROMH ; offset to make overlength easy 00021B 1 E9 7E sbc #$7E ; carry known set by QDATFET 00021D 1 85 22 sta FROMH 00021F 1 B0 03 bcs HSUB ; don't set the carry again 000221 1 C6 23 dec FROML 000223 1 38 sec 000224 1 A5 24 HSUB: lda TOL ; calculate the length 000226 1 E5 22 sbc FROMH 000228 1 AA tax 000229 1 A5 25 lda TOH 00022B 1 E5 23 sbc FROML 00022D 1 D0 0E bne TOOFAR 00022F 1 A9 55 lda #$55 000231 1 20 48 02 jsr MESSAGE ; print out 000234 1 8A txa 000235 1 49 80 eor #$80 ; complement top bit because of the offset applied 000237 1 20 60 FE jsr RDHEXTD ; print out answer, over writing the 00023A 1 4C 04 FF jmp RESTART ; finished 00023D 1 A9 5B TOOFAR: lda #$5B ; whoops 00023F 1 20 48 02 jsr MESSAGE ; tell the programmer that its wrong 000242 1 20 0C FE jsr DISPLAY 000245 1 4C 01 02 jmp AGAIN 000248 1 85 20 MESSAGE:sta MESSL ; message described by A 00024A 1 A0 07 ldy #$07 ; eight bytes of data to display 00024C 1 B1 20 LOOP: lda (MESSL),y ; fetch them 00024E 1 99 10 00 sta D,y 000251 1 88 dey 000252 1 10 F8 bpl LOOP 000254 1 60 rts 000255 1 53 71 71 6D .byte $53,$71,$71,$6D,$79,$F8,$78,$5C 000259 1 79 F8 78 5C 00025D 1 5C 00 71 5C .byte $5C,$00,$71,$5C,$50,$00 000261 1 50 00 000262 1