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

📄 navi_select.s01

📁 炬力方案176*132软件源码,适用于AK1025
💻 S01
字号:
	NAME	navi_select(17)
	RSEG	APC_NAVI_UI_SELECT(0)
	RSEG	CSTR(0)
	RSEG	CONST(0)
	RSEG	APD_NAVI_SELECT(0)
	RSEG	AP_NAVI_UI_SELECT(0)
	EXTERN	CurListoffset
	PUBLIC	Deal_play_Navi
	EXTERN	FS_CD
	EXTERN	FS_FClose
	EXTERN	FS_FOpen
	EXTERN	FS_FRead
	EXTERN	FS_FSeek
	EXTERN	FS_GetCurDir
	EXTERN	FS_SetCurDir
	PUBLIC	Navi_ext
	PUBLIC	Navi_read_S
	EXTERN	Navifp
	EXTERN	UI_play_Navi
	EXTERN	VMWrite
	EXTERN	buffer
	PUBLIC	check_file_type
	PUBLIC	ext
	EXTERN	g_music_vars
	PUBLIC	location
	PUBLIC	msz_temp
	PUBLIC	navi_offset
	PUBLIC	temp_browser_vars
	EXTERN	?CLZ80B_4_04_L00
	EXTERN	?L_LSH_L03
	EXTERN	?SL_DIV_L03
	EXTERN	?SL_MOD_L03
	EXTERN	?BANK_CALL_DIRECT_L08
	EXTERN	?BANK_LEAVE_DIRECT_L08
	EXTERN	?BANK_FAST_LEAVE_L08
	EXTERN	?ENT_AUTO_DIRECT_L09
	EXTERN	?MEMSET_L11
	EXTERN	?STRCMP_L11
	RSEG	APC_NAVI_UI_SELECT
Navi_read_S:
; 1.	#include "ap_music.h"                       
; 2.	const char msz_temp[12]="NAVI    0   " ;  
; 3.	extern handle Navifp; 
; 4.	extern long  CurListoffset; //每个表的偏移量
; 5.	extern long  CurTotalNum;
; 6.	extern long  Navfileoffset;    //当前表的已经读的偏移量
; 7.	extern BOOL Navi_read(long fileoffset);
; 8.	#pragma memory=dataseg(APD_NAVI)
; 9.	extern char navi_buff[NAVI_GROUP*30];
; 10.	extern char buffer[512];                   
; 11.	  
; 12.	#pragma memory=default
; 13.	#pragma memory=dataseg(APD_NAVI_SELECT)
; 14.	 BYTE ext[4];  
; 15.	 file_location_t  location;   
; 16.	 browser_vars_t temp_browser_vars;
; 17.	 long navi_offset;      
; 18.	#pragma memory=default
; 19.	#pragma memory=constseg(AP_NAVI_UI_SELECT)
; 20.	 const char Navi_ext[][4] = {"MP3", "WMA", "ASF", "WMV", "OGG","APE","WAV","ACT","JPG","BMP","GIF","TXT","AMV"};  
; 21.	#pragma memory=default
; 22.	
; 23.	#pragma codeseg(APC_NAVI_UI_SELECT)
; 24.	void Navi_read_S(long fileoffset)
; 25.	{ 
	PUSH	BC
	PUSH	DE
	PUSH	AF
; 26.	    char IO27Bak = input8(0x27);
	IN	A,(39)
	LD	HL,0
	ADD	HL,SP
	LD	(HL),A
; 27.	    output8(0x27,0);            //关DSP中断
	XOR	A
	OUT	(39),A
; 28.	    FS_FSeek(fileoffset/512,FS_SEEK_FFROMSTART,Navifp);
	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
; 29.	    FS_FRead(buffer,1,Navifp);
	LD	HL,(Navifp)
	PUSH	HL
	LD	C,1
	LD	DE,buffer
	CALL	LWRD FS_FRead
	POP	HL
; 30.	    output8(0x27,IO27Bak);
	LD	HL,0
	ADD	HL,SP
	LD	A,(HL)
	OUT	(39),A
; 31.	}
	POP	HL
	POP	HL
	POP	HL
	JP	LWRD ?BANK_FAST_LEAVE_L08
