Enterprise Forever

:HUN => Programozás => Topic started by: Gep on 2007.March.06. 18:25:45

Title: Enterprise C Compiler PC-re
Post by: Gep on 2007.March.06. 18:25:45
Sziasztok!

 Én még új vagy a fórumon és lehet sikerül is mindjárt egy jó nagy vadbaromságot kérdeznem. Enterprise-os koromban sajnos csak a BASIC-hez értettem, azóta viszont elég komolyan foglalkozok programozással és most a fórum láttán el kapott a nosztalgiázhatnék. Szívesen buherálgatnám a régi enterprisom. A kérdésem a következő lenne létezik-e valami C compiler PC-re ami kimondotton enterprise buheráláshoz készült mert az látom, hogy Z80-as compilerek vannak dögivel. Ha más nem marad az assembler :) Szívesen fogadom az ötleteket más fejlesztői segédletekhez is :) (lehetőleg PC-n futókéra)

Title: Re: Enterprise C Compiler PC-re
Post by: Zozosoft on 2007.March.06. 20:05:48
Nem hülyeség a kérdés, de sajnos szerintem ilyen (még) nem létezik.
Nem tudom milyen Z80-as compilerek vannak, ki lehetne-e hegyezni egy ilyet EP-re...
Title: Re: Enterprise C Compiler PC-re
Post by: Gep on 2007.March.06. 20:19:38
Z80-as compiler rengeteg van a neten, még én se használtam egyiket se így én se tudok sok okosat mondani, csak gondolom egy pc-n lényegesen könnyebb lenne a fejlesztés mint az ep-n főleg, hogy az én gépem teljesen eredeti és azt a billentyűzetet elég körülményes kezelni :)
Title: Re: Enterprise C Compiler PC-re
Post by: szipucsu on 2007.March.07. 21:41:51
Talán nem korszakalkotó az ötletem, de Enterprise helyett a PC-s Enterprise emulátor használata sem utolsó. :D A kezelése bizonyos szempontból egyszerûbb, meg az órajelet is lehet növelni, hogy gyorsabb legyen.
(Persze a jó öreg gép is nagyon jó, de erre a célra talán az emulátor jobb, már ami halvány lövésem van ahhoz, hogy mire is akarod használni.)
Egyébként én is üdvözöllek a fórumban, örülök, hogy egyre többen kerülnek elõ EP-sek.  :smt041
Title: Enterprise C Compiler EP-re
Post by: Zozosoft on 2007.March.08. 12:12:36
Egyébként érdekes lenne egy EP-n futó C compiler is. Ha jól tudom most csak egy IS-DOS alatt futó Hisoft C van 1985-bõl, ami biztos  nem a technika csúcsa :-)
Van valami nyíltforráskódú Z80-on futó compiler a világban?
Title: Re: Enterprise C Compiler PC-re
Post by: Gep on 2007.March.08. 12:15:20
Igen én is egyenlőre emulátorozom :) Mivel el kerültem otthonról a jó kis ep-m meg nem tudtam magammal vinni helyhiány végett :) De múlt héten rábukanva a fórumra mikor haza látogattam szüleimhez elő kaptam a jó öreg masinát és beélesítettem :) Sajnos a magnóm már nem műkszik pedig emlékezetem szerint azzal se volt gond :) Viszont fater valahonnan szerzett még egy gépet :) Így most kettő van :) Vissza térve a C fordítos ötlethez sajnos hagytam magam elkényelmesedni a pc-k világában és picit nehezen szokok vissza a fejletlenebb fejlesztői eszközökhöz :) de hát ha nincs más :)

Egy nem pont ide vágó kérdés olyasmi cuccok létezik már kifejlesztve, ami mondjuk egy tetszőleges pc formátumú képet képes olyan byte formátumba menteni amit bedobva az ep videó memóriájába máris a megfelelő képet kapjuk (esetleg elő is állítja hozzá az optimális palettát) ? Mert ha igen akkor nem görcsölök vele :)

Üdv.

u.i.: Köszi a szívélyes fogadtatást :)


