Pixelrat (обсуждение | вклад) |
Pixelrat (обсуждение | вклад) |
||
(не показано 25 промежуточных версий этого же участника) | |||
Строка 1: | Строка 1: | ||
− | {{Основная статья|Sega Master System}} | + | <div style="float:right;">__TOC__</div> |
+ | {{Основная статья|Sega Master System|Текст=Информация о Master System}} | ||
+ | {{Основная статья|Pixel Art|Текст=Портал:Pixel Art}} | ||
− | Разрешение: 256х192, 256х224 или 256х240 в зависимости от настроек | + | Разрешение: 256х192, 256х224 или {{Подсказка|256х240|только для PAL}} в зависимости от настроек |
Палитра:<br/> | Палитра:<br/> | ||
− | [[Файл: | + | [[Файл:R2-G2-B2.png]]<br/> |
− | Графическая система тайловая, т.е. данные изображения хранятся в виде плиток 8х8 | + | Графическая система тайловая, т.е. данные изображения хранятся в виде плиток 8х8. В видеопамяти может храниться 488 плиток. На фон можно использовать все 488 плиток. Плитки фона можно отзеркаливать. |
Платформа имеет аппаратные спрайты: 64 штуки размером 8х8 или 8х16, не более 8 спрайтов на строке. Спрайты могут браться из первых 256 тайлов или последующих. | Платформа имеет аппаратные спрайты: 64 штуки размером 8х8 или 8х16, не более 8 спрайтов на строке. Спрайты могут браться из первых 256 тайлов или последующих. | ||
− | Из палитры одновременно на экране может быть использовано 16 цветов для фона и 15 цветов для спрайтов. В каждом тайле можно использовать 16 цветов из набранной палитры. | + | Из палитры одновременно на экране может быть использовано 16 цветов для фона и 15 цветов (не считая прозрачного) для спрайтов. В каждом тайле можно использовать 16 цветов из набранной палитры. |
==Обход ограничений== | ==Обход ограничений== | ||
* Используя прерывания, возможно менять палитру каждые две строки | * Используя прерывания, возможно менять палитру каждые две строки | ||
+ | * Переключение графических банков в нужный момент отрисовки изображения позволяет задействовать уникальные тайлы на всей площади картины, однако возможное количество одновременных цветов будет уменьшено. | ||
+ | * Быстрое переключение двух изображений для визуального увеличения количества цветов (гигаскрин) возможно, но тайлы двух изображений должны делить один банк памяти из-за медленного VDP консоли. | ||
==Примеры работ== | ==Примеры работ== | ||
Строка 19: | Строка 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 | ||
</gallery> | </gallery> | ||
==Инструкции и исходники== | ==Инструкции и исходники== | ||
− | + | <spoiler text="Простая картинка"> | |
+ | Скачиваем [[:Файл:SMS-withoutsprites.zip|этот]] архив со всем необходимым. | ||
− | + | Нажатие на "Convertimage&Compile.bat" сконвертирует и скомпилирует файл картинки. | |
− | |||
− | |||
+ | Файл картинки должен иметь разрешение {{Подсказка|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 text="Простая картинка со спрайтами"> | ||
+ | Скачиваем [[:Файл: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> | ||
[[Категория:Графика]] | [[Категория:Графика]] |
Текущая версия на 12:40, 25 февраля 2024
Разрешение: 256х192, 256х224 или 256х240 в зависимости от настроек
Графическая система тайловая, т.е. данные изображения хранятся в виде плиток 8х8. В видеопамяти может храниться 488 плиток. На фон можно использовать все 488 плиток. Плитки фона можно отзеркаливать.
Платформа имеет аппаратные спрайты: 64 штуки размером 8х8 или 8х16, не более 8 спрайтов на строке. Спрайты могут браться из первых 256 тайлов или последующих.
Из палитры одновременно на экране может быть использовано 16 цветов для фона и 15 цветов (не считая прозрачного) для спрайтов. В каждом тайле можно использовать 16 цветов из набранной палитры.
Обход ограничений
- Используя прерывания, возможно менять палитру каждые две строки
- Переключение графических банков в нужный момент отрисовки изображения позволяет задействовать уникальные тайлы на всей площади картины, однако возможное количество одновременных цветов будет уменьшено.
- Быстрое переключение двух изображений для визуального увеличения количества цветов (гигаскрин) возможно, но тайлы двух изображений должны делить один банк памяти из-за медленного VDP консоли.