Ready/Run

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

Listingi w bazie
Dodaj listing
  • Drago Basic

    Chociaż Commodore 64 ma ogromne możliwości graficzne, to korzystanie z nich jest bardzo skomplikowane, zwłaszcza dla początkujących. Ze względu na duża liczbę instrukcji POKE czy pętli FOR... NEXT programy sa mało przejrzyste i trudne do zrozumienia.

     
    Oprócz tego, niejako dodatkowo, wymagana jest od użytkownika spora wiedza dotycząca organizacji pamięci w tym komputerze, sposobów rezerwowania jej odpowiedniego obszaru dla potrzeb ekranu graficznego czy działania na bitach. Ponieważ punkt o współrzędnych 0,0 znajduje się w lewym górnym rogu ekranu tworzenie np. wykresów funkcji wymaga ponadto dodatkowych obliczeń. Z tych też powodów chciałbym przedstawić Czytelnikom "BAJTKA" rozszerzenie graficzne standardowego interpretera BASIC — DRAGO BASIC.
    Istnieje już sporo rozszerzeń tego typu — GRAPHICS BASIC, SIMONS BASIC, SUPERGRAPHIC itp. Niestety możliwość korzystania z tych programów limituje w dużym stopniu brak ich polskojęzycznych opisów dość rzadko dostępnych nawet na giełdach komputerowych. Innym mankamentem jest zmniejszenie ilości dostępnej dla użytkownika pamięci — np. SIMONS BASIC zabiera jej od 8 do 16 KB, Co nie pozostaje oczywiście bez wpływu na jakość naszych programów.
    DRAGO BASIC nie jest rozszerzeniem w takim znaczeniu, w jakim zwykle się to rozumie. Zamiast bowiem dopisywania nowych instrukcji czy rozkazów wykorzystano tu cztery istniejące i rzadko używane instrukcje — VERIFY, WAIT, LET oraz CONT. Nowe instrukcje graficzne składają się z takiej samej ilości liter i nazywają się TRYBEK, GUMA, BAR i RYPU. Instrukcje te są "umieszczone" w tych samych miejscach pamięci ROM co stare, z tym, że zmieniono odpowiednio adresy procedur instrukcje te realizujących. Procedury te zostały umieszczone w dodatkowych 4 KB pamięci od adresu 49152 ($C000) dzięki czemu mamy do dyspozycji całe 38 KB pamięci RAM. Zaletą DRAGO BASIC jest przeniesienie punktu o współrzędnych 0,0 w lewy DOLNY róg ekranu czyli tak jak na osi współrzędnych. Program ten pozwala nam na tworzenie grafiki w standardowym trybie graficznym Commodore — rozdzielczość 320*200 punktów, dwa kolory.
    Podczas wpisywania DRAGO BASIC należy zwrócić baczną uwagę, aby nie pomylić się zwłaszcza podczas wpisywania linii z DATA — liczby zawarte w tych liniach to właśnie nasze nowe procedury. Ponieważ po wpisaniu kodu maszynowego program samoczynnie się kasuje, ważne jest również, aby przed jego uruchomieniem zapisać go najpierw na taśmie czy dyskietce. Jeżeli program zostanie wpisany poprawnie, po uruchomieniu pojawi się na ekranie plansza tytułowa oraz usłyszymy melodię — program jest gotowy do użytku.
    Nowe instrukcje mają następującą postać:
    TRYBEK (parametr)
    Instrukcja ta służy do zmiany ekranu graficznego na tekstowy i odwrotnie. TRYBEK 1 pozwala nam na przejście do trybu pracy graficznego, TRYBEK 0 z kolei umożliwia powrót do trybu tekstowego. Gdy parametr nie będzie równy ani 1 ani 0, komputer wyświetli komunikat ILLEGAL QUANTITY ERROR.
    GUMA
    Jest to odpowiednik PRINT CHRS(147) w trybie tekstowym —
    GUMA pozwala nam skasować (bezpowrotnie) całą zawartość ekranu graficznego. 
    BAR kolor kreski, kolor tła 
    Za pomocą BAR możliwe jest przypisanie wybranych kolorów dla kreski (punktu) oraz tła ekranu graficznego. Numery kolorów są zgodne z numerami podanymi w instrukcji obsługi komputera (np. 0 = czarny, 1 = biały itd.). 
    RYPU X,Y
    RYPU umożliwia nam wykreślenie punktu na ekranie graficznym. Parametr X może przybierać wartości w zakresie 0-319, parametr Y w zakresie 0-199. Należy pamiętać, że punkt o współrzędnych 0,0 znajduje się w DOLNYM lewym rogu ekranu. Powrót do normalnego trybu pracy komputera możemy uzyskać za pomocą kombinacji klawiszy STOP i RESTORE wciśniętych jednocześnie. Powrót do programu jest możliwy za pomocą POKE 1,54. Symbol "(CLR)" w programie oznacza czyszczenie ekranu.
    A oto przykładowy program pozwalający nam na wykreślenie paraboli:
     
    10 TRYBEK 1: GUMA : BAR 1,0
    20 FOR X = 0 TO 240: Y = .01*(X-120) ^2+20 30 RYPU X,Y: NEXT 
    40 FOR X = 0 TO 240: RYPU X,20: NEXT
    50 FOR Y = 0TO 199: RYPU 120.Y: NEXT
    60 GET A$: IF A$="" THEN 60 70 TRYBEK 0: END

    Autor listingu: Jan Jasiński

    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
  • CPC Dump

     Wizja nadchodzącego, jak zwykle pechowego trzynastego odcinka cyklu sprawiła, że w autorze obudziło się sumienie i postanowił nie męczyć już dłużej czytelników widokiem monotonnych tabelek, wypełniających cenna przestrzeń Klanu Amstrad-Schneider. Jednakże sumienie nie zadowoliło się samym postanowieniem i zażądało pokuty, w ramach której zobligowało autora do odpowiedzi na dwa pytania: „po co to wszystko było drukowane?” i „co z tego ma Czytelnik?”. Kończąc cykl, skruszony autor odpowiada...

     
    Dokładna znajomość systemu operacyjnego mikrokomputera pozwala nie tylko na oszacowanie jego możliwości, ale bardziej zaawansowanym użytkownikom umożliwia przystosowanie sprzętu do konkretnych i indywidualnych wymogów m.in. poprzez modyfikację lub rozbudowę procedur systemowych. Jednakże działalność taka jest możliwa tylko wtedy, gdy dysponuje się listą procedur i opisem ich działania... a także potrafi się programować w języku maszynowym.
    Zamiarem autora nie było prowadzenie kursu programowania lecz dostarczenie niezbędnej dokumentacji. Wprawdzie niektóre procedury mogą być wywoływane bezpośrednio z poziomu BASIC-a i znacznie upraszczają pisanie programów (np. CALL & BBBA jest odpowiednikiem ciągu rozkazów: PAPER 0:PEN 1:ORIGIN 0,0: WINDOW #0,0, 639,0,399 lub CALL &BB18 zastąpi ciąg A$=””:WHILE A$=” „:A$=INKEY$:WEND) lecz większość procedur może być uaktywniana dopiero po ustaleniu pewnych stanów wejściowych w wymaganych dla danej procedury rejestrach. Taka sytuacja wymusza wprawdzie na programiście znajomość sposobu działania procedur systemu, ale jednocześnie pozwala na wprowadzanie pożądanych zmian.
    Zacznijmy od najprostszych przykładów:
    Procedura Screen Mode Set (ustalenie trybu pracy ekranu monitora) &BC0E w momencie uruchomienia odczytuje informację z rejestru A (akumulatora), mówiącą o wybranym trybie pracy. Pisząc program w języku maszynowym trzeba przed wywołaniem procedury wpisać do akumulatora 0,1 lub 2. Dla trybu MODE 2 wygląda to następująco: kod hex
     
    kod hexa mnemonik
    3E02 LD A,2 Wprowadź 2 do rej. A
    CD0EBC CALL BC0E wywołaj procedurę Screen Mode Set
    C9 RET powrót do programu
     
    Procedura drukowania znaku na ekranie &BB5A wymaga podania w rejestrze A kodu znaku, ale jednak wcześniej trzeba również określić tryb pracy ekranu i pozycję na której ma być ten znak drukowany, czyli podać parametry wejściowe wymagane w procedurach odpowiednio & BC0E i & BB75 (patrz odcinek 7 i 4 cyklu). Wygląda to tak:
     
    3E02 LD A,2 wprowadź 2 do akumulatora
    CD0EBC CALL BC0EH wywołaj procedurę SMS
    260A LD H,10 wprowadź numer kolumny (10)
    2E10 LD L,16 wprowadź numer wiersza (16)
    CD75BB CALL BB75H wywołaj procedurę &BB75 (pozycja)
    3E42 LD A,66 wprowadź kod litery B do rej. A
    CD5ABB CALL BB5AH wyświetl znak B na ekranie
    C9 RET wróć do programu głównego
     
    Modyfikacje procedur wymagają oczywiście bardziej skomplikowanych zabiegów, jednak ze względu na charakter cyklu i szczupłość miejsca podam jedynie mechanizm przeprowadzania modyfikacji. Załóżmy, że nie wystarcza nam 7-bitowy sprzęg w CPC, ponieważ chcemy wykorzystywać pełne możliwości przyłączanej do niego drukarki. Jednocześnie wiemy, iż drukarka ma możliwość ustawienia 8-go bitu po odebraniu określonego znaku lub sekwencji znaków (w przypadku DMP 2000 jest to ESC „>” i skasowania 8-go bitu po odebraniu innej sekwencji (ESC „=”). Mamy również świadomość, że procedura wywoływana przez & BD2B ograniczona jest właśnie 7-bitowym sprzęgiem. Rozwiązanie problemu polega na napisaniu programu, który najpierw sprawdzi, czy wysyłany do drukarki znak ma ustawiony ósmy bit. Jeśli znak ma ósmy bit = 0 to powinien być od razu przesłany do drukarki. W przeciwnym przypadku najpierw powinien być przesłany ESC „>”, następnie znak i ESC „ = „. Tak napisany program trzeba ulokować w pamięci RAM poza obszarem dostępnym dla BASICa (MEMORY HIMEM-długość programu) dołączając wcześniej do niego skopiowane z adresów & BD2B, &BD2C i &BD2D instrukcje skoku do precedury wydruku znaku w pamięci ROM. Teraz wystarczy wpisać pod adres &BD2B kod C3 (skok pod dwubajtowy adres), pod &BD2C młodszy bajt a pod &BD2D starszy bajt adresu początku naszego programu i po uruchomieniu drukować aż do chr$(225). Czytelników oczekujących gotowego rozwiązania informuję, że programy takie były już publikowane w naszej prasie (o ile dobrze pamiętam pionierem był pan Wojciech Wojtanowski z programem opublikowanym w Przeglądzie Technicznym).
    Namawiając do dalszej samodzielnej pracy podaję dwa krótkie programy umożliwiające odczyt na ekranie monitora zawartości pamięci ROM (dolnej) w postaci kodów ASCI i heksadecymalnym. Niewielkie zmiany programu pozwolą również na odczyt zawartości pamięci ROM górnej.W tym celu należy: 
     
    w linii   10 — wpisać ...ROM górny... &C000 do &FFFF 
    w linii   40 — wpisać ... górnej...
    w linii 110 — zamiast cd,06,bd wpisać cd,00,bd i zamiast 00,00,11 wpisać 00,c0,11
    w linii 140 — zamiast (i-6000) wpisać i+6000).
     
    Zachęcam do modyfikacji programów w celu uzyskania możliwości odczytu ograniczonej przestrzeni adresowej (np. zajmowanej tylko przez jedną procedurę) i organizacji wydruku na drukarce. Finis coronat opus!

    Autor listingu: Wojciech Ziółek

    Listing nadesłał: Faust

    Język programu: Locomotive Basic

    Stan listingu:

    2
    Listing skorygowany - zawiera błędy, uruchamia się na emulatorze lub realnej maszynie, jednak z organiczoną funkcjonalnością
  • Catalog

    Z pewnością często mieliście ochotę zrobić porządek na swoich kasetach z programami i równie często rezygnowaliście z tego mając w perspektywie pracowite spisywanie z ekranu danych uzyskanych przez komendę CAT. Jak dobrze byłoby zwalić te robotę na komputer. Mógłby on wtedy sam przejrzeć kasetę, sprawdzić, czy jakieś zbiory nie powtarzają się, wydrukować spis na drukarce. Niestety, CAT wysyła wyniki tylko na ekran i odzyskanie ich stamtąd wymaga wiele wysiłku. Komendy tej nie można również przerwać programowo a jedynie klawiszem ESC.

     
    Równie często ambitniejsi użytkownicy Amstradów i Schneiderów usiłują uzyskać dane o długości programu, miejscu jego ładowania, czy adresie autostartu. Dane te są niezbędne na przykład do przenoszenia programów maszynowych z kasety na dyskietkę. I tutaj komenda CAT nie zdaje się na nic.
    Zamieszczony obok listing programu w BASIC-u umożliwia dodanie do systemu nowej komendy RSX o nazwie CATALOG, która rozwiązuje nasze problemy.
    Po uruchomieniu programu, jeżeli nie pojawi się na ekranie żaden komunikat o błędzie w linii DATA (spowodowanym błędnym przepisaniem) w obszar pamięci od adresu &A400 zostanie załadowany i zainicjowany program maszynowy komendy CATALOG. Program w BASIC-u można teraz skasować (przez NEW).
    Wywołanie komendy ma następującą postać:
    I CATALOG, @a$, @a1%, @a2%, @a3%, @4%, @a5%, @a6%, @a7% gdzie zmienne a$, a1%, a2%... a7% muszą mieć uprzednio nadane wartości (w przeciwnym przypadku pojawi się komunikat „Improper argument”). Ich nazwy nie muszą być oczywiście takie jak wyżej. Ważne są jednak typy: pierwsza musi być łańcuchowa — pozostałe całkowite. Symbol „@” oznacza, że do komendy przekazywany jest adres zmiennej, a nie jej wartość. Wartości nadane zmiennym całkowitym przed wywołaniem są obojętne. Natomiast a$ powinien być przypisany łańcuch zawierający dowolne znaki, lecz o długości co najmniej 16. Komenda CATALOG uruchamia silnik magnetofonu i wczytuje nagłówek najbliższego bloku (trzeba więc pamiętać o wciśnięciu klawisza PLAY przed wywołaniem). Dane o bloku kopiowane są do parametrów w następujący sposób: 
     
    a$    — zawiera nazwę zbioru, do którego należy blok: jeżeli wartość a$ przed wywołaniem była łańcuchem krótszym niż długość nazwy, to nadmiarowe znaki zostaną obcięte; jeżeli łańcuch był dłuższy niż nazwa, to pozostałe miejsca zostaną zapełnione spacjami a1% — zawiera numer bloku 
    a2% — zawiera typ zbioru: 0 — BASIC, 1 — BASIC chroniony (SAVE „nazwa”, P), 2 — program w języku maszynowym, 22 — zbiór ASCII
    a3% — adres ładowania bloku; adres ładowania pierwszego bloku w zbiorze jest zarazem adresem ładowania całego zbioru (dla ASCII = 0, dla Basica = 368)
    a4% — długość bloku; dla wszystkich bloków z wyjątkiem ostatniego prawie zawsze 2048 = 2 KB 
    a5% — długość całego zbioru, do którego należy blok 
    a6% — adres autostartu; od tego adresu rozpocznie się wykonywanie programu maszynowego załadowanego komendą RUN „nazwa” 
    a7% — znaczniki bloku: a7% zawiera wartość całkowitą dwubąjtową: starszy bajt różny od zera oznacza pierwszy blok zbioru, młodszy bajt różny od zera — ostatni blok; wartość tę najlepiej obserwować jako HEX$ (a7%,4) dwie pierwsze cyfry to starszy bajt, dwie pozostałe — młodszy (cyfry hex) 
     

    Autor listingu: Sergiusz Wolicki

    Listing nadesłał: Faust

    Język programu: Locomotive Basic

    Stan listingu:

    2
    Listing skorygowany - zawiera błędy, uruchamia się na emulatorze lub realnej maszynie, jednak z organiczoną funkcjonalnością
  • 9888

    Liczba ta jest nazwą, a jednocześnie oznaczeniem początku pewnego użytecznego programu narzędziowego dla ZX Spectrum.

     
    Jedną z wad ZX Spectrum jest niezbyt wygodna edycja tekstu programu. Napisany przeze mnie program stanowi próbę ułatwienia tej operacji.
    Program należy wpisać, przetestować i nagrać na kasetę. W razie potrzeby dołączamy "9888" do pisanego programu przy pomocy instrukcji MERGE. Trzeba jednak pamiętać, że program główny nie może zawierać linii o numerach wyższych od 9888.
    Po wykonaniu 
    GO TO 9888 
    ukazuje się krótkie menu funkcji programu — jest on gotowy do użytku. Oto jego możliwości:
    1 — POLICZ P,0
    Komputer oblicza liczbę linii zawartych pomiędzy numerami P i O włącznie.
    2 — PRZENUMERUJ P, O, N, K
    Przenumerowanie fragmentu programu zawartego między liniami P i O. Pierwsza linia fragmentu otrzymuje nowy numer N, zaś numeracja odbywa się z krokiem K. Nie są zmieniane parametry odwołań GO TO i GO SUB.
    3 — PRZESUŃ P, O, N 
    Fragment programu pomiędzy liniami P i O otrzymuje numery zwiększone o N (N może być ujemne).
    4 — ZNAJDŹ X, P, O 
    Wyszukanie wszystkich fragmentów tekstu X w liniach programu pomiędzy P i O.
    5 — ZAMIEŃ X = Y, P, O
    Zamiana wszystkich występujących pomiędzy liniami P i O fragmentów tekstu X na tekst Y. Zarówno X, jak i Y mogą mieć do 10 znaków długości — pozostałe znaki są ignorowane.
    6 — STOP 
    Powrót do BASIC-a.
     

    Autor listingu: Grzegorz Waligórski

    Listing nadesłał: Faust

    Język programu: Basic

    Stan listingu:

    3
    Listing skorygowany - prawdopodobnie zawiera błędy, uruchamia się na emulatorze lub realnej maszynie, wymaga jednak poprawek kosmetycznych
  • Pożyczone Litery

    Wiele gier zadziwia nas swoim wymyślnym liternictwem. Czcionka pogrubiona, pochyła, „komputerowa”, gotyk lub cyrylica, umieszczone na ekranie sprawiają, że strona graficzna programu zyskuje bardzo wiele w oczach użytkownika.

     
    Jak zapewne wiadomo większości posiadaczy ZX SPECTRUM, cały zestaw znaków (96 liter) tego komputera można zastąpić nowym zestawem, zaprojektowanym przez użytkownika. Litery jakie widzimy na ekranie zaraz po włączeniu komputera, są pobierane z generatora znaków, który znajduje się pod adresem 15616 i zajmuje 768 bajtów (96 * 8 bajtów). Adres pierwszej komórki generatora obliczany jest przez komputer na podstawie zawartości zmiennej systemowej CHARS (komórki o adresach 23606 i 23607), wg wzoru:
    ADRES = (PEEK 23607)*256 + (PEEK 23606) + 256
    Zmieniając więc zawartość zmiennej, zmieniamy zarazem adres, spod którego pobierane są kształty znaków. Oczywiście nie wystarczy zmienić samego adresu, należy jeszcze pod nim umieścić dane o kształcie nowego zestawu liter. O tym, ze projektowanie liter to długa i żmudna praca, nie trzeba chyba nikogo przekonywać i właśnie dlatego proponuję ułatwienie tego zadania przez wyciągnięcie interesującego kroju pisma z gotowych programów, aby móc go wykorzystać do własnych celów. Sposób jest prosty. Najpierw jednak należy wpisać i zapamiętać na taśmie zamieszczony obok program CZCIONKA

    Autor listingu: Michał Szuniewicz

    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.