Subversion Repositories pentevo

Rev

Rev 838 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed | ?url?

  1.  
  2. ; LAST UPDATE: 09.11.2022 savelij
  3.  
  4. ITSELECTOR      LD HL,FLAGS
  5.                 RES B_MOUSE_PRESENT,(HL)        ;ПРИНУДИТЕЛЬНОЕ ОТКЛЮЧЕНИЕ МЫШИ ДЛЯ ТЕКСТМОДА
  6.                 SET B_VIDEO_MODE,(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 B_VIDEO_MODE,(HL)
  14.                 CALL DETECTMOUSE
  15.                 LD (OLD_STACK),SP
  16. SELECTOR        EI     
  17.                 LD A,(FLAGS)
  18.                 AND M_MOUSE_PRESENT                     ;ПРОВЕРКА НАЛИЧИЯ МЫШИ
  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 M_MOUSE_PRESENT             ;ПРОВЕРКА НАЛИЧИЯ МЫШИ
  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.                 ROMCALL BREAK_KEY,ROM_RST82     ;ПРОВЕРКА НА 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 M_MOUSE_PRESENT
  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.                 EVOPORT WIN_P3,RAM_TEMP2
  284.                 LD L,(IX+8)
  285.                 LD H,(IX+9)
  286.                 BIT 7,(IX+7)
  287.                 JR Z,DOWN3
  288.                 DEC D
  289.                 INC HL
  290.                 LD A,(HL)
  291.                 INC HL
  292.                 LD H,(HL)
  293.                 LD L,A
  294. DOWN3           LD BC,CPU3
  295.                 ADD HL,HL
  296.                 ADD HL,BC
  297.                 LD C,(HL)
  298.                 INC HL
  299.                 LD B,(HL)
  300.                 PUSH DE
  301.                 ROMCALL POSTF06,ROM_RST83
  302.                 ROMCALL READ_DIR,ROM_RST83
  303.                 LD DE,FILES_EXT
  304.                 ROMCALL CP_EXT,ROM_RST83
  305.                 EX AF,AF'
  306.                 LD BC,0X0B
  307.                 ADD HL,BC
  308.                 LD A,(HL)
  309.                 SBC HL,BC
  310.                 AND 0X10
  311.                 LD A,BLUE<<3+WHITE+BR_INK
  312.                 LD (OUT_NAME_FILE+1),A          ;ЕСЛИ ДИРЕКТОРИЯ ТО ЦВЕТ БЕЛЫЙ
  313.                 JR NZ,DOWN7
  314.                 EX AF,AF'
  315.                 LD L,A
  316.                 INC A
  317.                 JR Z,DOWN6
  318.                 LD A,L
  319. DOWN6           LD HL,COLOR_EXT
  320.                 ADD A,L
  321.                 LD L,A
  322.                 ADC A,H
  323.                 SUB L
  324.                 LD A,(HL)
  325.                 ADD A,BLUE<<3+BR_INK
  326.                 LD (OUT_NAME_FILE+1),A
  327. DOWN7           LD HL,BUF_256
  328.                 ROMCALL GET_LONGNAME,ROM_RST83
  329.                 POP DE
  330.                 CALL FILENAME8_3
  331.                 JP SET_ADR_ATR
  332.  
  333. CURSOR_DOWN     LD L,(IX+0X0A)
  334.                 LD H,(IX+0X0B)                  ;КОЛИЧЕСТВО ПУНКТОВ
  335.                 BIT 6,(IX+7)
  336.                 JR Z,CURSOR_DOWN6
  337.                 LD L,(IX+8)                     ;ПОЛУЧЕНИЕ КОЛИЧЕСТВА ПУНКТОВ          
  338.                 LD H,(IX+9)                     ;ИЗ УКАЗАННОГО АДРЕСА
  339.                 INC HL
  340.                 INC HL
  341.                 INC HL
  342.                 LD A,(HL)
  343.                 INC HL
  344.                 LD H,(HL)
  345.                 LD L,A                          ;КОЛИЧЕСТВО ПУНКТОВ В ЭТОМ МЕНЮ
  346. CURSOR_DOWN6    LD A,H
  347.                 OR L
  348.                 RET Z
  349.                 BIT 7,(IX+7)
  350.                 JR Z,CURSOR_DOWN2
  351.                 LD E,(IX+8)
  352.                 LD D,(IX+9)                     ;ТЕКУЩИЙ НОМЕР
  353.                 EX DE,HL
  354.                 INC HL
  355.                 LD C,(HL)
  356.                 INC HL
  357.                 LD B,(HL)
  358.                 EX DE,HL
  359.                 JR CURSOR_DOWN3
  360.  
  361. CURSOR_DOWN2    LD C,(IX+8)
  362.                 LD B,(IX+9)
  363. CURSOR_DOWN3    SCF
  364.                 SBC HL,BC
  365.                 RET Z
  366.                 INC BC
  367.                 BIT 7,(IX+7)
  368.                 JR Z,CURSOR_DOWN4
  369.                 EX DE,HL
  370.                 LD (HL),B
  371.                 DEC HL
  372.                 LD (HL),C
  373.                 DEC HL
  374.                 LD A,(IX+2)
  375.                 SUB 3
  376.                 CP (HL)
  377.                 JR Z,CURSOR_DOWN1
  378.                 INC (HL)
  379.                 RET
  380.  
  381. CURSOR_DOWN4    LD (IX+8),C
  382.                 LD (IX+9),B
  383.                 LD A,(IX+2)
  384.                 SUB 3
  385.                 CP (IX+7)
  386.                 JR Z,CURSOR_DOWN1
  387.                 INC (IX+7)
  388.                 RET
  389.  
  390. CURSOR_DOWN1    CALL REST2X2
  391.                 CALL RESTORE_CLINE
  392.                 CALL SCRUP
  393.                 LD A,(IX+1)
  394.                 ADD A,(IX+2)
  395.                 SUB 2
  396.                 LD E,A
  397.                 JP DOWN1
  398.  
  399. GET_XY          LD L,(IX+8)
  400.                 LD H,(IX+9)             ;ТЕКУЩИЙ НОМЕР
  401.                 BIT 7,(IX+7)
  402.                 JR Z,GETXY1
  403. ;ПОЛУЧЕНИЕ НОМЕРА ТЕКУЩЕГО ПУНКТА ИЗ УКАЗАТЕЛЯ
  404.                 INC HL
  405.                 LD E,(HL)
  406.                 INC HL
  407.                 LD D,(HL)               ;ТЕКУЩИЙ НОМЕР ИЗ УКАЗАННОГО АДРЕСА
  408.                 EX DE,HL
  409.                 BIT 6,(IX+7)
  410.                 JR Z,GETXY1
  411. ;ПОЛУЧЕНИЕ КОЛИЧЕСТВА ПУНКТОВ ИЗ УККАЗАТЕЛЯ
  412.                 EX DE,HL
  413.                 INC HL
  414.                 LD A,(HL)
  415.                 INC HL
  416.                 LD H,(HL)
  417.                 LD L,A                  ;КОЛИЧЕСТВО ПУНКТОВ ИЗ УКАЗАННОГО АДРЕСА
  418.                 EX DE,HL
  419.                 JR GETXY2
  420.  
  421. GETXY1          LD E,(IX+0X0A)
  422.                 LD D,(IX+0X0B)          ;КОЛ-ВО ПУНКТОВ
  423. GETXY2          LD A,(IX+2)
  424.                 SUB 3
  425.                 LD C,A                  ;КОЛИЧЕСТВО ПУНКТОВ В ВЫСОТЕ ОКНА
  426.                 LD B,0
  427.                 LD A,D
  428.                 OR E
  429.                 LD A,C
  430.                 RET
  431.  
  432. ;ПЕРЕМЕЩЕНИЕ НА СТРАНИЦУ ВВЕРХ
  433. PAGEUP          CALL GET_XY
  434.                 RET Z
  435.                 XOR A
  436.                 SBC HL,BC
  437.                 EX DE,HL
  438.                 JR NC,PDUN0
  439. PDU0            LD D,A
  440.                 LD E,A
  441.                 JR PDUN0
  442.  
  443. ;ПЕРЕМЕЩЕНИЕ НА СТРАНИЦУ ВНИЗ
  444. PAGEDN          CALL GET_XY
  445.                 RET Z
  446.                 EX DE,HL
  447.                 AND A
  448.                 SBC HL,BC
  449.                 ADD HL,BC
  450.                 EX DE,HL
  451.                 JR NC,PDN00
  452.                 DEC DE
  453.                 LD A,E
  454.                 JR PDUN0
  455.  
  456. PDN00           ADD HL,BC
  457.                 EX DE,HL
  458.                 SBC HL,DE
  459.                 ADD HL,DE
  460.                 JR Z,PDUN1
  461.                 JR NC,PDUN0
  462. PDUN1           EX DE,HL
  463.                 DEC DE
  464. PDUN0           BIT 7,(IX+7)
  465.                 JR Z,PDUN2
  466.                 LD L,(IX+8)
  467.                 LD H,(IX+9)
  468.                 LD (HL),A
  469.                 INC HL
  470.                 LD (HL),E
  471.                 INC HL
  472.                 LD (HL),D
  473.                 JR PDUN3
  474.  
  475. PDUN2           LD (IX+7),A
  476.                 LD (IX+8),E
  477.                 LD (IX+9),D
  478. PDUN3           CALL RESTORE_CLINE
  479.                 JP OUT_TEK_DIR
  480.  
  481. PRINTTIME       DI
  482.                 LD H,0X0C
  483.                 CALL READCMOS
  484.                 AND 0X10
  485.                 RET Z                           ;ЕСЛИ ВРЕМЯ ЕЩЕ НЕ ОБНОВИЛОСЬ, ВЫХОДИМ НИЧЕГО НЕ ВЫВОДЯ
  486.                 LD BC,TXT_TIME                  ;ЧТЕНИЕ И ПРЕОБРАЗОВАНИЕ ВРЕМЕНИ
  487.                 LD H,4
  488.                 CALL READCMOS                   ;ПРОЧИТАЛИ ЧАСЫ
  489.                 CALL BYTE2TXT                   ;СКОНВЕРТИЛИ ЧАСЫ С УКЛАДКОЙ В БУФЕР
  490.                 LD A,(BC)
  491.                 XOR 0X1A                        ;КОНВЕРСИЯ МИГАЮЩЕГО ДВОЕТОЧИЯ
  492.                 LD (BC),A
  493.                 INC BC
  494.                 LD H,2
  495.                 CALL READCMOS                   ;ПРОЧИТАЛИ МИНУТЫ
  496.                 CALL BYTE2TXT                   ;СКОНВЕРТИЛИ ЧАСЫ С УКЛАДКОЙ В БУФЕР
  497.                 LD A,(BC)
  498.                 XOR ':'-' '                     ;КОНВЕРСИЯ МИГАЮЩЕГО ДВОЕТОЧИЯ
  499.                 LD (BC),A
  500.                 INC BC
  501.                 LD H,0
  502.                 CALL READCMOS                   ;ПРОЧИТАЛИ СЕКУНДЫ
  503.                 CALL BYTE2TXT
  504.                 LD BC,TXT_DATA                  ;ДАЛЕЕ ЧТЕНИЕ И ПРЕОБРАЗОВАНИЕ ДАТЫ
  505.                 LD H,7
  506.                 CALL READCMOS
  507.                 CALL BYTE2TXT
  508.                 INC BC
  509.                 LD H,8
  510.                 CALL READCMOS
  511.                 CALL BYTE2TXT
  512.                 INC BC
  513.                 LD H,9
  514.                 CALL READCMOS
  515.                 CALL BYTE2TXT
  516.                 LD HL,BUFF_TIME                 ;ПЕЧАТАЕМ ВРЕМЯ ИЗ БУФЕРА
  517.                 JP ITPRINT_MESSAGE
  518.  
  519. ;ПЕРЕВОД "A" В ДЕСЯТИЧКУ И В ТЕКСТ
  520. A2TXT           PUSH HL
  521.                 LD L,A
  522.                 LD H,0
  523.                 LD DE,10
  524.                 XOR A
  525.                 DEC A
  526.                 INC A
  527.                 SBC HL,DE
  528.                 JR NC,$-3
  529.                 ADD HL,DE
  530.                 ADD A,"0"
  531.                 LD D,A
  532.                 LD A,L
  533.                 ADD A,"0"
  534.                 POP HL
  535.                 LD (HL),D
  536.                 INC HL
  537.                 LD (HL),A
  538.                 INC HL
  539.                 RET
  540.  
  541. BYTE2TXT        LD L,A
  542.                 LD H,"0"
  543.                 RRCA
  544.                 RRCA
  545.                 RRCA
  546.                 RRCA
  547.                 AND 0X0F
  548.                 ADD A,H
  549.                 LD (BC),A
  550.                 INC BC
  551.                 LD A,L
  552.                 AND 0X0F
  553.                 ADD A,H
  554.                 LD (BC),A
  555.                 INC BC
  556.                 RET
  557.  
  558. ;ВЫХОД ИЗ MAGIC
  559. CONTINUE_PROG   DI
  560.                 LD SP,(OLD_STACK)
  561.                 XOR A
  562.                 RET
  563.  
  564. ;ПЕРЕЗАПУСК MAGIC МЕНЮ С ПОЛНОЙ ПЕРЕРИСОВКОЙ ЭКРАНА
  565. RESTART_MAIN    DI
  566.                 LD SP,(OLD_STACK)
  567.                 LD A,1
  568.                 RET
  569.  
  570. ;ВЫХОД ИЗ ОТЛАДЧИКА
  571. TRACER_DBG      DI
  572.                 LD SP,(OLD_STACK)
  573.                 LD A,2
  574.                 RET
  575.  
  576. SETUP           LD IX,SETUP_MENU
  577.                 CALL ITWINW
  578.                 JP SET_ADR_ATR
  579.  
  580. ;ПЕРЕБОР TURBO РЕЖИМОВ С ЗАПИСЬЮ В CMOS И ИЗМЕНЕНИЕМ ПОСЛЕ ВЫХОДА ИЗ NMI
  581. ;0-7MHZ 1-3,5MHZ 2-14,0MHZ
  582. SET_TURBO       DI
  583.                 LD H,CMOS_BYTE_01
  584.                 CALL READCMOS
  585.                 LD E,L                          ;TURBO AND MEMORY MODE
  586.                 LD H,CMOS_BYTE_00
  587.                 CALL READCMOS
  588.                 LD D,L                          ;TURBO 14
  589.                 RLCA
  590.                 LD C,A
  591.                 LD A,E
  592.                 RLCA
  593.                 LD A,C
  594.                 RLA
  595.                 AND 3
  596.                 INC A                           ;СМЕНИЛИ TURBO РЕЖИМ
  597.                 CP 3
  598.                 JR C,SETTURBO1
  599.                 XOR A                           ;ЕСЛИ ПЕРЕШЛИ ЧЕРЕЗ 0, ТО ВЫСТАВИЛИ РЕЖИМ 14MHZ
  600. SETTURBO1       LD C,A
  601.                 PUSH BC
  602.                 AND A
  603.                 RES 7,E                         ;TURBO 7        0
  604.                 RES 7,D                         ;TURBO 14=7MHZ  0
  605.                 JR Z,SETTURBO3
  606.                 DEC A
  607.                 SET 7,E                         ;TURBO 7        1
  608.                 RES 7,D                         ;TURBO 14=3,5   0
  609.                 JR Z,SETTURBO3
  610.                 RES 7,E                         ;TURBO 7        0
  611.                 SET 7,D                         ;TURBO 14=14    1
  612. SETTURBO3       LD H,CMOS_BYTE_00
  613.                 LD L,D
  614.                 PUSH DE
  615.                 CALL IWRITECMOS
  616.                 POP DE
  617.                 LD H,CMOS_BYTE_01
  618.                 LD L,E
  619.                 CALL IWRITECMOS
  620.                 POP BC
  621.                 LD A,C
  622.                 AND A
  623.                 LD DE,%0000000000000000         ;7MHZ
  624.                 JR Z,SETTURBO4
  625.                 DEC A
  626.                 LD DE,%0001000000000000         ;3,5MHZ
  627.                 JR Z,SETTURBO4
  628.                 LD DE,%0000000000001000         ;14MHZ
  629. SETTURBO4       LD A,(B_PORT77)
  630.                 AND %11110111
  631.                 OR E
  632.                 LD (B_PORT77),A
  633.                 LD A,(N_EFF7)
  634.                 AND %11101111
  635.                 OR D
  636.                 LD (N_EFF7),A
  637. SETANDPRINT     CALL SETUP4SEL
  638.                 LD HL,TXT_SETUPMENU
  639.                 JP ITPRINT_MESSAGE
  640.  
  641. ;ПЕРЕБОР РЕЖИМОВ ПАМЯТИ С ЗАПИСЬЮ В CMOS И ИЗМЕНЕНИЕМ ПОСЛЕ ВЫХОДА ИЗ NMI
  642. SET_MEMORY      DI
  643.                 LD H,CMOS_BYTE_01
  644.                 CALL READCMOS
  645.                 AND 3
  646.                 INC A
  647.                 CP 3
  648.                 JR C,SETMEMORY1
  649.                 XOR A
  650. SETMEMORY1      LD C,A
  651.                 LD A,L
  652.                 AND %11111100
  653.                 OR C
  654.                 LD L,A
  655.                 CALL IWRITECMOS
  656.                 JR SETANDPRINT
  657.  
  658. ;ВКЛЮЧЕНИЕ/ВЫКЛЮЧЕНИЕ РЕЗИДЕНТА HONEY COMANDER
  659. SET_REZIDENT    DI
  660.                 LD H,CMOS_BYTE_01
  661.                 CALL READCMOS
  662.                 XOR M_REZIDENT
  663.                 LD L,A
  664.                 CALL IWRITECMOS
  665.                 JR SETANDPRINT
  666.  
  667. KILL_REZID      DI
  668.                 LD H,CMOS_BYTE_03
  669.                 CALL READCMOS
  670.                 XOR M_KILL_REZIDENT
  671.                 LD L,A
  672.                 CALL IWRITECMOS
  673.                 JR SETANDPRINT
  674.  
  675. ;ИЗМЕНЕНИЕ ТЕКСТА В МЕНЮ
  676. SETUP4SEL       DI
  677.                 LD H,CMOS_BYTE_01
  678.                 CALL READCMOS
  679.                 LD E,L                          ;TURBO AND MEMORY MODE
  680.                 LD H,CMOS_BYTE_00
  681.                 CALL READCMOS
  682.                 LD D,L                          ;TURBO 14
  683.                 RLCA
  684.                 LD C,A
  685.                 LD A,E
  686.                 RLCA
  687.                 LD A,C
  688.                 RLA
  689.                 AND 3
  690.                 CP 3
  691.                 JR C,SETUP4SEL1
  692.                 DEC A
  693. SETUP4SEL1      ADD A,A
  694.                 ADD A,A
  695.                 LD HL,TXT_TURBO
  696.                 LD C,A
  697.                 LD B,0
  698.                 ADD HL,BC
  699.                 PUSH DE
  700.                 LD DE,TURBO_MODE
  701.                 LDI
  702.                 LDI
  703.                 LDI
  704.                 LDI
  705.                 EX DE,HL
  706.                 LD (HL),2
  707.                 POP DE
  708.                 PUSH DE
  709.                 LD A,E
  710.                 AND 3
  711.                 LD C,A
  712.                 LD B,0
  713.                 LD HL,TXT_MEMORY
  714.                 ADD HL,BC
  715.                 ADD HL,BC
  716.                 ADD HL,BC
  717.                 LD DE,MEMORY_MODE
  718.                 LDI
  719.                 LDI
  720.                 LDI
  721.                 EX DE,HL
  722.                 LD (HL),2
  723.                 POP DE
  724. ;ДЛЯ РЕЗИДЕНТА HONEY COMANDER
  725.                 LD A,E
  726.                 AND M_REZIDENT
  727.                 LD HL,TXT_ONOFF
  728.                 JR NZ,.ON
  729.                 LD HL,TXT_ONOFF+3
  730. .ON             LD DE,REZIDENT_MODE
  731.                 LDI
  732.                 LDI
  733.                 LDI
  734.                 EX DE,HL
  735.                 LD (HL),2
  736.                 LD H,CMOS_BYTE_03
  737.                 CALL READCMOS
  738.                 AND M_KILL_REZIDENT
  739.                 LD HL,TXT_ONOFF
  740.                 JR NZ,.ON1
  741.                 LD HL,TXT_ONOFF+3
  742. .ON1            LD DE,TXT_KILLREZID
  743.                 LDI
  744.                 LDI
  745.                 LDI
  746.                 EX DE,HL
  747.                 LD (HL),2
  748.                 RET
  749.  
  750. ;ОЖИДАНИЕ НАЖАТИЯ И ОТПУСКАНИЯ ЛЮБОЙ КЛАВИШИ
  751. ANY_KEYS        XOR A
  752.                 IN A,(0XFE)
  753.                 CPL
  754.                 AND 0X1F
  755.                 JR Z,ANY_KEYS
  756. ANYKEYS1        XOR A
  757.                 IN A,(0XFE)
  758.                 CPL
  759.                 AND 0X1F
  760.                 JR NZ,ANYKEYS1
  761.                 RET
  762.