Integracja kodu 68k i ppc

Fajną cechą mos i amiga os4 jest integracja kodu 68k i ppc. Polega to na tym że 68k i ppc trzymają dane w tym samym formacie w pamięci i mogą je bez problemu dzielić. Dzięki tej integracji oba te systemy w przeciwieństwie do arosa czuje się jak lepszą amigę niż te od commodore.

Do czego to się przydaje?

Mamy powiedzmy dane w jakimś dziwnym formacie, który nie jest nigdzie opublikowany np arkusz z turbocalc i bibliotekę w 68k która czyta te dane, albo mamy jakiś kod w assemblerze 68k którego analiza zajęła by zbyt dużo czasu i chcemy go użyć w aplikacji nie 68k. Pod x86 nie do zrobienia. A pod ppc? Po prostu używamy kodu w 68k korzystając z faktu że dzieli on dane z ppc.

Zewnętrzny program 68k

Sposób pierwszy czyli zewnętrzny program w 68k. W amiga os nie ma ochrony pamięci więc robimy mały program 68k który dostaje jeden parametr adres struktur dzielonych między 68k i ppc. Coś ten program robi i zwraca wyniki do struktur programu w ppc. Proste, szybkie i łatwe do zrobienia.

Zewnętrzny program 68k i wymiana danych przez porty

Sposób drugi czyli zewnętrzny program w 68k wymieniający dane poprzez standardowe porty. Takie klient-serwer tylko z ipc w amiga os. W amiga os nie ma ochrony pamięci więc program w 68k może swobodnie grzebać w danych programu ppc. Program 68k tworzy port funkcją CreateMsgPort i potem czeka na wiadomość od programu ppc. Program ppc odnajduje port funkcją FindPort, wysyła wiadomość tylko z adresem z strukturami danych funkcją PutMsg, program 68k odbiera wiadomość, coś tam robi, zapisuje dane do struktur programu ppc i odpowiada na wiadomość. Też proste i łatwe do zrobienia. Można też to samo zrobić jeszcze prościej na sygnałach.

Biblioteki w 68k

Czyli np mamy już bibliotekę w 68k którą chcemy użyć, albo mamy kod w 68k który chcemy zapakować do biblioteki 68k. Jeśli my chcemy zrobić bibliotekę w 68k to ściągamy przykładowy kod np CLib37x.lha z aminetu, poprawiamy makefile dla gcc usuwając opcje -msmall-code -fbaserel – przez dwadzieścia lat zmienił się sposób generowania  kodu przez gcc 68k i to trzeba zmienić. Potem trzeba skorzystać z programu fd2pragma (z aminetu) który wygeneruje nam odpowiednie pliki nagłówkowe. Dla mos jest to jedna linia w shellu co jest opisane w dokumentacji, dla amiga os 4 trzeba jeszcze użyć jednego programu z sdk co jest fajnie opisane na http://wiki.amigaos.net/wiki/How_to_Build_Stubs_for_68k_Libraries. Od tej pory w kodzie w C można używać  biblioteki 68k tak jakby była napisana w ppc.

Klasa Boopsi/MUI w 68k

Można też zrobić obiektową bibliotekę pod 68k korzystając z amigowego systemu obiektów BOOPSI/MUI. Wtedy trochę trudniej zrobić taką bibliotekę, ale odpada robienie plików nagłówkowych. Do MUI 68k są dołączone przykłady. Jest to fajne bo można używać klas BOOPSI/MUI w sofcie ppc które nigdy nie byłyby dostępne inaczej. Np można programować mosa używając reaction, którego wczesna wersja jest dostępna na aminecie.

 

 

 

 

Leave a comment