Hello, Guest the thread was called448 times and contains 5 replays

last post from Chrille at the

Kernalfunktion zum Programmstarten?

  • Hi,


    ich habe mich früher beim Amiga nur mit der Hardware und Assembler/C beschäftigt,
    OS-Funktionen bis auf Floppyzugriffe meistens gemieden. Meine Kenntnisse Rund
    um die Bibliotheken sind deshalb sehr bescheiden.


    In den meissten Bestriebssystemen gibt es Funktionen, mit denen Programme
    (geladen und) gestartet werden können (einfaches Beispiel: createProcess
    mit Filename und weiteren Parametern in Win32). Auf dem Amiga kenne ich
    nur die Task-Funktionen in EXEC. Gibt es andere Bibliotheksfunktionen, die
    ähnlich wie createProcess komfortabler sind?

  • Hi,
    ich würde eher im a1k Forum fragen, da würdest du sicherlich eine Antwort von irgendjemanden bekommen, wenn es nicht gerade down wäre ....


    Ich habe seit über 20 Jahren nichts mehr am Amiga programmiert, aber ich würde in der dos.library schauen bzw. in der amiga.lib.
    AFAIR kann die amiga.lib statisch zu deinem Programm hinzu gelinkt werden und da gibt es CreateProc(). Siehe: http://amigadev.elowar.com/rea…cs_3._guide/node014D.html


    Ansonsten gibt AFAIK sowas wie RunCommand() und LoagSeg() aus der dos.library. Siehe: http://amigadev.elowar.com/rea…cs_2._guide/node059A.html


    Wenn das a1k Forum wieder online ist, würde ich da lieber noch mal nachfragen. Ich habe wie gesagt schon lange nichts mehr auf dem Amiga programmiert und habe mich auch nur wenig mit dem OS beschäftigt, am ehesten wie man das OS sytemkonform ausschalten kann oder wie man Teile der Hardware systemkonform übernehmen kann ;)

  • Danke schon mal für die Infos. Am letzen Wochenende/Abends hatte ich mir die EXEC-RefManuals
    zu Gemüte gezogen. Da standen im Prinzip der komplette Aufbau plus ausreichend Erklärungen
    drin, um einen Überblick über IO/Devices, Ports(Pipes) und Tasks zu bekommen. Ich hatte auch
    kurz in die DOS-Manuals geschaut, dort aber leider das Kapitel Processes vermisst. Die Beschreibung
    gibt's nur in Form von Autodocs etc., die hatte ich mir in den letzen beiden Abenden reingezogen.


    Für einen Prozess braucht's ja auch ein Programm, d.h. Zugriff auf File-Tools der DOS-Libs, d.h.
    Prozesse gehören für meine Begriffe in die DOS-Lib (oder eine der "höheren" Lib). Deshalb verstehe
    ich auch nicht, warum darüber in den alten RefManuals (habe nur Version1) kein Kapitel mit
    ausführlichen Erklärungen zu finden ist. Aber egal, wenn man sich durch die Funktionen hangelt,
    dann kann man sich die Erklärungen auch selber zusammenstellen:


    - die Task-Funktionen der EXEC-Lib erzeugen Tasks auf Lowlevel-Ebene (Programme werden hier nicht
    eingelesen!), wird in den RefManuals zum ROM-Kernal gut erklärt!
    - (DOS-Lib: File-Tools um ein Programm einzulesen, in den entsprechenden RefManuals beschrieben)
    - Process-Funktionen der DOS-Funktion lesen ein Programm ein und erzeugen einen Prozess
    (Lesen: aus ausführbaren Programm Segmentliste mittels LoadSeg() erzeugen, diese wird an
    createProc() übergeben)
    (Bem: der Name in createProc ist der Prozessname, nicht der Filename. Er dient zur Identifizierung)
    - (es gibt noch eine higherlevel-Funktion zum direkten Starten von Programmen, ähnlich so wie es
    CLI macht)


    Im Prinzip also nicht ganz so komfortabel wie z.B. in Win32 oder in Linux, aber noch leicht händelbar.
    Für Entwickler von Compilerwerkzeugen eigentlich sogar besser, denn hier können alle Segmente
    im Speicher generiert und per createProc aufgerufen werden. Gefällt mir sehr gut.

  • kein Problem.


    Genau so :)


    Grundsätzlich ist ein Prozess eine Untermenge von einem Task (Task plus Prozessstruktur für dos).


    Ich habe die Infos übrigens damals IIRC entweder aus den Amiga-Magazinen oder aus dem Amiga Intern Buch.


    Falls du übrigens von der WB gestartet Programme bauen möchtest, ist das hier noch hilfreich:
    http://amigadev.elowar.com/rea…anual_guide/node0248.html


    Hier kann man die ToolTypes auslesen und man muss auch diese Msg abholen mit GetMsg(), falls das pr_CLI Feld == NULL ist (d.h. das eben, dass dasProgramm von WB aus gestartet wurde und nicht nicht vom CLI).

  • Starup+Shutdown-Sequenzen finden sich auch im EXEC-ROM Reference (die dicken Paperbackbücher),
    allerdings nicht mit den notwendigen Erklärungen wie bei deinem Link. Ohne die ist das irgendwie wie
    ein Blindflug.


    Nachdem ich die letzen Abenden auch noch die Start-Sequenz (EXEC/BootROM/etc.) überflogen habe,
    bin ich vom Amiga noch mehr begeistert. Sei's zum einen, weil alles so schön aufgeräumt und strukturiert
    erscheint, es ist auch plus/minus alles enthalten, was in einem Standardbuch wie z.B.Tanenbaum zu
    finden ist (Prozesse, Pipes, Semaphoren, ...). Selbst ein "modernes" Filesystem mit Locks für geöffnete
    Dateien ist zu finden (wie geil ist das denn!). Und nicht nur das, es ist auch schön aufgeräumt. Z.B.
    sind viele Strukturen in Listen gefasst und mit einfach zu verstehenden APIs gekapselt.


    Ich hatte in den letzen Wochen noch andere Systeme überflogen, wie z.B. Wirth's Oberon-System
    (OS+RISC-CPU auf FPGA-Basis), die Schönheit (subjektiv!) der Implementierung/Struktur habe ich
    bei jedem dieser Systeme vermisst (auch Mac-Classic: oje-oje, und das bei einem wesentlich höheren
    finanziellen- und HR-Overhead).

  • Ich fand damals das Amiga System auch sehr gut :) Vor allem habe ich damals mit C64 und Amiga das programmieren gelernt.


    Etwas OT:
    Im Vergleich zu Windows finde ich besonders gut, dass man die Hardware noch ganz gut nutzen kann (eben auch systemkonform).
    Bei Windows fand ich besonders schlecht, dass ein Warten auf den Vertical Blank mit Polling funktioniert und eben nicht über ein Interrupt (wie beim C64 oder Amiga).


    Außerdem fand ich bei Windows besonders nervig, wenn man z.B. 1ms warten möchte (mit sleep() ), den System-Tick erst umstellen musste mit irgendeiner "versteckten" Funktion, sonst wurde es aufgerundet, wie auch immer der System-Tick eingestellt war und der war je nach geladenen Kernel unterschiedlich zwischen 10 ms und 20 ms. Das war zumindest unter Windows XP oder 2000 der Fall (Linux war hier erheblich besser). Ich hoffe, dass hat sich mittlerweile verbessert. Andererseits hat sich der Zugriff auf Hardware deutlich verschlechtert. So was wie PowerStrip oder ähnliches um die Bildschirmfrequenz einzustellen gibt es ja nicht mehr. Und Treiber-Programmierung ist nicht einfach und mal abgesehen davon muss es ja mittlerweile von MS zertifiziert sein - Gut - Im Allgemeinen braucht man das nicht, aber ich fühle mich dadurch schon sehr eingeschränkt in den Möglichkeiten eben ein C64 Emulator perfekt zu programmieren. Siehe u.a. einen alter Beitrag von mir: ruckelfreier WinVice (Timing-Problem) / funzt VSync?


    Grundsätzlich finde ich AmigaOS hierbei deutlich besser - Andererseits hat man unter AmigaOS leider kein Speicherschutz, was man bei jedem modernen OS hat.