ca65 V2.17 - Git 582aa41 Main file : divider.ca65 Current file: divider.ca65 000000r 1 ; 000000r 1 ; ACORN System 1 Applications: Divider 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 DIVIDR := $20 000000r 1 DIVISR := $22 000000r 1 RESULT := $24 000000r 1 RESTART := $FF04 ; Monitor renentry point 000000r 1 RDHEXTD := $FE60 ; write double hex to display 000000r 1 QHEXTD1 := $FE64 ; quad hex to display 1 000000r 1 QDATFET := $FE88 ; quad data fetch 000000r 1 ; 000000r 1 .org $0200 000200 1 ; 000200 1 F8 DIVDEC: sed ; entry point for decimal divide 000201 1 F0 01 beq DIVIDE ; always branch 000203 1 D8 DIVHEX: cld ; entry point for hexadecimal divide 000204 1 84 20 DIVIDE: sty DIVIDR ; clear dividend - prompt for number 000206 1 84 21 sty DIVIDR+1 000208 1 A9 11 lda #$11 ; prompt for second number 00020A 1 85 22 sta DIVISR 00020C 1 A2 20 ldx #$20 00020E 1 20 88 FE jsr QDATFET ; fetch dividend 000211 1 A2 22 ldx #$22 000213 1 20 88 FE jsr QDATFET ; fetch divisor 000216 1 84 24 sty RESULT ; clear result 000218 1 84 25 sty RESULT+1 00021A 1 A4 20 ldy DIVIDR ; use Y & X as double accumulator 00021C 1 A6 21 ldx DIVIDR+1 00021E 1 38 SUB: sec ; subtract the divisor 00021F 1 98 tya 000220 1 E5 22 sbc DIVISR 000222 1 A8 tay 000223 1 8A txa 000224 1 E9 00 sbc #$00 000226 1 AA tax 000227 1 90 10 bcc RESLT ; if negative then finished 000229 1 84 23 sty DIVISR+1 ; else update the remainder 00022B 1 A5 24 lda RESULT ; and add one to the result 00022D 1 69 00 adc #$00 ; (carry was set on input) 00022F 1 85 24 sta RESULT 000231 1 A5 25 lda RESULT+1 000233 1 69 00 adc #$00 000235 1 85 25 sta RESULT+1 000237 1 90 E5 bcc SUB ; no carry is possible (usually) 000239 1 A2 24 RESLT: ldx #$24 00023B 1 20 64 FE jsr QHEXTD1 ; display result 00023E 1 A5 23 lda DIVISR+1 000240 1 20 60 FE jsr RDHEXTD ; and remainder 000243 1 4C 04 FF jmp RESTART 000243 1