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

Discussion in 'WASM.BEGINNERS' started by SUNNY, Feb 13, 2012.

  1. SUNNY

    SUNNY Member

    Blog Posts:
    0
    Создам ещё одну тему в BEGINNERS. Надеюсь за мои вопросы ко мне не отнесутся слишком строго.

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

    Pavia Well-Known Member

    Blog Posts:
    0
    С запретами int не встречался. in out использовать запрещается, хотя есть и исключения. Читать писать можешь в любые ячейки читать тоже.
    В регистрах никто не ограничивал, можешь и 32 битными пользоваться и fpu и mmx
     
  3. MMIX

    MMIX New Member

    Blog Posts:
    0
    Графические программы зачастую не робят -- запускайте в досбоксе если что.
     
  4. Dmitry_Milk

    Dmitry_Milk Member

    Blog Posts:
    0
    Странное желание. Вы уверены, что вам надо написать программу именно для MS-DOS, а не просто консольную?
     
  5. SUNNY

    SUNNY Member

    Blog Posts:
    0
    Для курсовой именно такая идея. Код более нагляден будет, что все функции через прерывания, а не через API.
     
  6. Mikl___

    Mikl___ Супермодератор Staff Member

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

    MMIX New Member

    Blog Posts:
    0
    Mikl___
    Я помню писал кодес когда изучал дос по абелевской книге, так вот "графические" программы через одну не работали.
    Вечером найду их, приаттачу.
     
  8. Mikl___

    Mikl___ Супермодератор Staff Member

    Blog Posts:
    14
    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

    Blog Posts:
    0
    Mikl___

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

    iamlamer New Member

    Blog Posts:
    0
    В 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

    Blog Posts:
    0
    прикрепляю
    почему-то робят только в досбоксе, в мс-досе просто темный экран и вылет.
     
  12. MMIX

    MMIX New Member

    Blog Posts:
    0
  13. MMIX

    MMIX New Member

    Blog Posts:
    0
  14. Pavia

    Pavia Well-Known Member

    Blog Posts:
    0
    MMIX
    Выложи в исходных кодах.
    У меня с графикой проблем не было. Всё прекрасно работало, как в xp так и в 2000 так и в win 98.
     
  15. MMIX

    MMIX New Member

    Blog Posts:
    0
    Их найти еще надо. :)
    Сейчас посмотрю.
     
  16. MMIX

    MMIX New Member

    Blog Posts:
    0
    Нашел, вот кодес:
     
  17. MMIX

    MMIX New Member

    Blog Posts:
    0
  18. MMIX

    MMIX New Member

    Blog Posts:
    0
  19. iamlamer

    iamlamer New Member

    Blog Posts:
    0
    Попробуйте другие видеорежимы, например 320х200х4, 320х200х256.
     
  20. MMIX

    MMIX New Member

    Blog Posts:
    0
    iamlamer

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