music_list_menu.s01

来自「炬力方案176*132软件源码,适用于AK1025」· S01 代码 · 共 1,080 行 · 第 1/2 页

S01
1,080
字号
	LD	C,22
	PUSH	BC
	LD	BC,(g_comval+12)
	LD	DE,(HeadIDDisplay)
	LD	A,BYTE3 ResShowMultiString
	LD	HL,LWRD ResShowMultiString
	CALL	LWRD ?BANK_CALL_DIRECT_L08
	POP	AF
	POP	AF
; 123.	        ResShowPic(DHT,194,8);    
	LD	C,8
	PUSH	BC
	LD	C,194
	LD	DE,38
	CALL	LWRD ?0088
	POP	AF
; 124.	        
; 125.	        for(i=0;i<=last_list;i++)
	LD	(IX-8),0
?0023:
	LD	A,(IX-3)
	CP	(IX-8)
	JP	C,?0022
?0024:
; 126.	        {          
; 127.	           buf_num = (top_list+i)% OneSectorListNum;            
	LD	C,(IX-8)
	LD	B,0
	PUSH	IY
	POP	HL
	ADD	HL,BC
	EX	DE,HL
	LD	C,7
	CALL	LWRD ?US_MOD_L02
	LD	(IX-2),E
; 128.	           if(buf_num ==0)                                    //如果是数据页尾就要换页
	INC	E
	DEC	E
	JR	NZ,?0027
?0026:
; 129.	           {
; 130.	             ReadOneSectorData(top_list+i);
	LD	C,(IX-8)
	PUSH	IY
	POP	HL
	CALL	LWRD ?0079
?0027:
; 131.	           }           
; 132.	           if((top_list+i)==active)    
	LD	C,(IX-8)
	PUSH	IY
	POP	HL
	ADD	HL,BC
	LD	C,(IX+2)
	LD	B,(IX+3)
	AND	A
	SBC	HL,BC
	JR	Z,?0032
?0028:
; 133.	            {                                                    
; 134.	              continue;                  
?0029:
; 135.	            } 
; 136.	           ResShowPic(MFILE,explorer_pic_x_def,menu_pos_list[i]-1);                                   
	LD	C,(IX-8)
	LD	B,0
	LD	HL,menu_pos_list
	ADD	HL,BC
	LD	A,(HL)
	ADD	A,255
	LD	C,A
	PUSH	BC
	CALL	LWRD ?0087
	POP	AF
; 137.	           if(ReadListBuffer[buf_num*ListPerByte]!=0) 
	LD	C,(IX-2)
	CALL	LWRD ?0085
	JR	Z,?0031
?0030:
; 138.	           {
; 139.	            region_scroll.y = menu_pos_list[i]-2;
	LD	C,(IX-8)
	LD	HL,menu_pos_list
	ADD	HL,BC
	LD	A,(HL)
	ADD	A,254
	LD	(region_scroll+1),A
; 140.	            ScrollString(&ReadListBuffer[buf_num*ListPerByte],TRUE,g_comval.langid,&region_scroll);   //滚动第一屏              
	LD	HL,region_scroll
	PUSH	HL
	LD	HL,g_comval+12
	LD	C,(HL)
	PUSH	BC
	LD	C,1
	PUSH	BC
	CALL	LWRD ?0082
	POP	BC
	CALL	LWRD ?BANK_CALL_DIRECT_L08
	POP	HL
	POP	HL
; 141.	           }
; 142.	           else
	JR	?0032
?0031:
; 143.	           {
; 144.	             ScrollFlag = 0;            
	LD	(ScrollFlag),A
; 145.	             memcpy(BlankInfor,BLANKSTRING,4);
; 146.	             memcpy(&BlankInfor[4],&ReadListBuffer[buf_num*ListPerByte+56],12);  //取短名       
	CALL	LWRD ?0084
; 147.	             SetTextPos(explorer_str_x_def, menu_pos_list[i]-2);               
	LD	C,(IX-8)
	CALL	LWRD ?0090
; 148.	             PutS(BlankInfor,-1);    
?0032:
?0025:
	INC	(IX-8)
	JP	LWRD ?0023
?0022:
; 149.	           }                                                 
; 150.	        } //for   
; 151.	        show_active_musiclist(active);                                   
	LD	E,(IX+2)
	LD	D,(IX+3)
	LD	A,BYTE3 show_active_musiclist
	LD	HL,LWRD show_active_musiclist
	CALL	LWRD ?BANK_CALL_DIRECT_L08
?0018:
?0012:
; 152.	     }  //active==old_list else   
; 153.	   }    // scroll_flag else       
; 154.	}
	POP	IY
	JP	LWRD ?BANK_LEAVE_DIRECT_L08
?0091:
	CALL	LWRD ?US_DIV_L02
	EX	DE,HL
	ADD	HL,HL
	LD	C,L
	LD	B,H
	ADD	HL,HL
	ADD	HL,BC
	RET
?0092:
	LD	BC,7
	LD	E,(IX+2)
	LD	D,(IX+3)
	JP	LWRD ?US_DIV_L02
show_music_list:
; 155.	
; 156.	int show_music_list(char list_type,const WORD headid)  
; 157.	{
	CALL	LWRD ?ENT_AUTO_DIRECT_L09
	DEFW	-8
	PUSH	IY
; 158.	  int result = RESULT_LIST;           //初始化为列表消息
; 159.	  char key;
; 160.	  bool need_draw;
; 161.	  unsigned int  active_list; //求余
; 162.	  unsigned int  old_list;   
; 163.	  BYTE  IO27Bak = input8(0x27);
	IN	A,(39)
	LD	(IX-2),A
; 164.	  HeadIDDisplay = headid;
	LD	(HeadIDDisplay),BC
; 165.	  if(list_type==g_music_vars.file_list_type)
	LD	(IX-6),105
	LD	(IX-5),0
	LD	A,(g_music_vars+92)
	LD	B,A
	LD	A,(IX+2)
	CP	B
	JR	NZ,?0034
?0033:
; 166.	  {
; 167.	   active_list = g_music_vars.file_list_num;
	LD	IY,(g_music_vars+90)
; 168.	  }                                            
; 169.	  else                                    //从第一个列表文从第一个文件开始显示
	JR	?0035
?0034:
; 170.	  {
; 171.	   active_list = 0; 
	LD	IY,0
?0035:
; 172.	  }   
; 173.	  need_draw =1;    
; 174.	 // if((active_list%(OneSectorListNum*ListDisplayNum))!=0)    
; 175.	   ReadOneSectorData((active_list/ListDisplayNum)*ListDisplayNum); //先预读一页数据
	LD	BC,6
	CALL	LWRD ?0080
	LD	(IX-8),1
?0037:
; 176.	  while(1)
; 177.	  {
; 178.	
; 179.	    if(need_draw)       //显示全屏
	XOR	A
	OR	(IX-8)
	JR	Z,?0040
?0039:
; 180.	     {
; 181.	       ui_music_list(active_list,active_list,0); //显示最后一页列表       
	LD	C,0
	PUSH	BC
	PUSH	IY
	POP	BC
	CALL	LWRD ?0093
	POP	HL
; 182.	       need_draw = FALSE;               
	LD	(IX-8),0
?0040:
; 183.	     }
; 184.	    key = ap_get_message(); 
	CALL	LWRD ap_get_message
; 185.	    old_list = active_list; 
	PUSH	IY
	POP	HL
	LD	(IX-4),L
	LD	(IX-3),H
; 186.	    switch( key)  
	LD	E,A
	CALL	LWRD ?C_V_SWITCH_L06
	DEFW	8
	DEFB	5
	DEFB	6
	DEFB	30
	DEFB	33
	DEFB	48
	DEFB	69
	DEFB	70
	DEFB	144
	DEFW	?0060
	DEFW	?0058
	DEFW	?0042
	DEFW	?0048
	DEFW	?0058
	DEFW	?0059
	DEFW	?0059
	DEFW	?0042
	DEFW	?0048
?0042:
; 187.	    {    
; 188.	         case AP_KEY_NEXT:
; 189.	         case AP_KEY_NEXT | AP_KEY_HOLD:                    
; 190.	          if(active_list < g_file_list_total-1)
	LD	HL,65535
	LD	BC,(g_file_list_total)
	ADD	HL,BC
	LD	C,L
	LD	B,H
	PUSH	IY
	POP	HL
	AND	A
	SBC	HL,BC
	JR	NC,?0044
?0043:
; 191.	           {              
; 192.	              active_list++;
; 193.	              if(active_list%ListDisplayNum==0)     //读下一屏列表文件
	LD	BC,6
	INC	IY
	PUSH	IY
	POP	DE
	CALL	LWRD ?US_MOD_L02
	LD	A,E
	OR	D
	JR	Z,?0052
?0045:
; 194.	              {
; 195.	                  need_draw = 1;
; 196.	                  break; 
?0046:
; 197.	              }  
; 198.	//              top_list = active_list/ListDisplayNum)*ListDisplayNum;  //计算列表头
; 199.	              ui_music_list(active_list,old_list,0);              
	LD	C,B
	PUSH	BC
	CALL	LWRD ?0094
	POP	HL
; 200.	            }        
; 201.	           else                 //到列表尾,回到列表头
	JR	?0047
?0044:
; 202.	           {           
; 203.	               active_list = 0;
; 204.	               need_draw = 1;
	LD	IY,0
	LD	(IX-8),1
?0047:
; 205.	           }    
; 206.	          break;
	JP	LWRD ?0067
?0048:
; 207.	                    
; 208.	          case AP_KEY_PREV:
; 209.	          case AP_KEY_PREV | AP_KEY_HOLD:
; 210.	            if(active_list==0)
	LD	A,L
	OR	H
	JR	NZ,?0050
?0049:
; 211.	             {                         
; 212.	              active_list = g_file_list_total-1;  //选中最后一项
	LD	HL,65535
	LD	BC,(g_file_list_total)
	ADD	HL,BC
	PUSH	HL
	POP	IY
; 213.	              if(active_list/OneSectorListNum>0)
	LD	BC,7
	EX	DE,HL
	CALL	LWRD ?US_DIV_L02
	LD	A,E
	OR	D
	JR	Z,?0056
?0051:
; 214.	               ReadOneSectorData((active_list/ListDisplayNum)*ListDisplayNum);
	CALL	LWRD ?0081
?0052:
; 215.	              need_draw = 1;    
	JR	?0056
; 216.	              break;             
?0050:
; 217.	             } 
; 218.	            else
; 219.	            {                         
; 220.	             if((active_list%ListDisplayNum)==0)   //是否显示上一屏
	LD	BC,6
	PUSH	IY
	POP	DE
	CALL	LWRD ?US_MOD_L02
	LD	A,E
	OR	D
	JR	NZ,?0054
?0053:
; 221.	             { 
; 222.	              LastSeekNum = (active_list)/OneSectorListNum;
	INC	BC
	PUSH	IY
	POP	DE
	CALL	LWRD ?US_DIV_L02
	LD	(LastSeekNum),DE
; 223.	              active_list--;  
; 224.	              ActiveSeekNum =((active_list/ListDisplayNum)*ListDisplayNum)/OneSectorListNum ;  
	DEC	BC
	DEC	IY
	PUSH	IY
	POP	DE
	CALL	LWRD ?0091
	EX	DE,HL
	LD	BC,7
	CALL	LWRD ?US_DIV_L02
	LD	(ActiveSeekNum),DE
; 225.	              if(ActiveSeekNum!=LastSeekNum)   
	LD	HL,(LastSeekNum)
	AND	A
	SBC	HL,DE
	JR	Z,?0056
?0055:
; 226.	               ReadOneSectorData((active_list/ListDisplayNum)*ListDisplayNum); 
	CALL	LWRD ?0081
?0056:
; 227.	              need_draw = 1; 
	LD	(IX-8),1
; 228.	              break;   
	JR	?0067
?0054:
; 229.	             }   
; 230.	             active_list--;  
; 231.	             ui_music_list(active_list,old_list,0);                                  
	LD	C,B
	DEC	IY
	JR	?0074
; 232.	            }    
; 233.	            break;
?0057:
; 234.	                
; 235.	          case AP_KEY_PLAY | AP_KEY_UP:    //取消退出
; 236.	            result = RESULT_IGNORE;   
; 237.	            break;
?0058:
; 238.	                                  
; 239.	          case AP_KEY_MODE | AP_KEY_UP:    //确认退出
; 240.	          case AP_KEY_MODE | AP_KEY_LONG:    //确认退出      
; 241.	          memcpy(&g_music_vars.location, &active_location,OneLocationBYTE);  
	LD	BC,41
	LD	DE,g_music_vars+7
	LD	HL,active_location
	LDIR
; 242.	          g_music_vars.file_list_num = active_list;          //记录当前列表序号 
	LD	(g_music_vars+90),IY
; 243.	          result = 0;
	XOR	A
	LD	(IX-6),A
	LD	(IX-5),A
; 244.	            break;
	JR	?0067
?0059:
; 245.	                           
; 246.	          case AP_MSG_WAIT_TIMEOUT:
; 247.	            result = RESULT_IGNORE;   
	LD	(IX-6),52
	LD	(IX-5),0
; 248.	            break;
	JR	?0067
?0060:
; 249.	                               
; 250.	          default:
; 251.	             key = ap_handle_hotkey(key);
	CALL	LWRD ap_handle_hotkey
	LD	(IX-7),A
; 252.	             if(key == RESULT_REDRAW) 
	CP	50
	JR	NZ,?0062
?0061:
; 253.	               need_draw = TRUE;
	LD	(IX-8),1
; 254.	             else 
	JR	?0065
?0062:
; 255.	              if(key != 0)
	XOR	A
	OR	(IX-7)
	JR	Z,?0065
?0064:
; 256.	              {
; 257.	                result = key;
	LD	(IX-6),A
	LD	B,0
	LD	(IX-5),B
?0065:
?0063:
; 258.	              }    
; 259.	            if(ScrollFlag)
	LD	A,(ScrollFlag)
	OR	A
	JR	Z,?0067
?0066:
; 260.	              ui_music_list(active_list,old_list,1);         //滚动屏幕                         
	LD	C,1
?0074:
	PUSH	BC
	CALL	LWRD ?0094
	POP	HL
?0067:
?0041:
; 261.	        }    //switch
; 262.	   
; 263.	   if(result!=RESULT_LIST) 
	LD	A,105
	XOR	(IX-6)
	OR	(IX-5)
	JR	Z,?0069
?0068:
; 264.	    {
; 265.	     output8(0x27,IO27Bak&0xfe);     
	LD	B,(IX-2)
	RES	0,B
	LD	A,B
	OUT	(39),A
; 266.	     FS_FClose(list_fp); 
	LD	DE,(list_fp)
	CALL	LWRD FS_FClose
; 267.	     output8(0x27,IO27Bak);     
	LD	A,(IX-2)
	OUT	(39),A
; 268.	     return result;        
	LD	L,(IX-6)
	LD	H,(IX-5)
; 269.	    }   
	POP	IY
	JP	LWRD ?BANK_LEAVE_DIRECT_L08
?0069:
; 270.	 }      //while    
; 271.	}  
	JP	LWRD ?0037
