Cela fait depuis quelques temps que je travaille autour d'un compilateur C pour Amstrad CPC. Ce travail étant à présent terminé, voilà la version 1.0 !
Le nom du compilateur est PhrozenC, et est disponible sous plusieurs versions : - une version PC en ligne de commande ...mais le meilleur est à venir : - une version CPC format ROM (version à préférer si possible) - une version CPC format 64Kb (executable standalone puis reset) - une version CPC format 128Kb-RSX
Quelle est la particularité du truc ? Sur PC, on compile un .C et ça donne en output un .ASM prêt à être compilé sous WinAPE Sur CPC, on compile un .C et ça donne en output le même .ASM prêt à être compilé sous... Maxam ! Je tiens à préciser que dans les deux cas, on se retrouvera avec le même .ASM généré. Chacun peut donc choisir comment programmer en C pour CPC, que ce soit sur CPC pour les puristes (bonheur que je peux comprendre aisément ou bien en utilisant un PC pour profiter d'une compilation ultra-rapide.
Le tout vient avec une documentation au format PDF de 33 pages, qui couvre tout ce qu'il est nécessaire de savoir pour se lancer dans la programmation C sur CPC avec PhrozenC. Il y a même un petit tutorial de programmation en C pour les néophytes.
Dans la même lignée, il y a des sources d'exemple et même quelques librairies utilitaire pour aider à la gestion de fichiers, mémoire, graphisme, manipulation de chaines de caractère, etc..
Enfin, il s'agit d'une version 1.0 . Contrairement à une démo ou un jeu qui se veulent par définition "la version diffusée est la version finale, je n'y touche plus", j'ai bien l'intention d'être attentif aux retours et de faire évoluer les versions en conséquence.
SVP avant toute question technique, veuillez-vous assurer d'avoir bien lu la doc.
Merci à toutes les personnes qui ont pu m'aider de près comme de loin au portage du compilo ! Car ça a pas été une mince affaire, cette histoire...
Oui, c'est bien ca, ca converti directement un .C en source .ASM
Par contre il y a pas de notion de link, c'est vraiment une conversion complete d'un source C vers un fichier ASM (les INCLUDE sont autorisés, donc tu peux inclure plusieurs sources C en un seul, donc gerer des libs de cette maniere).
SVP, lire la doc... ca m'a pris une semaine complete pour la faire pour essayer de prevoir toutes les questions, 36 pages c'est pas rien, donc la lire puis ensuite poser les questions techniques seulement si pas présent dans la doc, merci.
La version 1.1. est déjà en cours, dont 2 bugfixes importants à venir.
Pour le moment, à part quelques reactions positives, pas vraiment de veritable engouement au portillon. Qu'importe, car toutes mes prochaines prods seront malgres tout developpées avec PhrozenC, et c'est toujours bien de paufiner ses outils maison
fano: non, PhrozenC restera K&R. Si tu souhaites du Ansi C, je te suggeres de te rediriger vers SDCC ou (moins bien) z88dk.
Cela dit, reflechis un peu au contexte CPC, as-tu vment besoin des structs quand tu as fait 20 ans d'ASM ?
Pulko: les sources sont sur sourceforge ; cependant je ne souhaite pas me "divertir" a supporter la planete entière.. je me concentre donc sur ce qui est "mainstream" sur CPC, a savoir WinAPE et Maxam.
fano: pour une réponse un peu plus pro que tout a l'heure, sache que la version du compilo sur CPC une fois decompilé fait plus de 40Ko en RAM (avec tous les buffers initialisés pour la compilation) il y aurait bien du mal à rajouter de quoi... j'ai (déjà !) du introduire de la compression dedans pour tenir dans une taille correcte pour le système.
Version 1.1 - CC (Win32) Fixed crash when included file does not exist - Fixed crash when calling CC with a C file entirely created on a CPC - Fixed CS RSX-command usage. Now only ROM-based, but 100% safe. - Updated documentation with compiler internal section
Inscription : 12 Juin 2008, 20:29 Message(s) : 1709
j'ai vu un ptit truc à optimiser
code d'origine :
Code :
strcpy( dest, src ) char *dest; char *src; { #asm pop bc pop hl pop de push de push hl push bc
strcpyloop: ld a, (hl) ld (de), a or a ret z ld (de), a inc hl inc de jp strcpyloop #endasm }
optim :
Code :
strcpy( dest, src ) char *dest; char *src; { #asm pop bc pop hl pop de push de push hl push bc
xor a ; est-ce que c'est normal qu'on sauvegarde pas af par une push ?
strcpyloop: or (hl) ; si la chaine en entrée est vide faut mettre le test en premier ret z ldi ; sinon à quoi sert le pop/push BC d'avant ? ;-) jp strcpyloop #endasm }
durée code origine 16 nops -> durée optim 12 nops (+1 avant la boucle)
Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 10 invité(s)
Vous ne pouvez pas publier de nouveaux sujets dans ce forum Vous ne pouvez pas répondre aux sujets dans ce forum Vous ne pouvez pas éditer vos messages dans ce forum Vous ne pouvez pas supprimer vos messages dans ce forum Vous ne pouvez pas insérer de pièces jointes dans ce forum