📄 iap
字号:
;##############################################################
PROC CPZB1,CSDQ,CSCX
;********************************
; 考贝至块1 (调试通过)
;********************************
; 位于B0区, >=2000H
; 把块0的ROM的0600H-1FFFH,
;复制到块1的ROM的0600H-1FFFH。
;--------------------------------
;入口: 无
;--------------------------------
;出口: 无
;--------------------------------
;资源 占用EXRAM的0280H-02FFH
;--------------------------------
CPZB1:
PUSH PSW
PUSH ACC
PUSH B
MOV A,R0
PUSH ACC
MOV A,R1
PUSH ACC
MOV A,R2
PUSH ACC
MOV A,R3
PUSH ACC
MOV A,R4
PUSH ACC
;--------
MOV R1,#06H ;目的地址H
MOV R2,#00H ;目的地址L
MOV R3,#06H ;源地址H
MOV R4,#00H ;源地址L
MOV R0,#52 ;数量:52=(1FFFH-0600H+1)/128
CPZB1A:
MOV DPH,R3 ;源地址
MOV DPL,R4
MOV B,#0
LCALL CSDQ ;参数读取
MOV R3,DPH
MOV R4,DPL ;已经增加128
LCALL CSJC ;参数检测,无参数时跳过
JNZ CPZB1B
LCALL R1R2J128 ;R1R2+128
LJMP CPZB1C
include "软件陷阱.asm"
CPZB1B:
MOV DPH,R1 ;目的地址
MOV DPL,R2
LCALL CSCX ;参数重写
MOV R1,DPH
MOV R2,DPL ;已经增加128
CPZB1C:
DJNZ R0,CPZB1A
;--------------
POP ACC
MOV R4,A
POP ACC
MOV R3,A
POP ACC
MOV R2,A
POP ACC
MOV R1,A
POP ACC
MOV R0,A
POP B
POP ACC
POP PSW
RET
include "软件陷阱.asm"
;********************************
; 参数检测
;********************************
;检测EXRAM的0280H-02FFH有无参数
;--------------------------------
;入口: EXRAM
;--------------------------------
;出口: A 0=无参数
;--------------------------------
;资源 无
;--------------------------------
CSJC:
PUSH PSW
PUSH B
PUSH DPH
PUSH DPL
;--------
MOV DPTR,#0280H
MOV B,#0FFH
CSJC1:
MOVX A,@DPTR
INC DPTR
ANL B,A
MOV A,DPL
CJNE A,#00H,CSJC1
MOV A,B
CPL A
;--------
POP DPL
POP DPH
POP B
POP PSW
RET
include "软件陷阱.asm"
;********************************
; R1R2增加128
;********************************
;入口: 无
;--------------------------------
;出口: R1R2=R1R2+128
;--------------------------------
;资源 无
;--------------------------------
R1R2J128:
PUSH PSW
PUSH ACC
MOV A,R2
ADD A,#128
MOV R2,A
MOV A,R1
ADDC A,#0
MOV R1,A
POP ACC
POP PSW
RET
include "软件陷阱.asm"
;##############################################################
;********************************
; 参数读取 (调试通过)
;********************************
; 根据 B 的不同,分别把块1或块0
;的 ROM @DPTRi--@DPTRi+127,复制到
;EXRAM的0280H--02FFH.
;--------------------------------
;入口: B=0/(1-FF)
; DPTR
;--------------------------------
;出口: DPTR+128
;--------------------------------
;资源 无
;--------------------------------
CSDQ:
PUSH PSW
PUSH ACC
MOV A,DPL
CJNE A,#00H,CSDQ1
LJMP CSDQ2
include "软件陷阱.asm"
CSDQ1:
CJNE A,#80H,CSDQ5 ;地址不整
CSDQ2:
PUSH DP1H
PUSH DP1L
MOV DP1H,DPH ;源首地址
MOV DP1L,DPL
PUSH AUXR1
MOV AUXR1,#0 ;DPTR0
PUSH DPH
PUSH DPL
MOV DPH,#02H ;目的地址EXRAM:0280H
MOV DPL,#80H
MOV AUXR1,#1 ;DPTR1
PUSH DPH
PUSH DPL
MOV DPH,DP1H ;源地址
MOV DPL,DP1L
MOV A,R0
PUSH ACC
MOV R0,#128 ;数据个数
PUSH SFCF
MOV A,B
JZ CSDQ3 ;区分B0,B1
MOV SFCF,#0 ;SFCF[1:0]=00:在B1读取参数
LJMP CSDQ4
include "软件陷阱.asm"
CSDQ3:
MOV SFCF,#1 ;SFCF[1:0]=01:在B0读取参数
CSDQ4:
MOV AUXR1,#1 ;DPTR1,源
MOV A,#0
MOVC A,@A+DPTR
INC DPTR
MOV AUXR1,#0 ;DPTR0,目的
MOVX @DPTR,A
INC DPTR
DJNZ R0,CSDQ4
POP SFCF
POP ACC
MOV R0,A
MOV AUXR1,#1 ;DPTR1
MOV DP1L,DPL
MOV DP1H,DPH
POP DPL
POP DPH
MOV AUXR1,#0 ;DPTR0
POP DPL
POP DPH
POP AUXR1
MOV DPL,DP1L
MOV DPH,DP1H
POP DP1L
POP DP1H
CSDQ5:
POP ACC
POP PSW
RET
include "软件陷阱.asm"
;********************************
; 参数重写 (调试通过)
;********************************
; 把EXRAM的0280H--02FFH,复制到
;块1的ROM @DPTR--@DPTR+127中.
;--------------------------------
;入口: 2000H > DPTR >= 0600H
; DPL=00H/80H
;--------------------------------
;出口: DPTR+128
;--------------------------------
;资源 无
;--------------------------------
CSCX:
PUSH PSW
PUSH ACC
MOV A,DPH
CJNE A,#20H,$+3
JNC CSCXE ;块1目的地址>=2000H,不合适
CJNE A,#06H,$+3
JC CSCXE ;块1目的地址<0600H,不合适
MOV A,DPL
CJNE A,#00H,CSCX1
LJMP CSCX2
include "软件陷阱.asm"
CSCX1:
CJNE A,#80H,CSCXE ;地址不整
CSCX2:
MOV A,R0
PUSH ACC
PUSH DP1H
PUSH DP1L
MOV DP1H,DPH ;目的首地址
MOV DP1L,DPL
PUSH AUXR1
MOV AUXR1,#1 ;DPTR1
PUSH DPH
PUSH DPL
MOV AUXR1,#0 ;DPTR0
PUSH DPH
PUSH DPL
CSCX3:
MOV AUXR1,#0 ;DPTR0
MOV DPH,#02H ;源首地址EXRAM:0280H
MOV DPL,#80H
MOV AUXR1,#1 ;DPTR1
MOV DPH,DP1H ;目的首地址
MOV DPL,DP1L
LCALL SQCC ;扇区擦除
MOV R0,#128 ;数据个数
CSCX4:
MOV AUXR1,#0 ;DPTR0,源
MOVX A,@DPTR
INC DPTR
MOV AUXR1,#1 ;DPTR1,目的
LCALL ZJBC ;字节编程
LCALL ZJXL ;字节校验
JZ CSCX3 ;失败,重来
INC DPTR
DJNZ R0,CSCX4
MOV AUXR1,#0 ;DPTR0
POP DPL
POP DPH
MOV AUXR1,#1 ;DPTR1
MOV DP1L,DPL ;此时,DPL=目的尾地址+1
MOV DP1H,DPH
POP DPL
POP DPH
POP AUXR1
MOV DPL,DP1L ;此时,DP1L=目的尾地址+1
MOV DPH,DP1H
POP DP1L
POP DP1H
POP ACC
MOV R0,A
CSCXE:
POP ACC
POP PSW
RET
include "软件陷阱.asm"
;##############################################################
;********************************
; 扇区擦除 30mS (试验通过)
;********************************
;入口: DPTR
;--------------------------------
;出口: 无
;--------------------------------
;资源 无
;--------------------------------
SQCC:
PUSH SFCF
ORL SFCF,#01000000B
MOV SFAH,DPH
MOV SFAL,DPL
MOV SFCM,#0BH
PUSH ACC
SQCC1:
MOV A,SFST
ANL A,#00000100B
JNZ SQCC1
POP ACC
POP SFCF
RET
include "软件陷阱.asm"
;********************************
; 字节编程 50uS (试验通过)
;********************************
;入口: A,DPTR
;--------------------------------
;出口: 无
;--------------------------------
;资源 无
;--------------------------------
ZJBC:
PUSH SFCF
ORL SFCF,#01000000B
MOV SFAH,DPH
MOV SFAL,DPL
MOV SFDT,A
MOV SFCM,#0EH
PUSH ACC
ZJBC1:
MOV A,SFST
ANL A,#00000100B
JNZ ZJBC1
POP ACC
POP SFCF
RET
include "软件陷阱.asm"
;********************************
; 字节校验 50nS (试验通过)
;********************************
;入口: A,DPTR
;--------------------------------
;出口: A=#0失败
;--------------------------------
;资源 无
;--------------------------------
ZJXL:
PUSH SFCF
ORL SFCF,#01000000B
MOV SFAH,DPH
MOV SFAL,DPL
MOV SFCM,#0CH
CJNE A,SFDT,ZJXL1
MOV A,#0FFH ;OK
ZJXL2:
POP SFCF
RET
include "软件陷阱.asm"
ZJXL1:
MOV A,#0 ;失败
LJMP ZJXL2
include "软件陷阱.asm"
;********************************
END
;##############################################################
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -