[abc80] ABS-formatet

H. Peter Anvin hpa at zytor.com
Tis Apr 24 10:52:07 PDT 2018


On 03/30/18 05:22, Thomas Michanek wrote:
> Jag frågade tidigare vilket format CMDINT.SYS-filen hade, och det visade sig vara ABS.
> Den CMDINT-fil jag tittat på visade sig vara felaktig/korrupt och därav min undran.
> 
> Nu skulle jag vilja veta hur ABS-formatet är definierat, jag hittar ingen dokumentation.
> ABS står för "absolutadresserad" och innehåller tydligen en header med info om bl.a.
> längd och minnesadress, följt av binärkod (maskinkod) uppdelad i något slags block.
> 
> Om Peter Anvin skrivit ett konverteringsprogram till ABS så förmodar jag att han vet
> filformatet, men jag ställer ändå frågan till hela listan, om någon annan också vet.
> (Jag har inte lust att gräva mig ner i en C-fil för att förstå filformatet)
> 
> /Thomas
> 
> P.S. Det finns också ett gammalt program "görabs.bac" som skapar ABS-filer,
> men jag vill helst slippa gräva mig ner i grötig Basic-kod för att förstå filformatet.

Formatet för varje block är:

1 byte typ (alltid 0 såvitt jag vet)
1 byte längd (L)
1 byte reserverad (alltid 0)
1 byte adress hög
1 byte (address hög) XOR 255
1 byte adress låg
1 byte (adress låg) XOR 255
L bytes data
1 byte checksumma av data

För datablock är L > 0; om L=0 så pekar adressen till filens startadress
(måste vara sist.)

Ett block kan inte överskrida gränserna mellan 253-bytessektorer.
Bytesträngen FF 00 i stället för en header hoppar till början av nästa
sektor; resterande byte i sektorn spelar ingen roll (jag fyller dem med
EE, men det är helt godtyckligt.)  FF 00 verkar vara obligatoriskt även
om sektorn är full, så följakligen måste L <= 245.

ithabs.c hanterar icke kontinuerliga minnesbilder, i vilket fall det kan
bli mer en ett block i en sektor (och som följaktigen behöver begränsas
till en kortare längd än 245 bytes.)

Overhead per sektor är ungefär samma som en packad .bac-fil; 10 bytes
för .abs mot 9 bytes för .bac.

	-hpa


More information about the ABC80 mailing list