Предлагаю на обсуждение конструкцию очень простого графического компьютера на Z80, который я придумал ~30 лет назад, но руки так и не дошли до реализации (был доступен лишь КР580 на такте до 3-х МГЦ, что давало слишком мелкий экран).
Идея родилась, когда я ознакомился с концепцией компьютера BCS-3 (1984) в журнале FUNKAMATEUR, в котором вывод на экран делался цепочкой NOP (естественно, про ZX80 прочитать было негде). Идея аналогичная ZX80, только для вывода используется другая команда и вывод графический, а не текстовый.
Напомню концепцию ZX80. В ней, в момент начала вывода растра, Z80 с помощью прерывания уходит на процедуру визуализации. В которой он непрерывно читает с шины код NOP, а синхронно с ним из адресов на выводах Z80 считывается видео-байт и защелкивается в выходном видео-регистре, который затем за 4 такта, что длится команда NOP, выдвигается на вход телевизора. Таким образом Z80 работает заменителем счётчиков видеогенератора, что экономит детали.
При использовании этой идеи для графического варианта, возникает дополнительная экономия, т.к отпадает ПЗУ с фонтом и счётчик линий в знакоместе. После вывода каждой строки во время обратного хода луча Z80 выводит ССИ и инициализирует регистры для вывода следующей строки.
Для вывода одной линии растра выполняется 16 команд POP IX, при которых 16 битов защелкиваются в 16-ти разрядном сдвиговом регистре, из которого за последующие 16 тактов видеосигнал выдвигается в телевизор. Команда POP IX 14-ти тактовая. Чтобы было 16 тактов, 2 такта добавляются WAIT-ом. В регистр SP загружается экранный адрес начала экранной линии. Защелкивание в регистры происходит при совпадении адреса экранной области, сигнала /MEMR и адреса A0 или /A0. Время вывода одной линии растра длится 256 тактов. Расход регистров: ИР23 и две ИР9.
В линии отображается 16*16=256 точек. По вертикали - от 8 до 256 линий растра. Но формат поддержанный ROM-BIOS это 256*192. При такте Z80 в 5.5 МГЦ и 256 тактах время вывода растра в строке составляет: (1:5.5)*256=46.5 МКСЕК и 17.5 МКСЕК остаются на обратный ход луча по строкам. За 17.5 МКСЕК Z80 выполнит 96 маш.тактов. За это время (гашения луча) Z80 загружает в рег.SP экр.адрес следующей экранной линии (что необязательно, но полезно, можно двигать видимое окно 256x192 из виртуального экрана 512*256) и программно формирует ССИ, что экономит детали.
Вот полная процедура визулизации всего экрана.
Загрузив в регистр B число линий растра, можно менять размер экрана по вертикали (сокращение размера увеличивает быстродействие). Положение экрана по вертикали также регулируется программно. Загрузив в ОЗУ другую программу визуализации можно иметь и другой формат экрана (например 160 на 120). В данном варианте программы визуализации используется таблица (TABLE) содержащая начала экранных линий. Это позволяет иметь экран где угодно и делать мгновенный аппаратный ролик во все стороны. Но можно загрузить SP один раз перед процедурой визуализации, что экономит ОЗУ, но даёт меньшую гибкость.Код:. LD B,LINES ; число визуализируемых линий LD HL,TABLE ; таблица содержащая адреса начал строк LD DE,2 VLOOP: DEC B ; 4 такта JR Z,EXIT ; 10 тактов LD (port_SSI),A ; 13 тактов выдаём ССИ ADD HL,DE ; 11 тактов LD (KORR),HL ; 16 тактов LD SP,IY ; 10 тактов (это просто NOP в 10 тактов) ; LD SP,(nnnn) ; 20 тактов defb EDH defb 7BH KORR: DS 2 POP IX ; 16 последовательных POP для визулизации . . . . . . POP IX JR VLOOP ; 12 тактов = 96 тактов EXIT: LD (port_KSI),A ; выдаём строб для КСИ EI RET ; возврат к программе пользователя
КСИ формируется выдачей строба сразу после вывода последней линии растра. КСИ формируется на 555АГ3. Строб запускает первый одновибратор, который обеспечивает задержку фронта на несколько МСЕК, а второй одновибратор формирует КСИ стандартной длительности.
50 ГЦ для прерывания NMI вырабатываются на ВИ53, второй канал нужен для синхронизации по строкам, а третий канал - отдан под звук, т.к Z80 в такой схеме не может формировать звуки. Истратив пол-корпуса ТМ2 можно освободить и 2-й канал для звуков.
Схема состоит из Z80, 2К ПЗУ РФ2, 60К ОЗУ на w24512, ИР22 для аппаратной клавиатуры, а весь расход деталей на видео составляет 3 регистра и несколько корпусов логики.
- при Z80 на такте 7.0 МГЦ реализуется экран шириной 384 точки.
- при Z80 на такте 6.2 МГЦ реализуется экран 320*200, как у CGA.
- при Z80 на такте 5.5 МГЦ реализуется экран шириной 288 точeк.
- при Z80 на такте 5.0 МГЦ реализуется экран шириной 256 точeк.
- при Z80 на такте 4.5 МГЦ реализуется экран шириной 234 точки.
- при Z80 на такте 4.0 МГЦ реализуется экран шириной 208 точек.
- при КР580 с тактом 3 МГЦ реализуется экран шириной в 160 точек.
Экранный вывод отнимает у процессора 61% времени (192/312=0.61). Быстродействие составляет 0.39% от такта Z80, т.е при 5.5 МГЦ скорость компьютера равна 2.12 МГЦ. Если требуется бОльшая скорость, достаточно программно уменьшить вертикальный размер экрана. Для игр можно устанавливать режим в 128 линий, что даёт скорость 3.25 МГЦ.
Для экрана в 256 точек минимально возможный это такт 5.0 МГЦ. Но если вывод на телевизор, то лучше использовать кварц 12 МГЦ и такт Z80 в 6 МГЦ. Что при 192 линиях повышает скорость до 2.32 МГЦ, а при 128 линиях даёт уже 3.54 МГЦ, что вполне достаточно для игр. Для игр можно ввести цвет CGA, если выводить из двух выходных регистров параллельно, но с вдвое меньшим тактом. Можно также ввести вторую параллельную банку для цвета, хотя при этом конструкция уже потеряет минимальность.
Большой недостаток концепции, это невозможность работы в реальном времени, т.к CPU 2/3 времени прогоняет не свою программу, а занят выводом на экран. Поэтому ввод с МГ-ленты возможен только с погашенным экраном, как в РК86. Большим достоинством конструкции является программная гибкость. Например, при размещении программы визуализации в ОЗУ реализуется почти мгновенное вертикальное и горизонтальное панорамирование.
Перспективным может быть использование такого компьютера в виде графического адаптера для бытового компьютера у которого нет графики (РК86 и клоны, ЮТ88). Тогда для связи достаточно одного регистра с 3-им состоянием (ИР22), куда РК86 пишет графические команды, а контроллер их считывает и исполняет. Такое устройство отображения может пригодиться для отладки контроллеров не имеющих своих средств отображения.
Я хотел бы сам сделать такой компьютер, но очень не люблю возиться с железом и монтировать конструкции на слепыше. Да и пока занялся другими конструкциями и времени на это нет. Может быть кого-то заинтересует? У Вас будет шанс меня опередить и разработать схему такого компьютера или использовать идею для более грамотной конструкции.
Ожидаю критику концепции и предложения, если что-то можно улучшить. Разумеется флейм в стиле "а зачем и кому это вообще надо?" здесь неуместен. Я всегда считал, что 29 корпусов в РК86 это не самый минимум для схемы простого БК. У меня есть идея и ещё одного такого же простого графического компьютера. Этот вариант похож, но использует ПДП, позднее можно обсудить и его.