Subversion Repositories ngs

Rev

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

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