draft: FreeDOS

This commit is contained in:
Cédrix
2026-05-16 23:56:32 +02:00
parent a62dd12ece
commit 417a184e37
3 changed files with 329 additions and 2 deletions
@@ -1,4 +1,4 @@
{
"title": "FreeDOS",
"_updated_at": "2026-05-16 21:54:50"
"_updated_at": "2026-05-16 21:56:32"
}
@@ -199,4 +199,329 @@ Une image FreeDOS complète pèse environ 230 Mio, bien plus qu'une disquette 3,
---
Veux-tu que je détaille un point précis — par exemple le partage réseau avec mTCP, l'optimisation de la mémoire EMS/XMS sous DOS, ou un script de lancement automatisé pour QEMU ?
Voici les deux sections ajoutées à intégrer à la fin de ta documentation, juste avant la bibliographie.
---
# Optimisation de la mémoire EMS/XMS sous DOS
DOS a été conçu à une époque où 640 Ko de RAM semblaient infinis. Cette limite — la fameuse *conventional memory* — est devenue un casse-tête dès que les programmes ont grossi. Comprendre les différents types de mémoire est essentiel pour faire tourner correctement les vieux jeux et logiciels.
## Les différents types de mémoire
**Conventional memory (0 640 Ko)** : la mémoire de base utilisable par tous les programmes DOS. C'est la ressource la plus précieuse — beaucoup de jeux exigent 580 Ko ou plus de libre.
**Upper Memory Area / UMA (640 Ko 1 Mo)** : zone réservée au BIOS et aux périphériques, mais avec des "trous" (UMB, *Upper Memory Blocks*) où l'on peut loger des pilotes pour libérer la mémoire conventionnelle.
**High Memory Area / HMA (1024 1088 Ko)** : les premiers 64 Ko au-dessus de 1 Mo, accessibles en mode réel grâce à une astuce du 80286. On y charge typiquement une partie de DOS.
**Extended Memory / XMS (au-delà de 1 Mo)** : mémoire linéaire au-delà du premier mégaoctet, gérée par `HIMEM.SYS`. Utilisée par Windows 3.x, les jeux récents (Doom, Quake DOS), les disques RAM et caches.
**Expanded Memory / EMS** : ancien système de pagination (fenêtre de 64 Ko qui pointe vers une grande zone de RAM). Demandé par des jeux et logiciels plus anciens (Ultima 7, Wing Commander, Lotus 1-2-3). Émulé via `EMM386.EXE` à partir de la mémoire étendue.
## Configuration recommandée pour FreeDOS
Édite (ou crée) le fichier `C:\FDCONFIG.SYS` — l'équivalent de `CONFIG.SYS` sous FreeDOS :
```
DOS=HIGH,UMB
DEVICE=C:\FREEDOS\BIN\HIMEM.EXE
DEVICE=C:\FREEDOS\BIN\EMM386.EXE RAM
DEVICEHIGH=C:\FREEDOS\BIN\ANSI.SYS
FILES=40
BUFFERS=20
STACKS=9,256
SHELL=C:\FREEDOS\BIN\COMMAND.COM /E:512 /P
```
**Explication ligne par ligne :**
- `DOS=HIGH,UMB` : charge le noyau DOS dans la HMA et active l'usage des UMB
- `HIMEM.EXE` : gestionnaire de mémoire XMS, indispensable
- `EMM386.EXE RAM` : active à la fois EMS (émulé) et UMB. Utilise `NOEMS` à la place si tu n'as besoin que des UMB sans émulation EMS (libère plus de RAM)
- `DEVICEHIGH=` : charge un pilote dans les UMB plutôt qu'en mémoire conventionnelle
- `SHELL=... /E:512` : agrandit l'environnement DOS à 512 octets (utile pour les chemins longs)
Et dans `C:\AUTOEXEC.BAT`, charge les TSR (programmes résidents) en mémoire haute avec `LH` (*LoadHigh*) :
```
@ECHO OFF
SET PATH=C:\FREEDOS\BIN;C:\
SET TEMP=C:\TEMP
LH C:\FREEDOS\BIN\SHARE.EXE
LH C:\FREEDOS\BIN\MOUSE.EXE
PROMPT $P$G
```
## Vérifier le résultat
La commande `MEM` (ou `MEM /C` pour le détail par programme) affiche la répartition mémoire :
```
C:\> MEM /C /P
```
Tu devrais voir quelque chose comme :
```
Memory Type Total Used Free
---------------- ------- ------- -------
Conventional 640K 35K 605K
Upper 155K 48K 107K
Reserved 384K 384K 0K
Extended (XMS) 15,232K 1,088K 14,144K
---------------- ------- ------- -------
Total memory 16,411K 1,555K 14,856K
Largest executable program size 605K (619,328 bytes)
Largest free upper memory block 107K (109,568 bytes)
```
L'objectif : **maximiser le "Largest executable program size"** (idéalement >600 Ko).
## Choix EMS vs XMS selon les jeux
| Logiciel typique | Besoin |
|---|---|
| Doom, Quake, Duke Nukem 3D | XMS uniquement → `EMM386 NOEMS` |
| Ultima 7, Wing Commander, Master of Orion | EMS requis → `EMM386 RAM` |
| Lotus 1-2-3, AutoCAD ancien | EMS recommandé |
| Commander Keen, Prince of Persia | Aucun → désactiver EMM386 |
**Astuce** : maintiens deux fichiers de config différents et utilise le menu de démarrage de FreeDOS (`!menu` dans `FDCONFIG.SYS`) pour choisir au boot — exactement comme on faisait dans les années 90.
---
# Script de lancement automatisé pour QEMU
Plutôt que retaper de longues commandes QEMU, voici un script Bash complet et paramétrable.
## Script principal
Crée le fichier `~/bin/freedos-vm.sh` :
```bash
#!/usr/bin/env bash
#
# Lanceur FreeDOS sous QEMU
# Usage : freedos-vm.sh [commande] [options]
#
set -euo pipefail
# --- Configuration ---------------------------------------------------------
VM_DIR="${HOME}/VMs/freedos"
DISK="${VM_DIR}/freedos.qcow2"
ISO="${VM_DIR}/FD13LIVE.iso"
SHARE_DIR="${VM_DIR}/partage"
SHARE_IMG="${VM_DIR}/partage.img"
FLOPPY_DIR="${VM_DIR}/floppies"
RAM="64" # Mo de RAM
DISK_SIZE="2G" # Taille du disque dur virtuel
SHARE_SIZE_MB="100" # Taille de l'image de partage en Mo
QEMU="qemu-system-i386"
QEMU_OPTS=(
-m "${RAM}"
-rtc base=localtime # Horloge synchronisée
-vga std # Carte graphique standard
-display gtk # Remplace par "sdl" si besoin
)
# --- Couleurs --------------------------------------------------------------
RED=$'\033[0;31m'; GRN=$'\033[0;32m'; YEL=$'\033[1;33m'; NC=$'\033[0m'
log() { echo "${GRN}[+]${NC} $*"; }
warn() { echo "${YEL}[!]${NC} $*"; }
err() { echo "${RED}[x]${NC} $*" >&2; exit 1; }
# --- Fonctions -------------------------------------------------------------
init() {
log "Initialisation de l'environnement dans ${VM_DIR}"
mkdir -p "${VM_DIR}" "${SHARE_DIR}" "${FLOPPY_DIR}"
if [[ ! -f "${DISK}" ]]; then
log "Création du disque dur virtuel (${DISK_SIZE})"
qemu-img create -f qcow2 "${DISK}" "${DISK_SIZE}"
else
warn "Le disque ${DISK} existe déjà"
fi
if [[ ! -f "${SHARE_IMG}" ]]; then
log "Création de l'image de partage (${SHARE_SIZE_MB} Mo, FAT16)"
dd if=/dev/zero of="${SHARE_IMG}" bs=1M count="${SHARE_SIZE_MB}" status=none
mkfs.fat -F 16 -n PARTAGE "${SHARE_IMG}" >/dev/null
fi
if [[ ! -f "${ISO}" ]]; then
warn "ISO FreeDOS absente. Télécharge-la depuis https://www.freedos.org/download/"
warn "puis place-la ici : ${ISO}"
fi
}
install() {
[[ -f "${ISO}" ]] || err "ISO manquante : ${ISO}"
log "Démarrage en mode INSTALLATION (boot CD)"
"${QEMU}" "${QEMU_OPTS[@]}" \
-hda "${DISK}" \
-cdrom "${ISO}" \
-boot d
}
run() {
local floppy="${1:-}"
local qemu_extra=()
if [[ -n "${floppy}" ]]; then
[[ -f "${floppy}" ]] || err "Disquette introuvable : ${floppy}"
log "Disquette montée en A: : ${floppy}"
qemu_extra+=(-fda "${floppy}")
fi
log "Démarrage de FreeDOS"
"${QEMU}" "${QEMU_OPTS[@]}" \
-hda "${DISK}" \
-hdb "${SHARE_IMG}" \
"${qemu_extra[@]}" \
-boot c
}
mount_share() {
local mp="/tmp/freedos-share-$$"
sudo mkdir -p "${mp}"
sudo mount -o loop,uid="$(id -u)",gid="$(id -g)" "${SHARE_IMG}" "${mp}"
log "Image de partage montée sur ${mp}"
log "N'oublie pas de démonter avec : sudo umount ${mp} && rmdir ${mp}"
}
umount_share() {
for mp in /tmp/freedos-share-*; do
[[ -d "${mp}" ]] || continue
sudo umount "${mp}" && sudo rmdir "${mp}" && log "Démonté : ${mp}"
done
}
snapshot() {
local name="${1:?nom de snapshot requis}"
qemu-img snapshot -c "${name}" "${DISK}"
log "Snapshot '${name}' créé"
}
restore() {
local name="${1:?nom de snapshot requis}"
qemu-img snapshot -a "${name}" "${DISK}"
log "Snapshot '${name}' restauré"
}
list_snapshots() {
qemu-img snapshot -l "${DISK}"
}
usage() {
cat <<EOF
Usage : $(basename "$0") <commande> [arguments]
Commandes :
init Crée disque, image de partage et arborescence
install Lance la VM en mode installation (boot ISO)
run [disquette] Démarre FreeDOS (avec disquette optionnelle en A:)
mount Monte l'image de partage côté Linux
umount Démonte toutes les images de partage
snap <nom> Crée un snapshot du disque
restore <nom> Restaure un snapshot
snaps Liste les snapshots
help Affiche cette aide
Exemples :
$(basename "$0") init
$(basename "$0") install
$(basename "$0") run
$(basename "$0") run ${FLOPPY_DIR}/jeu.img
$(basename "$0") snap avant_test_doom
EOF
}
# --- Dispatcher ------------------------------------------------------------
cmd="${1:-help}"
shift || true
case "${cmd}" in
init) init ;;
install) install ;;
run) run "${@:-}" ;;
mount) mount_share ;;
umount) umount_share ;;
snap) snapshot "$@" ;;
restore) restore "$@" ;;
snaps) list_snapshots ;;
help|-h|--help) usage ;;
*) err "Commande inconnue : ${cmd}. Voir '$(basename "$0") help'" ;;
esac
```
Rends-le exécutable :
```bash
chmod +x ~/bin/freedos-vm.sh
```
## Utilisation typique
```bash
# Première fois : crée l'arborescence et les disques
freedos-vm.sh init
# Télécharge l'ISO depuis freedos.org et place-la dans ~/VMs/freedos/
# Lance l'installation
freedos-vm.sh install
# Démarrages quotidiens
freedos-vm.sh run
# Tester un jeu sur disquette
freedos-vm.sh run ~/VMs/freedos/floppies/keen1.img
# Avant une manip risquée
freedos-vm.sh snap config_stable
# ...si ça casse :
freedos-vm.sh restore config_stable
# Copier des fichiers depuis Linux vers FreeDOS
freedos-vm.sh mount
cp ~/Downloads/programme.zip /tmp/freedos-share-*/
freedos-vm.sh umount
freedos-vm.sh run
```
## Variante avec dossier partagé direct (VVFAT)
Pour éviter le mount/umount manuel, remplace la ligne `-hdb "${SHARE_IMG}"` par :
```bash
-drive file=fat:rw:"${SHARE_DIR}",format=raw,if=ide
```
Le dossier `~/VMs/freedos/partage` est alors directement vu comme un disque dans FreeDOS, sans démontage. Attention : en cas de crash brutal de la VM, le contenu peut être corrompu — à réserver pour des transferts ponctuels.
## Raccourci bureau (optionnel)
Crée `~/.local/share/applications/freedos.desktop` :
```ini
[Desktop Entry]
Name=FreeDOS VM
Comment=Démarrer la machine virtuelle FreeDOS
Exec=/home/UTILISATEUR/bin/freedos-vm.sh run
Icon=computer
Terminal=false
Type=Application
Categories=System;Emulator;
```
Remplace `UTILISATEUR` par ton nom d'utilisateur. FreeDOS apparaîtra alors dans le menu d'applications de ton bureau.
---
Tu veux que je détaille aussi la configuration du son (SoundBlaster émulé sous QEMU) ou le réseau avec mTCP pour télécharger directement dans FreeDOS ?
+2
View File
@@ -603,3 +603,5 @@
{"ts":"2026-05-16 21:48:39","url":"/informatique/divers/test_de_debit_de_disques_dur","ref":"","ua":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0"}
{"ts":"2026-05-16 21:49:49","url":"/informatique/serveur/web-linux-apache/wordpress","ref":"","ua":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36"}
{"ts":"2026-05-16 21:50:50","url":"/podcast/images/2017-06-17_08_blindtest.png","ref":"","ua":"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:72.0) Gecko/20100101 Firefox/72.0"}
{"ts":"2026-05-16 21:56:16","url":"/informatique/resolv.conf","ref":"","ua":"Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/148.0.7778.96 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"}
{"ts":"2026-05-16 21:56:30","url":"/informatique/linux/system/dossiers-remarquables/home/var","ref":"http://abonnel.fr/informatique/linux/system/dossiers-remarquables/home/var","ua":"Mozilla/5.0 (keys-so-bot)"}