]> git.sur5r.net Git - cc65/blobdiff - libsrc/cbm/cpeekc.s
cbm stuff from greggs pull request
[cc65] / libsrc / cbm / cpeekc.s
diff --git a/libsrc/cbm/cpeekc.s b/libsrc/cbm/cpeekc.s
new file mode 100644 (file)
index 0000000..05c7fc7
--- /dev/null
@@ -0,0 +1,53 @@
+;
+; 2016-02-28, Groepaz
+; 2017-06-22, Greg King
+;
+; char cpeekc (void);
+;
+
+        .export         _cpeekc
+
+; Get a system-specific file.
+; Note:  The cbm610, and c128 targets need special
+; versions that handle RAM banking and the 80-column VDC.
+
+.if     .def(__C16__)
+        .include        "plus4.inc"     ; both C16 and Plus4
+.elseif .def(__C64__)
+        .include        "c64.inc"
+.elseif .def(__CBM510__)
+        .import         CURS_X: zp, SCREEN_PTR: zp
+        .include        "cbm510.inc"
+.elseif .def(__PET__)
+        .include        "pet.inc"
+.elseif .def(__VIC20__)
+        .include        "vic20.inc"
+.endif
+
+
+_cpeekc:
+        ldy     CURS_X
+        lda     (SCREEN_PTR),y  ; get screen code
+        ldx     #>$0000
+        and     #<~$80          ; 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