forum

Navigation du forum
Vous devez vous identifier pour créer des messages et des sujets.

Et le langage C finalement pour débuter ?

12

Bonjour,

Il y a quelques mois, je me suis essayé par ici à apprendre l'assembleur en partant de rien.

J'ai finalement réussi à afficher un sprite... Après, je pense, 30 à 40 heures de travail. Trop dur. Pour moi, et pour l'instant en tout cas. (mais rien de plus motivant que l'échec 🙂 )

Alors voilà, je vais me lancer dans l'apprentissage du C qui me semble un compromis correct et que j'espere accessible pour mon niveau.
Je voudrais savoir si vous aviez des ressources CPC pour ce langage à me partager car mon but reste de programmer un jeu sur CPC 6128 (old probablement).

Merci 

Hello,

J'avais vu passer des trucs sur le cross-developpement en C vers l'amstrad il y a quelques temps. J'ai fait une rapide recherche et je suis tombé là dessus:

http://www.cpcwiki.eu/index.php/Programming:Cross_Development#Cross_compilers_.28C.29

Un des liens pointe sur http://www.cpcmania.com/Docs/Programming/Programming.htm qui semble être pour toi.

Merci Fabricius ! C'est très gentil !

Cela à l'air faisable alors !

Est-ce que c'est un langage populaire sur CPC ? J'ai l'impression qu'il y a surtout de l'ASM d'un coté et du basic de l'autre.

Oui, les deux langages populaires sur cpc sont bien le BASIC et l'assembleur. Le 1er pour sa facilité et son accès direct sur la machine, le 2eme pour sa puissance.

Maraudeur, si tu parlais du C, non, c'est assez marginal je pense. La plupart des jeux ont été fait en assembleur ou en basic, et pour les jeux d'action, point de salut: c'est l'assembleur qui a été utilisé dans l'immense majorité. L'utilisation du langage C semble etre assez récente, car elle nécéssite un environnement de "cross-dev". Mais on dirait que faire des jeux en C est possible (sachant qu'au final, ce sera traduit en assembleur) et d'ailleurs les exemples sur http://www.cpcmania.com/Docs/Programming/Programming.htm le montrent. Un autre lien que j'ai trouvé:

http://lronaldo.github.io/cpctelera/files/readme-txt.html#Installing_CPCtelera

et encore un: http://cpcfreak.cpc-live.com/

(un des jeu est clairement marqué comme ecrit en C avec SDCC)

Bon courage!

Bonjour à tous.

Longtemps les compilateurs C ont été inefficaces, beaucoup trop lents pour tourner sur un CPC et même pendant 20 ans après, produisant du code assembleur lourd et lent. Les choses se sont beaucoup améliorées. La vitesse et la capacité de stockage astronomiquement supérieures d'un PC moderne facilite beaucoup de choses.

L'intérêt d'un environnement de cross-compilation est multiple : avoir tout le confort d'une machine moderne rapide, gérer tous les "assets" d'une production, avoir l'historique du développement avec git, débugger la partie portable du code dans un environnement moderne.

La plupart de ceux qui veulent tenter coder en C pour CPC ne devraient pas tenter de se débrouiller avec un compilateur tout seul. Ce serait comme vouloir faire un tour de France en commençant par s'acheter un moteur de voiture.

L'outil idéal est une toolchain intégrée. Pour les débutants, l'option recommandée est CPCTelera. Pour ceux qui savent déjà programmer en C, voire qui sont des geeks de Linux, l'option recommandée est cpc-dev-tool-chain.

Regardez https://doublesidedgames.com/cpc-gamedev-contest-entries/ , participants au concours de programmation 2020 de "Amstrad CPC forever and beyond". Les trois premiers ont été écrits en C. Les trois utilisent Arkos Tracker 2 pour la musique.

Le premier avec CPCTelera plus routines d'overscan et de sample audio. Pas beaucoup de mouvement à l'écran, seulement une balle. CPCtelera peut faire bien plus.

Le second avec CPCTelera. Presque rien ne bouge à l'écran. CPCtelera peut faire bien plus.

Le troisième avec cpc-dev-tool-chain. Overscan vertical, animation de tuiles à 50Hz garanti, sur une surface de 240x248 pixels. (C'est moi qui l'ai écrit.)

Note : j'ai écrit cpc-dev-tool-chain. CPCtelera est un "fork" de cpc-dev-tool-chain par Francesco Gallego, qui a ajouté des routines de sprites 2D optimisées totalement documentées, alors que cpc-dev-tool-chain est plus expérimental, couvre plus généralement le cas de C qui appelle le firmware, est plus léger et l'esprit tourné vers une plus grande variété de productions.

Pour toi Maraudeur qui mentionne des sprites, CPCtelera semble l'idéal.

Amusez-vous bien !

 

Auteur de https://github.com/cpcitor/cpc-dev-tool-chain et récemment de https://gourichon.org/cpcitor/justget9/beta/ primé au concours 2020 du groupe "Amstrad CPC forever and beyond". Professionnel du logiciel, disponible pour sauver les projets chez votre employeur. Plus c'est difficile et contraint plus je fais des merveilles. Je suis sérieux, voir https://fidergo.fr/

Si "C qui appelle le firmware" est du chinois pour vous, imaginez que vous écrivez du C mais vous avez à votre disposition toutes les routines que les concepteurs du CPC ont voulu rendre disponibles depuis l'assembleur et qui sont disponibles depuis le BASIC, mais sans la lenteur du BASIC.

Modes, palette, texte, lignes, redéfinition de caractères, son, scrolling hard horizontal et vertical (!), double buffer graphique (!), lecture et écriture cassette et disquette, son, routine d'interruption qui coopère avec le firmware, imprimer.

Pour un aperçu de la liste officielle, et desquels sont disponible dans cpc-dev-tool-chain, voir https://cdn.rawgit.com/cpcitor/cpc-dev-tool-chain/master/cpclib/cfwi/coverage.html

 

Auteur de https://github.com/cpcitor/cpc-dev-tool-chain et récemment de https://gourichon.org/cpcitor/justget9/beta/ primé au concours 2020 du groupe "Amstrad CPC forever and beyond". Professionnel du logiciel, disponible pour sauver les projets chez votre employeur. Plus c'est difficile et contraint plus je fais des merveilles. Je suis sérieux, voir https://fidergo.fr/

Merci Cpcitor.
De voir des outils et des résultats (les 3 premiers écrits en C ! ! Est-ce que cela annonce un changement sur la scène CPC ?) c'est motivant et exaltant.

Mon but reste de rejoindre la scène homebrew CPC, je me rend compte de mes lacunes (comment fonctionne un jeu ... toutes les bases et l'architecture d'un jeu...)
Je commence à apprendre le Lua, un langage scripté bien loin de l'ASM mais qui a des points communs avec le C tout en étant encore plus facile.
Bien sur, en tant que langage scripté, il ne peut pas me servir pour le CPC, mais si j'arrive à développer des jeux avec ce langage (framework Love2d), ça m'aura grandement approché de mon objectif...

Je me suis inscris à Gamecodeur (si certains connaissent...) pour l'instant je trouve cela vraiment très bien pour moi, il y a beaucoup de contenus et le parcours pour débutant commence vraiment à 0.

Intéressant que tu cites Lua. Il est très léger (pour une machine moderne) mais reste interprété donc plus lent que du C (qui est de l'assembleur au moment de l'exécution), et encore limite trop lourd pour tourner sur un CPC, à cause de la consommation mémoire du runtime.

Ton approche de commencer par Lua/Love2D me semble tout à fait pertinente.

J'oubliais de préciser : les frameworks pour permettre d'écrire en C contiennent des routines en assembleur pour faire le pont entre les deux mondes et fournir des routines généralement utiles.

Dans CPCtelera le choix est fait de fournir de nombreuses routines adaptées pour les jeux avec des sprites 2D. Elles sont très bien optimisées pour leur but, mais restent des routines génériques.

Dans cpc-dev-tool-chain, des routines assembleur minimales en prenant soin que n'atterrissent dans le CPC que les routines effectivement utilisées. Plutôt que de fournir des routines "bien mais génériques", le choix est de considérer que sur CPC la meilleure performance ne peut être obtenue qu'avec des routines perso de toute façon. Just Get 9 contient des routines assembleur spécifiques :

* dessiner le fond d'écran à partir d'un sprite 48x32
* à partir d'une fonte, ecrire du texte entouré d'un filet noir pour la lisibilité
* dessiner une tuiles, une grille entière
* dessiner l'immense curseur graphique (40x40),
* animer (une seule routine assembleur) de façon parfaitement fluide la chute des tuiles dans la grille après que le joueur en a fait disparaître
* jouer la musique dans une interruption appelée par le firmware

Vidéo de présentation de Just Get 9 https://www.youtube.com/watch?v=SV1p-M-5zLQ

Tout le monde peut jouer à Just Get 9 en un clic sur https://gourichon.org/cpcitor/justget9/beta/ (il y a un émulateur d'Amstrad CPC directement dans la page web).

Auteur de https://github.com/cpcitor/cpc-dev-tool-chain et récemment de https://gourichon.org/cpcitor/justget9/beta/ primé au concours 2020 du groupe "Amstrad CPC forever and beyond". Professionnel du logiciel, disponible pour sauver les projets chez votre employeur. Plus c'est difficile et contraint plus je fais des merveilles. Je suis sérieux, voir https://fidergo.fr/
Citation de Maraudeur le 8 juin 2020, 23 h 17 min

Mon but reste de rejoindre la scène homebrew CPC, je me rend compte de mes lacunes (comment fonctionne un jeu ... toutes les bases et l'architecture d'un jeu...)

Pas le temps de faire un cours, mais pour donner une idée de ce qui est codé en C dans Just Get 9, en dehors des routines ASM citées plus haut :

  • logique des pages interactives avant de jouer, fonction C pour chaque page
  • incluant logique de boutons, radio bouton, déplacement d'un bouton à l'autre (données spécifiées dans un struct C)
  • routine pour transformer un événement touche en événement signifiant (haut/bas/gauche/droite/action/quitter)
  • routine calculant à partir des valeurs de la grille quelles cases peuvent être jouées et lesquelles disparaîtraient si le joueur la jouait (assez compliquée, le serait bien plus en assembleur)
  • routine de calcul d'un nombre pseudo-aléatoire à base d'algorithme xorshift

Just Get 9 n'est pas encore open-source, cependant ma production précédente, bien moins spectaculaire (pas de joli graphismes, pas de musique) mais les mêmes outils et principes, est open-source. On apprend la même chose en regardant son code comme on regardera celui de JustGet9 quand il sera publié. Le code source de Color Flood : https://github.com/cpcitor/color-flood-for-amstrad-cpc .

Une façon d'expérimenter le C pour CPC est d'en récupérer une copie, par exemple

git clone https://github.com/cpcitor/color-flood-for-amstrad-cpc

puis de suivre les instructions de la page https://github.com/cpcitor/color-flood-for-amstrad-cpc (installation de quelques paquetages) et ensuite

make dsk

qui compile et crée une image disquette, ou mieux encore mais avec Linux seulement :

make run

qui lance le jeu dans un émulateur.

De là, tu peux expérimenter, casser ou changer des trucs. Ou fais la même chose avec un jeu CPCtelera open-source.

C'est complémentaire de partir d'un projet vide ou suivre un tuto.

Citation de Maraudeur le 8 juin 2020, 23 h 17 min

Merci Cpcitor.
De voir des outils et des résultats (les 3 premiers écrits en C ! ! Est-ce que cela annonce un changement sur la scène CPC ?) c'est motivant et exaltant.

Je pense que la plupart des productions utiliseront au moins en partie du C désormais.

Tout cela est rendu possible par l'existence de SDCC qui est un bon compilateur C vers processeurs 8 bits. S'il n'avait pas existé un tel compilateur, on ne verrait pas CPCRetroDev ni autant de productions en C.

cpc-dev-tool-chain et son fork CPCtelera sont essentiellement des écrins qui facilitent l'utilisation de SDCC.

 

Bon courage avec Lua et Gamecodeur !

Tu peux aussi jouer avec pico8 : c'est du Lua aussi https://www.lexaloffle.com/pico-8.php

Cependant, reste attentif à la performance, avec Lua et Pico8 on est un peu sur un nuage, quand on code sur Z80 pour de vrai, on sent le prix de chaque cycle d'horloge. 🙂

 

Auteur de https://github.com/cpcitor/cpc-dev-tool-chain et récemment de https://gourichon.org/cpcitor/justget9/beta/ primé au concours 2020 du groupe "Amstrad CPC forever and beyond". Professionnel du logiciel, disponible pour sauver les projets chez votre employeur. Plus c'est difficile et contraint plus je fais des merveilles. Je suis sérieux, voir https://fidergo.fr/
12