Welcome, Guest. Please login or register.


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

Offline Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14723
  • Country: hu
    • http://enterprise.iko.hu/
Re: Enterprise C Compiler PC-re
« Reply #15 on: 2016.April.21. 19:42:55 »
Ehhez pl miféle ep128 header kell?
Code: [Select]
for(;;)
« Last Edit: 2016.April.21. 19:52:08 by Zozosoft »

Offline lgb

  • EP addict
  • *
  • Posts: 3563
  • Country: hu
  • æðsta yfirmaður
    • http://lgb.hu/
Re: Enterprise C Compiler PC-re
« Reply #16 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 :)
« Last Edit: 2016.April.21. 19:57:45 by lgb »

Offline Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14723
  • Country: hu
    • http://enterprise.iko.hu/
Re: Enterprise C Compiler PC-re
« Reply #17 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?

Offline ergoGnomik

  • EP addict
  • *
  • Posts: 1291
  • Country: hu
  • Stray cat from Commodore alley
Re: Enterprise C Compiler PC-re
« Reply #18 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.

Offline lgb

  • EP addict
  • *
  • Posts: 3563
  • Country: hu
  • æðsta yfirmaður
    • http://lgb.hu/
Re: Enterprise C Compiler PC-re
« Reply #19 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 ...

Offline lgb

  • EP addict
  • *
  • Posts: 3563
  • Country: hu
  • æðsta yfirmaður
    • http://lgb.hu/
Re: Enterprise C Compiler PC-re
« Reply #20 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 :)

Offline Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14723
  • Country: hu
    • http://enterprise.iko.hu/
Re: Enterprise C Compiler PC-re
« Reply #21 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?

Offline Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14723
  • Country: hu
    • http://enterprise.iko.hu/
Re: Enterprise C Compiler PC-re
« Reply #22 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...

Offline lgb

  • EP addict
  • *
  • Posts: 3563
  • Country: hu
  • æðsta yfirmaður
    • http://lgb.hu/
Re: Enterprise C Compiler PC-re
« Reply #23 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

Offline Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14723
  • Country: hu
    • http://enterprise.iko.hu/
Re: Enterprise C Compiler PC-re
« Reply #24 on: 2016.April.21. 20:33:00 »
És így nem lehet?
Code: [Select]
for(;;border_colour = k++);

Offline lgb

  • EP addict
  • *
  • Posts: 3563
  • Country: hu
  • æðsta yfirmaður
    • http://lgb.hu/
Re: Enterprise C Compiler PC-re
« Reply #25 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 :)

« Last Edit: 2016.April.21. 20:41:18 by lgb »

Offline Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14723
  • Country: hu
    • http://enterprise.iko.hu/
Re: Enterprise C Compiler PC-re
« Reply #26 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:

Offline Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14723
  • Country: hu
    • http://enterprise.iko.hu/
Re: Enterprise C Compiler PC-re
« Reply #27 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 :-)

Offline lgb

  • EP addict
  • *
  • Posts: 3563
  • Country: hu
  • æðsta yfirmaður
    • http://lgb.hu/
Re: Enterprise C Compiler PC-re
« Reply #28 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 :)
« Last Edit: 2016.April.21. 21:00:16 by lgb »

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: Enterprise C Compiler PC-re
« Reply #29 on: 2016.April.22. 12:33:54 »
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.