Enterprise Forever

:HUN => Programozás => Topic started by: Povi on 2013.October.29. 15:16:33

Title: HiSoft Pascal
Post by: Povi on 2013.October.29. 15:16:33
na, megcsináltam a Sierpinski háromszög-rajzoló progit Pascal-on is.
a Turbo Pascal-on 17 mp, itt 10 mp alatt lefut...
http://www.youtube.com/watch?v=GXBMkGNDceI&feature=youtu.be
Title: Re: HiSoft Pascal
Post by: Zozosoft on 2013.October.29. 15:24:52
Programfájlt lehet kérni? :oops:
Title: Re: HiSoft Pascal
Post by: Povi on 2013.October.29. 15:26:43
Quote from: Zozosoft
Programfájlt lehet kérni? :oops:
Code: [Select]
PROGRAM EXOSBOVITO;

VAR
  STRTEMP : ARRAY[1..255] OF CHAR;
 
PROCEDURE XSET(VALTOZO,ERTEK:INTEGER);
BEGIN
  INLINE(#06,#01) {LD B,1};
  INLINE(#DD,#4E,#04) {LD C,(IX+04)};
  INLINE(#DD,#56,#02) {LD D,(IX+02)};
  INLINE(#F7,#10) {EXOS 16};
END;

PROCEDURE GRAFON(CH,MODE,COLOR,XSIZE,YSIZE:INTEGER);
BEGIN
  XSET(22,MODE);
  XSET(23,COLOR);
  XSET(24,XSIZE);
  XSET(25,YSIZE);
  INLINE(#DD,#7E,#0A) {LD A,(IX+10H)};
  INLINE(#11,#8A,#14) {LD DE,148AH)};
  INLINE(#F7,#01) {EXOS 1};
 END;

PROCEDURE GRAFOFF(CH:INTEGER);
BEGIN
 INLINE(#DD,#7E,#02) {LD A,(IX+2)};
 INLINE(#F7,#03) {EXOS 3};
END;
 
PROCEDURE DISPLAY(CH,SAT,SFROM,STO:INTEGER);
BEGIN
  INLINE(#DD,#7E,#08) {LD A,(IX+8)};
  INLINE(#06,#01) {LD B,1};
  INLINE(#DD,#4E,#04) {LD C,(IX+4)};
  INLINE(#DD,#56,#02) {LD D,(IX+2)};
  INLINE(#DD,#5E,#06) {LD E,(IX+6)};
  INLINE(#F7,#0B) {EXOS 11};
END;

PROCEDURE PALETTE(CH,C0,C1,C2,C3,C4,C5,C6,C7:INTEGER);
BEGIN
  POKE(ADDR(STRTEMP),CHR(27));
  POKE(ADDR(STRTEMP)+1,'C');
  POKE(ADDR(STRTEMP)+2,CHR(C0));
  POKE(ADDR(STRTEMP)+3,CHR(C1));
  POKE(ADDR(STRTEMP)+4,CHR(C2));
  POKE(ADDR(STRTEMP)+5,CHR(C3));
  POKE(ADDR(STRTEMP)+6,CHR(C4));
  POKE(ADDR(STRTEMP)+7,CHR(C5));
  POKE(ADDR(STRTEMP)+8,CHR(C6));
  POKE(ADDR(STRTEMP)+9,CHR(C7));
  INLINE(#DD,#7E,#12) {LD A,(IX+18)};
  INLINE(#01,#0A,#00) {LD BC,10};
  INLINE(#11,#01,#FF)  {LD DE,FF01H};
  INLINE(#F7,#08) {EXOS 8};
END;

PROCEDURE PLOT(CH,X,Y:INTEGER);
BEGIN
  POKE(ADDR(STRTEMP),CHR(27));
  POKE(ADDR(STRTEMP)+1,'A');
  POKE(ADDR(STRTEMP)+2,X);
  POKE(ADDR(STRTEMP)+4,Y);
  INLINE(#DD,#7E,#06) {LD A,(IX+6)};
  INLINE(#01,#06,#00) {LD BC,6};
  INLINE(#11,#01,#FF)  {LD DE,FF01H};
  INLINE(#F7,#08) {EXOS 8};
END;
 
PROCEDURE BEAM(CH,ONOFF:INTEGER);
BEGIN
  POKE(ADDR(STRTEMP),CHR(27));
  POKE(ADDR(STRTEMP)+1,CHR(ORD('s')-(ONOFF*32)));
  INLINE(#DD,#7E,#04) {LD A,(IX+4)};
  INLINE(#01,#02,#00) {LD BC,2};
  INLINE(#11,#01,#FF)  {LD DE,FF01H};
  INLINE(#F7,#08) {EXOS 8};
END;

PROCEDURE FILL(CH:INTEGER);
BEGIN
  POKE(ADDR(STRTEMP),CHR(27));
  POKE(ADDR(STRTEMP)+1,'F');
  INLINE(#DD,#7E,#02) {LD A,(IX+2)};
  INLINE(#01,#02,#00) {LD BC,2};
  INLINE(#11,#01,#FF)  {LD DE,FF01H};
  INLINE(#F7,#08) {EXOS 8};
END;
PROCEDURE MOVETO(CH,X,Y:INTEGER);
BEGIN
  BEAM(CH,0);
  PLOT(CH,X,Y);
END;

PROCEDURE SIERP(W,X,Y:INTEGER);
BEGIN
  IF W>28 THEN BEGIN
    SIERP(W DIV 2,X,Y);
    SIERP(W DIV 2,X+W DIV 4,Y-W DIV 2);
    SIERP(W DIV 2,X+W DIV 2,Y)
  END
  ELSE BEGIN
    PLOT(101,X,Y);BEAM(101,1);
    PLOT(101,X+W DIV 2,Y-W);
    PLOT(101,X+W,Y);PLOT(101,X,Y);
    MOVETO(101,X+4,Y-4);FILL(101);
  END
END;

BEGIN
  GRAFON(101,1,0,40,27);
  PALETTE(101,32,142,0,0,0,0,0,0);
  DISPLAY(101,1,1,27);
  SIERP(896,180,950);
  READLN;
  GRAFOFF(101);
END.

Title: Re: HiSoft Pascal
Post by: Povi on 2013.October.29. 15:36:26
érdekességek a HiSoft Pascal-ból:
annyira régi implementáció, hogy pl. nincs benne STRING, BYTE és WORD típus se. csak NAGYBETŰS utasításokat fogad el (a writeln nem jó, csak a WRITELN)
a változókban nem lehet aláhúzás jel, ezért lett lecserélve pl. a GRAF_ON procedúra neve GRAFON-ra
csak INTEGER (előjeles)
így kicsit trükközni kellett: a procedúrák paramétereit az IX+2 helytől tárolja a fordító, ha pl. van egy ilyen sorunk:
Code: [Select]
PROCEDURE VALAMI(A,B,C:INTEGER);
akkor a C paraméter értéke az IX+2 és IX+3 helyen, a B = IX+4 és IX+5, A = IX+6 és IX+7 címen lesz eltárolva.
Title: Re: HiSoft Pascal
Post by: Z80System on 2013.October.29. 15:45:13
Szerettem a pascal -ban, hogy kicsit olyan assembly -re emlékeztető a szintaxisa ...

Ugyan magával a nyelvvel tán egy iskolai év keretein belül foglalkoztam csak, de mindíg olyan jó volt ránézni a forrásaira ... olyan otthonos volt az assembly után ...
Title: Re: HiSoft Pascal
Post by: endi on 2013.October.29. 16:21:33
Quote from: Z80System
Szerettem a pascal -ban, hogy kicsit olyan assembly -re emlékeztető a szintaxisa ...

Ugyan magával a nyelvvel tán egy iskolai év keretein belül foglalkoztam csak, de mindíg olyan jó volt ránézni a forrásaira ... olyan otthonos volt az assembly után ...
meg főleg az EP basicre
Title: Re: HiSoft Pascal
Post by: IstvanV on 2013.October.29. 16:36:17
Quote from: Povi
na, megcsináltam a Sierpinski háromszög-rajzoló progit Pascal-on is.
a Turbo Pascal-on 17 mp, itt 10 mp alatt lefut...
Ez az assembler verzió is ~10 másodperc alatt fut le, tehát a futásidő nagy részét valójában az EXOS rajzoló rutinok teszik ki:
[attachurl=#]
Title: Re: HiSoft Pascal
Post by: Povi on 2013.October.29. 16:37:28
Zozo, escape szekvenciákat küldeni lehet karakterenként is küldeni, vagy csak egyben, stringként? Pl. esc "F" a Fill-re...
Title: Re: HiSoft Pascal
Post by: Povi on 2013.October.29. 17:59:37
az létezhet, hogy a 2.3-as EXOS valamiért összeveszik a Pascal-lal?
2.32-vel már működik rendesen
Title: Re: HiSoft Pascal
Post by: Povi on 2013.October.29. 18:33:05
Globális változók:
10000H címtől lefelé:
Code: [Select]
VAR
  I  : INTEGER;
  CH : CHAR;
  R  : REAL;

esetén a változók az alábbi memóriacímeken lesznek eltárolva:
I : 2 byte, 0FFFH és 0FFFEH
CH : 1 byte, 0FFFDH
R : 4 byte, 0FFF9H, 0FFFAH, 0FFFBH, 0FFFCH
Title: Re: HiSoft Pascal
Post by: Lacika on 2013.October.29. 18:54:37
Quote from: Povi
na, megcsináltam a Sierpinski háromszög-rajzoló progit Pascal-on is.
a Turbo Pascal-on 17 mp, itt 10 mp alatt lefut...
http://www.youtube.com/watch?v=GXBMkGNDceI&feature=youtu.be
Hoppá! Ez igen!
Includ file-t nem lehet használni Hisoft Pascal-ban? Enterpress alapján próbálkoztam ezzel (lásd csatolmány), de nem tudtam életet lehelni belé.
Bár, ha jól sejtem, a tied amúgy gyorsabb megoldás. Esetleg ki lehetne egészíteni a Graphh.tpu összes eljárására? :oops: Utána a TURTLE.TPU szerintem már menne egyedül is
Title: Re: HiSoft Pascal
Post by: Povi on 2013.October.29. 19:30:26
Quote from: Lacika
Hoppá! Ez igen!
Includ file-t nem lehet használni Hisoft Pascal-ban? Enterpress alapján próbálkoztam ezzel (lásd csatolmány), de nem tudtam életet lehelni belé.
Bár, ha jól sejtem, a tied amúgy gyorsabb megoldás. Esetleg ki lehetne egészíteni a Graphh.tpu összes eljárására? :oops: Utána a TURTLE.TPU szerintem már menne egyedül is
pedig ez működik!!!! :-)

akkor ezek szerint lehet include fájlt csinálni
akkor így meg tudnám csinálni a tpu-kat
Title: Re: HiSoft Pascal
Post by: Povi on 2013.October.29. 19:54:03
na, ez érdekes!
úgy tűnik, az enterprise-os HiSoft Pascal-ban működik a WRITE(EXOS(xx)); parancs
és a regiszter értékadás is működik. Persze nem közvetlenül a BC regiszternek ad értéket pl. az RBC:=1000 utasítás, hanem elmenti egy memóriacímre, amit majd a WRITE(EXOS(xx)) utasítás kiolvas. Szóval, az INLINE-os módszer azért egy kicsit gyorsabb.
Pl. egy EXOS 11 hívás így történik:
Code: [Select]
      LD HL,11
      CALL 04D7H


04D7H LD A,L ;A-ban az EXOS funkcióhívás száma
      LD (04E7H),A ;az RST 30h autasítás mögé bemásolásra kerül a funkcióhívás száma
      LD A,(04F4H)
      LD BC,(04F5H)
      LD DE,(04F7H)
04E6H EXOS xx
      LD (04F7H),DE
      LD (04F5H),BC
      LD (04F4H),A
      RET
Title: Re: HiSoft Pascal
Post by: Lacika on 2013.October.29. 20:03:39
Quote from: Povi
akkor ezek szerint lehet include fájlt csinálni
akkor így meg tudnám csinálni a tpu-kat
:smt038
Title: Re: HiSoft Pascal
Post by: Lacika on 2013.October.29. 20:06:38
Text 80-ba hogy kell programból átlépni?
Title: Re: HiSoft Pascal
Post by: Povi on 2013.October.29. 20:10:59
ha az editorban nyomsz egy "W"-t, majd ENTER-t, az nem jó? utána már 80 karakteresben maradsz
Title: Re: HiSoft Pascal
Post by: Lacika on 2013.October.29. 20:16:03
Quote from: Povi
ha az editorban nyomsz egy "W"-t, majd ENTER-t, az nem jó? utána már 80 karakteresben maradsz
Programból nem lehet váltani? Bár Spectrumos cucc, tartok tőle, hogy nem...
Title: Re: HiSoft Pascal
Post by: Zozosoft on 2013.October.29. 20:24:00
Quote from: Povi
Zozo, escape szekvenciákat küldeni lehet karakterenként is küldeni, vagy csak egyben, stringként? Pl. esc "F" a Fill-re...
Lehet.
Title: Re: HiSoft Pascal
Post by: Zozosoft on 2013.October.29. 20:28:19
Quote from: Povi
az létezhet, hogy a 2.3-as EXOS valamiért összeveszik a Pascal-lal?
2.32-vel már működik rendesen
Elképzelhető, fogtunk ott egy bugot, amitől 2.31 lett :oops: EXDOS volt a konfigodban? Ha jól emlékszem magnós konfigban jött elő.
Title: Re: HiSoft Pascal
Post by: Lacika on 2013.October.29. 22:07:49
Azt kell, hogy mondjam a Hisoft Pascal még gyorsabb, mint a Turbo Pascal. ;-)
Title: Re: HiSoft Pascal
Post by: Povi on 2013.October.30. 09:42:15
elkezdtem "szebbíteni" a grafikai rutinokat (már külön TPU-ban vannak)

a FILL pl. ilyen lett
Code: [Select]
PROCEDURE FILL(CH:INTEGER);
BEGIN
  INLINE(#DD,#7E,#02) {LD A,(IX+2)};
  INLINE(#06,#1B) {LD B,27};
  INLINE(#F7,#07) {EXOS 7};
  INLINE(#DD,#7E,#02) {LD A,(IX+2)};
  INLINE(#06,#46) {LD B,"F"};
  INLINE(#F7,#07) {EXOS 7};
END;

kérdésem az, hogy vajon mennyivel lassabb n db bájtot kiírni EXOS 7-tel, mint egy n-bájtos blokkírás EXOS 8-cal? (pl. a paletta írásnál 10 byte-ot kell küldeni, persze ez pont nem sebességkritikus, az ember nem gyakran állítgatja a palettát).

egy olyan tesztet azért csináltam, hogy ASMON-ban a 255-ös csatornára kiküldtem egy 5000 byte-os blokkot (teliírtam a képernyőt "A" betűkkel), ez kb. 9 mp volt
és kiírattam 5000 db "A" betűt EXOS 7-tel is, ez kb. 13 mp volt. Úgy gondolom, hogy maga a ciklus futási ideje nem ront 4 mp-et, tehát ennyivel lassabb a byte-onkénti másolás.

még más teszteken is jár a fejem, egyelőre csak hangosan gondolkodok
Title: Re: HiSoft Pascal
Post by: IstvanV on 2013.October.30. 10:13:27
Összehasonlítás az ASM verzióval (minden teszt a 100h címtől (program indítása) a billentyűzetre várakozás eléréséig futott, kivéve az utolsót, ami a rajzolás sebességét nem mérte):

Eredeti verzió (rövid EXOS 8 blokkok): 10.96 s
Pufferelt video adat (az összes adatot először csak egy pufferben tárolta, majd az egészet egyszerre írta ki egy EXOS 8 hívással, és csak utána hívta a display-t): 8.67 s
Pufferelt verzió karakterenkénti kiírásra módosítva: 17.43 s
Pufferelt változat csak az EXOS 8 eléréséig: 0.61 s

A tesztek 640K-s emulált konfiguráción futottak, a BFh port értéke 4 volt (várakozás csak M1-nél).
Title: Re: HiSoft Pascal
Post by: Zozosoft on 2013.October.30. 10:39:32
EXOS 7/8 közti különbséget a HxC progiban is jól éreztem, elsőként karakterenként írta ki a fájlneveket (főként a hosszú fájlnevek miatt, amiket apránként kell összevadászni), aztán raktam bele puffer+EXOS 8 módszert amivel sokkal gyorsabb lett.
Title: Re: HiSoft Pascal
Post by: Povi on 2013.October.30. 10:58:49
Quote from: IstvanV
Összehasonlítás az ASM verzióval (minden teszt a 100h címtől (program indítása) a billentyűzetre várakozás eléréséig futott, kivéve az utolsót, ami a rajzolás sebességét nem mérte):

Eredeti verzió (rövid EXOS 8 blokkok): 10.96 s
Pufferelt video adat (az összes adatot először csak egy pufferben tárolta, majd az egészet egyszerre írta ki egy EXOS 8 hívással, és csak utána hívta a display-t): 8.67 s
Pufferelt verzió karakterenkénti kiírásra módosítva: 17.43 s
Pufferelt változat csak az EXOS 8 eléréséig: 0.61 s

A tesztek 640K-s emulált konfiguráción futottak, a BFh port értéke 4 volt (várakozás csak M1-nél).
ez jó, köszi István! :-)
érdekes, hogy csak maga a rajzolás kb. 8 mp.
akkor úgy tűnik, mégis csak jobb a blokkírás, akár két bájt esetén is (?) - sok kicsi sokra megy
viszont most azon gondolkodom, hogy lehetne ezt elegánsan megoldani.
mert procedúránként lokális puffert létrehozni sok idő, és bonyolult is oda másolni dolgokat.
vagy marad az eredeti verzió, ahol van egy xx (jelen esetben 255) byte-os puffer, a memória tetején deklarálva
ezzel csak két baj van:
1. nem túl elegáns (szerintem)
2. ha ezt a fájlt include-olni akarom, akkor már nem lehet a második pas fájlban globális változókat deklarálni
Title: Re: HiSoft Pascal
Post by: Povi on 2013.October.30. 11:22:29
közben arra rájöttem, ha marad a pufferes verzió (aminek ismert a kezdőcíme), akkor gyorsabb a POKE helyett INLINE használni, kicsit rövidebb kódot is létre lehet hozni
Title: Re: HiSoft Pascal
Post by: Lacika on 2013.October.30. 22:40:06
Az nem túl szimpatikus, hogy a write másképp működik, mint TP-ben.:ds_icon_frown:
Title: Re: HiSoft Pascal
Post by: Povi on 2013.October.31. 08:38:48
Azon gondolkodom, hogy csinálok egy egyszerűbb grafikai rutingyűjteményt is, ami a DOS-os TP graph.tpu-jával lenne kompatibilis. Nem kéne csatornaszámokat megadni, meg ilyenek, hanem lenne fixen pl. a 101-es csatornán egy 4 színű grafikus lap, 320x200-ban (és akkor a CGA kompatibilitás is meg lenne :-D ).
Azt nem értem még, hogy az EXOS miért bal alsó sarokba rakja a 0,0-t? nekem bal fölül logikusabb lenne.
Azon gondolkodom még, hogy lehet, hogy olyan rutinokat kéne írni, ami nem EXOS esc szekvenciákat küld (pl. vonalrajzolásnál), hanem közvetlenül írja a video RAM-ot, így sokkal gyorsabb lenne (persze a video-laphoz szabályosan le lenne foglalva egy szegmens).
Title: Re: HiSoft Pascal
Post by: Zozosoft on 2013.October.31. 09:10:35
Quote from: Povi
Azt nem értem még, hogy az EXOS miért bal alsó sarokba rakja a 0,0-t?
Matekórán hova raktad a koordináta rendszer kezdetét? :-)
Title: Re: HiSoft Pascal
Post by: Povi on 2013.October.31. 10:14:25
az origóba :-)
OK, ennek is van egy logikája, de a másik változatnak is (bal felső sarok).
Title: Re: HiSoft Pascal
Post by: Povi on 2013.October.31. 10:20:23
kezd egyre kevésbé tetszeni ez a HiSoft Pascal... (pedig jó gyors)
nem ismeri a konstansokat...
nagybetűvel kell írni mindent...
Title: Re: HiSoft Pascal
Post by: Povi on 2013.October.31. 10:23:14
Quote from: Povi
akkor úgy tűnik, mégis csak jobb a blokkírás, akár két bájt esetén is (?) 
1. nem túl elegáns (szerintem)
2. ha ezt a fájlt include-olni akarom, akkor már nem lehet a második pas fájlban globális változókat deklarálni
válaszul a saját kérdésemre:
megéri már két bájtot is blokkírással küldeni, mint 2x1 byte-ot:
5000x2x1 byte írása a képernyőre: 26 mp
5000x 2 byte-os blokk írás: 23 mp
Title: Re: HiSoft Pascal
Post by: Lacika on 2013.October.31. 18:37:18
Képernyőt itt hogy lehet törölni?
Title: Re: HiSoft Pascal
Post by: Lacika on 2013.October.31. 18:42:51
Quote from: Povi
kezd egyre kevésbé tetszeni ez a HiSoft Pascal... (pedig jó gyors)
nem ismeri a konstansokat...
nagybetűvel kell írni mindent...
És nincs benne file-kezelés.
Bár védelmében el kell mondani, hogy ez standard Pascal. A Turbo Pascal - újdonságai révén - nem véletlenül lett akkora siker.
Title: Re: HiSoft Pascal
Post by: Lacika on 2013.October.31. 18:45:21
Quote from: Povi
Azt nem értem még, hogy az EXOS miért bal alsó sarokba rakja a 0,0-t? nekem bal fölül logikusabb lenne.
Szerintem meg rajzolásnál a jobb alsó a logikusabb (koordinátarendszer). CGA-ban mindent "fejjel lefelé" rajzolsz.
Title: Re: HiSoft Pascal
Post by: Lacika on 2013.October.31. 18:46:32
Ha jól tudom, a TPU a Turbo Pascal Unit rövidítése. Vagyis esetünkben inkább majd a HPU kiterjesztés lenne célszerű.
Title: Re: HiSoft Pascal
Post by: Lacika on 2013.November.01. 09:54:58
Értem én azt, hogy a standard Pascal-ban nincs string típus (mint ahogy a korabeli nyelvekben - pl. Fortran-ban - sincs), de ez így nagyon nyögvenyelős...
Definiálok egy típust, majd egy változót:

TYPE STR=ARRAY[1..80];
VAR NEV:STR;

Ezután viszont nem működik a

NEV:='Hisoft Pascal';

értékadás, típuseltérés miatt - ugyanis a megadott szövegfüzér rövidebb, mint a várt 80 karakter...
Konkrét esetben a következőképpen fog a dolog működni:

TYPE STR=ARRAY[1.13];

vagyis egyeznie kell a tömbváltozóba töltött karakterek számának, a deklarált tömb elemeinek számával. :smt078
valami tippje van valakinek? Úgy tűnik, a HP elsősorban gyors fraktálrajzolásra lesz alkalmas... :ds_icon_cheesygrin:

A PACKED foglalt szó egyébként mit csinál, tudja valaki? A Turbo Pascal-ban is benne van, de ott nem csinál semmit (Csak a kompatibilitás miatt van benne).
Title: Re: HiSoft Pascal
Post by: endi on 2013.November.01. 10:08:27
TP-ben asszem a 0. elemben tárolta a string hosszát
lehet hogy előbb be kell írni bele?
Title: Re: HiSoft Pascal
Post by: Povi on 2013.November.04. 22:36:41
nem is tudom, már hova írjam (talán új topik kéne neki - grafika EXOS hívásokkal?)
lefuttattam a sierpinski 3szög rajzoló programot úgy, hogy csak a grafikus módot változtattam:
2 szín : 10.87 s
4 szín : 9.69 s
16 szín : 9.05 s
256 szín : 8.67 s
vagyis minél nagyobb a szín, annál gyorsabb a rajzolás
vajon miért? az mondjuk érthető, hogy 256 színű üzemmód gyors, mert 1 pixel = 1 byte, ergo könnyű pl. egy pixel-t rajzolni (ami az alapja mindennek): csak lerakok egy byte-ot
de a 4 színű mód miért gyorsabb a 2 színűnél? pedig szerintem 1 bit / pixel rajzolást egyszerűbben lehet kódolni, mint 2 bit / pixelt, ráadásul "furcsa" bitsorrenddel... mindenesetre érdekes :-)
Title: Re: HiSoft Pascal
Post by: IstvanV on 2013.November.05. 12:34:19
Quote from: Povi
vagyis minél nagyobb a szín, annál gyorsabb a rajzolás
vajon miért?
Kevesebb pixelt kell rajzolni :)
Title: Re: HiSoft Pascal
Post by: Povi on 2013.November.05. 22:28:42
próbálom az LPT rutint beleerőszakolni a Pascal-ba...
az a baj, hogy INLINE-okba nem lehet címeket írni, Zozo kódjában pedig vannak (pl. az "LPT"). Namármost azt én nem tudom, hogy milyen címre fog fordítódni az a kód (eleve máshova, ha lemezre, vagy memóriába fordítok). Szóval, hogyan lehetne ezt megoldani? Illetve adatokat (pl. magát az LPT-t) nem tudom, hogy írjam be a programba... Mert ha INLINE-ozom, az OK, de nem tudom, mi lehet az első byte címe... Nem tudom, érthető-e... :-)
Title: Re: HiSoft Pascal
Post by: Zozosoft on 2013.November.05. 22:54:53
Ha van benne "poke" akkor nem muszáj gépi kódba rakni.
Title: Re: HiSoft Pascal
Post by: Povi on 2013.November.05. 22:59:56
tényleg, poke, az van benne  :-) de mire is gondolsz? :-)
Title: Re: HiSoft Pascal
Post by: Zozosoft on 2013.November.05. 23:03:27
Quote from: Povi
tényleg, poke, az van benne  :-) de mire is gondolsz? :-)
Bepókolod a lefoglalt szegmensbe az LPT-t.
Mondjuk ehhez SPOKE kéne, ha nincs, akkor azt végülis egy kisebb rutinnal meg lehet csinálni.
Title: Re: HiSoft Pascal
Post by: Povi on 2013.November.05. 23:11:15
Quote from: Zozosoft
Bepókolod a lefoglalt szegmensbe az LPT-t.
Mondjuk ehhez SPOKE kéne, ha nincs, akkor azt végülis egy kisebb rutinnal meg lehet csinálni.
Á, értem :-)

közben arra jöttem rá, hogy a 3-as lapot nem lapozgathatom ám csak úgy össze-vissza, mert annak a tetején (0FFFFH-tól lefelé) vannak tárolva a változók. Szóval vagy ide-oda lapozgatok video-írásnál, vagy a a 2-es lapra teszem a video-ram-ot (ekkor mit kell változtatni a kódodon?)
és bízzunk benne, hogy alulról pedig nem tölti fel maga a programkód a memóriát a 2-es lapra nyúlóan... :-)
Title: Re: HiSoft Pascal
Post by: Povi on 2013.November.06. 17:04:46
sikerült a videolap létrehozása... :-)
Title: Re: HiSoft Pascal
Post by: Zozosoft on 2013.November.06. 17:06:17
Quote from: Povi
sikerült a videolap létrehozása... :-)
:smt038
Title: Re: HiSoft Pascal
Post by: Povi on 2013.November.06. 17:16:30
számomra még mindig elég misztikus ez az LPT birizgálás...
pl. jó lenne általános eljárást készíteni, ahol paraméterben megadhatnám a pixelsorok számát, és a kép szélességét. A színmód változtatása egyértelmű. De a többihez elég-e az első LPB-be piszkálni, vagy akkor a többibe is bele kell nyúlni? (ráadásul a "margó" nevezető bitek nem tudom, hogyan értelmezendők, gondolom, ezekből jön majd ki a kép szélessége?

ráadásul ez 082h port... b4..b11=LPT kezdőcímének középső nyolc bitje... ennél bonyolultabban nem is lehetett volna már megcsinálni... :-)
Title: Re: HiSoft Pascal
Post by: Povi on 2013.November.06. 17:29:59
Quote from: Povi
közben arra jöttem rá, hogy a 3-as lapot nem lapozgathatom ám csak úgy össze-vissza, mert annak a tetején (0FFFFH-tól lefelé) vannak tárolva a változók. 
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. :-)
Title: Re: HiSoft Pascal
Post by: Zozosoft on 2013.November.06. 17:33:48
Akkor azzal a tömbbel tudod pókolni is :-)
Title: Re: HiSoft Pascal
Post by: endi on 2013.November.06. 17:35:57
Quote from: Povi
pl. jó lenne általános eljárást készíteni, ahol paraméterben megadhatnám a pixelsorok számát, és a kép szélességét. A színmód változtatása egyértelmű. De a többihez elég-e az első LPB-be piszkálni, vagy akkor a többibe is bele kell nyúlni? (ráadásul a "margó" nevezető bitek nem tudom, hogyan értelmezendők, gondolom, ezekből jön majd ki a kép szélessége?

d
volt ilyen, én sokat használtam
nem tudom már honnan szedtem, talán valami specy átíró csomagból
Title: Re: HiSoft Pascal
Post by: IstvanV on 2013.November.06. 17:38:20
Quote from: Povi
De a többihez elég-e az első LPB-be piszkálni, vagy akkor a többibe is bele kell nyúlni?
Az alsó és a felső keret hosszát is módosítani kell a kép magasságának megfelelően. A korábban már ajánlott graph.s-ben található példa ezeknek a beállítására tetszőleges magasságú (de legfeljebb 256 soros) képhez:

Code: ZiLOG Z80 Assembler
  1. lptData:
  2.         defb    256 - VIDEO_HEIGHT, 12h
  3.         defb    (63 - VIDEO_WIDTH) / 2, (63 + VIDEO_WIDTH) / 2
  4.         defw    0000h, 0000h
  5.         defb    BG_COLOR, FG_COLOR, 0, 0, 0, 0, 0, 0
  6.         defb    256 - ((294 - VIDEO_HEIGHT) / 2), 02h,  63, 0,  0, 0, 0, 0
  7.         defb    0, 0, 0, 0, 0, 0, 0, 0
  8.         defb    256 - 3, 80h,  63, 0,  0, 0, 0, 0
  9.         defb    0, 0, 0, 0, 0, 0, 0, 0
  10.         defb    256 - 2, 00h,  6, 63,  0, 0, 0, 0
  11.         defb    0, 0, 0, 0, 0, 0, 0, 0
  12.         defb    256 - 1, 00h,  63, 32,  0, 0, 0, 0
  13.         defb    0, 0, 0, 0, 0, 0, 0, 0
  14.         defb    256 - 3, 00h,  63, 0,  0, 0, 0, 0
  15.         defb    0, 0, 0, 0, 0, 0, 0, 0
  16.         defb    256 - 9, 02h,  6, 63,  0, 0, 0, 0
  17.         defb    0, 0, 0, 0, 0, 0, 0, 0
  18.         defb    256 - ((295 - VIDEO_HEIGHT) / 2), 03h,  63, 0,  0, 0, 0, 0
  19.         defb    0, 0, 0, 0, 0, 0, 0, 0
  20. lptDataEnd:

Povi
Quote
(ráadásul a "margó" nevezető bitek nem tudom, hogyan értelmezendők, gondolom, ezekből jön majd ki a kép szélessége?
Igen. Ezeket célszerű így állítani (a szélesség karakterekben értendő):

Bal margó = (63 - szélesség) / 2
Jobb margó = (63 + szélesség)  / 2

Quote from: Povi
ráadásul ez 082h port... b4..b11=LPT kezdőcímének középső nyolc bitje... ennél bonyolultabban nem is lehetett volna már megcsinálni... :-)
Az alsó 4 bit mindig 0, ezért azt a portokon meg is takarították. :)
Title: Re: HiSoft Pascal
Post by: Povi on 2013.November.06. 17:43:21
Quote from: Zozosoft
Akkor azzal a tömbbel tudod pókolni is :-)
igen, de az POKE parancs rövidebb kódba fordul, mint a tömbbe írás, szóval, sok értelme nem lenne azt használni... :-)
Title: Re: HiSoft Pascal
Post by: Povi on 2013.November.06. 17:49:05
Quote from: IstvanV
A korábban már ajánlott graph.s-ben található példa ezeknek a beállítására tetszőleges magasságú (de legfeljebb 256 soros) képhez:
igen, ezt én is nézegettem, csak már elakadtam ott, hogy (ha jól számolom) nálad 8 LPB van, míg Zozonál csak 7. Mi az a plusz egy? A status soré? 
A "(63 - VIDEO_WIDTH) / 2" -nál ha páratlan számot osztunk, csonkolni kell, vagy kerekíteni? (és miért pont 63-ból kell kivonni...)?
Title: Re: HiSoft Pascal
Post by: IstvanV on 2013.November.06. 17:56:23
Quote from: Povi
igen, ezt én is nézegettem, csak már elakadtam ott, hogy (ha jól számolom) nálad 8 LPB van, míg Zozonál csak 7. Mi az a plusz egy? A status soré?
Valószínűleg a függőleges visszafutásnál van kisebb eltérés, de ennek nincs nagy jelentősége. Ha probléma az LPT mérete, akkor a 6. (3 soros) LPB törölhető, az utána következő 9 soros pedig 12 sorosra növelhető, így már csak 7 LPB marad. A legfontosabb, hogy a teljes kép 312 soros legyen.

Quote from: Povi
A "(63 - VIDEO_WIDTH) / 2" -nál ha páratlan számot osztunk, csonkolni kell, vagy kerekíteni?
Az előbbi, mert az assembler is így fordítja az egész osztást. A konstans azért 63, hogy a 40 karakter széles kép a "szabványos" LM=11,RM=51 pozícióba kerüljön, és páratlan méretnél jobbra legyen igazítva (igazi gépen ugyanis a kép általában kissé el van tolva balra).
Title: Re: HiSoft Pascal
Post by: Lacika on 2013.November.15. 16:53:08
Jól gondolom, hogy itt a változó deklarációk, majd az eljárás-deklarációk sorrendje kötött, és így csak egy include file-t lehet beilleszteni (legalábbis ami használ globális változót)?
Title: Re: HiSoft Pascal
Post by: Povi on 2013.November.15. 21:50:23
Csináltam az 1.1-es ROM verzióból 5-ös fejlécű fájlt is. A 0.3-as verziójú nem használható semmire... :-)
Innét letölthető. Egyébként a ROM verziónak nem túl sok értelme van, azon túl, hogy gyorsabb a "betöltés", mert az egészet átmásolja a RAM-ba, és onnét futtatja.
Title: Re: HiSoft Pascal
Post by: Povi on 2013.November.18. 17:55:51
Ezt érdemes kipróbálni, látványos: :-)

Code: [Select]
10 PROGRAM A;
20 BEGIN
30   USER(#0242);
40 END.

Title: Re: HiSoft Pascal
Post by: Lacika on 2013.November.18. 18:02:41
Quote from: Povi
Csináltam az 1.1-es ROM verzióból 5-ös fejlécű fájlt is.
Kösz! Ez nekem igen hasznos.
Title: Re: HiSoft Pascal
Post by: szipucsu on 2013.November.18. 18:04:32
Quote from: Povi
Ezt érdemes kipróbálni, látványos: :-)
Ez mit csinál? Sosem használtam Pascalt, de az USER utasítást leszámítva ezeket az utasításokat véletlenül ismerem.
Nem kéne a BEGIN végére is valami írásjel?
Title: Re: HiSoft Pascal
Post by: Povi on 2013.November.18. 18:11:36
Quote from: szipucsu
Ez mit csinál? 
A USER parancs a megadott címen lévő utasításra ugrik, onnét folytatja a program futását.
Ez a rész egy hibaüzenetet ír ki a status sorba, és végtelen ciklusban színezi a border-t. Ide akkor ugrik a Pascal, még a legelején, ha nem sikerül megnyitni a szükséges csatornákat, vagy nem sikerül memóriaszegmenst foglalni magának.
Title: Re: HiSoft Pascal
Post by: Povi on 2013.November.18. 18:29:44
hogyan tárolja a forráskódot a HiSoft Pascal?

a forráskód kezdőcímét a 48A3H-n lévő word mondja meg.
ez jelen esetben a 6338H címen kezdődik.
Hogy épül fel egy sor?
Az első két byte-ban van tárolva a sorszám.
A következő byte azt mondja meg, hány space-szel kezdődik a sor.
A következő byte(ok) maga a szöveges része a sornak.
A sort egy chr(13) (0dh) byte zárja le.
Néhány utasítás (35 db) tokenizálva van.
pl.:
81H = PROGRAM
82H = DIV
83H = CONST
84H = PROCEDURE
stb.

A
Code: [Select]
10 PROGRAM PROBA;
20 BEGIN
30   WRITELN('Hello');
40 END.
pl. így néz ki a memóriában:
Code: [Select]
;első sor:
    dw 10
    db 0
    db 81h    ;a PROGRAM tokenizálva
    db " PROBA;"
    db 13

;második sor:
    dw 20
    db 0
    db 98h    ;a BEGIN tokenizálva
    db 13

harmadik sor:
    dw 30
    db 2      ;2 szóköz van a sor elején
    db "WRITELN('Hello');"
    db 13

;negyedik sor:
    dw 40
    db 0
    db 90h    ;END tokenizálva
    db "."
    db 13
Mivel a sorszámok INTEGER formában vannak, összesen csak 32767 sorunk lehet (persze ez is bőven elég, ha lenne egy ekkora programunk, csak a sorszámok tárolására elmenne 64kB :-) ).

Lehet azonban trükközni, ha minden sor sorszámát 0-ra írjuk át (közvetlenül a memóriában turkálva), akkor kilistázhatatlan lesz a programunk.
Vagy pl. átírható a sorszám pl. 0ffffh-ra is, akkor listázásor -1 lesz annak a sornak a sorszáma. Ez kitörölhetetlen :-)
Title: Re: HiSoft Pascal
Post by: Zozosoft on 2013.November.19. 10:45:48
HiSoft (http://www.hisoft.co.uk/about/about.html)
Title: Re: HiSoft Pascal
Post by: Povi on 2013.November.19. 13:39:39
találtaom egy nem dokumentált érdekes parancsot:
RANSEED(x,y,z : integer)
Az x, y és z értékeket tölti fel a 05B1h, 05AA és 05A3 címekre.
Ezt a területet egyedül a RANDOM utasítás használja.

Olyasmi lehet ez az utasítás, mint a RANDOMIZE. Más értelmes magyarázatot nem találok.
Title: Re: HiSoft Pascal
Post by: Lacika on 2013.November.19. 13:46:13
Van a Hisoft-ban képernyőtörlő utasítás is (így hirtelen nem jut eszembe a neve), ami a Spectrum verzió alapján valószínüleg CHR(12) értéket ír a képernypre, így Ep-n nem csinál semmit (legalábbis nekem úgy tűnik). Ez nem lehet átírni CHR(26)-ra?
Title: Re: HiSoft Pascal
Post by: Zozosoft on 2013.November.19. 13:49:54
Quote from: Povi
Olyasmi lehet ez az utasítás, mint a RANDOMIZE. Más értelmes magyarázatot nem találok.
Pontosan, mint a nevéből látszik is :-) (http://en.wikipedia.org/wiki/Random_seed)
Title: Re: HiSoft Pascal
Post by: Zozosoft on 2013.November.19. 13:50:51
Quote from: Lacika
Ez nem lehet átírni CHR(26)-ra?
Ha Povi megtalálja a kódban, akkor át lehet :-)
Title: Re: HiSoft Pascal
Post by: Povi on 2013.November.19. 14:50:07
Újabb (félig-meddig) ismeretlen függvény:
INCH : CHAR

a billentyűzeten leütött karakter kódját adja vissza
Code: [Select]
VAR CH : CHAR;
BEGIN
REPEAT
  CH:=INCH;
  IF CH<>CHR(0) THEN WRITE(CH);
UNTIL CH=CHR(27);
END.
Title: Re: HiSoft Pascal
Post by: Zozosoft on 2013.November.19. 14:56:08
Quote from: Povi
Újabb (félig-meddig) ismeretlen függvény:
Jól látom, hogy tulajdonképpen semmi leírás nincs a dokumentációban, hogy mit is tud a Hisoft Pascal? Vajon csak a magyar leírás ilyen béna, vagy angolul se volt?
Title: Re: HiSoft Pascal
Post by: Zozosoft on 2013.November.19. 15:12:59
A Spectrumos leírásban (http://ftp://ftp.worldofspectrum.org/pub/sinclair/games-info/h/HiSoftPascal4T.txt) benne van az INCH. És a Laci által említett képernyőtörlés: PAGE
Title: Re: HiSoft Pascal
Post by: Povi on 2013.November.19. 15:31:07
pont most tartok a PAGE-nél...
mindjárt kiderül, mi a helyzet :-)

viszont nagyon érdekes dolgot találtam!
mit csinál a MAKESTR() függvény?
foglalt szó, de bármilyen típust írok a zárójel közé, 71-es (!) hibakóddal tér vissza fordításkor!!!
Title: Re: HiSoft Pascal
Post by: Povi on 2013.November.19. 15:33:48
a PAGE tényleg egy CHR(12)-t ír...
Title: Re: HiSoft Pascal
Post by: Povi on 2013.November.19. 15:48:35
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
Title: Re: HiSoft Pascal
Post by: Povi on 2013.November.19. 15:51:50
Quote from: Zozosoft
Jól látom, hogy tulajdonképpen semmi leírás nincs a dokumentációban, hogy mit is tud a Hisoft Pascal?
Jól látod! :ds_icon_cheesygrin:
De az INCH legalább fel volt sorolva a foglalt szavak között, nem úgy, mint a RANSEED :-)
Title: Re: HiSoft Pascal
Post by: Povi on 2013.November.19. 15:57:38
Quote from: Povi
itt a javított változat, amiben már működik a PAGE utasítás
ennek azért örülök, legalább volt valami értelme annak, hogy belekezdtem a visszafejtésébe - kijavítottam egy majdnem 30 éves bugot! :-)
Title: Re: HiSoft Pascal
Post by: Lacika on 2013.November.19. 17:12:02
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
Ez gyors volt, kösz! A ROM változatokban kijavítanád? :oops:
Átírni CLRSCR-re azért nem érdemes, mert ez amúgy sem Turbo Pascal és akkor már önmagával sem lenne kompatibilis a Hisoft Pascal... (más gépeken is van!)
Title: Re: HiSoft Pascal
Post by: Lacika on 2013.November.19. 18:59:03
A PACKED kulcsszó mit csinál? Tudja valaki?
Title: Re: HiSoft Pascal
Post by: DrPrery 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...
Title: Re: HiSoft Pascal
Post by: Povi 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
Title: Re: HiSoft Pascal
Post by: Lacika 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.
Title: Re: HiSoft Pascal
Post by: Povi 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 (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 :-)
Title: Re: HiSoft Pascal
Post by: DrPrery 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...
Title: Re: HiSoft Pascal
Post by: lgb 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.
Title: Re: HiSoft Pascal
Post by: Povi 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.
Title: Re: HiSoft Pascal
Post by: Povi 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.
Title: Re: HiSoft Pascal
Post by: Povi 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.
Title: Re: HiSoft Pascal
Post by: Zozosoft 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.
Title: Re: HiSoft Pascal
Post by: Povi 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).
Title: Re: HiSoft Pascal
Post by: Povi 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 :-)
Title: Re: HiSoft Pascal
Post by: Lacika 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:
Title: Re: HiSoft Pascal
Post by: Povi 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
Title: Re: HiSoft Pascal
Post by: Lacika on 2013.November.20. 21:59:08
pfff... az bug lehet, hogy a PRED és a SUCC nem működik az általunk létrehozott felsorolás típusokon? (19-es hibakódot generál):

VAR NYELVEK:(ANGOL,NEMET,SPANYOL,OLASZ);
majd
WRITELN(SUCC(NEMET))

de a WRITELN(SUCC(FALSE)) működik... :smt017
Title: Re: HiSoft Pascal
Post by: Povi on 2013.November.20. 22:27:12
öööö.... passz

write(succ(ord(nemet)))
így már működik :-)
Title: Re: HiSoft Pascal
Post by: Lacika on 2013.November.20. 22:43:29
Nekem ez a típusdeklaráció magas a HiSoft-ban...!?
Vicces egy olyan Pacal, amiben nem lehet pl. résztartomány típust létrehozni. A {$R+} opció dísznek van.

PROGRAM PROBA;
TYPE BYTE=0..255;
VAR A:BYTE;
BEGIN
  A:=300;
  WRITE(A)
END.

A program simán kiírja a 300-at... :smt017
A
VAR A:0..255;
deklarációval ugyanez a helyzet.
Title: Re: HiSoft Pascal
Post by: Povi on 2013.November.21. 00:10:13
csak az L, O, S, I, A, P fordítási opciók vannak az EP változatban (a C-t kihagyták - Spectrumban és CPC-ben benne van)
R nem volt a spectrum változatban sem :-)
Title: Re: HiSoft Pascal
Post by: Povi on 2013.November.21. 09:37:26
csináltam egy verziót, amiben gyárilag definiálva van a PI konstans :-)
eljárásokat se bonyolult "beégetni" :-) (bár ahhoz fordítható forráskód kéne)

egyébként az eredeti verzióban az utolsó 293 byte az csak szemét volt, itt a tisztázott változat, PI-vel
Title: Re: HiSoft Pascal
Post by: Povi on 2013.November.21. 11:48:04
Quote from: Lacika
Az nem túl szimpatikus, hogy a write másképp működik, mint TP-ben.:ds_icon_frown:
Minden egész szám után automatikusan ír egy space-t, gondolom, az a baj, ugye?
a 33b7-re írj egy 3-ast, akkor nem fog :-)
Pascal-ban, ha van EPDOS-od, akkor írd be még fordítás előtt:
:W 33B7H 3
Title: Re: HiSoft Pascal
Post by: Lacika on 2013.November.21. 13:05:12
Quote from: Povi
Minden egész szám után automatikusan ír egy space-t, gondolom, az a baj, ugye?
a 33b7-re írj egy 3-ast, akkor nem fog :-)
Ha ennyi mindent javítasz rajta, van egy javaslatom: hagyjuk békén az eredeti 1.1-es verziót, és legyen 1.2-es. Ez a számok utáni automatikus space nagyon zavaró, és TP-ben nem így van. (Más Pascal változatot meg nem ismerek...)
És ha már 1.2-es verzió, említed, hogy lehetne berakni eljárásokat. Egy SETVAR (vagy akárhogy hívjuk) praktikus lenne benne, esetleg GETTIME, SETTIME, GETDATE, SETDATE, rendszerhívás? :oops:
Title: Re: HiSoft Pascal
Post by: Povi on 2013.November.21. 13:18:13
sííímán :-)
még arra gondoltam (de az már nagyon advanced lenne), hogy egy fordítási opcióval lehetne beállítani, hogy írjon-e space-t a számok után, vagy ne (csak hogy a HiSoft-tal is kompatibilis maradjon)... Persze nem ígérek semmit :-)
Title: Re: HiSoft Pascal
Post by: Lacika on 2013.November.21. 13:22:22
Quote from: Povi
sííímán :-)
És ha már így adod az ember alá a lovat...
FILE kezelést (is) pótló OPEN és CLOSE eljárások, valamint a megadott csatornára írás?
Esetleg GET, és JOY függvények.
Title: Re: HiSoft Pascal
Post by: Povi on 2013.November.21. 18:20:08
gyakorlatilag bármit meg lehet csinálni, amit PROCEDURE-val és FUNCTION-al meg lehet, "csak" gyorsabb lesz, ha gyárilag "be van égetve" :-)
hogy miért is? mert PROCEDURE és FUNCTION hívás esetén egy csomó mindent állít (pl. a verem beállítása, a paraméterek átadása az IX regiszteren keresztül történik, az nem túl gyors stb.). Ha pedig alapból tudja, akkor a fordító gondoskodik arról hogy a paraméterek már be legyenek töltve az eljáráshoz szükséges regiszterekbe :-)
Title: Re: HiSoft Pascal
Post by: Povi on 2013.November.22. 18:13:52
újdonságok a letölthető (nem végleges) verzióban:
PI konstans

SWAP(x : integer) : integer
  fölcseréli az alsó és felső bájtot

GOTOXY(x,y : integer)
  pozicionálja a kurzort a szöveges képernyőn

CLRSCR
  képernyőtörlés

tervek:

a PAGE parancs módosítása úgy, hogy a nyomtatóra chr(12)-t küldjön, a képernyőre chr(26)-ot
a 14f7h címen lévő byte mutatja, hogy mi az alapértelmezett output (0=képernyő, 1=printer)

a help szöveg kiíró rutint ki akarom cserélni gyorsabbra, mert jelenleg karakterenként írja, ráadásul menet közben vizsgálja, hogy nagybetűt kell-e írnia, és ha igen, akkor azt átszínezi pirosra - szóval nem túl gyors, de legalább idegesítően lassú :-)
... és még sok más

jelenleg az baj, hogy tényleg kéne már a szerkeszthető fordítható forráskód, mert a runtime részbe nem nagyon találok üres helyet, ahova bármit is lehetne pakolni (a pascal fordító és a lefordított 5-ös fejlécű állomány eleje ugyanaz), így most pl. a gotoxy parancsot is kb. makrószerűen fordítja, ahelyett, hogy csak egy call-t írna, ami a runtime részben lévő címre mutatna.
Title: Re: HiSoft Pascal
Post by: Z80System on 2013.November.22. 18:16:58
Quote
hogy tényleg kéne már a szerkeszthető fordítható forráskód, 

