]> git.sur5r.net Git - cc65/commitdiff
added peek functions for soft80
authormrdudz <mrdudz@users.noreply.github.com>
Thu, 28 Dec 2017 00:58:03 +0000 (01:58 +0100)
committermrdudz <mrdudz@users.noreply.github.com>
Thu, 28 Dec 2017 00:58:03 +0000 (01:58 +0100)
libsrc/c64/extra/soft80.s
libsrc/c64/extra/soft80mono.s
libsrc/c64/soft80_cpeekc.s [new file with mode: 0644]
libsrc/c64/soft80_cpeekcolor.s [new file with mode: 0644]
libsrc/c64/soft80_cpeekrevers.s [new file with mode: 0644]
libsrc/c64/soft80_cpeeks.s [new file with mode: 0644]
libsrc/c64/soft80mono_cpeekcolor.s [new file with mode: 0644]

index d445c85c01110c54406a286f840a3a0dcf2fe374..0ea28cfaffe20b428de255f48b60a25f48203854 100644 (file)
         .export _textcolor := soft80_textcolor          ; color.s
         .export _bgcolor := soft80_bgcolor              ; color.s
 
+        ; soft80_cpeekc.s
+        .import soft80_cpeekc
+        .export _cpeekc := soft80_cpeekc                ; cpeekc.s
+
+        ; soft80_cpeekcolor.s
+        .import soft80_cpeekcolor
+        .export _cpeekcolor := soft80_cpeekcolor        ; cpeekcolor.s
+
+        ; soft80_cpeekrevers.s
+        .import soft80_cpeekrevers
+        .export _cpeekrevers := soft80_cpeekrevers      ; cpeekrevers.s
+
+        ; soft80_cpeeks.s
+        .import soft80_cpeeks
+        .export _cpeeks := soft80_cpeeks                ; cpeeks.s
+
         ; soft80_cputc.s
         .import soft80_cputc
         .import soft80_cputcxy
@@ -50,3 +66,6 @@
         ; Chars used by chline () and cvline ()
         .exportzp       chlinechar = CH_HLINE
         .exportzp       cvlinechar = CH_VLINE
+
+        .import         return1
+        .export         _doesclrscrafterexit := return1
index 6fd2c687cf38acc3f7c2be10978be5f0163d942d..700cbcb6cc383950e8eb8da90531f9c9f3ae4dc4 100644 (file)
         .export _textcolor := soft80mono_textcolor      ; color.s
         .export _bgcolor := soft80mono_bgcolor          ; color.s
 
+        ; soft80mono_cpeekc.s
+        .import soft80_cpeekc
+        .export _cpeekc := soft80_cpeekc                ; cpeekc.s
+
+        ; soft80mono_cpeekcolor.s
+        .import soft80mono_cpeekcolor
+        .export _cpeekcolor := soft80mono_cpeekcolor    ; cpeekcolor.s
+
+        ; soft80mono_cpeekrevers.s
+        .import soft80_cpeekrevers
+        .export _cpeekrevers := soft80_cpeekrevers      ; cpeekrevers.s
+
+        ; soft80mono_cpeeks.s
+        .import soft80_cpeeks
+        .export _cpeeks := soft80_cpeeks                ; cpeeks.s
+
         ; soft80mono_cputc.s
         .import soft80mono_cputc
         .import soft80mono_cputcxy
@@ -53,3 +69,6 @@
         ; Chars used by chline () and cvline ()
         .exportzp       chlinechar = CH_HLINE
         .exportzp       cvlinechar = CH_VLINE
