usbdisk_2l.lst
来自「MP3 整个 SDK」· LST 代码 · 共 653 行 · 第 1/2 页
LST
653 行
122 break;
\ 00C6 ?0023:
\ 00C6 ?0022:
\ 00C6 ?0017:
123 }
124 }
125
126 displayend:
127 if(HoldDispState==1)
\ 00C6 3A6700 LD A,(HoldDispState)
\ 00C9 3D DEC A
\ 00CA 200C JR NZ,?0033
\ 00CC ?0032:
128 {
129 ResShowPic(UDLOCK_S, 65, 49);
\ 00CC 0E31 LD C,49
\ 00CE C5 PUSH BC
\ 00CF 0E41 LD C,65
\ 00D1 110800 LD DE,8
\ 00D4 CD0000 CALL LWRD ResShowPic
\ 00D7 F1 POP AF
\ 00D8 ?0033:
130 }
131
132 if (!((input8(0xfd)&0x10)==0x10))
\ 00D8 DBFD IN A,(253)
\ 00DA CB67 BIT 4,A
\ 00DC 2012 JR NZ,?0037
\ 00DE ?0034:
133 {
134 if(((input8(0xfd)&0x20)==0x20))
\ 00DE DBFD IN A,(253)
\ 00E0 CB6F BIT 5,A
\ 00E2 280C JR Z,?0037
\ 00E4 ?0036:
135 ResShowPic(CARDLOCK,25,30);
\ 00E4 0E1E LD C,30
\ 00E6 C5 PUSH BC
\ 00E7 0E19 LD C,25
\ 00E9 112000 LD DE,32
\ 00EC CD0000 CALL LWRD ResShowPic
\ 00EF F1 POP AF
\ 00F0 ?0037:
\ 00F0 ?0035:
136 }
137 output8(0x00,i); //升回频率
\ 00F0 210000 LD HL,0
\ 00F3 39 ADD HL,SP
\ 00F4 7E LD A,(HL)
\ 00F5 D300 OUT (0),A
138 for(j=0;j<0x40;j++){}
\ 00F7 DD2E00 LD IXL,0
\ 00FA ?0039:
\ 00FA DD7D LD A,IXL
\ 00FC FE40 CP 64
\ 00FE 3004 JR NC,?0038
\ 0100 ?0040:
\ 0100 DD2C INC IXL
\ 0102 18F6 JR ?0039
\ 0104 ?0038:
139 output8(0x27,k); //恢复中断
\ 0104 210100 LD HL,1
\ 0107 39 ADD HL,SP
\ 0108 7E LD A,(HL)
\ 0109 D327 OUT (39),A
140 }
\ 010B E1 POP HL
\ 010C E1 POP HL
\ 010D DDE1 POP IX
\ 010F C1 POP BC
\ 0110 C9 RET
\ 0111 UDiskInitAll:
141
142
143 bool UDiskInitAll(int para)
144 {
\ 0111 C5 PUSH BC
\ 0112 D5 PUSH DE
145 int i;
146
147 //安装ud驱动
148 if(DRV_DetectUD(0x00) == 0xff)
\ 0113 1E00 LD E,0
\ 0115 CD0000 CALL LWRD DRV_DetectUD
\ 0118 3C INC A
\ 0119 CA4102 JP Z,?0056
\ 011C ?0042:
149 return 0;
150 else
\ 011C ?0043:
151 DRV_ActiveUD(0x00,MODE_FAST); //快速模式ud驱动
\ 011C 0E00 LD C,0
\ 011E 59 LD E,C
\ 011F CD0000 CALL LWRD DRV_ActiveUD
152
153 res_fp = ResOpen("ui30.res");
\ 0122 110000 LD DE,?0044
\ 0125 CD0000 CALL LWRD ResOpen
\ 0128 220000 LD (res_fp),HL
154
155
156 ResShowPic(UDISKRDY,0,0); //显示空闲画面
\ 012B 0E00 LD C,0
\ 012D C5 PUSH BC
\ 012E 11FE00 LD DE,254
\ 0131 CD0000 CALL LWRD ResShowPic
\ 0134 F1 POP AF
157 GetUsbSetupInfo(&usbsetupinfo);
\ 0135 110000 LD DE,usbsetupinfo
\ 0138 CD0000 CALL LWRD GetUsbSetupInfo
158 GetUsbAttribute(&usbattribute);
\ 013B 114200 LD DE,usbattribute
\ 013E CD0000 CALL LWRD GetUsbAttribute
159 GetUsbVidPid(&vidpidstring);
\ 0141 116200 LD DE,vidpidstring
\ 0144 CD0000 CALL LWRD GetUsbVidPid
160
161 //read comval
162 VMRead(&g_comval, VM_SYSTEM, sizeof(g_comval)); //读VRAM
\ 0147 212000 LD HL,32
\ 014A E5 PUSH HL
\ 014B 010002 LD BC,512
\ 014E 116900 LD DE,g_comval
\ 0151 CD0000 CALL LWRD VMRead
\ 0154 E1 POP HL
163 //check if valid
164 if(g_comval.magic != MAGIC_COMVAL) //取联机模式设定
\ 0155 21ADDE LD HL,57005
\ 0158 ED4B6900 LD BC,(g_comval)
\ 015C A7 AND A
\ 015D ED42 SBC HL,BC
\ 015F 2840 JR Z,?0046
\ 0161 ?0045:
\ 0161 ?0049:
165 COMVAL_INIT(g_comval);
\ 0161 3E0B LD A,11
\ 0163 327100 LD (g_comval+8),A
\ 0166 AF XOR A
\ 0167 327500 LD (g_comval+12),A
\ 016A 3E03 LD A,3
\ 016C 327200 LD (g_comval+9),A
\ 016F 21ADDE LD HL,57005
\ 0172 226900 LD (g_comval),HL
\ 0175 AF XOR A
\ 0176 327600 LD (g_comval+13),A
\ 0179 327400 LD (g_comval+11),A
\ 017C 3E1E LD A,30
\ 017E 327300 LD (g_comval+10),A
\ 0181 AF XOR A
\ 0182 327700 LD (g_comval+14),A
\ 0185 4F LD C,A
\ 0186 47 LD B,A
\ 0187 ED436B00 LD (g_comval+2),BC
\ 018B ED436D00 LD (g_comval+4),BC
\ 018F 327800 LD (g_comval+15),A
\ 0192 327900 LD (g_comval+16),A
\ 0195 327A00 LD (g_comval+17),A
\ 0198 3E04 LD A,4
\ 019A 327B00 LD (g_comval+18),A
\ 019D AF XOR A
\ 019E 327C00 LD (g_comval+19),A
\ 01A1 ?0046:
166
167 //==================================================================================
168 //**********************以下函数调用次序不能改动***************************************
169 //==================================================================================
170
171 DispBuf=(char *)DISPLAY_BUFFER_ADDR;
\ 01A1 210058 LD HL,22528
\ 01A4 220000 LD (DispBuf),HL
172
173 UDiskSetDiskNum(g_comval.OnlineMode); //设置联机模式
\ 01A7 ED5B7700 LD DE,(g_comval+14)
\ 01AB 3E00 LD A,BYTE3 UDiskSetDiskNum
\ 01AD 210000 LD HL,LWRD UDiskSetDiskNum
\ 01B0 CD0000 CALL LWRD ?BANK_CALL_DIRECT_L08
174
175 AlwaysShowCardDisk(1); //设置是否显示多盘符
\ 01B3 1E01 LD E,1
\ 01B5 3E00 LD A,BYTE3 AlwaysShowCardDisk
\ 01B7 210000 LD HL,LWRD AlwaysShowCardDisk
\ 01BA CD0000 CALL LWRD ?BANK_CALL_DIRECT_L08
176
177 UDiskInit((void *)FlashLed,&usbsetupinfo,&usbattribute,&vidpidstring); //U盘初始终化,输入参数:callback函数,属性...
\ 01BD 216200 LD HL,vidpidstring
\ 01C0 E5 PUSH HL
\ 01C1 214200 LD HL,usbattribute
\ 01C4 E5 PUSH HL
\ 01C5 010000 LD BC,usbsetupinfo
\ 01C8 114402 LD DE,FlashLed
\ 01CB 3E00 LD A,BYTE3 UDiskInit
\ 01CD 210000 LD HL,LWRD UDiskInit
\ 01D0 CD0000 CALL LWRD ?BANK_CALL_DIRECT_L08
\ 01D3 F1 POP AF
\ 01D4 F1 POP AF
178
179 if(sKY_HoldCheck()) //HOLD表示需要写保护
\ 01D5 CD0000 CALL LWRD sKY_HoldCheck
\ 01D8 B7 OR A
\ 01D9 281B JR Z,?0051
\ 01DB ?0050:
180 {
181 UDiskSetWP('C');
\ 01DB 1E43 LD E,67
\ 01DD 3E00 LD A,BYTE3 UDiskSetWP
\ 01DF 210000 LD HL,LWRD UDiskSetWP
\ 01E2 CD0000 CALL LWRD ?BANK_CALL_DIRECT_L08
182 HoldDispState=1;
\ 01E5 3E01 LD A,1
\ 01E7 326700 LD (HoldDispState),A
183 ResShowPic(UDLOCK_S, 68, 132);
\ 01EA 0E84 LD C,132
\ 01EC C5 PUSH BC
\ 01ED 0E44 LD C,68
\ 01EF 110800 LD DE,8
\ 01F2 CD0000 CALL LWRD ResShowPic
\ 01F5 F1 POP AF
\ 01F6 ?0051:
184 }
185 if (UDiskGetCardStatus()) //UDiskGetCardStatus返回值:1:有卡或初始化失败 0:没卡
\ 01F6 3E00 LD A,BYTE3 UDiskGetCardStatus
\ 01F8 210000 LD HL,LWRD UDiskGetCardStatus
\ 01FB CD0000 CALL LWRD ?BANK_CALL_DIRECT_L08
\ 01FE 2C INC L
\ 01FF 2D DEC L
\ 0200 2822 JR Z,?0055
\ 0202 ?0052:
186 { //有卡
187 if(UD_SDCardWPDetect()) //卡是否写保护
\ 0202 3E00 LD A,BYTE3 UD_SDCardWPDetect
\ 0204 210000 LD HL,LWRD UD_SDCardWPDetect
\ 0207 CD0000 CALL LWRD ?BANK_CALL_DIRECT_L08
\ 020A 7D LD A,L
\ 020B B4 OR H
\ 020C 2816 JR Z,?0055
\ 020E ?0054:
188 {
189 UDiskSetWP('H');
\ 020E 1E48 LD E,72
\ 0210 3E00 LD A,BYTE3 UDiskSetWP
\ 0212 210000 LD HL,LWRD UDiskSetWP
\ 0215 CD0000 CALL LWRD ?BANK_CALL_DIRECT_L08
190 //HoldDispState=1;
191 ResShowPic(CARDLOCK,22,38);
\ 0218 0E26 LD C,38
\ 021A C5 PUSH BC
\ 021B 0E16 LD C,22
\ 021D 112000 LD DE,32
\ 0220 CD0000 CALL LWRD ResShowPic
\ 0223 F1 POP AF
\ 0224 ?0055:
\ 0224 ?0053:
192 }
193 }
194
195
196 sysinfopt=&sysinfo;
\ 0224 210000 LD HL,sysinfo
\ 0227 224000 LD (sysinfopt),HL
197 GetSysInfo(sysinfopt); //取得ADFU UPD的信息头
\ 022A EB EX DE,HL
\ 022B CD0000 CALL LWRD GetSysInfo
198 BankSwitch( (unsigned long)UDiskRun >>16 );
\ 022E 210000 LD HL,0
\ 0231 5D LD E,L
\ 0232 CD0000 CALL LWRD BankSwitch
199 UDiskRun(para); //启动USB引擎
\ 0235 210000 LD HL,0
\ 0238 39 ADD HL,SP
\ 0239 5E LD E,(HL)
\ 023A 23 INC HL
\ 023B 56 LD D,(HL)
\ 023C CD0000 CALL LWRD UDiskRun
200
201 return 1;
\ 023F 3E01 LD A,1
202 }
\ 0241 ?0056:
\ 0241 E1 POP HL
\ 0242 C1 POP BC
\ 0243 C9 RET
\ 0244 FlashLed:
203
204
205 void FlashLed(void)
206 {
207 }
\ 0244 C9 RET
208
209 #pragma memory=default
\ 0000 RSEG CSTR
\ 0000 ?0044:
\ 0000 75693330 DEFB 'ui30.res'
\ 0004 2E726573
\ 0008 00 DEFB 0
\ 0000 RSEG UDISK_RD
\ 0000 usbsetupinfo:
\ 0040 DEFS 64
\ 0040 sysinfopt:
\ 0042 DEFS 2
\ 0042 usbattribute:
\ 0062 DEFS 32
\ 0062 vidpidstring:
\ 0066 DEFS 4
\ 0066 MenuKeyPress:
\ 0067 DEFS 1
\ 0067 HoldDispState:
\ 0068 DEFS 1
\ 0068 IsCardOut:
\ 0069 DEFS 1
\ 0069 g_comval:
\ 0089 DEFS 32
\ 0000 RSEG UDISK_RS
\ 0000 wUDiskDisp:
\ 0000 FE00 DEFW 254
\ 0002 FF00 DEFW 255
\ 0004 FD00 DEFW 253
\ 0006 END
Errors: none
Warnings: none
Code size: 581
Constant size: 15
Static variable size: Data(137) Iram(0)
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?