📄 flash.lis
字号:
.module flash.c
.area text
0000 .dbfile flash.c
0000 .dbfunc e SetProtectAddress _SetProtectAddress fV
0000 ; address -> 2,X
0000 _SetProtectAddress::
0000 .dbline -1
0000 95 tsx
0001 .dbline 18
0001 ; #include "flash.h"
0001 ; #include "GP32C.h"
0001 ; #include <string.h>
0001 ; static void Delay1(void);
0001 ; static void Delay2(void);
0001 ; static void DoEraseFlash(void);
0001 ; static void DoWriteFlash(void);
0001 ; static void EraseFlash_End(void);
0001 ; static void WriteFlash_End(void);
0001 ; UINT8 PrgIOfRam[];
0001 ; static UINT16 g_bBegin, g_bEnd;
0001 ; static UINT8 *g_pAddress;
0001 ;
0001 ; static UINT8 *g_pData;
0001 ; static UINT8 g_nNum;
0001 ;
0001 ; void SetProtectAddress(UINT8 address)
0001 ; {
0001 .dbline 19
0001 ; FLBPR = address;
0001 E602 lda 2,X
0003 C7FF7E sta 0xff7e
0006 .dbline -2
0006 L1:
0006 .dbline 0 ; func end
0006 81 rts
0007 .dbsym l address 2 c
0007 .dbend
0007 .dbfunc e EraseFlash _EraseFlash fV
0007 ; address -> 2,X
0007 _EraseFlash::
0007 .dbline -1
0007 95 tsx
0008 .dbline 22
0008 ; }
0008 ; void EraseFlash(UINT8 *address)
0008 ; {
0008 .dbline 23
0008 ; g_pAddress = address;
0008 E602 lda 2,X
000A B703 sta *_g_pAddress
000C E603 lda 3,X
000E B704 sta *_g_pAddress+1
0010 .dbline 25
0010 ;
0010 ; asm("ldhx #_DoEraseFlash");
0010 450043 ldhx #_DoEraseFlash
0013 .dbline 26
0013 ; asm("sthx _g_bBegin");
0013 3507 sthx _g_bBegin
0015 .dbline 27
0015 ; asm("ldhx #_EraseFlash_End");
0015 45007D ldhx #_EraseFlash_End
0018 .dbline 28
0018 ; asm("sthx _g_bEnd");
0018 3505 sthx _g_bEnd
001A .dbline 32
001A ;
001A ;
001A ;
001A ; memcpy((void *)PrgIOfRam, (void *)g_bBegin, g_bEnd - g_bBegin);
001A B606 lda *_g_bEnd+1
001C B008 sub *_g_bBegin+1
001E B700 sta *__r1
0020 B605 lda *_g_bEnd
0022 B207 sbc *_g_bBegin
0024 B700 sta *__r0
0026 B600 lda *__r1
0028 87 psha
0029 B600 lda *__r0
002B 87 psha
002C B608 lda *_g_bBegin+1
002E 87 psha
002F B607 lda *_g_bBegin
0031 87 psha
0032 A609 lda #<_PrgIOfRam
0034 87 psha
0035 A609 lda #>_PrgIOfRam
0037 87 psha
0038 CD0000 jsr _memcpy
003B A706 ais #6
003D 95 tsx
003E .dbline 35
003E ;
003E ;
003E ; asm("ldhx #_PrgIOfRam");
003E 450009 ldhx #_PrgIOfRam
0041 .dbline 36
0041 ; asm("jsr ,x");
0041 FD jsr ,x
0042 .dbline -2
0042 L2:
0042 .dbline 0 ; func end
0042 81 rts
0043 .dbsym l address 2 pc
0043 .dbend
0043 .dbfunc s DoEraseFlash _DoEraseFlash fV
0043 ; i -> 0,X
0043 _DoEraseFlash:
0043 .dbline -1
0043 A7FF ais #-1
0045 95 tsx
0046 .dbline 39
0046 ; }
0046 ; static void DoEraseFlash(void)
0046 ; {
0046 .dbline 41
0046 ; UINT8 i;
0046 ; FLCR = 0b00000010;
0046 A602 lda #2
0048 C7FE08 sta 0xfe08
004B .dbline 42
004B ; i = FLBPR;
004B C6FF7E lda 0xff7e
004E F7 sta ,X
004F .dbline 43
004F ; *((volatile UINT8*)g_pAddress) = 68;
004F A644 lda #68
0051 5503 ldhx *_g_pAddress
0053 F7 sta ,x
0054 95 tsx
0055 .dbline 44
0055 ; asm("bsr _Delay1");
0055 AD17 bsr _Delay1
0057 .dbline 45
0057 ; FLCR = 0b00001010;
0057 A60A lda #10
0059 C7FE08 sta 0xfe08
005C .dbline 46
005C ; asm("bsr _Delay1");
005C AD10 bsr _Delay1
005E .dbline 47
005E ; FLCR = 0b00001000;
005E A608 lda #8
0060 C7FE08 sta 0xfe08
0063 .dbline 48
0063 ; asm("bsr _Delay1");
0063 AD09 bsr _Delay1
0065 .dbline 49
0065 ; FLCR = 0b00000000;
0065 4F clra
0066 C7FE08 sta 0xfe08
0069 .dbline 50
0069 ; asm("bsr _Delay1");
0069 AD03 bsr _Delay1
006B .dbline -2
006B L3:
006B A701 ais #1
006D .dbline 0 ; func end
006D 81 rts
006E .dbsym l i 0 c
006E .dbend
006E .dbfunc s Delay1 _Delay1 fV
006E ; i -> 0,X
006E _Delay1:
006E .dbline -1
006E A7FF ais #-1
0070 95 tsx
0071 .dbline 53
0071 ; }
0071 ; static void Delay1(void)
0071 ; {
0071 .dbline 55
0071 7F clr ,X
0072 2001 bra L8
0074 L5:
0074 .dbline 55
0074 L6:
0074 .dbline 55
0074 7C inc ,X
0075 L8:
0075 .dbline 55
0075 ; UINT8 i;
0075 ; for(i = 0; i < 10; ++i);
0075 F6 lda ,X
0076 A10A cmp #10
0078 25FA blo L5
007A .dbline -2
007A L4:
007A A701 ais #1
007C .dbline 0 ; func end
007C 81 rts
007D .dbsym l i 0 c
007D .dbend
007D .dbfunc s EraseFlash_End _EraseFlash_End fV
007D _EraseFlash_End:
007D .dbline -1
007D .dbline 58
007D ; }
007D ; static void EraseFlash_End(void)
007D ; {
007D .dbline -2
007D L9:
007D .dbline 0 ; func end
007D 81 rts
007E .dbend
007E .dbfunc e WriteFlash _WriteFlash fV
007E ; n -> 6,X
007E ; data -> 4,X
007E ; address -> 2,X
007E _WriteFlash::
007E .dbline -1
007E 95 tsx
007F .dbline 61
007F ; }
007F ; void WriteFlash(UINT8 *address, UINT8 *data, int n)
007F ; {
007F .dbline 62
007F ; g_pAddress = address;
007F E602 lda 2,X
0081 B703 sta *_g_pAddress
0083 E603 lda 3,X
0085 B704 sta *_g_pAddress+1
0087 .dbline 63
0087 ; g_pData = data;
0087 E604 lda 4,X
0089 B701 sta *_g_pData
008B E605 lda 5,X
008D B702 sta *_g_pData+1
008F .dbline 64
008F ; g_nNum = n;
008F E607 lda 7,X
0091 B700 sta *_g_nNum
0093 .dbline 66
0093 ;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -