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.