Welcome, Guest. Please login or register.


Author Topic: Enterprise C Compiler PC-re (Read 34108 times)

Offline lgb

  • EP addict
  • *
  • Posts: 3563
  • Country: hu
  • æðsta yfirmaður
    • http://lgb.hu/
Re: Enterprise C Compiler PC-re
« Reply #30 on: 2016.April.22. 12:38:20 »
A PC-n EP-re C fordítás néhány hónappal korábban itt is téma volt, ahol található néhány egyszerű példa program SDCC-vel és z88dk-val fordítva (az előbbihez kellenek még az ezek a file-ok is), illetve a két fordítóval generált kód összehasonlítása.

Ja koszi, emlekszem, eszembe is jutott amugy :)

Offline DrPrery

  • EP user
  • *
  • Posts: 264
  • Country: hu
Re: Enterprise C Compiler PC-re
« Reply #31 on: 2016.April.22. 15:18:16 »
Ha már így belementünk, előástam életem első, és egyetlen C programját :-) 20 éve követtem el.
Annó a Kandó első számtek órán elmondták, hogy mit várnak el év végére, második órán beadtam ezt, meg is volt az év végi 5-ös, többet nem is kellett bemennem az órára :ds_icon_cheesygrin:

DrPrery-nek ismerős lehet, hogy újra elsütöttem a hírhedt programozás érettségink feladatát :-)

Ne is emlegesd, az eszem megállt, hogy egy ilyen alapvető dolgot hogy tudtam elszúrni... :mrgreen:

Ezért kellett a Múzeum-körútig vagy hová mászkálni, hogy egy nyomorult seek-en megbukjon az egész... :mrgreen:






Offline lgb

  • EP addict
  • *
  • Posts: 3563
  • Country: hu
  • æðsta yfirmaður
    • http://lgb.hu/
Re: Enterprise C Compiler PC-re
« Reply #32 on: 2016.April.22. 15:20:12 »
Nezegettem a Z88DK-t is, hat erdekes. Foleg a tobbszor emlitett SDCC de a Z88DK libjeivel torteno kombinacio, ami a benchmark-ok szerint - ha jol neztem - altalaban a "nyero" megoldas ... Vegulis, nem is tudom, hogy erdemes-e ebbe sok energiat olni, a Z88DK is egesz jo, ugy ahogy van :)

Offline lgb

  • EP addict
  • *
  • Posts: 3563
  • Country: hu
  • æðsta yfirmaður
    • http://lgb.hu/
Re: Enterprise C Compiler PC-re
« Reply #33 on: 2016.April.22. 20:16:46 »
Na, ahogy neztem z88dk oldalat, eleg felesleges nekem ezen gorcsolni! Ugy tunik, hogy z80dk mar megcsinalta azt is, hogy az sdcc-t tudja hasznalni C compilernek automatice, _de_ a sajat lib-jeivel, ami ugye van egy csomo gepre (sdcc-nek z80-ra csak default cucc van semmi gep specifikus barmire is!), es eleg sok dolog tamogatva van is ("new lib", bar disk I/O nincs, de eleg sok mas akad rengeteg Z80 alapu gepre ...).

Offline Povi

  • EP addict
  • *
  • Posts: 2296
  • Country: hu
    • http://povi.fw.hu
Re: Enterprise C Compiler PC-re
« Reply #34 on: 2016.April.29. 18:02:51 »
:) na ez megint olyan, hogy az okosok azt mondjak, hogy mindig irjal szep { ... } blokkot, ugyanis:

Na ja, nálunk is a cégnél van kötelező kódolási stilus, ha azt irom, hogy:

Code: [Select]
if (valami) return;
akkor szépen szól a statikus kódelemző, hogy miért nincs az if után kapcsos zárójel... :evil:

Amit valahol értek, hogy igy könnyebben karbantartható a kód, ha xy előveszi 3 évvel később...

de pl. ilyenért is szól:

Code: [Select]
if (++valtozo == valami) ...
hogy ne vonjak össze dolgokat
növeljem csak külön a változóm értékét, és utána csináljak if-es vizsgálatot...
*** Speicherplatz zu klein

Offline lgb

  • EP addict
  • *
  • Posts: 3563
  • Country: hu
  • æðsta yfirmaður
    • http://lgb.hu/
Re: Enterprise C Compiler PC-re
« Reply #35 on: 2016.April.29. 22:55:37 »
Code: [Select]
if (++valtozo == valami) ...
hogy ne vonjak össze dolgokat
növeljem csak külön a változóm értékét, és utána csináljak if-es vizsgálatot...

