Code: Select all
;[FC][复制数据到PPU]
;FlameCyclone 2017.6.11
.ORG $A200
COPY_FROM_L = $40
COPY_FROM_H = $41
COPY_TO_L = $42
COPY_TO_H = $43
COPY_DATA:
LDX #$00
LDY #$00
LDA #$00
STA $2001
JSR TIMEDELAY
COPY_TO_SET: ;目的开始地址设置
LDA COPY_TO_ADDR
STA COPY_TO_H
LDA COPY_TO_ADDR+1
STA COPY_TO_L
JSR COPY_TO_PPU
COPY_FROM_SET: ;数据源开始地址设置
LDA COPY_FROM_ADDR+1
STA COPY_FROM_L
LDA COPY_FROM_ADDR
STA COPY_FROM_H
COPY_START: ;复制开始
LDA COPY_FROM_L
CMP COPY_OVER_ADDR+1
BNE COPY_DATA_START
LDA COPY_FROM_H
CMP COPY_OVER_ADDR
BEQ COPY_OVER
COPY_DATA_START: ;开始复制数据
LDA (COPY_FROM_L),Y
STA $2007
JSR COPY_TO_ADD
JSR COPY_FROM_ADD
JSR COPY_TO_PPU
JMP COPY_START
COPY_OVER: ;结束数据复制
LDA (COPY_FROM_L),Y
STA $2007
JSR SCROLL_SET
JSR TIMEDELAY
RTS
COPY_FROM_ADD: ;原地址递增
INC COPY_FROM_L
BNE COPY_FROM_ADD_RTS
INC COPY_FROM_H
COPY_FROM_ADD_RTS:
RTS
COPY_TO_ADD: ;目的地址递增
INC COPY_TO_L
BNE COPY_TO_ADD_RTS
INC COPY_TO_H
COPY_TO_ADD_RTS:
RTS
COPY_TO_PPU: ;设置目的PPU地址
LDA COPY_TO_H
STA $2006
LDA COPY_TO_L
STA $2006
RTS
COPY_FROM_ADDR: ;数据源开始地址
.DB $70,$00
COPY_TO_ADDR: ;目的开始地址
.DB $30,$00
COPY_OVER_ADDR: ;目的结束地址
.DB $7E,$FF
;********************************************************
SCROLL_SET: ;滚动重设
LDA #$00
STA $2005
STA $2005
RTS
;********************************************************
TIMEDELAY:
LDA $2002
BPL TIMEDELAY
RTS