Tajemnice ATARI

Ludzie listy piszą...

    Nazywam się Radosław Puchowicz. ... List ten zawiera kilka pytań co do zestawu Quick Assembler Janusza B. Wiśniewskiego.

   W czasopiśmie TA oraz np. w grze Lasermania reklamujecie go jako doskonałe narzędzie do programowania w języku asemblera. Nie podważam tej opinii, jednakże w instrukcji pisze, cyt."(...) może więc służyć nie tylko zaawansowanym programistom, lecz także zupełnym nowicjuszom.". Ja zaliczam się do nowicjuszy, gdyż o języku asemblera wiem tylko tyle, iż jest bardziej skomplikowany niż BASIC. Nie przeczę, iż instrukcja zawiera wiele cennych uwag, lecz, według mnie, brak w niej kompletnych podstaw. W elekcie wiem co to jest strona zerowa, etykieta a nie potrafię napisać programu, który spowodowałby wyświetlenie na ekranie jakiegokolwiek napisu. W związku z czym proszę o szczegółowe odpowiedzi na zamieszczone niżej pytania:

   1) Proszę o przetłumaczenie niżej zamieszczonego programu w BASICU na język asemblera. Chciałbym, jeżeli to możliwe o przetłumaczenie go linijka po linijce tzn. ze np. linia 70 mojego programu będzie równoważna linii 70 w asemblerze. Program nie ma konkretnego zadania, starałem się użyć jak najwięcej instrukcji BASICowych aby otrzymać ich odpowiedniki w języku asemblera.

   2) Jakie rozkazy są równoważne instrukcjom:
SOUND X,Y,L,V . . . PEEK (X)

   3) Jak już wyżej wspomniałem korzystam z magnetofonu XC 12. Chciałem wgrać któryś z programów demonstracyjnych. Wgrałem COS, potem QA. Po zgłoszeniu się jego wybrałem funkcję FILE a następnie LOAD. W otwartym okienku napisałem C:DEMO.ASM. Gdy nacisnąłem RETURN, po chwili pokazał się komunikat, że popełniłem błąd nr 130. Gdzie popełniłem błąd?


   Spróbuję powoli odpowiedzieć na wszystkie pytania. Przy pytaniu numer 1 zamieszczony w oryginale listing w basicu opuściłem z premedytacją z kilku powodów. Po pierwsze jeżyk asemblera operuje na zbyt podstawowych elementach (pojedyncze komórki pamięci, rejestry procesora...) by w prosty sposób można było przełożyć poszczególne komendy BASICu na pojedyncze instrukcje asemblera. Tym problemem zajmują się interpretery i kompilatory różnych języków programowania. Niejednokrotnie jedna komenda języka wyższego poziomu tłumaczona jest na setki a nawet tysiące wierszy programu asemblerowego. Z tego samego powodu pytanie drugie pozostanie praktycznie bez odpowiedzi. Przykładowo komendę DRAWTO można zamienić na procedurę asemblerową składającą się z kilkuset rozkazów, natomiast komenda PEEK (adres) może wyglądać LDA adres.

