TSB Tipps

Aus C64-Wiki
Zur Navigation springenZur Suche springen

TSB Vektoren, Befehle und Adressen[Bearbeiten | Quelltext bearbeiten]

TSB wird zur Zeit noch ständig weiterentwickelt. Dadurch ändern sich auch immer wieder Vektoren oder Befehls-Einsprungadressen. Die TSB-Programme in den beiden folgenden Abschnitten zeigen bei Ausführung den aktuellen Stand.

Vektoren[Bearbeiten | Quelltext bearbeiten]

Ausgabe der TSB-Vektoren auf dem Bildschirm:

100 PRINT:RETRACE:PRINT:PRINT
110 V=$0300-2: CSET0
120 LOOP
130 : V=V+2
140 : IF V=$030C THEN V=$0314
150 : IF V=$031A THEN V=$0330
160 : PRINT "$"$$V"-$"$$(V+1);": ";
170 : PRINT "$"$$(D!PEEK(V))
190 : EXIT IF V=$0332
200 END LOOP

Beispiel:

AD86
2.21026

$0300-$0301: $9E9F
$0302-$0303: $825B
$0304-$0305: $8233
$0306-$0307: $823F
$0308-$0309: $917C
$030A-$030B: $8C7F
$0314-$0315: $969E
$0316-$0317: $8313
$0318-$0319: $82F9
$0330-$0331: $8BE7
$0332-$0333: $8BF8


Befehle und Adressen[Bearbeiten | Quelltext bearbeiten]

Das folgende Programm gibt die TSB-Schlüsselwörter und ihre Adressen auf dem Bildschirm und dem Drucker aus. Die Werte B (Befehlstabelle) und A (Adressen der Befehle) in Zeile 130 müssen eventuell angepasst werden. Der folgende Code ist für TSB Versionen ab 2.40424 anwendbar.

50 OPEN 4,4: CMD4: RETRACE
60 PRINT#4: PRINT#4: CLOSE4
100 OPEN 4,4
110 PRINT#4,"TSB  BEFEHLSTABELLE "
120 PRINT#4,"--------------------"
130 B=$862E:A=$8904:REM VORHER: B=$85FF
140 SA$=DUP(" ",10):S2$=DUP(" ",2)
150 FOR I=1 TO 127
160 : USE "###  ",I;
170 : USE#4,"###  ",I;
180 : REM BEFEHLE
190 : T$=""
200 : REPEAT
210 :   T=PEEK(B)
220 :   T$=T$+CHR$(T AND 127)
230 :   B=B+1
240 : UNTIL T>127
250 : L=10-LEN(T$):D$=DUP(" ",L)+"$"
260 : PRINT T$;D$;:PRINT#4,T$;D$;
270 : REM STARTADRESSE HEX
280 : AL=PEEK(A):AH=PEEK(A+1)
290 : AD=AH*256+AL+1
300 : PRINT $$AD:PRINT#4,$$AD
310 : A=A+2
320 NEXT
330 PRINT#4:CLOSE4

Beispiel der Druckausgabe:


AD86
2.30525

 TSB  Befehlstabelle 
