home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Fred Fish Collection 1.5
/
ffcollection-1-5-1992-11.iso
/
ff_disks
/
300-399
/
ff312.lzh
/
TrackSalve
/
Handleiding
< prev
next >
Wrap
Text File
|
1990-02-12
|
11KB
|
203 lines
TRACKSALVE
TrackSalve is gemaakt ter verbetering van het Trackdisk device. Er
zijn een paar problemen met de origine Trackdisk. Zo zitten er twee
bugs in, waarvan een wel heel vervelend als er meerdere drives zijn.
SetPatch 1.3.2 probeert er wel iets aan te doen, maar dat is niet
afdoende. Dan ervaren de meeste mensen het geklik van een lege drive
als storend. Verder kan Trackdisk een track niet verwerken als er iets
(kleins) mee is; alle goede sectoren zijn dan verloren. Dan weten we
nooit of de geschreven data goed op disk staat. En als we nu toch in
Trackdisk knoeien, is het een kleine moeite een drive readonly te
maken.
FUNCTIES
Zoals reeds gezegd kan/doet TrackSalve vijf verschillende dingen:
1. Bugs gerepareerd. Voorzover ze bij mij bekend zijn. Dit omvat de
RAWREAD/RAWWRITE routines en de nodisk routine. Vooral deze laatste
was een bijzonder vervelende bug, waardoor onbedoeld zomaar een andere
drive overschreven kan worden. Met deze patch is het veilig I/O te
doen en de overige drives leeg te laten.
2. Noclick. Sommige drives zijn uitgerust met een elektrische begrenzing
van track 0. De drive stopt met steppen op dit punt, ook al worden er
steppulsen naartoe gestuurd. Er zijn echter ook typen met een
mechanishe begrenzing, en de leeskop wordt dan gewoon met een stukje
rubber of zo geblokkeerd. Op dit laatste type blijt er altijd nog wel
wat hoorbaar. Noclick kan voor iedere drive apart aan en uitgeschakeld
worden. Het lijkt mij beter noclick niet in te schakelen bij drives
met een mechanische stop.
3. Readonly simulatie. Hiermee kan een drive net doen alsof er een disk
inzit met een open tab. Dit klinkt eenvoudiger dan het is en enig
beleid is dan ook geboden. Het Filesystem (DOS) houdt het insteken en
uithalen van disks bij. En, eenvoudig gezegd, DOS neemt aan dat de tab
niet verschoven kan worden van een disk die in een drive zit. Daarom
wordt er een diskchange verzonden ALS er een disk inzit EN deze is niet
write-protected EN de drive wordt overgeschakeld van R/W naar RO of
omgekeerd. (Een diskchange is een signaal dat Trackdisk uitzendt als er
een disk in of uitgehaald wordt). Nu is dit bijzonder vervelend als dit
gebeurt op een moment dat er naar de disk geschreven wordt. Daarom
wordt dit omschakelen uitgesteld tot de motor uitschakelt. Ook dit is
niet helemaal een goede bescherming en het is dan ook aan de gebruiker
om dit op een rustig moment te doen.
4. Tracksalvage. Indien voor de betreffende drive enabled, komt dit
mechanisme in actie zodra Trackdisk het opgeeft bij een fout op een
track. Trackdisk doet dit al als er EEn bit van een track niet goed is
(dus van de bijna 100.000 bits op een track). Dit is niet echt nodig,
er is nog heel wat te redden van de overige bits op de track. De track
wordt hiertoe opnieuw gelezen in een heel grote buffer en geanalyseerd.
Alle onverdachte data wordt ter beschikking gesteld van de task die van
disk leest. Er komt pas een Read/Write error wanneer een sector wordt
gevraagd waar een fout in zit. Een track die door TrackSalve bewerkt
is, kan niet weggeschreven worden. Het is dan ook bedoeld als een
hulpmiddel om data van disks te redden, niet om disks te repareren.
5. Verify. Zodra een track naar disk geschreven is, kan TrackSalve
controleren of het track goed op disk staat. Hiertoe wordt het weer
ingelezen in een speciale buffer en vergeleken met de oorspronkelijke
data. De Amiga is multitasking en het is trackdisk daarom niet bekend
naar welke task een foutmelding te sturen. Dus krijgt de user een
requester waarbij hij kan kiezen tussen Ignore en Rewrite. Mogelijk
dat dit niet tot een goed resultaat leidt; de user weet in elk geval
dat het mis is.
COMMANDLINE
Zodra ergens in de commandline de letters h of H of ? aangetroffen
worden, wordt de rest van de commandline volkomen genegeerd en alleen
een kleine gebruiksaanwijzing geprint:
Syntax: TrackSalve {<unit(s)> {<Command(s)>}}
Function: Modify a Trackdisk device unit addressed by its unit number
<no args> Show present status
Units:
0-3 Unit(s) Succeeding commands are applied to listed units
a All: Succeeding commands are applied to all TD units
! Warning Suppress error if the following unit does not exist
Commands:
<none> TD in RAM: No special functions, just all known bugs removed
s SectorDisk: Let Trackdisk only give errors from bad sectors
t .TrackDisk: Normal: Let TD give errors from bad tracks
n NoClick: Perform noclick on the unit(s)
c .Click: Normal: No noclick
r ReadOnly: Make unit read-only, simulate open disk-tab
w .WriteEnable: Normal: Unit is read/write according to disk-tab
v Verify: Read written track back and compare
b .Believe: Normal: Asume track is written well
o Original: Let TD execute in its original ROM code
/ Separator: F.e. "0/2n" Units 0 and 2 in RAM, noclick only on 2
? Explain: If given (anywhere), no commands are executed
Om te beginnen worden komma's, spaties en streepjes (-) volkomen
genegeerd. Letters daarentegen die niet herkend worden leiden tot het
afbreken van het programma, zonder dat welke functie dan ook uitgevoerd
wordt. Als er niets gedaan is, dan wordt dit door een mededeling van
dien aard benadrukt.
Units
Een unit wordt aangeduid met zijn nummer in plaats van zijn DOS-naam.
Dit komt omdat TrackSalve werkt met het trackdisk.device. Dit device
heeft niets met DOS te maken. DOS maakt er gebruik van en bouwt er een
systeem omheen op en dat systeem heet dan bv DF0:. Geldige unit nummers
zijn: 0, 1, 2, 3 en a. A staat voor alle units die op de computer
aanwezig zijn. Er moet minimaal een unit opgegeven worden voordat
hieraan commando's gegeven kan worden. Het commando wordt dan aan alle
opgegeven units doorgegeven. Als er een unit opgegeven wordt die niet
bestaat, dan is dit een fout en wordt er helemaal niets gedaan. Het
kan handig zijn om een unit op te geven die niet altijd bestaat, bij
voorbeeld als een drive een aan/uit schakelaar heeft. Zou het nummer
expliciet worden opgegeven dan onstaat een foutsituatie (returncode
20), wordt echter voor het unitnummer een uitroepteken geplaatst dan
wordt het commando uitgevoerd als de unit bestaat, en wordt een
waarschuwing (returncode 5) gegeven als de unit niet bestaat. Dit is
vooral bedoeld voor scripts als de Startup-Sequence.
Commands
Enkel een reeks units of 'a' zorgen ervoor dat deze units in gepatchte
code gaan draaien. Dwz in code waar de fouten uitgehaald zijn. Bv
'TrackSalve a' of 'TrackSalve 023'. Als hierachter commando's geplaatst
worden, gelden deze voor al deze units. Bv 'TrackSalve 01n' zorgt voor
noclick op de units 0 en 1. Na het commando kunnen weer nieuwe units
opgegeven worden. De commando's die hierachter komen gelden dan alleen
voor deze laatste units. Dus: 'TrackSalve 01n2r1s' zorgt voor noclick
op de units 0 en 1, unit 2 is readonly en unit 1 kan beter lezen van
kapotte tracks. Ook tegenstrijdige commando's kunnen worden opgegeven.
Op deze wijze laat 'Tracksalve an1c' alle units behalve 1 noclicken.
De separator of dummy commando is een "unit list reset". Bv 'TrackSalve
012/2n' laat de units 0, 1 en 2 in patched code draaien, maar alleen
unit 2 heeft noclick. Ander voorbeeld, stel dat alles aanstaat, dan
laat 'TrackSalve ao an' alles uitzetten behalve noclick.
HOE TE GEBRUIKEN
Hoewel Disksalv in pricipe zonder kan, werken beide programma's toch
bijzonder goed samen. Een Disksalv met TrackSalve zal over het alemeen
sneller en duidelijker verlopen. Ook is het mogelijk (maar nog niet
aangetoond), dat de combinatie meer data kan redden. Soms is slechts
een enkele file de moeite van het redden waard (bv een laatste
modificate, die nog niet op een backup staat), dan is het misschien
mogelijk deze file gewoon met copy van de beschadigde disk te halen.
Scheelt een hoop tijd als het lukt.
Het is mogelijk er direct na het insteken van een disk een requester
veschijnt met iets als 'unreadable' en 'diskdoctor'. Er is een aardige
kans dat met behulp van TrackSalve deze requesters wegblijven, en de
disk toch goed inlogt. Er is dan duidelijk meer mee mogelijk en niet
elke actie wordt afgedaan met iets van unreadable disk of zo.
IMPLEMENTATIE
De Trackdisk code wordt uit het operating system programma gekopieerd
en daar uitgebreid en gewijzigd. Voor elk unit apart kan de task deze
of de originele code uitvoeren. Mocht door een of andere oorzaak een
unit niet naar gepatchte code overgebracht kunnen worden, dan wordt dit
in een mededeling via standard out bekend gemaakt. Het programma gaat
daarna gewoon door, maar de return value is dan 10.
Twee functies gebruiken een buffer van ongeveer 26k. Indien niet
beschikbaar op het moment van het inschkelen van deze functies, zal
minimaal eens per 2.5 sec getracht worden alsnog de buffer van het
systeem te betrekken. Totdat de buffer beschikbaar is, zullen deze
functies niet actief zijn. Dit wordt met een toepasselijke tekst
bekend gemaakt en het programma zal ook hier de return value 10 hebben.
Gebruik TrackSalve zonder parameters om er achter te komen of de
functies actief geworden zijn.
De buffer wordt door alle tasks gebruikt. Het is zo geregeld dat
wanneer het ene unit de buffer ingebruik heeft voor bv een verify, het
andere, dat dit nodig heeft voor bv salve, wacht tot de eerste daarmee
klaar is. Dit zal normaal niet tot opstoppingen leiden, behalve als er
een requester uitstaat. De requester komt tevoorschijn als er een
verify error geconstateerd is.
Als het om de een of andere reden voor het systeem niet mogelijk is een
requester te laten zien, zal de verify functie een loop gaan uitvoeren.
In deze loop wordt het scherm geflitst, de drive led knippert enige
malen en het track wordt opnieuw geschreven. De loop wordt beeindigd
als aan een van de volgende vorwaarden voldaan is:
1. De disk is verwijderd.
2. Het track is zonder fouten van de disk gelezen.
3. Er weer een requester getoont kan worden.
COPYRIGHT
Copyright (c) 1990 D.W.Reisig.
Dit programma mag op niet commerciele basis verspreid worden.
Dit programma mag niet op commerciele basis verspreid worden.
D.W.Reisig
Woudweeren 10
1151 AV Broek in Waterland
Holland