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:
- Projekte anlegen, öffnen und speichern
- Quellen und Header im Projektbaum verwalten
- Bauen im Hintergrund, mit laufender Ausgabe und Fehlerliste
- Programme starten, CLI-Programme in einem eigenen Konsolenfenster
- Symbolindex, Sprung zur Definition, Referenzen, Projektsuche
- Autodoc-Hilfe für alle aktiven SDKs
- Struct-Layout mit Offsets
- Disassembler für Hunk-Dateien, Memory Map nach dem Build
- Workbench-Icons für gebaute Programme
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 | +-----------------------------------------------------+


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)

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...)

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:
- Memory Map zeigt die Hunks des Programms (CODE, DATA, BSS)
- der Symbolindex wird neu aufgebaut
- Workbench-Programme bekommen ein Icon
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.

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:
- Bei CPU 68000 stellt das Makefile "OPTION 2-" vor den Quelltext, weil das Original-ace dafür keinen Schalter hat. Quelltext und .aproj bleiben unverändert.
- Das Original-yap kennt kein -g. ace meldet Fehler deshalb mit der Zeile im vorverarbeiteten Text und ohne Dateinamen. Diese Issues lassen sich nicht per Doppelklick anspringen.
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
- Nur eine Datei im Editor, keine Reiter.
- Keine Syntaxhervorhebung und keine Zeilennummern.
- Beim Dateiwechsel, bei "Neu" und bei "Öffnen" keine Nachfrage wegen ungespeicherter Änderungen (siehe Editor).
- AmigaIDE ist blockiert, solange ein mit "Run" gestartetes Programm läuft.
- "Build abbrechen" beendet den Compiler nicht.
- Der Symbolindex wird nach jedem Build komplett neu aufgebaut.
- Die Shift+F-Tasten sind nicht auf jedem System getestet. Falls eine nicht reagiert: Alle Befehle stehen auch im Menü.
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*.
| Host | Status |
|---|---|
| macOS | vollständig verifiziert, inkl. Bootstrap aus leerem Baum |
| Linux | baut alles aus dem Quelltext, nicht end-to-end getestet |
| Windows (MSYS2) | baut alles aus dem Quelltext, nicht end-to-end getestet |
| AmigaOS 3.x nativ | nur 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
| Komponente | Version (Lock) | Quelle | Wie es ins System kommt | Ziel |
|---|---|---|---|---|
| vasm | 2.0f | http://sun.hasenbraten.de/vasm/release/vasm.tar.gz | automatisch, aus Quelltext gebaut | toolchain/bin/vasmm68k_mot, vobjdump |
| vlink | 0.18a | http://sun.hasenbraten.de/vlink/release/vlink.tar.gz | automatisch, aus Quelltext gebaut | toolchain/bin/vlink |
| vbcc | 0.9hP2 | http://phoenix.owl.de/tags/vbcc0_9hP2.tar.gz | automatisch, aus Quelltext gebaut | toolchain/bin/{vc,vbccm68k,vprof,dtgen} |
| vbcc-Target m68k-amigaos | 2022-05-22 | http://phoenix.owl.de/vbcc/2022-05-22/vbcc_target_m68k-amigaos.lha | automatisch, entpackt (vorgebaute m68k-Runtime) | toolchain/targets/m68k-amigaos/{include,lib} |
| NDK 3.2 (Release 4) | R4 | https://aminet.net/dev/misc/NDK3.2.lha | automatisch, entpackt | toolchain/sdk/NDK_3.2/ |
| MUI 3.8 Developer | 3.8 | https://aminet.net/dev/mui/mui38dev.lha | automatisch, entpackt | toolchain/sdk/MUI_3.8/ |
| ACE BASIC | 3.0.1 (fest) | https://github.com/mdbergmann/ACEBasic/archive/refs/tags/3.0.1.tar.gz | automatisch, entpackt nach var/src/acebasic/, mit compilers/acebasic/patches/ gepatcht, aus Quelltext gebaut (§4) | toolchain/bin/{ace,yap,bas}, toolchain/sdk/ACE/ |
| MCC NList | 0.128 | https://github.com/amiga-mui/nlist/releases/download/0.128/MCC_NList-0.128.lha | automatisch, entpackt (nur Developer/C/include, Developer/Autodocs) | toolchain/sdk/MCC/ |
| MCC TextEditor | 15.56 | https://github.com/amiga-mui/texteditor/releases/download/15.56/MCC_TextEditor-15.56.lha | automatisch, entpackt, mit NList zusammengeführt | toolchain/sdk/MCC/ |
| ReqTools Developer | 2.9 | https://aminet.net/util/libs/ReqToolsDev.lha | automatisch, entpackt (include, fd, doc) | toolchain/sdk/reqtools/ |
| regex, Roadshow, AmiSSL, SQLite3, PosixLib | – | keine feste Download-Adresse im Code | manuell (§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, optional | Systeminstallation |
| Qt 6 | 6.11.1 auf macOS verifiziert | https://www.qt.io/download-qt-installer-oss oder Paketmanager | manuell, nur für die IDE | beliebig, 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)
- vbcc (© Volker Barthelmann), vasm (© Volker Barthelmann, Frank Wille), vlink (© Frank Wille): Archive dürfen *unverändert* weitergegeben und *nicht-kommerziell* genutzt werden; kommerzielle Nutzung ist erlaubt, wenn Ziel m68k/AmigaOS ist. Sonst schriftliche Zustimmung nötig. (Wortlaut in
doc/vbcc.texi,doc/vasm.texi,vlink.texider Quellarchive.) - NDK 3.2: © Hyperion Entertainment CVBA, über Aminet verteilt.
- MUI 3.8 Developer: © 1992–97 Stefan Stuntz; frei weitergebbar, solange die Copyrights erhalten bleiben, nicht gewinnorientiert verkaufbar.
- MCC NList, MCC TextEditor: LGPL 2.1 (amiga-mui-Projekt).
- ReqTools 2.9: © 1991–94 Nico François, 1995–97 Magnus Holmgren; frei weitergebbar.
- ACE BASIC: GPL (Original 1998 GPL v2 von David Benn; das aktuelle Upstream-Repository
mdbergmann/ACEBasicenthält seit 06/2026 eine GPL-v3-LICENSE). - Kickstart/Workbench: urheberrechtlich geschützt, niemals weitergeben.
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):
| Werkzeug | Mindestversion | Wofür |
|---|---|---|
| Python | 3.11 (wegen tomllib; CMake prüft Python3 3.11) | Bootstrap |
| CMake | 3.21 | Superbuild |
C-Compiler (cc, gcc oder clang) | C99 | vbcc, 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 verifiziert | nur 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:
| Upstream | https://github.com/mdbergmann/ACEBasic, Tag 3.0.1 |
| Archiv | https://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-256 | 8a38419e35c31cf7474385384940166c4e97f2fda36c46501e5d7d40900a556f |
Der Bootstrap erledigt alles (acd-toolchain bzw. acd-ace):
acd-fetchlädt das Archiv.acd-ace-srcprüft die SHA-256, entpackt nachvar/src/acebasic/und wendet die Patches mitgit aman. Dafür wirdgitgebraucht.acd-acebautace,yapundbasfür den Host und installiert sie nachtoolchain/.
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 Layout | Mögliche Quelle |
|---|---|---|
MCC/ (weitere Klassen) | Developer/C/include/mui/*.h, Developer/Autodocs/MCC/*.doc | BetterString, TheBar usw. installiert der Bootstrap nicht; ihre Developer/-Bäume von GitHub amiga-mui hineinkopieren |
regex/ | include/{clib,libraries,pragmas,proto}/…, fd/regex_lib.fd | Aminet 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:
acd-fetch— lädt die zehn Archive aus §1 nachvar/downloads/acd-tools— baut vbcc (inkl. automatisch beantwortetemdtgen), vasm, vlink →toolchain/bin/acd-sdk— entpackt vbcc-Target, NDK 3.2, MUI 3.8, MCC, reqtools →toolchain/targets/,toolchain/sdk/acd-ace-src— ACE 3.0.1 prüfen, nachvar/src/acebasic/entpacken, Patches anwendenacd-ace—make -f Makefile-hostundinstallinvar/src/acebasic/src/make→toolchain/bin/{ace,yap,bas},toolchain/config/ace68k,toolchain/sdk/ACE/acd-config— erzeugttoolchain/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
| CPU | 68020 oder besser — ide/amiga/Makefile.amiga baut mit -cpu=68020 (änderbar über CPU=68000, ungeprüft) |
| FPU | nicht nötig (-lmieee → mathieeedoubbas.library aus LIBS:) |
| OS | AmigaOS 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) |
| MUI | muimaster.library ≥ v19 (MUI 3.8) |
| Libraries | reqtools.library ≥ v38, regex.library ≥ v5 (Ranieri) in LIBS: |
MCCs (in MUI:Libs/mui/) | NList (NList, NListview, NListtree), TextEditor |
| make | GNU make für Amiga von Darren Coles (gnu_make_amiga, 4.4.1) |
| Speicher / Stack | ungeprüft; ACE-Upstream setzt stack 65000 in seiner User-Startup |
8.2 Was wohin
| Paket | Quelle | Ziel |
|---|---|---|
| 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.lha | Verzeichnis, z. B. Work:vbcc, per Installer (legt Assign vbcc: an, ungeprüft) |
| vbcc-Target m68k-amigaos | http://phoenix.owl.de/vbcc/2022-05-22/vbcc_target_m68k-amigaos.lha | per Installer nach vbcc:targets/m68k-amigaos/ |
| vasm/vlink für AmigaOS | im vbcc-bin-Archiv enthalten (ungeprüft), sonst http://sun.hasenbraten.de/vasm/ bzw. /vlink/ | vbcc:bin/vasmm68k_mot, vbcc:bin/vlink |
| NDK 3.2 R4 | https://aminet.net/dev/misc/NDK3.2.lha | SDK:NDK_3.2/ (mit Include_H, Include_I, lib, FD, SFD, Autodocs) |
| MUI 3.8 Developer | https://aminet.net/dev/mui/mui38dev.lha | Inhalt 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.lha | per Installer, MUI: |
| MCCs Developer + Runtime | siehe §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 |
| reqtools | https://aminet.net/util/libs/ReqToolsDev.lha (Header), https://aminet.net/util/libs/ReqToolsUsr.lha (Library) | Header nach SDK:reqtools/include/, Library nach LIBS: |
| GNU make | https://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.lha | make nach C: oder in einen Pfad im PATH |
| ACE BASIC 3.0.1 (Original, ungepatcht) | https://aminet.net/dev/basic/ace-basic.lha | z. 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:
ACE:bin/aceundACE:bin/yap; Includes mit<…>suchtyapselbst inACEinclude:.- Gelinkt wird gegen
ACElib:startup.lib,ACElib:db.lib,ACElib:amiga.lib, bei 68000 gegenACElib:68000/startup.lib,ACElib:68000/db.lib,ACElib:amiga.libundACElib:vc.lib. vasmm68k_motundvlinkkommen ausvbcc:bin/.- CPU 68000: Das Original-
acekennt dafür keinen Schalter, nurOPTION 2-im Quelltext. Das Makefile stellt diese Zeile automatisch vor den vorverarbeiteten Text (EchoundJoin); der Quelltext und die.aprojbleiben unverändert (ungeprüft auf echter Hardware). - Fehlerzeilen: Das Original-
yapkennt kein-g.acemeldet Fehler deshalb mit der Zeilennummer im vorverarbeiteten Text, ohne Dateinamen. Die IDE zeigt sie an, kann sie aber keiner Quelldatei zuordnen.
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:
- Den Inhalt von
ide/auf den Amiga kopieren, in ein Verzeichnis namensAmigaIDE, z. B.Work:AmigaIDE(mitcore/,amiga/). - 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):
build/release/AmiDevIDE-<version>.lhaund.readmefür GitHub,build/release/aminet-<version>/AmiDevIDE.lhaund.readmefür Aminet (Aminet will einen Namen für alle Versionen).
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/:
| Variable | Standard |
|---|---|
AmigaIDE/make | make |
AmigaIDE/sdkroot | SDK: |
AmigaIDE/vbccroot | vbcc: |
---
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.
- Qt-IDE: Pfad unter *Options ▸ Global Settings ▸ amivcs program* (Vorgabe
toolchain/bin/amivcs, sonstamivcsaus demPATH; gespeichert wird ein absoluter Pfad). Docks *Version Control* und *History*, Menü *VCS*, Kennzeichen S/M/N/D im Projektbaum. - MUI-IDE:
ENVARC:AmigaIDE/amivcs(Einstellungsfenster, Vorgabeamivcs). Register *Versionen* und *Verlauf*, Menü *Versionen*. - Remote-URL, Zugangsdaten, Autor und Zeichensatz verwaltet
amivcsselbst (ab AmiVCS 0.10): globalENV:AmiVCS/configbzw.~/.amivcsconfig(Name, E-Mail), pro Repository.amivcs/config(Remote-URL, Benutzer, auf Wunsch Passwort). *Clone* fragt die URL (https://server/name), *Push* ohne Remote ebenso; fehlen Benutzer oder Passwort, fragt die IDE danach (Qt: Dialog *AmiVCS Login*, MUI: Requester mit verdeckter Passworteingabe) und gibt sie über--args-fromweiter, nie auf der Kommandozeile. *VCS ▸ Settings...* (Qt, eigener Dialog überamivcs config) bzw. *Versionen ▸ Einstellungen...* (MUI, startetSYS:Prefs/AmiVCSConfig) bearbeiten Remote-URL, Benutzer, Name und E-Mail. - Der Editor-Zustand (offene Dateien) liegt in
<projekt>.aproj.user, nicht in der.aproj; die IDE bietet an, das samtbuild/und dem Zielverzeichnis in.amivcsignoreeinzutragen. - Plan und Begründungen:
docs/AMIVCS-PLAN.md.
9. Fehlerbilder
| Meldung | Ursache |
|---|---|
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 extractor | pip3 install lhafile oder lhasa/7z installieren |
make: …/vc: No such file or directory in der IDE | Toolchain verschoben; IDE-Einstellungen zeigen ins Leere (werden beim Start repariert, sonst in den Einstellungen korrigieren) |
macOS: Library not loaded: @rpath/QtWidgets.framework | nacktes 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 |