draft: FreeDOS
This commit is contained in:
@@ -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 ?
|
||||
@@ -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)"}
|
||||
|
||||
Reference in New Issue
Block a user