ENTERPRISE KLUB
2021. október 2., 1055 Budapest, Nyugati tér 9. 14-19 óráig
Belépés kizárólag klubtagok részére! (Klubkártyával vagy előfizetéssel!)
Welcome, Guest. Please login or register.


Author Topic: HiSoft Pascal (Read 52810 times)

Offline Povi

  • EP addict
  • *
  • Posts: 2094
  • Country: hu
  • OS:
  • Windows XP Windows XP
  • Browser:
  • Chrome 31.0.1650.63 Chrome 31.0.1650.63
    • View Profile
    • http://povi.fw.hu
Re: HiSoft Pascal
« Reply #150 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.
*** Speicherplatz zu klein

Offline Lacika

  • EP addict
  • *
  • Posts: 3049
  • Country: hu
  • OS:
  • Windows XP Windows XP
  • Browser:
  • Firefox 25.0 Firefox 25.0
    • View Profile
    • http://www.ep128.hu
Re: HiSoft Pascal
« Reply #151 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ó.

Offline IstvanV

  • EP addict
  • *
  • Posts: 4825
  • OS:
  • Linux Linux
  • Browser:
  • Firefox 23.0 Firefox 23.0
    • View Profile
Re: HiSoft Pascal
« Reply #152 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:
* mandel_b.com (3.08 kB - downloaded 210 times.)
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:
* mandel_f.com (3.1 kB - downloaded 213 times.)
Csak érdekességként Lua verzió, ami gyakorlatilag érzékelhető várakozás nélkül lefut:
* mandel.lua (1.01 kB - downloaded 205 times.)
* ep.lua (8.08 kB - downloaded 215 times.)

Forráskódok:
* mandel_b.s (6.29 kB - downloaded 202 times.)
* mandel_f.s (6.5 kB - downloaded 199 times.)
* graph.s (14 kB - downloaded 202 times.)
* float.s (14.47 kB - downloaded 208 times.)
* math.s (2.97 kB - downloaded 211 times.)

Offline Povi

  • EP addict
  • *
  • Posts: 2094
  • Country: hu
  • OS:
  • Windows XP Windows XP
  • Browser:
  • Chrome 31.0.1650.63 Chrome 31.0.1650.63
    • View Profile
    • http://povi.fw.hu
Re: HiSoft Pascal
« Reply #153 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 :-)
*** Speicherplatz zu klein

Offline Povi

  • EP addict
  • *
  • Posts: 2094
  • Country: hu
  • OS:
  • Windows XP Windows XP
  • Browser:
  • Chrome 31.0.1650.63 Chrome 31.0.1650.63
    • View Profile
    • http://povi.fw.hu
Re: HiSoft Pascal
« Reply #154 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...
*** Speicherplatz zu klein

Offline Povi

  • EP addict
  • *
  • Posts: 2094
  • Country: hu
  • OS:
  • Windows XP Windows XP
  • Browser:
  • Chrome 31.0.1650.63 Chrome 31.0.1650.63
    • View Profile
    • http://povi.fw.hu
Re: HiSoft Pascal
« Reply #155 on: 2013.December.16. 15:15:12 »
Quote from: IstvanV
Forráskódok:
(Attachment Link)
(Attachment Link)
(Attachment Link)
(Attachment Link)
(Attachment Link)
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?
*** Speicherplatz zu klein

Offline IstvanV

  • EP addict
  • *
  • Posts: 4825
  • OS:
  • Linux Linux
  • Browser:
  • Firefox 23.0 Firefox 23.0
    • View Profile
Re: HiSoft Pascal
« Reply #156 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).

Offline Povi

  • EP addict
  • *
  • Posts: 2094
  • Country: hu
  • OS:
  • Windows XP Windows XP
  • Browser:
  • Chrome 31.0.1650.63 Chrome 31.0.1650.63
    • View Profile
    • http://povi.fw.hu
Re: HiSoft Pascal
« Reply #157 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á :-)
« Last Edit: 2013.December.16. 18:20:46 by Povi »
*** Speicherplatz zu klein

Offline Povi

  • EP addict
  • *
  • Posts: 2094
  • Country: hu
  • OS:
  • Windows XP Windows XP
  • Browser:
  • Chrome 31.0.1650.63 Chrome 31.0.1650.63
    • View Profile
    • http://povi.fw.hu
Re: HiSoft Pascal
« Reply #158 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)
*** Speicherplatz zu klein

Offline Povi

  • EP addict
  • *
  • Posts: 2094
  • Country: hu
  • OS:
  • Windows XP Windows XP
  • Browser:
  • Chrome 31.0.1650.63 Chrome 31.0.1650.63
    • View Profile
    • http://povi.fw.hu
Re: HiSoft Pascal
« Reply #159 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;
*** Speicherplatz zu klein

Offline Lacika

  • EP addict
  • *
  • Posts: 3049
  • Country: hu
  • OS:
  • Windows XP Windows XP
  • Browser:
  • Firefox 25.0 Firefox 25.0
    • View Profile
    • http://www.ep128.hu
Re: HiSoft Pascal
« Reply #160 on: 2013.December.17. 00:39:38 »
Quote from: Povi
végül ez lett a pixelrajzoló rutin
Ez hova rajzol (melyik csatornára)?
« Last Edit: 2013.December.17. 10:18:58 by szipucsu, Reason: A hosszú idézet az előző hozzászólásból felesleges. »

Offline Povi

  • EP addict
  • *
  • Posts: 2094
  • Country: hu
  • OS:
  • Windows XP Windows XP
  • Browser:
  • Firefox 25.0 Firefox 25.0
    • View Profile
    • http://povi.fw.hu
Re: HiSoft Pascal
« Reply #161 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 (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 :-)
*** Speicherplatz zu klein

Offline Povi

  • EP addict
  • *
  • Posts: 2094
  • Country: hu
  • OS:
  • Windows XP Windows XP
  • Browser:
  • Firefox 25.0 Firefox 25.0
    • View Profile
    • http://povi.fw.hu
Re: HiSoft Pascal
« Reply #162 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... :-)
*** Speicherplatz zu klein

Offline Zozosoft

  • EP addict
  • *
  • Posts: 14023
  • Country: hu
  • OS:
  • Windows XP Windows XP
  • Browser:
  • Firefox 25.0 Firefox 25.0
    • View Profile
    • http://enterprise.iko.hu/
Re: HiSoft Pascal
« Reply #163 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ő :-)

Offline Povi

  • EP addict
  • *
  • Posts: 2094
  • Country: hu
  • OS:
  • Windows XP Windows XP
  • Browser:
  • Firefox 25.0 Firefox 25.0
    • View Profile
    • http://povi.fw.hu
Re: HiSoft Pascal
« Reply #164 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 :-)
*** Speicherplatz zu klein