Полное руководство по аппаратному мультиколору.
Создание графики, форматы, вывод на экран
Создание графики
Сложное — это не горы деталей,
а свет, что положен туда, где темно.
Глаз различает цвета в перспективе, —
компьютер выводит лишь плоское дно.
Создание графики для режима Hi-Color — ключевой вопрос. Сегодня единственным способом сделать это удобно является редактор ZX-Paintbrush 2.6.4 для Windows. Он был специально доработан в 2017 году для использования режимов Hi-Color и (на закуску) ULA+. Поэтому если вы видели ранние версии, то приготовьтесь к тому, что в старших версиях это совсем другая программа. Аналогов не имеет.
Для переключения в Hi-Color используйте кнопку с буквами «S/T»
![]() |
![]() |
Форматы мультиколора
Формат — не просто размер и вес.
Жёлтый экран орёт про тоску.
Белый молчит, как застывший отвес.
Красный подносит дуло к виску.
Далее под мультиколором будет пониматься вывод двух (из 16) цветов для отдельных строк или частей знакоместа (8×2, 8×4). Под гигаскрином будет пониматься циклическое переключение двух экранов, позволяющее смешивать цвета на этих экранах и увеличивающее число видимых цветов до 102 (за счёт инертности зрения). Под мультигигаскрином следует понимать использование обеих техник для получения изображения на экране.Но за годы использования как аппаратного, так и программного мультиколора было создано огромное количество превосходной графики в разных форматах, и было бы нелогично не использовать это наследие.
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.До наступления в 2017–18 гг. эпохи полноэкранного программного мультиколора на Спектруме огромной популярностью у отечественной демосцены пользовался графический редактор multiArtist от TmK и riskej. Он служит для создания графики в режиме «мультигигаскрин» (совмещение мультиколора с гигаскрином). Эта графика может быть (ограниченно, не любая картинка) конвертирована.
MG1 - мультигигаскрин 8×1. Ограничен разрешением 128×192 (16×24 знакоместа). Конвертируется в DaDither. После конвертации в мультиколор выглядит почти адекватно. Доводка затруднительна. Размер фиксированный — 19456 байт. См. примеры формата.
MG2 – полноэкранный мультигигаскрин 8×2. Конвертируется в DaDither. Обычно требует ручной доводки для восстановления детализации. Размер фиксированный — 18688 байт. См. примеры формата.

Про адекватную конвертацию в мультиколор форматов обычного гигаскрина (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
Продолжение следует





Комментариев нет:
Отправить комментарий