Простейший драйвер, основанный на возможностях монитора-3, отлавливает нажатие УС+СС+V и по такому нажатию запускает процедуру визуализации, просто сливая экран РК86 в экран ОРИОНА, отчего на экране возникает картинка из экрана РК86.
Понятно, что визуализировать вручную мне скоро надоело, поэтому используя, опять-таки свойство М3, в котором, в отличие от М2, векторизована и подпрограмма F81B, я сделал полноценный драйвер визуализации, основанный на следующей идее.
Т.к все программы всех ЭВМ, где клавиатура не на прерываниях, беспрерывно опрашивают клавиатуру (иначе нажатия бы пропали), то вызов п/п-мм клавиатуры происходит тысячи раз в секунду. И соответственно, все программы РК86 тысячи раз в секунду вызывают всего две п/п-ммы F812 и F81B или просто висят в подпрограмме F803. За секунду происходит в зависимости от скорости ЭВМ до 5000 вызовов F81B.
А в ПЗУ ОРИОНА ф-я STATUS не выкидывает 0 в порт A, читая по B (чтобы проконтроллировать одним считыванием все линии сканирования), а вместо этого вызывает F81B, т.к 3 байта короче, чем 30 байтов. Потому, если в исполнительную часть п/п-ммы F81B добавить счётчик вызовов и по каждому, например, 300-тому вызову F81B вызывать процедуру визуализации (и перед F803), то это будет работать точно также, как визуализация на прерываниях.
Вот так устроен полноценный программный эмулятор РК86, а не та туфта, что была опубликована в ж.РАДИО в 1991 под именем эмулятор РК86.
Кстати на этом же принципе основаны программые часы в моих драйверах, пока программа читает клавиатуру, программные часы идут (хотя если нет опоры на апп.таймер, то часы идут неточно).
Короче, благодаря таким свойствам М3, простейшим способом получается визуализация наглых программ РК86. К сожалению, не всех.
Потому что извращенцы идут дальше, они не только нагло лезут в экран, но еще и используют служебные ячейки ПЗУ наоборот. Например, чтобы изменить позицию в экране куда по F809 будет выкинут очередной символ (вместо того, чтобы использовать код ESC,Y), они нагло меняют ячейки 7600/7601, где ПЗУ хранит экранный адрес для очередного вывода на экран. Оттого вывод получается куда они хотят, и даже вне основной экранной матрицы, что позволяет выводить выше экрана 64*25, ниже его, правее и левее. Но на ОРИОНЕ ячейка 7600 ни на что не влияет и вывод по F809 происходит по текущим координатам из ячеек POSX, POSY (F3D6/F3D7).
Чтобы даже такая сверхнаглота визуализировалась, надо переписать ROM-BIOS ОРИОНА так, чтобы служебные ячейки ПЗУ РК86 полностью обслуживались и точно также как в РК86 влияли на работу. По сути именно это должны были сделать разработчики ОРИОНА, раз уж взялись за задачу совместимости с РК86.
[свернуть]