DataMuseum.dk

Presents historical artifacts from the history of:

Bogika Butler

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about Bogika Butler

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download

⟦3aae0696a⟧ TextFile

    Length: 14080 (0x3700)
    Types: TextFile
    Names: »OBJFORMA.BAK«

Derivation

└─⟦6661ddda9⟧ Bits:30009789/_.ft.Ibm2.50007339.imd Mogens Pelles Zilog 80,000 / EOS projekt
    └─⟦this⟧ »OBJFORMA.BAK« 

TextFile

$#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.04
$#hovedbv LGJ
$#hovedbm OBJEKTFILFORMAT
$#hovedbh
$#hovedcv V1.1
$#hovedcm
$#hovedch Side #
$#hoveddm ______________________________________________________________
$#formatter


^UDokumentrevision:^u

$#liste 480
$#punkt 1986.03.07   V1.0
Initialversion.

$#punkt 1986.04.24   V1.1
I forhold til V1.0 er der på foranled^-ning af AC rettet trykfejl
samt særligt vanskeligt forståelige passager og en egentlig fejl.
 Dokumentet er dog stadig: "Meget svært at få oversigt over. En
grafisk fremstilling og nogle eksempler vil ^-^-hjælpe. Det vil også
være en god ide at give en oversigt først, hvor begreberne
objektfil, objektmodul og segment for^-klares. Derefter kan man
gå i detaljer med, hvordan eksport og import fungerer. Rid-bit
map bør forklares grundigt, da det er meget kompliceret."
$#liste 0




^UIndhold:^u

$#liste 72
$#punkt 1.
Introduktion.
$#punkt 2.
Metasprog.
$#punkt 3.
Syntaks.
$#punkt 4.
Semantik.
$#punkt 5.
Implementationsafhængige forhold.
$#liste 0


^U1. Introduktion.^u

 I dette dokument defineres formatet for objektfiler til det unavngivne
styresystem (baseret på NCR's EOS) til ^-^-Metanics unavngivne datamat (baseret
på Zilogs Z80.000 CPU). Objekt^-filer består af objektmoduler opdelt i segmenter.
Et ob^-jektmodul er altid relokerbart og indeholder information om
symbole^-rs im- og eksport samt om modulets relokering, hvor^-for det er
muligt, at sammenkæde
sådanne moduler til et nyt relokerbart objektmodul med et program kaldet LINK.

$#blok-start
^U2. Metasprog.^u

 Objektfilformatets syntaks angives ved en udvidet ^-^-BNF-notation, som forklares
her. Nonterminaler ("<  >") og de^-finerende lighedtegn ("::=") noteres
på sædvanlig vis, men i stedet for lodret streg ("ø") benyttes udråbstegn
("!") som valgsymbol. Sekvens angives som sædvanligt ved juxta^-posi^-tion, medens
gentagelse af samme nonterminal <a> noteres på en af følgende måder:
$#kopier

     <a>#(n)
     <a>#(x..y)
     <a>#(x...)

$#formatter
 I første tilfælde gentages <a> netop n gange. I det andet tilfælde gentages <a>
et antal gange, som er større end el^-ler lig med x og mindre end eller lig med
y. I sidste til^-fælde gentages <a> et antal gange, som er større end el^-ler lig
med x, men ikke opadtil begrænset. En nedre grænse find^-es altid - evt. nul.
Såvel n, som x og y kan være udtryk med nontermi^-naler, der indgår i
objektsproget, og/eller med ^-^-numeriske literaler fra metasproget.
$#blok-slut

$#blok-start
$#kopier
^U3. Syntaks.^u

<object file> ::= <of-format><of-object module>#(1...)
<of-format> ::= <i32>
<of-object module> ::= <om-format><om-head>
              <om-segment descriptors><om-export>
              <om-ext import><om-segments>
<om-format> ::= <i32>
<om-head> ::= <omh-index><omh-module name>
<omh-index> ::= <omh-module size><omh-no of segments>
              <omh-no of exp symbols><omh-no of exi symbols>
<omh-module size> ::= <i32>
<omh-no of segments> ::= <i32>
<omh-no of exp symbols> ::= <i32>
<omh-no of exi symbols> ::= <i32>
<omh-module name> ::= <Symbol>

<om-segment descriptors> ::= <sgd-segment desciptor>#(
              <omh-no of segments>)
<sgd-segment descriptor> ::= <sgd-image size>
              <sgd-overrun store size>
<sgd-image size> ::= <i32>
<sgd-overrun store size> ::= <i32>

<om-export> ::= <exp-export record>#(<omh-no of exp symbols>)
<exp-export record> ::= <exp-relocation indicator>
              <exp-item><exp-name>
<exp-relocation indicator> ::= <i8>
<exp-item> ::= <i32>
<exp-name> ::= <symbol>

<om-ext import> ::= <exi-name>#(<omh-no of exi symbols>)
<exi-name> ::= <symbol>

<om-segments> ::= <sgm-segment>#(<omh-no of segments>)
<sgm-segment> ::= <sgm-image>
              <sgm-relocation import directory>
<sgm-image> ::= <sgm-image unit>#(4*<sgd-image size>)
<sgm-image unit> ::= <i8>
<sgm-relocation import directory> ::= <rid-bit map>
              <rid-overrun store>
<rid-bit map> ::= <rid bm unit>#(
              sgd-image size..4*<sgd-image size>)
<rid bm unit> ::= <rid-prefix> ! <rid-prefix><rid-index>
<rid-prefix> ::= <rid-relocatable><rid-importable>
<rid-relocatable> ::= <bit>
<rid-importable> ::= <bit>
<rid-index> ::= <i6>

<rid-overrun store> ::= <rid-ovr index>#(
              0..<sgd-overrun store size>/4)
<rid-ovr index> ::= <i32>

$#blok-slut
$#blok-start
<symbol> ::= <length><character>#(<length>)
<length> ::= <i8>
<character> ::= <i8>
<i32> ::= <bit>#(32)
<i8> ::= <bit>#(8)
<i6> ::= <bit>#(6)
<bit> ::= 0 ! 1

$#blok-slut

$#formatter
^U4. Semantik.^u

 Semantikken for objektfilformatet beskrives her ved at give en fortolkning af
de væsentlige nonterminaler i ^-^-uformelt sprog (dansk).


^K<i6>,<i8>,<i32>.^k

 Disse non-terminaler repræsenterer heltal uden fortegn med værdiområder
svarende til henholdsvis 6,8 og 32 bit. F.eks. fortolkes <i6> som en af
værdierne i intervallet ^-^-0..63.

^K<character>.^k

 Denne non-terminal repræsenterer heltal fortolket som tegn f.eks. men
ikke nødvendigvis fra ascii-alfabetet. En^-hver værdi i intervallet
0..255 kan benyttes. Programmer, som forsøger at udskrive disse værdier,
bør undertrykke ^-^-tegn, som med den anvendte kollationeringssekvens ikke
er trykbare (f.eks. ascii styretegn) eller gyldige (255 er ^-^-f.eks. ikke
et ascii tegn).

^K<of-format>.^k

 Kode, som identificerer det her beskrevne
objektfil^-format. Programmer, som læser objektfiler bør kontrollere, at
of-format antager den korrekte værdi. Værdiområde: <i32>. Be^-tydning:

$#liste 240
$#punkt 1:
Det her beskrevne objektfilformat.
$#punkt Øvrige værdier:
$#
Ikke benyttet, reserveret.
$#liste 0

^K<of-object module>.^k

 Et objektmodul er enheden for separat oversættelse, og ^-^-mindst eet sådant
skal indgå i en objektfil.

^K<om-format>.^k

 Kode, som identificerer det her beskrevne
objektmodul^-format. Programmer, som læser objektfiler bør kontrollere, at
om-format antager den korrekte værdi. Værdiområde: <i32>. Be^-tydning:

$#liste 240
$#punkt 1:
Det her beskrevne objektmodulformat.
$#punkt Øvrige værdier:
$#
Ikke benyttet, reserveret.
$#liste 0

^K<omh-module size>.^k

 Angiver objektmodulets størrelse i antal oktetter. In^-forma^-tionen er