----------------------
   1  HIRES     $9208
   2  PLOT      $9265
   3  LINE      $934C
   4  BLOCK     $BBCD
   5  FCHR      $AC5F
   6  FCOL      $AC5F
   7  FILL      $AC5F
   8  REC       $BAFB
   9  ROT       $A120
  10  DRAW      $A059
  11  CHAR      $A192
  12  HI COL    $A272
  13  INV       $AC5F
  14  FRAC      $9E9D
  15  MOVE      $AC5F
  16  PLACE     $CCD1
  17  UPB       $AC5F
  18  UPW       $AC5F
  19  LEFTW     $AC5F
  20  LEFTB     $AC5F
  21  DOWNB     $AC5F
  22  DOWNW     $AC5F
  23  RIGHTB    $AC5F
  24  RIGHTW    $AC5F
  25  MULTI     $94EE
  26  COLOUR    $952F
  27  MMOB      $95CD
  28  BFLASH    $966C
  29  MOB SET   $96DE
  30  MUSIC     $975F
  31  FLASH     $978E
  32  REPEAT    $9AF8
  33  PLAY      $9905
  34  DO        $B574
  35  CENTRE    $9945
  36  ENVELOPE  $9981
  37  CGOTO     $99D3
  38  WAVE      $99E1
  39  FETCH     $B007
  40  AT(       $B8B4
  41  UNTIL     $9B19
  42  >         $9E9D
  43  >         $9E9D
  44  USE       $820B
  45  >         $9E9D
  46  GLOBAL    $A343
  47  >         $9E9D
  48  RESET     $9C03
  49  PROC      $9E38
  50  CALL      $9C66
  51  EXEC      $9C36
  52  END PROC  $9D13
  53  EXIT      $9D31
  54  END LOOP  $C96C
  55  ON KEY    $9D77
  56  DISABLE   $9D6F
  57  RESUME    $9DFC
  58  LOOP      $9E5A
  59  DELAY     $C935
  60  CLS       $81C0
  61  >>        $9E9D
  62  MAP       $C976
  63  >         $9E9D
  64  SECURE    $C93E
  65  DISAPA    $9759
  66  CIRCLE    $9492
  67  ON ERROR  $9E76
  68  NO ERROR  $9E98
  69  LOCAL     $A301
  70  RCOMP     $9F21
  71  ELSE      $A2C8
  72  RETRACE   $9B47
  73  TRACE     $9B59
  74  DIR       $9546
  75  PAGE      $98EB
  76  DUMP      $9F50
  77  FIND      $A59D
  78  OPTION    $9B62
  79  AUTO      $9BD4
  80  OLD       $9EDC
  81  JOY       $9E9D
  82  MOD       $BFE3
  83  DIV       $81C0
  84  D!        $B8EA
  85  DUP       $B7B8
  86  INKEY     $9E9D
  87  INST      $CA09
  88  TEST      $9E9D
  89  LIN       $C839
  90  EXOR      $9E9D
  91  INSERT    $AF44
  92  POT       $9E9D
  93  PENX      $9E9D
  94  >         $9E9D
  95  PENY      $9E9D
  96  SOUND     $8650
  97  GRAPHICS  $8BCF
  98  DESIGN    $A634
  99  RLOCMOB   $A764
 100  CMOB      $A79D
 101  BCKGNDS   $A7AC
 102  PAUSE     $A7DC
 103  NRM       $A82C
 104  MOB       $A851
 105  OFF       $A876
 106  ANGL      $AB1C
 107  ARC       $A88C
 108  COLD      $8147
 109  SCRSV     $B1A5
 110  SCRLD     $B191
 111  TEXT      $B22A
 112  CSET      $B321
 113  VOL       $B34F
 114  DISK      $B358
 115  HRDCPY    $B4D0
 116  KEY       $B587
 117  PAINT     $B605
 118  LOW COL   $93DE
 119  COPY      $BA12
 120  MERGE     $8337
 121  RENUMBER  $8371
 122  MEM       $BDA6
 123  DETECT    $BDEF
 124  CHECK     $A27A
 125  DISPLAY   $BDFE
 126  ERR       $BFBA
 127  OUT       $9ED3

Die zusätzlichen Befehle des TSB[Bearbeiten | Quelltext bearbeiten]

TSB ist eine Verbesserung und Erweiterung von Simon's Basic. Wie war es möglich, in eine komplette BASIC-Erweiterung über 30 neue Befehle und Funktionen einzubauen? Das ist auf verschiedene Weisen realisiert worden:

  • Zusätzlichen Speicherbereich nutzen: $C400-$C4FF, $C750-$C9FF, $CA00-$CBFF, $CC00-$CFFF
  • Bestehende Programmteile kürzer fassen (optimieren)
  • Eine bestehende Funktion zusätzlich als Befehl bzw. einen Befehl zusätzlich als Funktion (oder auch als weiteren Befehl) nutzen
  • Als Befehl spezielle Token verwenden, die zuvor als nicht benutzbar gekennzeichnet waren
  • Neue Befehle bzw. Funktionen durch Zusammensetzen bestehender Befehls-/Funktionsschlüsselwörter generieren

Eine Übersicht der neuen Befehle und Funktionen nach Art ihrer Implementierung:

Token Name Verwendung
Mehrfache Nutzung:
$64 $28 AT Funktion / Befehl
$64 $7c CHECK Funktion / Befehl
$64 $7d DISPLAY Befehl/ Systemvariable
$64 $53 DIV Funktion / Befehl
$64 $55 DUP Funktion / Befehl
$64 $61 GRAPHICS Systemkonstante / Befehl
$64 $5B INSERT Funktion / Befehl
$64 $57 INST Funktion / Befehl
$64 $59 LIN Systemvariable / Befehl
$64 $52 MOD Funktion / Befehl
$64 $67 NRM Befehl / Funktion
$64 $10 PLACE Funktion / Befehl
$64 $60 SOUND Systemkonstante / Befehl
$64 $2C USE Befehl / Befehl <const> /
Systemvariable
Nutzung spezieller Token:
$64 $B1 X! Befehl
$64 $B2 MAP Befehl
$64 $B3 CLS Befehl
$64 $54 D! Befehl
$64 $22 DO Befehl
$64 $22 DONE Befehl
$64 $22 DO NULL Befehl
Zusammengesetzt:
$64 $54 $C2 D!PEEK Funktion
$64 $54 $97 D!POKE Befehl
$64 $7E $B0 ERROR Funktion+Operator: Befehl
$64 $7A $9C MEMCLR Befehl
$64 $7A $9A MEMCONT Befehl
$64 $7A $96 MEMDEF Befehl
$64 $7A $C3 MEMLEN Befehl
$64 $7A $93 MEMLOAD Befehl
$64 $7A $B0 MEMOR Befehl
$64 $7A $C2 MEMPEEK Befehl
$64 $7A $B9 MEMPOS Befehl
$64 $7A $87 MEMREAD Befehl
$64 $7A $8C MEMRESTORE Befehl
$64 $7A $94 MEMSAVE Befehl
$64 $6D $96 SCRSV DEF Befehl
$64 $6E $96 SCRLD DEF Befehl
$64 $6D $8C SCRSV RESTORE Befehl
$64 $6E $8C SCRLD RESTORE Befehl
Beseitigung unnützer Befehle:
$64 $41 DISAPA jetzt: MOBCOL

Kompatibilität[Bearbeiten | Quelltext bearbeiten]

Dieses Kapitel behandelt die Aufwärtskompatibilität von TSB, gibt also Antworten auf die Frage "Wie muss man ein in Simons' Basic geschriebenes Programm anpassen, damit es in TSB läuft?".

Laufwerk Geräteadresse[Bearbeiten | Quelltext bearbeiten]

Wenn das Simons-Basic-Programm eine andere Geräteadresse (ga) als 8 für ein Laufwerk benutzt, ist bei den entsprechenden Befehlen (LOAD, SAVE, OPEN)) eine Anpassung nötig.

