sort_store_list.s01

来自「炬力方案176*132软件源码,适用于AK1025」· S01 代码 · 共 575 行

S01
575
字号
	NAME	sort_store_list(17)
	RSEG	APC_LIST_FUN2(0)
	RSEG	CSTR(0)
	RSEG	APD_LIST_FUN2(0)
	EXTERN	FS_CD
	EXTERN	FS_FClose
	EXTERN	FS_FCreate
	EXTERN	FS_FWrite
	EXTERN	SetDspMips
	PUBLIC	SortStoreListToFile
	PUBLIC	StoreList
	PUBLIC	WriteVmData
	PUBLIC	WritrVMBuffer
	EXTERN	g_file_total
	EXTERN	list_sort
	EXTERN	?CLZ80B_4_04_L00
	EXTERN	?SS_DIV_L02
	EXTERN	?SS_MOD_L02
	EXTERN	?S_MUL_L02
	EXTERN	?C_S_SWITCH_L06
	EXTERN	?BANK_CALL_DIRECT_L08
	EXTERN	?BANK_FAST_LEAVE_L08
	EXTERN	?MEMSET_L11
	RSEG	APC_LIST_FUN2
WriteVmData:
; 1.	#include "musiclist.h"                 
; 2.	extern unsigned int g_file_total;  
; 3.	#pragma memory=dataseg(APD_LIST_FUN2)   
; 4.	char  WritrVMBuffer[512];      
; 5.	#pragma memory=default
; 6.	 
; 7.	#pragma codeseg(APC_LIST_FUN2)            
; 8.	
; 9.	void WriteVmData(char *DataAddress,int PageNum,handle listhandle,BYTE DataType)  
; 10.	{  
	PUSH	IY
	PUSH	IX
	LD	IX,0
	ADD	IX,SP
	PUSH	BC
	PUSH	DE
	LD	HL,65520
	ADD	HL,SP
	LD	SP,HL
; 11.	  unsigned int index_address;  
; 12.	  unsigned int file_counter = 0;
; 13.	  int i,j;         
; 14.	  int *page_address = (int *)DataAddress ;    
	LD	(IX-12),E
	LD	(IX-11),D
; 15.	  char *store_data =DataAddress+2; 
; 16.	  char *store_location=DataAddress;  
; 17.	  BYTE   IO05bak = input8(0x05);  
	IN	A,(5)
	LD	(IX-6),A
; 18.	  for(i=0;i<PageNum;i++)
	XOR	A
	LD	(IX-18),A
	LD	(IX-17),A
	LD	(IX-16),A
	LD	(IX-15),A
?0003:
	LD	C,(IX-2)
	LD	B,(IX-1)
	LD	L,(IX-16)
	LD	H,(IX-15)
	OR	128
	SBC	HL,BC
	JP	PO,?0044
	XOR	H
?0044:
	JP	P,?0002
?0004:
; 19.	   {
; 20.	    output8(REG4E_RTC_WATCH_DOG, input8(REG4E_RTC_WATCH_DOG) | 0x08);    
	IN	A,(78)
	SET	3,A
	OUT	(78),A
; 21.	    switch(DataType) 
	LD	E,(IX+10)
	CALL	LWRD ?C_S_SWITCH_L06
	DEFB	0
	DEFW	4
	DEFW	?0006
	DEFW	?0007
	DEFW	?0008
	DEFW	?0009
	DEFW	?0010
?0007:
; 22.	    {                                                                                                                                                                  
; 23.	     case 0:
; 24.	     output8(0x05,0x34);
	LD	A,52
	JR	?0049
; 25.	     break;
?0008:
; 26.	     case 1:
; 27.	     output8(0x05,0x35);
	LD	A,53
	JR	?0049
; 28.	     break;
?0009:
; 29.	     case 2:
; 30.	     output8(0x05,0x36);
	LD	A,54
	JR	?0049
; 31.	     break;     
?0010:
; 32.	     case 3:
; 33.	     output8(0x05,0xc0);
	LD	A,192
?0049:
	OUT	(5),A
; 34.	     break;
?0011:
; 35.	     default:
; 36.	     break;
?0006:
; 37.	    } 
; 38.	//    index_address = *page_address; 
; 39.	    for(j=0;j<Pagelist;j++)              //每个扇区存储7个文件信息
	LD	IY,0
?0013:
	LD	BC,32775
	PUSH	IY
	POP	HL
	LD	A,B
	XOR	H
	LD	H,A
	SBC	HL,BC
	JP	NC,?0012
?0014:
; 40.	    {
; 41.	       index_address = *page_address;
	LD	L,(IX-12)
	LD	H,(IX-11)
	LD	B,(HL)
	INC	HL
	LD	H,(HL)
	LD	L,B
	LD	(IX-20),L
	LD	(IX-19),H
; 42.	       store_data = (char *)(index_address*OneFileInfor+IDMStartAddress+2);
	ADD	HL,HL
	ADD	HL,HL
	ADD	HL,HL
	ADD	HL,HL
	ADD	HL,HL
	LD	BC,16386
	ADD	HL,BC
	LD	(IX-10),L
	LD	(IX-9),H
; 43.	       memcpy(&WritrVMBuffer[j*71],store_data,OneFileInfor-2);
	LD	DE,71
	PUSH	IY
	POP	BC
	CALL	LWRD ?S_MUL_L02
	LD	HL,WritrVMBuffer
	ADD	HL,DE
	EX	DE,HL
	LD	L,(IX-10)
	LD	H,(IX-9)
	LD	BC,30
	LDIR
; 44.	       page_address+=OneFileInfor/2;  //  page_address  为int 型指针 所以要除2
	LD	HL,8
	ADD	HL,SP
	LD	A,(HL)
	ADD	A,32
	LD	(HL),A
	INC	HL
	LD	A,(HL)
	ADC	A,0
	LD	(HL),A
; 45.	//     存location    
; 46.	       {
; 47.	        char BakIO05 = input8(0x05);
	IN	A,(5)
	LD	(IX-5),A
; 48.	        if(index_address<399) 
	LD	BC,399
	LD	L,(IX-20)
	LD	H,(IX-19)
	AND	A
	SBC	HL,BC
	JR	NC,?0017
?0016:
; 49.	        {        
; 50.	         output8(0x05,0xc1);                                                                            
	LD	A,193
	OUT	(5),A
; 51.	         store_location =(char *)DataAddress + index_address*OneLocationBYTE;                 
	LD	BC,41
	LD	E,(IX-20)
	LD	D,(IX-19)
	JR	?0050
; 52.	        }                                                                       
; 53.	        else
?0017:
; 54.	        {
; 55.	         output8(0x05,0xc2);
	LD	A,194
	OUT	(5),A
; 56.	         store_location =(char *)DataAddress + (index_address-399)*OneLocationBYTE;       
	LD	HL,65137
	LD	C,(IX-20)
	LD	B,(IX-19)
	ADD	HL,BC
	LD	C,L
	LD	B,H
	LD	DE,41
?0050:
	CALL	LWRD ?S_MUL_L02
	LD	L,(IX-4)
	LD	H,(IX-3)
	ADD	HL,DE
	LD	(IX-8),L
	LD	(IX-7),H
?0018:
; 57.	        }                                                                  
; 58.	       memcpy(&WritrVMBuffer[30+71*j],store_location,OneLocationBYTE);
	LD	HL,WritrVMBuffer+30
	LD	DE,71
	PUSH	IY
	POP	BC
	CALL	LWRD ?S_MUL_L02
	ADD	HL,DE
	EX	DE,HL
	LD	L,(IX-8)
	LD	H,(IX-7)
	LD	BC,41
	LDIR
; 59.	       output8(0x05,BakIO05); 
	LD	A,(IX-5)
	OUT	(5),A
; 60.	       }       
; 61.	      file_counter++;      
	INC	(IX-18)
	JR	NZ,?0045
	INC	(IX-17)
?0045:
; 62.	//////////////////////test      
; 63.	      if(file_counter==390)
	LD	HL,390
	LD	C,(IX-18)
	LD	B,(IX-17)
	AND	A
	SBC	HL,BC
	JR	NZ,?0020
?0019:
; 64.	        output8(REG4E_RTC_WATCH_DOG, input8(REG4E_RTC_WATCH_DOG) | 0x08);       
	IN	A,(78)
	SET	3,A
	OUT	(78),A
?0020:
; 65.	//////////////////////test              
; 66.	      if(file_counter>g_file_total)          //总的存储项
	LD	HL,(g_file_total)
	AND	A
	SBC	HL,BC
	JR	C,?0012
?0021:
; 67.	       break;
?0022:
	INC	IY
	JP	LWRD ?0013
?0012:
; 68.	    }                                     
; 69.	    output8(0x05,IO05bak);                    //05 端口恢复,否则可能和文件系统冲突
	LD	A,(IX-6)
	OUT	(5),A
; 70.	    output8(REG4E_RTC_WATCH_DOG, input8(REG4E_RTC_WATCH_DOG) | 0x08); 
	IN	A,(78)
	SET	3,A
	OUT	(78),A
; 71.	    FS_FWrite(WritrVMBuffer,1,listhandle);                                                            //
	LD	L,(IX+8)
	LD	H,(IX+9)
	PUSH	HL
	LD	C,1
	LD	DE,WritrVMBuffer
	CALL	LWRD FS_FWrite
	POP	HL
	INC	(IX-16)
	JP	NZ,?0003
	INC	(IX-15)
	JP	LWRD ?0003
?0002:
; 72.	  } 
; 73.	  FS_FClose(listhandle);                                   //写文件结束    
	LD	E,(IX+8)
	LD	D,(IX+9)
	CALL	LWRD FS_FClose
; 74.	}
?0064:
	LD	SP,IX
	POP	IX
	POP	IY
	JP	LWRD ?BANK_FAST_LEAVE_L08