?0094:
	LD	C,(IX-4)
	LD	B,(IX-3)
?0093:
	PUSH	IY
	POP	DE
	LD	A,BYTE3 ui_music_list
	LD	HL,LWRD ui_music_list
	JP	LWRD ?BANK_CALL_DIRECT_L08
ReadOneSectorData:
; 272.	
; 273.	void ReadOneSectorData(unsigned int currentlist)
; 274.	{
	CALL	LWRD ?ENT_AUTO_DIRECT_L09
	DEFW	-2
	PUSH	IY
; 275.	  BYTE BAKIO27 = input8(0x27); 
	IN	A,(39)
	LD	(IX-2),A
; 276.	  unsigned int CurrentSeekNum = currentlist/OneSectorListNum;    
	CALL	LWRD ?0092
; 277.	  output8(0x27,BAKIO27&0xfe);        //关dsp中断,防止内存页冲突      
	RES	0,A
	OUT	(39),A
; 278.	  FS_FSeek((long)CurrentSeekNum, SEEK_SET, list_fp);         
	LD	HL,(list_fp)
	PUSH	HL
	LD	C,B
	PUSH	BC
	CALL	LWRD FS_FSeek
	POP	HL
	POP	HL
; 279.	  FS_FRead(ReadListBuffer,1,list_fp);            
	LD	HL,(list_fp)
	PUSH	HL
	LD	C,1
	LD	DE,ReadListBuffer
	CALL	LWRD FS_FRead
	POP	HL
; 280.	  output8(0x27,BAKIO27);  
	LD	A,(IX-2)
	OUT	(39),A
; 281.	}
	POP	IY
	JP	LWRD ?BANK_LEAVE_DIRECT_L08
	RSEG	APC_MUSIC_LIST
BLANKSTRING:
	DEFB	'[]--'
	RSEG	APD_MUSIC_LIST
ReadListBuffer:
	DEFS	512
active_location:
	DEFS	43
BlankInfor:
	DEFS	16
ActiveSeekNum:
	DEFS	2
LastSeekNum:
	DEFS	2
HeadIDDisplay:
	DEFS	2
	END

⌨️ 快捷键说明

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