Frage

Ok. Ich hoffe, dass es nicht geschlossen werden kann, da ich seit über 25 Jahren diese Neugier habe und ich würde lieben, den Trick zu verstehen.

In dem Kommodore 64 die Grenze war nicht ansprechbar durch den 6569 VIC. Alles, was Sie tun konnten, war Pixel im zentralen Bereich, der, in dem der Cursor bewegt zu ziehen. Die Grenze war immer einheitlich, obwohl man seine Farbe mit Stocher 53280, Farbe ändern könnte, wenn ich mich richtig erinnere.

Dennoch erinnere ich mich deutlich Spiele Intro, wo die Grenze mit Grafiken gekennzeichnet wurde, wie es voll ansprechbar war. Ich habe versucht, zu verstehen, wie es funktioniert, aber nie an den Punkt. Legenden sagt, dass es eine kluge Verwendung von Sprites ist, das könnte unter Umständen an der Grenze gezogen werden, aber ich weiß nicht, ob es eine urbane Legende ist.

Bearbeiten : nur das lesen von einem der ausgebrachten Links

  

wurden Sprites gemultiplext über   vertikale Rasterlinien (8 über Sprites,   manchmal bis zu 120 Sprites). Bis   die Gruppe freigegeben Crest Krestage 3 in   Mai 2007 gab es die gemeinsame   Wahrnehmung, dass nicht mehr als 8 Sprites   könnte bei einer Rasterzeile erscheinen, aber   Zuweisen neuer Y Koordinaten machte   wieder weiter unten über das Display.

Dieses Übel ist .... Sie schlagen das Raster und das Sprite neu zu positionieren, bevor er dort ankommt ...

War es hilfreich?

Lösung

Zunächst nur Sprites können im Grenzbereich oder ein sich wiederholendes 8-Bit-Muster (8 Pixel breit) angezeigt werden, die aus dem letzten Byte der Video Bank gelesen wird, in der Regel 3fff $. Hinweis: Sie können nur dieses Sprites oder 8-Bit-Muster sehen, wenn Sie den VIC-Chips in „nicht angezeigt“ den Grenzen Trick. Siehe unten.

Die Grenzen haben eine höhere Priorität als Sprites, wenn so normalerweise ein Sprite in einem Grenzbereich gezogen wird, die Grenze erstreckt sich das Sprite. Mit ein wenig Trickserei VIC Chip Sie die Grenzen ausschalten kann.

Sie können drehen Sie die obere und untere Grenzen aus ganz leicht (Ich werde unten erklären), und die Seite grenzt mit sehr kritischem Zeitpunkt ab.

Zum einen ein wenig Informationen darüber, wie der VIC-Chip arbeitet auf einem c64.

Der VIC-Chip zeichnet den Bildschirm von oben nach links oben nach rechts, dann nach unten einer Linie, und von links nach rechts wieder, bis der gesamte Bildschirm gezogen wird. Sie führt diese redraw 50-mal pro Sekunde (für PAL-Einheiten) oder 60-mal pro Sekunde für (NTSC-Einheiten).

Es ist ein 8-Bit-VIC-Register, das die vertikale Position des Rasters zu einem gegebenen Zeitpunkt enthält. $ D012. Eigentlich gibt es mehr als 255 möglichen Positionen, so das 9. Bit wird in Bit 7 (höchste Bit) gespeichert oder $ d011 registrieren. So an jedem Punkt können Sie diese Register gelesen und die vertikale Position des Rasters herausfinden. Es gibt keine verfügbaren Register die x-Position des Rasters zu lesen.

Ein weiteres cooles Feature des VIC-Chips verwendet wurde, ein Problem zu beheben, wenn Hardware Scrollen verwenden. Grund vertikaler Bildlauf wurde unter Verwendung eines Hardware-Registers erreicht, die den Bildschirm 0-7 Pixel vertikal zu bewegen. Sobald Sie erreicht (0 oder 7 in Abhängigkeit von der Richtung der Spirale) würde jedes Zeichen Block (8x8 Pixel) einen Block vertikal bewegen und die neuen Daten ziehen an der Spitze angezeigt werden (oder unten, je Richtung). Das funktioniert sehr gut, mit der Ausnahme, dass alle 8 Pixel-Scrolling würden Sie Daten „Pop“ auf dem Bildschirm sehen. Um dies zu beheben, können Sie das Grenzgebiet von 8 Pixeln vertikal durch Löschen von Bit 3 wächst in $ d011 registrieren. Dies wird 24 Zeilen Modus bezeichnet. Standardmäßig wurde der Bildschirm in 25 Reihen von 8x8 Pixel Zeichen gesetzt. In 24 Reihenmodus können Sie immer noch Zeichen der unteren Reihe ziehen könnten, würden sie nur von der Grenze versteckt werden.

