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.045
    В соответствии с назначением раздела, в этой теме предполагается обсуждать конкретные вопросы, которые у вас возникают при создании своих программ (в частности - игр), помогать другим, размещать полезные ссылки на статьи и материалы, которые могут пригодиться другим.

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

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

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

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

    Geryon

    Регистрация:
    13 май 2008
    Сообщения:
    1.228
    Услышал краем уха про DPMS. Эти DPMS могут помочь в наладке совместимости существующих TSR с программами, использующими защищенный режим? Или для таких финтов сами TSR должны поддерживать DPMS?
     
  4. Dimouse King of Mice

    Dimouse

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

    Регистрация:
    18 апр 2003
    Сообщения:
    35.045
    A.P.$lasH и gudleifr нравится это.
  5. gudleifr

    gudleifr

    Регистрация:
    16 сен 2006
    Сообщения:
    2.592
    Это, скорее, анти-туториал. Самое интересное - распаковка упакованных exe-шников и прочий подбор инструментария остался за кадром. А для начинающих, зачастую, это гораздо сложнее, чем разобрать коды.
    Да и уровень изложения остального - с пропуском этапа осмысления, проб и ошибок - наводит, скорее, на мысль об отчете "для галочки".
    Работа мастера типа "следите за руками".
     
    Bato-San и A.P.$lasH нравится это.
  6. Geryon

    Geryon

    Регистрация:
    13 май 2008
    Сообщения:
    1.228
    Столкнулся с проблемой при работе в защищенном режиме. У меня есть буфер в зоне < 1 Мб, память ему выделена с помощью интерфейса DPMI. Объявлен как unsigned char far *. Только я хочу в этот буфер прочитать из файла функцией _dos_read - как бабах! General Protection Fault.

    _dos_read принимает void * в качестве указателя на буфер, и похоже, происходит pointer truncation. По крайней мере, я для проверки этого предположения сделал printf("%Fp", buffer); printf("%Fp", (void *)buffer) - и результаты выводятся разные.

    Сам буфер, похоже, в норме - я его вдоль и поперек исписал для проверки, никаких GPF не происходит.

    Верно ли мое предположение о причине ошибки? И что делать? Компилятор Open Watcom C, запускаю без опций, то есть модель по умолчанию flat.
     
    Последнее редактирование: 7 авг 2013
  7. Bato-San Чеширский волк-киборг

    Bato-San

    Регистрация:
    24 июн 2010
    Сообщения:
    14.136
    Последнее редактирование: 7 авг 2013
    Geryon нравится это.
  8. Geryon

    Geryon

    Регистрация:
    13 май 2008
    Сообщения:
    1.228
    Я уже разобрался. Дело было в том, что один из библиотечных файлов требовал объявления:

    Код:
    #define __DOS__
    
    И кто бы мог подумать, что в недрах dos.h от наличия именно этого объявления будет зависеть, дальний указатель используется в _dos_read или ближний:

    Код:
    #if defined(__DOS__) && defined(__386__)
     #define _DOSFAR _WCFAR
    #else
     #define _DOSFAR _WCI86FAR
    #endif
    
    ...
    
    _WCRTLINK extern unsigned _dos_read( int __handle, void _DOSFAR *__buf,                             unsigned __count, unsigned *__bytes );
    
    Пришлось заодно объявить

    Код:
    #define __386__
    
    и pointer truncation при компиляции, а вместе с ним и GPF после запуска - пропали. Надеюсь, __386__ не преподнесет мне каких-нибудь еще сюрпризов.
     
    Последнее редактирование: 7 авг 2013
  9. Bato-San Чеширский волк-киборг

    Bato-San

    Регистрация:
    24 июн 2010
    Сообщения:
    14.136
    где блондинка ? :lol:
     
  10. Geryon

    Geryon

    Регистрация:
    13 май 2008
    Сообщения:
    1.228
    Хочу собрать один файл, написанный на ассемблере для DOS. TASM отрабатывает без возражений, а TLINK сообщает: "Fatal: no entry point."

    Программа является драйвером, т.е. запустить ее нельзя, а можно только загрузить в память и установить как обработчик определенного прерывания. Поэтому я полагаю, что точки входа быть и не должно. Как можно отлинковать такую прогу?
     
  11. gudleifr

    gudleifr

    Регистрация:
    16 сен 2006
    Сообщения:
    2.592
    Geryon, вообще, порядочные люди включают в прогу и обработчик, и процедуру его установки (последняя и будет точкой входа). Иначе будет геморрой с распределением памяти.
     
  12. Geryon

    Geryon

    Регистрация:
    13 май 2008
    Сообщения:
    1.228
    Данный драйвер написан под определенный API, при этом подразумевается наличие загрузчика вне драйвера.
     
  13. gudleifr

    gudleifr

    Регистрация:
    16 сен 2006
    Сообщения:
    2.592
    Выберите что-нибудь одно.
    DOS, в конце-концов, не есть полноценная OS даже по меркам тех времен.
     
  14. Geryon

    Geryon

    Регистрация:
    13 май 2008
    Сообщения:
    1.228
    gudleifr, цитирую документацию по API:
    Установка драйвера обычно происходит прямо с диска таким образом:

    Код:
    mdi = AIL_install_MDI_driver_file("sbawe32.mdi", NULL);
     
    Последнее редактирование: 23 авг 2013
  15. A.P.$lasH

    A.P.$lasH

    Legacy

    Регистрация:
    27 фев 2010
    Сообщения:
    4.667
    Секундочку. Вы же только что сами себе на вопрос ответили :) В документации ясно сказано, что формат дровов идентичен COM-файлам, что логично, раз уж там чистый код, который приложение пишет в память.

    Соответственно, ставим модель памяти TINY, а TLINK вызываем с ключиком /t.

    И будет COM, в котором никакая точка входа никогда и не была нужна. Она только в EXE ставится, а COM всегда по адресу 100h грузится - это ж симуляция CP/M.
     
    gudleifr нравится это.
  16. gudleifr

    gudleifr

    Регистрация:
    16 сен 2006
    Сообщения:
    2.592
    <дубль>
     
  17. Geryon

    Geryon

    Регистрация:
    13 май 2008
    Сообщения:
    1.228
    Как бы не так! Я пробовал свитч /t, и вот что выходит:

    Код:
    Fatal: Cannot generate COM file: invalid initial entry point address
    Может быть, я не установил модель TINY? Это можно сделать на этапе TLINK, или надо возвращаться к ассемблированию?
     
  18. gudleifr

    gudleifr

    Регистрация:
    16 сен 2006
    Сообщения:
    2.592
    Geryon, "ORG 100" ставили?
     
  19. A.P.$lasH

    A.P.$lasH

    Legacy

    Регистрация:
    27 фев 2010
    Сообщения:
    4.667
    Исходники можно выложить?
     
  20. Bato-San Чеширский волк-киборг

    Bato-San

    Регистрация:
    24 июн 2010
    Сообщения:
    14.136
    Geryon, скинь весь пакет. Глазами надо смотреть. Чую там в конкретную версию чего то дело упирается.
     
  21. Geryon

    Geryon

    Регистрация:
    13 май 2008
    Сообщения:
    1.228
    ORG 100 не ставил, но такого там быть не должно, дело в чем-то другом.
     

    Вложения:

    • SB32.zip
      Размер файла:
      37,6 КБ
      Просмотров:
      26
  22. Bato-San Чеширский волк-киборг

    Bato-San

    Регистрация:
    24 июн 2010
    Сообщения:
    14.136
    Geryon, в .MAK написано что использовался BC4.5 и прописаны пути. Ты чем и что компилял ?
     
  1. На этом сайте используются файлы cookie, чтобы персонализировать содержимое, хранить Ваши предпочтения и держать Вас авторизованным в системе, если Вы зарегистрировались.
    Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie.
    Скрыть объявление