Archive pour le mot-clef ‘bootloader’

Linux reconcilie DOS, Win98 et XP sur un même disque

Samedi 6 juin 2009

Depuis un petit moment, j’accumule sur les brocs quelques vieux jeux PC qui m’ont quand même bien amusés il y a quelques années. Contrairement au jeu console ancienne, c’est pas évident de retrouver une configuration de PC adapté à 20 évolutions de la machine. C’est pourquoi je me suis lancé dans la configuration d’un vieux PIII 950 Mhz avec 512 Mo de ram et deux HDD de 80Go, carte son ISA Gravis PnP & SB16 MCD, carte graphique ATI Fury Rage Pro 128,  une 3DFX voodoo2 pour les jeux utilisant Glide.

Bon clairement, les 160 Go de disques durs, ce n’est pas que pour les jeux DOS hein :) et puis le XP là dessus, c’est pour quoi faire ? hé bin peut-être une ébauche de borne Mame  qui sait !

Début difficile

J’ai bien envie de lâcher quelques grossièreté direct tellement j’en ai bavé à faire cohabiter ce beau monde. Il faut dire que Microsoft s’est plié en quatre pour nous pondre des installateur de merde (oups ça m’a échappé).  Si l’on en juge par la procédure du support MS, il est tout à fait possible d’arriver au résultat que j’attends. En bref, on installe le DOS puis Windows 98 et enfin windows XP et le tour est joué. Dans les faits, c’est une autre paire de manche …

Ma méthode

Après quelques installations répétées des divers OS   (mon CD de Windows 98 SE écrase mon installation DOS systématiquement quand j’exécute le fichier install.exe ou bien  il refuse tout simplement de s’installer si le PC  boote sur le CD au démarrage de la machine en invoquant que mon disque dur contient déjà un OS ), je décide d’installer les OS séparément en effectuant une image de la partition en fin d’installation.

Pour rappel, le DOS 6.2 et Windows 98 ont besoin d’une partition primaire bootable. Un disque peut contenir jusqu’à 4 partitions primaires mais une seule peut-être bootable. Autre remarque, le DOS 6.2 s’installe sur une partition formatée en FAT16 (donc limité à 2Go en taille). Windows 98 support la FAT16 et la FAT32 avec une taille de partition max de 32Go. Enfin Windows XP supporte une installation en FAT32 et en NTFS.

Une fois terminé, j’ai donc 3 images de partitions correspondantes à ces fameux OS. Pour pouvoir faire cohabiter tous ce beau monde, il nous faut un bootloader. C’est là qu’intervient notre linux.

Grub, le bootloader de la mort qui tue

Comme je suis attaché à la distribution linux Ubuntu, je décide de partir sur l’installation de la 8.1 qui est une version stable et compatible avec mon PIII. Un petit coup de fdisk depuis le LiveCD d’Intrepid. Je génère mes partitions comme suit :

Périphérique Amorce    Début         Fin      Blocs    Id  Système
/dev/sda1            6639        9704    24627645   17  Hidden HPFS/NTFS
/dev/sda2   *           1         258     2072353+   6  FAT16
/dev/sda3             259        1822    12562830    5  Extended
/dev/sda4            1823        6638    38684520   1c  Hidden W95 FAT32 (LBA)
/dev/sda5             259         519     2096451    6  FAT16
/dev/sda6             520         780     2096451    6  FAT16
/dev/sda7             781        1041     2096451    6  FAT16
/dev/sda8            1042        1742     5630751   83  Linux
/dev/sda9            1743        1822      642568+  82  Linux swap / Solaris

J’en profite pour installer Ubuntu sur une partition logique de 5Go. Je déclare chaque système d’exploitation dans le fichier /boot/grub/menu.lst (fichier de configuration de Grub) :

title        Microsoft Windows XP Professionnel
hide            (hd0,1)    # cache MSDOS622
hide            (hd0,3)    # cache WIN98SE
unhide          (hd0,0)    # rend visible WINXP
unhide          (hd1,0)    # rend mon second disque visible
unhide          (hd1,1)    # idem
unhide          (hd1,2)    # idem
rootnoverify    (hd0,0)
savedefault
chainloader    +1
makeactive                 # la partition devient bootable
title        Windows 95/98/Me
hide            (hd0,1)    # cache MSDOS622
unhide          (hd0,3)    # WIN98SE
hide            (hd0,0)    # cache WINXP
hide            (hd1,0)    # et le second disque
hide            (hd1,1)    #
hide            (hd1,2)    #
rootnoverify    (hd0,3)
savedefault
chainloader    +1
makeactive

title           MSDOS 6_22
unhide          (hd0,1)    # MSDOS622
hide            (hd0,3)    # WIN98SE
hide            (hd0,0)    # WINXP
hide            (hd1,0)
hide            (hd1,1)
hide            (hd1,2)
rootnoverify    (hd0,1)
savedefault
chainloader     +1
makeactive

Enfin, je restaure sur chaque partition primaire l’image ghost de chacun des OS. Un petit reboot est le tour est joué !

Et maintenant, à moi la joie de la configuration de mon config.sys et autoexec.bat :)

MMC2IEC, SD2IEC : l’émulateur floppy hard sur C64/128

Lundi 25 mai 2009

Au début, il y avait le MMC2IEC

Depuis quelques semaines,  je me penche sur cet émulateur de disquettes remplaçant en partie le fonctionnement d’un lecteur Commodore 1541 pour C64/128.  La disponibilité des sources du firmware a permis de faire évoluer cette interface en améliorant sa compatibilité avec le lecteur original. D’un autre côté, l’implantation hard et schématique des composants a laissé libre au cours au clonage intensif !

Bref pour s’y retrouver dans cette jungle de clones,  je suis parti du schéma de base de Lars  Pontoppidan pour effectuer mes premiers tests. Cette interface utilise un µc Atmega32 en support DIP que l’on peut trouver facilement dans le commerce. L’oscillateur interne réglé à 8Mhz suffit au fonctionnement de cet émulateur hard mais certaines fonctionnalités comme le chargement rapide ou « Fast Loader » n’est pas émulé. L’ajout d’un quartz externe peut améliorer cette compatibilité qui n’est pas aujourd’hui parfaite. Toujours est-il que le firmware de base est arrêté à la version 0.8 dont les sources et les fichiers binaires sont disponibles ici.

Emulateur floppy 1541 pour C64

Emulateur floppy 1541 pour C64

De ce travail naquis le SD2IEC

Pour tirer la quintescence de cette interface, il nous faut passer la vitesse supérieure. On garde le circuit imprimé existant en remplaçant le µc par un Atmega644 (c’est le nouveau micro-contrôleur choisi pour poursuivre le développement de cette carte). Celui ci est compatible « pin à pin » avec son prédécesseur.  La mise à jour du firmware est disponible ici. Les avantages de cette dernière évolution sont :

  • mise à jour du firmware via l’installation d’un bootloader au préalable
  • gestion de plusieurs « fast loaders » (l’execution de code sur le 1541 ne fonctionne pas)
  • compatible avec le design MM2IEC

Concernant ma version, j’ai ajouté un régulateur 5V et 3.3V respectivement à base de 7805 et LM317 (je n’avais pas de LF33 en stock). J’ai cablé un connecteur HE10 coudé pour connecter le programmateur ISP.

Chargement du firmware ou du bootloader

Pour se faire, j’ai utilisé un programmateur ISP maison à travers le port // dont le schéma de principe est ici.  Ce type de programmation est préconisée puisque le mode JTAG doit être désactivé pour que le microcode fonctionne correctement !

J’ai utilisé PonyProg. Il existe une version patchée de ce logiciel qui prend mieux en charge l’atmega644p. Pour ma part et avant d’être au courant, je n’ai eu qu’à forcer la programmation une à deux fois après avoir préalablement choisi le µc Atmega 644 dans la liste proposée.

Liens

La base du projet MMC2IEC par Lars Pontoppidan (en Anglais)

La longue liste de clones MMC2IEC / SD2IEC (en Allemand)

Le wiki firmware SD2IEC (en anglais)