T0S1C.DOC
T0S1C.DOC - De inhoud van track 0, sector 1 (versie C)
Dit memo specificeert de inhoud van track 0, sector 1, van de
DJOE disk formaten. Het is een upwards-compatible extensie van
versie B. De extensies betreffen de lokatie van file-systeem
specifieke informatie, de inhoud van deze informatie for CP/M
file systemen, en de lokatie van de zogenaamde "custom text",
die voorheen altijd in de CP/M BIOS was opgenomen.
De extensies voor CP/M maken het mogelijk om tzt een andere
CCP en BDOS te gebruiken, zonder aan de BIOS te hoeven
sleutelen. Ook hoeft de CCP/BDOS niet meer op system tracks
te staan.
De inhoud van fysieke track 0, fysieke sector 1:
00 Interface-byte voor koude boot
01-02 Laad adres
03-04 Sector lengte
05-06 Start adres
06 Aantal sectoren te laden
07-0F Lijst van te laden sectoren
10-1F Volume naam
20-2F Kind naam
30-4F File-systeem specifieke informatie
50-7F Custom text
De kind naam dient aan dezelfde eisen te voldoen als een
volume naam, en geeft de globale indeling van de disk
aan. In de BIOS komen tabellen voor die zekere kind
namen de noodzakelijke informatie bevatten. Deze informatie
bevat onder andere het file-systeem type van een disk, nu nog
meestal CP/M. Maar ook MSDOS en CHAOS en zo zijn mogelijk.
Voor meer specifieke informatie zoals het aantal tracks, de
grootte van allocatie blokken en zo is 32 bytes ruimte
gereserveerd. De indeling van deze bytes is file-systeem
afhankelijk; de indeling voor CP/M file systemen volgt
zodadelijk.
Een component van de kind informatie is ook de vertaling
van logische sectoren naar fysieke sectoren. De functie van
ALIEN is dus opgenomen in de specificatie van disk kinds.
Het is nu ook mogelijk om transparant ALIEN disks te
gebruiken.
Enkele kind namen die op het moment in gebruik zijn:
CPM_DS5DD CP/M, Double Sided, 5", Double Density
CPM_SS5DD CP/M, Single Sided, 5", Double Density
CPM_WIN512 CP/M, Winchester, 512 bytes/sector
CPM_GENERIC CP/M, Generic (voor netwerk support)
CPM_P2000M CP/M, P2000M formaat
MSDOS_5 MSDOS, 5"
De file-systeem specifieke informatie voor CP/M is als volgt:
30-3F Disk Parameter Block (DPB) voor BDOS
3F-40 Laad adres voor CCP/BDOS
41-42 Lengte in bytes van CCP/BDOS
43-44 Start track van CCP/BDOS
45-46 Start sector van CCP/BDOS
47-48 Checksum van CCP/BDOS
49-4F Gereserveerd, dient 00 te zijn
Oudere disks kunnen een DPB van allemaal 00 bytes hebben.
Voordat de DPB informatie gebruikt wordt dienen enige checks
op zinvolheid gemaakt te worden. De DiskServer BIOS checkt
bijvoorbeeld
SPT > 0
3 <= BSH < 8
BLM == (1<<BSH)-1
DSM > 0
AL0 != 0
Hetzelfde geldt voor de CCP/BDOS informatie. In ieder geval
geeft de waarde 0000 voor een van deze velden aan dat de
CCP/BDOS informatie niet correct is (dus een laad-adres van
0000 is niet toegestaan).
Een BIOS dient geen onnodige restricties te plaatsen op deze
waarden. De enige op lange termijn aanvaardbare restricties zijn
dat de CCP/BDOS aaneengesloten logische (128-byte CP/M) sectors
dient te beslaan, en dat de BIOS niet overschreven wordt. Dus,
een lengte die geen veelvoud van 128 is, is toegestaan, en een
laadadres van bijvoorbeeld 0100 is toegestaan.
Bij een koude boot dient de CCP/BDOS geladen te worden met deze
informatie, en niet (zoals voorheen) door de secondary
bootstrap. Er komt een programma SYS dat deze velden goed zet
(SYSGEN en/of MOVCPM hoeft dat dus niet te doen).
In ieder geval dient de informatie overeen te komen met wat er
op de disk staat. Ter extra controle dient de checksum, die
bestaat uit de eenvoudige 16-bit som van alle bytes met de
carry er in geroteerd. Dwz, per byte zoiets als
LD C,A
LD B,0
ADD HL,BC
LD C,0
ADC HL,BC
Deze checksum wordt berekend over de opgegeven lengte, niet
over de geladen bytes (belangrijk indien de lengte geen veelvoud
van 128 is).
Bovendien dient de CCP/BDOS altijd te beginnen met 2 jump
instructies. Dus, byte 0 en 3 van de CCP/BDOS moeten altijd
C3 hex zijn.
Oude stijl BIOSsen die de CCP en BDOS nog geintegreerd hebben,
krijgen hier tijdens MOVCPM/SYSGEN de goede waarden ingevuld.
Dat is meestal:
laad adres = BIOS adres - 1600
lengte = 1600
track = 0
sector = 5 of 9 (afhankelijk van de fysieke sector grootte)
De custom text wordt door de BIOS en/of TimeSharing geprint als
Custom Text (VOLUME)
op een nieuwe regel. De custom text mag uitsluitende bestaan uit
printbare ASCII karakters, afgesloten met een 00 byte. Op lange
termijn zijn ook printbare MSX karakters toegestaan (bijvoorbeeld
letters met accenten of zo). De custom text is voor alle disk
soorten, wat voor kind naam ook. Hij dient alleen geprint te
worden bij een koude boot en/of login danwel op special
verzoek. Dus niet bij iedere directory listing.
Per systeem kunnen er restricties zijn, zoals daar zijn:
Op de Exidy wordt altijd 1 sector van 512 bytes geladen.
Op de Ordinator wordt altijd 1 sector geladen op F000.
Op de Diskserver moet altijd 1 sector geladen worden, omdat
de Diskserver ROM bytes 03-04 nog interpreteert als de totale
lengte.
Met dank aan Geert-Jan en Maurits voor suggesties.
Luc, 26/05/90