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 |