Schlagwort-Archive: Assembler

Testbericht zum Mac 65 Assembler

Einen zeitgenössischen Artikel findet man da:

Craig Chamberlain / Compute! Ausgabe 43 / Dezember 1983 / 

Bildschirmfoto 2013-04-29 um 21.44.26

Assembler, frühe IDE, eine Auswahl


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!


Cross Developement….

.. ich weis nicht ob das Thema heute noch eine Rolle spielt. Wahrscheinlich tut es das nur noch im Kreise jener, die sich dem Erhalt des alten, geheimen Wissens über die 8-Bit Systeme und deren Programmierung verschrieben haben.

ATASM

Ein Cross Assembler. Selber Syntax wie der Mac / 65. Das DOS Binary und den Source gibt es hier:

ATASM Homepage

ATASM Homepage

Ein auf Mac OSX lauffähiges Binary findet sich dort:

On Platform Developement, das Gegenteil zum Cross Developement?

Nun ja, bis jetzt habe ich meine kleinen Projekte in 6502 Maschinensprache für die Atari 8- Bit Computer mit Hilfe des reichen Sortiments der damals erhältliche Assembler – quasi den Vorläufern der heutigen IDE’s – entwickelt. Auf einem Emulator, aber immerhin, mit original Software…

Der Gelegenheitsprogrammierer, mit wenig Geld, besaß in der Regel einen Computer, 64k Speicher und ein Diskettenlaufwerk, angeschlossen an den heimischen Fernseher. Im begrenzten Speicher musste das DOS und der Assembler seinen Platz finden. Der Quelltext und der erzeugte Objektcode fraßen noch mehr RAM.

Die Grenzen einer Solchen Entwicklungsumgebung waren und sind schnell erreicht. Detailliert habe ich das im Vergleich von Drei bekannten Assemblern beschrieben:

Eine detaillierte Übersicht zum Speichermanagement des MAC / 65 und des ATMASII findet sich hier:

Ein Professioneller Ansatz wird in einem Zeitgenössischen Artikel dort beschrieben:

Wer sehen möchte, wie man Damals aus Source ein ausführbares Binary gemacht hat, der kann sich das hier am Bespiel des Atari Makro Assemblers anschauen:

Cross Development

Um die oben beschriebenen Restriktionen zu umgehen, wurden wohl schon früh Techniken eingesetzt, die eine Wirtschaftliche und schnelle Programmentwicklung ermöglichten. Cross Assembler liefen auf Rechnern die mehr als das übliche Speichervolumen der Zielmaschinen besaßen und – im Idealfall – schneller waren.

Heute geht das noch genauso, nur eben einfacher. Die Zielmaschine ist ein Emulator und der schnelle Rechner der Mac oder PC auf dem der läuft. Einige moderne Cross Assembler/ Compiler findet sich hier:


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:


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!