Subversion Repositories pentevo

Rev

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

  1.  
  2. ;LAST UPDATE: 24.06.2013 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_P2
  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_P2
  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_P2
  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_P2
  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 (CPU2+LSYM)
  408.                 LD D,A
  409.                 LD E,LOW (CPU2+LSYM)
  410.                 ADD HL,DE
  411.                 EX AF,AF'
  412.                 LD (HL),A
  413.                 LD A,C
  414.                 INC A
  415.                 JP Z,TRINTA0
  416.                 LD A,H
  417.                 XOR 0X30
  418.                 LD H,A
  419.                 LD A,D
  420.                 AND 0X10
  421.                 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_P2
  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_P2
  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_P2
  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_P2
  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.                 LD BC,WIN_P3
  1183.                 LD A,0XF7
  1184.                 OUT (C),A
  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.                 LD BC,WIN_P3
  1200.                 LD A,0XF7
  1201.                 OUT (C),A
  1202.                 LD B,(IX+3)
  1203.                 CALL TSTORE_CLINE
  1204.                 LD A,(IX+5)
  1205.                 AND 0XF8
  1206.                 LD C,A
  1207.                 PUSH HL
  1208.                 PUSH DE
  1209.                 PUSH BC
  1210.                 LD (COL_CURSOR),DE
  1211.                 CALL TDISP_ATTR
  1212.                 LD A,D
  1213.                 XOR 0X10
  1214.                 LD H,A
  1215.                 LD A,D
  1216.                 AND 0X10
  1217.                 REPT 4
  1218.                 RRCA
  1219.                 ENDM
  1220.                 ADD A,E
  1221.                 LD L,A
  1222. TCOLORLINE2     EX DE,HL
  1223.                 LD A,(HL)
  1224.                 AND 0XC7
  1225.                 OR C
  1226.                 LD (HL),A
  1227.                 INC HL
  1228.                 DJNZ TCOLORLINE2
  1229.                 POP BC
  1230.                 POP DE
  1231.                 POP HL
  1232.                 RET
  1233.  
  1234. ;РИСОВАНИЕ ЦВЕТНОЙ ПОЛОСЫ
  1235. ;D-X E-Y B-ДЛИНА C-ЦВЕТ
  1236. TCOLOR_LINE     PUSH HL
  1237.                 PUSH DE
  1238.                 PUSH BC
  1239.                 LD (COL_CURSOR),DE
  1240.                 CALL TDISP_ATTR
  1241.                 LD A,D
  1242.                 XOR 0X10
  1243.                 LD H,A
  1244.                 LD A,D
  1245.                 AND 0X10
  1246.                 REPT 4
  1247.                 RRCA
  1248.                 ENDM
  1249.                 ADD A,E
  1250.                 LD L,A
  1251. TCOLORLINE1     EX DE,HL
  1252.                 LD (HL),C
  1253.                 INC HL
  1254.                 DJNZ TCOLORLINE1
  1255.                 POP BC
  1256.                 POP DE
  1257.                 POP HL
  1258.                 RET
  1259. ; 00   01   02   03   04   05   06
  1260. ;F1C0 E1C1 F1C1 E1C2 F1C2 E1C3 F1C3
  1261.  
  1262. ;СОХРАНЕНИЕ ЧАСТИ ЭКРАНА ДЛЯ ВЫВОДА ЦВЕТНОЙ ЛИНИИ
  1263. ;D-X E-Y B-ДЛИНА
  1264. TSTORE_CLINE    PUSH HL
  1265.                 PUSH DE
  1266.                 PUSH BC
  1267.                 CALL TDISP_ATTR
  1268.                 LD A,D
  1269.                 XOR 0X10
  1270.                 LD H,A
  1271.                 LD A,D
  1272.                 AND 0X10
  1273.                 REPT 4
  1274.                 RRCA
  1275.                 ENDM
  1276.                 ADD A,E
  1277.                 LD L,A
  1278. TSTORECLINE1    EXX
  1279.                 LD HL,COLBUF
  1280.                 EXX
  1281. TSTORECLINE2    EX DE,HL
  1282.                 LD A,(HL)
  1283.                 INC HL
  1284.                 EXX
  1285.                 LD (HL),A
  1286.                 INC HL
  1287.                 EXX
  1288.                 DJNZ TSTORECLINE2
  1289.                 POP BC
  1290.                 POP DE
  1291.                 POP HL
  1292.                 RET
  1293.  
  1294. ;ВОССТАНОВЛЕНИЕ ЧАСТИ ЭКРАНА ПОД ЦВЕТНОЙ ЛИНИЕЙ
  1295. ;D-X E-Y B-ДЛИНА
  1296. TRESTORE_CLINE  PUSH HL
  1297.                 PUSH DE
  1298.                 PUSH BC
  1299.                 LD B,(IX+3)
  1300.                 LD DE,(COL_CURSOR)
  1301.                 CALL TDISP_ATTR
  1302.                 LD A,D
  1303.                 XOR 0X10
  1304.                 LD H,A
  1305.                 LD A,D
  1306.                 AND 0X10
  1307.                 REPT 4
  1308.                 RRCA
  1309.                 ENDM
  1310.                 ADD A,E
  1311.                 LD L,A
  1312. TRESTCLINE1     EXX
  1313.                 LD HL,COLBUF
  1314.                 EXX
  1315. TRESTCLINE2     EX DE,HL
  1316.                 EXX
  1317.                 LD A,(HL)
  1318.                 INC HL
  1319.                 EXX
  1320.                 LD (HL),A
  1321.                 INC HL
  1322.                 DJNZ TRESTCLINE2
  1323.                 POP BC
  1324.                 POP DE
  1325.                 POP HL
  1326.                 RET
  1327.  
  1328. RESTORE_CLINE   LD HL,FLAGS
  1329.                 BIT 7,(HL)
  1330.                 JR NZ,TREST_CLINE
  1331.                 LD DE,(COL_CURSOR)
  1332.                 LD HL,COLBUF
  1333.                 LD C,(IX+3)
  1334.                 LD B,0
  1335.                 LDIR
  1336.                 RET
  1337.  
  1338. TREST_CLINE     LD BC,WIN_P3
  1339.                 LD A,0XF7
  1340.                 OUT (C),A
  1341.                 LD B,(IX+3)
  1342.                 LD DE,(COL_CURSOR)
  1343.                 JP TRESTORE_CLINE
  1344.  
  1345. COLORCURS4      LD DE,(COL_CURSOR)
  1346.                 LD HL,COLBUF
  1347.                 LD C,(IX+3)
  1348. ;               BIT 2,(IY+55)           ;ФАЙЛОВ БОЛЬШЕ ВЫСОТЫ ОКНА?
  1349. ;               JR Z,COLCURS1
  1350. ;               DEC C                   ;ЦВЕТНАЯ ПОЛОСКА НА 1 КОРОЧЕ
  1351. COLCURS1        LD B,0
  1352.                 LDIR
  1353. SET_ADR_ATR     LD HL,FLAGS
  1354.                 BIT 7,(HL)
  1355.                 JP NZ,COLORCURS6
  1356.                 LD A,(IX+7)
  1357.                 BIT 7,A
  1358.                 JR Z,COLCURS3
  1359.                 LD L,(IX+8)
  1360.                 LD H,(IX+9)
  1361.                 LD A,(HL)
  1362. COLCURS3        ;LD B,A
  1363.                 LD H,(IX+0)
  1364.                 LD L,(IX+1)
  1365.                 ADD A,L
  1366.                 LD L,A
  1367.                 INC L
  1368.                 CALL ADRDIS
  1369.                 EX DE,HL
  1370.                 LD (COL_CURSOR),HL      ;ПОЛОЖИЛИ АДРЕС ДЛЯ ВОССТАНОВЛЕНИЯ ЦВЕТА
  1371.                 LD DE,COLBUF
  1372.                 LD B,(IX+3)
  1373. ;               BIT 2,(IY+55)           ;ФАЙЛОВ БОЛЬШЕ ВЫСОТЫ ОКНА?
  1374. ;               JR Z,COLCURS2
  1375. ;               DEC B                   ;ЦВЕТНАЯ ПОЛОСКА НА 1 КОРОЧЕ
  1376. COLCURS2        LD C,(IX+5)
  1377.                 LD A,(HL)
  1378.                 LD (DE),A
  1379.                 LD (HL),C
  1380.                 INC L
  1381.                 INC E
  1382.                 DJNZ $-5
  1383.                 RET
  1384.  
  1385. ;H-X, L-Y
  1386. ADRDIS          LD C,A
  1387.                 LD A,L
  1388.                 AND 0X18
  1389.                 OR 0X40
  1390.                 EX AF,AF'
  1391.                 LD A,L
  1392.                 AND 7
  1393.                 RRCA
  1394.                 RRCA
  1395.                 RRCA
  1396.                 ADD A,H
  1397.                 LD L,A
  1398.                 EX AF,AF'
  1399.                 LD H,A
  1400.                 LD E,L
  1401. ADRATR          LD A,H
  1402.                 RRCA
  1403.                 RRCA
  1404.                 RRCA
  1405.                 AND 3
  1406.                 OR 0X58
  1407.                 LD D,A
  1408.                 LD A,C
  1409.                 RET
  1410.  
  1411. INC_H           INC H
  1412.                 LD A,H
  1413.                 AND 7
  1414.                 RET NZ
  1415.                 LD A,L
  1416.                 ADD A,0X20
  1417.                 LD L,A
  1418.                 RET C
  1419. UMEHL1          LD A,H
  1420.                 SUB 8
  1421.                 LD H,A
  1422.                 RET    
  1423.  
  1424. ;СДВИГ ОКНА ВВЕРХ
  1425. SCRUP           LD HL,FLAGS
  1426.                 BIT 7,(HL)
  1427.                 JP NZ,TSCRUP
  1428. ;СДВИГ ОКНА ВВЕРХ (ZX)
  1429.                 PUSH IY
  1430.                 PUSH IX
  1431.                 EXX
  1432.                 LD A,(SCROLL_MODE)
  1433.                 LD E,A
  1434.                 EXX
  1435.                 LD L,(IX+1)
  1436.                 INC L
  1437.                 CALL USTAN
  1438. ;СДВИГ ПИКСЕЛЕЙ ВВЕРХ
  1439. SCRUP1          LD A,(IX+0X10)
  1440.                 ADD A,C
  1441.                 LD L,A
  1442.                 LD H,(IX+0X11)
  1443.                 LD A,(IX+0)
  1444.                 ADD A,C
  1445.                 LD E,A
  1446.                 LD D,(IX+1)
  1447.                 PUSH BC
  1448.                 CALL LDIST
  1449.                 POP BC
  1450.                 EXX
  1451.                 LD A,E
  1452.                 EXX
  1453.                 AND A
  1454.                 JR Z,SCRUP2
  1455.                 LD A,(IX+0X11)
  1456.                 LD H,A
  1457.                 AND 7
  1458.                 CP 7
  1459.                 JR NZ,SCRUP2
  1460. ;СДВИГ ВВЕРХ ЦВЕТОВОЙ СТРОКИ ПОСЛЕ ПЕРЕНОСА 7 ЛИНИЙ ЗНАКОРЯДА
  1461.                 LD A,H
  1462.                 RRCA
  1463.                 RRCA
  1464.                 RRCA
  1465.                 AND 3
  1466.                 OR 0X58
  1467.                 LD H,A
  1468.                 LD L,(IX+0X10)
  1469.                 LD A,(IX+1)
  1470.                 RRCA
  1471.                 RRCA
  1472.                 RRCA
  1473.                 AND 3
  1474.                 OR 0X58
  1475.                 LD D,A
  1476.                 LD E,(IX+0)
  1477.                 PUSH BC
  1478.                 CALL LDIST
  1479.                 POP BC
  1480. SCRUP2          INC IX
  1481.                 INC IX
  1482.                 DJNZ SCRUP1
  1483. SCRUP3          POP IX
  1484.                 POP IY
  1485.                 RET
  1486.  
  1487. ;СДВИГ ОКНА ВВЕРХ (TXT)
  1488. TSCRUP          PUSH IY
  1489.                 PUSH IX
  1490.                 LD BC,WIN_P3
  1491.                 LD A,0XF7
  1492.                 OUT (C),A
  1493.                 LD A,(IX+2)
  1494.                 SUB 3
  1495.                 LD B,A                          ;СКОЛЬКО СТРОК В ОКНЕ СКРОЛЛИРОВАТЬ
  1496.                 LD C,(IX+3)                     ;ШИРИНА ОКНА
  1497.                 LD D,(IX+0)                     ;X КООРДИНАТА ЛЕВОГО ВЕРХНЕГО УГЛА ДЛЯ СКРОЛЛЕРА
  1498.                 LD E,(IX+1)
  1499.                 INC E                           ;Y КООРДИНАТА ЛЕВОГО ВЕРХНЕГО УГЛА ДЛЯ СКРОЛЛЕРА
  1500.                 LD A,E
  1501.                 ADD A,A
  1502.                 ADD A,A
  1503.                 EXX
  1504.                 LD C,A
  1505.                 LD B,0
  1506.                 LD IX,TBUFTSC
  1507.                 ADD IX,BC                       ;IX=СПИСОК АДРЕСОВ НАЧАЛ СТРОК ДЛЯ СКРОЛЛЕРА
  1508.                 EXX
  1509.                 LD A,C
  1510.                 AND 0XFE
  1511.                 NEG
  1512.                 LD H,A                          ;ШИРИНА ДЛЯ ЛЕВЫЙ СИМВОЛОВ
  1513.                 LD L,A                          ;ШИРИНА ДЛЯ ПРАВЫХ СИМВОЛОВ
  1514.                 BIT 0,C
  1515.                 JR Z,TSCRUP1                    ;ЕСЛИ ШИРИНА ЧЕТНАЯ, НИЧЕГО НЕ ДЕЛАЕМ
  1516.                 DEC L
  1517.                 DEC L
  1518.                 BIT 0,D
  1519.                 JR NZ,TSCRUP1
  1520.                 LD A,H
  1521.                 LD H,L
  1522.                 LD L,A
  1523. TSCRUP1         LD A,D
  1524.                 SRL A
  1525.                 LD D,A
  1526.                 ADC A,0
  1527.                 LD E,A
  1528. TSCRUP2         LD A,H
  1529.                 EXX
  1530.                 LD IY,LDI_END
  1531.                 LD E,A
  1532.                 LD D,0XFF
  1533.                 ADD IY,DE
  1534.                 EXX
  1535.                 LD A,E
  1536.                 EXX
  1537.                 LD E,A
  1538.                 ADD A,(IX+4)
  1539.                 LD L,A
  1540.                 LD H,(IX+5)
  1541.                 LD A,E
  1542.                 ADD A,(IX+0)
  1543.                 LD E,A
  1544.                 LD D,(IX+1)
  1545.                 CALL LDIST                      ;ПЕРЕНОС МОНОХРОМНОЙЙ СТРОКИ
  1546.                 EXX
  1547.                 LD A,E
  1548.                 EXX
  1549.                 LD E,A
  1550.                 ADD A,(IX+4+100)
  1551.                 LD L,A
  1552.                 LD H,(IX+5+100)
  1553.                 LD A,E
  1554.                 ADD A,(IX+0+100)
  1555.                 LD E,A
  1556.                 LD D,(IX+1+100)
  1557.                 CALL LDIST                      ;ПЕРЕНОС ЦВЕТНОЙ СТРОКИ
  1558.                 EXX
  1559.                 LD A,L
  1560.                 EXX
  1561.                 LD IY,LDI_END
  1562.                 LD E,A
  1563.                 LD D,0XFF
  1564.                 ADD IY,DE
  1565.                 EXX
  1566.                 LD A,D
  1567.                 EXX
  1568.                 LD E,A
  1569.                 ADD A,(IX+6)
  1570.                 LD L,A
  1571.                 LD H,(IX+7)
  1572.                 LD A,E
  1573.                 ADD A,(IX+2)
  1574.                 LD E,A
  1575.                 LD D,(IX+3)
  1576.                 CALL LDIST                      ;ПЕРЕНОС МОНОХРОМНОЙ СТРОКИ
  1577.                 EXX
  1578.                 LD A,D
  1579.                 EXX
  1580.                 LD E,A
  1581.                 ADD A,(IX+6+100)
  1582.                 LD L,A
  1583.                 LD H,(IX+7+100)
  1584.                 LD A,E
  1585.                 ADD A,(IX+2+100)
  1586.                 LD E,A
  1587.                 LD D,(IX+3+100)
  1588.                 CALL LDIST                      ;ПЕРЕНОС СТРОКИ ЦВЕТА
  1589.                 REPT 4
  1590.                 INC IX
  1591.                 ENDM
  1592.                 EXX
  1593.                 DJNZ TSCRUP2
  1594.                 POP IX
  1595.                 POP IY
  1596.                 RET
  1597.  
  1598. ;0 2 4 6 8
  1599. ; 1 3 5 7 9
  1600. ; =====         3 НЕЧЕТ + 2 ЧЕТ
  1601. ;=====          2 НЕЧЕТ + 3 ЧЕТ
  1602. ; ====          2 НЕЧЕТ + 2 ЧЕТ
  1603. ;====           2 НЕЧЕТ + 2 ЧЕТ
  1604. ;0 2 4 6 8
  1605. ; 1 3 5 7 9
  1606.  
  1607. ;C200    C201    C202    C203    C204
  1608. ;    D200    D201    D202    D203    D204
  1609. ;----------------------------------------
  1610. ;C240    C241    C242    C243    C244
  1611. ;    D240    D241    D242    D243    D244
  1612.  
  1613. ;СДВИГ ОКНА ВНИЗ
  1614. TSCRDN          DI
  1615.                 PUSH IX
  1616.                 PUSH IY
  1617.                 LD BC,WIN_P3
  1618.                 LD A,0XF7
  1619.                 OUT (C),A
  1620.                 LD A,(IX+2)
  1621.                 SUB 3
  1622.                 LD B,A                          ;СКОЛЬКО СТРОК В ОКНЕ СКРОЛЛИРОВАТЬ
  1623.                 LD C,(IX+3)                     ;ШИРИНА ОКНА
  1624.                 LD D,(IX+0)                     ;X КООРДИНАТА ЛЕВОГО ВЕРХНЕГО УГЛА ДЛЯ СКРОЛЛЕРА
  1625.                 LD A,(IX+1)
  1626.                 ADD A,(IX+2)
  1627.                 SUB 2
  1628.                 LD E,A                          ;Y КООРДИНАТА ЛЕВОГО ВЕРХНЕГО УГЛА ДЛЯ СКРОЛЛЕРА
  1629.                 ADD A,A
  1630.                 ADD A,A
  1631.                 EXX
  1632.                 LD C,A
  1633.                 LD B,0
  1634.                 LD IX,TBUFTSC
  1635.                 ADD IX,BC                       ;IX=СПИСОК АДРЕСОВ НАЧАЛ СТРОК ДЛЯ СКРОЛЛЕРА
  1636.                 EXX
  1637.                 LD A,C
  1638.                 AND 0XFE
  1639.                 NEG
  1640.                 LD H,A                          ;ШИРИНА ДЛЯ ЛЕВЫЙ СИМВОЛОВ
  1641.                 LD L,A                          ;ШИРИНА ДЛЯ ПРАВЫХ СИМВОЛОВ
  1642.                 BIT 0,C
  1643.                 JR Z,TSCRDN1
  1644.                 DEC L
  1645.                 DEC L
  1646.                 BIT 0,D
  1647.                 JR NZ,TSCRDN1
  1648.                 LD A,H
  1649.                 LD H,L
  1650.                 LD L,A
  1651. TSCRDN1         LD A,D
  1652.                 SRL A
  1653.                 LD D,A
  1654.                 ADC A,0
  1655.                 LD E,A
  1656. TSCRDN2         REPT 4
  1657.                 DEC IX
  1658.                 ENDM
  1659.                 LD A,H
  1660.                 EXX
  1661.                 LD IY,LDI_END
  1662.                 LD E,A
  1663.                 LD D,0XFF
  1664.                 ADD IY,DE
  1665.                 EXX
  1666.                 LD A,E
  1667.                 EXX
  1668.                 LD E,A
  1669.                 ADD A,(IX+0)
  1670.                 LD L,A
  1671.                 LD H,(IX+1)
  1672.                 LD A,E
  1673.                 ADD A,(IX+4)
  1674.                 LD E,A
  1675.                 LD D,(IX+5)
  1676.                 CALL LDIST                      ;ПЕРЕНОС МОХОРОМНОЙ СТРОКИ
  1677.                 EXX
  1678.                 LD A,E
  1679.                 EXX
  1680.                 LD E,A
  1681.                 ADD A,(IX+0+100)
  1682.                 LD L,A
  1683.                 LD H,(IX+1+100)
  1684.                 LD A,E
  1685.                 ADD A,(IX+4+100)
  1686.                 LD E,A
  1687.                 LD D,(IX+5+100)
  1688.                 CALL LDIST                      ;ПЕРЕНОС ЦВЕТНОЙ СТРОКИ
  1689.                 EXX
  1690.                 LD A,L
  1691.                 EXX
  1692.                 LD IY,LDI_END
  1693.                 LD E,A
  1694.                 LD D,0XFF
  1695.                 ADD IY,DE
  1696.                 EXX
  1697.                 LD A,D
  1698.                 EXX
  1699.                 LD E,A
  1700.                 ADD A,(IX+2)
  1701.                 LD L,A
  1702.                 LD H,(IX+3)
  1703.                 LD A,E
  1704.                 ADD A,(IX+6)
  1705.                 LD E,A
  1706.                 LD D,(IX+7)
  1707.                 CALL LDIST                      ;ПЕРЕНОС МОНОХРОМНОЙ СТРОКИ
  1708.                 EXX
  1709.                 LD A,D
  1710.                 EXX
  1711.                 LD E,A
  1712.                 ADD A,(IX+2+100)
  1713.                 LD L,A
  1714.                 LD H,(IX+3+100)
  1715.                 LD A,E
  1716.                 ADD A,(IX+6+100)
  1717.                 LD E,A
  1718.                 LD D,(IX+7+100)
  1719.                 CALL LDIST                      ;ПЕРЕНОС ЦВЕТНОЙ СТРОКИ
  1720.                 EXX
  1721.                 DJNZ TSCRDN2
  1722.                 POP IY
  1723.                 POP IX
  1724.                 RET
  1725.  
  1726. SCRDN           LD HL,FLAGS
  1727.                 BIT 7,(HL)
  1728.                 JP NZ,TSCRDN
  1729. ;СКРОЛЛ ОКНА ВВЕРХ (ZX)
  1730.                 PUSH IX
  1731.                 PUSH IY
  1732.                 EXX
  1733.                 LD A,(SCROLL_MODE)
  1734.                 LD E,A
  1735.                 EXX
  1736.                 LD A,(IX+2)
  1737.                 ADD A,(IX+1)
  1738.                 SUB 2
  1739.                 LD L,A
  1740.                 CALL USTAN
  1741.                 DEC IX
  1742.                 DEC IX
  1743. SCRDN1          LD A,(IX+0)
  1744.                 ADD A,C
  1745.                 LD L,A
  1746.                 LD H,(IX+1)
  1747.                 LD A,(IX+0X10)
  1748.                 ADD A,C
  1749.                 LD E,A
  1750.                 LD D,(IX+0X11)
  1751.                 PUSH BC
  1752.                 CALL LDIST
  1753.                 POP BC
  1754.                 EXX
  1755.                 LD A,E
  1756.                 EXX
  1757.                 AND A
  1758.                 JR Z,SCRDN2
  1759.                 LD A,(IX+1)
  1760.                 LD H,A
  1761.                 AND 7
  1762.                 CP 7
  1763.                 JR NZ,SCRDN2
  1764.                 LD A,H
  1765.                 RRCA
  1766.                 RRCA
  1767.                 RRCA
  1768.                 AND 3
  1769.                 OR 0X58
  1770.                 LD H,A
  1771.                 LD L,(IX+0)
  1772.                 LD A,(IX+0X11)
  1773.                 RRCA
  1774.                 RRCA
  1775.                 RRCA
  1776.                 AND 3
  1777.                 OR 0X58
  1778.                 LD D,A
  1779.                 LD E,(IX+0X10)
  1780.                 PUSH BC
  1781.                 CALL LDIST
  1782.                 POP BC
  1783. SCRDN2          DEC IX
  1784.                 DEC IX
  1785.                 DJNZ SCRDN1
  1786.                 POP IY
  1787.                 POP IX
  1788.                 RET
  1789.  
  1790. ;УСТАНОВКИ ДЛЯ СКРОЛЛЕРА ОКНА
  1791. USTAN           LD A,(IX+3)
  1792.                 ADD A,A
  1793.                 LD E,A
  1794.                 LD A,L
  1795.                 LD D,0
  1796.                 LD HL,LDI_END
  1797.                 AND A
  1798.                 SBC HL,DE
  1799.                 PUSH HL
  1800.                 POP IY
  1801.                 LD C,(IX+0)
  1802.                 LD L,A
  1803.                 LD A,(IX+2)
  1804.                 SUB 3
  1805.                 ADD A,A
  1806.                 ADD A,A
  1807.                 ADD A,A
  1808.                 LD B,A
  1809.                 LD H,0
  1810.                 ADD HL,HL
  1811.                 ADD HL,HL
  1812.                 ADD HL,HL
  1813.                 LD IX,BUFTSC
  1814.                 EX DE,HL
  1815.                 ADD IX,DE
  1816.                 ADD IX,DE
  1817.                 RET
  1818.  
  1819. LDIST           DB 0XFD
  1820.                 JP (HL)
  1821.                 REPT 80
  1822.                 LDI
  1823.                 ENDM
  1824. LDI_END         RET
  1825.  
  1826. SYM00           DB %11111111
  1827.                 DB %10000000
  1828.                 DB %10000000
  1829.                 DB %10000000
  1830.                 DB %10000000
  1831.                 DB %10000000
  1832.                 DB %10000000
  1833.                 DB %10000000
  1834.  
  1835. SYM01           DB %11111111
  1836.                 DB %00000000
  1837.                 DB %00000000
  1838.                 DB %00000000
  1839.                 DB %00000000
  1840.                 DB %00000000
  1841.                 DB %00000000
  1842.                 DB %00000000
  1843.  
  1844. SYM02           DB %11111111
  1845.                 DB %00000001
  1846.                 DB %00000001
  1847.                 DB %00000001
  1848.                 DB %00000001
  1849.                 DB %00000001
  1850.                 DB %00000001
  1851.                 DB %00000001
  1852.  
  1853. SYM03           DB %10000000
  1854.                 DB %10000000
  1855.                 DB %10000000
  1856.                 DB %10000000
  1857.                 DB %10000000
  1858.                 DB %10000000
  1859.                 DB %10000000
  1860.                 DB %10000000
  1861.  
  1862. SYM04           DB %00000001
  1863.                 DB %00000001
  1864.                 DB %00000001
  1865.                 DB %00000001
  1866.                 DB %00000001
  1867.                 DB %00000001
  1868.                 DB %00000001
  1869.                 DB %00000001
  1870.  
  1871. SYM05           DB %10000000
  1872.                 DB %10000000
  1873.                 DB %10000000
  1874.                 DB %10000000
  1875.                 DB %10000000
  1876.                 DB %10000000
  1877.                 DB %10000000
  1878.                 DB %11111111
  1879.  
  1880. SYM06           DB %00000000
  1881.                 DB %00000000
  1882.                 DB %00000000
  1883.                 DB %00000000
  1884.                 DB %00000000
  1885.                 DB %00000000
  1886.                 DB %00000000
  1887.                 DB %11111111
  1888.  
  1889. SYM07           DB %00000001
  1890.                 DB %00000001
  1891.                 DB %00000001
  1892.                 DB %00000001
  1893.                 DB %00000001
  1894.                 DB %00000001
  1895.                 DB %00000001
  1896.                 DB %11111111
  1897. END_MAGICSYM
  1898.  
  1899. ;ICO_MOUSE0     DB %00111111,%00000000;3F,00
  1900. ;               DB %00011111,%01000000;1F,40
  1901. ;               DB %00001111,%01100000;0F,60
  1902. ;               DB %00000111,%01010000;07,50
  1903. ;               DB %00000011,%01001000;03,48
  1904. ;               DB %00000001,%01001100;01,4C
  1905. ;               DB %00000001,%01110000;01,70
  1906. ;               DB %00000111,%00000000;07,00
  1907.  
  1908. ;ICO_MOUSE1     DB %00111111,%00000000;3F,00
  1909. ;               DB %00011111,%01000000;1F,40
  1910. ;               DB %00001111,%01100000;0F,60
  1911. ;               DB %00000111,%01110000;07,70
  1912. ;               DB %00000011,%01111000;03,78
  1913. ;               DB %00000001,%01111100;01,7C
  1914. ;               DB %00000001,%01110000;01,70
  1915. ;               DB %00000111,%00000000;07,00
  1916.