; centronics.679 - centronics printer driver for C64, in 6502 Assembler ; author Neil Franklin, last modification unknown (estimated 1986) ; this disassembly/source reconstruction 2000.06.07 ; extracted from C64 with: ; load "centronics.679",8,1 ; 5 k = 679 ; 10 for i = k to k+240 step 16 ; 15 print i ; 20 for j = i to i+15 ; 30 print peek (j) ; 40 next j ; 50 input a$ ; 60 next i ; hardware needed: Cable C64 user/RS232 port to centronics printer ; port B (pins CDEFHJKL) Data out, port A bit 2 (pin M) strobe ; ICR Flag bit (pin B) printer ready for char ; decimal dump | hex listing | disassembly ; comments *= $02A7 ; 02A7-02BF unused by Commodore, 02C0-02FF res for Sprite 11 679: 173 0 221 | 02A7: AD 00 DD | LDA $DD00 9 4 | 09 04 | ORA #$04 ; port A "TxD" pin on 141 0 221 | 8D 00 DD | STA $DD00 169 16 | A9 10 | LDA #$10 141 13 221 | 8D 0D DD | STA $DD0D ; ICR Flag pin reset 173 2 221 | AD 02 DD | LDA $DD02 695: 9 4 | 09 04 | ORA #$04 ; port A "TxD" pin output 141 2 221 | 8D 02 DD | STA $DD02 169 255 | A9 FF | LDA #$FF 141 3 221 | 8D 03 DD | STA $DD03 ; port B all pins output 169 207 | A9 CF | LDA #$CF 141 38 3 | 8D 26 03 | STA $0326 ; Output Vector LO 169 711: | A9 02 | LDA #$02 141 39 3 | 8D 27 03 | STA $0327 ; Output Vector HI = 02CF 169 0 | A9 00 | LDA #$00 240 18 | F0 12 | BEQ $02E1 ; rest init output "0" ; come from ROM system call FFD2, there JMP ($0326), to F1CA 72 | 02CF: 48 | PHA ; save output date 165 154 | A5 9A | LDA $9A 201 4 | C9 04 | CMP #$04 ; char to printer? 240 3 | F0 03 | BEQ $02D9 76 727: 205 241 | 4C CD F1 | JMP $F1CD ; not, use standard routine ; without PHA and LDA $9A 173 13 221 | 02D9: AD 0D DD | LDA $DD0D 41 16 | 29 1F | AND #$10 240 249 | F0 F9 | BEQ $02D9 ; wait for Flag pin 104 | 68 | PLA ; re-get output data 141 1 221 | 02E1: 8D 01 DD | STA $DD01 ; write to port B 173 0 221 | AD 00 DD | LDA $DD00 743: 41 251 | 29 FB | AND #$FB 141 0 221 | 8D 00 DD | STA $DD00 ; "TxD" pin off 9 4 | 09 04 | ORA #$04 141 0 221 | 8D 00 DD | STA $DD00 ; "TxD pin back on = strobe 24 | 18 | CLC ; system call was successfull 96 | 60 | RTS | 02F3: |