Modularyzacja i linkowanie w Action!

Gdzieś tam jest i czai się Error 61, to tylko kwestia czasu kiedy zaatakuje :).

Postanowiłem sprawdzić, czy podzielenie programu w Action na mniejsze kawałki to duży problem. Okazuje się, że nie.

Ale najpierw dwa słowa o listowaniu tablicy symboli Action! Jest sobie program Symbol Table Lister. Kilka razy do niego już podchodziłem bez pozytywnych rezultatów, ale ostatecznie udało się. Wygląda na to, że instrukcja w powyższym linku jest błędna.

W pierwszym kroku, zmieniłem linię:

   Close(5) Open(5, „P:”, 8) na
   Close(5) Open(5, „H1:LISTING.TXT”, 8)

Dzięki temu wynik działania listera zapisany zostanie do pliku.

Następnie trzeba było:

  • załadować interesujący nas program do edytora
  • w Monitorze, Ctrl+Shift+M uruchomić lister za pomocą R „H1:STL.ACT”
  • skompilować interesujący nas program za pomocą C

W pliku LISTING.TXT zapisywany jest ładnie sformatowany listing z adresami funkcji, procedur i zmiennych programu z edytora.

Teraz prosty test. W pliku LIB.ACT, mamy dwie proste funkcje:

MODULE ; LIB.ACT

set 14=$8000
set $491=$8000

proc test1()
 byte bkg=710
 bkg=0
return

proc test2()
 byte bkg=710
 bkg=52
return

Za pomocą

set 14=$8000
set $491=$8000

ustawiamy aby kod umieszczony został pod adresem $8000.

Główny program wrzucamy dalej, od $8013:

include "H1:INCL.ACT"

set 14=$8013
set $491=$8013

proc delay()
 int i for i=0 to 10000 do od
return

proc main()
 do
  test1()
  delay()
  test2()
  delay()
 od

Plik INCL.ACT definiujący adresy procedur:

proc test1=$8000()
proc test2=$8009()

Po kompilacji MAIN.ACT i LIB.ACT „linkujemy” powstałe pliki binarne za pomocą cat lub type pod Windows:

type LIB.OBX MAIN.OBX > FINAL.XEX

I otrzymujemy plik wykonywalny.

Przykładowe wyjście z Symbol Table Lister wygląda tak:

Symbol Table for H1:LIB.ACT

Local declarations for test1:
bkg………… $02C6 BYTE

Local declarations for test2:
bkg………… $02C6 BYTE

Global declarations:

test1………. $8000 PROC()
test2………. $8009 PROC()

Code base = $8000, code size = 19

Prawda że przydatne? Przygotowanie w ten sposób nieco okrojonego RUNTIME oddala problem braku miejsca w tablicy symboli. Big Symbol Table jakoś dziwnie działa. Pozostaje sprawdzenie ładowania plików binarnych. Podzielenie dużego programu na mniejsze doczytywane kawałki wydaje się najbardziej sensowne.

Jedna uwaga do wpisu “Modularyzacja i linkowanie w Action!

  1. Pingback: Action! Jedno RUNTIME wiele modułów. | greblus:~$ cat /dev/random > /dev/null 2>&1

Skomentuj

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

Logo WordPress.com

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

Zdjęcie z Twittera

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

Zdjęcie na Facebooku

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

Połączenie z %s