RUЭВМ
Вы хотите отреагировать на этот пост ? Создайте аккаунт всего в несколько кликов или войдите на форум.
Сентябрь 2020
ПнВтСрЧтПтСбВс
 123456
78910111213
14151617181920
21222324252627
282930    

Календарь Календарь

Последние темы
» Тема для вопросов, консультаций и т. д...
автор Atari1974 Вчера в 16:12

» ZX Microdrive
автор barsik Вчера в 02:44

» Флейм только по теме "Радио-86РК".
автор barsik Пн Сен 28 2020, 09:24

» Трансформатор электронный Taschibra 230/12В 60Вт для галогенных ламп. Перестал работать.
автор Viktor2312 Ср Сен 23 2020, 15:05

» Купил с али БП 12в 100w для питания LED лент подсветки. Проблема
автор Viktor2312 Вс Сен 20 2020, 18:07

» Жалобы/пожелания по работе форума
автор Viktor2312 Вс Сен 20 2020, 11:54

» Стабилизированный преобразователь напряжения.
автор Viktor2312 Пн Сен 14 2020, 23:12

» Простые доработки ZX-48К: RAM-монитор в ПЗУ и экран на E000
автор barsik Сб Сен 12 2020, 23:47

» Применение КР580 ВИ53 для генерации музыки
автор Viktor2312 Сб Сен 12 2020, 20:09

» STM32. Статьи, заметки, очерки, разное...
автор Viktor2312 Чт Сен 03 2020, 12:09

» STM32G0. Документация (Datasheet, разное).
автор Viktor2312 Чт Сен 03 2020, 11:52

» Новинки. Книги. Часть 1.
автор Viktor2312 Ср Сен 02 2020, 14:21

» STM32F4. Статьи, заметки, очерки, разное...
автор Viktor2312 Вт Сен 01 2020, 14:44

» Ленинград-0,-1,-2,-3. Статьи, заметки, очерки, разное...
автор barsik Вс Авг 30 2020, 08:32

» Ленинград-0
автор barsik Вс Авг 30 2020, 08:01

» STM32F4. Изучение.
автор Viktor2312 Пт Авг 28 2020, 00:07

» Орион-128: Полезные доработки ПЭВМ
автор barsik Чт Авг 27 2020, 11:21

» STM32H7. Статьи, заметки, очерки, разное...
автор Viktor2312 Вт Авг 25 2020, 10:43

» Радио-86РК: По страницам журнала "Радио" и не только...
автор barsik Вт Авг 25 2020, 01:28

» STM32L0. Документация (Datasheet, разное).
автор Viktor2312 Вс Авг 23 2020, 10:10

» STM32L0. Отладочные платы.
автор Viktor2312 Сб Авг 22 2020, 20:22

» STM32L0. Программное обеспечение, разное...
автор Viktor2312 Сб Авг 22 2020, 17:24

» STM32L0. Статьи, заметки, очерки, разное...
автор Viktor2312 Чт Авг 20 2020, 19:37

» STM32H7. Документация (Datasheet, разное).
автор Admin Чт Авг 20 2020, 13:33

» STM32F7. Документация (Datasheet, разное).
автор Admin Чт Авг 20 2020, 13:32

Самые активные пользователи за месяц
Viktor2312
ПЗУ F800 для РК86 Vote_l10ПЗУ F800 для РК86 Voting10ПЗУ F800 для РК86 Vote_r10 
barsik
ПЗУ F800 для РК86 Vote_l10ПЗУ F800 для РК86 Voting10ПЗУ F800 для РК86 Vote_r10 
Atari1974
ПЗУ F800 для РК86 Vote_l10ПЗУ F800 для РК86 Voting10ПЗУ F800 для РК86 Vote_r10 

Поиск
 
 

Результаты :
 


Rechercher Расширенный поиск


ПЗУ F800 для РК86

Перейти вниз

ПЗУ F800 для РК86 Empty ПЗУ F800 для РК86

Сообщение  barsik в Пн Янв 20 2020, 03:01

1
Если Ваша задача только спаять, отладить платку РК86, поместить её в изящный корпус и, погоняв десяток РК-игр из сезона 1988 года, убрать на полку под стекло, то дальше не читайте. В этой теме я выложу коды и исходники нескольких версий ПЗУ для РК86, которые могут быть интересны более творческим людям.

Обычно творческим людям нужен исходник ROM-BIOS со свободным местом, куда можно встроить свой дополнительный код. Например, если Вам надо подключить дополнительную периферию, но Вы испытываете трудности в том, чтобы освободить в ПЗУ РК86 свободное место для её инициализации по сбросу. Или, например, Вам нужно найти место в ПЗУ для размещения в нём стартового загрузчика, что "раскручивает" загрузку ПО для контроллера microSD (что грузить с МГ-ленты глупо).

Освободить несколько десятков байт свободного места в ПЗУ не особо сложно. Удалив ненужную директиву X, можно освободить ровно 48 байт. Убрав стоп-точку из директивы G, и переделав её правильно (чтобы передавались параметры в регистрах и возврат в монитор был по RET) освобождается ещё около 40 ячеек. Догадаться, что это надо сделать несложно и доступно каждому.

А вот дальше освобождать ячейки уже можно только оптимизацией кода. Это не такая простая задача. За один день не сделаешь. Мне в течение пары лет постепенно удалось уплющить ПЗУ РК86 на 209 байтов. А при замене на Z80 выигрывается ещё полсотни ячеек.

Если этого числа свободных ячеек всё-равно не хватает для Ваших задач, то придётся жертвовать какими-то не самыми популярными директивами. Впрочем, на этом особо много не выиграть, т.к почти все эти директивы короткие. Например, DIR_L, DIR_S и DIR_C. DIR_R тоже стоИт удалить, т.к грузить файлы вручную указывая адреса в ПЗУ это вообще детский лепет. Возможно это было уместно в 1982 году, но не в конце 80-тых. Для работы с файлами ROM-диска нужна отдельная программа.

На Специалисте и РК86 я использовал программку ROM-Service. Это всего 300 байтов, выдаёт каталог программ, которые запускаются цифрой. Причём программы в ПЗУ не обязаны идти впритык и ROM-диск можно набрать из отдельных ПЗУ с программами. Положение программ в ROM-диске не позиционное, а находится по сигнатуре. Я взял эту идею из одной книги на венгерском языке.

Но вместо внешней программки удобнее включить в ПЗУ F800 директивы работы с ROM-диском из М3 ОРИОНА. Тогда ROM-диск должен быть в формате ORDOS. Если делать запуск по имени, точно как в ОРИОНЕ, то предполагаю, что для этого 209 свободных байтов хватит притык (хотя м.быть даже чуть не хватит). Но вывод каталога ROM-диска и запуск файлов не по имени, а по порядковому номеру легко уложится всего в сотню байтов.

Вот версия исходника РК-ПЗУ в которой свободно для расширений 209 байтов. Для трансляции просто запустите BAT-файл (если у Вас убогая Windows, что не умеет запускать программы MSDOS, то запускайте BAT-файл под DosBox).

- - - Добавлено - - -

Возможно, когда у меня в очередной раз случится припадок интереса к ПЗУ РК86, то попробую встроить в монитор РК86 вывод каталога ROM-диска и запуск файлов из ROM-диска.

Замечу, что наличие ROM-диска решает проблему нехватки объёма ПЗУ для улучшения монитора. Если ROM-диск есть, можно существенно улучшить качество и объём директив монитора. Понятно, что процедуры ввода/вывода менять нельзя. Если есть верхнее ОЗУ, то по сбросу туда может грузиться расширение монитора MRK-EXT, который расширяет количество директив и улучшает качество имеющихся.

Если верхнего ОЗУ нет, то чтобы существенно не опускать RAMTOP, можно ввести в ПЗУ оверлейные директивы. При этом в вершине RAMTOP от основного ОЗУ будет отниматься небольшой объём (менее 100 байт). Для обслуживания директивы её исполнительный код будет подгружаться в ОЗУ из ROM-диска и исполняться. Пользователь не заметит разницы, но такой трюк также позволит резко поднять качество и объём директив.

В связи с тем, что недавно для эмулятора EMU80 появился конфиг для РК86 который расширяет ОЗУ РК86 на 512 кб (это доп.ОЗУ прокачивается в окне A000...BFFF), то появилась возможность странслировать на РК86 кучу разных DOS. Как DOS только работающих в окне верхнего ОЗУ с внешним приводом, так и использующих доп.ОЗУ 512 кб в виде эл.диска.

Для работы именно из эл.диска наиболее оптимальной является RAMDOS написанная в 1989 г. В.Ивинских из Тольятти. RAMDOS не только ОС наиболее оптимальная для диска из ОЗУ, имеет объём всего 2 кб, но и по интерфейсу пользователя оформлена как расширение монитора. Потому её можно считать расширением монитора и рассматривать в разделе монитора.

После инициализации RAMDOS (что заключается в инициализации железа и форматировании, если холодный рестарт) в список добавляются новые директивы, а некоторые старые директивы меняют работу. Так директива D без параметров выдаёт каталог, директива L грузит в ОЗУ, директива S записывает на диск, директива K уничтожает, директива R переименовывает, а директива X запускает на прогон программу.

Интерфейс программиста (т.е функции BDOS) также прост и удобен. В отличие от CP/M и MSDOS обмен не посекторный. RAMDOS позволяет или цельно файловый или побайтовый обмен (почти как в ORDOS, только ограничения в объём диска 60 кб нет). RAMDOS в оригинале рассчитана на автоинкрементный RAM-диск. RAM-диск из обычного ОЗУ будет раза в 2 тормознее.

Грузить DOS с магнитофона глупо. Потому RAMDOS или будет прошита в резидентном ПЗУ (например на 9000) или грузиться в верхнее ОЗУ из ROM-диска холодным загрузчиком, прошитым в ПЗУ F800.

- - - Добавлено - - -

Тут на одном форуме человек под ником Paguo-86PK занялся усовершенствованием ПЗУ РК86. Чтобы найти место для модификации п/п-ммы F809 он открыл много идей по ужатию объёма кода. Используя его идеи, а также свои новые открытия, я нашёл возможность ещё ужать код. Вот коды версии ПЗУ РК86, в которой свободно 213 байтов, а также коды версии ПЗУ РК86 в которой директивы D и M, а также интерпретатор ком.строки (CCP) взяты от Специалиста: https://yadi.sk/d/_usAW8c76grYww

Попутно была вспомнена идея оверлейного монитора, который работает только с ROM-диском. Суть идеи в том, что исполнительный код некоторых директив при их вызове загружается из ROM-диска в основное ОЗУ (под вершину RAMTOP) и там прогоняются. Для пользователя нет разницы, но т.к снимается ограничение на объём кода из-за нехватки объёма ПЗУ, то это позволяет не только улучшить качество и увеличить количество директив, но и освободить в ПЗУ F800 свободное место (объёмом до 1 кб, меньше никак, т.к в ПЗУ должны оставаться п/п-ммы ввода/вывода).

- - - Добавлено - - -

Заимствуя свежие идеи по сжатию кода от Paguo-86PK удалось ещё больше уплющить код ПЗУ РК86. Теперь в ПЗУ свободно для расширений уже 224 байта. Исходник и коды вот здесь.

- - - Добавлено - - -

Удалось ещё немного уплющить код ПЗУ РК86. Теперь в ПЗУ свободно уже 244 байта. Исходник и коды вот здесь.


Последний раз редактировалось: barsik (Пт Янв 31 2020, 01:57), всего редактировалось 2 раз(а)
barsik
barsik
Мастер++

Сообщения : 701
Дата регистрации : 2016-11-10
Откуда : С-Петербург

Вернуться к началу Перейти вниз

ПЗУ F800 для РК86 Empty .

Сообщение  barsik в Вс Фев 02 2020, 06:29

2
Провёл ещё десяток часов в текстовом редакторе и вот наконец вот здесь исходник и коды варианта плющенного ПЗУ F800 для РК86, в котором число свободных байтов доведено до 272.

ПЗУ F800 для РК86 Dump_262.1580703773

Здесь я сделал курсор нормальным, т.е большим на всё знакоместо, вместо мизерной крошечной чёрточки на 10-й линии знакоместа. Если найдётся приверженец старого уродливого крошечного курсора, то ему достаточно только изменить ключ K_ORIG на ненулевое значение и запустить BAT-файл (если не Win XP, то под DosBox).

