]> git.sur5r.net Git - cc65/blobdiff - libsrc/apple2/cgetc.s
Support randomize().
[cc65] / libsrc / apple2 / cgetc.s
index d0695cdb5b3761a909de9012c19fcc0fca81af91..ecce9f9de129b04ed6e65e36202e9388fba8e6e2 100644 (file)
@@ -6,18 +6,47 @@
 ; If open_apple key is pressed then the high-bit of the key is set.
 ;
 
-        .export _cgetc
+        .export         _cgetc
+        .import         cursor, putchardirect
 
-        .include "apple2.inc"
+        .include        "apple2.inc"
 
 _cgetc:
-        lda    KBD
-        bpl    _cgetc          ; if < 128, no key pressed
-
-        ; At this time, the high bit of the key pressed is set
-        bit    KBDSTRB         ; clear keyboard strobe
-        bit    BUTN0           ; check if OpenApple is down
-        bmi    :+
-        and    #$7F            ; If not down, then clear high bit
-:       ldx    #$00
+        ; Cursor on ?
+        lda     cursor
+        beq     :+
+
+        ; Show caret.
+        .ifdef  __APPLE2ENH__
+        lda     #$7F | $80      ; Checkerboard, screen code
+        .else
+        lda     #' ' | $40      ; Blank, flashing
+        .endif
+        jsr     putchardirect   ; Returns old character in X
+
+        ; Wait for keyboard strobe.
+:       inc     RNDL            ; Increment random counter low
+        bne     :+
+        inc     RNDH            ; Increment random counter high
+:       lda     KBD
+        bpl     :--             ; If < 128, no key pressed
+
+        ; Cursor on ?
+        ldy     cursor
+        beq     :+
+
+        ; Restore old character.
+        pha
+        txa
+        jsr     putchardirect
+        pla
+
+        ; At this time, the high bit of the key pressed is set.
+:       bit     KBDSTRB         ; Clear keyboard strobe
+        .ifdef __APPLE2ENH__
+        bit     BUTN0           ; Check if OpenApple is down
+        bmi     done
+        .endif
+        and     #$7F            ; If not down, then clear high bit
+done:   ldx     #>$0000
         rts