Subversion Repositories ngs

Rev

Rev 163 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed | ?url?

  1.  
  2. ; LAST UPDATE 15.01.2024 savelij
  3.  
  4.                 include macros.a80
  5.                 include ports_ngs.a80
  6.                 include local_define.a80
  7.  
  8.                 include local_macros.a80
  9.                 include vers.a80
  10.  
  11.                 include macros_sp.a80
  12.                 include dss.a80
  13.                 include bios_sp.a80
  14.                 include define_sp.a80
  15.                 include ports_sp.a80
  16.  
  17. GSCOD           EQU 0x8000                      ; адрес куда закидывать код на нгс
  18.  
  19.                 ORG ADR_START
  20. START           DI
  21.         IFDEF _SPRINTER
  22.                 CALL CLS
  23.         DE_ADR_SCR ((32-(EMESS24-MESS24))/2),15
  24.                 LD HL,MESS24
  25.                 CALL PRINT
  26.         DE_ADR_SCR 4,9
  27.                 LD HL,MESS28
  28.                 CALL PRINT
  29.                 XOR A
  30.                 CALL DETECT_ISA
  31.                 CALL CHECK_ISA
  32.                 JR NC,.L1
  33.                 CALL CLOSE_ISA
  34.                 LD A,1
  35.                 CALL DETECT_ISA
  36.                 JR NC,.L1
  37.         DE_ADR_SCR 8,8
  38.                 LD HL,NOT_FOUND_ISA
  39.                 CALL PRINT
  40.                 JP NO_ISA
  41.         ELSE
  42.                 LD HL,0x0110
  43.                 LD (0x5C09),HL                  ; установка переменной клавиатуры
  44.                 RES 3,(IY+48)
  45.                 RES 5,(IY+1)
  46.         ENDIF
  47. .L1             LD (OLD_STACK),SP               ; сохранение стека
  48.                 LD SP,0
  49. OLD_STACK       EQU $-2
  50.  
  51. ; удержание при запуске CS =  Turbo off
  52. ;               LD A,0xFE
  53. ;               IN A,(0xFE)
  54. ;               RRA
  55. ;               LD A,0
  56. ;               JR C,$+4
  57. ;               LD A,0x10
  58. ;               LD BC,0xEFF7
  59. ;               OUT (C),A
  60.  
  61. ; удержание при запуске SS = reset NeoGS
  62.         IFDEF _SPRINTER
  63. ; TODO добавить получение ключей из командной строки доса
  64.         ELSE
  65.                 LD A,0x7F
  66.                 IN A,(0xFE)
  67.                 RRA
  68.                 RRA
  69.                 JR NC,LOOP21
  70.         ENDIF
  71.  
  72. ; тест наличия GS/NeoGS
  73.                 LD B,0x30                       ; для определения наличия нгс используется
  74.                                                 ; команда 0x1D с параметром =0
  75.         OUT_GSDAT 0                             ; ждем ответа 0x30 прерываний
  76.         OUT_GSCOM 0x1D
  77. LOOP22          EI
  78.                 HALT
  79.                 DI
  80.                 DEC B
  81.                 JR Z,LOOP21                     ; счетчик обнулился, а может нгс висит?
  82.         IN_GSCOM                                ; ждем сброса команд бита
  83.                 RRA
  84.                 JR C,LOOP22
  85.         IN_GSDAT                                ; команд бит сбросился, читаем ответ из дата порта
  86.                                                 ; попытка получить флаговый байт с нгс
  87.         OUT_GSDAT 0                             ; при первом запуске команда 0xFF еще не пропатчена
  88.                 LD B,0x30                       ; ждем ответа 0x30 прерываний
  89.         OUT_GSCOM 0xFF
  90. LOOP001         EI
  91.                 HALT
  92.                 DI
  93.                 DEC B
  94.                 JR Z,LOOP21                     ; счетчик обнулился, пробуем перезапустить нгс
  95.         IN_GSCOM
  96.                 RRA
  97.                 JR C,LOOP001
  98.                 JR LOOP13                       ; нгс ответил на команду, подключаемся к внутреннему плееру
  99.  
  100. ; принудительный перезапуск NeoGS
  101. LOOP21
  102.         OUT_GSCTR M_DBIT                        ; полный сброс нгс
  103.                 EI
  104.                 HALT
  105.                 HALT
  106.                 DI
  107.         OUT_GSCOM 0xF3                          ; холодный перезапуск нгс прошивки
  108.                 LD B,0x30                       ; ждем 0x30 прерываний
  109. LOOP25          EI
  110.                 HALT
  111.                 HALT
  112.                 DI
  113.                 DEC B
  114.                 JP Z,NO__GS                     ; нет ответа, нет нгс
  115.         IN_GSCOM
  116.                 RRA
  117.                 JR C,LOOP25                     ; команд бит изменился, продолжаем
  118. ; загрузка и запуск кода на NeoGS
  119. RST_NGS_CODE                                    ; запрос количества страниц памяти
  120.         OUT_GSCOM 0x23                          ; для определения в какую страницу плеер закидывать
  121.                 CALL WC
  122.         IN_GSDAT
  123.                 OR 0x3F
  124.                 LD D,A
  125.                 LD E,MPAG                       ; включаем стандартной командой прошивки
  126.                 CALL OUTPORT                    ; страницу на нгс для загрузки внутреннего плеера
  127.                                                 ; стандартными средствами грузим код на нгс
  128.                 LD DE,FAT_END - GO_YES
  129.                 LD A,E
  130.         OUT_GSDAT_A
  131.         OUT_GSCOM 0x14
  132.                 CALL WC
  133.                 LD A,D
  134.         OUT_GSDAT_A
  135.                 CALL WD
  136.         OUT_GSDAT LOW (GSCOD)
  137.                 CALL WD
  138.         OUT_GSDAT HIGH(GSCOD)
  139.                 CALL WD
  140.                 LD HL,GO_YES
  141. .LODCOD         LD A,(HL)
  142.                 INC HL
  143.         OUT_GSDAT_A
  144.                 CALL WD
  145.                 DEC DE
  146.                 LD A,D
  147.                 OR E
  148.                 JR NZ,.LODCOD
  149. ; код загрузили, запускаем
  150.         OUT_GSDAT LOW (GSCOD)
  151.         OUT_GSCOM 0x13
  152.                 CALL WC
  153.         OUT_GSDAT HIGH (GSCOD)
  154.                 EI
  155.                 HALT
  156.                 HALT
  157.                 DI                              ; подождали 2 прерывания запуска кода
  158. LOOP13          LD A,7
  159.                 CALL CLS                        ; очистили экран
  160.         DE_ADR_SCR 0,8
  161.                 LD HL,MESS20                    ; печать текста о поиске на SD карточке
  162.                 CALL PRINT
  163.                                                 ; подаем команду проверки что на нгс крутится
  164.         OUT_GSDAT 0x1D
  165.         OUT_GSCOM 0x1F
  166.                 LD B,0
  167.                 CALL WAITGS                     ; ожидаем ответа покручивавая палочку
  168.         IN_GSDAT                                ; читаем ответ
  169.                 CP 0x8B
  170.                 JP Z,RST_NGS_CODE               ; если 0x8B то ответила стандартная прошивка
  171.                 CP PLAYER_OK
  172.                 JP Z,Warm                       ; если ответ 0x77, то ответил внутренний плеер
  173.                 CP SD_NOT_FOUND
  174.                 JP NZ,LOOP17                    ; SD карта найдена?
  175.                 LD A,7
  176.                 CALL CLS
  177.                 LD HL,MESS13
  178.         DE_ADR_SCR 0,16
  179. LOOP20          CALL PRINT
  180.                 LD HL,MESS15
  181.         DE_ADR_SCR 0,18
  182.                 CALL PRINT
  183.                 LD HL,MESS16
  184.         DE_ADR_SCR 0,20
  185.                 CALL PRINT
  186.                 JR LOOP16
  187.  
  188. LOOP17          CP FAT_NOT_FOUND
  189.                 JR NZ,LOOP26                    ; на SD карте FAT не обнаружен
  190.                 LD A,7
  191.                 CALL CLS
  192.                 LD HL,MESS14
  193.         DE_ADR_SCR 0,16
  194.                 JR LOOP20
  195.  
  196. LOOP26          CP FILES_NOT_FOUND
  197.                 JR NZ,LOOP27
  198.                 LD A,7
  199.                 CALL CLS
  200.                 LD HL,MESS23
  201.         DE_ADR_SCR 0,16
  202.                 JR LOOP20
  203.  
  204. LOOP27          CP NEOGS_ERROR
  205.                 JP NZ,RST_NGS_CODE              ; плата GS стараго типав
  206.                 JP NO_NGS
  207.  
  208. LOOP16
  209.         IFDEF _SPRINTER
  210.                 EI
  211.         SPDSS DSSF.SCANKEY
  212.                 JR Z,LOOP16
  213.         ELSE
  214.                 EI
  215.                 HALT
  216.                 DI
  217.                 BIT 5,(IY+1)
  218.                 JR Z,LOOP16
  219.                 LD A,(IY-0x32)
  220.                 RES 5,(IY+1)
  221.         ENDIF
  222.                 CP 0x0D
  223.                 JP Z,START
  224.                 CP 0x20
  225.                 JP Z,RESCOMP
  226.                 JR LOOP16
  227.  
  228. Warm            LD A,7
  229.                 CALL CLS                        ; очистка экрана
  230.                 LD A,VARP_CHIP_TYPE
  231.                 CALL GET_VTS
  232.                 CALL MORDALL                    ; вывод основных надписей
  233.                 LD A,__TXT_COUNT_FILES
  234.         DE_ADR_SCR 13,0
  235.                 CALL READ5BT                    ; вывод кол-ва найденного
  236.                 CALL NAMELNG                    ; вывод имени текущего файла
  237. LOOP_3          CALL DAT_VTS                    ; вывод инфы текущего файла
  238. NO_PRESS_KEY
  239.         LD_A VARP_FLAGS
  240.                 CALL GET_VTS
  241.                 BIT B_SD_LOST,A
  242.                 JP NZ,EJECT
  243. ;               AND 5
  244. ;               CP 5
  245. ;               JR Z,LOOPM
  246.                 CALL FGETVTS
  247.                 LD A,H
  248.                 PUSH AF
  249.                 BIT B_NEW_FILE,A
  250.                 CALL NZ,NAMELNG
  251.                 POP AF
  252.                 LD A,VARP_FILE_TYPE
  253.                 CALL GET_VTS
  254.                 CP FILE_MP3
  255.                 JR NZ,LOOPM
  256. ; продолжаем для MP3
  257.         DE_ADR_SCR 11,11
  258.                 CALL READSEC                    ; время играния
  259.                 CALL BITRATE
  260.                 JR LOOP14
  261.  
  262. ; продолжаем для MOD
  263. LOOPM           CALL POSMOD
  264. LOOP14
  265.         IFDEF _SPRINTER
  266.                 EI
  267.         SPDSS DSSF.SCANKEY
  268.                 JR Z,NO_PRESS_KEY
  269.         ELSE
  270.                 EI
  271.                 HALT
  272.                 DI
  273.                 BIT 5,(IY+1)
  274.                 JR Z,NO_PRESS_KEY
  275.                 RES 5,(IY+1)
  276.                 LD A,(IY-0x32)
  277.         ENDIF
  278.                 LD B,A
  279.                 LD A,VARP_FILE_TYPE
  280.                 CALL GET_VTS
  281.                 CP FILE_MP3
  282.                 LD HL,MODCOM
  283.                 JR NZ,LOOP14_1
  284.                 LD HL,MP3COM
  285. LOOP14_1        LD DE,4
  286. LOOP14_2        LD A,(HL)
  287.                 AND A
  288.                 JR Z,NO_PRESS_KEY
  289.                 CP B
  290.                 JR Z,RDCOMM
  291.                 ADD HL,DE
  292.                 JR LOOP14_2
  293.  
  294. RDCOMM          INC HL
  295.                 LD A,(HL)
  296.                 INC HL
  297.                 LD E,(HL)
  298.                 INC HL
  299.                 LD D,(HL)
  300.                 EX DE,HL
  301.                 JP (HL)
  302.  
  303. MP3COM          DB "6",0x09
  304.                 DW EXE1
  305.                 DB "7",0x08
  306.                 DW EXE1
  307.                 DB "8",0x07
  308.                 DW EXE1
  309.                 DB "9",0x06
  310.                 DW EXE2
  311.                 DB 0x0D,0x0A
  312.                 DW EXE1
  313.                 DB ":",0x17
  314.                 DW EXE1
  315. ;               DB "q",0x03
  316. ;               DW EXE3
  317. ;               DB "a",0x01
  318. ;               DW EXE3
  319. ;               DB "w",0x0C
  320. ;               DW EXE3
  321. ;               DB "s",0x04
  322. ;               DW EXE3
  323. ;               DB "e",0x30
  324. ;               DW EXE3
  325. ;               DB "d",0x10
  326. ;               DW EXE3
  327. ;               DB "r",0xC0
  328. ;               DW EXE3
  329. ;               DB "f",0x40
  330. ;               DW EXE3
  331.  
  332. MODCOM          DB "1",0x01
  333.                 DW EXE1
  334.                 DB "2",0x02
  335.                 DW EXE4
  336.                 DB "3",0x03
  337.                 DW EXE4
  338.                 DB "4",0x04
  339.                 DW EXE4
  340.                 DB "5",0x05
  341.                 DW EXE1
  342.                 DB "!",0x18
  343.                 DW EXE1
  344.                 DB "%",0x19
  345.                 DW EXE1
  346.                 DB "0",0x00
  347.                 DW EJECT
  348.                 DB " ",0x00
  349.                 DW RESCOMP
  350.                 DB 0
  351.  
  352. EXE1
  353.         OUT_GSDAT_A
  354.         OUT_GSCOM 0x1F
  355.                 CALL WC
  356.                 JP LOOP_3
  357.  
  358. EXE2
  359.         OUT_GSDAT_A
  360.         OUT_GSCOM 0x1F
  361.                 CALL WC
  362.                 CALL PRTTBL
  363.                 JP LOOP_3
  364.  
  365. EXE3            PUSH AF
  366.         OUT_GSDAT 0x1A
  367.         OUT_GSCOM 0x1F
  368.                 CALL WC
  369.                 POP AF
  370.         OUT_GSDAT_A
  371.                 CALL PRTTBL
  372.                 JP NO_PRESS_KEY
  373.  
  374. EXE4
  375.         OUT_GSDAT_A
  376.         OUT_GSCOM 0x1F
  377.                 CALL WC
  378.                 JP NO_PRESS_KEY
  379.  
  380. ; ожидание отпускания кнопки и сброс
  381. RESCOMP         CALL NANYKEY
  382.         IFDEF _SPRINTER
  383.                 CALL CLS
  384.                 CALL CLOSE_ISA
  385.         SPDSS DSSF.EXIT
  386.         ELSE
  387.                 XOR A
  388.                 LD BC,0x7FFD
  389.                 OUT (C),A
  390.                 JP 0
  391.         ENDIF
  392.  
  393. WAITGS          LD E,B
  394.                 LD D,0
  395.                 LD HL,VENTIL
  396.                 ADD HL,DE
  397.                 LD A,(HL)
  398.         DE_ADR_SCR 27,8
  399.                 CALL PRISYM
  400.                 LD C,5
  401. .L1             EI
  402.                 HALT
  403.                 DI
  404.                 DEC C
  405.                 JR NZ,.L1
  406.         IN_GSCOM
  407.                 RRA
  408.                 RET NC
  409.                 INC B
  410.                 RES 2,B
  411.                 JR WAITGS
  412.  
  413. ; распечатка номера трека и имени играемого файла
  414. NAMELNG         LD A,__TXT_CURRENT_FILE
  415.         DE_ADR_SCR 13,10
  416.                 CALL READ5BT                    ; текущий номер трека
  417.                 LD HL,0x8000
  418.         OUT_GSDAT 0x11
  419.         OUT_GSCOM 0x1F
  420.                 CALL WC                         ; получить длинное имя
  421.                 LD A,H
  422.         OUT_GSDAT_A
  423.                 CALL WD
  424.                 LD A,L
  425.         OUT_GSDAT_A
  426.                 LD HL,OPISAT
  427.                 LD E,0
  428.                 PUSH HL
  429.                 CALL INI_E
  430.         IFDEF _SPRINTER
  431.         DE_ADR_SCR 0,16
  432.         SPBIOS BIOSF.LP_PRINT_SYM,78,' '
  433.         DE_ADR_SCR 0,17
  434.         SPBIOS BIOSF.LP_PRINT_SYM,78,' '
  435.         DE_ADR_SCR 0,18
  436.         SPBIOS BIOSF.LP_PRINT_SYM,78,' '
  437.         DE_ADR_SCR 0,19
  438.         SPBIOS BIOSF.LP_PRINT_SYM,78,' '
  439.         ELSE
  440.                 LD HL,0x5000
  441.                 LD D,H
  442.                 LD E,L
  443.                 LD BC,0x07FF
  444.                 INC E
  445.                 LD (HL),L
  446.                 LDIR
  447.         ENDIF
  448.                 POP HL
  449.                 LD B,0x20
  450.         DE_ADR_SCR 0,16
  451.                 CALL PRINT_B
  452.                 LD B,0x20
  453.         DE_ADR_SCR 0,17
  454.                 CALL PRINT_B
  455.                 LD B,0x20
  456.         DE_ADR_SCR 0,18
  457.                 CALL PRINT_B
  458.                 LD B,0x20
  459.         DE_ADR_SCR 0,19
  460.                 CALL PRINT_B
  461.                 LD B,0x20
  462.         DE_ADR_SCR 0,20
  463.                 CALL PRINT_B
  464.                 LD B,0x20
  465.         DE_ADR_SCR 0,21
  466.                 CALL PRINT_B
  467.                 LD B,0x20
  468.         DE_ADR_SCR 0,22
  469.                 CALL PRINT_B
  470.                 LD B,0x20
  471.         DE_ADR_SCR 0,23
  472.                 CALL PRINT_B
  473.                 JP MORDAR
  474.  
  475. DAT_VTS         CALL FGETVTS            ; запрос флагового байта
  476.         DE_ADR_SCR 16,13
  477.                 LD A,VARP_FILE_TYPE
  478.                 CALL GET_VTS
  479.                 CP FILE_MP3
  480.                 RET NZ                  ; это MOD
  481.                 BIT B_ENABLE_TEMBR,H
  482.                 LD A,'+'
  483.                 JR NZ,.L1
  484.                 LD A,'-'
  485. .L1             CALL PRISYM             ; вывод положения TREBLE/BASS
  486.                 BIT B_SURROUND,H
  487.                 LD A,'+'
  488.                 JR NZ,.L2
  489.                 LD A,'-'
  490. .L2
  491.         DE_ADR_SCR 16,12
  492.                 CALL PRISYM             ; вывод положения VIRTUAL SURROUND
  493.                 BIT B_MUTE,H
  494.                 LD A,'+'
  495.                 JR NZ,.L3
  496.                 LD A,'-'
  497. .L3
  498.         DE_ADR_SCR 31,14
  499.                 CALL PRISYM             ; вывод положения MUTE ON/OFF
  500.                 LD A,L
  501.         DE_ADR_SCR 16,14
  502.                 CALL PRIHEX
  503. ; вывод индикатора SOFT/HARD RESET
  504.                 BIT B_TYPE_RESET,H
  505.                 LD HL,MESS16 + 2
  506.                 JR Z,DATVTS1
  507.                 RES 5,(HL)
  508.                 INC HL
  509.                 RES 5,(HL)
  510.                 INC HL
  511.                 RES 5,(HL)
  512.                 INC HL
  513.                 RES 5,(HL)
  514.                 JR DATVTS2
  515.  
  516. DATVTS1         SET 5,(HL)
  517.                 INC HL
  518.                 SET 5,(HL)
  519.                 INC HL
  520.                 SET 5,(HL)
  521.                 INC HL
  522.                 SET 5,(HL)
  523. DATVTS2         LD HL,MESS16
  524.         DE_ADR_SCR 20,0
  525.                 CALL PRINT
  526. ; получение и распечатка инфы темброблока
  527. PRTTBL         
  528. ;               CALL FGETVTS
  529. ;               BIT 3,H
  530. ;               JR Z,EMPTSTR
  531. ;               BIT 7,H
  532. ;               JR Z,EMPTSTR
  533. ;               LD A,0x1B
  534. ;               OUT (GSDAT),A
  535. ;               LD A,0x1F
  536. ;               OUT (GSCOM),A
  537. ;               CALL WC
  538. ;               LD HL,OPISAT+0x0100
  539. ;               LD E,8
  540. ;               PUSH HL
  541. ;               CALL INI_E
  542. ;               LD DE,0x48B1
  543. ;               LD B,2
  544. ;               POP HL
  545. ;               CALL PRINT_B
  546. ;               LD A,"0"
  547. ;               CALL PRISYM
  548. ;               LD A,"0"
  549. ;               CALL PRISYM
  550. ;               LD A,"0"
  551. ;               CALL PRISYM
  552. ;               LD A,"/"
  553. ;               CALL PRISYM
  554. ;               LD B,2
  555. ;               CALL PRINT_B
  556. ;               INC E
  557. ;               LD B,2
  558. ;               CALL PRINT_B
  559. ;               LD A,"0"
  560. ;               CALL PRISYM
  561. ;               LD A,"/"
  562. ;               CALL PRISYM
  563. ;               LD B,2
  564. ;               JP PRINT_B
  565.  
  566. ; печать пустой строки
  567. EMPTSTR         LD HL,EMPT16+1
  568.         DE_ADR_SCR 17,13
  569.                 JP PRINT
  570.  
  571. ; распечатка когда ничего не играет
  572. BITRAT1         LD HL,EMPT16+2
  573.         DE_ADR_SCR 22,10
  574.                 PUSH HL
  575.                 LD B,5
  576.                 CALL PRINT_B
  577.         DE_ADR_SCR 24,11
  578.                 LD B,3
  579.                 POP HL
  580.                 PUSH HL
  581.                 CALL PRINT_B
  582.                 POP HL
  583.                 LD B,0x0C
  584.         DE_ADR_SCR 20,9
  585.                 JP PRINT_B
  586.  
  587. ; печать MP3 битрейта
  588. BITRATE
  589.         OUT_GSDAT 0x1C
  590.         OUT_GSCOM 0x1F
  591.                 CALL WC
  592.                 CALL WN
  593.         IN_GSDAT
  594.                 LD B,A
  595.                 CALL WN
  596.         IN_GSDAT
  597.                 LD C,A
  598.                 LD A,B
  599.                 AND 0xE0
  600.                 CP %10100000
  601.                 JR Z,BITRAT1
  602.                 LD A,C
  603.                 AND 3
  604.                 LD L,A
  605.                 ADD A,A
  606.                 ADD A,A
  607.                 ADD A,L
  608.                 LD L,A
  609.                 LD H,0
  610.                 LD A,C
  611.                 RRCA
  612.                 RRCA
  613.                 AND 3
  614.                 LD DE,SR0
  615.                 JR Z,BITRAT3
  616.                 DEC A
  617.                 LD DE,SR1
  618.                 JR Z,BITRAT3
  619.                 LD DE,SR2
  620. BITRAT3         ADD HL,DE
  621.         DE_ADR_SCR 22,10
  622.                 PUSH BC
  623.                 LD B,5
  624.                 CALL PRINT_B
  625.                 POP BC
  626.                 LD A,C
  627.                 RLCA
  628.                 RLCA
  629.                 AND 3
  630.                 ADD A,A
  631.                 ADD A,A
  632.                 LD L,A
  633.                 ADD A,A
  634.                 ADD A,L
  635.                 LD L,A
  636.                 LD H,0
  637.                 LD DE,REJCHAN
  638.                 ADD HL,DE
  639.                 PUSH BC
  640.                 LD B,0x0C
  641.         DE_ADR_SCR 20,9
  642.                 CALL PRINT_B
  643.                 POP BC
  644.                 LD A,B
  645.                 AND 0x0F
  646.                 LD L,A
  647.                 ADD A,A
  648.                 ADD A,L
  649.                 LD L,A
  650.                 LD H,0
  651.                 LD A,C
  652.                 AND 3
  653.                 CP 3
  654.                 JR NZ,BITRAT4
  655.                 LD A,0x30
  656.                 ADD A,L
  657.                 LD L,A
  658. BITRAT4         LD A,C
  659.                 AND 0x30
  660.                 SUB 0x10
  661.                 LD DE,L3ID0
  662.                 JR Z,BITRAT2
  663.                 SUB 0x10
  664.                 LD DE,L2ID0
  665.                 JR Z,BITRAT2
  666.                 LD DE,L1ID0
  667. BITRAT2         ADD HL,DE
  668.                 LD B,3
  669.         DE_ADR_SCR 24,11
  670.                 JP PRINT_B
  671.  
  672. ; получение и распечатка кол-ва найденных файлов (15)
  673. ; или номера текущего файла (16)
  674. READ5BT
  675.         OUT_GSDAT_A
  676.         OUT_GSCOM 0x1F
  677.                 CALL WC
  678.                 CALL WN
  679.         IN_GSDAT
  680.                 CALL PRISYM
  681.                 CALL WN
  682.         IN_GSDAT
  683.                 CALL PRISYM
  684.                 CALL WN
  685.         IN_GSDAT
  686.                 CALL PRISYM
  687.                 CALL WN
  688.         IN_GSDAT
  689.                 CALL PRISYM
  690.                 CALL WN
  691.         IN_GSDAT
  692.                 JP PRISYM
  693.  
  694. ; получение времени проигрывания в
  695. ; текстовом виде и распечатка
  696. READSEC
  697.         OUT_GSDAT __GET_TIME
  698.         OUT_GSCOM 0x1F
  699.                 CALL WC
  700.                 CALL WN
  701.         IN_GSDAT
  702.                 CALL PRISYM
  703.                 CALL WN
  704.         IN_GSDAT
  705.                 CALL PRISYM
  706.                 LD A,':'
  707.                 CALL PRISYM
  708.                 CALL WN
  709.         IN_GSDAT
  710.                 CALL PRISYM
  711.                 CALL WN
  712.         IN_GSDAT
  713.                 CALL PRISYM
  714.                 LD A,':'
  715.                 CALL PRISYM
  716.                 CALL WN
  717.         IN_GSDAT
  718.                 CALL PRISYM
  719.                 CALL WN
  720.         IN_GSDAT
  721.                 JP PRISYM
  722.  
  723. ; при отсутствии NeoGS выход в 128 басик
  724. NO_NGS          LD A,7
  725.                 CALL CLS
  726.         DE_ADR_SCR 9,8
  727.                 LD HL,MESS17
  728.                 CALL PRINT
  729. NO_ISA
  730.         DE_ADR_SCR 6,10
  731.                 LD HL,MESS19
  732.                 CALL PRINT
  733.                 CALL ANYKEY
  734.                 JP RESCOMP
  735.  
  736. ; ждем нажатия кнопки
  737. ANYKEY
  738.         IFDEF _SPRINTER
  739.                 EI
  740.         SPDSS DSSF.SCANKEY
  741.                 JR Z,ANYKEY
  742.                 RET
  743.         ELSE
  744. .L1             XOR A
  745.                 IN A,(0xFE)
  746.                 CPL
  747.                 AND 0x1F
  748.                 JR Z,.L1
  749.                 RET
  750.         ENDIF
  751.  
  752. ; ждем отпускания кнопки
  753. NANYKEY
  754.         IFDEF _SPRINTER
  755.                 EI
  756.         SPDSS DSSF.SCANKEY
  757.                 JR NZ,NANYKEY
  758.                 RET
  759.         ELSE
  760. .L1             XOR A
  761.                 IN A,(0xFE)
  762.                 CPL
  763.                 AND 0x1F
  764.                 JR NZ,.L1
  765.                 RET
  766.         ENDIF
  767.  
  768. ; при отсутствии GS выход в 128 басик
  769. NO__GS          LD A,7
  770.                 CALL CLS
  771.         DE_ADR_SCR 10,8
  772.                 LD HL,MESS18
  773.                 CALL PRINT
  774.         DE_ADR_SCR 6,10
  775.                 LD HL,MESS19
  776.                 CALL PRINT
  777.                 CALL ANYKEY
  778.                 JP RESCOMP
  779.  
  780. ; печать текста до байта 0 или пока B не обнулица
  781. PRINT_B         LD A,(HL)
  782.                 AND A
  783.                 RET Z
  784.                 INC HL
  785.                 CALL PRISYM
  786.                 DJNZ PRINT_B
  787.                 RET
  788.  
  789. ; печать текста до байта 0
  790. PRINT           LD A,(HL)
  791.                 INC HL
  792.                 AND A
  793.                 RET Z
  794.                 CALL PRISYM
  795.                 JR PRINT
  796.  
  797. MORDALL         LD HL,MESS1
  798.         DE_ADR_SCR 0,0
  799.                 CALL PRINT
  800.                 LD HL,MESS16
  801.         DE_ADR_SCR 20,0
  802.                 CALL PRINT
  803.                 LD HL,MESS2
  804.         DE_ADR_SCR 0,2
  805.                 CALL PRINT
  806.                 LD HL,MESS3
  807.         DE_ADR_SCR 0,3
  808.                 CALL PRINT
  809.                 LD HL,MESS4
  810.         DE_ADR_SCR 0,4
  811.                 CALL PRINT
  812.                 LD HL,MESS5
  813.         DE_ADR_SCR 0,5
  814.                 CALL PRINT
  815.                 LD HL,MESS6
  816.         DE_ADR_SCR 0,6
  817.                 CALL PRINT
  818.                 LD HL,MESS7
  819.         DE_ADR_SCR 0,8
  820.                 CALL PRINT
  821.                 LD HL,MESS8
  822.         DE_ADR_SCR 0,10
  823.                 CALL PRINT
  824.                 LD HL,MESS24
  825.         DE_ADR_SCR ((32-(EMESS24-MESS24))/2),15
  826.                 CALL PRINT
  827.                 LD A,VARP_CHIP_TYPE
  828.                 CALL GET_VTS
  829.                 LD C,A
  830.         IFDEF _SPRINTER
  831.                 PUSH BC
  832.         DE_ADR_SCR 0,15
  833.                 POP BC
  834.                 PUSH BC
  835.                 LD A,C
  836.                 XOR %00000111
  837.                 ADD A,A
  838.                 ADD A,A
  839.                 ADD A,A
  840.                 ADD A,A
  841.                 OR BLUE
  842.                 LD E,A
  843.         SPBIOS BIOSF.LP_PRINT_ATR,32
  844.                 POP BC         
  845.         ELSE ; SPRINTER
  846.                 XOR %00000111
  847.                 ADD A,A
  848.                 ADD A,A
  849.                 ADD A,A
  850.                 OR BLUE
  851.                 LD HL,0x59E0
  852.                 LD B,32
  853. .L1             LD (HL),A
  854.                 INC L
  855.                 DJNZ .L1
  856.         ENDIF ; SPRINTER
  857.                 LD A,C
  858.                 ADD A,'0'                       ; номер версии MP3 чипа
  859.                 CP '9' + 1
  860.                 JR C,.L2
  861.                 ADD A,7
  862. .L2
  863.         DE_ADR_SCR 31,15
  864.                 CALL PRISYM
  865. MORDAR
  866.         LD_A VARP_FILE_TYPE
  867.                 CALL GET_VTS
  868.                 CP FILE_MOD
  869.                 JR Z,MORDMOD
  870. ; обновление морды для MP3
  871.                 LD HL,MESS9
  872.         DE_ADR_SCR 0,11
  873.                 CALL PRINT
  874.                 LD HL,MESS10
  875.         DE_ADR_SCR 0,13
  876.                 CALL PRINT
  877.                 LD HL,MESS11
  878.         DE_ADR_SCR 0,12
  879.                 CALL PRINT
  880.                 LD HL,MESS12
  881.         DE_ADR_SCR 0,14
  882.                 CALL PRINT
  883.                 LD HL,MESSEM
  884.         DE_ADR_SCR 19,14
  885.                 CALL PRINT
  886.                 LD HL,MESS26
  887.         DE_ADR_SCR 28,10
  888.                 CALL PRINT
  889.                 LD HL,MESS27
  890.         DE_ADR_SCR 28,11
  891.                 CALL PRINT
  892.                 JP PRTTBL
  893.  
  894. ; обновление морды плеера для MOD
  895. MORDMOD         LD HL,EMPT16 + 3
  896.         DE_ADR_SCR 19,10
  897.                 CALL PRINT
  898.                 LD HL,EMPT16
  899.         DE_ADR_SCR 16,12
  900.                 CALL PRINT
  901.                 LD HL,EMPT16
  902.         DE_ADR_SCR 16,13
  903.                 CALL PRINT
  904.                 LD HL,EMPT16
  905.         DE_ADR_SCR 16,9
  906.                 CALL PRINT
  907.                 LD HL,MOD00
  908.         DE_ADR_SCR 0,11
  909.                 CALL PRINT
  910.                 LD HL,EMPT16
  911.         DE_ADR_SCR 16,11
  912.                 CALL PRINT
  913.                 LD HL,MOD02
  914.         DE_ADR_SCR 0,12
  915.                 CALL PRINT
  916.                 LD HL,MOD03
  917.         DE_ADR_SCR 0,13
  918.                 CALL PRINT
  919.                 LD HL,EMPT16
  920.         DE_ADR_SCR 16,14
  921.                 CALL PRINT
  922.                 LD HL,EMPT16
  923.         DE_ADR_SCR 0,14
  924.                 JP PRINT
  925.  
  926. ; обновление инфы проигрывания MOD
  927. POSMOD          LD A,VARP_SIZE_PATTERN_MOD
  928.                 CALL GET_VTS
  929.         DE_ADR_SCR 14,11
  930.                 CALL PRIHEX
  931.         DE_ADR_SCR 14,12
  932.         OUT_GSCOM 0x60
  933.                 CALL WC
  934.                 CALL WN
  935.         IN_GSDAT
  936.                 CALL PRIHEX
  937.         DE_ADR_SCR 14,13
  938.         OUT_GSCOM 0x61
  939.                 CALL WC
  940.                 CALL WN
  941.         IN_GSDAT
  942.                 JP PRIHEX
  943.  
  944. ; читать байт переменных по смещению в "A"
  945. GET_VTS
  946.         OUT_GSDAT_A
  947.         OUT_GSCOM 0xFF
  948.                 CALL WC
  949.                 CALL WN
  950.         IN_GSDAT
  951.                 RET
  952.  
  953. ; получение 16 битного состояния
  954. FGETVTS
  955.         OUT_GSDAT __GET_VTS
  956.         OUT_GSCOM 0x1F
  957.                 CALL WC
  958.                 CALL WN
  959.         IN_GSDAT
  960.                 LD H,A
  961.                 CALL WN
  962.         IN_GSDAT
  963.                 LD L,A
  964.                 RET
  965.  
  966. MOD00           DZ "Length:        "
  967. MOD02           DZ "Position:      "
  968. MOD03           DZ "Note:          "
  969.  
  970. VENTIL          DB 0xC4,0x5C,0x7C,0x2F
  971.  
  972. MESS1           DZ "Found files:"
  973. MESS16          DZ "\"Space\" Exit"
  974. MESS2           DZ "1 Prev. File  SS+1 Prev. DIR"
  975. MESS3           DZ "2 Play File"
  976. MESS4           DZ "3 Pause"
  977. MESS5           DZ "4 Stop"
  978. MESS6           DZ "5 Next File   SS+5 Next DIR"
  979. MESS7           DZ "0 Eject SD Card"
  980. MESS8           DZ "Play Number:"
  981. MESS9           DZ "Time Play:      "
  982. MESS10          DZ "9 Treble/Bass:  "
  983. MESS11          DZ "8 Surround:     "
  984. MESS12          DZ "<6-7> Volume:   "
  985. MESSEM          DZ "\"Enter\" Mute"
  986. MESS13          DZ "SD-Card Not Found"
  987. MESS14          DZ "FAT not Found"
  988. MESS15          DZ "Press \"ENTER\" 4 Restart Init SD"
  989. MESS17          DB "Neo"
  990. MESS18          DZ "GS not found"
  991. MESS19          DB "Press any key for "
  992.         IFDEF _SPRINTER
  993.                 DZ "exit"
  994.         ELSE
  995.                 DZ "reset"
  996.         ENDIF
  997. MESS20          DZ "Please wait, search files"
  998. MESS21          DZ "Eject SD card or insert new card"
  999. MESS22          DZ "Press any key"
  1000. MESS23          DZ "File(s) not found"
  1001. MESS24          DB "Neo Player Light v",VERS_PLAYER,0
  1002. EMESS24         EQU $-1
  1003. EMPT32          DB "                "
  1004. EMPT16          DZ "                "
  1005. MESS26          DZ "Hz"
  1006. MESS27          DZ "kbps"
  1007. MESS28          DZ "Please wait, detect NeoGS"
  1008.  
  1009.         IFDEF _SPRINTER
  1010. NOT_FOUND_ISA   DZ "ISA Slot not found. Emulator?"
  1011.         ENDIF
  1012.  
  1013. REJCHAN         DB "      stereo"
  1014.                 DB "joint stereo"
  1015.                 DB "dual channel"
  1016.                 DB "        mono"
  1017.  
  1018. SR0             DB "11025110252205044100"
  1019. SR1             DB "12000120002400048000"
  1020. SR2             DB " 8000 80001600032000"
  1021.  
  1022. L3ID0           DB "  -  8 16 24 32 40 48 56 64 80 96112128144160   "
  1023.                 DB "  - 32 40 48 56 64 80 96112128160192224256320"
  1024.  
  1025. L2ID0           DB "  -  8 16 24 32 40 48 56 64 80 96112128144 160  "
  1026.                 DB "  - 32 48 56 64 80 96112128160192224256320384"
  1027.  
  1028. L1ID0           DB "  - 32 48 56 64 80 96112128144160176192224256   "
  1029.                 DB "  - 32 64 96128160192224256288320352384416448"
  1030.  
  1031. EJECT
  1032.         OUT_GSDAT __STOP
  1033.         OUT_GSCOM 0x1F
  1034.                 CALL WC
  1035.                 LD A,7
  1036.                 CALL CLS
  1037.                 LD HL,MESS21
  1038.         DE_ADR_SCR 0,8
  1039.                 CALL PRINT
  1040.                 LD HL,MESS22
  1041.         DE_ADR_SCR 9,10
  1042.                 CALL PRINT
  1043.                 CALL NANYKEY
  1044.                 CALL ANYKEY
  1045.                 CALL NANYKEY
  1046.         OUT_GSDAT __INIT_SD
  1047.         OUT_GSCOM 0x1F
  1048.                 JP LOOP21
  1049.  
  1050. CLS
  1051.         IFDEF _SPRINTER
  1052.                 LD HL,32 << 8 + 80
  1053.                 LD DE,0
  1054.         SPBIOS BIOSF.LP_CLS_WIN, LGRAY
  1055.         ELSE
  1056.                 LD HL,0x4000
  1057.                 LD E,L
  1058.                 LD D,H
  1059.                 LD (HL),L
  1060.                 INC E
  1061.                 LD BC,0x1800
  1062.                 LDIR
  1063.                 LD (0x5C8D),A
  1064.                 LD (0x5C48),A
  1065.                 LD HL,0x5800
  1066.                 LD D,H
  1067.                 LD E,L
  1068.                 LD (HL),A
  1069.                 LD BC,0x02FF
  1070.                 INC E
  1071.                 LDIR
  1072.                 RRCA
  1073.                 RRCA
  1074.                 RRCA
  1075.                 AND 7
  1076.                 OUT (0xFE),A
  1077.         ENDIF
  1078.                 RET
  1079.  
  1080. ; чтение из порта NeoGS
  1081. ; вход: E-адрес порта
  1082. ; выход: A-прочитанное значение
  1083. INPORT          LD A,E
  1084.         OUT_GSDAT_A
  1085.         OUT_GSCOM 0x11
  1086.                 CALL WC
  1087.         IN_GSDAT
  1088.                 RET
  1089.  
  1090. ; запись в порт NEOGS
  1091. ; вход: E-адрес порта, D-значение
  1092. OUTPORT         LD A,E
  1093.         OUT_GSDAT_A
  1094.         OUT_GSCOM 0x10
  1095.                 CALL WC
  1096.                 LD A,D
  1097.         OUT_GSDAT_A
  1098.                 JR WD
  1099.  
  1100. ; ожидание байта ответа с паузой
  1101. ;WAIT_WN                PUSH BC
  1102. ;               LD B,2
  1103. ;               DJNZ $
  1104. ;               POP BC
  1105.  
  1106. ; ожидание установки DATA бита
  1107. WN
  1108.         IN_GSCOM
  1109.                 RLA
  1110.                 JR NC,WN
  1111.                 RET
  1112.  
  1113. ; ожидание сброса COMMAND бита
  1114. WC
  1115.         IN_GSCOM
  1116.                 RRA
  1117.                 JR C,WC
  1118.                 RET
  1119.  
  1120. ; ожидание сброса DATA бита
  1121. WD
  1122.         IN_GSCOM
  1123.                 RLA
  1124.                 JR C,WD
  1125.                 RET
  1126.  
  1127. ; прием E байт из NeoGS
  1128. INI_E
  1129. INI_E1          LD D,0
  1130. INI_E2          DEC D
  1131.                 JR Z,INI_E3
  1132.                 CALL WN
  1133.         IN_GSDAT
  1134.                 LD (HL),A
  1135.                 INC HL
  1136.                 DEC E
  1137.                 JR NZ,INI_E1
  1138.                 RET
  1139.  
  1140. INI_E3
  1141.         LD_A VARP_FLAGS
  1142.                 CALL GET_VTS
  1143.                 BIT B_SD_LOST,A
  1144.                 JR Z,INI_E1
  1145.                 LD SP,(OLD_STACK)
  1146.                 JP EJECT
  1147.  
  1148. PRIHEX          PUSH AF
  1149.                 RRA
  1150.                 RRA
  1151.                 RRA
  1152.                 RRA
  1153.                 CALL .PHC
  1154.                 POP AF
  1155. .PHC            AND 0x0F
  1156.                 CP 0x0A
  1157.                 JR C,.L1
  1158.                 ADD A,7
  1159. .L1             ADD A,'0'
  1160. PRISYM          PUSH HL
  1161.                 PUSH DE
  1162.         IFDEF _SPRINTER
  1163.                 PUSH BC
  1164.                 LD B,1
  1165.         SPBIOS BIOSF.LP_PRINT_SYM
  1166.                 POP BC
  1167.                 POP DE
  1168.                 POP HL
  1169.                 RET
  1170.         ELSE
  1171.                 PUSH DE
  1172.                 LD L,A
  1173.                 LD H,0
  1174.                 LD DE,CHARS
  1175.                 ADD HL,HL
  1176.                 ADD HL,HL
  1177.                 ADD HL,HL
  1178.                 ADD HL,DE
  1179.                 POP DE
  1180.         REPT 8
  1181.                 LD A,(HL)
  1182.                 LD (DE),A
  1183.                 INC HL
  1184.                 INC D
  1185.         ENDM
  1186.                 POP DE
  1187.                 POP HL
  1188.                 INC E
  1189.                 RET
  1190.         ENDIF
  1191.  
  1192.         IFDEF _SPRINTER
  1193. ; установка позиции печати
  1194. SET_DE_ADR_SCR  PUSH AF
  1195.                 PUSH HL
  1196.                 PUSH DE
  1197.                 PUSH BC
  1198.         SPBIOS BIOSF.LP_SET_PLACE
  1199.                 POP BC
  1200.                 POP DE
  1201.                 POP HL
  1202.                 POP AF
  1203.                 RET
  1204.  
  1205. DETECT_ISA      LD (OPEN_ISA.SLOT),A
  1206. ; A - номер слота 0 или 1
  1207. OPEN_ISA        LD A,0
  1208. .SLOT           EQU $-1
  1209.                 ex af,af'
  1210.                 in a,(PAGE_CPU3);(mmu3)
  1211.                 ld (CLOSE_ISA.pg),a
  1212.                 ld bc,0x1FFD;sc_port
  1213.                 ld a,0x11
  1214.                 out (c),a
  1215.                 ex af,af'
  1216.                 rlca
  1217.                 or %11010100;ISA.SLOT0_PORT
  1218.                 out (PAGE_CPU3),a;(mmu3),a
  1219.                 ld bc,ISA_PORT;ISA.DIR
  1220.                 xor a
  1221.                 out (c),a
  1222.                 ret
  1223.  
  1224. CLOSE_ISA       ld bc,0x1FFD;sc_port
  1225.                 ld a,1
  1226.                 out (c),a
  1227.                 ld a,0
  1228. .pg             EQU $-1
  1229.                 out (PAGE_CPU3),a;(mmu3),a
  1230.                 ret
  1231.  
  1232. CHECK_ISA       ld a,(0xC000)
  1233.                 cp 0xff
  1234.                 ret z                           ; норм, шина ISA есть
  1235.                 scf                             ; нет, шины нет (эмулятор?)
  1236.                 ret
  1237.         ENDIF
  1238.  
  1239. GO_YES          binclude tmp/play_on_ngs.rom
  1240. FAT_END
  1241.  
  1242.         IFNDEF _SPRINTER
  1243. CHARS           binclude make/altstd.bin
  1244.         ENDIF
  1245.  
  1246.                 DUPL LOW (-GO_YES)
  1247. OPISAT          EQU $                           ; адрес складирования описателя при приеме с нгс
  1248.