Rozdział 20


Pamięć kasetowa

 

Podsumowanie

Podstawowe sposoby używania magnetofonu kasetowego do zapisu (SAVE), ładowania (LOAD) i weryfikowania (VERIFY) programów zostały podane w broszurze wprowadzającej. Powinieneś się z nimi tam zapoznać, zanim przejdziesz do czytania tego rozdziału.

Widzieliśmy, że LOAD wymazuje stary program i jego zmienne z komputera, zanim rozpocznie ładowanie nowego z taśmy; istnieje inne polecenie, MERGE, które tego nie robi. MERGE tylko wtedy usuwa wiersz programu lub zmienną, jeśli musi, ponieważ jest nowy wiersz z takim samym numerem lub nowa zmienna o takiej samej nazwie. Wpisz program 'kostki' z Rozdziału 11 i zapisz go na taśmie jako "kostka". Teraz wprowadź i uruchom:

 

  1 PRINT 1
  2 PRINT 2
10 PRINT 10
20 LET x=20

 

a następnie postępuj tak samo jak przy weryfikacji, lecz zamień polecenie VERIFY "kostka" za pomocą

 

MERGE "kostka"

 

Jeśli wylistujesz program, zobaczysz, że wiersze 1 i 2 przetrwały, lecz wiersze 10 i 20 zostały zastąpione wierszami z programu kostki. Zmienna x również przetrwała (spróbuj PRINT x).

 

Dotychczas widziałeś proste postacie tych czterech poleceń używanych z magnetofonem kasetowym:

SAVE zapisuje program i zmienne na taśmie.

VERIFY sprawdza program i zmienne na taśmie z programem i zmiennymi w komputerze.

LOAD czyści komputer z całego zapisanego w nim programu i zmiennych, a następnie zamienia je programem i zmiennymi odczytanymi z kasety.

MERGE jest jak LOAD z wyjątkiem tego, że nie czyści starego programu i zmiennych, a jedynie zastępuje stare wiersze nowymi z taśmy oraz stare zmienne nowymi, jeśli ich numery wierszy lub nazwy są takie same.

W każdym z nich po słowie kluczowym występuje łańcuch tekstowy: dla SAVE dostarcza on nazwy programu do zapisu na taśmie, natomiast dla pozostałych trzech informuje on komputer, jaki program ma znaleźć. Podczas szukania wypisuje on nazwę każdego napotkanego programu. Istnieje dla tych poleceń kilka usprawnień.

Po VERIFY, LOAD i MERGE możesz umieścić pusty łańcuch jako nazwę do wyszukania: wtedy komputer nie troszczy się o tę nazwę, lecz bierze pierwszy napotkany program.

 

Wariant SAVE przyjmuje postać

 

SAVE łańcuch LINE liczba

 

Program zapisany z użyciem tego automatycznie uruchamia się od podanego numeru wiersza po załadowaniu rozkazem LOAD (lecz nie MERGE).

 

Jak dotąd, jedynym zapisywanym na kasecie rodzajem informacji były programy wraz z ich zmiennymi. Oprócz nich są jeszcze dwa inne rodzaje, zwane tablicami i bajtami.

Tablice są obsługiwane nieco inaczej:

Możesz zapisywać tablice na taśmie przy pomocy DATA w poleceniu SAVE:

 

SAVE łańcuch DATA nazwa tablicy()

 

Łańcuch jest nazwą, którą otrzyma ta informacja na taśmie i działa to identycznie jak przy zapisie programów.

Nazwa tablicy określa tablicę, którą chcesz zachować, jest zatem jedynie literą lub literą z kolejnym znakiem $. Pamiętaj o zakończeniu tej nazwy za pomocą nawiasów: mógłbyś sądzić, że są one logicznie zbędne, lecz wciąż je należy tam umieszczać, aby ułatwić pracę komputerowi.

 

Musisz rozróżniać oddzielne role łańcucha i nazwy tablicy. Jeśli wpiszesz (przykładowo)

 

SAVE "ceny" DATA c()

 

To SAVE weźmie tablicę c z komputera i zapisze ją na taśmie pod nazwą "ceny". Gdy wpiszesz

 

VERIFY "ceny" DATA c()

 

to komputer poszuka tablicy zapisanej na taśmie pod nazwą "ceny" (gdy ją znajdzie, wypisze na ekranie "Number array: ceny"), a następnie zweryfikuje ją z tablicą c w komputerze.

 

LOAD "ceny" DATA c()

 

odszuka tablicę na taśmie, a następnie — jeśli jest na to miejsce w komputerze — usunie istniejącą tablicę o nazwie c i wczyta nową z taśmy, nazywając ją c.

 

Dla zapisanych tablic nie możesz używać polecenie MERGE.

 

W ten sam sposób zapisujesz tablice znakowe (łańcuchy). Gdy komputer przeszukuje taśmę i znajdzie jedną z nich, to wypisze "Character array:" z nazwą znalezionej tablicy. Gdy wczytujesz tablicę znakową, to usunięta zostanie nie tylko dowolna poprzednia tablica znakowa o takiej samej nazwie, lecz również dowolna zmienna łańcuchowa z taką samą nazwą.

 

Zapis bajtów jest wykorzystywany dla fragmentów informacji bez określania do czego one służą — może być to treść obrazu, grafika definiowana przez użytkownika lub coś, co sobie zrobiłeś dla siebie. Zapis ten wykonuje się za pomocą słowa CODE, jak w

 

SAVE "obraz" CODE 16384,6912

 

Jednostką pamięci jest bajt (liczba od 0 do 255), a każdy bajt posiada adres (będący liczbą od 0 do 65535). Pierwszą liczbą za CODE jest adres pierwszego bajtu do zapisania na taśmie, a druga określa liczbę bajtów do zapisania. W naszym przypadku 16384 jest adresem pierwszego bajtu obszaru ekranu (zawierającego obraz telewizyjny), a 6912 jest liczbą bajtów zawartych w tym obszarze, zatem zapisujemy na taśmie kopię obrazu telewizyjnego — wypróbuj to. Nazwa "obraz" działa tak sama jak nazwy dla programów.

Aby załadować obraz z powrotem, użyj

 

LOAD "obraz" CODE

 

Za CODE możesz umieszczać liczby w postaci

 

LOAD nazwa CODE start, długość

 

Tutaj długość jest jedynie środkiem bezpieczeństwa; gdy komputer odnajdzie na taśmie bajty o prawidłowej nazwie, to wciąż odmówi ich załadowania, jeśli jest ich więcej niż wynosi parametr długość — jest wtedy widocznie więcej danych niż się spodziewałeś i mogłyby one zapisać coś, czego nie życzysz sobie. Dostaniesz wtedy raport błędów R Tape loading error (R Błąd ładowania z taśmy). Możesz opuścić długość, a wtedy komputer wczyta bajty bez względu na ich liczbę.

Start pokazuje adres, pod który zostanie załadowany pierwszy bajt — może być on inny od adresu użytego do zapisu na taśmie, chociaż w przypadku, gdy są one jednakowe, możesz w poleceniu LOAD opuścić parametr start.

 

CODE 16384,6912 jest tak użyteczne do zapisu i odczytu obrazu, że możesz zastąpić je za pomocą SCREEN$ — na przykład

 

SAVE "obraz" SCREEN$
LOAD "obraz" SCREEN$

 

Jest to rzadki przypadek, dla którego nie zadziała VERIFY — polecenie to wypisuje na ekranie nazwy bloków informacji, które napotka na taśmie, zatem gdy zabierze się do weryfikacji zawartości ekranu z zawartością danych z taśmy, to ekran już jest zmieniony i weryfikacja się nie powiedzie. We wszystkich innych przypadkach zwykle możesz używać VERIFY po rozkazie SAVE.

 

Poniżej jest pełne podsumowanie czterech poleceń używanych w tym rozdziale.

Nazwa oznacza wyrażenie łańcuchowe i odnosi się do nazwy, pod którą dana informacja jest zapisywana na kasecie. Powinno się ono składać ze znaków drukowalnych ASCII, z których wykorzystywane jest pierwszych dziesięć.

Istnieje cztery rodzaje informacji, które mogą być przechowywane na taśmie: program ze zmiennymi (razem), tablice liczbowe, tablice znakowe i bezpośrednie bajty.

Gdy VERIFY, LOAD i MERGE szukają na taśmie informacji o danej nazwie i danego typu, wypisują na ekranie rodzaj i nazwę wszystkich danych, które napotkają po drodze. Rodzaj jest pokazywany przez napisy "Program:", "Number array:" (tablica liczbowa), "Character array:" (tablica znakowa) i "Bytes:" (bajty). Jeśli nazwa była pustym łańcuchem, to korzystają z pierwszej informacji o pożądanym typie, bez względu na jej nazwę.

 

SAVE

Zapisuje informację na taśmie pod podaną nazwą. Błąd F zdarza się, gdy nazwa jest pusta lub zawiera więcej niż 11 znaków.

SAVE zawsze umieszcza na spodzie ekranu wiadomość Start tape, then press any key (Uruchom taśmę, a następnie naciśnij dowolny klawisz) i czeka na naciśnięcie klawisza przed rozpoczęciem zapisywania czegokolwiek.

 

1. Program i zmienne:

 

SAVE nazwa LINE numer wiersza

 

zapisuje program i zmienne w taki sposób, że po LOAD automatycznie jest wykonywany rozkaz

 

GO TO numer wiersza

 

2. Bajty:

 

SAVE nazwa CODE start, długość

 

zapisuje tyle bajtów, ile wynosi długość, poczynając od adresu start.

 

SAVE  nazwa SCREEN$

 

odpowiada

 

SAVE nazwa CODE 16384,6912

 

i zapisuje na taśmie treść wyświetlanego obrazu na ekranie telewizora.

 

3. Tablice:

 

SAVE nazwa DATA litera ()

lub

SAVE nazwa DATA litera $ ()

 

zapisuje tablicę o nazwie litera lub litera$ (nie ma to żadnego związku z parametrem nazwa).

 

VERIFY

Sprawdza informację zapisaną na taśmie z informacją znajdującą się już w pamięci. Błąd daje raport R Tape loading error (R Błąd ładowania z taśmy),

 

1. Program i zmienne:

 

VERIFY nazwa

 

2. Bajty:

 

VERIFY nazwa CODE start, długość

 

Jeśli bajtów o danej nazwie na taśmie jest więcej niż wynosi parametr długość, to komputer wyświetla błąd R. W przeciwnym razie sprawdza je z bajtami w pamięci umieszczonymi od adresu start.

 

VERIFY nazwa CODE start

 

sprawdza bajty o danej nazwie na taśmie z bajtami w pamięci od adresu start.

 

VERIFY nazwa CODE

 

sprawdza bajty o danej nazwie na taśmie z bajtami w pamięci, począwszy od adresu użytego do zapisu tych bajtów.

 

VERIFY nazwa SCREEN$

 

jest równoważne

 

VERIFY nazwa CODE 16384,6912

 

lecz prawie na pewno zawiedzie (patrz uwagi powyżej).

 

3. Tablice:

 

VERIFY nazwa DATA litera ()

lub

VERIFY nazwa DATA litera $ ()

 

sprawdza tablicę o podanej nazwie na taśmie z tablicą litera lub litera$ w pamięci.

 

LOAD

Ładuje nową informację z taśmy, usuwając stare dane z pamięci.

 

1. Program i zmienne:

 

LOAD nazwa

 

usuwa stary program ze zmiennymi i wczytuje program ze zmiennymi o podanej nazwie z kasety; jeśli program był zapisany przy pomocy SAVE nazwa LINE, to zostaje wykonany automatyczny skok pod podany numer wiersza w programie.

Błąd 4 Out of memory (4 Brak pamięci) występuje, jeśli nie ma miejsca na nowy program i zmienne. W takim przypadku stary program ze zmiennymi nie jest usuwany.

 

2. Bajty:

 

LOAD nazwa CODE start, długość

 

Jeśli bajtów zapisanych na taśmie pod podaną nazwą jest więcej niż wynosi parametr długość, to dostaniemy błąd R. W przeciwnym razie zostaną one załadowane do pamięci od adresu start i nadpiszą wszystko, co poprzednio znajdowało się w tym obszarze.

 

LOAD nazwa CODE start

 

Wczytuje bajty o podanej nazwie na taśmie do pamięci, poczynając od adresu start i nadpisując wszystko, co się tam poprzednio znajdowało.

 

