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

Mode0:

bits 3..0 – старшие биты (4..1) адреса блока, откуда выводятся данные. Младший бит определяется 3-м битом порта #7FFD.

bit 4 – "1"признак режима. Значение "0"соответствует графическому режиму.
bit 5 – признак разрешения "0"для 640 точек, "1"для 320 точек.
bit 6..7 – старшие биты адреса в блоке (bit 12..11). Они одинаковы как для байта пикселей так и для

байта атрибутов.
Так как в спектрумовском экране используется только три комбинации битов 6..7, четвертая комбинация

определяет особый режим – вывод бордера и синхросигналов. Таким образом комбинация "1111"в старших битах режима Mode0 особая. При такой комбинации назначения младших битов изменяется, так как для вывода бордера не требуется никакого адреса данных:

bit 3..2 – значение "11"генерирует в этом квадратике сигнал Blank - гашение.

bit 0 – значение "1"в присутствии сигнала Blank генерирует прерывание для процессора на восьмой линии квадратика. Именно программированием этого бита в нужном квадратике осуществляется "подгон- ка"сигнала INT под стандарт Pentagon или Scorpion.

Mode1:

Как уже было сказано, этот байт определяет адрес данных в видео-ОЗУ, выводимых в текущий квад- ратик. В спектрумовском режиме он соответствует восьми младшим битам адреса в блоке и совместно с битами 6..7 байта Mode0 определяет адрес спектрумовского символа в блоке. Недостающие 3 бита (bit 10..8) берутся из счетчика линий в квадратике.

Mode2:

Определяет младшие восемь бит адреса атрибута. В спектрумовском режиме устанавливается равным Mode1, а в текстовом используется как байт атрибута символа. При выборке атрибута производится специальное замешивание битов 6..7 байта Mode0 таким образом, что бы атрибуты оказались в старших адресах блока по известному спектрумовскому закону.

Как использовать этот режим для текстового режима?

Для этого в один из спектрумовских экранов записывается знакогенератор. Прописывается так, что на спектрумовском экране он выглядит как набор ASCII из 256-ти символов, выведенных последовательно в 256 знакомест. У этих символов прописывается атрибут просто равный номеру символа. После этого байты M ode1 и M ode2 оказываются просто равными ASCII коду и атрибуту выводимого символа соответственно. А байт Mode0 указывает на знакогенератор и в в принципе может определить 36 различных знакогенераторов. 3 за счет битов 7..6, еще 3 за счет битов 3..2 (комбинация "11"в этом месте попадает в область режима экрана и палитры, куда не стоит вписывать знакогенератор), и еще 4 за счет битов 1..0. Простым премножением получается 3 · 3 · 4 = 36 знакогенераторов.

Страница режима устроена таким образом, что бы при выводе линии байты атрибута и цвета одного символа оказались рядом, и символы, расположенные в одной строке выводятся подобно выводу вер- тикальной линии символов и рядом расположенной вертикальной линии атрибутов. При использовании акселератора вывод строки оказывается очень быстрым (около миллиона символов в секунду).