;------------------------------------------------------------------------------ ;- BASIC 4.5 Implementation für den C64 ;- Herkunft FORM64.DE, Autor unbekannt. ;- Stammt aus 64er 6/90 - Listing des Monats ;- https://archive.org/details/64er_1990_06, Seite 54 "Ein BASIC für alle" ;- http://www.homecomputerworld.at/magazine/64er/1990_06_64er.pdf ;- Eigene Änderungen: ;- Hierbei handelt es sich aus dem o.g. BASIC 3.5. Ein BASIC was dem PLUS/4 ;- Entnommen wurde und für den C64 geschrieben wurde. Es wurden Teilweise die Zeropage ;- und Teilweise die Erweiterte Zeropage an den PLUS/4 angepasst. Damit sollte eine ;- BASIC Kompatibilität an den PLUS/4 erreicht werden. ;- Ich habe die Startroutine ab C0B3 geändert. Die Vektoren für Tokenizer/De-Tokenizer und ;- BASIC Ausführung habe ich auf meine Routinen (ab BASIC45_ANFANG) verbogen und nach Ausführung ;- springe ich nicht zum Original C64 Basic, sondern zum BASIC 3.5 zurück. ;- Motivation? ;- Ich habe mich zunächst an EXBASIC versucht. Eine von Grund auf selbst geschriebenen ;- BASIC Erweiterung. Allerding habe ich bei vielen das "Rad" nochmal erfunden. ;- Dann habe ich BASIC 3.5 gefunden. Zu meinen PLUS/4 Zeiten fand ich das BASIC schon toll ;- Ich habe BASIC 3.5 mit dem BASIC 4.5 um ein paar nette, zusätzlichen Befehlen verfeinert. ;------------------------------------------------------------------------------ ;- Begonnen im Dezember 2019 und wahrscheinlich nie fertig gestellt :-) ;------------------------------------------------------------------------------ ;- Mit freundlicher Unterstützung von ;- www.forum64.de ;- Johann Klasek j@klasek.at ;------------------------------------------------------------------------------ ;- TODO: ;- ? device not present beim Startup wenn kein LW 8 vorhanden ist. ;- ;------------------------------------------------------------------------------ ;Kommt dieser Fehler: 22;A indirect JMP with an address ending on 0xff will not work as expected on NMOS CPUs ; Dann muss hier ein NOP eigefügt werden, damit die Adresse nicht auf xxFF endet. ;============================================================================== ; History ;------------------------------------------------------------------------------ ; 01.03.2020: ; IMPR: Der Dispatcher wurde komplett neu geschrieben und arbeitet deutlich schneller. ; IMPR: Temp. Daten wurde aus dem Programmcode in die erw. Zeropage ausgelagert. ; ;------------------------------------------------------------------------------ ; 09.03.2020: ; FIX: RESTORE springt nicht mehr im MONITOR, sondern löst einen BASIC WARMSTART aus. ; RUN/STOP - RESTORE springt im MONITOR, wenn STOP eingeschaltet ist. Ein STOP OFF löst einen Warmstart aus ; ;------------------------------------------------------------------------------ ; NEW: Die Register Anzeige des Monitor wurde um die binäre Ausgabe des Status Registers erweitert: ;- PC SR AC XR YR SP NV-BDIZC ;- ;c00b b0 c2 00 00 f6 10110000 ; ;------------------------------------------------------------------------------ ; 10.03.2020: ; FIX: DEVICE NOT PRESENT ERROR beim Starten falls kein LW 8 vorhanden wurde beseitigt. ; Danke User @Snoopy für den Test auf den MEGA65 ; ;------------------------------------------------------------------------------ ; 12.03.2020: ; FIX: BUG in FILES beseitigt. Sobald ein Element ausgegeben werden sollte (z.B.: PRINT F$(1)) ; stürzte der C64 ab. ; Ursache: FILES F$(0),V,U8 --> Die Variable V wurde mit "jsr B08B (LET)" geholt. Das ; brachte einige Seiteneffekte. Nun habe ich die Variable "von Hand" geholt und alles ist gut. :-) ; ;------------------------------------------------------------------------------ ; 17.03.2020: ; IMPR: Memory Anzeige soll "aufgehübscht werden" ; ;------------------------------------------------------------------------------ ; 02.04.2020: ; FIX: Mehrmaliges RESTORE löst Pointerkonflikt aus und landet im Monitor ; ;------------------------------------------------------------------------------ ; 14.04.2020: ; FIX: Wenn STOP OFF gesetzt ist, bricht DSAVE mit "BREAK/STOP" ab. ; Der DSAVE Hook CD80 JSR CD17 wird verändert und falls STOP OFF ; eingeschaltet ist, wird in STOP.ASM STOP temporär auf ON gesetzt. ; Dazu wird der Sprungvector $0332 von CD80 auf STOP.ASM geändert. ; Weitere Details Siehe STOP.ASM ;------------------------------------------------------------------------------ ; 15.04.2020: ; NEW: Neuer Befehl: RESTORE [ON|OFF] ; RESTORE OFF bewirkt wie STOP OFF, dass die RESTORE Taste disabled ist. ; Ein RESTORE ON hebt die Sperre auf. ; RESTORE ohne Paramter wirkt wie der normale BASIC V2 RESTORE bei DATA Zeilen. ;------------------------------------------------------------------------------ ; 24.04.2020: ; NEW: Neuer Befehl: BEGINBLOCK [AUSDRUCK] | ENDBLOCK ; BEGINBLOCK wertet einen beliebigen Ausdruck aus. Ist der Ausdruck WAHR werden ; alle Befehle danach ausgeführt. Bei FALSCH springt der Programmzeiger ; zum passenden ENDBLOCK. Alle Befehle dazwischen werden dann NICHT ausgeführt. ;------------------------------------------------------------------------------ ; 26.04.2020: ; IMPR: CATALOG optimiert, so das er auch im WINDOW funktioniert. ;------------------------------------------------------------------------------ ; 30.04.2020: ; FIX: 'Missing Endblock' bei BEGINBLOCK Wenn Zeilennummer > 999 ;------------------------------------------------------------------------------ ; 04.05.2020: ; FIX: DLRUN startet nicht im BASIC RAM wenn ,U[n] als Paramter gesetzt wird. ;------------------------------------------------------------------------------ ; 14.06.2020: ; NEW: Neuer Befehl: RTRIM X$ -> löscht alle Leerzeichen am Stringende und passt Stringlänge an. ;------------------------------------------------------------------------------ ; 23.06.2020: ; FIX: FIND erkennt nun das BASIC Ende anhand der Pointer und nicht mehr anhand einer 00 (null null) Folge. ;------------------------------------------------------------------------------ ; 12.09.2020: ; NEW: C64 kennt nur OR AND NOT - neuer Befehl XOR (exclusiv Oder) ; X Y = S ; 0 0 = 0 ; 1 0 = 1 ; 0 1 = 1 ; 1 1 = 0 ; S = (NOT X AND X) OR (X AND NOT Y) -> Nachbildung mit UND / OR ; 10 x=0:y=0:s=(not x and y) or (x and not y): print s -> Wäre aber in ; BASIC vie langsamer als der EOR beim 6502 ;------------------------------------------------------------------------------ ; 15.11.2020: ; CHANGE: Farben des Startbildschirms und Monitor exit Schirms von BLAU/BLAU/WEISS ; auf BLAU/CYAN/SCHAWRZ geändert ;------------------------------------------------------------------------------ ; 24.11.2020: ; New: das ' (Apostrophe) kann alternativ als REM benutzt werden ;------------------------------------------------------------------------------ ; 10.01.2021: ; New: Einschaltscreen erzeugt einen BEEP. ;------------------------------------------------------------------------------ ; 11.01.2021: ; New: Neuer Befehl: DELAY N -> Wartet 1/50Sekunde * N (1/60Sek * N bei NTSC) ;------------------------------------------------------------------------------ ; 11.01.2021: ; New: Neuer Befehl: BEEP -> Kurzes BEEP ;------------------------------------------------------------------------------ ; 12.01.2021: ; FIX: CATALOG U10 oder U11 zeigt keine 10: oder 11: sondern :: ;------------------------------------------------------------------------------ ; 12.01.2021: ; Todo: Aktivierter RTC (BASE $DE00) soll $TI belegen ;------------------------------------------------------------------------------ ; 13.01.2021: ; New: Beim Aufruf von 'VER' soll mein Rufzeichen (D G 5 K R) ; in CW (Morsetelegraphie) ertönen: DG5KR -> -.. --. ..... -.- .-. ; -> Wieder deaktiviert. ;------------------------------------------------------------------------------ ; 17.01.2021: ; FIX: Tokenizer erkennt nun korrekt ' (Apostrohe ) als Kommentarzeichen. ;------------------------------------------------------------------------------ ; 12.02.2021: ; NEW: Ähnlich dem TSB soll der Befehl CALL, SUB _NAME_ und CHECKSUB ; CALL "PROCNAME" -> Entspricht dem GOSUB mit Zeilennummern ; Dieser sucht nach einer ' Zeile und springt dahin ; 'PROCNAME -> Hier mache ich aus SUB _NAME_ ein GOSUB _ZEILE_ ; PRINT "PROC" ; RETURN ;------------------------------------------------------------------------------ ; 16.02.2021: ; FIX: Tokenizer erkennt nun korrekt ' im Direktmodus ; führte vorher zum Absturz. ;------------------------------------------------------------------------------ ; 04.03.2021: ; NEW: Generelle Änderungen - Ich werde auf meiner Homepage einen ; Ordner anlegen, der ein Link ist von: ; V:\50...Eigene Software Entwicklung\C64Studio\basic45\published ;------------------------------------------------------------------------------ ; 04.03.2021: ; NEW: GOTO Line - Ersatz Ahnlich dem CALL, aber ohne RETURN ; JUMP "PROCNAME" -> Entspricht dem GOTO mit Zeilennummern ; Dieser sucht nach einer ' Zeile und springt dahin ; STOP ; 'PROCNAME -> Hier mache ich aus SUB _NAME_ ein GOSUB _ZEILE_ ; PRINT "AB HIER GEHT ES WEITER" ; PRINT "ENDE" ; END ;------------------------------------------------------------------------------ ; 04.03.2021: ; TODO: Meldung von @spieler: ;Bei einem kleinen Programm für die Serielle Schnittstelle gibt es einen Kurzschluss mit dem Vice und dem Basic 4.5. ;Das Basic 2 vom C64 läuft wunderbar mit der Datenübertragung von 2400 baud ;https://www.forum64.de/index.php?thread/98181-basic-4-5-f%C3%BCr-den-c64-basic-3-5-eigene-befehle/&postID=1637479#post1637479 ; ;------------------------------------------------------------------------------ ; 07.04.2021: ; FIX: Um Speicher zu sparen soll der Hilfetext als SEQ Datei abgelegt werden ; und falls vorhanden geladen und gezeigt werden. ; Siehe LOAD_RUN_boot_prg.asm ; Beim Aufruf von INFO wird nach einer Datei "INFO.TXT" als SEQ gesucht ; und wenn vorhanden, angezeigt. ; Das Programm mhelpscr.bas ist ein Hilfsprogramm um diese Datei zu erstellen. ; Für das Release ändert sich: Auslieferung der Files in einer ZIP Datai. ;------------------------------------------------------------------------------ ; 13.04.2021: ; CHANGE: Benenne Hilfe-Datei INFO.TXT in BASIC45.01.HLP um. ; Damit habe ich mir weitere Hilfe Dateien oder Info Files offen gehalten. ;------------------------------------------------------------------------------ ; 15.04.2021: ; FIX: OUT OF MEMORY beim JUMP Befehl behoben. ;------------------------------------------------------------------------------ ; 09.06.2021: ; CHANGE: Der Befehl INFO wird in seiner Funktion geändert. ; Er ist keine Kurzhilfe mehr, sondern ist nun eine Art Memofunktion. ; Es wird eine Datei MEMO.TXT als SEQ File erstellt und der Bildschirminhalt ; abgespeichert, bzw geladen. ;------------------------------------------------------------------------------ ; 14.06.2021: ; FIX: INFO speichert die Änderungen nicht auf DISK-Images unter VICE ; Lösung: Beim abspeichern muss zuerst das File gelöscht werden. ; Es wird NICHT empfohlen die @ Option zu nutzen. ;------------------------------------------------------------------------------ ; 27.06.2021: ; FIX: TOKEN Erkennung für CALL und JUMP war nicht korrekt ; dec CHRPTR ;Nochmal den CHR Pointer eines zurück auf das letzte Befehlstoken ; muss bei einem JUMP "BLA" (--> " ) nochmal ausgeführt werden. ;------------------------------------------------------------------------------ ; 05.07.2021: ; IMPROVE: INFO benutzt jetzt KERNAL LOAD/SAVE ;------------------------------------------------------------------------------ ; 07.12.2021: ; TODO (open):Ein Scrolleditor. Mit CTRL+[SHIFT]DWON wird das Listing am ; Bildschirm angezeigt. ; CTRL+DOWN = Abwärts rollen ; CTRL+SHIFT+DOWN = Aufwärts rollen ;------------------------------------------------------------------------------ ; 29.12.2021: ; IMPROVE: ASK "Prompt",$VAR ; Erstatz INPUT. ; Verkürzte Form: ; ASK VR$ ; ASK "PROMPT:",VR$ ; Normalform: ; ASK "PROMPT:",CRSR,FMT,LEN,VR$ ; LEN: Länge der Eingabe Zeile (0-40) ; FMT: 0=Alle Zeichen, 1=Nur A-Z, 2=Nur 0-9 ; CRSR: 0=Kein Cursor, >32=Cursor in Petscii-Code ;------------------------------------------------------------------------------ ; 31.01.2022: ; IMPROVE: Der Scrolleditor wurde weiter "Benutzbar" gemacht. ; Offene Baustellen sind Cursor blinken geht danach nicht ?? ; Beim runter scrollen springt der Cursor manchmal auf Zeile 2 ?? ; Zeile 1 wird beim hochscrollen nicht angezeigt ?? ;------------------------------------------------------------------------------ ; 15.02.2022: ; IMPROVE: Der Scrolleditor wurde mehr "Benutzbar" gemacht. Beim Scrollen werden die Zeile 0-2 und 24-21 berücksichtigt. ; Offene Baustellen sind Cursor blinken geht danach nicht ?? ; Beim runter scrollen springt der Cursor manchmal auf Zeile 2 ?? ;------------------------------------------------------------------------------ ; 18.02.2022: ; FIX: FIND "bla",1 ließ den C64 einfrieren. Fehler in der LIST Routine,- beseitigt. ;------------------------------------------------------------------------------ ; 18.02.2022: ; IMPROVE: Rückwärtsscrollen wurde deutlich beschleunigt. ; Offene Baustellen sind Cursor blinken geht danach nicht ?? ; Beim runter scrollen springt der Cursor manchmal auf Zeile 2 ?? ;------------------------------------------------------------------------------ ; 01.08.2022: ; FIX: Cursor blinken nach Zeilenscroll funktioniert jetzt ; Das "sprunghafte Verhalten" des Cursors beim scrollen wurde beseitigt. ;------------------------------------------------------------------------------ ; 08.08.2022: ; IMPROVE: Der gesamte Scrolling Editor wurde komplett neu entwickelt. ; Dieser ist gut bedienbar und deutlich stabiler. ;------------------------------------------------------------------------------ ; 15.08.2022: ; FIX: Der Scrolling Editor wird im MONITOR deaktiviert. ;------------------------------------------------------------------------------ ; 22.08.2022: ; CHANGE: Umbenennen von INFO in NOTE ;------------------------------------------------------------------------------ ; 22.08.2022: ; IMPROVE: Monitor um einen BEFEHL 'B' (BANK) um über $07F8 (0=ROM/80=RAM) zu switchen. ;------------------------------------------------------------------------------ ; 22.08.2022: ; TODO: Dokumantation anpassen. ;------------------------------------------------------------------------------ ; 22.09.2022: ; IMPROVE: Der Befehl NOTE kann (optional) Notizenfiles mit Namen und LW vergeben. ;------------------------------------------------------------------------------ ; 17.03.2023: ; FIX: Scrolleditor Stack ISSUE ;------------------------------------------------------------------------------ ; 03.04.2023: ; FIX: ASK erzeugte ein Illegal Quantity. Behoben. ;------------------------------------------------------------------------------ ; 07.04.2023: ; CHANGE: Um Platz zu sparen habe ich die Danksagung in das Handbuch ausgegliedert. ; VER gibt nun schnöde die Versionsnummer aus. ;------------------------------------------------------------------------------ ; 07.04.2023: ; FIX: Ein DSAVE "@ [RETURN], also ohne Dateiname ergab ein Stack overflow ; Das Verhalten war in BASIC 3.5 auch. ; In dieser Version ist der BUG beseitigt. ;------------------------------------------------------------------------------