📄 upgrade.asm
字号:
; ***************************************************************************
; * Project : Electronic Dictionary *
; * Date : 2003.9 *
; * File Name : UPGRADE.ASM *
; ***************************************************************************
pw 128
case off
externs on
include st2202.def ;; Include ST2100 I/O define.
include Data.def
include DataBank.def
include KeyDef.def
include Graph.def
include Graphics.h
include bios.h
include Debug.h
public urx_int
public utx_int
public load_pc_data_to_flash
public erase_flash_4k_x_n_bytes
public format_32k
public WriteFlashByte
public ChipErase
public SectorErase
public InitProFormat
public WriteFlashByte_big
public ChipErase_big
public SectorErase_big
public NxIND
public DataComeFlag
public systemupgrade
public Delay2Second
public Delay10Second
public StartSIO
public StopSIO
public SendByte
public secret_area_addr
public SysLinkToPCOk
public RealRecieveSysGame
drr_count equ 100h ;由于多机拖,可破坏任何RAM
NetData Equ 300H
secret_area_addr equ 0e000h
;====================================
; 系统升级变量
DelayTime equ CData+1
Sys_PackLen equ CData+2
Sys_PackLenL equ CData+2
Sys_PackLenH equ CData+3
Sys_CheckSumL equ CData+4
Sys_CheckSumH equ CData+5
Sys_FileClass equ CData+6
Sys_FileLengthL equ CData+7
Sys_FileLengthH equ CData+8
;Sys_FileLengthH equ CData+9
Sys_Count_2k equ CData+21
JudgeSys_CheckSumL equ CData+22
JudgeSys_CheckSumH equ CData+23
Sys_TryTime equ CData+24
Sys_delaycountL equ CData+25
Sys_delaycountM equ CData+26
Sys_delaycountH equ CData+27
DataComeFlag Equ CData+29
PackageDataLen equ cdata+30
LinkCommand equ 80h
HeadAck_92H equ 92h
ReadyAck_A5H equ a5h
ReSendAck_A5H equ a5h
ReadyAck_96H equ 96H
DataFirstByt_99H equ 99H
PS0 .SECTION
BankNo equ biosbank
public System_UpGrade_from_bios
public initio
ConnectPCMsg: db 0dh,' 正在寻找',0dh,' 通信对象...',0
LinkErrorMsg: db ' 通信失败!',0dh,'请复位,检查并确认线路正常后重新升级!',0
SysHintMsg: db 0dh,' 系统升级中',0dh,' 请等待!',0
ErrorChecksum: db ' 校验错',0dh,' 请重新升级系统!',0
verifymsg: db ' 校验中',0
load_pc_data_to_flash_string:
db 0dh,'已经进入多机同时系统升级!',0dh,' 请稍等......',0
system_upgrade_init_string:
db 0dh,'系统升级,正在初始化,请稍等...... .',0
wrong_string_wait:
db ' 数据错!已退出.',0dh,'请等待所有机子传完后'
db ',跟其它机子一起升级!',0
wait_mouse_string:
db 0dh,' 等待点鼠标....!',0
urx_int:
pha
smb4 <DataComeFlag
lda #00001100b ;;接收
ora <USTR
sta <USTR
pla
utx_int:
rti
hand_tab:
db 0cfh,0f5h,55h,aah ;;aa,55,f5,cf
;;==========================================
;;====== 只适用于Flash<=4MBytes ============
;;==========================================
load_pc_data_to_flash: ;;一拖一百式接收PC数据放 drr = 0080H开始.
lset_lcd_contrast
lsetscreen 1
lprint load_pc_data_to_flash_string
Lcdata_decide_updatescreen
rmb1 <eflag
bbr1 <eflag,$
rmb1 <eflag
bbr1 <eflag,$
lsetscreen 1
lprint wait_mouse_string
Lcdata_decide_updatescreen
jsr StartSIO
ldx #3
?1:
rmb4 <DataComeFlag
bbr4 <DataComeFlag,$
lda <UData
cmp hand_tab,x
bne ?wrong_data
dex
bpl ?1
bra ?ok_to_start
?wrong_data:
lsetscreen 1
lprint wrong_string_wait
Lcdata_decide_updatescreen
?waiting:
wai
bra ?waiting
?ok_to_start:
lsetscreen 1
lprint SysHintMsg
Lcdata_decide_updatescreen
ldx #1
?read_file_length: ;;文件长度/256
rmb4 <DataComeFlag
bbr4 <DataComeFlag,$
lda <UData
sta data_lengthl,x
dex
bpl ?read_file_length
;;====================================================
;;清除扇区,计算机方请稍等3S
sei
rmb5 <ienab
rmb5 <ienal
cli
lcdata_decide_ChipErase
;;=================================================
mutiple_upgrade:
stz <drrh
lda #<flash_prg_bank
sta <drrl
lda #>8000h
sta <indh
stz <indl
?recevie_next_256_bytes_data:
ldx #0h
?recevie_next_data:
rmb4 <DataComeFlag
bbr4 <DataComeFlag,$
lda <UData
sta special_ram_buffer,x
inx
bne ?recevie_next_data
;;写Flash,计算机方请稍等0.1s
jsr copy_special_ram_buffer_to_flash_256bytes
clc
lda data_lengthl
sbc #0
sta data_lengthl
lda data_lengthh
sbc #0
sta data_lengthh
ora data_lengthl
bne ?recevie_next_256_bytes_data
to_start_rom_checksum:
lda #01h
sta change
;jmp start_rom_checksum
jmp any_key_to_deldata_reset
copy_special_ram_buffer_to_flash_256bytes:
ldx #0
?copy_256bytes_loop:
bbr1 <sf1,?to_512K_flash
lda #0aah
sta 08aaah ;;8000h & 5555h
lda #55h
sta 08555h ;;8000h & 2aaah
lda #0a0h
sta 08aaah ;;8000h & 5555h
bra ?read_data_to_flash
?to_512K_flash:
lda #0aah
sta 0d555h ;;8000h & 5555h
lda #55h
sta 0aaaah ;;8000h & 2aaah
lda #0a0h
sta 0d555h ;;8000h & 5555h
?read_data_to_flash:
lda special_ram_buffer,x
sta (<indl)
?wait:
cmp (<indl)
bne ?wait
;;=====================================================
inc <INDL
bne ?1
inc <INDH
bne ?1
smb7 <INDH
inc <DRRl
bne ?1
inc <drrh
?1:
inx
bne ?copy_256bytes_loop
rts
;;=================================================
StartSIO:
sei
smb2 <sysf ;transing
lda #11000000b ;; enable RX,TX
ora <PFC
sta <PFC
;;lda #00011111b
lda #00111111b
and <PFD
sta <PFD
smb6 <PSC
smb7 <PSC
smb6 <PCC
rmb7 <PCC
lda #13 ;;设置波特率
sta <BDIV ;;
lda #61 ;;
sta <BRS ;;
lda #00000011b ;;使能波特率发生器及其他
sta <BCTR ;;
lda #00000010b ;;设置桢格式
sta <UCTR ;;
; lda #11000000b
lda #00000000b ;11/14/2002
sta <IRCTR
lda #00001101b ;;接收
sta <USTR
rmb2 <IREQH
rmb3 <IREQH
smb3 <IENAH
cli
rmb4 <DataComeFlag
rts
StopSIO:
sei
rmb3 <IENAH
rmb2 <sysf
stz <USTR
jsr setio
cli
rts
SendByte:
stx <UDATA ;
lda #00000011b ;
ora <USTR
sta <USTR ;
bbs1 <USTR,$
rts
Delay10Second:
clc ;;Clear C Flag
bbr1 <EFlag,ExitDelay10Sec
rmb1 <EFlag
lda <DelayTime
cmp #10
bcs ExitDelay10Sec
inc <DelayTime
ExitDelay10Sec:
rts
LinkError:
jsr StopSIO
lsetscreen_to_ds0 1
LPrint LinkErrorMsg
Lcdata_decide_updatescreen
?here:
wai
bra ?here
;; rts
Delay2Second:
clc ;2 cycle
lda <Sys_delaycountL ;3 cycle
adc #1 ;2 cycle
sta <Sys_delaycountL ;3 cycle
lda <Sys_delaycountM ;3 cycle
adc #0 ;2 cycle
sta <Sys_delaycountM ;3 cycle
nop
nop
nop
lda <Sys_delaycountL ;3 cycle
bne ?_exit ;2 cycle
lda <Sys_delaycountM
bne ?_exit
sec ;时间到 2 cycle
rts ;3 cycle
?_exit: clc ;时间没到
rts
;//////////////////////////////////////////////
System_UpGrade_from_bios: ;正常系统升级
;;==========================================
;;==========================================
lset_lcd_contrast
lsetscreen 1
lprint system_upgrade_init_string
Lcdata_decide_updatescreen
;//////////////////////\\\\\\\\\\\\\\\\\\\\\\\\\\\
;////// 系统升级 \\\\\\\\\
;//////////////////////\\\\\\\\\\\\\\\\\\\\\\\\\\\
SystemUpGrade:
jsr StartSIO ;
stz <DelayTime ;
rmb4 <DataComeFlag ;
Wait_LinkCommand: ;
lda <DataComeFlag ;
and #00010000b ;
bne Judge_LinkCommand ;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -