Ready64 Forum
Commodore 64 => Commodore 64 & Ready64 => Topic aperto da: saver71 - 01 Aprile 2008, 18:39:56
-
Buonasera a tutti.
Ho sempre avuto un dubbio in merito ad un argomento spesso trattato con i miei vecchi compagni di classe all'epoca in cui possedevamo il Commodore 64.
Uno di essi affermava in pratica che esistesse una Ram nascosta sotto la Rom Basic o Rom Kernal (non ricordo bene) e che per questo motivo il Commodore 64 aveva questo nome, perché la Ram effettiva totale era proprio di 64k ram e non solamente di 38k, come tutti credevano. Sempre facendo memoria, si affermava che tali banchi di memoria venissero resi disponibili alla scrittura mediante l'inserimento di determinati valori in precise locazioni dim memoria, e sempre con altri valori, venissero protette alla scrittura.
Chi può illuminarmi in merito?
Grazie fin d'ora.
saver
-
La locazione che controlla la visibilita' della ram sotto la rom del basic ($A000-$BFFF), del kernel ($E000-$FFFF) e dell'area I/O ($D000-$DFFF) avviene tramite la locazione di memoria 1.
comunque ti ricordo che queste aree di ram possono essere utilizzate solo tramite programmi in linguaggio macchina.
ciao
-
Ah, bene! Grazie per la tua conferma.
Che tu sappia queste aree di ram sono state largamente utilizzate dai programmatori nella scrittura di software (giochi o programmi di utilità) oppure la maggioranza dei programmi utilizzava sempre e comunque al massimo i 38k della ram basic?
-
Che tu sappia queste aree di ram sono state largamente utilizzate dai programmatori nella scrittura di software (giochi o programmi di utilità) oppure la maggioranza dei programmi utilizzava sempre e comunque al massimo i 38k della ram basic?
Ma che domanda è? È chiaro che se la cosiddetta "RAM sotto la ROM" c'è, è perché un (buon) programmatore possa usarla, se fosse stata inutilizzabile non ce l'avrebbero messa e il C64 sarebbe stato ancora più economico.
E un (buon) programmatore, naturalmente, al bisogno (o dove dettato da maggiore efficienza) usa tutta la RAM utilizzabile, se non ne ha bisogno può anche decidere di non usarla e (come dici tu) limitarsi a quei 38 KB.
Stai sicuro che molti giochi e software in LM che non usano il BASIC disabilitano tranquillamente la rispettiva ROM, andando ad utilizzare la RAM "sottostante".
L'utilizzo della quale, comunque, è sì possibile solo in linguaggio macchina, ma non strettamente vincolato alla disabilitazione del BASIC: programmando opportunamente è possibile sfruttare comunque tutta la RAM andando a modificare la locazione 1 in maniera più o meno continuativa. È possibile estendere il BASIC utilizzando solo in parte la RAM normalmente visibile da BASIC ($8000-$9FFF o $C000-CFFF) e conservando routine in linguaggio macchina "sotto" la ROM del BASIC ($A000-$BFFF); il Simons' BASIC invece usa la RAM sotto il kernal per la pagina grafica ($E000-$FFFF, oltre all'intervallo $C000-$C3FF per gli attributi), permettendoti di utilizzare la modalità hires senza rinunciare a ulteriori KB oltre gli 8 sostituiti dalla cartuccia.
-
Grazie Eregil, sei veramente preparato, i miei complimenti!!
Cìè veramente da imparare da voi...
Comunque approfitto di questo post per annunciarvi la consegna (finalmente) del mio ultimo acquisto, un super Joystick Arcade a microswitch, mi è arrivato 5 minuti fa, sono veramente contento!!
Anche perché finora giocavo con un joypad per ps1 collegato ad un pc converter.
Ma era veramente scomodo; i giochi per Commodore 64 vanno giocati col Joystick e dato che all'epoca avevo un Arcade, ho voluto comprarne uno, che oltretutto ho faticato a trovare. Comunque è bellissimo. ;)
Accetto i vostri auguri ragazzi!! :lol:
-
Mai capito perche' i 12 (12 vero?) Kappa da 49152 non erano disponibili al BASIC! Che gli costava?
-
Per avere una migliore panoramica riguardo la struttura della memoria, la gestione dei banchi e il kernal consiglio la lettura di due articoli pubblicati rispettivamente su C.C.C. n° 17 (http://ready64.org/ccc/17/020.jpg) e 32 (http://ready64.org/ccc/32/016.jpg).
-
12 (12 vero?) Kappa da 49152
4KB, fino a 53247
-
Mai capito perche' i 12 (12 vero?) Kappa da 49152 non erano disponibili al BASIC! Che gli costava?
il basic ha bisogno di un area di memoria ram CONTIGUA, i 4 k da 49152 ($C000) non sono contigui all'area ram del basic perche' tra essi c'e' il basic ($A000-$BFFF)
il simons basic usa un pregio del VIC-II , tale chip vede solo e soltanto la ram, quindi puntando l'area grafica hires a $E000 non c'e' bisogno di disattivare il kernel
infatti dal punto di vista del VIC ci sono solo 4 banchi da 16K ognuno di ram, per lui le rom basic e kernel non esistono. a giorni voglio provare se mettendo un font nell'area ram $D000 - $DFFF esso viene visualizzato senza problemi. teoricamente si
ciao
-
mettendo un font nell'area ram $D000 - $DFFF esso viene visualizzato senza problemi. teoricamente si
Si te lo confermo, la rom del chargen viene vista dal VIC-II non a $d000 ma mirrorata "virtualmente" a $1000-$1fff e $9000-$9fff. Infatti in quelle 2 zone e' inutile mettere sprites, bitmap o charsets perche' tanto non c'e' modo di fargli vedere altro. Non per nulla nei demo/intro la zona preferita per mettere un sid e' proprio a $1000.
Se invece metti un charset alternativo nella ram a $d000 vedrai quello, settando opportunamente $0288, $d018 e $dd00.
Da vice monitor:
(C:$ded7) > 288 c4
(C:$ded7) > d018 14
(C:$ded7) > dd00 c0
(C:$ded7) > 01 33
(C:$ded7) t d808 dfff d000
(C:$ded7) > 01 37
(C:$ded7)
copio dal charset minuscolo ma offsettato di un char intero cosi' ogni carattere appare come se fosse il successivo.
Per i mods: avevo gia' richiesto in chat lo spostamento di questa discussione in Programmazione, ora lo faccio anche qua. Grazie.
/me cracks the whip
-
bene! grazie delle dritte iAN! lo immaginavo che si poteva fare e visto che per accedere a quella ram bisogna praticamente disattivare tutto, la cosa piu' logica a mio avviso e' metterci un bel font completo (da 4k) in modo da avere tutto il resto della ram ad uso di sprites,hires,sid,lm,basic ecc..
appena ho un po di tempo faccio la modifica al mio programmino 64ES
ciao
-
il basic ha bisogno di un area di memoria ram CONTIGUA, i 4 k da 49152 ($C000) non sono contigui all'area ram del basic perche' tra essi c'e' il basic ($A000-$BFFF)
A questo punto mi sorge spontanea l'ulteriore domanda: perche' non hanno messo il BASIC all'inizio o alla fine dei 64 KB in modo da rendere disponibile tutto il rimanente?
-
Questa SI!... che e' una bella domanda! :D :D :D
Effettivamente sarebbe bastato mettere basic + kernel a $C000-$FFFF e gli indirizzi I/O da $0400 a $04FF infine lo schermo a $0500.
in questo modo il basic avrebbe avuto ben 46847K a disposizione....
oppure come nel plus4 mettere le rom e gli I/O su un'altro banco lasciando al basic circa 62K liberi...
misteri della Commodore
-
perche' non hanno messo il BASIC all'inizio o alla fine dei 64 KB in modo da rendere disponibile tutto il rimanente?
Cosi' come c'e' da chiedersi come mai ci sono registri SID e VIC inutilizzati quando altri registri contengono diversi bit per diverse funzioni, o perche' il 6502 abbia molte istruzioni mancanti pur avendo tanti opcodes inutilizzati, e infine perche' la ram colore, che gia' e' una ram ESTERNA ai 64k, non sia composta da 1kbyte pieno ma da SOLO 1024 nibbles (solo i 4 bit bassi sono usabili, e lo schermo ne usa solo 1000).
Le scelte di progettazione sono dovute a fretta sommata a necessita' economiche (meno registri meno costi di produzione) cosi' come la disposizione della mappa di memoria possono essere dettate da mille fattori, ma dovrebbero dircelo gli ingegnieri stessi.
-
qui puoi trovare la mappa della memoria:
http://www.atarimagazines.com/compute/issu..._MEMORY_MAP.php (http://www.atarimagazines.com/compute/issue29/394_1_COMMODORE_64_MEMORY_MAP.php)
-
Per quanto riguarda la ram STATICA del colore: chip "2114" è appunto una 1024x4bit e quindi la parte alta del dato non verrebbe memorizzata (servirebbe in "parallelo" un altro chip "2114").
La ram colore è, come le ROM, abilitata dalla PLA sopra agli indirizzi del bancodi ram dinamica da 64K, e quindi non potrebbe essere "refresciata" dal VIC, ergo deve essere statica e quindi (anni '80) un chip 2114 era la soluzuione obbligatoria e non troppo dispendiosa.
-
.... e infine perche' la ram colore, che gia' e' una ram ESTERNA ai 64k, non sia composta da 1kbyte pieno ma da SOLO 1024 nibbles (solo i 4 bit bassi sono usabili, e lo schermo ne usa solo 1000). ..
forse perche avendo solo 16 colori e' possibile memorizzare i colori di ogni cella in 4 bit.. per cui hanno risparmiato sulla ram colore (che senso aveva mettere una ram da 8 bit?) inoltre e' vero che il video ha 1000 locazioni ma e' anche vero che non esistono ram da 1000 byte ma da 1024. a quei tempi probabilmente una ram da 4 bit costava meno di una da 8... e quindi hanno risparmiato.
la domanda esatta comunque sarebbe stata: ma perche' cavolo hanno usato una ram dedicata (2114) per la ram colore non potevano semplicemente usare 1000 bytes dei 64k a disposizione? proprio come la ram video?