+# Qemu
+
+Qemu can be started with:
+* `qemu-kvm`: old versions of qemu, with KVM support
+* `qemu`: old version of qemu
+* `qemu-system-i386`: recent version, i386 mode
+* `qemu-system-x86_64`: recen version, AMD64 mode
+
+## Disk file
+
+### Create a disk file
+
+Unless you use ISO files or `dd`-created raw files, you may want to use `qemu-img`.
+
+Some examples:
+* `qemu-img create base.raw 2G`
+* `qemu-img create -f qcow2 extra.qcow2 -b base.raw -F qcow2`
+
+The format can be forced with `-f [fmt]` (default is `raw`):
+* recent formats: `raw`, `qcow2`
+* legacy and third-party formats: `vmdk`, `vdi`, `vhd`, `vhdx`, `qcow1`, `qed`
+
+Snapshot mode: create a new disk with a base image:
+* `-b base.img`: the base image will be the main disk, but changes will be written tio the new one
+* `-F qcow2`: backing image format is qcow2
+
+### Convert a disk file
+
+Converting an image can be done with `qemu-img convert`:
+* `qemu-img convert input_file output_file`
+* `qemu-img convert input_file1 input_file2... output_file`: for special multi-files input formats
+* `qemu-img convert -c [...]`: add compression (on conversion, not on usage: you may want to re-apply it once in a while)
+
+The format can be forced with:
+* `-f [fmt]`: input format
+* `-O [fmt]`: output format
+
+The default format is `raw`), but you may choose between:
+* recent formats: `raw`, `qcow2`
+* legacy and third-party formats: `vmdk`, `vdi`, `vhd`, `vhdx`, `qcow1`, `qed`
+
+### Access the disk file (raw mode) from the Host
+
+You need to setup the loopback device to access such a file.
+It can be easier if you setup your `fstab` for it.
+
+Your system must configure the loopback device with partitions support (i.e., `rc.local`):
+* `modprobe -r loop`
+* `modprobe loop max_part=8`
+
+Operations:
+* `losetup file.raw /dev/loop0`
+* `mount /dev/loop0p1 /mnt/loop/loop1`
+* work in the mounted fs
+* `umount /mnt/loop/loop1`
+* `losetup -d /dev/loop0`
+
+### Use a disk file
+
+* to add: -snapshot # discard writes (beware of ctrl+a, S : write back!)
+
+no snapshot with blockdev...
+
+
+
+set -- "$@" -drive file="$disk2",index=1,media=disk,format=raw
+
+HDD="-hda $NAME.img"
+HDD="-blockdev driver=raw,node-name=disk,file.driver=file,file.filename=$NAME.img"
+
+#### Floppy
+
+-drive file=/path/to/floppy.img,index=0,if=floppy,format=raw
+
+-blockdev driver=file,node-name=f0,filename=/path/to/floppy.img -device floppy,drive=f0
+
+#### Cdrom
+
+Old (still compatible) version:
+* `-cdrom cd.iso`
+
+#-hdb fat:rw:/tmp/fat # ??
+
+## Graphics adapter
+
+You can choose your graphics adapter via the `-vga` switch:
+* `-vga qxl` : QXL virtio via spice (recent)
+* `-vga virtio` : normal virtio
+* `-vga vmware` : VMWare SVGA-II compatible
+* `-vga std` : XP+
+* `-vga cirrus` : old card, 256 colours
+
+Note that regarding performances, the graphics adapter is one thing, the display is another. Even an old DOS game can be unbearably slow if you use software rendering to process its graphics output.
+
+* `-display sdl`: more or less required if you do any graphical thing
+
+## Sound
+
+SOUND="-soundhw all" # old versions
+SOUND="-audiodev pipewire,id=qemu"
+
+snd= pa, pipewire, alsa, sdl...
+
+set -- "$@" -machine pcspk-audiodev="$snd"
+set -- "$@" -audiodev "$snd",id="$snd"
+set -- "$@" -device adlib,audiodev="$snd" -device sb16,audiodev="$snd"
+
+## Network
+
+NET="-net none"
+
+## Miscallenaous options
+
+-machine accel=kvm,XXX
+
+RAM="-m 64m"
+
+ -boot order=dac -k fr-be -usb -usbdevice tablet -serial stdio -name "$NAME"
+
+## Script
+
+```sh
+#!/bin/sh
+
+NAME=`basename "$PWD"`
+
+DISK1="$NAME".hdc
+DISK2="$NAME".hdd
+CDROM="$NAME".iso
+FLOPPY="$NAME".fdd
+
+[ "$SND" = "" ] && SND=pipewire
+[ "$RAM" = "" ] && RAM=64m
+
+set --
+set -- "$@" -machine accel=kvm
+set -- "$@" -machine pcspk-audiodev="$SND"
+set -- "$@" -audiodev "$SND",id="$SND"
+set -- "$@" -device adlib,audiodev="$SND" -device sb16,audiodev="$SND"
+set -- "$@" -boot order=dac
+set -- "$@" -m $RAM
+set -- "$@" -name "$NAME"
+set -- "$@" -display sdl
+if [ -e "$FLOPPY" ]; then
+ set -- "$@" -drive file="$FLOPPY",index=0,if=floppy,format=raw
+fi
+if [ -e "$DISK1" ]; then
+ set -- "$@" -drive file="$DISK1",index=1,media=disk,format=raw
+fi
+if [ -e "$DISK2" ]; then
+ set -- "$@" -drive file="$DISK2",index=2,media=disk,format=raw
+fi
+if [ -e "$CDROM" ]; then
+ set -- "$@" -drive file="$CDROM",index=3,media=cdrom,format=raw
+fi
+
+echo qemu-system-i386 "$@"
+qemu-system-i386 "$@"
+```
\ No newline at end of file