Aclock BSOD

(This is a guest post by Antoni Sawicki aka Tenox)

Do you remember the famous Windows NT Blue Screen Of Death? For years it was a source of jokes and bad reputation of Windows reliability.

There even was a Blue Screen Saver. Today we fortunately see much less of it, but it still is there, reminding us that Windows internally is in fact a text mode operating system. The 1989 NT Design Workbook tells us that in the early days of development there was an ANSI terminal emulator and bunch of command line utilities running in the text mode. Sadly all were removed in the retail version. The only true text mode application left around was autochk. Since the day Aclock was conceived I always wanted to run it on the NT text mode boot screen. In it’s twisted logic it actually makes a perfect sense.

So how do you actually output to the BSOD screen? Initially there was a lot hope in Windows NT Native Application, which can use NtDisplayString() function to display text before GUI takes over. Mark Russinovitch has written a sample Native Application with source code. Unfortunately I soon realized that NtDisplayString() does not allow for any control characters that would let me position the cursor or clear the screen. It doesn’t let much more than to display “Hello World” during Windows boot. This unfortunately wasn’t what I was hoping for. Out of lack of further ideas the project was shelved for nearly 10 years until I recently got some help from a real windows insider.

The new hope came from a HalDisplayString() and it’s helper functions HalQueryDisplayParameters() and HalSetDisplayParameters()which return screen resolution in characters and allow to position the text cursor. Exactly what I needed! However these functions are part of the NT Kernel and there was absolutely no hope of calling them from user mode, even a Native application.

So a device driver version of Aclock was conceived. Err WHAT? Yes a Windows Kernel Mode Device Driver version of Aclock. It sounds like craziest idea and most ridiculous waste of time ever. Worse than that, it definitely is! Despite that, development of the driver was actually surprisingly straight forward and the most difficulties I had was to do with setting up the right environment. It required Windows NT 4.0 SP6, an old version of NTDDK, SDK and Visual Studio. Once I had the project set up correctly, the only thing left to do was to figure out the kernel mode equivalents of some of the things I was getting for granted, for instance sleep(). My last surprise was rather unexpectedly difficult access to floating point in the driver. I was advised to avoid, so I have generated a pre computed tables of sin and cos values for every minute on the clock dial.



I must say that VMware Workstation Snapshots came very handy for launching and testing of the driver. It spared me from constant rebooting and re-launching the whole environment. I could load aclock and literarily click “back” like in a web browser.

Here is a link to the binary, source and project files.

Since running the driver on your own system will render it unbootable (you can always do a snapshot or use last known good configuration) I have build a minimal Windows NT Embedded (NTe) image that loads the driver on startup. It’s available as VMware machine, and a Qemu image.

Windows NT Embedded project


The next steps may involve porting AA-Lib to NTHAL. From there the possibilities are unlimited aalib-quake? 😉

Update:  Video

Aclock Windows NT BSOD Driver from Antoni Sawicki on Vimeo.


Fallout New Vegas on CrossOver

it runs!

So I’ve been dying to play this on OS X for quite some time to no avail.  So after the CrossOver give away I thought I’d be set! .. I installed steam, spent forever downloading and installing Fallout to only get either a blank white screen when running in full screen mode, or a black window running in a window.

So finally messing with ‘bottle’ settings I stumbled on the ability to run a session in an ’emulated desktop’.  And with that setup with a big enough resolution, boom run it again and it works fine in a window!

Sadly I never held onto my save games so looks like I’ll be starting from scratch.

OpenBSD 5.2 released!

OpenBSD 5.2 / Brazil

Very cool news! OpenBSD 5.2 was released!  The big change is how it handles threads, going from userspace, to kernel space so it’ll thread between multiple processors now.

Also interesting is that it supports CLANG now!

Check it out here!

It might be time to update some VAX stuff…

I just saw an uptick in traffic from

And even a quick shout out!

A long time passed! I found someone is also interested in the old things. Neozeed built some Linux 0.00, 0.1x images running on Qemu emulator . I also put them HERE for people to find them easily. Thanks Neozeed. And during this period of time, I also find some valuable old things. The first is the source code of lib-0.12 for kernel 0.12. The other is the full ancient Linux system using kernel 0.98 patchlevel 1 released early by SLS, the 0.98pl1 system .

For anyone who doesn’t know, is a historical repository for the early start of the now wide spread Linux operating system.  In a somewhat ironic sense of being available on the internet much of the early stuff is lost, however thanks to the work of these fine folks, and some less than scrupulous shovelware dealers, and hoarders much of it has been pieced back together.

I suppose much of it is really of no practical use today, although at the same time the pre 2.0 linux stuff was incredibly small.. And capable of running in ultra minimal configurations.

IBM OS/2 1.1 Extended Edition

I recently acquired a copy of IBM OS/2 1.1 Extended Edition, and I thought I’d at least cover what makes this version different from the ‘Standard Edition’ and the Microsoft version of OS/2 1.1

First off the IBM versions of OS/2 1.1 use the 286 triple fault method of switching from protected mode to real mode exclusively while the Microsoft kernel includes 386 detection & mode switch instructions.  The the VirtualBox timing patches won’t work with the IBM kernel & drivers while the Microsoft kernel & drivers boot up and work fine on the IBM diskettes.

IBM Kernel strings

Microsoft kernel strings

And as you can see another weird thing is that Microsoft keeps all the string resources in os2ldr, while IBM has them in os2krnl..

So with the Microsoft kernel & drivers, on the IBM diskettes, installation went pretty straight forward. And once the OS is installed, then you have to open up a command prompt and install the various Extended Edition components:

Which can be seen here as CMINST for Communications Manager, DSINST for the Database Server, QMINST for the Query Manger, and finally REQINST for the Network (NetBEUI) Requester Service.  The file server capabilities were sold as an addon, known as Lan Manager.

IBM OS/2 1.1 does include a tutor program on how to use the OS, and some general help for Presentation Manger.  I believe it wasn’t until 1.2 did Microsoft include one.

IBM OS/2 Tutor

As you can see it is kind of sparse but it does show the old school OS/2 logo.  In addition each of the EE components includes a tutorial, although they are all text mode..

OS/2 EE Overview

And as an example here is what the Communications Manager looks like

Communications Manager Tutorial

The sad thing is that the EE components are all full screen text mode.  There is no Presentation Manager integration at all here.  And I think this underlines a critical fault in OS/2 where there is separate text modes, both full screen & windowed that are incompatible with each other. Much like the first Lotus 1-2-3 for OS/2 ran in a full screen text window, you are blocked from seeing anything else at the same time, defeating the whole point of being able to multitask.

Communications Manager was the one thing that I did use, although it was honestly very disappointing   Its big thing at the time was communicating to Midrange (AS/400) and Mainframe (370/390) machines via SNA or X.25 . Also included is a basic ASCII dumb terminal emulation program that can do VT100 with Xmodem.  The real limiting factor is that it is limited to 9600 baud.  And this also brings out another long term deficiency in OS/2, the serial support was always underwhelming, and the majority of people eventually had to use the SIO drivers to get any decent performance.

The Database Manager is a simple enough SQL server, client.  It is capable of doing simple reports, and even ‘panels’ much like Oracle forms of late.  It seems robust enough on small sample tables, although I couldn’t imagine it handling anything of any major size by modern standards.  I would imagine it would be for DB2 type users trying to steer them away from DBase, Paradox or Oracle.  Although to be honest I’ve never seen it live in the wild but I’m sure someone did out there.  Also I can’t imagine running a SQL server on a 6Mhz 286.

Sidekick for OS/2

One interesting thing included in OS/2 1.1 EE is Borland’s Sidekick for OS/2.  While it didn’t make the cut in later releases it was a nice touch for 1.1 as otherwise it is pretty baren, as IBM & Microsoft seemed to feel that OS/2 should ship as barren as possible. Of all the applications though the PM notepad was the nicest.. Although I’m sure if it were 1988 I’d get more use out of the rest of sidekick.

For the heck of it, I’ve taken a VM of OS/2 1.1 and upgraded it to 2.0 and happily all the EE components work as well as they did on 1.1 .  Considering how picky the Warp upgrade was, it is kind of surprising.

Windows RT

Windows 8 RT from

Just before the tidal wave comes in on the Windows 8 launch, let me just spell out one thing… Windows 8 RT will *NOT* run any existing Windows applications.

I don’t know why we even have to go back down this road, but it’ll be Windows NT on the MIPS or PowerPC all over again.

And to be too honest, the price is just too damned high for what it is, and that is an evolutionary dead end.  Expect there to be some kind of post Christmas fire sale, once people find out they can’t play minecraft or sims on it.

But apparently it comes with Microsoft Office (Word & Excel?) no idea if it includes PowerPoint & Outlook..   I guess the one safe thing is that it won’t run x86 exploits/buffer overflows, so maybe this is a good PHB, ‘mom’ device.

Me?  I’m still using a 1st gen iPad.