mirror of
https://github.com/RevCurtisP/C02.git
synced 2024-06-25 14:29:27 +00:00
83 lines
2.6 KiB
Plaintext
83 lines
2.6 KiB
Plaintext
|
; C02 library stdiox.h02 assembly language subroutines
|
||
|
|
||
|
;Print Byte as Left Justified Decimal Number
|
||
|
;putdel(b)
|
||
|
PUTDEL: STA TEMP3
|
||
|
PUTDEM: JSR PUTDEC ;Alternate Entry Point
|
||
|
LDA TEMP3
|
||
|
PUTDEH: CMP #100
|
||
|
BCS PUTDE0
|
||
|
JSR PUTSPC
|
||
|
PUTDE0: CMP #10
|
||
|
BCS PUTDEX
|
||
|
JSR PUTSPC
|
||
|
PUTDEX: RTS
|
||
|
|
||
|
;Print Byte as Right Justified Decimal Number
|
||
|
;putder(b)
|
||
|
PUTDER: CMP #100
|
||
|
BCS PUTDE0
|
||
|
JSR PUTSPC
|
||
|
PUTDE0: CMP #10
|
||
|
BCS PUTDEC
|
||
|
JSR PUTSPC
|
||
|
;Print Byte as Decimal Number
|
||
|
;putdec(b)
|
||
|
PUTDEC: JSR CUBCD ;Convert Accumulator to Unpacked BCD
|
||
|
LDA TEMP2 ;Get High Byte
|
||
|
BEQ PUTDE1 ;If Not Zero
|
||
|
JSR PUTDEP ; Convert Low Nybble
|
||
|
PUTDE1: LDA TEMP1 ;Get Low Byte
|
||
|
BNE PUTDE2 ;If Not Zero
|
||
|
CMP TEMP2 ; and Hundreds
|
||
|
BEQ PUTDE3 ; not Zero
|
||
|
PUTDE2: JSR PUTDEP ; Convert It
|
||
|
PUTDE3: LDA TEMP0 ;Get Low Byte
|
||
|
PUTDEP: ORA #$30 ;Convert to ASCII digit
|
||
|
JSR PRCHR ;And Print
|
||
|
RTS
|
||
|
|
||
|
;Print a Space
|
||
|
PUTSPC: PHA ;Save Accumulator
|
||
|
LDA #32 ;Load Space Character
|
||
|
JSR PRCHR ;and Print it
|
||
|
PLA ;Restore Accumulator
|
||
|
RTS
|
||
|
|
||
|
;Print Byte in Formatted String
|
||
|
;printf(b, &s)
|
||
|
PRINTF: JSR SETSRC ;Initialize Source String
|
||
|
STA TEMP3 ;Save Byte to Format
|
||
|
PRINTL: LDA (SRCLO),Y ;Read next character in string
|
||
|
BEQ PRINTX ;If Not 0
|
||
|
CMP #'% ; If Format Specified
|
||
|
BEQ PRINTS ; Jump to Formatter
|
||
|
PRINTC: JSR PRCHR ; Print character at offset,
|
||
|
PRINTY: INY ; increment offset, and
|
||
|
BPL PRINTL ; loop if less than 128
|
||
|
PRINTX: RTS ; characters printed
|
||
|
;Process Format Specifier
|
||
|
PRINTS: INY ;Increment Offset
|
||
|
LDA (SRCLO),Y ;Get Formatting Character
|
||
|
BEQ PRINTX ;If NUL, then Exit
|
||
|
CMP #'% ;If Percent Sign
|
||
|
BEQ PRINTC ; Print it and Continue
|
||
|
AND #$DF ;Convert to Upper Case
|
||
|
CMP #'R ;If "d" or "D"
|
||
|
BNE PRINTD
|
||
|
LDA TEMP3 ; Load Byte to Format
|
||
|
JSR PUTDER ; Print as Decimal
|
||
|
JMP PRINTY ; and Continue Printing Screen
|
||
|
PRINTD: CMP #'D ;If "d" or "D"
|
||
|
BNE PRINTH
|
||
|
LDA TEMP3 ; Load Byte to Format
|
||
|
JSR PUTDEC ; Print as Decimal
|
||
|
JMP PRINTY ; and Continue Printing Screen
|
||
|
PRINTH: CMP #'H ;Else If "h" or "H"
|
||
|
BNE PRINTB
|
||
|
LDA TEMP3 ; Load Byte to Format
|
||
|
JSR PRBYTE ; Print as Hexadecimal
|
||
|
JMP PRINTY ; and Continue Printing Screen
|
||
|
PRINTB: LDA TEMP3 ;Otherwise
|
||
|
JMP PRINTC ; Print Raw Byte and Continue
|