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 + -
显示快捷键?