Файл конфигурации эмулятора "Агат-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