[ Pobierz całość w formacie PDF ]
wnież warunkiem efektywnego programowania w języku asemblera
jest posiadanie przynajmniej trzech podstawowych narzędzi: e-
dytora, który pozwoli napisać program zródłowy, asemblera, któ-
ry zamieni go w program wynikowy w kodzie maszynowym, oraz de-
buggera czyli programu uruchamiającego, z którego pomocą pot-
rafimy doprowadzić do usunięcia praktycznie nieuchronnych błę-
dów zapewniając przekształcenie pierwotnego zamysłu w ostatecz-
ny kształt dobrego i niezawodnego programu.
Analogia z językiem Basic nie jest pełna. Zawsze pozosta-
je nam jeszcze jedna droga: napisanie programu w asemblerze
na kartkach papieru i wprowadzenie go w kodzie maszynowym. W
przypadku mniejszych zadań sposobu tego nie można lekceważyć.
Realizacja większych bez asemblera i debuggera jest uciążliwa.
Dlatego wyposażenie się w nie jest pryktycznie konieczne.
Podstawowe zasady pisania programów w asemblerze 6502 są
wspólne dla komputerów wyposażonych w ten mikroprocesor. Na-
tomiast poszczególne asemblery i debuggery mogą się znacznie
różnić pod względem skali oferowanych możliwości, jak i skła-
dni oraz symbolicznego oznaczenia komend, z których korzysta
użytkownik. Dlatego następnym, również praktycznie niezbędnym,
krokiem jest wyposażenie się w instrukcję obsługi programu,
najlepiej firmową, w jaką każdy szanujący się wytwórca wypo-
saża swój wyrób.
W dalszej części rozdziału omówione będą podstawowe zasa-
dy korzystania z dwóch programów na Atari: makroasemblera
MAC/65 i programu uruchamiającego BUG/65. Opracowała je firma
202
wytwarzająca oprogramowanie systemowe Optimized Systems Soft-
ware, której wytworem są m.in. także DOS 2.0S, DOS XL, nowe
interpretatory Basic XL i Basic XE, kompilatory języków C i
Action! oraz wiele innych programów. Omówienie dotyczy wers-
ji dyskietkowych: MAC/65, wersja 4.20, Stephena D. Lawrowa o-
raz BUG/65 wersja 2.0 opracowana wspólnie z McStuff Co. Prze-
dstawiony tu opis n i e może zastąpić przewodników dostar-
czonych przez OSS do obu programów - chociażby dlatego, że
razem liczą około objętości niniejszej książki. Inten-
S!
cją moją było natomiast dostarczenie, zwłaszcza mniej doświa-
dczonemu programiście, wskazówek ułatwiających posługiwanie
się tymi rozbudowanymi i przez to dość skomplikowanymi narzę-
dziami. Podane tu informacje są do tego celu wystarczające.
Zwróćmy uwagę na dwa jeszcze programy.
Pierwszy to "Mastermon" opracowany przez T. Fischermanna
w roku 1985 w dwóch wersjach, 2.0 i 2.0a. Pierwsza wprowadza-
na jest pod adres 8000, a druga 2200 hex, poza tym działają
podobnie. Pozwala on pisać programy, ale tylko w JM, ma nato-
miast wygodne narzędzia do wyświetlania pamięci, a także dez-
asemblacji bloku pamięci czyli próby jego odczytania jako za-
pisu w asemblerze.
Program posługuje się jednoliterowymi komendami. Oto nie-
które ich przykłady: L - wyświetlanie pamięci w hex, D i U -
jej wyświetlanie na dwa sposoby w postaci zdezasemblerowanej,
A - zapisywanie w pamięci hex, E - to samo z widocznym poprze-
dnim zapisem. Adresy można podawać w dec i hex (wtedy poprze-
dzone "$"). Wygodna jest możliwość wyświetlania pamięci małymi
fragmentami lub w sposób ciągły - po dodaniu za komendą prze-
cinka i N. Pisząc ?liczba lub ?$liczba otrzymujemy konwersję
z dec na hex lub odwrotnie. Pisząc +liczba lub +$liczba powo-
dujemy, że np. D+ lub L+, N spowodują wyświetlanie pamięci od
tego adresu. Znak po komendzie pozwala wznowić wyświetlanie
od miejsca, w którym poprzednio zostało przerwane. + przepi-
suje pod +adres ostatniego .
G z adresem dec lub hex uruchamia wykonanie programu
użytkownika. Jeżeli chcemy wrócić do Mastermonu, należy na koń-
cu dopisać RTS. Tyle informacji dla tych, którym podobnie jak
203
autorowi nie udało się dotrzeć do opisu tego programu - z wy-
glądu całkiem poręcznego. Jego możliwości są bez wątpienia sze-
rsze.
W innej sytuacji znajdą się użytkownicy programu EASMD
(Editor-Assembler-Debugger) - jednego z wczesnych, lecz na-
dal użytecznych wytworów firmy Atari. Spotkać można instruk-
cje napisane do niego po polsku. Ponadto książka D. i K. In-
manów [1] opisuje popularnie pracę na bardzo podobnej, jesz-
cze wcześniejszej wersji, którą rozpowszechniano na module
(kartridżu). EASMD nie ma jeszcze środków tworzenia makroroz-
kazów, jego debugger nie zapewnia tylu ułatwień, co BUG/65.
Korzystne jest natomiast, że w jednym programie połączono
pisanie, asemblowanie i uruchamianie.
10.1 Stosowanie makroasemblera MAC/65
Zestaw komend edytora, a także dyrektyw czyli pseudoope-
ratorów oraz operatorów arytmetycznych, logicznych i porównań
jest w MAC/65 tak szeroki, że zapewnia skalę możliwości blis-
ką w niektórych dziedzinach oferowanej przez języki wysokiego
poziomu. Dochodzą do tego środki makroasemblera, z których po-
mocą można m.in. wygodnie tworzyć, a potem wykorzystywać bib
lioteki gotowych fragmentów programów. Przykładem takiej bib-
lioteki jest zestaw makrorozkazów do obsługi wejścia-wyjścia
stanowiący plik IOMAC.LIB na dyskietce systemowej i pokrótce
omówiony w podręczniku obsługi.
MAC/65 należy do niezbyt szerokiej jeszcze klasy asemb-
lerów, których edytor zapewnia bieżącą kontrolę składniową ka-
żdej wprowadzanej linii. Eliminuje to sporą część błędów. O-
bok takiego trybu sygnalizowanego przez napis-kursor EDIT mo-
żna zastosować tryb tekstowy, w którym nie ma kontroli skład-
niowej. Osiąga się to pisząc TEXT + RETURN , po czym kursor
ma brzmienie TEXTMODE. Jest to tryb umożliwiający pisanie róż-
nych tekstów oraz programów, np. w C. Powrót do trybu EDIT na-
stępuje przez napisanie NEW. Przy obu przejściach zerowana
jest przstrzeń pamięci edytora. MAC/65 jest kompatybilny "w
dół" z EASMD poza drobnymi różnicami.
Omówienie to dotyczy wersji dyskietkowej MAC/65, analo-
204
giczna dostępna jest na Apple. Opis podzielimy na następujące
kwestie: praca w edytorze, środki pomocne w tworzeniu kodu
zródłowego, asemblowanie, makrorozkazy.
10.2.1 Co oferuje edytor?
W MAC/65 linie kodu zródłowego w obu trybach muszą być
numerowane. Gdy linia nie zaczyna się od numeru, edytor trak-
tuje ją jako linię komend i poprawne komendy wykonuje natych-
miast, a niepoprawne pomija sygnalizując błąd napisem: WHAT?
(co?).
Szereg komend upraszcza pisanie programu. Np. NUM spowo-
duje automatyczną numerację linii co 10, NUM 100,5 - rozpo-
częcie numerowania od stu z krokiem 5. DEL 100,150 skasuje
linie o numerach 100-150. Linię można, podobnie jak w Basicu
skasować przez napisanie jej numeru + RETURN . LIST wywoła
wyświetlenie listingu, LIST 50,100 - jego części. FIND pozwa-
la znalezć ciąg znaków w zródłowym listingu. FIND-LDX- pozwo-
li znalezć pierwsze wystąpienie LDX, FIND =LDY=,A wskaże
wszystkie wystąpienia LDY. Poszukiwany ciąg należy zamknąć
w ograniczniki, którymi mogą być dowolne znaki poza cudzysło-
wem i spacją.
Istotnym u upełnieniem FIND jest REP (replace) pozwala-
jące zastąpić dawny ciąg znaków nowym. Składnia:
REP /stary/nowy/ [lno1[,lno2]] (,A) (,Q )
Stary i nowy ciąg wpisujemy między ograniczniki, jak
przy FIND. Możemy podać numer lub numery linii. Istotne są
dwie opcje ostatnie, stosowane z a m i e n n i e. Dopisanie
po przecinku A spowoduje, że ciąg nowy będzie zastąpiony
przez stary wszędzie, gdzie występuje, natomiast opcja Q
sprawi, że przypadki takie będą listowane i przy każdym użyt-
kownik otrzyma pytanie, czy chce dokonać zmiany.
Choć MAC nie jest debuggerem, włączono do niego dwie ko-
mendy umożliwiające dotarcie do kodu maszynowego w dowolnym
[ Pobierz całość w formacie PDF ]