Wprowadzenie


Nauka programowania komputerów jest zadaniem bardzo trudnym. Współczesny sprzęt informatyczny ma za sobą długą drogę rozwoju i osiągnął wysoki stopień komplikacji będący barierą dla początkujących, którzy chcieliby poznać zasady programowania w języku bezpośrednio rozumianym przez procesor, czyli w asemblerze. Obecne procesory posiadają skomplikowaną architekturę, pracują w złożonym środowisku sprzętowym, często wielozadaniowym, wyposażone są w bogaty zestaw instrukcji. Wszystko to jest dla początkującego programisty chaosem trudnym do opanowania i prowadzi do zniechęcenia oraz zaniechania dalszej nauki.

Naszym celem jest zmniejszenie chaosu oraz złożoności systemów rzeczywistych i oddanie do rąk użytkowników Przykładowej Maszyny Cyfrowej czyli PMC, która ma prostą i zrozumiałą konstrukcję oraz niewielki zestaw rozkazów. Dzięki tym cechom można szybko nauczyć się jej budowy i skoncentrować na samym programowaniu. Wiadomości wyniesione z PMC przydadzą się później u jej większych braci, gdyż zasady programowania pozostaną podobne lub wręcz takie same.

PMC to symulator pewnego hipotetycznego komputera. Wyposażono go w edytor programów, gdzie użytkownik może przygotować i testować różne algorytmy. PMC nie pracuje zbyt szybko, co nie było nigdy naszym celem. Szybkość działania uzależniona jest głównie od szybkości systemu, na którym uruchomiono symulator i wynosi około 30 instrukcji maszynowych na sekundę. PMC nie posiada żadnego systemu operacyjnego, co jest tutaj zaletą, gdyż początkujący nie musi się uczyć jego poleceń. Programista ma całkowitą kontrolę nad całym komputerem.

Zanim przejdziemy do programowania PMC, musimy przebrnąć przez część teoretyczną. Jeśli ją pominiesz, to prawdopodobnie nie zrozumiesz rozdziałów omawiających tajniki programowania i budowy PMC. W części teoretycznej omawiamy bardzo szczegółowo różne sposoby kodowania informacji, co jest bardzo istotne dla pracy komputerów. Dalej przechodzimy do logiki cyfrowej i demonstrujemy, jak z pomocą kilku elementów logicznych buduje się podstawowe składniki komputerów. Następnie omawiamy budowę PMC, która odpowiada budowie każdego typowego komputera. Tutaj przedstawimy również wszystkie polecenia rozumiane przez procesor PMC i sposób ich wykonywania. Na koniec mamy przykłady różnych programów realizujących podstawowe algorytmy.

Zapraszam do lektury
mgr Jerzy Wałaszek


I LO w Tarnowie

 

 

UWAGA!

Tę część wstępu możesz z całym spokojem pominąć bez szkody dla całości. Chcę tutaj jedynie przedstawić parę faktów ze swojej przeszłości. Jeśli będę zbyt nudny lub stanę się niezrozumiały, to przestań czytać i przejdź do następnego rozdziału. Jeśli chcesz się dowiedzieć więcej o starych komputerach, zapraszam do działu retro.

 

 

 


Sinclair ZX81

Moim pierwszym komputerem stał się w połowie lat 80-tych model o nazwie Sinclair ZX81. Do dzisiaj posiadam sentyment do tej maszynki. Zainstalowałem nawet emulator ZX81 na swoim PC-cie, aby od czasu do czasu przypomnieć sobie stare, dobre czasy. Obok możecie zobaczyć, jak wyglądał ZX81. Małe, czarne pudełko z płaską, membranową klawiaturą. Każdy z przycisków posiadał przypisane po kilka różnych znaczeń, co było w owym czasie dosyć rozpowszechnionym standardem wśród komputerów domowych. Opanowanie takiej klawiatury wcale nie było takie proste, ale za to ile dawało zabawy... Do pracy z ZX81 potrzebny był jeszcze mały zasilacz sieciowy (taki jak do kalkulatora), magnetofon kasetowy do zapisywania i odczytywania programów (tak, tak, stacje dyskietek były w tamtych czasach nieosiągalnie drogie, a o dyskach twardych to i pomarzyć nie było można) oraz dowolny telewizor czarno-biały (kolorowy telewizor nie dawał żadnych korzyści, ponieważ ZX81 mógł wyświetlać jedynie grafikę znakową w dwóch kolorach - czarnym i białym).


Widok typowego ekranu ZX81

