OPTYDo zrozumienia zasady działania programu OPTY niezbędna jest pewna wiedza na temat struktury pliku binarnego w formacie DOS-u 2.5 oraz sposobu jego wczytywania. Oto garść niezbędnych informacji: Plik binarny składa się z jednego lub kilku segmentów. Każdy segment składa się z czterobajtowego nagłówka i następującego po nim bloku danych. Nagłówek zbudowany jest kolejno: z młodszego i starszego bajtu adresu początku oraz młodszego i starszego bajtu adresu końca bloku danych w pamięci. Aby uzyskać długość bloku danych, należy od adresu końca odjąć adres początku i dodać jeden. Każdy plik binarny rozpoczyna się dwubajtowym identyfikatorem $FFFF. Przy próbie wczytania pliku bez w/w identyfikatora DOS 2.5 wyświetla komunikat "BAD LOAD FILE" (zły plik binarny). Po identyfikatorze następuje segment danych. W najprostszym przypadku jest to cały plik. Gdy nie osiągnięto końca pliku, to znaczy, że plik jest wielosegmentowy. DOS sprawdza, czy zapisano coś do dwubajtowego rejestru INITAD (hex 2E2). Gdy sprawdzian wypadnie pozytywnie, to DOS uruchamia program od adresu wpisanego do INITAD. W przeciwnym przypadku lub po natrafieniu w uruchomionym programie na rozkaz RTS następuje dalsze wczytytywanie. W tym miejscu zdarzają się dwie możliwości: występuje kolejny segment (jest to sytuacja najczęściej spotykana) lub występuje zbędny identyfikator a po nim kolejny segment. Takie pliki uzyskujemy np. z KYAN PASCALA lub po połączeniu plików binarnych opcją COPY APPEND. Gdy dalej nie osiągnięto końca pliku, to sytuacja się powtarza tak jak po wczytaniu pierwszego segmentu. Po osiągnięciu końca pliku DOS sprawdza czy zapisano coś do INITAD i postępuje w sposób wyżej opisany. Gdy brak wpisu do INITAD lub nastąpił powrót rozkazem RTS to sprawdzany jest dwubajtowy rejestr RUNAD (hex 2E0) i DOS postępuje analogicznie jak z rejestrem INITAD. Jest jednak zasadnicza różnica: w przypadku wpisu do INITAD skok do programu wykonywany jest natychmiast po załadowaniu aktualnego segmentu czyli można niezależnie uruchamiać każdy kolejny segment przed wczytaniem następnych. Natomiast w przypadku kolejnych wpisów RUNAD znaczący jest tylko ostatni, a skok wykonywany jest po załadowaniu całego pliku a nie tylko segmentu. Po natrafieniu na rozkaz RTS program powraca do DOS. Przy braku wpisów do INITAD i RUNAD sposób postępowania jest zależny od DOS-u: np. DOS 2.5 powraca do DUP.SYS, a DOS XL uruchamia program od początku pierwszego segmentu. Osoby bardziej zainteresowane tematem odsyłam do literatury. Opcja nr 1 - Directoty chyba nie wymaga omówienia. W kolejnych opcjach na pytanie o plik wejściowy należy podać pełną specyfikację pliku binarnego na dysku np. D1:NAZWA.COM. Opcja nr 2 - Analiza dokonuje analizy pliku wejściowego wpisując do pliku wyjściowego kolejno: adres startu, adres końca i długość kolejnych segmentów podając równocześnie ewentualne adresy inicjacji lub uruchomienia pliku. Pozwala ona na orientację w rozmieszczeniu programu w pamięci oraz na znalezienie miejsca od którego należy rozpocząć "rozgryzanie" programu. Jest wręcz niezbędna gdy chcemy znaleźć wolne miejsce w pamięci np. na monitor. Gdy wyniki chcemy uzyskać na ekranie, to jako plik wyjściowy podajemy S: lub E: a dla drukarki P:. Opcja nr 3 - Optymalizacja kopiuje plik wejściowy, usuwając jednocześnie zbędne identyfikatory oraz "sklejając" sąsiadujące segmenty w jeden większy. Co daje taka opcja? W większości przypadków nic, proszę jednak ją wypróbować na plikach generowanych przez Deep Blue C oraz na nim samym. W tym przypadku czas wczytywania z ramdysku skraca się kilkunastokrotnie a z normalnej stacji o 20-30%. Sam plik skraca się o kilka sektorów. Uwagi: przy korzystaniu z jednej stacji dysków pliki wejściowy i wyjściowy muszą być na tym samym dysku. Nie kasujmy starych plików przed wszechstronnym przetestowaniem pliku wyjściowego, który czasami może nie działać. Niekiedy pomaga zmiana "loadera" np. z BOOTSTRAP na MICRODOS itp. W celu nieznacznego poprawienia efektywności można w ramach wolnej pamięci zwiększyć wartość zmiennej MAX, co powiększa bufor programu. Program kończy pracę zgłoszeniem błędu nr 136 i nie należy się nim przejmować, natomiast błąd nr 21 oznacza, że wczytywany plik ma strukturę niezgodną z omówioną na początku opisu.
Literatura: 1. "DOS 2.5:l050 Disk Drive Owner's Manual" - ATARI Corp. 2. W.Zientara "Mapa pamięci ATARI XL/XE - dyskowe systemy operacyjne" - SOETO A.W.
|