Subversion Repositories ngs

Rev

Rev 181 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

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