Ready.Run Taka sobie baza listingów ze starych magazynów komputerowych Sat, 27 Apr 2024 11:47:19 +0200 Zend_Feed_Writer 1.12.13 (http://framework.zend.com) http://www.t2e.pl/ [email protected] (Faust) Faust [Commodore C64] [Bajtek 3/1988] Pętla Interpretera Artykuł z serii "POZNAJEMY WARSAW BASIC" cz. II

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.

Dalsza rozbudowa naszego interpretera będzie zatem polegała na zmianie adresów w komórkach pamięci od $c43f do $c474 na takie, pod którymi będą się kryły procedury wykonujące zaplanowaną przez nas działalność i uzupełnianiu programu 2 o treść tych procedur.
 

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]]> Wed, 06 Mar 2024 01:42:49 +0100 http://www.t2e.pl/pl/readyrun/lista/ ReadyRunID214 [email protected] (Faust) Faust [Atari XE/XL] [Bajtek 3/1988] Nie Tylko Dla Graczy Przedstawiony program składa się z sześciu niezależnych części ze względów praktycznych połączonych razem. Może on być pomocny użytkownikom ATARI 800 XL (65 XE), którzy zajmują się programowaniem w kodzie maszynowym, dostosowywaniem innych programów do swoich potrzeb, „rozgryzaniem” gier itp.

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

Jak zaladować (najprostsza metoda)

ALTIRRA: 

  • Włączyć SYSTEM->INTERNAL BASIC (Basic Without OPTION Key)
  • Cold Reset (Powinien wejść do Basica)
  • LOAD "D:NIETYLKO.BAS"
  • RUN
 

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]]> Wed, 06 Mar 2024 01:34:07 +0100 http://www.t2e.pl/pl/readyrun/lista/ ReadyRunID213 [email protected] (Faust) Faust [Atari XE/XL] [Bajtek 3/1988] Obsługa klawisza RESET RESET jest przyciskiem zerującym procesor, co nie oznacza jednak, że nie można jego obsługi programować z poziomu kodu maszynowego.

 
Procedura taka, w odróżnieniu od procedury wywoływanej rozkazem USR, nie może zawierać rozkazu PLA, a podobnie jak procedura USR, powinna się kończyć rozkazem RTS. Po napisaniu programu maszynowego i umieszczeniu go w pamięci trzeba zmienić zawartość komórek 12 (młodszy bajt) i 13 (starszy bajt adresu procedury) oraz wpisać do komórki 9 wartość zezwalającą na wykonanie procedury (POKE 9,1). Radziłbym jednak procedurę taką wypróbować instrukcją USR, gdyż błąd w niej spowoduje zawieszenie się komputera i utratę danych.
Przykładem wykorzystania tych informacji jest poniższy program, który powoduje, że naciśnięcie klawisza RESET nie przerywa działania programu, a jest jednoznaczne z rozkazem RUN.
Litery przed numerem linii to sumy kontrolne Edytora BASICa, nie należą one do programu i nie należy je wpisywać.
Program ten należy zapisać na taśmie rozkazem LIST "C", co umożliwi dołączenie tej procedury do innych programów rozkazem ENTER "C":

 

Jak zaladować (najprostsza metoda)

ALTIRRA: 

  • Włączyć SYSTEM->INTERNAL BASIC (Basic Without OPTION Key)
  • Cold Reset (Powinien wejść do Basica)
  • LOAD "D:RESET.BAS"
  • RUN
 

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]]> Wed, 06 Mar 2024 01:33:41 +0100 http://www.t2e.pl/pl/readyrun/lista/ ReadyRunID212 [email protected] (Faust) Faust [Atari XE/XL] [Bajtek 3/1988] Grafika w DLI Atari posiada bardzo duże możliwości graficzne. Niestety z poziomu BASIC-a ilość kolorów dostępna jednocześnie na ekranie wynosi w najlepszym przypadku 16.

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:

  1. Program obsługi przerwań DLI jest wywoływany zawsze po zakończeniu rysowania przez ANTIC linii na ekranie i np. przy włączonym przerwaniu w pierwszej linii zmiana koloru nastąpi w drugiej.
  2. Zmiana koloru w jednej linii powoduje zmianę koloru także w następnych, w których nie ma uaktywnionych przerwań
  3. Przed wywołaniem drugiego programu w języku wewnętrznym program ANTIC-a powinien być już zmieniony.
  4. Chcąc wyłączyć przerwania trzeba albo zmienić tryb graficzny, albo wpisać instrukcję POKE 54286,127, albo nacisnąć RESET.

Czwarty wydruk jest krótkim programikiem demonstrującym możliwości, jakie daje zastosowanie opisywanych przerwań DLI.

 

 

Jak zaladować (najprostsza metoda)

