Subversion Repositories ngs

Rev

Rev 158 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

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