📄 upgrade.asm
字号:
jsr Delay10Second ;
bcc Wait_LinkCommand ;
jmp LinkError ;
Judge_LinkCommand: ;
rmb4 <DataComeFlag ;
lda <UData ;
cmp #LinkCommand ;
beq SysLinkToPCOk ;
bra Wait_LinkCommand ;
SysLinkToPCOk: ;
lda #12 ;
sta <Sys_TryTime ;Try 12 times
;
SendAck_WaitHead: ;
ldx #HeadAck_92H ;Ready to receive data
jsr SendByte ;
;
lda #9 ;
sta <DelayTime
ldy #0 ;
Wait_SysHead: ;接收Head
bbs4 <DataComeFlag,Wait_SysHead_1
jsr Delay10Second ;
bcc Wait_SysHead ;
SendAck_WaitHead_1: ;因为 Sys_CheckSum is Error
dec <Sys_TryTime ;
bne SendAck_WaitHead ;
jmp LinkError ;
Wait_SysHead_1: ;
rmb4 <DataComeFlag ;
lda <UData ;
sta Sys_PackLen,y ;Head长度
iny ;
cpy <Sys_PackLen ;
bcc Wait_SysHead ;
Check_SysHead: ;校验 Head Sys_CheckSum
ldy #4 ;
lda <Sys_CheckSumL ;
sta JudgeSys_CheckSumL ;
lda <Sys_CheckSumH ;
sta JudgeSys_CheckSumH ; DataClass +
?_0: ; DataLenL +
clc ; DataLenM +
lda Sys_PackLen,y ; DataLenH +
adc JudgeSys_CheckSumL ; =0
sta JudgeSys_CheckSumL ;
lda JudgeSys_CheckSumH ;
adc #0 ;
sta JudgeSys_CheckSumH ;
iny ;
cpy <Sys_PackLen ;
bcc ?_0 ;
lda JudgeSys_CheckSumL ;
bne ?_Err ;
lda JudgeSys_CheckSumH ;
beq ?_Right ;
?_Err: ;
;bra SendAck_WaitHead_1 ;
jmp SendAck_WaitHead_1
?_Right: ;
lda <Sys_FileClass ;
cmp #10 ;
beq Linkreallyok ;
jmp LinkError ;
Linkreallyok: ;
LSetScreen 1 ;
LPrint SysHintMsg ;
Lcdata_decide_updatescreen ;
RealRecieveSysGame:
lda #6h ;初始化系统存放地址
sta <INDH ;
lda #80H
sta <INDL ;
lda <Sys_FileLengthH ;计算 256 的个数
sta <Sys_Count_2k ;
lda <Sys_Count_2k
beq ?_1
lda #0ffH
sta <PackageDataLen
bra ?_3
?_1:
lda <Sys_FileLengthL
bne ?_2
jmp ReceiveGameOK
?_2:
lda <Sys_FileLengthL
dec
sta <PackageDataLen
?_3:
lda #12 ;
sta <Sys_TryTime ;
Wait_SysData_0: ;
stz <Sys_CheckSumL ;
stz <Sys_CheckSumH ;
lda #<(NetData-5) ;
sta <INSL ;
lda #>(NetData-5) ;
sta <INSH ;
stz <Sys_delaycountL ;Delay 2 second
stz <Sys_delaycountM ;
ldx #ReadyAck_A5H ;
jsr SendByte ;zjw_Power
stz <IREQL
stz <IENAL
Wait_SysData: ;接收 2k SysData
lda <DataComeFlag ;
and #00010000b ;
bne Receive_SysData ;
jsr Delay2Second ;zjw_Power
bcc Wait_SysData ;
Wait_SysData_1: ;
dec <Sys_TryTime ;
bne Wait_SysData_0 ;
jmp LinkError ;
Receive_SysData: ;
rmb4 <DataComeFlag ;
stz <Sys_delaycountL ;Delay 2 Second
stz <Sys_delaycountM ;
lda <UData
sta (<INS)
lda <INSH
cmp #(>NetData)
bne ?_3
lda <INSL
cmp <PackageDataLen
beq Check_SysData256
?_3:
inc <INSL
lda <INSL
beq ?_4
jmp Wait_SysData
?_4:
lda <INSH
cmp #(>NetData)
bne ?_5
jmp Wait_SysData_1
?_5:
inc <INSH
jmp Wait_SysData
Check_SysData256: ;校验 2K SysData 的 Sys_CheckSum
lda #<NetData ;
sta <INSL ;
lda #>NetData ;
sta <INSH ;
lda NetData-2 ;
sta <Sys_CheckSumL ;
lda NetData-1 ;
sta <Sys_CheckSumH
?_1:
clc
lda (<INS)
adc <Sys_CheckSumL
sta <Sys_CheckSumL
lda <Sys_CheckSumH
adc #0
sta <Sys_CheckSumH
lda <INSL
cmp <PackageDataLen ;范围 00H-FFH ----->> 1-256Byte
beq ?_2
inc <INSL
bra ?_1
?_2:
lda <Sys_CheckSumL ;
bne ?_Err ;
lda <Sys_CheckSumH ;
beq CheckSum_Right ;
?_Err: ;
;jmp Wait_SysData_1 ;Sys_CheckSum ERROR
bra Wait_SysData_1
For_Bra_1to_Wait_SysData:
bra Wait_SysData
CheckSum_Right: ;
lda #<NetData ;
sta <INSL ;
lda #>NetData ;
sta <INSH ;
stz <Sys_delaycountL ;Delay 2 second
stz <Sys_delaycountM ;
Save_SysData256: ;保存 2K 数据到 Flash
lda (<INS)
sta (<IND)
inc <INDL
bne nxinde
inc <INDH
bne nxinde
jmp LinkError
nxinde:
lda <INSL
cmp <PackageDataLen
beq ?_0
inc <INSL
bra Save_SysData256
?_0:
;///////////////
lda <Sys_Count_2k
beq ?_6
dec <Sys_Count_2k
lda <Sys_Count_2k
beq ?_7
lda #0ffH
sta <PackageDataLen
bra ?_1
?_7:
lda <Sys_FileLengthL
beq ?_6
lda <Sys_FileLengthL
dec
sta <PackageDataLen
bra ?_1
?_6:
jmp ReceiveGameOK
?_1: ;
ldx #ReadyAck_96H ;
jsr SendByte ;zjw_Power
?_2: ;
lda <DataComeFlag ;
and #00010000b ;
bne ?_3 ;
jsr Delay2Second ;zjw_Power
bcc ?_2 ;
?_4: ;
dec <Sys_TryTime ;
bne ?_1 ;
jmp LinkError ;
?_3: ;
lda <UData ;
cmp #DataFirstByt_99H ;
bne ?_4
lda #10 ;
sta <Sys_TryTime ;
rmb4 <DataComeFlag
stz <Sys_CheckSumL ;
stz <Sys_CheckSumH ;
lda #<(NetData-4) ;
sta <INSL ;
lda #>(NetData-4) ;
sta <INSH ;
stz <Sys_delaycountL ;Delay 2 second
stz <Sys_delaycountM ;
jmp Wait_SysData ;Receive Next 2K SysData
;bra For_Bra_1to_Wait_SysData
ReceiveGameOK:
;; nop
;; nop
;; nop
;;
;; ldx #ReadyAck_96H ;
;; jsr SendByte ;
;; nop
;; nop
;; nop
;;
;; ldx #ReadyAck_96H ;
;; jsr SendByte ; ;
;; nop
;; nop
;; nop
;;
;; ldx #ReadyAck_96H ;
;; jsr SendByte
jmp 680H
copy_end_x:
init_bank_address:
stz <indl
stz <insl
lda #80h
sta <indl
sta <insl
rts
WriteFlashByte_big:
lda #0aah
sta 08aaah ;;8000h & 5555h
lda #55h
sta 08555h ;;8000h & 2aaah
lda #0a0h
sta 08aaah ;;8000h & 5555h
txa
sta (IND)
?Data_Polling:
bbr0 <eflag,?3
rmb0 <eflag
?1:
bbr0 <eflag,?2
smb3 <sf1 ;;Flash 出错!!!
rts
?2:
cmp (IND)
bne ?1
bra ?4
?3:
cmp (IND)
bne ?Data_Polling
?4:
;;=====================================================
;; IND += 1.
;;=====================================================
inc <INDL
bne ?1
inc <INDH
bne ?1
lda #80h
sta <INDH
inc <DRRl
bne ?5
inc <drrh
?5:
sec
rts
;;破坏:x,y
ChipErase_big:
lda #80h
sta <DRRl
stz <DRRh
lda #0aah ;;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -