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,®ion_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 + -
显示快捷键?