(This is a guest post by Antoni Sawicki aka Tenox)
In the previous post I mentioned working on a large deployment of Citrix and NeoWare thin terminals. We were using ICA exclusively. But the NeoWare terminals also had this mysterious “NTRIGUE” protocol that I never had a chance to use:
Various brochures and ads about the HDS @workStation also mentioned that this thin client is for NTRIGUE with zero mention of Citrix or ICA!
All NTRIGUE and no ICA/Citrix! What is going on here?
And what exactly is NTRIGUE?
In short: Isignia company is mainly known for SoftPC and SoftWindows. Insignia NTRIGUE product was a version of Citrix WinFrame that used Xwindow / X11 protocol for the transport. X11 appears beside ICA in the WinStation protocol list.
Behold! After 30 years of waiting, I finally scored NTRIGUE box on eBay!
The CDROM is essentially Citrix WinFrame but everything is find / replace rebranded as NTRIGUE.
Even the NTOS kernel prints NTRIGUE…
And the login screen
The real deal comes from WinStation configuration. You can create one with X11 protocol instead of ICA:
But how do you use it? Very simply! In two ways:
XDMCP Query, either from a physical Xterminal or Xnest or Xephyr:
…yes so now any plain regular Xterminal like NCD, HP, Tek, IBM, DEC, etc can connect to a Windows host!
Second way – export NTRIGUE X11 client via remote display export. Like you would with xterm -display x.x.x.x:N or export DISPLAY=..... You RSH into NTRIGUE box and request a client:
rsh <target> <client_ip> <resolution> <colors>
In practice:
It seems that the NT box runs a rsh daemon and can send you an X11 exported client via x11.dll. It looks like they ported xlib to NT:
I find it curiously odd that the NTRIGUE client “app” runs on the host and exports display via X11 protocol. This is unlike ICA or RDP where the client runs on … the client.
Citrix ultimately acquired NTrigue from Insignia. Never to be heard from again and the tech essentially being buried. Is possible that this became their X11 ICA Client, but more likely they just bought it to kill competition to ICA protocol. After Microsoft released Terminal Server Edition with RDP, the ICA protocol and app management was all that Citrix had left to offer. NTrigue offered a “client-less” alternative. That couldn’t be good for business.
Finally a gallery of various UNIX systems talking to NTRIGUE:
(This is a guest post by Antoni Sawicki aka Tenox)
Around 1998/99 or so I was involved in a large deployment of Windows NT TSE (Terminal Server Edition) with Citrix Metaframe, for a Forbes top-100 listed corporation. The general population were using plain boring Neoware thin terminals with ICA client for their daily tasks.
Unidentified generic Neoware thin client pic stolen from ParkyTowers
Managers and higher ups were using “high end” Neoware “workstations”. Actually named “@workStation Prima”. They had options for TV and AV capture cards, teleconferencing, streaming and multi screen. However no one really used these advanced features and the expensive workstations didn’t provide any extra functionality or value in practice. Just bigger, fancier and made you look more important in the corporate rat race.
For the more perceptive observer however they did have some interesting curiosities hiding inside the pizza box. Firstly they were rocking Intel i960 !
Secondly if you pressed the odd “Don’t login” button at the ICA screen, you would land at a full blown desktop with some apps, games and a terminal with local shell. The OS (named netOS) was some proprietary i960 UNIX. Because it did feature mostly GNU apps I assumed it simply must have been an embedded Linux distro and didn’t make much of it.
Fast forward almost 30 years, Rico scored a copy of Neoware netOS install media and some people even got it installed. Out of nostalgia, I also wanted to do some archeology here and play with i960 iron. Bought one of these Neoware @workstation terminals at eBay and got the OS copied to my tftp/nfs server and booted it up.
Good memories and fun with ICA and XDMCP terminal. But I wanted to see what else can be done with the weird i960 system. I started looking at the kernel and tools. Upon closer inspection of the binaries, turns out these are not Linux at all (also i960 doesn’t have MMU so it could not run it anyhow), instead it seem to be 4.4-BSD based.
AFAIK an official SDK was never publicly available. But applications like NEdit, XScreensaver and even Netscape Navigator shipped with the OS so they must have been ported to netOS internally. Fortunately with help of LLM I was able to do some reverse engineering and map out the binary format and syscall interface. GCC 2.95 did support i960 ISA and Binutils 2.11 was able to produce somewhat compatible binary format. i960-intel-nindy is the closest triplet (nindy is the i960 ROM monitor). The rest was history. An unofficial netOS SDK was born in an evening.
Aclock on i960 UNIX
For now it can compile just the simplest C apps, but I will expand it more. I want to port SimCity!
Last but not least the “premium workstation” has an IDE port and allows installation of a hard disk for local boot. This makes it lot less of a network booted terminal and more of a proper workstation. I slapped on an industrial IDE DOM, fdisk/newfs and got the OS copied to it using provided script:
Now I have a full blown i960 UNIX graphical workstation with local OS and SDK. Hopefully one day it can self host its own toolchain!
Update: now we have rshd, telnetd and even busybox !!
studio:/Users/tenox> telnet 192.168.1.11
Trying 192.168.1.11...
Connected to 192.168.1.11.
Escape character is '^]'.
netOS telnetd - exit or ^D to quit
NETOS> busybox sh
BusyBox v1.00 (2026.09.27-09:42+0000) hush - the humble shell v0.01 (testing)
Enter 'help' for a list of built-in commands.
~ # version
Server Code Version: 3.2-D (Build 560)
PLCC Boot PROM Version: 3.1.1-E (Build 12)
netOS Version: 3.2 netOS for the Enterprise with ICA
~ #
I’m sure at some point there will be some kind of merger. As always things move fast when they are interesting.
At any rate, I had nothing but incredible issues getting this to build. I should have written the steps down for the Qemu Alpha for that can run Alph64 Windows! … .however I didn’t so I kind of lost (hopefully temperarily) the recipies needed.
Instead, I’m jumping back to my mac mini, as of course macOS is just enough UNIX to be useful but mainstream enough to have real application. And part of the reason is that I wanted to build the firmware as I had a feeling that this was some important ‘lockstep’ thing I was missing.
Building cross compilers isn’t that new for me or this blog. As a matter of fact, I’ve got two at the moment from other various projects:
jsteve@Jasons-Mac-mini gcc % /usr/local/os2/bin/i386-pc-linux-gnuaout-gcc -v
Reading specs from /usr/local/os2/lib/gcc-lib/i386-pc-linux-gnuaout/2.8.1/specs
gcc version 2.8.1
jsteve@Jasons-Mac-mini gcc % /usr/local/i586-linux2/bin/i586-linux-gcc -v
Reading specs from /usr/local/i586-linux2/lib/gcc-lib/i586-linux/2.8.1/specs
gcc version 2.8.1
Since GCC 2.8.1 seems to run ‘okay’ as a macOS arm64 binary to cross compile to the i386… But that’s not for here. Since this is a ‘modern’ build, there was no need for any funny business. Things just worked. Surprisngly, I know. Obviously for people years later this won’t hold true.
Binutils
Nothing much to see or say, just used binutils 2.46.0, and it configured/built out of the box. Nice.
This is a bit weird as, the Itanium is not a dying platform, but a very dead one. Although thanks to a single user, Renรฉ Rebe keeping the flame alive, I just chose to use the mentioned version, 15 to see if it still works. Spoiler, it did!
Building on macOS also means I do have homebrew installed, and that instead of building so many dependancies from hand, I could just brew the dependancies for GCC. That did make configuring it a little more involved.
There is some weird duplicate define of fdopen that throws off the build, thanks to zlib. I know wtf.
In file included from ../../gcc-15.3.0/zlib/zutil.c:10:
In file included from ../../gcc-15.3.0/zlib/gzguts.h:21:
In file included from /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/stdio.h:61:
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/_stdio.h:322:7: error:
expected ')'
322 | FILE *fdopen(int, const char *) __DARWIN_ALIAS_STARTING(__MAC_10_6, _...
| ^
../../gcc-15.3.0/zlib/zutil.h:140:33: note: expanded from
macro 'fdopen'
140 | # define fdopen(fd,mode) NULL /* No fdopen() */
The fix, of course is to comment out line 140 of zutil.h
After that, it’ll mostly build, (remember to have the binutils binary in your path! export PATH=/usr/local/ia64-linux-gnu/bin:$PATH )
It’ll complain about missing pthread as it want’s to build all the Linux stuff, but we don’t care.
In file included from ../../../gcc-15.3.0/libgcc/gthr.h:157,
from ../../../gcc-15.3.0/libgcc/libgcov-interface.c:27:
./gthr-default.h:35:10: fatal error: pthread.h: No such file or directory
35 | #include <pthread.h>
| ^~~~~~~~~~~
compilation terminated.
Since I’m on macOS, I wanted to use the coca backend, so I don’t care about GTK+ or SDL.
From there it was just a matter of running make… I did a -j6 to use six cores it tore through the source, stopped after a few minutes with some weird error, I just typed in ‘make’ again and it finished…. Not sure what it’s hangup was, and I really don’t care.
Being greeted by the firmware image, is again confirmation that we can indeed cross compile the Itanium firmware with our GCC cross compiler!
And then the CD-ROM will prompt to hit any key to boot from CD
Press any key to boot from CD-ROM…..
At this point I should mention that Qemu doesn’t scale well with high resolution monitors. But since we enabled the zoom-to-fit option, we can resize the window so we can read it, or just maximize it.
From here it’s basically a normal XP install
Unlike the RISC of old, the creation of the system partition is now handled by the install program, like all the other EFI/UEFI platforms.
Which I have to say, is a nice change.
From there just select the remainder of the disk, I format mine as NTFS (quick) and from there it’ll start copying the files. For me this completed in under 5 minutes.
A quick reboot and you’ll now be in the graphical installer.
From here it could crash or lock hard. In that case, re-create the hard disk image, and re-try the installation. It took me 5 attempts. Although I should mention that I never could complete a single install using syunn’s fork.
XGCJ6-Q6XGJ-BQ2QQ-BRWJ7-67X7W
And when asked, I just chose the default networking settings.
In prior builds this would fail and/or hard lock at various moments, with an overall success rate of 1/5. Not the best. Although I’ve only installed XP 2600 once today, and it was a 1:1 rate in 30-40 minutes, so I guess I can say that as always, things are in motion, and getting way better!
On my m4, it took about another 30 minutes, and then It’s done.
And there we go!
I’d highly suggest setting up RDP, and using a remote desktop application, as the arrow keys currently tend to repeat far too often making typing a chore. Plus it’ll fix any coca video scaling issues.
Using the same config, different ISO, yeah it installed in about 40 minutes on my m4 Mac Mini.
Windows Server build 2462
Why, even the earliest Windows Server Itanium build that’s available, 5.1.2462 installs and runs! Of course, install it prior to August 2001.
What about other operating systems?
As of now I don’t think anything else works. Monterey didn’t do much, nor HPUX, VMS etc.
Where to go from here? Compilers! and whatnot. Needless to say, since this is 1st gen Itanium, all the stuff I’d built when I had an Itanium won’t run as it was Itanium2. Don’t you love broken binary compatiblity?
This is why 80386 is just as relevant in 2026 as it was in 1987.
Of course, Apple will break it, just because they can.
In the past I did some and some more work on SimCity/Micropolis to bring it to vintage computing. This old DUX SimCity / Micropolis works remarkably well, but because of the TCL/TK and X11 UI, platform availability is quite limited. I have previously also ported Micropolis to Windows NT (RISC) as WinTown.
But thats not enough! I wanted to run SimCity on a vintage Unix without dependency on X11 and TCL/TK. The game graphics (basically a map) is quite simplistic and structured. I was wondering if text mode rendering would work. Quite a while ago I winged up a quick ncurses based map/city viewer and it was quite promising! Fast forward to today… Behold TTY City!
The game is quite usable and playable. In a modern terminal it even supports mouse with panig and simple animations. Earthquakes look pretty cool!
The monochrome terminals are little more difficult, but I’d say is playable.
Here is a picture from an actual DEC VT420! Not bad!
When perfecting the letters and characters, I had this idea… what if modern terminal amenities could be used… like Unicode Emojis perhaps? After all you can have these ๐ฒ๐ณ๐ด๐ต and these ๐ ๐ก๐ข๐ญ in rendered in a terminalโ
Behold Unicode Emoji Terminal SimCIty!
Available from: https://github.com/tenox7/ttycity – there are no releases or packages yet, as it’s work in progress but expect it to be available for most modern and vintage operating systems!
It worked quite good but I did not particularly like some of the Firefox/Mozilla foundation controversies and policies. Started looking for alternatives, but the situation was quite grim. Ladybird Browser is still in active development. Chrome exterminated Ad Blockers. Brave was over bloated with crapware.
TIL Brave has released “Origin” version which is minimal and void of all the garbage features, but still has a fully functional Ad Block! Normally Origin asks for a one time license purchase, however Linux version is free. Since Docker is Linux… a perfect fit for the use case! VNCBRAVE was born.
In practice is so nice that I wrote this article on HPUX 10.20 with VUE desktop:
VNCBRAVE – Brave Origin with VNC Server as Docker Container
I also added routing of Brave active tab title in to VNC “Desktop Name” so it shows in the client window if supported.
I also typically switch to compact mode to save some real estate and make some other settings like solid background color, tab suspension and aggressive ad blocking.
A collection of TightVNC ports for old OS is available here.
One of the most popular OS built-in games is no doubt Pinball, known by its full name 3D Pinball for Windows โ Space Cadet. It started out as Full Tilt! Pinball, developed by Cinematronics and published by Maxis. It offered 3 tables, and one of them, Space Cadet, was licensed to Microsoft to be included in Microsoft Plus! 95 and, later, built into the Windows operating system.
Windows XP was the last version of Windows to include Pinball, and Raymond Chen explained why it didnโt make it to Windows Vista on his blog. The reason was it had a collision detector bug when it was compiled for 64-bit Windows, which caused the ball to pass through various objects โ falling off the screen through the plunger instead of being launched, for instance. The bug rendered the game unplayable, and Raymond and his colleague were unable to find a fix in a reasonable amount of time, so he removed it. At least thatโs the story we were told, for about a decade.
In 2021, NCommander launched a series of investigations to challenge that, testing Pinball on various 64-bit (IA-64 and AMD64) builds of Windows XP and pre-release Vista. He found that the 64-bit versions of Pinball were all highly playable, with only very minor glitches, and speculated that the reason for its removal was that the UI did not fit into the Windows Vista design.
Not long after NCommander published his video, Raymond followed up with a post that filled in some gaps in the story and shed more light on the bug. He said it was the 64-bit Alpha AXP version of Pinball that had the extremely bad collision detection bug. This claim had been unverifiable for the past 5 years, for the following reasons:
No 64-bit Windows was ever released for the Alpha AXP โ Compaq killed Windows NT support before NT was ported to 64-bit
One 64-bit Alpha AXP NT build was leaked in 2023, but the included Pinball does not work, as it segfaults immediately upon running
Iโve had an interest in the DEC Alpha for quite some time now, mainly out of my love for DEC architectures and my love for UNIX. VAX is the direct successor of PDP-11, and Alpha is the direct successor of VAX. Earlier, some Alpha emulation breakthroughs dropped, and I was pinged by a few friends that NT 4.0 could now run on a fork of the ES40 emulator, as well as on QEMU. I never thought Alpha NT would ever run under emulation, because unlike the familiar Tru64, Linux and the BSDs, NT uses its own custom PALcode and depends on ARC (Advanced RISC Computing) instead of SRM. Of course, people noted that the emulators couldnโt run the holy grail of Alpha NT โ Windows (XP?) build 2210, because its kernel would panic with a memory management error in QEMU, or wouldnโt detect the keyboard and bug out in ES40. A few trips to hell in the symbol-less NT kernel and a few MMU emulation fixes later, I was able to patch up both QEMU and ES40 to boot that only surviving 64-bit build of Alpha NT.
After torturing my brain debugging a symbol-less NT kernel without a kernel debugger, I thought Iโd give fixing Pinball a go, to make things worthwhile. One of the benefits of debugging a userland process is that, while thereโs still no debugger, there is Dr. Watson, which takes core dumps and performs simple post-mortems. Something is better than nothing, as people would say.
Running Pinball gives the classic crash symptom immediately, with no graphics drawn:
Dr. Watson concludes that it died of a segfault:
It gave a nice dump of registers at the time of the fault:
Ok, so it died inside RegisterClassA, a critical Win32 API function. That API function couldnโt have been the culprit, because if it were bugged, no GUI Win32 program would run at all. This means the only possible source of the error is its sole argument โ a pointer to a WNDCLASSA struct. Needless to say, the pointer itself was valid, otherwise the API wouldโve detected the invalid argument, or the segfault wouldโve happened a lot sooner.
From the stack trace, the return address of RegisterClassA was 0x100F914, inside the function splash_screen. A quick disassembly of the instructions preceding that address shows a WNDCLASSA structure being built with the following layout:
Right off the bat, I noticed something wrong โ the field alignment. It is a general requirement that fields be aligned to their size, as in 8-bit fields should be byte-aligned, 16-bit fields should be 16-bit (2-byte) aligned, 32-bit fields should be 32-bit (4-byte) aligned, and 64-bit fields should be 64-bit (8-byte) aligned. If you look at the offsets of the fields above, the 32-bit ones are indeed 4-byte aligned, but the 64-bit ones are not. At the start, we have a 32-bit style field followed by a 64-bit lpfnWndProc, and to satisfy the alignment requirements, a 4-byte padding should be inserted between style and lpfnWndProc to ensure that lpfnWndProc starts on an 8-byte boundary. RegisterClassA was expecting this padding, but Pinball lacked it, so it read data from the wrong offset and crashed.
To fix this, I simply bumped the offset of each field after style up by 4 bytes.
But that was not sufficient โ Pinball calls RegisterClassA in 4 different places โ Sound_Init, splash_screen, WinMain and WaveMixStartup. Iโd already patched the one in splash_screen, so I started going through the rest one by one.
The ones in Sound_Init and WinMain were identical to the one in splash_screen, but for some strange reason the one in WaveMixStartup already had the correct alignment:
I canโt think of why the same struct would be aligned differently within the same binary, unless they came from different objects compiled with different flags or something.
Anyway, with the WNDCLASSA struct alignment fixed in 3 of the 4 places, I ran Pinball again. This time it created the fullscreen window and attempted to draw the splash screen before dying of another segfault:
Crash log shows that the segfault happened deep in the Win32 audio system, while calling auxSetVolume:
Indeed, it was an invalid pointer! As you can see, itโs identical to the pointer in a2, but with the entire top 32 bits zeroed. It mustโve been truncated by a bug somewhere, either in the audio subsystem or in Pinball itself.
I spent some time and pinned down the DLL responsible for the fault โ mciseq.dll, and did some tracing. The truncation of a0 happened when a2 was moved into a0:
50306150 ZAPNOT a2,#15,a0
ZAPNOT is an interesting instruction โ it takes a source register, a bitmask and a destination register, and it โzapsโ (zeros) the bytes whose corresponding bit in the bitmask is 0. In this case, the bitmask is 15, which is 00001111 in binary. From this we can work out that the ZAPNOT instruction at 0x50306150 zeros the upper 4 bytes of a2, when it is copied into a0. This perfectly explains why, at the time of the fault, a0 contained a truncated version of the pointer in a2.
Of course, 0x50306150 was not the only place where it truncated 64-bit pointers, I found 6 truncations of the exact same type in mciseq.dll. I have not the slightest clue why it decided to truncate pointers. If I had to guess, maybe they had pointer โ integer โ pointer casts for whatever reason, and that integer type was 32-bit. With all 6 truncations patched out, we have some Pinball for ourselves:
Hereโs proof that Pinball is indeed running on a 64-bit build of Alpha NT:
To make Pinball work on your NT build 2210 install, replace %ProgramFiles%\Windows NT\Pinball\pinball.exe and %windir%\system32\mciseq.dll with the following:
You could also patch the installation files and burn them to a new CD if you want Pinball to work out of the box on fresh installs โ simply copy these files to the AXP64 directory of the install disc:
Now Iโm going to disappoint you with the fact that I did not find the collision detector bug Raymond talked about. With the struct alignment and pointer truncation issues patched, the game now works flawlessly. Ok, Iโm not sure if itโs actually flawless, but I never saw any glitches in the few games I played. At the very least, the ball does not fall through the plunger, can be launched and bounces around the table just fine.
Below are the 2 reasons I could think of for not seeing the collision detector bug:
The bug was introduced after build 2210. Build 2210 has Pinball installed by default and predates Windows XP by almost a year and a half, so it almost certainly predates Raymond removing it. In this build, Pinball doesnโt even run by default, so thereโs no way they couldโve tested it and seen the bug. They probably only started testing Pinball later, after they fixed the struct alignment and pointer truncation issues.
The bug only manifests in free/release builds, not in checked/debug builds. Maybe it only shows up when the code is compiled with the more aggressive optimisation used by release builds โ something that happens quite often when code has undefined behaviour or the compiler has bugs. This is less plausible, however, as Iโm sure Raymond wouldโve used debug builds when he attempted to debug it, and discovered any differences between debug and retail builds.
Of course, only Raymond himself could shed more light on this topic. It was fun (read: painful) debugging Pinball, as well as the NT kernel to fix the emulators โ too much fun (read: pain) that I will never do it again.
Some trivia about me and pinball:
I spent a fair chunk of my kindergarten and pre-school days playing the various games my dad installed on our Windows XP home computer, however, there was one game that I never quite figured out how to play โ Pinball. It came bundled with the OS, and the splash screen scared me every time I tried to open it up.
The flipper looked like a pistol to my 3-year-old self, and the overall darkness of the splash screen just injected fear into me. I would open the game, close my eyes, count to 20, then open my eyes again, to skip past the splash screen.
The first time I actually played a full game of pinball was on the first day of this year, when a friend of mine took me to an arcade. After playing pinball in real life, the Pinball game finally started to make sense.
Since this will no doubt come up, let’s make this a separate post. I’ve put the files up on archive.org (arc programmed/bare programmed) but here are the steps to program your own flash, just like you’ve gotten a fresh machine!
First up, you need the ‘v73.iso’ and not much else. VGA is fun to make it all graphical. First look for your CD-ROM drive, the RRD42 in this case, I’ve put mine on SCSI id 6, so it’s the DKA600
So, it’s a simple ‘boot dka600’ to get the process started
It’ll take a few seconds to boot up to the menu
hit control+c and you’ll get the menu
It’ll detect our machine, so you can hit enter to boot the default option
This will take a hot minute as the SRM likes to re-load itself between things
Now I know you think we would just go ahead and hit update, but oddly enough it won’t program the TIG, so we exit from here:
and choose the manual update process
And now we can run the update.
Basically we update them all!
And keep going. For all us Windows NT on Alpha fans, the ABIOS has to be programmed in. It’s a compressed image, so the machine will still boot SRM then we have to load ARC. It’s just the way the ES40 is.
This will take a few minutes, just hang in there.
rmc always fails for me but it’s fine.
at this point we can exit, and we’ve programmed our flash.
The emulator will reboot, and we will be sent back to the SRM prompt.
For those of us who want to run Windows NT we can now edit the NVRAM so it always auto-starts ARC, so it doesn’t require manual intervention.
simply type in:
edit nvram
10 show dev
20 arc
Then you can exit this mode with a Control+Z (some machines/emulators require Alt+Z)
now it’ll show the devices and auto-start arc.
You can test-drive ARC now by simply typing in ‘arc’
And this will load up ARC.
You’ll see the VGA bios re-initialized, and then the boot logo
as of yet, the memory test wipes out the video ram so it’ll blank the screen. this is normal.
Hit the space bar to exit the memory test
Then press F2 to enter setup. This will take a minute or so.
it really does take a few minutes the first time.
Because the nvram is fresh it’ll reboot. so hit space again to skip the memory test and f2 to enter setup
arrow key down to the CMOS setup
and F6 to enter advanced setup
In the advanced menu, hit tab to advance to a selection and arrow keys to change them
And then Press F10 to save the changes.
Now we’ve fully programmed the flash and set ARC to autoboot!
This is one of these “note to myself” and hopefully it will help someone else as the internets and robots are not very helpful.
Problem: on a Mac, Brave Browser will not connect to anything on the LAN. 192.168.x.x, 10.x.x.x, etc. Maybe with exception of the router / default gateway.
You tried everything, disabling shields, changing https/ssl/tls options, flags, advanced network settings. Nothing helps. The internet and AI tells you this is how Brave is, secure by default nonsense, nothing can be done about it. Well BS. This is how to actually fix it:
System Settings โ Privacy & Security โ Local Network โ “Brave Browser ON”.
Thats it! After you toggle it, Brave will be able to connect to anything on the LAN, even without HTTPS if you allow it.
I had thought about trying to take a look at the SCSI handling as the system uses one of those funky MFM disk shims with a SCSI ‘like’ interface bus.. It has an interesting layout with the first block to explain the disk to the controller and the system, along with the disk partitions/slice layout. Very early 1980’s stuff.
Anyways despite all these years, I’m kinda terrible with Xcode, so I thought using Visual Studio to debug would be the way to go. And whoa… I had a copy of 2010 handy as I was having internet issues, and yeah it’s more C89 than C99.
And then there was this fun thing while trying to do an optimised build:
Thankfully you can simply turn off optimizations in the various parts of the source that crash.The Plexus neither has and I think pre-dates the 68881/68882 so the FPU emulation really doesn’t matter, just simply add
pragma optimize("", off)
at the start of the file, and turn it back on at the end. Yay!
Visual C++ 2003!
So yeah that was pretty fun.
Oh I should add there is a WASM version, so the ultimate for tourists, you don’t even have to install anything! Super cool!
I thought I’d try to make a slight improvement since I expect people to use old machines, so I amputated ansicon, and drive it directly! So, no DLL injection or anything else weird, to try to prevent antivirus software from freaking out.
It’s enough for vi to work at least!
Although I should probably detect Windows 10, since it has the ability to detect and drive ANSI codes on it’s own.
Anyways for anyone wanting to check it out on Windows here is the repo with the first release:
Oh C compiler is installed, and I believe Fortran as well! The ‘catch’ is there currently is no good way to move data into the VM. Pasting into the console gets dropped chars, and it’s just impossible. uuencode to the system OUT however works great.