0 'ORGAN.BA - BY MARK LUTTON CLUB 100 LIBRARY - 415/939-1246 BBS, 937-5039 NEWSLETTER, 932-8856 VOICE 1 'Organ -- slow Basic version 2 ' Public Domain, by Mark Lutton, Delphi: MARKLUTTON 3 ' 12/8/84 4 'To understand this, you have to 5 'read "Hidden Powers of the TRS-80 6 'Model 100" by Christopher L. Morgan 7 '(1984, The Waite Group). 8 'Note: There is a delay after you hit a key because of the slowness 9 'of the keyboard input routine. Someday I will rewrite this in 10 'machine language and make it faster. 11 'Think of this as an experimental version. 12 'Also note that this plays around with the innards of the machine. 13 'Be careful if you fiddle with this, and save all your 14 'important files first! 15 ' set up data 16 DEFINT A-Z:DIM S(1,71):FOR I=0 TO 71:READ S(0,I):S(1,I)=S(0,I)/4:NEXT I:CLS:PRINT " Organ":PRINT " (Hit shift-break to quit)":PRINT " z - / lower octave white keys":PRINT " a - ; lower octave black keys" 17 PRINT " q - [ next octave white keys":PRINT " 1 - + black keys":PRINT " jumps up 2 octaves.":CALL 30300:'bg task off 18 'get key pressed 19 B0=A0:B1=A1:B2=A2:B3=A3:B4=A4:B5=A5:B6=A6:B7=A7:B8=A8:X=INP(186):OUT 186,X OR 1:OUT 185,254:A0=INP(232):OUT 185,253:A1=INP(232):OUT 185,251:A2=INP(232):OUT 185,247:A3=INP(232):OUT 185,239:A4=INP(232):OUT 185,223:A5=INP(232):OUT 185,191:A6=INP(232) 20 OUT 185,127:A7=INP(232):X=INP(186):OUT 185,255:OUT 186,X AND 254:A8=INP(232):'any change? 21 IF A0=B0 AND A1=B1 AND A2=B2 AND A3=B3 AND A4=B4 AND A5=B5 AND A6=B6 AND A7=B7 AND A8=B8 THEN 19 22 'break pressed? 23 IF A8 = 126 THEN 49 24 'shift, caps lock? 25 IF (A8 AND 33)=33 THEN S1=0:ELSE S1=1 26 'which key? 27 K=0:IF A0<>255 THEN A9=A0:GOTO 37 28 K=8:IF A1<>255 THEN A9=A1:GOTO 37 29 K=16:IF A2<>255 THEN A9=A2:GOTO 37 30 K=24:IF A3<>255 THEN A9=A3:GOTO 37 31 K=32:IF A4<>255 THEN A9=A4:GOTO 37 32 K=40:IF A5<>255 THEN A9=A5:GOTO 37 33 K=48:IF A6<>255 THEN A9=A6:GOTO 37 34 K=56:IF A7<>255 THEN A9=A7:GOTO 37 35 IF (A8 AND 2) =2THEN K=-1:ELSE K=65 36 GOTO 45 37 IFA9AND128THEN38:ELSEK=K+7:GOTO45 38 IFA9AND64THEN39:ELSEK=K+6:GOTO 45 39 IFA9AND32THEN40:ELSEK=K+5:GOTO 45 40 IFA9AND16THEN41:ELSEK=K+4:GOTO 45 41 IFA9AND8THEN42:ELSEK=K+3:GOTO 45 42 IFA9AND4THEN43:ELSEK=K+2:GOTO 45 43 IFA9AND2THEN45:ELSEK=K+1:GOTO 45 44 'got key number, now make sound 45 IF K>-1 THEN 47: 46 OUT 186,(INP(186)AND223)OR 4:GOTO 19 47 D=S(S1,K):IF D=0 THEN 46 48 OUT 188,(D MOD 256):OUT 189,((D/256) AND 127) OR 64:OUT 184,195:OUT 186,(INP(186) AND 219) OR 32:GOTO 19 49 CLS:PRINT "Goodbye.";'bg task on 50 IF INKEY$ <> "" THEN 50:'flush buffer 51 END:DATA 9394,8368,7456,7032,6269,5586,4976,4433:DATA 9952,8866,7900,0,6642,5918,5272,0:DATA 4697,4184,3728,3516,3134,2793,2488,2348:DATA 2092,1864,1758,3950,0,4697,4184,3728:DATA 4976,4433,3950,0,3321,2959,2636,0:DATA 2216,1975,0,1660,0,0,0,0 52 DATA 0,1567,11172,12538,0,0,0,0:DATA 0,0,0,0,0,0,0,0:DATA 0,10544,0,0,0,0,0,0:'end of ORGAN.