; C02 library stdiox.h02 assembly language subroutines ANYKEP: DC "PRESS ANY KEY...",0 ; ;char anykey() - wait for character with ANY KEY prompt ;Calls: GETCPR, NEWLIN - Print Newline to Screen ;Affects: C,N,Z ;Returns: A = Character code of keypress ANYKEY: JSR NEWLIN ;Start at Beginning of Next Line LDY #>ANYKEP ;Load Prompt High Byte LDX #= Zero RTS ;putnyb(b) - PUT NYBble PUTNYB EQU PRHEX ;Print Nybble as Hexadecimal ;putsqb(&word) - PUT SesQuiByte ;Args: Y = High Nybble ; X = Low Byte ;Calls: PRBYTE = Print Byte ; PRHEZ = Print Hex Digit ; SAVRXY = Save X and Y Registers ;Affects: A,Y,X,N,Z,C PUTSQB: JSR SAVRXY ;Save Address PUTSQA: LDA TEMP2 ;Load Address MSB JSR PRHEX ;Print High Nybble LDA TEMP1 ;Load Address LSB JMP PRBYTE ;Print and Return` ;putexh(&word) - PUT EXtended Hexadecimal ;Args: A = Value Extended Byte ; Y = Value High Byte ; X = Value Low Byte ;Calls: PRBYTE = Print Byte ; SAVRXY = Save X and Y Registers ; PUTWRA = Put Word (Alternate Entry Point) ;Affects: A,Y,X,N,Z,C PUTEXH: JSR SAVRXY ;Save High and Low Bytes JSR PRBYTE ;Print Extended Byte JMP PUTWRA ;Print High and Low Bytes ;putwrd(&word) - PUT WoRD ;Args: Y = Word MSB ; X = Word LSB ;Calls: PRBYTE = Print Byte ; SAVRXY = Save X and Y Registers ;Affects: A,Y,X,N,Z,C PUTWRD: JSR SAVRXY ;Save Word PUTWRA: LDA TEMP2 ;Load Word MSB JSR PRBYTE ;Print as Hexadecimal LDA TEMP1 ;Load Word LSB JMP PRBYTE ;Print and Return` ;Print a Space PUTSPC: LDA #32 ;Load Space Character JMP PUTCHR ;and Print it ;Print Repeated Spaces PUTRPS: TAY ;Set Counter to Number of Spaces LDA #32 ;Print Repeated Character PUTRPT: JSR PUTCHR ;Print Space Character DEY ;Decrement Counter BNE PUTRPT ;If Not 0, Loop RTS ;void printf(b, &s) - PRINT Formatted byte and/or string ;Args: A = byte to format ; Y,X = address of formatting string ;Uses: DSTLO,DSTHI = Address of %S string ;Sets: SRCLO,SRCHI = Address of formatting string ; TEMP3 - number to format ;Destroys: TEMP0,TEMP1,TEMP2 ;Returns: A,Y = Total number of characters printed PRINTF: STA TEMP3 ;Save Byte to Format JSR SETSRC ;Initialize Source String PRINTL: LDA (SRCLO),Y ;Read next character in string BEQ PRINTX ;If Not 0 CMP #'% ;' If Format Specified BEQ PRINTP ; Jump to Formatter PRINTC: JSR PUTCHR ; Print character at offset, PRINTY: INY ; increment offset, and BPL PRINTL ; loop if less than 128 PRINTX: RTS ; characters printed ;Process Format Specifier PRINTP: 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 #'L ;'If "l" or "L" BNE PRINTR LDA TEMP3 ; Load Byte to Format JSR PUTDEM ; Print Left Justified JMP PRINTY ; and Continue Printing String PRINTR: CMP #'R ;'If "r" or "R" BNE PRINTD LDA TEMP3 ; Load Byte to Format JSR PUTDES ; Print Right Justified JMP PRINTY ; and Continue Printing String PRINTD: CMP #'D ;'Else If "d" or "D" BNE PRINTG LDA TEMP3 ; Load Byte to Format JSR PUTDEC ; Print as Decimal JMP PRINTY ; and Continue Printing String PRINTG: CMP #'G ;'Else If "g" or "G" BNE PRINTH LDA TEMP3 ; Load Byte to Format JSR PUTNYB ; Print as Low Nybble as Hexadecimal JMP PRINTY ; and Continue Printing String PRINTH: CMP #'H ;'Else If "h" or "H" BNE PRINTB LDA TEMP3 ; Load Byte to Format JSR PUTHEX ; Print as Hexadecimal JMP PRINTY ; and Continue Printing String PRINTB: CMP #'B ;'Else If "b" or "B" BNE PRINTN STY TEMP0 ; Save Index LDA TEMP3 ; Load Byte to Format JSR PUTBIN ; Print as Binary LDY TEMP0 ; Restore Index JMP PRINTY ; and Continue Printing String PRINTN: CMP #'N ;'Else If "n" or "N" BNE PRINTS STY TEMP0 ; Save Index JSR NEWLIN ; Execute Newline Function LDY TEMP0 ; Restore Index JMP PRINTY ; and Continue Printing String PRINTS: CMP #'S ;'Else If "s" or "S" BNE PRINTQ STY TEMP0 ; Save Index JSR PUTDST ; Print Destination String LDY TEMP0 ; Restore Index JMP PRINTY ; PRINTQ: CMP #'Q ;'Else If "w" or "W" BNE PRINTW STY TEMP0 ; Save Index JSR SAVDST ; Save Destination Address JSR PUTSQA ; Print MSB and LSB as Hex LDY TEMP0 ; Restore Index JMP PRINTY ; PRINTW: CMP #'W ;'Else If "w" or "W" BNE PRINTI STY TEMP0 ; Save Index JSR SAVDST ; Save Destination Address JSR PUTWRA ; Print MSB and LSB as Hex LDY TEMP0 ; Restore Index JMP PRINTY ; PRINTI: CMP #'I ;'Else If "i" or "I" BNE PRINTZ TYA ; Save Index PHA JSR GETDST ; Get Integer in DSTLO, DSTHI JSR PUTINT ; Print Integer as Decimal PLA ; Restore Index TAY JMP PRINTY ; PRINTZ: LDA TEMP3 ;Else JMP PRINTC ; Print Raw Byte and Continue ;char putdst() PUTDST: LDY #0 ;Initialize character offset PUTDSL: LDA (DSTLO),Y ;Read next character in string BEQ PUTDSX ;If Not 0 JSR PUTC ; Print character at offset, INY ; increment offset, and BPL PUTDSL ; loop if less than 128 PUTDSX: TYA ;Return number of RTS ; characters printed