Schlagwort-Archive: 6502

Lean Code am lebenden Beispiel…

…Source zum „Projekt Rock“ entrümpelt.

Die Erkentnisse aus „6502 Lean Code durch sparsame Flags“ gleich ausprobiert. Spart einiges an Source Code und gewinnt damit mehr Speicherplatz für’s Editieren. Der Objekt Code wird ca. 12 Bytes kleiner. Schön!

Source, Projekt Rock. Stand: 9.4.2013

Source, Projekt Rock. Stand: 9.4.2013

Die als Kommentar gekennzeichneten Zeilen können selbstverständlich entfallen. Was ehemals „MOVE“ hies und ein Byte verschwendete, wurde nun durch das Carry- Flag des 6502 ersetzt.

Schon Toll. Wir nähern uns einem Boulder Dash- alike, das nur knapp 2kB! RAM belegt.


6502 Lean Code durch sparsame Flags

Man ruft ein Sub. Das Sub soll signalisieren ob einen Bedingung erfüllt ist oder nicht. 

Nun ja, wir lassen das Sub einfach ein Flag entsprechend der zu prüfenden Bedingung setzten. Der Aufrufende Programmteil prüft nun diese Flag und reagiert entsprechend. Könnte so aussehen:

JSR CHECK
LDA FLAG
CMP #ISOK
BNE NOTOK
ALLES KLAR. DO WHATEVER….

NOTOK:
DO WAHTEVER…..

CHECK:
LDA BEDINGUNG
CMP #ERFÜLLT
BNE NICHTERFÜLLT
LDA #ISOK
STA FLAG
RTS

NICHTERFÜLLT
LDA #NOTOK
STA FLAG
RTS

Umständlich!

Wir verschwenden ein ganzes Byte für das Flag und wir müssen LDA / STA und LDA / CMP ausführen. Noch mehr verschwendeter Platz! Nun bietet unser 6502 eine Menge Register. Warum nicht das Carry- Flag als „Flag“ nutzen. Dafür ist es schließlich gedacht.

Das Bespiel oben könnte dann so aussehen:

JSR CHECK
BCS ISOK
DO WHATEVER…. (Not Ok!)

ISOK:
ALLES KLAR, DO WHATEVER!

CHECK:
LDA BEDINGUNG
CMP #ERFÜLLT
BNE  NICHTERFÜLLT
SEC  (Bedingung ist erfüllt)
RTS

NICHTERFÜLLT:
CLC
RTS

Recht elegant…….


MA65 Macro Assembler für Atari 8- Bit..

…vereint das beste aus dem Mac/ 65 und dem Atari Macho Assembler und wurde  speziell für Sparta Dos als Command Line Utility entwickelt.

Das File Image gibt es hier: ATARI8 Software Archive.

Das Image enthält Sparta DOS 3.2 , den Assembler  und einen passenden Editor: XEdit.

Kleiner Tip zum Einstieg in XEdit: Die „Help“- Taste wird auf dem Mac mit „PGDown“ ausgelöst.

MA65 in Aktion!

MA65 in Aktion!


Ringvorlesung im Fach Medienwissenschaften…

…..das Thema meines Vortrages wurde im Forum des ABBUC vorgestellt. Dafür möchte ich mich an dieser Stelle bedanken. Es ist schön und ermutigend zu erfahren, dass das Thema meines kleinen Hobbys auf Interesse stößt.

Das Spielchen selbst ist, verglichen mit den wunderbaren Beiträgen der zahlreichen Entusiasten auf dem Gebiet der 8- Bit Retro Gemeinde, mit Verlaub, sehr rudimentär gehalten. Das Spielprinzip vom berühmten Vorbild „Boulder Dash“ abgeschaut. Dennoch habe ich damit bis jetzt einige der Ziele die ich mit dem Projekt verfolge erreicht. Zum einen ist das Programm beim Spiel für mich selbst zur Herausforderung geworden. Zum  Andren klappt es inzwischen mit dem Programmieren wieder ganz gut. Über 6502 Assembler zu C und C++ war ein interessanter Weg!

Screenshoot

Das berühmte Vorbild – „Boulder Dash“ ist für mich ein geniales Spielchen und eines der ersten Programme denen man nachsagen kann eine Physik Engine besessen zu haben. Man möge mich da korrigieren.

Späte Erkenntnis und dazu noch über Umwege. welche Rolle „Minecraft“ dabei gespielt haben könnte? Nun ja, das erfährt, wer den Weg nach Berlin auf sich nimmt…..

Weiteres:


Programmierte Grafik…..

….oder, dass Titelbild für Projekt Rock.

Der Titel macht es offiziell, Projekt Rock heißt nun „Dirt, Rocks, Diamonds and other Perils“. Wichtiger jedoch ist die Technik die im Aushängeschild meines DIY Spielchens steckt.

Verantwortlich für das Erscheinungsbild sind: Eine modifizierte Display List (Antic-Programm), das Scrolling läuft während des Vertical Blank Interrupts (VBI) und der Regenbogeneffekt wird im Hauptprogramm ausgeführt das in einer Endlosschleife läuft.

Photoshop laden und einfach zeichnen ging früher halt nicht, man musste nehmen, was man hatte……


Der 6502…

…“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:

 


Der VBI…

…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!


Simple Life…

…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:

Drei aus vielen: Ein Zufallsmuster produziert drei statische Zellverbänden….

Na ja, immerhin. Faszinierend ist es allemal. Ich bleib dran 🙂


Es lebt!

..Life, das berühmte nach den Regeln von Conway. Fällt bei mir in die Kategorie „1000 Programme“ die ich noch schreiben will bevor ich den sagenhaften Löffel abgebe…..

Faszinierend. Einige einfache Regeln und eine Artenvielfalt entsteht auf dem Bildschirm. Wer sich selber ein Bild machen möchte dem sei „Golly“ für den Mac oder Windows empfohlen: http://golly.sourceforge.net/

Für den guten alten Atari 800 gab es das auch schon. Schaut mal hier im Blog nach: https://retrozock.com/2010/12/19/video-easel/

Überraschend an dem letztgenannten ist, dass es im Grafik Modus 7 rasend schnell abläuft. Meinen ersten, noch sehr langsamen Versuch, kann man sich hier ansehen:

Erster Test: Ungefär in der Mitte des Schirms, befindet sich ein sogenanntes „Boat“. Gesetzestreu verändert es sich nicht. Die wechselten Farben folgen aus dem Umstand, dass jede Zelle die überlebt durch einen Farbwechsel gekennzeichnet wird.

Gibt es eine besser Möglichkeit, die Geschwindigkeit seiner Grafikroutinen zu optimieren? Wir werden sehen. Meine eigene Plot- Routine  – schaut mal da:

https://retrozock.com/2012/10/17/plot-it-like-atari/

dürfte bislang noch die größte Bremse sein!


Plot it like Atari

Wollte ich schon immer. Punkte setzten in 6502 Maschinensprache. Fernes Ziel: Meine eigene Version des „Game Of Life“ 

Den Source dazu halte ich noch zurück, bis ich zufrieden damit bin. Optimierungsbedarf ist von Nöten. Das Video zeigt, es läuft, aber, viel zu langsam 🙂

Soviel sei veraten: Die Bremse ist die Berechnungsmethode für die gesuchte Zeile aus der Y- Koordinate. Die arbeitet noch mit einer Schleife und das frisst Takte! Der Lösungsansatz? Schaut mal da: https://retrozock.com/2012/07/13/locate-wird-schneller/