⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 upgrade.asm

📁 辞典 dict3.asm.grammar.asm,newword.asm 学习 learn.asm 名片 userinf.asm 备忘 userinf.asm 提醒 userinf
💻 ASM
📖 第 1 页 / 共 2 页
字号:
; ***************************************************************************
; *     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 + -