Bajtek 1/1988
[Reduks] Bajtek 1/1988

Kolejny sukces wydawniczy już za nami, w sam raz na początek nowego roku - AD2024. Nic nie zapowiadało, żeby numer 1/1988 był jakimś wybitnie ciężkim numerem do zreduksowania, kusił obszerny wpis zajmujący parę kolumn na końcu numeru, tajemniczny ...

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

Klan Spectrum

Michał Szuniewicz

Jak Malować? Cz. 2

Idealnym rozwiązaniem byłoby stworzenie algorytmu zamalowywania dowolnego obszaru zamkniętego. Poniżej przedstawiam jeden z nich. Pomysł jest ogólnie znany (Sinclair User) i mimo to, że procedura działa wolno, jest ona bardzo krótka i mało skomplikowana.

Idealnym rozwiązaniem byłoby stworzenie algorytmu zamalowywania dowolnego obszaru zamkniętego. Poniżej przedstawiam jeden z nich. Pomysł jest ogólnie znany (Sinclair User) i mimo to, że procedura działa wolno, jest ona bardzo krótka i mało skomplikowana.

Każdemu punktowi ekranu przyporządkujmy jego współrzędne w układzie tak, jak na ekranie. Wypełnianie rozpocznie się od ostatniego postawionego punktu, jego współrzędne odczytane ze zmiennej systemowej COORDS (23 677 i 23 678). Główna pętla programu to linie 120-180. Pod uwagę bierzemy punkt o współrzędnych (x,y) — zapisujemy x jako xp i y jako yp. Teraz patrzymy na punkt powyżej rozpatrywanego i — gdy jest zgaszony — zapalamy go zapamiętując jego współrzędne w tablicy i zwiększamy wskaźnik p określający, ile mamy zapamiętanych punktów. Jeżeli punkt jest zapalony, patrzymy na punkt poniżej (xp, yp) i ewentualnie zapalamy go (podprogram 200). Postępowanie powtarzamy dla punktu z lewej i z prawej strony. Następnie sprawdzamy, czy p jest równe zero. Jeśli tak, to zapełnianie zostało zakończone (żaden z podstawionych punktów nie ma zgaszonego sąsiada). Jeśli nie, odczytujemy z tablicy współrzędne ostatnio zapalonego punktu (w tym przypadku jest to punkt położony po prawej punktu (xp, yp)) i jego bierzemy pod uwagę przebiegając linie 150-180. Jeśli natrafimy na punkt, którego wszyscy sąsiedzi są zapaleni, cofamy się w tablicy zmniejszając p i szukając punktu, którego któryś z sąsiadów nie jest zapalony.

W ten sposób zamalujemy każdy obszar zamknięty przez postawienie wewnątrz niego punktu i skok do linii 100. Jedynym ograniczeniem jest rozmiar tablicy. Jeżeli ilość zapamiętanych i nie usuniętych punktów przekroczy 2000, program zatrzyma się komunikatem Subscript wrong. Na ekranie mamy 256x176=45 056 punktów i zapamiętanie wszystkich byłoby niemożliwe, i chociaż program „cofając się” (zmniejszając p) oszczędnie gospodaruje pamięcią, to jednak nie zamaluje całego ekranu nawet startując ze środka.

Dla przykładu: obrazkiem do zamalowania będzie misio Narysujemy go, wpisując:

15 LET su=0

10 FOR a=l TO 10

20 READ x,y,r

30 CIRCLE x,y,r: LET su = su + x + y+r

40 NEXTa: IF su<>2350 THEN PRINT „Zle dane”: STOP

50 DATA 128, 118, 30. 167, 140. 15, 89, 140, 15, 115, 125, 5, 141, 125, 5, 128, 58, 30, 95, 77, 8, 161

77, 8, 161, 39, 8, 95, 39, 8

55 LETsu = 0

60 FOR a-l TO 10 65

