Hypra-Ass

Aus C64-Wiki
Wechseln zu: Navigation, Suche
Hypra-Ass
Hypra-Ass
Entwickler Gerd Möllmann
Verleger Markt & Technik Verlag
Release 1985
Plattform(en) C64, C128
Genre Assembler
Steuerung Icon tastatur.png
Medien Icon disk525 1.png
Sprache(n) Sprache:deutsch
Information Listing des Monats in der 64'er 07/1985

Hypra-Ass ist ein Drei-Pass-Makro-Assembler für den Commodore 64 und die Floppy 1541. Er wurde in Maschinensprache von Gerd Möllmann geschrieben und im 64'er Magazin 07/1985 als Listing des Monats veröffentlicht.

Inhaltsverzeichnis

[Bearbeiten] Bedeutung

Hypra-Ass ist ein in die Jahre gekommener Assembler, der heutzutage wohl kaum noch benutzt wird. Wenn er hier dennoch vorgestellt wird, so hat dies vor allem geschichtliche Gründe:

  • Zu seiner Zeit gab es keine preisgünstige Alternative mit vergleichbarem Funktionsumfang, weshalb das Programm damals eine recht große Verbreitung fand. Selbst ein so umfangreiches Projekt wie GoDot wurde ursprünglich mit Hypra-Ass erstellt.
  • Im 64'er Magazin wurden Quellcodes von Maschinenprogrammen oft im Format des Hypra-Ass abgedruckt.

[Bearbeiten] Beschreibung

[Bearbeiten] Laden und Starten

LOAD "HYPRA-ASS",8
RUN

lädt und startet den Assembler. Er meldet sich mit BREAK IN 0. Alle Funktionen sind nun einsatzbereit.

[Bearbeiten] Der Quelltext

Das Eingeben, Ändern, Laden und Speichern von Quellprogrammen wird mit einer Erweiterung des BASIC-Editors erledigt.

[Bearbeiten] Editor-Befehle

/a 100,10 Automatische Zeilennummerierung (Startzeile, Schrittweite)
/o OLD: Holt Quelltext zurück, der mit NEW gelöscht wurde.
/d; /d 100 ; /d -100 ; /d 100- ; /d 100-200 Löschen von Zeilen(bereichen).
/e ; /e 100 ; /e -100 ; /e 100- ; /e 100-200 Formatiertes Listen von Zeilen(bereichen).
/t 0,13 ; /t 1,24 ; /t 2,0 ; /t 3,10 Setzt Tabulatoren:

T0 = Tabulator für Assemblerbefehle
T1 = Tabulator für den Kommentar bei der formatierten Ausgabe
T2 = Tabulator für die Anzahl der Leerzeichen, die am Anfang einer Ausgabezeile ausgegeben werden
T3 = Tabulator für die Symboltabelle

/x Verlassen des Assemblers mit Reset.
/p 1,100,200 Setzen eines (maximal 30) Arbeitsbereiches (Page), hier Bereich 1 von Zeile 100 bis 200 einschließlich.
/ziffer(n); /1; /10 Formatiertes Listen der Page.
/n 1,100,10 Neues Durchnummerieren einer Page mit Startnummer und Schrittweite.
/f 1,"string" Suchen einer Zeichenkette in einer Page (hier 1); "?" im String ist als Joker erlaubt.
/r 1,"string1","string2" Replace: In der Page (hier 1) wird die Zeichenkette aus String 2 durch die aus String 1 ersetzt.

String 2 darf nicht leer sein. Das Fragezeichen als Joker ist erlaubt.

/u 9000 Setzen des Quelltextstarts; Standardwert ist 8152 ($1FD8).
/b Anzeige der aktuellen Speicher-Konfiguration. Vier Werte werden angezeigt:

a) der normale Quelltextstart 8152 als Merkhilfe
b) der aktuelle Quelltextstart
c) das Quelltextende
d) die Anzahl der noch verbleibenden Bytes für den Quelltext