Na de nem azt csinálod éppen ?
Title: Re: HiSoft Pascal
Post by: Povi on 2013.November.22. 18:23:39
de igen, de van egy-két zűrzavaros dolog még benne :-)
Title: Re: HiSoft Pascal
Post by: Lacika on 2013.November.22. 20:26:52
Quote from: Povi
tervek:
SETVAR, TOGGLE, ASK parancs nincs a tervek között?
Ha van külön CLRSCR, a PAGE szót vissza lehetne írni.
Title: Re: HiSoft Pascal
Post by: Povi on 2013.November.22. 21:09:13
a PAGE-t megcsinálom úgy, ahogy terveztem, nem bonyolult, legalább kompatibilis marad a specci verzióval is :-) a setvar stb. parancsok is belekerülnek :-)
Title: Re: HiSoft Pascal
Post by: Povi on 2013.November.24. 11:33:01
PAGE módosítva
plusz még csináltam HI és LO függvényeket.

érdekes viszont ez az EXOS(x) parancs. Ugyanis eredetileg ez egy függvényként van definiálva, és visszatérési értéke az A regiszter értéke, CHAR típussal. Tehát, ha az ENTERPRESS-ben megjelent kódot használjuk (WRITE(EXOS(x)), akkor sikeres hívás esetén minden esetben kiír a képernyőre egy CHR(0)-t. Azon gondolkodom, hogy inkább ezt egy sima eljárássá kéne alakítani, így lehetne simán EXOS(x)-ként hívni. Az A regiszter értékét pedig úgy is feltölti az RA-ba, tehát nem vész el az infó.
Title: Re: HiSoft Pascal
Post by: Lacika on 2013.November.24. 13:40:13
Quote from: Povi
Azon gondolkodom, hogy inkább ezt egy sima eljárássá kéne alakítani, így lehetne simán EXOS(x)-ként hívni. Az A regiszter értékét pedig úgy is feltölti az RA-ba, tehát nem vész el az infó.
Ez jó ötlet!
Title: Re: HiSoft Pascal
Post by: Povi on 2013.November.24. 16:30:54
Quote from: Lacika
Ez jó ötlet!
itt van
Title: Re: HiSoft Pascal
Post by: Povi on 2013.November.24. 17:22:40
valami miatt a heass fagyással indul, ha be volt töltve előtte a Pascal. Tök mindegy, hogy BASIC-ből, vagy Pascal-ból indítom a HEASS-t. Ez vajon mitől lehet?
Title: Re: HiSoft Pascal
Post by: Lacika on 2013.November.24. 20:29:15
A READLN mi a búbánatot művel HiSift Pascalban? (Furcsán működik, legalábbis képernyőre...)
Title: Re: HiSoft Pascal
Post by: Povi on 2013.November.24. 20:39:34
miért, mit művel?
Title: Re: HiSoft Pascal
Post by: Lacika on 2013.November.24. 21:10:04
Kétszer kell ENTER-t nyomni.
Title: Re: HiSoft Pascal
Post by: Povi on 2013.November.24. 22:08:43
néhány grafikus parancs beépítve, és a hozzávaló demo :-)
Title: Re: HiSoft Pascal
Post by: Povi on 2013.November.24. 22:11:32
azon gondolkodom, hogy lehet, hogy úgy kéne csinálni (mert kicsit zavaró, hogy minden utasításhoz be kell írni a csatornaszámot is), hogy a csatornaszám egy külön változóba lenne eltárolva, és lenne egy parancs (pl. setchannel), amivel a csatornaszámot lehet változtatni, így a következő rajzoló parancs már azzal menne (ha több videolap van nyitva).
Title: Re: HiSoft Pascal
Post by: Lacika on 2013.November.25. 09:09:44
Igen, ezen már én is gondolkoztam. TP programok alakítgatása közben bennem is felvetődött ez a kérdés. A BASIC-ben ügye van legalább alapértelmezése a grafikus utasításoknak. Tényleg praktikus lenne, csak a neve utaljon, mire szolgál, pl. SETVIDCH vagy valami ilyesmi (a VIDEO legyen benne).
TP alá a graph.tpu-ból majd én is csinálok ilyet próbaképp, a forráskód mérete biztos csökken, és rugalmasabb megoldás is.
Title: Re: HiSoft Pascal
Post by: Povi on 2013.November.25. 11:55:26
na, végül megcsináltam, de úgy, hogy a write, writeln, gotoxy, page és clrscr parancsok működését is befolyásolja :-)
így az a jó, hogy bármilyen eszköz csatornaszámát írhatjuk (pl. file), és akkor a write-tal lehet file-ba írni.
Csak így nem biztos, hogy SETVIDEOCH-nak kéne lenni a parancsnak :-) Mondjuk lehetne csak SETCHANNEL().

Meg futás végén vissza kell állíani 121-re (ez az editor csatornaszáma a Pascal-ban), mert különben érdekes dolgokat művel :-) Persze majd csinálok egy RestoreCRTMode, vagy valamilyen hasonló nevű parancsot, ami visszaállítja a csatornát 121-re, és megjeleníti azt (ezt a megjelenítést csinálja egyébként a SIER5.PAS-ban lévő utolsó USER(#01EC) sor is).
Title: Re: HiSoft Pascal
Post by: Lacika on 2013.November.25. 19:07:19
Milyen grafikus utasítások vannak eddig benne?
Title: Re: HiSoft Pascal
Post by: Povi on 2013.November.25. 19:52:25
eddig még nem sok:
PLOT(x,y : integer)
PLOTREL(x,y : integer)
BEAMON
BEAMOFF
FILL
DISPLAY(ch,at,from,to : integer)
OPENVIDEO(ch : integer)
CLOSE(ch : integer)
most kivettem a csatornaszámra vonatkozó paramétert

arra gondoltam, inkább majd egy GRAPHINIT utasítás kéne, az beállítaná a rendszerváltozókat, és nyitna egy video-csatornát, így nem lenne külön OPENVIDEO

nem egyszerű a parancsok kitalálása... :-)
főleg, hogy logikus felépítésű maradjon az egész
Title: Re: HiSoft Pascal
Post by: Lacika on 2013.November.25. 20:06:29
Quote from: Povi
eddig még nem sok:
PLOT(x,y : integer)
PLOTREL(x,y : integer)
BEAMON
BEAMOFF
FILL
DISPLAY(ch,at,from,to : integer)
OPENVIDEO(ch : integer)
CLOSE(ch : integer)
most kivettem a csatornaszámra vonatkozó paramétert
A DISPLAY-ból, OPENVIDEO-ból, CLOSE szavakból kár kivenni a csatornaszámra hivatkozás. Ez ott szerintem inkább bonyolítás.
Title: Re: HiSoft Pascal
Post by: Povi on 2013.November.25. 20:12:42
azokból nem vettem ki, azért is írtam oda :-)
Title: Re: HiSoft Pascal
Post by: Lacika on 2013.November.26. 20:27:37
hehe...
Erre varjatok gombot:

PROGRAM PROBA;
VAR NAME:ARRAY[1..20] OF CHAR;
BEGIN
  WRITE('Name: ');
  READLN;READ(NAME);
  WRITELN(NAME);
END.

Mi a búbánatot csinál a READLN...?
Title: Re: HiSoft Pascal
Post by: Povi on 2013.November.27. 14:59:11
Quote from: Lacika
Text 80-ba hogy kell programból átlépni?
Az a baj, hogy az a programrész, ami a váltást csinálja, nem a runtime részben van, szóval Translate-tel lefordított programban nem fog működni.
De egyébként meg így:
Code: [Select]
PROCEDURE MODE80;
BEGIN
  POKE(#14FD,CHR(40));
  USER(#1EEC);
END;

PROCEDURE MODE40;
BEGIN
  POKE(#14FD,CHR(80));
  USER(#1EEC);
END;
Title: Re: HiSoft Pascal
Post by: Povi on 2013.December.03. 11:10:18
rájöttem, mire jó a titokzatos MAKESTR függvény... :-)
használata:
MAKESTR(string) : integer;
példa:
Code: [Select]
PROGRAM PROBA;
VAR A : INTEGER;
BEGIN
  A := MAKESTR('Hello');
  WRITE(A);
END.

A függvény visszatérési értéke mindig 1012 lesz (03F4H), ez egy memóriacím, ide másolja az idézőjelek közötti szöveget, egy hosszbájttal együtt. Sajnos az első szóközig, vagy chr(13)-ig nézi, tehát a 'Hello world!'-re is csak 5-ös hosszbájtot ad (persze ezt a kis hibát ki lehet javítani). :-)

egy nagy hibája van, max. 32 byte hosszú lehet a string (hosszbyte-tal együtt 33), különben a futtatható kódot fölülírja, és nincs erre semmilyen ellenőrzés... :-)
Title: Re: HiSoft Pascal
Post by: Zozosoft on 2013.December.03. 11:21:57
De ezek szerint ha valahova bepókoljuk a szöveget megfelelő formában, akkor lehet azt a címet használni MAKESTR helyett.
Title: Re: HiSoft Pascal
Post by: Povi on 2013.December.03. 12:13:49
ja, de így pl. akkor lehet file-t nyitni (még nem nagyon látom, mire lehetne használni ezt a parancsot):
Code: [Select]
RA:=1;
RDE:=MAKESTR('PROBA.TXT');
EXOS(1);
és változóval is működik
Title: Re: HiSoft Pascal
Post by: Povi on 2013.December.03. 15:08:33
Quote from: Lacika
Azt kell, hogy mondjam a Hisoft Pascal még gyorsabb, mint a Turbo Pascal. ;-)
persze, hogy gyorsabb, mert a REAL számok csak 4 byte-on vannak tárolva, a TP-ben pedig 6 byte-on
gyorsabb, de nem olyan pontos... :-)

egyébként pl. egy-két megoldás tényleg jobb a HP-ben, pl. az ABS függvény (egész számra) kb. 10%-kal gyorsabb, mint a TP-ben (majd felrakom mindkét kódot összehasonlításképpen)
Title: Re: HiSoft Pascal
Post by: Povi on 2013.December.03. 18:09:47
ABS számítása HP-ban:
Code: [Select]
l07b0:  ld      a,h   ;4
        or      a     ;4
        ret     p     ;11/5
l07b3:  xor     a     ;4
        sub     l     ;4
        ld      l,a   ;4
        ld      a,0   ;7
        sbc     a,h   ;4
        ld      h,a   ;4
        ret           ;10
összesen 50 cikus

TP-n:
Code: [Select]
ABSint:
bit 7,h 8 ; Test sign bit
ret z 11/5 ; .. already >0
ComplINT:
ld a,h 4 ; .. one's complement
cpl             4
ld h,a     4
ld a,l     4
cpl             4
ld l,a     4
inc hl 6 ; Fix for two's complement
ret             10

összesn 53 ciklus, vagyis 6%-kal gyorsabb a Hisoft Pascal :-)
Title: Re: HiSoft Pascal
Post by: szipucsu on 2013.December.03. 19:08:28
Quote
összesn 53 ciklus, vagyis 6%-kal gyorsabb a Hisoft Pascal :-)
Persze, hogy gyors! Ez már nem is Pascal, hanem assembly!
(Na jó, ez gyenge vicc volt, amúgy nem értek hozzá.)
Title: Re: HiSoft Pascal
Post by: IstvanV on 2013.December.03. 20:03:24
Quote from: Povi
ABS számítása HP-ban:
Code: [Select]
l07b0:  ld      a,h   ;4
        or      a     ;4
        ret     p     ;11/5
l07b3:  xor     a     ;4
        sub     l     ;4
        ld      l,a   ;4
        ld      a,0   ;7
        sbc     a,h   ;4
        ld      h,a   ;4
        ret           ;10
összesen 50 cikus

Egy keveset még lehetett volna gyorsítani: :)

Code: ZiLOG Z80 Assembler
  1. l07b0:  ld      a,h   ;4
  2.         or      a     ;4
  3.         ret     p     ;11/5
  4. l07b3:  xor     a     ;4
  5.         sub     l     ;4
  6.         ld      l,a   ;4
  7.         sbc     a,h   ;4
  8.         sub     l     ;4
  9.         ld      h,a   ;4
  10.         ret           ;10
  11.  
Title: Re: HiSoft Pascal
Post by: Povi on 2013.December.03. 20:12:48
te egy zseni vagy :-)
és még rövidebb is egy byte-tal a kód...
Title: Re: HiSoft Pascal
Post by: Povi on 2013.December.03. 21:26:14
van egy 15 byte-os rutin a 03c4h-tól kezdve, amire nincs ugrás sehonnét...
vajon miért maradt benne? ráadásul nem Spectrum átiratból maradt töredék, vagy ilyesmi, hanem kifejezetten EP128 kód:
Code: [Select]
l03c4:  call    l03df
l03c7:  ld      a,123
        exos    2
        call    l0458
        or      a
        jp      nz,ErrorEXOS
        ret     
a címkéket már én írtam hozzá (nem a disassembler), hogy rájuk kereshessek
az előző utasításról nem lehet ide jutni, mert az egy RET :-)
Title: Re: HiSoft Pascal
Post by: Zozosoft on 2013.December.03. 21:29:59
JP (HL) vagy ilyesmi?
Title: Re: HiSoft Pascal
Post by: Povi on 2013.December.03. 21:40:25
jaj, azt mindig elfelejtem...
persze, lehet, hogy valahogy ráugrik, csak nem tudom, honnét... (és miért)
mert az előtte lévő pár sor ugyanez azzal az eltéréssel, hogy 122-es csatornát hoz létre
viszont a 123-ast a printer: eszköz szokta használni...
Title: Re: HiSoft Pascal
Post by: Zozosoft on 2013.December.03. 22:04:46
Quote from: Povi
jaj, azt mindig elfelejtem...
És akkor ott vannak még a valahol a verembe dobjuk a címet, aztán majd ráRETelünk féle mókák is :-)
Title: Re: HiSoft Pascal
Post by: Povi on 2013.December.03. 22:53:53
érdekes, hogy futtatható fájl fordításakor (Translate parancs) is byte-onként írja a fájlt, ahelyett, hogy blokkműveletekkel csinálná. De ez a "hiba" legalább könnyen javítható, így gyorsabb lesz egy kicsit :-)
Title: Re: HiSoft Pascal
Post by: Povi on 2013.December.04. 18:30:55
érdekességek (persze aki tanult egyetemen programozni, annak valószínűleg nem újdonság :-) )
a visszafejtéssel párhuzamosan elkezdtem nézegetni a Turbo Pascal visszafejtett, kommentelt kódját, és egy csomó dolog kikristályosodott (mindig tanul valamit az ember):
pl. a négyzetgyök számítás: babilóniai módszerrel (Heron-eljárás):
http://en.wikipedia.org/wiki/Methods_of_computing_square_roots (http://en.wikipedia.org/wiki/Methods_of_computing_square_roots)
a HiSoft Pascal csak fixen 4 lépést használ, de már az is elég ahhoz a pontossághoz, amit 4 byte-os lebegőpontos számábrázolással el lehet érni:
Code: [Select]
;SQRT(x : real) : real
  ;input: X in HLDE
  ;output SQRT(x) in HLDE
l0e67:  ld      a,h
        or      a
        jp      m,l06c4     ;if X<0 then Maths Call Error
        ret     z           ;if X=0 then result=0 and return
        ld      (l150f),de
        ld      (l150d),hl  ;save X to memory
        sra     d           ;divide exponent by 2 (X0 in HLDE)
        ld      b,4
l0e78:  push    bc
        push    hl
        push    de          ;Xn to stack
        ld      bc,(l150d)
        push    bc
        ld      bc,(l150f)
        push    bc          ;X to stack
        call    l0acd       ;X / Xn
        call    l09a1       ;+ Xn
        dec     d           ;dec exponent (divide by 2)
        pop     bc
        djnz    l0e78
l0e8f:  ret
most már kicsit legalább világos, hogy is működik... :-)

vagy pl. a ROUND föggvény
soha nem gondolkoztam azon, hogy is működhet, pedig milyen egyszerű:
ha x>0, akkor TRUNC(X + 0,5),
ha X<0, akkor TRUNC(X - 0,5)
Title: Re: HiSoft Pascal
Post by: Povi on 2013.December.09. 14:00:21
na, rájöttem, hogy tud integer-t hexa formában kiírni! :-)
megörültem, hogy találtam valami nem dokumentált rész, aztán közben ott van a manual-ban :-)
használata: write(e:m:H)
 ahol e = integer szám
 m=teljes karakterhossz
 ha m=3 vagy m=4, akkor 4 számjegyen írja ki
 a m>4, akkor vezető space-eket is ír a szám elé (m-4 darabot)
 ha m=1, vagy m=2, akkor csak az legkisebb helyi értéken lévő 1, vagy 2 számjegyet írja ki
 a H pedig egy H betű
Title: Re: HiSoft Pascal
Post by: Povi on 2013.December.09. 14:11:50
a RTL rész nagyjából készen van, persze a lebegőpontos rutinok nem nagyon vannak kommentelve... :-) van egy-két szám is bent adatként, azokat is jó lenne megfejteni, hogy mik lehetnek, pl. az ARCTAN-nál találkoztam pi/6, pi/3 és pi/2-vel is. A READ utasítás kommentelése és működésének megfejtése is elmaradt...
elvileg fordítható, de még nem próbáltam

a compiler részben tegnap gyúlt egy kis világosság, amikor rájöttem, hogy az egyik call utasítás után lévő byte az nem kód, hanem adat (hasonlóan, mint az exos utasításnál), így rögtön értelmes kód lett a sok hülyeség helyett, miután kb. >20 helyen átírtam a kódot.

érdekes, hogy fordítás közben a "=", "<", ">", "<>", "<=", ">=" jeleket is "tokenizálja" és ez alapján van az ugrótáblázat a logikai vizsgálatokhoz (külön minden típushoz összesen 6x6 elemű táblázat)
Title: Re: HiSoft Pascal
Post by: Lacika on 2013.December.12. 21:33:07
Étvágygerjesztő előzetes PoviSoft műhelyéből. (Az ANIMANTP.PAS a Turbo Pascal verzió, összehasonlítás céljából). Igencsak meggyőző, ha egy magasszintű nyelven írt program gépi kód sebességével fut!
Title: Re: HiSoft Pascal
Post by: Lacika on 2013.December.13. 09:53:11
Gyors ismertető (http://www.ep128.hu/Ep_Util/Hisoft_Pascal.htm) a HP-ről. Minden ki lett próbálva, így kiderült, hogy a CASE szerkezet eltér a TP-hez képest. Povi is sokmindent "felderített" már, azok is benne vannak. Érthetetlen egyébként, hogy a Spectrum-os ismertető is értékelhetetlen, mintha a HiSoft titkolni akarta volna, mit is tud a termékük...
Még egy fejezet lesz még az ismertetőben, az 1.2-es verzió őjdonságairól!
Title: Re: HiSoft Pascal
Post by: Lacika on 2013.December.13. 10:13:34
Engedve a (jogos) reklamációnak:
:ds_icon_cheesygrin:
Title: Re: HiSoft Pascal
Post by: Povi on 2013.December.13. 14:03:03
Quote from: Lacika
Érthetetlen egyébként, hogy a Spectrum-os ismertető is értékelhetetlen, mintha a HiSoft titkolni akarta volna, mit is tud a termékük...
Még egy fejezet lesz még az ismertetőben, az 1.2-es verzió őjdonságairól!
Szerintem a Spectrum-os ismertető (http://www.nascomhomepage.com/lang/Hpascal.txt) teljesen jó!
De mik azok az őjdonságok??? :mrgreen:
Egyébként meg őrült vagy, hogy így összeírtad ezeket... ;-)
Title: Re: HiSoft Pascal
Post by: Lacika on 2013.December.13. 15:52:10
Quote from: Povi
Szerintem a Spectrum-os ismertető (http://www.nascomhomepage.com/lang/Hpascal.txt) teljesen jó!
Hát, én pl. azokon a "folyamatábrákon" annyira nem igazodok ki... :oops:
Title: Re: HiSoft Pascal
Post by: Zozosoft on 2013.December.13. 18:07:10
A szkenneltben talán jobban kivehetőek az ábrák. (http://ftp://ftp.worldofspectrum.org/pub/sinclair/games-info/h/HiSoftPascal4.pdf)
Title: Re: HiSoft Pascal
Post by: DrPrery on 2013.December.13. 19:46:15
A linken valami egészen más jön be... :smt017
Title: Re: HiSoft Pascal
Post by: Zozosoft on 2013.December.13. 19:57:47
Quote from: DrPrery
A linken valami egészen más jön be... :smt017
Jaj, ez a régi hiba amit még nem javított ki MrPrise :cry:
FTP linkeknél kispórol egy kettőspontot a fórum szoftver.

Innen elérhető. (http://www.worldofspectrum.org/infoseekid.cgi?id=0008255)
Title: Re: HiSoft Pascal
Post by: Lacika on 2013.December.13. 22:44:06
Quote from: Zozosoft
A szkenneltben talán jobban kivehetőek az ábrák. (http://ftp://ftp.worldofspectrum.org/pub/sinclair/games-info/h/HiSoftPascal4.pdf)
Én a scannelt-tel próbálkoztam, de azt sem értettem... :oops:
Title: Re: HiSoft Pascal
Post by: Povi on 2013.December.15. 00:07:56
megy a hegesztés... :-)
még nem tökéletes (nézd a string-et a fordítás előtt, és után)
Title: Re: HiSoft Pascal
Post by: Povi on 2013.December.15. 12:26:21
na, működik a kisbetűs írás is
a módosítások a CPC verzió alapján készültek

azok a szavak, amiket tokenizál fordítás közben, azok már nagybetűvel lesznek kiírva listázáskor, így kicsit vegyes lesz a kód kinézete, de ez a CPC-nél is így van:

ami változott emiatt:
az eredeti verzió "case sensitive" volt, tehát a "valami" és a "VALAMI" más-más változót (eljárást, függvényt) jelentett. Ez most nincs így. Nincs rá ellenőrzés, hogy azonos néven deklarálunk-e változót, függvény vagy eljárást, de ez az eredeti verzióban se volt, szóval mondhatjuk azt is, hogy ez egy feature, nem pedig bug :-) A gyári eljárásokat és függvényeket is felül lehet írni, ha úgy tetszik. A később deklarált cucc lesz érvényes.
Title: Re: HiSoft Pascal
Post by: Zozosoft on 2013.December.15. 13:22:36
Quote from: Povi
azok a szavak, amiket tokenizál fordítás közben, azok már nagybetűvel lesznek kiírva listázáskor, így kicsit vegyes lesz a kód kinézete, de ez a CPC-nél is így van:
A writeln-t akkor nem tokenizálja?
Title: Re: HiSoft Pascal
Post by: Povi on 2013.December.15. 14:12:41
Quote from: Zozosoft
A writeln-t akkor nem tokenizálja?
Csak a PROGRAM, DIV, CONST, PROCEDURE, FUNCTION, NOT, OR, AND, MOD, VAR, OF, TO, DOWNTO, THEN, UNTIL, END, DO, ELSE, REPEAT, CASE, WHILE, FOR, IF, BEGIN, WITH, GOTO, SET, ARRAY, FORWARD, RECORD, TYPE, IN, LABEL, NIL, PACKED szavakat tokenizálja.
Az eljárások, függvények, változók és típusok neveit nem.
Title: Re: HiSoft Pascal
Post by: Lacika on 2013.December.15. 14:49:06
Quote from: Povi
a REAL számok csak 4 byte-on vannak tárolva, a TP-ben pedig 6 byte-on
gyorsabb, de nem olyan pontos... :-)
Újabb összehasonlító preview, a Povi által mondottak alátámasztására (elég durva, érdemes összevetni!):
(A MANDELTP most is a Turbo Pascal verzió.
Title: Re: HiSoft Pascal
Post by: IstvanV on 2013.December.15. 21:28:21
A HiSoft változat 1364.6 másodperc alatt fut le. Ez azonban az EXOS megszakítások és a DAVE memória várakozásának a letiltásával 1028.9-re gyorsítható. Az alábbi ASM verzió 811.7 másodperc alatt fut le:
[attachurl=#]
A különbség nem nagy, és részben az is eredményezi, hogy nem használja az EXOS rajzoló rutinjait, illetve optimalizált kódot tartalmaz 2 egész hatványaival való szorzásra és összehasonlításra. Valamivel nagyobb gyorsulás érhető el fixpontos formátum (4.20 bit + előjel) használatával, 566.2 másodpercre:
[attachurl=#]
Csak érdekességként Lua verzió, ami gyakorlatilag érzékelhető várakozás nélkül lefut:
[attachurl=#]
[attachurl=#]

Forráskódok:
[attachurl=#]
[attachurl=#]
[attachurl=#]
[attachurl=#]
[attachurl=#]
Title: Re: HiSoft Pascal
Post by: Povi on 2013.December.16. 12:01:47
nem semmi vagy, István! :-)
egyébként elég "érdekesen" néz ki ez a mandelbrot halmaz, eleve tükrözve van, meg nem tudom, miért van két "csőre".
Viszont a drawpixel rutinodat felhasználnám, ha nem gond :-)
Title: Re: HiSoft Pascal
Post by: Povi on 2013.December.16. 12:11:32
Quote from: Povi
persze, hogy gyorsabb, mert a REAL számok csak 4 byte-on vannak tárolva, a TP-ben pedig 6 byte-on
gyorsabb, de nem olyan pontos... :-)
egyébként érdekes a HP lebegőpontos számformátuma...
persze ez még az IEEE754 szabvány előtt készült, tehát nem kompatibilis a single formátummal (ami szintén 4 byte-os)
a kitevőt 1 byte-on tárolja (2-es komplemens alakban), értéke -127..127-ig lehet (a -128-ra megáll overflow hibával).
van egy előjelbit (H regiszter 7. bitje), és marad 23 bit a mantisszára. Viszont még se használható mind a 2^23 variáció, mert ha a mantissza legfelső bitje (a H regiszter 6. bitje) 0, akkor az egész szám 0, függetlenül attól, hogy mi a többi számjegy.
Végtelen, NaN, +0, -0 értelemszerűen nincs.

Egész számként használhatóan működik 8388607-ig (2^23-1), de érdekes módon azt már nem tudja helyesen kiírni számjegyekkel (az utolsó számjegy hibás). Ehhez javítani kéne a real->string konvertáló részt az RTL-ben...
Title: Re: HiSoft Pascal
Post by: Povi on 2013.December.16. 15:15:12
Quote from: IstvanV
Forráskódok:
(Attachment)
(Attachment)
(Attachment)
(Attachment)
(Attachment)
István!
Ugye jól látom, hogy a pixelrajzoló rutinban, ha a pixelTable-t xxx0h címre rakom, akkor az
Code: [Select]
  adc a,d
   sub e
   ld  d,a
sorokat el is hagyhatom?
Title: Re: HiSoft Pascal
Post by: IstvanV on 2013.December.16. 16:10:41
Quote from: Povi
Viszont a drawpixel rutinodat felhasználnám, ha nem gond
Nem gond. :)

Quote from: Povi
Ugye jól látom, hogy a pixelrajzoló rutinban, ha a pixelTable-t xxx0h címre rakom, akkor az
Code: [Select]
Code: [Select]
  adc a,d
   sub e
   ld  d,a
sorokat el is hagyhatom?
Igen. Ez a rutin nem igazán optimalizált, mivel elsősorban a Mandelbrot programokhoz készült, ahol a futásidő nagy részét a számítások teszik ki. :oops: Eredetileg dithert is tartalmazott, amit a BASIC változat "emulációjához" töröltem. A szorzás helyett is lehetne például táblázat a cím számításánál. A korábbi fraktál programokban használt 2 színű rutinok gyorsabb megoldást alkalmaztak a rajzolási pozíció pixelenkénti mozgatásra (egy struktúrában tárolták az aktuális koordinátákat, címet, és pixel maszkot, így a következő pixel rajzolása egyszerű és gyors inline kóddal megoldható volt).
Title: Re: HiSoft Pascal
Post by: Povi on 2013.December.16. 17:01:53
Quote from: IstvanV
A szorzás helyett is lehetne például táblázat a cím számításánál.
Ja, ja, azt a részt én át is írtam úgy, hogy összeadásokból meg van a 80*Y, úgy is fix szélességhez kéne.
Code: [Select]
LD HL,Y
 LD DE,HL
 ADD HL,HL   ;HL = Y * 2
 ADD HL,HL   ;HL = Y * 4
 ADD HL,DE   ;HL = Y * 5
 ADD HL,HL   ;HL = Y * 10
 ADD HL,HL   ;HL = Y * 20
 ADD HL,HL   ;HL = Y * 40
 ADD HL,HL   ;HL = Y * 80
vajon van ennél is gyorsabb módszer?

a set 7,h módszer is tetszett, ezért lecseréltem az én kódomban lévő
ld de,c000h
add hl,de

kódot

set 7,h
set 6,h

-ra. Az is gyorsabb egy kicsit :-)

Persze közben rájöttem, hogy ha a pixelTable-t xx00h-ra teszem, akkor az
add a,e
ld e,a

helyett is lehet csak ld e,a :-)

az optimalizációval viszont felizgattál, kíváncsi lennék mi a szupergyors módszer egy pixel kirajzolására 16 színű módban :-)

hihetetlen egyébként, mennyit lehet még optimalizálni egy-egy kódon, persze pont ezért tetszett az assembly, csak agyam nincs hozzá :-)
Title: Re: HiSoft Pascal
Post by: Povi on 2013.December.16. 20:49:14
még azt kéne valahogy megértetni a fordítóval, hogy a kapcsos zárójelek és az idézőjelek közötti szöveget ne tokenizálja... :-)
és akkor ékezetes betűket is lehetne íratni, nem kéne trükközni
(lásd a képet, a SET, TO és AND szavak is tokenizálva lettek)
Title: Re: HiSoft Pascal
Post by: Povi on 2013.December.16. 22:59:57
végül ez lett a pixelrajzoló rutin:
Code: [Select]
procedure PutPixel(x,y,color : integer);
begin
  inline(#26,#00)       {ld h,0};
  inline(#dd,#6e,#04)   {ld l,(ix+4)};
  inline(#54,#5d)       {ld de,hl};
  inline(#29,#29,#19,#29);
  inline(#29,#29,#29)   {hl=hl*80};
  inline(#dd,#5e,#06)   {ld e,(ix+6)};
  inline(#cb,#3b)       {srl e};
  inline(#9f)           {sbc a,a};
  inline(#ee,#aa)       {xor 0aah};
  inline(#19)           {add hl,de};
  inline(#cb,#fc)       {set 7,h};
  inline(#cb,#f4)       {set 6,h};
  inline(#4f)           {ld c,a};
  inline(#2f)           {cpl};
  inline(#47)           {ld b,a};
  inline(#dd,#7e,#02)   {ld a,(ix+2)};
  inline(#e6,#0f)       {and 0fh};
  inline(#16,#bf)       {ld d,high(pixeltable)};
  inline(#5f)           {ld e,a};
  inline(#1a)           {ld a,(de)};
  inline(#a1)           {and c};
  inline(#4f)           {ld c,a};
  inline(#7e)           {ld a,(hl)};
  inline(#a0)           {and b};
  inline(#b1)           {or c};
  inline(#77)           {ld (hl),a};
end;
Title: Re: HiSoft Pascal
Post by: Lacika on 2013.December.17. 00:39:38
Quote from: Povi
végül ez lett a pixelrajzoló rutin
Ez hova rajzol (melyik csatornára)?
Title: Re: HiSoft Pascal
Post by: Povi on 2013.December.17. 09:18:16
egyikre se
csináltam egy saját LPT-t, a 3-as lapon van a videomemória, egy 160x200-as (ez fér rá egy szegmensre), 16 színű módban
egyelőre csak játszadozok, van már vonalrajzoló rutin is, igaz, az se saját agyszülemény, hanem a wikipedia alapján a Bresenham algoritmusa (http://en.wikipedia.org/wiki/Bresenham's_line_algorithm) (egyelőre csak Pascal-ban, de így se lassú), azt majd szeretném átírni assembly rutinra. A cél, hogy legyen egy gyors rutinkönyvtár, erre a videomódra optimalizálva.
Az 1991/februári Computer Panorámában megjelent Mandelbrot halmaz rajzoló program pontosan 7 perc alatt fut le :-)
Title: Re: HiSoft Pascal
Post by: Povi on 2013.December.17. 09:30:27
ha valakit érdekel, itt a progi, de forráskódot még tennék fel, mert még nem szép (pl. az LPT POKE-olása...)
4 része van, a részek között escape-pel lehet váltani
1. pixelek kirakása
2. vonalak rajzolása
3. téglalapok rajzolása (abszolút nem optimalizált, csak négy darab Line eljárással rajzol)
4. mandelbrot halmaz

eddig van képernyőtörlés (egyelőre csak LDIR-rel - kíváncsi vagíok, mennyivel lesz gyorsabb a veremből törlés), setcolor és SetBKColor; törléskor a háttérszínre állítja az üres képernyőt.
az utolsó tiltott megszakításall működik, de sor végén ellenőrzi, hogy nyomva van-e az esc, és akkor kilép (ha valaki nem akarja megvárni a végét... :-)
Title: Re: HiSoft Pascal
Post by: Zozosoft on 2013.December.17. 09:55:41
Quote from: Povi
(egyelőre csak LDIR-rel - kíváncsi vagíok, mennyivel lesz gyorsabb a veremből törlés)
EXOS 2.3-ban hasonlítsd össze a normál gyors tesztet (PUSH-os), és a Slow tesztet (LDIR-es), ebből sejthető :-)
Title: Re: HiSoft Pascal
Post by: Povi on 2013.December.17. 10:07:21
Quote from: Zozosoft
EXOS 2.3-ban hasonlítsd össze a normál gyors tesztet (PUSH-os), és a Slow tesztet (LDIR-es), ebből sejthető :-)
közben megcsináltam, majdnem 3,5-szer gyorsabb :-)
Title: Re: HiSoft Pascal
Post by: Zozosoft on 2013.December.17. 10:30:03
Quote from: Povi
közben megcsináltam, majdnem 3,5-szer gyorsabb :-)
Mennyi PUSH van a ciklusban? Minél több annál gyorsabb :-) persze annál több helyet foglal.
Title: Re: HiSoft Pascal
Post by: Povi on 2013.December.17. 11:55:26
Quote from: Zozosoft
Mennyi PUSH van a ciklusban? Minél több annál gyorsabb :-) persze annál több helyet foglal.
40 :-)
Title: Re: HiSoft Pascal
Post by: Povi on 2013.December.17. 12:02:06
közben csináltam egy CopyMem(Destination, ByteCount : integer) eljárást, az eljárást követő ByteCount mennyiségű bájtot másolja a Destination címre.
Code: [Select]
CopyMem(#c000,10);
{a következő 10 byte-ot másolja a 0c00h címre}
inline(0,1,2,3,4,5,6,7,8,9);
{itt folytatódik a program}
writeln('Sikerült!');
így már elegánsan be lehet POKE-olni bármilyen adatot...
az az egy gond, hogy annyira buta a HP inline-ja, hogy csak konstansokat enged írni, és annak is csak az alsó bájtját (ha pl. címről van szó).

a nagy dolog még az lenne, hogy lenne egy olyan fordítási direktíva, amivel be lehetne include-olni egy bináris fájlt :-) ezt még majd szeretném (egyszer) megcsinálni :-) és akkor nem kéne inline-olni se adatot, se gépi kódú rutint...
Title: Re: HiSoft Pascal
Post by: Zozosoft on 2013.December.17. 12:05:59
Vagy az ASMON-t megtanítani, hogy tudjon HP-ba fordítani :-) (BASIC-be tud)
Title: Re: HiSoft Pascal
Post by: Povi on 2013.December.17. 18:03:07
kicsit letisztáztam a forráskódot, feltöltöm, hátha érdekel valakit :-)
meg a hp-t, amivel le lehet fordítani :-)
Title: Re: HiSoft Pascal
Post by: Lacika on 2013.December.19. 11:48:24
Quote from: Povi
meg a hp-t, amivel le lehet fordítani :-)
Ez már késznek számít, kirakható?
Title: Re: HiSoft Pascal
Post by: Lacika on 2013.December.19. 11:50:03
Újabb összehasonlító program. 1.1-hez van, tehát van forrásprogram is.
Title: Re: HiSoft Pascal
Post by: Povi on 2013.December.19. 12:16:41
Quote from: Lacika
Újabb összehasonlító program. 1.1-hez van, tehát van forrásprogram is.
Messze van ez még az 50 FPS-től!!! :mrgreen:
Title: Re: HiSoft Pascal
Post by: Povi on 2013.December.19. 12:18:28
Quote from: Lacika
Ez már késznek számít, kirakható?
Egy program sosincs kész... :-)
De persze, kirakhatod, legfeljebb ha belenyúlok még, akkor azt majd v1.3-nak hívjuk :-) (vannak még terveim vele...)
Title: Re: HiSoft Pascal
Post by: Lacika on 2013.December.19. 13:07:37
Quote from: Povi
Messze van ez még az 50 FPS-től!!! :mrgreen:
A tendencia viszont afelé halad... :)
Title: Re: HiSoft Pascal
Post by: Lacika on 2013.December.19. 13:08:49
Quote from: Povi
De persze, kirakhatod, legfeljebb ha belenyúlok még, akkor azt majd v1.3-nak hívjuk :-)
A SetVar benne van? Ha még az nincs, azt rakd bele légy szíves, az azért hiányzik bele.
Title: Re: HiSoft Pascal
Post by: Povi on 2013.December.19. 15:34:51
Quote from: Lacika
A SetVar benne van? Ha még az nincs, azt rakd bele légy szíves, az azért hiányzik bele.
ebben, amit innét lehet letölteni, már benne van
a LOCK_KEY változót nem állítja induláskor, helyette a keretet állítja feketére
Title: Re: HiSoft Pascal
Post by: Lacika on 2013.December.19. 16:47:57
.ROM verzió majd lesz belőle? Cartridge-be kellene rakni. :oops:
Tényleg, az kiderült, miért akad össze a HEASS-al? Mással remélem nem.
Title: Re: HiSoft Pascal
Post by: Povi on 2013.December.19. 17:26:19
Quote from: Lacika
.ROM verzió majd lesz belőle? Cartridge-be kellene rakni. :oops:
Tényleg, az kiderült, miért akad össze a HEASS-al? Mással remélem nem.
megpróbálom...
egyébként azon kívül, hogy nem kell tölteni, ugyanúgy elfoglal ugyanannyi memóriát, mintha lemezről (kazettáról :-) ) lenne betöltve, a ROM-ban lévő kód átmásolódik ugyanúgy a RAM-ba, a 100h címtől kezdődően, mintha be lett volna töltve fájlból.
Nem tudom, miért akad össze a HEASS-szal, elvileg teljesen EXOS kompatibilis a HP. Viszont használ nem dokumentált Z80 utasítást is egy helyen (IXH és IXL regiszter töltése a D-be és E-be - simán lehetne helyette egy PUSH IX, majd POP DE), szóval nem Z180 kompatibilis :-) Amit megfigyeltem, hogy HP után, némi ASMON-ozás után már elindul a HEASS, szóval nem tudom, mi lehet a baja... (tudom, az egy város)
Title: Re: HiSoft Pascal
Post by: Zozosoft on 2013.December.19. 17:31:33
Lehet HEASS hiba is, mondjuk egy 0-ás lapon használt terület nincs kitörölve, így valami változója rosszul inicializálódik.

Quote
simán lehetne helyette egy PUSH IX, majd POP DE
Akkor esetleg át is írhatnád :-)
Title: Re: HiSoft Pascal
Post by: Lacika on 2013.December.19. 17:46:47
Quote from: Povi
ebben, amit innét lehet letölteni, már benne van
a LOCK_KEY változót nem állítja induláskor, helyette a keretet állítja feketére
Ebben a verzióban végül mi van benne, és mi nincs? :oops:
Össze kellene gyűjteni, hogy lehessen dokumentálni.
Title: Re: HiSoft Pascal
Post by: Lacika on 2013.December.19. 17:49:21
Mostanára egyébként egész jól megszoktam, hogy mindent nagybetűvel kell írni... :ds_icon_cheesygrin:
Ma beírtam valamit a TP-be sorszámmal és nagybetűvel. Aztán meg hirtelen nem értettem, miért nem fordítja le... :oops:
Title: Re: HiSoft Pascal
Post by: Lacika on 2013.December.19. 17:59:11
Az jutott még eszembe, hogy a nyomtatóváltásra nem lehet valami mást kitalálni, mint a CHR(16)? Az escape-szekvenciák írásakor ez ugyanis probléma. (Esetleg egy "hangos" unit készítésekor...)
Title: Re: HiSoft Pascal
Post by: Povi on 2013.December.19. 18:22:54
Quote from: Lacika
Ebben a verzióban végül mi van benne, és mi nincs? :oops:
Össze kellene gyűjteni, hogy lehessen dokumentálni.
a PAGE parancs javítva lett (képernyőre chr(26)-ot küld, nyomtatóra chr(12)-t.
lett egy-két plusz parancs, ami a turbo pacalban is benne van:
Függvények:
 swap(n : integer) : integer
 lo(n : integer) : char
 hi(n : integer) : char

Eljárások:
 GotoXY(x,y : integer);
 ClrScr;
 SetVar(var, value : integer);

A GotoXY, ClrScr, Write és WriteLn eljárások érvényességét (hogy melyik csatornán hajtsa végre az adott feladatot) a 0328h címen lévő bájttal lehet állítani (alapeset: 121, ezt a program végén vissza kell állítani, ha átállítottuk).

Konstansok:
 pi : real;

lehet kisbetűvel is írni
a számok után nem ír szóközt
az EXOS() függvény eljárássá alakítva
alapból 80 karakteres képernyővel indul
a lock_key változó állítgatása helyett a border-t állítja feketére induláskor

és még van egy csomó minden, amit még meg kéne csinálni... :oops:
Title: Re: HiSoft Pascal
Post by: Povi on 2013.December.19. 18:23:48
Quote from: Lacika
Mostanára egyébként egész jól megszoktam, hogy mindent nagybetűvel kell írni... :ds_icon_cheesygrin:
Ma beírtam valamit a TP-be sorszámmal és nagybetűvel. Aztán meg hirtelen nem értettem, miért nem fordítja le... :oops:
monjduk én notepad++-ban írom a forrásokat, a kisbetűs forrást könnyebb olvasni, pihentetőbb a szemnek (szerintem)
Title: Re: HiSoft Pascal
Post by: Lacika on 2013.December.19. 19:12:26
Quote from: Povi
és még van egy csomó minden, amit még meg kéne csinálni... :oops:
Akkor még ne rakjam ki? ;-)
Title: Re: HiSoft Pascal
Post by: Lacika on 2013.December.19. 19:20:25
Quote from: Povi
A GotoXY, ClrScr, Write és WriteLn eljárások érvényességét (hogy melyik csatornán hajtsa végre az adott feladatot) a 0328h címen lévő bájttal lehet állítani (alapeset: 121, ezt a program végén vissza kell állítani, ha átállítottuk).
Ez szerintem működik az 1.1-ben is(?)
Title: Re: HiSoft Pascal
Post by: Povi on 2013.December.19. 19:31:04
az 1.1-ben (az még a gyári) nincs GotoXY és ClrScr
de a Write-re és a WriteLn-ra működik
Title: Re: HiSoft Pascal
Post by: Lacika on 2013.December.19. 22:06:32
Mai szemmel megdöbbentő, hogy bármiféle információ hiányában senki nem használta (nem tudta használni) a HP-t...
Title: Re: HiSoft Pascal
Post by: Povi on 2013.December.20. 09:28:28
Quote from: Lacika
Az jutott még eszembe, hogy a nyomtatóváltásra nem lehet valami mást kitalálni, mint a CHR(16)? Az escape-szekvenciák írásakor ez ugyanis probléma. (Esetleg egy "hangos" unit készítésekor...)
szerintem nem kéne átállítani, úgy se találunk olyan karaktert, amit semmilyen escape szekvencia se használ...
inkább poke-ézd ki a chr(16)-t vizsgáló részt :-)
POKE(#0308,CHR(#18));
így egy "jr nz" helyett egy "jr" lesz

visszaállítani pedig:
POKE(#0308,CHR(#20));
Title: Re: HiSoft Pascal
Post by: Lacika on 2013.December.20. 09:39:18
Kösz!
És a billentyűpuffer hol van? Tp-s ReadKey miatt kérdezem (az nem törli a billentyűpuffert).
Title: Re: HiSoft Pascal
Post by: Povi on 2013.December.20. 10:16:50
nem értem a kérdést... :-) nem a KeyPressed-re gondolsz? az nem törli a puffert
az inch miért nem jó a readkey helyett?
pl. így:

Code: [Select]
var ch : char;
begin
 repeat
  ch := inch;
  if ch='a' then valami1;
  if ch='b' then valami2;
  .
  .
  .
 until ch=chr(27);
Title: Re: HiSoft Pascal
Post by: Lacika on 2013.December.20. 10:34:08
Bocs, igen a KeyPressed-re gondolok. :oops: Az nem törli a puffert, az Inch igen.
Title: Re: HiSoft Pascal
Post by: Lacika on 2013.December.20. 10:55:53
Újabb újjgyakorlat. Itt annyi kalamajka van, hogy nem lehet egyszerűen kezdőértéket adni tömbváltozónak (sem), mint a TP-ben.
Title: Re: HiSoft Pascal
Post by: Povi on 2013.December.20. 10:58:18
Quote from: Lacika
Bocs, igen a KeyPressed-re gondolok. :oops: Az nem törli a puffert, az Inch igen.
Code: [Select]
program a;

var ch : char;

function KeyPressed : boolean;
begin
  ra:=chr(105);
  exos(9);
  if rc=chr(0) then keypressed:=true else keypressed:=false;
end;

function ReadKey : char;
begin
  ra:=chr(105);
  exos(5);
  ReadKey:=rb;
end;

begin
  writeln('Billentyu lenyomasra varok...');
  repeat until keypressed;
  writeln('Sikerult!');
  ch:=readkey;
  writeln('A chr(',ord(ch),')-t nyomtad le.');
end.
persze inline-okkal még lehet gyorsítani (az olvashatóság rovására... :-) )

egyébként az inch ötvözi a két parancsot:
assembly-ben:
Code: [Select]
;INCH function
  ;input: -
  ;output: pressed key ascii code in A
  ;        if no key pressed, then return with A=0
l035c:  push    bc
        push    de
        ld      a,105
        exos    9            ;chan. read status
        or      a
        jp      nz,ErrorEXOS
        ld      a,c
        or      a
        pop     de
        pop     bc
        ld      a,00h
        ret     nz
l036d:  push    bc
        push    de
        ld      a,105
        exos    5                ;read a char from keyboard
        or      a
        jp      nz,ErrorEXOS
        ld      a,b
        pop     de
        pop     bc
        ret    
és ugyanez így nézne ki Pascal-ban:
Code: [Select]
function inch : char;
begin
  if KeyPressed then inch:=ReadKey else inch:=chr(0);
end;

Title: Re: HiSoft Pascal
Post by: Lacika on 2013.December.20. 12:39:52
A PACKED-ről kiderült valami a visszafejtés során? Látszólag nem csinál semmit...
Title: Re: HiSoft Pascal
Post by: Povi on 2013.December.20. 15:08:10
tényleg nem :-)
Title: Re: HiSoft Pascal
Post by: Lacika on 2013.December.20. 18:23:30
Találtam egy bugot a HP-ben, már az 1.1-ben is benne van, nem az újba került bele.
Az alábbi programot be kell tölteni, a többi adja magát...
Title: Re: HiSoft Pascal
Post by: Povi on 2013.December.20. 18:29:07
Quote from: Lacika
Találtam egy bugot a HP-ben, már az 1.1-ben is benne van, nem az újba került bele.
Az alábbi programot be kell tölteni, a többi adja magát...
arra gondolsz, hogy a 45. sor környékén kifagy a fordítás??? :-D
Title: Re: HiSoft Pascal
Post by: Lacika on 2013.December.20. 18:35:34
Quote from: Povi
arra gondolsz, hogy a 45. sor környékén kifagy a fordítás??? :-D
Fordítani sem kell, csak listázni. Valahogy az egymásba ágyazott IF-ekkel lehet a gond, ami azért elég nagy gond... :shock:
Title: Re: HiSoft Pascal
Post by: Povi on 2013.December.20. 18:41:19
más gond van ott... :-D

úgy látszik, babonás, nem szereti a 13 db szóközt a sor elején!!!! :-)

azt hiszi, sor vége jel
ha a 45. sorban az else elé beszúrsz még egy szóközt, akkor helyreáll a lelki békéje :-)
Title: Re: HiSoft Pascal
Post by: Povi on 2013.December.20. 18:51:32
valahol a tokenizálás közben rontja el...
a 44. sor még jó:
Code: [Select]
67c1:  dw 44
       db 6           ;6 darab szóköz
       db 097h        ;"IF"
       db " c=0 "
       db 08eh        ;"THEN"
       db " jelez:=1"
       db 13

67d5:  dw 45
       db 13          ;13 darab szóköz -> ezt hiszi sor végének

67d8:  dw 46          ;ezért már rögtön a 46. sor jön
       db 6           ;6 darab szóköz
       db 090h        ;"END"
       db 13
Title: Re: HiSoft Pascal
Post by: Lacika on 2013.December.20. 19:06:32
Quote from: Povi
úgy látszik, babonás, nem szereti a 13 db szóközt a sor elején!!!! :-)
Úgy látszik Ep-n a 13-as számra működik a babona, fügetlenül attól, hogy HiSoft, vagy IS termékről van szó... :ds_icon_cheesygrin:
Title: Re: HiSoft Pascal
Post by: Povi on 2013.December.20. 19:09:01
közben megnéztem a CPC verzión, és ott nem akad ki (ugyanígy tárolja a programot a memóriában), szóval megpróbálom kivadászni a javított kódot belőle...
Title: Re: HiSoft Pascal
Post by: Povi on 2013.December.20. 19:28:36
Quote from: Povi
közben megnéztem a CPC verzión, és ott nem akad ki (ugyanígy tárolja a programot a memóriában), szóval megpróbálom kivadászni a javított kódot belőle...
kész is van :-)
egy inc hl-t kellett beszúrni
Title: Re: HiSoft Pascal
Post by: Lacika on 2013.December.20. 19:50:35
Huh, pezseg itt a fejlesztés :ds_icon_cheesygrin:
Egyenlőre így áll (http://www.ep128.hu/Ep_Util/Hisoft_Pascal.htm#14) az 1.2-es verzió, ha miden igaz.
Title: Re: HiSoft Pascal
Post by: Povi on 2013.December.20. 19:57:22
Még annyit beleírnék, hogy a kisbetűs írás miatt, megszűnt a 1.1-es verzió "case sensitive" tulajdonsága. Vagyis az eredeti verzióban a "valami" és a "VALAMI" nevű változók két külön változóként lettek deklarálva. Ez most nem érvényes, azonosnak számít a kettő, és a később deklaráltat fogja használni.
Title: Re: HiSoft Pascal
Post by: Lacika on 2013.December.20. 20:05:28
Quote from: Povi
Még annyit beleírnék, hogy a kisbetűs írás miatt, megszűnt a 1.1-es verzió "case sensitive" tulajdonsága. Vagyis az eredeti verzióban a "valami" és a "VALAMI" nevű változók két külön változóként lettek deklarálva. Ez most nem érvényes, azonosnak számít a kettő, és a később deklaráltat fogja használni.
Ja, és a funkcióbillentyűk nem működnek. Azt miért kellett kivenni?
Title: Re: HiSoft Pascal
Post by: Povi on 2013.December.20. 20:26:23
működnek
azt egy köztes verzióból vettem ki, amelyikben benne voltak a grafikus parancsok
Title: Re: HiSoft Pascal
Post by: Lacika on 2013.December.20. 20:27:18
Quote from: Povi
működnek
azt egy köztes verzióból vettem ki, amelyikben benne voltak a grafikus parancsok
Amit most letöltöttem, abban nem működnek. :oops:
Title: Re: HiSoft Pascal
Post by: Lacika on 2013.December.20. 20:39:35
Ja és eddig kihagytam az S direktívát. Az, ha jól tévedek az eljáráshívásoknál történő verem túlcsorulás-ellenőrzést kapcsolja ki?
Title: Re: HiSoft Pascal
Post by: Povi on 2013.December.20. 21:15:02
Quote from: Lacika
Ja és eddig kihagytam az S direktívát. Az, ha jól tévedek az eljáráshívásoknál történő verem túlcsorulás-ellenőrzést kapcsolja ki?
igen
ha be van kapcsolva (az az alapeset), akkor ezt még bemásolja az eljárások és függvények kezdéséhez:
Code: [Select]
;if {$S+ } then this part is copied
; to the beginning of PROCEDURE or FUNCTION
; to check stack overflow       
l408c:  db      8
        ld      de,(l1501)
        add     hl,de
        call    nc,l0693        ;error: "Out of RAM"
Title: Re: HiSoft Pascal
Post by: Povi on 2013.December.20. 21:16:50
Quote from: Lacika
Amit most letöltöttem, abban nem működnek. :oops:
öööö, tényleg
akkor azt ezek szerint nem állítottam még vissza... :oops:
Title: Re: HiSoft Pascal
Post by: Povi on 2013.December.20. 21:29:37
ebben már benne van:
Title: Re: HiSoft Pascal
Post by: Lacika on 2013.December.20. 21:54:02
Quote from: Povi
igen
ha be van kapcsolva (az az alapeset), akkor ezt még bemásolja az eljárások és függvények kezdéséhez:
Code: [Select]
;if {$S+ } then this part is copied
; to the beginning of PROCEDURE or FUNCTION
; to check stack overflow        
l408c:  db      8
        ld      de,(l1501)
        add     hl,de
        call    nc,l0693        ;error: "Out of RAM"
Akkor ez a direktíva még gyorsít elvileg a FRACTALS.PAS programon. :twisted:
A kódban, amit bemásoltál, vannak L betűk. Az elírás, vagy ez jó így? Én hexa számnak nézném...
Title: Re: HiSoft Pascal
Post by: Povi on 2013.December.20. 21:59:53
Quote from: Lacika
Akkor ez a direktíva még gyorsít elvileg a FRACTALS.PAS programon. :twisted:
A kódban, amit bemásoltál, vannak L betűk. Az elírás, vagy ez jó így? Én hexa számnak nézném...
ha ki van kapcsolva, akkor gyorsít.
az L betűk azért vannak, mert a disassembláló így címkézi fel a címeket, de egyébként, igen hexa számok, az L408c címke a 408ch címre mutat.
Title: Re: HiSoft Pascal
Post by: Lacika on 2013.December.28. 10:13:04
Zozo órajelmérő programját hogy lehet HiSoft Pascal alá elkészíteni?
Animációkhoz praktikus lenne az időzítések miatt.
Title: Re: HiSoft Pascal
Post by: Povi on 2013.December.28. 13:06:20
István írt egyet az assembly fórumba, de még nem volt időm foglalkozni vele... :oops:
Zozóét nem ismerem. Egy Delay() eljárást akartam volna csinálni a TP alapján, de ahhoz kéne tudni előtte, hány MHz-es a gép, amin fut (mennyivel egyszerűbb lenne, ha nem lenne Turbo EP! :-) )
Title: Re: HiSoft Pascal
Post by: Lacika on 2013.December.28. 14:28:51
Quote from: Povi
Zozóét nem ismerem.
Itt (http://www.ep128.hu/Ep_Util/Prg/Util.rar) letölthető (ORAJEL.BAS)
Title: Re: HiSoft Pascal
Post by: Povi on 2014.January.09. 14:54:05
egy kép, ami jól mutatja a 4 byte-os lebegőpontos számábrázolás határait:

100 000-szeres nagyítás a Mandelbrot-halmaz mellett valahol...

jó "zajos" a kép, már olyan kicsi a lépésköz a két pixel között, hogy nem tud pontosan számolni

1 000 000-szoros nagyításnál már egyszínű lesz a kép
Title: Re: HiSoft Pascal
Post by: Lacika on 2014.January.16. 21:53:45
HiSoft Pascal-ban, a negyedik és hatodik rajz, valamiért nem jó. Pedig csak integer számokat használ...
Title: Re: HiSoft Pascal
Post by: Povi on 2014.January.17. 11:25:01
A turtle.hpu-ban a TRUNC függvényeket cseréld le ROUND-ra. Akkor jól fog működni.
Title: Re: HiSoft Pascal
Post by: Lacika on 2014.January.17. 18:19:45
Érdekes, úgy jó... Ez csak azért meglepő, mert amikor még TP alatt próbálgattam, TRUNC függvénnyel adta ugyanaz az eredményt, mint az IS-BASIC. A FRACTALS.PAS-ban pl. a Gosper-görbe meg a ROUND függvénnyel rossz...:roll:
Title: Re: HiSoft Pascal
Post by: Zozosoft on 2014.February.05. 09:09:53
Rom verzió a legfrissebből? Spanyol srác ROM csomagjába már azt tenném be.
Title: Re: HiSoft Pascal
Post by: Povi on 2014.February.05. 11:59:39
hűha...

mostanában nem ezzel foglalkoztam

te nem tudod megcsinálni a régi rom alapján? gyakorlatilag a ROM-ból egy LDIR-rel két részletben (szegmensenként) át van másolva a RAM-ba a 0100h címre, majd egy JP 0100 és indul az egész...
Title: Re: HiSoft Pascal
Post by: Lacika on 2014.February.07. 19:16:10
A FILE bővítőt hogy lehetne használni Hisoft Pascal-ból?
Valahogy a MAKESTR által használt területre kellene varázsolni a visszaadott stringet.
Title: Re: HiSoft Pascal
Post by: Povi on 2014.February.10. 13:00:53
pontosan mit kéne csinálni? nem használtam még a FILE-t
Title: Re: HiSoft Pascal
Post by: Lacika on 2014.February.12. 18:05:29
Quote from: Povi
pontosan mit kéne csinálni? nem használtam még a FILE-t
Szerintem nagyon hasznos bővítés (lást itt (http://www.ep128.hu/Ep_Util/Pack.htm), kár, hogy nem vállt "ipari szabvánnyá".
Meghívása után a megjelenő directory-ból lehet file-t választani botkormánnyal. A kiválasztott file nevét a megadott pufferbe rakja.
Title: Re: HiSoft Pascal
Post by: Povi on 2014.February.13. 11:40:01
azt tudom, mire való, csak nem tudom, hogy lehet kiszedni a választott fájlnevet - hogy adja vissza a bővítő azt, amire rákattintunk a listából?
a mellékelt BASIC program nekem kínaiul van... :oops:
Title: Re: HiSoft Pascal
Post by: Zozosoft on 2014.February.13. 11:50:22
Quote from: Povi
azt tudom, mire való, csak nem tudom, hogy lehet kiszedni a választott fájlnevet - hogy adja vissza a bővítő azt, amire rákattintunk a listából?

0. lapon kell 256 bájtos puffer.
Hívásnál "FILE " és utána 2 bájton a puffer címe.
Title: Re: HiSoft Pascal
Post by: Povi on 2014.February.13. 22:18:21
minek neki akkora puffer?
de elvileg a 15aeh címre rakhatod a puffert, ott van 381 byte garázdálkodni, és translate-tel lefordított programok esetében is működik. Persze előbb-utóbb valami más (pl. hibaüzenet, az editorból utolsónak beolvasott sor stb.) fölül fogja írni a puffer tartalmát.
Title: Re: HiSoft Pascal
Post by: Povi on 2014.March.27. 19:56:10
hátha valakit érdekel, és tovább kommentelné... :-)
Title: Re: HiSoft Pascal
Post by: Lacika on 2014.April.26. 09:48:58
Hehe... ;-)
Title: Re: HiSoft Pascal
Post by: Zozosoft on 2014.April.26. 15:24:18
0.3 és 1.01 verziók, egy adag magyar leírással, egyikben egy adag technikai infó is, ami lehet, hogy korábban jól jött volna Povinak :oops: de hátha akad benne valami új is.
Title: Re: HiSoft Pascal
Post by: Zozosoft on 2014.April.26. 17:59:23
Quote from: Lacika
Van itt valaki, aki nullánál többször próbálkozott zenekészítéssel BASIC-ből?
Szipucsu :-)
Title: Re: HiSoft Pascal
Post by: Lacika on 2014.April.26. 18:01:06
Van itt valaki, aki nullánál többször próbálkozott zenekészítéssel BASIC-ből?
Hogy lehetne ezt használhatóbbá tenni, van esetleg tipp / javaslat?
Title: Re: HiSoft Pascal
Post by: Lacika on 2014.April.26. 18:01:29
Quote from: Zozosoft
Szipucsu :-)
Igen, rá gondoltam. :ds_icon_cheesygrin:
Title: Re: HiSoft Pascal
Post by: szipucsu on 2014.April.26. 19:40:57
Quote from: Lacika
Van itt valaki, aki nullánál többször próbálkozott zenekészítéssel BASIC-ből?
Az hogy lehet, hogy Zozo előbb válaszolt a kérdésre, mint hogy Laci feltette volna? Ha van időgép, engem is érdekelne.
Valami gond lenne a fórummal?
Title: Re: HiSoft Pascal
Post by: szipucsu on 2014.April.26. 19:44:30
Quote from: Lacika
Van itt valaki, aki nullánál többször próbálkozott zenekészítéssel BASIC-ből?
Hogy lehetne ezt használhatóbbá tenni, van esetleg tipp / javaslat?
Ezeket megnyitni se tudom. Valamennyire elolvasgatom, amit a pascal topikba írtok, de ezek a PAS, stb. kiterjesztések nekem ismeretlenek.
Title: Re: HiSoft Pascal
Post by: Lacika on 2014.April.26. 21:12:29
Quote from: szipucsu
Valami gond lenne a fórummal?
Nincs, Zozo túl gyorsan válaszolt, pedig szinte azonnal töröltem a hozzászólást és javított melléklettel visszaraktam...
Title: Re: HiSoft Pascal
Post by: Lacika on 2014.April.26. 21:14:11
Quote from: szipucsu
ezek a PAS, stb. kiterjesztések nekem ismeretlenek.
Sima szöveges állományok, notepad-dal is meg tudod nyitni.
Betölteni a HP-ba a
g,,filenév.kit
paranccsal lehet, fordítan a
c
paranccsal, futtatni a
r
paranccsal.
Title: Re: HiSoft Pascal
Post by: Lacika on 2014.April.27. 10:03:37
lenne egy kérdésem:
PASCAL-ban nem az a baj - mint a BASIC-ben -, hogy túl lassan "eteti" a SOUND eszközt, hanem pont ellenkezőleg: "túl gyorsan".
Ha megnézitek a PALANIM programot, megfigyelhető, hogy négy MHz-n jó a sebesség (arra van beállítva), de 6MHz-s gépen túl gyors lehet, mert rövid idő elteltével belassul a program. Gondolom a SOUND eszköz puffere ilyenkor telik be,és várni kell, amíg "berakható oda" a következő hang (?).
Ezek szerint - egyrészt tényleg kellene egy órajelmérő rutin... - másrészt hogy lehetne megvizsgálni, hogy a SOUND eszköz puffere tele van-e, vagy üres-e? (Azt is kellene vizsgálni, hogy üres-e, mert amíg nem fejeződik be a zene, nem udvarias dolog lezárni a SOUND-nak megnyitott csatornát).
Title: Re: HiSoft Pascal
Post by: Zozosoft on 2014.April.27. 10:37:06
13-as EXOS változó nem segít valamit?
Title: Re: HiSoft Pascal
Post by: Lacika on 2014.April.27. 15:52:53
Ah, ez is egy olyan változó, amire "nem vesztegettek" betűket a Felhasználói kézikönyvben. Ez szerintem jó lesz! Gondolom ra-ban lesz a hibakód (?).
Title: Re: HiSoft Pascal
Post by: Zozosoft on 2014.April.27. 15:58:12
Quote from: Lacika
Gondolom ra-ban lesz a hibakód (?).
Igen.
Title: Re: HiSoft Pascal
Post by: Lacika on 2014.April.27. 18:04:30
Így néz ki most a program. Szerencsére itt csak egyenlő hosszúságú hangok vannak, így az első hang "sorbarakása" után elegendő ellenőrizni, betelt-e a sor. Változó hosszúságú hangok esetében bonyolódna értelemszerűen a helyzet. Valószinűleg a helyes stratégia az lesz, ha mindig csak egy hangot rakunk a sorba (úgyis elég gyors a lefordított program) és egy plusz változóba kell tárolni, melyik hangcsatornára kell küldeni a következő hangot. Meg a kétdimenziós tömbből egydimenziósat érdemes csinálni.
Title: Re: HiSoft Pascal
Post by: Lacika on 2015.February.01. 21:42:51
Dinamikus változókat ki keni nagyon?
A csatolt Turbo Pascalban lefordítható programot nem tudon HiSoft Pascal alatt futtathatóvá tenni. No nem a string típus hiány miatt, hanem a listás adatszerkezet definiálása miatt.
HiSoft-Pascalban ugyanis nem megengedett az ehhez szükséges deklaráció, konkrét példában a

TYPE
   mutato=^elem;
   elem=record
            nev:nevt;
            telszam:szamt;
            kovetkezo:mutato
  end;

szerkezettel van a gond, mert a mutato típus definiálásakor még nem létezik az elem típus. A Tp-ben és a szabványos Pascal-ban ez az egy kivétel megengedett, de HP-ban nem...
A kézikönyv azon a fél oldalon, amit szánnak a témára, nem sokat segít, de a példaprogramban van erre egy nyakaterkert deklaráció. Valaki tud példa aplikálásában?
Title: Re: HiSoft Pascal
Post by: Lacika on 2015.February.01. 21:48:25
Ha valakit érdekel: ehhez (http://ep128.hu/Ep_Konyv/Szabvanyos_Pascal.htm) lenne példaprogram ez is.
Totál retro könyvnek néztem ezt, aztán kiderült, hogy 2002-ben a Műszaki Egyetemen még szabványos Pascal-t tanítottak (hangsúlyozom, nem Turbo Pascalt!) Na most érdemes elolvasni a stringekről szóló fejezetet, mekkora hentelések folytak az egyetemen... Szerintem, ha már tanítanak valamit, legalább gyakorlatilag használható tudást adjanak, ez már 2002-ben is minimum Delphi-t jelent...
És akkor a NEM LÉTEZŐ dolgokat még nem is említettem, mint pl. az "illeszkedő tömbparamétereket", ami csak a szabványban létezik a könyv szerint is... (Egyébként nagyon jó dolog lenne, ha létezne, gondolom feláldozták a kis méretű és gyors fordító oltárán.
Egy '85-ös retro géppel foglalkozó oldalon inkább elmenne a dolog, de nem is tudom, ki merjem-e végül rakni (utolsó kiadás 2002-es a könyvből).
Title: Re: HiSoft Pascal
Post by: Lacika on 2015.February.08. 21:11:17
Milyen a sebesség? :ds_icon_cheesygrin:
Még valahogy le kell lassítani.
(Ha vége a játéknak, az ENTER megnyomásával léphetünk tovább. Valószínűleg itt a sebességre vonatkozó kérdés fog megjelenni.)
Title: Re: HiSoft Pascal
Post by: Zozosoft on 2015.February.08. 21:31:42
Milyen a sebesség?
Picit más mint BASIC-ban :-D
Title: Re: HiSoft Pascal
Post by: Lacika on 2015.February.08. 22:46:39
Ugyanaz, 10 választható sebességfokozattal.
Szipucsu ötletét kellene továbbfejleszteni.
Title: Re: HiSoft Pascal
Post by: szipucsu on 2015.February.08. 23:27:25
Szipucsu ötletét kellene továbbfejleszteni.
Vagy Endiét. :D Scrollozó game. Esetleg a kettőt összekombinálva egyetlen játékká.

Nekem gyanús egyébként, hogy jóval előbb kell lenyomni a szóközt a bombázáshoz, tehát kb. 2-3 házzal már előtte nyomva kell tartani.
Title: Re: HiSoft Pascal
Post by: Lacika on 2015.February.09. 08:57:25
Nekem gyanús egyébként, hogy jóval előbb kell lenyomni a szóközt a bombázáshoz, tehát kb. 2-3 házzal már előtte nyomva kell tartani.

Nem tapasztaltam ilyet... Valaki más? Elvileg nincs rá ok, mert pont a billentyűzetfigyelés előtt várakozik a gép, ami alatt kerülhet a pufferbe billentyű.
Nem lehet, hogy "csoda USB-s" billentyűzetet használsz, aminek nagy a késleltetése?
Title: Re: HiSoft Pascal
Post by: szipucsu on 2015.February.09. 13:07:13
Nem lehet, hogy "csoda USB-s" billentyűzetet használsz, aminek nagy a késleltetése?
PC-t használok. Elvileg ahogy megnyomom a gombot (pl. gépelésnél), azonnal van hatása, nem késik.
Az emulátort lelassítottam 25%-ra és úgy próbáltam meg játszani, ott tapasztaltam a késést. Menőzni akartam egy demo snapshottal, hogy én még ezen a gyors sebességen is meg tudom csinálni a pályát, de akkor ez elmarad, bár úgyis rájöttetek volna. :D
Title: Re: HiSoft Pascal
Post by: Lacika on 2016.April.15. 23:36:03
Kezd tetszeni az attribútum üzemmód. Most, hogy már kezdem érteni... ;-)
Title: Re: HiSoft Pascal
Post by: geco on 2016.April.16. 00:42:34
Kezd tetszeni az attribútum üzemmód. Most, hogy már kezdem érteni... ;-)
jó lett :) ,mennyivel gyorsabb, mint a basic verzió?
Title: Re: HiSoft Pascal
Post by: Lacika on 2016.April.16. 07:45:00
Ez jó kérdés...
A 9. "sebességi fokozatot" választva fut várakozási ciklusok nélkül, abban a fokozatban lehet összemérni a BASIC változattal.
Title: Re: HiSoft Pascal
Post by: Lacika on 2016.April.16. 11:10:50
Ez már ki van egészítve néhány grafikai elemmel. "Cheat" 'A'-'E' billentyűkkel.

Title: Re: HiSoft Pascal
Post by: szipucsu on 2016.April.16. 13:44:18
Ez már ki van egészítve néhány grafikai elemmel. "Cheat" 'A'-'E' billentyűkkel.
Nem rossz!
Az a két fajta repcsi/bomba változat van? Azokat te tervezted?
A csúcsos háztetődet ellopom szerintem a basic változatomba.
Illetve nem lopom ki sem a háztetőt, sem a másik repcsi/bomba alakját, mert nem tudom. Ezeknek a set character formátumát fel tudnád tenni?
Title: Re: HiSoft Pascal
Post by: Zozosoft on 2016.April.16. 13:53:19
A csúcsos háztetődet ellopom szerintem a basic változatomba.
Illetve nem lopom ki sem a háztetőt, sem a másik repcsi/bomba alakját, mert nem tudom. Ezeknek a set character formátumát fel tudnád tenni?
Ha belenézel a PAS-ba, szerintem elég egyértelmű :-)
Title: Re: HiSoft Pascal
Post by: Lacika on 2016.April.16. 14:08:28
Nem rossz!
Az a két fajta repcsi/bomba változat van? Azokat te tervezted?
A csúcsos háztetődet ellopom szerintem a basic változatomba.
Illetve nem lopom ki sem a háztetőt, sem a másik repcsi/bomba alakját, mert nem tudom. Ezeknek a set character formátumát fel tudnád tenni?

Nem csak két fajta van, hanem A, B, C, D, E. Csak egyet rajzoltam, a többi ismerős lesz Szipucsunak... :oops:
A karakterek adatait könnyű kinézni, a BASIC "SET CHARACTER char,x1,x2,x3,x4,x5,x6,x7,x8,x9" parancs szinonim a "CHARACTER(char,x1,x2,x3,x4,x5,x6,x7,x8,x9)" paranccsal. A háztetők ASCII kódjai sorban követik egymást, így nincs szükség az IF-szerkezetre a karakterek kirajzolásához. Ugyanígy a romos háztető kirajzolásához felesleges tárolni a házak színeit tömbben és újra kiválasztani a megfelelő színt, mert az a képernyőn már tárolva van. Életemben először használtam a SET ATTRIBUTES parancsot, illetve tegnap derült ki, hogy kifelejtettük a Hisoft Pascal grafikai rutingyűjteményéből... Szerencsére rövidke escape-szekvencia.
Esetleg ha megkérjük Povit, hátha berakja, illteve szükség lenne SPOKE, SPEEK-re.
Title: Re: HiSoft Pascal
Post by: Lacika on 2016.April.16. 14:09:58
Ezeknek a set character formátumát fel tudnád tenni?

Csúcsos háztető:
Character(146,0,1,3,7,14,30,63,127,255);
Character(147,0,128,192,224,112,120,252,254,255)

Repcsi, bomba:
Character(37,0,48,56,60,63,127,127,7,7);
Character(38,0,0,0,56,230,255,248,128,0);
Character(132,34,42,62,28,28,28,28,8,8)
Title: Re: HiSoft Pascal
Post by: Zozosoft on 2016.October.12. 12:07:55
Povi! Az 1.2-ből nem tudnál ROM verziót csinálni?
Title: Re: HiSoft Pascal
Post by: IstvanV on 2016.October.25. 23:59:45
Az 1.1-es ROM és az 1.2-es .com verzió alapján:
[attachurl=1]
[attachurl=2]
[attachurl=3]
[attachurl=4]

Szerk.: epcompress -m3 változat, ez néhány száz byte-al kevesebb (kihasználatlan) szabad helyet hagy a ROM végén, viszont néhány tizedmásodperccel gyorsabban indul: :)
[attachurl=5]
[attachurl=6]
[attachurl=7]
[attachurl=8]
A decompress_m3.s-ben található decompressProgram rutin ROM-ból fix 100h kezdőcímre való kitömörítéshez készült és csak 114 byte méretű, talán hasznos lehet más ROM-okban is.

Esetleg a :HELP HP a copyright szövegnél említhetné Povi módosításait is az 1.2 verzióban?
Title: Re: HiSoft Pascal
Post by: RetroJátékos on 2017.January.21. 21:30:57
Sziasztok!
Ha nem probléma, lenne pár kezdő szintű kérdésem a Hisoft Pascallal kapcsolatban.

Elsősorban a grafikával kapcsolatban.
A GRAFON utasításnál az első paraméternek, a csatorna számának mit kell megadni? Ha jól tudom, 101-es a grafikus képernyő csatornája, de láttam programokat, amiben más csatornaszámok voltak. Olyankor ez hogy működik?
Továbbá: két csatornával megvalósítható, hogy pl. az egyik lap látszik, közben a másikra rajzolok?
Ha nem az alapértelmezett csatornát használom grafikához, akkor ezt kell külön jelezni a rendszernek? Vagy ilyenkor a szükséges memória lefoglalása, meg hasonlók automatikusan történnek?

Szintén GRAFON, a második és harmadik paraméter (mód és színmód) mely értékei mit jelentenek?
Valamint az X- és Y-méretet pixelekben kell megadni?

Más dolog: a Hisoft Pascal kézikönyvében ez áll a fordításról: "Lefordítja a forrásszöveget, de nem futtatható formában"
Hogy érti, hogy nem futtatható formában? És hogy lehet akkor rendes futtatható állományt létrehozni?

Előre is köszönöm a segítséget!
Title: Re: HiSoft Pascal
Post by: gflorez on 2017.January.21. 22:19:25
Az emulátor, ha betölti a EPDOS.Rom, akkor használja a ":CHANS" parancsot Basic, Pascal tudni, hogy melyik a csatornákat.

Csak azt, hogy meg kell fordítani őket decimális. 255, FF az alapértelmezett csatorna, amely általában arra utal, hogy az editor csatorna.

A Basic az alapértelmezett szöveg csatorna 102, grafikák a 101, de Pascal az alapértelmezett szöveg csatorna 120.

Szintén EXDOS, ISDOS, LISP vagy negyedik különböző alapértelmezett csatornát a szöveg vagy grafika.

------------------------

On the emulator, if you load the EPDOS.Rom, you can use the ":CHANS" command on Basic or Pascal to know which are the channels.

Only that you must translate them to decimal. 255, FF is the default channel that usually points to the editor channel.

On Basic the default video text channel is 102, graphics the 101, but on Pascal the default video text channel is 120.

Also EXDOS, ISDOS, LISP or FORTH use different default channels for text or graphics.
Title: Re: HiSoft Pascal
Post by: Povi on 2017.January.22. 21:24:34
Szintén GRAFON, a második és harmadik paraméter (mód és színmód) mely értékei mit jelentenek?
Valamint az X- és Y-méretet pixelekben kell megadni?

A GRAFON-nal hozod létre a grafikus videolapot. A csatorna szám bármi lehet (amennyiben nem foglalt), teljesen jó a 101-es is.
A mód lehet 1, 5, vagy 15. Az 1 = nagyfelbontású, 5 = kisfelbontású, 15 = attribútum mód.
A színmód:
0 : 2 szín
1 : 4 szín
2 : 16 szín
3 : 256 szín
az attribútum módot  a 0 színmóddal (2 szín) kell megnyitni, annak ellenére, hogy valójában 16 színed lesz

az x és az y a kép szélessége és magassága karakterben megadott mértékegységben

tehán a BASIC GRAPHICS parancshoz (ami ugye alapból 4 színű mód lesz) hasonló módot így tudsz létrehozni:
Code: [Select]
GRAFON(101,1,3,40,20);
DISPLAY(101,1,1,20);
Title: Re: HiSoft Pascal
Post by: Povi on 2017.January.22. 21:29:59
Más dolog: a Hisoft Pascal kézikönyvében ez áll a fordításról: "Lefordítja a forrásszöveget, de nem futtatható formában"
Hogy érti, hogy nem futtatható formában? És hogy lehet akkor rendes futtatható állományt létrehozni?

A Translate paranccsal tudsz önnálóat futtatható fájlba fordítani a programot:
pl.:
T,,valami.com

Title: Re: HiSoft Pascal
Post by: RetroJátékos on 2017.February.14. 12:22:19
Köszönöm a segítséget! :-)
Title: Re: HiSoft Pascal
Post by: Povi on 2017.April.25. 13:30:14
Találtam egy súlyos bug-ot a HiSoft Pascalban.

Az < összehasonlító operátor hibás eredményt ad, ha a két oldal különbsége nagyobb, mint 32768.

Tehát:
-1 < 32767 = TRUE
-2 < 32767 = FALSE

Az > összehasonlító operátor hibás eredményt ad, ha a két oldal különbsége nagyobb, mint 32767.

Tehát:
0 > 32767 = FALSE
-1 > 32767 = TRUE
Title: Re: HiSoft Pascal
Post by: Povi on 2017.April.25. 13:37:45
kis hack:

integer (16 bit, előjeles) szám kiiratása word-ként (előjel nélkül)
prímszámok 65535-ig
Title: Re: HiSoft Pascal
Post by: Lacika on 2017.April.25. 22:13:51
Találtam egy súlyos bug-ot a HiSoft Pascalban.

Az < összehasonlító operátor hibás eredményt ad, ha a két oldal különbsége nagyobb, mint 32768.

Tehát:
-1 < 32767 = TRUE
-2 < 32767 = FALSE

Az > összehasonlító operátor hibás eredményt ad, ha a két oldal különbsége nagyobb, mint 32767.

Tehát:
0 > 32767 = FALSE
-1 > 32767 = TRUE

Ez elvileg nem bug, benne van az eredeti doksiban is. Meg az enyémben is :ds_icon_cheesygrin:
"A HiSoft Pascal-ban, alapértelmezett beállítással, egész típusú kifejezések összehasonlításánál, ha a két szám közötti különbség nagyobb, mint 32767, akkor hibás eredményt kapunk. Például, ha I, és J változó INTEGER típusú, az alábbi vizsgálat eredményeképpen megjelenik a 'Rossz eredmeny' felirat:

    I:=-768;J:=32000;
    IF I>J THEN WRITELN('Rossz eredmeny');

A pontos, de lassabb kiértékelő algoritmust az I direktívával kapcsolhatjuk be. (Ld. fordítási direktívákat.)"

"I direktíva
{$I- }
{$I+ }
Az egész típusú kifejezéseken végrehajtott relációs műveletek kiértékelő algoritmusát választja ki. Az alapértelmezett, kikapcsolt direktíva esetében a gyorsabb algoritmust fordítja a programba, ilyenkor, ha a két vizsgálandó kifejezés értéke közötti különbség nagyobb, mint 32767, hibás eredményt kapunk. Bekapcsolt állapotban lassabb és hosszabb kódot fordít, amely azonban minden esetben helyes eredményt ad."
Title: Re: HiSoft Pascal
Post by: Lacika on 2017.April.25. 22:15:45
kis hack:

integer (16 bit, előjeles) szám kiiratása word-ként (előjel nélkül)
prímszámok 65535-ig

Ez jól hangzik.
WORD típust bele lehet "belehegeszteni" a Hisoft-Pascalba?
Title: Re: HiSoft Pascal
Post by: Povi on 2017.April.26. 09:27:36
Ez jól hangzik.
WORD típust bele lehet "belehegeszteni" a Hisoft-Pascalba?
én kicsi vagyok ahhoz... :-) Meg ahhoz full fordítható disassembly kéne, ami nekem nincs
a {$O-} -val ki lehet kapcsolnia túlcsordulás figyelését, tehát nem fog kiakadni a 32767 + 1 -re
de azt könnyű megoldani, hogy word-ként írja ki az integer-t, két poke az egész

Title: Re: HiSoft Pascal
Post by: Povi on 2017.April.26. 09:31:09
Ez elvileg nem bug, benne van az eredeti doksiban is. Meg az enyémben is :ds_icon_cheesygrin:
Hm... Tényleg!
Viszont akkor kikapcsolt I-vel úgy működik, mintha word-oket hasonlítanál össze :-)
Title: Re: HiSoft Pascal
Post by: Lacika on 2017.April.26. 12:07:31
én kicsi vagyok ahhoz... :-) Meg ahhoz full fordítható disassembly kéne, ami nekem nincs
a {$O-} -val ki lehet kapcsolnia túlcsordulás figyelését, tehát nem fog kiakadni a 32767 + 1 -re
de azt könnyű megoldani, hogy word-ként írja ki az integer-t, két poke az egész

Mi az a két POKE? Beleraknám az ismertetőbe.
Title: Re: HiSoft Pascal
Post by: Povi on 2017.April.26. 14:33:55
Mi az a két POKE? Beleraknám az ismertetőbe.

Code: [Select]
  poke(#05be, chr(#18));
  poke(#05e7, chr(#18));
visszaállítás:
Code: [Select]
  poke(#05be, chr(#28));
  poke(#05e7, chr(#28));
az első poke csak akkor kell, ha formázott kiírást akarunk (vezető space-ekkel), különben elhagyható.

Title: Re: HiSoft Pascal
Post by: Lacika on 2017.April.26. 18:30:39
Konstansokkal viszont nem lehet összehasonlítást végezni, ha jól látom. Ez a két POKE csak a kiírással van hatással?
Title: Re: HiSoft Pascal
Post by: Povi on 2017.April.26. 18:42:54
Konstansokkal viszont nem lehet összehasonlítást végezni, ha jól látom. Ez a két POKE csak a kiírással van hatással?
Lehet, ha hexa-ban írod be.
Pl. 40000 = #9c40
Title: Re: HiSoft Pascal
Post by: Lacika on 2017.May.04. 20:20:33
Endi Tunnel Demoja Pascalban
Title: Re: HiSoft Pascal
Post by: endi on 2017.May.05. 10:26:43
Endi Tunnel Demoja Pascalban

hát igen, nem sokkal gyorsabb
amúgy mi lenne sokkal gyorsabb ep-n ha pascalban lenne írva?
Title: Re: HiSoft Pascal
Post by: IstvanV on 2017.May.05. 10:39:51
hát igen, nem sokkal gyorsabb

Valószínűleg az EXOS rajzoló rutinjai korlátozzák a sebességet. Nagyobb gyorsulás elsősorban olyan programoknál lehetséges, amelyek sok egyszerű műveletet végeznek egész számokkal.
Title: Re: HiSoft Pascal
Post by: endi on 2017.May.05. 11:06:10
Valószínűleg az EXOS rajzoló rutinjai korlátozzák a sebességet. Nagyobb gyorsulás elsősorban olyan programoknál lehetséges, amelyek sok egyszerű műveletet végeznek egész számokkal.

na akkor majd gondolkodok ilyesmin
bár ügye végül ki kell majd rajzolni, szóval... (mert én grafikai dolgokban gondolkodok csak, vagy játékban)
Title: Re: HiSoft Pascal
Post by: Povi on 2017.May.05. 11:50:50
hát igen, nem sokkal gyorsabb
amúgy mi lenne sokkal gyorsabb ep-n ha pascalban lenne írva?
Graphca módban írt játékok jó gyorsak lennének.
Title: Re: HiSoft Pascal
Post by: endi on 2017.May.05. 12:46:25
gracha módú játékot írtam párat, bár elég egyszerűek de gondolom az már sok munka lenne pascalba átírni...

de mondjuk ilyesmi?
bár ez meg a sin miatt lesz lassú gondolom...
Title: Re: HiSoft Pascal
Post by: IstvanV on 2017.May.05. 13:17:42
A sin(x) számítását táblázattal is meg lehetne oldani. Akár a BASIC verzióban is, mert valójában csak néhány száz lehetséges x ismétlődik 0 és 12.8 között 0.04 felbontással. A százzal osztás és hússzal szorzás is a táblázatba építhető. Pascal vagy asm változatban pedig át lehet írni a programot egész számok használatára.
Title: Re: HiSoft Pascal
Post by: endi on 2017.May.05. 13:23:49
na ez érdekes lett.
lores és függőleges step, így gyorsabb bár kisebb felbontás
emlékszem, ilyeneket úgy csináltam annak idején, hogy ránéztem hogy milyen gyorsan csinálja, nagyjából megbecsültem hány óra míg végez, és addig elmentem valami mást csinálni :)

ah mekkora király lett volna még egy gép, amíg az egyik renderel :D

Title: Re: HiSoft Pascal
Post by: endi on 2017.May.05. 13:30:01
az előző hiresben, step nélkül
Title: Re: HiSoft Pascal
Post by: szipucsu on 2017.May.05. 13:32:52
ah mekkora király lett volna még egy gép, amíg az egyik renderel :D
Vagy a multitask SymbOS rendszer. Bár abban nem tudom, programozni lehet-e valamilyen nyelven.
Title: Re: HiSoft Pascal
Post by: IstvanV on 2017.May.05. 13:36:52
Pixelenkénti sin() nélkül:
[attachurl=1]
Title: Re: HiSoft Pascal
Post by: Povi on 2017.May.05. 20:21:00
Eratoszthenész szitája:
Code: [Select]
program sieve2;

var
  prime : array[0..32767] of boolean;
  n, index : integer;

begin
  {$A-}
  {$O-}
  poke(#38, chr(#c9));

  for n := 1 to 32767 do
    prime[n] := true;

  for n := 1 to 127 do begin
    if prime[n] then begin
      index := 2 * (n * n + n);
      repeat
        prime[index] := false;
        index := index + n + n + 1;
      until (hi(index) > chr(#7f));
    end;
  end;

  poke(#0328, chr(120));
  poke(#05be, chr(#18));
  poke(#05e7, chr(#18));

  write(chr(27),'S', 2 : 8);
  for n := 1 to 32767 do
    if prime[n] then write(n + n + 1 : 8);
  writeln;

  poke(#0328, chr(121));
  poke(#05be, chr(#28));
  poke(#05e7, chr(#28));

  poke(#38, chr(#f5));
end.
Title: Re: HiSoft Pascal
Post by: Povi on 2017.May.05. 20:25:33
ugyanez assembly-ben:
https://github.com/zpovazsay/Sieve-of-Eratosthenes-Z80/blob/master/sieve2.asm
Title: Re: HiSoft Pascal
Post by: IstvanV on 2017.May.06. 14:32:36
Pixelenkénti sin() nélkül:

Asm verzió (lehetne ditherelt is, a korábban már használt kóddal egyszerűen megoldható):
[attachurl=1]
Title: Re: HiSoft Pascal
Post by: endi on 2017.May.06. 15:51:04
Asm verzió (lehetne ditherelt is, a korábban már használt kóddal egyszerűen megoldható):
(Attachment Link)

ez is exossal írja a pixeleket?
Title: Re: HiSoft Pascal
Post by: IstvanV on 2017.May.06. 16:04:22
ez is exossal írja a pixeleket?

Nem, de külön pixel rajzoló rutint használ (tetszőleges X, Y, szín), tehát lehetne gyorsabb is ha figyelembe venné hogy a pixeleket sorban rajzolja balról jobbra és felülről lefelé, ezért nem kellene a címet mindig újra számítani.
Title: Re: HiSoft Pascal
Post by: IstvanV on 2017.May.08. 15:01:17
[attachurl=1]
Title: Re: HiSoft Pascal
Post by: IstvanV on 2017.May.09. 10:24:18
Endi Tunnel Demoja Pascalban

Az megoldható, hogy Pascal program asm rajzoló rutinokat használjon? Ez különösen pixelenkénti rajzolásnál lenne hasznos. A sin() számítása is elkerülhető a ciklusban (a fenti dither4c.com is tartalmaz ilyen megoldást), bár itt a futásidő jelentős részét az EXOS ellipszis rutinja teszi ki. De a BASIC változat is gyorsul 7:42-ről 5:44-re ilyen optimalizálással.
Title: Re: HiSoft Pascal
Post by: Zozosoft on 2017.May.09. 10:37:35
Az megoldható, hogy Pascal program asm rajzoló rutinokat használjon?
Van INLINE. (http://ep128.hu/Ep_Util/Hisoft_Pascal.htm#10_4)
Title: Re: HiSoft Pascal
Post by: IstvanV on 2017.May.11. 10:44:44
Van INLINE. (http://ep128.hu/Ep_Util/Hisoft_Pascal.htm#10_4)

Ez így meglehetősen korlátozottnak tűnik. :oops: Esetleg ha már lefordított asm rutinokat lehetne betölteni fix címre (ahol a Pascal program nem írja felül) és onnan hívni, az használhatóbb lenne. PC-s C fordítóknál (SDCC és z88dk) viszonylag könnyen megoldható a már meglevő EP-s betöltő módosításával, de azokat nem használja senki, a HiSoft Pascal "bővítésének" több értelme lenne.
Title: Re: HiSoft Pascal
Post by: Povi on 2017.May.11. 17:46:00
Ez így meglehetősen korlátozottnak tűnik. :oops: Esetleg ha már lefordított asm rutinokat lehetne betölteni fix címre (ahol a Pascal program nem írja felül) és onnan hívni, az használhatóbb lenne. PC-s C fordítóknál (SDCC és z88dk) viszonylag könnyen megoldható a már meglevő EP-s betöltő módosításával, de azokat nem használja senki, a HiSoft Pascal "bővítésének" több értelme lenne.
Az Alter paranccsal a Compiler és a Translate stack-et átírva (default értéke 0xffff) a megadott érték fölött memóriacímeket nem fogja bántani a Pascal.
Tehát oda lehet már betölteni gépi kódu rutinokat.
A TIN paranccsal lehet a legegyszerűbben betölteni fájlt.
használata:
TIN(filenév, memóriacím);
pl.:
tin('valami.o', #c000);

meghívni a rutint a user paranccsal lehet.
pl.: user(#c000);

a rutinnak RET-tel kell végződnie
Title: Re: HiSoft Pascal
Post by: IstvanV on 2017.May.15. 13:55:50
[attachthumb=1]

[attachurl=2]
[attachurl=3]
[attachurl=4]
[attachurl=5]
[attachurl=6]    (teszt program)
[attachurl=7]    (EXOS verzió)

A Fill rutin nem jó (lassabb az EXOS változatnál), a többi gyorsult.
Title: Re: HiSoft Pascal
Post by: Lacika on 2017.May.15. 21:22:46
Mi a különbség a Plot és a PlotC között? Plot-nál paraméterben nincs csatorna. Ha jól látom, az i paraméter a csatornaszám, de az ink-nél csak i paraméter van(?)
Az Rnd8Init, Rnd8, UpdateLpt mit csinál?
Title: Re: HiSoft Pascal
Post by: Lacika on 2017.May.15. 21:23:55
A VSyncWait-ból kérhetek INLINE-os verziót, amit bele lehetne rakni a GRAPH.HPU-ba? :oops:
Title: Re: HiSoft Pascal
Post by: IstvanV on 2017.May.16. 00:11:30
Mi a különbség a Plot és a PlotC között? Plot-nál paraméterben nincs csatorna. Ha jól látom, az i paraméter a csatornaszám, de az ink-nél csak i paraméter van(?)
Az Rnd8Init, Rnd8, UpdateLpt mit csinál?

A PlotC-nél paletta színt lehet megadni, a Plot a korábban beállított színt használja. Az 'i' paraméter a többinél is szín, csatornaszám nincs. Az UpdateLPT az LPT-t frissíti a beállított színekkel, a palettát forgató PaletteRL és PaletteRR ezt automatikusan megteszi. Az Rnd8 egszerű véletlenszám generátor, 8 bites értéket ad vissza a második paraméterrel végzett AND művelet után, illetve az elsőnél mindig kisebbet (pl. Rnd8(5,7) = 0 és 4 közötti érték).

A VSyncWait-ból kérhetek INLINE-os verziót, amit bele lehetne rakni a GRAPH.HPU-ba? :oops:

Code: Pascal
  1. procedure VSyncWait(n:integer);
  2. begin
  3.   inline(#DD,#46,#02,#0E,#00,#DB,#B4,#E6);
  4.   inline(#10,#B9,#4F,#30,#F8,#10,#F6);
  5. end;
Title: Re: HiSoft Pascal
Post by: Lacika on 2017.May.16. 18:29:57
 A VSYNCWAIT hogy működik? Konkrétan a Bomber Plus bármilyen paraméterrel lefagy.
Title: Re: HiSoft Pascal
Post by: IstvanV on 2017.May.16. 19:07:37
A C9 (RET) nem kell a végén, javítottam. :oops:
Title: Re: HiSoft Pascal
Post by: Lacika on 2017.May.16. 21:02:06
A C9 (RET) nem kell a végén, javítottam. :oops:

Ha a paraméter 0, mennyit vár? Akkor a leglassabb...
Úgy tűnik, hogy a sebesség így is változik a különböző órajeleken, ez lehetséges?
Title: Re: HiSoft Pascal
Post by: IstvanV on 2017.May.16. 22:35:29
Ha a paraméter 0, mennyit vár? Akkor a leglassabb...

8 bites paramétert használ, a 0 256-nak felel meg. Módosítani lehetne 16 bitesre is.

Quote
Úgy tűnik, hogy a sebesség így is változik a különböző órajeleken, ez lehetséges?

Elvileg csak a NICK órajelétől és az LPT-től függ, de ha a hívások között futó kód vagy az EXOS megszakítás kezelése lassú, akkor elveszhetnek megszakítások, és ilyenkor a CPU sebességétől is függhet az időzítés.
Title: Re: HiSoft Pascal
Post by: Lacika on 2017.May.16. 23:35:43
A GRAPH16.HPU 16 színű 40x20-as méretű 101-es csatornát használ?
Nem semmi a kőrrajzoló rutin, pedig az EP körrajzoló rutinja alapból is gyorsnak számított. :)
Title: Re: HiSoft Pascal
Post by: IstvanV on 2017.May.17. 09:49:36
A GRAPH16.HPU 16 színű 40x20-as méretű 101-es csatornát használ?

Nem EXOS csatorna, lefoglal egy szegmenst és belapozza a 3. lapra. Tehát a Pascal program is közvetlenül hozzáférhet a video adathoz #C000 kezdőcímtől. A képernyő mérete 40x22 karakter (160x198 pixel), ez a legnagyobb ami egy szegmensen elfér. Valójában lehetne 204 soros is, de az nem egész számú karakter. A méret módosítható a graph16.s file elején.

Quote
Nem semmi a kőrrajzoló rutin, pedig az EP körrajzoló rutinja alapból is gyorsnak számított. :)

Kört valamivel egyszerűbb rajzolni, mint ellipszist. Bár itt hátránya is van, mert valójában 4 színű felbontást használ, és ez növeli a pixelek számát. Pascal változat:
[attachurl=1]
Title: Re: HiSoft Pascal
Post by: Lacika on 2017.May.17. 22:41:46
Az UpdateLPT mit csinál?
Title: Re: HiSoft Pascal
Post by: IstvanV on 2017.May.17. 22:50:27
Az UpdateLPT mit csinál?

Csak a Color használata után van jelentősége, az LPT-t frissíti a módosított színekkel. Bár lehet, hogy célszerűbb lenne automatikusan hívni, és külön eljárást létrehozni a teljes paletta állítására.
Title: Re: HiSoft Pascal
Post by: IstvanV on 2017.May.20. 21:25:08
Néhány újabb eljárás (még fejlesztés alatt):
[attachurl=1]
[attachurl=2]
[attachurl=3]
[attachurl=4]

Egyszerű példák:
[attachurl=5]
[attachurl=6]
[attachurl=7]
Title: Re: HiSoft Pascal
Post by: Lacika on 2017.May.20. 22:56:22
Néhány újabb eljárás (még fejlesztés alatt):

Egyre érdekesebb!
Majd beraknám a Hisoft Pascal ismertetőbe ha kész, bár az új sprite és egérkezelő utasítások annyira már nem egyértelműek nekem. Ez az egérkezelés gyorsabb, mint ami itt (http://ep128.hu/Ep_Hardware/Ep_EnterMice.htm) van?
Title: Re: HiSoft Pascal
Post by: IstvanV on 2017.May.21. 00:21:37
Ez az egérkezelés gyorsabb, mint ami itt (http://ep128.hu/Ep_Hardware/Ep_EnterMice.htm) van?

Nem igazán gyors, elsősorban kis méretű. Lehet, hogy a Bricky Prise-ban használthoz hasonló megoldásra cserélem, ami nem méretre, hanem sebességre optimalizált.

Majd beraknám a Hisoft Pascal ismertetőbe ha kész, bár az új sprite és egérkezelő utasítások annyira már nem egyértelműek nekem.

Az új eljárások rövid leírása (még változhatnak):

procedure Palette(c0,c1,c2,c3,c4,c5,c6,c7:integer);

Paletta beállítása, az LPT-t is frissíti.

function GetPixel(x,y:integer):integer;

Pixel lekérdezése a megadott pozícióban, a visszatérési érték a szín (0..15), vagy -1 érvénytelen koordináták esetén.

procedure SpriteInit(p,s,n,c:integer);

Sprite inicializálása.

p: munkaterület kezdőcíme (n * 504 + 128 byte). Az első 128 byte a rajzoláskor mentett hátteret tárolja, de ezt célszerűbb lenne külön paraméterként megadni, hogy több sprite is használhassa ugyanazokat az animációkat. A memóriaigényt is csökkenteni lehetne, jelenleg minden animáció fázisból külön eltolt változat is készül, és mindkettőhöz maszk, így lesz összesen 6 * 21 * 4 = 504 byte
s: forrás adat, az inicializálás után már nincs rá szükség, felülírható (n * 126 byte, egy sprite 6 byte széles és 21 pixel magas, az utolsó oszlop nem használt, tehát 11x21 lehet a méret)
n: animáció fázisok száma
c: átlátszó szín a forrás adatban (0..15)

function SpriteDraw(p,n,x,y:integer):integer;

Sprite megjelenítése, a 'p' paraméter ugyanaz, mint a SpriteInit-nél, az 'n' pedig az animáció fázis 0 és a korábban megadott n - 1 között. Érvénytelen koordináták esetén nem jelenik meg semmi. Az 'n'-hez 128-at adva engedélyezett a háttérrel való ütközés vizsgálata, ami lassabb, ilyenkor a visszatérési érték a háttér takarásban levő részei között végzett OR művelet eredménye, egyébként 0.

procedure SpriteClr(p:integer);

Korábban megjelenített sprite törlése, visszaállítja a mentett hátteret. Több sprite esetén ezt a műveletet fordított sorrendben kell végezni.

procedure IRQDisable;
procedure IRQEnable;


Az EXOS megszakítás kezelésének tiltása/engedélyezése a 0038h cím felülírásával.

function GetKey(n:integer):integer;

Billentyű lekérdezése, n = mátrix pozíció (sor * 8 + oszlop + 128 ha külső joystick). 0-t ad vissza ha a billentyű nincs lenyomva, egyébként -1-et.

function ReadMouse:integer;

EnterMice kompatibilis egér lekérdezése, 0 ha sikeres volt, -1 ha nincs egér. Frissíti az alábbi függvények számára a tárolt állapotot.

procedure ResetMouse(x,y,w:integer);

Egér koordináták beállítása, a 'w' a görgetés pozíciója, ami valójában csak 8 bites.

function GetMouseX:integer;

Aktuális X pozíció, előjeles 16 bites érték, 16 színű módban kétszeres felbontású.

function GetMouseY:integer;

Aktuális Y pozíció.

function GetMouseW:integer;

Görgetés pozíció, előjeles 8 bites érték 16 bitre kiegészítve.

function MouseBtn(n:integer):integer;

Egér gomb (n = 0..3) aktuális állapota, -1 ha le van nyomva, egyébként 0. Az n-hez 4-et hozzáadva "élérzékeny" módon figyelhetők a gombok, ilyenkor a függvény csak a lenyomás eseményét jelzi.
Title: Re: HiSoft Pascal
Post by: endi on 2017.May.21. 09:10:06
futtatható programot is berakhatnál, főleg a sprite-os dolgokról :)
Title: Re: HiSoft Pascal
Post by: IstvanV on 2017.May.21. 10:34:50
Futtatható példák:

[attachurl=1]
[attachurl=2]
[attachurl=3]
[attachurl=4]
[attachurl=9]

Kisebb javítások, a SpriteDraw most 255 értéket ad vissza érvénytelen koordináták esetén, a 'p' paraméternek viszont párosnak kell lennie:

[attachurl=5]
[attachurl=6]
[attachurl=7]
[attachurl=8]
Title: Re: HiSoft Pascal
Post by: IstvanV on 2017.May.26. 12:14:01
Továbbfejlesztett változat:
[attachurl=1]
[attachurl=2]
[attachurl=3]
[attachurl=4]

[attachurl=5]
[attachurl=6]
[attachurl=7]

A sprite kezelés így módosult:

procedure SpriteInit(p,s,n,c:integer);
procedure SpriteNew(b,p:integer);
function SpriteDraw(b,n,x,y:integer):integer;
procedure SpriteClr(b:integer);


s = (a SpriteInit után már nem használt) forrás adat címe, a mérete N * 6 * 21 byte
p = konvertált sprite adat címe, a mérete N * 6 * 21 * 4 byte
b = sprite puffer (az aktuális állapot és a háttér mentése) címe, csak páros lehet, a mérete 130 byte

Több sprite esetén mindegyik külön 'b' paramétert használ, de a 'p' megosztható. Jelenleg villogás nélkül csak 2 sprite jeleníthető meg, esetleg 3 a második példában látható módon az egyiket a képernyő alsó részére korlátozva. Két video lap használatával a villogás elkerülhető lenne.

Még egy kisebb újdonság:

procedure DrawChar(i,x,y:integer; c:char);

Karakter rajzolása a megadott pozícióban, az 'i' a paletta szín (0..15) vagy -1. Az előbbi esetben pixelenkénti Plot() történik a 2 színű karaktert vízszintesen nagyítva, a háttérszínű pixelek változatlanok maradnak. Ha a szín -1, akkor byte alapú a rajzolás, ami gyorsabb, és 16 színű (felhasználó által definiált) karakterkészletet tételez fel. Ez a mód csak akkor működik helyesen, ha az 'x' páros, és a teljes karakter látható (nem fordulnak elő érvénytelen koordináták).
Title: Re: HiSoft Pascal
Post by: Lacika on 2017.June.13. 19:50:44
A graph16.hpu fejlesztése befejeződött? Lesz még változás? Az ismertető miatt kérdezem.
Title: Re: HiSoft Pascal
Post by: IstvanV on 2017.June.13. 19:57:09
A graph16.hpu fejlesztése befejeződött?

Egyelőre igen, az esetleges hibák vagy nem jól optimalizált kód lehetőségétől eltekintve. :oops:

Szerk.: korábban elkezdtem C (SDCC) változat készítését is, de nem tudom, érdemes-e befejezni.
Title: Re: HiSoft Pascal
Post by: geco on 2017.June.14. 21:15:29
Egyelőre igen, az esetleges hibák vagy nem jól optimalizált kód lehetőségétől eltekintve. :oops:

Szerk.: korábban elkezdtem C (SDCC) változat készítését is, de nem tudom, érdemes-e befejezni.
szerintem tuti, ha valaki esetleg C-ben szeretne programot irni
Title: Re: HiSoft Pascal
Post by: Lacika on 2017.June.14. 23:21:46
István! Majd itt (http://ep128.hu/Ep_Util/Hisoft_Pascal.htm#13_5) a GRAPH16.HPU-ra vonatkozó részt? Pl. a SpriteNew(b,p) működése nekem nem egyértelmű.
Title: Re: HiSoft Pascal
Post by: IstvanV on 2017.June.15. 10:28:21
István! Majd itt (http://ep128.hu/Ep_Util/Hisoft_Pascal.htm#13_5) a GRAPH16.HPU-ra vonatkozó részt? Pl. a SpriteNew(b,p) működése nekem nem egyértelmű.

A SpriteNew() sprite számára inicializálja a 'b' paraméterben megadott kezdőcímű (ennek párosnak kell lennie), 130 byte méretű területet. Ugyanezt a paramétert használják a SpriteDraw és SpriteClr későbbi hívásai. A 'p' a SpriteInit rutinnal konvertált pixel adatra mutat, több sprite is használhatja ugyanazt a grafikát, bár 4 MHz-es gépen csak 2-3 jeleníthető meg villogás nélkül. :oops:
Title: Re: HiSoft Pascal
Post by: IstvanV on 2017.June.15. 19:38:16
Egy kisebb hibát találtam a leírásban: a SpriteDraw első paramétere nem p (pixel/maszk adat), hanem b (puffer).
Title: Re: HiSoft Pascal
Post by: Lacika on 2017.June.15. 23:01:16
Javítva.
Title: Re: HiSoft Pascal
Post by: IstvanV on 2017.June.16. 16:46:04
szerintem tuti, ha valaki esetleg C-ben szeretne programot irni

Ez ugyan nem tűnik túl valószínűnek. :oops: Új EP-s programok jelenleg BASIC vagy assembly nyelven készülnek, talán BASIC verziónak lenne a legtöbb értelme, bár azt nem tudom, hogyan lehetne jól megoldani.
Title: Re: HiSoft Pascal
Post by: endi on 2017.June.16. 17:03:37
mindig is nagy vágyam volt egy olyan basic/exos lehetőség, hogy egyik videólap megadott részét átmásolja egy másikra.
így egy videolapra kirajzolhatók (vagy betölthetők) figurák, másikra háttér, és egy harmadikon meg szépen lehet másolgatni a sprite-okat, háttér kezeléssel együtt.
persze csak úgy lenne jó, ha a zzzip is le tudná fordítani :)
(a mutant test játékomban gépi kódú sprite kirakás van, szóval valahogy biztos megoldható)
Title: Re: HiSoft Pascal
Post by: Zozosoft on 2017.June.16. 21:54:55
talán BASIC verziónak lenne a legtöbb értelme, bár azt nem tudom, hogyan lehetne jól megoldani.
BASIC utasítás bővítés?
Title: Re: HiSoft Pascal
Post by: endi on 2017.July.31. 17:23:08
itt van még két régi játékom.
az egyik egy platform-kaland játék engine, pár pályával, kb minden funkcióval, de amúgy nem kész játék. ez is delphi és csak fullscreenben megy, win7 alatt már nem fut nekem... az volt benne az extra, hogy truecolor 320x200-ban futott. :)
ebből mellékeltem képeket is.
de gondolom ezt nincs értelme átírni mert nem kész játék. meg a grafika konverziója is marha sok munka lenne.

a másik egy dos alatt futó turbo pascal, rpg-szerű játék, saját nézet, 3d-ben rajzolja ki a falakat, 90 fokban lehet forogni, szóval mint a régi klasszikus eye of beholder és társai. de itt csak egy karakterrel lehet menni, inkább kalandjáték. ezt a book of life játékom után csináltam. ez jól fut dosbox-ban.
ez szerintem átírható lehetne.

Title: Re: HiSoft Pascal
Post by: endi on 2017.July.31. 17:25:18
ah sajnos a minirpg-nek nem találom a forrását...
Title: Re: HiSoft Pascal
Post by: nyuzga on 2017.July.31. 17:40:36
"win7 alatt már nem fut nekem"

Nálam fut 64 biten. Jó kis játék lehetett volna ebből. :D
Title: Re: HiSoft Pascal
Post by: endi on 2017.July.31. 17:49:47
"win7 alatt már nem fut nekem"

Nálam fut 64 biten. Jó kis játék lehetett volna ebből. :D

hú, nem tudnál felvenni videót?
nekem is win7 64 bit van. simán csak elindítod és fut?
Title: Re: HiSoft Pascal
Post by: nyuzga on 2017.July.31. 18:00:39
hú, nem tudnál felvenni videót?
nekem is win7 64 bit van. simán csak elindítod és fut?

Igen. Bár az Avast sz%rakodott, hogy ismeretlen file, de kikapcsoltam. :)
Nálad ezek hiányozhatnak :

Net Framework 4.7
Vcredist Összes 2005-2015 32-64-bit
Esetleg Java 7-8 32-64

Majd próbálok videót készíteni, de most nincs fent olyan programom.
Title: Re: HiSoft Pascal
Post by: nyuzga on 2017.July.31. 18:56:55
Tessék a mozi. :)

Title: Re: HiSoft Pascal
Post by: endi on 2017.July.31. 20:36:28
hú ez tök jó, köszi. már régen láttam, jó volt újra látni :)
Title: Re: HiSoft Pascal
Post by: nyuzga on 2017.August.01. 08:41:02
Igen. Bár az Avast sz%rakodott, hogy ismeretlen file, de kikapcsoltam. :)

Megjött az elemzés :

Title: Re: HiSoft Pascal
Post by: endi on 2017.August.01. 08:52:14
ja hát ez előfordul :)
de biztos nem vírusos
Title: Re: HiSoft Pascal
Post by: nyuzga on 2017.August.01. 10:29:17
ja hát ez előfordul :)
de biztos nem vírusos

Nem vírusos.
Title: Re: HiSoft Pascal
Post by: Tomato77 on 2017.October.12. 19:10:09
Szervusztok!

Elkezdtem ismerkedni a HiSoft Pascallal, és máris elakadtam. Szeretném a grafikai lehetőségeket próbálgatni. Láttam, hogy a GRAPH16.HPU-ban sok eljárás van, amik közül csak néhányra volna szükségem (videolapok nyitása és megjelenítése, paletta és BIAS beállítása), ezért arra gondoltam, hogy ezeket bemásolom magába a programba. Próbából a keret színét szerettem volna átállítani az alábbi mini programmal, ami lefordul, de futáskor lefagy:

PROGRAM Proba;

PROCEDURE BORDER(C:INTEGER);
BEGIN
  INLINE(#DD,#7E,#02,#CD,#B0,#BC);
END;

BEGIN
  BORDER(255);
END.

Szerintetek ennek kellene így működnie, vagy hol rontottam el?

Ilyen inline-os soroknál honnan tudja, hogy a "C" paramétert honnan vegye? Több eljárást nézegetve a #02 lett gyanús, mert több eljárásban is előfordult. Ez mutatja, hogy pl. valami után 2 bájttal található az érték?
Title: Re: HiSoft Pascal
Post by: IstvanV on 2017.October.12. 19:56:38
A GRAPH16 rutinok használatához szükség van a GRAPH16.BIN betöltésére is, ez tartalmazza a megvalósításuk jelentős részét (lásd itt (http://www.ep128.hu/Ep_Util/Hisoft_Pascal.htm#13_5) a GRAPH16.HPU-nál). Egyszerűbb lehet azonban az EXOS VIDEO: eszközére épülő GRAFCSX.HPU használata.

Ilyen inline-os soroknál honnan tudja, hogy a "C" paramétert honnan vegye? Több eljárást nézegetve a #02 lett gyanús, mert több eljárásban is előfordult. Ez mutatja, hogy pl. valami után 2 bájttal található az érték?  

A DD..02 az IX regiszterhez képest 2 eltolást jelent, itt található a C paraméter. Az IX értéke a veremmutató az eljárás hívásakor, IX+0-nál található a visszatérési cím, IX+2-nél az utolsó paraméter, utána a többi fordított sorrendben, majd (csak függvénynél) a visszatérési érték.
Title: Re: HiSoft Pascal
Post by: Tomato77 on 2017.October.12. 23:41:59
Köszönöm a választ! Egy rövid próba után úgy néz ki, hogy megértettem, hogyan működik.

Még azt szeretném kérdezni, hogy a Basic-es SPOKE híján a videomemóriába hogyan lehet közvetlenül bele"poke"-olni? A Pascal POKE-ja a belapozott négy szegmenst eléri egy Word értékkel? Arra gondoltam, hogy miután megvan a Nick cím és az abból kiszámolt szegmens száma, azt belapozom valahová. Ha jól értem, a nullás lapot nem illik használni, ezért mondjuk a kettesre: OUT(#B2,CHR(szegmens)); Ezek után még kell módosítani a címet, hogy 32768 és 49151 közötti értéke legyen? Így lehet elérni a kettes lapra belapozott szegmenst?
Title: Re: HiSoft Pascal
Post by: IstvanV on 2017.October.13. 09:06:14
A GRAPH16.HPU-nál a képernyő egyszerűen a 49152 (-16384) címtől kezdődően érhető el, mindig be van lapozva.

OUT használatánál elsősorban arra kell figyelni, hogy ne olyan lapot módosítson, amit a Pascal is használ. Talán célszerűbb lehet az Alter paranccsal C000h alá korlátozni a Pascal program területét, akkor a 3. lapra bármikor tetszőleges szegmens kerülhet.
Title: Re: HiSoft Pascal
Post by: Povi on 2017.October.13. 10:59:18
A GRAPH16.HPU-nál a képernyő egyszerűen a 49152 (-16384) címtől kezdődően érhető el, mindig be van lapozva.
Érdemes ilyen esetekben hexa formában megadni a forráskódban a címeket, és akkor nem kell negatív számokkal elcsúfítani a kódot.
pl.:
Code: [Select]
POKE(#c000,value);
Arra figyelni kell, hogy a value bármilyen típus lehet, ha char, akkor egy bájtot fog írni, de ha pl. integer akkor két bájtot a 0xc000 és 0xc001 címre.
Title: Re: HiSoft Pascal
Post by: Tomato77 on 2017.October.13. 12:22:27
Rendben, köszönöm a válaszokat! Megpróbálom az Alter parancsot használni, mert ha egy teljes képernyő kb. 20 Kbájt, akkor mindenképp szükség lesz lapozásra.
Title: Re: HiSoft Pascal
Post by: Tomato77 on 2017.October.17. 16:04:52
Sziasztok!

Megint segítséget szeretnék kérni. Basic-ben a keret színét be lehet állítani a SPOKE 255,16352,n paranccsal. Pascalban miért nem működik az alábbi program?

Program Border;
BEGIN
  Poke(#BFE0,Chr(73));
END.

#3FE0-val sem működik, illetve próbáltam Out paranccsal belapozni az FF szegmenst, de úgy sem csinál semmit.
Title: Re: HiSoft Pascal
Post by: endi on 2017.October.17. 16:24:25
Sziasztok!

Megint segítséget szeretnék kérni. Basic-ben a keret színét be lehet állítani a SPOKE 255,16352,n paranccsal. Pascalban miért nem működik az alábbi program?

Program Border;
BEGIN
  Poke(#BFE0,Chr(73));
END.

#3FE0-val sem működik, illetve próbáltam Out paranccsal belapozni az FF szegmenst, de úgy sem csinál semmit.

de miért nem exos hívással állítod be?
Title: Re: HiSoft Pascal
Post by: Tomato77 on 2017.October.17. 16:38:17
Mert nem tudom, hogy kell. :) Meg majd a click-et és a statust is ki szeretném kapcsolni, és ezek nagyjából egy kupacban vannak. Annyit még felfogok, hogy a memóriában átírok valamit, de a hexa inline parancsokat nem értem.
Title: Re: HiSoft Pascal
Post by: endi on 2017.October.17. 16:46:01
Mert nem tudom, hogy kell. :) Meg majd a click-et és a statust is ki szeretném kapcsolni, és ezek nagyjából egy kupacban vannak. Annyit még felfogok, hogy a memóriában átírok valamit, de a hexa inline parancsokat nem értem.

hát ezeket tipikusan exos-al kell átállítani. ha tudod a poke címét, akkor hogyhogy nem tudod az exos lehetőségeket? :)
ha meg nem akarsz exos-t használni akkor pl a bordert port-on keresztül kell írni, ez esetben az exos megszakítást le kell tiltani.
ami biztos, hogy poke-al semmiképpen nem érdemes ilyesmiket átírni.
exos hívásokról meg majd valaki linkeljen egy doksit, gondolom ep128.hu-n van.
Title: Re: HiSoft Pascal
Post by: Lacika on 2017.October.17. 18:47:49
A funkcióhívásokról itt (http://ep128.hu/Ep_Konyv/Gepi_kod.htm#19) lehet közérthetően olvasni. Ebből még én is - többé-kevésbé - megértem... :oops:
A az ep128.hu-ról letölthető Hisoft Pascal-ban van grafikai rutingyűjtemény (több is). Ezek használatáról itt (http://ep128.hu/Ep_Util/Hisoft_Pascal.htm#13_5) lehet olvasni
Title: Re: HiSoft Pascal
Post by: endi on 2017.October.17. 19:03:54
A funkcióhívásokról itt (http://ep128.hu/Ep_Konyv/Gepi_kod.htm#19) lehet közérthetően olvasni. Ebből még én is - többé-kevésbé - megértem... :oops:
A az ep128.hu-ról letölthető Hisoft Pascal-ban van grafikai rutingyűjtemény (több is). Ezek használatáról itt (http://ep128.hu/Ep_Util/Hisoft_Pascal.htm#13_5) lehet olvasni

hm ez de jó. nem is tudtam hogy ilyenek is vannak hogy saját pascal rajzoló rutinok, sprite kezelés...
valahogy mindig azt hittem hogy az ep pascal valami fapados izé :)
hm, ha ezeket én annak idején tudom...
Title: Re: HiSoft Pascal
Post by: Tomato77 on 2017.October.18. 11:50:19
Köszönöm az ötletet! #10-ás EXOS hívással sikerült a keretet átállítani. Azért poke-kal próbálkoztam, mert a memóriacímet találtam meg előbb a Tippek és trükkök c. könyvben és Basicben működött is.
Title: Re: HiSoft Pascal
Post by: Tomato77 on 2017.October.24. 18:45:56
Sziasztok!

Kezdő szintű Pascal-os kérdést szeretnék feltenni, ugyanis megint elakadtam az ismerkedéssel. Még mindig a videomemóriában szeretnék turkálni poke-kal, de egyelőre egy árva pixelt sem sikerült megjelenítenem, mert szinte mindig fagyás lesz a dolog vége. A 255-ös (meg majd a 254-es) lapra szeretnék írni, amiket úgy gondolom, be kellene lapozni valahová. Ha egy kis programmal megnézem, akkor alapból a 248, 249, 250 és 251 szegmenseket látom belapozva, azaz a Pascal elfoglalja mind a négy lapot? A korábbi tanácsra az Alter paranccsal próbálkoztam, de nem igazán értem, hogy mit kéne változtatni és mire. A stack-ek értéke alapból 0000h, ezek közül kellene az egyiket a könyv által javasolt C000h-ra változtatni, és ez után használhatnám a 3-as lapot? Ezt a Pascal minden betöltése után be kell állítani?

Ha jól értem, amit olvastam, ha egy szegmenst használni szeretnék, azt le kell foglalni az EXOS által. Vajon ha egy videolapot nyitok, akkor belapozhatom egyből az adott szegmenst, vagy még le is kell előtte valahogy foglalni?

Magasszintű nyelvekhez szokva nehéz felfogni az Enterprise memóriakezelését. :(
Title: Re: HiSoft Pascal
Post by: Lacika on 2017.October.24. 18:50:13
Ha mindenképen POKE-ézni akarsz, használd István GRAPH16.HPU-ját. C000H-tól tied a pálya...
De ha magas szintű nyelvekhez vagy hozzá szokva, miért nem a GRAFCS.HPU-t használod? Ez az EXOS-t használja, egy deka POKE nem kell a rajzoláshoz.
Title: Re: HiSoft Pascal
Post by: Tomato77 on 2017.October.24. 19:08:07
Azért, mert szeretnék teljes képernyős képet gyorsan betölteni, meg a .HPU-hoz a graph16.bin-t is be kell töltögetni, ami magnós konfiggal nem ideális. Olyan játékot szeretnék csinálni, ami egy program- és egy képfájlból áll, de lehet, hogy megírom Delphiben PC-re. :)
Title: Re: HiSoft Pascal
Post by: Tomato77 on 2017.October.25. 01:54:10
Sikerült! :) Az Alter paranccsal a stack-et C000h-ra állítva használhatom a 3-as lapot. Vannak pixelek, és gyorsabbnak tűnik az EXOS rajzoló rutinjánál.
Title: Re: HiSoft Pascal
Post by: Povi on 2017.October.25. 10:37:35
Sziasztok!

Kezdő szintű Pascal-os kérdést szeretnék feltenni, ugyanis megint elakadtam az ismerkedéssel. Még mindig a videomemóriában szeretnék turkálni poke-kal, de egyelőre egy árva pixelt sem sikerült megjelenítenem, mert szinte mindig fagyás lesz a dolog vége. A 255-ös (meg majd a 254-es) lapra szeretnék írni, amiket úgy gondolom, be kellene lapozni valahová. Ha egy kis programmal megnézem, akkor alapból a 248, 249, 250 és 251 szegmenseket látom belapozva, azaz a Pascal elfoglalja mind a négy lapot? A korábbi tanácsra az Alter paranccsal próbálkoztam, de nem igazán értem, hogy mit kéne változtatni és mire. A stack-ek értéke alapból 0000h, ezek közül kellene az egyiket a könyv által javasolt C000h-ra változtatni, és ez után használhatnám a 3-as lapot? Ezt a Pascal minden betöltése után be kell állítani?

Ha jól értem, amit olvastam, ha egy szegmenst használni szeretnék, azt le kell foglalni az EXOS által. Vajon ha egy videolapot nyitok, akkor belapozhatom egyből az adott szegmenst, vagy még le is kell előtte valahogy foglalni?

Magasszintű nyelvekhez szokva nehéz felfogni az Enterprise memóriakezelését. :(

Az Alter paranccsal, amikor a compiler stack és a translate stack címét állítod, akkor annak a felső határát állítod be. Ez alapesetben 0000, vagyis ettől lefele lévő területet (0xfff, ez ugye a harmadik lap teteje) fogja használni a Pascal. Ha ezt stack-et átállítjuk 0xc000-ra (ami alatt a0xbfff van, az már a második lap), akkor biztosítva lesz az, hogy a a harmadik lapon lévő szegmens "biztonságban" legyen, azt a Pascal nem fogja használni. Ezek után oda bármit belapozhatsz (praktikusan vagy olyan lapot, amit már megigényeltél az EXOS-tól, de ez lehet video lap is, azt már nem kell külön lefoglalni magadnak).
Title: Re: HiSoft Pascal
Post by: Tomato77 on 2017.October.25. 11:53:32
Köszönöm! Beállítottam tegnap éjjel a stack-eket. Működik, és állati gyors. :) Már úgy is, ha pixelenként poke-olok a képernyőre, de ha 80 vagy 84 bájtos (X szélességtől függően) blokkokból dolgozik a poke, akkor meg nagyon nagyon gyors. :)
Title: Re: HiSoft Pascal
Post by: Povi on 2017.October.25. 13:49:10
Olyan játékot szeretnék csinálni, ami egy program- és egy képfájlból áll
A képfájlt legegyszerűbben a TIN paranccsal tudod betölteni:
használata: TIN(filenév, memóriacím)

például:
Code: [Select]
tin('game.scr', #c000);
Title: Re: HiSoft Pascal
Post by: Tomato77 on 2017.October.26. 20:17:46
Megint bénázok a Pascallal... Ha kb. 8KB-ot elér a forrás, akkor néha azt csinálja, hogy betöltés közben "eltűnik" egy karakter valamelyik sorból, és persze nem fordul le. Pl. egy zárójel, pontosvessző, vagy egy azonosító egy karaktere. Notepad-ban írom a forráskódot, azt olvasom be emulátorral magnós konfigurációban. A txt fájl látszólag jó, ansi-ként van mentve, a sorok végén 0Dh és 0Ah. Tapasztalt már valaki ilyet?
Title: Re: HiSoft Pascal
Post by: Lacika on 2017.October.26. 23:13:24
Nem láttam még ilyet. Én floppyzok, de ilyet nem tapasztaltam.
Title: Re: HiSoft Pascal
Post by: Tomato77 on 2017.October.26. 23:52:54
Nem is betöltéskor van baj, hanem úgy látszik, hogy fordításkor. A screenshot-on látszik: az eredeti sor ez volt: "Pic.XByte := 84;", de a 4-est lenyúlta. Ráadásul a kettes hiba pontosvessző hiányára utal, ami ott van, legalábbis a képernyőn látszik. Utána átírom a sort, listázáskor még helyesen jelenik meg, de fordításkor megint eltűnik egy karakter. Parajelenséggel állunk szemben, tárcsázom a szellemirtókat.
[attach=1]
Title: Re: HiSoft Pascal
Post by: Povi on 2017.October.27. 09:07:57
Nem is betöltéskor van baj, hanem úgy látszik, hogy fordításkor. A screenshot-on látszik: az eredeti sor ez volt: "Pic.XByte := 84;", de a 4-est lenyúlta. Ráadásul a kettes hiba pontosvessző hiányára utal, ami ott van, legalábbis a képernyőn látszik. Utána átírom a sort, listázáskor még helyesen jelenik meg, de fordításkor megint eltűnik egy karakter. Parajelenséggel állunk szemben, tárcsázom a szellemirtókat.
Nem lehet, hogy az a baj, hogy pont van a változó nevében?
szerk: ja nem, az rekord

ami még gondot okzhat, a fordítási direktíva
ha kiveszed, akkor is sz**? vagy pl. az biztos hogy a } után rögtön 0a 0d van, és nincs szóköz?
Title: Re: HiSoft Pascal
Post by: Tomato77 on 2017.October.27. 14:32:46
Ezek a direktívák vannak a program elején:

{$L- }
{$O- }
{$A+ }
{$S+ }
{$I+ }

Nincs a } jel után szóköz, csak előtte, ahogy a könyv említi. Viszont kipróbáltam, hogy kiszedtem az összes kommentet a forrásból, mert abban is { } jelek vannak, hátha az zavar be, és úgy lefordult. De így a kód is rövidebb lett, most kb. 7 KB. Azért lovagolok a forrás hosszán, mert mintha mindig ugyanott lenne a probléma: ha kitöröltem a kérdéses sort, akkor a következőből tűnt el egy karakter, ha üres sorokat szúrtam be és lejjebb csúszott az a sor, akkor lefordult.
Az okozhatja, hogy milyen emulátor alatt fut?
Title: Re: HiSoft Pascal
Post by: Lacika on 2017.October.27. 16:01:43
Töltsd fel, amit le kellene fordítani, kipróbálom nálam mit csinál.
Title: Re: HiSoft Pascal
Post by: Tomato77 on 2017.November.03. 11:53:03
Próbálkoztam a fordítással, de továbbra is problémám van vele: itt-ott eltűnnek a karakterek fordítás közben (1.2-es HiSoft Pascal). Kipróbáltam, hogy a { } jelek helyett a (* *) szimbólumokat használom a kommenteknél, hátha a fordítási direktíva zavar be, de nem javult meg. Aztán próbaképp átírtam a foglalt szavakat nagybetűsre, hogy az 1.1-es Pascal elfogadja, és azzal (egyelőre) jónak tűnik, nincsenek hiányzó jelek.
Title: Re: HiSoft Pascal
Post by: Tomato77 on 2017.November.03. 13:07:51
Hmmm, nagybetűs szavakkal az 1.2-es is jól fordít. Nem értem...
Title: Re: HiSoft Pascal
Post by: ergoGnomik on 2017.November.03. 13:29:12
Hmmm, nagybetűs szavakkal az 1.2-es is jól fordít. Nem értem...
Lásd HiSoft Pascal leírás (http://www.ep128.hu/Ep_Util/Hisoft_Pascal.htm#3_2) 3.2 pont utolsó mondata!
Title: Re: HiSoft Pascal
Post by: Tomato77 on 2017.November.03. 14:46:18
No de az az 1.1-re vonatkozik. Az 1.2-nek ott a 14. fejezet, ami szerint megengedett a kisbetű is, csak listázáskor nagybetűsként jelenik meg. Lehet, hogy ezen csúszik el a dolog és emiatt tűnik el egy-egy karakter? Legyen akkor nagybetű, ha így stabilan fordít.
Title: Re: HiSoft Pascal
Post by: Lacika on 2017.November.03. 14:49:09
Ep32 emut használsz?
Amit nekem átküldtél, simán lefordult ep128emu-val.
Title: Re: HiSoft Pascal
Post by: ergoGnomik on 2017.November.03. 14:52:36
No de az az 1.1-re vonatkozik. Az 1.2-nek ott a 14. fejezet, ami szerint megengedett a kisbetű is, csak listázáskor nagybetűsként jelenik meg. Lehet, hogy ezen csúszik el a dolog és emiatt tűnik el egy-egy karakter? Legyen akkor nagybetű, ha így stabilan fordít.
Povi fel szokott itt tűnni időnként. Lehet, hogy vele kellene egy kis eszmecserét megejtened.
Title: Re: HiSoft Pascal
Post by: ergoGnomik on 2017.November.03. 14:53:33
Ep32 emut használsz?
Az milyen betegség? :evil:
Title: Re: HiSoft Pascal
Post by: Lacika on 2017.November.03. 15:19:44
A fenti screenshot-on az látszik...
Title: Re: HiSoft Pascal
Post by: Tomato77 on 2017.November.03. 15:23:13
Ep32 emut használsz?

Igen, EP32-t.
Title: Re: HiSoft Pascal
Post by: IstvanV on 2017.November.03. 15:48:14
Ha csak EP32-n hibás, akkor érdekes lehet, hogy mi okozza az eltérést.
Title: Re: HiSoft Pascal
Post by: Zozosoft on 2017.November.03. 15:51:37
Ha csak EP32-n hibás, akkor érdekes lehet, hogy mi okozza az eltérést.
Játékok közül is volt olyan ami hibásan futott rajta, ha jól emlékszem pl a Tomahawk.
Title: Re: HiSoft Pascal
Post by: Povi on 2017.November.03. 16:29:34
Povi fel szokott itt tűnni időnként. Lehet, hogy vele kellene egy kis eszmecserét megejtened.
A kisbetűs foglalt név írásnak nem kéne ilyen hibát okoznia, lehet, hogy akkor tényleg emu probléma van a háttérben?
A case sensitive feature kiírtása a CPC verzió alapján készült, szóval még az se lehet, hogy én vétettem valami hibát, vagy akkor ez a hiba a CPC verzióban is benne van :-)
Title: Re: HiSoft Pascal
Post by: Lacika on 2017.November.03. 18:15:40
Játékok közül is volt olyan ami hibásan futott rajta, ha jól emlékszem pl a Tomahawk.

Pontosan! Hátrafelé indult el a helikopter... :ds_icon_cheesygrin:
Manapság már nem érdemes az Ep32-őt használni!
Title: Re: HiSoft Pascal
Post by: RetroJátékos on 2018.January.30. 21:43:55
Sziasztok!
Rá lehet valahogy bírni a fordítót, hogy a readln után ne várjon még egy enterig? Illetve a legordított program tetejéről el lehet tüntetni a HiSoft Pascal Compiler feliratot (és pl. a saját program címével helyettesíteni)?
Title: Re: HiSoft Pascal
Post by: Povi on 2018.January.30. 21:51:06
Get The Cash!, New Amstrad Game Written in Hisoft Pascal
http://www.vintageisthenewold.com/get-the-cash-new-amstrad-game-written-in-hisoft-pascal/
Title: Re: HiSoft Pascal
Post by: Povi on 2018.January.30. 21:53:40
Sziasztok!
Rá lehet valahogy bírni a fordítót, hogy a readln után ne várjon még egy enterig?

Kicsit máshogy működik a readln a HiSoft Pascal-ban, mint ahogy azt megszoktuk a Turbo Pascal esetében. A gyári példaprogramok is így használják:
Code: [Select]
READLN;
READ(valtozo);
Title: Re: HiSoft Pascal
Post by: RetroJátékos on 2018.January.30. 22:43:07
Köszönöm, működik. :razz:
Title: Re: HiSoft Pascal
Post by: Tomato77 on 2018.February.13. 18:53:00
Sziasztok!
Azt szeretném kérdezni, hogy Pascalban van lehetőség gyorsan átmásolni bizonyos mennyiségű adatot a memória egyik részéről a másikra? Képkirakó rutint szeretnék, hasonlót, mint Turbo Pascalban a GetImage-PutImage páros. POKE-kal próbáltam bájtonként, de nem igazán gyors. Ha tudom a kép vízszintes méretét, akkor lehet gyorsítani azzal, hogy a PEEK-nek tömb típust adok meg, pl. 9 bájtnyi széles képhez így jó: POKE(VOfs+#C000,PEEK(Addr0,ARRAY[1..9] OF CHAR)); viszont ez nem túl rugalmas, mert csak konstanst fogad el. Mondjuk tudom, mekkora lesz a kép, de valami univerzálisabb megoldás jobb lenne. Olyan kéne, mint Turbo Pascalban a "Move" parancs. Assemblyben biztos lehetne ilyet, de azt nem ismerem, meg nem is tudom, hogyan lehet átalakítani INLINE hexa kóddá.
Köszönöm!
Title: Re: HiSoft Pascal
Post by: IstvanV on 2018.February.13. 19:24:02
Ha tudom a kép vízszintes méretét, akkor lehet gyorsítani azzal, hogy a PEEK-nek tömb típust adok meg, pl. 9 bájtnyi széles képhez így jó: POKE(VOfs+#C000,PEEK(Addr0,ARRAY[1..9] OF CHAR)); viszont ez nem túl rugalmas, mert csak konstanst fogad el.

Lehet változóval is, ha nem is túl elegánsan: először például 16 méretű blokkokban addig, amíg a maradék méret legalább 16, majd 8, 4, 2, és végül 1. Így nagy méretű adat nagy részét az első ciklus másolja. Nem hatékony viszont csak néhány byte másolásakor.

Az inline assembly használatáról van leírás az ep128.hu-n, és a különböző HPU-k is tartalmaznak rá példákat. A hexadecimális kódokat a legegyszerűbb az emulátorban "A" monitor paranccsal kiíratni ha csak néhány soros a kód, valamilyen nem használt területre írva (pl. IS-BASIC indítása után A 2000). Bonyolultabb rutint érdemesebb külső assemblerrel fordítani.
Title: Re: HiSoft Pascal
Post by: Tomato77 on 2018.February.13. 19:38:19
Köszönöm, István! Az ötlet is nagyon jó, meg rátaláltam az LPTUNIT.HPU-ra is, amiben van egy nagyon hasonló rutin, megpróbálom megérteni.
Title: Re: HiSoft Pascal
Post by: Povi on 2018.February.15. 13:55:17
Sziasztok!
Azt szeretném kérdezni, hogy Pascalban van lehetőség gyorsan átmásolni bizonyos mennyiségű adatot a memória egyik részéről a másikra?
Köszönöm!
Nem teszteltem, de elvileg ennek jónak kell lennie:
Code: [Select]
procedure memcpy(dest, source, count : integer)
begin
  inline(#dd,#46,#03)   { ld b,(ix+3) };
  inline(#dd,#4e,#02)   { ld c,(ix+2) };
  inline(#dd,#66,#05)   { ld h,(ix+5) };
  inline(#dd,#6e,#04)   { ld l,(ix+4) };
  inline(#dd,#56,#07)   { ld d,(ix+7) };
  inline(#dd,#5e,#06)   { ld e,(ix+6) };
  inline(#ed,#b0)       { ldir};
end

A dest és source a cél és a forrás memóriacíma, a count-ban pedig byte-ban a másolandó cucc mérete
Title: Re: HiSoft Pascal
Post by: Povi on 2018.February.15. 13:57:51
de ha már Move, akkor:

Code: [Select]
procedure Move(source, dest, count : integer)
begin
  inline(#dd,#46,#03)   { ld b,(ix+3) };
  inline(#dd,#4e,#02)   { ld c,(ix+2) };
  inline(#dd,#56,#05)   { ld d,(ix+5) };
  inline(#dd,#5e,#04)   { ld e,(ix+4) };
  inline(#dd,#66,#07)   { ld h,(ix+7) };
  inline(#dd,#6e,#06)   { ld l,(ix+6) };
  inline(#ed,#b0)       { ldir};
end

Bár valójában nem tudom, hogy az "igazi" Move parancs átírja-e visszatéréskor a dest értékét? Ahhoz kicsit módosítani kéne még.
Title: Re: HiSoft Pascal
Post by: Tomato77 on 2018.February.15. 15:29:28
 Ó, köszönöm! De szuper! Ki fogom próbálni, bár most más akadályba ütköztem. :)
Utánanéztem, szóval ez az LDIR ciklusban másol.

Most ott akadtam el, hogy futtatáskor az "out of RAM" üzenet jelenik meg. Fordítás előtt a stack-eket C000-ra állítom, hogy az utolsó lapra szabadon lapozhassak. Az EXOS-tól elkérem az FC-FD-FE szegmenseket (ezeket dugig töltöm, a többit felszabadítom), maga a forrás program pedig kb. 10K eddig. Nagyjából 3 KB-nyi méretű tömböt használok, ezeket tervezem áttenni a heap-re, hátha így felszabadul némi memória. Azt találtam még ki, hogy átállítom az emulátort 160 KB-nyi RAM-ra azzal a céllal, hogy hátha így elfér minden és lehet fordítani, tesztelni, majd a kész, lefordított program Pascal környezet nélkül talán belefér 128K RAM-ba. Vajon sok helyet foglalhat a fordító és az editorban a forrásprogram? Ezek felszabadulnak, ha a .COM programot futtatom? Mindenképp cél, hogy alap, gyári 128K-s Enterprise-on fusson, mindenféle tuning nélkül.
Title: Re: HiSoft Pascal
Post by: Povi on 2018.February.15. 15:55:49
Ó, köszönöm! De szuper! Ki fogom próbálni, bár most más akadályba ütköztem. :)
Utánanéztem, szóval ez az LDIR ciklusban másol.

Most ott akadtam el, hogy futtatáskor az "out of RAM" üzenet jelenik meg. Fordítás előtt a stack-eket C000-ra állítom, hogy az utolsó lapra szabadon lapozhassak. Az EXOS-tól elkérem az FC-FD-FE szegmenseket (ezeket dugig töltöm, a többit felszabadítom), maga a forrás program pedig kb. 10K eddig. Nagyjából 3 KB-nyi méretű tömböt használok, ezeket tervezem áttenni a heap-re, hátha így felszabadul némi memória. Azt találtam még ki, hogy átállítom az emulátort 160 KB-nyi RAM-ra azzal a céllal, hogy hátha így elfér minden és lehet fordítani, tesztelni, majd a kész, lefordított program Pascal környezet nélkül talán belefér 128K RAM-ba. Vajon sok helyet foglalhat a fordító és az editorban a forrásprogram? Ezek felszabadulnak, ha a .COM programot futtatom? Mindenképp cél, hogy alap, gyári 128K-s Enterprise-on fusson, mindenféle tuning nélkül.

Sajnos csak 64k-t lát a HiSoft Pascal, szóval annál több nem lehet...
Itt az lehet a gond, hogy túl nagy a forrás, lehet azzal játszani, hogy kiveszed pl. a kommenteket, és megnézed úgy, hogy lefordul-e.
Egyébként igen, Translate-tel fordítva több helyed van, meg lehet azt is nézni, hogy úgy vajon fordul-e.

Az LDIR-nél arra azért figyelj, hogy mi van akkor, ha átfedésben van a célterület a forrással, az nincs lekezelve :-)
Title: Re: HiSoft Pascal
Post by: Povi on 2018.February.15. 15:58:38
Nagyjából 3 KB-nyi méretű tömböt használok, ezeket tervezem áttenni a heap-re, hátha így felszabadul némi memória.
Ezt hogy tervezed? Sejtem, hogy mit akarsz, csak kíváncsi vagyok, hogyan.
Title: Re: HiSoft Pascal
Post by: Tomato77 on 2018.February.15. 16:11:35
Most hat tömb van, összesen kb. 3K helyet foglalnak. Ezeket arra használom, hogy a mozgó képek ezekbe vannak mentve, innen teszi ki a program a képernyőre. Ezek helyett szeretnék pointert használni és a NEW paranccsal lefoglalni memóriát, hátha úgy elfér.
Title: Re: HiSoft Pascal
Post by: IstvanV on 2018.February.15. 16:34:36
Az LDIR-nél arra azért figyelj, hogy mi van akkor, ha átfedésben van a célterület a forrással, az nincs lekezelve :-)

Ez hasznos is lehet tömb feltöltésére, akár ismétlődő sorozattal vagy nem 1 byte méretű típussal. De ha valóban mozgatás a cél, akkor arra egyszerűen készíthető LDDR-es változat is.
Title: Re: HiSoft Pascal
Post by: Lacika on 2019.August.13. 14:11:55
A memória egy adott területéről (hossz-byte-tal az elején) egy szövegfüzért kiírni van valami egyszerűbb módszer ehelyett:

Code: [Select]
PROGRAM HIBA;
VAR TMP,RA: CHAR;
    I:INTEGER;
BEGIN
  RA:=CHR(101);
  TMP:=EXOS(3);
  IF RA<>CHR(0) THEN BEGIN
    RDE:=#14AE;
    TMP:=EXOS(28);
    FOR I:=#14AE+1 TO #14AE+ORD(PEEK(#14AE,CHAR)) DO
      WRITE(PEEK(I,CHAR));
    WRITELN('.')
  END
END.

A PEEK hiába rugalmas, típusmegadásnál csak konstans fogad el...
Title: Re: HiSoft Pascal
Post by: Povi on 2019.August.13. 18:10:55
A memória egy adott területéről (hossz-byte-tal az elején) egy szövegfüzért kiírni van valami egyszerűbb módszer ehelyett:

Code: [Select]
PROGRAM HIBA;
VAR TMP,RA: CHAR;
    I:INTEGER;
BEGIN
  RA:=CHR(101);
  TMP:=EXOS(3);
  IF RA<>CHR(0) THEN BEGIN
    RDE:=#14AE;
    TMP:=EXOS(28);
    FOR I:=#14AE+1 TO #14AE+ORD(PEEK(#14AE,CHAR)) DO
      WRITE(PEEK(I,CHAR));
    WRITELN('.')
  END
END.

A PEEK hiába rugalmas, típusmegadásnál csak konstans fogad el...

A 0x0231 címen lévő rutin lefuttat egy EXOS 28-at, és kiírja a hibaüzenetet. Ha az adott hibához nincs string, akkor a "Pascal can't cope!" szöveget ír ki.
Sajnos ezután kilép a programból.

Ahhoz, hogy ne lépjen ki, a 0x023f címen lévő JP 0x010c helyett egy RET kell.

Vagyis

Code: [Select]
POKE(£023F,CHR(£C9));
aztán lehet a

Code: [Select]
USER(£0231);
aztán állítsd vissza a RET utasítást JP-re (0xc3)
Title: Re: HiSoft Pascal
Post by: Lacika on 2019.August.14. 14:08:49
Jól értem, így kellene működnie:

Code: [Select]
PROGRAM HIBA;
VAR TMP: CHAR;
    I:INTEGER;
BEGIN
  RA:=CHR(101);
  TMP:=EXOS(3);
  IF RA<>CHR(0) THEN BEGIN
    RDE:=#14AE;
    POKE(#023F,CHR(#C9));
    USER(#0231);
    POKE(#023F,CHR(#C3));
    RA:=CHR(121);RDE:=#14AE+1;RBC:=ORD(PEEK(#14AE,CHAR));
    TMP:=EXOS(8);
    WRITELN('.')
  END;
  WRITELN('Vege.')
END.

Ez "csatorna nincs nyitva" hibaüzenetre is a fentit adja.
Title: Re: HiSoft Pascal
Post by: Povi on 2019.August.14. 16:28:22
Jól értem, így kellene működnie:

Ez "csatorna nincs nyitva" hibaüzenetre is a fentit adja.

nem lesz jó a megoldásom, mert előbb az A regiszternek át kéne adni a hibaüzenet kódját, mielőtt meghívjuk a 0231-en lévő rutint... :oops:

A te megoldásod majdnem jó.

Code: [Select]
PROGRAM HIBA;
VAR TMP: CHAR;
    I:INTEGER;
BEGIN
  RA:=CHR(101);
  EXOS(3);
  IF RA<>CHR(0) THEN BEGIN
    RDE:=#14AE;
    EXOS(28);
    RA:=CHR(121);RDE:=#14AF;RBC:=ORD(PEEK(#14AE,CHAR));
    EXOS(8);
    WRITELN('.')
  END;
  WRITELN('Vege.')
END.
Title: Re: HiSoft Pascal
Post by: Lacika on 2019.August.14. 17:04:03
Valami bugot találhattunk...
A program lefut, de pl a W parancsra lefagy a PASCAL.
Title: Re: HiSoft Pascal
Post by: Povi on 2019.August.15. 13:45:00
Valami bugot találhattunk...
A program lefut, de pl a W parancsra lefagy a PASCAL.
hááát
az 14AE területre nem szerencsés írni
fölül lett írva egy csomó dolog, amit nem kellett volna :-)

az 15ae területre kéne írni
Title: Re: HiSoft Pascal
Post by: Lacika on 2019.August.15. 17:23:35
az 14AE területre nem szerencsés írni

Ahhh! Nyomdahiba...:oops: Kösz!
Title: Re: HiSoft Pascal
Post by: Tuby128 on 2022.January.06. 02:10:34
Valaki feltöltene nekem egy rövid videót, hogy hogyan kell használni a hisoft pascal-t?
 Egy példaprogram elég lenne. Mondjuk egy adatbekérés billentyűzetről és egy videolap nyitás és egy-két vonal megrajzolása elég lenne.
 Nagyon megköszönném!