mirror of
https://github.com/sehugg/8bitworkshop.git
synced 2024-11-30 21:52:07 +00:00
55 lines
1.1 KiB
Plaintext
55 lines
1.1 KiB
Plaintext
.export _copyxdata
|
|
.import __XDATA_LOAD__, __XDATA_RUN__, __XDATA_SIZE__
|
|
.importzp ptr1, ptr2, tmp1
|
|
|
|
.code
|
|
|
|
_copyxdata:
|
|
lda #<__XDATA_LOAD__ ; Source pointer
|
|
sta ptr1
|
|
lda #>__XDATA_LOAD__
|
|
sta ptr1+1
|
|
|
|
lda #<__XDATA_RUN__ ; Target pointer
|
|
sta ptr2
|
|
lda #>__XDATA_RUN__
|
|
ora #$04 ; write port
|
|
sta ptr2+1
|
|
|
|
ldx #<~__XDATA_SIZE__
|
|
lda #>~__XDATA_SIZE__ ; Use -(__DATASIZE__+1)
|
|
sta tmp1
|
|
ldy #$00
|
|
|
|
; Copy loop
|
|
|
|
@L1: inx
|
|
beq @L3
|
|
|
|
@L2:
|
|
lda #0
|
|
sta $3F ; select ROM0
|
|
lda (ptr1),y
|
|
pha
|
|
lda #0
|
|
sta $3E ; select RAM0
|
|
pla
|
|
sta (ptr2),y
|
|
iny
|
|
bne @L1
|
|
inc ptr1+1
|
|
inc ptr2+1 ; Bump pointers
|
|
bne @L1 ; Branch always (hopefully)
|
|
|
|
; Bump the high counter byte
|
|
|
|
@L3: inc tmp1
|
|
bne @L2
|
|
|
|
; Done
|
|
|
|
lda #0
|
|
sta $3F ; select ROM0
|
|
rts
|
|
|