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 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.21001

$0300-$0301: $9E9F
$0302-$0303: $825B
$0304-$0305: $8233
$0306-$0307: $823F
$0308-$0309: $917C
$030A-$030B: $8C7F
$0314-$0315: $96A0
$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.20806 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=$83DF:A=$86C3
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.21005

TSB  BEFEHLSTABELLE 
--------------------
  1  HIRES     $9208
  2  PLOT      $9265
  3  LINE      $9350
  4  BLOCK     $BBCC
  5  FCHR      $AC5F
  6  FCOL      $AC5F
  7  FILL      $AC5F
  8  REC       $BAF8
  9  ROT       $A160
 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     $94E9
 26  COLOUR    $952D
 27  MMOB      $95C8
 28  BFLASH    $966C
 29  MOB SET   $96E0
 30  MUSIC     $975F
 31  FLASH     $978E
 32  REPEAT    $9AF8
 33  PLAY      $9905
 34  DO        $B573
 35  CENTRE    $9945
 36  ENVELOPE  $9981
 37  CGOTO     $99D2
 38  WAVE      $99E1
 39  FETCH     $B001
 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      $9E35
 50  CALL      $9C66
 51  EXEC      $9C36
 52  END PROC  $9D13
 53  EXIT      $9D31
 54  END LOOP  $C96F
 55  ON KEY    $9D72
 56  DISABLE   $9DA4
 57  RESUME    $9DF9
 58  LOOP      $9E57
 59  DELAY     $C938
 60  CLS       $81C0
 61  >         $9E9D
 62  >         $9E9D
 63  >         $9E9D
 64  SECURE    $C941
 65  DISAPA    $9759
 66  CIRCLE    $948D
 67  ON ERROR  $9E73
 68  NO ERROR  $9E95
 69  LOCAL     $A301
 70  RCOMP     $9F21
 71  ELSE      $A2C8
 72  RETRACE   $9B47
 73  TRACE     $9B59
 74  DIR       $9544
 75  PAGE      $98EB
 76  DUMP      $9F50
 77  FIND      $A59B
 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       $C83A
 90  EXOR      $9E9D
 91  INSERT    $AF44
 92  POT       $9E9D
 93  PENX      $9E9D
 94  >         $9E9D
 95  PENY      $9E9D
 96  SOUND     $864D
 97  GRAPHICS  $8BCF
 98  DESIGN    $A634
 99  RLOCMOB   $A764
100  CMOB      $A79D
101  BCKGNDS   $A7AC
102  PAUSE     $A7DC
103  NRM       $A825
104  MOB       $A84A
105  OFF       $A876
106  ANGL      $AB16
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    $B4D3
116  KEY       $B586
117  PAINT     $B605
118  LOW COL   $93D9
119  COPY      $BA03
120  MERGE     $8337
121  RENUMBER  $8371
122  MEM       $BDA6
123  DETECT    $BDEF
124  CHECK     $A27A
125  DISPLAY   $BDFE
126  ERR       $BFBA
127  OUT       $9ED3

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 Befehle (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,ga,2,"datei"

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. Dies würde in TSB bei SCRSV oder SCRLD nicht den Textschirm, sondern die Grafik speichern bzw. laden.
  • Empfehlenswert - wenn auch nicht zwingend notwerndig - ist es, den Dateinamen-Zusatz "P,W" bzw. "P,R" statt "S,W" bzw. "S,R" zu benutzen, weil TSB anders als Simons' Basic die Startadresse speichert.
Simons' Basic TSB
SCRSV 2,9,2,"datei,S,W" USE 9: SCRSV 2,ga,2,"datei,P,W"
SCRSV 3,8,3,"datei,S,W" SCRSV 2,ga,2,"datei,P,W"
SCRLD 2,8,2,"datei,S,R" SCRSV 2,ga,2,"datei,P,R"

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

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.

ON KEY[Bearbeiten | Quelltext bearbeiten]

Der Befehl ON KEY besitzt in TSB eine andere Syntax und muss in jedem Fall angepasst werden.

  • Simons' Basic Syntax: ON KEY <string>,: <befehl>
  • TSB Syntax: ON KEY <string>: <befehl>

Beispiel:

Simons' Basic TSB
ON KEY "abc",: GOTO 10000 ON KEY "abc": GOTO 10000

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 und die aktuelle Versionsnummer an.

USE[Bearbeiten | Quelltext bearbeiten]

Der Befehl USE 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.OBJ",A,1
200 POKE 190,A:POKE 56,128:SYS 33136

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.OBJ" 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.OBJ 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.
    • 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 startet TSB und darin automatisch ein Benutzerprogramm.

5 POKE53280,0:POKE53281,0
6 PRINTCHR$(147)CHR$(30)"LOADING..."CHR$(144);
10 IF A=0 THEN A=1:LOAD"TSB.OBJ",8,1
20 POKE190,10:POKE56,128
30 FOR P=631 TO 640:READ V:POKE P,V:NEXT
40 POKE 198,10:SYS 33136
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}

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 folgt ändern und dann als alternatives Programm - z.B. "TSB+.PRG" - speichern:
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.OBJ",G,1
151 IF B=1 THEN B=2:LOAD"KEYS.C64D",G,1
200 POKE 190,G:POKE 56,128:SYS 33136

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

  • Variable G enthält die aktuelle Gerätenummer


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 eine Cartridge oder 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 dem Retro-Replay-Modul zum Beispiel gibt es deshalb Probleme. Die folgenden Unterkapitel behandeln einige gut nutzbare Speeder (getestet im Emulator Vice).

Ladezeiten von "tsb.obj" (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.obj",a,1
200 poke 33341,0:poke 33342,240
210 poke 190,a:poke 56,128:sys 33136

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 33341 für TSB v2.20908) lässt sich mit PRINT D!PEEK($0304)+10 ermitteln.

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.

Die weiteren Tastenbelegungen von JiffyDOS stehen auch in TSB zur Verfügung.

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\tsb_md.crt"
Drive8ExtendImagePolicy=2
Drive8Type=1541
Drive8RAM8000=1
Drive8ParallelCable=1
Drive8TrueEmulation=1
VirtualDevice8=0

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]

Die TSB-Diskette enthält neben der System-Datei "tsb.obj" folgende Nachladeprogramme:

  • tsb.mem enthält den Speicherbereich $CC00-$CFFF aus "tsb.obj". 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 implemenitert werden kann.
  • tsb.hsg enthält die "High-Speed-Grafik"-Erweiterung, die mit GRAPHICS in TSB implementiert werden kann und zusaätzlich den Speicherbereich $7000-$7C74 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. TSB.HSG: Die High-Speed Grafikerweiterung liegt im üblichen Bereich $7000-$7C74. Will man sie benutzen, muss sie mit SYS$7000 aktiviert werden.
  2. 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.
  3. TSB: $8000-$CFFF
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.