StoreList:
; 75.	 
; 76.	void  StoreList(char *listaddress,int pagenum,char listtype)
; 77.	{
	PUSH	IY
	PUSH	IX
	PUSH	DE
	PUSH	BC
	POP	IY
; 78.	   handle TempFileHandle;
; 79.	   FS_CD(":");                               //回根目录创建列表文件
	LD	DE,?0023
	CALL	LWRD FS_CD
; 80.	   switch(listtype)
	LD	HL,10
	ADD	HL,SP
	LD	E,(HL)
	CALL	LWRD ?C_S_SWITCH_L06
	DEFB	0
	DEFW	4
	DEFW	?0040
	DEFW	?0025
	DEFW	?0029
	DEFW	?0033
	DEFW	?0037
?0025:
; 81.	   {
; 82.	   case 0: 
; 83.	   //FS_FRemove(TIT2FileName);    //删除原来列表                         
; 84.	   TempFileHandle = FS_FCreate(TIT2FileName);  
	LD	DE,?0026
	CALL	LWRD ?0065
; 85.	   if(TempFileHandle!=NULL)  
	JR	Z,?0040
?0027:
; 86.	   WriteVmData(listaddress,pagenum,TempFileHandle,0);        
	LD	C,0
	JR	?0057
?0028:
; 87.	   break;
?0029:
; 88.	   
; 89.	   case  1:                    //删除原来列表
; 90.	   //FS_FRemove(TPE1FileName);    //删除原来                       
; 91.	   TempFileHandle = FS_FCreate(TPE1FileName);  
	LD	DE,?0030
	CALL	LWRD ?0065
; 92.	   if(NULL!= TempFileHandle) 
	JR	Z,?0040
?0031:
; 93.	   WriteVmData(listaddress,pagenum,TempFileHandle,1);      
	LD	C,1
	JR	?0057
?0032:
; 94.	   break;
?0033:
; 95.	   
; 96.	   case 2:
; 97.	   //FS_FRemove(TALBFileName);    //删除原来列表                  
; 98.	   TempFileHandle = FS_FCreate(TALBFileName);  
	LD	DE,?0034
	CALL	LWRD ?0065
; 99.	   if(NULL!= TempFileHandle)  
	JR	Z,?0040
?0035:
; 100.	   WriteVmData(listaddress,pagenum,TempFileHandle,2);       
	LD	C,2
	JR	?0057
?0036:
; 101.	   break;
?0037:
; 102.	   
; 103.	   case 3:
; 104.	   //FS_FRemove(FILENAMELSIT);    //删除原来列表                         
; 105.	   TempFileHandle = FS_FCreate(FILENAMELSIT); 
	LD	DE,?0038
	CALL	LWRD ?0065
; 106.	   if(NULL!= TempFileHandle) 
	JR	Z,?0040
?0039:
; 107.	   WriteVmData(listaddress,pagenum,TempFileHandle,3);      
	LD	C,3
?0057:
	PUSH	BC
	PUSH	IX
	PUSH	IY
	POP	BC
	LD	HL,4
	ADD	HL,SP
	LD	E,(HL)
	INC	HL
	LD	D,(HL)
	LD	A,BYTE3 WriteVmData
	LD	HL,LWRD WriteVmData
	CALL	LWRD ?BANK_CALL_DIRECT_L08
	POP	HL
	POP	HL
?0040:
; 108.	   break;
?0041:
; 109.	   
; 110.	   default:
; 111.	   break;                      
?0024:
; 112.	   }    
; 113.	}
	POP	HL
	POP	IX
	POP	IY
	JP	LWRD ?BANK_FAST_LEAVE_L08
