Hello, Guest the thread was called2.3k times and contains 15 replays

last post from cbmhardware at the

Chameleon USB-CrossDev

  • Da ich mich eben damit beschäftig habe, lege ich mal dieses Thema an, um eine kleine Sammlung nützlicher Fakten zu sammeln. Man vergisst das immer wieder allzu schnell.


    gEDIT füttert das Chameleon (Linux)


    Ich benutze den ACME Cross-Assembler und transferiere das PRG immer wieder in den echten C64. Dazu wird die USB-Verbindung des TC64 verwendet. Hier eine kurze Anleitung für einfache PRGs ab $0800 mit gEDIT.


    1. Unter Einstellungen -> Plugins -> Externe Werkzeuge aktivieren
    2. Danach Werkzeuge -> Manage External Tools -> "+"


    tc64_gedit.jpg


    Bei den neuen Versionen von gEDIT muss das Programm nicht mehr vorab speichern. Das macht es endlich selbst.


    Hier ist das Bash-Script zum Mitnehmen:

    Shell-Script
    1. #!/bin/sh
    2. clear
    3. acme $GEDIT_CURRENT_DOCUMENT_DIR/$GEDIT_CURRENT_DOCUMENT_NAME
    4. filename=${GEDIT_CURRENT_DOCUMENT_NAME%.*}
    5. chacocmd --addr 0x0800 --writemem $GEDIT_CURRENT_DOCUMENT_DIR/$filename."prg"


    Das kleine Beispiel unterliegt einer Beschränkung: der ASM-File und das PRG müssen den gleichen Dateinamen verwenden !
    Mit ACME muss dann mit dem Parameter "plain" kompiliert werden, damit keine zwei Byte Start-Adresse eingebaut wird. Wenn man mit "cbm" kompilieren möchte, muss "--addr 0x7fe" verwendet werden.


    Ein kleines Beispiel-Programm zum Testen:

    Code
    1. !to "machwas.prg",plain
    2. *= $0800
    3. !byte $00,$0c,$08,$0a,$00,$9e,$32,$30,$36,$33,$00,$00,$00,$00
    4. *=$080f
    5. inc $d020
    6. rts



    Und zum Nachschauen, ob auch etwas angekommen ist oder sich per Laufzeit verändert hat: chacocmd --addr 0x0800 --dumpmem


    Verbesserungsmöglichkeiten: Man könnte per Bash-Script die !to-Zeile im Source auswerten und auch verschiedene Dateinamen verwenden. Und vielleicht auch "*=". Vielleicht möchte ja jemand ?


    -------8<-------8<-------8<-------8<-------8<-------8<-------8<-------8<-------8<-------8<-------


    Was noch im Moment in meiner Terminal-History so zu finden war:


    chacocmd --addr 0x00c00000 --len 0x80000 --readmem georam512.img transferiert 512kb aus der Georam ins Image. Per "writemem" kann man natürlich auch in die andere Richtung transferieren.


    Mit chacocmd --addr 0x00c00000 --dumpmem kann man nachschauen, ob da überhaupt etwas drin ist.



    Soviel mal vorab.Vielleicht hat noch jemand etwas ? Letztens wollte mir schon wieder jemand klarmachen, dass das TC64 kein USB-Host ist und der USB-Transfer nur zum Flashen des Cores zu gebrauchen wäre. Soviel dazu. ;)

  • c64funker: Prinzipiell ja. Besser ist dafür aber imo die Speicherkarte geeignet, die man ins TC64 stecken kann, um dann aus dem File-Browser direkt zu starten.


    Mac Bacon: Nimm die erste $00 aus der Basic-Zeile und verwende $0801. Wenn es glücklich macht. ;)

  • Die einfachste Möglichkeit ist das Kopieren auf eine Speicherkarte am PC. Die steckst Du dann ins Chameleon und kannst per Filebrowser auswählen.


    Wenn Du es unbedingt per USB versuchen möchtest: C64 ausschalten, TC64 einstecken und die USB-Verbindung zum PC herstellen. C64 einschalten und ins Basic wechseln.


    Am PC:
    chacocmd --addr 0x07ff --writemem i-ball.prg , danach List und die SYS-Zeile direkt ausführen. RUN ging bei mir nicht. Ich habe die Datei mal angehängt, damit es bei Problemen nachvollziehbarer bleibt.


    Man findet die meisten Programme im Web als D64-Image. Das geht dann wirklich nur mit einer Speicherkarte. Am PC das D64 auf eine Speicherkarte kopieren, ins TC64 stecken, den Filebrowser aufrufen und auswählen.


  • Verbesserungsmöglichkeiten: Man könnte per Bash-Script die !to-Zeile im Source auswerten und auch verschiedene Dateinamen verwenden.


    Shell-Script
    1. #!/bin/sh
    2. QUELLE=$GEDIT_CURRENT_DOCUMENT_DIR/$GEDIT_CURRENT_DOCUMENT_NAME;
    3. ZIEL=`grep '!to' $QUELLE | sed 's:.*"\(.*\)".*:\1:'`;
    4. acme -l LABELS.asm -v4 $QUELLE;
    5. exomizer sfx 0x0810 -o $ZIEL $ZIEL;
    6. codenet -n 192.168.1.164 -x $ZIEL;


    So mach ich's mit Codenet. Die ersten zwei Zeilen können natürlich auch dafür genommen werden. *= auslesen bringt mir nichts, weil das ja nicht immer zwangsläufig die Start/Einsprungsadresse ist. Den exomizer Parameter ändere ich daher je nach Projekt manuell - das reicht. Bei größeren Sachen nehme ich ohnehin make.

  • Mac Bacon: Nimm die erste $00 aus der Basic-Zeile und verwende $0801. Wenn es glücklich macht. ;)


    Eigentlich geht es mir gar nicht um die genaue Adresse, sondern um den Basic-Header an sich: Wenn eine zusätzliche Null davorsteht, ist es nämlich keiner mehr.
    Natürlich merkt man das nicht, wenn man immer mit ",8,1" lädt - aber ein Programm mit Basic-Header, das man nicht mit ",8" laden kann, ist schlicht und einfach kaputt.


    Code
    1. QUELLE=$GEDIT_CURRENT_DOCUMENT_DIR/$GEDIT_CURRENT_DOCUMENT_NAME


    Bei

    Code
    1. QUELLE="$GEDIT_CURRENT_DOCUMENT_DIR/$GEDIT_CURRENT_DOCUMENT_NAME"


    funktioniert es auch mit Leerzeichen in den Verzeichnis-/Dateinamen. Die anderen Zeilen müssten natürlich ebenso abgeändert werden.

  • Naja, die Basiczeile lässt sich leicht anpassen und die Adresse auch.


    funktioniert es auch mit Leerzeichen in den Verzeichnis-/Dateinamen. Die anderen Zeilen müssten natürlich ebenso abgeändert werden.


    Für DAS und gemischte Groß-/Kleinschreibung sollte man öffentliches Auspeitschen einführen. ;)


    c64funker: Im Standalone-Betrieb ist der USB-Stecker iirc nur die Stromversorgung.

  • Ich hatte das *nicht am C64* zuerst übersehen.


    Gesammelte Werke zum Thema gibt es demnächst hier: http://www.cbmhardware.de/show.php?r=1&id=45


    Die Basic-Header werde ich dann auch berücksichtigen.


    spider-j: Danke für den Quelltext. Ich werde demnächst mal versuchen, ob ich damit die Parameter extrahieren kann.

  • Quote

    chacocmd --addr 0x00c00000 --len 0x80000 --readmem georam512.img transferiert 512kb aus der Georam ins Image. Per "writemem" kann man natürlich auch in die andere Richtung transferieren.


    diverse andere interessante addressen findet man btw in dem chameleon.h im developer verzeichnis des releasearchivs. nur bei den disk images aufpassen, die sollte man lieber nicht von "aussen" modifizieren.

  • Was mir nachher noch eingefallen ist: die Basic-Header ist beim Transfer ins TC64 von keiner Bedeutung, da sowieso keine Pointer gesetzt werden. Und wenn man nachher mit dem Monitor abspeichert, kann man
    immer noch $0801 verwenden. Dann ist es passend auf Card oder Disk.


    Hier schon mal vorab die optimierte Script-Variante für gEDIT. Jetzt wird Dateiname und auch Speicherziel "*=" ausgewertet.


    Shell-Script
    1. #!/bin/sh
    2. clear
    3. acme $GEDIT_CURRENT_DOCUMENT_DIR/$GEDIT_CURRENT_DOCUMENT_NAME
    4. QUELLE=$GEDIT_CURRENT_DOCUMENT_DIR/$GEDIT_CURRENT_DOCUMENT_NAME;
    5. ZIEL=`grep '!to' $QUELLE | sed 's:.*"\(.*\)".*:\1:'`;
    6. MEM=`grep -m 1 '*=' $QUELLE`;
    7. TC64MEM=`expr substr $MEM 4 4`;
    8. chacocmd --addr 0x$TC64MEM --writemem $GEDIT_CURRENT_DOCUMENT_DIR/$ZIEL


    Danke an spider-j für die Unterstützung.