Simons' Basic TSB
SAVE "datei",9 USE 9: SAVE "datei"
LOAD "datei",9 USE 9: LOAD "datei"
OPEN 2,9,2,"datei" USE 9: OPEN 2,use,2,"datei"

AT[Bearbeiten | Quelltext bearbeiten]

In der Screen-Positionierungsfunktion AT wurden mit der v2.40.131 die Argumente getauscht und damit an den Gebrauch der 13 anderen TSB-Screen-Befehle angeglichen. Im Beispiel eine Ausgabe an Position Zeile 20, Spalte 1:

Simons' Basic TSB
PRINT AT(1,20) a$ PRINT AT(20,1)a$

CHECK[Bearbeiten | Quelltext bearbeiten]

CHECK als Befehl hat eine völlig andere Bedeutung:

  • in Simons' Basic hat CHECK als Befehl die gleiche Syntax und Wirkung wie DETECT und ist daher überflüssig.
  • In TSB legt CHECK eine Liste der Prozeduren an, sodass alle folgenden Aufrufe beschleunigt werden.

Wird CHECK in Simon's Basic als Befehl verwendet, so muss es für TSB durch DETECT ersetzt werden.
Beispiel:

Simons' Basic TSB
CHECK 0: k=CHECK(0,1) DETECT 0: k=CHECK(0,1)

INST und INSERT[Bearbeiten | Quelltext bearbeiten]

Die Stringfunktionen INST und INSERT starten seit v2.40.131 mit dem Indexwert 1 statt 0. Das erste Zeichen findet man also an Position 1 und nicht mehr an Position 0.

Simons' Basic TSB
a$=INST("x",a$,0) a$=INST("x",a$,1)
a$=INSERT("x",a$,0) a$=INSERT("x",a$,1)

KEY[Bearbeiten | Quelltext bearbeiten]

Der Befehl KEY 0 hat eine andere Bedeutung:

  • in Simons' Basic führt KEY 0 zur Anzeige der Funktionstastenbelegung genauso wie DISPLAY.
  • In TSB schaltet KEY 0 die Funktionstastenbelegung ab, genauso wie der neue TSB-Befehl KEY OFF.
Simons' Basic TSB
KEY 0 DISPLAY