/l"name" ; /s"name" ; /v"name" ; /m"name" Kurzform der Befehle LOAD, SAVE, VERIFY und MERGE.
/g 9 Stellt die Gerätenummer des Diskettenlaufwerks auf 9. Voreingestellt ist das Gerät 8.
/i Lesen des Inhaltsverzeichnisses
/k Lesen des Fehlerkanals
/@ Übermitteln von Floppybefehlen
/ch 0 Setzen der Hintergrundfarbe.
/cr 0 Setzen der Rahmenfarbe.
/! bzw. /!! Ausgabe der Symboltabelle (nach erfolgter Assemblierung) in unsortierter bzw. sortierter Form.

Lokale Label (innerhalb von Makros) werden nicht mit ausgegeben.
Beide Dumps können mit der CTRL-Taste verlangsamt und mit der RUN/STOP-Taste angehalten werden.
Mit einer Abfolge aus einem OPEN- und CMD-Befehl kann der Dump an andere Geräte gesendet werden.

Ergänzung zum BASIC-Befehl PRINT, der aufgrund der Token-Bildung nicht alle Labelnamen verarbeiten kann.

Der Quelltext wird automatisch in BASIC-Programmzeilen abgelegt. Soweit wie möglich werden unnötige Leerzeichen dabei weggelassen.
Für die einzelnen Quelltextzeilen gelten folgende Regeln:

  • Bei der Eingabe einer Zeile wird hinter der Zeilennummer ein Minuszeichen eingegeben.
  • Jede Zeile enthält höchstens einen Assembler-Befehl.
  • Vor einem Assembler-Befehl darf in derselben Zeile höchstens ein Label stehen.
  • Label beginnen direkt hinter dem Minuszeichen.
  • Vor jedem Assembler-Befehl steht mindestens ein Leerzeichen.
  • Label und Assembler-Befehl werden mindestens durch ein Leerzeichen 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 usw.) können direkt hinter dem Minuszeichen beginnen.

[Bearbeiten] Pseudo-Op-Codes

.BA adresse Definiert die Startadresse des Maschinenprogramms
.EQ label = wert Weist einem Label einen Wert zu
.GL label = wert Weist einem Label einen globalen Wert zu
.BY 1,2,“a“ Einfügen von Byte-Werten in den Quelltext
.WO 1234,label Einfügen von Adressen in den Quelltext
.TX „text“ Einfügen von Textblöcken in den Quelltext
.AP „file“ Append: Verketten von Quelltexten
.CO var1, var2 Übergabe von Labeln (hinter .CO) und Quelltext (vor .CO)
.OB „file,p,w“ Senden des Objektcodes zur Floppy
.EN Schließen der Objektdatei
.ON ausdruck,zeilennummer Bedingter Sprung, wenn Ausdruck wahr
.GO zeile Unbedingter Sprung
.IF ausdruck Bedingte Assemblierung wie nach IF
.EL wie ELSE hinter .IF
.EI wie ENDIF hinter .IF
.MA makro(par1,par2) Makrodefinition: Makroname(Parameterliste)
.RT Ende der Makrodefinition
...makro (par1,par2) Makroaufruf
.LI lfn,dn,ba Senden eines formatierten Listings (Syntax wie bei OPEN)
.SY lfn,dn,ba Senden der formatierten Symboltabelle
.DP t0,t1,t2,t3 Setzt die Tabulatoren aus dem Quelltext heraus

Beispiel

a) Formatierte Quelltextausgebe mit /e:

100  -.BA $C000
110  -;   REINE KOMMENTARZEILE
120  -	          LDA $14       ; KOMMENTAR HINTER EINEM BEFEHL
130  -MARKE 	  LDX $15       ; MIT LABEL DAVOR

b) Ausgabe mit LIST:

100 .BA $C000
110 ;REINE KOMMENTARZEILE
120  LDA$14; KOMMENTAR HINTER EINEM BEFEHL
130 MARKE LDX$15; MIT LABEL DAVOR

[Bearbeiten] Variablen und Label

