Subversion Repositories ngs

Rev

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

  1.  
  2. ;LAST UPDATE: 24.05.2013 savelij
  3. ;version 08.02.2009
  4.  
  5. ;ДРАЙВЕР SD-CARD ДЛЯ NGS
  6. ;+ДРАЙВЕР ДЛЯ MP3-ДЕКОДЕРА
  7.  
  8. ;Входные параметры общие:
  9. ;HL-адрес загрузки в память
  10. ;BCDE-32-х битный номер сектора
  11. ;A-количество блоков (блок=512 байт)
  12. ;только для многоблочной записи/чтении
  13.  
  14. ;Ошибки выдаваемые на выходе:
  15. ;A=0-инициализация прошла успешно
  16. ;A=1-карта не найдена или не ответила
  17. ;A=2-карта защищена от записи
  18. ;A=3-попытка записи в сектор 0 карты
  19.  
  20. ;INCL "PORTSNGS"
  21.  
  22. CMD_12          EQU 0X4C        ;STOP_TRANSMISSION
  23. CMD_17          EQU 0X51        ;READ_SINGLE_BLOCK
  24. CMD_18          EQU 0X52        ;READ_MULTIPLE_BLOCK
  25. CMD_24          EQU 0X58        ;WRITE_BLOCK
  26. CMD_25          EQU 0X59        ;WRITE_MULTIPLE_BLOCK
  27. CMD_55          EQU 0X77        ;APP_CMD
  28. CMD_58          EQU 0X7A        ;READ_OCR
  29. CMD_59          EQU 0X7B        ;CRC_ON_OFF
  30. ACMD_41         EQU 0X69        ;SD_SEND_OP_COND
  31.  
  32. ;ОБЩАЯ ТОЧКА ВХОДА ДЛЯ РАБОТЫ С
  33.                 EXX
  34.                 PUSH HL
  35.                 PUSH DE
  36.                 ADD A,A
  37.                 LD L,A
  38.                 LD H,0
  39.                 LD DE,TABL_SD
  40.                 ADD HL,DE
  41.                 EX AF,AF'
  42.                 LD E,(HL)
  43.                 INC HL
  44.                 LD D,(HL)
  45.                 EX DE,HL
  46.                 POP DE
  47.                 EX (SP),HL
  48.                 EXX
  49.                 RET
  50.  
  51. TABL_SD         DW SD_INIT      ;0
  52. ;параметров не требует, на выходе A
  53. ;смотри выше первые 2 значения
  54.                 DW SD__OFF      ;1
  55. ;просто снятие выбора SD карты
  56.                 DW RDSINGL      ;2 ЧИТАТЬ 1 СЕКТОР
  57.                 DW EMPTY        ;3 ЧИТАТЬ "A" СЕКТОРОВ
  58.                 DW EMPTY        ;4 ПИСАТЬ 1 СЕКТОР
  59.                 DW EMPTY        ;5 ПИСАТЬ "A" СЕКТОРОВ
  60.                 DW AVTODET      ;6-АВТОДЕТЕКТ
  61.                 DW FREQNC       ;7-ЗАДАЧА ЧАСТОТЫ
  62.                 DW HARDMP3      ;8 INIT MP3-ДЕКОДЕРА
  63.                 DW LDI_MP3      ;9 ГОН С SD НА MP3
  64.                 DW COM_MP3      ;0XA RD&WR В MP3-ДЕКОД
  65.                 DW SOFTMP3      ;0XB SOFT RESET MP3CHIP
  66.                 DW DAT2MP3      ;0XC ГОН С GSDAT2MP3
  67.                 DW ZER2MP3      ;0XD 2048 НУЛЕЙ НА MP3
  68.  
  69. EMPTY           RET
  70.  
  71. ZAW003          CALL SD__OFF
  72.                 LD A,1
  73.                 RET
  74.  
  75. SD_INIT         CALL CS_HIGH
  76.                 LD BC,SD_SEND
  77.                 LD DE,0X20FF
  78.                 OUT (C),E
  79.                 DEC D
  80.                 JR NZ,$-3
  81.                 LD BC,SD_RSTR
  82.                 XOR A
  83.                 EX AF,AF'
  84. ZAW001          LD HL,CMD00
  85.                 CALL OUTCOM
  86.                 CALL IN_OOUT
  87.                 EX AF,AF'
  88.                 DEC A
  89.                 JR Z,ZAW003
  90.                 EX AF,AF'
  91.                 DEC A
  92.                 JR NZ,ZAW001
  93.                 LD HL,CMD08
  94.                 CALL OUTCOM
  95.                 CALL IN_OOUT
  96.                 IN H,(C)
  97.                 NOP
  98.                 IN H,(C)
  99.                 NOP
  100.                 IN H,(C)
  101.                 NOP
  102.                 IN H,(C)
  103.                 LD HL,0
  104.                 BIT 2,A
  105.                 JR NZ,ZAW006
  106.                 LD H,0X40
  107. ZAW006          LD A,CMD_55
  108.                 CALL OUT_COM
  109.                 CALL IN_OOUT
  110.                 LD BC,SD_SEND
  111.                 LD A,ACMD_41
  112.                 OUT (C),A
  113.                 NOP
  114.                 OUT (C),H
  115.                 NOP
  116.                 OUT (C),L
  117.                 NOP
  118.                 OUT (C),L
  119.                 NOP
  120.                 OUT (C),L
  121.                 LD A,0XFF
  122.                 OUT (C),A
  123.                 CALL IN_OOUT
  124.                 AND A
  125.                 JR NZ,ZAW006
  126. ZAW004          LD A,CMD_59
  127.                 CALL OUT_COM
  128.                 CALL IN_OOUT
  129.                 AND A
  130.                 JR NZ,ZAW004
  131. ZAW005          LD HL,CMD16
  132.                 CALL OUTCOM
  133.                 CALL IN_OOUT
  134.                 AND A
  135.                 JR NZ,ZAW005
  136.  
  137. CS_HIGH         PUSH DE
  138.                 PUSH BC
  139.                 LD E,M_SDNCS+M_SNCLR;0X81
  140.                 LD BC,SCTRL
  141.                 OUT (C),E
  142.                 POP BC
  143.                 POP DE
  144.                 RET
  145.  
  146. SD__OFF         LD A,M_SDNCS+M_SNCLR;0X81
  147.                 OUT (SCTRL),A
  148.                 RET
  149.  
  150. CS__LOW         PUSH DE
  151.                 PUSH BC
  152.                 LD E,M_SDNCS;1
  153.                 LD BC,SCTRL
  154.                 OUT (C),E
  155.                 POP BC
  156.                 POP DE
  157.                 RET
  158.  
  159. OUTCOM          CALL CS__LOW
  160.                 PUSH BC
  161.                 LD BC,SD_SEND
  162.                 OUTI
  163.                 NOP
  164.                 OUTI
  165.                 NOP
  166.                 OUTI
  167.                 NOP
  168.                 OUTI
  169.                 NOP
  170.                 OUTI
  171.                 NOP
  172.                 OUTI
  173.                 POP BC
  174.                 RET
  175.  
  176. OUT_COM         PUSH BC
  177.                 CALL CS__LOW
  178.                 LD BC,SD_SEND
  179.                 OUT (C),A
  180.                 XOR A
  181.                 OUT (C),A
  182.                 NOP
  183.                 OUT (C),A
  184.                 NOP
  185.                 OUT (C),A
  186.                 NOP
  187.                 OUT (C),A
  188.                 DEC A
  189.                 OUT (C),A
  190.                 POP BC
  191.                 RET
  192.  
  193. SECM200         PUSH HL
  194.                 PUSH DE
  195.                 PUSH BC
  196.                 PUSH AF
  197.                 PUSH BC
  198.                 LD A,CMD_58
  199.                 LD BC,SD_RSTR
  200.                 CALL OUT_COM
  201.                 CALL IN_OOUT
  202.                 IN A,(C)
  203.                 NOP
  204.                 IN H,(C)
  205.                 NOP
  206.                 IN H,(C)
  207.                 NOP
  208.                 IN H,(C)
  209.                 BIT 6,A
  210.                 POP HL
  211.                 JR NZ,SECN200
  212.                 EX DE,HL
  213.                 ADD HL,HL
  214.                 EX DE,HL
  215.                 ADC HL,HL
  216.                 LD H,L
  217.                 LD L,D
  218.                 LD D,E
  219.                 LD E,0
  220. SECN200         POP AF
  221.                 LD BC,SD_SEND
  222.                 OUT (C),A
  223.                 NOP
  224.                 OUT (C),H
  225.                 NOP
  226.                 OUT (C),L
  227.                 NOP
  228.                 OUT (C),D
  229.                 NOP
  230.                 OUT (C),E
  231.                 LD A,0XFF
  232.                 OUT (C),A
  233.                 POP BC
  234.                 POP DE
  235.                 POP HL
  236.                 RET
  237.  
  238. IN_OOUT         PUSH BC
  239.                 PUSH DE
  240.                 LD DE,0X20FF
  241.                 LD BC,SD_RSTR
  242. IN_WAIT         IN A,(C)
  243.                 CP E
  244.                 JR NZ,IN_EXIT
  245.                 DEC D
  246.                 JR NZ,IN_WAIT
  247. IN_EXIT         POP DE
  248.                 POP BC
  249.                 RET
  250.  
  251. CMD00           DB 0X40,0X00,0X00,0X00,0X00,0X95
  252. ;GO_IDLE_STATE
  253. CMD08           DB 0X48,0X00,0X00,0X01,0XAA,0X87
  254. ;SEND_IF_COND
  255. CMD16           DB 0X50,0X00,0X00,0X02,0X00,0XFF
  256. ;SET_BLOCKEN
  257.  
  258. RD_SECT         PUSH BC
  259.                 PUSH DE
  260.                 LD BC,SD_RSTR
  261.                 INIR
  262.                 INIR
  263.                 JR RDSECT3
  264.  
  265. RON_MP3         PUSH BC
  266.                 PUSH DE
  267.                 LD BC,SD_RSTR
  268.                 LD D,0X10
  269. RDSECT2         IN A,(SSTAT)
  270.                 RRA
  271.                 JR NC,$-3
  272.                 LD E,0X20
  273. RDSECT1         IN A,(C)
  274.                 NOP
  275.                 OUT (MD_SEND),A
  276.                 DEC E
  277.                 JR NZ,RDSECT1
  278.                 DEC D
  279.                 JR NZ,RDSECT2
  280. RDSECT3         IN A,(C)
  281.                 NOP
  282.                 IN A,(C)
  283.                 POP DE
  284.                 POP BC
  285.                 RET
  286.  
  287. LDI_MP3         LD A,CMD_17
  288.                 CALL SECM200
  289.                 CALL IN_OOUT
  290.                 CP 0XFE
  291.                 JR NZ,$-5
  292.                 CALL RON_MP3
  293.                 CALL IN_OOUT
  294.                 INC A
  295.                 JR NZ,$-4
  296.                 JP CS_HIGH
  297.  
  298. RDSINGL         LD A,CMD_17
  299.                 CALL SECM200
  300.                 CALL IN_OOUT
  301.                 CP 0XFE
  302.                 JR NZ,$-5
  303.                 CALL RD_SECT
  304.                 CALL IN_OOUT
  305.                 INC A
  306.                 JR NZ,$-4
  307.                 JP CS_HIGH
  308.  
  309. ;ОЖИДАНИЕ ГОТОВНОСТИ SPI MP3 ЧИПА
  310. NOPER           DUPL 18,0
  311.                 RET
  312.  
  313.                 IN A,(SSTAT)
  314.                 AND M_MCRDY
  315.                 JR Z,NOPER
  316.                 RET
  317.  
  318. AVTODET         IN A,(GSCFG0)
  319.                 AND 0XCF
  320.                 OUT (GSCFG0),A
  321.                 CALL NOPER
  322.                 LD D,A
  323.                 IN A,(GSCFG0)
  324.                 CP D
  325.                 LD A,0
  326.                 RET Z
  327. NO_MP3          LD A,0XFF
  328.                 RET
  329.  
  330. FREQNC          LD D,C_10MHZ;0X30
  331.                 AND 3
  332.                 JR Z,FREQNCS
  333.                 LD D,C_12MHZ;0X10
  334.                 DEC A
  335.                 JR Z,FREQNCS
  336.                 LD D,C_20MHZ;0X20
  337.                 DEC A
  338.                 JR Z,FREQNCS
  339.                 LD D,C_24MHZ;0
  340. FREQNCS         IN A,(GSCFG0)
  341.                 AND 0XCF
  342.                 OR D
  343.                 OUT (GSCFG0),A
  344.                 RET
  345.  
  346. ;ЗАПИСЫВАЕМ 2048 НУЛЕЙ КАК ЗАВЕРШЕНИЕ
  347. ;ПЕСЕНКИ
  348. ZER2MP3         LD D,0X40
  349. ZR2MP31         IN A,(SSTAT)
  350.                 RRA
  351.                 JR NC,$-3
  352.                 LD E,0X20
  353.                 XOR A
  354.                 OUT (MD_SEND),A
  355.                 DEC E
  356.                 JR NZ,$-4
  357.                 DEC D
  358.                 JR NZ,ZR2MP31
  359.                 RET
  360.  
  361. ;ПОЛНЫЙ СБРОС
  362. HARDMP3         XOR A
  363.                 CALL VOL_MOD
  364. ;ЗАГЛУШИЛИ ГРОМКОСТЬ ПОРТОВ GS
  365.                 LD BC,MC_SEND
  366.                 LD A,%10011100;0X9C
  367.                 OUT (SCTRL),A
  368.                 XOR A
  369.                 CALL FREQNC
  370. ;ВЫСТАВИЛИ ЧАСТОТУ НА NGS 10 МГц
  371.                 LD HL,0X0301
  372.                 CALL COM_MP3
  373.                 LD A,E
  374.                 AND %01110000
  375.                 PUSH AF
  376.                 LD A,M_MPXRS
  377.                 OUT (SCTRL),A
  378.                 CALL NOPER
  379.                 LD A,M_MPXRS+M_SNCLR;0X84
  380.                 OUT (SCTRL),A
  381. ;ВЫДАЛИ СБРОС НА ДЕКОДЕР
  382.                 IN A,(SSTAT)
  383.                 RRA
  384.                 JR NC,$-3
  385. ;ДОЖДАЛИСЬ ГОТОВНОСТИ ДЕКОДЕРА
  386.                 LD HL,0X0203
  387.                 LD DE,0X9B58
  388.                 CALL COM_MP3
  389. ;ВЫСТАВИЛИ НА ДЕКОДЕРЕ ЧАСТОТУ 14 МГц
  390.                 POP AF
  391. ;ЗДЕСЬ ПОШЛА ИНИЦИАЛИЗАЦИЯ ДЛЯ VS1001
  392.                 LD HL,0X0202
  393.                 LD DE,0X8008
  394.                 CALL Z,COM_MP3
  395. ;ЗАПИСЬ НЕДОКУМЕНТИРОВАННОГО ПИНКА В
  396. ;НЕДОКУМЕНТИРОВАННЫЙ РЕГИСТР, ЕСЛИ
  397. ;БИТЫ 6-4 РЕГИСТРА СТАТУСА В НУЛЕ
  398.                 LD A,1
  399.                 JP FREQNC
  400. ;ВЫСТАВИЛИ ЧАСТОТУ НА NGS 12 МГц
  401.  
  402. ;ПРОГРАММНЫЙ СБРОС MP3 ДЕКОДЕРА
  403. ;РЕКОМЕНДУЕТСЯ ВЫЗЫВАТЬ ПЕРЕД КАЖДЫМ
  404. ;НОВЫМ ФАЙЛОМ, СБРАСЫВАЕТ СЧЕТЧИК СЕКУНД
  405. ;ПОСЛЕ ПРОГРАММНОГО СБРОСА ВСЕ
  406. ;УСТАНОВЛЕННЫЕ РЕЖИМЫ ДЕКОДЕРА
  407. ;НЕ ИЗМЕНЯЮТСЯ
  408. SOFTMP3         LD BC,MC_SEND
  409.                 LD HL,0X030B
  410.                 CALL COM_MP3
  411. ;СНИМАЕМ ТЕКУЩЕЕ ЗНАЧЕНИЕ ГРОМКОСТИ
  412.                 PUSH DE
  413.                 LD DE,0XFEFE
  414. ;И СОХРАНЯЕМ ЕГО ДО ЛУЧШИХ ВРЕМЕН
  415.                 LD HL,0X020B
  416.                 CALL COM_MP3
  417. ;УМЕНЬШАЕМ ГРОМКОСТЬ ДО МИНИМУМА
  418.                 LD HL,0X0301
  419.                 CALL COM_MP3
  420.                 LD A,E
  421.                 AND %01110000
  422.                 PUSH AF
  423.                 LD HL,0X0300
  424.                 CALL COM_MP3
  425. ;ЧИТАЕМ СОСТОЯНИЕ MODE
  426.                 LD A,4
  427.                 XOR E
  428.                 LD E,A
  429.                 LD HL,0X0200
  430.                 CALL COM_MP3
  431.                 LD A,4
  432.                 XOR E
  433.                 LD E,A
  434.                 LD HL,0X0200
  435.                 CALL COM_MP3
  436. ;ДАЕМ КОМАНДУ СОФТ-СБРОСА
  437.                 IN A,(SSTAT)
  438.                 RRA
  439.                 JR NC,$-3
  440. ;ЖДЕМ ОСВОБОЖДЕНИЯ ДЕКОДЕРА
  441.                 LD HL,0X0203
  442.                 LD DE,0X9B58
  443.                 CALL COM_MP3
  444. ;ВЫСТАВЛЯЕМ ЧАСТОТУ ПОСЛЕ ИНИЦИАЛИЗАЦИИ
  445. ;MP3 ДЕКОДЕРА
  446.                 POP AF
  447.                 LD HL,0X0202
  448.                 LD DE,0X8008
  449.                 CALL Z,COM_MP3
  450. ;НЕДОКУМЕНТИРОВАННЫЙ ПИНОК MP3 ДЕКОДЕРА
  451.                 POP DE
  452.                 LD HL,0X020B
  453.                 JR COM_MP3
  454. ;ВОССТАНАВЛИВАЕМ ГРОМКОСТЬ ДО СБРОСА
  455.  
  456. ;ГЛУШИМ ГРОМКОСТЬ MOD ПОРТОВ
  457. VOL_MOD         OUT (VOL1),A
  458.                 OUT (VOL2),A
  459.                 OUT (VOL3),A
  460.                 OUT (VOL4),A
  461.                 OUT (VOL5),A
  462.                 OUT (VOL6),A
  463.                 OUT (VOL7),A
  464.                 OUT (VOL8),A
  465.                 RET
  466.  
  467. ; ПРОЦЕДУРА ЧТЕНИЯ/ЗАПИСИ АДРЕСОВ
  468. ; MP3 ДЕКОДЕРА
  469. ; H-КОМАНДА ДЕКОДЕРУ 3-READ ИЛИ 2-WRITE
  470. ; L-АДРЕС В ДЕКОДЕРЕ
  471. ; D-СТАРШИЙ БАЙТ
  472. ; E-МЛАДШИЙ БАЙТ
  473. ; DE ПО ЗАПИСИ ПОДАТЬ НА ВХОД
  474. ;    ПО ЧТЕНИЮ ПОЛУЧИТЬ НА ВЫХОДЕ
  475. COM_MP3         IN A,(SSTAT)
  476.                 RRA
  477.                 JR NC,$-3
  478. ; ДЕКОДЕР СВОБОДЕН
  479.                 LD A,M_MCNCS
  480.                 OUT (SCTRL),A
  481. ; ВЫБИРАЕМ ДЕКОДЕР И ОБЪЯСНЯЕМ ЕМУ
  482. ; ЧТО ОТ НЕГО ТРЕБУЕТСЯ
  483.                 CALL NOPER
  484.                 LD BC,MC_SEND
  485.                 LD A,H
  486.                 OUT (C),H
  487.                 CALL NOPER
  488.                 OUT (C),L
  489.                 CALL NOPER
  490.                 CP 3
  491.                 JR Z,MP3READ
  492. ; ПЕРЕХОДИМ НА ЧТЕНИЕ (СМОТРИ ВЫШЕ)
  493.                 OUT (C),D
  494.                 CALL NOPER
  495.                 OUT (C),E
  496. ; ЗАПИСАЛИ В АДРЕС ДЕКОДЕРА
  497. MP3_END         CALL NOPER
  498.                 LD A,M_MCNCS+M_SNCLR;0X82
  499. ; СНИМАЕМ ВЫБОР ДЕКОДЕРА
  500.                 OUT (SCTRL),A
  501.                 RET
  502.  
  503. MP3READ ;ЧИТАЕМ ЧТО ЗАТРЕБОВАЛИ
  504.                 LD BC,MC_READ
  505.                 LD A,0XFF
  506.                 OUT (MC_SEND),A
  507.                 CALL NOPER
  508.                 IN D,(C)
  509.                 CALL NOPER
  510.                 OUT (MC_SEND),A
  511.                 CALL NOPER
  512.                 IN E,(C)
  513.                 JR MP3_END
  514.  
  515. ; ПРОЦЕДУРА ПЕРЕСЫЛКИ БАЙТОВ СО СПЕКА
  516. ; ЧЕРЕЗ ПОРТЫ ГС НА MP3 ДЕКОДЕР
  517. ; ПЕРЕСЫЛАЕТСЯ 512 БАЙТ
  518. DAT2MP3         LD D,0X10
  519. ; ПЕРЕГНАТЬ НА ДЕКОДЕР 16 ПОРЦИЙ
  520. DAT2M03         IN A,(SSTAT)
  521.                 RRA
  522.                 JR NC,$-3
  523. ; ДЕКОДЕР СВОБОДЕН
  524.                 LD B,0X20
  525. ; ОДНА ПОРЦИЯ 32 БАЙТА
  526. DAT2M13         IN A,(ZXSTAT)
  527.                 RLA
  528.                 JR NC,$-3
  529. ; ДОЖДАЛИСЬ ПОДАЧИ ОТ СПЕКА
  530.                 IN A,(ZXDATRD); ЗАБРАЛИ БАЙТ
  531.                 OUT (MD_SEND),A; ОТДАЛИ ДЕКОДЕРУ
  532.                 NOP;ВЫДЕРЖАЛИ ПАУЗУ ПО ТАКТАМ
  533.                 DJNZ DAT2M13; ПОРЦИЯ КОНЧИЛАСЬ
  534.                 DEC D
  535.                 JR NZ,DAT2M03
  536.                 RET;512 БАЙТ ПЕРЕДАНО!!!
  537.