126 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			126 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
_runtimePath_ "../runtime"
 | 
						|
_codeRomType_ ROMv2
 | 
						|
 | 
						|
const NOTELEN=20
 | 
						|
 | 
						|
'audio fix for ROMv5a
 | 
						|
poke &h21, peek(&h21) OR 3
 | 
						|
sound off
 | 
						|
 | 
						|
set VIDEO_TOP, 238  'disable video
 | 
						|
mode 2 : cls
 | 
						|
set VIDEO_TOP, 0  'enable video
 | 
						|
 | 
						|
n = 0 : c = n : kk = c : char = kk : posxy = char
 | 
						|
fg = get("FG_COLOUR") : bg = get("BG_COLOUR")
 | 
						|
ch = 252 : z = 2
 | 
						|
 | 
						|
dim chan(4)=0
 | 
						|
dim note(4)=0
 | 
						|
 | 
						|
set VIDEO_TOP, 238  'disable video
 | 
						|
gosub drawKeys
 | 
						|
gosub waveform
 | 
						|
set VIDEO_TOP, 0  'enable video
 | 
						|
    
 | 
						|
loop:
 | 
						|
    wait
 | 
						|
    set SOUND_TIMER, 2
 | 
						|
    k = get("SERIAL_RAW")
 | 
						|
    gosub channels
 | 
						|
    if k &&<> kk then gosub normalChar
 | 
						|
    gosub k
 | 
						|
    kk = k
 | 
						|
goto &loop
 | 
						|
    
 | 
						|
113:  n =  73 +  8*256 : char = 81 : posxy =  24 + 91*256 : gosub playNote : return : 'C
 | 
						|
50:   n =  11 +  9*256 : char = 50 : posxy =  30 + 22*256 : gosub playNote : return : 'C#
 | 
						|
119:  n =  80 +  9*256 : char = 87 : posxy =  36 + 91*256 : gosub playNote : return : 'D
 | 
						|
51:   n =  25 + 10*256 : char = 51 : posxy =  42 + 22*256 : gosub playNote : return : 'D#
 | 
						|
101:  n = 103 + 10*256 : char = 69 : posxy =  48 + 91*256 : gosub playNote : return : 'E
 | 
						|
114:  n =  57 + 11*256 : char = 82 : posxy =  60 + 91*256 : gosub playNote : return : 'F
 | 
						|
53:   n =  16 + 12*256 : char = 53 : posxy =  66 + 22*256 : gosub playNote : return : 'F#
 | 
						|
116:  n = 108 + 12*256 : char = 84 : posxy =  72 + 91*256 : gosub playNote : return : 'G
 | 
						|
54:   n =  78 + 13*256 : char = 54 : posxy =  78 + 22*256 : gosub playNote : return : 'G#
 | 
						|
121:  n =  53 + 14*256 : char = 89 : posxy =  84 + 91*256 : gosub playNote : return : 'A
 | 
						|
55:   n =  35 + 15*256 : char = 55 : posxy =  90 + 22*256 : gosub playNote : return : 'A#
 | 
						|
117:  n =  23 + 16*256 : char = 85 : posxy =  96 + 91*256 : gosub playNote : return : 'B
 | 
						|
105:  n =  19 + 17*256 : char = 73 : posxy = 108 + 91*256 : gosub playNote : return : 'C
 | 
						|
57:   n =  21 + 18*256 : char = 57 : posxy = 114 + 22*256 : gosub playNote : return : 'C#
 | 
						|
111:  n =  31 + 19*256 : char = 79 : posxy = 120 + 91*256 : gosub playNote : return : 'D
 | 
						|
48:   n =  50 + 20*256 : char = 48 : posxy = 126 + 22*256 : gosub playNote : return : 'D#
 | 
						|
112:  n =  77 + 21*256 : char = 80 : posxy = 132 + 91*256 : gosub playNote : return : 'E
 | 
						|
122:  if kk &&<> k then z = (z+1) AND 3 : gosub waveform : return
 | 
						|
      return
 | 
						|
 | 
						|
channels:
 | 
						|
    for c=1 &to 4
 | 
						|
        if chan(c) &&> 0 then chan(c) = chan(c) - 1
 | 
						|
        if chan(c) &&= 0 then note(c) = 0 : n=0 : gosub audio
 | 
						|
    next c
 | 
						|
return
 | 
						|
 | 
						|
audio:
 | 
						|
    ch.hi = c : doke ch,n
 | 
						|
return
 | 
						|
 | 
						|
waveform:
 | 
						|
    at 48,103 : print "Z: ";
 | 
						|
    gosub 206+z
 | 
						|
    for c=1 to 4
 | 
						|
        ch.hi = c : poke ch-1,z
 | 
						|
    next c
 | 
						|
return
 | 
						|
 | 
						|
playNote:
 | 
						|
    for c=1 &to 4
 | 
						|
        if note(c) &&= k then chan(c) = NOTELEN : goto &playExit
 | 
						|
        if chan(c) &&= 0 then chan(c) = NOTELEN : note(c) = k : gosub audio : goto &playExit
 | 
						|
    next c
 | 
						|
    
 | 
						|
playExit: 
 | 
						|
    gosub inverseChar
 | 
						|
return    
 | 
						|
 | 
						|
inverseChar:
 | 
						|
    set FG_COLOUR, bg : set BG_COLOUR, fg
 | 
						|
    gosub printChar
 | 
						|
return
 | 
						|
         
 | 
						|
normalChar:
 | 
						|
    set FG_COLOUR, fg : set BG_COLOUR, bg
 | 
						|
    gosub printChar
 | 
						|
return
 | 
						|
         
 | 
						|
printChar:
 | 
						|
    at posxy.lo,posxy.hi
 | 
						|
    print chr$(char)
 | 
						|
return
 | 
						|
 | 
						|
206: print "Metallic" : return
 | 
						|
207: print "Triangle" : return
 | 
						|
208: print "Pulse   " : return
 | 
						|
209: print "Sawtooth" : return
 | 
						|
 | 
						|
drawKeys:
 | 
						|
    for i=0 &to 9
 | 
						|
        ofs = (i LSL 3) + (i LSL 2) + 20  ' i*12 + 20
 | 
						|
        set FG_COLOUR, &h00 : rect ofs,30, ofs+12,89
 | 
						|
        set FG_COLOUR, &hFF : rectf ofs+1,31, ofs+11,88
 | 
						|
    next i
 | 
						|
    for i=0 &to 8
 | 
						|
        ' two seperate BRA optimised IF's are smaller/faster than 'IF (i=2) OR (i=6)
 | 
						|
        if i &&= 2 then goto &cont
 | 
						|
        if i &&= 6 then goto &cont
 | 
						|
        ofs = (i LSL 3) + (i LSL 2) + 28  ' i*12 + 28
 | 
						|
        set FG_COLOUR, &h00 : rectf ofs,30, ofs+8,70
 | 
						|
cont:
 | 
						|
    next i
 | 
						|
    
 | 
						|
    'set FGBG_COLOUR, &h00FF
 | 
						|
    'at 24,75 : print "C D E F G A B C D E"
 | 
						|
    
 | 
						|
    set FGBG_COLOUR, &h0F20
 | 
						|
    at 24,22 : print " 2 3   5 6 7   9 0"
 | 
						|
    at 24,91 : print "Q W E R T Y U I O P"
 | 
						|
return |