Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум на Исходниках.RU > Assembler > DosBox |
Автор: andr00 25.07.18, 13:03 |
Пробовал писать программы на ASM в DosBox 0.74. Все устраивает, но не смог через фунции DOS(например:INT 21H AH=02 DL=07) и BIOS (например:INT 10H AX=0E07H) получить звуковой сигнал. Обращение напрямую к портам 42H, 43H, 61H решает проблему. Но я считаю это слишком коряво. Может подскажите как все таки обойтись стандартными функциями BIOS/DOS. |
Автор: Pavia 25.07.18, 14:07 |
andr00 Это эмулятор очень слабый. Лучше полноценную виртуальную машину QEMU, Bochs, VirtualBox, VMWare Player. Расставил в порядке качества эмуляции. Эта недокументированная возможность. Должно работать. Видимо DosBox не умеет эмулировать данную команду. Цитата andr00 @ Обращение напрямую к портам 42H, 43H, 61H решает проблему. Но я считаю это слишком коряво. Для ДОСа это нормальное решение. |
Автор: Qraizer 25.07.18, 14:37 |
Вообще, DOS вроде бы в звенеть не обещал. Обещал рулить курсором на LR, LF и BS. Звенеть обещает BIOS, и DOS вслед за ним тоже звенит по причине того, что CON: использует функции BIOS. Вероятно, в DosBox эта связь нарушена. |
Автор: JoeUser 25.07.18, 16:11 |
И обещал команду BEL . В консоли ^G. |
Автор: Jin X 26.07.18, 08:44 |
VMware ты считаешь самым сильным, надо полагать? Да, DOSBox не умеет. И echo • тоже не пищит (в .bat). Да и через порты звук получается кривой (неустойчивый). Видимо, из-за неточной работы счётчиков. |
Автор: andr00 26.07.18, 10:43 |
Я сделал драйверок, перехватывающий прерывние INT 10H, AX=0E07H. Он нормально работает через порты, но выход идет на динамики и очень громко. Вопрос: как этот драйвер запихать в DosBox и как добратся до реального спикера. Добавлено Забыл сообщить, этот драйверок я установил в DosBox только вместе с DOS-7.10. А я бы хотел запихать его без "BOOT" (ну допустим в -conf). |
Автор: Jin X 26.07.18, 13:46 |
andr00, а "драйверок" как написан? В формате .COM-программы? Тогда добавляешь его в dosbox-версия.conf в секцию [autoexec] и всё. |
Автор: andr00 27.07.18, 00:12 |
Jin X, Драйвер написан в стандартном формате *.SYS. Но это хорошая идея, перепишу в виде *.COM. |
Автор: Jin X 27.07.18, 08:05 |
andr00, SYS, боюсь, в DOSBox установить не получится. |
Автор: andr00 28.07.18, 05:33 |
Сделал драверок в виде *.COM (TSR программа). Отлично вставляется в *.-conf . Но все таки может исправить сам исходник DosBox 0.74 . Не подскажите где взять исходник DosBox 0.74 , говорят он открытый. |
Автор: Jin X 28.07.18, 09:17 |
andr00, в гугле по любому есть инфа Оф.сайт -> Download -> https://sourceforge.net/projects/dosbox/fil...tar.gz/download |
Автор: andr00 01.08.18, 06:18 |
Еще вопрос. Можно ли записать что нибуть на диск Z: в DosBox. |
Автор: Jin X 01.08.18, 13:20 |
andr00, зачем? Можно забить в [autoexec] mount a: своя_любимая_папка и пользоваться диском A: Так не подойдёт? |
Автор: andr00 03.08.18, 12:47 |
Jin X Я уже это делал. Все в норме, но считаю это коряво. К стати заметил, что в (чистой) DosBox, функции вывода (INT 21H) на консоль, не обращаются к функциям BIOS. Установил драйверок (TSR)) на INT 10H AX=0E07H, BEEP работает. Но функция INT 21H AH=02H DL=07 (или 09H), молчат. При загрузке своей DOS (через BOOT + драйверок), все работает (INT 21H и INT 10H). В своем DOS сделал трассировку и обнаружил, что функции INT 21H (вывода на консоль) обращаются в итоге к фунциям BIOS (INT 10H AH=EH). |
Автор: Jin X 03.08.18, 16:45 |
andr00, в DOSBox прерывания вообще по-своему реализованы, это просто мост между прогой и DOSBox'ом, который выполняет эти функции. Т.е. все функции прерываний приходят в конечном счёте к паре байт FEh,38h, после которых идёт код функции. И по этим 2 байтам с последующим кодом DOSBox понимает что за функция вызывается и реализует её. Можешь глянуть сегмент F000, он почти пуст. Добавлено Такой интересный костыль. DOSBox - это не виртуальная машина или что-то подобное. Это софтверный эмулятор. Довольно примитивный. |
Автор: andr00 04.08.18, 04:26 |
Jin X Вообще то, мне DosBox кажется лутьше VMware.. Совершенно с Вами согласен, что VMware.. более продвинут. Но для старых программ он не подходит. Хотя бы по причине проблем со старыми видео картами. Старые игры лутьше работают в DosBox, также как и старые программы под DOS. |
Автор: Pavia 04.08.18, 06:37 |
Цитата andr00 @ Но для старых программ он не подходит. Хотя бы по причине проблем со старыми видео картами. У VMWare с видео картой и старыми программами никаких программ не было. В отличие от DosBox который не правильно обрабатывает каретку. Или к примеру на король лев на 3 уровне в досбоксе вылетает. |
Автор: Jin X 04.08.18, 08:05 |
Старые стандартные программы нормально работают в DOSBox (там же есть ещё и замедление – это одна из главных фишек DOSBox'а). "Лучше" он разве что в этом отношении... А если программы используют какие-то штуки, которые в DOSBox реализованы через костыли, тогда возникнет "у-упс". Добавлено Короче, каждый инструмент предназначен для своей области использования. Каждой кастрюле своя крышка © Знай, кошка, свое лукошко © Всяк сверчок, знай свой шесток © Рождённый ползать летать не может © |
Автор: Славян 04.08.18, 16:50 |
Так хочется же идеальный эмулятор, с идеальным выбором псевдо-железа и запуском ОС под оным 'оборудованием'. Ан нету... |
Автор: andr00 01.11.18, 01:32 |
Запустил в DosBox образ DOS 7.10 Запустил программу mem.exe (от DOS 7.10) Как обычно она выдала мне распределение памяти. Но в строке "зарезервированно" стоит цифра 393216 байт. Я понимаю, что это область между сегментами A000H ... 10000H. Но, почему на реальных машинах (в том числе и на VMWare) в этой строке стоят нули ? Возникает вопрос, что такое "зарезервированно"? и правилно ли mem.exe (от DOS 7.10) определяет распределение памяти ? |
Автор: Jin X 05.11.18, 18:07 |
andr00, пришлите эту утилиту (в zip'е), посмотрим что там. |
Автор: andr00 06.11.18, 04:10 |
Эта утилита от windows_98 (dos 7.10) MEM.zip (, : 183) |
Автор: Pavia 06.11.18, 06:17 |
andr00 Dos-Box вообще не возвращает корректное распределение памяти. Это баг утилиты mem. |
Автор: andr00 06.11.18, 06:44 |
Pavia Вообще моей целью стало написание утилиты распределения памяти MS DOS. Мне надоело, что для каждой версии MS DOS - свой MEM.EXE. За шаблон принял DOS 7.10, но появились большие непонятки. Следя документации DOS (от версии DOS 4 и выше), буду пытытся завершить свой MEM.EXE несмотря на различее (незначительное) в показаниях. |
Автор: andr00 22.11.18, 10:07 |
Немного не по теме. В литературе по HIMEM.SYS указывается, что начиная с версии 3.00, по функции AH=88H выдатся значения: EAX - мах. свободный блок XMS (>64 Мб). EDX - мах. свободной XMS памяти (>64 Мб). ECX - последний бойт в памяти (>64 Мб). На практике: EAX - мах. свободный блок XMS (не более 64 Мб). EDX - мах. свободной XMS памяти (не более 64 Мб). ECX - последний бойт в памяти ( = 0 Мб). Получить значения более 64 Мб (до 4 Гб) удолось только используя XMGR.SYS. Не подскажите в чем дело ? Добавлено К стати, MEM.EXE (от DOS 7.10) покаэывает не более 64 Мб при HIMEM.SYS, и настоящий объем (>64Мб), если установлен XMGR.SYS |
Автор: Pavia 22.11.18, 13:05 |
HIMEM.SYS должен был быть выпилен из DOS так как он конфликтует с DPMI. Который появился примерно на год позже. Но для совместимости со старыми программами его оставили. А так как он ещё и с ошибками было перепутано > и <, то ещё и разные программы с ним работали по разному. |
Автор: Qraizer 22.11.18, 17:10 |
andr00, а ты не путаешь версии HIMEM.SYS и спецификации XMS? Это не одно и то же. Вообще, я бы не сильно доверял DosBox-у в каком-либо плане, если речь заходит о противоречиях между описанием поведения и наблюдаемыми результатами. Pavia, прям откровение какое-то. Пруфы есть? Вообще, спецификация XMS разрабатывалась ровно для того, чтобы стандартизировать API для памяти свыше первого мегабайта и сделать возможным сосуществование разных программ, одновременно использующих её. Исходный API, реализованный в BIOS и основанный на int 15h, был крайне неудобным. Спецификация DPMI вообще не об этом. Вот от слова ни коим боком. И к слову, без хоть какого XMM менеджера любой DPMI-хост обязательно столкнётся с проблемами при старте. |
Автор: andr00 23.11.18, 14:53 |
Qraizer , еще раз не по теме. Я имел в виду программу MEM.EXE от DOS 7.10 (WIN98)в чистом DOS (или под DosBox) Покаывает: Версия XMS 3.00 ; Версия драйвера 3.10 P.S. вообще,может сменить тему, на исследование памяти ? . |
Автор: andr00 19.12.18, 09:00 |
Вроде бы решил свои проблемы с HIMEM.SYS, не стал пользоватся функцией AH=88H. Вместо её использую прерывание INT 2FH, AX=4309H. Она выдает таблицу handle и её я анализирую. |