redundant, idet den kan findes ved fortolk^-ning af modulets øvrige
indhold.
Værdiområde: 0..2**31-1. Bemærk at mest betydende bit skal antage
værdien nul.

^K<omh-no of segments>.^k

 Angiver antallet af segmenter i objektmodulet.
Værdi^-område: 0..63. Segmenter nummereres 1..63. Værdien nul an^-giver, at
objektmodulet ingen segmenter indeholder.

^K<omh-no of exp symbols>.^k

 Angiver antallet af symboler, som eksporteres af ^-^-objekt^-modulet.
Værdiområde: 0..2**31-1. Bemærk at mest be^-tydende bit
skal antage værdien nul.

^K<omh-no of exi symbols>.^k

 Angiver antallet af eksterne importsymboler. Dvs. an^-tallet af distinkte
symboler, som importeres af objektmodul^-et.
Vær^-diområde: 0..2**31-1. Bemærk at mest betydende bit
skal an^-tage værdien nul.

^K<omh-module name>.^k

 Angiver objektmodulets navn. Et objektmodul kan (prin^-ci^-pielt) have vilkårligt
mange indhopspunkter (eng: entry ^-^-points). Disse eksporteres på samme måde
som alle øvrige eksporterede symboler og kun på denne måde. Et objektmoduls
navn må gerne være identisk med navnet på et symbol, som modulet selv
eksporterer.

^K<sgd-image size>.^k

 Angiver for det tilsvarende segment størrelsen af sgm-image i
enheder af 32 bits og størrelsen af rid-bit map i oktet^-ter.
Værdiområde: 0..2**31-1. Bemærk at mest betydende bit
skal antage værdien nul.

^K<sgd-overrun store size>.^k

 Angiver for det tilsvarende segment størrelsen af ^-^-sgm-overrun store i
oktetter.
Værdiområde: 0..2**31-1. Be^-mærk at mest betydende bit
skal antage værdien nul.

^K<om-export>.^k

 Liste over symboler med tilhørende værdier og reloke^-rings^-information, som
eksporteres af objektmodulet. Værdier^-ne fremgår helt af om-export-delen
af objektmodulet, og ved^-rører ikke om-segments. Listens elementer skal
være ordnet efter exp-name i stigende orden. (aa før aab før aba).

^K<exp-relocation indicator>.^k

 Angiver relokeringsbasis for det pågældende eksportere^-de symbol.
Værdiområde: 0..63. Betydning:

$#liste 240
$#punkt 0:
Symbolet er absolut (skal ikke relokeres).
$#punkt 1..63:
Symbolet relokeres med basis i adresse 0 det ^-^-segment, hvis
nummer angives, i det eksporterende objektmodul.
$#liste 0

^K<exp-item>.^k

 Hvis det pågældende eksporterede symbol er absolut, angiver exp-item den
værdi, som skal eksporteres. Er symbol^-et relo^-kerbart angiver exp-item
oktet-adressen (relativt til seg^-mentstart i det af exp-relocationindicator angivne
seg^-ment i det eksporterende objektmodul) på den 32 bit-størrel^-se, ^-^-hvortil
relokeringskonstanten skal adderes (modulo ^-^-2**32). Eksporterede og importerede
værdier er altid af ^-^-typen <i32>.

^K<exp-name>.^k

 Angiver navnet på det pågældende eksporterede symbol.

^K<om-ext import>.^k

 Liste over navne på symboler, som importeres af objekt^-modul^-et. Listens
elementer nummereres fortløbende fra 1 og kræves sorteret på samme måde
som eksportlisten.

^K<om-segments>.^k

 Omfatter sgm-image, -rid og -overrun store for hvert ^-^-segment. Segmenterne
følger i samme antal og rækkefølge, som de tilsvarende segmentbeskrivelser
om-segmentdescriptor. Korrespondancen segmentbeskrivelse og -indhold
etableres altså ved disses position i listerne.

^K<sgm-image>.^k

 Selve objektbilledet, som skal fortolkes af måldatamat^-en.

^K<sgm-image unit>.^k

 Mindste enhed af sgm-image, der kan behandles som een enhed. En sgm-image
