Speccy-Dos
Referencia Adatok Gépi Kódú Felhasználói Programokhoz

1985 - dr. Horváth Ferenc


Tartalom

Bevezetés

1. Memóriafelosztás

2. A SPECCY-DOS I/O Rendszere
2.1. Hardware vezérlőjelek kezelése
2.2. Az FDC regisztereinek kezelése

3. A SPECCY diszk felépítése
3.1. A SPECCY diszk fizikai felépítése
3.2. A SPECCY diszk logikai felépítése
3.2.1. A Directory terület felépítése
3.2.2. A térkép felépítése

4. A SPECCY-DOS szubrutinok áttekintése

5. A SPECCY-DOS szubrutinjainak hívása más programok által
5.1. ROM váltások
5.2. A változó című SPECCY szubrutinok hívása
5.2.1. Általános hívás
5.2.2. Egyedi hívás

6. A SPECCY-DOS RAM-területe

7. A SPECCY-DOS szubrutinjainak ismertetése
7.1 Nem verziófüggetlenül hívható szubrutinok

8. SPECCY-DOS rendszerváltozók


Bevezetés
Ez a kézikönyv azon SFECCY-DOS felhasználók szárára készült, akik saját file-kezelő programokat kívánnak készíteni, kihasználva a SFECCY-DOS belső szubrutinkészletét. A kézikönyv az összes olyan információt tartalmazza, amely a fenti feladat megoldásához szükséges lehet. A kézikönyv legcélszerűbb használati módja az, hogy először gondosan végigolvassuk az elejétől a végéig, a későbbiekben, a programok írása során pedig szubrutin-katalógusként használjuk. A kézikönyv írása során fettételeztünk bizonyos előismereteket, így feltételeztük, hogy az olvasó elsősorban alaposon ismeri a SPECTRUM-ot, másodsorban megfelelően járatos a SPECCY-DOS BASIC-ből való kezelésében, végül feltételeztük, hogy az olvasó járatos a Z-80 assembly nyelvű programozásában. A SPECCY-DOS-ra vonathozó alapismeretek a "SPECCY-DOS Felhasználói Kézikönyv" c. irodalomból szerezhetők meg.
Bizonyos szubrutinok használatához (pld.: TYPONE),illetve bizonyos fajta feladatok megoldásához a fentieken kívül a SFECCY-DOS-ban alkalmazott floppy diszk kontroller (továbbiakban: FDC), azaz a WD1770 részletes ismerete is szükséges.
A kézikönyv fő részét képező VII. fejezet a szubrutinok interface-ivel foglalkozik, míg az egyéb fejezetek a memória felépítéséét, a DOS rendszerváltozóit, a szubrutinok hívási módját és a diszk felépítését ismertetik. A SPECCY szubrutinok használatához sok sikert kívánunk!

1. Memóriafelosztás
A SPECCY-DOS 8 Kbyte ROM és 1 Kbyte RAM memóriát tartalmaz. Ezeket árnyék ROM-nak, ill. árnyék RAM-nak nevezzük, mivel a SPECTRUM-ban lévő memóriával azonos címeken helyezkednek el. Az 1-1 ábra a SPECCY-vel felszerelt 48 k-s SPECTRUM cím szerinti memóriakiosztását mutatja. A BASIC, ill. a DOS ROM közül egyidejűleg csak az egyik lehet kiválasztva.
A DOS RAM csak akkor férhető hozzá, ha nem a BASIC ROM van kiválasztva, míg a közös RAM mindkét ROM-ban futó programból hozzáférhető. A ROM-ok közötti választás módjáról a későbbiekben lesz szó.


1-1 ábra

2. A SPECCY-DOS I/O Rendszere
A DOS hardware és software közötti kapcsolat megvalósítására a SPECCY-DOS-ban un. memóriaként kezelt I/O rendszer működik. Ez azt jelenti, hogy a szükséges input/output műveleteket a processzor nem IN/OUT hanem memória olvasó, ill. író műveleteken keresztül valósítja meg. A szükséges I/O műveleteket két csoportba sorolhatjuk, miszerint
1. a DOS hardware vezérlőjeleit kezelő output műveletek, és
2. az FDC különböző regisztereinek olvasására, ill. írására szolgáló I/O műveletek.

2.1. Hardware vezérlőjelek kezelése
Ebbe a csoportba kizárólag output műveletek tartoznak, amelyekkel a DOS hardware különböző vezérlőjeleit kezelhetjük.
Ha a 3B41h (15169d) címre memória műveletet hajtunk végre, akkor a processzor adatbusza különböző hardware elemekkel kerül kapcsolatba, ezáltal különböző hardware folyamatokat vezérel. Az egyes adatbiten és az említett hardware jelek egymáshoz rendelését mutatja a 2-1. ábra.


2-1. ábra

1. Drive kiválasztás: B0, B1
Diszkműveleteket megelőzően ezen bitek segítségével kell kijelölnünk, hogy a művelet melyik drive-on hajtódjék végre. A kijelölést követően minden művelet a kijelölt drive-on fog végrehajtódni, egészen addig, amíg más drive-ot nem jelöltünk ki. A 2-1. táblázat a B0, B1 biten kódolását mutatja.

B1
(DS1)
B0
(DS0)
A kiválasztott drive
0
0
drive-0
0
1
drive-1
1
0
drive-2
1
1
drive-3

2. Lemezoldal kiválasztás: B2
Kétoldalas drive esetén B2=0-val, a lemez 0 jelű, míg B2=1-el, a lemez 1jelű oldalát választhatjuk ki. Ez a kiválasztás a következő lemezoldal kiválasztásig érvényben marad.

3. DOS / BASIC választás: B3
Ha DOS engedélyezve van, és B3=1, akkor a BASIC ROM letiltódik, és soron következő memóriaműveletek esetén a DOS ROM ill. a DOS RAM lesz kiválasztva, a konkrét címtől függően. Ha a DOS engedélyezve van (LSB B6) és B3=0, akkor a DOS ROM, ill. DOS RAM letiltódik, és a BASIC ROM lesz az érvényes memória a saját címtartományában.

4. DOS engedélyezés / tiltás: B6
Ha B6=0, akkor a DOS engedélyezve van, azaz B3 bittel választhatunk a DOS, ill. a BASIC ROM között, és a gép elfogadja és végrehajtja, a BASIC programokban elhelyezett DOS-os parancsokat. Ha B6=1, akkor a DOS le van tiltva, más szóval ki van kapcsolva. Ez azt jelenti, hogy annak ellenére, hogy a SPECCY rá van csatlakoztatva a SPECTRUM-ra, nem fogad el és nem hajt végre DOS parancsokat, és a B3 bittel nem lehet kiválasztani a DOS ROM-ot.
Ez a képesség lehetőséget ad olyan SPECTRUM perifériákkal való kompatibilitás megvalósítására, amelyekkel a SPECCY-DOS egyébként nem volna kompatibilis. E bit ciklikus váltogatásával pld. olyan másolóprogramot készíthetünk, amelyik az INTERFACE-I-hez kapcsolt Microdrive és SPECCY-hez kapcsolt drive-ok közötti kétirányú file másolásra képes.

5. Írássűrűség kiválasztás: B7
Ezzel a bittel határozhatjuk meg, hogy az FDC milyen írássűrűségre számítva végezze el a diszk olvasását, illetve milyen írássűrűséggel hajtsa végre a diszk írását.

B7 = 0: Dupla írássűrűség
B7 = 1: Szimpla írássűrűség

A kiválasztott írássűrűség mindaddig érvényben marad, amíg újabb írássűrűség kiválasztást nem végzünk.

Egyéb tudnivalók a 3B4lH címmel kapcsolatban
Mint már hangsúlyoztuk, a 3B41H címre csak memória írási műveletnek van értelme. Az erről a címről beolvasott adat a DOS szempontjából nem értelmezhető, és semmiféle kapcsolatban nincs az e címre kiírt adattal. Mivel ugyanazzal a memória írási művelettel 5 különböző funkciót vezérlünk, a software-nek mindig tudnia kell az e címre legutoljára kiadott kódszót. Ez sokféleképpen megoldható, legcélszerűbb azonban a felhasználói programokban is azt a módszert követni, amelyet a DOS írásakor alkalmaztunk. Ennek lényege, hogy a 3B41H címre legutoljára kiadott kódszót egy rendszerváltozóban tároljuk és valahányszor új kódszót írunk ki a 3B41H-re, mindig beírjuk az új kódszót e rendszerváltozóba.
E rendszerváltozó neve a DOS-ban DFLAG-1, címe 2000H.

2.2. Az FDC regisztereinek kezelése
Az FDC regiszterei software-ből akkor hozzáférhetőek, ha a DOS van kiválasztva, azaz a 3B41H címre legutoljára kiadott kódszóban B3=1. Ez esetben az FDC regiszterei memória olvasással, ill. írással férhetők hozzá. A 2.2. táblázat az FDC egyes regisztereihez rendelt memóriacímeket tartalmazza.

Memória cím Olvasás Írás
3290H
3291H
3292H
3293H
státusz regiszter
track regiszter
szektor regiszter
adat regiszter
parancs regiszter
track regiszter
szektor regiszter
adat regiszter

Megjegyezzük, hogy az FDC regisztereinek kezelésére a gépi kódú programot készítő felhasználónak nem lesz szüksége fettéve, hogy az e kézikönyvben közölt szubrutinok és belépési pontok segítségével használja a DOS szolgáltatásait. Az itt között információkra a felhasználónak csak akkor van szüksége, ha a DOS fizikai szintű rutinjainak megkerülésével ő maga kívánja vezérelni a DOS hardware-t. Ehhez azonban az FDC alapos ismerete is szükséges. Az e kézikönyvben közölt adatok birtokában elvileg nem kizárt, hogy valaki saját diszk operációs rendszert készítsen a SPECCY hardware kihasználásával, de a SPECCY software megkerülésével.

