1
0
mirror of https://github.com/cc65/cc65.git synced 2026-03-11 23:42:18 +00:00
Files
cc65/libsrc/pce/cpeeks.s

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