navi_file.s01
来自「炬力方案176*132软件源码,适用于AK1025」· S01 代码 · 共 2,198 行 · 第 1/3 页
S01
2,198 行
LD A,(fselExtNo)
CP 1
JR C,?0073
?0067:
; 343.
; 344. {
; 345. fselExtNo = 0;
JR ?0196
; 346. return FALSE;
; 347. }
?0068:
?0066:
; 348.
; 349. }
; 350. else if(fselType == FSEL_TYPE_TXT)
CP 4
JR NZ,?0073
?0070:
; 351. {
; 352. if(fselExtNo>=FSEL_TXT_EXTNUM)
LD A,(fselExtNo)
CP 1
JR C,?0073
?0072:
; 353.
; 354. {
; 355. fselExtNo = 0;
?0196:
XOR A
LD (fselExtNo),A
; 356. return FALSE;
LD L,A
; 357. }
JR ?0074
?0073:
?0071:
?0069:
?0064:
?0059:
?0054:
; 358.
; 359. }
; 360. return TRUE;
LD L,1
; 361. }
?0074:
JP LWRD ?BANK_FAST_LEAVE_L08
WrFinfotoIDM:
; 362. #define IDM_START_ADDR 0x4000
; 363. void WrFinfotoIDM(char *m_szTemp,char PathorFile,long *Srcoffset)
; 364. {
PUSH IY
PUSH IX
LD IX,0
ADD IX,SP
PUSH BC
PUSH DE
LD HL,65470
ADD HL,SP
LD SP,HL
LD L,(IX+8)
LD H,(IX+9)
PUSH HL
POP IY
; 365. char IO05bak;
; 366. file_info_t fileinfo;
; 367. char Backbuf[32];
; 368.
; 369. output8(0x4e,input8(0x4e)|0x08);
IN A,(78)
SET 3,A
OUT (78),A
; 370. if(*Srcoffset>=0x18000)
LD HL,1
PUSH HL
LD HL,32768
PUSH HL
PUSH IY
POP HL
LD E,(HL)
INC HL
LD D,(HL)
INC HL
LD C,(HL)
INC HL
LD B,(HL)
EX DE,HL
CALL LWRD ?SL_CMP_L03
JP NC,?0082
?0075:
?0076:
; 371. return;
; 372.
; 373. memset(&fileinfo,0,sizeof(file_info_t));
LD BC,64
LD HL,2
ADD HL,SP
EX DE,HL
LD L,B
CALL LWRD ?MEMSET_L11
; 374.
; 375. #ifdef NAVI_LONGNAME
; 376. memcpy(fileinfo.longname,m_szTemp,11);
LD BC,11
LD HL,2
ADD HL,SP
LD DE,17
ADD HL,DE
EX DE,HL
LD L,(IX-4)
LD H,(IX-3)
LDIR
; 377. // FS_Backup(Backbuf,FS_BACKUP_DIRINFO,0);//目录项备份
; 378. if(FS_GetName(fileinfo.longname, 22)) //取出长名
LD C,22
LD HL,2
ADD HL,SP
LD DE,17
ADD HL,DE
EX DE,HL
CALL LWRD FS_GetName
OR A
JR Z,?0078
?0077:
; 379. {
; 380. fileinfo.LN_Flag = 1;
LD (IX-52),1
; 381. unitochar(fileinfo.longname, sizeof(fileinfo.longname), g_comval.langid);
LD HL,g_comval+12
LD C,(HL)
PUSH BC
LD BC,47
LD HL,4
ADD HL,SP
LD DE,17
ADD HL,DE
EX DE,HL
LD A,BYTE3 unitochar
LD HL,LWRD unitochar
CALL LWRD ?BANK_CALL_DIRECT_L08
POP AF
?0078:
; 382. }
; 383. // FS_Restore(Backbuf,FS_RESTORE_DIRINFO,0);//目录项恢复
; 384. #endif
; 385.
; 386. IO05bak = input8(0x05);
IN A,(5)
LD (IX-70),A
; 387. if(*Srcoffset<0xc000)
LD HL,0
PUSH HL
LD H,192
PUSH HL
PUSH IY
POP HL
LD E,(HL)
INC HL
LD D,(HL)
INC HL
LD C,(HL)
INC HL
LD B,(HL)
EX DE,HL
CALL LWRD ?SL_CMP_L03
LD HL,0
PUSH HL
LD H,64
PUSH HL
PUSH IY
POP HL
LD E,(HL)
INC HL
LD D,(HL)
INC HL
LD C,(HL)
INC HL
LD B,(HL)
EX DE,HL
CALL LWRD ?SL_DIV_L03
JR C,?0198
?0079:
; 388. PageNum = *Srcoffset/0x4000;
; 389. else
?0080:
; 390. PageNum = 1+*Srcoffset/0x4000;
INC L
?0198:
LD A,L
LD (PageNum),A
?0081:
; 391. output8(0x05,0xf0|PageNum);
OR 240
OUT (5),A
; 392.
; 393. memcpy(fileinfo.filename,m_szTemp,11);
LD BC,11
LD HL,2
ADD HL,SP
LD DE,1
ADD HL,DE
EX DE,HL
LD L,(IX-4)
LD H,(IX-3)
LDIR
; 394. fileinfo.PathorFile = PathorFile;
LD B,(IX-2)
LD (IX-68),B
; 395.
; 396. memcpy((char *)(IDM_START_ADDR+(*Srcoffset)%0x4000),&fileinfo,sizeof(file_info_t));
LD BC,64
LD L,B
LD H,B
PUSH HL
LD H,C
PUSH HL
PUSH IY
POP HL
LD E,(HL)
INC HL
LD D,(HL)
INC HL
LD C,(HL)
INC HL
LD B,(HL)
EX DE,HL
CALL LWRD ?SL_MOD_L03
PUSH BC
PUSH HL
LD HL,16384
POP BC
ADD HL,BC
EX DE,HL
POP BC
LD HL,2
ADD HL,SP
LD BC,64
LDIR
; 397. *Srcoffset=*Srcoffset+sizeof(file_info_t) ;
LD DE,64
PUSH IY
POP HL
CALL LWRD ?L_ADDASG_L03
; 398. output8(0x05,IO05bak);
LD A,(IX-70)
OUT (5),A
; 399. }
?0082:
JP LWRD ?0049
WrFoldertoIDM:
; 400. long WrFoldertoIDM(long *Srcoffset )
; 401. {
PUSH IY
PUSH IX
LD HL,65524
ADD HL,SP
LD SP,HL
PUSH DE
POP IY
; 402. char m_szTemp[12];
; 403. file_info_t fileinfo;
; 404.
; 405. WORD total;
; 406. output8(0x4e,input8(0x4e)|0x08);
IN A,(78)
SET 3,A
OUT (78),A
; 407. if(!FS_Dir(m_szTemp, IgnoreExt2, FS_DIR_DIR))
LD C,129
PUSH BC
LD BC,IgnoreExt2
EX DE,HL
CALL LWRD FS_Dir
POP HL
OR A
JR NZ,?0084
?0083:
; 408. {
; 409. return 0;
LD C,A
LD L,C
LD B,A
LD H,B
; 410. }
JR ?0092
?0084:
; 411. total = 1;
; 412. WrFinfotoIDM( m_szTemp,1,Srcoffset);
PUSH IY
LD C,1
LD HL,2
ADD HL,SP
EX DE,HL
LD A,BYTE3 WrFinfotoIDM
LD HL,LWRD WrFinfotoIDM
CALL LWRD ?BANK_CALL_DIRECT_L08
POP HL
LD IX,1
?0086:
; 413. while(1)
; 414. {
; 415. if (!FS_Dir(m_szTemp, IgnoreExt2, FS_DIR_DIR_CONT)||total>FSEL_MAX_DIRNUM)
LD C,1
PUSH BC
LD BC,IgnoreExt2
LD HL,2
ADD HL,SP
EX DE,HL
CALL LWRD FS_Dir
POP HL
OR A
JR Z,?0090
PUSH IX
POP BC
LD HL,100
AND A
SBC HL,BC
JR NC,?0089
?0090:
?0091:
?0088:
; 416. {
; 417. return total;
PUSH IX
POP HL
LD BC,0
; 418. }
?0092:
EX DE,HL
LD HL,12
?0210:
ADD HL,SP
LD SP,HL
EX DE,HL
POP IX
POP IY
JP LWRD ?BANK_FAST_LEAVE_L08
?0089:
; 419. else
; 420. {
; 421. total++;
; 422. WrFinfotoIDM( m_szTemp,1,Srcoffset);
PUSH IY
LD C,1
LD HL,2
ADD HL,SP
EX DE,HL
LD A,BYTE3 WrFinfotoIDM
LD HL,LWRD WrFinfotoIDM
CALL LWRD ?BANK_CALL_DIRECT_L08
POP HL
; 423. }
; 424. }
; 425.
; 426.
; 427.
; 428.
; 429. }
INC IX
JR ?0086
WrFiletoIDM:
; 430. long WrFiletoIDM(long *offset)
; 431. {
PUSH IY
PUSH IX
PUSH DE
LD HL,65524
ADD HL,SP
LD SP,HL
; 432. char m_szTemp[12];
; 433. file_info_t fileinfo;
; 434. char IO05bak ;
; 435. WORD total;
; 436. char *ext;
; 437. total = 0;
; 438. output8(0x4e,input8(0x4e)|0x08);
IN A,(78)
SET 3,A
OUT (78),A
LD IX,0
?0095:
; 439. do {
; 440. ext = GetExtBuf();
LD A,BYTE3 GetExtBuf
LD HL,LWRD GetExtBuf
CALL LWRD ?BANK_CALL_DIRECT_L08
PUSH HL
POP IY
; 441. if (FS_Dir(m_szTemp, ext, FS_DIR_FILE))
LD C,128
PUSH BC
LD C,L
LD B,H
LD HL,2
ADD HL,SP
EX DE,HL
CALL LWRD FS_Dir
POP HL
OR A
JR Z,?0098
?0096:
; 442. {
; 443. total ++;
?0201:
; 444. WrFinfotoIDM( m_szTemp,0,offset);
LD HL,12
ADD HL,SP
LD C,(HL)
INC HL
LD B,(HL)
PUSH BC
LD C,0
LD HL,2
ADD HL,SP
EX DE,HL
LD A,BYTE3 WrFinfotoIDM
LD HL,LWRD WrFinfotoIDM
CALL LWRD ?BANK_CALL_DIRECT_L08
POP HL
?0099:
; 445. while ( FS_Dir(m_szTemp, ext, FS_DIR_FILE_CONT)&&(total <FSEL_MAX_FILENUM))
LD C,0
PUSH BC
PUSH IY
POP BC
LD HL,2
ADD HL,SP
EX DE,HL
CALL LWRD FS_Dir
POP HL
OR A
INC IX
JR Z,?0098
LD BC,999
PUSH IX
POP HL
AND A
SBC HL,BC
JR NC,?0098
?0102:
?0101:
?0100:
; 446. {
; 447. output8(REG4E_RTC_WATCH_DOG, input8(REG4E_RTC_WATCH_DOG) | 0x08);
IN A,(78)
SET 3,A
OUT (78),A
; 448. total ++;
JR ?0201
; 449. WrFinfotoIDM( m_szTemp,0,offset);
; 450. }
; 451. }
?0098:
?0097:
; 452.
; 453. }while( (total < FSEL_MAX_FILENUM)&&ToNextExt());
LD BC,999
PUSH IX
POP HL
AND A
SBC HL,BC
JR NC,?0093
LD A,BYTE3 ToNextExt
LD HL,LWRD ToNextExt
CALL LWRD ?BANK_CALL_DIRECT_L08
INC L
DEC L
JR NZ,?0095
?0093:
; 454. fselExtNo = 0; //reset
XOR A
LD (fselExtNo),A
; 455. return total;
PUSH IX
POP HL
LD C,A
LD B,A
; 456.
; 457.
; 458.
; 459. }
EX DE,HL
LD HL,14
JP LWRD ?0210
GetPathinfo:
; 460. void GetPathinfo(Location_Path_t *pathinfo,long DirNum,long FileNum,char *filename)
; 461. {
PUSH BC
PUSH IY
PUSH IX
PUSH DE
POP IX
; 462. char i;
; 463. output8(0x4e,input8(0x4e)|0x08);
IN A,(78)
SET 3,A
OUT (78),A
; 464. memset(pathinfo,0,sizeof(Location_Path_t));
LD BC,64
LD L,B
LD H,B
CALL LWRD ?MEMSET_L11
; 465. pathinfo->PathorFile=0;
EX DE,HL
LD (HL),D
; 466. pathinfo->disk = fselDiskLetter;
LD A,(fselDiskLetter)
LD (IX+1),A
; 467.
; 468. for(i=0; i<TOTALDIRLAYER; i++)
LD IYL,0
?0106:
LD A,IYL
CP 8
JR NC,?0105
?0107:
; 469. pathinfo->DirNo[i]= fselDirNo[i] ;
LD C,IYL
LD B,0
PUSH IX
POP HL
ADD HL,BC
INC HL
INC HL
PUSH HL
LD HL,fselDirNo
ADD HL,BC
LD B,(HL)
POP HL
LD (HL),B
INC IYL
JR ?0106
?0105:
; 470.
; 471. pathinfo->ClusterNo = FS_GetCurDir();
CALL LWRD FS_GetCurDir
LD (IX+10),L
LD (IX+11),H
LD (IX+12),C
LD (IX+13),B
; 472. if(fselDirLayer!=0 )
LD A,(fselDirLayer)
OR A
JR Z,?0110
?0109:
; 473. pathinfo->dirLayer=fselDirLayer-1 ;
ADD A,255
; 474. else
?0110:
; 475. pathinfo->dirLayer=fselDirLayer ;
LD (IX+14),A
?0111:
; 476. pathinfo->FileNum=FileNum;
LD HL,14
ADD HL,SP
LD E,(HL)
INC HL
LD D,(HL)
INC HL
LD C,(HL)
INC HL
LD B,(HL)
EX DE,HL
LD (IX+27),L
LD (IX+28),H
LD (IX+29),C
LD (IX+30),B
; 477. pathinfo->DirNum=DirNum;
LD HL,10
ADD HL,SP
LD E,(HL)
INC HL
LD D,(HL)
INC HL
LD C,(HL)
INC HL
LD B,(HL)
EX DE,HL
LD (IX+31),L
LD (IX+32),H
LD (IX+33),C
LD (IX+34),B
; 478. if(fselDirLayer!=0)
LD A,(fselDirLayer)
OR A
JR Z,?0113
?0112:
; 479. pathinfo->Parentoffset=StackPathoffset[fselDirLayer-1]/16;
LD HL,0
PUSH HL
LD L,16
PUSH HL
LD L,A
ADD HL,HL
ADD HL,HL
LD BC,StackPathoffset-4
ADD HL,BC
LD E,(HL)
INC HL
LD D,(HL)
INC HL
LD C,(HL)
INC HL
LD B,(HL)
EX DE,HL
CALL LWRD ?SL_DIV_L03
LD (IX+35),L
LD (IX+36),H
?0113:
; 480. memcpy(pathinfo->path,filename,11);
LD BC,11
LD HL,15
PUSH IX
POP DE
ADD HL,DE
EX DE,HL
LD HL,18
ADD HL,SP
LD A,(HL)
INC HL
LD H,(HL)
LD L,A
LDIR
; 481.
; 482.
; 483. }
POP IX
POP IY
POP BC
JP LWRD ?BANK_FAST_LEAVE_L08
WrPathtoIDM:
; 484. void WrPathtoIDM(Location_Path_t pathinfo,long pathoffset)
; 485. {
PUSH BC
PUSH DE
PUSH IX
LD IX,0
ADD IX,SP
; 486. char IO05bak;
; 487. long temp;
; 488. long diff;
; 489. output8(0x4e,input8(0x4e)|0x08);
IN A,(78)
SET 3,A
OUT (78),A
; 490. if(pathoffset>=0x18000)
LD HL,1
PUSH HL
LD HL,32768
PUSH HL
LD C,(IX+76)
LD B,(IX+77)
LD L,(IX+74)
LD H,(IX+75)
CALL LWRD ?SL_CMP_L03
JR NC,?0119
?0114:
?0115:
; 491. return;
; 492. IO05bak = input8(0x05);
IN A,(5)
LD E,A
; 493. if(pathoffset<0xc000)
LD HL,0
PUSH HL
LD H,192
PUSH HL
LD L,(IX+74)
LD H,(IX+75)
CALL LWRD ?SL_CMP_L03
LD HL,0
PUSH HL
LD H,64
PUSH HL
LD L,(IX+74)
LD H,(IX+75)
CALL LWRD ?SL_DIV_L03
JR C,?0204
?0116:
; 494. PageNum = pathoffset/0x4000;
; 495. else
?0117:
; 496. PageNum = 1+pathoffset/0x4000;
INC L
?0204:
LD A,L
LD (PageNum),A
?0118:
; 497. output8(0x05,0xf0|PageNum);
OR 240
OUT (5),A
; 498. // if((temp=pathoffset%0x4000-sizeof(Location_Path_t))<0x4000)
; 499. memcpy((char *)(IDM_START_ADDR+pathoffset%0x4000),&pathinfo,sizeof(Location_Path_t));
PUSH DE
LD BC,64
LD L,B
LD H,B
PUSH HL
LD H,C
PUSH HL
LD C,(IX+76)
LD B,(IX+77)
LD L,(IX+74)
LD H,(IX+75)
CALL LWRD ?SL_MOD_L03
PUSH BC
PUSH HL
LD HL,16384
POP BC
ADD HL,BC
EX DE,HL
POP BC
LD HL,12
ADD HL,SP
LD BC,64
LDIR
POP DE
; 500. #if 0
; 501. else
; 502. {
; 503. diff = 0x4000-(pathoffset%0x4000);
; 504. memcpy((char *)(IDM_START_ADDR+pathoffset%0x4000),&pathinfo,diff);
; 505. output8(0x05,0xf0|(PageNum+1));
; 506.
; 507. memcpy((char *)(IDM_START_ADDR),&pathinfo + diff,sizeof(Location_Path_t)-(size_t)diff);
; 508.
; 509. }
; 510. #endif
; 511. output8(0x05,IO05bak);
LD A,E
OUT (5),A
; 512. }
?0119:
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?