Забытый мультиколор (часть 2)

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

Для переключения в Hi-Color используйте кнопку с буквами «S/T»
Очень помогают в раскраске режимы Character Set Grid и Pixel Grid из меню View
![]() | ![]() |
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
Продолжение следует



0 комментариев