Beim TC64 v2 GEOS-Programe laden mit dem chacocmd.


  • spacer
  • 378 Views 26 replies

This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

  • Beim TC64 v2 GEOS-Programe laden mit dem chacocmd.

    Hallo, guten Tag.

    Beim TC64 v2 kann man Programme übertragen mit dem chacocmd.
    Ich kann auch schon Daten übertragen vom PC zum GEOS in einen freine Speicherbereich und zurück die ich auch auswerten kann.

    Wie kann man bitte ein GEOS-Programm damit übertragen und wohin, damit ich es dann auf dem Geos vom TC64 v2 benutzen kann?

    Danke.
    Gruss
  • APP_RAM ist von $0400 bis $7FFF. Dort liegt aber in der Regel der DESKTOP.

    Du würdest also ein laufendes Programm überschreiben was unter Umständen dazu führt das ein laufendes GEOS instabil wird oder gar ganz abstürzt.
    Ein Programm kann verschiedene Systemvektoren von GEOS auf sich selbst umlenken. Wenn Du das Programm dann hier überschreibst gibt das nur Probleme... nur so als Hinweis und um der Frage vorzugreifen warum das nicht geht.

    Der BASIC-Modus ist etwas völlig anderes wie GEOS.

    Und davon abgesehen geht das theoretisch eh nur mit kleineren Programmen. Ein Programm in der GEOS-VLIR-Struktur geht damit sowieso nicht weil es Programmteile von Disk nachlädt.

    Wenn Du viel Glück hast geht es evtl., es fehlt dann aber das Initialisieren und das zurücksetzen sämtlicher Systemvektoren.
  • Wenn man weiß, was man tut / tun soll, müsste es damit möglich sein, in eine emulierte REU / GeoRAM ein Diskimage zu schreiben. In Situationen, wo man eine Disk hätte wechseln dürfen dürfte das funktionieren.

    Habs aber nicht ausprobiert.
    ---
    Meine Github-Projekte: github.com/markusC64/
    1541 Ultimate II / Ultimate 64 Firmware Releases: github.com/markusC64/1541ultimate2/releases
    1541 Ultimate II Update instructions: github.com/markusC64/1541ultimate2/wiki
  • Evtl. gibt es doch einen Weg:
    Du bräuchtest ein Dummy-Programm... Z.B:

    ::loop lda #0
    beq :loop
    jmp progstart

    Am besten ab $7FF0 im Speicher. Das Programm startest Du dann vom Desktop aus. Das Programm hängt dann erstmal in einer Endlosschleife, aber GEOS wäre initialisiert.

    Jetzt dein Programm nach $0400 in das TC64 schieben. Um es zu starten reicht es 1byte ab $7FF1 zu ändern:

    Lda #0 -> lda #1....

    Ungetestet... Aber könnte klappen...
  • GEOS-Programme können überall im APP_RAM Speicher liegen, Du mußt nur die Start-/Ladeadresse des GEOS-Programms auf $7FF0 setzen (die Angaben finden sich bei GEOS-Programmen im GEOS-InfoBlock jeder GEOS-Datei).

    Du kannst auch $0400 verwenden, dann darfst Du Dein Programm aber auch erst dahinter in das TC64 schieben, z.B. ab $0410. Der JMP-Befehl in obigen Programm wäre dann "JMP $0410".

    spacer wrote:

    Werde dann nur Daten und Grafiken verschieben die dann von GEOS aus Addressen verwendet werden.
    Mit welchen Daten Du ein laufendes GEOS-Programm (z.B. den DESKTOP) überschreibst ist egal... wenn da eine Systemroutine darauf zeigt gibt es ggf. einen Absturz. Mit dem Dummy-Programm könnte es aber gehen. Oder Du startest am C64 dann ein GEOS-Programm das auf Deine Daten/Grafiken wartet und dann mittels "OK" o.ä. erst beginnt die Daten zu verarbeiten...
  • Ab $6000 geht was in den Hintergrundspeicher wenn ich ihn nicht brauche für Menüs usw.

    Habe jetzt mal meine ASM-Programme reingeladen vom PC mit chacocmd an den TC64 v2 nacheinander.
    Funktioniert wunderbar diese Spielerei.
    Brauche mein cc65-Programm hier nur noch zum starten.

    Gruss

    C Source Code

    1. #include <geos.h>
    2. #include <conio.h>
    3. char text;
    4. struct window wholeScreen = {0, SC_PIX_HEIGHT-1, 0, SC_PIX_WIDTH-1};
    5. void startasm1(){
    6. asm(" \
    7. jsr $6000 \
    8. rts");
    9. }
    10. int main(void)
    11. {
    12. SetPattern(0);
    13. InitDrawWindow(&wholeScreen);
    14. Rectangle();
    15. while(1){
    16. switch (text=cgetc())
    17. {
    18. case 'q':
    19. startasm1();
    20. break;
    21. case 'w':
    22. break;
    23. case 'e':
    24. break;
    25. case 'r':
    26. break;
    27. }
    28. }
    29. }
    Display All
  • spacer wrote:

    Habe jetzt mal meine ASM-Programme reingeladen vom PC mit chacocmd an den TC64 v2 nacheinander.
    Funktioniert wunderbar diese Spielerei.
    Mich würde an diesem Punkt echt mal interessieren wo die Reise hingehen soll... spielst Du da nur rum oder hast Du einen Plan für ein wirkliches Programm? Wenn ich mir Deine diversen Threads so betrachte fehlt mir da der Faden... :nixwiss:
  • Die Reise geht zum maximalen ausnutzen des TC64 v2 mit dem GEOS und dem Sd2iec im Zusammenhang mit dem PC ohne das ich mich mit bestimmten
    GEOS-Programmen beschäftigen muss die nur den Verkehr aufhalten. Ich möchte nicht Mühselig ASM-Programme oder ähnliches auf dem GEOS entwerfen ,
    mit MegaAsm oder Andere , dann Programme testen, fehler...wieder MedaASM...testen..fehler , das dauert mir zu lange. Ich möchte das GEOS von außen füttern damit es spielt wie eine Geige und warm wird. Ich habe jetzt schon viel raus bekommen dank eurer Hilfe und viel Unsinn gemacht..

    GEOS-MP3 ist auch eine Wahnsinnsgeschichte , werden nie Fertig , haben keinen Plan wenn es fertig ist was das Ding machen soll : Raketen bauen , den Super-PC ablösen , zum Mond fliegen.... es geht ums basteln.

    Es fehlt mir noch die Geschichte mit dem GEOS2.5DE, mehr RAM von der REU nutzen, nicht nur 512kb.
    Ohne das man die wahnsinnige MP3-Maschine anwirft.

    In diesem Sinne...brauche ich bitte wieder Hilfe.

    Gruss
  • New

    spacer wrote:

    Ich möchte nicht Mühselig ASM-Programme oder ähnliches auf dem GEOS entwerfen, mit MegaAsm oder Andere , dann Programme testen, fehler...wieder MedaASM...testen..fehler , das dauert mir zu lange.
    Du gehst davon aus das der Aufwand mit cc65, StarCom, Chaco usw geringer ist? Programmierfehler kannst Du damit auch machen und damit Fehler zu finden halte ich für weitaus aufwändiger... aber bitte, jeder wie er will ;)

    spacer wrote:

    Es fehlt mir noch die Geschichte mit dem GEOS2.5DE, mehr RAM von der REU nutzen, nicht nur 512kb.
    Du kannst unter VICE eine REU bis 16Mb einrichten, ebenso am TC64. GEOSv2 nutzt dann (je nach Configure) 512Kb bis 2Mb (Wolke, Software , GEOS UserClub, Programme, Disk131A.d64).

    Den Speicher oberhalb davon kannst Du aber jederzeit über die Register bei $DFxx ansprechen, Details z.B. hier. D.h. Unter GEOS InitForIO aufrufen, dann die Register bei $DFxx entsprechend programmieren. Schon kannst Du Daten oberhalb der 2Mb in die REU schreiben oder aus der REU einlesen. Wie Du das mit C umsetzt :nixwiss:

    Ich hab mir mal den GEOSv2-Code angeschaut, da scheint es bei den GEOS-RAM-Routinen eine Abfrage zur Speicherbank zu geben, d.h. damit kannst Du nur die 512Kb bis 2Mb ansprechen und Du musst die REU über $DFxx ansprechen. Bei MP3 hab ich so eine Abfrage aktuell nicht gefunden, d.h. da könntest Du mit FetchRAM/StashRAM arbeiten.

    Viel Spaß beim basteln ;)
  • New

    --------------------------------
    Du gehst davon aus das der Aufwand mit cc65, StarCom, Chaco usw geringer ist?
    --------------------------------

    Für mich als 70-Jähriger ist das eine enorme Erleichterung den PC damit reinzubringen, anstatt mich nur in diesem kleine Gehäuse zu bewegen ohne Frischluft und macht mir riesigen Spaß.

    Ich kenne einige Tüftler hier , die ohne eine elektronische Bastelei von außen her es nicht lassen können.
    Es ist gut so. Dieser C64 soll keinen Gewinn erzeugen sondern sehr viel Spaß.

    Danke.
    GRuss
  • New

    Das habe ich wieder vergessen : GEOS InitForIO.

    Das sind die GEOS-Befehle vom cc65 für die REU ohne GEOS InitForIO :

    Source Code

    1. void __fastcall__ StashRAM(char REUBank, unsigned len, char *reuaddy, const char *cpuaddy);
    2. void __fastcall__ FetchRAM(char REUBank, unsigned len, const char *reuaddy, char *cpuaddy);
    3. void __fastcall__ SwapRAM(char REUBank, unsigned len, char *reuaddy, char *cpuaddy);
    4. char __fastcall__ VerifyRAM(char REUBank, unsigned len, const char *reuaddy, const char *cpuaddy);


    Habe ich jetzt noch erweitert mit Befehlen für die REU.

    Danke.
    Gruss

    The post was edited 3 times, last by spacer ().

  • New

    Danke.

    Den Weg finde ich nicht , habe schon eine weile gesucht:
    (Wolke, Software , GEOS UserClub, Programme, Disk131A.d64).

    Auch habe ich noch keine Lösung gefunden für meine String-Float, die ja bei Adresse $100 hingebracht werden.
    Wie kann man Geos eine Weile dazu bringen das es den Speicherbereich in ruhe lässt biss ich die 9 Daten rauskopiert habe.
    Meine Daten sehe ich dort nicht im Monitor von Vice.
    Wenn so ein Programm ohne GEOS läuft ist der String drin von der Floatzahl PI.

    Gruss

    The post was edited 1 time, last by spacer ().

  • New

    Hallo, guten Tag.

    Bild2. : cc65 , ohne Geos ,die zahl PI erscheint ab $100
    Bild3. : cc65 , mit Geos gestartet ohne mein Programm ab $100
    Bild4. : cc65 , mit Geos gestartet und mein Programm ab $100

    Danke
    Gruss

    Code cc65 für GEOS:

    Source Code

    1. struct window wholeScreen = {0, SC_PIX_HEIGHT-1, 0, SC_PIX_WIDTH-1};
    2. unsigned int x;
    3. unsigned int xx;
    4. unsigned char y;
    5. void basic_on(){
    6. asm(" \
    7. sei \
    8. ldx #$37 \
    9. stx $01 \
    10. rts");
    11. }
    12. void basic_off(){
    13. asm(" \
    14. ldx #$36 \
    15. stx $01 \
    16. cli \
    17. rts");
    18. }
    19. void adr_pi(){
    20. asm(" \
    21. lda #$a8 \
    22. ldy #$ae \
    23. ");
    24. }
    25. void ram_fac(){
    26. asm(" \
    27. jsr 48034 \
    28. rts");
    29. }
    30. void fac_str(){
    31. asm(" \
    32. jsr 48605 \
    33. rts");
    34. }
    35. int main(void)
    36. {
    37. SetPattern(0);
    38. InitDrawWindow(&wholeScreen);
    39. Rectangle();
    40. y=0;
    41. xx=0x7f40+9;
    42. InitForIO();
    43. basic_on();
    44. adr_pi();
    45. ram_fac();
    46. fac_str();
    47. for (x=0x7f40; x<xx; x++) {
    48. POKE(x,PEEK(256+y));
    49. y=y+1;
    50. }
    51. basic_off();
    52. DoneWithIO();
    53. cgetc ();
    54. return 0;
    55. }
    Display All
    Images
    • Bild2.jpg

      23.03 kB, 294×304, viewed 2 times
    • Bild3.jpg

      28.03 kB, 318×312, viewed 2 times
    • Bild4.jpg

      26.13 kB, 314×312, viewed 3 times