Subversion Repositories pentevo

Rev

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

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