Forum: Software Téma: Vi spiego perché non è possibile convertire molti giochi ---------------------------------------------------------------- Qwe: Dopo aver studiato la programmazione degli Atari a 8 bit vi spiego perché non è possibile fare il porting di molti giochi su questa piattaforma. Quando l'Atari 800 è uscito sul mercato era un passo avanti rispetto al Commodore Pet e all'Apple 2 perchè il chip Antic (il chip video) era molto sofisticato. L'Antic permetteva di mischiare i modi grafici facilmente senza fare uso di interrupt e la “memoria video” poteva essere configurata in qualsiasi punto della memoria mentre in altri sistemi era fissa ad un certo indirizzo. Queste caratteristiche degli Atari erano uniche (solo gli Amiga nel 1986 potevano fare qualcosa di simile). L'Antic è un processore a tutti gli effetti ed il programma che esegue si chiama Display List.. Nella memoria degli atari quindi si possono trovare 2 tipi di programmi, quelli per l'Antic e quelli per la CPU. Antic e Cpu non hanno niente in comune. La CPU non sa eseguire il Display List e l'Antic non sa eseguire le istruzioni del 6502. C'è un problema: la memoria può essere letta da uno alla volta. Come fa l'Antic a leggere la memoria? Manda un interrupt alla CPU e le dice: adesso la memoria la leggo io e tu stai ferma finchè non ho finito di eseguire il Display List. Il problema è che l'Antic deve eseguire il Display List 50 volte al secondo perchè i televisori devono essere “rinfrescati” 50 volte al secondo. Questo significa che per quasi tutto il tempo il 6502 rimane fermo come un cretino aspettando che l'Antic faccia i suoi comodi; più il Display List è complicato e meno lavora il 6502. Per aggirare questo problema si sono inventati gli sprite hardware che sugli atari si chiamano Player/Missile. I P/M hanno una propria area di memoria, possono avere 1 solo colore (che può essere diverso da quelli della memoria video) e possono essere larghi al massino 8 pixel mentre possono essere alti anche 32 pixel. Pensate ai P/M come a dei trasferelli che passano sopra lo schermo, non sono niente altro. I P/M erano stati pensati per dei giochi come Pac-Man (con sprite piccolini). Per giochi con sprite più larghi di 8 pixel bisogna realizzare sprite software (ovvero elaborati dal 6502); gli sprite software sono molto complessi e dato che la CPU ha poco tempo per lavorare è il motivo per cui sono lenti sugli Atari 8 bit. Gli sprite software hanno un'altra limitazione: sono fermi ai 4 colori dello schermo. Devo sfatare un mito, non è vero che gli Atari 8 bit sono in grado di visualizzare 128 colori simultaneamente; questa è una gran fregatura della pubblicità dell'epoca. Affermare che un Atari 800 può visualizzare 128 colori è come affermare che una Panda 30 può fare i 200 km/h (li può fare ma solo in discesa). Gli atari 8 bit hanno 4 registri per il colore quindi possono visualizzare al massimo 4 colori che diventano 5 in modalità testuale. Quando vedete un gioco che ha 5 colori è probabile che sia un gioco che sta lavorando in modalità testo. Si può aggirare il limite dei 4 colori sfruttando gli interrupt ma comunque si ottengono sempre un massimo di 4 colori per riga. Il chip GTIA quando disegna lo schermo sul televisore non lo disegna tutto in una volta, lo disegna una riga alla volta; se si cambiano i registri del colore mentre il GTIA sta scrivendo lo schermo è l'unica maniera per visualizzare più di 4 colori simultaneamente. Nella mia carriera di videogiocatore non ho mai visto giochi con più di 7/8 colori. Il Commodore 64 ha stracciato di brutto l'Atari 800 perchè poteva visualizzare contemporaneamente 16 colori e perchè gli sprite hardware del C64 non erano limitati a 8 pixel di largheza per 1 colore. Riassumendo, l'Atari se deve sprecare potenza di calcolo per visualizzare più di 4 colori non ha poi abbastanza potenza di calcolo per l'elaborazione del gioco. I giochi del C64 di seconda generazione non sono per questo motivo convertibili su un Atari. L'unico gioco degli Atari che non è convertibile sul C64 è Yoomp perché il C64 non ha una modalità grafica con risoluzione di 160x96, ne ha una di 160x200 ed avrebbe troppi pixel da disegnare. Dall'altro lato gli atari 8 bit si possono solo sognare lo scorrimento con parallasse di un gioco come “Shadow of the beast” del C64. Pur avendo caratteristiche uniche, gli Atari 8 bit rispetto al C64 erano delle macchine estremamente obsolete che non reggevano il confronto. Solo gli utenti registrati possono vedere i link!Registrati o Entra nel forum! Solo gli utenti registrati possono vedere i link!Registrati o Entra nel forum! ataricomputers: Ciao QWE Grazie per l'ottima descrizione dell'Atari 800. ;-) Riguardo il numero dei colori, hai scritto che "gli atari 8 bit hanno 4 registri per il colore quindi possono visualizzare al massimo 4 colori che diventano 5 in modalità testuale." Ma questo non dipende dalla modalità grafica selezionata? Mi spiego: in GRAPHICS 15 sono disponibili 4 registri colore indipendenti, mentre in GRAPHICS 10 (GTIA) sono disponibili 9 registri colore indipendenti (704-712) quindi punti/colore sullo stesso scanline. Sto sbagliando? A presto Maurizio Qwe: Ciao Maurizio. In realta tutte le modalità grafiche che hanno 192 righe per il chip Antic sono la stessa cosa; è il chip GTIA che è in grado di interpretare i dati in modo diverso. Il GTIA rispetto al CTIA può interpretare la modalità grafica di alta risoluzione in 3 nuovi modi. Non è che il GTIA ha più registri del CTIA; nella modalità grafica che dici tu (la 10) hanno usato un semplice espediente per "raggiungere" 9 registri colore. Sull'atari ci sono 4 registri colore + 4 registri colori per i Player/Missile + 1 registro per il colore di sfondo (background). Per realizzare la modalità graphics 10, ai 4 registri colore della memoria video hanno aggiunto i 4 registri degli sprite più il registro del background ---> 4+4+1 = 9 Purtroppo i pixel della modalità 10 sono talmente larghi che non sono idonei per creare giochi ne tanto meno per fare porting di giochi. ataricomputers: Ciao Qwe Grazie per l'info (in effetti bastava ragionarci su). :-) Maurizio Philsan: Nel primo post ci sono alcune imprecisioni e credo che manchino alcuni dettagli che secondo me è importante sottolineare. Premetto che l'Atari 800 è uscito due anni e mezzo prima del C64, un'eternità dal punto di vista informatico. Dunque: - gli sprite sono monocolor e larghi solo 8 pixel ma anche alti quanto tutto lo schermo; - le dimensioni verticali dello schermo arrivano a 240 pixel e quelle orizzontali a 336; l'Atari 800, come l'Amiga, possiede l'importante caratteristica dell'overscan, apprezzabile in particolare usando l'hardware reale; - il processore è più veloce del C64, vantaggio palpabile anche nelle recenti conversioni di Total Eclipse o The Great Escape; - "comunque si ottengono sempre un massimo di 4 colori per riga": possono esserci più di 4 colori per linea perché i registri possono essere cambiati più volte mentre il pennello del tubo catodico disegna lo schermo; - "nella mia carriera di videogiocatore non ho mai visto giochi con più di 7/8 colori": ecco una lista (incompleta) dei giochi con più di 16 colori (il numero accanto al nome indica i colori contemporaneamente a schermo): Alley Cat 22 Alternate Reality - The City 38 Alternate Reality - The Dungeon 38 Assembloids XE 29 Atlantis 39 Battle Eagle 33 Bomb Jack 25 Bounty Bob Strikes Back 22 Break It 28 Callisto 45 Capture The Flag 24 Cavernia 17 Choplifter 22 Clowns & Ballons 17 Crack-Up! 29 Crossbow 19 Crownland 22 Cygnus X1 31 Decathlon 39 Demon Attack 17 Dimo's Quest 44 Disc Hopper 60+ Dropzone 18 Dyna Blaster 19 Eckn+ 19 Flimbo's Quest Flower Mania 32 Frogger 25 Frogger II 24 Galaxian 47 Getris 29 Great American Cross - Country Road Race 22 H.E.R.O. 25 Henry's House 21 International Karate 19 Inside 17 Jet Boot Jack 17 Jetboy 21 Joe Blade 17 Joe Blade II 17 Koronis Rift 30 Laser Gates 81 Marbled 29 Mashed Turtles 33 Master of the Lamps 17 Mahjong XE 17 Miner 2049er 18 Murder on the Zinderneuf 19 Nightmares 18 Ocean Detox 24 Pitfall II 20 Plastron 23 Pogotron 57 Pole Position 22 Popeye 17 Preppie 23 Rainbow Walker 34 Revenge of the Mutant Camels 20 RGB 35 Ridiculous Reality 28 River Raid 27 Rocks 24 Rolltris 25 Saracen 22 Scooter 21 Seaquest 23 Space Lobsters 23 Star Raiders II 22 Star Rider 73 Star Trek 17 Stealth 25 Technoid 31 Thetris 26 Timeslip 47 Track & Field 18 Tree Surgeon 17 Trivial Pursuit 17 Unicorn Horn 23 Wall, The 64 Wall War 25 Wizard 17 Whomper Stomper 21 X:8 25 Yar's Strike 28 Zenji 24 - come visto sopra i giochi possono avere ben più di 16 colori; le immagini statiche però sono addirittura impressionanti, basta dare un'occhiata a questo thread per rendersi conto di cosa riesce a fare un computer del 1979: Solo gli utenti registrati possono vedere i link!Registrati o Entra nel forum! Il C64, ribadisco di 2 anni e mezzo più recente, aveva il grande vantaggio degli 8 sprite multicolor di dimensioni più grandi orizzontalmente, utilissimi per la maggior parte dei giochi; i suoi pochi colori erano sufficienti e più facilmente gestibili. Ovviamente un gioco con 8 sprite multicolor (o anche più in multiplexing) che si muovono liberamente sullo schermo è molto difficile da convertire per Atari 800 (la sua maggiore velocità non riesce a sopperire a questo svantaggio hardware). Al contrario, giochi tarati sulle caratteristiche dell'Atari 800, sono difficili da convertire per C64. Concludendo il C64, pur con alcuni limiti rispetto al ben più vecchio Atari 800, aveva caratteristiche hardware che facilitavano la programmazione della maggior parte delle tipologie di giochi; inoltre, era commercializzato ad un prezzo inferiore rispetto all'Atari 800, sia per scelta strategica del compianto Jack Tramiel sia perché Commodore aveva il vantaggio di produrre i suoi chip in casa. I successivi Atari XL e XE non riuscirono a competere col C64 ma assicurarono buone vendite sino al 1991. Ritengo che l'Atari 800 sia stato molto importante; come il predecessore VCS e il successore Amiga, aveva caratteristiche all'avanguardia al momento della sua introduzione sul mercato.