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

📄 main.s01

📁 炬力方案176*132软件源码,适用于AK1025
💻 S01
📖 第 1 页 / 共 2 页
字号:
	NAME	main(17)
	RSEG	APC_LIST_FUN1(0)
	RSEG	CSTR(0)
	RSEG	CONST(0)
	RSEG	UDATA0(0)
	RSEG	APD_LIST_FUN1(0)
	EXTERN	BankSwitch
	PUBLIC	CheckMusicType
	EXTERN	DRV_ActiveDrive
	EXTERN	DRV_ActiveUD
	EXTERN	DRV_DetectUD
	EXTERN	FS_FRemove
	EXTERN	FS_GetName
	EXTERN	SetDspMips
	EXTERN	SortStoreListToFile
	PUBLIC	StoreID3toIDM
	EXTERN	VMRead
	EXTERN	VMWrite
	PUBLIC	delay1
	EXTERN	fselGetLocation
	EXTERN	fselGetNextFile
	EXTERN	fselInit
	PUBLIC	g_ID3InfoBuf
	PUBLIC	g_file_total
	PUBLIC	g_music_list_val
	PUBLIC	list_location
	PUBLIC	main
	EXTERN	mp3GetID3Info
	EXTERN	unitochar
	EXTERN	wmaGetTAGInfo
	EXTERN	?CLZ80B_4_04_L00
	EXTERN	?S_MUL_L02
	EXTERN	?BANK_CALL_DIRECT_L08
	EXTERN	?BANK_FAST_LEAVE_L08
	EXTERN	?MEMSET_L11
	EXTERN	?STRCMP_L11
	RSEG	APC_LIST_FUN1
delay1:
; 1.	#include "musiclist.h" 
; 2.	#include "ap_music.h" 
; 3.	unsigned int g_file_total;  
; 4.	char g_ID3InfoBuf[90];          
; 5.	#pragma memory=dataseg(APD_LIST_FUN1)
; 6.	file_location_t list_location; 
; 7.	music_vars_t g_music_list_val;     
; 8.	#pragma memory=default   
; 9.	 
; 10.	Music_type_t CheckMusicType( char * filename ); 
; 11.	void StoreID3toIDM( bool mode,unsigned int FileNum,file_location_t *location,int langid);  
; 12.	#pragma codeseg(APC_LIST_FUN1)    
; 13.	
; 14.	void delay1(void)
; 15.	{
	PUSH	BC
	PUSH	DE
	PUSH	IX
; 16.	    int i,j=0;
; 17.	    for(i=0;i<1000;i++) {;}
	LD	DE,0
?0003:
	LD	BC,33768
	LD	L,E
	LD	H,D
	LD	A,128
	XOR	H
	LD	H,A
	SBC	HL,BC
	JR	NC,?0002
?0004:
	INC	DE
	JR	?0003
?0002:
; 18.	        j++;
; 19.	}
	POP	IX
	POP	DE
	POP	BC
	JP	LWRD ?BANK_FAST_LEAVE_L08