Według dzisiejszych standardów komputer ZX81 nie jest zbyt imponującą maszyną. Obecnie nikt nie chciałby czegoś takiego programować. Jednak w odróżnieniu od współczesnych komputerów IBM czy Macintosh, ZX81 był prosty i dosyć łatwy do opanowania, chociaż i tak zajęło mi to kilka długich miesięcy studiowania instrukcji obsługi.


Parametry komputerka ZX81 były następujące:


Instrukcja dla ZX81

Wraz z komputerem użytkownik otrzymywał pełną instrukcję obsługi (czy kupując dzisiaj komputer PC dostajesz wraz z nim kompletną instrukcję obsługi, w której znajdziesz wszystko na temat zakupionego sprzętu? Nie? Oczywiście, musiałaby zawierać chyba milion stron...). W instrukcji dla ZX81 znajdowało się dosłownie wszystko - instrukcja obsługi komputera oraz pełny kurs programowania w języku BASIC, opis budowy komputera, opisy zmiennych systemowych i ich funkcji, itd. Kliknij na widocznej obok okładce, a zobaczysz zawartość tej historycznej pozycji. To właśnie z tej książeczki nauczyłem się programowania w języku Basic. Dzisiaj już wiem, że język ten nie powinien być nauczany jako pierwszy, gdyż wprowadza wiele złych nawyków (np. nadużywanie instrukcji GOTO i GOSUB)  i utrudnia opanowanie języków strukturalnych i obiektowych. Oczywiście dzisiejszy dialekt języka Basic to już zupełnie inna historia i moje uwagi go nie dotyczą (to dla tych, którzy programują w Visual Basicu i mogliby się poczuć urażeni).

Do czego zmierzam? Otóż ZX81 był prosty, więc łatwy do opanowania. Dzisiejsze komputery są niewiarygodnie złożone, a więc trudne do poznania. Ilość czynników, które należy brać pod uwagę przy tworzeniu programów przewyższa naszą zdolność koncentracji. Stąd biorą się różne błędy w aplikacjach - ktoś czegoś nie przewidział. I tak pojawił się pomysł opracowania Przykładowej Maszyny Cyfrowej - PMC, komputera prostego, jednak posiadającego wszystkie podstawowe cechy normalnego komputera.


Sinclair ZX-Spectrum 48

Po ZX81 poznałem dogłębnie następny produkt Sir Clive'a Sinclaira - słynny ZX-Spectrum będący następcą komputera ZX81. ZX-Spectrum umożliwiał pracę z obrazem kolorowym oraz generował dźwięk przez wbudowany głośniczek (właściwie bzyczek). Wciąż stosowano magnetofon jako pamięć zewnętrzną oraz telewizor (tym razem wreszcie kolorowy).

W Polsce pod koniec lat 80-tych ZX-Spectrum stał się faktycznie standardem. Nawet trafił do szkolnych pracowni w roli komputera edukacyjnego. Napisano dla niego dziesiątki tysięcy różnych programów: gier, użytków, edytorów tekstu, narzędzi graficznych i dźwiękowych. Dla tych, których ominął ten okres, przedstawiam obok zdjęcie Spectrumny (tak go nazywano). Komputer ten w stosunku do swojego poprzednika wyposażono w klawiaturę gumową - nieco lepszą w pisaniu. Jednak klawiatura ta dosyć często ulegała różnym awariom. Na Zachodzie istniały firmy sprzedające różne akcesoria do tej maszynki, m.in. klawiatury kontaktronowe - praktycznie nie do zdarcia i pracujące do dziś (ciekawe jak do tego faktu mają się klawiatury jedynie słusznych komputerów PC? Ja osobiście pracuję już na szóstej z kolei). W ZX-Spectrum zastosowany był mikroprocesor Z80A z zegarem 3,5MHz. Ponieważ generacją obrazu kolorowego zajmował się inny układ (tzw. ULA), to procesor mógł przeznaczyć całą swoją moc obliczeniową na wykonywanie programu użytkownika, co w efekcie dawało cztery razy szybszą pracę w stosunku do ZX81. Co za komfort, nie sądzicie? Dlatego właśnie polubiłem ten komputer i, podobnie jak w przypadku ZX81, również zainstalowałem na swoim PC emulator ZX-Spectrum. Po uruchomieniu tego emulatora komputer PC przemienia się w ZX-Spectrum i nawet, pomimo starań Billa Gatesa i jego wspaniałego systemu operacyjnego, mu się to całkiem dobrze udaje.

