Amiga: Democode läuft im Assembler aber nicht als eigenständiges Programm?

  • Dieses hier läuft sowohl im seka Assembler, als auch als assembliertes Programm von der Shell:

    Amiga Machine Code Letter I | Mark Wrobel
    In this post we will take a look at the first letter of the Amiga machine code course. The letter is freely available here:…
    www.markwrobel.dk


    Dieses hier läuft im Assembler (seka als auch asmtwo), aner NICHT als abgespeichertes Programm:

    Amiga Machine Code Letter II - Part 2 | Mark Wrobel
    We continue where we left of in the previous post. Letter II can be found here. DMA channels DMA stands for Direct Memory Access and the channels allows the…
    www.markwrobel.dk


    Als separates Programm, wird nur der Bildschirm blau, nach Maustaste kommt die Workbench wieder, hängt aber.


    Ich vermute, da fehlt dem separaten Programm noch Init-/Aufräumcode, den der Assembler erledigt?


    Kennt sich jemand damit aus?


    VG Peter

    github.com/petersieg

  • Das liegt doch sicher daran, dass mit

    Code
    #$4000, $DFF09A


    Die Betriebssystem-Interrupt ausgeschaltet werden.


    Code
    #$C000, $DFF09A

    Damit dann wieder an....

  • Nicht umsonst ließen sich die meisten Spiele nur durch einen Hard-Reset beenden. Da fehlt nicht nur das Einschalten der Interrupts, sondern ein RethinkDisplay() oder ähnliches (da gibt es verschiedene Level im OS), um diesen illegalen Eingriff aufzuräumen. Ich nehme an, dass der Assembler umfangreichere Sachen macht,um sowas aufzufangen: Interrupts wieder herstellen (samt aller Interruptvektoren), Floppy Laufwerke in einen definierten Status bringen, Intuition's Copper- und Blittereinstellungen wieder herstellen usw.


    Auf GitHub findet man Support-Bibliotheken für OS freundliche Demos. Da ist dann so eine Aufräumfunktion meistens mit dabei.

  • Hier:

    1. Starting to Dream in Code | Coppershade
    Developing Demo Effects #1
    coppershade.org

    http://coppershade.org/articles/Code/Articles/ <-- Sehr lesenswert!


    Habe ich weiteren (Startup-)Code gefunden.

    Dann wie ein völlig blindes Huhn, die copperlist dort eingebaut und das Punkte plotten auskommentiert.

    (Ich weiß (noch) nicht, was ich da überhaupt tue)

    Ergebnis nach ca. 10 Fehlversuchen - so läuft es sowohl im Assembler (asmtwo), als auch von der Shell ;)

    (dde0 - ZIP im Anhang).


    VG Peter