WinFile comes back from the dead.

WinFile!

Yes, this WinFile.  So Microsoft apparently went through their Windows NT 4.0 source code tree from 2007, and decided to pull this tool out, and send it out into the world.  It’s available in a ‘original’ version, and a ‘v10’ version which includes the following enhancements:

  1. OLE drag/drop support
  2. control characters (e.g., ctrl+C) map to current short cut (e.g., ctrl+c -> copy) instead of changing drives
  3. cut (ctrl+X) followed by paste (ctrl+V) translates into a file move as one would expect
  4. left and right arrows in the tree view expand and collapse folders like in the Explorer
  5. added context menus in both panes
  6. improved the means by which icons are displayed for files
  7. F12 runs notepad or notepad++ on the selected file
  8. moved the ini file location to %AppData%\Roaming\Microsoft\WinFile
  9. File.Search can include a date which limits the files returned to those after the date provided; the output is also sorted by the date instead of by the name
  10. File.Search includes an option as to whether to include sub-directories
  11. ctrl+K starts a command shell (ConEmu if installed) in the current directory; shfit+ctrl+K starts an elevated command shell (cmd.exe only)
  12. File.Goto (ctrl+G) enables one to type a few words of a path and get a list of directories; selecting one changes to that directory. Only drive c: is indexed.
  13. UI shows reparse points (e.g., Junction points) as such
  14. added simple forward / back navigation (probably needs to be improved)
  15. View command has a new option to sort by date forward (oldest on top); normal date sorting is newest on top

Which is quite the list of things to add to the old WinFile.

You can find the source & binaries on github.

Windows 10 ARM64 on QEMU

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

Microsoft is releasing Windows 10 for ARM64 CPUs and this time, unlike Windows RT fiasco, there will be a full desktop app support including a dynamic binary translator to allow running existing x86 apps on ARM CPU, much like FX!32 on Alpha NT or Rosetta on Mac OS X.

Latest Visual Studio updates now bring official ARM/ARM64 support for Desktop Apps, little hidden, but here is how to enable it.

Being able to compile Windows ARM apps, I wanted to try to actually run them, but … on what exactly? There are some developer evaluation boards. Apparently someone managed to run it on Raspberry PI. Most importantly however you can run Windows 10 ARM64 on QEMU. This is some serious Fun With Virtualization!

Windows 10 ARM64 running on QEMU

I’m not claiming to be the first. Clever people have already done it. I just wanted to make it little easier for the lazier of us. Here is how.

Follow the link above but skip the shady UUP business in step #3 and download ready made iso instead. You can google the iso image from windows.cmd and it will take you to this link. You need the rest of the files like UEFI firmware and virtio drivers.

For the even more impatient here is a ready to run image with Windows pre-installed. Because QEMU now comes with DLL HELL I’m not including it in the archive. You will have to install it separately.

Go have fun and port some apps to ARM64 with free community edition of Visual Studio. I’m going to start with Aclock 🙂

Building the Original Commodore 64 KERNAL Source

I just found this post over @pagetable.com, the source code to a bunch of old Commodore 8 bit products have been located and recovered, and place online over on github.  Even better there is detailed instructions on cross assembling from a suitable PET machine for building your own KERNAL ROM.

Other sources include:

  • BASIC_C64 reindented BASIC_C64, KERNAL_C64 and DOS_1540 to approximate the LST
  • BASIC_CBM2_A reindented BASIC_CBM2_[AB], KERNAL_CBM2_[AB] and EDITOR_CBM2 to appro
  • BASIC_CBM2_B reindented BASIC_CBM2_[AB], KERNAL_CBM2_[AB] and EDITOR_CBM2 to appro
  • BASIC_PET2001 added BASIC_PET2001
  • DOS_1540 reindented BASIC_C64, KERNAL_C64 and DOS_1540 to approximate the LST
  • DOS_1571 added DOS_1571
  • DOS_1581 added DOS_1581
  • DOS_4040 reindented DOS_4040 to approximate the LST output of the assembler
  • DOS_8070 reindented DOS_8070 to approximate the LST output of the assembler
  • DOS_8250 reindented DOS_8250 to approximate the LST output of the assembler
  • DOS_D9065 reindented DOS_D9065 to approximate the LST output of the assembler
  • EDITOR_CBM2 reindented BASIC_CBM2_[AB], KERNAL_CBM2_[AB] and EDITOR_CBM2 to appro
  • KERNAL_C64_01 added KERNAL_C64_03 and renamed the existing KERNAL_C64 to KERNAL_C64_01
  • KERNAL_C64_03 fix disclaimer of C64 KERNAL -03 to reflect the LST printout
  • KERNAL_CBM2_A reindented BASIC_CBM2_[AB], KERNAL_CBM2_[AB] and EDITOR_CBM2 to appro
  • KERNAL_CBM2_B reindented BASIC_CBM2_[AB], KERNAL_CBM2_[AB] and EDITOR_CBM2 to appro

