📄 wrtat29.asm
字号:
.mmregs
.global _c_int00
.ref init_54
dst_xpc .set 60h
source .set 61h
destinate .set 62h
length .set 63h
src_addr .set 64h
dst_addr .set 65h
count .set 66h
tmp_cmd .set 67h
tmp_dat .set 68h
tmp_addr .set 69h
WriteCode1 .set 0x00aa
WriteCode2 .set 0x0055
WriteCode3 .set 0x00a0
WriteAddr1 .set 0xd555
WriteAddr2 .set 0xaaaa
WriteAddr3 .set 0xd555
EraseCode1 .set 0x00aa
EraseCode2 .set 0x0055
EraseCode3 .set 0x0080
EraseCode4 .set 0x00aa
EraseCode5 .set 0x0055
EraseCode6 .set 0x0050;0x0010
EraseAddr1 .set 0xd555
EraseAddr2 .set 0xaaaa
EraseAddr3 .set 0xd555
EraseAddr4 .set 0xd555
EraseAddr5 .set 0xaaaa
EraseAddr6 .set 0x8000;0xd555
****************** inseted wait number ***************************
waitcoun .set 1000h
.sect "mainprg"
_c_int00:
SSBX INTM
RSBX CPL
NOP
NOP
ld #0,dp
NOP
NOP
NOP
NOP
stm #7fh,sp
CALL init_54
CALL erase
ST #0,count
erase_end:
RPT #0x7fff
NOP
RPT #0x7fff
NOP
ADDM #1,*(count)
NOP
NOP
CMPM *(count),#0x10
BC #erase_end,NTC
;CALL write
CALL write_prog
wait:
NOP
NOP
B wait
;erase function
erase:
st #EraseCode1,tmp_cmd
nop
ld #EraseAddr1,a
nop
nop
writa tmp_cmd
rpt #1000
nop
; 发写入命令2
st #EraseCode2,tmp_cmd
nop
ld #EraseAddr2,a
nop
nop
writa tmp_cmd
rpt #1000
nop
; 发写入命令3
st #EraseCode3,tmp_cmd
nop
ld #EraseAddr3,a
nop
nop
writa tmp_cmd
rpt #1000
nop
; 发写入命令4
st #EraseCode4,tmp_cmd
nop
ld #EraseAddr4,a
nop
nop
writa tmp_cmd
rpt #1000
nop
; 发写入命令5
st #EraseCode5,tmp_cmd
nop
ld #EraseAddr5,a
nop
nop
writa tmp_cmd
rpt #1000
nop
; 发写入命令6
st #EraseCode6,tmp_cmd
nop
ld #EraseAddr6,a
nop
nop
writa tmp_cmd
rpt #1000
nop
RET
;write function
;input param:
; tmp_dat :write data
; tmp_addr:write address
write:
st #WriteCode1,tmp_cmd
nop
ld #WriteAddr1,a
nop
nop
writa tmp_cmd
rpt #1000
nop
; 发写入命令2
st #WriteCode2,tmp_cmd
nop
ld #WriteAddr2,a
nop
nop
writa tmp_cmd
rpt #1000
nop
; 发写入命令3
st #WriteCode3,tmp_cmd
nop
ld #WriteAddr3,a
nop
nop
writa tmp_cmd
rpt #1000
nop
; 发写入命令4
LD tmp_dat,a
stl a,tmp_cmd
nop
ld tmp_addr,a
nop
nop
writa tmp_cmd
rpt #1000
nop
RET
****************************** program and erase **********************
write_prog:
;------------------------------------------------------------
; asc文件格式:以Code_start为首地址指针
; 第一个字为目标地址XPC(待写入)
; 第二个字为需写入的数据长度
;------------------------------------------------------------
; 初始化单元
stm #Code_start,ar5
nop
nop
; 以destinate保存目标地址XPC
ld *ar5+,a
stl a,dst_xpc
; 以number保存待写入数据长度(以字为单位)
ld *ar5,a
stl a,length
; 以source保存需要进行写入操作的原数据的地址
ld #(Code_start+2),a
nop
nop
stl a,source
;-----------------------------------------------------
; write
;-----------------------------------------------------
; 初始目的地址低16位
ST #8000h,destinate
NOP
NOP
ST #0,count
NOP
NOP
repeat:
; 写入最后一块
LD source,A
ADD count,A
STLM A,AR1
NOP
NOP
LD *AR1,B
STL B,tmp_dat
NOP
NOP
LD destinate,A
ADD count,A
STL A,tmp_addr
NOP
NOP
CALL write
NOP
LD count,A
ADD #1,A
STL A,count
SUB length,A
BC repeat,ALT
ST #0x8000,tmp_dat
ST #0xffff,tmp_addr
CALL write
RPT #1000
NOP
RET
.copy "xf.asc"
.end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -