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

📄 buding.asm

📁 辞典 dict3.asm.grammar.asm,newword.asm 学习 learn.asm 名片 userinf.asm 备忘 userinf.asm 提醒 userinf
💻 ASM
字号:
; ***************************************************************************
; *     Project : Electronic Dictionary                                     *
; *        Date : 2003.9                                                    *
; *   File Name : BUDING.ASM                                                *
; ***************************************************************************

        pw      128
        case    off
        externs on
        include st2202.def
        include Data.def
        include Bios.h
        include Graphics.h
        include Graph.def
        include KeyDef.def
        include DataBank.def

ps0a    .section
bankno  equ     updatesc_bank

; ***************************************************************************
_CLEAR_FLASH_BUFFER:
        jsr     _POINT_TO_FLASH_BUFFER
        jmp     _CDATA_DECIDE_SECTOREREASE

; ***************************************************************************
_POINT_TO_FLASH_BUFFER:
        stz     <drrh
        lda     #<FlashBank_bios
        sta     <drrl
        lda     #>flash_buffer
        sta     <indh
        lda     #<flash_buffer
        sta     <indl
        rts

; ***************************************************************************
_POINT_TO_FLASH_BUFFER_from:
        stz     <drrh
        lda     #<FlashBank_bios
        sta     <drrl
        lda     #>flash_buffer
        sta     <insh
        stz     <insl
        rts

; ***************************************************************************
_POINT_TO_OBJECT_FLASH:
        stz     <drrh
        lda     <flash_object_drr
        sta     <drrl
        lda     <flash_pointer_dh  ;;先将目的块备份
        and     #0f0h
        sta     <indh
;;      lda     <flash_pointer_dl  ;;先将目的块备份
        stz     <indl
        rts

; ***************************************************************************
_POINT_TO_SOURCE_FLASH:
        stz     <drrh
        lda     <flash_source_drr
        sta     <drrl
        lda     <flash_pointer_sh  ;;先将目的块备份
        sta     <insh
        lda     <flash_pointer_sl  ;;先将目的块备份
        sta     <insl
        rts

; ***************************************************************************
_POINT_TO_SPECIAL_RAM_BUFFER:
        lda     #>special_ram_buffer
        sta     <indh
        lda     #<special_ram_buffer
        sta     <indl
        rts

; ***************************************************************************
_COPY_OBJECT_FLASH_TO_FLASH_BUFFER:
        stz     <drrh
        lda     <flash_pointer_dh  ;;先将目的块备份
        and     #0f0h
        sta     <insh
        stz     <insl
        lda     #>flash_buffer
        sta     <indh
        stz     <indl
?2:
        lda     <flash_object_drr
        sta     <drrl
        lda     (<insl)
        tax
        lda     #<FlashBank_bios
        sta     <drrl
        jsr     _CDATA_DECIDE_WRITE_FLASH
        inc     <insl
        bne     ?1
        inc     <insh
?1:
        bbr6    <indh,?2
        rts

; ***************************************************************************
_CLEAR_OBJECT_FLASH:
        lda     <flash_pointer_dh  ;;将目的块擦除
        and     #0f0h
        sta     <indh
        lda     <flash_object_drr
        sta     <drrl
        jsr     _CDATA_DECIDE_SECTOREREASE        ;;先清空
        rts

; ***************************************************************************
_PART_1_COPY_FROM_FLASH_BUFFER:
        jsr     _POINT_TO_OBJECT_FLASH
        jsr     _POINT_TO_FLASH_BUFFER_from
?copy_data_loop1:
        lda     <indh
        cmp     <flash_pointer_dh
        bne     ?copy_data_loopx
        lda     <indl
        cmp     <flash_pointer_dl
        bne     ?copy_data_loopx
        rts

; ***************************************************************************
?copy_data_loopx:
        lda     #<FlashBank_bios
        sta     <drrl
        lda     (<insl)
        tax
        lda     <flash_object_drr
        sta     <drrl
        jsr     _CDATA_DECIDE_WRITE_FLASH
        inc     <insl
        bne     ?copy_data_loop1
        inc     <insh
        bra     ?copy_data_loop1

; ***************************************************************************
_PART_2_COPY_FROM_SPECIAL_RAM_BUFFER:
        lda     <insh
        pha
        lda     <insl
        pha
        lda     data_lengthh
        pha
        lda     data_lengthl
        pha
        lda     <flash_object_drr
        sta     <drrl
        lda     #>special_ram_buffer
        sta     <insh
        lda     #<special_ram_buffer
        sta     <insl
?copy_loop:
        lda     (<insl)
        tax
        jsr     _CDATA_DECIDE_WRITE_FLASH
        inc     <flash_pointer_dl
        bne     ?1
        inc     <flash_pointer_dh
?1:
        inc     <insl
        bne     ?dsafds
        inc     <insh
?dsafds:
;;      dec     data_lengthl
;;      bne     ?copy_loop
;;      dec     data_lengthh
;;      bpl     ?copy_loop
        clc
        lda     data_lengthl
        sbc     #0
        sta     data_lengthl
        lda     data_lengthh
        sbc     #0
        sta     data_lengthh
        ora     data_lengthl
        bne     ?copy_loop
        pla
        sta     data_lengthl
        pla
        sta     data_lengthh
        pla
        sta     <insl
        pla
        sta     <insh
        rts

; ***************************************************************************
_INS_POINT_TO_PART_3:
        clc
        lda     <insl
        adc     data_lengthl
        sta     <insl
        lda     <insh
        adc     data_lengthh
        sta     <insh
        rts

