-- trying to write a sine wave to slot 0 and play it through SFX 8. sfx_memory = 0x3200 pi = 3.1416 sfx_id = 8 -- triggered by z key pitch = 24 custom_slot = 0 -- custom waveform location volume = 3 effect = 0 custom_bit = 0x8000 -- indicates there is a custom waveform -- write one step function poke_step(sfx_id, step, pitch, custom_slot, volume, effect, custom_bit) -- 0-5 pitch, 6-8 custom_slot, 9-11 volume, 12-14 effect, 15 custom_bit pitch = pitch & 0x3f custom_slot = custom_slot & 0x07 volume = volume & 0x07 effect = effect & 0x07 local value = 0 value = value | pitch value = value | (custom_slot << 6) value = value | (volume << 9) value = value | (effect << 12) value = value | custom_bit -- address of the step local addr = 0x3200 + sfx_id * 68 + step * 2 -- little-endian poke(addr, value & 0xff) poke(addr+1, (value >> 8) & 0xff) end function _init() -- write samples to custom waveform slot 0 for i = 0, 63 do local angle = (i / 64) * 2 * pi local sample = flr(128 + 127.5 * sin(angle)) poke(sfx_memory + i, sample) end -- populate step 0 of sfx 8 poke_step(sfx_id, 0, pitch, custom_slot, volume, effect, custom_bit) -- zero remaining 31 steps for step=1,31 do local addr = 0x3200 + sfx_id*68 + step*2 poke(addr, 0) poke(addr+1, 0) end -- Last 4 bytes of slot: filters, speed, loop start and stop poke(0x3200 + sfx_id*68 + 64, 0) poke(0x3200 + sfx_id*68 + 65, 0) poke(0x3200 + sfx_id*68 + 66, 0) poke(0x3200 + sfx_id*68 + 67, 0) end function _update() if btnp(4) then sfx(sfx_id) end end function _draw() cls() print("press z", 10, 10, 7) end