Qemu 0.14.0 rc1 released!

Back on the heels of the 0.14.0 rc0 release, it’s rc1!

Still nothing on the official changelog

Also I ran into this snag while building under windows..

LINK i386-softmmu/qemu.exe
../qemu-timer.o: In function `host_alarm_handler’:
C:/msys/1.0/src/qemu-0.14.0-rc1/qemu-timer.c:188: undefined reference to `qemu_next_alarm_deadline’

I moved the “#ifndef _WIN32” below the definition of `qemu_next_alarm_deadline’, and all was well.

So here is the x86, x86_x64 build, what 99% of you want. And here is the RISC version for the 0.01%.

Qemu 0.14.0 rc1 and Windows NT October 1992

Qemu 0.14.0 rc1 and Windows NT October 1992

I know this may not look like much, or seem different from much of any version of Qemu but it’s 0.14.0 rc!!!!

Qemu 0.14.0 rc0 released!

Whoa I didn’t see that coming along so quick…

I was anxiously awaiting some VM/386 diskettes I ordered from Amazon to show up.

The main changelog hasn’t been updated since 0.12.5 so I really don’t know what to expect in this release.

One thing that is new, is QMP, the The QEMU Monitor Protocol.

Another interesting thing at a glance, is that 0.14 seems to have far more modes for the i386-softmmu..

pc         Standard PC (alias of pc-0.14)

pc-0.14    Standard PC (default)

pc-0.13    Standard PC

pc-0.12    Standard PC

pc-0.11    Standard PC, qemu 0.11

pc-0.10    Standard PC, qemu 0.10

isapc      ISA-only PC

The NE2000 still has a conflict on 0x300 IRQ 9, so removing it from hw/pc.c will allow the ISA NE2000 to function…

I also see the addition of the Intel HD Audio Controller, or hda, not to be confused with the first hard disk.

So for those of you who wish to give it a shot, here is the x86/x86_64 only version (what 99% of you want), and for the 1% crowd, the ‘other’ version which has all the OTHER cpu’s (mips,m68k,sh4,ppc).

And for some shameless google juice, here is the options for the new version of qemu-i386softmmu:

QEMU emulator version 0.13.90, Copyright (c) 2003-2008 Fabrice Bellard
usage: qemu [options] [disk_image]

‘disk_image’ is a raw hard disk image for IDE hard disk 0

Standard options:
-h or -help display this help and exit
-version display version information and exit
-M machine select emulated machine (-M ? for list)
-cpu cpu select CPU (-cpu ? for list)
-smp n[,maxcpus=cpus][,cores=cores][,threads=threads][,sockets=sockets]
set the number of CPUs to ‘n’ [default=1]
maxcpus= maximum number of total cpus, including
offline CPUs for hotplug, etc
cores= number of CPU cores on one socket
threads= number of threads on one CPU core
sockets= number of discrete sockets in the system
-numa node[,mem=size][,cpus=cpu[-cpu]][,nodeid=node]
-fda/-fdb file use ‘file’ as floppy disk 0/1 image
-hda/-hdb file use ‘file’ as IDE hard disk 0/1 image
-hdc/-hdd file use ‘file’ as IDE hard disk 2/3 image
-cdrom file use ‘file’ as IDE cdrom image (cdrom is ide1 master)
-drive [file=file][,if=type][,bus=n][,unit=m][,media=d][,index=i]
[,cyls=c,heads=h,secs=s[,trans=t]][,snapshot=on|off]
[,cache=writethrough|writeback|none|unsafe][,format=f]
[,serial=s][,addr=A][,id=name][,aio=threads|native]
[,readonly=on|off]
use ‘file’ as a drive image
-set group.id.arg=value
set parameter for item of type
i.e. -set drive.$id.file=/path/to/image
-global driver.property=value
set a global default for a driver property
-mtdblock file use ‘file’ as on-board Flash memory image
-sd file use ‘file’ as SecureDigital card image
-pflash file use ‘file’ as a parallel flash image
-boot [order=drives][,once=drives][,menu=on|off]
‘drives’: floppy (a), hard disk (c), CD-ROM (d), network (n)
-snapshot write to temporary files instead of disk image files
-m megs set virtual RAM size to megs MB [default=128]
-mem-path FILE provide backing storage for guest RAM
-k language use keyboard layout (for example ‘fr’ for French)
-audio-help print list of audio drivers and their options
-soundhw c1,… enable audio support
and only specified sound cards (comma separated list)
use -soundhw ? to get the list of supported cards
use -soundhw all to enable all of them
-usb enable the USB driver (will be the default soon)
-usbdevice name add the host or guest USB device ‘name’
-device driver[,prop[=value][,…]]
add device (based on driver)
prop=value,… sets driver properties
use -device ? to print all possible drivers
use -device driver,? to print all possible properties
File system options:
-fsdev local,id=id,path=path,security_model=[mapped|passthrough|none]
Virtual File system pass-through options:
-virtfs local,path=path,mount_tag=tag,security_model=[mapped|passthrough|none]

