Rozdział 23 - Gdy zaczyna brakować pamięci

ZX81 posiada ograniczoną ilość wewnętrznej pamięci, a nie trudno ją zapełnić. Najlepszym dowodem na to, iż to się właśnie dzieje jest zwykle komunikat 4, lecz mogą zdarzyć się również inne rzeczy, a niektóre z nich są raczej dziwne. Dokładne zachowanie się komputera uzależnione jest od tego, czy masz dołączone rozszerzenie pamięci, czy też nie, zatem najpierw załóżmy, iż nie masz. Jeśli masz, to je zdejmij (po wyłączeniu najpierw komputera).

Bufor wyświetlania, to jest obszar wewnątrz komputera, gdzie przechowuje on obraz telewizyjny, jest sprytnie zaprojektowany tak, aby zabierał tylko tyle miejsca w pamięci, ile jest potrzebne na to, co dotychczas zostało wydrukowane na ekranie: wiersz ekranowy może zawierać do 32 znaków plus znak NEWLINE. Oznacza to, iż może ci zabraknąć pamięci przy drukowaniu na ekranie, a najczęściej zdarza się to przy listowaniu programu. Wpisz

NEW
DIM
A(150)
10 FOR N=1 TO 15
20 PRINT N

Tu pojawia się pierwsza niespodzianka: wiersz 10 znika z listingu. Listing zostaje ograniczony do bieżącego wiersza 20 i nie ma miejsca na oba wiersze. Teraz wpisz:

30 NEXT N

Znów, na listingu jest tylko miejsce dla wiersza 30. Teraz wpisz:

40 REM (bez NEWLINE)

a zobaczysz jak znika wiersz 30 i wiersz 40 skacze na górę ekranu. Nie został on wstawiony do programu - wciąż masz kursor  L   i możesz nim poruszać. Widziałeś jedynie w działaniu prosty mechanizm porzucania dolnych 24 wierszy ekranu w celu odzyskania nieco pamięci. Teraz wpisz:

XXXXXX  (wciąż bez NEWLINE)

a kursor zniknie - nie ma miejsca na wyświetlenie go. Wpisz jeszcze jedno X, bez NEWLINE, a zniknie jedno z X. Teraz wpisz NEWLINE. Zniknie wszystko, lecz program wciąż jest w komputerze, co można udowodnić usuwając wiersz 10 i używając klawiszy . Teraz wpisz:

10 FOR N=1 TO 15

znów - przesunie się na górę ekranu jak poprzednio zrobił to wiersz 40. Lecz gdy spróbujesz nacisnąć NEWLINE, wiersz nie zostanie wstawiony, chociaż nie będzie komunikatu o błędzie ani nie pojawi się znacznik  S  informujący, iż coś jest źle. Jest to wynikiem braku miejsca na sprawdzenie składni wiersza, co zwykle zdarza się wierszom zawierającym liczby (inne niż numery wiersza na początku).

Jedynym lekarstwem jest zrobienie nieco miejsca w jakiś sposób, lecz najpierw usuń wiersz 10, który nie chce wejść. Naciśnij EDIT: ekran stanie się pusty, ponieważ brakuje miejsca na sprowadzenie wiersza w dół do edycji.

Gdy EDIT nie działa, czasami udaje się zrobić nieco miejsca wpisując kilka spacji aż kursor pójdzie w górę ekranu.

Naciśnij NEWLINE, a otrzymasz z powrotem część listingu. Teraz usuń wiersz 40 (którego i tak przecież nie chciałeś mieć w programie) wpisując:

40   (oraz NEWLINE)

Teraz spróbuj ponownie wprowadzić wiersz 10 -  wciąż się nie da. Wymaż go ponownie. Wciąż musisz znaleźć gdzieś nieco dodatkowego miejsca. Uświadom sobie, iż powodem odrzucenia wiersza 10 był prawdopodobnie brak pamięci dla sprawdzenia składni dwóch liczb, 1 i 15: zatem jeśli usuniesz chwilowo wiersz 20 z programu, to może będziesz miał miejsce na wprowadzenie wiersza 10 oraz ponowne wprowadzenie usuniętego wiersza 20 (który nie zawiera żadnych liczb). Wypróbuj poniższego sposobu.

Wpisz:

20
10 FOR N=1 TO 15
20 PRINT N

a program jest wprowadzony poprawnie.

Wpisz

GOTO 10

i znów wiersz zostaje odrzucony, ponieważ nie można sprawdzić jego składni, jednakże jeśli go wymażesz i wpiszesz:

RUN

to zadziała (RUN usuwa tablicę dając dużo wolnego miejsca).

Teraz wpisz jeszcze raz wszystko tak samo jak przedtem począwszy od NEW do wiersza 30, a następnie

40 REM XXXXXXXXXXXX

(12 liter X), co zakończy się wyglądając jak 40 RE. Gdy naciśniesz NEWLINE, listing będzie się składał tylko z wiersza 30, a wiersz 40 został zupełnie stracony. Stało się tak dlatego, iż po prostu był on zbyt długi, aby zmieścić się w programie. Efekt ten staje się gorszy, gdy wiersz jest wydłużoną wersją wiersza już znajdującego się w programie, ponieważ wtedy tracisz zarówno stary jak i nowy wiersz, który miał go zastąpić.

Ostatecznym rozwiązaniem tego problemu jest dokupienie modułu pamięci RAM, który wtyka się z tyłu komputera. Moduł Sinclair 16K RAM udostępnia ci szesnaście razy więcej pamięci niż w komputerze bez rozszerzenia.

Jeśli posiadasz stary moduł ZX80 3K RAM, to nie będzie on pracował z ZX81.

Zachowanie z rozszerzeniem pamięci jest trochę inne, ponieważ bufor wyświetlania jest wypełniony spacjami, aby utworzyć każdy wiersz długi na 32 znaki (zwróć uwagę, iż SCROLL zmienia te ustawienie - zobacz do rozdziału 27).  Teraz drukowanie lub wyświetlanie listingu nie spowoduje braku pamięci w komputerze, a ty nie zobaczysz tych skróconych listingów i skaczących wierszy; lecz zobaczysz utknięte wiersze lub stracone, a jedynym ratunkiem będzie znalezienie nieco wolnego miejsca.

Jeśli posiadasz rozszerzenie pamięci, to podłącz je i przejdź do wpisywania w początkowej części tego rozdziału używając:

DIM A(3069)

zamiast

DIM A(150).

   

Podsumowując, to pogmatwana historia, której morał jest taki: unikaj całkowitego zapchania komputera, jeśli tylko możesz. Drugi morał jednakże pokazuje, iż nie wszystko jest takie złe, na jakie wygląda.

  1. Jeśli listing zaczyna się skracać lub wiersze skaczą do góry, to miejsca w pamięci jest coraz mniej.
  2. Jeśli NEWLINE przestanie działać na końcu wiersza, to prawdopodobnie brakuje miejsca na zajęcie się liczbami. Wymaż ten wiersz używając EDIT-NEWLINE lub RUBOUT.
  3. Wciśnięcie NEWLINE może spowodować utratę całego wiersza.

Dla wszystkich tych dziwności lekarstwo jest takie samo. Nie panikuj, lecz poszukaj wolnego miejsca.

Pierwszym do rozważenia jest polecenie CLEAR. Jeśli masz kilka zmiennych, na których ci nie zależy, to to należy zrobić.

Jeśli to nie rozwiąże sytuacji, poszukaj w programie zbędnych poleceń, takich jak polecenia REM i wykasuj kilka z nich.

 

 

Podsumowanie

Gdy pamięć się zapełnia, dzieją się dziwne rzeczy, lecz zwykle nie są one beznadziejne.

 



List do administratora Serwisu Edukacyjnego Nauczycieli I LO

Twój email: (jeśli chcesz otrzymać odpowiedź)
Temat:
Uwaga: ← tutaj wpisz wyraz  ilo , inaczej list zostanie zignorowany

Poniżej wpisz swoje uwagi lub pytania dotyczące tego rozdziału (max. 2048 znaków).

Liczba znaków do wykorzystania: 2048

 

W związku z dużą liczbą listów do naszego serwisu edukacyjnego nie będziemy udzielać odpowiedzi na prośby rozwiązywania zadań, pisania programów zaliczeniowych, przesyłania materiałów czy też tłumaczenia zagadnień szeroko opisywanych w podręcznikach.



   I Liceum Ogólnokształcące   
im. Kazimierza Brodzińskiego
w Tarnowie

©2018 mgr Jerzy Wałaszek

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji
GNU Free Documentation License.