Hallo Besucher, der Thread wurde 3,1k mal aufgerufen und enthält 16 Antworten

letzter Beitrag von Krill am

Beim Erstellen eines IRQ-Loader tritt ein Fehler auf

  • Hi an alle


    Also irgendwie mag mich der IRQ-Loader nicht. Nachdem ich alle Hinweis von Krill befolgt habe, habe ich es endlich Geschaft den Make-Befehl in Cygwin zu aktivieren.
    Voller Freude wollte ich dann gleich mal einen Loader erstellen mit den angaben von sauhund aus
    Krill Loader (anhand Beispiel: Krawall Deluxe) - grundsätzliche Verständnisfragen


    Zitat


    make clean
    make prg INSTALL=6000 RESIDENT=1500 ZP=e0


    Tja und das Programm fing an zu Arbeiten. Mit dem Abschluss er die Files nicht erstellen konnte.
    Siehe Bild


    Also beim besten willen kann nicht feststellen wo der Fehler sein kann.
    Hoffe das es einer von euch weist, was da schief gelaufen ist.
    Mensch alle bekommen doch das hin, warum will es bei mich nicht klappen. Es ist echt zum Mäuse melken. Allmählich komme ich mir richtig blöde vor, hier immer an die Tür zu klopfen. ?(


    Gruss Drachen

  • Und nachdem das funktionieren wird, schalte allen unnötigen Kram in loader/include/config.inc aus. Dann braucht der Loader auch icht mehr so viele Zeropage-Variablen. Vermutlich brauchst Du nur loadraw oder loadcompd, je nachdem, ob Du die Bilder gepackt oder ungepackt nachladen willst.

  • Hi Krill


    Es ist noch eine Fehler aufgetreten. Es betrifft die Zip-Datei. Er kann keine erstellen, obwohl bei mir Winzip64 im Path steht. Liegt das am Winzp - Programm selbst.
    Ansonsten hat er mir die Dateien


    Zitat


    loadersymbols-c64.inc
    install-c64.prg
    loader-c64.prg


    erzeug. Also wie ich das in meinen Quellcode einbaue ist mir schon klar. Was ich wissen möchte, benutze ich die IRQ - Load-Routine wie die Kernel Load-Routine


    Und statt $ffd5 die "loadraw" von dem Loader verwenden?


    Gruss Drachen

  • WinZip ist eine Windows-native Anwendung mit grafischer Benutzeroberfläche, das hat mit der Unix-Kommandozeile gar nichts zu tun. Es gibt ein Zip-Paket für Cygwin, welches man über den üblichen Setup.exe-Weg installieren kann.


    Guck Dir mal loadersymbols.inc an. Die Idee ist, dass man diese per .include oder ähnlichem Befehl in eigenen Quelltexten inkludiert, so dass man dann die Symbole für die Einsprung- und Zeropage-Adressen direkt nutzen kann.


    Dann muss man beim Start des Programms zunächst install ohne Parameter aufrufen, später geht Laden dann zum Beispiel so:

    Code
    1. ldx #<name
    2. ldy #>name
    3. jsr loadraw


    Der Name muss dabei im Standard-PETSCII-Encoding im Speicher liegen und, ganz wichtig, mit einer 0 enden, weshalb keine Namenslängenangabe nötig ist. Dabei wird an die im Programm gespeicherte Adresse geladen. Will man diese ignorieren und an eine andere Adresse laden, muss man ein paar Dinge konfigurieren und etwas mehr beim Aufruf tun, dazu können wir aber später kommen.


    Jede Loader-Routine liefert OK oder Fehler per Carry-Flag zurück, bei Fehler ist das C-Flag gesetzt und ein Fehlercode steht im Akku. Die Fehlercodes sind in loader/include/diskio.inc aufgelistet.


    Wenn das alles läuft, empfehle ich Dir, die KERNAL-Fallback-Routinen anzuschalten. Damit ist garantiert, dass inkompatible und exotische Laufwerke oder VICE ohne True-Drive-Emulation per Standard-KERNAL-Routinen benutzbar sind. Da diese Laufwerke oft mit eigenen KERNAL-Erweiterungen kommen, laden diese ohne Probleme auch schnell und auf unterbrechbare Weise. Es sind dann aber ein paar Sachen zu beachten, dazu können wir dann aber später kommen. (Ich glaube aber, dass das mit SD2IEC nicht gut funktioniert, weil es zwar eine 1541 simuliert, dann aber keine KERNAL-Erweiterungen hat. Ich werde demnächst das Protokoll noch mal überarbeiten und dann eventuell einen SD2IEC-Firmware-Patch basteln.)


    Was auch noch wichtig ist: Nur ein Laufwerk darf eingeschaltet am Bus hängen. Auch da werde ich demnächst was dran machen, aber noch ist es so.

  • Code
    1. LDY #00 ;Sek.=0 für "PRG laden"
    2. JSR $FFBA ;Parameter setzen (SETPAR)


    Nur zur Sicherheit: Bei Aufruf der Kernelfunktion LOAD wird die angegebene Sekundäradresse nur benutzt, um die Ladeadresse festzulegen: Bei Null wird die explizit in X/Y vorgegebene Adresse benutzt, ansonsten die in der Datei enthaltene Ladeadresse.
    Die tatsächlich zum Laufwerk gesendete Sekundäradresse ist bei LOAD immer Null.


    Ich schreib das hier nur, weil der Kommentar oben im Code in diesem Fall (LOAD) falsch bzw. missverständlich ist. Würde man z.B. das Inhaltsverzeichnis per OPEN und CHRIN-Schleife lesen wollen, wäre der Kommentar korrekt.

  • Ha


    Was habe ich geschrieben, das dürfte kein Problem sein. Da lachen ja die Hühner ?(


    Also allmählich zweifel ich an mir, das ich das irgendwie hin bekomme.
    Wenn ich im Programm den IRQ-Loader-Install aufrufe hängt sich mein Emu auf. Habe es auf den Emu64 probiert sowie auf Vice. Bei beiden Emu geht da dann gar nichts mehr


    Hier mal ein Bild von der Erstellung des Loader. Vielleicht liegt hier der Fehler.



    So hier ein Beispielcode wo ich mal den Loader Testen wollte. Vielleicht liegt ja der Fehler auch hier drinnen



    Aber wie gesagt, zum laden kommt es ja nicht einmal.


    Dann habe ich noch festgestellt, wenn ich die Einstellungen in der config.inc ändern will, bricht er mir bei der Erstellung des Loader mit einen Fehler ab.
    Bin wohl der einzig hier im Forum der es nicht schafft einen einfachen IRQ-Loader zu erstellen. Das ist echt MEGA BLÖDE für mich. :facepalm:


    Das ZIP-Modul habe ich auch installiert, trotzdem kann er es nicht packen, weil er das ZIP-Kommando nicht findet. Siehe Bild.



    Gruss Drachen

  • Code
    1. ;--------- IRQ-Loader-Install
    2. * = install
    3. !bin "e:\relaunch64\sample\Bild\IRQ-Loader\install-c64.prg",,2


    Wenn Du die Sprungtabellen mit JUMP_TABLE = 0 ausgeschaltet hast, liegt die Routine "install" nicht am Anfang von install.prg (also $5000), sondern irgendwo mittendrin.
    Richtig muss es dann heißen


    Code
    1. ;--------- IRQ-Loader-Install
    2. * = $5000
    3. !bin "e:\relaunch64\sample\Bild\IRQ-Loader\install-c64.prg",,2


    Die Performance-Warnungen kannst Du erst mal ignorieren und das später noch rundmachen.
    Die Perl-Warnung ist mein Fehler, ist in der neuen, noch zu releasenden Version gefixt.
    Was das Zip-Paket angeht, keine Ahnung, es müsste eigentlich dasein, wenn Du es per setup.exe installiert hast - als E:\cygwin\bin\zip.exe.

  • Hi Krill


    also das mit dem Zip habe ich jetzt herraus gefunden, habe das zwar bei der Installation mit angegeben aber irgendwie wurde es nicht mit installiert. Also werde ich das ganze noch einmal machen.


    Jetzt zum IRQ-Installer.
    Er hängt sich immer noch auf, sobald ich den IQR-Installer starte.
    Das steht bei mir in der loadersymbols-c64.inc



    und in der Config.inc habe ich folgende Einstellung



    Der rest steht bei mir auf Null.
    Ich gehe jetzt noch ein mal her und deinstalliere den Cygwin noch einmal. Danach installiere ich ihn frisch und lasse ihn auf Laufwerk C. Ich habe ihn bei mir auf Laufwerk E. Vielleicht hilft es ja.


    Gruss Drachen

  • In Deinem Konsolenbild hast du die Zeropage-Variablen nach $e0 gelegt, in Deiner benutzten loadersymbols-c64.inc jedoch sind diese bei $a0. Das ist verdächtig, bist Du Dir sicher, dass die benutzten Dateien alle konsistent sind?


    Cygwin jetzt komplett neuzuinstallieren scheint mir ein wenig übertrieben, eventuell hast Du einfach die Root-Directory-Angabe in setup.exe auf C:\ gelassen oder so, bzw. aus Versehen schon zwei parallele Cygwin-Installationen. Am Ende brauchst du Zip für den Prozess eigentlich auch gar nicht, es packt die drei Dateien nur für Distributionszwecke zusammen, aber eingebunden werden sie eh nur einzeln.

  • Hi Krill


    Habe jetzt einen neuen IRQ-Loader erstellt:

    Zitat


    make prg INSTALL=5000 RESIDENT=c000 ZP=e0


    in der Datei loadersymbols-c64.inc steht folgendes



    Trotzdem, sobald ich den IRQ-Install aufrufe hängt sich der EMU auf.
    Bei Vice 2.2 spuckt er folgende Fehlermeldung aus


    Bin wirklich ein schwerer Fall. Hoffe ich nerve dich damit nicht. Mir ist das selber peinlich, so offt hier nach zu haken. :whistling:


    Gruss Drachen