main:
; 20.	 
; 21.	int main(int param)
; 22.	{
	PUSH	BC
	PUSH	IY
	PUSH	IX
	LD	IX,0
	ADD	IX,SP
	PUSH	DE
	LD	HL,65514
	ADD	HL,SP
	LD	SP,HL
; 23.	    int result;
; 24.	    unsigned int file_num=0;      
; 25.	    unsigned int file_total_flash=0; 
; 26.	    unsigned int file_total_card=0;
; 27.	    char *start_pointer = (char *)IDMStartAddress;         
	LD	(IX-20),0
	LD	(IX-19),64
; 28.	    handle TempFileHandle;
; 29.	    BYTE MusicType;
; 30.	    ID3Info_t ID3List; 
; 31.	    BYTE  FlashDiskState = 0;    //flash 磁盘状态
; 32.	    BYTE  CardDiskState = 0; //插卡磁盘状态    
; 33.	    BYTE  DiskType;              
; 34.	/*  
; 35.	    BYTE  IO00Bak = input8(0x00);
; 36.	    BYTE  IO70Bak = input8(0x70); 
; 37.	//////////////////////// MCU 48M
; 38.	    output8(0x70, input8(0x70)&0xbf|0xb8);  //mcu pll enable & 48mhz
; 39.	    delay1();
; 40.	    output8(0x00, input8(0x00)&0xef|0x20);  //select mcu pll
; 41.	    delay1();
; 42.	///////////////////////        
; 43.	*/  
; 44.	    output8(0x4e,input8(0x4e)|0x08);
	IN	A,(78)
	SET	3,A
	OUT	(78),A
; 45.	    DRV_ActiveUD(0,MODE_SLOW);
	LD	C,1
	LD	E,0
	CALL	LWRD DRV_ActiveUD
; 46.	    //装文件系统 //install file system
; 47.	    if ( DRV_ActiveDrive('C',MODE_SLOW) )    //flash ok
	LD	IY,0
	XOR	A
	LD	(IX-16),A
	LD	(IX-15),A
	LD	(IX-18),A
	LD	(IX-17),A
	LD	(IX-22),A
	LD	(IX-23),A
	LD	C,1
	LD	E,67
	CALL	LWRD DRV_ActiveDrive
	OR	A
	JR	Z,?0007
?0006:
; 48.	    {
; 49.	     FlashDiskState = 1;
	LD	(IX-22),1
?0007:
; 50.	    }
; 51.	           
; 52.	    if (DRV_DetectUD(1) == 0x20)
	LD	E,1
	CALL	LWRD DRV_DetectUD
	CP	32
	JR	NZ,?0011
?0008:
; 53.	    { //有卡
; 54.	        DRV_ActiveUD(1,MODE_SLOW);
	LD	C,1
	LD	E,C
	CALL	LWRD DRV_ActiveUD
; 55.	        if (DRV_ActiveDrive('H', MODE_SLOW))    //card ok
	LD	C,1
	LD	E,72
	CALL	LWRD DRV_ActiveDrive
	OR	A
	JR	Z,?0011
?0010:
; 56.	        {
; 57.	         CardDiskState = 1;
	LD	(IX-23),1
?0011:
?0009:
; 58.	        }   
; 59.	    }   
; 60.	    if(FlashDiskState == 0 && CardDiskState == 0) //磁盘都错误就直接返回
	XOR	A
	OR	(IX-22)
	JR	NZ,?0013
	OR	(IX-23)
	JR	NZ,?0013
?0015:
?0014:
?0012:
; 61.	       return 0;
	LD	L,A
	LD	H,A
	JP	LWRD ?0051
?0013:
; 62.	    else if(FlashDiskState ==1)                           
	LD	B,(IX-22)
	DEC	B
	JR	NZ,?0017
?0016:
; 63.	       DiskType = 'C';                           
	LD	(IX-24),67
; 64.	    else 
	JR	?0018
?0017:
; 65.	       DiskType = 'H';
	LD	(IX-24),72
?0018:
; 66.	                   
; 67.	    output8(0x4e,input8(0x4e)|0x08);
	IN	A,(78)
	SET	3,A
	OUT	(78),A
?0019:
; 68.	//    while ( GetSysMsg() != NULL ) {};
; 69.	    //安装ud驱动 //install ud driver
; 70.	//    res_fp = ResOpen("ui30.res");
; 71.	//    SetBackgdColor(Color_BLACK_def);
; 72.	//    SetPenColor(Color_WHITE_def);
; 73.	     
; 74.	BuildAnotherList:  
; 75.	 
; 76.	    ID3List.TIT2_length = 30;
	LD	(IX-14),30
; 77.	    ID3List.TPE1_length = 30;
	LD	(IX-11),30
; 78.	    ID3List.TALB_length = 30;
	LD	(IX-8),30
; 79.	    ID3List.TENC_length = 0;
	LD	(IX-5),0
; 80.	    ID3List.TIT2_buffer = & g_ID3InfoBuf[0];   //标题
	LD	(IX-13),LOW(g_ID3InfoBuf)
	LD	(IX-12),HIGH(g_ID3InfoBuf)
; 81.	    ID3List.TPE1_buffer = & g_ID3InfoBuf[30];  //艺术家 
	LD	(IX-10),LOW(g_ID3InfoBuf+30)
	LD	(IX-9),HIGH(g_ID3InfoBuf+30)
; 82.	    ID3List.TALB_buffer = & g_ID3InfoBuf[60];  //专辑
	LD	(IX-7),LOW(g_ID3InfoBuf+60)
	LD	(IX-6),HIGH(g_ID3InfoBuf+60)
; 83.	    ID3List.TENC_buffer = & g_ID3InfoBuf[90];  
	LD	(IX-4),LOW(g_ID3InfoBuf+90)
	LD	(IX-3),HIGH(g_ID3InfoBuf+90)
; 84.	    
; 85.	    FSELInit(FSEL_TYPE_MUSIC, FSEL_ALL_SEQUENCE, FSEL_TYPE_COMMONDIR,DiskType);//初始化文件选择器  
	LD	L,(IX-24)
	PUSH	HL
	LD	C,0
	PUSH	BC
	LD	E,C
	LD	A,BYTE3 fselInit
	LD	HL,LWRD fselInit
	CALL	LWRD ?BANK_CALL_DIRECT_L08
	POP	AF
	POP	AF
; 86.	     
; 87.	    FS_FRemove(TIT2FileName);    //删除原来列表 
	LD	DE,?0020
	CALL	LWRD FS_FRemove
; 88.	    FS_FRemove(TPE1FileName);    //删除原来列表 
	LD	DE,?0021
	CALL	LWRD FS_FRemove
; 89.	    FS_FRemove(TALBFileName);    //删除原来列表 
	LD	DE,?0022
	CALL	LWRD FS_FRemove
; 90.	    FS_FRemove(FILENAMELSIT);    //删除原来列表  
	LD	DE,?0023
	CALL	LWRD FS_FRemove
?0025:
; 91.	                
; 92.	//    TIT2FileHandle = FS_FCreate(TIT2FileName);  //因为TIT2FileHandle用到IDM LOW, FS_FCreate 会用到IDM LOW 作为buf,所以先创建
; 93.	               
; 94.	    while(FSELGetNext(list_location.filename))  //找到文件
	LD	DE,list_location+26
	LD	A,BYTE3 fselGetNextFile
	LD	HL,LWRD fselGetNextFile
	CALL	LWRD ?BANK_CALL_DIRECT_L08
	INC	L
	DEC	L
	JP	Z,?0024
?0026:
; 95.	   {
; 96.	         output8(REG4E_RTC_WATCH_DOG, input8(REG4E_RTC_WATCH_DOG) | 0x08);   
	IN	A,(78)
	SET	3,A
	OUT	(78),A
; 97.	         fselGetLocation(&list_location);
	LD	DE,list_location
	LD	A,BYTE3 fselGetLocation
	LD	HL,LWRD fselGetLocation
	CALL	LWRD ?BANK_CALL_DIRECT_L08
; 98.	         MusicType = CheckMusicType(list_location.filename);     
	LD	DE,list_location+26
	LD	A,BYTE3 CheckMusicType
	LD	HL,LWRD CheckMusicType
	CALL	LWRD ?BANK_CALL_DIRECT_L08
; 99.	      switch (MusicType)
	LD	A,L
	CP	2
	JR	C,?0032
	CP	5
	JR	NC,?0032
?0028:
; 100.	       {
; 101.	       case  Music_WMA:       //WMA 的ID3 信息
; 102.	       case  Music_WMV:
; 103.	       case  Music_ASF:     
; 104.	        if (wmaGetTAGInfo(list_location.filename, &ID3List))
	LD	HL,10
	ADD	HL,SP
	LD	C,L
	LD	B,H
	LD	DE,list_location+26
	LD	A,BYTE3 wmaGetTAGInfo
	LD	HL,LWRD wmaGetTAGInfo
	CALL	LWRD ?BANK_CALL_DIRECT_L08
	INC	L
	DEC	L
	JR	Z,?0036
?0029:
; 105.	        {
; 106.	            unitochar(g_ID3InfoBuf, 30, (char)param);    //WMA Tag(unicode) change to ASCII & GB2312 
	LD	L,(IX-2)
	PUSH	HL
	LD	BC,30
	CALL	LWRD ?0102
	POP	AF
; 107.	            unitochar(&g_ID3InfoBuf[30], 30, (char)param);   
	LD	L,(IX-2)
	PUSH	HL
	LD	BC,30
	LD	DE,g_ID3InfoBuf+30
	CALL	LWRD ?0103
	POP	AF
; 108.	            unitochar(&g_ID3InfoBuf[60], 30, (char)param);             
	LD	L,(IX-2)
	PUSH	HL
	LD	BC,30
	LD	DE,g_ID3InfoBuf+60
	CALL	LWRD ?0103
	POP	AF
; 109.	        }
; 110.	        else
	JR	?0027
?0030:
; 111.	        {
; 112.	            g_ID3InfoBuf[0] = 0x0;
?0031:
; 113.	        }
; 114.	       break;
?0032:
	CP	1
	JR	NZ,?0036
; 115.	
; 116.	    case  Music_MP3:
; 117.	        if (mp3GetID3Info(list_location.filename, & ID3List, param))
	LD	L,(IX-2)
	LD	H,(IX-1)
	PUSH	HL
	LD	HL,12
	ADD	HL,SP
	LD	C,L
	LD	B,H
	LD	DE,list_location+26
	LD	A,BYTE3 mp3GetID3Info
	LD	HL,LWRD mp3GetID3Info
	CALL	LWRD ?BANK_CALL_DIRECT_L08
	POP	AF
	INC	L
	DEC	L
	JR	NZ,?0027
?0033:
; 118.	        {
; 119.	//            strcpy(g_ID3InfoBuf, & g_ID3InfoBuf[0]);
; 120.	//            strcat(g_ID3InfoBuf, " ");
; 121.	//            strcat(g_ID3InfoBuf, & g_ID3InfoBuf[30]);
; 122.	//            strcat(g_ID3InfoBuf, " ");
; 123.	//            strcat(g_ID3InfoBuf, & g_ID3InfoBuf[60]);
; 124.	//            strcat(g_ID3InfoBuf, " ");
; 125.	        }
; 126.	
; 127.	       else
?0034:
; 128.	        {
; 129.	            g_ID3InfoBuf[0] = 0x0;
?0035:
; 130.	        }
; 131.	            break;
?0036:
; 132.	
; 133.	    default:
; 134.	        g_ID3InfoBuf[0] = 0x0;        
	XOR	A
	LD	(g_ID3InfoBuf),A
; 135.	        break;
?0027:
; 136.	    }
; 137.	        
; 138.	     if(file_num>480)     //超出范围    15K 0x7c00-0x7fff IDM low 被文件系统用掉
	PUSH	IY
	POP	BC
	LD	HL,480
	AND	A
	SBC	HL,BC
	JR	C,?0024
?0037:
; 139.	     break;
?0038:
; 140.	           
; 141.	     if(g_ID3InfoBuf[0])
	LD	A,(g_ID3InfoBuf)
	OR	A
	LD	L,(IX-2)
	LD	H,(IX-1)
	PUSH	HL
	LD	HL,list_location
	PUSH	HL
	JR	Z,?0040
?0039:
; 142.	     StoreID3toIDM(1,file_num,&list_location,param);
	LD	E,1
	JR	?0099
; 143.	     else
?0040:
; 144.	     StoreID3toIDM(0,file_num,&list_location,param);    
	LD	E,A
?0099:
	LD	A,BYTE3 StoreID3toIDM
	LD	HL,LWRD StoreID3toIDM
	CALL	LWRD ?BANK_CALL_DIRECT_L08
	POP	HL
	POP	HL
?0041:
; 145.	     file_num++;                     
	INC	IY
	JP	LWRD ?0025
?0024:
; 146.	  }   //while 循环                                              
; 147.	   g_file_total=file_num;                   //记录总的文件个数          
	LD	(g_file_total),IY
; 148.	   BankSwitch((unsigned long)SortStoreListToFile >> 16);  //将排序存文件部分切为主bank                 
	LD	E,BYTE3 SortStoreListToFile
	CALL	LWRD BankSwitch
; 149.	   if(file_num!=0)                                      //没有文件就不生成列表
	LD	A,IYL
	OR	IYH
	JR	Z,?0043
?0042:
; 150.	     SortStoreListToFile(start_pointer,file_num);          //按关键字排序并将排序后的列表写到列表文件   
	PUSH	IY
	POP	BC
	LD	E,(IX-20)
	LD	D,(IX-19)
	LD	A,BYTE3 SortStoreListToFile
	LD	HL,LWRD SortStoreListToFile
	CALL	LWRD ?BANK_CALL_DIRECT_L08
?0043:
; 151.	   if(DiskType =='C')                                //保存Flash 中列表文件的个数
	LD	A,(IX-24)
	CP	67
	PUSH	IY
	POP	HL
	JR	NZ,?0045
?0044:
; 152.	     file_total_flash = file_num;
	LD	(IX-16),L
	LD	(IX-15),H
; 153.	   else                                             
	JR	?0046
?0045:
; 154.	     file_total_card = file_num;                    //保存插卡中列表文件个数
	LD	(IX-18),L
	LD	(IX-17),H
?0046:
; 155.	           
; 156.	   if(DiskType =='C' && CardDiskState ==1)
	CP	67
	JR	NZ,?0048
	LD	B,(IX-23)
	DEC	B
	JR	NZ,?0048
?0050:
?0049:
?0047:
; 157.	   {   
; 158.	    file_num = 0;  
; 159.	    DiskType = 'H';       
; 160.	    start_pointer = (char *)IDMStartAddress;  //指针重新赋值 
	LD	(IX-20),B
	LD	(IX-19),64
	LD	IY,0
	LD	(IX-24),72
; 161.	    goto  BuildAnotherList;
	JP	LWRD ?0019
?0048:
; 162.	   } 
; 163.	   
; 164.	    VMRead(&g_music_list_val, VM_AP_MUSIC,sizeof(g_music_list_val)); //将播放列表数据写到VM
	LD	HL,95
	PUSH	HL
	LD	BC,4096
	LD	DE,g_music_list_val
	CALL	LWRD VMRead
	POP	HL
; 165.	    g_music_list_val.file_list_total_flash = file_total_flash;       
	LD	L,(IX-16)
	LD	H,(IX-15)
	LD	(g_music_list_val+86),HL
; 166.	    g_music_list_val.file_list_total_card = file_total_card;       
	LD	L,(IX-18)
	LD	H,(IX-17)
	LD	(g_music_list_val+88),HL
; 167.	    g_music_list_val.file_list_num = 0;                           //将原来播放序号清0               
	LD	HL,0
	LD	(g_music_list_val+90),HL
; 168.	    VMWrite(& g_music_list_val, VM_AP_MUSIC);       
	LD	BC,4096
	LD	DE,g_music_list_val
	CALL	LWRD VMWrite
; 169.	/* 
; 170.	   output8(0x00,IO00Bak);
; 171.	   delay1();
; 172.	   output8(0x70,IO00Bak);
; 173.	   delay1();     
; 174.	*/  
; 175.	   return  file_num;         
	PUSH	IY
	POP	HL
; 176.	}
?0051:
	LD	SP,IX
	POP	IX
	POP	IY
	POP	BC
	JP	LWRD ?BANK_FAST_LEAVE_L08
?0102:
	LD	DE,g_ID3InfoBuf
?0103:
	LD	A,BYTE3 unitochar
	LD	HL,LWRD unitochar
	JP	LWRD ?BANK_CALL_DIRECT_L08
StoreID3toIDM:
; 177.	
; 178.	//向IDM 存储ID3 信息
; 179.	void StoreID3toIDM( bool mode,unsigned int FileNum,file_location_t *location, int langid)
; 180.	{
	PUSH	IY
	PUSH	IX
	LD	IX,0
	ADD	IX,SP
	PUSH	BC
	PUSH	DE
	PUSH	AF
	PUSH	AF
	PUSH	AF
; 181.	      BYTE  IO05bak = input8(0x05); 
	IN	A,(5)
	LD	(IX-5),A
; 182.	      BYTE  NameNum;
; 183.	      char *IDMaddress = (char *)(FileNum*OneFileInfor+IDMStartAddress);   // IDM 中存储的起始地址       

⌨️ 快捷键说明

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