Loader do linkowanych binarek Action!

Loader do plików binarnych z Action! Wiki nie działa z binarkami z kompilatora Action! łączonymi cat lub type. Sprawdziłem w dis6502 i wynika to z tego, że loader ładuje segmenty do pierwszego wystąpienia INITAD ($02E2), a w naszym pliku binarnym utworzonym przez cat lub type, INITAD jest definiowany kilka razy (w każdej z binarek składowych). W poprzednim przykładzie z FINAL.XEX interesuje nas drugi INITAD, przekazujemy więc 2 jako parametr procedury Load. BTW nie wiem czy da się wyłączyć w kompilatorze dodawanie INITAD, ale loader może sobie to zliczać.

Poniżej lekko zmieniona wersja loadera, która czyta bloki do wartości parametru initadn.


MODULE ;LOAD.ACT
BYTE CIO_status
CARD start, len

CHAR FUNC CIO=*(BYTE dev, CARD addr,size, BYTE cmd,aux1,aux2)
[$29$F$85$A0$86$A1$A$A$A$A$AA$A5$A5$9D$342$A5$A3$9D$348$A5$A4$9D$349
$A5$A6$F0$8$9D$34A$A5$A7$9D$34B$98$9D$345$A5$A1$9D$344$20$E456
$8C CIO_status$C0$88$D0$6$98$A4$A0$99 EOF$60]

CARD FUNC ReadBlock=*(BYTE dev, CARD addr, size)
[$48$A9$7$85$A5$A9$0$85$A6$A5$A3$5$A4$D0$6$85$A0$85$A1$68$60$68
$20 CIO$BD$348$85$A0$BD$349$85$A1$60]

CARD FUNC GetOne()
  BYTE cLow
  CARD cHigh
  DO
    cLow=GetD(1) cHigh=GetD(1)
    cHigh== LSH 8 % cLow
  UNTIL cHigh#$FFFF OD
RETURN(cHigh)

PROC GetAddrs=*()
  start=GetOne()
  len=GetOne()-start+1
RETURN

PROC Load(CHAR ARRAY filespec, BYTE initadn)
  CARD INITAD=$2E2
  INT tmp=[0]
  Close(1)
  Open(1,filespec,4,0)
  WHILE tmp#initadn DO
    IF start=$2E2 THEN
      tmp==+1
    FI
    GetAddrs()
    ReadBlock(1,start,len)
  OD
  Close(1)
  [$6C INITAD]
RETURN

PROC MAIN()
 Load("H1:FINAL.XEX", 2)
RETURN

Mała uwaga: loader kompiluje się z alternatywnym runtime Jeffa Reistera. Z oryginalnym z OSS wywala error 11.

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Log Out / Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Log Out / Zmień )

Facebook photo

Komentujesz korzystając z konta Facebook. Log Out / Zmień )

Google+ photo

Komentujesz korzystając z konta Google+. Log Out / Zmień )

Connecting to %s