Hello, Guest the thread was called7.8k times and contains 189 replays

last post from dg5kr at the

BASIC 4.5 für den C64 (BASIC 3.5 + EIGENE BEFEHLE)

  • Hallo liebe Programmiergemeinde,

    vieleicht erinnern sich noch einige aus meinen Thread "EXBASIC V2+". Dort habe ich eine BASIC Erweiterung vorgestellt. Das Projekt war ursprünglich für mich alleine gedacht um zum einen wieder in die 6502 Assemblerprogrammierung rein zu kommen und zum anderen weil ich das C64 BASIC V2.0 eigentlich ganz schrecklich finde und die BASIC Programme von den vielen Pokes und Peeks erlösen wolte.
    Während der vielen Stunden des Programmierens habe ich natürlich auch geschaut welche anderen Erweiterung es gibt und (sofern möglich) wie es dort umgesetzt wurde. Den in vielen Teilen wiederholen sich die Befehle (manchmal unter anderem Namen) oder Funktionen. Damlas hatte ich neben dem C64 auch einen PLUS/4. Dessen BASIC 3.5 ich im Vergleich zum C64 grandios fand. Eine Symbiose der beiden (die geniale Hardware des C64 mit dem tollen BASIC 3.5 vom PLIS/4) war so ein Traum. Diesen wollte ich mit meinem EXBASIC V2+ etwas näher kommen. Allerdings merkte ich schnell das ich immer mehr das BASIC V3.5 nach programmierte. Und das befriedigte mich nicht mehr. Dann habe ich in diesem Forum per Zufall hier die Version von Michael Schimek gefunden, der in der 64er, Ausgabe 06/1990, Seite 54 "Ein BASIC für alle" ein PLUS/4 kompatibles BASIC 3.5 vorstellte. Und das funktioniert erstaunlich gut.

    Somit habe ich diese BASIC 3.5 genommen und versucht an den Sourcecode zu kommen, was mir aber bis heute nicht gelungen ist. Auch die Versuche der Kontaktaufnahme zum Verlag (Markt&Technik) oder zum Autor Michael Schimek sind mir nicht gelungen.

    Ich wollte nämlich das BASIC 3.5 nehmen und den tollen Befehlssatz unm weitere, eigene Befehle erweitern.
    Durch "reverse engineering" ist es mir gelungen wichtige Routinen im Hexcode zu finden (Vectoren usw.) und meine eigene Erweiterung mit einzupflanzen, quasi als Symbiose.


    Nun darf ich vorstellen:

    BASIC 4.5 für den C64! Vollständig kompatibel zu PLUS/4 BASIC Programme + weitere Befehle.

    Neben den BASIC 3.5 Befehlssatz sind diese Befehle vorhanden:


    at x,y

    -Setzt den Cursor auf Position X,Y


    catalog [LW Nr] (oder PLUS/4 style: catalog U8)

    -Liste das Disk Directory seitenweise und in einem Format das es mir LOAD, DLOAD oder RUN direkt geladen werden kann


    cls

    -wie ESC-N, clear Schliesst alle Screen Windows und löscht den Bildschirm (SCNCLR löscht nur das aktive Fenster)


    frame x1,y1,x2,y2,color,type,title

    -Zeichnet einen Textrahmen mit den Ecken X1,Y1 -> X2,Y2. Möglich sind Linien mit runden Ecken oder "spitzen" Ecken, sowie ein Rahmen aus Spaces. Optionale Beschriftung in der obigen Mitte des Rahmens.


    free [(intvar)]

    -Zeigt den freien Speicher (positiv) an oder legt in in die Variable [INTVAR]


    run "PROG",8|9 (oder run "PROG",U8|U9)

    -Lädt und startet ein Programm


    stop [on/off]

    - Läßt die Taste RUN/STOP zu oder verhindert sie. Kann auch im Programm eingebaut werden. Dann wird der Befehl NICHT quittiert!


    ver

    Zeigt die Version von BAISC 4.5 an


    window x1,y1,x2,y2

    - Erzeugt ein Text-Fenster mit den Dimensionen X1,Y1,X2,Y2



    Und nun das Schmankerl:

    Existiert in Laufwerk 8 ein Programm mit dem Namen BOOT wird es automatisch geladen und gestartet.



    Bitte mal das BASIC laden und Testen. Über Rückmeldungen freue ich mich.

  • das finde ich ein cooles Projekt und du hast dir echt viel Arbeit damit gemacht :thumbsup::thumbsup::thumbsup:


    Leider kann ich nicht wirklich programmieren und über meine Versuchge in den 80ern ist Gott sei Dank schon Gras gewachsen. :grab1:



    Ich wünsche dir aber das deine Erweiterung gewürdigt und auch benutzt wird.

    Vielleicht schreibt der ein oder andere ja was für das Weihnachtsheft 2020 damit

  • Not compatible with DolphinDOS :( After executing CATALOG command, screen starts to flash showing this:

    That could be. Well, i don't have DolphinDOS and i do not know how to change DolphinDOS the standard Kernal and BASIC Routines. How ever, the BASIC 4.5 would be improve the Standard BASIC with the small DOS function. To run or extend DolphinDOS is not in my scope.

  • Well, i don't have DolphinDOS

    No problem - emulators exist.


    BTW: It happens that we have Dolphin DOS 2 und 3 Kernal source code for the C64 (not for the floppies). If it helps, just ask...



    Edit: Just tested: S-Jiffydos [V2]: Same issue. Dopphin DOS 2 confirmed on Ultimate 64.

  • dg5kr Verrätst Du uns die Positin der "catalog"-Implemtierung, so dass wir mal schauen können, was die Inkompatibität zu verschiedenen Speedern verursachen könnte?

  • dg5kr Verrätst Du uns die Positin der "catalog"-Implemtierung, so dass wir mal schauen können, was die Inkompatibität zu verschiedenen Speedern verursachen könnte?

    Aber sicher. :thumbsup:

    Ziel und Zweck sollte sein eine Auflistung aller ausführbaren Programme so formatiert auszugeben, das durch einfache Cursor Positionierung und Drücken von F2 (DLOAD ) oder durch Eingabe von LOAD oder RUN das Programm geladen und ggf direkt ausgeführt wird.

    Eigentlich sollte das so aussehen:


    Gerne darf der Code geändert/Optimiert werden. Was ich aber nicht mag ist

    - Selbstmodifizierende Code

    - Schwer nach zu vollziehende Supertricks um 2 Bytes zu sparen

    - Schlecht oder gar nicht dokumentierte Zeilen

    Ich muss in der Lage sein auch in einem Jahr den Code ohne viel Anstrengunen zu verstehen ?(

  • Im C64 Ram befindet sich der Code offenbar an $90C1... Da ich durch Anschauen nichts finde, darf VICE mit einem Breakpoint dort ran.

  • Hm, das Problem tritt auf bei Adresse $9100:


    .C:9100 20 C0 FF JSR $FFC0 ; OPEN


    Hier erscheint bereits die Ausgabe 'searching for "$" loading'...



    Edit: Es hilft, die Anweisung abzuändern in "JSR $F34A" ; Kernal OPEN... Bin mir nicht sicher, ob das der Weisheit letzter Schluss ist. Irgendetwas verhakt sich mit der BASIC 3.5-Implementierung von OPEN und den Speedern beim Directory.

  • Falls es hilft, hier ist das gesamte Projekt (C64Studio Files).

    Dem $FFC0 geht ein SETNAM vorraus, wo der zu ladende Dateiname (hier eben das $) definiert wird. Dann kommt die Standard Routine zum laden der "PSEUDO Datei" Directory.


    Ich leg mal ein ZIP-File dabei.

  • Danke. Ich bin dafür, wir patchen da mal rein, dass er wie ermittelt den Kernal-Open verwendet - und zur Sicherheit auch den passenden Close... Dann geht es unter VICE schon mal. Der Kernal-Close wäre bei Adresse $F291.


    Spannander wäre die Frage, ob der Basic 3.5 Open (ich gehe mal davon aus, dass Du den Open bei $CCB7 nicht verändert hast, also ist der von Basic 3.5) noch andere Probleme mit Speeder hat...

  • 8R0TK4$T3N

    Changed the title of the thread from “BASIC 4.5 für den C45 (BASIC 3.5 + EIGENE BEFEHLE)” to “BASIC 4.5 für den C64 (BASIC 3.5 + EIGENE BEFEHLE)”.
  • Danke. Ich bin dafür, wir patchen da mal rein, dass er wie ermittelt den Kernal-Open verwendet - und zur Sicherheit auch den passenden Close... Dann geht es unter VICE schon mal. Der Kernal-Close wäre bei Adresse $F291.


    Spannander wäre die Frage, ob der Basic 3.5 Open (ich gehe mal davon aus, dass Du den Open bei $CCB7 nicht verändert hast, also ist der von Basic 3.5) noch andere Probleme mit Speeder hat...

    Richtig, dieser BASIC 3.5 Teil wurde nicht verändert. Wenn du dir den Quelltext ansiehst sind die veränderten Teile in BASIC 3.5 schnell zu finden da ich dies von HEXCODE in in Assemblercode "umgeschrieben" habe, mindestens aber Dokumentiert wurde.

  • Ich war gerade mal so frei und habe die beiden JSR-Anweisungen im Hexeditor abgeändert - dafür lohnt es sich wohl doch nicht, dass ich extra die Umgebung einrichte.

  • Ich war gerade mal so frei und habe die beiden JSR-Anweisungen im Hexeditor abgeändert - dafür lohnt es sich wohl doch nicht, dass ich extra die Umgebung einrichte.

    Welche Speicherstelle hast du geändert? Würde es im Code dann mal nachziehen.

  • In dem Codeausschnitt, den Du zuerst rausgesucht hast:


    jsr BOPEN ;Inhaltsverzeichnis als Programmdatei eröffnen


    geändert in


    jsr $f34a ; Kernal Open - Inhaltsverzeichnis als Programmdatei eröffnen



    jsr BCLOSE ;Datei mit Filenummer 1 schließen


    geändert in


    jsr $f291 ; Kernal Close - Datei mit Filenummer 1 schließen



    Kommen beide nur jeweils einmal vor.




    Edit: Und da es ja viele Speeder gibt, habe ich das schnell mal hier reingetan - in der Hoffnung auf Feedback.

  • Ich selber habe keinen DOS Speeder

    Mit VICE kannst Du diese beiden Speeder benutzen - dass der Post für den Ultimate 64 gedacht ist, ist nebensächlich: Ultimate 64 mit Speed Dos oder Dolphin Dos konfigurieren


    Edit: Leider tun es die Links dort nicht - ich hänge die ROMs hier mal an.

    Edit 2: Die Links dort haben wir jetzt auch wieder repariert.

  • Nur mal so nebenbei: Leider habe ich keine echte Hardware. Entwickelt tue ich im C64Studio, was übrigens mit einem super Debugger glänzt. Getestet wird mit VICE. Ansonsten bin ich ein glücklicher Besitzer des TheC64 maxi. Das ändert aber nix das es absolut riesen Spass macht auf den C64 zu programmieren.

  • Ebenfalls so nebenbei: Ich habe damit kein Problem. Da es bei BASIC 3.5 offenbar jedoch einen Riesenunterschied macht, ob ein Speeder aktiv ist oder nicht, wollte ich Dir nur eine Testmöglichkeit geben.