Bajtek 1/1989
Bajtek 1/1989

I kolejny numer Bajtka został zreduksowany - tym razem pod nóż poszedł pierwszy numer z 1989 roku. Numer jak numer, oprócz w miarę fajnej okładki w środku dojrzewa nie tylko nowy layout ale przede wszystkim nowe podejście do rzeczywistości - ...

Zobacz stronę związaną z tym artykułem w Reduksach Try2emu
Spis treści:
Listingi dołączone do numeru w ReadyRun

Klan Commodore

Klaudiusz Dybowski

Monitory Ml — Część II

W poprzedniej części mówiliśmy o monitorach generalnie. Dziś pora na listę instrukcji i pierwsze przykłady.

Olbrzymia większość monitorów ma identyczne zestawy instrukcji: są to kolejne litery alfabetu oraz niektóre znaki specjalne (np. „$”, % czy @k). Poszczególne wersje programu różnią się oczywiście w szczegółach do których powrócę przy omawianiu standardowej listy instrukcji.

Zanim przejdę do omawiania poleceń mała uwaga na temat notacji. Przedstawiając obowiązującą składnię posłużę się tu standardowymi znakami powszechnie stosowanymi w instrukcjach obsługi: parametry ujęte pomiędzy znakami „< >” (np. <adres>). Muszą być podane, natomiast parametry w nawiasach kwadratowych (np. [argument] są opcjonalne i mogą być stosowane w zależności od potrzeb użytkownika.

ASSEMBLE

A <adres> <mnemonik> [argument]

Instrukcją tą rozpoczynasz wprowadzenie programu w języku wewnętrznym, „adres” określa tu początek obszaru pamięci do jakiego będziemy wpisywać nasz program, „mnemonik” to umowna nazwa rozkazu mikroprocesora np. LDA, DEY czy ART. Listę mnemoników rodziny mikroprocesorów 65XX i 85XX podam po omówieniu instrukcji.

Warto wiedzieć, że nie wszystkie rozkazy mikroprocesora wymagają stosowania argumentów oraz, że omawiane tu programy w większości wypadków NIE pozwalają na stosowanie niepublikowanych rozkazów mikroprocesora (tzn. nie możesz prawidłowo odczytać czy zdekodować np. rozkazu LAX czy dwu- lub trzybajtowego NOP). W wypadku błędu popełnianego przez operatora monitor wyświetla zwykle jeden lub trzy znaki zapytania w miejscu gdzie błąd ten występuje:

.S „PROGRAM” ?08, COOO, CFFF.

W powyższym przykładzie błąd polegał na braku przecinka pomiędzy nazwą programu i numerem urządzenia (01 dla magnetofonu lub 08 dla stacji dysków). Trzy znaki zapytania występują zwykle podczas dekodowania programu gdy monitor natrafi na błędny kod rozkazu miktroprocesora, którego nie jest w stanie zinterpretować. Zwróć uwagę na miejsce wyświetlania tych znaków. Spróbujmy teraz dla wprawy wpisać króciutki program:

.A 2710 LDA #$FF (wciśnij RETURN lub ENTER)

Na ekranie ukaże się:

.A2710A9 FF LDA #$FF

.A 2712

W chwili wciśnięcia klawisza RETURN lub ENTER zapis ten został już wprowadzony do pamięci. Na ekranie ukazuje się adres następnej wolnej komórki i program czeka na wpisanie w ten sam sposób następnych instrukcji. Wpisz teraz dalej:

STA $2720

BRK

Szczególnie ważny jest tu znak „$” poprzedzający LICZBĘ $00 oraz ADRES $2720. Skąd jednak program wie czy dana wartość jest liczbą czy też adresem? Pomaga mu w tym znak „#” poprzedzający ZAWSZE liczbę (nigdy adres). Słowna interpretacja wygląda następująco:

LDA #$FF — „wczytaj do akumulatora liczbę $FF"

LDA $FF — „wczytaj do akumulatora zawartość komórki o ADRESIE $FF"

Wyobraźmy sobie teraz sytuację, że po wpisaniu danego polecenia z przykrością stwierdzamy, że popełniliśmy pomyłkę. Czy wobec tego konieczne jest ponowne wpisywanie całego programu od początku ? Nie. Załóżmy, że zamiast liczby $FF chcesz wpisać do akumulatora zawartość komórki o ADRESIE $FF. W tym celu wystarczy teraz przesunąć kursor na pierwszą literę polecenia LDA #$FF i wpisać LDA $FF. Po wciśnięciu RETURN lub ENTER monitor zmieni na ekranie mnemonik argumentem oraz kod operacyjny (znaki A9 FF). Umożliwią to nam szybkie i proste poprawianie naszych programów. Pamiętajmy jednak, że zamiana instrukcji, która zajmowała jedną komórkę pamięci (np. NOP) instrukcją dwubajtową (np. LDA $FF) spowoduje automatycznie skasowanie mnemonika drugiej z kolei instrukcji znajdującej się bezpośrednio za wspominanym NOP:

NOP......) LDA zastępuje NOP

