poke4
запись полубайта в память
poke4 (addr, val
)
Параметры:addr
- любой адрес из пространства 64Kb памяти, в который Вам нужно записать значение полубайта(4 бита)val
- значение которое нужно записать
Описание:
Эта функция позволяет записывать значения в память TIC - полубайт.
С её помощью можно, например, записывать значения пикселей в спрайты спрайт-листа.
Адрес указывается в шестнадцатеричном формате, значение в десятичном.
Стоит также отметить, что peek4 и poke4 оперируют полубайтами (4 бита), поэтому адрес умножается на два по отношению к обычным peek и poke, которые оперируют байтами (8 бит).
+----------+----------+----------+----------+
| 4bit | 4bit | 4bit | 4bit |
+----------+----------+----------+----------|
| 8bit | 8bit |
+---------------------+---------------------+
Пример:
Запустить или скачать картридж примера.
-- title: poke4 demo
-- author: Al Rado
-- desc: Set sprite from text to sprite sheet
-- script: lua
-- input: gamepad
-- количество полубайт(nibble) в спрайте
NIBBLES_IN_SPR=8*8
-- адрес спрайт-листа в памяти, умножаю на два т.к. использую полубайты, а не байты
SPR_SHEET_ADDR=0x4000*2
-- индекс спрайта в спрайт-листе
sprIx=5
-- данные спрайта в шестнадцатеричном виде, каждый символ соответствует полубайту - индексу цвета(0-f)
-- можно получить, просто скопировав в буфер обмена в редакторе спрайтов
sprDataHex="a000000aa0f00f0aaaaaaaaaaafaaa6aafffaaaaaafaa6aaaaaaaaaa33333333"
cls()
for i=1,NIBBLES_IN_SPR do
nibble=tonumber(sprDataHex:sub(i,i),16)
poke4(SPR_SHEET_ADDR+(NIBBLES_IN_SPR*sprIx)+i-1,nibble)
end
sync()
print("See sprite sheet, index = "..sprIx)
function TIC() end
Пример 2:
-- script: lua
-- устанавливает значение пикселя в спрайт-листе
function sset(x,y,c)
local addr=0x4000+(x//8+y//8*16)*32 -- получить адрес спрайта
poke4(addr*2+x%8+y%8*8,c) -- установить значение пикселя
end
-- тут Ваш код
Запустить или скачать картридж примера.
-- title: poke4 demo
-- author: Al Rado
-- desc: Set sprite from text to sprite sheet
-- script: moon
-- input: gamepad
-- количество полубайт(nibble) в спрайте
NIBBLES_IN_SPR=8*8
-- адрес спрайт-листа в памяти, умножаю на два т.к. использую полубайты, а не байты
SPR_SHEET_ADDR=0x4000*2
-- индекс спрайта в спрайт-листе
sprIx=5
-- данные спрайта в шестнадцатеричном виде, каждый символ соответствует полубайту - индексу цвета(0-f)
-- можно получить, просто скопировав в буфер обмена в редакторе спрайтов
sprDataHex="a000000aa0f00f0aaaaaaaaaaafaaa6aafffaaaaaafaa6aaaaaaaaaa33333333"
cls()
for i=1,NIBBLES_IN_SPR
nibble=tonumber(sprDataHex\sub(i,i),16)
poke4(SPR_SHEET_ADDR+(NIBBLES_IN_SPR*sprIx)+i-1,nibble)
sync()
print("See sprite sheet, index = "..sprIx)
export TIC=->
Пример 2:
-- script: moon
-- устанавливает значение пикселя в спрайт-листе
export sset=(x,y,c)->
addr=0x4000+(x//8+y//8*16)*32 -- получить адрес спрайта
poke4(addr*2+x%8+y%8*8,c) -- установить значение пикселя
-- тут Ваш код
// title: poke4 demo
// author: Al Rado
// desc: Set sprite from text to sprite sheet
// script: js
// input: gamepad
// количество полубайт(nibble) в спрайте
NIBBLES_IN_SPR = 8 * 8
// адрес спрайт-листа в памяти, умножаю на два т.к. использую полубайты, а не байты
SPR_SHEET_ADDR = 0x4000 * 2
// индекс спрайта в спрайт-листе
sprIx = 5
// данные спрайта в шестнадцатеричном виде, каждый символ соответствует полубайту - индексу цвета(0-f)
// можно получить, просто скопировав в буфер обмена в редакторе спрайтов
sprDataHex = "a000000aa0f00f0aaaaaaaaaaafaaa6aafffaaaaaafaa6aaaaaaaaaa33333333"
cls()
for (i = 0; i < NIBBLES_IN_SPR; i++) {
nibble = parseInt(sprDataHex[i], 16)
poke4(SPR_SHEET_ADDR + (NIBBLES_IN_SPR * sprIx) + i, nibble)
}
sync()
print("See sprite sheet, index = " + sprIx)
function TIC() { }
Пример 2:
// script: js
// устанавливает значение пикселя в спрайт-листе
function sset(x, y, c) {
var addr = 0x4000 + (x / 8 + y / 8 * 16) * 32 // получить адрес спрайта
poke4(addr * 2 + x % 8 + y % 8 * 8, c) // установить значение пикселя
}