⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 navi_read.s01

📁 炬力方案176*132软件源码,适用于AK1025
💻 S01
字号:
	NAME	navi_read(17)
	RSEG	APC_NAVI_UI_READ(0)
	RSEG	APD_NAVI_READ(0)
	EXTERN	CurListoffset
	EXTERN	CurTotalNum
	EXTERN	FS_FRead
	EXTERN	FS_FSeek
	EXTERN	Navfileoffset
	PUBLIC	Navi_read
	PUBLIC	Navi_read_head
	EXTERN	Navifp
	EXTERN	buffer
	PUBLIC	file_info
	PUBLIC	g_path_info
	EXTERN	navi_buff
	EXTERN	?CLZ80B_4_04_L00
	EXTERN	?S_LSH_L02
	EXTERN	?S_MUL_L02
	EXTERN	?L_LSH_L03
	EXTERN	?SL_DIV_L03
	EXTERN	?SL_MOD_L03
	EXTERN	?SL_CMP_L03
	EXTERN	?L_ADDASG_L03
	EXTERN	?BANK_CALL_DIRECT_L08
	EXTERN	?BANK_LEAVE_DIRECT_L08
	EXTERN	?BANK_FAST_LEAVE_L08
	EXTERN	?ENT_AUTO_DIRECT_L09
	EXTERN	?MEMSET_L11
	RSEG	APC_NAVI_UI_READ
Navi_read:
; 1.	#include "ap_music.h"
; 2.	extern handle Navifp; 
; 3.	extern long  CurListoffset; //每个表的偏移量
; 4.	extern long  CurTotalNum;
; 5.	extern long  Navfileoffset;    //当前表的已经读的偏移量
; 6.	extern BOOL Navi_read(long fileoffset);
; 7.	#pragma memory=dataseg(APD_NAVI)
; 8.	extern char navi_buff[NAVI_GROUP*30];
; 9.	extern char buffer[512];
; 10.	#pragma memory=default
; 11.	
; 12.	#pragma memory=dataseg(APD_NAVI_READ)
; 13.	  
; 14.	 file_info_t file_info; 
; 15.	 Location_Path_t g_path_info;
; 16.	#pragma memory=default
; 17.	
; 18.	
; 19.	#pragma codeseg(APC_NAVI_UI_READ)
; 20.	
; 21.	
; 22.	
; 23.	
; 24.	BOOL Navi_read(long fileoffset)
; 25.	{
	PUSH	BC
	PUSH	DE
	PUSH	AF
; 26.	    BOOL result=TRUE; 
; 27.	   char IO27Bak = input8(0x27);
	IN	A,(39)
	LD	HL,1
	ADD	HL,SP
	LD	(HL),A
; 28.	    output8(0x27,0);            //关DSP中断
	XOR	A
	OUT	(39),A
; 29.	   if(FS_FSeek(fileoffset/512,FS_SEEK_FFROMSTART,Navifp))
	DEC	HL
	LD	(HL),1
	LD	HL,(Navifp)
	PUSH	HL
	LD	L,A
	PUSH	HL
	LD	H,L
	PUSH	HL
	LD	H,2
	PUSH	HL
	EX	DE,HL
	CALL	LWRD ?SL_DIV_L03
	EX	DE,HL
	CALL	LWRD FS_FSeek
	POP	HL
	POP	HL
	OR	A
	JR	Z,?0003
?0002:
; 30.	    {
; 31.	        if(!FS_FRead(buffer,1,Navifp))
	LD	HL,(Navifp)
	PUSH	HL
	LD	C,1
	LD	DE,buffer
	CALL	LWRD FS_FRead
	POP	HL
	OR	A
	JR	NZ,?0006
?0004:
; 32.	           result= FALSE;
?0005:
; 33.	    }
; 34.	    else
?0003:
; 35.	       result= FALSE;
	LD	L,A
	LD	H,A
	ADD	HL,SP
	LD	(HL),A
?0006:
; 36.	   output8(0x27,IO27Bak);
	LD	HL,1
	ADD	HL,SP
	LD	A,(HL)
	OUT	(39),A
; 37.	   return result;
	DEC	HL
	LD	L,(HL)
; 38.	}
	POP	AF
	POP	AF
	POP	AF
	JP	LWRD ?BANK_FAST_LEAVE_L08
