New ‘redir’ / ‘hostfwd’ syntax for Qemu

it’s mandatory now in 2.9 so where we go.

Instead of:

-redir tcp::42323:23

which listens on all ip’s and redirects host port 42323 to port 23 on the default guest IP address of we now have to use

-net user,hostfwd=tcp::42323-:23

as you could tell from this ‘easy’ syntax.

-netdev user,id=mynet0,hostfwd=hostip:hostport-guestip:guestport


Hacking Flight Simulator 4 for multiple monitors

This has to be one of the coolest things I’ve seen in a long time.

Long story short, Wayne was able to exploit a ‘feature’ of older non random address location where a machine is configured the same way will always load the same program in the same address space.  Using this knowledge he was able to work out in memory where the location of the plane was kept in memory.  Adding a ‘server’ and two ‘client’ versions of DOSBox he could then transmit the location of the plane to the two other DOSBox client’s and then just set their viewports to left & right, and now he has an immersive simulation.

It’s a great read here: on

And this also is why ASLR is so important on internet connected devices, and servers where you don’t want to have known addresses in RAM where you can find important ‘protected’ data structures.

Galaxy Patrol Cosmofighter

I’d never seen this machine or game before so I thought I’d share a few pictures

Sega in it’s glory days

Apparently this game is pretty rare, and was only recently dumped.

Also an ancient Doraemon car driving game

Old belt driven game

Doraemon in his car

Doraemon fan club and driving license

One of those days.

* Abosolutely brilliant. Assume that sizeof(long) == 4. The author of this
* code should give classes on how to write non-portable code. Other bitches:
* (1) assuming that all architectures are big endian
* (2) storing/accessing shorts on unaligned boundaries
* (3) assuming all machines align things to 4 byte boundaries
* Define a 2-byte word type and a 4-byte word type.

source – internal.h

sigh.  Anyone have a PDO/Enterprise Objects disc? for some reason I think I need pdo.h


Continuing with our gopher madness, next up we have GopherVista.  And this is everything I had hoped it would be when I first learned about this project.  I had joked to another friend that it’d be cool to crawl and feed the indexer data in a manner that could basically bring AltaVista back to life.  And we laughed, and I had my utzoo search and that was that.

Except it wasn’t.

However, across the internet, Ben didn’t hear any naysay about limitations or anything to get in the way, and went ahead and wrote a crawler in go, kept the results in a sane name/db order for later sanitisation in and out of AltaVista, and after an aggressive gopher port scan of the internet, he created GopherVista, an index of the gopher-verse, running on Windows 98.

No, really, you read that right, GopherVista backends on Windows 98!

Read all about the creation of GopherVista over a Ben’s blog


Keep in mind that this is a search engine, not a proxy, so it’s best to use something like Internet Explorer 4, or an ancient Netscape that supports both HTTP 1.1 & Gopher.

I have to also say, that something like this is far more cooler, and better thought out than my utzoo hack, and I’m just happy to have inspired him, but now I really want to re-think my setup, and of course index all the things….

Peter Godiwn’s Gopher Server

Thanks to reader Peter Godiwn, he built a .net Gopher Proxy that can read several providers via API, and to get the ball rolling, he built a WordPress connector, and yes it works great with my site!

The added bonus is that now I am automatically updating my site via gopher.  It lives as a root, so instead of taking my existing gopher offline, I added a new DNS record, and brought up:


Naturally that URL won’t work for 99.99% of the people out there since their browsers don’t support gopher, but the Floodgap Gopher proxy, will do the trick!

One cool feature is that it can take modern images, and convert them to GIF for older browsers.  Images even work on Netscape!

Auto converted PNG to GIF

You can find source & binaries on his github page.

Super thanks to Peter, and what a fitting 10+1 post!

Multiplayer Macintosh Plus via Javascript/

I found this fun page over on  What is interesting is that it encorporates PeerJS and WebRTC to allow for a virtual network, letting you play multiplayer AppleTalk.  Just enable the network, and scan for other users.

It’s pretty cool, in a zero config kind of way!


And for coolness it’ll embed in a snazzy picture of a Mac Plus.  Although you can magnify the screen, so you don’t have to squint so much.

10 years later…

I can’t believe it either.  It’s been 10 years since my first ambitious post.

And off to a crazy start, I tackled installing NetWare 3.12, Running Xenix under emulation, and getting Mach 3.0+Lites running, among others in the first month.

As far as posts go, some months are obviously better than others, and so much has happened in the last 10 years, I’ve moved cities, states, countries and continents.  I’ve been though breakups, marriages, children, deaths, losing jobs, losing money, starting companies, renting houses, buying a house… It’s been incredible.

Looking back, in some places, I wish I’d written more, as this blog has been really technical which isn’t so bad, but even then it’s exceptionally terse.  Lots of stuff doesn’t format correctly, and the one thing I don’t like at all is that it doesn’t render on older browers.  But I have so much going on during the day, I don’t have time to write a CMS.  I had tried a few people to spec out something to read the wordpress DB, and generate pages + gopher pages, but they always go running for the hills.

I hope to keep on trying to modernize Darwin 0.3 .  I know that the world at large really doesn’t care, and I have a feeling that Rhapsody DR2 has some fundamental flaws that really prevent it from being anything useful, although it can’t be re-sold so it’s dead anyways.

So where will I be in 10 more years? I really don’t know.  I know one project I’ve been constantly putting off will have to come to light sooner or later, but I do want to move to .  I know my blog is hard to find, it’s a custom name, on a really really long DNS zone.  10 years ago, I was hosted on wordpress, back at, but after their nearly 2 week outage, I moved out onto my own machine.  I’d almost move back to someone managed, as I have so much other stuff going on, running a site isn’t worth my time, but I haven’t had time. When I do make the move though, most people won’t notice I plan to do a 302 + a refresh to bounce to the new domain, and all being well it’ll preserve the same schema so other than a shorter domain in the titlebar most people won’t notice.  Right now it’s doing it, but backwards.  But rest assured, I’m still keeping ..

I hope to at least keep this thing up, keep it slightly interesting.    Over the last year, the #1 page is Darwin 0.1 + Rhapsody DR 2 booted!  I honestly didn’t think that would be anywhere near as popular as it is, but even after OSNews locked the topic, I still get over 100 hits a day.  The #2 spot is Dunc’s Algomusic MkIIIb, after being linked to from [Vinesauce] Vinny – Text to MIDI.  Which just goes to show, I really can never tell what is going to be popular..


MachTen 2.2

MachTen console

Not that I need another UNIX, but I came across this fine thing googling around for some Mach based OS’s running on the 68000, and well here is MachTen.  Perhaps the most notable thing about MachTen is that it is capable of running in usermode under MacOS.  Without a MMU.

# cc -v hi.c -o hi
gcc version 1.40
 /usr/local/PMtools/cpp -v -undef -D__GNUC__ -Dunix -D__MACHTEN__ -DMACHTEN -DTENON -D__unix__ -D____MACHTEN____ -D__MACHTEN__ -D__TENON__ -Dmc68000 hi.c /var/tmp/cc000093.cpp
GNU CPP version 1.40
 /usr/local/PMtools/cc1 /var/tmp/cc000093.cpp -fno-builtin-alloca -fno-defer-pop -quiet -dumpbase hi.c -version -o /var/tmp/cc000093.s
GNU C version 1.40 (68k, MIT syntax) compiled by GNU C version 2.3.3.
default target switches:
 as -mc68000 -o hi.o /var/tmp/cc000093.s
 ld -o hi -x /usr/lib/crt0.o hi.o -lc
# size hi
text    data    bss     dec     hex
11220   400     1672    13292   33ec
# ./hi

And yes, it even supports TCP/IP with it’s own TCP/IP stack.  It can even operate as a router of all things!  From a users point of view it is a little sparse, but it’s 4.3BSD, and thankfully includes the C compiler, so unlike of UNIX of the era on ‘small hardware’ this one isn’t crippled.

configuring TCP/IP

TCP/IP is configured through the MacOS via the control panel.  As you can see it can use AppleTalk, Ethernet and TokenRing interfaces.  For my simplicity, I’m just using SLiRP on the Ethernet, so it’s the old setup.  I re-compiled my BasiliskIII to redirect a port into the VM so I can telnet into it.

To install System 7.0.1 you need to set Basilisk II / Cockatrice III as a IIci. I went ahead and used this ROM.  The ROM however does expect there to be a FPU.

rom Mac-IIci.ROM
modelid 5
cpu 2
fpu true

Running however, I’ve been able to set the CPU to 3 or 4 (68030/68040) and it’s fine, I think the major thing is the modelid.  If I try this under System 8 which needs a 68040, then it’ll crash in spectacular ways.  You don’t need MacTCP as again MachTen is a 4.3BSD kernel with Mach 2.5, so it has it’s own.

MachTen also includes support for NFS!  This greatly eases getting data in & out of the system.  To mount my Synology I just need the following command:

mount -t nfs -o timeo=1,retry=1,rsize=512,wsize=512,retrans=1 /mnt/data

And I’m good to go!

Previous 1.6


For anyone who is interested in classical 680×0 based NeXT emulation, I build the latest snapshot of Previous for Windows.  You can find it here: Previous-1.6_build_767.7z

When I had a cube, I was like everyone else, without a working magnetic optical disc. And I was a (and still am) a diehard 3.3 fan, but it’s still fun loading up version 0.8 under emulation.


The problem was several fold, from the drives turning out to be VERY sensitive to dust, the NeXT’s sucking air through the MO drive, trapping quite a bit of dust in the drives, mechanisms breaking, the optics being sensitive to heat, and of course our old friend, bad capacitors.  The build disk application warns it can take upwards of 3 hours to create a MO of the operating system.  They clearly were not fast either.  I think it took 30 minutes under emulation.


At the end of the day, I guess it didn’t matter.  Optical discs came and went in the 80’s , and re surged with CD’s and re-writable discs up until this decade.  Now we’ve pretty much gone either all solid state, or only large capacity disks with moving parts.

Oh well, I was looking for sample code, to see if there were other driver examples for the driverkit.  I didn’t think there was anything far back when NeXTSTEP was a black box, 68030 thing, but it never hurts to look.


It is cool that TCP/IP won out in the protocol wars.  It’s very convenient to have a current 2017 desktop, being able to communicate with operating systems nearly 30 years old.  Especially when it comes to things like NFS, making it even better for mapping drives, and sharing data.

And much to my surprise, with the bad reputation the SLiRP code has, I’m able to mount my Synology’s NFS share just fine from my virtual cube.

mount -t nfs -o fs,mnttimeout=1,retry=1,rsize=512,wsize=512,retrans=1 /mnt/data

I had just added some parameters to lower retry times, and resize the blocksize to be much smaller than a single packet so I don’t have to worry about any issues with MTU resizing.  Maybe it’s not optimal, but being able to copy data in and out is all I want to do, and it’s been reliable.

Oh yeah, since it was burred in the messages, for people who like old dmesg’s

Remote debugging enabled
msgbuf at 0x73fe000
NeXT Mach/4.3 #5.1(XM13): Thu Dec  1 13:03:37 PST 1988; /sources/projects/mk-0.8.26e0.8/RELEASE (photon)
physical memory = 15.99 megabytes.
available memory = 14.97 megabytes.
using 16 buffers containing 0.12 megabytes of memory
odc0 at 0x2012000
od0 at odc0 slave 0
od1 at odc0 slave 1
SCSI 53C90 Controller, Target 7, as sc0 at 0x2014000
IBM     DORS-32160    !# as sd0 at sc0 target 2 lun 0
       Disk Label: NeXT_0_8
       Disk Capacity 2063MB, Device Block 512 bytes
en0 at 0x2006000
en0: Ethernet address 00:00:0f:00:22:09
dsp0 at 0x20000d0
np0 at 0x200f000
sound0 at 0x200e000
root on sd0
master cpu at slot 0.
setting hostname to NeXT_0_8
network_init.gethostbyname fails, errno=2
network_init failed: no network
Network Server initialised.