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

Krzysztof Gajewski|Bogusław Radziszewski

Łańcuchowanie Programów

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.

W poprzednich punktach zaprezentowaliśmy, jak sobie z tym poradzić umożliwiając stosowanie nakładkowania procedur. Naszym zdaniem jest to najefektywniejszy sposób nakładkowania, bowiem stwarza dodatkowo możliwość przygotowania biblioteki niezależnych modułów, które mogą być wykorzystywane w następnych programach.

W niektórych dialektach BASICa lub implementacjach Pascala (np. w Turbo Pascalu) starano się problem zbyt małej pamięci roboczej rozwiązać poprzez tzw. łańcuchowanie programów (BASIC) lub procedur (Turbo Pascal). Typową instrukcją służącą do tych celów jest w dialektach BASICa instrukcja CHAIN. CHAIN użyte na końcu programu aktualnie rezydującego w pamięci komputera powoduje wczytanie z taśmy lub z dyskietki innego programu. Do rozwiązania pozostaje tylko problem komunikacji między kolejnymi ogniwami nakładkowanymi w pamięci operacyjnej. Oczywiście ogniwa mogłyby wymieniać między sobą dane za pośrednictwem pamięci zewnętrznej. Wymaga to jednak więcej czasu niż sposób, który wykorzystuje w tym celu pamięć komputera. Otóż w tym przypadku najwygodniej jest umieścić dane do przekazania w zbiorze zmiennych zwanym wspólnym blokiem. To, co przechowamy we wspólnym bloku, będzie można wykorzystać w następnym ogniwie. To, co jest niepotrzebne czyli wszystkie zmienne lokalne, zostanie usunięte i zwolni pamięć.

Ponieważ łańcuchowanie programów może okazać się przydatne w praktycznym programowaniu, to również Warsaw BASIC wyposażyliśmy w instrukcję CHAIN. Oryginalnie działa w systemie WB instrukcja COMMON, która służy do tworzenia wspólnego bloku zmiennych. COMMON przenosi do tego bloku wszystkie zmienne i tablice, które zostały zadeklarowane przed użyciem tej instrukcji. Zachowują one tam swoje nazwy z tym, że aby ich użyć, należy poprzedzać je znakiem wykrzyknika. Za to można ich używać nie tylko w kolejnych ogniwach nakładkowanych przez CHAIN, ale również we wszystkich procedurach na każdym z 8 poziomów zagnieżdżenia. Poza tym takie rozwiązanie pozwala na używanie w nazwach zmiennych lokalnych tych samych identyfikatorów, co w nazwach zmiennych ze wspólnego bloku. Wspólny blok można skasować (COMMON OFF), w jego miejscu utworzyć następny, itd.

Inne podejście do problemu komunikacji między ogniwami prezentuje standardowy dla C-64 interpreter CBM v.2.0. Rolę CHAIN pełni tu instrukcja LOAD. LOAD użyte w trybie programowym powoduje, że po załadowniu wyspecyfikowanego zbioru sterowanie zostanie przekazane do pierwszej instrukcji wczytanego programu. Wczytany program korzysta z tego samego zbioru zmiennych co jego poprzednik. Innymi słowy mówiąc, wszystkie zmienne w kolejnych ogniwach są globalne. W czasie używania LOAD w roli CHAIN należy zachować ostrożność. Wszystko jest w porządku dopóki każde następne ogniwo jest nie większe niż pierwsze. Jeśli zdarzy się, że jedno z ogniw przekroczy objętość ogniwa inaugurującego, to zniszczony zostanie zbiór zmiennych i tablic, co uniemożliwi korzystanie z danych zgromadzonych przez poprzednie ogniwa. Ponieważ jednocześnie nie ulegną zmianie zmienne systemowe odpowiedzialne za konfigurację pamięci roboczej BASICa, to użycie zmiennej, której nie można zidentyfikować w nieaktualnym już zbiorze danych spowoduje jej umiejscowienie tam, gdzie poprzednio kończył się zbiór zmiennych. To z kolei może zniszczyć dopiero co załadowane ogniwo.

Do stosowania odpowiednich reguł, które wykluczałyby opisane powyżej przypadki, można się przyzwyczaić, albo tak zmienić interpreter, aby nie trzeba było tych reguł stosować. W interpreterze rozbudowanym dla Czytelników „Bajtka” zastosowaliśmy to drugie rozwiązanie (por. program 1). Podprogram obsługujący łańcuchowanie korzysta z programu wywołującego procedury przedstawionego w jednym z poprzednich odcinków teo cyklu. Różnica polega na tym, że CHAIN zapamiętuje na stosie tylko adres (2 bajty) początku programu wywołującego (por. LDA #$02 w linii $C8D8 programu 1). Składnia CHAIN w interpreterze rozbudowanym dla Czytelników „Bajtka” ma postać:

£A „nazwa programu”, nr urządzenia

£A tym różni się od instrukcji łańcuchowania z Warsaw BASICa, że kolejne ogniwa nakładkuje nie na poziomie programu wywołującego, ale bezpośrednio za zbiorem danych tego poziomu, tam gdzie umieszczane są procedury wywołane przez CALL. Chroni to zbiór danych przed zniszczeniem i udostępnia go w całości wywołanemu ogniwu. Ceną, jaką trzeba za to zapłacić, jest to, że kolejne ogniwa mogą korzystać tylko ze zmiennych zadeklarowanych w programie wywołującym. Ogniwo wywołane i wywołujące mają ten sam zbiór zmiennych. Oczywiście numery linii w ogniwie wywołanym mogą być takie same jak w programie wywołującym.

Wykonanie ogniwa wywołanego przez £A kończy instrukcja £F. Powoduje ona ponowne przełączenie się do programu wywołującego. £F korzysta z procedur instrukcji £E kończącej wykonanie procedury, dlatego program 2 zawiera tylko wstawienie na listę adresów interpretera adresu £F (por. POKE x+11, 199 i POKE x+10, 186 w liniach 906 i 908).

W ogniwach nakładkowanych przez £A nie można wywoływać procedur. W procedurach natomiast można korzytać z łańcuchowania. Próby nielegalnego wywoływania są sygnalizowane komunikatem ILLEGAL DIRECT.

Ogniwo wywoływane przez instrukcję £A można zaopatrzyć w nagłówek:

£H"nazwa programu

Spowoduje to, że powtórne wywołanie tego ogniwa, o ile nie zostanie zniszczone, nie będzie wymagało ładowania z pamięci zewnętrznej.

Artykuł poświęcony łańcuchowaniu programów kończy prezentację Warsaw BASICa jako systemu programowania proceduralnego. Wypada więc i nam kończyć ten cykl artykułów. Zanim to nastąpi, dla najwytrwalszych Czytelników mamy jeszcze jedną niespodziankę. A więc do następnego numeru.

 

Krzysztof Gajewski, Bogusław Radziszewski

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 (...