• Nie Znaleziono Wyników

Graficzny Forth dla mikrokomputera ComPAN-8

N/A
N/A
Protected

Academic year: 2022

Share "Graficzny Forth dla mikrokomputera ComPAN-8"

Copied!
16
0
0

Pełen tekst

(1)

ZESZYTY NAUKOWE POLITECHNIKI ŚLISKIEJ

Seria! INFORMATYKA z. 15 Nr kol. 1044

_________1991

Małgorzata BACH Zbigniew SZKARADNIK

GRAFICZNY FORTH DLA MIKROKOMPUTERA COMPAN-8

Streszczenie. Artykuł prezentuje implementację systemu graficz­

nego dla mikrokomputera ComPAN-8. System ten stanowi integralną czę­

ść translatora języka Forth. Szczególną uwagę poświęcono problemom dołączania driverów oraz realizacji algorytmów wypełniania.

Produkowany w Polsce mikrokomputer ComPAN-8 posiada sporo zalet. W pier­

wszym rzędzie wymienić tu można dużą, jak na komputer tej klasy, liczącą 64 kB pamięć obrazu oraz ekran o rozdzielczości 640x288. Do tego dochodzi szereg trybów graficznych, semigraficznych i znakowych, z których użytko­

wnik może korzystać oraz sprzętowe wspomaganie takich operacji, jak pozio­

my czy pionowy scrolling. Niestety istniejące oprogramowanie stosunkowo słabo te możliwości wykorzystuje. Opracowana została wprawdzie biblioteka procedur graficznych £3] , które mogą być wywoływane z programów napisa­

nych przy wykorzystaniu kompilatora języka Fortran FSO (a po napisaniu od­

powiednich programów łączących prawdopodobnie także z programów napisa­

nych w innych językach, których kompilatory generują pliki wynikowe w for­

macie REL firmy Microsoft jak FL/M, Pescal/MT+ czy Supersof C), ale na tym w zasadzie się kończy.

W szczególności brak interpretera któregoś z języków programowania wy­

posażonego w instrukcje graficzne. Istnienie tego typu narzędzie według rozeznania autorów było bardzo celowe. Postanowiliśmy więc w ramach prac dyplomowych prowadzonych w Instytucie Informatyki Politechniki Śląskiej rozszerzyć interpreter jednego z języków programowania o grafikę jj] . Zdecydowaliśmy się na wykorzystanie w tym celu iuterpretera języka Forth F83 i rozwinięcie go w kierunku aplikacji graficznych. Pod uwagę brane by­

ły także interpretery innych języków programowania (Mas i e , Xlisp, EPro- log). Basic został odrzucony z powodu braku bezpośredniej możliwości two­

rzenia w nim podprogramów rekurencyjnych.W przypadku Prologu nie dysponowa­

liśmy wersją źródłową interpretera. Z kolei Xlisp oznacza się bardzo nie­

wielką szybkością realizacji napisanych w nim programów, a poza tym sam zajmuje sporo miejsca w pamięci operacyjnej. Prostota, z jaką w przypadku Forthu korzystać można z wszystkich zasobów komputera, przesądziła osta­

tecznie o jego wyborze, aczkolwiek zamierzamy w Instytucie Informatyki wy-

(2)

90 M. Bach. 1 Z. Szkaradnik

konać również graficzną werBję języka Xlisp. Dodatkowo za wykorzyataniem języka Forth przemawiało doświadczenie jednego z autorów zdobyte przy rea­

lizacji podobnego zadania z wykorzyataniem komputera Mera-60 [2] •

Początkowo wydawało się, że adaptacja wspomnianego pakietu na mikrokom­

puterze ComPAN-8 nie nastręczy wielu trudności i sprowadzi się jedynie do napisania nowych driverôw urządzeń zewnętrznych. Rzeczywistość okazała się jednak inna. Wzorcowy pakiet był zrealizowany przy użyciu translatora FIG-Forth. Translator ów był jednak mocno w stosunku do wersji wzorcowej rozszerzony [V] • Wyposażony był między innymi w system plików ze słowami

(pojęcie słowa odpowiada w przybliżeniu pojęciu procedury) onen fllename, 1 create filename.

