mirror of
https://github.com/RevCurtisP/C02.git
synced 2024-12-01 14:51:52 +00:00
59 lines
2.1 KiB
NASM
59 lines
2.1 KiB
NASM
; C02 library stdio.h02 assembly language subroutines
|
|
; Requires external routines getkey, prchr, delchr, and newlin
|
|
; external zero page locations strlo and strhi
|
|
; and external constants DELKEY, ESCKEY, and RTNKEY
|
|
|
|
;char getchr()
|
|
getchr: JMP getkey ;Call external getkey routine
|
|
|
|
;void putchr(c)
|
|
putchr: JMP prchr ;Call external print character
|
|
|
|
;char getstr(&s)
|
|
getstr: STX strlo ;Save Pointer in Store Index
|
|
STY strhi
|
|
LDY #$00 ;Initialize character offset
|
|
getstl: JSR getchr ;Get Keypress
|
|
getstd: CMP #DELKEY ;If Delete
|
|
BNE getste ;Then
|
|
TYA ; If Offset is Zero
|
|
BEQ getstl ; Get Next Character
|
|
DEY ; Else Decrement Offset
|
|
JSR delchr ; Delete Previous Character
|
|
JMP getstl ; and Get Next Character
|
|
getste: CMP #ESCKEY ;Else If Escape
|
|
BNE getstc ;Then
|
|
LDY #$FF ; Return -1
|
|
BNE getsty
|
|
getstc: CMP #RTNKEY ;Else If Not Carriage Return
|
|
BEQ getstx
|
|
JSR putchr ; Echo Character
|
|
STA (strlo),Y ; Store Character at offset
|
|
INY ; increment offset and
|
|
BPL getstl ; loop if less than 128
|
|
getstx: JSR newlin ;Else Advance Cursor to Next Line
|
|
LDA #$00 ; Terminate String
|
|
STA (strlo),Y ; and
|
|
getsty: TYA ; Return String Length
|
|
RTS
|
|
|
|
;char outstr(n, &s)
|
|
outstr: LDA #$00 ;Set Start Position to 0
|
|
;and fall into outsub
|
|
;char outsub(n, &s)
|
|
outsub: STX strlo ;Save pointer in Store Index
|
|
STY strhi
|
|
TAY ;Initialize character offset
|
|
outsul: LDA (strlo),Y ;Read next character in string
|
|
BEQ outsux ;If Not 0
|
|
JSR putchr ; Print character at offset,
|
|
INY ; increment offset, and
|
|
BPL outsul ; loop if less than 128
|
|
outsux: TAY ;Return number of
|
|
RTS ; characters printed
|
|
|
|
;char putstr(*s)
|
|
putstr: JSR outstr ;Write string to screen
|
|
JMP newlin ;Call external newline routine and return
|
|
|