📄 flash.s
字号:
.module flash.c
.area text
.dbfile flash.c
.dbfunc e SetProtectAddress _SetProtectAddress fV
; address -> 2,X
_SetProtectAddress::
.dbline -1
tsx
.dbline 18
; #include "flash.h"
; #include "GP32C.h"
; #include <string.h>
; static void Delay1(void);
; static void Delay2(void);
; static void DoEraseFlash(void);
; static void DoWriteFlash(void);
; static void EraseFlash_End(void);
; static void WriteFlash_End(void);
; UINT8 PrgIOfRam[];
; static UINT16 g_bBegin, g_bEnd;
; static UINT8 *g_pAddress;
;
; static UINT8 *g_pData;
; static UINT8 g_nNum;
;
; void SetProtectAddress(UINT8 address)
; {
.dbline 19
; FLBPR = address;
lda 2,X
sta 0xff7e
.dbline -2
L1:
.dbline 0 ; func end
rts
.dbsym l address 2 c
.dbend
.dbfunc e EraseFlash _EraseFlash fV
; address -> 2,X
_EraseFlash::
.dbline -1
tsx
.dbline 22
; }
; void EraseFlash(UINT8 *address)
; {
.dbline 23
; g_pAddress = address;
lda 2,X
sta *_g_pAddress
lda 3,X
sta *_g_pAddress+1
.dbline 25
;
; asm("ldhx #_DoEraseFlash");
ldhx #_DoEraseFlash
.dbline 26
; asm("sthx _g_bBegin");
sthx _g_bBegin
.dbline 27
; asm("ldhx #_EraseFlash_End");
ldhx #_EraseFlash_End
.dbline 28
; asm("sthx _g_bEnd");
sthx _g_bEnd
.dbline 32
;
;
;
; memcpy((void *)PrgIOfRam, (void *)g_bBegin, g_bEnd - g_bBegin);
lda *_g_bEnd+1
sub *_g_bBegin+1
sta *__r1
lda *_g_bEnd
sbc *_g_bBegin
sta *__r0
lda *__r1
psha
lda *__r0
psha
lda *_g_bBegin+1
psha
lda *_g_bBegin
psha
lda #<_PrgIOfRam
psha
lda #>_PrgIOfRam
psha
jsr _memcpy
ais #6
tsx
.dbline 35
;
;
; asm("ldhx #_PrgIOfRam");
ldhx #_PrgIOfRam
.dbline 36
; asm("jsr ,x");
jsr ,x
.dbline -2
L2:
.dbline 0 ; func end
rts
.dbsym l address 2 pc
.dbend
.dbfunc s DoEraseFlash _DoEraseFlash fV
; i -> 0,X
_DoEraseFlash:
.dbline -1
ais #-1
tsx
.dbline 39
; }
; static void DoEraseFlash(void)
; {
.dbline 41
; UINT8 i;
; FLCR = 0b00000010;
lda #2
sta 0xfe08
.dbline 42
; i = FLBPR;
lda 0xff7e
sta ,X
.dbline 43
; *((volatile UINT8*)g_pAddress) = 68;
lda #68
ldhx *_g_pAddress
sta ,x
tsx
.dbline 44
; asm("bsr _Delay1");
bsr _Delay1
.dbline 45
; FLCR = 0b00001010;
lda #10
sta 0xfe08
.dbline 46
; asm("bsr _Delay1");
bsr _Delay1
.dbline 47
; FLCR = 0b00001000;
lda #8
sta 0xfe08
.dbline 48
; asm("bsr _Delay1");
bsr _Delay1
.dbline 49
; FLCR = 0b00000000;
clra
sta 0xfe08
.dbline 50
; asm("bsr _Delay1");
bsr _Delay1
.dbline -2
L3:
ais #1
.dbline 0 ; func end
rts
.dbsym l i 0 c
.dbend
.dbfunc s Delay1 _Delay1 fV
; i -> 0,X
_Delay1:
.dbline -1
ais #-1
tsx
.dbline 53
; }
; static void Delay1(void)
; {
.dbline 55
clr ,X
bra L8
L5:
.dbline 55
L6:
.dbline 55
inc ,X
L8:
.dbline 55
; UINT8 i;
; for(i = 0; i < 10; ++i);
lda ,X
cmp #10
blo L5
.dbline -2
L4:
ais #1
.dbline 0 ; func end
rts
.dbsym l i 0 c
.dbend
.dbfunc s EraseFlash_End _EraseFlash_End fV
_EraseFlash_End:
.dbline -1
.dbline 58
; }
; static void EraseFlash_End(void)
; {
.dbline -2
L9:
.dbline 0 ; func end
rts
.dbend
.dbfunc e WriteFlash _WriteFlash fV
; n -> 6,X
; data -> 4,X
; address -> 2,X
_WriteFlash::
.dbline -1
tsx
.dbline 61
; }
; void WriteFlash(UINT8 *address, UINT8 *data, int n)
; {
.dbline 62
; g_pAddress = address;
lda 2,X
sta *_g_pAddress
lda 3,X
sta *_g_pAddress+1
.dbline 63
; g_pData = data;
lda 4,X
sta *_g_pData
lda 5,X
sta *_g_pData+1
.dbline 64
; g_nNum = n;
lda 7,X
sta *_g_nNum
.dbline 66
;
; asm("ldhx #_DoWriteFlash");
ldhx #_DoWriteFlash
.dbline 67
; asm("sthx _g_bBegin");
sthx _g_bBegin
.dbline 68
; asm("ldhx #_WriteFlash_End");
ldhx #_WriteFlash_End
.dbline 69
; asm("sthx _g_bEnd");
sthx _g_bEnd
.dbline 71
;
; memcpy((void *)PrgIOfRam, (void *)g_bBegin, g_bEnd - g_bBegin);
lda *_g_bEnd+1
sub *_g_bBegin+1
sta *__r1
lda *_g_bEnd
sbc *_g_bBegin
sta *__r0
lda *__r1
psha
lda *__r0
psha
lda *_g_bBegin+1
psha
lda *_g_bBegin
psha
lda #<_PrgIOfRam
psha
lda #>_PrgIOfRam
psha
jsr _memcpy
ais #6
tsx
.dbline 75
;
;
;
; asm("ldhx #_PrgIOfRam");
ldhx #_PrgIOfRam
.dbline 76
; asm("jsr ,x");
jsr ,x
.dbline -2
L10:
.dbline 0 ; func end
rts
.dbsym l n 6 I
.dbsym l data 4 pc
.dbsym l address 2 pc
.dbend
.dbfunc s DoWriteFlash _DoWriteFlash fV
; j -> 0,X
; i -> 1,X
_DoWriteFlash:
.dbline -1
ais #-2
tsx
.dbline 82
;
;
;
; }
; static void DoWriteFlash(void)
; {
.dbline 84
; UINT8 i, j;
; FLCR = 0b00000001;
lda #1
sta 0xfe08
.dbline 85
; j = FLBPR;
lda 0xff7e
sta ,X
.dbline 86
; *((volatile UINT8*)g_pAddress) = 68;
lda #68
ldhx *_g_pAddress
sta ,x
tsx
.dbline 87
; asm("bsr _Delay2");
bsr _Delay2
.dbline 88
; FLCR = 0b00001001;
lda #9
sta 0xfe08
.dbline 89
; asm("bsr _Delay2");
bsr _Delay2
.dbline 90
; for(j = 0 ;j < g_nNum; ++j)
clr ,X
bra L15
L12:
.dbline 91
; {
.dbline 92
; *((volatile UINT8*)g_pAddress + j) = g_pData[j];
clr *__r0
lda ,X
add *_g_pData+1
sta *__r1
lda *__r0
adc *_g_pData
sta *__r0
ldhx *__r0
lda ,x
tsx
sta *__r1
clr *__r2
lda ,X
add *_g_pAddress+1
sta *__r3
lda *__r2
adc *_g_pAddress
sta *__r2
lda *__r1
ldhx *__r2
sta ,x
tsx
.dbline 93
clr 1,X
bra L19
L16:
.dbline 93
L17:
.dbline 93
inc 1,X
L19:
.dbline 93
lda 1,X
cmp #30
blo L16
.dbline 94
L13:
.dbline 90
inc ,X
L15:
.dbline 90
lda ,X
cmp *_g_nNum
blo L12
.dbline 95
; for(i = 0; i < 30; ++i);
; }
; FLCR = 0b00001000;
lda #8
sta 0xfe08
.dbline 96
; asm("bsr _Delay2");
bsr _Delay2
.dbline 97
; FLCR = 0b00000000;
clra
sta 0xfe08
.dbline 98
; asm("bsr _Delay2");
bsr _Delay2
.dbline -2
L11:
ais #2
.dbline 0 ; func end
rts
.dbsym l j 0 c
.dbsym l i 1 c
.dbend
.dbfunc s Delay2 _Delay2 fV
; i -> 0,X
_Delay2:
.dbline -1
ais #-1
tsx
.dbline 102
;
; }
; static void Delay2(void)
; {
.dbline 104
clr ,X
bra L24
L21:
.dbline 104
L22:
.dbline 104
inc ,X
L24:
.dbline 104
; UINT8 i;
; for(i = 0; i < 10; ++i);
lda ,X
cmp #10
blo L21
.dbline -2
L20:
ais #1
.dbline 0 ; func end
rts
.dbsym l i 0 c
.dbend
.dbfunc s WriteFlash_End _WriteFlash_End fV
_WriteFlash_End:
.dbline -1
.dbline 107
; }
; static void WriteFlash_End(void)
; {
.dbline -2
L25:
.dbline 0 ; func end
rts
.dbend
.area bss
.dbfile flash.c
_g_nNum:
.blkb 1
.dbsym s g_nNum _g_nNum c
_g_pData:
.blkb 2
.dbsym s g_pData _g_pData pc
_g_pAddress:
.blkb 2
.dbsym s g_pAddress _g_pAddress pc
_g_bEnd:
.blkb 2
.dbsym s g_bEnd _g_bEnd i
_g_bBegin:
.blkb 2
.dbsym s g_bBegin _g_bBegin i
_PrgIOfRam::
.blkb 1
.dbsym e PrgIOfRam _PrgIOfRam A[1:1]c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -