Subversion Repositories pentevo

Rev

Rev 821 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1.  
  2. ; LAST UPDATE: 14.02.2025 savelij
  3.  
  4. ; сохранение куска экрана
  5. SAVE2X2         LD HL,SYSFLAGS
  6.                 BIT SYSFLAGS.B_VIDEO_MODE,(HL)
  7.                 RET NZ
  8.                 LD HL,(ADR_REST)
  9.                 LD DE,MOUSE_BUFF
  10.                 LD B,8
  11. .L1             LD A,(HL)
  12.                 LD (DE),A
  13.                 INC DE
  14.                 INC L
  15.                 LD A,(HL)
  16.                 LD (DE),A
  17.                 INC DE
  18.                 DEC L
  19.                 CALL INC_H
  20.                 DJNZ .L1
  21.                 RET
  22.  
  23. ; восстановление куска экрана
  24. REST2X2         LD HL,SYSFLAGS
  25.                 BIT SYSFLAGS.B_VIDEO_MODE,(HL)
  26.                 RET NZ
  27.                 LD HL,(ADR_REST)
  28.                 LD DE,MOUSE_BUFF
  29.                 LD B,8
  30. .L1             LD A,(DE)
  31.                 LD (HL),A
  32.                 INC DE
  33.                 INC L
  34.                 LD A,(DE)
  35.                 LD (HL),A
  36.                 INC DE
  37.                 DEC L
  38.                 CALL INC_H
  39.                 DJNZ .L1
  40.                 RET
  41.  
  42. DETECTMOUSE     LD HL,SYSFLAGS
  43.                 LD BC,0xFBDF
  44.                 LD E,0x20
  45.                 EI
  46.                 HALT
  47.                 IN D,(C)                        ; 1.стабильность X
  48. .L1             IN A,(C)
  49.                 CP D
  50.                 JR NZ,.L2
  51.                 DEC E
  52.                 JR NZ,.L1                       ; 2.keys<>X
  53.                 DEC B
  54.                 IN A,(C)
  55.                 CP D
  56.                 JR Z,.L2                        ; 3.keys&7=7(LION17)
  57.                 CPL
  58.                 AND 7
  59.                 SET SYSFLAGS.B_MOUSE_PRESENT,(HL)
  60.                 RET Z
  61. .L2             RES SYSFLAGS.B_MOUSE_PRESENT,(HL)
  62.                 SCF
  63.                 RET
  64.  
  65. MOUSE           LD HL,SYSFLAGS
  66.                 BIT SYSFLAGS.B_VIDEO_MODE,(HL)
  67.                 RET NZ
  68.                 LD HL,(ARXY)
  69.                 LD DE,(MOUPOS)                  ; D=Y коодината, E=X координата
  70.                 LD BC,MOUSE_X
  71.                 IN A,(C)                        ; чтение координаты X
  72.                 LD (MOUPOS),A
  73.                 SUB E
  74.                 JR Z,MOUNX
  75.                 JP P,MOUPX
  76.                 ADD A,L
  77.                 JR C,.L1
  78.                 XOR A
  79. .L1             LD L,A
  80.                 JR MOUNX
  81.  
  82. MOUPX           ADD A,L
  83.                 JR C,.L1
  84.                 CP 0xF9
  85.                 JR C,.L2
  86. .L1             LD A,0xF9
  87. .L2             LD L,A
  88. MOUNX           LD BC,MOUSE_Y
  89.                 IN A,(C)                        ; чтение координаты Y
  90.                 LD (MOUPOS+1),A
  91.                 SUB D
  92.                 JR Z,MOUNY
  93.                 NEG
  94.                 JP P,MOUPY
  95.                 ADD A,H
  96.                 JR C,.L1
  97.                 XOR A
  98. .L1             LD H,A
  99.                 JR MOUNY
  100.  
  101. MOUPY           ADD A,H
  102.                 JR C,.L1
  103.                 CP 0xB8
  104.                 JR C,.L2
  105. .L1             LD A,0xB8
  106. .L2             LD H,A
  107. MOUNY           LD (ARXY),HL
  108.                 RET
  109.  
  110. MOUOPT          LD H,(IX+_Y_COORD)
  111.                 LD L,(IX+_X_COORD)
  112.                 LD DE,(ARXY)
  113.                 LD B,3
  114. .L2             SRL D
  115.                 SRL E
  116.                 DJNZ .L2
  117.                 LD A,E
  118.                 CP L
  119.                 RET C                           ; курсор левее окна
  120.                 LD A,L
  121.                 ADD A,(IX+_H_SIZE)
  122.                 DEC A
  123.                 CP E
  124.                 RET C                           ; курсор правее окна
  125.                 LD A,D
  126.                 INC H
  127.                 CP H
  128.                 RET C                           ; курсор выше окна или на верхней полоске
  129.                 LD A,H
  130.                 ADD A,(IX+_V_SIZE)
  131.                 SUB 3
  132.                 CP D
  133.                 RET C                           ; курсор ниже окна или на последней полоске
  134. ; курсор в пределах рабочей области
  135.                 LD A,(IX+_NUM_KOL_H)
  136.                 AND A
  137.                 JR NZ,.L1              
  138.                 OR (IX+_NUM_KOL_L)
  139.                 JR Z,.L1
  140. ; проверка для количества пунктов меньше высоты окна - 2
  141.                 PUSH HL
  142.                 LD L,A
  143.                 LD H,(IX+_NUM_KOL_H)
  144.                 LD A,D
  145.                 SUB (IX+_Y_COORD)
  146.                 LD C,A
  147.                 LD B,0
  148.                 AND A
  149.                 SBC HL,BC
  150.                 POP HL
  151.                 RET C
  152. .L1             LD A,D
  153.                 SUB H
  154.                 LD C,A
  155.                 LD L,(IX+_TEK_PKT_L)
  156.                 LD H,(IX+_TEK_PKT_H)
  157.                 BIT B_ADR_PUNKT,(IX+_NUM_PKT)
  158.                 JR Z,MOUOPT1
  159.                 LD B,0
  160.                 LD C,(HL)
  161.                 INC HL
  162.                 LD E,(HL)
  163.                 INC HL
  164.                 LD D,(HL)
  165.                 EX DE,HL
  166.                 SBC HL,BC
  167.                 LD C,A
  168.                 ADD HL,BC
  169.                 EX DE,HL
  170.                 LD (HL),D
  171.                 DEC HL
  172.                 LD (HL),E
  173.                 DEC HL
  174.                 LD (HL),A
  175.                 JP COLOR_CURSOR
  176.  
  177. MOUOPT1         LD B,0
  178.                 LD D,B
  179.                 LD E,(IX+_NUM_PKT)
  180.                 SBC HL,DE
  181.                 ADD HL,BC
  182.                 LD (IX+_NUM_PKT),C
  183.                 LD (IX+_TEK_PKT_L),L
  184.                 LD (IX+_TEK_PKT_H),H
  185.                 JP COLOR_CURSOR
  186.  
  187. DRAW_MOUSE      LD BC,(ARXY)
  188.                 LD L,B
  189.                 LD H,0
  190.                 ADD HL,HL
  191.                 LD DE,BUFTSC
  192.                 ADD HL,DE
  193.                 LD A,C
  194.                 RRCA
  195.                 RRCA
  196.                 RRCA
  197.                 AND 0x1F
  198.                 ADD A,(HL)
  199.                 INC HL
  200.                 LD H,(HL)
  201.                 LD L,A
  202.                 LD (ADR_REST),HL
  203.                 PUSH HL
  204.                 CALL SAVE2X2
  205.                 LD A,(_MORG)
  206.                 INC A
  207.                 LD HL,SYSFLAGS
  208.                 CP 0x0C
  209.                 JR NZ,_MORG3
  210.                 LD A,SYSFLAGS.M_CURSOR_NUM
  211.                 XOR (HL)
  212.                 LD (HL),A
  213.                 XOR A
  214. _MORG3          LD (_MORG),A
  215.                 LD A,(ARXY)
  216.                 AND 7
  217.                 CPL
  218.                 ADD A,9
  219.                 LD C,A
  220.                 LD A,(SYSFLAGS)
  221.                 AND SYSFLAGS.M_CURSOR_NUM
  222.                 LD HL,SPRAR
  223.                 JR Z,_MORG2
  224.                 LD HL,SPRAR2
  225. _MORG2          LD B,8
  226.                 POP DE
  227. .L2             PUSH BC
  228.                 LD B,C
  229.                 LD C,(HL)
  230.                 INC HL
  231.                 PUSH HL
  232.                 LD L,(HL)
  233.                 EX DE,HL
  234.                 LD A,0xFF
  235.                 LD D,0
  236. .L1             SCF
  237.                 RL C
  238.                 RLA
  239.                 SLA E
  240.                 RL D
  241.                 DJNZ .L1
  242.                 AND (HL)
  243.                 OR D
  244.                 LD (HL),A
  245.                 INC L
  246.                 LD A,(HL)
  247.                 AND C
  248.                 OR E
  249.                 LD (HL),A
  250.                 DEC L
  251.                 CALL INC_H
  252.                 EX DE,HL
  253.                 POP HL
  254.                 INC HL
  255.                 POP BC
  256.                 DJNZ .L2
  257.                 RET
  258.  
  259. ; местоположение курсора
  260. OPMSPL          LD E,(IX+_ADR_MOUSE_L)
  261.                 LD D,(IX+_ADR_MOUSE_H)
  262.                 LD A,D
  263.                 OR E
  264.                 RET Z                           ; адрес описателей не задан
  265.                 PUSH IX
  266.                 PUSH DE
  267.                 POP IX
  268.                 LD HL,(ARXY)                    ; H=Y, L=X
  269.                 SRL H
  270.                 SRL H
  271.                 SRL H
  272.                 SRL L
  273.                 SRL L
  274.                 SRL L                           ; HL=HL/8
  275. NXTPOS2         LD A,(IX+0)
  276.                 INC A
  277.                 JR Z,ENDWI
  278.                 LD A,L
  279.                 CP (IX+1)
  280.                 JR C,NXTPOS1                    ; курсор левее
  281.                 LD A,(IX+1)
  282.                 ADD A,(IX+4)
  283.                 DEC A
  284.                 CP L
  285.                 JR C,NXTPOS1                    ; курсор правее
  286.                 LD A,H
  287.                 CP (IX+2)
  288.                 JR C,NXTPOS1                    ; курсор выше
  289.                 LD A,(IX+2)
  290.                 ADD A,(IX+3)
  291.                 DEC A
  292.                 CP H
  293.                 JR C,NXTPOS1                    ; курсор ниже
  294.                 LD A,(IX+5)                     ; получили код кнопки  
  295. ENDWI           POP IX                          ; попали в заданную зону
  296.                 RET                             ; выходим
  297.  
  298. NXTPOS1         LD DE,6                         ; пока никуда не попали
  299.                 ADD IX,DE                       ; переходим к проверке следущего
  300.                 JR NXTPOS2
  301.