-name string1[,process=string2]
set the name of the guest
string1 sets the window title and string2 the process name (on Linux)
-uuid %08x-%04x-%04x-%04x-%012x
specify machine UUID

Display options:
-nographic disable graphical output and redirect serial I/Os to console
-no-frame open SDL window without a frame and window decorations
-alt-grab use Ctrl-Alt-Shift to grab mouse (instead of Ctrl-Alt)
-ctrl-grab use Right-Ctrl to grab mouse (instead of Ctrl-Alt)
-no-quit disable SDL window close capability
-sdl enable SDL
-spice enable spice
-portrait rotate graphical output 90 deg left (only PXA LCD)
-vga [std|cirrus|vmware|qxl|xenfb|none]
select video card type
-full-screen start in full screen
-g WxH[xDEPTH] Set the initial graphical resolution and depth
-vnc display start a VNC server on display

1 target only:
-win2k-hack use it when installing Windows 2000 to avoid a disk full bug
-no-fd-bootchk disable boot signature checking for floppy disks
-no-acpi disable ACPI
-no-hpet disable HPET
-balloon none disable balloon device
-balloon virtio[,addr=str]
enable virtio balloon device (default)
-acpitable [sig=str][,rev=n][,oem_id=str][,oem_table_id=str][,oem_rev=n][,asl_co
mpiler_id=str][,asl_compiler_rev=n][,data=file1[:file2]…]
ACPI table description
-smbios file=binary
load SMBIOS entry from binary file
-smbios type=0[,vendor=str][,version=str][,date=str][,release=%d.%d]
specify SMBIOS type 0 fields
-smbios type=1[,manufacturer=str][,product=str][,version=str][,serial=str]
[,uuid=uuid][,sku=str][,family=str]
specify SMBIOS type 1 fields

Network options:
-net nic[,vlan=n][,macaddr=mac][,model=type][,name=str][,addr=str][,vectors=v]
create a new Network Interface Card and connect it to VLAN ‘n’
-net user[,vlan=n][,name=str][,net=addr[/mask]][,host=addr][,restrict=y|n]
[,hostname=host][,dhcpstart=addr][,dns=addr][,tftp=dir][,bootfile=f]
[,hostfwd=rule][,guestfwd=rule] connect the user mode ne
twork stack to VLAN ‘n’, configure its
DHCP server and enabled optional services
-net tap[,vlan=n][,name=str],ifname=name
connect the host TAP network interface to VLAN ‘n’
-net socket[,vlan=n][,name=str][,fd=h][,listen=[host]:port][,connect=host:port]
connect the vlan ‘n’ to another VLAN using a socket connection
-net socket[,vlan=n][,name=str][,fd=h][,mcast=maddr:port[,localaddr=addr]]
connect the vlan ‘n’ to multicast maddr and port
use ‘localaddr=addr’ to specify the host address to send packets
from
-net dump[,vlan=n][,file=f][,len=n]
dump traffic on vlan ‘n’ to file ‘f’ (max n bytes per packet)
-net none use it alone to have zero network devices. If no -net option
is provided, the default is ‘-net nic -net user’
-netdev [user|tap|socket],id=str[,option][,option][,…]

Character device options:
-chardev null,id=id[,mux=on|off]
-chardev socket,id=id[,host=host],port=host[,to=to][,ipv4][,ipv6][,nodelay]
[,server][,nowait][,telnet][,mux=on|off] (tcp)
-chardev socket,id=id,path=path[,server][,nowait][,telnet],[mux=on|off] (unix)
-chardev udp,id=id[,host=host],port=port[,localaddr=localaddr]
[,localport=localport][,ipv4][,ipv6][,mux=on|off]
-chardev msmouse,id=id[,mux=on|off]
-chardev vc,id=id[[,width=width][,height=height]][[,cols=cols][,rows=rows]]
[,mux=on|off]
-chardev file,id=id,path=path[,mux=on|off]
-chardev pipe,id=id,path=path[,mux=on|off]
-chardev console,id=id[,mux=on|off]
-chardev serial,id=id,path=path[,mux=on|off]

Bluetooth(R) options:
-bt hci,null dumb bluetooth HCI – doesn’t respond to commands
-bt hci,host[:id]
use host’s HCI with the given name
-bt hci[,vlan=n]
emulate a standard HCI in virtual scatternet ‘n’
-bt vhci[,vlan=n]
add host computer to virtual scatternet ‘n’ using VHCI
-bt device:dev[,vlan=n]
emulate a bluetooth device ‘dev’ in scatternet ‘n’

Linux/Multiboot boot specific:
-kernel bzImage use ‘bzImage’ as kernel image
-append cmdline use ‘cmdline’ as kernel command line
-initrd file use ‘file’ as initial ram disk

Debug/Expert options:
-serial dev redirect the serial port to char device ‘dev’
-parallel dev redirect the parallel port to char device ‘dev’
-monitor dev redirect the monitor to char device ‘dev’
-qmp dev like -monitor but opens in ‘control’ mode
-mon chardev=[name][,mode=readline|control][,default]
-debugcon dev redirect the debug console to char device ‘dev’
-pidfile file write PID to ‘file’
-singlestep always run in singlestep mode
-S freeze CPU at startup (use ‘c’ to start execution)
-gdb dev wait for gdb connection on ‘dev’
-s shorthand for -gdb tcp::1234
-d item1,… output log to /tmp/qemu.log (use -d ? for a list of log items)
-hdachs c,h,s[,t]
force hard disk 0 physical geometry and the optional BIOS
translation (t=none or lba) (usually qemu can guess them)
-L path set the directory for the BIOS, VGA BIOS and keymaps
-bios file set the filename for the BIOS
-enable-kvm enable KVM full virtualization support
-xen-domid id specify xen guest domain id
-xen-create create domain using xen hypercalls, bypassing xend
warning: should not be used when xend is in use
-xen-attach attach to existing xen domain
xend will use this when starting qemu
-no-reboot exit instead of rebooting
-no-shutdown stop before shutdown
-loadvm [tag|id]
start right away with a saved state (loadvm in monitor)
-option-rom rom load a file, rom, into the option ROM space
-clock force the use of the given methods for timer alarm.
To see what timers are available use -clock ?
-rtc [base=utc|localtime|date][,clock=host|vm][,driftfix=none|slew]
set the RTC base and clock, enable drift fix for clock ticks (x86 only)
-icount [N|auto]
enable virtual instruction counter with 2^N clock ticks per
instruction
-watchdog i6300esb|ib700
enable virtual hardware watchdog [default=none]
-watchdog-action reset|shutdown|poweroff|pause|debug|none
action when watchdog fires [default=reset]
-echr chr set terminal escape character instead of ctrl-a
-virtioconsole c
set virtio console
-show-cursor show cursor
-tb-size n set TB size
-incoming p prepare for incoming migration, listen on port p
-nodefaults don’t create default devices
-prom-env variable=value
set OpenBIOS nvram variables
-semihosting semihosting mode
-old-param old param mode
-readconfig
-writeconfig
read/write config file
-nodefconfig
do not load default config files at startup

During emulation, the following keys are useful:
ctrl-alt-f toggle full screen
ctrl-alt-n switch to virtual console ‘n’
ctrl-alt toggle mouse and keyboard grab

When using -nographic, press ‘ctrl-a h’ to get some help.

And because some people wanted it, here is *every* version of qemu I’ve found… in source!

PC-MOS/386

PC-MOS/386 print ad

PC-MOS/386 print ad

PC-MOS/386 was another multi-user MS-DOS Operating system. And they had some great ads, like above.

I was able to track down a few disks but of them all only the version 5 one seemed to run to some degree under Qemu. Or at least the $386.sys memory driver.

pc-mos 1.02

pc-mos 1.02

This is about as much as I got out of PC-MOS/386 1.0

pc-mos 3.00

pc-mos 3.00

While PC-MOS/386 3.0 loads, if you try to load the protected mode $386.sys driver it just hangs.

pc-mos 5.01

pc-mos 5.01

And PC-MOS/386 5.0 not only loads, but will load up with the protected mode driver on Qemu.

pc-mos 5.01 protected mode

pc-mos 5.01 protected mode

I’ve managed to get a serial ‘terminal’ to run, and for anyone who ever needs the hint, here is the config.sys, autoexec.bat and user01.bat file to make it boot up…. Neither VirtualPC, nor VMWare can boot up with the drivers.

config.sys

memdev = \mos\$386.sys /p
device = \mos\pcterm.sys
device = \mos\$serial.sys /ad=03f8,in=4,hs=x,ib=2048,ob=2048
smpsize = 80k
buffers = 40

autoexec.bat

echo off
rem
rem turns dot prefix command syntax off
rem
rem
rem issue path command
rem
path c:\;c:\mos
rem
rem configure for terminal(s), each addtask line is for a terminal…
rem
addtask 300k,1,,user01,pcterm,1,19200
rem addtask 300k,2,,user02,pcterm,3,19200
rem addtask 300k,3,,user03,pcterm,4,19200
rem addtask 300k,4,,user04,pcterm,5,19200
rem
rem set up printer
rem
addtask 032k,6,,printer
rem
rem make print spooler directory, note this example uses a
rem virtual disk.
rem
rem md d:\spool
rem
rem issue command for spooler
rem
spool c:\spool\ /t05
rem
rem define operating system prompt
rem
prompt $h0$p $

user01.bat

path c:\;c:\mos
prompt $h1$p $a
spool c:\spool\ /t5

So what is it like? Under emulation lots of keystrokes are lost, and it feels slow. I’m sure it’s a COMPLETELY different story on actual hardware. PC-MOS 5.0 also cannot run DPMI programs, which is a shame. Then again DPMI was a ‘new and exciting’ thing in 1992 so I guess it’s not that surprising. I’m not aware of any support to run Windows 3.1 but again 1992 was when the tide really started to turn to Windows.

As they mention on wiki memory costs, and slow disks of the time certainly made things like PC-MOS really slow.