1
0
mirror of https://github.com/cc65/cc65.git synced 2024-06-08 15:29:37 +00:00
cc65/libsrc/pce/cpeeks.s
Greg King ae7a38f3de Added peek functions to the conio library.
The functions return the character, or its attributes, that is at the current screen location of conio's cursor.  The values can be used directly by the output functions to reproduce that screen character.
2021-12-11 18:47:33 -05:00

58 lines
1.5 KiB
ArmAsm

;
; 2020-07-14, Groepaz
; 2020-07-15, Greg King
;
; void cpeeks (char* s, unsigned length);
;
; get string from current position, do NOT advance cursor
.export _cpeeks
.import popax
.importzp ptr1, ptr2
.include "pce.inc"
.include "extzp.inc"
_cpeeks:
eor #<$FFFF ; counting a word upward is faster
sta ptr2 ; so, we use -(length + 1)
txa
eor #>$FFFF
sta ptr2+1
st0 #VDC_CR ; Control Register
st2 #>$0088 ; make VRAM address increment by one
st0 #VDC_MARR ; Memory-Address Read
ldy SCREEN_PTR
ldx SCREEN_PTR+1
sty a:VDC_DATA_LO
stx a:VDC_DATA_HI
st0 #VDC_VRR ; VRAM Read Register
jsr popax
tay ; low byte of address will be used as index
stx ptr1+1
ldx #<$0000
stx ptr1
beq L2 ; branch always
L3: lda a:VDC_DATA_LO ; get character
bit a:VDC_DATA_HI ; need to read high byte to advance VDC address
and #<~$80 ; remove reverse bit
sta (ptr1),y
iny
bne L2
inc ptr1+1
L2: inc ptr2 ; count length
bne L3
inc ptr2+1
bne L3
txa ; terminate the string
sta (ptr1),y
rts