Subversion Repositories pentevo

Rev

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

  1.  
  2. ;LAST UPDATE: 03.05.2019 savelij
  3.  
  4. ;[СОХРАНЕНИЕ КУСКА ЭКРАНА]
  5. SAVE2X2         LD HL,(ADR_REST)
  6.                 LD DE,MOUSE_BUFF
  7.                 LD B,8
  8. SAVE2X21        LD A,(HL)
  9.                 LD (DE),A
  10.                 INC DE
  11.                 INC L
  12.                 LD A,(HL)
  13.                 LD (DE),A
  14.                 INC DE
  15.                 DEC L
  16.                 CALL INC_H
  17.                 DJNZ SAVE2X21
  18.                 RET
  19.  
  20. ;[ВОССТАНОВЛЕНИЕ КУСКА ЭКРАНА]
  21. REST2X2         LD HL,0
  22. ADR_REST        EQU $-2
  23.                 LD DE,MOUSE_BUFF
  24.                 LD B,8
  25. REST2X21        LD A,(DE)
  26.                 LD (HL),A
  27.                 INC DE
  28.                 INC L
  29.                 LD A,(DE)
  30.                 LD (HL),A
  31.                 INC DE
  32.                 DEC L
  33.                 CALL INC_H
  34.                 DJNZ REST2X21
  35.                 RET
  36.  
  37. ;[ДЕТЕКТ НАЛИЧИЯ МЫШИ]
  38. DETECTMOUSE     LD HL,ERS_FLAGS
  39.                 LD BC,MOUSE_X
  40.                 LD E,0X20
  41.                 EI
  42.                 HALT
  43.                 IN D,(C)                ;1.СТАБИЛЬНОСТЬ X
  44. SETMOU1         IN A,(C)
  45.                 CP D
  46.                 JR NZ,SETMOU2
  47.                 DEC E
  48.                 JR NZ,SETMOU1           ;2.KEYS<>X
  49.                 LD B,HIGH (MOUSE_KEYS);DEC B
  50.                 IN A,(C)
  51.                 CP D
  52.                 JR Z,SETMOU2            ;3.KEYS&7=7(LION17)
  53.                 CPL
  54.                 AND 7
  55.                 SET B_MOUSE_ON,(HL)
  56.                 RET Z
  57. SETMOU2         RES B_MOUSE_ON,(HL)
  58.                 SCF
  59.                 RET
  60.  
  61. ;[ОПРОС ПЕРЕМЕЩЕНИЯ МЫШИ]
  62. MOUSE           LD HL,(ARXY)
  63.                 LD DE,0                 ;D=Y КООДИНАТА, E=X КООРДИНАТА
  64. MOUPOS          EQU $-2
  65.                 LD BC,MOUSE_X
  66.                 IN A,(C)                ;ЧТЕНИЕ КООРДИНАТЫ X
  67.                 LD (MOUPOS),A
  68.                 SUB E
  69.                 JR Z,MOUNX
  70.                 JP P,MOUPX
  71.                 ADD A,L
  72.                 JR C,$+3
  73.                 XOR A
  74.                 LD L,A
  75.                 JR MOUNX
  76.  
  77. MOUPX           ADD A,L
  78.                 JR C,$+6
  79.                 CP 0XF9
  80.                 JR C,$+4
  81.                 LD A,0XF9
  82.                 LD L,A
  83. MOUNX           LD BC,MOUSE_Y           ;ЧТЕНИЕ КООРДИНАТЫ Y
  84.                 IN A,(C)
  85.                 LD (MOUPOS+1),A
  86.                 SUB D
  87.                 JR Z,MOUNY
  88.                 NEG
  89.                 JP P,MOUPY
  90.                 ADD A,H
  91.                 JR C,$+3
  92.                 XOR A
  93.                 LD H,A
  94.                 JR MOUNY
  95.  
  96. MOUPY           ADD A,H
  97.                 JR C,$+6
  98.                 CP 0XB8
  99.                 JR C,$+4
  100.                 LD A,0XB8
  101.                 LD H,A
  102. MOUNY           LD (ARXY),HL
  103.                 RET
  104.  
  105. MOUOPT          LD H,(IX+_Y_COORD)
  106.                 LD L,(IX+_X_COORD)
  107.                 LD DE,(ARXY)
  108.                 LD B,3
  109.                 SRL D
  110.                 SRL E
  111.                 DJNZ $-4
  112.                 LD A,E
  113.                 CP L
  114.                 RET C                   ;КУРСОР ЛЕВЕЕ ОКНА
  115.                 LD A,L
  116.                 ADD A,(IX+_H_SIZE)
  117.                 DEC A
  118.                 CP E
  119.                 RET C                   ;КУРСОР ПРАВЕЕ ОКНА
  120.                 LD A,D
  121.                 INC H
  122.                 CP H
  123.                 RET C                   ;КУРСОР ВЫШЕ ОКНА ИЛИ НА ВЕРХНЕЙ ПОЛОСКЕ
  124.                 LD A,H
  125.                 ADD A,(IX+_V_SIZE)
  126.                 SUB 3
  127.                 CP D
  128.                 RET C                   ;КУРСОР НИЖЕ ОКНА ИЛИ НА ПОСЛЕДНЕЙ ПОЛОСКЕ
  129. ;КУРСОР В ПРЕДЕЛАХ РАБОЧЕЙ ОБЛАСТИ
  130.                 LD A,(IX+_NUM_KOL_H)
  131.                 AND A
  132.                 JR NZ,.L1              
  133.                 OR (IX+_NUM_KOL_L)
  134.                 JR Z,.L1
  135. ;ПРОВЕРКА ДЛЯ КОЛИЧЕСТВА ПУНКТОВ МЕНЬШЕ ВЫСОТЫ ОКНА - 2
  136.                 PUSH HL
  137.                 LD L,A
  138.                 LD H,(IX+_NUM_KOL_H)
  139.                 LD A,D
  140.                 SUB (IX+_Y_COORD)
  141.                 LD C,A
  142.                 LD B,0
  143.                 AND A
  144.                 SBC HL,BC
  145.                 POP HL
  146.                 RET C
  147.  
  148. .L1             LD A,D
  149.                 SUB H
  150.                 LD C,A
  151.                 LD L,(IX+_TEK_PKT_L)
  152.                 LD H,(IX+_TEK_PKT_H)
  153.                 LD B,0
  154.                 LD D,B
  155.                 LD E,(IX+_NUM_PKT)
  156.                 SBC HL,DE
  157.                 ADD HL,BC
  158.                 LD (IX+_TEK_PKT_L),L
  159.                 LD (IX+_TEK_PKT_H),H
  160.                 LD (IX+_NUM_PKT),C
  161.                 JP COLOR_CURSOR
  162.  
  163. ;[РИСОВАНИЕ КУРСОРА МЫШИ]
  164. DRAW_MOUSE      LD BC,0
  165. ARXY            EQU $-2
  166.                 LD A,B
  167.                 CALL 8881
  168.                 LD (REST2X2+1),HL
  169.                 PUSH HL
  170.                 CALL SAVE2X2
  171.                 LD A,6
  172. _MORG           EQU $-1
  173.                 INC A
  174.                 LD HL,ERS_FLAGS
  175.                 CP 0X0C
  176.                 JR NZ,_MORG3
  177.                 LD A,M_NUM_CURSOR
  178.                 XOR (HL)
  179.                 LD (HL),A
  180.                 XOR A
  181. _MORG3          LD (_MORG),A
  182.                 LD A,(ARXY)
  183.                 AND 7
  184.                 CPL
  185.                 ADD A,9
  186.                 LD C,A
  187.                 LD A,(ERS_FLAGS)
  188.                 AND M_NUM_CURSOR
  189.                 LD HL,SPRAR
  190.                 JR Z,_MORG2
  191.                 LD HL,SPRAR2
  192. _MORG2          LD B,8
  193.                 POP DE
  194. PRAR0           PUSH BC
  195.                 LD B,C
  196.                 LD C,(HL)
  197.                 INC HL
  198.                 PUSH HL
  199.                 LD L,(HL)
  200.                 EX DE,HL
  201.                 LD A,0XFF
  202.                 LD D,0
  203. PRAR1           SCF
  204.                 RL C
  205.                 RLA
  206.                 SLA E
  207.                 RL D
  208.                 DJNZ PRAR1
  209.                 AND (HL)
  210.                 OR D
  211.                 LD (HL),A
  212.                 INC L
  213.                 LD A,(HL)
  214.                 AND C
  215.                 OR E
  216.                 LD (HL),A
  217.                 DEC L
  218.                 CALL INC_H
  219.                 EX DE,HL
  220.                 POP HL
  221.                 INC HL
  222.                 POP BC
  223.                 DJNZ PRAR0
  224.                 RET
  225.  
  226. ;[МЕСТОПОЛОЖЕНИЕ КУРСОРА]
  227. OPMSPL          LD E,(IX+_ADR_MOUSE_L)
  228.                 LD D,(IX+_ADR_MOUSE_H)
  229.                 LD A,D
  230.                 OR E
  231.                 RET Z                   ;АДРЕС ОПИСАТЕЛЕЙ НЕ ЗАДАН
  232.                 PUSH IX
  233.                 PUSH DE
  234.                 POP IX
  235.                 LD HL,(ARXY)            ;H=Y, L=X
  236.                 SRL H
  237.                 SRL H
  238.                 SRL H
  239.                 SRL L
  240.                 SRL L
  241.                 SRL L                   ;HL=HL/8
  242. .NXTPOS2        LD A,(IX+0)
  243.                 INC A
  244.                 JR Z,.ENDWI             ;КОНЕЦ СПИСКА
  245.                 LD A,L
  246.                 CP (IX+1)
  247.                 JR C,.NXTPOS1           ;КУРСОР ЛЕВЕЕ
  248.                 LD A,(IX+1)
  249.                 ADD A,(IX+4)
  250.                 DEC A
  251.                 CP L
  252.                 JR C,.NXTPOS1           ;КУРСОР ПРАВЕЕ
  253.                 LD A,H
  254.                 CP (IX+2)
  255.                 JR C,.NXTPOS1           ;КУРСОР ВЫШЕ
  256.                 LD A,(IX+2)
  257.                 ADD A,(IX+3)
  258.                 DEC A
  259.                 CP H
  260.                 JR C,.NXTPOS1           ;КУРСОР НИЖЕ
  261.                 LD A,(IX+5)             ;ПОЛУЧИЛИ КОД КНОПКИ  
  262. .ENDWI          POP IX                  ;ПОПАЛИ В ЗАДАННУЮ ЗОНУ
  263.                 RET                     ;ВЫХОДИМ
  264.  
  265. .NXTPOS1        LD DE,6                 ;ПОКА НИКУДА НЕ ПОПАЛИ
  266.                 ADD IX,DE               ;ПЕРЕХОДИМ К ПРОВЕРКЕ СЛЕДУЩЕГО
  267.                 JR .NXTPOS2
  268.