Virtual x86

I got passed a link to this new emulator, Virtual x86, a complete PC emulator in javascript.  It is in it’s early phases, but it seems to emulate text mode and a single diskette or ISO ok.  It can boot Linux or OpenBSD, but not any MS-DOS protected mode software I tried.  And graphics don’t work…

But it’s 100% javascript!  And open in that you can download the source (tarball,github) under a BSD style license!  So naturally I made my own mirror

Dungeon on Virtual x86
Dungeon on Virtual x86

I have to say, it’s really cool!

 

Want to be scared?

So there has been all this talk as of late with NSA and special USB cables that embed microprocessors and wireless transmitters that send out everything that passes through them.  not to mention video cables, that can do the same thing.

Apparently another favorite thing to hit is the BIOS, as you can load whatever OS on there you want, and the firmware is still active.  The best of the best must be hacking peripheral firmware.  Namely storage.

Did you know you can actually load linux onto your hard disk?  Or that various flash cards have embedded ARM processors on them?

What would this say for a network ‘offload’ mechanism to pass along packets to another host?

To those of you building “secure” systems (ie billing, medical, military) good luck.. It seems in this brave new world you cannot trust anything off the shelf.

 

Old BSD musings

I was thinking after rebuilding the Mach disk, that back in the say it was insinuated that the changes from Net/2 to 386BSD 0.0 were quite minimal.  So I figured I should take a look.  The first thing to do would be to clean up Net/2’s kernel to look more like 386 BSD’s.  This was trivial as there wasn’t much of anything structure wise done.  Running the patch was pretty easy:

$ diff -ruN ../../../../net.2/sys . > /tmp/net2-386bsd00.patch

The patch is about 1MB.  Much larger than I expected!  Applying the patch to Net/2 shows that a substantial amount of files changed:

$ patch -p0 < /tmp/net2-386bsd00.patch
patching file ./conf/files
patching file ./i386/conf/GENERIC.i386
patching file ./i386/conf/Makefile.i386
patching file ./i386/conf/devices.i386
patching file ./i386/conf/files.i386
patching file ./i386/i386/autoconf.c
patching file ./i386/i386/conf.c
patching file ./i386/i386/genassym.c
patching file ./i386/i386/locore.s
patching file ./i386/i386/machdep.c
patching file ./i386/i386/pmap.c
patching file ./i386/i386/symbols.raw
patching file ./i386/i386/trap.c
patching file ./i386/i386/vm_machdep.c
patching file ./i386/include/psl.h
patching file ./i386/isa/com.c
patching file ./i386/isa/fd.c
patching file ./i386/isa/isa.c
patching file ./i386/isa/npx.c
patching file ./i386/isa/pccons.c
patching file ./i386/isa/wd.c
patching file ./i386/isa/wt.c
patching file ./i386/stand/Makefile
patching file ./i386/stand/bmap.c
patching file ./i386/stand/boot.c
patching file ./i386/stand/bootxx.c
patching file ./i386/stand/breadxx.c
patching file ./i386/stand/cga.c
patching file ./i386/stand/conf.c
patching file ./i386/stand/confxx.c
patching file ./i386/stand/fd.c
patching file ./i386/stand/fdbootblk.c
patching file ./i386/stand/fs.c
patching file ./i386/stand/kbd.c
patching file ./i386/stand/libsa/Makefile
patching file ./i386/stand/libsmsa/Makefile
patching file ./i386/stand/prf.c
patching file ./i386/stand/saio.h
patching file ./i386/stand/srt0.c
patching file ./i386/stand/trimhd.c
patching file ./i386/stand/wd.c
patching file ./kern/Makefile
patching file ./kern/init_main.c
patching file ./kern/kern__physio.c
patching file ./kern/kern_descrip.c
patching file ./kern/kern_exec.c
patching file ./kern/kern_execve.c
patching file ./kern/kern_exit.c
patching file ./kern/kern_fork.c
patching file ./kern/kern_malloc.c
patching file ./kern/kern_physio.c
patching file ./kern/kern_proc.c
patching file ./kern/kern_sig.c
patching file ./kern/kern_subr.c
patching file ./kern/makesyscalls.sh
patching file ./kern/subr_rlist.c
patching file ./kern/subr_rmap.c
patching file ./kern/sys_process.c
patching file ./kern/syscalls.master
patching file ./kern/tty.c
patching file ./kern/tty_pty.c
patching file ./kern/tty_ring.c
patching file ./kern/tty_subr.c
patching file ./kern/uipc_mbuf.c
patching file ./kern/vfs__bio.c
patching file ./kern/vfs_bio.c
patching file ./net/af.h
patching file ./net/bpf.c
patching file ./net/bpf.h
patching file ./net/bpfdesc.h
patching file ./net/if.h
patching file ./net/if_arp.h
patching file ./net/if_dl.h
patching file ./net/if_llc.h
patching file ./net/if_sl.c
patching file ./net/if_slvar.h
patching file ./net/if_types.h
patching file ./net/netisr.h
patching file ./net/radix.h
patching file ./net/raw_cb.h
patching file ./net/route.h
patching file ./net/slcompress.h
patching file ./netinet/icmp_var.h
patching file ./netinet/if_ether.h
patching file ./netinet/in.h
patching file ./netinet/in_pcb.h
patching file ./netinet/in_proto.c
patching file ./netinet/in_systm.h
patching file ./netinet/in_var.h
patching file ./netinet/ip.h
patching file ./netinet/ip_icmp.h
patching file ./netinet/ip_var.h
patching file ./netinet/tcp.h
patching file ./netinet/tcp_debug.h
patching file ./netinet/tcp_fsm.h
patching file ./netinet/tcp_seq.h
patching file ./netinet/tcp_timer.h
patching file ./netinet/tcp_var.h
patching file ./netinet/tcpip.h
patching file ./netinet/udp.h
patching file ./netinet/udp_var.h
patching file ./nfs/nfs.h
patching file ./nfs/nfs_subs.c
patching file ./nfs/nfs_vnops.c
patching file ./nfs/nfscompress.h
patching file ./nfs/nfsdiskless.h
patching file ./nfs/nfsiom.h
patching file ./nfs/nfsm_subs.h
patching file ./nfs/nfsmount.h
patching file ./nfs/nfsnode.h
patching file ./nfs/nfsrvcache.h
patching file ./nfs/nfsv2.h
patching file ./nfs/rpcv2.h
patching file ./nfs/xdr_subs.h
patching file ./stand/printf.c
patching file ./stand/saerrno.h
patching file ./stand/saioctl.h
patching file ./sys/acct.h
patching file ./sys/buf.h
patching file ./sys/callout.h
patching file ./sys/cdefs.h
patching file ./sys/clist.h
patching file ./sys/conf.h
patching file ./sys/dir.h
patching file ./sys/disklabel.h
patching file ./sys/dkbad.h
patching file ./sys/dkstat.h
patching file ./sys/dmap.h
patching file ./sys/domain.h
patching file ./sys/errno.h
patching file ./sys/exec.h
patching file ./sys/fcntl.h
patching file ./sys/fifo.h
patching file ./sys/file.h
patching file ./sys/filedesc.h
patching file ./sys/gprof.h
patching file ./sys/ioctl.h
patching file ./sys/ioctl_compat.h
patching file ./sys/ipc.h
patching file ./sys/kernel.h
patching file ./sys/kinfo.h
patching file ./sys/kinfo_proc.h
patching file ./sys/ktrace.h
patching file ./sys/malloc.h
patching file ./sys/map.h
patching file ./sys/mapmem.h
patching file ./sys/mbuf.h
patching file ./sys/mman.h
patching file ./sys/mount.h
patching file ./sys/msgbuf.h
patching file ./sys/mtio.h
patching file ./sys/namei.h
patching file ./sys/param.h
patching file ./sys/proc.h
patching file ./sys/protosw.h
patching file ./sys/ptrace.h
patching file ./sys/reboot.h
patching file ./sys/resource.h
patching file ./sys/resourcevar.h
patching file ./sys/seg.h
patching file ./sys/shm.h
patching file ./sys/signal.h
patching file ./sys/signalvar.h
patching file ./sys/socket.h
patching file ./sys/socketvar.h
patching file ./sys/specdev.h
patching file ./sys/stat.h
patching file ./sys/syscall.h
patching file ./sys/syslimits.h
patching file ./sys/syslog.h
patching file ./sys/systm.h
patching file ./sys/tablet.h
patching file ./sys/termios.h
patching file ./sys/time.h
patching file ./sys/timeb.h
patching file ./sys/times.h
patching file ./sys/tprintf.h
patching file ./sys/trace.h
patching file ./sys/tty.h
patching file ./sys/ttychars.h
patching file ./sys/ttydefaults.h
patching file ./sys/ttydev.h
patching file ./sys/types.h
patching file ./sys/ucred.h
patching file ./sys/uio.h
patching file ./sys/un.h
patching file ./sys/unistd.h
patching file ./sys/unpcb.h
patching file ./sys/user.h
patching file ./sys/vadvise.h
patching file ./sys/vcmd.h
patching file ./sys/vlimit.h
patching file ./sys/vmmeter.h
patching file ./sys/vnode.h
patching file ./sys/vsio.h
patching file ./sys/vtimes.h
patching file ./sys/wait.h
patching file ./ufs/dinode.h
patching file ./ufs/dir.h
patching file ./ufs/fs.h
patching file ./ufs/inode.h
patching file ./ufs/lockf.h
patching file ./ufs/mfs_vnops.c
patching file ./ufs/mfsiom.h
patching file ./ufs/mfsnode.h
patching file ./ufs/quota.h
patching file ./ufs/ufsmount.h
patching file ./vm/device_pager.h
patching file ./vm/lock.h
patching file ./vm/pmap.h
patching file ./vm/queue.h
patching file ./vm/swap_pager.c
patching file ./vm/swap_pager.h
patching file ./vm/vm.h
patching file ./vm/vm_fault.c
patching file ./vm/vm_glue.c
patching file ./vm/vm_inherit.h
patching file ./vm/vm_kern.c
patching file ./vm/vm_kern.h
patching file ./vm/vm_map.h
patching file ./vm/vm_object.h
patching file ./vm/vm_page.h
patching file ./vm/vm_pageout.h
patching file ./vm/vm_pager.h
patching file ./vm/vm_param.h
patching file ./vm/vm_prot.h
patching file ./vm/vm_statistics.h
patching file ./vm/vm_swap.c
patching file ./vm/vm_user.h
patching file ./vm/vnode_pager.h

Clearly the move from Net/2 to 386BSD 0.0 was not trivial.  Which I’ve always wondered, as quotes like this:

Closing the gap from the Networking Release 2 distribution to a fully functioning system did not take long. Within six months of the release, Bill Jolitz had written replacements for the six missing files. He promptly released a fully compiled and bootable system for the 386-based PC architecture which he called 386/BSD.

Make it sound like Bill spent six months on six files.

I guess the real question is can I find a so called encumbered 4.4 BSD, and compare that to the lite to see the magical “six files” and then check the drift into Net/2, to 386BSD 0.0 …

I was looking back at old posts

And I saw my old look at Mach+Lites.  And of course there was a qcow disk image associated with some ancient version of Qemu which I can’t run on Wine on OS X.  So I figured with a bit of fun I’d update the disk image to work with Qemu 1.7.0.

Luckily Qemu 0.15.1 works just fine for it’s qemu-img.  So a quick

qemu-img convert -f qcow -O vmdk mach.img mach.vmdk

and I had my image.  I’m not sure of what the NE2000 parameters that Mach can use to enable the network, but I do recall it was easier to just rebuild Qemu around them.  However this time, I switched to the Mach kernel that utilized Linux device drivers to get a working network.

I updated the hard disk file here.

Screen Shot 2013-12-27 at 12.16.18 AM

For the two or three people who care about BSD evolutionary dead ends.

Merry Christmas!

Wow this year has been quite a personal ride for me.  From a bad 2012, to a seeming uncertain 2013 where I not only found my love but also found a new home in a new continent.

Through it all I’ve kept the blog up and going.  I’ve changed VPS providers a few times, to now living out the dream on dedicated hardware.

As this year draws to the end, Id like to thank regular users for sticking around just as I’d like to thank new users for taking a look at my mis-adventures through the years.

I’m really looking forward to next year, and the endless possibilities.

Jason

64bit Windows QEMU builds

I stumbled across this page, which has installers & executables for Win64 based OS’es of Qemu!

Of course this is very exciting… considering I never could get a working build of Qemu for a Win64 platform, and more or less gave up.

From the brief guide on building, it looks like they use POSIX threading and cross build from Linux.  Naturally I’ve been trying to use native tools & Win32 threading as I saw mentioned over here.

Maybe one day I’ll be able to get it working in a semi-consistent manner and put back in my lame fixes disabling screen resizing in a window, and control alt delete shortcuts.

PCem v8 released!

New features include:

  • New machines – SiS496/497, 430VX
  • WinChip emulation (including MMX emulation)
  • New graphics cards – S3 Trio64, Trident TGUI9440AGi, ATI VGA Edge-16, ATI VGA Charger, OAK OTI-067, ATI Mach64
  • New sound cards – Adlib Gold, Windows Sound System, SB AWE32
  • Improved GUS emulation
  • MPU-401 emulation (UART mode only) on SB16 and AWE32
  • Fixed DMA bug, floppy drives work properly in Windows 3.x
  • Fixed bug in FXAM – fixes Wolf 3D, Dogz, some other stuff as well
  • Other FPU fixes
  • Fixed serial bugs, mouse no longer disappears in Windows 9x hardware detection
  • Major reorganisation of CPU emulation
  • Direct3D output mode
  • Fullscreen mode
  • Various internal changes

pretty cool!

You can find the source code, binaries, and some ROMs on Tom’s Page.  I’ve got to say I really like PCem, it gives the full (slow and painful, like the real thing) retro PC experience!

Qemu 1.7.0 released!

The main qemu page hasn’t been updated yet, but the download page has the source to the new version of Qemu.

I’ve gone ahead and built binaries for OS X, both a full version, and  a i386 minimal version.

As always testing is very minimal, all I’ve done is installed MS-DOS 6.22 & Doom 1.1, and tested the SoundBlaster 16 emulation.  And as with the pre-release versions, the adlib code is still broken.  And Ive done the ‘better’ fix in this code regarding that.

I haven’t run anything else, including fun things like the PowerPC & OS X emulation, MIPS with Windows NT, or even trying anything x64 based as I’m sure it is still broken from back in the Qemu 0.90 days.