1
0
mirror of https://github.com/RevCurtisP/C02.git synced 2024-11-29 01:49:19 +00:00
C02/include/stdio.a02
2018-07-19 00:27:50 -04:00

54 lines
2.0 KiB
Plaintext

; C02 library stdio.h02 assembly language subroutines
; Requires external routines GETKEY, PRCHR, DELCHR, NEWLIN, and SETSRC
; external zero page locations SRCLO and SRCHI
; and external constants DELKEY, ESCKEY, and RTNKEY
;char getc()
GETC EQU GETKEY ;Alias to external GETKEY routine
;void putc(c)
PUTC EQU PRCHR ;Alias to external PRCHR Routine
;char gets(&s)
GETS: JSR SETSRC ;Initialize Source String
GETSL: JSR GETC ;Get Keypress
CMP #DELKEY ;If Delete
BNE GETSE ;Then
TYA ; If Offset is Zero
BEQ GETSL ; Get Next Character
DEY ; Else Decrement Offset
JSR DELCHR ; Delete Previous Character
JMP GETSL ; and Get Next Character
GETSE: CMP #ESCKEY ;Else If Escape
BNE GETSC ;Then
LDY #$FF ; Return -1
BNE GETSY
GETSC: CMP #RTNKEY ;Else If Not Carriage Return
BEQ GETSX
JSR PUTC ; Echo Character
STA (SRCLO),Y ; Store Character at offset
INY ; increment offset and
BPL GETSL ; loop if less than 128
GETSX: JSR NEWLIN ;Else Advance Cursor to Next Line
LDA #$00 ; Terminate String
STA (SRCLO),Y ; and
GETSY: TYA ; Return String Length
RTS
;char puts(&s)
PUTS: LDA #$00 ;Set Start Position to 0
;and fall into putsub
;char putsub(n, &s)
PUTSUB: JSR SETSRC ;Initialize Source String
TAY ;Initialize character offset
PUTSUL: LDA (SRCLO),Y ;Read next character in string
BEQ PUTSUX ;If Not 0
JSR PUTC ; Print character at offset,
INY ; increment offset, and
BPL PUTSUL ; loop if less than 128
PUTSUX: TYA ;Return number of
RTS ; characters printed
;char putln(&s)
PUTLN: JSR PUTS ;Write string to screen
JMP NEWLIN ;Execute external NEWLINe routine and return