mirror of
https://github.com/RevCurtisP/C02.git
synced 2025-07-28 21:24:29 +00:00
Added putder() to stdiox.a02
This commit is contained in:
82
include/stdiox.a02
Normal file
82
include/stdiox.a02
Normal file
@@ -0,0 +1,82 @@
|
|||||||
|
; 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
|
13
include/stdiox.h02
Normal file
13
include/stdiox.h02
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
/******************************************
|
||||||
|
* stdiox - Extended I/O Routines for C02 *
|
||||||
|
******************************************/
|
||||||
|
|
||||||
|
/* Print Byte as Decimal Number *
|
||||||
|
* Args: b - Number to print */
|
||||||
|
void putdec();
|
||||||
|
|
||||||
|
/* Print Formatted Byte to Screen *
|
||||||
|
* Args: b - byte to format *
|
||||||
|
* &s - formatting string */
|
||||||
|
void printf();
|
||||||
|
|
@@ -123,39 +123,54 @@ ATOCL: LDA (SRCLO),Y ;Get Next Character
|
|||||||
ATOCX: LDA TEMP0 ;Load Result
|
ATOCX: LDA TEMP0 ;Load Result
|
||||||
RTS ;And Return
|
RTS ;And Return
|
||||||
|
|
||||||
;Convert Byte to ASCII
|
;Convert Byte to ASCII String
|
||||||
;Uses SRCLO, srchi, TEMP0, TEMP1, TEMP2
|
;Uses SRCLO, srchi, TEMP0, TEMP1, TEMP2
|
||||||
;Affects A,X,Y,N,Z
|
;Affects A,X,Y,N,Z
|
||||||
CTOA: JSR SETSRC ;Initialize Source String
|
CTOA: JSR SETSRC ;Initialize Source String
|
||||||
JSR CVBCD ;Convert Accumulator to BCD
|
JSR CUBCD ;Convert Accumulator to Unpacked BCD
|
||||||
;LDY #$00 ;Set String Offset to 0
|
|
||||||
LDA TEMP2 ;Get High Byte
|
LDA TEMP2 ;Get High Byte
|
||||||
BEQ CTOAL ;If Not Zero
|
BEQ CTOA1 ;If Not Zero
|
||||||
JSR CTOAN ; Convert Low Nybble
|
JSR CTOAN ; Convert Low Nybble
|
||||||
CTOAL: LDA TEMP1 ;Get Low Byte
|
CTOA1: LDA TEMP1 ;Get Low Byte
|
||||||
|
BNE CTOA2 ;If Not Zero
|
||||||
|
CMP TEMP2 ; and Hundreds
|
||||||
|
BEQ CTOA3 ; not Zero
|
||||||
|
CTOA2: JSR CTOAN ; Convert It
|
||||||
|
CTOA3: LDA TEMP0 ;Get Low Byte
|
||||||
|
JSR CTOAN ;and Convert Low Nybble
|
||||||
|
LDA #$00
|
||||||
|
BEQ CTOAX ;Terminate String
|
||||||
|
CTOAN: ORA #$30 ;Convert to ASCII digit
|
||||||
|
CTOAX: STA (SRCLO),Y ;Store in StringCTOAS: STA (SRCLO),Y ;Store in String
|
||||||
|
INY ;and Increment Offset
|
||||||
|
RTS
|
||||||
|
|
||||||
|
;Unpack 3-Digit BCD Number
|
||||||
|
;Input: TEMP1 = Low Byte
|
||||||
|
; TEMP2 = High Nybble
|
||||||
|
;Output: TEMP0 = Ones Digit
|
||||||
|
; TEMP1 = Tens Digit
|
||||||
|
; TEMP2 = Hundreds Digit
|
||||||
|
;Affects: A,N,Z
|
||||||
|
;Returns: X = 0
|
||||||
|
CUBCD: JSR CVBCD ;Convert Accumulator to BCD
|
||||||
|
UPBCD: LDA TEMP1 ;Get Low Byte
|
||||||
|
AND #$0F ;Strip High Nybbleet
|
||||||
|
STA TEMP0 ;Save in Ones
|
||||||
|
LDA TEMP1 ;Get Low Byte
|
||||||
LSR ;Shift High Nybble
|
LSR ;Shift High Nybble
|
||||||
LSR ; into Low Nybble
|
LSR ; into Low Nybble
|
||||||
LSR
|
LSR
|
||||||
LSR
|
LSR
|
||||||
BNE CTOA2 ;If Not Zero
|
STA TEMP1 ;Save in Tens
|
||||||
CMP TEMP2 ; and High Byte
|
|
||||||
BEQ CTOA3 ; not Zero
|
|
||||||
CTOA2: JSR CTOAN ; Convert It
|
|
||||||
CTOA3: LDA TEMP1 ;Get Low Byte
|
|
||||||
JSR CTOAN ;and Convert Low Nybble
|
|
||||||
LDA #$00
|
|
||||||
BEQ CTOAX ;Terminate String
|
|
||||||
CTOAN: AND #$0F ;Strip High Nybble
|
|
||||||
ORA #$30 ;Convert to ASCII digit
|
|
||||||
CTOAX: STA (SRCLO),Y ;Store in String
|
|
||||||
INY ;and Increment Offset
|
|
||||||
RTS
|
RTS
|
||||||
|
|
||||||
|
|
||||||
;Convert Binary Number in Accumulator to Binary Coded Decimal
|
;Convert Binary Number in Accumulator to Binary Coded Decimal
|
||||||
;Uses TEMP0
|
;Uses: TEMP0
|
||||||
;Returns BCD in TEMP1,temp and A,X = 0
|
;Returns BCD in TEMP1,temp and A,X = 0
|
||||||
CVBCD: STA TEMP0 ;Save Binary Value
|
CVBCD: STA TEMP0 ;Save Binary Value
|
||||||
LDA #0 ;Clear BCD Bytes
|
CVBCDT: LDA #0 ;Clear BCD Bytes
|
||||||
STA TEMP1
|
STA TEMP1
|
||||||
STA TEMP2
|
STA TEMP2
|
||||||
LDX #8 ;Process 8 bits of Binary
|
LDX #8 ;Process 8 bits of Binary
|
||||||
@@ -173,4 +188,3 @@ CVBCDL: ASL TEMP0 ;Shift High Bit Into Carry
|
|||||||
CLD ;Clear Decimal Mode
|
CLD ;Clear Decimal Mode
|
||||||
CLI ;Enable Interrupts
|
CLI ;Enable Interrupts
|
||||||
RTS
|
RTS
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user