📄 ui_userlist.s01
字号:
NAME ui_userlist(17)
RSEG AP_UI_PLAYLIST(0)
RSEG CSTR(0)
RSEG APD_UI_PLAYLIST(0)
EXTERN FS_CD
EXTERN FS_FClose
EXTERN FS_FOpen
EXTERN FS_FRead
EXTERN FS_FSeek
EXTERN FirstOffset
EXTERN LastOffset
PUBLIC Open_view
EXTERN PlaylistCount
PUBLIC Process_onePage
EXTERN ScrollFlag
EXTERN WrHead_PL
EXTERN ap_get_message
EXTERN ap_handle_hotkey
PUBLIC disbuff
PUBLIC fpview
EXTERN g_music_vars
PUBLIC ui_Read_Data
PUBLIC ui_userplaylist
EXTERN ui_viewlist
EXTERN user_pl_del
PUBLIC vFirstOffset
PUBLIC vLastOffset
PUBLIC vTotal
PUBLIC vbuff
PUBLIC vfilename
PUBLIC vsave_offset
EXTERN ?CLZ80B_4_04_L00
EXTERN ?UC_MOD_L01
EXTERN ?S_LSH_L02
EXTERN ?US_MOD_L02
EXTERN ?S_MUL_L02
EXTERN ?C_V_SWITCH_L06
EXTERN ?BANK_CALL_DIRECT_L08
EXTERN ?BANK_LEAVE_DIRECT_L08
EXTERN ?BANK_FAST_LEAVE_L08
EXTERN ?ENT_AUTO_DIRECT_L09
EXTERN ?MEMSET_L11
EXTERN ?MEMCMP_L11
RSEG AP_UI_PLAYLIST
Open_view:
; 1. #include "ap_music.h"
; 2. extern void ui_viewlist(char old_active,char new_active,char num,char type,bool scroll_flag);
; 3. extern BOOL Clear_PL(void);
; 4. extern char ScrollFlag; //滚动标志位
; 5. #pragma memory=dataseg(APD_UI_PLAYLIST)
; 6. char vbuff[512];
; 7. char disbuff[MENU_GROUP*30];
; 8. char vfilename[12];
; 9. handle fpview;
; 10. WORD vFirstOffset;
; 11. WORD vLastOffset;
; 12. WORD vTotal;
; 13. WORD vsave_offset;
; 14. #pragma memory=default
; 15. #pragma codeseg(AP_UI_PLAYLIST)
; 16. BOOL Open_view()
; 17. {
CALL LWRD ?ENT_AUTO_DIRECT_L09
DEFW 65534
; 18. char IO27;
; 19. // char Backbuf[32];
; 20. IO27 = input8(0x27);
IN A,(39)
LD (IX-2),A
; 21. memset(vfilename,0x20,12);
LD BC,12
LD DE,vfilename
LD HL,32
CALL LWRD ?MEMSET_L11
; 22. vfilename[0]='U';
LD A,85
LD (vfilename),A
; 23. vfilename[1]='S';
LD A,83
LD (vfilename+1),A
; 24. vfilename[2]='E';
LD A,69
LD (vfilename+2),A
; 25. vfilename[3]='R';
LD A,82
LD (vfilename+3),A
; 26. vfilename[4]='P';
LD A,80
LD (vfilename+4),A
; 27. vfilename[5]='L';
LD A,76
LD (vfilename+5),A
; 28. vfilename[8]='P';
LD A,80
LD (vfilename+8),A
; 29. vfilename[9]='L';
LD A,76
LD (vfilename+9),A
; 30. vfilename[11]=0;
XOR A
LD (vfilename+11),A
; 31.
; 32.
; 33. // if(FS_Init())
; 34. // {
; 35. output8(0x27,00);
OUT (39),A
; 36. // FS_Backup(Backbuf,FS_BACKUP_DIRINFO,0);//目录项备份
; 37. FS_CD(FS_CD_ROOT);
LD DE,?0002
CALL LWRD FS_CD
; 38. fpview=FS_FOpen(vfilename,0);
LD C,0
LD DE,vfilename
CALL LWRD FS_FOpen
LD (fpview),HL
; 39. if(fpview == NULL)
LD A,L
OR H
JR Z,?0011
?0003:
; 40. {
; 41. // FS_Restore(Backbuf,FS_RESTORE_DIRINFO,0);//目录项恢复
; 42. output8(0x27,IO27);
; 43. return FALSE;
; 44. }
?0004:
; 45.
; 46. if(FS_FRead(vbuff,1,fpview))
PUSH HL
LD C,1
LD DE,vbuff
CALL LWRD FS_FRead
POP HL
OR A
JR Z,?0011
?0005:
; 47. {
; 48. if(memcmp(vbuff,vfilename,6)==0)
LD BC,6
LD DE,vbuff
LD HL,vfilename
CALL LWRD ?MEMCMP_L11
LD A,L
OR H
JR NZ,?0011
?0007:
; 49. {
; 50. memcpy(&vFirstOffset,vbuff+6,2);
LD C,2
LD DE,vFirstOffset
LD HL,vbuff+6
LDIR
; 51. memcpy(&vLastOffset,vbuff+6+2,2);
INC BC
INC BC
LD DE,vLastOffset
LD HL,vbuff+8
LDIR
; 52. memcpy(&vTotal,vbuff+6+2+2,2);
INC BC
INC BC
LD DE,vTotal
LD HL,vbuff+10
LDIR
; 53. if(vTotal == 0)
LD HL,(vTotal)
LD A,L
OR H
JR NZ,?0010
?0009:
; 54. {
; 55. FS_FClose(fpview);
LD DE,(fpview)
CALL LWRD FS_FClose
; 56. }
; 57. else
JR ?0011
?0010:
; 58. {
; 59. // FS_Restore(Backbuf,FS_RESTORE_DIRINFO,0);//目录项恢复
; 60. output8(0x27,IO27);
LD A,(IX-2)
OUT (39),A
; 61. return TRUE;
LD L,1
; 62. }
JR ?0012
?0011:
?0008:
?0006:
; 63. }
; 64. }
; 65. // }
; 66. //FS_Restore(Backbuf,FS_RESTORE_DIRINFO,0);//目录项恢复
; 67. output8(0x27,IO27);
LD A,(IX-2)
OUT (39),A
; 68. return FALSE;
LD L,0
; 69.
; 70. }
?0012:
JP LWRD ?BANK_LEAVE_DIRECT_L08
ui_Read_Data:
; 71.
; 72. BOOL ui_Read_Data(WORD offset)
; 73. {
PUSH BC
PUSH IX
PUSH AF
PUSH DE
POP IX
; 74. char IO27;
; 75. IO27 = input8(0x27);
IN A,(39)
LD HL,0
ADD HL,SP
LD (HL),A
; 76. output8(0x27,00);
XOR A
OUT (39),A
; 77.
; 78. if(vsave_offset==0xffff)
LD HL,(vsave_offset)
LD A,L
AND H
INC A
JR Z,?0099
?0013:
; 79. {
; 80. vsave_offset = offset/4;
; 81. }
; 82. else
?0014:
; 83. {
; 84. if(vsave_offset!=(offset/4))
PUSH IX
POP HL
SRL H
RR L
SRL H
RR L
LD BC,(vsave_offset)
AND A
SBC HL,BC
JR Z,?0100
?0016:
; 85. {
; 86.
; 87. vsave_offset = offset/4;
?0099:
PUSH IX
POP HL
SRL H
RR L
SRL H
RR L
LD (vsave_offset),HL
; 88. }
; 89. else
?0017:
; 90. {
; 91. output8(0x27,IO27);
; 92. return TRUE;
; 93. }
?0018:
?0015:
; 94. }
; 95. if(FS_FSeek(1+offset/4,FS_SEEK_FFROMSTART,fpview))
LD HL,(fpview)
PUSH HL
LD C,0
PUSH BC
SRL D
RR E
SRL D
RR E
INC DE
LD B,C
CALL LWRD FS_FSeek
POP HL
POP HL
OR A
JR Z,?0020
?0019:
; 96. {
; 97. FS_FRead(vbuff,1,fpview);
LD HL,(fpview)
PUSH HL
LD C,1
LD DE,vbuff
CALL LWRD FS_FRead
POP HL
; 98. output8(0x27,IO27);
?0100:
LD HL,0
ADD HL,SP
LD A,(HL)
OUT (39),A
; 99. return TRUE;
LD L,1
; 100. }
JR ?0021
?0020:
; 101. else
; 102. {
; 103. output8(0x27,IO27);
LD L,A
LD H,A
ADD HL,SP
LD A,(HL)
OUT (39),A
; 104. return FALSE;
LD L,0
; 105. }
?0021:
POP AF
POP IX
POP BC
JP LWRD ?BANK_FAST_LEAVE_L08
; 106. }
Process_onePage:
; 107.
; 108. void Process_onePage(WORD *offset,char direct,char last_one)
; 109. {
CALL LWRD ?ENT_AUTO_DIRECT_L09
DEFW -2
PUSH IY
; 110. WORD temp;
; 111. char i;
; 112. ui_Read_Data(*offset);
CALL LWRD ?0109
; 113. if(direct==0)
INC C
DEC C
JR NZ,?0023
?0022:
; 114. i=0;
LD (IX-2),C
; 115. else
JR ?0027
?0023:
; 116. {
; 117. if(last_one==0)
XOR A
OR (IX+10)
JR NZ,?0026
?0025:
; 118. i=MENU_GROUP-1;
LD (IX-2),5
; 119. else
JR ?0027
?0026:
; 120. i=last_one-1;
ADD A,255
LD (IX-2),A
?0027:
?0024:
?0029:
; 121. }
; 122. while(1)
; 123. {
; 124. temp = (*offset%4)*USER_PLAYLIST_SIZE;
LD L,(IX+2)
LD H,(IX+3)
LD A,(HL)
AND 3
LD L,A
LD H,0
EX DE,HL
LD B,7
CALL LWRD ?S_LSH_L02
PUSH DE
POP IY
; 125. memcpy(disbuff+i*30,vbuff+temp+43,25);
LD BC,25
LD E,(IX-2)
LD D,B
LD C,30
CALL LWRD ?S_MUL_L02
LD HL,disbuff
ADD HL,DE
EX DE,HL
LD HL,vbuff+43
PUSH IY
POP BC
ADD HL,BC
LD BC,25
LDIR
; 126. memcpy(disbuff+i*30+26,vbuff+temp+39,4);
LD HL,disbuff+26
LD E,(IX-2)
LD D,B
LD C,30
CALL LWRD ?S_MUL_L02
ADD HL,DE
EX DE,HL
LD HL,vbuff+39
PUSH IY
POP BC
ADD HL,BC
LD BC,4
LDIR
; 127. if(direct==0)
XOR A
OR (IX+4)
LD L,(IX+2)
LD H,(IX+3)
LD B,(HL)
INC HL
LD H,(HL)
LD L,B
JR NZ,?0032
?0031:
; 128. {
; 129. if(*offset!=vLastOffset)
LD BC,(vLastOffset)
SBC HL,BC
JR Z,?0028
?0033:
; 130. memcpy(offset,vbuff+temp+41,2);
LD E,(IX+2)
LD D,(IX+3)
LD HL,vbuff+41
PUSH IY
POP BC
ADD HL,BC
LD BC,2
LDIR
; 131. else
?0034:
; 132. break;
?0035:
; 133. i++;
INC (IX-2)
; 134.
; 135. }
; 136. else
JR ?0036
?0032:
; 137. {
; 138. if(*offset!=vFirstOffset)
LD BC,(vFirstOffset)
SBC HL,BC
JR Z,?0028
?0037:
; 139. memcpy(offset,vbuff+temp+39,2);
LD E,(IX+2)
LD D,(IX+3)
LD HL,vbuff+39
PUSH IY
POP BC
ADD HL,BC
LD BC,2
LDIR
; 140. else
?0038:
; 141. break;
?0039:
; 142. i--;
DEC (IX-2)
?0036:
; 143. }
; 144. if(i>=MENU_GROUP)
LD A,(IX-2)
CP 6
JR NC,?0028
?0040:
; 145. break;
?0041:
; 146. if(i<0)
?0042:
; 147. break;
?0043:
; 148. ui_Read_Data(*offset);
CALL LWRD ?0109
; 149. }
; 150. }
JP LWRD ?0027
?0028:
POP IY
JP LWRD ?BANK_LEAVE_DIRECT_L08
?0109:
LD L,(IX+2)
LD H,(IX+3)
LD E,(HL)
INC HL
LD D,(HL)
LD A,BYTE3 ui_Read_Data
LD HL,LWRD ui_Read_Data
JP LWRD ?BANK_CALL_DIRECT_L08
ui_userplaylist:
; 151.
; 152. int ui_userplaylist(file_location_t *location,char type)
; 153. {
CALL LWRD ?ENT_AUTO_DIRECT_L09
DEFW -12
PUSH IY
; 154. char old_active,new_active;
; 155. char key;
; 156. WORD g_list_count;
; 157. BOOL need_read=TRUE;
; 158. BOOL need_draw=TRUE;
; 159. char direct=0;
; 160. char list_num;
; 161. char last_list =0;
; 162. WORD CurOffset;
; 163. char IO27 = input8(0x27);
IN A,(39)
LD (IX-9),A
; 164. vsave_offset = 0xFFFF;
LD HL,65535
LD (vsave_offset),HL
; 165. if(!Open_view())
LD (IX-7),1
LD (IX-11),1
LD (IX-5),0
LD (IX-2),0
LD A,BYTE3 Open_view
LD HL,LWRD Open_view
CALL LWRD ?BANK_CALL_DIRECT_L08
INC L
DEC L
JP Z,?0104
?0044:
; 166. return RESULT_IGNORE;
?0045:
; 167. CurOffset = vFirstOffset;
LD HL,(vFirstOffset)
LD (IX-4),L
LD (IX-3),H
; 168. new_active=0;
; 169. old_active = 0;
; 170. g_list_count = 0;
; 171. //Process_onePage(&CurOffset,0);
; 172. list_num =vTotal-g_list_count;
LD A,(vTotal)
LD (IX-8),A
LD (IX-12),0
LD (IX-10),0
LD IY,0
?0047:
; 173.
; 174. while(1)
; 175. {
; 176. if(need_read)
XOR A
OR (IX-7)
JR Z,?0050
?0049:
; 177. {
; 178. Process_onePage(&CurOffset,direct,last_list);
LD L,(IX-2)
PUSH HL
LD C,(IX-5)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -