TSB Tipps
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:
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.
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.
- Mit TSB eine F-Tastenbelegung nach eigenen Vorstellungen erstellen.
- 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".
- Das TSB Bootprogramm laden, wie im folgenden Beispiel ändern und dann als alternatives Programm - z.B. "TSB+.PRG" - speichern
- 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:
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]
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 mitSYS $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]
Will man einen Hardware-Schnelllader mit höherer Geschwindigkeit, dann ist Dolphin DOS eine gute Wahl. Eigenschaften in TSB:
- Die @ und &-Befehle sind nicht aktiv.
- Die Funktionstastenbelegung von Dolphin DOS sollte man mit CTRL X abschalten, da sie sonst mit der von TSB kollidiert.
- Die Tasten für den erweiterten Bildschirm-Editor funktionieren in TSB alle bis auf CTRL @ und CTRL &.
- Der Maschinensprache-Monitor kann mit SYS$F000 (nicht SYS0!) gestartet werden.
- Die Reset-Funktionen sind zum Teil nutzbar. Mit Restore +Space kann man z.B. TSB beenden und zu Dolphin DOS zurück. Von hier kann - sofern nicht wichtige Speicherbereiche überschrieben wurden - mit
SYS 33139
TSB wieder aktiviert werden.
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:
- 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.
- TSB: $8000-$CFFF
- 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:
- Der "TSB.MEM"-Bereich aus TSB, den MEM überschreibt, wird mit NRM wieder geladen.
- 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.