HET WERKEN OP DISK EDITORS OP DE AMIGA deel 1 """"""""""""""""""""""""""""""""""""""""""""""" Uitleg van de structuur van een AmigaDOS opslagmedium """"""""""""""""""""""""""""""""""""""""""""""""""""" Teneinde een diskeditor ten volle te kunnen gebruiken met alle mogelijkheden ervan, dient u wel eerst de structuur van een AmigaDOS geregeerd opslagmedium te begrijpen. Verwijzingen worden gemaakt naar een P.D. diskeditor, genaamd 'Sectorama'. Niettemin zullen de informatie en de basisgegevens ook van toepassing zijn op andere diskedit-programma's. Ter vermijding van misverstanden: de blokken, waar het in deze documentatiefile over gaat omvatten telkens 512 bytes. Voor grotere blokken zal de omvang van de Hash Tabel varieren en alle info na die tabel wordt verplaatstnaar een plek voor de tabel, zodat het secundaire type woord aan het eind van het blok komt. Alle media, die ik ken, gebruiken trouwens blokken van 512 bytes. Dit document is verdeeld in twee stukken. Het eerste deel is een uitleg van wat elk woord in elk type blok beduidt, hoe verschillende types blokken zijn gestructureerd, en hoe deze blokken onderling gerelateerd zijn op een AmigaDOS geregeld opslagmedium. Het tweede deel is een stuk uitleg over hoe een diskeditor werkt. Zoals dus 'Sectorama'. I) BLOCK INFO ========== In het algemeen bevat een blok op een AmigaDOS opslagmedium een checksum, een header key (waarvan de waarde zoveel is als het disk-adres van het blok) en een block type, dat duidelijk maakt met welk type block u te maken hebt. Zodoende weet u volgens welke format dat bepaalde blok is opgemaakt. Denk er wel om, dat ik met de term 'block' verwijs naar een 512 bytes grote hap opslagruimte op een AmigaDOS medium. Zo verwijst een blok op een floppy of een harde schijf naar een 512 bytes grote sector. In VDO: en RAM: verwijst de term naar 512 aaneengesloten bytes ergens in het geheugen. Denk er ook om, dat de omvang van elk gegeven in een block bestaat uit een 32 bits woord. Voor alle blokken zien de eerste zes woorden er als volgt uit: +--------------------+ 0 | Block Type | +--------------------+ 1 | Header Key | +--------------------+ 2 | Number or count | +--------------------+ 3 | Table or Data size | +--------------------+ 4 | First or next data | +--------------------+ 5 | Checksum | +--------------------+ : : Block Type - Dit geeft de algemene omvang en structuur van het blok aan. Meestal heeft hij een van de volgende drie waarden: T.SHORT = 00000002 Dit geeft aan, dat het blok het eerste is van een list (d.w.z. een zg. HEADER BLOCK). T.LIST = 00000010 Dit geeft aan, dat het blok een LIST BLOK is. Een list blok is onderdeel van een gelinkte (aan elkaar gekoppelde) lijst van list-blokken en bevat een tabel met pointers (wijzers) naar data-blokken. T.DATA = 00000008 Dit geeft aan, dat het blok een DATA BLOK is. Een data-blok is eenvoudig een blok, dat data bevat en dat verderop in dit verhaal uitgebreider wordt beschreven. Header Key - Dit 32-bits brede 'woord' is het adres van de drive voor dit blok. Het is een pointer (wijzer) naar dit blok. Number or Count - Als dit geen data blok is, is het een totaal-telling van het aantal data-blokken (en, derhalve, het hoogste volgnummer van enig aangesloten datablok), waarnaar door dit blok gewezen wordt. Als het wel een data blok is, dan is het hier staande getal het volgnummer van dit data blok. Dat wil zeggen: het maakt ons duidelijk, dat dit data blok het zoveelste lid is van een hele lijst data blokken. Table or Data Size - Dit is het getal, dat aangeeft hoeveel 32-bits woorden er in de tabel staan van de data die beginnen bij woord nr.6 van dit blok. First or Next Data - Dit is een pointer naar het data blok, dat volgt op dit blok. Als dit blok een header-blok is of een list-blok, dan zal deze pointer gericht staan op het eerste data blok in een hele lijst van data blokken. Checksum - Als dit getal en de waarde van alle andere woorden in dit blok worden opgeteld, dan moet de som precies 0 zijn. Op deze manier ontdekt AmigaDOS of een blok al dan niet goed leesbaar is. Bij alle types blokken (behalve data blokken) hebben de laatste vier woorden het volgende formaat: : : +----------------+ 7C | Hashchain | +----------------+ 7D | Parent | +----------------+ 7E | Extension | +----------------+ 7F | Secondary Type | +----------------+ Hashchain - wijst op de volgende invoer in deze hash chain. Parent - wijzer op de dichtstbijzijnde directory. Dat is het directory blok, dat ofwel wijst naar dit blok ofwel wijst naar een gekoppelde lijst (dus een hash chain), waarvan dit blok een onderdeel is. Extension - wijzer naar het volgende uitbreidingsblok, dat in feite de tabel verlengt, die begint bij woord nr.6 van dit blok. Secondary Type - Dit woord geeft precies aan wat voor soort blok dit is. En hij geeft precies aan welke functie en structuur dit blok heeft. De mogelijke codes in dit woord zijn: ST.ROOT = 00000001 Dit identificeert het ROOT BLOK, dat wil zeggen: de 'root directory' van de schijf. Dit blok wijst uiteindelijk naar alle files en directory op de schijf. ST.USERDIR = 00000002 Dit identificeert een USER DIRECTORY BLOK, die wijst naar alle files en directories, die in deze directory zijn opgenomen. ST.FILE = FFFFFFFD Dit identificeert een FILE HEADER BLOK, als het blok type in woord nr.1 T.SHORT is, of een FILE LIST BLOK als het blok type T.LIST is. Een FILE HEADER BLOK wijst naar alle data blokken, die deel uitmaken van de file. Als er teveel data blokken zijn voor dit blok om naar te verwijzen, dan wordt er verwezen naar een lijst van FILE LIST BLOKKEN door de extensie-pointer in woord nr.7E. Een FILE LIST BLIK maakt eigenlijk alleen maar de tabel groter en wijst naar het volgende FILE LIST BLOK, als er meer data blok pointers nodig zijn. Denk erom, dat de hierboven gegeven woord-definities niet van toepassing zijn op alle blok types en functies. Als hun functie niet van toepassing is, is hun waarde meestal op 0 gezet.