Oui, une démo qui boote directement depuis le disque sans utiliser Kickstart ou les libs AmigaOS sera plus légère et plus rapide, car :
- Pas de dépendances système → Pas d’appels aux librairies AmigaOS comme
exec.library. - Pas de header AmigaOS → Tu économises les structures d’header et les relocations.
- Tout en RAM → Le code est exécuté directement après le chargement, sans overhead du système.
- Meilleur contrôle matériel → Tu peux écrire directement dans le hardware (Copper, Blitter, Paula).
📌 Comment faire une démo bootable minimaliste avec VBCC ?
1. Préparer un Bootblock minimaliste
Un Bootblock est exactement 1024 bytes, chargé en mémoire à l’adresse 0x7C00 puis exécuté.
Le format attendu par l’Amiga :
- 1024 bytes max
- Checksum valide
- Charge ensuite un payload plus gros si nécessaire
2. Compilation en VBCC avec un entry point custom
Ton code doit démarrer sans dépendance système, en désactivant toutes les interruptions AmigaOS :
📌 Exemple de Bootblock ultra-minimaliste en VBCC :
__asm__(
".section .text\n"
".globl _start\n"
"_start:\n"
" move.l #0x7FFFE,sp \n" // Stack pointer au sommet de la Chip RAM
" lea.l 0xDFF000,a6 \n" // Adresse du Custom Chipset Amiga
// Désactiver les interruptions
" move.w #0x7FFF,0xDFF09A \n" // Désactive toutes les interruptions
" move.w #0xC000,0xDFF096 \n" // Désactive les DMA
// Change la couleur de fond pour tester
" move.w #0x00F0,0xDFF180 \n"
// Boucle infinie (sinon ça crashe)
"end:\n"
" bra end \n"
);
📌 Ce code :
✅ Met en place la pile
✅ Désactive les interruptions et DMA
✅ Modifie la couleur du fond pour tester
✅ Boucle infiniment
🔗 3. Linker avec vlink pour générer un fichier bootable
Une fois compilé, tu dois le linker correctement sans header AmigaOS :
vc +kick13 -nostdlib -O=110 -fomit-frame-pointer -o bootblock.o bootblock.c
vlink -b rawbin -nostdlib -s -x bootblock.o -o bootblock
💡 Explication des flags :
-b rawbin→ Produit un binaire brut, sans format Hunk.-nostdlib→ Pas de standard library AmigaOS.-s -x→ Supprime toutes les infos superflues.
🎯 4. Copier le Bootblock sur une disquette ou un HDF
Si tu veux tester ton bootblock sur FS-UAE ou un vrai Amiga, tu dois le copier au début du disque :
dd if=bootblock of=disque.adf bs=512 count=2 conv=notrunc
💡 Explication :
bs=512 count=2→ Écrit 1024 bytes (2 secteurs de 512 bytes).conv=notrunc→ Ne pas tronquer le fichier disque.
Tu peux maintenant booter directement sur cet ADF avec FS-UAE ! 🚀
🛠 Debugging et tests
Si ton Bootblock ne fonctionne pas :
- Vérifie avec
hexdump -C bootblockqu’il fait 1024 bytes max. - Teste dans FS-UAE avec un ADF bootable.
- Ajoute des instructions
move.w #0xF00,0xDFF180pour afficher d’autres couleurs et voir jusqu’où le code passe.
Conclusion : Ultra-léger et rapide
Avec cette approche :
✅ Aucune dépendance AmigaOS (pas d’Exec, pas de librairies)
✅ Boot instantané dès l’insertion de la disquette
✅ Moins de 1024 bytes (et tu peux aller plus loin avec du pur ASM)
🔥 Prêt pour LoveBytes 256B ! Si tu veux encore plus réduire, on peut passer tout en assembleur pur. 😎
Oui, dd est un outil Unix standard, donc il est disponible par défaut sur Mac et Linux. C’est une commande de copie bas niveau qui permet d’écrire directement dans un fichier ou un périphérique bloc (comme un disque, une clé USB, ou une image disque).
📌 dd expliqué simplement
La commande dd fonctionne comme une photocopieuse binaire :
📀 Lis des données d’un fichier/disque ➝ les écrit ailleurs sans aucune transformation.
Syntaxe de base :
dd if=source of=destination [options]
if=→ Input file (source)of=→ Output file (destination)[options]→ Nombre de blocs, taille des blocs, conversions, etc.
🛠 Exemple d’utilisation pour Amiga ADF
1. Copier un bootblock sur un disque ADF
dd if=bootblock of=disque.adf bs=512 count=2 conv=notrunc
💡 Décryptage :
if=bootblock→ Prend ton fichier bootblock comme source.of=disque.adf→ Écrit dans l’image de disque ADF (fichier qui simule une disquette Amiga).bs=512→ Lit et écrit par blocs de 512 bytes (taille d’un secteur disque Amiga).count=2→ Écrit 1024 bytes (le bootblock doit faire exactement 1024 bytes).conv=notrunc→ Ne tronque pas le fichierdisque.adf(évite de le casser).
👉 Après ça, disque.adf peut être chargé dans FS-UAE comme une disquette bootable ! 🚀
2. Lire un Bootblock existant d’une image ADF
Si tu veux extraire un bootblock depuis un ADF existant, fais :
dd if=disque.adf of=extrait_bootblock bs=512 count=2
Ça va extraire les 1024 premiers bytes du disque et les sauvegarder dans extrait_bootblock.
3. Copier un ADF sur une vraie disquette Amiga (sur un vrai Amiga !)
Si tu es sur un vrai Amiga avec un lecteur de disquettes :
dd if=disque.adf of=/dev/fd0 bs=512
📀 Ça écrit directement l’image ADF sur une disquette physique.
🕵️ dd peut aussi être dangereux !
⚠️ ATTENTION ! Si tu te trompes de of= et écris sur un disque dur au lieu d’un fichier, tu peux écraser des données !
Par exemple, cette commande efface complètement un disque 😱 :
dd if=/dev/zero of=/dev/sdX bs=1M
Toujours vérifier la destination (of=) avant d’appuyer sur Entrée !
📌 Comment tester ton ADF dans FS-UAE ?
- Ajoute ton fichier
disque.adfdans FS-UAE en tant que disquette. - Démarre une configuration A500 sans disque dur.
- Si ton bootblock marche, il doit modifier la couleur de l’écran ou afficher quelque chose !
Si ça ne boot pas :
- Vérifie la taille du bootblock avec
ls -l bootblock(1024 bytes obligatoires !). - Regarde si le checksum est bon (tu peux aussi le forcer avec un script).
🚀 Conclusion :
✅ dd est inclus par défaut sur Mac et Linux.
✅ Il permet de copier, lire et écrire des images disques ADF.
✅ C’est l’outil clé pour tester des bootblocks sans système sur Amiga.
Prochaine étape : Tester dans FS-UAE et voir si ça boote bien ! 🚀
Je vais vous aider à compiler ce code pour une démo Amiga. Pour une démo de 256 bytes max (une intro), voici comment procéder avec vbcc :
-
D’abord, il faut sauvegarder ce code dans un fichier, disons
demo.s -
Pour la compilation avec vbcc, vous aurez besoin de créer un fichier linker script minimal
link.script:
MEMORY
{
chip : org = 0x000000, len = 0x000400
}
SECTIONS
{
.text : { *(.text) } >chip
}
- Voici la commande de compilation à utiliser :
vasmm68k_mot -Fhunkexe -kick1hunks -o demo.o demo.s
vlink -b amigahunk -o demo demo.o -sc link.script
Quelques observations sur votre code :
- L’initialisation du stack pointer est correcte à 0x7FFFE
- La désactivation des interruptions et du DMA est bien faite
- Vous modifiez la couleur de fond via le registre COLOR00 (0xDFF180)
Pour optimiser la taille et rester sous 256 bytes, vous pouvez :
- Utiliser des instructions plus courtes quand possible :
lea.lpeut être remplacé parmove.ldans certains cas- Utiliser des adressages relatifs quand possible
- Le code pourrait être encore plus compact en utilisant:
move.l #0x7FFFE,sp move.l #0xDFF000,a6 move.w #0x7FFF,(0x9A,a6) // Plus compact que l'adressage absolu move.w #0xC000,(0x96,a6) move.w #0x00F0,(0x180,a6)
Pour créer un disque bootable :
# Créer une image disque bootable
makedisk demo.adf demo
Voulez-vous que je vous aide à optimiser davantage le code pour réduire sa taille ?