ComPAN-8 wyposażony jest wprawdzie w interpreter FIG-Forthu, jednak pozba­

wiony wszelkich rozszerzeń. Dlatego zdecydowaliśmy się na F83, który jest Implementacją nowszego standardu Forth-83 i wyposażony jest między innymi w system plików. Wymagało to zainstalowania tego programu na komputerze ComPAN, co sprowadziło się jedynie do modyfikacji wbudowanego edytora.

Następnie przeniesiony został pakiet graficzny i opracowana zostały nowe drivery. Otrzymany w ten sposób pakiet operacji graficznych działał co prawda poprawnie, ale niesłychanie wolno. Spowodowane to było głównie fak­

tem wolnej realizacji operacji mnożenia i dzielenia (procesor Hery-60 po­

siada rozkazy mnożenia i dzielenia). Przyspieszenie pracy wymagało mody­

fikacji kodu pakietu polegającej głównie na realizacji mnożenia i dzie­

lenia przez stałą za pomocą przesunięć. Z podstawowego zestawu usunięte zostały niektóre prymitywy (łuk, okrąg, elipsa) w zamian za to dodano inne

(jak wypełnianie). W sumie modyfikacje objęły (z wyjątkiem driverôw, kt^

zostały napisane na nowo) około 30% kodu, w tym około 556 to zmiany zwi zane z przejściem na inny standard języka.

Przyjęte założenia

Pakiet graficzny widziany przez użytkownika powinien realizować co naj­

mniej podstawowe funkcje graficzne. Przyjęliśmy, że będą to»

. zainstalowanie i usunięcie drivera określonego urządzenia zewnętrznego) . usunięcie rysunku)

. narysowanie punktu o współrzędnyoh X Y) . testowanie punktu o współrzędnych X Yj . przesunięcie do punktu o współrzędnych X Yj

. narysowanie odcinka lub łamanej o określonych parametrach)

. w y p e ł n i e n i e obszaru zadeklarowanego przez kontur lub listę współrzędnych wierzchołków wielokąta.

Podaną listę można oczywiście uzupełniać. Można dodawać kolory, zmie­

niać wzorce linii i obszarów (wypełnień). Można dodawać nowe prymitywy, jaki łuki, okręgi, prostokąty czytekstj. Można też nie tylko rysować, ale

(3)

Graficzny Forth dla . 91

i usuwać czy też modyfikować już narysowane punkty. Nie hyło to jednak naszym celem. Zauważmy bowiem, że choć dodawanie tych funkcji jest sprawą prostą (uważamy, że każdy użytkownik Forthu będzie w stanie to zrobić), to od razu rodzi pewne problemy. Nie wszystkie urządzenia mają chociażby zdolność tworzenia rysunków w kolorze. Niemożliwe jest również przykładowo usunięcie raz narysowanej linii za pomocą plotters. Podobnych "problemów"

przy dokładniejszej analizie można zresztą wykryć więcej. Dodatkowe trud­

ności sprawiają różne rozdzielczości 1 formaty rysunków oraz (co jest szczególnie dokuczliwe) różne proporcje pixeli. Tymczasem założeniem na­

szym było otrzymanie możliwie identycznych rysunków przy użyciu różnego typu urządzeń wyjściowych. Taka filozofia jest zresztą zgodna z ogólną koncepcją Fortha, zakładającą dostarczenie programiście jedynie podsta­

wowych prostych narzędzi.

Kolejnym założeniem było umożliwienie współpracy pakietu z wieloma róż­

nymi urządzeniami wyjściowymi. Opracowany został w tym celu jeden driver monitora, dwa drivery drukarki (Epson FX) oraz driver pisaka (Sharp CE).

Przyjęty został również bardzo prosty interfejs driver-pakiet graficzny, co zdaniem autorów powinno ułatwić użytkownikowi tworzenie własnych drive- rów. Założyliśmy, że każdy driver powinien realizować następujące funkcje:

. narysowanie punktu o współrzędnych X Yj . testowanie punktu o współrzędnych X Yj . przesunięcie do punktu o współrzędnych X Y;

. usunięcie rysunku.

Pozostałe funkcje graficzne, takie jak: kreślenie linii czy wypełnianie obszaru powinny być już realizowane przez odpowiednie procedury pakietu graficznego.

Należało także określić reakcje pakietu graficznego w sytuacji przekro­

czenia efektywnego zakresu rysunku. Dopuszczona została praca w trybie ob­

cinania, zawijania lub przerwanie rysowania (podobnie jak w języku progra­

mowania logo). Właściwie skonstruowane procedury obcinania i zawijania po­

winny poprawnie pracować również w przypadku zmniejszonego formatu obrazu (okna).

Charakterystyka pakietu

Pakiet graficzny wykorzystuje kartezjański oraz biegunowy układ współ­

rzędnych. Wyposażony jest w słowa rysujące punkty, kreślące odcinki oraz zamalowujące powierzchnię,. Tak zwaną grafikę żółwia realizują słowa kre­

ślące odcinki określonej długości w przód i w tył oraz słowa wykonujące obrót. W przypadku tego typu grafiki dostępne są podstawowe transformacje rysunku, takie jak: przesunięcie, obrót, skalowanie oraz lustrzane odbicie.

(4)

92 M. Bach i Z. Szkaradnik

Kreślenie rysunku może być przerwane przez naciśnięcie dowolnego klawisza na klawiaturze. Dostępne są trzy wymienione poprzednio alternatywne tryby obsługi błędów. Najważniejsze słowa pakietu graficznego zebrane zostały w tabeli 1. Formaty rysunków oraz maksymalne rozdzielczości zdeterminowane są przez parametry urządzeń wyjściowych. Są one następujące:

. dla monitora 640 x 240 (okno graficzne) + 4 wiersze (okno znakowe) lub tylko okno graficzne 640 x 288,

. dla drukarki 480 x 360 oraz 960 x 720, . dla pisaka 960 x 720.

Tabela 1

OLIFON (---- )

Ustawienie trybu obsługi błędów z obcinaniem fragmentów rysunku znaj - dujących się poza obszarem zadeklarowanego obrazu.

FENCEON (--- )

Ustawienie trybu obsługi błędów z przerywaniem rysowania po osiągnięciu krawędzi zadeklarowanego obrazu.

WRAPON (---- )

Ustawienie trybu obsługi błędów z zawijaniem fragmentów rysunku znajdu­

jących się poza obszarem zadeklarowanego obrazu.

CLEAR (----)

Usunięcie rysunku. VI przypadku drukarki polega na wyzerowaniu pliku z ma­

pą bitów.

POINT ( x y --- f)

Testowanie punktu o współrzędnych x y. W przypadku, jeżeli jest on usta­

wiony flaga logiczna f ma wartość true.

PLOT (x y )

Przesunięcie (kursora) do punktu o współrzędnych x y.

DOT (x y )

Wykreślenie punktu o współrzędnych x y.

DRAW (x y )

Wykreślenie odcinka od aktualnego położenia do punktu o współrzędnych x y.

LINE (addr a )

Wykreślenie złożonej z n-odcinków łamanej o wierzchołkach w punktach o współrzędnych umieszczonych w tablicy pod adresem addr.

FILL (x y )

Zamalowanie figury, wewnątrz której znajduje się punkt o współrzędnych x y.

AREA (addr n — -)

Zamalowanie wielokąta o n-1 wierzchołkach, których współrzędne mieszczą się w tablicy pod adresem addr. Y/spółrzędne pierwszego i n-tego wierz­

chołka muszą być identyczne.

(5)

Graficzny Forth dla . 93

'-VIDE ( d )

Ustawienie współczynnika szerokości rysunku na wartość d.

HIGH ( d )

Ustawienie współczynnika wysokości rysunku na wartość d.

LARGE ( d )

Ustawienie współczynnika wielkości rysunku na wartość d.

BREAKOFF (---)

Wyłączenie możliwości przerwania rysowania poprzez naciśnięcie dowolnego klawisza.

Włączenie możliwości przerwania rysowania poprzez naciśnięcie dowolnego klawisza.

MIHROROFF (---- ) Wyłączenie lustrzanego odbicia.

MIRRORON (---- )

Włączenie lustrzanego odbicia. lustrzane odbicie uzyskuje się dla figur zdefiniowanych w grafice żółwia przez zamianę obrotu w lewo na obrót w prawo i odwrotnie.

FORWARD ( 1 --- )

