Domanda

Mi chiedo su come il NES visualizza il suo muscolo grafica. Ho ricercato roba online e leggere attraverso di essa, ma mi chiedo un'ultima cosa:. Nametables

In sostanza, da quello che ho letto, ogni blocco 8x8 in un NES punti NameTable a una posizione nella tabella modello, che detiene la memoria grafica. Inoltre, il NameTable ha anche una tabella di attributi che imposta un certo tavolozza di colori per ciascun blocco 16x16. Sono collegati insieme in questo modo:

(supponendo 16 8x8 blocchi) NameTable, con A B C D = puntatori a sprite dei dati:

ABBB
CDCC
DDDD
DDDD

tabella degli attributi, con 1 2 3 = i puntatori ai dati della tavolozza, con

1<2<
^'^'
3<3<
^'^'

Quindi, nell'esempio di cui sopra, i blocchi sarebbero così colorato come

1A 1B 2B 2B

1C 1D 2C 2C

3D 3D 3D 3D

3D 3D 3D 3D

Ora, se ho questo su una schermata fissa - funziona benissimo! Perché la risoluzione è 256x240 pixel NES. Ora, come fare queste tabelle vengono regolate per lo scorrimento?

A causa NameTable 0 può scorrere in NameTable 1, e se continuate a scorrimento NameTable 0 avvolgerà di nuovo intorno. Che ricevo. Ma quello che non capisco è come scorrere le coperture della tabella attributo intorno pure. Da quello che ho letto on-line, i blocchi 16x16 assegna attributi per le distorsioni del colore causerà sulle piastrelle bordo dello schermo (come si vede quando si scorre da sinistra a destra e viceversa in SMB3).

La preoccupazione che ho è che ho capito come per scorrere le nametables, ma come si fa scorrere la tabella degli attributi? Per intsance, se ho un blocco verde sul lato sinistro dello schermo, spostare lo schermo verso destra dovrebbe in teoria causa delle piastrelle a destra per essere verde così finché si muovono più in fotogramma a cui faranno ripristinate i loro colori normali.

~~~~ EDIT: Voglio precisare che io so circa le linee di scansione, X e Y. Questo pensiero appena eseguito attraverso la mia mente.

dire Let Sono alla linea di scansione Y di 10. Ciò significa che sto leggendo 10 valori nelle mie nametables, in senso orizzontale. Ciò significherebbe la prima colonna è fuori dello schermo, come ha solo pixel di larghezza 8. Tuttavia, i soggiorni attributo colore, poiché ha larghezza 16.

Supponendo l'attributo di colore per l'intera colonna è verde, I sarebbe corretto supponendo che l'utente, i primi 6 pixel a sinistra dello schermo sarebbero colorati di verde, e più a destra 10 sullo schermo devono essere verdi anche? Quindi, dovrei essere corretto nel mio presupposto che in base allo schermo, a sinistra?

È stato utile?

Soluzione

Questo sito Sono sicuro che sono già molto, molto familiare. Io vi prefazione questo dicendo che non ho mai avuto modo di programma per NES, ma io sono molto esperto con tutto l'hardware Gameboy che sia mai stato rilasciato e le azioni NES molti, ahh capricci con la GB / DMG. Ho intenzione di scommessa che si sia bisogno di fare una delle poche cose:

  1. Do not scorrere la tabella degli attributi. Assicurarsi che i livelli hanno tutti i blocchi di simile colore lungo la direzione di marcia. Direi che molti giochi di prima generazione hanno fatto questo.

  2. Vai avanti e permettono attributo limitato scorrimento -. Basta fare in modo che le aree in cui le modifiche vengono verificano sono parzialmente colore condiviso o scarsa sufficiente che il cambiamento non sarà notevole

  3. Tiriamo fuori la vecchia skool Atari 2600 timer e il tempo una scrittura per registrare $ 2006 alla fine di aggiornamento HBlank per ottenere lo swap colore è necessario fare, attendere qualche tic, poi ritornerà durante il periodo di ritorno HBlank in modo che il bordo sinistro della riga successiva non è interessato. Ho la sensazione che questa è la soluzione usato più spesso, ma senza davvero un buon emulatore e pazienza, sarà un dolore nel culo. Sarà anche mangiare un po 'sul suo utilizzo complessivo della CPU come si deve aspettare in interruzioni su più linee di scansione per ottenere il vostro effetto fatto.

Vorrei avere una maggiore risposta concreta per voi, ma questo aiuta si spera un po '. Grazie al cielo la GB / DMG aveva un sistema di scorrimento leggermente più avanzato. :)

Altri suggerimenti

Sia Super Mario Bros. 3 e Kirby del display avventura colorazione artefatti sul bordo dello schermo quando si scorre. Credo che entrambi i giochi impostare il bit che gli spazi sinistra 8 pixel dello schermo, in modo da 0-8 pixel saranno influenzati su qualsiasi fotogramma uno.

Se non ricordo male, avventura di Kirby cerca sempre di mettere le colonne colore-glitched sul lato dello schermo che scorre fuori per renderlo meno evidente. Non credo che questi manufatti sono prevenibili senza passare per il mirroring verticale, che introduce le difficoltà della propria.

. Disclaimer: è stato come cinque anni da quando ho scritto alcun codice NES

Ogni NameTable ha la sua tabella attributo, quindi non ci dovrebbero essere artefatti grafici scorrendo da un NameTable all'altro. Il tipo di colore glitch si fa riferimento è in realtà solo un problema se i tuoi rotoli di gioco sia verticalmente che orizzontalmente. Hai solo due nametables, così lo scorrimento in entrambi i modi che si richiede a cannibalizzare lo schermo visibile. Ci sono varie soluzioni a questo problema, una grande sintesi di che si può trovare in questo post nesdev:

http://nesdev.parodius.com/bbs/viewtopic. php? p = 58509 # 58509

Questo sito può essere di qualche aiuto. http://www.games4nintendo.com/nes/faq.php#4

(Ricerca per "Che succede con $ 2005/2006?" E cominciare a leggere intorno a quella zona.)

Si presenta fondamentalmente come la sua impossibilità di farlo perfetto di pixel, ma quelli stanno per essere i bit probabilmente stai andando ad avere bisogno di esaminare.

Vorrei poter essere più di aiuto.

Ogni NameTable ha la propria tabella degli attributi. Se si limita il vostro mondo di gioco a soli due schermi, avrete solo bisogno di scrivere le nametables e tabelle di attributi, una volta. La parte difficile viene quando si tenta di fare mondi più grandi di due schermi. Super Mario Bros. 1 ha fatto questo scorrendo verso destra, avvolgendo intorno, se necessario, e rendendo la colonna livello di uno dei blocchi alla volta (16 pixel) poco prima di quella colonna è entrato in vista. Non so come si potrebbe codificare in modo efficiente (tenere a mente hai solo un millisecondo di tempo Vblank).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top