Super late, but pretty cool too!

Of interest is the PET2001 Basic sources.  While there have been reversed efforts dating back for years, this is the actual source code.  Namely the header.


TITLE BASIC M6502 8K VER 1.1 BY MICRO-SOFT
SEARCH M6502
SALL
RADIX 10 ;THROUGHOUT ALL BUT MATH-PAK.

$Z:: ;STARTING POINT FOR M6502 SIMULATOR
ORG 0 ;START OFF AT LOCATION ZERO.
SUBTTL SWITCHES,MACROS.

REALIO=4 ;5=STM
;4=APPLE.
;3=COMMODORE.
;2=OSI
;1=MOS TECH,KIM
;0=PDP-10 SIMULATING 6502

Which is pretty damned interesting. The infamous “WAIT6502,1” feature is also included!

SimCity under Windows 3.0

In this case, I’m looking at the ultra popular Sim series, and their Windows releases.  While I was a big fan of SimCity, especially having played it on an Amiga, when I found out that there was a Commodore 64 version I had bought it immediately as I wanted to play it at home.  And let me tell you, it was a severely underwhelming experience.

SimCIty C64

From the logo it’s all down hill.  I know that SimCity is actually from 1985, and as the first version, the Commodore 64 version is basically the prototype.

SimCity C64

Which was just graphically underwhelming, but I still played the hell out of it.  And then I saw the Spectrum 48k version.  Yes the blocks are ‘buildings’ as the units fill up they will turn into black with only the letter remaining.  Despite the ultra minimal graphics, the game play is there.  And once you get used to the bizarre combination keyboard+joystick controls it is addictive.  I mean it is SimCity!

SimCity Spectrum 48k

But going to the PC, I kind of grew out of SimCity.  DooM was the hot game, and the whole immersive 3d thing.  And of course during that era being on the PC I only knew of the MS-DOS version.  While there was a version for OS/2 Warp released much much later, and by then if I felt the urge there was SimCity 2000 for Windows.

But after getting the kick for SimEarth, and finding the Windows 3.0 version, I was much surprised to find out that there was a version of SimCity of Windows 3.0 as well!

And I can see why I never had seen this for retail, or knew anyone who had it.

Maxis Order Form

That’s right in the included form, the price was $59.95.  And SimEarth was $69.95!  To put that in perspective that would be now $107.17, and $125.04  respectively.  And people think $60 for a game today is expensive!

To get the full experience I went ahead and loaded up PCem, with a 386 and EGA graphics to get that original feel.

Since this requires Windows 3.0, with either EGA or VGA graphics, and 2MB of RAM, I figured I would go with a ‘top of the line’ souped up 386DX.  I tried to load it up with the Wyse700 driver, and the game fails to load resources.  I don’t know if its even possible to make black and white or four colour resources, as I live in the future, and I have millions of colours!

That said, I tested and it has no issues with 8bit depths either.

Installation is pretty smooth, the game is shipped on either two 360k 5 1/4″ diskettes, or a single 720kb diskette. While modern games have so much more, there is many things this game is lacking.  But Maxine isn’t one of them.

Maxine the cow

No really, she is listed as a feature.

The music is through the PC speaker.  Just like the sound effects.  Multimedia integration with Windows that we take for granted today just wasn’t a thing back then.  The version I have is 1.0, Although a pirated version 1.1 that was sent in actually includes WAV sound effects, and a single midi track. However it doesn’t run on Windows 3.0.  So lucky me!

Unrecoverable Application Error

Ah the UAE, the bane of Windows 3.0.  They were so unpopular that Microsoft had to rename the dialog.

SimCity on EGA

Living in the constraints of EGA feel absolutely claustrophobic in today’s world.  640×350 just isn’t enough screen rel estate.  Even 640×480 is far far too small.  And that lead to one issue I found

SimCity SVGA

While using a SVGA driver so I can get that impossible to afford experience of 1280×1024 in 256 colours, but the application was never meant to run in something that wide.  You can easily put child windows ‘behind’ the dead space, and you can never recover them.  You have to save and re-launch. bummer.

Which leads me to perhaps the most famous reputation of SimCity for Windows.  As mentioned on Joe’s site, there was a massive struggle to get games like SimCity running on Windows 95. As Raymond Chen says:

If any application failed to run on Windows 95, I took it as a personal failure. I spent many sleepless nights fixing bugs in third-party programs just so they could keep running on Windows 95. (Games were the worst. Often the game vendor didn’t even care that their program didn’t run on Windows 95!)

Yes, they basically knew it had problems.  In the box they even had this cute flyer:

I sure hope Raymond got something for his efforts!

And yes, rest assured it actually does work.  It even works on Windows 3.00a under Citrix MULTIUSER 2.0.  Pointless as there is no way to have remote graphical displays but nice to see it work.

So what went wrong?  Where was all the follow up games for Windows?  Obviously the hardware needed was incredibly expensive.  A 386 or even a 286 with a few megabytes of RAM was expensive.  VGA or EGA monitors were also very expensive.  Even mice were expensive!  Putting together a low end PC basically barred you from this high end premier experience.  I can’t imagine that Maxis sold many copies of this.  As mentioned above I’m pretty sure there is a reason why I never saw this in the wild.

Awesome Windows 386/486 machine prices February 1992

Spending $3000 in early 1992, which is $5197.95 in today’s money. I can’t even begin to imagine spending over $5,000 to play a game.  It’s no wonder when older machines show up on eBay people want far too much for them.

In a strange way I like to watch SimCity animate in the background.  It’s like a fish tank, or staring out into a busy street.  With the advantage that I can summon a giant lizard to destroy it at my whim.

Microsoft Game Shop

This one showed up on eBay of all places.  The original MSRP was $49.95 USD.

Microsoft Game Shop

Well it seems that back in the early 90’s Microsoft was transitioning their Basic offering from the QuickBASIC to Qbasic.  And one of the launch products was the Microsoft Game Shop, back from 1990.  This was a specialized version apparently without any compiler, but included a tutorial based around games to teach basic.

Microsoft Game Shop (back)

Which back in the day it looks like it would have been a good way to inspire kids, although I have never heard of it.  There is even a glowing review in Compute, issue 130.

From the packing list it contains:

QuickBasic went on to become the cut down QBasic that was later included in MS-DOS 5.0, Windows NT 3.1, and of course OS/2 2.00.

Citrix Multiuser 2.0

Back before selling auto insurance

Citrix Multuser 2.0

Nothing like a little vintage advertising to try to re-capture the feel.  But don’t let the colorful lizard fool you, this certainly was a dark time for Citrix.  Firs they had tooled a product around the future of the PC market, OS/2 to only have Microsoft pull out of active development just as they were launching Multiuser 1.0.  And to be fair it wasn’t just Citrix, the whole industry including Microsoft was in turmoil as people were pulling away from IBM and selecting Windows on MS-DOS of all things!

Citrix, like a lot of vars were caught in this lurch between OS/2 and the forthcoming NT OS/2 3.0, which of course ended up becoming Windows NT.  During this time even Microsoft had to keep selling it’s SQL server on OS/2, along with it’s LanManager file & print server.  Although they had a solution for the end user in the form of Windows they didn’t have any server platform.  That left Citrix chasing the tail end of the application wave again as although they could now finally use OS/2 2.0, with it’s 32bit/16bit hybrid kernel, there remote user solution was still terminal based.