Navi_read_head:
; 39.	
; 40.	BOOL Navi_read_head(long fileoffset,char direct,WORD *DelNum)
; 41.	{
	CALL	LWRD ?ENT_AUTO_DIRECT_L09
	DEFW	65518
; 42.	     
; 43.	    
; 44.	    BOOL result=TRUE; 
; 45.	    char msz_temp[12];
; 46.	    char count=0;
; 47.	    long End;
; 48.	    
; 49.	     memset(msz_temp,0,11);
	LD	BC,11
	LD	HL,6
	ADD	HL,SP
	EX	DE,HL
	LD	L,B
	LD	H,B
	CALL	LWRD ?MEMSET_L11
; 50.	     memset(&file_info,0,sizeof(file_info_t));
	LD	BC,64
	LD	DE,file_info
	CALL	LWRD ?MEMSET_L11
; 51.	     if(fileoffset==0)
	LD	A,(IX+2)
	OR	(IX+3)
	OR	(IX+4)
	OR	(IX+5)
	JR	NZ,?0008
?0007:
; 52.	     {
; 53.	        msz_temp[0]='R';
	LD	(IX-12),82
; 54.	        msz_temp[1]='O';
	LD	(IX-11),79
; 55.	        msz_temp[2]='O';
	LD	(IX-10),79
; 56.	        msz_temp[3]='T';
	LD	(IX-9),84
; 57.	        msz_temp[4]=0;
	LD	(IX-8),H
; 58.	        file_info.PathorFile =1 ;  //root
	JR	?0037
; 59.	     }
; 60.	     else
?0008:
; 61.	     {
; 62.	         msz_temp[0]='\\';
	LD	(IX-12),92
; 63.	         msz_temp[1]=0;
	LD	(IX-11),H
; 64.	         file_info.PathorFile =1 ; //parent
?0037:
	LD	A,1
	LD	(file_info),A
?0009:
; 65.	     }
; 66.	        
; 67.	    
; 68.	     
; 69.	    result= Navi_read(fileoffset);
	LD	C,(IX+4)
	LD	B,(IX+5)
	LD	E,(IX+2)
	LD	D,(IX+3)
	CALL	LWRD ?0039
	LD	(IX-17),L
; 70.	     
; 71.	    if(direct==0)
	XOR	A
	OR	(IX+10)
	JP	NZ,?0011
?0010:
; 72.	    {
; 73.	        CurListoffset=fileoffset;
	LD	C,(IX+4)
	LD	B,(IX+5)
	LD	L,(IX+2)
	LD	H,(IX+3)
	LD	(CurListoffset),HL
	LD	(CurListoffset+2),BC
; 74.	        if(fileoffset%512+sizeof(Location_Path_t)<512)
	LD	L,A
	LD	H,A
	PUSH	HL
	LD	H,2
	PUSH	HL
	LD	H,L
	PUSH	HL
	LD	H,2
	PUSH	HL
	CALL	LWRD ?0040
	PUSH	BC
	PUSH	HL
	LD	HL,64
	POP	BC
	ADD	HL,BC
	EX	DE,HL
	LD	L,A
	LD	H,A
	POP	BC
	ADC	HL,BC
	LD	C,L
	LD	B,H
	EX	DE,HL
	CALL	LWRD ?SL_CMP_L03
	JR	NC,?0013
?0012:
; 75.	             memcpy(&g_path_info,buffer+fileoffset%512,sizeof(Location_Path_t));
	LD	BC,64
	LD	DE,g_path_info
	LD	L,B
	LD	H,B
	PUSH	HL
	LD	H,2
	PUSH	HL
	CALL	LWRD ?0041
	LD	BC,buffer
	ADD	HL,BC
	LD	BC,64
	JP	LWRD ?0038
; 76.	        else
?0013:
; 77.	        {
; 78.	             End = 512-fileoffset%512;
	LD	L,A
	LD	H,A
	PUSH	HL
	LD	H,2
	PUSH	HL
	CALL	LWRD ?0041
	LD	E,C
	LD	D,B
	LD	C,L
	LD	B,H
	LD	HL,512
	SBC	HL,BC
	LD	C,L
	LD	B,H
	LD	L,A
	LD	H,A
	SBC	HL,DE
	PUSH	HL
	LD	L,C
	LD	(IX-16),L
	LD	H,B
	LD	(IX-15),H
	POP	BC
	LD	(IX-14),C
	LD	(IX-13),B
; 79.	             memcpy(&g_path_info,buffer+fileoffset%512,End);
	PUSH	HL
	LD	DE,g_path_info
	LD	L,A
	LD	H,A
	PUSH	HL
	LD	H,2
	PUSH	HL
	CALL	LWRD ?0041
	LD	BC,buffer
	ADD	HL,BC
	POP	BC
	LD	A,C
	OR	B
	JR	Z,?0035
	LDIR
?0035:
; 80.	             fileoffset = fileoffset+End;
	LD	HL,20
	ADD	HL,SP
	LD	C,(IX-14)
	LD	B,(IX-13)
	LD	E,(IX-16)
	LD	D,(IX-15)
	CALL	LWRD ?L_ADDASG_L03
; 81.	             result= Navi_read(fileoffset);
	CALL	LWRD ?0039
	LD	(IX-17),L
; 82.	             memcpy(&g_path_info+End,buffer+fileoffset%512,sizeof(Location_Path_t)-End);
	LD	C,(IX-16)
	LD	B,(IX-15)
	LD	HL,64
	AND	A
	SBC	HL,BC
	PUSH	HL
	LD	E,C
	LD	D,B
	LD	B,6
	CALL	LWRD ?S_LSH_L02
	LD	HL,g_path_info
	ADD	HL,DE
	EX	DE,HL
	LD	HL,0
	PUSH	HL
	LD	H,2
	PUSH	HL
	CALL	LWRD ?0041
	LD	BC,buffer
	ADD	HL,BC
	POP	BC
	LD	A,C
	OR	B
	JR	Z,?0036
?0038:
	LDIR
?0036:
?0014:
; 83.	        }
; 84.	        if(g_path_info.PathorFile!=0)
	LD	A,(g_path_info)
	OR	A
	JR	Z,?0016
?0015:
; 85.	           return FALSE;
	LD	L,0
	JP	LWRD ?0032
?0016:
; 86.	        CurTotalNum  =     g_path_info.DirNum + g_path_info.FileNum +1-g_path_info.DelFileNum;
	LD	HL,(g_path_info+37)
	LD	E,A
	LD	D,A
	PUSH	DE
	PUSH	HL
	LD	HL,g_path_info+31
	LD	C,(HL)
	INC	HL
	LD	B,(HL)
	INC	HL
	LD	E,(HL)
	INC	HL
	LD	D,(HL)
	PUSH	DE
	PUSH	BC
	LD	HL,(g_path_info+27)
	POP	BC
	ADD	HL,BC
	EX	DE,HL
	LD	HL,(g_path_info+29)
	POP	BC
	ADC	HL,BC
	EX	DE,HL
	AND	A
	POP	BC
	SBC	HL,BC
	EX	DE,HL
	POP	BC
	SBC	HL,BC
	PUSH	HL
	PUSH	DE
	LD	HL,1
	POP	BC
	ADD	HL,BC
	EX	DE,HL
	LD	L,A
	LD	H,A
	POP	BC
	ADC	HL,BC
	LD	C,L
	LD	B,H
	EX	DE,HL
	LD	(CurTotalNum),HL
	LD	(CurTotalNum+2),BC
; 87.	        Navfileoffset = CurListoffset+sizeof(Location_Path_t);  //有可能越界
	LD	L,A
	LD	H,A
	PUSH	HL
	LD	L,64
	PUSH	HL
	LD	HL,(CurListoffset)
	POP	BC
	ADD	HL,BC
	EX	DE,HL
	LD	HL,(CurListoffset+2)
	POP	BC
	ADC	HL,BC
	LD	C,L
	LD	B,H
	EX	DE,HL
	LD	(Navfileoffset),HL
	LD	(Navfileoffset+2),BC
; 88.	        *DelNum = g_path_info.DelFileNum;
	LD	HL,(g_path_info+37)
	PUSH	HL
	LD	L,(IX+12)
	LD	H,(IX+13)
	POP	BC
	LD	(HL),C
	INC	HL
	LD	(HL),B
?0011:
; 89.	    }
; 90.	    
; 91.	    
; 92.	    //write root information
; 93.	    //for display 
; 94.	    memset(navi_buff,0,30*NAVI_GROUP);
	LD	BC,180
	LD	DE,navi_buff
	LD	L,B
	CALL	LWRD ?MEMSET_L11
; 95.	    if((direct==0))
	XOR	A
	OR	(IX+10)
	JR	NZ,?0018
?0017:
; 96.	    {
; 97.	        memcpy(file_info.filename,msz_temp,11);
	LD	BC,11
	LD	DE,file_info+1
	LD	HL,6
	ADD	HL,SP
	LDIR
; 98.	        file_info.Nextoffset=g_path_info.Parentoffset;
	LD	HL,(g_path_info+35)
	LD	(file_info+13),HL
; 99.	        memcpy(navi_buff,&file_info,16);
	LD	C,16
	LD	DE,navi_buff
	LD	HL,file_info
	LDIR
; 100.	        memcpy(navi_buff+28,&g_path_info.Parentoffset,2);
	INC	BC
	INC	BC
	LD	DE,navi_buff+28
	LD	HL,g_path_info+35
	LDIR
; 101.	        count = 1;
	LD	(IX-18),1
; 102.	        
; 103.	    }
; 104.	    else
	JR	?0019
?0018:
; 105.	    {
; 106.	        Navfileoffset = fileoffset;  //有可能越界
	LD	C,(IX+4)
	LD	B,(IX+5)
	LD	L,(IX+2)
	LD	H,(IX+3)
	LD	(Navfileoffset),HL
	LD	(Navfileoffset+2),BC
; 107.	        count = 0;
	LD	(IX-18),0
?0019:
; 108.	        
; 109.	    }
; 110.	    End = CurListoffset+(CurTotalNum-1+ *DelNum)*sizeof(file_info_t)+sizeof(Location_Path_t);
	LD	L,(IX+12)
	LD	H,(IX+13)
	LD	B,(HL)
	INC	HL
	LD	H,(HL)
	LD	L,B
	LD	BC,0
	PUSH	BC
	PUSH	HL
	LD	HL,(CurTotalNum)
	POP	BC
	ADD	HL,BC
	EX	DE,HL
	LD	HL,(CurTotalNum+2)
	POP	BC
	ADC	HL,BC
	PUSH	HL
	PUSH	DE
	LD	HL,65535
	POP	BC
	ADD	HL,BC
	EX	DE,HL
	LD	HL,65535
	POP	BC
	ADC	HL,BC
	LD	C,L
	LD	B,H
	EX	DE,HL
	LD	A,6
	CALL	LWRD ?L_LSH_L03
	PUSH	BC
	PUSH	HL
	LD	HL,(CurListoffset)
	POP	BC
	ADD	HL,BC
	EX	DE,HL
	LD	HL,(CurListoffset+2)
	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
	EX	DE,HL
	LD	(IX-16),L
	LD	(IX-15),H
	LD	(IX-14),C
	LD	(IX-13),B
?0021:
; 111.	    while(count<NAVI_GROUP)
	LD	A,(IX-18)
	CP	6
	JP	NC,?0020
?0022:
; 112.	    {
; 113.	        if(Navfileoffset<End)
	LD	L,(IX-14)
	LD	H,(IX-13)
	PUSH	HL
	LD	L,(IX-16)
	LD	H,(IX-15)
	PUSH	HL
	LD	BC,(Navfileoffset+2)
	LD	HL,(Navfileoffset)
	CALL	LWRD ?SL_CMP_L03
	JP	NC,?0020
?0023:
; 114.	        {
; 115.	            if(Navfileoffset%512==0)
	LD	HL,0
	PUSH	HL
	LD	H,2
	PUSH	HL
	LD	HL,(Navfileoffset)
	CALL	LWRD ?SL_MOD_L03
	LD	A,L
	OR	H
	OR	C
	OR	B
	JR	NZ,?0028
?0025:
; 116.	            {
; 117.	                 if(!Navi_read(Navfileoffset))
	LD	BC,(Navfileoffset+2)
	LD	DE,(Navfileoffset)
	CALL	LWRD ?0039
	INC	L
	DEC	L
	JR	NZ,?0028
?0027:
; 118.	                 {
; 119.	                               
; 120.	                      result=FALSE;
	LD	(IX-17),L
; 121.	                      break;
	JP	LWRD ?0020
?0028:
?0026:
; 122.	                 }
; 123.	                               
; 124.	                        
; 125.	                         
; 126.	            }
; 127.	            if(*(buffer+Navfileoffset%512)!=3)
	LD	HL,0
	PUSH	HL
	LD	H,2
	PUSH	HL
	LD	BC,(Navfileoffset+2)
	LD	HL,(Navfileoffset)
	CALL	LWRD ?SL_MOD_L03
	LD	BC,buffer
	ADD	HL,BC
	LD	A,(HL)
	CP	3
	JR	Z,?0030
?0029:
; 128.	            {
; 129.	                 //memcpy(navi_buff+count*16,buffer+Navfileoffset%512,16);
; 130.	                 memcpy(navi_buff+count*30,buffer+Navfileoffset%512,1);
	LD	BC,1
	CALL	LWRD ?0042
	LD	HL,navi_buff
	ADD	HL,DE
	EX	DE,HL
	LD	L,B
	LD	H,B
	PUSH	HL
	LD	H,2
	PUSH	HL
	LD	BC,(Navfileoffset+2)
	LD	HL,(Navfileoffset)
	CALL	LWRD ?SL_MOD_L03
	LD	BC,buffer
	ADD	HL,BC
	LD	BC,1
	LDIR
; 131.	                 memcpy(navi_buff+count*30+1,buffer+Navfileoffset%512+17,27);
	LD	HL,navi_buff+1
	CALL	LWRD ?0042
	ADD	HL,DE
	EX	DE,HL
	PUSH	DE
	LD	C,B
	PUSH	BC
	LD	B,2
	PUSH	BC
	LD	BC,(Navfileoffset+2)
	LD	HL,(Navfileoffset)
	CALL	LWRD ?SL_MOD_L03
	EX	DE,HL
	LD	HL,buffer+17
	ADD	HL,DE
	POP	DE
	LD	BC,27
	LDIR
; 132.	                 navi_buff[count*30+27]=0;
	LD	HL,navi_buff+27
	LD	C,(IX-18)
	LD	DE,30
	CALL	LWRD ?S_MUL_L02
	ADD	HL,DE
	LD	(HL),B
; 133.	                 memcpy(navi_buff+count*30+28,buffer+Navfileoffset%512+13,2);
	LD	HL,navi_buff+28
	LD	E,C
	CALL	LWRD ?0043
	ADD	HL,DE
	EX	DE,HL
	PUSH	DE
	LD	C,B
	PUSH	BC
	LD	B,2
	PUSH	BC
	LD	BC,(Navfileoffset+2)
	LD	HL,(Navfileoffset)
	CALL	LWRD ?SL_MOD_L03
	EX	DE,HL
	LD	HL,buffer+13
	ADD	HL,DE
	POP	DE
	LD	BC,2
	LDIR
; 134.	                 
; 135.	                 count++;
	INC	(IX-18)
?0030:
; 136.	            }
; 137.	            Navfileoffset=Navfileoffset+sizeof(file_info_t);
	LD	HL,Navfileoffset
	LD	BC,0
	LD	DE,64
	CALL	LWRD ?L_ADDASG_L03
; 138.	            
; 139.	        }
; 140.	        else
?0024:
; 141.	            break;
?0031:
	JP	LWRD ?0021
?0020:
; 142.	        
; 143.	    }
; 144.	     
; 145.	    return result;
	LD	L,(IX-17)
; 146.	    
; 147.	}
?0032:
	JP	LWRD ?BANK_LEAVE_DIRECT_L08
?0039:
	LD	A,BYTE3 Navi_read
	LD	HL,LWRD Navi_read
	JP	LWRD ?BANK_CALL_DIRECT_L08
?0041:
	LD	C,(IX+4)
	LD	B,(IX+5)
?0040:
	LD	L,(IX+2)
	LD	H,(IX+3)
	JP	LWRD ?SL_MOD_L03
?0042:
	LD	E,(IX-18)
?0043:
	LD	D,B
	LD	C,30
	JP	LWRD ?S_MUL_L02
; 148.	
	RSEG	APD_NAVI_READ
file_info:
	DEFS	64
g_path_info:
	DEFS	64
	END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -