Subversion Repositories pentevo

Rev

Rev 764 | 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,FLAGS
  6.                 BIT B_VIDEO_MODE,(HL)
  7.                 RET NZ
  8.                 LD HL,(ADR_REST)
  9.                 LD DE,MOUSE_BUFF
  10.                 LD B,8
  11. SAVE2X21        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 SAVE2X21
  21.                 RET
  22.  
  23. ;ВОССТАНОВЛЕНИЕ КУСКА ЭКРАНА
  24. REST2X2         LD HL,FLAGS
  25.                 BIT B_VIDEO_MODE,(HL)
  26.                 RET NZ
  27.                 LD HL,(ADR_REST)
  28.                 LD DE,MOUSE_BUFF
  29.                 LD B,8
  30. REST2X21        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 REST2X21
  40.                 RET
  41.  
  42. DETECTMOUSE     LD HL,FLAGS
  43.                 LD BC,0XFBDF
  44.                 LD E,0X20
  45.                 EI
  46.                 HALT
  47.                 IN D,(C)                        ;1.СТАБИЛЬНОСТЬ X
  48. SETMOU1         IN A,(C)
  49.                 CP D
  50.                 JR NZ,SETMOU2
  51.                 DEC E
  52.                 JR NZ,SETMOU1                   ;2.KEYS<>X
  53.                 DEC B
  54.                 IN A,(C)
  55.                 CP D
  56.                 JR Z,SETMOU2                    ;3.KEYS&7=7(LION17)
  57.                 CPL
  58.                 AND 7
  59.                 SET B_MOUSE_PRESENT,(HL)
  60.                 RET Z
  61. SETMOU2         RES B_MOUSE_PRESENT,(HL)
  62.                 SCF
  63.                 RET
  64.  
  65. MOUSE           LD HL,FLAGS
  66.                 BIT B_VIDEO_MODE,(HL)
  67.                 RET NZ
  68.                 LD HL,(ARXY)
  69.                 LD DE,(MOUPOS)                  ;D=Y КООДИНАТА, E=X КООРДИНАТА
  70.                 LD BC,0XFBDF
  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,$+3
  78.                 XOR A
  79.                 LD L,A
  80.                 JR MOUNX
  81.  
  82. MOUPX           ADD A,L
  83.                 JR C,$+6
  84.                 CP 0XF9
  85.                 JR C,$+4
  86.                 LD A,0XF9
  87.                 LD L,A
  88. MOUNX           LD BC,0XFFDF                    ;ЧТЕНИЕ КООРДИНАТЫ Y
  89.                 IN A,(C)
  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,$+3
  97.                 XOR A
  98.                 LD H,A
  99.                 JR MOUNY
  100.  
  101. MOUPY           ADD A,H
  102.                 JR C,$+6
  103.                 CP 0XB8
  104.                 JR C,$+4
  105.                 LD A,0XB8
  106.                 LD H,A
  107. MOUNY           LD (ARXY),HL
  108.                 RET
  109.  
  110. MOUOPT          LD H,(IX+1)
  111.                 LD L,(IX+0)
  112.                 LD DE,(ARXY)
  113.                 LD B,3
  114.                 SRL D
  115.                 SRL E
  116.                 DJNZ $-4
  117.                 LD A,E
  118.                 CP L
  119.                 RET C                           ;КУРСОР ЛЕВЕЕ ОКНА
  120.                 LD A,L
  121.                 ADD A,(IX+3)
  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+2)
  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.  
  153. .L1             LD A,D
  154.                 SUB H
  155.                 LD C,A
  156.                 LD L,(IX+8)
  157.                 LD H,(IX+9)
  158.                 BIT 7,(IX+7)
  159.                 JR Z,MOUOPT1
  160.                 LD B,0
  161.                 LD C,(HL)
  162.                 INC HL
  163.                 LD E,(HL)
  164.                 INC HL
  165.                 LD D,(HL)
  166.                 EX DE,HL
  167.                 SBC HL,BC
  168.                 LD C,A
  169.                 ADD HL,BC
  170.                 EX DE,HL
  171.                 LD (HL),D
  172.                 DEC HL
  173.                 LD (HL),E
  174.                 DEC HL
  175.                 LD (HL),A
  176.                 JP COLOR_CURSOR
  177.  
  178. MOUOPT1         LD B,0
  179.                 LD D,B
  180.                 LD E,(IX+7)
  181.                 SBC HL,DE
  182.                 ADD HL,BC
  183.                 LD (IX+7),C
  184.                 LD (IX+8),L
  185.                 LD (IX+9),H
  186.                 JP COLOR_CURSOR
  187.  
  188. DRAW_MOUSE      LD BC,(ARXY)
  189.                 LD L,B
  190.                 LD H,0
  191.                 ADD HL,HL
  192.                 LD DE,BUFTSC
  193.                 ADD HL,DE
  194.                 LD A,C
  195.                 RRCA
  196.                 RRCA
  197.                 RRCA
  198.                 AND 0X1F
  199.                 ADD A,(HL)
  200.                 INC HL
  201.                 LD H,(HL)
  202.                 LD L,A
  203.                 LD (ADR_REST),HL
  204.                 PUSH HL
  205.                 CALL SAVE2X2
  206.                 LD A,(_MORG)
  207.                 INC A
  208.                 LD HL,FLAGS
  209.                 CP 0X0C
  210.                 JR NZ,_MORG3
  211.                 LD A,M_CURSOR_NUM
  212.                 XOR (HL)
  213.                 LD (HL),A
  214.                 XOR A
  215. _MORG3          LD (_MORG),A
  216.                 LD A,(ARXY)
  217.                 AND 7
  218.                 CPL
  219.                 ADD A,9
  220.                 LD C,A
  221.                 LD A,(FLAGS)
  222.                 AND M_CURSOR_NUM
  223.                 LD HL,SPRAR
  224.                 JR Z,_MORG2
  225.                 LD HL,SPRAR2
  226. _MORG2          LD B,8
  227.                 POP DE
  228. PRAR0           PUSH BC
  229.                 LD B,C
  230.                 LD C,(HL)
  231.                 INC HL
  232.                 PUSH HL
  233.                 LD L,(HL)
  234.                 EX DE,HL
  235.                 LD A,0XFF
  236.                 LD D,0
  237. PRAR1           SCF
  238.                 RL C
  239.                 RLA
  240.                 SLA E
  241.                 RL D
  242.                 DJNZ PRAR1
  243.                 AND (HL)
  244.                 OR D
  245.                 LD (HL),A
  246.                 INC L
  247.                 LD A,(HL)
  248.                 AND C
  249.                 OR E
  250.                 LD (HL),A
  251.                 DEC L
  252.                 CALL INC_H
  253.                 EX DE,HL
  254.                 POP HL
  255.                 INC HL
  256.                 POP BC
  257.                 DJNZ PRAR0
  258.                 RET
  259.  
  260. ;МЕСТОПОЛОЖЕНИЕ КУРСОРА
  261. OPMSPL          LD E,(IX+0X10)
  262.                 LD D,(IX+0X11)
  263.                 LD A,D
  264.                 OR E
  265.                 RET Z                           ;АДРЕС ОПИСАТЕЛЕЙ НЕ ЗАДАН
  266.                 PUSH IX
  267.                 PUSH DE
  268.                 POP IX
  269.                 LD HL,(ARXY)                    ;H=Y, L=X
  270.                 SRL H
  271.                 SRL H
  272.                 SRL H
  273.                 SRL L
  274.                 SRL L
  275.                 SRL L                           ;HL=HL/8
  276. NXTPOS2         LD A,(IX+0)
  277.                 INC A
  278.                 JR Z,ENDWI
  279.                 LD A,L
  280.                 CP (IX+1)
  281.                 JR C,NXTPOS1                    ;КУРСОР ЛЕВЕЕ
  282.                 LD A,(IX+1)
  283.                 ADD A,(IX+4)
  284.                 DEC A
  285.                 CP L
  286.                 JR C,NXTPOS1                    ;КУРСОР ПРАВЕЕ
  287.                 LD A,H
  288.                 CP (IX+2)
  289.                 JR C,NXTPOS1                    ;КУРСОР ВЫШЕ
  290.                 LD A,(IX+2)
  291.                 ADD A,(IX+3)
  292.                 DEC A
  293.                 CP H
  294.                 JR C,NXTPOS1                    ;КУРСОР НИЖЕ
  295.                 LD A,(IX+5)                     ;ПОЛУЧИЛИ КОД КНОПКИ  
  296. ENDWI           POP IX                          ;ПОПАЛИ В ЗАДАННУЮ ЗОНУ
  297.                 RET                             ;ВЫХОДИМ
  298.  
  299. NXTPOS1         LD DE,6                         ;ПОКА НИКУДА НЕ ПОПАЛИ
  300.                 ADD IX,DE                       ;ПЕРЕХОДИМ К ПРОВЕРКЕ СЛЕДУЩЕГО
  301.                 JR NXTPOS2
  302.