ca65 V2.17 - Git 582aa41 Main file : minidisassembler.ca65 Current file: minidisassembler.ca65 000000r 1 ; 000000r 1 ; ACORN System 1 Applications: Minidisassembler 000000r 1 ; 000000r 1 ; From the Acorn Teletext Board Technical 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 MOD := $00 000000r 1 COUNT := $0E 000000r 1 CHATS := $0300 ; character to screen 000000r 1 RESTART := $FF04 ; Monitor renentry point 000000r 1 ; 000000r 1 .org $0200 000200 1 ; 000200 1 A9 18 MINDIS: lda #$18 ; disassemble 25 lines 000202 1 85 0E sta COUNT 000204 1 D8 cld 000205 1 A9 0C lda #$0C ; start with a formfeed 000207 1 20 00 03 jsr CHATS 00020A 1 A9 0D MAIN: lda #$0D ; carriage return/linefeed for each line 00020C 1 20 00 03 jsr CHATS 00020F 1 A9 0A lda #$0A 000211 1 20 00 03 jsr CHATS 000214 1 A5 01 lda MOD+1 ; display current address 000216 1 20 5A 02 jsr SPBYTE 000219 1 A5 00 lda MOD 00021B 1 20 61 02 jsr BYTOUT 00021E 1 A0 00 ldy #$00 000220 1 A2 01 ldx #$01 ; X will be the byte count of the opcode 000222 1 B9 00 00 lda MOD,y ; fetch opcode, find it’s no. of bytes 000225 1 C9 20 cmp #$20 ; ‘jsr' is an anomaly and is done first 000227 1 F0 17 beq CBYTE 000229 1 29 9F and #$9F 00022B 1 F0 15 beq ABYTE ; binary 0XX00000 is 1 byte 00022D 1 29 1D and #$1D 00022F 1 C9 19 cmp #$19 000231 1 F0 0D beq CBYTE ; binary XXX110X1 is 3 bytes 000233 1 29 0D and #$0D 000235 1 C9 08 cmp #$08 000237 1 F0 09 beq ABYTE ; binary XXXXX0X0 (now) is 1 byte 000239 1 29 0C and #$0C 00023B 1 C9 0C cmp #$0C 00023D 1 F0 01 beq CBYTE ; binary XXXX11XX is 3 bytes 00023F 1 CA dex ; all others are 2 bytes 000240 1 E8 CBYTE: inx 000241 1 E8 inx 000242 1 A0 00 ABYTE: ldy #$00 000244 1 B9 00 00 lda MOD,y 000247 1 20 5A 02 jsr SPBYTE 00024A 1 E6 00 inc MOD ; increment the byte pointer 00024C 1 D0 02 bne NOINC 00024E 1 E6 01 inc MOD+1 000250 1 CA NOINC: dex ; print all bytes required 000251 1 D0 EF bne ABYTE 000253 1 C6 0E dec COUNT 000255 1 10 B3 bpl MAIN ; finished the 25 lines ? 000257 1 4C 04 FF GETOUT: jmp RESTART 00025A 1 48 SPBYTE: pha ; print a space and then the byte 00025B 1 A9 20 lda #$20 00025D 1 20 00 03 jsr CHATS 000260 1 68 pla 000261 1 48 BYTOUT: pha ; print a byte 000262 1 4A lsr A 000263 1 4A lsr A 000264 1 4A lsr A 000265 1 4A lsr A 000266 1 20 6A 02 jsr DIGOUT 000269 1 68 pla 00026A 1 29 0F DIGOUT: and #$0F ; print the bottom hex digit in A 00026C 1 09 30 ora #$30 00026E 1 C9 3A cmp #$3A 000270 1 90 02 bcc PUT 000272 1 69 06 adc #$06 000274 1 4C 00 03 PUT: jmp CHATS 000274 1