|
|
Строка 1: |
Строка 1: |
| + | __NOTOC__ |
| {{Основная статья|Sega Master System|Текст=Информация о Master System}} | | {{Основная статья|Sega Master System|Текст=Информация о Master System}} |
| {{Основная статья|Портал:Pixel Art|Текст=Портал:Pixel Art}} | | {{Основная статья|Портал:Pixel Art|Текст=Портал:Pixel Art}} |
Разрешение: 256х192, 256х224 или 256х240 в зависимости от настроек
Палитра:
Файл:SMS palitra.png
Графическая система тайловая, т.е. данные изображения хранятся в виде плиток 8х8. В видеопамяти может храниться 488 плиток. На фон можно использовать все 488 плиток. Плитки фона можно отзеркаливать.
Платформа имеет аппаратные спрайты: 64 штуки размером 8х8 или 8х16, не более 8 спрайтов на строке. Спрайты могут браться из первых 256 тайлов или последующих.
Из палитры одновременно на экране может быть использовано 16 цветов для фона и 15 цветов (не считая прозрачного) для спрайтов. В каждом тайле можно использовать 16 цветов из набранной палитры.
Обход ограничений
- Используя прерывания, возможно менять палитру каждые две строки
- Переключение графических банков в нужный момент отрисовки изображения позволяет задействовать уникальные тайлы на всей площади картины, однако возможное количество одновременных цветов будет уменьшено
Примеры работ
Инструкции и исходники
Простая картинка
Скачиваем этот архив со всем необходимым.
Нажатие на "Convertimage&Compile.bat" сконвертирует и скомпилирует файл картинки.
Файл картинки должен иметь разрешение 256х192 и цветовую глубину 16 цветов.
Можно нарисовать изображение разрешением 256х224, тогда для этого в файле "source.asm" потребуется найти строчку:
printBackgroundTiles:
ld hl, $3800
call prepareVram
ld hl,backgroundTilemap
ld bc,backgroundTilemapEnd-backgroundTilemap
call writeToVram
и поменять 3800 на 3700.
Далее нужно найти
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
и поменять 11000000 на 11010000.
Простая картинка со спрайтами
Скачиваем этот архив со всем необходимым.
"ConvertBackground.bat" сконвертирует файл "image.bmp" в данные фона.
"ConvertSprites.bat" сконвертирует "sprites.bmp" в данные спрайтов.
"Compile.bat" скомпилирует все данные в ром.
Файлы фона и спрайтов должны иметь цветовую глубину 16 цветов. Файл фона должен иметь разрешение 256х192.
Можно нарисовать изображение разрешением 256х224, тогда для этого в файле "source.asm" потребуется найти строчку:
printBackgroundTiles:
ld hl, $3800
call prepareVram
ld hl,backgroundTilemap
ld bc,backgroundTilemapEnd-backgroundTilemap
call writeToVram
и поменять 3800 на 3700.
Далее нужно найти
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
и поменять 11000000 на 11010000.
Расположение спрайтов на экране осуществляется путём редактирования файла "source.asm" на этих строчках:
Номера тайлов спрайтов берутся по порядку в файле "sprites.bmp".
Возможно изменить размер спрайта до 8х16. Для этого ищем строчку:
turnOnScreen:
ld a,%11000000
и меняет предпоследний 0 на 1. Тогда нижняя часть спрайта будет браться из следующей после указанной плитки.
Если изображение занимает более 256 плиток, то запустив скомпилированный ром, мы увидим, что вместо некоторых фоновых плиток находятся спрайтовые. Чтобы это исправить, нам нужно записать плитки спрайтов по другому адресу.
Открываем скомпилированный ром в эмуляторе Meka и смотрим тайловые карту и набор.
К свободному адресу нужно прибавить $4000, а затем ввести значение сюда:
Отсчёт спрайтовых тайлов в любом случае начинается с 256-го, поэтому в соответствующую строчку нужно внести соответствующее изменение. В случае примера тайлы спрайтов будут иметь номера 37 и 38.
Ссылки