Skip to content

ptitmorceaux/dessinsterrifiants

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

104 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

dessinsterrifiants

Un petit projet en assembleur qui dessine (cercles, formes...) et dont les exécutables sont produits dans output/.

Ce README explique comment préparer un environnement pour compiler et exécuter les étapes localement, comment générer des captures d'écran, et quelques solutions pour Windows (WSL / Docker).

Prérequis

Les commandes ci-dessous partent du principe d'un environnement Linux (ou WSL). Les exécutables sont générés avec nasm + gcc via le Makefile.

  • nasm
  • gcc
  • make
  • libx11-dev (pour l'affichage X11 lors de l'exĂ©cution)
  • xvfb (pour exĂ©cuter en Ă©cran virtuel et prendre des captures)
  • imagemagick (outil import pour capturer l'Ă©cran)

Sur Ubuntu / Debian :

sudo apt update
sudo apt install -y nasm gcc make libx11-dev xvfb imagemagick

Pour Windows, deux options recommandées :

  • Utiliser WSL2 (recommandĂ©) : installez WSL2 et une distribution Ubuntu, puis suivez les commandes Ubuntu ci-dessus.
  • Utiliser Docker : voir la section "Docker" plus bas.

Remarque : le dépÎt contient un workflow GitHub Actions qui utilise xvfb pour exécuter les binaires et générer des captures (fichier .github/workflows/captures.yml). Vous pouvez vous en inspirer.

Compilation

Le Makefile contient des cibles pour chaque étape : etape1, etape2, etape3, etape4 (ou etape4_1, etape4_2 selon le dépÎt). Pour compiler toutes les étapes :

make all

Ou compiler les étapes individuellement :

make etape1
make etape2
make etape3
make etape4

Pour nettoyer :

make clean   # supprime les .out
make fclean  # supprime .out et .o

Exécution

Les exécutables produits se trouvent dans output/ et s'appellent etape1.out, etape2.out, etc.

Exemple d'exécution locale (sur un vrai serveur X ou via X11 forwarding) :

./output/etape1.out

Sur une machine sans affichage (serveur CI / headless) vous pouvez utiliser xvfb-run pour fournir un écran virtuel :

xvfb-run --auto-servernum -s "-screen 0 800x600x24" ./output/etape1.out

Adaptez 800x600 à la taille définie dans le fichier etapes/common.asm (%define WIDTH / HEIGHT). Le workflow GitHub Actions lit automatiquement ces valeurs.

Générer des captures d'écran

Deux méthodes :

  1. Utiliser le workflow GitHub Actions (automatique)
  • Le fichier .github/workflows/captures.yml compile les exĂ©cutables et lance chaque binaire sous xvfb-run, puis utilise import (ImageMagick) pour capturer l'Ă©cran dans output/screenshots/.
  1. Localement (WSL / Linux) :
mkdir -p output/screenshots
WINDOW_WIDTH=$(grep '%define WIDTH' etapes/common.asm | awk '{print $3}')
WINDOW_HEIGHT=$(grep '%define HEIGHT' etapes/common.asm | awk '{print $3}')

for etape in etape1 etape2 etape3 etape4_1 etape4_2; do
	xvfb-run --auto-servernum -s "-screen 0 ${WINDOW_WIDTH}x${WINDOW_HEIGHT}x24" sh -c "./output/${etape}.out & sleep 5; import -window root output/screenshots/${etape}.png"
done

Sur Windows + WSL, exécutez ces commandes dans la distribution WSL.

Docker (optionnel)

Si vous préférez isoler l'environnement, vous pouvez utiliser Docker. Exemple rapide :

  1. Créez un Dockerfile basé sur Ubuntu et installez les dépendances (nasm, gcc, make, libx11-dev, xvfb, imagemagick).
  2. Montez le dépÎt et lancez make all puis le script de capture ci-dessus à l'intérieur du container.

Je n'ai pas inclus ici de Dockerfile par dĂ©faut ; si vous voulez, je peux en fournir un prĂȘt Ă  l'emploi.

Dépannage

  • Erreur "nasm: command not found" -> installez nasm.
  • Erreur lors de l'ouverture d'une fenĂȘtre X -> utilisez xvfb-run en headless, ou exĂ©cutez dans un environnement X (WSL avec serveur X, ou Linux natif).
  • Les captures sont noires ou blanches -> vĂ©rifiez que le binaire a le temps de dessiner (ajuster sleep), et que les dimensions (WIDTH/HEIGHT) sont correctes.

Notes techniques

  • Les dimensions de la fenĂȘtre sont dĂ©finies dans etapes/common.asm via les macros %define WIDTH et %define HEIGHT. Le workflow d'automatisation lit ces valeurs pour configurer l'Ă©cran virtuel.
  • Les exĂ©cutables finissent gĂ©nĂ©ralement en output/*.out.

Contribuer

Ouvrez une issue ou faites une PR si vous souhaitez : ajouter un Dockerfile, améliorer les captures, ou ajouter des cibles Make supplémentaires.


Si vous voulez, je peux :

  • ajouter un Dockerfile prĂȘt Ă  l'emploi et un script scripts/capture.sh ;
  • ou gĂ©nĂ©rer un petit guide PowerShell pour lancer WSL + Make depuis Windows.

Dites-moi ce que vous préférez et je l'ajoute.

About

🎹 A student project carried out at ESGI implementing the "Circle Packing" algorithm in x86-64 assembly language (NASM) with the X11 graphics library.

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors