После пары вечеров шаманства запустил на своей Микро-80 Монитор, совместимый с Монитором Радио-86РК (см.Радио N11 1989 г.).
Теоретически, это должно дать возможность запускать программы, разработанные для Радио-86РК, но практически без адаптации не обойтись, т.к. большинство программ работают напрямую с видеопамятью. Тем не менее, появляются достаточно полезные функции, недоступные в оригинальном мониторе: управление верхней границей памяти, подсчет контрольной суммы, директива R чтения с внешнего ПЗУ.
Журнальный вариант Монитора у меня работать напрочь отказался, пришлось прибегнуть к реверсному инжинирингу и пультовой отладке. На удивление, при всей стройности и элегантности кода, я обнаружил довольно грубую ошибку - сразу после сброса и настройки указателя стека идет обращение к функции вывода строки на экран, которая использует ряд переменных, инициализация которых происходит несколько позже А так как среди этих переменных есть довольно важные, отвечающие за вызов внешних обработчиков, то поведение программы становиться непредсказуемым.
Легким движением меняем порядок блоков и получаем приглашение Монитора к вводу директив!
Поигравшись с оригинальным вариантом, обнаружил, что проблема проявляется в зависимости от типа ОЗУ по адресу $F000-$F800. Разные паттерны начального состояния микросхем ОЗУ после включения питания делают эту ошибку малозаметной на динамических РУ5 и повторяемо воспроизводимой на статике 537РУ10. Возможно, из-за этого авторы, отладившие программу на РУшках и не выявили данный огрех.
PS: В присоединенном архиве:
- M80_RK86-original.bin - оригинал РК86 монитора
- M80_RK86-modified.bin - подкорректированый мною (кроме исправления ошибки изменена высота экрана на 24 строки и изменены адреса дополнительной ВВ55 так, что ее выводы A0,A1 можно подключать к шине адреса без инверторов, см.схему в Радио N11 89г.)
- Monitor M80_RK86 Disassembled.asm - дизассемблированый мною монитор
- Modify original RK86 compatibe monitor v1.1.docx - инструкция по in-place корректировке оригинального бинарника в HEXредакторе