ca65 V2.17 - Git 582aa41 Main file : squareroot.ca65 Current file: squareroot.ca65 000000r 1 ; 000000r 1 ; ACORN System 1 Applications: Square Root 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 for decimal and $0203 for hexadecimal 000000r 1 ; 000000r 1 .setcpu "6502" 000000r 1 .listbytes unlimited 000000r 1 ; 000000r 1 RESTART := $FF04 ; Monitor renentry point 000000r 1 RDHEXTD := $FE60 ; write double hex to display 000000r 1 QDATFET := $FE88 ; quad data fetch 000000r 1 ; 000000r 1 .org $0200 000200 1 ; 000200 1 SQL := $20 000200 1 SQH := $21 000200 1 ROOT := $22 000200 1 SUBL := $23 000200 1 SUBH := $24 000200 1 ; 000200 1 F8 SQRDEC: sed ; entry point for decimal square root 000201 1 F0 01 beq SQROOT ; always branch 000203 1 D8 SQRHEX: cld ; entry point for hexadecimal square root 000204 1 84 21 SQROOT: sty SQH ; clear square to prompt 000206 1 84 20 sty SQL 000208 1 A2 20 ldx #SQL 00020A 1 20 88 FE jsr QDATFET ; fetch the number whose root is to be found 00020D 1 84 24 sty SUBH ; clear high part of subtracting number 00020F 1 84 22 sty ROOT ; clear root 000211 1 C8 iny 000212 1 84 23 sty SUBL ; subtract 001 at start 000214 1 A4 20 ldy SQL ; use Y & X as double sized accumulator 000216 1 A6 21 ldx SQH 000218 1 38 NXTSUB: sec ; subtract SUB from X & Y 000219 1 98 tya 00021A 1 E5 23 sbc SUBL 00021C 1 A8 tay 00021D 1 8A txa 00021E 1 E5 24 sbc SUBH 000220 1 AA tax 000221 1 90 14 bcc RESULT ; if negative then stop 000223 1 A9 00 lda #$00 ; not finished yet, increment root 000225 1 65 22 adc ROOT 000227 1 85 22 sta ROOT 000229 1 A5 23 lda SUBL ; increment SUB 00022B 1 69 02 adc #$02 00022D 1 85 23 sta SUBL 00022F 1 A5 24 lda SUBH 000231 1 69 00 adc #$00 000233 1 85 24 sta SUBH 000235 1 90 E1 bcc NXTSUB ; there can be no carry: branch always 000237 1 A5 22 RESULT: lda ROOT 000239 1 20 60 FE jsr RDHEXTD ; display answer 00023C 1 4C 04 FF jmp RESTART 00023C 1