RetroMagazine 48
RetroMagazine 48
Allo stesso modo, lo sviluppo del software ha beneficiato di ◊ Cecconoid (Amiga) Pag. 58
questa evoluzione tecnologica che ha permesso l'incontro, ◊ Mikie (Atari 8bit) Pag. 60
anche virtuale, di sviluppatori ed appassionati portando una ◊ Roguecraft (Amiga) Pag. 62
ventata di innovazione nel modo di approcciare la ◊ Robo Tito (Atari 2600) Pag. 65
programmazione. Ne sono esempio le decine di giochi che ◊ The Heart of Salamanderland (CPC) Pag. 66
periodicamente vengono sfornati per le nostre retro-macchine
◊ Formula V20 1985 (VIC20) Pag. 68
e, in questo specifico numero, le conversioni di Prince of Persia
◊ Princess Paloma's Rescue (MSX2) Pag. 69
per Plus4 e VIC20. Alzi la mano chi avrebbe immaginato
possibile 40 anni fa questo piccolo miracolo... ◊ Prince of Persia (Plus4) Pag. 70
◊ Prince of Persia (VIC20) Pag. 71
Voglio inoltre invitarvi a riflettere su come il retrocomputing ◊ Pocket Bomberman (GB/GBC) Pag. 72
non sia solo una celebrazione della tecnologia del passato, ma ◊ The Amiga Arcade Classic CD32 (Amiga) Pag. 73
un modo per comprendere meglio l'innovazione continua, ◊ Marathon (Mac/Linux) Pag. 74
analizzando come i principi fondamentali della programmazione
◊ Kien (GBA) Pag. 76
e del design hardware degli anni '70 e '80 abbiano gettato le
◊ 3D Pool (C64) Pag. 77
basi per le soluzioni avanzate che vediamo oggi.
Speriamo che questo numero continui ad ispirarvi a riscoprire il • Carlo N. Del Mar Pirazzini • Marta Rossmann
fascino dei computer del passato e a riconoscere il loro impatto • Daniele Brahimi • Gianluca Girelli
duraturo sull'innovazione tecnologica contemporanea. • Francesco Fiorentini • András Vajda
• Giulio Fieramosca • Fredrik Ramsberg
Francesco Fiorentini • Roberto Del Mar Pirazzini
• Giampaolo Moraschi • Immagine di copertina:
• Leonardo Miliani Giuseppe Mangini
migliorano e, agli inizi del 1984, viene messa in vendita colori contemporanei sullo schermo da una tavolozza di
anche quest’ultima. Fortunatamente, l’ex amministratore 64. Gli sprite gestibili passano a 64, ognuno con 16 colori.
David Rosen e l’attuale presidente Hayao Nakayama, con Il chip audio è lo stesso dell’SG-1000 ma, per risparmiare
il supporto finanziario del gruppo CSK Corporation, spazio e componenti, viene integrato direttamente nel
rilevano l’azienda ed iniziano un piano di rilancio. Rivedono chip grafico.
l’SG-1000 per renderlo più esteticamente accattivante, Il 20 ottorbe 1985, due giorni dopo che Nintendo ha
risolvendo alcuni problemi progettuali della prima versione, messo in vendita negli USA la versione internazionale del
come ad esempio i joystick che non si possono staccare Famicom, ribattezzata Nintendo Entertainment Syste
dal corpo principale. L’SG-1000 Mark II viene messo in (NES), Sega presenta in Giappone il Mark III, evoluzione
commercio a metà del 1984 ma, anche in questo caso, dell’SG-1000 Mark II con cui condivide ben poco, essendo
le vendite non vanno bene. Nintendo ha attuato un’aggressiva una console completamente diversa (fig. 2).
politica commerciale legando a sé gli sviluppatori di
videogiochi: chi vuole pubblicare giochi per il Famicom Sebbene dotata di caratteristiche tecniche superiori, la
deve rilasciarli in esclusiva per la sua console. Non potendo console non riesce ad imporsi sul NES sopratutto per le
offrire gli stessi giochi della concorrente, l’offerta di Sega citate esclusive che Nintendo riesce a strappare ai
è composta per lo più da conversioni dei suoi arcade. produttori di videogiochi. Nonostante le non brillanti
Concettualmente, poi, l’hardware è lo stesso del precedente vendite in patria, Sega decide comunque di esportare la
sistema, basato sul TMS9918A che è oggettivamente console pensando che riesca a fare meglio sui mercati
inferiore al chip video del Famicom: quest’ultimo offre internazionali di quanto stia facendo in Giappone. Per
molti più sprite, oltretutto multicolore, ed una tavolozza operare al meglio sul prolifico mercato statunitense, viene
molto più ricca. Sega decide pertanto di rivedere il progetto fondata una succursale denominata Sega of America al
del TMS9918A e ne tira fuori un chip che è capace di 32 cui comando viene posto Bruce Lowry, che viene direttamente
Fig. 2 - Il Sega Mark III, evoluzione dell'SG-1000 Mark II e progenitore del Master System
(foto: Muband – fonte: Wikimedia Commons)
Pagina 4 di 78 RETROMAGAZINE WORLD ANNO 8 - NUMERO 48
HARDWARE
da Nintendo of America, dove ha ricoperto il ruolo di vice- capitano Kirk di Star Trek, per pubblicizzare il suo VIC-20.
presidente del reparto vendite. La scelta del nome aziendale Cercando di incrementare le vendite, Sega of America si
è anche opera sua: egli infatti reputa che “Sega” e accorda con la catena di giocattoli Tonka cedendo l’esclusiva
“America” siano due parole che stanno bene insieme, e, sulla commercializzazione negli USA, sperando che le
poi, venendo da un’azienda che si chiama Nintendo of vendite della console, acquistabile anche nei comuni
America, la scelta sembra scontata. Sega of America si negozi di giocattoli, possano risalire. Purtroppo Tonka
occupa inizialmente della revisione estetica della console non ha esperienza nella gestione delle vendite di dispositivi
per adattarla ai gusti occidentali: viene abbandonato il videoludici elettronici ed i numeri continuano a languire.
case bianco a favore di uno più scuro, dotato anche di Alla fine del 1987 Sega mette in vendita il Master System
plastiche più lisce e con angoli più pronunciati, ripulendo anche in Giappone, ma anche qui le cose continuano a
anche l’aspetto spigoloso della parte superiore e non andar bene, non riuscendo a contrastare il NES.
imprimendoci una grafica che ricorda quella dei lettori di Per il Master System va molto meglio in altri mercati. In
musicassette. Europa la console arriva a metà del 1987, inizialmente
Alla console viene assegnato il nome di Master System in Gran Bretagna, Francia e Germania, ma con un avvio
mediante un sondaggio fatto fra i dipendenti stessi di della commercializzazione segnato da un incidente di
Sega of America. L’avallo definitivo arriva comunque dal percorso. A causa della lentezza di Sega nel soddisfare i
presidente della casa madre giapponese Okawa, che lo preordini, i distributori locali accusano forti perdite
approva anche per via del richiamo al fatto che in una economiche e recidono i contratti. Agli inizi del 1988
qualunque competizione c’è sempre solo un “Master”, Virgin Mastertronic prende in mano la distribuzione su
colui che si impone su tutti gli altri, e ciò viene visto come tutto il mercato europeo e spinge la console facendo leva
benaugurante per i destini della console. sulle sue superiori capacità grafiche rispetto al Commodore
64 ed al Sinclair Spectrum. Forte anche della non buona
Commercializzazione penetrazione sul suolo europeo del NES, il Master System
La console viene presentata al CES di Chicago che si tiene si afferma velocemente come il sistema da gioco più
nel mese di luglio del 1986 e messa in vendita nel mese venduto: nel 1990 Virgin Mastertronic vende poco meno
di settembre dello stesso anno. La confezione, bianca e di 1 milione di Master System. Forte di questi numeri,
con una trama a quadretti, contiene la console, diversi sviluppatori di giochi europei decidono di pubblicare
pomposamente chiamata “Power base”, una pistola ottica, i loro titoli per la console di Sega, con il risultato che il
due controller ed una cartuccia multi-gioco, il tutto al parco giochi del Master System versione PAL batte quello
prezzo di 200 dollari. Sega investe circa 15 milioni di NTSC: sono circa 100 i giochi prodotti negli USA, contro
dollari per promuovere la console ma i risultati non sono i 300 prodotti in Europa.
quelli sperati: alla fine della stagione natalizia, quando La console viene presentata anche in Sud Corea, dove
la console è in promozione a circa 150 dollari per contrastare riceve una buona accoglienza e resta la console più
le vendite del NES, Sega ha venduto circa 250.000 unità venduta fino almeno al 1993. Anche in Australia i numeri
del Master System, meno di un quarto di quanto ha venduto sono molto buoni. Alla fine del 1989 il Master System
Nintendo. Nonostante Sega spinga sulla qualità dei giochi viene distribuito anche in Brasile, ad opera di TecToy, che
con lo slogan “la grafica sulla scatola è la grafica sul lavora molto bene commercializzando la console con
video”, ad indicare che ciò che si vede sulle confezioni dei successo, spingendola non solo con la pubblicità ma
giochi non sono immagini ritoccate ma il vero aspetto dei anche realizzando localizzazioni in portoghese dei giochi
titoli così come appaiono sullo schermo, il NES continua per la console.
a vendere molto di più per via degli accordi di esclusiva Nel 1988 viene presentato in Giappone il Mega Drive, la
di Nintendo ed anche per la poca offerta di giochi da parte prima console Sega a 16 bit, e subito tutti gli sforzi della
di altri sviluppatori. In pratica, in Nord America, i giochi società si concentrano sulla nuova arrivata. Il Master
per la console sono prodotti, oltre che da Sega, solo da System cade presto nel dimenticatoio: l’ultimo gioco
Activion e Parker Borthers. Per spingere le vendite viene pubblicato è del 1989, poi un lento declino fino al 1991,
assunto un ex-astronauta della NASA, Scott Carpenter, quando viene tolta dal mercato. Nel 1992 sparisce anche
un po’ come Commodore ha fatto qualche anno prima dal Nord America, senza lasciare troppa traccia di sé. Nel
prendendo come volto immagine William Shatner, il 1994 esce di scena anche dalla Corea mentre in Europa,
RETROMAGAZINE WORLD ANNO 8 - NUMERO 48 Pagina 5 di 78
HARDWARE
Fig. 3 - Scheda madre del Sega Master System: si notano la CPU Z80 (il chip centrale posto verticalmente), il
VDP (il grosso chip leggermente a sinistra rispetto al centro). Sul lato destro la porta Sega Card (in basso) e
quella per le cartucce (in alto) (foto: Evan-Amos – fonte: Wikimedia Commons)
grazie ai giochi che continuano ad essere regolarmente lo sfondo) mentre altri 16 sono a disposizione per gli
pubblicati, resiste fino al 1996. Il Brasile resta un caso a sprite. La tavolozza è indicizzata ed i 32 colori sono scelti
parte: terminata la commercializzazione ufficiale, TecToy fra i 64 disponibili e numerati da 0 a 31. In realtà c’è una
ha continuato a produrre, ad intervalli regolari, varie piccola precisazione da fare: mentre per i colori dello
console compatibili con il Master System e, recentemente, sfondo si può scegliere fra i colori per le tile (dallo 0 al
anche un dispositivo compatibile sia con il Master System 15) oppure fra quelli per gli sprite (dal 16 a 31), per questi
che con il Mega Drive. ultimi si può scegliere solo fra i colori a loro riservati (dal
16 al 31).
Caratteristiche tecniche La risoluzione è di 256x192 pixel ma può salire a 256x224
Sviluppata per risultare migliore del NES, la console riesce e, nei sistemi PAL anche a 256x240: in quest’ultimo caso
ad assolvere questo compito in maniera egregia, offrendo non si ha il classico bordo intorno all’immagine. Il VDP
una grafica con più sprite e colori della controparte gestisce un massimo di 488 tile differenti per lo sfondo,
Nintendo. Come detto, il Video Processing Unit (VDP), il che possono essere riflesse in orizzontale o verticale.
cuore grafico del Master System (fig. 3), deriva direttamente Inoltre, le tile possono apparire sia davanti che dietro agli
dal TMS9918A, un chip di Texas Instruments ben noto sprite. Questi ultimi possono essere 64 contemporaneamente
agli amanti dei computer anni ‘80 avendo equipaggiato sullo schermo (il doppio di quelli offerti dal TMS9918A
sia il TI-99/4A sia tutti i computer della serie MSX. Partendo originale), per un massimo, però, di 8 per singola riga
da questa base, i progettisti Sega hanno tirato fuori video. Rispetto a quelli gestiti dal chip da cui deriva, gli
un’unità capace di visualizzare un’immagine con molti sprite del VDP sono multicolore e le loro dimensioni
più colori: mentre il TMS9918A è limitato a 16 colori (anzi possono essere di 8x8 oppure 8x16 pixel: esiste anche
15, perché il 16° in realtà è un “non colore”, una trasparenza) la possibilità di ingrandirli raddoppiandone le dimensioni:
il VDP offre una tavolozza di ben 64 colori, di cui 32 visibili essi passano, rispettivamente, a 16x16 e 16x32 pixel.
contemporaneamente sullo schermo, secondo una Come le tile dello sfondo, anche gli sprite attingono i dati
ripartizione particolare: 16 colori sono disponibili per le a blocchi di 8x8 pxiel dalla memoria. Ciò comporta che
“tile” (le tessere, o caratteri, di 8x8 pixel che compongono più sprite con dettagli diversi si hanno più memoria si
Accessori e revisioni
Per il Master System sono stati prodotti diversi accessori.
Quelli più famosi sono gli occhiali SegaScope 3-D (fig. 5)
Fig. 4 - Una Sega Card con il gioco Hang-On e la pistola ottica Light Phaser (fig. 6). I primi sono degli
(fonte: [Link]) speciali occhiali che permettono, se abbinati a giochi
toglie alle tile dello sfondo, e viceversa. Infine, il chip sviluppati appositamente, una visione steroscopica. Gli
gestisce anche lo scrolling verticale e orizzontale. occhiali si collegano alla console tramite la porta delle
Il chip audio è integrato nello stesso silicio del VDP: si Sega Card e per essi sono stati sviluppati solo 8 giochi,
tratta del core audio dell’SN76489, capace di 3 voci ad tra cui “OutRun 3D” e “Zaxxon 3-D”. La Light Phaser è
onda quadra e di un generatore di rumore. Niente di una pistola ottica realizzata riproducendo il profilo dell’arma
esaltante, ma nel complesso un discreto processore audio usata nell’anime giapponese Zillion, ed è stata usata in
molto diffuso, essendo usato sul TI-99/4A, sul BBC Micro, 13 giochi, tutti pubblicati al di fuori del Giappone. Non
sul ColecoVision e su diversi giochi arcade. Nella versione mancano le rivisitazioni delle classiche periferiche di
originale giapponese della console, la Mark III, è presente gioco, come il Sega Control Stick, un joystick in stile
un ulteriore chip audio, lo Yamaha YM2413, per la arcade, oppure il Sega Sports Pad (non rilasciato in
generazione di audio FM. Europa), un trackball studiato per i giochi sportivi ma
La CPU è la stessa Zilog Z80 dell’SG-1000, con clock di usato solo in 3 titoli (“Sports Pad Football”, “Sports Pad
3,58 MHz. La console offre 8 KB di RAM per la memorizzazione Soccer” e “NFL Sunday Ticket”).
dei dati del gioco in esecuzione e 16 KB di VRAM, esclusivi
del VDP. I giochi sono distribuiti su 2 supporti differenti: Sega ha rilasciato anche una versione portatile della
le classiche cartucce ROM e le Sega Card, un formato console, il Sega Game Gear (fig. 7): è stato presentato in
proprietario introdotto con l’SG-1000 (fig. 4). Queste Giappone a fine 1990, poi nel 1991 in Europa e Stati Uniti
ultime sono di dimensioni più contenute e più economiche e infine l’anno successivo in Australia e Nuova Zelanda.
da produrre, risultando in giochi con un costo di acquisto Si tratta di un dispositivo a batterie con un piccolo schermo
inferiore rispetto a quelli distribuiti sulle classiche cartucce LCD a colori di 3,2 pollici di diagonale: rispetto al Master
ma, per contro, offrono significativamente meno spazio System, la risoluzione è di 160x144 pixel ed i colori sono
di archiviazione: mentre la capacità di una Sega Card va sempre 32 contemporaneamente su schermo ma il suo
RETROMAGAZINE WORLD ANNO 8 - NUMERO 48 Pagina 7 di 78
HARDWARE
“Wonder Boy III” (fig. 17). Grazie alle capacità grafiche sono invece rivelate vere e proprie cacce all’oggetto per
della console, la produzione di giochi è rimasta attiva cultori della console. Alla fine dei salmi, le 13/15 milioni
anche dopo la sua dismissione e la diffusione dei sistemi di console vendute in tutto il mondo e le circa 8 milioni
di nuova generazione, con conversioni di giochi nati per di unità vendute nel solo Brasile sono numeri che esprimono
questi sistemi, come “Street Fighter II” o “Prince of bene l’amore per un oggetto che è rimasto nel cuore di molti.
Persia” (fig. 16).
Eredità
Nonostante nella sua vita commerciale non abbia fatto
registrare numeri da record, il Master System resta
comunque una pietra miliare nella storia di Sega. E’ la
console che ha rafforzato l’immagine dell’azienda
giapponese come produttore di console, raccogliendo
l’eredità dell’SG-1000 e consolidando la sua presenza
nel settore, e preparando il territorio per quel successo
di vendite che è stato poi il Mega Drive, nonché introducendo
la mascotte Sonic che è divenuta l’immagine stessa
dell’azienda. Le sue caratteristiche grafiche hanno lasciato
il segno in migliaia di fan tant’è che, a distanza di anni
Fig. 10 - Asterix
dalla sua dismissione, in alcuni Paesi console messe in (fonte: [Link])
vendita in operazioni di amarcord non proprio sicure si
Fig. 11 - Alex Kidd in Miracle World Fig. 12 - Castle Illusion - starring Mickey Mouse
(fonte: [Link]) (fonte: [Link])
Fig. 17 - Wonder Boy III - The dragon's Trap Fig. 18 - Sonic the Hedgehog
(fonte: [Link]) (fonte: [Link])
Tiny Disk II
di Giulio Fieramosca
Una decina di anni fa sono entrato in possesso di un Apple ] prima cosa ho iniziato a documentarmi per studiare
[e, salvato prima che venisse gettato. I molteplici problemi l’elettronica ed il protocollo.
- i chip di memoria guasti e il floppy drive meccanicamente
guasto - non lo hanno reso molto appetibile per le Il protocollo - Organizzazione fisica dei dati
sperimentazioni, ed è rimasto per anni nel garage della L’involucro morbido dei floppy da 5¼” protegge un
nostra “RetrOfficina”, tirato fuori soltanto per le rare dischetto di materiale plastico, ricoperto di un sottile
esposizioni. Questo fino al 2022 quando mi sono deciso strato magnetizzabile. Le informazioni sono registrate
di dedicare un bel po’ di tempo al restauro di questa digitalmente applicando un campo magnetico localizzato
interessante e storica macchina. ad un’area ristretta, che vi resta impresso. La lettura
Tagliando corto, il floppy drive originale è rotto e non avviene con il processo inverso, captando i cambiamenti
sono riuscito a ripararlo. Il che è un gran dispiacere, visto nella magnetizzazione del dischetto.
che buona parte del software per questa macchina circolava Lettura e scrittura avvengono mediante una coppia di
su dischetto. Non solo, pur essendo dotata di interfaccia testine, poste a distanza ravvicinata dal dischetto, mentre
a nastri, in molti casi era necessario precaricare versioni quest’ultimo è in rotazione. Immaginando la superficie
più avanzate di BASIC o di DOS... da dischetto. Mi sono suddivisa in intervalli regolari, si utilizzata una particolare
guardato in giro per valutare l'acquisto di uno di quegli codifica per mappare i bit su disco: il bit “1” si rappresenta
onnipotenti emulatori di floppy, come il floppyEmu o il con una inversione di polarità e lo “0” con l’assenza di
wDrive. Sono belli ma costosi. Il che mi ha spinto a transizioni di polarità.
realizzare la mia personale versione di emulatore floppy,
con l'intenzione di rendere tutto il progetto disponibile online. Il campo magnetico impresso nel dischetto sarebbe troppo
Prima di reinventare l’acqua calda ho dato un’occhiata debole per poter essere direttamente digitalizzato: per
sul web alla ricerca di un qualche progetto libero, ed in questa ragione è necessario un amplificatore che mantenga
effetti mi sono imbattuto in un certo “SDISK II”, di cui costante l’ampiezza del segnale analogico, così da poter
sono disponibili online sia gli schemi che il sorgente. Ho leggere sia un disco appena scritto che uno più rovinato.
provato a realizzarlo senza successo, ma non ci ho messo Sfortunatamente, una lunga sequenza di zeri dà un output
molto impegno: l’hardware non mi convinceva del tutto. pressoché costante ed il Drive II tenderà ad “alzare il
In ogni caso il firmware è stato un ottimo ed utilissimo volume”... arrivando a captare le minuscole variazioni
punto di partenza su cui lavorare per il mio progetto. dovute al rumore di fondo. È per questa ragione che la
In tutto questo non avevo la minima idea di come funzionasse scrittura di una sequenza di bit non può mai contenere
un floppy, men che mai quello dell’Apple II. Quindi, per più di due zeri consecutivi. Questa è una grossa limitazione
La particolarità dell’Apple Drive II, che lo differenzia da Come accennato, ciascun field è preceduto dalle sequenze
altri modelli dell’epoca, sta nella estrema semplicità di "self-sync FF". Oltre a servire da pattern di
dell’hardware. Per contro, la gestione della geometria del sincronizzazione, questi “gap” fungono da buffer per la
Pagina 12 di 78 RETROMAGAZINE WORLD ANNO 8 - NUMERO 48
HARDWARE
L’emulatore
Per implementare l’emulatore ho seguito le orme del
progetto SDISK II ed ho utilizzato soltanto un microcontrollore.
Le immagini disco da servire vengono prelevate da una
comune SD card formattata in FAT e servite sull’interfaccia
disco.
Il sistema del floppy drive dell’Apple II è fondamentalmente Per scegliere l’immagine e monitorare lo stato del drive
composto di due schede: il drive ne contiene una, denominata ho predisposto in prima battuta una interfaccia a riga di
“analog card”, che si occupa di effettuare la conversione comando via seriale, poi una interfaccia semi grafica tramite
dal mondo analogico al mondo digitale; la seconda scheda display OLED e selettore, che non richiede la presenza di
è contenuta all’interno dell’unità centrale, detta “interface un secondo computer.
card”, e si occupa del coordinamento ad alto livello. Include, La scelta del microcontrollore è ricaduta sull’architettura
fra le altre cose, una ROM per il codice di bootstrap ed una AVR - per intendersi, la stessa della prima serie Arduino –
serie di chip necessari a “serializzare” e “deserializzare” perché avevo una scheda di sviluppo con una variante più
i byte da scambiare con il processore. Di fatto, l’emulatore performante da utilizzare per le prime prove. Inoltre, anche
di floppy dovrà spacciarsi per la analog card. l’SDISK II è basato su AVR ed il suo codice è stato un buon
Il drive resta in attesa finché il segnale “drive enable” è punto di partenza.
disattivato. Attivare il drive significa portarlo in modalità
lettura, e da quel momento lungo il filo di read inizieranno
a scendere i dati letti dalla testina. La logica di digitalizzazione
ripulisce tutto quel che la testina è in grado di captare e
restituisce un segnale squadrato costituito da un treno di
impulsi, uno per ciascun bit “1” rilevato, e con spaziatura Tutta la sezione “moderna” opera a 3.3V, un vincolo imposto
di 4µs. dalla scheda SD e dal display. L’interfaccia con l’Apple II
Il drive commuta in scrittura non appena si attiva anche richiede particolare cautela, non solo per le differenti
il segnale di “write request”. In questa fase viene accesa tensioni operative (5V vs 3.3V), ma anche per gli standard
la testina di scrittura che col proprio campo magnetico va logici non compatibili (LVCMOS vs TTL): anche riscalando
a sovrascrivere qualsiasi cosa ci fosse in precedenza. le tensioni, le due parti potrebbero non capirsi alla perfezione.
Commutare o lasciare invariato il “write” determina il Nella prima versione sperimentale mi sono accontentato
nuovo contenuto del disco, ovvero se scrivere un bit “1” di usare quel che avevo: traslatori di livello economici ma
oppure uno “0”. lenti per scendere verso l’emulatore e qualche buffer per
rigenerare il segnale dell’emulatore. Fortunatamente
esistono dei circuiti integrati adatti allo scopo che ho
inserito nella versione realizzata su PCB.
Resta la gestione del posizionamento della testina sulla Ho approfittato anche dei LED presenti sulla scheda di
traccia, di fatto tramite un motore passo passo controllato sviluppo per avere un feedback visivo dello stato del lettore,
direttamente tramite le quattro fasi con attivazione per esempio riportando la posizione della testina.
sequenziale. Per cambiare traccia in realtà è necessario
attivare due fasi consecutive, probabilmente per garantire Lettura
una maggiore precisione nell'allineamento motore-traccia. Esistono più formati con cui possono essere digitalizzate
Le “tracce intermedie” venivano utilizzate per particolari le immagini disco dell'Apple II, ma per mantenere decenti
RETROMAGAZINE WORLD ANNO 8 - NUMERO 48 Pagina 13 di 78
HARDWARE
le prestazioni dell'emulatore ho mantenuto il formato .NIC Questo può essere svolto interamente a controllo di
utilizzato sull’SDISK II. Si tratta di un file binario che programma, cosa effettivamente fatta nel progetto originale
memorizza i bit grezzi fisicamente letti dalla testina del dell’SDISK II mediante l’uso di alcune routine in assembly.
lettore. Il file è strutturato per settori e tracce crescenti. Nella mia implementazione ho voluto delegare la generazione
Ho riportato un paio di estratti nella coppia di figure che del segnale di lettura ad una periferica hardware presente
seguono, evidenziando la struttura dati ed il sopra citato nel microcontrollore, detta timer PWM. Tale periferica
address field. permette di generare autonomamente un segnale ad onda
Comprendendo i gap, la dimensione di ciascun settore quadra, programmandone il periodo e la frazione di periodo
nel .NIC è di 416 byte. A questi, sono aggiunti 96 byte di in cui il segnale deve “rimanere basso”.
fill a 0, così da mantenere ciascun settore allineato a blocchi Questa periferica non è altro che un contatore con un
di 512 byte. Questa scelta è dettata dalla specifica di singolo pin di uscita associato. Se ne possono programmare
funzionamento di lettura e scrittura da scheda SD, che il valore massimo - il periodo - ed un valore di soglia. Finché
richiede di operare a multipli di un blocco, proprio pari a il valore del contatore è minore del valore di soglia, il pin
512 byte. rimane a 0. Superato il valore intermedio, l’uscita viene
portata ad 1.
della testina. Nell’emulatore, il cambio della traccia è gestito la presenza della periferica di DMA.
dal codice principale, non c’è necessità di scomodare Il DMA, o Direct Memory Access, è un componente del
interruzioni poiché si tratta di segnali molto lenti, tanto microcontrollore che consente di effettuare scambio dati
che si riescono ad osservare ad occhio nudo tramite dei LED. fra la memoria ed una periferica senza l’intervento diretto
La routine di “controllo traccia” monitora i quattro segnali del processore. In questo caso la periferica è la SPI che
di fase e incrementa opportunamente il contatore interno gestisce la comunicazione con la scheda SD.
di traccia in base alla direzione impartita. Il cambio traccia Con il DMA, l’overhead si riduce al tempo tecnico necessario
potrebbe avvenire in qualunque momento, anche nel bel per impostare sul DMA l’indirizzo del blocco SD da leggere,
mezzo della lettura di un settore. Per non complicare troppo dopodiché questo verrà caricato in RAM in circa 300 µs.
la logica, ho deciso di non interrompere mai la lettura di Non importa attendere che il buffer DMA sia stato caricato
un settore e di applicare il cambio traccia solo quando per intero prima di iniziare a servire i dati sulla linea read,
viene fatto il caricamento di un nuovo blocco da SD. Tanto, tanto la scheda SD è molto più veloce.
nel mondo reale, i dati letti durante il cambio di traccia Non mi è sembrato utile ottimizzare ulteriormente la fase
sarebbero comunque invalidi e da scartare. di lettura, la scelta di usare il DMA si è rivelata utile più
Il controllo di traccia è incrementale e senza alcun feedback: che altro per scrittura e formattazione.
difatti, il computer effettua, ad ogni accensione, un
azzeramento forzato della posizione della testina muovendo
il motore alla cieca. È questo il motivo del rumore che fa il
disk drive all’accensione. È stato interessante un primo
esperimento di lettura in cui non avevo implementato la
gestione delle tracce: la prima traccia veniva letta con Scrittura
successo ma, passando alla successiva, il software si Bisogna differenziare la scrittura di un floppy in due casi
accorgeva dell’incongruenza tramite i campi dell’address distinti, ovvero la sovrascrittura di un settore e la
field. Anche in questo caso veniva tentato l’azzeramento formattazione. Sebbene si tratti in entrambi i casi di
della testina nella speranza di riallinearsi alla traccia giusta, operazioni di sovrascrittura, nel primo si va ad alterare il
purtroppo senza successo. contenuto di un singolo data field, mentre nel secondo
caso viene riscritta l’intera traccia, compreso l’address
field. La formattazione opera quindi su settori multipli ed
ha dei vincoli temporali molto più stringenti, tanto che il
Il vincolo temporale più stringente in lettura è imposto dai primo prototipo di tinyDisk non era in grado di supportare.
4 µs di periodo di bit all’interno dello stesso settore. Invece,
non c’è nessuna fretta di servire un nuovo settore. Sia Considerando il caso più semplice, la sovrascrittura di un
chiaro, le routine software dell’Apple II implementano un settore, si possono fare le seguenti assunzioni:
timeout che termina la lettura se il settore richiesto non è -prima di iniziare la scrittura di un settore, la routine Apple
leggibile entro un certo tempo. Ma questo intervallo di attende sempre di ricevere l'address field corretto per
tempo è sufficiente per svolgere un po’ di burocrazia. Per potersi allineare sul settore corretto, quindi inizia a
servire un nuovo settore è necessario indirizzare sovrascrivere il data field che segue;
correttamente il blocco corretto dalla scheda SD, operazione - l’address field non viene mai sovrascritto, serve per
effettuata a controllo di programma e che richiede qualche allinearsi al settore corretto;
decina di µs. - 0xD5 è un byte univoco e riservato, che può essere usato
Come dicevo, nel primo approccio non ho fatto uso di come marcatore di allineamento nella decodifica del segnale
buffering di settore. I dati sono letti bit per bit dalla scheda write;
SD ogni 4 µs e serviti immediatamente sulla linea read. La - durante la scrittura di un settore non verrà mai cambiata
scheda SD impone che i 512 byte di blocco debbano essere traccia, sarebbe alquanto controproducente.
letti per intero, per cui al termine del settore restano
comunque 96 byte da ignorare, che aggiungono un ulteriore La strategia per convertire il segnale di write in uno stream
overhead prima di poter iniziare a leggere il settore binario è semplice: per completare un byte è necessario
successivo. Per abbattere questi tempi morti ho sfruttato aver decodificato almeno 8 simboli. Ogni transizione
RETROMAGAZINE WORLD ANNO 8 - NUMERO 48 Pagina 15 di 78
HARDWARE
rappresenta un “1”. Lo “0”, ovvero la mancanza di una SD. A questo punto la scrittura in SD Card può procedere
transizione in uno slot di 4µs, richiede che sia predisposto autonomamente senza l'intervento della CPU, che è libera
un timer con periodo leggermente maggiore di 4us, per di decodificare il nuovo settore in arrivo.
tenere conto delle minime fluttuazioni del clock dell'Apple II. Pur avendo un singolo buffer è raro che la lettura del nuovo
settore sovrascriva una parte non ancora trasferita sulla
memoria di massa, perché sussiste un fattore x8 fra il data
rate dell'SPI in uscita e del Drive II in ingresso.
La criticità temporale, in effetti, risiede nel tempo di
finalizzazione della scrittura in scheda SD: queste memorie,
dopo aver immesso il buffer tramite SPI, richiedono un
tempo ulteriore per effettuare la cancellazione fisica e la
La routine software dell’Apple II inizia sempre riscrivendo sovrascrittura, tempo che varia in base al modello e all'età
la sequenza di self-synced FF, che può essere scartata. La del supporto di memoria.
prima informazione utile, e fondamentale per potersi Questo ritardo aggiuntivo ha dato qualche grattacapo, ma
allineare, è il prologo del data field, ovvero il byte 0xD5. si può mitigare forzando il salvataggio dei settori di una
Rilevato quello, tutti i byte che seguono possono essere stessa traccia in aree fisicamente contigue della scheda
salvati in un buffer che sarà opportunamente caricato nel SD - di fatto imponendo una blanda non frammentazione
blocco corretto della SD, sovrascrivendo il file .NIC originario. dei file .NIC - e permettendo una ottimizzazione nelle
Al termine della scrittura, l’Apple II torna in lettura per operazioni fisiche di cancellazione e sovrascrittura.
allinearsi, eventualmente, con un altro settore da
sovrascrivere. Giudizio finale e riferimenti
In caso di più settori da sovrascrivere, il mio firmware non L'obiettivo di sostituire il drive originale con un emulatore
è in grado di gestire una nuova scrittura finché non è è stato raggiunto con successo. L'ho validato sul campo
terminato il “write back” sulla scheda SD. Fortunatamente, provando una serie di immagini disco di software "da
questo tempo non è così lungo e l’Apple II ha sufficiente esposizione": giochi, applicativi, demo... in lettura non ho
pazienza e non va in errore. Ovviamente è previsto un avuto problemi degni di nota.
timeout nel caso in cui non dovesse essere mai rilevato
l’address field da sovrascrivere. Lo stesso vale per la scrittura, testata sia salvando codice
Storia ben diversa riguarda la formattazione. Poiché la BASIC dal DOS, sia modificando arbitrariamente il contenuto
formattazione va a ridefinire la geometria del disco, in dei settori tramite il software CopyII+. La formattazione
questo caso la traccia viene interamente sovrascritta senza meriterebbe ancora delle indagini perché, sporadicamente,
alcuna attesa fra un data field e l’address field del settore fallisce quando si ha a che fare con schede SD particolarmente
successivo. Purtroppo il microcontrollore non ha abbastanza lente o vissute.
RAM per per memorizzare una traccia - già un singolo
settore porta via 512 byte dei 2K disponibili. Nonostante le semplificazioni, che limitano la fedeltà di
emulazione, il progetto si è rivelato una sfida ardua ed
averlo realizzato in casa è stato utile per imparare qualcosa
di nuovo. Ho provato a riassumere i tratti più salienti di
questo progetto senza scendere eccessivamente nel
dettaglio sperando di suscitare curiosità ed interesse
La soluzione che mi è sembrata più ragionevole è stata sull'argomento. Lascio ai più volenterosi la possibilità di
tentare di implementare una pipeline con l’unico buffer di approfondire direttamente sul codice del progetto rilasciato
settore disponibile. Il principio è il seguente: registrata la con licenza libera, che sia con l'obiettivo di realizzarne una
richiesta di scrittura, il buffer viene popolato decodificando propria versione o proporre modifiche e miglioramenti.
il segnale Write, come per la sovrascrittura del settore. Al
termine, c'è un breve periodo di grazia rappresentato dalla
scrittura del gap fra settori, che il firmware sfrutta per
istruire la periferica DMA a trasferire il buffer in scheda
Pagina 16 di 78 RETROMAGAZINE WORLD ANNO 8 - NUMERO 48
HARDWARE
Riferimenti
The Amazing Disk II Controller Card, descrizione del controller disco a cura del progettista del "Floppy Emu":
[Link]
Beige è bello!
THE A400 Mini, un gradito ritorno
di Carlo Nithaiah Del Mar Pirazzini
Dopo un’ondata di micro-console che include NES, SNES, MOS 6502, il 400 era posizionato sul mercato come il più
Megadrive, PC Engine e il ritorno di micro-home computer conveniente dei due e aveva una tastiera a membrana e
come C64 e Amiga, ora mettiamo mano su quello che un singolo slot per cartucce (l’800 aveva una tastiera
deve essere l’esperimento più interessante fino ad ora: meccanica e due slot per cartucce, oltre a Ram espandibile
l’Atari 400 Mini. e tanto altro).
Basato sulla gamma di computer domestici 8bit di Atari, Nonostante fossero stati lanciati come personal computer,
che arrivò sul mercato nel 1979, questa piccola versione l’Atari 400 e 800 erano supportati da un’ampia gamma
è un “perla” realizzata con una collaborazione tra Atari, di giochi, come Star Raiders del 1980 vera e propria Killer
Plaion e Retro Games ltd. Application per la macchina.
Al momento Atari è impegnata in una sorta di viaggio nel Anche la neonata Electronic Arts supportava attivamente
passato, avendo rilasciato una raccolta dei suoi giochi il sistema; l’iconico MILE di Danielle Bunten Berry fece il
per console moderne e l’Atari 2600+, una replica (quasi) debutto sulla gamma ad 8bit di Atari e sfruttò pienamente
a grandezza naturale della sua console di successo di le porte controller multiplayer.
inizio anni 80.
Tuttavia, l’Atari 400 è un’entità meno riconoscibile e Con l’avanzare del tempo, Atari rinnovò la sua gamma
potrebbe potenzialmente essere più difficile da vendere. con il 1200XL, 600XL e 800XL e, dopo che Sam Tramiel
Vale la pena dargli un’occhiata? Scopriamolo. rilevò l’azienda e la rinominò Atari Corporation, la serie
XE continuò la discendenza.
Una breve storia Rispetto all’Atari VCS/2600 da 30 milioni di vendite, il
Uscito nel 1979 insieme all’Atari 800, l’Atari 400 offriva duo 400/800 ne vendette circa quattro milioni di unità,
un’esperienza audiovisiva più avanzata rispetto ai suoi non un successo commerciali in termini comparativi, ma
rivali grazie all’uso innovativo dell’architettura del comunque un successo relativamente elevato per l’epoca.
coprocessore, una novità assoluta per un computer
domestico. ATARI 400 mini – Design e Controller
Mentre entrambe le macchine utilizzavano la stessa CPU Il 400 mini sembra una copia sputata del vero computer,
con il suo design angolare ispirato a Star Wars, la tastiera porte USB con funzioni da porte Joystick, replicando il
a membrana, quattro tasti quadrati gialli e il LED di computer originale (il che significa che è possibile giocare
alimentazione rosso. a MULE in quattro).
L’unica differenza visiva è la scritta “THE400” che sostituisce Sul retro abbiamo una quinta porta USB, una porta HDMI
“Atari 400” nella parte anteriore dello slot pseudo-cartuccia. e una porta USB-C per l’alimentazione. Ovviamente
Il sistema misura 2,0x6,0x5,3 pollici e pasa davvero poco troviamo anche il pulsante di accensione.
più di 200 grammi. La tastiera è ovviamente non funzionante,
come tipico per le emulazioni di console in miniatura. Tutti i sistemi ad 8bit Atari hanno tre chip coprocessore
Il pannello frontale sotto la tastiera contiene quattro personalizzati oltre alla CPU 6502: ANTIC, GTIA e POKEY.
Parliamo di giochi
Il sistema è dotato di 25 titoli. Molti sono classici senza
tempo, tra cui Bristles, Bruce Lee (rinominato Lee), Capture
the Flag, Fip and Flop, Miner 2049er, Star Raiders, The
Seven Cities of Golds.
L’Atari 8bit era una macchina perfetta per conversioni di
classici arcade e qui abbiamo l’imbarazzo della scelta:
Asteroids, Battlezone, Berzerk Centipede, Crystal Castles,
Millipede e Missile Command sono perfetti su queste
Fig. 4 - Il CXStick in dotazione in tutta la sua macchine!
“turgidezza” Mancano alcuni classici per mancanza di diritti (vedi i
Per mostrare la potenza di questi chip in emulazione, Il titoli Nintendo come Mario Bros, Donkey Kong).
400mini ha un processore AllWinner H3 (in pratica un Sono 25 titoli scelti con cura e molto giocabili e sulla
Cortex A7 quad-core), 256 gb di Ram e 128 gb di spazio pagina [Link]
di archiviazione, più che sufficienti per salvare i giochi e troverete tutti manuali.
impostare al meglio il sistema. Ho testato la mini console su un TV TCL 55 pollici in
Il joystick si chiama TheCXStick e assomiglia al CX40 modalità gioco e ho scoperto che il controller ha una
originale tanto amato da tutti noi. Devo ammettere che leggerissima latenza. Inferiore al quarto di secondo e
è un ottimo stick, con movimenti precisi e nessun clic di comunque nei limiti ragionevoli per una console plug and
troppo. Anche il pulsante di fuoco ha un buon fealing. A play.
differenza dell’originale, questo ha ovviamente un connettore Tutti i giochi testati non hanno presentato bug o errori
USB all’estremità del cavo. Ha anche un set di pulsanti né tantomeno blocchi.
supplementare (sono 7), ben inseriti nel design e poco La porta USB sul retro permette di caricare ulteriori titoli
invasivi. Quattro sono tasti direzionali nascosti sotto le attraverso una pendrive formattata in FAT32.
Questo significa poter accedere a tutta la ludoteca possibile fuoco e il secondo con il pulsante S (dorsale) e poi si
per i sistemi e anche alle nuove meravigliose produzioni. preme HOME per caricare.
The400 Mini accetta i formati nei file ATR, COM e XEX. Quando è il momento di inserire il secondo o un terzo
Rileva automaticamente il tipo di sistema in cui gira il disco, si tengono premuti i pulsanti direzionali HOME e
gioco e se richiede espansioni e accorgimenti di setup. GIU’. Sembra macchinosa ma funziona perfettamente.
PunyInform - Tutorial 3
di Fredrik Ramsberg - tradotto e adattato per RMW da Gianluca Girelli
definire lo "story name" e, nella maggior parte dei casi, E' il momento di includere tutte le estensioni della libreria
vorremo definire anche un titolo. Tienete presente che ^ che vogliamo utilizzare (confronta Extensions nel manuale
può essere utilizzato nelle stringhe per indicare caratteri per saperne di più) e scrivere tutte le entry point routines
di nuova riga. (Inoltre, ~ può essere usato per indicare i di cui abbiamo bisogno (Non c'è bisogno di leggerlo ora,
caratteri delle virgolette doppie, ma non è usato in questo ma quelle supportate sono elencate sotto Entry Point
codice.) Routines nel manuale PunyInform e ciò che fanno è
descritto nel Manuale di The Inform Designer sotto Entry
Definizione delle costanti Point Routines.) [NDR: la filosofia di gioco è basata sul
Nella sezione successiva vengono definite le costanti che manuale ufficiale del linguaggio Inform6, "The Inform
controllano PunyInform. Maggiori informazioni sulle Designer's Manual" scritto da Graham Nelson, giunto alla
costanti possono essere reperite nel manuale incluso versione 4. Trovate il link a fondo pagina.]. In questo
nella cartella di ogni release di PunyInform, alla voce particolare gioco, abbiamo deciso di non utilizzare alcuna
Customizing the Library. Per alcune costanti, come estensione o entry point routines. Possiamo sempre
INITIAL_LOCATION_VALUE, è necessario fornire un valore. cambiare idea in seguito, in caso di necessità.
Per le altre costanti, tuttavia, è sufficiente definire
semplicemente la costante (dandole effettivamente il Includere puny.h
valore 0). La libreria PunyInform controlla se la costante A questo punto includiamo il secondo ed ultimo file della
è stata definita o meno e modifica di conseguenza alcuni libreria, chiamato “puny.h”. Questo file, a sua volta,
aspetti del suo comportamento. Constant DEBUG; viene includerà tutti gli altri file della libreria.
utilizzato per abilitare la modalità debug, il che significa
che sarà disponibile una serie di verbi di debug, quindi Verbi, grammatica e azioni
puoi digitare cose come "GONEAR TEDDY BEAR" per Infine, definiamo nuovi verbi, estendiamo quelli esistenti
teletrasportarti dove si trova l'orsacchiotto, o "ACTIONS" con una nuova grammatica e definiamo nuove azioni.
per vedere quali azioni vengono attivate da ciò che digiti Lasciamo questa sezione vuota per ora.
sulla tastiera. È molto utile averlo durante lo sviluppo e
il test del gioco, ma ricordate di disattivarlo prima di Oggetti di gioco - Fig.2
rilasciare il gioco al pubblico. Costant
OPTIONAL_FULL_DIRECTIONS; invece abilita le direzioni Ora è il momento di definire gli oggetti del gioco. In genere
nord-ovest, nord-est, sud-ovest e sud-est. Se vuole usare si crea un oggetto per ogni locazione del gioco e un
direzioni multiple (invece delle quattro standard nord, oggetto per ogni cosa con cui il giocatore può interagire.
sud, est e ovest), dovete definire questa costante. Ricordate Una cosa può essere qualcosa di tangibile come una
che però rende il gioco un pochino più grande e un pochino chiave o un'auto, ma può anche essere qualcosa come
più lento. l'aria, l'acqua, la costa vista da un aereo, o anche un odore
Costant INITIAL_LOCATION_VALUE = Entrance; dice al o un suono. Gli oggetti possono essere utilizzati anche
gioco da dove il giocatoreinizierà la sua avventura. Tenete per concetti astratti e concetti di gioco come pensieri,
inoltre presente che ogni istruzione o affermazione deve conversazioni, menu, ecc. Gli oggetti hanno una gerarchia,
terminare con un punto e virgola. in cui un oggetto può essere "dentro" un altro oggetto.
Il significato di "in" dipende dalle proprietà dell'oggetto
Includere globals.h contenitore (il cosiddetto genitore) e dell'oggetto contenuto
Dopo aver definito tutte le costanti di cui abbiamo bisogno, (il cosiddetto figlio). Essere in un altro oggetto di solito
è il momento di includere il file “globals.h”. Questo imposta significa che il figlio è nel genitore, sul genitore, tenuto
le variabili globali, le costanti, ecc. necessarie alla libreria dal genitore, indossato dal genitore o parte del genitore.
PunyInform.
Stanze
Estensioni della libreria e entry point routines Una stanza (anche detta locazione) è un oggetto che non
significa che se il giocatore usa una di queste parole in s_to, e_to, w_to, u_to, d_to, in_to e out_to . Se abbiamo
questa stanza, il gioco dovrebbe stampare "You don’t definito costant OPTIONAL_FULL_DIRECTIONS , possiamo
need to use that word in this game." o qualcosa del genere. anche usare ne_to, nw_to, se_to e sw_to . Ogni uscita può
Questo può essere usato per aiutare il giocatore a avere un singolo valore (non una lista di valori), e questo
concentrarsi su ciò che è importante nel gioco. Ricordate valore solitamente è (A) una stanza o (B) una stringa da
che le parole del dizionario sono sempre racchiuse tra stampare se il giocatore tenta di andare in quella direzione.
virgolette singole. Se una parola del dizionario è composta Definiamo quindi cant_go , che è un messaggio da stampare
da un solo carattere, è necessario aggiungere // dopo se il giocatore tenta di andare in una direzione per la
quel carattere, per distinguerlo da un carattere, che quale non abbiamo specificato un valore. Se non definiamo
utilizza anch'esso virgolette singole. Quindi: 'n' è un la proprietà cant_go, verrà visualizzato il messaggio
carattere, mentre 'n//' è una parola del dizionario. standard “You can’t go that way.”.
Assegnamo ora la proprietà description, obbligatorio se
l'oggetto è una stanza. La descrizione può essere una Attributi
stringa o una routine che stampa del testo, e questo viene Esaminiamo ora la parola chiave has , il che significa che
stampato o eseguito quando il giocatore entra nella stanza definiremo gli attributi di questo oggetto. Un attributo è
o digita LOOK. Come potete vedere, una stringa può un flag a un bit, che può essere solo vero o falso. A
contenere caratteri di fine riga e quindi la riga successiva differenza delle proprietà, tutti gli attributi esistono per
può iniziare con tabulazioni o spazi: tutto questo viene tutti gli oggetti, quindi anche se non si include un attributo
contratto dal compilatore in un singolo carattere di spazio. nella definizione dell'oggetto, si può comunque modificarlo
Successivamente, scegliamo di specificare le uscite da più avanti nel gioco. In questo caso diamo alla stanza
questa stanza. Per questo utilizziamo le proprietà n_to, l'attributo light, nel senso che è la stanza stessa a fornire
luce. Ciò significa che il giocatore può vedere nella stanza riferimento agli oggetti che incontra (non alle stanze, ma
(nel senso che può vedere cio' che contiene ed intaragire praticamente a tutti gli altri oggetti). Il modo più semplice
con eventuali oggetti), senza portare la propria lampada. per abilitare ciò è dare all'oggetto una proprietà name e
Successivamente inseriamo un punto e virgola, che segna lasciare che contenga un elenco di parole del dizionario
la fine della definizione dell'oggetto. che sono sostantivi e forse aggettivi che possono essere
usati per riferirsi a questo oggetto. In questo caso, ci
L'oggetto Cubicle accontentiamo semplicemente di 'painting'. E ricordate
Questo oggetto porta solo una cosa nuova sul tavolo: la di racchiudere sempre le parole del dizionario tra singoli
proprietà initial. Se utilizzata in una stanza, questa apici. Poi arriva la proprietà initial. Per gli oggetti normali
proprietà viene stampata subito prima del nome della viene utilizzata per descrivere l'oggetto finché il giocatore
stanza quando il giocatore entra nella stanza. Ecco come non lo ha raccolto, quindi possiamo usarla per descrivere
appare: il dipinto in un modo che abbia senso solo nel luogo in
cui si trova il dipinto all'inizio del gioco. Poi arriva la
proprietà description. Per gli oggetti normali, questa
viene stampata se il giocatore esamina gli oggetti. Può
essere una stringa o una routine che stampa un testo.
Successivamente, definiamo la proprietà after. Questa è
una routine (inizia con [; e termina con ] ) che viene
chiamata dopo che un'azione è riuscita. In questa routine,
si digita il nome di un'azione che il giocatore può eseguire
dove questo è l'oggetto principale (chiamato anche noun),
i due punti e il codice che si desidera eseguire se questa
azione è stata intrapresa. Tutte le azioni possibili sono
elencate nel manuale sotto actions e mentre si gioca in
Piano superiori e oggetti normali (non stanze) modalità DEBUG tutte le azioni eseguite dal linguaggio
Ricordate che abbiamo scritto nell'oggetto Entrance che possono essere visualizzate dopo aver digitato il comando
salire (u_to) porterebbe a UpstairsHallway? Ciò significa ACTIONS. In questo caso vogliamo eseguire del codice
che dobbiamo definire un oggetto chiamato UpstairsHallway dopo che il giocatore ha esaminato il dipinto, e questo
da qualche parte nel codice. Si veda la Fig. 3 viene reso possibile dall'istruzione give self general;
Analizziamolo. give è un'istruzione per impostare un
Questa location non illustra alcun concetto nuovo per attributo per un oggetto. self è l'oggetto su cui viene
noi, ma mostra come a volte sia conveniente avere due eseguito questo codice (quindi in questo caso avremmo
uscite diverse che conducono alla stessa posizione. Con potuto digitare Painting e ottenere lo stesso effetto).
il testo che dice che le scale scendono a ovest, ha senso general è un attributo multiuso. Decidiamo noi cosa
avere sia d_to che w_to che conducono alla stanza in significa per ogni oggetto. In questo caso abbiamo deciso
fondo alle scale. Ora ecco che arriva il nostro primo oggetto che per il dipinto significhi “Il giocatore ha esaminato il
che non è una stanza. Stiamo parlando di un dipinto. dipinto?”. L'attributo è azzerato all'inizio del gioco e non
Mettendo una freccia (->) dopo Oggetto diciamo al appena il giocatore esamina il dipinto viene impostato a
linguaggio che questo oggetto è all'interno dell'ultimo "general". Alla fine di una regola after, come questa, di
oggetto che non aveva una freccia, quindi il dipinto è nella solito possiamo scegliere di restituire true o false, dove
stanza UpstairsHallway. Poi vengono le properties. true significa "Abbiamo stampato un messaggio adatto,
Ricordate che la proprietà description è obbligatoria per quindi la routine di azione non dovrebbe stamparne uno.".
le stanze? Non è così per gli oggetti normali. In effetti, Tuttavia, Examine è un caso speciale. Dato che tutto ciò
non esistono proprietà obbligatorie per gli oggetti regolari. che fa è stampare qualcosa, stampa il suo messaggio
In genere, vogliamo che il giocatore sia in grado di fare prima che venga chiamata la routine after, e non importa
Include "globals.h";
Include "puny.h";
Supponiamo di avere un numero naturale X formato da RIGHT$(X$,1) restituisce l’ultimo carattere della stringa
quattro cifre (in base 10). Per qualche motivo (ad esempio (“5”) per cui U=VAL(RIGHT$(X$,1)) diviene il valore
per risolvere un “Quesito con la Susi”), abbiamo bisogno numerico 5.
di ottenere separatamente le quattro cifre. Poiché la funzione MID$(A$,H,K) restituisce una stringa
formata da K caratteri della stringa A$ a partire dalla
In definitiva, partendo da X, vogliamo ottenere le quattro posizione H (così, se A$=”MAGAZINE”, avremo MID$(A$,
variabili U, D, C, M che contengano rispettivamente la 3,4)=”GAZI”), D sarà 3, C assumerà il valore 2 e M il valore 7.
cifra delle unità, quella delle decine, quella della centinaia
e quella delle migliaia (così, se X=7235, avremo U=5, Un confronto tra PROG1 e PROG2, in termini di velocità,
D=3, C=2 e M=7). non ha evidenziato grandi differenze; i due programmi
possono essere facilmente modificati se il numero delle
Ecco una possibilità per il nostro C64 (PROG1): cifre è diverso da quattro.
10 v1=int(x/10):u=x-10*v1
20 v2=int(v1/10):d=v1-10*v2 Ed eccoci ad un nuovo “Quesito con la Susi”, sempre da
30 m=int(v2/10):c=v2-10*m “La Settimana Enigmistica”:
Per capire come funziona il programmino è sufficiente L’insegnante mostra che, se dividiamo 8712 per 2178,
seguire un esempio. Se X=7235, abbiamo X/10 = 723.5 che è il primo numero scritto “all’indietro”, si ottiene
e V1=INT(723.5)=723. esattamente 4. La richiesta è quella di trovare un numero
Dunque U=7235-10*723=5 come desiderato. Ora di quattro cifre che, operando in maniera analoga, dia
V1/10=72.3 quindi V2=72 e D=723-10*72=3. Infine esattamente 9 anziché 4.
V2/10=7.2 quindi M=7 e C=72-10*7=2.
Ecco il PROG2:
10 x$=str$(x)
20 u=val(right$(x$,1))
30 d=val(mid$(x$,4,1))
40 c=val(mid$(x$,3,1))
50 m=val(mid$(x$,2,1))
Ecco come procede il nostro C64 (PROG3): ● Se l’istruzione IF 9*H=K THEN PRINT K,H viene modificata
10 for k=1000 to 9999 in IF 4*H=K THEN PRINT K,H si ritrova solo la coppia di
20 v1=int(k/10):u=k10*v1 numeri 8712, 2178. Anche nell’esempio proposto all’inizio,
30 v2=int(v1/10):d=v110*v2 la soluzione è unica.
40 m=int(v2/10):c=v210*m ● Se in luogo di 9 o 4, eseguo il programma con uno dei
50 h=1000*u+100*d+10*c+m valori 2,3,5,6,7,8 non si trova alcuna soluzione.
60 if 9*h=k then print k,h ● Naturalmente con IF H=K THEN PRINT K,H si ottengono
70 next tutti i numeri di quattro cifre … “palindromi”: 1001, 1111,
1221, … ,9889, 9999.
Per ogni K che va da 1000 a 9999, vengono estratte da
K le singole cifre e, alla 50, viene costruito il numero H Mentre stavo scrivendo questo articolo, su un nuovo
che è K … scritto all’indietro. numero de “La Settimana Enigmistica” è comparso un
Alla 60 si controlla se K/H è esattamente uguale a nove nuovo “Quesito con la Susi”:
nel qual caso K e H vengono stampati.
Susi chiacchiera con Giulia e Pietro.
Un’alternativa al PROG3, è il seguente PROG4 dove, a Susi: “Cosa c’è scritto sui vostri foglietti?”
partire dalle singole cifre, si costruiscono i due numeri K Pietro: “In entrambi c’è un numero di due cifre e, se
e H. Si noti che la cifra delle migliaia, M, parte da uno in moltiplichiamo i due numeri, otteniamo lo stesso numero
modo che K sia, in effetti, un numero di quattro cifre: che si ottiene se li scriviamo da destra a sinistra e poi li
10 for m=1 to 9:for c=0 to 9 moltiplichiamo”.
20 for d=0 to 9:for u=0 to 9 Giulia: “Il mio numero è sette volte il numero di Pietro e
30 k=1000*m+100*c+10*d+u le quattro cifre dei due numeri sono tutte diverse”.
40 h=1000*u+100*d+10*c+m Pietro: “Qual è la somma dei nostri due numeri?”
50 if 9*h=k then print k,h
60 next:next:next:next
rappresenta la cifra delle decine e B quella delle unità, termina l’elaborazione senza ulteriori stampe: la soluzione
avremo X1=10*A+B. Analogamente, se Y1 rappresenta il è unica.
numero sul foglietto di Giulia, con C cifra delle decine e D
cifra delle unità, avremo Y1=10*C+D. Per la verità, se il prodotto dei due numeri originali, 10*A+B
e 10*C+D, deve coincidere con il prodotto dei due scritti
Il PROG5 lavora seguendo il testo in maniera molto letterale: “all’indietro”, deve aversi:
100 for a=1 to 9:for b=1 to 9 (10*A+B)*(10*C+D)=(10*B+A)*(10*D+C).
110 for c=1 to 9:for d=1 to 9 Eseguendo qualche passaggio, si deduce 99*A*C=99*B*D
120 if a=b or a=c or a=d then 220 ovvero A*C=B*D.
130 if b=c or b=d then 220
140 if c=d then 220 Se volete, potete sostituire l’istruzione 170 con 170 IF
150 x1=10*a+b:y1=10*c+d A*C<> B*D THEN 220 ed eliminare l’istruzione 180: il
160 if y1<>7*x1 then 220 programma sarà un pochino più corto e un pochino più veloce.
170 x2=10*b+a:y2=10*d+c
180 if x1*y1<>x2*y2 then 220 Naturalmente, anche questo “Quesito con la Susi” si può
190 s=s+1:print"sol n. ";s risolvere senza scomodare il nostro Commodore (il numero
200 print"x1=";x1;"y1=";y1 sul foglietto di Giulia non può essere inferiore a 12 – il più
210 print"prodotto:";x1*y1 piccolo numero di due cifre con cifre diverse -, ma non può
220 next:next:next:next superare 14 – in quanto 14*7=98 è il massimo valore
possibile sul foglietto di Pietro, dunque …), ma il nostro
Alla 100-110 si aprono i quattro cicli FOR-NEXT: le cifre PROG5, opportunamente modificato, può essere utile per
variano da 1 a 9; lo zero è escluso in modo che tutti e rispondere ad altre domande.
quattro i numeri in gioco risultino di due cifre.
Ad esempio, quante sono le coppie di numeri di due cifre,
Le quattro cifre devono essere tutti differenti; quando tutte diverse, il cui prodotto è identico a quello che si
questo non avviene, una delle tre IF (120-140) rimanda ottiene moltiplicando i numeri scritti all’indietro? Non sono
alla scelta dei prossimi candidati. poche, eccone alcune: 12*63=21*36; 13*62=31*26;
14*82=41*28, 23*64=32*46, … , 36*84=63*48.
Alla 150 si calcola il possibile valore di X e quello di Y; se
Y non è sette volte X, la coppia non può essere la soluzione
(istr. 160).
Il nostro C64 non ha bisogno di un gran programma per Poiché “n!” è il prodotto degli interi da 1 a “n”, log(n!) =
calcolare il fattoriale di un numero naturale “n” (si indica log(1)+log(2)+ … + log(n) (… ricordate? “Il logaritmo
con “n!” ed è definito come il prodotto di tutti gli interi del prodotto è la somma dei logaritmi…”). La funzione
tra 1 e “n”, con la convenzione di porre 0!=1; così 4! LOG del C64 fornisce i logaritmi in base “e” (logaritmi
=4*3*2*1=24; i fattoriali entrano in gioco in vari capitoli “naturali”), ma è facile risalire al logaritmo in base 10
della matematica come il Calcolo Combinatorio, le serie (logaritmo “decimale”) utilizzando la formula del
ecc.), per la verità se la cava con una sola istruzione: cambiamento di base: LOG10(X)=LOG(X)/LOG(10).
Ecco allora il miniprogramma che ci consente di determinare
1 input" n = ";n:f=1:for k=1 to da quante cifre è formato “n!” :
n:f=f*k:next:print n;"! = ";f
10 input" n = ";n
Se al RUN chiediamo il calcolo di 10!, otteniamo subito 20 for h=1 to n:s=s+log(h):next
3628800 e, fino a 12, otteniamo i valori esatti: 12! 30 print" il numero di cifre di n! e' ";int(s/
=479001600. Per 13! il C64 passa alla notazione log(10))+1
esponenziale: 13!=6.2270208E+09 ovvero 6,227*10^9
è il valore approssimato di 13 fattoriale. Si va avanti così Scopriamo allora che 100! è un numero formato da ben
fino a 33! = 8.68331762E+36. Dal 34 in poi il nostro 158 cifre, 500! da 1135 cifre e 1000! raggiunge le 2568 cifre!
amato Commodore getta la spugna e segnala un ?OVERFLOW
ERROR IN 1. Per il calcolo effettivo di questi numeroni torniamo al
programma iniziale. Mentre il contatore K si mantiene
In internet si trovano numerosi siti che forniscono il valore moderato, è la variabile F che cresce a dismisura. Per
esatto di “n!” anche per n>33. Al C64 la cosa non va a mantenere il valore esatto, una possibilità è quella di
genio: “Se ci riescono altri, posso riuscirci anch’io!”. immagazzinarne le cifre in un vettore C(..): i prodotti
Vediamo come se la cava. parziali K*F possono essere calcolati moltiplicando ogni
cifra di F per K ricostruendo poi le cifre del prodotto come
Al crescere di “n”, “n!” cresce molto rapidamente; per nel seguente esempio:
prima cosa chiediamo al nostro Commodore di valutare
da quante cifre sarà formato “n!” (va da sé che stiamo Calcolare 842*13
lavorando in base 10).
Abbiamo bisogno di rinfrescare alcune nozioni relative ai
logaritmi; utilizzeremo i logaritmi in base 10. Il logaritmo
decimale di un numero naturale k>0 è strettamente legato
al numero di cifre che lo formano. Se, ad esempio, k=7203,
avremo 1000 ≤ k < 10000. Poiché il logaritmo è una
funzione crescente, si avrà
3=log(1000)≤log(k)<log(10000)=4, dunque log(k)=3,
…. . In generale, se k≥1, il numero delle cifre che formano
“k” è int(log(k))+1 (nel nostro esempio, log(k)= 3,…. da
cui int(log(k))=3 e int(log(k))+1=4 che è proprio il numero
di cifre di 7203) L’aggiornamento del vettore C(..) avviene in due passi. Il
valore contenuto in C(K) viene separato in due parti: U prima. Al crescere di “n”, il numero delle iterazioni cresce
che contiene la cifra delle unità di C(K) e D che contiene a dismisura e i tempi d’attesa possono diventare proibitivi.
la parte che precede U; se C(K)=725 avremo U=5 e D=72. Quando si arriva alla 220 il calcolo è stato completato:
Per il calcolo sarà: D=INT(C(K)/10) e U=C(K)-D*10 C(1) contiene la cifra delle unità, C(2) quella delle decine
(infatti, continuando con l’esempio precedente, e così a salire fino a C(NC) che contiene la cifra più
D=INT(725/10)=INT(72,5)=72 e U=725-72*10=5), significativa.
dopodichè U diviene il nuovo C(K) e C(K+1)=C(K+1)+D. Il ciclo 230-250 si incarica della stampa finale; il ricorso
Naturalmente, il vettore C(..) sarà dimensionato col valore a RIGH$(STR$(C(W)),1) serve per eliminare lo spazio
calcolato nel miniprogramma (per comodità non utilizzeremo iniziale che il C64 pone automaticamente prima della
C(0)). cifra. In questo modo le varie cifre vengono stampate
“incollate” l’una all’altra.
Ecco allora il programma completo: Un consiglio: all’inizio utilizzate il programma con piccoli
100 poke 53280,6:print chr$(5);chr$(147) valori di “n”, n=10, n=20, poi … vedete voi. L’interprete
110 input"n = ";n:if n<4 then 110 Basic del C64, lo sappiamo, è un po’ un lumacone, il
120 for h=1 to n:s=s+log(h):next calcolo di 100! attraverso l’emulatore VICE ha richiesto
130 nc=int(s/log(10))+1:print:print"il ben 24 minuti.
numero di cifre di n! e' ";nc
140 print:print"procedo con il calcolo, abbi Ecco un paio di output:
pazienza":print
150 dim c(nc):c(1)=1
160 for h=1 to n:print"..";h;
170 for j=1 to nc:c(j)=c(j)*h:next j
180 for k=1 to nc1
190 d=int(c(k)/10):u=c(k)d*10
200 c(k)=u:c(k+1)=c(k+1)+d
210 next k:next h
220 print:print:print n;"! = ";
230 for w=nc to 1 step 1
240 print right$(str$(c(w)),1);
250 next w
qui approfondire come meriterebbe l’argomento presentando sistematicamente del problema in un contesto accademico,
il sorgente originale integrale. Tale algoritmo ricorsivo, a fine anni Ottanta, esistevano decine di pubblicazioni al
pur avendo prestazioni decisamente non entusiasmanti, riguardo, SM era menzionato in almeno mezza dozzina
ha una sua notevole importanza storica in quanto costituisce di testi di algoritmica a partire dagli anni Settanta e oltre
il primo tentativo di fornire una generazione esaustiva alla già citata Gusfield-Irving (allora fresca di stampa) vi
delle soluzioni. Negli stessi anni anche D. E. Knuth aveva erano altre due monografie dedicate, una delle quali
proposto un algoritmo sostanzialmente simile, con [RS90] fondamentalmente incentrata solo sugli aspetti
analoghe prestazioni. game-theoretic e l’altra, dovuta al venerabile D.E. Knuth
Occorreranno quasi venti anni prima che tale sforzo sia [Knu97], edita solo in francese fino al 1997. Sei lustri
superato, con la pubblicazione di alcuni articoli poi confluiti dopo il numero di pubblicazioni e di testi di algoritmica
nella fondamentale monografia di Gusfield e Irving [GI89] che fanno menzione del problema è pressoché raddoppiato,
i quali - grazie ad un attento studio della natura algebrica tuttavia si deve rilevare che molte delle questioni poste
dello spazio delle soluzioni come reticolo e come anello nelle principali monografie storiche (alle quali se ne è
d’insiemi, e suggerendo un uso accorto di strutture dati aggiunta una quarta [Man13] pochi anni fa) non hanno
order-preserving in grado di garantire contemporaneamente ancora trovato soluzione e il problema rimane ricco di
sia l’accesso diretto indicizzato, sia cancellazioni in O(1) spunti di ricerca e applicativi.
- hanno proposto l’algoritmo ancora attualmente in uso Il lettore interessato può scaricare un articolo di
per la generazione esaustiva anche su istanze di grandi approfondimento sull’algoritmo di Gusfield & Irving,
dimensioni, con prestazioni in O(n2), praticamente il latamente correlato al retrocomputing (viene proposta
medesimo ordine di grandezza del GS (che in quel tempo una implementazione in C89 conforme agli strumenti
è in grado però di generare solo una singola soluzione, disponibili all’epoca della pubblicazione della monografia,
non tutte). Avremo modo di approfondire altrove come senza fare ricorso a Python e strutture dati avanzate), la
si possano ottenere simili incrementi prestazionali. cui dimensione renderebbe difficoltosa la pubblicazione
Altro aspetto caratteristico (e divertente!) dell’algoritmo in questa sede, anche in numerose puntate.
di McVitie e Wilson, che lo rende ancora più degno di
studio e di interesse, è la sua originale implementazione L’algoritmo di Gale & Shapley
su un KDF-9 a transistor della English Electric Computers La versione più elementare, riportata nei testi di algoritmica
(poi English Electric LEO Marconi Computers), installato e in numerosi articoli divulgativi, è anche la più utilizzata
presso l’Università di Newcastle: questo è genuino per le implementazioni. Si tratta di un algoritmo iterativo
retrocomputing, e del migliore! Di tale storico elaboratore, di estrema semplicità, che però garantisce un risultato
dotato di memorie a nuclei magnetici, esiste un emulatore per nulla intuitivo leggendo il problema. Il nondeterminismo
scritto in Ada e dotato di una ricchissima documentazione, introdotto dalla mancanza di un particolare ordine dei
col quale l’Autore si è a lungo divertito. proponenti è un aspetto che è stato dato per scontato
Come già accennato, a partire dalla metà degli anni negli articoli scientifici degli anni Sessanta e Settanta: in
Ottanta alcune pubblicazioni (principalmente dovute a realtà l’ordine dei proponenti è del tutto irrilevante, perché
Gusfield, Irving e Leather: [IL86, ILG87, GILS87, Gus87]) l’algoritmo genera sempre e comunque la medesima
avevano risvegliato l’interesse generale verso il problema, soluzione male-optimal (o female-optimal, invertendo
stimolando numerosi articoli divulgativi sulle principali banalmente le tabelle di preferenze), come non mancano
riviste internazionali di programmazione applicativa e - di notare Gusfield e Irving ([GI89], pagg. 9 ÷ 10).
come immediata conseguenza - anche diverse
implementazioni di studio in vari linguaggi di alto livello procedure STABLE_MARRIAGE
(tra i quali Ada, C, Clipper, COMAL) da parte dell’Autore. assign each person to be free;
In questo articolo ci concentreremo su una di tali while some man m is free do
implementazioni in COMAL 80 V. 2.01 per Commodore 64. begin
Un’ultima nota. La prima volta che l’Autore si è occupato w:=next(m);
modo leggermente diverso. Il contenuto di ciascuna cella dall’altro che apprezzino sempre meglio il linguaggio e
è sempre un piccolo intero non negativo, ma usato stavolta la sua grande espressività.
come indice relativo alla posizione di w nella lista delle
preferenze di m. In questo modo, ad esempio, considerando Riferimenti bibliografici
la coppia (m,w) = (1,5) si avrà che m’coupled(m)=1 in [GI89] Dan Gusfield and Robert W. Irving, “The stable marriage
quanto male’pref(m,1)=5, e così via per ogni altra coppia. problem: Structure and algorithms”, MIT Press, Cambridge, MA,
USA, 1989.
A proposito di array, si ricordi solo che essi sono
[GILS87] Dan Gusfield, Robert Irving, Paul Leather, Michael
implicitamente inizializzati a zero, così come le variabili
Saks, “Every finite distributive lattice is a set of stable matchings
in genere. Si noti ancora una volta come il linguaggio è for a small stable marriage instance”, Journal of Combinatorial
un po’ prolisso (come ALGOL, COBOL o FORTRAN) ma Theory, Series A 44 (1987), no. 2, 304-309.
estremamente chiaro, leggibile, ordinato. Il risultato finale [GS62] D. Gale, L. S. Shapley, “College admissions and the
è visibile nello screenshot che segue, dove i partner sono stability of marriage”, The American Mathematical Monthly 69
senz’altro il lettore interessato alle monografie già citate, problem”, Communications of the ACM 14 (1971), no. 7, 486-490.
[MW71b] D. G. McVitie, L. B. Wilson, “Three procedures for the
alla loro bibliografia ed al più recente survey disponibile:
stable marriage problem”, Communications of the ACM 14
[IM08].
(1971), no. 7, 491-492.
Si è quindi fornita una completa implementazione in [RS90] Alvin E. Roth, Marilda A. Oliveira Sotomayor, “Two-sided
COMAL 80 2.01 per Commodore 64 che consente di matching: A study in game-theoretic modeling and analysis”,
esemplificare le caratteristiche e la grande eleganza di Econometric Society Monographs, Cambridge University Press,
tale linguaggio evoluto, rendendone trasparente il 1990.
Hare Basic nasce dalla mente di Aleksi Eeben, già autore del Un listato d’esempio presente nella cartella di documentazione
Bunny Basic nel 2019 con due scopi: festeggiare i 60 anni della del HARE BASIC:
nascita del BASIC e realizzare un interprete di base veloce e
funzionale da poter sostituire in Basic 2.0 di C64 e VIC20.
Hare Basic è un sottoinsieme altamente ottimizzato del Basic
Commodore che si può attivare o disattivare a seconda delle
necessità. È un interprete e non un compilatore ed è dotato di
pochi comandi e funzioni, tutti eseguibili direttamente su C64.
La sintassi è molto simile, ma ci sono alcune restrizioni e differenze. I numerosi esempi presenti nella dotazione del software
Non sono presenti variabili stringa, tuttavia esiste un supporto
semplice per le stringhe con terminazione NULL che possono farlo.
Non ci sono ARRAY. Si accede alla memoria direttamente con
POKE e PEEK per creare strutture dati più grandi.
È possibile una solo operazione aritmetica alla volta.
Non è possibile utilizzare gli spazi bianchi. Riceverai un messaggio ?
HARE ERROR READY.
GOTO e GOSUB possono prendere una variabile come destinazione.
THEN non accetta solo una variabile numeri. Tuttavia, THENGOTO
funziona con variabili.
La funzione STR$ viene riproposta per fare riferimento a stringhe In conclusione mi sono divertito a “giocare” con questa versione
con terminazione NULL nella memoria. Si possono utilizzare snella e veloce del Basic, una scoperta e sicuramente una ventata
variabili come puntatore o utilizzare un indirizzo di memoria diretto. di novità e freschezza, segno di una scena di retro sviluppo viva
RND è implementato come un comando che inserisce un numero e vegeta.
casuale nell'intervallo 0-65534. Nei prossimi numeri analizzeremo assieme ad alcuni collaboratori
Il comando LOAD non riavvia il programma, ma continua con alcuni listati sviluppati con HARE BASIC, non mancate!
l'istruzione successiva.
Anno: 2012
Editore/Sviluppatore: Team
GOLDEN CHALICE
Piattaforma: Colecovision
Sito web: https://
[Link]/
quest_chalice.php
Anno: 2022
Editore/Sviluppatore: Roman
TIMO’S CASTLE
Warner
Genere: Platform
Piattaforma: Commodore 64
Sito web: [Link]
hc
GIUDIZIO FINALE
» Giocabilità 90%
Mantiene lo stile di Henry’s
House nello stile dei livelli ma
si lascia maneggiare meglio.
Le collisioni e il design dei
livelli sono bellissimi.
» Longevità 85%
Risente dello stile “old” di un
tempo e richiede pratica, ma
portarlo al termine è una
grande soddisfazione.
Anno: 2024
Editore/Sviluppatore: Pakete
THE KEY
Soft
Genere: Avventura punta e
clicca
Piattaforma: Amstrad CPC
Sito web: https://
[Link]/es/thekey
GIUDIZIO FINALE
» Giocabilità 85%
Lo stile LucasArts è un plus
per un’avventura punta e
clicca dalla trama solida.
» Longevità 80%
Enigmi molto divertenti.
Anno: 2024
LYLE IN CUBE
Editore/Sviluppatore: Michael
Moffit
SECTOR
Genere: Platform/Metroidvania
Piattaforma: Sega Megadrive
Sito web: https://
mikejmoffi[Link]/lics-md
GIUDIZIO FINALE
» Giocabilità 90%
Vasto ma godibile in alcuni
punti. Difetta per mancanza di
semplicità iniziale.
» Longevità 75%
Alcune volte ci si trova a vagare
senza meta.
Inizialmente non è facile
rimanere in vita.
Lyle in Cube Sector è un gioco apparso In alcuni punti presenta una dispersione
qualche tempo fa su pc e solo ora vede di trama e offre poche indicazioni su
una versione per Sega Megadrive come muoversi nell’avventura. Questo
praticamente identica ma decisamente ci porterà ad esplorare più e più volte
più “godibile” per velocità. gli stessi posti e, alla lunga, potrebbe
È un gioco in stile Metroid. Il classico annoiarci.
Metroidvania che va tanto di moda di Altro appunto è la difficoltà iniziale
questi tempi. Condivide il sistema davvero “tenace”. Partire senza
esplorativo del famoso gioco Nintendo potenziamenti e debolissimi ci porterà
ma fortunatamente è meno “vasto” e spesso a game over. Avrei dosato meglio
permette un’esplorazione più mirata. tutto questo con qualcosa di più fruibile.
Possiede anche una forte dose di Ma nel complesso, questo gioco merita
umorismo e un simpatico e curato di essere scaricato e apprezzato.
aspetto grafico piuttosto minimalista C’è tanto da esplorare e tiene occupati
che sulla console Sega ci sta per un po’ di tempo. La sequenza finale
decisamente bene. è divertente.
Non è un titolo perfetto, ovviamente. di Carlo Nithaiah Del Mar Pirazzini
Anno: 2024
ATLANTEAN
Editore/Sviluppatore:
Aetherbyte
Genere: Shoot em Up
Piattaforma: Pc Engine
Atlantean non prova nulla di nuovo o dagli invasori robotici Aquanoid per
essere scambiato per uno pseudo- Per portare a termine il compito eroico
sequel dell'universalmente impegnato si può sparare (pulsante II), attivare
Deep Blue . Fortunatamente l'unica bombe che puliscono lo schermo
GIUDIZIO FINALE
» Giocabilità 80%
Tecnicamente non il massimo
ma decisamente giocabile anche
se soffre di alcuni rallentamenti.
» Longevità 80%
Un buon livello di difficoltà.
DICING KNIGHT
Anno: 2004
Editore/Sviluppatore: Qute/
Platine Dispositif
PERIOD
Genere: ARPG
Piattaforma: WonderSwan
Color
GIUDIZIO FINALE
» Giocabilità 95%
Si fa tutto con pad direzionale e
due tasti e lo si fa con
soddisfazione.
» Longevità 90%
Bilanciato e strutturato. Porta
ad un Nirvana assoluto per chi
cerca qualcosa che dia
soddisfazione piena.
Anno: 2010/2024
Editore/Sviluppatore:
GENESIS Retroworks
Genere: Shoot em up
Piattaforma: ZX Spectrum
DAWN OF A NEW DAY Sito web: https://
[Link]/genesis-
dawn-of-a-new-day
GIUDIZIO FINALE
» Giocabilità 85%
Power up, doppio tipo di sparo,
smart bomb… ricche wave di
nemici e un bel level design.
» Longevità 70%
Avrei reso il gioco più
“umano”. Sembra partorito
dalla mente del Marchese De
Sade.
di Giampaolo Moraschi
Anno: 2024
Genere: Shoot em up
Piattaforma: Amstrad GX4000/
GOLDORAK
Plus
Sito web: https://
[Link]-
[Link]/Fichiers/Projets/
Goldorak_CPC/
Goldorak_CPC.html
GIUDIZIO FINALE
» Giocabilità 80%
Semplice da giocare e con un
buon design dei livelli. Non
troppo varie le wave e il tipo di
avversari ma interessante.
Curato ogni aspetto (grafica,
sonoro e presentazione).
» Longevità 70%
Non è difficile e purtroppo non
molto vario.
Anno: 2024
Editore/Sviluppatore:
Thalamus/Triple Eh?
GIUDIZIO FINALE
» Giocabilità 90%
La meccanica delle due leve è
interessante e stimolante.
Eugatron è un grande valore
aggiunto.
» Longevità 85%
Non è un titolo semplice e
richiede tanta manualità.
Anno: 2024
Sviluppatore: Krzysztof "Vega"
GIUDIZIO FINALE
» Giocabilità 90%
Mantiene le caratteristiche del
coin op ed è realizzato in modo
impeccabile.
Comandi perfetti.
» Longevità 80%
Una partita tira l’altra anche se
vi farà “uscire dai gangheri”
molte volte.
Anno: 2024
Editore/Sviluppatore:
Thalamus, BadgerPunch Games
ROGUECRAFT
Genere: Dungeon Crawler/
Roguelike
Piattaforma: Amiga
Sito web: https://
[Link]/
roguecraft
GIUDIZIO FINALE
» Giocabilità 95%
Bellissimi livelli generati
proceduralmente e un ottimo
sistema di gioco. I Dungeon
sono sempre vari e ben fatti.
» Longevità 91%
Le tre classi di gioco offrono
esperienze diverse d’approccio
ai dungeon. Giocare con il
mago è un vero inferno ma il
titolo non stanca mai.
Anno: 2024
Editore/Sviluppatore: VHZC
ROBO TITO
Games
Genere: Platform/Action
Piattaforma: Atari 2600
Sito web: [Link]
robotito
» Longevità 80%
Una sfida bilanciata. Non troppo
difficile né troppo semplice. Molto
godibile.
Anno: 2024
Editore/Sviluppatore: Juan J.
SALAMANDERLAND
Piattaforma: Amstrad CPC/
GX4000
Sito web: https://
[Link]/jjm/heart-of-
salamanderland/
GIUDIZIO FINALE
» Giocabilità 80%
I due pulsanti di gioco sono
essenziali. Saltare con il solo
joystick può portare ad
esaurimento. I livelli di gioco
sono ben strutturati.
» Longevità 75%
55 schermi di gioco possono
sembrare tanti ma in realtà,
con un po’ di pratica il compito
si porta a casa facilmente.
Sufficienza piena.
di Marta Rossmann
FORMULA V20
Anno: 2024
Editore/Sviluppatore: Huffeduff
1985
Genere: Driving
Piattaforma: VIC 20 (+24kb di
espansione)
PRINCESS
Anno: 2024
Editore/Sviluppatore: InfiniteMSX
Genere: Platform/Puzzle
RESCUE
Sito web: [Link]
2024/05/03/msxdev24-01-
princess-palomas-rescue/
Anno: 2024
PERSIA
Piattaforma: Plus 4
Sito web: https://
[Link]/software/
Prince_of_Persia
» Longevità 90%
È Prince of Persia… ho detto
tutto.
Anno: 2024
PRINCE OF
Editore/Sviluppatore: LeChuck
Genere: Platform
Piattaforma: VIC 20 (+35kb)
PERSIA
Sito web: https://
[Link]/ipw-web/
bulletin/bb/[Link]?
p=120870#p120870
» Longevità 90%
E' Prince of Persia, un titolo che
vuole essere giocato fino in
fondo.
BOMBERMAN
Hudson Soft
Genere: Platform
Piattaforma: Game Boy, Game
Boy Color
Oggi vi parlo di questo piccolo gioiellino più bombe, altre che ci fanno esplodere
che è una vera perla per Game Boy. le bombe a nostro piacimento, e tanti
Una versione completamente diversa altri come quella delle ali che ci fa
del classico gioco di Bomberman saltare in alto, raccogliamo le nostre
perché a differenza della solita pietre per andare avanti con i livelli
schermata labirintica (infatti si colloca e sconfiggere i vari mostriciattoli e
nel genere "Maze" come Pac-Man), nemici che ci si parano davanti in
questa è un platform dove il nostro un'avventura unica per Game Boy!
protagonista deve attraversare cinque In più per chi avesse una repulsione
mondi (Forest, Ocean, Wind, Cloud e per il grigio/verde dello schermo
Evil) e alla fine di ogni livello affrontare esiste la versione Color uscita nel
un Boss, l'ultimo sarà per l'appunto 1998, non contenti però ci sta anche
Evil (che stranamente non hanno un mini-game la modalità "Jump"
censurato) ma in breve la trama: dove Bomberman dovrà essere guidato
"Molto tempo addietro il Sole fu avvolto in un percorso in salita e dovrà far
da una nuvola oscura e sinistra. Una esplodere i vari blocchi che si
vecchia leggenda sostiene che quella presentano davanti per continuare il
nube era il risultato di un potente percorso.
mostro che aveva lanciato una Un platform carino e anomalo che
maledizione sulla "Spada del Sole" mescola gli elementi classici di
sigillando il suo potere. L'unica Bomberman a quelli di Super Mario.
speranza rimasta per far tornare la La grafica è semplice ed essenziale
luce sulla terra è quella di raccogliere così come il reparto sonoro.
le cinque Pietre del Potere, sorvegliate È un titolo da riscoprire, forse non il
dai mostri malvagi di Evil Mountain. capolavoro assoluto ma decisamente
Solo le Pietre del Potere hanno la un bel gioco.
forza necessaria per rompere
definitivamente la maledizione della di Barbara “Morgana” Murgida
spada e far tornare le cose alla
normalità."
Tra power-up che ci fanno piazzare
GIUDIZIO FINALE
» Giocabilità 80%
E’ un platform classico con alcuni
tocchi di genio. Semplice da
giocare e imparare.
» Longevità 60%
Purtroppo finisce troppo presto…
troppi pochi livelli!
Anno: 2024
Anno: 1994
Genere: Sparatutto in prima
persona
MARATHON
Musiche: Bungie
Editore: Bungie (originale)
Team Aleph One (realizzazione
di porting moderni)
Piattaforma: Windows/Mac/
Linux
GIUDIZIO FINALE
» Giocabilità 80%
Marathon presenta dei livelli
forse claustrofobici o a volte
confusionari, ma ci si
accorgerà subito che gli
ambienti di gioco lo rendono
godibile e meno monotono, ci
si troverà dal semplice leggere
terminali e cercare chiavi per
aprire porte, ad aiutare
membri dell’equipaggio in
difficoltà o risolvere puzzle per
proseguire in una determinata
zona.
» Longevità 80%
Il gioco è abbastanza lungo,
con mappe grandi e con livelli
che spesso possono essere
completati in modo non
lineare.
presente anche la possibilità di
ricaricare le armi, una caratteristica
oggi diventata la norma neglj sparatutto,
anche se è possibile farlo in automatico
solo quando finisce il caricatore, le
munizioni infatti non saranno
abbondanti e si dovrà fare attenzione
a non finirle, poiché potranno essere
trovate solo in giro per la mappa e in
relativamente poche quantità. È anche
presente un sensore di movimento,
altra novità rispetto a Doom, che
permetterà di rilevare la posizione dei
nemici.
In classico stile Bungie, la trama gira
intorno a temi filosofici che si
riscontrano nel punto centrale di
quest’ultima, ovvero l’IA che diventa
senziente e inizia a provare vari
sentimenti, un tema classico della
fantascienza, ma questa volta
presentato in modo davvero interessante
e coinvolgente.
poiché Il codice sorgente venne
rilasciato gratuitamente, è possibile
scaricare il gioco e i suoi sequel
gratuitamente da Steam o dal sito del
team che ha lavorato al porting, Aleph
One.
di Maurizio Diamanti
Anno: 2024
Editore/Sviluppatore: Incube8
KIEN
Genere: Platform/Action
Piattaforma: Game Boy Advance
Sito web: https://
[Link]/en-eu/
products/kien-gba
» Longevità 50%
Non impossibile da terminare ma
decisamente noioso.
Anno: 1989
3D POOL
Editore/Sviluppatore: Firebird/
Microprose Software
Genere: Sport
Piattaforma: Commodore 64
Nonostante le difficoltà, il nostro impegno per offrirvi articoli approfonditi e In pratica sei libero di: condividere, riprodurre,
distribuire, comunicare o esporre in pubblico,
contenuti avvincenti rimane immutato. Abbiamo lavorato duramente per rappresentare, eseguire e recitare questo
assicurarci che ogni pagina della rivista continui a riflettere la passione e la materiale con qualsiasi mezzo e formato,
modificare, rielaborare, trasformare il
dedizione che ci contraddistinguono, e ci siamo presi questo tempo aggiuntivo contenuto e basarti su di esso per altre
per assicurarci che la qualità non ne risenta. opere, alle seguenti condizioni:
Attribuzione
Allo stesso tempo voglio rassicurare tutti quelli che cominciavano a preoccuparsi Devi riconoscere una menzione di paternità
del futuro di RetroMagazine World che la rivista e tutto quello che le ruota adeguata, fornire un link alla licenza e
indicare se sono state effettuate delle
attorno sono vivi e vegeti. Vi assicuro che stiamo facendo tutto il possibile per modifiche. Puoi farlo in qualsiasi maniera
mantenere fede al nostro impegno di continuare a offrirvi i contenuti che amate ragionevole possibile, ma non con modalità
e che aspettate con entusiasmo. tali da suggerire che il licenziante avalli te
o l'utilizzo del materiale da parte tua.
Come di consueto, l'invito a partecipare alla vita della rivista con contenuti, NonCommerciale
Non puoi utilizzare il materiale per scopi
domande, curiositá e quant'altro, é aperto a tutti. Vi aspettiamo! commerciali.
Ancora una volta, vi ringraziamo per la vostra comprensione e supporto. Senza StessaLicenza
Se rielabori, trasformi il materiale o ti basi
di voi, nulla di tutto ciò sarebbe possibile. su di esso, devi distribuire i tuoi contributi
Siamo fiduciosi che troverete questo numero della rivista tanto interessante e con la stessa licenza del materiale originario.
stimolante quanto i precedenti, forse di piú, grazie al grande numero di recensioni Il licenziante non può revocare questi diritti
di giochi. fintanto che tu rispetti i termini della licenza.
Grazie per la vostra pazienza e il vostro continuo sostegno.
Divieto di restrizioni aggiuntive
Non puoi applicare termini legali o misure
Francesco Fiorentini tecnologiche che impongano ad altri soggetti
dei vincoli giuridici su quanto la licenza
consente loro di fare.
RetroMagazine World
Anno 8 - Numero 48 - LUGLIO 2024
Direttore Responsabile
Francesco Fiorentini
Vice Direttore
Marco Pistorio
Coordinatore Redazione/Editing
David La Monaca
Responsabili Area Web
Giorgio Balestrieri