1. Друзья, в это тяжёлое и непонятное для всех нас время мы просим вас воздержаться от любых упоминаний политики на форуме, - этим ситуации не поможешь, а только возникнут ненужные ссоры и обиды. Это касается также шуток и юмора на тему конфликта. Пусть войны будут только виртуальными, а политики решают разногласия дипломатическим путём. С уважением, администрация Old-Games.RU.

    Скрыть объявление
  2. Если Вы видите это сообщение, значит, вы ещё не зарегистрировались на нашем форуме.

    Зарегистрируйтесь, если вы хотите принять участие в обсуждениях. Перед регистрацией примите к сведению:
    1. Не регистрируйтесь с никами типа asdfdadhgd, 354621 и тому подобными, не несущими смысловой нагрузки (ник должен быть читаемым!): такие пользователи будут сразу заблокированы!
    2. Не регистрируйте больше одной учётной записи. Если у вас возникли проблемы при регистрации, то вы можете воспользоваться формой обратной связи внизу страницы.
    3. Регистрируйтесь с реально существующими E-mail адресами, иначе вы не сможете завершить регистрацию.
    4. Обязательно ознакомьтесь с правилами поведения на нашем форуме, чтобы избежать дальнейших конфликтов и непонимания.
    С уважением, администрация форума Old-Games.RU
    Скрыть объявление

О проблемах "старых" DOS русификаторов, на примере RK.COM

Автор: BolenB · 10 янв 2023 · Обновлено 3 июн 2024 · ·
  1. Большинство русификаторов выпущеных до 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 в русской раскладке) не вводится).

    Вложения:

    • RK_WIN_KEYBOARD.zip
      Размер файла:
      75,8 КБ
      Просмотров:
      191
    • rk223-2.zip
      Размер файла:
      18,1 КБ
      Просмотров:
      48
    • RK20_fix.zip
      Размер файла:
      13,7 КБ
      Просмотров:
      35
    • RK211_fix.zip
      Размер файла:
      16,5 КБ
      Просмотров:
      36
    • RK19.zip
      Размер файла:
      8,3 КБ
      Просмотров:
      41
    excitoon, serj_popov, Ygol и 6 другим нравится это.

Комментарии

  1. excitoon
    @BolenB А откуда был взят исходный `RK.COM` (2.23)? Там как-то слишком много изменений, по сравнению с old-dos.ru, и некоторые совсем странные:
    Screenshot from 2024-03-12 20-29-31.png

    Надо бы дописать для ламеров, что загружать файл раскладки надо через `/L:RUSSIAN.RK`.

    И ещё раз спасибо!
    1. BolenB
      С old-dos.ru и взят.
      Отличия: шрифты и файл раскладки клавиатуры.
      `RK223.COM` зачем-то копирует кусок видеобиоса в свое тело. Запустите на своем ПК и это место тоже будет отличаться.
      ("GP 104 Board" - я запускал на GeForce GTX 1070 Ti)
  2. excitoon
    RK 2.11 требует `E075 -> 8072` (там правда два совпадения, не уверен, нужна ли правка в обоих). Он немного полегче, чем 2.23, зато без ошибки (далее про 2.23), которая проявляется чаще в DosBox-SVN, правда, и в DosBox-X также можно уронить. Воспроизвести можно многократными запусками без параметров, либо в процессе работы с другим приложением (при выходе). Это всё надо будет починить, конечно.

    При первом запуске RK 2.23 (крайне редко появляется):
    ```
    Exit to error: Corrupt MCB chain
    ```
    1. Просмотреть предыдущие ответы...
    2. excitoon
      У меня проблема в том, что RK 2.23 не работает с Ultima VI, после запуска стартера из него можно выйти только в зависание. Выглядит так, что там портится код RK, с этим придётся разбираться позже. :( Код 2.23 к сожалению сильно изменился по сравнению с 2.11, и в списке сотрудников кафедры Александра Страхова больше нет, от него осталась только общая карточка Страхов А.В. - Общая информация . Защита от изменений там заключается в 1 байте контрольной суммы (в 2.23).
    3. BolenB
      Поковырялся с RK 2.11. Для подержки буквы "Ё" необходимо пропатчить 02F9: E1 -> F0.
      Разбирался с защитой, там 2 контрольные суммы (всего файла и куска файла).
      Если подобрать одну, то работает но не полностью. При запуске на другом компьютере, попытке замены шрифтов или выгрузке русификатора из памяти (RK211 /K) - вылезает "has been modified and will not run"
      Надоело подбирать, плюнул и грязно хакнул.
      78E7: 02E0 -> 30E4 (add ah,al -> xor ah,ah). В процедуре подсчета контрольной суммы (ah=0, флаг z установлен, значит контрольная сумма валидна).
      Контрольная сумма теперь всегда проходит проверку.
      Если не встроено еще каких нибудь подлянок, будет работать.
      Выложил.
    4. BolenB
      Обновление.
  3. BolenB
    Тюнинг RK 2.0, RK 2.11, RK 2.23.
    Странно, кнопку переключения на SGR (по умолчанию) убрали, а раскладка торчит в памяти.
    Размер резидентной части русификатора можно уменьшить на 288 байт (убрать SGR раскладку клавиатуры).
    RK /T:R /S

    Если не нужен режим "Toggle IBM mode" то кнопку переключения на него можно убрать:
    RK /NI /S
    На размер резидента не влияет.
    1. BolenB
      Черт! Черт! Черт!
      Из за защиты (копирование куска видеобиос в тело драйвера) настройка RK /T:R держится только на том компьютере на котором её настраивали.
      При запуске русификатора на другом компьютере (или смены видеокарты) настройка сбрасывается опять на RK /T:RG (по умолчанию).
      Лечение:
      Для RK 2.0 3B5D: 05 -> 01
      Для RK 2.11 3C19: 05 -> 01
      При сбросе настройка по умолчанию будет RK /T:R
    2. BolenB
      R =1
      I =2
      G=4

      T:R = 1
      T:RG = 1 + 4 = 5
      T:RI = 1 + 2 = 3
      T:RIG = 1 + 2 + 4 = 7 (или T:RGI)
Чтобы оставить комментарий просто зарегистрируйтесь и станьте участником!
  1. На этом сайте используются файлы cookie, чтобы персонализировать содержимое, хранить Ваши предпочтения и держать Вас авторизованным в системе, если Вы зарегистрировались.
    Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie.
    Скрыть объявление