После пары вечеров шаманства запустил на своей Микро-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редакторе


А так как среди этих переменных есть довольно важные, отвечающие за вызов внешних обработчиков, то поведение программы становиться непредсказуемым.
Ответить с цитированием

Размещение рекламы на форуме способствует его дальнейшему развитию 
