Serwis Edukacyjny
w I-LO w Tarnowie
obrazek

Materiały dla uczniów liceum

  Wyjście       Spis treści       Wstecz       Dalej  

obrazek

Tłumaczenie: mgr Jerzy Wałaszek

©2021 mgr Jerzy Wałaszek
I LO w Tarnowie

Rozdział 20

Pamięć kasetowa

Jak umieścić twoje programy na taśmie kasetowej
SAVE, LOAD, VERIFY. MERGE

SPIS TREŚCI

Rozdział 20: Pamięć kasetowa

Podsumowanie

LOAD, SAVE, VERIFY, MERGE


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.
Na początek:  podrozdziału   strony 

Zespół Przedmiotowy
Chemii-Fizyki-Informatyki

w I Liceum Ogólnokształcącym
im. Kazimierza Brodzińskiego
w Tarnowie
ul. Piłsudskiego 4
©2021 mgr Jerzy Wałaszek

Materiały tylko do użytku dydaktycznego. Ich kopiowanie i powielanie jest dozwolone
pod warunkiem podania źródła oraz niepobierania za to pieniędzy.

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

Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.

Informacje dodatkowe.