IBM OS/2 ad

As IBM & Microsoft had split up the direction of the OS/2 project, IBM was running with version 2 as a platform for running DOS & Windows applications.  Which ultimately lead to the major problem that OS/2 ran Windows apps better than native Windows thanks to it’s ability to run isolated Windows VM’s using paravirutalized graphic drivers.  It wasn’t until Windows NT 3.5 could Microsoft meet this feat with it’s new platform.  Suddenly Citrix had access to tonnes of MS-DOS based applications, much to my surprise there is even a DPMI driver on the disks I have, meaning that Windows 3.0 standard mode can run, along with DooM!  But for Citrix this would be another one of those ‘not good enough’ moments where PC Servers were just high end workstations that could easily be maxed by one user, commodity multiprocessor machines were years off, and of course everyone was jumping to Windows 3.0.

But this did at least you run MS-DOS applications remotely, over dialup.

Citrix multiuser 2.0 boot

Installing Citrix Multiuser 2.00 starts looking very much like one of the 1.x versions of OS/2 with a far more busier screen featuring the Citrix tree.  However from this point onward it feels a LOT more like IBM OS/2 2.00.  Citrix interestingly enough has two disk 1’s, one that features newer LADDR drivers, and another with the older 1.x drivers.  Although under bochs, the older driver disk crashes out.  The entire OS fits on 8 high density 5 1/4″ diskettes.  As teased before this post, I saw this on eBay, ordered it immediately to only discover that I don’t have the needed drive, and had to order one from pc-rath_de, and I wanted to give a shout out, as he made sure that I had the proper floppy ribbon cable, so I could go ahead with this fun project.

Although I had been expecting this to be inline with the never released Microsoft OS/2 2.00, it clearly has a lot of IBM vestige, even though the OS/2 source code license agreement was between Citrix and Microsoft.

Indeed, even checking the OS level:

IBM OS/2 Base Operating System
Standard Edition 2.00     Component ID 560109001
Current CSD level: XR00000
Prior   CSD level: XR00000

Compare this to the OS/2 2.00 GA:

IBM OS/2 Base Operating System
Version 2.00 Component ID 562107701
Type 0
Current CSD level: XR02000
Prior CSD level: XR00000

So clearly this is not in sync with the General availability of OS/2.  What this is closer to sync with is the OS/2 LA – Limited Availability release.

IBM OS/2 Base Operating System
Standard Edition 2.00 Component ID 560109001
Current CSD level: XR00000
Prior CSD level: XR00000

Well isn’t that interesting?

Having had the misfortune of crashing all three we can look at the internal revisions:

Citrix Internal revision 2.053 6.177H base

LA Internal revision 6.167 91-10-08

GA Internal revision 6.307 92-03-01

So this make the BOS (Base Operating System in IBM speak) newer than the OS/2 LA (Limited Availability) kernel, however quite a few revisions behind the GA (General Availability).  This of course means that Citrix Multiuser 2.0 is basically incompatible with any 32bit OS/2 software.  I was unable to run anything EMX based, nor could I run the vast majority of the 32bit TCP/IP stack for OS/2 2.00.  The best I could do was have it load the drivers, to where I could setup and ping the loopback, but the route command crashes the system, and any of the commands simply refuse to run.  Not being able to run 32bit OS/2 applications greatly reduces the usability of the system, and falls further to the OS/2 trap that it really just excels at running MS-DOS apps.

It was a bit of a surprise to find out that even though Citrix had their source license through Microsoft, the 2.0 components turned out to be the upstream components from IBM.  Just as the included Qbasic is the IBM version, along with the other components.  The terminal support is naturally more robust than version 1, although I think the larger problem I had trying to run OS/2 programs it that many terminals are hard coded for 24 lines, and I don’t think you can change that in Citrix.  And it does mention that if you do try to run on a 24 line terminal that DOS won’t run.

Much like 1.0, all the administration is done via text tools.  It feels weird at first as even on the console there doesn’t seem to be any mouse integration, although the installer does ask if you do have a mouse on the system.

