Frage

Ich frage mich, wie das NES zeigt seinen grafischen Muskel. Ich habe Sachen online recherchiert und durchgelesen, aber ich frage mich, über eine letzte Sache. Nametables

Im Grunde genommen von dem, was ich gelesen habe, jeder 8x8-Block in einem NES Nametable zeigt auf eine Stelle in der Mustertabelle, die Grafik-Speicher hält. Darüber hinaus hat der Nametable auch eine Attributtabelle, die eine bestimmte Farbpalette für jeden 16x16 Block setzt. Sie sind vernetzt zusammen wie folgt:

(unter der Annahme, 16 8x8-Blöcke) Nametable, mit A B C D = Zeiger Daten Sprite:

ABBB
CDCC
DDDD
DDDD

Attributtabelle mit 1 2 3 = Zeigern auf Farbpalettendaten, mit

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

Also, in dem obigen Beispiel würde die Blöcke als so gefärbt werden

1A 1B 2B 2B

1C 1D 2C 2C

3D 3D 3D 3D

3D 3D 3D 3D

Nun, wenn ich diese auf einem festen Bildschirm - es funktioniert super! Da die Auflösung von NES 256x240 Pixel. Nun, wie diese Tabellen bekommen angepasst zum Scrollen?

Da Nametable 0 kann in blättern Nametable 1, und wenn Sie halten Scrollen Nametable 0 wird wickeln wieder um. Dass ich bekommen. Aber was ich nicht bekommen, ist, wie die Attributtabelle umschlingt und blättern. Von dem, was ich online gelesen habe, weist die 16x16 Blöcke es Attribute für verursachen Farbverfälschungen auf den Randfliesen des Bildschirms (wie gesehen, wenn Sie nach rechts und umgekehrt in SMB3 blättern Sie nach links).

Die Sorge, die ich habe ist, dass ich verstehe, wie die nametables blättern, aber wie bewegen Sie die Attributtabelle? Für intsance, wenn ich einen grünen Block auf der linken Seite des Bildschirms, in der Theorie den Bildschirm nach rechts bewegt, um den richtigen Sache der Fliesen soll grün zu sein als gut, bis sie mehr in dem Rahmen bewegen, zu dem es ihnen zurückkehren zu ihre normalen Farben.

~~~~ EDIT: Ich möchte darauf hinweisen, dass ich weiß, über die Abtastlinien, X und Y. Dieser Gedanke ließ gerade durch den Kopf.

Lassen Sie uns sagen, ich bin bei Scanlinie Y von 10. Das bedeutet, dass ich 10 Werte in meine nametables gerade lese, horizontal. Das wäre meine erste Spalte zu bedeuten den Bildschirms ausgeschaltet ist, da es nur Pixelbreite von 8 Allerdings hat die Farbe Attribut bleibt, da es Breite von 16 hat.

das Attribut Farbe Unter der Annahme für die gesamte Spalte grün ist, würde ich in der Annahme richtig sein, dass dem Benutzer, die ersten 6 Pixel auf der linken Seite des Bildschirms grün gefärbt sein würde, und der am weitesten rechts 10 auf dem Bildschirm sollte grün auch? So würde ich in meiner Annahme richtig sein, dass nach dem Bildschirm, die linken?

War es hilfreich?

Lösung