; ***************************************************************************
_PART_3_COPY_FROM_FLASH_BUFFER:
?copy_data_loop1:
        lda     #<FlashBank_bios
        sta     <drrl
        lda     (<insl)
        tax
        lda     <flash_object_drr
        sta     <drrl
        jsr     _CDATA_DECIDE_WRITE_FLASH
        inc     <insl
        bne     ?1
        inc     <insh
?1:
        bbr6    <insh,?copy_data_loop1
        rts

; ***************************************************************************
_COPY_SOURCE_DATA_TO_SPECIAL_RAM_BUFFER:
        lda     data_lengthh
        pha
        lda     data_lengthl
        pha
        jsr     _POINT_TO_SPECIAL_RAM_BUFFER
        jsr     _POINT_TO_SOURCE_FLASH
?copy_loop:
        lda     (<insl)
        sta     (<indl)
        jsr     _NXIND
        jsr     _NXINS
;;      dec     data_lengthl
;;      bne     ?copy_loop
;;      dec     data_lengthh
;;      bpl     ?copy_loop
        clc
        lda     data_lengthl
        sbc     #0
        sta     data_lengthl
        lda     data_lengthh
        sbc     #0
        sta     data_lengthh
        ora     data_lengthl
        bne     ?copy_loop
        pla
        sta     data_lengthl
        pla
        sta     data_lengthh
        rts
;;======================================================
;;破坏textbuffer
; ***************************************************************************
        PUBLIC  _COPY_FLASH_DATA_TO_FLASH
_COPY_FLASH_DATA_TO_FLASH:
        jsr     _COPY_SOURCE_DATA_TO_SPECIAL_RAM_BUFFER  ;先将源数据copy出
_COPY_SPECIAL_RAM_BUFFER_TO_FLASH:
        jsr     _CLEAR_FLASH_BUFFER
        jsr     _COPY_OBJECT_FLASH_TO_FLASH_BUFFER

        jsr     _CLEAR_OBJECT_FLASH
        jsr     _PART_1_COPY_FROM_FLASH_BUFFER
        jsr     _PART_2_COPY_FROM_SPECIAL_RAM_BUFFER
        jsr     _INS_POINT_TO_PART_3
        jsr     _PART_3_COPY_FROM_FLASH_BUFFER

        rts

; ***************************************************************************
        PUBLIC  _COPY_RAM_DATA_TO_FLASH
_COPY_RAM_DATA_TO_FLASH:
        lda     data_lengthh
        pha
        lda     data_lengthl
        pha
        lda     <flash_pointer_sh
        sta     <insh
        lda     <flash_pointer_sl
        sta     <insl
        lda     #>special_ram_buffer
        sta     <indh
        lda     #<special_ram_buffer
        sta     <indl
?copy_loop:
        lda     (<insl)
        sta     (<indl)
        jsr     _NXIND
        jsr     _NXINS
;;      dec     data_lengthl
;;      bne     ?copy_loop
;;      dec     data_lengthh
;;      bpl     ?copy_loop
        clc
        lda     data_lengthl
        sbc     #0
        sta     data_lengthl
        lda     data_lengthh
        sbc     #0
        sta     data_lengthh
        ora     data_lengthl
        bne     ?copy_loop

        pla
        sta     data_lengthl
        pla
        sta     data_lengthh
        bra     _COPY_SPECIAL_RAM_BUFFER_TO_FLASH

;;=====================================================
;;       INS += 1.
;;=====================================================
_NXINS:  inc     <INSL
        bne     ?1
        inc     <INSH
        bne     ?1
        smb7    <INSH
        inc     <DRRl
        bne     ?1
        inc     <drrh
?1:
        rts

;;========================================
        PUBLIC  _CDATA_DECIDE_WRITE_FLASH
_CDATA_DECIDE_WRITE_FLASH:
        bbr1   <sf1,?to_512K_flash
        jmp    _WRITE_FLASH_BYTE_BIG
?to_512K_flash:
        jmp    _WRITE_FLASH_BYTE
;;===========================

;;===========================
_CDATA_DECIDE_SECTOREREASE:
        bbr1   <sf1,?to_512K_flash
        jmp    _SECTOR_ERASE_BIG
?to_512K_flash:
        jmp    _SECTOR_ERASE

; ***************************************************************************
; * Input:  IND, y, <DRR                                                    *
; ***************************************************************************
_SECTOR_ERASE_BIG:
        JSR     LJSR
        DW      biosbank
        DW      SectorErase_big-1
        RTS

; ***************************************************************************
; * Input:  IND, y, <DRR                                                    *
; ***************************************************************************
_SECTOR_ERASE:
        JSR     LJSR
        DW      biosbank
        DW      SectorErase-1
        RTS

; ***************************************************************************
; * Input:  x, IND                                                          *
; ***************************************************************************
_WRITE_FLASH_BYTE:
        jsr     LJSR
        DW      biosbank
        DW      WriteFlashByte+29
        RTS

; ***************************************************************************
; *  IND += 1.                                                              *
; ***************************************************************************
_NXIND:  inc     <INDL
        bne     ?1
        inc     <INDH
        bne     ?1
        smb7    <INDH
        inc     <DRRl
        bne     ?1
        inc     <drrh
?1:
        RTS

; ***************************************************************************
; *                                                                         *
; ***************************************************************************
_WRITE_FLASH_BYTE_BIG:
        jsr     LJSR
        DW      biosbank
        DW      WriteFlashByte_big-1
        RTS

; ***************************************************************************
        END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -