π
<-
Chat plein-écran
[^]

Nouveaux travaux sur un compilateur C pour (e)Z80 via LLVM…

Nouveautés, projets, mises à jour.

Nouveaux travaux sur un compilateur C pour (e)Z80 via LLVM…

Unread postby Lionel Debroux » 03 Mar 2016, 10:27

Sur les Z80, la façon habituelle de programmer en code natif est de programmer directement en assembleur ("langage d'assemblage", pour les extrémistes français). En effet, le processeur Z80 est ancien et n'est pas très bien adapté à la programmation en langage de plus haut niveau - même le C. Sur l'eZ80, version modernisée du Z80, que TI a récemment montée dans les 83PCE et 84+CE après plus de 20 ans de vieux Z80, quelques nouvelles instructions facilitent l'exécution du code compilé depuis le C, par exemple Load Effective Address, proposé par les 68k depuis la fin des années 1970, le 8086 et ses descendants, etc.

Il existe depuis longtemps des compilateurs C ciblant le Z80 et/ou l'eZ80, citons:
  • Small Device C Compiler (SDCC), sur lequel un environnement nommé "tisdcc" avait été créé;
  • le compilateur C officiel de Zilog.
Mais ces compilateurs-là ne gèrent que des dialectes lourdement obsolètes du C, donnent souvent du code peu optimisé, fonctionnent mal (les erreurs du compilateur Zilog sur du code valide ne sont hélas pas si rares que ça). Les compilateurs C/C++ ouverts modernes que sont GCC et Clang ne ciblent pas le Z80 et l'eZ80, ce qui interdit quantité de facilités de programmation.

Par le passé, il y a eu, dans la communauté TI et ailleurs, des tentatives de créer des backends Z80 pour LLVM et GCC (par AHelper, notamment), ce qui est la partie importante pour cibler un Z80 avec Clang ou GCC. Pour être compatible avec les extensions du compilateur Zilog, des extensions à Clang et GCC seraient nécessaires, mais sont moins importantes. LLVM/Clang est techniquement beaucoup plus moderne que GCC, et la création de backends LLVM est en principe plus facile, même si le nombre brut de lignes de code est plus élevé - les lignes individuelles sont plus faciles à produire.

Avec l'arrivée des TI-eZ80, l'intérêt de créer un backend (e)Z80 pour LLVM a beaucoup augmenté dans la communauté. La toolchain de Mateo, basée sur le compilateur Zilog, popularisée par la capacité "programmes C TI-eZ80" de notre IDE en ligne Project Builder
(capacité copiée des semaines plus tard par l'autre IDE en ligne...)
, et CEmu, donnent aux gens le goût de programmer en C pour les TI-eZ80. Cependant, les limitations du compliateur de Zilog sont
pénibles
.

Il y a quelques semaines,
jacobly
, un contributeur majeur de CEmu, s'est mis à refaire un backend Z80 + eZ80 à LLVM, from scratch. Maintenant que ça commence à générer du code dans des cas simples, il a publié ses travaux, pour que les autres puissent contribuer et améliorer, dans l'esprit de partage de notre communauté :)

Pour l'instant, il reste pas mal de travail, mais c'est une étape importante, et il nous incombe collectivement d'y contribuer, pour ceux qui en ont les compétences et le temps, et d'en tirer parti quand elle fonctionnera bien ;)


Repository du projet
: https://github.com/jacobly0/llvm-z80
Source de l'info
: IRC (sur EFNet, channel #ez80-dev)
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
User avatar
Lionel DebrouxSuper Modo
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Level up: 6.9%
 
Posts: 6518
Joined: 23 Dec 2009, 00:00
Location: France
Gender: Male
Calculator(s):
Class: -
GitHub: debrouxl

Re: Nouveaux travaux sur un compilateur C pour (e)Z80 via LL

Unread postby Adriweb » 06 Mar 2016, 19:32

L'absence de réponse veut probablement dire que peu de gens saisissent l'importance de ce projet :P

tl;dr:
Eventually
, on pourra compiler, pour nos CE, du C récent (pas le vieux ANSI C de Zilog), voire du C++, et en théorie d'autres langages proposés en front-end de LLVM :)

Bon, il y a encore du boulot, bien sûr, d'autant plus que l'aspect 16/24bit du CPU donne du fil à retordre, mais... ça avance...
User avatar
AdriwebAdmin
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Level up: 54.3%
 
Posts: 12948
Images: 1086
Joined: 01 Jun 2007, 00:00
Location: France
Gender: Male
Calculator(s):
Class: (ingénieur)
Twitter: adriweb
GitHub: adriweb

Re: Nouveaux travaux sur un compilateur C pour (e)Z80 via LL

Unread postby critor » 06 Mar 2016, 19:59

Adriweb wrote:L'absence de réponse veut probablement dire que peu de gens saisissent l'importance de ce projet :P

Au contraire, mais effectivement j'ai omis de prendre le temps de répondre
(pour faire d'autres choses)
, c'est pas bien.
Image
User avatar
critorAdmin
Niveau 19: CU (Créateur Universel)
Niveau 19: CU (Créateur Universel)
Level up: 6%
 
Posts: 35486
Images: 9479
Joined: 25 Oct 2008, 00:00
Location: Montpellier
Gender: Male
Calculator(s):
Class: Lycée
YouTube: critor3000
Twitter: critor2000
Facebook: critor.ti

Online

Re: Nouveaux travaux sur un compilateur C pour (e)Z80 via LL

Unread postby Ti64CLi++ » 16 Mar 2016, 16:34

Adriweb wrote:L'absence de réponse veut probablement dire que peu de gens saisissent l'importance de ce projet :P

Je saisis l'importance de ce sujet, mais ne voyais pas l'utilité de ma réponse. ;)
En tout cas, bravo à Jacobly.

Concernant son émulateur de z80 pour Nspire, l'as-t-il modifié?
Image
User avatar
Ti64CLi++Modo
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Level up: 85.1%
 
Posts: 3245
Images: 61
Joined: 04 Jul 2014, 14:40
Location: Clermont-Ferrand 63
Gender: Male
Calculator(s):
Class: Maths Sup
GitHub: Ti64CLi

Re: Nouveaux travaux sur un compilateur C pour (e)Z80 via LL

Unread postby Adriweb » 16 Mar 2016, 18:51

neuronix wrote:Concernant son émulateur de z80 pour Nspire, l'as-t-il modifié?

Pour autant que je sache, pas récemment.
User avatar
AdriwebAdmin
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Level up: 54.3%
 
Posts: 12948
Images: 1086
Joined: 01 Jun 2007, 00:00
Location: France
Gender: Male
Calculator(s):
Class: (ingénieur)
Twitter: adriweb
GitHub: adriweb

Re: Nouveaux travaux sur un compilateur C pour (e)Z80 via LL

Unread postby Adriweb » 01 Apr 2017, 14:14

Et environ un an après, après de très nombreuses heures de travail par Jacobly, llvm-ez80 a fort bien avancé ;)

Oiram, par exemple, a pu être compilé avec succès.
Image

C'est cela dit pas terminé, il y a encore des bugs, des choses non supportées, etc.

Une version expérimentale devrait être intégrée au Project Builder, aux côtés de ZDS, prochainement...
Edit: c'est fait !




Pour tester... (une fois les dépendances de build installées)
Code: Select all
git clone https://github.com/jacobly0/llvm-z80.git llvm && svn co http://llvm.org/svn/llvm-project/llvm/trunk -r 318998 --force llvm && svn co http://llvm.org/svn/llvm-project/cfe/trunk -r 318998 --force llvm/tools/clang

puis
Code: Select all
mkdir -p llvm/build/Debug && cd llvm/build/Debug && cmake ../.. -GNinja -DCMAKE_BUILD_TYPE=RelWithDebInfo -DLLVM_ENABLE_ASSERTIONS=On -DLLVM_ENABLE_PEDANTIC=Off -DLLVM_ENABLE_WARNINGS=Off -DLLVM_TARGETS_TO_BUILD= -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=Z80 -DLLVM_PARALLEL_COMPILE_JOBS=4 -DLLVM_PARALLEL_LINK_JOBS=1 -DBUILD_SHARED_LIBS=ON && cmake --build .

Et enfin par exemple
Code: Select all
./bin/clang -target ez80 -xc - -S -o- <<<'void test(void){}'

Ce qui donnera le code ASM ez80.
User avatar
AdriwebAdmin
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Level up: 54.3%
 
Posts: 12948
Images: 1086
Joined: 01 Jun 2007, 00:00
Location: France
Gender: Male
Calculator(s):
Class: (ingénieur)
Twitter: adriweb
GitHub: adriweb

Re: Nouveaux travaux sur un compilateur C pour (e)Z80 via LL

Unread postby Lionel Debroux » 01 Apr 2017, 15:43

Parvenir à compiler des programmes non triviaux comme Oiram d'une part, et ensuite faire en sorte que ce qui est compilé ne fasse pas totalement n'importe quoi, sont des étapes très importantes :)
Bravo jacobly.
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
User avatar
Lionel DebrouxSuper Modo
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Level up: 6.9%
 
Posts: 6518
Joined: 23 Dec 2009, 00:00
Location: France
Gender: Male
Calculator(s):
Class: -
GitHub: debrouxl

Re: Nouveaux travaux sur un compilateur C pour (e)Z80 via LL

Unread postby Egocar » 18 Apr 2018, 06:03

Je suis content du succès.
User avatar
Egocar
Niveau 0: MI (Membre Inactif)
Niveau 0: MI (Membre Inactif)
Level up: 0%
 
Posts: 2
Joined: 18 Apr 2018, 05:55
Gender: Not specified
Calculator(s):

Re: Nouveaux travaux sur un compilateur C pour (e)Z80 via LL

Unread postby parisse » 15 Jul 2018, 13:02

Adriweb wrote:puis
Code: Select all
mkdir -p llvm/build/Debug && cd llvm/build/Debug && cmake ../.. -GNinja -DCMAKE_BUILD_TYPE=RelWithDebInfo -DLLVM_ENABLE_ASSERTIONS=On -DLLVM_ENABLE_PEDANTIC=Off -DLLVM_ENABLE_WARNINGS=Off -DLLVM_TARGETS_TO_BUILD= -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=Z80 -DLLVM_PARALLEL_COMPILE_JOBS=4 -DLLVM_PARALLEL_LINK_JOBS=1 -DBUILD_SHARED_LIBS=ON && cmake --build .


Cette commande echoue chez moi, avec l'erreur suivante:
Code: Select all
CMake Error: CMake was unable to find a build program corresponding to "Ninja".  CMAKE_MAKE_PROGRAM is not set.  You probably need to select a different build tool.
CMake Error: CMAKE_C_COMPILER not set, after EnableLanguage
CMake Error: CMAKE_CXX_COMPILER not set, after EnableLanguage
CMake Error: CMAKE_ASM_COMPILER not set, after EnableLanguage
-- Configuring incomplete, errors occurred!

Il doit surement manquer quelque chose d'evident...
User avatar
parisseVIP++
Niveau 12: CP (Calculatrice sur Pattes)
Niveau 12: CP (Calculatrice sur Pattes)
Level up: 0.9%
 
Posts: 2011
Joined: 13 Dec 2013, 16:35
Gender: Not specified

Re: Nouveaux travaux sur un compilateur C pour (e)Z80 via LL

Unread postby IAMISSAM » 15 Jul 2018, 13:11

Il te manque "ninja", pour l'installer : https://github.com/ninja-build/ninja/wi ... a-packages
User avatar
IAMISSAMProgrammeur
Niveau 15: CC (Chevalier des Calculatrices)
Niveau 15: CC (Chevalier des Calculatrices)
Level up: 33.4%
 
Posts: 63
Joined: 11 Sep 2015, 21:56
Gender: Not specified
Calculator(s):
Class: Terminale S SI

Next

Return to Actualités

Who is online

Users browsing this forum: No registered users and 10 guests

-
Search
-
Featured topics
L'OS 5.5 de la TI-83 Premium CE / 84 Plus CE supprime l'assembleur - la plupart des jeux et certains programme ne fonctionneront plus
Omega, le fork étendant les capacités de ta NumWorks, même en mode examen !
Découvre les nouvelles fonctionnalités en Python de l'OS 5.5 pour la 83PCE/84+C-T Python Edition
Comparaisons des meilleurs prix pour acheter sa calculatrice !
1234
-
Donations / Premium
For more contests, prizes, reviews, helping us pay the server and domains...

Discover the the advantages of a donor account !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partner and ad
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
459 utilisateurs:
>433 invités
>20 membres
>6 robots
Record simultané (sur 6 mois):
6892 utilisateurs (le 07/06/2017)
-
Other interesting websites
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)