Diese Seite Ich bin sicher, Sie sind schon sehr, sehr vertraut mit. Ich werde das Vorwort mit den Worten ich nie für das NES zu Programm bekam, aber ich bin sehr mit all den Gameboy Hardware erfahren, die jemals veröffentlicht wurde und die NES teilt viele, ahh Macken mit der GB / DMG. Ich Wette gehen, dass Sie entweder Notwendigkeit, eines der wenigen Dinge zu tun:

  1. blättere nicht die Attributtabelle. Stellen Sie sicher, dass Ihre Ebenen alle similiar Farbblöcke entlang der Richtung haben Sie sich bewegen. Ich würde vermuten, dass viele der ersten Generation Spiele das getan hat.

  2. Gehen Sie voran und ermöglicht eine begrenzte Attribut Scrolling -. Nur sicherstellen, dass die Bereiche, in denen die Veränderungen auftretenden sind entweder teilweise Farbe geteilt oder sparce genug, dass die Änderung nicht erkennbar sein wird

  3. Gehen Sie Ihr altes skool atari 2600 Timer und Zeit ein Schreib $ 2.006 am Ende des HBLANK Update registrieren, um die Farbwechsel erhalten Sie getan brauchen, warten Sie ein paar Ticks, dann revert während der HBLANK Wiederkehrperiode, so dass der linke Rand der nächsten Zeile nicht beeinträchtigt wird. Ich habe das Gefühl, das die Lösung am häufigsten verwendet, aber ohne einen wirklich guten Emulator und Geduld, es wird ein Schmerz im Hintern sein. Es wird auch ein wenig in Ihre Gesamt CPU-Auslastung essen, wie Sie in Interrupts auf mehreren Abtastlinien warten, um, um Ihre Wirkung getan.

Ich wünschte, ich hätte eine konkretere Antwort für Sie, aber das hilft hoffentlich ein wenig. Dank Güte hatte die GB / DMG eine etwas erweiterte Rolle im System. :)

Andere Tipps

Sowohl Super Mario Bros. 3 und Kirby Abenteuer Display Artefakte auf dem Rand des Bildschirms Färbung, wenn Sie blättern. Ich glaube, dass beide Spiele das Bit gesetzt, dass Rohlinge die 8 Pixel links auf dem Bildschirm, so 0-8 Pixel werden auf einem Rahmen beeinflusst werden.

Wenn ich mich richtig erinnere, Kirbys Adventure versucht immer die Farb glitched Spalten auf der Seite des Bildschirms zu setzen, die aus scrollt, um es weniger bemerkbar zu machen. Ich glaube nicht, diese Artefakte sind vermeidbar, ohne vertikale Spiegelung Schalt, die einleitet Schwierigkeiten für sich.

Disclaimer:. Es wie fünf Jahre seit ich einen NES-Code geschrieben

Jeder Nametable hat seine eigene Attributtabelle, so sollte es keine grafischen Artefakte sein, wenn von einem Nametable zum anderen scrollen. Die Art der Farbe Glitching Sie sich beziehen ist wirklich nur ein Problem, wenn Ihr Spiel scrollt vertikal und horizontal. Sie haben nur zwei nametables, so in beiden Richtungen scrollen müssen Sie den sichtbaren Bildschirm ausschlachten. Es gibt verschiedene Lösungen für dieses Problem, eine große Zusammenfassung von denen in dieser nesdev Post gefunden werden kann:

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

Diese Seite kann eine Hilfe sein. http://www.games4nintendo.com/nes/faq.php#4

(Suche nach "Was ist mit $ 2005/2006 ist?", Und beginnen zu lesen um diesen Bereich.)

Es sieht im Grunde wie es ist unmöglich zu bekommen es Pixel perfekt, aber die Bits werden diejenigen gehen, sind Sie wahrscheinlich in zu müssen schauen gehen.

wünschte, ich könnte mehr helfen.

Jeder Nametable hat seine eigene Attributtabelle. Wenn Sie nur zwei Bildschirme Ihre Spielwelt begrenzen, werden Sie nur einmal die nametables und Attributtabellen schreiben müssen. Der schwierige Teil kommt, wenn Sie versuchen, Welten zu machen, größer als zwei Bildschirmen. Super Mario Bros. 1 tat dies durch Scrollen nach rechts, wie es notwendig Umwickeln und Rendern die Ebene einer Spalte von Blöcken zu einer Zeit (16 Punkte), kurz bevor diese Spalte in Sicht kam. Ich weiß nicht, wie man diese effizient kodieren würde (beachten Sie haben nur eine Millisekunde VBLANK Zeit).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top