unit kan enten være absolut eller indgå i en quadimageunit (32 bit),
som enten er relokerbar eller til hvilken, der skal importeres.

^K<sgm-relocation import directory>.^k

 Består af to komponenter: rid-bit map og rid-overrun store.

^K<rid-bit map>^k

 Katalog, som angiver fortolkningen af sgm-image såvel som den fortsatte
fortolkning af kataloget selv. Kataloget ind^-ledes altid med
et rid-prefix.
   Efter et rid-prefix følger et rid-index hvis netop en af
rid-relocatable og rid-importable antager værdien 1 (en).
Ellers følger et nyt rid-prefix, idet rid-relocatable og rid-importable ikke
begge må antage værdien 1.
Efter et rid-index følger altid et rid-prefix.

^K<rid-prefix>.^k

 Angiver fortolkningen af den tilsvarende sgm-image unit og de følgende
indtil 6 bit af rid-relocation import ^-^-directory. Bemærk, at
rid-relocatable og rid-importable ikke begge må antage værdien 1.
Følgende regler for fortolkningen gælder:
$#blok-start
$#kopier

-----------------------------------------------------------
 rid-prefix:       !
                   !
   relocatable:    !        0         0       1       1
                   !
   importable :    !        0         1       0       1
                   !
-----------------------------------------------------------
 sgm-image:        !
   tilsvarende     !
   image unit :    !       ABS       IMP     REL   Må ikke
                   !                              forekomme
                   !
   følgende 3      !
   image units:    !    Fremgår af   IMP     REL   Må ikke
                   !    følgende                  forekomme
                   !    rid-prefix
                   !    mv.
                   !
 Fortolkning af    !
 følgende bits i   !
 sgm-relocation    !
 import directory: !     Prefix     Index   Index  Må ikke
                   !                              forekomme
                   !
-----------------------------------------------------------
$#formatter
$#blok-slut

^K<rid-relocatable>.^k

 Angiver ved positiv logik, hvorvidt den tilsvarende sgm-image unit indleder
en quadimage unit, der er reloker^-bar.

^K<rid-importable>.^k

 Angiver ved positiv logik, hvorvidt den tilsvarende sgm-image unit indleder
en quadimage unit, hvortil der im^-porte^-res.

^K<rid-index>.^k

 Angiver afhængigt af værdien direkte eller indirekte et ^-^-indeks til
om-ext-import. Ved direkte henvisning udpeger rid-index
navnet på det symbol, hvis værdi skal
importeres og adderes (modulo 2**32) til den tilsvarende quadimageunit.
Ved indirekte henvisning udpeges symbolets navn af det næste rid-ovr index
i rid-overrun store (se dette).
Værdiområde: 0..63. Be^-tydning:

$#liste 240
$#punkt 0:
Indirekte henvisning til næste element i ^-^-sgm-overrun store.
$#punkt 1..63:
Direkte henvisning til om-ext-import.
$#liste 0

^K<rid-overrun store>^k

 Sekventielt organiseret liste af indekser til om-ext-import.
Listen indeholder netop så mange elementer, som der findes
rid-index'er med værdien nul (indirekte henvisning)
i rid-bit map, og der er positionsbaseret
en-til-en korrespon^-dance mellem disse.
Det vil sige, at det første rid-index (med værdi nul)
svarer til listens første element, det andet rid-index (med værdi nul)
svarer til listens andet element og så fremdeles.

^K<sgm-ovr index>.^k

 Angiver indeks til om-ext-import, hvis dette er større end 63.
Værdiområde: 64..2**31-1.


^U5 Implementationsafhængige forhold.^u

 Objektfilerne implementeres i CP/M-versionen efter ret^-nings^-linierne, der
gælder for Propero Pascal "non-text" fil^-er med elementtype 0..255.
     Filerne skrives i "bit forward format", hvilket vil sige, at uanset
hvilken strukturel enhed (f.eks. 32 bit hel^-tal, oktet
eller 6 bit heltal), der
optræder i en fil, vil den mest betydende bit stå forrest i filen efterfulgt
af de øvrige bit i aftagende orden.

«eof»