READ x,y

70 PLOT OVER I: x,y: LET su=su+x+y

80 NEXT a: IF su<>2056 THEN PRINT „Zle dane”: STOP

90 DATA 103, 134, 154, 134, 128, 88, 102, 72, 155, 72, 156, 72, 102, 43, 102. 43. 154, 43, .155. 43

95 PLOT 128, 86

przed programem zamalowywania (listing 1). Misio składa się z kółek (linie 5—50) z przejściami między nimi (linie 55—90). Start zapełniania podaje linia 95.

Widać, że zamalowywanie trwa bardzo długo. Istotne przyspieszenie uzyskamy pisząc ten sam program w asemblerze (listing 2). Schemat działania jest taki sam, jak poprzednio. Zamiast tablicy użyjemy stosu systemowego. Zamiast znacznika długości (poprzednio p) na początku położymy na stos liczbę 255. Odczytanie jej ze stosu będzie równoznaczne z zakończeniem malowania (poprzednio p=0).

Procedura odwołuje się do ROM-u Spectrum wykorzystując zawarte tam procedury PLOT (8933) i POINT (8910), oraz FP-TO-A (11 733). Współrzędne punktów przechowywane są odpowiednio: x w C, y w B, xp w L i yp w H. Procedura PLOT zapala punkt o współrzędnych zawartych w C i B; procedura POINT sprawdza obecność punktu we wsp. C i B sygnalizuje to bitem w akumulatorze; procedura FP-TO-A zamienia ten bit na bajt (I — zapalony, 0 — zgaszony).

Ponieważ skok do podprocedury (CALL) także wykorzystuje stos, musiałem adres powrotu z procedury przechowywać w parze DE.

Jeżeli obszar nie jest zamknięty (zapełniamy cały ekran lub obszar przylega do brzegu ekranu), granice obszaru wyznaczają brzegowe linie ekranu (tak jakby było PLOT 0,0: DRAW 255,0: DRAWO, 175: DRAW —255,0: DRAW 0, — 175). Procedurę maszynową umieszczamy w pamięci program z listingu 3

Teraz zamalowanie misia to igraszka, lecz pamiętaj o postawieniu punktu wewnątrz niego.

 

 

Michał Szuniewicz

Połączone artykuły
„Jak Malować? Cz. 2”
Michał Szuniewicz - Bajtek 1/1988

Idealnym rozwiązaniem byłoby stworzenie algorytmu zamalowywania dowolnego obszaru zamkniętego. Poniżej przedstawiam jeden z nich. Pomysł jest ogólnie znany (Sinclair User) i mimo to, że procedura działa wolno, jest ona bardzo krótka i mało skomplikowana.

Czytaj także w dziale Klan Spectrum
„Od środka”
Tomasz Surmacz, Robert Dudzik - Bajtek 4/1988

Ostatnio poznaliśmy sposób, w jaki przechowywana jest w pamięci każda linia BASIC-a. oraz co oznaczają takie znaki kontrolne, jak CHR$ 14 i CHR$ 8. W tym odcinku poznamy pozostałe znaki kontrolne. Trzy z nich dotyczą zmiany miejsca wydruku, sześć — zmiany atrybutów..

„Jak Malować? Cz. 2”
Michał Szuniewicz - Bajtek 1/1988

Idealnym rozwiązaniem byłoby stworzenie algorytmu zamalowywania dowolnego obszaru zamkniętego. Poniżej przedstawiam jeden z nich. Pomysł jest ogólnie znany (Sinclair User) i mimo to, że procedura działa wolno, jest ona bardzo krótka i mało skomplikowana.

„TOS - Timex Operating System”
Janusz Jarmoch - Bajtek 1/1988

