Subversion Repositories ngs

Rev

Blame | Last modification | View Log | Download | RSS feed

  1.  
  2. ; LAST UPDATE: 22.11.2025 savelij
  3.  
  4. ;ПОСТАВЛЯЕТСЯ КАК ЕСТЬ ИЗ КОМПЛЕКТА FATALL
  5. ;ПЕРЕД ИСПОЛЬЗОВАНИЕ ВЗБОЛТАТЬ, В СМЫСЛЕ ОБЯЗАТЕЛЕН ВЫЗОВ УСТАНОВЩИКА
  6. ;НГС СБРАСЫВАЕТСЯ И ИНИТИТСЯ ПОЛНОСТЬЮ ВО ИЗБЕЖАНИЕ ЭКСЦЕССОВ И ПРАВИЛЬНОГО КОНФИГА НГС СД ИНТЕРФЕЙСА
  7. ;ПОСЛЕ УСТАНОВКИ ДРАЙВЕРА ОСТАЛЬНЫЕ ФУНКЦИИ НГС НЕ БЛОКИРУЮТСЯ
  8.  
  9. ;ВЫЗЫВАТЬ УСТАНОВЩИК ПО ИМЕНИ INSTSDD
  10. ;САМ ДРАЙВЕР ВЫЗЫВАТЬ ЧЕРЕЗ RD_WR
  11. ;ПЕРЕД ПЕРВЫМ ВЫЗОВОМ И ДЛЯ НОВОЙ КАРТЫ ИНИТИТЬ ОБЯЗАТЕЛЬНО
  12.  
  13. ;ПРИМЕР ИСПОЛЬЗОВАНИЯ
  14. ;               CALL INSTSDD    ;УСТАНОВКА ДРАЙВЕРА
  15. ;               CALL RD_WR
  16. ;               DB 0            ;ИНИЦИАЛИЗАЦИЯ КАРТОЧКИ
  17. ;               LD HL,0X8000
  18. ;               LD BC,0
  19. ;               LD DE,0
  20. ;               CALL RD_WR
  21. ;               DB 2            ;ЧИТАТЬ 1 СЕКТОР НОМЕР 0 В ПАМЯТЬ
  22. ;               LD HL,0X9000
  23. ;               LD BC,0
  24. ;               LD DE,5
  25. ;               LD A,3
  26. ;               CALL RD_WR
  27. ;               DB 3            ;ЧИТАТЬ 3 СЕКТОРА С НОМЕРА 5 В ПАМЯТЬ
  28. ;АНАЛОГИЧНО ДЛЯ ЗАПИСИ ЧИСЛО ПОСЛЕ CALL ДОЛЖНО БЫТЬ 4 ИЛИ 5 СООТВЕТСВЕННО
  29.  
  30. ;АДРЕС ЦИКЛА ОБЩЕНИЯ СО СПЕКОМ
  31. COMINT_         EQU 0X026E
  32.  
  33. ;АДРЕС УСТАНОВЩИКА ДРАЙВЕРА НА NeoGS
  34. SETUPSD         EQU 0X5B00
  35.  
  36. ;ДРАЙВЕР SD-CARD ДЛЯ NGS
  37.  
  38. ;Входные параметры общие:
  39. ;HL-адрес загрузки в память
  40. ;BCDE-32-х битный номер сектора
  41. ;A-количество блоков (блок=512 байт)
  42. ;только для многоблочной записи/чтении
  43.  
  44. ;Ошибки выдаваемые на выходе:
  45. ;A=0-инициализация прошла успешно
  46. ;A=1-карта не найдена или не ответила
  47.  
  48. ; ============= код на спеке ==============
  49.  
  50. ;ЗДЕСЬ ВЫЗЫВАТЬ ДЛЯ ЧТЕНИЯ/ЗАПИСИ, ИМЯ МЕТКИ ПО ВКУСУ
  51. ;RD_WR
  52. START_COMSDG
  53. ;       PHASE ADR_DRIVER
  54.                 EX AF,AF'
  55.                 EX (SP),HL
  56.                 LD A,(HL)
  57.                 INC HL
  58.                 EX (SP),HL
  59.                 ADD A,A
  60.                 PUSH HL
  61.                 LD HL,NGSSDT
  62.                 ADD A,L
  63.                 LD L,A
  64.                 LD A,0
  65.                 ADC A,H
  66.                 LD H,A
  67.                 LD A,(HL)
  68.                 INC HL
  69.                 LD H,(HL)
  70.                 LD L,A
  71.                 EX AF,AF'
  72.                 EX (SP),HL
  73.                 RET
  74.  
  75. NGSSDT          DW GSDINIT                      ; 00 ИНИТ SD КАРТЫ
  76.                 DW GSDOFF                       ; 01 ОТКЛЮЧЕНИЕ SD КАРТЫ
  77.                 DW SDRDSIN                      ; 02 ЧИТАТЬ 1 СЕКТОР
  78.                 DW SDRDMUL                      ; 03 ЧИТАТЬ "A" СЕКТОРОВ
  79.                 DW SDWRSIN                      ; 04 ПИСАТЬ 1 СЕКТОР
  80.                 DW SDWRMUL                      ; 05 ПИСАТЬ "A" СЕКТОРОВ
  81.                 DW GETMP3TYPE                   ; 06
  82.  
  83. ;ЗАПИСЬ "A" СЕКТОРОВ
  84. SDWRMUL         EX AF,AF'
  85.                 LD A,5
  86.                 JR SDWRSN3
  87.  
  88. ;ЗАПИСЬ ОДНОГО СЕКТОРА
  89. SDWRSIN         LD A,1
  90.                 EX AF,AF'
  91.                 LD A,4
  92. SDWRSN3         CALL COMM2SD
  93.                 EX AF,AF'
  94.                 PUSH DE
  95.                 PUSH BC
  96.                 LD BC,GSDAT
  97. SDWRSN1         EX AF,AF'
  98.                 OUT (GSCOM),A
  99.                 CALL WC_
  100.                 LD DE,0X0200
  101. SDWRSN2         OUTI
  102.                 CALL WD_
  103.                 DEC DE
  104.                 LD A,D
  105.                 OR E
  106.                 JR NZ,SDWRSN2
  107.                 EX AF,AF'
  108.                 DEC A
  109.                 JR NZ,SDWRSN1
  110.                 CALL WN_
  111.                 IN A,(C)
  112.                 CP 0X77
  113.                 JR NZ,$-4
  114.                 POP BC
  115.                 POP DE
  116.                 XOR A
  117.                 RET
  118.  
  119. ;ЧТЕНИЕ "A" СЕКТОРОВ
  120. SDRDMUL         EX AF,AF'
  121.                 LD A,3
  122.                 JR SDRDSN3
  123.  
  124. ;ЧТЕНИЕ ОДНОГО СЕКТОРА
  125. SDRDSIN         LD A,1
  126.                 EX AF,AF'
  127.                 LD A,2
  128. SDRDSN3         CALL COMM2SD
  129.                 EX AF,AF'
  130.                 PUSH DE
  131.                 PUSH BC
  132.                 LD BC,GSDAT
  133. SDRDSN1         EX AF,AF'
  134.                 OUT (GSCOM),A
  135.                 CALL WC_
  136.                 LD DE,0X0200
  137. SDRDSN2         CALL WN_
  138.                 INI
  139.                 DEC DE
  140.                 LD A,D
  141.                 OR E
  142.                 JR NZ,SDRDSN2
  143.                 EX AF,AF'
  144.                 DEC A
  145.                 JR NZ,SDRDSN1
  146.                 CALL WN_
  147.                 IN A,(C)
  148.                 CP 0X77
  149.                 JR NZ,$-4
  150.                 POP BC
  151.                 POP DE
  152.                 XOR A
  153.                 RET
  154.  
  155. GETMP3TYPE      LD A,6
  156.                 CALL COMM2SD
  157.                 LD BC,GSDAT
  158.                 LD A,0x77
  159.                 OUT (GSCOM),A
  160.                 CALL WN_
  161.                 IN A,(C)
  162.                 EX AF,AF'
  163. .L1             IN A,(C)
  164.                 CP 0X77
  165.                 JR NZ,.L1
  166.                 EX AF,AF'
  167.                 RET
  168.  
  169. ;ОТКЛЮЧЕНИЕ ВЫБОРА КАРТОЧКИ
  170. GSDOFF          LD A,1
  171.                 JR GSDINIT.L1
  172.  
  173. ;ИНИЦИАЛИЗАЦИЯ КАРТОЧКИ
  174. GSDINIT         XOR A
  175. .L1             CALL COMM2SD
  176.                 CALL WN_
  177.                 IN A,(GSDAT)
  178.                 CP 0X77
  179.                 LD A,1
  180.                 RET NZ
  181.                 XOR A
  182.                 RET
  183.  
  184. ;ПЕРЕДАТЧИК КОМАНД/ПАРАМЕТРОВ В ДРАЙВЕР НА NeoGS
  185. COMM2SD         OUT (GSDAT),A                   ;УШЛА КОМАНДА ДРАЙВЕРУ
  186.                 LD A,0X1E
  187.                 OUT (GSCOM),A
  188.                 CALL WC_                        ;УШЛА КОМАНДА ПРОШИВКЕ
  189.                 LD A,B
  190.                 OUT (GSDAT),A
  191.                 CALL WD_                        ;УШЛИ БИТЫ 31-24 ПАРАМЕТРОВ
  192.                 LD A,C
  193.                 OUT (GSDAT),A
  194.                 CALL WD_                        ;УШЛИ БИТЫ 23-16 ПАРАМЕТРОВ
  195.                 LD A,D
  196.                 OUT (GSDAT),A
  197.                 CALL WD_                        ;УШЛИ БИТЫ 15-8 ПАРАМЕТРОВ
  198.                 LD A,E
  199.                 OUT (GSDAT),A
  200.                 CALL WD_                        ;УШЛИ БИТЫ 7-0 ПАРАМЕТРОВ
  201.                 EX AF,AF'
  202.                 OUT (GSDAT),A
  203.                 EX AF,AF'
  204.                 DUPL 9,0
  205.                 RET                             ;УШЛО КОЛ-ВО СЕКТОРОВ
  206.  
  207. ;ОЖИДАНИЕ КОГДА NeoGS БАЙТ ЗАБЕРЕТ
  208. WD_             IN A,(GSCOM)
  209.                 RLA
  210.                 JR C,$-3
  211.                 RET
  212.  
  213. ;ОЖИДАНИЕ КОГДА NeoGS ДАСТ БАЙТ
  214. WN_             IN A,(GSCOM)
  215.                 RLA
  216.                 JR NC,$-3
  217.                 RET
  218.  
  219. ;ОЖИДАНИЕ КОГДА NeoGS КОМАНДУ ЗАБЕРЕТ
  220. WC_             IN A,(GSCOM)
  221.                 RRA
  222.                 JR C,$-3
  223.                 RET
  224. ;       DEPHASE
  225. END_COMSDG
  226.  
  227. ;УСТАНОВЩИК ДРАЙВЕРА НА NeoGS
  228. INSTSDD         LD BC,GSDAT
  229.                 IN A,(C)
  230.                 LD DE,UKLAD3 - UKLAD1           ; размер заливки
  231.                 LD HL,SETUPSD                   ; адрес заливки
  232.                 OUT (C),E
  233.                 LD A,0X14
  234.                 OUT (GSCOM),A
  235.                 CALL WC__
  236.                 OUT (C),D
  237.                 CALL WD__
  238.                 OUT (C),L
  239.                 CALL WD__
  240.                 OUT (C),H
  241.                 CALL WD__
  242.                 LD HL,UKLAD1
  243. ISDD3           OUTI
  244.                 CALL WD__
  245.                 DEC DE
  246.                 LD A,D
  247.                 OR E
  248.                 JR NZ,ISDD3
  249.                 LD HL,SETUPSD
  250.                 OUT (C),L
  251.                 LD A,0X13
  252.                 OUT (GSCOM),A
  253.                 CALL WC__
  254.                 OUT (C),H
  255.                 EI
  256.                 HALT
  257.                 HALT
  258.                 DI
  259.                 IN A,(GSDAT)
  260.                 CP 0X77
  261.                 LD A,1
  262.                 RET NZ
  263.                 XOR A
  264.                 RET
  265.  
  266. ;ОЖИДАНИЕ КОГДА NeoGS БАЙТ ЗАБЕРЕТ
  267. WD__            IN A,(GSCOM)
  268.                 RLA
  269.                 JR C,$-3
  270.                 RET
  271.  
  272. ;ОЖИДАНИЕ КОГДА NeoGS ДАСТ БАЙТ
  273. WN__            IN A,(GSCOM)
  274.                 RLA
  275.                 JR NC,$-3
  276.                 RET
  277.  
  278. ;ОЖИДАНИЕ КОГДА NeoGS КОМАНДУ ЗАБЕРЕТ
  279. WC__            IN A,(GSCOM)
  280.                 RRA
  281.                 JR C,$-3
  282.                 RET
  283.  
  284. ; ============== код на нгс =================
  285.  
  286.  INIT_VAR 0x4168
  287.  SETVAR MP3_CHIP_TYPE,          BYTE
  288.  
  289. UKLAD1                                          ;ОТКУДА КОД НА НГС ЗАКИДЫВАТЬ
  290.                 PHASE SETUPSD
  291. ;САМ УСТАНОВЩИК ДРАЙВЕРА ДЛЯ NeoGS
  292.                 DI
  293.                 LD A,0X9C
  294.                 OUT (SCTRL),A                   ;КОНФИГУРАТОР NeoGS
  295.                 CALL AVTODET
  296.                 AND A
  297.                 LD A,0X77                       ;0X77-NeoGS НАЙДЕН
  298.                 JR Z,$+4
  299.                 LD A,0XCC                       ;0XCC-НАЙДЕН OLDGS
  300.                 OUT (ZXDATWR),A
  301.                 OUT (CLRCBIT),A
  302.                 JP NZ,COMINT_
  303.                 DI
  304.                 IN A,(GSCFG0)
  305.                 RES B_RAMRO,A
  306.                 OUT (GSCFG0),A
  307.                 LD HL,0X1D00
  308.                 LD (0X0300+(0X1E*2)),HL
  309.                 LD DE,UKLAD2
  310.                 LD BC,GSDDRVE-GSDDRV
  311.                 EX DE,HL
  312.                 LDIR
  313.                 IN A,(GSCFG0)
  314.                 SET B_RAMRO,A
  315.                 OUT (GSCFG0),A
  316.                 JP COMINT_
  317.  
  318. ;ПРОВЕРКА ЧТО ЭТО NeoGS И ВКЛЮЧЕНИЕ ЧАСТОТЫ 24MHz
  319. AVTODET         IN A,(GSCFG0)
  320.                 AND 0XCF
  321.                 OUT (GSCFG0),A                  ;ОБРАТНАЯ ЗАПИСЬ В ПОРТ СО СБРОШЕННЫМИ
  322.                                                 ;БИТАМИ 5-4 ВКЛЮЧАЕТ ЧАСТОТУ ПРОЦЕССОРА РАВНЫМ 24 МГц
  323.                 LD D,A
  324.                 IN A,(GSCFG0)
  325.                 CP D
  326.                 LD A,0
  327.                 RET Z
  328.                 DEC A
  329.                 RET
  330. UKLAD2                                          ;ОТКУДА КОД ПЕРЕКИДЫВАТЬ
  331.                 DEPHASE
  332.  
  333.                 PHASE 0X1D00
  334. ;ОБЩАЯ ТОЧКА ВХОДА ДЛЯ РАБОТЫ С
  335. GSDDRV          DI
  336.                 IN A,(ZXDATRD)                  ;ПРИЕМ КОМАНДЫ ДРАЙВЕРА
  337.                 OUT (CLRCBIT),A                 ;СБРОС COMANDBIT
  338.                 LD HL,COMINT_
  339.                 PUSH HL
  340.                 ADD A,A
  341.                 LD E,A
  342.                 LD D,0
  343.                 LD HL,TABLSDG
  344.                 ADD HL,DE
  345.                 LD E,(HL)
  346.                 INC HL
  347.                 LD D,(HL)
  348.                 EX DE,HL
  349.                 CALL WDY
  350.                 IN A,(ZXDATRD)                  ;ПРИЕМ БИТОВ 31-24 ПАРАМЕТРА
  351.                 LD B,A
  352.                 CALL WDY
  353.                 IN A,(ZXDATRD)                  ;ПРИЕМ БИТОВ 23-16 ПАРАМЕТРА
  354.                 LD C,A
  355.                 CALL WDY
  356.                 IN A,(ZXDATRD)                  ;ПРИЕМ БИТОВ 15-8 ПАРАМЕТРА
  357.                 LD D,A
  358.                 CALL WDY
  359.                 IN A,(ZXDATRD)                  ;ПРИЕМ БИТОВ 7-0 ПАРАМЕТРА
  360.                 LD E,A
  361.                 CALL WDY
  362.                 IN A,(ZXDATRD)                  ;ПРИЕМ КОЛ-ВО СЕКТОРОВ
  363.                 JP (HL)
  364.  
  365. TABLSDG         DW SDINITG                      ; 00 ПАРАМЕТРОВ НЕ ТРЕБУЕТ, НА ВЫХОДЕ A
  366.                                                 ;    СМОТРИ ВЫШЕ ПЕРВЫЕ 2 ЗНАЧЕНИЯ
  367.                 DW SDOFFG                       ; 01 ПРОСТО СНЯТИЕ ВЫБОРА SD КАРТЫ
  368.                 DW RDSING                       ; 02 ЧИТАТЬ 1 СЕКТОР
  369.                 DW RDMULG                       ; 03 ЧИТАТЬ "A" СЕКТОРОВ
  370.                 DW OK_WORK;WRSING                       ; 04 ПИСАТЬ 1 СЕКТОР
  371.                 DW OK_WORK;WRMULG                       ; 05 ПИСАТЬ "A" СЕКТОРОВ
  372.                 DW GET_CHIPTYPE                 ; 06
  373.  
  374. GET_CHIPTYPE    CALL HARDMP3
  375. .L1             IN A,(ZXSTAT)
  376.                 RRA
  377.                 JR NC,.L1
  378.                 OUT (CLRCBIT),A
  379.                 LD A,(MP3_CHIP_TYPE)
  380.                 OUT (ZXDATWR),A
  381.                 CALL WDN
  382.                 JP OK_WORK
  383.  
  384. FREQNC          LD A,E
  385.                 LD D,C_10MHZ                    ; 0x30
  386.                 AND 3
  387.                 JR Z,.L1
  388.                 LD D,C_12MHZ                    ; 0x10
  389.                 DEC A
  390.                 JR Z,.L1
  391.                 LD D,C_20MHZ                    ; 0x20
  392.                 DEC A
  393.                 JR Z,.L1
  394.                 LD D,C_24MHZ                    ; 0
  395. .L1             IN A,(GSCFG0)
  396.                 AND %11001111
  397.                 OR D
  398.                 OUT (GSCFG0),A
  399.                 RET
  400.  
  401. ; полный сброс
  402. HARDMP3
  403. ;               CALL VOL_MOD                    ; заглушили громкость портов GS
  404.                 LD BC,MC_SEND
  405.                 LD A,%10011100                  ; 0x9C
  406.                 OUT (SCTRL),A
  407.                 LD E,0
  408.                 CALL FREQNC                     ; выставили частоту на NGS 10 МГц
  409.                 LD HL,VS10XX_READ << 8 + SCI_STATUS;0x0301
  410.                 CALL COM_MP3
  411.                 LD A,M_MPXRS
  412.                 OUT (SCTRL),A
  413.                 CALL NOPER
  414.                 LD A,M_MPXRS + M_SNCLR          ; 0x84
  415.                 OUT (SCTRL),A                   ; выдали сброс на декодер
  416. ;               CALL DRQVS
  417.                 CALL SET_CLOCKF
  418.                 CALL RTYPEVS
  419.                 LD A,(MP3_CHIP_TYPE)
  420.                 PUSH AF
  421.                 CP VS1001
  422.                 LD HL,VS10XX_WRITE << 8 + SCI_BASS; 0x0202
  423.                 LD DE,%1000000000001000         ; 0x8008
  424.                 CALL Z,COM_MP3                  ; для VS1001 запись недокументированного пинка в
  425.                                                 ; недокументированный регистр, если
  426.                                                 ; биты 7-4 регистра статуса в нуле
  427.                 LD HL,VS10XX_WRITE << 8 + SCI_MODE
  428.                 LD DE,0
  429.                 CALL COM_MP3
  430.                 POP AF
  431.                 CP VS1001
  432.                 JR Z,.L1
  433.                 LD HL,VS10XX_WRITE << 8 + SCI_AIADDR
  434.                 LD DE,0
  435.                 CALL COM_MP3
  436. .L1             LD E,0
  437.                 JP FREQNC                       ; выставили частоту на NGS 10 МГц
  438.  
  439. ; определение установленного чипа
  440. RTYPEVS         LD HL,VS10XX_READ << 8 + SCI_STATUS
  441.                 CALL COM_MP3
  442.                 LD A,E                                  ; нас интересуют биты 7-4 из регистра статуса
  443.                 AND SCISTATUS.M_SS_VER
  444.                 RRCA
  445.                 RRCA
  446.                 RRCA
  447.                 RRCA
  448.                 LD (MP3_CHIP_TYPE),A                    ; тип установленного MP3 чипа
  449.                 RET
  450.  
  451. ; SS_VER в битах 7-4
  452. TABL_CLOCK      DW 0x8000 + (14000000 / 2000)   ; 0 for VS1001  (MA8201)        9B58
  453.                 DW 0x8000 + (14000000 / 2000)   ; 1 for VS1011  (MA8201A)       9B58
  454.                 DW 0    ; 2 for VS1002  ; не поддерживается, не проверялся
  455.                 DW SC_MULT4 | SC_ADD3 | 1500    ; 3 for VS1003
  456.                 DW SC_MULT4 | SC_ADD1 | 1500    ; 4 for VS1053 and VS8053       ; пока не доделан
  457.                 DW 0    ; 5 for VS1033  ; не поддерживается, не проверялся
  458.                 DW SC_MULT4 | SC_ADD1 | 1500    ; 6 for VS1063  ; пока не доделан
  459.                 DW 0    ; 7 for VS1103  ; не поддерживается, не проверялся
  460.  
  461. ; установка частоты MP3 чипа
  462. SET_CLOCKF      LD A,(MP3_CHIP_TYPE)
  463.                 ADD A,A
  464.                 ADD A,LOW (TABL_CLOCK)
  465.                 LD L,A
  466.                 ADC A,HIGH (TABL_CLOCK)
  467.                 SUB L
  468.                 LD H,A
  469.                 LD E,(HL)
  470.                 INC HL
  471.                 LD D,(HL)
  472.                 LD HL,VS10XX_WRITE << 8 + SCI_CLOCKF;0x0202
  473.                 CALL COM_MP3                    ; установка частоты для декодера
  474.  
  475. ; ожидание готовности MP3 декодера
  476. DRQVS           IN A,(SSTAT)
  477.                 RRA                             ; B_MDDRQ
  478.                 JR NC,DRQVS                     ; дождались готовности декодера
  479.                 RET
  480.  
  481. ; процедура чтения/записи адресов MP3 декодера
  482. ; H - команда декодеру 3-READ или 2-WRITE
  483. ; L - адрес в декодере
  484. ; D - старший байт
  485. ; E - младший байт
  486. ; DE по записи подать на вход
  487. ;    по чтению получить на выходе
  488. COM_MP3         CALL DRQVS
  489.                 LD A,M_MCNCS
  490.                 OUT (SCTRL),A                   ; выбираем декодер и объясняем ему, что от него требуется
  491.                 CALL NOPER
  492.                 LD BC,MC_SEND
  493.                 LD A,H
  494.                 OUT (C),H
  495.                 CALL NOPER
  496.                 OUT (C),L
  497.                 CALL NOPER
  498.                 CP VS10XX_READ
  499.                 JR Z,MP3READ                    ; переходим на чтение (смотри выше)
  500.                 OUT (C),D
  501.                 CALL NOPER
  502.                 OUT (C),E                       ; записали в адрес декодера
  503. MP3_END
  504. ;               CALL NOPER
  505.                 CALL DRQVS
  506.                 LD A,M_MCNCS + M_SNCLR          ; 0x82 снимаем выбор декодера
  507.                 OUT (SCTRL),A
  508.                 RET
  509.  
  510.  
  511. ; ожидание готовности SPI MP3 чипа
  512. NOPER
  513.         REPT 18
  514.                 NOP
  515.         ENDM
  516.                 RET
  517.  
  518. ; читаем что затребовали
  519. MP3READ         LD BC,MC_READ
  520.                 LD A,0xFF
  521.                 OUT (MC_SEND),A
  522.                 CALL NOPER
  523.                 IN D,(C)
  524.                 CALL NOPER
  525.                 OUT (MC_SEND),A
  526.                 CALL NOPER
  527.                 IN E,(C)
  528.                 JR MP3_END
  529.  
  530. ZAW003G         CALL CSHIGHG
  531.                 LD A,0XEE
  532.                 JP OUTSTAT
  533.  
  534. SDINITG         CALL CSHIGHG
  535.                 LD BC,SD_SEND
  536.                 LD DE,0X20FF
  537.                 OUT (C),E
  538.                 DEC D
  539.                 JR NZ,$-3
  540.                 LD BC,SD_RSTR
  541.                 XOR A
  542.                 EX AF,AF'
  543. ZAW001G         LD HL,CMD00G
  544.                 CALL OUTCOMG
  545.                 CALL INOOUTG
  546.                 EX AF,AF'
  547.                 DEC A
  548.                 JR Z,ZAW003G
  549.                 EX AF,AF'
  550.                 DEC A
  551.                 JR NZ,ZAW001G
  552.                 LD HL,CMD08G
  553.                 CALL OUTCOMG
  554.                 CALL INOOUTG
  555.                 IN H,(C)
  556.                 NOP
  557.                 IN H,(C)
  558.                 NOP
  559.                 IN H,(C)
  560.                 NOP
  561.                 IN H,(C)
  562.                 LD HL,0
  563.                 BIT 2,A
  564.                 JR NZ,ZAW006G
  565.                 LD H,0X40
  566. ZAW006G         LD A,CMD_55
  567.                 CALL OUT_COG
  568.                 CALL INOOUTG
  569.                 LD BC,SD_SEND
  570.                 LD A,ACMD_41
  571.                 OUT (C),A
  572.                 NOP
  573.                 OUT (C),H
  574.                 NOP
  575.                 OUT (C),L
  576.                 NOP
  577.                 OUT (C),L
  578.                 NOP
  579.                 OUT (C),L
  580.                 LD A,0XFF
  581.                 OUT (C),A
  582.                 CALL INOOUTG
  583.                 AND A
  584.                 JR NZ,ZAW006G
  585. ZAW004G         LD A,CMD_59
  586.                 CALL OUT_COG
  587.                 CALL INOOUTG
  588.                 AND A
  589.                 JR NZ,ZAW004G
  590. ZAW005G         LD HL,CMD16G
  591.                 CALL OUTCOMG
  592.                 CALL INOOUTG
  593.                 AND A
  594.                 JR NZ,ZAW005G
  595.  
  596. SDOFFG          JP OK_WORK
  597.  
  598. CSHIGHG         PUSH AF
  599.                 LD A,M_SDNCS+M_SNCLR                    ;0X81
  600.                 OUT (SCTRL),A
  601.                 POP AF
  602.                 RET
  603.  
  604. CSLOWG          PUSH AF
  605.                 LD A,M_SDNCS                            ;1
  606.                 OUT (SCTRL),A
  607.                 POP AF
  608.                 RET
  609.  
  610. OUTCOMG         CALL CSLOWG
  611.                 PUSH BC
  612.                 LD BC,0X0600+SD_SEND
  613.                 OTIR
  614.                 POP BC
  615.                 RET
  616.  
  617. OUT_COG         PUSH BC
  618.                 CALL CSLOWG
  619.                 LD BC,SD_SEND
  620.                 OUT (C),A
  621.                 XOR A
  622.                 OUT (C),A
  623.                 NOP
  624.                 OUT (C),A
  625.                 NOP
  626.                 OUT (C),A
  627.                 NOP
  628.                 OUT (C),A
  629.                 DEC A
  630.                 OUT (C),A
  631.                 POP BC
  632.                 RET
  633.  
  634. SECM20G         PUSH HL
  635.                 PUSH DE
  636.                 PUSH BC
  637.                 PUSH AF
  638.                 PUSH BC
  639.                 LD A,CMD_58
  640.                 LD BC,SD_RSTR
  641.                 CALL OUT_COG
  642.                 CALL INOOUTG
  643.                 IN A,(C)
  644.                 NOP
  645.                 IN H,(C)
  646.                 NOP
  647.                 IN H,(C)
  648.                 NOP
  649.                 IN H,(C)
  650.                 BIT 6,A
  651.                 POP HL
  652.                 JR NZ,SECN20G
  653.                 EX DE,HL
  654.                 ADD HL,HL
  655.                 EX DE,HL
  656.                 ADC HL,HL
  657.                 LD H,L
  658.                 LD L,D
  659.                 LD D,E
  660.                 LD E,0
  661. SECN20G         POP AF
  662.                 LD BC,SD_SEND
  663.                 OUT (C),A
  664.                 NOP
  665.                 OUT (C),H
  666.                 NOP
  667.                 OUT (C),L
  668.                 NOP
  669.                 OUT (C),D
  670.                 NOP
  671.                 OUT (C),E
  672.                 LD A,0XFF
  673.                 OUT (C),A
  674.                 POP BC
  675.                 POP DE
  676.                 POP HL
  677.                 RET
  678.  
  679. INOOUTG         PUSH DE
  680.                 LD DE,0X80FF
  681. INWAITG         IN A,(SD_RSTR)
  682.                 CP E
  683.                 JR NZ,INEXITG
  684.                 DEC D
  685.                 JR NZ,INWAITG
  686. INEXITG         POP DE
  687.                 RET
  688.  
  689. CMD00G          DB 0X40,0X00,0X00,0X00,0X00,0X95        ;GO_IDLE_STATE
  690. CMD08G          DB 0X48,0X00,0X00,0X01,0XAA,0X87        ;SEND_IF_COND
  691. CMD16G          DB 0X50,0X00,0X00,0X02,0X00,0XFF        ;SET_BLOCKEN
  692.  
  693.         IF 0
  694. ;ПЕРЕДАЧА ОДНОГО СЕКТОРА В SD КАРТУ
  695. WRSECTG         LD BC,SD_SEND
  696.                 OUT (C),A
  697.                 IN A,(ZXSTAT)
  698.                 RRA
  699.                 JR NC,$-3
  700.                 OUT (CLRCBIT),A
  701.                 LD HL,0X0200
  702.                 CALL WDY
  703.                 IN A,(ZXDATRD)
  704.                 DEC HL
  705.                 OUT (C),A
  706.                 LD A,H
  707.                 OR L
  708.                 JR NZ,$-10
  709.                 LD A,0XFF
  710.                 OUT (C),A
  711.                 NOP
  712.                 OUT (C),A
  713.                 RET
  714.         ENDIF
  715.  
  716. ;ПЕРЕДАЧА ОДНОГО СЕКТОРА НА СПЕК
  717. RDSECTG         IN A,(ZXSTAT)
  718.                 RRA
  719.                 JR NC,$-3
  720.                 OUT (CLRCBIT),A
  721.                 LD BC,SD_RSTR
  722.                 LD HL,0X0200
  723.                 IN A,(C)
  724.                 DEC HL
  725.                 OUT (ZXDATWR),A
  726.                 CALL WDN
  727.                 LD A,H
  728.                 OR L
  729.                 JR NZ,$-10
  730.                 IN A,(C)
  731.                 NOP
  732.                 IN A,(C)
  733.                 RET
  734.  
  735. ;ЗАГРУЗКА ОДНОГО СЕКТОРА
  736. RDSING          LD A,CMD_17
  737.                 CALL SECM20G
  738.                 CALL INOOUTG
  739.                 CP 0XFE
  740.                 JR NZ,$-5
  741.                 CALL RDSECTG
  742.                 CALL INOOUTG
  743.                 INC A
  744.                 JR NZ,$-4
  745.                 JR OK_WORK
  746.  
  747. ;ЗАГРУЗКА "A" СЕКТОРОВ
  748. RDMULG          EX AF,AF'
  749.                 LD A,CMD_18
  750.                 CALL SECM20G
  751.                 EX AF,AF'
  752. RDMULG1         EX AF,AF'
  753.                 CALL INOOUTG
  754.                 CP 0XFE
  755.                 JR NZ,$-5
  756.                 CALL RDSECTG
  757.                 EX AF,AF'
  758.                 DEC A
  759.                 JR NZ,RDMULG1
  760.                 LD A,CMD_12
  761.                 CALL OUT_COG
  762.                 CALL INOOUTG
  763.                 INC A
  764.                 JR NZ,$-4
  765.                 JR OK_WORK
  766.  
  767.         IF 0
  768. ;ЗАПИСЬ ОДНОГО СЕКТОРА
  769. WRSING          LD A,CMD_24
  770.                 CALL SECM20G
  771.                 CALL INOOUTG
  772.                 INC A
  773.                 JR NZ,$-4
  774.                 LD A,0XFE
  775.                 CALL WRSECTG
  776.                 CALL INOOUTG
  777.                 INC A
  778.                 JR NZ,$-4
  779.                 JR OK_WORK
  780.  
  781. ;ЗАПИСЬ "A" СЕКТОРОВ
  782. WRMULG          EX AF,AF'
  783.                 LD A,CMD_25
  784.                 CALL SECM20G
  785.                 CALL INOOUTG
  786.                 INC A
  787.                 JR NZ,$-4
  788.                 EX AF,AF'
  789. WRMULG1         EX AF,AF'
  790.                 LD A,0XFC
  791.                 CALL WRSECTG
  792.                 CALL INOOUTG
  793.                 INC A
  794.                 JR NZ,$-4
  795.                 EX AF,AF'
  796.                 DEC A
  797.                 JR NZ,WRMULG1
  798.                 LD C,SD_SEND
  799.                 LD A,0XFD
  800.                 OUT (C),A
  801.                 CALL INOOUTG
  802.                 INC A
  803.                 JR NZ,$-4
  804.         ENDIF
  805. OK_WORK         CALL CSHIGHG
  806.                 LD A,0X77
  807. OUTSTAT         OUT (ZXDATWR),A
  808. ;ОЖИДАНИЕ КОГДА СПЕК ЗАБЕРЕТ БАЙТ ДАННЫХ
  809. WDN             IN A,(ZXSTAT)
  810.                 RLA
  811.                 JR C,WDN
  812.                 RET
  813.  
  814. ;ОЖИДАНИЕ КОГДА СПЕК ДАСТ БАЙТ ДАННЫХ
  815. WDY             IN A,(ZXSTAT)
  816.                 RLA
  817.                 JR NC,WDY
  818.                 RET
  819. GSDDRVE
  820.                 DEPHASE
  821. UKLAD3
  822.