Subversion Repositories ngs

Rev

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

  1.  
  2. ; LAST UPDATE: 13.11.2025 savelij
  3.  
  4.                 include macros.a80
  5.                 include ports_ngs.a80
  6.                 include sdcomand.a80
  7.                 include local_macros.a80
  8.                 include define_vs10xx.a80
  9.  
  10. NSGCODESIZE     EQU GSDDRVE - GSDDRV
  11.  
  12.                 ORG ADR_START
  13.                 DI
  14.                 CALL FADRTSC
  15. RESTART         CALL CLEAR_SCREEN
  16.                 LD HL,NAME
  17.                 CALL PRINT_MSG
  18.                 LD HL,TEST.RESTART
  19.                 CALL PRINT_MSG
  20.         IF 0
  21.                 LD A,0x80
  22.                 OUT (GSCTR),A
  23.                 NOP
  24.                 NOP
  25.                 NOP
  26.                 NOP
  27.                 LD A,0x55
  28.                 OUT (GSDAT),A
  29.                 OUT (GSCOM),A   ;первый ожидаемый байт загрузчиком
  30.                 CALL WC         ;ждем очистки COMMAND BIT
  31.                 LD A,0xAA
  32.                 OUT (GSDAT),A
  33.                 OUT (GSCOM),A   ;второй ожидаемый байт загрузчиком
  34.                 CALL WC
  35.                 XOR A
  36.                 OUT (GSDAT),A
  37.                 LD A,8
  38.                 OUT (GSCOM),A
  39.                 CALL WC
  40.                 LD HL,VVARS.TEXT
  41.                 LD BC,GSDAT
  42. .L1             CALL WN
  43.                 IN A,(C)
  44.                 LD (HL),A
  45.                 INC HL
  46.                 AND A
  47.                 JR NZ,.L1
  48.  
  49.                 LD HL,VVARS.TEXT
  50.                 CALL PRINT_MSG
  51.         ELSE
  52.                 LD HL,TEST.FIND_NGS
  53.                 CALL PRINT_MSG
  54.                 CALL FIND_NGS
  55.                 JR NC,.L2
  56.                 LD HL,TEST.NO_NGS
  57.                 CALL PRINT_MSG
  58.                 JP FIND_SD
  59.         ENDIF
  60.  
  61. .L2             LD E,GSCFG0
  62.                 CALL INPORT
  63.                 AND M_EXPAG ! 0xFF
  64.                 LD D,A
  65.                 CALL OUTPORT
  66.                 LD HL,TEST.FOUND
  67.                 CALL PRINT_MSG
  68.         OUT_GSCOM 0x23
  69.                 CALL WC
  70.         IN_GSDAT
  71.                 OR %00001111
  72.                 INC A
  73.                 LD IXL,A
  74.                 LD HL,TEST.ALL_PAGE
  75.                 CALL PRINT_MSG
  76.                 LD A,IXL
  77.                 CALL PRIHEX
  78.                 LD HL,TEST.NEWLINE
  79.                 CALL PRINT_MSG
  80. ; запись номеров страниц в страницы
  81.                 CALL SET_DE
  82.                 LD IXH,2
  83. .L1             LD D,IXH
  84.                 LD E,MPAG                       ; включаем стандартной командой прошивки
  85.                 CALL OUTPORT                    ; страницу на нгс для загрузки внутреннего плеера
  86.                 LD A,IXH
  87.                 CALL POKE_DE
  88.                 INC IXH
  89.                 LD A,IXH
  90.                 CP IXL
  91.                 JR C,.L1
  92. ; вычитывание номеров страниц с проверкой
  93.                 LD HL,VVARS.PAGES
  94.                 LD D,H
  95.                 LD E,L
  96.                 INC DE
  97.                 LD BC,0xFF
  98.                 LD (HL),0
  99.                 LDIR
  100.                 CALL SET_DE
  101.                 LD IXH,2
  102. .L4             LD D,IXH
  103.                 LD E,MPAG                       ; включаем стандартной командой прошивки
  104.                 CALL OUTPORT                    ; страницу на нгс для загрузки внутреннего плеера
  105.                 CALL PEEK_DE
  106.                 CP IXH
  107.                 JR Z,.L6
  108.                 LD H,HIGH (VVARS.PAGES)
  109.                 LD L,A
  110.                 INC (HL)
  111. .L6             INC IXH
  112.                 LD A,IXH
  113.                 CP IXL
  114.                 JR C,.L4
  115.                 LD HL,VVARS.PAGES
  116. .L7             INC (HL)
  117.                 DEC (HL)
  118.                 JR NZ,.L3
  119.                 INC L
  120.                 LD A,IXL
  121.                 SUB L
  122.                 JR NZ,.L7
  123.  
  124. .L5             LD HL,TEST.OK
  125.                 CALL PRINT_MSG
  126.                 JR FIND_SD
  127.  
  128. .L3             PUSH HL
  129.                 LD HL,TEST.ERROR
  130.                 CALL PRINT_MSG
  131.                 POP HL
  132. .L8             INC (HL)
  133.                 DEC (HL)
  134.                 JR Z,.L9
  135.                 LD A,L
  136.                 PUSH HL
  137.                 CALL PRIHEX
  138.                 LD A,','
  139.                 CALL PRINT_A_
  140.                 POP HL
  141. .L9             INC L
  142.                 JR NZ,.L8
  143. ; поиск SD карты
  144. FIND_SD         CALL INSTSDD
  145.                 JR Z,FIND_FAT
  146.                 LD HL,TEST.SD_NOT_FOUND
  147. .L1             CALL PRINT_MSG
  148.                 CALL START_COMSDG
  149.                 DB 6
  150.                 PUSH AF
  151.                 LD HL,TEST.MP3CHIP
  152.                 CALL PRINT_MSG
  153.                 POP AF
  154.                 AND %00001111
  155.                 CP %00001111
  156.                 JR Z,.L2
  157.                 LD E,A
  158.                 ADD A,A
  159.                 ADD A,E
  160.                 ADD A,A
  161.                 ADD A,E
  162.                 LD E,A
  163.                 LD D,0
  164.                 LD HL,MP3CHIPS
  165.                 ADD HL,DE
  166.                 CALL PRINT_MSG
  167.                 JR END_TEST
  168.  
  169. .L2             LD HL,TEST.MP3NONE
  170.                 CALL PRINT_MSG
  171. END_TEST        CALL ANYKEY
  172.                 CALL NANYKEY
  173.                 JP RESTART
  174.  
  175. ; поиск FAT
  176. FIND_FAT        LD HL,TEST.SD_FOUND
  177.                 CALL PRINT_MSG
  178.                 CALL START_COMSDG
  179.                 DB 0
  180.                 LD HL,TEST.SD_NOT_INIT
  181.                 JR NZ,FIND_SD.L1
  182.                 LD HL,VVARS.BUFSEC
  183.                 LD DE,0
  184.                 LD BC,0
  185.                 CALL START_COMSDG
  186.                 DB 2
  187.                 CALL CHECK_VOL
  188.                 LD HL,TEST.VOL_NOT_FOUND
  189.                 JP NZ,FIND_SD.L1
  190.                 LD HL,TEST.FATTYPE
  191.                 CALL PRINT_MSG
  192.                 LD DE,5
  193.                 LD HL,VVARS.BUFSEC + 0x36
  194.                 LD A,'F'
  195.                 CP (HL)
  196.                 JR Z,.L1
  197.                 LD HL,VVARS.BUFSEC + 0x52
  198. .L1             ADD HL,DE
  199.                 LD (HL),0
  200.                 SBC HL,DE
  201.                 CALL PRINT_MSG
  202.                 LD HL,TEST.NEWLINE
  203.                 JR FIND_SD.L1
  204.  
  205. CHECK_VOL       LD DE,0x01BE
  206.                 LD IX,VVARS.BUFSEC
  207.                 ADD IX,DE
  208.                 LD BC,0x0400
  209. RD0HDD0         LD A,(IX + 0)
  210.                 AND A
  211.                 JR Z,RD0HDD1
  212.                 CP 0x80
  213.                 JR NZ,RD0HDD2
  214. RD0HDD1         LD A,(IX + 4)
  215.                 CALL CP_RAZD
  216.                 JR NZ,RD0HDD2
  217.                 INC C
  218. RD0HDD2         LD DE,0x10
  219.                 ADD IX,DE
  220.                 DJNZ RD0HDD0
  221.                 LD A,C
  222.                 AND A
  223.                 JP NZ,SCANMBR
  224.                 LD IX,VVARS.BUFSEC
  225.                 LD C,(IX+0x0D)
  226.                 XOR A
  227.                 LD E,A
  228.                 LD B,8
  229.                 RR C
  230.                 ADC A,0
  231.                 DJNZ $-4
  232.                 DEC A
  233.                 JR NZ,$+3
  234.                 INC E
  235.                 LD A,(IX+0x0E)
  236.                 OR (IX+0x0F)
  237.                 JR Z,$+3
  238.                 INC E
  239.                 LD A,(IX+0x13)
  240.                 OR (IX+0x14)
  241.                 JR NZ,$+3
  242.                 INC E
  243.                 LD A,(IX+0x20)
  244.                 OR (IX+0x21)
  245.                 OR (IX+0x22)
  246.                 OR (IX+0x22)
  247.                 JR NZ,$+3
  248.                 INC E
  249.                 LD A,(IX+0x15)
  250.                 AND 0xF0
  251.                 CP 0xF0
  252.                 JR NZ,$+3
  253.                 INC E
  254.                 LD A,E
  255.                 CP 4
  256.                 RET
  257.  
  258. SCANMBR         LD HL,VVARS.BUFSEC + 0x1BE + 8
  259.                 LD E,(HL)
  260.                 INC HL
  261.                 LD D,(HL)
  262.                 INC HL
  263.                 LD C,(HL)
  264.                 INC HL
  265.                 LD B,(HL)
  266.                 LD HL,VVARS.BUFSEC
  267.                 CALL START_COMSDG
  268.                 DB 2
  269.                 RET
  270.  
  271. CP_RAZD         LD E,1
  272.                 CP 4
  273.                 RET Z
  274.                 CP 6
  275.                 RET Z
  276.                 CP 0x0E
  277.                 RET Z
  278.                 LD E,2
  279.                 CP 0x0B
  280.                 RET Z
  281.                 CP 0x0C
  282.                 RET Z
  283.                 LD E,0
  284.                 CP 1
  285.                 RET
  286.  
  287. ; ждем нажатия кнопки
  288. ANYKEY
  289.         IFDEF _SPRINTER
  290.                 EI
  291.         SPDSS DSSF.SCANKEY
  292.                 JR Z,ANYKEY
  293.                 RET
  294.         ELSE
  295. .L1             XOR A
  296.                 IN A,(0xFE)
  297.                 CPL
  298.                 AND 0x1F
  299.                 JR Z,.L1
  300.                 RET
  301.         ENDIF
  302.  
  303. ; ждем отпускания кнопки
  304. NANYKEY
  305.         IFDEF _SPRINTER
  306.                 EI
  307.         SPDSS DSSF.SCANKEY
  308.                 JR NZ,NANYKEY
  309.                 RET
  310.         ELSE
  311. .L1             XOR A
  312.                 IN A,(0xFE)
  313.                 CPL
  314.                 AND 0x1F
  315.                 JR NZ,.L1
  316.                 RET
  317.         ENDIF
  318.  
  319. SET_DE
  320.         OUT_GSDAT 0x88
  321.         OUT_GSCOM 0x18
  322.                 CALL WC
  323.         OUT_GSDAT 0x88
  324.                 CALL WD
  325.                 RET
  326.  
  327. POKE_DE
  328.         OUT_GSDAT_A
  329.         OUT_GSCOM 0x19
  330.                 JR WC
  331.  
  332. PEEK_DE
  333.         OUT_GSCOM 0x1A
  334.                 CALL WC
  335.         IN_GSDAT
  336.                 RET
  337.  
  338. WRBYTE
  339.         OUT_GSDAT_A
  340.         OUT_GSCOM 0x16
  341.                 CALL WC
  342.         OUT_GSDAT 0x88
  343.                 CALL WD
  344.         OUT_GSDAT 0x88
  345.                 CALL WD
  346.                 RET
  347.  
  348. RDBYTE
  349.         OUT_GSDAT 0x88
  350.         OUT_GSCOM 0x17
  351.                 CALL WD
  352.         OUT_GSDAT 0x88
  353.                 CALL WD
  354.         IN_GSDAT
  355.                 RET
  356.  
  357. ; запись в порт NEOGS
  358. ; вход: E-адрес порта, D-значение
  359. OUTPORT         LD A,E
  360.         OUT_GSDAT_A
  361.         OUT_GSCOM 0x10
  362.                 CALL WC
  363.                 LD A,D
  364.         OUT_GSDAT_A
  365.                 JR WD
  366.  
  367. ; E-адрес порта для чтения
  368. INPORT          LD A,E
  369.         OUT_GSDAT_A
  370.         OUT_GSCOM 0x11
  371.                 CALL WN
  372.         IN_GSDAT
  373.                 RET
  374.  
  375. WC              IN A,(GSCOM)
  376.                 RRCA
  377.                 JR C,WC
  378.                 RET
  379.  
  380. WD              IN A,(GSCOM)
  381.                 RLCA
  382.                 JR C,WD
  383.                 RET
  384.  
  385. WN              IN A,(GSCOM)
  386.                 RLCA
  387.                 JR NC,WN
  388.                 RET
  389.  
  390. ; тест наличия GS/NeoGS
  391. FIND_NGS
  392.                 LD B,0x30                       ; для определения наличия нгс используется
  393.                                                 ; команда 0x1D с параметром =0
  394.         OUT_GSDAT 0                             ; ждем ответа 0x30 прерываний
  395.         OUT_GSCOM 0x1D
  396. LOOP22          EI
  397.                 HALT
  398.                 DI
  399.                 DEC B
  400.                 JR Z,LOOP21                     ; счетчик обнулился, а может нгс висит?
  401.         IN_GSCOM                                ; ждем сброса команд бита
  402.                 RRA
  403.                 JR C,LOOP22
  404.         IN_GSDAT                                ; команд бит сбросился, читаем ответ из дата порта
  405.                                                 ; попытка получить флаговый байт с нгс
  406.         OUT_GSDAT 0                             ; при первом запуске команда 0xFF еще не пропатчена
  407.                 LD B,0x30                       ; ждем ответа 0x30 прерываний
  408.         OUT_GSCOM 0xFF
  409. LOOP001         EI
  410.                 HALT
  411.                 DI
  412.                 DEC B
  413.                 JR Z,LOOP21                     ; счетчик обнулился, пробуем перезапустить нгс
  414.         IN_GSCOM
  415.                 RRA
  416.                 JR C,LOOP001
  417.                 XOR A
  418.                 RET                             ; нгс ответил на команду, подключаемся к внутреннему плееру
  419.  
  420. ; принудительный перезапуск NeoGS
  421. LOOP21
  422.         OUT_GSCTR M_DBIT                        ; полный сброс нгс
  423.                 EI
  424.                 HALT
  425.                 HALT
  426.                 DI
  427.         OUT_GSCOM 0xF3                          ; холодный перезапуск нгс прошивки
  428.                 LD B,0x30                       ; ждем 0x30 прерываний
  429. LOOP25          EI
  430.                 HALT
  431.                 HALT
  432.                 DI
  433.                 DEC B
  434.                 SCF
  435.                 RET Z                           ; нет ответа, нет нгс
  436.         IN_GSCOM
  437.                 RRA
  438.                 JR C,LOOP25                     ; команд бит изменился, продолжаем
  439.                 XOR A
  440.                 RET
  441.  
  442. NAME            DB "\x16\x08\x00\x17\x06Test NeoGS build "
  443.                 TEXTDATE
  444.                 DZ " \x0D"
  445.  
  446. MP3CHIPS        DZ "VS1001"
  447.                 DZ "VS1011"
  448.                 DZ "VS1002"
  449.                 DZ "VS1003"
  450.                 DZ "VS1053"
  451.                 DZ "VS1033"
  452.                 DZ "VS1063"
  453.                 DZ "VS1103"
  454.  
  455. TEST
  456. .ALL_PAGE       DZ "\x16\x00\x02Всего страниц: 0x"
  457. .CURR_PAGE      DZ "\x16\x00\x03Текущая страница: "
  458. .NO_NGS         DZ "не найден"
  459. .NEWLINE        DZ "\x0D"
  460. .ERROR          DZ "Page error: "
  461. .OK             DZ "Pages ok\x0D"
  462. .FIND_NGS       DZ "\x16\x00\x01\x17\x07Определение NeoGS: "
  463. .SD_FOUND       DZ "SD карта найдена\x0D"
  464. .SD_NOT_FOUND   DZ "SD карты не найдена\x0D"
  465. .SD_NOT_INIT    DZ "SD карта не отвечает\x0D"
  466. .VOL_NOT_FOUND  DZ "Разделы не найдены\x0D"
  467. .FAT_NOT_FOUND  DZ "FAT не найден\x0D"
  468. .FOUND          DZ "найден\x0D"
  469. .FATTYPE        DZ "Тип FAT: "
  470. .MP3CHIP        DZ "MP3 чип: "
  471. .MP3NONE        DZ "не определен\x0D"
  472. .RESTART        DZ "\x16\x08\x17\x17\x42\"SPACE\" restart test"
  473.  
  474.                 include screen.a80
  475. ADR_DRIVER      include ngs_drv.a80
  476.  
  477. FONT            binclude altstd.fnt
  478.  
  479. VVARS
  480.  _INIT_VAR 0xA000
  481.  _SETVAR .BUFTSC,       0x200                   ; буфер адресов экрана
  482.  _SETVAR .PAGES,        0x100
  483.  _SETVAR .BUFSEC,       0x200
  484.  _SETVAR .PPOS_X,       BYTE
  485.  _SETVAR .PPOS_Y,       BYTE
  486.  _SETVAR .COLORSYM,     BYTE
  487.  _SETVAR .TEXT,         BYTE
  488.