diff --git a/kernel/trunk/docs/sysfuncr.txt b/kernel/trunk/docs/sysfuncr.txt index 727e4163e..077099c6b 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 - номер функции @@ -970,6 +970,7 @@ db 'Kolibri',0 значение не обрабатывается COM мышами. При очень больших значениях невозможно передвижение мыши на 1 пиксель и курсор будет прыгать на величину установленной скорости (подфункция 1). + Величину задержки можно регулировать через приложение SETUP. Устанавливаемая величина не контролируется кодом ядра. * В подфункции 4 устанавливаемая величина не контролируется кодом ядра. Перед использованием необходимо узнать текущее разрешение экрана и @@ -1009,9 +1010,9 @@ db 'Kolibri',0 * cl = байт для вывода Возвращаемое значение (одинаково для обеих подфункций): * eax = 0 - успешно - * eax = 1 - не определ╕н базовый порт + * eax = 1 - не определ+н базовый порт Замечания: - * Предварительно должен быть определ╕н базовый порт вызовом + * Предварительно должен быть определ+н базовый порт вызовом подфункции 1 функции 21. ====================================================================== @@ -1130,9 +1131,9 @@ db 'Kolibri',0 ====================================================================== =========== Функция 21, подфункция 7 - установить базу HD. =========== ====================================================================== -База HD нужна для определения, на какой ж╕сткий диск писать, при +База HD нужна для определения, на какой ж+сткий диск писать, при использовании устаревших функций работы с файловой системой и функций, -неявно использующих ж╕сткий диск (типа подфункции 6 функции 18); +неявно использующих ж+сткий диск (типа подфункции 6 функции 18); при использовании функций 58 и 70 и современного синтаксиса /HD0,/HD1,/HD2,/HD3 эти функции сами устанавливают базу. Параметры: @@ -1144,17 +1145,17 @@ db 'Kolibri',0 Замечания: * Любое приложение в любой момент времени может изменить базу. * Не следует изменять базу, когда какое-нибудь приложение работает - с ж╕стким диском. Если не хотите глюков системы. + с ж+стким диском. Если не хотите глюков системы. * Получить установленную базу можно вызовом подфункции 7 функции 26. - * Следует также определить используемый раздел ж╕сткого диска + * Следует также определить используемый раздел ж+сткого диска подфункцией 8. ====================================================================== ========== Функция 21, подфункция 8 - установить раздел HD. ========== ====================================================================== -Раздел HD нужен для определения, на какой раздел ж╕сткого диска +Раздел HD нужен для определения, на какой раздел ж+сткого диска писать, при использовании устаревших функций работы с файловой -системой и функций, неявно использующих ж╕сткий диск (типа +системой и функций, неявно использующих ж+сткий диск (типа подфункции 6 функции 18); при использовании функций 58 и 70 и современного синтаксиса /HD0,/HD1,/HD2,/HD3 эти функции сами устанавливают базу и раздел. @@ -1167,13 +1168,13 @@ db 'Kolibri',0 Замечания: * Любое приложение в любой момент времени может изменить раздел. * Не следует изменять раздел, когда какое-нибудь приложение работает - с ж╕стким диском. Если не хотите глюков системы. + с ж+стким диском. Если не хотите глюков системы. * Получить установленный раздел можно вызовом подфункции 8 функции 26. * Проверок на корректность не делается. - * Узнать число разделов на ж╕стком диске можно вызовом + * Узнать число разделов на ж+стком диске можно вызовом подфункции 11 функции 18. - * Следует также определить используемую базу ж╕сткого диска + * Следует также определить используемую базу ж+сткого диска подфункцией 7. ====================================================================== @@ -1238,7 +1239,7 @@ db 'Kolibri',0 * если драйвер загружен: * eax = 'MDAZ' (в стиле fasm'а, т.е. 'M' - младший байт, 'Z' - старший) - сигнатура - * ebx = текущая частота разв╕ртки (в Гц) + * ebx = текущая частота разв+ртки (в Гц) * ecx разрушается * буфер, на который указывает edx, заполнен Формат буфера: @@ -1249,15 +1250,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, ничего не делая). - * В текущей реализации поддерживается только одна частота разв╕ртки + * В текущей реализации поддерживается только одна частота разв+ртки на видеорежим. ====================================================================== @@ -1272,13 +1273,13 @@ db 'Kolibri',0 * eax = -1 - драйвер не загружен или не инициализирован; ebx,ecx разрушаются * eax = [ширина]*65536 + [высота] - * ebx = частота вертикальной разв╕ртки (в Гц) + * ebx = частота вертикальной разв+ртки (в Гц) * ecx = номер текущего видеорежима Замечания: * Драйвер предварительно должен быть инициализирован вызовом функции драйвера 1. * Если нужны только размеры экрана, целесообразней использовать - функцию 14 с уч╕том того, что она возвращает размеры на 1 меньше. + функцию 14 с уч+том того, что она возвращает размеры на 1 меньше. ====================================================================== = Функция 21, подфункция 13, подподфункция 3 - установить видеорежим. @@ -1287,7 +1288,7 @@ db 'Kolibri',0 * eax = 21 - номер функции * ebx = 13 - номер подфункции * ecx = 3 - номер функции драйвера - * edx = [частота разв╕ртки]*65536 + [номер видеорежима] + * edx = [частота разв+ртки]*65536 + [номер видеорежима] Возвращаемое значение: * eax = -1 - драйвер не загружен, не инициализирован или произошла ошибка @@ -1372,7 +1373,7 @@ db 'Kolibri',0 * Вообще-то CMOS поддерживает для будильника установку значения 0xFF в качестве одного из параметров и означает это, что соответствующий параметр игнорируется. Но в текущей реализации - это не пройд╕т (верн╕тся значение 1). + это не пройд+т (верн+тся значение 1). * Будильник - глобальный системный ресурс; установка будильника автоматически отменяет предыдущую установку. Впрочем, на данный момент ни одна программа его не использует. @@ -1380,7 +1381,7 @@ db 'Kolibri',0 ====================================================================== ============== Функция 23 - ожидать события с таймаутом. ============= ====================================================================== -Если очередь сообщений пуста, жд╕т появления сообщения в очереди, +Если очередь сообщений пуста, жд+т появления сообщения в очереди, но не более указанного времени. Затем считывает сообщение из очереди. Параметры: @@ -1396,8 +1397,8 @@ db 'Kolibri',0 * Для проверки, есть ли сообщение в очереди, используйте функцию 11. Чтобы ждать сколь угодно долго, используйте функцию 10. * Передача ebx=0 приводит к моментальному возвращению eax=0. - * При текущей реализации произойд╕т немедленный возврат из функции - с eax=0, если сложение ebx с текущим значением сч╕тчика времени + * При текущей реализации произойд+т немедленный возврат из функции + с eax=0, если сложение ebx с текущим значением сч+тчика времени вызовет 32-битное переполнение. ====================================================================== @@ -1576,9 +1577,9 @@ db 'Kolibri',0 ====================================================================== ============ Функция 26, подфункция 7 - получить базу HD. ============ ====================================================================== -База HD нужна для определения, на какой ж╕сткий диск писать, при +База HD нужна для определения, на какой ж+сткий диск писать, при использовании устаревших функций работы с файловой системой и функций, -неявно использующих ж╕сткий диск (типа подфункции 6 функции 18); +неявно использующих ж+сткий диск (типа подфункции 6 функции 18); при использовании функций 58 и 70 и современного синтаксиса /HD0,/HD1,/HD2,/HD3 эти функции сами устанавливают базу. Параметры: @@ -1589,14 +1590,14 @@ db 'Kolibri',0 Замечания: * Любое приложение в любой момент времени может изменить базу. * Установить базу можно вызовом подфункции 7 функции 21. - * Получить используемый раздел ж╕сткого диска можно подфункцией 8. + * Получить используемый раздел ж+сткого диска можно подфункцией 8. ====================================================================== =========== Функция 26, подфункция 8 - получить раздел HD. =========== ====================================================================== -Раздел HD нужен для определения, на какой раздел ж╕сткого диска +Раздел HD нужен для определения, на какой раздел ж+сткого диска писать, при использовании устаревших функций работы с файловой -системой и функций, неявно использующих ж╕сткий диск (типа +системой и функций, неявно использующих ж+сткий диск (типа подфункции 6 функции 18); при использовании функций 58 и 70 и современного синтаксиса /HD0,/HD1,/HD2,/HD3 эти функции сами устанавливают базу и раздел. @@ -1608,12 +1609,12 @@ db 'Kolibri',0 Замечания: * Любое приложение в любой момент времени может изменить раздел. * Установить раздел можно вызовом подфункции 8 функции 21. - * Узнать число разделов на ж╕стком диске можно вызовом + * Узнать число разделов на ж+стком диске можно вызовом подфункции 11 функции 18. - * Получить используемую базу ж╕сткого диска можно подфункцией 7. + * Получить используемую базу ж+сткого диска можно подфункцией 7. ====================================================================== -=== Функция 26, подфункция 9 - получить значение сч╕тчика времени. === +=== Функция 26, подфункция 9 - получить значение сч+тчика времени. === ====================================================================== Параметры: * eax = 26 - номер функции @@ -1622,7 +1623,7 @@ db 'Kolibri',0 * eax = число сотых долей секунды, прошедших с момента запуска системы Замечания: - * Сч╕тчик бер╕тся по модулю 2^32, что соответствует немногим более + * Сч+тчик бер+тся по модулю 2^32, что соответствует немногим более 497 суток. * Системное время можно получить функцией 3. @@ -1641,13 +1642,13 @@ db 'Kolibri',0 ====================================================================== ====================== Функция 26, подфункция 11 ===================== -=========== Узнать, разреш╕н ли низкоуровневый доступ к HD. ========== +=========== Узнать, разреш+н ли низкоуровневый доступ к HD. ========== ====================================================================== Параметры: * eax = 26 - номер функции * ebx = 11 - номер подфункции Возвращаемое значение: - * eax = 0/1 - запрещ╕н/разреш╕н + * eax = 0/1 - запрещ+н/разреш+н Замечания: * Используется при LBA-чтении (подфункция 8 функции 58). * Установить текущее состояние можно вызовом @@ -1655,13 +1656,13 @@ db 'Kolibri',0 ====================================================================== ====================== Функция 26, подфункция 12 ===================== -========== Узнать, разреш╕н ли низкоуровневый доступ к PCI. ========== +========== Узнать, разреш+н ли низкоуровневый доступ к PCI. ========== ====================================================================== Параметры: * eax = 26 - номер функции * ebx = 12 - номер подфункции Возвращаемое значение: - * eax = 0/1 - запрещ╕н/разреш╕н + * eax = 0/1 - запрещ+н/разреш+н Замечания: * Используется при работе с шиной PCI (функция 62). * Текущая реализация использует только младший бит ecx. @@ -1761,7 +1762,7 @@ db 'Kolibri',0 * Эта функция устарела; функция 70 позволяет выполнять те же действия с расширенными возможностями. * Если указать ненулевое значение в esi и на рамдиске уже есть - указанный файл, то будет создан ещ╕ один файл с тем же именем. + указанный файл, то будет создан ещ+ один файл с тем же именем. * В противном случае файл перезаписывается. * Имя файла должно быть либо в формате 8+3 символов (первые 8 символов - собственно имя, последние 3 - расширение, @@ -1813,7 +1814,7 @@ db 'Kolibri',0 Если y>=ywnd, то младшее слово неотрицательно и содержит относительную y-координату, а старшее - относительную x-координату (правильного знака). В противном случае младшее слово отрицательно - и вс╕ равно содержит относительную y-координату, + и вс+ равно содержит относительную y-координату, а к старшему слову следует прибавить 1. ----------------- Подфункция 2 - нажатые кнопки мыши ----------------- @@ -1890,7 +1891,7 @@ db 'Kolibri',0 ======== Функция 40 - установить маску для ожидаемых событий. ======== ====================================================================== Маска для ожидаемых событий влияет на функции работы с событиями 10, -11, 23 - они сообщают только о событиях, разреш╕нных этой маской. +11, 23 - они сообщают только о событиях, разреш+нных этой маской. Параметры: * eax = 40 - номер функции * ebx = маска: бит i соответствует событию i+1 (см. список событий) @@ -1901,7 +1902,7 @@ db 'Kolibri',0 * Маска по умолчанию (7=111b) разрешает извещения о перерисовке и нажатиях клавиш и кнопок. Этого достаточно для большинства приложений. - * События, запрещ╕нные в маске, вс╕ равно сохраняются, если + * События, запрещ+нные в маске, вс+ равно сохраняются, если приходят; о них просто не извещают функции работы с событиями. * Функции работы с событиями учитывают маску на момент вызова функции, а не на момент поступления сообщения. @@ -1934,8 +1935,8 @@ db 'Kolibri',0 * eax = 0 * ecx = 1 * ebx разрушается - * если вс╕ в порядке и данные были: - * eax = размер данных, ещ╕ не прочитанных из буфера (в байтах) + * если вс+ в порядке и данные были: + * eax = размер данных, ещ+ не прочитанных из буфера (в байтах) * ecx = 0 * ebx = очередной байт Замечания: @@ -1963,7 +1964,7 @@ db 'Kolibri',0 * ebx игнорируется * ecx = 0x8000nnnn, где nnnn = номер порта (от 0 до 0xFFFF) Возвращаемое значение: - * eax = 0 - успешно, при этом ebx = введ╕нный байт + * eax = 0 - успешно, при этом ebx = введ+нный байт * eax = 1 - поток не зарезервировал данный порт Замечания: * Предварительно поток должен зарезервировать за собой @@ -1971,7 +1972,7 @@ db 'Kolibri',0 * Для зарезервированных портов вместо вызова этих функций лучше использовать команды процессора in/out - это значительно быстрее и несколько короче и проще. Из незарезервированных - портов читать вс╕ равно нельзя. + портов читать вс+ равно нельзя. ====================================================================== ======== Функция 44 - определить действия при поступлении IRQ. ======= @@ -2101,7 +2102,7 @@ db 'Kolibri',0 * ebx = 1 - номер подфункции * ecx = тип кнопок: * 0 = плоские - * 1 = объ╕мные + * 1 = объ+мные Возвращаемое значение: * функция не возвращает значения Замечания: @@ -2126,7 +2127,7 @@ db 'Kolibri',0 подфункцией 0. * Таблица стандартных цветов влияет только на приложения, которые эту таблицу явным образом получают (подфункцией 3) и - используют (указывая цвета из не╕ при вызовах функций рисования). + используют (указывая цвета из не+ при вызовах функций рисования). * Таблица стандартных цветов входит в скин и устанавливается заново при установке скина (подфункции 8). * Таблицу цветов можно просматривать/изменять интерактивно с помощью @@ -2272,7 +2273,7 @@ dword- поле промежуточного буфера и указано имя файла Возвращаемое значение: * eax = 0 - успешно - * иначе eax = код ошибки файловой системы; если файл не зада╕т скин, + * иначе eax = код ошибки файловой системы; если файл не зада+т скин, то возвращается ошибка 3 (неизвестная файловая система). Замечания: * При успешной загрузке скина все окна извещаются о необходимости @@ -2307,7 +2308,7 @@ dword- ================= Функция 50 - установка формы окна. ================= ====================================================================== Обычные окна представляют собой прямоугольники. С помощью этой функции -окну можно придать произвольную форму. Форма зада╕тся набором точек +окну можно придать произвольную форму. Форма зада+тся набором точек внутри обрамляющего прямоугольника, принадлежащих окну. Положение и размеры обрамляющего прямоугольника задаются функцией 0 и изменяются функцией 67. @@ -2324,7 +2325,7 @@ dword- Параметры: * eax = 50 - номер функции * ebx = 1 - номер подфункции - * ecx зада╕т масштаб: каждый байт данных определяет + * ecx зада+т масштаб: каждый байт данных определяет (2^scale)*(2^scale) пикселей Возвращаемое значение: * функция не возвращает значения @@ -2518,8 +2519,8 @@ dword- * eax = 53 - номер функции * ebx = 0 - номер подфункции * ecx = локальный порт (учитывается только младшее слово) - * edx = удал╕нный порт (учитывается только младшее слово) - * esi = удал╕нный IP + * edx = удал+нный порт (учитывается только младшее слово) + * esi = удал+нный IP Возвращаемое значение: * eax = -1 = 0xFFFFFFFF - ошибка; ebx разрушается * eax = хэндл сокета (некоторое число, однозначно идентифицирующее @@ -2600,8 +2601,8 @@ dword- * eax = 53 - номер функции * ebx = 5 - номер подфункции * ecx = локальный порт (учитывается только младшее слово) - * edx = удал╕нный порт (учитывается только младшее слово) - * esi = удал╕нный IP + * edx = удал+нный порт (учитывается только младшее слово) + * esi = удал+нный IP * edi = режим открытия: SOCKET_PASSIVE=0 или SOCKET_ACTIVE=1 Возвращаемое значение: * eax = -1 = 0xFFFFFFFF - ошибка; ebx разрушается @@ -2706,7 +2707,7 @@ dword- * 201: размер таблицы ARP (в элементах) (20 в текущей версии) * 202: прочитать элемент edx таблицы ARP во временный буфер, откуда берут информацию 5 последующих типов; - в этом случае eax неопредел╕н + в этом случае eax неопредел+н * 203: IP-адрес, запомненный типом 202 * 204: старшее dword MAC-адреса, запомненного типом 202 * 205: младшее word MAC-адреса, запомненного типом 202 @@ -2742,9 +2743,9 @@ dword- * функция не возвращает значения Замечания: * Предварительно данные должны быть загружены подфункцией 0 и - определ╕н их формат подфункцией 2. + определ+н их формат подфункцией 2. * Функция возвращает управление, когда началось проигрывание данных; - после этого проигрывание ид╕т независимо от приложения (и вообще + после этого проигрывание ид+т независимо от приложения (и вообще не требует загрузки процессора). * Предварительно должны быть определены базовый порт SB16 (подфункцией 4 функции 21) и канал DMA @@ -2782,18 +2783,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) @@ -2801,12 +2802,12 @@ dword- * Пищание спикером может быть запрещено/разрешено подфункцией 8 функции 18. * Функция возвращает управление, сообщив куда следует информацию - о запросе. Само проигрывание ид╕т независимо от программы. + о запросе. Само проигрывание ид+т независимо от программы. * Данные должны сохраняться в памяти по крайней мере до конца проигрывания. ====================================================================== -============= Функция 56 - записать файл на ж╕сткий диск. ============ +============= Функция 56 - записать файл на ж+сткий диск. ============ ====================================================================== Параметры: * eax = 56 - номер функции @@ -2819,11 +2820,11 @@ dword- Замечания: * Эта функция устарела; функция 70 позволяет выполнять те же действия с расширенными возможностями. - * Данная функция предполагает, что во время е╕ вызова одним + * Данная функция предполагает, что во время е+ вызова одним приложением никакое другое приложение не работает - с ж╕стким диском. + с ж+стким диском. * Путь к файлу - ASCIIZ-строка, которая может быть пустой - (если файл созда╕тся в корневом каталоге) или иметь формат + (если файл созда+тся в корневом каталоге) или иметь формат /d1/d2/.../dn, где все имена папок должны иметь формат 8+3, т.е. 8 символов имени и 3 символа расширения без разделителя, при необходимости дополненные пробелами; @@ -2858,7 +2859,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 для доступа соответственно @@ -2907,7 +2908,7 @@ dword- * +12 = +0xC: dword: указатель на буфер, куда будут записаны данные * +16 = +0x10: dword: указатель на буфер для работы системы (4096 байт) - * +20 = +0x14: ASCIIZ-имя файла, правила формирования им╕н указаны в + * +20 = +0x14: ASCIIZ-имя файла, правила формирования им+н указаны в общем описании Возвращаемое значение: * eax = 0 - успешно, иначе код ошибки файловой системы @@ -2922,7 +2923,7 @@ dword- документации по FAT. * Размер папки определяется по размеру цепочки кластеров в FAT. * Если файл кончился раньше, чем был прочитан последний запрошенный - блок, то функция прочитает, сколько сможет, после чего верн╕т + блок, то функция прочитает, сколько сможет, после чего верн+т eax=6 (EOF). * Функция позволяет читать корневые папки /rd/1,/fd/x,/hd[n]/x, но в первых двух случаях текущая реализация не следует @@ -2936,7 +2937,7 @@ dword- 0x1C00=7168 байт; но возвращается ebx=0 (за исключением случая предыдущего пункта); * как ни странно, можно прочитать 14-й блок (там, вообще говоря, - мусор - напоминаю, сч╕т вед╕тся с 0); + мусор - напоминаю, сч+т вед+тся с 0); * если был запрошен хотя бы один блок с номером, не меньшим 14, то возвращается eax=6(EOF); иначе eax=0. Для /fd/x: @@ -2958,7 +2959,7 @@ dword- ====================================================================== ============ Функция 58, подфункция 1 - перезаписать файл. =========== ====================================================================== -Если файл не существует, он созда╕тся. +Если файл не существует, он созда+тся. Если файл существует, он перезаписывается. Параметры: * eax = 58 - номер функции @@ -2970,7 +2971,7 @@ dword- * +12 = +0xC: dword: указатель на данные для записи * +16 = +0x10: dword: указатель на буфер для работы системы (4096 байт) - * +20 = +0x14: ASCIIZ-имя файла, правила формирования им╕н указаны в + * +20 = +0x14: ASCIIZ-имя файла, правила формирования им+н указаны в общем описании Возвращаемое значение: * eax = 0 - успешно, иначе код ошибки файловой системы @@ -2991,14 +2992,14 @@ dword- * +12 = +0xC: dword: игнорируется * +16 = +0x10: dword: указатель на буфер для работы системы (4096 байт) - * +20 = +0x14: ASCIIZ-имя файла, правила формирования им╕н указаны в + * +20 = +0x14: ASCIIZ-имя файла, правила формирования им+н указаны в общем описании Возвращаемое значение: * eax = 0 - успешно, иначе код ошибки файловой системы * ebx разрушается Замечания: * При работе с дискетой не следует удалять непустую папку. - Код работы с ж╕стким диском непустые папки удаляет корректно + Код работы с ж+стким диском непустые папки удаляет корректно (т.е. рекурсивно со всеми файлами и вложенными папками). Рамдиск папок не поддерживает. @@ -3015,20 +3016,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-й функции блокирует эту возможность для приложений, сразу возвращая управление @@ -3047,14 +3048,14 @@ dword- * +12 = +0xC: dword: игнорируется * +16 = +0x10: dword: указатель на буфер для работы системы (4096 байт) - * +20 = +0x14: ASCIIZ-имя файла, правила формирования им╕н указаны в + * +20 = +0x14: ASCIIZ-имя файла, правила формирования им+н указаны в общем описании Возвращаемое значение: * eax = 0 - успешно, иначе код ошибки файловой системы * ebx разрушается Замечания: * Рамдиск и дискеты не поддерживают эту функцию, - она только для ж╕стких дисков. + она только для ж+стких дисков. ====================================================================== == Функция 58, подфункция 5 - переименовать/переместить файл/папку. == @@ -3069,21 +3070,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. Это единственная функция, которая вообще возвращает этот код. @@ -3115,7 +3116,7 @@ dword- (за исключением предыдущего случая): * eax = 5 * ebx не меняется - * если LBA-доступ запрещ╕н подфункцией 11 функции 21: + * если LBA-доступ запрещ+н подфункцией 11 функции 21: * eax = 2 * ebx разрушается * для рамдиска: попытка чтения блока за пределами рамдиска @@ -3128,17 +3129,17 @@ dword- * Размер блока - 512 байт; читается один блок. * Не следует полагаться на возвращаемое значение, оно может измениться в следующих версиях. - * Требуется, чтобы был разреш╕н LBA-доступ к устройствам + * Требуется, чтобы был разреш+н LBA-доступ к устройствам подфункцией 11 функции 21. Узнать это можно вызовом подфункцией 11 функции 26. * LBA-чтение дискеты не поддерживается. - * Функция считывает данные физического ж╕сткого диска; + * Функция считывает данные физического ж+сткого диска; если по каким-то причинам нужны данные конкретного раздела, - прид╕тся определять начальный сектор этого раздела + прид+тся определять начальный сектор этого раздела (либо напрямую через MBR, либо из расширенной структуры, возвращаемой той же подфункцией 11 функции 18). - * Функция не проверяет код ошибки ж╕сткого диска, так что запрос - несуществующего сектора вс╕ равно что-то прочитает + * Функция не проверяет код ошибки ж+сткого диска, так что запрос + несуществующего сектора вс+ равно что-то прочитает (вероятнее всего, нули, но это определяется устройством) и это будет считаться успехом (eax=0). @@ -3165,7 +3166,7 @@ dword- * ebx = общее число кластеров = 2847 * ecx = число свободных кластеров * dword [fileinfo] = размер кластера = 512 - * для ж╕сткого диска: база и раздел определяются подфункциями 7 и 8 + * для ж+сткого диска: база и раздел определяются подфункциями 7 и 8 функции 21: * eax = 0 (успех) * ebx = общее число кластеров @@ -3178,10 +3179,10 @@ dword- pushad-структуры, передающейся как аргумент системной функции). Теперь это исправлено, так что, возможно, имеет смысл возвращать размер кластера в edx, пока эту функцию не начали использовать. - * Вообще-то ещ╕ существует подфункция 11 функции 18, возвращающая + * Вообще-то ещ+ существует подфункция 11 функции 18, возвращающая информацию о файловой системе. По расширенной таблице дисковой подсистемы можно определить размер кластера (там он хранится - в секторах) и общее число кластеров для ж╕стких дисков. + в секторах) и общее число кластеров для ж+стких дисков. ====================================================================== ========== Функция 58, подфункция 16 - запустить программу. ========== @@ -3198,7 +3199,7 @@ dword- * +12 = +0xC: dword: игнорируется * +16 = +0x10: dword: указатель на буфер для работы системы (4096 байт) - * +20 = +0x14: ASCIIZ-имя файла, правила формирования им╕н указаны в + * +20 = +0x14: ASCIIZ-имя файла, правила формирования им+н указаны в общем описании Возвращаемое значение: * eax > 0 - программа загружена, eax содержит PID @@ -3210,7 +3211,7 @@ dword- (ASCIIZ-строка); учитываются либо все символы до завершающего нуля включительно, либо первые 256 символов, в зависимости от того, что меньше. - * Если процесс запускается как отлаживаемый, он созда╕тся + * Если процесс запускается как отлаживаемый, он созда+тся в замороженном состоянии; для запуска используйте подфункцию 5 функции 69. @@ -3248,7 +3249,7 @@ dword- из ядра убрать совсем, вместе с приложением systrace. * Информация о системных вызовах сохраняется в системном кольцевом буфере на 0x10 входов. - Эта функция просто копирует указанный объ╕м данных + Эта функция просто копирует указанный объ+м данных из упомянутого буфера по указанному адресу. * Какой из входов в буфере соответствует последнему вызову, можно определить по значению eax, а именно, @@ -3271,7 +3272,7 @@ IPC интерпретировать конкретное сообщение. -------- Подфункция 1 - установить область для получения IPC --------- -Вызывается процессом-при╕мником. +Вызывается процессом-при+мником. Параметры: * eax = 60 - номер функции * ebx = 1 - номер подфункции @@ -3298,21 +3299,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 - получить параметры для прямого доступа к графике. === @@ -3341,7 +3342,7 @@ IPC собственно LFB, так что чтение/запись по gs приводят непосредственно к изменению содержимого экрана. При работе в видеорежимах без LFB gs указывает на некоторую область данных - ядра, прич╕м все функции вывода на экран добросовестно выполняют + ядра, прич+м все функции вывода на экран добросовестно выполняют двойную работу по записи непосредственно на экран и по записи в этот буфер. В результате при чтении содержимого этого буфера результаты соответствуют содержимому экрана @@ -3358,7 +3359,7 @@ IPC Возвращаемое значение: * eax = [разрешение по оси x]*65536 + [разрешение по оси y] Замечания: - * Можно использовать функцию 14 с уч╕том того, что она возвращает + * Можно использовать функцию 14 с уч+том того, что она возвращает размеры на 1 меньше. Это полностью эквивалентный способ. ------------------------ Число бит на пиксель ------------------------ @@ -3373,7 +3374,7 @@ IPC * eax = 61 - номер функции * ebx = 3 - номер подфункции Возвращаемое значение: - * eax = число байт, которое занимает одна строка разв╕ртки + * eax = число байт, которое занимает одна строка разв+ртки (горизонтальная линия на экране) ====================================================================== @@ -3383,11 +3384,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 неопределено. @@ -3398,10 +3399,10 @@ IPC * eax = 62 - номер функции * bl = 1 - номер подфункции Возвращаемое значение: - * eax = -1 - доступ к PCI запрещ╕н; иначе + * eax = -1 - доступ к PCI запрещ+н; иначе * al = номер последней PCI-шины; оставшиеся байты eax разрушаются Замечания: - * Предварительно должен быть разреш╕н низкоуровневый доступ к PCI + * Предварительно должен быть разреш+н низкоуровневый доступ к PCI для приложений подфункцией 12 функции 21. * Если PCI BIOS не поддерживается, то значение al неопределено. @@ -3413,10 +3414,10 @@ IPC * eax = 62 - номер функции * bl = 2 - номер подфункции Возвращаемое значение: - * eax = -1 - доступ к PCI запрещ╕н; иначе + * eax = -1 - доступ к PCI запрещ+н; иначе * al = механизм (1 или 2); прочие байты eax разрушаются Замечания: - * Предварительно должен быть разреш╕н низкоуровневый доступ к PCI + * Предварительно должен быть разреш+н низкоуровневый доступ к PCI для приложений подфункцией 12 функции 21. * Механизм обращения выбирается в соответствии с характеристиками оборудования. @@ -3434,15 +3435,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 устройств на шине и игнорирует номер функции. Получить механизм доступа можно вызовом @@ -3465,16 +3466,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 устройств на шине и игнорирует номер функции. Получить механизм доступа можно вызовом @@ -3492,16 +3493,16 @@ IPC данные и из которого другая программа может эти данные прочитать. Есть соглашение, в соответствии с которым записываемые данные - текстовые строки, интерпретируемые как отладочные сообщения о ходе -выполнения программы. Ядро в определ╕нных ситуациях также записывает +выполнения программы. Ядро в определ+нных ситуациях также записывает на доску отладки сведения о выполнении некоторых функций; по соглашению сообщения ядра начинаются с префикса "K : ". Для просмотра доски отладки создано приложение board, -которое считывает данные из буфера и отображает их в сво╕м окне. board +которое считывает данные из буфера и отображает их в сво+м окне. board понимает последовательность кодов 13,10 как переход на новую строку. Символ с нулевым кодом в конце строки не обязателен, но и не мешает. В связи с появлением отладчика ценность доски отладки несколько снизилась, поскольку отладчик позволяет полностью контролировать ход -выполнения программы, прич╕м для этого не требуется никаких усилий +выполнения программы, прич+м для этого не требуется никаких усилий со стороны самой программы. Тем не менее во многих случаях доска отладки продолжает оставаться полезной. @@ -3548,7 +3549,7 @@ IPC ================= Функция 66 - работа с клавиатурой. ================= ====================================================================== Режим ввода влияет на результаты чтения клавиш функцией 2. -При загрузке программы для не╕ устанавливается ASCII-режим ввода. +При загрузке программы для не+ устанавливается ASCII-режим ввода. -------- Подфункция 1 - установить режим ввода с клавиатуры. --------- Параметры: @@ -3579,14 +3580,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. Прочитать "горячую клавишу" можно так же, как и обычную, - @@ -3594,10 +3595,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 = обе клавиши должны быть нажаты; @@ -3645,7 +3646,7 @@ IPC * Значение -1 для параметра означает "не изменять"; например, для перемещения окна без изменения размеров можно указать edx=esi=-1. * Предварительно окно должно быть определено функцией 0. - Она же зада╕т начальные координаты и размеры окна. + Она же зада+т начальные координаты и размеры окна. * Размеры окна понимаются в смысле функции 0, т.е. на один пиксель меньше, чем реальные размеры. * Вызов функции для максимизированных окон просто игнорируется. @@ -3655,7 +3656,7 @@ IPC * Функция посылает окну событие перерисовки (с кодом 1). ====================================================================== -=== Функция 68, подфункция 0 - получить сч╕тчик переключений задач. == +=== Функция 68, подфункция 0 - получить сч+тчик переключений задач. == ====================================================================== Параметры: * eax = 68 - номер функции @@ -3671,7 +3672,7 @@ IPC Функция завершает текущий квант времени, выделенный потоку, и переключается на следующий. (Какой поток какого процесса будет следующим, предсказать нельзя). -Позднее, когда до текущего потока дойд╕т очередь, +Позднее, когда до текущего потока дойд+т очередь, выполнение возобновится. Параметры: * eax = 68 - номер функции @@ -3688,7 +3689,7 @@ IPC * ecx = требуемое действие: * ecx = 0 - разрешить выполнение инструкции rdpmc (ReaD Performance-Monitoring Counters) - * ecx = 1 - узнать, включ╕н/выключен кэш + * ecx = 1 - узнать, включ+н/выключен кэш * ecx = 2 - включить кэш * ecx = 3 - выключить кэш Возвращаемое значение: @@ -3696,7 +3697,7 @@ IPC * eax = значение cr4 * для ecx=1: * eax = (cr0 and 0x60000000): - * eax = 0 - кэш включ╕н + * eax = 0 - кэш включ+н * eax <> 0 - кэш выключен * для ecx=2 и ecx=3: * функция не возвращает значения @@ -3707,7 +3708,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 - номер подфункции @@ -3717,10 +3718,10 @@ Architecture Software Developer's Manual, Volume 3, Appendix B); * ebx:eax = старший:младший dword результата Замечания: * Указание в ecx несуществующего или нереализованного для данного - процессора MSR повлеч╕т исключение в ядре, которое прибь╕т поток. + процессора MSR повлеч+т исключение в ядре, которое прибь+т поток. * Предварительно следует определить, поддерживаются ли MSR в целом, командой cpuid. Иначе возникнет уже другое исключение в ядре, - которое вс╕ равно прибь╕т поток. + которое вс+ равно прибь+т поток. ====================================================================== ========= Функция 68, подфункция 4 - записать в MSR-регистр. ========= @@ -3728,7 +3729,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 - номер подфункции @@ -3739,10 +3740,10 @@ Architecture Software Developer's Manual, Volume 3, Appendix B); * ebx:eax = копия esi:edi Замечания: * Указание в ecx несуществующего или нереализованного для данного - процессора MSR повлеч╕т исключение в ядре, которое прибь╕т поток. + процессора MSR повлеч+т исключение в ядре, которое прибь+т поток. * Предварительно следует определить, поддерживаются ли MSR в целом, командой cpuid. Иначе возникнет уже другое исключение в ядре, - которое вс╕ равно прибь╕т поток. + которое вс+ равно прибь+т поток. ====================================================================== ======= Функция 68, подфункция 5 - выделить физическую память. ======= @@ -3759,7 +3760,7 @@ Architecture Software Developer's Manual, Volume 3, Appendix B); устройством требуется разместить данные по известному физическому адресу. (В сущности, эта функция разрабатывалась для AC97WAV.) * Число блоков физической памяти ограничено (константой 24, - прич╕м эта константа включает и несколько блоков памяти + прич+м эта константа включает и несколько блоков памяти для надобностей ядра). * Освободить выделенную таким образом память можно подфункцией 6, копированием данных туда/обратно @@ -3830,7 +3831,7 @@ Architecture Software Developer's Manual, Volume 3, Appendix B); У процесса может быть только один отладчик; один процесс может отлаживать несколько разных. Система уведомляет отладчик о событиях, происходящих с отлаживаемым процессом. Сообщения записываются в буфер, -определ╕нный подфункцией 0. +определ+нный подфункцией 0. Формат сообщения: * +0: dword: код сообщения * +4: dword: PID отлаживаемого процесса @@ -3838,14 +3839,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: исключение произошло из-за режима @@ -4054,7 +4055,7 @@ Architecture Software Developer's Manual, Volume 3, Appendix B); * 01 = слово * 11 = двойное слово * esi = адрес точки останова; должен быть выровнен - соответственно длине (т.е. должен быть ч╕тным для + соответственно длине (т.е. должен быть ч+тным для точек останова на слово, кратен 4 для двойного слова) * если старший бит установлен - сбросить точку останова Возвращаемое значение: @@ -4074,10 +4075,10 @@ Architecture Software Developer's Manual, Volume 3, Appendix B); * Срабатывание точки останова заключается в генерировании отладочного исключения #DB, о котором система сообщает отладчику. * Точка останова на запись и чтение/запись срабатывает после - выполнения вызвавшей е╕ инструкции. + выполнения вызвавшей е+ инструкции. ====================================================================== -= Функция 70 - работа с файловой системой с поддержкой длинных им╕н. = += Функция 70 - работа с файловой системой с поддержкой длинных им+н. = ====================================================================== Параметры: * eax = 70 @@ -4107,7 +4108,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) @@ -4131,7 +4132,7 @@ Architecture Software Developer's Manual, Volume 3, Appendix B); ошибкой с кодом 2. ====================================================================== -= Функция 70, подфункция 0 - чтение файла с поддержкой длинных им╕н. = += Функция 70, подфункция 0 - чтение файла с поддержкой длинных им+н. = ====================================================================== Параметры: * eax = 70 - номер функции @@ -4142,7 +4143,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 @@ -4153,13 +4154,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 - номер функции @@ -4175,7 +4176,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 @@ -4191,7 +4192,7 @@ Architecture Software Developer's Manual, Volume 3, Appendix B); * ... Структура заголовка: * +0: dword: версия структуры (текущая версия = 1) - * +4: dword: количество размещ╕нных блоков; не больше, чем запрошено + * +4: dword: количество размещ+нных блоков; не больше, чем запрошено в поле +12 информационной структуры; может быть меньше, если в папке кончились файлы (то же самое, что и в ebx) * +8: dword: общее число файлов в папке @@ -4248,7 +4249,7 @@ Architecture Software Developer's Manual, Volume 3, Appendix B); данные содержат мусор. * Если файлы в папке кончились раньше, чем было прочитано запрошенное количество, то функция прочитает, сколько сможет, - после чего верн╕т eax=6 (EOF). + после чего верн+т eax=6 (EOF). * Любая папка на диске, кроме корневой, содержит два специальных входа "." и "..", идентифицирующих соответственно саму папку и родительскую папку. @@ -4259,7 +4260,7 @@ Architecture Software Developer's Manual, Volume 3, Appendix B); ====================================================================== ====================== Функция 70, подфункция 2 ====================== -======== Создание/перезапись файла с поддержкой длинных им╕н. ======== +======== Создание/перезапись файла с поддержкой длинных им+н. ======== ====================================================================== Параметры: * eax = 70 - номер функции @@ -4270,7 +4271,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 @@ -4279,11 +4280,11 @@ Architecture Software Developer's Manual, Volume 3, Appendix B); * eax = 0 - успешно, иначе код ошибки файловой системы * ebx = число записанных байт (возможно, 0) Замечания: - * Если файл с таким именем не существовал, он созда╕тся; если + * Если файл с таким именем не существовал, он созда+тся; если существовал, то перезаписывается. * Если свободного места на диске недостаточно, то функция запишет, - сколько сможет, после чего верн╕т код ошибки 8. - * Функция не поддерживается для CD (верн╕тся код ошибки 2). + сколько сможет, после чего верн+т код ошибки 8. + * Функция не поддерживается для CD (верн+тся код ошибки 2). ====================================================================== === Функция 70, подфункция 5 - получение информации о файле/папке. === @@ -4298,7 +4299,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 @@ -4326,7 +4327,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 @@ -4342,7 +4343,7 @@ Architecture Software Developer's Manual, Volume 3, Appendix B); Замечания: * Функция не поддерживает виртуальные папки типа /, /rd и корневые папки типа /rd/1. - * Функция не поддерживается для CD (верн╕тся код ошибки 2). + * Функция не поддерживается для CD (верн+тся код ошибки 2). ====================================================================== ============ Функция 70, подфункция 7 - запуск программы. ============ @@ -4358,7 +4359,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 @@ -4373,7 +4374,7 @@ Architecture Software Developer's Manual, Volume 3, Appendix B); (ASCIIZ-строка); учитываются либо все символы до завершающего нуля включительно, либо первые 256 символов, в зависимости от того, что меньше. - * Если процесс запускается как отлаживаемый, он созда╕тся + * Если процесс запускается как отлаживаемый, он созда+тся в замороженном состоянии; для запуска используйте подфункцию 5 функции 69. @@ -4421,7 +4422,7 @@ Architecture Software Developer's Manual, Volume 3, Appendix B); * 2 = нажата клавиша на клавиатуре (поступает, только когда окно активно) или нажата "горячая клавиша"; сбрасывается, когда все клавиши из буфера считаны функцией 2 - * 3 = нажата кнопка, определ╕нная ранее функцией 8 (или кнопка + * 3 = нажата кнопка, определ+нная ранее функцией 8 (или кнопка закрытия, созданная неявно функцией 0; кнопка минимизации обрабатывается системой и о ней сообщения не приходит; поступает, только когда окно активно; сбрасывается, когда все @@ -4430,7 +4431,7 @@ Architecture Software Developer's Manual, Volume 3, Appendix B); при размаскировке функцией 40) * 5 = перерисовывается фон рабочего стола (сбрасывается автоматически после перерисовки, так что если во время перерисовки - фона программа не жд╕т и не проверяет события, то этого события + фона программа не жд+т и не проверяет события, то этого события она не заметит) * 6 = событие от мыши (что-то случилось - нажатие на кнопку мыши или перемещение; сбрасывается при прочтении) @@ -4447,7 +4448,7 @@ Architecture Software Developer's Manual, Volume 3, Appendix B); ==================== Коды ошибок файловой системы ==================== ====================================================================== * 0 = успешно - * 1 = не определена база и/или раздел ж╕сткого диска (подфункциями + * 1 = не определена база и/или раздел ж+сткого диска (подфункциями 7, 8 функции 21) * 2 = функция не поддерживается для данной файловой системы * 3 = неизвестная файловая система @@ -4459,7 +4460,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 b44da5348..742760c9a 100644 --- a/kernel/trunk/docs/sysfuncs.txt +++ b/kernel/trunk/docs/sysfuncs.txt @@ -966,6 +966,7 @@ Remarks: 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). + Delay of mouse can be regulated through the application SETUP. 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 diff --git a/kernel/trunk/hid/m_com1.inc b/kernel/trunk/hid/m_com1.inc index 237ba70d2..193b00caa 100644 --- a/kernel/trunk/hid/m_com1.inc +++ b/kernel/trunk/hid/m_com1.inc @@ -125,6 +125,6 @@ mouse_acceleration_com1: cmp eax,[mouse_delay] pop eax ja @f - shl ax,1 + imul ax,[mouse_speed_factor] @@: ret diff --git a/kernel/trunk/hid/m_com2.inc b/kernel/trunk/hid/m_com2.inc index 2f364cc15..a84b5663c 100644 --- a/kernel/trunk/hid/m_com2.inc +++ b/kernel/trunk/hid/m_com2.inc @@ -125,6 +125,6 @@ mouse_acceleration_com2: cmp eax,[mouse_delay] pop eax ja @f - shl ax,1 + imul ax,[mouse_speed_factor] @@: ret diff --git a/programs/system/setup/trunk/setup.asm b/programs/system/setup/trunk/setup.asm index 0478f67fc..862551005 100644 --- a/programs/system/setup/trunk/setup.asm +++ b/programs/system/setup/trunk/setup.asm @@ -8,12 +8,13 @@ ; A. Ivushkin - autostart (w launcher) ; M. Lisovin - added many feauters (apply all, save all, set time...) ; I. Poddubny - fixed russian keymap +;14/08/06 Mario79 - added regulation of mouse features ;****************************************************************************** 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 @@ -32,11 +33,12 @@ apply_all: 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 _mouse_speed + call _mouse_delay call get_disk_info cmp [cd],0 jne no_cd @@ -46,7 +48,7 @@ apply_all: jne no_hd call _lba_read ;11 call _hdbase ;7 - call _f32p ;8 + call _f32p ;8 no_hd: ret ;------------------------------------------------------------------------------- @@ -61,7 +63,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 @@ -74,74 +76,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: @@ -152,7 +154,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 @@ -179,7 +181,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 @@ -195,7 +197,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 @@ -246,19 +248,21 @@ get_other: mov [pci_acc],eax mcall 18,19,0 mov [mouse_speed],eax + mcall 18,19,2 + mov [mouse_delay],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 + je set_language_and_exit cmp [I_PARAM], 'BOOT' - je apply_all_and_exit + je apply_all_and_exit call get_setup_values call loadtxt @@ -272,33 +276,33 @@ still: 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 @@ -308,19 +312,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 @@ -331,7 +335,7 @@ incdectime: jmp still dectime: cmp al,0 - je nodectime + je nodectime dec al das jmp incdectime1 @@ -341,7 +345,7 @@ 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 @@ -356,9 +360,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 @@ -369,7 +373,7 @@ incdecdate: jmp still decdate: cmp al,1 - je nodecdate + je nodecdate dec al das jmp incdecdate1 @@ -393,13 +397,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] @@ -442,14 +446,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: @@ -465,11 +469,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: @@ -482,7 +486,7 @@ close: jnz nokp mov eax,[keyboard] cmp eax,4 - je updownlbl + je updownlbl inc eax jmp noupdown updownlbl: @@ -493,7 +497,7 @@ close: nokp: - cmp ah,22 ; SET CD BASE + cmp ah,22 ; SET CD BASE jnz nocm mov eax,[cdbase] sub eax,2 @@ -515,7 +519,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 @@ -537,7 +541,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 @@ -559,7 +563,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 @@ -596,13 +600,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 @@ -614,7 +618,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 @@ -626,7 +630,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 @@ -641,7 +645,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 @@ -663,11 +667,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: @@ -675,7 +679,7 @@ close: jnz nosysp mov eax,[syslang] cmp eax,4 - je nosysp + je nosysp inc eax mov [syslang],eax call draw_infotext @@ -693,7 +697,7 @@ close: mov eax,[mouse_speed] sub eax,2 cmp eax,9 - jb @f + jb @f mov eax,8 @@: inc eax @@ -704,7 +708,7 @@ close: jnz .noplus mov eax,[mouse_speed] cmp eax,9 - jb @f + jb @f mov eax,0 @@: inc eax @@ -713,9 +717,38 @@ close: .noplus: cmp ah,131 jnz .noapply - call _mouse + call _mouse_speed .noapply: - cmp ah,3 ; SET KEYMAP + mousedelay: + cmp ah,142 ; SET MOUSE DELAY + jnz .nominus + mov eax,[mouse_delay] + sub eax,2 + cmp eax,0xfff + jb @f + mov eax,0xffe +@@: + inc eax + mov [mouse_delay],eax + call draw_infotext + .nominus: + cmp ah,143 + jnz .noplus + mov eax,[mouse_delay] + cmp eax,0xfff + jb @f + mov eax,0 +@@: + inc eax + mov [mouse_delay],eax + call draw_infotext + .noplus: + cmp ah,141 + jnz .noapply + call _mouse_delay + .noapply: + + cmp ah,3 ; SET KEYMAP jne still call _keyboard jmp still @@ -789,7 +822,7 @@ close: mov edx,4 int 0x40 nosetkeylru: - cmp [keyboard],4 ;french + cmp [keyboard],4 ;french jnz nosetkeylfr mov eax,21 mov ebx,2 @@ -859,7 +892,7 @@ draw_window: xor eax,eax ; DRAW WINDOW mov ebx,40*65536+355+BBB - mov ecx,40*65536+310 + mov ecx,40*65536+320 mov edx,0x83111199 ; mov esi,0x805588dd ; mov edi,0x005588dd @@ -870,7 +903,7 @@ draw_window: mov ecx,0x10ffffff mov edx,labelt cmp [syslang],4 - je ruslabel + je ruslabel add edx,20 ruslabel: mov esi,19 ;26 @@ -883,13 +916,13 @@ draw_window: ; mov esi,0x005588dd ; int 0x40 - mov eax,8 ; APPLY ALL + mov eax,8 ; APPLY ALL mov ebx,(350-79)*65536+100 - mov ecx,266*65536+12 + mov ecx,282*65536+12 mov edx,100 mov esi,0x005588dd int 0x40 - add ecx,16*65536 ; SAVE ALL + add ecx,16*65536 ; SAVE ALL dec edx int 0x40 @@ -951,6 +984,10 @@ draw_window: mov ecx,43+26*8 ; 26 call draw_buttons + mov edx,141 + mov ecx,43+28*8 ; 26 + call draw_buttons + call draw_infotext mov eax,12 @@ -966,7 +1003,7 @@ draw_infotext: pusha - mov eax,[keyboard] ; KEYBOARD + mov eax,[keyboard] ; KEYBOARD test eax,eax jnz noen mov [text00+LLL*10+28],dword 'ENGL' @@ -994,7 +1031,7 @@ draw_infotext: nofr: - mov eax,[syslang] ; SYSTEM LANGUAGE + mov eax,[syslang] ; SYSTEM LANGUAGE dec eax test eax,eax jnz noen5 @@ -1025,15 +1062,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 @@ -1055,7 +1092,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.' @@ -1082,7 +1119,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.' @@ -1109,7 +1146,7 @@ draw_infotext: hnog2: - mov eax,[f32p] ; FAT32 PARTITION + mov eax,[f32p] ; FAT32 PARTITION add al,48 mov [text00+LLL*14+28],al @@ -1118,20 +1155,24 @@ draw_infotext: 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 + mov eax,[mouse_speed] ; MOUSE SPEED add al,48 mov [text00+LLL*26+28],al + mov eax,[mouse_delay] + mov esi,text00+LLL*28+32 + call hexconvert ; MOUSE DELAY + mov eax,13 mov ebx,175*65536+85 - mov ecx,40*65536+225 + mov ecx,40*65536+245 mov edx,0x80111199-19 int 0x40 @@ -1151,31 +1192,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+225 + mov ecx,40*65536+245 mov edx,0x80111199-19 int 0x40 @@ -1193,7 +1234,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 @@ -1202,7 +1243,7 @@ draw_infotext: ret unpackdate: cmp byte [blinkpar+1],ch - je chkblink + je chkblink unpack1: xor bx,bx mov bh,al @@ -1212,7 +1253,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 @@ -1242,13 +1283,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 @@ -1323,7 +1364,7 @@ _syslang: int 0x40 ret -_mouse: +_mouse_speed: mov eax,18 mov ebx,19 mov ecx,1 @@ -1331,10 +1372,18 @@ _mouse: int 0x40 ret +_mouse_delay: + mov eax,18 + mov ebx,19 + mov ecx,3 + mov edx,[mouse_delay] + int 0x40 + ret + loadtxt: cld mov edi,text00 - mov ecx,458 ;28 + mov ecx,488 ;28 cmp [syslang],4 jne norus mov esi,textrus @@ -1358,31 +1407,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] @@ -1395,16 +1444,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 +time: dw 0x0 +date: dd 0x0 textrus: @@ -1436,6 +1485,8 @@ textrus: db ' ' db 'Скорость курсора мыши : 1 - + Применить' db ' ' + db 'Задержка ускорения мыши : 0x00a - + Применить' + db ' ' db 'ВНИМАНИЕ: Применить все ' db 'ИСПОЛЬЗУЙТЕ ДОСТУП К FAT С ОСТОРОЖНОСТЬЮ! ' db 'НЕ ЗАБУДЬТЕ СОХРАНИТЬ НАСТРОЙКИ Сохранить все ' @@ -1471,15 +1522,17 @@ texteng: db ' ' db 'Mouse pointer speed : 1 - + APPLY ' db ' ' + db 'Mouse pointer delay : 0x00a - + APPLY ' + db ' ' db 'NOTE: APPLY ALL ' db 'TEST FAT FUNCTIONS WITH EXTREME CARE ' db 'SAVE YOUR SETTINGS BEFORE QUIT MENUET SAVE ALL ' db 'x' labelt: - db 'НАСТРОЙКА УСТРОЙСТВ DEVICE SETUP ' + db 'НАСТРОЙКА УСТРОЙСТВ DEVICE SETUP ' -hex db '0123456789ABCDEF' +hex db '0123456789ABCDEF' alt_general: @@ -1662,7 +1715,7 @@ read_fileinfo: dd 0 dd 0 dd 0 - dd 52 + dd 56 dd keyboard db 0 dd file_name @@ -1671,7 +1724,7 @@ save_fileinfo: dd 2 dd 0 dd 0 - dd 52 + dd 56 dd keyboard file_name: db '/rd/1/setup.dat',0 @@ -1679,17 +1732,18 @@ I_PARAM dd 0 keyboard dd 0x0 midibase dd 0x320 -cdbase dd 0x2 +cdbase dd 0x2 sb16 dd 0x220 syslang dd 0x1 -wss dd 0x1 +wss dd 0x1 wssp dd 0x0 -hdbase dd 0x1 +hdbase dd 0x1 f32p dd 0x1 sound_dma dd 0x1 lba_read dd 0x1 pci_acc dd 0x1 mouse_speed dd 0x3 +mouse_delay dd 0x10 text00: I_END: