Subversion Repositories pentevo

Rev

Rev 801 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed | ?url?

  1.  
  2. ;LAST UPDATE: 12.09.2022 savelij
  3.  
  4. ;ОПИСАТЕЛЬ ОКНА (АДРЕС В IX)
  5. ;+00 X КООРДИНАТА
  6. ;+01 Y КООРДИНАТА
  7. ;+02 V ВЫСОТА
  8. ;+03 H ШИРИНА
  9. ;+04 C ЦВЕТ
  10. ;+05 C ЦВЕТ КУРСОРА
  11. ;+06 F ФЛАГОВЫЙ
  12. ;+07 N НОМЕР ПУНКТА В ОКНЕ
  13. ;  БИТ 7-0=БАЙТЫ 8-9 ТЕКУЩИЙ ПУНКТ МЕНЮ,
  14. ;        1=БАЙТЫ 8-9 АДРЕС ХРАНЕНИЯ
  15. ;+08 | ТЕКУЩИЙ
  16. ;+09 | ПУНКТ МЕНЮ
  17. ;+0A : КОЛИЧЕСТВО
  18. ;+0B : ПУНКТОВ МЕНЮ
  19. ;+0C | АДРЕС
  20. ;+0D | ТЕКСТА
  21. ;+0E : СПИСОК АДРЕСОВ
  22. ;+0F : ПОДПРОГРАММ
  23. ;+10 | АДРЕС СПИСКА АКТИВНЫХ
  24. ;+11 | ЗОН ДЛЯ МЫШИ
  25. ;+12 : АДРЕС СПИСКА
  26. ;+13 : ГОРЯЧИХ КЛАВИШ
  27.  
  28. ;ФОРМАТ ФЛАГОВОГО БАЙТА ОКНА
  29. ;IX+6
  30. ;7-0-НЕТ, 1-ЕСТЬ НИЖНИЙ ЗАГОЛОВОК
  31. ;6-0-С РАМКОЙ,1-БЕЗ РАМКИ
  32. ;5-0-НЕТ, 1-ЕСТЬ ВЕРХНИЙ ЗАГОЛОВОК
  33. ;4-0-НЕТ, 1-ЕСТЬ ТЕКСТ
  34. ;3
  35. ;2-
  36. ;1-
  37. ;0-
  38.  
  39. ;РАСКЛАДКА БАЙТ ВЫДЕЛЕНИЙ
  40. ;+0 ФЛАГОВЫЙ
  41. ;    7 ПРИ АКТИВНОСТИ УСТАНОВЛЕН
  42. ;    6 УСТАНОВЛЕН, НЕ ВЫДЕЛЯЕТСЯ
  43. ;    5 УСТАНОВЛЕН, ВЫЗОВ ВЕКТОРА
  44. ;    4
  45. ;    3 \
  46. ;    2  } ФОРМА КУРСОРА
  47. ;    1  } ПРИ ПОПАДАНИИ
  48. ;    0 /
  49. ;+1 X КООРДИНАТА
  50. ;+2 Y КООРДИНАТА
  51. ;+3 V ВЫСОТА
  52. ;+4 H ШИРИНА
  53. ;+5 K КОД КЛАВИШИ
  54.  
  55. ;[ГЕНЕРАЦИЯ ТАБЛИЦЫ АДРЕСОВ ЛИНИЙ ZX ЭКРАНА]
  56. ADRTSC          LD B,0X18
  57.                 LD DE,0X4000
  58.                 LD HL,BUFTSC
  59. ADRTSC2         LD C,8
  60. ADRTSC1         LD (HL),E
  61.                 INC HL
  62.                 LD (HL),D
  63.                 INC HL
  64.                 INC D
  65.                 DEC C
  66.                 JR NZ,ADRTSC1
  67.                 LD A,0X20
  68.                 ADD A,E
  69.                 LD E,A
  70.                 JR C,ADRTSC3
  71.                 LD A,D
  72.                 SUB 8
  73.                 LD D,A
  74. ADRTSC3         DJNZ ADRTSC2
  75.                 RET
  76.  
  77. ;[CLS]
  78. CLS             LD HL,0
  79.                 LD D,H
  80.                 LD E,L
  81.                 ADD HL,SP
  82.                 LD B,0X60
  83.                 LD SP,0X5800
  84. CLS1            REPT 0X20
  85.                 PUSH DE
  86.                 ENDM
  87.                 DJNZ CLS1
  88.                 LD SP,HL
  89. CLSSCR          LD HL,0
  90.                 LD D,A
  91.                 LD E,A
  92.                 ADD HL,SP
  93.                 LD SP,0X5B00
  94.                 LD B,12
  95. CLS2            REPT 0X20
  96.                 PUSH DE
  97.                 ENDM
  98.                 DJNZ CLS2
  99.                 LD SP,HL
  100.                 RRCA
  101.                 RRCA
  102.                 RRCA
  103.                 AND 7
  104.                 OUT (0XFE),A
  105.                 RET
  106.  
  107. ;[СЛЕДУЮЩАЯ СТРОКА ZX ЭКРАНА]
  108. INC_H           INC H
  109.                 LD A,H
  110.                 AND 7
  111.                 RET NZ
  112.                 LD A,L
  113.                 ADD A,0X20
  114.                 LD L,A
  115.                 RET C
  116. UMEHL1          LD A,H
  117.                 SUB 8
  118.                 LD H,A
  119.                 RET    
  120.  
  121. ;[ПРЕДЫДУЩАЯ СТРОКА ZX ЭКРАНА]
  122. DEC_H           DEC H
  123.                 LD A,H
  124.                 AND 7
  125.                 CP 7
  126.                 RET NZ
  127.                 LD A,L
  128.                 SUB 0X20
  129.                 LD L,A
  130.                 RET C
  131. UVEHL1          LD A,H
  132.                 ADD A,8
  133.                 LD H,A
  134.                 RET
  135.  
  136. UVEHL           LD A,0X20
  137.                 ADD A,L
  138.                 LD L,A
  139.                 RET NC
  140.                 JR UVEHL1
  141.  
  142. UMEHL           LD A,L
  143.                 SUB 0X20
  144.                 LD L,A
  145.                 RET NC
  146.                 JR UMEHL1
  147.  
  148. ;[РИСОВАНИЕ ОКНА (GLUK)]
  149. DRAWWIN         LD C,(IX+_X_COORD)              ;X
  150.                 LD B,(IX+_Y_COORD)              ;Y
  151.                 EX DE,HL
  152.                 LD A,C
  153.                 ADD A,A
  154.                 ADD A,A
  155.                 ADD A,A
  156.                 LD C,A
  157.                 LD A,B
  158.                 ADD A,A
  159.                 ADD A,A
  160.                 ADD A,A
  161.                 CALL 0X22B0
  162.                 EX DE,HL
  163.                 PUSH IX
  164.                 POP HL
  165.                 INC HL
  166.                 INC HL
  167.                 INC HL
  168.                 LD B,(HL)               ;ШИРИНА-1
  169.                 INC HL
  170.                 DEC B
  171.                 LD A,(HL)
  172.                 INC HL
  173.                 LD (COL_SYM),A          ;ЦВЕТ ОКНА
  174.                 PUSH DE
  175.                 LD C,B
  176.                 CALL PR32
  177.                 DEC C
  178.                 JR NZ,$-4
  179.                 CALL PR3232
  180.                 POP DE
  181.                 PUSH DE
  182.                 CALL NXCOLLN    ;C=0
  183.                 CALL PRTX
  184.                 INC HL
  185.                 PUSH BC
  186.                 CALL PR32
  187.                 DJNZ $-3
  188.                 POP BC
  189.                 LD A,C                  ;НАПЕЧАТАНО СТРОК
  190.                 ADD A,A
  191.                 ADD A,A
  192.                 ADD A,A
  193.                 ADD A,6+8
  194.                 LD D,A
  195.                 LD A,B
  196.                 ADD A,A
  197.                 ADD A,A
  198.                 ADD A,A
  199.                 ADD A,0X10*WIDE+0X0D-0X10
  200.                 LD E,A
  201.                 POP HL
  202.                 INC H
  203.                 LD C,0X40
  204.                 PUSH BC
  205.                 PUSH HL
  206.                 LD B,E
  207.                 CALL HORLN
  208.                 LD B,D
  209.                 CALL VERLN
  210.                 POP HL
  211.                 POP BC
  212.                 LD B,D
  213.                 CALL VERLN
  214.                 LD B,E
  215. HORLN           LD A,(HL)
  216. HORLN0          OR C
  217.                 RRC C
  218.                 JR NC,$+5
  219.                 LD (HL),A
  220.                 INC L
  221.                 LD A,(HL)
  222.                 DJNZ HORLN0
  223.                 OR C
  224.                 LD (HL),A
  225.                 RET
  226.        
  227. VERLN0          CALL INC_H
  228. VERLN           LD A,(HL)
  229.                 OR C
  230.                 LD (HL),A
  231.                 DJNZ VERLN0
  232.                 RET
  233.        
  234. NXCOLLN         LD A,E
  235.                 ADD A,0X20
  236.                 LD E,A
  237.                 RET NC
  238.                 LD A,D
  239.                 ADD A,8
  240.                 LD D,A
  241.                 RET
  242.        
  243. PRSP0           LD A,(HL)
  244.                 INC HL
  245.                 PUSH DE
  246.                 PUSH HL
  247.                 LD H,(HL)
  248.                 LD L,A
  249.                 CALL PRT_HL_
  250.                 POP HL
  251.                 POP DE
  252.                 INC HL
  253.                 CALL NXCOLLN
  254.                 DJNZ PRSP0
  255.                 RET    
  256.  
  257. ;[ПЕЧАТЬ В HEX 16-ГО ЧИСЛА]
  258. PRT_HL_         LD A,H
  259.                 CALL PRT_A_
  260.                 LD A,L
  261. ;[ПЕЧАТЬ В HEX 8-ГО ЧИСЛА]
  262. PRT_A_          PUSH AF
  263.                 RRCA
  264.                 RRCA
  265.                 RRCA
  266.                 RRCA
  267.                 CALL $+4
  268.                 POP AF
  269.                 AND 0X0F
  270.                 CP 0X0A
  271.                 CCF
  272.                 ADC A,"0"
  273.                 DAA
  274. PRSN            AND 0X7F
  275. PRSYM           CP 0X20
  276.                 JR NC,PRSYM1
  277.                 CP 0X80
  278.                 JR C,PRSYM1
  279.                 LD A,"."
  280. PRSYM1          PUSH DE
  281.                 PUSH BC
  282.                 PUSH HL
  283.                 ADD A,A
  284.                 LD L,A
  285.                 LD H,0X0F
  286.                 ADD HL,HL
  287.                 ADD HL,HL
  288.                 LD B,4
  289. PRSN0           LD A,(HL)
  290.                 RRCA
  291.                 OR (HL)
  292.                 INC L
  293.                 EX DE,HL
  294.                 LD (HL),A
  295.                 INC H
  296.                 EX DE,HL
  297.                 LD A,(HL)
  298.                 RRCA
  299.                 OR (HL)
  300.                 INC L
  301.                 EX DE,HL
  302.                 LD (HL),A
  303.                 INC H
  304.                 EX DE,HL
  305.                 DJNZ PRSN0
  306.                 POP HL
  307. PR32Q           POP BC
  308.                 LD A,D
  309.                 RRCA
  310.                 RRCA
  311.                 RRCA
  312.                 ADD A,0X4F
  313.                 LD D,A
  314.                 LD A,7
  315. COL_SYM         EQU $-1         ;ЦВЕТ СИМВОЛА
  316.                 LD (DE),A
  317.                 POP DE
  318.                 INC E
  319.                 RET NZ
  320.                 LD A,D
  321.                 ADD A,8
  322.                 LD D,A
  323.                 RET
  324.  
  325. PR3232          CALL PR32
  326. PR32            PUSH DE
  327.                 PUSH BC
  328.                 XOR A
  329.                 REPT 4
  330.                 LD (DE),A
  331.                 INC D
  332.                 LD (DE),A
  333.                 INC D
  334.                 ENDM
  335.                 JR PR32Q
  336.  
  337. PRCR            CALL PR3232
  338. PRCRDE          LD DE,0
  339.                 CALL NXCOLLN
  340.                 INC C
  341. PRTX            LD (PRCRDE+1),DE
  342.                 CALL PR3232
  343. PRTX0           LD A,(HL)
  344.                 CP 0XFF
  345.                 RET Z
  346.                 CALL PRSN
  347.                 BIT 7,(HL)
  348.                 INC HL
  349.                 JR Z,PRTX0
  350.                 JR PRCR
  351.  
  352. ;[ПЕЧАТЬ ТЕКСТА]
  353. PRINT_MSG       PUSH HL
  354.                 LD A,D
  355.                 CALL 0X0E9E             ;HL=ADRLN,D:=A
  356.                 LD A,E
  357.                 ADD A,L
  358.                 LD L,A
  359.                 EX DE,HL
  360.                 POP HL
  361. PRTXT           LD A,(HL)
  362.                 INC HL
  363.                 CP 0XFF
  364.                 RET Z
  365.                 CALL PRSN
  366.                 JR PRTXT
  367.  
  368. REST_COLOR      LD DE,(COL_CURSOR)
  369.                 LD HL,COLBUF
  370.                 LD C,(IX+_H_SIZE)
  371.                 BIT 2,(IY+55)           ;ФАЙЛОВ БОЛЬШЕ ВЫСОТЫ ОКНА?
  372.                 JR Z,RESTCOL1
  373.                 DEC C                   ;ЦВЕТНАЯ ПОЛОСКА НА 1 КОРОЧЕ
  374. RESTCOL1        LD B,0
  375.                 LDIR
  376.                 RET
  377.  
  378. REST_COLCURS    LD DE,(COL_CURSOR)
  379.                 LD HL,COLBUF
  380.                 LD C,(IX+_H_SIZE)
  381.                 LD B,0
  382.                 LDIR
  383.                 RET
  384.  
  385. ;[РИСОВАЛКА ЦВЕТНОЙ ПОЛОСКИ В МЕНЮ]
  386. COLOR_CURSOR    LD DE,0
  387. COL_CURSOR      EQU $-2
  388.                 LD HL,COLBUF
  389.                 LD C,(IX+_H_SIZE)
  390. COLCURS1        LD B,0
  391.                 LDIR
  392. SET_ADR_ATR     LD A,(IX+_NUM_PKT)
  393.                 LD B,A
  394.                 LD H,(IX)
  395.                 LD L,(IX+_Y_COORD)
  396.                 ADD A,L
  397.                 LD L,A
  398.                 INC L
  399.                 CALL ADRDIS
  400.                 EX DE,HL
  401.                 LD (COL_CURSOR),HL      ;ПОЛОЖИЛИ АДРЕС ДЛЯ ВОССТАНОВЛЕНИЯ ЦВЕТА
  402.                 LD DE,COLBUF
  403.                 LD B,(IX+_H_SIZE)
  404. COLCURS2        LD C,(IX+_COLOR_CUR)
  405.                 LD A,(HL)
  406.                 LD (DE),A
  407.                 LD (HL),C
  408.                 INC L
  409.                 INC E
  410.                 DJNZ $-5
  411.                 RET
  412.  
  413. ;[ПЕЧАТЬ СИМВОЛА]
  414. PRT_SYM         PUSH HL
  415.                 PUSH DE
  416.                 EX DE,HL
  417.                 CALL ADRDIS
  418.                 EX DE,HL
  419.                 ADD A,A
  420.                 LD L,A
  421.                 LD H,0X0F
  422.                 ADD HL,HL
  423.                 ADD HL,HL
  424.                 REPT 8
  425.                 LD A,(HL)
  426.                 RRCA
  427.                 OR (HL)
  428.                 LD (DE),A
  429.                 INC L
  430.                 INC D
  431.                 ENDM
  432.                 POP DE
  433.                 POP HL
  434.                 INC D
  435.                 RET
  436.  
  437. PRTSPECSYM      PUSH HL
  438.                 PUSH DE
  439.                 EX DE,HL
  440.                 CALL ADRDIS
  441.                 EX DE,HL
  442.                 LD L,A
  443.                 LD H,0
  444.                 ADD HL,HL
  445.                 ADD HL,HL
  446.                 ADD HL,HL
  447.                 LD A,L
  448.                 ADD A,LOW (ICON)
  449.                 LD L,A
  450.                 ADC A,HIGH (ICON)
  451.                 SUB L
  452.                 LD H,A
  453.                 REPT 8
  454.                 LD A,(HL)
  455.                 LD (DE),A
  456.                 INC HL
  457.                 INC D
  458.                 ENDM
  459.                 POP DE
  460.                 POP HL
  461.                 INC D
  462.                 RET
  463.  
  464. ;[CURSOR_UP]
  465. CURSOR_UP       LD C,(IX+_TEK_PKT_L)
  466.                 LD B,(IX+_TEK_PKT_H)
  467.                 LD A,B
  468.                 OR C
  469.                 RET Z
  470.                 DEC BC
  471.                 LD (IX+_TEK_PKT_L),C
  472.                 LD (IX+_TEK_PKT_H),B
  473.                 LD A,(IX+_NUM_PKT)
  474.                 AND A
  475.                 JR Z,CURSOR_UP1
  476.                 DEC (IX+_NUM_PKT)
  477.                 JP COLOR_CURSOR
  478.  
  479. CURSOR_UP1      CALL REST2X2
  480. ;               CALL REST_COLCURS
  481. ;               LD A,1
  482.                 XOR A
  483.                 RST8 _SCROLL_DOWN
  484. ;               CALL SET_ADR_ATR
  485.                 LD E,(IX+_Y_COORD)
  486.                 INC E
  487. DOWN1           LD D,(IX+_X_COORD)
  488.                 INC D
  489.                 INC D
  490.                 LD HL,ERS_FLAGS
  491.                 BIT B_RUN_FAT,(HL)
  492.                 LD L,(IX+_TEK_PKT_L)
  493.                 LD H,(IX+_TEK_PKT_H)
  494.                 JR NZ,DOWN3
  495.                 LD BC,ADR_CAT
  496.                 ADD HL,HL
  497.                 ADD HL,HL
  498.                 ADD HL,HL
  499.                 ADD HL,HL
  500.                 ADD HL,BC
  501. DOWN4           CALL FILENAME8_3
  502.                 LD A,(ERS_FLAGS)
  503.                 AND M_MOUSE_ON                  ;ПРОВЕРКА НАЛИЧИЯ МЫШИ
  504.                 RET Z
  505.                 JP DRAW_MOUSE
  506.  
  507. DOWN3           LD BC,ADR_CAT_FAT
  508.                 DEC D
  509.                 ADD HL,HL
  510.                 ADD HL,BC
  511.                 LD C,(HL)
  512.                 INC HL
  513.                 LD B,(HL)
  514.                 PUSH DE
  515.                 LD A,6
  516.                 RST8 _COM_FAT,_POS_FILES
  517.                 LD HL,BUF_FILEITEM
  518.                 RST8 _COM_FAT,_READ_DIR
  519.                 LD BC,0X0B
  520.                 ADD HL,BC
  521.                 LD A,(HL)
  522.                 SBC HL,BC
  523.                 AND 0X10
  524.                 LD A,0
  525.                 JR NZ,DOWN5
  526.                 LD A,1
  527. DOWN5           POP DE
  528.                 CALL PRTSPECSYM
  529.                 LD HL,OUT_NAME_FILET
  530.                 RST8 _COM_FAT,_GET_LONGNAME
  531.                 LD (LONG_NAME),A
  532.                 JR DOWN4
  533.  
  534. ;[CURSOR_DOWN]
  535. CURSOR_DOWN     LD C,(IX+_TEK_PKT_L)
  536.                 LD B,(IX+_TEK_PKT_H)
  537.                 LD L,(IX+_NUM_KOL_L)
  538.                 LD H,(IX+_NUM_KOL_H)
  539.                 LD A,H
  540.                 OR L
  541.                 RET Z
  542.                 SCF
  543.                 SBC HL,BC
  544.                 RET Z
  545.                 INC BC
  546.                 LD (IX+_TEK_PKT_L),C
  547.                 LD (IX+_TEK_PKT_H),B
  548.                 LD A,(IX+_V_SIZE)
  549.                 SUB 3
  550.                 CP (IX+_NUM_PKT)
  551.                 JR Z,CURSOR_DOWN1
  552.                 INC (IX+_NUM_PKT)
  553.                 JP COLOR_CURSOR
  554.  
  555. CURSOR_DOWN1    CALL REST2X2
  556. ;               CALL REST_COLCURS
  557. ;               LD A,1
  558.                 XOR A
  559.                 RST8 _SCROLL_UP
  560. ;               CALL SET_ADR_ATR
  561.                 LD A,(IX+_Y_COORD)
  562.                 ADD A,(IX+_V_SIZE)
  563.                 SUB 2
  564.                 LD E,A
  565.                 JP DOWN1
  566.  
  567. GET_XY          LD E,(IX+_NUM_KOL_L)
  568.                 LD D,(IX+_NUM_KOL_H)    ;КОЛ-ВО
  569.                 LD L,(IX+_TEK_PKT_L)
  570.                 LD H,(IX+_TEK_PKT_H)    ;НОМЕР
  571.                 LD A,(IX+_V_SIZE)
  572.                 SUB 3
  573.                 LD C,A
  574.                 LD B,0
  575.                 LD A,D
  576.                 OR E
  577.                 LD A,C
  578.                 RET
  579.  
  580. ;[ПЕРЕМЕЩЕНИЕ НА СТРАНИЦУ ВВЕРХ]
  581. PAGEUP          CALL GET_XY
  582.                 RET Z
  583.                 XOR A
  584.                 SBC HL,BC
  585.                 EX DE,HL
  586.                 JR NC,PDUN0
  587. PDU0            LD D,A
  588.                 LD E,A
  589.                 JR PDUN0
  590.  
  591. ;[ПЕРЕМЕЩЕНИЕ НА СТРАНИЦУ ВНИЗ]
  592. PAGEDN          CALL GET_XY
  593.                 RET Z
  594.                 EX DE,HL
  595.                 AND A
  596.                 SBC HL,BC
  597.                 ADD HL,BC
  598.                 EX DE,HL
  599.                 JR NC,PDN00
  600.                 DEC DE
  601.                 LD A,E
  602.                 JR PDUN0
  603.  
  604. PDN00           ADD HL,BC
  605.                 EX DE,HL
  606.                 SBC HL,DE
  607.                 ADD HL,DE
  608.                 JR Z,PDUN1
  609.                 JR NC,PDUN0
  610. PDUN1           EX DE,HL
  611.                 DEC DE
  612. PDUN0           LD (IX+_NUM_PKT),A
  613.                 LD (IX+_TEK_PKT_L),E
  614.                 LD (IX+_TEK_PKT_H),D
  615.                 CALL REST2X2
  616.                 CALL OUT_TEK_DIR
  617.                 LD A,(ERS_FLAGS)
  618.                 AND M_MOUSE_ON                  ;ПРОВЕРКА НАЛИЧИЯ МЫШИ
  619.                 RET Z
  620.                 JP DRAW_MOUSE
  621.  
  622. ;[ВЫЧИСЛЕНИЕ АДРЕСА В ZX ЭКРАНЕ]
  623. ;H-X, L-Y
  624. ADRDIS          LD (ASD+1),A
  625.                 LD A,L
  626.                 AND 0X18
  627.                 OR 0X40
  628.                 EX AF,AF'
  629.                 LD A,L
  630.                 AND 7
  631.                 RRCA
  632.                 RRCA
  633.                 RRCA
  634.                 ADD A,H
  635.                 LD L,A
  636.                 EX AF,AF'
  637.                 LD H,A
  638.                 LD E,L
  639. ADRATR          LD A,H
  640.                 RRCA
  641.                 RRCA
  642.                 RRCA
  643.                 AND 3
  644.                 OR 0X58
  645.                 LD D,A
  646. ASD             LD A,0
  647.                 RET
  648.  
  649. ;[УСТАНОВКА АДРЕСА РИСОВАНИЯ ИНДИКАТОРНОЙ ПОЛОСКИ]
  650. SETWIN_INDICAT  PUSH HL
  651.                 PUSH DE
  652.                 LD H,(IX+_X_COORD)
  653.                 INC H
  654.                 ADD A,(IX+_Y_COORD)
  655.                 LD L,A
  656.                 CALL ADRDIS
  657.                 LD (ADRSTARTIND),DE
  658.                 POP DE
  659.                 POP HL
  660.                 RET
  661.  
  662. ;[РИСОВАНИЕ СЛЕДУЮЩЕГО ЦВЕТНОГО КВАДРАТИКА]
  663. INC_INDICAT     PUSH HL
  664.                 LD HL,0
  665. ADRSTARTIND     EQU $-2
  666.                 LD (HL),0X39
  667.                 INC HL
  668.                 LD (ADRSTARTIND),HL
  669.                 POP HL
  670.                 RET
  671.  
  672. ;[ВОССТАНОВЛЕНИЕ ЧАСТИ ЭКРАНА ПОД ОКНОМ]
  673. WIN_RESTORE
  674. ;               BIT 3,(IX-1)
  675. ;               RET Z
  676. ;               RES 3,(IX-1)
  677.                 LD A,2
  678.                 JR RESAV
  679.  
  680. ;[СОХРАНЕНИЕ ЧАСТИ ЭКРАНА ПОД ОКНОМ]
  681. WIN_STORE
  682. ;               BIT 3,(IX-1)
  683. ;               RET NZ
  684. ;               SET 3,(IX-1)
  685.                 LD A,1
  686. RESAV           EX AF,AF'
  687.                 LD A,0X16;P_WINS
  688.                 CALL SET_7FFD;PAGE_128
  689. ;               LD HL,PAGE_128_RET
  690. ;               PUSH HL
  691.                 EX AF,AF'
  692.                 LD (NSOH+1),A
  693.                 RRCA
  694.                 CALL WSOHR
  695.                 LD HL,0X127E
  696.                 JR C,SOH7
  697.                 LD HL,0X771A
  698. SOH7            LD (SOH4),HL
  699.                 LD (SOH1),HL
  700.                 LD L,(IX+_Y_COORD)
  701.                 LD H,(IX+_X_COORD)
  702.                 CALL ADRDIS_
  703.                 PUSH HL
  704.                 CALL ADRATR_
  705.                 EX (SP),HL
  706.                 LD B,(IX+_V_SIZE)
  707. SOH3            PUSH BC
  708.                 LD B,8
  709.                 PUSH HL
  710. SOH2            PUSH HL
  711.                 LD C,(IX+_H_SIZE)
  712. SOH1            LD A,(HL)
  713.                 LD (DE),A
  714.                 INC DE
  715.                 INC HL
  716.                 DEC C
  717.                 JR NZ,SOH1
  718.                 POP HL
  719.                 INC H
  720.                 DJNZ SOH2
  721.                 POP HL
  722.                 CALL UVEHL_
  723.                 POP BC
  724.                 DJNZ SOH3
  725.                 POP HL
  726.                 LD A,(NSOH+1)
  727.                 AND A
  728.                 JR Z,SOH6_0
  729.                 BIT 6,(IX+_FLAGS)
  730.                 JR Z,SOH6_0
  731.                 INC (IX+_V_SIZE)
  732.                 INC (IX+_H_SIZE)
  733. SOH6_0          LD C,(IX+_V_SIZE)
  734. SOH6            PUSH HL
  735.                 LD B,(IX+_H_SIZE)
  736. SOH4            LD A,(HL)
  737.                 LD (DE),A
  738.                 INC HL
  739.                 INC DE
  740.                 DJNZ SOH4
  741.                 POP HL
  742.                 LD A,0X20
  743.                 ADD A,L
  744.                 LD L,A
  745.                 JR NC,SOH4_0
  746.                 INC H
  747. SOH4_0          DEC C
  748.                 JR NZ,SOH6
  749. NSOH            LD A,0
  750.                 AND A
  751.                 RET Z
  752.                 CP 1
  753.                 JR NZ,NSOH1
  754.                 LD (BUFHR+1),DE
  755. NSOH1           BIT 6,(IX+_FLAGS)
  756.                 JR Z,ADRWEK
  757.                 DEC (IX+_V_SIZE)
  758.                 DEC (IX+_H_SIZE)
  759. ADRWEK          LD HL,0
  760.                 RRCA
  761.                 JR NC,ADRWK1
  762.                 INC HL
  763.                 INC HL
  764.                 LD D,IXH
  765.                 LD E,IXL
  766.                 LD (HL),E
  767.                 INC HL
  768.                 LD (HL),D
  769.                 RET
  770.  
  771. ADRWK1          LD A,(BUFHR1+1)
  772.                 AND A
  773.                 RET Z
  774.                 DEC HL
  775.                 DEC HL
  776.                 DEC HL
  777.                 DEC HL
  778.                 DEC HL
  779.                 LD D,(HL)
  780.                 DEC HL
  781.                 LD E,(HL)
  782. ADRWK2          LD IXH,D
  783.                 LD IXL,E
  784.                 RET
  785.  
  786. WSOHR           PUSH AF
  787.                 PUSH HL
  788. BUFHR           LD DE,0XC000
  789.                 EX AF,AF'
  790.                 LD HL,TABSS
  791. BUFHR1          LD A,0
  792.                 AND A
  793.                 JR NZ,BUFHR4
  794.                 LD DE,0XC000
  795. BUFHR4          PUSH AF
  796.                 PUSH AF
  797.                 ADD A,A
  798.                 ADD A,A
  799.                 ADD A,L
  800.                 LD L,A
  801.                 JR NC,BUFHR4_0
  802.                 INC H
  803. BUFHR4_0        LD (ADRWEK+1),HL
  804.                 POP AF
  805.                 EX AF,AF'
  806.                 JR NC,NWOS
  807.                 LD (HL),E
  808.                 INC HL
  809.                 LD (HL),D
  810.                 POP AF
  811.                 INC A
  812.                 JR BUFHR3
  813.  
  814. NWOS            DEC HL
  815.                 DEC HL
  816.                 DEC HL
  817.                 LD D,(HL)
  818.                 DEC HL
  819.                 LD E,(HL)
  820.                 LD (BUFHR+1),DE
  821.                 POP AF
  822.                 DEC A
  823.                 RET C
  824. BUFHR3          LD (BUFHR1+1),A
  825.                 POP HL
  826.                 POP AF
  827.                 RET
  828.  
  829. TABSS           DUPL 0X20,0
  830.  
  831. ADRDIS_         PUSH AF
  832.                 LD A,L
  833.                 AND 0X18
  834.                 OR 0X40
  835.                 EX AF,AF'
  836.                 LD A,L
  837.                 AND 7
  838.                 RRCA
  839.                 RRCA
  840.                 RRCA
  841.                 ADD A,H
  842.                 LD L,A
  843.                 EX AF,AF'
  844.                 LD H,A
  845.                 POP AF
  846.                 RET
  847.  
  848. ADRATR_         LD A,H
  849.                 RRCA
  850.                 RRCA
  851.                 RRCA
  852.                 AND 3
  853.                 OR 0X58
  854.                 LD H,A
  855.                 RET
  856.  
  857. UVEHL_          LD A,0X20
  858.                 ADD A,L
  859.                 LD L,A
  860.                 RET NC
  861.                 LD A,H
  862.                 ADD A,8
  863.                 LD H,A
  864.                 RET
  865.  
  866. DRAW_PROGRESS   PUSH AF
  867.                 PUSH HL
  868.                 LD L,A
  869.                 LD H,0
  870.                 ADD HL,HL       ; *2
  871.                 ADD HL,HL       ; *4
  872.                 ADD HL,HL       ; *8
  873.                 ADD HL,HL       ; *16
  874.                 LD C,L
  875.                 LD B,H
  876.                 LD DE,(FILESIZE_BLOCKS)
  877.                 CALL DIVIDE16
  878.                 INC C
  879.                 LD L,(IX + _Y_COORD)
  880.                 INC L
  881.                 INC L
  882.                 INC L
  883.                 LD H,0
  884.                 ADD HL,HL       ; *2
  885.                 ADD HL,HL       ; *4
  886.                 ADD HL,HL       ; *8
  887.                 ADD HL,HL       ; *16
  888.                 ADD HL,HL       ; *32
  889.                 LD A,(IX + _X_COORD)
  890.                 INC A
  891.                 ADD A,L
  892.                 LD L,A
  893.                 LD A,0x58
  894.                 ADD A,H
  895.                 LD H,A
  896.                 LD A,%00111000
  897. .L1             LD (HL),A
  898.                 INC L
  899.                 DEC C
  900.                 JR NZ,.L1
  901.                 POP HL
  902.                 POP AF
  903.                 RET
  904.