Subversion Repositories pentevo

Rev

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

  1.  
  2. ; LAST UPDATE: 14.02.2025 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. ;   BIT 7-0 => 8-9 текущий пункт,
  14. ;         1 => 8-9 адрес хранения
  15. ;       6-0 => A-B количество пунктов
  16. ;         1 => A-B адрес хранения
  17. ; +08 | текущий
  18. ; +09 | пункт меню
  19. ; +0A : количество
  20. ; +0B : пунктов
  21. ; +0C | адрес
  22. ; +0D | текста
  23. ; +0E : список адресов
  24. ; +0F : подпрограмм
  25. ; +10 | адрес списка активных
  26. ; +11 | зон для мыши
  27. ; +12 : адрес списка
  28. ; +13 : горячих клавиш
  29.  
  30. ; формат флагового байта окна
  31. ; IX+6
  32. ; 7-0-нет, 1-есть нижний заголовок
  33. ; 6-0-с рамкой,1-без рамки
  34. ; 5-0-нет, 1-есть верхний заголовок
  35. ; 4-0-есть текст, 1-нет
  36. ; 3
  37. ; 2-
  38. ; 1-
  39. ; 0-
  40.  
  41. ; раскладка байт выделений. на данный момент не все перенесено из старой реализации
  42. ; +0 флаговый
  43. ;     7 при активности установлен
  44. ;     6 установлен, не выделяется
  45. ;     5 установлен, вызов вектора
  46. ;     4
  47. ;     3 \
  48. ;     2  } форма курсора
  49. ;     1  } при попадании
  50. ;     0 /
  51. ; +1 x координата
  52. ; +2 y координата
  53. ; +3 v высота
  54. ; +4 h ширина
  55. ; +5 k код клавиши
  56.  
  57. EXT_WINDOW      LD A,(SYSFLAGS)
  58.                 BIT SYSFLAGS.B_FB_INT_EXT,A
  59.                 JR NZ,EXT_ZX_WINDOW
  60. ; внутренний вызов рисования окна на ZX экране
  61. INT_ZX_WINDOW   LD A,NUM_ZXSCR
  62.                 JR INT_TXT_WINDOW.L1
  63.  
  64. ; внутренний вызов для рисования окна на текстовом экране
  65. INT_TXT_WINDOW  LD A,NUM_TXTSCR
  66. ; внешний вызов для рисования окна на текстовом экране
  67. .L1             EX AF,AF'
  68.                 XOR A
  69.                 LD (PAGE4READ),A
  70.                 EX AF,AF'
  71.                 LD HL,SYSFLAGS
  72.                 SET SYSFLAGS.B_WIN_INT_EXT,(HL)
  73.                 JR EXT_ZX_WINDOW.L1
  74.  
  75. ; внешний вызов для рисования окна на ZX экране
  76. EXT_ZX_WINDOW   LD HL,SYSFLAGS
  77.                 RES SYSFLAGS.B_WIN_INT_EXT,(HL)
  78.                 LD IX,(RREG_IXL)
  79.                 LD A,(R_77)
  80.                 AND 7
  81. .L1             CP NUM_ZXSCR
  82.                 JP Z,WINW_ZX
  83.                 CP NUM_TXTSCR
  84.                 RET NZ
  85.                 EXX
  86.                 LD BC,WIN_P2
  87.                 LD A,(PAGE4READ)
  88.                 OUT (C),A
  89.                 EXX
  90.                 LD D,(IX+_X_COORD)              ; X
  91.                 LD E,(IX+_Y_COORD)              ; Y
  92.                 LD C,(IX+_COLOR_WIN)            ; цвет окна
  93.                 EXX
  94.                 LD H,(IX+_V_SIZE)               ; V
  95.                 LD L,(IX+_H_SIZE)               ; H
  96.                 LD D,(IX+_FLAGS)                ; FLAGS
  97.         EVOPORT WIN_P2,RAM_NMI
  98.                 LD B,HIGH (WIN_P3)
  99.                 LD A,VMODE7_0
  100.                 OUT (C),A
  101.                 EXX
  102.                 PUSH DE
  103.                 LD B," "
  104.                 EXX
  105.                 PUSH HL
  106. WINT2           LD A,L
  107.                 EXX
  108.                 PUSH DE
  109. WINT1           EX AF,AF'
  110.                 CALL PRTSYMTXTMODE
  111.                 INC D
  112.                 EX AF,AF'
  113.                 DEC A
  114.                 JR NZ,WINT1
  115.                 POP DE
  116.                 INC E
  117.                 EXX
  118.                 DEC H
  119.                 JR NZ,WINT2
  120.                 POP HL
  121.                 BIT B_DOWN_HEADER,D
  122.                 EXX
  123.                 POP DE
  124.                 JR Z,TNIZ_RAMKA         ; окно без нижнего заголовка
  125. ; рисуем нижнюю цветную полоску
  126.                 PUSH DE
  127.                 EXX
  128.                 LD A,H
  129.                 EXX
  130.                 DEC A
  131.                 ADD A,E
  132.                 LD E,A
  133.                 CALL COLOR_LINE
  134.                 POP DE
  135.                 JR TCENTR_RAMK
  136.  
  137. ; рисуем нижнюю рамку
  138. TNIZ_RAMKA      EXX
  139.                 BIT B_WINFRAME,D
  140.                 EXX
  141.                 JR NZ,TCENTR_RAMK
  142.                 EXX
  143.                 LD A,H
  144.                 EXX
  145.                 PUSH DE
  146.                 DEC A
  147.                 ADD A,E
  148.                 LD E,A
  149. ;               LD B,"└"
  150.                 LD B,5+0xF2                     ; левый нижний угол
  151.                 CALL PRTSYMTXTMODE
  152. ;               LD B,"─"
  153.                 LD B,6+0xF2                     ; нижний край
  154.                 INC D
  155.                 EXX
  156.                 LD A,L
  157.                 EXX
  158.                 DEC A
  159.                 DEC A
  160. WINT04          EX AF,AF'
  161.                 CALL PRTSYMTXTMODE
  162.                 INC D
  163.                 EX AF,AF'
  164.                 DEC A
  165.                 JR NZ,WINT04
  166. ;               LD B,"┘"
  167.                 LD B,7+0xF2                     ; правый нижний угол
  168.                 CALL PRTSYMTXTMODE
  169.                 POP DE
  170. TCENTR_RAMK     EXX
  171.                 BIT B_WINFRAME,D
  172.                 EXX
  173.                 JR NZ,TWERH_COLOR               ; окно без рамки
  174. ; рисуем боковые рамки
  175.                 EXX
  176.                 LD A,H
  177.                 EXX
  178.                 DEC A
  179.                 DEC A
  180. ;               LD B,"│"
  181.                 LD B,3+0xF2                     ; левая сторона
  182.                 INC E
  183.                 PUSH DE
  184. WINT01          EX AF,AF'
  185.                 CALL PRTSYMTXTMODE
  186.                 INC E
  187.                 EX AF,AF'
  188.                 DEC A
  189.                 JR NZ,WINT01
  190.                 POP DE
  191.                 PUSH DE
  192.                 EXX
  193.                 LD A,L
  194.                 EXX
  195.                 ADD A,D
  196.                 DEC A
  197.                 LD D,A
  198.                 EXX
  199.                 LD A,H
  200.                 EXX
  201.                 DEC A
  202.                 DEC A
  203.                 LD B,4+0xF2                     ; правая сторона окна
  204. WINT02          EX AF,AF'
  205.                 CALL PRTSYMTXTMODE
  206.                 INC E
  207.                 EX AF,AF'
  208.                 DEC A
  209.                 JR NZ,WINT02
  210.                 POP DE
  211.                 DEC E
  212. TWERH_COLOR     EXX
  213.                 BIT B_UPHEADER,D
  214.                 EXX
  215.                 JR Z,TWERH_RAMK
  216. ; рисуем верхнюю цветную полосу
  217.                 PUSH DE
  218.                 CALL COLOR_LINE
  219.                 POP DE
  220.                 JR TRASCH
  221.  
  222. TWERH_RAMK      EXX
  223.                 BIT B_WINFRAME,D
  224.                 EXX
  225.                 JR NZ,TRASCH
  226. ;               LD B,"┌"
  227.                 LD B,0+0xF2                     ; левый верхний угол
  228.                 CALL PRTSYMTXTMODE
  229. ;               LD B,"─"
  230.                 LD B,1+0xF2                     ; верхний край
  231.                 EXX
  232.                 LD A,L
  233.                 EXX
  234.                 DEC A
  235.                 DEC A
  236.                 PUSH DE
  237.                 INC D
  238. WINT3           EX AF,AF'
  239.                 CALL PRTSYMTXTMODE
  240.                 INC D
  241.                 EX AF,AF'
  242.                 DEC A
  243.                 JR NZ,WINT3
  244. ;               LD B,"┐"
  245.                 LD B,2+0xF2                     ; правый верхний угол
  246.                 CALL PRTSYMTXTMODE
  247.                 POP DE
  248. TRASCH          INC D
  249.                 LD (TADRSTR_Y),DE
  250.                 LD A,D
  251.                 LD (TXNEW),A
  252.                 LD A,(SYSFLAGS)
  253.                 AND SYSFLAGS.M_RUN_FAT_DSK
  254.                 JR NZ,TNOSET_MAIN
  255.         ROMCALL MAIN_MEM13,ROM_RST83
  256. TNOSET_MAIN     LD BC,WIN_P2
  257.                 LD A,(PAGE4READ)
  258.                 OUT (C),A
  259.                 LD L,(IX+_ADR_TXT_L)
  260.                 LD H,(IX+_ADR_TXT_H)
  261.         EVOPORT WIN_P2,RAM_NMI
  262.                 EXX
  263.                 BIT B_TEXT,D
  264.                 EXX
  265.                 RET NZ
  266. ITPRINT_MESSAGE EXX
  267.                 LD HL,0
  268.                 LD (TEK_TEXT),HL
  269.         EVOPORT WIN_P2,RAM_NMI
  270.                 LD A,(PAGE4READ)
  271.                 LD H,A
  272.                 OUT (C),H
  273.                 LD L,0
  274.                 EXX
  275. TNEXT           EXX
  276.                 OUT (C),H
  277.                 EXX
  278.                 LD A,(HL)
  279.                 INC HL
  280.                 AND A
  281.                 JP Z,STOP_TPRINTMSG
  282. TPRINT          CP 0x20
  283.                 JP NC,TPRINTA
  284.                 CP 3
  285.                 JR Z,TNEXT
  286.                 CP 9
  287.                 JR NZ,TCOD0D
  288.                 LD B,(HL)
  289.                 INC HL
  290.                 EXX
  291.                 OUT (C),L
  292.                 EXX
  293.                 LD A,(TADRSTR_X)
  294.                 ADD A,B
  295.                 LD (TADRSTR_X),A
  296.                 JP TNEXT
  297.  
  298. TCOD0D          CP 0x0D
  299.                 JR NZ,TCOD16
  300.                 EXX
  301.                 OUT (C),L
  302.                 EXX
  303.                 LD A,(TXNEW)
  304.                 LD (TADRSTR_X),A
  305.                 LD D,A
  306.                 LD A,(TADRSTR_Y)
  307.                 INC A
  308.                 LD (TADRSTR_Y),A
  309.                 LD E,A
  310.                 JP TNEXT
  311.  
  312. TCOD16          CP 0x16
  313.                 JR NZ,TCOD17
  314.                 LD E,(HL)
  315.                 INC HL
  316.                 LD D,(HL)
  317.                 INC HL
  318.                 EXX
  319.                 OUT (C),L
  320.                 EXX
  321.                 LD (TADRSTR_Y),DE
  322.                 JP TNEXT
  323.  
  324. TCOD17          CP 0x17
  325.                 JR NZ,TCOD1
  326.                 LD C,(HL)
  327.                 INC HL
  328.                 LD A,C
  329.                 EXX
  330.                 OUT (C),L
  331.                 EXX
  332.                 LD (COLOR4SYM),A
  333.                 JP TNEXT
  334.  
  335. TCOD1           CP 1
  336.                 JR NZ,TCOD2
  337.                 LD D,(IX+_X_COORD)
  338.                 LD E,(IX+_Y_COORD)
  339.                 INC D
  340.                 EXX
  341.                 OUT (C),L
  342.                 EXX
  343.                 LD (TADRSTR_Y),DE
  344.                 JP TNEXT
  345.  
  346. TCOD2           CP 2
  347.                 JP NZ,TNEXT
  348.                 LD DE,(TEK_TEXT)
  349.                 LD A,D
  350.                 OR E
  351.                 JR NZ,TCOD2_1
  352.                 LD E,(HL)
  353.                 INC HL
  354.                 LD D,(HL)
  355.                 INC HL
  356.                 LD (TEK_TEXT),HL
  357.                 EX DE,HL
  358.                 JP TNEXT
  359.  
  360. TCOD2_1         LD HL,(TEK_TEXT)
  361.                 LD DE,0
  362.                 LD (TEK_TEXT),DE
  363.                 JP TNEXT
  364.  
  365. TPRINT_A        LD A,(RREG_A)
  366. ITPRINT_A       EX AF,AF'
  367. ITPRINT_A1      EXX
  368.                 LD BC,WIN_P2
  369.                 LD A,(PAGE4READ)
  370.                 LD H,A
  371.                 LD L,0
  372.                 EX AF,AF'
  373.                 EXX
  374.                 LD HL,STOP_PRINTA
  375. TPRINTA         EX AF,AF'
  376.                 EXX
  377.                 OUT (C),L
  378.                 EXX
  379.                 PUSH HL
  380.                 LD HL,TADRSTR_Y
  381.                 LD E,(HL)
  382.                 INC HL
  383.                 LD D,(HL)
  384.                 INC (HL)
  385.                 LD A,(COLOR4SYM)
  386.                 LD C,A
  387.                 EXX
  388.                 LD A,VMODE7_0
  389.                 OUT (C),A
  390.                 EXX
  391.                 LD H,E
  392.                 LD L,0
  393.                 LD E,D
  394.                 LD A,D
  395.                 LD D,L
  396.                 SRL H
  397.                 RR L
  398.                 SRL H
  399.                 RR L
  400.                 SRL E
  401.                 ADD HL,DE
  402.                 AND 1
  403.                 RRCA
  404.                 RRCA
  405.                 RRCA
  406.                 RRCA
  407.                 ADD A,HIGH (CPU2+LSYM)
  408.                 LD D,A
  409.                 LD E,LOW (CPU2+LSYM)
  410.                 ADD HL,DE
  411.                 EX AF,AF'
  412.                 LD (HL),A
  413.                 LD A,C
  414.                 INC A
  415.                 JP Z,TRINTA0
  416.                 LD A,H
  417.                 XOR 0x30
  418.                 LD H,A
  419.                 LD A,D
  420.                 AND 0x10
  421.                 RRCA
  422.                 RRCA
  423.                 RRCA
  424.                 RRCA
  425.                 ADD A,L
  426.                 LD L,A
  427.                 LD (HL),C
  428. TRINTA0         EXX
  429.                 OUT (C),L
  430.                 EXX
  431.                 POP HL
  432.                 JP TNEXT
  433.  
  434. STOP_TPRINTMSG  EXX
  435.                 OUT (C),L
  436.                 EXX
  437.                 RET
  438.  
  439. ; D-X E-Y B-символ C-цвет
  440. COLOR_LINE      LD A,C
  441.                 PUSH AF
  442.                 AND 7
  443.                 RLCA
  444.                 RLCA
  445.                 RLCA
  446.                 LD H,A
  447.                 LD A,C
  448.                 RRCA
  449.                 RRCA
  450.                 RRCA
  451.                 AND 7
  452.                 OR H
  453.                 LD H,A
  454.                 LD A,C
  455.                 AND 0xC0
  456.                 OR H
  457.                 LD C,A
  458.                 LD B," "
  459.                 EXX
  460.                 LD A,L
  461.                 EXX
  462. WINT03          EX AF,AF'
  463.                 CALL PRTSYMTXTMODE
  464.                 INC D
  465.                 EX AF,AF'
  466.                 DEC A
  467.                 JR NZ,WINT03
  468.                 POP AF
  469.                 LD C,A
  470.                 RET
  471.  
  472. ; D-X E-Y -> DE=ATTR ADR HL=DISP ADR
  473. TDISP_ATTR      LD H,E
  474.                 LD L,0
  475.                 LD E,D
  476.                 LD A,D
  477.                 LD D,L
  478.                 SRL H
  479.                 RR L
  480.                 SRL H
  481.                 RR L
  482.                 SRL E
  483.                 ADD HL,DE
  484.                 AND 1
  485.                 RRCA
  486.                 RRCA
  487.                 RRCA
  488.                 RRCA
  489.                 ADD A,HIGH (CPU3+LSYM)
  490.                 LD D,A
  491.                 LD E,LOW (CPU3+LSYM)
  492.                 ADD HL,DE                       ; HL=Адрес символа на текстмодном экране
  493.                 LD E,H
  494.                 LD A,H
  495.                 XOR 0x30
  496.                 LD D,A
  497.                 LD A,E
  498.                 AND 0x10
  499.                 RRCA
  500.                 RRCA
  501.                 RRCA
  502.                 RRCA
  503.                 ADD A,L
  504.                 LD E,A
  505.                 RET
  506.  
  507. ; печать символа на текстмодном экране
  508. ; D-X E-Y B-символ C-цвет
  509. PRTSYMTXTMODE   PUSH DE
  510.                 PUSH HL
  511.                 CALL TDISP_ATTR
  512.                 LD (HL),B
  513.                 LD A,C
  514.                 INC A
  515.                 JR Z,.L1
  516.                 EX DE,HL
  517.                 LD (HL),C
  518. .L1             POP HL
  519.                 POP DE
  520.                 RET
  521.  
  522. WINW_ZX         EXX
  523.         READ_7FFD
  524.                 AND 8
  525.                 RRCA
  526.                 RRCA
  527.                 RRCA
  528.                 RRCA
  529.                 LD D,A
  530.                 LD BC,WIN_P2
  531.                 LD A,(PAGE4READ)
  532.                 OUT (C),A
  533.                 LD A,(IX+_V_SIZE)
  534.                 ADD A,A
  535.                 ADD A,A
  536.                 ADD A,A
  537.                 LD E,A
  538.                 EXX
  539.                 LD C,(IX+_H_SIZE)
  540.                 LD L,(IX+_Y_COORD)
  541.                 LD H,0
  542.                 ADD HL,HL
  543.                 ADD HL,HL
  544.                 ADD HL,HL
  545.                 ADD HL,HL
  546.                 EX DE,HL
  547.                 LD IY,BUFTSC
  548.                 ADD IY,DE
  549. WINW3           LD A,(IX+_X_COORD)
  550.                 ADD A,(IY+0)
  551.                 LD E,A
  552.                 LD A,(IY+1)
  553.                 EXX
  554.                 ADD A,D
  555.                 EXX
  556.                 LD D,A
  557.                 AND 7
  558.                 JR NZ,WINW4
  559.                 LD B,C
  560.                 LD A,D
  561.                 RRCA
  562.                 RRCA
  563.                 RRCA
  564.                 AND 3
  565.                 ADD A,0x58
  566.                 EXX
  567.                 ADD A,D
  568.                 EXX
  569.                 LD H,A
  570.                 LD L,E
  571.                 LD A,(IX+_COLOR_WIN)
  572. WINW5           LD (HL),A
  573.                 INC L
  574.                 DJNZ WINW5
  575. WINW4           LD B,C
  576.                 XOR A
  577. WINW6           LD (DE),A
  578.                 INC E
  579.                 DJNZ WINW6
  580.                 INC IY
  581.                 INC IY
  582.                 EXX
  583.                 DEC E
  584.                 EXX
  585.                 JR NZ,WINW3
  586.                 BIT B_ADR_PUNKT,(IX+_FLAGS)
  587.                 JR Z,NIZ_RAMKA          ; окно без нижнего заголовка
  588. ; рисуем нижнюю цветную полоску
  589.                 LD DE,0xFFF0
  590.                 ADD IY,DE
  591.                 LD A,(IX+_X_COORD)
  592.                 ADD A,(IY+0)
  593.                 LD E,A
  594.                 LD A,(IY+1)
  595.                 RRCA
  596.                 RRCA
  597.                 RRCA
  598.                 AND 3
  599.                 ADD A,0x58
  600.                 EXX
  601.                 ADD A,D
  602.                 EXX
  603.                 LD D,A
  604.                 LD B,C
  605.                 LD L,(IX+_COLOR_WIN)
  606.                 LD A,L
  607.                 AND 7
  608.                 RLCA
  609.                 RLCA
  610.                 RLCA
  611.                 LD H,A
  612.                 LD A,L
  613.                 RRCA
  614.                 RRCA
  615.                 RRCA
  616.                 AND 7
  617.                 OR H
  618. WINWN1          LD (DE),A
  619.                 INC E
  620.                 DJNZ WINWN1
  621.                 LD DE,0x0E
  622.                 ADD IY,DE
  623.                 JR CENTR_RAMK
  624.  
  625. NIZ_RAMKA       BIT B_ADR_NUMS_PUNKT,(IX+_FLAGS)
  626.                 JR NZ,CENTR_RAMK                ; окно без рамки
  627. ; рисуем нижнюю рамку
  628.                 DEC IY
  629.                 DEC IY
  630.                 LD L,(IX+_X_COORD)
  631.                 LD A,(IY+0)
  632.                 ADD A,L
  633.                 LD E,A
  634.                 LD H,A
  635.                 LD A,(IY+1)
  636.                 EXX
  637.                 ADD A,D
  638.                 EXX
  639.                 LD D,A
  640.                 LD B,C
  641.                 LD A,0xFF
  642. NR1             LD (DE),A
  643.                 INC E
  644.                 DJNZ NR1
  645.                 DEC E
  646.                 DEC D
  647.                 LD L,H
  648.                 LD H,D
  649.                 LD A,0x80
  650.                 LD B,7
  651. NR2             LD (HL),A
  652.                 RLCA
  653.                 LD (DE),A
  654.                 RRCA
  655.                 DEC H
  656.                 DEC D
  657.                 DJNZ NR2
  658. CENTR_RAMK      BIT B_ADR_NUMS_PUNKT,(IX+_FLAGS)
  659.                 JR NZ,WERH_COLOR                ; окно без рамки
  660. ; рисуем боковые рамки
  661.                 EXX
  662.                 LD A,(IX+_V_SIZE)
  663.                 SUB 2
  664.                 LD E,A
  665.                 EXX
  666. NR4             LD DE,0xFFF0
  667.                 ADD IY,DE
  668.                 LD L,(IX+_X_COORD)
  669.                 LD A,(IY+0)
  670.                 ADD A,L
  671.                 LD E,A
  672.                 LD A,(IY+1)
  673.                 EXX
  674.                 ADD A,D
  675.                 EXX
  676.                 LD D,A
  677.                 LD A,E
  678.                 LD H,D
  679.                 ADD A,(IX+_H_SIZE)
  680.                 DEC A
  681.                 LD L,A
  682.                 LD A,0x80
  683.                 LD B,8
  684. NR3             LD (DE),A
  685.                 RLCA
  686.                 LD (HL),A
  687.                 RRCA
  688.                 DEC H
  689.                 DEC D
  690.                 DJNZ NR3
  691.                 EXX
  692.                 DEC E
  693.                 EXX
  694.                 JR NZ,NR4
  695. WERH_COLOR      BIT B_UPHEADER,(IX+_FLAGS)
  696.                 JR Z,WERH_RAMK          ; без верхнего заголовка
  697. ; рисуем верхнюю цветную полосу
  698.                 LD L,(IX+_Y_COORD)
  699.                 LD H,0
  700.                 ADD HL,HL
  701.                 ADD HL,HL
  702.                 ADD HL,HL
  703.                 ADD HL,HL
  704.                 EX DE,HL
  705.                 LD IY,BUFTSC
  706.                 ADD IY,DE
  707.                 LD A,(IX+_X_COORD)
  708.                 ADD A,(IY+0)
  709.                 LD E,A
  710.                 LD A,(IY+1)
  711.                 RRCA
  712.                 RRCA
  713.                 RRCA
  714.                 AND 3
  715.                 ADD A,0x58
  716.                 EXX
  717.                 ADD A,D
  718.                 EXX
  719.                 LD D,A
  720.                 LD B,C
  721.                 LD L,(IX+_COLOR_WIN)
  722.                 LD A,L
  723.                 AND 7
  724.                 RLCA
  725.                 RLCA
  726.                 RLCA
  727.                 LD H,A
  728.                 LD A,L
  729.                 RRCA
  730.                 RRCA
  731.                 RRCA
  732.                 AND 7
  733.                 OR H
  734. WINWW1          LD (DE),A
  735.                 INC E
  736.                 DJNZ WINWW1
  737.                 JP RADUGA
  738.  
  739. WERH_RAMK       BIT B_ADR_NUMS_PUNKT,(IX+_FLAGS)
  740.                 JR NZ,RADUGA            ; окно без рамки
  741. ; рисуем верхнюю рамку
  742. WR4             LD DE,0xFFF0
  743.                 ADD IY,DE
  744.                 LD L,(IX+_X_COORD)
  745.                 LD A,(IY+0)
  746.                 ADD A,L
  747.                 LD E,A
  748.                 LD A,(IY+1)
  749.                 EXX
  750.                 ADD A,D
  751.                 EXX
  752.                 LD D,A
  753.                 LD A,E
  754.                 LD H,D
  755.                 ADD A,(IX+_H_SIZE)
  756.                 DEC A
  757.                 LD L,A
  758.                 LD A,0x80
  759.                 LD B,7
  760. WR3             LD (DE),A
  761.                 RLCA
  762.                 LD (HL),A
  763.                 RRCA
  764.                 DEC H
  765.                 DEC D
  766.                 DJNZ WR3
  767.                 LD A,L
  768.                 SUB E
  769.                 LD B,A
  770.                 INC B
  771.                 LD A,0xFF
  772. WR5             LD (DE),A
  773.                 INC E
  774.                 DJNZ WR5
  775. RADUGA          BIT B_UPHEADER,(IX+_FLAGS)
  776.                 JR Z,RASCH
  777.                 LD IY,BUFTSC
  778.                 LD L,(IX+_Y_COORD)
  779.                 LD H,0
  780.                 ADD HL,HL
  781.                 ADD HL,HL
  782.                 ADD HL,HL
  783.                 ADD HL,HL
  784.                 EX DE,HL
  785.                 ADD IY,DE
  786.                 LD L,(IY+0)
  787.                 LD A,(IY+1)
  788.                 LD D,A
  789.                 RRCA
  790.                 RRCA
  791.                 RRCA
  792.                 AND 3
  793.                 ADD A,0x58
  794.                 EXX
  795.                 ADD A,D
  796.                 EXX
  797.                 LD H,A
  798.                 LD A,(IX+_X_COORD)
  799.                 ADD A,(IX+_H_SIZE)
  800.                 ADD A,L
  801.                 LD L,A
  802.                 LD E,A
  803.                 LD A,(IX+_COLOR_WIN)
  804.                 AND 0x47
  805.                 LD C,A
  806.                 AND 0x40
  807.                 LD B,A
  808.                 DEC L
  809.                 LD A,C
  810.                 ADD A,5*8
  811.                 LD (HL),A       ; 5*8+7
  812.                 DEC L
  813.                 LD A,4*8+5
  814.                 OR B
  815.                 LD (HL),A       ; 4*8+5
  816.                 DEC L
  817.                 LD A,6*8+4
  818.                 OR B
  819.                 LD (HL),A       ; 6*8+4
  820.                 DEC L
  821.                 LD A,2*8+6
  822.                 OR B
  823.                 LD (HL),A       ; 2*8+6
  824.                 DEC L
  825.                 LD A,C
  826.                 AND 7
  827.                 RLCA
  828.                 RLCA
  829.                 RLCA
  830.                 OR B
  831.                 ADD A,2
  832.                 LD (HL),A       ; 7*8+2
  833.                 EX DE,HL
  834.                 DEC L
  835.                 LD B,8
  836.                 XOR A
  837.                 LD C,L
  838. RADUGA1         SCF
  839.                 RLA
  840.                 LD (HL),A
  841.                 DEC L
  842.                 LD (HL),A
  843.                 DEC L
  844.                 LD (HL),A
  845.                 DEC L
  846.                 LD (HL),A
  847.                 DEC L
  848.                 LD (HL),A
  849.                 LD L,C
  850.                 INC H
  851.                 DJNZ RADUGA1
  852. RASCH           LD A,(IX+_X_COORD)
  853.                 LD L,(IX+_Y_COORD)
  854.                 ADD A,A
  855.                 ADD A,A
  856.                 ADD A,A
  857.                 LD H,A
  858.                 INC H
  859.                 EXX
  860.         EVOPORT WIN_P2,RAM_NMI
  861.                 EXX
  862.                 LD A,H
  863.                 LD (XNEW),A
  864.                 LD (ADRSTR_Y),HL
  865.                 EXX
  866.                 LD A,(PAGE4READ)
  867.                 OUT (C),A
  868.                 EXX
  869.                 LD L,(IX+_ADR_TXT_L)
  870.                 LD H,(IX+_ADR_TXT_H)
  871.                 EXX
  872.         EVOPORT WIN_P2,RAM_NMI
  873.                 EXX
  874.                 BIT B_TEXT,(IX+_FLAGS)
  875.                 JP Z,IPRINT_MESSAGE
  876.                 RET
  877.  
  878. CLS             LD HL,0
  879.                 LD D,H
  880.                 LD E,L
  881.                 ADD HL,SP
  882.                 LD B,0x60
  883.                 LD SP,0x5800
  884. CLS1
  885.         REPT 0x20
  886.                 PUSH DE
  887.         ENDM
  888.                 DJNZ CLS1
  889.                 LD SP,HL
  890. CLSSCR          LD HL,0
  891.                 LD D,A
  892.                 LD E,A
  893.                 ADD HL,SP
  894.                 LD SP,0x5B00
  895.                 LD B,12
  896. CLS2
  897.         REPT 0x20
  898.                 PUSH DE
  899.         ENDM
  900.                 DJNZ CLS2
  901.                 LD SP,HL
  902.                 RRCA
  903.                 RRCA
  904.                 RRCA
  905.                 AND 7
  906.                 OUT (0xFE),A
  907.                 RET
  908.  
  909. STOP_PRINTMSG
  910.         EVOPORT WIN_P2,RAM_NMI
  911.                 RET
  912.  
  913. ; печать текстовой строки с управляющими кодами (внешний вызов)
  914. PRINT_MESSAGE   LD HL,(RREG_L)
  915. ; печать текстовой строки с управляющими кодами (внутренний вызов)
  916. IPRINT_MESSAGE  LD A,(R_77)
  917.                 AND 7
  918.                 CP 7
  919.                 JP Z,ITPRINT_MESSAGE
  920.                 CP 3
  921.                 RET NZ
  922.         READ_7FFD
  923.                 AND 8
  924.                 LD BC,BUFTSC
  925.                 JR Z,IPM1
  926.                 LD BC,BUFTSC1
  927. IPM1            LD (TEKBUFTSC),BC
  928.                 LD BC,WIN_P2
  929. ; печать текстовой стороки с управляющими кодами (внутренний вызов)
  930. NEXT            LD A,(PAGE4READ)
  931.                 OUT (C),A
  932.                 LD A,(HL)
  933.                 INC HL
  934.                 AND A
  935.                 JR Z,STOP_PRINTMSG
  936. PRINT           CP 0x20
  937.                 JP NC,PRINTA
  938. COD03           CP 3
  939.                 JR NZ,COD9
  940.                 LD D,0                          ; центровка строки в окне
  941.                 LD A,H
  942.                 EX AF,AF'
  943.                 LD E,L
  944. CEN2            LD A,(HL)
  945.                 CP 0x20
  946.                 JR C,CEN3
  947.                 LD A,6
  948.                 ADD A,D
  949.                 LD D,A
  950.                 INC HL
  951.                 JR CEN2
  952.  
  953. CEN3
  954.         EVOPORT WIN_P2,RAM_NMI
  955.                 LD A,(IX+_H_SIZE)
  956.                 ADD A,A
  957.                 ADD A,A
  958.                 ADD A,A
  959.                 SUB D
  960.                 SRL A
  961.                 DEC A
  962.                 LD H,A
  963.                 LD A,(XNEW)
  964.                 ADD A,H
  965.                 LD (ADRSTR_X),A
  966.                 EX AF,AF'
  967.                 LD H,A
  968.                 LD L,E
  969.                 JP NEXT
  970.  
  971. COD9            CP 9
  972.                 JR NZ,COD0D
  973.                 LD D,(HL)                       ; табуляция на N позиций
  974.                 INC HL
  975.                 LD A,D
  976.                 ADD A,A
  977.                 ADD A,D
  978.                 ADD A,A
  979.                 LD D,A
  980.         EVOPORT WIN_P2,RAM_NMI
  981.                 LD A,(ADRSTR_X)
  982.                 ADD A,D
  983.                 LD (ADRSTR_X),A
  984.                 JR NEXT
  985.  
  986. COD0D           CP 0x0D
  987.                 JR NZ,COD16
  988.         EVOPORT WIN_P2,RAM_NMI
  989.                 LD A,(XNEW)                     ; перевод строки
  990.                 LD (ADRSTR_X),A
  991.                 LD A,(ADRSTR_Y)
  992.                 INC A
  993.                 LD (ADRSTR_Y),A
  994.                 JP NEXT
  995.  
  996. COD16           CP 0x16
  997.                 JR NZ,COD17
  998.                 LD E,(HL)                       ; печать в указанной позиции
  999.                 INC HL
  1000.                 LD D,(HL)
  1001.                 INC HL
  1002.         EVOPORT WIN_P2,RAM_NMI
  1003.                 LD (ADRSTR_Y),DE
  1004.                 JP NEXT
  1005.  
  1006. COD17           CP 0x17
  1007.                 JR NZ,COD1
  1008.                 LD D,(HL)
  1009.                 INC HL
  1010.         EVOPORT WIN_P2,RAM_NMI
  1011.                 LD A,D
  1012.                 LD (COLOR4SYM),A
  1013.                 JP NEXT
  1014.  
  1015. ; координата печати в исходную позицию окна
  1016. COD1            CP 1
  1017.                 JP NZ,NEXT
  1018.         EVOPORT WIN_P2,RAM_NMI
  1019.                 LD A,(IX+_X_COORD)
  1020.                 LD E,(IX+_Y_COORD)
  1021.                 ADD A,A
  1022.                 ADD A,A
  1023.                 ADD A,A
  1024.                 INC A
  1025.                 LD D,A
  1026.                 LD (ADRSTR_Y),DE
  1027.                 JP NEXT
  1028.  
  1029. PRINT_A         LD A,(RREG_A)
  1030. IPRINT_A        EX AF,AF'
  1031.                 LD A,(R_77)
  1032.                 AND 7
  1033.                 CP 7
  1034.                 JP Z,ITPRINT_A1
  1035.                 CP 3
  1036.                 RET NZ
  1037.                 EX AF,AF'
  1038.                 LD BC,WIN_P2
  1039.                 LD HL,STOP_PRINTA
  1040. ; печать символа в "A"
  1041. PRINTA          EX AF,AF'
  1042.         EVOPORT WIN_P2,RAM_NMI
  1043.                 PUSH HL
  1044.                 LD H,A
  1045.                 EX AF,AF'
  1046.                 LD L,A
  1047.                 ADD HL,HL
  1048.                 ADD HL,HL
  1049.                 ADD HL,HL
  1050.                 LD DE,CHARS
  1051.                 ADD HL,DE
  1052.                 LD A,(COLOR4SYM)
  1053.                 LD D,A
  1054.                 EXX
  1055.                 LD HL,(ADRSTR_Y)                ; H=X L=Y
  1056.                 LD B,0
  1057.                 LD D,B
  1058.                 LD A,H
  1059.                 AND 7
  1060.                 LD C,A
  1061.                 LD IY,SDVIG
  1062.                 ADD IY,BC
  1063.                 LD A,H
  1064.                 AND 0xF8
  1065.                 RRCA
  1066.                 RRCA
  1067.                 RRCA
  1068.                 EX AF,AF'
  1069.                 LD A,6
  1070.                 ADD A,H
  1071.                 LD H,A
  1072.                 LD (ADRSTR_Y),HL
  1073.                 LD A,L
  1074.                 RLCA
  1075.                 RLCA
  1076.                 RLCA
  1077.                 LD E,A
  1078.                 LD HL,(TEKBUFTSC)
  1079.                 ADD HL,DE
  1080.                 ADD HL,DE
  1081.                 EX AF,AF'
  1082.                 ADD A,(HL)
  1083.                 INC HL
  1084.                 LD E,A
  1085.                 LD D,(HL)
  1086.                 LD HL,BUFMSK
  1087.                 ADD HL,BC
  1088.                 ADD HL,BC
  1089.                 LD B,(HL)
  1090.                 INC HL
  1091.                 LD C,(HL)
  1092.                 EXX
  1093.                 LD A,(PAGE4READ)
  1094.                 OUT (C),A
  1095.                 EXX
  1096.                 LD A,8
  1097. SLEDU           EX AF,AF'
  1098.                 EXX
  1099.                 LD A,(HL)
  1100.                 INC HL
  1101.                 EXX
  1102.                 LD L,A
  1103.                 LD H,0
  1104.                 JP (IY)
  1105.  
  1106. SDVIG
  1107.         REPT 8
  1108.                 ADD HL,HL
  1109.         ENDM
  1110.                 LD A,(DE)
  1111.                 AND B
  1112.                 OR H
  1113.                 LD (DE),A
  1114.                 INC E
  1115.                 LD A,(DE)
  1116.                 AND C
  1117.                 OR L
  1118.                 LD (DE),A
  1119.                 DEC E
  1120.                 INC D
  1121.                 EX AF,AF'
  1122.                 DEC A
  1123.                 JP NZ,SLEDU
  1124.                 EX DE,HL
  1125.                 EXX
  1126.                 LD A,D
  1127.                 EXX
  1128.                 LD E,A
  1129.                 INC A
  1130.                 JR Z,PRINTA1
  1131.                 DEC H
  1132.                 LD A,H
  1133.                 RRCA
  1134.                 RRCA
  1135.                 RRCA
  1136.                 AND 3
  1137.                 OR 0x58
  1138.                 LD H,A
  1139.                 LD (HL),E
  1140. PRINTA1         EXX
  1141.         EVOPORT WIN_P2,RAM_NMI
  1142.                 POP HL
  1143.                 JP NEXT
  1144.  
  1145. STOP_PRINTA     DB 0
  1146.  
  1147. BUFMSK          DB %00000011,%11111111
  1148.                 DB %10000001,%11111111
  1149.                 DB %11000000,%11111111
  1150.                 DB %11100000,%01111111
  1151.                 DB %11110000,%00111111
  1152.                 DB %11111000,%00011111
  1153.                 DB %11111100,%00001111
  1154.                 DB %11111110,%00000111
  1155.  
  1156. ; рисовалка цветной полоски в меню
  1157. COLOR_CURSOR    LD HL,SYSFLAGS
  1158.                 BIT SYSFLAGS.B_VIDEO_MODE,(HL)
  1159.                 JP Z,COLORCURS4
  1160.         EVOPORT WIN_P3,VMODE7_0
  1161.                 LD B,(IX+_H_SIZE)
  1162.                 LD DE,(COL_CURSOR)
  1163.                 CALL TRESTORE_CLINE
  1164. COLORCURS6      LD A,(IX+_NUM_PKT)
  1165.                 BIT B_ADR_PUNKT,A
  1166.                 JR Z,COLORCURS5
  1167.                 LD L,(IX+_TEK_PKT_L)
  1168.                 LD H,(IX+_TEK_PKT_H)
  1169.                 LD A,(HL)
  1170. COLORCURS5      LD D,(IX+_X_COORD)
  1171.                 ADD A,(IX+_Y_COORD)
  1172.                 LD E,A
  1173.                 INC E
  1174.                 LD (COL_CURSOR),DE
  1175.         EVOPORT WIN_P3,VMODE7_0
  1176.                 LD B,(IX+_H_SIZE)
  1177.                 CALL TSTORE_CLINE
  1178.                 LD A,(IX+_COLOR_CUR)
  1179.                 AND 0xF8
  1180.                 LD C,A
  1181.                 PUSH HL
  1182.                 PUSH DE
  1183.                 PUSH BC
  1184.                 LD (COL_CURSOR),DE
  1185.                 CALL TDISP_ATTR
  1186.                 LD A,D
  1187.                 XOR 0x10
  1188.                 LD H,A
  1189.                 LD A,D
  1190.                 AND 0x10
  1191.                 RRCA
  1192.                 RRCA
  1193.                 RRCA
  1194.                 RRCA
  1195.                 ADD A,E
  1196.                 LD L,A
  1197. TCOLORLINE2     EX DE,HL
  1198.                 LD A,(HL)
  1199.                 AND 0xC7
  1200.                 OR C
  1201.                 LD (HL),A
  1202.                 INC HL
  1203.                 DJNZ TCOLORLINE2
  1204.                 POP BC
  1205.                 POP DE
  1206.                 POP HL
  1207.                 RET
  1208.  
  1209. ; рисование цветной полосы
  1210. ; D-X E-Y B-длина C-цвет
  1211. TCOLOR_LINE     PUSH HL
  1212.                 PUSH DE
  1213.                 PUSH BC
  1214.                 LD (COL_CURSOR),DE
  1215.                 CALL TDISP_ATTR
  1216.                 LD A,D
  1217.                 XOR 0x10
  1218.                 LD H,A
  1219.                 LD A,D
  1220.                 AND 0x10
  1221.         REPT 4
  1222.                 RRCA
  1223.         ENDM
  1224.                 ADD A,E
  1225.                 LD L,A
  1226. TCOLORLINE1     EX DE,HL
  1227.                 LD (HL),C
  1228.                 INC HL
  1229.                 DJNZ TCOLORLINE1
  1230.                 POP BC
  1231.                 POP DE
  1232.                 POP HL
  1233.                 RET
  1234. ;  00   01   02   03   04   05   06
  1235. ; F1C0 E1C1 F1C1 E1C2 F1C2 E1C3 F1C3
  1236.  
  1237. ; сохранение части экрана для вывода цветной линии
  1238. ; D-X E-Y B-длина
  1239. TSTORE_CLINE    PUSH HL
  1240.                 PUSH DE
  1241.                 PUSH BC
  1242.                 CALL TDISP_ATTR
  1243.                 LD A,D
  1244.                 XOR 0x10
  1245.                 LD H,A
  1246.                 LD A,D
  1247.                 AND 0x10
  1248.         REPT 4
  1249.                 RRCA
  1250.         ENDM
  1251.                 ADD A,E
  1252.                 LD L,A
  1253. TSTORECLINE1    EXX
  1254.                 LD HL,COLBUF
  1255.                 EXX
  1256. TSTORECLINE2    EX DE,HL
  1257.                 LD A,(HL)
  1258.                 INC HL
  1259.                 EXX
  1260.                 LD (HL),A
  1261.                 INC HL
  1262.                 EXX
  1263.                 DJNZ TSTORECLINE2
  1264.                 POP BC
  1265.                 POP DE
  1266.                 POP HL
  1267.                 RET
  1268.  
  1269. ; восстановление части экрана под цветной линией
  1270. ; D-X E-Y B-длина
  1271. TRESTORE_CLINE  PUSH HL
  1272.                 PUSH DE
  1273.                 PUSH BC
  1274.                 LD B,(IX+_H_SIZE)
  1275.                 LD DE,(COL_CURSOR)
  1276.                 CALL TDISP_ATTR
  1277.                 LD A,D
  1278.                 XOR 0x10
  1279.                 LD H,A
  1280.                 LD A,D
  1281.                 AND 0x10
  1282.         REPT 4
  1283.                 RRCA
  1284.         ENDM
  1285.                 ADD A,E
  1286.                 LD L,A
  1287. TRESTCLINE1     EXX
  1288.                 LD HL,COLBUF
  1289.                 EXX
  1290. TRESTCLINE2     EX DE,HL
  1291.                 EXX
  1292.                 LD A,(HL)
  1293.                 INC HL
  1294.                 EXX
  1295.                 LD (HL),A
  1296.                 INC HL
  1297.                 DJNZ TRESTCLINE2
  1298.                 POP BC
  1299.                 POP DE
  1300.                 POP HL
  1301.                 RET
  1302.  
  1303. RESTORE_CLINE   LD HL,SYSFLAGS
  1304.                 BIT SYSFLAGS.B_VIDEO_MODE,(HL)
  1305.                 JR NZ,TREST_CLINE
  1306.                 LD DE,(COL_CURSOR)
  1307.                 LD HL,COLBUF
  1308.                 LD C,(IX+_H_SIZE)
  1309.                 LD B,0
  1310.                 LDIR
  1311.                 RET
  1312.  
  1313. TREST_CLINE
  1314.         EVOPORT WIN_P3,VMODE7_0
  1315.                 LD B,(IX+_H_SIZE)
  1316.                 LD DE,(COL_CURSOR)
  1317.                 JP TRESTORE_CLINE
  1318.  
  1319. COLORCURS4      LD DE,(COL_CURSOR)
  1320.                 LD HL,COLBUF
  1321.                 LD C,(IX+_H_SIZE)
  1322. ;               BIT 2,(IY+55)           ; файлов больше высоты окна?
  1323. ;               JR Z,COLCURS1
  1324. ;               DEC C                   ; цветная полоска на 1 короче
  1325. COLCURS1        LD B,0
  1326.                 LDIR
  1327. SET_ADR_ATR
  1328.         EVOPORT WIN_P3,VMODE7_0
  1329.                 LD HL,SYSFLAGS
  1330.                 BIT SYSFLAGS.B_VIDEO_MODE,(HL)
  1331.                 JP NZ,COLORCURS6
  1332.                 BIT B_ADR_PUNKT,(IX+_NUM_PKT)
  1333.                 JR Z,COLCURS3
  1334.                 LD L,(IX+_TEK_PKT_L)
  1335.                 LD H,(IX+_TEK_PKT_H)
  1336.                 LD A,(HL)
  1337. COLCURS3        LD H,(IX+_X_COORD)
  1338.                 LD L,(IX+_Y_COORD)
  1339.                 ADD A,L
  1340.                 LD L,A
  1341.                 INC L
  1342.                 CALL ADRDIS
  1343.                 EX DE,HL
  1344.                 LD (COL_CURSOR),HL      ; положили адрес для восстановления цвета
  1345.                 LD DE,COLBUF
  1346.                 LD B,(IX+_H_SIZE)
  1347. ;               BIT 2,(IY+55)           ; файлов больше высоты окна?
  1348. ;               JR Z,COLCURS2
  1349. ;               DEC B                   ; цветная полоска на 1 короче
  1350. COLCURS2        LD C,(IX+_COLOR_CUR)
  1351. .L1             LD A,(HL)
  1352.                 LD (DE),A
  1353.                 LD (HL),C
  1354.                 INC L
  1355.                 INC E
  1356.                 DJNZ .L1
  1357.                 RET
  1358.  
  1359. ; H-X, L-Y
  1360. ADRDIS          LD C,A
  1361.                 LD A,L
  1362.                 AND 0x18
  1363.                 OR 0x40
  1364.                 EX AF,AF'
  1365.                 LD A,L
  1366.                 AND 7
  1367.                 RRCA
  1368.                 RRCA
  1369.                 RRCA
  1370.                 ADD A,H
  1371.                 LD L,A
  1372.                 EX AF,AF'
  1373.                 LD H,A
  1374.                 LD E,L
  1375. ADRATR          LD A,H
  1376.                 RRCA
  1377.                 RRCA
  1378.                 RRCA
  1379.                 AND 3
  1380.                 OR 0x58
  1381.                 LD D,A
  1382.                 LD A,C
  1383.                 RET
  1384.  
  1385. INC_H           INC H
  1386.                 LD A,H
  1387.                 AND 7
  1388.                 RET NZ
  1389.                 LD A,L
  1390.                 ADD A,0x20
  1391.                 LD L,A
  1392.                 RET C
  1393. UMEHL1          LD A,H
  1394.                 SUB 8
  1395.                 LD H,A
  1396.                 RET    
  1397.  
  1398. ; сдвиг окна вверх
  1399. SCRUP           LD HL,SYSFLAGS
  1400.                 BIT SYSFLAGS.B_VIDEO_MODE,(HL)
  1401.                 JP NZ,TSCRUP
  1402. ; сдвиг окна вверх (ZX)
  1403.                 PUSH IY
  1404.                 PUSH IX
  1405.                 EXX
  1406.                 LD A,(SCROLL_MODE)
  1407.                 LD E,A
  1408.                 EXX
  1409.                 LD L,(IX+_Y_COORD)
  1410.                 INC L
  1411.                 CALL USTAN
  1412. ; сдвиг пикселей вверх
  1413. SCRUP1          LD A,(IX+0x10)
  1414.                 ADD A,C
  1415.                 LD L,A
  1416.                 LD H,(IX+0x11)
  1417.                 LD A,(IX+0)
  1418.                 ADD A,C
  1419.                 LD E,A
  1420.                 LD D,(IX+1)
  1421.                 PUSH BC
  1422.                 CALL LDIST
  1423.                 POP BC
  1424.                 EXX
  1425.                 LD A,E
  1426.                 EXX
  1427.                 AND 1;A
  1428.                 JR Z,SCRUP2
  1429.                 LD A,(IX+0x11)
  1430.                 LD H,A
  1431.                 AND 7
  1432.                 CP 7
  1433.                 JR NZ,SCRUP2
  1434. ; сдвиг вверх цветовой строки после переноса 7 линий знакоряда
  1435.                 LD A,H
  1436.                 RRCA
  1437.                 RRCA
  1438.                 RRCA
  1439.                 AND 3
  1440.                 OR 0x58
  1441.                 LD H,A
  1442.                 LD L,(IX+0x10)
  1443.                 LD A,(IX+1)
  1444.                 RRCA
  1445.                 RRCA
  1446.                 RRCA
  1447.                 AND 3
  1448.                 OR 0x58
  1449.                 LD D,A
  1450.                 LD E,(IX+0)
  1451.                 PUSH BC
  1452.                 CALL LDIST
  1453.                 POP BC
  1454. SCRUP2          INC IX
  1455.                 INC IX
  1456.                 DJNZ SCRUP1
  1457. SCRUP3          POP IX
  1458.                 POP IY
  1459.                 RET
  1460.  
  1461. ; сдвиг окна вверх (TXT)
  1462. TSCRUP          PUSH IY
  1463.                 PUSH IX
  1464.         EVOPORT WIN_P3,VMODE7_0
  1465.                 LD A,(IX+_V_SIZE)
  1466.                 SUB 3
  1467.                 LD B,A                          ; сколько строк в окне скроллировать
  1468.                 LD C,(IX+_H_SIZE)               ; ширина окна
  1469.                 LD D,(IX+_X_COORD)              ; X координата левого верхнего угла для скроллера
  1470.                 LD E,(IX+_Y_COORD)
  1471.                 INC E                           ; Y координата левого верхнего угла для скроллера
  1472.                 LD A,E
  1473.                 ADD A,A
  1474.                 ADD A,A
  1475.                 EXX
  1476.                 LD C,A
  1477.                 LD B,0
  1478.                 LD IX,TBUFTSC
  1479.                 ADD IX,BC                       ; IX=список адресов начал строк для скроллера
  1480.                 EXX
  1481.                 LD A,C
  1482.                 AND 0xFE
  1483.                 NEG
  1484.                 LD H,A                          ; ширина для левый символов
  1485.                 LD L,A                          ; ширина для правых символов
  1486.                 BIT 0,C
  1487.                 JR Z,TSCRUP1                    ; если ширина четная, ничего не делаем
  1488.                 DEC L
  1489.                 DEC L
  1490.                 BIT 0,D
  1491.                 JR NZ,TSCRUP1
  1492.                 LD A,H
  1493.                 LD H,L
  1494.                 LD L,A
  1495. TSCRUP1         LD A,D
  1496.                 SRL A
  1497.                 LD D,A
  1498.                 ADC A,0
  1499.                 LD E,A
  1500. TSCRUP2         LD A,H
  1501.                 EXX
  1502.                 LD IY,LDI_END
  1503.                 LD E,A
  1504.                 LD D,0xFF
  1505.                 ADD IY,DE
  1506.                 EXX
  1507.                 LD A,E
  1508.                 EXX
  1509.                 LD E,A
  1510.                 ADD A,(IX+4)
  1511.                 LD L,A
  1512.                 LD H,(IX+5)
  1513.                 LD A,E
  1514.                 ADD A,(IX+0)
  1515.                 LD E,A
  1516.                 LD D,(IX+1)
  1517.                 CALL LDIST                      ; перенос монохромнойй строки
  1518.                 EXX
  1519.                 LD A,E
  1520.                 EXX
  1521.                 LD E,A
  1522.                 ADD A,(IX+4+100)
  1523.                 LD L,A
  1524.                 LD H,(IX+5+100)
  1525.                 LD A,E
  1526.                 ADD A,(IX+0+100)
  1527.                 LD E,A
  1528.                 LD D,(IX+1+100)
  1529.                 CALL LDIST                      ; перенос цветной строки
  1530.                 EXX
  1531.                 LD A,L
  1532.                 EXX
  1533.                 LD IY,LDI_END
  1534.                 LD E,A
  1535.                 LD D,0xFF
  1536.                 ADD IY,DE
  1537.                 EXX
  1538.                 LD A,D
  1539.                 EXX
  1540.                 LD E,A
  1541.                 ADD A,(IX+6)
  1542.                 LD L,A
  1543.                 LD H,(IX+7)
  1544.                 LD A,E
  1545.                 ADD A,(IX+2)
  1546.                 LD E,A
  1547.                 LD D,(IX+3)
  1548.                 CALL LDIST                      ; перенос монохромной строки
  1549.                 EXX
  1550.                 LD A,D
  1551.                 EXX
  1552.                 LD E,A
  1553.                 ADD A,(IX+6+100)
  1554.                 LD L,A
  1555.                 LD H,(IX+7+100)
  1556.                 LD A,E
  1557.                 ADD A,(IX+2+100)
  1558.                 LD E,A
  1559.                 LD D,(IX+3+100)
  1560.                 CALL LDIST                      ; перенос строки цвета
  1561.         REPT 4
  1562.                 INC IX
  1563.         ENDM
  1564.                 EXX
  1565.                 DJNZ TSCRUP2
  1566.                 POP IX
  1567.                 POP IY
  1568.                 RET
  1569.  
  1570. ;0 2 4 6 8
  1571. ; 1 3 5 7 9
  1572. ; =====         3 нечет + 2 чет
  1573. ;=====          2 нечет + 3 чет
  1574. ; ====          2 нечет + 2 чет
  1575. ;====           2 нечет + 2 чет
  1576. ;0 2 4 6 8
  1577. ; 1 3 5 7 9
  1578.  
  1579. ;C200    C201    C202    C203    C204
  1580. ;    D200    D201    D202    D203    D204
  1581. ;----------------------------------------
  1582. ;C240    C241    C242    C243    C244
  1583. ;    D240    D241    D242    D243    D244
  1584.  
  1585. ; сдвиг окна вниз
  1586. TSCRDN          DI
  1587.                 PUSH IX
  1588.                 PUSH IY
  1589.         EVOPORT WIN_P3,VMODE7_0
  1590.                 LD A,(IX+_V_SIZE)
  1591.                 SUB 3
  1592.                 LD B,A                          ; сколько строк в окне скроллировать
  1593.                 LD C,(IX+_H_SIZE)               ; ширина окна
  1594.                 LD D,(IX+_X_COORD)              ; X координата левого верхнего угла для скроллера
  1595.                 LD A,(IX+_Y_COORD)
  1596.                 ADD A,(IX+_V_SIZE)
  1597.                 SUB 2
  1598.                 LD E,A                          ; Y координата левого верхнего угла для скроллера
  1599.                 ADD A,A
  1600.                 ADD A,A
  1601.                 EXX
  1602.                 LD C,A
  1603.                 LD B,0
  1604.                 LD IX,TBUFTSC
  1605.                 ADD IX,BC                       ; IX=список адресов начал строк для скроллера
  1606.                 EXX
  1607.                 LD A,C
  1608.                 AND 0xFE
  1609.                 NEG
  1610.                 LD H,A                          ; ширина для левый символов
  1611.                 LD L,A                          ; ширина для правых символов
  1612.                 BIT 0,C
  1613.                 JR Z,TSCRDN1
  1614.                 DEC L
  1615.                 DEC L
  1616.                 BIT 0,D
  1617.                 JR NZ,TSCRDN1
  1618.                 LD A,H
  1619.                 LD H,L
  1620.                 LD L,A
  1621. TSCRDN1         LD A,D
  1622.                 SRL A
  1623.                 LD D,A
  1624.                 ADC A,0
  1625.                 LD E,A
  1626. TSCRDN2
  1627.         REPT 4
  1628.                 DEC IX
  1629.         ENDM
  1630.                 LD A,H
  1631.                 EXX
  1632.                 LD IY,LDI_END
  1633.                 LD E,A
  1634.                 LD D,0xFF
  1635.                 ADD IY,DE
  1636.                 EXX
  1637.                 LD A,E
  1638.                 EXX
  1639.                 LD E,A
  1640.                 ADD A,(IX+0)
  1641.                 LD L,A
  1642.                 LD H,(IX+1)
  1643.                 LD A,E
  1644.                 ADD A,(IX+4)
  1645.                 LD E,A
  1646.                 LD D,(IX+5)
  1647.                 CALL LDIST                      ; перенос мохоромной строки
  1648.                 EXX
  1649.                 LD A,E
  1650.                 EXX
  1651.                 LD E,A
  1652.                 ADD A,(IX+0+100)
  1653.                 LD L,A
  1654.                 LD H,(IX+1+100)
  1655.                 LD A,E
  1656.                 ADD A,(IX+4+100)
  1657.                 LD E,A
  1658.                 LD D,(IX+5+100)
  1659.                 CALL LDIST                      ; перенос цветной строки
  1660.                 EXX
  1661.                 LD A,L
  1662.                 EXX
  1663.                 LD IY,LDI_END
  1664.                 LD E,A
  1665.                 LD D,0xFF
  1666.                 ADD IY,DE
  1667.                 EXX
  1668.                 LD A,D
  1669.                 EXX
  1670.                 LD E,A
  1671.                 ADD A,(IX+2)
  1672.                 LD L,A
  1673.                 LD H,(IX+3)
  1674.                 LD A,E
  1675.                 ADD A,(IX+6)
  1676.                 LD E,A
  1677.                 LD D,(IX+7)
  1678.                 CALL LDIST                      ; перенос монохромной строки
  1679.                 EXX
  1680.                 LD A,D
  1681.                 EXX
  1682.                 LD E,A
  1683.                 ADD A,(IX+2+100)
  1684.                 LD L,A
  1685.                 LD H,(IX+3+100)
  1686.                 LD A,E
  1687.                 ADD A,(IX+6+100)
  1688.                 LD E,A
  1689.                 LD D,(IX+7+100)
  1690.                 CALL LDIST                      ; перенос цветной строки
  1691.                 EXX
  1692.                 DJNZ TSCRDN2
  1693.                 POP IY
  1694.                 POP IX
  1695.                 RET
  1696.  
  1697. SCRDN           LD HL,SYSFLAGS
  1698.                 BIT SYSFLAGS.B_VIDEO_MODE,(HL)
  1699.                 JP NZ,TSCRDN
  1700. ; скролл окна вверх (ZX)
  1701.                 PUSH IX
  1702.                 PUSH IY
  1703.                 EXX
  1704.                 LD A,(SCROLL_MODE)
  1705.                 LD E,A
  1706.                 EXX
  1707.                 LD A,(IX+_V_SIZE)
  1708.                 ADD A,(IX+_Y_COORD)
  1709.                 SUB 2
  1710.                 LD L,A
  1711.                 CALL USTAN
  1712.                 DEC IX
  1713.                 DEC IX
  1714. SCRDN1          LD A,(IX+0)
  1715.                 ADD A,C
  1716.                 LD L,A
  1717.                 LD H,(IX+1)
  1718.                 LD A,(IX+0x10)
  1719.                 ADD A,C
  1720.                 LD E,A
  1721.                 LD D,(IX+0x11)
  1722.                 PUSH BC
  1723.                 CALL LDIST
  1724.                 POP BC
  1725.                 EXX
  1726.                 LD A,E
  1727.                 EXX
  1728.                 AND 1;A
  1729.                 JR Z,SCRDN2
  1730.                 LD A,(IX+1)
  1731.                 LD H,A
  1732.                 AND 7
  1733.                 CP 7
  1734.                 JR NZ,SCRDN2
  1735.                 LD A,H
  1736.                 RRCA
  1737.                 RRCA
  1738.                 RRCA
  1739.                 AND 3
  1740.                 OR 0x58
  1741.                 LD H,A
  1742.                 LD L,(IX+0)
  1743.                 LD A,(IX+0x11)
  1744.                 RRCA
  1745.                 RRCA
  1746.                 RRCA
  1747.                 AND 3
  1748.                 OR 0x58
  1749.                 LD D,A
  1750.                 LD E,(IX+0x10)
  1751.                 PUSH BC
  1752.                 CALL LDIST
  1753.                 POP BC
  1754. SCRDN2          DEC IX
  1755.                 DEC IX
  1756.                 DJNZ SCRDN1
  1757.                 POP IY
  1758.                 POP IX
  1759.                 RET
  1760.  
  1761. ; установки для скроллера окна
  1762. USTAN           LD A,(IX+_H_SIZE)
  1763.                 ADD A,A
  1764.                 LD E,A
  1765.                 LD A,L
  1766.                 LD D,0
  1767.                 LD HL,LDI_END
  1768.                 AND A
  1769.                 SBC HL,DE
  1770.                 PUSH HL
  1771.                 POP IY
  1772.                 LD C,(IX+_X_COORD)
  1773.                 LD L,A
  1774.                 LD A,(IX+_V_SIZE)
  1775.                 SUB 3
  1776.                 ADD A,A
  1777.                 ADD A,A
  1778.                 ADD A,A
  1779.                 LD B,A
  1780.                 LD H,0
  1781.                 ADD HL,HL
  1782.                 ADD HL,HL
  1783.                 ADD HL,HL
  1784.                 LD IX,BUFTSC
  1785.                 EX DE,HL
  1786.                 ADD IX,DE
  1787.                 ADD IX,DE
  1788.                 RET
  1789.  
  1790. LDIST           JP (IY)
  1791.         REPT 80
  1792.                 LDI
  1793.         ENDM
  1794. LDI_END         RET
  1795.  
  1796. SYM00           DB %11111111
  1797.                 DB %10000000
  1798.                 DB %10000000
  1799.                 DB %10000000
  1800.                 DB %10000000
  1801.                 DB %10000000
  1802.                 DB %10000000
  1803.                 DB %10000000
  1804.  
  1805. SYM01           DB %11111111
  1806.                 DB %00000000
  1807.                 DB %00000000
  1808.                 DB %00000000
  1809.                 DB %00000000
  1810.                 DB %00000000
  1811.                 DB %00000000
  1812.                 DB %00000000
  1813.  
  1814. SYM02           DB %11111111
  1815.                 DB %00000001
  1816.                 DB %00000001
  1817.                 DB %00000001
  1818.                 DB %00000001
  1819.                 DB %00000001
  1820.                 DB %00000001
  1821.                 DB %00000001
  1822.  
  1823. SYM03           DB %10000000
  1824.                 DB %10000000
  1825.                 DB %10000000
  1826.                 DB %10000000
  1827.                 DB %10000000
  1828.                 DB %10000000
  1829.                 DB %10000000
  1830.                 DB %10000000
  1831.  
  1832. SYM04           DB %00000001
  1833.                 DB %00000001
  1834.                 DB %00000001
  1835.                 DB %00000001
  1836.                 DB %00000001
  1837.                 DB %00000001
  1838.                 DB %00000001
  1839.                 DB %00000001
  1840.  
  1841. SYM05           DB %10000000
  1842.                 DB %10000000
  1843.                 DB %10000000
  1844.                 DB %10000000
  1845.                 DB %10000000
  1846.                 DB %10000000
  1847.                 DB %10000000
  1848.                 DB %11111111
  1849.  
  1850. SYM06           DB %00000000
  1851.                 DB %00000000
  1852.                 DB %00000000
  1853.                 DB %00000000
  1854.                 DB %00000000
  1855.                 DB %00000000
  1856.                 DB %00000000
  1857.                 DB %11111111
  1858.  
  1859. SYM07           DB %00000001
  1860.                 DB %00000001
  1861.                 DB %00000001
  1862.                 DB %00000001
  1863.                 DB %00000001
  1864.                 DB %00000001
  1865.                 DB %00000001
  1866.                 DB %11111111
  1867. END_MAGICSYM
  1868.  
  1869. ;ICO_MOUSE0     DB %00111111,%00000000;3F,00
  1870. ;               DB %00011111,%01000000;1F,40
  1871. ;               DB %00001111,%01100000;0F,60
  1872. ;               DB %00000111,%01010000;07,50
  1873. ;               DB %00000011,%01001000;03,48
  1874. ;               DB %00000001,%01001100;01,4C
  1875. ;               DB %00000001,%01110000;01,70
  1876. ;               DB %00000111,%00000000;07,00
  1877.  
  1878. ;ICO_MOUSE1     DB %00111111,%00000000;3F,00
  1879. ;               DB %00011111,%01000000;1F,40
  1880. ;               DB %00001111,%01100000;0F,60
  1881. ;               DB %00000111,%01110000;07,70
  1882. ;               DB %00000011,%01111000;03,78
  1883. ;               DB %00000001,%01111100;01,7C
  1884. ;               DB %00000001,%01110000;01,70
  1885. ;               DB %00000111,%00000000;07,00
  1886.