3. A SPECCY diszk felépítése
A diszk szervezése, felépítése alapvetően meghatározza egy adott DOS minőségi jellemzőit. A SPECCYDOS diszkjeinek szervezése olyan, hogy lehetőséget nyújt a legkülönbözőbb feladatokhoz való alkalmazásra, mint például soros, ill. véletlen hozzáférésű file-ok kezelése, adatbázis kezelők készítése, stb.

3.1. A SPECCY diszk fizikai felépítése
A SPECCY diszk egy vagy kétoldalas lehet, az egy oldalon tévő track-ek száma 35, 40, 45, ill. 80 lehet. Az egy track-en tévő szektorok száma 35,40, ill. 80 track esetén 10/16, 45 track esetén 7/13. (A kisebb szám szimpla, a nagyobb dupla írássűrűség esetén érvényes.) 1 szektor hossza 256 byte. A SPECCY-DOS által kezelt konfigurációkat a 3-1 táblázat mutatja.

Oldalak száma Track-ek száma
35 40 45 80
1 oldalas diszk igen igen igen igen
2 oldalas diszk - igen - igen

Minden kezelt konfiguráció esetén lehetőség van egyszeres, ill. kétszeres írássűrűségű rögzítésre.
A track-ek számozása 0-tól, a szektorok számozósa 1-től kezdődik. A 0-dik track (T00) a diszk legnagyobb sugara track-je, az első szektor az index lyukat követi (S01).
A szektorok számozásánál alkalmazott un. interleave tényező értéke 2, azaz két logikailag egymást követő szektor között két másik szektor található.

3.2. A SPECCY diszk logikai felépítése
Logikailag a SPECCY diszk három, részre osztható:

  1. directory terület,
  2. térkép terület és
  3. 3. adatterület.

A directory terület egyrészt a diszk egészére vonatkozó információkat, másrészt a file-okra, mint egészekre vonatkozó információkat tartalmaz. A directory terület minden esetben a diszk első oldalán (side 0), a T0 első 7 szektorát (S1,..S7) foglalja le.
A térkép terület az adatterület "térképét" tartalmazza. Ennek a térképnek a segítségével válik lehetségessé, hogy az egyes file-ok szektorai az adatterületen szükség esetén teljesen összevissza, más file-okhoz tartozó szektorokkal összekeveredve helyezkedhessenek el, biztosítva ezzel az adatterület tökéletes kihasználását. Ugyancsak a térkép ad lehetőséget a file-on belüli véletlen szektorhozzáférésre, azaz arra, hogy egy file N-edik szektorát az azt logikailag megelőző N-l szektor végigolvasása nélkül beolvashassuk vagy írhassuk. Ugyancsak a térkép ad lehetőséget file-on belüli előre, ill. hátrafelé való keresésre. A térkép mindig a diszk első oldalán (side 0) van. Az adatterület foglalja le a diszk legnagyobb részét.
Az adatterület a file-ok adattartalmát foglalja magában. Az adatterület tartalmazhat hibás, nem használt szektorokat is (max 128), míg a directory és a térkép terület csak hibátlan szektorokból állhat.
A 3-2 táblázat a térkép terület track és szektorfoglalását mutatja. (SS = egyoldalas, DS = kétoldalas diszk, SD = szimpla, DD = dupla sűrűség). Az adat terület a térkép utáni track-en kezdődik.

Konfiguráció
Térképterület
SD
Térképterület
DD
35T-SS
40T-SS
45T-SS
80T-SS
40T-DS
80T-DS
T1: s1...s7
T1: s1...s8
T1: s1...s6
T1: s1-s9, T2.: s1-s7
T1: s1-s9, T2.: s1-s7
T1,2,3: S1-s9, T4. s1-s4
T1: s1...s11
T1: s1...s12
T1:s1...s11
T1:s1-s15, T2:s1-s10
T1:s1-s15, T2:s1-s10
T1,2,3: s1-s15, T4:s1-s4

3.2.1. A Directory terület felépítése
A directory terület tartalom szerint két részre osztható:
T0S1 a diszkre, mint egészre vonathozó információkat, valamint az un. directory térképet tartalmazza, míg
T0/S2...S7 az egyes file-okra vonatkozó információkat tartalmazza.

T0/S1 felépítése

Rendszerazonosító byte-ok

A diszk neve

Ez a 8 byte a diszk nevét tartalmazza, szükség szerint space-ekkel 8 karakterre kiegészítve.

A diszk leíró byte-ja (0DH)

A leíróbyte bitenként van értelmezve:

A diszkre vonatkozó egyéb információk

0EH B0...B6: A diszk egy oldalán levő track-ek száma
B7: 0: ha egyoldalas, 1, ha hétoldalas diszk.
0FH Az egy track-en levő szektorok száma (7/10/13/16)
12H, 13H A diszk összes szektorainak száma, nem levonva a hibás szektorokat, de levonva a directory, valamint a térkép terület szektorait és a nem használt ép szektorokat. (Azaz: az adatterület szektorainak száma.)
14H A file-ok maximális száma.
15H Az inicializáláskor felismert sérült szektorok száma.
16H, 17H A létező file-ok által lefoglalt szektorok száma az adatterületen.

Az autoboot file-ra vonatkozó információk

A soron következő 25 byte (18H....30H) a létező autoboot file 25 byte hosszú file-directory-jának másolata. Ennek belső felépítését lásd később.

27 byte hosszú kihasználatlan terület (31H...4BH)

Kódolt filenevek területe (4CH...87H)

Ezen a 60 byte hosszú területen minden lehetséges file-hez tartozik egy byte, mégpedig az első byte a file-directory-ban első file-hoz tartozik, a második byte a második file-hoz, stb. Ha az adott file létező file, akkor a neki megfelelő byte-ra a file nevéből képzett 1 byte-os kód kerül. A kódot, úgy képezzük, hogy a 8 karakterre kiegészített file-név karakterkódjainak MOD 256-os összegét vesszük. Ezek a kódok a file-név szerinti keresést gyorsítják meg.

A directory térkép

A T0/S1 utolsó 120 byte-ját a directory térkép foglalja le. Ez a térkép nem más, mint egy táblázat, amely az egyes 25 byte hossza file directory-k lokalizálását szolgálja a T0 track s2....s7 szektorain belül. A 120 byte-os terület 60 db 2 byte széles, un. directory pointer-t foglal magába. Az első pointer (88H,89H) a file directory-n belül az első file-helyhez tartozik, a második pointer (8AH,8BH) a másodikhoz, stb. Az említett 25 byte-os file-helyeket, amelyek a T0 track s2....s7 szektorait foglalják le file directory-knak nevezzük, és részletes felépítésükről a következő pontban lesz szó. A 2 byte-os directory pointer a 3-5. ábrán látható, bitenkénti bontásban.

1 byte:


3-5. ábra

2 byte: Az illető file directory legelső byte-jának relatív címe az adott szektoron belül. Ez a byte a következő értékeltet veheti fel: 00H, 19H, 32H, 4BH, 64H, 7DH, 96H, AFH, C8H, ill. E1H

T0 S2...S7 felépítése

Ezek a szektorok tartalmazzák az un, file directory-kat. Minden lehetséges file-hoz tartozik egy-egy 25 byte hosszú terület, a file directory-ja, amely ha a file létezik, az adott file-re vonatkozó adatokat tartalmazza. Egy-egy szektor 10 file directory-t tartalmaz, a szektor legutolsó 6 byte-ja kihasználatlan. A file directory felépítése a következő. (Az egyes byte-okat a file directory legelső byte-jától kezdve 00H-tól 18H-ig számozzuk).

00H
  • FFH, ha a file directory nem tartalmaz létező file-t,
  • A file típuskódja, ha a file directory létező file-t tartalmaz. A file típuskódja:
    0: BASIC program a változóival
    1: Számtömb
    2: Karaktertömb
    3: CODE vagy SCREEN$ file
01H...08H A file neve szükség szerint space-ekkel 8 karakterre kiegészítve.
09H, 0AH Kihasználatlan (Tartalma 20H, 20H vagy 00H, 00H)
0BH, 0CH A file hossza (0BH - LO, 0CH - HI)
0DH, 0EH, 0FH, 10H Ezen byte-ok tartalma a file típusától függ (A nem specifikált értékek definiálatlanok.)
Típuskód = 0
(BASIC)
0EH: 80H, ha a file LINE megadása nélkül lett SAVE-elve.
0DH, 0EH: A LINE után megadott sorszám, egyébként. (0DH - LO)
0FH10 10H: A program hossza változók nélkül (0FH - LO)
Megjegyzés: 0FH,10H=(vars)-(prog), 0BH,0CH=(E-LINE)-(PROG)+1
Típuskód = 1 vagy 2
(tömb)
0EH tartalma:
(3-6. ábra)

Megjegyzés: A tömb betűjelének kódja nem más, mint a tömb betűjelének kisbetűs megfelelőjének ASCII kódja mínusz 60H.
Típuskód = 3
(CODE)
0DH, 0EH: Az a memória kezdőcím, ahonnan a file mentése történt. (0DH - LO)
0FH, 10H: 00, 00, ha a file rögzítésekor nem specifikáltak futtatási kezdőcímet. Ha igen, akkor a lezdőcím.
11H A file attributumbyte-ja, amelynek felépítését a 3-7. ábra mutatja:

3-7. ábra
12H A file egyszeri rögzítéséhez szükséges szektorok száma mínusz 1.
13H, 14H A file (ill. kétszeresen rögzített file esetén a fő file) első szektorpointerének címe a térkép területén belül. E két byte telepítését a 3-8. ábra mutatja.

3-8. ábra
15H A file utolsó byte-jánek sorszáma (0..255) a file utolsó szektorában.
16H, 17H Kétszeresen rögzített file esetén a mellék-file első szektorpointerének címe a térpép területén belül. Lásd: 3-8. ábra.
18H Az adott file-directory sorszáma. (0...59D)

3.2.2. A térkép felépítése
A térkép-terület az adatterület struktúráját írja le. Az egyes file-ok szektorainak a diszken való elhelyezkedése a térkép alapján követhető nyomon. A térpép-területen az adat-terület minden egyes szektorához tartozik egy 40 bit széles, un. szektorpointer. Ha a diszken egy több szektorból álló file-t hozunk létre, akkor ezekből a szektorpointerekből egy ún. Lánc keletkezik, amely annyi szektorpointert tartalmaz, ahány szektorból áll a file. Kétszeresen rögzített file esetén mind a fő, mind a mellék-file-hoz külön tánc tartozik. A lánc (illetve láncok) első elemének a térképterületen belüli címét a file directory 13H, 14H, (ill. 16H, 17H) byte-jai tartalmazzák. A szektorpointer 5 féle információt tartalmaz:

1. Jó, vagy hibás-e a szektor,
2. tartozik-e file-hoz, vagy nem,
3. a szektor adatterületen belüli címe,
4. 5. és a megelőző és a következő szektorpointer címe.

A szektorpointer felépítését a 3-9. ábra mutatja.

4. A SPECCY-DOS szubrutinok áttekintése

Idáig haladva az olvasásban az olvasó már eleget tud a SPECCY-DOS-ról ahhoz, hogy a következő pontokat, amelyet a SPECCY-DOS szubrutinjait ismertetik, maradéktalanul megértse. E pontban, röviden áttekintjük az ismertetésre kerülő szubrutinokat, amelyeket két csoportra oszthatunk, miszerint
1. változó című szubrutinok és
2. kötött című szubrutinok.
A változó című: szubrutinokra jellemző, hogy belépési címeik a SPECCY-DOS egyes verzióiban eltérőek lehetnek. Arról, hogy hogyan lehet e szubrutinokat verziótól függetlenül hívni, a következő fejezet ad felvilágosítást.
A kötött című szubrutinok körébe elsősorban restart területen futó szubrutinokat sorolunk, másrészt olyan belépési pontokat, amelyeknek címe egyéb okokból verziótól függetlenül kötött. A 4-1. táblázat a változó cirom szubrutinok, a 4-2. táblázat a kötött című szubrutinok és belépési pontok funkcióit tartalmazza. (Az alkalmazott elnevezések természetesen nem kötelező jellegűek, a felhasználó módosíthatja őket).

Változó című szubrutinok
Nr. Név Funkció
1 SAVE Ugyanaz, mint a SAVE#... DOS-BASIC parancs funkciója.
2 LOAD Ugyanaz, mint a LOAD#... DOS-BASIC parancs funkciója.
3 DELETE File törlése a diszkről.
4 COPY Ugyanaz, mint a COPY#... DOS-BASIC parancs funkciója.
5 RENAME File átnevezése a diszken.
6 SRFILE Adott file filenév alapján való megkeresése a diszken.
7 CREFIL Adott méretű, típusú és nevű üres file létrehozása a diszken.
8 COLECT Adott file-hoz tartozó adatterület-beli szektorcímek kigyűjtése a memóriába.
9 FLREAD Megnyitott file N-edik szektorának leolvasása.
10 FLWRITE Megnyitott file N-edik szektorának írása.
11 RDFILE Megnyitott file összes szektorának leolvasása.
12 WRFILE Megnyitott file összes szektorának felírása.
13 SECTRD Adott diszk-szektor leolvasása fizikai címe alapján.
14 SCWRIT Adott diszk-szektor felírása fizikai címe alapján.
15 RDYCON Drive működésre kész állapotának ellenőrzése.
16 TYPONE 1-es típusú FDC parancsok kiadása.
17 HEXDC1 8 bites hexadecimális decimális konverter.
18 HEXDC2 16 bites hexadecimális decimális konverter.
19 ERASE Képernyő és attributum-terület törlése.

4-1. táblázat

 

Kötött című szubrutinok
Nr. Név Cím Funkció
20 ERROR 0010H Program futásának megszakítása hibajelzéssel.
(Nem valódi szubrutin, nem tér vissza a hívás helyére.)
21 DSTRAM 0018H Szöveg kiírása a képernyőre, vagy ZX printerre.
22 BASRUT 0028H BASIC ROM-ban lévő szubrutinok hívása, ha a DOS van kiválasztva.
23 IDENTS 0030H Diszk azonosítása.
24 ROMXCG 0046H Visszaváltás a DOS ROM-ról BASIC ROM-ra.
(Nem valódi szubrutin, nem tér vissza a hívás helyére.)

4-2. táblázat

5. A SPECCY-DOS szubrutinjainak hívása más programok által
Ebben a fejezetben azokat a tudnivalókat ismertetjük, amelyen a SPECCY-DOS szubrutinjainak felhasználói programból való hívására általánosan, azaz a hívott szubrutin egyedi tulajdonságaitól függetlenül érvényesek.

5.1. ROM váltások
Általános esetben a BASIC RAM -ban futó felhasználói program mind a BASIC-ROM, mind a SPECCY-ROM szubrutinkészletét használhatja. Ehhez természetesen az szükséges, hogy az adott szubrutin meg hívása előtt a megfelelő ROM legyen kiválasztva. Mindaddig, amíg a DOS van kiválasztva, az interrupt-oknak letiltva kell lenniük. A felhasználói program sematikus folyamatábráját a fentiek alapján az 5-1. ábrán láthatjuk.


5-1. ábra

1. Kiindulás BASIC-ből. 2,6,; saját műveletek végzése a BASIC RAM-ban, miközben mindegy, hogy a BASIC ROM (2), vagy a SPECCY-ROM (6) van kiválasztva.
3. A BASIC ROM szubrutinjainak hívása. 4./ Átváltás SPECCY ROM-ra.
5. A SPECCY ROM szubrutinjainak hívása. 7./ Visszaváltás BASIC ROM-ra.
8. Visszatérés BASIC-be, azaz a program vége.

5.2. A változó című SPECCY szubrutinok hívása
A 4-1. táblázatban közölt SPECCY-DOS szubrutinok ROM-beli címe az idő haladtával kibocsátott mind nagyobb tudású verziókban eltérő lehet jóllehet, az eltérések kicsik, első közelítésben, ez mégis lehetetlenné tenné olyan felhasználói programok készítését, amelyek módosítás nélkül minden verzióval kompatibilisek. Az ennek a problémának a megoldására a SPECCY-DOS-ban alkalmazott eljárás lényege, hogy az aktuális hívási címek az adott ROM! verzió és egy un. referencia táblázat birtokában egvszerű számítással software úton meghatározhatók, azaz a szubrutinok verzió függetlenül hívhatók. A referencia táblázat az egyes szubrutinokhoz tartozó un. -referencia címeket tartalmazza. Az egyes ROM verziókban, a verziótól független rögzített címeken az egyes szubrutinok referencia címeinek és aktuális címeinek különbsége találkató meg, 8 biten ábrázolva.
Ennek az un. offset byte-nak a felépítése az 5-2. ábrán látható.


5-2. ábra

Az OFFSET definíciója: OFFSET = (aktuális cím) - (Referencia cím)

S-0: Az OFFSET előjele:
0, ha OFFSET >=0
1 egyébként

ABS-OFFSET: az OFFSET abszolút értéke 0.127

Az egyes SPECCY szubrutinok referencia címeit és a hozzájuk tartozó OFFSET byte-ok SPECCY-ROM-beli címeit az 5-1 táblázat mutatja. Ezen információk birtokában a felhasználónak megvan a lehetősége, a kívánt szubrutinok verzió-független hívására. Mi a következőkben két kidolgozott módszert ismertetünk, az un. Általános hívást és az egyedi hívást.

CODE
Szubrutin neve
Referencia cím
OFFSET byte címe
Bemeneti regiszterhasználat
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
SAVE
LOAD
DELETE
COPY
RENAME
SRFILE
CREFIL
COLECT
FLREAD
FLWRITE
RDFILE
WRFILE
SECTRD
SCWRIT
RDYCON
TYPONE
HEXDC1
HEXDC2
ERASE
0E29H
0E45H
106FH
1184H
111FH
0669H
073BH
0A93H
0BF6H
0C4FH
0D06H
0D61H
01A4H
0211H
012AH
1D14H
00ABH
00BEH
13AFH
1FFFH
1FFEH
1FFDH
1FFCH
1FFBH
1FFAH
1FF9H
1FF8H
1FF7H
1FF6H
1FF5H
1FF4H
1FF3H
1FF2H
1FF1H
1FF0H
1FEFH
1FEEH
1FEDH
IX, HL
IX, HL
H, L
D, E, H, L
D, E, H, L
A, H, L
A, H, L
A
A, B, H, L
A, B, H, L
A, H, L
A, H, L
D, E, H, L
D, E, H, L
-
-
E
D, E
-

CODE: Az általános hívásnál használt szubrutinkód.

5.2.1. Általános hívás
A változó című SPECCY-DOS szubrutinok általános hívásának lényege, hogy az egyes szubrutinok egyedi hívása helyett mindig ugyanazt a szubrutint hívjuk, és egy 1 byte-os kóddal tudatjuk ezzel a szubrutinnal, hogy melyik szubrutint kívántuk meghívni. Ha ezt a közös szubrutint SPECCY szubrutinnak nevezzük, akkor az általános hívás a következőképpen néz ki:

CALL SPECCY
DB SRCODE

ahol SRCODE a meghívandó szubrutin kódja (1...19). Az egyes szubrutinokhoz tartozó kód az 5-l. táblázat első oszlopában található meg. A SPECCY szubrutin, amely a felhasználói program része, a szubrutinkód és a referenciatáblázat ismeretében kiszámítja az adott szubrutin aktuális címét, anélkül, hogy a regiszterek tartalmát módosítaná, majd a vezérlést a kívánt szubrutinnak adja át úgy, hogy az lefutása után az eredeti hívási helyre tér vissza. Az általános hívás egyetlen hátránya, hogy a SPECCY szubrutin, a referenciatáblázattal együtt 79 byte programterületet igényel. A SPECCY szubrutint Z80 gépi kódban az 5-3 ábra mutatja.


5-3. ábra

Az ábra első része a SPECCY szubrutin, második része pedig a referenciatáblázat, amelyet az 5-1. táblázatból képeztünk. A szubrutin és a táblázat egymástól függetlenül a programterület bármely részén elhelyezhető, azonban a SPECCY szubrutinnak, ismernie kell a referenciatáblázat kezdőcímét. Ha például a referenciatáblázat kezdőcíme 8000H, akkor HH és XL értéket a következőképpen számítjuk ki:

XH = 8000H - 2H = 7FFEH
XL = 7FH és XL = FEH

Az általános hívást akkor célszerű hasznáni, ha viszonylag sok SPECCY-DOS szubrutint használunk egy programban és / vagy ha elegendő terület áll rendelkezésre.

5.2.2. Egyedi hívás
Az egyedi kivés lényege, kegy a felhasználói programban minden egyes hívandó változó című szubrutinhoz tartozik egy kis, néhány byte-os szubrutin, ami az adott szubrutin címhelyes hívásáról gondoskodik. Szükség van még egy, ugyancsak rövid, az egyedi szubrutinok által közösen használt szubrutinra, amit itt "COMCAL"-nak neveztünk el. Az egyedi szubrutinoknak célszerűen a SPECCY-DOS-ban is használt neveket adhatjuk. Így pl. a SAVE nevű SPECCY-DOS szubrutin hívása a felhasználói programban CALL SAVE lesz. Az egyedi szubrutinok felépítése a következő:

PUSH HL
PUSH AF
LD HL,REFADDR
LD A,(OFFS-ADDR)
CALL COMCAL
POP AF
EX (SP),HL
RET
; REFADDR: a meghívandó SPECCY-DOS
; szubrutin referenciacíme

; OFFS-ADDR: ameghívandó SPECCY-DOS
; szubrutin offset byte-jának címe

; Ezek konkrét értékeit az 5-1. táblázatból
; vehetjük.

Az alábbi két példa a SAVE és az ERASE nevű SPECCY-DOS szubrutinhoz tartozó egyedi szubrutinokat mutatja, a szubrutinok eredeti neveit megtartva.

SAVE: PUSH HL
PUSH AF
LD HL,0E29H
LD A,(1FFFH)
CALL COMCAL
POP AF
EX (SP),HL
RET
ERASE: PUSH HL
PUSH AF
LD HL,13AFH
LD A,(1FEDH)
CALL COMCAL
POP AF
EX (SP),HL
RET

Az egyedi szubrutinok által közösen hívott, itt "COMCAL"-nak nevezett szubrutin a következő:

COMCAL:










ADDR-DONE:
BIT 7,A
PUSH DE
PUSH AF
AND 7FH
LD E,A
LD D,0
SBC HL,DE
POP AF
JR NZ,ADDR-DONE
ADD HL,DE
ADD HL,DE
POP DE
RET
; A COMCAL szubrutin a hívandó

; SPECCY-DOS szubrutin aktuális címét
; (output-HL) számítja ki a
; referenciacím
; (input-HL) és az offsetbyte
; (input-A)
; alapján.

Megjegyezzük, hogy az egyedi szubrutinok hossza esetenként tovább csökkenthető, ha kihasználjuk, hogy nem minden regiszter tartalmának kell változatlanul maradnia az egyedi szubrutin belépési pontjától a SPECCY-DOS szubrutin belépési pontjáig. Ez a hívott szubrutin bemeneti interface-étől , az általa módosított regiszterektől és magától a felhasználói programtól függ. Ezért tüntettük fel az 5-1. táblázatban a bemeneti regiszterhasználatot is. Pékdául a fenti ERASE szubrutin hossza 10 byte-ra csökken, ha A és HL módosítható:

ERASE: LD HL,13AFH
LD A,(1FEDH)
CALL COMCAL
JP (HL)

6. A SPECCY-DOS RAM-területe
A SPECCY-DOS RAM-területe a 2000H-23FFH címeket foglalja le. Ennek az 1 byte-nyi területnek a rendszer csak egy részét használja. A 2320H-23FFH közötti 224 byte hosszú terület szabad, ezt a felhasználói programok minden megkötés nélkül használhatják, A falhasználó saját felelőségére a 2000H-231FH közötti területet is használhatja, ez esetben azonban fennáll annak a lehetősége, hogy a SPECCY-DOS szubrutinok hívásakor ennek a területnek egyes részei felülíródnak. Adott esetben próbálkozással dönthetjük el, hogy a használni kívánt terület egy konkrét felhasználói programban használható-e, vagy nem. Ezt azonban csak akkor tegyük, ha a 2320H - 23FFH közti terület nem elegendő. Megadunk azonban olyan címeket, amelyeknél biztos, hogy nem íródnak felül feltéve, hogy az e kézikönyvben közölt SPECCY-DOS szubrutinokat használjuk. Ezek a következők:

2001H ... 200DH; 20A4H ... 20CBH; 22CDH ... 2317H

 

Ez további 128Byte-ot jelent a felhasználói programok változóinak számára.
A rendszer által használt RAM terület egyrészt bufferekre, másrészt memóriaregiszterekre oszlik. A DOS által használt bufferterületek a következők:

DUSBUF: 20CCH ... 21CBH A rendszer 256 byte-os fő buffere
PRTBUF: 21CCH ... 22CBH 256 byte-os buffer, főként az aktuális file szektorcímeinek tárolására.
UNIBUF: 2064H ... 2083H 32 byte-os, változó célokra használt buffer
DIRBF0: 2024H ... 203CH 2 db 25 byte-os buffer, az aktuális file(ok) file directory-jának tárolására.
DIRBF1: 203DH ... 2055H

Azoknak a memóriarekeszeknek a címét és felhasználási módját, amelyeknek ismerete a felhasználó számára fontos lehet, a velük kapcsolatos szubrutinoknál ismertetjük. Végül emlékeztetünk arra, hogy a DOS-RAM csak akkor hozzáférhető, ha a DOS van kiválasztva.

7. A SPECCY-DOS szubrutinjainak ismertetése
E fejezetben az egyes SPECCY-DOS szubrutinok konkrét software interface-eit ismertetjük. A CCPY szubrutin kivételével minden itt ismertetett szubrutinra vonatkozik, hogy az adott diszk művelet azon a drive-on történik, amelyik a szubrutin meghívásakor ki van jelölve. Ezt a 3841H címre legutoljára kiadott kódszó határozza meg, és ugyanezt a kódszót kell tartalmaznia a DFLAG1 nevű, 2000H című memóriarekesznek is (lásd 2.1. pont). Hasonlóképpen, az ismertetett szubrutinok gondoskodnak arról, hogy kilépéskor DFLAG1-ben a 3B41H-ra legutoljára kiadott kódszó található.

SAVE Ugyanaz a funkciója mint a SAVE#... DOS-BASIC parancsé.
Input:
  • IX egy 18 byte hosszú file-leíró terület kezdőcímére mutat, amely bárhol lehet, a DOS vagy BASIC RAM-ban.
  • HL a diszkre elmentendő terület kezdőcímére mutat.
Output:
-
Modified:
A, F, B, C, D, E, H, L

A 18 byte hosszú terület felépítése és HL tartalma.
A terület byte-jait 00H-tól 11H-ig számozzuk. Az itt nem definiált értékek nullák.

00H: A létrehozandó file típuskódja:
00: BSIC program a változóival
01: Számtömb file
02: Karaktertömb file
03: CODE vagy SCREEN$ file

01H.08H: A file neve (ASCII) szükség szerint space-ekkel (20H) 8 karakterre kiegészítve, hasznos karakterek balra helyezve. Megjegyzés: "filenév" alatt a továbbiakban mindig ezt kell érteni!

09H, 0AH: Tartalék byte-ok. Tartalmuk: 00H, 00H.

0BH, 0CH: A létrehozandó file hossza, azaz byte-jainak száma. Megjegyzés: itt, és a továbbiakban is, a két byte széles értékek első byte-ja az alacsonyabb, a második a magasabb helyértékű.

0BH, 0CH értéke a különböző file típusok esetén. (Lásd még SPECTRUM leírás).

típuskód (004) (0BH, 0CH) = A file hossza.
00H (BASIC) (E-LINE) - (PROG) +1
01H, 02H (tömb) A tömb hosszleírója által meghatározott érték.
03H (CODE) A diszkre mentendő byte-ok

0DH, 0EH, 0FH, 10H: Ezen byte-ok értelmezése a file típusától függ:

típuskód = 00H (BASIC)

típuskód = 01H vagy 02H


Megjegyzés: A tömb betűjelének kódja nem más, mint a tömb betűjelének kisbetűs megfelelőjének ASCII kódja mínusz 60H.

típuskód = 03H

11H: A létrehozandó file attributumait tartalmazza. Felépítése a 3-7. ábrán látható (3.2.1 fejezet), azzal a kiegészítéssel, hogy jelen esetben B7 (MSB)=0.

Az input HL tartalma a különböző file-típusok esetén (lásd még a SPECTRUM leírás 24 fejezetét):

típuskód (00H) input HL

00H (BASIC)

01H, 02H (tömb)

03H (CODE)

(PROG)

A tömb hosszleíróját követő byte címe

A diskre mentendő terület kezdőcíme
(azonos 0DH, 0EH-vel)

LOAD Ugyanaz a funkciója mint a LOAD#... DOS-BASIC parancsé. Az egyetlen kivétel az, hogy olyan BASIC file-ok betöltésekor, amelyeket LINE megadásával rögzítettek, a betöltött BASIC program nem kezd azonnal futni, mint a LOAD#-nál.
Input:
  • IX egy 17 byte hosszú file-leíró terület kezdetére mutat, amely bárhol lehet a BSIC, vagy a DOS RAM-ban.
  • HL a file típusától függő értéket tartalmaz.
Output:
-
Modified:
A, F, B, C, D, E, H, L

A 18 byte hosszú terület felépítése és HL tartalma.
A terület első 11 byte-jának tartalma teljesen megegyezik a SAVE szubrutinnál tárgyalt 18 byte-os leíróterület első 11 byte-jának tartalmával. A többi byte tartalma a file típusától függ. Az itt nem definiált byte-ok 00H-t tartalmaznak.

Típuskód = 00H:

0BH, 0CH a SPECTRUM-ban pillanatnyilag tartózkodó BASIC program és változóinak együttes hosszát tartalmazza.

0FH, 10H: a program önmagában vett hosszát tartalmazza, azaz 0FH.
10H = (VARS) - (PROG)
input HL = (PROG)

Típuskód = 01H vagy 02H (tömb):

0BH, 0CH a betöltendővel azonos nevű tömb hosszát tartalmazza, ha van ilyen a SPECTRUM-ban.

Input HL: a betöltendővel azonos nevű tömb hosszleíróját követő byte címét tartalmazza, ha van ilyen. HL=0, ha nincs ilyen tömb.

Típuskód = 03H (CODE):

0BH, 0CH a betöltendő program megengedhető maximális hosszát tartalmazza, ha specifikáljuk. 0BH, 0CH = 00, 00, ha nem.

Input HL: a betöltési kezdőcím, ha specifikáljuk. HL=0000 egyébként.

DELETE File törlése a diszkről (Lásd: ERASE# parancs)
Input:
  • HL a filenév első karakterére mutat a memóriában.
Output:
-
Modified:
A, F, B, C, D, E, H, L

 

COPY File másolása (Lásd a COPY# DOS-BASIC parancs)
Input:
  • HL az output filenév első karakterére mutat a memóriában.
  • DE a forrás filenév első karakterére mutat a memóriában.
  • A DOS RAM-ban 20BBH címen lévő (névtelen) rendszerváltozó az output drive kódját tartalmazza (8-1 ábra)

    B1
    B0
    Drive
    0
    0
    1
    1
    0
    1
    0
    1
    drive 0
    drive 1
    drive 2
    drive 3
    20C6H - forrás,
    20BBH - output
  • DOS-RAM-ban 20C6H címen lévő (névtelen) rendszerváltozó a forrás drive kódját tartalmazza (8-1 ábra).
  • DOS-RAM COPYFG nevű, 22CCH című rendszerváltozója: 0, ha engedélyezzül, hogy egydrive-os COPY esetén a forrás és az output diszk különböző legyen. COPYCFG <> 0 egyébként.
Output:
-
Modified:
A, F, B, C, D, E, H, L

Egy drive-on belüli másolás esetén a rendszer mindig lehetőséget ad arra, hogy a forrás és az output-diszk különböző legyen, ha a másolást BASIC-ből végezzük. Ehhez azonban szükséges, hogy a fordulók között valaki leüsse az ENTER gombot. A COPYFG által való választási lehetőség az egy drive-on belüli, egy diszken való automatikus (ENTER nélküli) másolást teszi lehetővé.

RENAME File átnevezése
Input:
  • HL a filenév első karakterére mutat a memóriában.
  • A-ban: 0, ha DIRBF0-ba kívánjuk beolvastatni a file 25 byte-os directory-ját, A<>0 ha a DIRBF1-be.
Output:
-
Modified:
A, F, B, C, D, E, H, L

 

SRFILE Adott nevű file megkeresése a diszken. Ha a file létezik, akkor a szubrutin a file directory-ját bemásolja a kívánt bufferbe.
Input:
  • HL az új file-név első karakterére mutat a memóriában.
  • DE a régi file-név első karakterére mutat a memóriában.
Output:
  • CY = 1, ha nincs a diszken az adott file. CY=0, ha az adott nevű file létezik a diszken.
  • E-ben annak a T0-on belüli szektornak a címe, amelyben az adott file directory-ja található. Ennek a szektornak a másolata a DOSBUF-ban található.
  • HL a DOSBUF-on belül az adott file directory első byte-jának címét tartalmazza.
Modified:
A, F, B, C, D, E, H, L

 

CREFIL Formálisan teljesen kész, de még "üres" kitöltetlen file létrehozsa a diszken, azaz a szükséges adatterület lefoglalása és a file bejegyzése a diszk directory-ba. A kialakult file directory bemásolása a DIRBF0 / DIRBF1-be.
Input:
  • HL egy 18 byte hosszú file-leíró terület kezdőcímét tartalmazza. E terület felépítése megegyezik a SAVE szubrutinnál ismertetett 18 byte-os file-leíró terület felépítésével.
  • A = 0, ha DIRBF0-ba, A <> 0, ha DIRBF1-be kívánjuk elhelyezni a file kialakított 25 byte-os directory-ját.
Output:

DIRBF0-ban, ill. DIRBF1-ben a file kialakított directory-ja.

Modified:
A, F, B, C, D, E, H, L

A szubrutin által létrehozott file csak abban tér el egy kész file-tól, hogy az adatterülete nem tartalmaz hasznos adatot.

COLECT A COLECT szubrutin adott file szektorcímeinek írás, vagy olvasás céljából való összegyűjtésére szolgál.

A bufferméretek korlátozott volta miatt egy fille-hoz tartozó szektorcím nem mindig gyűjthető egyszerre össze. Ezért a COLECT szubrutin ciklikus hívásra készült. A szektorcímek kigyűjtése a PRTBUF bufferbe történik. A szubrutin vagy a teljes PRTBUF-ot, vagy csak egyik felét tölti le, attól függően, hogy egyidejűleg csak egy, vagy pedig két file szektorcímeire van szükségünk.

Ha a file kétszeres rögzítésű, akkor a szubrutin a PRTBUF-nak, (illetve valamelyik felének) az alsó felét a fő file, a felső felét a mellék-file azonos adattartalmú részeinek szektorcímeivel tölti fel.

Input:
  • A regiszter, mint input kontrol regiszter. Az egyes bitek értelmezése:
    • B0 (LSB) = 0, ha a DIRBF0, B0 = 1, ha DIRBF1 tartalmazza annak a file-nak a directory-ját, amelynek szektorcímeit keressük.
    • B1 = 0, ha teljes PRTBUF, B1 = 1, ha csak a fél PRTBUF töltendő fel szektorcímekkel. Ez attól függ, hogy a PRTBUF-ban egyidejűleg csak egy, vagy pedig 2 file szektorcímeit tároljuk (pld. COPY-nál két file szektorcímeit kell tárolni)
      Ha B1=1, akkor B0=0 a PRTBUF alsó, B0=1 esetén PRTBUF felső felét tölti fel a szubrutin.
    • B2 = 0, a COLECT szubrutin első hívásakor. Ekkor az FSNR és az LSTMS nevű regiszterekben (lásd később) még nincs hasznos adat, és a file szektorcímeinek kigyűjtése DIRBF0, vagy DIRBF1 tartalma alapján történik.
      B2 = 1 a COLECT szubrutin soron következő hívásakor. Ekkor újabb szektorcímek kigyűjtése, az FSNR és az LSTMS nevű regiszterek tartalma alapján történik. B2=1 esetén e regiszterekben a szubrutin megelőző hívásakor kialakult értékeknek kell lenni (lásd output).
Output:
  • A PRTBUF buffer megfelelő részében a kigyűjtött szektorcímek. Egy-egy szektorcím 2 byte szélességű és a 7-2 ábrán látható felépítésű:

    A 7-2. ábra szerinti felépítésű 2 byte-os szektorcímek a PRTBUF-ban folyamatosan követik egymást. A file N-edik szektorának címét az N+1-edik szektor címe követi. A szubrutin egy meghívásakor kigyűjtött szektorcímek közül az elsőnek a címét a 7-3. táblázat tartalmazza:

    Kezdőcím
    Eset
    PRTBUF B1 = 0 B0 = X NRF
    PRTBUF B1 = 0 B0 = X DRF MF
    PRTBUF + 128 B1 = 0 B0 = X DRF SF
    PRTBUF B1 = 1 B0 = 0 NRF
    PRTBUF B1 = 1 B0 = 0 DRF MF
    PRTBUF + 64 B1 = 1 B0 = 0 DRF SF
    PRTBUF + 128 B1 = 1 B0 = 1 NRF
    PRTBUF + 128 B1 = 1 B0 = 1 DRF MF
    PRTBUF + 192 B1 = 1 B0 = 1 DRF SF

    Jelölések: B0, B1 = input A, bit 0 ill. bit 1. X = DON'T CARE, NRF = egyszeresen rögzített file, DRF = kétszeresen rögzített file, MF = fő-file (DRF-nél), SF = mellék-file (DRF-nél)
    A hívásonként kigyűjtött szektorcímek maximális száma B1=0 esetén 128, B1=1 esetén 64. Ez kétszeres rögzítésű file esetén a file adattartalma szempontjából 64 ill. 32 szektornak az elérését teszi lehetővé, mivel ez esetben a file minden (logikai) szektorához két (fizikai) diszk szektor tartozik, egy a fő-, egy a mellékfile-ban.

  • A szubrutin megadja a kigyűjtött szektorok közül a file-on belül legkisebb és legnagyobb sorszámúnak a sorszámát. Nevezzük ezeket az értékeket FSNRMIN, ill. FSNRMAX-nak. Mivel egy file maximum 256 szektorból állhat, az FSNR értéke 0.255 lehet. Az FSNR értékek megadása a DRBPTB nevű, 2017H című rendszerváltozót követő 4 byte-nyi területen történik. E területet mutatja a 7-3. ábra:

    Azt, hogy mely esetben melyik rekeszben található meg az FSNRMIN, ill. FSNRMAX, a 4-1 táblázat tartalmazza (A jelölések azonosak a 7-3 táblázatnál megismertekkel.):

    B1
    B0
    FSNRMIN címe
    FSNRMAX címe
    0
    1
    1
    X
    0
    1
    DRBPTB+1
    DRBPTB+1
    DRBPTB+3
    DRBPTB+2
    DRBPTB+2
    DRBPTB+4

  • A szubrutin megadja annak a szektorpointernek (ill. kétszeres rögzítésű file-nál szektorpointerek) a térképterületen belüli címét, ami az előző pontban említett FSNR max. sorszámú file szektorainak a címét tartalmazza. Ez az LSTMS nevű, 201CH kezdőcímű 8 byte szélességű rendszerváltozó területen történik, amelyet a 7-4. ábrán láthatunk:

    +0, vagy +2: a szektorpointer track és szektorcíme
    +1, vagy +3: a szektorpointer szektoron belüli sorszáma.
    A két byte széles mezők (+0, +1, vagy +2, +3) tartalmáról lásd a 3-8. ábra.
    Azt, hogy az egyes esetekben melyik két byte-os mező tartalmazza a szektorpointer címét, a 7-5. táblázat tartalmazza.

    Kezdőcím
    Eset
    LSTMS0 +0,+1 B1 = 0 B0 = X NRF
    LSTMS0 +0,+1 B1 = 0 B0 = X DRF MF
    LSTMS0 +2,+3 B1 = 0 B0 = X DRF SF
    LSTMS0 +0,+1 B1 = 1 B0 = 0 NRF
    LSTMS0 +0,+1 B1 = 1 B0 = 0 DRF MF
    LSTMS0 +2,+3 B1 = 1 B0 = 0 DRF SF
    LSTMS1 +0,+1 B1 = 1 B0 = 1 NRF
    LSTMS1 +0,+1 B1 = 1 B0 = 1 DRF MF
    LSTMS1 +2,+3 B1 = 1 B0 = 1 DRF SF

    Jelölések: lásd 8-3. táblázat.
  • A szubrutin a DRBPTB nevű 8017H című rekesz B6, ill. B7 (MSB) bitjét 0-ba állítja. Ezek a bitek az FLREAD szubrutin ciklikus hívásai során annak a megjegyzésére szolgálnak, hogy kétszeres rögzítésű file esetén az olvasás a fő, vagy a mellék-file-ból történik-e. Ezen bitek nullázásával a COLECT szubrutin arra készteti az FLREAD szubrutint, hogy az olvasást a fő-file olvasásával kezdje, és csak akkor térjen át a mellékfile-ra, ha a főfile-ban hibát talál. (Lásd még: FLREAD)
    input - B0 = 0 B7 / DRBPTB 0
    input - B0 = 1 B6 / DRBPTB 0
Modified:
A, F, B, C, D, E, H, L

 

FLREAD Olvasásra előkészített file N-edik szektorának kiolvasása tetszőleges memóriacímre.
Input:
  • A regiszter, mint input kontrol regiszter. Bitenkénti értelmezése:
    • B0 = 0, ha DIRBF0-ban, B0 = 1, ha DIRBF1-ben van elhelyezve az olvasandó file directory-ja
    • B1 = 0, ha teljes PRTBUF, B1 = 1, ha csak a fél PRTBUF tartalmazza a file szektorcímét. (lásd még COLECT input)
  • B-ben: N (0...255)
  • HL-ben az a memória kezdőcím, ahonnan kezdve a szektort beolvassuk. Ha HL = 0, akkor az olvasás a DOSBUF-ba történik.
  • A DRBPTR+1, +2, +3, +4 memóriaregiszterek közül az input A-által a 7-4. táblázat szerint meghatározott kettőben, a pillanatnyi állapotra érvényes FNRMIN és FSNRMAX érték. (Lásd még: COLECT output 2)
  • A PRTBUF input A által a 7-3. táblázat szerint meghatározott részben az FSNRMIN és FSNRMAX közé eső file-szektorok szektorcímei (lásd még: COLECT output 1)
  • A DRBPTB nevű rendszerváltozó B6, vagy B7 bitjén 0, vagy 1 aszerint, hogy kétszeresen rögzített file olvasása esetén az N-edik szektort a fő, vagy a mellékfile-ból kell-e olvasni- Ezt a bitet normál esetben a szubrutin előző hívása, vagy a COLECT szubrutin állítja be. DRBPRTB meghatározó bitje:
    • B7 (MSB), ha input B0 = 0, egyébként B6.
    • B6 ill. B7 = 0: fő file olvasása, B6 ill. B7 = 1: mellék-file.
Output:

A DRBPTB regiszter input-ban meghatározott B6 vagy B7 bitjén a bemeneti érték, ha nem történt olvasási hiba, illetve a bemeneti érték inverze, ha olvasási hiba történt, de a file kétszeres rögzítésű, és a párhuzamos "másik" file azonos sorszámú szektorának olvasása sikeres volt. (Ekkor vált át a file olvasása a fő-file-ról a mellék-file-ra, ill. fordítva.)

Modified:
A, F, B, C, D, E, H, L

A file olvasásra előkészített, ha a fenti input specifikációk teljesülnek.
A szubrutin ciklikus hívásra készült, de másként is használható.
N-nek teljesíteni kell a következő feltételt: FSNRMIN <= N <= FSNRMAX. Ellenkező esetben ERROR 53 keletkezik.

FLWRITE Írásra előkészített file N-edik szektorának írása tetszőleges memóriacímről.
Input:
  • A regiszter, mint input kontrol regiszter. Bitenkénti értelmezése:
    • B0 = 0, ha a DIRBF0, B0 = 1, ha DIRBF1 tartalmazza az írandó file directory-ját.
    • B1 = 0, ha teljes PRTBUF, B1 = 1, ha csak a fél PRTBUF tartalmazza a file szektorcímeit (Lásd: COLECT input)
    • B4 az elvégzendő műveletet határozza meg. B4 = 0: egyszeres rögzítésű file, vagy kétszeres rögzítésű file fő-file-jának írása. B4 = 1: kétszeres rögzítésű file mellék-file-jának írása.
  • B-ben: N (0...255)
  • HL-ben az a memória kezdőcím, ahonnan a szektort felírjuk, ill. HL=0, ha a DOSBUF-ból írjuk a szektort.
  • DRBPTB+1, +2, +3, +4 memóriaregiszterekben, ill. PRTBUF-ban ugyanaz, mint amit az FLREAD szubrutinnál közöltünk.
Output:
-
Modified:
A, F, B, C, D, E, H, L

A szubrutinra az FLREAD szubrutinnal közös megjegyzések vonatkoznak. (Lásd FLREAD)

RDFILE Olvasásra előkészített file összes szektorának beolvasása adott memóriacímtől kezdve.
Input:
  • A regiszter, mint input control regiszter. Bitenkénti értelmezése:
    • B0 = 0, ha DIRBF0, B0 = 1, ha DIRBF1 tartalmazza az olvasandó file directory-ját.
    • B1 = 0, ha a teljes PRTBUF, B1 = 1, ha csak a fél PRTBUF tartalmazza a file szektorcímeit. (Lásd még COLECT input).
  • HL-ben memória kezdőcím a beolvasott szektorok száma.
Output:
-
Modified:
A, F, B, C, D, E, H, L

A file olvasásra előkészített, ha a fenti input specifikációk teljesülnek.

WRFILE Írásra előkészített file összes szektorának felírása adott memóriacímtől kezdve.
Input:
  • A regiszter, mint input control regiszter. Bitenkénti értelmezése:
    • B0 = 0, ha DIRBF0, B0 = 1, ha DIRBF1 tartalmazza az írandó file directory-ját.
    • B1 = 0, ha a teljes PRTBUF, B1 = 1, ha csak a fél PRTBUF tartalmazza a file szektorcímeit. (Lásd még COLECT input).
  • HL-ben memória kezdőcím, amelytől kezdve a file felírása történik.
Output:
-
Modified:
A, F, B, C, D, E, H, L

A file írásra előkészített, ha a fenti input specifikációk teljesülnek.

SECTRD A diszk tetszőleges szektorának beolvasása.
SCWRIT A diszk tetszőleges szektorának írása.
Input:
  • DE-ben a szektor címe a diszken (side, track, sector)
    • D reiszter:
      • B7 (MSB) = diszk oldal kiválasztás: B7=0 side 0, B7=1 side 1
      • B0...B6 = track cím (0...79)
    • E regiszter: a szektorcím a track-en belül (1.16)
  • HL-ben az a memória kezdőcím, amelyiktől az olvasás ill. Az írás történik.
Output:

A-ban 0, ha a művelet sikeres volt, hibakód, ha a művelet sikertelen volt.

Hibakódok:
A hibakód, vagy az FDC-től, vagy a software-től származik. Az FDC-től származó hibakód biteket a 8-5 ábra mutatja:

Ha B2=1, akkor "LOST DATA" hiba keletkezett, azaz a software nem volt képes elég gyorsan kiszolgálni az FDC-t.
Ha B3=1, akkor az FDC CRC hibát észlelt, vagy a szektort azonosító ID mezőben, vagy az adatmezőben.
Ha B4=1, akkor a keresett szektort az FDC nem tudta lokalizálni.
Software-ből származó hibakódok: a software ellenőrzi, hogy pontosan 256 byte beolvasása ill. írása történik-e. Ha ez nem biztosítható, akkor a műveletről és az eltérés előjelétől függően a következő hibakódok keletkeznek:

ERROR 70 READ UNDERRUN byteszám < 256 olvasásnál
ERROR 71 WRITE UNDERRUN byteszám < 256 írásnál
ERROR 72 READ OVERRUN byteszám > 256 olvasásnál
ERROR 73 WRITE UNDERRUN byteszám > 256 írásnál

Megjegyzendő, hogy a software semmilyen esetben nem ír felül 256 byte-bál többet az FDC felé.

Modified:
A, F, B, D, E

A szubrutin az írás ill. olvasás előtt a keresett szektor lokalizálását is elvégzi, azaz a szubrutin meghívásakor nincs követelmény az író-olvasó fej helyzetére nézve.
Sikertelen lokalizálási kísérlet után a szubrutin a szektor lokalizálását még négyszer megkísérli, és csak ezután adja vissza a vezérlést A-ban hibakóddal. Ha a keresett track-et nem sikerül lokalizálni, akkor az egyes kísérletek között a szubrutin az író-olvasó helyzetét újrakalibrálja (RESTORE művelet). Ez a fejnek a T0 fölé vitelét jelenti.
Ha a keresett szektort maximum 5 kísérletből sikerül lokalizálni, akkor a szubrutin megkísérli az olvasást ill. az írást, és ha az első kísérlet sikertelen, akkor még maximum 5-ször megkísérli az olvasást. (Írás esetén csak lokalizálási hiba észlelhető a szektor teljes visszaolvasása nélkül, ami azonban több mint felére csökkentené a sebességet.) A szubrutin tehát max. 5 lokalizálási, ezután max. 6 olvasási kísérletet végez.
Meghíváskor a diszknek már névleges fordulatszámon kell lennie.
Írásvédő szalaggal írásvédett diszkre kiadott írási parancsot az SCWRIT szubrutin fatális hibának vesz, és hibajelzés (ERROR5) kíséretében a rendszerbe tér vissza. Az FDC státuszregiszterének olvasásával (lásd: 2.2 fejezet) a felhasználói program a hardware írásvédelmet érzékelheti.

RDYCON
A szubrutin a kiválasztott drive READY státuszának megvizsgálására szolgál. A szubrutin 1-es típusú FDC parancsok kiadására (lásd: TYPONE) után hívandó meg abban az esetben, ha nem akarjuk, hogy esetleges NOT READY státusz esetén a program futása hibajelzéssel megszakadjon.
Input:
-
Output:
CY = 0, ha a drive READY, CY = 1 egyébként.
Modified:
A, F

Ha az RDYCON szubrutint akarjuk használni, akkor előtte a TYPONE szubrutin hívásakor a CONTRL-byte-ban B7=0-t kell specifikálnunk. (Lásd még TYPONE szubrutint).
Assembly példa vizsgálatára, ha esetleges "NOT READY" státusz esetén a vezérlést a programban kívánjuk tartani:







READY
CALL SPECCY
DB 16 D
DB 0
CALL SPECCY
DB 15 D
JP C,NOT READY
EQU $
; A TYPONE szubrutin
; általános hívása
; CONTRL / B7 = 0
; Az RDYCON szubrutin
; általános hívása
; Elágazás, ha "NOT READY"
; Drive Ready

 

TYPONE
A szubrutin az FDC ún. 1-es típusú (fejmozgató) parancsainak kiadására szolgál. E szubrutin eredményes használatához az FDC ismerete is szükséges. A szubrutin opcionálisan a drive "READY" státuszának vizsgálatára is alkalmas a megfelelő fejmozgató parancs kiadása után.
Input:

A szubrutin belépési pontján a stack tetején lévő cím által kijelölt memóriarekesz tartalma, amelyet a továbbiakban CONTRL byte-nak nevezünk. E byte bitenkénti értelmezését mutatja a 7-6. ábra:

A STRATE nevű, 209FH kezdőcímű, 4 byte széles rendszerváltozó területen az egyes drive-okra kijelölt fejléptetési sebesség (stepping rate) kódja. E terület felépítését mutatja a 7-7. ábra, a kódolást pedig a 7-6 táblázat.

Output:
-
Modified:
A, F

A szubrutin hívásának javasolt módja a következő:

Álltalános

CALL SPECCY
DB 16D
DB CONTRL

Egyedi:

CALL TYPONE
DB CNTRL

A szubrutin által kibocsátott FDC parancsok kódjait a 7-7 táblázat mutatja:

A végrehajtott parancs
angol neve
Fej léptetési idő (msec)
6
12
20 (2)
30 (3)
RESTORE
0CH
0DH
0EH
0FH
SEEK WITH VERIFY
1CH
1DH
1EH
1FH
SEEK WITHOUT VERIFY
18H
19H
1AH
1BH
STEP IN
58H
59H
5AH
5BH

Ha az input CONTRL byte-ban "READY" vizsgálatot is előírtunk, akkor "NOT READY" státusz esetén a szubrutin nem tér vissza a hívás helyére, hanem hibajelzéssel a rendszerbe tér vissza. Ha ez nem kívánatos, akkor a "READY" vizsgálatot az RDYCON szubrutinnal végeztessük el.
A szubrutin a STEP és a STEP OUT nevű fejmozgató FDC parancsok kiadására nem alkalmas.

HEXDC1 1 byte-os hexadecimális szám konvertálására 3 byte-os ASCII-ben ábrázolt decimális számmá.
Input:
E-ben a konvertálandó szám
Output:

A COUTBF nevű, 205CH kezdőcímű 3 byte hosszú területen az eredmény. A vezető nullák space-ekkel vannak helyettesítve. A COUTBF+2 címen MSB=1, mint text delimiter.
A legkisebb helyértékű decimális számjegy COUTBF+2 címen van.

Modified:
A, F, D, E, H, L

A szubrutin csak pozitív egész számok konvertálására alkalmas.

HEXDC2 2 byte-os hexadecimális szám konvertálására 5 byte-os ASCII-ben ábrázolt decimális számmá.
Input:
DE-ben a konvertálandó szám (D - HI, E - LO)
Output:
  • A COUTBF nevű, 205CH kezdőcímű 6 byte hosszú területen az eredmény. A vezető nullák space-ekkel vannak helyettesítve. A COUTB+4 címen MSB=1 mint text delimiter. A legkisebb helyértékű decimális számjegy COUTBF+4 címen van.
  • HL-ben COUTBF kezdőcíme, azaz HL=205CH.
Modified:
A, F, D, E, H, L

 

ERASE A képernyő teljes törlése, a képernyő attribútumok alapállapotba álltása és a képernyő pointernek a bal felső sarokba állítása.
Input:
-
Output:
Az SCRPOS nevű, 2057H című két byte széles rendszerváltozóban 0, azaz 0-ik oszlop, 0-ik sor. E rendszerváltozóról lásd bővebben a DSTRAM szubrutinnál.
Modified:
-

 

ERROR
(cím: 10H)
Az ERROR belépési ponton hibajelzés kíséretében térhetünk vissza DOS-ból. BASIC parancsmódba.
Input:
A stack tetején lévő cím. Ha e cím által kijelölt memóriarekesz tartalma nem nulla, akkor ez az érték a kijelzendő hibakód, ha pedig nulla, akkor a hibakód az A regiszterben van.

Ha a hibakód az FDC-től származik, és az A regiszterben van, akkor a hibakód konverzió történik, amelynek eredményeképpen előálló végleges hibakód 1, 2 vagy 3 lehet aszerint, hogy az FDC 7-5. ábrán látható státuszbitjei közül B2, B3, vagy B4 a legmagasabb helyértékű 1-es bit.

 

Ha a hibakód < 17, akkor a hibakód kiíratását az ismert szöveges hibajelzés kíséri. Egyéb esetben szöveges hibajelzés nem lehetséges.
A felhasználói programok járulékos hibajelzéseinek számozására fenntartott hibakód tartomány: 100.199.

1. példa: Hibajelzés szektorolvasási hiba esetén:

CALL SPECCY
DB 13H
AND A
JP Z,READ_OK

RST ERROR
DB 0
; SECTRD szubrutin
; általános hívása
; (Hibakód A-ban)
; Hibavizsgálat, és eéugrás,
; ha nem volt olvasási hiba.
; Hiba esetén visszatérés BASIC-be.
; Hibakód az A regiszterben.

2. példa: Hibajelzés felhasználói program olyan részén, ahol a DOS van kiválasztva, 152-es hibakóddal.

RST ERROR
DB 152D
; Visszatérés BASIC-be
; A kezelendő hibakód

 

DSTRAM
(cím: 18H)
A DSTRAM szubrutin szövegeknek a képernyőre, vagy ZX printerre való kiíratására szolgál. A kiírandó szövegnek a memóriában kell lennie ASCII karakterek formájában. A szöveg delimitere a legutolsó kiküldendő byte 1-beállított B7 (MSB) bitje. Ha a kiíratás a képernyőre történik és a szubrutin eléri a képernyő jobb alsó kiírási pozícióját, a kiírás átmenetileg megáll és SCROLL? Kérdés jelenik meg. Ez esetben 'n' vagy 'N' beütésére a szubrutin működése megszakad, 'y', 'Y' vagy ENTER leütésére a képernyő beállítható számú sorral feljebb tolódik, így, vagy a felső sorok elvesznek.
Input:
  • HL-ben a kiírandó szöveg első karakterének címe.
  • Az SCRPOS nevű, 2057H című két byte széles rendszerváltozóban a kiírás kezdőpozíciója, ha a kiírás a képernyőre történik. E rendszerváltozó felépítését mutatja a 7-8. ábra:

    COL: Az oszlop száma: 0...31
    ROW: A sor száma: 0...21.
  • A PRINT nevű, 2062H című rendszerváltozóban 0, ha a képernyőre, <>0, ha ZX printerre történik a kiírás.
  • Az NROLLS nevű, 20E3H című rendszerváltozóban az a szám, ahány sorral feljebb kell tolni a képernyőt SCROLL esetén.
Output:
  • SCRPOS-ban a legutolsó kiírt karaktert követő kiírási pozíció, ha a kiíratás a képernyőre történt.
  • CY = 1, ha a SCROLL? Kérdésre 'n' vagy 'N' a válasz, CY-ban a bemeneti érték egyébként.
Modified:
F, ha SCROLL? Kérdésre 'n', vagy 'N' volt a válasz, egyéb esetben minden regiszter módosítatlan marad.

Ha a hívó programban elágazás van, aszerint, hogy SCROLL? Kérdésre mi a válasz, biztosítani kell, hogy a szubrutin hívásakor CY=0 legyen.
(Lásd még ERASE szubrutin.)

BASRUT
(cím: 28H)
A BASIC ROM-ban lévő szubrutinok meghívása a DOS kiválasztott állapotában.
Input:
  • A stack tetején lévő cím a meghívandó BASIC szubrutin címének alacsonyabb helyértékű byte-jára mutat.
  • Minden egyéb input a meghívandó szubrutinéval azonos.
Output:
Azonos a meghívott szubrutin outputjával.
Modified:
Csak a meghívott szubrutin módosítja a regisztereket.

Hívás módja:

RST BASRUT
DW BAS-ADDR
; BAS-ADDR a meghívott
; BASIC szubrutin címe

A szubrutin nem alkalmazható olyan BASIC szubrutinok hívására, amelyek módosítják az FFE0H címen kezdődő, 26 byte hosszú terület tartalmát.

IDENTS
(cím: 30H)
A diszk formátumának azonosítása. A szubrutin a következő paramétereket azonosítja:
  • Írássűrűség (szimpla vagy dupla)
  • Track-enkénti szektorszám
  • A diszket a SPECCY-DOS FORMAT parancsával formálták-e.
Input:
-
Output:
  • A DFLAG1 nevű, 2000H című rendszerváltozó B7 (MSB) bitje 0, ha dupla, 1, ha szimpla írássűrűségű a diszk.
  • A SECMAX bevű, 2056H című rendszerváltozóban a Track-enkénti szektorok száma, ami 7, 10, 13 vagy 16 lehet.
  • A DOSBUF buffer a TRACK-0 első szektorát tartalmazza.
Modified:
A, F, B, C, D, E, H, L

Ha az írássűrűség nem felismerhető, a program furása megszakad és ERROR 15 hibaüzenet keletkezik. Ha a diszket nem SPECCY-DOS formálta, a program futása megszakad és ERROR 16 hibaüzenet keletkezik. Ha a drive nem "READY", a program futása ERROR 4 hibaüzenettel megszakad.
Bármely diszkhez való első hozzáfordulást az INDENTS szubrutin meghívásával ajánlatos kezdeni. Ezenkívül a felhasználói program futása során minden olyan programállapot után célszerű a szubrutin meghívása, ahol lehetőség volt az egyszer már azonosított diszk kicserélésére, még akkor is, ha ez bizonyos mértékben lassítja a felhasználói program futását.

ROMXCG
(cím: 46H)
A ROMXCG belépési pont a DOS kiválasztott állapotából a BASIC kiválasztott állapotába való végleges visszatérést valósítja meg a BASIC RAM tartalmának módosítása nélkül.
Input:
  • A stack tetején az a BASIC ROM, ill. RAM cím, ahová a vezérlés kerül.

Modified:
A, F, H, L Ezek a regiszterek módosulnak, mielőtt a vezérlés az input-ban megadott címre kerül.

Ez a belépési pont használható, ha a visszaváltás a BASIC RAM-ban futó programmal bármely okból nem valósítható meg.

7.1 Nem verziófüggetlenül hívható szubrutinok

Az alábbiakban azoknak a rezidens SPECCY-DOS szubrutinoknak a software interface-eit ismertetjük, amelyek nem hívhatók verziófüggetlenül, azaz csak az adott SPECCY-DOS verzión belüli konkrét belépési cím ismeretében hívhatók. A szubrutinoknál a V4.0-ban érvényes belépési címet közöljük. Esetleges későbbi verziók megjelenése esetén ezek a belépési címek változhatnak.

INIT
(V4.0: cím: 02C5H)
Diszk formattálása és inicializálása. A szubrutin a FORMAT DOS-BASIC parancsot hajtja végre.
Input:
  • IX-ben a diszknév első karakterének címe. A diszknév mindig 8 karakter hosszú, szükség szerint space-ekkel (20H) kiegészítve. Ha nincs diszknév, akkor 8 db space van lerakva.
  • (IX)+8-on:
    • B0:-B6 a formattálandó diszk egy oldalán formálandó track-ek száma. Megengedett értékei: 35,40,45,80
    • B7=0, ha egyoldalasra kell formattálni a diszket, B7=1, ha kétoldalasra.
      B7=1 Csak 40, vagy 80 track esetén megengedett!
  • A DFLAG1 nevű, a DOSRAM-ban 2000H címen található rendszerváltozó B7 (MSB) bitjén az írássűrűség, amelyre a diszket formattálni kell.
    B7=0, ha dupla sűrűség,
    B7=1, ha szimpla sűrűség.
  • Ugyanezen rendszerváltozó B0 és B1 bitjén annak a drive-nak a kódja, amelyen a formattálást el kell végezni.
Output:
-
Modified:
A, B, C, D, E, H, L, FLAG

 

LIST, LLIST
(V4.0: cím: 152AH)
A LIST, ill. az LLIST DOS-BASIC parancs végrehajtása.
Input:
  • A PRINT nevű, 2062H címü DOS rendszerváltozó határozza meg, hogy a listázás a kénernyőre (LIST) vagy ZX printerre történik-e? (LLIST)
    (PRINT)=0, ha képernyőre listázunk (PRINT)=1, ha printerre listázunk.
    A továbbiakban csak a LIST parancsra fogunk hivatkozni, de megjegyzéseink értelemszerűen az LLIST parancsra is érvényesek.
  • Az AREG nevű, 200EH című rendszerváltozó vezérli a LIST parancs különböző változatainak végrehajtását.
    B0=1, ha LIST i parancs hajtandó végre. Egyébként B0=0. (i= invisible)
    B1=1, ha LIST s parancs hajtandó végre. Egyébként B1=0. (s= size)
    B7=1, ha LIST "file" parancs hajtandó végre. Egyébként B7=0.
    Ha B7=1, akkor a filenévnek a DOSRAM 20B1H címétől kezdve kell lerakva lennie, a szokásos filenév konvencióknak megfelelően.
Output:
-
Modified:
A, B, C, D, E, H, L, FLAG

 

MERGE
(V4.0: cím: 0F5FH)
A MERGE DOS-BASIC parancs végrehajtása.
Input:
  • HL a filenév első karakterére mutat.
Output:
-
Modified:
A, B, C, D, E, H, L, FLAG

 

RNAMDS
(V4.0: cím: 1186H)
Diszk átnevezése , azaz a DEF FN DOS-BASIC parancs végrehajtása.
Input:
  • HL az új diszknév első karakterére mutat.
Output:
-
Modified:
A, B, C, D, E, H, L, FLAG

 

RUNCOD
(V4.0: cím: 1480H)
CODE típusú file betöltése és futtatása, azaz a RUN ... CODE DOS-BASIC parancs végrehajtása.
Input:
  • HL a filenév első karakterére mutat.
  • DE az opcionális betöltési kezdőcímet tartalmazza.
    DE=0000, ha nem specifikálunk betöltési kezdőcímet. Ez esetben a file arra a memóriaterületre fog betöltődni, ahonnan a SAVE elérése történt. (SAVEx.. CODE)
Output:
  • BC a futtatási kezdőcímet tartalmazza, azaz annak a memóriahelynek a címét, ahová, a vezérlés a file betöltése után kerül, (Ugyanez a helyzet a normál RAND. USR parancs végrehajtásakor is)

Modified:
A, B, C, D, E, H, L, FLAG

A vezérlés átadásának pillanatában az interruptok engedélyezve vannak.

BOTSET
(V4.0: cím: 13FEH)
Az USR DOS-BASIC parancs végrehajtása.
Input:
  • A regiszter:
    A=0, ha a művelet AUTOBOOT file kijelölése,
    A<>0 ha a művelet AUTOBOOT státusz megszüntetése.
  • HL a filenév első karakterére mutat, ha input A=0. Egyébként HL tartalma nincs értelmezve.
Output:
-
Modified:
A, B, C, D, E, H, L, FLAG

 

BACKUP
(V4.0: cím: 0F9AH)
A MOVE DOS-BASIC parancs végrehajtása.
Input:
  • Az AREG nevű, 200EH című DOS rendszerváltozó a forrás és a kimeneti drive kódját tartalmazza a következőképpen.
    B1, B0: a forrás drive bináris kódja.
    B7, B6: a kimeneti drive bináris kódja.
    B0 és B6 az alacsonyabb, B1, és B7 a magasabb helyértékű bitek.
Output:
-
Modified:
A, B, C, D, E, H, L, FLAG

8. SPECCY-DOS rendszerváltozók

0000H - 1FFFH DOS ROM
2000H - 23FFH DOS RAM
2000H DFLAG-1 (3B41H PSW)
2001H - 200DH Szabad RAM
200EH AREG (LIST+)
2017H - 201BH DRBPTB (FSNR kezdőcím)
201CH LSTMS0 kezdőcím
2020H LSTMS1 kezdőcím
2024H - 203CH DIRBF0 file directory puffer
203DH - 2055H DIRBF1 file directory puffer
2056H SECMAX max. sector / track
2057H - 2058H SCRPOS oszlop-sor
205CH COUTBF kezdőcím
2062H PRINT
2064H - 2083H UNIBUF változó célokra
209FH - 20A2H STRATE D0-D3 kijelölés
20A4H - 20CBH Szabad RAM
20BBH Target drive code (COPY)
20C6H Source
20CCH - 21CBH DOSBUF Rendszer fő puffer
20E3H NROLLS (Görgetés LIST)
21CCH - 22CBH PRTBUF Sectorcímek kigyűjtésére
22CCH COPY-FG (Másolás 1 drive-os rendszerben)
22CDH - 2317H Szabad RAM
2320H - 23FFH USER RAM
3290H FDC Status / Command reg. (Read / Write)
3291H FDC Track reg.
3292H FDC Sector reg.
3293H FDC Data reg,
3B41H HW - vezérlés

Vissza