На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Перед отправкой сообщения внимательно прочтите правила раздела!!!
1. Запрещается обсуждать написание вирусов, троянов и других вредоносных программ!
2. Помните, что у нас есть FAQ раздела Assembler и Полезные ссылки. Посмотрите, возможно, там уже имеется решение вашего вопроса.

3. Настоятельно рекомендуем обратить особое внимание на правила форума, которые нарушаются чаще всего:
  3.1. Заголовок темы должен кратко отражать её суть. Темы с заголовками типа "Срочно помогите!" или "Ассемблер" будут отправляться в Корзину для мусора.
  3.2. Исходники программ обязательно выделяйте тегами [code]...[/code] (одиночные инструкции можно не выделять).
  3.3. Нежелательно поднимать старые темы (не обновлявшиеся более года) без веской на то причины.

Не забывайте также про главные Правила форума!

Добро пожаловать и приятного вам общения!!! ;)
 
Модераторы: Jin X, Qraizer
  
> DosBox , Функции BIOS/DOS
    Пробовал писать программы на ASM в DosBox 0.74. Все устраивает, но не смог через фунции DOS(например:INT 21H AH=02 DL=07) и BIOS (например:INT 10H AX=0E07H) получить звуковой сигнал. Обращение напрямую к портам 42H, 43H, 61H решает проблему. Но я считаю это слишком коряво. Может подскажите как все таки обойтись стандартными функциями BIOS/DOS.
      andr00
      Цитата andr00 @
      Пробовал писать программы на ASM в DosBox 0.74.

      Это эмулятор очень слабый. Лучше полноценную виртуальную машину QEMU, Bochs, VirtualBox, VMWare Player. Расставил в порядке качества эмуляции.

      Цитата andr00 @
      но не смог через фунции DOS(например:INT 21H AH=02 DL=07)

      Эта недокументированная возможность.

      Цитата andr00 @
      BIOS (например:INT 10H AX=0E07H)

      Должно работать. Видимо DosBox не умеет эмулировать данную команду.

      Цитата andr00 @
      Обращение напрямую к портам 42H, 43H, 61H решает проблему. Но я считаю это слишком коряво.

      Для ДОСа это нормальное решение.
        Вообще, DOS вроде бы в звенеть не обещал. Обещал рулить курсором на LR, LF и BS. Звенеть обещает BIOS, и DOS вслед за ним тоже звенит по причине того, что CON: использует функции BIOS. Вероятно, в DosBox эта связь нарушена.
          Цитата Qraizer @
          Обещал рулить курсором на LR, LF и BS.

          И обещал команду BEL :) . В консоли ^G.
            Цитата Pavia @
            Расставил в порядке качества эмуляции.
            VMware ты считаешь самым сильным, надо полагать?

            Цитата Pavia @
            Должно работать. Видимо DosBox не умеет эмулировать данную команду.
            Да, DOSBox не умеет. И echo • тоже не пищит (в .bat).
            Да и через порты звук получается кривой (неустойчивый). Видимо, из-за неточной работы счётчиков.
              Я сделал драйверок, перехватывающий прерывние INT 10H, AX=0E07H. Он нормально работает через порты, но выход идет на динамики и очень громко.
              Вопрос: как этот драйвер запихать в DosBox и как добратся до реального спикера.

              Добавлено
              Забыл сообщить, этот драйверок я установил в DosBox только вместе с DOS-7.10. А я бы хотел запихать его без "BOOT" (ну допустим в -conf).
                andr00, а "драйверок" как написан? В формате .COM-программы?
                Тогда добавляешь его в dosbox-версия.conf в секцию [autoexec] и всё.
                  Jin X, Драйвер написан в стандартном формате *.SYS. Но это хорошая идея, перепишу в виде *.COM.
                    andr00, SYS, боюсь, в DOSBox установить не получится.
                      Сделал драверок в виде *.COM (TSR программа). Отлично вставляется в *.-conf . Но все таки может исправить сам исходник DosBox 0.74 . Не подскажите где взять исходник DosBox 0.74 , говорят он открытый.
                        andr00, в гугле по любому есть инфа :)
                        Оф.сайт -> Download -> https://sourceforge.net/projects/dosbox/fil...tar.gz/download
                          Еще вопрос. Можно ли записать что нибуть на диск Z: в DosBox.
                            andr00, зачем?
                            Можно забить в [autoexec] mount a: своя_любимая_папка и пользоваться диском A:
                            Так не подойдёт?
                              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).
                                andr00, в DOSBox прерывания вообще по-своему реализованы, это просто мост между прогой и DOSBox'ом, который выполняет эти функции. Т.е. все функции прерываний приходят в конечном счёте к паре байт FEh,38h, после которых идёт код функции. И по этим 2 байтам с последующим кодом DOSBox понимает что за функция вызывается и реализует её. Можешь глянуть сегмент F000, он почти пуст.

                                Добавлено
                                Такой интересный костыль. DOSBox - это не виртуальная машина или что-то подобное. Это софтверный эмулятор. Довольно примитивный.
                                  Jin X Вообще то, мне DosBox кажется лутьше VMware.. Совершенно с Вами согласен, что VMware.. более продвинут. Но для старых программ он не подходит. Хотя бы по причине проблем со старыми видео картами.
                                  Старые игры лутьше работают в DosBox, также как и старые программы под DOS.
                                    Цитата andr00 @
                                    Но для старых программ он не подходит. Хотя бы по причине проблем со старыми видео картами.

                                    У VMWare с видео картой и старыми программами никаких программ не было.
                                    В отличие от DosBox который не правильно обрабатывает каретку. Или к примеру на король лев на 3 уровне в досбоксе вылетает.
                                      Цитата andr00 @
                                      Старые игры лутьше работают в DosBox, также как и старые программы под DOS.
                                      Старые стандартные программы нормально работают в DOSBox (там же есть ещё и замедление – это одна из главных фишек DOSBox'а). "Лучше" он разве что в этом отношении...
                                      А если программы используют какие-то штуки, которые в DOSBox реализованы через костыли, тогда возникнет "у-упс".

                                      Добавлено
                                      Короче, каждый инструмент предназначен для своей области использования.

                                      Каждой кастрюле своя крышка ©
                                      Знай, кошка, свое лукошко ©
                                      Всяк сверчок, знай свой шесток ©
                                      Рождённый ползать летать не может ©
                                      :D
                                        Так хочется же идеальный эмулятор, с идеальным выбором псевдо-железа и запуском ОС под оным 'оборудованием'. Ан нету... :yes-sad:
                                          Запустил в DosBox образ DOS 7.10
                                          Запустил программу mem.exe (от DOS 7.10)
                                          Как обычно она выдала мне распределение памяти.
                                          Но в строке "зарезервированно" стоит цифра 393216 байт.
                                          Я понимаю, что это область между сегментами A000H ... 10000H.
                                          Но, почему на реальных машинах (в том числе и на VMWare) в этой строке стоят нули ?
                                          Возникает вопрос, что такое "зарезервированно"? и правилно ли mem.exe (от DOS 7.10) определяет распределение памяти ?
                                            andr00, пришлите эту утилиту (в zip'е), посмотрим что там.
                                              Эта утилита от windows_98 (dos 7.10)
                                              Прикреплённый файлПрикреплённый файлMEM.zip (19,13 Кбайт, скачиваний: 181)
                                                andr00
                                                Dos-Box вообще не возвращает корректное распределение памяти.
                                                Цитата andr00 @
                                                Но, почему на реальных машинах (в том числе и на VMWare) в этой строке стоят нули ?

                                                Это баг утилиты mem.
                                                  Pavia
                                                  Вообще моей целью стало написание утилиты распределения памяти MS DOS.
                                                  Мне надоело, что для каждой версии MS DOS - свой MEM.EXE.
                                                  За шаблон принял DOS 7.10, но появились большие непонятки.
                                                  Следя документации DOS (от версии DOS 4 и выше), буду пытытся завершить свой MEM.EXE
                                                  несмотря на различее (незначительное) в показаниях.
                                                    Немного не по теме.
                                                    В литературе по 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
                                                      Цитата andr00 @
                                                      Не подскажите в чем дело ?

                                                      HIMEM.SYS должен был быть выпилен из DOS так как он конфликтует с DPMI. Который появился примерно на год позже.
                                                      Но для совместимости со старыми программами его оставили.

                                                      А так как он ещё и с ошибками было перепутано > и <, то ещё и разные программы с ним работали по разному.
                                                      Сообщение отредактировано: Pavia -
                                                        andr00, а ты не путаешь версии HIMEM.SYS и спецификации XMS? Это не одно и то же. Вообще, я бы не сильно доверял DosBox-у в каком-либо плане, если речь заходит о противоречиях между описанием поведения и наблюдаемыми результатами.
                                                        Pavia, прям откровение какое-то. Пруфы есть? Вообще, спецификация XMS разрабатывалась ровно для того, чтобы стандартизировать API для памяти свыше первого мегабайта и сделать возможным сосуществование разных программ, одновременно использующих её. Исходный API, реализованный в BIOS и основанный на int 15h, был крайне неудобным. Спецификация DPMI вообще не об этом. Вот от слова ни коим боком. И к слову, без хоть какого XMM менеджера любой DPMI-хост обязательно столкнётся с проблемами при старте.
                                                          Qraizer , еще раз не по теме.
                                                          Я имел в виду программу MEM.EXE от DOS 7.10 (WIN98)в чистом DOS (или под DosBox)
                                                          Покаывает: Версия XMS 3.00 ; Версия драйвера 3.10

                                                          P.S. вообще,может сменить тему, на исследование памяти ? .
                                                            Вроде бы решил свои проблемы с HIMEM.SYS, не стал пользоватся функцией AH=88H.
                                                            Вместо её использую прерывание INT 2FH, AX=4309H. Она выдает таблицу handle и её я анализирую.
                                                            0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                                            0 пользователей:


                                                            Рейтинг@Mail.ru
                                                            [ Script execution time: 0,0546 ]   [ 18 queries used ]   [ Generated: 28.03.24, 09:56 GMT ]