ca65 V2.17 - Git 582aa41 Main file : double_byte_multiply.ca65 Current file: double_byte_multiply.ca65 000000r 1 ; 000000r 1 ; ACORN System 1 Applications: Double Byte Multiply 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 MPIER := $20 000000r 1 MPICAND := $22 000000r 1 QHEXTD2 := $FE66 ; quad hex to display 2 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 DMULT: cld ; binary only 000201 1 84 20 sty MPIER ; form prompt for the zero input 000203 1 84 21 sty MPIER+1 000205 1 A9 11 lda #$11 000207 1 85 22 sta MPICAND ; form prompt for the first input 000209 1 85 23 sta MPICAND+1 00020B 1 A2 20 ldx #$20 00020D 1 20 88 FE jsr QDATFET ; fetch zero input 000210 1 A2 22 ldx #$22 000212 1 20 88 FE jsr QDATFET 000215 1 84 24 sty $24 ; clear working space 000217 1 84 25 sty $25 000219 1 A0 10 ldy #$10 ; loop count initialisation 00021B 1 66 23 LOOP: ror MPICAND+1 ; two byte shift right 00021D 1 66 22 ror MPICAND 00021F 1 90 0D bcc NADD ; no add if the o/p bit isn't a one 000221 1 18 clc 000222 1 A5 20 lda MPIER ; two byte add 000224 1 65 24 adc $24 000226 1 85 24 sta $24 000228 1 A5 21 lda MPIER+1 00022A 1 65 25 adc $25 00022C 1 85 25 sta $25 ; no carry out of the add 00022E 1 66 25 NADD: ror $25 ; shift again 000230 1 66 24 ror $24 000232 1 88 dey 000233 1 D0 E6 bne LOOP ; go round loop 16 times 000235 1 66 23 ror MPICAND+1 000237 1 66 22 ror MPICAND 000239 1 A0 06 ldy #$06 ; set up position 00023B 1 20 66 FE jsr QHEXTD2 ; X already pointing at correct locations 00023E 1 ; put 4 hex out 00023E 1 A0 02 ldy #$02 ; next position 000240 1 A2 24 ldx #$24 ; set up X 000242 1 20 66 FE jsr QHEXTD2 ; put next 4 out 000245 1 4C 04 FF jmp RESTART ; display result 000245 1