ALTIRRA: 

  • Włączyć SYSTEM->INTERNAL BASIC (Basic Without OPTION Key)
  • Cold Reset (Powinien wejść do Basica)
  • LOAD "D:DLI1.BAS" lub LOAD "D:DLI2.BAS" (do 4)
  • RUN
 

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]]> Wed, 06 Mar 2024 01:23:36 +0100 http://www.t2e.pl/pl/readyrun/lista/ ReadyRunID211 [email protected] (Faust) Faust [Atari XE/XL] [Bajtek 3/1988] Przesuwanie kursora Program, który chciałbym zaproponować powstał w wyniku wykorzystania wiadomości zawartych w cyklu pt. „Nie bój się przerwań”.

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

Jak zaladować (najprostsza metoda)

ALTIRRA: 

  • Włączyć SYSTEM->INTERNAL BASIC (Basic Without OPTION Key)
  • Cold Reset (Powinien wejść do Basica)
  • LOAD "D:KURSOR.BAS"
  • RUN

 

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]]> Wed, 06 Mar 2024 01:13:00 +0100 http://www.t2e.pl/pl/readyrun/lista/ ReadyRunID210 [email protected] (Faust) Faust [Atari XE/XL] [Bajtek 3/1988] XIO Demo Dołączona do komputera instrukcja Atari Basic wspomina o instrukcji XIO zaledwie tyle, że jest używana przy operacjach dyskowych i w grafice. Z tak lakonicznej informacji trudno cokolwiek zrozumieć, przybliżę więc Czytelnikom znaczenie tej ciekawej i pożytecznej instrukcji.

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.

Jak zaladować (najprostsza metoda)

ALTIRRA: 

  • Włączyć SYSTEM->INTERNAL BASIC (Basic Without OPTION Key)
  • Cold Reset (Powinien wejść do Basica)
  • LOAD "D:XIO.BAS"
  • RUN
 

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]]> Wed, 06 Mar 2024 01:22:56 +0100 http://www.t2e.pl/pl/readyrun/lista/ ReadyRunID209 [email protected] (Faust) Faust [ZX Spectrum] [Bajtek 3/1988] Szukamy Liczb Czyli Sukcesywna Aproksymacja  W instrukcji do Spectrum znalazłem następujący program:

 
10 LET a=INT (RND*100)
20 LET a$ = ~~
30 INPUT (a$); ~Zgadnij liczbe~;b
40 IF a=b THEN PRINT „ Gratuluje! ”:STOP
50 IF a>b THEN LET a$=” Za malo ”
60 IF a<b THEN LET a$=” Za duzo! ”
70 GO TO 30
 
Istnieje niejedna metoda aproksymacji. Rozważmy program:
Jest to doskonała zabawa na prawie cały dzień. Zgadujemy tu liczbę pomyślaną przez komputer. Najefektywniejszą taktyką odgadywania jest dzielenie rozpatrywanego przedziału na pół. Na przykład jeżeli zgadujemy liczbę z przedziału (0,100), podajemy 50. Jeśli jest ona za mała, bierzemy przedział (50,100), podajemy 75 i tak dalej. W zasadzie ósmy strzał powinien być trafiony.
Metoda kolejnych przybliżeń to właśnie aproksymacja. Powinna on być sukcesywna — dawać rezultat jak najszybciej.
Spróbujmy odwrócić sytuację — my pomyślimy liczbę, a komputer będzie ją odgadywał.
 
10 LET x=0:LET y=102
20 LET c=INT((x+y)/2)
30 INPUT „Czy „;(c);” ? „;a$
40 if a$=”>” THEN LET x=c:GO TO 20
50 IF a$=”<” THEN LET y=c:GO TO 20
60 IF a$=”=” THEN STOP
70 GO TO 20
 
W odpowiedzi na pytanie „Czy xx” należy podać jeden ze znaków — „>”, „<” lub „ = „. Rozpatrujemy przedział (0,100).
Istnieje niejedna metoda aproksymacji. Rozważmy program:
 
10 DIM a(8)
15 LET a(1)=1
20 FOR f=2 TO 8:LET a(f)=2^(f-2):NEXT F
30 LET c=a(8)
40 FOR f=7 to 1 STEP -1
50 INPUT ~Czy ~;(c);~ ? ~;a$
60 IF a$<>”<” AND a$<>”>” AND a$<>”=” THEN GOTO 50
70 IF a$=”>” THEN LET c=c+a(f)
80 IF a$=”<” THEN LET c=c-a(f)
90 IF a$=”=” THEN GOTO 110
100 NEXT f
110 PRINT „Liczba=”;c
 
