…“Reverse Engineering the MOS 6502″ wird versprochen. Klingt interessant und wird hiermit ganz offiziell in meine Feiertags- Playlist aufgenommen. Oder kurz. Schau ich mir an, wenn ich Zeit habe:
…“Reverse Engineering the MOS 6502″ wird versprochen. Klingt interessant und wird hiermit ganz offiziell in meine Feiertags- Playlist aufgenommen. Oder kurz. Schau ich mir an, wenn ich Zeit habe:
…ist nützlich wenn man etwas auf dem Bildschirm verändern möchte, ohne das es der User bemerkt.
VBI heist „Vertikal Blank Interrupt“. Auf dem Atari wird der so initialisiert:
Das Y- Register erhält das Low und das X- Register das High Byte der Routine, welche man während des VBI ausführen möchte.
Der Akku erhält einen Wert, welcher bestimmt, um welchen VBI es sich handeln soll.
Für VBI- Routinen die während zeitkritischer Operationen des OS unterbrochen werden dürfen, wählt man eine 7 (deferred VBI).
Mit: JSR SETVBV ($E45C) initialisiert man die Routine, welche an der durch das Y- und X- Register adressierten Stelle im Speicher steht. Letztere muss immer mit einem JMP XITVBV ($E462) enden.
Das war’s
Das Wesen des VBI ist es, dass er wegen der Eingangs erwähnten Eigenschaft ideal für zeitritische Operationen auf dem Bildschirm ist.
Alles was während eines VBI auf dem Bildschirm geändert wird, bleibt dem Betrachter solange verborgen, bis das Bild erneut aufgebaut wird, da jene Änderungen passieren, während der Elektronenstrahl von der rechten unteren Ecke des Schirms zur linken Obereren Ecke des Schirms zurückkehrt, dabei selbstverständlich unsichtbar ist, um sogleich mit dem Zeichnen des nächstens Bildes – und damit der eben gemachten Änderung – fortzufahren. Elegant!
Der Ansatz war, Conway’s life endlich mal selber zu programmieren. Nun ja…
…welche Sprache darf’s den sein? Einfache Antwort: 6502 Assembler. Warum: lerne das seit einem Jahr und es läuft mir inzwischen recht locker von der Taste…… Aber, C wäre auch mal wieder nett gewesen.
Das Ergebnis:
Der Trick: Die einfache Anwendung der berühmten 3 Regeln von Conway alleine tut es nicht. Folgendes ist zu tun:
Man benötigt zwei Matrixen welche die Zellen enthalten. Man wendet die Regeln auf die erste Matrix an, schreibt das Ergebnis aber in die zweite ohne den Inhalt der ersten dabei abzuändern. Die Zweite Matrix enthält nun die erste Generation.
Nun löscht Man Matrix 1 und benutzt Matrix 2 als Eingabematrix. Das Ergebnis ist Generation 2. Das ganze wiederholt man nun so oft wie man möchte.
Den Source dazu gibt es hier:
Das oben beschriebene ist mir mit meiner Version in 6502 Assembler leider noch nicht gelungen. Das Ergebnis läßt sich hier ansehen:
…leider nicht, oder doch?
einfache Regel: Betrachtet wird eine Matrix aus 3 x 3 Zellen, wobei die mittlere Zelle in Abhängigkeit von der Anzahl der benachbarten Zellen entweder stirbt, überlebt oder, falls diese noch gar nicht existiert, geboren wird.
Die Regeln finden sich überall im Netz – z.B. Hier: http://www.math.com/students/wonders/life/life.html
Mein Programm produziert bis jetzt leider nur ein paar der bekannten statischen Zellverbände aus einem Zufallsmuster:
Na ja, immerhin. Faszinierend ist es allemal. Ich bleib dran 🙂