Файл конфигурации эмулятора "Агат-Free" Дальше идут секции различных конфигураций. При запуске эмулятора можно указать другой файл конфигурации, а также указать секцию в файле: ключи -C и -c соответственно. Каждая секция - это вариант эмулируемой машины. Любой параметр секции может быть перекрыт ключом -v из командной строки. Синтаксически этот файл анализируется так (регистр важен): - строка, которая начинается с символа "[" - название новой секции. - строка, которая начинается с символа "+" - включение секции, указанной после "+", в текущую (include) - строка, начинающаяся с символа "[a-zA-Z]" - имя переменной, за которой должен следовать символ "=" и значение переменной. Любые символы - полноправные, включая пробел и TAB, кавычки не требуются. - остальные строки, в т.ч. пустые - игнорируемые комментарии. Переменные могут быть строковыми, булевыми или целочисленными. Для булевых допускаются варианты (без учёта регистра): "0", "1", "yes", "no", "enable", "disable". Имена файлов - строковые переменные, если первый символ имени "~" - он будет заменён на имя директории, в которой находится исполняемый файл эмулятора. ***************************************************************************************************************** ***************************************************************************************************************** Это - общая секция, которая включена в другие В ней удобно перечислять параметры, которые совпадают во всех вариантах [common] Недокументированные команды: 0 - при появлении задать вопрос о продолжении, 1 - просто выполнять. CPU.NotDocCmd=0 Файл дампа памяти. Эмулятор создаёт его по команде "M" в мониторе ЦП и сохраняет туда блоки 0000..BFFF и D000..FFFF (между которыми расположено 4 Кб команд NOP) так, как их видит ЦП. CPU.DumpFile=dump6502.bin Скорость: 0 - максимальная, 1 - как реальный Агат CPU.RealTime=1 ***************************************************************************************************************** Файл палитр, используется только в X11-режиме Ожидается 16 строк, по три десятичных числа в каждой, разделённых TAB. Video.PalFile=~agatF-pal.txt ***************************************************************************************************************** Клавиатура Keyboard=enable Таблица раскладок клавиатуры Keyboard.table=~agatF-keytable.txt ***************************************************************************************************************** Звук, через OSS Sound=disable Устройство звукового драйвера Sound.drvpath=/dev/dsp Громкость (0..32767) Sound.volume=20000 Используется битрейт 48000, 16 бит, 1 канал, буфер около 4 Кб. 48000 / 16 - это наиболее благоприятный режим для драйверов, известные мне современные встроенные звуковухи поддерживают его аппаратно. ***************************************************************************************************************** Ускоритель дисководов: перехватывает обращение к относительно стандартным драйверам дисковода и выполняет все операции самостоятельно. Перехват происходит на основе известных сигнатур драйверов и значении указателя команд ЦПУ. FDD_accell=disable FDD_accell.signfile=~agatF-fd_accell_sign FIL-загрузчик. Срабатывает после виртуального включения питания, но до выполнения центрального RESET Т.е. когда блоки, не связанные с RESET, уже сконфигурировались (например: слова состояния памяти), но ЦП ещё не запущен. Он позволяет загружать в память B-файлы из FIL-контейнера и настраивать вектор теплого перезапуска на них. Таким образом можно с полпинка запускать любые программы, которые не требуют другого софта. Память предварительно заполняется кодом $60 (rts), в зависимости от размера и расположения файла могут быть сконфигрурированы модули дополнительной памяти (в семёрке) или состояние LC-карты (в девятке). Системный монитор остаётся подключенным, если загрузка происходит в нижную часть памяти. Значение этого параметра - имя FIL-контейнера, если пустое - FIL-загрузчик не влияет на обычный процесс запуска. FILoader требует активной базовой памяти ! Доппамять семёрки может быть запрещена. FILoader= ***************************************************************************************************************** ***************************************************************************************************************** [7] Системная шина и центральный процессор на ней - неотключаемые устройства. Системная шина: 7 - в семёрке по умолчанию пустые адреса отзываются как $FF, системное ПЗУ видно по адресам $F800..$FFFF 9 - в девятке - как старший разряд адреса, системное ПЗУ видно по адресам $F000..$FFFF (дублируется !) SystemBus.Arch=7 SystemBus.ROMFile=~agatF-sysmon7.bin Центральный процессор: Таймерные прерывания - это фрагмент модуля ЦПУ, поскольку уж слишком необычно они на него влияют (по сравнению с другими устройствами). Хотя, если будет поддержка сетевой карты Агата или какого нибудь другого устройства, генерирующего прерывания - тут что-то надо будет менять. Таймеры семёрки и девятки отличаются адресами выключения и включения. Это устройство не может быть исключено из архитектуры, но если указать архитектуру 0 - таймер нельзя будет включить программно. CPU.TimerArch=7 ! Комбинация Video.Arch=9 и CPU.TimerArch=7 вызовет конфликт на шине по адресам C05x ! ***************************************************************************************************************** Контроллер дисплея. Его можно частично отключить, например, для бенчмарков, а также можно задать режимы работы: Video=enable Text - режим работы через консоль, X11 не используется. Переключатели графических режимов игнорируются. X11 - открывается отдельное X11-окно и весь вывод идёт в него. Video.Mode=X11 Архитектура видеосистемы Video.Arch=7 Файл шрифта, используется только в X11-режиме Файл должен содержать 256 матриц, максимум 8x16 бит, высота вычисляется в зависимости от размера файла Video.FontFile32=~agatF-font7-32.bin Изображение символов для режима X11 кодируется байтами-строками, шириной до 8 пикселей. Video.ChWidth32=7 То же для режима 64x32 Video.FontFile64=~agatF-font7-64.bin Video.ChWidth64=7 Сам по себе модуль дисплея всё равно остаётся важен для эмулятора, т.к. через него получает данные виртуальная клавиатура и мыши/пульты. Если задано Video=disable, это лишь означает, что данные для клавиатуры будут поступать также как и в режиме Video.Mode=Text. Получение данных для мышей/пультов возможно только в Video.Mode=X11. Важно: контроллер дисплея не может включится в случае BaseMemory=disable, т.к. базовая память является, одновременно, и видеопамятью. ***************************************************************************************************************** Базовая память - 32 кб у семёрки, 128 кб у девятки BaseMemory=enable BaseMemory.Arch=7 ***************************************************************************************************************** Пульты, джойстки, мыши Это - как бы отдельные модули, но на входе у них - одна общая физическая мышь. Хотя внутри виртуальной машины они могут быть видны иногда даже одновременно. Стандартные пульты Paddle=enable Режим кнопок пультов: 7 - D7 = 1 когда кнопка отпущена, 9 - когда нажата Paddle.KeyMode=7 Мышь-марсианка через принтерный порт девятки MouseMars=disable MouseMars.slot=0 Файл-прошивка параллельного порта. Это фрагмент драйвера парпорта, используемый драйверами мыши как сигнатура для поиска хвостатой. MouseMars.ROMFile=~agatF-mmars.bin Мышь-Nippel - через свой контроллер MouseNippel=disable MouseNippel.slot=0 ***************************************************************************************************************** Модуль ДопОЗУ - имеется у семёрки в четвёртом слоте. DopOZU=enable DopOZU.slot=4 Модуль ЭмПЗУ - имеется у семёрки во втором слоте. EmPZU=enable EmPZU.slot=2 Я понятия не имею, как будет взаимодействовать базовая память девятки с этими модулями, поэтому на всякий случай они блокируются если BaseMemory.Arch=9 ***************************************************************************************************************** Модули дисковода 140 и 800 кб. Контроллеры имеют оба привода, задаются имена образов при запуске эмулятора и файлы с ПЗУшным драйвером. FDD140=enable FDD140.slot=3 FDD140.ROMFile=~agatF-fd140-105.bin FDD140.img0=test.im FDD140.img1= Блокировка записи на оба образа Этот параметр можно менять в мониторе дисководов, а здесь указать первоначальное значение FDD140.WP=enable FDD800=enable FDD800.slot=5 FDD800.ROMFile=~agatF-fd800.bin FDD800.img0=test.ai FDD800.img1= FDD800.WP=enable Остальные параметры будут взяты из секции common +common ***************************************************************************************************************** ***************************************************************************************************************** [9] Системная шина и центральный процессор на ней - неотключаемые устройства. Системная шина: 7 - в семёрке по умолчанию пустые адреса отзываются как $FF, системное ПЗУ видно по адресам $F800..$FFFF 9 - в девятке - как старший разряд адреса, системное ПЗУ видно по адресам $F000..$FFFF (дублируется !) SystemBus.Arch=9 SystemBus.ROMFile=~agatF-sysmon9.bin Центральный процессор: Таймерные прерывания - это фрагмент модуля ЦПУ, поскольку уж слишком необычно они на него влияют (по сравнению с другими устройствами). Хотя, если будет поддержка сетевой карты Агата или какого нибудь другого устройства, генерирующего прерывания - тут что-то надо будет менять. Таймеры семёрки и девятки отличаются адресами выключения и включения. Это устройство не может быть исключено из архитектуры, но если указать архитектуру 0 - таймер нельзя будет включить программно. CPU.TimerArch=9 ! Комбинация Video.Arch=9 и CPU.TimerArch=7 вызовет конфликт на шине по адресам C05x ! ***************************************************************************************************************** Контроллер дисплея. Его можно частично отключить, например, для бенчмарков, а также можно задать режимы работы: Video=enable Text - режим работы через консоль, X11 не используется. Переключатели графических режимов игнорируются. X11 - открывается отдельное X11-окно и весь вывод идёт в него. Video.Mode=X11 Архитектура видеосистемы Video.Arch=9 Файл шрифта, используется только в X11-режиме Файл должен содержать 256 матриц, максимум 8x16 бит, высота вычисляется в зависимости от размера файла Video.FontFile32=~agatF-font9-32.bin Изображение символов для режима X11 кодируется байтами-строками, шириной до 8 пикселей. Video.ChWidth32=7 То же для режима 64x32 Video.FontFile64=~agatF-font9-64.bin Video.ChWidth64=7 То же для режима 40x24. Но здесь размер символов фиксирован - 7x8 бит. Это - ограничение смешанного режима. Video.FontFile40=~agatF-font9-40.bin Сам по себе модуль дисплея всё равно остаётся важен для эмулятора, т.к. через него получает данные виртуальная клавиатура и мыши/пульты. Если задано Video=disable, это лишь означает, что данные для клавиатуры будут поступать также как и в режиме Video.Mode=Text. Получение данных для мышей/пультов возможно только в Video.Mode=X11. Важно: контроллер дисплея не может включится в случае BaseMemory=disable, т.к. базовая память является, одновременно, и видеопамятью. ***************************************************************************************************************** Базовая память - 32 кб у семёрки, 128 кб у девятки BaseMemory=enable BaseMemory.Arch=9 ***************************************************************************************************************** Пульты, джойстки, мыши Это - как бы отдельные модули, но на входе у них - одна общая физическая мышь. Хотя внутри виртуальной машины они могут быть видны иногда даже одновременно. Стандартные пульты Paddle=enable Режим кнопок пультов: 7 - D7 = 1 когда кнопка отпущена, 9 - когда нажата Paddle.KeyMode=9 Мышь-марсианка через принтерный порт девятки MouseMars=enable MouseMars.slot=2 Файл-прошивка параллельного порта. Это фрагмент драйвера парпорта, используемый драйверами мыши как сигнатура для поиска хвостатой. MouseMars.ROMFile=~agatF-mmars.bin Мышь-Nippel - через свой контроллер MouseNippel=enable MouseNippel.slot=1 ***************************************************************************************************************** Модуль ДопОЗУ - имеется у семёрки в четвёртом слоте. DopOZU=disable DopOZU.slot=4 Модуль ЭмПЗУ - имеется у семёрки во втором слоте. EmPZU=disable EmPZU.slot=2 Я понятия не имею, как будет взаимодействовать базовая память девятки с этими модулями, поэтому на всякий случай они блокируются если BaseMemory.Arch=9 ***************************************************************************************************************** Модули дисковода 140 и 800 кб. Контроллеры имеют оба привода, задаются имена образов при запуске эмулятора и файлы с ПЗУшным драйвером. FDD140=enable FDD140.slot=6 FDD140.ROMFile=~agatF-fd140-173.bin FDD140.img0=test.im FDD140.img1= Блокировка записи на оба образа Этот параметр можно менять в мониторе дисководов, а здесь указать первоначальное значение FDD140.WP=enable FDD800=enable FDD800.slot=5 FDD800.ROMFile=~agatF-fd800.bin FDD800.img0=test.ai FDD800.img1= FDD800.WP=enable Остальные параметры будут взяты из секции common +common