Wykreślenie odcinka o długości 1 w przód.

BACKWARD ( 1 --- )

Wykreślenie odcinka o długości 1 w tył.

LEFT (cc--- )

Obrót o kąt oc w lewo.

RIGHT (cC--- 0

Obrót o kąt cC w prawo.

TURN ( p --- )

Obrót o kąt (ó .

MOVE ( 1 --- )

Przesunięcie o odcinek długości 1 w przód.

POSITION (x y --- )

Ustawienie początku rysowania od współrzędnych x y.

CURSOROFF--- (---)

Wyłączenie kursora graficznego (tylko monitor).

CURSORON--- (--- )

Włączenie kursora graficznego (tylko monitor) HOME--- (--- )

Ustawienie (kursora) na środku obrazu.

FRAME---(--- )

Wykreślenie ramki ograniczającej zadeklarowany obszar rysunku.

MONITOR--- (--- )

Przydzielenie monitora jako urządzenia wyjściowego.

BREAKON ( --- )

(6)

94 M. Bach i Z. Szkaradnik

PRINTER--- (-- )

Przydzielenie drukarki jako urządzenia wyjściowego.

PLOTTER--- (-- )

Przydzielenie plotters jako urządzenia wyjściowego.

PRINT---(-- )

Vfyprowadzenie rysunku na drukarkę po skończeniu rysowania.

X (-- addr)

Zmienna zawierająca aktualną współrzędną X.

Y (-- addr)

Zmienna zawierająca aktualną współrzędną Y.

XMIN (-- addr)

Zmienna zawierająca minimalną możliwą wartość współrzędnej X.

YMIN (-- addr)

Zmienna zawierająca minimalną możliwą wartość współrzędnej Y.

XMA.X (-- addr)

Zmienna zawierająca maksymalną możliwą wartość współrzędnej X.

YMA.X (-- addr)

Zmienna zawierająca maksymalną możliwą wartość współrzędnej Y.

Skalowanie, a więc wydłużanie, rozszerzanie i powiększanie zrealizowane zostało za pomocą mnożenia składowych rysowanego wektora przez odpowiednie współczynniki skali. Współczynniki te mogą być zmieniane dynamicznie przy użyciu Błów h i g h , wide i large. 'Współczynniki skali są liczbami podwójnej długości z kropką dziesiętną. Pod uwagę brane są cztery pierwsze cyfry zna­

czące. Złożenie wydłużenia i obrotu ilustruje fotografia 1.

Fotografia 1

(7)

Graficzny Forth dla ... 95

Istnieje możliwość deklarowania rysunków (a właściwie okien) o zmniej­

szonej rozdzielczości. Odbywa się to poprzez określenie minimalnych i ma­

ksymalnych współrzędnych dla rysunku. Przykładowo sekwencja słów:

monitor

100 xmin ! 200 xmax ! 100 ymin ! 200 ymin ! clipon

spowoduje zadeklarowanie okna o rozdzielczości 100x100, którego dolny lewy róg leży w punkcie o współrzędnych 100 100. Okno zostanie zadeklarowane na monitorze, zaś fragmenty rysunku leżące na zewnątrz okna będą obcinane.

Zastosowane algorytmy

Algorytmy zastosowane do realizacji podstawowych funkcji w większości są albo bardzo proste, albo powszechnie znane jak na przykład zastosowany do kreślenia linii algorytm Bresenhama. Wyjątek stanowią algorytmy wypeł­

niania powierzchni, które dzięki właściwościom języka Forth mogły być efek­

tywnie i elegancko zrealizowane. Z tego względu zostaną one tu przedstawio­

ne.

Zadanie wypełniania można zdefiniować jako:

. zamalowanie obszaru, którego kontur (niekoniecznie regularny) jest dany;

. zamalowanie wnętrza wielokąta (niekoniecznie wypukłego), którego współ­

rzędne wierzchołków są dane.

Omówimy najpierw pierwszy z algorytmów realizowany przez słowo fili (listing 1). Algorytm ten zakłada istnienie w pamięci obrazu zamkniętego konturu obszaru oraz znajomość współrzędnych punktu leżącego w jego wnę­

trzu. Yfepółrzędne tego punktu, zwanego ziarnem, przesyła się na stos.

W kolejnym kroku pobiera się współrzędne ziarna ze stosu, rysuje się w po­

danym miejscu punkt, po czym wykreśla się w lewo i w prawo odcinki łączące dany punkt z konturem. Podczas wykonywania tej czynności wyznacza się współrzędne skrajnych punktów konturu Xleft i Xright. Następnie wywołuje się słowo (scan). które testuje linię leżącą powyżej i linię leżącą poniżej

wykreślonego odcinka ograniczonego przez Xleft i Xright. Testowanie to polega na wyznaczaniu nowych ziaren, których współrzędne zapisywane są na stosie. Opisane czynności powtarza się aż do momentu opróżnienia stosu.

Ilustruje to rysunek 1.

(8)

96 M. Bach i Z. Szkaradnik

Rys. 1. Ilustracja działania słowa FILL Fig. 1. Principles of working of the word FILL

Drugi z algorytmów wypełniania, realizowany przez słowo area (listing 2), wymaga określenia współrzędnych wierzchołków zamalowywanego wielokąta.

Nie wymaga on istnienia mapy bitów obrazu, dlatego tego typu wypełnianie realizują poprzez wbudowane komendy niektóre plottery. Wypełniany kontur powinien byó zamknięty (współrzędne pierwszego i ostatniego wierzchołka muszą byó identyczne). Z kolei kontur jest wykreślany za pomocą słowa "li­

nę". W następnym kroku wyznacza się minimalną wartość współrzędnej Y, prze­

szukując w tym celu współrzędne wierzchołków. Wykonują to słowa miny i maxy. Teraz dla każdej linii Y, należącej do wyznaczonego przedziału, wy­

znacza się współrzędne X punktów przecięó ze wszystkimi odcinkami należą­

cymi do konturu. Można udowodnić, że jeśli kontur jest zamknięty, to liczba jego przecięó z prostą Y « const jest parzysta. Żeby taki kontur zamalo­

wać, należy więc wyznaczone punkty odpowiednio połączyć. Ilustruje to ry­

sunek 2.

Problem w tym przypadku polega na tym, że współrzędne X punktów prze­

cięcia nie są wyznaczane po kolei. Wobec tego przed rozpoczęciem operacji łączenia punktów należy otrzymane współrzędne posortować. Ponieważ z kolei nie wiemy z góry, ile będzie punktów przecięcia, ich współrzędne X zapa­

miętywane są na stosie. Aby algorytm ten ulepszyć, przechowuję kolejno wy­

znaczane współrzędne X wykorzystując stos danych, przy czym za każdym r a ­ zem w momencie dopisywania do stosu nowej liczby stos jest Bortowany. Sor­

towanie stosu wykonuje słowo sort. Aby proces sortowania stosu usprawnić, wykorzystaliśmy stos powrotów. Samo sortowanie zrealizowane jest przez wstawianie. Polega na zdjęciu ze stosu danych wszystkich współrzędnych mniejszych od współrzędnej wstawianej. Te zdejmowane ze stosu współrzędne

są przechowywane czasowo na stosie powrotów. Następnie wpisuje się na stos wstawianą współrzędną i przepisuje ze stosu powrotów na stos wszystkie

(9)

Graficzny Forth dla

97

poprzednio tam um ieszczone w sp ó łrz ę d n e . Po w yznaczeniu i posortow aniu w s z y s tk ic h punktów p r z e c ię ć słow o drawacan łą c z y odcinkam i punkty, k tó ry c h w spółrzędne X przechowywane s ą na s t o s i e , zam alowując w te n sposób w ie lo ­ k ą t .

R y s . 2. I l u s t r a c j a d z ia ła n ia słowa AREA.

F i g . 2. P r i n c ip l e s o f w o rkin g o f th e word AREA

E k s p lo a t a c ja p a k ie tu

W spółpracę z wybranym urządzeniem n a le ż y ro zp o cząć od z a in s ta lo w a n ia je g o d r i v e r a . J e ś l i d r iv e r y z o s t a ły w cz e śn ie j załadow ane, to i n s t a l a c j a u rz ą d z e n ia odbywa s i ę poprzez w p is a n ie jeg o nazwy, np. m o n ito r, p l o t t e r , p r in t e r ( d e f i n i c j e p o szczeg ó ln ych słów z aw iera l i s t i n g 3 ) . Mapa b itó w r y ­ sunku zarówno w przypadku d r u k a r k i, ja k i w przypadku p isa k a ( j e ś l i bę­

d z ie w ykorzystyw any do zamalowywania p o w ie rz c h n i) przechowywana j e s t w p lik u dyskowym. Szybką wymianę danych między tym p lik ie m a p a m ięcią o p era­

c y jn ą zapewnia i s t n i e j ą c y w jęz y k u FORTH mechanizm p a m ięci w i r t u a l n e j . W ie lk o ś ć tego p lik u powinna w yn o sić 90 kB d la d r u k a r k i p r a c u ją c e j w t r y ­ b ie w y s o k ie j r o z d z ie lc z o ś c i o raz d la p isa k a lu b 24 kB d la try b u n is k ie j r o z d z ie lc z o ś c i. P l i k t a k i po w in ien być na początku wyzerowany słowem e l e a r . Aby z w ięk sz yć szybko ść ry so w a n ia w c e lu przechowywania p lik u z mapą bitó w n a j l e p i e j używać RAM-dyBku. W przypadku d r u k a r k i ry su n e k po zakończeniu ryso w a n ia p o w in ien być wyprowadzony na p a p ie r za pomocą słowa p r i n t . Adap­

t a c ja d r iv e r a d la in n e j d r u k a r k i (bez zmiany maksymalnych r o z d z ie lc z o ś c i) wymaga m o d y f ik a c ji t y lk o tego s ło w a .

P rz y k ła d y w y k o rz y s ta n ia

P rzykłado w y program w y k o rz y s tu ją c y o p isa n y p a k ie t g r a f ic z n y p rz e d s ta ­ w iony j e s t na l i s t i n g u 4 . J e s t to słow o k r e ś lą c e r e k u re n c y jn e krzywe S i e r ­

(10)

98 M. Bach i Z. Szkaradnik

p iń s k ie g o .Z a pomocą jednego słowa można wyprowadzać id e n ty c z n e krzywe na dowolne u rz ą d z en ia g r a f ic z n e . I l u s t r u j ą to r y s u n k i 3a i 3b. Prz e d sta w io n e na n ic h krzywe poddane z o s t a ły dodatkowym tra n sfo rm acjo m . In n ą krzyw ą re - k u re n c y jn ą , zwaną krzyw ą smoczą, p rz e d sta w ia ry su n e k 4 ( l i s t i n g 5). Są to o c z y w iś c ie je d y n ie p rz y k ła d y , k tó ry c h można podać z n a cz n ie w ię c e j . Dodat­

kowo ja k o p rz y k ła d zasto so w an ia p a k ie tu z o s t a ł wykonany program do spo­

rz ą d z a n ia rysunków . Za jeg o pomocą wykonany z o s t a ł rysu n ek z f o t o g r a f i i 1.

R y s . 3 a. Krzywe S ie r p iń s k ie g o (d ru k a rk a Epson FX ) F i g . 3 a. C urves o f S ie r p iń s k i (Epson p r i n t e r )

R y s . 3b. Krzywe S ie r p iń s k ie g o (p is a k Sharp CE) F i g . 3b. C urves o f S ie r p iń s k i (S h a rp p l o t t e r )

(11)

Graficzny Forth dla » 99

R y s . 4. F r e k t a l zwany DRAGONEM F i g . 4 . F r a c t a l c a l l e d DRAGON

LITERATURA:

[ 1 ] M. GRUSZKA. Opracowanie p a k ie tu o p e r a c ji ię ra fic z n y c h d la mikrokom­

p u tera ComPAN- (p ra c a dyplom owa), I n s t y t u t In f o r m a t y k i P o li t e c h n i k i Ś l ą s k i e j , G liw ic e , 198S.

[ 2 ] Z. SZKARADNIE, H. B IE S IA D A , PETRYKOW3KI, Opia ję z y k a Porth-60, G liw ic e , 1984.

[ 3]] Dokumentacja użytkowa b i b l i o t e k i proced ur g r a f ic z n y c h PLOT,' Z akład y Urządzeń Komputerowych M era- Elzab , Zabrze, 1986.

W płyn ęło do R e d a k c ji 3 1 .0 8 .1 9 8 8 .

R e c e n z e n t: Dr J e r z y Karczm arczuk

(12)

10 0 M. Bach i Z. Szkaradnik

rPA iH HECKHii FORTH AJIH MHKPOKCMTIbiOTEPA COMPAN- 8 P e 3 » u e

B cTaib e noKaaaaa. hmeuiQwemaiiHH rpa$HtiecKoi4 oHci e MH fljik U HK po Ko u nM oT ep a Com PAN-8. CitQTeua eia KBJiaeTCH HHierpajiBHOft ^racxljd TpaHCJiaTopa K sn xa Forth. OcodeKHoe BsuniaHHe ysejiejio npo Ca e Mo u npjtcoe,nHKeHHH ^paitBOB a laKxe peaJiHsemH« aJiropniuoB aanojiHeHHH.

GRAPHIC FORTH FOR THE ComPAH-8 MICROCOMPUTER

S u m m a r y

T h ia pap er p re s e n ts th e im p le m e n tatio n o f g ra p h ic system f o r th e ComPAN-8 m icro co m p u ter. T h is system i s an i n t e g r a l p a rt o f th e F o rth la n ­ guage t r a n s la t o r ^ The p a r t i c u l a r a t t e n t io n i s d e d ic a te d to problem o f d r i ­ v e r s l i n k i n g and r e a l i z a t i o n o f f i l l i n g a lg o r it h m s .

(13)

L i s t i n g 1,

variable, x left v a riable xr

v a r i a b l e x right v a r i a b l e yr

: right>

1 xr +!

( )

b e g i n

xr © yr © p oint 0= while xr © yr © dot 1 xr +!

r e peat xr © 1- x r i g h t ! ;

: left>

-1 xr +!

( — ) b e g i n

xr © yr © poi nt 0= whi le xr © yr © dot -1 xr +!

rep eat xr © 1+ xle ft ! ;

(scan) ( --- x y . . . )

b e g i n xr © x r i g h t © <= whil e 0 fl ag ! b egin

xr © yr © p oint 0= xr © x r i g h t © <= a n d w h i l e 1 f lag ! 1 xr +! r epeat

fla g © if

xr © yr © point 0= xr © x r i g h t © = a n d if xr © yr © else xr © 1- yr © t h e n t hen xr © b e g i n

xr © yr <2 point xr © x r i g h t © < a nd whi le 1 xr +! repe at

xr © = if 1 xr +! t hen re pe at ;

var iable s t a c k

: fill ( x y — )

sp@ 4 s t a c k ! begin

yr ! xr ! xr © yr © dot

xr © right ) xr ! left) xle ft © xr ! 1 yr +! (scan) xle ft © xr ! -2 yr +! (scan) sp© s t a c k © = until ;

