_runtimePath_ "../runtime" _runtimeStart_ &h7FFF _codeRomType_ ROMv2 'not using strings free STRINGWORKAREA const SAMPLES=128 const OFFSCREEN0=&h09A0 const OFFSCREEN1=&h78A0 'alloc offscreen scrolling areas, (
, , , ) alloc OFFSCREEN0, 96, 8, &h0100 alloc OFFSCREEN1, 96, 8, &h0100 'overwrite interlaced waveform 2 in audio memory def byte(&h0702, x, 0.0, 360.0, 64, 4) = sin(x)*31.0 + 32.0 samplesAddr = &h0600 def byte(&h0600, 0, 1, SAMPLES) = 0 'buffer A def byte(&h0680, 0, 1, SAMPLES) = 0 'buffer B load midi, ../../res/audio/midi/agony.gtmid, 0 load midi, ../../res/audio/midi/bath.gtmid, 1 load midi, ../../res/audio/midi/escape.gtmid, 2 init midiv, noupdate scrollPos0 = 0 : scrollPos1 = scrollPos0 : track = 2 : idle = 1 gosub initialise repeat addrA = samplesAddr 'sample waveform asm loop: LD 0x13 POKE _addrA INC _addrA LDW _addrA XORW _addrB ANDI 0x80 BNE _loop endasm gosub textScroll 'erase waveform buffer B for i=0 &to SAMPLES-1 poke &h1610 + ((peek((samplesAddr XOR &h80) + i) AND &hFC) LSL 6) + i, &h10 tick midiv next i gosub textScroll 'draw waveform buffer A for i=0 &to SAMPLES-1 poke &h1610 + ((peek(samplesAddr + i) AND &hFC) LSL 6) + i, &h1D tick midiv next i addrB = samplesAddr samplesAddr = samplesAddr XOR &h80 gosub get("BUTTON_STATE") set BUTTON_STATE, 255 if idle = 0 idle = 1 play mididv, track - 1 at 122, 1 : print track endif forever 49: track = 1 : idle = 0 : return 50: track = 2 : idle = 0 : return 51: track = 3 : idle = 0 : return 255: idle = 1 : return textScroll: 'wait is needed to stop visual scrolling glitches repeat tick midiv until (get("VIDEO_Y") AND 1) &&<>0 poke &h0103, -scrollPos0 poke &h0113, scrollPos0 : inc scrollPos0 poke &h01E1, scrollPos1 : inc scrollPos1 return initialise: 'audio fix for ROMv5a poke &h21, peek(&h21) OR 3 mode 2 set FGBG_COLOUR, &h1030 cls cls OFFSCREEN0, 96, 8 cls OFFSCREEN1, 96, 8 set FG_COLOUR, &h20 rectf 12, 11, 147, 109 set FG_COLOUR, &h10 rectf 16, 14, 143, 106 scroll off tclip off set FG_COLOUR, &h2F at 2, 1 : print "Playing MIDI track '";track;"'.." at 2, 112 : print "Press '1 to 3' for different MIDI tracks.." play mididv, 1 return