18.07.2013 Views

Nintendo Entertainment System

Nintendo Entertainment System

Nintendo Entertainment System

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Adresser Beskrivelse<br />

$0000 - $07FF RAM<br />

$0800 - $1FFF Tre speilinger av RAM<br />

$2000 - $2007 PPU-registre<br />

$2008 - $3FFF Gjentatte kopier av PPU-registrene<br />

$4000 - $4017 APU-, kontroller-, og DMA-registre<br />

$4018 - $7FFF Frie adresser som kan benyttes av spillkassetten<br />

$8000 - $FFFF PRG-ROM<br />

For å lagre noe i RAM skriver vi altså til en adresse mellom $0000 og $07FF. 3<br />

3.3. ADRESSEOMRÅDET<br />

Skal vi kommunisere med PPU-en eller APU-en må vi skrive til adressene $2000 til $2007 og<br />

$4000 til $4017. Disse er eksempler på det som kalles adresseregistre. I motsetning til RAM og<br />

ROM der vi enten lagrer data eller leser data, representerer disse adressene interne registre i<br />

komponenten de tilhører. Noen adresseregistre kan f.eks. være såkalte statusregistre som er slik<br />

at når vi leser fra dem, får vi en oversikt over hvilken tilstand komponenten er i. PPU-en har<br />

f.eks. et statusregister (adresse $2002). Ved å lese fra dette får vi ut informasjon om hvorvidt<br />

PPU-en er i vblank, om det har skjedd en såkalt sprite 0-kollisjon, og mer. Andre adresseregistre<br />

kan være konfigurasjonsregistre som benyttes til å konfigurerer komponenten.<br />

Området fra $4018 til $7FFF er fritt. Her kan hver spillkassett koble disse adressene fritt til<br />

nær sagt hva det måtte være. Spillkassetter bruker dette typisk til batteridrevet RAM til å<br />

lagre saves i, eller til å kommunisere med såkalte mappere. En mapper er en brikke som utvider<br />

funksjonaliteten til NES-en, først og fremst for å få mer lagringsplass. Disse ble oppfunnet når<br />

spillene begynte å bli så avanserte at de krevde mer plass enn de 32KiB-ene som er avsatt til<br />

PRG-ROM i adresseområdet. For å få mer plass har man for eksempel fire ROM-chipper på<br />

16KiB: Én med kode og tre andre med data (brett-designene for eksempel). ROM-chippen med<br />

koden blir typisk koblet til fra $C000 til $FFFF, og så kan det andre området fra $8000 til $BFFF<br />

kobles til en av de tre andre ROM-chippene, etter behov. Dette er det mapperen utfører. Når<br />

koden for eksempel trenger data som ligger på ROM-brikke nummer 3, sender den en instruks<br />

til mapperen (vanligvis i et adresseregister) om at ROM-brikke 3 skal switches inn. Deretter kan<br />

den lese fra denne ROM-brikken på vanlig måte gjennom adressene fra $8000 til $BFFF.<br />

Igjen er det viktig å merke seg at for CPU-en er det ikke noen forskjell på adressene. Hvis den på<br />

en eller annen måte kommer over en JMP $2002-instruksjon vil den starte å hente instruksjoner<br />

fra $2002, som er statusregisteret til PPU-en. Det den får tilbake fra PPU-en vil den da tolke som<br />

en instruksjon (husk på at instruksjoner er tall). Dette kan tilfeldigvis være en gyldig instruksjon,<br />

eller det kan være en ugyldig instruksjon som får prosessoren til å gå i lås. Poenget er at vi må<br />

passe på at vi ikke lar CPU-en få gå fritt utover i adresseområdet. Når vi er ferdig å gi CPU-en<br />

ting den skal gjøre er det vanlig praksis å la den gå inn i en uendelig løkke. På den måten holder<br />

vi den i sjakk, for å si det slik.<br />

3 Vi kan også skrive til adressene mellom $0800 og $1FFF. De samme RAM-bytene dukker opp i adressene fra<br />

$0800 til $0FFF, $1000 til $17FF og $1800 til $1FFF. Å skrive til adressen $0803 vil ha akkurat samme effekt<br />

som å skrive til $0003 eller $1003.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!