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