Komputery ZX-Spectrum wyposażone były w pamięć ROM o pojemności 16KB (czyli dwa razy tyle co w ZX81). Dzięki niej możliwości sprzętu zostały znacznie zwiększone. Interpreter języka BASIC mógł wykonywać zaawansowane programy komputerowe. Pamięć RAM wynosiła standardowo 16KB (model ZX-Spectrum 16) lub 48KB (pełne ZX-Spectrum 48). Dzisiaj wydaje się to śmiesznie małą ilością pamięci, ale wtedy naprawdę można było w takim obszarze zmieścić wiele. Programiści dbali o efektywność swoich programów. W dzisiejszych czasach ta cecha została gdzieś zarzucona - nikt nie optymalizuje zużycia pamięci - jeśli jej zaczyna brakować, to dokupuje się nowe "setki" megabajtów. Horror z punktu widzenia ZX-Spectrum. Parametry komputera ZX-Spectrum były więc następujące:


Instrukcja dla ZX-Spectrum

Firma Sinclair sprzedawała swój ZX-Spectrum z pełną instrukcją obsługi. Podane w niej były nawet kody rozkazów procesora Z80 dla tych, którzy chcieliby ręcznie wprowadzać instrukcje kodu maszynowego. Niesamowite, co? Chociaż konstrukcyjnie był to sprzęt bardziej skomplikowany od ZX81, to można go było opanować w kilka miesięcy i tworzyć programy zarówno w języku BASIC jak i w asemblerze. Możesz kliknąć na obrazku okładki obok, aby zobaczyć treść tej instrukcji.


Zrzut ekranu graficznego ZX-Spectrum

Dużym atutem komputera ZX-Spectrum był kolorowy obraz - zdolny grafik mógł czynić cuda (patrz na prawo). W owych czasach komputery PC sprzedawano w formie modeli IBM PC-XT, które wyposażano zwykle w karty graficzne: kolorową CGA (Color Graphic Adapter - Kolorowy Adapter Graficzny) i monochromatyczną  Hercules (bardzo czytelny obraz, ale bez kolorów). Chociaż oferowały one większą rozdzielczość, to jednak w grafice komputer ZX-Spectrum mógł wyświetlić naraz na ekranie 16 różnych kolorów, a karta CGA tylko cztery (Karty EGA - Enhenced Graphic Adapter i PGA - Proffesional Graphic Adapter były tak beznadziejnie drogie, iż mało kto z nich korzystał). W latach 80-tych na komputer klasy IBM PC stać było jedynie instytucje (egzemplarz kosztował równowartość rocznej pensji jednego pracownika). Dlatego spotkałem się z tym sprzętem dopiero w czasie studiów w uczelnianej pracowni informatycznej i muszę przyznać, iż wcale nie byłem zbyt zachwycony jego możliwościami. To prawda, że komputery IBM oferowały profesjonalny komfort pracy, ale w latach 80-tych miały jedynie zalety w pracach biurowych i naukowych (edytory tekstu, arkusze kalkulacyjne, programy do projektowania obwodów elektronicznych itd). W domach królowały niepodzielnie maszyny 8-bitowe.



ATARI 800XL

Na początku lat 90-tych firma Pewex rozpoczęła sprowadzanie do Polski komputerów ATARI 800 XL. Był to sprzęt zupełnie innej klasy niż komputery ZX-Spectrum. Przede wszystkim ATARI 800 XL wyposażono w inny mikroprocesor, który nosił oznaczenie 6502. Mikroprocesor Z80 stanowił rozwinięcie architektury mikroprocesora 8080 firmy Intel (tak nawiasem mówiąc, dzisiejsze mikroprocesory Pentium są również rozwinięciem architektury tego układu, co jest ich podstawową wadą!). Mikroprocesor 8080 opracowano w czasach, gdy jeszcze nie znano dokładnie zasad budowy dobrych mikroprocesorów. Z układem 6502 było zupełnie inaczej. Zaprojektowano go, gdy na rynku od lat istniały mikroprocesory firmy Intel. Opracowanie to wykonano od podstaw. Wynikowy procesor nie zawierał wad procesorów firmy Intel (z którymi programiści do dzisiaj muszą się zmagać). Działał on według zupełnie innej koncepcji, przypominającej zasady pracy współczesnych procesorów RISC (ang. Reduced Instruction Set Computer - komputer ze zmniejszoną liczbą rozkazów działa szybciej, ponieważ posiada prostszą logikę dekodowania instrukcji) oraz wcześniejszych, dużych systemów komputerowych. Zastosowano w nim potokowe wykonywanie instrukcji (wykonanie następnej instrukcji rozpoczynało się w końcowej fazie wykonania instrukcji bieżącej, dzięki czemu procesor nie miał pustych taktów, jak Z80). Układ był zorientowany na pamięć operacyjną (Z80 i jego następcy - w tym i Pentium - są zorientowane na rejestry wewnętrzne). Wszystko to sprawia, iż 6502 pracujący z zegarem 1,79MHz był równie szybki (a czasami nawet szybszy) niż Z80 pracujący z zegarem 3,5MHz (dwa razy szybciej!). Z uwagi na mniejszą ilość instrukcji programy dla 6502 były bardziej zwarte i krótsze niż programy dla Z80 oraz, co równie ważne, bardziej przejrzyste.


