navi_file.s01
来自「炬力方案176*132软件源码,适用于AK1025」· S01 代码 · 共 2,198 行 · 第 1/3 页
S01
2,198 行
LD SP,IX
POP IX
POP DE
POP BC
JP LWRD ?BANK_FAST_LEAVE_L08
WrFoldNextIDM:
; 513. void WrFoldNextIDM(long addr,WORD Nextoffset)
; 514. {
PUSH IX
LD IX,0
ADD IX,SP
PUSH BC
PUSH DE
PUSH AF
; 515. char IO05bak;
; 516. output8(0x4e,input8(0x4e)|0x08);
IN A,(78)
SET 3,A
OUT (78),A
; 517. if(addr>=0x18000) //96k
LD HL,1
PUSH HL
LD HL,32768
PUSH HL
EX DE,HL
CALL LWRD ?SL_CMP_L03
JR NC,?0125
?0120:
?0121:
; 518. return;
; 519.
; 520. IO05bak = input8(0x05);
IN A,(5)
LD (IX-6),A
; 521. if(addr<0xc000)
LD L,E
LD H,E
PUSH HL
LD H,192
PUSH HL
LD L,(IX-4)
LD H,(IX-3)
CALL LWRD ?SL_CMP_L03
LD L,E
LD H,E
PUSH HL
LD H,64
PUSH HL
LD L,(IX-4)
LD H,(IX-3)
CALL LWRD ?SL_DIV_L03
JR C,?0206
?0122:
; 522. PageNum = addr/0x4000;
; 523. else
?0123:
; 524. PageNum = 1+addr/0x4000;
INC L
?0206:
LD A,L
LD (PageNum),A
?0124:
; 525. output8(0x05,0xf0|PageNum);
OR 240
OUT (5),A
; 526. memcpy((char *)(IDM_START_ADDR+addr%0x4000+13),&Nextoffset,2);
LD BC,2
LD L,B
LD H,B
PUSH HL
LD H,64
PUSH HL
LD C,(IX-2)
LD B,(IX-1)
LD L,(IX-4)
LD H,(IX-3)
CALL LWRD ?SL_MOD_L03
PUSH BC
PUSH HL
LD HL,16397
POP BC
ADD HL,BC
EX DE,HL
POP BC
LD HL,12
ADD HL,SP
LD BC,2
LDIR
; 527.
; 528. output8(0x05,IO05bak);
LD A,(IX-6)
OUT (5),A
; 529. }
?0125:
LD SP,IX
POP IX
JP LWRD ?BANK_FAST_LEAVE_L08
DISC_Location_process:
; 530. BOOL DISC_Location_process()
; 531. {
PUSH BC
PUSH DE
PUSH IX
LD IX,0
ADD IX,SP
LD HL,65446
ADD HL,SP
LD SP,HL
; 532. char IO05bak;
; 533.
; 534. char m_szTemp[12];
; 535.
; 536. Location_Path_t pathinfo;
; 537. long Stackoffset[TOTALDIRLAYER];
; 538.
; 539. long FileNum;
; 540. long DirNum;
; 541. char i;
; 542.
; 543. long pathoffset;
; 544. g_offset = 0;
LD BC,0
LD (g_offset),BC
LD (g_offset+2),BC
; 545. output8(0x4e,input8(0x4e)|0x08);
IN A,(78)
SET 3,A
OUT (78),A
; 546. memset(&pathinfo,0,sizeof(Location_Path_t));
LD C,64
LD HL,14
ADD HL,SP
EX DE,HL
LD L,B
LD H,B
CALL LWRD ?MEMSET_L11
; 547. pathinfo.PathorFile=0;
LD (IX-76),H
; 548.
; 549. for(i=0;i<3;i++)
LD (IX-90),H
?0127:
LD A,(IX-90)
CP 3
JR NC,?0126
?0128:
; 550. {
; 551. output8(0x4e,input8(0x4e)|0x08);
; 552. IO05bak = input8(0x05);
; 553. output8(0x05,0xf0|i);
; 554. memset((char *)(IDM_START_ADDR),0,0x4000);
CALL LWRD ?0212
; 555.
; 556. output8(0x05,IO05bak);
LD A,(IX-89)
OUT (5),A
INC (IX-90)
JR ?0127
?0126:
; 557. }
; 558. PageNum = 4; //idm 4,5,6
LD A,4
LD (PageNum),A
; 559. for(i=PageNum;i<7;i++)
LD (IX-90),A
?0131:
LD A,(IX-90)
CP 7
JR NC,?0130
?0132:
; 560. {
; 561. output8(0x4e,input8(0x4e)|0x08);
; 562. IO05bak = input8(0x05);
; 563. output8(0x05,0xf0|i);
; 564. memset((char *)(IDM_START_ADDR),0,0x4000);
CALL LWRD ?0212
; 565.
; 566. output8(0x05,IO05bak);
LD A,(IX-89)
OUT (5),A
INC (IX-90)
JR ?0131
?0130:
; 567. }
; 568.
; 569. FS_CD(":");
LD DE,?0004
CALL LWRD FS_CD
; 570.
; 571.
; 572. //处理根目录
; 573. m_szTemp[0]=':';
LD (IX-12),58
; 574. m_szTemp[1]=0;
LD (IX-11),0
; 575. pathoffset = g_offset;
; 576. StackPathoffset[fselDirLayer]=pathoffset;
; 577. g_offset=g_offset+sizeof(Location_Path_t);
CALL LWRD ?0213
; 578. DirNum=WrFoldertoIDM(&g_offset);
; 579. FileNum=WrFiletoIDM(&g_offset);
LD (IX-78),C
LD (IX-77),B
; 580. GetPathinfo(&pathinfo,DirNum,FileNum,m_szTemp);
LD HL,78
ADD HL,SP
PUSH HL
PUSH BC
LD L,(IX-80)
LD H,(IX-79)
PUSH HL
LD L,(IX-82)
LD H,(IX-81)
PUSH HL
LD L,(IX-84)
LD H,(IX-83)
PUSH HL
LD HL,24
ADD HL,SP
EX DE,HL
LD A,BYTE3 GetPathinfo
LD HL,LWRD GetPathinfo
CALL LWRD ?BANK_CALL_DIRECT_L08
POP HL
POP HL
POP HL
POP HL
POP HL
; 581. WrPathtoIDM(pathinfo,pathoffset);
LD L,(IX-86)
LD H,(IX-85)
PUSH HL
LD L,(IX-88)
LD H,(IX-87)
PUSH HL
LD HL,18
ADD HL,SP
EX DE,HL
LD HL,65472
ADD HL,SP
LD SP,HL
EX DE,HL
LD BC,64
LDIR
LD A,BYTE3 WrPathtoIDM
LD HL,LWRD WrPathtoIDM
CALL LWRD ?BANK_CALL_DIRECT_L08
LD HL,68
ADD HL,SP
LD SP,HL
; 582.
; 583. if(DirNum==0&&FileNum==0)
LD A,(IX-84)
OR (IX-83)
OR (IX-82)
OR (IX-81)
JR NZ,?0135
LD A,(IX-80)
OR (IX-79)
OR (IX-78)
OR (IX-77)
JR NZ,?0135
?0137:
?0136:
?0134:
; 584. {
; 585. return FALSE;
LD L,B
; 586. }
JP LWRD ?0165
?0135:
?0140:
; 587.
; 588. do
; 589. {
; 590. if(fselNextDir(m_szTemp)) //平级遍历
LD HL,78
ADD HL,SP
EX DE,HL
LD A,BYTE3 fselNextDir
LD HL,LWRD fselNextDir
CALL LWRD ?BANK_CALL_DIRECT_L08
INC L
DEC L
JP Z,?0142
?0141:
; 591. {
; 592. // Stackoffset[fselDirLayer]=offset;
; 593. output8(0x4e,input8(0x4e)|0x08);
IN A,(78)
SET 3,A
OUT (78),A
; 594. if(512-g_offset%512<48) //对齐
LD HL,0
PUSH HL
LD L,48
PUSH HL
LD L,H
PUSH HL
LD H,2
PUSH HL
LD BC,(g_offset+2)
LD HL,(g_offset)
CALL LWRD ?SL_MOD_L03
LD E,C
LD D,B
LD C,L
LD B,H
LD HL,512
AND A
SBC HL,BC
LD C,L
LD B,H
LD HL,0
SBC HL,DE
PUSH HL
LD L,C
LD H,B
POP BC
CALL LWRD ?SL_CMP_L03
JR NC,?0144
?0143:
; 595. {
; 596. g_offset = g_offset+512-g_offset%512;
LD BC,0
PUSH BC
LD B,2
PUSH BC
LD BC,(g_offset+2)
LD HL,(g_offset)
CALL LWRD ?SL_MOD_L03
LD E,C
LD D,B
AND A
LD BC,512
SBC HL,BC
EX DE,HL
LD B,C
SBC HL,BC
LD C,L
LD B,H
LD HL,g_offset
CALL LWRD ?L_SUBASG_L03
?0144:
; 597. }
; 598.
; 599. WrFoldNextIDM(StackPathoffset[fselDirLayer]+sizeof(Location_Path_t)+(fselDirNo[fselDirLayer]-1)*sizeof(file_info_t),g_offset/16);
LD HL,0
PUSH HL
LD L,16
PUSH HL
LD BC,(g_offset+2)
LD HL,(g_offset)
CALL LWRD ?SL_DIV_L03
PUSH HL
LD BC,(fselDirLayer)
LD B,0
LD HL,fselDirNo
ADD HL,BC
LD L,(HL)
LD H,B
DEC HL
ADD HL,HL
ADD HL,HL
ADD HL,HL
ADD HL,HL
ADD HL,HL
ADD HL,HL
LD C,B
PUSH BC
PUSH HL
LD HL,(fselDirLayer)
LD H,B
ADD HL,HL
ADD HL,HL
LD BC,StackPathoffset
ADD HL,BC
LD C,(HL)
INC HL
LD B,(HL)
INC HL
LD E,(HL)
INC HL
LD D,(HL)
LD L,C
LD H,B
POP BC
ADD HL,BC
EX DE,HL
POP BC
ADC HL,BC
PUSH HL
PUSH DE
LD HL,64
POP BC
ADD HL,BC
EX DE,HL
LD HL,0
POP BC
ADC HL,BC
LD C,L
LD B,H
LD A,BYTE3 WrFoldNextIDM
LD HL,LWRD WrFoldNextIDM
CALL LWRD ?BANK_CALL_DIRECT_L08
POP HL
; 600. if(FS_CD(m_szTemp)) //深度遍历
LD HL,78
ADD HL,SP
EX DE,HL
CALL LWRD FS_CD
OR A
JP Z,?0138
?0145:
; 601. {
; 602. if( fselDirNo[fselDirLayer]!=0 )
LD BC,(fselDirLayer)
LD B,0
LD HL,fselDirNo
ADD HL,BC
LD A,(HL)
OR A
JR Z,?0149
?0147:
; 603. {
; 604. fselDirLayer++;
LD HL,fselDirLayer
INC (HL)
; 605. for(i=fselDirLayer; i<TOTALDIRLAYER; i++)
LD A,(fselDirLayer)
LD (IX-90),A
?0150:
LD A,(IX-90)
CP 8
JR NC,?0149
?0151:
; 606. fselDirNo[i]=0 ;
LD C,A
LD HL,fselDirNo
ADD HL,BC
LD (HL),B
INC (IX-90)
; 607. }
JR ?0150
?0149:
?0148:
; 608. if ( fselDirLayer <= 7 )
LD A,(fselDirLayer)
LD B,A
LD A,7
CP B
JR C,?0154
?0153:
; 609. {
; 610.
; 611. //fselDirNo[fselDirLayer] = 0; //第一个子目录
; 612.
; 613. pathoffset = g_offset;
; 614. StackPathoffset[fselDirLayer]=pathoffset;
; 615. g_offset=g_offset+sizeof(Location_Path_t);
CALL LWRD ?0213
; 616. DirNum=WrFoldertoIDM(&g_offset);
; 617. FileNum=WrFiletoIDM(&g_offset);
; 618. GetPathinfo(&pathinfo,DirNum,FileNum,m_szTemp);
LD HL,78
ADD HL,SP
PUSH HL
PUSH BC
LD L,(IX-80)
LD H,(IX-79)
PUSH HL
LD L,(IX-82)
LD H,(IX-81)
PUSH HL
LD L,(IX-84)
LD H,(IX-83)
PUSH HL
LD HL,24
ADD HL,SP
EX DE,HL
LD A,BYTE3 GetPathinfo
LD HL,LWRD GetPathinfo
CALL LWRD ?BANK_CALL_DIRECT_L08
POP HL
POP HL
POP HL
POP HL
POP HL
; 619. WrPathtoIDM(pathinfo,pathoffset);
LD L,(IX-86)
LD H,(IX-85)
PUSH HL
LD L,(IX-88)
LD H,(IX-87)
PUSH HL
LD HL,18
ADD HL,SP
EX DE,HL
LD HL,65472
ADD HL,SP
LD SP,HL
EX DE,HL
LD BC,64
LDIR
LD A,BYTE3 WrPathtoIDM
LD HL,LWRD WrPathtoIDM
CALL LWRD ?BANK_CALL_DIRECT_L08
LD HL,68
ADD HL,SP
LD SP,HL
; 620.
; 621. }
; 622. else
JP LWRD ?0135
?0154:
; 623. {
; 624. if(FS_CD("\\"))
LD DE,?0158
CALL LWRD FS_CD
OR A
JP Z,?0135
?0156:
; 625. {
; 626. fselDirLayer--;
JR ?0208
DEC (HL)
?0157:
?0155:
; 627. }
; 628. }
; 629.
; 630.
; 631. }
; 632. else
JP LWRD ?0135
?0146:
; 633. {
; 634. break;
JR ?0138
?0159:
; 635. }
; 636. }
; 637. else
JP LWRD ?0135
?0142:
; 638. {
; 639. if(fselDirLayer==0)
LD A,(fselDirLayer)
OR A
JR Z,?0138
?0161:
; 640. break;
?0162:
; 641. if(FS_CD("\\"))
LD DE,?0158
CALL LWRD FS_CD
OR A
JP Z,?0135
?0163:
; 642. {
; 643. fselDirLayer--;
?0208:
LD HL,fselDirLayer
DEC (HL)
?0164:
?0160:
; 644. }
; 645. }
; 646. }while(1);
JP LWRD ?0135
?0138:
; 647.
; 648.
; 649. return TRUE;
LD L,1
; 650. }
?0165:
JP LWRD ?0119
POP IX
POP DE
POP BC
JP LWRD ?BANK_FAST_LEAVE_L08
?0212:
IN A,(78)
SET 3,A
OUT (78),A
IN A,(5)
LD (IX-89),A
LD A,(IX-90)
OR 240
OUT (5),A
LD BC,16384
LD E,C
LD D,B
JP LWRD ?MEMSET_L11
?0213:
LD BC,(g_offset+2)
LD HL,(g_offset)
LD (IX-88),L
LD (IX-87),H
LD (IX-86),C
LD (IX-85),B
LD HL,(fselDirLayer)
LD H,0
ADD HL,HL
ADD HL,HL
LD BC,StackPathoffset
ADD HL,BC
LD C,(IX-86)
LD B,(IX-85)
LD E,(IX-88)
LD (HL),E
LD D,(IX-87)
INC HL
LD (HL),D
INC HL
LD (HL),C
INC HL
LD (HL),B
LD HL,g_offset
LD BC,0
LD DE,64
CALL LWRD ?L_ADDASG_L03
EX DE,HL
LD A,BYTE3 WrFoldertoIDM
LD HL,LWRD WrFoldertoIDM
CALL LWRD ?BANK_CALL_DIRECT_L08
LD (IX-84),L
LD (IX-83),H
LD (IX-82),C
LD (IX-81),B
LD DE,g_offset
LD A,BYTE3 WrFiletoIDM
LD HL,LWRD WrFiletoIDM
CALL LWRD ?BANK_CALL_DIRECT_L08
LD (IX-80),L
LD (IX-79),H
RET
RSEG CSTR
?0004:
DEFB ':'
DEFB 0
?0158:
DEFB 92,0
RSEG UDATA0
fselPLOrCommonDir:
DEFS 1
fselType:
DEFS 1
fselMode:
DEFS 1
fselFileNo:
DEFS 2
fselExtNo:
DEFS 1
fselDiskLetter:
DEFS 1
fselError:
DEFS 1
fselRandCount:
DEFS 2
fselDirNo:
DEFS 8
StackPathoffset:
DEFS 32
PageNum:
DEFS 1
g_offset:
DEFS 4
fselDirLayer:
DEFS 1
fselTotal:
DEFS 2
RSEG MOD_EH_API
ExtMusic2:
DEFB 'MP3'
DEFB 0
DEFB 'WMA'
DEFB 0
DEFB 'ASF'
DEFB 0
DEFB 'WMV'
DEFB 0
DEFB 'OGG'
DEFB 0
DEFB 'APE'
DEFB 0
DEFB 'WAV'
DEFB 0
DEFB 'ACT'
DEFB 0
DEFB 'JPG'
DEFB 0
DEFB 'BMP'
DEFB 0
DEFB 'GIF'
DEFB 0
DEFB 'TXT'
DEFB 0
DEFB 'AMV'
DEFB 0
ExtVoice2:
DEFB 'WAV'
DEFB 0
DEFB 'ACT'
DEFB 0
RootName2:
DEFB ':'
DEFB 0
IgnoreExt2:
DEFB '* '
DEFB 0
ExtDsc2:
DEFB 'JPG'
DEFB 0
DEFB 'BMP'
DEFB 0
DEFB 'GIF'
DEFB 0
ExtTxt2:
DEFB 'TXT'
DEFB 0
ExtAmv2:
DEFB 'AMV'
DEFB 0
RSEG MOC_EH_FSLAPI
m_szTemp:
DEFS 12
m_szTemp1:
DEFS 12
END
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?