Nieco więcej uwagi poświęcę pytaniu nr 3. W tej lub podobnej formie powtarza się ono dość często. Nieco problemów stwarza mianowicie poprawne uruchomienie programu DEMO bądź TRANS z kasety. Wynika to poniekąd z koniecznych zmian dokonanych w tychże programach, by mogły one pracować poprawnie z magnetofonem. Niestety zmiany nie zostały uwzględnione w instrukcji użytkownika dołączanej do pakietu. Stało się tak z powodu długiego cyklu wydawniczego broszury, musiała być oddana do druku odpowiednio wcześniej, a zmiany zostały wprowadzone na krótko przed rozpoczęciem sprzedaży. Pierwsza partia QA została niestety wypuszczona na rynek bez dodatkowych informacji. Natychmiast po zauważeniu tego błędu producent zaczął dołączać do kaset erratę, która niedogodności, o których za chwilę pozwala szybko i bezboleśnie usunąć. Cały problem polega na poprawnym ustawieniu w podmenu SETUP adresów RUN i MEMHI. Instrukcja podaje, by ustawić je na adres $8800. Nie byłoby żadnego problemu z asemblacją programu DEMO czy TRANS w niezmienionej formie, czyli z wykorzystaniem plików bibliotecznych jako doczytywanych w czasie asemblacji. Jest to jednak bardzo niewygodne, gdyż wymaga dwukrotnego odczytu z magnetofonu każdego z używanych plików bibliotecznych. Aby wyeliminować tą niedogodność można rzeczone zbiory doczytać w odpowiednich miejscach do programu źródłowego (patrz listing DEMO lub TRANS). Niestety w wypadku programu DEMO okazało się to, przy ustawieniu najwyższego dostępnego dla QA adresu (MEMHI) na $8800, niemożliwe. Po prostu pliki DEMO.ASM, _PM.ASM i _SOUND.ASM nie mieściły się razem w pamięci. Dopiero ustawienie MEMHI na $9000 pozwala na poprawne przeprowadzenie tej operacji. Aby czynności konieczne przy uruchamianiu obu programów demonstracyjnych były identyczne, tak DEMO jak i TRANS wymagają wcześniejszego ustawienia MEMHI i RUN na $9000!

   Tyle tłumaczeń, teraz spróbuję odpowiedzieć na konkretne pytanie. Po wybraniu opcji LOAD należy podać nazwę pliku jaki chcemy załadować, więc dla magnetofonu będzie to poprostu C: (bez żadnych cudzysłowów) gdyż komputer nie pozwala w standardowej transmisji na bezpośrednie nazywanie zbiorów na kasecie. Oczywiście napisanie dalej pełnej nazwy programu niczemu nie przeszkodzi (jest ona ignorowana) ale też i nie pomoże, i tak załadowany zostanie pierwszy napotkany na kasecie plik. W tym miejscu ważna uwaga. Warto poświęcić trochę czasu i raz wczytać do QA wszystkie zbiory zapisując przy okazji stan licznika na początku każdego z nich. Jest to konieczne dla dalszej prawidłowej pracy. Należy przy tym pamiętać, że programy źródłowe nagrane są na drugiej stronie kasety za programem NCOPY (patrz CZYTAJ). Po poprawnym ustawieniu magnetofonu na początek żądanego pliku naciskamy RETURN i całość operacji powinna się powieść. Oczywiście jeżeli wczytujemy któryś z programów demonstracyjnych należy wcześniej ustawić wartości MEMHI i RUN na $9000 (jak?-instrukcja). Pora na uruchomienie programu. Jeżeli asemblujemy program demonstracyjny bez żadnych zmian, to wiąże się to z koniecznością dwukrotnego odczytu plików zawierających procedury biblioteczne. Należy o tym pamiętać i na charakterystyczny sygnał początku procedury odczytu ustawić magnetofon odpowiednio do doczytywanego pliku (_PM, _SOUND lub _IO). Przykładowo w wypadku DEMO.ASM po wybraniu funkcji ASSEMBLY i usłyszeniu charakterystycznego sygnału dźwiękowego należy przewinąć taśmę na początek plików _IO i _SOUND i nacisnąć klawisz. QA doczyta pierwszy z nich i ponownie zarząda (charakterystyczny sygnał odczytu) znalezienia drugiego z nich i potwierdzenia tego naciśnięciem klawisza. Tak się składa, że następny potrzebny plik znajduje się zaraz za pierwszym, więc wystarczy tylko uderzenie w klawisz. Tyle operacji przy pierwszym przebiegu asemblacji. Po chwili usłyszymy znowu sygnał odczytu. Oznacza to, że QA napotkał w drugim przebiegu znowu rozkaz "ICL C:" (patrz instrukcja obsługi). Trzeba wtedy przewinąć taśmę znowu na początek obu potrzebnych plików i postępować jak opisałem przed chwilą. Już wcześniej wspomniałem, że jest to sposób dość niewygodny. Szybciej można uruchomić program DEMO czyniąc co następuje: Poprawnie ustawić adresy MEMHI i RUN i wczytać do edytora program DEMO. Po jego wczytaniu należy odnaleźć pseudo-instrukcje ICL, wykasować je i w ich miejsce doczytać do programu głównego potrzebne pliki _PM i _SOUND komendą ^Kr edytora. Potem wystarcza funkcja ASSEMBLY i RUN, by zobaczyć efekt na ekranie.

M.L.



Powrót na start | Powrót do spisu treści | Powrót na stronę główną

Pixel 2001