Улучшенное ПЗУ F800 для РК86

Советский компьютер Радио-86РК (1986) и его клоны

Moderator: Shaos

User avatar
barsik
Doomed
Posts: 585
Joined: 19 Feb 2017 03:46
Location: Санкт-Петербург, Россия, третья планета от Солнца, галактика Млечный Путь

Улучшенное ПЗУ F800 для РК86

Post by barsik »

.
Недавно у меня оказался исходник ПЗУ РК86 в котором с помощью оптимизации кода было освобождено 280 ячеек ПЗУ. Учитывая, что ради сохранения совместимости изменять процедуры ввода/вывода нельзя, можно использовать это свободное место для добавки каких-либо полезных директив или усовершенствования имеющихся.

Первое самое очевидное и полезное расширение директив монитора - это введение поддержки ROM-диска. Для поддержки этого в РК ранее придумали неудобный для практического использования метод. При котором применялся неудобный для компоновки формат ROM-диска с каталогом и отдельная внешняя программка для запуска файлов. Для использования ROM-диска требовалось с ленты или, помня адреса, из самого ROM-диска директивой R загрузить на адрес 7400 маленькую программку, которая выводила каталог программ ROM-диска и позволяла их запуск.

Image

Гораздо удобнее иметь директивы для ROM-диска в резидентном мониторе и запускать программы как в обычной DOS. Потому я странслировал версию ПЗУ F800 с директивами для обслуживания ROM-диска. Вот здесь можно скачать исходник и коды такой версии для базового железа (т.е с ППА D14 на A000). Сам я использую версию ПЗУ с запасным ППА перенесённым на адрес 8400 (что позволяет прокачивать доп.ОЗУ в окне A000...BFFF). В началах исходников кратко описаны добавки в работу монитора.

На скрин-шоте видно как каталог выдаётся по нажатию на <ВК> на пустой строке (как в ОРИОНЕ). В принципе, директива загрузки из ROM-диска не нужна, нужна только директива для запуска. Но т.к это стоило немного, то сделал и загрузку по L, т.к после загрузки по L делается вывод адресов загрузки и КС. В версии ПЗУ с переставленным адресом ППА D14 на 8400 загрузка возможна в основное ОЗУ (до 7600) и в область дополнительного ОЗУ A000...BFFF. В версии странслированной для базового РК с адресом ППА D14 на A000 загрузка только в основное ОЗУ.

В этой версии ПЗУ директива D оставлена убогой базовой (без вывода ASCII), потому приходится сохранять и директиву L для просмотра дампа в виде текста. Чтобы букву L можно было одновремнно использовать в качестве команды LOAD используется разделитель пробел. Для работы директив базового ПЗУ РК, параметры (адреса) вводят сразу же за буквой команды без пробела. Это позволяет использовать пробел вставленный после буквы L в качестве признака команды LOAD. Т.о, чтобы загрузить файл надо ввести букву L, пробел, имя файла и <ВК>. А директива L в старом формате (т.е без пробела и с двумя HEX-параметрами) позволяет выводить текст.

Имя файла можно набирать не полностью (если нет файла с похожим именем и не возникает неоднозначности). Например, если есть два файла с именами начинающимися на букву X, то по команде: L X<ВК> будет запущен первый по ROM-диску файл начинающийся с буквы X.

Как в ОРИОНЕ по <ВК> на пустой строке выводится каталог файлов ROM-диска, а по команде <пробел> выполняется запуск программы из ROM-диска. Формат ROM-диска аналогичен формату ROM-диска ОРИОНА, только в именах символ '$' как флаг запуска не нужен и файлы в ROM-диске начинаются сразу с отступом 0, а не с отступом 800. Размер файлов должен обязательно быть кратен 10H (т.е младший ниббл размера всегда 0).

Компоновать такой стандартный для РК и ОРИОНА ROM-диск очень удобно, даже нет никакой нужды в отдельной программе для этого. Достаточно редактора UltraEdit (т.к он позволяет редактировать в HEX-виде и вставлять в редактируемый в HEX-виде файл другие файлы) или любого другого редактора в HEX-виде и просто добавлять ORD-файлы в конец файла ROM-диска (следя, чтобы размер файла ROM-диска не превысил 64 кб).

Директива R теперь не нужна, но пока оставил её (т.к директива R м.быть полезна для считывания ПЗУ через платку УФ-прошивателя). На скриншоте директивой R считана метка первого файла. В метке файла с отступом 14 (в байтах 0E,0F) можно записывать контрольную сумму или точный размер файла. К сожалению оперативно заменить ROM-диск эмулятор не позволяет.

Кстати, если бы эмулятор поддерживал и страничность ROM-диска, то можно было бы поддержать и многостраничный ROM-диск (т.к осталось ещё немного места, этого может хватить). Тогда файлов в ROM-диск умещалось бы много и имело бы смысл нацарапать простенькую графическую оболочку для запуска файлов из ROM-диска.

Image