ZX Spectrum zaprojektowane zostało z myślą o współpracy z magnetofonem lub microdrivem. Nie oznacza to, że zrezygnowano całkowicie z prac nad stacją dysków. Pamięci dyskowe do ZX Spectrum powstały w wielu firmach i charakteryzują sie różnorodnością zastosowanych w nich rozwiązań technicznych. Jednym z najciekawszych urządzeń tego typu jest 3-calowa stacja dysków Timex, umożliwiająca jednoczesne podłączenie do Spectrum 4 napędów dyskowych_sterowanych wspólnym kontrolerem. Użytkownik zyskuje w ten sposób szybki i niezawodny dostęp do ponad 500 kB dodatkowej pamięci.

„Od Środka Cz. 1”
Tomasz Surmacz, Robert Dudzik - Bajtek 1/1988

Mało kto lubi programy, które przy pierwszym lepszym błędzie lub wciśnięciu klawisza BREAK czyszczą cała pamięć komputera, nie pozostawiając po sobie żadnego śladu, albo „zawieszają się”, zmuszając do wciśnięcia RESET. Sytuacja przestaje być zabawna. adv mamy jakiś dobry program użytkowy, który chcemy przystosować do nietypowego sprzętu (lub grę do rzadko spotykanego joysticka) lub gdy chcemy zmienić w programie wszystkie teksty angielskie na polskie, a program nie daje się zatrzymać.

„Programy graficzne”
(mp) - Bajtek 5/1988

Spośród programów graficznych na Spectrum godne uwagi są jedynie THE ARTIST i ART STUDIO.

„Edytory tesktowe”
Marcin Przasnyski - Bajtek 5/1988

Niemało jest edytorów tekstu napisanych specjalnie na Spectrum.

„Mapa”
Michał Szuniewicz{(lat 16)} - Bajtek 3-4/1986

Program generuje na podstawie liczb przypadkowych obraz przypominający mapę lub zdjęcie satelitarne.

„ZX Spectrum — prezentacja”
Grzegorz Grzybowski - Bajtek 7/1986

W każdym mikrokomputerze możemy wyodrębnić kilka bloków funkcjonalnych, które połączone w odpowiedni sposób tworzą tzw. system czyli to. z czym ma do czynienia użytkownik. Zwykle podstawowe bloki funkcjonalne zamknięte sa we wspólnej obudowie wraz z klawiaturą. Jeśli zajrzymy do środka, zobaczymy kilkanaście lub kilkadziesiąt układów scalonych różnej wiel-kości. zmontowanych na wspólnej płytce o skomplikowanym obwodzie drukowanym, umieszczonym na obu jej stronach, oraz niewielką ilość elementów pomocniczych. Większe mikro-komputery posiadają kilka płytek, małe – tylko jedna. Płytka naszego Spectrum zawiera 25 układów scalonych.

„Zaczęło się od Spectrum”
Piotr Bernatek - Bajtek 12/1988

Nie jest to bajka ani reklama. Poniższy zarys historii pracowni informatycznej w II L.O. im. Stefana Batorego w Warszawie dedykuję młodym entuzjastom informatyki w polskich szkołach oraz ich nauczycielom — tym, którym już się udało i tym, którzy mają to jeszcze przed sobą.  

„Rozkrój ”
Józef Ludwiński - Bajtek 1/1989

Oto bardzo prosty przykład na to, jak praktycznie wykorzystać możliwości mikrokomputerów, na przykładzie popularnego Spectrum.

„Spectrum i nowe możliwości”
Marcin Przasnyski - Bajtek 2/1989

Czarne, płaskie pudełko z niebieskimi gumkami na wierzchu, zwane Spectrumną, Speccy lub po prostu Trumną, posiada z tyłu podłużne złącze krawędziowe. Dzięki niewielkim pudełkom wciskanym w to złącze poczciwa Trumna nabiera obrotów. Jej możliwości stają się porównywalne z możliwościami Commodore i Atari, których właściciele zwykle wymawiają nazwę „Spectrum” z lekceważeniem, a nawet pogardą.