Stacja dysków Atari 1050

Komputer Atari 800 XL współpracował ze stacją dysków (istniała również możliwość podłączenia specjalnego, firmowego magnetofonu kasetowego, ale jego parametry były dużo gorsze od ZX-Spectrum) i posiadał firmowy, dyskowy system operacyjny DOS 2.5, który pozwalał zapisywać dane na dyskietkach 51/4 cala (dzisiaj ich już się nie spotyka). Dzięki stacji dysków praca z Atari była pewna, szybka i przyjemna.

Stopień komplikacji sprzętu przewyższał znacznie poprzednie komputery, więc opanowanie zasad programowania zajęło mi dosyć dużo czasu. Atari mógł być programowany w języku ATARI BASIC, jednak nie był to zbyt efektywny sposób. Częściej stosowałem asembler, który bardzo mi się podobał. Właśnie PMC opiera się częściowo na instrukcjach asemblera występujących w systemie mikroprocesorowym 6502, ponieważ są one bardzo łatwe do zapamiętania i użycia. Oczywiście nie oznacza to, iż PMC jest mikroprocesorem 6502!

Parametry komputera Atari 800XL były następujące:


Zrzut ekranu graficznego Atari 800 XL


Amiga 500

Kolejnym komputerem, z którym miałem przyjemność się spotkać, była maszyna o dźwięcznej nazwie Amiga 500+ (w języku hiszpańskim Amiga znaczy Przyjaciółka). Na początku lat 90-tych był to najlepszy sprzęt, jaki można sobie wymarzyć. Swoimi parametrami przewyższał znacznie dostępne w owym czasie komputery IBM XT i IBM AT. Przede wszystkim komputer Amiga wyposażony został przez firmę Commodore w wielozadaniowy, graficzny system operacyjny, z którym wczesne wersje Windows nie miały się co równać. Praca w okienkach i jednoczesne uruchamianie wielu aplikacji nie jest wynalazkiem firmy Billa Gatesa. Atutem Amigi była wysoka jakość obrazu, na którym jednocześnie mogło pojawić się aż 4096 kolorów (jak przy tym wyglądał IBM ze swoimi 16 kolorami dla CGA czy 64 dla EGA - dopiero karta VGA przewyższyła Amigę w ilości jednocześnie widocznych kolorów). Drugą mocną stroną okazało się zastosowanie mikroprocesora Motorola 68000. Był to układ 16-to bitowy, który opracowano od podstaw podobnie jak mikroprocesor 6502 stosowany w Atari, Commodore 64 i wielu innych ówczesnych komputerach 8-bitowych. Przemyślana architektura sprawiała, iż programowanie 68k było samą przyjemnością. PMC posiada pewne cechy Amigi, mianowicie tryby adresowania predekrementowego oraz postinkrementowego umożliwiające szybki dostęp do tablic w pamięci operacyjnej komputera oraz tworzenie struktur stosowych.

Złożoność komputera Amiga można porównać do złożoności współczesnych komputerów IBM PC. Jako maszyna 16 bitowa, komputer ten miał dużą pamięć RAM oraz wbudowany system operacyjny, który zawierał bardzo wiele różnych funkcji i procedur. Muszę przyznać, iż wcześniejsza znajomość mikrokomputerów ZX81, ZX-Spectrum oraz Atari 800XL bardzo pomogła mi przy nauce programowania Amigi. Wiele rzeczy było dla mnie oczywiste i proste. Oto parametry Amigi 500+ w wersji, z którą pracowałem:


Zrzut ekranu graficznego Amigi


IBM PC AT

