Im Anfangsbereich eines jeden Turbo-Pascal-(2.xx,3.xx)-Programms und auch von Turbo selbst liegen die Terminal-Steuercodes.
Initial werden diese Steuercodes mit TINST.COM eingerichtet. TINST installiert außerdem die Taktfrequenz sowie Editorkommandos. TINST ist übrigens selbst in Turbo Pascal geschrieben. Das Programm patcht aber nur das Programm TURBO.COM, keine eigenen. Zum Anpassen fremder kompilierter Pascal-Programme muss deshalb das Programm zunächst in TURBO.COM umbenannt werden, ehe mit TINST die Terminaleinstellungen geändert werden können.
Wenn man TINST nicht zur Hand hat, kann man auch selbst patchen. Der Installationsbereich der Terminal-Steuercodes ist 125 Byte lang und geht bei Turbo 2.xx bzw. 3.xx von 0153h-01EFh. Im Folgenden wird dieser Bereich erläutert. Zum Auslesen der Daten aus vorhandenen kompilierten Programmen habe ich ein kurzes Perl-Programm geschrieben (s.u.).
Die Strings sind wie in Pascal üblich längendefiniert (1. Byte = Länge). Länge 00 kennzeichnet einen leeren String.
0124 AFrequency: DEFW 4 ;Operating frequency of CPU (1-12 MHz) ;Screen-Installationsbereich ;---------------------------- ;Terminal >> 0153 TermTypStr: DEFB 20,'No Terminal selected' 0168 Width: DEFB 80 ;Bildschirmbreite (1-256) 0169 Height: DEFB 24 ;Bildschirmhoehe (1-256) 016A DEFB 0 ;wozu das? 016B InitialStr: DEFS 16 017B ResetStr: DEFS 16 ;Cursor >> 018B CursorStr: DEFS 16 ;Muster fuer Cursor-Positionierung 019B BinaryAddr: DEFB 0 ;0=ASCII, 1=Binary address 019C ColumnOff: DEFB 0 019D LineOff: DEFB 0 019E XPosition: DEFB 0 ;Pos. in Muster 019F YPosition: DEFB 0 ; " 01A0 DelayCursor: DEFW 0 ;Delay after cursor address (0-255 ms) ;Line >> 01A2 ClearScrStr: DEFS 6 ;Clear screen 01A8 HomeStr: DEFS 6 ;Home cursor (Dieser String ist leer, ;wenn Clear screen schon Home macht) 01AE InsLineStr: DEFS 6 ;Insert line 01B4 DelLineStr: DEFS 6 ;Delete line 01BA DelayLine: DEFW 0 ;Delay after Clear, Delete and Insert (0-255 ms) ;Highlight >> 01BC EraToEolStr: DEFS 6 ;Erase to end of line 01C2 HLStartStr: DEFS 6 ;Start highlighting 01C8 HLEndStr: DEFS 6 ;End highlighting 01CE DelayHL: DEFW 0 ;Delay after EraToEol and HighLight 01D0
Auszug aus dem Handbuch:
L.2.1 Terminaltyp
Geben Sie den Namen des Terminals ein, das Sie installieren wollen. Wenn Sie TINST beenden, werden die Werte gespeichert und der Terminalname erscheint auf der Liste der Terminals. Falls Sie später TURBO Pascal nochmals für das Terminal installieren müssen, können Sie es auf der Liste anwählen.
L.2.2 Soll ein Initialisierungsstring an das Terminal geschickt werden?
Wenn Sie Ihr Terminal initialisieren wollen, wenn Turbo startet (z.B. um Befehle auf Funktionstasten zu programmieren), antworten Sie Y auf diese Frage. Wenn nicht, drücken Sie RETURN.
L.2.3 Soll ein Resetstring an das Terminal geschickt werden?
Hier können Sie einen String definieren, der bei Beendigung von TURBO Pascal an das Terminal geschickt wird. Die obige Beschreibung des Initialisierungsbefehls gilt hier ebenfalls.
L.2.4 CURSOR LEAD-IN Befehl
Cursor Lead-in ist eine spezielle Sequenz von Zeichen, die Ihrem Terminal mitteilt, daß die folgenden Zeichen eine Adresse auf dem Bildschirm sind, auf die der Cursor plaziert werden soll. Wenn Sie diesen Befehl definieren, werden Ihnen die folgenden zusätzlichen Fragen gestellt:
L.2.4.1 Soll der CURSOR POSITIONING Befehl zwischen Zeiten- und Spaltenadresse geschickt werden?
Bei einigen Terminals muß der Befehl zwischen den zwei Zahlen, die die Reihen- und Spaltencursoradresse definieren, stehen.
L2.4.2 Soll der CURSOR POSITIONING Befehl nach der Zeile und Spalte geschickt werden ?
Bei einigen Terminals muß der Befehl nach der Definition der Zeilen- und Spaltenadresse des Cursor stehen.
L.2.4.3 Spalte zuerst?
Bei den meisten Terminals muß die Adresse in folgendem Format stehen: zuerst REIHE, dann SPALTE. Wenn dies bei Ihrem Terminal so ist, antworten Sie mit N. Wenn Ihr Terminal zuerst die SPALTE benötigt und darin die REIHE, antworten Sie Y.
L.2.4.4 Offset der ersten Zeilennummer
Geben Sie die Zahl ein, die zur Zeilenadresse addiert werden soll.
L.2.4.5 Offset der ersten Spalte
Geben Sie sie Zahl ein, die zur Spaltenadresse addiert werden soll.
L.2.4.6 Binäre Adresse?
Den meisten Terminals muß die Cursoradresse in binärer Form geschickt werden. Falls das auch für Ihr Terminal gilt, geben Sie Y ein. Wenn Ihr Terminal die Cursoradresse in ASCII Ziffern erwartet, geben Sie N ein. Sie werden dann zusätzlich gefragt:
L.2.4.6.1 2 oder 3 ASCII Ziffern?
Geben Sie die Anzahl von ASCII-Ziffern in der Cursoradresse Ihres Terminals an.
L.2.5 CLEAR SCREEN Befehl
Geben Sie den Befehl ein, der den gesamten Bildschirminhalt löscht (wenn nötig sowohl für den Vorder-, als auch für den Hintergrund).
L.2.6 Führt CLEAR SCREEN auch den Cursor in HOME Position?
Dies ist normalerweise der Fall; wenn dies für Ihr Terminal nicht zutrifft, geben Sie N ein und definieren den Cursor HOME Befehl.
L.2.7 DELETE LINE Befehl
Geben Sie den Befehl ein, der die Cursor-Zeile ganz löscht.
L.2.8 INSERT LINE Befehl
Geben Sie den Befehl ein, der an der Cursorposition eine ganze Zeile einfügt.
L.2.9 ERASE TO END OF LINE Befehl
Geben Sie den Befehl ein, der die Zeile von der Cursorposition bis zum rechten Zeilenende löscht.
L.2.10 START OF 'LOW VIDEO' Befehl
Wenn Ihr Terminal über verschiedene Bildintensitäten verfügt, dann geben Sie hier den Befehl ein, der den Bildschirm abdunkelt. Wenn dieser Befehl definiert ist, wird die folgende Frage gestellt:
L.2.10.1 START OF 'NORMAL VIDEO' Befehl
Definieren Sie den Befehl, der den Bildschirm auf Normalbild setzt.
L.2.11 Zahl der Zeilen auf Ihrem Bildschirm
Geben Sie die Zahl der horizontalen Zeilen Ihres Terminals an.
L.2.12 Zahl der Spalten auf Ihrem Bildschirm
Geben Sie die Zahl der vertikalen Spaltenpositionen an.
L.2.13 Verzögerung nach CURSOR ADDRESS (0-255ms):
Verzögerung nach CLEAR, DELETE und INSERT (0-255ms):
Verzögerung nach ERASE TO END OF LINE und HIGHLIGHT On/Off (o255 ms)
Geben Sie die gewünschte Verzögerung in Millisekunden für die angegebenen Funktionen ein. <RETURN> bedeutet Null (keine Verzögerung).
L.2.15 Arbeitsfrequenz Ihres Mikroprozessors in MHz (für Verzögerungen)
Da die weiter oben angegebenen Verzögerungen von der Arbeitsfrequenz Ihrer CPU abhängen, müssen Sie diesen Wert definieren. Die Installation ist beendet, die Installationsdaten werden auf die Diskette geschrieben und Sie kehren in das höhere Menü zurück (siehe Abschnitt 1.6). Die Installationsdaten sind auch in der Installationsdatendatei gespeichert. Das neue Terminal erscheint in der Terminalwahlliste bei zukünftigen TINST-Läufen.
0153 | TermTypStr: | 13,ADDS 20/25/30 | 4,ANSI (=DEC Rainbow, 8 bit) | 18,Kaypro with hilite | 19,Wyse WY-100/200/300 | 16,PC 1715 IWF/Jahn |
---|---|---|---|---|---|---|
0168 | Width: | 80 | 80 | 80 | 80 | 80 |
0169 | Height: | 24 | 24 | 24 | 24 | 24 |
016A | ???: | 0 | 0 | 0 | 0 | 0 |
016B | InitialStr: | 03,1B,'0','P' | 00 | 00 | 00 | 00 |
017B | ResetStr: | 00 | 00 | 00 | 00 | 00 |
018B | CursorStr: | 04,1B,'Y',00,00 | 08,1B,'[','0','0',';','0','0','H' | 04,1B,'=',00,00 | 04,1B,'=',00,00 | 03,1B,00,00 |
019B | BinaryAddr: | 1 | 0 | 1 | 1 | 1 |
019C | ColumnOff: | 32 | 1 | 32 | 32 | 128 |
019D | LineOff: | 32 | 1 | 32 | 32 | 128 |
019E | XPosition: | 3 | 7 | 4 | 4 | 3 |
019F | YPosition: | 4 | 4 | 3 | 3 | 2 |
01A0 | DelayCursor: | 0 | 0 | 0 | 0 | 0 |
01A2 | ClearScrStr: | 01,0C | 04,1B,'[','2','J' | 01,1A | 02,1B,'*' | 01,0C |
01A8 | HomeStr: | 00 | 03,1B,'[','f' | 00 | 00 | 00 |
01AE | InsLineStr: | 00 | 04,1B,'[','1','L' | 04,0D,1B,'E',0D | 02,1B,'E' | 00 |
01B4 | DelLineStr: | 00 | 04,1B,'[','1','M' | 02,1B,'R' | 02,1B,'R' | 00 |
01BA | DelayLine: | 0 | 0 | 0 | 0 | 0 |
01BC | EraToEolStr: | 02,1B,'K' | 03,1B,'[','K' | 01,18 | 02,1B,'T' | 01,16 |
01C2 | HLStartStr: | 00 | 04,1B,'[','1','m' | 03,1B,'C','1' | 02,1B,')' | 00 |
01C8 | HLEndStr: | 00 | 04,1B,'[','0','m' | 03,1B,'B','1' | 02,1B,'(' | 00 |
01CE | DelayHL: | 0 | 0 | 0 | 0 | 0 |
Beispiel PC 1715
0153 TermTypStr: 16,PC 1715 IWF/Jahn 0168 Width: 80 0169 Height: 24 016A ???: 0 016B InitialStr: 00 017B ResetStr: 00 018B CursorStr: 03,1B,00,00 <- 3 Zeichen: ESC,128+Y,128+X 019B BinaryAddr: 1 <- X und Y werden binär angegeben 019C ColumnOff: 128 <- die 128 ist zu X zu addieren 019D LineOff: 128 <- die 128 ist zu Y zu addieren 019E XPosition: 3 <- Position des X-Werts im CursorStr 019F YPosition: 2 <- Position des Y-Werts im CursorStr 01A0 DelayCursor: 0 01A2 ClearScrStr: 01,0C <- 1 Zeichen: ^L 01A8 HomeStr: 00 01AE InsLineStr: 00 01B4 DelLineStr: 00 01BA DelayLine: 0 01BC EraToEolStr: 01,16 <- 1 Zeichen: ^V 01C2 HLStartStr: 00 01C8 HLEndStr: 00 01CE DelayHL: 0
Beispiel Z9001
0153 TermTypStr: 11,Z9001-Color 0168 Width: 40 0169 Height: 24 016A ???: 0 016B InitialStr: 00 017B ResetStr: 00 018B CursorStr: 03,1B,00,00 019B BinaryAddr: 1 019C ColumnOff: 128 019D LineOff: 128 019E XPosition: 3 019F YPosition: 2 01A0 DelayCursor: 0 01A2 ClearScrStr: 01,0C 01A8 HomeStr: 00 01AE InsLineStr: 00 01B4 DelLineStr: 00 01BA DelayLine: 0 01BC EraToEolStr: 00 01C2 HLStartStr: 02,14,'3' 01C8 HLEndStr: 02,14,'2' 01CE DelayHL: 0
Beispiele Pascal880s
125 0153 TermTypStr: 15,PC 1715 / 1715W 0168 Width: 80 0169 Height: 24 016A ???: 0 016B InitialStr: 03,1B,'^','P' 017B ResetStr: 03,1B,'^','@' 018B CursorStr: 03,1B,00,00 019B BinaryAddr: 1 019C ColumnOff: 128 019D LineOff: 128 019E XPosition: 3 019F YPosition: 2 01A0 DelayCursor: 0 01A2 ClearScrStr: 01,0C 01A8 HomeStr: 00 01AE InsLineStr: 00 01B4 DelLineStr: 00 01BA DelayLine: 0 01BC EraToEolStr: 01,16 01C2 HLStartStr: 00 01C8 HLEndStr: 00 01CE DelayHL: 0
125 0153 TermTypStr: 20,KC85+D004/KC compact 0168 Width: 80 0169 Height: 24 016A ???: 0 016B InitialStr: 01,85 017B ResetStr: 01,84 018B CursorStr: 03,1B,00,00 019B BinaryAddr: 1 019C ColumnOff: 128 019D LineOff: 128 019E XPosition: 3 019F YPosition: 2 01A0 DelayCursor: 0 01A2 ClearScrStr: 01,0C 01A8 HomeStr: 00 01AE InsLineStr: 00 01B4 DelLineStr: 00 01BA DelayLine: 0 01BC EraToEolStr: 01,16 01C2 HLStartStr: 00 01C8 HLEndStr: 00 01CE DelayHL: 0
Zum Auslesen dient ein kleines Perl-Programm terminal_info.pl.
*2024* die Version terminal_info2.pl erkennt die Turbo-Pascal-Version, mit der compiliert wurde. Beim Programm turbo.com werden außerdem die aktuell eingerichteten Editierkommandos angezeigt.