W poprzednim odcinku wyjaśniliśmy rolę pętli interpretera w wykonywaniu programu.
Czytelnicy Ba|tka, którzy pragną uczestniczyć wraz z nami w zabawie w rozbudowę interpretera i poznawać tajemnice Warsaw BASIC-a powinni teraz „wpalcować” program 2. Po bezbłędnym uruchomieniu tego programu można spróbować użycia nowych instrukcji (od £@, £a do £z). Po wykonaniu jakiejkolwiek z tych instrukcji, nasz interpreter będzie sygnalizować błąd SYNTAX ERROR. Co się stało? Czyżby ten rozbudowany interpreter nie rozumiał nowych słów? Interpreter nowe słowa rozumie, tylko każde z nich odsyła do tej samej procedury znajdującej się pod adresem $af08, pod którym interpreter ma zapisaną procedurę wyświetlającą napis SYNTAX ERROR i przerywającą wykonanie programu.
Status: Listing gotowy - uruchamia się na emulatorze lub realnej maszynie zgodny z listingiem zamieszczonym w periodyku
Platforma: Commodore C64
Żródło: Bajtek 3/1988
Język: CBM Basic]]>
Po załadowaniu programu z taśmy (CLOAD; czas 1 minuta 50 sekund) i uruchomieniu (RUN) zgłasza się opcja ładowania innego programu z taśmy (krótka przerwa między blokadami). Długość programu można wstępnie ocenić wg. wzoru:
B = (T-20)/20
gdzie:
T— całkowity czas nagrania wczytywanego programu w sekundach,
B — szukana długość programu w KB.
Jest to o tyle istotne, że zbyt długi program wczyta się do pamięci ekranu a dalsza część nie zostanie w ogóle zapisana, gdyż za obrazem jest ROM.
Po zakończeniu wgrywania programu wyświetla się liczba wczytanych bajtów. Program prezentuje swoje możliwości po wciśnięciu klawisza ESC: naciśnięcie spacji jest rozumiane jako rezygnacja z „instrukcji obsługi”. Do opisu podprogramów można wrócić naciskając HELP podczas realizacji jednego z nich.
Następne opcje to:
po G. 100 „rozszyfrowywanie” zajmowania pamięci w komputerze przez program dyskowy wczytywany z kasety,
po G. 400 wyświetlenie zawartości pamięci, po G. 500 zapis do pamięci,
po G. 700 zapis na taśmę wybranego obszaru pamięci, po G. 800 przemieszczanie wybranego obszaru pamięci.
Programu można użyć jako kopiera.
Nie ma tu żadnych ukrytych tricków i można wprowadzać dowolne zmiany. Program zajmie trochę mniej pamięci, jeżeli przepisze się go łącząc niektóre linie w jedną, używając skrótów oraz pisząc na ekranie bez marginesów (POKE 82,0): można też opuścić wszystkie komentarze.
Wszystkim zainteresowanym życzę cierpliwości przy przepisywaniu i sukcesów w dalszych pracach.
Listing pochodzi z repozytorium listingów Basic autorstwa AMAROK
ALTIRRA:
Status: Listing gotowy - uruchamia się na emulatorze lub realnej maszynie zgodny z listingiem zamieszczonym w periodyku
Platforma: Atari XE/XL
Żródło: Bajtek 3/1988
Język: Basic]]>
ALTIRRA:
Status: Listing gotowy - uruchamia się na emulatorze lub realnej maszynie zgodny z listingiem zamieszczonym w periodyku
Platforma: Atari XE/XL
Żródło: Bajtek 3/1988
Język: Basic]]>
Przedstawiony w artykule program wykorzystujący przerwania niemaskowalne DLI generowane przez ANTIC umożliwia zmianę zawartości rejestrów koloru w poszczególnych liniach. Daje to maksymalną ilość 256 kolorów na ekranie.
Przerwania DLI są wywoływane przy czytaniu programu ANTIC-a. Bliższe informacje dotyczące programowania tego układu zawarte są w „Komputerze” 8/86. Przerwania są wywoływane przy dowolnym rozkazie ANTIC-a, który ma ustawiony najstarszy, siódmy bit. Adres programu obsługującego przerwania wskazywany jest przez wektor DLIVKT (512, 513).
Wróćmy do programu. Niżej przestawione są cztery wydruki. Po przepisaniu pierwszego i uruchomieniu otrzymujemy program, który przedstawia wydruk drugi. Są to dwa programy w języku wewnętrznym. Pierwszy modyfikuje i lokuje program przerwań w odpowiednim miejscu oraz ustawia wektor. Jest on wywoływany przez:
A = USR (ADR (OB$) + 52, ADR (OB$), ADPR, ILO, ADDA)
gdzie:
ADPR — adres, od którego ma być umieszczony program obsługi przerwań
DLI — program o długości 52 bajtów;
LO — ilość uaktywnionych przerwań;
ADDA — obszar początku danych dla programu.
(...)
Drugi program w języku wewnętrznym jest wywoływany przez:
POKE ADDA,0:A = USR(ADR(OB$) + 156, ADR(OB$) + 171)
i uaktywnia przerwania DLI w momencie przerwania synchronizacji pionowej.
Wydruk trzeci to procedura zmieniająca program ANTIC-a i uruchamiająca przerwania. Działa w dowolnej grafice. Przed uruchomieniem jej w pamięci musi się znajdować program, który przedstawia drugi wydruk. Jedynki w ciągu C1$ reprezentują linie na ekranie, w których mają wystąpić przerwania, zera — linie, w których nie będzie przerwań. Przed uruchomieniem procedury trzeba umieścić w pamięci, poczynając od ADDA + 1 kolory poszczególnych linii. W przeciwnym razie większość ekranu po uruchomieniu procedury zmieni kolor na czarny.
UWAGI:
Czwarty wydruk jest krótkim programikiem demonstrującym możliwości, jakie daje zastosowanie opisywanych przerwań DLI.
ALTIRRA:
Status: Listing gotowy - uruchamia się na emulatorze lub realnej maszynie zgodny z listingiem zamieszczonym w periodyku
Platforma: Atari XE/XL
Żródło: Bajtek 3/1988
Język: Basic]]>
Służy on do przesuwania kursora przy pomocy joysticka, a także umożliwia usuwanie z ekranu tekstu, który znajduje się po prawej stronie kursora. Naciśnięcie przycisku FIRE spełnia funkcję CTRL-DELETE. Procedura w języku maszynowym wykonywana jest co trzy przerwania VBLK. Sprawdza ona położenie joysticka i stosownie do niego umieszcza w komórce 764 wartość kodu wewnętrznego oznaczającego wciśnięcie CTRL i odpowiedniego klawisza przesuwania kursora. Gdy nie poruszamy joystickiem wszystkie funkcje klawiatury działają normalnie.
Procedura ta może mieć zastosowanie np. podczas pisania, sprawdzania i poprawiania listingów programów w języku Basic, ponieważ pozwala na szybkie umieszczenie kursora w dowolnym miejscu ekranu i wpisanie tam odpowiednich znaków. Po dokonaniu korekty naciśnięcie RETURN umieszcza w pamięci poprawioną linię.
Wciśnięcie RESET przerywa działanie procedury. Ponowne jej uruchomienie następuje przez podanie instrukcji X = USR(1619).
Listing pochodzi z repozytorium listingów Basic autorstwa AMAROK
ALTIRRA:
Status: Listing gotowy - uruchamia się na emulatorze lub realnej maszynie zgodny z listingiem zamieszczonym w periodyku
Platforma: Atari XE/XL
Żródło: Bajtek 3/1988
Język: Basic]]>
Dwie operacje XIO mogą być wykonywane wyłącznie na ekranie: rysowanie linii (XIO 17 = DRAWTO) i wypełnianie obszaru (XIO 18). Pierwszej z nich odpowiada instrukcja Basica DRAWTO i nie będzie ona nas interesować. Druga, nie mająca odpowiednika w Basicu, udostępnia dodatkową interesującą funkcję graficzną. Ponieważ jest to najczęściej stosowana instrukcja XIO, to jej format podam osobno:
XIO 18,#6,0,0,”S:”
Użycie jej nie jest proste, więc zademonstrowane zostanie na przykładzie. Najpierw należy narysować linię ograniczającą z prawej strony wypełniany obszar i umieścić kursor instrukcją PLOT lub DRAWTO w miejscu, z którego rozpoczniemy wypełnianie (linie 90 i 100). Następnie do rejestru FiLDAT (765) wpisujemy numer koloru, który ma zostać użyty do wypełniania i umieszczamy kursor instrukcją POSITION w miejscu zakończenia wypełniania (linia 110). Dopiero teraz można wywołać instrukcję XIO 18 (linia 120). W liniach 20—80 ustalany jest kolor i losowo wybierane jest miejsce rysowania. Cała procedura jest powtarzana po naciśnięciu klawisza START.
Należy pamiętać, że XIO 18 wypełnia każdą linię obrazu, aż do napotkania punktu o kolorze różnym od koloru tła.
Nie można więc wypełniać obszarów wypełnionych już wcześniej.
ALTIRRA:
Status: Listing gotowy - uruchamia się na emulatorze lub realnej maszynie zgodny z listingiem zamieszczonym w periodyku
Platforma: Atari XE/XL
Żródło: Bajtek 3/1988
Język: Basic]]>
Status: Listing gotowy - uruchamia się na emulatorze lub realnej maszynie zgodny z listingiem zamieszczonym w periodyku
Platforma: ZX Spectrum
Żródło: Bajtek 3/1988
Język: Basic]]>
Status: Listing gotowy - uruchamia się na emulatorze lub realnej maszynie zgodny z listingiem zamieszczonym w periodyku
Platforma: ZX Spectrum
Żródło: Bajtek 3/1988
Język: Basic]]>
A oto lista możliwych zmian:
Status: Listing gotowy - uruchamia się na emulatorze lub realnej maszynie zgodny z listingiem zamieszczonym w periodyku
Platforma: Atari XE/XL
Żródło: Bajtek 2/1988
Język: Basic]]>
Listing pochodzi z repozytorium listingów Basic autorstwa AMAROK
ALTIRRA:
Status: Listing gotowy - uruchamia się na emulatorze lub realnej maszynie zgodny z listingiem zamieszczonym w periodyku
Platforma: Atari XE/XL
Żródło: Bajtek 2/1988
Język: Basic]]>