; char cgetc (void);
;
- .export _cgetc
- .import cursor
+ .export _cgetc
+ .import cursor
- .include "pet.inc"
+ .include "pet.inc"
-_cgetc: lda KEY_COUNT ; Get number of characters
- bne L3 ; Jump if there are already chars waiting
+_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
+ 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
+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
+ 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
+seton: lda #0
+ sta CURS_FLAG
+ rts