So ist der Trick, um die oberen und unteren Grenzen ausgeschaltet ist:

1) Stellen Sie den Bildschirm auf 25 Zeilen Modus

2) Warten auf das Raster eine vertikale Position zwischen $ f2 und $ fa (die 8 Pixel zwischen wo die Grenze beginnt in beiden 24 und 25 Zeilenmodus Zeilenmodus) zu erreichen.

3) Stellen um den Bildschirm zu 24 Zeilenmodus ... den vertikalen Start der Grenze über der aktuelle Rasterposition bewegt

4) Warten Sie, bis nach vertikale Rasterposition ($ fa)

5) Wiederholen Sie jeden Frame

Schritt 3) Tricks des VIC-Chip zu denken, dass es bereits begonnen hat, die Grenze zeichnen, so dass es nie Zeichnung beginnt. Voila, die obere und untere Grenzen sind offen.

Seite Bezüglich Grenzen Sie die gleiche Sache mit verschiedenen Registern tun können, aber als die horizontale Bewegung des Rasters ist viel schneller dann die vertikale Bewegung der Zeitpunkt viel enger sein muss. Und es gibt ein weiteres Problem zu berücksichtigen, Jitter bezeichnet. <-Die Ich will hier nicht erklären. Web durchsuchen nach „Stable Raster C64“ für eine tiefer gehende Erläuterungen dieser Ausgabe.

Andere Tipps

Beachten Sie, dass, was Krestage 3 tat (wie in der Frage erwähnt) ist anders.

Eine Stufe des Tricks ist, mit der Grenze zu verwirren, wenn der Boden des „Papier“ (Arbeitsbereich Rechteck, das, was im Innern der Grenze) nur gezogen wird. Auf diese Weise können Sie Sprites in der oberen und unteren Grenze.

Eine höhere Ebene ist zu Chaos mit ihm am rechten Rande des Papiers, in jeder Rasterlinie, die alle wie oben in JohnD Antwort erklärt. Auf diese Weise können Sie Sprites in der linken und rechten Rand.

All dies können Sie mehr als 8 Sprites in einer Zeile haben. Das ist nur Krest Magie.

Bei weitem die beste Ressource (ich kenne) für den VIC-Chip ist " der MOS 6567/6569 Videocontroller (VIC-II) und ihre Anwendung in der Commodore 64 " von Christian Bauer und einer nützlichen Ergänzung ist "die Speicherzugriffe des MOS-6569 VIC-II und MOS 8566 VIC-IIe Video Interface Controller" von Marko Mäkelä.
Caveat lector: diese etwas technisch sind, und man könnte sie leichter verstehen finden, nachdem Sie einige VIC Effekte selbst programmiert haben.

Wenn die Links jemals sterben, google nur die Artikel nach Titel, sind sie endlos wiederholt.

Sie können obere öffnen und die unteren Grenzen mit einem einfachen BASIC-Programm:

    1 poke56334,0:poke53266,212:poke53265,27:poke16383,0
    2 h=53265:i=53273:h1=19:h2=27:i1=1
    3 pokei,i1:waiti,i1:pokeh,h1:pokeh,h2:goto3

Im einen Stich in der Dunkelheit nehmen gehen hier (havent diese selbst getan). Ich fand dies auf wikipedia.

Der c64demo Abschnitt erklärt, dass:

  

Effekte dachte unmöglich waren   in Demos erreicht, vor allem aufgrund   nicht dokumentierten Nebenwirkungen betreffen   zum MOS Technology VIC-II-Chip .   Einige Beispiele für VIC-Tricks:

Einer der genannten Hacks war:

  

Sprite scrollers wurden in der platziert   Rand. Durch trickst die Hardware nicht   der Rahmen um den Bildschirm zu zeichnen,   Sprites in diesem Bereich könnte verschoben   und angezeigt werden.

Natürlich ist der interessanteste Teil der Frage ist, wie es geht. Ich würde vorschlagen, in einiger Demo-Datenbank suchen, die für eine Demo auf der Suche Quellcode enthält, die das beschäftigt Hack.

PRINT "ES WAR 53280, GECK."

Von dem, was ich verstehe, dass dies nur möglich für Sprites.

Sprites sind erlaubt im Grenzgebiet zu sein, und die Grenze wird gezogen overtop. Durch einige Tricks kann die Grenze entfernt werden.

Grafiken in Rand: Entweder Sprites oder mit dem $ 3FFF Effekt (die Sprites überhaupt tatsächlich nicht der Fall ist). Zu gehen in im Detail braucht viel mehr Raum und Zeit, als ich hier zur Verfügung.

Sie können auch Sprites Grenze in Grund erhalten: BASIC Sprites in Border

iirc, gibt es auch eine Möglichkeit, den Videochip so zu verwirren, dass es 26.e Textzeile zieht.

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