Tajemnice ATARI

BŁĘDY


    Komputery ATARI serii XL/XE posiadają niezbyt zachęcającą formę diagnostyki błędów. Jeżeli program napisany w Basic-u został niepoprawnie skonstruowany to niewątpliwie interpreter tego języka nas o tym poinformuje poprzez wyświetlenie komunikatu "Error - numer_błędu". Programy pracujące pod kontrolą Dyskowego Systemu Operacyjnego również reagują podobnym komunikatem. Nic nam on jednak nie wyjaśni, nadal będziemy nieświadomi, jak usunąć ten błąd. Można oczywiście napisać własną procedurę obsługi błędów, po jej wystąpieniu wypisać odpowiedni komunikat. Tylko jaki, skoro w instrukcji dołączonej do komputera błąd jest określony kilkoma mało wyjaśniającymi wyrazami? Dotychczas ukazało się kilka zestawień tłumaczących błędy, ale brakowało im kilku rzeczy. Poniżej wydrukowane komunikaty błędów zawierają w miarę szczegółowy opis przyczyn wystąpienia błędu oraz sposób jego usunięcia.

Błędy występujące podczas pracy w Basic-u:

Błąd nr 2

   Komputer posiada zbyt mało pamięci RAM do poprawnego wykonania programu, zdarza się to bardzo często w komputerach 600 XL bez powiększonego rozmiaru pamięci RAM. Błąd może wystąpić również w przypadku zbyt dużej ilości zagnieżdżonych podprogramów wywoływanych instrukcją GOSUB W celu usunięcia tego błędu należy:
  • jeżeli posiada się komputer o rozmiarze pamięci 16KB RAM-u należy niezwłocznie rozszerzyć ją do 64KB
  • jeżeli nie jest możliwe rozszerzenie rozmiaru RAM-u (bo już mamy 64KB) można zredukować obszar pamięci zajmowany przez program w Basic-u poprzez wyrzucenie nieużywanych zmiennych lub też zmniejszyć rozmiary tych zmiennych, zwłaszcza deklarowanych instrukcją DIM. W niezwykle skrajnych przypadkach można przed wgraniem programu do pamięci komputera rozszerzyć obszar pamięci przeznaczony do użytku dla Basic-u poprzez zmniejszenie wartości komórki LOMEM (lokacja 128 i 129) lub zwiększenie zawartości komórki MEMTOP (lokacja 144 i 145). Uwaga ! Jest to bardzo niebezpieczne, może spowodować zawieszenie pracy komputera.
  • jeżeli występuje zbyt dużo zagnieżdżonych podprogramów (GOSUB, w tym podprogramie GOSUB, w tym kolejny GOSUB, itd) należy zamienić instrukcję GOSUB na kawałek programu, który ta instrukcja wywołuje, bądź też zrezygnować z wywoływania tej procedury (podprogramu).

    Błąd nr 3

       Program usiłuje przyporządkować zmiennej wartość ujemną (w chwili, gdy powinna ona być dodatnia) lub wartość numeryczną przekraczającą dopuszczamy zakres. Dla tego typu komputera wartość ta zawiera się w granicach od 1E-99 do 1E+98. Błąd ten może również wystąpić przy użyciu instrukcji STATUS, gdy osiągnięto koniec poddanego danej operacji zbioru. Jeżeli chcemy usunąć ten błąd należy sprawdzić wartości tych zmiennych, które mogą przyjmować niedozwolone wartości. Jeżeli znajdziemy tę zmienną, z powodu której występuje błąd, należy sprawdzić, znaleźć, poprawić i ewentualnie usunąć te obliczenia i operacje, które przyporządkowują tej zmiennej wartość spoza dozwolonego zakresu.

    Błąd nr 4

       W programie zostało zadeklarowanych zbyt dużo zmiennych. Interpreter Basic-u dla tego typu komputera dopuszcza nie więcej, jak 128 deklaracji zmiennych. Aby zlikwidować ten błąd niestety musimy usunąć tyle zmiennych, aby ich liczba nie przekraczała dozwolonej wartości. Jeżeli koniecznie musimy używać więcej zmiennych, to sztucznie je sobie stwarzamy poprzez bezpośredni dostęp do pamięci. Nie możemy nazywać komórek pamięci, bo mamy już zadeklarowanych 128 zmiennych, ale możemy zapamiętać, że zawartość komórki, np. 1536 ma dane znaczenie. Wartość tej komórki pamięci możemy swobodnie zmieniać przy pomocy instrukcji POKE i odczytywać instrukcją PEEK.

    Błąd nr 5

       Utworzony tekst, który jest wpisywany do zmiennej tekstowej jest zbyt długi. Jeśli chcemy poprawić ten błąd musimy zwiększyć wymiar zmiennej tekstowej albo zmniejszyć tekst. Jeżeli tworzony tekst ma być dłuższy niż maksymalna wartość deklaracji zmiennej tekstowej wynoszącej 32767 to należy tekst wpisywać nie do tej zmiennej, ale bezpośrednio do pamięci komputera poprzez instrukcję POKE i odczytywać go instrukcją PEEK. Aby to robić, należy mieć rozeznanie w mapie pamięci komputera.

    Błąd nr 6

       Błąd występuje wyłącznie podczas próby czytania danych zamieszczonych po instrukcji DATA. Jeżeli wszystkie dane zostały przeczytane, a pomimo to ponowimy próbę ich czytania instrukcją READ lub program powtórnie zechce czytać stałe umieszczone po instrukcji DATA bez wcześniejszego użycia instrukcji RESTORE to uaktywni się ten numer błędu. Aby go usunąć, należy dopasować ilość danych do liczby powtórzeń wykonywania instrukcji READ (np. poprzez zmianę zakresu pętli FOR-NEXT), bądź też użyć instrukcji RESTORE przed ponowieniem próby czytania tych samych danych.

    Błąd nr 7

       Dotyczy numeru linii programu. Dozwolonym zakresem, w którym musi zawierać się numer linii jest wartość od 0 do 32767. Jeżeli numer wykracza poza ten zakres, należy zmienić go na właściwy.

    Błąd nr 8

       Program usiłuje przyporządkować zmiennej numerycznej wartość nie-numeryczną, np. jeżeli A(1)=100 to nie można napisać A(1)="A". W celu usunięcia tego błędu należy odnaleźć miejsce błędnego przyporządkowania i ewentualnie poprawić linię, używając instrukcji ASC, np. A=ASC("A") lub w inny sposób.

    Błąd nr 9

       Zadeklarowano powtórnie zmienną tekstową albo użyto niezadeklarowanej tej zmiennej lub tablicy. Błąd występuje również, gdy wymiar deklaracji zmiennej DIM przekracza wartość 32767 dla zmiennych tekstowych lub 5460 dla tablic. Usunięcie błędu polega na zmianie wartości rozmiaru DIM, tak aby nie przekraczała ona powyżej podanych wartości. Jeżeli użyto niezadeklarowanej zmiennej należy ją zadeklarować, jeżeli użyto ją powtórnie w deklaracji, należy zmienić nazwę jednej z nich.

    Błąd nr 10

       Błąd objawia się w przypadku wystąpienia zbyt dużego zagnieżdżenia podprogramów. Postępowanie jak w wypadku wystąpienia błędu numer 2. Błąd ten również wystąpi, gdy wyrażenie do wykonania jest zbyt długie i skomplikowane lub użyto w tym wyrażeniu zbyt wiele nawiasów. Występuje on przede wszystkim w długich operacjach arytmetycznych. W celu wyeliminowania tego błędu należy maksymalnie uprościć wykonywane obliczenia, zredukować ilość nawiasów. Można to zrobić na przykład poprzez zapisanie tego wyrażenia w postaci kilku wyrażeń, poprzez wykonanie pomocniczych obliczeń.

    Błąd nr 11

       Jeżeli w programie wystąpi próba dzielenia przez zero lub wynik działania wykracza poza dopuszczalny zakres od 1E-99 do 1E+98, to wystąpi ten numer błędu. Aby się go pozbyć, należy sprawdzić operacje arytmetyczne, przede wszystkim wartości zmiennych. Błąd najczęściej objawia się podczas dzielenia przez wyrażenie składające się ze zmiennych, w wyniku wykonania tego wyrażenia otrzymamy wynik równy zero. Należy doprowadzić do takiej postaci to wyrażenie, aby nigdy nie było zerem. Praktyka wskazuje, że zwykle wprowadzamy wartość jednej zmiennej, którą chcemy użyć w obliczeniach w mianowniku ułamka, np. ZMIENNA1, natomiast używamy innej zmiennej (równej 0) o podobnej nazwie, np. ZMIENNA11.

    Błąd nr 12

       Nie ma linii wskazanej jako numer po instrukcjach IF-THEN, ON-GOSUB, ON-GOTO, GOTO, GOSUB. Jeżeli chcemy usunąć ten błąd powinniśmy wpisać linia programu, która jest wywoływana lub też zmienić numer linii wskazywanej przez te instrukcje .

    Błąd nr 13

       Źle skonstruowano pętlę FOR-NEXT. Występuje w wypadku użycia samej instrukcji NEXT bez właściwej instrukcji FOR. Błąd likwiduje się poprzez wpisanie właściwej instrukcji FOR.

    Błąd nr 14

       Wpisana linia jest zbyt długa, należy podzielić ją co nąjmniej na dwie linie.

    Błąd nr 15

       Źle skonstruowano pętlę FOR-NEXT lub niewłaściwie jest obsługiwany powrót z podprogramu. Błąd pojawia się w wypadku powtórnego użycia instrukcji NEXT po zakończeniu pętli, poprawia się go wyrzucając niepotrzebną instrukcję NEXT. Jeżeli dotyczy on obsługi podprogramu, to błąd wystąpi w wypadku użycia instrukcji RETURN, gdy żadna procedura nie była wywoływana (wszystkie instrukcje GOSUB zostały wykonane). Stało się to poprzez niedozwolone wskoczenie do podprogramu (np. poprzez GOTO) lub (co się często zdarza) przez wejście do podprogramu umieszczonego po właściwym programie. Należy skasować skok typu GOTO do podprogramu lub wpisać END na końcu właściwego programu.

    Błąd nr 16

       Podobnie jak w wypadku wystąpienia błędu numer 16, z tą różnicą, że dotyczy wyłącznie złej obsługi powrotu z podprogramu.

    Błąd nr 17

       Bardzo niebezpieczny błąd, jeżeli dotyczy zepsutej pamięci RAM. Należy wtedy włączyć SELF TEST i poddać pamięć diagnozie (MEMORY TEST). W wypadku potwierdzenia przez program testujący, że komputer posiada niesprawną pamięć (zmiana koloru wyświetlanych na ekranie kwadracików) należy komputer oddać do autoryzowanego punktu serwisowego tego rodzaju sprzętu. Błąd ten występuje również z mniej kosztownych powodów: wpisane instrukcje programu nie są zgodne ze składnią aktualnie rezydującego interpretera języka BASIC. Wtedy należy poprawić źle wpisaną linia i powtórnie ją zaakceptować. Bardzo sporadycznie błąd występuje w wypadku niewłaściwie użytej instrukcji POKE.

    Błąd nr 18

       Błąd wystąpi w chwili, gdy pierwszy znak argumentu instrukcji VAL nie jest cyfrą - należy wtedy zamienić ten znak na cyfrę; błąd również wystąpi, gdy jest niewłaściwy początkowy znak zmiennej. Błąd wtedy można poprawić poprzez zmianę nazwy zmiennej, pamiętając, że pierwszy znak zmiennej powinien być literą.

       Na podstawie "Atari BASIC" i instrukcji obsługi Basic-a komputera Atari opracował

    LEON



  • Powrót na start | Powrót do spisu treści | Powrót na stronę główną

    Pixel 2001