Создание графики
Сложное — это не горы деталей,
а свет, что положен туда, где темно.
Глаз различает цвета в перспективе, —
компьютер выводит лишь плоское дно.
Создание графики для режима Hi-Color — ключевой вопрос. Сегодня единственным способом сделать это удобно является редактор ZX-Paintbrush 2.6.4 для Windows. Он был специально доработан в 2017 году для использования режимов Hi-Color и (на закуску) ULA+. Поэтому если вы видели ранние версии, то приготовьтесь к тому, что в старших версиях это совсем другая программа. Аналогов не имеет.
Даже если художник предпочитает другие редакторы, ZX-Paintbrush потребуется как универсальный конвертор: может конвертировать из BPM, PNG и т. д. в формат SCR (и обратно), а также конвертировать обычный SCR в форматы с расширенными атрибутами (SCR и MLT).

Для переключения в Hi-Color
используйте кнопку с буквами «S/T»

ZX-Paintbrush позволяет выделять и переносить области по пикселям и атрибутам с предпросмотром на новом месте. Можно копировать изображение с атрибутами или без. Механизм переноса фрагментов — как в Deluxe Paint и Personal Paint на Амиге. Фрагменты сохраняются в формате ZXS для создания коллекций и быстрой сборки картинок. Проблемы при создании мультиколорной графики носят нетехнический характер.
Художникам на Spectrum привычнее рисовать сначала в атрибутном режиме, а затем доводить изображение в мультиколоре. При вертикальном увеличении цветового разрешения они не знают, как это использовать, и не могут адекватно спланировать картинку, так как цветовое разрешение по горизонтали осталось прежним, — нужен отдельный, ещё не наработанный навык. Проще действовать поэтапно, что увеличивает время работы над графикой.
При известном навыке «клэшинг» может быть сведён «к нулю» там, где раньше было «ничего не сделать». Надо максимально использовать тот факт, что по вертикали мы имеем «цвет на точку», что позволяет делать эффектные пересечения. Можно рисовать разноцветные ступенчатые диагонали.
В то же время, если раньше художник оперировал цветами в 768 атрибутных квадратах, то теперь ему это надо делать для 6144 атрибутных рядов, что в 8 раз больше. Графика Hi-Color требует опоры на изображение, отрисованное в обычных атрибутах, и опыта — как собственного (который надо наработать), так и других художников. Можно порекомендовать ознакомиться с работами художника Шеврон, начиная с «High Colour».
Для получения уникальной графики можно использовать чанковые техники и получать на экране больше 16 цветов (аналогично 53C). Как это сделать, можно подглядеть в заставке для игры NEXTipede. Там была использована следующая мультиколорная сетка:

Пример новой (для Спектрума) сеточной раскраски на размышление:

Согласитесь, смотрится непривычно?
Форматы мультиколора
Формат — не просто размер и вес.
Жёлтый экран орёт про тоску.
Белый молчит, как застывший отвес.
Красный подносит дуло к виску.
Далее под мультиколором будет пониматься вывод двух (из 16) цветов для отдельных строк или частей знакоместа (8×2, 8×4). Под гигаскрином будет пониматься циклическое переключение двух экранов, позволяющее смешивать цвета на этих экранах и увеличивающее число видимых цветов до 102 (за счёт инертности зрения). Под мультигигаскрином следует понимать использование обеих техник для получения изображения на экране.

Для работы с аппаратным мультиколором нас интересует только один формат изображения — SCR (12288 байт), т. к. он не требует преобразования. Файл этого формата содержит 6144 байта монохромного изображения и 6144 байта расширенных атрибутов. Байты обеих частей имеют нелинейную раскладку, соответствующую строению экрана ZX Spectrum. Размер фиксированный — 12288 байт. См. примеры формата.
Но за годы использования как аппаратного, так и программного мультиколора было создано огромное количество превосходной графики в разных форматах, и было бы нелогично не использовать это наследие.

MLT — формат видеорежима 2
(Mode 2) от компьютера SAM Coupé. Файлы этого формата содержат 6144 байта монохромного изображения (нелинейная раскладка) и 6144 байта расширенных атрибутов, хранящихся последовательно. Они легко конвертируются: достаточно загрузить их в ZX Paintbrush и экспортировать оттуда в SCR.
Размер фиксированный — 12288 байт. См. примеры формата.
MC — формат линейного мультиколора. Как и SCR с MLT, он содержит 6144 байта монохромного изображения и 6144 байта расширенных атрибутов. Но байты обеих частей имеют линейную раскладку, что неудобно для их вывода на экран. Встречается крайне редко. Размер фиксированный — 12288 байт. Конвертер DaDither умеет загружать и выгружать в этот формат.

SS4, SSX – формат видеорежима 4
(Mode 4) от компьютера SAM Coupé. Картинки в этом формате имеют разрешение 256×192, 4 бита на пиксель (16 цветов) при палитре в 128 цветов, а все байты изображения хранятся линейно.
Интересен он главным образом разрешением «как на ZX Spectrum» и возможностью конвертации в формат MLT через конвертер DaDither.
Потери при этом, могут быть, невелики или приемлемы. Размер нефиксированный. В некомпрессированном виде часто занимает 24617 байт. На SAM Coupé принято хранить графику в этом формате даже в случаях когда изначально она была создана в Mode 2 (а затем компрессировать). См. примеры формата.
До наступления в 2017–18 гг. эпохи полноэкранного программного мультиколора на Спектруме огромной популярностью у отечественной демосцены пользовался графический редактор multiArtist от TmK и riskej. Он служит для создания графики в режиме «мультигигаскрин» (совмещение мультиколора с гигаскрином). Эта графика может быть (ограниченно, не любая картинка) конвертирована.

MG1 — мультигигаскрин 8×1.
Ограничен разрешением 128×192 (16×24 знакоместа).
Конвертируется в DaDither.
После конвертации в мультиколор выглядит почти адекватно.
Доводка затруднительна.
Размер фиксированный — 19456 байт. См. примеры формата.

MG2 – полноэкранный мультигигаскрин 8×2.
Конвертируется в DaDither.
Обычно требует ручной доводки для восстановления детализации.
Размер фиксированный — 18688 байт. См. примеры формата.

MG4 – полноэкранный мультигигаскрин 8×4.
Конвертируется в DaDither.
Обычно возможно подобрать режим, в котором доводка картинки в мультиколоре будет проста, понятна и касаться в основном яркостей.
Размер фиксированный — 15616 байт. См. примеры формата.
Про адекватную конвертацию в мультиколор форматов обычного гигаскрина (IMG, GSC, ICE), триколора (3), мультигигаскрина (MGS), стеллар (STL) и других форматов, в которых преобладают цвета, полученные смешением 16 цветов Спектрума, лучше забыть. Результат гарантированно не будет удовлетворительным.
Выше мы рассмотрели только те форматы, которые имеют некоторое сродство с мультиколором, позволяющее им выгодно смотреться или быть конвертированными для режима аппаратного мультиколора.
Шаблон для вывода
А не учи ты нас рисовать!
Мы и сами умеем выверты...
После того как картинка была нарисована/конвертирована, её надо вывести на экран. Предлагаю простейшую выводилку с монозагрузчиком. Для компиляции в SJASMplus необходимо в директории с текстовым файлом программы hw-mult.asm создать директорию inc и положить в неё BasicLib.asm, а также директорию res с картинкой (например, nextipede.C). После компиляции (sjasmplus.exe hw-mult.asm) вы получите два файла: hw-mult.tap и hw-mult.trd, которые можно приложить к релизу на фестивале/демопати, чтобы его организаторы смогли показать эту картинку запуском на реальном железе.
; hw-mult.asm device ZXSPECTRUM48 ; monoloader MODULE boot INCLUDE inc/BasicLib.asm diskbasic db #00,#01 ; строка 01 dw line1end - line1 line1 db #EA ; REM ld de,(#5CF4) ld bc,#3005 ; NN05, где NN=30 - длина в секторах ld hl,scrstart ; картинка 12288 байт call #3D13 ld de,(#5CF4) ld bc,#0105 ; NN05, где NN=01 - длина в секторах ld hl,ldstart ; код демонстрации 59 байт call #3D13 jp ldstart ; запуск кода line1end LINE : db clear,val,'"48000"',':',rand,usr,val,'"23872"',':',new : LEND diskbasend tapebasic LINE : db clear,val,'"48000"',':',load,'""',code : LEND LINE : db load,'""',code,':',rand,usr,val,'"48896"',':',new : LEND tapebasend ENDMODULE org #C000 ; 49152 scrstart INCBIN res/nextipede.C scrend org #BF00 ; 48896 ldstart xor a out (#FE),a ld (23624),a ; BORDCR, цвет бордюра ld hl, #C000 ; переброска изображения ld de, #4000 ld bc, #1800 ; 6144 ldir ld hl, #C000+6144 ; переброска расширенных аттрибутов ld de, #6000 ld bc, #1800 ; 6144 ldir in a,(#FF) or 2 out (#ff), A ; Включаем мультиколор Timex ld a, 32 ld bc, #EFF7 out (c), a ; Включаем мультиколор ZX Evolution space ld a, #7F in a, (#FE) bit 0, a ; если нажали Space, то jr nz, space ; выходим xor a out (#ff), a ; Выключаем мультиколор Timex ld bc, #EFF7 out (c), a ; Выключаем мультиколор ZX Evolution ret ldend display "-------- HW.Mult$ ----------" display "START-END: ",/d,scrstart," (",/h,scrstart,") - ",/d,scrend," (",/h,scrend,")" display "LENGTH: ",/d,scrend-scrstart," (",/h,scrend-scrstart,")" display "-------- Multiview ---------" display "START-END: ",/d,ldstart," (",/h,ldstart,") - ",/d,ldend," (",/h,ldend,")" display "LENGTH: ",/d,ldend-ldstart," (",/h,ldend-ldstart,")" display "----------------------------" define fn_disk "hw-mult.trd" emptytrd fn_disk savetrd fn_disk, |"HW.Mults.B", boot.diskbasic, boot.diskbasend - boot.diskbasic savetrd fn_disk, |"HW.Mult$.C", scrstart, scrend-scrstart savetrd fn_disk, |"Multview.C", ldstart , ldend-ldstart define fn_tape "hw-mult.tap" emptytap fn_tape savetap fn_tape , BASIC, "HW.Mults" , boot.tapebasic , boot.tapebasend - boot.tapebasic, 10 savetap fn_tape , CODE, "HW.Mults$" , scrstart , scrend-scrstart savetap fn_tape , CODE, "Multiview" , ldstart , ldend-ldstart
Продолжение следует