Autore Topic: Rom E Ram  (Letto 2045 volte)

Loky

  • Utente
  • **
  • Post: 130
Rom E Ram
« il: 04 Gennaio 2008, 00:09:33 »
 Oggi leggevo giusto per curiosità il volume I "C64 suono e grafica" della J.Soft (all'epoca 24.000L =)  )
mi sono imbattuto nei seguenti 2 dubbi:

1)  A pag.47 si sta spiegando come sostituire 4 comandi basic con 4 nuovi comandi per la gestione della grafica ad alta risoluzione.  Qualche pagina prima (p.44) spiega
"Dal momento che abbiamo a disposizione dello spazio nella memoria ad accesso casuale (RAM) al di sotto della memoria di sola lettura (ROM), possiamo fare una copia del BASIC in RAM e quindi modificarla per i nostri scopi."
Quanto detto viene tradotto nel programma (mostrato subito dopo) in:
20 REM SPOSTA IL BASIC DALLA ROM ALLA RAM
30 FOR I = 40960 TO 49151: POKE I, PEEK(I): NEXT I
il mio dubbio è:prende il contenuti della cella Iesima [PEEK(I)] e lo pone nella cella Iesima [POKE I,...] ...non mi torna! Sposta il contenuto della cella nella stessa cella?

2) pag.46 piccola raccomandazione: "Nel copiare il programma siate particolarmente attenti, poichè un numero sbagliato può provocare il blocco totale del calcolatore (costringendovi a spegnerlo per cancellare il contenuto della memoria ROM)"
mmm....cancellare il contenuto della memoria ROM???

 

fab

  • Utente
  • **
  • Post: 493
    • http://wav-prg.sourceforge.net/
  • Gioco Preferito: Tetris, Turrican, Impossible Mission
Rom E Ram
« Risposta #1 il: 04 Gennaio 2008, 11:35:04 »
 Il C64 ha 64K di RAM, 8K di Basic ROM, 8K di Kernal ROM, e 4K di "memory mapped I/O" (cioè, cose che appaiono come locazioni di memoria, ma in realtà sono accessi agli altri chip, es. il VIC per la grafica, il SID per il suono, i CIA ...)

Il processore, però, può indirizzare solo 64K.

Il trucco inventato dagli ingeneri della Commodore è questo: alcune aree della memoria RAM possono essere "nascoste", in modo che le letture, o le letture e le scritture, in quell'area di memoria, non abbiano effetto sulla RAM, ma sulla ROM, o sull'I/O.

La situazione di default, all'accensione, è questa. Solo 44K di RAM sono leggibili (con PEEK). I restanti 20K sono mappati su ROM o I/O.

Se la locazione di memoria non è mappata, la PEEK e la POKE leggeranno e scriveranno la RAM.
Se la locazione di memoria è mappata su Kernal ROM o Basic ROM, la PEEK legge la ROM, ma la POKE scrive sulla RAM! E' questo il motivo per cui POKE I,PEEK(I) non è inutile come sembra.
Se la locazione di memoria è mappata su I/O, PEEK e POKE agiscono si registri di I/O.

Le mappature sono determinate dal contenuto della locazione 1 (che non è una locazione di memoria, anche se sembra, ma un registro del processore).

Per ulteriori informazioni, la guida di riferimento del programmatore spiega tutto in maniera più approfondita.

"cancellare il contenuto della memoria ROM" è improprio. In realtà, quello che il programma si propone di fare, è copiare la ROM nella RAM "sottostante", e poi smettere di mappare quell'area, in modo tale che venga letta la RAM invece della ROM (che dopo la copia, ha lo stesso contenuto). Spegnendo e rieaccendendo, quello che si cancella non è la ROM, ma la RAM che veniva vista al suo posto.
Un giapponese sa recitare a memoria tutti i numeri di pi greco fino all'83431º decimale. Sa a memoria anche l'unico numero telefonico che è nella sua agendina - Daniele Luttazzi

Loky

  • Utente
  • **
  • Post: 130
Rom E Ram
« Risposta #2 il: 05 Gennaio 2008, 17:56:09 »
 ora si che è chiaro =)

che testoni gli ing. della commodore =P


GRASSIE