.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
; Chars used by chline () and cvline ()
.exportzp chlinechar = CH_HLINE
.exportzp cvlinechar = CH_VLINE
+
+ .import return1
+ .export _doesclrscrafterexit := return1
.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
; Chars used by chline () and cvline ()
.exportzp chlinechar = CH_HLINE
.exportzp cvlinechar = CH_VLINE
+
+ .import return1
+ .export _doesclrscrafterexit := return1
--- /dev/null
+
+ .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
+
--- /dev/null
+;
+; 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
--- /dev/null
+
+ .import soft80_cpeekchar
+
+ .export soft80_cpeekrevers
+
+soft80_cpeekrevers:
+ jsr soft80_cpeekchar
+ txa
+ ldx #0
+ rts
--- /dev/null
+;
+; 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
--- /dev/null
+;
+; 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