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) // установить значение пикселя
}

results matching ""

    No results matching ""