Sound in Forth (translation pending)#
Heute gehts es um Geräusche. Folgendes Basic Programm zum Erzeugen eines Sirenentons habe ich im Buch "Atari Basic spielend lernen" gefunden:
10 REM EUROPAEISCHE SIRENE 15 LOW=57:HIGH=45:P=45 20 FOR AGAIN=1 TO 20 30 SOUND 0,P,10,14 40 FOR WAIT = 1 TO 180: NEXT WAIT 50 P=LOW:LOW=HIGH:HIGH=P 60 NEXT AGAIN 70 SOUND 0,0,0,0 80 END
Im volksFORTH ist kein SOUND Befehl eingebaut, also bauen wir uns einen Atari-Basic kompatiblem Sound-Befehl in Forth:
\ Atari 8bit Sound Befehl $D200 CONSTANT AUDBASE : SOUND ( CH# FREQ DIST VOL -- ) SWAP $10 * + ROT DUP + AUDBASE + ROT OVER C! 1+ C! ;
Und nun kommt die Sirene in Forth:
: SIRENE 57 54 ( Sound Werte fuer Sirenentoene ) 20 0 DO OVER 0 SWAP 10 14 SOUND 500 0 DO LOOP ( Warteschleife ) SWAP ( Toene wechseln ) LOOP 0 0 0 0 SOUND ;
Das BASIC Programm benutzt 5 Variablen (LOW, HIGH, P, AGAIN, WAIT), das Forth Programm kommt wieder ohne jede Variablendeklaration aus, alle Werte liegen auf dem Stack. Daher ist Forth so Speichereffizient.