Ez utobbi tenyleg hulyseg, mert akkor ez kvazi kizarja a -- es ++ operatorokot, hacsak nem magaban hasznalod pl hogy a++; oszt csok, de ugye a lenyege pont az lenne, hogy az --a es a-- tok ugyanaz, _ha_ nincs felhasznalva mint kifejezes erteke is. Akkor meg ha nincs, kizarod a C egy reszet amiert ez a ket kulon pre/post forma van :) Szoval ezt nem tudom ertekelni, mint normalis szabaly, de gonolom akkor te sem ezek szerint :) Akkor ez mar nem C, hanem simplified C :)

Btw, milyen ido van ott, tudod hol? :)

Offline ergoGnomik

  • EP addict
  • *
  • Posts: 1291
  • Country: hu
  • Stray cat from Commodore alley
Re: Enterprise C Compiler PC-re
« Reply #36 on: 2016.April.30. 10:33:21 »
OFF

de pl. ilyenért is szól:

Code: [Select]
if (++valtozo == valami) ...
hogy ne vonjak össze dolgokat
növeljem csak külön a változóm értékét, és utána csináljak if-es vizsgálatot...

Egyáltalán nem biztos hogy ez ostobaság, illetve létezik olyan szempont amiből igenis van értelme. Pontosan azért hogy automatizált eszközöket használhass a kódminőség ellenőrzésére, érdemes kompromisszumokat kötni. Nem kellően fejlett - vagy esetleg semmilyen - kódelemző jó eséllyel nem fogja tudni eldönteni az idézett kódrészletből, hogy pontosan mi a szándékod, illetve hogy azt nem sikerült-e félreimplementálnod.

Egyébként pont az ilyen jellegű megoldásokkal tudod esetleg utólag őrületbe kergetni magadat, amikor karbantartanod kell valami régi kódodat valamiféle misztikusabb hiba miatt. Már rég nem emlékszel hogy milyen "optimalizálást" miért vetettél be jogosan, kiszúrsz ilyesféle pontokat a forrásban, azután rengeteg időt elpazarolsz arra hogy újra bebizonyítsd magadnak az eredeti megoldásod helyességét.

És én afelől sem vagyok teljesen meggyőződve, hogy ténylegesen egyenértékű a prefix és postfix növelő vagy csökkentő operátor. Tudtommal - csak fél füllel hallottam egyszer - még ha egy kifejezésben egyedül egy csak ez a művelet van is leírva, a fordító prefix operátorra eltérő kódot generál a postfixtől.

/OFF

Offline Povi

  • EP addict
  • *
  • Posts: 2296
  • Country: hu
    • http://povi.fw.hu
Re: Enterprise C Compiler PC-re
« Reply #37 on: 2017.September.01. 08:45:10 »
Van valami összefoglaló írás, hogy hogyan lehet az SDCC-t használni EP-ra? Ha jól látom, a xorgame is azzal lett fordítva...
*** Speicherplatz zu klein

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: Enterprise C Compiler PC-re
« Reply #38 on: 2017.September.01. 13:09:01 »
Ebben a témában vannak egyszerű példák az SDCC és a z88dk használatára, bár ezek már régiek, az ihx2ep program aktuális verzióját a Xorgame és a midiplay forráskódja tartalmazza, SDCC-ből pedig érdemes a snapshot verziót letölteni (én az sdcc-20170720-9960-at használom, de vannak újabbak is).

SDCC-s fordításnál elsősorban az jelent nehézséget, hogy nem tud közvetlenül EP formátumú binárist készíteni, ezért van szükség külön programra (például az ihx2ep-re, amit én írtam) és assembly nyelvű betöltőre, ami elvégzi a szükséges EP specifikus inicializálást (pl. memória foglalása és belapozása) és elindítja a C főprogramot. Ezt a loader.s tartalmazza, ami sjasm 0.39g6 verzióval fordítható. Ezen kívül az SDCC C runtime támogatása is problémás lehet, természetesen nem ismeri az EP-t vagy az EXOS-t, a karakter kiírást külön meg kell valósítani RST rutinnal, és maga a CRT C nyelven íródott, ezért nagy méretű és lassú kódot eredményez például a float típus használata.

Egy egyszerű működő példa, amit Windowson a compile.bat fordít:
[ Guests cannot view attachments ]

Az exos.c és eplib.c az EXOS rutinok használatát teszi lehetővé, a főprogram (main.c) ezeknek a segítségével megnyit egy 256 színű video lapot, feltölti véletlenszerű pixelekkel, majd billentyűre vár és kilép. A loader.s egy minimális betöltőt tartalmaz, amely a program számára lehetővé teszi a 64K címterület nagy részének a használatát, de nem nyit meg automatikusan EXOS csatornát.
« Last Edit: 2017.September.01. 13:15:34 by IstvanV »

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: Enterprise C Compiler PC-re
« Reply #39 on: 2017.September.02. 11:25:41 »
Egyébként ha az SDCC használata túl bonyolult, akkor érdemesebb lehet helyette a z88dk-val próbálkozni, ez tud közvetlenül (csak egy paranccsal) EP binárist fordítani, EXOS 5 fejléccel és IS-DOS-ra is. Bár amikor legutóbb néztem, az előbbi bugos volt és nem egészen EXOS kompatibilis, de ez egyszerűen javítható egy .asm file szerkesztésével. A z88dk hátránya még, hogy kevésbé hatékonyan optimalizál és talán a C nyelv támogatása is hiányosabb. Viszont gyorsabbak a float rutinok és még pontosabbak is. Lehetőség van még arra is, hogy SDCC-vel optimalizáljon, a -compiler sdcc paraméter megadásával, ilyenkor azonban saját (beépített és módosított) SDCC verziót használ.

