129 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			129 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
_runtimePath_ "../runtime"
 | 
						|
_runtimeStart_ &hFFFF
 | 
						|
_codeRomType_ ROMv2
 | 
						|
 | 
						|
'not using strings
 | 
						|
free STRINGWORKAREA
 | 
						|
 | 
						|
const SAMPLES=128
 | 
						|
const OFFSCREEN0=&h09A0
 | 
						|
const OFFSCREEN1=&h78A0
 | 
						|
 | 
						|
'alloc offscreen scrolling areas, (<address>, <optional width>, <optional height>, <optional offset>)
 | 
						|
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
 | 
						|
load midi, ../../res/audio/midi/f1.gtmid,       3
 | 
						|
load midi, ../../res/audio/midi/freedom.gtmid,  4
 | 
						|
load midi, ../../res/audio/midi/fzero.gtmid,    5
 | 
						|
load midi, ../../res/audio/midi/ik.gtmid,       6
 | 
						|
load midi, ../../res/audio/midi/ment.gtmid,     7
 | 
						|
load midi, ../../res/audio/midi/virus.gtmid,    8
 | 
						|
 | 
						|
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
 | 
						|
52:  track = 4 : idle = 0 : return
 | 
						|
53:  track = 5 : idle = 0 : return
 | 
						|
54:  track = 6 : idle = 0 : return
 | 
						|
55:  track = 7 : idle = 0 : return
 | 
						|
56:  track = 8 : idle = 0 : return
 | 
						|
57:  track = 9 : 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 9' for different MIDI tracks.."
 | 
						|
    
 | 
						|
    play mididv, 1
 | 
						|
return
 |