;; ;; Official Kernal routine, described in: ;; ;; - [RG64] C64 Programmer's Reference Guide - page 279/280 ;; - [CM64] Compute's Mapping the Commodore 64 - page 224 ;; ;; CPU registers that has to be preserved (see [RG64]): .X, .Y ;; ciout: pha lda C3PO bne ciout_send_byte ;; Nothing to send - set buffer as valid, store byte there inc C3PO ;; Clear carry flag to indicate success clc ciout_store_in_buffer: ;; Store in the buffer data to be sent next, return pla sta BSOUR rts ciout_send_byte: clc ; don't send with EOI jsr iec_tx_byte inc C3PO ; iec_tx_byte sets it to 0, but we still have something to send jmp ciout_store_in_buffer