А вот если бы хардварщики на пару с программерами работали, то можно былобы получить что-то стоящее! Как-то давно пытался я придумать графический режим, чтоб z80 смог его РЕАЛЬНО осилить. Экран был в формате 3color - т.е 6144-RED + 6144-GREEN + 6144-BLUE
Вот например:

Вывод байта по маске на стандартный экран
LD A,(DE)
INC DE
AND (HL)
LD A,(DE)
INC DE
OR (HL)
LD (HL),A
INC L

Вывод на 3color экран

LD A,(DE)
LD (HL),A *
LD A,(DE)
LD (HL),A *
LD A,(DE)
LD (HL),A *
LD A,(DE)
LD (HL),A *
INC E
INC L

А дело тут в организации видеопамяти и видеоустройства!!!!!!!!!!!!!!!!!!!!
Видеостраницы размером 16Кб располагаются вместо ПЗУ (всего их минимум 6 - для двух экранов):
RedPage0,GreenPage0,BluePage0
RedPage1,GreenPage1,BluePage1
В приведенном примере используется так называемый MaskReg, при помощи которого задаётся
маска!
Сначала в управляющем видеопорту включаем бит "дополнительного управления командами z80"
Изначально вместо памяти по всем адресам 0..16384 подключен регистр маски MaskReg
Видеоустройство после команд отмеченных звёздочкой переключает страницы!

LD A,(DE) - из той-же видеопамяти (выше 6144 Кб) берем предварительно записанные по страницам данные
LD (HL),A * - Записали в MaskReg, сработала логика видеоконтроллера, переключились на страницу RegPage0 (или RedPage1 - в зависимости от текущего экрана 0 или 1 :-)
LD A,(DE) - Считали часть спрайта из RegPage0
LD (HL),A *- Записали в RegPage0, сработала логика видеоконтроллера, переключились на страницу GreenPage0
LD A,(DE) и так далее...
LD (HL),A *
LD A,(DE)
LD (HL),A *
INC E
INC L

На самом деле получая в руки только простейшие команды от Z80, надо использовать их со стороны железа по своему.