check_file_type:
; 32.	
; 33.	int check_file_type(long active)
; 34.	{
	CALL	LWRD ?ENT_AUTO_DIRECT_L09
	DEFW	65534
; 35.	    char i;     
; 36.	    char IO27Bak = input8(0x27); 
	IN	A,(39)
	LD	(IX-1),A
; 37.	    navi_offset = (active-1)*sizeof(file_info_t)+CurListoffset+sizeof(Location_Path_t);
	LD	HL,65535
	PUSH	HL
	PUSH	HL
	LD	L,(IX+2)
	LD	H,(IX+3)
	POP	BC
	ADD	HL,BC
	EX	DE,HL
	LD	L,(IX+4)
	LD	H,(IX+5)
	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	(navi_offset),HL
	LD	(navi_offset+2),BC
; 38.	    memset(&location,0,sizeof(file_location_t));
	LD	BC,43
	LD	DE,location
	LD	L,B
	CALL	LWRD ?MEMSET_L11
; 39.	    Navi_read_S(CurListoffset);
	LD	BC,(CurListoffset+2)
	LD	DE,(CurListoffset)
	LD	A,BYTE3 Navi_read_S
	LD	HL,LWRD Navi_read_S
	CALL	LWRD ?BANK_CALL_DIRECT_L08
; 40.	    memcpy(&location,buffer+CurListoffset%512+1,sizeof(file_location_t)-2); 
	LD	BC,41
	LD	C,B
	PUSH	BC
	LD	B,2
	PUSH	BC
	LD	BC,(CurListoffset+2)
	LD	HL,(CurListoffset)
	CALL	LWRD ?SL_MOD_L03
	EX	DE,HL
	LD	HL,buffer+1
	ADD	HL,DE
	LD	DE,location
	LD	BC,41
	LDIR
; 41.	    Navi_read_S(navi_offset);
	LD	BC,(navi_offset+2)
	LD	DE,(navi_offset)
	LD	A,BYTE3 Navi_read_S
	LD	HL,LWRD Navi_read_S
	CALL	LWRD ?BANK_CALL_DIRECT_L08
; 42.	    memcpy(location.filename,buffer+navi_offset%512+1,11);
	LD	BC,11
	LD	C,B
	PUSH	BC
	LD	B,2
	PUSH	BC
	LD	BC,(navi_offset+2)
	LD	HL,(navi_offset)
	CALL	LWRD ?SL_MOD_L03
	EX	DE,HL
	LD	HL,buffer+1
	ADD	HL,DE
	LD	DE,location+26
	LD	BC,11
	LDIR
; 43.	    memcpy(ext, buffer+navi_offset%512+1+8, 3);
	PUSH	BC
	LD	B,2
	PUSH	BC
	LD	BC,(navi_offset+2)
	LD	HL,(navi_offset)
	CALL	LWRD ?SL_MOD_L03
	EX	DE,HL
	LD	HL,buffer+9
	ADD	HL,DE
	LD	DE,ext
	LD	BC,3
	LDIR
; 44.	    ext[0] = (ext[0]>='a' && ext[0]<='z') ? ext[0] - 'a' + 'A' : ext[0];
	LD	A,(ext)
	CP	97
	JR	C,?0005
	LD	A,(ext)
	LD	B,A
	LD	A,122
	CP	B
	JR	C,?0005
	LD	A,(ext)
	ADD	A,224
	JR	?0006
?0005:
	LD	A,(ext)
?0006:
	LD	(ext),A
; 45.	    ext[1] = (ext[1]>='a' && ext[1]<='z') ? ext[1] - 'a' + 'A' : ext[1];
	LD	A,(ext+1)
	CP	97
	JR	C,?0011
	LD	A,(ext+1)
	LD	B,A
	LD	A,122
	CP	B
	JR	C,?0011
	LD	A,(ext+1)
	ADD	A,224
	JR	?0012
?0011:
	LD	A,(ext+1)
?0012:
	LD	(ext+1),A
; 46.	    ext[2] = (ext[2]>='a' && ext[2]<='z') ? ext[2] - 'a' + 'A' : ext[2];
	LD	A,(ext+2)
	CP	97
	JR	C,?0017
	LD	A,(ext+2)
	LD	B,A
	LD	A,122
	CP	B
	JR	C,?0017
	LD	A,(ext+2)
	ADD	A,224
	JR	?0018
?0017:
	LD	A,(ext+2)
?0018:
	LD	(ext+2),A
; 47.	    ext[3] = 0;
	XOR	A
	LD	(ext+3),A
; 48.	    for(i=0;i<NAVI_FILE_TYPE_NUM;i++)
	LD	(IX-2),C
?0021:
	LD	A,(IX-2)
	CP	13
	JR	NC,?0020
?0022:
; 49.	    {
; 50.	        if(strcmp(Navi_ext[i],ext)==0)
	LD	L,A
	LD	H,0
	ADD	HL,HL
	ADD	HL,HL
	LD	BC,Navi_ext
	ADD	HL,BC
	EX	DE,HL
	LD	HL,ext
	CALL	LWRD ?STRCMP_L11
	LD	A,L
	OR	H
	JR	Z,?0020
?0024:
; 51.	           break;
?0025:
	INC	(IX-2)
	JR	?0021
?0020:
; 52.	    }  
; 53.	    memcpy(&temp_browser_vars.location,&location,sizeof(file_location_t));  
	LD	BC,43
	LD	DE,temp_browser_vars+2
	LD	HL,location
	LDIR
; 54.	    output8(0x27,0);            //关DSP中断 
	XOR	A
	OUT	(39),A
; 55.	    VMWrite(&temp_browser_vars,VM_AP_BROWSER);
	LD	B,76
	LD	DE,temp_browser_vars
	CALL	LWRD VMWrite
; 56.	    output8(0x27,IO27Bak);            //开DSP中断  
	LD	A,(IX-1)
	OUT	(39),A
; 57.	    if(i<6) //music
	LD	A,(IX-2)
	CP	6
	JR	NC,?0027
?0026:
; 58.	    {
; 59.	        memcpy(&g_music_vars.location,&location,sizeof(file_location_t));
	LD	BC,43
	LD	DE,g_music_vars+7
	LD	HL,location
	LDIR
; 60.	        return RESULT_MUSIC_PLAY;                                         //zhangxs changed for real play   2007.03.30
	LD	HL,30
; 61.	    }
	JR	?0034
?0027:
; 62.	    else if(i<8)  //voice
	CP	8
	JR	NC,?0029
?0028:
; 63.	    {
; 64.	        return RESULT_VOICE_PLAY;
	LD	HL,31
	JR	?0034
?0029:
; 65.	    }else if(i<11)  //jpg
	CP	11
	JR	NC,?0031
?0030:
; 66.	    {
; 67.	         
; 68.	        return RESULT_VIEW_PLAY;
	LD	HL,34
	JR	?0034
?0031:
; 69.	    }else if(i<12)  //text
	CP	12
	JR	NC,?0033
?0032:
; 70.	    {
; 71.	         
; 72.	        return RESULT_READER_PLAY;
	LD	HL,33
; 73.	    }
	JR	?0034
?0033:
; 74.	    else
; 75.	    {
; 76.	         
; 77.	         return RESULT_MOVIE_PLAY;
	LD	HL,32
; 78.	    }
?0034:
	JP	LWRD ?BANK_LEAVE_DIRECT_L08
; 79.	     
; 80.	}  
Deal_play_Navi:
; 81.	
; 82.	int Deal_play_Navi(void)
; 83.	{
	CALL	LWRD ?ENT_AUTO_DIRECT_L09
	DEFW	-6
; 84.	    int result=0;   
; 85.	    long CurDirBackup; 
; 86.	    BYTE   IO27Bak = input8(0x27);
	IN	A,(39)
	LD	(IX-6),A
; 87.	    output8(0x27,IO27Bak&0xfe);            //关DSP中断 
	RES	0,A
	OUT	(39),A
; 88.	    //FS_Backup(NaviBackbuf,FS_BACKUP_DIRINFO,0);//目录项备份       
; 89.	    CurDirBackup=FS_GetCurDir();     
	CALL	LWRD FS_GetCurDir
	LD	(IX-4),L
	LD	(IX-3),H
	LD	(IX-2),C
	LD	(IX-1),B
; 90.	    FS_CD(FS_CD_ROOT);           //返回根目录查找列表  
	LD	DE,?0035
	CALL	LWRD FS_CD
; 91.	    Navifp = FS_FOpen(msz_temp,FS_OPEN_NORMAL); 
	LD	C,0
	LD	DE,msz_temp
	CALL	LWRD FS_FOpen
	LD	(Navifp),HL
; 92.	    if(Navifp==NULL)
	LD	A,L
	OR	H
	JR	NZ,?0037
?0036:
; 93.	    { 
; 94.	//      FS_Restore(NaviBackbuf,FS_RESTORE_DIRINFO,0);//目录项恢复  
; 95.	      FS_SetCurDir(CurDirBackup);     
	CALL	LWRD ?0039
; 96.	      output8(0x27,IO27Bak);   
	LD	A,(IX-6)
	OUT	(39),A
; 97.	      return RESULT_IGNORE;
	LD	HL,52
; 98.	    }
	JR	?0038
?0037:
; 99.	    output8(0x27,IO27Bak);  
	LD	A,(IX-6)
	OUT	(39),A
; 100.	    result = UI_play_Navi();
	LD	A,BYTE3 UI_play_Navi
	LD	HL,LWRD UI_play_Navi
	CALL	LWRD ?BANK_CALL_DIRECT_L08
	EX	DE,HL
; 101.	    output8(0x27,IO27Bak&0xfe);     
	LD	B,(IX-6)
	RES	0,B
	LD	A,B
	OUT	(39),A
; 102.	    FS_FClose(Navifp); 
	PUSH	DE
	LD	DE,(Navifp)
	CALL	LWRD FS_FClose
; 103.	   // FS_Restore(NaviBackbuf,FS_RESTORE_DIRINFO,0);//目录项恢复           
; 104.	    FS_SetCurDir(CurDirBackup);    
	CALL	LWRD ?0039
	POP	DE
; 105.	    output8(0x27,IO27Bak);     
	LD	A,(IX-6)
	OUT	(39),A
; 106.	    return result;   
	EX	DE,HL
; 107.	}  
?0038:
	JP	LWRD ?BANK_LEAVE_DIRECT_L08
?0039:
	LD	C,(IX-2)
	LD	B,(IX-1)
	LD	E,(IX-4)
	LD	D,(IX-3)
	JP	LWRD FS_SetCurDir
	RSEG	CSTR
?0035:
	DEFB	':'
	DEFB	0
	RSEG	CONST
msz_temp:
	DEFB	'NAVI    0   '
	RSEG	APD_NAVI_SELECT
ext:
	DEFS	4
location:
	DEFS	43
temp_browser_vars:
	DEFS	45
navi_offset:
	DEFS	4
	RSEG	AP_NAVI_UI_SELECT
Navi_ext:
	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
	END

⌨️ 快捷键说明

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