LDX (......$FF zapis $FF kasuje mnemonik LDX

#$00......$00 argument skasowanego LDX

i w wyniku otrzymaliśmy bezsensowny program. Tego rodzaju niespodzianek można uniknąć dzięki instrukcji TRANSFER (.T) oraz uprzedniemu przemyśleniu i ułożeniu programu (najlepiej na papierze).

Instrukcję ASSEMBLE można również skrócić wpisując zamiast .A samą kropkę. Jeśli podczas dekodowania pragramu (.D) chciałbyś coś zmienić przesuń kursor na początek linii, wpisz kropkę i nowy mnemonik. Po wciśnięciu RETURN zostanie on automatycznie wisany do pamięci, a na ekranie ukaże się następna kropka. Aby zakończyć wprowadzenie czy to zmian czy programu wciśnij dwukrotnie RETURN.

Wróćmy jeszcze na chwilę do adresów. Jak wiadomo C-128 korzysta z tzw. banków pamięci (łącznie 16), istnieje więc konieczność poinformowania monitora do którego z nich zamierzamy wpisywać program. Dlatego też monitor C-128 jest w stanie odczytać adresy pięcioznakowe, w których pierwszy znak określa zawsze numer banku (np. 02710 odpowiada komórce o adresie 10000 w banku 0). Jeżeli z jakichś przyczyn chcesz pracować powiedzmy w banku 15 to wystarczy tylko przed adresem podać numer:

.A F2710 LDA#$FF

Numery banków powyżej 9 są oznaczane zgodnie z kodem szesnastkowym: A=10, B=11, C=12, D=13, E=14, F=15. Do samych banków wrócimy jeszcze nieco później podczas omawiania map pamięci poszczególnych komputerów.

COMPARE

.C <adres 1><adres 2><adres 3>

Instrukcja ta umożliwia szybkie porównanie ze sobą dwóch dowolnych obszarów pamięci, „adres 1” i „adres 2” to adresy początku i końca obszaru pamięci, który będziemy porównywać z obszarem wzorcowym. Położenie obszaru wzorcowego określa się jedynie adresem jego początku ("adres 3>). Jeżeli w porównywanych obszarach wystąpią jakiekolwiek różnice to na ekranie ukażą się adresy komórek i wartości sobie nieodpowiadające.

Początkujący użytkownik może poddać w wątpliwość przydatność tej instrukcji. Instrukcja ta oddaje jednak nieocenione usługi podczas porównywania ze sobą np. wersji pamięci ROM dwóch różnych serii tego samego komputera.

DISASSEMBLE

.D [adres 1] [adres 2]

Instrukcja DISASSEMBLE pozwala nam badać oraz dekodować dowolny program napisany w języku wewnętrznym, „adres 1” oznacza początek obszaru pamięci, który będziemy dekodować, natomiast „adres 2” jego koniec. Jeżeli adres początkowy nie zostanie podany to w zależności od monitora otrzymasz albo komunikat o błędzie albo też dekodowanie zacznie się od adresu 0000.

W wyniku działania tej instrukcji otrzymamy na ekranie wydruk programu w formie odpowiednich mnemoników oraz argumentów. Jeżeli w programie wystąpi kod, który nie odpowiada żadnemu mnemonikowi to w tym miejscu na ekranie ukażą się trzy znaki zapytania, co dotyczy także niepublikowanych rozkazów mikroprocesora. Spóbujemy także poddać tej operacji nasz świeżo napisany program:


.D 2710
.2710 LDA#$FF
.2712 STA $2720
.2715

Warto tu wspomnieć, że zwykle instrukcja ta dekoduje określoną ilość bajtów programu, po czym przesuw na ekranie jest zatrzymywany. W celu kontynuowania należy w zależności od monitora wcisnąć klawisz D, C lub spację. Spróbuj także wcisnąć klawisze kursora — niektóre monitory umożliwiają przesuwanie zarówno w dół jak i w górę ekranu dzięki czemu można badać nawet duże obszary pamięci bez konieczności ciągłego wpisywania nowych adresów. Spowolnienie przesuwu powoduje zwykle klawisz COMMODORE LOGO (lewy dolny róg klawiatury) lub STRL; całkowite zatrzymanie jest możliwe po wciśnięciu klawisza STOP lub NO SCROLL (w C-128).

FILL

.F <adres 1> <adres 2> <wartość>

Instrukcja FILL umożliwia wypełnienie dowolnego obszaru pamięci zadaną wartością. Dzięki temu możemy dokładnie skasować, czy oznaczyć pewien obszar pamięci przeznaczony na nasz program itp. „adres 1” i „adres 2” to odpowiednio adresy początku i końca obszaru do wypełnienia, natomiast „wartość” to liczba z zakresu $00—$FF, którą obszar ten wypełniamy.

.FCOOO CFFF 00

W powyższym przykładzie do każdej komórki pamięci od adresu $C000 (49152) do $CFFF (53247) zostanie wpisana wartość 0.

GO (GOTO)

.G <adres>

Instrukcja ta pozwala nam uruchomić napisany program pod kontrolą monitora. Dzięki temu możesz szybko wykryć błędy i poprawić je, zbadać stan poszczególnych rejestrów mikroprocesora w trakcie wykonywania programu itp. Należy tu pamiętać o pewnej zasadzie: jeśli po wykonaniu programu chcesz powrócić ponownie do monitora to program musi kończyć się instrukcją BRK; jeżeli zamiast BRK wpiszesz RTS to powrócisz do BASIC.

.G 2710

Za pomocą tej instrukcji uruchomisz program wpisany przed chwilą. Program ten odpowiada dokładnie instrukcji POKE 10016,255. Po wykonaniu programu sterowanie przejmie ponownie monitor (gdyż sam program kończy się instrukcją BRK). Generalnie możesz przyjąć, iż jest to dokładny odpowiednik instrukcji GOTO w BASIC.

Czasami może się również zdarzyć, że po wpisaniu zamiast BRK-RTS powróciliśmy do BASIC, lecz próby wykonania czegokolwiek pod jego kontrolą kończą się niepowodzeniem. W tej sytuacji należy wyłączyć na chwilę komputer z sieci, gdyż oznacza to zablokowanie samego monitora (sytuacja ta występuje tylko w C-64 lub w trybie pracy C-64).

CDN

 

 

Klaudiusz Dybowski

Połączone artykuły
„Monitory Ml — Część II”
Klaudiusz Dybowski - Bajtek 1/1989

W poprzedniej części mówiliśmy o monitorach generalnie. Dziś pora na listę instrukcji i pierwsze przykłady.

Czytaj także w dziale Klan Commodore
„SAM”
(M.S.) - Bajtek 11/1986

Od dłuższego czasu wśród użytkowników C-64 krąży program syntezy mowy „SAM”. Program ten dodaje do zbioru komend BASIC-a kilka własnych rozkazów, pozwalających na uzyskanie całkiem poprawnie brzmiącej mowy. Niestety, bardzo niewielu osobom udało się zdobyć informacje o działaniu tego programu, który przez to bardzo rzadko jest wykorzystywany. Poniżej podaje spis komend oraz sposób ich użycia.

„Poradnik młodego pirata cz. 4”
(Ted) - Bajtek 11/1986

Uff! Po tak solidnej dawce teorii warto by było trochę odpocząć i przejść do nieco innej tematyki — jakie programy nadają sie do przepisania na taśmę.    

Poradnik młodego pirata cz. 4
„Przenieść Obraz”
Klaudiusz Dybowski - Bajtek 1/1988

Choć poszczególne modele Commodore różnią sie od siebie, to maja one także jedna cechę wspólna — jest nią grafika o rozdzielczości 320x200 punktów. Dla entuzjastów grafiki mam wiec coś ekstra — sposób przenoszenia obrazów graficznych pomiędzy modelami C-64, C-16 /116/PLUS4 i C-128.

Przenieść Obraz
„C-64 budowa i działanie”
Klaudiusz Dybowski, Michał Silski - Bajtek 3-4/1986

Dobry mikrokomputer to taki, który jest tani, ma bogate oprogramowanie dostępne w kraju, przystępny język programowania i duże możliwości rozbudowy w kierunku małego systemu. Przedstawiamy Commodore 64, mikrokomputer spełniający wszystkie powyższe wymogi, cieszący się w Polsce dużą (i zasłużoną) popularnością. Oczywiście, że określenie „tani", odnosi się do porównania z cenami innych, podobnych urządzeń, a nie do niskiej ceny w ogóle.  

C-64 budowa i działanie
„Poradnik młodego pirata cz. I”
Klaudiusz Dybowski, Michał Silski - Bajtek 8/1986

Poniższy artykuł (a właściwie pierwszą jego część) przeznaczamy dla tych wszystkich, którzy myślą o ekonomicznym wykorzystaniu swoich dyskietek zaśmieconych programami działającymi równie dobrze z taśmy. Ponadto autorzy opisują jak uczynić „nieprzegrywałne” przegrywalnym — czyli po prostu jak kopiować programy dyskowe o długości do 207 bloków. Wielokrotnie mieliśmy już okazję spotkać świeżo upieczonych posiadaczy Commodore 64 łamiących sobie głowę nad opracowaniem złotego sposobu umożliwiającego przegrywanie programów dyskowych na taśmę. Najczęściej oczywiście chodziło o tak renomowane gry jak „Kennedy Approach”, „Summer Games” czy też „Silent Service”, rzadziej zaś o jednoczęściowe programy mające po 200 i więcej bloków (1 blok — 256 bajtów). Znajdowali się również chętni do przegrywania programów kilku-częściowych, wgrywanych kolejno do pamięci za pomocą krótkiego programu wczytującego, tzw. loadera.

„C-128”
Przemysław Koziarski - Bajtek 9/1986

Zaczęło sie w styczniu 1985 w Las Vegas (USA). Wtedy to firma Commodore zaprezentowała 3 nowe mikrokomputery: Commodore PC-128. Commodore PC-128D i Commodore LCO. Commodore LCO jak dotąd nie pokazał się w sklepach, natomiast podróż PC-128 z USA do Europy trwała przeszło pół roku. Na początku lipca 1985 trafił na półki sklepowe i do katalogów domów wysyłkowych, ściślej biorąc miał trafić, bo w sklepach pojawiły się tylko pojedyńcze egzemplarze. Firma milczała, handlowcy i domy wysyłkowe też, a chętni na PC-128 ostrzyli sobie zęby i ... czekali. Krążyły różne plotki: Commodore zbankrutował, cała partia komputerów jest uszkodzona itd. Milczenie i niepewność trwały do początku października 1985. Firma wyjaśniła, że przyczyną opóźnienia w dostawie był bład w pamięci ROM.      

„Poradnik młodego pirata cz. II”
Klaudiusz Dybowski - Bajtek 9/1986

Czy wiesz drogi Czytelniku w jaki sposób Twój Commodore rozpoznaje daną konfiguracje pamieci?    

„Polski alfabet cz.l ”
(ms) - Bajtek 10/1986

Dla przekonania tych, którzy twierdza, że bez polskiej pisowni można sie obejść, zamieszczam przykład zaproponowany przez prof. W. M. Turskiego: „ZADANIE KATA NA LACE”. Sposobów interpretacji tego zdania jest na tyle dużo, aby straciło ono sens w ogóle.    

„Poradnik młodego pirata cz. V”
Klaudiusz Dybowsk, Michał Silski - Bajtek 12/1986

Na zakończenie naszego "Poradnika" chcielibyśmy omówić pokrótce podstawowe sposoby zabezpieczania programów. Ze zrozumiałych względów nie będziemy sie wdawać w szczegóły techniczne - chodzi nam raczej o zasygnalizowanie pewnych metod używanych do zabezpieczania.

„Monitory Ml — Część II”
Klaudiusz Dybowski - Bajtek 1/1989

W poprzedniej części mówiliśmy o monitorach generalnie. Dziś pora na listę instrukcji i pierwsze przykłady.

„Modem I Sprawa Polska”
Artur Bychowski - Bajtek 1/1989

Prywatni użytkownicy, właściciele oraz ci, którzy zamierzają nabyć modem do swego mikrokomputera mają zwykle kilka podstawowych wątpliwości związanych z legalizacją działalności na łączach telefonicznych. Czy dany modem był już w kraju homologowany? Jakie są przepisy dotyczące korzystania z modemów? Gdzie takie urządzenia zarejestrować? — to tylko kilka pytań, na które postaram się w tym artykule odpowiedzieć.

„Zasilacz Do Commodore C64”
Zbigniew Kaszycki - Bajtek 1/1989

Jedną z dość częstych przyczyn unieruchomienia komputera jest uszkodzenie zasilacza. Sprzyjają temu przede wszystkim jego zwarta budowa i związane z nią niekorzystne warunki chłodzenia prowadzące w rezultacie do przegrzewania się stabilizatora i transformatora a ich uszkodzeń.

„Łańcuchowanie Programów”
Krzysztof Gajewski, Bogusław Radziszewski - Bajtek 1/1989

Zmorą małych komputerów jest mała pamięć. W mikrokomputerze Commodore 64 pracującym pod kontrolą firmowego interpretera prowadzi to do pojawienia się błędu OUT OF MEMORY, który bardziej irytuje niż inne, bowiem tylko częściowo winowajcą, w przypadku gdy wystąpi, jest programista.

„EMULATOR C-64 DLA AMIGI”
Jan Jasiński - Bajtek 2/1989

Amiga i jej oprogramowanie jest przedstawiane dość skromnie i sporadycznie w prasie krajowej, czas więc na pierwszy solidny test tego komputera w naszych polskich warunkach. Test ten będzie dotyczył programu emulującego C-64 na Amidze.

„Język maszynowy”
Dominik Falkowski - Bajtek 2/1989

Opisy monitorów, które już się pojawiły w klanie COMMODORE, zasygnalizowały zamiar rozpoczęcia cyklu nauki programowania w języku maszynowym. Zanim kolejne wykłady zyskają w miarę jednostajny rytm, potrzebne będzie wprowadzenie kilku pojęć i terminów, które będą nam potrzebne w następnych wykładach. Umożliwią one pełniejsze zrozumienie metod programowania w powiązaniu z architekturą komputera.

„Bhp Virus Killer”
Klaudiusz Dybowski - Bajtek 3/1989

Wydawać by się mogło, że wirusy komputerowe dotyczą tylko sprzętu "poważnego" — IBM, AMIGI czy Atari ST. Niestety również i poczciwe komputerki 8-bitowe są podatne na tę zarazę i choć działanie wirusów odnosi się do nich w znacznie mniejszym zakresie, to jednak ich uderzenie może być dla użytkownika dość bolesne.  

„Magnetofon Też Człowiek”
Zbigniew Kaszycki{SP8IC} - Bajtek 3/1989

Mimo iż stacje dysków są coraz bardziej popularne, magnetofon długo jeszcze będzie służył wielu użytkownikom jako tania pamięć masowa. Warto więc poświęcić mu nieco uwagi i troski aby jego eksploatacja była długa i bezawaryjna.    

„1750 RAM Expansion Module”
Klaudiusz Dybowski - Bajtek 4/1989

Dzięki uprzejmości jednego ze stałych Czytelników BAJTKA otrzymatem do testowania kartkę rozszerzającą pamięć o 512 KB o nazwie „1750 RAM EXPANSION MODULE“ przeznaczona dla Commodore 128.    

„Porady spod lady”
Klaudiusz Dybowski - Bajtek 4/1989

Po dwóch latach używania mojego C-64 komputer reaguje dość dziwnie na wciśnięcie klawisza RETURN. Czasami zdarza się, że nie reaguje wogóle, czasami natomiast jedno wciśnięcie powoduje przesunięcie kursora nawet o trzy, cztery linie w dól (...