LOAD nazwa CODE

 

ładuje bajty o podanej nazwie na taśmie do pamięci, poczynając od adresu, z którego zostały wcześniej zapisane. Zawartość tego obszaru zostaje zastąpiona informacją odczytaną z taśmy.

 

3. Tablice:

 

LOAD nazwa DATA litera ()

lub

LOAD nazwa DATA litera $ ()

 

usuwa każdą tablicę o nazwie litera lub litera$ i tworzy nową z tablicy zapisanej na kasecie.

Błąd 4 Out of memory powstaje, jeśli nie ma miejsca na nową tablicę. Wtedy stara tablica nie zostanie usunięta.

 

MERGE

Ładuje nową informację z taśmy bez usuwania starej informacji z pamięci.

 

1. Program i zmienne:

 

MERGE nazwa

 

łączy program o podanej nazwie na taśmie z programem już znajdującym się w pamięci, nadpisując wszystkie wiersze i zmienne w starym programie wierszami i zmiennymi, które konfliktują ze tymi z nowego programu.

Błąd 4 Out of memory występuje, jeśli w pamięci brak jest miejsca dla całego starego programu ze zmiennymi oraz dla całego nowego programu ze zmiennymi, który jest wczytywany z taśmy (połączenie tych dwóch programów i zmiennych następuje nie w trakcie odczytu, lecz później, po wczytaniu całego programu z taśmy — w przeciwnym razie komputer nie nadążyłby z odczytywaniem i usuwaniem danych).

 

2. Bajty: nie ma takiej opcji.

 

3. Tablice: nie ma takiej opcji.

 

Ćwiczenia

1. Utwórz kasetę, na której pierwszy program po załadowaniu wyświetla menu (listę pozostałych programów na tej kasecie), prosi cię o wybór programu i ładuje go. (Z praktyki wiem, że wyszukiwanie programów na taśmie w ten sposób jest zbyt czasochłonne. Ja zaopatrzyłem się w magnetofon z licznikiem taśmy. Każdy zapisany na kasecie program zapisywałem na pudełku kasety z wartością początkową licznika taśmy, pod którą ten program był zapisany. Następnie wystarczyło włożyć kasetę, przewinąć do początku, wyzerować licznik i przewinąć do pozycji z programem. Dalej wpisujemy LOAD, włączamy taśmę i ładujemy właściwy program. Ten, kto musiał tak robić, doceni dzisiejszy komfort dysków twardych...)

 

2. Weź grafiki figur szachowych z Rozdziału 15 i wpisz NEW: grafiki przetrwają. Jednakże nie uda im się to po wyłączeniu komputera: jeśli chcesz je zachować, musisz zapisać je na taśmie, wykorzystując SAVE z CODE. Najprostszym sposobem zapisu wszystkich 21 grafik użytkownika jest wpisanie polecenia

 

SAVE "szachy" CODE USR "a",21*8

 

po czym wpisujemy

 

VERIFY "szachy" CODE

 

Jest to system zapisu bajtów, który został użyty do zapisu obrazu. Adres pierwszego bajtu do zapisania wynosi USR "a" i jest adresem pierwszych ośmiu bajtów określających wzór pierwszej grafiki definiowanej przez użytkownika, a liczba bajtów do zapisania wynosi 21*8 — osiem bajtów dla każdej z 21 grafik.

Aby załadować je z powrotem, używamy zwykle polecenia

 

LOAD "szachy" CODE

 

Jednakże, gdy ładujesz z powrotem do Spectrum o innym rozmiarze pamięci lub jeśli przesunąłeś obszar grafik definiowanych przez użytkownika pod inny adres (musisz to zrobić celowo przy pomocy bardziej zaawansowanych technik), to musisz zachować więcej ostrożności i użyć

 

LOAD "szachy" CODE USR "a"

 

W tym przypadku USR wymusi załadowanie grafik pod inny adres w pamięci.

 

 


   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.

Pytania proszę przesyłać na adres email: i-lo@eduinf.waw.pl

W artykułach serwisu są używane cookies. Jeśli nie chcesz ich otrzymywać,
zablokuj je w swojej przeglądarce.
Informacje dodatkowe