; 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