Матричный дисплей (MatrixDisplay)

Входы (Inputs)

ПинТипОписание
DevAddrbus8Адрес устройства (0x1C = X, 0x1D = Y, 0x1F = Pixel)
DataInbus8Данные (координата или значение пикселя)
WEbitСигнал записи (1 = запись)
IO_SELbitВыбор I/O (1 = устройство активно)

Выходы (Outputs)

ПинТипОписание
Нет выходных пинов

Логика работы

MatrixDisplay — это экран из клетчатой бумаги: матрица маленьких квадратов, где каждый квадрат — отдельный пиксель. Рисуешь ты так же, как карандашом на разлиновке, только вместо штрихов — записи в порты ввода-вывода. Назови адрес устройства, координату и что рисовать — и точка вспыхнет на экране.

Главное свойство: любой пиксель включается за три записи. Сначала в порт 0xFC уходит координата X (DevAddr = 0x1C), затем в порт 0xFD — координата Y (DevAddr = 0x1D), и наконец в порт 0xFF — значение: 1 включить, 0 выключить (DevAddr = 0x1F). Хочешь поставить точку (7, 3)? Запиши 7, потом 3, потом 1 — по одному байту на шаг, привычными инструкциями STA.

Нюансы: координаты идут от 0 до 15, а точка (0, 0) — левый верхний угол экрана. Пиксель меняется только при активной записи: WE = 1 и IO_SEL = 1. Зато картинка сохраняется между тактами — не нужно перерисовывать экран каждый шаг. Стереть всё можно, лишь записав 0 в каждый пиксель.

Примеры

ДействиеЗапись в 0xFC (X)Запись в 0xFD (Y)Запись в 0xFF (пиксель)Результат
Зажечь точку (7, 3)731Пиксель в колонке 7, строке 3
Погасить точку (7, 3)730Пиксель погас
Зажечь угол (0, 0)001Левый верхний угол
Зажечь угол (15, 15)15151Правый нижний угол

Порядок строк в таблице — это и есть протокол: сначала координаты, потом значение. Поменять шаги местами нельзя — дисплей запоминает X и Y по очереди.

Применение

MatrixDisplay — основное графическое устройство компьютера: уровни 24 (ручной пиксель), 27 (работа с портами), 28 (движущаяся точка) и 29 (Змейка). В змейке экран — игровое поле: программа хранит координаты в RAM и попиксельно перерисовывает змейку и еду, а столкновения проверяет сравнением координат.

Конкретный приём — анимация: чтобы точка «поехала», программа гасит старый пиксель (запись 0), сдвигает координату на единицу и зажигает новый (запись 1) — всё это в цикле между тактами. Текст и символы выводятся так же: каждая буква — это набор пикселей, который программа рисует точка за точкой.

Собери это сам →

Смежные компоненты

Статьи по теме

Частые вопросы

Как зажечь один пиксель?

Записать байт координаты X в порт, байт Y в другой порт и 1 в порт пикселя — всё через инструкции OUT.

Что будет при записи координат вне диапазона 0–15?

Такая запись просто игнорируется: пиксель не изменится. Проверяй границы координат в программе, прежде чем выводить точку.

Как очистить весь экран?

Записать 0 в каждый из 256 пикселей: цикл по Y, вложенный цикл по X, и на каждой итерации — запись нуля в порт пикселя.