Subversion Repositories pentevo

Rev

Blame | Last modification | View Log | Download | RSS feed

  1.  
  2. ;LAST UPDATE: 06.03.2011 savelij
  3.  
  4. SELECTOR        XOR A
  5.                 OUT (PEVO_CONF),A
  6.                 CALL DETECTMOUSE
  7.                 EI     
  8.                 LD A,(FLAGS)
  9.                 AND 2                           ;ПРОВЕРКА НАЛИЧИЯ МЫШИ
  10.                 JR Z,_RULNMO
  11. ;FIX КОЛЕСО МЫШИ
  12. MKEYPR          EI
  13.                 HALT
  14.                 LD A,0XFA
  15.                 IN A,(0XDF)
  16.                 CPL
  17.                 AND 7
  18.                 JR NZ,MKEYPR
  19. _RULNMO         CALL SAVE2X2                    ;ЕСЛИ МЕНЮ НАПЕЧАТАЛИ ПОВЕРХ СТРЕЛКИ
  20.                 CALL SET_ADR_ATR                ;УСТАНОВКА НОВОГО АДРЕСА ДЛЯ ЦВЕТНОЙ ПОЛОСКИ
  21.                 LD HL,FLAGS_KEY
  22.                 RES 5,(HL)                      ;НА КЛАВИАТУРЕ НИЧЕГО НЕ НАЖАТО
  23.                 JR MAINLOP
  24.  
  25. ;НАЖАТА СТРЕЛКА ВВЕРХ
  26. UP              CALL CURSOR_UP                  ;СМЕНИЛИ ТЕКУЩИЙ ПУНКТ НА -1
  27.                 JR SET_POS1                    
  28.  
  29. ;НАЖАТА СТРЕЛКА ВПРАВО
  30. RIGHT           BIT 1,(IX+6)                    ;ПРОВЕРКА ПРОСТО МЕНЮ ИЛИ ФАЙЛОВОЕ
  31.                 PUSH AF                         ;СОХРАНИЛИ РЕЗУЛЬТАТ ПРОВЕРКИ
  32.                 CALL NZ,PAGEDN                  ;ЕСЛИ ФАЙЛОВОЕ, ТО ЛИСТАНИЕ СТРАНИЧНОЕ
  33.                 POP AF                          ;ВОССТАНОВИЛИ РЕЗУЛЬТАТ ПРОВЕРКИ
  34.                 JR NZ,SET_POS1                  ;ЕСЛИ ФАЙЛОВОЕ ПРОДОЛЖАЕМ
  35.                 LD A,(IX+0X0A)
  36.                 AND A
  37.                 JR Z,SET_POS
  38.                 DEC A                           ;ИНАЧЕ ПЕРЕХОД КУРСОРА НА ПОСЛЕДНИЙ ПУНКТ
  39.                 JR SET_POS                      ;ИЗМЕНЯЕМ ПОЛОЖЕНИЕ КУРСОРА И ПРОДОЛЖАЕМ
  40.  
  41. ;НАЖАТА СТРЕЛКА ВНИЗ
  42. DOWN            CALL CURSOR_DOWN                ;СМЕНИЛИ ТЕКУЩИЙ ПУНКТ НА +1
  43.                 JR SET_POS1
  44.  
  45. ;НАЖАТА СТРЕЛКА ВЛЕВО
  46. LEFT            BIT 1,(IX+6)                    ;ПРОВЕРКА ПРОСТО МЕНЮ ИЛИ ФАЙЛОВОЕ
  47.                 PUSH AF                         ;СОХРАНИЛИ РЕЗУЛЬТАТ ПРОВЕРКИ
  48.                 CALL NZ,PAGEUP                  ;ЕСЛИ ФАЙЛОВОЕ, ТО ЛИСТАНИЕ СТРАНИЧНОЕ
  49.                 POP AF                          ;ВОССТАНОВИЛИ РЕЗУЛЬТАТ ПРОВЕРКИ
  50.                 JR NZ,SET_POS1                  ;ЕСЛИ ФАЙЛОВОЕ ПРОДОЛЖАЕМ
  51.                 XOR A                           ;ИНАЧЕ ПЕРЕХОД КУРСОРА НА ПЕРВЫЙ ПУНКТ
  52. SET_POS         BIT 7,(IX+7)
  53.                 JR Z,SET_POS3
  54.                 LD L,(IX+8)
  55.                 LD H,(IX+9)
  56.                 LD (HL),A
  57.                 INC HL
  58.                 LD (HL),A
  59.                 INC HL
  60.                 LD (HL),0
  61.                 JR SET_POS1
  62.  
  63. SET_POS3        LD (IX+7),A                     ;ИЗМЕНИЛИ ПОЗИЦИЮ КУРСОРА
  64.                 LD (IX+8),A
  65.                 LD (IX+9),0                     ;ИЗМЕНИЛИ НОМЕР ВЫБРАННОГО ПУНКТА
  66. SET_POS1        CALL COLOR_CURSOR               ;ПЕРЕРИСОВКА ЦВЕТНОЙ ПОЛОСКИ МЕНЮ
  67. SET_POS2        CALL GLUDIN                     ;БУМКНУЛИ В AY
  68. MAINLOP         LD HL,FLAGS_KEY
  69.                 RES 5,(HL)                      ;СБРОС НАЖАТЫХ КНОПОК
  70.                 LD A,(FLAGS)
  71.                 AND 2                           ;ПРОВЕРКА НАЛИЧИЯ МЫШИ
  72.                 JP Z,MAINNMO
  73.                 LD HL,(ARXY)                    ;СТАРАЯ КООРДИНАТА МЫШИ
  74.                 PUSH HL
  75.                 CALL MOUSE                      ;ОПРОС ПОРТОВ МЫШИ
  76.                 POP BC
  77.                 AND A
  78.                 SBC HL,BC
  79.                 JR Z,NO_SELECT                  ;НЕ БЫЛО ДВИЖЕНИЯ МЫШИ
  80.                 CALL RESTORE_KOSHAK             ;БЫЛО ДВИЖЕНИЕ МЫШИ, СБРОС СЧЕТЧИКОВ КОШАКА
  81.                 CALL MOUOPT                     ;ПРОВЕРКА НАВЕДЕНИЯ МЫШИ НА ЗАДАННОЕ ОКНО
  82. NO_SELECT       LD BC,0XFADF
  83.                 IN A,(C)                        ;ОПРОС НАЖАТИЯ КНОПОК МЫШИ
  84.                 AND 7
  85.                 CP 6
  86.                 JR Z,PRESS_MOUSE                ;ЕСЛИ НАЖАТА ЛЕВАЯ КНОПКА МЫШИ
  87.                 CP 5
  88.                 JP Z,RESTART                    ;ЕСЛИ НАЖАТА ПРАВАЯ КНОПКА МЫШИ
  89.                 CALL PRINTTIME                  ;ОБНОВИЛИ ВРЕМЯ ЕСЛИ ИЗМЕНИЛОСЬ
  90.                 EI
  91.                 HALT
  92.                 CALL REST2X2                    ;ВОССТАНОВИЛИ КУСОК ЭКРАНА ПОД МЫШЬЮ
  93.                 CALL DRAW_MOUSE                 ;НАРИСОВАЛИ КУРСОР МЫШИ
  94.                 JR MAINQMO                      ;ПРОДОЛЖЕНИЕ ОПРОСА
  95.  
  96. PRESS_MOUSE     CALL OPMSPL
  97.                 AND A
  98.                 JR Z,CP_MOUSE4
  99.                 LD (LAST_K),A
  100.                 CALL TIMELP
  101.                 JR SELECT_KEY
  102.  
  103. CP_MOUSE4       CALL MOUOPT                     ;ПРОВЕРКА ПОПАДАНИЯ МЫШИ В ПРЕДЕЛЫ ТЕКУЩЕГО ОКНА
  104.                 JR C,MAINNMO                    ;НЕ ПОПАЛИ И ЕДЕМ ДАЛЕЕ
  105.                 LD E,(IX+7)                     ;ВЗЯЛИ НОМЕР ПУНКТА КУДА ПОПАЛИ МЫШЬЮ
  106.                 BIT 7,E
  107.                 JR Z,CP_MOUSE5
  108.                 LD L,(IX+8)
  109.                 LD H,(IX+9)
  110.                 LD E,(HL)
  111. CP_MOUSE5       LD D,0
  112.                 LD HL,(PRESSEDKEY)              ;АДРЕС СПИСКА ХОТКЕЕВ ТЕКУЩЕГО ОКНА
  113.                 ADD HL,DE                       ;АДРЕС ХОТКЕЯ ВЫБРАННОГО ПУНКТА
  114.                 LD DE,LAST_K
  115.                 LDI                             ;ЭМИТАЦИЯ НАЖАТИЯ ЗАДАННОЙ КНОПКИ
  116.                 JR ENTER
  117.                
  118. MAINNMO         CALL PRINTTIME                  ;ОБНОВЛЕНИЕ ВРЕМЕНИ, ЕСЛИ В ОНО ОБНОВИЛОСЬ
  119.                 EI
  120.                 HALT
  121. MAINQMO         LD A,(FLAGS_KEY)
  122.                 BIT 5,A                         ;ПРОВЕРКА НАЖАТИЯ КНОПОК КЛАВИАТУРЫ
  123.                 CALL Z,CP_TIME_KOSHAK           ;ЕСЛИ НЕ НАЖАТО НИЧЕГО, ПРОВЕРЯЕМ СЧЕТЧИК КОШАКА
  124.                 JP Z,MAINLOP                    ;ПРОДОЛЖАЕМ ОПРОС УПРАВЛЕНИЯ
  125.                 CALL BREAK_KEY                  ;ПРОВЕРКА НА BREAK
  126.                 JR C,SELECT_KEY                 ;ЕСЛИ BREAK НАЖАТ ПЕРЕЗАПУСКАЕМСЯ
  127. RESTART         LD A,1
  128.                 OUT (PEVO_CONF),A
  129.                 RET
  130.  
  131. SELECT_KEY      CALL RESTORE_KOSHAK             ;НАЖАТО НЕЧТО НА КЛАВЕ, СБРОС СЧЕТЧИКА КОШАКА
  132.                 LD HL,LAST_K
  133.                 LD A,(HL)                       ;ВЗЯЛИ НАЖАТУЮ КЛАВИШУ
  134.                 LD B,0
  135.                 LD HL,MAIN_KEYS
  136.                 LD C,(HL)                       ;КОЛИЧЕСТВО ДОСТУПНЫХ КНОПОК
  137.                 LD D,C
  138.                 INC HL
  139.                 CPIR
  140.                 JR NZ,NOMAINKEYS                ;НИЧЕГО НЕ НАШЛИ, ДАЛЕЕ СМОТРИМ КНОПКИ ТЕКУЩЕГО ОКНА
  141.                                                 ;НАЖАТО ЧТО-ТО ИЗ ГЛАВНЫХ КНОПОК, ДОСТУПНЫХ ВСЕГДА
  142.                 LD HL,ADREXEKEYS
  143.                 LD A,D                          ;КОЛИЧЕСТВО КНОПОК В ТАБЛИЦЕ -1
  144.                 SUB C                           ;ПОЛУЧИЛИ ВЫБРАННЫЙ НОМЕР
  145.                 DEC A
  146.                 ADD A,A
  147.                 ADD A,L
  148.                 LD L,A
  149.                 ADC A,H
  150.                 SUB L
  151.                 LD H,A
  152.                 LD A,(HL)
  153.                 INC HL
  154.                 LD H,(HL)
  155.                 LD L,A
  156.                 JP (HL)
  157.  
  158. ;ПРОВЕРКА ХОТКЕЕВ В ТЕКУЩЕМ ОКНЕ
  159. NOMAINKEYS      LD HL,(PRESSEDKEY)              ;АДРЕС СПИСКА НАЖАТЫХ КНОПОК ТЕКУЩЕГО ОКНА
  160.                 LD C,A
  161.                 LD A,H
  162.                 OR L
  163.                 JP Z,MAINLOP                    ;ЕСЛИ СПИСКА НЕТ, ПРОДОЛЖАЕМ ОПРОС
  164.                 LD A,C
  165.                 LD C,(IX+2)
  166.                 LD E,(HL)
  167.                 INC HL
  168.                 DEC C                           ;КОЛИЧЕСТВО КНОПОК
  169.                 DEC C                           ;ВЫСОТА ОКНА -2
  170.                 LD D,C
  171.                 LD B,0
  172.                 CPIR                            ;СКАНИРОВАНИЕ СПИСКА ЗАДАННЫХ КЛАВИШ
  173.                 JR NZ,OSTAT_KEYS
  174.                 LD A,D                          ;ВЫСОТА ОКНА
  175.                 SUB C
  176.                 DEC A                           ;ПОЛУЧИЛИ НОМЕР НАЖАТОЙ КНОПКИ И -1
  177.                 BIT 7,(IX+7)
  178.                 JR Z,ENTER1
  179.                 LD L,(IX+8)
  180.                 LD H,(IX+9)
  181.                 LD (HL),A
  182.                 INC HL
  183.                 LD (HL),A
  184.                 JR ENTER
  185.  
  186. ENTER1          LD (IX+7),A                     ;НОМЕР ПУНКТА В ОКНЕ
  187.                 LD (IX+8),A                     ;НОМЕР НАЖАТОЙ КЛАВИШИ ПО УКАЗАННОМУ СПИСКУ
  188. ENTER           LD A,(FLAGS)
  189.                 AND 2
  190.                 CALL NZ,TIMELP                  ;ОБНОВЛЕНИЕ ВРЕМЕНИ ЕСЛИ ОНО ИЗМЕНИЛОСЬ
  191.                 CALL REST2X2                    ;СТЕРЛИ КУРСОР МЫШИ
  192.                 CALL GLUDIN                     ;БУМКНУЛИ В AY
  193.                 LD A,(IX+7)                     ;НОМЕР ИЗ СПИСКА КОТОРЫЙ ВЫЗВАТЬ
  194.                 BIT 7,A
  195.                 JR Z,JUMP2HL1
  196.                 LD L,(IX+8)
  197.                 LD H,(IX+9)
  198.                 LD A,(HL)
  199. JUMP2HL1        LD L,(IX+0X0E)
  200.                 LD H,(IX+0X0F)                  ;ВЗЯЛИ СПИСОК АДРЕСОВ 1 ИЗ КОТОРЫХ БУДЕМ ВЫЗЫВАТЬ
  201. JUMP2HL         ADD A,A
  202.                 ADD A,L
  203.                 LD L,A
  204.                 ADC A,H
  205.                 SUB L
  206.                 LD H,A
  207.                 LD A,(HL)
  208.                 INC HL
  209.                 LD H,(HL)
  210.                 LD L,A
  211.                 LD A,1
  212.                 OUT (PEVO_CONF),A
  213.                 JP (HL)
  214.  
  215. OSTAT_KEYS      EX AF,AF'
  216.                 LD A,E
  217.                 SUB D
  218.                 JP Z,MAINLOP
  219.                 LD C,A
  220.                 EX AF,AF'
  221.                 CPIR
  222.                 JP NZ,MAINLOP
  223.                 LD A,E
  224.                 SUB C
  225.                 DEC A
  226.                 JR JUMP2HL1
  227.  
  228. TIMELP          CALL PRINTTIME
  229.                 LD A,0XFA
  230.                 IN A,(0XDF)                     ;КНОПКИ МЫШИ
  231.                 CPL
  232.                 AND 7
  233.                 JR NZ,TIMELP                    ;ПОКА НЕ ОТПУСТЯТ
  234.                 RET
  235.  
  236. GLUDIN          LD HL,DIN+0X0D
  237.                 LD A,0X0D
  238. GLUDIN1         LD BC,0XFFFD
  239.                 OUT (C),A
  240.                 LD B,0XBF
  241.                 OUTD
  242.                 SUB 1
  243.                 JR NC,GLUDIN1
  244.                 RET
  245.  
  246. KOSHAK          BINCLUDE kot_anim.bin,9
  247.