Platinen Cubide für Sinclair QL

  • Ich hab mdump_task als File dem Q-emulator entnommen und mit dem Habi_Image_Editor auf mein IDE Device drauf kopiert.
    Meine Ahnung steigert sich langsam von 0,1% auf 0,11% :)


    Ich denke mal deinen "Code" muss ich so Zeile für Zeile auf dem QL einhacken.
    Mal schaun.

    Auf alle Fälle Danke für deine schnelle Hilfe.


    HELP 2:
    Vieleicht kanns kurz noch deine vier Zeilen erklären was sie tun.


    mfG. Klaus Loy

  • Code
    len = FLEN(\win1_mdump_task)
    x = RESPR (len);
    LBYTES win1_mdump_task,x
    SEXEC win1_mdump_exe,x,len,2048
    1. Bestimt die Länge der Programmdatei (normalerweise gibt man FLEN die Kanalnummer einer geöffneten Datei an - Der Backslash ersetzt das durch einen Dateinamen)
    2. reserviert so viel Speicher, dass die Programmdatei reinpasst, liefert die Startadresse in x zurück
    3. Lädt die Binärdatei in diesen reservierten Speicherbereich
    4. Speichert len Bytes ab der Adresse x als executable file, gibt dem Executable einen Data Space von 2048 Bytes.


    Dann sollte ich vielleicht noch erklären, was Dataspace beim QL überhaupt bedeutet: Das ist, kurz gesagt, der Platz, den QDOS einem Programm für Stack und Heap zur Verfügung stellt - dieser Speicherbedarf steht im Dateiheader, und genau der ist bei dir verlorengegangen - Daher die Fehlermeldung. Das muss im Header stehen, und Stack und Heap darf beim QL nicht in der Programmtatei reserviert werden - Denn man kann auf einem Stück Binary, das im Speicher steht, mehrere unabhängig voneinander laufende Jobs starten - Die benutzen dann alle dieselben "Programm-Bytes", aber brauchen jeder natürlich seinen eigenen Stack und Heap. SEXEC stellt genau diesen Header wieder her.


    (Und ja, das ist alles dafür gedacht, dass du die Zeilen nacheinander im Direktmodus eingibst - Du kannst sie natürlich auch mit einer Zeilennummer eingeben und ein Programm draus machen, das du mit RUN laufenläßt)

  • Code
    // len = FLEN(\win1_mdump_task)     <-- geht nicht, da bekomme ich Syntaxerror
    // len ist scheinbar ein Schlüsselwortr. 
    // aber auch len = FLEN(\win1_mdump_task) // geht auch nich 
    // also hab ich gemacht: Filelänge des Windowsfiles in Byte ermittelt = 24800
    l = 24800
    x = RESPR (l);                 // Speicher reservieren, oder so ähnlich
    LBYTES win1_mdump_task,x       // mdump_task in Speicher laden 
    SEXEC win1_mdump_exe,x,l,2048  // Speicherbereich als_exe, mit Header schreiben 
                                   // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                                   // Meine Interpretation, was der Code macht. 

    Dadurch wurde ein File mdump_exe auf win1_ angelegt.

    Aber vermutlich ist nun der Inhalt von mdump_exe noch unsinniger.


    Hier meine beiden Files auf der IDE: beide_Files.zip


    Feierabend


    mfG. Klaus Loy

  • Anscheinend hast du kein Toolkit 2. (Dann brauchst du aber, denn das gehört auf einen QL ;) )


    Ansonsten hast du alles richtig gemacht - Das mdump_exe sollte sich eigentlich ausführen lassen. Sollte das nicht gehen, musst du vielleicht den Dataspace (die Zahl 2048) größer machen.

  • Oh Mann, das sind alles die Sachen, die mir den Spaß am QL nahezu verleidet haben. Bis ich dann mal das Toolkit als Autostart in einer Batch geladen hatte...

    Ich hab auch noch ein paar kleine Platinen, mit denen man ein ROM gegen ein EPROM tauscht und dann das Tookit im ROM hat. Hab ich aber noch nicht gelötet/getestet. Kann davon dann auch gern welche abgeben.

    Mit dem QL werde ich irgendwie nicht warm.


    Gruß, Rene

  • Also, QL ist schon ein "schlimmes" Zeug.
    Für jemanden, der sich auskennt ist das alles normal.
    Aber zumindest ist es interessant.

    Und mein KnowHow zum QL ist ja jetzt schon bei 0,111% :)


    1. Wo könnte ich Toolkit her bekommen ? <Internet>
    Und vor allem wie bekomme es aktiv, vermutlich auf mein IDE drauf packen und dann "irgendwie" starten.


    2. Was ist Toolkit und wie funktioniert es ?
    Vermutlich hängt es sich in das Basic mit rein und erweitert den Befehlssatz.


    3.
    > Sollte das nicht gehen, musst du vielleicht den Dataspace (die Zahl 2048) größer machen.

    Was ist Dataspace ?
    Ist das ein Bereich in dem die Variablen des Programms liegen ?
    Bzw. Heap Speicher für alloc, malloc, ...
    Oder hat es mit dem stack zu tun.


    mfG. Klaus Loy

  • Also, QL ist schon ein "schlimmes" Zeug.

    Beim PC jongliert jeder bereitwillig mit "AUTOEXEC", "CONFIG", HIMEM, UMBs, IO-Addressen, Interrupts und was auch immer, forscht stundenlang nach ein paar Bytes mehr DOS-Speicher und warum seine Soundkarte nicht läuft, findet das ganz normal und hat am Schluß ein System, das auch nicht "schlauer" ist als ein CP/M-Rechner von 1975....

    Am QL - einem im Vergleich dazu extrem komplexen (auch von der Leistung her) Betriebssystem - müsst ihr nur ein paar logische BASIC-Befehle eingeben und stellt euch gleich an ;)

    1. Wo könnte ich Toolkit her bekommen ? <Internet>
    Und vor allem wie bekomme es aktiv, vermutlich auf mein IDE drauf packen und dann "irgendwie" starten.

    Da, z.B: https://www.kilgus.net/2017/03/19/toolkit-ii-the-sequel/

    Du willst die "RESPR-Version", die auch genauso geladen wird:


    10 a = RESPR (<Dateilänge des Toolkit-Binaries>)

    20 CALL a


    Dann stehen dir ein paar hundert neue Basic-Befehle zur Verfügung, das Handbuch dazu gibt's z.B. hier: http://www.dilwyn.me.uk/pe/TK2.pdf


    2. Was ist Toolkit und wie funktioniert es ?
    Vermutlich hängt es sich in das Basic mit rein und erweitert den Befehlssatz.

    Genau. Das Toolkit 2 ist eine der wichtigsten Erweiterungen für den QL, die man einfach haben muß - Es eröffnet das gesamte Potential des Betriebssystems für den Zugang von BASIC aus - Ohne benutzt man vielleicht 60% davon.


    > Sollte das nicht gehen, musst du vielleicht den Dataspace (die Zahl 2048) größer machen.

    Was ist Dataspace ?
    Ist das ein Bereich in dem die Variablen des Programms liegen ?
    Bzw. Heap Speicher für alloc, malloc, ...
    Oder hat es mit dem stack zu tun.

    Im Prinzip ja - Hab' ich ja oben beschrieben: Es ist der Speicherbereich, den das System einem Prozeß ("Job") für Stack und Heap (BSS) zur Verfügung stellt. Normalerweise muss man sich darum gar nicht kümmern, denn die Größe dieses Speichers hat der Programmierer beim Entwickeln bestimmt und in den Header reingeschrieben - Nur ist der bei dir ja leider verlorengegangen und genau diese Zahl willst du wiederherstellen.


    Weil wir nicht wissen, wieviel das ursprünglich war, müssen wir schätzen, wieviel dem Programm wohl zur Verfügung stehen muss - so zwischen 2 und 16k sind normal, da kann man ein bißchen rumprobieren.


    Eigentlich müsste mit deiner Vorgehensweise von gestern schon ein lauffähiges "mdump_exe" entstanden sein - hast du das mal ausprobiert?

  • danke tofro, für die auführliche Erklärung.
    mein Wissenstand bezüglich QL liegt nun bei geschätzt 0,211%


    > Also, QL ist schon ein "schlimmes" Zeug.
    ok, mag ja sein, dass das Alles beim PC auch kompliziert war.
    Aber QL ist schon etwas "schräg" Sinclair halt.
    Ich hoffe, dass ich dich mit diesen "Sprüchen" nicht zum Feind mache,
    Weil, ich werde ja weiterhin vermutlich Fragen zu diesem Thema stellen.


    mfG. Klaus Loy

  • > Also, QL ist schon ein "schlimmes" Zeug.
    ok, mag ja sein, dass das Alles beim PC auch kompliziert war.
    Aber QL ist schon etwas "schräg" Sinclair halt.
    Ich hoffe, dass ich dich mit diesen "Sprüchen" nicht zum Feind mache,
    Weil, ich werde ja weiterhin vermutlich Fragen zu diesem Thema stellen.

    Achquatsch. Wer meinen Lieblingsrechner nicht gut findet, versteht halt (noch) nicht genug davon. Aber man kann ja erzogen werden ;)

  • ... da ich ja ein QL ROM-Modul da liegen hatte, habe ich eben mal das TOLKIT II auf ein 27128 gebrannt. Siehe da jetzt startet der QL mit TOOLKIT II und mit QubIDE.

    Nur leider mein mdump_exe geht noch immer nicht.
    Mal schaun jetzt werd ich mal das _exe nochmal mit einem Header mit 4096 Byte workspace machen.

    Vieleicht geht es ja dann.

    Leider weiß ich nach wie vor nicht mit welchen Parametern es zu starten wäre.
    Ich bin mir nämlich ziemlioch sicher, dass es Parameter braucht.

    mfG. Klaus Loy


  • Leider weiß ich nach wie vor nicht mit welchen Parametern es zu starten wäre.
    Ich bin mir nämlich ziemlioch sicher, dass es Parameter braucht.

    mfG. Klaus Loy

    Nein, mdump will keine Parameter, sondern fragt danach. Die "Fehlerhafter Parameter"-Fehlermeldung ist ein Ergebnis des zerstörten Fileheaders.

  • Also, mdump tut noch immer nichts. Ursache nach wie vor unklar.
    Hab gestern dann noch ein neueres TK2 v2.34 ROM version auf das EPROM gebrannt.
    Wenn ich versuche mdump_task zu starten, dann kommt "Fehlerhafter Parameter", ok, weil vermutlich Header fehlt.

    Wenn ich mdump_exe starte, dann passiert einfach garnichts.

    Den Workspace hatte ich schon mal auf 4096 erhöht, d.h. _exe gelöscht und File neu angelegt.

    Mal schaun, wie ich da weiter forsche.
    Ich sollte den mdump mal im Q-Emulator testen.


    Gibt es eigentlich einen guten Debugger mit dem man mal ein bischen rum steppen könnte.


    >Nein, mdump will keine Parameter, sondern fragt danach. ...


    Jetzt muss ich sagen ich hab mir den mdump mal in einen Disassembler rein gezogen.
    Da war eine Funktion open, die einen Parametrstring (Filename) in Register XYZ erwartet.
    Diese Funktion stand ganz am Anfang, daher dachte ich, es müsse einen Parameter geben,

    der bereits am Anfang von der Kommendozeile übergeben werden müsste.

    Aber Ahnung von QL-Assembler Programmierung ist bei mir auch nahe 0%


    mfG. Klaus Loy