

                          map.device und Dummy-Handler
                          ############################

                             Version 1.0 (10.10.90)
                                      von

                               Bernhard Möllemann
                                Spöcker Weg 23c
                                7514 Eggenstein

                     E-Mail: s_moellemann@iravcl.ira.uka.de




I. Disclaimer:
==============

Das  map.device  und  der  Dummy-Handler  sind  Freeware und dürfen nur für
nicht-gewerbliche  Zwecke frei kopiert und benutzt werden, solange folgende
Bestimmungen eingehalten werden:

1. map.device   und   Dummy-Handler   dürfen   nur   zusammen   mit  diesem
   Dokumentationsfile verbreitet werden.
 
2. Das   Dokumentationsfile   darf   nur  auf  elektronischen  Datenträgern
   (Diskette   usw.)   und   nur   zusammen  mit  dem  map.device  und  dem
   Dummy-Handler verbreitet werden.

3. Der Preis für die Weitergabe darf die Kopierkosten nicht übersteigen.



II. Anleitung:
==============

Das  map.device erlaubt in Verbindung mit dem Dummy-Handler die Bearbeitung
des  Speichers von einem Diskettenmonitor aus, der verschiedene Devices wie
Festplatte oder resetfeste Ramdisk bearbeiten kann.

Das  map.device  kann  auch  als Ramdisk verwendet werden, indem man es auf
einen dem System unbekannten Speicherbereich legt.


1. Die Installation:
--------------------

Wie   alle  diskresidenten  Devices  (printer.device  usw.)  muß  auch  das
map.device in den Devs:-Ordner kopiert werden:

1> copy map.device Devs:

Um  als Diskette erkannt zu werden, benötigt das System einen File-Handler,
den Dummy-Handler.  Dieser muß nach L:  kopiert werden:

1> copy Dummy-Handler L:

Damit  AmigaDOS  mit dieser "Diskette" arbeiten kann, muß diese gemounted
werden:

1> mount MAP: FROM MapMountList

Natürlich   kann   man   die   MountList   an  seine  eigene  MountList  im
Devs:-Verzeichnis  anhängen und dann mit "mount MAP:" mounten.  Nur wer das
nicht  möchte,  muß  den "FROM"-Parameter mit angeben (Achtung, erst ab dem
1.3 Mount-Befehl!).


2. Der MountList-Eintrag:
-------------------------

MAP:    FileSystem      = L:Dummy-Handler
        Device          = map.device
        Unit            = 0
        Flags           = 0
        Surfaces        = 1
        BlocksPerTrack  = 128
        Priority        = 7
        Reserved        = 2
        Interleave      = 0
        LowCyl          = 0
        HighCyl         = 255
        Buffers         = 1
        BufMemType      = 1
        Mount           = 1
        GlobVec         = -1
        StackSize       = 512
#


FileSystem:
   Damit das AmigaDOS nicht auf die Idee kommt, irgendetwas im Speicher des
   Amiga  zu  ändern  (z.  B.  ihn zu validaten), muß ein Handler angegeben
   werden, der garantiert nichts anstellt.

Device:
   Hier muß natürlich der Devicename angegeben werden.

Unit:
   Hier sollte eine "0" stehen.

Flags:
   Auch hier sollte wieder eine "0" stehen.

Surfaces:
   Der hier eingetragene Wert ist eigentlich egal, muß aber größer als Null
   sein.

BlocksPerTrack:
   Auch  dieser  Wert  muß  größer  als  Null sein.  Praktisch ist es, wenn
   Surfaces*BlocksPerTrack   128  ergibt.   Dann   nämlich  entspricht  ein
   Cylinder den Adress-Bits 23 bis 16, so daß man bei Diskettenmonitoren im
   Cylinder  nur noch die ersten beiden Hex-Ziffern eingeben muß, um an die
   entsprechende Adresse zu gelangen.

   Eine Kickstart (bis 1.3) beispielsweise liegt bei $FC0000.  Cylinder $FC
   (Head  0,  Sector  0)  spricht  dann  genau diese Adresse an (siehe auch
   LowCyl und HighCyl).

Priority:
   Hierbei  handelt es  sich  um die Priorität, mit der der Handler-Prozess
   gestartet  wird.   Sie  liegt für gewöhnliche Amiga-File-Systeme bei 10.
   Da  dieser  Handler nicht sehr viel zu tun hat, sollte er eine Priorität
   von 7 erhalten.

Reserved:
   Normalerweise  ist  hier  die Anzahl der Bootblöcke angegeben.  Da diese
   "Diskette"  über  keine  Bootblöcke  verfügt,  sollte eine "0" angegeben
   werden.

Interleave:
   Hier sollte eine "0" stehen.

LowCyl:
   Hier  kann die Anfangsadresse der "Diskette" angegeben werden.  Wenn man
   den    Wert,   der   hier   steht,   mit   "Surfaces*BlocksPerTrack*512"
   multipliziert,  so  erhält man die Adresse des ersten Bytes, auf das man
   zugreifen  kann.   Um  auf  den  gesamten  Speicherbereich  zugreifen zu
   können, sollte man hier eine "0" eintragen.

HighCyl:
   Entspricht  im  Wesentlichen  "LowCyl",  jedoch wird hier die Endadresse
   angegeben.  Für normale Amigas empfiehlt sich der Wert "255", so daß der
   gesamte  Speicher,  bis  zur Endadresse der Kickstart, bearbeitet werden
   kann.   Für  Amigas,  die  mit einem 68012 oder größer aufgerüstet sind,
   kann  der Wert auf "65535" erhöht werden.  Wenn dann jedoch ein Programm
   Speicher  für  die  Bitmap der "Diskette" belegen muß, braucht der Amiga
   mindestens 1MB freien Speicher.

Buffers:
   Dieser  Wert  wird  vom Dummy-Handler ignoriert und kann beliebig belegt
   werden.

BufMemType:
   Das  sind  die  Memory-Flags  für  den  Speicher,  in den das map.device
   schreiben kann.  Da das map.device in jede Art Speicher schreibt, sollte
   hier "1" (MEMF_PUBLIC) stehen.

Mount:
   Je  nachdem, ob das FileSystem sofort oder erst bei der ersten Benutzung
   gestartet werden soll, muß hier "1" oder "0" stehen.

GlobVec:
   Da  es  sich  hierbei nicht um ein BCPL-Programm handelt, wird eine "-1"
   eingetragen.  Wer etwas anderes einträgt, braucht sich nicht zu wundern,
   wenn die Maschine crasht!

StackSize:
   Hier  steht  die  Größe des Stacks, der für den Handler-Prozess angelegt
   wird.  Für den Dummy-Handler sind 512 Bytes mehr als genug.


3. Funktionsweise:
------------------

Das map.device ist ein blockorientiertes Device.  Das heißt, daß es nur mit
Vielfachen  von  512  Bytes  umgehen kann.  Bei Read oder Write werden also
immer  komplette Blöcke gelesen und geschrieben.  Deshalb ist es auch nicht
möglich,  nur  einzelne  Bytes  zu schreiben.  Aus diesem Grunde sollte man
nicht in den Bereich der Customchips schreiben oder sie auslesen, auch wenn
man  nur  "erlaubte"  Words  ändert/liest.   Wer  es  trotzdem  tut, ist an
eventuellen Abstürzen des Rechners selber schuld!

Bereiche, die man meiden sollte sind:

$B00000 bis $E00000
$E80000 bis $F00000

Der erste dieser Bereiche ist bei den momentanen Amiga-Versionen zwar nicht
völlig belegt, in zukünftigen Versionen ist aber damit zu rechnen, daß auch
hier Customchips liegen können.

In  den  zweiten  Bereich  können  AUTOCONFIG(TM)-Karten  mit  IO-Bereichen
hinkonfiguriert worden sein.  Wer trotzdem hier hineinschreibt, sollte sich
schon  SEHR  gut  mit  seinem Rechner auskennen, sonst schickt er eventuell
ungewollt Befehle wie Format an seine Festplatte oder ähnliches.


4. Dummy-Handler und Ram-Disk
-----------------------------

Damit  das  Device  überhaupt  gemountet  werden  kann,  braucht man  einen
File-Handler.  "Gewöhnliche" File-Handler haben jedoch die hier unangenehme
Angewohnheit,  sich  überall  einmischen  zu  wollen,  und  aktivieren  zum
Beispiel  den Disk-Validator, der hier versuchen könnte, den Speicher so zu
"reparieren",  daß er wie eine Diskette aussieht.  Was das für Folgen haben
würde, kann sich jeder selber ausrechnen.

Damit  das  eben  nicht  passiert,  entstand  der  Dummy-Handler,  der  mit
Sicherheit  nicht  auf  das  Device  zugreift,  sondern sich schön still im
Hintergrund hält.

Wer  jedoch  einen  unangemeldeten Speicherbereich - wie oben erwähnt - als
Ramdisk  verwenden möchte, darf in der Mountlist als "FileSystem" nicht den
Dummy-Handler eintragen, da hier ja nichts passieren würde.  Je nachdem, ob
man mit dem alten Filesystem oder dem Fastfilesystem arbeiten möchte, trägt
man  stattdessen  entweder gar nichts ein, oder "L:FastFileSystem".  (Unter
AmigaDOS  2.0  sollte  man nicht einmal das tun.  Es reicht als DosType für
das  alte Filesystem "0x444F5300" und beim FFS "0x444F5301" anzugeben.) Bei
der  Verwendung  des alten Filesystems  unter  KickStart 1.3 muß zusätzlich
der Eintrag "Globvec=-1" gelöscht werden.

Wenn  man ein "richtiges" Filesystem benutzen möchte, sollte man die Anzahl
der  Puffer  ("Buffers")  auf  einen  Wert  von  ca.  5 heraufsetzen, sonst
verringert sich die Zugriffszeit unnötig.

