Материал из Chipwiki
Перейти к: навигация, поиск
Master System/Pixel Art — различия между версиями
(не показано 15 промежуточных версий этого же участника)
Строка 1: Строка 1:
 +
<div style="float:right;">__TOC__</div>
 
{{Основная статья|Sega Master System|Текст=Информация о Master System}}
 
{{Основная статья|Sega Master System|Текст=Информация о Master System}}
{{Основная статья|Портал:Графика|Текст=Портал:Графика}}
+
{{Основная статья|Pixel Art|Текст=Портал:Pixel Art}}
  
Разрешение: 256х192, 256х224 или 256х240 в зависимости от настроек
+
Разрешение: 256х192, 256х224 или {{Подсказка|256х240|только для PAL}} в зависимости от настроек
  
 
Палитра:<br/>
 
Палитра:<br/>
Строка 15: Строка 16:
 
==Обход ограничений==
 
==Обход ограничений==
 
* Используя прерывания, возможно менять палитру каждые две строки
 
* Используя прерывания, возможно менять палитру каждые две строки
* Переключение графических банков в нужный момент отрисовки изображения позволяет задействовать уникальные тайлы на всей площади картины, однако возможное количество одновременных цветов будет уменьшено
+
* Переключение графических банков в нужный момент отрисовки изображения позволяет задействовать уникальные тайлы на всей площади картины, однако возможное количество одновременных цветов будет уменьшено.
 +
* Быстрое переключение двух изображений для визуального увеличения количества цветов (гигаскрин) возможно, но тайлы двух изображений должны делить один банк памяти из-за медленного VDP консоли.
  
 
==Примеры работ==
 
==Примеры работ==
Строка 21: Строка 23:
 
File:Back to the Arcade by illm.png
 
File:Back to the Arcade by illm.png
 
File:Bustin makes me feel good by Bob.png
 
File:Bustin makes me feel good by Bob.png
 +
File:a~y by pixelrat.png
 +
File:bad boy by pixelrat.png
 
</gallery>
 
</gallery>
  
 
==Инструкции и исходники==
 
==Инструкции и исходники==
 
<spoiler text="Простая картинка">
 
<spoiler text="Простая картинка">
Скачиваем [[Файл:SMS-withoutsprites.zip|этот]] архив со всем необходимым.
+
Скачиваем [[:Файл:SMS-withoutsprites.zip|этот]] архив со всем необходимым.
  
 
Нажатие на "Convertimage&Compile.bat" сконвертирует и скомпилирует файл картинки.
 
Нажатие на "Convertimage&Compile.bat" сконвертирует и скомпилирует файл картинки.
  
 
Файл картинки должен иметь разрешение {{Подсказка|256х192|Можно и 256х240, но отображаться будет только верхняя часть}} и цветовую глубину 16 цветов.
 
Файл картинки должен иметь разрешение {{Подсказка|256х192|Можно и 256х240, но отображаться будет только верхняя часть}} и цветовую глубину 16 цветов.
 +
 +
Можно нарисовать изображение разрешением 256х224, тогда для этого в файле "source.asm" потребуется найти строчку:
 +
<pre>printBackgroundTiles:
 +
    ld hl, $3800
 +
    call prepareVram
 +
    ld hl,backgroundTilemap
 +
    ld bc,backgroundTilemapEnd-backgroundTilemap
 +
    call writeToVram
 +
</pre>
 +
и поменять 3800 на 3700.
 +
 +
Далее нужно найти
 +
<pre>turnOnScreen:
 +
    ld a,%11000000
 +
;          |||| |`- Zoomed sprites -> 16x16 pixels
 +
;          |||| `-- Doubled sprites -> 2 tiles per sprite, 8x16
 +
;          |||`---- 30 row/240 line mode
 +
;          ||`----- 28 row/224 line mode
 +
;          |`------ VBlank interrupts
 +
;          `------- Enable display
 +
</pre>
 +
и поменять 11000000 на 11010000.
 
</spoiler>
 
</spoiler>
 
<spoiler text="Простая картинка со спрайтами">
 
<spoiler text="Простая картинка со спрайтами">
Скачиваем [[Файл:SMS-withsprites.zip|этот]] архив со всем необходимым.
+
Скачиваем [[:Файл:SMS-withsprites.zip|этот]] архив со всем необходимым.
 +
 
 +
"ConvertBackground.bat" сконвертирует файл "image.bmp" в данные фона.<br/>
 +
"ConvertSprites.bat" сконвертирует "sprites.bmp" в данные спрайтов.<br/>
 +
"Compile.bat" скомпилирует все данные в ром.
 +
 
 +
Файлы фона и спрайтов должны иметь цветовую глубину 16 цветов. Файл фона должен иметь разрешение {{Подсказка|256х192|Можно и 256х240, но отображаться будет только верхняя часть}}.
 +
 
 +
Можно нарисовать изображение разрешением 256х224, тогда для этого в файле "source.asm" потребуется найти строчку:
 +
<pre>printBackgroundTiles:
 +
    ld hl, $3800
 +
    call prepareVram
 +
    ld hl,backgroundTilemap
 +
    ld bc,backgroundTilemapEnd-backgroundTilemap
 +
    call writeToVram
 +
</pre>
 +
и поменять 3800 на 3700.
 +
 
 +
Далее нужно найти
 +
<pre>turnOnScreen:
 +
    ld a,%11000000
 +
;          |||| |`- Zoomed sprites -> 16x16 pixels
 +
;          |||| `-- Doubled sprites -> 2 tiles per sprite, 8x16
 +
;          |||`---- 30 row/240 line mode
 +
;          ||`----- 28 row/224 line mode
 +
;          |`------ VBlank interrupts
 +
;          `------- Enable display
 +
</pre>
 +
и поменять 11000000 на 11010000.
 +
 
 +
Расположение спрайтов на экране осуществляется путём редактирования файла "source.asm" на этих строчках:
 +
 
 +
[[File:SMS-spritemanual1.png|200px]]
 +
 
 +
[[File:SMS-spritemanual2.png|200px]]
 +
 
 +
[[File:SMS-spritemanual3.png|200px]]
 +
 
 +
Номера тайлов спрайтов берутся по порядку в файле "sprites.bmp".
 +
 
 +
Возможно изменить размер спрайта до 8х16. Для этого ищем строчку:
 +
<pre>turnOnScreen:
 +
    ld a,%11000000</pre>
 +
и меняет предпоследний 0 на 1. Тогда нижняя часть спрайта будет браться из следующей после указанной плитки.
 +
 
 +
Если изображение занимает более 256 плиток, то запустив скомпилированный ром, мы увидим, что вместо некоторых фоновых плиток находятся спрайтовые. Чтобы это исправить, нам нужно записать плитки спрайтов по другому адресу.
 +
 
 +
Открываем скомпилированный ром в [https://github.com/ocornut/meka/releases эмуляторе Meka] и смотрим тайловые карту и набор.
 +
 
 +
[[File:SMS-spritemanual4.png|600px]]
 +
 
 +
К свободному адресу нужно прибавить $4000, а затем ввести значение сюда:
 +
 
 +
[[File:SMS-spritemanual5.png|200px]]
  
...
+
Отсчёт спрайтовых тайлов в любом случае начинается с 256-го, поэтому в соответствующую строчку нужно внести соответствующее изменение. В случае примера тайлы спрайтов будут иметь номера 37 и 38.
 
</spoiler>
 
</spoiler>
 
==Ссылки==
 
==Ссылки==

Версия 12:21, 5 января 2022

Разрешение: 256х192, 256х224 или 256х240 в зависимости от настроек

Палитра:
Файл:SMS palitra.png

Графическая система тайловая, т.е. данные изображения хранятся в виде плиток 8х8. В видеопамяти может храниться 488 плиток. На фон можно использовать все 488 плиток. Плитки фона можно отзеркаливать.

Платформа имеет аппаратные спрайты: 64 штуки размером 8х8 или 8х16, не более 8 спрайтов на строке. Спрайты могут браться из первых 256 тайлов или последующих.

Из палитры одновременно на экране может быть использовано 16 цветов для фона и 15 цветов (не считая прозрачного) для спрайтов. В каждом тайле можно использовать 16 цветов из набранной палитры.

Обход ограничений

  • Используя прерывания, возможно менять палитру каждые две строки
  • Переключение графических банков в нужный момент отрисовки изображения позволяет задействовать уникальные тайлы на всей площади картины, однако возможное количество одновременных цветов будет уменьшено.
  • Быстрое переключение двух изображений для визуального увеличения количества цветов (гигаскрин) возможно, но тайлы двух изображений должны делить один банк памяти из-за медленного VDP консоли.

Примеры работ

Инструкции и исходники

Простая картинка

Простая картинка со спрайтами

Ссылки