Simons Basic Extension Tipps
Simons Basic 2 mit Vice[Bearbeiten | Quelltext bearbeiten]
Das Steckmodul Simons' BASIC einstecken und Simons Basic Extension von Diskette laden, ist schon eine ziemlich umständliche Prozedur.
Mit Vice allerdings lässt sich das automatisieren, indem man den Kommandozeilenparameter -cartcrt für die CRT-Datei benutzt und den Pfad der D64 mit Simons Basic Extension als zweiten Parameter angibt.
Beispiel:
- Man erstellt eine Verknüpfung zu x64sc.exe (bzw. x64.exe) und ergänzt unter "Eigenschaften" / "Ziel" hinter dem Namen der Exe-Datei die Parameter
-cartcrt sb.crt sbx.d64
. - Unter "Ausführen in" wird das Arbeitsverzeichnis eingetragen, in dem SB.CRT und SBX.D64 liegen.
- Diese Verknüpfung kann man nun z.B. in "SB2" umbenennen und mit ihr Simons Basic 2 (Modul plus Extension) direkt starten.
Bei älteren Vice Versionen (z.B. Vice 2.4) wird SBX leider nicht automatisch ausgeführt und muss daher mit RUN gestartet werden.
Erweiterung ein-/ausschalten[Bearbeiten | Quelltext bearbeiten]
SYS 64760
($FCF8) schaltet von Simons Basic 2 in BASIC V2. Der BASIC-Speicherbereich wird dabei nicht verändert.SYS 30464
($7700) schaltet Simons Basic 2 wieder ein. Der Startschirm wird dabei nicht angezeigt und die Farben bleiben unverändert.
SBX sollte - wie unter dem folgenden Abschnitt "Mehr Speicher für BASIC" erklärt - korrigiert sein, sonst wird bei jedem Neustart der BASIC-Speicher kleiner. Siehe dazu auch Erweiterung ein-/ausschalten im Simons Basic Artikel.
Mit einem Reset wird auf das Modul zurückgesetzt. Da dies dabei das RAM überschreibt, ist die Extension gelöscht und muss neu geladen und gestartet werden.
SBX patchen[Bearbeiten | Quelltext bearbeiten]
In diesem Kapitel werden Patches vorgestellt, die Fehler in SIMONS' BASIC EXTENSION korrigieren. Dazu wird das Startprogramm SIMONSBASIC EXT verändert. Um den Platz für neue Zeilen zu schaffen, startet man SB2, lädt SIMONSBASIC EXT, ergänzt die fehlenden Zeilen 16 und 17, nummeriert das Programm mit RENUMBER 10,10 neu und speichert es unter neuem Namen, zum Beispiel "SBX".
Mehr Speicher für BASIC[Bearbeiten | Quelltext bearbeiten]
Die Initialisierung von Simons Basic 2 enthält Fehler, die den verfügbaren BASIC-Speicher unnötig klein machen. Das Startprogramm SBX (das neu nummerierte SIMONSBASIC EXT) kann so geändert werden, dass der gesamte BASIC-Speicher zwischen $0801 und $7700, dem Beginn der Erweiterung, zur Verfügung steht. Dazu ändert man in den Inhalt der Zeilen 140 bis 160 (im Original 15 plus 16 und 17, da Zeile 6 dort fehlt):
140 SYS58451:SYS30464:POKE51,0:POKE52,119:POKE55,0:POKE56,119:POKE643,0:POKE644,119:CLR 150 PRINT"{clr}{left}"FRE(0)+2 "BASIC BYTES FREE." 160 POKE 45593,240:POKE 45605,0:FOR I=0 TO 6:POKE 45613+I,234:NEXT
In Zeile 140 wird das BASIC-Ende und die Obergrenze des String-Heaps auf $7700 ($77=119) gesetzt. In Zeile 160 wird ein Teil der Initialisierungs-Unterroutine $B1EC gepatcht, damit der BASIC-Speicher bei einem SB2-Neustart mit SYS$7700 nicht schrumpft. Tatsächlich setzt die originale Routine bei jedem Aufruf das Speicherende um 256 ($0100) Bytes herunter, beim ersten Mal also von $7680 (Zeile 1 des Hauptprogramms) auf $7580.
Original: ... .C:b215 A5 38 LDA $38 .C:b217 C9 77 CMP #$77 .C:b219 90 09 BCC $B224 .C:b21b A9 77 LDA #$77 .C:b21d 85 38 STA $38 .C:b21f 85 34 STA $34 .C:b221 8D 84 02 STA $0284 .C:b224 A9 80 LDA #$80 .C:b226 85 37 STA $37 .C:b228 8D 83 02 STA $0283 .C:b22b 85 33 STA $33 .C:b22d C6 34 DEC $34 .C:b22f C6 38 DEC $38 .C:b231 CE 84 02 DEC $0284 ...
Geändert: ... .C:b215 A5 38 LDA $38 .C:b217 C9 77 CMP #$77 .C:b219 F0 09 BEQ $B224 ;gepatcht .C:b21b A9 77 LDA #$77 .C:b21d 85 38 STA $38 .C:b21f 85 34 STA $34 .C:b221 8D 84 02 STA $0284 .C:b224 A9 00 LDA #$00 ;gepatcht .C:b226 85 37 STA $37 .C:b228 8D 83 02 STA $0283 .C:b22b 85 33 STA $33 .C:b22c EA NOP ;gepatcht ... ; bis .C:b233 EA NOP ;gepatcht ...
EVAL[Bearbeiten | Quelltext bearbeiten]
Der Fehler mit der falsch übergebenen String-Länge im Befehl EVAL wurde im Artikel beschrieben. Mit der folgenden zusätzlichen Zeile im Startprogramm wird dies korrigiert:
161 POKE36434,105:POKE36435,0:REM EVAL-PATCH
Der Assemblercode dazu:
;EVAL .C:8e35 20 AD 79 JSR $79AD ;String auswerten, Adresse in X/A, Länge in $69 .C:8e38 8C 88 C8 STY $C888 ;speichert High-Byte statt Länge! .C:8e3b A4 7A LDY $7A ;Programmzeiger sichern .C:8e3d 8C 8A C8 STY $C88A .C:8e40 A4 7B LDY $7B .C:8e42 8C 8B C8 STY $C88B ;in $C88A/$C88B .C:8e45 85 7B STA $7B ;String-Adresse Low .C:8e47 86 7A STX $7A ;String-Adresse High .C:8e49 A0 00 LDY #$00 .C:8e4b B1 7A LDA ($7A),Y ;String kopieren .C:8e4d 99 00 02 STA $0200,Y ;in Eingabepuffer .C:8e50 C8 INY ; 8e51 CC 88 C8 CPY $C888 stand hier ursprünglich .C:8e51 CC 69 00 CPY $0069 ;bis Länge erreicht .C:8e54 D0 F5 BNE $8E4B
.C:79ad 20 E3 7A JSR $7AE3 ;Modul ein .C:79b0 20 58 90 JSR $9058 ;String auswerten (FRMEVL, FRESTR) .C:79b3 48 PHA .C:79b4 A5 69 LDA $69 ;String-Länge .C:79b6 F0 02 BEQ $79BA ;zur Fehlerausgabe "NULL STRING" .C:79b8 68 PLA .C:79b9 60 RTS
Download:
- sbx+.zip auf Forum64.de