Sto fraintendendo qualcosa qui? 128 KB è molto più piccolo di 0xFFFFFF byte.
risposta
Il fatto che lo spazio degli indirizzi del SNES sia molto più grande del numero effettivo di indirizzi non è un problema. Su una macchina a 64 bit, i puntatori sono abbastanza grandi da occupare i byte 1.844674407 × 10 , ovvero circa 10 miliardi di GB. Non ho mai visto nessun computer con molta RAM, ma non è un problema. Alcuni indirizzi non si riferiscono a nessun indirizzo in memoria.
Spero che questo aiuti!
Ok, vecchia domanda, ma questo è appena spuntato su Google e posso assolutamente rispondere.
La confusione qui sta nella differenza tra RAM, ROM e lo spazio di indirizzamento totale del SNES. Mentre è vero che l'SNES ha solo 128K di RAM, è solo nella memoria volatile e non tiene conto dello spazio ROM. La RAM di lavoro è mappata ai banchi 7E e 7F, ciascuno 64K. La VRAM è un altro 32K di memoria volatile, ma è inaccessibile all'interno dello spazio degli indirizzi standard e deve essere scritta tramite registri speciali.
Le mappature ROM più comuni (denominate LoROM e HiROM all'interno della comunità) mappano le banche 32K nella metà superiore dello spazio degli indirizzi in ciascun banco o in 64 KB completi. "LoROM" mappa i banchi 32K (00: 8000-00: FFFF, 01: 8000-01: FFFF, ..., 3F: 8000-3F: FFFF, rispecchiato a 80: 8000-BF: FFFF) mentre HiROM esegue il mapping di banchi a 64K (C0: 0000-C0: FFFF, C1: 0000: C1-FFFF, ... FF: 0000-FF: FFFF). Come accennato in precedenza, la RAM di lavoro viene mappata su banchi 64K 7E e 7F. Non sono così familiare con il funzionamento di SRAM, ma quello viene mappato a 70: 0000 iirc e viene eseguito il mirroring in diversi banchi aggiuntivi nella regione 7X.
Modifica: Come ulteriore nota, ROM ovviamente è di sola lettura. È dove vengono memorizzati i dati del programma (leggi: il gioco, le sue istruzioni e le sue risorse). Tutto ciò che deve essere modificato (dati compressi che devono essere decompressi, dati di livello, nemici, statistiche del giocatore, tilemaps per qualsiasi visualizzazione sui vari sfondi, ecc.) Viene trasferito alla RAM (7E/7F) per l'elaborazione. La ROM è ciò che viene stampato sui chip delle tue cartucce, mentre la RAM è semplicemente piena di dati inutili ogni volta che il sistema viene acceso; è prassi piuttosto normale utilizzare un semplice ciclo per azzerare la RAM durante i passaggi di inizializzazione di un gioco.
La speranza che cancella tutto!
- 1. È possibile fare riferimento a un assembly .NET da ColdFusion?
- 2. È possibile fare riferimento a un'altra stringa in strings.xml?
- 3. Perché non è possibile che un progetto .net 4.0 faccia riferimento a un assembly 4.5?
- 4. Impossibile fare riferimento a un assieme in un modello T4
- 5. è possibile fare riferimento all'array anonimo in un ciclo for?
- 6. Come rilevare se un tipo è un DynamicProxy generato senza fare riferimento a Castle DynamicProxy?
- 7. C#: è possibile creare un riferimento all'assieme "debole" a un assembly con un nome sicuro
- 8. È possibile fare riferimento a un elemento specifico di un array anonimo in PHP?
- 9. Perché posso assegnare un nuovo valore a un riferimento e come posso fare riferimento a qualcos'altro?
- 10. È possibile restituire un riferimento a una variabile in C#?
- 11. Come posso fare riferimento agli assembly TeamFoundation nel mio progetto?
- 12. C# CompileAssemblyFromSource, aggiungere assembly di riferimento di cui ha bisogno?
- 13. Riferimento a .net framework 4.5.1 assembly in un progetto 4.0
- 14. Visual Studio 2012: Progetto non è possibile fare riferimento
- 15. È possibile fare riferimento a una chiave esterna in un altro database in Laravel?
- 16. Come dire se chiamare assembly è in modalità DEBUG dal lib compilato di riferimento
- 17. Come fare riferimento a file locali in un modulo npm?
- 18. Come fare riferimento a Microsoft.Solver.Foundation in vs12?
- 19. È possibile fare riferimento a diverse versioni del pacchetto NuGet in una soluzione di Visual Studio?
- 20. È possibile verificare se un elemento dell'interfaccia utente ha una determinata presa di riferimento?
- 21. Perché a volte (a volte) devo fare riferimento agli assiemi a cui fa riferimento l'assieme riferimento?
- 22. Perché devo fare riferimento a questa assemblea, anche se non è in uso
- 23. Come fare riferimento a un documento incorporato in Mongoid?
- 24. È possibile accedere a variabili definite in assembly da C?
- 25. Come posso fare riferimento a un sottodominio relativo in HTML?
- 26. Come faccio a fare riferimento a una risorsa in Java?
- 27. Come fare riferimento a un oggetto risposta con swagger?
- 28. Come fare riferimento a csproj da kproj
- 29. è possibile fare riferimento a una colonna come più chiavi esterne
- 30. Un assembly non ha versione?
Penso che questo mi aiuti a capire parte della mia domanda. Grazie! Il fatto è che nella mappa di memoria SNES questi indirizzi corrispondono effettivamente a indirizzi reali. È che solo una certa parte di questi indirizzi (128k di loro) sono RAM? Qual è l'altro tipo di memoria oltre alla RAM? (scusa se non ho assolutamente senso) – VJC1288
Come menzionato in questo link (http://romhack.wikia.com/wiki/SNES_ROM_layout), la memoria include diverse regioni * mirror *, che sono indirizzi che reindirizzano ad altre posizioni RAM . Ciò significa che determinate aree di memoria sono raddoppiate, rendendo gli indirizzi che normalmente sarebbero non validi, invece di reindirizzare a posizioni valide. – templatetypedef