Welcome, Guest. Please login or register.


Author Topic: C programozás (Aztec C / Hisoft C) (Read 6803 times)

Offline Lacika

  • EP addict
  • *
  • Posts: 2929
  • Country: hu
  • OS:
  • Windows NT 10.0 Windows NT 10.0
  • Browser:
  • Firefox 43.0 Firefox 43.0
    • View Profile
    • http://www.ep128.hu
C programozás (Aztec C / Hisoft C)
« on: 2015.December.20. 08:55:41 »
Tud segíteni valaki C-ben?
Most ismerkedek vele mérsékelt sikerrel....

Két kérdésem lennem első körben az alábbi két programmal kapcsolatban: miért nem adnak helyes eredményt?
Az első egy sima gyökvonás:

main()
{
  int c;
  c=2;
  printf("%f",sqrt((double)c));
}

a második az adott implementáció szóhosszúságát adná meg:

wordlength()
{
  int i;
  unsigned v=~0;
  for(i=1; (v=v>>1)>0; i++) ;
  return(i);
}

main()
{
  printf("%d\n",wordlength);
}

Offline IstvanV

  • EP addict
  • *
  • Posts: 4806
  • OS:
  • Linux Linux
  • Browser:
  • Firefox 39.0 Firefox 39.0
    • View Profile
Re: C programozás (Aztec C / Hisoft C)
« Reply #1 on: 2015.December.20. 09:39:08 »
Ez működik PC-n GCC-vel fordítva, EP-s fordítót nem próbáltam (az include hiánya probléma lehetett, implicit deklarációval a visszatérési érték típusa int):
Code: C
  1. #include <stdio.h>
  2. #include <math.h>
  3. int main(void)
  4. {
  5.   int c;
  6.   c=2;
  7.   printf("%f\n",sqrt((double)c));
  8.   return 0;
  9. }

A második program javítva (a wordlength helyett wordlength(), az előbbi a függvény címe):

Code: C
  1. #include <stdio.h>
  2. int wordlength(void)
  3. {
  4.   int i;
  5.   unsigned v=~0;
  6.   for(i=1; (v=v>>1)>0; i++) ;
  7.   return(i);
  8. }
  9.  
  10. int main(void)
  11. {
  12.   printf("%d\n",wordlength());
  13.   return 0;
  14. }
« Last Edit: 2015.December.20. 09:50:25 by IstvanV »

Offline Mayer Gábor

  • EP fan
  • *
  • Posts: 208
  • Country: hu
  • OS:
  • Windows 7/Server 2008 R2 Windows 7/Server 2008 R2
  • Browser:
  • Firefox 42.0 Firefox 42.0
    • View Profile
Re: C programozás (Aztec C / Hisoft C)
« Reply #2 on: 2015.December.20. 10:30:45 »
Ilyet még talán nem is láttam, hogy unsigned magában. Ez ilyenkor unsigned int lesz ugye?

Nekem az lenne a kérdésem, bár lehet, hogy ep-t nem érinti, miért kell linuxon de lehet, hogy máshol is hozzá linkelni az alábbiakat a programhoz:

crt1.o
crti.o
crtbegin.o
crtend.o
crtn.o

Melyik micsoda és honnan jönnek ezek? Úgy értem a linuxnak muszáj vagy ez a gcc működéséből fakad és lehet, hogy más fordító nem tenné ezeket oda?


Offline IstvanV

  • EP addict
  • *
  • Posts: 4806
  • OS:
  • Linux Linux
  • Browser:
  • Firefox 39.0 Firefox 39.0
    • View Profile
Re: C programozás (Aztec C / Hisoft C)
« Reply #3 on: 2015.December.20. 10:48:06 »
Ilyet még talán nem is láttam, hogy unsigned magában. Ez ilyenkor unsigned int lesz ugye?

Igen.

Quote
Melyik micsoda és honnan jönnek ezek? Úgy értem a linuxnak muszáj vagy ez a gcc működéséből fakad és lehet, hogy más fordító nem tenné ezeket oda?

A GCC automatikusan linkeli ezeket, ezért a fordításhoz elég az alábbi parancsokat használni:

gcc -Wall -O2 sqrt.c -o sqrt -lm
gcc -Wall -O2 wrdlngth.c -o wrdlngth

Ugyanez működik például az itt található Windows-os fordítóval is. HISOFT C-vel egyelőre nem sikerült lefordítani. :oops:

Offline Mayer Gábor

  • EP fan
  • *
  • Posts: 208
  • Country: hu
  • OS:
  • Windows 7/Server 2008 R2 Windows 7/Server 2008 R2
  • Browser:
  • Firefox 42.0 Firefox 42.0
    • View Profile
Re: C programozás (Aztec C / Hisoft C)
« Reply #4 on: 2015.December.20. 10:57:53 »
Ha tudjátok hogy mit csinálnak ezek az objectek az érdekelne.

Offline Lacika

  • EP addict
  • *
  • Posts: 2929
  • Country: hu
  • OS:
  • Windows NT 10.0 Windows NT 10.0
  • Browser:
  • Firefox 43.0 Firefox 43.0
    • View Profile
    • http://www.ep128.hu
Re: C programozás (Aztec C / Hisoft C)
« Reply #5 on: 2015.December.20. 11:05:52 »
Ep-n két használható fordítót találtam (kint vannak nálam):

Hisoft-C 1.33 : egyszerű, gyors fordító, de nem ismeri sem a float, sem a double tpust(!) Csak egész számokkal dolgozik... :( Nem egészen világos, mi a különbség a .H és a .LIB kiterjesztésű file között?

Aztec-C: ez macerásabb, 3-lépésben (!) kell fordítani (BAT-ot célszerű hozzá csinálni...). Itt az utolsó lépésben kell hozzálinkelni a programhoz az M.LIB (matematikai könyvtár) - ha lebegőpontos számokat is használunk, és a C.LIB-et. Ezért nincs a gyökvonásos programban include. A program hibamentesen lefordul, futtatásor mégis hibás eredményt ad.
Ezt a letölthető csomagot átnézné valaki, melyik file micsoda? :oops:
« Last Edit: 2015.December.20. 11:32:28 by Lacika »

Offline Lacika

  • EP addict
  • *
  • Posts: 2929
  • Country: hu
  • OS:
  • Windows NT 10.0 Windows NT 10.0
  • Browser:
  • Firefox 43.0 Firefox 43.0
    • View Profile
    • http://www.ep128.hu
Re: C programozás (Aztec C / Hisoft C)
« Reply #6 on: 2015.December.20. 11:06:32 »
Ha tudjátok hogy mit csinálnak ezek az objectek az érdekelne.

Engem is. Bár én Ep-specifikus nézőpontból közelítek a kérdéshez. :ds_icon_cheesygrin:

Offline Lacika

  • EP addict
  • *
  • Posts: 2929
  • Country: hu
  • OS:
  • Windows NT 10.0 Windows NT 10.0
  • Browser:
  • Firefox 43.0 Firefox 43.0
    • View Profile
    • http://www.ep128.hu
Re: C programozás (Aztec C / Hisoft C)
« Reply #7 on: 2015.December.20. 11:08:26 »
Ilyet még talán nem is láttam, hogy unsigned magában. Ez ilyenkor unsigned int lesz ugye?

Itt már tartok. Erről konkrétan van említés itt.
Még kezdeti stádiumban van. Bármilyen észrevételt szívesen fogadok!

Offline ergoGnomik

  • EP lover
  • *
  • Posts: 836
  • Country: hu
  • Stray cat from Commodore alley
  • OS:
  • Windows 7/Server 2008 R2 Windows 7/Server 2008 R2
  • Browser:
  • Opera 9.80 Opera 9.80
    • View Profile
Re: C programozás (Aztec C / Hisoft C)
« Reply #8 on: 2015.December.20. 12:48:43 »
Ilyet még talán nem is láttam, hogy unsigned magában. Ez ilyenkor unsigned int lesz ugye?

Nekem az lenne a kérdésem, bár lehet, hogy ep-t nem érinti, miért kell linuxon de lehet, hogy máshol is hozzá linkelni az alábbiakat a programhoz:

crt1.o
crti.o
crtbegin.o
crtend.o
crtn.o

Melyik micsoda és honnan jönnek ezek? Úgy értem a linuxnak muszáj vagy ez a gcc működéséből fakad és lehet, hogy más fordító nem tenné ezeket oda?
Keress leírásokat a C Runtime Library (magyarul C futásidejű könyvtár - talán) témakörben. Ezek alapvető szolgáltatásokat biztosítanak, ami lehetővé teszi a programnak az operációs rendszeren futtatását.

Offline IstvanV

  • EP addict
  • *
  • Posts: 4806
  • OS:
  • Linux Linux
  • Browser:
  • Firefox 39.0 Firefox 39.0
    • View Profile
Re: C programozás (Aztec C / Hisoft C)
« Reply #9 on: 2015.December.21. 14:42:13 »
PC-ről Z80-ra fordító programokkal is lehet próbálkozni, ha érdekel valakit ez a téma. A z88dk támogatja az EP-t és az EXOS 5-ös fejlécű formátumát (egy kisebb bug javítása után), ezért viszonylag egyszerű a használata. Az SDCC nehézkesebb, és úgy látszik, az EP támogatást külön meg kell valósítani hozzá, de jobb minőségű Z80 kódot generál, mint a z88dk.

Egy minimális példa program SDCC-vel fordítva:
* test.com (0.19 kB - downloaded 100 times.)
* test.c (0.41 kB - downloaded 92 times.)

sdcc -mz80 --code-loc 0x0180 --data-loc 0x4000 --stack-loc 0xf800 test.c
ihx2ep test.ihx loader.bin test.com


Az EP-s betöltő készítéséhez használt forráskódok:
* loader.s (1.37 kB - downloaded 81 times.)
* ihx2ep.c (3.92 kB - downloaded 88 times.)

Offline IstvanV

  • EP addict
  • *
  • Posts: 4806
  • OS:
  • Linux Linux
  • Browser:
  • Firefox 39.0 Firefox 39.0
    • View Profile
Re: C programozás (Aztec C / Hisoft C)
« Reply #10 on: 2015.December.21. 20:00:18 »
Továbbfejlesztett loader.s, amely megnyit egy EDITOR: csatornát 40x24 karakteres szöveges módban, és megvalósítja a karakter kiírást (így már működik a printf()):

* loader.s (3.23 kB - downloaded 92 times.)
* ihx2ep.c (3.92 kB - downloaded 95 times.)

1 és 10 közötti egészek négyzetgyökének a kiírása (az SDCC-s printf() nem támogatja a float típust, így ehhez külön rutint kellett írni):

* sqrt.com (6.56 kB. 41x26 - viewed 88 times.)
* sqrt.c (0.2 kB - downloaded 85 times.)

* ep.h (0.27 kB - downloaded 87 times.)
* ep.c (2.18 kB - downloaded 83 times.)

gcc -Wall -O2 ihx2ep.c -o ihx2ep
sjasm loader.s loader.bin

sdcc -mz80 --code-loc 0x0200 --data-loc 0x4000 --stack-loc 0xf800 sqrt.c
ihx2ep sqrt.ihx loader.bin sqrt.com

Offline Zozosoft

  • EP addict
  • *
  • Posts: 13519
  • Country: hu
  • OS:
  • Windows 7/Server 2008 R2 Windows 7/Server 2008 R2
  • Browser:
  • Firefox 43.0 Firefox 43.0
    • View Profile
    • http://enterprise.iko.hu/
Re: C programozás (Aztec C / Hisoft C)
« Reply #11 on: 2015.December.21. 22:01:45 »
Na most lehet, hogy nagy hülyeséget kérdezek :oops:
Ezek a modern PC-s Z80 C-k tudnak kezelni többet mint 64K?

Offline IstvanV

  • EP addict
  • *
  • Posts: 4806
  • OS:
  • Linux Linux
  • Browser:
  • Firefox 39.0 Firefox 39.0
    • View Profile
Re: C programozás (Aztec C / Hisoft C)
« Reply #12 on: 2015.December.21. 22:08:54 »
Na most lehet, hogy nagy hülyeséget kérdezek :oops:
Ezek a modern PC-s Z80 C-k tudnak kezelni többet mint 64K?

Mivel az EP-t csak korlátozottan támogatják, valószínűleg nem tudnak automatikusan lefoglalni és lapozni több memóriát. Ezt a programnak kellene megoldania asm rutinok beépítésével.

Offline Zozosoft

  • EP addict
  • *
  • Posts: 13519
  • Country: hu
  • OS:
  • Windows 7/Server 2008 R2 Windows 7/Server 2008 R2
  • Browser:
  • Firefox 43.0 Firefox 43.0
    • View Profile
    • http://enterprise.iko.hu/
Re: C programozás (Aztec C / Hisoft C)
« Reply #13 on: 2015.December.21. 22:53:25 »
Ez nyilvánvaló :-) De úgy általában tudnak-e Z80-on lapozva sok memóriát kezelni? Amihez nyilván kellene a megfelelő szabványosan hívható assembly rutinokat elkészíteni.
Ahogy pl a printf-nek is előkészítetted a terepet.
De ha megvannak a lapozó rutinok, onnantól el lehetne feledni a 64K korlátot? Itt van pl Endi editorának az esete, ahol BASIC-ben elérte az egyszerre kezelhető memória határát, ez egy ilyen modern C-vel elkerülhető lenne?

Offline lgb

  • EP addict
  • *
  • Posts: 3496
  • Country: hu
  • æðsta yfirmaður
  • OS:
  • Linux (Ubuntu) Linux (Ubuntu)
  • Browser:
  • Firefox 43.0 Firefox 43.0
    • View Profile
    • http://lgb.hu/
Re: C programozás (Aztec C / Hisoft C)
« Reply #14 on: 2015.December.21. 23:09:03 »
Az a baj, hogy a C filozofiajaban, ha mindent ki akarsz hasznalni akkor alapvetoen a mutato (pointer) fogalma fog betegeskedni. Marmint, egy 16 bites ertek mint pointer problema. Am, ha 64K-t tul akarod lepni akkor kellene olyan pointer, ahol mondjuk szegmensszam stb van. Ehhez viszont ugye lapozgatas stb kell allandoan, nem tul hatekony. Ugyan C-vel en inkabb mar "flat cimzesu" rendszereken talalkoztam mar (ahol ez nem problema), remlik, hogy meg DOS-os idokben is volt C compiler ahol emiatt kulonbozo tipusu mutatok is voltak, am ez mas kerdeseket is felvethet. Szerintem inkabb azt kene megvizsgalni, hogy valoban szukseg van-e arra, hogy minden mukodjon 64K-s hatart attorve, vagy elfogadhato, ha adott esetben platform specifikus dolgok vannak, akar pl ugy, hogy a megfelelo C fuggvenynek valo entitassal az ember lapozgat, mintha asm lenne a dolog. Nem tul szep, az igaz. Am a telejesen generic implementaciohoz az kene, hogy maga a core compiler (sdcc) tudjon errol (nem tudom ez mennyire lenne bonyolult), az mar nem csak annyi, hogy irunk loader-t meg miegymast hozza, amit ugye egy masik topic-ban regebben en is csinalgattam egy darabig (csak eppen akkoriban volt egy kis gond az sdcc-vel ami nagyon elvette a kedvemet tole, le is adtam nekik hibara).