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) ; забрали байт |