Entombed è un gioco per Atari 2600 che nessuno sa come è stato programmato

Entombed è un gioco per Atari 2600 che nessuno sa come è stato programmato

Esistono dei veri e propri "archeologi" digitali che studiano le tecniche di sviluppo dei vecchi giochi per le console Atari mirate a eludere gli stringenti limiti degli hardware di allora. Uno in particolare ha richiesto degli studi molto approfonditi...

di pubblicata il , alle 18:41 nel canale Videogames
Atari
 
21 Commenti
Gli autori dei commenti, e non la redazione, sono responsabili dei contenuti da loro inseriti - info
cdimauro27 Giugno 2020, 08:36 #21
Originariamente inviato da: mail9000it
Sono così tanti anni che nessuno fa ottimizzazione nello sviluppo che si è perfino persa conoscenza del concetto (per non parlare delle tecniche) e occorre studiarsi il software di 30 anni fa.

Il triste è che lo vedo anche con il software applicativo, non c'è la minima attenzione alle prestazioni. Esempio lampante: due select consecutive su due tabelle diverse invece di utilizzare una join per avere i due valori con una sola select.

Imbarazzante.

Già, ma c'è una scarsa cultura dell'ottimizzazione perché ormai abbiamo valanghe di risorse a disposizioni, e... le si usa.

Anche perché non ti puoi più permettere di scrivere codice assembly (o addirittura in linguaggio macchina, quando ho iniziato), perché la produttività è scandalosamente bassa.
Originariamente inviato da: supertigrotto
È quello che sostengo da anni,i vecchi programmatori erano più bravi e creativi di quelli moderni,dovevano scervellarsi per far funzionare bene un programma con pochi kb.
Con i tempi moderni e le potenze messe a disposizione,il programma risulta veloce anche se programmato con i piedi.

No, non è una questione di bravura, ma di adattamento alle esigenze dell'epoca.

Quando hai poche risorse a disposizione o ti sbatti o sei fuori (Briatore dixit).

Adesso ne hai a vagonate, e quindi l'ottimizzazione è l'ultimo dei tuoi problemi, anche perché ci sono le scadenze impellenti e soffocanti.

Sono due epoche completamente diverse, insomma, e gli sviluppatori si sono semplicemente adattati.

"E' l'ambiente che fa l'uomo" (cit.)
Originariamente inviato da: jepessen
Per prima cosa, i sorgenti non sono disponibili, hanno analizzato direttamente il binario.

I giochi all'epoca in questione si programmavano per lo più in linguaggio macchina e non in assembly. Quindi ti armavi di opcode table del processore (anche se alla fine la maggior parte li conoscevi a memoria), e ti facevi a mente i calcoli dell'offset per i salti "brevi".

Gli assembler, se c'erano, erano roba da elite.
In seconda battuta, i giochi si programmavano in assembler, quindi non e' che era molto diverso dal codice binario, a parte i commenti che potevano chiarire un po' di cose, ovviamente solamente se c'erano.

Non è certo la stessa cosa: i sorgenti assembly usavano label descrittive ed erano strapieni di commenti, anche un commento per riga per spiegare quello che si stava facendo.
Originariamente inviato da: mally
l'assembler non è binario e nell'automazione industriale capita di controllare cosa ha combinato il compilatore C. Un firmwareista con buona competenza non ha grossi problemi a spiegarti come funziona l'algoritmo...