MEM[Bearbeiten | Quelltext bearbeiten]

  • Nach MEM kann man in Simons' Basic nicht mit CSET die beiden Zeichensätze (Groß-Grafik/Groß-Klein) wechseln. Soll ein SB-Programm mit MEM unter TSB laufen, muss nach MEM daher der Befehl CSET 0 folgen (in TSB ist CSET 1 die Voreinstellung).
Simons' Basic TSB
MEM MEM:CSET 0

MERGE[Bearbeiten | Quelltext bearbeiten]

  • In Simons' Basic lädt MERGE ein BASIC-Programm hinter ein bereits im Speicher vorhandenes.
  • In TSB lädt MERGE ein BASIC-Programm zu einem bereits im Speicher vorhandenen hinzu und integriert es anhand der Zeilennummern. Das neue wird also in das alte hineingemischt.

PAUSE[Bearbeiten | Quelltext bearbeiten]

Beim Befehl PAUSE werden der nachfolgende Zeilenvorschub und die Syntax der Zeitangabe unterschiedlich gehandhabt.

  • Simons' Basic:
    • bei einem PAUSE ohne Ausgabestring wird kein Zeilenvorschub angehängt.
    • die Zeitangabe kann ein beliebiger numerischer Ausdruck sein, auch eine Variable
  • TSB:
    • hinter PAUSE wird generell kein Zeilenvorschub angehängt.
    • bei einem PAUSE ohne Ausgabestring muss der Ausdruck für die Zeitangabe mit einer Ziffer beginnen, andernfalls wird die Fehlermeldung TYPE MISMATCH ERROR ausgegeben.

Beispiele:

Simons' Basic TSB
PAUSE "bitte warten", 1 PAUSE "bitte warten", 1
A=2: PAUSE A A=2: PAUSE 0+A
PAUSE "bitte warten", .9 PAUSE "bitte warten", 1

Im letzten Fall hätte man als TSB-Wert auch 0+.9 oder einfacher 0.9 schreiben können. Da sowohl in Simons' BASIC als auch in TSB der Wert für die Zeitangabe auf einen Ganzzahlwert beschnitten wird (dann also auf 0), ist das aber nicht sinnvoll.

RETRACE[Bearbeiten | Quelltext bearbeiten]

Der Befehl RETRACE hat eine völlig andere Bedeutung.

  • in Simons' Basic zeigt RETRACE das letzte vom Befehl TRACE erzeugte Beobachtungsfenster am Bildschirm rechts oben, falls der TRACE-Modus aktiv ist.
  • In TSB zeigt RETRACE die Initialen des Autors, das Jahr der ersten Veröffentlichung und die aktuelle Versionsnummer an.

SCRLD und SCRSV[Bearbeiten | Quelltext bearbeiten]

  • Auch bei den Befehlen SCRLD und SCRSV muss die Geräteadresse (ga) mit USE bestimmt werden.
  • Die Sekundäradresse darf nicht größer als 2 sein, denn dies würde in TSB bei SCRSV oder SCRLD nicht den Textschirm, sondern die Grafik speichern bzw. laden.
  • Empfehlenswert - wenn auch nicht zwingend notwendig - ist es, den Dateinamen-Zusatz "P,W" bzw. "P,R" statt "S,W" bzw. "S,R" zu benutzen, weil TSB anders als Simons' Basic auf jeden Fall die Startadresse speichert.
Simons' Basic TSB
SCRSV 2,9,2,"datei,S,W" USE 9: SCRSV 2,use,2,"datei,P,W"
SCRSV 3,8,3,"datei,S,W" USE 8: SCRSV 3,use,2,"datei,P,W"
SCRLD 2,8,2,"datei,S,R" USE 8: SCRLD 2,use,2,"datei,P,R"

USE[Bearbeiten | Quelltext bearbeiten]

Der Befehl USE zur Zahlenformatierung besitzt in TSB eine andere Syntax und muss in jedem Fall angepasst werden.

  • Simons' Basic Syntax: USE <formatstring>,<zahlstring>
  • TSB Syntax: USE <formatstring>,<zahl>

Beispiel:

Simons' Basic TSB
USE "##.##",STR$(22.89) USE "##.##",22.89

TSB Boot[Bearbeiten | Quelltext bearbeiten]

Mit dem BASIC-Programm "TSB.PRG" wird TSB geladen und gestartet:

100 POKE53280,11:POKE53281,12
110 PRINT"SnhP":IFATHEN 200
120 A$="BOOTING TSB ...":A=LEN(A$)
130 FORI=0TOA:PRINT:NEXT
140 PRINTTAB(20-A/2)A$:A=PEEK(186)
150 LOAD"TSB.NEO",A,1
200 POKE 190,A:POKE 56,128:POKE50559,212:SYS 32897

Erklärung:

  • Programmablauf: Da die Variable A zu Beginn den Wert 0 hat, werden zunächst die Zeilen bis 150 ausgeführt. Nach dem LOAD startet das Programm dann von vorn. Inzwischen hat A einen Wert <> 0 zugewiesen bekommen (in Zeile 140), so dass nun von Zeile 110 in Zeile 200 gesprungen wird.
  • Notwendig sind nur das Laden von "TSB.NEO" und Zeile 200:
    • In Speicherstellle 190 ($BE) wird die in TSB mit USE änderbare Gerätenummer gespeichert. Es ist sinnvoll, ihr den Wert PEEK(186) zu geben, weil damit die Nummer des Laufwerks, von dem geladen wurde, übernommen wird. Der vorgegebne Wert in TSB.NEO ist 8.
    • Mit POKE 56,128 wird das Speicherende des BASIC-Bereichs in TSB auf $8000 (original $A000) gesetzt, sodass der Code nicht durch Zeichenketten überschrieben werden kann.
    • POKE 50559,212 verhindert den PLAY-Bug (wenn im MUSIC-String keine Stimme selektiert wurde, stürzt SB/TSB ab).
    • Mit dem SYS wird TSB gestartet.
  • Die vier Steuerzeichen in Zeile 110 sind {CLR}{LOWER CASE}{UP/LO LOCK ON}{BLACK}.
  • Farben: Rahmen- und Hintergrundfarbe werden in Zeile 100, die Zeichenfarbe in Zeile 110 mit dem vierten Steuerzeichen geändert. Dies ist dann für den Ladervorgang gültig, wird allerdings in TSB bei einem Reset oder nach COLD wieder auf die Standardwerte zurückgesetzt.


Die folgenden Abschnitte zeigen Versionen des Boot-Programms für spezielle Zwecke.

Eigenes TSB-Programm automatisch starten[Bearbeiten | Quelltext bearbeiten]

Quelle: Thema: Simon's Basic/TSB: Farben, Zeichensätze, Sprites & Co. auf Forum64.de: Ladeprogramm für den Zeichensatzeditor "ZeichenEd".

Das folgende Programm bootet TSB von einem beliebigen Laufwerk und startet darin automatisch ein Programm, dessen Name hier mit den Zeichen "ze*", Codes 90,69,42, (für "zeichened") beginnt.

5 POKE53280,0:POKE53281,0
6 PRINTCHR$(147)CHR$(30)"LOADING..."CHR$(144);
10 IF A=0 THEN A=PEEK(186):LOAD"TSB.NEO",A,1
20 POKE190,A:POKE56,128
30 FOR P=631 TO 640:READ V:POKE P,V:NEXT
40 POKE 198,10:SYS 32897
60 DATA 76,79,193,34,90,69,42,34,58,131
  • Farben alle Schwarz: Bildschirmausgabe beim Booten unsichtbar
  • 631-640: Tastaturpuffer, 198: Zeichenanzahl im Tastaturpuffer
  • Daten: loA"ze*":{run}

Eigenes TSB-Programm in einen Onefiler inklusive TSB verwandeln[Bearbeiten | Quelltext bearbeiten]

Für manche Zwecke ist es vorteilhaft, wenn man - um sein Programm auszuführen - nicht erst TSB aufrufen und dann das eigentliche Programm laden und starten muss, sondern wenn gleich alles in einem Rutsch erledigt wird.

Mit dem Packprogramm Exomizer ist das möglich. Hierfür braucht man ein kleines Maschinensprache-Steuerprogramm, mit dem das eigene Programm und TSB in einer Datei abgelegt werden und das ein paar Befehle enthält, die TSB für das Abarbeiten des Basic-Programms initialisieren. Diese Datei wird danach vom Exomizer gepackt und für den Start auf dem C64 vorbereitet. Das könnte so aussehen (ACME-Syntax):

;
; Dieses Programm - wenn es den Namen "code.a" hat - erzeugt die Datei "code.prg",
; die sowohl das eigene TSB-PRG ("eigenes.prg") enthält als auch TSB selber
; ("tsb.neo", das ist auf jeder TSB-Disk).
; 
; ----------------------------------------- 

*=$0801                           

!bin "eigenes.prg",,2		; das eigene TSB-Programm (PRG-Format, Namen hier anpassen!) 

*=$7fd0
	lda #$60		; RTS-Befehl für vorzeitigen Ausstieg aus TSB-Init einpatchen
	sta $80bf
	jsr $8055		; TSB Initialisieren 
	lda #$20 
	sta $80bf		; Init wiederherstellen

	jsr $a659		; Basic-Zeiger setzen und CLR

	sei
	lda #$4c		; TSB-IRQ aktivieren
	sta $0314
	lda #$84
	sta $0315

	jmp $80d2		; und dann in die TSB-Interpreterschleife springen (RUN)

*=$8000

!bin "tsb.neo",20480,2		; TSB-Kernel einbinden

; ----------------------------------------- 

	!eof

; ----------------------------------------- 

Exomizer-Aufruf:

exomizer.exe sfx $7fd0 code.prg -o gepackt.prg -x "dec $d020 inc $d020"

Statt "gepackt.prg" den gewünschten Namen für das Endergebnis einsetzen.

; ----------------------------------------- 

Der Aufruf für den Exomizer ist oben schon zu sehen. Der x-Parameter erzeugt ein bisschen Action auf dem Bildschirm während des Entpackens. Die Ergebnis-Datei des Exomizers ("gepackt.prg") wird auf dem C64 einfach mit RUN gestartet und installiert dann also zunächst TSB und startet danach das eigene Basic-Programm.

Eigene Funktionstastenbelegung beim Start laden[Bearbeiten | Quelltext bearbeiten]

Da TSB den Speicherbereich für die Funktionstasten nicht beim Start löscht, ist es bei der Diskettenversion möglich, eine eigene Belegung abweichend von der in TSB vorgegebenen mit zu laden.

  1. Mit TSB eine F-Tastenbelegung nach eigenen Vorstellungen erstellen.
  2. Mit einem Maschinensprachemonitor den Bereich $C64D-$C74C mit Startadresse in eine Datei auf die TSB Diskette sichern, z.B. mit Vice "save" oder mittels SMON per "s"-Kommando in die Datei "KEYS.C64D".
  3. Das TSB Bootprogramm laden, wie im folgenden Beispiel ändern und dann als alternatives Programm - z.B. "TSB+.PRG" - speichern
  4. Oder einfach ein kleines Programm mit den 16 KEY-Anweisungen schreiben, abspeichern und bei Bedarf aufrufen. Damit wären auf einfache Weise auch Alternativbelegungen schnell erstellt.
100 POKE53280,11:POKE53281,12
110 PRINT"SnhP":IFB=2 GOTO 200
115 IF B=1 GOTO 151
120 A$="BOOTING TSB ...":A=LEN(A$)
130 FORI=0TOA:PRINT:NEXT
140 PRINTTAB(20-A/2)A$:G=PEEK(186)
150 IF B=0 THEN B=1:LOAD"TSB.NEO",G,1
151 IF B=1 THEN B=2:LOAD"KEYS.C64D",G,1
200 POKE 190,G:POKE 56,128:POKE50559,212:SYS 32897

Startet man nun TSB mit "TSB+.PRG", stehen die selbst definierten F-Tasten zur Verfügung.

  • Variable G enthält die aktuelle Gerätenummer (könnte durch den Befehl USE ersetzt werden)

TSB und Schnelllader[Bearbeiten | Quelltext bearbeiten]

Will man in TSB einen Schnelllader benutzen, gibt es grundsätzlich die Auswahl zwischen Software- und Hardware-Schnelllader. Da eine Software-Lösung immer zusätzlichen Speicherplatz benötigt, ist ein verändertes Betriebssystem eine attraktive Alternative. Hier muss man allerdings die Kompatibilität zu TSB beachten, das ja nicht nur eine eigene Funktionstastenbelegung mitbringt, sondern auch diverse Betriebssystem-Vektoren geändert hat, darunter die von LOAD- und SAVE. Mit Modulen wie dem Retro Replay arbeitet TSB nicht zusammen, da es den gleichen Speicherplatz belegt. Nach dem - noch beschleunigten - Laden und Starten von TSB wird der Modulspeicher überschrieben und weiteres Laden und Speichern nur noch in Normalgeschwindigkeit ausgeführt. Die folgenden Unterkapitel behandeln einige gut nutzbare Speeder. Getestet wurden sie im Emulator Vice und mit dem TC64.

Ladezeiten von "tsb.neo" (VD=Virtual Device, TDE=True Drive Emulation):

Vice VD 	 	02,2 sec
Vice TDE DolphinDOS	02.9 sec
Vice TDE SpeedDOS	06,6 sec
Vice TDE JiffyDOS	09,8 sec
Vice TDE Ultraload+	10,1 sec
Vice TDE	 	53,3 sec

Ultraload Plus[Bearbeiten | Quelltext bearbeiten]

Als Software-Variante ist Ultraload Plus zu empfehlen, weil man bei diesem Programm selbst festlegen kann, welchen Speicher es belegen soll. Im Thema: TSB Info - Post #104 auf Forum64.de ist beschreiben, wie man das tun kann.

SpeedDOS plus[Bearbeiten | Quelltext bearbeiten]

Sehr gut arbeitet SpeedDOS plus mit TSB zusammen, weil es zwar die Floppy-Geschwindigkeit erhöht und seine erweiterten Features einbringt, sich aber ansonsten nicht störend bemerkbar macht. Mit einem kleinen Zusatz im Boot-Programm kann man sogar seine DOS-Wedge-ähnlichen Befehle in TSB aktivieren:

TSB mit SpeedDOS plus
100 poke53280,11:poke53281,12
110 print"SnhP":ifathen 200
120 a$="booting tsb ...":a=len(a$)
130 fori=0toa:print:next
140 printtab(20-a/2)a$:a=peek(186)
150 load"tsb.neo",a,1
200 poke 33153,0:poke 33154,240
210 poke 190,a:poke 56,128:poke50559,212:sys 32897

In der zusätzlichen Zeile 200 wird in TSB auf den SpeedDOS-Tokenizer bei $F000 weitergeleitet. Die POKE-Adressen können sich allerdings in einer neuen TSB-Version ändern. Die passende Adresse (hier 33153 für TSB v2.31113, vorher 33341) lässt sich mit PRINT D!PEEK($0304)+10 ermitteln.

Am echten C64 oder mit dem TC64 benötigt SpeeDOS ein Parallelkabel zum schnelleren Laden und Speichern.

JiffyDOS[Bearbeiten | Quelltext bearbeiten]

TSB mit JiffyDOS

Der Schnelllader JiffyDOS ist inzwischen am weitesten verbreitet. Er arbeitet mit ein paar Einschränkungen auch mit TSB zusammen:

  • Die JiffyDOS-Befehlserweiterung ist nicht aktiv.
  • Die Funktionstastenbelegung von JiffyDOS sollte ausgeschaltet sein, da sie sonst mit der von TSB kollidiert. Bei der TSB-Diskettenversion kann man dafür wie bei SpeedDOS ein spezielles Laderprogramm erstellen, hier mit der Zeile 200 @f. Wird TSB von einer CRT gestartet, müssen die F-Tasten von JiffyDOS nachträglich deaktiviert werden. Dies ist mit SYS $E4C2 möglich, aber seit TSB v2.40227 nicht mehr erforderlich. Die weiteren Tastenbelegungen von JiffyDOS stehen auch in TSB zur Verfügung.
  • Der Befehl MERGE funktioniert nicht, wenn im C64 ein JiffyDOS-ROM eingesetzt ist.(Er arbeitet dann wie LOAD, löscht also ein im Speicher vorhandenes Programm.) Das Problem wird gelöst, wenn man bei MERGE die Laufwerks- und Sekundäradressenangabe anhängt (SA=0!): MERGE "name",use,0.

JiffyDOS braucht kein Parallelkabel. Für das TC64 ist die gepatchte und erweiterte Version S-JiffyDOS empfehlenswert.

Dolphin DOS[Bearbeiten | Quelltext bearbeiten]

TSB mit Dolphin DOS

Will man einen Hardware-Schnelllader mit höherer Geschwindigkeit, dann ist Dolphin DOS eine gute Wahl. Eigenschaften in TSB:

In Vice lässt sich TSB als CRT unter Dolphin DOS bequem mit Hilfe einer eigenen Konfigurationsdatei hinter dem Befehlsparameter "-config" starten. Dazu kopiert man seine "vice.ini" in die neue Konfigurationsdatei - etwa "dolphindos-tsb.cfg" - und ändert/ergänzt darin die folgenden Zeilen ($ROMpath und $CRTpath dem eigenen System entsprechend einsetzen):

[C64SC]
KernalName="$ROMpath\dolphindos\kernal-20-3.rom"
DosName1541="$ROMpath\dolphindos\c1541-20-x.rom"
CartridgeType=0
CartridgeFile="$CRTpath\tsbneo_md.crt"
Drive8ExtendImagePolicy=2
Drive8Type=1541
Drive8RAM8000=1
Drive8ParallelCable=1
Drive8TrueEmulation=1
VirtualDevice8=0

Am echten C64 oder mit dem TC64 benötigt DolphinDOS ein Parallelkabel zum schnelleren Laden und Speichern.

CRT, REU und die Nachladeprogramme[Bearbeiten | Quelltext bearbeiten]

Dieses Kapitel enthält Informatinen zu den CRT-Versionen von TSB und zu den Nachladeprogrammen und deren Behandlung in einer CRT und/oder einer REU.

Nachladeprogramme[Bearbeiten | Quelltext bearbeiten]

Auf der TSB-Diskette findet man neben der Systemdatei "tsb.neo" die folgenden Nachladeprogramme:

  • tsb.mem enthält den Speicherbereich $CC00-$CFFF aus "tsb.neo". Wenn dieser Speicher mit MEM überschrieben worden ist, wird er mit NRM wieder aus dieser Datei geladen.
  • tsb.ext enthält die DOS-Wedge, die mit INST geladen und in TSB als Erweiterung implementiert werden kann.
  • tsb.hsg enthält die "High-Speed-Grafik"-Erweiterung, die mit GRAPHICS in TSB implementiert werden kann und dann den Speicherbereich $7400-$7FFF belegt.

TSB auf CRT[Bearbeiten | Quelltext bearbeiten]

Seit März 2021 gibt es TSB auch als CRT-Datei. Die Entstehungsgeschichte dazu kann man im Thema: TSB Info - ab Post #6 auf Forum64.de lesen. Es gibt zwei unterschiedliche CRT-Versionen:

Beim Start wird TSB ins RAM bei $8000-$CFFF geladen und danach die Cartridge ausgeschaltet. Für die Nachladeprogramme ist eine Diskette nötig. Die Cartridge kann (zumindest im virtuellen Betrieb) zusammen mit einer REU benutzt werden, da die Register für die Steuerung - $DE00 für MAGIC DESK, $DF00 für REU - verschieden sind.
Beim Start werden folgende Daten aus der Cartridge ins RAM geladen:
  1. Die Nachlade-Routine: Sie belegt den Bereich $7F80-$7FFF. Mit ihr kann man aus der Cartridge bestimmte Versionen des Speicherbereichs $CC00-$CFFF nachladen, so dass keine Diskette mit "tsb.mem" und "tsb.ext" nötig ist.
  2. TSB: $8000-$CFFF
  3. TSB.HSG: Die High-Speed Grafikerweiterung liegt durch die Initialisierung im üblichen Bereich $7000-$7C74. Will man sie benutzen, kann sie mit SYS$7000 aktiviert werden.
Folgende Bereiche werden bei Bedarf aus der Cartridge nachgeladen:
  1. Der "TSB.MEM"-Bereich aus TSB, den MEM überschreibt, wird mit NRM wieder geladen.
  2. Der "TSB.EXT"-Bereich mit der DOS-Wedge sollte eigentlich mit dem Befehl INST geladen werden. Bis zur aktuellen Uniprom-CRT TSB Version 2.20903 ist das automatische Laden dieses Programms aus der CRT leider noch nicht implementiert, so dass nach INST bei nicht eingelegter Diskette die Meldung "File not found" erscheint. Es ist aber möglich, "TSB-EXT" mit der Nachlade-Routine aufzurufen: POKE 782,$CC: SYS$7F86: SYS$CC00
Die Uniprom-CRT kann nicht zusammen mit einer REU benutzt werden, da beide auf das gleiche Steuerungsregister zugreifen.

Nachladen von REU[Bearbeiten | Quelltext bearbeiten]

Bei der Nutzung der TSB-Diskettenversion wäre ein Nachladen der "tsb.mem"-Datei von der REU praktisch. Mit dem TSB-Hack TSB REUMEM von Petrus, der diese Option in TSB einrichtet und damit das Laden von Diskette überflüssig macht, ist dies möglich. Diese TSB-Variante könnte allerdings mit künftigen TSB-Versionen nicht mehr kompatibel sein.

Dieser Request ist inzwischen (seit v2.40.610) als Feature ins System eingebaut. Wer TSB mit dem Launcher startet, braucht nichts weiter zu tun. Wer das nicht tut (und von TSB z.B. nur die Datei "tsb.neo" lädt), kann das Gleiche direkt nach dem Laden mit SYS $C000 (oder SYS 49152) erreichen.