From 417a184e37399451c0dc45d7255ad00ddd08f901 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9drix?= Date: Sat, 16 May 2026 23:56:32 +0200 Subject: [PATCH] draft: FreeDOS --- .../draft_overlay.json | 2 +- .../draft_overlay.md | 327 +++++++++++++++++- _logs/not_found.jsonl | 2 + 3 files changed, 329 insertions(+), 2 deletions(-) diff --git a/65f42c0c-c899-4551-9479-cf8fad46e7a3/draft_overlay.json b/65f42c0c-c899-4551-9479-cf8fad46e7a3/draft_overlay.json index 9115714..fd5c0a5 100644 --- a/65f42c0c-c899-4551-9479-cf8fad46e7a3/draft_overlay.json +++ b/65f42c0c-c899-4551-9479-cf8fad46e7a3/draft_overlay.json @@ -1,4 +1,4 @@ { "title": "FreeDOS", - "_updated_at": "2026-05-16 21:54:50" + "_updated_at": "2026-05-16 21:56:32" } diff --git a/65f42c0c-c899-4551-9479-cf8fad46e7a3/draft_overlay.md b/65f42c0c-c899-4551-9479-cf8fad46e7a3/draft_overlay.md index 75fb69f..71fff4d 100644 --- a/65f42c0c-c899-4551-9479-cf8fad46e7a3/draft_overlay.md +++ b/65f42c0c-c899-4551-9479-cf8fad46e7a3/draft_overlay.md @@ -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 ? \ No newline at end of file +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 < [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 Crée un snapshot du disque + restore 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 ? \ No newline at end of file diff --git a/_logs/not_found.jsonl b/_logs/not_found.jsonl index 7e11d8f..0e029f6 100644 --- a/_logs/not_found.jsonl +++ b/_logs/not_found.jsonl @@ -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)"}