AmiDevIDE

Dieses Handbuch gehört zu AmiDevIDE 0.5. Der schnelle Einstieg steht in der Schritt-für-Schritt-Anleitung.

Handbuch – Entwicklungsumgebung für AmigaOS und den PC · Version 0.5

Hinweis: Experimentelle Software, entwickelt mit Hilfe von Claude (KI-Assistent von Anthropic) und in erster Linie für den Eigengebrauch des Autors geschrieben.

Bedienung von AmigaIDE

Überblick

AmigaIDE ist eine Entwicklungsumgebung für AmigaOS 3.x mit MUI- Oberfläche. Sie verwaltet Projekte aus C-, Assembler- und ACE-BASIC- Quellen, erzeugt daraus ein Makefile und baut es mit GNU make, vbcc, vasm und vlink.

Dieselbe Projektdatei (.aproj) lässt sich auch mit der Qt-Version von AmigaIDE auf einem PC oder Mac bauen. Beide Versionen teilen sich den gesamten Programmkern; nur die Oberfläche ist verschieden.

Was die Amiga-Version kann:

Voraussetzungen

System

CPU        68020 oder besser (der Standard-Build nutzt -cpu=68020)
FPU        nicht nötig
OS         AmigaOS 3.x, intuition.library ab V37
Stack      AmigaIDE setzt sich selbst 64 KB

Libraries in LIBS:

muimaster.library    ab V19 (MUI 3.8)
reqtools.library     ab V38
regex.library        ab V5 (POSIX, Alfonso Ranieri)

Fehlt eine davon, startet AmigaIDE nicht. regex.library wird für Symbolindex, Suche und Hilfe gebraucht, reqtools.library für alle Datei- und Texteingaben.

Beim Start prüft AmigaIDE alle Libraries und MUI-Klassen und nennt in einem Fenster jede, die fehlt oder zu alt ist, mit dem Aminet-Paket, das sie liefert.

Achtung, Verwechslungsgefahr: Auf Aminet gibt es zwei verschiedene Bibliotheken namens regex.library. Die richtige ist util/libs/regex_ranieri.lha (Version 5.1, 32 KB). Das Paket util/libs/Regex.lha enthält eine ganz andere (GNU, Version 1.0 von 1989, 9 KB) mit anderen Funktionen. Mit ihr endete das erste Indizieren einer C-Datei früher im Guru 8100000F; heute meldet AmigaIDE beim Start "fremde regex.library". Prüfen mit Version LIBS:regex.library Die alte Bibliothek vor dem Ersetzen sichern, falls ein anderes Programm (etwa tinygrep aus demselben Paket) sie braucht.

MUI-Klassen in MUI:Libs/mui/

NList.mcc, NListview.mcc, NListtree.mcc, TextEditor.mcc

Werkzeuge

GNU make     z.B. gnu_make_amiga von Darren Coles, im Pfad
vbcc         vc, vbccm68k, vasmm68k_mot, vlink unter vbcc:bin/
vbcc-Target  m68k-amigaos unter vbcc:targets/
NDK 3.2      unter SDK:NDK_3.2/
ACE BASIC    nur für BASIC-Projekte, siehe ACE BASIC

Alles davon gibt es auf Aminet:

util/libs/mui38usr.lha            MUI 3.8
util/libs/ReqToolsUsr.lha         reqtools.library
util/libs/regex_ranieri.lha       regex.library (POSIX, A. Ranieri)
dev/mui/MCC_NList-0.128.lha       NList, NListview, NListtree
dev/mui/MCC_TextEditor-15.56.lha  TextEditor
dev/c/vbcc_bin_amigaos68k.lha     vbcc, vasm, vlink
dev/misc/NDK3.2.lha               NDK 3.2
dev/c/make-4.4.1.lha              GNU make
dev/basic/ace-basic.lha           ACE BASIC

Das vbcc-Target m68k-amigaos gibt es unter http://sun.hasenbraten.de/vbcc/.

Einrichtung

Assigns

AmigaIDE sucht den Compiler unter vbcc: und die SDKs unter SDK:. Ein Beispiel für S:User-Startup (Pfade anpassen):

Assign vbcc: Work:vbcc
Path vbcc:bin ADD
Assign SDK: Work:SDK
Stack 65536

Die Pfade hinter vbcc: und SDK: sollten keine Leerzeichen enthalten.

Erwartete Struktur unter SDK: (nur was man braucht):

SDK:NDK_3.2/Include_H   SDK:NDK_3.2/Include_I   SDK:NDK_3.2/lib
SDK:MUI_3.8/Developer/C/Include
SDK:MCC/Developer/C/include
SDK:regex/include
SDK:reqtools/include

Ob ein SDK vollständig ist, zeigt Projekt > SDKs prüfen...: Für jedes SDK steht in der Ausgabe "vollständig", "nicht gefunden" oder welche Teile fehlen. Liegt daneben ein Verzeichnis, dessen Name sich nur in Groß-/Kleinschreibung, "_", "-", "." oder Leerzeichen unterscheidet (etwa SDK:NDK3.2 statt SDK:NDK_3.2), wird es mit "umbenennen?" genannt.

Andere Pfade

Liegen Compiler oder SDKs woanders oder heißt make anders, lässt sich das unter Einstellungen ändern.

Erster Start

AmigaIDE per Doppelklick oder aus der Shell starten. Die Titelzeile zeigt Datum und Uhrzeit des Builds. So sieht man sofort, welche Version läuft.

Beim ersten F1 oder F2 legt AmigaIDE neben dem Programm ein Verzeichnis cache/ an. Darin liegt der Autodoc-Index, damit er nur beim ersten Mal gebaut werden muss.

Das Hauptfenster

+-----------+-----------------------------------------+
| Projekt / |                                         |
| Symbole   |               Editor                    |
|           |                                         |
+-----------+-----------------------------------------+
| Ausgabe / Issues / Suche / Memory Map               |
+-----------------------------------------------------+
| Statuszeile                     Zeile n, Spalte n   |
+-----------------------------------------------------+
AmigaIDE auf dem Amiga (MUI).
AmigaAmigaIDE auf dem Amiga (MUI).
Die kommende Fassung für den Mac nach einem erfolgreichen Build.
MacDie kommende Fassung für den Mac nach einem erfolgreichen Build.

Die Trennbalken zwischen den Bereichen lassen sich mit der Maus verschieben. MUI merkt sich die Aufteilung.

Es gibt keine Werkzeugleiste. Alle Befehle stehen im Menü (rechte Maustaste), viele auch als Tastenkürzel.

Links: Projekt

Der Projektbaum ordnet die Dateien in Gruppen: C-Quellen, ASM-Quellen, C-Header, ASM-Include. In BASIC-Projekten heißen C-Quellen und C-Header stattdessen BASIC-Quellen und BASIC-Header, in reinen Assembler-Projekten Quellen und Header. Unterverzeichnisse erscheinen als eigene Knoten.

fett      die Datei, die gerade im Editor offen ist
kursiv    ungespeicherte Änderungen

Ein Doppelklick öffnet die Datei im Editor.

Links: Symbole

Alle Funktionen, Variablen, Defines, Typen, Structs, Labels usw. des Projekts, mit Art und Namen (z.B. "Fn main"). Ein Doppelklick springt zur Fundstelle.

Unten

Ausgabe      Was make, vc, vasm und vlink ausgeben
Issues       Fehler und Warnungen, siehe Bauen
Suche        Treffer von Referenzen und Projektsuche
Memory Map   Hunks des zuletzt gebauten Programms mit Größe

Beim Start ist "Ausgabe" aktiv.

Titelzeile

Ein "*" am Ende heißt: Es gibt ungespeicherte Änderungen.

Projekte

Ein Projekt ist eine Datei mit der Endung .aproj. Sie hält die Liste der Quellen und Header sowie alle Einstellungen. Dateipfade darin sind relativ zum Verzeichnis der .aproj.

Projekt > Neu... (Amiga-N)

1. Verzeichnis für das Projekt wählen.
2. Es öffnen sich die Projekteinstellungen.
   Name und Binary müssen ausgefüllt sein.
3. OK legt <Name>.aproj im gewählten Verzeichnis an und speichert
   sie sofort. Abbrechen legt gar nichts an.

Ungespeicherte Änderungen an der offenen Datei gehen dabei ohne Nachfrage verloren; vorher "Speichern" wählen.

Ein neues Projekt ist leer. Dateien kommen über "Neue Datei" oder "Bestehende Datei hinzufügen" hinein. vc.lib ist als Bibliothek schon eingetragen, weil praktisch jedes vbcc-Programm sie braucht.

Projekt > Öffnen... (Amiga-O)

Lädt eine .aproj. Wie bei "Neu" gehen ungespeicherte Änderungen ohne Nachfrage verloren.

Benutzt das Projekt SDKs, die hier nicht installiert sind, nennt AmigaIDE sie in einem Hinweis. Ebenso, wenn ein SDK nur in einer neueren Hauptversion da ist oder Teile davon fehlen (Einzelheiten: Projekt > SDKs prüfen...). Siehe Eigene SDKs.

Projekt > Speichern (Amiga-S)

Speichert die offene Datei und das Projekt in einem Schritt. Nur beim allerersten Speichern fragt AmigaIDE nach dem Ort; fehlt ".aproj" im Namen, wird es angehängt.

Projekt > Neue Datei

Untermenü mit C-Quelle, C-Header, ASM-Quelle, ASM-Include und BASIC-Quelle. AmigaIDE fragt nach einem Namen relativ zum Projekt, z.B. "src/grafik". Ohne Endung wird die passende angehängt:

C-Quelle .c    C-Header .h    ASM-Quelle .s (oder .asm)
ASM-Include .i    BASIC-Quelle .b (oder .bas)

Passt eine eingegebene Endung nicht zum Typ, fragt AmigaIDE nach. Existiert die Datei schon, ebenfalls. Die neue Datei wird sofort im Editor geöffnet. Das Projekt muss vorher gespeichert sein.

Projekt > Bestehende Datei hinzufügen... (Amiga-E)

Wählt eine vorhandene Datei aus. .h und .i werden als Header eingetragen, alles andere als Quelle.

Projekt > Datei aus Projekt entfernen...

Wirkt auf die im Projektbaum markierte Datei. Zur Wahl stehen:

Nur entfernen            Datei bleibt auf der Platte
Entfernen und löschen    Datei wird auch gelöscht
Abbrechen

Hinzufügen und Entfernen ändern das Projekt nur im Speicher. Erst "Speichern" schreibt die .aproj.

Projekt > Beenden (Amiga-Q)

Fragt nach, wenn es ungespeicherte Änderungen gibt. Ein laufender Build arbeitet im Hintergrund zu Ende.

Projekteinstellungen

Projekteinstellungen (Projekt > Projekteinstellungen..., Amiga-I)

Projekteinstellungen in der kommenden Fassung für den Mac.
MacProjekteinstellungen in der kommenden Fassung für den Mac.

Die Einstellungen gelten nur für das offene Projekt und werden in der .aproj gespeichert. OK übernimmt sie, gespeichert wird aber erst mit "Speichern". Ausnahme: Beim Anlegen eines neuen Projekts speichert OK die .aproj sofort.

General

Sprache          C, ACE BASIC oder Assembler
Ausgabe          Programm, Link-Library oder Shared Library
Name             Projektname; beim Anlegen auch Name der .aproj
                 (späteres Umbenennen benennt die Datei nicht um)
Binary           Name der erzeugten Datei
Zielverzeichnis  wohin das Ergebnis kommt
Obj-Verzeichnis  wohin die Objektdateien kommen
Typ              CLI oder Workbench
Stack-Größe      Stack des Programms in Bytes
Icon             Generieren oder aus einer Datei kopieren
Icon-Datei       .info-Datei, wenn Icon = Datei

Nur Workbench-Programme bekommen nach dem Build ein Icon.

Compiler

CPU, FPU, Optimierung (0-3), Small Data, Debug-Symbole
Include-Pfade, Defines und Extra-Flags, jeweils einer pro Zeile

Assembler

kick1hunks, Keine Symbole (-nosym), Extra-Flags

Linker

Startup          Standard (startup.o), MinStart, MinRes oder Custom
Custom-Startup   eigene Startup-Objektdatei
Strip            Symbole aus dem Ergebnis entfernen
Bibliotheken     in Linkreihenfolge; Hinzufügen, Entfernen, Hoch,
                 Runter
Extra Lib-Verzeichnisse und Extra Linker-Flags

SDKs

Häkchen für jedes SDK, das das Projekt benutzt. In dieser Reihenfolge werden Include- und Library-Pfade durchsucht:

NDK 3.2, MUI 3.8, MUI-Zusatzklassen (MCC), regex.library,
reqtools.library, Roadshow, AmiSSL v5, SQLite3, PosixLib

Danach folgen die eigenen SDKs, die AmigaIDE unter SDK: gefunden hat, mit Name und Version.

Verlangt das Projekt eine ältere Version, als installiert ist, steht das dahinter, etwa "Foo Lib 1.3 (Projekt: foo-lib-1.2)"; beim OK bleibt die Projektdatei bei 1.2.

Fehlen einem SDK Verzeichnisse, steht hinter seinem Namen "(unvollständig)" oder "(nicht gefunden)".

Benutzt das Projekt ein SDK, das hier nicht installiert ist, steht es am Ende mit dem Zusatz "(nicht installiert)" und ist angehakt. So geht es beim OK nicht verloren. Wer es nicht mehr braucht, nimmt das Häkchen weg.

Kein SDK ist Pflicht, auch das NDK nicht: Ein Programm, das direkt auf die Hardware zugreift, braucht keine System-Header.

Eigene SDKs

Neben den eingebauten SDKs kennt AmigaIDE jedes Verzeichnis unter SDK:, das eine Datei AmiDevSDK.json enthält. Sie beschreibt das SDK; alle Pfade darin sind relativ zu seinem Verzeichnis:

{
  "name": "Foo Lib",
  "version": "1.2",
  "kind": "other",
  "includeDirs": ["include"],
  "asmIncludeDirs": [],
  "libDirs": ["lib"],
  "autodocDirs": ["Autodocs"],
  "autodocFiles": [],
  "sfdDirs": ["SFD"],
  "suggestedLibs": ["foo"]
}

Pflicht sind "name" und "version". "kind" ist "ndk", "mui" oder "other" (Standard). "." steht für das SDK-Verzeichnis selbst. Die Autodocs erscheinen in der Hilfe, sobald das SDK im Projekt angehakt ist.

Name und Version sind die Identität

Ein Projekt merkt sich ein SDK als Name und Version, klein geschrieben und mit Bindestrichen verbunden: "Foo Lib" in Version "1.2" wird zu "foo-lib-1.2". Groß- und Kleinschreibung spielen keine Rolle. Das Verzeichnis darf heißen, wie es will.

Ist genau diese Version nicht installiert, nimmt AmigaIDE die neueste installierte Version desselben SDKs, die mindestens so neu ist: Ein Projekt für "foo-lib-1.2" baut auch mit Foo Lib 1.3, aber nicht mit 1.1. Die Projektdatei bleibt dabei unverändert, sie verlangt weiter 1.2. Pfade stehen nie in der Projektdatei, nur Name und Version.

Verglichen wird Abschnitt für Abschnitt als ganze Zahlen: 3.2.2 ist neuer als 3.2 und als 3.2.1, 3.10 ist neuer als 3.2.

Nur eine ältere Version blockiert. Ist die installierte Version eine andere Hauptversion (die erste Zahl), etwa 3.1 für ein Projekt, das 1.2 verlangt, baut das Projekt trotzdem; beim Öffnen weist AmigaIDE aber darauf hin, weil sich die Schnittstellen geändert haben können.

Die Qt-Version auf dem PC bildet den Namen genauso und wählt nach derselben Regel. Eingerichtet wird ein SDK in jeder IDE für sich: auf dem Amiga als Verzeichnis unter SDK: mit AmiDevSDK.json. Eine Projektdatei aus der Qt-Version funktioniert dann hier 1:1.

Gefunden werden die SDKs beim Start von AmigaIDE und nach OK unter Einstellungen.

Einstellungen

Einstellungen (Projekt > Einstellungen...)

Globale Einstellungen in der kommenden Fassung für den Mac.
MacGlobale Einstellungen in der kommenden Fassung für den Mac.

Diese Einstellungen gelten für alle Projekte.

Make-Programm    Standard "make"
SDK-Root         Standard "SDK:"
Toolchain-Root   Standard "vbcc:"
AmiVCS-Programm  Standard "amivcs" (leer = Standard)
AmiVCS-GUI       Standard "amivcs-gui" (leer = Standard)

Make-Programm, SDK-Root und Toolchain-Root dürfen nicht leer sein. Gespeichert wird in ENVARC:AmigaIDE/ (make, sdkroot, vbccroot, amivcs, amivcs-gui), die Werte gelten also auch nach einem Neustart.

Editor

Der Editor zeigt immer eine Datei. Die Statuszeile zeigt rechts Zeile und Spalte des Cursors.

Achtung: Beim Wechsel zu einer anderen Datei (Doppelklick, Sprung zur Definition, Fehler anspringen) fragt AmigaIDE nicht, ob Änderungen gespeichert werden sollen. Vorher "Speichern" wählen. "Build" speichert die offene Datei allerdings immer selbst.

Build > Formatieren (Einrückung)

Rückt die ganze Datei nach geschweiften Klammern neu ein, vier Leerzeichen pro Ebene. Das Ergebnis ist noch nicht gespeichert.

Bauen und Starten

Build > Build (Amiga-B)

Speichert die offene Datei, erzeugt im Projektverzeichnis

build/Makefile    build/vc.cfg

und startet make im Hintergrund. Die Oberfläche bleibt bedienbar; die Ausgabe erscheint laufend unter "Ausgabe", Fehler und Warnungen unter "Issues". Fehlt ein SDK, das das Projekt benutzt, steht das als Warnung am Anfang der Ausgabe; der Build läuft ohne dessen Pfade.

Nach einem erfolgreichen Build:

Dateinamen von Quellen dürfen keine Leerzeichen enthalten; AmigaIDE nennt betroffene Dateien vor dem Build. Leerzeichen im Projekt- verzeichnis sind dagegen kein Problem.

Temporäre Dateien landen in T: (aide-build.script, aide-build.out).

Build > Clean

Führt "make clean" aus und löscht das Obj-Verzeichnis und das gebaute Programm.

Build > Build abbrechen

Markiert den Build als abgebrochen. Der laufende Compiler wird dabei nicht beendet, er arbeitet im Hintergrund zu Ende; AmigaIDE ignoriert nur sein Ergebnis. Ein neuer Build ist erst danach möglich.

Build > Run (Amiga-R)

Startet das gebaute Programm. CLI-Programme bekommen ein eigenes Konsolenfenster, das nach Programmende offen bleibt, bis man es schließt. Endet das Programm mit einem Rückgabewert ungleich 0, meldet AmigaIDE ihn.

Solange das Programm läuft, reagiert AmigaIDE nicht. Bei CLI-Programmen gilt das, bis das Konsolenfenster geschlossen ist. Das ist kein Absturz: Fenster schließen, dann geht es weiter.

Build > Ausgabe speichern...

Schreibt den Inhalt von "Ausgabe" in eine Datei.

Issues

Jede Zeile nennt ERROR oder WARN, Datei, Zeile und Meldung.

Doppelklick     springt zur Stelle im Editor
F4              nächster Issue
Shift+F4        voriger Issue

Navigation

Gehe zu > Definition (F3)

Steht der Cursor in einer #include- bzw. include-Zeile, öffnet F3 die eingebundene Datei. Sonst springt F3 zur Definition des Wortes unter dem Cursor, soweit es im Symbolindex des Projekts steht.

Gehe zu > Referenzen (Shift+F3)

Sucht das Wort unter dem Cursor als ganzes Wort in allen Projekt- dateien. Die Treffer stehen unter "Suche"; ein Doppelklick springt hin.

Projekt > Im Projekt suchen... (Amiga-F)

Fragt nach einem Suchtext und durchsucht alle Projektdateien. Die Treffer stehen ebenfalls unter "Suche".

Gehe zu > Nächster/Voriger Issue (F4, Shift+F4)

Siehe Bauen und Starten.

Hilfe und Autodocs

Die Hilfe durchsucht die Autodocs aller SDKs, die in den Projekteinstellungen aktiv sind.

Der Index wird beim ersten F1 oder F2 aufgebaut. Das kann auf echter Hardware beim ersten Mal pro SDK eine Weile dauern; die Statuszeile zeigt den Fortschritt. Danach liegt er in cache/ neben dem Programm und ist sofort da.

Hilfe > Hothelp (F1)

Zeigt das Autodoc zum Wort unter dem Cursor. Groß- und Klein- schreibung werden notfalls ignoriert, und "...Tags" findet auch "...TagList" (SystemTags -> SystemTagList).

Hilfe > Struct-Layout (Shift+F1)

Zeigt für das Wort unter dem Cursor alle Felder des gleichnamigen Structs oder der Union aus dem Projekt, mit Offset und Typ.

Hilfe > Autodoc-Suche... (F2)

Fragt nach einem Suchmuster. * steht für beliebig viele Zeichen, ? für genau eines. Beispiel: "Alloc*".

Das Hilfefenster

Links     Liste der Treffer. Ein Doppelklick zeigt den Eintrag.
Rechts    Text des Autodocs.
Zurück, Vor         blättern durch die zuletzt gezeigten Einträge
Markierung suchen    sucht den im Text markierten Begriff

Zu "Markierung suchen": Einfach ein Wort im Hilfetext mit der Maus markieren und den Knopf drücken, z.B. einen Namen unter SEE ALSO. Klammern und Bibliotheksnamen werden dabei weggelassen, aus "dos.library/Open()" wird "Open". Enthält die Markierung * oder ?, wird daraus eine Mustersuche. Ist nichts markiert, blinkt der Bildschirm kurz.

Disassembler

Disassembler (Build > Disassemblieren..., Amiga-D)

Wählt eine Hunk-Datei (Programm oder Objektdatei) aus, standardmäßig im Zielverzeichnis des Projekts. Alle CODE-Hunks werden als

Adresse: Hex-Bytes  Befehl

in einem eigenen Fenster gezeigt. "Speichern..." schreibt die Liste in eine Datei.

Versionsverwaltung

AmigaIDE kann Projekte mit AmiVCS versionieren. AmiVCS ist ein eigenes Werkzeug wie vbcc oder ACE: die IDE ruft das Programm amivcs auf und zeigt das Ergebnis an. Ohne amivcs fehlt nur dieser Teil.

Versionsverwaltung mit AmiVCS in der kommenden Fassung für den Mac.
MacVersionsverwaltung mit AmiVCS in der kommenden Fassung für den Mac.

Einrichten

amivcs ab Version 0.10 installieren (Archiv AmiVCS). Liegt es nicht
in C:, den Pfad unter Projekt > Einstellungen > AmiVCS-Programm
eintragen. Name und E-Mail für die Commits, Remote-URL und
Benutzer verwaltet AmiVCS selbst (AmiVCSConfig, Menü Versionen >
Einstellungen...); die IDE speichert keine Passwörter.

Die Seite "Versionen" (links)

Branch       der aktuelle Branch
Aktualisieren  Status und Verlauf neu lesen
Anlegen      macht das Projektverzeichnis zum Repository
Geändert     neue, geänderte und gelöschte Dateien
Bereitstellen  die markierten Dateien für den Commit vormerken
Alle         alles vormerken
Bereit       was der nächste Commit enthält
Zurücknehmen  Vormerkung zurücknehmen (die Datei bleibt)
Commit       Nachricht eingeben, "alle" merkt vorher alles vor

Die Seite "Verlauf" (unten) zeigt die Commits aller Branches mit Zeit in UTC, Autor, Branch-Namen und der ersten Zeile der Nachricht.

Menü "Versionen"

Neuer Branch, Branch wechseln, Branch zusammenführen,
Gelöschte Dateien zurückholen, Pull, Push, Clone, Einstellungen.
Clone fragt die Adresse des Repositorys (https://server/name) und
das Zielverzeichnis. Ein erster Push ohne Remote fragt die Adresse
und legt das Repository auf dem Server an. Fehlen Benutzer oder
Passwort, fragt die IDE danach (das Passwort verdeckt) und auf
Wunsch merkt AmiVCS es sich im Repository. Einstellungen startet
AmiVCSConfig auf dem Projekt.
AmiVCS-GUI öffnen (Amiga-G) startet die eigenständige Oberfläche
amivcs-gui (im Stil von "git gui", mit Dateivorschau) auf dem
Projektverzeichnis, in einem eigenen Fenster. Liegt sie nicht in C:,
den Pfad unter Projekt > Einstellungen > AmiVCS-GUI eintragen.

Wechseln, Zusammenführen, Zurückholen und Pull ändern Dateien. Die IDE fragt vorher, speichert die geöffnete Datei und das Projekt und lädt beides danach neu. Während amivcs Dateien schreibt, sind Editor und Build gesperrt. AmiVCS lehnt Wechseln und Zusammenführen ab, solange es nicht committete Änderungen gibt; neue, noch nicht hinzugefügte Dateien stören nicht.

Beim Anlegen und beim Öffnen eines Repositorys bietet die IDE an, build/, das Zielverzeichnis und *.aproj.user in .amivcsignore einzutragen. In <projekt>.aproj.user merkt sich die IDE persönliche Dinge, die nicht ins Repository gehören.

Konflikte beim Zusammenführen stehen im Register "Ausgabe"; die Fassung des anderen Branches liegt als <datei>.theirs daneben. Erst die Konflikte lösen und die .theirs-Dateien löschen, dann committen.

Clone, Push und Pull brauchen TCP/IP, AmiSSL und einen AmiVCS-Server. Ein Push läuft im Hintergrund; das Ergebnis erscheint im Register "Ausgabe".

ACE BASIC

Für BASIC-Projekte in den Projekteinstellungen "Sprache: ACE BASIC" wählen. Auf dem Amiga wird ACE BASIC 3.0.1 so benutzt, wie es von Aminet kommt, ohne Patches.

Nötige Assigns:

Assign ACE: Work:ACE
Assign ACElib: ACE:lib
Assign ACEbmaps: ACE:bmaps
Assign ACEinclude: ACE:include
Path ACE:bin ADD

Besonderheiten gegenüber der Qt-Version auf dem PC:

Tastenkürzel

Menü (Amiga = rechte Amiga-Taste)

Amiga-N    Neues Projekt
Amiga-O    Projekt öffnen
Amiga-S    Speichern
Amiga-E    Bestehende Datei hinzufügen
Amiga-I    Projekteinstellungen
Amiga-F    Im Projekt suchen
Amiga-Q    Beenden
Amiga-B    Build
Amiga-R    Run
Amiga-D    Disassemblieren
Amiga-?    Über AmigaIDE

Funktionstasten im Hauptfenster

F1          Hothelp
Shift+F1    Struct-Layout
F2          Autodoc-Suche
F3          Definition bzw. Include öffnen
Shift+F3    Referenzen
F4          Nächster Issue
Shift+F4    Voriger Issue

Hilfefenster

Z           Zurück
V           Vor
S           Markierung suchen

Bekannte Grenzen

Versionsgeschichte

0.5 (08.11.2026) - Versionsverwaltung für AmiVCS 0.10: Clone und erster Push fragen die Adresse des Repositorys, Anmeldung bei Bedarf (Passwort verdeckt, auf Wunsch gemerkt), Menü Versionen > Einstellungen. - AmiVCS-GUI öffnen (Amiga-G) startet amivcs-gui auf dem Projekt. - Alle Fenster merken Position und Größe. - Prüfung der SDKs und beim Start aller Bibliotheken und MUI-Klassen; eine fremde regex.library wird abgelehnt statt abzustürzen.

0.4 (07.11.2026) - Hinweis auf den experimentellen Status ergänzt; keine Änderungen am Programm.

0.3 (07.11.2026) - Handbuch überarbeitet. - Der Installer meldet es, wenn er nicht aus seiner Schublade gestartet wird.

0.2 (02.11.2026) - Versionsverwaltung mit AmiVCS (ab 0.6, eigenes Programm): Register "Versionen" und "Verlauf", Menü "Versionen" mit Commit, Bereitstellen, Branches, Merge, Pull, Push und Clone. Siehe Versionsverwaltung. - Ein erster Push fragt nach dem Namen des Repositorys auf dem Server. - Zahlen in Projektdateien werden unabhängig von der Spracheinstellung gelesen und geschrieben. - Verzeichnisauswahl: das aktuelle Verzeichnis zu bestätigen funktioniert; Pfade direkt unter einem Laufwerk ("RAM Disk:x") werden richtig gebildet.

0.1 (01.11.2026) - Erste Version auf Aminet.

Lizenz

AmigaIDE steht unter der GNU General Public License, Version 3. Der Quelltext liegt auf GitHub: https://github.com/dangelrk/AmiDevIDE

Im Programm enthalten ist parson (JSON-Parser, MIT-Lizenz).

Nicht enthalten und getrennt zu beziehen sind unter anderem MUI, die MCC-Klassen, reqtools.library, regex.library, vbcc, vasm, vlink, das NDK und ACE BASIC. Es gelten jeweils deren eigene Lizenzen.

Installation

Dieser Teil beschreibt den Aufbau der kompletten Entwicklungsumgebung aus den Quellen. Die Quellen werden später auf GitHub veröffentlicht. Das Amiga-Programm gibt es schon auf Aminet.

Installation — AmiDevIDE

> Alles, was nicht aus dem Code dieses Repositorys oder einer geprüften > Download-Adresse abgeleitet werden konnte, ist mit (ungeprüft) markiert. > Stand der geprüften URLs: September 2026.

AmiDevIDE ist eine AmigaOS/m68k-Entwicklungsumgebung: vbcc (C), vasm, vlink, ACE BASIC, die zugehörigen SDKs, eine IDE (Qt 6 auf dem Host, MUI nativ auf dem Amiga) und ein FS-UAE-Runner.

Dieses Repository enthält keine Software Dritter. Compiler, Assembler, Linker, NDK, MUI, MCCs, ACE BASIC, Kickstart-ROMs und Workbench-Images werden entweder vom Bootstrap aus den offiziellen Quellen geladen oder müssen von dir selbst beschafft werden. Diese Anleitung sagt für jedes Teil: *was*, *woher*, *wohin* und *in welcher Form*.

HostStatus
macOSvollständig verifiziert, inkl. Bootstrap aus leerem Baum
Linuxbaut alles aus dem Quelltext, nicht end-to-end getestet
Windows (MSYS2)baut alles aus dem Quelltext, nicht end-to-end getestet
AmigaOS 3.x nativnur die Compile-Regeln sind (auf dem Host) geprüft; Link, makedir/delete und die Assigns brauchen einen echten Amiga

Auf Linux und Windows ist acd-doctor (siehe unten) das Werkzeug, um herauszufinden, ob etwas fehlt.

---

1. Überblick: was woher kommt

KomponenteVersion (Lock)QuelleWie es ins System kommtZiel
vasm2.0fhttp://sun.hasenbraten.de/vasm/release/vasm.tar.gzautomatisch, aus Quelltext gebauttoolchain/bin/vasmm68k_mot, vobjdump
vlink0.18ahttp://sun.hasenbraten.de/vlink/release/vlink.tar.gzautomatisch, aus Quelltext gebauttoolchain/bin/vlink
vbcc0.9hP2http://phoenix.owl.de/tags/vbcc0_9hP2.tar.gzautomatisch, aus Quelltext gebauttoolchain/bin/{vc,vbccm68k,vprof,dtgen}
vbcc-Target m68k-amigaos2022-05-22http://phoenix.owl.de/vbcc/2022-05-22/vbcc_target_m68k-amigaos.lhaautomatisch, entpackt (vorgebaute m68k-Runtime)toolchain/targets/m68k-amigaos/{include,lib}
NDK 3.2 (Release 4)R4https://aminet.net/dev/misc/NDK3.2.lhaautomatisch, entpackttoolchain/sdk/NDK_3.2/
MUI 3.8 Developer3.8https://aminet.net/dev/mui/mui38dev.lhaautomatisch, entpackttoolchain/sdk/MUI_3.8/
ACE BASIC3.0.1 (fest)https://github.com/mdbergmann/ACEBasic/archive/refs/tags/3.0.1.tar.gzautomatisch, entpackt nach var/src/acebasic/, mit compilers/acebasic/patches/ gepatcht, aus Quelltext gebaut (§4)toolchain/bin/{ace,yap,bas}, toolchain/sdk/ACE/
MCC NList0.128https://github.com/amiga-mui/nlist/releases/download/0.128/MCC_NList-0.128.lhaautomatisch, entpackt (nur Developer/C/include, Developer/Autodocs)toolchain/sdk/MCC/
MCC TextEditor15.56https://github.com/amiga-mui/texteditor/releases/download/15.56/MCC_TextEditor-15.56.lhaautomatisch, entpackt, mit NList zusammengeführttoolchain/sdk/MCC/
ReqTools Developer2.9https://aminet.net/util/libs/ReqToolsDev.lhaautomatisch, entpackt (include, fd, doc)toolchain/sdk/reqtools/
regex, Roadshow, AmiSSL, SQLite3, PosixLib–keine feste Download-Adresse im Codemanuell (§5)toolchain/sdk/<Name>/
Kickstart-ROM, Workbench-HDF–nur du selbst (z. B. Amiga Forever)manuell (§7)var/emu/...
FS-UAE–https://fs-uae.net/download/manuell, optionalSysteminstallation
Qt 66.11.1 auf macOS verifizierthttps://www.qt.io/download-qt-installer-oss oder Paketmanagermanuell, nur für die IDEbeliebig, per CMAKE_PREFIX_PATH

Versionen und SHA-256 der automatisch geladenen Archive stehen in bootstrap/sources.lock.json. Die Quelldefinitionen stehen in bootstrap/sources.toml.

Lizenzen der geladenen Teile (Kurzfassung)

Deshalb liegt nichts davon im Repository und toolchain/ sowie var/ sind in .gitignore eingetragen.

---

2. Verzeichnislayout (was der Bootstrap erzeugt)

AmiDevIDE/
├── bootstrap/            Python-Skripte (im Repo)
├── templates/            Vorlagen für generierte Dateien (im Repo)
├── ide/                  IDE-Quelltext (im Repo)
├── compilers/acebasic/   nur die ACE-Patches (im Repo), siehe §4
├── emulator/             FS-UAE-Runner (im Repo)
│
├── var/                  GENERIERT, gitignored   (überschreibbar: ACD_VAR)
│   ├── downloads/        Original-Archive, unverändert (nicht entpacken!)
│   │   ├── vasm.tar.gz
│   │   ├── vlink.tar.gz
│   │   ├── vbcc0_9hP2.tar.gz
│   │   ├── vbcc_target_m68k-amigaos.lha
│   │   ├── NDK3.2.lha
│   │   ├── mui38dev.lha
│   │   └── ACEBasic-3.0.1.tar.gz
│   ├── src/{vbcc,vasm,vlink}/   entpackte Quellen, hier wird gebaut
│   ├── src/acebasic/     ACE 3.0.1 + Patches, als Git-Repository (Tag `upstream`)
│   ├── stage/            Zwischenablage beim Entpacken
│   └── emu/
│       ├── kickstarts/   amiga-os-310-a1200.rom   (DU lieferst)
│       ├── hdf/          workbench-311.hdf        (DU lieferst)
│       └── adf/          *.adf, optional          (DU lieferst)
│
└── toolchain/            GENERIERT, gitignored — das ist $VBCC  (überschreibbar: ACD_TOOLCHAIN)
    ├── bin/              vc vbccm68k vasmm68k_mot vlink vobjdump vprof dtgen
    │                     ace yap bas   amigaide (+ AmigaIDE.app auf macOS)
    ├── config/           aos68k aos68km aos68kr vc.config ace68k
    ├── targets/m68k-amigaos/{include,lib}
    ├── sdk/
    │   ├── NDK_3.2/      Include_H Include_I lib FD SFD Autodocs …
    │   ├── MUI_3.8/      Developer/{C/Include,FD,Autodocs,…}
    │   ├── ACE/          lib bmaps include icons submods quickref.txt
    │   ├── MCC/          Developer/{C/include/mui,Autodocs/MCC}   (NList + TextEditor)
    │   ├── reqtools/     include fd doc
    │   └── regex/ Roadshow/ AmiSSL-v5/ SQLite3/ PosixLib/   (manuell, §5)
    ├── fs-uae/development.fs-uae
    ├── project-template/ Makefile*
    ├── shared/           wird in FS-UAE als SHARED: gemountet
    ├── setenv.sh
    └── setenv.ps1

Beide Wurzeln lassen sich per CMake verschieben: -DACD_TOOLCHAIN_PREFIX=/pfad und -DACD_VAR_DIR=/pfad (bzw. Umgebungsvariablen ACD_TOOLCHAIN / ACD_VAR beim direkten Aufruf der Python-Skripte).

---

3. Host-Voraussetzungen

Gemeinsam für alle Hosts (aus CMakeLists.txt und bootstrap/ abgeleitet):

WerkzeugMindestversionWofür
Python3.11 (wegen tomllib; CMake prüft Python3 3.11)Bootstrap
CMake3.21Superbuild
C-Compiler (cc, gcc oder clang)C99vbcc, vasm, vlink, ACE
GNU make (gmake oder make)–alle Makefiles
LHA-Entpacker: lha, lhasa, 7z, 7zz oder pip3 install lhafile–.lha-Archive
curl oder wget–Fallback, falls Pythons TLS keine CA-Liste hat
git–Clone; Pflicht für das Einspielen der ACE-Patches (git am)
C++20-Compiler + Qt 6 (Widgets, Concurrent, Test)Qt 6.11.1 verifiziertnur für die Qt-IDE und die Tests
FS-UAE–optional, zum Testen im Emulator

macOS (verifiziert)

xcode-select --install                 # clang, make, git
brew install cmake python@3.12 lhasa   # oder: pip3 install lhafile
pip3 install certifi                   # optional: TLS-CA für python.org-Pythons

Qt 6 über den Online-Installer (https://www.qt.io/download-qt-installer-oss), z. B. nach ~/Qt/6.11.1/macos, oder brew install qt (ungeprüft). FS-UAE: https://fs-uae.net/download/ → FS-UAE.app nach /Applications.

Linux (nicht end-to-end getestet)

Debian/Ubuntu (Paketnamen ungeprüft):

sudo apt install build-essential cmake python3 git lhasa curl \
                 qt6-base-dev libgl1-mesa-dev fs-uae

Fedora (Paketnamen ungeprüft):

sudo dnf install gcc gcc-c++ make cmake python3 git lhasa curl qt6-qtbase-devel fs-uae

Python muss ≥ 3.11 sein (python3 --version). FS-UAE wird unter /usr/bin/fs-uae, /usr/local/bin/fs-uae, /snap/bin/fs-uae oder im PATH gesucht.

Windows (nicht end-to-end getestet)

Alles läuft in MSYS2 (https://www.msys2.org/), Shell „MINGW64“:

pacman -S --needed mingw-w64-x86_64-gcc mingw-w64-x86_64-cmake make git \
          mingw-w64-x86_64-python mingw-w64-x86_64-p7zip
# Qt 6 für MinGW (ungeprüft):
pacman -S mingw-w64-x86_64-qt6-base

vasm/vlink werden auf Windows mit Makefile.Cygwin gebaut (siehe bootstrap/acd_build_tools.py). FS-UAE wird unter C:\Program Files\FS-UAE\Windows\x86-64\fs-uae.exe (bzw. den anderen in emulator/acd_emu.py gelisteten Pfaden) oder im PATH gesucht. Nach dem Bauen der IDE muss windeployqt von Hand laufen (siehe ide/cmake/Deploy.cmake).

---

4. ACE BASIC (automatisch, mit Patches)

ACE BASIC ist GPL-Software von Dritten und liegt nicht in diesem Repository. Im Repository liegen nur unsere Änderungen, als Patch-Serie unter compilers/acebasic/patches/. Sie gilt für genau ein Release:

Upstreamhttps://github.com/mdbergmann/ACEBasic, Tag 3.0.1
Archivhttps://github.com/mdbergmann/ACEBasic/archive/refs/tags/3.0.1.tar.gz → var/downloads/ACEBasic-3.0.1.tar.gz (nicht entpacken, nicht umbenennen)
SHA-2568a38419e35c31cf7474385384940166c4e97f2fda36c46501e5d7d40900a556f

Der Bootstrap erledigt alles (acd-toolchain bzw. acd-ace):

  1. acd-fetch lädt das Archiv.
  2. acd-ace-src prüft die SHA-256, entpackt nach var/src/acebasic/ und wendet die Patches mit git am an. Dafür wird git gebraucht.
  3. acd-ace baut ace, yap und bas für den Host und installiert sie nach toolchain/.

Das Aminet-Archiv dev/basic/ace-basic.lha passt nicht: Die Patches brauchen genau den Baum des GitHub-Tags. Der manuelle Weg und die Arbeit an den Patches stehen in compilers/acebasic/README.md, das Portieren auf ein neues ACE-Release in compilers/acebasic/UPDATING.md.

Ohne ACE funktioniert alles andere (C/Assembler); nur BASIC-Projekte in der IDE und die Tools ace, yap, bas fehlen dann (acd-doctor meldet das).

---

5. SDKs ohne automatischen Download (manuell)

bootstrap/acd_install_sdk.py installiert NDK 3.2, MUI 3.8, MCC (NList und TextEditor) und reqtools — alles, was die MUI-IDE (amigaide-m68k) zum Übersetzen braucht. Die folgenden SDKs brauchst du nur, wenn du sie nutzt. Lege sie so ab, wie in der Spalte „Erwartetes Layout“ angegeben (geprüft wird der jeweils erste Pfad durch acd-doctor):

Verzeichnis unter toolchain/sdk/Erwartetes LayoutMögliche Quelle
MCC/ (weitere Klassen)Developer/C/include/mui/*.h, Developer/Autodocs/MCC/*.docBetterString, TheBar usw. installiert der Bootstrap nicht; ihre Developer/-Bäume von GitHub amiga-mui hineinkopieren
regex/include/{clib,libraries,pragmas,proto}/…, fd/regex_lib.fdAminet util/libs/regex_ranieri (Alfonso Ranieri, 5.1) -- nicht util/libs/Regex, siehe §8.2. Die MUI-IDE ruft regex.library über eigene Stubs auf und braucht die Header zum Übersetzen nicht
Roadshow/include/, netinclude/, sfd/Roadshow-SDK (ungeprüft); NDK 3.2 enthält unter SANA+RoadshowTCP-IP/ ebenfalls netinclude
AmiSSL-v5/Developer/include/, Developer/lib/AmigaOS3/https://github.com/jens-maus/amissl/releases/download/5.27/AmiSSL-5.27-SDK.lha (Layout ungeprüft)
SQLite3/include/, lib/Aminet biz/dbase/sqlite3 (ungeprüft)
PosixLib/include/Aminet dev/c/vbcc_PosixLib (ungeprüft)

Hast du eine ältere Toolchain im alten ~/Dev/amiga-Layout, übernimmt acd-seed diese SDKs (und ROMs/HDFs) automatisch:

python3 bootstrap/acd_seed_from_legacy.py --from /pfad/zum/alten/baum [--dry-run]

Erwartet wird dort: <baum>/sdk/<Name>/, <baum>/kickstarts/*.rom, <baum>/hdf/workbench*.hdf, <baum>/adf/*.adf.

5.1 Eigene SDKs

Jedes weitere SDK beschreibt sich selbst mit einer Datei AmiDevSDK.json in seinem Verzeichnis. Alle Pfade darin sind relativ zu diesem Verzeichnis:

{
  "name": "Foo Lib",
  "version": "1.2",
  "kind": "other",
  "includeDirs": ["include"],
  "asmIncludeDirs": [],
  "libDirs": ["lib"],
  "autodocDirs": ["Autodocs"],
  "autodocFiles": [],
  "sfdDirs": ["SFD"],
  "suggestedLibs": ["foo"]
}

Pflicht sind name und version; kind ist ndk, mui oder other (Standard), "." steht für das SDK-Verzeichnis selbst. Die Qt-IDE findet solche SDKs unter toolchain/sdk/*/, die MUI-IDE unter SDK:*/. Dasselbe Verzeichnis funktioniert also unverändert auf beiden Seiten.

Name und Version sind die Identität. Ein Projekt speichert ein SDK als Id, die beide IDEs gleich aus Name und Version bilden: klein geschrieben, alles außer a-z, 0-9 und . wird zu -, also „Foo Lib“ + „1.2“ → foo-lib-1.2. Verglichen wird ohne Rücksicht auf Groß- und Kleinschreibung. Eingebaute SDKs gewinnen bei gleicher Id.

Ist genau diese Version nicht installiert, nimmt die IDE die neueste installierte Version desselben SDKs, die mindestens so neu ist: foo-lib-1.2 baut mit Foo Lib 1.3, nicht mit 1.1. Verglichen wird Abschnitt für Abschnitt als ganze Zahlen: 3.2.2 ist neuer als 3.2 und 3.2.1, 3.10 neuer als 3.2. Nur eine ältere Version blockiert; eine andere Hauptversion (erste Zahl) baut, die IDE warnt aber beim Öffnen des Projekts. Die Projektdatei bleibt dabei unverändert, auch nach OK in den Projekteinstellungen. Pfade stehen nie in der Projektdatei, nur Name und Version; eine .aproj funktioniert deshalb 1:1 in beiden IDEs, sobald dort ein passendes SDK eingerichtet ist.

Eingerichtet wird ein SDK in jeder IDE für sich. In der Qt-IDE geht das auch unter *Settings → SDKs* von Hand, mit Name und Version (die Id wird angezeigt, nicht eingegeben); auf dem Amiga mit einer AmiDevSDK.json unter SDK:.

Nennt ein Projekt ein SDK, das in keiner passenden Version installiert ist, melden beide IDEs das beim Öffnen und am Anfang jedes Builds. In den Projekteinstellungen steht es mit „(not installed)“ bzw. „(nicht installiert)“ und bleibt angehakt, bis man das Häkchen entfernt.

---

6. Host: Schritt für Schritt

6.1 Klonen

git clone https://github.com/dangelrk/AmiDevIDE.git
cd AmiDevIDE

Pfad ohne Leerzeichen wählen (vc ruft seine Tools direkt, nicht über eine Shell, auf; ein Pfad mit Leerzeichen in den generierten Configs ist ungetestet).

Alles in einem Schritt: install.sh

./install.sh                              # sucht Qt selbst
./install.sh --qt ~/Qt/6.11.1/macos       # oder mit Pfad

Erledigt §6.2 bis §6.8 in einem Lauf: prüft die Voraussetzungen aus §3 und bietet an, fehlende (CMake, Python, lhasa) per Homebrew zu installieren (--yes ohne Rückfrage). Es sucht Qt 6 im CMake-Cache, in QTDIR/ CMAKE_PREFIX_PATH, unter ~/Qt/6.*/macos, in Homebrew und über qmake und fragt nach dem Pfad, wenn nichts davon passt. Dann konfiguriert es mit Qt-IDE, MUI-IDE und Tests und baut Toolchain, acd-doctor, Qt-IDE, ctest und amigaide-m68k. Bei einem Fehler nennt es die Ursache und den nächsten Schritt; die Protokolle liegen unter var/log/install/. Jeder Schritt ist wiederholbar, nach einer Korrektur also einfach erneut starten. Der Emulator (§7) gehört nicht dazu. Verifiziert auf macOS; auf Linux läuft derselbe Ablauf, installiert aber nichts selbst.

Die Einzelschritte:

6.2 Konfigurieren

cmake -B build                                            # nur Toolchain
cmake -B build -DCMAKE_PREFIX_PATH=$HOME/Qt/6.11.1/macos  # mit Qt-IDE

Optionen: ACD_TOOLCHAIN_PREFIX, ACD_VAR_DIR, ACD_BUILD_IDE_QT (ON, schaltet sich ohne Qt 6 ab), ACD_BUILD_IDE_AMIGA (OFF), ACD_BUILD_TESTS (ON), ACD_OFFLINE (OFF).

6.3 Toolchain bauen

cmake --build build --target acd-toolchain

Das führt der Reihe nach aus:

  1. acd-fetch — lädt die zehn Archive aus §1 nach var/downloads/
  2. acd-tools — baut vbcc (inkl. automatisch beantwortetem dtgen), vasm, vlink → toolchain/bin/
  3. acd-sdk — entpackt vbcc-Target, NDK 3.2, MUI 3.8, MCC, reqtools → toolchain/targets/, toolchain/sdk/
  4. acd-ace-src — ACE 3.0.1 prüfen, nach var/src/acebasic/ entpacken, Patches anwenden
  5. acd-ace — make -f Makefile-host und install in var/src/acebasic/src/make → toolchain/bin/{ace,yap,bas}, toolchain/config/ace68k, toolchain/sdk/ACE/
  6. acd-config — erzeugt toolchain/config/aos68k*, setenv.sh/.ps1, fs-uae/development.fs-uae, project-template/

Die Einzelschritte gibt es auch direkt:

python3 bootstrap/acd_fetch.py [--offline]
python3 bootstrap/acd_build_tools.py [--force] [--only vbcc,vasm,vlink]
python3 bootstrap/acd_install_sdk.py [--force]
python3 bootstrap/acd_ace.py [--force]
(cd var/src/acebasic/src/make && make -f Makefile-host && make -f Makefile-host install VBCC="$PWD/../../../../toolchain")
python3 bootstrap/acd_gen_config.py [--kickstart PFAD] [--workbench PFAD]

6.4 Offline / manueller Download

Archive unverändert und nicht entpackt nach var/downloads/ legen (Dateinamen wie in §2), dann:

cmake -B build -DACD_OFFLINE=ON
cmake --build build --target acd-toolchain

python3 bootstrap/acd_fetch.py --write-docs erzeugt docs/SOURCES.html mit allen Links. Neuere Versionen prüfen: cmake --build build --target acd-update-check.

6.5 Prüfen

cmake --build build --target acd-doctor

Startet jedes Tool, prüft SDKs, Configs (keine ~/$), Emulator, und kompiliert ein Hello-World für m68k. Fehlende optionale Teile (seeded SDKs, Emulator) sind Warnungen, keine Fehler.

6.6 Benutzen

source toolchain/setenv.sh              # PowerShell: . toolchain\setenv.ps1
vc +aos68k -c99 -cpu=68000 -O2 hello.c -o hello
file hello                              # AmigaOS loadseg()ble executable/binary
bas hello.b                             # ACE BASIC

vc braucht $VBCC und $VBCC/bin im PATH — ohne das meldet es „No config file!“. setenv.sh setzt beides.

6.7 Qt-IDE und Tests

cmake --build build                     # baut amigaide
cd build && ctest                       # 17 Test-Suites

tst_autodocindex und tst_sfdindex lesen echte NDK-Daten und werden übersprungen, solange die Toolchain nicht gebootstrappt ist.

Auf macOS wird AmigaIDE.app per macdeployqt gebündelt und nach toolchain/bin/AmigaIDE.app kopiert; toolchain/bin/amigaide ist ein Startskript dafür. Die IDE findet die Toolchain über ihren eigenen Ort.

6.8 MUI-IDE für den Amiga cross-kompilieren (optional)

Braucht NDK 3.2, MUI 3.8, sdk/MCC und sdk/reqtools; alle vier installiert acd-toolchain (§6.3).

cmake -B build -DACD_BUILD_IDE_AMIGA=ON
cmake --build build --target amigaide-m68k
file ide/amiga/bin/amigaide             # AmigaOS loadseg()ble executable/binary

---

7. Emulator (FS-UAE)

Kickstart-ROMs und Workbench sind urheberrechtlich geschützt und nicht enthalten. Legal z. B. über Cloanto *Amiga Forever* oder durch Auslesen des ROMs der eigenen Hardware.

Ablage (Dateinamen werden in dieser Reihenfolge gesucht):

var/emu/kickstarts/  amiga-os-310-a1200.rom | amiga-os-310.rom | kick31.rom
var/emu/hdf/         workbench-311.hdf | workbench-310.hdf | workbench.hdf
var/emu/adf/         *.adf (optional)

Zusätzlich wird in ~/FS-UAE/Kickstarts und ~/FS-UAE/Hard Drives gesucht. Oder explizit:

python3 bootstrap/acd_gen_config.py --kickstart ~/roms/kick31.rom --workbench ~/images/wb311.hdf
cmake --build build --target acd-doctor

Die generierte Maschine: A1200, Kickstart 3.1, 2 MB Chip + 8 MB Fast, DH0 = Workbench-HDF, SHARED: = toolchain/shared (Live-Verzeichnis), serielle Ausgabe nach toolchain/shared/serial.log.

python3 emulator/acd_emu.py --status
python3 emulator/acd_emu.py --binary hello
python3 emulator/acd_emu.py --serial

---

8. AmigaOS nativ

8.1 Systemvoraussetzungen

CPU68020 oder besser — ide/amiga/Makefile.amiga baut mit -cpu=68020 (änderbar über CPU=68000, ungeprüft)
FPUnicht nötig (-lmieee → mathieeedoubbas.library aus LIBS:)
OSAmigaOS 3.x; die IDE öffnet intuition.library v37 (≥ 2.04). Mit NDK 3.2 gebaut; getestet ist kein OS-Stand (ungeprüft: 3.1 / 3.2)
MUImuimaster.library ≥ v19 (MUI 3.8)
Librariesreqtools.library ≥ v38, regex.library ≥ v5 (Ranieri) in LIBS:
MCCs (in MUI:Libs/mui/)NList (NList, NListview, NListtree), TextEditor
makeGNU make für Amiga von Darren Coles (gnu_make_amiga, 4.4.1)
Speicher / Stackungeprüft; ACE-Upstream setzt stack 65000 in seiner User-Startup

8.2 Was wohin

PaketQuelleZiel
vbcc-Binaries m68k (0.9h patch2)https://aminet.net/dev/c/vbcc_bin_amigaos68k.lha oder http://phoenix.owl.de/vbcc/2022-03-23/vbcc_bin_amigaos68k.lhaVerzeichnis, z. B. Work:vbcc, per Installer (legt Assign vbcc: an, ungeprüft)
vbcc-Target m68k-amigaoshttp://phoenix.owl.de/vbcc/2022-05-22/vbcc_target_m68k-amigaos.lhaper Installer nach vbcc:targets/m68k-amigaos/
vasm/vlink für AmigaOSim vbcc-bin-Archiv enthalten (ungeprüft), sonst http://sun.hasenbraten.de/vasm/ bzw. /vlink/vbcc:bin/vasmm68k_mot, vbcc:bin/vlink
NDK 3.2 R4https://aminet.net/dev/misc/NDK3.2.lhaSDK:NDK_3.2/ (mit Include_H, Include_I, lib, FD, SFD, Autodocs)
MUI 3.8 Developerhttps://aminet.net/dev/mui/mui38dev.lhaInhalt von MUI/ nach SDK:MUI_3.8/ (→ SDK:MUI_3.8/Developer/C/Include)
MUI 3.8 User (Runtime)https://aminet.net/util/libs/mui38usr.lhaper Installer, MUI:
MCCs Developer + Runtimesiehe §1 (GitHub amiga-mui)Header nach SDK:MCC/Developer/C/include/mui/, Klassen nach MUI:Libs/mui/
regex.library 5.1 (POSIX, Alfonso Ranieri)https://aminet.net/util/libs/regex_ranieri.lha (Einsprünge passen zu ide/amiga/src/mui/aide_regex_amiga.c)Libs/regex.library nach LIBS:; Header nur für eigene Programme nach SDK:regex/include/. Verwechslungsgefahr: util/libs/Regex.lha enthält eine *andere* regex.library (GNU, 1.0 von 1989, 9288 Bytes, Version meldet 1.-1) mit anderen Einsprüngen; mit ihr stürzte die IDE beim ersten Indizieren einer C-Datei ab (Guru 8100000F). Seit 0.5 lehnt die IDE Versionen unter 5 beim Start mit einer Meldung ab, der Installer warnt
reqtoolshttps://aminet.net/util/libs/ReqToolsDev.lha (Header), https://aminet.net/util/libs/ReqToolsUsr.lha (Library)Header nach SDK:reqtools/include/, Library nach LIBS:
GNU makehttps://github.com/dmcoles/gnu_make_amiga/releases/download/4.4.1-26022026/make441-26022026.lha oder https://aminet.net/dev/c/make-4.4.1.lhamake nach C: oder in einen Pfad im PATH
ACE BASIC 3.0.1 (Original, ungepatcht)https://aminet.net/dev/basic/ace-basic.lhaz. B. Work:ACE, mit den Assigns ACE:, ACElib:, ACEinclude:, ACEbmaps: (§8.3)

Erwartetes Layout der Assigns (aus ide/amiga/Makefile.amiga, templates/project-makefiles/Makefile.amigaos, ide/core/src/aide_makegen.c):

vbcc:bin/vc  vbcc:bin/vbccm68k  vbcc:bin/vasmm68k_mot  vbcc:bin/vlink
vbcc:config/aos68k
vbcc:targets/m68k-amigaos/include   vbcc:targets/m68k-amigaos/lib
SDK:NDK_3.2/Include_H  SDK:NDK_3.2/Include_I  SDK:NDK_3.2/lib
SDK:MUI_3.8/Developer/C/Include
SDK:MCC/Developer/C/include
SDK:regex/include
SDK:reqtools/include
(optional) SDK:Roadshow/{include,netinclude}  SDK:AmiSSL-v5/Developer/{include,lib/AmigaOS3}
           SDK:SQLite3/{include,lib}          SDK:PosixLib/include

ACE auf dem Amiga ist das Original. Die Patches aus compilers/acebasic/ sind nur für den Host (macOS, Linux, Windows) da; auf dem Amiga wird nichts gepatcht. Die MUI-IDE erzeugt BASIC-Makefiles für ACE, wie es von Aminet kommt:

Dieselbe .aproj baut auf dem Host mit dem gepatchten ACE; welches Verhalten gilt, entscheidet allein das von der IDE erzeugte Makefile.

8.3 S:User-Startup

Beispiel (Pfade an dein System anpassen; vbcc:-Zeilen legt ggf. schon der vbcc-Installer an — dann nicht doppelt eintragen):

;BEGIN AmiDevIDE
Assign vbcc: Work:vbcc
Path vbcc:bin ADD
Assign SDK: Work:SDK
Assign ACE: Work:ACE
Assign ACElib: ACE:lib
Assign ACEbmaps: ACE:bmaps
Assign ACEinclude: ACE:include
Path ACE:bin ADD
Stack 65536
;END AmiDevIDE

Zu den vbcc-eigenen Assigns (vincludeos3:, vlibos3: o. ä., auf die vbcc:config/aos68k verweist): ungeprüft — der vbcc-Installer trägt sie ein. Das Template Makefile.amigaos setzt außerdem VBCC=vbcc: und VBCCCONF=vbcc:config/aos68k beim Aufruf.

Die Pfade SDK:/vbcc: sollten keine Leerzeichen enthalten.

8.4 AmigaIDE (MUI) nativ bauen

ide/amiga/Makefile.amiga setzt ROOT = /AmigaIDE. In AmigaDOS heißt ein führendes / „Elternverzeichnis“. Daher:

  1. Den Inhalt von ide/ auf den Amiga kopieren, in ein Verzeichnis namens AmigaIDE, z. B. Work:AmigaIDE (mit core/, amiga/).
  2. In der Shell:

`` CD Work:AmigaIDE make -f amiga/Makefile.amiga app ``

Sicherer (ungeprüft) ist, ROOT explizit zu setzen: make -f amiga/Makefile.amiga ROOT=Work:AmigaIDE app

Ziele: core-objects (nur Kern, ohne Link), app (→ amiga/bin/amigaide), clean. Nur die Compile-Regeln sind geprüft; Link, makedir/delete und die Assigns sind auf echter Hardware ungeprüft.

Alternativ auf dem Host cross-kompilieren (§6.8) und nur ide/amiga/bin/amigaide auf den Amiga kopieren.

8.4a Fertiges Archiv (Aminet)

cmake --build build --target amiga-release baut die MUI-IDE und packt sie mit Installer (install/amiga/, tools/release/amiga_release.py):

Im Archiv: Schublade AmigaIDE (Programm, Icon, AmigaIDE.guide), Install-AmiDevIDE (Commodore-Installer), Install-AmiDevIDE.shell, Uninstall-AmiDevIDE, ReadMe, LICENSE, THIRD-PARTY-NOTICES. Das Skript prüft Version (zweiteilig, aide_version.h), $VER und Datum des Programms, das Handbuch und das Aminet-Readme. Hochladen per FTP nach ftp://main.aminet.net/new/ (Benutzer anonymous, Passwort die E-Mail-Adresse).

8.5 Einstellungen der IDE auf dem Amiga

Die MUI-IDE speichert ihre Einstellungen in ENVARC:AmigaIDE/:

VariableStandard
AmigaIDE/makemake
AmigaIDE/sdkrootSDK:
AmigaIDE/vbccrootvbcc:

---

8a. Versionsverwaltung (optional, AmiVCS)

Beide IDEs können Projekte mit AmiVCS versionieren. AmiVCS ist ein eigenes Werkzeug wie vbcc oder ACE: die IDE ruft das Programm amivcs (ab Version 0.6, mit --porcelain-out) im Projektverzeichnis auf, für jeden Vorgang, und linkt nichts davon. Fehlt es, fehlen nur die Versions-Ansichten.

9. Fehlerbilder

MeldungUrsache
No config file! von vc$VBCC nicht gesetzt → source toolchain/setenv.sh
cmake -B build: „No LHA extractor found“kein lha/lhasa/7z/7zz im PATH und kein lhafile für CMakes Python → brew install lhasa bzw. apt install lhasa, dann cmake erneut. Sind die SDKs schon installiert, ist es nur eine Warnung
no working LHA extractorpip3 install lhafile oder lhasa/7z installieren
make: …/vc: No such file or directory in der IDEToolchain verschoben; IDE-Einstellungen zeigen ins Leere (werden beim Start repariert, sonst in den Einstellungen korrigieren)
macOS: Library not loaded: @rpath/QtWidgets.frameworknacktes amigaide-Binary kopiert — immer über toolchain/bin/amigaide (Startskript) bzw. die .app starten
acd-ace-src: „does not match the pinned release“falsches oder beschädigtes ACE-Archiv in var/downloads/ — löschen und acd-fetch erneut laufen lassen
acd-ace-src: „the ACE patch series does not apply“Patches passen nicht zum Archiv, siehe compilers/acebasic/UPDATING.md
acd-ace-src: „has uncommitted changes“in var/src/acebasic/ wurde etwas geändert — committen und als Patch exportieren oder python3 bootstrap/acd_ace.py --force