Hisoft PASCAL
1.1 verzió leírása

Tartalom
Elindulás
A szövegszerkesztő
A parancsok leírása
A Pascal előre programozott funkcióbillentyűi
Hibaüzenetek
Lefoglalt szavak és előre definiált azonosítók
Adattárolási formátum

Elindulás
A számítógép kikapcsolt állapotában helyezzük a PASCAL-t tartalmazó cartridge-t a bal oldalon található "ROM BAY" feliratú portba, majd kapcsoljuk be a gépet. Attól függően, hogy melyik EPROM helyen (szegmensen) van a PASCAL-t tartalmazó EPROM megeshet, hogy nem a PASCAL jelentkezik be. Ebben az esetben adjunk ki egy ":HP" parancsot ( illetve EXT "HP") parancsot, ha a LISP-ben tartózkodunk ). A PASCAL induláskor a következő üzenettel jelentkezik be:

A felül látható üzenet a programkészítő cég copyright-ja.
Ez alatt egy lista látható, a szerkesztő parancsaival. Ez egy "H" parancs kiadásával bármikor kiíratható. A szövegben található nagybetűket kell kiadnia kívánt parancs indításához. Például a fordítás megkezdése (Compile) esetén a "C" betűt.
A Hisoft PASCAL - nem úgy, mint az IS-BASIC - ún. COMPILER. Ez azt jelenti, hogy egy sor beírása után még nem történik szintaktikai ellenérzés, hanem a teljes program bevitele után egyszerre fordítja le, egy futtatható állapotra. A fordítás megkezdését program írója kezdeményezi. Eme módszer előnye, hogy míg a BASIC programfutás közben még kénytelen elemezni is a sorok helyességét, addig a PASCAL eleve egy gépi kódú, futtatható programot állít elő. Ez a gépi kódú program már nem végez semmiféle ellenőrzést a programszövegben, a COMPILER rendszer így gyorsabb, mint a BASIC által alkalmazott INTERPRETER. Ezen kívül előnye az is, hogy képes - egy később önállóan is betölthető tárgykódot is előállítani.

A szövegszerkesztő
A PASCAL nyelven megírt programot (a továbbiakban: forrásszöveg) a PASCAL saját szövegszerkesztőjével írhatjuk be. Ez a szövegszerkesztő némiképpen hasonlít a BASIC által alkalmazotthoz, így az egyes parancsok leírásánál hivatkozunk a BASIC-re. Az egyes sorokat itt is sorszámozzuk. Ha egy üres sorszámot írunk be, akkor az adott sor törlődik (feltéve, ha létezik). A megjegyzéseket { és } (kapcsos zárójelek) közé tehetjük!
A szerkesztő parancsainak szintaktikája:


<parancs> <N1>,<N2>,<S1>,<S2>

Ahol: <parancs> mindig egy karakter (betű). A rendszer a kis és nagybetűket egyaránt felismeri. <N1> és <N2> 1 és 32767 közötti egész szám. <S1> és <S2> maximálisan 20 karakterből álló karaktersorozat. Amennyiben a két szám operandusára nincs szükség (a parancs nem kívánja), a helyüket akkor is jelezni kell üres határolójelekkel. (Általában a "," karakter. ) Pl.: X"EXOS-modul".

A parancsok leírása

Általános parancsok:

HELPalak: H
 
Kiírja a már említett segítő üzenetet. Itt kell megemlíteni, hogy az F1 billentyű erre a parancsra van beprogramozva, vagyis segítségkéréshez elég leütni az 1. funkcióbillentyűt.
Widthalak: W<szélesség>
 
A szerkesztő képernyőjének szélessége. 40 esetén 40 karakteres, 80 esetén 80 karakteres lesz a képernyő üzemmódja.
default Yalak: Y
 
A parancs kiadása esetén a képernyőre íródnak az alapértelmezések, a következő alakban:
<határoló>
<N1> <N2>
<S1>
<S2>
A határoló az egyes operandusok közötti elválasztót jelenti (delimiter). Ez általában a vessző, de ez megváltoztatható ( lásd a Q parancsnál ). A többi alapértelmezésről a parancsszintaktika ismertetésnél már volt szó, itt csak annyit, hogy ha számot nem írunk be, akkor az alapértelmezést felelteti meg neki. Ha viszont a parancsnál megadunk egy számot, akkor ez lesz az új alapértelmezés. Például: S 1,600,SZ1,SZ2 ekkor ezek lesznek az alapértelmezések. Ha ezután kiadunk egy üres P parancsot, akkor azt a rendszer a következővé egészíti ki: P 1,600,SZ1,SZ2. Ez nem jelenik meg a képernyőn, de így hajtódik végre.
Qdelimalak: Q,,<delimiter>
 
Beállítja az új határolójelet. Például:Q,,! Ezután az operandusokat már nem vesszővel, hanem felkiáltójellel kell egymástól elválasztani. Tehát, ha kiadnánk mégegyszer ugyanezt a parancsot, hibaüzenetet kapnánk! Visszaállítani a vessző határolójelet a Q!! paranccsal lehet.
Alteralak: A
 
Használatával a COMPILER opciókat lehet átállítani. Sorban:
Symbol table size ( xxxx )? A szimbólumtábla mérete
Translate stack ( xxxx )? A fordítási verem helye.
Compiler stack ( xxxx )? A COMPILER verem helye.
xxxx egy hexadecimális számot jelöl, a választ is így kell megadni. ENTER esetén nem változnak az opciók Nem célszerű az opciók átállítása, kivéve a szimbólumtábla méretének nagyobbra állítását hosszú program esetén. A szimbólumtáblába kerülnek a programban használt változók, konstansok stb.

Input / Output műveletek:

Get textalak: G,,<flie-név>
 
A <file-név> nevű file-t megkeresi, majd betölti a szerkesztő munkaterületére. Vigyázni kell, hogy csak legális programot töltsünk be, mert egyébként könnyen összeomolhat a rendszer. Például:
G,,prog.pas
G,,TAPE:program

Put textalak: P<sorsz1>,<sorsz2>,<file-név>
 
Az előző parancs megfordítása, kimenti a forrásszöveg egy részét. A kimentendő blokk kezdősorszámát a <sorsz1>, a végsorszámát a <sorsz2> adja meg. Például:
P1,123,program
Kimenti az 1. sorszámtól a 123. sorszámig PROGRAM néven a forrásszöveg egy részét. Itt említjük meg, hogy a PASCAL-ban alkalmazható legnagyobb sorszám a 32767, így a teljes forrásszöveg kimentése a P1,32767,<file-név> paranccsal történhet.
Verifyalak: V<sorsz1>,<sorsz2>,<file-név>
 
A P paranccsal kimentett forrásszöveget ellenőrzi. Amennyiben megelőzte egy forrásszöveg kimentés, akkor elhagyhatók az operandusok. Ekkor összehasonlítja a MYPROG nevű file-t a memóriában találhatóval. Ha megegyezik, akkor a "VERIFIED" ha nem, akkor a "FAILED" hibaüzenet jelenik meg.
load eXos modulealak: X,,<file-név>
 Betölti a <file-név> nevű file-t, amennyiben az EXOS modul. Ellenkező esetben hibaüzenetet ad.
Például:
X,,gen
Betölti a GEN nevű programot. Itt érdemes megjegyezni, hogy a ":" (kettőspont) után tetszőleges rendszer-parancsot írva a gép végrehajtja azt! (Pl.: :DIR)

Szövegszerkesztési parancsok:

Listalak: L<sorsz1>,<sorsz2>
 
Kilistázza a <sorsz1> sorszámtól a <sorsz2> sorszámig terjedő programsorokat. Hasonlít a BASIC LIST parancsához. Ha nem adunk meg paramétert, az egész programot kilistázza. Például: L 1,100
InsertI<sorsz1>,<lépésköz>
 
Beszúrást kezdeményez a <sorsz1> sorszámú sortól kezdve <lépésköz> növekménnyel. Ha már van ilyen sor, akkor az nem törlődik, hanem eggyel nagyobb sorszámot kap. Ha szükséges, a mögötte lévő sorokat is átsorszámozza. Például:
I10,10
Automatikus sorszámozás 10-től kezdve, 10-es lépésközzel. A szolgáltatást a STOP billentyű megnyomásával kapcsolhatjuk ki. Némiképp emlékeztet a BASIC AUTO parancsára.
Editalak: E<sorsz>
  Kiírja a <sorsz> sorszámú programsort, amit javítani lehet. Például: E123 Lehívja a 123-as sort.
Deletealak: D<sorsz1>,<sorsz2>
 
Törli a forrásszövegben a <sorsz1> sorszámtól a <sorsz2> sorszámig tartó szövegblokk valamennyi sorát. Ebben a parancsban (a véletlen törlések kiküszöbölésére) mindkét sorszámot meg kell adni. Például:
D1,32767
Törli a teljes forrásszöveget. Megfelel a BASIC DELETE parancsának.
reNumberalak: N<sorsz>,<lépésköz>
 
Átsorszámozza a teljes forrásszöveget úgy, hogy a kezdősorszám a <sorsz>, a növekmény a <lépésköz> lesz. Hatása azonos a BASIC RENUMBER parancsával. Például:
N1,3
Az első sorszám az 1, a második a 4 lesz, stb.
Upper linealak: U
 Kiírja a forrásszövegben előforduló legnagyobb sorszámot.
Buffer leftalak: B
 Kiírja a memóriában még szabadon lévő byteok számát ( hexadecimálisan ).

Blokkműveletek:

Movealak: M<sorsz1>,<sorsz2>,<cél>
 
Átmozgatja a <sorsz1> sorszámtól a <sorsz2> sorszámig terjedő blokkot a <cél> sorszámú helyre úgy, hogy az eredeti helyen lévő blokk törlődik. Például:
M2,5,10
A 2...5 sorokat átmozgatja a 10 sortól kezdődően, majd törli a 2...5 sorokat, így a 2...5 sorok a 10...13 sorok helyén lesznek.

Keresés és szövegkicserélés:

Findalak: F<sorsz1>,<sorsz2>,<szöveg>
 A <sorsz1> sorszámtól kezdődő és a <sorsz2> sorszámig tartó blokkban keresi a <szöveg> szöveget. Ha megtalálta kiírja azt a sort, ahol sikeres volt a keresés. Ez a parancs az, ahol érdemes a határolójelet megváltoztatni abban az esetben, ha a vessző karakter is szerepel a keresni kívánt szövegben. Például:
F1,32767,begin
Substitutealak: S<sorsz1>,<sorsz2>,<szöveg1>,<szöveg2>
 
A <sorsz1> és <sorsz2> által megadott blokkban kicseréli a <szöveg1> stringet <szöveg2>-re. Amennyiben talált <szöveg1>-et, akkor kiírja a sort a képernyőre. Az ENTER billentyű leütésekor kicseréli a stringeket, majd folytatja a keresést. Például:
S1,32767,begn,begin

Fordítás, futtatás:

Compilealak: C
 
Lefordítja a szöveg-pufferben lévő forrásszöveget. Hiba esetén kiírja az aktuális sort, és megjelöli a hibás részt. Hibátlan fordítás esetén engedélyt kér a futtatásra (Run?), amire "Y" választ adva lefuttatja a programot, egyéb válasz esetén visszatér parancs üzemmódba.
Runalak: R
 Ha a memóriában van lefordított program, lefuttatja azt.
Translatealak: T,,<file-név>
 
Lefordítja a forrásszöveget, de nem futtatható formában, hanem létrehoz egy <file-én> nevű programot, ami egy 5-ös formátumú EXOS modul. Ez a kimentett program később visszatölthető, futásához nem szükséges a PASCAL COMPILER-nek a rendszerben lennie.

A Pascal előre programozott funkcióbillentyűi

A PASCAL-ban a BASIC rendszerhez hasonlóan 8 funkcióbillentyűnek előre programozott funkciójuk van:

 NormálSHIFT + funcióbillentyű
F1HELPREAD (
F2PROGRAMWRITE (
F3CONSTINTEGER
F4TYPEWRITELN
F5VARWHILE
F6BEGINUNTIL
F7ENDREPEAT
F8PROCEDUREFUNCTION

A hibaüzenetek
Amennyiben fordítás közben a rendszer hibát észlel megáll, kiírja a hibás sort, valamint az alatta léve sorban a hiba számát (ERROR x). A hiba okának felderítését segítendő egy felfelé mutató nyíl ( a "^" karakter ) mutat a hibás szóra. Ekkor a programozó három dolgot tehet:
1. Megnyom egy billentyűt, vagyis folytatja a fordítást.
2. Az "E" billentyűvel javíthatja az aktuális sort.
3. A "P" billentyűvel javíthatja az előző sort.

A hibakódok:

  1. Túl nagy szám.
  2. Hiányzó pontosvessző.
  3. Nem deklarált azonosító.
  4. Hiányzó azonosító.
  5. Konstans deklarációban "=" szükséges, nem ":="
  6. Hiányzó "=".
  7. Ez az azonosító nem kezdheti az utasítást.
  8. Hiányzó ":=".
  9. Hiányzó " )".
  10. Hibás típus.
  11. Hiányzó ".".
  12. Hiányzó tényező.
  13. Hiányzó konstans.
  14. Ez az azonosító nem konstans.
  15. Hiányzó "THEN".
  16. Hiányzó "DO".
  17. Hiányzó "TO" vagy " DOWNTO ".
  18. Hiányzó " ( ".
  19. Ilyen típusú kifejezés nem írható.
  20. Hiányzó "OF".
  21. Hiányzó vessző.
  22. Hiányzó kettőspont.
  23. Hiányzó "PROGRAM".
  24. Hiányzik a változó, mivel a paraméter változó paraméter.
  25. Hiányzó "BEGIN".
  26. A "READ" hívásában hiányzó változó.
  27. Ilyen típusú kifejezések nem hasonlíthatók össze.
  28. Vagy INTEGER vagy REAL típus szükséges.
  29. Ilyen típusú változó nem olvasható be.
  30. Ez az azonosító nem típus.
  31. Hiányzó kitevő a valós számban.
  32. Skalár kifejezést vár, nem numerikusat.
  33. Az üres string nem megengedett ( használja a CHR(0)-t ).
  34. Hiányzó "[".
  35. Hiányzó "]".
  36. A tömb index típusának skalárnak kell lennie.
  37. Hiányzó "..".
  38. A tömbdeklarációban hiányzik a "]" vagy a ",".
  39. Az alsó határ nagyobb a felsőnél.
  40. Túl nagy az elemkészlet ( több, mint 256 lehetséges elem ).
  41. A függvény eredményének típusazonosítónak kell lennie.
  42. Az elemkészletben hiányzik a "]" vagy a ",".
  43. Az elemkészletben hiányzik a ".." vagy a "," vagy a "]".
  44. A paraméter típusának típus azonosítónak kell lennie.
  45. Egy nem kijelölő utasításban a nullkészlet nem lehet az első tényező.
  46. Hiányzó skalár ( beleértve a valóst is ).
  47. Hiányzó skalár ( nem beleértve a valóst ).
  48. Inkompatibilis készletek.
  49. Készletek összehasonlításához a "<" és a ">" nem megfelelő.
  50. Hiányzó "FORWARD" , "LABEL", "CONST", "VAR", "TYPE" vagy "BEGIN".
  51. Hiányzó hexadecimális számjegy.
  52. POKE készletek nem lehetségesek.
  53. Túl nagy tömb ( nagyobb, mint 64k ).
  54. A RECORD definícióban az "END" vagy pontosvessző hiányzik.
  55. Hiányzó mezőazonosító.
  56. Hiányzó változó a "WITH" után.
  57. A "WITH"-ben a változónak RECORD típusúnak kell lennie.
  58. A mezőazonosító nem társítható a "WITH" utasítással.
  59. Hiányzó előjel nélküli egész a "LABEL" után.
  60. Hiányzó előjel nélküli egész a "GOTO" után.
  61. Ez a címke rossz szinten van.
  62. Nem deklarált címke.
  63. A "SIZE" paraméterének változónak kell lennie.
  64. Pointerek vizsgálatához csak egyenlőség használható.
  65. INTEGER -ek esetén az egyetlen két kettőspontos írásparaméter az e:m:H.
  66. A stringek sor vége karaktert nem tartalmazhatnak.
  67. A "NEW", "MARK" és "RELEASE" paraméterének pointer típusúnak kell lennie.
  68. Az "ADDR" paraméterének változónak kell lennie.

Szövegszerkesztés közben előfordulható üzenetek:

No room - Elfogyott a program számára fenntartott hely.
Failed! - A kimentett program az ellenőrzés során hibásnak bizonyult.
Verified A kimentett program az ellenőrzés során helyes volt.

Futás közben előforduló hibák:
Ha futás közben hibát észlel a gép, akkor visszatér egy "<hibaüzenet> at PC=xxxx" üzenettel, ahol "xxxx" a hiba előfordulási helye (memóriacím!), a hibaüzenet az alábbiak lehetnek.

HALT Megállás.
Overflow Túlcsordulás.
Out of RAM Elfogyott a memória.
/ by zero Osztás nullával ( a "DIV" is produkálhatja ).
Index too low Túl kicsi index.
Index too high Túl nagy index.
Maths Call Error Matematikai függvény hibás hívása.
Number too large Túl nagy szám.
Number expected Hiányzó szám.
Line too long Túl hosszú sor.
Exponent expected Hiányzó kitevő.

Itt jegyezzük meg, hogy a T(ranslate) paranccsal lefordított és kimentett program, futás közben előforduló hibák esetén visszatér egy primitív parancsértelmezőbe. Először megjelenik a "Run?" kérdés, erre "Y"-t adva válaszként a program újra lefut. Minden más karakter esetén további karakter leütésekre vár, kivéve a ":" (kettőspont) karaktert, amikor utána egy EXOS parancs stringet lehet beírni.

Lefoglalt szavak és előre definiált azonosítók:

ANDARRAYBEGINCASECONST
DIVDODOWNTOELSEEND
FORWARDFUNCTION GOTOIFIN
LABELMODNILNOTOF
ORPACKEDPROCEDURE PROGRAM RECORD
REPEATSETTHENTOTYPE
UNTILVARWHILEWITH 

Egyéb előre definiált azonosítók:

Konstans:MAXINT=32767;
Típus:BOOLEAN=(FALSE,TRUE);
  CHAR {A kibővített ASCII karakterkészlet};
 INTEGER=-MAXINT..MAXINT;
 REAL {valós számok};
Eljárás: WRITE WRITELN READ READLN
 PAGE HALT USER POKE
 INLINE EXOS OUT NEW
 MARK RELEASE    
Fügvény: ABS SQR ODD RANDOM
 ORD SUCC PRED INCH
 EOLN PEEK CHR SQRT
 ENTIER ROUND TRUNC FRAC
 SIN COS TAN ARCTAN
 EXP LN ADDR SIZE
 INP      

Adattárolási formátum:
Minden egész típusú számot 2 byte-on tárol, kettes komplemens formátumban. Pl.:

1
=0001H
256
=0100H
-256
=FF00H

A "HL" Z80-as regiszterben használja az egész számokat.

Karakterek, Boolean és egyéb skalár mennyiségek:
Egy byte-ban (8 bit) tárolja a mennyiségeket, amelyeket az "A" Z80 regiszterben használ fel.
Karakterek: 1 byte, a kibővített ASCII kódrendszert alkalmazva. Pl.:
"A"=41H
Boolean mennyiségek: TRUE=1, FALSE=0

Valós számok:
32 bites számábrázolás, 8 bit karakterisztika, 24 bit a mantissza, 1 bit az előjel. Bináris a mantissza is a karakterisztika is.

Részletes ismertető

Akit részletesebben érdekel a PASCAL nyelv, olvassa el az ENTERPRESS Pascal sorozatát!

Vissza a könyvekhez
Vissza a felhasználói programokhoz