Большинство русификаторов выпущеных до Windows9x эры, сделаны под раскладку клавиатуры Русская Машинопись (буква ёЁ стоит хрен знает где, или её вообще нет, ъЪ и знаки препинания расположены по другому).
Современные клавиатуры идут с раскладкой Русская Windows.
Не берем таких монстров русификации как KeyRus или RKM (в них можно сделать любую раскладку, на свой вкус).
Возмем некогда популярный RK.COM (A.Strakhov, AcademySoft). RK, А. Страхов - Старый DOS. Abandonware, старые игры и программы - скачать!
Сделаем раскладку клавиатуры Русская Windows как в стандартном dos (Windows) русификаторе.
С версии 1.3 в нем есть возможность делать свою раскладку клавиатуры (KEYS.RK), редактора раскладки правда нет. Но не беда ищем "правильный" KEYS.RK, грузим в русификатор и... облом!
Нет, раскладка работает, почти.
Не вводится буква Ё (А почему? А потому, что для букв русского алфавита "р" и "Ё" надо обнулять scan-код клавиши).
Для р там обнуление идет, а для Ё не предусмотрено.
xlat byte ptr cs:[bx]; берем букву из KEYS.RK
pop bx
cmp al, 0E0h ; буква "р"?
jnz short loc_103DF; не "р", закидываем в буфер клавиатуры как есть ( mov[bx], ax)
xor ah, ah; все таки "р", обнуляем scan-код и закидываем в буфер клавиатуры
loc_103DF:
mov [bx], ax
Так как, места, чтобы вставить проверку на букву "Ё" нет, пропатчим процедуру. Сделаем обнуление scan-кода для всех кодов >= 80h (вторая половина ASCII таблицы, где лежат все русские буквы).
KeyRus так делает по умолчанию /CLRSCAN=On и никто ещё не жаловался.
xlat byte ptr cs:[bx]
pop bx
cmp al, 80h ; Сравниваем с 80h
jb short loc_10433; <80h закидываем в буфер клавиатуры как есть.
xor ah, ah; >=80h (это русская буква, обнуляем scan-код)
loc_10433:
mov [bx], ax
Всё, теперь буква Ё вводится корректно.
Идея не моя, код подсмотрел в http://old-dos.ru/dl.php?id=8495 (Архив RK 1.4, русификатор лежит под именем RK866.COM с "современной" раскладкой клавиатуры и стандартными шрифтами). Я "пропатчил" остальные версии и сделал раскладку для 1.7 - 2.23 (RUSSIAN.RK)
Теперь по версиям:
RK1.2 Патчить Ё не нужно (чем старее версия тем корректнее работает. Хе-Хе.). Внедряем KEYS.RK с помощью HEX-редактора.
RK1.3, RK1.4, RK1.6 Патчим E075 -> 8072
RK1.7, RK1.8, RK2.0 Патчим E075 -> 8072 и дополнительно патчим 3CFA -> 3CFE (иначе "№" (shift+3 в русской раскладке) не вводится).
RK2.23 ну наконец-то патчить ничего не нужно, работает из коробки.
По выбору версии RK.COM
1.4 - самый распространенный, оптимальный вариант (занимает 11104 байт в озу).
1.6 - практически то-же самое но поменьше на -128 байт за счет оптимизации (10976 байт в озу).
1.2 и 1.3 "староваты" и занимают 11008 и 11024 байт соответственно.
1.7, 1.8, слишком наворочены и занимают (11872 и 11904 байт в озу).
2.0 добавлена раскладка SGR (для рисования dos графики). Занимает 11968 байт в озу.
2.23 самый навороченный и "жирный" 12176 байт в ОЗУ.
Мой выбор: RK v1.6 (занимает меньше всего места памяти, нет лишнего функционала, как в последующих версиях).
Поправленые версии RK.COM (8 штук) в одном архиве.
Шрифт стандартный (из EGA3.CPI), раскладка клавиатуры соответствует стандартному DOS русификатору (keyb ru,,keybrd3.sys).
Кнопки переключения RUS/LAT оставил стандартные (LShift + RShift).
Файлы шрифтов и раскладок KEYS.RK (для 1.2 - 1.6) и RUSSIAN.RK (для 1.7 - 2.23) приложены к архиву.
Добавлено 22.05.2024:
О защите от изменений в русификаторах RK 2.11 и RK 2.23
На примере RK 2.11
Первая линия это контрольная сумма всего файла (0h - 078ECh). Она нигде не хранится, но в итоге (после подсчета) она должна быть равна 0 (ah=0 флаг Z установлен)
Вторая линия это контрольная сумма куска файла (04B2h - 03045h). Она хранится в (03045h).
Что из этого следует?
Если поправить байт в диапазоне (0h - 04B1h), а надо поправить 02F9: E1 -> F0 (увеличили значение на 0Fh)
То надо уменьшить (на 0Fh) какой-то ненужный байт (его еще найти надо, ненужный) в диапазоне (0h - 04B1h) или
(03046h - 078ECh) иначе контрольная сумма первой линии проверки не сойдется.
Не стал с этим заморачиваться.
Первая версия хака RK 2.11 была немного неаккуратной (были отключены вообще все проверки контрольных сумм), но рабочей.
Убрал (от греха подальше).
Переделал, теперь первая линия проверки стала такой же как вторая (сузил диапазон с (0h - 078ECh) до (04B2h - 03045h)).
А для второй линии правильная контрольная сумма у нас есть.
Теперь, если патчим что-то в диапазоне (0h - 04B1h) или (03046h - 078ECh), контрольную сумму менять не надо.
Из интересного:
В 02F8Eh находится счетчик. При запуске на другом ПК (смене видеоадаптера). Он увеличивается на единицу.
Блок (02F90h - 03044h) заполняется данными из видеобиос и контрольные суммы ((04B2h - 03045h)) пересчитываются и обновляются в 03045h. Происходит сброс (по умолчанию) настроек, а именно RK /T:RG.
Чтобы этого избежать, можно пропатчить 3C19h: 05 -> 01 (настройка по умолчанию будет RK /T:R)
Для RK 2.0, RK 2.11 (rk20_fix и rk211_fix):
Дополнительно пропатчил, чтобы по умолчанию было RK /T:R (уменьшил резидент в памяти на 288 байт)
Убрал отображение "Toggle IBM mode": (RK /NI /S)
Кому очень нужно, могут включить обратно: RK /I:CLR /S (настройка не слетает даже при переносе на другой ПК).
Для RK 2.23 (rk223-2):
Ничего не патчил. Там накидали дополнительных защит.
Нашел другую версию (Другой размер русификатора, может будет работать более корректно).
Добавлено 22.05.2024:
Добавлен русификатор RK 2.23 (Другой размер русификатора, может будет работать более корректно).
Добавлены: RK20_fix и RK211_fix
Добавлено 03.06.2024:
Нашел на просторах инета RK 1.9 (Пропатчил E075 -> 8072 и дополнительно 3CFA -> 3CFE (иначе "№" (shift+3 в русской раскладке) не вводится).
-
Скрыть объявление
Друзья, в это тяжёлое и непонятное для всех нас время мы просим вас воздержаться от любых упоминаний политики на форуме, - этим ситуации не поможешь, а только возникнут ненужные ссоры и обиды. Это касается также шуток и юмора на тему конфликта. Пусть войны будут только виртуальными, а политики решают разногласия дипломатическим путём. С уважением, администрация Old-Games.RU.
-
Скрыть объявлениеЕсли Вы видите это сообщение, значит, вы ещё не зарегистрировались на нашем форуме.
Зарегистрируйтесь, если вы хотите принять участие в обсуждениях. Перед регистрацией примите к сведению:
- Не регистрируйтесь с никами типа asdfdadhgd, 354621 и тому подобными, не несущими смысловой нагрузки (ник должен быть читаемым!): такие пользователи будут сразу заблокированы!
- Не регистрируйте больше одной учётной записи. Если у вас возникли проблемы при регистрации, то вы можете воспользоваться формой обратной связи внизу страницы.
- Регистрируйтесь с реально существующими E-mail адресами, иначе вы не сможете завершить регистрацию.
- Обязательно ознакомьтесь с правилами поведения на нашем форуме, чтобы избежать дальнейших конфликтов и непонимания.
С уважением, администрация форума Old-Games.RU
Комментарии
Сортировать комментарии по