C64 és a lemez kezelés

írta: sonar, 4 hónapja

Egy kis hiánypótló írás, jegyzet, feljegyzés... elsősorban magamnak. Nekem már csak a korszak végén lett egy 1541-II meghajtóm és az egyszerű játék betöltésén kívül máshoz nem is értettem. Másoláshoz már a középiskolás szomszédokat kellett megkérni. Mindig is furdalt a kíváncsiság, hogy hogyan is kellett annó a lemezzel dolgozni, úgyhogy szabadidőmben elkezdtem a C64-es könyveket bújni és most jutottam el a lemez kezeléshez. (Hardware egyelőre ott pihen a garázsban ismeretlen állapotban)

170kB adat tárolására képes

#1 Lemez formázása
OPEN 15,8,15

Az OPEN parancs azt jelenti, hogy meg akarunk nyitni, használatba akarunk venni valamilyen külső eszközt, a mi esetünkben a lemezegységet.
Ezekkel a külső eszközökkel a gép 16 (0-tól 15-ig) csatornán tud kapcsolatot tartani.
A 15-ös csatornán küldi a C64 a parancsokat a lemezmeghajtónak. Egy időben egyébként négy lemezegység kapcsolható a géphez. Ezek is számozva vannak, 8-tól 11-ig. Gyárilag a 8-as egységszámra vannak beállítva, amit csak akkor szokás átállítani, ha több lemezegységet használunk.
Ugyanaz a program persze sokféle eszközt használhat egyszerre. A programon belül ezeket is meg kell számoznunk, de az ehhez szükséges számot magunk választjuk meg 0 és 255 között tetszőlegesen. Az OPEN után ezt a számot kell elsőként megadnunk, utána a lemezegység számát, majd a csatornáét.

PRINT# 15,"NEW:PROBA,PR"

A PRINT# után az OPEN parancsban elsőként írt számot kell megadnunk. Ez a példában 15.
A 15-ös csatorna azonban speciális jelentésű, itt a lemezegység nem adatot, hanem parancsot vár. A
NEW:PROBA, PR jelsorozatot tehát parancsként értelmezi. A parancs kiadása után képernyőnkön megjelenik a READY, hiszen a központi egység feladata csak annyi, hogy a parancsot a megfelelő csatornán elküldje, és ezt egy pillanat alatt meg is teszi. A lemezegység viszont még kb. 2 percig folyamatosan működik : mikroprocesszora most hajtatja végre lépésről lépésre a teljes formázási folyamatot.
Ennek során a berendezés:
- végigellenőrzi a lemezt, és meggyőződik a hibátlanságáról,
- az egészet végigtörli,
- létrehoz rajta egy tartalomjegyzéket, amely egyelőre üres, de ebben később a lemezen levő programok, adatállományok legfontosabb adatait tárolja,
- létrehoz egy lemeztérképet, amelyen számon tartja, hogy hol vannak a lemezen szabad és hol vannak foglalt területek; egyelőre persze a tartalomjegyzék és a térkép területének kivételével minden terület szabad.
A lemez 256 bájtos egységenként, blokkonként formázható. Mire a formázás befejeződik, 664 ilyen blokkunk lesz; ez megadja a lemez tárolókapacitását is.
A NEW: után megadott nevet (a példában azt, hogy PROBA) formázáskor a gép felviszi a tartalomjegyzék elejére. Ez lesz a lemez neve. A hossza legfeljebb 16 jel lehetne, de ezen belül bármi, akár 16 szóköz is.
A vessző után megadott nevet (a mi példánkban azt, hogy PR) a gép minden egyes blokkba felviszi. (A 256 bájtba ez nem számít bele.) Ez lesz a lemezazonosító. Pontosan két jelből kell állnia, se több, se kevesebb nem lehet . Ha munka közben lemezt cserélünk, a gép ezt a lemezazonosító megváltozásából veszi észre, a lemez bármelyik részén is tart. Ezért érdemes ügyelnünk arra, hogy ne legyen két egyforma azonosítójú lemezünk.

CLOSE 15 után azt a számot kell megadnunk, amelyik az OPEN után az első volt (és amelyik a PRINT#-ben is szerepelt). Ezzel zárjuk le az OPEN-nel lefoglalt csatornát. Ez a formázás - és minden egyéb csatornahasználat - utolsó művelete .

#2 A LEMEZTARTALOM LEKÉRDEZÉSE
A frissen formázott lemez tartalmát megkérdezhetjük. Ez egyben jó próba is arra, hogy a formázás valóban
kifogástalanul sikerült-e.

LOAD "$",8

A LOAD kulcsszó azt jelenti, hogy valamilyen külső eszközről valamit a tárba akarunk tölteni. Utána idézőjelben állhat az a név, amellyel a betölteni valót azonosítjuk. Neve a tartalomjegyzéknek is van: ez a
név a $. A vessző utáni nyolcas a 8-as számú lemezegységet jelenti. A parancs kiadása után a lemezegységen kigyullad a működést jelző lámpa, a képernyőn pedig sorban a következő feliratok jelennek meg:

SEARCHING FOR $
LOADING
READY

LIST parancs hatására a képernyőn megjelenik a tartalomjegyzék, amely a mi frissen formázott lemezünk esetében a következőképpen fest :

0 "PROBA " PR 2A
664 BLOCKS FREE

#3 LEMEZRE ÍRÁS
Program mentése lemezre: SAVE "programnév",8
Program visszaellenőrzése :VERIFY "programnév",8
Program Betöltése: LOAD "programnév",8
Program felülírása: SAVE "@:programnév",8
Az alábbi képen egy három soros BASIC programot (10, 20, 40-nel kezdődő sorok) mentek ki a lemezre BASIC1 néven majd a verify parancssal vissza is ellenőrzöm az írást.

A LOAD paranccsal betöltöm a lemez katalógusát amit a LIST parancs segítségével kiiratok a kijelzőre. Majd a LOAD "BASIC1" segítségével betöltöm a memóriába, majd a RUN paranccsal elindítom.

Miután belemódosítottam a programba szeretném, hogy ha a meglévőt felülírná. Ha a SAVE parancsot @ nélkül használjuk akkor a lemez meghajtó kiakad. A promptot ugyan visszakapjuk, de folyamatosan villog, ami hibára utal.

#4 LEMEZ TARTALMÁNAK MÓDOSÍTÁSA
Program törlése, hasonló a lemez formázáshoz
OPEN 15,8,15
PRINT#15,"SCRATCH:BASIC1"
CLOSE 15

Egyszerre akár több program is törölhető. A felsorolt programneveket vesszővel kell elválasztani.
PRINT#15,"SCRATCH:PROGRAM1,PROGRAM2"

Teljes lemez törlése
OPEN 15,8,15
PRINT#15,"VALIDATE"
CLOSE 15

Átnevezés
OPEN 15,8,15
PRINT#15,"RENAME:UJNEV=PROGRAMNEV"
CLOSE 15

Másolás (CSAK LEMEZEN BELÜL!)
OPEN 15,8,15
PRINT#15,"COPY:PROGRAMNEV=UJNEV"
CLOSE 15

Leginkább felhasznált irodalom:
Bodor Tibor, Gerő Péter: A commodore 64 programozásának gyakorlata 1.
1541-II disk drive manual user's guide
A témához kapcsolódó blog bejegyzésem: VICE, Commodore emulátor beüzemelése Linuxon