Na látod ez jó kérdés azt láttam, hogy létezik rengeteg Z80-as compiler de, hogy van e köztük nyílt forráskódú nem tudom, esetleg körül nézek a sourceforge-on :)
Title: Re: Enterprise C Compiler PC-re
Post by: Gep on 2007.March.08. 12:18:15
Esetleg ezzel lehetne valamit kezdeni: http://sdcc.sourceforge.net/
Title: Re: Enterprise C Compiler PC-re
Post by: Amadeo on 2007.April.16. 15:04:09
Hali!

Néhány érdekes compiler link CP/M-re:
http://www.cpm.z80.de/binary.html#languages
http://www.cpm.z80.de/develop.htm

Üdv:
Amadeo
Title: Re: Enterprise C Compiler PC-re
Post by: Z80System on 2007.October.27. 00:55:50

Sziasztok,
mint mar emlitettem szeretnek irkalni EP- re kis demokat, ennek egy reszfeladatakent szetneztem a neten z80- as C forditassal kapcsolatban, es talaltam, letoltottem illetve be is uzemeltem egy C fortitot. SDCC -nek hivjak, tud C- t forditani inline assembly- vel, C standard libje is van, de nyilvan EP- re az kehes lesz... De nem baj, C es inline assembly kombo szerintem tok eleg lesz.

Tehat akkor aki C- ben akar EP- re programozni a kovetkezot kell tegye:

- Letolti ep128emu -t, SDCC- t es VFD- t.
- Virtualis drive- ba(memoria uzemmodban, hogy ne lock- oljak egymasnak a disk image- et az emu es a fejlesztoi eszkozok/windows) kepezi a leforditott binaris kodot az SDCC- vel.
- Emulatorban beallitja hogy lassa emu a virtualis drive- ot.
- Pld. asmonban 'R'- rel betolti a leforditott binaris kodot, es 'G'- vel futtatja.
- Orul a demojanak... :)


Title: Re: Enterprise C Compiler PC-re
Post by: lgb on 2016.April.21. 11:39:13
Raneztem megint az sdcc-re, amivel egyszer mar foglalkoztam ... Haaat. Azert engem tovabbra is zavar, hogy adott esetben haromszoros a memoriaigenye a normalisnal :-P Valoszinu az MCU kotodese miatt van (foleg PIC-re nyomjak erosen, de ugye Z80 kodot is tud eloallitani). De pl ha inicializalt valtozo van (nem const, de vmi ertek van adva neki) az haromszor lesz meg :) Eloszor is valamiert  a CODE szegmensben is megvan ... Aztan megvan az INITIALIZER nevuben, es van fenntartott helye az INITIALIZED-ben is, ahova LDIR-el masolja at a program elejen a default z80 crt eseten legalabbis. Aranyos ... Mondjuk spec, ezt lehet, hogy lehet workaround-olni a vegen nemi forras atalakitassal automatizalva is. Csak akkor megint oda jutottunk, amirol mar volt egy kisebb "flame" (amikor anno egyszer ezzel mar probalkoztam ...), hogy elegge sdcc verzio specifikus lesz, esetleg csak az sdcc adott verziojaval fog mukodni, hiszen ilyen sdcc internal dolgok alapjan csinalok vmit, ami elvileg barmikor valtozhat, es nem szabadna tole fuggni egyaltalan ....
Title: Re: Enterprise C Compiler PC-re
Post by: lgb on 2016.April.21. 15:34:22
Annyira nem is rossz a cucc, erre a szornyusegre:

Code: C
  1. __sfr __at(0x81) border_colour;
  2.  
  3. typedef unsigned char ubyte;
  4.  
  5. void main (void) {
  6.   ubyte k;
  7.   for(;;)
  8.     border_colour = k++;
  9. }

ezt generalta asm-bol nezve:

Code: ZiLOG Z80 Assembler
  1. _border_colour = 0x81
  2.  
  3. 00102$:
  4.         out     (_border_colour),a
  5.         inc     a
  6.         jr      00102$
Title: Re: Enterprise C Compiler PC-re
Post by: lgb on 2016.April.21. 17:48:13
Lehet, nem sokan erdeklodnek a fura elfoglaltsagaim irant :) de mar legalabb van putchar() meg ra epulo cuccok (pl printf) igy persze mukodnek. Mondjuk ami anno problemam volt, most is az, hogy inicializalt globalis valtozokat nem erdemes hasznalni, mert sdcc eleg fura dolgot muvel akkor, az a haromszoros memoriaigeny :-P Most elkezdtem az sdcc z80.lib-jet atirni, ami egy generic cucc, az EP specifikus reszeket, meg pl az exos hivasokat elerhetove tenni C-bol, stb ... Valamire biztos jo lesz, ha masnak nem, hat nekem :-P
Title: Re: Enterprise C Compiler PC-re
Post by: szipucsu on 2016.April.21. 19:34:13
Lehet, nem sokan erdeklodnek a fura elfoglaltsagaim irant :)
Már gondoltam, megkérdezem, te is szabadságot vettél-e ki, hogy egész nap ezt fejleszted, ahogy én néha a Bombert. :D
Title: Re: Enterprise C Compiler PC-re
Post by: Zozosoft on 2016.April.21. 19:36:05
Annyira nem is rossz a cucc, erre a szornyusegre:
Ezt muszáj ilyen szörnyűn írni? :oops:
Title: Re: Enterprise C Compiler PC-re
Post by: lgb on 2016.April.21. 19:39:43
Ezt muszáj ilyen szörnyűn írni? :oops:

Igen :D Majd a szep ep128.h header file-ban lesz definicio ezekre, es nem kell kirni szegeny usernek ezeket, eleg ha a fordito tudja a preprocessor utan  :)
Title: Re: Enterprise C Compiler PC-re
Post by: Zozosoft on 2016.April.21. 19:42:55
Ehhez pl miféle ep128 header kell?
Code: [Select]
for(;;)
Title: Re: Enterprise C Compiler PC-re
Post by: lgb on 2016.April.21. 19:51:11
Ehhez pl miféle ep128 header kell?

Hat ep128.h :) marmint #include :)

Amiben vannak szep kesz definiciok, pl hogy eleg legyen mondjuk ez:

nick_border_color = 2;
page3 = 0xFF;  /* 0xFF szegmens a harmadik lapra belapozva */

Es ne kelljen I/O port definiokat irni az sdcc specifikus __sfr __at() konstrukciokkal manualisan :) Persze a fentiek peldak voltak csak, nem biztos, hogy ez az optimalis megoldas, csak mondom igy hasrautesre.

Jelenleg amugy annyi, hogy sima printf() is mukodik, de ugye ehhez kell videolapot stb nyitni. Erre irtam az ep128.lib-be :) megfelelo rutint de magatol nem rakja be (mert ha nem kell feleslegesen foglalja a helyet), viszont a C programban csak eleg, ha ennyit mond az ember, hogy:

exos_init_stdio();

Es akkor onnantol hasznalhato a printf() is, marmint meg is jelenik az eredmeny :) Na persze ez is egy koztes allapot a fejlesztesben, mert ugye nem artana, ha meg lehetne mondani, hogy milyen videomodot akar az ember gyereke, meg ilyen aprosagok.

Nilvan, arra is kell alternativ megoldas jobb esetben, hogy kozvetlen hw eleres is egyszeru legyen, erre pelda az I/O port hasznalat "kenyelmesse tetele".

Az meg egy tok masik irany, es elgondolkodtato, hogy mennyire van igeny "standard C" dolgokra. Gonolok itt arra, hogy pl lehet egy exos_open_channel() ami valojaban azt hivja, amit a neve jelent ugye, am C standard szerint ugye mondjuk fopen() kellene, az viszont szemantikailag sokkal absztraktabb, es kell koze nemi kod "athidalni" a kulonbsegeket. Az elonye viszont az, hogy akkor kvazi ugyanazt a programot le lehet forditani Linux, Windows, de akar EP ala is, ha C forras :) Na jo, persze nem *akarmit* hisz eleve az sdcc int tipusa 16 bites, mig a legtobb mai OS-en 32 bites a megszokott, de a C standardnak amugy megfelel, semmi sem mondja ki, hogy nem lehet 16 bites es 32 kell .... Na, stb :)
Title: Re: Enterprise C Compiler PC-re
Post by: Zozosoft on 2016.April.21. 19:52:57
Szerkesztettem, hogy ne szmájli legyen belőle...

Szóval mi a búbánat az a for két pontosvesszővel?
Title: Re: Enterprise C Compiler PC-re
Post by: ergoGnomik on 2016.April.21. 19:56:18
Szóval mi a búbánat az a for két pontosvesszővel?
Végtelen ciklus. Én a while (1) változatot szoktam használni.
Title: Re: Enterprise C Compiler PC-re
Post by: lgb on 2016.April.21. 19:59:39
Szerkesztettem, hogy ne szmájli legyen belőle...

Szóval mi a búbánat az a for két pontosvesszővel?

Amit elobb forumtarsunk is irt ;) A for(ez;az;amaz) barmelyik resze elhagyhato adott esetben :) Pl:

for(a = 0;a < 10; a++) {
...
}

de:

for(a=0;a<10;) {
  a++;
}

a = 0;
for (;a<10;) {
  a++;
}

stb ...
Title: Re: Enterprise C Compiler PC-re
Post by: lgb on 2016.April.21. 20:10:37
C-ben amugy van par fura dolog, amin meg is lehet lepodni, pl:

https://en.wikipedia.org/wiki/Duff's_device

Lasd harmadik pelda :) Ahol elso ranezesre ertelmetlennek tuno switch/case es do/while "keveredik" egymasra :-P Na persze attol, hogy ez elvileg szabalyos amugy, nem kotelezo elni ilyen trukkokkel :)
Title: Re: Enterprise C Compiler PC-re
Post by: Zozosoft on 2016.April.21. 20:13:07
Akkor már csak azt nem értem, hogy miért nincs utána kapcsos zárójeles rész :oops: Azaz honnan tudja mi van a ciklusban? Ha nincs kapcsos bigyó, akkor egy utasítás?
Title: Re: Enterprise C Compiler PC-re
Post by: Zozosoft on 2016.April.21. 20:19:24
Ahol elso ranezesre ertelmetlennek tuno switch/case es do/while "keveredik" egymasra :-P
Van ember aki érti ezt? :oops: Azt értem, hogy milyen végeredmény vár el. De azt nem, hogy hogyan facsarja ki ezt a fordítóból, és az miért nem akad ki...
Title: Re: Enterprise C Compiler PC-re
Post by: lgb on 2016.April.21. 20:30:17
Akkor már csak azt nem értem, hogy miért nincs utána kapcsos zárójeles rész :oops: Azaz honnan tudja mi van a ciklusban? Ha nincs kapcsos bigyó, akkor egy utasítás?

:) na ez megint olyan, hogy az okosok azt mondjak, hogy mindig irjal szep { ... } blokkot, ugyanis:

for (.....)
  csak_egy_dolgot_akarok();

Mivel szepen bentebb is kezded (identalva szepen, ami persze nem kotelezo, ez nem Python ...), el lehet kovetni ezt a hibat:

for (.....)
  csak_egy_dolgot_akarok();
  ja_meg_meg_ezt_is();

Na itt baj van, mert akkor valojaban a for ciklushoz csak az elso tartozik. Ezert - elvileg - javasolt, mindig szep blokkba irni, akkor is, ha csak egy cucc van a for mogott pl (vagy if mogott, akarmi hasonlo pelda), akkor nehezebb elrontani :) Ugyanis ez is valid pl:

for (....) ;

Itt egyszeruen a ciklus "mag" ures, mivel egy ";" van ott :D Szoval ez:

for (...);
  csak_egy_dolgot_akarok();

Nem lesz jo, mert a masodik sor mar nem a for-hoz tartozik igy. Na, ezzel meg lehet remiteni egy rakas embert, ezert mondjak, hogy nem is feltetlen celszeru sporolni egy vacak { } jel parral, ha ugy kozerthetobb :)

Code: [Select]
for(;;);
Ez meg a vegso megoldas, a vegtelen ciklus, ami nem is csinal semmi kulonoset kozben raadasul :-P
Title: Re: Enterprise C Compiler PC-re
Post by: Zozosoft on 2016.April.21. 20:33:00
És így nem lehet?
Code: [Select]
for(;;border_colour = k++);
Title: Re: Enterprise C Compiler PC-re
Post by: lgb on 2016.April.21. 20:38:15
És így nem lehet?
Code: [Select]
for(;;border_colour = k++);

:) Latom kezded erteni. Szamtalan lehetoseg van :-) Igazabol stilus kerdese. Az mas kerdes, hogy lehet szandekosan olyat irni, amit mas nehezen fog megerteni, vagy nehezebben :) A Duff-peldabol okulva, bar en ertem miert mukodik az, megse csinalnek olyat :) Sot, ha mar itt tartunk, tobb lepesben:

Code: [Select]
for(;;)
  border_colour = k, k++;

Vagy:

Code: [Select]
for(;;border_colour = k, k++);
Ennek persze sok ertelme kevesbe van, mert "egybevonva" rovidebb, csak a vesszo szerepet is lehetne mutogatni - ez mas peldaban hasznosabb lenne, ahol tenyleg tobb dolgot kell csinalni es megis be akarjuk zsufolni vhova blokk kepzese nelkul :)

Title: Re: Enterprise C Compiler PC-re
Post by: Zozosoft on 2016.April.21. 20:41:01
Az mas kerdes, hogy lehet szandekosan olyat irni, amit mas nehezen fog megerteni, vagy nehezebben :)
Van egy olyan érzésem, hogy a C programozók sportot űznek ebből :oops:
Title: Re: Enterprise C Compiler PC-re
Post by: Zozosoft on 2016.April.21. 20:47:52
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 :-)
Title: Re: Enterprise C Compiler PC-re
Post by: lgb on 2016.April.21. 20:56:55
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 :-)

:) :) Na. Ha majd az ep128.lib-el le lehet foridtani EP ala is, akkor jo lesz :-P Jo nyilvan a geninterrupt() meg hasonlot nehez lesz belole, de az mas kerdes :) Azt majd az entermice_...() fuggvenyhivasokra :)

Ja, amugy sdcc-vel asm is teheto C programba kozvetlenul, az meg a masik, bar nyilvan nem egy nagy ujdonsag, legtobb C fordito tamogatja, bar ez nem standard, szoval mindegyik maskepp :)

Ami meg eszembe jutott az az, hogy ha valaki irna egy IS-BASIC -> C forras konvertert, es utana azt le lehet forditani, akkor .... az erdekes lenne :)
Title: Re: Enterprise C Compiler PC-re
Post by: IstvanV on 2016.April.22. 12:33:54
A PC-n EP-re C fordítás néhány hónappal korábban itt (https://enterpriseforever.com/programozas/c-origramozas-aztec-c-hisoft-c/msg51768/#msg51768) 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 (https://enterpriseforever.com/programozas/c-origramozas-aztec-c-hisoft-c/msg51763/#msg51763) a file-ok is), illetve a két fordítóval generált kód összehasonlítása.
Title: Re: Enterprise C Compiler PC-re
Post by: lgb on 2016.April.22. 12:38:20
A PC-n EP-re C fordítás néhány hónappal korábban itt (https://enterpriseforever.com/programozas/c-origramozas-aztec-c-hisoft-c/msg51768/#msg51768) 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 (https://enterpriseforever.com/programozas/c-origramozas-aztec-c-hisoft-c/msg51763/#msg51763) 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 :)
Title: Re: Enterprise C Compiler PC-re
Post by: DrPrery 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:





Title: Re: Enterprise C Compiler PC-re
Post by: lgb 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 :)
Title: Re: Enterprise C Compiler PC-re
Post by: lgb 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 ...).
Title: Re: Enterprise C Compiler PC-re
Post by: Povi 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...
Title: Re: Enterprise C Compiler PC-re
Post by: lgb 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? :)
Title: Re: Enterprise C Compiler PC-re
Post by: ergoGnomik 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
Title: Re: Enterprise C Compiler PC-re
Post by: Povi 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...
Title: Re: Enterprise C Compiler PC-re
Post by: IstvanV on 2017.September.01. 13:09:01
Ebben a témában (https://enterpriseforever.com/programozas/c-origramozas-aztec-c-hisoft-c/) 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 (https://sourceforge.net/projects/sdcc/files/snapshot_builds/x86_64-w64-mingw32-setup/)-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:
[attachurl=1]

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.
Title: Re: Enterprise C Compiler PC-re
Post by: IstvanV on 2017.September.02. 11:25:41
Egyébként ha az SDCC használata túl bonyolult, akkor érdemesebb lehet helyette a z88dk (https://www.z88dk.org/)-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 (https://enterpriseforever.com/programozas/c-origramozas-aztec-c-hisoft-c/msg52149/#msg52149) 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.
Title: Re: Enterprise C Compiler PC-re
Post by: Povi on 2017.September.04. 10:37:39
köszi!
Title: Re: Enterprise C Compiler PC-re
Post by: Tomato77 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?
Title: Re: Enterprise C Compiler PC-re
Post by: IstvanV 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.
Title: Re: Enterprise C Compiler PC-re
Post by: IstvanV on 2018.March.14. 17:47:30
Lefordított példa programok:
[attachurl=1]
[attachurl=2]

Ú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ő.
Title: Re: Enterprise C Compiler PC-re
Post by: Tomato77 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!
Title: Re: Enterprise C Compiler PC-re
Post by: IstvanV on 2018.March.16. 15:42:13
Nem tudom, hasznos-e, mivel z88dk helyett SDCC-t használ, de a régebben feltöltött epiview.com (https://enterpriseforever.com/video/ep128pal-kepkonvertalo/msg68173/#msg68173) programnak ez a forráskódja:

[attachurl=1]

[attachurl=2]
[attachurl=3]
[attachurl=4]
[attachurl=5]

[attachurl=6]
[attachurl=7]
[attachurl=8]
Title: Re: Enterprise C Compiler PC-re
Post by: IstvanV on 2018.March.16. 16:45:26
z88dk változat, jelenleg néhány korlátozással (fix "IMAGE.EPZ" file név, nincs hibakezelés a file olvasásnál):
[attachurl=1]
Title: Re: Enterprise C Compiler PC-re
Post by: Tomato77 on 2018.March.17. 11:00:58
Mindenképp hasznosak ezek a források. C-t utoljára a suliban láttam, vissza kell rázódni, és az Enterprise specifikus részeket is meg lehet bennük nézni. Nagy segítség, köszönöm!
Title: Re: Enterprise C Compiler PC-re
Post by: Tomato77 on 2018.March.26. 20:51:33
Miért nem működik az alábbi rutin? Arra tippelek, hogy rosszul próbálom kivenni/visszatenni a stackből/be a paramétereket. Hogyan lehet ezt korrekten megcsinálni? Nézegetem a Z88dk forrásait, de nem jövök rá. Köszönöm! Még egy kérdés: 8 bites (unsigned char) változót így bele lehet tölteni egy 16 bites regiszterbe? Megcsinálja rendesen, vagy  8 bites regisztert kéne megadni? Emiatt nem jó?

#include <stdio.h>

void Set_EXOS_Var(unsigned char Variable, unsigned char Value)
{
  #asm
  pop    BC   ; return address
  pop    HL   ; Variable
  pop    DE   ; Value
  push   DE   ; restore stack
  push   HL
  push   BC
  ld     B,1  ; SET mode
  ld     C,L  ; Variable
  ld     D,E  ; Value
  rst    30H
  defb   16
  #endasm
}

void main()
{     
  printf("Black ");
  while (getk() != 13) {};
  printf("Purple ");
  Set_EXOS_Var(27, 104);
  while (getk() != 13) {};
  printf("White ");
  Set_EXOS_Var(27, 255);
  while (getk() != 13) {};
}
Title: Re: Enterprise C Compiler PC-re
Post by: IstvanV on 2018.March.26. 22:30:53
Fordított a paraméterek sorrendje, tehát BC = visszatérési cím, HL = érték, DE = változó. A Set_EXOS_Var első hívása:

Code: ZiLOG Z80 Assembler
  1.   0259  21 1B 00     LD    HL, 001B
  2.   025C  E5           PUSH  HL
  3.   025D  21 68 00     LD    HL, 0068
  4.   0260  E5           PUSH  HL
  5.   0261  CD 2B 02     CALL  022B
  6.   0264  C1           POP   BC
  7.   0265  C1           POP   BC

Részletesebb leírás itt (https://www.z88dk.org/wiki/doku.php?id=usage:stackframe) található. Ha csak egy paraméter van, akkor az a HL regiszterben is átadható a __FASTCALL__ használatával.
Title: Re: Enterprise C Compiler PC-re
Post by: IstvanV on 2018.March.26. 23:08:43
Még egy lehetőség kisebb optimalizálásra a __CALLEE__, ennek a használatakor a hívott függvénynek kell leemelnie a paramétereket a veremről, tehát megtakarítható a PUSH DE és PUSH HL, illetve visszatérés után sem lesz két POP BC.
Title: Re: Enterprise C Compiler PC-re
Post by: Tomato77 on 2018.March.27. 00:03:44
Műxik, köszi! :) Nem jöttem volna rá.

Bemásolom, hogy itt legyen a jó változat. Talán így elegánsabb, mint kiszedni a veremből és visszatenni. Az első működő assembly rutinom Enterprise-ra. :)

void Set_EXOS_Var(unsigned char Variable, unsigned char Value)
{
  #asm
  ld     HL,2
  add    HL,SP   ; skip over return address on stack
  ld     D,(HL)  ; "Value"
  inc    HL
  inc    HL
  ld     C,(HL)  ; "Variable"
  ld     B,1     ; SET mode
  rst    30H
  defb   16
  #endasm
}
Title: Re: Enterprise C Compiler PC-re
Post by: Tomato77 on 2018.March.27. 16:52:07
Kérdezhetek még? :)

- Jól látom, hogy a Z88dk nem támogatja a több dimenziós tömböket? Pl. egy unsigned char x[10][10]; nem fordul le. Egy 100 elemű egy dimenziós tömbbel kikerülhető, úgyhogy nem okoz nagy gondot, csak kíváncsi vagyok, hogy én bénázok-e.

- Hogyan tudok assembly kódban a C változóihoz hozzáférni, vagy fordítva: C-ben hogyan tudom elérni a CPU regisztereket? (Hasonlóan, mint pl. Pascal-ban az RA, RB, stb. használatával.) Azaz hogyan lehet értéket átadni egymás között, ha egy rövid C kód után assembly sorokra van szükség, de nincs hívott függvény, így a stack-ből nem tudom kinyerni az értékeket? Se a példákban, se a neten nem találtam ilyen példát.

Köszi előre is!
Title: Re: Enterprise C Compiler PC-re
Post by: IstvanV on 2018.March.27. 17:20:29
Bemásolom, hogy itt legyen a jó változat. Talán így elegánsabb, mint kiszedni a veremből és visszatenni. Az első működő assembly rutinom Enterprise-ra. :)

Még tömörebb változat, bár sok jelentősége nincs az EXOS hívás lassúsága miatt:
Code: ZiLOG Z80 Assembler
  1. void __CALLEE__ Set_EXOS_Var(unsigned char Variable, unsigned char Value)
  2. {
  3.   #asm
  4.   pop    HL   ; return address
  5.   pop    DE   ; Value
  6.   pop    BC   ; Variable
  7.   ld     B,1  ; SET mode
  8.   ld     D,E  ; Value
  9.   rst    30H
  10.   defb   16
  11.   JP     (HL)
  12.   #endasm
  13. }

- Jól látom, hogy a Z88dk nem támogatja a több dimenziós tömböket? Pl. egy unsigned char x[10][10]; nem fordul le. Egy 100 elemű egy dimenziós tömbbel kikerülhető, úgyhogy nem okoz nagy gondot, csak kíváncsi vagyok, hogy én bénázok-e.

Valóban nem működik, a wiki (https://www.z88dk.org/wiki/doku.php?id=programming:deficient) említi is korlátozásként. Az SDCC támogatja.

Quote
- Hogyan tudok assembly kódban a C változóihoz hozzáférni, vagy fordítva: C-ben hogyan tudom elérni a CPU regisztereket? (Hasonlóan, mint pl. Pascal-ban az RA, RB, stb. használatával.) Azaz hogyan lehet értéket átadni egymás között, ha egy rövid C kód után assembly sorokra van szükség, de nincs hívott függvény, így a stack-ből nem tudom kinyerni az értékeket? Se a példákban, se a neten nem találtam ilyen példát.

A "kevert" C és assembly kódot (pl. regiszterek használatát C-ben) nem tudom, hogyan lehet megoldani, de a globális C változók és függvények az assembly kódban elérhetők a név elején _ karakterrel, például "unsigned char valtozo" -> LD A, (_valtozo).
Title: Re: Enterprise C Compiler PC-re
Post by: Tomato77 on 2018.March.27. 19:58:53
Kipróbáltam, tényleg működik, el lehet érni a változókat. Nagyon szuper, köszönöm!
Title: Re: Enterprise C Compiler PC-re
Post by: Tomato77 on 2018.March.27. 22:23:12
A Z88dk fordításkor kiírja a szintaktikailag hibás sorok számát. Az assembly kódnál magát a sort is, de a C kódnál nem, ezért pár száz soros forrásban már kicsit nehéz megtalálni a hiányzó pontosvesszőt. Ha beszúrok egy x-et valahová, direkt hibát okozva, be lehet lőni, hogy kb. merre van a valós hiba. Ha messze van, arrébb kell célozni az x-szel.

Tök jó, hogy ott voltam a legutóbbi klubnapon és Csabától megtudtam, hogy ilyen fejlesztő eszköz is van Enterprise-hoz.
Title: Re: Enterprise C Compiler PC-re
Post by: IstvanV on 2018.March.28. 11:15:14
Ha a forráskód szerkesztésére használt program kiírja az aktuális sor számát, akkor könnyen megtalálható a hibás sor csak a szám alapján. De a hibaüzenetekben nem mindig pontos a szám, talán az előfeldolgozás miatt, az #asm és #endasm például két sornak számít. :)
Title: Re: Enterprise C Compiler PC-re
Post by: Zozosoft on 2018.March.28. 11:18:26
Ha a forráskód szerkesztésére használt program kiírja az aktuális sor számát
Erre szoktam javasolni: Programmer's Notepad (http://www.pnotepad.org/)
Title: Re: Enterprise C Compiler PC-re
Post by: IstvanV on 2018.March.28. 11:42:53
Lehet, hogy ez csak Wine alatt van így, de nálam a z88dk "szemetel" a TEMP könyvtárban, fordításkor létrejön néhány átmeneti file, ami nem törlődik. Elvileg a -cleanup vagy -no-cleanup engedélyezi vagy tiltja a törlést. Az utóbbi azonban hasznos is lehet debug célra, mert elérhető marad az assembly forráskód (.asm) és a globális szimbólumok címei (.map).
Title: Re: Enterprise C Compiler PC-re
Post by: Tomato77 on 2018.March.28. 12:36:00
Én egy batch fájlt csináltam a fordításhoz, aminek egyetlen paramétere a forrás (.c nélkül). Ez meghívja a zcc.exe-t, letörli a fordított .com-ot, az .app-t átnevezi .com-ra és letörli a fordításkor keletkező egyéb fájlokat.
Title: Re: Enterprise C Compiler PC-re
Post by: geco on 2020.September.05. 15:22:02
EPtelera mod CPCtelera-hoz (https://enterpriseforever.com/letoltesek-downloads/enterprise-software/?action=dlattach;attach=25425), a zip tartalmát be kell másolni a cpctelera könyvtárba, majd buildelni, és használható is EP-re programozásra C-ben.
A hardver állítható CPC-re, vagy EP-re a CPCteleraHW.SRC, hardver váltás esetén újra kell buildelni a környezetet, a legjobb megoldás ha valaki CPC-re és EP-re is szeretne programozni, két példányt létrehozni, a hardvert belőni mind a kettőben, majd egy jó build.
Title: Re: Enterprise C Compiler PC-re
Post by: Zozosoft on 2020.September.16. 13:00:28
Ez mennyire használja ki a gépet? Gondolok itt pl a memóriára, csak a Z80 64K-jában működik, és a többit old meg ahogy tudod, vagy automatikusan tud kezelni többet is?
Title: Re: Enterprise C Compiler PC-re
Post by: geco on 2020.September.16. 13:25:31
Ez mennyire használja ki a gépet? Gondolok itt pl a memóriára, csak a Z80 64K-jában működik, és a többit old meg ahogy tudod, vagy automatikusan tud kezelni többet is?
Úgy emlékszem, hogy csak 64KB-ra lőttem be, max 128KB-ra, mivel el kell tárolnom a lefoglalt szegmenseket.
És nincs benne EP specifikus grafikus rész sem, az volt a cél, hogy a CPCtelerával CPC-re írt programok minimális forrás módosítással EP-n is fussanak, + még a grafika konvertálását kell megoldani 16 szín módban.  (minimális forrás módosítás a 300Hz ---> 50 Hz megszakítás miatt kell )
De egyébként megoldható lenne maga a memóriaigénylés betétele is, csak akkor C-ben kéne eltárolni az allokált memóriát is mondjuk egy tömbben.