![]() |
Nauka programowania komputerów jest zadaniem bardzo trudnym. Współczesny sprzęt informatyczny ma za sobą długą drogę rozwoju i osiągnął bardzo wysoki stopień komplikacji będącą barierą dla początkujących, którzy chcieliby poznać zasady programowania w języku bezpośrednio rozumianym przez procesor, czyli w asemblerze. Obecne procesory mają skomplikowaną architekturę, działają w złożonym środowisku sprzętowym, często jest to środowisko wielowątkowe, posiadają bogaty zestaw instrukcji. Wszystko to jest dla początkującego programisty chaosem trudnym do przebrnięcia 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 |
UWAGA!Tą część wstępu możesz z całym spokojem pominąć bez szkody dla całości. Chcę tutaj 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. |
|
Moim pierwszym komputerem był w połowie lat 80-tych model o nazwie Sinclair ZX-81. Do dzisiaj posiadam sentyment do tej maszynki. Zainstalowałem nawet emulator ZX-81 na swoim PC-cie, aby od czasu do czasu przypomnieć sobie stare, dobre czasy. Obok możecie zobaczyć, jak wyglądał ZX81. Małe, płaskie pudełko z płaską, membranową klawiaturką. Każdy z przycisków posiadał przypisane po kilka różnych znaczeń, co było w owym czasie dosyć rozpowszechnionym standardem. Opanowanie tej klawiatury wcale nie było takie proste, ale ile dawało zabawy... Do pracy z ZX-81 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ż ZX-81 mógł wyświetlać jedynie grafikę znakową w dwóch kolorach - czarnym i białym).
Według dzisiejszych standardów ZX-81 nie jest zbyt imponującą maszyną. Nikt dzisiaj nie chciałby czegoś takiego programować. Jednak w odróżnieniu od współczesnych komputerów IBM czy Macintosh, ZX-81 był prosty i dosyć łatwy do opanowania, chociaż i tak zajęło mi to kilka długich miesięcy studiowania instrukcji obsługi. Parametry ZX-81 były następujące:
- Ośmiobitowy procesor Z80A firmy Zilog. W owym czasie był to jeden z najlepszych mikroprocesorów 8-bitowych. O jego jakości świadczy fakt, iż do dzisiaj jest produkowany i stosowany chętnie jako mikrokontroler sterujący różnymi urządzeniami elektronicznymi. Jeśli nie wierzycie, to zaglądnijcie na stronę firmową. Mikroprocesor Z80A zastosowany w komputerze ZX-81 taktowano zegarem o częstotliwości 3,2MHz, a zajmował się on wykonywaniem programu użytkownika oraz wyświetlaniem obrazu na ekranie telewizora.
- Pamięć ROM o pojemności 8KB. W pamięci tej mieścił się cały system operacyjny ZX-81 oraz interpreter języka BASIC (dla tych, którzy tego nie wiedzą, informuję, iż nazwa ta pochodzi od pierwszych liter angielskiego określenia Beginner's All-purpose Symbolic Instruction Code, co tłumaczymy na język polski jako Symboliczny Kod Instrukcji Ogólnego Przeznaczenia dla Początkujących). Zwróćcie uwagę na ciekawy fakt - tylko 8KB, a ile zmieszczono tam funkcji. Co na to powie Bill Gates i jego nowy system Windows XP?
- Pamięć RAM o pojemności 1KB. W pamięci tej mieścił się ekran, zmienne systemowe oraz program w języku BASIC, który pisał użytkownik. Oczywiście 1KB nie pozwalał zbyt wiele poszaleć, ale można było napisać sensowne i działające programy. Zamożniejsi uzytkownicy komputera ZX-81 mogli go wyposażyć w różne moduły zwiększające pamięć do 16KB, 32KB i 64KB lub moduł grafiki Hi-Res (High Resolution - wysoka rozdzielczość, czyli w latach 80-tych 256 x 192 punkty, co pozwala już rysować np. wykresy funkcji)
- Ekran tekstowy 24 wiersze po 32 znaki w każdym. Znaki monochromatyczne w kolorze czarnym i białe tło.
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 tej można było znaleźć dosłownie wszystko - kurs obsługi komputera oraz programowania w języku BASIC, opis budowy komputera, zmiennych systemowych i ich funkcji, itd. Jeśli język angielski nie stanowi dla ciebie problemu, to kliknij na widocznej obok okładce, a zobaczysz zawartość tej historycznej pozycji.
Do czego zmierzam? Otóż ZX-81 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.
Po ZX-81 poznałem dogłębnie następny produkt Sir Clive'a Sinclaira - słynny ZX-Spectrum. Komputer ten był następcą ZX-81 i 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 ZX-81. Co za komfort, nie sądzicie? Dlatego właśnie polubiłem ten komputer i, podobnie jak w przypadku ZX-81, 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 ZX-81). 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:
- Mikroprocesor Z80A firmy Zilog taktowany zegarem 3,5MHz.
- Pamięć ROM o pojemności 16KB. Zawierała system operacyjny oraz bardzo rozbudowany interpreter języka BASIC. Jako ciekawostkę można podać, iż BASIC Spectrum posiadał nawet instrukcje odczytujące znaki z ekranu graficznego - namiastka systemów OCR?
- Pamięć RAM o pojemności 16KB lub 48KB. W pamięci tej mieściły się zmienne systemowe, ekran oraz program użytkownika.
- Ekran tekstowo graficzny o rozdzielczości 192 linie po 256 punktów graficznych w każdej. Punkty mogły przyjmować do 16 kolorów (z pewnymi ograniczeniami, których nie wymienię, aby nie zanudzać czytelnika).
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 ZX-81, 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.
Dużym atutem komputera był kolorowy obraz. 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 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 pracy). 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. W domach królowały maszyny 8-bitowe.
ATARI 800XLNa początku lat 90-tych firma Pewex sprowadziła do Polski komputery ATARI 800 XL. Był to sprzęt zupełnie innej klasy od ZX-Spectrum. Przede wszystkim ATARI 800 XL wyposażono w inny mikroprocesor, który nosił oznaczenie 6502. 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ą!). 8080 opracowano w czasach, gdy jeszcze nie znano dokładnie zasad budowy dobrych mikroprocesorów. Z mikroprocesorem 6502 było inaczej. Układ opracowano, gdy na rynku od lat były obecne mikroprocesory firmy Intel. Opracowanie to wykonano od podstaw. Wynikowy procesor nie zawierał więc 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 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 (a więc 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.
|
Atari 800 XL współpracował ze stacją dysków 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 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. Parametry komputera Atari 800XL są następujące:
- Mikroprocesor 6502 taktowany zegarem 1,79MHz.
- Pamięć ROM o pojemności 16KB - system operacyjny + 8KB - interpreter języka Atari BASIC. Ciekawostką było to, iż ROM komputera Atari mógł być odłączony od przestrzeni adresowej mikroprocesora i zastąpiony pamięcią RAM - mechanizm ten nazywa się przełączaniem banków pamięci i umożliwia mikroprocesorowi dostęp do większej ilości pamięci niż może fizycznie zaadresować. Wykorzystano to intensywnie w następnych modelach ATARI 130 XE (128 KB RAM) oraz ATARI 260 XP (256 KB RAM). Sam rozbudowałem w późniejszym okresie swój ATARI 800 XL do 256KB RAM oraz zmodyfikowałem ATARI DOS, aby wykorzystywał dodatkową pamięć na tzw. RAM dysk. Nie muszę chyba wyjaśniać, jak wzrosły możliwości i komfort pracy takiego sprzętu.
- Pamięć RAM o pojemności 64KB - część obszaru pamięci RAM była normalnie niedostępna, znajdowała się tam pamięć ROM z systemem operacyjnym.
- Komputer Atari posiadał specjalny koprocesor graficzny (o nazwie ANTIC), który samodzielnie zajmował się tworzeniem obrazu na ekranie monitora (tak, komputer współpracował zarówno z telewizorem jak i z monitorem pozwalając uzyskać bardzo wyraźny obraz). Koprocesor ten wykonywał współbieżnie z głównym mikroprocesorem swój własny program. Dlatego jakość obrazu była nieporównywalnie lepsza od jakości obrazu na komputerze ZX-Spectrum. Atari mógł tworzyć obraz w 256 różnych kolorach - to prawie IBM! Dodatkowo koprocesor graficzny zapewniał sprzętowe, płynne przesuwanie treści ekranu oraz tzw. sprite'y, czyli małe obiekty nałożone na ekran podstawowy.
- Generacją dźwięku zajmował się również specjalizowany układ o nazwie POKEY. Zawierał on 4 kanały dźwiękowe, w których oprócz czystych tonów, można było uzyskiwać różne dodatkowe efekty dźwiękowe. Z możliwości tych intensywnie korzystali programiści gier, przez co ich produkty były bardzo dynamiczne o dużej grywalności. Do dzisiaj lubię włączyć sobie różne stare gry na symulatorze Atari (np. Behind Jaggi Lines).
|
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 6502. 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 ZX-81, 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:
- 16-to bitowy mikroprocesor Motorola 68000 taktowany zegarem 7,14MHz (skąd takie dziwne częstotliwości jak 1,79MHz w Atari, czy 7,14MHz w Amidze? Odpowiedź jest prosta - otóż chodziło o zsynchronizowanie pracy procesora z obrazem telewizyjnym, dzięki czemu nie powstawały na nim zakłócenia fazowe i interferencje). Układ ten posiadał liniową przestrzeń adresową o rozmiarze 16MB. Dla porównania mikroprocesor Intela 80286, który był stosowany w modelach IBM AT i IBM PS/2 w tym samym czasie, posiadał przestrzeń adresową również 16MB, ale podzieloną na segmenty o wielkości 64KB. Jednocześnie 80286 mógł pracować tylko w obrębie danego segmentu (dokładnie czterech segmentów - programu, danych, stosu i dodatkowego), co bardzo utrudniało obsługę dużych struktur danych - większych od 64KB. Nawet do dzisiaj język Borland Turbo Pascal dla systemu DOS nosi cechy tych ograniczeń - dane globalne nie mogą przekroczyć dopuszczalnej wielkości segmentu. W przypadku mikroprocesora Motorola 68k problem ten w ogóle nie występował - programista mógł mieć do dyspozycji tyle ciągłej pamięci, ile jej było w systemie, bez żadnego dzielenia na mniejsze kawałki. Wewnętrznie mikroprocesor ten nosił pewne cechy systemu 32-bitowego (wszystkie rejestry miały długość 32 bitów). Coś takiego pojawiło się dopiero z nadejściem mikroprocesora Intel 80386, który i tak był gorszy od 68k! Przy tej samej częstotliwości zegara mikroprocesor 68k jest dwukrotnie wydajniejszy od 80386.
- Pamięć ROM o rozmiarze 256KB zawierała kompletny system operacyjny (system ten nosi nazwę Kickstart, a graficzny interfejs użytkownika - Workbench). Komputer Amiga nie musiał odczytywać systemu z dysku, więc praktycznie gotowy był do pracy zaraz po włączeniu - na pewno trwało to krócej niż start dzisiejszego Windows XP.
- Pamięć RAM o rozmiarze 512KB z możliwością rozszerzenia do 1MB lub 8MB (ja miałem rozszerzenie tylko do 1MB z uwagi na wysoki koszt pamięci RAM w latach 90-tych).
- Tworzeniem obrazu i dźwięku zajmowały się w Amidze specjalizowane układy o nazwach Fat Agnus, Denise oraz Paula. To właśnie dzięki nim Amiga odniosła tak duży sukces. Rozdzielczość mogła osiągać 640 x 400 punktów. Maksymalna ilość kolorów to 4096. Cztery cyfrowe kanały muzyczne zdolne do odtwarzania dowolnych dźwięków.
- Amiga standardowo wyposażona była w stację dyskietek 3,5 calowych o pojemności 880KB. Jeśli pieniądze nie stanowiły dla użytkownika problemu, to mógł on zainstalować w swoim komputerze dysk twardy - system operacyjny Amigi bez problemu działał zarówno z dyskietkami, jak i z dyskiem twardym. Do komputera można było również podłączyć stację CD-ROM, co nie stanowiło standardu w świecie IBM w tym czasie.
|
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 ZX-81, 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:
- 16-to bitowy mikroprocesor Intel 80286 taktowany zegarem 16MHz (i tak pracował wolniej od Amigi, szczególnie w trybie graficznym). Procesor ten posiadał zewnętrzną magistralę adresową o długości 24 bitów, co umożliwiało mu adresowanie 16MB pamięci RAM. Jednak nie można tego było robić w sposób liniowy, a skorzystanie z tej cechy procesora wymagało instalowania specjalnego sterownika. I jak to się ma do Amigi?
- Pamięć ROM BIOS o wielkości 64KB. W każdym komputerze IBM występuje pamięć z procedurami startowymi i podstawowymi funkcjami obsługi wejścia/wyjścia, zwana BIOS - Basic Input Output Subsystem. Dzięki tym procedurom komputer IBM może rozpocząć pracę i załadować właściwy system operacyjny z dysku. Procedury zawarte w BIOS umożliwiają również kontakt z różnymi urządzeniami zewnętrznymi, takimi jak klawiatura, drukarka, stacje dysków elastycznych i twardych.
- Pamięć RAM o wielkości 1MB. W praktyce oznaczało to około 640KB pamięci RAM dla programów, gdyż część obszaru adresowego zajmowała pamięć ROM oraz ekran. Niewiele, ale oprogramowanie dostępne w roku 1992 nie było tak pamięciożerne jak dzisiejsze aplikacje Windows, które zaczynają czuć się w miarę dobrze dopiero przy pamięci RAM o wielkości 256MB i więcej. Pamiętam, że nawet w takiej konfiguracji udało mi się uruchomić system operacyjny Windows 3.1, ale praca była męką. Amiga z pamięcią 1MB pracowała zupełnie sprawnie.
- Jako pamięć masową mój pierwszy IBM miał dwie stacje dyskietek 3,5calowych o pojemności 1,44MB. Z dyskietek tych uruchamiałem system DOS oraz oprogramowanie. Dysk twardy (160MB) zainstalowałem sobie dużo później ze względu na wysoką cenę takiej przyjemności.
- Komputer posiadał popularną na początku lat 90-tych kartę grafiki o nazwie Hercules. Umożliwiała ona bardzo ostre wyświetlanie tekstu oraz grafiki o rozdzielczości 348 linii po 720 punktów. Monitor amber był dużo mniej męczący od współczesnych monitorów kolorowych - tworzył bardzo stabilny i ostry obraz w kolorze zwiędłych liści, na który można było patrzeć godzinami bez zmęczenia wzroku.
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.2000 r.