Subversion Repositories pentevo

Rev

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

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