Un conto è controllare il tuo stesso codice (che anche se disassemblato rimane "riconoscibile", e tutt'altra cosa prendere un binario sconosciuto, disassemblarlo, e cercare di capire cosa sta facendo il codice.
Originariamente inviato da: Giuss
Se stai lavorando a un programma in C e vai a fare il debug di una parte direttamente in assembler ci sta, può capitare.

Interpretare da zero un programma non scritto da te e dissassemblato dal linguaggio macchina secondo me può essere ben più problematico.

*
Originariamente inviato da: !fazz
non è binario ma spesso cè una correlazione 1-1 tra codice assembler e codice binario tanto che si può passare da uno all'altro con un semplice libro dei vari opcode, ovviamente su cpu relativamente semplici, l'ho fatto mille volte su z80 e 8086 e se l'algoritmo non è più che semplice ti assicuro che non è facile capire cosa fa partedo solo dall'assembler, soprattutto se il codice viene ottimizzato da un buon compilatore tipo iar

*
Originariamente inviato da: gsorrentino
La questione non è che non si è capito come funziona il programma.

La questione è che il programma usa un metodo basato su una tabella che non è chiaro come sia stata pensata.

Quando ero giovane ho fatto dei programmi assembler su Sinclair ZX80 che ero riuscito a riparare ed espandere da solo vedendo gli schemi elettrici.

Poi è arrivato lo Spectrum con i suoi colori ed un basic semplice.
Per capire le potenzialità creai una copia del poker che andava di moda nei bar a quei tempi. Il problema era che le immagini delle carte occupavano troppo, così creai un metodo per disegnarle con i mattoncini della grafica del testo e allo stesso tempo creai un sistema di verifica del punteggio delle carte che avevi sullo schermo.
Il sistema capiva qual'era la tua mano con solo 6 righe di codice.

A distanza di quasi 40 anni ho ritrovato il codice (lo avevo scritto a mano su un blocco) e pur leggendolo, non riesco a capire completamente l'intuizione di allora che mi permise di creare quelle righe che con soli 4 confronti erano in grado di dirti cosa avevi in mano (dalla semplice coppia alla scala reale).

Io, invece, realizzai un disassemblatore / resourcer (si chiamavano così i programmi che generavano sorgenti assembly dal disassemblamento dei binari) proprio per il reverse engineering di quel gioco di poker in voga all'epoca (quello di CMC, col famoso "poker jollato" ).
Era basato su processore 65C02 e coprocessore grafico Motorola (non ricordo la sigla al momento), e il committente mi aveva fornito pure un paio di schede madri (una con tutti i componenti dissaldati per ricostruire lo schema del PCB e capire dove andavano i segnali e cosa facevano). Realizzai anche un mio assemblatore basato su un mio linguaggio assembly di alto livello, per rendere più facile la scrittura di codice assembly.
Un lavoro immane, insomma, che oggi con Python avrei realizzato in meno di decimo del tempo...

E pure io ho problemi a rivedere il codice che avevo scritto, pur spesso commentato, per capire cosa diavolo facevano certe parti...
Originariamente inviato da: 386DX40
Trovo questo genere di cose certamente impressionante ed e' capitato immagino a molti. Tempo fa mi appassionai di Arduino e creai un progetto partendo da zero, scrivendo il codice, leggendo datasheet per capire come poterlo realizzare, come funzionavano i componenti e direttamente su PCB pezzo per pezzo, traccia per traccia. Alla fine oggi farei "fatica" a ripercorrere tutti i ragionamenti fatti. A volte e' questione di motivazione e questioni di principio, a volte di convinzione in se stessi, si raggiungono capacita' per brevi periodi di tempo certamente superiori alla norma (del resto nella nostra normale quotidianita' intendo). Lo stesso vale nell'arte, nello sport, nel lavoro.
Questo dovrebbero capire taluni capi/e uffici nelle aziende che invece di creare nelle persone quelle condizioni per far si che questo genere di motivazione sia autogenerata (e almeno moralmente applaudita), non vedono quanto questo sarebbe produttivo.

Non è certo cosa facile: acquisire quella mentalità richiede parecchio tempo (e ovviamente una buona dose di creatività che non tutti possiedono).

Prendendo Arduino, qualche anno fa ho realizzato un progetto (inizialmente giusto per smanettare con qualcosa di nuovo. Poi è divenuto qualcosa di ben più serio) per il monitoraggio di certi dati, sfruttando la tecnologia LoRA / LoraWAN quale rete wireless a basso consumo per l'invio dei pacchetti.

Ebbene, usando la libreria standard di TheThingsNetwork (TTN) per LoRA il firmware occupava un sacco di spazio (usando uno schifoso Atmel AVR da due soldi con 28KB di Flash e appena 2,5KB di RAM), e non funzionava nemmeno bene. In particolare mi andava in blocco tutto con l'uso della funzionalità di adattamento automatico dello Spread Factor / Data Rate. Roba che mi ha fatto impazzire, e ho provato di tutto per farlo andare (compresi trucchetti sporchi. "Cose per cui il Dio della biomeccanica non mi farebbe entrare in paradiso".
Alla fine ho scaricato il manuale delle specifiche del chip LoRA (RN2483) e mi sono scritto da zero (in C) l'intero stack LoRa in un paio di settimane, implementando tutti comandi del chip, e creando una test suite di circa 200 test (se confronti i test del codice TTN sono semplicemente ridicoli: un paio che devi eseguire sulla scheda Arduino. Io ho ho scritto parzialmente un emulatore Arduino e i miei 200 test li eseguo da Visual Studio con le sue funzionalità di test).
Adesso funziona tutto alla perfezione (e il tutto vuol dire che dentro ci sta un parser ASCII per i sensori che usano questo formato, e uno SML/binario per gli altri. Più tutta la business logic necessaria, e una varietà di comandi per controllare lo stato della scheda), e tutto il firmware occupa circa l'80% dello spazio e dovrei avere anche più di 1KB di RAM libera.
Certo, c'è da dire che mi sono riscritto praticamente tutto (non uso nemmeno la classe String di Arduino né malloc/free varie, e mi sono scritto pure delle funzioni per il calcolo in fixed point), ma ne è valsa la pena.
D'altra parte son cose necessarie quando si lavora in ambito embedded: risparmiare anche un solo euro sui componenti può portare a risparmi (o guadagni, se sei tu a vendere le schede) notevoli, che compensano di gran lunga le settimane di lavoro di un programmatore.

Devi effettuare il login per poter commentare
Se non sei ancora registrato, puoi farlo attraverso questo form.
Se sei già registrato e loggato nel sito, puoi inserire il tuo commento.
Si tenga presente quanto letto nel regolamento, nel rispetto del "quieto vivere".

La discussione è consultabile anche qui, sul forum.
 
^