Subversion Repositories pentevo

Rev

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

  1.  
  2. ;LAST UPDATE: 29.07.2013 savelij
  3.  
  4. ITSELECTOR      LD HL,FLAGS
  5.                 RES 1,(HL)                      ;ПРИНУДИТЕЛЬНОЕ ОТКЛЮЧЕНИЕ МЫШИ ДЛЯ ТЕКСТМОДА
  6.                 SET 7,(HL)                      ;МЕНЮ ТЕКСТОВОГО ВИДЕОРЕЖИМА
  7.                 LD HL,KEYBOARDS
  8.                 LD (ADR_INT),HL                 ;ПО ПРЕРЫВАНИЯМ БУДЕТ ОПРОС КЛАВИАТУРЫ
  9.                 LD (OLD_STACK),SP
  10.                 JR SELECTOR
  11.  
  12. ISELECTOR       LD HL,FLAGS
  13.                 RES 7,(HL)
  14.                 CALL DETECTMOUSE
  15.                 LD (OLD_STACK),SP
  16. SELECTOR        EI     
  17.                 LD A,(FLAGS)
  18.                 AND 2                           ;ПРОВЕРКА НАЛИЧИЯ МЫШИ
  19.                 JR Z,_RULNMO
  20. ;FIX КОЛЕСО МЫШИ
  21. MKEYPR          EI
  22.                 HALT
  23.                 LD A,0XFA
  24.                 IN A,(0XDF)
  25.                 CPL
  26.                 AND 7
  27.                 JR NZ,MKEYPR
  28. _RULNMO         CALL SAVE2X2                    ;ЕСЛИ МЕНЮ НАПЕЧАТАЛИ ПОВЕРХ СТРЕЛКИ
  29.                 CALL SET_ADR_ATR                ;УСТАНОВКА НОВОГО АДРЕСА ДЛЯ ЦВЕТНОЙ ПОЛОСКИ
  30.                 LD HL,FLAGS_KEY
  31.                 RES 5,(HL)                      ;НА КЛАВИАТУРЕ НИЧЕГО НЕ НАЖАТО
  32.                 JR MAINLOP
  33.  
  34. ;НАЖАТА СТРЕЛКА ВВЕРХ
  35. UP              CALL CURSOR_UP                  ;СМЕНИЛИ ТЕКУЩИЙ ПУНКТ НА -1
  36.                 JR SET_POS1                    
  37.  
  38. ;НАЖАТА СТРЕЛКА ВПРАВО
  39. RIGHT           BIT 1,(IX+6)                    ;ПРОВЕРКА ПРОСТО МЕНЮ ИЛИ ФАЙЛОВОЕ
  40.                 PUSH AF                         ;СОХРАНИЛИ РЕЗУЛЬТАТ ПРОВЕРКИ
  41.                 CALL NZ,PAGEDN                  ;ЕСЛИ ФАЙЛОВОЕ, ТО ЛИСТАНИЕ СТРАНИЧНОЕ
  42.                 POP AF                          ;ВОССТАНОВИЛИ РЕЗУЛЬТАТ ПРОВЕРКИ
  43.                 JR NZ,SET_POS1                  ;ЕСЛИ ФАЙЛОВОЕ ПРОДОЛЖАЕМ
  44.                 LD A,(IX+0X0A)
  45.                 AND A
  46.                 JR Z,SET_POS
  47.                 DEC A                           ;ИНАЧЕ ПЕРЕХОД КУРСОРА НА ПОСЛЕДНИЙ ПУНКТ
  48.                 JR SET_POS                      ;ИЗМЕНЯЕМ ПОЛОЖЕНИЕ КУРСОРА И ПРОДОЛЖАЕМ
  49.  
  50. ;НАЖАТА СТРЕЛКА ВНИЗ
  51. DOWN            CALL CURSOR_DOWN                ;СМЕНИЛИ ТЕКУЩИЙ ПУНКТ НА +1
  52.                 JR SET_POS1
  53.  
  54. ;НАЖАТА СТРЕЛКА ВЛЕВО
  55. LEFT            BIT 1,(IX+6)                    ;ПРОВЕРКА ПРОСТО МЕНЮ ИЛИ ФАЙЛОВОЕ
  56.                 PUSH AF                         ;СОХРАНИЛИ РЕЗУЛЬТАТ ПРОВЕРКИ
  57.                 CALL NZ,PAGEUP                  ;ЕСЛИ ФАЙЛОВОЕ, ТО ЛИСТАНИЕ СТРАНИЧНОЕ
  58.                 POP AF                          ;ВОССТАНОВИЛИ РЕЗУЛЬТАТ ПРОВЕРКИ
  59.                 JR NZ,SET_POS1                  ;ЕСЛИ ФАЙЛОВОЕ ПРОДОЛЖАЕМ
  60.                 XOR A                           ;ИНАЧЕ ПЕРЕХОД КУРСОРА НА ПЕРВЫЙ ПУНКТ
  61. SET_POS         BIT 7,(IX+7)
  62.                 JR Z,SET_POS3
  63.                 LD L,(IX+8)
  64.                 LD H,(IX+9)
  65.                 LD (HL),A
  66.                 INC HL
  67.                 LD (HL),A
  68.                 INC HL
  69.                 LD (HL),0
  70.                 JR SET_POS1
  71.  
  72. SET_POS3        LD (IX+7),A                     ;ИЗМЕНИЛИ ПОЗИЦИЮ КУРСОРА
  73.                 LD (IX+8),A
  74.                 LD (IX+9),0                     ;ИЗМЕНИЛИ НОМЕР ВЫБРАННОГО ПУНКТА
  75. SET_POS1        CALL COLOR_CURSOR               ;ПЕРЕРИСОВКА ЦВЕТНОЙ ПОЛОСКИ МЕНЮ
  76. MAINLOP         LD HL,FLAGS_KEY
  77.                 RES 5,(HL)                      ;СБРОС НАЖАТЫХ КНОПОК
  78.                 LD A,(FLAGS)
  79.                 AND 2                           ;ПРОВЕРКА НАЛИЧИЯ МЫШИ
  80.                 JP Z,MAINNMO
  81.                 LD HL,(ARXY)                    ;СТАРАЯ КООРДИНАТА МЫШИ
  82.                 PUSH HL
  83.                 CALL MOUSE                      ;ОПРОС ПОРТОВ МЫШИ
  84.                 POP BC
  85.                 AND A
  86.                 SBC HL,BC
  87.                 JR Z,NO_SELECT                  ;НЕ БЫЛО ДВИЖЕНИЯ МЫШИ
  88.                 CALL MOUOPT                     ;ПРОВЕРКА НАВЕДЕНИЯ МЫШИ НА ЗАДАННОЕ ОКНО
  89. NO_SELECT       LD BC,0XFADF
  90.                 IN A,(C)                        ;ОПРОС НАЖАТИЯ КНОПОК МЫШИ
  91.                 AND 7
  92.                 CP 6
  93.                 JR Z,PRESS_MOUSE                ;ЕСЛИ НАЖАТА ЛЕВАЯ КНОПКА МЫШИ
  94.                 CP 5
  95.                 JP Z,RESTART                    ;ЕСЛИ НАЖАТА ПРАВАЯ КНОПКА МЫШИ
  96.                 CALL PRINTTIME                  ;ОБНОВИЛИ ВРЕМЯ ЕСЛИ ИЗМЕНИЛОСЬ
  97.                 EI
  98.                 HALT
  99.                 CALL REST2X2                    ;ВОССТАНОВИЛИ КУСОК ЭКРАНА ПОД МЫШЬЮ
  100.                 CALL DRAW_MOUSE                 ;НАРИСОВАЛИ КУРСОР МЫШИ
  101.                 JR MAINQMO                      ;ПРОДОЛЖЕНИЕ ОПРОСА
  102.  
  103. PRESS_MOUSE     CALL OPMSPL
  104.                 AND A
  105.                 JR Z,CP_MOUSE4
  106.                 LD (LAST_K),A
  107.                 CALL TIMELP
  108.                 JR SELECT_KEY
  109.  
  110. CP_MOUSE4       CALL MOUOPT                     ;ПРОВЕРКА ПОПАДАНИЯ МЫШИ В ПРЕДЕЛЫ ТЕКУЩЕГО ОКНА
  111.                 JR C,MAINNMO                    ;НЕ ПОПАЛИ И ЕДЕМ ДАЛЕЕ
  112.                 LD E,(IX+7)                     ;ВЗЯЛИ НОМЕР ПУНКТА КУДА ПОПАЛИ МЫШЬЮ
  113.                 BIT 7,E
  114.                 JR Z,CP_MOUSE5
  115.                 LD L,(IX+8)
  116.                 LD H,(IX+9)
  117.                 LD E,(HL)
  118. CP_MOUSE5       LD D,0
  119.                 LD HL,(PRESSEDKEY)              ;АДРЕС СПИСКА ХОТКЕЕВ ТЕКУЩЕГО ОКНА
  120.                 ADD HL,DE                       ;АДРЕС ХОТКЕЯ ВЫБРАННОГО ПУНКТА
  121.                 LD DE,LAST_K
  122.                 LDI                             ;ИМИТАЦИЯ НАЖАТИЯ ЗАДАННОЙ КНОПКИ
  123.                 JR ENTER
  124.                
  125. MAINNMO         CALL PRINTTIME                  ;ОБНОВЛЕНИЕ ВРЕМЕНИ, ЕСЛИ В ОНО ОБНОВИЛОСЬ
  126.                 EI
  127.                 HALT
  128. MAINQMO         LD A,(FLAGS_KEY)
  129.                 BIT 5,A                         ;ПРОВЕРКА НАЖАТИЯ КНОПОК КЛАВИАТУРЫ
  130.                 JP Z,MAINLOP                    ;ПРОДОЛЖАЕМ ОПРОС УПРАВЛЕНИЯ
  131.                 PCALL BREAK_KEY,P_ADDONS        ;ПРОВЕРКА НА BREAK
  132.                 JR C,SELECT_KEY                 ;ЕСЛИ BREAK НЕ НАЖАТ ПРОДОЛЖАЕМ
  133. RESTART         DI
  134.                 CALL TRESTORE_CLINE
  135.                 LD A,1
  136.                 RET
  137.  
  138. SELECT_KEY      DI
  139.                 LD HL,SET_POS1
  140.                 PUSH HL
  141.                 LD HL,LAST_K
  142.                 LD A,(HL)                       ;ВЗЯЛИ НАЖАТУЮ КЛАВИШУ
  143.                 LD B,0
  144.                 LD HL,MAIN_KEYS
  145.                 LD C,(HL)                       ;КОЛИЧЕСТВО ДОСТУПНЫХ КНОПОК
  146.                 LD D,C
  147.                 INC HL
  148.                 CPIR
  149.                 JR NZ,NOMAINKEYS                ;НИЧЕГО НЕ НАШЛИ, ДАЛЕЕ СМОТРИМ КНОПКИ ТЕКУЩЕГО ОКНА
  150.                                                 ;НАЖАТО ЧТО-ТО ИЗ ГЛАВНЫХ КНОПОК, ДОСТУПНЫХ ВСЕГДА
  151.                 LD HL,ADREXEKEYS
  152.                 LD A,D                          ;КОЛИЧЕСТВО КНОПОК В ТАБЛИЦЕ -1
  153.                 SUB C                           ;ПОЛУЧИЛИ ВЫБРАННЫЙ НОМЕР
  154.                 DEC A
  155.                 ADD A,A
  156.                 ADD A,L
  157.                 LD L,A
  158.                 ADC A,H
  159.                 SUB L
  160.                 LD H,A
  161.                 LD A,(HL)
  162.                 INC HL
  163.                 LD H,(HL)
  164.                 LD L,A
  165.                 JP (HL)
  166.  
  167. ;ПРОВЕРКА ХОТКЕЕВ В ТЕКУЩЕМ ОКНЕ
  168. NOMAINKEYS      LD L,(IX+0X12)
  169.                 LD H,(IX+0X13)                  ;АДРЕС СПИСКА НАЖАТЫХ КНОПОК ТЕКУЩЕГО ОКНА
  170.                 LD C,A
  171.                 LD A,H
  172.                 OR L
  173.                 JP Z,MAINLOP                    ;ЕСЛИ СПИСКА НЕТ, ПРОДОЛЖАЕМ ОПРОС
  174.                 LD A,C
  175.                 LD C,(IX+2)
  176.                 LD E,(HL)
  177.                 INC HL
  178.                 DEC C                           ;КОЛИЧЕСТВО КНОПОК
  179.                 DEC C                           ;ВЫСОТА ОКНА -2
  180.                 LD D,C
  181.                 LD B,0
  182.                 CPIR                            ;СКАНИРОВАНИЕ СПИСКА ЗАДАННЫХ КЛАВИШ
  183.                 JR NZ,OSTAT_KEYS
  184.                 LD A,D                          ;ВЫСОТА ОКНА
  185.                 SUB C
  186.                 DEC A                           ;ПОЛУЧИЛИ НОМЕР НАЖАТОЙ КНОПКИ И -1
  187.                 BIT 7,(IX+7)
  188.                 JR Z,ENTER1
  189.                 LD L,(IX+8)
  190.                 LD H,(IX+9)
  191.                 LD (HL),A
  192.                 INC HL
  193.                 LD (HL),A
  194.                 JR ENTER
  195.  
  196. ENTER1          LD (IX+7),A                     ;НОМЕР ПУНКТА В ОКНЕ
  197.                 LD (IX+8),A                     ;НОМЕР НАЖАТОЙ КЛАВИШИ ПО УКАЗАННОМУ СПИСКУ
  198. ENTER           LD A,(FLAGS)
  199.                 AND 2
  200.                 CALL NZ,TIMELP                  ;ОБНОВЛЕНИЕ ВРЕМЕНИ ЕСЛИ ОНО ИЗМЕНИЛОСЬ
  201.                 CALL REST2X2                    ;СТЕРЛИ КУРСОР МЫШИ
  202.                 LD A,(IX+7)                     ;НОМЕР ИЗ СПИСКА КОТОРЫЙ ВЫЗВАТЬ
  203.                 BIT 7,A
  204.                 JR Z,JUMP2HL1
  205.                 LD L,(IX+8)
  206.                 LD H,(IX+9)
  207.                 LD A,(HL)
  208. JUMP2HL1        LD L,(IX+0X0E)
  209.                 LD H,(IX+0X0F)                  ;ВЗЯЛИ СПИСОК АДРЕСОВ 1 ИЗ КОТОРЫХ БУДЕМ ВЫЗЫВАТЬ
  210. JUMP2HL         ADD A,A
  211.                 ADD A,L
  212.                 LD L,A
  213.                 ADC A,H
  214.                 SUB L
  215.                 LD H,A
  216.                 LD A,(HL)
  217.                 INC HL
  218.                 LD H,(HL)
  219.                 LD L,A
  220.                 JP (HL)
  221.  
  222. OSTAT_KEYS      EX AF,AF'
  223.                 LD A,E
  224.                 SUB D
  225.                 JP Z,MAINLOP
  226.                 LD C,A
  227.                 EX AF,AF'
  228.                 CPIR
  229.                 JP NZ,MAINLOP
  230.                 LD A,E
  231.                 SUB C
  232.                 DEC A
  233.                 JR JUMP2HL1
  234.  
  235. TIMELP          CALL PRINTTIME
  236.                 LD A,0XFA
  237.                 IN A,(0XDF)                     ;КНОПКИ МЫШИ
  238.                 CPL
  239.                 AND 7
  240.                 JR NZ,TIMELP                    ;ПОКА НЕ ОТПУСТЯТ
  241.                 RET
  242.  
  243. CURSOR_UP       LD C,(IX+8)
  244.                 LD B,(IX+9)
  245.                 BIT 7,(IX+7)
  246.                 JR Z,CURSOR_UP3
  247.                 LD L,(IX+8)
  248.                 LD H,(IX+9)
  249.                 INC HL
  250.                 LD C,(HL)
  251.                 INC HL
  252.                 LD B,(HL)
  253. CURSOR_UP3      LD A,B
  254.                 OR C
  255.                 RET Z
  256.                 DEC BC
  257.                 BIT 7,(IX+7)
  258.                 JR Z,CURSOR_UP2
  259.                 LD (HL),B
  260.                 DEC HL
  261.                 LD (HL),C
  262.                 DEC HL
  263.                 LD A,(HL)
  264.                 AND A
  265.                 JR Z,CURSOR_UP1
  266.                 DEC (HL)
  267.                 RET
  268.  
  269. CURSOR_UP2      LD (IX+8),C
  270.                 LD (IX+9),B
  271.                 LD A,(IX+7)
  272.                 AND A
  273.                 JR Z,CURSOR_UP1
  274.                 DEC (IX+7)
  275.                 RET
  276.  
  277. CURSOR_UP1      CALL REST2X2
  278.                 CALL RESTORE_CLINE
  279.                 CALL SCRDN
  280.                 LD E,(IX+1)
  281.                 INC E
  282. DOWN1           LD D,(IX+0)
  283.                 INC D
  284.                 INC D
  285.                 LD BC,WIN_P3
  286.                 LD A,PAGE_TEMP
  287.                 OUT (C),A
  288.                 LD L,(IX+8)
  289.                 LD H,(IX+9)
  290.                 BIT 7,(IX+7)
  291.                 JR Z,DOWN3
  292.                 DEC D
  293.                 INC HL
  294.                 LD A,(HL)
  295.                 INC HL
  296.                 LD H,(HL)
  297.                 LD L,A
  298. DOWN3           LD BC,CPU3
  299.                 ADD HL,HL
  300.                 ADD HL,BC
  301.                 LD C,(HL)
  302.                 INC HL
  303.                 LD B,(HL)
  304.                 PUSH DE
  305.                 PCALL POSTF06,P_RST8
  306.                 PCALL READ_DIR,P_RST8
  307.                 LD DE,FILES_EXT
  308.                 PCALL CP_EXT,P_RST8
  309.                 EX AF,AF'
  310.                 LD BC,0X0B
  311.                 ADD HL,BC
  312.                 LD A,(HL)
  313.                 SBC HL,BC
  314.                 AND 0X10
  315.                 LD A,BLUE<<3+WHITE+BR_INK
  316.                 LD (OUT_NAME_FILE+1),A          ;ЕСЛИ ДИРЕКТОРИЯ ТО ЦВЕТ БЕЛЫЙ
  317.                 JR NZ,DOWN7
  318.                 EX AF,AF'
  319.                 LD L,A
  320.                 INC A
  321.                 JR Z,DOWN6
  322.                 LD A,L
  323. DOWN6           LD HL,COLOR_EXT
  324.                 ADD A,L
  325.                 LD L,A
  326.                 ADC A,H
  327.                 SUB L
  328.                 LD A,(HL)
  329.                 ADD A,BLUE<<3+BR_INK
  330.                 LD (OUT_NAME_FILE+1),A
  331. DOWN7           LD HL,BUF_256
  332.                 PCALL GET_LONGNAME,P_RST8
  333.                 POP DE
  334.                 CALL FILENAME8_3
  335.                 JP SET_ADR_ATR
  336.  
  337. CURSOR_DOWN     LD L,(IX+0X0A)
  338.                 LD H,(IX+0X0B)
  339.                 BIT 6,(IX+7)
  340.                 JR Z,CURSOR_DOWN6
  341.                 LD L,(IX+8)                     ;ПОЛУЧЕНИЕ КОЛИЧЕСТВА ПУНКТОВ          
  342.                 LD H,(IX+9)                     ;ИЗ УКАЗАННОГО АДРЕСА
  343.                 INC HL
  344.                 INC HL
  345.                 INC HL
  346.                 LD A,(HL)
  347.                 INC HL
  348.                 LD H,(HL)
  349.                 LD L,A                          ;КОЛИЧЕСТВО ПУНКТОВ В ЭТОМ МЕНЮ
  350. CURSOR_DOWN6    LD A,H
  351.                 OR L
  352.                 RET Z
  353.                 BIT 7,(IX+7)
  354.                 JR Z,CURSOR_DOWN2
  355.                 LD E,(IX+8)
  356.                 LD D,(IX+9)
  357.                 EX DE,HL
  358.                 INC HL
  359.                 LD C,(HL)
  360.                 INC HL
  361.                 LD B,(HL)
  362.                 EX DE,HL
  363.                 JR CURSOR_DOWN3
  364.  
  365. CURSOR_DOWN2    LD C,(IX+8)
  366.                 LD B,(IX+9)
  367. CURSOR_DOWN3    SCF
  368.                 SBC HL,BC
  369.                 RET Z
  370.                 INC BC
  371.                 BIT 7,(IX+7)
  372.                 JR Z,CURSOR_DOWN4
  373.                 EX DE,HL
  374.                 LD (HL),B
  375.                 DEC HL
  376.                 LD (HL),C
  377.                 DEC HL
  378.                 LD A,(IX+2)
  379.                 SUB 3
  380.                 CP (HL)
  381.                 JR Z,CURSOR_DOWN1
  382.                 INC (HL)
  383.                 RET
  384.  
  385. CURSOR_DOWN4    LD (IX+8),C
  386.                 LD (IX+9),B
  387.                 LD A,(IX+2)
  388.                 SUB 3
  389.                 CP (IX+7)
  390.                 JR Z,CURSOR_DOWN1
  391.                 INC (IX+7)
  392.                 RET
  393.  
  394. CURSOR_DOWN1    CALL REST2X2
  395.                 CALL RESTORE_CLINE
  396.                 CALL SCRUP
  397.                 LD A,(IX+1)
  398.                 ADD A,(IX+2)
  399.                 SUB 2
  400.                 LD E,A
  401.                 JP DOWN1
  402.  
  403. GET_XY          LD L,(IX+8)
  404.                 LD H,(IX+9)             ;ТЕКУЩИЙ НОМЕР
  405.                 BIT 7,(IX+7)
  406.                 JR Z,GETXY1
  407.                 INC HL
  408.                 LD E,(HL)
  409.                 INC HL
  410.                 LD D,(HL)               ;ТЕКУЩИЙ НОМЕР ИЗ УКАЗАННОГО АДРЕСА
  411.                 EX DE,HL
  412.                 BIT 6,(IX+7)
  413.                 JR Z,GETXY1
  414.                 EX DE,HL
  415.                 INC HL
  416.                 LD A,(HL)
  417.                 INC HL
  418.                 LD H,(HL)
  419.                 LD L,A                  ;КОЛИЧЕСТВО ПУНКТОВ ИЗ УКАЗАННОГО АДРЕСА
  420.                 EX DE,HL
  421.                 JR GETXY2
  422.  
  423. GETXY1          LD E,(IX+0X0A)
  424.                 LD D,(IX+0X0B)          ;КОЛ-ВО ПУНКТОВ
  425. GETXY2          LD A,(IX+2)
  426.                 SUB 3
  427.                 LD C,A                  ;КОЛИЧЕСТВО ПУНКТОВ В ВЫСОТЕ ОКНА
  428.                 LD B,0
  429.                 LD A,D
  430.                 OR E
  431.                 LD A,C
  432.                 RET
  433.  
  434. ;ПЕРЕМЕЩЕНИЕ НА СТРАНИЦУ ВВЕРХ
  435. PAGEUP          CALL GET_XY
  436.                 RET Z
  437.                 XOR A
  438.                 SBC HL,BC
  439.                 EX DE,HL
  440.                 JR NC,PDUN0
  441. PDU0            LD D,A
  442.                 LD E,A
  443.                 JR PDUN0
  444.  
  445. ;ПЕРЕМЕЩЕНИЕ НА СТРАНИЦУ ВНИЗ
  446. PAGEDN          CALL GET_XY
  447.                 RET Z
  448.                 EX DE,HL
  449.                 AND A
  450.                 SBC HL,BC
  451.                 ADD HL,BC
  452.                 EX DE,HL
  453.                 JR NC,PDN00
  454.                 DEC DE
  455.                 LD A,E
  456.                 JR PDUN0
  457.  
  458. PDN00           ADD HL,BC
  459.                 EX DE,HL
  460.                 SBC HL,DE
  461.                 ADD HL,DE
  462.                 JR Z,PDUN1
  463.                 JR NC,PDUN0
  464. PDUN1           EX DE,HL
  465.                 DEC DE
  466. PDUN0           BIT 7,(IX+7)
  467.                 JR Z,PDUN2
  468.                 LD L,(IX+8)
  469.                 LD H,(IX+9)
  470.                 LD (HL),A
  471.                 INC HL
  472.                 LD (HL),E
  473.                 INC HL
  474.                 LD (HL),D
  475.                 JR PDUN3
  476.  
  477. PDUN2           LD (IX+7),A
  478.                 LD (IX+0X0A),E
  479.                 LD (IX+0X0B),D
  480. PDUN3           CALL REST2X2
  481.                 JP COLOR_CURSOR
  482. ;               CALL OUT_TEK_DIR
  483. ;               JP DRAW_MOUSE
  484. ;               RET
  485.  
  486. PRINTTIME       DI
  487.                 LD H,0X0C
  488.                 PCALL READCMOS,P_ADDONS
  489.                 AND 0X10
  490.                 RET Z                           ;ЕСЛИ ВРЕМЯ ЕЩЕ НЕ ОБНОВИЛОСЬ, ВЫХОДИМ НИЧЕГО НЕ ВЫВОДЯ
  491.                 LD BC,TXT_TIME                  ;ЧТЕНИЕ И ПРЕОБРАЗОВАНИЕ ВРЕМЕНИ
  492.                 LD H,4
  493.                 PCALL READCMOS,P_ADDONS         ;ПРОЧИТАЛИ ЧАСЫ
  494.                 CALL BYTE2TXT                   ;СКОНВЕРТИЛИ ЧАСЫ С УКЛАДКОЙ В БУФЕР
  495.                 LD A,(BC)
  496.                 XOR 0X1A                        ;КОНВЕРСИЯ МИГАЮЩЕГО ДВОЕТОЧИЯ
  497.                 LD (BC),A
  498.                 INC BC
  499.                 LD H,2
  500.                 PCALL READCMOS,P_ADDONS         ;ПРОЧИТАЛИ МИНУТЫ
  501.                 CALL BYTE2TXT                   ;СКОНВЕРТИЛИ ЧАСЫ С УКЛАДКОЙ В БУФЕР
  502.                 LD A,(BC)
  503.                 XOR 0X1A                        ;КОНВЕРСИЯ МИГАЮЩЕГО ДВОЕТОЧИЯ
  504.                 LD (BC),A
  505.                 INC BC
  506.                 LD H,0
  507.                 PCALL READCMOS,P_ADDONS         ;ПРОЧИТАЛИ СЕКУНДЫ
  508.                 CALL BYTE2TXT
  509.                 LD BC,TXT_DATA                  ;ДАЛЕЕ ЧТЕНИЕ И ПРЕОБРАЗОВАНИЕ ДАТЫ
  510.                 LD H,7
  511.                 PCALL READCMOS,P_ADDONS
  512.                 CALL BYTE2TXT
  513.                 INC BC
  514.                 LD H,8
  515.                 PCALL READCMOS,P_ADDONS
  516.                 CALL BYTE2TXT
  517.                 INC BC
  518.                 LD H,9
  519.                 PCALL READCMOS,P_ADDONS
  520.                 CALL BYTE2TXT
  521.                 LD HL,BUFF_TIME                 ;ПЕЧАТАЕМ ВРЕМЯ ИЗ БУФЕРА
  522.                 JP ITPRINT_MESSAGE
  523.  
  524. ;ПЕРЕВОД "A" В ДЕСЯТИЧКУ И В ТЕКСТ
  525. A2TXT           PUSH HL
  526.                 LD L,A
  527.                 LD H,0
  528.                 LD DE,10
  529.                 XOR A
  530.                 DEC A
  531.                 INC A
  532.                 SBC HL,DE
  533.                 JR NC,$-3
  534.                 ADD HL,DE
  535.                 ADD A,"0"
  536.                 LD D,A
  537.                 LD A,L
  538.                 ADD A,"0"
  539.                 POP HL
  540.                 LD (HL),D
  541.                 INC HL
  542.                 LD (HL),A
  543.                 INC HL
  544.                 RET
  545.  
  546. BYTE2TXT        LD L,A
  547.                 LD H,"0"
  548.                 RRCA
  549.                 RRCA
  550.                 RRCA
  551.                 RRCA
  552.                 AND 0X0F
  553.                 ADD A,H
  554.                 LD (BC),A
  555.                 INC BC
  556.                 LD A,L
  557.                 AND 0X0F
  558.                 ADD A,H
  559.                 LD (BC),A
  560.                 INC BC
  561.                 RET
  562.  
  563. ;ВЫХОД ИЗ MAGIC
  564. CONTINUE_PROG   DI
  565.                 LD SP,(OLD_STACK)
  566.                 XOR A
  567.                 RET
  568.  
  569. ;ПЕРЕЗАПУСК MAGIC МЕНЮ С ПОЛНОЙ ПЕРЕРИСОВКОЙ ЭКРАНА
  570. RESTART_MAIN    DI
  571.                 LD SP,(OLD_STACK)
  572.                 LD A,1
  573.                 RET
  574.  
  575. ;ВЫХОД ИЗ ОТЛАДЧИКА
  576. TRACER_DBG      DI
  577.                 LD SP,(OLD_STACK)
  578.                 LD A,2
  579.                 RET
  580.  
  581. SETUP           LD IX,SETUP_MENU
  582.                 CALL ITWINW
  583.                 JP SET_ADR_ATR
  584.  
  585. ;ПЕРЕБОР TURBO РЕЖИМОВ С ЗАПИСЬЮ В CMOS И ИЗМЕНЕНИЕМ ПОСЛЕ ВЫХОДА ИЗ NMI
  586. ;0-7MHZ 1-3,5MHZ 2-14,0MHZ
  587. SET_TURBO       DI
  588.                 LD H,CMOS_BYTE_01
  589.                 PCALL READCMOS,P_ADDONS
  590.                 LD E,L                          ;TURBO AND MEMORY MODE
  591.                 LD H,CMOS_BYTE_00
  592.                 PCALL READCMOS,P_ADDONS
  593.                 LD D,L                          ;TURBO 14
  594.                 RLCA
  595.                 LD C,A
  596.                 LD A,E
  597.                 RLCA
  598.                 LD A,C
  599.                 RLA
  600.                 AND 3
  601.                 INC A                           ;СМЕНИЛИ TURBO РЕЖИМ
  602.                 CP 3
  603.                 JR C,SETTURBO1
  604.                 XOR A                           ;ЕСЛИ ПЕРЕШЛИ ЧЕРЕЗ 0, ТО ВЫСТАВИЛИ РЕЖИМ 14MHZ
  605. SETTURBO1       LD C,A
  606.                 PUSH BC
  607.                 AND A
  608.                 RES 7,E                         ;TURBO 7        0
  609.                 RES 7,D                         ;TURBO 14=7MHZ  0
  610.                 JR Z,SETTURBO3
  611.                 DEC A
  612.                 SET 7,E                         ;TURBO 7        1
  613.                 RES 7,D                         ;TURBO 14=3,5   0
  614.                 JR Z,SETTURBO3
  615.                 RES 7,E                         ;TURBO 7        0
  616.                 SET 7,D                         ;TURBO 14=14    1
  617. SETTURBO3       LD H,CMOS_BYTE_00
  618.                 LD L,D
  619.                 PUSH DE
  620.                 PCALL IWRITECMOS,P_ADDONS
  621.                 POP DE
  622.                 LD H,CMOS_BYTE_01
  623.                 LD L,E
  624.                 PCALL IWRITECMOS,P_ADDONS
  625.                 POP BC
  626.                 LD A,C
  627.                 AND A
  628.                 LD DE,%0000 0000 0000 0000      ;7MHZ
  629.                 JR Z,SETTURBO4
  630.                 DEC A
  631.                 LD DE,%0001 0000 0000 0000      ;3,5MHZ
  632.                 JR Z,SETTURBO4
  633.                 LD DE,%0000 0000 0000 1000      ;14MHZ
  634. SETTURBO4       LD A,(B_PORT77)
  635.                 AND %11110111
  636.                 OR E
  637.                 LD (B_PORT77),A
  638.                 LD A,(N_EFF7)
  639.                 AND %11101111
  640.                 OR D
  641.                 LD (N_EFF7),A
  642.                 CALL SETUP4SEL
  643.                 LD HL,TXT_SETUPMENU
  644.                 JP ITPRINT_MESSAGE
  645.  
  646. ;ПЕРЕБОР РЕЖИМОВ ПАМЯТИ С ЗАПИСЬЮ В CMOS И ИЗМЕНЕНИЕМ ПОСЛЕ ВЫХОДА ИЗ NMI
  647. SET_MEMORY      DI
  648.                 LD H,CMOS_BYTE_01
  649.                 PCALL READCMOS,P_ADDONS
  650.                 AND 3
  651.                 INC A
  652.                 CP 3
  653.                 JR C,SETMEMORY1
  654.                 XOR A
  655. SETMEMORY1      LD C,A
  656.                 LD A,L
  657.                 AND %11111100
  658.                 OR C
  659.                 LD L,A
  660.                 PCALL IWRITECMOS,P_ADDONS
  661.                 CALL SETUP4SEL
  662.                 LD HL,TXT_SETUPMENU
  663.                 JP ITPRINT_MESSAGE
  664.  
  665. ;ИЗМЕНЕНИЕ ТЕКСТА В МЕНЮ
  666. SETUP4SEL       DI
  667.                 LD H,CMOS_BYTE_01
  668.                 PCALL READCMOS,P_ADDONS
  669.                 LD E,L                          ;TURBO AND MEMORY MODE
  670.                 LD H,CMOS_BYTE_00
  671.                 PCALL READCMOS,P_ADDONS
  672.                 LD D,L                          ;TURBO 14
  673.                 RLCA
  674.                 LD C,A
  675.                 LD A,E
  676.                 RLCA
  677.                 LD A,C
  678.                 RLA
  679.                 AND 3
  680.                 CP 3
  681.                 JR C,SETUP4SEL1
  682.                 DEC A
  683. SETUP4SEL1      ADD A,A
  684.                 ADD A,A
  685.                 LD HL,TXT_TURBO
  686.                 LD C,A
  687.                 LD B,0
  688.                 ADD HL,BC
  689.                 PUSH DE
  690.                 LD DE,TURBO_MODE
  691.                 LDI
  692.                 LDI
  693.                 LDI
  694.                 LDI
  695.                 EX DE,HL
  696.                 LD (HL),2
  697.                 POP DE
  698.                 LD A,E
  699.                 AND 3
  700.                 LD C,A
  701.                 LD B,0
  702.                 LD HL,TXT_MEMORY
  703.                 ADD HL,BC
  704.                 ADD HL,BC
  705.                 ADD HL,BC
  706.                 LD DE,MEMORY_MODE
  707.                 LDI
  708.                 LDI
  709.                 LDI
  710.                 EX DE,HL
  711.                 LD (HL),2
  712.                 RET
  713.  
  714. ;ОЖИДАНИЕ НАЖАТИЯ И ОТПУСКАНИЯ ЛЮБОЙ КЛАВИШИ
  715. ANY_KEYS        XOR A
  716.                 IN A,(0XFE)
  717.                 CPL
  718.                 AND 0X1F
  719.                 JR Z,ANY_KEYS
  720. ANYKEYS1        XOR A
  721.                 IN A,(0XFE)
  722.                 CPL
  723.                 AND 0X1F
  724.                 JR NZ,ANYKEYS1
  725.                 RET
  726.