Ένας λόγος που ο commodore 64 ήταν τόσο προσιτός σε μεγάλη γκάμα χρηστών ήταν ότι με το που άνοιγε ο υπολογιστής, ο χρήστης είχε στην διάθεσή του ένα διερμηνευτή της basic με τον οποίο μπορούσε να λύσει μικρά προβλήματα. Βέβαια, όταν οι απαιτήσεις αύξαναν, θα έπρεπε να καταφύγει σε γλώσσα μηχανής, καθόσον η ταχύτητα του διερμηνευτή δεν ήταν επαρκής. Για να σας δείξω αυτό, πήρα ένα παράδειγμα από το commodore 64 programmers reference guide (σελ 187). Σε αυτό το πρόγραμμα εκτελείται ένα μικρό μουσικό κομμάτι κάνοντας χρήση των τριών φωνών (voices) που διαθέτει το τσιπ ήχου. Το μόνο που άλλαξα είναι το κομμάτι που εκτελείται και αντί αυτού έβαλα τον εθνικό ύμνο. Δεν ξέρω πραγματικά αν έχει "παιχτεί" ποτέ πριν ο εθνικός ύμνος από αυτό το μηχάνημα :) ! Η λίστα του προγράμματος ακολουθεί παρακάτω :

10 S=54272:FORL=STOS+24:POKEL,0:NEXT
20 DIMH(2,500),L(2,500),C(2,500)
30 DIMFQ(11)
40 V(0)=65:V(1)=17:V(2)=17
50 POKES+3,8:POKE4+2,0
60 FORI=0TO11:READFQ(I):NEXT
100 FORK=0TO2
110 I=0
120 READNM
130 IFNM=0THEN250
140 WA=V(K):WB=WA-1:IFNM<0THENNM=-NM:WA=0:WB=0
150 DR%=NM/128:OC%=(NM-128*DR%)/16
160 NT=NM-128*DR%-16*OC%
170 FR=FQ(NT)
180 IFOC%=7THEN200
190 FORJ=6TOOC%STEP-1:FR=FR/2:NEXT
200 HF%=FR/256:LF%=FR-256*HF%
210 IFDR%=1THENH(K,I)=HF%:L(K,I)=LF%:C(K,I)=WA:I=I+1:GOTO120
220 FORJ=1TODR%-1:H(K,I)=HF%:L(K,I)=LF%:C(K,I)=WA:I=I+1:NEXT
230 H(K,I)=HF%:L(K,I)=LF%:C(K,I)=WB
240 I=I+1:GOTO120
250 IFI>IMTHENIM=I
260 NEXT
500 POKES+5,0:POKES+6,240
510 POKES+12,85:POKES+13,133
520 POKES+19,10:POKES+20,197
530 POKES+24,31
540 FORI=0TOIM
550 POKES,L(0,I):POKES+7,L(1,I):POKES+14,L(2,I)
560 POKES+1,H(0,I):POKES+8,H(1,I):POKES+15,H(2,I)
570 POKES+4,C(0,I):POKES+11,C(1,I):POKES+18,C(2,I)
580 FORT=1TO80:NEXT:NEXT
590 FORT=1TO200:NEXT:POKES+24,0
600 DATA34334,36376,38539,40830
610 DATA43258,45830,48556,51443
620 DATA54502,57743,61176,64814
1000 DATA441,186,960,186,441,186,576
1010 DATA569,442,192,962,194,452,196,1093
1020 DATA439,185,954,185,439,185,570
1030 DATA567,448,192,964,194,448,186
1040 DATA1081,441,185,962,197,452,193
1050 DATA578,567,439,183,962,197,452,193
1060 DATA1090,448,192,576,580,448,192,576,581
1070 DATA448,192,576,452,192,450,196,1093,453,196,580,578,450,192,576,570
1080 DATA450,194,960,185,442,183,570,569,453,196,580,578
1090 DATA450,192,576
1100 DATA570,450,194,960,185,442,183,1077
1999 DATA0
2000 REM DATA FOR VOICE 2
2010 DATA437,183,953,183,437,183,569,565,439,185
2020 DATA954,186,448,192,1081,436,181,951,181,436,181,567,564
2030 DATA-512,960,186,441,183,1077,437,181,1081,569
2040 DATA1081,437,181,1081,569,1081,437,181,570,576,442,186,569,576,441,185
2045 DATA570,442,185,442,192,1081,441,192,576,570,442,185
2050 DATA569,567,442,186,953,181,439,180,567,565,441,192
2060 DATA576,570,442,185,569,567,442,186,953,181,439,180,565,576
2999 DATA0
3000 REM DATA FOR VOICE 3
3010 DATA-512,-1536,-1536,-1536,-1536,-1536,-1536,-1536,-1536
3020 DATA1077,567,1077,-512,1077,567,1077,-512,-512,570,-512
3030 DATA-512,569,-512,-512,439,-640,-1536,-1536,-1536,-1536
3040 DATA-1536,-1536,-1536,-1536
3050 DATA-512,576
3999 DATA0


Για περισσότερα σχόλια σχετικά με το πρόγραμμα μπορείτε να ανατρέξετε στο commodore 64 programmers reference guide . Αυτό που έχει ενδιαφέρον στο πρόγραμμα είναι ότι όλες οι νότες ανάλογα με την τονικότητα και την διάρκεια τους μεταφράζονται από ένα σταθερό τύπο σε τιμές και εγγράφονται σε τρεις πίνακες, έναν για κάθε φωνή. Το μηχανικό ανάλογο αυτού είναι τα κουρδιστά παιχνίδια που παίζουν ένα μουσικό σκοπό. Αυτά γυρνούν με σταθερή ταχύτητα ένα κύλινδρο πάνω στον οποίο υπάρχουν δοντάκια στη θέση κάθε νότας. έτσι γίνεται η αναπαραγωγή του μουσικού κομματιού. Αντίστοιχα το πρόγραμμα αφού γράψει την τιμή που αντιστοιχεί σε κάθε νότα σε ένα πίνακα, παίρνει σε τακτά χρονικά διαστήματα τις τιμές αυτές και τις τοποθετεί στον καταχωρητή που βλέπει το τσιπ ήχου.
Για να μην χρειαστεί να πληκτρολογήσετε όλο τις γραμμές εντολών, σας δίνω το πρόγραμμα σε μορφή d64 για να το κατεβάσετε από τον σύνδεσμο
Όταν τρέξετε για πρώτη φορά το πρόγραμμα, μην νομίσετε ότι κόλλησε. Θα πάρει 51 δευτερόλεπτα μέχρι να αρχίσετε να ακούτε την πρώτη νότα !! Για αυτό ακριβώς τον λόγο η basic δεν είναι κατάλληλη γλώσσα για να φτιάξετε παιχνίδια και απαιτητικές εφαρμογές.
Είναι όμως κατάλληλη για να λύσετε μικρά προγραμματιστικά προβλήματα γρήγορα.