Andiamo per ordine
"Bene," -mi sono detto-"il primo parametro indica il numero di byte necessari (e di conseguenza i tasti da pigiare).
Attento,non è proprio così.Il primo parametro dà il termine con cui mettere in AND il valore nella locazione esaminata.Qui serve conoscere i numeri binari
Perciò se volessi "aspettare" la pressione di tre tasti dovrei, semplicemente, programmare così:
CODE
10 WAIT 198,3
20 PRINT "COMMODORE"
Non funge... Basta pigiare un solo tasto! Perchè?
Perchè la WAIT aspetta finchè il valore in 198,messo in AND con 3,dà un valore diverso da 0.
In questo caso,quindi,basta che il bit 0 o 1 del valore in 198 non sia nullo,affinchè l'esecuzione del programma venga sbloccata.E poichè il bit 0 di 1(cioè il numero di caratteri nel buffer) è pari a 1,è sufficiente premere un solo tasto perchè il programma venga sbloccato.
2)
Sempre riguardo al WAIT, da quanto ho capito, una traduzione un pò grossolana sarebbe la seguente
WAIT locazione, para1, para2
=
IF (para1 AND locazione) <> 0 AND (para2 XOR locazione) <> 0 then
...
3)
Ma se l'interprete aspetta che una determinata condizione avvenga, ehm, non si blocca? Voglio dire che se:
10 WAIT fino a quando il colore dello sfondo sia diverso da, grigio
20 POKE 53281,grigio
hai voglia di aspettare... Sono sicuro che ti/vi sembrerà una banalità ma ho una concezione di programmazione limitata allo step-by-step
Attento:innanzitutto,per formalizzare la WAIT,sarebbe più giusto scrivere
WAIT locazione, para1, para2
=
IF (para1 AND locazione ) <> 0 then sblocca
ELSE
IF (para2 XOR locazione) <> 0 then sblocca
else ( ...ritesta il contenuto della locazione... )
L'interprete rimane bloccato per un tempo indeterminato,finchè il contenuto della locazione testata non contiene un valore che soddisfi una delle condizioni;nel tuo programma,ad esempio,il C64 rimane bloccato alla riga 10 all'infinito,a meno che tu non prema RUN-STOP/RESTORE o che,nel momento dell'esecuzione del programma,la locazione 53281 contenga già il valore corrispondente al colore grigio.
Detto questo,quindi,ovvio che se metti
WAIT ...,0
questa istruzione blocca l'esecuzione del programma all'infinito,finchè non si preme RUN-STOP/RESTORE;come è noto dall'algebra booleana,infatti,nessun valore in AND con 0 può dare un valore diverso da 0.
Esistono locazioni che il C64 modifica con una certa frequenza,indipendentemente dal flusso del programma in esecuzione come,ad esempio il buffer di tastiera,o il rasterbeam,o ancora l'orologio di sistema;non ha molto senso,infatti,usare la WAIT per locazioni tipo il colore dello sfondo o il bordo,che possono essere modificate solo per volontà dell'utente,e di cui si conosce già a priori l'esito della computazione
4)
Come hai, egregiamente, spiegato WAIT aspetta il determinarsi di una condizione in una locazione di memoria. La locazione 198, ho appreso, è quella che in un certo senso monitora il keybuffer. Suppongo esistano centinaia di altre condizioni, ci sarà ad esempio una condizione di schermo grigio, bianco, viola, una condizione di presenza di un carattere nella prima linea, di un array e via dicendo (pardon per gli esempi, le prime cose che mi vengono in mente )
Ma come posso desumere le corrette locazioni senza venire a rompere a voi?
Innanzitutto,per noi non è una rottura,bensì un piacere
Ad ogni modo,se per te l'inglese non è un problema,leggi
http://unusedino.de/ec64/technical/project...apping_c64.htmlE' il massimo!
Ciao