;
; 2016-02-28, Groepaz
; 2022-03-29, Greg King
;
; char cpeekc (void);
; /* Return the character from the current cursor position. */
;

        .export         _cpeekc

        .include        "cx16.inc"
        .macpack        generic


screen_addr     :=      $1B000  ; VRAM address of text screen

_cpeekc:
        stz     VERA::CTRL      ; use port 0
        lda     CURS_Y
        add     #<(>screen_addr)
        sta     VERA::ADDR+1    ; set row number
        lda     #^screen_addr
        sta     VERA::ADDR+2
        lda     CURS_X          ; get character column
        asl     a               ; each character has two bytes
        sta     VERA::ADDR
        lda     VERA::DATA0     ; get screen code
        ldx     #>$0000
        and     #<~%10000000    ; remove reverse bit

; Convert the screen code into a PetSCII code.
; $00 - $1F: +$40
; $20 - $3F
; $40 - $5f: +$20
; $60 - $7F: +$40

        cmp     #$20
        bcs     @sk1            ;(bge)
        ora     #$40
        rts

@sk1:   cmp     #$40
        bcc     @end            ;(blt)
        cmp     #$60
        bcc     @sk2            ;(blt)
        ;sec
        adc     #$20 - $01
@sk2:   ;clc                    ; both above cmp and adc clear carry flag
        adc     #$20
@end:   rts
