Subversion Repositories ngs

Rev

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

  1.  
  2. ; LAST UPDATE: 08.02.2026 savelij
  3.  
  4.                 include macros.a80
  5.                 include ports_ngs.a80
  6.                 include vers.a80
  7.  
  8. ;SM_LDT         EQU 0X54
  9. ADR_PROGR       EQU 0X5800
  10.  
  11. BUFTSC          EQU 0XB800
  12. TXT_DEC         EQU BUFTSC+0X0180
  13. TXT_HEX         EQU TXT_DEC+0X10
  14.  
  15. BUF_CRC16_TABL  EQU 0X9000                      ;200
  16. BUFFER_ZAG      EQU BUF_CRC16_TABL+0X200        ;200
  17. SKLAD           EQU BUFFER_ZAG+0X200            ;100
  18. DRV_VAR         EQU SKLAD+0X100
  19.  
  20. ;ФОРМАТ ФЛАГОВОГО БАЙТА ОКНА
  21. ;X,Y,V,H,C,C
  22. ;IX+8
  23. ;7-1-НИЖНИЙ ЗАГОЛОВОК
  24. ;6-0-С РАМКОЙ,1-БЕЗ РАМКИ
  25. ;5-1-ВЕРХНИЙ ЗАГОЛОВОК
  26. ;4-0-ТЕКСТ ОКНА,1-БЕЗ ТЕКСТА
  27. ;3
  28. ;2-0-FILE,1-*.TRD
  29. ;1-0-MENU,1-FILES
  30. ;0-0-TRDOS,1-MSDOS
  31.  
  32. ;BIT 4,(IY+55)
  33. ;BIT 3,(IY+55) 1-НЕТ ДИСКА, 0-ЕСТЬ
  34. ;BIT 2,(IY+55) 1-НЕ НАЙДЕНО, 0-FAT ЕСТЬ
  35.  
  36. ;ОПИСАТЕЛЬ ОКНА (АДРЕС В IX)
  37. ;+00 X
  38. ;+01 Y
  39. ;+02 V
  40. ;+03 H
  41. ;+04 C
  42. ;+05 C
  43. ;+06 | АДРЕСА
  44. ;+07 | ПОДПРОГРАММ
  45. ;+08 F
  46. ;+09 X
  47. ;+0A Y
  48. ;+0B V
  49. ;+0C H
  50. ;+0D | АДРЕС
  51. ;+0E | ТЕКСТА
  52. ;+0F : НОМЕР ПУНКТА В ОКНЕ
  53. ;+10 : КОЛИЧЕСТВО
  54. ;+11 : ПУНКТОВ МЕНЮ
  55. ;+12 "C" | ТЕКУЩИЙ
  56. ;+13 "B" | ПУНКТ МЕНЮ
  57.  
  58.                 ORG 0x8000
  59. START_          DI
  60.                 LD A,0X10
  61.                 LD BC,0X7FFD
  62.                 OUT (C),A                       ;ВКЛЮЧИЛИ СТРАНИЦУ 0
  63.                 CALL INITLOADER
  64.                 PUSH AF
  65.                 LD A,0X0A
  66.                 OUT (GSCOM),A
  67.                 SET 3,(IY+48)
  68.                 LD HL,0X0110
  69.                 LD (0X5C09),HL                  ;УСТАНОВИЛИ ПАРАМЕТРЫ ОПРОСА КЛАВИАТУРЫ
  70.                 LD A,0X28
  71.                 CALL CLS                        ;ОЧИСТКА ЭКРАНА
  72.                 RES 5,(IY+1)
  73.                 RES 7,(IY+48)
  74.                 RES 3,(IY+55)                   ;УСТАНОВКА ЕЩЕ НЕКОТОРЫХ ПАРАМЕТРОВ
  75.                 CALL ADRTSC                     ;ФОРМИРОВАНИЕ ТАБЛИЦЫ АДРЕСОВ ЭКРАНА
  76.                 POP AF
  77.                 JP NZ,NGSNOTFOUND
  78. RESTARTUPD      LD A,7
  79.                 OUT (GSCOM),A
  80.                 CALL WC
  81.                 IN A,(GSDAT)
  82.                 AND A
  83.                 JR Z,PROD001
  84.                 PUSH AF
  85.                 LD IX,ERROR_UPDATE
  86.                 CALL WINW
  87.                 POP AF
  88.                 LD HL,TXT_ERRUPD1
  89.                 CP 0XAA
  90.                 JR Z,ERRORRING
  91.                 LD HL,TXT_ERRUPD2
  92.                 CP 0XDD
  93.                 JR Z,ERRORRING
  94.                 LD HL,TXT_ERRUPD3
  95. ERRORRING       CALL NEXT
  96.                 CALL KEYS
  97.                 LD IX,ALLSCR
  98.                 CALL WINW                       ;ВЫВОД ОСНОВНОГО ОКНА
  99. PROD001         LD A,9
  100.                 OUT (GSCOM),A
  101.                 CALL WC
  102.                 IN A,(GSDAT)                    ;код ошибки
  103.                 EX AF,AF'
  104.                 CALL WN
  105.                 IN A,(GSDAT)                    ;младший байт ответа
  106.                 LD L,A
  107.                 CALL WN
  108.                 IN A,(GSDAT)                    ;старший байт ответа
  109.                 LD H,A
  110.                 EX AF,AF'
  111.                 AND 3
  112.                 JR Z,PROD000
  113.                 LD IX,ERROR_UPDATE
  114.                 CALL WINW
  115.                 LD HL,TXT_CRC
  116.                 CALL NEXT
  117. PROD000         LD IX,ALLSCR
  118.                 CALL WINW
  119.                 LD IX,HELPS
  120.                 CALL WINW
  121.                 LD IX,VERS_PAGESNGS
  122.                 CALL WINW
  123.                 CALL RD_VERS_NGS
  124.                 LD IX,WEKS2
  125.                 CALL WINW
  126. PROD01          CALL UPDOWN
  127.                 CALL CP_KEYS
  128.                 DB 0X0D
  129.                 DW KENTER
  130.                 DB 0
  131.                 JR PROD01
  132.  
  133. RD_VERS_NGS     LD IXL,"0"
  134.                 LD DE,TEXT_VERSUS
  135. RVN2            LD HL,TXT_PAGES
  136.                 LD BC,ETXT_PAGES-TXT_PAGES
  137.                 LDIR
  138.                 LD A,IXL
  139.                 INC IXL
  140.                 LD (DE),A
  141.                 LD A," "
  142.                 EX DE,HL
  143.                 INC HL
  144.                 LD (HL),":"
  145.                 INC HL
  146.                 LD (HL),A
  147.                 INC HL
  148.                 LD (HL),A
  149.                 INC HL
  150.                 LD A,IXL
  151.                 SUB "1"
  152.                 OUT (GSDAT),A
  153.                 LD A,8
  154.                 OUT (GSCOM),A
  155.                 CALL WC
  156.                 LD BC,GSDAT
  157. RVN1            CALL WN
  158.                 IN A,(C)
  159.                 LD (HL),A
  160.                 INC HL
  161.                 AND A
  162.                 JR NZ,RVN1
  163.                 DEC HL
  164.                 EX DE,HL
  165.                 LD A,IXL
  166.                 CP '2'
  167.                 CALL Z,COPY_VERS
  168.                 CP "8"
  169.                 JR C,RVN2
  170.                 LD HL,TEXT_VERSUS
  171.                 JP NEXT
  172.  
  173. COPY_VERS       PUSH AF
  174.                 PUSH DE
  175.                 EXX
  176.                 POP DE
  177.                 LD HL,MAINROM_VERS
  178. .L2             LD A,(HL)
  179.                 AND A
  180.                 JR Z,.L1
  181.                 LDI
  182.                 JR .L2
  183.  
  184. .L1             PUSH DE
  185.                 EXX
  186.                 POP DE
  187.                 POP AF
  188.                 RET
  189.  
  190. NGSNOTFOUND     LD IX,ERROR_UPDATE
  191.                 CALL WINW
  192.                 LD HL,TXT_NONGS
  193.                 CALL NEXT
  194.                 CALL KEYS
  195.                 LD HL,0
  196.                 PUSH HL
  197.                 JP 0X3D2F
  198.  
  199. ;ОТРАБОТКА ПЕДАЛИ ENTER
  200. KENTER          LD A,(IX+0X12)
  201.                 AND A
  202.                 JR Z,KENTER1            ;ПЕРЕХОД ДЛЯ ПУНКТА 1-ЗАГРУЗКА ОБНОВЛЕНИЯ
  203.                 JP KENTER4              ;ПЕРЕХОД ДЛЯ ПУНКТА 3-ВЫХОД В TR-DOS
  204.  
  205. ;ВЫБОР И ЗАГРУЗКА ОБНОВЛЕНИЯ ПЗУ
  206. KENTER1         LD IX,UPDATE_NGS
  207.                 CALL WINW
  208.                 LD A,7
  209.                 OUT (GSCOM),A
  210.                 CALL WC
  211.                 IN A,(GSDAT)
  212.                 AND A
  213.                 JP NZ,RESTARTUPD
  214.                 LD A,9
  215.                 OUT (GSCOM),A
  216.                 CALL WC
  217.                 IN A,(GSDAT)                    ;код ошибки
  218.                 EX AF,AF'
  219.                 CALL WN
  220.                 IN A,(GSDAT)                    ;младший байт ответа
  221.                 LD L,A
  222.                 CALL WN
  223.                 IN A,(GSDAT)                    ;старший байт ответа
  224.                 LD H,A
  225.                 EX AF,AF'
  226.                 CP 0X80
  227.                 JP NZ,RESTARTUPD
  228.  
  229.                 XOR A
  230.                 OUT (GSDAT),A
  231.                 LD A,6
  232.                 OUT (GSCOM),A
  233.                 CALL WC
  234.                 XOR A
  235.                 OUT (GSDAT),A
  236.                 CALL WD
  237.                 LD A,0X58
  238.                 OUT (GSDAT),A
  239.                 CALL WD
  240.                 IN A,(GSDAT)
  241.                 CP 0X99
  242.                 JR NZ,$-4
  243.                 EI
  244.                 REPT 5
  245.                 HALT
  246.                 ENDM
  247.                 DI
  248.                 LD IX,ERROR_UPDATE
  249.                 CALL WINW
  250.                 LD HL,TXT_OKUPDATE
  251.                 CALL NEXT
  252.                 CALL KEYS
  253.                 JP START_
  254.  
  255.                 LD A,0X0A
  256.                 OUT (GSCOM),A
  257.                 EI
  258.                 HALT
  259.                 HALT
  260.                 HALT
  261.                 DI
  262.                 JP RESTARTUPD
  263.  
  264. ; выход из прошивальщика со сбросом NeoGS
  265. KENTER4         LD A,C_GRST
  266.                 OUT (GSCTR),A
  267.                 LD HL,0
  268.                 PUSH HL
  269.                 JP 0X3D2F
  270.  
  271. UPDOWN          LD C,(IX+0X12)
  272.                 LD B,(IX+0X13)
  273.                 CALL RVERT
  274.                 SET 3,(IY+55)
  275. UPD04           BIT 3,(IY+55)
  276.                 JR Z,UPD02
  277.                 RES 3,(IY+55)
  278. UPD02           EI
  279.                 HALT
  280.                 DI
  281.                 BIT 5,(IY+1)
  282.                 JR Z,UPD04
  283.                 LD A,(IY-0X32)
  284.                 RES 5,(IY+1)
  285.                 CP 0X0A
  286.                 JR NZ,UPD01
  287.                 CALL DOWN
  288.                 SET 3,(IY+55)
  289.                 JR UPD02
  290.  
  291. UPD01           CP 0X0B
  292.                 JR NZ,UPD03
  293.                 CALL UP
  294.                 SET 3,(IY+55)
  295.                 JR UPD02
  296.  
  297. UPD03           RES 7,(IY+48)
  298.                 LD (IX+0X12),C
  299.                 LD (IX+0X13),B
  300.                 PUSH AF
  301.                 LD A,(IX+4)
  302.                 CALL WYDELK
  303.                 POP AF
  304.                 RET
  305.  
  306. DOWN            LD L,(IX+0X10)
  307.                 LD H,(IX+0X11)
  308.                 LD A,H
  309.                 OR L
  310.                 RET Z
  311.                 SCF
  312.                 SBC HL,BC
  313.                 RET Z
  314.                 INC BC
  315.                 LD A,(IX+2)
  316.                 SUB 3
  317.                 CP (IX+0X0F)
  318.                 JR Z,DOWN1
  319.                 INC (IX+0X0F)
  320.                 LD A,(IX+4)
  321.                 CALL WYDELK
  322.                 LD DE,0X20
  323.                 ADD HL,DE
  324.                 LD (ADRAT+1),HL
  325.                 LD A,(IX+5)
  326.                 JP WYDELK
  327.  
  328. DOWN1           LD A,(IX)
  329.                 ADD A,A
  330.                 ADD A,A
  331.                 ADD A,A
  332.                 INC A
  333.                 LD H,A
  334.                 LD A,(IX+1)
  335.                 ADD A,(IX+2)
  336.                 SUB 2
  337.                 ADD A,A
  338.                 ADD A,A
  339.                 ADD A,A
  340.                 LD L,A
  341.                 LD (ADRSTR+1),HL
  342.                 JP SCRUP
  343.  
  344. UP              LD A,B
  345.                 OR C
  346.                 RET Z
  347.                 DEC BC
  348.                 LD A,(IX+0X0F)
  349.                 AND A
  350.                 JR Z,UP1
  351.                 DEC (IX+0X0F)
  352.                 LD A,(IX+4)
  353.                 CALL WYDELK
  354.                 AND A
  355.                 LD DE,0X20
  356.                 SBC HL,DE
  357.                 LD (ADRAT+1),HL
  358.                 LD A,(IX+5)
  359.                 JR WYDELK
  360.  
  361. UP1             LD A,(IX)
  362.                 ADD A,A
  363.                 ADD A,A
  364.                 ADD A,A
  365.                 INC A
  366.                 LD H,A
  367.                 LD A,(IX+1)
  368.                 INC A
  369.                 ADD A,A
  370.                 ADD A,A
  371.                 ADD A,A
  372.                 LD L,A
  373.                 LD (ADRSTR+1),HL
  374.                 JP SCRDN
  375.  
  376. RVERT           PUSH DE
  377.                 LD H,(IX)
  378.                 LD L,(IX+1)
  379.                 LD A,(IX+0X0F)
  380.                 ADD A,L
  381.                 LD L,A
  382.                 INC L
  383.                 CALL ADRDIS
  384.                 EX DE,HL
  385.                 LD (ADRAT+1),HL
  386.                 LD A,(IX+5)
  387.                 POP DE
  388. WYDELK          PUSH BC
  389. ADRAT           LD HL,0
  390.                 PUSH HL
  391.                 LD B,(IX+3)
  392.                 LD (HL),A
  393.                 INC HL
  394.                 DJNZ $-2
  395.                 POP HL
  396.                 POP BC
  397.                 RET
  398.  
  399. READ_NGS_VERS   EXX
  400.                 LD HL,BUFRD
  401.                 LD DE,0x138
  402.                 LD B,8
  403.                 LD A,B
  404.                 CALL SD                 ; LEN LOW
  405.                 LD A,0X15
  406.                 CALL SC
  407.                 EI
  408.                 HALT
  409.                 DI
  410.                 XOR A
  411.                 CALL SD                 ; LEN HIGH
  412.                 CALL WD
  413.                 LD A,E
  414.                 CALL SD                 ; ADR LOW
  415.                 CALL WD
  416.                 LD A,D
  417.                 CALL SD                 ; ADR HIGH
  418. .L1             CALL WN
  419.                 CALL GD
  420.                 LD (HL),A
  421.                 INC HL
  422.                 INC DE
  423.                 DJNZ .L1
  424. .L2             DEC HL
  425.                 LD A,'!'
  426.                 CP (HL)
  427.                 JR NC,.L2
  428.                 INC HL
  429.                 LD (HL),0
  430.                 EXX
  431.                 RET
  432.  
  433. MAINROM_VERS    DB "ver "
  434. BUFRD           DUPL 0x18
  435.  
  436. FINDNGS         LD A,0X80
  437.                 OUT (GSCTR),A
  438.  
  439. ;DS 3:LD A,0X55:OUT (GSDAT),A
  440. ;OUT (GSCOM),A:CALL WC:LD A,0XAA
  441. ;OUT (GSDAT),A,(GSCOM),A:XOR A
  442. ;OUT (GSDAT),A:LD A,0X1D
  443. ;OUT (GSCOM),A:CALL WC
  444. ;IN A,(GSDAT)
  445.  
  446.                 EI
  447.                 HALT
  448.                 HALT
  449.                 DI
  450.                 LD A,0XF3
  451.                 OUT (GSCOM),A
  452.                 EI
  453.                 HALT
  454.                 HALT
  455.                 DI
  456.                 LD B,0X30
  457. FNDNGS1         EI
  458.                 HALT
  459.                 DI
  460.                 DEC B
  461.                 JR Z,FNDNGS2
  462.                 IN A,(GSCOM)
  463.                 RRA
  464.                 JR C,FNDNGS1
  465.                 LD E,GSCFG0
  466.                 CALL INPORT
  467.                 INC A
  468.                 JR Z,NONGS
  469.                 XOR A
  470.                 RET
  471.  
  472. NONGS           XOR A
  473.                 INC A
  474.                 RET
  475.  
  476. FNDNGS2         XOR A
  477.                 DEC A
  478.                 RET
  479.  
  480. INPORT          LD A,E
  481.                 OUT (GSDAT),A
  482.                 LD A,0X11
  483.                 OUT (GSCOM),A
  484.                 CALL WC
  485.                 IN A,(GSDAT)
  486.                 RET
  487.  
  488. INITLOADER      CALL FINDNGS
  489.                 AND A
  490.                 RET NZ
  491.                 CALL READ_NGS_VERS
  492.                 LD BC,GSDAT
  493.                 LD HL,0X5800
  494.                 LD DE,MINILDE-MINILD
  495.                 OUT (C),E
  496.                 LD A,0X14
  497.                 OUT (GSCOM),A
  498.                 CALL WC
  499.                 OUT (C),D
  500.                 CALL WD
  501.                 OUT (C),L
  502.                 CALL WD
  503.                 OUT (C),H
  504.                 CALL WD
  505.                 LD HL,MINISTR
  506. OUTCOD          OUTI
  507.                 CALL WD
  508.                 DEC DE
  509.                 LD A,D
  510.                 OR E
  511.                 JR NZ,OUTCOD
  512.                 LD HL,0X5800
  513.                 OUT (C),L
  514.                 LD A,0X13
  515.                 OUT (GSCOM),A
  516.                 CALL WC
  517.                 OUT (C),H
  518.                 CALL WD
  519.                 LD DE,NGS_LOADERE-NGS_LOADER
  520.                 OUT (C),E
  521.                 CALL WD
  522.                 OUT (C),D
  523.                 CALL WD
  524.                 LD HL,NGS_LOADER
  525. OUTCOD1         OUTI
  526.                 CALL WD
  527.                 DEC DE
  528.                 LD A,D
  529.                 OR E
  530.                 JR NZ,OUTCOD1
  531.                 EI
  532.                 HALT
  533.                 HALT
  534.                 HALT
  535.                 DI
  536.                 XOR A
  537.                 RET
  538.  
  539. SC              OUT (GSCOM),A
  540.                 RET
  541.  
  542. SD              OUT (GSDAT),A
  543.                 RET
  544.  
  545. GD              IN A,(GSDAT)
  546.                 RET
  547.  
  548. WC              IN A,(GSCOM)
  549.                 RRCA
  550.                 JR C,WC
  551.                 RET
  552.  
  553. WD              IN A,(GSCOM)
  554.                 RLCA
  555.                 JR C,WD
  556.                 RET
  557.  
  558. WN              IN A,(GSCOM)
  559.                 RLCA
  560.                 JR NC,WN
  561.                 RET
  562.  
  563. MINISTR
  564.                 PHASE ADR_PROGR
  565. MINILD          DI
  566.                 IN A,(ZXDATRD)
  567.                 OUT (CLRCBIT),A
  568.                 LD A,0X11
  569.                 OUT (GSCFG0),A                  ;ОТКЛЮЧИЛИ ПЗУ И ВКЛЮЧИЛИ ЧАСТОТЦ 12МГЦ
  570.                 LD HL,0                         ;АДРЕС ЗАГРУЗКИ КОДА СО СПЕКА
  571.                 XOR A
  572.                 OUT (MPAG),A                    ;СТРАНИЦА 0
  573.                 LD BC,ZXDATRD
  574.                 IN A,(ZXSTAT)
  575.                 RLA
  576.                 JR NC,$-3
  577.                 IN E,(C)
  578.                 IN A,(ZXSTAT)
  579.                 RLA
  580.                 JR NC,$-3
  581.                 IN D,(C)                        ;DE=ДЛИНА КОДА ДЛЯ ЗАГРУЗКИ В НГС
  582. MINILD1         IN A,(ZXSTAT)
  583.                 RLA
  584.                 JR NC,$-3
  585.                 INI
  586.                 DEC DE
  587.                 LD A,D
  588.                 OR E
  589.                 JR NZ,MINILD1
  590.                 LD HL,MINILD
  591.                 LD (HL),0XC3
  592.                 INC HL
  593.                 LD (HL),LOW (PROGR)
  594.                 INC HL
  595.                 LD (HL),HIGH (PROGR)
  596.                 LD A,0X11
  597.                 OUT (GSCFG0),A
  598.                 LD SP,0X4080
  599.                 XOR A
  600.                 JP 0X0045
  601.  
  602. PROGR           DI
  603.                 LD A,2
  604.                 OUT (MPAG),A
  605.                 LD A,0X11
  606.                 OUT (GSCFG0),A
  607.                 LD HL,0X8000
  608.                 LD A,(HL)
  609.                 RRCA
  610.                 RRCA
  611.                 RRCA
  612.                 RRCA
  613.                 AND 7
  614.                 LD B,A
  615.                 LD DE,8
  616.                 ADD HL,DE
  617. PROG0           LD A,2
  618.                 OUT (MPAG),A
  619.                 PUSH BC
  620.                 LD DE,MINILD+0X10
  621.                 LD BC,0X10
  622.                 LDIR
  623.                 PUSH HL
  624.                 CALL PROGR0
  625.                 POP HL
  626.                 POP BC
  627.                 DJNZ PROG0
  628.                 LD A,0X99
  629.                 OUT (ZXDATWR),A
  630.                 DJNZ $
  631.                 XOR A
  632.                 OUT (MPAG),A
  633.                 LD A,0X31
  634.                 LD HL,0X80D3
  635.                 OUT (GSCFG0),A
  636.                 LD (0XFFFE),HL
  637.                 XOR A
  638.                 JP 0XFFFE
  639.  
  640. PROGR0          LD HL,(MINILD+0X12)
  641.                 LD A,L
  642.                 AND 0X7F
  643.                 LD DE,(MINILD+0X11)
  644.                 LD D,A
  645.                 ADD HL,HL
  646.                 LD A,2
  647.                 ADD A,H
  648.                 LD IYH,A;HY,A
  649.                 LD HL,0
  650.                 LD A,(MINILD+0X10)
  651.                 AND 7
  652.                 LD IX,0X8000
  653.                 ADD IX,DE
  654.                 CALL SET_ADR
  655.                 CALL ERA_BLK
  656.                 LD DE,(MINILD+0X14)
  657.                 CALL PROGR1
  658.                 LD A,(MINILD+0X10)
  659.                 AND 7
  660.                 LD HL,0XFFF8
  661.                 CALL SET_ADR
  662.                 LD IX,MINILD+0X18
  663.                 LD DE,8
  664.  
  665. PROGR1          LD A,IYH
  666.                 OUT (MPAG),A
  667.                 LD A,(IX)
  668.                 INC IX
  669.                 PUSH DE
  670.                 CALL WR_BYTE
  671.                 LD A,IXH
  672.                 OR IXL
  673.                 JR NZ,PROGR2
  674.                 INC IYH
  675.                 LD IX,0X8000
  676. PROGR2          POP DE
  677.                 DEC DE
  678.                 LD A,D
  679.                 OR E
  680.                 JR NZ,PROGR1
  681.                 RET
  682.  
  683.                 include flasher_ngs.a80
  684. MINILDE
  685.                 DEPHASE
  686.  
  687. NGS_LOADER      binclude ../loader_ngs/loader_ngs.rom
  688. NGS_LOADERE
  689.  
  690.                 include window.a80
  691. CHARS           binclude make/altstd.bin
  692.                 include flasher_data.a80
  693.  
  694. TEXT_VERSUS
  695.