Создам ещё одну тему в BEGINNERS. Надеюсь за мои вопросы ко мне не отнесутся слишком строго. Вот, кажется, начиная кажется с Win2K под виндой многие старые DOSовские программы не работали из-за того что WINDOWS не позволяет прикладным программам получить прямой доступ к ресурсам компьютера. У меня задача - написать DOS-программу, которая бы нормально работала под WINDOWS. Какие команды мне в ней НЕЛЬЗЯ использовать? Я так понимаю - это in, out и иногда int. Скажите какие прерывания разрешены, какие запрещены в данном случае? А обращение к любым ячейкам памяти допустимо? Ведь когда я запускаю DOS-программу, она запускается в некоей виртуальной среде, где ей предоставлен один мегабайт памяти и 16-разрядные регистры. Я ничего не путаю?
С запретами int не встречался. in out использовать запрещается, хотя есть и исключения. Читать писать можешь в любые ячейки читать тоже. В регистрах никто не ограничивал, можешь и 32 битными пользоваться и fpu и mmx
Странное желание. Вы уверены, что вам надо написать программу именно для MS-DOS, а не просто консольную?
Для курсовой именно такая идея. Код более нагляден будет, что все функции через прерывания, а не через API.
SUNNY Возможны проблемы с выводом звука на звуковую карту, так как работа с wav-файлами под DOS подразумевает использование DMA, а это работа с портами, а вот с утверждением MMIX не согласен -- Windows нормально позволяет работать с портами отнесенными к CGA, EGA, VGA
Mikl___ Я помню писал кодес когда изучал дос по абелевской книге, так вот "графические" программы через одну не работали. Вечером найду их, приаттачу.
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) исключения не вызывает, если, конечно, это не РЕ-файл
Mikl___ Да фиг их знает, у этих амд вечно видеодрова кривые. Они еще могут и запросто выпилить поддержку чего-либо, чтоб как они иногда заявляют лучше сконцентрироваться на новом кодесе. Ну я все ж вечером не поленюсь, найду.
В 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 все пучком. Или дело в динамических фиксапах, когда винда на лету распознает наиболее популярные игрухи (типа Варкрафт, Комманд&Конквер, етц) и облегчает им жизнь по сравнению с любыми другими програми, которые лезут в те же порты, но не являются Варкрафтами и Ц&Ц? Надо поэкспериментировать, или кто-то сразу знает и расскажет нам "истЕну"?
MMIX Выложи в исходных кодах. У меня с графикой проблем не было. Всё прекрасно работало, как в xp так и в 2000 так и в win 98.
iamlamer Да это в общем-то дела давно минувших дней хехе. Посмотрю как-нибудь, но все равно интересно, вы вот утверждаете что все эмулируется и поддерживается, а даже такой простой кодес не работает. Ничего в нем привилегированного нету. В досбохе робит, почему вот вопрос?