Pakiet matematyczny nie ma tablicy odwołań i to jest jedna z jego głównych wad (acz jak wiadomo, nawet nie najwazniejsza). A usprawiedliwić to można tylko tym, że tablica skoków się pewnie panom programistom w tych 2k nie zmieściła.
Nielegalne odwołanie do ROM-u to każde, które posługuje się bezpośrednio (jako stałą) adresem wewnątrz ROM-u, oprócz tych, które zostały zdefiniowane jako legalne :) Legalne są:
* sygnatury w XL OS-ie ($C002 i nastepne bajty, szczegóły w Atariki)
* tablica skoków
* adresy wewnątrz pakietu matematycznego (ale w granicach rozsądku)
I to chyba tyle. Te adresy po prostu gwarantowanie się nie zmienią w żadnej wersji OS-u.
Część procedur nie jest legalnie dostępna bezpośrednio, ale jest dostępna przez wektory w pamięci RAM. To są głównie procedury przerwań, ale nie tylko, np. w każdym bloku IOCB jest wektor PUTBYTE, przez który można wywołać ze sterownika urządzenia podprogram wysyłający na to urządzenie bajt.
Teraz, po co to komu. Po to, żeby można było bez problemu ulepszyć system operacyjny, gdy kogo najdzie taka chęć. Dajmy na to, chcesz napisać lepszy pakiet matematyczny dla BASIC-a. Gdyby była tablica skoków, miałbyś na swoje pomysły całe 2k. Jednak konieczność zachowywania adresów wewnątrz utrudnia ci zakodowanie tego, bo jeśli twoja procedura FMUL jest dłuższa niż standardowa, to musisz skokiem JMP ominąć następną. Tracisz przy tym 3 bajty na skok, chociaż miejsca na kod wiele nie masz.
Tak samo z pozostałym OS-em, 16k (a w zasadzie to 10) to nie jest dużo, a konieczność utrzymywania nielegalnych adresów (dla kompatybilności) powoduje dodatkowe zmniejszenie tego obszaru i kosmicznie utrudnia wprowadzanie poprawek - bo np. wyobraź sobie, że jak dodasz jeden bajt do procedury SIO, to o ten jeden bajt się przesuwają wszystkie dalsze i musisz teraz kombinowac, jak je przesunąć z powrotem.
Proponuję poćwiczyć na jakimś własnym programie, tzn. zadać sobie konieczność utrzymania adresów wszystkich podprogramów, a potem, bez przedłużania kodu, wprowadzić jakieś major poprawki.
EDIT: pomysłowo ominięto ten problem w SpartaDOS X - procedury biblioteki mogą być pod dowolnymi adresami i niczgo nie trzeba utrzymywac w nastepnej wersji, bo jest lista symboli, takich wskaźników, które zawsze wskazują aktualny adres, pod jakim znajduje się procedura (ale trochę w inny sposób, niż to robią wektory).
KMK
? HEX$(6670358)