пятница, 29 мая 2026 г.

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

Примеры мультиколорных иллюстраций Полное руководство по аппаратному мультиколору. 

Создание графики, форматы, вывод на экран




Создание графики

Сложное — это не горы деталей,

а свет, что положен туда, где темно.

Глаз различает цвета в перспективе, 

компьютер выводит лишь плоское дно.

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

Даже если художник предпочитает другие редакторы, ZX-Paintbrush потребуется как универсальный конвертор: может конвертировать из BPM, PNG и т. д. в формат SCR (и обратно), а также конвертировать обычный SCR в форматы с расширенными атрибутами (SCR и MLT).

Кнопка переключения режимов Timex/Spectrum

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





 Очень помогают в раскраске режимы Character Set Grid и Pixel Grid из меню View

Character Set Grid Pixel Grid в ZX-Paintbrush

ZX-Paintbrush позволяет выделять и переносить области по пикселям и атрибутам с предпросмотром на новом месте. Можно копировать изображение с атрибутами или без. Механизм переноса фрагментов — как в Deluxe Paint и Personal Paint на Амиге. Фрагменты сохраняются в формате ZXS для создания коллекций и быстрой сборки картинок. Проблемы при создании мультиколорной графики носят нетехнический характер.

Художникам на Spectrum привычнее рисовать сначала в атрибутном режиме, а затем доводить изображение в мультиколоре. При вертикальном увеличении цветового разрешения они не знают, как это использовать, и не могут адекватно спланировать картинку, так как цветовое разрешение по горизонтали осталось прежним, — нужен отдельный, ещё не наработанный навык. Проще действовать поэтапно, что увеличивает время работы над графикой.

При известном навыке «клэшинг» может быть сведён «к нулю» там, где раньше было «ничего не сделать». Надо максимально использовать тот факт, что по вертикали мы имеем «цвет на точку», что позволяет делать эффектные пересечения. Можно рисовать разноцветные ступенчатые диагонали.

В то же время, если раньше художник оперировал цветами в 768 атрибутных квадратах, то теперь ему это надо делать для 6144 атрибутных рядов, что в 8 раз больше. Графика Hi-Color требует опоры на изображение, отрисованное в обычных атрибутах, и опыта — как собственного (который надо наработать), так и других художников. Можно порекомендовать ознакомиться с работами художника Шеврон, начиная с «High Colour».

Для получения уникальной графики можно использовать чанковые техники и получать на экране больше 16 цветов (аналогично 53C). Как это сделать, можно подглядеть в заставке для игры NEXTipede. Там была использована следующая мультиколорная сетка:

Мультиколорная сетка 

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

Hype в мультиколорной сетке 

Согласитесь, смотрится непривычно?

Форматы мультиколора

Формат — не просто размер и вес.

Жёлтый экран орёт про тоску.

Белый молчит, как застывший отвес.

Красный подносит дуло к виску.

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

SCR - Yoyo Bear  от Piesiu (2014)

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

Но за годы использования как аппаратного, так и программного мультиколора было создано огромное количество превосходной графики в разных форматах, и было бы нелогично не использовать это наследие.

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

MC - формат линейного мультиколора. Как и SCR с MLT, он содержит 6144 байта монохромного изображения и 6144 байта расширенных атрибутов. Но байты обеих частей имеют линейную раскладку, что неудобно для их вывода на экран. Встречается крайне редко. Размер фиксированный — 12288 байт. Конвертер DaDither умеет загружать и выгружать в этот формат.


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






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







MG4 конвертированный в SCR без доработки
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 
  
Продолжение следует

Комментариев нет:

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