Szerk.: kipróbáltam a -compiler sdcc módot az itt található teszt programmal, így változik a sebesség:

sdcc: 1.519 másodperc
zcc: 4.665 másodperc
zcc -compiler sdcc: 1.795 másodperc

Az utóbbi még mindig valamivel lassabb a csak SDCC-vel fordított változatnál, de az eltérés nem nagy.
« Last Edit: 2017.September.02. 14:49:00 by IstvanV »

Offline Povi

  • EP addict
  • *
  • Posts: 2296
  • Country: hu
    • http://povi.fw.hu
Re: Enterprise C Compiler PC-re
« Reply #40 on: 2017.September.04. 10:37:39 »
köszi!
*** Speicherplatz zu klein

Offline Tomato77

  • EP user
  • *
  • Posts: 397
  • Country: hu
    • Támogató Támogató
Re: Enterprise C Compiler PC-re
« Reply #41 on: 2018.March.14. 11:25:51 »
Elkezdtem ismerkedni a C-vel, mert úgy látszik, elértem a Pascal korlátait. (A 13K-s forrásból 19K-s .com-ot csinált, legalábbis ez volt az utolsó, ami lefordult. Ennél nagyobb programnál már a Translate-nél is lefagyott, hiába kísérletezgettem az Alter paranccsal. Gondolom felülírt valamit.)

Szóval az "Enterprise" mappában lévő sndtest.c programot szerettem volna lefordítani, hogy lássam, hogyan működik, de már az elején elakadtam. Letöltöttem a Z88DK v1.99B verzióját, ami egy nagy .zip, ha jól látom, nem kell telepíteni. A példaprogramban van egy parancs, amivel lehetne fordítani (zcc +enterprise -create-app -lm sndtest.c), de szerintem kell neki más is. Vannak .sh kiterjesztésű fájlok, amik mintha batch fájlok lennének és felépítenék a környezetet, hogy megtaláljon mindent (csak feltételezem), de sehogy se sikerült rávenni, hogy fordítson. A README-ben sok infó van verziótörténettel, kapcsolókkal, de kezdőként nem jöttem rá, hogyan lehetne fordítani. Használja valaki ezt a toolt?
Kotasoft

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: Enterprise C Compiler PC-re
« Reply #42 on: 2018.March.14. 14:41:10 »
Nekem működik, talán az lehet a probléma, ha a PATH nem tartalmazza a C:\z88dk\bin-t, vagy ahol a fordító telepítve van. Ezzel a paranccsal lefordult:

zcc.exe +enterprise -create-app sndtest.c -o sndtest.com -lm

Azonban az sndtest.com valójában fejléc nélküli file lesz, helyette az sndtest.app futtatható. Lehetőség van még SDCC használatára is, ami jobban optimalizál, a -compiler sdcc engedélyezi. Hátránya, hogy az enterprise.h ilyenkor fordítási hibát eredményez.

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: Enterprise C Compiler PC-re
« Reply #43 on: 2018.March.14. 17:47:30 »
Lefordított példa programok:
[ Guests cannot view attachments ]
[ Guests cannot view attachments ]

Úgy látom egyébként, hogy az alapértelmezett lib\enterprise_crt0.asm csak legfeljebb ~31.5 KB méretű (kód + adat + verem) programmal működik, de ez a forrás file szerkeszthető.
« Last Edit: 2018.March.14. 18:06:23 by IstvanV »

Offline Tomato77

  • EP user
  • *
  • Posts: 397
  • Country: hu
    • Támogató Támogató
Re: Enterprise C Compiler PC-re
« Reply #44 on: 2018.March.14. 23:48:04 »
Sikerült a fordítás, köszönöm! Valószínűleg a path volt a gond és az, hogy nem a C: gyökérbe másoltam a programot, hanem más mappába.
A 31.5 KB szerintem elég lesz. Az majdnem két szegmens, és egy lapot úgyis szabadon kell hagyni, hogy be tudjam lapozni a videomemória szegmenseit. Elkezdek vele kísérletezni, ismerkedni és átírni a Pascal programot C-re.
Jó, hogy írtad, hogy az .app fájl a futtatható, fejléces változat. Megkíméltél egy őrjöngéstől, mire rájöttem volna, hogy nem a .com-ot kell indítani. :) Köszönöm, István!
Kotasoft