diff --git a/examples/curlywas/cracklebass.cwa b/examples/curlywas/cracklebass.cwa new file mode 100644 index 0000000..29577c3 --- /dev/null +++ b/examples/curlywas/cracklebass.cwa @@ -0,0 +1,55 @@ +// port of cracklebass by pestis (originally on TIC-80) + +include "../include/microw8-api.cwa" + +const MUSIC_DATA = 0x20000; + +export fn upd() { + let inline t = 32!32 / 16; + let inline p = t / 1024; + + let channel:i32; + + loop channels { + let inline e = t * channel?MUSIC_DATA / 8; + let lazy pattern = (8 * channel + p)?(MUSIC_DATA + 56); + let lazy n = !!pattern * (8 * pattern + e / 16 % 8)?MUSIC_DATA; + let inline prev_ctrl = (channel * 6)?80; + (channel * 6)?80 = if n { + let inline base_note = 12 + 12 * channel?(MUSIC_DATA + 4) + n; + let inline pitch_drop = e % 16 * channel?(MUSIC_DATA + 94); + let inline key_pattern = p?(MUSIC_DATA + 8*4 + 56); + let inline key = select(key_pattern, (8 * key_pattern + t / 128 % 8)?MUSIC_DATA, 1); + (channel * 6)?83 = base_note - pitch_drop / 4 + key; + prev_ctrl & 0xfc | (e / 8 & 2) | 1 + } else { + prev_ctrl & 0xfe + }; + + branch_if (channel := channel + 1) < 4: channels; + } +} + +data 80 { + i8( + 0x44, 0, 0, 0, 0x50, 0x40, + 0x4, 0x50, 0, 0, 0x80, 0x80, + 0x40, 0x80, 0, 0, 0x40, 0x40, + 0, 0, 0, 0, 0x50, 0x50 + ) +} + +data MUSIC_DATA { + i8( + 16, 2, 8, 8, 1, 2, 2, 3, 1, 0, + 1,13,16, 0, 1, 8, 1, 0, 1,13, + 16, 1, 1, 8, 1, 0, 8,13,13, 0, + 16,13, 1, 0, 1, 0, 1, 0, 1, 1, + 1, 0, 0, 0, 1, 0,13, 1, 1, 1, + 6, 8, 1, 1, 6, 8, 1, 1, 2, 1, + 2, 1, 2, 0, 0, 0, 0, 3, 3, 3, + 5, 0, 0, 2, 1, 2, 1, 2, 1, 2, + 0, 4, 4, 0, 4, 4, 4, 4, 0, 0, + 0, 0, 6, 6, 0, 0, 0, 8 + ) +} \ No newline at end of file