Hello, Guest the thread was viewed1.6k times and contains 29 replies

last post from JohannDark at the

GeoRam Loader von ChatGPT

  • Ich habe ChatGPT gefragt nach einem Basic-Loader zum Laden eines Basic Programms in den Speicher einer GeoRam.

    Das Basic-Programm heißt (im Moment) NORM2 und ist 88 Blöcke lang, GeoRam Speicher sind 512kb.

    Leider bricht der Code immer mit einem Syntax Error in 160 ab, was ist falsch, oder sollte der Code ganz anders aufgebaut werden?


    Hier der Code:


    10 rem *** c64 basic loader for prg to georam ***

    20 rem assumptions:

    30 rem - prg file is 88 blocks (22464 bytes)

    40 rem - georam has 512kb available

    50 rem - prg file starts at $0801

    60 rem

    70 rem variables:

    80 rem b$ - filename

    90 rem a - start address of prg file

    100 rem x, y - indexes for memory transfer

    110 rem

    120 b$="norm2":rem set filename

    130 open 1,8,2,b$+",p,r"

    140 if st<>0 then print"error opening file":end

    150 print"loading ";b$

    160 for i=0 to 22463

    165 rem load 88 blocks

    170 get#1,a$:if st<>0 then print"load error":end

    175 if a$="" then a$=chr$(0):rem handle empty input

    180 poke 2048+i,asc(a$)

    190 next i

    200 close 1

    210 print"file loaded, copying to georam"

    220 sys49152:rem call asm routine for georam transfer

    230 print"done!"

    240 end


    250 rem *** machine code routine ***

    260 rem writes data from $0801 to georam

    270 data 169,0,141,0,2,169,8,141,1,2,169,0,141,0,4,169,0,141,1,4

    280 data 169,1,141,2,4,169,0,141,3,4,160,0,177,1,141,4,4,200,208

    290 data 250,230,3,208,247,230,2,208,241,141,0,4,96

    300 for i=49152 to 49247:read a:poke i,a:next i

  • So, wie Du es geplant hast, fällt mir nur eine Lösung ein: Basic-Start rauf setzen, dann kann NORM2 "normal" nach $0801 geladen werden.

    BTW: warum machst Du es denn so umständlich mit dem Einlesen und benutzt nicht den LOAD-Befehl?

  • mrsid ich finde auch z. B. Zeile 100 interessant (auch, wenn es "nur" REM ist): da werden die Variablen X und Y erwähnt, die aber nirgendwo auftauchen.

    Ich bin nur gerade zu faul, das Maschinenprogrämmchen mal anzusehen, ob das funktionieren würde ;-)

  • Ich habe gerade mal nur ab Zeile 250 das Teil gemacht. Es erfolgt ein

    ?OUT OF DATA ERROR IN 300


    Variable I enthält zu dem Zeitpunkt 49204, da fehlt also Etliches, oder die Endadresse 49247 ist falsch.


    alke01 Schmeiß den Müll von ChatGPT weg, nicht ansatzweise lauffähig. Programmier das lieber selber, das macht Spaß und marschiert dann auch ;-)

  • Und nun der Maschinenteil, das ist RICHTIG geil... hat mit GeoRam halt einfach mal so überhaupt nix zu tun.


    Besonders beachtlich $C020 ... :lol27:


  • alke01 vielleicht kannst du erläutern, was das Ziel wäre.
    Das GeoRAM als generelles Disk-Laufwerk?

    Es gibt ja fertige RAMdisk Programme dafür.

    Ziel ist es das Programm "norm2" in den Speicher der GeoRam abzulegen und von dort zu starten, um mehr freien "normalen" Speicher zu haben, aber vielleicht liegt auch hier schon der Verständnisfehler...

  • 8R0TK4$T3N

    Changed the title of the thread from “GeoRam Loder von ChatGPT” to “GeoRam Loader von ChatGPT”.
  • Ziel ist es das Programm "norm2" in den Speicher der GeoRam abzulegen und von dort zu starten, um mehr freien "normalen" Speicher zu haben, aber vielleicht liegt auch hier schon der Verständnisfehler...

    Korrekt.


    Man kann in der *eoRam tatsächlich Programme ausführen. Allerdings bedarf es dazu etwas Aufwand: entweder ist die Routine <256 Bytes, dann ist der Aufwand relativ gering. Denkbar wäre auch, dass das Programm, das in der *eoRam direkt läuft, über mehrere Pages geht. Aber das dürfte einen gigantischen Aufwand erzeugen, den sich keiner antut oder antun will. Beide Punkte sind aber eher nur mit Assembler-Routinen machbar, weil für Basic incl. aller Variablen(!) 255 Bytes schon SEHR knapp ist.


    Was bei Deinem Vorhaben eher funktioniert, ist eine Version mit der REU. Aber selbst da braucht es ein Steuerprogramm, das Speicherbereiche swappt. Grundsätzlich kann man das auch mit der *eoRam machen, da wird das Swappen allerdings relativ langsam, wegen der fehlenden DMA. In jedem Fall brauchst Du immer ein Steuerprogramm.

  • Ziel ist es das Programm "norm2" in den Speicher der GeoRam abzulegen und von dort zu starten, um mehr freien "normalen" Speicher zu haben, aber vielleicht liegt auch hier schon der Verständnisfehler...

    Ist norm2 das gesamte Programm, das einfach schneller geladen werden soll oder wird das von einem anderen Programm nachgeladen?


    Eine RAM Erweiterung hilft dir unter Basic hauptsächlich dann, wenn du zb ganze Bildschirme schnell wieder abrufen willst (hat ja 1kb so ein Bildschirm im Textmodus) oder große Mengen an Bytes wie sie zb in DATA statements vorkommen würden, rasch zur Hand haben willst, ohne sie ständig im Speicher zu halten

  • Um das ins GeoRAM zu kriegen, oder auch in die REU, muss es ohnehin erstmal geladen werden.
    Wenn das Programm dann nicht mehr nachlädt, dann gewinnt man dadurch eigentlich nix. Es liegt zwar dann in der Erweiterung, gibt aber keinen Grund, es von dort nochmal zu holen.
    Oder würdest du dann auf Buffer-Batterie setzen und das Programm direkt beim nächsten Mal einschalten vom GeoRAM holen wollen?

  • Ziel ist es das Programm "norm2" in den Speicher der GeoRam abzulegen und von dort zu starten, um mehr freien "normalen" Speicher zu haben, aber vielleicht liegt auch hier schon der Verständnisfehler...

    Der verbrauchte Speicher im C64 ist und bleibt aber der gleiche, egal von WO das Programm gestartet wird :nixwiss:

  • Der verbrauchte Speicher im C64 ist und bleibt aber der gleiche, egal von WO das Programm gestartet wird

    Ja, hier ist mein Verständnisfehler... Ich lade es zwar ins GeoRam (habe es jetzt soweit hinbekommen) was auch noch ewig lange dauert,

    aber wenn ich es starte habe ich wieder so wenig freien Speicher zur verfügung wie vorher.

    Ich muss also aus dem eigentlichen Hauptprogramm "norm2" Sachen auslagern und dann holen wenn sie benötigt werden. Habe ich das jetzt richtig verstanden oder

    habe ich immer noch ein Verständisproblem?

  • ChatGPT ist ganz brauchbar bei WEB-basierten Anwendungen, den Rest sollte man als Ideen werten. Bei 6502-ASM kommt da nur Grütze raus. Ich hatte mich vor vielen Jahren mit dem GeoRAM beschäftigt, da entstand auch der Test.


    Hier sind ein auch ein paar Quelltexte dazu: http://www.cbmhardware.de/show.php?r=1&id=4


    Wenn man eine Datei öffnet, immer einen Sektor abholt, kann man das da recht einfach hineinschreiben, da immer genau 256Byte eingeblendet werden. Muss man nur Page und Sektor passend schalten.