From 28e25be6177189eab8c875b4fb7fbd97f51099c0 Mon Sep 17 00:00:00 2001 From: "Marat Zakiyanov (Mario79)" Date: Sun, 13 Aug 2006 13:02:57 +0000 Subject: [PATCH] 1) The function 18/19 - to get/set mouse features 2) The application SETUP is changed for operation from functions 18/19, also instead of functions 6 and 33 the function 70 is used. git-svn-id: svn://kolibrios.org@120 a494cfbc-eb01-0410-851d-a64ba20cac60 --- kernel/trunk/docs/sysfuncr.txt | 447 ++++++++++++++------------ kernel/trunk/docs/sysfuncs.txt | 65 +++- kernel/trunk/hid/m_com1.inc | 18 +- kernel/trunk/hid/m_com2.inc | 18 +- kernel/trunk/hid/m_ps2.inc | 19 +- kernel/trunk/hid/mousedrv.inc | 3 + kernel/trunk/kernel.asm | 37 ++- programs/system/setup/trunk/setup.asm | 371 +++++++++++---------- 8 files changed, 598 insertions(+), 380 deletions(-) diff --git a/kernel/trunk/docs/sysfuncr.txt b/kernel/trunk/docs/sysfuncr.txt index 65c92624e0..727e4163e0 100644 --- a/kernel/trunk/docs/sysfuncr.txt +++ b/kernel/trunk/docs/sysfuncr.txt @@ -29,7 +29,7 @@ (игнорируется для стиля Y=2) * X = DCBA (биты) * A = 1 - у окна есть заголовок; для стиля Y=3 адрес строки - заголовка задаётся в edi, для прочих стилей + заголовка зада╕тся в edi, для прочих стилей используется подфункция 1 функции 71 * B = 1 - координаты всех графических примитивов задаются относительно клиентской области окна @@ -89,11 +89,11 @@ * Вид окна стиля Y=1: * полностью определяется приложением * Вид окна типа II: - * рисуется внешняя рамка шириной 1 пиксель "затенённого" цвета + * рисуется внешняя рамка шириной 1 пиксель "затен╕нного" цвета edi (все составляющие цвета уменьшаются в два раза) * рисуется промежуточная рамка шириной 3 пикселя цвета edi * рисуется внутренняя рамка шириной 1 пиксель - "затенённого" цвета edi + "затен╕нного" цвета edi * рисуется заголовок - прямоугольник с левым верхним углом (4,4) и правым нижним (xsize-4,min(20,ysize)) цвета, указанного в esi (с учетом градиента) @@ -151,7 +151,7 @@ Замечания: * Существует общесистемный буфер нажатых клавиш размером 120 байт, организованный как очередь. - * Существует ещё один общесистемный буфер на 120 "горячих клавиш". + * Существует ещ╕ один общесистемный буфер на 120 "горячих клавиш". * При вызове этой функции приложением с неактивным окном считается, что буфер нажатых клавиш пуст. * По умолчанию эта функция возвращает ASCII-коды; переключиться на @@ -200,7 +200,7 @@ Замечания: * Выводятся либо первые (esi and 0xFF) символов, либо все символы до (но не включая) завершающего нуля - (для ASCIIZ-строк) в зависимости от того, что произойдёт раньше. + (для ASCIIZ-строк) в зависимости от того, что произойд╕т раньше. * Первый системный шрифт считывается при загрузке из файла char.mt, второй - из char2.mt. * Оба шрифта имеют высоту 9 пикселей, ширина моноширинного шрифта @@ -445,7 +445,7 @@ Возвращаемое значение: * функция не возвращает значения Замечания: - * Функция начала перерисовки удаляет все определённые + * Функция начала перерисовки удаляет все определ╕нные функцией 8 кнопки, их следует определить повторно. ====================================================================== @@ -489,7 +489,7 @@ * функция не возвращает значения Замечания: * Проверок на корректность не делается. Установка слишком больших - значений приведёт к тому, что в фон войдут данные за границей + значений привед╕т к тому, что в фон войдут данные за границей буфера фонового изображения. Размер буфера = 0x160000-0x10, что соответствует максимальным размерам 800*600. (800*600*3=0x15F900) * Для обновления экрана (после завершения серии команд, работающих с @@ -636,7 +636,7 @@ * Узнать, какое окно является активным, можно вызовом подфункции 7. ====================================================================== - Функция 18, подфункция 4 - получить счётчик пустых тактов в секунду. + Функция 18, подфункция 4 - получить сч╕тчик пустых тактов в секунду. ====================================================================== Под пустыми тактами понимается время, в которое процессор простаивает в ожидании прерывания (в инструкции hlt). @@ -645,7 +645,7 @@ * eax = 18 - номер функции * ebx = 4 - номер подфункции Возвращаемое значение: - * eax = значение счётчика пустых тактов в секунду + * eax = значение сч╕тчика пустых тактов в секунду ====================================================================== ======== Функция 18, подфункция 5 - получить тактовую частоту. ======= @@ -657,7 +657,7 @@ * eax = тактовая частота (по модулю 2^32 тактов = 4ГГц) ====================================================================== - Функция 18, подфункция 6 - сохранить рамдиск в файл на жёстком диске. + Функция 18, подфункция 6 - сохранить рамдиск в файл на ж╕стком диске. ====================================================================== Параметры: * eax = 18 - номер функции @@ -666,16 +666,16 @@ * 1 = в папке "/KOLIBRI" * 2 = в корневом каталоге * 3 = edx указывает на путь (имена папок в формате 8+3, - разделённые '/') + раздел╕нные '/') Возвращаемое значение: * eax = 0 - успешно * иначе eax = код ошибки файловой системы Замечания: * Имя файла фиксировано, "menuet.img" (глобальная переменная ядра image_save из preboot.inc) - * На каком разделе какого диска файл будет сохранён, определяется + * На каком разделе какого диска файл будет сохран╕н, определяется подфункцией 7 и подфункцией 8 функции 21. - * Все папки в указанном пути должны существовать, иначе вернётся + * Все папки в указанном пути должны существовать, иначе верн╕тся значение 5, "файл не найден". ====================================================================== @@ -689,14 +689,14 @@ активно) Замечания: * Активное окно находится вверху оконного стэка и получает - сообщения обо всём вводе с клавиатуры. + сообщения обо вс╕м вводе с клавиатуры. * Сделать окно активным можно вызовом подфункции 3. ====================================================================== ==== Функция 18, подфункция 8 - отключить/разрешить звук спикера. ==== ====================================================================== -При отключённом звуке вызовы подфункции 55 функции 55 игнорируются. -При включённом - направляются на встроенный спикер. +При отключ╕нном звуке вызовы подфункции 55 функции 55 игнорируются. +При включ╕нном - направляются на встроенный спикер. --------------- Подподфункция 1 - получить состояние. ---------------- Параметры: @@ -704,7 +704,7 @@ * ebx = 8 - номер подфункции * ecx = 1 - номер подподфункции Возвращаемое значение: - * eax = 0 - звук спикера разрешён; 1 - запрещён + * eax = 0 - звук спикера разреш╕н; 1 - запрещ╕н -------------- Подподфункция 2 - переключить состояние. -------------- Переключает состояния разрешения/запрещения. @@ -756,10 +756,10 @@ и размеры. * Восстановление окна приложения происходит при активизировании подфункцией 3. - * Обычно нет необходимости явно сворачивать/разворачивать своё окно: + * Обычно нет необходимости явно сворачивать/разворачивать сво╕ окно: сворачивание окна осуществляется системой при нажатии на кнопку минимизации (которая для окон со скином определяется автоматически - функцией 0, для окон без скина её можно определить функцией 8), + функцией 0, для окон без скина е╕ можно определить функцией 8), восстановление - приложением @panel. ====================================================================== @@ -777,7 +777,7 @@ * функция не возвращает значения Формат таблицы: короткая версия: * +0: byte: информация о НГМД (дисководах для дискет), AAAABBBB, - где AAAA задаёт тип первого дисковода, BBBB - второго согласно + где AAAA зада╕т тип первого дисковода, BBBB - второго согласно следующему списку: * 0 = нет дисковода * 1 = 360Kb, 5.25'' @@ -788,19 +788,19 @@ Например, для стандартной конфигурации из одного 1.44-дисковода здесь будет 40h, а для случая 1.2Mb на A: и 1.44Mb на B: значение оказывается 24h. - * +1: byte: информация о жёстких дисках и CD-приводах, AABBCCDD, + * +1: byte: информация о ж╕стких дисках и CD-приводах, AABBCCDD, где AA соответствует контроллеру IDE0, ..., DD - IDE3: * 0 = устройство отсутствует - * 1 = жёсткий диск + * 1 = ж╕сткий диск * 2 = CD-привод Например, в случае HD на IDE0 и CD на IDE2 здесь будет 48h. - * +2: 4 db: число найденных разделов на жёстких дисках с + * +2: 4 db: число найденных разделов на ж╕стких дисках с соответственно IDE0,...,IDE3. - При отсутствии жёсткого диска на IDEx соответствующий байт + При отсутствии ж╕сткого диска на IDEx соответствующий байт нулевой, при наличии показывает число распознанных разделов, которых может и не быть (если носитель не отформатирован или если файловая система не поддерживается). В текущей версии ядра - для жёстких дисков поддерживаются только FAT16 и FAT32. + для ж╕стких дисков поддерживаются только FAT16 и FAT32. * +6: 4 db: зарезервировано Формат таблицы: полная версия: * +0: 10 db: такие же, как и в короткой версии @@ -871,7 +871,7 @@ db 'Kolibri',0 ====================================================================== ====================== Функция 18, подфункция 14 ===================== -======= Ожидать начала обратного хода луча развёртки монитора. ======= +======= Ожидать начала обратного хода луча разв╕ртки монитора. ======= ====================================================================== Параметры: * eax = 18 - номер функции @@ -929,6 +929,53 @@ db 'Kolibri',0 * Смотри также подфункцию 2 - завершение процесса/потока по заданному слоту. +====================================================================== +====================== Функция 18, подфункция 19 ===================== +============= Получить/установить настройки мыши. =================== +====================================================================== +Параметры: + * eax = 18 - номер функции + * ebx = 19 - номер подфункции + * ecx = номер пофункции 2-го уровня. + + ecx = 0 - получить скорость мыши + Возвращаемое значение: + * eax = текущая скорость мыши + + ecx = 1 - установить скорость мыши + edx = устанавливаемое значение скорости + Возвращаемое значение: + * функция не возвращает значения + + ecx = 2 - получить задержку ускорения + Возвращаемое значение: + * eax = текущая задержка ускорения + + ecx = 3 - установить задержку ускорения + edx = устанавливаемая задержка ускорения + Возвращаемое значение: + * функция не возвращает значения + + ecx = 4 - установить позицию курсора мыши на экране + edx = [координата по оси x]*65536 + [координата по оси y] + Возвращаемое значение: + * функция не возвращает значения + +Замечания: + * Рекомендуемая скорость мыши (в подфункции 1) от 1 до 9. + Устанавливаемая величина не контролируется кодом ядра, по этому + используйте осторожно, при некорректном значении курсор может "замерзнуть". + Скорость мыши можно регулировать через приложение SETUP. + * Рекомендуемая величина задержки (в подфункции 3) = 10. Более низкое + значение не обрабатывается COM мышами. При очень больших значениях + невозможно передвижение мыши на 1 пиксель и курсор будет прыгать + на величину установленной скорости (подфункция 1). + Устанавливаемая величина не контролируется кодом ядра. + * В подфункции 4 устанавливаемая величина не контролируется кодом ядра. + Перед использованием необходимо узнать текущее разрешение экрана и + при установке позиции следить, чтобы величина позиции не выходила за + пределы экрана. + ====================================================================== ============ Функция 19 - запустить программу с рамдиска. ============ ====================================================================== @@ -962,9 +1009,9 @@ db 'Kolibri',0 * cl = байт для вывода Возвращаемое значение (одинаково для обеих подфункций): * eax = 0 - успешно - * eax = 1 - не определён базовый порт + * eax = 1 - не определ╕н базовый порт Замечания: - * Предварительно должен быть определён базовый порт вызовом + * Предварительно должен быть определ╕н базовый порт вызовом подфункции 1 функции 21. ====================================================================== @@ -1083,9 +1130,9 @@ db 'Kolibri',0 ====================================================================== =========== Функция 21, подфункция 7 - установить базу HD. =========== ====================================================================== -База HD нужна для определения, на какой жёсткий диск писать, при +База HD нужна для определения, на какой ж╕сткий диск писать, при использовании устаревших функций работы с файловой системой и функций, -неявно использующих жёсткий диск (типа подфункции 6 функции 18); +неявно использующих ж╕сткий диск (типа подфункции 6 функции 18); при использовании функций 58 и 70 и современного синтаксиса /HD0,/HD1,/HD2,/HD3 эти функции сами устанавливают базу. Параметры: @@ -1097,17 +1144,17 @@ db 'Kolibri',0 Замечания: * Любое приложение в любой момент времени может изменить базу. * Не следует изменять базу, когда какое-нибудь приложение работает - с жёстким диском. Если не хотите глюков системы. + с ж╕стким диском. Если не хотите глюков системы. * Получить установленную базу можно вызовом подфункции 7 функции 26. - * Следует также определить используемый раздел жёсткого диска + * Следует также определить используемый раздел ж╕сткого диска подфункцией 8. ====================================================================== ========== Функция 21, подфункция 8 - установить раздел HD. ========== ====================================================================== -Раздел HD нужен для определения, на какой раздел жёсткого диска +Раздел HD нужен для определения, на какой раздел ж╕сткого диска писать, при использовании устаревших функций работы с файловой -системой и функций, неявно использующих жёсткий диск (типа +системой и функций, неявно использующих ж╕сткий диск (типа подфункции 6 функции 18); при использовании функций 58 и 70 и современного синтаксиса /HD0,/HD1,/HD2,/HD3 эти функции сами устанавливают базу и раздел. @@ -1120,13 +1167,13 @@ db 'Kolibri',0 Замечания: * Любое приложение в любой момент времени может изменить раздел. * Не следует изменять раздел, когда какое-нибудь приложение работает - с жёстким диском. Если не хотите глюков системы. + с ж╕стким диском. Если не хотите глюков системы. * Получить установленный раздел можно вызовом подфункции 8 функции 26. * Проверок на корректность не делается. - * Узнать число разделов на жёстком диске можно вызовом + * Узнать число разделов на ж╕стком диске можно вызовом подфункции 11 функции 18. - * Следует также определить используемую базу жёсткого диска + * Следует также определить используемую базу ж╕сткого диска подфункцией 7. ====================================================================== @@ -1191,7 +1238,7 @@ db 'Kolibri',0 * если драйвер загружен: * eax = 'MDAZ' (в стиле fasm'а, т.е. 'M' - младший байт, 'Z' - старший) - сигнатура - * ebx = текущая частота развёртки (в Гц) + * ebx = текущая частота разв╕ртки (в Гц) * ecx разрушается * буфер, на который указывает edx, заполнен Формат буфера: @@ -1202,15 +1249,15 @@ db 'Kolibri',0 * +36 = +0x24: 7*dword: зарезервировано (0 в текущей реализации) * +64 = +0x40: 32*word: список поддерживаемых видеорежимов (каждое слово - номер видеорежима, после собственно списка идут нули) - * +128 = +0x80: 32*(5*word): список поддерживаемых частот развёрток + * +128 = +0x80: 32*(5*word): список поддерживаемых частот разв╕рток для видеорежимов: для каждого видеорежима, указанного в предыдущем поле, указано до 5 поддерживаемых частот (в неиспользуемых позициях записаны нули) Замечания: - * Функция инициализирует драйвер (если он ещё не инициализирован) + * Функция инициализирует драйвер (если он ещ╕ не инициализирован) и должна вызываться первой, перед остальными (иначе они будут возвращать -1, ничего не делая). - * В текущей реализации поддерживается только одна частота развёртки + * В текущей реализации поддерживается только одна частота разв╕ртки на видеорежим. ====================================================================== @@ -1225,13 +1272,13 @@ db 'Kolibri',0 * eax = -1 - драйвер не загружен или не инициализирован; ebx,ecx разрушаются * eax = [ширина]*65536 + [высота] - * ebx = частота вертикальной развёртки (в Гц) + * ebx = частота вертикальной разв╕ртки (в Гц) * ecx = номер текущего видеорежима Замечания: * Драйвер предварительно должен быть инициализирован вызовом функции драйвера 1. * Если нужны только размеры экрана, целесообразней использовать - функцию 14 с учётом того, что она возвращает размеры на 1 меньше. + функцию 14 с уч╕том того, что она возвращает размеры на 1 меньше. ====================================================================== = Функция 21, подфункция 13, подподфункция 3 - установить видеорежим. @@ -1240,7 +1287,7 @@ db 'Kolibri',0 * eax = 21 - номер функции * ebx = 13 - номер подфункции * ecx = 3 - номер функции драйвера - * edx = [частота развёртки]*65536 + [номер видеорежима] + * edx = [частота разв╕ртки]*65536 + [номер видеорежима] Возвращаемое значение: * eax = -1 - драйвер не загружен, не инициализирован или произошла ошибка @@ -1325,7 +1372,7 @@ db 'Kolibri',0 * Вообще-то CMOS поддерживает для будильника установку значения 0xFF в качестве одного из параметров и означает это, что соответствующий параметр игнорируется. Но в текущей реализации - это не пройдёт (вернётся значение 1). + это не пройд╕т (верн╕тся значение 1). * Будильник - глобальный системный ресурс; установка будильника автоматически отменяет предыдущую установку. Впрочем, на данный момент ни одна программа его не использует. @@ -1333,7 +1380,7 @@ db 'Kolibri',0 ====================================================================== ============== Функция 23 - ожидать события с таймаутом. ============= ====================================================================== -Если очередь сообщений пуста, ждёт появления сообщения в очереди, +Если очередь сообщений пуста, жд╕т появления сообщения в очереди, но не более указанного времени. Затем считывает сообщение из очереди. Параметры: @@ -1349,8 +1396,8 @@ db 'Kolibri',0 * Для проверки, есть ли сообщение в очереди, используйте функцию 11. Чтобы ждать сколь угодно долго, используйте функцию 10. * Передача ebx=0 приводит к моментальному возвращению eax=0. - * При текущей реализации произойдёт немедленный возврат из функции - с eax=0, если сложение ebx с текущим значением счётчика времени + * При текущей реализации произойд╕т немедленный возврат из функции + с eax=0, если сложение ebx с текущим значением сч╕тчика времени вызовет 32-битное переполнение. ====================================================================== @@ -1529,9 +1576,9 @@ db 'Kolibri',0 ====================================================================== ============ Функция 26, подфункция 7 - получить базу HD. ============ ====================================================================== -База HD нужна для определения, на какой жёсткий диск писать, при +База HD нужна для определения, на какой ж╕сткий диск писать, при использовании устаревших функций работы с файловой системой и функций, -неявно использующих жёсткий диск (типа подфункции 6 функции 18); +неявно использующих ж╕сткий диск (типа подфункции 6 функции 18); при использовании функций 58 и 70 и современного синтаксиса /HD0,/HD1,/HD2,/HD3 эти функции сами устанавливают базу. Параметры: @@ -1542,14 +1589,14 @@ db 'Kolibri',0 Замечания: * Любое приложение в любой момент времени может изменить базу. * Установить базу можно вызовом подфункции 7 функции 21. - * Получить используемый раздел жёсткого диска можно подфункцией 8. + * Получить используемый раздел ж╕сткого диска можно подфункцией 8. ====================================================================== =========== Функция 26, подфункция 8 - получить раздел HD. =========== ====================================================================== -Раздел HD нужен для определения, на какой раздел жёсткого диска +Раздел HD нужен для определения, на какой раздел ж╕сткого диска писать, при использовании устаревших функций работы с файловой -системой и функций, неявно использующих жёсткий диск (типа +системой и функций, неявно использующих ж╕сткий диск (типа подфункции 6 функции 18); при использовании функций 58 и 70 и современного синтаксиса /HD0,/HD1,/HD2,/HD3 эти функции сами устанавливают базу и раздел. @@ -1561,12 +1608,12 @@ db 'Kolibri',0 Замечания: * Любое приложение в любой момент времени может изменить раздел. * Установить раздел можно вызовом подфункции 8 функции 21. - * Узнать число разделов на жёстком диске можно вызовом + * Узнать число разделов на ж╕стком диске можно вызовом подфункции 11 функции 18. - * Получить используемую базу жёсткого диска можно подфункцией 7. + * Получить используемую базу ж╕сткого диска можно подфункцией 7. ====================================================================== -=== Функция 26, подфункция 9 - получить значение счётчика времени. === +=== Функция 26, подфункция 9 - получить значение сч╕тчика времени. === ====================================================================== Параметры: * eax = 26 - номер функции @@ -1575,7 +1622,7 @@ db 'Kolibri',0 * eax = число сотых долей секунды, прошедших с момента запуска системы Замечания: - * Счётчик берётся по модулю 2^32, что соответствует немногим более + * Сч╕тчик бер╕тся по модулю 2^32, что соответствует немногим более 497 суток. * Системное время можно получить функцией 3. @@ -1594,13 +1641,13 @@ db 'Kolibri',0 ====================================================================== ====================== Функция 26, подфункция 11 ===================== -=========== Узнать, разрешён ли низкоуровневый доступ к HD. ========== +=========== Узнать, разреш╕н ли низкоуровневый доступ к HD. ========== ====================================================================== Параметры: * eax = 26 - номер функции * ebx = 11 - номер подфункции Возвращаемое значение: - * eax = 0/1 - запрещён/разрешён + * eax = 0/1 - запрещ╕н/разреш╕н Замечания: * Используется при LBA-чтении (подфункция 8 функции 58). * Установить текущее состояние можно вызовом @@ -1608,13 +1655,13 @@ db 'Kolibri',0 ====================================================================== ====================== Функция 26, подфункция 12 ===================== -========== Узнать, разрешён ли низкоуровневый доступ к PCI. ========== +========== Узнать, разреш╕н ли низкоуровневый доступ к PCI. ========== ====================================================================== Параметры: * eax = 26 - номер функции * ebx = 12 - номер подфункции Возвращаемое значение: - * eax = 0/1 - запрещён/разрешён + * eax = 0/1 - запрещ╕н/разреш╕н Замечания: * Используется при работе с шиной PCI (функция 62). * Текущая реализация использует только младший бит ecx. @@ -1714,7 +1761,7 @@ db 'Kolibri',0 * Эта функция устарела; функция 70 позволяет выполнять те же действия с расширенными возможностями. * Если указать ненулевое значение в esi и на рамдиске уже есть - указанный файл, то будет создан ещё один файл с тем же именем. + указанный файл, то будет создан ещ╕ один файл с тем же именем. * В противном случае файл перезаписывается. * Имя файла должно быть либо в формате 8+3 символов (первые 8 символов - собственно имя, последние 3 - расширение, @@ -1766,7 +1813,7 @@ db 'Kolibri',0 Если y>=ywnd, то младшее слово неотрицательно и содержит относительную y-координату, а старшее - относительную x-координату (правильного знака). В противном случае младшее слово отрицательно - и всё равно содержит относительную y-координату, + и вс╕ равно содержит относительную y-координату, а к старшему слову следует прибавить 1. ----------------- Подфункция 2 - нажатые кнопки мыши ----------------- @@ -1843,7 +1890,7 @@ db 'Kolibri',0 ======== Функция 40 - установить маску для ожидаемых событий. ======== ====================================================================== Маска для ожидаемых событий влияет на функции работы с событиями 10, -11, 23 - они сообщают только о событиях, разрешённых этой маской. +11, 23 - они сообщают только о событиях, разреш╕нных этой маской. Параметры: * eax = 40 - номер функции * ebx = маска: бит i соответствует событию i+1 (см. список событий) @@ -1854,7 +1901,7 @@ db 'Kolibri',0 * Маска по умолчанию (7=111b) разрешает извещения о перерисовке и нажатиях клавиш и кнопок. Этого достаточно для большинства приложений. - * События, запрещённые в маске, всё равно сохраняются, если + * События, запрещ╕нные в маске, вс╕ равно сохраняются, если приходят; о них просто не извещают функции работы с событиями. * Функции работы с событиями учитывают маску на момент вызова функции, а не на момент поступления сообщения. @@ -1887,8 +1934,8 @@ db 'Kolibri',0 * eax = 0 * ecx = 1 * ebx разрушается - * если всё в порядке и данные были: - * eax = размер данных, ещё не прочитанных из буфера (в байтах) + * если вс╕ в порядке и данные были: + * eax = размер данных, ещ╕ не прочитанных из буфера (в байтах) * ecx = 0 * ebx = очередной байт Замечания: @@ -1916,7 +1963,7 @@ db 'Kolibri',0 * ebx игнорируется * ecx = 0x8000nnnn, где nnnn = номер порта (от 0 до 0xFFFF) Возвращаемое значение: - * eax = 0 - успешно, при этом ebx = введённый байт + * eax = 0 - успешно, при этом ebx = введ╕нный байт * eax = 1 - поток не зарезервировал данный порт Замечания: * Предварительно поток должен зарезервировать за собой @@ -1924,7 +1971,7 @@ db 'Kolibri',0 * Для зарезервированных портов вместо вызова этих функций лучше использовать команды процессора in/out - это значительно быстрее и несколько короче и проще. Из незарезервированных - портов читать всё равно нельзя. + портов читать вс╕ равно нельзя. ====================================================================== ======== Функция 44 - определить действия при поступлении IRQ. ======= @@ -2054,7 +2101,7 @@ db 'Kolibri',0 * ebx = 1 - номер подфункции * ecx = тип кнопок: * 0 = плоские - * 1 = объёмные + * 1 = объ╕мные Возвращаемое значение: * функция не возвращает значения Замечания: @@ -2079,7 +2126,7 @@ db 'Kolibri',0 подфункцией 0. * Таблица стандартных цветов влияет только на приложения, которые эту таблицу явным образом получают (подфункцией 3) и - используют (указывая цвета из неё при вызовах функций рисования). + используют (указывая цвета из не╕ при вызовах функций рисования). * Таблица стандартных цветов входит в скин и устанавливается заново при установке скина (подфункции 8). * Таблицу цветов можно просматривать/изменять интерактивно с помощью @@ -2114,11 +2161,11 @@ dword- Замечания: * Структура таблицы цветов описана в стандартном включаемом файле macros.inc под названием system_colors; например, можно писать: - sc system_colors ; объявление переменной - ... ; где-то надо вызвать - ; описываемую функцию с ecx=sc - mov ecx, [sc.work_button_text] ; читаем цвет текста - ; на кнопке в рабочей области + sc system_colors ; объявление переменной + ... ; где-то надо вызвать + ; описываемую функцию с ecx=sc + mov ecx, [sc.work_button_text] ; читаем цвет текста + ; на кнопке в рабочей области * Использование/неиспользование этих цветов - дело исключительно самой программы. Для использования нужно просто при вызове функций рисования указывать цвет, взятый из этой таблицы. @@ -2225,7 +2272,7 @@ dword- поле промежуточного буфера и указано имя файла Возвращаемое значение: * eax = 0 - успешно - * иначе eax = код ошибки файловой системы; если файл не задаёт скин, + * иначе eax = код ошибки файловой системы; если файл не зада╕т скин, то возвращается ошибка 3 (неизвестная файловая система). Замечания: * При успешной загрузке скина все окна извещаются о необходимости @@ -2260,7 +2307,7 @@ dword- ================= Функция 50 - установка формы окна. ================= ====================================================================== Обычные окна представляют собой прямоугольники. С помощью этой функции -окну можно придать произвольную форму. Форма задаётся набором точек +окну можно придать произвольную форму. Форма зада╕тся набором точек внутри обрамляющего прямоугольника, принадлежащих окну. Положение и размеры обрамляющего прямоугольника задаются функцией 0 и изменяются функцией 67. @@ -2277,7 +2324,7 @@ dword- Параметры: * eax = 50 - номер функции * ebx = 1 - номер подфункции - * ecx задаёт масштаб: каждый байт данных определяет + * ecx зада╕т масштаб: каждый байт данных определяет (2^scale)*(2^scale) пикселей Возвращаемое значение: * функция не возвращает значения @@ -2471,8 +2518,8 @@ dword- * eax = 53 - номер функции * ebx = 0 - номер подфункции * ecx = локальный порт (учитывается только младшее слово) - * edx = удалённый порт (учитывается только младшее слово) - * esi = удалённый IP + * edx = удал╕нный порт (учитывается только младшее слово) + * esi = удал╕нный IP Возвращаемое значение: * eax = -1 = 0xFFFFFFFF - ошибка; ebx разрушается * eax = хэндл сокета (некоторое число, однозначно идентифицирующее @@ -2553,8 +2600,8 @@ dword- * eax = 53 - номер функции * ebx = 5 - номер подфункции * ecx = локальный порт (учитывается только младшее слово) - * edx = удалённый порт (учитывается только младшее слово) - * esi = удалённый IP + * edx = удал╕нный порт (учитывается только младшее слово) + * esi = удал╕нный IP * edi = режим открытия: SOCKET_PASSIVE=0 или SOCKET_ACTIVE=1 Возвращаемое значение: * eax = -1 = 0xFFFFFFFF - ошибка; ebx разрушается @@ -2659,7 +2706,7 @@ dword- * 201: размер таблицы ARP (в элементах) (20 в текущей версии) * 202: прочитать элемент edx таблицы ARP во временный буфер, откуда берут информацию 5 последующих типов; - в этом случае eax неопределён + в этом случае eax неопредел╕н * 203: IP-адрес, запомненный типом 202 * 204: старшее dword MAC-адреса, запомненного типом 202 * 205: младшее word MAC-адреса, запомненного типом 202 @@ -2695,9 +2742,9 @@ dword- * функция не возвращает значения Замечания: * Предварительно данные должны быть загружены подфункцией 0 и - определён их формат подфункцией 2. + определ╕н их формат подфункцией 2. * Функция возвращает управление, когда началось проигрывание данных; - после этого проигрывание идёт независимо от приложения (и вообще + после этого проигрывание ид╕т независимо от приложения (и вообще не требует загрузки процессора). * Предварительно должны быть определены базовый порт SB16 (подфункцией 4 функции 21) и канал DMA @@ -2735,18 +2782,18 @@ dword- * esi = указатель на данные Возвращаемое значение: * eax = 0 - успешно - * eax = 55 - ошибка (спикер отключён или занят) + * eax = 55 - ошибка (спикер отключ╕н или занят) Данные - это массив элементов переменной длины. Формат каждого элемента определяется первым байтом: * 0 = конец данных - * 1..0x80 = задаёт длительность звучания в сотых долях секунды + * 1..0x80 = зада╕т длительность звучания в сотых долях секунды ноты, определяемой непосредственным значением частоты * следующее слово (2 байта) содержит делитель частоты; частота определяется как 1193180/divider * 0x81 = invalid * 0x82..0xFF = нота, определяемая октавой и номером: * длительность в сотых долях секунды = (первый байт)-0x81 - * присутствует ещё один байт; + * присутствует ещ╕ один байт; * (второй байт)=0xFF - пауза * иначе он имеет вид a*0x10+b, где b=номер ноты в октаве от 1 до 12, a=номер октавы (считая с 0) @@ -2754,12 +2801,12 @@ dword- * Пищание спикером может быть запрещено/разрешено подфункцией 8 функции 18. * Функция возвращает управление, сообщив куда следует информацию - о запросе. Само проигрывание идёт независимо от программы. + о запросе. Само проигрывание ид╕т независимо от программы. * Данные должны сохраняться в памяти по крайней мере до конца проигрывания. ====================================================================== -============= Функция 56 - записать файл на жёсткий диск. ============ +============= Функция 56 - записать файл на ж╕сткий диск. ============ ====================================================================== Параметры: * eax = 56 - номер функции @@ -2772,11 +2819,11 @@ dword- Замечания: * Эта функция устарела; функция 70 позволяет выполнять те же действия с расширенными возможностями. - * Данная функция предполагает, что во время её вызова одним + * Данная функция предполагает, что во время е╕ вызова одним приложением никакое другое приложение не работает - с жёстким диском. + с ж╕стким диском. * Путь к файлу - ASCIIZ-строка, которая может быть пустой - (если файл создаётся в корневом каталоге) или иметь формат + (если файл созда╕тся в корневом каталоге) или иметь формат /d1/d2/.../dn, где все имена папок должны иметь формат 8+3, т.е. 8 символов имени и 3 символа расширения без разделителя, при необходимости дополненные пробелами; @@ -2811,7 +2858,7 @@ dword- * /RD/1 = /RAMDISK/1 для доступа к рамдиску * /FD/1 = /FLOPPYDISK/1 для доступа к первому флоппи-дисководу, /FD/2 = /FLOPPYDISK/2 для второго флоппи-дисковода - * /HD/x = /HARDDISK/x - устаревший вариант доступа к жёсткому диску + * /HD/x = /HARDDISK/x - устаревший вариант доступа к ж╕сткому диску (в этом случае база определяется подфункцией 7 функции 21), x - номер раздела (считая с 1) * /HD0/x, /HD1/x, /HD2/x, /HD3/x для доступа соответственно @@ -2860,7 +2907,7 @@ dword- * +12 = +0xC: dword: указатель на буфер, куда будут записаны данные * +16 = +0x10: dword: указатель на буфер для работы системы (4096 байт) - * +20 = +0x14: ASCIIZ-имя файла, правила формирования имён указаны в + * +20 = +0x14: ASCIIZ-имя файла, правила формирования им╕н указаны в общем описании Возвращаемое значение: * eax = 0 - успешно, иначе код ошибки файловой системы @@ -2875,7 +2922,7 @@ dword- документации по FAT. * Размер папки определяется по размеру цепочки кластеров в FAT. * Если файл кончился раньше, чем был прочитан последний запрошенный - блок, то функция прочитает, сколько сможет, после чего вернёт + блок, то функция прочитает, сколько сможет, после чего верн╕т eax=6 (EOF). * Функция позволяет читать корневые папки /rd/1,/fd/x,/hd[n]/x, но в первых двух случаях текущая реализация не следует @@ -2889,7 +2936,7 @@ dword- 0x1C00=7168 байт; но возвращается ebx=0 (за исключением случая предыдущего пункта); * как ни странно, можно прочитать 14-й блок (там, вообще говоря, - мусор - напоминаю, счёт ведётся с 0); + мусор - напоминаю, сч╕т вед╕тся с 0); * если был запрошен хотя бы один блок с номером, не меньшим 14, то возвращается eax=6(EOF); иначе eax=0. Для /fd/x: @@ -2911,7 +2958,7 @@ dword- ====================================================================== ============ Функция 58, подфункция 1 - перезаписать файл. =========== ====================================================================== -Если файл не существует, он создаётся. +Если файл не существует, он созда╕тся. Если файл существует, он перезаписывается. Параметры: * eax = 58 - номер функции @@ -2923,7 +2970,7 @@ dword- * +12 = +0xC: dword: указатель на данные для записи * +16 = +0x10: dword: указатель на буфер для работы системы (4096 байт) - * +20 = +0x14: ASCIIZ-имя файла, правила формирования имён указаны в + * +20 = +0x14: ASCIIZ-имя файла, правила формирования им╕н указаны в общем описании Возвращаемое значение: * eax = 0 - успешно, иначе код ошибки файловой системы @@ -2944,14 +2991,14 @@ dword- * +12 = +0xC: dword: игнорируется * +16 = +0x10: dword: указатель на буфер для работы системы (4096 байт) - * +20 = +0x14: ASCIIZ-имя файла, правила формирования имён указаны в + * +20 = +0x14: ASCIIZ-имя файла, правила формирования им╕н указаны в общем описании Возвращаемое значение: * eax = 0 - успешно, иначе код ошибки файловой системы * ebx разрушается Замечания: * При работе с дискетой не следует удалять непустую папку. - Код работы с жёстким диском непустые папки удаляет корректно + Код работы с ж╕стким диском непустые папки удаляет корректно (т.е. рекурсивно со всеми файлами и вложенными папками). Рамдиск папок не поддерживает. @@ -2968,20 +3015,20 @@ dword- * +12 = +0xC: dword: указатель на данные для записи * +16 = +0x10: dword: указатель на буфер для работы системы (4096 байт) - * +20 = +0x14: ASCIIZ-имя файла, правила формирования имён указаны в + * +20 = +0x14: ASCIIZ-имя файла, правила формирования им╕н указаны в общем описании Возвращаемое значение: * eax = 0 - успешно, иначе код ошибки файловой системы * ebx разрушается Замечания: * Рамдиск и дискеты не поддерживают эту функцию, она только для - жёстких дисков. + ж╕стких дисков. * Файл должен уже существовать (иначе возвращается 5, not found). Для создания файлов используйте подфункцию 1. * Если начальная позиция больше размера файла, возвращается eax=6(EOF). Если конечная позиция больше размера файла, файл расширяется. - * Код обработки записи данных для жёсткого диска интерпретирует + * Код обработки записи данных для ж╕сткого диска интерпретирует нулевое значение поля +8 как указание усечения файла до размера, указанного в поле +4. Однако код обработки 58-й функции блокирует эту возможность для приложений, сразу возвращая управление @@ -3000,14 +3047,14 @@ dword- * +12 = +0xC: dword: игнорируется * +16 = +0x10: dword: указатель на буфер для работы системы (4096 байт) - * +20 = +0x14: ASCIIZ-имя файла, правила формирования имён указаны в + * +20 = +0x14: ASCIIZ-имя файла, правила формирования им╕н указаны в общем описании Возвращаемое значение: * eax = 0 - успешно, иначе код ошибки файловой системы * ebx разрушается Замечания: * Рамдиск и дискеты не поддерживают эту функцию, - она только для жёстких дисков. + она только для ж╕стких дисков. ====================================================================== == Функция 58, подфункция 5 - переименовать/переместить файл/папку. == @@ -3022,21 +3069,21 @@ dword- * +12 = +0xC: dword: игнорируется * +16 = +0x10: dword: указатель на буфер для работы системы (4096 байт) - * +20 = +0x14: ASCIIZ-имя файла, правила формирования имён указаны в + * +20 = +0x14: ASCIIZ-имя файла, правила формирования им╕н указаны в общем описании * +20+n: (сразу после завершающего нулевого символа) новое ASCIIZ-имя, должно начинаться с /hd/1, что интерпретируется как - жёсткий диск, указанный в первом имени + ж╕сткий диск, указанный в первом имени (перемещение с одного диска на другой не поддерживается) Возвращаемое значение: * eax = 0 - успешно, иначе код ошибки файловой системы * ebx разрушается Замечания: * Рамдиск и дискеты не поддерживают эту функцию, - она только для жёстких дисков. + она только для ж╕стких дисков. * Если новое ASCIIZ-имя сильно неправильное, т.е. не начинается с /hd/1, /hd/first, /harddisk/1, /harddisk/first или после этого - начала идёт пробел или символ с кодом 0, то функция возвращает, + начала ид╕т пробел или символ с кодом 0, то функция возвращает, как ни странно, код ошибки 4. Это единственная функция, которая вообще возвращает этот код. @@ -3068,7 +3115,7 @@ dword- (за исключением предыдущего случая): * eax = 5 * ebx не меняется - * если LBA-доступ запрещён подфункцией 11 функции 21: + * если LBA-доступ запрещ╕н подфункцией 11 функции 21: * eax = 2 * ebx разрушается * для рамдиска: попытка чтения блока за пределами рамдиска @@ -3081,17 +3128,17 @@ dword- * Размер блока - 512 байт; читается один блок. * Не следует полагаться на возвращаемое значение, оно может измениться в следующих версиях. - * Требуется, чтобы был разрешён LBA-доступ к устройствам + * Требуется, чтобы был разреш╕н LBA-доступ к устройствам подфункцией 11 функции 21. Узнать это можно вызовом подфункцией 11 функции 26. * LBA-чтение дискеты не поддерживается. - * Функция считывает данные физического жёсткого диска; + * Функция считывает данные физического ж╕сткого диска; если по каким-то причинам нужны данные конкретного раздела, - придётся определять начальный сектор этого раздела + прид╕тся определять начальный сектор этого раздела (либо напрямую через MBR, либо из расширенной структуры, возвращаемой той же подфункцией 11 функции 18). - * Функция не проверяет код ошибки жёсткого диска, так что запрос - несуществующего сектора всё равно что-то прочитает + * Функция не проверяет код ошибки ж╕сткого диска, так что запрос + несуществующего сектора вс╕ равно что-то прочитает (вероятнее всего, нули, но это определяется устройством) и это будет считаться успехом (eax=0). @@ -3118,7 +3165,7 @@ dword- * ebx = общее число кластеров = 2847 * ecx = число свободных кластеров * dword [fileinfo] = размер кластера = 512 - * для жёсткого диска: база и раздел определяются подфункциями 7 и 8 + * для ж╕сткого диска: база и раздел определяются подфункциями 7 и 8 функции 21: * eax = 0 (успех) * ebx = общее число кластеров @@ -3131,10 +3178,10 @@ dword- pushad-структуры, передающейся как аргумент системной функции). Теперь это исправлено, так что, возможно, имеет смысл возвращать размер кластера в edx, пока эту функцию не начали использовать. - * Вообще-то ещё существует подфункция 11 функции 18, возвращающая + * Вообще-то ещ╕ существует подфункция 11 функции 18, возвращающая информацию о файловой системе. По расширенной таблице дисковой подсистемы можно определить размер кластера (там он хранится - в секторах) и общее число кластеров для жёстких дисков. + в секторах) и общее число кластеров для ж╕стких дисков. ====================================================================== ========== Функция 58, подфункция 16 - запустить программу. ========== @@ -3151,7 +3198,7 @@ dword- * +12 = +0xC: dword: игнорируется * +16 = +0x10: dword: указатель на буфер для работы системы (4096 байт) - * +20 = +0x14: ASCIIZ-имя файла, правила формирования имён указаны в + * +20 = +0x14: ASCIIZ-имя файла, правила формирования им╕н указаны в общем описании Возвращаемое значение: * eax > 0 - программа загружена, eax содержит PID @@ -3163,7 +3210,7 @@ dword- (ASCIIZ-строка); учитываются либо все символы до завершающего нуля включительно, либо первые 256 символов, в зависимости от того, что меньше. - * Если процесс запускается как отлаживаемый, он создаётся + * Если процесс запускается как отлаживаемый, он созда╕тся в замороженном состоянии; для запуска используйте подфункцию 5 функции 69. @@ -3201,7 +3248,7 @@ dword- из ядра убрать совсем, вместе с приложением systrace. * Информация о системных вызовах сохраняется в системном кольцевом буфере на 0x10 входов. - Эта функция просто копирует указанный объём данных + Эта функция просто копирует указанный объ╕м данных из упомянутого буфера по указанному адресу. * Какой из входов в буфере соответствует последнему вызову, можно определить по значению eax, а именно, @@ -3224,7 +3271,7 @@ IPC интерпретировать конкретное сообщение. -------- Подфункция 1 - установить область для получения IPC --------- -Вызывается процессом-приёмником. +Вызывается процессом-при╕мником. Параметры: * eax = 60 - номер функции * ebx = 1 - номер подфункции @@ -3251,21 +3298,21 @@ IPC Параметры: * eax = 60 - номер функции * ebx = 2 - номер подфункции - * ecx = PID приёмника + * ecx = PID при╕мника * edx = указатель на данные сообщения * esi = длина сообщения (в байтах) Возвращаемое значение: * eax = 0 - успешно - * eax = 1 - приёмник не определил буфер для IPC-сообщений - (может быть, ещё не успел, а может быть, это не тот поток, + * eax = 1 - при╕мник не определил буфер для IPC-сообщений + (может быть, ещ╕ не успел, а может быть, это не тот поток, который нужен) - * eax = 2 - приёмник заблокировал IPC-буфер; + * eax = 2 - при╕мник заблокировал IPC-буфер; попробуйте немного подождать - * eax = 3 - переполнение IPC-буфера приёмника + * eax = 3 - переполнение IPC-буфера при╕мника * eax = 4 - процесса/потока с таким PID не существует Замечания: * Система сразу после записи IPC-сообщения в буфер посылает - потоку-приёмнику событие с кодом 7 (см. коды событий). + потоку-при╕мнику событие с кодом 7 (см. коды событий). ====================================================================== === Функция 61 - получить параметры для прямого доступа к графике. === @@ -3273,10 +3320,10 @@ IPC Программе доступны данные графического экрана (область памяти, которая собственно и отображает содержимое экрана) напрямую без вызовов системных функций через селектор gs: - mov eax, [gs:0] + mov eax, [gs:0] поместит в eax первый dword буфера, содержащий информацию о цвете левой верхней точки (и, возможно, цвета нескольких следующих). - mov [gs:0], eax + mov [gs:0], eax при работе в режимах VESA c LFB установит цвет левой верхней точки (и возможно, цвета нескольких следующих). @@ -3294,7 +3341,7 @@ IPC собственно LFB, так что чтение/запись по gs приводят непосредственно к изменению содержимого экрана. При работе в видеорежимах без LFB gs указывает на некоторую область данных - ядра, причём все функции вывода на экран добросовестно выполняют + ядра, прич╕м все функции вывода на экран добросовестно выполняют двойную работу по записи непосредственно на экран и по записи в этот буфер. В результате при чтении содержимого этого буфера результаты соответствуют содержимому экрана @@ -3311,7 +3358,7 @@ IPC Возвращаемое значение: * eax = [разрешение по оси x]*65536 + [разрешение по оси y] Замечания: - * Можно использовать функцию 14 с учётом того, что она возвращает + * Можно использовать функцию 14 с уч╕том того, что она возвращает размеры на 1 меньше. Это полностью эквивалентный способ. ------------------------ Число бит на пиксель ------------------------ @@ -3326,7 +3373,7 @@ IPC * eax = 61 - номер функции * ebx = 3 - номер подфункции Возвращаемое значение: - * eax = число байт, которое занимает одна строка развёртки + * eax = число байт, которое занимает одна строка разв╕ртки (горизонтальная линия на экране) ====================================================================== @@ -3336,11 +3383,11 @@ IPC * eax = 62 - номер функции * bl = 0 - номер подфункции Возвращаемое значение: - * eax = -1 - доступ к PCI запрещён; иначе + * eax = -1 - доступ к PCI запрещ╕н; иначе * ah.al = версия PCI-интерфейса (ah=версия, al=подверсия) * старшее слово eax обнулено Замечания: - * Предварительно должен быть разрешён низкоуровневый доступ к PCI + * Предварительно должен быть разреш╕н низкоуровневый доступ к PCI для приложений подфункцией 12 функции 21. * Если PCI BIOS не поддерживается, то значение ax неопределено. @@ -3351,10 +3398,10 @@ IPC * eax = 62 - номер функции * bl = 1 - номер подфункции Возвращаемое значение: - * eax = -1 - доступ к PCI запрещён; иначе + * eax = -1 - доступ к PCI запрещ╕н; иначе * al = номер последней PCI-шины; оставшиеся байты eax разрушаются Замечания: - * Предварительно должен быть разрешён низкоуровневый доступ к PCI + * Предварительно должен быть разреш╕н низкоуровневый доступ к PCI для приложений подфункцией 12 функции 21. * Если PCI BIOS не поддерживается, то значение al неопределено. @@ -3366,10 +3413,10 @@ IPC * eax = 62 - номер функции * bl = 2 - номер подфункции Возвращаемое значение: - * eax = -1 - доступ к PCI запрещён; иначе + * eax = -1 - доступ к PCI запрещ╕н; иначе * al = механизм (1 или 2); прочие байты eax разрушаются Замечания: - * Предварительно должен быть разрешён низкоуровневый доступ к PCI + * Предварительно должен быть разреш╕н низкоуровневый доступ к PCI для приложений подфункцией 12 функции 21. * Механизм обращения выбирается в соответствии с характеристиками оборудования. @@ -3387,15 +3434,15 @@ IPC * bh = номер PCI-шины * ch = dddddfff, где ddddd = номер устройства на шине, fff = номер функции устройства - * cl = номер регистра (должен быть чётным для bl=5, + * cl = номер регистра (должен быть ч╕тным для bl=5, делиться на 4 для bl=6) Возвращаемое значение: - * eax = -1 - ошибка (запрещён доступ к PCI или + * eax = -1 - ошибка (запрещ╕н доступ к PCI или неподдерживаемые параметры); иначе * al/ax/eax (в зависимости от запрошенного размера) содержит данные; оставшаяся часть регистра eax разрушается Замечания: - * Предварительно должен быть разрешён низкоуровневый доступ к PCI + * Предварительно должен быть разреш╕н низкоуровневый доступ к PCI для приложений подфункцией 12 функции 21. * Механизм доступа 2 поддерживает только 16 устройств на шине и игнорирует номер функции. Получить механизм доступа можно вызовом @@ -3418,16 +3465,16 @@ IPC * bh = номер PCI-шины * ch = dddddfff, где ddddd = номер устройства на шине, fff = номер функции устройства - * cl = номер регистра (должен быть чётным для bl=9, + * cl = номер регистра (должен быть ч╕тным для bl=9, делиться на 4 для bl=10) * dl/dx/edx (в зависимости от запрошенного размера) содержит данные для записи Возвращаемое значение: - * eax = -1 - ошибка (запрещён доступ к PCI или + * eax = -1 - ошибка (запрещ╕н доступ к PCI или неподдерживаемые параметры) * eax = 0 - успешно Замечания: - * Предварительно должен быть разрешён низкоуровневый доступ к PCI + * Предварительно должен быть разреш╕н низкоуровневый доступ к PCI для приложений подфункцией 12 функции 21. * Механизм доступа 2 поддерживает только 16 устройств на шине и игнорирует номер функции. Получить механизм доступа можно вызовом @@ -3445,16 +3492,16 @@ IPC данные и из которого другая программа может эти данные прочитать. Есть соглашение, в соответствии с которым записываемые данные - текстовые строки, интерпретируемые как отладочные сообщения о ходе -выполнения программы. Ядро в определённых ситуациях также записывает +выполнения программы. Ядро в определ╕нных ситуациях также записывает на доску отладки сведения о выполнении некоторых функций; по соглашению сообщения ядра начинаются с префикса "K : ". Для просмотра доски отладки создано приложение board, -которое считывает данные из буфера и отображает их в своём окне. board +которое считывает данные из буфера и отображает их в сво╕м окне. board понимает последовательность кодов 13,10 как переход на новую строку. Символ с нулевым кодом в конце строки не обязателен, но и не мешает. В связи с появлением отладчика ценность доски отладки несколько снизилась, поскольку отладчик позволяет полностью контролировать ход -выполнения программы, причём для этого не требуется никаких усилий +выполнения программы, прич╕м для этого не требуется никаких усилий со стороны самой программы. Тем не менее во многих случаях доска отладки продолжает оставаться полезной. @@ -3501,7 +3548,7 @@ IPC ================= Функция 66 - работа с клавиатурой. ================= ====================================================================== Режим ввода влияет на результаты чтения клавиш функцией 2. -При загрузке программы для неё устанавливается ASCII-режим ввода. +При загрузке программы для не╕ устанавливается ASCII-режим ввода. -------- Подфункция 1 - установить режим ввода с клавиатуры. --------- Параметры: @@ -3532,14 +3579,14 @@ IPC * бит 3 (маска 8): правый Ctrl нажат * бит 4 (маска 0x10): левый Alt нажат * бит 5 (маска 0x20): правый Alt нажат - * бит 6 (маска 0x40): CapsLock включён - * бит 7 (маска 0x80): NumLock включён - * бит 8 (маска 0x100): ScrollLock включён + * бит 6 (маска 0x40): CapsLock включ╕н + * бит 7 (маска 0x80): NumLock включ╕н + * бит 8 (маска 0x100): ScrollLock включ╕н * прочие биты сброшены ----- Подфункция 4 - установить общесистемную "горячую клавишу". ----- О нажатии "горячей клавиши" извещаются только приложения, -установившие её; активное приложение (к которому поступает +установившие е╕; активное приложение (к которому поступает весь нормальный ввод) таких клавиш не получает. Извещение заключается в посылке события с кодом 2. Прочитать "горячую клавишу" можно так же, как и обычную, - @@ -3547,10 +3594,10 @@ IPC Параметры: * eax = 66 - номер функции * ebx = 4 - номер подфункции - * cl задаёт сканкод клавиши; + * cl зада╕т сканкод клавиши; используйте cl=0 для задания комбинаций типа Ctrl+Shift - * edx = 0xXYZ задаёт возможные состояния управляющих клавиш: - * Z (младшие 4 бита) задаёт состояние клавиш LShift и RShift: + * edx = 0xXYZ зада╕т возможные состояния управляющих клавиш: + * Z (младшие 4 бита) зада╕т состояние клавиш LShift и RShift: * 0 = ни одна из клавиш не должна быть нажата; * 1 = ровно одна из клавиш должна быть нажата; * 2 = обе клавиши должны быть нажаты; @@ -3598,7 +3645,7 @@ IPC * Значение -1 для параметра означает "не изменять"; например, для перемещения окна без изменения размеров можно указать edx=esi=-1. * Предварительно окно должно быть определено функцией 0. - Она же задаёт начальные координаты и размеры окна. + Она же зада╕т начальные координаты и размеры окна. * Размеры окна понимаются в смысле функции 0, т.е. на один пиксель меньше, чем реальные размеры. * Вызов функции для максимизированных окон просто игнорируется. @@ -3608,7 +3655,7 @@ IPC * Функция посылает окну событие перерисовки (с кодом 1). ====================================================================== -=== Функция 68, подфункция 0 - получить счётчик переключений задач. == +=== Функция 68, подфункция 0 - получить сч╕тчик переключений задач. == ====================================================================== Параметры: * eax = 68 - номер функции @@ -3624,7 +3671,7 @@ IPC Функция завершает текущий квант времени, выделенный потоку, и переключается на следующий. (Какой поток какого процесса будет следующим, предсказать нельзя). -Позднее, когда до текущего потока дойдёт очередь, +Позднее, когда до текущего потока дойд╕т очередь, выполнение возобновится. Параметры: * eax = 68 - номер функции @@ -3641,7 +3688,7 @@ IPC * ecx = требуемое действие: * ecx = 0 - разрешить выполнение инструкции rdpmc (ReaD Performance-Monitoring Counters) - * ecx = 1 - узнать, включён/выключен кэш + * ecx = 1 - узнать, включ╕н/выключен кэш * ecx = 2 - включить кэш * ecx = 3 - выключить кэш Возвращаемое значение: @@ -3649,7 +3696,7 @@ IPC * eax = значение cr4 * для ecx=1: * eax = (cr0 and 0x60000000): - * eax = 0 - кэш включён + * eax = 0 - кэш включ╕н * eax <> 0 - кэш выключен * для ecx=2 и ecx=3: * функция не возвращает значения @@ -3660,7 +3707,7 @@ IPC MSR = Model Specific Register; полный список MSR-регистров процессора содержится в документации по процессору (например, IA-32 Intel Architecture Software Developer's Manual, Volume 3, Appendix B); -каждое семейство процессоров имеет своё подмножество MSR-регистров. +каждое семейство процессоров имеет сво╕ подмножество MSR-регистров. Параметры: * eax = 68 - номер функции * ebx = 3 - номер подфункции @@ -3670,10 +3717,10 @@ Architecture Software Developer's Manual, Volume 3, Appendix B); * ebx:eax = старший:младший dword результата Замечания: * Указание в ecx несуществующего или нереализованного для данного - процессора MSR повлечёт исключение в ядре, которое прибьёт поток. + процессора MSR повлеч╕т исключение в ядре, которое прибь╕т поток. * Предварительно следует определить, поддерживаются ли MSR в целом, командой cpuid. Иначе возникнет уже другое исключение в ядре, - которое всё равно прибьёт поток. + которое вс╕ равно прибь╕т поток. ====================================================================== ========= Функция 68, подфункция 4 - записать в MSR-регистр. ========= @@ -3681,7 +3728,7 @@ Architecture Software Developer's Manual, Volume 3, Appendix B); MSR = Model Specific Register; полный список MSR-регистров процессора содержится в документации по процессору (например, IA-32 Intel Architecture Software Developer's Manual, Volume 3, Appendix B); -каждое семейство процессоров имеет своё подмножество MSR-регистров. +каждое семейство процессоров имеет сво╕ подмножество MSR-регистров. Параметры: * eax = 68 - номер функции * ebx = 4 - номер подфункции @@ -3692,10 +3739,10 @@ Architecture Software Developer's Manual, Volume 3, Appendix B); * ebx:eax = копия esi:edi Замечания: * Указание в ecx несуществующего или нереализованного для данного - процессора MSR повлечёт исключение в ядре, которое прибьёт поток. + процессора MSR повлеч╕т исключение в ядре, которое прибь╕т поток. * Предварительно следует определить, поддерживаются ли MSR в целом, командой cpuid. Иначе возникнет уже другое исключение в ядре, - которое всё равно прибьёт поток. + которое вс╕ равно прибь╕т поток. ====================================================================== ======= Функция 68, подфункция 5 - выделить физическую память. ======= @@ -3712,7 +3759,7 @@ Architecture Software Developer's Manual, Volume 3, Appendix B); устройством требуется разместить данные по известному физическому адресу. (В сущности, эта функция разрабатывалась для AC97WAV.) * Число блоков физической памяти ограничено (константой 24, - причём эта константа включает и несколько блоков памяти + прич╕м эта константа включает и несколько блоков памяти для надобностей ядра). * Освободить выделенную таким образом память можно подфункцией 6, копированием данных туда/обратно @@ -3783,7 +3830,7 @@ Architecture Software Developer's Manual, Volume 3, Appendix B); У процесса может быть только один отладчик; один процесс может отлаживать несколько разных. Система уведомляет отладчик о событиях, происходящих с отлаживаемым процессом. Сообщения записываются в буфер, -определённый подфункцией 0. +определ╕нный подфункцией 0. Формат сообщения: * +0: dword: код сообщения * +4: dword: PID отлаживаемого процесса @@ -3791,14 +3838,14 @@ Architecture Software Developer's Manual, Volume 3, Appendix B); определяемые кодом сообщения Коды сообщений: * 1 = исключение - * дополнительно передаётся dword-номер исключения + * дополнительно переда╕тся dword-номер исключения * процесс приостановлен * 2 = процесс завершился * приходит при любом завершении: как через системную функцию -1, так и при "убийстве" любым другим процессом (в том числе самим отладчиком) * 3 = отладочное исключение int 1 = #DB - * дополнительно передаётся dword-образ регистра DR6: + * дополнительно переда╕тся dword-образ регистра DR6: * биты 0-3: выполнено условие соответствующей точки останова (установленной подфункцией 9) * бит 14: исключение произошло из-за режима @@ -3842,7 +3889,7 @@ Architecture Software Developer's Manual, Volume 3, Appendix B); и при поступлении нового сообщения система будет ждать. Для синхронизации обрамляйте всю работу с буфером операциями блокировки/разблокировки - neg [bufsize] + neg [bufsize] * Данные в буфере трактуются как массив элементов переменной длины - сообщений. Формат сообщения указан в общем описании. @@ -4007,7 +4054,7 @@ Architecture Software Developer's Manual, Volume 3, Appendix B); * 01 = слово * 11 = двойное слово * esi = адрес точки останова; должен быть выровнен - соответственно длине (т.е. должен быть чётным для + соответственно длине (т.е. должен быть ч╕тным для точек останова на слово, кратен 4 для двойного слова) * если старший бит установлен - сбросить точку останова Возвращаемое значение: @@ -4027,10 +4074,10 @@ Architecture Software Developer's Manual, Volume 3, Appendix B); * Срабатывание точки останова заключается в генерировании отладочного исключения #DB, о котором система сообщает отладчику. * Точка останова на запись и чтение/запись срабатывает после - выполнения вызвавшей её инструкции. + выполнения вызвавшей е╕ инструкции. ====================================================================== -= Функция 70 - работа с файловой системой с поддержкой длинных имён. = += Функция 70 - работа с файловой системой с поддержкой длинных им╕н. = ====================================================================== Параметры: * eax = 70 @@ -4060,7 +4107,7 @@ Architecture Software Developer's Manual, Volume 3, Appendix B); * /FD/1 = /FLOPPYDISK/1 для доступа к первому флоппи-дисководу, /FD/2 = /FLOPPYDISK/2 для второго флоппи-дисковода * /HD0/x, /HD1/x, /HD2/x, /HD3/x для доступа соответственно - к жёстким дискам на IDE0 (Primary Master), IDE1 (Primary Slave), + к ж╕стким дискам на IDE0 (Primary Master), IDE1 (Primary Slave), IDE2 (Secondary Master), IDE3 (Secondary Slave); x - номер раздела на выбранном винчестере, изменяется от 1 до 255 (на каждом из винчестеров нумерация начинается с 1) @@ -4084,7 +4131,7 @@ Architecture Software Developer's Manual, Volume 3, Appendix B); ошибкой с кодом 2. ====================================================================== -= Функция 70, подфункция 0 - чтение файла с поддержкой длинных имён. = += Функция 70, подфункция 0 - чтение файла с поддержкой длинных им╕н. = ====================================================================== Параметры: * eax = 70 - номер функции @@ -4095,7 +4142,7 @@ Architecture Software Developer's Manual, Volume 3, Appendix B); * +8: dword: 0 (зарезервировано под старший dword позиции) * +12 = +0xC: dword: сколько байт читать * +16 = +0x10: dword: указатель на буфер, куда будут записаны данные - * +20 = +0x14: ASCIIZ-имя файла, правила формирования имён указаны в + * +20 = +0x14: ASCIIZ-имя файла, правила формирования им╕н указаны в общем описании или * +20 = +0x14: db 0 @@ -4106,13 +4153,13 @@ Architecture Software Developer's Manual, Volume 3, Appendix B); -1=0xffffffff, если файл не найден Замечания: * Если файл кончился раньше, чем был прочитан последний запрошенный - блок, то функция прочитает, сколько сможет, после чего вернёт + блок, то функция прочитает, сколько сможет, после чего верн╕т eax=6 (EOF). * Функция не позволяет читать папки - (вернётся eax=10, access denied). + (верн╕тся eax=10, access denied). ====================================================================== -= Функция 70, подфункция 1 - чтение папки с поддержкой длинных имён. = += Функция 70, подфункция 1 - чтение папки с поддержкой длинных им╕н. = ====================================================================== Параметры: * eax = 70 - номер функции @@ -4128,7 +4175,7 @@ Architecture Software Developer's Manual, Volume 3, Appendix B); * +12 = +0xC: dword: сколько блоков читать * +16 = +0x10: dword: указатель на буфер, куда будут записаны данные, размер буфера должен быть не меньше 32 + [+12]*560 байт - * +20 = +0x14: ASCIIZ-имя папки, правила формирования имён указаны в + * +20 = +0x14: ASCIIZ-имя папки, правила формирования им╕н указаны в общем описании или * +20 = +0x14: db 0 @@ -4144,7 +4191,7 @@ Architecture Software Developer's Manual, Volume 3, Appendix B); * ... Структура заголовка: * +0: dword: версия структуры (текущая версия = 1) - * +4: dword: количество размещённых блоков; не больше, чем запрошено + * +4: dword: количество размещ╕нных блоков; не больше, чем запрошено в поле +12 информационной структуры; может быть меньше, если в папке кончились файлы (то же самое, что и в ebx) * +8: dword: общее число файлов в папке @@ -4201,7 +4248,7 @@ Architecture Software Developer's Manual, Volume 3, Appendix B); данные содержат мусор. * Если файлы в папке кончились раньше, чем было прочитано запрошенное количество, то функция прочитает, сколько сможет, - после чего вернёт eax=6 (EOF). + после чего верн╕т eax=6 (EOF). * Любая папка на диске, кроме корневой, содержит два специальных входа "." и "..", идентифицирующих соответственно саму папку и родительскую папку. @@ -4212,7 +4259,7 @@ Architecture Software Developer's Manual, Volume 3, Appendix B); ====================================================================== ====================== Функция 70, подфункция 2 ====================== -======== Создание/перезапись файла с поддержкой длинных имён. ======== +======== Создание/перезапись файла с поддержкой длинных им╕н. ======== ====================================================================== Параметры: * eax = 70 - номер функции @@ -4223,7 +4270,7 @@ Architecture Software Developer's Manual, Volume 3, Appendix B); * +8: dword: 0 (зарезервировано) * +12 = +0xC: dword: сколько байт писать * +16 = +0x10: dword: указатель на данные - * +20 = +0x14: ASCIIZ-имя файла, правила формирования имён указаны в + * +20 = +0x14: ASCIIZ-имя файла, правила формирования им╕н указаны в общем описании или * +20 = +0x14: db 0 @@ -4232,11 +4279,11 @@ Architecture Software Developer's Manual, Volume 3, Appendix B); * eax = 0 - успешно, иначе код ошибки файловой системы * ebx = число записанных байт (возможно, 0) Замечания: - * Если файл с таким именем не существовал, он создаётся; если + * Если файл с таким именем не существовал, он созда╕тся; если существовал, то перезаписывается. * Если свободного места на диске недостаточно, то функция запишет, - сколько сможет, после чего вернёт код ошибки 8. - * Функция не поддерживается для CD (вернётся код ошибки 2). + сколько сможет, после чего верн╕т код ошибки 8. + * Функция не поддерживается для CD (верн╕тся код ошибки 2). ====================================================================== === Функция 70, подфункция 5 - получение информации о файле/папке. === @@ -4251,7 +4298,7 @@ Architecture Software Developer's Manual, Volume 3, Appendix B); * +12 = +0xC: dword: 0 (зарезервировано) * +16 = +0x10: dword: указатель на буфер, куда будут записаны данные (40 байт) - * +20 = +0x14: ASCIIZ-имя файла, правила формирования имён указаны в + * +20 = +0x14: ASCIIZ-имя файла, правила формирования им╕н указаны в общем описании или * +20 = +0x14: db 0 @@ -4279,7 +4326,7 @@ Architecture Software Developer's Manual, Volume 3, Appendix B); * +8: dword: 0 (зарезервировано) * +12 = +0xC: dword: 0 (зарезервировано) * +16 = +0x10: dword: указатель на буфер с атрибутами (32 байта) - * +20 = +0x14: ASCIIZ-имя файла, правила формирования имён указаны в + * +20 = +0x14: ASCIIZ-имя файла, правила формирования им╕н указаны в общем описании или * +20 = +0x14: db 0 @@ -4295,7 +4342,7 @@ Architecture Software Developer's Manual, Volume 3, Appendix B); Замечания: * Функция не поддерживает виртуальные папки типа /, /rd и корневые папки типа /rd/1. - * Функция не поддерживается для CD (вернётся код ошибки 2). + * Функция не поддерживается для CD (верн╕тся код ошибки 2). ====================================================================== ============ Функция 70, подфункция 7 - запуск программы. ============ @@ -4311,7 +4358,7 @@ Architecture Software Developer's Manual, Volume 3, Appendix B); * +8: dword: 0 или указатель на ASCIIZ-строку с параметрами * +12 = +0xC: dword: 0 (зарезервировано) * +16 = +0x10: dword: 0 (зарезервировано) - * +20 = +0x14: ASCIIZ-имя файла, правила формирования имён указаны в + * +20 = +0x14: ASCIIZ-имя файла, правила формирования им╕н указаны в общем описании или * +20 = +0x14: db 0 @@ -4326,7 +4373,7 @@ Architecture Software Developer's Manual, Volume 3, Appendix B); (ASCIIZ-строка); учитываются либо все символы до завершающего нуля включительно, либо первые 256 символов, в зависимости от того, что меньше. - * Если процесс запускается как отлаживаемый, он создаётся + * Если процесс запускается как отлаживаемый, он созда╕тся в замороженном состоянии; для запуска используйте подфункцию 5 функции 69. @@ -4374,7 +4421,7 @@ Architecture Software Developer's Manual, Volume 3, Appendix B); * 2 = нажата клавиша на клавиатуре (поступает, только когда окно активно) или нажата "горячая клавиша"; сбрасывается, когда все клавиши из буфера считаны функцией 2 - * 3 = нажата кнопка, определённая ранее функцией 8 (или кнопка + * 3 = нажата кнопка, определ╕нная ранее функцией 8 (или кнопка закрытия, созданная неявно функцией 0; кнопка минимизации обрабатывается системой и о ней сообщения не приходит; поступает, только когда окно активно; сбрасывается, когда все @@ -4383,7 +4430,7 @@ Architecture Software Developer's Manual, Volume 3, Appendix B); при размаскировке функцией 40) * 5 = перерисовывается фон рабочего стола (сбрасывается автоматически после перерисовки, так что если во время перерисовки - фона программа не ждёт и не проверяет события, то этого события + фона программа не жд╕т и не проверяет события, то этого события она не заметит) * 6 = событие от мыши (что-то случилось - нажатие на кнопку мыши или перемещение; сбрасывается при прочтении) @@ -4400,7 +4447,7 @@ Architecture Software Developer's Manual, Volume 3, Appendix B); ==================== Коды ошибок файловой системы ==================== ====================================================================== * 0 = успешно - * 1 = не определена база и/или раздел жёсткого диска (подфункциями + * 1 = не определена база и/или раздел ж╕сткого диска (подфункциями 7, 8 функции 21) * 2 = функция не поддерживается для данной файловой системы * 3 = неизвестная файловая система @@ -4412,7 +4459,7 @@ Architecture Software Developer's Manual, Volume 3, Appendix B); * 7 = указатель вне памяти приложения * 8 = диск заполнен * 9 = таблица FAT разрушена - * 10 = доступ запрещён + * 10 = доступ запрещ╕н * 11 = ошибка устройства При запуске программы возможны также следующие коды ошибок: * 30 = 0x1E = недостаточно памяти diff --git a/kernel/trunk/docs/sysfuncs.txt b/kernel/trunk/docs/sysfuncs.txt index 2c14c2ecef..b44da53481 100644 --- a/kernel/trunk/docs/sysfuncs.txt +++ b/kernel/trunk/docs/sysfuncs.txt @@ -925,6 +925,54 @@ Remarks: * See also subfunction 2 - terminate process/thread by given slot. +====================================================================== +====================== Function 18, subfunction 19 ===================== +======================= Get/set mouse features. ====================== +====================================================================== +Parameters: + * eax = 18 - function number + * ebx = 19 - subfunction number + * ecx = subsubfunction number + + ecx = 0 - get mouse speed + Returned value: + * eax = current mouse speed + + ecx = 1 - set mouse speed + edx = selected value of speed + Returned value: + * function does not return value + + ecx = 2 - get mouse delay + Returned value: + * eax = current mouse delay + + ecx = 3 - set mouse delay + edx = selected value of delay + Returned value: + * function does not return value + + ecx = 4 - set mouse pointer position + edx = [coordinate on axis x]*65536 + [coordinate on axis y] + Returned value: + * function does not return value + +Remarks: + * Recommended speed of the mouse (in subfunction 1) from 1 up to 9. + The installed value is not inspected by the code of a kernel, on this use + cautiously, at incorrect value the cursor can "freeze". + Speed of mouse can be regulated through the application SETUP. + * Recommended delay of the mouse (in subfunction 3) = 10. Lower value + is not handled COM by mice. At the very large values the movement of + the mouse on 1 pixel is impossible and the cursor will jump + on the value of the installed speed (subfunction 1). + The installed value is not inspected by the code of a kernel. + * In subfunction 4 the installed value is not inspected by + the code of a kernel. Before usage it is necessary to find out current + screen resolution and at installation of a position to watch, + that the value of a position should do not fall outside + the limits the screen. + ====================================================================== ============ Function 19 - start application from ramdisk. =========== ====================================================================== @@ -2086,11 +2134,11 @@ Remarks: * Structure of the color table is described in the standard include file 'macros.inc' as 'system_colors'; for example, it is possible to write: - sc system_colors ; variable declaration - ... ; somewhere one must call - ; this function with ecx=sc - mov ecx, [sc.work_button_text] ; read text color on - ; buttin in working area + sc system_colors ; variable declaration + ... ; somewhere one must call + ; this function with ecx=sc + mov ecx, [sc.work_button_text] ; read text color on + ; buttin in working area * A program itself desides to use or not to use color table. For usage program must simply at calls to drawing functions select color taken from the table. @@ -3240,11 +3288,11 @@ Remarks: The data of the graphics screen (the memory area which displays screen contents) are accessible to a program directly, without any system calls, through the selector gs: - mov eax, [gs:0] + mov eax, [gs:0] places in eax the first dword of the buffer, which contains information on color of the left upper point (and, possibly, colors of several following). - mov [gs:0], eax + mov [gs:0], eax by work in VESA modes with LFB sets color of the left upper point (and, possibly, colors of several following). To interpret the data of graphics screen program needs to know @@ -3806,7 +3854,7 @@ Remarks: and at arrival of new message the system will wait. For synchronization frame all work with the buffer by operations lock/unlock - neg [bufsize] + neg [bufsize] * Data in the buffer are considered as array of items with variable length - messages. Format of a message is explained in general description. @@ -4372,3 +4420,4 @@ Application start functions can return also following errors: * 30 = 0x1E = not enough memory * 31 = 0x1F = file is not executable * 32 = 0x20 = too many processes + diff --git a/kernel/trunk/hid/m_com1.inc b/kernel/trunk/hid/m_com1.inc index 7763f169a4..237ba70d28 100644 --- a/kernel/trunk/hid/m_com1.inc +++ b/kernel/trunk/hid/m_com1.inc @@ -4,7 +4,7 @@ MouseByteNumber DB 0 FirstByte DB 0 SecondByte DB 0 ThirdByte DB 0 - +timer_ticks_com dd 0 ;*************************************** ;* ═╬┬█╔ ╬┴╨└┴╬╥╫╚╩ ╧╨┼╨█┬└═╚▀ ╬╥ ╠█╪╚ * ;*************************************** @@ -68,7 +68,7 @@ check_mouse_data_com1: shl AL,6 or AL,[SecondByte] cbw - shl ax,1 + call mouse_acceleration_com1 add AX,[0xFB0A] ;[XCoordinate] ; ╩єЁёюЁ эх фюыцхэ т√їюфшЄ№ чр ыхтє■ шыш ; яЁртє■ уЁрэшЎє ¤ъЁрэр @@ -90,7 +90,7 @@ check_mouse_data_com1: shl AL,4 or AL,[ThirdByte] cbw - shl ax,1 + call mouse_acceleration_com1 add AX,[0xFB0C] ;[YCoordinate] ; ╩єЁёюЁ эх фюыцхэ т√їюфшЄ№ чр тхЁїэ■■ шыш ; эшцэ■■ уЁрэшЎє ¤ъЁрэр @@ -106,6 +106,8 @@ check_mouse_data_com1: xor AX,AX @@Y2: mov [0xFB0C],AX ;[YCoordinate] + mov eax,[timer_ticks] + mov [timer_ticks_com],eax jmp @@EndMouseInterrupt @@Error: @@ -116,3 +118,13 @@ check_mouse_data_com1: call ready_for_next_irq ret +mouse_acceleration_com1: + push eax + mov eax,[timer_ticks] + sub eax,[timer_ticks_com] + cmp eax,[mouse_delay] + pop eax + ja @f + shl ax,1 +@@: + ret diff --git a/kernel/trunk/hid/m_com2.inc b/kernel/trunk/hid/m_com2.inc index 8b067bc075..2f364cc15a 100644 --- a/kernel/trunk/hid/m_com2.inc +++ b/kernel/trunk/hid/m_com2.inc @@ -4,7 +4,7 @@ MouseByteNumber_1 DB 0 FirstByte_1 DB 0 SecondByte_1 DB 0 ThirdByte_1 DB 0 - +timer_ticks_com_1 dd 0 ;*************************************** ;* ═╬┬█╔ ╬┴╨└┴╬╥╫╚╩ ╧╨┼╨█┬└═╚▀ ╬╥ ╠█╪╚ * ;*************************************** @@ -68,7 +68,7 @@ check_mouse_data_com2: shl AL,6 or AL,[SecondByte_1] cbw - shl ax,1 + call mouse_acceleration_com2 add AX,[0xFB0A] ;[XCoordinate] ; ╩єЁёюЁ эх фюыцхэ т√їюфшЄ№ чр ыхтє■ шыш ; яЁртє■ уЁрэшЎє ¤ъЁрэр @@ -90,7 +90,7 @@ check_mouse_data_com2: shl AL,4 or AL,[ThirdByte_1] cbw - shl ax,1 + call mouse_acceleration_com2 add AX,[0xFB0C] ;[YCoordinate] ; ╩єЁёюЁ эх фюыцхэ т√їюфшЄ№ чр тхЁїэ■■ шыш ; эшцэ■■ уЁрэшЎє ¤ъЁрэр @@ -106,6 +106,8 @@ check_mouse_data_com2: xor AX,AX @@Y2_1: mov [0xFB0C],AX ;[YCoordinate] + mov eax,[timer_ticks] + mov [timer_ticks_com_1],eax jmp @@EndMouseInterrupt_1 @@Error_1: @@ -116,3 +118,13 @@ check_mouse_data_com2: call ready_for_next_irq ret +mouse_acceleration_com2: + push eax + mov eax,[timer_ticks] + sub eax,[timer_ticks_com_1] + cmp eax,[mouse_delay] + pop eax + ja @f + shl ax,1 +@@: + ret diff --git a/kernel/trunk/hid/m_ps2.inc b/kernel/trunk/hid/m_ps2.inc index 4f6da69546..460d27385f 100644 --- a/kernel/trunk/hid/m_ps2.inc +++ b/kernel/trunk/hid/m_ps2.inc @@ -4,6 +4,7 @@ MouseByteNumber_2 DB 0 FirstByte_2 DB 0 SecondByte_2 DB 0 ThirdByte_2 DB 0 +timer_ticks_ps2 dd 0 ;************************************** ;* ╬┴╨└┴╬╥╫╚╩ ╧╨┼╨█┬└═╚▀ ╬╥ ╠█╪╚ PS/2 * @@ -53,7 +54,7 @@ check_mouse_data_ps2: ; ╟рэхёЄш т AL ьырф°шщ срщЄ @@M0: mov AL,[SecondByte_2] - shl ax,1 + call mouse_acceleration_ps2 ; ┬√ўшёышЄ№ эютюх чэрўхэшх ъююЁфшэрЄ√ ; ъєЁёюЁр яю X add AX,[0xFB0A] ;[XCoordinate] @@ -79,7 +80,7 @@ check_mouse_data_ps2: ; ╟рэхёЄш т AL ьырф°шщ срщЄ @@M3: mov AL,[ThirdByte_2] - shl ax,1 + call mouse_acceleration_ps2 ; ┬√ўшёышЄ№ эютюх чэрўхэшх ъююЁфшэрЄ√ ъєЁёюЁр ; яю Y (Y-ъююЁфшэрЄр ь√°ш PS/2 эряЁртыхэр ; яЁюЄштюяюыюцэю ¤ъЁрээющ) @@ -98,6 +99,8 @@ check_mouse_data_ps2: mov [0xFB0C],AX ;[YCoordinate] ; ╧юърчрЄ№ ъєЁёюЁ т эютющ яючшЎшш + mov eax,[timer_ticks] + mov [timer_ticks_ps2],eax jmp @@EndMouseInterrupt_2 ; ╬сэрЁєцхэ ёсющ т яюЁ фъх яхЁхфрўш шэЇюЁьрЎшш юЄ ь√°ш @@ -107,7 +110,17 @@ check_mouse_data_ps2: @@EndMouseInterrupt_2: call ready_for_next_irq_1 ret - + +mouse_acceleration_ps2: + push eax + mov eax,[timer_ticks] + sub eax,[timer_ticks_ps2] + cmp eax,[mouse_delay] + pop eax + ja @f + imul ax,[mouse_speed_factor] +@@: + ret ;*********************************************** ;* ╬╞╚─└═╚┼ ╬╫╚╤╥╩╚ ┬╒╬─═╬├╬ ┴╙╘┼╨└ I8042 * ;* ╧Ёш т√їюфх шч яЁюЎхфєЁ√: * diff --git a/kernel/trunk/hid/mousedrv.inc b/kernel/trunk/hid/mousedrv.inc index c1c3dd3b97..8fa684ea48 100644 --- a/kernel/trunk/hid/mousedrv.inc +++ b/kernel/trunk/hid/mousedrv.inc @@ -16,6 +16,9 @@ uglobal mousedata dd 0x0 endg +mouse_delay dd 10 +mouse_speed_factor dw 3 + include 'm_ps2.inc' include 'm_com1.inc' include 'm_com2.inc' diff --git a/kernel/trunk/kernel.asm b/kernel/trunk/kernel.asm index 8e525d765f..e64176d996 100644 --- a/kernel/trunk/kernel.asm +++ b/kernel/trunk/kernel.asm @@ -1972,7 +1972,9 @@ sys_system_table: dd sysfn_centermouse ; 15 = center mouse cursor dd sysfn_getfreemem ; 16 = get free memory size dd sysfn_getallmem ; 17 = get total memory size - dd sysfn_terminate2 ; 18 = terminate thread using PID instead of slot + dd sysfn_terminate2 ; 18 = terminate thread using PID + ; instead of slot + dd sysfn_mouse_acceleration; 19 = set/get mouse acceleration sysfn_num = ($ - sys_system_table)/4 endg @@ -2170,6 +2172,39 @@ sysfn_centermouse: ; 18.15 = mouse centered mov [esp+36],dword 0 ret +sysfn_mouse_acceleration: ; 18.19 = set/get mouse features + cmp ebx,0 ; get mouse speed factor + jnz .set_mouse_acceleration + xor eax,eax + mov ax,[mouse_speed_factor] + mov [esp+36],eax + ret + .set_mouse_acceleration: + cmp ebx,1 ; set mouse speed factor + jnz .get_mouse_delay + mov [mouse_speed_factor],cx + ret + .get_mouse_delay: + cmp ebx,2 ; get mouse delay + jnz .set_mouse_delay + mov eax,[mouse_delay] + mov [esp+36],eax + ret + .set_mouse_delay: + cmp ebx,3 ; set mouse delay + jnz .set_pointer_position + mov [mouse_delay],ecx + ret + .set_pointer_position: + cmp ebx,4 ; set mouse pointer position + jnz .end + mov [0xFB0C],cx ;y + ror ecx,16 + mov [0xFB0A],cx ;x + rol ecx,16 + .end: + ret + sysfn_getfreemem: mov eax,[MEM_FreeSpace] shl eax,2 diff --git a/programs/system/setup/trunk/setup.asm b/programs/system/setup/trunk/setup.asm index 096f58cd7b..0478f67fc4 100644 --- a/programs/system/setup/trunk/setup.asm +++ b/programs/system/setup/trunk/setup.asm @@ -11,15 +11,15 @@ ;****************************************************************************** use32 - org 0x0 + org 0x0 db 'MENUET01' ; 8 byte identifier - dd 0x01 ; header version + dd 0x01 ; header version dd START ; pointer to program start dd I_END ; size of image dd 0x4000 ; reguired amount of memory dd 0x4000 ; stack pointer (esp) dd I_PARAM,0 ; parameters, reserved - include 'lang.inc' +; include 'lang.inc' include 'macros.inc' ;****************************************************************************** @@ -29,21 +29,14 @@ BBB equ 25 ;****************************************************************************** apply_all: - mov eax,6 ; load saved settings from SETUP.DAT - mov ebx,filename - xor ecx,ecx - or edx,-1 - mov esi,keyboard - int 0x40 - call _midibase ;1 call _sound_dma ;10 call _pci_acc ;12 - call _sb16 ;4 - call _wssp ;6 + call _sb16 ;4 + call _wssp ;6 call _syslang ;5 call _keyboard ;2 - + call _mouse call get_disk_info cmp [cd],0 jne no_cd @@ -53,7 +46,7 @@ apply_all: jne no_hd call _lba_read ;11 call _hdbase ;7 - call _f32p ;8 + call _f32p ;8 no_hd: ret ;------------------------------------------------------------------------------- @@ -68,7 +61,7 @@ get_disk_info: mov al,[table_area+1] shr al,6 cmp al,0 - je ide_1 + je ide_1 cmp al,01b jnz ide_0_cd mov [hdbase],1 @@ -81,74 +74,74 @@ get_disk_info: mov [cdbase],1 mov [cd],0 cmp [hd],0 - je all_device + je all_device ide_1: mov al,[table_area+1] shl al,2 shr al,6 cmp al,0 - je ide_2 + je ide_2 cmp al,01b jnz ide_1_cd cmp [hd],0 - je ide_11 + je ide_11 mov [hdbase],2 mov [hd],0 ide_11: cmp [cd],0 - je all_device + je all_device jmp ide_2 ide_1_cd: cmp al,10b jnz ide_2 cmp [cd],0 - je ide_11_cd + je ide_11_cd mov [cdbase],2 mov [cd],0 ide_11_cd: cmp [hd],0 - je all_device + je all_device ide_2: mov al,[table_area+1] shl al,4 shr al,6 cmp al,0 - je ide_3 + je ide_3 cmp al,01b jnz ide_2_cd cmp [hd],0 - je ide_21 + je ide_21 mov [hdbase],3 mov [hd],0 ide_21: cmp [cd],0 - je all_device + je all_device jmp ide_3 ide_2_cd: cmp al,10b jnz ide_3 cmp [cd],0 - je ide_21_cd + je ide_21_cd mov [cdbase],3 mov [cd],0 ide_21_cd: cmp [hd],0 - je all_device + je all_device ide_3: mov al,[table_area+1] shl al,6 shr al,6 cmp al,0 - je not_device + je not_device cmp al,01b jnz ide_3_cd cmp [hd],0 - je ide_31 + je ide_31 mov [hdbase],4 mov [hd],0 ide_31: @@ -159,7 +152,7 @@ get_disk_info: cmp al,10b jnz not_device cmp [cd],0 - je all_device + je all_device mov [cdbase],4 mov [cd],0 @@ -171,6 +164,7 @@ hd db 0 cd db 0 ;****************************************************************************** apply_all_and_exit: + mcall 70,read_fileinfo call apply_all jmp close @@ -185,7 +179,7 @@ set_language_and_exit: ; xor eax,eax ;@@: mov [keyboard],eax cmp eax,1 - je russian + je russian xor eax,eax set_lang_now: mov [keyboard],eax @@ -201,7 +195,7 @@ set_syslanguage_and_exit: ; mov ecx,9 int 0x40 cmp eax,4 - jne temp ;@f + jne temp ;@f xor eax,eax ;@@: inc eax temp: inc eax @@ -250,29 +244,24 @@ get_other: mov [lba_read],eax mcall 26,12 mov [pci_acc],eax + mcall 18,19,0 + mov [mouse_speed],eax ret ;****************************************************************************** START: cmp [I_PARAM], 'SLAN' - je set_syslanguage_and_exit + je set_syslanguage_and_exit cmp [I_PARAM], 'LANG' - je set_language_and_exit - -; mov eax,6 ; load saved settings from SETUP.DAT -; mov ebx,filename -; xor ecx,ecx -; or edx,-1 -; mov esi,keyboard -; int 0x40 + je set_language_and_exit cmp [I_PARAM], 'BOOT' - je apply_all_and_exit + je apply_all_and_exit - call loadtxt call get_setup_values + call loadtxt red: call draw_window @@ -280,36 +269,36 @@ still: cmp word [blinkpar],0 jne blinker - mov eax,29 ;get system date + mov eax,29 ;get system date int 0x40 cmp eax,[date] - je gettime + je gettime mov [date],eax gettime: - mov eax,3 ;get system time + mov eax,3 ;get system time int 0x40 cmp ax,[time] - je sysevent + je sysevent mov [time],ax call drawtime sysevent: mov eax,23 - mov ebx,8 ; wait here for event with timeout + mov ebx,8 ; wait here for event with timeout int 0x40 cmp eax,1 - jz red + jz red cmp eax,2 - jz key + jz key cmp eax,3 - jz button + jz button jmp still blinker: cmp byte [count],6 - jb noblink + jb noblink btc dword [blinkpar],16 mov byte [count],0 call drawtime @@ -319,19 +308,19 @@ still: incdectime: cmp byte [blinkpar],0 - je still + je still mov esi,time mov bl,0x23 ;border cmp byte [blinkpar],1 - je hours + je hours mov bl,0x59 ;minutes inc esi hours: mov al,byte [esi] cmp ah,112 - je dectime + je dectime cmp al,bl - je noinctime + je noinctime inc al daa jmp incdectime1 @@ -342,7 +331,7 @@ incdectime: jmp still dectime: cmp al,0 - je nodectime + je nodectime dec al das jmp incdectime1 @@ -352,12 +341,12 @@ incdectime: incdecdate: cmp byte [blinkpar+1],0 - je still + je still mov esi,date mov bl,0 ;border of years cmp byte [blinkpar+1],1 jne days - mov bl,0x12 ;months + mov bl,0x12 ;months inc esi days: cmp byte [blinkpar+1],2 @@ -367,9 +356,9 @@ incdecdate: nodays: mov al,byte [esi] cmp ah,122 - je decdate + je decdate cmp al,bl - je noincdate + je noincdate inc al ;add al,1 daa jmp incdecdate1 @@ -380,7 +369,7 @@ incdecdate: jmp still decdate: cmp al,1 - je nodecdate + je nodecdate dec al das jmp incdecdate1 @@ -404,13 +393,13 @@ incdecdate: int 0x40 cmp ah,112 - je incdectime + je incdectime cmp ah,113 - je incdectime + je incdectime cmp ah,122 - je incdecdate + je incdecdate cmp ah,123 - je incdecdate + je incdecdate cmp ah,111 jne noseltime mov al, [blinkpar] @@ -441,12 +430,7 @@ noseltime: noseldate: cmp ah,99 jne nosaveall - mov eax,33 - mov ebx,filename - mov ecx,keyboard - mov edx,48 - xor esi,esi - int 0x40 + mcall 70,save_fileinfo call settime mov dword [blinkpar],0 call drawtime @@ -458,14 +442,14 @@ nosaveall: jmp still no_apply_all: - cmp ah,1 ; CLOSE APPLICATION + cmp ah,1 ; CLOSE APPLICATION jne no_close close: - or eax,-1 + or eax,-1 int 0x40 no_close: - cmp ah,11 ; SET MIDI BASE + cmp ah,11 ; SET MIDI BASE jnz nosetbase1 call _midibase nosetbase1: @@ -481,11 +465,11 @@ close: nomp: - cmp ah,4 ; SET KEYBOARD + cmp ah,4 ; SET KEYBOARD jnz nokm mov eax,[keyboard] test eax,eax - je downuplbl + je downuplbl dec eax jmp nodownup downuplbl: @@ -498,7 +482,7 @@ close: jnz nokp mov eax,[keyboard] cmp eax,4 - je updownlbl + je updownlbl inc eax jmp noupdown updownlbl: @@ -509,7 +493,7 @@ close: nokp: - cmp ah,22 ; SET CD BASE + cmp ah,22 ; SET CD BASE jnz nocm mov eax,[cdbase] sub eax,2 @@ -531,7 +515,7 @@ close: call _cdbase nocs: - cmp ah,62 ; SET HD BASE + cmp ah,62 ; SET HD BASE jnz hnocm mov eax,[hdbase] sub eax,2 @@ -553,7 +537,7 @@ close: call _hdbase hnocs: - cmp ah,82 ; SET SOUND DMA + cmp ah,82 ; SET SOUND DMA jne no_sdma_d mov eax,[sound_dma] dec eax @@ -575,7 +559,7 @@ close: jmp still no_set_sound_dma: - cmp ah,92 ; SET LBA READ + cmp ah,92 ; SET LBA READ jne no_lba_d slbal: btc [lba_read],0 @@ -593,7 +577,7 @@ close: no_set_lba_read: - cmp ah,102 ; SET PCI ACCESS + cmp ah,102 ; SET PCI ACCESS jne no_pci_d pcip: btc [pci_acc],0 @@ -612,13 +596,13 @@ close: set_partition: - cmp ah,72 ; SET FAT32 PARTITION + cmp ah,72 ; SET FAT32 PARTITION jnz .nominus mov eax,[f32p] sub eax,2 ; and eax,15 ; 3 - four partitions, 7 - eight p., 15 - sixteen, etc. cmp eax,15 - jb @f + jb @f mov eax,14 @@: inc eax @@ -630,7 +614,7 @@ close: mov eax,[f32p] ; and eax,15 ; 3 - four partitions, 7 - eight p., 15 - sixteen, etc. cmp eax,15 - jb @f + jb @f mov eax,0 @@: inc eax @@ -642,7 +626,7 @@ close: call _f32p .noapply: - cmp ah,32 ; SET SOUND BLASTER 16 BASE + cmp ah,32 ; SET SOUND BLASTER 16 BASE jnz nosbm sub [sb16],2 call draw_infotext @@ -657,7 +641,7 @@ close: call _sb16 nosbs: - cmp ah,52 ; SET WINDOWS SOUND SYSTEM BASE + cmp ah,52 ; SET WINDOWS SOUND SYSTEM BASE jnz nowssm mov eax,[wss] sub eax,2 @@ -679,11 +663,11 @@ close: call _wssp nowsss: - cmp ah,42 ; SET SYSTEM LANGUAGE BASE + cmp ah,42 ; SET SYSTEM LANGUAGE BASE jnz nosysm mov eax,[syslang] dec eax - jz still + jz still mov [syslang],eax call draw_infotext nosysm: @@ -691,7 +675,7 @@ close: jnz nosysp mov eax,[syslang] cmp eax,4 - je nosysp + je nosysp inc eax mov [syslang],eax call draw_infotext @@ -704,8 +688,34 @@ close: call draw_window call drawtime nosyss: - - cmp ah,3 ; SET KEYMAP + cmp ah,132 ; SET MOUSE SPEED + jnz .nominus + mov eax,[mouse_speed] + sub eax,2 + cmp eax,9 + jb @f + mov eax,8 +@@: + inc eax + mov [mouse_speed],eax + call draw_infotext + .nominus: + cmp ah,133 + jnz .noplus + mov eax,[mouse_speed] + cmp eax,9 + jb @f + mov eax,0 +@@: + inc eax + mov [mouse_speed],eax + call draw_infotext + .noplus: + cmp ah,131 + jnz .noapply + call _mouse + .noapply: + cmp ah,3 ; SET KEYMAP jne still call _keyboard jmp still @@ -779,7 +789,7 @@ close: mov edx,4 int 0x40 nosetkeylru: - cmp [keyboard],4 ;french + cmp [keyboard],4 ;french jnz nosetkeylfr mov eax,21 mov ebx,2 @@ -847,12 +857,12 @@ draw_window: mov ebx,1 int 0x40 - xor eax,eax ; DRAW WINDOW + xor eax,eax ; DRAW WINDOW mov ebx,40*65536+355+BBB - mov ecx,40*65536+300 - mov edx,0x82111199 - mov esi,0x805588dd - mov edi,0x005588dd + mov ecx,40*65536+310 + mov edx,0x83111199 +; mov esi,0x805588dd +; mov edi,0x005588dd int 0x40 mov eax,4 @@ -860,24 +870,26 @@ draw_window: mov ecx,0x10ffffff mov edx,labelt cmp [syslang],4 - je ruslabel + je ruslabel add edx,20 ruslabel: - mov esi,26 + mov esi,19 ;26 int 0x40 - mov eax,8 ; CLOSE BUTTON - mov ebx,(355+BBB-19)*65536+12 - mov ecx,5*65536+12 - mov edx,1 +; mov eax,8 ; CLOSE BUTTON +; mov ebx,(355+BBB-19)*65536+12 +; mov ecx,5*65536+12 +; mov edx,1 +; mov esi,0x005588dd +; int 0x40 + + mov eax,8 ; APPLY ALL + mov ebx,(350-79)*65536+100 + mov ecx,266*65536+12 + mov edx,100 mov esi,0x005588dd int 0x40 - ; APPLY ALL - mov ebx,(350-79)*65536+100 - mov ecx,251*65536+12 - mov edx,100 - int 0x40 - add ecx,16*65536 ; SAVE ALL + add ecx,16*65536 ; SAVE ALL dec edx int 0x40 @@ -935,6 +947,10 @@ draw_window: mov ecx,43+24*8 ; 24 call draw_buttons + mov edx,131 + mov ecx,43+26*8 ; 26 + call draw_buttons + call draw_infotext mov eax,12 @@ -950,7 +966,7 @@ draw_infotext: pusha - mov eax,[keyboard] ; KEYBOARD + mov eax,[keyboard] ; KEYBOARD test eax,eax jnz noen mov [text00+LLL*10+28],dword 'ENGL' @@ -978,7 +994,7 @@ draw_infotext: nofr: - mov eax,[syslang] ; SYSTEM LANGUAGE + mov eax,[syslang] ; SYSTEM LANGUAGE dec eax test eax,eax jnz noen5 @@ -1009,15 +1025,15 @@ draw_infotext: mov eax,[midibase] mov esi,text00+LLL*0+32 - call hexconvert ; MIDI BASE + call hexconvert ; MIDI BASE - mov eax,[sb16] ; SB16 BASE + mov eax,[sb16] ; SB16 BASE mov esi,text00+LLL*2+32 call hexconvert - mov eax,[wss] ; WSS BASE + mov eax,[wss] ; WSS BASE cmp eax,1 jnz nowss1 mov [wssp],dword 0x530 @@ -1039,7 +1055,7 @@ draw_infotext: mov esi,text00+LLL*12+32 call hexconvert - mov eax,[cdbase] ; CD BASE + mov eax,[cdbase] ; CD BASE cmp eax,1 jnz noe1 mov [text00+LLL*4+28],dword 'PRI.' @@ -1066,7 +1082,7 @@ draw_infotext: nog2: - mov eax,[hdbase] ; HD BASE + mov eax,[hdbase] ; HD BASE cmp eax,1 jnz hnoe1 mov [text00+LLL*6+28],dword 'PRI.' @@ -1093,25 +1109,29 @@ draw_infotext: hnog2: - mov eax,[f32p] ; FAT32 PARTITION + mov eax,[f32p] ; FAT32 PARTITION add al,48 mov [text00+LLL*14+28],al - mov eax,[sound_dma] ; SOUND DMA + mov eax,[sound_dma] ; SOUND DMA add eax,48 mov [text00+LLL*16+28],al mov eax,[lba_read] - call onoff ; LBA READ + call onoff ; LBA READ mov [text00+LLL*18+28],ebx mov eax,[pci_acc] - call onoff ; PCI ACCESS + call onoff ; PCI ACCESS mov [text00+LLL*20+28],ebx + mov eax,[mouse_speed] ; MOUSE ACSELERATION + add al,48 + mov [text00+LLL*26+28],al + mov eax,13 mov ebx,175*65536+85 - mov ecx,40*65536+205 + mov ecx,40*65536+225 mov edx,0x80111199-19 int 0x40 @@ -1131,31 +1151,31 @@ draw_infotext: ret drawtime: - mov ax,[time] ;hours 22 + mov ax,[time] ;hours 22 mov cl,1 call unpacktime mov [text00+LLL*22+28],word bx - mov al,ah ;minutes + mov al,ah ;minutes inc cl call unpacktime mov [text00+LLL*22+31],word bx mov eax,[date] mov ch,3 call unpackdate - mov [text00+LLL*24+34],word bx ;year 24 + mov [text00+LLL*24+34],word bx ;year 24 mov al,ah mov ch,1 call unpackdate - mov [text00+LLL*24+28],word bx ;month + mov [text00+LLL*24+28],word bx ;month bswap eax mov al,ah inc ch call unpackdate - mov [text00+LLL*24+31],word bx ;day + mov [text00+LLL*24+31],word bx ;day mov eax,13 mov ebx,175*65536+85 - mov ecx,40*65536+205 + mov ecx,40*65536+225 mov edx,0x80111199-19 int 0x40 @@ -1173,7 +1193,7 @@ draw_infotext: ret unpacktime: - cmp byte [blinkpar],cl ;translate packed number to ascii + cmp byte [blinkpar],cl ;translate packed number to ascii jne unpack1 chkblink: bt dword [blinkpar],16 @@ -1182,7 +1202,7 @@ draw_infotext: ret unpackdate: cmp byte [blinkpar+1],ch - je chkblink + je chkblink unpack1: xor bx,bx mov bh,al @@ -1192,7 +1212,7 @@ draw_infotext: add bx,0x3030 ret - hexconvert: ;converting dec to hex in ascii + hexconvert: ;converting dec to hex in ascii xor ebx,ebx mov bl,al and bl,15 @@ -1222,13 +1242,13 @@ onoff: jne norus1 mov ebx,'ДА ' cmp eax,1 - je exitsub + je exitsub mov ebx,'НЕТ ' ret norus1: mov ebx,'ON ' cmp eax,1 - je exitsub + je exitsub mov ebx,'OFF ' exitsub: ret @@ -1303,10 +1323,18 @@ _syslang: int 0x40 ret +_mouse: + mov eax,18 + mov ebx,19 + mov ecx,1 + mov edx,[mouse_speed] + int 0x40 + ret + loadtxt: cld mov edi,text00 - mov ecx,428 + mov ecx,458 ;28 cmp [syslang],4 jne norus mov esi,textrus @@ -1330,31 +1358,31 @@ settime: mov dx,0x70 call startstopclk dec dx - mov al,2 ;set minutes + mov al,2 ;set minutes out dx,al inc dx mov al,byte [time+1] out dx,al dec dx - mov al,4 ;set hours + mov al,4 ;set hours out dx,al inc dx mov al,byte [time] out dx,al dec dx - mov al,7 ;set day + mov al,7 ;set day out dx,al inc dx mov al,byte [date+2] out dx,al dec dx - mov al,8 ;set month + mov al,8 ;set month out dx,al inc dx mov al,byte [date+1] out dx,al dec dx - mov al,9 ;set year + mov al,9 ;set year out dx,al inc dx mov al,byte [date] @@ -1367,18 +1395,16 @@ startstopclk: mov al,0x0b out dx,al inc dx - in al,dx + in al,dx btc ax,7 out dx,al ret ; DATA AREA -count: db 0x0 +count: db 0x0 blinkpar: dd 0x0 -time: dw 0x0 -date: dd 0x0 - -filename: db 'SETUP DAT',0 +time: dw 0x0 +date: dd 0x0 textrus: @@ -1408,8 +1434,10 @@ textrus: db ' ' db 'Системная дата (м,д,г) : 00/00/00 - + Выбор ' db ' ' + db 'Скорость курсора мыши : 1 - + Применить' + db ' ' db 'ВНИМАНИЕ: Применить все ' - db 'ИСПОЛЬЗУЙТЕ ДОСТУП К FAT-32 ОСТОРОЖНО! ' + db 'ИСПОЛЬЗУЙТЕ ДОСТУП К FAT С ОСТОРОЖНОСТЬЮ! ' db 'НЕ ЗАБУДЬТЕ СОХРАНИТЬ НАСТРОЙКИ Сохранить все ' db 'x' @@ -1441,15 +1469,17 @@ texteng: db ' ' db 'SYSTEM DATE (M,D,Y) : 00/00/00 - + SELECT ' db ' ' + db 'Mouse pointer speed : 1 - + APPLY ' + db ' ' db 'NOTE: APPLY ALL ' - db 'TEST FAT32 FUNCTIONS WITH EXTREME CARE ' + db 'TEST FAT FUNCTIONS WITH EXTREME CARE ' db 'SAVE YOUR SETTINGS BEFORE QUIT MENUET SAVE ALL ' db 'x' labelt: - db 'НАСТРОЙКА УСТРОЙСТВ MENUET DEVICE SETUP ' + db 'НАСТРОЙКА УСТРОЙСТВ DEVICE SETUP ' -hex db '0123456789ABCDEF' +hex db '0123456789ABCDEF' alt_general: @@ -1628,21 +1658,38 @@ ru_keymap_shift: db 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' db 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' +read_fileinfo: + dd 0 + dd 0 + dd 0 + dd 52 + dd keyboard + db 0 + dd file_name + +save_fileinfo: + dd 2 + dd 0 + dd 0 + dd 52 + dd keyboard +file_name: db '/rd/1/setup.dat',0 + I_PARAM dd 0 -keyboard dd 0x0 -midibase dd 0x320 -cdbase dd 0x2 -sb16 dd 0x220 -syslang dd 0x1 -wss dd 0x1 -wssp dd 0x0 -hdbase dd 0x1 -f32p dd 0x1 -sound_dma dd 0x1 -lba_read dd 0x1 -pci_acc dd 0x1 - +keyboard dd 0x0 +midibase dd 0x320 +cdbase dd 0x2 +sb16 dd 0x220 +syslang dd 0x1 +wss dd 0x1 +wssp dd 0x0 +hdbase dd 0x1 +f32p dd 0x1 +sound_dma dd 0x1 +lba_read dd 0x1 +pci_acc dd 0x1 +mouse_speed dd 0x3 text00: I_END: