HYPRA-ASS - Ein Assembler der Spitzenklasse
Das war noch nie da. Ein Super-Assembler zum Abtippen. Mit Leistungsmerkmalen, die Sie sich schon immer gewünscht haben, übertrifft er jeden 100-Mark-Assembler.

HYPRA-ASS ist ein rein in Maschinensprache geschriebener 3-Pass-Makroassembler mit integriertem Editor für den C 64 mit Diskettenlaufwerk 1541. Er belegt etwa 6 KByte RAM-Speicher von $0801 bis $1FD7. HYPRA-ASS gehört, was Leistung und Schnelligkeit betrifft, zu einem der besten Assembler. Seine hervorstechendste Eigenschaft ist die Fähigkeit, um Befehlsfolgen, die in einem Programm immer wieder auftreten, einen Block beziehungsweise ein Makro zu legen. So definierte Befehlsfolgen können durch einen einfachen Befehl an jeder beliebigen Stelle des Programms aufgerufen werden. Diese Eigenschaft haben viele Assembler, aber nur wenige können lokale Labels beziehungsweise Sprungziele innerhalb eines Makros verarbeiten. Innerhalb eines Makros sind, wenn nicht besonders gekennzeichnet, alle Labels und Variablen lokal. Neben vielen Pseudo-Opcodes, mit denen sich zum Beispiel der Objektcode auf Diskette assemblieren läßt oder Quelltexte verketten lassen, kann auch bedingt assembliert werden. Formatierte Listings können an beliebige Geräte gesendet werden. Symboltabellen lassen sich sortiert und unsortiert ausgeben.
Quelltexte werden bei HYPRA-ASS wie normale Basic-Programme erstellt. Nach der Eingabe von RETURN erscheint die soeben eingegebene Zeile formatiert auf dem Bildschirm. Die dabei benutzten Tabulatoren können durch einfache Befehle geändert werden. Um das Editieren von Quelltexten möglichst bequem zu machen, ist in HYPRA-ASS ein spezieller Editor integriert, der den normalen Basic-Editor um viele Funktionen erweitert. Neben der automatischen Zeilennumerierung können Zeilen und Zeilenbereiche formatiert gelistet werden. Auch das oft vermißte Suchen und Ersetzen, Find und Renumber sind eine Selbstverständlichkeit für diesen Editor.
(Gert Möllmann/ah)Label: | Sprungmarke |
Bedingte Assemblierung: | Abhängig von einer Variablen können zum Beispiel Quelltextzeilen beim Assemblieren übersprungen werden. Bei unterschiedlichen Variablen erhält man folglich unterschiedlichen Objektcode. |
Makro: | Befehlsfolgen, die im Quelltext häufiger benutzt werden. Das Makro wird in einer Definitionszeile mit einem Namen versehen, unter dem es im Quelltext beliebig oft aufgerufen werden kann. Trifft der Assembler auf einen so definierten Namen, so wird an diese Stelle die vorher definierte Folge von Befehlen assembliert. |
n-Paß: | Für n steht eine Zahl, die die Anzahl der Assemblerläufe anzeigt. Bei Assemblern, die Labels verarbeiten können, handelt es sich in der Regel um 2-Pass-Assembler. Im ersten Pass wird eine Syntaxprüfung durchgeführt und den Labels und Variablen ein numerischer Wert (Adresse) zugewiesen. (Symboltabelle wird angelegt). Im zweiten Pass wird dann der Objektcode erzeugt. |
Objektcode: | Das vom Assembler erzeugte, lauffähige Programm |
Quelltext: | Das mit dem Assembler erstellte Basic- oder Text-File |
Symboltabelle: | Beim Assemblieren wird jedem Label und jeder Variable ein numerischer Wert zugewiesen. Die Symboltabelle enthält eine Liste aller im Programm vorkommenden Label und Variablen mit deren Wertzuweisungen. |
Machen Sie es wie die Profis. Schreiben Sie Programme in Maschinensprache. Dieser leistungsstarke Makro-Assembler macht es möglich.
HYPRA-ASS ist ein rein in Maschinenesprache geschriebener Drei-Pass-Makroassembler mit integriertem Editor für den C 64 mit Floppy 1541. Er wird mit LOAD "HYPRA-ASS",8 geladen und durch RUN gestartet. Nach dem Start meldet sich HYPRA-ASS mit »break in 0« und »ready«. Alle Basic-Befehle sind nach dem Start noch zu verwenden, bis auf die Befehle LET und FOR, die Variable anlegen. Der Befehl RUN dient jetzt zum Starten der Assemblierung.
Der Quelltext
Der Quelltext wird vom HYPRA-ASS-Editor in Basic-Programmzeilen abgelegt. Soweit wie möglich werden unnötige Blanks dabei eleminiert. Für die einzelnen Quelltextzeilen gelten die folgenden Vereinbarungen:
- Bei der Eingabe einer Zeile wird hinter der Zeilennummer ein Minuszeichen eingegeben.
- Jede Zeile enthält höchstens einen Assemblerbefehl.
- Vor einem Assemblerbefehl darf in derselben Zeile höchstens ein Label stehen.
- Label beginnen direkt hinter dem Minuszeichen.
- Vor jedem Assemblerbefehl steht mindestens ein Blank.
- Label und Assemblerbefehl werden durch mindestens ein Blank voneinander getrennt.
- Ein Label darf nicht allein in einer Zeile stehen.
- Kommentar wird durch ein Semikolon vom Rest der Zeile getrennt.
- Reine Kommentarzeilen müssen als erstes Zeichen hinter dem Minuszeichen ein Semikolon haben.
- Pseudo-Ops (.ba, .eq…) können direkt hinter dem Minuszeichen beginnen.
Beispiele:
100 | -.ba $C000 | |
110 | -initialisierung | |
120 | -; reine Kommentarzeile | |
130 | - | lda $14; Kommentar hinter einem Befehl |
140 | -marke | ldx $15; mit Label davor |
Zur bequemeren Eingabe und Bearbeitung des Quelltextes stellt HYPRA-ASS im Editor insgesamt 25 Befehle zur Verfügung (Bild 1).
/a 100,10 | Automatische Zeilennumerierung. Hier mit der Startnummer 100 und der Schrittweite 10. Die automatische Zeilennumerierung wird ausgeschaltet, indem man direkt hinter dem ausgegebenen Minuszeichen RETURN eingibt. |
/o | Re-New eines Quelltextes, der mit NEW gelöscht wurde, falls der Text nicht anderweitig zerstört wurde. |
/d ; /d 100 ; /d -100 ; /d 100- ; /d 100 bis 200 | |
Löschen von Zeilen und Zeilenbereichen. Auch für das Löschen einzelner Zeilen sollte man den /d- Befehl verwenden, da man das Minuszeichen hinter der Zeilennummer doch immer wieder vergißt. | |
/e ; /e 100 ; /e -100 ; /e 100- ; /e 100 bis 200 | |
Formatiertes Listen von Zeilen und Zeilenbereichen. Label, Assembler-Befehle werden gemäß den Tabulatoren übersichtlich untereinander geschrieben. |
|
/t0,13 ; /t 1,24 ; /t2,0 ; /t3,10 | |
setzt die Tabulatoren T0, T1, T2, T3
|
|
/x |
Verlassen des Assemblers. Beim Verlassen des Programms wird ein Reset durchgeführt. |
/p 1,100,200 | Setzen eines Arbeitsbereichs (Page). Hier Bereich 1 von Zeile 100 bis 200, beide einschließlich. Bis zu 30 solcher Arbeitsbereiche sind erlaubt. Die Parameter der Arbeitsbereiche werden im Kassettenpuffer abgelegt. |
/ziffer(n) | Formatiertes Listen der Page. |
/n 1,100,10 | Neu Durchnumerieren einer Page mit Startnummer und Schrittweite. |
/f 1,"string" | Suchen einer Zeichenkette in einer Page. Dabei sind im String Fragezeichen als Joker erlaubt. Das Fragezeichen ersetzt ein beliebiges Zeichen. Zu beachten ist jedoch, daß im Quelltext unnötige Blanks entfernt wurden, wie ein Vergleich mit den Befehlen /e und LIST zeigt. |
/r 1,"string1", "string2" | |
Ersetzen von Zeichenketten. String 2 darf nicht leer sein. Überall in der Page wird die Zeichenkette aus String 2 durch die aus String1 ersetzt. Auch beim Ersetzen ist in String 2 das Fragezeichen als Joker erlaubt. Da String 1 leer sein darf, können mit diesem Befehl auch Zeichenketten gelöscht werden. | |
/u 9000 | Setzen des Quelltextstartes (Programmstartes). Normalerweise ist als Startwert die Adresse 7000 eingestellt. Durch Hochlegen des Startes kann man zum Beispiel einen Monitor in dem nun freien Bereich unterbringen. |
/b | Anzeige der aktuellen Speicherkonfiguration. Es wird angezeigt:
|
/l"name" ; /s"name" ; /v"name" ; /m"name" | |
Kurzform der Befehle LOAD, SAVE, VERIFY und MERGE | |
/g 8 | Die zugehörige Gerätenummer kann mit diesem Befehl eingestellt werden. Voreingestellt ist das Gerät 8. |
Zur Unterstützung des Umgangs mit dem Floppy-Laufwerk 1541 sind drei Befehle implementiert: | |
/i | Lesen des Inhaltsverzeichnisses von Floppy ohne Verlust des geschriebenen Quelltextes |
/k | Lesen des Fehlerkanals |
/e | Übermittlung von Befehlen an die Floopy |
Diese drei Befehle entsprechen denen des DOS 5.1. | |
Auch zur Farbgebung des Bildschirms sind zwei Befehle vorhanden, die die Hintergrund- und die Rahmenfarbe setzen. | |
/ch 0 | Setzen der Hintergrundfarbe |
/cr 0 | Setzen der Rahmenfarbe |
Nach erfolgter Assemblierung kann nun die erzeugte Symboltabelle mit zwei Befehlen ausgegeben werden: | |
/! | Ausgabe in unsortierter Form |
/!! | Ausgabe sortiert |
Es werden nur Label ausgegeben, die entweder global oder von der Ordnung Null sind.
Beide Dumps können mit der CTRL-Taste verlangsamt und mit der STOP-Taste angehalten werden.
Mit OPEN..., CMD... können die Dumps an andere Geräte gesendet werden.
Als Ergänzung zum Basic-Befehl PRINT, der aufgrund der Torkenbildung nicht alle Labelnamen verarbeiten kann, kann der Befehl ← verwendet werden.
Basic-Funktionen wie PEEK sind nur über den PRINT-Befehl erreichbar. Die Funktionen <(...) und >(...) sind außerhalb des Quelltextes nur durch ← zu verwenden. Mit dem ←—Befehl kann genau wie im Quelltext gerechnet werden.
Rechnungen im Quelltext
HYPRA-ASS erlaubt die vier Grundrechenarten plus Potenzierung, die logischen Operationen NOT, AND und OR, die Vergleiche »gleich«, »kleiner« und »größer«, sowie den Einsatz der Funktionen <(…) und >(…), die das Low- beziehungsweise Highbyte eines Argumentes liefern. Die logischen Operatoren und die Vergleiche werden wie folgt abgekürzt: !n! = not !a! = and !o! = or !=! = gleich !<! = kleiner als !>! = größer als
Das Ergebnis eines Vergleiches ist —1, falls wahr, 0, falls nicht wahr: (1!=!2)=0 (1!=!1)=-1
Auch die NOT-Verknüpfung arbeitet wie in Basic: !n!1 = —2. Das Argument in den Low-/Highbyte-Funktionen muß im Bereich 0 ≤ Argument ≤ 65535 liegen.
Außer Dezimalzahlen sind Hex-Zahlen erlaubt, die durch ein vorangestelltes Dollarzeichen kenntlich gemacht werden: $C000 = 49152 $10 = 16 $a = 10…
Die Hexzahlen können auch in den Basic-Befehlen verwendet werden.
HYPRA-ASS-Variable (Label)
Der Wert einer HYPRA-ASS-Variablen kann zwischen 0 und $FFFF liegen. Variablennamen können beliebig lang sein, wobei das erste Zeichen des Variablennamens ein Buchstabe sein muß. Weitere Zeichen können Buchstaben, Ziffern oder das Hochkomma sein. Alle Zeichen des Namens sind signifikant.
Im Zusammenhang mit der Verwendung von Makros muß zwischen globalen und lokalen Variablen unterschieden werden. Jede Variable erhält beim Anlegen eine sogenannte Ordnungszahl, die tatsächlich angibt, im wievielten Makroaufruf das Anlegen stattfand. Befinde ich mich in gar keinem Makro, ist die Ordnungszahl entsprechend Null.
Variable mit unterschiedlicher Ordnungszahl sind trotz gleichen Namens nicht gleich. Man kann also davon sprechen, daß Variable gleicher Ordnungszahl lokal sind.
Die Konstruktion mittels Ordnungszahlen dient dazu, Fehler durch doppelte Benutzung von Labeln bei mehrmaligem Aufruf von Makros zu verhindern, indem Makros bei jedem Aufruf sozusagen einen komplett neuen Satz von Labeln erhalten.
Andererseits sind aus einem Makro »herausgesehen« alle Variablen mit anderer Ordnungszahl als im Makro selbst »unsichtbar«. Um aber bequem Makros in Makros aufrufen und bequem Label verwenden zu können, die in mehreren Makros benutzt werden sollen (etwa Betriebssystemroutinen), gibt es die globalen Variablen.
Globale Variable sind, wie der Name schon verrät, im Gegensatz zu den lokalen Variablen unabhängig von der Ordnungszahl überall definiert.
Alle Makronamen sind per Definition global.
Alle Variablen sind bei HYPRA-ASS redefinierbar gehalten, das heißt alle Variablen können durch eine Wertzuweisung jederzeit verändert werden.
Eine dopelte Benutzung von Labeln vor Assemblerbefehlen wird jedoch durch einen »Label twice«-Error (Bild 2) geahndet, da dies zu einem falschen Ergebnis der Assemblierung führen würde.
Zusätzlich zu den Fehlermedlungen, die von Interpreterroutinen wie »illegal quantity« oder »syntax« stammen, gibt HYPRA-ASS folgende Meldungen aus:
- can’t number term — ein Ausdruck kann von HYPRA- ASS nicht berechnet werden. Möglicher Grund kann die falsche Abkürzung eines Operators sein.
- end of line expected — bei der Abarbeitung einer Zeile wurde statt des Zeilenendes etwas anderes gefunden.
- no mnemonic — ein Mnemonic kann nicht identifiziert werden.
- unknown pseudo — ein Pseudo-Op wurde falsch abgekürzt.
- illegal register — ein Assemblerbefehl existiert in der gewählten Adressierungsart nicht mit dem gewählten Register.
- wrong adress — ein Assemblerbefehl existiert nicht in der gewählten Adressierungsart.
- illegal label — das erste Zeichen eines Labels war kein Buchstabe.
- unknown label — in Pass 2 wurde ein unbekannter Labelname entdeckt
- branch too far — eine Verzweigung führt über eine zu große Distanz.
- label declared twice — ein Labelname wurde zweimal benutzt.
- too many labels — Label und Quelltext passen zusammen nicht mehr in den Speicher.
- no macro to close — die Anzahl der .ma-Anweisungen stimmt nicht mit der Anzahl der .rt-Anweisungen überein.
- parameter — im Makroaufruf stimmt die Parameterliste nicht mit der Parameterliste der Definition überein.
- return — es liegt keine Rückkehradresse auf dem Stack, als eine .rt-Anweisung ausgeführt werden sollte.
Hinzuweisen ist noch auf eine einfache Möglichkeit, den »label twice-error« zu vermeiden:
Legt man eine Makrodefinition um einen beliebigen Block des Quelltextes, so sind alle Label in dem Block automatisch lokal. Auf diese Weise kann schon vorhandener Quelltext in neuen eingefügt werden, ohne daß man sich um doppelt verwendete Labelnamen kümmern muß.
Die Makros von HYPRA-ASS
Makros sind meist kürzere Befehlsfolgen, die im Quelltext häufiger vorkommen, und deshalb unter einem Makro zusammengefaßt werden. Zu jedem Makro gehört ein Makroname, mit dem es aufgerufen werden kann. An jedes HYPRA-ASS-Makro können beliebig viele Parameter übergeben werden, deren aktueller Wert dann bei der Assemblierung im Makro eingesetzt wird. Makros können bei HYPRA-ASS an beliebiger Stelle im Quelltext definiert werden. Alle Makronamen sind global, alle Parameter und makrointernen Label sind lokal. Das heißt verschiedene Makros können durchaus Label beziehungsweise Parameter gleichen Namens verwenden.
Ein Beispiel für ein einfaches Makro:
Es wird immer wieder die Befehlsfolge benötigt, Akkumulator und X-Register mit dem Inhalt zweier aufeinanderfolgender Speicherzellen zu laden. Ein Makro dazu könnte folgendermaßen aussehen:
100 | -.ma ldax (adresse) | |
110 | - | lda adresse |
120 | - | ldx adresse+1 |
130 | -.rt |
Der .ma-Pseudobefehl wird gefolgt von einem Variablennamen, dem Makronamen, und einer Parameterliste in runden Klammern, falls Parameter vorhanden sind. Hier ist es ein Parameter, die Adresse der Speicherzelle, die in den Akku soll. Sind mehrere Parameter vorhanden, werden sie durch Kommata getrennt. In die Parameter setzt der Assembler bei jedem Aufruf den aktuellen Wert, der im Aufruf steht. Rufe ich also ldax (2) auf, so entsteht bei der Assemblierung des Makro die Folge lda 2, ldx 3, entsprechend führt der Aufruf mit ldax (label) zu lda label, ldx label+1.
Die Parameterliste darf in der Definitionszeile eines Makro nur aus einer Folge von Variablennamen bestehen, während im Aufruf als aktuelle Parameter beliebige Ausdrücke erlaubt sind. Hinter der Definitionszeile mit dem .ma-Pseudo folgt dann der eigentliche Makroinhalt, das heißt das, was bei einem Aufruf des Makro assembliert werden soll.
Natürlich sind hier nicht nur einfache Befehle wie im Beispiel gestattet. Genausogut können im Makro Verzweigungen und Sprünge ausgeführt werden, es kann bedingt assembliert werden, und weitere Makros können aufgerufen werden. Für die Schachtelung von Makros besteht keine Grenze außer der Fassungskapazität des Prozessorstacks.
Als Beispiel — wird ein Makro mit zehn internen Labeln 100 mal aufgerufen, ergibt sich schon für die dadurch erzeugten lokalen Label ein Platzbedarf von genau 7 000 Byte.
Sollte irgendwann der Fall eintreten, daß Label und Quelltext zusammen nicht mehr ins RAM passen, erhalten Sie den »too many labels«-Error (Bild 2). Dies ist allerdings mehr ein theoretischer Fall, denn auch bei der Assemblierung von HYPRA-ASS selbst wurden trotz extensiver Benutzung von Labels nicht einmal 500 gebraucht. Sie können aber davon ausgehen, daß Ihnen immer mindestens Platz für 1 170 Label zur Verfügung steht — in den allermeisten Fällen sogar erheblich mehr.
Selbstaufrufe von Makros sind auch nicht verboten. Inwieweit eine solche Konstruktion überhaupt sinnvoll sein kann, bleibt jedem selbst zu prüfen.
Zurück zur Makrodefiniton: Jede Makrodefinition muß unbedingt mit dem Pseudo .rt (return) abgeschlossen sein. Trifft der Assembler bei der Abarbeitung eines Makro auf .rt, so heißt das für ihn, die Assemblierung hinter dem Aufruf fortzusetzen. Vor der .ma und .rt-Anweisung dürfen in derselben Zeile keine Label stehen. Die Makrodefinition selbst wird in Pass 1 und Pass 2 überlesen. Es zählen also nur die Makroaufrufe bei der Assemblierung.
Der Aufruf eines Makro erfolgt durch den Pseudobefehl …, gefolgt vom Makronamen und der aktuellen Parameterliste in runden Klammern.
Wertzuweisung an Label
Zwei Pseudobefehle stehen zur Verfügung, um Label einen Wert zuzuweisen:
.eq | weist einem Label einen Wert zu, ohne die Ordnungszahl des Labels dabei zu verändern. |
.gl | erklärt gleichzeitig das Label als global. |
Beide Pseudos werden der eigentlichen Wertzuweisung vorangestellt, so wie LET in Basic:
100 | -.eq marke | = $FFC0 |
110 | -.gl label | = $200 |
Bei der Wertzuweisung an Label ist immer der Bereich einzuhalten in dem ein Labelwert liegen darf (0 bis $FFFF).
Einfügen von Tabellen und Text
Drei Pseudo-Ops erleichtern das Einfügen von Tabellen und Text in den Quelltext. Dies sind:
.by | erlaubt das Einfügen von Bytewerten (Werten zwischen 0 und $FF). Einzelne Bytewerte werden durch Kommata voneinander getrennt. Auch Strings der Länge 1 sind als Bytewerte erlaubt. Beispiel: 100 -.by 0, "a", 123, "x", $fa |
.wo | erlaubt das Einfügen von Adressen (Werten zwischen 0 und $FFFF). Mehrere Adressen werden durch Kommata voneinander getrennt. Die Adressen werden in der Folge Low/Highbyte in den Objektcode aufgenommen. Beispiel: 100 -.wo marke-1, label*2-1 |
.tx | erlaubt das Einfügen von Text in den Quelltext. Die einzelnen Zeichen des Textes werden als ASCII-Code im Objektcode aufgenommen. Beispiel 100 -.tx "beispieltext" |
Überall im Quelltext, wo Bytewerte erwartet werden, etwa bei der unmittelbaren Adressierung, können Strings der Länge 1 verwendet werden. Ein Befehl lda #"a" ist also erlaubt.
Die bedingte Assemblierung
Zur Unterstützung der bedingten Assemblierung bietet HYPRA-ASS ein IF/ELSE/ENDIF-Konstrukt und ein IF/THEN-Konstrukt. Außerdem steht ein unbedingter Sprungbefehl zur Verfügung.
.on | entspricht dem IF/THEN von Basic. Hinter .on folgt ein Ausdruck, ein Komma und ein zweiter Ausdruck. Ist der erste Ausdruck wahr, wird zu der Zeilennummer gesprungen, die der zweite Ausdruck angibt. Beispiel: 100 -.on switch !=! 7, 400 Es wird die Assemblierung in Zeile 400 fortgesetzt, wenn switch gleich 7 ist. |
.go | ergibt einen unbedingten Sprung zu der Zeile, die der Ausdruck hinter .go angibt. Beispiel: 100 -.go 1000 |
.if | wird gefolgt von einem Ausdruck. Ist der Ausdruck wahr, wird die Assemblierung hinter der .if-Zeile fortgesetzt, bis |
.el | gefunden wird. Daraufhin wird |
.ei | gesucht und dahinter die Assemblierung fortgesetzt. |
Entsprechend erfolgt die Assemblierung von .el bis .ei, falls der Ausdruck hinter .if falsch ist. .el kann auch fehlen, es wird dann direkt hinter .ei fortgefahren.
Auf eine Schachtelung von IF-Konstrukten wurde wegen des Zwecks der bedingten Assemblierung verzichtet. Beispiel:
100 | -.if switch !=! 6 | |
110 | - | lda#0 |
120 | -.el | |
130 | - | lda#2 |
140 | -.ei |
Wenn switch gleich 6 ist, erhält man lda#0, sonst wird lda #2 erzeugt. Vor den Pseudos .if, .el und .ei dürfen keine Label in derselben Zeile stehen.
Verkettung von Quelltexten
Mit dem Pseudo .ap (append) kann ein weiterer Quelltext am Ende des Pass 2 automatisch nachgeladen werden, wobei der Programmzähler aus der vorangegangenen Assemblierung erhalten bleibt.
Hinter .ap muß der Name des nachzuladenen Files in Anführungszeichen stehen.
Eine Besonderheit von HYPRA-ASS bildet im Zusammenhang mit verketteten Quelltexten der Pseudo-Opcode .co (common).
Dieser Befehl bewirkt zunächst, daß alle Variablen/Label, die hinter der .co-Anweisung in einer Liste stehen, an den nachgeladenen Teil übergeben werden.
Zweitens bleiben alle Quelltextzeilen bis zur common-Zeile beim Nachladen erhalten. Steht also etwa ein Makro vor der common-Zeile, wird auch das Makro übergeben. Zu beachten ist dabei:
- Es sollten keine Makroaufrufe im common-Bereich stehen, es sei denn innerhalb eines Makro.
- Die .ba-Anweisung, die die Startadresse des Objektcodes bestimmt, sollte außerhalb des common-Bereiches liegen, damit nach dem Nachladen nicht wieder mit der gleichen Startadresse assembliert wird.
- Wertzuweisungen an Label sollten ebenfalls außerhalb des common-Bereiches liegen, um Platz für den nachgeladenen Quelltext zu gewinnen.
Direktes Senden des Objektcodes zur Floppy
Der Pseudobefehl .ob (object), gefolgt vom Filenamen ,p,w in Anführungszeichen, sendet den erzeugten Objektcode direkt zur Floppy.
Geschlossen wird das so erzeugte Objektfile durch den Pseudobefehl .en.
Sollte während der Assemblierung ein Fehler entdeckt werden und das Objektfile nicht schon durch die HYPRA-ASS-Fehlerroutine geschlossen worden sein, geben Sie bitte CLOSE 14 ein.
Ausgabe von formatierten Listings
1) .li 1,3,0 | sendet ein formatiertes Listing des Quelltextes unter der logischen Filenummer 1 an das Gerät 3 mit der Sekundäradresse 0 (Bildschirm). Die Parameter hinter .li entsprechen denen des OPEN-Befehls. So ist es auch möglich, mit .li 2,8,2, "test,u,w" das Listing auf eine Userdatei zu leiten und so weiter. |
Der .li-Pseudobefehl muß der erste Befehl im Quelltext sein, wenn alle Zeilen gelistet werden sollen. Die Zeilen bis einschließlich .li werden nicht ausgegeben. Die gelisteten Zeilen haben folgendes Format:
Die Steuerung der Formatierung erfolgt mit dem Editorbefehl /t. Bei Zeilen, die Pseudobefehle enthalten, wie .eq… werden keine Adressen und Opcodes ausgegeben. | |
2) .sy 1,3,0 | sendet am Ende von Pass 2 die sortierte Symboltabelle. Die Formatierung wird hier durch /t3,… gesteuert. Die Labelwerte werden hexadezimal ausgegeben. |
Eine Zeile der Symboltabelle sieht dann folgendermaßen aus:
Das Listing des Quelltextes erhält die Kopfzeile »HYPRA-ASS Assemblerlisting:«. Die Symboltabelle erhält die Kopfzeile »Symbols in alphabetical order«. | |
3) .dp | setzt aus dem Quelltext heraus die Tabulatoren
|
4) .st | beendet die Assemblierung |
Am Ende des zweiten Passes wird immer die Meldung »end of assembly« gefolgt von der Assemblierungsdauer in Minuten, Sekunden und Zehntelsekunden ausgegeben. Dahinter folgt die Zeile »base = $XXXX last byte at $YYYY«.
Eine Zusammenfassung aller Pseudobefehle finden Sie in Bild 3.
1) | .ba $C000 | gibt die Startadresse der Assemblierung an. Bei anderen Assemblern heißt dieser Befehl auch org oder * = . |
2) | .eq label=wert | weist einem Label einen Wert zu |
3) | .gl label=wert | weist einem globalen Label einen Wert zu |
4) | .by 1,2,"a" | Einfügen von Byte-Werten in den Quelltext |
5) | .wo 1234,label | Einfügen von Adressen in der Folge low/high |
6) | .tx"text" | Einfügen von Text als ASCII-Werte |
7) | .ap "file" | Verketten von Quelltexten |
8) | .ob "file,p,w" | Senden des Objektcodes zur Floppy |
9) | .en | Schließen des Objektfiles |
10) | .on ausdruck,sprung | bedingter Sprung, wenn Ausdruck wahr |
11) | .go sprung | unbedingter Sprung |
12) | .if ausdruck | Fortführung der Assemblierung bei ELSE, falls Ausdruck falsch. Ansonsten hinter .if bis zu ELSE oder ENDIF |
13) | .el | Alternative zu den Zeilen, die hinter .if stehen |
14) | .ei | Ende der IF-Konstruktion |
15) | .co var1,var2 | Übergabe von Labeln und Quelltext an nachgeladene Teile |
16) | .ma makro (par1,par2) | Makrodefinitionszeile |
17) | .rt | Ende der Makrodefinition |
18) | ...makro (par1,par2) |
Makroaufruf |
19) | .li lfn, dn, ba | sendet formatiertes Listing unter der File-Nummer lfn zum Gerät dn mit der Sekundäradresse ba |
20) | .sy lfn, dn, ba | sendet formatierte Symboltabelle unter der File-Nummer lfn zum Gerät dn mit der Sekundäradresse ba |
21) | .st | beendet die Assemblierung |
22) | .dp t0, t1, t2, t3 | setzt die Tabulatoren T0, T1, T2, T3 aus dem Quelltext heraus |
HYPRA-ASS-Editor
Eines der Ziele bei der Entwicklung von HYPRA-ASS war es auch, die Editierung von Quelltexten möglichst bequem zu machen. Dazu wurden etliche Funktionen, die im normalen Basic-Editor stets gebraucht, aber nie vorhanden sind, in den HYPRA-ASS-Editor eingebaut.
Als Grundlage des HYPRA-ASS-Editors blieb dabei der Basic-Editor erhalten.
Ein HYPRA-ASS-Quelltext wird also im Prinzip genauso eingegeben wie ein Basic-Programm. Allerdings muß hinter der Zeilennummer immer ein Minuszeichen eingegeben werden, das den Beginn der Quelltextzeile bildet. So eingegebene Quelltextzeilen werden als ASCII-Zeilen in den Speicher übernommen. Alle überflüssigen Blanks werden entfernt.
Jede eingegebene Zeile wird sofort nach der Übernahme formatiert ausgegeben, um die Übersichtlichkeit des Quelltextes zu gewährleisten. Eine Tabelle aller Editorbefehle finden Sie in Bild 1.
(Gerd Möllmann/ah)$0000 | Zeropage |
$033e | Bandpuffer als Zwischenspeicher |
$0400 | Video-RAM |
$0800 | Hypra-ASS |
$1fd7 | Raum für Quelltext und Label. Quelltext bis maximal $a000 |
$a000 | Basic-Interpreter — darunter von c000 abwärts die Symboltabelle |
$c000 | frei! |
$d000 | I/O und so weiter |
$c000 | Kernal |
PROGRAMM : HYPRA-ASS 0801 1FD7 ----------------------------------- 0801 : 76 08 00 00 9E 32 31 36 28 0809 : 38 3A 22 0D 91 0E 05 20 66 0811 : 20 27 48 59 50 52 41 2D F9 0819 : 41 53 53 20 20 20 20 20 A1 0821 : 4D 41 4B 52 4F 41 53 53 1F 0829 : 45 4D 42 4C 45 52 0D 20 8A 0831 : 20 C0 C0 C0 C0 C0 C0 C0 90 0839 : C0 C0 C0 C0 C0 C0 C0 C0 38 0841 : C0 C0 C0 C0 C0 C0 C0 C0 40 0849 : C0 C0 C0 C0 C0 C0 0D 20 38 0851 : 20 20 56 4F 4E 0D 0D 20 C3 0859 : 20 20 C7 45 52 44 20 CD 87 0861 : 4F 45 4C 4C 4D 41 4E 4E A4 0869 : 20 20 20 31 39 38 35 20 32 0871 : 28 C3 29 0D 00 00 00 4C FF 0879 : 55 0B 43 50 58 43 50 59 C2 0881 : 4C 44 58 4C 44 59 43 4D 46 0889 : 50 41 44 43 41 4E 44 44 13 0891 : 45 43 45 4F 52 49 4E 43 E2 0899 : 4C 44 41 41 53 4C 42 49 B3 08A1 : 54 4C 53 52 4F 52 41 52 6C 08A9 : 4F 4C 52 4F 52 53 42 43 EC 08B1 : 53 54 41 53 54 58 53 54 E7 08B9 : 59 4A 4D 50 4A 53 52 54 C6 08C1 : 58 41 54 41 58 54 59 41 07 08C9 : 54 41 59 54 53 58 54 58 99 08D1 : 53 50 48 50 50 4C 50 50 B2 08D9 : 48 41 50 4C 41 42 52 4B 65 08E1 : 52 54 49 52 54 53 4E 4F B2 08E9 : 50 43 4C 43 53 45 43 43 49 08F1 : 4C 49 53 45 49 43 4C 56 EC 08F9 : 43 4C 44 53 45 44 44 45 F0 0901 : 59 49 4E 59 44 45 58 49 20 0909 : 4E 58 42 50 4C 42 4D 49 BD 0911 : 42 56 43 42 56 53 42 43 27 0919 : 43 42 43 53 42 4E 45 42 E9 0921 : 45 51 E4 C4 A6 A4 C5 65 52 0929 : 25 C6 45 E6 A5 06 24 46 87 0931 : 05 26 66 E5 85 86 84 4C D7 0939 : 20 8A AA 98 A8 BA 9A 08 37 0941 : 28 48 68 00 40 60 EA 18 8A 0949 : 38 58 78 B8 D8 F8 88 C8 EB 0951 : CA E8 10 30 50 70 90 B0 C6 0959 : D0 F0 40 40 54 68 7B 7B 27 0961 : 7B 28 7B 28 7B A8 00 A8 23 0969 : 7B A8 A8 7B 3B 04 08 00 C6 0971 : 00 00 00 00 00 02 02 02 8E 0979 : 02 03 03 02 01 0C FC 10 83 0981 : 10 14 18 04 04 2B 2D 2A C5 0989 : 2F 5E 41 4F 3E 3D 3C 43 67 0991 : 41 4E 27 54 20 4E 55 4D B2 0999 : 42 45 52 20 54 45 52 4D 6A 09A1 : 00 4E 4F 20 4D 4E 45 4D 97 09A9 : 4F 4E 49 43 00 49 4C 4C EE 09B1 : 45 47 41 4C 20 52 45 47 AC 09B9 : 49 53 54 45 52 00 45 4E 40 09C1 : 44 20 4F 46 20 4C 49 4E D8 09C9 : 45 20 45 58 53 50 45 43 CE 09D1 : 54 45 44 00 57 52 4F 4E BB 09D9 : 47 20 41 44 44 52 45 53 9C 09E1 : 53 00 42 52 41 4E 43 48 33 09E9 : 20 54 4F 4F 20 46 41 52 CF 09F1 : 00 55 4E 4B 4E 4F 57 4E F2 09F9 : 20 4C 41 42 45 4C 00 49 21 0A01 : 4C 4C 45 47 41 4C 20 4C 3D 0A09 : 41 42 45 4C 00 54 4F 4F C5 0A11 : 20 4D 41 4E 59 20 4C 41 3C 0A19 : 42 45 4C 53 00 4E 4F 20 6B 0A21 : 4D 41 43 52 4F 20 54 4F 10 0A29 : 20 43 4C 4F 53 45 00 55 F2 0A31 : 4E 4B 4E 4F 57 4E 20 50 AB 0A39 : 53 45 55 44 4F 00 4C 41 B5 0A41 : 42 45 4C 20 44 45 43 4C 51 0A49 : 41 52 45 44 20 54 57 49 22 0A51 : 43 45 00 50 41 52 41 4D 87 0A59 : 45 54 45 52 00 52 45 54 B4 0A61 : 55 52 4E 00 90 09 A2 09 61 0A69 : AE 09 BF 09 D5 09 E3 09 F4 0A71 : F2 09 00 0A 0E 0A 1E 0A E7 0A79 : 30 0A 3F 0A 54 0A 0A AA D3 0A81 : BD 65 0A 85 22 BD 66 0A E2 0A89 : 85 23 A9 0E 20 C3 FF 20 2C 0A91 : CC FF A9 00 85 13 20 D7 E8 0A99 : AA A0 00 B1 22 F0 06 20 CC 0AA1 : D2 FF C8 D0 F6 4C 62 A4 64 0AA9 : A9 00 85 0D 20 73 00 B0 54 0AB1 : 06 20 F3 BC 4C 0C 0B 20 ED 0AB9 : 13 B1 90 06 20 B1 0D 4C E6 0AC1 : 0C 0B 20 79 00 10 03 4C AF 0AC9 : B1 AE C9 2B F0 DE C9 24 1E 0AD1 : F0 20 C9 2D F0 16 C9 22 14 0AD9 : F0 15 C9 21 F0 17 C9 3E 56 0AE1 : F0 5A C9 3C F0 56 20 F1 1E 0AE9 : AE 4C 0C 0B 4C 0D AF 4C A6 0AF1 : BD AE 4C 6A 0D 20 73 00 05 0AF9 : C9 4E D0 0A 20 73 00 C9 90 0B01 : 21 D0 03 4C D0 AE A9 00 FE 0B09 : 4C 7F 0A 20 79 00 AA 10 FE 0B11 : 01 60 68 68 8A C9 21 D0 87 0B19 : 0C 20 73 00 AA 20 73 00 8C 0B21 : C9 21 D0 E2 8A A2 0A DD AD 0B29 : 85 09 F0 05 CA D0 F8 F0 09 0B31 : 04 8A 18 69 A9 A2 00 86 6A 0B39 : 4D 4C BB AD 48 20 73 00 A4 0B41 : 20 F1 AE 20 F7 B7 AA 68 C2 0B49 : C9 3C F0 02 8A A8 20 A2 60 0B51 : B3 4C 0C 0B A9 9D A2 17 CF 0B59 : 8D 02 03 8E 03 03 A9 A9 BC 0B61 : A2 0A 8D 0A 03 8E 0B 03 84 0B69 : A9 47 A2 0F 8D 08 03 8E 83 0B71 : 09 03 A9 1F 85 2C A9 D8 5C 0B79 : 85 2B A9 00 8D D7 1F 20 53 0B81 : 44 A6 A2 FA 9A 4C 49 A8 A3 0B89 : A2 00 86 41 A0 00 B1 7A BB 0B91 : DD 7B 08 D0 10 C8 B1 7A 4B 0B99 : DD 7C 08 D0 08 C8 B1 7A 53 0BA1 : DD 7D 08 F0 0E E6 41 E8 4C 0BA9 : E8 E8 E0 A8 D0 DE A9 01 FF 0BB1 : 4C 7F 0A A6 41 BD 23 09 B5 0BB9 : 85 3B A9 02 4C FC A8 A9 29 0BC1 : 00 85 3E 20 73 00 C9 23 BC 0BC9 : F0 4F C9 28 D0 55 20 2A 65 0BD1 : 14 A5 3D D0 14 20 79 00 49 0BD9 : C9 2C F0 22 C9 29 D0 19 94 0BE1 : 20 73 00 C9 2C F0 27 D0 7D 0BE9 : 03 20 73 00 A5 41 C9 15 8F 0BF1 : D0 07 A9 09 85 3E 4C 6D 27 0BF9 : 0C A9 04 4C 7F 0A 20 73 14 0C01 : 00 A9 58 20 FF AE 20 F7 D6 0C09 : AE E6 3E 4C 6D 0C 20 73 E2 0C11 : 00 A9 59 20 FF AE 4C 6D C2 0C19 : 0C 20 38 14 A9 06 85 3E 23 0C21 : 4C 6D 0C A9 07 85 3E 20 32 0C29 : 79 00 F0 3B C9 3B F0 37 EE 0C31 : A2 05 86 3E 20 2D 14 20 BB 0C39 : 79 00 C9 2C D0 22 20 73 30 0C41 : 00 AA 20 73 00 8A C9 58 39 0C49 : F0 0B C9 59 F0 05 A9 02 3E 0C51 : 4C 7F 0A C6 3E A5 3D D0 60 0C59 : 04 C6 3E C6 3E 4C 6D 0C 3D 0C61 : A9 0A 85 3E 4C 56 0C A9 33 0C69 : 07 85 3E 60 20 79 00 F0 7E 0C71 : FA C9 3B F0 F6 A9 03 4C 9E 0C79 : 7F 0A A6 3E E0 06 D0 0C 08 0C81 : A5 41 C9 04 B0 06 A5 3B 02 0C89 : E9 07 85 3B E0 09 F0 29 2B 0C91 : A5 41 C9 15 90 35 F0 14 8A 0C99 : C9 16 F0 10 C9 30 90 03 12 0CA1 : 4C 28 0D E0 07 D0 1F A9 27 0CA9 : 01 85 42 60 E0 08 F0 04 24 0CB1 : E0 0A D0 12 A9 03 85 42 5A 0CB9 : 60 A5 41 C9 15 D0 07 A9 BD 0CC1 : 6C 85 3B 4C B5 0C A9 04 B3 0CC9 : 4C 7F 0A A9 02 85 42 E0 A4 0CD1 : 08 F0 0D E0 0A D0 0A E6 CE 0CD9 : 42 A5 3B 18 69 08 85 3B 23 0CE1 : 60 A9 01 E0 00 F0 05 0A 22 0CE9 : CA 4C E4 0C A6 41 3D 5B B4 0CF1 : 09 D0 11 A6 3E E0 02 F0 50 0CF9 : 04 E0 03 D0 C9 E8 E8 86 DD 0D01 : 3E 4C E2 0C A6 3E E0 04 87 0D09 : D0 0F A5 41 C9 02 D0 09 F4 0D11 : A9 03 85 42 A9 BE 85 3B 03 0D19 : 60 BD 76 09 85 42 BD 7E 75 0D21 : 09 18 65 3B 85 3B 60 20 EB 0D29 : AD 0C C6 42 A5 FD C9 02 4C 0D31 : 90 F4 A5 3C A6 3D 38 E5 2D 0D39 : FB A8 8A E5 FC 90 17 AA EE 0D41 : 98 E9 02 B0 01 CA 85 3C 59 0D49 : E0 00 D0 05 C9 80 B0 01 63 0D51 : 60 A9 05 4C 7F 0A AA 98 75 0D59 : 38 E9 02 B0 01 CA 85 3C 11 0D61 : E0 FF D0 ED C9 80 90 E9 E9 0D69 : 60 A2 0A A9 00 95 5D CA 8A 0D71 : D0 FB 20 73 00 90 0B 20 A6 0D79 : 13 B1 90 17 E9 07 C9 40 EA 0D81 : B0 11 E9 2F 20 7E BD A5 52 0D89 : 61 18 69 04 85 61 90 E2 3D 0D91 : 4C 7E B9 A5 61 E9 03 90 D2 0D99 : 05 85 61 4C 0C 0B 4C 08 9D 0DA1 : AF 85 62 84 63 A2 90 38 3A 0DA9 : 4C 49 BC 00 00 00 00 00 C9 0DB1 : A2 00 86 0D 86 0C 86 0E 96 0DB9 : A5 7A A4 7B 85 49 84 4A 7D 0DC1 : 20 79 00 20 13 B1 B0 09 36 0DC9 : A9 20 85 81 A9 07 4C 7F 17 0DD1 : 0A 20 73 00 90 05 20 13 A0 0DD9 : B1 90 04 E8 4C D2 0D C9 14 0DE1 : 27 F0 F8 E8 86 45 A9 36 81 0DE9 : 85 01 A9 F9 A2 BF 86 60 9B 0DF1 : 85 5F E4 30 90 4A D0 04 0C 0DF9 : C5 2F 90 44 A0 01 B1 5F 9A 0E01 : C9 FF F0 0E CD AD 0D D0 E8 0E09 : 2A 88 B1 5F CD AC 0D D0 E8 0E11 : 22 C8 C8 B1 5F C5 45 D0 DA 0E19 : 1A C8 B1 5F 85 47 C8 B1 09 0E21 : 5F 85 48 A0 00 B1 49 D1 BF 0E29 : 47 D0 08 C8 C4 45 D0 F5 99 0E31 : 4C A5 0E A5 5F 38 E9 07 F6 0E39 : A6 60 B0 B4 CA 4C EF 0D BB 0E41 : 68 48 C9 BF D0 19 20 9F CD 0E49 : 0E A6 FD F0 08 CA F0 08 F2 0E51 : A9 06 4C 7F 0A A9 00 2C 47 0E59 : A9 80 A0 00 4C A2 0D A5 C4 0E61 : 5F A4 60 C4 2E 90 06 D0 E4 0E69 : 07 C5 2D B0 03 4C B7 0E 42 0E71 : 85 2F 84 30 A0 00 AD AC CF 0E79 : 0D 91 5F C8 AD AD 0D 91 DF 0E81 : 5F C8 A5 45 91 5F C8 A5 D9 0E89 : 49 91 5F C8 A5 4A 91 5F 3D 0E91 : A5 5F A4 60 18 69 05 90 1D 0E99 : 01 C8 85 49 84 4A A9 37 39 0EA1 : 85 01 38 60 20 91 0E A9 DB 0EA9 : 36 85 01 20 83 14 20 9F 7F 0EB1 : 0E 20 A6 0D 18 60 20 9F 5F 0EB9 : 0E A9 08 4C 7F 0A 00 00 70 0EC1 : 00 00 A9 00 85 FD 85 FE 88 0EC9 : 4C E4 A7 A0 02 B1 7A F0 FF 0ED1 : 1F C8 B1 7A 85 39 C8 B1 B9 0ED9 : 7A 85 3A A4 7B A6 7A E8 E2 0EE1 : D0 01 C8 8E C1 0E 8C C2 7A 0EE9 : 0E A0 04 20 FB A8 18 60 73 0EF1 : 38 60 00 0F 1E 02 0F A5 B5 0EF9 : FD C9 02 90 43 AD 32 16 04 0F01 : 20 C3 FF A9 FF 85 3A A9 A0 0F09 : 00 8D AC 0D 8D AD 0D 8D 32 0F11 : AF 0D A9 01 8D AE 0D AD AF 0F19 : E0 16 F0 12 20 D7 AA 20 2E 0F21 : 03 17 20 D7 AA 20 D7 AA 13 0F29 : AE DB 16 20 C9 FF 20 3E E8 0F31 : 15 20 A6 15 20 CC FF AD 66 0F39 : DB 16 20 C3 FF 4C 7B E3 B8 0F41 : 20 78 14 4C E9 0F 24 9D 0F 0F49 : 10 03 4C C3 0E 20 1F 15 EF 0F51 : A2 FA 9A 20 8E A6 A5 2B 26 0F59 : A6 2C 8D 74 09 8E 75 09 F4 0F61 : A9 00 48 A2 C0 8D E0 16 99 0F69 : 8D 33 16 8D 72 09 8E 73 58 0F71 : 09 AD 72 09 AE 73 09 85 C4 0F79 : 2F 86 30 A9 00 8D C0 0E B8 0F81 : 8D BF 0E 8D AC 0D 8D AD E8 0F89 : 0D 8D AF 0D A9 01 8D AE 21 0F91 : 0D 20 CC 0E B0 52 20 73 A8 0F99 : 00 C9 2E D0 42 20 73 00 16 0FA1 : C9 4D F0 1E C9 52 D0 37 F2 0FA9 : 20 73 00 C9 54 D0 10 EE A6 0FB1 : C0 0E AD BF 0E CD C0 0E 4A 0FB9 : B0 25 A9 09 4C 7F 0A 4C 09 0FC1 : 08 AF 20 73 00 A9 41 20 AA 0FC9 : FF AE 20 B1 0D A0 00 A5 7F 0FD1 : 7A 91 49 C8 A5 7B 91 49 8E 0FD9 : A9 FF 91 5F EE BF 0E 20 37 0FE1 : 09 A9 20 FB A8 4C 92 0F 9C 0FE9 : E6 FD A9 00 8D AC 0D 8D C6 0FF1 : AD 0D 8D AF 0D A9 01 8D BB 0FF9 : AE 0D 20 8E A6 20 B4 16 72 1001 : 20 CC 0E 90 06 4C F8 0E E0 1009 : 4C 96 10 A0 01 B1 7A C9 D4 1011 : 3B F0 F5 C9 20 F0 4E C9 D1 1019 : 2E F0 4A A5 FD C9 01 F0 1B 1021 : 0F C8 B1 7A F0 5B C9 20 A1 1029 : D0 F7 20 FB A8 4C 69 10 2F 1031 : A9 FF 85 81 20 73 00 20 49 1039 : B1 0D A9 20 85 81 B0 15 31 1041 : A5 4A CD 73 09 90 09 D0 C8 1049 : 0C A5 49 CD 72 09 B0 05 70 1051 : A9 0B 4C 7F 0A A5 FC A6 92 1059 : FB 20 91 14 20 79 00 C9 AD 1061 : 00 D0 08 F0 1C 20 73 00 7A 1069 : 20 79 00 C9 2E F0 55 20 7F 1071 : 5F 14 A0 00 B1 7A F0 14 DD 1079 : C9 3B F0 10 A9 03 4C 7F 01 1081 : 0A AD 33 16 F0 03 20 65 64 1089 : 17 20 73 00 20 09 A9 20 BE 1091 : FB A8 4C FE 0F AD 33 16 2B 1099 : F0 EF AE 32 16 20 C9 FF FC 10A1 : 20 57 17 AD C1 0E AE C2 B5 10A9 : 0E 85 5F 86 60 A2 00 20 7E 10B1 : 82 1B 20 D7 AA 20 CC FF A3 10B9 : 20 73 00 20 09 A9 20 FB ED 10C1 : A8 4C 01 10 A2 00 A0 01 80 10C9 : B1 7A DD 9C 14 D0 08 C8 3C 10D1 : B1 7A DD 9D 14 F0 0B E8 B1 10D9 : E8 E0 2C D0 E9 A9 0A 4C 03 10E1 : 7F 0A BD C9 14 48 BD C8 1A 10E9 : 14 48 AD 33 16 F0 03 20 28 10F1 : 65 17 A9 02 4C FC A8 20 1C 10F9 : 73 00 20 B1 0D A9 FF A0 0A 1101 : 01 91 5F 4C 0D 11 20 73 ED 1109 : 00 20 B1 0D A9 3D 20 FF 2C 1111 : AE A5 4A 48 A5 49 48 20 33 1119 : 2D 14 68 85 49 68 85 4A 9E 1121 : A5 3D A6 3C 20 91 14 4C 0D 1129 : 73 10 20 2A 14 8D 71 09 77 1131 : 8C 70 09 20 78 14 4C 73 7C 1139 : 10 A9 01 85 42 20 38 14 3D 1141 : 85 3B 20 D3 13 20 79 00 FE 1149 : C9 2C F0 F1 4C 73 10 A9 97 1151 : 01 85 42 A0 00 20 73 00 88 1159 : C9 22 F0 03 4C 99 AD C8 AA 1161 : B1 7A F0 11 C9 22 F0 0C 37 1169 : 85 3B 98 48 20 D3 13 68 79 1171 : A8 4C 60 11 C8 20 FB A8 48 1179 : 4C 73 10 A9 02 85 42 20 4E 1181 : 2A 14 85 3C 84 3B 20 D3 E8 1189 : 13 20 79 00 C9 2C F0 EF AC 1191 : 4C 73 10 A6 FD CA F0 2A BE 1199 : 20 E7 FF 20 73 00 20 F4 52 11A1 : 14 A9 0E A0 6E A2 08 20 7E 11A9 : BA FF 20 C0 FF A2 0E 20 10 11B1 : C9 FF A5 FB 20 D2 FF A5 46 11B9 : FC 20 D2 FF 20 CC FF 4C 7B 11C1 : 8D 10 A9 80 85 FE 4C 8D 6D 11C9 : 10 A5 FD C9 02 90 0C A9 8D 11D1 : 00 85 FE A9 0E 20 C3 FF 7A 11D9 : 20 CC FF 4C 8D 10 20 09 D5 11E1 : A9 20 FB A8 A0 04 20 FB 51 11E9 : A8 20 73 00 C9 2E D0 EE AD 11F1 : 20 73 00 C9 52 D0 E7 4C E8 11F9 : 8D 10 AD AC 0D 0D AD 0D 99 1201 : 8D B0 0D 20 73 00 20 B1 49 1209 : 0D A5 7B 48 8D D2 13 A5 D8 1211 : 7A 48 8D D1 13 A9 36 48 35 1219 : 85 01 A0 01 B1 49 85 7B DA 1221 : 88 B1 49 85 7A A9 37 85 62 1229 : 01 20 79 00 C9 28 D0 4E 56 1231 : 20 BC 13 20 79 00 C9 28 87 1239 : D0 4A 20 2A 14 20 BC 13 D7 1241 : 20 8A 12 20 73 00 20 B1 4A 1249 : 0D A5 3D A6 3C 20 91 14 80 1251 : 20 79 00 C9 29 F0 14 C9 65 1259 : 2C D0 29 20 BC 13 20 79 14 1261 : 00 C9 2C D0 1F 20 AE 12 3D 1269 : 4C 3B 12 20 BC 13 20 79 B3 1271 : 00 C9 29 D0 0F 20 BC 13 C5 1279 : 20 A5 12 4C 8D 10 20 8A 69 1281 : 12 4C 79 12 A9 0C 4C 7F 85 1289 : 0A AD B0 0D D0 0D AD AE C1 1291 : 0D AE AF 0D 8D AC 0D 8E 12 1299 : AD 0D 60 EE AC 0D D0 03 3F 12A1 : EE AD 0D 60 EE AE 0D D0 EF 12A9 : 03 EE AF 0D 60 AD B0 0D 01 12B1 : D0 09 A9 00 8D AC 0D 8D FE 12B9 : AD 0D 60 AD AC 0D D0 03 37 12C1 : CE AD 0D CE AC 0D 60 68 08 12C9 : C9 36 D0 1D 68 85 7A 68 F3 12D1 : 85 7B 68 48 C9 36 D0 06 D5 12D9 : 20 BC 12 4C 8D 10 A9 00 65 12E1 : 8D AC 0D 8D AD 0D 4C 8D 49 12E9 : 10 A9 0D 4C 7F 0A A6 FD 7A 12F1 : CA D0 36 20 73 00 F0 14 D8 12F9 : C9 3B F0 10 20 B1 0D 20 A2 1301 : 79 00 C9 2C D0 06 20 73 17 1309 : 00 4C FD 12 A5 2F A6 30 C0 1311 : 8D 72 09 8E 73 09 20 09 FE 1319 : A9 C8 A6 7B 18 98 65 7A 10 1321 : 90 01 E8 8D 74 09 8E 75 D2 1329 : 09 4C 8D 10 A5 FD C9 02 33 1331 : 90 F7 20 CC FF A5 FB A6 C9 1339 : FC 8D 70 09 8E 71 09 20 12 1341 : 73 00 20 F4 14 A2 08 A0 13 1349 : 00 20 BA FF A9 00 85 0A CD 1351 : AE 74 09 AC 75 09 20 75 1C 1359 : E1 A9 00 85 FD A5 FE F0 AA 1361 : 05 A2 0E 20 C9 FF 4C 72 F2 1369 : 0F 20 73 00 20 8A AD A5 BE 1371 : 61 D0 0C 20 FD AE 20 2D 72 1379 : 14 20 A3 A8 4C FE 0F 4C 2D 1381 : 8D 10 20 2A 14 4C 7A 13 17 1389 : 20 73 00 20 8A AD A5 61 D6 1391 : F0 03 4C 73 10 20 09 A9 FE 1399 : C8 C8 C8 C8 20 FB A8 20 D5 13A1 : 73 00 C9 2E D0 EF 20 73 40 13A9 : 00 C9 45 D0 E8 20 73 00 57 13B1 : C9 4C F0 04 C9 49 D0 DD 43 13B9 : 4C 8D 10 A6 7A A4 7B AD BB 13C1 : D1 13 85 7A AD D2 13 85 95 13C9 : 7B 8E D1 13 8C D2 13 60 CE 13D1 : 00 00 A6 FD CA F0 24 A5 4B 13D9 : FE D0 2C A5 FB A6 FC 85 F3 13E1 : 22 86 23 A6 42 A0 00 A5 58 13E9 : 3B 91 22 CA F0 0D C8 A5 B5 13F1 : 3C 91 22 CA F0 05 C8 A5 7D 13F9 : 3D 91 22 A5 42 18 65 FB AF 1401 : 85 FB 90 02 E6 FC 60 A2 05 1409 : 0E 20 C9 FF A6 42 A5 3B 23 1411 : 20 D2 FF CA F0 0D A5 3C 7A 1419 : 20 D2 FF CA F0 05 A5 3D 44 1421 : 4C 19 14 20 CC FF 4C FC FB 1429 : 13 20 73 00 20 8A AD 20 77 1431 : F7 B7 85 3D 84 3C 60 20 F9 1439 : 73 00 C9 22 F0 09 20 2D 95 1441 : 14 C9 00 D0 16 98 60 A0 3D 1449 : 01 B1 7A 85 3C C8 B1 7A 38 1451 : C9 22 D0 07 C8 20 FB A8 0F 1459 : A5 3C 60 4C 48 B2 20 89 6C 1461 : 0B 20 C0 0B 20 7B 0C A6 69 1469 : FD CA F0 08 AD 33 16 F0 B7 1471 : 03 20 4E 16 4C D3 13 AD E6 1479 : 70 09 AE 71 09 85 FB 86 01 1481 : FC 60 A0 01 B1 49 85 62 36 1489 : 88 B1 49 85 63 84 70 60 CA 1491 : A0 01 91 49 88 8A 91 49 F5 1499 : 84 70 60 45 51 42 41 42 C7 14A1 : 59 54 58 57 4F 4F 42 45 28 14A9 : 4E 4D 41 2E 2E 52 54 43 01 14B1 : 4F 41 50 4F 4E 47 4F 49 8E 14B9 : 46 45 4C 45 49 47 4C 4C F6 14C1 : 49 53 59 53 54 44 50 06 29 14C9 : 11 2A 11 39 11 4F 11 7B 22 14D1 : 11 93 11 C9 11 DE 11 FA 6C 14D9 : 11 C7 12 EE 12 2C 13 69 D2 14E1 : 13 82 13 88 13 95 13 B8 A7 14E9 : 13 F7 10 F2 15 BC 16 3C 62 14F1 : 17 78 17 A6 7A A4 7B E8 6B 14F9 : D0 01 C8 86 BB 84 BC A0 61 1501 : 00 C8 B1 7A C9 22 D0 F9 06 1509 : 88 84 B7 60 45 4E 44 20 E5 1511 : 4F 46 20 41 53 53 45 4D 33 1519 : 42 4C 59 20 20 00 AD 0E B1 1521 : DC 09 80 8D 0E DC AD 0F F0 1529 : DC 29 FE 8D 0F DC A9 00 8A 1531 : 8D 0B DC 8D 0A DC 8D 09 FC 1539 : DC 8D 08 DC 60 A9 00 8D E8 1541 : 0B DC 20 D7 AA 20 57 17 F5 1549 : A9 0D A0 15 20 1E AB AD 41 1551 : 0A DC 29 0F 18 69 30 20 C3 1559 : D2 FF A9 3A 20 D2 FF AD D0 1561 : 09 DC AA 29 F0 4A 4A 4A C7 1569 : 4A 18 69 30 20 D2 FF 8A CD 1571 : 29 0F 18 69 30 20 D2 FF A4 1579 : A9 2E 20 D2 FF AD 08 DC E3 1581 : 29 0F 18 69 30 20 D2 FF B4 1589 : 4C D7 AA 42 41 53 45 20 B8 1591 : 3D 20 24 00 20 20 4C 41 9E 1599 : 53 54 20 42 59 54 45 20 F4 15A1 : 41 54 20 24 00 20 57 17 26 15A9 : A9 8C A0 15 20 1E AB AD 60 15B1 : 71 09 20 37 16 AD 70 09 38 15B9 : 20 37 16 A9 95 A0 15 20 23 15C1 : 1E AB A4 FC A6 FB D0 01 0D 15C9 : 88 CA 98 20 37 16 8A 20 6F 15D1 : 37 16 4C D7 AA 48 59 50 14 15D9 : 52 41 2D 41 53 53 20 20 D0 15E1 : 41 53 53 45 4D 42 4C 45 EC 15E9 : 52 4C 49 53 54 49 4E 47 75 15F1 : 3A 00 A6 FD CA F0 37 20 E6 15F9 : 73 00 20 19 E2 A5 B8 8D F1 1601 : 32 16 20 C0 FF B0 2C A9 E8 1609 : FF 8D 33 16 AE 32 16 20 74 1611 : C9 FF 20 D7 AA 20 D7 AA 3D 1619 : 20 57 17 A9 D6 A0 15 20 E7 1621 : 1E AB 20 D7 AA 20 D7 AA 78 1629 : 20 CC FF 20 65 17 4C 8D 0F 1631 : 10 00 00 4C F9 E0 48 4A 27 1639 : 4A 4A 4A 20 42 16 68 29 08 1641 : 0F 18 69 30 C9 3A 90 02 71 1649 : 69 06 4C D2 FF AE 32 16 8D 1651 : 20 C9 FF A2 00 EC F6 0E 09 1659 : B0 08 A9 20 20 D2 FF E8 E6 1661 : D0 F3 A5 FC 20 37 16 A5 93 1669 : FB 20 37 16 20 52 17 A6 43 1671 : 42 A5 3B 20 37 16 CA F0 8A 1679 : 10 A5 3C 20 37 16 CA F0 A0 1681 : 0B A5 3D 20 37 16 4C 90 29 1689 : 16 20 4D 17 20 4D 17 20 EF 1691 : 52 17 A9 3A 20 D2 FF 4C 52 1699 : CC FF AD C1 0E AE C2 0E 86 16A1 : 85 5F 86 60 AE 32 16 20 99 16A9 : C9 FF 20 4D 1B 20 D7 AA 8B 16B1 : 4C CC FF AD 33 16 F0 03 C7 16B9 : 4C 9B 16 60 A6 FD CA F0 CC 16C1 : 15 20 73 00 20 19 E2 A2 5F 16C9 : 05 B5 B7 9D DA 16 CA 10 F4 16D1 : F8 A9 FF 8D E0 16 4C 8D 5A 16D9 : 10 00 00 00 00 00 00 00 EA 16E1 : 4C F9 E0 53 59 4D 42 4F 74 16E9 : 4C 53 20 49 4E 20 41 4C 94 16F1 : 50 48 41 42 45 54 49 43 A1 16F9 : 41 4C 20 4F 52 44 45 52 53 1701 : 3A 00 A2 05 BD DA 16 95 BB 1709 : B7 CA 10 F8 20 C0 FF B0 B2 1711 : CF AE DB 16 20 C9 FF 20 82 1719 : D7 AA 20 D7 AA 20 D7 AA A9 1721 : 20 57 17 A9 E4 A0 16 20 D4 1729 : 1E AB 20 D7 AA 20 D7 AA 80 1731 : 20 7A 1E 20 90 1D 20 D7 3C 1739 : AA 4C CC FF A6 FD CA F0 A4 1741 : 08 A9 0E 20 C3 FF 4C F8 05 1749 : 0E 4C 8D 10 A9 20 20 D2 A4 1751 : FF A9 20 4C D2 FF A2 00 6E 1759 : EC F6 0E B0 06 20 52 17 33 1761 : E8 D0 F5 60 AE 32 16 20 50 1769 : C9 FF 20 57 17 A2 0D 20 20 1771 : 52 17 CA D0 FA 4C CC FF 61 1779 : 20 38 14 8D F4 0E 20 FD A8 1781 : AE 20 3F 14 8D F5 0E 20 93 1789 : FD AE 20 3F 14 8D F6 0E 73 1791 : 20 FD AE 20 3F 14 8D F7 1A 1799 : 0E 4C 8D 10 A9 00 85 FD DF 17A1 : 85 FC A6 02 F0 0C 30 42 43 17A9 : CA CA F0 2D CA F0 2D CA 39 17B1 : F0 30 20 60 A5 86 7A 84 4F 17B9 : 7B 20 73 00 AA F0 F3 C9 B7 17C1 : 5F F0 13 C9 2F F0 18 A2 B6 17C9 : FF 86 3A 20 79 00 90 2C D0 17D1 : 20 79 A5 4C E1 A7 4C 1E 69 17D9 : 1F 4C 9C 1A 4C 81 18 4C 53 17E1 : 5C 1E 4C 48 1C A9 00 85 83 17E9 : 02 60 A5 02 29 7F 85 02 6E 17F1 : 20 6B 18 20 4D 1B 20 D7 AF 17F9 : AA 4C 9D 17 20 6B A9 A6 65 1801 : 7A E8 A0 05 BD 00 02 99 CF 1809 : FB 01 F0 49 C9 3B F0 27 73 1811 : C9 2E F0 23 C9 20 F0 05 FD 1819 : E8 C8 4C 05 18 E8 BD 00 D9 1821 : 02 F0 31 C9 20 F0 F6 C9 1A 1829 : 22 F0 18 C9 3B F0 07 C8 EB 1831 : 99 FB 01 4C 1E 18 C8 99 8B 1839 : FB 01 E8 BD 00 02 D0 F6 E8 1841 : 4C 55 18 C8 99 FB 01 E8 A6 1849 : BD 00 02 F0 07 C9 22 D0 8E 1851 : F2 4C 30 18 C8 99 FD 01 CC 1859 : 99 FB 01 C6 7B A9 FF 85 19 1861 : 7A A5 02 09 80 85 02 4C 24 1869 : A2 A4 A9 91 20 D2 FF A2 D8 1871 : 00 A9 20 20 D2 FF E8 E0 E4 1879 : 27 D0 F6 A9 00 85 D3 60 37 1881 : AD 3D 03 AE 3C 03 20 CD 5B 1889 : BD A2 04 20 2A 1F A9 2D 39 1891 : 20 D2 FF AD 3D 03 85 15 FC 1899 : AD 3C 03 85 14 18 6D 40 0E 18A1 : 03 8D 3C 03 90 03 EE 3D 32 18A9 : 03 20 60 A5 86 7A C8 84 F1 18B1 : 7B A2 00 AD 00 02 D0 06 92 18B9 : 20 E6 17 4C 9D 17 4C 03 65 18C1 : 18 E6 7A 20 EB B7 A5 14 2A 18C9 : A4 15 8D 3C 03 8C 3D 03 72 18D1 : 8E 40 03 A9 03 85 02 4C 72 18D9 : 9D 17 20 73 00 90 09 F0 03 18E1 : 07 C9 2D F0 03 4C 08 AF 48 18E9 : 20 6B A9 20 13 A6 20 79 07 18F1 : 00 F0 0C C9 2D D0 EE 20 FB 18F9 : 73 00 20 6B A9 D0 E6 A5 EA 1901 : 14 05 15 D0 06 A9 FF 85 B0 1909 : 14 85 15 60 A0 01 B1 5F C9 1911 : F0 13 C8 B1 5F AA C8 B1 C5 1919 : 5F C5 15 D0 04 E4 14 F0 54 1921 : 02 B0 03 18 24 38 60 A0 06 1929 : 00 B1 5F AA C8 B1 5F 85 D2 1931 : 60 86 5F 60 4C 48 B2 20 CA 1939 : DB 18 A5 5F A6 60 85 19 2B 1941 : 86 1A A5 14 25 15 AA E8 38 1949 : F0 06 E6 14 D0 02 E6 15 5B 1951 : 20 13 A6 A5 5F A6 60 85 11 1959 : 24 86 25 38 E5 19 8A E5 2E 1961 : 1A 90 D1 A5 2D E5 24 85 8A 1969 : 5F A5 2E E5 25 85 60 18 13 1971 : A5 19 65 5F 85 2D A5 1A 75 1979 : 65 60 85 2E A0 00 B1 24 4F 1981 : 91 19 E6 19 D0 02 E6 1A 68 1989 : E6 24 D0 02 E6 25 A5 5F E3 1991 : 38 E9 01 85 5F A5 60 E9 27 1999 : 00 85 60 10 E1 20 59 A6 48 19A1 : 20 33 A5 4C 74 A4 20 DB F2 19A9 : 18 20 2C A8 20 0D 19 B0 22 19B1 : 0C 20 4D 1B 20 D7 AA 20 30 19B9 : 28 19 4C AA 19 4C 74 A4 E5 19C1 : 20 9B B7 86 FE 20 FD AE B4 19C9 : 20 8A AD 20 F7 B7 A6 FE 73 19D1 : 9D 61 03 98 9D 43 03 20 33 19D9 : FD AE 20 8A AD 20 F7 B7 B2 19E1 : A6 FE 9D 9D 03 98 9D 7F 8C 19E9 : 03 4C 74 A4 BD 43 03 85 D1 19F1 : 14 BD 61 03 85 15 86 FE B6 19F9 : 20 13 A6 A6 FE BD 7F 03 03 1A01 : 85 14 BD 9D 03 85 15 60 25 1A09 : 20 9E B7 20 ED 19 20 44 1B 1A11 : E5 4C AA 19 20 9B B7 86 B5 1A19 : FE 20 FD AE 20 EB B7 8E DA 1A21 : 40 03 A5 14 A6 15 8D 3C 90 1A29 : 03 8E 3D 03 A6 FE 20 ED E2 1A31 : 19 AD 3C 03 9D 43 03 AD EC 1A39 : 3D 03 9D 61 03 20 0D 19 23 1A41 : B0 1D AD 3D 03 91 5F 88 DE 1A49 : AD 3C 03 91 5F 18 6D 40 F4 1A51 : 03 8D 3C 03 90 03 EE 3D E2 1A59 : 03 20 28 19 4C 3E 1A AD 14 1A61 : 3C 03 38 ED 40 03 A6 FE 9F 1A69 : 9D 7F 03 B0 03 CE 3D 03 3E 1A71 : AD 3D 03 9D 9D 03 4C 74 3D 1A79 : A4 A9 02 85 02 A6 2C A5 74 1A81 : 2B 8E 3D 03 8D 3C 03 A9 BD 1A89 : FF 85 14 85 15 20 13 A6 ED 1A91 : A5 5F A6 60 85 2B 86 2C C0 1A99 : 4C C6 1A AE 3D 03 AD 3C C0 1AA1 : 03 86 2C 85 2B 20 E6 17 21 1AA9 : 4C 74 A4 20 9B B7 8E 49 A1 1AB1 : 1F 4C 9D 17 20 73 00 20 1E 1AB9 : 57 E2 A0 00 AE 49 1F 4C F4 1AC1 : BA FF A9 01 2C A9 00 85 20 1AC9 : 0A 20 B5 1A 20 6F E1 4C 32 1AD1 : 74 A4 20 B5 1A 20 59 E1 22 1AD9 : 4C 74 A4 20 9B B7 20 ED 60 1AE1 : 19 20 83 1C 20 FD AE 20 5C 1AE9 : AD 1C 20 0D 19 90 06 20 BD 1AF1 : E6 17 4C 74 A4 A6 60 A5 51 1AF9 : 5F 18 69 04 85 5D 90 01 C7 1B01 : E8 86 5E A9 03 85 45 A0 AC 1B09 : FF E6 45 C8 B1 5D F0 22 F4 1B11 : C4 BA F0 22 D1 BB F0 F3 59 1B19 : B1 BB C9 3F F0 ED C8 B1 07 1B21 : 5D D0 FB C4 BA F0 1E 90 4A 1B29 : 1C E6 5D D0 DA E6 5E 4C 21 1B31 : 08 1B C4 BA D0 0F A5 02 6F 1B39 : C9 04 D0 03 4C 04 1C 20 2E 1B41 : 4D 1B 20 D7 AA 20 28 19 9D 1B49 : 4C EB 1A 00 A0 02 B1 5F B1 1B51 : AA C8 B1 5F 85 62 86 63 04 1B59 : A2 90 38 20 49 BC 20 DF 10 1B61 : BD 20 87 B4 20 A6 B6 8D D4 1B69 : 4C 1B 20 24 AB AE 4C 1B 67 1B71 : E0 05 B0 08 A9 20 20 D2 C3 1B79 : FF E8 D0 F4 A9 2D 20 D2 E9 1B81 : FF A0 04 B1 5F C9 3B F0 1B 1B89 : 57 C9 2E F0 53 B1 5F F0 91 1B91 : 5B C9 20 F0 08 20 D2 FF C4 1B99 : E8 C8 4C 8E 1B 20 D2 FF C8 1BA1 : C8 E8 EC F4 0E B0 08 A9 91 1BA9 : 20 20 D2 FF 4C A2 1B A9 27 1BB1 : 03 85 22 B1 5F F0 35 20 C8 1BB9 : D2 FF C8 E8 C6 22 D0 F3 83 1BC1 : 20 3F AB E8 B1 5F F0 24 AB 1BC9 : C9 3B F0 07 20 D2 FF E8 B7 1BD1 : C8 D0 F1 EC F5 0E B0 08 BE 1BD9 : A9 20 20 D2 FF E8 D0 F3 67 1BE1 : B1 5F F0 08 20 D2 FF E8 E9 1BE9 : C8 4C E1 1B 60 20 9B B7 98 1BF1 : 20 ED 19 20 83 1C 20 FD E8 1BF9 : AE 20 95 1C A9 04 85 02 75 1C01 : 4C E5 1A A5 14 48 A5 15 BF 1C09 : 48 A2 05 A0 02 B1 5F 85 2E 1C11 : 14 C8 B1 5F 85 15 C8 C4 8F 1C19 : 45 F0 09 B1 5F 9D FB 01 24 1C21 : E8 4C 17 1C A0 00 C4 B7 05 1C29 : F0 0A B1 B8 9D FB 01 E8 31 1C31 : C8 4C 27 1C A4 BA B1 5D 0E 1C39 : 9D FB 01 F0 05 E8 C8 4C 86 1C41 : 37 1C 8A A8 4C A2 A4 20 EB 1C49 : 13 A6 20 4D 1B 20 D7 AA C9 1C51 : 68 85 15 68 85 14 A6 FE 60 1C59 : BD 7F 03 85 14 BD 9D 03 F3 1C61 : 85 15 A5 45 18 65 B7 A8 60 1C69 : B1 5F F0 13 A6 60 98 18 68 1C71 : 65 5F 85 5D 90 01 E8 86 55 1C79 : 5E 88 84 45 4C 08 1B 4C EF 1C81 : 46 1B A9 03 85 B9 85 BC D5 1C89 : A9 B0 85 B8 A9 D8 85 BB F2 1C91 : 60 4C 48 B2 20 9E AD 20 6E 1C99 : 82 B7 C9 26 B0 F3 85 B7 5E 1CA1 : A0 00 B1 22 91 B8 C8 C4 7D 1CA9 : B7 D0 F7 60 20 9E AD 20 C0 1CB1 : 82 B7 F0 DD C9 26 B0 D9 4B 1CB9 : 85 BA A0 00 B1 22 91 BB AD 1CC1 : C8 C4 BA D0 F7 60 A9 08 ED 1CC9 : 85 BA 20 B4 FF A9 6F 85 60 1CD1 : B9 20 96 FF 20 A5 FF 20 AF 1CD9 : D2 FF C9 0D D0 F6 20 AB 5B 1CE1 : FF 4C 74 A4 A9 24 8D 00 AA 1CE9 : 01 20 D7 AA A9 01 A8 A2 D0 1CF1 : 00 20 BD FF A2 08 A0 60 1E 1CF9 : 20 BA FF 20 D5 F3 A5 BA 83 1D01 : 20 B4 FF A5 B9 20 96 FF 27 1D09 : A9 00 85 90 A0 03 84 FB 52 1D11 : 20 A5 FF 85 FE A4 90 D0 AD 1D19 : 30 20 A5 FF A4 90 D0 29 27 1D21 : A4 FB 88 D0 E9 A6 FE 20 0F 1D29 : CD BD A9 20 20 D2 FF 20 1C 1D31 : A5 FF A6 90 D0 13 AA F0 C4 1D39 : 06 20 D2 FF 4C 30 1D A9 12 1D41 : 0D 20 D2 FF A0 02 4C 0F 7C 1D49 : 1D 20 42 F6 20 E6 17 4C 14 1D51 : C7 1C A9 08 A0 01 85 BA 2F 1D59 : 20 B1 FF A9 6F 85 B9 20 D1 1D61 : 93 FF B1 7A F0 07 20 A8 C9 1D69 : FF C8 4C 63 1D 20 AE FF D9 1D71 : 4C 74 A4 A5 30 C5 2E D0 61 1D79 : 06 A5 2F C5 2D F0 0D 20 A5 1D81 : 73 00 C9 21 D0 03 20 7A 25 1D89 : 1E 20 90 1D 4C 74 A4 A2 BF 1D91 : BF A9 F9 85 45 86 46 E4 BF 1D99 : 30 90 7D D0 04 C5 2F 90 D7 1DA1 : 77 20 2C A8 A9 36 85 01 AD 1DA9 : A0 00 B1 45 C8 11 45 D0 2A 1DB1 : 56 A0 06 B1 45 85 62 88 2A 1DB9 : B1 45 85 63 88 B1 45 85 11 1DC1 : 23 88 B1 45 85 22 88 B1 2C 1DC9 : 45 85 47 A9 37 85 01 20 BC 1DD1 : D7 AA 20 57 17 A0 00 A2 AC 1DD9 : 00 B1 22 20 D2 FF C8 E8 61 1DE1 : C4 47 D0 F5 E8 20 3F AB 1F 1DE9 : EC F7 0E 90 F7 20 3F AB 3B 1DF1 : A9 3D 20 D2 FF 20 3F AB F1 1DF9 : A9 24 20 D2 FF A5 62 20 0E 1E01 : 37 16 A5 63 20 37 16 A5 78 1E09 : 45 A6 46 38 E9 07 B0 01 D6 1E11 : CA A0 37 84 01 4C 94 1D 89 1E19 : 60 4D 56 4C 53 41 44 4E 2C 1E21 : 45 47 54 50 46 58 52 49 2C 1E29 : 4B 40 21 4F 42 55 43 1A D7 1E31 : 1A 1A 1A 18 19 1A 19 1A DD 1E39 : 1F 19 1A FC 1B 1C 1C 1D 48 1E41 : 1D 1F 1F 1F 1F 79 C2 C5 EE 1E49 : D2 C1 37 14 A6 AB 92 C0 E0 1E51 : DB E1 ED E4 C6 52 73 2E 5E 1E59 : 49 81 B9 20 73 00 B0 03 D5 1E61 : 4C 09 1A A2 17 DD 19 1E 0E 1E69 : F0 06 CA D0 F8 4C 08 AF 9A 1E71 : BD 2F 1E 48 BD 45 1E 48 66 1E79 : 60 A9 36 85 01 A5 30 48 7B 1E81 : A5 2F 48 20 E6 17 4C A4 76 1E89 : 1E A5 02 F0 0B A5 19 A6 A8 1E91 : 1A 85 2F 86 30 4C 84 1E BE 1E99 : A9 37 85 01 68 85 2F 68 A0 1EA1 : 85 30 60 A9 F9 A2 BF 85 4A 1EA9 : 19 86 1A 38 E9 07 85 1B B6 1EB1 : B0 01 CA 86 1C E4 30 D0 B1 1EB9 : 06 90 CE C5 2F 90 CA A0 57 1EC1 : 02 B1 19 85 21 B1 1B 85 AA 1EC9 : 22 C8 B1 19 85 1D B1 1B 1D 1ED1 : 85 1F C8 B1 19 85 1E B1 E8 1ED9 : 1B 85 20 A0 00 B1 1D D1 79 1EE1 : 1F F0 04 B0 1A 90 11 C8 8B 1EE9 : C4 21 F0 04 C4 22 D0 ED 77 1EF1 : A5 21 C5 22 F0 02 B0 07 CC 1EF9 : A5 1B A6 1C 4C A8 1E A0 1D 1F01 : 06 B1 19 48 88 10 FA A0 65 1F09 : 06 B1 1B 91 19 88 10 F9 EB 1F11 : C8 68 91 1B C0 06 90 F8 46 1F19 : 84 02 4C F9 1E 20 73 00 A1 1F21 : 20 A0 AA 4C 74 A4 20 3F 31 1F29 : AB E4 D3 B0 F9 60 A9 FF 9A 1F31 : A0 01 91 2B 20 33 A5 A5 99 1F39 : 22 A6 23 18 69 01 90 01 5D 1F41 : E8 85 2D 86 2E 4C 74 A4 68 1F49 : 08 A9 1F A2 D8 20 CD BD 83 1F51 : 20 3F AB A5 2C A6 2B 20 95 1F59 : CD BD 20 3F AB A5 2E A6 E3 1F61 : 2D 20 CD BD 20 3F AB A9 C7 1F69 : 00 38 E5 2D 85 63 A9 A0 00 1F71 : E5 2E 85 62 20 D1 BD A9 F6 1F79 : 66 A0 E4 20 1E AB 4C 74 C6 1F81 : A4 20 2A 14 A5 14 85 2B AA 1F89 : A5 15 85 2C 20 44 A6 4C F7 1F91 : 74 A4 20 9B B7 C9 2C D0 EF 1F99 : 16 E0 04 B0 12 86 21 20 51 1FA1 : 9B B7 A4 21 C0 02 F0 0A 59 1FA9 : 8A 99 F4 0E 4C 74 A4 4C 92 1FB1 : 48 B2 8A 8D F6 0E 4C 74 A1 1FB9 : A4 A9 00 85 21 20 73 00 C3 1FC1 : C9 52 F0 06 C9 48 D0 E7 A2 1FC9 : E6 21 20 9B B7 8A A4 21 60 1FD1 : 99 20 D0 4C 74 A4 69