Welcome, Guest. Please login or register.


Author Topic: HiSoft Pascal (Read 180324 times)

Offline Povi

  • EP addict
  • *
  • Posts: 2307
  • Country: hu
    • http://povi.fw.hu
HiSoft Pascal
« 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
*** Speicherplatz zu klein

Offline Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14773
  • Country: hu
    • http://enterprise.iko.hu/
Re: HiSoft Pascal
« Reply #1 on: 2013.October.29. 15:24:52 »
Programfájlt lehet kérni? :oops:

Offline Povi

  • EP addict
  • *
  • Posts: 2307
  • Country: hu
    • http://povi.fw.hu
Re: HiSoft Pascal
« Reply #2 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.

*** Speicherplatz zu klein

Offline Povi

  • EP addict
  • *
  • Posts: 2307
  • Country: hu
    • http://povi.fw.hu
Re: HiSoft Pascal
« Reply #3 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.
*** Speicherplatz zu klein

Offline Z80System

  • EP addict
  • *
  • Posts: 3848
  • Country: hu
Re: HiSoft Pascal
« Reply #4 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 ...
Z80 System

Offline endi

  • EP addict
  • *
  • Posts: 7298
  • Country: hu
  • grafikus, játékfejlesztõ, programozás, scifi, tudományok, vallás
    • Honlapom
Re: HiSoft Pascal
« Reply #5 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
Vigyázat! Szektás vagyok! :)

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: HiSoft Pascal
« Reply #6 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:
[ Guests cannot view attachments ]

Offline Povi

  • EP addict
  • *
  • Posts: 2307
  • Country: hu
    • http://povi.fw.hu
Re: HiSoft Pascal
« Reply #7 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...
*** Speicherplatz zu klein

Offline Povi

  • EP addict
  • *
  • Posts: 2307
  • Country: hu
    • http://povi.fw.hu
Re: HiSoft Pascal
« Reply #8 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
*** Speicherplatz zu klein

Offline Povi

  • EP addict
  • *
  • Posts: 2307
  • Country: hu
    • http://povi.fw.hu
Re: HiSoft Pascal
« Reply #9 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
*** Speicherplatz zu klein

Offline Lacika

  • EP addict
  • *
  • Posts: 3211
  • Country: hu
    • http://www.ep128.hu
Re: HiSoft Pascal
« Reply #10 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

Offline Povi

  • EP addict
  • *
  • Posts: 2307
  • Country: hu
    • http://povi.fw.hu
Re: HiSoft Pascal
« Reply #11 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
*** Speicherplatz zu klein

Offline Povi

  • EP addict
  • *
  • Posts: 2307
  • Country: hu
    • http://povi.fw.hu
Re: HiSoft Pascal
« Reply #12 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
*** Speicherplatz zu klein

Offline Lacika

  • EP addict
  • *
  • Posts: 3211
  • Country: hu
    • http://www.ep128.hu
Re: HiSoft Pascal
« Reply #13 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

Offline Lacika

  • EP addict
  • *
  • Posts: 3211
  • Country: hu
    • http://www.ep128.hu
Re: HiSoft Pascal
« Reply #14 on: 2013.October.29. 20:06:38 »
Text 80-ba hogy kell programból átlépni?