[abc80] bin2bac för ABC800

H. Peter Anvin hpa at zytor.com
Ons Apr 25 00:11:23 PDT 2018


Så jag har läst på en del vad gäller ABC800 tack vare Roberts tips om
abc800.cod som med ett par små fixar till min simulator gick att köra.
Så nu har jag klurat ut hur man kan skriva bin2bac för ABC800.

Det är närmast pinsamt lätt jämfört med ABC80. Det visade sig nämligen
att ABC800 läser in hela .bac-filen i minnet utan processa den
överhuvudtaget, till skillad från ABC80 som kraschar om inte data har
rätt "struktur". ABC800 har inte heller någon specialhantering av
sektorsgränser.

Så det enda som behövs är en 20-bytes header, internkoder för att hitta
och göra CALL till entrypointen, och sendan kan binärkoden läggas efter
omodifierad, plus 00 00 00 00 FF FB FF som avslutning, vilket betyder
"inga långa variabelnamn i filen."

Det enda luriga är att ABC800 lägger programmet *högst* i minnet under
exekvering (men ej under *editering*) vilket kan kanske vara opraktiskt,
i alla fall om man inte har en relokerbar fil.  I det fallet så kan man
ju ha en "loader" som bara gör LDIR; annars en "loader" som gör
relokeringar (som bin2bac.pl redan gör för ABC80.)

Följande mall verkar fungera utmärkt:

<header, 20 byte>

8F 00 61 00  xx xx 00 00  00 00 00 00  00 00 00 00
00 00 00 00

xxxx = total fillängd = binärens längd + 20 + 11 + 7

<internkoder, 11 byte>

E8 D1 19 C7  yy yy 9C D1  17 B8 92

yyyy = offset från headerns början till entrypoint
       (HL pekar till entrypointen när den startar)

Motsvarar: CALL(SYS(11%)+YYYY%) DROP END

<binär data>

<avslutning, 7 bytes>

00 00 00 00 FF FB FF


Om man gör RET från koden så exekverar BASIC-token END.  Till skillnad
från ABC80 behöver man inte göra något speciellt för att kunna köra RUN
igen.  Det går t.o.m. att göra SAVE på programmet.

Ska fixa en relokeringsrutin motsvarande vad jag har till ABC80, så man
kan få allt det här att funka som det ska :)

	-hpa


	-hpa



More information about the ABC80 mailing list