📄 ghdd.lst
字号:
177 1 /*#ifdef DEBUG_NO_HDD
178 1 return HDD_ERRCODE_NO_HDD;
C51 COMPILER V7.50 GHDD 12/14/2005 10:05:11 PAGE 4
179 1 #endif*/
180 1
181 1 #ifdef PWRCV2
182 1 Val_EPROM_DISKID = EPROM_SetUp_data_Read(EPROM_DISKID);
183 1 /*#ifdef DEBUG_PWRCV2
184 1 printf("\n\n\rHDD_Init: EPROM-DiskId=%02x", (u16)Val_EPROM_DISKID);
185 1 #endif*/
186 1 #endif
187 1
188 1 for (j = 0; j < 2; j++)
189 1 {
190 2 dsp_offset++;
191 2 osd_printf(10,dsp_offset,6,hdd_id_str[j]);
192 2 osd_printf(24,dsp_offset,3,"...");
193 2
194 2 #ifdef DEBUG_MHDD_ONLY
if(j==0)
{
if(!hdd_select(j))
goto HDD_NOT_DETECTED;
}
else
{
goto HDD_NOT_DETECTED;
}
#else
205 2 if(!hdd_select(j)) goto HDD_NOT_DETECTED;
206 2 #endif
207 2
208 2 if(!hdd_wait_busy_free()) goto HDD_NOT_DETECTED;
209 2
210 2 if(!hdd_wait_dev_ready()) goto HDD_NOT_DETECTED;
211 2
212 2 HDD_DEVICE_CONTROL = HDD_INT_DISABLE;
213 2
214 2 hdd_sector_set(j, 0, HDD_SECT_CNT_SZ8);
215 2
216 2 hdd_cmd(j, HDD_SET_MULTIPLE_MODE);
217 2
218 2 if(!hdd_wait_dev_ready()) goto HDD_NOT_DETECTED;
219 2
220 2 hdd_cmd(j, HDD_IDENTIFY_DEVICE);
221 2 i = HDD_STATUS;
222 2
223 2 if(!hdd_wait_rw_ready()) goto HDD_NOT_DETECTED;
224 2 if(!hdd_wait_busy_free()) goto HDD_NOT_DETECTED;
225 2
226 2 goto HDD_DETECTED;
227 2
228 2 HDD_NOT_DETECTED:
229 2
230 2 #ifdef FONT_SC
231 2 osd_printf(24,dsp_offset,6,"[Xrs] ");//礚祑絃
232 2 #else
osd_printf(24,dsp_offset,6,"[NONE]");
#endif
235 2 continue;
236 2
237 2 HDD_DETECTED:
238 2
239 2 // get hdd size
240 2 for (i = 0; i <= 255; i++)
C51 COMPILER V7.50 GHDD 12/14/2005 10:05:11 PAGE 5
241 2 {
242 3 tdata_l = READ_HDD_LOW_DATA; //XBYTE[0x80A8]
243 3 tdata = READ_HDD_HIGH_DATA; //XBYTE[0x80E8]
244 3
245 3 // Reading HDD Model Number
246 3 if (i > 26 && i < 39)
247 3 {
248 4 // pick 24 characters
249 4 model[(i - 27) * 2 + 0] = tdata; //0, 2, 4, 6, 8,.....22
250 4 model[(i - 27) * 2 + 1] = tdata_l; //1, 3, 5, 7, 9,.....23
251 4 }
252 3
253 3 // store 32 bit HDD capacity info
254 3 tdata = (tdata<<8) | tdata_l;
255 3
256 3 #ifdef DEBUG_IDENTIFY_HDD
printf("\n\r %04d: %04x", (u16)i, (u16)tdata);
#endif
259 3
260 3 // Reading 48 bit addressing feature bits
261 3 if (i == 83)
262 3 {
263 4 gv_HDD_48bit_address[j] = 0;
264 4
265 4 if (tdata & 0x0400)
266 4 {
267 5 gv_HDD_48bit_address[j] = 1;
268 5
269 5 #ifdef DEBUG_ATA6
printf("\n\r ATA-6 HDD [%d]", (int)j);
#endif
272 5 }
273 4 }
274 3
275 3 // Reading HDD capacity
276 3 if (gv_HDD_48bit_address[j] == 0)
277 3 {
278 4 // under 137GB
279 4 if (i == 60)
280 4 gv_HDD_LastLBA[j] = tdata;
281 4
282 4 if (i == 61)
283 4 {
284 5 temp = tdata;
285 5 temp = temp << 16;
286 5 gv_HDD_LastLBA[j] = (0x0000FFFF & gv_HDD_LastLBA[j]) | (0xFFFF0000 & temp);
287 5 }
288 4 }
289 3 else
290 3 {
291 4 // over 137GB
292 4 if (i == 100)
293 4 gv_HDD_LastLBA[j] = tdata;
294 4 if (i == 101)
295 4 {
296 5 temp = tdata;
297 5 temp = temp << 16;
298 5 gv_HDD_LastLBA[j] = (0x0000ffff & gv_HDD_LastLBA[j]) | (0xffff0000 & temp);
299 5 }
300 4 }
301 3 } // Get HDD Size
302 2 gv_HDD_exist[j] = 1;
C51 COMPILER V7.50 GHDD 12/14/2005 10:05:11 PAGE 6
303 2
304 2 #ifdef DEBUG_HDD_DUMP
gv_HDD_NumOfLBA[j] = gv_HDD_LastLBA[j];
#endif
307 2
308 2 // make it align to 8
309 2 for (i = 0; i < 16; i++)
310 2 {
311 3 if ((gv_HDD_LastLBA[j] % 8) == 0)
312 3 break;
313 3
314 3 #ifdef DEBUG_HDD_ALIGN
printf("\n\r.");
#endif
317 3 gv_HDD_LastLBA[j]--;
318 3 }
319 2
320 2 gv_HDD_LastLBA[j]--; // make it last addressable LBA.
321 2
322 2 #if defined(DEBUG_HDD_REPORT) || defined(DEBUG_HDD_DUMP)
printf("\n\rHDD MODEL = %s", model);
printf("\n\rHDD LastLBA-1 = %lu LBA [%lu MB]", gv_HDD_LastLBA[j]+1, (gv_HDD_LastLBA[j]+1)/(u32)1953);
#endif
326 2
327 2 gv_hdd_count++;
328 2 #ifdef FONT_SC
329 2 osd_printf(24,dsp_offset,6,"[rsBC]");//祑絃絋粄
330 2 #else
osd_printf(24,dsp_offset,1,"[");
osd_printf(26,dsp_offset,18,model);
osd_printf(62,dsp_offset,1,"]");
#endif
335 2
336 2 // if there's no signature
337 2 i = hdd_check_signature(j, 0);
338 2 // i = 2; //for debug FONT_SC
339 2 if (i != 0)// incorrect signature or incorrect HDD_FORMAT_VER
340 2 {
341 3 // format the hard drive & put signature
342 3 //osd_printf(23,dsp_offset++,24,"New HDD Format Completed");
343 3 if(i==1) // Invalid signature
344 3 #ifdef FONT_SC
345 3 osd_printf(64,dsp_offset++,4,"-[z]");//穝
346 3 #else
osd_printf(64,dsp_offset++,4,"-NEW");
#endif
349 3 else if(i==2)// Invalid HDD_FORMAT_VER
350 3 #ifdef FONT_SC //123456789012345678901234567890
351 3 osd_printf(64,dsp_offset++,5,"-[A] ");//侣
352 3 #else
osd_printf(64,dsp_offset++,5,"-USED");
#endif
355 3 else;
356 3 //osd_printf(14,dsp_offset++,17,"INCOMPATIBLE HDD!");
357 3 #ifdef FONT_SC
358 3 //12345678901234567890
359 3 osd_printf(14, dsp_offset++, 18, "R S r s $ Q!!.....");//
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -