|
|
DataMuseum.dkPresents historical artifacts from the history of: Bogika Butler |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Bogika Butler Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 16896 (0x4200)
Types: TextFile
Names: »LNKDOK1.RNO«
└─⟦6661ddda9⟧ Bits:30009789/_.ft.Ibm2.50007339.imd Mogens Pelles Zilog 80,000 / EOS projekt
└─⟦this⟧ »LNKDOK1.RNO«
$#venstre240
$#højre1680
$#indryk120
$#linieafstand10
$#h/f-venstre216
$#h/f-højre1704
$#h/f-linieafstand10
$#hoved-højde60
$#fod-højde80
$#lige-margen0
$#sidenummer1
$#hovedav METANIC Aps.
$#hovedam
$#hovedah 1986.04.16
$#hovedbv LGJ
$#hovedbm LINK
$#hovedbh
$#hovedcv V1.0
$#hovedcm
$#hovedch Side #
$#hoveddm ______________________________________________________________
$#formatter
^UDokumentrevision:^u
1986.04.16 V1.0 Initialversion.
^UIndhold:^u
$#kopier
1. Introduktion.
2. Funktion.
3. Betjening.
3.1. Kommandosprog.
3.2. Millieu.
3.3. Fejlmeddelelser.
4. Restriktioner.
5 Hovedstrukturer.
5.1. Algoritme.
5.2. Interne datastrukturer.
5.3. Filer.
6. Afprøvning.
6.1. Metode.
6.2. Automatiseret afprøvning.
6.2.1. Global aktivering af testrutiner.
6.2.2. Bundtvis afprøvning.
6.2.3. Testdatagenerering.
6.3. Organisation.
6.3.1. Testkategorier,
6.3.2. Afprøvningsgrupper.
6.3.3. Testtilfælde.
6.3.4. Forudsætninger og succeskriterier.
Bilag 1. Sammenhæng mellem tabeller.
Bilag 2. Datastrukturer og primitiver.
Bilag 3. Standard-testrutiner.
Bilag 4. Kommandofiler for afprøvning.
$#formatter
^U1. Introduktion.^u
Dette dokument beskriver programmet LINK (i det følgen^-de også
kaldet linkeren), som er et relokerende
sammenkæd^-ningsprogram for objektfiler til
det unavngivne styresytem (baseret på NCR's EOS) til Metanics
unavngivne datamat ^-^-(baseret på Zilogs Z80.000 CPU).
I de følgende to
kapitler, der kan benyttes som en ^-^-slags brugs^-anvisning, omtales
program^-mets funktion og be^-tjening. I afsnit 4 forklares
konfigurationsparametrene, og derefter følger i afsnit 5 en gennemgang
af programmets ^-^-hovedstrukturer. I afsnit 6 redegøres for afprøvningen
- herunder for metode, hjælpemidler og praktisk håndtering.
^U2. Funktion.^u
Linkerens hovedfunktion er at danne en uddatafil (i
objektkodeformat) med netop eet objektmodul ved at sammen^-sætte
at antal objektmoduler fra et antal inddatafiler (også i
objektkodeformat). Under denne sammensætning
opløses eks^-terne referencer i den udstræk^-ning, det
er muligt, og re^-lokering foretages overalt, hvor det er angivet
at være nød^-vendigt. Samtlige ind- såvel som uddatafiler forudsættes
placeret på lagermedium med direkte tilgang.
Det resulterende objektmodul i uddatafilen omfatter lige så mange
segmenter, som det objektmodul i inddatafiler^-ne, der omfatter flest,
idet samtlige segmenter medtages i den fortløbende nummerering
hvad enten de er tomme eller ej.
Sammensætningen sker ved segmentvis (startende med seg^-ment
nummer 1) at placere de til segmentet svarende sektion^-er fra hvert
objektmodul i inddatafilerne (et fra hver) ^-^-efter hverandre i
adresserummet i den orden, som tilsiges af kommandoens liste af
inddatafiler, idet modulerne gennemgås startende ved begyndelsen
af første fil, gennemløbende den^-ne, derpå fortsættende ved begyndelsen
af næste fil og så^-ledes fremdeles.
Per konvention har den første adresse (basis) i enhver sektion nummer nul,
og for de sektioner, som ved sammensæt^-ningen er flyttet i
adresserummet, foretages en tilsvareende justering af de 32-bit enheder i
sektionen, der er markeret som re^-lokeringsfølsomme. Justeringen består i
at addere ^-^-reloke^-ringskonstanten for den pågældende sektion til 32-bit
enhed^-en. Relokeringskonstanten angiver den distance, som sekti^-onens
basis er flyttet i adresserummet. På til^-svarende måde justeres
de eksporterede symboler, der ikke er angivet at være absolutte.
Opløsning af eksterne referencer sker ved sammenligning af
symbolnavne, og foregår således, at der frit kan refere^-res til symboler fra
såvel forudgående som efterfølgende moduler. Modulets interne referencer
SKAL derimod være op^-løst.
Det resul^-terende objektmoduls eksportliste omfatter samtlige de sym^-boler,
som eksporteres af objektmodulerne i inddatafilerne tilsammen. Importlisten
omfatter kun de eks^-terne referencer, som ikke allerede er opløst, og kan
så^-ledes være helt tom.
For at være identiske skal symbolnavne være lige lange og tegn
for tegn stemme overens. Der skelnes 256 tegn med ordinalværdier
i intervallet 0 til 255 inklu^-sive. Således er f.eks. symbolnavnene 'A' og 'a'
ikke iden^-tiske.
^U3. Betjening.^u
I dette afsnit forklares, hvordan linkeren betjenes. Linkeren
kan anvendes på forskellige datamater, såvel udvik^-lingsanlæg, som den
endelige Z80.000 baserede målmaskine. I afsnit 3.1 forklares
kom^-mandosproget, og i afsnit 3.2 rede^-gøres for de datamat- og
styresystemaf^-hængige forskelle i betjening. I afsnit 3.3 gennemgås
fejlmeddelelserne.
^U3.1. Kommandosprog.^u
Linkeren aktiveres på den for det anvendte styresystem sædvanlige måde
(se evt. relevant dokumentation), og varia^-tioner i sammenkædningsprocessen
samt navnene på ind- og uddatafiler angives i en kommando (i modsætning
til i en fil) til linkeren. Det tilstræbes, at denne kommando altid angives
på samme linie, som aktiveringskommandoen, men va^-riationer kan forekomme
afhængigt af styresystemet. Lige^-ledes kan reglerne for filnavngivning
variere og er derfor ikke specificeret her (se afsnit 3.2). Filnavne
betragtes dog altd som bestående af et prefix efterfulgt af et suffix, og
kommandosprogets semantik omfatter en konvention for im^-plicit
(underforstået) angivelse af disse. I det følgende gennemgås syntaks og
semantik for kommandosproget. Syntaksen for en kommando er:
$#kopier
<command> ::= <option list><blanks><file list><blanks><comment>
<option list> ::= <option list element>*
<option list element> ::= <option><file name specifcation>#(0..1)
<option> ::= <map option> ! <output option>
<map option> ::= '/M' ! '/m'
<output option> ::= '/O' ! '/o'
<file name specification> ::= '='<file name>
<file name> ::= <prefix><suffix>
<blanks> ::= <blank>#(1...)
<blank> ::= ' '
<file list> ::= <file name><file list tail>#(0...)
<file list tail> ::= ','<file name>
<comment> ::= <printable ascii character>#(0...)
$#formatter
I <option list> angives hvorvidt logudskrift ønskes og
even^-tuelt tillige navne for dennes fil og for uddatafilen som
nedenfor beskrevet. I <file list> angives inddatafilerne (objektkodeformat)
i rækkefølge som ønsket med hen^-blik på objektmodulernes placering i
uddatafilen. <com^-ment>, der ignoreres af linkeren, kan evt. benyttes
til ^-^-dokumentationsformål - kommandoen gengives i logudskriften.
I <option list> kan angives to variantkoder "/M" og "/O". Samme
variantkode kan eventuelt angives flere gange, men uanset hvorledes dette
gøres, vil sidste angivelse være gældende.
For hver angiven variantkode dannes den tilsvarende fil.
Angives ingen vari^-antkoder
dannes logudskriften ikke, men uddatafilen forsøges altid dannet og
vil kun mangle, hvis der opstår fejl. Variantkoden /O er
altså kun nødven^-dig, hvis det implicit dannede uddatafilnavn
ikke kan brug^-es.
Angives et fuldt <option list ^-^-element> benyttes det eksplicit
angivne filnavne som det er.
Udelades <suffix> benyttes implicit '.MAP' for logfilen og '.OUT' for
uddata^-filen. Ude^-lades hele <file name specification> benyttes im^-plicit
prefix for det første fil^-navn i <file list> med im^-plicit suffix som
nævnt ovenfor. I <file list> kan suffix ligeledes udelades. I så fald
benyttes implicit '.OBJ'.
^U3.2. Millieu.^u
Linkeren er beregnet til at kunne fungere på 3 forskel^-lige datamater.
Disse er Bogika BDS 2001A med styresystemet CP/M, IBM PC med styresystemet
MS-DOS og Metanics unavngivne datamat (baseret på Zilog Z80.000 CPU) med
det unavngivne styresystem (baseret på NCR's EOS).
På nuværende tidspunkt er kun CP/M-udgaven implemente^-ret, hvorfor de
to øvrige ikke omtales i det følgende.
^U^KBDS 2001A med CP/M.^k^u
Linkeren kan udføres på en BDS 2001A med CP/M version 1.4 eller senere.
Programmet findes i filen LINK.COM, der er den
eneste fil, som er nødven^-dig for at kunne udføre sammen^-kædningsfunktionen.
LINK.COM kan placeres på vilkårligt ^-^-diskettedrev ligesom såvel ind^-data-
som uddatafiler. Linker^-en aktiveres med kommandoen (til CCP) LINK efterfulgt (på
samme linie) af mindst et blanktegn og dernæst en kommando til linkeren
som omtalt i afsnit 3.1. Ialt
kan maksi^-malt benyttes 127 tegn. Filnavne kan dannes som beskrevet i
CP/M Operating System Manual (se denne).
^U^KIBM PC med MS-DOS.^k^u
Ikke implementeret.
^U^KMetanics unavngivne datamat med unavngivent styresystem.^k^u
Ikke implementeret.
^U3.3. Fejlmeddelelser.^u
I dette afsnit forklares linkerens fejlmeddelelser. Disse deles
i tre kate^-gorier:
$#liste 120
$#punkt -
Fejl i betjeningen af linkeren (kommandoen).
$#punkt -
Fejl i inddatafilerne.
$#punkt -
Fejl i programudførelsen (overskridelse af konfigura^-tionsgrænser).
$#liste 0
^KFejl i betjeningen af linkeren.^k
$#liste 120
$#punkt ^K1. BadOption.^k
Den angivne variantkode kan ikke benyttes. /M og /O er eneste gyldige
vari^-antkoder. Se afsnit 3.1.
$#punkt ^K2. BadLogFileName.^k
Det (eksplicit eller implicit) angivne filnavn for log^-udskriften har ikke
korrekt form eller er allerede be^-nyttet til en anden fil.
Denne fejlmed^-delelse kan kun ^-^-forekomme, hvis ^-^-variantkode /M er be^-nyttet.
$#punkt ^K3. BadTargetFileName.^k
Det (eksplicit eller implicit) angivne filnavn for ud^-datafilen har ikke
korrekt form eller er allerede be^-nyttet til en anden fil.
Denne fejlmelding kan kun ^-^-forekomme, hvis variant^-kode /O er benyttet.
$#punkt ^K4. BadFileName.^k
Det (eksplicit eller implicit) angivne fil^-navn har ikke korrekt form.
Fil^-navne skal have 1 til 8 tegn før ^-^-punktet og 1 til 3 tegn efter.
Punktet skal altså KUN angives, hvis tegn skal følge det.
$#punkt ^K5. NoSuchFile.^k
Filnavnet er korrekt formet, men filen findes ikke (på det (eksplicit eller
implicit) angivne plade^-lager).
$#punkt ^K6. NoInputFiles.^k
Ingen inddatafiler har kunnet åbnes.
$#liste 0
^KFejl i inddatafilerne.^k
$#liste 120
$#punkt ^K7. BadFileFormat.^k
En af inddatafilerne indeholder ikke den korrekte fil^-formatkode.
$#punkt ^K8. BadModuleFormat.^k
Et eller flere af en eller flere inddata^-filers objekt^-moduler indeholder ikke
den korrekte mo^-dulformatkode.
$#punkt ^K9. UnexpectedEof.^k
En eller flere af inddatafilerne er ^-^-koretere end på^-gældende fils indhold
tilsiger.
$#punkt ^K10. RangeError.^k
Antallet af segmenter og/eller antallet af eksterne referencer overstiger
implementationsgrænsen i et eller flere objektmoduler.
$#punkt ^K11. BadSymbolName.^k
Et eller flere symbolnavnes længde over^-skrider imple^-mentationsgrænsen.
$#punkt ^K12. DuplicateModuleName.^k
To eller flere objektmoduler fra inddatafilerne har samme navn.
$#punkt ^K13. DuplicateExportSymbol.^k
To eller flere objektmoduler fra inddatafilerne eks^-portere et eller
flere symboler med samme navn.
$#punkt ^K14. NoInput.^k
Ingen objektmoduler fra inddatafilerne har kun^-net ac^-cepteres.
$#punkt ^K15. Baddibit.^k
Ugyldig kode fundet i ^-^-relocation-import-directory i et eller
flere objekt^-moduler.
$#punkt ^K16. BadRelocationCode.^k
Der foreskrives relokering i forhold til et ikke-benyt^-tet segment.
Bemærk, at per konvention benyttes samt^-lige segmenter fra 1 op til
det højest num^-mererede.
$#punkt ^K17. BadImportCode.^k
Inkonsistent reference til objektmodulets egen exter^-nal-import-symbol
di^-rectory.
$#liste 0
^KFejl i programudførelsen.^k
$#liste 120
$#punkt ^K18. NameTableOverFlow.^k
$#punkt ^K19. ModuleTableOverFlow.^k
$#punkt ^K20. SectionTableOverFlow.^k
$#punkt ^K21. FileNameTableOverFlow.^k
$#punkt ^K22. SymbolTableOverFlow.^k
$#punkt ^K23. ExternalImportTableOverFlow.^k
Overløb i den angivne ^-^-(maksimalallokerede) tabel.
$#liste 0
^U4. Restriktioner.^u
Linkeren er baseret på maksimalallokerede tabeller, hvis
størrelse fastlægges på oversættelsestidspunktet ved hjælp af
konfigurationskonstanter. Desuden er sidestørrelsen i logfilen
parametriseret. Linkeren omkonfigureres ved at ændre konstanterne
i filen LNKDC0-0.PAS og genoversætte.
I det følgende gennemgås betydningen af konfigurations^-konstanterne
og de indbyrdes sammenhænge mellem disse.
$#liste 120
$#punkt ^KCommandLineLength^k
Det største tilladte antal tegn i en kom^-mando til ^-^-linkeren.
$#punkt ^KFileNameLength^k
Det største tilladte antal tegn i et filnavn.
$#punkt ^KMaxSymbolNameIndex^k
Det største tilladte antal tegn i et ^-^-enkelt sym^-bolnavn.
$#punkt ^KMaxNooInputFiles^k
Det største antal inddatafiler, som linkeren kan hånd^-tere.
$#punkt ^KMaxNooModules^k
Det største samlede antal objektmoduler, som ^-^-linkeren kan håndtere.
$#punkt ^KMaxNooSections^k
Det største samlede antal objektsektioner, som linkeren kan håndtere.
$#punkt ^KMaxNooSegments^k
Det største antal segmenter i noget objekt^-modul, som linkeren kan håndtere.
$#punkt ^KMaxNooSymbols^k
Det største samlede antal distinkte symbol^-navne, som linkeren kan
håndtere.
$#punkt ^KMaxNooExternalImportSymbols^k
Det største samlede antal ^-^-distinkte importerede symbol^-navne, som linkeren
kan håndtere.
$#punkt ^KMaxNameTableIndex^k
Den største tilladte samlede længde af alle sym^-boler.
$#punkt ^KMaxHeapIndex^k
Størrelsen af hoben, der benyttes ved fletning af de forhåndsordnede
lister af eksportsymboler. Hobens stør^-relse skal være MaxNooModules + 1.
$#punkt ^KLogFilePageSize^k
Antallet af linier per side i logudskriften. ^-^-Første linie har nummer et.
$#liste 0
^U5. Hovedstrukturer.^u
I dette afsnit beskrives programmets hovedstrukturer. I afsnit 5.1
omtales hovedalgoritmen og i afsnit 5.2 gennemgås de vigtigste
datastrukturer. Afsnit 5.3 giver en oversigt over kildetekstens
fordeling på filer.
^U5.1. Algoritme.^u
Linkerens algoritme kan skitseres således:
$#kopier
Link
initialize
SetUp
Pass-1
Pass-1.1
Pass-1.2
Pass-2
terminate
$#formatter
Proceduren SetUp foretager indlæsning af kommandolinien
og afkodning af denne. Pass1 håndterer resumedelen af
^-^-objekt^-kodefilerne, idet Pass-1.1 læser denne fra inddatafil^-erne,
medens Pass-1.2 kompilerer oplysningerne og skriver disse
i uddatafilen og (formatteret) i logfilen. På grundlag af
^-^-Pass-1.2's kompilering foretager Pass2 sammensætning, relo^-kering
og resolvering af eksterne referencer.
^U5.2. Interne datastrukturer.^u
Linkeren betjener sig af et antal tabeller, hvoraf ^-^-nogle
er permanente (P), medens andre kun eksisterer under den første
^-^-halv-passage (1). Tabellerne er:
$#Liste 240
$#punkt 1. Variantkodetabel (P)
$#punkt 2. Filnavnstabel (P)
$#punkt 3. Modultabel (P)
$#punkt 4. Sektionstabel (P)
$#punkt 5. Værditabel (P)
$#punkt 6. Symboltabel (1)
$#punkt 7. Tegnstrengstabel (1)
$#punkt 8. Ekstern importtabel (P)
$#liste 0
Sammenhængen mellem tabellerne er illustreret i bilag 1. For en nærmere
beskrivelse af tabelindholdet henvises til programtekstens kommentarer.
Ud over tabellerne benyttes en række datastrukturer, af hvilke de
vigtigste er:
$#liste 240
$#punkt 11. Kommandolinie
$#punkt 12. FilNavn
$#punkt 13. Fil
$#punkt 14. Logfil
$#punkt 15. BitMappedFil
$#punkt 16. Symbolnavn
$#punkt 17. Hob
$#liste 0
Disse manipuleres af en række procedurer, og sammen^-hængen mellem
procedurer og datastrukturer fremgår af bilag 2.
^U5.3. Filer.^u
Linkerens kildetekst er fordelt på flere filer. I dette
afsnit gives en komplet fortegnelse over disse og en kort
forklaring af deres indhold.
$#kopier
Filnavn Indhold
-----------------------------------------------------------
LNK.PAS hovedprogram
( LNKDC0.PAS erklæringer
( LNKDC0-0.PAS konfigurationskonstanter
PRTSTCON.PAS testkonstanter
PRTSTTYP.PAS testtyper
PRTSTCOM.PAS testvariable
)
PRTSTEXT.PAS erklæringer af eksterne standard
testprocedurer/funktioner
LNKDF1.PAS globale testudskriftsprocedurer
LNKDF2.PAS globale tilgangsprimitiver
LNKDF7.PAS logudskriftsprimitiver
LNKDF8.PAS objektfilprimitiver
LNKP0.PAS SetUp
LNKP1.PAS Pass1
( LNKDF3.PAS lokale testudskriftsprocedurer
LNKDF4.PAS lokale tilgangsprimitiver
LNKP1-1.PAS GetInputFiles
LNKP1-2.PAS PutModule
)
LNKP2.PAS Pass2
( LNKDF5.PAS lokale testudskriftsprocedurer
LNKDF6.PAS lokale tilgangsprimitiver
)
)
$#formatter
«eof»