userlist_add.s01
来自「炬力方案176*132软件源码,适用于AK1025」· S01 代码 · 共 906 行 · 第 1/2 页
S01
906 行
NAME userlist_add(17)
RSEG APC_USERPL(0)
RSEG CSTR(0)
RSEG APD_USERPL(0)
PUBLIC Add_UserPL
EXTERN FS_CD
EXTERN FS_FClose
EXTERN FS_FCreate
EXTERN FS_FOpen
EXTERN FS_FRead
EXTERN FS_FRemove
EXTERN FS_FSeek
EXTERN FS_FWrite
EXTERN FS_Init
EXTERN FirstOffset
EXTERN LastOffset
EXTERN PlaylistCount
PUBLIC Read_DataA
PUBLIC Reset_USERPL
PUBLIC WrHead_PL
PUBLIC buffer_list
PUBLIC check_playlist
PUBLIC file
PUBLIC fp
EXTERN g_TagInfoBuf
EXTERN need_WPL
PUBLIC save_offset
PUBLIC temp_list
EXTERN ?CLZ80B_4_04_L00
EXTERN ?S_LSH_L02
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
EXTERN ?STRCMP_L11
RSEG APC_USERPL
Reset_USERPL:
; 1. #include "ap_music.h"
; 2. #ifdef ACTIVE_USERPL
; 3. #pragma memory=dataseg(APD_USERPL)
; 4. char buffer_list[512];
; 5. char file[12];
; 6. handle fp;
; 7. WORD save_offset;
; 8. user_playlist_t temp_list;
; 9. #pragma memory=default
; 10. #pragma codeseg(APC_USERPL)
; 11.
; 12. void Reset_USERPL()
; 13. {
CALL LWRD ?ENT_AUTO_DIRECT_L09
DEFW 65534
; 14.
; 15.
; 16. char i;
; 17.
; 18. memset(file,0x20,12);
CALL LWRD ?0072
; 19. file[0]='U';
; 20. file[1]='S';
; 21. file[2]='E';
; 22. file[3]='R';
; 23. file[4]='P';
; 24. file[5]='L';
; 25. file[8]='P';
; 26. file[9]='L';
; 27. file[11]=0;
; 28.
; 29. FirstOffset=0; //第一个偏移量
LD L,H
LD (FirstOffset),HL
; 30. LastOffset=0; //空族偏移量
LD (LastOffset),HL
; 31. PlaylistCount=0; //Item总数
LD (PlaylistCount),HL
; 32. if(FS_Init())
CALL LWRD FS_Init
OR A
JP Z,?0003
?0002:
; 33. {
; 34. FS_CD(FS_CD_ROOT);
CALL LWRD ?0074
; 35. fp=FS_FOpen(file,0);
; 36. if(fp!=NULL)
JR Z,?0008
?0005:
; 37. {
; 38. if(FS_FRead(buffer_list,1,fp))
PUSH HL
CALL LWRD ?0075
POP HL
OR A
JR Z,?0008
?0007:
; 39. {
; 40. if(memcmp(buffer_list,file,6)==0)
CALL LWRD ?0076
LD A,L
OR H
JR NZ,?0010
?0009:
; 41. {
; 42. memcpy(&FirstOffset,buffer_list+6,2);
LD C,2
LD DE,FirstOffset
LD HL,buffer_list+6
LDIR
; 43. memcpy(&LastOffset,buffer_list+6+2,2);
INC BC
INC BC
LD DE,LastOffset
LD HL,buffer_list+8
LDIR
; 44. memcpy(&PlaylistCount,buffer_list+6+2+2,2);
INC BC
INC BC
LD DE,PlaylistCount
LD HL,buffer_list+10
LDIR
; 45. FS_FClose(fp);
JR ?0013
; 46. return ;
; 47. }
?0010:
; 48. FS_FClose(fp);
CALL LWRD ?0077
?0008:
?0006:
; 49. }
; 50. }
; 51.
; 52. FS_FRemove(file);
LD DE,file
CALL LWRD FS_FRemove
; 53. memset(buffer_list,0,512);
LD BC,512
LD DE,buffer_list
LD L,C
CALL LWRD ?MEMSET_L11
; 54. memcpy(buffer_list,file,6);
LD BC,6
LD HL,file
LDIR
; 55. fp=FS_FCreate(file);
LD DE,file
CALL LWRD FS_FCreate
LD (fp),HL
; 56. if(fp==NULL)
LD A,L
OR H
JR Z,?0003
?0011:
?0012:
; 57. return ;
; 58. FS_FWrite(buffer_list,1,fp);
PUSH HL
CALL LWRD ?0078
POP HL
; 59. memset(buffer_list,0,512);
LD BC,512
LD DE,buffer_list
LD L,C
LD H,C
CALL LWRD ?MEMSET_L11
; 60.
; 61. for(i=0;i<USERPL_NUM/8+1;i++)
LD (IX-2),H
?0014:
LD A,(IX-2)
CP 102
JR NC,?0013
?0015:
; 62. FS_FWrite(buffer_list,1,fp);
LD HL,(fp)
PUSH HL
CALL LWRD ?0078
POP HL
INC (IX-2)
JR ?0014
?0013:
; 63.
; 64.
; 65. FS_FClose(fp);
CALL LWRD ?0077
?0003:
; 66.
; 67. }
; 68. }
?0017:
JP LWRD ?BANK_LEAVE_DIRECT_L08
?0072:
LD BC,12
LD DE,file
LD HL,32
?0073:
CALL LWRD ?MEMSET_L11
LD A,85
LD (file),A
LD A,83
LD (file+1),A
LD A,69
LD (file+2),A
LD A,82
LD (file+3),A
LD A,80
LD (file+4),A
LD A,76
LD (file+5),A
LD A,80
LD (file+8),A
LD A,76
LD (file+9),A
XOR A
LD (file+11),A
RET
?0074:
LD DE,?0004
CALL LWRD FS_CD
LD C,0
LD DE,file
CALL LWRD FS_FOpen
LD (fp),HL
LD A,L
OR H
RET
?0075:
LD C,1
LD DE,buffer_list
JP LWRD FS_FRead
?0076:
LD BC,6
LD DE,buffer_list
LD HL,file
JP LWRD ?MEMCMP_L11
?0077:
LD DE,(fp)
JP LWRD FS_FClose
?0078:
LD C,1
LD DE,buffer_list
JP LWRD FS_FWrite
Read_DataA:
; 69. BOOL Read_DataA(WORD offset)
; 70. {
CALL LWRD ?ENT_AUTO_DIRECT_L09
DEFW 65534
; 71. char IO27;
; 72. IO27 = input8(0x27);
IN A,(39)
LD (IX-2),A
; 73. output8(0x27,00);
XOR A
OUT (39),A
; 74. if(save_offset==0xffff)
LD HL,(save_offset)
LD A,L
AND H
INC A
JR Z,?0066
?0018:
; 75. {
; 76. save_offset = offset/4;
; 77. }
; 78. else
?0019:
; 79. {
; 80. if(save_offset!=(offset/4))
LD L,(IX+2)
LD H,(IX+3)
SRL H
RR L
SRL H
RR L
LD BC,(save_offset)
AND A
SBC HL,BC
JR Z,?0067
?0021:
; 81. {
; 82. FS_FWrite(buffer_list,1,fp);
LD HL,(fp)
PUSH HL
CALL LWRD ?0078
POP HL
; 83. save_offset = offset/4;
?0066:
LD L,(IX+2)
LD H,(IX+3)
SRL H
RR L
SRL H
RR L
LD (save_offset),HL
; 84. }
; 85. else
?0022:
; 86. {
; 87. output8(0x27,IO27);
; 88. return TRUE;
; 89. }
?0023:
?0020:
; 90. }
; 91. if(FS_FSeek(1+offset/4,FS_SEEK_FFROMSTART,fp))
LD HL,(fp)
PUSH HL
LD C,0
PUSH BC
LD E,(IX+2)
LD D,(IX+3)
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,?0025
?0024:
; 92. {
; 93. FS_FRead(buffer_list,1,fp);
LD HL,(fp)
PUSH HL
CALL LWRD ?0075
POP HL
; 94. output8(0x27,IO27);
?0067:
LD A,(IX-2)
OUT (39),A
; 95. return TRUE;
LD L,1
; 96. }
JR ?0026
?0025:
; 97. else
; 98. {
; 99. output8(0x27,IO27);
LD A,(IX-2)
OUT (39),A
; 100. return FALSE;
LD L,0
; 101. }
?0026:
JP LWRD ?BANK_LEAVE_DIRECT_L08
; 102. }
check_playlist:
; 103.
; 104. BOOL check_playlist(file_location_t *location)
; 105. {
CALL LWRD ?ENT_AUTO_DIRECT_L09
DEFW 0
PUSH IY
; 106. WORD next;
; 107. next = FirstOffset;
LD IY,(FirstOffset)
?0029:
; 108. do
; 109. {
; 110. if(Read_DataA(next))
PUSH IY
POP DE
CALL LWRD ?0079
INC L
DEC L
JR Z,?0029
?0030:
; 111. {
; 112. memcpy(&temp_list,buffer_list+(next%8)*64,2); //prev
LD BC,2
PUSH IY
POP HL
LD A,L
AND 7
LD E,A
XOR A
LD D,A
LD B,6
CALL LWRD ?S_LSH_L02
LD HL,buffer_list
ADD HL,DE
LD DE,temp_list
LD B,A
LDIR
; 113.
; 114. if(strcmp(temp_list.filename,location->filename)==0)
LD DE,temp_list+27
LD HL,26
LD C,(IX+2)
LD B,(IX+3)
ADD HL,BC
CALL LWRD ?STRCMP_L11
LD A,L
OR H
JR NZ,?0033
?0032:
; 115. {
; 116. return TRUE;
LD L,1
; 117. }
JR ?0036
?0033:
; 118. if(next==LastOffset)
LD HL,(LastOffset)
PUSH IY
POP BC
SBC HL,BC
JR NZ,?0035
?0034:
; 119. return FALSE;
LD L,0
JR ?0036
?0035:
; 120. next = temp_list.NextOffset;
LD IY,(temp_list+41)
?0031:
; 121. }
; 122. }while(1);
JR ?0029
; 123. return FALSE;
; 124.
; 125. }
?0036:
POP IY
JP LWRD ?BANK_LEAVE_DIRECT_L08
?0080:
LD B,7
CALL LWRD ?S_LSH_L02
LD (IX-8),E
LD (IX-7),D
LD DE,(LastOffset)
?0079:
LD A,BYTE3 Read_DataA
LD HL,LWRD Read_DataA
JP LWRD ?BANK_CALL_DIRECT_L08
Add_UserPL:
; 126.
; 127. BOOL Add_UserPL(file_location_t *location)
; 128. {
CALL LWRD ?ENT_AUTO_DIRECT_L09
DEFW 65528
; 129.
; 130.
; 131.
; 132. WORD next;
; 133. WORD prev;
; 134. WORD Offset;
; 135. char IO27 = input8(0x27);
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?