Der Wert einer Hypra-Ass-Variablen liegt immer zwischen 0 und $FFFF. Variablennamen dürfen beliebig lang sein, wobei das erste Zeichen des Variablennamens ein Buchstabe sein muss. Weitere Zeichen können Buchstaben, Ziffern oder das Hochkomma (') sein.

[Bearbeiten] Bedingte Assemblierung

Mit den Pseudo-Op-Codes .IF, .EL und .EI bietet Hypra-Ass ein IF/THEN/ELSE-Konstrukt. Außerdem stehen ein bedingter (.ON) und ein unbedingter (.GO) Sprungbefehl zur Verfügung.

Beispiel:

100 -.if switch !=! 6
110 - lda #0
120 -.el
130 - lda #2
140 -.ei

Vor den Pseudos .if, .el und .ei dürfen keine Label in derselben Zeile stehen.

Die logischen Operatoren und Vergleiche werden wie folgt abgekürzt:

!n! = nicht (not)
!a! = und (and)
!o! = oder (or)
!=! = gleich
!<! = kleiner als
!>! = größer als

[Bearbeiten] Makros

Beispiel für ein einfaches Makro:

100 -.ma ldax (adresse)
110 - lda adresse
120 - ldx adresse+1
130 -.rt

Das Makro wird dann mit

...ldax (adresse) 

aufgerufen.

Vor der .ma- und .rt-Anweisung dürfen in derselben Zeile kein Label stehen.
Die Makrodefinition selbst wird in Pass 1 und Pass 2 überlesen.

Hier existiert ein Bug in Hypra-Ass:
Wird ein Makro, dass ein Label enthält, mehrfach aufgerufen, so kommt es zu einer Fehlermeldung label declared twice.

[Bearbeiten] Speicherbelegung

$033E-$03FF Zwischenspeicher für Arbeitsbereiche (Page) im Kassettenpuffer
$0400-$7FF Bildschirmspeicher
$0801-$1FD7 Hypra-Ass-Programmcode
$1FD8-$A000 Quellcode
$A000-$C000 Symboltabelle im RAM von $C000 abwärts
$C000-$CFFF frei z.B. für Maschinensprachemonitor oder Editor

[Bearbeiten] Hypra-Ass Versionen

  • Die ursprüngliche Version aus der 64'er 1985/07 hatte noch einige Fehler. In den folgenden Heften (ab SH1985/08) wurde eine korrigierte Version angeboten.
  • Eine Erweiterung für Datasette von Edgar Bäumler gab es in der 64'er 1986/06.
  • Im 64'er Magazin 1987/05 ist der Patch hypra-patch enthalten, der die Assemblierung in den Speicher unterdrückt, d.h. es kann nur auf Diskette assembliert werden. Dies verringert Speicherplatzprobleme, die speziell unter GEOS auftreten.
  • Die 64'er 1987/10 enthielt eine Erweiterung und Verbesserung von Hypra-Ass, programmiert von Michael Haverkamp mit den folgenden besseren oder neuen Befehlen:
    • /a : Änderungen sind jetzt auch in bestehenden Zeilen möglich
    • /e und /i : Ausgabe wird mit SHIFT  gesteuert und mit RUN/STOP  beendet.
    • /u funktioniert jetzt richtig
    • /s x-y:"name" : speichert die Zeilen x bis y inkl. ab.
    • /zx : Setzt den Quelltextstart an den Anfang der Zeile x
    • /w x-y,z : verschiebt die Zeilen x bis y (inkl.) hinter die Zeile z
    • Binärzahlen sind durch vorangestelltes % implementiert.
    • Die Erweiterung verringert den Quelltextspeicher um 6562 Bytes.
  • In der 64'er 1988/01 wurde ein von Michael Küper programmierter Editor vorgestellt, der an den Hypra-Ass angehängt wird. Quelltexte können hier ohne Zeilennummern eingegeben werden. Scrollen und seitenweises Blättern des Textes ist möglich genauso wie blockweises Verschieben, Speichern und Laden.
Es gibt zwei verschiedene Speichervarianten:
  • EDI 1 belegt den Speicher von $1FD8 bis $2F7B. Damit sind nur noch 28802 Bytes für den Quelltext frei, aber der Bereich ab $C000 bleibt unbelegt.
  • EDI 2 liegt im Bereich ab $C000, so dass der Quellcodebereich nicht eingeschränkt wird.

[Bearbeiten] Sonstiges

[Bearbeiten] Weblinks

Artikel des Monats.gif Dieser Artikel wurde Artikel des Monats.