欢迎光临散文网 会员登陆 & 注册

[旋风][6502汇编][数据拷贝]

2019-04-04 13:08 作者:FlameCyclone  | 我要投稿

;[FC][数据拷贝][20190108]

;FlameCyclone


 .ORG $8000

 

FC_Copy_Addr = $00

;-------------------------------------------------------------

FC_Cpy_From_L   = FC_Copy_Addr+$00     ;复制来源地址低位

FC_Cpy_From_H   = FC_Copy_Addr+$01     ;复制来源地址高位

FC_Cpy_To_L     = FC_Copy_Addr+$02     ;复制目的地址低位

FC_Cpy_To_H     = FC_Copy_Addr+$03     ;复制目的地址高位

FC_Cpy_Count_L = FC_Copy_Addr+$04     ;复制长度低位

FC_Cpy_Count_H = FC_Copy_Addr+$05     ;复制长度高位

FC_Cpy_Port_L   = FC_Copy_Addr+$06     ;配置地址低位

FC_Cpy_Port_H   = FC_Copy_Addr+$07     ;配置地址高位

;-------------------------------------------------------------

FC_MODE_RAM_TO_RAM     = $00  ;复制RAM到RAM模式

FC_MODE_RAM_TO_PPU     = $01  ;复制RAM到PPU模式

FC_MODE_PPU_TO_RAM     = $02  ;复制PPU到RAM模式

FC_MODE_PPU_CLEAR     = $03  ;清除PPU模式

FC_MODE_RAM_CLEAR     = $04  ;清除RAM模式

;-------------------------------------------------------------

;FC_MODE_RAM_TO_RAM

;1KB耗时21740

;FC_MODE_RAM_TO_PPU

;1KB耗时19690

;FC_MODE_PPU_TO_RAM

;1KB耗时20722

;FC_MODE_PPU_CLEAR

;1KB耗时12489

;FC_MODE_RAM_CLEAR

;1KB耗时16614


;-------------------------------------------------------------

TEST_DEMO:

 LDX #<TEST_DATA

 LDY #>TEST_DATA

 JSR FC_Data_Copy

 RTS


TEST_DATA:

 .DB $00,$F0,$00,$04,$00,$04,FC_MODE_RAM_TO_RAM

 ;.DB $00,$68,$00,$24,$00,$04,FC_MODE_RAM_TO_PPU

 ;.DB $00,$24,$00,$68,$00,$04,FC_MODE_PPU_TO_RAM

 ;.DB $00,$00,$00,$24,$00,$04,FC_MODE_PPU_CLEAR

 ;.DB $00,$00,$00,$68,$00,$04,FC_MODE_RAM_CLEAR

 

;-------------------------------------------------------------

FC_Data_Copy:

 STX FC_Cpy_Port_L

 STY FC_Cpy_Port_H

 LDY #$00

 LDX #$06

FC_Data_Copy_Addr_Set:

 LDA (FC_Cpy_Port_L),Y

 STA FC_Cpy_From_L,Y

 INY

 DEX

 BNE FC_Data_Copy_Addr_Set

 LDA (FC_Cpy_Port_L),Y

 LDY #$00

 

;----------------------------------

FC_Data_Copy_Mode:

 CMP #FC_MODE_RAM_TO_RAM

 BEQ FC_Ram_To_Ram_Mode

 CMP #FC_MODE_RAM_TO_PPU

 BEQ FC_Ram_To_Ppu_Mode

 CMP #FC_MODE_PPU_TO_RAM

 BEQ FC_Ppu_To_Ram_Mode

 CMP #FC_MODE_RAM_CLEAR

 BEQ FC_Ram_Clear_Mode

 CMP #FC_MODE_PPU_CLEAR

 BEQ FC_Ppu_Clear_Mode

 RTS


;----------------------------------------

FC_Ram_Clear_Mode:   ;清除RAM模式

 TYA

 LDX FC_Cpy_Count_L

 INX

FC_Ram_Clear_Count:   ;剩余计数检查

 DEX

 BNE FC_Ram_Clear_Copy

 DEC FC_Cpy_Count_H

 BMI FC_Ram_Clear_Over

