Subversion Repositories ngs

Rev

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

  1.  
  2. ;LAST UPDATE: 17.01.2011 savelij
  3.  
  4.                 include macros.a80
  5.                 include ports_ngs.a80
  6.  
  7. DDMMYY          EQU "17.01.2011"
  8.  
  9. DD              EQU 17                          ;ЧИСЛО
  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,WEKS2
  126.                 CALL WINW
  127. PROD01          CALL UPDOWN
  128.                 CALL CP_KEYS
  129.                 DB 0X0D
  130.                 DW KENTER
  131.                 DB 0
  132.                 JR PROD01
  133.  
  134. NGSNOTFOUND     LD IX,ERROR_UPDATE
  135.                 CALL WINW
  136.                 LD HL,TXT_NONGS
  137.                 CALL NEXT
  138.                 CALL KEYS
  139.                 LD HL,0
  140.                 PUSH HL
  141.                 JP 0X3D2F
  142.  
  143. ;ОТРАБОТКА ПЕДАЛИ ENTER
  144. KENTER          LD A,(IX+0X12)
  145.                 AND A
  146.                 JR Z,KENTER1            ;ПЕРЕХОД ДЛЯ ПУНКТА 1-ЗАГРУЗКА ОБНОВЛЕНИЯ
  147.                 JP KENTER4              ;ПЕРЕХОД ДЛЯ ПУНКТА 3-ВЫХОД В TR-DOS
  148.  
  149. ;ВЫБОР И ЗАГРУЗКА ОБНОВЛЕНИЯ ПЗУ
  150. KENTER1        
  151.                 LD A,7
  152.                 OUT (GSCOM),A
  153.                 CALL WC
  154.                 IN A,(GSDAT)
  155.                 AND A
  156.                 JP NZ,RESTARTUPD
  157.                 LD A,9
  158.                 OUT (GSCOM),A
  159.                 CALL WC
  160.                 IN A,(GSDAT)                    ;код ошибки
  161.                 EX AF,AF'
  162.                 CALL WN
  163.                 IN A,(GSDAT)                    ;младший байт ответа
  164.                 LD L,A
  165.                 CALL WN
  166.                 IN A,(GSDAT)                    ;старший байт ответа
  167.                 LD H,A
  168.                 EX AF,AF'
  169.                 CP 0X80
  170.                 JP NZ,RESTARTUPD
  171.  
  172.                 XOR A
  173.                 OUT (GSDAT),A
  174.                 LD A,6
  175.                 OUT (GSCOM),A
  176.                 CALL WC
  177.                 XOR A
  178.                 OUT (GSDAT),A
  179.                 CALL WD
  180.                 LD A,0X58
  181.                 OUT (GSDAT),A
  182.                 CALL WD
  183.                 IN A,(GSDAT)
  184.                 CP 0X99
  185.                 JR NZ,$-4
  186.                 EI
  187.                 REPT 5
  188.                 HALT
  189.                 ENDM
  190.                 DI
  191.                 LD IX,ERROR_UPDATE
  192.                 CALL WINW
  193.                 LD HL,TXT_OKUPDATE
  194.                 CALL NEXT
  195.                 CALL KEYS
  196.                 JP START_
  197.  
  198.                 LD A,0X0A
  199.                 OUT (GSCOM),A
  200.                 EI
  201.                 HALT
  202.                 HALT
  203.                 HALT
  204.                 DI
  205.                 JP RESTARTUPD
  206.  
  207. ;ВЫХОД ИЗ ПРОШИВАЛЬЩИКА
  208. KENTER4         LD HL,0
  209.                 PUSH HL
  210.                 JP 0X3D2F
  211.  
  212. UPDOWN          LD C,(IX+0X12)
  213.                 LD B,(IX+0X13)
  214.                 CALL RVERT
  215.                 SET 3,(IY+55)
  216. UPD04           BIT 3,(IY+55)
  217.                 JR Z,UPD02
  218.                 RES 3,(IY+55)
  219. UPD02           EI
  220.                 HALT
  221.                 DI
  222.                 BIT 5,(IY+1)
  223.                 JR Z,UPD04
  224.                 LD A,(IY-0X32)
  225.                 RES 5,(IY+1)
  226.                 CP 0X0A
  227.                 JR NZ,UPD01
  228.                 CALL DOWN
  229.                 SET 3,(IY+55)
  230.                 JR UPD02
  231.  
  232. UPD01           CP 0X0B
  233.                 JR NZ,UPD03
  234.                 CALL UP
  235.                 SET 3,(IY+55)
  236.                 JR UPD02
  237.  
  238. UPD03           RES 7,(IY+48)
  239.                 LD (IX+0X12),C
  240.                 LD (IX+0X13),B
  241.                 PUSH AF
  242.                 LD A,(IX+4)
  243.                 CALL WYDELK
  244.                 POP AF
  245.                 RET
  246.  
  247. DOWN            LD L,(IX+0X10)
  248.                 LD H,(IX+0X11)
  249.                 LD A,H
  250.                 OR L
  251.                 RET Z
  252.                 SCF
  253.                 SBC HL,BC
  254.                 RET Z
  255.                 INC BC
  256.                 LD A,(IX+2)
  257.                 SUB 3
  258.                 CP (IX+0X0F)
  259.                 JR Z,DOWN1
  260.                 INC (IX+0X0F)
  261.                 LD A,(IX+4)
  262.                 CALL WYDELK
  263.                 LD DE,0X20
  264.                 ADD HL,DE
  265.                 LD (ADRAT+1),HL
  266.                 LD A,(IX+5)
  267.                 JP WYDELK
  268.  
  269. DOWN1           LD A,(IX)
  270.                 ADD A,A
  271.                 ADD A,A
  272.                 ADD A,A
  273.                 INC A
  274.                 LD H,A
  275.                 LD A,(IX+1)
  276.                 ADD A,(IX+2)
  277.                 SUB 2
  278.                 ADD A,A
  279.                 ADD A,A
  280.                 ADD A,A
  281.                 LD L,A
  282.                 LD (ADRSTR+1),HL
  283.                 JP SCRUP
  284.  
  285. UP              LD A,B
  286.                 OR C
  287.                 RET Z
  288.                 DEC BC
  289.                 LD A,(IX+0X0F)
  290.                 AND A
  291.                 JR Z,UP1
  292.                 DEC (IX+0X0F)
  293.                 LD A,(IX+4)
  294.                 CALL WYDELK
  295.                 AND A
  296.                 LD DE,0X20
  297.                 SBC HL,DE
  298.                 LD (ADRAT+1),HL
  299.                 LD A,(IX+5)
  300.                 JR WYDELK
  301.  
  302. UP1             LD A,(IX)
  303.                 ADD A,A
  304.                 ADD A,A
  305.                 ADD A,A
  306.                 INC A
  307.                 LD H,A
  308.                 LD A,(IX+1)
  309.                 INC A
  310.                 ADD A,A
  311.                 ADD A,A
  312.                 ADD A,A
  313.                 LD L,A
  314.                 LD (ADRSTR+1),HL
  315.                 JP SCRDN
  316.  
  317. RVERT           PUSH DE
  318.                 LD H,(IX)
  319.                 LD L,(IX+1)
  320.                 LD A,(IX+0X0F)
  321.                 ADD A,L
  322.                 LD L,A
  323.                 INC L
  324.                 CALL ADRDIS
  325.                 EX DE,HL
  326.                 LD (ADRAT+1),HL
  327.                 LD A,(IX+5)
  328.                 POP DE
  329. WYDELK          PUSH BC
  330. ADRAT           LD HL,0
  331.                 PUSH HL
  332.                 LD B,(IX+3)
  333.                 LD (HL),A
  334.                 INC HL
  335.                 DJNZ $-2
  336.                 POP HL
  337.                 POP BC
  338.                 RET
  339.  
  340. FINDNGS         LD A,0X80
  341.                 OUT (GSCTR),A
  342.  
  343. ;DS 3:LD A,0X55:OUT (GSDAT),A
  344. ;OUT (GSCOM),A:CALL WC:LD A,0XAA
  345. ;OUT (GSDAT),A,(GSCOM),A:XOR A
  346. ;OUT (GSDAT),A:LD A,0X1D
  347. ;OUT (GSCOM),A:CALL WC
  348. ;IN A,(GSDAT)
  349.  
  350.                 EI
  351.                 HALT
  352.                 HALT
  353.                 DI
  354.                 LD A,0XF3
  355.                 OUT (GSCOM),A
  356.                 EI
  357.                 HALT
  358.                 HALT
  359.                 DI
  360.                 LD B,0X30
  361. FNDNGS1         EI
  362.                 HALT
  363.                 DI
  364.                 DEC B
  365.                 JR Z,FNDNGS2
  366.                 IN A,(GSCOM)
  367.                 RRA
  368.                 JR C,FNDNGS1
  369.                 LD E,GSCFG0
  370.                 CALL INPORT
  371.                 INC A
  372.                 JR Z,NONGS
  373.                 XOR A
  374.                 RET
  375.  
  376. NONGS           XOR A
  377.                 INC A
  378.                 RET
  379.  
  380. FNDNGS2         XOR A
  381.                 DEC A
  382.                 RET
  383.  
  384. INPORT          LD A,E
  385.                 OUT (GSDAT),A
  386.                 LD A,0X11
  387.                 OUT (GSCOM),A
  388.                 CALL WC
  389.                 IN A,(GSDAT)
  390.                 RET
  391.  
  392. INITLOADER      CALL FINDNGS
  393.                 AND A
  394.                 RET NZ
  395.                 LD BC,GSDAT
  396.                 LD HL,0X5800
  397.                 LD DE,MINILDE-MINILD
  398.                 OUT (C),E
  399.                 LD A,0X14
  400.                 OUT (GSCOM),A
  401.                 CALL WC
  402.                 OUT (C),D
  403.                 CALL WD
  404.                 OUT (C),L
  405.                 CALL WD
  406.                 OUT (C),H
  407.                 CALL WD
  408.                 LD HL,MINISTR
  409. OUTCOD          OUTI
  410.                 CALL WD
  411.                 DEC DE
  412.                 LD A,D
  413.                 OR E
  414.                 JR NZ,OUTCOD
  415.                 LD HL,0X5800
  416.                 OUT (C),L
  417.                 LD A,0X13
  418.                 OUT (GSCOM),A
  419.                 CALL WC
  420.                 OUT (C),H
  421.                 CALL WD
  422.                 LD DE,NGS_LOADERE-NGS_LOADER
  423.                 OUT (C),E
  424.                 CALL WD
  425.                 OUT (C),D
  426.                 CALL WD
  427.                 LD HL,NGS_LOADER
  428. OUTCOD1         OUTI
  429.                 CALL WD
  430.                 DEC DE
  431.                 LD A,D
  432.                 OR E
  433.                 JR NZ,OUTCOD1
  434.                 EI
  435.                 HALT
  436.                 HALT
  437.                 HALT
  438.                 DI
  439.                 XOR A
  440.                 RET
  441.  
  442. WC              IN A,(GSCOM)
  443.                 RRA
  444.                 JR C,$-3
  445.                 RET
  446.  
  447. WD              IN A,(GSCOM)
  448.                 RLA
  449.                 JR C,$-3
  450.                 RET
  451.  
  452. WN              IN A,(GSCOM)
  453.                 RLA
  454.                 JR NC,$-3
  455.                 RET
  456.  
  457. MINISTR
  458.                 PHASE ADR_PROGR
  459. MINILD          DI
  460.                 IN A,(ZXDATRD)
  461.                 OUT (CLRCBIT),A
  462.                 LD A,0X11
  463.                 OUT (GSCFG0),A                  ;ОТКЛЮЧИЛИ ПЗУ И ВКЛЮЧИЛИ ЧАСТОТЦ 12МГЦ
  464.                 LD HL,0                         ;АДРЕС ЗАГРУЗКИ КОДА СО СПЕКА
  465.                 XOR A
  466.                 OUT (MPAG),A                    ;СТРАНИЦА 0
  467.                 LD BC,ZXDATRD
  468.                 IN A,(ZXSTAT)
  469.                 RLA
  470.                 JR NC,$-3
  471.                 IN E,(C)
  472.                 IN A,(ZXSTAT)
  473.                 RLA
  474.                 JR NC,$-3
  475.                 IN D,(C)                        ;DE=ДЛИНА КОДА ДЛЯ ЗАГРУЗКИ В НГС
  476. MINILD1         IN A,(ZXSTAT)
  477.                 RLA
  478.                 JR NC,$-3
  479.                 INI
  480.                 DEC DE
  481.                 LD A,D
  482.                 OR E
  483.                 JR NZ,MINILD1
  484.                 LD HL,MINILD
  485.                 LD (HL),0XC3
  486.                 INC HL
  487.                 LD (HL),LOW (PROGR)
  488.                 INC HL
  489.                 LD (HL),HIGH (PROGR)
  490.                 LD A,0X11
  491.                 OUT (GSCFG0),A
  492.                 LD SP,0X4080
  493.                 XOR A
  494.                 JP 0X0045
  495.  
  496. PROGR           DI
  497.                 LD A,2
  498.                 OUT (MPAG),A
  499.                 LD A,0X11
  500.                 OUT (GSCFG0),A
  501.                 LD HL,0X8000
  502.                 LD A,(HL)
  503.                 RRCA
  504.                 RRCA
  505.                 RRCA
  506.                 RRCA
  507.                 AND 7
  508.                 LD B,A
  509.                 LD DE,8
  510.                 ADD HL,DE
  511. PROG0           LD A,2
  512.                 OUT (MPAG),A
  513.                 PUSH BC
  514.                 LD DE,MINILD+0X10
  515.                 LD BC,0X10
  516.                 LDIR
  517.                 PUSH HL
  518.                 CALL PROGR0
  519.                 POP HL
  520.                 POP BC
  521.                 DJNZ PROG0
  522.                 LD A,0X99
  523.                 OUT (ZXDATWR),A
  524.                 XOR A
  525.                 OUT (MPAG),A
  526.                 LD A,0X31
  527.                 LD HL,0X80D3
  528.                 OUT (GSCFG0),A
  529.                 LD (0XFFFE),HL
  530.                 XOR A
  531.                 JP 0XFFFE
  532.  
  533. PROGR0          LD HL,(MINILD+0X12)
  534.                 LD A,L
  535.                 AND 0X7F
  536.                 LD DE,(MINILD+0X11)
  537.                 LD D,A
  538.                 ADD HL,HL
  539.                 LD A,2
  540.                 ADD A,H
  541.                 LD IYH,A;HY,A
  542.                 LD HL,0
  543.                 LD A,(MINILD+0X10)
  544.                 AND 7
  545.                 LD IX,0X8000
  546.                 ADD IX,DE
  547.                 CALL SET_ADR
  548.                 CALL ERA_BLK
  549.                 LD DE,(MINILD+0X14)
  550.                 CALL PROGR1
  551.                 LD A,(MINILD+0X10)
  552.                 AND 7
  553.                 LD HL,0XFFF8
  554.                 CALL SET_ADR
  555.                 LD IX,MINILD+0X18
  556.                 LD DE,8
  557.  
  558. PROGR1          LD A,IYH
  559.                 OUT (MPAG),A
  560.                 LD A,(IX)
  561.                 INC IX
  562.                 PUSH DE
  563.                 CALL WR_BYTE
  564.                 LD A,IXH
  565.                 OR IXL
  566.                 JR NZ,PROGR2
  567.                 INC IYH
  568.                 LD IX,0X8000
  569. PROGR2          POP DE
  570.                 DEC DE
  571.                 LD A,D
  572.                 OR E
  573.                 JR NZ,PROGR1
  574.                 RET
  575.  
  576.                 include flasher_ngs.a80
  577. MINILDE
  578.                 DEPHASE
  579.  
  580. CHARS           binclude altstd.bin
  581.                 include window.a80
  582.                 include flasher_data.a80
  583. NGS_LOADER      binclude ../loader_ngs/loader_ngs.rom
  584. NGS_LOADERE
  585.