userlist_add.s01
来自「炬力方案176*132软件源码,适用于AK1025」· S01 代码 · 共 906 行 · 第 1/2 页
S01
906 行
IN A,(39)
LD (IX-2),A
; 136. if(PlaylistCount>100)
LD BC,(PlaylistCount)
LD HL,100
AND A
SBC HL,BC
JR C,?0071
?0037:
; 137. return FALSE;
?0038:
; 138. need_WPL=TRUE;
LD A,1
LD (need_WPL),A
; 139. save_offset=0xffff;
LD HL,65535
LD (save_offset),HL
; 140. memset(buffer_list,0,512);
LD BC,512
LD DE,buffer_list
INC HL
CALL LWRD ?MEMSET_L11
; 141. memset(file,0x20,12);
LD BC,12
LD DE,file
LD L,32
CALL LWRD ?0073
; 142. file[0]='U';
; 143. file[1]='S';
; 144. file[2]='E';
; 145. file[3]='R';
; 146. file[4]='P';
; 147. file[5]='L';
; 148. file[8]='P';
; 149. file[9]='L';
; 150. file[11]=0;
; 151. output8(0x27,0x00);
OUT (39),A
; 152. FS_CD(FS_CD_ROOT);
CALL LWRD ?0074
; 153. fp=FS_FOpen(file,0);
; 154. if(fp==NULL)
JR NZ,?0040
?0039:
; 155. {
; 156. output8(0x27,IO27);
LD A,(IX-2)
OUT (39),A
; 157. return FALSE ;
?0071:
LD L,0
; 158.
; 159. }
JP LWRD ?0050
?0040:
; 160.
; 161. if(PlaylistCount==0)
LD HL,(PlaylistCount)
LD A,L
OR H
INC HL
LD (PlaylistCount),HL
JR NZ,?0042
?0041:
; 162. {
; 163. PlaylistCount++;
; 164. FirstOffset = 0;
LD L,A
LD H,A
LD (FirstOffset),HL
; 165. LastOffset = 1;
INC HL
LD (LastOffset),HL
; 166. if(Read_DataA(0))
LD E,H
LD D,H
CALL LWRD ?0079
INC L
DEC L
JR Z,?0044
?0043:
; 167. {
; 168.
; 169. buffer_list[0]=1; //flag
LD A,1
LD (buffer_list),A
; 170. memcpy(buffer_list+1,location,38); //location
LD BC,38
LD DE,buffer_list+1
LD L,(IX+2)
LD H,(IX+3)
LDIR
; 171. memcpy(buffer_list+43,g_TagInfoBuf,64);
LD C,64
LD DE,buffer_list+43
LD HL,g_TagInfoBuf
LDIR
; 172. memcpy(buffer_list+38+1,&FirstOffset,2); //prev
INC BC
INC BC
LD DE,buffer_list+39
LD HL,FirstOffset
LDIR
; 173. memcpy(buffer_list+38+2+1,&LastOffset,2); //next
INC BC
INC BC
LD DE,buffer_list+41
LD HL,LastOffset
LDIR
; 174. LastOffset = 0;
LD (LastOffset),BC
?0044:
; 175.
; 176. }
; 177.
; 178. }
; 179. else
JP LWRD ?0047
?0042:
; 180. {
; 181.
; 182.
; 183. PlaylistCount++;
; 184. Offset = (LastOffset%4)*USER_PLAYLIST_SIZE;
LD HL,(LastOffset)
LD A,L
AND 3
LD L,A
LD H,0
EX DE,HL
; 185. if(Read_DataA(LastOffset))
CALL LWRD ?0080
INC L
DEC L
JP Z,?0047
?0046:
; 186. {
; 187. //处理最后item
; 188. memcpy(&next,buffer_list+Offset+38+2+1,2); //next
LD HL,2
ADD HL,SP
EX DE,HL
LD HL,buffer_list+41
LD C,(IX-8)
LD B,(IX-7)
ADD HL,BC
LD BC,2
LDIR
; 189. //添加item
; 190. prev = LastOffset;
LD HL,(LastOffset)
LD (IX-4),L
LD (IX-3),H
; 191. LastOffset = next;
LD C,(IX-6)
LD B,(IX-5)
LD (LastOffset),BC
; 192. Offset = (LastOffset%4)*USER_PLAYLIST_SIZE;
LD A,C
AND 3
LD E,A
LD D,0
; 193. //添加item
; 194. Read_DataA(LastOffset);
CALL LWRD ?0080
; 195. memcpy(buffer_list+1+Offset,location,38); //location
LD BC,38
LD HL,buffer_list+1
LD E,(IX-8)
LD D,(IX-7)
ADD HL,DE
EX DE,HL
LD L,(IX+2)
LD H,(IX+3)
LDIR
; 196. memcpy(buffer_list+43+Offset,g_TagInfoBuf,64);
LD C,64
LD HL,buffer_list+43
LD E,(IX-8)
LD D,(IX-7)
ADD HL,DE
EX DE,HL
LD HL,g_TagInfoBuf
LDIR
; 197. memcpy(buffer_list+38+1+Offset,&prev,2); //prev
INC BC
INC BC
LD HL,buffer_list+39
LD E,(IX-8)
LD D,(IX-7)
ADD HL,DE
EX DE,HL
LD HL,4
ADD HL,SP
LDIR
; 198. if(buffer_list[Offset]!=2) //==2 表示之前已用过
LD HL,buffer_list
LD C,(IX-8)
LD B,(IX-7)
ADD HL,BC
LD B,(HL)
DEC B
DEC B
JR Z,?0049
?0048:
; 199. {
; 200. next++;
INC (IX-6)
JR NZ,?0070
INC (IX-5)
?0070:
; 201. memcpy(buffer_list+38+1+Offset+2,&next,2); //prev
LD BC,2
LD HL,buffer_list+41
LD E,(IX-8)
LD D,(IX-7)
ADD HL,DE
EX DE,HL
LD L,C
LD H,B
ADD HL,SP
LDIR
?0049:
; 202. }
; 203. buffer_list[Offset]=1;
LD HL,buffer_list
LD C,(IX-8)
LD B,(IX-7)
ADD HL,BC
LD (HL),1
?0047:
?0045:
; 204. // FS_FWrite(buffer_list,1,fp);
; 205. }
; 206.
; 207. }
; 208. // IO27 = input8(0x27);
; 209. // output8(0x27,00);
; 210. FS_FWrite(buffer_list,1,fp);
LD HL,(fp)
PUSH HL
CALL LWRD ?0078
POP HL
; 211.
; 212. FS_FClose(fp);
CALL LWRD ?0077
; 213. output8(0x27,IO27);
LD A,(IX-2)
OUT (39),A
; 214. return TRUE;
LD L,1
; 215. }
?0050:
JP LWRD ?BANK_LEAVE_DIRECT_L08
WrHead_PL:
; 216.
; 217. BOOL WrHead_PL(char ClearFlag)
; 218. {
CALL LWRD ?ENT_AUTO_DIRECT_L09
DEFW 65534
; 219. char i;
; 220. char IO27;
; 221. IO27 = input8(0x27);
IN A,(39)
LD (IX-1),A
; 222. output8(0x27,00);
XOR A
OUT (39),A
; 223. memset(file,0x20,12);
CALL LWRD ?0072
; 224. file[0]='U';
; 225. file[1]='S';
; 226. file[2]='E';
; 227. file[3]='R';
; 228. file[4]='P';
; 229. file[5]='L';
; 230. file[8]='P';
; 231. file[9]='L';
; 232. file[11]=0;
; 233.
; 234. FS_CD(FS_CD_ROOT);
CALL LWRD ?0074
; 235. fp=FS_FOpen(file,0);
; 236. if(fp!=NULL)
JR Z,?0056
?0051:
; 237. {
; 238. if(FS_FRead(buffer_list,1,fp))
PUSH HL
CALL LWRD ?0075
POP HL
OR A
JR Z,?0056
?0053:
; 239. {
; 240. if(memcmp(buffer_list,file,6)==0)
CALL LWRD ?0076
LD A,L
OR H
JR NZ,?0056
?0055:
; 241. {
; 242. memcpy(buffer_list+6,&FirstOffset,2);
LD C,2
LD DE,buffer_list+6
LD HL,FirstOffset
LDIR
; 243. memcpy(buffer_list+6+2,&LastOffset,2);
INC BC
INC BC
LD DE,buffer_list+8
LD HL,LastOffset
LDIR
; 244. memcpy(buffer_list+6+2+2,&PlaylistCount,2);
INC BC
INC BC
LD DE,buffer_list+10
LD HL,PlaylistCount
LDIR
; 245. FS_FWrite(buffer_list,1,fp);
LD HL,(fp)
PUSH HL
CALL LWRD ?0078
POP HL
; 246. if(ClearFlag)
XOR A
OR (IX+2)
JR Z,?0059
?0057:
; 247. {
; 248. memset(buffer_list,0,512);
LD BC,512
LD DE,buffer_list
LD L,C
CALL LWRD ?MEMSET_L11
; 249. FS_FSeek(1,FS_SEEK_FFROMSTART,fp); //读写之后要先seek
LD HL,(fp)
PUSH HL
LD C,0
PUSH BC
LD B,C
LD DE,1
CALL LWRD FS_FSeek
POP HL
POP HL
; 250. for(i=0;i<USERPL_NUM/8+1;i++)
LD (IX-2),0
?0060:
LD A,(IX-2)
CP 102
JR NC,?0059
?0061:
; 251. {
; 252. output8(0x4e,input8(0x4e)|0x08);
IN A,(78)
SET 3,A
OUT (78),A
; 253. FS_FWrite(buffer_list,1,fp); ;
LD HL,(fp)
PUSH HL
CALL LWRD ?0078
POP HL
INC (IX-2)
; 254. }
; 255. }
JR ?0060
?0059:
?0058:
; 256. FS_FClose(fp);
CALL LWRD ?0077
; 257. output8(0x27,IO27);
LD A,(IX-1)
OUT (39),A
; 258. return TRUE;
LD L,1
; 259. }
JR ?0063
?0056:
?0054:
?0052:
; 260. }
; 261. }
; 262. FS_FClose(fp);
CALL LWRD ?0077
; 263. output8(0x27,IO27);
LD A,(IX-1)
OUT (39),A
; 264. return FALSE;
LD L,0
; 265.
; 266. }
?0063:
JP LWRD ?BANK_LEAVE_DIRECT_L08
; 267. /*
; 268. BOOL Clear_PL(void)
; 269. {
; 270. char i;
; 271. char IO27;
; 272. IO27 = input8(0x27);
; 273. output8(0x27,00);
; 274. memset(file,0x20,12);
; 275. file[0]='U';
; 276. file[1]='S';
; 277. file[2]='E';
; 278. file[3]='R';
; 279. file[4]='P';
; 280. file[5]='L';
; 281. file[8]='P';
; 282. file[9]='L';
; 283. file[11]=0;
; 284. FS_CD(FS_CD_ROOT);
; 285. fp=FS_FOpen(file,0);
; 286. if(fp!=NULL)
; 287. {
; 288. memset(buffer_list,0,512);
; 289. memcpy(buffer_list,file,6);
; 290. FS_FWrite(buffer_list,1,fp);
; 291. memset(buffer_list,0,512);
; 292. FS_FWrite(buffer_list,1,fp);
; 293.
; 294. for(i=0;i<USERPL_NUM/8+1;i++)
; 295. {
; 296. output8(0x4e,input8(0x4e)|0x08);
; 297. FS_FWrite(buffer_list,1,fp); ;
; 298. }
; 299. FS_FClose(fp);
; 300. output8(0x27,IO27);
; 301. return TRUE;
; 302. }
; 303. FS_FClose(fp);
; 304. output8(0x27,IO27);
; 305. return FALSE;
; 306.
; 307. }
; 308. */
; 309. #endif
RSEG CSTR
?0004:
DEFB ':'
DEFB 0
RSEG APD_USERPL
buffer_list:
DEFS 512
file:
DEFS 12
fp:
DEFS 2
save_offset:
DEFS 2
temp_list:
DEFS 43
END
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?