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

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

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

Кодерский уголок

Тема в разделе "Мастерская", создана пользователем Dimouse, 10 сен 2006.

  1. Dimouse King of Mice

    Dimouse

    Администратор Переводчик

    Регистрация:
    18 апр 2003
    Сообщения:
    35.044
    В соответствии с назначением раздела, в этой теме предполагается обсуждать конкретные вопросы, которые у вас возникают при создании своих программ (в частности - игр), помогать другим, размещать полезные ссылки на статьи и материалы, которые могут пригодиться другим.

    Что здесь не допускается:
    - беспорядочный флуд на всевозможные темы, в том числе общие обсуждения языков программирования без конкретики (карается по статье "флуд и оффтопик" *),
    - разжигания на темы "что лучше, Си или Си++ и чем они отличаются?", "какой язык программирования лучше X или Y?" и т.п. (карается по статье "флейм и участие в холиварах" *),
    - мерение пиписьками в стиле "я лучше программирую" или "ты не умеешь программировать" (карается по статье "оскорбление участников и их взглядов" *).

    Всё это допускается в специально созданной теме "Беседка для программистов или «Бутерброд с кодом».

    * по усмотрению модератора также возможно применение блокировки в данной теме.

    Оригинальное сообщение
     
    Последнее редактирование модератором: 24 ноя 2014
    CY8R4Y нравится это.
  2.  
  3. Steel Rat Stainless

    Steel Rat

    Регистрация:
    28 дек 2006
    Сообщения:
    3.260
    Есть ли в божественном линуксе способ собирать пакеты нескольких типов для разных дистрибутивов? Есть ли в божественном линуксе способ компиляции х86 приложений в х64 системе? В отстойной и глючной винде, коварно!!!, этих проблем нет. =(
     
    Bato-San нравится это.
  4. jack7277

    jack7277

    Регистрация:
    23 май 2004
    Сообщения:
    1.115
    Не догоняю чтение клавиатуры.

    in al, 60h - читаем код клавиши
    cmp eax, 59h (89) - что за 89 сравнение? 89 - это код Y, где-то посередине
    cmp eax, 217 - что за 217 тоже середина какая-то таблицы
    далее делается
    and al, 7Fh (127) типа берем младшую часть,
    заменил на
    and al, FFh

    загрузил keyrus и ничего не выводится буквы никакие в русской раскладке.
     
  5. Steel Rat Stainless

    Steel Rat

    Регистрация:
    28 дек 2006
    Сообщения:
    3.260
    Имей ввиду, что ты считываешь скан-код, а не char. Поэтому сравнение идёт совсем не с Y. Флаг, вроде отвечает за нажатие/отжатие. and al, 0xff соответственно, не делает скан-код русским, а не меняет состояние. Этот момент я уже не помню, могу врать.
    Глянул вики, 0x59 - это правый шифт, говорят. (А может и "почти" F12, который 58 в колонке XT) http://ru.wikipedia.org/wiki/Скан-код
    И да, 217 - тот же 0x59, но с флагом отжатия.
     
    Последнее редактирование: 1 май 2014
  6. jack7277

    jack7277

    Регистрация:
    23 май 2004
    Сообщения:
    1.115
    да, у меня в голове чего-то спутались скан-коды и кодовые страницы.
    Тогда с какой стороны подступиться не понимат.
    Вроде бы стандартный ASCII как раз попадает в категорию скан-код до 89.
    На одной клавише висят, к примеру, A - англ и Ф - рус, как сделать хак на ввод русских букв?
     
  7. Bato-San Чеширский волк-киборг

    Bato-San

    Регистрация:
    24 июн 2010
    Сообщения:
    14.136
    jack7277, это ты не там делаешь вообще. У клавиатуры нет русского регистра или букв. У неё только скан-коды клавиш. И всё. Как будет выглядеть раскладка и какая она будет - определяет уже драйвер клавиатуры.
     
  8. jack7277

    jack7277

    Регистрация:
    23 май 2004
    Сообщения:
    1.115
    Я гружу keyrus, в игре переключаюсь на русский на нажатие клавиш игра не реагирует, а цифры отображает. Значит я делаю вывод, что фильтр какой-то программный стоит в коде игры. С какой стороны подступиться не соображу.
     
  9. Steel Rat Stainless

    Steel Rat

    Регистрация:
    28 дек 2006
    Сообщения:
    3.260
    jack7277, ну судя по-всему, в твоей игре свой обработчикк прерывания клавиатуры. Вот эта функция, что ты выложил заканчивается на ret или iret? Куда он записывает состояние? Где он считывает состояние? Если обработчик собственный, то надо и переключение раскладки делать внтури игры или же считывать состояние кейруса? А если драйвер клавиатуры не кейрус? Может проще будет смотреть на состояние ALT и если нажато, то обращать скан в русскую раскладку. Это при условии, что ты нашёл функцию обрабатывающую скан-коды.
     
  10. jack7277

    jack7277

    Регистрация:
    23 май 2004
    Сообщения:
    1.115
    я так понимаю, где-то должен быть преобразователь скан-код --> ascii код или опять чето путаю?
     
  11. Steel Rat Stainless

    Steel Rat

    Регистрация:
    28 дек 2006
    Сообщения:
    3.260
    jack7277, ты хоть скажи, что за игра? Так гадать-то можно долго - если это аркада, то там скан-кодов за глаза, если игра где вводимый текст различает большие и маленькие буквы - то точно есть функция обработки сканов, если не используется обычное считывание клавиатуры через прерывание ДОС.
     
  12. jack7277

    jack7277

    Регистрация:
    23 май 2004
    Сообщения:
    1.115
    Steel Rat, harvester в теме мастерской.
    В игре можно нажимать на диалоги, а можно вводить вручную, ключевые слова прописаны в файле скрипта. Пишу в нем через игровой разделитель "\" варианты вывода текста, например, Hank\Хэнк и в игре это будет 2 строки, а в скриптовом файле написано Hank, то есть введенное слово (или нажатое мышкой) совпадает со вторым словом и запускается скрипт диалога.
    Если в скрипте написать по-русски ключевые слова, то игра отреагирует на "Хэнк" и ничего не сделает на "Hank", тогда мышкой можно нажимать уже не на английские фразы, а на русские, но теряется фича ввода слов, а это важная фича.
    Вот я и подумал, вдруг удасться ковырнуть так, чтобы вводить русские буквы, в диалогах оставить только русские фразы и будет красота.
    Некоторые диалоги слишком огромные и начинаются проблемы. На некоторые фразы нельзя нажать мышкой, только ввести текст с клавиатуры, людям не привыкшим я полагаю шаблон надорвет это.
     
  13. Steel Rat Stainless

    Steel Rat

    Регистрация:
    28 дек 2006
    Сообщения:
    3.260
    Ты код функции работающей с портом можешь выложить полностью?
     
  14. jack7277

    jack7277

    Регистрация:
    23 май 2004
    Сообщения:
    1.115
    IDA проект с файлом exe.

    код
     
    Последнее редактирование: 2 май 2014
  15. Steel Rat Stainless

    Steel Rat

    Регистрация:
    28 дек 2006
    Сообщения:
    3.260
    Ну вот он массив булов, самый примитивный вариант:
    нажато - mov byte_D5964[eax], 1
    отжато - mov byte_D5964[eax], 0
    Вот теперь надо найти, где ещё используется byte_D5964.
     
  16. jack7277

    jack7277

    Регистрация:
    23 май 2004
    Сообщения:
    1.115
    Я так понял, в word_D5960 сохраняется скан-код, а в byte_D5964 - состояние клавиши, нажата/отжата ?
     
  17. Steel Rat Stainless

    Steel Rat

    Регистрация:
    28 дек 2006
    Сообщения:
    3.260
    Похоже. Не знаю зону видимости этих переменных, но, по идее, должны быть глобальные.
     
  18. Geryon

    Geryon

    Регистрация:
    13 май 2008
    Сообщения:
    1.228
    Не пойму, почему вот это работает:

    Код:
    out 0C0h, al
    
    а вот это уже ругается "Constant too large":

    Код:
    out 280h, al
    
     
  19. MisterGrim Very old

    MisterGrim

    Legacy

    Регистрация:
    29 ноя 2007
    Сообщения:
    25.423
    Код:
    mov	dx,280h
    out	dx,al
     
  20. Bato-San Чеширский волк-киборг

    Bato-San

    Регистрация:
    24 июн 2010
    Сообщения:
    14.136
    Geryon, учитывай вот это:
    А можно и так вот делать:
    mov dx, 0280h
    out dx,al

    упс. опередили... :)
     
    Последнее редактирование: 5 май 2014
  21. Geryon

    Geryon

    Регистрация:
    13 май 2008
    Сообщения:
    1.228
    Да, я так и делаю, но код от этого разбухает. Получается, можно сделать out 280h, al, но ценой потери совместимости с 8086?
     
  22. MisterGrim Very old

    MisterGrim

    Legacy

    Регистрация:
    29 ноя 2007
    Сообщения:
    25.423
    Нельзя. Напрямую можно выводить только в порты до 0ffh включительно, вне зависимости от архитектуры.
     
    Geryon нравится это.
  1. На этом сайте используются файлы cookie, чтобы персонализировать содержимое, хранить Ваши предпочтения и держать Вас авторизованным в системе, если Вы зарегистрировались.
    Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie.
    Скрыть объявление