?? buding.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 ;先將源數(shù)據(jù)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
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -