Krill Loader

Es gibt 113 Antworten in diesem Thema, welches 19.133 mal aufgerufen wurde. Der letzte Beitrag (30. Juli 2025 um 10:24) ist von TD1334.

  • Docker läuft lokal, es wurde erfunden, um Versionsabhängigkeiten verschiedener Programme sauber zu trennen.

    Ist eine Linux-Erfindung, geht aber mit implizit eingebauter VM auch unter Windows.

    Obwohl mir zugetragen wurde, dass man den Loader nativ unter Windows bauen kann, sollte so eine Bash-artige Shell mit Docker unter Windows auch gut gehen.

    Die Kollegen hier nutzen recht viel das WSL (Windows Subsystem for Linux). Ich renne auf der Arbeit immer noch mit VirtualBox rum; daheim alles auf macOS (ausser die RasPis), und auf der Arbeit WIndows für Outlook und Teams, VirtualBox Ubuntu um echte Arbeit zu machen. ;) Docker verwenden wir vor allem unter gitlab um unsere vielen Targetplattformen einigermaßen in den Griff bekommen zu können.

    Vielleicht probiere ich den cc65 auch mal aus... Bisher habe ich mich an C64 Programmierung noch nicht rangetraut. Ich bin mit x86 aufgewachsen....

    Unter Win7 kann ich WSL vergessen.

    Deshalb verwende ich VM Ware Desktop.

    Aber SUN VirtualBox hatte ich auch oft in verwendung bis ich bemerkte das die Images nach einiger Zeit korrupt wurden und nicht mehr sauber liefen und ich zu selten ein Backup machte (wegen Speicherplatz)

    mit CC65 habe ich auch keine Erfahrung. Wüsste auch nicht warum man C am C64 braucht wenn man Basic/ASM hat...

    Vorallem wenn man weiß wie Fett eine C App sein kann mit all den Libraries die man rumschleppen muss.

    Genau das falsche auf einer 8bit machine die lächerliche 64K ram hat.

    Alleine hello World mit der Stdio Lib ist lächerlich gross im vergleich zu ASM (einige Bytes)

  • Apropos NUFLI

    Da wird doch heftig im DD00 Register herum gepoked - Hat das auf deinen Loader auswirkungen ?

    Es gibt

    Code
    .define IDLE_BUS_LOCK             0 ; C-64/128 only: allow for arbitrary $DD00 writes ($00-$FF) when the loader
                                        ; is idle (good for raster routines with LDA #value:STA $D018:STA $DD00, e.g.)

    diese Option.

    Während des Ladens ist es eine ganz schlechte Idee, in $dd00 irgendwas anderes als 0-3 für die Wahl der VIC-Bank reinzuschreiben. Die oberen 6 Bits müssen zwingend 0 sein.

  • Die Kollegen hier nutzen recht viel das WSL (Windows Subsystem for Linux). Ich renne auf der Arbeit immer noch mit VirtualBox rum; daheim alles auf macOS (ausser die RasPis), und auf der Arbeit WIndows für Outlook und Teams, VirtualBox Ubuntu um echte Arbeit zu machen. ;) Docker verwenden wir vor allem unter gitlab um unsere vielen Targetplattformen einigermaßen in den Griff bekommen zu können.

    Vielleicht probiere ich den cc65 auch mal aus... Bisher habe ich mich an C64 Programmierung noch nicht rangetraut. Ich bin mit x86 aufgewachsen....

    Unter Win7 kann ich WSL vergessen.

    Deshalb verwende ich VM Ware Desktop.

    Aber SUN VirtualBox hatte ich auch oft in verwendung bis ich bemerkte das die Images nach einiger Zeit korrupt wurden und nicht mehr sauber liefen und ich zu selten ein Backup machte (wegen Speicherplatz)

    mit CC65 habe ich auch keine Erfahrung. Wüsste auch nicht warum man C am C64 braucht wenn man Basic/ASM hat...

    Ich habe die aktuelle VM seit 4.5 Jahren im Dauerbetrieb auf meinem Arbeitslaptop. Hatte da bislang noch keine Probleme. So 1-2x pro Jahr spiegel ich sie auf eine externe Festplatte. Es ist ja auch nichts drauf, was nicht in irgendeinem Repo gesichert ist, aber das Aufsetzen mit allen Tools wäre einfach recht zeitaufwändig.

    C am C64: naja, die Hürde wäre für mich kleiner, da ich bislang kein 6502 Assembler kann, lediglich x86 kann ich noch etwas. Ich werde es demnächst mal ausprobieren und Feedback geben.

    C64C mit 8580, C64 mit 6581 und C64G mit ARMSID,

    C16, VC20, PET3016+32K, 3x1541, 2x1541-II, Pi1541, Philips CM8833-II, 1084S

    Bitte melde dich an, um diesen Link zu sehen.

  • mit CC65 habe ich auch keine Erfahrung. Wüsste auch nicht warum man C am C64 braucht wenn man Basic/ASM hat...

    Wie gesagt, es wird nur der mitgelieferte Assembler ca65 benötigt, der C-Compiler is da komplett Wurscht.

    Und ca65 ist nunmal einer der wenigen 6502-Assembler, die für große Projekte wirklich geeignet sind.

  • Apropos NUFLI

    Da wird doch heftig im DD00 Register herum gepoked - Hat das auf deinen Loader auswirkungen ?

    Es gibt

    Code
    .define IDLE_BUS_LOCK             0 ; C-64/128 only: allow for arbitrary $DD00 writes ($00-$FF) when the loader
                                        ; is idle (good for raster routines with LDA #value:STA $D018:STA $DD00, e.g.)

    diese Option.

    Während des Ladens ist es eine ganz schlechte Idee, in $dd00 irgendwas anderes als 0-3 für die Wahl der VIC-Bank reinzuschreiben. Die oberen 6 Bits müssen zwingend 0 sein.

    Danke Krill. D.h ich muss den Viewercode vom Mufflon jetzt untersuchen ob da mehr als 3 Bit gesetzt werden ...

  • Aber es gibt mit Default-Optionen vorgebaute Binaries im Build-Ordner: loader-c64.prg, install-c64.prg und die loadersymbols-c64.inc, welche Einsprungpunkte und andere Loader-Symbole für die Einbindung in andere Assembler definiert.

    Heisst dann in kurz ich brauche die Install-c64.prg auch per Bin Include ?

    War ja klar das Nufli mehr als die 3 bit umschaltet. Soll ja ned einfach sein :wink:

  • so das C64 Studio hat fehlerfrei included.

    Habe gesehen das der Loader bei $0200 eingeblendet wird....

    Wie gehts jetzt weiter ?

    Also wie rufe ich das Programm bei $0200 nun auf das ich eine Datei laden kann an eine bestimmte Adresse ?

  • Steht glaube in der Readme. :)

    Ansonsten hat loader.inc auch etwas Prosa zu den Funktionsparametern.

    Und die install-Funktion sollte vor dem Laden aufgerufen werden, ja.

  • Ok brauche ich den Installl-c64 auch ? (diese $4000 Teil?)

    Ja brauche ich für die Floppy - gerade im Readme verstanden:

    jsr install; subsequent loader calls will only work on the active drive as

    ; denoted by FA = $ae

    bcs error

    ; loader installed successfully

    zu dem INC File:

    loader_zp_first = $e0

    loadaddrlo = $e0

    loadaddrhi = $e1

    decdestlo = $e2

    decdesthi = $e3

    loader_zp_last = $f5

    Also da sage ich wo es hin soll ? Irgendwie ist die Prosa ein wenig unverständlich

    E2/e3: LoadAdr Lo/hi = wo es im Speicher hingeladen werden soll das Bild das ich laden will ?

    in E0 / e1 übergebe ich dann was ?

  • loader/include/loader.inc ist eine andere Datei als loadersymbols-c64.inc.

    Ist ja aus der Loadersymbols - brauche ich die Loader.inc auch ? Ich hoffe nicht denn diese Macros versteht mein ACME Assembler leider nicht...

    bleibt im Vice nach jsr $4000 hängen....

    Endlosschleife wie es aussieht..

  • Der Installer nutzt KERNAL-Calls und sollte aufgerufen werden, bevor im Lowmem rumgewurschtelt wird.

    Und guck mal, ob der Code auch wirklich bei $4000 im .PRG landet.

    Die Makros und vor allem Kommentare in loader.inc sollen hier nur dem Verständnis dienen.

    Äquivalente für den Assembler der Wahl einzutippen wäre dann die Übung für später.

  • Ok- ausser FA,FB,FC,FD verwende ich im Lowmem keine Variablen

    und der Code bei $4000 und 0200 ist da...

    und 4000:

    schaut gut aus finde ich...

    habe bemerkt wenn ich den LoaderC64 nach $0200 schiebe geht der bis $03f0

    und überschreibt den IRQ bei 0314 ?

    setzt ihn auf $2002 ? anscheinend habe ich beim copy was falsch gemacht....

    Habe jetzt im C64 Vice einfach den Loader im Monitor geladen

    (C:$02b7) l"loader-c64.prg" 0

    Loading loader-c64.prg from 0200

    to 03EF (1ef bytes)

    (C:$02b7)

    Wenn ich nach $0314 schaue steht da:

    >C:0314 8e 02 dd c8 f0 0d 4a 4a ......JJ

    und da ist:

    C:028e DD 20 70 CMP $7020,X

    .C:0291 02 JAM

    Jam ist nicht gut !

    Habe beide aus dem BUILD verzeichnis von 184 entnommen und in mein D64 Image verschoben...

    Ist der Build nicht alleine Lauffähig wenn man das nicht alles neu assembliert ?

    Jammt immer bei $0291

    erstes rufzeichen ist Kopieren nach $0200

    zweites rufzeichen ist kopieren nach $4000

    drittes wäre nach intall (jsr 4000) soweit kommt er nicht

    und viertes wäre nach dem Laden einer Datei , soweit kommt er nicht...

  • In Demos ist es eher üblich, die Hardware-Interrupt-Vektoren bei $FFFx zu nehmen, und $0200-$0400 ist der ideale Ort für einen Loader. :)

  • ja du überschreibst ihn ja mit Adresse 028e und das führt direkt zum JAM !

    Oder wolltest du sagen ich soll $01 auf 34 schalten und nicht den 0314 IRQ nehmen und stattdessen den FFFE ?

    Sag mir bitte einfach wie das zu verwenden ist.

    Du siehst ja meinen Code, ich habe den Loader, den Installer verschiebe alles an die richtige Position und rufe $4000

    Oder brauche ich den loader gar nicht auf $0200 weil dieser vielleicht von $4000 Routine selbst hinkopiert wird ?

    Da das "loader Test" funktioniert, kann ich da den $0200-03f0 Teil heraus nehmen und verwenden oder hat der Referenzen in deinen Democode weiter oben im Speicher ?

  • Das dürfte für eine IRQ-Endlosschleife sorgen, wenn der Interrupt nicht bestätigt wird.

    So ein paar Threads über Grundlagen der Interrupt-Programmierung ohne KERNAL gibt's hier bestimmt schon.