Если 272 байтов Вам всё-равно не хватает, то вот здесь рекордная версия, где свободно аж 280 ячеек. Эта доп.экономия получена за счёт удаления сдвижки влево на 4 знакоместа (это в сущности не особо надо, сделано отчасти для эстетики и, чтобы символ '?' при ошибке был на свободном от цифр участке) и убрано дублирование выдачи звуков на магнитофон (что надо для Z80). В принципе ещё один байт можно выиграть, если использовать особенность КР580 (тогда уже вообще не будет работать на Z80).

Кроме того, я странслировал версию с изменяемым курсором, в котором в латинском регистре курсор такой же большой, а в русском регистре снова становится крошечной чёрточкой в 10-й линии знакоместа. Изменение формы курсора для индикации включённого регистра используется во всех развитых компьютерах. Смена формы курсора в РК  достигается реинициализацией ВГ75 при каждом нажатии клавиши РУС/ЛАТ, т.к в ВГ75 нет отдельной команды для смены формы курсора.

Т.о форма курсора задаётся только в команде настройки режима ВГ75, когда также задаётся адрес экранной области. Естественно, по нажатию РУС/ЛАТ для реинициализации ВГ75 используются стандартные параметры (т.е экран на 76D0 и всего 25 видимых строк).

Однако существуют так называемые псевдографические игры, в которых режим ВГ75 перенастраивается. Обычно устанавливается 32 видимых строки, а экранный буфер перемещается с 76D0 куда-нибудь ниже раб.ячеек ПЗУ, т.е ниже 7600 (часто экран ставят на 4000).

Некоторые игры имеют свой драйвер опроса матрицы клавиш, но большинство использует стандартную п/п-мму F81B, при которой клавиша РУС/ЛАТ обслуживается. Если в такой игре с перемещённым экраном и командами CALL F81B нажать на клавишу РУС/ЛАТ, то экранный буфер переустановится на стандартный адрес 76D0 и псевдографический экран пропадёт. Вывод простой: в псевдографических играх держи руки подальше от клавиши РУС/ЛАТ.

Вот здесь исходники и коды такой версии ПЗУ с индикацией регистра формой курсора. Попутно изменено сообщение об ошибке (вместо глупого '?' причём в начале строки команды, выводится слово ERROR в следующей строке, как во всех остальных мониторах). Также добавил пару мелочей, что должны были быть сделаны изначально. При выходе на промпт всегда включается ЛАТ-регистр и директива D выводит дамп, а не один байт, если вводить только один параметр. Из-за этих вполне оправданных затрат тут свободных байтов лишь 249.


Последний раз редактировалось: barsik (Пт Фев 14 2020, 07:18), всего редактировалось 5 раз(а)
barsik
barsik
Мастер++

Сообщения : 701
Дата регистрации : 2016-11-10
Откуда : С-Петербург

Вернуться к началу Перейти вниз

ПЗУ F800 для РК86 Empty ROM-BIOS РК с поддержкой ROM-диска

Сообщение  barsik в Сб Фев 08 2020, 19:08

3
Т.к вряд ли кому-нибудь удастся ещё более уплющить код ПЗУ РК86, то пора начинать хоть как-то с пользой использовать ровно 280 свободных ячеек в ПЗУ РК86, что я освободил оптимизацией.

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

ПЗУ F800 для РК86 ROM-diskRKzhurnalnyj.1581177631

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

На скрин-шоте видно как каталог выдаётся по нажатию на <ВК> на пустой строке (как в ОРИОНЕ). В принципе, директива загрузки из 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-диска.

ПЗУ F800 для РК86 ROM-disk_RK86.1580959226


- - - Добавлено - - -

Один человек с ником Радио-86РК на другом форуме подсказал, как освободить в ПЗУ ещё 5 байтов. Заменил выложенную выше версию с 280-ю свободными байтами на версию с 285-ю свободными байтами.

ПЗУ F800 для РК86 285bytesfree.1582694278
barsik
barsik
Мастер++

Сообщения : 701
Дата регистрации : 2016-11-10
Откуда : С-Петербург

Вернуться к началу Перейти вниз

ПЗУ F800 для РК86 Empty Re: ПЗУ F800 для РК86

Сообщение  Спонсируемый контент

4

Спонсируемый контент


Вернуться к началу Перейти вниз

Вернуться к началу


 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения