
Noch mehr TechTalk
(Reiner Seitz 7/97)

Das FID-FILE-Format

Der folgende Artikel ist aus meiner jngsten Beschftigung mit einer 
Gattung von Fileformaten entstanden, die mit Auftauchen von Festplatten 
ihren Einzug gehalten hat und seitdem immer mehr Funktionen ausfhrt. Diese 
Files enden immer auf .FID (manche auch auf .FIB; das ist im Prinzip 
dasselbe). Diese Files werden von den neueren Generationen der 
Betriebssysteme von LocoScript und CP/M Plus ausgewertet. Namentlich sind 
das smtliche LocoScriptversionen ab v2.16H (nicht das Standard v2.16), bis 
zur heutigen Generation v4.xx, sowie ab CP/M Plus mit XBIOS-Versionen 1.8 
bis zum neuesten CP/M v1.15. Achtung! Die lteren Versionen von LocoScript 
und CP/M Plus, namentlich die auf den Disketten, die bei der Auslieferung 
vom Joyce dabei waren, ignorieren die .FID Files vollstndig. Deshalb sind 
auch mit diesen Versionen keine Festplatten, gesteuerten 3,5" Laufwerke, 
LocoScript-Screensaver etc. mglich. Bei LocoScript ist das nicht weiter 
tragisch, wer benutzt schon noch die Versionen vor  v2.16! Fr CP/M sind 
Updates entweder bei Cirtech oder bei Locomotive erhltlich. Nheres bei 
mir (Reiner Seitz). 

Um das in den folgenden Zeilen Beschriebene in der Praxis nachvollziehen zu 
knnen, ist es also ntig, mindestens LocoScript v2.16h und/oder CP/M v1.8 
oder CP/M v1.15 zu verwenden. Die Versionsangabe wird immer beim 
Bootvorgang angezeigt!

.FID ist eine Endung, genauso wie .COM oder .EMS oder .SUB, aber diese 
Endung bewirkt folgendes: Neuere Betriebssystemversionen schauen whrend 
des Bootvorgangs nach solchen Files, noch bevor etwa ein CP/M nach einer 
PROFILE.SUB sucht, was ja auch automatisch geht, und laden Files mit dieser 
Endung und versuchen sie auszufhren. Bedingung dafr ist, da das File im 
sogenannten 'PRL-Format' vorliegt, nach dem PRL-Header von 100H Bytes einen 

Sprungbefehl enthlt und gleich anschlieend die Bytefolge 8 mal Z, dann 
'FID', dann 2 Bytes einer beliebigen Versionsnummer, dann eine 2stellige(!) 
Prfsumme ber das komplette File. Ist eine dieser Bedingungen nicht 
erfllt, wird das File kommentarlos nicht ausgefhrt.
Wozu ist das nun gut? Nun, z.B. um Bildschirmschoner, Festplatten, B-
Laufwerke, FLASHDRIVES einzubinden und das Betriebssystem damit vertraut zu 
machen. Aber auch VIREN wren damit denkbar (vielleicht).


Ein kurzes AssemblerProgramm knnte also so ausschauen:

	cseg	;auf relative Adressierung umschalten
			; bei ZASM muesste hier rel stehen.
	JP Start	; hier beginnt schon der FID-Header...
	DB 26,26,26,26,26,26,26,26,'FID'	; ..muss so sein..
	DB 0,1	; version 1.0
	DW 0	; hier mu spter die Prfsumme hin..
	DB 0,0,0,0,0,0,0,0	; das hier ist reserviert..
	DB 0,0,0,0,0,0	; ..und muss so sein
Start:
	LD HL,Nachr	; unser Programm zeigt sich ..
	OR A	; Reset Carry: soll nicht resident sein	
	ret	; ..und verabschiedet sich.
Nachr:	DB 'Ich bin nur bei neuen Betriebssystemen zu sehen'
	DB 0DH,0AH,0FFH	; CRLF fuer CP/M und Abschlusszeichen.
	End

dieses Programm mu durch den Assembler gejagt werden, z.B. ZASM. Dann 
folgt der LINK-Vorgang mit der Option OP, um ein .PRL-File zu erzeugen. 
Jetzt mu noch die Prfsumme errechnet werden. Ich verwende dazu ein 
kleines Programm, das sich aus der Adresse (0001) des Files die Lnge holt 
und umrechnet: 
Len=eingetragene Lnge + Lnge der Relozierinfo + Lnge des PRL-Headers (1)
Len=(0001) + int(((0001) +7)/8) + 256  (2)
Dann von Adresse 0000 des Files beginnend bis Len die Bytes ausliest und 
zusammenzhlt. Das Ergebnis wird an Adresse (0110H) (unter SID: Adr. 120H), 
eingetragen. Dann mu noch die Endung von .PRL auf .FID umgendert werden 
und auf eine Betriebssystemdiskette (entweder LocoScript ab v2.16H oder 
CP/M ab Bios v1.8) kopiert werden.
Das Programm mu dann so ausschauen (mit dem Dienstprogramm DUMP gedumpt:

CP/M 3 DUMP - Version 3.0
0000: 00 57 00 00 00 00 00 00 00 00 00 00 00 00 00 00  .W.............. (PRL-Header: 
0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................ ( ..Lnge =0057H)
0020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................ (Len=57+(57+7)/8+100H
0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................ (   =162H Bytes:
0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
0050: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
0060: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
0070: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
0080: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
0090: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................

00B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
00F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
0100: C3 20 01 1A 1A 1A 1A 1A 1A 1A 1A 46 49 44 00 01  . .........FID.. (FID-Header
0110: 73 17 00 00 00 00 00 00 00 00 00 00 00 00 00 00  s............... (110: Checksum=1773H)
0120: 21 25 01 B7 C9 49 63 68 20 62 69 6E 20 6E 75 72  !%...Ich bin nur
0130: 20 62 65 69 20 6E 65 75 65 6E 20 42 65 74 72 69   bei neuen Betri
0140: 65 62 73 73 79 73 74 65 6D 65 6E 20 7A 75 20 73  ebssystemen zu s
0150: 65 68 65 6E 0D 0A FF 20 00 00 00 20 00 00 00 00  ehen... ... ....
0160: 00 00 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A  ................ (Ende: Ab 162H nur 
0170: 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A 1A  ................ ( ..Fllbytes.)

Beim Neustart von unserer so prparierten Startdiskette erscheint dann ....(ja das soll 
jeder selber ausprobieren knnen). Dieses kurze Beispielprogramm bewirkt nicht sehr viel im 
Joyce, macht sich nur am Start bemerkbar und verabschiedet sich dann. Es aknn aber ausgebaut 
werden, um in dei Betriebsablufe des Joyce einzugreifen, und resident zu bleiben, d.h. 
dauerhaft im Speicher zu bleiben. Dazu gengt es schon, vor dem RETURN-Befehl oben das OR A 
durch ein SCF (set Carry Flag) zu ersetzen.

Wer sich damit beschftigen will, der findet die zugehrigen Files FIDTST1.Z80 und 
FIDTST1.FID auf Diskette. FIDTST1.FID ist das fertig assemblierte und prparierte Ergebnis 
aus obigem Beispiel, das direkt verwendet werden kann. Um einen Effekt zu bekommen, mu es 
auf eine Startdiskette mit geeignetem Betriebssystem (siehe oben) kopiert werden, in Gruppe 
0, und dann von dieser Startdiskette ein Warm- oder Kaltstart ausgefhrt werden. 
