Subversion Repositories ngs

Rev

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