W roku 1992 rozpocząłem pracę w szkole jako nauczyciel informatyki. Ponieważ pracownia informatyczna była wyposażona w nowo zakupione komputery IBM AT/286, więc i ja musiałem się z nimi przeprosić i dokładnie zapoznać. Aby nie zostać w tyle za resztą świata, zmontowałem z różnych podzespołów swój pierwszy komputer IBM. Bardzo pomogła mi tutaj wiedza zdobyta w czasie 10 wcześniejszych lat pracy z poprzednimi systemami. Dzięki niej wiedziałem jakich komponentów szukać i jak je ze sobą połączyć. Również nie napotkałem żadnych problemów przy instalacji oprogramowania. Komputer ten w dalszych latach był konsekwentnie modernizowany i rozbudowywany. Dzisiaj w moim sprzęcie nie pozostało z niego już nic. Komputer IBM jest maszyną modułową. Oznacza to, iż użytkownik może skompletować go z różnych elementów, które w danym momencie są mu potrzebne. Nie istnieje więc coś takiego jak standardowy komputer IBM PC. W każdej jednostce mogą być inne dyski twarde, inne karty graficzne, dźwiękowe, inny zestaw współpracujących urządzeń zewnętrznych. W poprzednich systemach sytuacja taka nie występowała. Pisanie programów było łatwiejsze, ponieważ nie zmieniało się środowisko ich pracy. W systemie IBM program musi działać w nieznanym z góry środowisku - przecież nie wiemy, w co wyposaży użytkownik swój komputer - może to być element, którego jeszcze nie było w czasie powstawania programu. Jak więc sobie z tym poradzono? Wymyślono sterowniki programowe. Sterownik jest specjalną procedurą, która wykonuje na sprzęcie różne operacje. Wyobraźmy sobie, iż chcemy wypisać na ekranie monitora tekst "cześć". W ZX81, ZX-Spectrum czy Amidze program odwoływałby się bezpośrednio do obszaru ekranu komputera. W systemie IBM należy skorzystać z usług sterownika grafiki, któremu przekazujemy w standardowy sposób polecenie wypisania tekstu. Nie wiemy jak on to wykona i w sumie mało to nas obchodzi. Mamy gwarancję, że tekst się pojawi. Jeśli użytkownik zmieni swoją kartę grafiki, to zmieni również zestaw sterowników. Nowo zainstalowane sterowniki będą wiedziały, jak obsłużyć nowy sprzęt. Nasz program natomiast nie musi być w żaden sposób modyfikowany. Tak jak poprzednio przesyła do nowego sterownika polecenie wypisania tekstu i sprawa jest załatwiona. Oznacza to jednak, iż w systemie IBM raczej nie można wykonywać bezpośrednich operacji na sprzęcie (chyba że jest to sprzęt podstawowy, obecny w każdym egzemplarzu - np. port RS-232 czy Centronics, ale i tutaj może spotkać nas w przyszłości niespodzianka). Tracimy wtedy przenośność oprogramowania i ryzykujemy to, iż nasz program nie będzie działał na komputerze inaczej skonfigurowanym od naszego (często spotykam się z tym w programach napisanych przez początkujących).

A oto parametry techniczne mojego pierwszego komputera IBM PC:


Zrzut ekranu graficznego IBM-PC z kartą Hercules

W tym wprowadzeniu chciałem krótko przedstawić moje doświadczenie z różnymi systemami komputerowymi (kilka pominąłem, np. Commodore 64, Amstrad czy Cyber). Dane mi było pracować na różnym sprzęcie, dzięki czemu poznałem dobrze architekturę komputerów. Swoją wiedzę i doświadczenie zawarłem w projekcie PMC. Starałem się, aby maszyna ta w miarę możliwości przypominała prawdziwy komputer - wszystkie jej elementy mogłyby faktycznie zostać zbudowane z istniejących komponentów. Czy mi się to udało, musicie ocenić sami. Życzę wszystkim wiele przyjemności w poznawaniu tajników PMC. Wyniesiona stąd wiedza przyda się wam przy pracy z prawdziwymi komputerami.

Autor: mgr Jerzy Wałaszek
Tarnów, 26.08.2001 r.

 



List do administratora Serwisu Edukacyjnego Nauczycieli I LO

Twój email: (jeśli chcesz otrzymać odpowiedź)
Temat:
Uwaga: ← tutaj wpisz wyraz  ilo , inaczej list zostanie zignorowany

Poniżej wpisz swoje uwagi lub pytania dotyczące tego rozdziału (max. 2048 znaków).

Liczba znaków do wykorzystania: 2048

 

W związku z dużą liczbą listów do naszego serwisu edukacyjnego nie będziemy udzielać odpowiedzi na prośby rozwiązywania zadań, pisania programów zaliczeniowych, przesyłania materiałów czy też tłumaczenia zagadnień szeroko opisywanych w podręcznikach.



   I Liceum Ogólnokształcące   
im. Kazimierza Brodzińskiego
w Tarnowie

©2017 mgr Jerzy Wałaszek

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji
GNU Free Documentation License.