2018-01-28 18:30:49 +00:00
|
|
|
; C02 library stdio.h02 assembly language subroutines
|
2018-07-08 05:38:36 +00:00
|
|
|
; Requires external routines GETKEY, PRCHR, DELCHR, NEWLIN, and SETSRC
|
2018-01-28 18:30:49 +00:00
|
|
|
; external zero page locations SRCLO and SRCHI
|
|
|
|
; and external constants DELKEY, ESCKEY, and RTNKEY
|
2018-07-30 00:40:31 +00:00
|
|
|
|
|
|
|
;char getc() - GET Character from keyborad
|
|
|
|
;Sets: System Dependent
|
|
|
|
;Uses: System Dependent
|
|
|
|
;Affects: System Dependent
|
|
|
|
;Returns: A = Character Code of Key
|
2018-09-17 23:44:47 +00:00
|
|
|
GETC EQU GETCHR ;Alias to external GETCHRroutine
|
2018-01-28 18:30:49 +00:00
|
|
|
|
2018-07-30 00:40:31 +00:00
|
|
|
;void putc(c) - PUT Character to screen
|
|
|
|
;Args: Character code to display
|
|
|
|
;Sets: System Dependent
|
|
|
|
;Uses: System Dependent
|
|
|
|
;Affects: System Dependent
|
|
|
|
;Returns: System Dependent
|
2018-09-17 23:44:47 +00:00
|
|
|
PUTC EQU PUTCHR ;Alias to external PUTCHRRoutine
|
2018-01-28 18:30:49 +00:00
|
|
|
|
2018-07-30 00:40:31 +00:00
|
|
|
;char gets(&s) - GET String input from keyboard
|
|
|
|
;Args: Y,X = Address of String
|
|
|
|
;Sets: SRCLO,SRCLHI = Address of String
|
|
|
|
;Affects: N,Z,C
|
|
|
|
;Returns: A,Y = Number of Characters in String
|
|
|
|
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
|
2018-02-02 21:33:57 +00:00
|
|
|
BNE GETSY
|
2018-07-30 00:40:31 +00:00
|
|
|
GETSC: CMP #RTNKEY ;Else If Not Carriage Return
|
2018-02-02 21:33:57 +00:00
|
|
|
BEQ GETSX
|
2018-07-30 00:40:31 +00:00
|
|
|
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
|
2018-01-28 18:30:49 +00:00
|
|
|
RTS
|
|
|
|
|
2018-07-30 00:40:31 +00:00
|
|
|
;char puts(&s) - PUT String to screen
|
|
|
|
;Args: Y,X = Address of String
|
|
|
|
;Calls: PUTS
|
|
|
|
;Affects: N,Z,C
|
|
|
|
;Returns: A,Y = Number of Characters in String
|
2018-02-02 21:33:57 +00:00
|
|
|
PUTS: LDA #$00 ;Set Start Position to 0
|
|
|
|
;and fall into putsub
|
2018-07-30 00:40:31 +00:00
|
|
|
|
|
|
|
;char putsub(n, &s) - PUT SUBstring to screen
|
|
|
|
;Args: A = Starting Position in String
|
|
|
|
; Y,X = Address of String
|
|
|
|
;Sets: SRCLO,SRCLHI = Address of String
|
|
|
|
;Calls: PUTC
|
|
|
|
;Affects: N,Z,C
|
|
|
|
;Returns: A,Y = Number of Characters in String
|
2018-02-02 21:33:57 +00:00
|
|
|
PUTSUB: JSR SETSRC ;Initialize Source String
|
2018-01-28 18:30:49 +00:00
|
|
|
TAY ;Initialize character offset
|
2018-02-02 21:33:57 +00:00
|
|
|
PUTSUL: LDA (SRCLO),Y ;Read next character in string
|
|
|
|
BEQ PUTSUX ;If Not 0
|
|
|
|
JSR PUTC ; Print character at offset,
|
2018-01-28 18:30:49 +00:00
|
|
|
INY ; increment offset, and
|
2018-02-02 21:33:57 +00:00
|
|
|
BPL PUTSUL ; loop if less than 128
|
2018-07-19 04:27:50 +00:00
|
|
|
PUTSUX: TYA ;Return number of
|
2018-01-28 18:30:49 +00:00
|
|
|
RTS ; characters printed
|
|
|
|
|
2018-07-30 00:40:31 +00:00
|
|
|
;char putln(&s) - PUT LiNe to screen
|
|
|
|
;Args: Y,X = Address of String
|
|
|
|
;Calls: PUTS and NEWLIN
|
2018-02-02 21:33:57 +00:00
|
|
|
PUTLN: JSR PUTS ;Write string to screen
|
2018-07-19 04:27:50 +00:00
|
|
|
JMP NEWLIN ;Execute external NEWLINe routine and return
|