Subversion Repositories ngs

Rev

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

  1.  
  2. ;LAST UPDATE: 24.05.2013 savelij
  3. ;version 06.03.2009
  4.  
  5. ;КОД ДЛЯ НГС
  6.  
  7.                 include macros.a80
  8.                 include ports_ngs.a80   ;INCL "PORTSNGS"
  9.  
  10. BUF_LNG         EQU 0X4000
  11. ;БУФЕР ДЛЯ ПЕРЕКОД. ДЛИННОГО ИМЕНИ
  12. GSSTEK          EQU 0X41DF
  13. ;ВЕРШИНА СТЕКА
  14.  
  15. ;НЕКОТОРЫЕ ПЕРЕМЕННЫЕ
  16. REJIMGS         EQU 0X41E0
  17. ;1 КОД ОТВЕТА
  18. KOLWMP3         EQU REJIMGS+1
  19. ;2 КОЛИЧЕСТВО MP3
  20. CALBFAT         EQU KOLWMP3+2
  21. ;1 КАЛИБР FAT
  22. BUFTIME         EQU CALBFAT+1
  23. ;8 БУФЕР ДЛЯ ТЕКСТА
  24.  
  25. ;АДРЕС УКЛАДКИ ТАБЛИЦ (DIR&MP3)
  26. FORFILE         EQU 0X8000
  27.  
  28. ;СТРАНИЦЫ ДОЛЖНЫ БЫТЬ ТОЛЬКО НЕЧЕТНЫМИ
  29. PG4MP3          EQU 3
  30. ;СТРАНИЦА УКЛАДКИ ОПИСАТЕЛЕЙ ФАЙЛОВ
  31. ;ДЕФОЛТНАЯ СТРАНИЧКА
  32. PG4DIR          EQU 5
  33. ;СТРАНИЦА УКЛАДКИ ОПИСАТЕЛЕЙ DIR
  34. ;ВРЕМЕННАЯ СТРАНИЧКА
  35.  
  36.                 ORG 0X4600;,0X8000
  37. ;КОМПИЛЯЦИЯ ПОД АДРЕС ДЛЯ NeoGS 0X4600
  38. ;ОТКОМПИЛЕННОЕ УКЛАДАЕМ С АДРЕСА 0X8000
  39.  
  40. START           DI
  41.                 LD A,PG4MP3
  42.                 OUT (MPAG),A
  43. ;ВКЛЮЧИЛИ ДЕФОЛТНУЮ СТРАНИЦУ
  44.                 LD A,6
  45.                 CALL COM__SD
  46.                 AND A
  47. ;ОПРЕДЕЛЯЕМ GS/NeoGS
  48.                 JR Z,INI_MP3
  49.                 LD A,0XCC
  50.                 JR START4
  51. ;КОД ОШИБКИ =GS
  52.  
  53. INI_MP3         LD A,8
  54.                 CALL COM__SD
  55. ;ИНИЦИАЛИЗАЦИЯ MP3 ЧИПА
  56. INI__SD         LD SP,GSSTEK
  57.                 IN A,(DPORT1)
  58. START2          XOR A
  59.                 CALL COM__SD
  60.                 AND A
  61. ;ИНИЦИАЛИЗАЦИЯ SD КАРТЫ
  62.                 JR Z,START1
  63.                 LD A,0XEE
  64.                 LD (CALBFAT),A
  65.                 JR START4
  66. ;КОД ОШИБКИ =SD КАРТА НЕ НАЙДЕНА
  67. START1          XOR A
  68.                 CALL COM_FAT
  69. ;ИНИЦИАЛИЗАЦИЯ FAT
  70.                 LD (CALBFAT),A
  71.                 INC A
  72.                 JR NZ,START3
  73.                 LD A,0XDD
  74.                 JR START4
  75. ;КОД ОШИБКИ =FAT НЕ НАЙДЕН
  76.  
  77. START3          CALL CP_XB
  78.                 CALL RTYPEVS
  79.                 LD A,3
  80.                 CALL COM_FAT
  81. ;ПОИСК ВСЕХ ДИРЕКТОРИЙ
  82.                 LD A,4
  83.                 CALL COM_FAT
  84. ;ПОИСК ВСЕХ ФАЙЛОВ ПО МАСКЕ
  85.                 LD (KOLWMP3),HL
  86.                 IN A,(CLRCBIT)
  87.                 LD BC,0
  88.                 LD (STOP_PL+1),BC
  89.                 CALL PAUSEPL
  90. ;ПОСТАНОВКА НА ПАУЗУ
  91.                 LD A,H
  92.                 OR L
  93.                 LD A,0XBB
  94.                 JR Z,START4
  95. ;КОД ОШИБКИ =ФАЙЛОВ НЕ НАЙДЕНО
  96.                 CALL INIPLAY
  97.                 LD A,0X77
  98. ;КОД ОШИБКИ =ВСЕ ЗАМЕЧАТЕЛЬНО
  99. START4          LD (REJIMGS),A
  100.                 OUT (ZXDATWR),A
  101. ;СООБЩИЛИ СПЕКУ О РЕЗУЛЬТАТАХ ИНИТА
  102.                 IN A,(DPORT1)
  103.  
  104. ;ОСНОВМОЙ ЦИКЛ ОБЩЕНИЯ СО СПЕКОМ
  105. OPROS           IN A,(ZXSTAT)
  106.                 RRA
  107.                 JR C,OPROS1
  108.                 CALL PLAYMP3
  109.                 JR OPROS
  110.  
  111. OPROS1          IN A,(CLRCBIT)
  112.                 IN A,(ZXCMD)
  113.                 LD L,A
  114.                 AND A
  115.                 JR Z,OPROS2
  116.                 LD A,(REJIMGS)
  117.                 CP 0X78
  118.                 JR NC,OPROS
  119.                 LD A,L
  120. OPROS2          CP LOW ((END_TAB-TABFUNC)/2)+1
  121.                 JR NC,OPROS
  122.                 ADD A,A
  123.                 LD L,A
  124.                 LD H,0
  125.                 LD DE,TABFUNC
  126.                 ADD HL,DE
  127.                 LD E,(HL)
  128.                 INC HL
  129.                 LD D,(HL)
  130.                 LD HL,OPROS
  131.                 PUSH HL
  132.                 EX DE,HL
  133.                 JP (HL)
  134.  
  135. TABFUNC         DW INI__SD      ;00 ПЕРЕЗАПУСК SD
  136.                 DW PREVPL       ;01 ПРЕДЫДУЩИЙ ТРЕК
  137.                 DW PLAY         ;02 ПЛЕЙ
  138.                 DW PAUSEPL      ;03 ПАУЗА
  139.                 DW STOP_PL      ;04 СТОП
  140.                 DW NEXTPL       ;05 СЛЕДУЮЩИЙ ТРЕК
  141.                 DW XORBASS      ;06 XOR TREBLE/BASS
  142.                 DW XORSURR      ;07 XOR SURROUND
  143.                 DW VOL_UP       ;08 ГРОМКОСТЬ +
  144.                 DW VOL_DN       ;09 ГРОМКОСТЬ -
  145.                 DW MUTE         ;0A ВКЛ/ВЫКЛ ГРОМКОСТИ
  146.                 DW GETTIME      ;0B ОТДАТЬ ВРЕМЯ
  147.                 DW GET_VTS      ;0C ОТДАТЬ ПАРАМ 6-10
  148.                 DW GET_TEK      ;0D ОТДАТЬ ТЕК НОМЕР
  149.                 DW SET_NUM      ;0E ПОЛУЧИТЬ ТЕК НОМЕР
  150.                 DW SRESMP3      ;0F СБРОС MP3 ДЕКОДЕРА
  151.                 DW FATTYPE      ;10 ТИП FAT
  152.                 DW GET_LNG      ;11 ОТДАТЬ ИМЯ ФАЙЛА
  153.                 DW GETOPIS      ;12 ОТДАТЬ ОПИСАТЕЛЬ
  154.                 DW GETKMP3      ;13 ОТДАТЬ КОЛВО *.EXT
  155.                 DW GON2MP3      ;14 ПРД НА MP3
  156.                 DW GETDMP3      ;15 DEC ЧИСЛО ФАЙЛОВ
  157.                 DW GETDTEK      ;16 DEC ЧИСЛО ТЕКУЩ+1
  158.                 DW SFT_HRD      ;17 ПЕРЕКЛЮЧ СБРОСА
  159.                 DW PREVDIR      ;18 СЛЕДУЮЩИЙ DIR
  160.                 DW NEXTDIR      ;19 ПРЕДЫДУЩИЙ DIR
  161.                 DW SETTMBR      ;1A УСТ. ТЕМБРОВ
  162.                 DW RUSTTBL      ;1B ЧТЕНИЕ ТЕМБРОВ
  163.                 DW BITRATE      ;1C RD БИТРЕЙТ И ПРОЧ
  164.                 DW TESTREJ      ;1D ТЕСТ РЕЖИМА
  165. END_TAB
  166.  
  167. ;КОНВЕРСИЯ HDAT1,HDAT0
  168. ;ПОСЛЕ ЧТЕНИЯ BC=HDAT1, DE=HDAT0
  169. BITRATE         LD HL,0X0309
  170.                 LD A,0X0A
  171.                 CALL COM__SD
  172.                 PUSH DE
  173.                 LD HL,0X0308
  174.                 LD A,0X0A
  175.                 CALL COM__SD
  176.                 POP BC
  177.                 LD A,C
  178.                 AND A
  179.                 LD HL,0XA000
  180.                 JP Z,GET_RZN
  181.                 AND %00011000
  182.                 RRCA
  183.                 RRCA
  184.                 RRCA
  185. ;БИТЫ ID
  186.                 LD L,A
  187.                 LD A,D
  188.                 AND %00001100
  189. ;БИТЫ SAMPLE RATE
  190.                 OR L
  191.                 LD L,A
  192.                 LD A,C
  193.                 AND %00000110
  194. ;БИТЫ LAYER
  195.                 RLCA
  196.                 RLCA
  197.                 RLCA
  198.                 OR L
  199.                 LD L,A
  200.                 LD A,E
  201.                 AND %11000000
  202. ;БИТЫ MODE
  203.                 OR L
  204.                 LD L,A
  205.                 LD A,D
  206.                 AND %11110000
  207. ;БИТЫ BITRATE
  208.                 RRCA
  209.                 RRCA
  210.                 RRCA
  211.                 RRCA
  212.                 LD H,A
  213.                 JP GET_RZN
  214. ;СБРОС НА СПЕК СОДЕРЖИМОГО HL
  215.  
  216. ;ИЗМЕНЕНИЕ ТЕМБРОВ
  217. SETTMBR         CALL WDY
  218.                 IN A,(ZXDATRD);ЧТЕНИЕ ПАРАМЕТРА
  219.                 LD B,A;СОХРАНЯЕМ
  220.                 LD A,(GET_VTS+2)
  221.                 BIT 3,A;ПРОВЕРЯЕМ ТИП ЧИПА
  222.                 RET Z;ДЛЯ VS1001 ВЫХОДИМ
  223. ;ДЛЯ VS1011 ПРОДОЛЖАЕМ
  224.                 BIT 7,A;ПРОВЕРЯЕМ МОЖНО ЛИ
  225.                 RET Z;КРУТИТЬ ТЕМБРЫ
  226.                 PUSH BC;СОХРАНЯЕМ "B"
  227.                 LD HL,0X0302
  228.                 LD A,0X0A;ЧИТАЕМ ТЕКУЩЕЕ ЗНАЧЕНИЕ
  229.                 CALL COM__SD;ТЕМБРОВ
  230.                 POP BC;ВОССТАНАВЛИВАЕМ "B"
  231.                 LD C,0X10;ШАГ ИЗМЕНЕНИЯ
  232.                 BIT 6,B;КРУТИМ UBASS?
  233.                 JR Z,STTMBR1
  234. ;МЕНЯЕМ УРОВЕНЬ BASS, БИТЫ 7-4
  235.                 LD A,E
  236.                 AND 0X0F
  237.                 LD L,A;СОХРАНЯЕМ БИТЫ 3-0
  238.                 LD A,E
  239.                 AND 0XF0
  240.                 BIT 7,B;КУДА КРУТИМ?
  241.                 JR Z,STMB01
  242. ;УВЕЛИЧЕНИЕ
  243.                 ADD A,C;УВЕЛИЧИВАЕМ НА 1
  244.                 JR C,STTMBR1;МАКСИМУМ!
  245.                 JR STMB02
  246. ;УМЕНЬШЕНИЕ
  247. STMB01          SUB C;УМЕНЬШАЕМ НА 1
  248.                 JR C,STTMBR1;МИНИМУМ!
  249. STMB02          ADD A,L
  250.                 LD E,A;ВЕРНУЛИ БИТЫ 3-0
  251. STTMBR1         BIT 2,B;КРУТИМ UTREBLE?
  252.                 JR Z,STTMBR2
  253. ;МЕНЯЕМ УРОВЕНЬ TREBLE, БИТЫ 7-4
  254.                 LD A,D
  255.                 AND 0X0F
  256.                 LD L,A;СОХРАНЯЕМ БИТЫ 3-0
  257.                 LD A,D
  258.                 AND 0XF0
  259.                 BIT 3,B;КУДА КРУТИМ?
  260.                 JR Z,STMB03
  261. ;УВЕЛИЧЕНИЕ
  262.                 ADD A,C
  263.                 JR C,STTMBR2;МАКСИМУМ!
  264.                 JR STMB04
  265. ;УМЕНЬШЕНИЕ
  266. STMB03          SUB C
  267.                 JR C,STTMBR3;МИНИМУМ!
  268. STMB04          ADD A,L
  269.                 LD D,A;ВЕРНУЛИ БИТЫ 3-0
  270. STTMBR2         BIT 4,B;КРУТИМ FBASS?
  271.                 JR Z,STTMBR3
  272. ;ИЗМЕНЕНИЕ ЧАСТОТЫ BASS, БИТЫ 3-0
  273.                 LD A,E
  274.                 AND 0XF0
  275.                 LD L,A;СОХРАНЯЕМ БИТЫ 7-4
  276.                 LD A,E
  277.                 AND 0X0F
  278.                 BIT 5,B;КУДА КРУТИМ?
  279.                 JR Z,STMB05
  280. ;УВЕЛИЧЕНИЕ
  281.                 INC A
  282.                 CP 0X10
  283.                 JR NC,STTMBR3;МАКСИМУМ!
  284.                 JR STMB06
  285.  
  286. STMB05          AND A
  287.                 JR Z,STTMBR3;МИНИМУМ!
  288.                 DEC A
  289. STMB06          ADD A,L
  290.                 LD E,A;ВЕРНУЛИ БИТЫ 7-4
  291. STTMBR3         BIT 0,B;КРУТИМ FTREBLE?
  292.                 JR Z,WRTMBR
  293. ;ИЗМЕНЕНИЕ ЧАСТОТЫ TREBLE, БИТЫ 3-0
  294.                 LD A,D
  295.                 AND 0XF0
  296.                 LD L,A;СОХРАНЯЕМ БИТЫ 7-4
  297.                 LD A,D
  298.                 AND 0X0F
  299.                 BIT 1,B;КУДА КРУТИМ?
  300.                 JR Z,STBM07
  301. ;УВЕЛИЧЕНИЕ
  302.                 INC A
  303.                 CP 0X10
  304.                 JR NC,WRTMBR;МАКСИМУМ!
  305.                 JR STBM08
  306.  
  307. ;УМЕНЬШЕНИЕ
  308. STBM07          AND A
  309.                 JR Z,$+3;МИНИМУМ!
  310.                 DEC A
  311. STBM08          ADD A,L
  312.                 LD D,A;ВЕРНУЛИ БИТЫ 7-4
  313. WRTMBR          LD HL,0X0202
  314.                 LD A,0X0A
  315.                 JP COM__SD
  316. ;ЗАПИСАЛИ УСТАНОВКИ ВЗАД
  317.  
  318. ;ОТДАЧА БАЙТА ТИПА FAT
  319. FATTYPE         LD A,(CALBFAT)
  320.                 JP GET_BYT
  321.  
  322. ;ОПРЕДЕЛЕНИЕ УСТАНОВЛЕННОГО ЧИПА
  323. RTYPEVS         LD A,0X0A
  324.                 LD HL,0X0301
  325.                 CALL COM__SD
  326.                 LD A,E
  327.                 RRCA
  328.                 AND 8
  329.                 LD E,A
  330.                 LD A,(GET_VTS+2)
  331.                 AND 0XF7
  332.                 OR E
  333.                 LD (GET_VTS+2),A
  334.                 RET
  335.  
  336. ;ОТВЕТ НА ЗАПРОС КАКОЙ КОД РАБОТАЕТ
  337. TESTREJ         IN A,(CLRCBIT)
  338.                 LD A,(ZXDATRD)
  339.                 LD A,(REJIMGS)
  340.                 OUT (ZXDATWR),A
  341.                 RET
  342.  
  343. ;ПЕРЕКЛЮЧЕНИЕ ТИПА СБРОСА
  344. SFT_HRD         LD HL,GET_VTS+2
  345.                 LD A,0X10
  346.                 XOR (HL)
  347.                 LD (HL),A
  348.                 LD A,8
  349.                 BIT 4,(HL)
  350.                 JR NZ,$+4
  351.                 LD A,0X0B
  352.                 LD (SRESMP3+1),A
  353.                 RET
  354.  
  355. ;СБРОС MP3 ЧИПА
  356. SRESMP3         LD A,0X0B
  357.                 JP COM__SD
  358.  
  359. ;ОСТАНОВКА ПРОИГРЫВАНИЯ
  360. STOP_PL         LD BC,0
  361.                 CALL PAUSEPL
  362.                 JP INIPLAY
  363.  
  364. ;ПАУЗА ВОСПРОИЗВЕДЕНИЯ
  365. PAUSEPL         LD A,0XC9
  366.                 LD (PLAYMP3),A
  367.                 RET
  368.  
  369. ;ЗАПУСК ВОСПРОИЗВЕДЕНИЯ
  370. PLAY            LD HL,(KOLWMP3)
  371.                 LD A,H
  372.                 OR L
  373.                 RET Z
  374.                 XOR A
  375.                 JR PAUSEPL+2
  376.  
  377. ;ПЕРЕХОД НА СЛЕДУЩИЙ ПЕСНЯК
  378. NEXTPL          LD BC,(STOP_PL+1)
  379.                 INC BC
  380.                 LD HL,(KOLWMP3)
  381.                 LD A,H
  382.                 OR L
  383.                 RET Z
  384.                 AND A
  385.                 SBC HL,BC
  386.                 JR NZ,$+5
  387.                 LD BC,0
  388.                 LD (STOP_PL+1),BC
  389.                 JP INIPLAY
  390.  
  391. ;ПЕРЕХОД НА ПРЕДЫДУЩИЙ ПЕСНЯК
  392. PREVPL          LD BC,(STOP_PL+1)
  393.                 LD A,B
  394.                 OR C
  395.                 JR NZ,PREVPL1
  396.                 LD BC,(KOLWMP3)
  397.                 LD A,B
  398.                 OR C
  399.                 RET Z
  400. PREVPL1         DEC BC
  401.                 LD (STOP_PL+1),BC
  402.                 JP INIPLAY
  403.  
  404. ;ПЕРЕХОД НА ПЕРВЫЙ ФАЙЛ СЛЕДУЩЕЙ DIR
  405. NEXTDIR         LD BC,(STOP_PL+1)
  406.                 LD A,9
  407.                 PUSH BC
  408.                 CALL COM_FAT
  409.                 POP HL
  410.                 AND A
  411.                 SBC HL,BC
  412.                 RET Z
  413.                 LD (STOP_PL+1),BC
  414.                 JP INIPLAY
  415.  
  416. ;ПЕРЕХОД НА ПЕРВЫЙ ФАЙЛ ПРЕДЫДУЩЕЙ DIR
  417. PREVDIR         LD BC,(STOP_PL+1)
  418.                 LD A,8
  419.                 PUSH BC
  420.                 CALL COM_FAT
  421.                 POP HL
  422.                 AND A
  423.                 SBC HL,BC
  424.                 RET Z
  425.                 LD (STOP_PL+1),BC
  426.                 JP INIPLAY
  427.  
  428. ;ПЕРЕГОНКА 512 БАЙТ СНАРУЖИ НА MP3
  429. GON2MP3         LD HL,BUF_512
  430.                 LD DE,0X0200
  431.                 LD A,0X0C
  432.                 JP COM__SD
  433.  
  434. ;ОТДАТЬ СПЕКУ ДЛИННОЕ ИМЯ
  435. GET_LNG         CALL RDINBC
  436.                 BIT 7,B
  437.                 JR Z,$+6
  438.                 LD BC,(STOP_PL+1)
  439.                 LD HL,GET_VTS+2
  440.                 RES 5,(HL)
  441.                 LD HL,BUF_LNG
  442.                 LD A,2
  443.                 CALL COM_FAT
  444.                 LD E,0
  445.                 JP OUTDATA
  446.  
  447. ;ВЫКЛ/ВКЛ ЗВУКА
  448. MUTE            LD HL,0X030B
  449.                 LD A,0X0A
  450.                 CALL COM__SD
  451.                 LD A,E
  452.                 CP 0XFE
  453.                 JR NC,MUTEOFF
  454.                 LD (MUTEOFF+1),A
  455.                 LD HL,GET_VTS+2
  456.                 SET 6,(HL)
  457.                 LD E,0XFE
  458.                 JR VOL_ALL
  459.  
  460. MUTEOFF         LD E,0
  461.                 LD HL,GET_VTS+2
  462.                 RES 6,(HL)
  463.                 JR VOL_ALL
  464.  
  465. ;УВЕЛИЧЕНИЕ ГРОМКОСТИ НА ЕДИНИЦУ
  466. VOL_UP          LD HL,0X030B
  467.                 LD A,0X0A
  468.                 CALL COM__SD
  469.                 LD A,E
  470.                 AND A
  471.                 RET Z
  472.                 CP 0X80
  473.                 RET NC
  474.                 DEC E
  475.                 JR VOL_ALL
  476.  
  477. ;УМЕНЬШЕНИЕ ГРОМКОСТИ НА ЕДИНИЦУ
  478. VOL_DN          LD HL,0X030B
  479.                 LD A,0X0A
  480.                 CALL COM__SD
  481.                 LD A,E
  482.                 CP 0X7F
  483.                 RET NC
  484.                 INC E
  485. VOL_ALL         LD D,E
  486.                 LD HL,0X020B
  487.                 LD A,E
  488.                 LD (GET_VTS+1),A
  489.                 LD A,0X0A
  490.                 JP COM__SD
  491.  
  492. ;ПЕРЕКЛЮЧЕНИЕ VIRTUAL SURROUND
  493. XORSURR         LD B,1
  494. XOR_ALL         PUSH BC
  495.                 LD HL,0X0300
  496.                 LD A,0X0A
  497.                 CALL COM__SD
  498.                 POP BC
  499.                 LD A,E
  500.                 XOR B
  501.                 LD E,A
  502.                 LD A,(GET_VTS+2)
  503.                 XOR B
  504.                 LD (GET_VTS+2),A
  505.                 BIT 3,A
  506.                 JR Z,$+4
  507.                 RES 7,E
  508.                 LD HL,0X0200
  509.                 LD A,0X0A
  510.                 JP COM__SD
  511.  
  512. ;ПЕРЕКЛЮЧЕНИЕ ТЕМБРОВ
  513. XORBASS         LD A,(GET_VTS+2)
  514.                 BIT 3,A
  515.                 JR NZ,XB
  516.                 LD B,0X80
  517.                 JR XOR_ALL
  518.  
  519. XB              LD A,(GET_VTS+2)
  520.                 XOR 0X80
  521.                 LD (GET_VTS+2),A
  522.  
  523. CP_XB           LD A,(GET_VTS+2)
  524.                 BIT 7,A
  525.                 JR Z,XB1
  526. VS_TBL          LD DE,0
  527. XB2             LD HL,0X0202
  528.                 LD A,0X0A
  529.                 JP COM__SD
  530.  
  531. XB1             LD HL,0X0302
  532.                 LD A,0X0A
  533.                 CALL COM__SD
  534.                 LD (VS_TBL+1),DE
  535.                 LD DE,0
  536.                 JR XB2
  537.  
  538. ;ПОЛУЧИТЬ ВРЕМЯ ПРОИГРЫВАНИЯ
  539. GETTIME         LD HL,0X0304
  540.                 LD A,0X0A
  541.                 CALL COM__SD
  542.                 EX DE,HL
  543.                 LD DE,BUFTIME
  544.                 PUSH DE
  545.                 LD BC,36000
  546.                 CALL SUB_BC
  547.                 LD BC,3600
  548.                 CALL SUB_BC
  549.                 LD BC,600
  550.                 CALL SUB_BC
  551.                 LD BC,60
  552.                 CALL SUB_BC
  553.                 LD BC,10
  554.                 CALL SUB_BC
  555.                 LD A,0X30
  556.                 ADD A,L
  557.                 LD (DE),A
  558.                 LD E,6
  559.                 POP HL
  560.                 JP OUTDATA
  561.  
  562. ;СБРОС НА СПЕК СОСТОЯНИЕ ТЕМБРОВ
  563. ;В ТЕКСТОВОМ ВИДЕ
  564. RUSTTBL         LD A,(GET_VTS+2)
  565.                 BIT 3,A
  566.                 RET Z
  567.                 LD HL,0X0302
  568.                 LD A,0X0A
  569.                 CALL COM__SD
  570.                 LD A,D
  571.                 EXX
  572.                 LD DE,BUFTIME
  573.                 AND 0X0F
  574.                 LD L,A
  575.                 LD H,0
  576.                 LD BC,10
  577.                 CALL SUB_BC
  578.                 LD A,0X30
  579.                 ADD A,L
  580.                 LD (DE),A
  581. ;ПОЛОЖИЛИ ЧАСТОТУ TREBLE
  582.                 INC DE
  583.                 EXX
  584.                 LD A,D
  585.                 EXX
  586.                 AND 0XF0
  587.                 RRCA
  588.                 RRCA
  589.                 RRCA
  590.                 RRCA
  591.                 LD L,A
  592.                 BIT 3,A
  593.                 LD A,0X2B
  594.                 JR Z,$+4
  595.                 LD A,0X2D
  596.                 LD (DE),A
  597.                 INC DE
  598.                 LD A,L
  599.                 AND 7
  600.                 ADD A,0X30
  601.                 LD (DE),A
  602. ;ПОЛОЖИЛИ УРОВЕНЬ TREBLE
  603.                 INC DE
  604.                 EXX
  605.                 LD A,E
  606.                 EXX
  607.                 AND 0X0F
  608.                 LD L,A
  609.                 LD BC,10
  610.                 CALL SUB_BC
  611.                 LD A,0X30
  612.                 ADD A,L
  613.                 LD (DE),A
  614. ;ПОЛОЖИЛИ ЧАСТОТУ BASS
  615.                 INC DE
  616.                 EXX
  617.                 LD A,E
  618.                 EXX
  619.                 AND 0XF0
  620.                 RRCA
  621.                 RRCA
  622.                 RRCA
  623.                 RRCA
  624.                 LD L,A
  625.                 LD BC,10
  626.                 CALL SUB_BC
  627.                 LD A,0X30
  628.                 ADD A,L
  629.                 LD (DE),A
  630. ;ПОЛОЖИЛИ УРОВЕНЬ BASS
  631.                 EXX
  632.                 LD E,8
  633.                 LD HL,BUFTIME
  634.                 LD A,0X30
  635.                 CP (HL)
  636.                 JR NZ,$+4
  637.                 LD (HL),0X20
  638.                 JP OUTDATA
  639.  
  640. SUB_BC          LD A,0XFF
  641.                 AND A
  642.                 INC A
  643.                 SBC HL,BC
  644.                 JR NC,$-3
  645.                 ADD HL,BC
  646.                 ADD A,0X30
  647.                 LD (DE),A
  648.                 INC DE
  649.                 RET
  650.  
  651. ;СБРОС НА СПЕК КОЛ-ВО НАЙДЕННЫХ ФАЙЛОВ
  652. GETDMP3         LD HL,(KOLWMP3)
  653.  
  654. ;ПЕРЕГОНЯЕМ HL В TXT И СБРАСЫВАЕМ
  655. GETDCHR         LD DE,BUFTIME
  656.                 PUSH DE
  657.                 LD BC,10000
  658.                 CALL SUB_BC
  659.                 LD BC,1000
  660.                 CALL SUB_BC
  661.                 LD BC,100
  662.                 CALL SUB_BC
  663.                 LD BC,10
  664.                 CALL SUB_BC
  665.                 LD A,0X30
  666.                 ADD A,L
  667.                 LD (DE),A
  668.                 POP HL
  669.                 PUSH HL
  670.                 LD BC,0X0420
  671.                 LD A,(HL)
  672.                 CP 0X30
  673.                 JR NZ,GO_OUTD
  674.                 LD (HL),C
  675.                 INC HL
  676.                 DJNZ $-7
  677. GO_OUTD         POP HL
  678.                 LD E,5
  679.                 JR OUTDATA
  680.  
  681. ;СБРОС НА СПЕК НОМЕРА ИГРАЕМОГО ФАЙЛА+1
  682. ;С ПЕРЕГОНКОЙ В ТЕКСТОВЫЙ ВИД
  683. GETDTEK         LD HL,(STOP_PL+1)
  684.                 INC HL
  685.                 JR GETDCHR
  686.  
  687. ;ОТДАТЬ СПЕКУ 33 БАЙТА ОПИСАТЕЛЯ ФАЙЛА
  688. GETOPIS         CALL RDINBC
  689.                 BIT 7,B
  690.                 JR Z,$+6
  691.                 LD BC,(STOP_PL+1)
  692.                 LD A,1
  693.                 CALL COM_FAT
  694.                 LD BC,0X20
  695.                 ADD HL,BC
  696.                 LD (HL),E
  697.                 SBC HL,BC
  698.                 LD E,0X21
  699.  
  700. ;ОТДАЕМ БАЙТИКИ, СЧЕТЧИК БАЙТА В E
  701. OUTDATA         LD A,(HL)
  702.                 INC HL
  703.                 OUT (ZXDATWR),A
  704.                 CALL WDN
  705.                 DEC E
  706.                 JR NZ,OUTDATA
  707.                 RET
  708.  
  709. ;УСТАНОВКА НОМЕРА ФАЙЛА ДЛЯ ИГРАНИЯ
  710. ;ЕСЛИ НЕ ПРЕВЫШАЕТ КОЛ-ВО НАЙДЕННОГО-1
  711. SET_NUM         CALL RDINBC
  712.                 LD HL,(KOLWMP3)
  713.                 AND A
  714.                 SBC HL,BC
  715.                 RET C
  716.                 LD (STOP_PL+1),BC
  717.                 RET
  718.  
  719. ;ЧИТАЕМ В BC
  720. RDINBC          CALL WDY
  721.                 IN A,(ZXDATRD)
  722.                 LD B,A
  723.                 CALL WDY
  724.                 IN A,(ZXDATRD)
  725.                 LD C,A
  726.                 RET
  727.  
  728. ;ОТДАТЬ СПЕКУ КОЛ-ВО НАЙДЕННОГО
  729. GETKMP3         LD HL,(KOLWMP3)
  730.                 JR GET_RZN
  731.  
  732. ;ОТДАТЬ СПЕКУ НОМЕР ТЕКУЩЕГО ФАЙЛА
  733. GET_TEK         LD HL,(STOP_PL+1)
  734.                 JR GET_RZN
  735.  
  736. ;В HL СОДЕРЖИМОЕ БИТОВ УСТАНОВОК
  737. GET_VTS         LD HL,0
  738.  
  739. ;СБРАСЫВАЕМ СОДЕРЖИМОЕ HL НА СПЕК
  740. GET_RZN         LD A,H
  741.                 OUT (ZXDATWR),A
  742.                 CALL WDN
  743.                 LD A,L
  744.  
  745. ;СБРОСИТЬ НА СПЕК 2 БАЙТА HL
  746. GET_BYT         OUT (ZXDATWR),A
  747.  
  748. ;ЖДЕМ ПОКА СПЕК ЗАБЕРЕТ БАЙТ ИЗ ПОРТА
  749. WDN             IN A,(ZXSTAT)
  750.                 RLA
  751.                 JR C,$-3
  752.                 RET
  753.  
  754. ;ЖДЕМ ПОКА СПЕК ДАСТ БАЙТ В ПОРТ
  755. WDY             IN A,(ZXSTAT)
  756.                 RLA
  757.                 JR NC,$-3
  758.                 RET
  759.  
  760. ;ИГРАТЬ НА MP3-ДЕКОДЕР 1 СЕКТОР
  761. PLAYMP3         RET
  762.                 LD A,6
  763.                 CALL COM_FAT
  764.                 RET NZ
  765. ;ФАЙЛО НЕ КОНЧИЛОСЬ, ВЫХОДИМ
  766.                 LD A,0X0D
  767.                 CALL COM__SD
  768.                 JP NEXTPL
  769. ;ФАЙЛ КОНЧИЛСЯ, ЗАВЕРШАЕМ НУЛЯМИ
  770. ;И ПЕРЕХОДИМ НА СЛЕДУЮЩИЙ ФАЙЛ
  771.  
  772. ;ОТКРЫТИЕ ФАЙЛА И ИНИТ ДЕКОДЕРА
  773. INIPLAY         PUSH BC
  774.                 CALL SRESMP3
  775. ;СБРОС ЧИПА В ЗАВИСИМОСТИ ОТ УСТАНОВОК
  776.                 LD HL,(GET_VTS+1)
  777.                 BIT 4,H
  778. ;ЕСЛИ СБРОС =HARD, ТО ОБНУЛЯЕМ ВСЕ
  779. ;КРОМЕ БИТА УСТАНОВЛЕННОГО MP3 ЧИПА
  780. ;И ТИПА СБРОСА ЭТОГО ЧИПА
  781.                 JR Z,INIPLA1
  782.                 LD L,0
  783.                 LD A,H
  784.                 AND %00011000
  785.                 LD H,A
  786. INIPLA1         SET 5,H
  787.                 LD (GET_VTS+1),HL
  788. ;ВКЛЮЧАЕМ БИТ 5, ПОШОЛ НОВЫЙ ФАЙЛ
  789.                 POP BC
  790.                 LD A,7
  791.                 JP COM_FAT
  792. ;ОТКРЫВАЕМ НОВЫЙ ФАЙЛ
  793.  
  794. COM__SD         include sd4ngs.a80      ; INCL "SD4NGS";ДРАЙВЕР SD КАРТЫ
  795. COM_FAT         include fat4ngs.a80     ; INCL "FAT4NGS";ДРАЙВЕР FAT
  796.