W tablicy a zapisaliśmy sześć kolejnych potęg dwójki. Najwyższa liczba to 64, więc kompuer odgadnie tu liczbę z przedziału (0,127). Jako pierwsza podawana jest liczba 64. Jeżeli pomyślana jest większa, do 64 dodawana jest 32, jeśli mniejsza, to 32 jest odejmowane i tak dalej. Tu maksymalna ilość pytań jest także 8 ze względu na włączenie zera do rozpatrywanego przedziału.
Możemy rozszerzyć tablicę na przykład do 16 pozycji; trzeba wtedy odpowiednio pozmieniać początki i końce pętli, lecz uzyskamy zakres do 131069, a maksymalną ilością pytań będzie najwyższa potęga dwójki, czyli 16.
W zasadzie nie można powiedzieć, która z metod jest najlepsza. W pamięci lepiej używać metody dzielenia przedziałów na pół, maszyna szybciej aproksymuje dwójkowo.
 

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]]> Wed, 06 Mar 2024 00:50:38 +0100 http://www.t2e.pl/pl/readyrun/lista/ ReadyRunID208 [email protected] (Faust) Faust [ZX Spectrum] [Bajtek 3/1988] Bzzz... inaczej Po przeczytaniu opisu gry „Bzzz” w numerze 3/87 „Bajtka” postanowiłem napisać ją w BASIC-u. Program okazał się prosty i o wiele krótszy od wersji w kodzie maszynowym. Mimo to jest on dosyć szybki. W linii 2 po pierwszym słowie „GRACZ” należy wstawić zieloną, a po drugim niebieską kratkę. Zapalenie się czarnego kwadracika informuje o przegranej któregoś z graczy. W liniach 9500 i 9600 musi być czarna spacja graficzna.

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]]> Wed, 06 Mar 2024 00:48:27 +0100 http://www.t2e.pl/pl/readyrun/lista/ ReadyRunID207 [email protected] (Faust) Faust [Atari XE/XL] [Bajtek 2/1988] Migający Kursor Przedstawiony program może być pomocny przy pracy z komputerem, powoduje bowiem migotanie kursora, który staje się przez to bardziej widoczny i łatwiejsze jest redagowanie pisanego tekstu. Oprócz tego po każdym RESET ustawiane są zgodnie z życzeniem użytkownika tak ważne przy długiej pracy z komputerem parametry jak: kolor tła i ramki, jasność tekstu, lewy i prawy margines, a także szybkość wprowadzania znaków z klawiatury. Teraz naciśnięcie (nawet przypadkowe) klawisza RESET nie powoduje irytującej zmiany ustawionych parametrów.
Po uruchomieniu programu mamy migający kursor, tło ciemnozielone, ramkę jasnoniebieską, lewy margines 2, prawy = 37, czas do pierwszego powtórzenia klawisza = 15, szybkość powtarzania = 2. Jeżeli ustawione wartości komuś nie odpowiadają, można je zmienić dwoma sposobami: w samym programie w liniach DATA (trzeba również obliczyć nową sumę kontrolną i wstawić ją do linii 16 zamiast 8208), albo w trybie bezpośrednim za pomocą instrukcji POKE.

A oto lista możliwych zmian:

 

  • POKE 1542,41 — kursor migający  linia 20, liczba 41
  • POKE 1542,9   — kursor normalny
  • POKE 1543,x   — częstotliwość migania linia 20, liczba 8
  • POKE 1572,x   — lewy margineslinia 24, liczby 2 i 37
  • POKE 1576,x   — prawy margines
  • POKE 1580,x   — jasność tekstu
  • POKE 1585,x   — kolor tlalinia 26, liczby 12,192 i 148
  • POKE 1590,x   — kolor ramki
  • POKE 1595,x   — czas do powtórzenialinia 28, liczby 15
  • POKE 1600,x   — szybkość powtarzaniai 2 (po 169)
     

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]]> Sun, 11 Feb 2024 11:55:12 +0100 http://www.t2e.pl/pl/readyrun/lista/ ReadyRunID206 [email protected] (Faust) Faust [Atari XE/XL] [Bajtek 2/1988] Migający Kursor Program napisany w języku maszynowym wykorzystuje przerwanie VBLK. Na uwagę zasługuje fakt, że program działa dalej po naciśnięciu RESET. Jeśli chcemy wyłączyć pulsowanie kursora, to wystarczy POKE 9,0 i RESET. Powrót do migania uzyskamy przez POKE 9,1 i RESET. Program umieszczony jest na szóstej stronie pamięci.
 

Listing pochodzi z repozytorium listingów Basic autorstwa AMAROK

Jak zaladować (najprostsza metoda)

ALTIRRA: 

  • Włączyć SYSTEM->INTERNAL BASIC (Basic Without OPTION Key)
  • Cold Reset (Powinien wejść do Basica)
  • LOAD "D:KURSOR1.BAS"
  • RUN

 

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]]> Sun, 11 Feb 2024 12:00:06 +0100 http://www.t2e.pl/pl/readyrun/lista/ ReadyRunID205 [email protected] (Faust) Faust