; ; Ullrich von Bassewitz, 06.08.1998 ; ; char cgetc (void); ; .export _cgetc .import cursor .include "pet.inc" _cgetc: lda KEY_COUNT ; Get number of characters bne L3 ; Jump if there are already chars waiting ; Switch on the cursor if needed lda CURS_FLAG pha lda cursor jsr setcursor L1: lda KEY_COUNT beq L1 ldx #0 pla bne L2 inx L2: txa jsr setcursor ; Fetch the character from the keyboard buffer L3: sei ldy KEY_BUF ldx #$00 L4: lda KEY_BUF+1,x sta KEY_BUF,x inx cpx KEY_COUNT bne L4 dec KEY_COUNT cli ldx #$00 ; Clear high byte tya rts ; Switch the cursor on or off setcursor: tax ; On or off? bne seton ; Go set it on lda CURS_FLAG ; Is the cursor currently off? bne crs9 ; Jump if yes lda #1 sta CURS_FLAG ; Mark it as off lda CURS_STATE ; Cursor currently displayed? beq crs8 ; Jump if no ldy CURS_X ; Get the character column lda (SCREEN_PTR),y ; Get character eor #$80 sta (SCREEN_PTR),y ; Store character back crs8: lda #0 sta CURS_STATE ; Cursor not displayed crs9: rts seton: lda #0 sta CURS_FLAG rts