📄 flash.c
字号:
unsigned char data[1280];
unsigned char times;
unsigned char counter;
unsigned char error=0;
void flash(void)
{asm{start:movb #$8F,COPCTL;
ldx #$00;
ldaa #$1;
data_load:staa data,x;
inca;
inx;
cmpa #!65;
bne data_load;
movb #$01,MISC;
movb #$01,PPAGE;
ldaa #$01;
staa FEEMCR;
ldx #$8002;
jsr flasherase;
ldx #$8040;
ldy #data;
jsr progrow;
ldaa #$01;
staa FEEMCR;
verify://movb #!32,counter;//此指令在该情况下不能正常工作
ldaa #32;
staa counter;
ldy #data;
ldx #$8040;
verifyloop:ldd 0,x;
cpd 0,y;
bne error;
dec counter;
inx;
inx;
iny;
iny;
bra verifyloop;
error:ldaa #$01;
done:bra done;
flasherase:sei;
ldaa #$02;
staa FEECTL;
std 0,x;
ldaa #$14;
dbne A,*;
ldaa #$0F;
staa FEECTL;
movb #!8,times;
jsr ms_delay;
ldaa #$80;
staa FEECTL;
ldd #$0C8;
dbne D,*;
ldaa #$00;
staa FEECTL;
ldaa #$02;
dbne a,*;
cli;
rts;
progrow:sei;
ldaa #$01;
staa FEECTL;
std 0,X;
ldaa #$14;
dbne A,*;
ldaa #$09;
staa FEECTL;
ldaa #$0A;
dbne A,*;
//movb #!32,counter;
ldaa #32;
staa counter;
copy_loop:movw 0,y,0,x;
inx;
inx;
iny;
iny;
ldaa #$39;
dbne A,*;
dec counter;
bne copy_loop;
ldaa #$80;
staa FEECTL;
ldaa #$0A;
dbne A,*;
ldaa #$00;
staa FEECTL;
ldaa #$02;
dbne A,*;
cli;
rts;
ms_delay:ldaa #$4AD;
ms_loop:subd #$01;
bne ms_loop;
tst times;
nop;
dec times;
bne ms_delay;
rts;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -