Il mio benvenuto al quarto numero della newsletter di Quattro Bit: attualmente siamo in 76, altre due persone si sono aggiunte rispetto alla settimana scorsa. Vi ricordo che ogni condivisione è importante, perché aiuterà la diffusione della newsletter e, di conseguenza, la regolarità della stessa.
Nello stesso modo, aggiungere un commento o anche solo un like mi aiuterà a capire quali contenuti è meglio approfondire e quali altri invece no. Per adesso sto per così dire “navigando a vista”, ma ovviamente terrò presto conto dei feedback, quindi grazie a tutti coloro che contribuiscono in qualche modo.
Proseguendo nella sequenza degli articoli introduttivi di questo primo mese, Quattro Bit in questi anni si è sempre impegnato nel recupero e nella digitalizzazione di vecchi software-gioco apparsi sulle riviste di informatica durante i primi anni Ottanta; sono stato molto felice, per esempio, di aver potuto dare nuova vita ai giochi italiani originali (per Commodore PET) Gollum e Scopa a tre carte e di aver intervistato il loro autore, Stefano Guarinelli.
Non si tratta mai, per quanto mi riguarda, di un semplice recupero di "listati" da digitare (come si diceva allora) oppure, per usare il termine anglosassone, di type-in, ma anche di stabilire di volta in volta quanto i listati pubblicati in Italia fossero effettivamente delle produzioni originali e quanti invece fossero stati più o meno copiati dalle riviste americane o inglesi, poi riproposti senza attribuzione sia in modo pedissequo, sia con qualche miglioria.
In questa ricerca mi sono interessato in particolare dei giochi di carte, semplicemente perché in gran parte dei casi l'originalità è più semplice da stabilire, data la diffusione prettamente locale di alcuni giochi tradizionali. Così, come nel caso appena citato della Scopa a tre carte di Guarinelli, ci sono stati ovviamente diversi tentativi italiani di simulare il gioco della Briscola.
In passato pensavo che il primissimo programma di Briscola per le macchine Commodore fosse stato quello pubblicato dalla rivista MC Microcomputer nel suo numero di dicembre 1983, a opera di C. Borreo (per VIC-20) e di Leo Sorge (per Commodore 64).
Andando all'indietro, sfogliando varie annate di riviste, ho trovato invece un esempio antecedente in RadioElettronica & Computer del marzo del 1983 e ho deciso di proporlo ai lettori della newsletter.
La versione della Briscola per VIC-20 inespanso pubblicata allora, tra l'altro, è la rielaborazione di un altro programma presentato addirittura nel novembre 1981; questo numero di RE&C non è disponibile in Rete, quindi se qualcuno lo avesse e potesse scannerizzare l'articolo in questione, sarebbe un'ottima cosa! (In caso, segnalatelo nei commenti).
Le regole utilizzate dal programma sono queste, se vorrete giocare…
Come ho sempre fatto, condivido un link Dropbox al file .d64, in modo che chiunque sia interessato possa provarlo via emulazione (o magari anche su un reale VIC-20 inespanso ancora funzionante!); a partire da questa volta però mi piacerebbe iniziare a commentare i programmi, partendo magari da delle piccole porzioni.
Non so se questa iniziativa possa essere interessante o no, facciamo dunque un esperimento e vediamo come va: serve a me anche per vedere la resa del BASIC su Substack e notare quanto questo sia effettivamente leggibile.
Segnalo, per iniziare, una cosa interessante realizzata con poche righe di codice dall’autore (Gabriele Cane di Torino): dopo aver dichiarato tre variabili (aa, bb e cc) all’inizio del programma come locazioni della memoria colore, corrispondenti alla nona riga dello schermo del VIC:
50 aa=38587:bb=38591:cc=38595:dd=7867
Durante la gestione dell’input su quale delle tre carte scegliere (selezionabile con i tasti f1, f3 e f5 attraverso un’instruzione get con la stringa dc$), a seconda del risultato inserisce il colore bianco “pokando il numero 1” nell’opportuna variabile e mettendo le altre due a nero (numero 0), realizzando così il quadratino bianco dinamico che si vede nella schermata.
460 get dc$:if dc$="" then 460
470 if dc$="{f1}"then g=2:poke aa,1:poke bb,0:poke cc,0:rr=0:goto510
480 if dc$="{f3}"then g=1:poke aa,0:poke bb,1:poke cc,0:rr=1:goto510
490 if dc$="{f5}"then g=0:poke aa,0:poke bb,0:poke cc,1:rr=2:goto510
500 goto 460
510 poke tt,200
Come secondo esempio, faccio notare invece un errore assai tipico di quel periodo. Questa è la routine della generazione del mazzo di carte per la partita da giocare. Dopo aver dimensionato (dim) l’array a si parte con due cicli for annidati, per assegnare una carta a ogni elemento dell’array stesso. Per far questo c’è una chiamata alla funzione rnd( ), che dovrebbe “generare un numero casuale”.
190 dim a(39)
200 for x=0 to 39
210 a(x)=int(rnd(1)*100)/10:if a(x)>3.9 then 210
220 if x=0 then 270
230 for y=0 to x-1:if a(x)=a(y) then 210
240 next y
250 if x=30 then print"ho quasi terminato..."
260 if x=37 then print"ancora una smazzata..."
270 next x
I manuali dell’epoca però non erano sufficientemente attenti nel descrivere come funzionasse realmente la generazione dei numeri pseudocasuali in BASIC e, in particolare, che per inizializzare il generatore della sequenza bisognasse utilizzare un numero negativo come parametro di rnd, per assegnare cioè a essa un particolare seed.
Andando nel concreto, utilizzando questo programma sul vostro emulatore così com’era concepito originariamente, la sequenza progressiva delle carte sarebbe stata sempre la stessa. Avreste giocato all’infinito la stessa partita.
Per ovviare a questo determinismo non è sufficiente chiamare la funzione rnd con un singolo numero negativo, es: rnd(-1). La soluzione tipica dell’epoca era utilizzare la variabile di sistema ti, legata al temporizzatore di sistema, e che quindi varia dinamicamente in funzione del tempo di esecuzione. Nel listato allegato troverete quindi una linea da me aggiunta:
205 sd=rnd(-ti):rem *** seed randomizer ***
Troppo complicato? Mal di testa? Se volete approfondire ancora, c’è questo articolo di Retroacademy per nuove emicranie sui numeri pseudocasuali, altrimenti ci vediamo la prossima settimana!
Il quarto numero della newsletter si chiude qui ed è stato inviato a 76 (+2) persone. La speranza è quella di raggiungere la "cifra tonda" il prima possibile, spargete la voce. A presto!
Bella e l'ho letta con un certo trasporto questa newsletter perché mi ha smosso un ricordo di quando avevo 14 anni.
Per comprare il C-128 io nell'estate dell'87 mi guadagnai i soldi lavando i vetri delle macchine nel parcheggio dell'Autogrill Pavesi...
Si, proprio così; lo volevo ed ero disposto a tutto!
Dovevo solo stare attento alla polizia stradale che faceva le improvvisate per dissuadermi 😅 (mi nascondevo ma poi quatto-quatto ritornavo subito in azione).
Fatto sta che in quel parcheggio c'era spesso un gruppetto losco che proponeva il GIOCO DELLE TRE CARTE a sfortunati turisti che ci cascavano. Non sto a raccontarvi quanta gente "scavallata" ho visto disperarsi.
Comunque io non capivo dove avessero imparato tutta quell'abilità che esibivano per dominare il tavolino.
Dopo un mese da lava-vetri e di mance miste tra marchi, franchi, sterline...(monete intendiamoci) raccimolai il malloppo e papà fece il cambio-valuta in banca...
Erano poco piu del prezzo del mio primo Computer il Commodore 128.
Evvai!
Il tempo d'imparare i primi rudimenti del Basic 7.0 e tra i vari circle, draw, box e cicli for...next con casualità rnd necessarie per compilare un gioco "onesto" (basato sulla casualità e non sull'imbroglio dei nostri eroi nel parcheggio della Pavesi) mi faccio il mio primo programma in Basic:
IL GIOCO DELLE TRE CARTE per C-128
Non vi dico come mi sentivo... e che soddisfazione 🙂
grazie, la cercavo :)