Simons Basic Extension Tipps

Aus C64-Wiki
Zur Navigation springenZur Suche springen

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:

  1. 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.
  2. Unter "Ausführen in" wird das Arbeitsverzeichnis eingetragen, in dem SB.CRT und SBX.D64 liegen.
  3. 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
...
28415 statt 28031 BASIC Bytes


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: