Subversion Repositories pentevo

Rev

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

  1.  
  2. ;LAST UPDATE: 04.07.2014 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 4,(HL)
  70.                 JR WINW0
  71.  
  72. ;ВНЕШНИЙ ВЫЗОВ ДЛЯ РИСОВАНИЯ ОКНА НА ZX ЭКРАНЕ
  73. WINW            LD HL,FLAGS
  74.                 RES 4,(HL)
  75.                 LD IX,(RREG_IXL)
  76.                 LD A,(R_77)
  77.                 AND 7
  78. WINW0           CP 3
  79.                 JP Z,WINW_ZX
  80.                 CP 7
  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 8
  252.                 JR NZ,TNOSET_MAIN
  253.                 PCALL MAIN_MEM13,P_RST8
  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.                 AND 8
  523.                 RRCA
  524.                 RRCA
  525.                 RRCA
  526.                 RRCA
  527.                 LD D,A
  528.                 LD BC,WIN_P6
  529.                 LD A,(PAGE4READ)
  530.                 OUT (C),A
  531.                 LD A,(IX+2)
  532.                 ADD A,A
  533.                 ADD A,A
  534.                 ADD A,A
  535.                 LD E,A
  536.                 EXX
  537.                 LD C,(IX+3)
  538.                 LD L,(IX+1)
  539.                 LD H,0
  540.                 ADD HL,HL
  541.                 ADD HL,HL
  542.                 ADD HL,HL
  543.                 ADD HL,HL
  544.                 EX DE,HL
  545.                 LD IY,BUFTSC
  546.                 ADD IY,DE
  547. WINW3           LD A,(IX+0)
  548.                 ADD A,(IY+0)
  549.                 LD E,A
  550.  
  551.                 LD A,(IY+1)
  552.                 EXX
  553.                 ADD A,D
  554.                 EXX
  555.                 LD D,A
  556.  
  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.  
  567.                 EXX
  568.                 ADD A,D
  569.                 EXX
  570.                
  571.                 LD H,A
  572.                 LD L,E
  573.                 LD A,(IX+4)
  574. WINW5           LD (HL),A
  575.                 INC L
  576.                 DJNZ WINW5
  577. WINW4           LD B,C
  578.                 XOR A
  579. WINW6           LD (DE),A
  580.                 INC E
  581.                 DJNZ WINW6
  582.                 INC IY
  583.                 INC IY
  584.                 EXX
  585.                 DEC E
  586.                 EXX
  587.                 JR NZ,WINW3
  588.                 BIT 7,(IX+6)
  589.                 JR Z,NIZ_RAMKA          ;ОКНО БЕЗ НИЖНЕГО ЗАГОЛОВКА
  590. ;РИСУЕМ НИЖНЮЮ ЦВЕТНУЮ ПОЛОСКУ
  591.                 LD DE,0XFFF0
  592.                 ADD IY,DE
  593.                 LD A,(IX+0)
  594.                 ADD A,(IY+0)
  595.                 LD E,A
  596.                 LD A,(IY+1)
  597.                 RRCA
  598.                 RRCA
  599.                 RRCA
  600.                 AND 3
  601.                 ADD A,0X58
  602.  
  603.                 EXX
  604.                 ADD A,D
  605.                 EXX
  606.  
  607.                 LD D,A
  608.                 LD B,C
  609.                 LD L,(IX+4)
  610.                 LD A,L
  611.                 AND 7
  612.                 RLCA
  613.                 RLCA
  614.                 RLCA
  615.                 LD H,A
  616.                 LD A,L
  617.                 RRCA
  618.                 RRCA
  619.                 RRCA
  620.                 AND 7
  621.                 OR H
  622. WINWN1          LD (DE),A
  623.                 INC E
  624.                 DJNZ WINWN1
  625.                 LD DE,0X0E
  626.                 ADD IY,DE
  627.                 JR CENTR_RAMK
  628.  
  629. NIZ_RAMKA       BIT 6,(IX+6)
  630.                 JR NZ,CENTR_RAMK                ;ОКНО БЕЗ РАМКИ
  631. ;РИСУЕМ НИЖНЮЮ РАМКУ
  632.                 DEC IY
  633.                 DEC IY
  634.                 LD L,(IX+0)
  635.                 LD A,(IY+0)
  636.                 ADD A,L
  637.                 LD E,A
  638.                 LD H,A
  639.  
  640.                 LD A,(IY+1)
  641.                 EXX
  642.                 ADD A,D
  643.                 EXX
  644.                 LD D,A
  645.  
  646.                 LD B,C
  647.                 LD A,0XFF
  648. NR1             LD (DE),A
  649.                 INC E
  650.                 DJNZ NR1
  651.                 DEC E
  652.                 DEC D
  653.                 LD L,H
  654.                 LD H,D
  655.                 LD A,0X80
  656.                 LD B,7
  657. NR2             LD (HL),A
  658.                 RLCA
  659.                 LD (DE),A
  660.                 RRCA
  661.                 DEC H
  662.                 DEC D
  663.                 DJNZ NR2
  664. CENTR_RAMK      BIT 6,(IX+6)
  665.                 JR NZ,WERH_COLOR                ;ОКНО БЕЗ РАМКИ
  666. ;РИСУЕМ БОКОВЫЕ РАМКИ
  667.                 EXX
  668.                 LD A,(IX+2)
  669.                 SUB 2
  670.                 LD E,A
  671.                 EXX
  672. NR4             LD DE,0XFFF0
  673.                 ADD IY,DE
  674.                 LD L,(IX+0)
  675.                 LD A,(IY+0)
  676.                 ADD A,L
  677.                 LD E,A
  678.  
  679.                 LD A,(IY+1)
  680.                 EXX
  681.                 ADD A,D
  682.                 EXX
  683.                 LD D,A
  684.                 LD A,E
  685.  
  686.                 LD H,D
  687.                 ADD A,(IX+3)
  688.                 DEC A
  689.                 LD L,A
  690.                 LD A,0X80
  691.                 LD B,8
  692. NR3             LD (DE),A
  693.                 RLCA
  694.                 LD (HL),A
  695.                 RRCA
  696.                 DEC H
  697.                 DEC D
  698.                 DJNZ NR3
  699.                 EXX
  700.                 DEC E
  701.                 EXX
  702.                 JR NZ,NR4
  703. WERH_COLOR      BIT 5,(IX+6)
  704.                 JR Z,WERH_RAMK          ;БЕЗ ВЕРХНЕГО ЗАГОЛОВКА
  705. ;РИСУЕМ ВЕРХНЮЮ ЦВЕТНУЮ ПОЛОСУ
  706.                 LD L,(IX+1)
  707.                 LD H,0
  708.                 ADD HL,HL
  709.                 ADD HL,HL
  710.                 ADD HL,HL
  711.                 ADD HL,HL
  712.                 EX DE,HL
  713.                 LD IY,BUFTSC
  714.                 ADD IY,DE
  715.                 LD A,(IX+0)
  716.                 ADD A,(IY+0)
  717.                 LD E,A
  718.                 LD A,(IY+1)
  719.                 RRCA
  720.                 RRCA
  721.                 RRCA
  722.                 AND 3
  723.                 ADD A,0X58
  724.  
  725.                 EXX
  726.                 ADD A,D
  727.                 EXX
  728.  
  729.                 LD D,A
  730.                 LD B,C
  731.                 LD L,(IX+4)
  732.                 LD A,L
  733.                 AND 7
  734.                 RLCA
  735.                 RLCA
  736.                 RLCA
  737.                 LD H,A
  738.                 LD A,L
  739.                 RRCA
  740.                 RRCA
  741.                 RRCA
  742.                 AND 7
  743.                 OR H
  744. WINWW1          LD (DE),A
  745.                 INC E
  746.                 DJNZ WINWW1
  747.                 JP RADUGA
  748.  
  749. WERH_RAMK       BIT 6,(IX+6)
  750.                 JR NZ,RADUGA            ;ОКНО БЕЗ РАМКИ
  751. ;РИСУЕМ ВЕРХНЮЮ РАМКУ
  752. WR4             LD DE,0XFFF0
  753.                 ADD IY,DE
  754.                 LD L,(IX+0)
  755.                 LD A,(IY+0)
  756.                 ADD A,L
  757.                 LD E,A
  758.  
  759.                 LD A,(IY+1)
  760.                 EXX
  761.                 ADD A,D
  762.                 EXX
  763.                 LD D,A
  764.                 LD A,E
  765.  
  766.                 LD H,D
  767.                 ADD A,(IX+3)
  768.                 DEC A
  769.                 LD L,A
  770.                 LD A,0X80
  771.                 LD B,7
  772. WR3             LD (DE),A
  773.                 RLCA
  774.                 LD (HL),A
  775.                 RRCA
  776.                 DEC H
  777.                 DEC D
  778.                 DJNZ WR3
  779.                 LD A,L
  780.                 SUB E
  781.                 LD B,A
  782.                 INC B
  783.                 LD A,0XFF
  784. WR5             LD (DE),A
  785.                 INC E
  786.                 DJNZ WR5
  787. RADUGA          BIT 5,(IX+6)
  788.                 JR Z,RASCH
  789.                 LD IY,BUFTSC
  790.                 LD L,(IX+1)
  791.                 LD H,0
  792.                 ADD HL,HL
  793.                 ADD HL,HL
  794.                 ADD HL,HL
  795.                 ADD HL,HL
  796.                 EX DE,HL
  797.                 ADD IY,DE
  798.                 LD L,(IY+0)
  799.                 LD A,(IY+1)
  800.                 LD D,A
  801.                 RRCA
  802.                 RRCA
  803.                 RRCA
  804.                 AND 3
  805.                 ADD A,0X58
  806.  
  807.                 EXX
  808.                 ADD A,D
  809.                 EXX
  810.  
  811.                 LD H,A
  812.                 LD A,(IX+0)
  813.                 ADD A,(IX+3)
  814.                 ADD A,L
  815.                 LD L,A
  816.                 LD E,A
  817.                 LD A,(IX+4)
  818.                 AND 0X47
  819.                 LD C,A
  820.                 AND 0X40
  821.                 LD B,A
  822.                 DEC L
  823.                 LD A,C
  824.                 ADD A,5*8
  825.                 LD (HL),A       ;5*8+7
  826.                 DEC L
  827.                 LD A,4*8+5
  828.                 OR B
  829.                 LD (HL),A       ;4*8+5
  830.                 DEC L
  831.                 LD A,6*8+4
  832.                 OR B
  833.                 LD (HL),A       ;6*8+4
  834.                 DEC L
  835.                 LD A,2*8+6
  836.                 OR B
  837.                 LD (HL),A       ;2*8+6
  838.                 DEC L
  839.                 LD A,C
  840.                 AND 7
  841.                 RLCA
  842.                 RLCA
  843.                 RLCA
  844.                 OR B
  845.                 ADD A,2
  846.                 LD (HL),A       ;7*8+2
  847.                 EX DE,HL
  848.                 DEC L
  849.                 LD B,8
  850.                 XOR A
  851.                 LD C,L
  852. RADUGA1         SCF
  853.                 RLA
  854.                 LD (HL),A
  855.                 DEC L
  856.                 LD (HL),A
  857.                 DEC L
  858.                 LD (HL),A
  859.                 DEC L
  860.                 LD (HL),A
  861.                 DEC L
  862.                 LD (HL),A
  863.                 LD L,C
  864.                 INC H
  865.                 DJNZ RADUGA1
  866. RASCH           LD A,(IX+0)
  867.                 LD L,(IX+1)
  868.                 ADD A,A
  869.                 ADD A,A
  870.                 ADD A,A
  871.                 LD H,A
  872.                 INC H
  873.                 EXX
  874.                 XOR A
  875.                 OUT (C),A
  876.                 EXX
  877.                 LD A,H
  878.                 LD (XNEW),A
  879.                 LD (ADRSTR_Y),HL
  880.                 EXX
  881.                 LD A,(PAGE4READ)
  882.                 OUT (C),A
  883.                 EXX
  884.                 LD L,(IX+0X0C)
  885.                 LD H,(IX+0X0D)
  886.                 EXX
  887.                 XOR A
  888.                 OUT (C),A
  889.                 EXX
  890.                 BIT 4,(IX+6)
  891.                 JP Z,IPRINT_MESSAGE
  892.                 RET
  893.  
  894. CLS             LD HL,0
  895.                 LD D,H
  896.                 LD E,L
  897.                 ADD HL,SP
  898.                 LD B,0X60
  899.                 LD SP,0X5800
  900. CLS1            REPT 0X20
  901.                 PUSH DE
  902.                 ENDM
  903.                 DJNZ CLS1
  904.                 LD SP,HL
  905. CLSSCR          LD HL,0
  906.                 LD D,A
  907.                 LD E,A
  908.                 ADD HL,SP
  909.                 LD SP,0X5B00
  910.                 LD B,12
  911. CLS2            REPT 0X20
  912.                 PUSH DE
  913.                 ENDM
  914.                 DJNZ CLS2
  915.                 LD SP,HL
  916.                 RRCA
  917.                 RRCA
  918.                 RRCA
  919.                 AND 7
  920.                 OUT (0XFE),A
  921.                 RET
  922.  
  923. STOP_PRINTMSG   LD BC,WIN_P6
  924.                 XOR A
  925.                 OUT (C),A
  926.                 RET
  927.  
  928. ;ПЕЧАТЬ ТЕКСТОВОЙ СТРОКИ С УПРАВЛЮЯЩИМИ КОДАМИ (ВНЕШНИЙ ВЫЗОВ)
  929. PRINT_MESSAGE   LD HL,(RREG_L)
  930. ;ПЕЧАТЬ ТЕКСТОВОЙ СТРОКИ С УПРАВЛЮЯЩИМИ КОДАМИ (ВНУТРЕННИЙ ВЫЗОВ)
  931. IPRINT_MESSAGE  LD A,(R_77)
  932.                 AND 7
  933.                 CP 7
  934.                 JP Z,ITPRINT_MESSAGE
  935.                 CP 3
  936.                 RET NZ
  937.                 LD BC,RD_7FFD
  938.                 IN A,(C)
  939.                 AND 8
  940.                 LD BC,BUFTSC
  941.                 JR Z,IPM1
  942.                 LD BC,BUFTSC1
  943. IPM1            LD (TEKBUFTSC),BC
  944.                 LD BC,WIN_P6
  945. ;ПЕЧАТЬ ТЕКСТОВОЙ СТОРОКИ С УПРАВЛЯЮЩИМИ КОДАМИ (ВНУТРЕННИЙ ВЫЗОВ)
  946. NEXT            LD A,(PAGE4READ)
  947.                 OUT (C),A
  948.                 LD A,(HL)
  949.                 INC HL
  950.                 AND A
  951.                 JR Z,STOP_PRINTMSG
  952. PRINT           CP 0X20
  953.                 JP NC,PRINTA
  954. COD03           CP 3
  955.                 JR NZ,COD9
  956.                 LD D,0                          ;ЦЕНТРОВКА СТРОКИ В ОКНЕ
  957.                 LD A,H
  958.                 EX AF,AF'
  959.                 LD E,L
  960. CEN2            LD A,(HL)
  961.                 CP 0X20
  962.                 JR C,CEN3
  963.                 LD A,6
  964.                 ADD A,D
  965.                 LD D,A
  966.                 INC HL
  967.                 JR CEN2
  968.  
  969. CEN3            XOR A
  970.                 OUT (C),A
  971.                 LD A,(IX+3)
  972.                 ADD A,A
  973.                 ADD A,A
  974.                 ADD A,A
  975.                 SUB D
  976.                 SRL A
  977.                 DEC A
  978.                 LD H,A
  979.                 LD A,(XNEW)
  980.                 ADD A,H
  981.                 LD (ADRSTR_X),A
  982.                 EX AF,AF'
  983.                 LD H,A
  984.                 LD L,E
  985.                 JP NEXT
  986.  
  987. COD9            CP 9
  988.                 JR NZ,COD0D
  989.                 LD D,(HL)                       ;ТАБУЛЯЦИЯ НА N ПОЗИЦИЙ
  990.                 INC HL
  991.                 LD A,D
  992.                 ADD A,A
  993.                 ADD A,D
  994.                 ADD A,A
  995.                 LD D,A
  996.                 XOR A
  997.                 OUT (C),A
  998.                 LD A,(ADRSTR_X)
  999.                 ADD A,D
  1000.                 LD (ADRSTR_X),A
  1001.                 JR NEXT
  1002.  
  1003. COD0D           CP 0X0D
  1004.                 JR NZ,COD16
  1005.                 XOR A
  1006.                 OUT (C),A
  1007.                 LD A,(XNEW)                     ;ПЕРЕВОД СТРОКИ
  1008.                 LD (ADRSTR_X),A
  1009.                 LD A,(ADRSTR_Y)
  1010.                 INC A
  1011.                 LD (ADRSTR_Y),A
  1012.                 JP NEXT
  1013.  
  1014. COD16           CP 0X16
  1015.                 JR NZ,COD17
  1016.                 LD E,(HL)                       ;ПЕЧАТЬ В УКАЗАННОЙ ПОЗИЦИИ
  1017.                 INC HL
  1018.                 LD D,(HL)
  1019.                 INC HL
  1020.                 XOR A
  1021.                 OUT (C),A
  1022.                 LD (ADRSTR_Y),DE
  1023.                 JP NEXT
  1024.  
  1025. COD17           CP 0X17
  1026.                 JR NZ,COD1
  1027.                 LD D,(HL)
  1028.                 INC HL
  1029.                 XOR A
  1030.                 OUT (C),A
  1031.                 LD A,D
  1032.                 LD (COLOR4SYM),A
  1033.                 JP NEXT
  1034.  
  1035. ;КООРДИНАТА ПЕЧАТИ В ИСХОДНУЮ ПОЗИЦИЮ ОКНА
  1036. COD1            CP 1
  1037.                 JP NZ,NEXT
  1038.                 XOR A
  1039.                 OUT (C),A
  1040.                 LD A,(IX+0)
  1041.                 LD E,(IX+1)
  1042.                 ADD A,A
  1043.                 ADD A,A
  1044.                 ADD A,A
  1045.                 INC A
  1046.                 LD D,A
  1047.                 LD (ADRSTR_Y),DE
  1048.                 JP NEXT
  1049.  
  1050. PRINT_A         LD A,(RREG_A)
  1051. IPRINT_A        EX AF,AF'
  1052.                 LD A,(R_77)
  1053.                 AND 7
  1054.                 CP 7
  1055.                 JP Z,ITPRINT_A1
  1056.                 CP 3
  1057.                 RET NZ
  1058.                 EX AF,AF'
  1059.                 LD BC,WIN_P6
  1060.                 LD HL,STOP_PRINTA
  1061. ;ПЕЧАТЬ СИМВОЛА В "A"
  1062. PRINTA          EX AF,AF'
  1063.                 XOR A
  1064.                 OUT (C),A
  1065.                 PUSH HL
  1066.                 LD H,A
  1067.                 EX AF,AF'
  1068.                 LD L,A
  1069.                 ADD HL,HL
  1070.                 ADD HL,HL
  1071.                 ADD HL,HL
  1072.                 LD DE,CHARS
  1073.                 ADD HL,DE
  1074.                 LD A,(COLOR4SYM)
  1075.                 LD D,A
  1076.                 EXX
  1077.                 LD HL,(ADRSTR_Y)                ;H=X L=Y
  1078.                 LD B,0
  1079.                 LD D,B
  1080.                 LD A,H
  1081.                 AND 7
  1082.                 LD C,A
  1083.                 LD IY,SDVIG
  1084.                 ADD IY,BC
  1085.                 LD A,H
  1086.                 AND 0XF8
  1087.                 RRCA
  1088.                 RRCA
  1089.                 RRCA
  1090.                 EX AF,AF'
  1091.                 LD A,6
  1092.                 ADD A,H
  1093.                 LD H,A
  1094.                 LD (ADRSTR_Y),HL
  1095.                 LD A,L
  1096.                 RLCA
  1097.                 RLCA
  1098.                 RLCA
  1099.                 LD E,A
  1100.                 LD HL,(TEKBUFTSC)
  1101.                 ADD HL,DE
  1102.                 ADD HL,DE
  1103.                 EX AF,AF'
  1104.                 ADD A,(HL)
  1105.                 INC HL
  1106.                 LD E,A
  1107.                 LD D,(HL)
  1108.                 LD HL,BUFMSK
  1109.                 ADD HL,BC
  1110.                 ADD HL,BC
  1111.                 LD B,(HL)
  1112.                 INC HL
  1113.                 LD C,(HL)
  1114.                 EXX
  1115.                 LD A,(PAGE4READ)
  1116.                 OUT (C),A
  1117.                 EXX
  1118.                 LD A,8
  1119. SLEDU           EX AF,AF'
  1120.                 EXX
  1121.                 LD A,(HL)
  1122.                 INC HL
  1123.                 EXX
  1124.                 LD L,A
  1125.                 LD H,0
  1126.                 JP (IY)
  1127.  
  1128. SDVIG           REPT 8
  1129.                 ADD HL,HL
  1130.                 ENDM
  1131.                 LD A,(DE)
  1132.                 AND B
  1133.                 OR H
  1134.                 LD (DE),A
  1135.                 INC E
  1136.                 LD A,(DE)
  1137.                 AND C
  1138.                 OR L
  1139.                 LD (DE),A
  1140.                 DEC E
  1141.                 INC D
  1142.                 EX AF,AF'
  1143.                 DEC A
  1144.                 JP NZ,SLEDU
  1145.                 EX DE,HL
  1146.                 EXX
  1147.                 LD A,D
  1148.                 EXX
  1149.                 LD E,A
  1150.                 INC A
  1151.                 JR Z,PRINTA1
  1152.                 DEC H
  1153.                 LD A,H
  1154.                 RRCA
  1155.                 RRCA
  1156.                 RRCA
  1157.                 AND 3
  1158.                 OR 0X58
  1159.                 LD H,A
  1160.                 LD (HL),E
  1161. PRINTA1         EXX
  1162.                 XOR A
  1163.                 OUT (C),A
  1164.                 POP HL
  1165.                 JP NEXT
  1166.  
  1167. STOP_PRINTA     DB 0
  1168.  
  1169. BUFMSK          DB %00000011,%11111111
  1170.                 DB %10000001,%11111111
  1171.                 DB %11000000,%11111111
  1172.                 DB %11100000,%01111111
  1173.                 DB %11110000,%00111111
  1174.                 DB %11111000,%00011111
  1175.                 DB %11111100,%00001111
  1176.                 DB %11111110,%00000111
  1177.  
  1178. ;РИСОВАЛКА ЦВЕТНОЙ ПОЛОСКИ В МЕНЮ
  1179. COLOR_CURSOR    LD HL,FLAGS
  1180.                 BIT 7,(HL)
  1181.                 JP Z,COLORCURS4
  1182.                 EVOPORT WIN_P3,0XF7
  1183.                 LD B,(IX+3)
  1184.                 LD DE,(COL_CURSOR)
  1185.                 CALL TRESTORE_CLINE
  1186. COLORCURS6      LD A,(IX+7)
  1187.                 BIT 7,A
  1188.                 JR Z,COLORCURS5
  1189.                 LD L,(IX+8)
  1190.                 LD H,(IX+9)
  1191.                 LD A,(HL)
  1192. COLORCURS5      LD D,(IX+0)
  1193.                 ADD A,(IX+1)
  1194.                 LD E,A
  1195.                 INC E
  1196.                 LD (COL_CURSOR),DE
  1197.                 EVOPORT WIN_P3,0XF7
  1198.                 LD B,(IX+3)
  1199.                 CALL TSTORE_CLINE
  1200.                 LD A,(IX+5)
  1201.                 AND 0XF8
  1202.                 LD C,A
  1203.                 PUSH HL
  1204.                 PUSH DE
  1205.                 PUSH BC
  1206.                 LD (COL_CURSOR),DE
  1207.                 CALL TDISP_ATTR
  1208.                 LD A,D
  1209.                 XOR 0X10
  1210.                 LD H,A
  1211.                 LD A,D
  1212.                 AND 0X10
  1213.                 REPT 4
  1214.                 RRCA
  1215.                 ENDM
  1216.                 ADD A,E
  1217.                 LD L,A
  1218. TCOLORLINE2     EX DE,HL
  1219.                 LD A,(HL)
  1220.                 AND 0XC7
  1221.                 OR C
  1222.                 LD (HL),A
  1223.                 INC HL
  1224.                 DJNZ TCOLORLINE2
  1225.                 POP BC
  1226.                 POP DE
  1227.                 POP HL
  1228.                 RET
  1229.  
  1230. ;РИСОВАНИЕ ЦВЕТНОЙ ПОЛОСЫ
  1231. ;D-X E-Y B-ДЛИНА C-ЦВЕТ
  1232. TCOLOR_LINE     PUSH HL
  1233.                 PUSH DE
  1234.                 PUSH BC
  1235.                 LD (COL_CURSOR),DE
  1236.                 CALL TDISP_ATTR
  1237.                 LD A,D
  1238.                 XOR 0X10
  1239.                 LD H,A
  1240.                 LD A,D
  1241.                 AND 0X10
  1242.                 REPT 4
  1243.                 RRCA
  1244.                 ENDM
  1245.                 ADD A,E
  1246.                 LD L,A
  1247. TCOLORLINE1     EX DE,HL
  1248.                 LD (HL),C
  1249.                 INC HL
  1250.                 DJNZ TCOLORLINE1
  1251.                 POP BC
  1252.                 POP DE
  1253.                 POP HL
  1254.                 RET
  1255. ; 00   01   02   03   04   05   06
  1256. ;F1C0 E1C1 F1C1 E1C2 F1C2 E1C3 F1C3
  1257.  
  1258. ;СОХРАНЕНИЕ ЧАСТИ ЭКРАНА ДЛЯ ВЫВОДА ЦВЕТНОЙ ЛИНИИ
  1259. ;D-X E-Y B-ДЛИНА
  1260. TSTORE_CLINE    PUSH HL
  1261.                 PUSH DE
  1262.                 PUSH BC
  1263.                 CALL TDISP_ATTR
  1264.                 LD A,D
  1265.                 XOR 0X10
  1266.                 LD H,A
  1267.                 LD A,D
  1268.                 AND 0X10
  1269.                 REPT 4
  1270.                 RRCA
  1271.                 ENDM
  1272.                 ADD A,E
  1273.                 LD L,A
  1274. TSTORECLINE1    EXX
  1275.                 LD HL,COLBUF
  1276.                 EXX
  1277. TSTORECLINE2    EX DE,HL
  1278.                 LD A,(HL)
  1279.                 INC HL
  1280.                 EXX
  1281.                 LD (HL),A
  1282.                 INC HL
  1283.                 EXX
  1284.                 DJNZ TSTORECLINE2
  1285.                 POP BC
  1286.                 POP DE
  1287.                 POP HL
  1288.                 RET
  1289.  
  1290. ;ВОССТАНОВЛЕНИЕ ЧАСТИ ЭКРАНА ПОД ЦВЕТНОЙ ЛИНИЕЙ
  1291. ;D-X E-Y B-ДЛИНА
  1292. TRESTORE_CLINE  PUSH HL
  1293.                 PUSH DE
  1294.                 PUSH BC
  1295.                 LD B,(IX+3)
  1296.                 LD DE,(COL_CURSOR)
  1297.                 CALL TDISP_ATTR
  1298.                 LD A,D
  1299.                 XOR 0X10
  1300.                 LD H,A
  1301.                 LD A,D
  1302.                 AND 0X10
  1303.                 REPT 4
  1304.                 RRCA
  1305.                 ENDM
  1306.                 ADD A,E
  1307.                 LD L,A
  1308. TRESTCLINE1     EXX
  1309.                 LD HL,COLBUF
  1310.                 EXX
  1311. TRESTCLINE2     EX DE,HL
  1312.                 EXX
  1313.                 LD A,(HL)
  1314.                 INC HL
  1315.                 EXX
  1316.                 LD (HL),A
  1317.                 INC HL
  1318.                 DJNZ TRESTCLINE2
  1319.                 POP BC
  1320.                 POP DE
  1321.                 POP HL
  1322.                 RET
  1323.  
  1324. RESTORE_CLINE   LD HL,FLAGS
  1325.                 BIT 7,(HL)
  1326.                 JR NZ,TREST_CLINE
  1327.                 LD DE,(COL_CURSOR)
  1328.                 LD HL,COLBUF
  1329.                 LD C,(IX+3)
  1330.                 LD B,0
  1331.                 LDIR
  1332.                 RET
  1333.  
  1334. TREST_CLINE     EVOPORT WIN_P3,0XF7
  1335.                 LD B,(IX+3)
  1336.                 LD DE,(COL_CURSOR)
  1337.                 JP TRESTORE_CLINE
  1338.  
  1339. COLORCURS4      LD DE,(COL_CURSOR)
  1340.                 LD HL,COLBUF
  1341.                 LD C,(IX+3)
  1342. ;               BIT 2,(IY+55)           ;ФАЙЛОВ БОЛЬШЕ ВЫСОТЫ ОКНА?
  1343. ;               JR Z,COLCURS1
  1344. ;               DEC C                   ;ЦВЕТНАЯ ПОЛОСКА НА 1 КОРОЧЕ
  1345. COLCURS1        LD B,0
  1346.                 LDIR
  1347. SET_ADR_ATR     LD HL,FLAGS
  1348.                 BIT 7,(HL)
  1349.                 JP NZ,COLORCURS6
  1350.                 LD A,(IX+7)
  1351.                 BIT 7,A
  1352.                 JR Z,COLCURS3
  1353.                 LD L,(IX+8)
  1354.                 LD H,(IX+9)
  1355.                 LD A,(HL)
  1356. COLCURS3        ;LD B,A
  1357.                 LD H,(IX+0)
  1358.                 LD L,(IX+1)
  1359.                 ADD A,L
  1360.                 LD L,A
  1361.                 INC L
  1362.                 CALL ADRDIS
  1363.                 EX DE,HL
  1364.                 LD (COL_CURSOR),HL      ;ПОЛОЖИЛИ АДРЕС ДЛЯ ВОССТАНОВЛЕНИЯ ЦВЕТА
  1365.                 LD DE,COLBUF
  1366.                 LD B,(IX+3)
  1367. ;               BIT 2,(IY+55)           ;ФАЙЛОВ БОЛЬШЕ ВЫСОТЫ ОКНА?
  1368. ;               JR Z,COLCURS2
  1369. ;               DEC B                   ;ЦВЕТНАЯ ПОЛОСКА НА 1 КОРОЧЕ
  1370. COLCURS2        LD C,(IX+5)
  1371.                 LD A,(HL)
  1372.                 LD (DE),A
  1373.                 LD (HL),C
  1374.                 INC L
  1375.                 INC E
  1376.                 DJNZ $-5
  1377.                 RET
  1378.  
  1379. ;H-X, L-Y
  1380. ADRDIS          LD C,A
  1381.                 LD A,L
  1382.                 AND 0X18
  1383.                 OR 0X40
  1384.                 EX AF,AF'
  1385.                 LD A,L
  1386.                 AND 7
  1387.                 RRCA
  1388.                 RRCA
  1389.                 RRCA
  1390.                 ADD A,H
  1391.                 LD L,A
  1392.                 EX AF,AF'
  1393.                 LD H,A
  1394.                 LD E,L
  1395. ADRATR          LD A,H
  1396.                 RRCA
  1397.                 RRCA
  1398.                 RRCA
  1399.                 AND 3
  1400.                 OR 0X58
  1401.                 LD D,A
  1402.                 LD A,C
  1403.                 RET
  1404.  
  1405. INC_H           INC H
  1406.                 LD A,H
  1407.                 AND 7
  1408.                 RET NZ
  1409.                 LD A,L
  1410.                 ADD A,0X20
  1411.                 LD L,A
  1412.                 RET C
  1413. UMEHL1          LD A,H
  1414.                 SUB 8
  1415.                 LD H,A
  1416.                 RET    
  1417.  
  1418. ;СДВИГ ОКНА ВВЕРХ
  1419. SCRUP           LD HL,FLAGS
  1420.                 BIT 7,(HL)
  1421.                 JP NZ,TSCRUP
  1422. ;СДВИГ ОКНА ВВЕРХ (ZX)
  1423.                 PUSH IY
  1424.                 PUSH IX
  1425.                 EXX
  1426.                 LD A,(SCROLL_MODE)
  1427.                 LD E,A
  1428.                 EXX
  1429.                 LD L,(IX+1)
  1430.                 INC L
  1431.                 CALL USTAN
  1432. ;СДВИГ ПИКСЕЛЕЙ ВВЕРХ
  1433. SCRUP1          LD A,(IX+0X10)
  1434.                 ADD A,C
  1435.                 LD L,A
  1436.                 LD H,(IX+0X11)
  1437.                 LD A,(IX+0)
  1438.                 ADD A,C
  1439.                 LD E,A
  1440.                 LD D,(IX+1)
  1441.                 PUSH BC
  1442.                 CALL LDIST
  1443.                 POP BC
  1444.                 EXX
  1445.                 LD A,E
  1446.                 EXX
  1447.                 AND 1;A
  1448.                 JR Z,SCRUP2
  1449.                 LD A,(IX+0X11)
  1450.                 LD H,A
  1451.                 AND 7
  1452.                 CP 7
  1453.                 JR NZ,SCRUP2
  1454. ;СДВИГ ВВЕРХ ЦВЕТОВОЙ СТРОКИ ПОСЛЕ ПЕРЕНОСА 7 ЛИНИЙ ЗНАКОРЯДА
  1455.                 LD A,H
  1456.                 RRCA
  1457.                 RRCA
  1458.                 RRCA
  1459.                 AND 3
  1460.                 OR 0X58
  1461.                 LD H,A
  1462.                 LD L,(IX+0X10)
  1463.                 LD A,(IX+1)
  1464.                 RRCA
  1465.                 RRCA
  1466.                 RRCA
  1467.                 AND 3
  1468.                 OR 0X58
  1469.                 LD D,A
  1470.                 LD E,(IX+0)
  1471.                 PUSH BC
  1472.                 CALL LDIST
  1473.                 POP BC
  1474. SCRUP2          INC IX
  1475.                 INC IX
  1476.                 DJNZ SCRUP1
  1477. SCRUP3          POP IX
  1478.                 POP IY
  1479.                 RET
  1480.  
  1481. ;СДВИГ ОКНА ВВЕРХ (TXT)
  1482. TSCRUP          PUSH IY
  1483.                 PUSH IX
  1484.                 EVOPORT WIN_P3,0XF7
  1485.                 LD A,(IX+2)
  1486.                 SUB 3
  1487.                 LD B,A                          ;СКОЛЬКО СТРОК В ОКНЕ СКРОЛЛИРОВАТЬ
  1488.                 LD C,(IX+3)                     ;ШИРИНА ОКНА
  1489.                 LD D,(IX+0)                     ;X КООРДИНАТА ЛЕВОГО ВЕРХНЕГО УГЛА ДЛЯ СКРОЛЛЕРА
  1490.                 LD E,(IX+1)
  1491.                 INC E                           ;Y КООРДИНАТА ЛЕВОГО ВЕРХНЕГО УГЛА ДЛЯ СКРОЛЛЕРА
  1492.                 LD A,E
  1493.                 ADD A,A
  1494.                 ADD A,A
  1495.                 EXX
  1496.                 LD C,A
  1497.                 LD B,0
  1498.                 LD IX,TBUFTSC
  1499.                 ADD IX,BC                       ;IX=СПИСОК АДРЕСОВ НАЧАЛ СТРОК ДЛЯ СКРОЛЛЕРА
  1500.                 EXX
  1501.                 LD A,C
  1502.                 AND 0XFE
  1503.                 NEG
  1504.                 LD H,A                          ;ШИРИНА ДЛЯ ЛЕВЫЙ СИМВОЛОВ
  1505.                 LD L,A                          ;ШИРИНА ДЛЯ ПРАВЫХ СИМВОЛОВ
  1506.                 BIT 0,C
  1507.                 JR Z,TSCRUP1                    ;ЕСЛИ ШИРИНА ЧЕТНАЯ, НИЧЕГО НЕ ДЕЛАЕМ
  1508.                 DEC L
  1509.                 DEC L
  1510.                 BIT 0,D
  1511.                 JR NZ,TSCRUP1
  1512.                 LD A,H
  1513.                 LD H,L
  1514.                 LD L,A
  1515. TSCRUP1         LD A,D
  1516.                 SRL A
  1517.                 LD D,A
  1518.                 ADC A,0
  1519.                 LD E,A
  1520. TSCRUP2         LD A,H
  1521.                 EXX
  1522.                 LD IY,LDI_END
  1523.                 LD E,A
  1524.                 LD D,0XFF
  1525.                 ADD IY,DE
  1526.                 EXX
  1527.                 LD A,E
  1528.                 EXX
  1529.                 LD E,A
  1530.                 ADD A,(IX+4)
  1531.                 LD L,A
  1532.                 LD H,(IX+5)
  1533.                 LD A,E
  1534.                 ADD A,(IX+0)
  1535.                 LD E,A
  1536.                 LD D,(IX+1)
  1537.                 CALL LDIST                      ;ПЕРЕНОС МОНОХРОМНОЙЙ СТРОКИ
  1538.                 EXX
  1539.                 LD A,E
  1540.                 EXX
  1541.                 LD E,A
  1542.                 ADD A,(IX+4+100)
  1543.                 LD L,A
  1544.                 LD H,(IX+5+100)
  1545.                 LD A,E
  1546.                 ADD A,(IX+0+100)
  1547.                 LD E,A
  1548.                 LD D,(IX+1+100)
  1549.                 CALL LDIST                      ;ПЕРЕНОС ЦВЕТНОЙ СТРОКИ
  1550.                 EXX
  1551.                 LD A,L
  1552.                 EXX
  1553.                 LD IY,LDI_END
  1554.                 LD E,A
  1555.                 LD D,0XFF
  1556.                 ADD IY,DE
  1557.                 EXX
  1558.                 LD A,D
  1559.                 EXX
  1560.                 LD E,A
  1561.                 ADD A,(IX+6)
  1562.                 LD L,A
  1563.                 LD H,(IX+7)
  1564.                 LD A,E
  1565.                 ADD A,(IX+2)
  1566.                 LD E,A
  1567.                 LD D,(IX+3)
  1568.                 CALL LDIST                      ;ПЕРЕНОС МОНОХРОМНОЙ СТРОКИ
  1569.                 EXX
  1570.                 LD A,D
  1571.                 EXX
  1572.                 LD E,A
  1573.                 ADD A,(IX+6+100)
  1574.                 LD L,A
  1575.                 LD H,(IX+7+100)
  1576.                 LD A,E
  1577.                 ADD A,(IX+2+100)
  1578.                 LD E,A
  1579.                 LD D,(IX+3+100)
  1580.                 CALL LDIST                      ;ПЕРЕНОС СТРОКИ ЦВЕТА
  1581.                 REPT 4
  1582.                 INC IX
  1583.                 ENDM
  1584.                 EXX
  1585.                 DJNZ TSCRUP2
  1586.                 POP IX
  1587.                 POP IY
  1588.                 RET
  1589.  
  1590. ;0 2 4 6 8
  1591. ; 1 3 5 7 9
  1592. ; =====         3 НЕЧЕТ + 2 ЧЕТ
  1593. ;=====          2 НЕЧЕТ + 3 ЧЕТ
  1594. ; ====          2 НЕЧЕТ + 2 ЧЕТ
  1595. ;====           2 НЕЧЕТ + 2 ЧЕТ
  1596. ;0 2 4 6 8
  1597. ; 1 3 5 7 9
  1598.  
  1599. ;C200    C201    C202    C203    C204
  1600. ;    D200    D201    D202    D203    D204
  1601. ;----------------------------------------
  1602. ;C240    C241    C242    C243    C244
  1603. ;    D240    D241    D242    D243    D244
  1604.  
  1605. ;СДВИГ ОКНА ВНИЗ
  1606. TSCRDN          DI
  1607.                 PUSH IX
  1608.                 PUSH IY
  1609.                 EVOPORT WIN_P3,0XF7
  1610.                 LD A,(IX+2)
  1611.                 SUB 3
  1612.                 LD B,A                          ;СКОЛЬКО СТРОК В ОКНЕ СКРОЛЛИРОВАТЬ
  1613.                 LD C,(IX+3)                     ;ШИРИНА ОКНА
  1614.                 LD D,(IX+0)                     ;X КООРДИНАТА ЛЕВОГО ВЕРХНЕГО УГЛА ДЛЯ СКРОЛЛЕРА
  1615.                 LD A,(IX+1)
  1616.                 ADD A,(IX+2)
  1617.                 SUB 2
  1618.                 LD E,A                          ;Y КООРДИНАТА ЛЕВОГО ВЕРХНЕГО УГЛА ДЛЯ СКРОЛЛЕРА
  1619.                 ADD A,A
  1620.                 ADD A,A
  1621.                 EXX
  1622.                 LD C,A
  1623.                 LD B,0
  1624.                 LD IX,TBUFTSC
  1625.                 ADD IX,BC                       ;IX=СПИСОК АДРЕСОВ НАЧАЛ СТРОК ДЛЯ СКРОЛЛЕРА
  1626.                 EXX
  1627.                 LD A,C
  1628.                 AND 0XFE
  1629.                 NEG
  1630.                 LD H,A                          ;ШИРИНА ДЛЯ ЛЕВЫЙ СИМВОЛОВ
  1631.                 LD L,A                          ;ШИРИНА ДЛЯ ПРАВЫХ СИМВОЛОВ
  1632.                 BIT 0,C
  1633.                 JR Z,TSCRDN1
  1634.                 DEC L
  1635.                 DEC L
  1636.                 BIT 0,D
  1637.                 JR NZ,TSCRDN1
  1638.                 LD A,H
  1639.                 LD H,L
  1640.                 LD L,A
  1641. TSCRDN1         LD A,D
  1642.                 SRL A
  1643.                 LD D,A
  1644.                 ADC A,0
  1645.                 LD E,A
  1646. TSCRDN2         REPT 4
  1647.                 DEC IX
  1648.                 ENDM
  1649.                 LD A,H
  1650.                 EXX
  1651.                 LD IY,LDI_END
  1652.                 LD E,A
  1653.                 LD D,0XFF
  1654.                 ADD IY,DE
  1655.                 EXX
  1656.                 LD A,E
  1657.                 EXX
  1658.                 LD E,A
  1659.                 ADD A,(IX+0)
  1660.                 LD L,A
  1661.                 LD H,(IX+1)
  1662.                 LD A,E
  1663.                 ADD A,(IX+4)
  1664.                 LD E,A
  1665.                 LD D,(IX+5)
  1666.                 CALL LDIST                      ;ПЕРЕНОС МОХОРОМНОЙ СТРОКИ
  1667.                 EXX
  1668.                 LD A,E
  1669.                 EXX
  1670.                 LD E,A
  1671.                 ADD A,(IX+0+100)
  1672.                 LD L,A
  1673.                 LD H,(IX+1+100)
  1674.                 LD A,E
  1675.                 ADD A,(IX+4+100)
  1676.                 LD E,A
  1677.                 LD D,(IX+5+100)
  1678.                 CALL LDIST                      ;ПЕРЕНОС ЦВЕТНОЙ СТРОКИ
  1679.                 EXX
  1680.                 LD A,L
  1681.                 EXX
  1682.                 LD IY,LDI_END
  1683.                 LD E,A
  1684.                 LD D,0XFF
  1685.                 ADD IY,DE
  1686.                 EXX
  1687.                 LD A,D
  1688.                 EXX
  1689.                 LD E,A
  1690.                 ADD A,(IX+2)
  1691.                 LD L,A
  1692.                 LD H,(IX+3)
  1693.                 LD A,E
  1694.                 ADD A,(IX+6)
  1695.                 LD E,A
  1696.                 LD D,(IX+7)
  1697.                 CALL LDIST                      ;ПЕРЕНОС МОНОХРОМНОЙ СТРОКИ
  1698.                 EXX
  1699.                 LD A,D
  1700.                 EXX
  1701.                 LD E,A
  1702.                 ADD A,(IX+2+100)
  1703.                 LD L,A
  1704.                 LD H,(IX+3+100)
  1705.                 LD A,E
  1706.                 ADD A,(IX+6+100)
  1707.                 LD E,A
  1708.                 LD D,(IX+7+100)
  1709.                 CALL LDIST                      ;ПЕРЕНОС ЦВЕТНОЙ СТРОКИ
  1710.                 EXX
  1711.                 DJNZ TSCRDN2
  1712.                 POP IY
  1713.                 POP IX
  1714.                 RET
  1715.  
  1716. SCRDN           LD HL,FLAGS
  1717.                 BIT 7,(HL)
  1718.                 JP NZ,TSCRDN
  1719. ;СКРОЛЛ ОКНА ВВЕРХ (ZX)
  1720.                 PUSH IX
  1721.                 PUSH IY
  1722.                 EXX
  1723.                 LD A,(SCROLL_MODE)
  1724.                 LD E,A
  1725.                 EXX
  1726.                 LD A,(IX+2)
  1727.                 ADD A,(IX+1)
  1728.                 SUB 2
  1729.                 LD L,A
  1730.                 CALL USTAN
  1731.                 DEC IX
  1732.                 DEC IX
  1733. SCRDN1          LD A,(IX+0)
  1734.                 ADD A,C
  1735.                 LD L,A
  1736.                 LD H,(IX+1)
  1737.                 LD A,(IX+0X10)
  1738.                 ADD A,C
  1739.                 LD E,A
  1740.                 LD D,(IX+0X11)
  1741.                 PUSH BC
  1742.                 CALL LDIST
  1743.                 POP BC
  1744.                 EXX
  1745.                 LD A,E
  1746.                 EXX
  1747.                 AND 1;A
  1748.                 JR Z,SCRDN2
  1749.                 LD A,(IX+1)
  1750.                 LD H,A
  1751.                 AND 7
  1752.                 CP 7
  1753.                 JR NZ,SCRDN2
  1754.                 LD A,H
  1755.                 RRCA
  1756.                 RRCA
  1757.                 RRCA
  1758.                 AND 3
  1759.                 OR 0X58
  1760.                 LD H,A
  1761.                 LD L,(IX+0)
  1762.                 LD A,(IX+0X11)
  1763.                 RRCA
  1764.                 RRCA
  1765.                 RRCA
  1766.                 AND 3
  1767.                 OR 0X58
  1768.                 LD D,A
  1769.                 LD E,(IX+0X10)
  1770.                 PUSH BC
  1771.                 CALL LDIST
  1772.                 POP BC
  1773. SCRDN2          DEC IX
  1774.                 DEC IX
  1775.                 DJNZ SCRDN1
  1776.                 POP IY
  1777.                 POP IX
  1778.                 RET
  1779.  
  1780. ;УСТАНОВКИ ДЛЯ СКРОЛЛЕРА ОКНА
  1781. USTAN           LD A,(IX+3)
  1782.                 ADD A,A
  1783.                 LD E,A
  1784.                 LD A,L
  1785.                 LD D,0
  1786.                 LD HL,LDI_END
  1787.                 AND A
  1788.                 SBC HL,DE
  1789.                 PUSH HL
  1790.                 POP IY
  1791.                 LD C,(IX+0)
  1792.                 LD L,A
  1793.                 LD A,(IX+2)
  1794.                 SUB 3
  1795.                 ADD A,A
  1796.                 ADD A,A
  1797.                 ADD A,A
  1798.                 LD B,A
  1799.                 LD H,0
  1800.                 ADD HL,HL
  1801.                 ADD HL,HL
  1802.                 ADD HL,HL
  1803.                 LD IX,BUFTSC
  1804.                 EX DE,HL
  1805.                 ADD IX,DE
  1806.                 ADD IX,DE
  1807.                 RET
  1808.  
  1809. LDIST           DB 0XFD
  1810.                 JP (HL)
  1811.                 REPT 80
  1812.                 LDI
  1813.                 ENDM
  1814. LDI_END         RET
  1815.  
  1816. SYM00           DB %11111111
  1817.                 DB %10000000
  1818.                 DB %10000000
  1819.                 DB %10000000
  1820.                 DB %10000000
  1821.                 DB %10000000
  1822.                 DB %10000000
  1823.                 DB %10000000
  1824.  
  1825. SYM01           DB %11111111
  1826.                 DB %00000000
  1827.                 DB %00000000
  1828.                 DB %00000000
  1829.                 DB %00000000
  1830.                 DB %00000000
  1831.                 DB %00000000
  1832.                 DB %00000000
  1833.  
  1834. SYM02           DB %11111111
  1835.                 DB %00000001
  1836.                 DB %00000001
  1837.                 DB %00000001
  1838.                 DB %00000001
  1839.                 DB %00000001
  1840.                 DB %00000001
  1841.                 DB %00000001
  1842.  
  1843. SYM03           DB %10000000
  1844.                 DB %10000000
  1845.                 DB %10000000
  1846.                 DB %10000000
  1847.                 DB %10000000
  1848.                 DB %10000000
  1849.                 DB %10000000
  1850.                 DB %10000000
  1851.  
  1852. SYM04           DB %00000001
  1853.                 DB %00000001
  1854.                 DB %00000001
  1855.                 DB %00000001
  1856.                 DB %00000001
  1857.                 DB %00000001
  1858.                 DB %00000001
  1859.                 DB %00000001
  1860.  
  1861. SYM05           DB %10000000
  1862.                 DB %10000000
  1863.                 DB %10000000
  1864.                 DB %10000000
  1865.                 DB %10000000
  1866.                 DB %10000000
  1867.                 DB %10000000
  1868.                 DB %11111111
  1869.  
  1870. SYM06           DB %00000000
  1871.                 DB %00000000
  1872.                 DB %00000000
  1873.                 DB %00000000
  1874.                 DB %00000000
  1875.                 DB %00000000
  1876.                 DB %00000000
  1877.                 DB %11111111
  1878.  
  1879. SYM07           DB %00000001
  1880.                 DB %00000001
  1881.                 DB %00000001
  1882.                 DB %00000001
  1883.                 DB %00000001
  1884.                 DB %00000001
  1885.                 DB %00000001
  1886.                 DB %11111111
  1887. END_MAGICSYM
  1888.  
  1889. ;ICO_MOUSE0     DB %00111111,%00000000;3F,00
  1890. ;               DB %00011111,%01000000;1F,40
  1891. ;               DB %00001111,%01100000;0F,60
  1892. ;               DB %00000111,%01010000;07,50
  1893. ;               DB %00000011,%01001000;03,48
  1894. ;               DB %00000001,%01001100;01,4C
  1895. ;               DB %00000001,%01110000;01,70
  1896. ;               DB %00000111,%00000000;07,00
  1897.  
  1898. ;ICO_MOUSE1     DB %00111111,%00000000;3F,00
  1899. ;               DB %00011111,%01000000;1F,40
  1900. ;               DB %00001111,%01100000;0F,60
  1901. ;               DB %00000111,%01110000;07,70
  1902. ;               DB %00000011,%01111000;03,78
  1903. ;               DB %00000001,%01111100;01,7C
  1904. ;               DB %00000001,%01110000;01,70
  1905. ;               DB %00000111,%00000000;07,00
  1906.