10 REM 20 REM SOUND DRIVER BASIC INTERFACE EXAMPLE 30 REM 40 DEFINT A-Z 50 REM 60 FSDINIT = 0 70 FSDRELTIMESTART = 2 80 FSDSETSTATE = 3 90 FSDGETSTATE = 4 100 FSDFLUSH = 5 110 FSDSETMODE = 6 120 FSDGETMODE = 7 130 FSDSETRELVOLUME = 8 140 FSDSETTEMPO = 9 150 FSDSETTRANPOSE = 10 160 FSDGETTRANSPOSE = 11 170 FSDSETACTVOICE = 12 180 FSDGETACTVOICE = 13 190 FSDPLAYNOTEDEL = 14 200 FSDPLAYNOTE = 15 210 FSDSETTIMBRE = 16 220 FSDSETPITCH = 17 230 FSDSETTICKBEAT = 18 240 FSDNOTEON = 19 250 FSDNOTEOFF = 20 260 FSDTIMBRE = 21 270 REM 280 FIN = 100 290 S0 = 0: S1 = 0: S2 = 0: S3 = 0: S4 = 0: S5 = 0: REM RESET ARGUMENTS 300 I = 0: MEM = 0: BYTE = 0 310 FUNCSIZE = 66: REM CODE SIZE 320 DIM FUNC%( FUNCSIZE /2 +1): REM CODE ARRAY 330 DIM INSTRUM( 26): REM TIMBRE DATA 340 REM 350 REM LOAD TIMBRE INTO ARRAY, FROM DATA 360 REM 370 MEM = VARPTR( INSTRUM(0)) 380 FOR I = 1 TO 52: READ BYTE: POKE MEM, BYTE: MEM = MEM +1: NEXT I 390 REM 400 REM LOAD CODE (SOUNDBAS.ASM) INTO FUNC% ARRAY 410 REM 420 MEM = VARPTR( FUNC%(0)) 430 FOR I = 1 TO FUNCSIZE 440 READ BYTE 450 POKE MEM, BYTE 460 MEM = MEM +1 470 NEXT I 480 REM 490 REM SET UP SOUND DRIVER 500 REM 510 S0 = FSDINIT: GOSUB 730: REM INITIALIZE SD 520 S0 = FSDRELTIMESTART: S1 = 0: S2 = 1: GOSUB 730: REM START TIME 530 S0 = FSDSETTEMPO: S1=100: S2=0: S3=1: GOSUB 730: REM TEMPO = 100 540 S0 = FSDSETACTVOICE: S1 = 0: GOSUB 730: REM SET ACTIVE VOICE 550 S0 = FSDSETTIMBRE: MEM = VARPTR( FUNC(0)): REM SET INSTRUMENT 560 CALL MEM( S0, INSTRUM(0), S2, S3, S4, S5) 570 GOSUB 630: REM LOAD SONG INTO SD 580 S0 = FSDSETSTATE: S1 = 1: GOSUB 730: REM START PLAYING SONG 590 S0 = FSDGETSTATE: GOSUB 730: REM TEST IF FINISH 600 IF S0 <> 0 GOTO 590 610 STOP 620 REM PLAY SONGS 630 S0 = FSDPLAYNOTE 640 READ S1: READ S2: READ S3 650 IF S1 = FIN THEN RETURN 660 GOSUB 730 670 GOTO 630 680 REM 690 STOP 700 REM 710 REM SOUND DRIVER CALL 720 REM 730 MEM = VARPTR( FUNC%(0)) 740 CALL MEM( S0, S1, S2, S3, S4, S5) 750 RETURN 760 REM 770 REM intrument marimba3 780 DATA &H01, &H00, &H05, &H00, &H05, &H00, &H0D, &H00, &H01 790 DATA &H00, &H00, &H00, &H0A, &H00, &H05, &H00, &H0E, &H00, &H01, &H00 800 DATA &H00, &H00, &H00, &H00, &H01, &H00, &H02, &H00, &H01, &H00, &H00 810 DATA &H00, &H0F, &H00, &H01, &H00, &H00, &H00, &H09, &H00, &H03, &H00 820 DATA &H00, &H00, &H01, &H00, &H00, &H00, &H00, &H00, &H01, &H00 830 REM 840 REM MACHINE CODE (SOUNDBAS.ASM) 850 DATA &H06, &H56, &H57, &H8B, &HEC, &H8B, &H5E, &H14, &H8B, &H37, &H8B 860 DATA &H5E, &H0A, &HFF, &H37, &H8B, &H5E, &H0C, &HFF, &H37, &H8B, &H5E 870 DATA &H0E, &HFF, &H37, &H8B, &H5E, &H10, &HFF, &H37, &H83, &HFE, &H10 880 DATA &H75, &H07, &H1E, &HFF, &H76, &H12, &HEB, &H06, &H90, &H8B, &H5E 890 DATA &H12, &HFF, &H37, &H16, &H07, &H8B, &HDC, &HCD, &H65, &H8B, &HE5 900 DATA &H8B, &H5E, &H14, &H89, &H07, &H5F, &H5E, &H07, &HCA, &H0C, &H00 910 REM 920 REM SONG #1 930 DATA 0, 1, 2 940 DATA 2, 1, 2 950 DATA 4, 3, 4 960 DATA 7, 1, 4 970 DATA 7, 1, 1 980 DATA 4, 3, 4 990 DATA 0, 1, 4 1000 DATA 4, 3, 2 1010 DATA 2, 1, 2 1020 DATA 0, 2, 1 1030 REM 1040 REM SONG #2 1050 DATA 0,1,2,4,1,2,7,1,2,12,3,2,2,3,4,5,1,4,9,1,2,12,3,2 1060 DATA 11,3,4,9,1,4,7,1,2,5,1,1,2,1,2,4,1,1,9,1,2,7,3,2 1070 DATA 100, 100, 100