cc65/libsrc/pce/cpeeks.s

64 lines
1.5 KiB
ArmAsm

;
; 2020-07-14, Groepaz
;
; void cpeeks (char* s, unsigned length);
;
; get string from current position, do NOT advance cursor
.export _cpeeks
.import popax
.importzp ptr1, ptr2, tmp1, tmp2
.macpack generic
.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_MARR ; Memory-Address Read
ldy SCREEN_PTR
ldx SCREEN_PTR+1
sty VDC_DATA_LO
stx VDC_DATA_HI
st0 #VDC_VRR ; VRAM Read Register
jsr popax
sta tmp1 ; (will be a .Y index)
stx ptr1+1
ldx #<$0000
stx ptr1
beq L2 ; branch always
L3: ldy tmp2
lda VDC_DATA_LO ; get character
bit VDC_DATA_HI ; we need to "read" the highbyte to advance the address
iny
sty tmp2
and #<~$80 ; remove reverse bit
ldy tmp1
sta (ptr1),y
iny
bne L1
inc ptr1+1
L1: sty tmp1
L2: inc ptr2 ; count length
bne L3
inc ptr2+1
bne L3
txa ; terminate the string
ldy tmp1
sta (ptr1),y
rts