+
+        .import         return1
+        .export         _doesclrscrafterexit := return1
diff --git a/libsrc/c64/soft80_cpeekc.s b/libsrc/c64/soft80_cpeekc.s
new file mode 100644 (file)
index 0000000..2801ade
--- /dev/null
@@ -0,0 +1,168 @@
+
+        .export         soft80_cpeekc, soft80_cpeekchar
+
+        .include        "c64.inc"
+        .include        "soft80.inc"
+
+        .macpack longbranch
+
+        .segment "CODE"
+
+soft80_cpeekc:
+        jsr     soft80_cpeekchar
+        ldx     #0
+        rts
+
+soft80_cpeekchar:
+
+        sei
+        ;;dec $01    ;; assumed = $36
+        ;;dec $01    ;; assumed = $36
+        lda #$34
+        sta $01
+
+        lda CURS_X
+        and #$01
+
+        jne @l1a
+
+        ; test non-inverted character (left side)
+
+        ldx #0
+@l2aa:
+        ldy #0
+
+;;        stx $d020
+
+        .repeat 8,line
+;;        jsr readdirect
+        lda (SCREEN_PTR),y
+        and #$f0
+;        sta $e100,y
+        cmp soft80_hi_charset+(line*$80),x
+;    cmp #0
+        bne @l2b
+        .if (line < 7)
+        iny
+        .endif
+        .endrepeat
+
+
+@backok:
+;inc $d020
+;        inc $01
+;        inc $01
+        lda #$36
+        sta $01
+        cli
+        txa         ; return char in A
+  ;     sec
+;        sbc #$20
+        ldx #$00    ; revers flag
+;inc $d020        
+        rts
+@l2b:
+;jmp *
+        inx
+        cpx #$80
+        jne @l2aa
+
+        ; test inverted character (left side)
+        
+        ldx #0
+@l2aa2:
+        ldy #0
+
+;;        stx $d020
+
+        .repeat 8,line
+;;        jsr readdirect
+        lda (SCREEN_PTR),y
+        and #$f0
+        eor #$f0
+        cmp soft80_hi_charset+(line*$80),x
+;    cmp #0
+        bne @l2b2
+        .if (line < 7)
+        iny
+        .endif
+        .endrepeat
+        
+@backokrevers:
+;inc $d020
+;        inc $01
+;        inc $01
+        lda #$36
+        sta $01
+        cli
+        txa         ; return char in A
+  ;     sec
+;        sbc #$20
+        ldx #$01    ; revers flag
+;inc $d020        
+        rts
+        
+@l2b2:
+        inx
+        cpx #$80
+        jne @l2aa2
+        
+@backerr:
+;inc $d020
+    ;;    inc $01
+;;        inc $01
+        lda #$36
+        sta $01
+        cli
+        ldx #0
+        txa
+
+        rts
+
+        ; test non-inverted character (right side)
+        
+@l1a:
+        ldx #0
+@l1aa:
+        ldy #0
+        .repeat 8,line
+;;        jsr readdirect
+        lda (SCREEN_PTR),y
+        and #$0f
+        eor soft80_lo_charset+(line*$80),x
+         bne @l2bb
+        .if line < 7
+        iny
+        .endif
+        .endrepeat
+        jmp @backok
+@l2bb:
+        inx
+        cpx #$80
+        bne @l1aa
+        
+        ; test inverted character (right side)
+        
+        ldx #0
+@l1aa2:
+        ldy #0
+        .repeat 8,line
+;;        jsr readdirect
+        lda (SCREEN_PTR),y
+        and #$0f
+        eor #$0f
+        eor soft80_lo_charset+(line*$80),x
+         bne @l2bb2
+        .if line < 7
+        iny
+        .endif
+        .endrepeat
+        jmp @backokrevers
+@l2bb2:
+        inx
+        cpx #$80
+        bne @l1aa2
+        
+        
+        jmp @backerr
+
diff --git a/libsrc/c64/soft80_cpeekcolor.s b/libsrc/c64/soft80_cpeekcolor.s
new file mode 100644 (file)
index 0000000..c8f1c6e
--- /dev/null
@@ -0,0 +1,19 @@
+;
+; 2017-12-27, Groepaz
+;
+; unsigned char cpeekcolor (void);
+;
+
+        .export         soft80_cpeekcolor
+
+        .include        "c64.inc"
+        .include        "soft80.inc"
+
+        .segment "CODE"
+
+soft80_cpeekcolor:
+        ldy     #0
+        lda     (CRAM_PTR),y
+        and     #$0f
+        ldx     #0
+        rts
diff --git a/libsrc/c64/soft80_cpeekrevers.s b/libsrc/c64/soft80_cpeekrevers.s
new file mode 100644 (file)
index 0000000..6fc0c16
--- /dev/null
@@ -0,0 +1,10 @@
+
+        .import         soft80_cpeekchar
+
+        .export         soft80_cpeekrevers
+
+soft80_cpeekrevers:
+        jsr     soft80_cpeekchar
+        txa
+        ldx     #0
+        rts
diff --git a/libsrc/c64/soft80_cpeeks.s b/libsrc/c64/soft80_cpeeks.s
new file mode 100644 (file)
index 0000000..837afef
--- /dev/null
@@ -0,0 +1,71 @@
+;
+; 2017-12-27, groepaz
+;
+; void cpeeks (char* s, unsigned length);
+;
+        .export         soft80_cpeeks
+        .import         soft80_cpeekc, soft80_kplot, popax
+
+        .importzp       ptr1, ptr2
+
+        .include        "c64.inc"
+        .include        "soft80.inc"
+
+soft80_cpeeks:
+        eor     #<$FFFF         ; counting a word upward is faster
+        sta     ptr2            ; so, we use -(length + 1)
+        txa
+        eor     #>$FFFF
+        sta     ptr2+1
+
+        jsr     popax
+        sta     ptr1
+        stx     ptr1+1
+
+        ; save current cursor position
+        lda     CURS_X
+        pha
+        lda     CURS_Y
+        pha
+
+        ; get the string
+@lp:
+        jsr     soft80_cpeekc
+        ldy     #0
+        sta     (ptr1),y
+
+        ; advance cursor position
+        ldy     CURS_X
+        ldx     CURS_Y
+        iny
+        cpy     #charsperline
+        bne     @sk2
+        ldy     #0
+        inx
+@sk2:
+        sty     CURS_X
+        stx     CURS_Y
+        clc
+        jsr     soft80_kplot
+
+        inc     ptr1
+        bne     @sk
+        inc     ptr1+1
+@sk:
+        inc     ptr2
+        bne     @lp
+        inc     ptr2+1
+        bne     @lp
+
+        ; terminate the string
+        lda     #0
+        ldy     #0
+        sta     (ptr1),y
+
+        ; restore the cursor position
+        pla
+        tax     ; CURS_Y
+        pla
+        tay     ; CURS_X
+        clc
+        jmp     soft80_kplot
diff --git a/libsrc/c64/soft80mono_cpeekcolor.s b/libsrc/c64/soft80mono_cpeekcolor.s
new file mode 100644 (file)
index 0000000..a03875a
--- /dev/null
@@ -0,0 +1,17 @@
+;
+; 2017-12-27, Groepaz
+;
+; unsigned char cpeekcolor (void);
+;
+
+        .export         soft80mono_cpeekcolor
+
+        .include        "c64.inc"
+        .include        "soft80.inc"
+
+        .segment "CODE"
+
+soft80mono_cpeekcolor:
+        lda     CHARCOLOR
+        ldx     #0
+        rts