Rev 165 | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 165 | Rev 181 | ||
---|---|---|---|
Line 1... | Line 1... | ||
1 | 1 | ||
2 | ; LAST UPDATE 16.01.2024 savelij |
2 | ; LAST UPDATE 17.05.2025 savelij |
3 | 3 | ||
4 | ; SD & MP3 функции по номерам |
4 | ; SD & MP3 функции по номерам |
5 | INIT_VAR |
5 | INIT_VAR |
6 | SETVAR Sd_init ; инит SD карты |
6 | SETVAR Sd_init ; инит SD карты |
7 | SETVAR Sd__off ; снятие выбора |
7 | SETVAR Sd__off ; снятие выбора |
Line 69... | Line 69... | ||
69 | POP DE |
69 | POP DE |
70 | POP DE |
70 | POP DE |
71 | POP HL |
71 | POP HL |
72 | EXX |
72 | EXX |
73 | PUSH AF |
73 | PUSH AF |
74 | LD A,(INT_MODE) |
74 | LD A,(VAR_INT_MODE) |
75 | AND A |
75 | AND A |
76 | JR Z,ERR_SD1 |
76 | JR Z,ERR_SD1 |
77 | EI |
77 | EI |
78 | ERR_SD1 POP AF |
78 | ERR_SD1 POP AF |
79 | RET |
79 | RET |
Line 278... | Line 278... | ||
278 | ; чтение одного сектора с побайтовой передачей в MP3 чип |
278 | ; чтение одного сектора с побайтовой передачей в MP3 чип |
279 | RON_MP3 PUSH BC |
279 | RON_MP3 PUSH BC |
280 | PUSH DE |
280 | PUSH DE |
281 | LD BC,SD_RSTR |
281 | LD BC,SD_RSTR |
282 | LD D,0x10 |
282 | LD D,0x10 |
283 | .L2 IN A,(SSTAT) |
283 | .L2 CALL DRQVS |
284 | RRA |
- | |
285 | JR NC,.L2 |
- | |
286 | LD E,0x20 |
284 | LD E,0x20 |
287 | .L1 IN A,(C) |
285 | .L1 IN A,(C) |
288 | NOP |
286 | NOP |
289 | OUT (MD_SEND),A |
287 | OUT (MD_SEND),A |
290 | DEC E |
288 | DEC E |
Line 347... | Line 345... | ||
347 | NOP |
345 | NOP |
348 | ENDM |
346 | ENDM |
349 | RET |
347 | RET |
350 | 348 | ||
351 | AVTODET IN A,(GSCFG0) |
349 | AVTODET IN A,(GSCFG0) |
352 | AND %11001111;0xCF |
350 | AND %11001111 |
353 | OUT (GSCFG0),A |
351 | OUT (GSCFG0),A |
354 | LD D,A |
352 | LD D,A |
355 | CALL NOPER |
353 | CALL NOPER |
356 | IN A,(GSCFG0) |
354 | IN A,(GSCFG0) |
357 | CP D |
355 | CP D |
Line 377... | Line 375... | ||
377 | OUT (GSCFG0),A |
375 | OUT (GSCFG0),A |
378 | RET |
376 | RET |
379 | 377 | ||
380 | ; записываем 2048 нулей как завершение песенки |
378 | ; записываем 2048 нулей как завершение песенки |
381 | ZER2MP3 LD D,0x40 |
379 | ZER2MP3 LD D,0x40 |
382 | .L2 IN A,(SSTAT) |
380 | .L2 CALL DRQVS |
383 | RRA |
- | |
384 | JR NC,.L2 |
- | |
385 | LD E,0x20 |
381 | LD E,0x20 |
386 | .L1 XOR A |
382 | .L1 XOR A |
387 | OUT (MD_SEND),A |
383 | OUT (MD_SEND),A |
388 | DEC E |
384 | DEC E |
389 | JR NZ,.L1 |
385 | JR NZ,.L1 |
390 | DEC D |
386 | DEC D |
391 | JR NZ,.L2 |
387 | JR NZ,.L2 |
392 | RET |
388 | RET |
393 | 389 | ||
- | 390 | ; SS_VER is |
|
- | 391 | TABL_CLOCK DW 0x8000 + (14000000 / 2000) ; 0 for VS1001 (MA8201) 9B58 |
|
- | 392 | DW 0x8000 + (14000000 / 2000) ; 1 for VS1011 (MA8201A) 9B58 |
|
- | 393 | DW 0 ; 2 for VS1002 ; не поддерживается, не проверялся |
|
- | 394 | DW SC_MULT4 | SC_ADD3 | 1500 ; 3 for VS1003 |
|
- | 395 | DW SC_MULT4 | SC_ADD1 | 1500 ; 4 for VS1053 and VS8053 ; пока не доделан |
|
- | 396 | DW 0 ; 5 for VS1033 ; не поддерживается, не проверялся |
|
- | 397 | DW SC_MULT4 | SC_ADD1 | 1500 ; 6 for VS1063 ; пока не доделан |
|
- | 398 | DW 0 ; 7 for VS1103 ; не поддерживается, не проверялся |
|
- | 399 | ||
394 | ; установка частоты MP3 чипа |
400 | ; установка частоты MP3 чипа |
395 | SET_CLOCKF LD HL,VS10XX_WRITE << 8 + SCI_CLOCKF;0x0202 |
401 | SET_CLOCKF LD A,(VAR_CHIP_TYPE) |
- | 402 | ADD A,A |
|
396 | LD A,(CHIP_TYPE) |
403 | ADD A,LOW (TABL_CLOCK) |
397 | CP VS1053 |
404 | LD L,A |
- | 405 | ADC A,HIGH (TABL_CLOCK) |
|
- | 406 | SUB L |
|
398 | JR Z,.VS1053 |
407 | LD H,A |
399 | CP VS1063 |
408 | LD E,(HL) |
- | 409 | INC HL |
|
400 | JR Z,.VS1063 |
410 | LD D,(HL) |
401 | ; по дефолту установка для VS1001/VS1011 |
411 | LD HL,VS10XX_WRITE << 8 + SCI_CLOCKF;0x0202 |
402 | .L1 LD DE,0x8000 + (14000000 / 2000); 0x9B58 установка делителя частоты для MP3 чипа |
- | |
403 | JP COM_MP3 ; установка частоты для декодера |
412 | JP COM_MP3 ; установка частоты для декодера |
404 | 413 | ||
- | 414 | ; ожидание готовности MP3 декодера |
|
- | 415 | DRQVS IN A,(SSTAT) |
|
405 | .VS1053 |
416 | RRA |
406 | .VS1063 LD DE,SC_MULT4 | SC_ADD2 | 1000 |
- | |
407 | JP COM_MP3 ; установка частоты для декодера |
417 | JR NC,DRQVS ; дождались готовности декодера |
- | 418 | RET |
|
408 | 419 | ||
409 | ; полный сброс |
420 | ; полный сброс |
410 | HARDMP3 CALL VOL_MOD ; заглушили громкость портов GS |
421 | HARDMP3 CALL VOL_MOD ; заглушили громкость портов GS |
411 | LD BC,MC_SEND |
422 | LD BC,MC_SEND |
412 | LD A,%10011100 ; 0x9C |
423 | LD A,%10011100 ; 0x9C |
Line 418... | Line 429... | ||
418 | LD A,M_MPXRS |
429 | LD A,M_MPXRS |
419 | OUT (SCTRL),A |
430 | OUT (SCTRL),A |
420 | CALL NOPER |
431 | CALL NOPER |
421 | LD A,M_MPXRS + M_SNCLR ; 0x84 |
432 | LD A,M_MPXRS + M_SNCLR ; 0x84 |
422 | OUT (SCTRL),A ; выдали сброс на декодер |
433 | OUT (SCTRL),A ; выдали сброс на декодер |
423 | .L1 IN A,(SSTAT) |
434 | CALL DRQVS |
424 | RRA |
- | |
425 | JR NC,.L1 ; дождались готовности декодера |
- | |
426 | CALL SET_CLOCKF |
435 | CALL SET_CLOCKF |
427 | LD A,(CHIP_TYPE) |
436 | LD A,(VAR_CHIP_TYPE) |
428 | CP VS1001 |
437 | CP VS1001 |
429 | LD HL,VS10XX_WRITE << 8 + SCI_BASS;0x0202 |
438 | LD HL,VS10XX_WRITE << 8 + SCI_BASS;0x0202 |
430 | LD DE,%1000000000001000 ; 0x8008 |
439 | LD DE,%1000000000001000 ; 0x8008 |
431 | CALL Z,COM_MP3 ; для VS1001 запись недокументированного пинка в |
440 | CALL Z,COM_MP3 ; для VS1001 запись недокументированного пинка в |
432 | ; недокументированный регистр, если |
441 | ; недокументированный регистр, если |
Line 444... | Line 453... | ||
444 | LD HL,VS10XX_WRITE << 8 + SCI_VOL;0x020B |
453 | LD HL,VS10XX_WRITE << 8 + SCI_VOL;0x020B |
445 | CALL COM_MP3 ; уменьшаем громкость до минимума |
454 | CALL COM_MP3 ; уменьшаем громкость до минимума |
446 | LD HL,VS10XX_READ << 8 + SCI_STATUS;0x0301 |
455 | LD HL,VS10XX_READ << 8 + SCI_STATUS;0x0301 |
447 | CALL COM_MP3 |
456 | CALL COM_MP3 |
448 | LD A,E |
457 | LD A,E |
449 | AND %11110000 |
458 | AND SCISTATUS.M_SS_VER |
450 | PUSH AF |
459 | PUSH AF |
451 | LD HL,VS10XX_READ << 8 + SCI_MODE;0x0300 |
460 | LD HL,VS10XX_READ << 8 + SCI_MODE;0x0300 |
452 | CALL COM_MP3 ; читаем состояние MODE |
461 | CALL COM_MP3 ; читаем состояние MODE |
453 | LD A,4 |
462 | LD A,SCIMODE.M_SM_RESET |
454 | XOR E |
463 | XOR E |
455 | LD E,A |
464 | LD E,A |
456 | LD HL,VS10XX_WRITE << 8 + SCI_MODE;0x0200 |
465 | LD HL,VS10XX_WRITE << 8 + SCI_MODE;0x0200 |
457 | CALL COM_MP3 |
466 | CALL COM_MP3 |
458 | LD A,4 |
467 | LD A,SCIMODE.M_SM_RESET |
459 | XOR E |
468 | XOR E |
460 | LD E,A |
469 | LD E,A |
- | 470 | LD A,(VAR_CHIP_TYPE) |
|
- | 471 | CP VS1001 |
|
- | 472 | JR Z,.L1 |
|
- | 473 | RES SCIMODE.B_SM_SDINEW,D ; отмена SPI modes |
|
461 | LD HL,VS10XX_WRITE << 8 + SCI_MODE;0x0200 |
474 | .L1 LD HL,VS10XX_WRITE << 8 + SCI_MODE;0x0200 |
462 | CALL COM_MP3 ;даем команду софт-сброса |
475 | CALL COM_MP3 ;даем команду софт-сброса |
463 | .L1 IN A,(SSTAT) |
476 | CALL DRQVS |
464 | RRA |
- | |
465 | JR NC,.L1 ; ждем освобождения декодера |
- | |
466 | CALL SET_CLOCKF |
477 | CALL SET_CLOCKF |
467 | POP AF |
478 | POP AF |
468 | LD HL,VS10XX_WRITE << 8 + SCI_BASS;0x0202 |
479 | LD HL,VS10XX_WRITE << 8 + SCI_BASS;0x0202 |
469 | LD DE,%1000000000001000 ; 0x8008 |
480 | LD DE,%1000000000001000 ; 0x8008 |
470 | CALL Z,COM_MP3 ; недокументированный пинок MP3 декодера (у Ы1001 INT_FCTLH) |
481 | CALL Z,COM_MP3 ; недокументированный пинок MP3 декодера (у VS1001 INT_FCTLH) |
471 | POP DE |
482 | POP DE |
472 | LD HL,VS10XX_WRITE << 8 + SCI_VOL;0x020B |
483 | LD HL,VS10XX_WRITE << 8 + SCI_VOL;0x020B |
473 | JR COM_MP3 ; восстанавливаем громкость до сброса |
484 | JR COM_MP3 ; восстанавливаем громкость до сброса |
474 | 485 | ||
475 | ; глушим громкость MOD портов |
486 | ; глушим громкость MOD портов |
Line 489... | Line 500... | ||
489 | ; L - адрес в декодере |
500 | ; L - адрес в декодере |
490 | ; D - старший байт |
501 | ; D - старший байт |
491 | ; E - младший байт |
502 | ; E - младший байт |
492 | ; DE по записи подать на вход |
503 | ; DE по записи подать на вход |
493 | ; по чтению получить на выходе |
504 | ; по чтению получить на выходе |
494 | COM_MP3 IN A,(SSTAT) |
505 | COM_MP3 CALL DRQVS |
495 | RRA |
- | |
496 | JR NC,COM_MP3 ; декодер свободен |
- | |
497 | LD A,M_MCNCS |
506 | LD A,M_MCNCS |
498 | OUT (SCTRL),A ; выбираем декодер и объясняем ему, что от него требуется |
507 | OUT (SCTRL),A ; выбираем декодер и объясняем ему, что от него требуется |
499 | CALL NOPER |
508 | CALL NOPER |
500 | LD BC,MC_SEND |
509 | LD BC,MC_SEND |
501 | LD A,H |
510 | LD A,H |
Line 526... | Line 535... | ||
526 | JR MP3_END |
535 | JR MP3_END |
527 | 536 | ||
528 | ; процедура пересылки байтов со спека через порты ГС на MP3 декодер |
537 | ; процедура пересылки байтов со спека через порты ГС на MP3 декодер |
529 | ; пересылается 512 байт |
538 | ; пересылается 512 байт |
530 | DAT2MP3 LD D,0x10 ; перегнать на декодер 16 порций |
539 | DAT2MP3 LD D,0x10 ; перегнать на декодер 16 порций |
531 | .L1 IN A,(SSTAT) |
540 | .L1 CALL DRQVS |
532 | RRA |
- | |
533 | JR NC,.L1 ; декодер свободен? |
- | |
534 | LD B,0x20 ; одна порция 32 байта |
541 | LD B,0x20 ; одна порция 32 байта |
535 | .L2 IN A,(ZXSTAT) |
542 | .L2 IN A,(ZXSTAT) |
536 | RLA |
543 | RLA |
537 | JR NC,.L2 ; дождались подачи от спека |
544 | JR NC,.L2 ; дождались подачи от спека |
538 | IN A,(ZXDATRD) ; забрали байт |
545 | IN A,(ZXDATRD) ; забрали байт |