Hisoft PASCAL
1.1 verzió leírása

Scan&OCR Kiss László


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 .<N 1> és <N2> 1 és 32767 közötti egész szám. <S 1> é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:

HELP alak: 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.
Width alak: W<szélesség>
 
A szerkesztő képernyőjének szélessége. 40 esetén 40 karakteres,80 esetén 8O karakteres lesz a képernyő üzemmódja.
default Y alak: 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>
<Sl>
<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,SZl,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,SZl,SZ2. Ez nem jelenik meg a képernyőn, de így hajtódik végre.
Qdelim alak: 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.
Alter alak: 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 text alak: 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 text alak: 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.
Verify alak: 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 module alak: 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:

List alak: 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
Insert I<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.
Edit alak: E<sorsz>
  Kiírja a <sorsz> sorszámú programsort, amit javítani lehet. Például: E123 Lehívja a 123-as sort.
Delete alak: 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.
reNumber alak: 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 line alak: U
  Kiírja a forrásszövegben előforduló legnagyobb sorszámot.
Buffer left alak: B
  Kiírja a memóriában még szabadon lévő byteok számát ( hexadecimálisan ).

Blokkműveletek:

Move alak: 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:

Find alak: 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
Substitute alak: 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:

Compile alak: 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.
Run alak: R
  Ha a memóriában van lefordított program, lefuttatja azt.
Translate alak: 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ál SHIFT + funcióbillentyű
F1 HELP READ (
F2 PROGRAM WRITE (
F3 CONST INTEGER
F4 TYPE WRITELN
F5 VAR WHILE
F6 BEGIN UNTIL
F7 END REPEAT
F8 PROCEDURE FUNCTION

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. Hibas 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.  
  66.  
  67. INTEGER -ek esetén az egyetlen két kettőspontos írásparaméter az e:m:H.
  68. A stringek sor vége karaktert nem tartalmazhatnak.
  69. A "NEW", "MARK" és "RELEASE" paraméterének pointer típusúnak kell lennie.
  70. 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:

AND ARRAY BEGIN CASE CONST
DIV DO DOWNTO ELSE END
FORWARD FUNCTION GOTO IF IN
LABEL MOD NIL NOT OF
OR PACKED PROCEDURE PROGRAM RECORD
REPEAT SET THEN TO TYPE
UNTIL VAR WHILE WITH 

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

Konstans: MAXINT=32767;
Típus: BOOLEAN=(FALSE,TRUE);
  CHAR {A kiboví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 OEEK 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.