Welcome, Guest. Please login or register.


Author Topic: HiSoft Pascal (Read 87673 times)

Offline Lacika

  • EP addict
  • *
  • Posts: 3191
  • Country: hu
    • http://www.ep128.hu
Re: HiSoft Pascal
« Reply #75 on: 2013.November.19. 18:59:03 »
A PACKED kulcsszó mit csinál? Tudja valaki?

Offline DrPrery

  • EP user
  • *
  • Posts: 264
  • Country: hu
Re: HiSoft Pascal
« Reply #76 on: 2013.November.19. 19:37:10 »
Ha jól tudom, mivel az "eredeti" Pascal-ban string nuku, ezért ott állítólag így szokták definiálni:

type string = packed array[1..255] of char;

Hogy ez most a Hisoft féle verzióban mit csinálna...

Offline Povi

  • EP addict
  • *
  • Posts: 2296
  • Country: hu
    • http://povi.fw.hu
Re: HiSoft Pascal
« Reply #77 on: 2013.November.19. 19:51:56 »
működik, csak akkor tényleg 255 karakter hosszúságú stringet vár értékadásnál...
lehet, hogy azt kéne módosítani majd a kódban, hogy ez ne jelentsen számára problémát :-)

Laci: a ROM változatokat holnap küldöm, és a 0.3-as .com-ban is kijavítom
*** Speicherplatz zu klein

Offline Lacika

  • EP addict
  • *
  • Posts: 3191
  • Country: hu
    • http://www.ep128.hu
Re: HiSoft Pascal
« Reply #78 on: 2013.November.19. 19:55:21 »
Quote from: Povi
Laci: a ROM változatokat holnap küldöm, és a 0.3-as .com-ban is kijavítom
A 0.3-assal szerintem feleslewges foglalkozni. Én is kiszedtem a régebbieket, a letölthető csomagban csak az 1.1-es van már.

Offline Povi

  • EP addict
  • *
  • Posts: 2296
  • Country: hu
    • http://povi.fw.hu
Re: HiSoft Pascal
« Reply #79 on: 2013.November.19. 20:09:17 »
CPC-s HiSoft Pascal leírás:
http://www.cpcwiki.eu/imgs/6/64/Hisoft_Pascal_4T_Manual_(English).pdf
ebben sincs benne a RANSEED :-)
viszont itt legalább le vannak írva az előre deklarált RA, RB, RC, RD, RE, RBC, RDE változók
sőt, itt van RH, RL és RHL is, ami EP128-on nincs
szóval, biztos kellett lennie EP128-hoz is valami jó kis angol nyelvű leírás :-)
*** Speicherplatz zu klein

Offline DrPrery

  • EP user
  • *
  • Posts: 264
  • Country: hu
Re: HiSoft Pascal
« Reply #80 on: 2013.November.19. 20:13:28 »
Amúgy ez a PACKED dolog valamiféle "tömörítés" akart volna lenni, mert a régi Pascal-oknál, ha valaki pl. létrehozott egy BOOLEAN tömböt, akkor a Pascal minden elemének lefoglalt egy "alapegységnyi" helyet. Ez az "alapegység" általában egy WORD (2 byte) volt, máskor talán más.
A PACKED BOOLEAN esetében pedig volt olyan implementáció, amelyik mindegyik bool értéknek csak 1 bitet foglalt, így "tömörödött". Nyilván a CHAR tömbnél is hasonló lehetett a helyzet, hogy csak 1 byte kellett volna...

Offline lgb

  • EP addict
  • *
  • Posts: 3563
  • Country: hu
  • æðsta yfirmaður
    • http://lgb.hu/
Re: HiSoft Pascal
« Reply #81 on: 2013.November.19. 21:39:40 »
Quote from: DrPrery
Amúgy ez a PACKED dolog valamiféle "tömörítés" akart volna lenni, mert a régi Pascal-oknál, ha valaki pl. létrehozott egy BOOLEAN tömböt, akkor a Pascal minden elemének lefoglalt egy "alapegységnyi" helyet. Ez az "alapegység" általában egy WORD (2 byte) volt, máskor talán más.
A PACKED BOOLEAN esetében pedig volt olyan implementáció, amelyik mindegyik bool értéknek csak 1 bitet foglalt, így "tömörödött". Nyilván a CHAR tömbnél is hasonló lehetett a helyzet, hogy csak 1 byte kellett volna...

Jah, amennyire remlik meg a hoskorbol, pascal-nal alapbol "szoegyseg" hatarra vannak igazitva a valtozok, ez az egyseg pl adott esetben egy 16 bites word (2 byte). A packed valami olyasmi, hogy byte hatarra "osszepakolva" akarod, ezzel kisebb a memoriaigeny stb (alapbol vannak nem kihasznalt byte-ok stb kozben), viszont adott esetben kevesbe optimalis sebessegben. Habar vannak ketsegeim, Z80-on nem hinnem, hogy szamit, hogy egy 16 bites ertek paros cimen van-e, x86-nal nem teljesen mindegy pl, mert nem 8 bites az adatbusz ... Tenyleg nem feltetlen ertem, hogy Z80-on van-e barmi jelentosege ennek, es miert nem packed alapbol minden.

Offline Povi

  • EP addict
  • *
  • Posts: 2296
  • Country: hu
    • http://povi.fw.hu
Re: HiSoft Pascal
« Reply #82 on: 2013.November.20. 08:33:22 »
Quote from: lgb
Jah, amennyire remlik meg a hoskorbol, pascal-nal alapbol "szoegyseg" hatarra vannak igazitva a valtozok, ez az egyseg pl adott esetben egy 16 bites word (2 byte).
Van egy olyan gyanúm, hogy itt a PACKED kulcsszót csak a kompatibilitás érdekében hagyták meg, de nem csinál semmit.
*** Speicherplatz zu klein

Offline Povi

  • EP addict
  • *
  • Posts: 2296
  • Country: hu
    • http://povi.fw.hu
Re: HiSoft Pascal
« Reply #83 on: 2013.November.20. 08:35:28 »
Quote from: Povi
itt a javított változat, amiben már működik a PAGE utasítás

ha van rá igény, ezt majd később át lehetne javítani CLRSCR-re, persze ehhez fordítható forrás kell majd
egyébként ez nem feltétlenül volt bug, mert eredetileg a PAGE parancsot lapdobásra (a nyomtatón) találták ki. Annak a kódja pedig tényleg a CHR(12). Inkább kicsit furcsa nekem, hogy az EXOS tervezői miért nem hagyták meg ezt a kódot a képernyőtörlésre is, miért használják helyette a CHR(26)-ot, ami pedig hagyományosan a fájl-vége jel.
*** Speicherplatz zu klein

Offline Povi

  • EP addict
  • *
  • Posts: 2296
  • Country: hu
    • http://povi.fw.hu
Re: HiSoft Pascal
« Reply #84 on: 2013.November.20. 08:46:15 »
a tokenizálás hátulütője:
nem használhatók a chr(128) fölötti kódok (lásd az ábrát)!

majd át kéne írni, hogy a tokenizált parancsokat A1H-tól tárolja (81H helyett), hogy lehessen használni az chr(128)-chr(159) karaktereket pl. kiíráshoz.
« Last Edit: 2013.November.20. 08:49:32 by Povi »
*** Speicherplatz zu klein

Offline Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14721
  • Country: hu
    • http://enterprise.iko.hu/
Re: HiSoft Pascal
« Reply #85 on: 2013.November.20. 08:54:33 »
Quote from: Povi
miért használják helyette a CHR(26)-ot, ami pedig hagyományosan a fájl-vége jel.
Mert CP/M-ben képernyő törlés.
Egyébként lehet, hogy ebből jött az, hogy EOF lett, mivel minek törölnéd le a szöveget, amit éppen kiírtál, tehát nincs értelme a szövegben lennie.

Offline Povi

  • EP addict
  • *
  • Posts: 2296
  • Country: hu
    • http://povi.fw.hu
Re: HiSoft Pascal
« Reply #86 on: 2013.November.20. 10:51:23 »
Quote from: Povi
a tokenizálás hátulütője:
nem használhatók a chr(128) fölötti kódok (lásd az ábrát)!

majd át kéne írni, hogy a tokenizált parancsokat A1H-tól tárolja (81H helyett), hogy lehessen használni az chr(128)-chr(159) karaktereket pl. kiíráshoz.
de szemét ez a Pascal :-)

kipróbáltam, hogy mi történik akkor, ha a PROGRAM parancs tokenjét 81H-ról átírom A4H-ra, így felszabadítva egy 128-nál nagyobb karaktert (ALT+A).
listázáskor még működik a dolog, és tényleg A4H-ként tokenizálja
viszont a listában a WRITE('á') (HFONT esetében a chr(#81)='á') helyett WRITE('M') jelenik meg...
ráadásul, ha lefordítom a programot, rögtön egy 23-as hbaüzenettel leáll (=hiányzó "PROGRAM"), szóval máshol kell belenyúlni a lelkivilágába (amit egyébként sejtettem - nem is úgy akartam megoldani, hogy mind a 35 db token kódot átírom: pl. listázáshoz elég lenne egy byte átírása is).
*** Speicherplatz zu klein

Offline Povi

  • EP addict
  • *
  • Posts: 2296
  • Country: hu
    • http://povi.fw.hu
Re: HiSoft Pascal
« Reply #87 on: 2013.November.20. 19:05:26 »
Quote from: Povi
közben nem túl elegánsan ezt úgy oldottam meg, hogy deklaráltam egy 16384 byte méretű változót (konkrétan egy 16384 elemű CHAR tömböt) a program elején, így az összes többi (később deklarált) globális változóm címe már a kettes lapra esik. Így nyugodtan kilapozhatom a 3-as lapot. :-)
rájöttem, hogy erre való az Alter parancs :-)
a compiler stack-et és a translate stack-et is c000-ra kell állítani, így szabad marad a 3-as lapom :-)
*** Speicherplatz zu klein

Offline Lacika

  • EP addict
  • *
  • Posts: 3191
  • Country: hu
    • http://www.ep128.hu
Re: HiSoft Pascal
« Reply #88 on: 2013.November.20. 19:12:57 »
Quote from: Povi
rájöttem, hogy erre való az Alter parancs :-)
Közérthetően elmagyaráznád mire is való? :oops:

Offline Povi

  • EP addict
  • *
  • Posts: 2296
  • Country: hu
    • http://povi.fw.hu
Re: HiSoft Pascal
« Reply #89 on: 2013.November.20. 19:58:26 »
Quote from: Lacika
Közérthetően elmagyaráznád mire is való? :oops:
Alter:
megkérdezi a szimbolum tábla méretét, ez alapesetben 1667h byte
a szimbólum táblában vannak eltárolva a deklarált változóink, függvényeink és eljárásaink neve, típusa, stb.
az értékét átírva (hexa-ban), módosíthatjuk ennek a táblázatnak a méretét.

a táblázat kezdőcíme fix, ez az 1.1-es verzióban a 4CD1H címen kezdődik, a szimbólum tábla kezdőcímének értéke a a 4A41H címen van eltárolva.
ehhez hozzáadva a szimbólumtábla méretét (alapesetben a 1667H-et), megkapjuk a forráskódunk kezdőcímét: 6338H (aminek értéke egyébként a korábbi hozzászólásban már említett 48A3 címen van eltárolva)

a compiler és a translate stack a fordításkor (memóriába, ill. lemezre) beállított verem értékét mutatja
ez a cím ugye a verem tetejét mutatja, tehát az első elem a 0fffh címen lesz (3-as lap teteje).
a változóknak is ide foglal memóriát a pascal
legegyszerűbben egy példát mutatnék:
Code: [Select]
var
  i : integer;
  ch : char;
mivel az integer 2 byte-ot foglal, az I változónk a 0FFFEH és 0FFFFH címen lesz eltárolva (erről meggyőzödhetünk az ADDR(I) paranccsal is).
a char egy byte-ot foglal, ezért a CH változónk a 0FFFDH címen lesz tárolva
ez alatt kezdődik a verem (vagyis a 0FFFCH címtől lefelé)

ha a compiler, vagy a translate stack-et átírjuk, akkor ott lesz a verem (és a változóknak foglalt hely) teteje
tehát, ha C000-ra írjuk, akkor pl. az elsőként deklarált 1 byte-os változónk a 0BFFF címen lesz, vagyis a 3-as lapunkat nem használja a Pascal, ezért szabadon lapozható.

remélem, érthető volt
*** Speicherplatz zu klein