OldComp.cz

Komunitní diskuzní fórum pro fanoušky historických počítačů


Právě je 18.04.2024, 17:35

Všechny časy jsou v UTC + 1 hodina [ Letní čas ]




Odeslat nové téma Odpovědět na téma  [ Příspěvků: 31 ]  Přejít na stránku Předchozí  1, 2, 3  Další
Autor Zpráva
 Předmět příspěvku: Re: C pro Z80
PříspěvekNapsal: 18.04.2020, 12:05 
Offline
Pan Generální
Uživatelský avatar

Registrován: 23.03.2014, 20:13
Příspěvky: 2779
Has thanked: 226 times
Been thanked: 602 times
Nebylo by jednodušší rozchodit tohle? https://www.bell-labs.com/usr/dmr/www/primevalC.html

_________________
Plesnivý sýr z Tesca, zatuchlé kuřecí řízky z Albertu, oslizlé hovězí a myší trus z Lidlu.
Nákup potravinářské inspekce v ČR, říjen 2023.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: C pro Z80
PříspěvekNapsal: 20.04.2020, 06:18 
Offline
Radil

Registrován: 14.10.2013, 23:12
Příspěvky: 342
Has thanked: 261 times
Been thanked: 25 times
66 MB a do /etc? tak to je neco hodne spatne...

_dworkin píše:
JohnBlbec píše:
_dworkin píše:
Je tu nekdo komu se podarilo nainstalovat z88dk na linuxu? Ja jsem selhal...


ahoj. ja to zkousel nekolikrat a nikdy se mi to k plne spokojenosti v gentoo rozdhodit nepovedlo :-(


Mam na disku zazipovany ten cely adresar co se ti natahne do etc. Je to 66 mb! Pokud se nepletu tak je tam 13 tisic souboru... Kdybys to chtel muzu to hodit na ulozto a pokud jsi mel stejny problem tak to snad bude fungovat. Ale vubec nerozumim gitu. Tak je mozne ze to tahalo neco v zavislosti na mem systemu, tak je to mozna k nicemu.

PS: zip ma 66 mb. Uvnitr je 460 mb zdrojaku. SmallC... :D


Nahoru
 Profil  
 
 Předmět příspěvku: Re: C pro Z80
PříspěvekNapsal: 11.09.2023, 21:14 
Offline
Kecálek

Registrován: 16.09.2022, 16:24
Příspěvky: 196
Has thanked: 8 times
Been thanked: 35 times
Tam kde jsem to zatim potreboval pro preklad C pro Z80 (a jine male mrsky) jsem pouzil SDCC, to funguje celkem snadno out of the box, ale prijde mi tragicka kvalita vystupniho kodu :-(. CP/M priklady ktere jsem teda nikdy primo nepouzil jsou na https://github.com/hkzlab/sdcc-cpm-example


Lide obecne pisi, ze Hitech C je na Z80 asi nejlepsi optimalizujici prekladac.

Binarky lze stahnout zde https://github.com/agn453/HI-TECH-Z80-C (jsou to CP/M programy, zadna multiplatformnost !!)

Spustit to pod Unixem jde pomoci https://github.com/agn453/ZXCC/ - to je jednoduchy emulator Z80+CP/M. Tady jsem naprosto selhal, odhalil jsem nekolik ruznych chyb (mych i autoru), a pak to vzdal, protoze ...

nakonec jsem narazil na https://github.com/serge-404/HI-TECH-C-V3.09 , ktery out of the box jde spustit na Windows, a zrejme i jinde. Originalni navod https://github.com/serge-404/HI-TECH-C- ... Z80DOC.TXT

(prekladac 'c.com' se spousti jako 'cpm -a c hello.c' - vytvori 4kB dlouhy program :-(, ale jen diky prilepeni knihoven, vlastni prekladany kod neni az zase tak tragicky jako sdcc. Dalsi parametry: -S udela assembler, -O optimalizace. )


Kód:
Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation.  All rights reserved.

T:\robotron z1013\_z80\HI-TECH-C-V3.09-master>cpm
CPM.EXE -- CP/M-80 program EXEcutor for WIN32 V0.5
Copyright (C) 2004-2012 by K.Murakami
  Usage: CPM [-hxapdCkr][-w[0-9]] command arg1 arg2 ...
        -h .. return HI-TECH C exit code
        -x .. return ERROR if A:$$$.SUB deleted
        -a .. select A: (program directry)
        -p .. pause before exit
        -d .. disable auto drive assign
        -C .. args to uppercase
        -o .. orion128 ROM F800 mode (+allow exec RKO,ORD)
        -8 .. do not KOI8 conversion
        -r .. do Robotron-1715 escapes
        -k .. do Kaypro(adm3a) escapes
        -w[0-9] .. wait on console status check (9:max)

T:\robotron z1013\_z80\HI-TECH-C-V3.09-master>cpm -a c hello.c
HI-TECH C COMPILER (CP/M-80) V3.09
Copyright (C) 1984-87 HI-TECH SOFTWARE

T:\robotron z1013\_z80\HI-TECH-C-V3.09-master>


Zdrojaky knihoven Hi-Tech C jsou k nalezeni zde https://github.com/tsupplis/zxcc-htc


Nahoru
 Profil  
 
 Předmět příspěvku: Re: C pro Z80
PříspěvekNapsal: 12.09.2023, 00:27 
Offline
Pan Generální
Uživatelský avatar

Registrován: 11.06.2013, 15:27
Příspěvky: 3051
Has thanked: 2200 times
Been thanked: 901 times
JohnBlbec píše:
_dworkin píše:
Je tu nekdo komu se podarilo nainstalovat z88dk na linuxu? Ja jsem selhal...

ahoj. ja to zkousel nekolikrat a nikdy se mi to k plne spokojenosti v gentoo rozdhodit nepovedlo :-(

mne pred casem fungovalo tohle>
viewtopic.php?f=81&t=5794#p95880
nyni https://github.com/spectrumcomputing/li ... llation.md

suksoft píše:
Chci se optat zda mate nejakou zkusenost s nejakym prekladacem C jazyka pro Z80 (8080, 8085). Jedna se mi primarne o prekladac primo pro Z80, idelane pro CP/M.
p.s. http://www.oldcomp.cz/viewtopic.php?f=1 ... 14&start=0 jsem cetl.


K tomuhle bude taky tady nekde vlakno...
https://github.com/oldcompcz/HiSoft-C

_________________
// na co myslím, když sedím u oldkompů: režim


Nahoru
 Profil  
 
 Předmět příspěvku: Re: C pro Z80
PříspěvekNapsal: 12.09.2023, 08:55 
Offline
Kecka
Uživatelský avatar

Registrován: 27.07.2021, 12:46
Příspěvky: 70
Bydliště: Valašsko
Has thanked: 8 times
Been thanked: 34 times
HI-TECH C funguje na CP/M i v emulátoru na Windows.
https://github.com/serge-404/HI-TECH-C-V3.09

Na Linuxu se to dá provozovat pod emulátorem:
https://github.com/udo-munk/z80pack

Mám to popsané zde:
http://www.valachnet.cz/lvanek/diy/rc2014/index.html#RTM_Z80

... ale rozjet to bylo složité jak žebř. Pokud chceš tak to celé spakuju a dám to na FTP.

Ale nejpohodlnější cesta je z88dk na Windowsech.

_________________
RC2014 Pro, RC2014 LittleBro, RC2014 Zed, RC2014 Mini


Nahoru
 Profil  
 
 Předmět příspěvku: Re: C pro Z80
PříspěvekNapsal: 12.09.2023, 13:23 
Offline
Pan Štábní

Registrován: 23.06.2013, 23:49
Příspěvky: 1113
Has thanked: 100 times
Been thanked: 159 times
z88dk jde uz instalovat snadno ze snapu.

Instalace je ale jen zacatek, pak se clovek musi prokousat tim, proc mu nejake veci nefunguji a jak vubec spustit kompilaci.. .)

Mezitim jsem si napsal vlastni prekladac vyssiho jazyka do Z80. Dva az ctyrikrát efektivnejsi nez co dokaze C. Nez C bych spis doporucil dnes Boriel Basic prekladac, ktery je asi 2x lepsi jak z88dk.

_________________
Z80 Forth compiler (ZX Spectrum 48kb): https://codeberg.org/DW0RKiN/M4_FORTH


Nahoru
 Profil  
 
 Předmět příspěvku: Re: C pro Z80
PříspěvekNapsal: 12.09.2023, 15:59 
Offline
Kecka
Uživatelský avatar

Registrován: 27.07.2021, 12:46
Příspěvky: 70
Bydliště: Valašsko
Has thanked: 8 times
Been thanked: 34 times
U HiTech C je dost velká brzda předávání parametrů přes zásobník:
Obrázek

_________________
RC2014 Pro, RC2014 LittleBro, RC2014 Zed, RC2014 Mini


Nahoru
 Profil  
 
 Předmět příspěvku: Re: C pro Z80
PříspěvekNapsal: 12.09.2023, 16:19 
Offline
Kecka
Uživatelský avatar

Registrován: 27.07.2021, 12:46
Příspěvky: 70
Bydliště: Valašsko
Has thanked: 8 times
Been thanked: 34 times
Jo a HiTech C umí klíčové slovo 'register' pro max jeden parametr.
Obrázek

_________________
RC2014 Pro, RC2014 LittleBro, RC2014 Zed, RC2014 Mini


Nahoru
 Profil  
 
 Předmět příspěvku: Re: C pro Z80
PříspěvekNapsal: 12.09.2023, 16:48 
Offline
Pan Štábní

Registrován: 23.06.2013, 23:49
Příspěvky: 1113
Has thanked: 100 times
Been thanked: 159 times
C to resi elegantne (ale neefektivne na Z80) pres ten zasobnik, protoze tim je zaruceno ze jde provest kdykoliv rekurze. Bez ohledu zda ji pouzijes nebo ne.

Z80 ten zasobnikovy ramec moc neumi. Nebo umi relativne snadno pomoci IX nebo IY, ale ty jsou fakt pomale a zabiraji hodne pameti.

Boriel Basic to resi pres pevne ukazatele na pametove mista, co je kratsi a rychlejsi, ale nezvladne to rekurzi.

Forth je na tom mozna nejlepe, ale zase potrebuje 2 zasobniky a Z80 umi jen jeden a druhy musis nejak emulovat (stacila by jedinna rychla instrukce " ex SP,SP' "). Z tech 3 jazyku je na tom Forth asi nejlepe. Bude delat suverene nejkratsi kod. Nebude nejrychlejsi, protoze bude pro kazdou i nejjednodussi "instrukci/slovo" provadet nejake volani (asi to jde resit v kritickych mistech pres assembler nebo immediate slova, pokud to chapu spravne tak by meli byt primo vykonany). Ale je asi nejtesi z pohledu programatora. Rekl bych je to skoro stejne tezke jako assembler, jen mnohem rychlejsi na psani.

Nejlepsi je se asi naucit ten assembler... .)

_________________
Z80 Forth compiler (ZX Spectrum 48kb): https://codeberg.org/DW0RKiN/M4_FORTH


Nahoru
 Profil  
 
 Předmět příspěvku: Re: C pro Z80
PříspěvekNapsal: 12.09.2023, 16:52 
Offline
Kecálek

Registrován: 16.09.2022, 16:24
Příspěvky: 196
Has thanked: 8 times
Been thanked: 35 times
sdcc 4 umi predavat argumenty v reg - zde https://www.msx.org/forum/msx-talk/deve ... rogramming

zkusil jsem prelozit vprintf pomoci ruznych prekladacu (sdcc 3, sdcc4 + optimalizace, hitech C,Small-C/Plus z88dk), muzu to sem hodit pro srovnani. Jsem ale dost zklamany.

z88dk z gitu se mi na novejsim aktualizovanem ubuntu (bullseye/sid) celkove prelozit nepovedlo (nezkoumal jsem proc, po desatem+ problemu jsem to vzdal), ale dostal jsem se alespon do faze ze byl prelozeny Small-C). Se "stable" tarballem jsem skoncil u uplne banalnich chyb, kdy bylo jasne, ze autori dlabou jak na bugreporty tak na kvalitu sve produkce ("mne to funguje tak co").

sdcc 4.3.0 proslo bez problemu. Mohu sem dat postup jake jsou dependencies.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: C pro Z80
PříspěvekNapsal: 12.09.2023, 19:22 
Offline
Pan Štábní

Registrován: 23.06.2013, 23:49
Příspěvky: 1113
Has thanked: 100 times
Been thanked: 159 times
Pokud zacnes pouzivat registry jako uloziste dat tak jsi zrusil rekurzi. A nejen ji, ale i volani fci z fci. To bude fungovat jen u tech poslednich fci. Predstavuji si to jako listy stromu, nevim jak se tomu rika odborne, proste posledni "vetev".

V registru podle me muzes mit bezpecne jen navratovou hodnotu jak je to vlastne v C delane.

Takze zadne do IY dam navratovou adresu ("pop IY") tim si uvolnim dalasi data na zasobniku a pak to ukoncim pres "JP (IY)". Tohle funguje jen u "listu".

U Forthu to nevadi, protoze je to cele delane na tom ze program (operace) bezi nad TOP a NOS a kazde slovo ma jasne definovane co se stane. Plus pak i programator musi volit ten algoritmus tak aby byl pro to efektivni. Je to mene abstraktni.

Normalni zasobnik ma proste hw podporu v Z80, aby byl efektivni pro pristup k posledni polozce jak to ma Forth.

PS: Jak jsem rekl to z88dk muzes naistalovat pres "snap store".

_________________
Z80 Forth compiler (ZX Spectrum 48kb): https://codeberg.org/DW0RKiN/M4_FORTH


Nahoru
 Profil  
 
 Předmět příspěvku: Re: C pro Z80
PříspěvekNapsal: 12.09.2023, 20:52 
Offline
Kecálek

Registrován: 16.09.2022, 16:24
Příspěvky: 196
Has thanked: 8 times
Been thanked: 35 times
_dworkin píše:
Pokud zacnes pouzivat registry jako uloziste dat tak jsi zrusil rekurzi.


Tohle je nepravdive tvrzeni ze dvou duvodu, vetsina ABI calling conventions https://en.wikipedia.org/wiki/Calling_convention nejen ze definuje modifikovatelne registry, ale pro spoustu pripadu neni nutne ani delat stack-save (a chytry prekladac na to prijde).

Moje zklamani ze sdcc ale nabyva, treba tenhle kousek kodu, kdyz tam dam na konci %64 misto toho &0x3F, tak to hodi volani na nejake signed modulo (nepozna ani to, ze muze binarni modulo udelat sam).

do {vram[cursorpos++] = ' '; } while (cursorpos&(64-1));

Nebo ve vysledku hrabemi prehazuje tu promennou cursorpos mezi registry a pameti (load-modify-store-load-use-load-modify-store-...), prestoze tam nic nedelam a bohate by mu stacilo hl+de :-(.

A to jsem nadaval jak GCC pro RISC-V neumi optimalizovat :-(.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: C pro Z80
PříspěvekNapsal: 12.09.2023, 22:23 
Offline
Pan Štábní

Registrován: 23.06.2013, 23:49
Příspěvky: 1113
Has thanked: 100 times
Been thanked: 159 times
mhi píše:
_dworkin píše:
Pokud zacnes pouzivat registry jako uloziste dat tak jsi zrusil rekurzi.


Tohle je nepravdive tvrzeni ze dvou duvodu, vetsina ABI calling conventions https://en.wikipedia.org/wiki/Calling_convention nejen ze definuje modifikovatelne registry, ale pro spoustu pripadu neni nutne ani delat stack-save (a chytry prekladac na to prijde).


To me teda vysvetli jak napriklad u fce jako je Fibonaciho posloupnost definovane (neefektivne) rekurzivne ti pomuze ze das vstup do registru...

To ti prece dost rychle dojdou.

Nebo ze si uklidis navratovou hodnotu do registru. Pak uz nemuzes pouzit ten samy registr na ten samy trik. Takze to jde jen pro volani "listu".

Ja to fakt nechapu. Definovat ze neco bude v registru pomuze jen pro ty listy. Popripade pro zacatek fce nez je z ni volana dalsi, pokud uz to nebude pak pouzito.

PS: To ze to dela kraviny je dusledek toho ze je ten program rozdelen na co nejmensi casti a pak znovu slepen... a ta komunikace (predavani informaci) mezi temi castmi je slaba, nebo zadna (minimalni co je nutne).

Taky to mam v mem prekladaci... musel bych vytvorit uplne novy system a pro kazde slovo to dusledne dodrzovat aby to fungovalo. Predavat si podrobne informace pro kazdy registr co v nem je a co je na vystupu. Informace nejen co je tam za hodnota, ale i jestli je to jen smeti a nebo co to znemna, napr. ze je to hodnota citace smycky "i". Ze ho ma napr, reg BC a jeste je na zasobniku nebo v pameti na te a te adrese. A ted psat kazde slovo/fci pro vsechny kombinace.

Pokud napriklad potrebuji drzet aktivne 3 hodnoty, tak treti je uz na zasobniku a kdyz ji nactu do BC (a zase hned ulozim aby se neztratila) tak dalsi slovo ktere muze byt hned za tim i kdyby prvni nezmenilo BC se to bude snazit provest znovu.

Kdyby dalsi slovo vedelo ze treti polozka je zaroven v BC, tak ten kod bude vypadat jinak.

Me reseni optimalizace bylo asi to co se mozna nazyva optimalizace "kukatkem". Pro nejakou castou kombinaci slov, ktere nejsou vzajeme moc efektivni proste udelam nove slovo a rucne napisi lepsi kod.

To funguje celkem dobre pro maly pocet kombinaci, jinak ten pocet roste exponencialne, pak je lepsi kdyz to jeste umi seskladat z informaci co by dostal, protoze pocet registru je omezeny.

PPS: %64 me uz trapi nejmene, protoze to muzes ovlivnit sam pres & 63, takze to mas pod kontrolou. Horsi je podle me to co neovlivnis.

_________________
Z80 Forth compiler (ZX Spectrum 48kb): https://codeberg.org/DW0RKiN/M4_FORTH


Nahoru
 Profil  
 
 Předmět příspěvku: Re: C pro Z80
PříspěvekNapsal: 13.09.2023, 06:28 
Offline
Óm Nejvyšší

Registrován: 22.05.2013, 21:14
Příspěvky: 3661
Bydliště: Bratislava
Has thanked: 373 times
Been thanked: 795 times
_dworkin píše:
mhi píše:
_dworkin píše:
Pokud zacnes pouzivat registry jako uloziste dat tak jsi zrusil rekurzi.
Tohle je nepravdive tvrzeni
To me teda vysvetli
Uplne postaci si registre pri rekurzivnom volani odlozit na zasobnik. Vznikne tym taky nativny stack-frame ktory uz rekurziu zvlada.
Napriklad funkcia ma parametre v registroch BC,DE
Kód:
funkcia:
  ...nejaky kod pre spracovanie parametrov BC,DE...
  push bc
  push de
  ld bc,novy_parameter1
  ld de,novy parameter2
  call funkcia
  pop de
  pop bc
  ...nejaky dalsi kod
  ret


Nahoru
 Profil  
 
 Předmět příspěvku: Re: C pro Z80
PříspěvekNapsal: 13.09.2023, 08:39 
Offline
Kecálek

Registrován: 16.09.2022, 16:24
Příspěvky: 196
Has thanked: 8 times
Been thanked: 35 times
Jednak se daji ulozit na stack, pripadne do jinych dalsich registru (kerych v Z80 moc neni, ze? ale treba u ARMu je to bezna praxe, ze napr u BLR se LR ulozi do jineho registru, tzn. pak na stacku neni ani return adresa druhe predchozi fce), no a nakonec jsou algoritmy, ktere tohle vubec nepotrebuji - a neni jich malo.

Neschopnost optimalizovat veci typu %64 na &0x3f komplikuje citelnost a parametrizovatelnost kodu. Nejaka snaha asi byla, protoze jednoduchy pripad to zoptimalizuje spravne: https://godbolt.org/z/xWxxTxPxT ??

Tady je postup jak zkompilovat sdcc na relativne cistem ubuntu:

Kód:
wget https://sourceforge.net/projects/sdcc/files/sdcc/4.3.0/sdcc-src-4.3.0.tar.bz2/download
tar xjvf download
cd sdcc-4.3.0/
sudo apt-get install bison
sudo apt-get install flex
sudo apt-get install boost
sudo apt-get install libboost-dev
sudo apt-get install libz-dev
./configure --prefix=/usr/local --enable-z80-port --disable-pic14-port --disable-pic16-port
sudo make install


a preklad meho barebone kodu:

Kód:
sdcc --nostdinc -mz80  vprintf.c --opt-code-size --sdcccall 1 --fomit-frame-pointer


Nahoru
 Profil  
 
Zobrazit příspěvky za předchozí:  Seřadit podle  
Odeslat nové téma Odpovědět na téma  [ Příspěvků: 31 ]  Přejít na stránku Předchozí  1, 2, 3  Další

Všechny časy jsou v UTC + 1 hodina [ Letní čas ]


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 4 návštevníků


Nemůžete zakládat nová témata v tomto fóru
Nemůžete odpovídat v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete přikládat soubory v tomto fóru

Hledat:
Přejít na:  
Založeno na phpBB® Forum Software © phpBB Group
Český překlad – phpBB.cz