poke
запись байта в память
poke (addr, val
)
Параметры:addr
- любой адрес из пространства 64Kb памяти, в который Вам нужно записать значение байтаval
- значение которое нужно записать
Описание:
Эта функция позволяет записывать значения в память TIC - байт.
Адрес указывается в шестнадцатеричном формате, но возвращаемое значение в десятичном.
Пример:
Запустить или скачать картридж примера.
-- title: poke demo
-- author: Al Rado
-- desc: Set sprite from text to sprite sheet
-- script: lua
-- input: gamepad
-- количество полубайт(nibble) в спрайте
NIBBLES_IN_SPR=8*8
-- количество байт в спрайте
BYTES_IN_SPR=NIBBLES_IN_SPR/2
-- адрес спрайт-листа в памяти
SPR_SHEET_ADDR=0x4000
-- индекс спрайта в спрайт-листе
sprIx=5
-- данные спрайта в шестнадцатеричном виде, каждый символ соответствует полубайту - индексу цвета(0-f)
-- можно получить, просто скопировав в буфер обмена в редакторе спрайтов
sprDataHex="a000000aa0f00f0aaaaaaaaaaafaaa6aafffaaaaaafaa6aaaaaaaaaa33333333"
cls()
for i=1,BYTES_IN_SPR do
byteStr=sprDataHex:sub(i*2-1,i*2):reverse()
byte=tonumber(byteStr,16)
poke(SPR_SHEET_ADDR+(BYTES_IN_SPR*sprIx)+i-1,byte)
end
print("See sprite sheet, index = "..sprIx)
function TIC() end
Пример 2:
Запустить или скачать картридж примера.
-- title: poke demo
-- author: Filippo
-- desc:
-- script: lua
-- input: gamepad
l1=49
w1=18
l2=21
w2=12
function TIC()
--Video noise
for i=0,(240*136)/2-1 do
poke(0x0000+i,(i*i*time())/3000000000%2+1)
end
--Sounds
if btnp(0,3,3)then l1=l1-1 end
if btnp(1,3,3)then l1=l1+1 end
if btnp(2,3,3)then w1=w1-1 end
if btnp(3,3,3)then w1=w1+1 end
l1=l1<136 and l1 or 135
l1=l1>0 and l1 or 0
w1=w1<120 and w1 or 112
w1=w1>2 and w1 or 2
if btnp(8,3,3)then l2=l2-1 end
if btnp(9,3,3)then l2=l2+1 end
if btnp(10,3,3)then w2=w2-1 end
if btnp(11,3,3)then w2=w2+1 end
l2=l2<136 and l2 or 135
l2=l2>0 and l2 or 0
w2=w2<120 and w2 or 112
w2=w2>2 and w2 or 2
--S1
off1=l1*120
m=0
for i=60-w1/2,60+w1/2 do
m=m+peek(0x0000+off1+i)
end
f=(10+((1+m)/w1))*800
f=math.floor(f)
print(l1..'-'..w1..'-'..f,0,0)
poke(0xFF80+0,f&0XFF)
poke(0xFF80+2,(f&0XFF00)>>8)
--Draw line
for i=60-w1/2,60+w1/2 do
poke(0x0000+off1+i,136)
end
--S2
off2=l2*120
m=0
for i=60-w2/2,60+w2/2 do
m=m+peek(0x0000+off2+i)
end
f=(10+((1+m)/w2))*800
f=math.floor(f)
print(l2..'-'..w2..'-'..f,0,10)
poke(0xFF80+8,f&0XFF)
poke(0xFF80+10,(f&0XFF00)>>8)
--Draw line
for i=60-w2/2,60+w2/2 do
poke(0x0000+off2+i,102)
end
end
Запустить или скачать картридж примера.
-- title: poke demo
-- author: Al Rado
-- desc: Set sprite from text to sprite sheet
-- script: moon
-- input: gamepad
-- количество полубайт(nibble) в спрайте
NIBBLES_IN_SPR=8*8
-- количество байт в спрайте
BYTES_IN_SPR=NIBBLES_IN_SPR/2
-- адрес спрайт-листа в памяти
SPR_SHEET_ADDR=0x4000
-- индекс спрайта в спрайт-листе
sprIx=5
-- данные спрайта в шестнадцатеричном виде, каждый символ соответствует полубайту - индексу цвета(0-f)
-- можно получить, просто скопировав в буфер обмена в редакторе спрайтов
sprDataHex="a000000aa0f00f0aaaaaaaaaaafaaa6aafffaaaaaafaa6aaaaaaaaaa33333333"
cls()
for i=1,BYTES_IN_SPR
byteStr=sprDataHex\sub(i*2-1,i*2)\reverse()
byte=tonumber(byteStr,16)
poke(SPR_SHEET_ADDR+(BYTES_IN_SPR*sprIx)+i-1,byte)
print("See sprite sheet, index = "..sprIx)
export TIC=->
Пример 2:
Запустить или скачать картридж примера.
-- title: poke demo
-- author: Filippo
-- desc:
-- script: moon
-- input: gamepad
l1=49
w1=18
l2=21
w2=12
export TIC=->
--Video noise
for i=0,(240*136)/2-1
poke(0x0000+i,(i*i*time())/3000000000%2+1)
--Sounds
if btnp(0,3,3) then l1=l1-1
if btnp(1,3,3) then l1=l1+1
if btnp(2,3,3) then w1=w1-1
if btnp(3,3,3) then w1=w1+1
l1=l1<136 and l1 or 135
l1=l1>0 and l1 or 0
w1=w1<120 and w1 or 112
w1=w1>2 and w1 or 2
if btnp(8,3,3)then l2=l2-1
if btnp(9,3,3)then l2=l2+1
if btnp(10,3,3)then w2=w2-1
if btnp(11,3,3)then w2=w2+1
l2=l2<136 and l2 or 135
l2=l2>0 and l2 or 0
w2=w2<120 and w2 or 112
w2=w2>2 and w2 or 2
--S1
off1=l1*120
m=0
for i=60-w1/2,60+w1/2
m=m+peek(0x0000+off1+i)
f=(10+((1+m)/w1))*800
f=math.floor(f)
print l1..'-'..w1..'-'..f,0,0
poke 0xFF80+0,f&0xFF
poke 0xFF80+2,(f&0xFF00)>>8
--Draw line
for i=60-w1/2,60+w1/2
poke 0x0000+off1+i,136
--S2
off2=l2*120
m=0
for i=60-w2/2,60+w2/2
m=m+peek 0x0000+off2+i
f=(10+((1+m)/w2))*800
f=math.floor(f)
print l2..'-'..w2..'-'..f,0,10
poke 0xFF80+8,f&0xFF
poke 0xFF80+10,(f&0xFF00)>>8
--Draw line
for i=60-w2/2,60+w2/2
poke 0x0000+off2+i,102
// title: poke demo
// author: Al Rado
// desc: Set sprite from text to sprite sheet
// script: js
// input: gamepad
// количество полубайт(nibble) в спрайте
NIBBLES_IN_SPR = 8 * 8
// количество байт в спрайте
BYTES_IN_SPR = NIBBLES_IN_SPR / 2
// адрес спрайт-листа в памяти
SPR_SHEET_ADDR = 0x4000
// индекс спрайта в спрайт-листе
sprIx = 5
// данные спрайта в шестнадцатеричном виде, каждый символ соответствует полубайту - индексу цвета(0-f)
// можно получить, просто скопировав в буфер обмена в редакторе спрайтов
sprDataHex = "a000000aa0f00f0aaaaaaaaaaafaaa6aafffaaaaaafaa6aaaaaaaaaa33333333"
cls()
for (i = 0; i < BYTES_IN_SPR; i++) {
byteStr = "" + sprDataHex[i * 2 + 1] + sprDataHex[i * 2]
byte = parseInt(byteStr, 16)
poke(SPR_SHEET_ADDR + (BYTES_IN_SPR * sprIx) + i, byte)
}
sync()
print("See sprite sheet, index = " + sprIx)
function TIC() { }
Пример 2:
// title: poke demo
// author: Filippo
// desc:
// script: js
// input: gamepad
l1 = 49
w1 = 18
l2 = 21
w2 = 12
function TIC() {
//Video noise
for (i = 0; i < (240 * 136) / 2 - 1; i++) {
poke(0x0000 + i, (i * i * time()) / 3000000000 % 2 + 1)
}
//Sounds
if (btnp(0, 3, 3)) { l1 = l1 - 1 }
if (btnp(1, 3, 3)) { l1 = l1 + 1 }
if (btnp(2, 3, 3)) { w1 = w1 - 1 }
if (btnp(3, 3, 3)) { w1 = w1 + 1 }
l1 = l1 < 136 ? l1 : 135
l1 = l1 > 0 ? l1 : 0
w1 = w1 < 120 ? w1 : 112
w1 = w1 > 2 ? w1 : 2
if (btnp(8, 3, 3)) { l2 = l2 - 1 }
if (btnp(9, 3, 3)) { l2 = l2 + 1 }
if (btnp(10, 3, 3)) { w2 = w2 - 1 }
if (btnp(11, 3, 3)) { w2 = w2 + 1 }
l2 = l2 < 136 ? l2 : 135
l2 = l2 > 0 ? l2 : 0
w2 = w2 < 120 ? w2 : 112
w2 = w2 > 2 ? w2 : 2
//S1
off1 = l1 * 120
m = 0
for (i = 60 - w1 / 2; i < 60 + w1 / 2; i++) {
m = m + peek(0x0000 + off1 + i)
}
f = (10 + ((1 + m) / w1)) * 800
f = Math.floor(f)
print(l1 + '-' + w1 + '-' + f, 0, 0)
poke(0xFF80 + 0, f & 0XFF)
poke(0xFF80 + 2, (f & 0XFF00) >> 8)
//Draw line
for (i = 60 - w1 / 2; i < 60 + w1 / 2; i++) {
poke(0x0000 + off1 + i, 136)
}
//S2
off2 = l2 * 120
m = 0
for (i = 60 - w2 / 2; i < 60 + w2 / 2; i++) {
m = m + peek(0x0000 + off2 + i)
}
f = (10 + ((1 + m) / w2)) * 800
f = Math.floor(f)
print(l2 + '-' + w2 + '-' + f, 0, 10)
poke(0xFF80 + 8, f & 0XFF)
poke(0xFF80 + 10, (f & 0XFF00) >> 8)
//Draw line
for (i = 60 - w2 / 2; i < 60 + w2 / 2; i++) {
poke(0x0000 + off2 + i, 102)
}
}