FC_Ram_Clear_Copy:   ;开始清除数据

 STA (FC_Cpy_To_L),Y

FC_Ram_Clear_To_Set:    ;目的地址递增

 INY

 BNE FC_Ram_Clear_Count

 INC FC_Cpy_To_H

FC_Ram_Clear_To_Set_End:

 JMP FC_Ram_Clear_Count

FC_Ram_Clear_Over:    ;结束数据复制

 RTS


;----------------------------------------

FC_Ppu_Clear_Mode:   ;清除PPU模式

 LDA FC_Cpy_To_H

 STA $2006

 LDA FC_Cpy_To_L

 STA $2006

 TYA

 LDX FC_Cpy_Count_H

 LDY FC_Cpy_Count_L

FC_Ppu_Clear_Count:   ;剩余计数检查

 BNE FC_Ppu_Clear_Copy

 DEX

 BMI FC_Ppu_Clear_Over

FC_Ppu_Clear_Copy:   ;开始清除PPU

 STA $2007

 DEY

 JMP FC_Ppu_Clear_Count

FC_Ppu_Clear_Over:    ;结束数据复制

 RTS


;----------------------------------------

FC_Ram_To_Ram_Mode:   ;复制RAM到RAM模式

 LDX FC_Cpy_Count_L

 INX

FC_Ram_To_Ram_Count:   ;剩余计数检查

 DEX

 BNE FC_Ram_To_Ram_Copy

 DEC FC_Cpy_Count_H

 BMI FC_Ram_To_Ram_Over

FC_Ram_To_Ram_Copy:   ;开始复制数据

 LDA (FC_Cpy_From_L),Y

 STA (FC_Cpy_To_L),Y

FC_Ram_To_Ram_From_Set:    ;源地址递增

 INY

 BNE FC_Ram_To_Ram_Count

 INC FC_Cpy_To_H

 INC FC_Cpy_From_H

 JMP FC_Ram_To_Ram_Count

FC_Ram_To_Ram_Over:    ;结束数据复制

 RTS


;----------------------------------------

FC_Ram_To_Ppu_Mode:   ;复制RAM到PPU模式

 LDA FC_Cpy_To_H

 STA $2006

 LDA FC_Cpy_To_L

 STA $2006

 LDX FC_Cpy_Count_L

 INX

FC_Ram_To_Ppu_Count:   ;剩余计数检查

 DEX

 BNE FC_Ram_To_Ppu_Copy

 DEC FC_Cpy_Count_H

 BMI FC_Ram_To_Ppu_Over

FC_Ram_To_Ppu_Copy:   ;开始复制数据

 LDA (FC_Cpy_From_L),Y

 STA $2007

FC_Ram_To_Ppu_From_Set:    ;源地址递增

 INY

 BNE FC_Ram_To_Ppu_Count

 INC FC_Cpy_From_H

 JMP FC_Ram_To_Ppu_Count

FC_Ram_To_Ppu_Over:    ;结束数据复制

 RTS


;----------------------------------------

FC_Ppu_To_Ram_Mode:   ;复制PPU到RAM模式

 LDA FC_Cpy_From_H

 STA $2006

 LDA FC_Cpy_From_L

 STA $2006

 LDA $2007

 LDX FC_Cpy_Count_L

 INX

FC_Ppu_To_Ram_Count:   ;剩余计数检查

 DEX

 BNE FC_Ppu_To_Ram_Copy

 DEC FC_Cpy_Count_H

 BMI FC_Ppu_To_Ram_Over

FC_Ppu_To_Ram_Copy:   ;开始复制数据

 LDA $2007

 STA (FC_Cpy_To_L),Y

FC_Ppu_To_Ram_To_Set:    ;目的地址递增

 INY

 BNE FC_Ppu_To_Ram_Count

 INC FC_Cpy_To_H

 JMP FC_Ppu_To_Ram_Count

FC_Ppu_To_Ram_Over:    ;结束数据复制

 RTS


[旋风][6502汇编][数据拷贝]的评论 (共 条)

分享到微博请遵守国家法律