And like 1.0 there is no Presentation Manager, so no graphics on the console.  HOWEVER you can run MS-DOS graphical stuff on the console. Although today I have no real need for it, but I went ahead and setup the included Windows support.

Windows for OS/2

What is interesting is that you are expected to supply your own retail version of Windows 3.00, and Citrix has some updated drivers, along with OS2K286.EXE, and updated program manager, control panel, and print manager.  While IBM included a full copy of Windows 3.00 at this point, this feels like the beginning of OS/2 for Windows – AKA the Borg.

Going Multiuser

First I just setup a COM port on Bochs to Listen on port 8880.  Unfortunately this isn’t resilient, as Bochs will wait for a connect before actually starting, and if you drop off, it won’t let you connect back in.

com1: enabled=1, mode=socket-server, dev=localhost:8880

And then it’s a matter of running CFGTERM, and adding in the Async module.

Citrix add in Async

With the module added you then just have to assign a port.

ICA profile

I didnt’ do anything special other than telling Citrix that there is no modem, it’s a direct connect, and to use the ICA terminal profile.

Using the Citrix MultiLink program, and DOSBox I was able to add an ICA terminal.  On DOSBox I had to specify a modem with an IRQ in the config like this:

serial2=modem irq3 listenport:5001

CML modem settings

In the modem settings I had to set this to Forced connect, otherwise it’ll never see the server.

CML dialup profile

And here is how I ‘called’ the Bochs VM.  And then after ‘dialing’ in Bochs will start up the Citrix VM, and then you’ll get the simple Login prompt.  Login and you’ll get pselect.

Logging in to Pselect

Pselect the the text based UI tool to get around your OS/2 sessions.  It’s a little cumbersome at first, but once you get used to it, it’s just like OS/2 1.0 … Or Multiuser 1.0 for that matter, nothing really changed, except you can start MS-DOS Sessions now.

MS-DOS over the serial port

And yes, you can run Qbasic.  But you can’t do anything graphical. Not even DooM.  Although after loading the VDPMI device driver, DooM v1.1 will run, but then it’ll give you this fun error:

No graphics over the serial line

And that is where I’m going to have to leave this adventure for now.

 

Installing and using Citrix Multiuser v1.0 on BOCHS

Print Ad

Back in the late 80’s when OS/2 was starting to get some traction Ed Iacobucci took a team and split off from the mainline Microsoft / IBM alliance, and with Microsoft’s blessing (and source code) took OS/2 and took up the challenge that both IBM & Microsoft dropped that was the ultimate challenge to UNIX, the ability to host multiple users on the same machine.  Citrix had it’s start some time in 1989 (Don’t forget that NT OS/2 had it’s start in 1988), and back then LANs were still seen as super expensive, just as TCP/IP was a university / military protocol that even enterprise to small businesses were hooked on either NetBEUI or IPX/SPX, if they had any LAN at all.

Sneakernet was king in this era, just as the BBS was our connected world.

As this ancient promotional video shows, the product they were chasing was low end Unix market, oddly enough their larger competition being SCO Xenix, which itself was separated out from Microsoft.

While I’m waiting for a 5 1/4″ disk, I thought I’d take a crack at installing Citrix Multiuser version 1.0 that had surfaced a while back.

I’m using this as a template for a config.  Naturally to boot floppy image it’ll need a change.

megs: 16
romimage: file=bios/BIOS-bochs-latest
vgaromimage: file=bios/VGABIOS-elpin-2.40
floppya: type=1_2
floppyb: type=1_44
ata0: enabled=1, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14
ata0-master: type=disk, path=”citrix500.img”, cylinders=1023, heads=16, spt=63
ata1: enabled=0
ata2: enabled=0
ata3: enabled=0
boot: c
log: bochsout.txt
mouse: enabled=0
debug: action=ignore
mouse: enabled=0
private_colormap: enabled=0
floppy_bootsig_check: disabled=0
com1: enabled=1, mode=socket-server, dev=localhost:8880
com2: enabled=0, mode=socket-server, dev=localhost:8881
com3: enabled=0, mode=socket-server, dev=localhost:8882
com4: enabled=0, mode=socket-server, dev=localhost:8883
parport1: enabled=1 , file=”print.txt”
parport2: enabled=0
ne2k: ioaddr=0x320,irq=10, mac=fe:fd:00:00:00:01, ethmod=null
sb16: enabled=0
usb_uhci: enabled=0
port_e9_hack: enabled=0
clock: sync=none,time0=691148400