?0065:
	CALL	LWRD FS_FCreate
	PUSH	HL
	POP	IX
	LD	A,L
	OR	H
	RET
SortStoreListToFile:
; 114.	void SortStoreListToFile(char *liststart,int file_num)
; 115.	{
	PUSH	IY
	PUSH	IX
	LD	IX,0
	ADD	IX,SP
	PUSH	BC
	PUSH	AF
	PUSH	AF
	PUSH	DE
	POP	IY
; 116.	  char   IO05bak = input8(0x05);  
	IN	A,(5)
	LD	(IX-4),A
; 117.	  int  pagenum = file_num/Pagelist;  //VM 的每一页存储7个列表
	LD	BC,7
	LD	E,(IX-2)
	LD	D,(IX-1)
	CALL	LWRD ?SS_DIV_L02
	LD	(IX-6),E
	LD	(IX-5),D
; 118.	  if(file_num%Pagelist!=0)
	LD	E,(IX-2)
	LD	D,(IX-1)
	CALL	LWRD ?SS_MOD_L02
	LD	A,E
	OR	D
	JR	Z,?0063
?0042:
; 119.	    pagenum++; 
	INC	(IX-6)
	JR	NZ,?0063
	INC	(IX-5)
?0063:
?0043:
; 120.	  memset( &WritrVMBuffer[497],0,15);   
	LD	C,15
	LD	DE,WritrVMBuffer+497
	LD	L,B
	LD	H,B
	CALL	LWRD ?MEMSET_L11
; 121.	  output8(REG4E_RTC_WATCH_DOG, input8(REG4E_RTC_WATCH_DOG) | 0x08); 
	IN	A,(78)
	SET	3,A
	OUT	(78),A
; 122.	  output8(0x05,0x34);      //IDM LOW BYTE->TIT2
	LD	A,52
	OUT	(5),A
; 123.	  list_sort(liststart,file_num,OneFileInfor);    
	LD	L,32
	PUSH	HL
	CALL	LWRD ?0066
	POP	HL
; 124.	  output8(0x05,IO05bak); 
	LD	A,(IX-4)
	OUT	(5),A
; 125.	  StoreList(liststart,pagenum,0);   
	LD	C,0
	PUSH	BC
	CALL	LWRD ?0067
	POP	HL
; 126.	  
; 127.	  output8(0x05,0x35);
	LD	A,53
	OUT	(5),A
; 128.	  list_sort(liststart,file_num,OneFileInfor); 
	LD	HL,32
	PUSH	HL
	CALL	LWRD ?0066
	POP	HL
; 129.	  output8(0x05,IO05bak);  
	LD	A,(IX-4)
	OUT	(5),A
; 130.	  StoreList(liststart,pagenum,1);  
	LD	C,1
	PUSH	BC
	CALL	LWRD ?0067
	POP	HL
; 131.	   
; 132.	  output8(0x05,0x36);
	LD	A,54
	OUT	(5),A
; 133.	  list_sort(liststart,file_num,OneFileInfor);   
	LD	HL,32
	PUSH	HL
	CALL	LWRD ?0066
	POP	HL
; 134.	  output8(0x05,IO05bak);     
	LD	A,(IX-4)
	OUT	(5),A
; 135.	  StoreList(liststart,pagenum,2);  
	LD	C,2
	PUSH	BC
	CALL	LWRD ?0067
	POP	HL
; 136.	   
; 137.	  output8(0x05,0xc0);
	LD	A,192
	OUT	(5),A
; 138.	  list_sort(liststart,file_num,OneFileInfor);  
	LD	HL,32
	PUSH	HL
	CALL	LWRD ?0066
	POP	HL
; 139.	  output8(0x05,IO05bak);     
	LD	A,(IX-4)
	OUT	(5),A
; 140.	  StoreList(liststart,pagenum,3);   
	LD	C,3
	PUSH	BC
	CALL	LWRD ?0067
	POP	HL
; 141.	}   
	JP	LWRD ?0064
?0066:
	LD	C,(IX-2)
	LD	B,(IX-1)
	PUSH	IY
	POP	DE
	LD	A,BYTE3 list_sort
	LD	HL,LWRD list_sort
	JP	LWRD ?BANK_CALL_DIRECT_L08
?0067:
	LD	C,(IX-6)
	LD	B,(IX-5)
	PUSH	IY
	POP	DE
	LD	A,BYTE3 StoreList
	LD	HL,LWRD StoreList
	JP	LWRD ?BANK_CALL_DIRECT_L08
; 142.	
; 143.	
; 144.	
; 145.	
; 146.	
; 147.	 
; 148.	
	RSEG	CSTR
?0023:
	DEFB	':'
	DEFB	0
?0026:
	DEFB	'TIT2    BIN'
	DEFB	0
?0030:
	DEFB	'TPE1    BIN'
	DEFB	0
?0034:
	DEFB	'TALB    BIN'
	DEFB	0
?0038:
	DEFB	'FILENAMEBIN'
	DEFB	0
	RSEG	APD_LIST_FUN2
WritrVMBuffer:
	DEFS	512
	END

⌨️ 快捷键说明

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