Rev 164 | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
105 | savelij | 1 | |
165 | savelij | 2 | ; LAST UPDATE 15.01.2024 savelij |
105 | savelij | 3 | |
164 | savelij | 4 | ; код для нгс |
105 | savelij | 5 | |
112 | savelij | 6 | include macros.a80 |
105 | savelij | 7 | include ports_ngs.a80 |
8 | include sdcomand.a80 |
||
163 | savelij | 9 | include bootsecfat.a80 |
164 | savelij | 10 | include fat_dir.a80 |
165 | savelij | 11 | include define_vs10xx.a80 |
12 | include local_define.a80 |
||
105 | savelij | 13 | |
164 | savelij | 14 | ; патч прошивки для плеерения MOD |
15 | ; плеерение, проверка и прочее |
||
16 | COMINT EQU 0x026B |
||
17 | COMINT_ EQU 0x026E |
||
18 | COMINT0 EQU 0x0273 |
||
19 | COMINT1 EQU 0x0295 |
||
20 | WTDTL EQU 0x02BC |
||
21 | EMPTY1 EQU 0x0942 |
||
22 | ADDA80 EQU 0x0EF8 |
||
23 | EMPTY2 EQU 0x3D5F |
||
165 | savelij | 24 | NUMPG EQU 0x4080 ; всего страниц |
25 | CPAGE EQU 0x4081 |
||
164 | savelij | 26 | CNTMOD EQU 0x4090 |
27 | CURMOD EQU 0x4096 |
||
28 | CONVERT EQU 0x40B7 |
||
29 | MTSTAT EQU 0x4151 |
||
30 | MTSNGPS EQU 0x415B |
||
31 | MTSNGSZ EQU 0x415C |
||
32 | PlMode EQU 0x41A0 |
||
33 | MODLLEN EQU 0x41A1 |
||
34 | ISTACK EQU 0x4400 |
||
35 | LDMOD EQU 0xC3F8 |
||
36 | PLAYMOD EQU 0xC426 |
||
37 | FXB01 EQU 0xD2B2 |
||
105 | savelij | 38 | |
165 | savelij | 39 | BITMASK MOD_STOP_PLAY, 7 ; 1-MOD STOP, 0-PLAY |
40 | |||
164 | savelij | 41 | INIT_VAR 0x4168 |
165 | savelij | 42 | SETVAR FLAGS, BYTE |
43 | SETVAR STATUS, BYTE ; 1 статус плеера |
||
44 | SETVAR GETVTSL, BYTE ; 1 громкость MP3 чипа |
||
45 | SETVAR GETVTSH, BYTE ; 1 биты режимов |
||
46 | SETVAR VSTBL, WORD ; 2 текущие настройки тембров |
||
47 | SETVAR COUNT_MP3, WORD ; 2 количество MP3 |
||
48 | SETVAR NUMFILE, WORD ; 2 номер текущего файла |
||
49 | SETVAR TYPE_RESET, BYTE ; 1 тип сброса |
||
50 | SETVAR TYPE_FAT, BYTE ; 1 калибр FAT |
||
51 | SETVAR BUF_TEXT, 8 ; 8 буфер для текста |
||
52 | SETVAR SIZE_PATTERN_MOD, BYTE ; 1 кол-во патернов в загруженном MOD |
||
53 | SETVAR SIZE_PAGES_MOD, BYTE ; 1 кол-во страниц MOD |
||
54 | SETVAR TIMEOUT, WORD ; 2 TIMEOUT на работу с новым файлом |
||
55 | SETVAR KUDAXOR, WORD ; 2 адрес перехода на XOR BIT 7 |
||
56 | SETVAR PAGE_PLAYER, BYTE ; 1 номер страницы расположения плеера |
||
57 | SETVAR INT_MODE, BYTE ; 1 флаг разрешенности прерываний |
||
58 | SETVAR CHIP_TYPE, BYTE ; 1 тип чина на плате |
||
59 | SETVAR FILE_TYPE, BYTE ; 1 тип файла |
||
60 | SETVAR SIZE_VARS, 0 ; количество переменных |
||
105 | savelij | 61 | |
165 | savelij | 62 | ; маски изменения тембров (требует проверки, на VS1011 работает только BASS |
63 | BITMASK UBASS_DIR, 7 ; направление изменения UBASS |
||
64 | BITMASK UBASS, 6 ; UBASS |
||
65 | BITMASK FBASS_DIR, 5 ; направление изменения FBASS |
||
66 | BITMASK FBASS, 4 ; FBASS |
||
67 | BITMASK UTREBLE_DIR, 3 ; направление изменения UTREBLE |
||
68 | BITMASK UTREBLE, 2 ; UTREBLE |
||
69 | BITMASK FTREBLE_DIR, 1 ; направление изменения FTREBLE |
||
70 | BITMASK FTREBLE, 0 ; FTREBLE |
||
105 | savelij | 71 | |
112 | savelij | 72 | FREQ10 EQU 0 |
73 | FREQ12 EQU 1 |
||
74 | FREQ20 EQU 2 |
||
75 | FREQ24 EQU 3 |
||
105 | savelij | 76 | |
164 | savelij | 77 | ORG 0x8000 |
105 | savelij | 78 | START DI |
79 | LD SP,ISTACK |
||
165 | savelij | 80 | CALL ALLRES ; сброс всех настроек |
105 | savelij | 81 | OUT (ZXDATWR),A |
165 | savelij | 82 | OUT (CLRCBIT),A ; сообщили спеку о результатах инита |
105 | savelij | 83 | LD A,1 |
84 | LD (PlMode),A |
||
164 | savelij | 85 | LD HL,0x0200 |
105 | savelij | 86 | LD (MODLLEN),HL |
165 | savelij | 87 | JP CONTINUE_MOD |
105 | savelij | 88 | |
165 | savelij | 89 | TABFUNC DW INIT_SD ; 00 перезапуск SD |
90 | DW PREV_TRACK ; 01 предыдущий трек |
||
91 | DW PLAY ; 02 плей |
||
92 | DW PAUSE ; 03 пауза |
||
93 | DW STOP ; 04 стоп |
||
94 | DW NEXT_TRACK ; 05 следующий трек |
||
95 | DW XORBASS ; 06 XOR TREBLE/BASS |
||
96 | DW XORSURR ; 07 XOR SURROUND |
||
97 | DW VOL_UP ; 08 громкость + |
||
98 | DW VOL_DOWN ; 09 громкость - |
||
99 | DW MUTE ; 0A вкл/выкл громкости |
||
100 | DW GET_TIME ; 0B отдать время |
||
101 | DW GET_VTS ; 0C отдать парам 6-10 |
||
102 | DW GET_CURRENT ; 0D отдать тек номер |
||
103 | DW SET_NUM ; 0E установка текущего номера |
||
104 | DW RESET_MP3 ; 0F сброс MP3 декодера |
||
105 | DW FAT_TYPE ; 10 тип FAT |
||
106 | DW GET_LNG ; 11 отдать имя файла |
||
107 | DW GET_FILE_DESCR ; 12 отдать описатель |
||
108 | DW GET_COUNT_FILES ; 13 отдать колво *.EXT |
||
109 | DW SEND_MP3 ; 14 прд на MP3 |
||
110 | DW TXT_COUNT_FILES ; 15 DEC число файлов |
||
111 | DW TXT_CURRENT_FILE ; 16 DEC число текущ+1 |
||
112 | DW XOR_RESET ; 17 переключения типа сброса |
||
113 | DW PREV_DIR ; 18 следующий DIR |
||
114 | DW NEXT_DIR ; 19 предыдущий DIR |
||
115 | DW SET_TEMBR ; 1A уст. тембров |
||
116 | DW TXT_TEMBR_STATUS ; 1B чтение тембров |
||
117 | DW BITRATE ; 1C RD битрейт и проч |
||
118 | DW TEST_MODE ; 1D тест режима |
||
119 | DW GET_CHIP_TYPE ; 1E номер чипа MP3 |
||
120 | END_TAB |
||
121 | |||
122 | ALLRES CALL PATCH ; патч основной прошивки |
||
105 | savelij | 123 | LD HL,FLAGS |
124 | LD D,H |
||
125 | LD E,L |
||
165 | savelij | 126 | LD BC,SIZE_PAGES_MOD - FLAGS ; количество переменных для зануления |
105 | savelij | 127 | INC DE |
128 | LD (HL),0 |
||
165 | savelij | 129 | LDIR ; зачистка области переменных |
105 | savelij | 130 | LD A,Softmp3 |
165 | savelij | 131 | LD (TYPE_RESET),A ; установка сброса MP3 чипа |
105 | savelij | 132 | LD A,Avtodet |
133 | CALL COM__SD |
||
165 | savelij | 134 | AND A ; определяем GS/NeoGS |
105 | savelij | 135 | JR Z,INI_MP3 |
165 | savelij | 136 | LD A,NEOGS_ERROR |
137 | JR INIT_SD.L4 ; код ошибки =GS |
||
105 | savelij | 138 | |
139 | INI_MP3 LD A,Hardmp3 |
||
165 | savelij | 140 | CALL COM__SD ; полная инициализация MP3 чипа |
105 | savelij | 141 | |
142 | ;----FUNC00---- |
||
165 | savelij | 143 | INIT_SD CALL RTYPEVS ; получение номера чипа MP3 |
144 | LD HL,0 |
||
105 | savelij | 145 | LD (NUMFILE),HL |
146 | LD A,Sd_init |
||
147 | CALL COM__SD |
||
165 | savelij | 148 | AND A ; инициализация SD карты |
149 | JR Z,.L1 |
||
150 | LD A,SD_NOT_FOUND |
||
151 | LD (TYPE_FAT),A |
||
152 | JR .L4 ; код ошибки =SD карта не найдена |
||
105 | savelij | 153 | |
165 | savelij | 154 | .L1 LD HL,FLAGS |
155 | RES B_SD_LOST,(HL) |
||
163 | savelij | 156 | LD A,Init_Fatvars |
165 | savelij | 157 | CALL COM_FAT ; инициализация FAT |
164 | savelij | 158 | CP 0x80 |
165 | savelij | 159 | JR Z,.L11 |
160 | LD (TYPE_FAT),A |
||
105 | savelij | 161 | INC A |
165 | savelij | 162 | JR NZ,.L3 |
163 | .L11 LD A,FAT_NOT_FOUND |
||
164 | JR .L4 ; код ошибки =FAT не найден |
||
105 | savelij | 165 | |
165 | savelij | 166 | .L3 CALL XORBASS.L2 |
105 | savelij | 167 | LD A,Finddir |
165 | savelij | 168 | CALL COM_FAT ; поиск всех директорий |
164 | savelij | 169 | CP 0x80 |
165 | savelij | 170 | JR Z,.L11 |
105 | savelij | 171 | LD A,Findfil |
165 | savelij | 172 | CALL COM_FAT ; поиск всех файлов по маске |
164 | savelij | 173 | CP 0x80 |
165 | savelij | 174 | JR Z,.L11 |
175 | LD (COUNT_MP3),HL |
||
176 | OUT (CLRCBIT),A |
||
177 | CALL PAUSE ; постановка на паузу |
||
105 | savelij | 178 | LD A,H |
179 | OR L |
||
165 | savelij | 180 | LD A,FILES_NOT_FOUND |
181 | JR Z,.L4 ; код ошибки =файлов не найдено |
||
105 | savelij | 182 | LD BC,0 |
183 | CALL INIPLAY |
||
165 | savelij | 184 | LD A,PLAYER_OK ; код ошибки =все замечательно |
185 | .L4 LD (STATUS),A |
||
105 | savelij | 186 | RET |
187 | |||
188 | ;----FUNC1C---- |
||
165 | savelij | 189 | ; конверсия HDAT1,HDAT0 |
190 | ; после чтения BC=HDAT1, DE=HDAT0 |
||
191 | BITRATE LD HL,VS10XX_READ << 8 + SCI_HDAT1;0x0309 |
||
105 | savelij | 192 | LD A,Com_mp3 |
193 | CALL COM__SD |
||
194 | PUSH DE |
||
165 | savelij | 195 | LD HL,VS10XX_READ << 8 + SCI_HDAT0;0x0308 |
105 | savelij | 196 | LD A,Com_mp3 |
197 | CALL COM__SD |
||
198 | POP BC |
||
199 | LD A,C |
||
200 | AND A |
||
164 | savelij | 201 | LD HL,0xA000 |
165 | savelij | 202 | JP Z,GET_RZN ; переход если ничего не играется |
105 | savelij | 203 | AND %00011000 |
204 | RRCA |
||
205 | RRCA |
||
165 | savelij | 206 | RRCA ; биты ID |
105 | savelij | 207 | LD L,A |
208 | LD A,D |
||
165 | savelij | 209 | AND %00001100 ; биты SAMPLE RATE |
105 | savelij | 210 | OR L |
211 | LD L,A |
||
212 | LD A,C |
||
165 | savelij | 213 | AND %00000110 ; биты LAYER |
105 | savelij | 214 | RLCA |
215 | RLCA |
||
216 | RLCA |
||
217 | OR L |
||
218 | LD L,A |
||
219 | LD A,E |
||
165 | savelij | 220 | AND %11000000 ; биты MODE |
105 | savelij | 221 | OR L |
222 | LD L,A |
||
223 | LD A,D |
||
165 | savelij | 224 | AND %11110000 ; биты BITRATE |
105 | savelij | 225 | RRCA |
226 | RRCA |
||
227 | RRCA |
||
228 | RRCA |
||
229 | LD H,A |
||
165 | savelij | 230 | JP GET_RZN ; сброс на спек содержимого HL |
105 | savelij | 231 | |
232 | ;----FUNC1A---- |
||
165 | savelij | 233 | ; изменение тембров |
234 | SET_TEMBR OUT (CLRCBIT),A |
||
105 | savelij | 235 | CALL WDY |
165 | savelij | 236 | IN A,(ZXDATRD) ; чтение параметра |
237 | LD B,A ; сохраняем |
||
238 | LD A,(CHIP_TYPE) |
||
239 | CP VS1001 ; проверяем тип чипа |
||
240 | RET Z ; для VS1001 выходим |
||
241 | ; для VS1011 продолжаем |
||
105 | savelij | 242 | LD A,(GETVTSH) |
165 | savelij | 243 | BIT B_ENABLE_TEMBR,A ; проверяем можно ли |
244 | RET Z ; крутить тембры |
||
245 | PUSH BC ; сохраняем "B" |
||
246 | LD HL,VS10XX_READ << 8 + SCI_BASS;0x0302 |
||
247 | LD A,Com_mp3 ; читаем текущее значение |
||
248 | CALL COM__SD ; тембров |
||
249 | POP BC ; восстанавливаем "B" |
||
250 | LD C,0x10 ; шаг изменения |
||
251 | ; меняем уровень UBASS ? |
||
252 | BIT B_UBASS,B ; крутим UBASS? |
||
253 | JR Z,.L1 |
||
105 | savelij | 254 | LD A,E |
165 | savelij | 255 | AND %00001111 |
256 | LD L,A ; сохраняем биты 3-0 |
||
105 | savelij | 257 | LD A,E |
165 | savelij | 258 | AND %11110000 |
259 | BIT B_UBASS_DIR,B ; куда крутим? |
||
260 | JR Z,.L01 ; увеличение |
||
261 | ; увеличение UBASS |
||
262 | ADD A,C ; увеличиваем на 1 |
||
263 | JR C,.L1 ; максимум! |
||
264 | JR .L02 |
||
105 | savelij | 265 | |
165 | savelij | 266 | ; уменьшение UBASS |
267 | .L01 SUB C ; уменьшаем на 1 |
||
268 | JR C,.L1 ; минимум! |
||
269 | .L02 ADD A,L |
||
270 | LD E,A ; вернули биты 3-0 |
||
271 | |||
272 | ; меняем уровень UTREBLE ? |
||
273 | .L1 BIT B_UTREBLE,B ; крутим UTREBLE? |
||
274 | JR Z,.L2 |
||
105 | savelij | 275 | LD A,D |
165 | savelij | 276 | AND %00001111 |
277 | LD L,A ; сохраняем биты 3-0 |
||
105 | savelij | 278 | LD A,D |
165 | savelij | 279 | AND %11110000 |
280 | BIT B_UTREBLE_DIR,B ; куда крутим? |
||
281 | JR Z,.L03 |
||
282 | ; увеличение UTREBLE |
||
105 | savelij | 283 | ADD A,C |
165 | savelij | 284 | JR C,.L2 ; максимум! |
285 | JR .L04 |
||
105 | savelij | 286 | |
165 | savelij | 287 | ; уменьшение UTREBLE |
288 | .L03 SUB C |
||
289 | JR C,.L3 ; минимум! |
||
290 | .L04 ADD A,L |
||
291 | LD D,A ; вернули биты 3-0 |
||
292 | ; меняем уровень FBASS ? |
||
293 | .L2 BIT B_FBASS,B ; крутим FBASS? |
||
294 | JR Z,.L3 |
||
105 | savelij | 295 | LD A,E |
165 | savelij | 296 | AND %11110000 |
297 | LD L,A ; сохраняем биты 7-4 |
||
105 | savelij | 298 | LD A,E |
165 | savelij | 299 | AND %00001111 |
300 | BIT B_FBASS_DIR,B ; куда крутим? |
||
301 | JR Z,.L05 |
||
302 | ; увеличение FBASS |
||
105 | savelij | 303 | INC A |
164 | savelij | 304 | CP 0x10 |
165 | savelij | 305 | JR NC,.L3 ; максимум! |
306 | JR .L06 |
||
105 | savelij | 307 | |
165 | savelij | 308 | ; уменьшение FBASS |
309 | .L05 AND A |
||
310 | JR Z,.L3 ; минимум! |
||
105 | savelij | 311 | DEC A |
165 | savelij | 312 | .L06 ADD A,L |
313 | LD E,A ; вернули биты 7-4 |
||
314 | ; меняем уровень FTREBLE ? |
||
315 | .L3 BIT B_FTREBLE,B ; крутим FTREBLE? |
||
316 | JR Z,WR_TEMBR |
||
105 | savelij | 317 | LD A,D |
165 | savelij | 318 | AND %11110000 |
319 | LD L,A ; сохраняем биты 7-4 |
||
105 | savelij | 320 | LD A,D |
165 | savelij | 321 | AND %00001111 |
322 | BIT B_FTREBLE_DIR,B ; куда крутим? |
||
323 | JR Z,.L07 |
||
324 | ; увеличение FTREBLE |
||
105 | savelij | 325 | INC A |
164 | savelij | 326 | CP 0x10 |
165 | savelij | 327 | JR NC,WR_TEMBR ; максимум! |
328 | JR .L08 |
||
105 | savelij | 329 | |
165 | savelij | 330 | ; уменьшение FTREBLE |
331 | .L07 AND A |
||
332 | JR Z,.L08 ; минимум! |
||
105 | savelij | 333 | DEC A |
165 | savelij | 334 | .L08 ADD A,L |
335 | LD D,A ; вернули биты 7-4 |
||
336 | ; записываем изменение в чип |
||
337 | WR_TEMBR LD HL,VS10XX_WRITE << 8 + SCI_BASS;0x0202 |
||
105 | savelij | 338 | LD A,Com_mp3 |
165 | savelij | 339 | JP COM__SD ; записали установки взад |
105 | savelij | 340 | |
341 | ;----FUNC10---- |
||
165 | savelij | 342 | ; отдача байта типа FAT |
343 | FAT_TYPE LD A,(TYPE_FAT) |
||
105 | savelij | 344 | JP GET_BYT |
345 | |||
165 | savelij | 346 | ; определение установленного чипа |
347 | RTYPEVS LD HL,VS10XX_READ << 8 + SCI_STATUS;0x0301 |
||
105 | savelij | 348 | LD A,Com_mp3 |
349 | CALL COM__SD |
||
165 | savelij | 350 | LD A,E ; нас интересуют биты 7-4 из регистра статуса |
105 | savelij | 351 | RRCA |
352 | RRCA |
||
165 | savelij | 353 | RRCA |
354 | RRCA |
||
355 | AND %00001111 ; сдвинули в младшие биты |
||
356 | LD (CHIP_TYPE),A ; тип установленного MP3 чипа |
||
105 | savelij | 357 | RET |
358 | |||
359 | ;----FUNC1D---- |
||
165 | savelij | 360 | ; ответ на запрос какой код работает |
361 | TEST_MODE IN A,(ZXDATRD) |
||
362 | OUT (CLRCBIT),A |
||
363 | LD A,(STATUS) |
||
105 | savelij | 364 | OUT (ZXDATWR),A |
365 | RET |
||
366 | |||
165 | savelij | 367 | ;----FUNC1E----- |
368 | ; получение номера чипа MP3 |
||
369 | GET_CHIP_TYPE IN A,(ZXDATRD) |
||
370 | OUT (CLRCBIT),A |
||
371 | LD A,(CHIP_TYPE) |
||
372 | OUT (ZXDATWR),A |
||
373 | RET |
||
374 | |||
105 | savelij | 375 | ;----FUNC17---- |
165 | savelij | 376 | ; переключение типа сброса |
377 | XOR_RESET LD HL,GETVTSH |
||
378 | LD A,M_TYPE_RESET |
||
105 | savelij | 379 | XOR (HL) |
380 | LD (HL),A |
||
381 | LD A,Hardmp3 |
||
165 | savelij | 382 | BIT B_TYPE_RESET,(HL) |
383 | JR NZ,.L1 |
||
105 | savelij | 384 | LD A,Softmp3 |
165 | savelij | 385 | .L1 LD (TYPE_RESET),A |
105 | savelij | 386 | RET |
387 | |||
388 | ;----FUNC0F---- |
||
165 | savelij | 389 | ; сброс MP3 чипа |
390 | RESET_MP3 LD A,(TYPE_RESET) |
||
105 | savelij | 391 | JP COM__SD |
392 | |||
393 | ;----FUNC04---- |
||
165 | savelij | 394 | ; остановка проигрывания |
395 | STOP CALL PAUSE |
||
105 | savelij | 396 | LD BC,(NUMFILE) |
397 | JP INIPLAY |
||
398 | |||
399 | ;----FUNC03---- |
||
165 | savelij | 400 | ; пауза воспроизведения |
401 | PAUSE LD HL,MTSTAT |
||
402 | SET B_MOD_STOP_PLAY,(HL) |
||
105 | savelij | 403 | LD HL,FLAGS |
165 | savelij | 404 | RES B_PLAY_STOP,(HL) |
105 | savelij | 405 | RET |
406 | |||
407 | ;----FUNC02---- |
||
165 | savelij | 408 | ; запуск воспроизведения |
409 | PLAY LD HL,(COUNT_MP3) |
||
105 | savelij | 410 | LD A,H |
411 | OR L |
||
412 | RET Z |
||
165 | savelij | 413 | LD HL,MTSTAT |
414 | RES B_MOD_STOP_PLAY,(HL) |
||
105 | savelij | 415 | LD HL,FLAGS |
165 | savelij | 416 | SET B_PLAY_STOP,(HL) |
105 | savelij | 417 | RET |
418 | |||
419 | ;----FUNC05---- |
||
165 | savelij | 420 | ; переход на следущий песняк |
421 | NEXT_TRACK LD BC,(NUMFILE) |
||
105 | savelij | 422 | INC BC |
165 | savelij | 423 | LD HL,(COUNT_MP3) |
105 | savelij | 424 | LD A,H |
425 | OR L |
||
426 | RET Z |
||
427 | AND A |
||
428 | SBC HL,BC |
||
165 | savelij | 429 | JR NZ,.L1 |
105 | savelij | 430 | LD BC,0 |
431 | |||
165 | savelij | 432 | ; общее для переходов по файлам |
433 | .L1 LD (NUMFILE),BC |
||
105 | savelij | 434 | JP INIPLAY |
435 | |||
436 | ;----FUNC01---- |
||
165 | savelij | 437 | ; переход на предыдущий песняк |
438 | PREV_TRACK LD BC,(NUMFILE) |
||
105 | savelij | 439 | LD A,B |
440 | OR C |
||
165 | savelij | 441 | JR NZ,.L1 |
442 | LD BC,(COUNT_MP3) |
||
105 | savelij | 443 | LD A,B |
444 | OR C |
||
445 | RET Z |
||
165 | savelij | 446 | .L1 DEC BC |
447 | JR NEXT_TRACK.L1 |
||
105 | savelij | 448 | |
449 | ;----FUNC19---- |
||
165 | savelij | 450 | ; переход на первый файл следущей DIR |
451 | NEXT_DIR LD A,Nxtdir |
||
105 | savelij | 452 | JR P_DIR |
453 | |||
454 | ;----FUNC18---- |
||
165 | savelij | 455 | ; переход на первый файл предыдущей DIR |
456 | PREV_DIR LD A,Prvdir |
||
105 | savelij | 457 | P_DIR LD BC,(NUMFILE) |
458 | PUSH BC |
||
459 | CALL COM_FAT |
||
460 | POP HL |
||
164 | savelij | 461 | CP 0x80 |
105 | savelij | 462 | JP Z,SD_LOST |
463 | AND A |
||
464 | SBC HL,BC |
||
165 | savelij | 465 | JR NZ,NEXT_TRACK.L1 |
105 | savelij | 466 | RET |
467 | |||
468 | ;----FUNC15---- |
||
165 | savelij | 469 | ; перегонка 512 байт снаружи на MP3 |
470 | SEND_MP3 LD A,Dat2mp3 |
||
105 | savelij | 471 | JP COM__SD |
472 | |||
473 | ;----FUNC11---- |
||
165 | savelij | 474 | ; отдать спеку длинное имя |
105 | savelij | 475 | GET_LNG CALL RDINBC |
476 | BIT 7,B |
||
165 | savelij | 477 | JR Z,.L1 |
105 | savelij | 478 | LD BC,(NUMFILE) |
165 | savelij | 479 | .L1 LD HL,GETVTSH |
480 | RES B_NEW_FILE,(HL) |
||
105 | savelij | 481 | LD HL,BUF_LNG |
482 | ; LD A,Getlong |
||
483 | ; CALL COM_FAT |
||
164 | savelij | 484 | ; CP 0x80 |
105 | savelij | 485 | ; JP Z,SD_LOST |
486 | LD E,0 |
||
487 | JP OUTDATA |
||
488 | |||
489 | ;----FUNC0A---- |
||
165 | savelij | 490 | ; выкл/вкл звука |
491 | MUTE LD HL,VS10XX_READ << 8 + SCI_VOL;0x030B |
||
105 | savelij | 492 | LD A,Com_mp3 |
493 | CALL COM__SD |
||
494 | LD A,E |
||
164 | savelij | 495 | CP 0xFE |
105 | savelij | 496 | JR NC,MUTEOFF |
165 | savelij | 497 | LD (MUTEOFF.L1),A |
105 | savelij | 498 | LD HL,GETVTSH |
165 | savelij | 499 | SET B_MUTE,(HL) |
164 | savelij | 500 | LD E,0xFE |
105 | savelij | 501 | JR VOL_ALL |
502 | |||
503 | MUTEOFF LD E,0 |
||
165 | savelij | 504 | .L1 EQU $-1 |
105 | savelij | 505 | LD HL,GETVTSH |
165 | savelij | 506 | RES B_MUTE,(HL) |
105 | savelij | 507 | JR VOL_ALL |
508 | |||
509 | ;----FUNC08---- |
||
165 | savelij | 510 | ; увеличение громкости на единицу |
511 | VOL_UP LD HL,VS10XX_READ << 8 + SCI_VOL;0x030B |
||
105 | savelij | 512 | LD A,Com_mp3 |
513 | CALL COM__SD |
||
514 | LD A,E |
||
515 | AND A |
||
516 | RET Z |
||
164 | savelij | 517 | CP 0x80 |
105 | savelij | 518 | RET NC |
519 | DEC E |
||
520 | JR VOL_ALL |
||
521 | |||
522 | ;----FUNC09---- |
||
165 | savelij | 523 | ; уменьшение громкости на единицу |
524 | VOL_DOWN LD HL,VS10XX_READ << 8 + SCI_VOL;0x030B |
||
105 | savelij | 525 | LD A,Com_mp3 |
526 | CALL COM__SD |
||
527 | LD A,E |
||
164 | savelij | 528 | CP 0x7F |
105 | savelij | 529 | RET NC |
530 | INC E |
||
531 | VOL_ALL LD D,E |
||
165 | savelij | 532 | LD HL,VS10XX_WRITE << 8 + SCI_VOL;0x020B |
105 | savelij | 533 | LD A,E |
534 | LD (GETVTSL),A |
||
165 | savelij | 535 | JR XOR_ALL.L1 |
105 | savelij | 536 | |
537 | ;----FUNC07---- |
||
165 | savelij | 538 | ; переключение VIRTUAL SURROUND |
539 | XORSURR LD B,M_SURROUND |
||
105 | savelij | 540 | XOR_ALL PUSH BC |
165 | savelij | 541 | LD HL,VS10XX_READ << 8 + SCI_MODE;0x0300 |
105 | savelij | 542 | LD A,Com_mp3 |
543 | CALL COM__SD |
||
544 | POP BC |
||
545 | LD A,E |
||
546 | XOR B |
||
547 | LD E,A |
||
548 | LD A,(GETVTSH) |
||
549 | XOR B |
||
550 | LD (GETVTSH),A |
||
165 | savelij | 551 | LD A,(CHIP_TYPE) |
552 | CP VS1001 |
||
553 | JR Z,.L2 |
||
105 | savelij | 554 | RES 7,E |
165 | savelij | 555 | .L2 LD HL,VS10XX_WRITE << 8 + SCI_MODE;0x0200 |
556 | .L1 LD A,Com_mp3 |
||
105 | savelij | 557 | JP COM__SD |
558 | |||
559 | ;----FUNC06---- |
||
165 | savelij | 560 | ; переключение тембров |
561 | XORBASS LD A,(CHIP_TYPE) |
||
562 | CP VS1001 |
||
563 | JR Z,.L1 |
||
564 | LD B,M_ENABLE_TEMBR |
||
105 | savelij | 565 | JR XOR_ALL |
566 | |||
165 | savelij | 567 | .L1 LD A,(GETVTSH) |
568 | XOR M_ENABLE_TEMBR |
||
105 | savelij | 569 | LD (GETVTSH),A |
165 | savelij | 570 | .L2 LD A,(GETVTSH) |
571 | BIT B_ENABLE_TEMBR,A |
||
572 | JR Z,.L4 |
||
105 | savelij | 573 | LD DE,(VSTBL) |
165 | savelij | 574 | .L3 LD HL,VS10XX_WRITE << 8 + SCI_BASS;0x0202 |
575 | JR XOR_ALL.L1 |
||
105 | savelij | 576 | |
165 | savelij | 577 | .L4 LD HL,VS10XX_READ << 8 + SCI_BASS;0x0302 |
105 | savelij | 578 | LD A,Com_mp3 |
579 | CALL COM__SD |
||
580 | LD (VSTBL),DE |
||
581 | LD DE,0 |
||
165 | savelij | 582 | JR .L3 |
105 | savelij | 583 | |
584 | ;----FUNC0B---- |
||
165 | savelij | 585 | ; получить время проигрывания |
586 | GET_TIME LD HL,VS10XX_READ << 8 + SCI_DECODE_TIME;0x0304 |
||
105 | savelij | 587 | LD A,Com_mp3 |
588 | CALL COM__SD |
||
589 | EX DE,HL |
||
165 | savelij | 590 | LD DE,BUF_TEXT |
105 | savelij | 591 | PUSH DE |
592 | LD BC,36000 |
||
593 | CALL SUB_BC |
||
594 | LD BC,3600 |
||
595 | CALL SUB_BC |
||
596 | LD BC,600 |
||
597 | CALL SUB_BC |
||
598 | LD BC,60 |
||
599 | CALL SUB_BC |
||
600 | LD BC,10 |
||
601 | CALL SUB_BC |
||
165 | savelij | 602 | LD A,'0' |
105 | savelij | 603 | ADD A,L |
604 | LD (DE),A |
||
605 | LD E,6 |
||
606 | POP HL |
||
607 | JP OUTDATA |
||
608 | |||
609 | ;----FUNC1B---- |
||
165 | savelij | 610 | ; сброс на спек состояние тембров в текстовом виде |
611 | TXT_TEMBR_STATUS |
||
612 | LD A,(CHIP_TYPE) |
||
613 | CP VS1001 |
||
105 | savelij | 614 | RET Z |
165 | savelij | 615 | LD HL,VS10XX_READ << 8 + SCI_BASS;0x0302 |
105 | savelij | 616 | LD A,Com_mp3 |
617 | CALL COM__SD |
||
618 | LD A,D |
||
619 | EXX |
||
165 | savelij | 620 | LD DE,BUF_TEXT |
164 | savelij | 621 | AND 0x0F |
105 | savelij | 622 | LD L,A |
623 | LD H,0 |
||
624 | LD BC,10 |
||
625 | CALL SUB_BC |
||
165 | savelij | 626 | LD A,'0' |
105 | savelij | 627 | ADD A,L |
165 | savelij | 628 | LD (DE),A ; положили частоту TREBLE |
105 | savelij | 629 | INC DE |
630 | EXX |
||
631 | LD A,D |
||
632 | EXX |
||
164 | savelij | 633 | AND 0xF0 |
105 | savelij | 634 | RRCA |
635 | RRCA |
||
636 | RRCA |
||
637 | RRCA |
||
638 | LD L,A |
||
639 | BIT 3,A |
||
165 | savelij | 640 | LD A,'+' |
641 | JR Z,.L2 |
||
642 | LD A,'-' |
||
643 | .L2 LD (DE),A |
||
105 | savelij | 644 | INC DE |
645 | LD A,L |
||
646 | AND 7 |
||
165 | savelij | 647 | ADD A,'0' |
648 | LD (DE),A ; положили уровень TREBLE |
||
105 | savelij | 649 | INC DE |
650 | EXX |
||
651 | LD A,E |
||
652 | EXX |
||
164 | savelij | 653 | AND 0x0F |
105 | savelij | 654 | LD L,A |
655 | LD BC,10 |
||
656 | CALL SUB_BC |
||
165 | savelij | 657 | LD A,'0' |
105 | savelij | 658 | ADD A,L |
165 | savelij | 659 | LD (DE),A ; положили частоту BASS |
105 | savelij | 660 | INC DE |
661 | EXX |
||
662 | LD A,E |
||
663 | EXX |
||
164 | savelij | 664 | AND 0xF0 |
105 | savelij | 665 | RRCA |
666 | RRCA |
||
667 | RRCA |
||
668 | RRCA |
||
669 | LD L,A |
||
670 | LD BC,10 |
||
671 | CALL SUB_BC |
||
165 | savelij | 672 | LD A,'0' |
105 | savelij | 673 | ADD A,L |
165 | savelij | 674 | LD (DE),A ; положили уровень BASS |
105 | savelij | 675 | EXX |
676 | LD E,8 |
||
165 | savelij | 677 | LD HL,BUF_TEXT |
678 | LD A,'0' |
||
105 | savelij | 679 | CP (HL) |
165 | savelij | 680 | JR NZ,.L1 |
164 | savelij | 681 | LD (HL),0x20 |
165 | savelij | 682 | .L1 JP OUTDATA |
105 | savelij | 683 | |
164 | savelij | 684 | SUB_BC LD A,0xFF |
105 | savelij | 685 | AND A |
165 | savelij | 686 | .L1 INC A |
105 | savelij | 687 | SBC HL,BC |
165 | savelij | 688 | JR NC,.L1 |
105 | savelij | 689 | ADD HL,BC |
165 | savelij | 690 | ADD A,'0' |
105 | savelij | 691 | LD (DE),A |
692 | INC DE |
||
693 | RET |
||
694 | |||
695 | ;----FUNC15---- |
||
165 | savelij | 696 | ; сброс на спек количество найденных файлов |
697 | TXT_COUNT_FILES LD HL,(COUNT_MP3) |
||
105 | savelij | 698 | |
165 | savelij | 699 | ; перегоняем HL в TXT и сбрасываем |
700 | GETDCHR LD DE,BUF_TEXT |
||
105 | savelij | 701 | PUSH DE |
702 | LD BC,10000 |
||
703 | CALL SUB_BC |
||
704 | LD BC,1000 |
||
705 | CALL SUB_BC |
||
706 | LD BC,100 |
||
707 | CALL SUB_BC |
||
708 | LD BC,10 |
||
709 | CALL SUB_BC |
||
165 | savelij | 710 | LD A,'0' |
105 | savelij | 711 | ADD A,L |
712 | LD (DE),A |
||
713 | POP HL |
||
714 | PUSH HL |
||
165 | savelij | 715 | LD BC,4 << 8 + ' ' |
716 | .L1 LD A,(HL) |
||
717 | CP '0' |
||
105 | savelij | 718 | JR NZ,GO_OUTD |
719 | LD (HL),C |
||
720 | INC HL |
||
165 | savelij | 721 | DJNZ .L1 |
105 | savelij | 722 | GO_OUTD POP HL |
723 | LD E,5 |
||
724 | JR OUTDATA |
||
725 | |||
726 | ;----FUNC16---- |
||
165 | savelij | 727 | ; сброс на спек номера играемого файла + 1 |
728 | ; с перегонкой в текстовый вид |
||
729 | TXT_CURRENT_FILE |
||
730 | LD HL,(NUMFILE) |
||
105 | savelij | 731 | INC HL |
732 | JR GETDCHR |
||
733 | |||
734 | ;----FUNC12---- |
||
165 | savelij | 735 | ; отдать спеку 33 байта описателя файла |
736 | GET_FILE_DESCR CALL RDINBC |
||
105 | savelij | 737 | BIT 7,B |
165 | savelij | 738 | JR Z,.L1 |
105 | savelij | 739 | LD BC,(NUMFILE) |
165 | savelij | 740 | .L1 LD A,Getfzap |
105 | savelij | 741 | CALL COM_FAT |
164 | savelij | 742 | CP 0x80 |
105 | savelij | 743 | JP Z,SD_LOST |
164 | savelij | 744 | LD BC,0x20 |
105 | savelij | 745 | ADD HL,BC |
746 | LD (HL),E |
||
747 | SBC HL,BC |
||
164 | savelij | 748 | LD E,0x21 |
105 | savelij | 749 | |
165 | savelij | 750 | ; отдаем байтики, счетчик байта в E |
105 | savelij | 751 | OUTDATA LD A,(HL) |
752 | INC HL |
||
753 | OUT (ZXDATWR),A |
||
754 | CALL WDN |
||
755 | DEC E |
||
756 | JR NZ,OUTDATA |
||
757 | RET |
||
758 | |||
759 | ;----FUNC0E---- |
||
165 | savelij | 760 | ; установка номера файла для играния |
761 | ; если не превышает количество найденного - 1 |
||
105 | savelij | 762 | SET_NUM CALL RDINBC |
165 | savelij | 763 | LD HL,(COUNT_MP3) |
105 | savelij | 764 | AND A |
765 | SBC HL,BC |
||
766 | RET C |
||
767 | LD (NUMFILE),BC |
||
768 | RET |
||
769 | |||
165 | savelij | 770 | ; читаем в BC |
105 | savelij | 771 | RDINBC CALL WDY |
772 | IN A,(ZXDATRD) |
||
773 | LD B,A |
||
774 | CALL WDY |
||
775 | IN A,(ZXDATRD) |
||
776 | LD C,A |
||
777 | RET |
||
778 | |||
779 | ;----FUNC13---- |
||
165 | savelij | 780 | ; отдать спеку количество найденного |
781 | GET_COUNT_FILES LD HL,(COUNT_MP3) |
||
105 | savelij | 782 | JR GET_RZN |
783 | |||
784 | ;----FUNC0D---- |
||
165 | savelij | 785 | ; отдать спеку номер текущего файла |
786 | GET_CURRENT LD HL,(NUMFILE) |
||
105 | savelij | 787 | JR GET_RZN |
788 | |||
789 | ;----FUNC0C---- |
||
165 | savelij | 790 | ; в HL содержимое битов установок |
105 | savelij | 791 | GET_VTS LD HL,(GETVTSL) |
792 | |||
165 | savelij | 793 | ; сбрасываем содержимое HL на спек |
105 | savelij | 794 | GET_RZN LD A,H |
795 | OUT (ZXDATWR),A |
||
796 | CALL WDN |
||
797 | LD A,L |
||
798 | |||
165 | savelij | 799 | ; сбросить на спек байт A |
105 | savelij | 800 | GET_BYT OUT (ZXDATWR),A |
801 | |||
165 | savelij | 802 | ; ждем пока спек заберет байт из порта |
112 | savelij | 803 | WDN LD B,0 |
165 | savelij | 804 | .L1 DEC B |
112 | savelij | 805 | RET Z |
806 | IN A,(ZXSTAT) |
||
105 | savelij | 807 | RLA |
165 | savelij | 808 | JR C,.L1 |
105 | savelij | 809 | RET |
810 | |||
165 | savelij | 811 | ; ждем пока спек даст байт в порт |
105 | savelij | 812 | WDY IN A,(ZXSTAT) |
813 | RLA |
||
814 | JR NC,WDY |
||
815 | RET |
||
816 | |||
165 | savelij | 817 | ; играть на MP3-декодер 1 сектор |
105 | savelij | 818 | PLAYMP3 LD A,(FLAGS) |
165 | savelij | 819 | BIT B_PLAY_STOP,A |
105 | savelij | 820 | RET Z |
165 | savelij | 821 | LD A,(FILE_TYPE) |
822 | CP FILE_MP3 |
||
105 | savelij | 823 | RET NZ |
165 | savelij | 824 | ; только MP3 |
105 | savelij | 825 | LD A,Nextsec |
826 | CALL COM_FAT |
||
827 | LD H,A |
||
828 | EX AF,AF' |
||
829 | LD A,H |
||
164 | savelij | 830 | CP 0x80 |
105 | savelij | 831 | JP Z,SD_LOST |
832 | EX AF,AF' |
||
165 | savelij | 833 | RET NZ ; файло не кончилось, выходим |
105 | savelij | 834 | LD A,Zer2mp3 |
835 | CALL COM__SD |
||
165 | savelij | 836 | JP NEXT_TRACK ; файл кончился, завершаем нулями |
837 | ; и переходим на следующий файл |
||
105 | savelij | 838 | |
165 | savelij | 839 | ; открытие файла и инит декодера |
105 | savelij | 840 | INIPLAY PUSH BC |
112 | savelij | 841 | CALL MOD_OFF |
165 | savelij | 842 | CALL RESET_MP3 ; сброс чипа в зависимости от установок |
105 | savelij | 843 | LD HL,(GETVTSL) |
165 | savelij | 844 | BIT B_TYPE_RESET,H ; если сброс =HARD, то обнуляем все |
845 | ; кроме типа сброса этого чипа |
||
846 | JR Z,.L1 |
||
105 | savelij | 847 | LD L,0 |
848 | LD A,H |
||
165 | savelij | 849 | AND M_TYPE_RESET |
105 | savelij | 850 | LD H,A |
165 | savelij | 851 | .L1 SET B_NEW_FILE,H ; включаем бит 5, пошол новый файл |
105 | savelij | 852 | POP BC |
853 | PUSH BC |
||
854 | PUSH HL |
||
855 | LD A,Openfil |
||
165 | savelij | 856 | CALL COM_FAT ; открываем новый файл |
164 | savelij | 857 | CP 0x80 |
105 | savelij | 858 | JP Z,SD_LOST |
859 | POP HL |
||
860 | LD (GETVTSL),HL |
||
165 | savelij | 861 | LD (FILE_TYPE),A |
862 | CP FILE_MP3 |
||
863 | LD E,FREQ20 ; 20 Мгц для играния MOD |
||
864 | JR NZ,.L2 |
||
865 | LD E,FREQ12 ; 12 Мгц для играния MP3 |
||
866 | .L2 LD A,Freqnc |
||
112 | savelij | 867 | CALL COM__SD |
105 | savelij | 868 | LD HL,FLAGS |
165 | savelij | 869 | RES B_FILE_LOAD,(HL) |
164 | savelij | 870 | LD HL,0x0400 |
105 | savelij | 871 | LD (TIMEOUT),HL |
872 | POP BC |
||
873 | LD HL,BUF_LNG |
||
874 | LD A,Getlong |
||
165 | savelij | 875 | CALL COM_FAT ; чтение в буфер длинного имени файла |
105 | savelij | 876 | MOD_OFF XOR A |
877 | OUT (VOL1),A |
||
878 | OUT (VOL2),A |
||
879 | OUT (VOL3),A |
||
880 | OUT (VOL4),A |
||
881 | OUT (VOL5),A |
||
882 | OUT (VOL6),A |
||
883 | OUT (VOL7),A |
||
884 | OUT (VOL8),A |
||
885 | OUT (VOL8),A |
||
886 | RET |
||
887 | |||
888 | SD_LOST LD SP,ISTACK |
||
889 | LD HL,FLAGS |
||
165 | savelij | 890 | SET B_SD_LOST,(HL) |
891 | CALL PAUSE |
||
892 | JP CONTINUE_MOD |
||
105 | savelij | 893 | |
112 | savelij | 894 | CMP_INT PUSH AF |
895 | LD A,R |
||
896 | JP PE,CMP_INT1 |
||
897 | LD A,R |
||
898 | CMP_INT1 LD A,0 |
||
899 | JP PO,CMP_INT2 |
||
900 | LD A,1 |
||
901 | CMP_INT2 LD (INT_MODE),A |
||
902 | POP AF |
||
903 | RET |
||
904 | |||
165 | savelij | 905 | COM__SD include "sd_on_ngs.a80" ; драйвер SD карты |
906 | COM_FAT include "fat_on_ngs.a80" ; драйвер FAT |
||
105 | savelij | 907 | |
908 | SET7XOR PUSH HL |
||
909 | LD HL,0 |
||
910 | ADD HL,SP |
||
911 | EXX |
||
164 | savelij | 912 | LD A,0x10 |
913 | LD SP,0x7F00 |
||
165 | savelij | 914 | LD BC,0xA97E ; LD A,(HL):XOR C |
915 | LD DE,0x2C77 ; LD (HL),A:INC L |
||
916 | SPEDI1 |
||
917 | REPT 16 |
||
105 | savelij | 918 | PUSH DE |
919 | PUSH BC |
||
165 | savelij | 920 | ENDM |
105 | savelij | 921 | DEC A |
922 | JP NZ,SPEDI1 |
||
923 | LD HL,SPEDI2 |
||
164 | savelij | 924 | LD DE,0x7F00 |
165 | savelij | 925 | LD BC,ESPEDI2 - SPEDI2 |
105 | savelij | 926 | LDIR |
927 | EXX |
||
928 | LD SP,HL |
||
929 | POP HL |
||
930 | LD A,L |
||
931 | EXX |
||
932 | LD L,A |
||
933 | LD H,0 |
||
164 | savelij | 934 | LD BC,0x7B00 |
105 | savelij | 935 | ADD HL,HL |
936 | ADD HL,HL |
||
937 | ADD HL,BC |
||
938 | LD (KUDAXOR),HL |
||
939 | EXX |
||
165 | savelij | 940 | LD A,(SIZE_PAGES_MOD) |
105 | savelij | 941 | LD B,A |
164 | savelij | 942 | LD C,0x80 |
105 | savelij | 943 | RET |
944 | |||
945 | SPEDI2 INC H |
||
164 | savelij | 946 | JP NZ,0x7B00 |
105 | savelij | 947 | INC E |
948 | LD A,(DE) |
||
164 | savelij | 949 | LD H,0x80 |
105 | savelij | 950 | OUT (MPAG),A |
951 | DEC B |
||
164 | savelij | 952 | JP NZ,0x7B00 |
165 | savelij | 953 | LD A,(PAGE_PLAYER) |
105 | savelij | 954 | OUT (MPAG),A |
955 | JP END7XOR |
||
956 | ESPEDI2 |
||
957 | |||
165 | savelij | 958 | SPEDI3 LD A,(PAGE_PLAYER) |
105 | savelij | 959 | OUT (MPAG),A |
960 | CALL SET7XOR |
||
961 | LD A,(DE) |
||
962 | PUSH HL |
||
963 | OUT (MPAG),A |
||
964 | LD HL,(KUDAXOR) |
||
965 | EX (SP),HL |
||
966 | RET |
||
967 | |||
968 | END7XOR EXX |
||
969 | LD HL,0 |
||
970 | ADD HL,SP |
||
164 | savelij | 971 | LD SP,0x8000 |
972 | LD DE,0x8080 |
||
973 | LD B,0x40 |
||
165 | savelij | 974 | E7X1 |
975 | REPT 64 |
||
105 | savelij | 976 | PUSH DE |
165 | savelij | 977 | ENDM |
105 | savelij | 978 | DJNZ E7X1 |
979 | LD SP,HL |
||
980 | EXX |
||
981 | JP ESPEED |
||
982 | |||
112 | savelij | 983 | PATCH LD A,(NUMPG) |
165 | savelij | 984 | OR %00111111 |
985 | LD (PAGE_PLAYER),A ; страница расположения плеера |
||
112 | savelij | 986 | IN A,(GSCFG0) |
105 | savelij | 987 | RES B_RAMRO,A |
988 | SET B_EXPAG,A |
||
989 | OUT (GSCFG0),A |
||
164 | savelij | 990 | LD A,0x80 |
105 | savelij | 991 | OUT (MPAGEX),A |
992 | LD HL,SPEDI3 |
||
993 | LD DE,ADDA80 |
||
165 | savelij | 994 | LD BC,END7XOR - SPEDI3 |
105 | savelij | 995 | LDIR |
996 | LD HL,FXB01 |
||
164 | savelij | 997 | LD (HL),0xCD |
105 | savelij | 998 | INC HL |
999 | LD (HL),LOW (NXTMOD) |
||
1000 | INC HL |
||
1001 | LD (HL),HIGH (NXTMOD) |
||
164 | savelij | 1002 | LD HL,0x11D6 |
1003 | LD (HL),0xCD |
||
105 | savelij | 1004 | INC HL |
1005 | LD (HL),LOW (NXTMODR) |
||
1006 | INC HL |
||
1007 | LD (HL),HIGH (NXTMODR) |
||
1008 | INC HL |
||
1009 | EX DE,HL |
||
164 | savelij | 1010 | LD HL,0x11E3 |
105 | savelij | 1011 | AND A |
1012 | SBC HL,DE |
||
1013 | LD B,H |
||
1014 | LD C,L |
||
1015 | LD H,D |
||
1016 | LD L,E |
||
1017 | LD (HL),B |
||
1018 | INC DE |
||
165 | savelij | 1019 | LDIR ; зачистка хвостов в ПЗУ |
105 | savelij | 1020 | LD HL,TEKADR1 |
1021 | LD DE,EMPTY2 |
||
165 | savelij | 1022 | LD BC,P_END - LD_MOD |
1023 | LDIR ; перенос загрузчика и обработчика |
||
1024 | ; окончания проигрываемого файла |
||
105 | savelij | 1025 | LD HL,P_START |
1026 | LD DE,EMPTY1 |
||
165 | savelij | 1027 | LD BC,P__END - P_00 |
1028 | LDIR ; перенос управления MP3 плеером в ПЗУ |
||
112 | savelij | 1029 | LD HL,(NUMPG) |
164 | savelij | 1030 | LD H,0x40 |
112 | savelij | 1031 | DEC L |
105 | savelij | 1032 | LD (HL),1 |
1033 | INC L |
||
165 | savelij | 1034 | LD (HL),0 ; отрубание последней страницы ОЗУ |
1035 | ; от основного списка страниц |
||
112 | savelij | 1036 | LD HL,NUMPG |
1037 | DEC (HL) |
||
105 | savelij | 1038 | LD HL,P_00 |
165 | savelij | 1039 | LD (0x0300 + (0x1F * 2)),HL ; патч команды 1F |
105 | savelij | 1040 | LD HL,COMMFF |
165 | savelij | 1041 | LD (0x0300 + (0x2F * 2)),HL ; патч команды FF |
105 | savelij | 1042 | IN A,(GSCFG0) |
1043 | SET B_RAMRO,A |
||
1044 | RES B_EXPAG,A |
||
1045 | OUT (GSCFG0),A |
||
165 | savelij | 1046 | LD A,(PAGE_PLAYER) |
105 | savelij | 1047 | OUT (MPAG),A |
1048 | |||
165 | savelij | 1049 | ; создание списка малых страниц для загрузчика файла в память |
164 | savelij | 1050 | LISTPAG LD HL,0x4000 |
105 | savelij | 1051 | LD DE,BUF_PAG |
165 | savelij | 1052 | .L1 LD A,(HL) |
105 | savelij | 1053 | ADD A,A |
1054 | RRCA |
||
1055 | LD (DE),A |
||
1056 | RLCA |
||
1057 | INC DE |
||
1058 | INC A |
||
1059 | RRCA |
||
1060 | LD (DE),A |
||
1061 | INC DE |
||
1062 | INC HL |
||
1063 | LD A,(HL) |
||
1064 | DEC A |
||
165 | savelij | 1065 | JR NZ,.L1 |
105 | savelij | 1066 | RET |
1067 | |||
1068 | TEKADR1 |
||
1069 | PHASE EMPTY2 |
||
1070 | |||
165 | savelij | 1071 | ; грузилка файла в память NEOGS |
105 | savelij | 1072 | LD_MOD IN A,(GSCFG0) |
165 | savelij | 1073 | AND %11001111 |
105 | savelij | 1074 | OUT (GSCFG0),A |
1075 | LD HL,FLAGS |
||
165 | savelij | 1076 | SET B_FILE_LOAD,(HL) |
105 | savelij | 1077 | CALL MOD_OFF |
1078 | LD A,Loadfil |
||
1079 | CALL COM_FAT |
||
164 | savelij | 1080 | CP 0x80 |
105 | savelij | 1081 | JP Z,SD_LOST |
165 | savelij | 1082 | LD (SIZE_PAGES_MOD),A |
105 | savelij | 1083 | LD A,(CPAGE) |
1084 | OUT (MPAG),A |
||
1085 | LD A,1 |
||
1086 | LD (CNTMOD),A |
||
1087 | LD (CURMOD),A |
||
1088 | CALL LDMOD |
||
1089 | LD A,(MTSNGSZ) |
||
165 | savelij | 1090 | LD (SIZE_PATTERN_MOD),A |
164 | savelij | 1091 | LD BC,0x0100 |
105 | savelij | 1092 | CALL PLAYMOD |
1093 | IN A,(GSCFG0) |
||
165 | savelij | 1094 | OR %00010000 |
105 | savelij | 1095 | OUT (GSCFG0),A |
1096 | RET |
||
1097 | |||
1098 | ESPEED XOR A |
||
1099 | LD (CPAGE),A |
||
1100 | OUT (MPAG),A |
||
1101 | RET |
||
1102 | |||
1103 | NXTMOD LD HL,MTSNGPS |
||
1104 | INC (HL) |
||
1105 | CP (HL) |
||
1106 | JP C,NXTMOD1 |
||
1107 | LD (MTSNGPS),A |
||
1108 | RET |
||
1109 | |||
165 | savelij | 1110 | NXTMODR LD A,(PAGE_PLAYER) |
105 | savelij | 1111 | OUT (MPAG),A |
165 | savelij | 1112 | CALL NEXT_TRACK |
1113 | LD A,(FILE_TYPE) |
||
1114 | CP FILE_MP3 |
||
105 | savelij | 1115 | JP NZ,LD_MOD |
1116 | POP HL |
||
1117 | JP OPROS |
||
1118 | |||
1119 | COMMFF IN A,(ZXDATRD) |
||
165 | savelij | 1120 | OUT (CLRCBIT),A |
105 | savelij | 1121 | ADD A,LOW (FLAGS) |
1122 | LD IYL,A |
||
1123 | LD A,HIGH (FLAGS) |
||
1124 | ADC A,0 |
||
1125 | LD IYH,A |
||
1126 | LD A,(IY+0) |
||
1127 | OUT (ZXDATWR),A |
||
1128 | JP COMINT_ |
||
1129 | P_END |
||
1130 | DEPHASE |
||
1131 | P_START |
||
1132 | PHASE EMPTY1 |
||
1133 | |||
165 | savelij | 1134 | ; основной цикл общения со спеком |
1135 | P_00 JP OPROS.L3 |
||
105 | savelij | 1136 | |
165 | savelij | 1137 | NXTMOD1 LD A,(PAGE_PLAYER) |
105 | savelij | 1138 | OUT (MPAG),A |
165 | savelij | 1139 | CALL NEXT_TRACK |
1140 | ; продолжить играть MOD |
||
1141 | CONTINUE_MOD LD A,(FILE_TYPE) |
||
1142 | CP FILE_MP3 |
||
105 | savelij | 1143 | JR Z,OPROS |
1144 | LD A,(FLAGS) |
||
165 | savelij | 1145 | BIT B_PLAY_STOP,A |
105 | savelij | 1146 | JR Z,CONROM |
165 | savelij | 1147 | BIT B_FILE_LOAD,A |
105 | savelij | 1148 | CALL Z,LD_MOD |
1149 | CONROM LD A,(CPAGE) |
||
1150 | OUT (MPAG),A |
||
1151 | JP COMINT |
||
1152 | |||
1153 | OPROS IN A,(ZXSTAT) |
||
1154 | RRA |
||
165 | savelij | 1155 | JR C,.L1 |
105 | savelij | 1156 | CALL PLAYMP3 |
1157 | JR OPROS |
||
1158 | |||
165 | savelij | 1159 | .L1 IN A,(ZXCMD) |
164 | savelij | 1160 | CP 0x1F |
105 | savelij | 1161 | JR NZ,CONROM |
165 | savelij | 1162 | .L3 IN A,(ZXDATRD) |
105 | savelij | 1163 | OUT (CLRCBIT),A |
1164 | AND A |
||
165 | savelij | 1165 | JR Z,.L2 |
112 | savelij | 1166 | LD H,A |
165 | savelij | 1167 | LD A,(STATUS) |
164 | savelij | 1168 | CP 0x78 |
105 | savelij | 1169 | JR NC,OPROS |
112 | savelij | 1170 | LD A,H |
165 | savelij | 1171 | .L2 CP LOW (END_TAB-TABFUNC) / 2 + 1 |
105 | savelij | 1172 | JR NC,OPROS |
165 | savelij | 1173 | LD HL,CONTINUE_MOD |
105 | savelij | 1174 | PUSH HL |
1175 | ADD A,A |
||
1176 | ADD A,LOW (TABFUNC) |
||
1177 | LD L,A |
||
1178 | LD A,HIGH (TABFUNC) |
||
1179 | ADC A,0 |
||
1180 | LD H,A |
||
165 | savelij | 1181 | LD A,(PAGE_PLAYER) |
105 | savelij | 1182 | OUT (MPAG),A |
1183 | LD A,(HL) |
||
1184 | INC HL |
||
1185 | LD H,(HL) |
||
1186 | LD L,A |
||
1187 | JP (HL) |
||
1188 | P__END |
||
1189 | DEPHASE |
||
1190 | |||
164 | savelij | 1191 | DUPL 0x100-LOW ($),0 |
105 | savelij | 1192 | |
165 | savelij | 1193 | INIT_VAR $ |
1194 | SETVAR BUF_LNG, 0x100 ; буфер для перекод. длинного имени |
||
1195 | SETVAR BUFTDIR, 0x100 ; буфер имени текущей DIR |
||
1196 | SETVAR BUF_PAG, 0x100 ; таблица расширенных страниц |
||
1197 | SETVAR B512BAS, 0 |