Subversion Repositories pentevo

Rev

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

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