La limonata è BASICa.

Creato il 21 novembre 2014 da Marte @CPiramidale

...Ché certe volte mi capita che arrivo a fine giornata e, da solo ed in totale autonomia, mi guardo allo specchio dicendomi: "Marte. Tu sei veramente uno scemo, lo sai?!". :)
Seguitemi e vedrete. A fine "post" me lo direte anche voi!!! ;)
Tanto, tanto tempo fa, quando i mulini erano bianchi e la campanella annunciava qualcosa di sano, il buon Marte era un fanciullino come tanti altri che, ogni tanto, si perdeva leggendo dei passi a caso da "I Computer Games" ("Supernova", 1985).
A pagina 63 del suddetto libro, si poteva leggere: «...In "Lemonade", disponibile su varie macchine come "Commodore 64", "Apple ][" ecc., il giocatore ha a disposizione un piccolo capitale da investire, durante tutta l'estate, acquistando zucchero e limoni che gli servono per produrre limonate e soddisfare la sete dei bagnanti. Il "Computer" fissa i prezzi delle materie prime mentre il giocatore, in base alla propria fiducia sulla sete dei suoi clienti ed aiutato dalle previsioni meteorologiche fornite dal "computer" stesso, può fissare il prezzo delle bevande in modo da ottenere il massimo guadagno...».
Sopra a questo paragrafo, campeggiava una fotografia in bianco e nero di "Utopia" per l'"Atari 2600"...

Che non c'entrava un tubo con "Lemonade",
anche perché si riferiva ad un altro paragrafo... :P


Ora, dovete sapere che a causa del succitato brano, al vostro buon amico Marte gli è rimasto sempre un po' il mito di questo "Lemonade" che sembrava "Utopia"... ;)
...Ed allora, l'altro ieri me lo sono andato a cercare, "Utonade"... "Lemonia"... "Lemonade" per "Commodore 64", dando vita ad una serie di fortunate circostanze che mi hanno trasformato per un fugace momento in un illuminatissimo "coder/hacker wannabe"! :)
Ma cominciamo dall'inizio.
Su "GB64.Com", effettuando una ricerca con la chiave "LEMONADE", il vostro amatissimo anfitrione verde rinviene ben quattro videogiochi, tutti derivati dal medesimo capostipite: l'originale "Lemonade", edito nel lontano 1982 dalla "Commodore Educational Software".

Ovvero lui...


...Tuttavia, il suo occhio clinico cade subito sulla revisione 3.3 "PD" del suddetto videogioco...

Bello l'approccio "PETscii"! :)


Lo scarico ed è un file ".T64"... Ed io ODIO i ".T64", massimamente perché non emulano precisamente il funzionamento "vintage" del "software" registrato su audiocassetta.
In tal senso, se dai in pasto un ".T64" al "WinVICE", subito dopo il "LOAD", la procedura si automatizza e l'emulatore legge automagicamente dal supporto virtuale senza interventi da parte dell'utente...
Inutile dire che al Marte piacciono i ".TAP", con i quali, diversamente, l'emulazione è fedele e devi fare tutto a manina bella, pigiando financo i tasti virtuali del registratore fittizio (ché il vero solluchero è dato dalla barra inferiore dell'emulatore dove, accanto ai "leds" dei "drives", compare perfino il contagiri a tre cifre che scandisce l'avanzamento del nastro!!! :D ).
...Ma le risorse del Marte sono infinite.
Una botta di "Wav-Prg And Audiotap" e la conversione è servita! :)

Il programma che converte tutto in tutto il resto!!! :D


".TAP" alla mano, si testa il gioco!
...E qui il Marte scopre subito due cose. 1) Il programma in questione è completamente scritto in "BASIC". Viene scompattato nella memoria del "computer" al primo avvio, ma basta un volgarissimo "RUN-STOP + LIST" per interromperne l'esecuzione e scoprirne tutti gli altarini... ;)
Ma soprattutto 2) IL CODICE È BUGGATO!!!
Eh già!
Nel dettaglio, vi ricordate che cosa si diceva di "Lemonade"? In questo gioco si acquistano degli ingredienti per produrre e vendere limonate, giusto? In questa specifica versione del "videogame", alla fine di ogni fase d'acquisto, il "computer" ci domanda se siamo sicuri di ciò che abbiamo fatto oppure se vogliamo ripensarci. Se ci ripensate e decidete di ritoccare le scorte di bicchieri e/o di concentrato di succo di limone, non ci sono problemi. Il programma vi restituisce i soldi spesi, scala correttamente le materie prime e vi fa rifare l'acquisto da capo. Diversamente, se decidete di rivedere le scorte di zucchero, il gioco vi restituisce i soldi, decurta la massa di dolcificante di una quantità industriale di chili di prodotto (mandandola in negativo all'inverosimile...) e se la ride, costringendovi in una situazione senza uscita!
...Ed a questo punto, l'illuminazione!
Il programma è scritto in "BASIC", giusto? Caspita, ero un genio del "BASIC", io!!! "10 PRINT "CIAO!" 20 GOTO 10" era il mio pane quotidiano, al tempo! :)
Lo fixo?! LO FIXO! (O meglio: non ho idea di come potrei fare per aggiustarlo, ma ci provo uguale!!! :D ).
Detto, fatto.
Accortomi dell'errore e maturata la suddetta riflessione, interrompo prontamente l'esecuzione del programma e lo salvo su un "floppy disk" virtuale da "BASIC", in emulazione (SAVE "LEMONADE",8, dopo aver creato ed inserito nel "drive" virtuale "#8" un ".D64" creato ad uopo... Facile, no? ;) ).
Questo perché, utilizzando un altro bel programmino tutto "Drag&Drop" ("Arc64"), posso facilmente estrarre il file ".PRG" del programma "BASIC" vero e proprio.

"Arc64".


...Qualche secondo più tardi, mi ritrovo per le mani un "LEMONADE.PRG" con il quale, in verità, non so proprio che cosa fare.
Esisterà un programma in grado di leggere il "file" in questione, restituendomi un listato leggibile, editabile e ricompilabile a fine processo?
"Google Is Your Friend!".
Tralasciando i vari ambienti integrati di sviluppo che consentirebbero al suo genio (qualora ci fosse... :) ) di produrre dei capolavori, il Marte (dopo mezza giornata di sudatissime ricerche...) si imbatte in "BasEdit.Net". Un programmino leggero leggero che fa proprio al caso suo!
"Ok! Ci siamo quasi... È giunta l'ora della verità!!!".
Carico "LEMONADE.PRG", con "BasEdit.Net". Il "file" si apre senza problemi, restituendomi una familiare sensazione di fanciullezza, televisori in bianco e nero e cubettoni... :P
Qualche minuto più tardi, grazie ai provvidenziali commenti sparsi nel codice (senza i quali mai nella vita sarei riuscito a capire dove andare a parare...), mi sposto con sicurezza nella sezione del programma che presumibilmente contiene l'errore.
Quello che vedo è questo...

Sembra facile...


L'unica cosa che so, è che l'errore è indubbiamente nella sezione "MAKE CHANGES", perché tutto il resto funziona in maniera appropriata...
Cerco di leggere il codice e l'unica cosa che mi pare abbastanza chiara è che le tre espressioni alle linee 2140, 2150 e 2160 si occupano di effettuare materialmente l'"undo", restituendo i soldi e scalando i prodotti; quindi, quella relativa allo zucchero (2140), deve essere quella sbagliata.
Problema: il Marte ha seri problemi con l'aramaico, il latino ed in generale tutte le lingue morte. (Si. Prima ironizzavo sulle mie straordinarie doti di programmatore... :P ). Della serie: riesco solamente ad intuire le funzioni, ma di fatto non capisco le meccaniche profonde che si celano dietro al loro funzionamento.
Diversamente, sono abbastanza bravo a fare dei raffronti...
In tal senso, nelle tre sezioni di codice subito sopra all'incriminata, ci sono altrettante righe di programma che si occupano delle procedure d'acquisto di zucchero, limone e bicchieri (nel dettaglio: 1830, 1940 e 2050).
Guarda caso, queste tre formule sono perfettamente speculari rispetto alle tre della sezione "MAKE CHANGES". (A parti invertite, logicamente, perché se da una parte c'è un segno meno, dall'altra trovo un più...).
Una di queste, tuttavia, è radicalmente diversa. L'equazione che definisce la variabile "IS" alla linea 2140, infatti, non è assolutamente speculare rispetto alla controparte leggibile in 1830. In tal senso, se da un lato leggo "IS=IS+(B1*VAL(U$(5)))", nella sezione dove si verifica l'errore trovo: "IS=IS-(5*B1)".
Per non saper né leggere, né scrivere, improvviso. Correggo l'equazione in 2140, trasformandola in "IS=IS-(B1*VAL(U$(5)))", salvo il file ".PRG" modificato, lo copio su un "floppy disk" virtuale, lo carico con il "WinVICE" e...
FUNZIONA!!! :D

Potrebbero interessarti anche :

Possono interessarti anche questi articoli :