Nieuwe ontwikkelingen in SCSI ROM
=================================

Auteur  :  Gert de Boom
Datum   :  27 september 1994
Versie  :  0.1 / genereren gesprekstof


1. Meerdere partities mogelijk maken

   In de partitiesector is behalve de reeds nu aanwezige 6
   tabellen nog ruimte voor zo'n 9 (iets meer, maar zodoende
   een mooi rond aantal) extra partities. Dit brengt het geheel
   op 15 stuks.

   Dit betekent dat de MSX dan drives zal aankunnen van
   15 * 32 MB = 480 MB. Dit moet voorlopig voor de meeste toepassingen
   meer dan genoeg zijn. De extra partitietabellen worden net als
   de extra 2 die er ten opzichte van de PC al bijgeplaatst zijn
   voorgeplaatst. De huidige 6 partities vormen de eerste 6
   partities. De nieuwe partities vormen van boven naar beneden
   (dus niet andersom) de partities 7 tot en met 15.

   Bij het aansluiten van meerdere HDD's moet er mogelijkheid
   gemaakt worden 6 gedurende deze sessie actieve partities te
   kiezen. Dit is echter niet standaard. Standaard worden de 6
   partities gewoon gevuld met de maximaal op een harddisk aanwezige
   partities net zolang tot de 6 partities opgebruikt zijn.

   Er wordt pas afgeweken van de standaard-routines indien het
   bitje in de klokchip aangeeft dat er gewerk dient te worden
   met Extended partitions. Op dat moment selecteert de ROM bij
   meerdere HDD's 6 partities uit een tabel van max. 4 HDD's (zo
   was het toch ?) = 60 partities. Deze 6 partities kunnen over
   meerdere HDD's verspreid staan.

2. Beveiligen van paritities tegen lezen/schrijven van andere ID's

   Network checking on. Dit bitje geeft aan dat de standaard manier
   van werken, d.w.z. alleen de HDD waarvan het ID in de partitie
   tabel staat als eigenaar van deze partitie mag lezen en schrijven
   en de andere ID's slechts mogen lezen, vervangen wordt door de
   uitgebreidere manier. Hierbij mogen ook andere ID's schrijven
   op de harddisk en/of lezen of juist niet.
   In de partitiesector worden hiertoe 2 bytes volgeschreven per
   partitie. Dus maximaal 30 bytes worden hiervoor gebruikt. Deze
   staan vlak voor de maximale partitietabel. De eerste 2 bytes
   horen bij partitie 1, de tweede 2 bytes bij partitie 2, enz.

   De werking is als volgt:

   Byte 1: Lees byte
   b7 - ID7 mag lezen op deze partitie
   b6 - ID6 mag lezen op deze partitie
   b5 - ID5 mag lezen op deze partitie
   b4 - ID4 mag lezen op deze partitie
   b3 - ID3 mag lezen op deze partitie
   b2 - ID2 mag lezen op deze partitie
   b1 - ID1 mag lezen op deze partitie
   b0 - ID0 mag lezen op deze partitie

   Byte 2: Read byte 
   b7 - ID7 mag schrijven op deze partitie
   b6 - ID6 mag schrijven op deze partitie
   b5 - ID5 mag schrijven op deze partitie
   b4 - ID4 mag schrijven op deze partitie
   b3 - ID3 mag schrijven op deze partitie
   b2 - ID2 mag schrijven op deze partitie
   b1 - ID1 mag schrijven op deze partitie
   b0 - ID0 mag schrijven op deze partitie

   Op de een of andere wijze moet als de harddisk in de uitgebreide
   mode staat bekend gemaakt worden aan de diskROM dat de FAT sectors
   voor elke schrijfactie opnieuw gelezen moeten worden, om te
   voorkomen dat deze corrupt raakt. Waarschijnlijk kan de DOS2call
   CHGDSK in dit geval zijn diensten bewijzen.

   Overigens heeft dit natuurlijk wel een snelheidsverlies tot
   gevolg; dit wordt echter m.i. goed gemaakt door de uitgebreidere
   mogelijkheden.

3. Driversoftware laden

   Standaard staat er in de jumptable een JP naar een bepaald
   adres binnen de SCSI ROM. Bij een jump wordt er dan gesprongen
   naar de routine die achter de jump staat. Door niet direct naar
   deze routines te springen, maar naar een interne checkroutine
   is het mogelijk in het geval dat er in het geheugen op een
   bepaalde plaats een bitje gezet is niet naar de interne routines
   te springen, maar naar een driver in een door MSXDOS 2.x
   gealloceerd stukje geheugen.

   Op de een of andere manier moet er een chain van zulke stukjes
   geheugen te maken zijn, waardoor elk type SCSI device kan jumpen
   naar zijn eigen devicedriver. Misschien dat er voor die mogelijk-
   heid een soort Device-call moet komen, die aangeeft voor wat
   voor device deze driver geschikt is. Samen met de identificatie
   die Jurgen al ingebouwd heeft (CDROM, etc) moet het op die manier
   mogelijk zijn direct de juiste driver aan te spreken.


Voor bovenstaande mogelijkheden zijn 3 bitjes in de klokchip
noodzakelijk:

000 - Alle mogelijkheden uit
001 - Driver jumping on
010 - Extended partitions on
100 - Extended networking on

Door OR-instructies zijn op deze wijze alle mogelijkheden te
maken.

4. Basic Calls

GetHostID(IDnr)                      - Welk ID heeft de interface
SetHostID(IDnr)                      - Stel ID interface in
Map()                                - Lost MSX DOS 2 problemen op
Map2()                               - Lost MSX DOS 2 problemen op
GetTargetID(driveletter)             - Van welke HDD is deze partitie
                                       afkomstig ?
ListPartitions()                     - Geeft alle mogelijke partities
                                       op alle drives met een nummer
                                       er voor. Zie opmerking 1.
SetTargetID(driveletter, partitienr) - Met drive X: wordt partitie Y
                                       aangesproken
IsReadable(variabele, driveletter)   - Is de betreffende drive voor
                                       dit ID leesbaar ?
IsWriteable(variabele, driveletter)  - Is de betreffende drive voor
                                       dit ID schrijfbaar ?





Opmerking 1
===========

Lijst stel ik me iets dergelijks voor. 3 kolommen met daarop
een aanwijzing over op welke harddisk dit te vinden is en hoe
groot de betreffende partitie is. Bij extended networking is
er maximaal sprake van 60 partities, dus zelfs dan moet het
er nog oppassen.

List of partitions
------------------
01. TargetID x, xx MB      21.                   41.
02.                        22.                   42.
.                          .                     .
.                          .                     .
20.                        40.                   60.
