Надо посмотреть возможно ли в существующий код добавить частичную поддержку команд терминала VT52 и скролл...
https://gitlab.com/nedopc/pix/blob/master/SX/sx-video.asm
P.S. Расшифровываю свой запутанный код 12-летней давности

По-идее скрол сделать несложно - надо просто вместо одного счётчика строк, который одновременно используется при формировании адреса вычитки строки из внешнего ОЗУ, сделать два - один будет считать физические строки в кадре, а второй - использоваться для формирования адреса - в этом случае можно будет начинать видимый кадр с любой строки из памяти (не обязательно первой как сейчас). А вот со спец-символами несколько сложнее - входной байт проверяется в конце каждой строки и сейчас оно укладывается в 20 пикселов (120 тактов). По идее там существует запас ещё тактов 100, ну или перенести приёмку символов из прерывания в основную программу, т.к. она сейчас у меня выглядит вот так (после инициализации периферии):
P.P.S. Описываю словами как там в программе всё устроено - прерывание вызывается с частотой строчной развёртки и далее программа смотрит номер текущей строки - если это от 0 до 199, то это видимый кадр, иначе в зависимости от номера строки формруются те или иные синхропоследовательности. В случае видимого кадра - каждая текстовая строка занимает 8 графических строк и первая графическа строка всегда пустая, т.к. во время неё процык лезет во внешнее ОЗУ, чтобы вычерпать оттуда очередные 80 символов, которые будучи запомненными в регистрах данных процессора, используются следующие 7 строк, чтобы нарисовать видимое представление этих 80 символов. Ну и как я чуть выше написал, в конце каждой строки порядка 20 пикселов тратится на вычитку пришедшего символа, отработку команд позиционирования курсора 1 и 2, а также смещение курсора вправо, и если надо - в низ, после "печати" пришедшего символа...
P.P.P.S. Сейчас если слать кучу символов в недотекст, то они будут печататься слева-направо сверху-вниз, заполняя все строки, пока не добегут до правого нижнего угла - потом координаты "курсора" обнулятся и заполнение продолжится опять с левого-верхнего угла. При наличии скрола весь экран при добегании до конца должен будет сдвинуться на одну текстовую строку вверх, при этом снизу появится то, что раньше было сверху (бывшая первая строка) и текст будет "печататься" в этой новой нижней строке слева-направо, затирая собой то, что было там до этого. Это не совсем то, как должен выглядеть настоящий терминал - настоящий терминал должен сдвинуть экран и добавить снизу ПУСТУЮ строку, а не копию первой, поэтому между хостом и этой платкой придётся ставить интеллектуальную прослойку (пик), который будет сам реализовывать терминал V52, общаясь с недотекстом всё тем же самым способом как и сейчас, а после скрола пик пошлёт 80 пробелов, чтобы затереть нижнюю строку и только потом будет посимвольно печатать...
P.P.P.P.S. Вот листинг выложил:
https://gitlab.com/nedopc/pix/blob/master/SX/build_1_0_0/sx-video.lst - как видим места в прошивке практически не осталось:
Code: Select all
015E 0000 00601 loop: nop
015F 0000 00602 nop
0160 0000 00603 nop
0161 0B5E 00604 goto loop
00605
0180 00606 org 0x180
00607 include "sx-font.inc"
00001 ; 0x20 ' '
0180 0000 00002 data 0x00
0181 0000 00003 data 0x00
0182 0000 00004 data 0x00
0183 0000 00005 data 0x00
0184 0000 00006 data 0x00
0185 0000 00007 data 0x00
0186 0000 00008 data 0x00
0187 0000 00009 data 0x00
Между кодом и шрифтом (который идёт до самого конца) осталась дырка в 30 байт...