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)
  }

}

results matching ""

    No results matching ""