Ready/Run

Takie sobie archiwum listingów ze starych magazynów komputerowych

Listingi w bazie
Dodaj listing
  • 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.
     

    Autor listingu: Gajewski,B. Radziszewski

    Listing nadesłał: Faust

    Język programu: CBM Basic

    Stan listingu:

    4
    Listing gotowy - uruchamia się na emulatorze lub realnej maszynie zgodny z listingiem zamieszczonym w periodyku
  • 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
     

    Autor listingu: Marek Renner

    Listing nadesłał: Amarok

    Język programu: Basic

    Stan listingu:

    4
    Listing gotowy - uruchamia się na emulatorze lub realnej maszynie zgodny z listingiem zamieszczonym w periodyku
  • 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
     

    Autor listingu: Jakub Cebula

    Listing nadesłał: Amarok

    Język programu: Basic

    Stan listingu:

    4
    Listing gotowy - uruchamia się na emulatorze lub realnej maszynie zgodny z listingiem zamieszczonym w periodyku
  • 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
     

    Autor listingu: Wojciech Wylon

    Listing nadesłał: Amarok

    Język programu: Basic

    Stan listingu:

    4
    Listing gotowy - uruchamia się na emulatorze lub realnej maszynie zgodny z listingiem zamieszczonym w periodyku
  • 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

     

    Autor listingu: Andrzej Holanowski

    Listing nadesłał: Amarok

    Język programu: Basic

    Stan listingu:

    4
    Listing gotowy - uruchamia się na emulatorze lub realnej maszynie zgodny z listingiem zamieszczonym w periodyku
  • 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
     

    Autor listingu: Wojciech Zientara

    Listing nadesłał: Amarok

    Język programu: Basic

    Stan listingu:

    4
    Listing gotowy - uruchamia się na emulatorze lub realnej maszynie zgodny z listingiem zamieszczonym w periodyku
  • 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.
     

    Autor listingu: Marcin Przasnyski

    Listing nadesłał: Faust

    Język programu: Basic

    Stan listingu:

    4
    Listing gotowy - uruchamia się na emulatorze lub realnej maszynie zgodny z listingiem zamieszczonym w periodyku
  • 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.

    Autor listingu: Hubert Sobczak

    Listing nadesłał: Faust

    Język programu: Basic

    Stan listingu:

    4
    Listing gotowy - uruchamia się na emulatorze lub realnej maszynie zgodny z listingiem zamieszczonym w periodyku
Dodaj listing
Powrót do spisu

Dodaj plik z listingiem *

    Jeżeli posiadasz plik wykonywalny i źródłowy spakuj je w jedno archiwum. Wielkość pliku nie może przekroczyć 2mb. Wszystkie pozostałe pola są niewymagane, jednak ułatwiłoby dużo, gdybyś podał przynajmniej orientacyjnie skąd jest listing, a jeżeli jest Twojego autorstwa pozostaw namiar.

    Nazwa programu:

    Nazwa programu lub nazwa artykułu, z którego pochodzi.

    Stan listingu

    Jak oceniasz stan przesłanego listingu, jeśli jego działanie wymaga dodatkowego wyjaśnienia dodaj go w opisie.

    Opis programu:

    Opis działania programu. Zauważone problemy w funkcjonowaniu. Dodatkowe informacje.

    Autor listingu

    Autor artykułu/listingu zamieszczanego pliku. W razie wielu autorów odzielaj ich przecinkami

    Platforma

    Mikrokomputer, na który pochodzi listing. Jeśli danej platformy nie ma w spisie wprowadź jej nazwę w pole poniżej.

    Język listingu

    Język listingu, np. TurboBasic, BasicXL, MSBasic itp.

    Źródło

    Jeśli program jest Twojego autorstwa pozostaw puste.

    Twój nick

    Twój nick, ewentualnie dane osoby, która program wklepała, w razie wielu autorów odzielaj ich przecinkami.

    Email

    Do celów edycyjnych, informacyjnych i kontaktowych - bez podawania go jawnie.