(14)

L i s t i n g 2.

: p o i n t s ( yn xn ... yl xl n --- ) c r e a t e 0 da , , l oop does> ;

: . x ( adr n x In) )

2 * 2 *

+ <2 ;

: .y ' a dr n y [ n] ) 2* 2* 2+ + © ;

: line ( adr n ---- )

s w a p dup d u p 0 .x s w a p 0 .y plot s w a p 1 do

d u p d u p i . x s w a p i . y d r a w l o o p d r o p ;

v a r i a b l e p t s v a r i a b l e vert

: so rt ( x n ... xl xi xn . xi . xl ) x m i n © b e g i n sp© s t a c k © <> while

2 d u p < if s w a p t h e n >r repe at b e g i n d u p x m i n © <> w hile r> repe at d r o p ;

: m a x y (---- m a x y )

y m i n © vert © 0 do pts © i .y m ax loop ;

: m i n y <---- m i n y )

yraax © ve rt © 0 do p t s © i .y m i n loop ;

: d r a w s c a n ( ys --- )

>r b e g i n sp© s t a c k © <> w hile r© plot r© d r a w r e p e a t r> d r o p ;

: a rea ( adr n >

2 d u p line vert ! p t s ! sp© s t a c k ! ma xy 1+ m i n y do

ve rt © 1- 0 do

pts © i .y p t s © i 1+ . y

2 d u p rain j < rot rot 2 d u p m a x j >= rot rot

<> and a n d if j pts © i . y -

pts © i 1+ .x p ts © i .x - pts © i 1+ .y p ts © i .y -

♦ / m o d s w a p d r o p p ts © i .x + so rt then

loop i d r a w s c a n loop ;

(15)

: mo n i t o r

0 x m i n ! 639 0 ymin ! 239 ['3 m t - c l e a r ['] mt- p o i n t ['3 m t-plot [ '3 m t-dot [ 13 (draw) c l i p o n ;

: p r i n t e r

0 x min ! 959 0 y m i n ! 719 [ 13 p r - c l e a r [ ' 3 pr--point ['3 pr - p l o t ['3 pr-d ot ('3 (draw) c l i p o n ;

: p l o t t e r

0 xmin ! 959 0 ymi n ! 719 [ ' 3 pl--clear ['3 .pl-point ['3 p l-plot ['3 pl-d ot T 13 p l - d r a w 10 plerait 27 ple mit c l i p o n ;

L i s t i n g

( — - )

xma x ! yraax ! is c l e a r is poi nt is plot is dot is d r a w

( — ~ ) x max !

y max ! is c l e a r is point is plot is dot is d r a w

( — ) x max !

ymax ! is clear is point is plot is dot is d r a w

a sc ii b plem it

(16)

L i s t i n g 4

( S i e r p i ń s k i c u r v e s )

v a r i a b l e e dge v a r i a b l e level v a r i a b l e d i agonal

: s • ( level )

d u p 0= if d r o p els e

du p 1- r e c u r s i v e s 45 r ight d i a g o n a l © f o r w a r d 45 righ d u p 1- r e c u r s i v e s 90 left edg e © f o r w a r d 90 left d u p 1- r e c u r s i v e s 45 r ight d i a g o n a l © f o r w a r d 45 righ

1- r e c u r s i v e s t h e n ;

: S i e r p i ń s k i ( e dge level ---- ) level .! e dge !

ed ge © 1000 m* 1414 m / m o d s w a p d r o p dia g o n a l !

4 0 do level © s 45 rig ht d i a g o n a l © f o r w a r d 4-5 right l oop ;

L i s t i n g 5 . ( D r a g o n )

v a r i a b l e s t e p 3 s t e p !

: d r a g o n ( s i g n level >

d u p 0= if

2 d r o p s t e p © f o r w a r d el se

o ver 45 * t u r n 1 o v e r 1-

r e c u r s i v e d r a g o n o ver -90 * tu rn -1 ov er 1-

r e c u r s i v e d r a g o n d r o p 45

*

t urn the n :

Cytaty

Powiązane dokumenty

Zatem długość słowa xzv jest postaci 8n gdzie n &lt; N i słowo to składa się z czterech zrównoważonych segmentów długości 2n &lt; 2N.. Czyli początkowy albo końcowy

Jeśli nie masz jeszcze 7 lat, możesz poruszać się po drodze tylko pod opieką osoby, która ma co najmniej 10 lat.. Nie baw się z

wę z potrzeby zamon- towania takiej windy - mówi Marzena Piszko - Bojaryn, pełnomocnik burmistrza ds. osób nie- pełnosprawnych. Czekamy na uruchomienie progra-

O ile jednak określanie ewangelików augsburskich mianem luteranów jest bezdyskusyjne – Luter miał bezpośredni wpływ na kształt konfesji – o tyle nazywanie wiernych

pracownika stadniny, przejechać.. Karta pracy do e-Doświadczenia Młodego Naukowca opracowana przez: KINGdom Magdalena Król. Klasa I Tydzień 24 Scenariusz 1 Film

3. Do pierwszej folii przyłóż folię innego koloru. wiadczenia Młodego Naukowca opracowana przez: KINGdom Magdalena Król. ą ce.. Karta pracy do e-Doświadczenia Młodego

nymi osobami, które prowadzą zajęcia.. Karta pracy do e-Doświadczenia Młodego Naukowca opracowana przez: KINGdom Magdalena Król. Klasa II Tydzień 21

Lehr-Spławiński Tadeusz (Kraków) Leszczyńska Zofia (Kraków) Lewicki Karol (Kraków).. Librowski Stanisław