But that’ll do it.

Citrix has many 386 hooks in place.  After applying the CSD MU01091 I saw this in the readme:

MULTIUSER is designed to take advantage of the 386/486 instruction set where possible. Because of this Citrix MULTIUSER runs only on 386 compatible processors. You can take advantage of this fact to boost performance of your application while running on MULTIUSER.

The compilers available for MS OS/2 generally supply library functions which will execute on both 286 and 386 processors because MS OS/2 will run on these. Unfortunately, this prevents natural optimization for the 386 32-bit environment. However, we have found that it is a simple matter to boost performance by replacing some of your compiler runtime library routines. For example, if your application makes heavy use of long arithmetic, you can modify the multiply and divide runtime functions to use the explicit 32-bit multiply and divide instructions available on the 386 and 486 processors, thereby avoiding the 32-bit arithmetic emulation.

Many compilers such as Microsoft C 6.0 make available the source to the runtime library. Microsoft C 6.0, as an example, also provides instructions and make-files for rebuilding the libraries.

The Citrix Support Bulletin Board has further information on these techniques, along with specific code examples that you can tailor to your specific needs.

I’ll have to ask people smarter than me about finding any of this information.

Anyways Citrix requires that you install it onto a HPFS partition.  Citrix uses the Microsoft OS/2 1.21 kernel + base level for the OS.  After installing and running syslevel on both they report the same level.

MS OS/2 Base Operating System
Standard Edition 1.21 Component ID
Current CSD level: XR04072
Prior CSD level: XR00000

However the kernel naturally is different as this does support multiple users.  By default Citrix is setup for async terminals, and as far as I can find there was no actual LAN connection product available.  This is just simply the most common setup of the era, where UNIX was typically deployed with async terminals, and with remote users on dialup.  The Citrix media I have is dated from January 25th, 1991.  Although according to the ‘official timeline (pdf)‘  version 1.0 was released in 1990.  This was just after the protected mode version of Windows was demo’d to Bill Gates & Steve Balmer, which incentivized  Microsoft to dump OS/2 for Windows.  This put Citrix in a bad position as they had setup their product strategy around the next generation OS from Microsoft which had for all intents and purposes had been made obsolete overnight.  And as the Windows 3.0 juggernaut picked up steam selling over 4 million copies, while all previous versions of Windows combined were only in the neighborhood of 2 million copies.  As far as I’m aware, none of the OS/2 1.x sales numbers were ever released.

Citrix 1.0 is limited to OS/2 1.2 character mode executables.  And there simply isn’t that many.  And with the industry moving to the aforementioned graphical Windows 3.0 applications Citrix hit the market with a thud.  Citrix provides support for the following applications:

  • Borland Paradox 2.0
  • California Software Products BABY/4XX
  • DataEase SQL
  • Data Access DataFlex
  • IBM DisplayWrite 4/2
  • IBM Platinum Series 2.0
  • Irwin EzTape OS/2 Tape Backup Software
  • Lotus 1-2-3 Release 3.0
  • Maynard MaynStream OS/2 Tape Backup Software
  • Micro Focus Cobol/2 Workbench
  • Microrim R:Base 3.1
  • Microsoft BASIC Version 7.0
  • Microsoft C Version 6.0
  • Microsoft LAN Manager 2.0
  • Microsoft Word 5.0
  • Microsoft SQL Server
  • Novell NetWare Requester for OS/2 V1.3
  • Oracle 6.0
  • Word Perfect 5.0

As you can see, this isn’t a very large list.

Citrix multiuser 1.0 config program

There is a text panel/menu driven config program.  This greatly simplifies tasks.  I setup a simple system with a single com port, although Bochs doesn’t do anything sophisticated like modem emulation but rather you can connect ONCE to the VM, and that is is.  But it’s enough to launch HyperTerminal to get a serial connection.

Serial Terminal

The serial support on Citrix is pretty good as long as you have updated to CSD MU01091 which adds support for VT100/VT220 terminals.  With a tiny cheat sheet it’s not too hard to get used to the multitasking capabilities of Citrix/MS-OS/2

Hotkeys:
Login switch . . . . . . . . [{ctrl}{u} ]
Session switch . . . . . . . [{ctrl}{n} ]
Session direct . . . . . . . [{ctrl}{f} ]
Session create . . . . . . . [{ctrl}{o} ]
Reset terminal . . . . . . . [{ctrl}{y} ]
Print screen . . . . . . . . [{ctrl}{]} ]
Print screen toggle . . . . [{ctrl}{\} ]
Ctrl+Break . . . . . . . . . [{ctrl}{c} ]
Ctrl+C . . . . . . . . . . . [{ctrl}{c} ]

I can really see the value at the time of Citrix, although again it really arrived just too late to the market.  I’ll have to track down more of these ‘approved’ programs, and give them a shot.

It’s funny how the market can pivot where something that was seen as a defining feature of midrange OS’s in this case being multiuser became irrelevant as CPU prices dropped to the point where not only can individual users cheaply obtain their own processor, let alone own multiple which is typical today.  While Citrix was chasing the ‘killer feature’ of UNIX being able to host multiple users on a single ‘larger’ machine, the industry rather prefered to host server applications on cheaper ‘large’ PC’s, ala MS SQL Server, SNA Server, and Exchange Server.  With absolutely no data to back anything up, I suspect that SQL Server 4.21a may have moved more copies than Citrix 1.0.  If not I can gaurentee that SQL Server 6.0 sure did.

That said once, Citrix re-tooled their ICA offering onto Windows NT 3.51 they could reach their niche market of hosted applications in a data center.  And obviously taking over Xen, and jumping onto the virtualization market was a good move to keep relevant, especially how Microsoft had twisted their arm during the Windows NT 4.0 transition.

Unboxing Citrix Multiuser 2.0

I think this is the proverbial OS/2 holy grail, a shipped copy of Microsoft OS/2 2.0

From a press release:

Coral Springs, Florida based Citrix Systems Inc has a new release of its multiuser implementation of MS-DOS. Multiuser 2.0 is designed to run any combination of MS-DOS, Microsoft Windows and OS/2 applications concurrently, and to provide all key features of commercial-grade operating systems multiuser, multitasking operation with terminal support, security, resource management, remote access and administration utilities. It is claimed to be a 32-bit operating system for Intel Corp iAPX86 machines from the 80386SX up. It is claimed to be compatible with Novell Inc NetWare, Microsoft LAN Manager, IBM LAN Server, and Banyan Vines networks, enabling it to function as a low-cost network extender. The ability to run graphical applications at the console will be available next month, with support of graphics at the terminal level will be added in April as a no charge upgrade. Citrix Multiuser 2.0 is $1,000 for a five-user package; doubling the number of users is $500, regardless of how many there were originally. An unlimited user licence is $2,000 once you’ve bought the five user licence. Out next month.

Looking at the copy I have, it’s strictly for OS/2 and MS-DOS programs.  There isn’t any hint of it supporting 32-bit OS/2 programs, so I have the suspicion that this is like the OS/2 FOOTBALL beta, which was the 1.0 kernel with 386 based paging (virtual memory) and v86 mode support for multitasking MS-DOS.   The manuals also state that there is no support for Presentation Manager either at the console or remotely.  So it appears that like Citrix Multiuser version 1.0 it is strictly text mode based.

I’d tell you more, except…. yeah. wrong media.

Hey buddy, spare a 5 1/4″ High density drive?

Microsoft C KnowledgeBase articles online

PC Mag, January 1989

It’s weird I was discussing putting this online in a more human readable format, and then  Jeff Parsons over at the incredible full system emulation in javascript site, pcjs.org just did it.

As you may or not be aware of, Microsoft hit it big as a computer languages company, before they added operating systems into it’s portfolio.  And for some weird reason after the whole OS/2 divorce thing, someone decided that everything that had been painfully learned in the earlier eras should just be expunged from history.  Which is a real shame to anyone interested in Basic, Fortran, Pascal, C and MASM.  Years ago I had gone through the steps of extracting the text the only way I could figure out easily, by writing a simple TSR that would dump the contents of the text video buffer, and write it to a file, then press the page down key, and keep repeating the process. The end result being that I had then dumped the MSPL aka the Microsoft Programmer’s Library.  I had put the text into an archive, aptly named Microsoft_Programmers_Library.7z, and pretty much used grep whenever I wanted any information, and left it at that..

It’s really cool to see it slowly transitioning to more useful information.  You can read Jeff’s article Corporations Are Crappy Archivists about his quest for seemingly simple information about ancient Microsoft mice, and the archive of KB’s for Microsoft C.

One thing that is annoying is that information on CD from the late 1980’s seems to be darned near impossible to find.  I know that each generation of machines until about 2005 was exponentially larger than the previous one (post 2007 we hit the iThing world, along with most machines being ‘good enough’ for day to day usage).  I know this ad may seem insane, but Microsoft really was trying to push people to CD distributions.  As we all know that internet thing didn’t quite tickle their fancy.    Did they ever put resources like this online?  Like on BIX or Compuserve?  It seems like an ideal resource.  But I was a kid, and didn’t have that kind of money.

Awesome CD-ROM collection and drive, starting at a mere $899!

So in the interest of a bad idea, here is MSPL, aka qemu/curses in action.

Oh my god, what I have I done!?

Well as an addendum I thought it’d be cool to put MSPL online, via shellinabox.  First off I needed a 5MB MS-DOS disk, basically enough MS-DOS too boot up, run smartdrive, idle and the CD-ROM driver, along with the minimal MSPL install.  And to button it up, I added a reboot.com from the autoexec, so when you exit it’ll reboot the VM.  Great.

The reboot command was input via debug, as it’ll let you assemble code directly.  Although it isn’t a MACRO assembler, so you have to know exactly what you are doing.

DEBUG RESET.COM
A
XOR AX, AX
NOT AX
PUSH AX
NOT AX
PUSH AX
RETF
(return on a line by itself)
RCX
9
W
Q

And with that saved, now I have to setup Qemu.  Since I’m taking the shellinabox approach that means I need something text mode, and I was thinking this was light weight. Qemu has a curses output so that’ll work.  I set it up to use qcow2 and a backing store image so that way every forked user doesn’t eat 5MB of disk space, it’s more like 100kb.

#!/bin/sh
set -m
PID=$$
mkdir /tmp/$PID
cd /tmp/$PID
qemu-img create -f qcow2 -b /usr/local/mspl/MSPL.qcow2 MSPL.qcow2
qemu-system-i386 -m 4 -cpu 486 -hda MSPL.qcow2 -cdrom /usr/local/mspl/Microsoft-Programers-Library-v1.3.iso -curses -no-reboot
cd /tmp
rm -rf /tmp/$PID

Then to tie it into shell in a box, it’ll just need the flag:

-s /mspl:nobody:nogroup:/:/usr/local/bin/mspl.sh

and this will run it as nobody, and kick off the above bash script.  Now that’s great and all, but what about stale/abandoned sessions?  I wrote this quick script to clean them up.

#!/bin/bash

FIND=”find /tmp -type d -regextype sed -regex ‘.*/[0-9]*’ -mmin +30 | sed ‘s/\/tmp\///’>/tmp/kill_out.txt”
eval $FIND
while read process; do

KILL=”kill -9 ${process}”
eval $KILL
RMDIR=”rm -rf /tmp/${process}”
eval $RMDIR

done < /tmp/kill_out.txt
rm -rf /tmp/kill_out.txt

So it’ll find numerical directories that are at least 30 minutes old, kill them and remove their directory.  Probably very dangerous to run, but it’s isolated so Im not too worried.  Then just have root add that script to it’s crontab, and run it every minute, and it’ll kill the old stuff hanging around.

I’ll add a video later on how to use MSPL via this setup.  And maybe I’ll rig something to have RDP access as well, depending on how I’m feeling.