Пишем DOS-программу

Тема в разделе "WASM.BEGINNERS", создана пользователем SUNNY, 13 фев 2012.

  1. SUNNY

    SUNNY Member

    Публикаций:
    0
    Регистрация:
    1 окт 2009
    Сообщения:
    32
    Создам ещё одну тему в BEGINNERS. Надеюсь за мои вопросы ко мне не отнесутся слишком строго.

    Вот, кажется, начиная кажется с Win2K под виндой многие старые DOSовские программы не работали из-за того что WINDOWS не позволяет прикладным программам получить прямой доступ к ресурсам компьютера.
    У меня задача - написать DOS-программу, которая бы нормально работала под WINDOWS. Какие команды мне в ней НЕЛЬЗЯ использовать? Я так понимаю - это in, out и иногда int. Скажите какие прерывания разрешены, какие запрещены в данном случае?
    А обращение к любым ячейкам памяти допустимо? Ведь когда я запускаю DOS-программу, она запускается в некоей виртуальной среде, где ей предоставлен один мегабайт памяти и 16-разрядные регистры. Я ничего не путаю?
     
  2. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    С запретами int не встречался. in out использовать запрещается, хотя есть и исключения. Читать писать можешь в любые ячейки читать тоже.
    В регистрах никто не ограничивал, можешь и 32 битными пользоваться и fpu и mmx
     
  3. MMIX

    MMIX New Member

    Публикаций:
    0
    Регистрация:
    9 дек 2011
    Сообщения:
    385
    Графические программы зачастую не робят -- запускайте в досбоксе если что.
     
  4. Dmitry_Milk

    Dmitry_Milk Member

    Публикаций:
    0
    Регистрация:
    20 ноя 2007
    Сообщения:
    535
    Странное желание. Вы уверены, что вам надо написать программу именно для MS-DOS, а не просто консольную?
     
  5. SUNNY

    SUNNY Member

    Публикаций:
    0
    Регистрация:
    1 окт 2009
    Сообщения:
    32
    Для курсовой именно такая идея. Код более нагляден будет, что все функции через прерывания, а не через API.
     
  6. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.709
    SUNNY
    Возможны проблемы с выводом звука на звуковую карту, так как работа с wav-файлами под DOS подразумевает использование DMA, а это работа с портами, а вот с утверждением MMIX
    не согласен -- Windows нормально позволяет работать с портами отнесенными к CGA, EGA, VGA
     
  7. MMIX

    MMIX New Member

    Публикаций:
    0
    Регистрация:
    9 дек 2011
    Сообщения:
    385
    Mikl___
    Я помню писал кодес когда изучал дос по абелевской книге, так вот "графические" программы через одну не работали.
    Вечером найду их, приаттачу.
     
  8. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.709
    MMIX
    нормально работают графические режимы
    0Dh 320x200 16 цветов
    0Eh 640x200 16 цветов
    0Fh 640x350 монохромный
    10h 640x350 16 цветов
    11h 640x480 монохромный
    12h 640x480 16 цветов,
    13h 320х200 256 цветов
    остальные режимы, видимо в связи с редкостью использования, производители видеокарт тестируют через раз, но обращение к CGA/EGA/VGA портам ввода/вывода, например к порту графического контроллера (3CEh) исключения не вызывает, если, конечно, это не РЕ-файл
     
  9. MMIX

    MMIX New Member

    Публикаций:
    0
    Регистрация:
    9 дек 2011
    Сообщения:
    385
    Mikl___

    Да фиг их знает, у этих амд вечно видеодрова кривые. :) Они еще могут и запросто выпилить поддержку чего-либо, чтоб как они иногда заявляют лучше сконцентрироваться на новом кодесе. :)
    Ну я все ж вечером не поленюсь, найду.
     
  10. iamlamer

    iamlamer New Member

    Публикаций:
    0
    Регистрация:
    20 июн 2005
    Сообщения:
    273
    Адрес:
    Russia
    В Windows NT/2000/XP/2003/2008/Vista/7 (только 32 бита!) DOS-овские проги запускаются внутри стандартной виртуальной машины NTVDM. Она моделирует для таких прог распределение памяти в пределах 1 Mb, таблицу векторов прерываний, BIOS, видеопамять, многие порты ввода-вывода (таймер, видео...) и пр. То есть, "обычная" DOS-программа без проблем запустится и будет работать.

    Проблемы могут возникнуть у DOS-программ, которые пытаются перейти в защищенный режим (например, многие игрухи с DOS-екстендерами) и напрямую лезут в не разрешенные устройства (COM-порт, контроллер DMA и т.п.) и др. Причем, при попытке залезть при помощи in/out в запрещенный порт ввода-вывода NTVDM не ругается, а просто молча скипает команду.

    Но тут тоже не все так просто, походу NTVDM в XP более продвинутая и позволяет DOS-прогам много больше, чем, например, в 2000. По крайней мере, многи игрухи не идут в NT/2000 или идут без звука, а в XP все пучком. Или дело в динамических фиксапах, когда винда на лету распознает наиболее популярные игрухи (типа Варкрафт, Комманд&Конквер, етц) и облегчает им жизнь по сравнению с любыми другими програми, которые лезут в те же порты, но не являются Варкрафтами и Ц&Ц? Надо поэкспериментировать, или кто-то сразу знает и расскажет нам "истЕну"?
     
  11. MMIX

    MMIX New Member

    Публикаций:
    0
    Регистрация:
    9 дек 2011
    Сообщения:
    385
    прикрепляю
    почему-то робят только в досбоксе, в мс-досе просто темный экран и вылет.
     
  12. MMIX

    MMIX New Member

    Публикаций:
    0
    Регистрация:
    9 дек 2011
    Сообщения:
    385
  13. MMIX

    MMIX New Member

    Публикаций:
    0
    Регистрация:
    9 дек 2011
    Сообщения:
    385
  14. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    MMIX
    Выложи в исходных кодах.
    У меня с графикой проблем не было. Всё прекрасно работало, как в xp так и в 2000 так и в win 98.
     
  15. MMIX

    MMIX New Member

    Публикаций:
    0
    Регистрация:
    9 дек 2011
    Сообщения:
    385
    Их найти еще надо. :)
    Сейчас посмотрю.
     
  16. MMIX

    MMIX New Member

    Публикаций:
    0
    Регистрация:
    9 дек 2011
    Сообщения:
    385
    Нашел, вот кодес:
     
  17. MMIX

    MMIX New Member

    Публикаций:
    0
    Регистрация:
    9 дек 2011
    Сообщения:
    385
  18. MMIX

    MMIX New Member

    Публикаций:
    0
    Регистрация:
    9 дек 2011
    Сообщения:
    385
  19. iamlamer

    iamlamer New Member

    Публикаций:
    0
    Регистрация:
    20 июн 2005
    Сообщения:
    273
    Адрес:
    Russia
    Попробуйте другие видеорежимы, например 320х200х4, 320х200х256.
     
  20. MMIX

    MMIX New Member

    Публикаций:
    0
    Регистрация:
    9 дек 2011
    Сообщения:
    385
    iamlamer

    Да это в общем-то дела давно минувших дней хехе. Посмотрю как-нибудь, но все равно интересно, вы вот утверждаете что все эмулируется и поддерживается, а даже такой простой кодес не работает. Ничего в нем привилегированного нету. В досбохе робит, почему вот вопрос?