<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>games &#8211; Virtually Fun</title>
	<atom:link href="https://virtuallyfun.com/category/games/feed/" rel="self" type="application/rss+xml" />
	<link>https://virtuallyfun.com</link>
	<description>Fun with Virtualization</description>
	<lastBuildDate>Tue, 02 Jun 2026 09:05:48 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>
	<item>
		<title>Pinball on 64-bit Alpha AXP Windows NT</title>
		<link>https://virtuallyfun.com/2026/06/02/pinball-on-64-bit-alpha-axp-windows-nt/</link>
					<comments>https://virtuallyfun.com/2026/06/02/pinball-on-64-bit-alpha-axp-windows-nt/#respond</comments>
		
		<dc:creator><![CDATA[neozeed]]></dc:creator>
		<pubDate>Tue, 02 Jun 2026 06:54:42 +0000</pubDate>
				<category><![CDATA[assembly]]></category>
		<category><![CDATA[DEC Alpha]]></category>
		<category><![CDATA[games]]></category>
		<category><![CDATA[guest post]]></category>
		<category><![CDATA[microsoft windows]]></category>
		<category><![CDATA[Windows XP]]></category>
		<guid isPermaLink="false">https://virtuallyfun.com/?p=15787</guid>

					<description><![CDATA[This is a guest post from Yufeng Gao One of the most popular OS built-in games is no doubt&#160;Pinball, known by its full name&#160;3D Pinball for Windows – Space Cadet. It started out as&#160;Full Tilt! Pinball, developed by&#160;Cinematronics&#160;and published by&#160;Maxis. &#8230; <a href="https://virtuallyfun.com/2026/06/02/pinball-on-64-bit-alpha-axp-windows-nt/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph"><em>This is a guest post from <a href="https://thebrokenpipe.com/blog/author/brokenpipe/">Yufeng Gao</a></em></p>



<p class="wp-block-paragraph">One of the most popular OS built-in games is no doubt&nbsp;<a href="https://en.wikipedia.org/wiki/Full_Tilt!_Pinball#3D_Pinball_for_Windows_%E2%80%93_Space_Cadet">Pinball</a>, known by its full name&nbsp;<em>3D Pinball for Windows – Space Cadet</em>. It started out as&nbsp;<em>Full Tilt! Pinball</em>, developed by&nbsp;<a href="https://en.wikipedia.org/wiki/Cinematronics,_LLC">Cinematronics</a>&nbsp;and published by&nbsp;<a href="https://en.wikipedia.org/wiki/Maxis">Maxis</a>. 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.</p>



<figure class="wp-block-image size-full"><a href="https://virtuallyfun.com/wp-content/uploads/2026/06/pinball_gameplay.gif"><img fetchpriority="high" decoding="async" width="642" height="492" src="https://virtuallyfun.com/wp-content/uploads/2026/06/pinball_gameplay.gif" alt="" class="wp-image-15800"/></a></figure>



<p class="wp-block-paragraph">Windows XP was the last version of Windows to include Pinball, and Raymond Chen&nbsp;<a href="https://devblogs.microsoft.com/oldnewthing/20121218-00/?p=5803">explained why it didn’t make it to Windows Vista</a>&nbsp;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.</p>



<p class="wp-block-paragraph">In 2021,&nbsp;<a href="https://www.youtube.com/c/NCommander">NCommander</a>&nbsp;launched&nbsp;<a href="https://www.youtube.com/watch?v=3EPTfOTC4Jw">a series of investigations</a>&nbsp;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.</p>



<p class="wp-block-paragraph">Not long after NCommander published his video, Raymond followed up with a&nbsp;<a href="https://devblogs.microsoft.com/oldnewthing/20220106-00/?p=106122">post that filled in some gaps</a>&nbsp;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:</p>



<ul class="wp-block-list">
<li>No 64-bit Windows was ever released for the Alpha AXP – Compaq killed Windows NT support before NT was ported to 64-bit</li>



<li>One 64-bit Alpha AXP NT build was leaked in 2023, but the included Pinball does not work, as it segfaults immediately upon running</li>
</ul>



<p class="wp-block-paragraph">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&nbsp;<a href="https://github.com/ES40-Emu/es40/">fork of the ES40 emulator</a>, as well as on&nbsp;<a href="https://github.com/TheBrokenPipe/qemu/tree/alphafix">QEMU</a>. 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.</p>



<figure class="wp-block-image size-full"><a href="https://virtuallyfun.com/wp-content/uploads/2026/06/image-1.png"><img decoding="async" width="923" height="728" src="https://virtuallyfun.com/wp-content/uploads/2026/06/image-1.png" alt="" class="wp-image-15789" srcset="https://virtuallyfun.com/wp-content/uploads/2026/06/image-1.png 923w, https://virtuallyfun.com/wp-content/uploads/2026/06/image-1-300x237.png 300w, https://virtuallyfun.com/wp-content/uploads/2026/06/image-1-768x606.png 768w, https://virtuallyfun.com/wp-content/uploads/2026/06/image-1-380x300.png 380w" sizes="(max-width: 923px) 100vw, 923px" /></a></figure>



<p class="wp-block-paragraph">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&nbsp;<a href="https://en.wikipedia.org/wiki/Dr._Watson_(debugger)">Dr. Watson</a>, which takes core dumps and performs simple post-mortems. Something is better than nothing, as people would say.</p>



<p class="wp-block-paragraph">Running Pinball gives the classic crash symptom immediately, with no graphics drawn:</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><a href="https://virtuallyfun.com/wp-content/uploads/2026/06/image-2.png"><img decoding="async" width="427" height="172" src="https://virtuallyfun.com/wp-content/uploads/2026/06/image-2.png" alt="" class="wp-image-15790" srcset="https://virtuallyfun.com/wp-content/uploads/2026/06/image-2.png 427w, https://virtuallyfun.com/wp-content/uploads/2026/06/image-2-300x121.png 300w" sizes="(max-width: 427px) 100vw, 427px" /></a></figure>
</div>


<p class="wp-block-paragraph">Dr. Watson concludes that it died of a segfault:</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><a href="https://virtuallyfun.com/wp-content/uploads/2026/06/image-3.png"><img loading="lazy" decoding="async" width="358" height="481" src="https://virtuallyfun.com/wp-content/uploads/2026/06/image-3.png" alt="" class="wp-image-15791" srcset="https://virtuallyfun.com/wp-content/uploads/2026/06/image-3.png 358w, https://virtuallyfun.com/wp-content/uploads/2026/06/image-3-223x300.png 223w" sizes="auto, (max-width: 358px) 100vw, 358px" /></a></figure>
</div>


<p class="wp-block-paragraph">It gave a nice dump of registers at the time of the fault:</p>



<pre class="wp-block-code"><code>State Dump for Thread Id 0x124

  v0=01002930 00000000   t0=00000000 00360000   t1=00000000 00000001
  t2=00000000 00360000   t3=00000000 00000000   t4=00000000 00000000
  t5=00000000 0000011c   t6=000003ff fff8f868   t7=00000000 00303030
  s0=000003ff fff8fac0   s1=01002930 00000000   s2=000003ff fff8fad8
  s3=00000000 00000000   s4=00000000 0106f2a8   s5=00000000 01000000
  fp=00000000 00000010   a0=01002930 00000000   a1=00000000 00000000
  a2=000003ff fff8fad8   a3=00000000 30010000   a4=00000000 69e17610
  a5=00000000 69e0a360   t8=000003ff fff8f868   t9=00000000 00000000
 t10=00000000 00300000  t11=00000000 00000002   ra=00000000 69e9d5c0
 t12=00000000 6a264710   at=ffffffff fffffe10   gp=00000000 00000000
  sp=000003ff fff8fa50 zero=00000000 00000000 fpcr=08000000 00000000
SoftFpcr=00000000 00000000  fir=6a264710
 psr=00000003
mode=1 ie=1 irql=0 </code></pre>



<p class="wp-block-paragraph">Some disassembly around the faulting instruction:</p>



<pre class="wp-block-code"><code>function: Otsstrlen
FAULT -&gt;00000000'6a264710: 2f700000 ldq_u t12,0(a0)
        00000000'6a264714: 239fffff lda at,-1(zero)
        00000000'6a264718: 4b90065c mskql at,a0,at
        00000000'6a26471c: 4600f000 and a0,#7,v0
        00000000'6a264720: 477c041b bis t12,at,t12
        00000000'6a264724: 43fb01fb cmpbge zero,t12,t12
        00000000'6a264728: 43e00520 subq zero,v0,v0
        00000000'6a26472c: f7600005 bne t12,00000000'6a264744 Otsstrlen+00000034
        00000000'6a264730: 2f700008 ldq_u t12,8(a0)
        00000000'6a264734: 42011410 addq a0,#8,a0
        00000000'6a264738: 40011400 addq v0,#8,v0
        00000000'6a26473c: 43fb01fb cmpbge zero,t12,t12</code></pre>



<p class="wp-block-paragraph">And a very useful stack backtrace:</p>



<pre class="wp-block-code"><code>*----&gt; Stack Back Trace &lt;----*

FramePtr ReturnAd Param#1  Param#2  Param#3  Param#4  Function Name
000003FFFFF8FA50 0000000069E9D5BC 0100293000000000 0000000000000000 000003FFFFF8FAD8 0000000030010000 !Otsstrlen 
000003FFFFF8FA50 0000000069E9DB64 0100293000000000 0000000000000000 000003FFFFF8FAD8 0000000030010000 !PostThreadMessageA 
000003FFFFF8FA90 0000000069E9C000 0100293000000000 0000000000000000 000003FFFFF8FAD8 0000000030010000 !SetClassLongA 
000003FFFFF8FB80 000000000100F914 000003FFFFF8FC58 0000000000000000 000003FFFFF8FAD8 0000000030010000 !RegisterClassA 
000003FFFFF8FBF0 0000000001012A1C 0000000001000000 0000000001002DC8 000003FFFFF8FAD8 0000000030010000 !&lt;nosymbols&gt; 
000003FFFFF8FCA0 0000000001064B0C 0000000001000000 0000000001002DC8 000003FFFFF8FAD8 0000000030010000 !&lt;nosymbols&gt; 
000003FFFFF8FED0 0000000068948C50 0000000001000000 0000000001002DC8 000003FFFFF8FAD8 0000000030010000 !&lt;nosymbols&gt; 
000003FFFFF8FFC0 0000000000000000 0000000001064800 0000000001002DC8 000003FFFFF8FAD8 0000000030010000 !BaseProcessStart </code></pre>



<p class="wp-block-paragraph">Ok, so it died inside&nbsp;<code>RegisterClassA</code>, 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&nbsp;<code>WNDCLASSA</code>&nbsp;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.</p>



<p class="wp-block-paragraph">From the stack trace, the return address of&nbsp;<code>RegisterClassA</code>&nbsp;was&nbsp;<code>0x100F914</code>, inside the function&nbsp;<code>splash_screen</code>. A quick disassembly of the instructions preceding that address shows a&nbsp;<code>WNDCLASSA</code>&nbsp;structure being built with the following layout:</p>



<pre class="wp-block-code"><code>00000000 u32 style         = 0
00000004 u64 lpfnWndProc   = splash_message_handler (0x100FE40)
0000000C u32 cbClsExtra    = 0
00000010 u32 cbWndExtra    = 8
00000014 u64 hInstance     = *0x106AE30
0000001C u64 hIcon         = NULL
00000024 u64 hCursor       = LoadCursorA(NULL, IDC_ARROW)
0000002C u64 hbrBackground = NULL
00000034 u64 lpszMenuName  = "" (0x1002710)
0000003C u64 lpszClassName = "3DPB_SPLASH_CLASS" (0x1002930)</code></pre>



<p class="wp-block-paragraph">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&nbsp;<code>style</code>&nbsp;field followed by a 64-bit&nbsp;<code>lpfnWndProc</code>, and to satisfy the alignment requirements, a 4-byte padding should be inserted between&nbsp;<code>style</code>&nbsp;and&nbsp;<code>lpfnWndProc</code>&nbsp;to ensure that&nbsp;<code>lpfnWndProc</code>&nbsp;starts on an 8-byte boundary.&nbsp;<code>RegisterClassA</code>&nbsp;was expecting this padding, but Pinball lacked it, so it read data from the wrong offset and crashed.</p>



<p class="wp-block-paragraph">To fix this, I simply bumped the offset of each field after&nbsp;<code>style</code>&nbsp;up by 4 bytes.</p>



<pre class="wp-block-code"><code> 00000000 u32 style         = 0
-00000004 u64 lpfnWndProc   = splash_message_handler (0x100FE40)
+00000008 u64 lpfnWndProc   = splash_message_handler (0x100FE40)
-0000000C u32 cbClsExtra    = 0
+00000010 u32 cbClsExtra    = 0
-00000010 u32 cbWndExtra    = 8
+00000014 u32 cbWndExtra    = 8
-00000014 u64 hInstance     = *0x106AE30
+00000018 u64 hInstance     = *0x106AE30
-0000001C u64 hIcon         = NULL
+00000020 u64 hIcon         = NULL
-00000024 u64 hCursor       = LoadCursorA(NULL, IDC_ARROW)
+00000028 u64 hCursor       = LoadCursorA(NULL, IDC_ARROW)
-0000002C u64 hbrBackground = NULL
+00000030 u64 hbrBackground = NULL
-00000034 u64 lpszMenuName  = "" (0x1002710)
+00000038 u64 lpszMenuName  = "" (0x1002710)
-0000003C u64 lpszClassName = "3DPB_SPLASH_CLASS" (0x1002930)
+00000040 u64 lpszClassName = "3DPB_SPLASH_CLASS" (0x1002930)</code></pre>



<p class="wp-block-paragraph">But that was not sufficient – Pinball calls&nbsp;<code>RegisterClassA</code>&nbsp;in 4 different places –&nbsp;<code>Sound_Init</code>,&nbsp;<code>splash_screen</code>,&nbsp;<code>WinMain</code>&nbsp;and&nbsp;<code>WaveMixStartup</code>. I’d already patched the one in&nbsp;<code>splash_screen</code>, so I started going through the rest one by one.</p>



<p class="wp-block-paragraph">The ones in&nbsp;<code>Sound_Init</code>&nbsp;and&nbsp;<code>WinMain</code>&nbsp;were identical to the one in&nbsp;<code>splash_screen</code>, but for some strange reason the one in&nbsp;<code>WaveMixStartup</code>&nbsp;already had the correct alignment:</p>



<pre class="wp-block-code"><code>00000000 u32 style         = 0
00000004 u32 &lt;unused&gt;      = &lt;undefined&gt;
00000008 u64 lpfnWndProc   = WndProc (0x105CFA0)
00000010 u32 cbClsExtra    = 0
00000014 u32 cbWndExtra    = 0
00000018 u64 hInstance     = *0x106B818
00000020 u64 hIcon         = NULL
00000028 u64 hCursor       = LoadCursorA(NULL, IDC_ARROW)
00000030 u64 hbrBackground = GetStockObject(LTGRAY_BRUSH)
00000038 u64 lpszMenuName  = NULL
00000040 u64 lpszClassName = "WavMix32" (0x10050B0)</code></pre>



<p class="wp-block-paragraph">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.</p>



<p class="wp-block-paragraph">Anyway, with the&nbsp;<code>WNDCLASSA</code>&nbsp;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:</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><a href="https://virtuallyfun.com/wp-content/uploads/2026/06/image-4.png"><img loading="lazy" decoding="async" width="1024" height="740" src="https://virtuallyfun.com/wp-content/uploads/2026/06/image-4.png" alt="" class="wp-image-15792" srcset="https://virtuallyfun.com/wp-content/uploads/2026/06/image-4.png 1024w, https://virtuallyfun.com/wp-content/uploads/2026/06/image-4-300x217.png 300w, https://virtuallyfun.com/wp-content/uploads/2026/06/image-4-768x555.png 768w, https://virtuallyfun.com/wp-content/uploads/2026/06/image-4-415x300.png 415w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></figure>
</div>


<p class="wp-block-paragraph">Crash log shows that the segfault happened deep in the Win32 audio system, while calling&nbsp;<code>auxSetVolume</code>:</p>



<pre class="wp-block-code"><code>*----&gt; Stack Back Trace &lt;----*

FramePtr ReturnAd Param#1  Param#2  Param#3  Param#4  Function Name
000003FFFFF8E9C0 0000000050306E84 00000000FFE5D420 0000000000000000 000003FFFFE5D420 0000000000000000 !&lt;nosymbols&gt; 
000003FFFFF8E9E0 00000000503034B8 00000000FFE5D420 0000000000000000 000003FFFFE5D420 0000000000000000 !&lt;nosymbols&gt; 
000003FFFFF8EA10 0000000050304B60 00000000FFE5D420 0000000000000000 000003FFFFE5D420 0000000000000000 !&lt;nosymbols&gt; 
000003FFFFF8EA90 0000000050305B8C 00000000FFE5D420 0000000000000000 000003FFFFE5D420 0000000000000000 !&lt;nosymbols&gt; 
000003FFFFF8EB20 000000000001AF78 00000000FFE5D420 0000000000000000 000003FFFFE5D420 0000000000000000 !&lt;nosymbols&gt; 
000003FFFFF8EB60 0000000000025AFC 00000000FFE5D420 0000000000000000 000003FFFFE5D420 0000000000000000 !auxSetVolume 
000003FFFFF8EBD0 0000000000025F98 00000000FFE5D420 0000000000000000 000003FFFFE5D420 0000000000000000 !mixerSetControlDetails 
000003FFFFF8EC80 0000000000027214 00000000FFE5D420 0000000000000000 000003FFFFE5D420 0000000000000000 !mixerSetControlDetails 
000003FFFFF8ED30 0000000000030644 00000000FFE5D420 0000000000000000 000003FFFFE5D420 0000000000000000 !mciSendCommandW 
&#91;...]
000003FFFFF8FC60 0000000001012AB4 0000000000000000 000003FFFFE5DE00 000003FFFFE5D420 0000000000000000 !CreateWindowExA 
000003FFFFF8FCA0 0000000001064B0C 0000000000000000 000003FFFFE5DE00 000003FFFFE5D420 0000000000000000 !&lt;nosymbols&gt; 
000003FFFFF8FED0 0000000068948C50 0000000000000000 000003FFFFE5DE00 000003FFFFE5D420 0000000000000000 !&lt;nosymbols&gt; 
000003FFFFF8FFC0 0000000000000000 0000000001064800 000003FFFFE5DE00 000003FFFFE5D420 0000000000000000 !BaseProcessStart</code></pre>



<p class="wp-block-paragraph">The fault happened while trying to dereference a pointer in the register&nbsp;<code>a0</code>&nbsp;(<code>r16</code>):</p>



<pre class="wp-block-code"><code>function: &lt;nosymbols&gt;
        00000000'50305658: 00000000 halt
        00000000'5030565c: 00000000 halt
        00000000'50305660: 23deffe0 lda sp,-20(sp)
        00000000'50305664: b53e0000 stq s0,0(sp)
        00000000'50305668: b55e0008 stq s1,8(sp)
        00000000'5030566c: b57e0010 stq s2,10(sp)
        00000000'50305670: b75e0018 stq ra,18(sp)
        00000000'50305674: 47f00409 bis zero,a0,s0
        00000000'50305678: 47f1040a bis zero,a1,s1
        00000000'5030567c: 47ff040b bis zero,zero,s2
<strong>FAULT -&gt;00000000'50305680: a2100128 ldl a0,128(a0)</strong>
        00000000'50305684: 20500001 lda t1,1(a0)
        00000000'50305688: e440001b beq t1,00000000'503056f8 00000000'503056f8
        00000000'5030568c: d35ff6f8 bsr ra,00000000'50303270 00000000'50303270
        00000000'50305690: e4000019 beq v0,00000000'503056f8 00000000'503056f8
        00000000'50305694: 47e00411 bis zero,v0,a1
        00000000'50305698: 454b0801 xor s1,s2,t0
        00000000'5030569c: e4200005 beq t0,00000000'503056b4 00000000'503056b4
        00000000'503056a0: a2090128 ldl a0,128(s0)
        00000000'503056a4: d35ff722 bsr ra,00000000'50303330 00000000'50303330
        00000000'503056a8: 4160300b addl s2,#1,s2
        00000000'503056ac: 47e00411 bis zero,v0,a1</code></pre>



<p class="wp-block-paragraph">The register dump shows the value of&nbsp;<code>a0</code>&nbsp;at the time of the crash:</p>



<pre class="wp-block-code"><code>State Dump for Thread Id 0x150

  v0=000003ff ffe5de00   t0=00000000 00000000   t1=00000000 00000058
  t2=00000000 50306150   t3=00000000 0000015e   t4=00000000 00000001
  t5=00000000 00000001   t6=00000000 50300000   t7=00000000 00ed39fb
  s0=00000000 ffe5d420   s1=00000000 00000000   s2=00000000 00000000
  s3=00000000 00000000   s4=00000000 00000001   s5=00000000 50305a10
  fp=00000000 000123b8   <strong>a0=00000000 ffe5d420</strong>   a1=00000000 00000000
  a2=000003ff ffe5d420   a3=00000000 00000000   a4=00000000 00000000
  a5=00000000 cc5a4dbc   t8=00000001 00000000   t9=00000000 00000612
 t10=d1b71758 e219652c  t11=00000000 00000612   ra=00000000 50306e88
 t12=00000000 00000000   at=00000000 00010000   gp=00000000 00000000
  sp=000003ff fff8e9c0 zero=00000000 00000000 fpcr=89000000 00000000
SoftFpcr=00000000 00000000  fir=50305680
 psr=00000003
mode=1 ie=1 irql=0 </code></pre>



<p class="wp-block-paragraph">Indeed, it was an invalid pointer! As you can see, it’s identical to the pointer in&nbsp;<code>a2</code>, 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.</p>



<p class="wp-block-paragraph">I spent some time and pinned down the DLL responsible for the fault –&nbsp;<code>mciseq.dll</code>, and did some tracing. The truncation of&nbsp;<code>a0</code>&nbsp;happened when&nbsp;<code>a2</code>&nbsp;was moved into&nbsp;<code>a0</code>:</p>



<pre class="wp-block-code"><code>50306150    ZAPNOT  a2,#15,a0</code></pre>



<p class="wp-block-paragraph"><code>ZAPNOT</code>&nbsp;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&nbsp;<code>15</code>, which is&nbsp;<code>00001111</code>&nbsp;in binary. From this we can work out that the&nbsp;<code>ZAPNOT</code>&nbsp;instruction at&nbsp;<code>0x50306150</code>&nbsp;zeros the upper 4 bytes of&nbsp;<code>a2</code>, when it is copied into&nbsp;<code>a0</code>. This perfectly explains why, at the time of the fault,&nbsp;<code>a0</code>&nbsp;contained a truncated version of the pointer in&nbsp;<code>a2</code>.</p>



<p class="wp-block-paragraph">Of course,&nbsp;<code>0x50306150</code>&nbsp;was not the only place where it truncated 64-bit pointers, I found 6 truncations of the exact same type in&nbsp;<code>mciseq.dll</code>. 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:</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><a href="https://virtuallyfun.com/wp-content/uploads/2026/06/image-5.png"><img loading="lazy" decoding="async" width="1024" height="768" src="https://virtuallyfun.com/wp-content/uploads/2026/06/image-5.png" alt="" class="wp-image-15793" srcset="https://virtuallyfun.com/wp-content/uploads/2026/06/image-5.png 1024w, https://virtuallyfun.com/wp-content/uploads/2026/06/image-5-300x225.png 300w, https://virtuallyfun.com/wp-content/uploads/2026/06/image-5-768x576.png 768w, https://virtuallyfun.com/wp-content/uploads/2026/06/image-5-400x300.png 400w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></figure>
</div>


<p class="wp-block-paragraph">Here’s proof that Pinball is indeed running on a 64-bit build of Alpha NT:</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><a href="https://virtuallyfun.com/wp-content/uploads/2026/06/image-6.png"><img loading="lazy" decoding="async" width="1024" height="768" src="https://virtuallyfun.com/wp-content/uploads/2026/06/image-6.png" alt="" class="wp-image-15794" srcset="https://virtuallyfun.com/wp-content/uploads/2026/06/image-6.png 1024w, https://virtuallyfun.com/wp-content/uploads/2026/06/image-6-300x225.png 300w, https://virtuallyfun.com/wp-content/uploads/2026/06/image-6-768x576.png 768w, https://virtuallyfun.com/wp-content/uploads/2026/06/image-6-400x300.png 400w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></figure>
</div>


<p class="wp-block-paragraph">To make Pinball work on your NT build 2210 install, replace&nbsp;<code>%ProgramFiles%\Windows NT\Pinball\pinball.exe</code>&nbsp;and&nbsp;<code>%windir%\system32\mciseq.dll</code>&nbsp;with the following:</p>



<ul class="wp-block-list">
<li>Patched&nbsp;<code><a href="https://thebrokenpipe.com/uploads/pinball_fix/pinball.exe">pinball.exe</a></code></li>



<li>Patched&nbsp;<code><a href="https://thebrokenpipe.com/uploads/pinball_fix/mciseq.dll">mciseq.dll</a></code></li>
</ul>



<p class="wp-block-paragraph">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&nbsp;<code>AXP64</code>&nbsp;directory of the install disc:</p>



<ul class="wp-block-list">
<li>Patched&nbsp;<code><a href="https://thebrokenpipe.com/uploads/pinball_fix/PINBALL.EX_">PINBALL.EX_</a></code></li>



<li>Patched&nbsp;<code><a href="https://thebrokenpipe.com/uploads/pinball_fix/MCISEQ.DL_">MCISEQ.DL_</a></code></li>
</ul>



<h2 class="wp-block-heading">The Bug</h2>



<p class="wp-block-paragraph">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.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><a href="https://virtuallyfun.com/wp-content/uploads/2026/06/image-7.png"><img loading="lazy" decoding="async" width="648" height="490" src="https://virtuallyfun.com/wp-content/uploads/2026/06/image-7.png" alt="" class="wp-image-15795" srcset="https://virtuallyfun.com/wp-content/uploads/2026/06/image-7.png 648w, https://virtuallyfun.com/wp-content/uploads/2026/06/image-7-300x227.png 300w, https://virtuallyfun.com/wp-content/uploads/2026/06/image-7-397x300.png 397w" sizes="auto, (max-width: 648px) 100vw, 648px" /></a></figure>
</div>


<p class="wp-block-paragraph">Below are the 2 reasons I could think of for not seeing the collision detector bug:</p>



<ul class="wp-block-list">
<li>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.</li>



<li>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.</li>
</ul>



<p class="wp-block-paragraph">Of course, only Raymond himself could shed more light on this topic. It was fun (<em>read</em>: painful) debugging Pinball, as well as the NT kernel to fix the emulators – too much fun (<em>read</em>: pain) that I will never do it again.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph">Some trivia about me and pinball:</p>



<p class="wp-block-paragraph">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.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="424" height="282" src="https://virtuallyfun.com/wp-content/uploads/2026/06/image-8.png" alt="" class="wp-image-15796" srcset="https://virtuallyfun.com/wp-content/uploads/2026/06/image-8.png 424w, https://virtuallyfun.com/wp-content/uploads/2026/06/image-8-300x200.png 300w" sizes="auto, (max-width: 424px) 100vw, 424px" /></figure>
</div>


<p class="wp-block-paragraph">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.</p>



<p class="wp-block-paragraph">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.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://virtuallyfun.com/2026/06/02/pinball-on-64-bit-alpha-axp-windows-nt/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>I just wanted to play Simpsons Hit &#038; Run, or how I really hate Apple peripherals</title>
		<link>https://virtuallyfun.com/2025/09/28/i-just-wanted-to-play-simpsons-hit-run-or-how-i-really-hate-apple-peripherals/</link>
					<comments>https://virtuallyfun.com/2025/09/28/i-just-wanted-to-play-simpsons-hit-run-or-how-i-really-hate-apple-peripherals/#comments</comments>
		
		<dc:creator><![CDATA[neozeed]]></dc:creator>
		<pubDate>Sun, 28 Sep 2025 10:34:05 +0000</pubDate>
				<category><![CDATA[AI]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[games]]></category>
		<category><![CDATA[OS X]]></category>
		<category><![CDATA[retro hardware]]></category>
		<guid isPermaLink="false">https://virtuallyfun.com/?p=15462</guid>

					<description><![CDATA[Months ago at the local CeX I had spotted The Simpson&#8217;s hit &#38; run for a mere 8GBP. Sweet, I know the game has a massive cult following, and I wanted to try it, but being old and grumpy I &#8230; <a href="https://virtuallyfun.com/2025/09/28/i-just-wanted-to-play-simpsons-hit-run-or-how-i-really-hate-apple-peripherals/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-large"><a href="https://archive.org/details/the-simpsons-hit-run_crossover"><img loading="lazy" decoding="async" width="1024" height="883" src="https://virtuallyfun.com/wp-content/uploads/2025/09/superdrive-with-hit-and-run-1024x883.jpeg" alt="" class="wp-image-15463" srcset="https://virtuallyfun.com/wp-content/uploads/2025/09/superdrive-with-hit-and-run-1024x883.jpeg 1024w, https://virtuallyfun.com/wp-content/uploads/2025/09/superdrive-with-hit-and-run-300x259.jpeg 300w, https://virtuallyfun.com/wp-content/uploads/2025/09/superdrive-with-hit-and-run-768x662.jpeg 768w, https://virtuallyfun.com/wp-content/uploads/2025/09/superdrive-with-hit-and-run-1536x1325.jpeg 1536w, https://virtuallyfun.com/wp-content/uploads/2025/09/superdrive-with-hit-and-run-348x300.jpeg 348w, https://virtuallyfun.com/wp-content/uploads/2025/09/superdrive-with-hit-and-run.jpeg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a><figcaption class="wp-element-caption">Such a simple goal!</figcaption></figure>



<p class="wp-block-paragraph">Months ago at the local CeX I had spotted The Simpson&#8217;s hit &amp; run for a mere 8GBP.  Sweet, I know the game has a massive cult following, and I wanted to try it, but being old and grumpy I wanted to have a physical copy, you know so I could know it only had weird Vivendi spyware on it.</p>



<p class="wp-block-paragraph">Fun fact!  Vevendi bought the call centre I worked at in Miami back in the early 00&#8217;s and I had hoped to somehow swing my way to Sierra.  Instead I got saddled working with Ticketmaster.  Not the fun I wanted.</p>



<p class="wp-block-paragraph">Anyways flash forward a few decades and yeah, this game is from &#8217;03 back in those good olde days.  Wow time flies!</p>



<p class="wp-block-paragraph">On the home front, I&#8217;m not a big fan of Windows 11.  As a matter of fact, I hate it.  The UI is just obnoxious, and as much fun as WSL is, even it cannot save the horror that is Windows 11&#8217;s two things that drive me away from the platform</p>



<ul class="wp-block-list">
<li>The absolute braindead notepad</li>



<li>It&#8217;s reverse sorting of applications on the ALT-TAB stack</li>
</ul>



<p class="wp-block-paragraph">Seriously, the last application I used should be the FIRST on the ALT-TAB stack not the last.  WTF.  And notepad, what the actual fuck, with AI?  I can&#8217;t even reliably search &amp; replace without it absolutely trashing a document trying to replace double spaces with single spaces.  How can you fuck up notepad?  Microsoft found a way.  Even better replacing it with the one from Windows 8.1 or launch Windows 10 just completly screws up the OS.</p>



<p class="wp-block-paragraph"><span style="text-decoration: underline;">Great job guys!</span></p>



<p class="wp-block-paragraph">So I did what anyone else would do, I put aside a hundred pounds a month, and after 6 months I pulled the trigger and got a M4 Mac Mini.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="576" src="https://virtuallyfun.com/wp-content/uploads/2025/09/Screenshot-2025-09-28-at-11.22.12-AM-1024x576.png" alt="" class="wp-image-15467" srcset="https://virtuallyfun.com/wp-content/uploads/2025/09/Screenshot-2025-09-28-at-11.22.12-AM-1024x576.png 1024w, https://virtuallyfun.com/wp-content/uploads/2025/09/Screenshot-2025-09-28-at-11.22.12-AM-300x169.png 300w, https://virtuallyfun.com/wp-content/uploads/2025/09/Screenshot-2025-09-28-at-11.22.12-AM-768x432.png 768w, https://virtuallyfun.com/wp-content/uploads/2025/09/Screenshot-2025-09-28-at-11.22.12-AM-500x281.png 500w, https://virtuallyfun.com/wp-content/uploads/2025/09/Screenshot-2025-09-28-at-11.22.12-AM.png 1280w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">Cyberpunk 2077 over 100FPS!</figcaption></figure>



<p class="wp-block-paragraph">The good?  It&#8217;s surprisingly fast for what it is.  It actually plays CyberPunk 2077 (there is a native version, you can even hit over <a href="https://virtuallyfun.com/wp-content/uploads/2025/09/Screenshot-2025-09-28-at-11.22.14-AM.png" target="_blank" rel="noreferrer noopener">100fps!</a>, or even <a href="https://virtuallyfun.com/wp-content/uploads/2025/09/Screenshot-2025-09-28-at-11.14.59-AM.png" target="_blank" rel="noreferrer noopener">72fps with ray tracing</a> &#8211; granted I did drop the resolution to 720p, and medium textures, and added in frame generation), Crossover is mostly okay, I can still use <a href="https://archive.org/details/mssql-4.20-crossover">SQL Server 4.20</a>, and <a href="https://archive.org/details/word-6.0-for-nt-crossover">Word 6 for NT</a>, although Excel has major issues for some reason.  Edge &amp; Onedrive work just fine, and shockingly. <a href="https://github.com/ggml-org/whisper.cpp" target="_blank" rel="noreferrer noopener">whisper.cpp</a> using the metal backend &amp; ggml isn&#8217;t too horrible:</p>



<pre class="wp-block-code"><code>whisper_model_load: model size    =  538.59 MB
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M4
ggml_metal_init: picking default device: Apple M4
ggml_metal_load_library: using embedded metal library
ggml_metal_init: GPU name:   Apple M4
ggml_metal_init: GPU family: MTLGPUFamilyApple9  (1009)
ggml_metal_init: GPU family: MTLGPUFamilyCommon3 (3003)
ggml_metal_init: GPU family: MTLGPUFamilyMetal3  (5001)</code></pre>



<p class="wp-block-paragraph">Just remember to build with &#8220;-DWHISPER_COREML=1&#8221; set for Apple hardware.</p>



<p class="wp-block-paragraph">I went ahead to test using the old &#8220;<a href="https://archive.org/details/the-lord-of-the-rings-tapes" target="_blank" rel="noreferrer noopener">Lord of the Rings</a>&#8221; tapes I&#8217;d got last year, and aribitrarly picked <a href="https://archive.org/download/the-lord-of-the-rings-tapes/The%20Lord%20of%20the%20Rings%20Tape%2012%20Side%201.flac" target="_blank" rel="noreferrer noopener">tape 12 side 1</a>:</p>



<pre class="wp-block-code"><code>Input #0, flac, from 'lotr-tape12-sie1.flac':
  Metadata:
    title           : Mount Doom Part 1
    album           : The Lord of the Rings
    artist          : Brian Sibley
    date            : 1981
    genre           : Audio Book
    track           : 23
    encoder         : Lavf58.76.100
  Duration: 00:31:35.63, start: 0.000000, bitrate: 596 kb/s</code></pre>



<p class="wp-block-paragraph">And the m4 Mac Mini crunched through the 31 minutes in 2:47!  You can <a href="https://virtuallyfun.com/wp-content/uploads/2025/09/lotr-tape12-ggml-medium-en-q5_0.txt" target="_blank" rel="noreferrer noopener">check the output here</a>:</p>



<pre class="wp-block-code"><code>18.52s user 1.69s system 12% cpu 2:47.64 total</code></pre>



<p class="wp-block-paragraph">Or the JFK benchmark:</p>



<pre class="wp-block-code"><code>whisper_print_timings:&nbsp; &nbsp; total time =&nbsp; 1464.12 ms  
./medium.sh samples/jfk.wav  0.18s user 0.15s system 22% cpu 1.512 total
                               </code></pre>



<p class="wp-block-paragraph">Ok that&#8217;s all great, but what about this optical drive?</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="768" src="https://virtuallyfun.com/wp-content/uploads/2025/09/image-1-1024x768.png" alt="" class="wp-image-15465" srcset="https://virtuallyfun.com/wp-content/uploads/2025/09/image-1-1024x768.png 1024w, https://virtuallyfun.com/wp-content/uploads/2025/09/image-1-300x225.png 300w, https://virtuallyfun.com/wp-content/uploads/2025/09/image-1-768x576.png 768w, https://virtuallyfun.com/wp-content/uploads/2025/09/image-1-1536x1152.png 1536w, https://virtuallyfun.com/wp-content/uploads/2025/09/image-1-2048x1536.png 2048w, https://virtuallyfun.com/wp-content/uploads/2025/09/image-1-400x300.png 400w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">I picked up an Apple Super Drive A1379 used from CeX, again for a whopping 28GBP.  Sure it&#8217;s a bit scuffed up and ugly but plugging it into my Windows 11 laptop it shows up right away.  Nice</p>



<p class="wp-block-paragraph">Also let me take a moment to say thanks for basically writing this on the under side of the drive in what may as well have been black in on a black surface.  I&#8217;ve had to use sunlight &amp; a full flash to get this to show up to verify the model number.  And what I suspect is 2 parts of the larger problem, it being an optical drive from 2012.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="447" src="https://virtuallyfun.com/wp-content/uploads/2025/09/image-1024x447.png" alt="" class="wp-image-15464" srcset="https://virtuallyfun.com/wp-content/uploads/2025/09/image-1024x447.png 1024w, https://virtuallyfun.com/wp-content/uploads/2025/09/image-300x131.png 300w, https://virtuallyfun.com/wp-content/uploads/2025/09/image-768x336.png 768w, https://virtuallyfun.com/wp-content/uploads/2025/09/image-1536x671.png 1536w, https://virtuallyfun.com/wp-content/uploads/2025/09/image-2048x895.png 2048w, https://virtuallyfun.com/wp-content/uploads/2025/09/image-500x218.png 500w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">Model No: A1379</figcaption></figure>



<p class="wp-block-paragraph">Like seriously could they make it any harder.  And yes dropoping support has <a href="https://discussions.apple.com/thread/253778994?sortBy=rank">always been a thing</a>.</p>



<p class="wp-block-paragraph">Okay, so I still have my Windows 11 laptop, and when connected I cannot insert a disc to save my life.  Well to cut the story short, YOU NEED A DRIVER.  I kid you not.</p>



<p class="wp-block-paragraph">The driver, named <a href="https://archive.org/download/apple-oddinstaller-64/AppleODDInstaller64.exe">AppleODDInstaller64.exe</a> is what you are after, and luckily for you, I&#8217;ve already gone through the motion of extracting various bootcamp driver packs to find it, and upload it to <a href="https://archive.org/details/apple-oddinstaller-64" target="_blank" rel="noreferrer noopener">archive.org</a>.</p>



<p class="wp-block-paragraph">With the driver loaded, I could then finally just copy the files off the install discs and install into crossover.  Of course the default install requires CD1 to be inserted like a key disc, so <a href="https://gamecopyworld.com/games/pc_the_simpsons_hr.shtml" target="_blank" rel="noreferrer noopener">gamecopyworld</a> to the rescue.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="768" src="https://virtuallyfun.com/wp-content/uploads/2025/09/Screenshot-2025-09-28-at-10.40.32-AM-1024x768.png" alt="" class="wp-image-15466" srcset="https://virtuallyfun.com/wp-content/uploads/2025/09/Screenshot-2025-09-28-at-10.40.32-AM-1024x768.png 1024w, https://virtuallyfun.com/wp-content/uploads/2025/09/Screenshot-2025-09-28-at-10.40.32-AM-300x225.png 300w, https://virtuallyfun.com/wp-content/uploads/2025/09/Screenshot-2025-09-28-at-10.40.32-AM-768x576.png 768w, https://virtuallyfun.com/wp-content/uploads/2025/09/Screenshot-2025-09-28-at-10.40.32-AM-1536x1152.png 1536w, https://virtuallyfun.com/wp-content/uploads/2025/09/Screenshot-2025-09-28-at-10.40.32-AM-400x300.png 400w, https://virtuallyfun.com/wp-content/uploads/2025/09/Screenshot-2025-09-28-at-10.40.32-AM.png 1600w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">Simpsons Hit &amp; Run on OS X Sequoia 15.6.1 (24G90) / CrossOver Version 25.1.1 (25.1.1.38624)</figcaption></figure>



<p class="wp-block-paragraph">I have to say that running x86 code through the new rosetta feels pretty snappy.  The biggest dissapointment of course is that there is no 32bit support in OS X.  Crossover at least maintains that pretty well, although there is no Win16 support. And yes I&#8217;ve tried otvdm, and no it doesn&#8217;t work.</p>



<p class="wp-block-paragraph">The funny part is that Hit&amp;Run runs signiicantly faster on the M4 OS X / Crossover setup.  That&#8217;s unexpected!  The annoying part is that although Crossover does support controllers, neither DirectInput or Xinput seem to work.  So I&#8217;m forced to use keyboard and mouse, which is kind of annoying as I still don&#8217;t have a proper desk after moving, and I end up just using bluetooth and my TV to do stuff, as I&#8217;m even writing this from my couch.</p>



<p class="wp-block-paragraph">At least there are some alterantives out there.  I know there will be the inevitable cry, what about Linux, and honestly I&#8217;d probably go with the <a href="https://milkv.io/titan" target="_blank" rel="noreferrer noopener">Milk-V Titan</a>, and all in on RISC-V.  But considering how much more expensive the Titan is than the Jupiter, I&#8217;ll be sitting on the sidelines for the first wave to see if the much hoped for 64GB of RAM, and real GPU support actually works.  Although I&#8217;m glad I got the 16gb model of the Jupiter, I never could get any GPU device recognized so I mostly use it for weird internet edge stuff, as at least if I do get hit with buffer overflows, being RISC-V means default out of the box x86/x86_64 attacks are meaningless.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://virtuallyfun.com/2025/09/28/i-just-wanted-to-play-simpsons-hit-run-or-how-i-really-hate-apple-peripherals/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		<enclosure url="https://archive.org/download/the-lord-of-the-rings-tapes/The%20Lord%20of%20the%20Rings%20Tape%2012%20Side%201.flac" length="0" type="audio/flac" />

			</item>
		<item>
		<title>Classic Marathon free on STEAM!</title>
		<link>https://virtuallyfun.com/2024/05/10/classic-marathon-free-on-steam/</link>
					<comments>https://virtuallyfun.com/2024/05/10/classic-marathon-free-on-steam/#respond</comments>
		
		<dc:creator><![CDATA[neozeed]]></dc:creator>
		<pubDate>Fri, 10 May 2024 15:54:17 +0000</pubDate>
				<category><![CDATA[games]]></category>
		<category><![CDATA[Macintosh]]></category>
		<category><![CDATA[steam]]></category>
		<guid isPermaLink="false">https://virtuallyfun.com/?p=14429</guid>

					<description><![CDATA[So yeah, it&#8217;s FREE over on steam! Get it while it&#8217;s HOT! Classic Marathon on Steam (steampowered.com)]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-large"><a href="https://store.steampowered.com/app/2398450/Classic_Marathon/" target="_blank" rel="noreferrer noopener"><img loading="lazy" decoding="async" width="1024" height="489" src="/wp-content/uploads/2024/05/classic-marathon-1024x489.png" alt="" class="wp-image-14430" srcset="https://virtuallyfun.com/wp-content/uploads/2024/05/classic-marathon-1024x489.png 1024w, https://virtuallyfun.com/wp-content/uploads/2024/05/classic-marathon-300x143.png 300w, https://virtuallyfun.com/wp-content/uploads/2024/05/classic-marathon-768x367.png 768w, https://virtuallyfun.com/wp-content/uploads/2024/05/classic-marathon-500x239.png 500w, https://virtuallyfun.com/wp-content/uploads/2024/05/classic-marathon.png 1028w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></figure>



<p class="wp-block-paragraph">So yeah, it&#8217;s FREE over on steam!  Get it while it&#8217;s HOT!</p>



<p class="wp-block-paragraph"><a href="https://store.steampowered.com/app/2398450/Classic_Marathon/">Classic Marathon on Steam (steampowered.com)</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://virtuallyfun.com/2024/05/10/classic-marathon-free-on-steam/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Apparently talking about DOS Extenders is too hot for Twitter: AKA Phar Lap 386</title>
		<link>https://virtuallyfun.com/2024/02/01/apparently-talking-about-dos-extenders-is-too-hot-for-twitter-aka-phar-lap-386/</link>
					<comments>https://virtuallyfun.com/2024/02/01/apparently-talking-about-dos-extenders-is-too-hot-for-twitter-aka-phar-lap-386/#comments</comments>
		
		<dc:creator><![CDATA[neozeed]]></dc:creator>
		<pubDate>Thu, 01 Feb 2024 19:15:17 +0000</pubDate>
				<category><![CDATA[80386]]></category>
		<category><![CDATA[dos extenders]]></category>
		<category><![CDATA[games]]></category>
		<category><![CDATA[i386]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[random updates]]></category>
		<category><![CDATA[Watcom C++]]></category>
		<guid isPermaLink="false">https://virtuallyfun.com/?p=13859</guid>

					<description><![CDATA[I had a small twitter account, and I tried not to get dragged into anything that would just be basically wasting my time. Just stay focused and on topic. FINE. I just wanted to see if anyone ever saw it, &#8230; <a href="https://virtuallyfun.com/2024/02/01/apparently-talking-about-dos-extenders-is-too-hot-for-twitter-aka-phar-lap-386/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">I had a small twitter account, and I tried not to get dragged into anything that would just be basically wasting my time. Just stay focused and on topic. <em>FINE</em>.  I just wanted to see if anyone ever saw it, if it was even worth the effort of doing WIP&#8217;s as I didn&#8217;t want to make it super annoying.</p>



<figure class="wp-block-image size-full"><a href="https://twitter.com/virtuallyfun" target="_blank" rel="noreferrer noopener"><img loading="lazy" decoding="async" width="786" height="537" src="/wp-content/uploads/2024/02/twitter-profile.png" alt="" class="wp-image-13860" srcset="https://virtuallyfun.com/wp-content/uploads/2024/02/twitter-profile.png 786w, https://virtuallyfun.com/wp-content/uploads/2024/02/twitter-profile-300x205.png 300w, https://virtuallyfun.com/wp-content/uploads/2024/02/twitter-profile-768x525.png 768w, https://virtuallyfun.com/wp-content/uploads/2024/02/twitter-profile-439x300.png 439w" sizes="auto, (max-width: 786px) 100vw, 786px" /></a></figure>



<p class="wp-block-paragraph">I logged on to post a fun update that I&#8217;d finally gotten a Phar Lap 386 version 4.1 app to do something halfway useful, the sairen AGI interpreter up and running in the most basic sense.</p>



<figure class="wp-block-image size-full"><a href="/wp-content/uploads/2024/02/twitter-flagged.png"><img loading="lazy" decoding="async" width="738" height="336" src="/wp-content/uploads/2024/02/twitter-flagged.png" alt="" class="wp-image-13861" srcset="https://virtuallyfun.com/wp-content/uploads/2024/02/twitter-flagged.png 738w, https://virtuallyfun.com/wp-content/uploads/2024/02/twitter-flagged-300x137.png 300w, https://virtuallyfun.com/wp-content/uploads/2024/02/twitter-flagged-500x228.png 500w" sizes="auto, (max-width: 738px) 100vw, 738px" /></a><figcaption class="wp-element-caption">Talking about DOS Extenders is spammy and manipulation!</figcaption></figure>



<p class="wp-block-paragraph">I don&#8217;t get what triggered it, but oh well there was a &#8216;have a review&#8217; and yeah that was fine. Great.  So I&#8217;m unlocked so I go ahead and post with the forbidden topic, as I&#8217;m clearly dumb, and forgetting that Twitter is for hate mobs &amp; posting pictures of food, and cat pictures.</p>



<figure class="wp-block-image size-full"><a href="/wp-content/uploads/2024/02/twitter-last-post.png"><img loading="lazy" decoding="async" width="743" height="471" src="/wp-content/uploads/2024/02/twitter-last-post.png" alt="" class="wp-image-13862" srcset="https://virtuallyfun.com/wp-content/uploads/2024/02/twitter-last-post.png 743w, https://virtuallyfun.com/wp-content/uploads/2024/02/twitter-last-post-300x190.png 300w, https://virtuallyfun.com/wp-content/uploads/2024/02/twitter-last-post-473x300.png 473w" sizes="auto, (max-width: 743px) 100vw, 743px" /></a><figcaption class="wp-element-caption">The Sairen AGI interpreter built with Watcom 386/7.0 &amp; Phar Lap 386 4.1   </figcaption></figure>



<p class="wp-block-paragraph">So yes, that was a line too far, and now that&#8217;s it.</p>



<p class="wp-block-paragraph">Now some of you may think, if you buy &#8216;the plan&#8217; you&#8217;ll no doubt be exempt from the heavy hands of Twitter</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="339" height="151" src="/wp-content/uploads/2024/02/Screenshot-2024-02-01-192733.png" alt="" class="wp-image-13881" srcset="https://virtuallyfun.com/wp-content/uploads/2024/02/Screenshot-2024-02-01-192733.png 339w, https://virtuallyfun.com/wp-content/uploads/2024/02/Screenshot-2024-02-01-192733-300x134.png 300w" sizes="auto, (max-width: 339px) 100vw, 339px" /><figcaption class="wp-element-caption">3 squids a month</figcaption></figure>
</div>


<p class="wp-block-paragraph">But I already was and had been for a while.</p>



<figure class="wp-block-image size-full"><a href="/wp-content/uploads/2024/02/twitter-your-account-is-suspended.png"><img loading="lazy" decoding="async" width="695" height="201" src="/wp-content/uploads/2024/02/twitter-your-account-is-suspended.png" alt="" class="wp-image-13863" srcset="https://virtuallyfun.com/wp-content/uploads/2024/02/twitter-your-account-is-suspended.png 695w, https://virtuallyfun.com/wp-content/uploads/2024/02/twitter-your-account-is-suspended-300x87.png 300w, https://virtuallyfun.com/wp-content/uploads/2024/02/twitter-your-account-is-suspended-500x145.png 500w" sizes="auto, (max-width: 695px) 100vw, 695px" /></a><figcaption class="wp-element-caption">Your account is suspended</figcaption></figure>



<p class="wp-block-paragraph">So that&#8217;s the end of that.  I guess it&#8217;s all too confusing for a boomer like me.</p>



<figure class="wp-block-image size-full"><a href="/wp-content/uploads/2024/02/twitter-cancel-plan-1.png"><img loading="lazy" decoding="async" width="912" height="786" src="/wp-content/uploads/2024/02/twitter-cancel-plan-1.png" alt="" class="wp-image-13882" srcset="https://virtuallyfun.com/wp-content/uploads/2024/02/twitter-cancel-plan-1.png 912w, https://virtuallyfun.com/wp-content/uploads/2024/02/twitter-cancel-plan-1-300x259.png 300w, https://virtuallyfun.com/wp-content/uploads/2024/02/twitter-cancel-plan-1-768x662.png 768w, https://virtuallyfun.com/wp-content/uploads/2024/02/twitter-cancel-plan-1-348x300.png 348w" sizes="auto, (max-width: 912px) 100vw, 912px" /></a><figcaption class="wp-element-caption">Cancel me, cancel you</figcaption></figure>



<p class="wp-block-paragraph">So needless to say I cancelled Twitter as well.  Kind of sneaky they didn&#8217;t auto-cancel taking money.</p>



<p class="wp-block-paragraph">So yeah, with that out of the way, let&#8217;s continue into DOS Extender land. I added just enough 386 magic, onto <a href="https://github.com/neozeed/sarien286" target="_blank" rel="noreferrer noopener">github: neozeed/sarien286</a>.  Yes I see now it really was a poorly named repo.  Such is life.</p>



<p class="wp-block-paragraph">There is 3 main things for porting old programs where they take care of all the logic, it&#8217;s going to be File I/O, Screen I/O, and timers.  Luckily this time it was easier than I recalled.</p>



<p class="wp-block-paragraph">Over on usenet (<a href="https://groups.google.com/g/comp.lang.asm.x86/c/CMcYE9qTN2Y/m/FUpxQ6Ibxd4J" target="_blank" rel="noreferrer noopener">google groups link</a>) Chris Giese shared this great summary on direct memory access from various methods:</p>



<pre class="wp-block-code"><code>/* 32-bit Watcom C with CauseWay DOS extender */
int main(void) {
char *screen = (char *)0xA0000;
initMode13();
*screen = 1;
return 0;
}

/* 32-bit Watcom C with DOS/4GW extender
(*** This code is untested ***) */
int main(void) {
char *screen = (char *)0xA0000;
initMode13();
*screen = 1;
return 0;
}

/* 32-bit Watcom C with PharLap DOS extender
(*** This code is untested ***) */
#include &lt;dos.h&gt; /* MK_FP() */
#define PHARLAP_CONVMEM_SEL 0x34
int main(void) {
char far *screen = (char far *)MK_FP(PHARLAP_CONVMEM_SEL, 0xA0000);
initMode13();
*screen = 1;
return 0;
}

/* 16-bit Watcom C (real mode) */
#include &lt;dos.h&gt; /* MK_FP() */
int main(void) {
char far *screen = (char far *)MK_FP(0xA000, 0);
initMode13();
*screen = 1;
return 0;
}</code></pre>



<p class="wp-block-paragraph">It is missing the Phar Lap 286 method:</p>



<pre class="wp-block-code"><code>/* Get PM pointer to text screen */
  DosMapRealSeg(0xb800,4000,&amp;rseg);
  textptr=MAKEP(rseg,0);</code></pre>



<p class="wp-block-paragraph">But it&#8217;s very useful to have around as documentation is scarce.</p>



<p class="wp-block-paragraph">Which brings me to this (again?)</p>



<figure class="wp-block-image size-large"><a href="/wp-content/uploads/2024/02/Pharlap-386-Programmers-guide-to-DPMI-and-windows.jpg"><img loading="lazy" decoding="async" width="852" height="1024" src="/wp-content/uploads/2024/02/Pharlap-386-Programmers-guide-to-DPMI-and-windows-852x1024.jpg" alt="" class="wp-image-13864" srcset="https://virtuallyfun.com/wp-content/uploads/2024/02/Pharlap-386-Programmers-guide-to-DPMI-and-windows-852x1024.jpg 852w, https://virtuallyfun.com/wp-content/uploads/2024/02/Pharlap-386-Programmers-guide-to-DPMI-and-windows-249x300.jpg 249w, https://virtuallyfun.com/wp-content/uploads/2024/02/Pharlap-386-Programmers-guide-to-DPMI-and-windows-768x923.jpg 768w, https://virtuallyfun.com/wp-content/uploads/2024/02/Pharlap-386-Programmers-guide-to-DPMI-and-windows-1277x1536.jpg 1277w, https://virtuallyfun.com/wp-content/uploads/2024/02/Pharlap-386-Programmers-guide-to-DPMI-and-windows.jpg 1324w" sizes="auto, (max-width: 852px) 100vw, 852px" /></a><figcaption class="wp-element-caption">Phar Lap 386|Dos-Extender 4.1</figcaption></figure>



<p class="wp-block-paragraph">Years ago, I had managed to score a documentation set, and a CD-ROM with a burnt installed copy of the extender.  I didn&#8217;t know if it was complete, but of course these things are so incredibly rare I jumped on the chance to get it!</p>



<figure class="wp-block-image size-large"><a href="/wp-content/uploads/2024/02/pharlap-4.1-receipt.png"><img loading="lazy" decoding="async" width="1024" height="457" src="/wp-content/uploads/2024/02/pharlap-4.1-receipt-1024x457.png" alt="" class="wp-image-13889" srcset="https://virtuallyfun.com/wp-content/uploads/2024/02/pharlap-4.1-receipt-1024x457.png 1024w, https://virtuallyfun.com/wp-content/uploads/2024/02/pharlap-4.1-receipt-300x134.png 300w, https://virtuallyfun.com/wp-content/uploads/2024/02/pharlap-4.1-receipt-768x343.png 768w, https://virtuallyfun.com/wp-content/uploads/2024/02/pharlap-4.1-receipt-500x223.png 500w, https://virtuallyfun.com/wp-content/uploads/2024/02/pharlap-4.1-receipt.png 1362w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a><figcaption class="wp-element-caption">2011!</figcaption></figure>



<p class="wp-block-paragraph">Unfortunately, I didn&#8217;t feel right breaking the books apart, and scanning them, then add in some bad life choices on my part, and I ended up losing the books.  Fast forward <em>*years*</em> later and Foone <a href="https://archive.org/details/phar-lap-386-dox-extender-4.1-sdk" target="_blank" rel="noreferrer noopener">uploaded a document set on archive.org</a>.  GREAT!  As far as I can tell the only difference <a href="https://archive.org/details/various-dos-extenders-attempt2" target="_blank" rel="noreferrer noopener">in what I had</a> is that I&#8217;ve got a different serial number.  Thankfully I was smart enough to at lest email myself a copy of the CD-ROM contents!  And this whole thing did inspire me to gut and upload the <a href="https://archive.org/details/tnt-dos-extender-6" target="_blank" rel="noreferrer noopener">Phar Lap TNT 6.0</a> that I had also managed to acquire.</p>



<p class="wp-block-paragraph">Although unlocking the video RAM wasn&#8217;t too bad, once I knew what to do, the other thing is to hook the clock for a timer.  ISR&#8217;s are always hell, but at least this is a very simple one:</p>



<pre class="wp-block-code"><code>void (__interrupt __far *prev_int_irq0)();
void __interrupt __far timer_rtn();
int clock_ticks;
#define IRQ0 0x08
void main()
  {
   clock_ticks=0;
   //get prior IRQ routine
   prev_int_irq0 = _dos_getvect( IRQ0 );
   //hook in new protected mode ISR
   _dos_setvect( IRQ0, timer_rtn );

/* do something interesting */
   //restore prior ISR
   _dos_setvect( IRQ0, prev_int_irq0 );
  }

void __interrupt __far timer_rtn()
  {
    ++clock_ticks;
    //call prior ISR
    _chain_intr( prev_int_irq0 );
  }</code></pre>



<p class="wp-block-paragraph">The methodology is almost always the same, as always, it&#8217;s the particular incantation. </p>



<p class="wp-block-paragraph">So yeah, it&#8217;s super simple, but the 8086/80286 calling down to DOS/BIOS from protected mode via the int86 just had to be changed to int386, and some of the register structs being redefined.  I&#8217;m not sure why but the video/isr code compiled with version 7 of Watcom, but crashes.  I think its more drift in the headers, as the findfirst/findnext/assert calls are lacking from Watcom 7, so I just cheated and linked with Watcom 10.  This led to another strange thing where the stdio _iob structure was undefined.  In Watcom 10 it became __iob, so I just updated the 7 headers, and that actually worked.  I had to include some of the findfirst/next structures into the <a href="https://github.com/neozeed/sarien286/blob/main/fileglob.c#L21" target="_blank" rel="noreferrer noopener">fileglob.c</a> file but it now builds and links fine.</p>



<p class="wp-block-paragraph">Another thing to do differently when using Watcom 7, is that it doesn&#8217;t include a linker, rather you need to use 386LINK.  Generating the response file, as there is so many objects didn&#8217;t turn out too hard once I realized that by default everything is treated as an object.</p>



<p class="wp-block-paragraph">Another fun thing is that you can tell the linker to use the program &#8216;stub386.exe&#8217; so that it will run &#8216;run386&#8217; on it&#8217;s own, making your program feel more standalone.  From the documentation:</p>



<pre class="wp-block-code"><code>386 | LINK has the ability to bind the stub loader program, STUB386.EXE, to 
the front of an application .EXP file. The resulting .EXE file can be run by 
typing the file name, just like a real mode DOS program. The stub loader 
program searches the execution PATH for RUN386.EXE (the 

386 | DOS-Extender executable) and loads it; 386 | DOS-Extender then loads 
the application .EXP file following the stub loader in the bound .EXE file. 


To autobind STUB386.EXE to an application .EXP file and create a bound 
executable, specify STUB386.EXE as one of the input object files on the 
command line.

</code></pre>



<p class="wp-block-paragraph">So that means I can just use the following as my linker response file.</p>



<pre class="wp-block-code"><code>agi.obj,agi_v2.obj,agi_v3.obj,checks.obj,cli.obj,console.obj,cycle.obj
daudio.obj,fileglob.obj,font.obj,getopt.obj,getopt1.obj,global.obj
graphics.obj,id.obj,inv.obj,keyboard.obj,logic.obj,lzw.obj,main.obj
menu.obj,motion.obj,pharcga3.obj,objects.obj,op_cmd.obj,op_dbg.obj
op_test.obj,patches.obj,path.obj,picture.obj,rand.obj,savegame.obj
silent.obj,sound.obj,sprite.obj,text.obj,view.obj
words.obj,picview.obj stub386.exe
-exe 386.exe
-lib \wat10\lib386\dos\clib3s.lib \wat10\lib386\math387s.lib
-lib \wat10\lib386\dos\emu387.lib</code></pre>



<p class="wp-block-paragraph">It really was that simple.  I have to say it&#8217;s almost shocking how well this went.</p>



<p class="wp-block-paragraph">So, this brings me back, full circle to where it started, me getting banned for posting this:</p>



<figure class="wp-block-image size-large"><a href="/wp-content/uploads/2024/02/attempt-to-capture-it-again.png"><img loading="lazy" decoding="async" width="1024" height="511" src="/wp-content/uploads/2024/02/attempt-to-capture-it-again-1024x511.png" alt="" class="wp-image-13876" srcset="https://virtuallyfun.com/wp-content/uploads/2024/02/attempt-to-capture-it-again-1024x511.png 1024w, https://virtuallyfun.com/wp-content/uploads/2024/02/attempt-to-capture-it-again-300x150.png 300w, https://virtuallyfun.com/wp-content/uploads/2024/02/attempt-to-capture-it-again-768x383.png 768w, https://virtuallyfun.com/wp-content/uploads/2024/02/attempt-to-capture-it-again-500x250.png 500w, https://virtuallyfun.com/wp-content/uploads/2024/02/attempt-to-capture-it-again.png 1452w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a><figcaption class="wp-element-caption">32bit!</figcaption></figure>



<p class="wp-block-paragraph">I thought it was exciting!</p>



<p class="wp-block-paragraph">For anyone who feels like trying it, <a href="https://github.com/neozeed/sarien286/releases/tag/v0.1" target="_blank" rel="noreferrer noopener">I prepped a 5 1/4&#8243; floppy disk image</a>.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><a href="/wp-content/uploads/2024/02/sar386.gif"><img loading="lazy" decoding="async" width="800" height="248" src="/wp-content/uploads/2024/02/sar386.gif" alt="" class="wp-image-13872"/></a><figcaption class="wp-element-caption">running on 86box, 386DX-40 CGA graphics</figcaption></figure>
</div>


<p class="wp-block-paragraph">One interesting observation is that the 386 extender is actually smaller than the 286 one.  And being able to compile with full optimisations it is significantly faster.</p>



<figure class="wp-block-video"><video height="248" style="aspect-ratio: 880 / 248;" width="880" controls src="/wp-content/uploads/2024/02/386sar2-240.mp4"></video><figcaption class="wp-element-caption">16bit on the left, 32bit on the right.</figcaption></figure>



<p class="wp-block-paragraph">I ran both the prior 16bit protected mode version (on the left), and 32bit version (on the right), on the same IBM PS/2 80386DX 16Mhz machine.  You can see how the 32bit version is significantly faster!. </p>



<p class="wp-block-paragraph">I really should profile the code, and have it load all the resources into RAM, it does seem to be loading and unloading stuff, which considering were in protected mode, we should use all ram, or push the VMM386 subsystem to page, and not do direct file swapping, like it&#8217;s the 1970s.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://virtuallyfun.com/2024/02/01/apparently-talking-about-dos-extenders-is-too-hot-for-twitter-aka-phar-lap-386/feed/</wfw:commentRss>
			<slash:comments>8</slash:comments>
		
		
			</item>
		<item>
		<title>Phar Lap&#8217;s 286/DOS-Extender: why nobody used it for games</title>
		<link>https://virtuallyfun.com/2024/01/29/phar-laps-286-dos-extender-why-nobody-used-it-for-games/</link>
					<comments>https://virtuallyfun.com/2024/01/29/phar-laps-286-dos-extender-why-nobody-used-it-for-games/#comments</comments>
		
		<dc:creator><![CDATA[neozeed]]></dc:creator>
		<pubDate>Mon, 29 Jan 2024 02:24:57 +0000</pubDate>
				<category><![CDATA[80286]]></category>
		<category><![CDATA[80386]]></category>
		<category><![CDATA[dos extenders]]></category>
		<category><![CDATA[games]]></category>
		<category><![CDATA[MS-DOS]]></category>
		<category><![CDATA[PS/2]]></category>
		<guid isPermaLink="false">https://virtuallyfun.com/?p=13822</guid>

					<description><![CDATA[Your&#160;scientists were so preoccupied with whether or not they could, they didn&#8217;t stop to think if they should. -Ian Malcolm Ever since I got my first 286 board way back in the early 90&#8217;s (1990? 1991?) I have been intrigued &#8230; <a href="https://virtuallyfun.com/2024/01/29/phar-laps-286-dos-extender-why-nobody-used-it-for-games/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[
<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Your&nbsp;scientists were so preoccupied with whether or not they could, they didn&#8217;t stop to think if they should.<a href="https://www.quotes.net/signup.php"></a></p>
<cite>-Ian Malcolm</cite></blockquote>



<p class="wp-block-paragraph">Ever since I got my first 286 board way back in the early 90&#8217;s (1990? 1991?) I have been intrigued by the whole protected mode of operation.  Unfortunately, in the era the required tools were way out of my reach, and of course were not available at retail.  But now I live in the future where I have all the parts!  Let&#8217;s look at the needed parts</p>



<ul class="wp-block-list">
<li><a href="/wp-content/uploads/2024/01/8a6aef24-8339-4513-9310-89132e07851e.jpeg" target="_blank" rel="noreferrer noopener">IBM PS/2 model 60</a></li>



<li><a href="https://virtuallyfun.com/wp-content/uploads/2023/07/IMG_6502.jpg" target="_blank" rel="noreferrer noopener">Microsoft C 6.00a</a></li>



<li><a href="/wp-content/uploads/2024/01/pharlap-286-1.jpg" target="_blank" rel="noreferrer noopener">Phar Lap 286|DOS-Extender</a></li>



<li>Space Quest II</li>
</ul>



<p class="wp-block-paragraph">I have to once more again thank <a href="https://www.patreon.com/virtuallyfun">my patrons</a>, and people tolerating the google ads as it made all the difference in being able to buy all this stuff.  And now is as good a time as any other to put it all together.</p>



<p class="wp-block-paragraph">I stumbled upon this repo on <a href="https://sourceforge.net/projects/sarien/" target="_blank" rel="noreferrer noopener">sourceforge, Sarien</a>.  It included a Turbo C++ port, which is pretty exciting!  So, this became my goal, get Sarien running on Phar Lap 286.</p>



<figure class="wp-block-image size-full"><a href="https://archive.org/details/microsoft_c_600-3.5disks" target="_blank" rel="noreferrer noopener"><img loading="lazy" decoding="async" width="902" height="540" src="/wp-content/uploads/2024/01/installing-c-600-for-sarien.png" alt="" class="wp-image-13823" srcset="https://virtuallyfun.com/wp-content/uploads/2024/01/installing-c-600-for-sarien.png 902w, https://virtuallyfun.com/wp-content/uploads/2024/01/installing-c-600-for-sarien-300x180.png 300w, https://virtuallyfun.com/wp-content/uploads/2024/01/installing-c-600-for-sarien-768x460.png 768w, https://virtuallyfun.com/wp-content/uploads/2024/01/installing-c-600-for-sarien-500x300.png 500w" sizes="auto, (max-width: 902px) 100vw, 902px" /></a><figcaption class="wp-element-caption">Installing Microsoft C 6.0a</figcaption></figure>



<p class="wp-block-paragraph">Installing Microsoft C requires you to pick and choose both hosting, targeting environments, along with what the preferred libraries are.  In the business we call this foreshadowing as this can be such a giant PITA.  At least virtual machines are fast, plentiful, and cheap.  In addition I had been using <a href="http://takeda-toshiya.my.coocan.jp/msdos/index.html" target="_blank" rel="noreferrer noopener">MS-DOS player</a> to host the tools on Windows 11.  This of course proved weird later.</p>



<p class="wp-block-paragraph">The first step was getting it running on MS-DOS using Microsoft C 6.0a.  This was actually pretty easy, the hard part was working out the makefile, as some files don&#8217;t compile with optimisations.  And overall, the project doesn&#8217;t seem to work with /Ox at all.  I haven&#8217;t spent enough time mixing and matching settings to find what actually doesn&#8217;t work, but I&#8217;m in a hurry, and /Os seems to work just fine.</p>



<p class="wp-block-paragraph">In no time I had both the CGA &amp; VGA drivers up and running and verified working on my PS/2.  Great!</p>



<p class="wp-block-paragraph">Now comes the fun, getting it ready to run on Pharlap.</p>



<figure class="wp-block-image size-large"><a href="/wp-content/uploads/2024/01/pharlap-286-C-beyond-640k.jpg"><img loading="lazy" decoding="async" width="760" height="1024" src="/wp-content/uploads/2024/01/pharlap-286-C-beyond-640k-760x1024.jpg" alt="" class="wp-image-13824" srcset="https://virtuallyfun.com/wp-content/uploads/2024/01/pharlap-286-C-beyond-640k-760x1024.jpg 760w, https://virtuallyfun.com/wp-content/uploads/2024/01/pharlap-286-C-beyond-640k-223x300.jpg 223w, https://virtuallyfun.com/wp-content/uploads/2024/01/pharlap-286-C-beyond-640k-768x1035.jpg 768w, https://virtuallyfun.com/wp-content/uploads/2024/01/pharlap-286-C-beyond-640k-1140x1536.jpg 1140w, https://virtuallyfun.com/wp-content/uploads/2024/01/pharlap-286-C-beyond-640k.jpg 1187w" sizes="auto, (max-width: 760px) 100vw, 760px" /></a><figcaption class="wp-element-caption">The magic!</figcaption></figure>



<p class="wp-block-paragraph">Phar Lap&#8217;s 286|DOS-Extender is pure magic.  A DOS extender is a special program that can load a protected mode program into memory on a 286 or better computer and run it.  At it&#8217;s heart, it can proxy MS-DOS functionality from protected mode to real mode, allowing you to use a lot of methodology and code from traditional real mode code.  Phar Lap, goes beyond that by providing a pseudo OS/2 1.2 environment on MS-DOS, including advanced features like DLL&#8217;s, and being able to use ALL the RAM in your computer.  Of course on the 286 there is a massive caveat:</p>



<p class="wp-block-paragraph">The 286 has no built-in function for switching from protected mode to real mode.  This makes programs that rely a LOT on MS-DOS potentially very slow.  You can absolutely feel the difference between the real mode and the protected mode version of Sarien.</p>



<p class="wp-block-paragraph">Phar Lap does include a test program, swtest which can benchmark the switching methods, so let&#8217;s run it and get some scores.</p>



<pre class="wp-block-code"><code>Switch code version = 1.14
BIOS signature: BA66CC86
BIOS date: 02/13/87

Machine ID = 0, A20 method = PS2, Reset method = Standard
Starting test for Switch Mode 3 (SLOW) ... Test complete.
Avg switch time (usecs): To prot = 34, To real = 101, Total = 135
Min switch time (usecs): To prot = 32, To real = 98, Total = 130
Max switch time (usecs): To prot = 35, To real = 103, Total = 138

Machine ID = 0, A20 method = PS2, Reset method = Standard
Starting test for Switch Mode 2 (AT) ... Test complete.
Avg switch time (usecs): To prot = 34, To real = 86, Total = 120
Min switch time (usecs): To prot = 33, To real = 83, Total = 116
Max switch time (usecs): To prot = 36, To real = 88, Total = 124

Machine ID = 0, A20 method = PS2, Reset method = Standard
Starting test for Switch Mode 1 (SURE) ... Test complete.
Avg switch time (usecs): To prot = 34, To real = 70, Total = 104
Min switch time (usecs): To prot = 32, To real = 68, Total = 100
Max switch time (usecs): To prot = 35, To real = 72, Total = 107
</code></pre>



<p class="wp-block-paragraph">For those of you wondering what the timing is like on a 386, here is my 16Mhz PS/2 Model 80 board (now with fully 32bit memory)</p>



<pre class="wp-block-code"><code>Switch code version = 1.14
BIOS signature: 039D2DB4
BIOS date: 03/30/87

Machine ID = 0, A20 method = PS2, Reset method = Standard
Starting test for Switch Mode 5 (386) ... Test complete.
Avg switch time (usecs): To prot = 31, To real = 22, Total = 53
Min switch time (usecs): To prot = 30, To real = 20, Total = 50
Max switch time (usecs): To prot = 32, To real = 23, Total = 55</code></pre>



<p class="wp-block-paragraph">I&#8217;m honestly surprised the 286 switches from protected back to real so quickly!  Although as you can see from the 386 timings it&#8217;s significantly faster than the 286.</p>



<p class="wp-block-paragraph">Here is a quick video, real mode on the left, protected mode on the right.  Yes I need to get a VGA capture card. Sorry.</p>



<figure class="wp-block-video"><video controls src="/wp-content/uploads/2024/01/sar-20.mp4"></video><figcaption class="wp-element-caption">Real mode on the left, Protected on the right. Running on the 386</figcaption></figure>



<p class="wp-block-paragraph">Being a DOS extender it does have built in functions for things like hooking interrupts like this:</p>



<pre class="wp-block-code"><code>    /* install our new timer tick routine */
    DosSetPassToProtVec(IRQ0, (PIHANDLER)new_prot_timer_tick,
        &amp;old_prot_timer_tick, &amp;old_real_timer_tick);</code></pre>



<p class="wp-block-paragraph">Unlike some kind of OS/2 method which would involve creating a thread and or timers.</p>



<p class="wp-block-paragraph">Setting video modes via the video BIOS is also supported, using the built in int86 style calls:</p>



<pre class="wp-block-code"><code>    memset(&amp;r,0x0,sizeof(r));
    r.h.ah = 0;
    r.h.al = 3;
    int86(0x10, &amp;r, &amp;r);</code></pre>



<p class="wp-block-paragraph">Using pointers into things like video ram do require &#8216;asking for permission&#8217; but it&#8217;s not too involved:</p>



<pre class="wp-block-code"><code>    int rseg;
  /* Get PM pointer to text screen */
    DosMapRealSeg(0xb800,4000,&amp;rseg);
    textptr=MAKEP(rseg,0);</code></pre>



<p class="wp-block-paragraph">with the segment mapped, and a pointer to the segment, and now I can read/write directly into video RAM!</p>



<pre class="wp-block-code"><code>  /* save text screen */
    memcpy(textbuf,textptr,4000);</code></pre>



<p class="wp-block-paragraph">Just like that!</p>



<p class="wp-block-paragraph">I&#8217;m not sure what I screwed up on the VGA graphics, as it doesn&#8217;t work correctly, but oddly enough CGA does work.</p>



<p class="wp-block-paragraph">And now this is where everything goes off the rails.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="434" src="/wp-content/uploads/2024/01/sairen-running-on-emulation-1024x434.jpg" alt="" class="wp-image-13826" srcset="https://virtuallyfun.com/wp-content/uploads/2024/01/sairen-running-on-emulation-1024x434.jpg 1024w, https://virtuallyfun.com/wp-content/uploads/2024/01/sairen-running-on-emulation-300x127.jpg 300w, https://virtuallyfun.com/wp-content/uploads/2024/01/sairen-running-on-emulation-768x326.jpg 768w, https://virtuallyfun.com/wp-content/uploads/2024/01/sairen-running-on-emulation-500x212.jpg 500w, https://virtuallyfun.com/wp-content/uploads/2024/01/sairen-running-on-emulation.jpg 1125w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">Sairen running on Qemu &amp; DOSbox</figcaption></figure>



<p class="wp-block-paragraph">It ran fine on emulation.  So all excited I fired up the PS/2 and&#8230;.</p>



<figure class="wp-block-image size-large"><a href="/wp-content/uploads/2024/01/sarien-crash-on-ps2-scaled.jpg"><img loading="lazy" decoding="async" width="1024" height="768" src="/wp-content/uploads/2024/01/sarien-crash-on-ps2-1024x768.jpg" alt="" class="wp-image-13827" srcset="https://virtuallyfun.com/wp-content/uploads/2024/01/sarien-crash-on-ps2-1024x768.jpg 1024w, https://virtuallyfun.com/wp-content/uploads/2024/01/sarien-crash-on-ps2-300x225.jpg 300w, https://virtuallyfun.com/wp-content/uploads/2024/01/sarien-crash-on-ps2-768x576.jpg 768w, https://virtuallyfun.com/wp-content/uploads/2024/01/sarien-crash-on-ps2-1536x1152.jpg 1536w, https://virtuallyfun.com/wp-content/uploads/2024/01/sarien-crash-on-ps2-2048x1536.jpg 2048w, https://virtuallyfun.com/wp-content/uploads/2024/01/sarien-crash-on-ps2-400x300.jpg 400w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a><figcaption class="wp-element-caption">General protection fault</figcaption></figure>



<p class="wp-block-paragraph">This lead me to more fun in how on earth to debug this.  Of course Phar Lap 286 version 2.5 requires me to have Microsoft C/C++ 7.0.  I shamelessly <a href="https://www.pcjs.org/" target="_blank" rel="noreferrer noopener">downloaded a disk set from pcjs.org</a>.  You actually need to install it, to copy out the files required:</p>



<ul class="wp-block-list">
<li>28/05/1991 05:37 pm 47,216 CFIG286.EXE</li>



<li>26/11/1991 11:19 am 13,531 GORUN286.EXE</li>



<li>19/03/1992 04:00 am 42,720 shw0.dll</li>



<li>19/03/1992 04:00 am 105,039 eew0cxx.dll</li>



<li>19/03/1992 04:00 am 410,112 cvw4.exe</li>



<li>19/03/1992 04:00 am 91,118 eew0can.dll</li>



<li>19/03/1992 04:00 am 74,400 emw0w0.dll</li>



<li>03/08/1992 09:34 pm 2,649 INT33.DLL</li>



<li>03/08/1992 09:40 pm 2,718 MSG.DLL</li>



<li>03/08/1992 09:40 pm 1,702 NAMPIPES.DLL</li>



<li>03/08/1992 09:42 pm 2,073 NLS.DLL</li>



<li>03/08/1992 09:43 pm 5,184 PTRACE.DLL</li>



<li>03/08/1992 09:45 pm 2,320 SESMGR.DLL</li>



<li>03/08/1992 09:50 pm 1,508 WIN87EM.DLL</li>



<li>05/08/1992 12:04 am 3,100 KEYBOARD.DLL</li>



<li>05/08/1992 06:33 pm 270 TOOLHELP.DLL</li>



<li>14/08/1992 07:38 pm 7,891 KERNEL.DLL</li>



<li>14/08/1992 09:40 pm 14,545 USER.DLL</li>



<li>09/09/1992 10:59 pm 209,922 RUN286.EXE</li>



<li>09/09/1992 10:59 pm 229,046 RUN286D.EXE</li>



<li>14/09/1992 11:01 pm 14,024 TLW0LOC.DLL</li>



<li>17/09/1992 07:26 pm 34,152 CVP7.EXE</li>
</ul>



<p class="wp-block-paragraph">While CVP7 does come with Phar Lap, you have to run it via run286.  As you may have noticed there is a mixture of OS/2 and Windows DLL&#8217;s in here, as at this point CodeView was a Windows protected mode debugger.  The divorce was in full swing, and Microsoft C/C++ 7.0 had amputated the majority of OS/2 support.  I&#8217;m sure all this is in the manuals, <a href="https://virtuallyfun.com/2021/05/17/a-weird-ebay-interlude-on-the-way-to-extending-dos/" target="_blank" rel="noreferrer noopener">however all I have is disk images</a>.  There was no C 6.0a supported hosted debugger.  Maybe it&#8217;s in the v1/v2 of Phar Lap 286, but I only have 2.5.  There is version 3 files on the internet but I wanted to stick to 2.5.</p>



<figure class="wp-block-image size-large"><a href="/wp-content/uploads/2024/01/codeview-fail-scaled.jpg"><img loading="lazy" decoding="async" width="1024" height="768" src="/wp-content/uploads/2024/01/codeview-fail-1024x768.jpg" alt="" class="wp-image-13829" srcset="https://virtuallyfun.com/wp-content/uploads/2024/01/codeview-fail-1024x768.jpg 1024w, https://virtuallyfun.com/wp-content/uploads/2024/01/codeview-fail-300x225.jpg 300w, https://virtuallyfun.com/wp-content/uploads/2024/01/codeview-fail-768x576.jpg 768w, https://virtuallyfun.com/wp-content/uploads/2024/01/codeview-fail-1536x1152.jpg 1536w, https://virtuallyfun.com/wp-content/uploads/2024/01/codeview-fail-2048x1536.jpg 2048w, https://virtuallyfun.com/wp-content/uploads/2024/01/codeview-fail-400x300.jpg 400w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a><figcaption class="wp-element-caption">Exception #13</figcaption></figure>



<p class="wp-block-paragraph">And this is all I got.  Yes, I did recompile with &#8216;/Od /Zi&#8217; along with using cvpack on the executable.  Yes, after copying the source to the PS/2 I was able to see the source line mapping, but it immediately jumps to assembly and GP Faults.  All this is fine, but IT RUNS UNDER EMULATION.</p>



<p class="wp-block-paragraph">What is going on?!</p>



<p class="wp-block-paragraph">I asked around on discord, and found someone willing to test on their 286.  It also crashed.  I tried VMware and .. it crashed too!  So did 86box!  Ok now we&#8217;re going somewhere!</p>



<p class="wp-block-paragraph">Since I had been using MS-DOS player to run the tools, I had an issue with the linker in C 6.0a crashing, so I tried the one from C/C++ 7.  It also didn&#8217;t work. I tried the one from Visual C++ 1.5.  It also failed.  Almost giving up on the entire thing, since I had copied the source code to the PS/2, I tried something really silly, I compiled it using the /qc or QuickC flag.  I wasn&#8217;t too worried about sizes as again I&#8217;m going to run in protected mode.  It took some 20-30 minutes to compile, as 10Mhz machines are not the best for building software in this modern age.  Much to my surprise it actually ran.</p>



<figure class="wp-block-image size-large"><a href="/wp-content/uploads/2024/01/sairen-286-running-on-ps2-scaled.jpg" target="_blank" rel="noreferrer noopener"><img loading="lazy" decoding="async" width="768" height="1024" src="/wp-content/uploads/2024/01/sairen-286-running-on-ps2-768x1024.jpg" alt="" class="wp-image-13831" srcset="https://virtuallyfun.com/wp-content/uploads/2024/01/sairen-286-running-on-ps2-768x1024.jpg 768w, https://virtuallyfun.com/wp-content/uploads/2024/01/sairen-286-running-on-ps2-225x300.jpg 225w, https://virtuallyfun.com/wp-content/uploads/2024/01/sairen-286-running-on-ps2-1152x1536.jpg 1152w, https://virtuallyfun.com/wp-content/uploads/2024/01/sairen-286-running-on-ps2-1536x2048.jpg 1536w, https://virtuallyfun.com/wp-content/uploads/2024/01/sairen-286-running-on-ps2-scaled.jpg 1920w" sizes="auto, (max-width: 768px) 100vw, 768px" /></a><figcaption class="wp-element-caption">First run!</figcaption></figure>



<p class="wp-block-paragraph">This was kind of shocking as I&#8217;m not sure what I screwed up to not get this to work, but it worked!  I went ahead and changed the build to not use QuickC, but rebuild with /Os (Optimize for space).  It took about an hour.  And it too worked. </p>



<figure class="wp-block-image size-full"><a href="/wp-content/uploads/2024/01/sairen-286-running-on-vmware-os2.png"><img loading="lazy" decoding="async" width="633" height="482" src="/wp-content/uploads/2024/01/sairen-286-running-on-vmware-os2.png" alt="" class="wp-image-13833" srcset="https://virtuallyfun.com/wp-content/uploads/2024/01/sairen-286-running-on-vmware-os2.png 633w, https://virtuallyfun.com/wp-content/uploads/2024/01/sairen-286-running-on-vmware-os2-300x228.png 300w, https://virtuallyfun.com/wp-content/uploads/2024/01/sairen-286-running-on-vmware-os2-394x300.png 394w" sizes="auto, (max-width: 633px) 100vw, 633px" /></a><figcaption class="wp-element-caption">Phar Lap 286 running on OS/2 2.00 on VMware</figcaption></figure>



<p class="wp-block-paragraph">Shockingly it runs!  I&#8217;m not sure what on earth is up with the linking.  I did find it easier to just rebuild on Qemu since it can easily map into my source directory and copy everything over and re-build very quickly.</p>



<p class="wp-block-paragraph">Later I did try copying over compiled objects built using the MS-DOS Player, and linked them natively, and they ran fine.</p>



<p class="wp-block-paragraph">What is it with the LINK?!</p>



<figure class="wp-block-image size-full"><a href="/wp-content/uploads/2024/01/86box-with-sairen-staker.png"><img loading="lazy" decoding="async" width="802" height="252" src="/wp-content/uploads/2024/01/86box-with-sairen-staker.png" alt="" class="wp-image-13835" srcset="https://virtuallyfun.com/wp-content/uploads/2024/01/86box-with-sairen-staker.png 802w, https://virtuallyfun.com/wp-content/uploads/2024/01/86box-with-sairen-staker-300x94.png 300w, https://virtuallyfun.com/wp-content/uploads/2024/01/86box-with-sairen-staker-768x241.png 768w, https://virtuallyfun.com/wp-content/uploads/2024/01/86box-with-sairen-staker-500x157.png 500w" sizes="auto, (max-width: 802px) 100vw, 802px" /></a><figcaption class="wp-element-caption">It all fits!  Stacker rules!</figcaption></figure>



<p class="wp-block-paragraph">One weird thing on 86box is my pre-built machine I was using has a 5 1/4&#8243; 1.2Mb floppy for the A: drive.  It&#8217;s too small to fit MS-DOS, the game data and Phar Lap 286 all on there.  Although Stacker to the rescue and it fits!</p>



<figure class="wp-block-image size-full"><a href="/wp-content/uploads/2024/01/loading-a-game.png"><img loading="lazy" decoding="async" width="631" height="405" src="/wp-content/uploads/2024/01/loading-a-game.png" alt="" class="wp-image-13834" srcset="https://virtuallyfun.com/wp-content/uploads/2024/01/loading-a-game.png 631w, https://virtuallyfun.com/wp-content/uploads/2024/01/loading-a-game-300x193.png 300w, https://virtuallyfun.com/wp-content/uploads/2024/01/loading-a-game-467x300.png 467w" sizes="auto, (max-width: 631px) 100vw, 631px" /></a><figcaption class="wp-element-caption">It can save and even load those saves!</figcaption></figure>



<p class="wp-block-paragraph">I removed a lot of Unix quality of life, to make it more MS-DOS dumping everything in the same directory so you can save &amp; load games. </p>



<p class="wp-block-paragraph">Assuming anyone is interested in this at all, I have <a href="https://github.com/neozeed/sarien286" target="_blank" rel="noreferrer noopener">the source up on github</a>.  I&#8217;ll follow up with some performance videos showing how much slower real vs protected mode is, along with some binaries/demos.  A <a href="https://cdn.discordapp.com/attachments/712491207917568053/1201354868770754691/dos6-122.img?ex=65c983e8&amp;is=65b70ee8&amp;hm=b5c3b86dfcf091a69b6861d5c850a9099b545e969b799cf839327ab7215c4069&amp;">5 1/4&#8243; floppy disk image can be downloaded here for any suitable emulator</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://virtuallyfun.com/2024/01/29/phar-laps-286-dos-extender-why-nobody-used-it-for-games/feed/</wfw:commentRss>
			<slash:comments>16</slash:comments>
		
		
			</item>
		<item>
		<title>Zork for the PDP-11 / RT-11 recreated</title>
		<link>https://virtuallyfun.com/2023/11/21/zork-for-the-pdp-11-rt-11-recreated/</link>
					<comments>https://virtuallyfun.com/2023/11/21/zork-for-the-pdp-11-rt-11-recreated/#comments</comments>
		
		<dc:creator><![CDATA[neozeed]]></dc:creator>
		<pubDate>Tue, 21 Nov 2023 22:34:29 +0000</pubDate>
				<category><![CDATA[games]]></category>
		<category><![CDATA[Infocom]]></category>
		<category><![CDATA[pdp11]]></category>
		<category><![CDATA[source code]]></category>
		<guid isPermaLink="false">https://virtuallyfun.com/?p=13492</guid>

					<description><![CDATA[I know this is a weird one, but I&#8217;ve always wanted to run Infocom games from ever since I found out it was a thing. I know you maybe thinking of the FORTRAN port of the full Zork game, which &#8230; <a href="https://virtuallyfun.com/2023/11/21/zork-for-the-pdp-11-rt-11-recreated/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">I know this is a weird one, but I&#8217;ve always wanted to run Infocom games from ever since I found out it was a thing.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><a href="https://virtuallyfun.com/wp-content/uploads/2023/11/Zork_I_for_the_PDP-11.jpg"><img loading="lazy" decoding="async" width="475" height="716" src="https://virtuallyfun.com/wp-content/uploads/2023/11/Zork_I_for_the_PDP-11.jpg" alt="" class="wp-image-13493" srcset="https://virtuallyfun.com/wp-content/uploads/2023/11/Zork_I_for_the_PDP-11.jpg 475w, https://virtuallyfun.com/wp-content/uploads/2023/11/Zork_I_for_the_PDP-11-199x300.jpg 199w" sizes="auto, (max-width: 475px) 100vw, 475px" /></a><figcaption class="wp-element-caption">The cover of the RT-11 Zork that sold on ebay for $2,348.31</figcaption></figure>
</div>


<p class="wp-block-paragraph">I know you maybe thinking of the FORTRAN port of the full Zork game, which does run on the same system.  But this is NOT the FORTRAN reverse engineered game, rather it&#8217;s a port of the Z-Machine to the RT-11 / PDP-11.</p>



<p class="wp-block-paragraph">Also this is NOT a 3rd party reverse engineering effort, it is the official Infocom Z-Machine source.</p>



<pre class="wp-block-code"><code>;       Proprietary documentation of:
;
;               Infocom, Inc.
;               55 Wheeler St.
;               Cambridge, MA 02138
;
;       Copyright (C) 1982, 1983 Infocom, Inc.  All rights reserved.</code></pre>



<p class="wp-block-paragraph">Yes it&#8217;s the real deal!</p>



<p class="wp-block-paragraph">Ok so what or where to do this?!  First you need SIMH or any other good PDP-11 emulator, a copy of <a href="http://simh.trailing-edge.com/kits/rt11swre.tar.Z">RT-11</a>, and of course the source to the interpreter oddly enough named <a href="https://github.com/erkyrath/infocom-zcode-terps/blob/master/pdp11.zip">PDP11.ZIP</a>.  Just keep in mind that this is NOT a pk-zip file, it&#8217;s a text file.  It&#8217;s Macro-11 assembler source.</p>



<p class="wp-block-paragraph">First you need a very simple config/type in to the SIMH PDP-11 emulator:</p>



<pre class="wp-block-code"><code>attach rk0 rtv4_rk.dsk
attach ptr pdp11.zip
boot rk</code></pre>



<p class="wp-block-paragraph">All being well you should boot into RT-11.</p>



<p class="wp-block-paragraph">Now we copy the source into the machine through the paper tape reader.  Just type in &#8216;COPY PC: ZIP.MAC&#8217;</p>



<pre class="wp-block-code"><code>.COPY PC: ZIP.MAC
 Files copied:
PC:            to DK:ZIP.MAC

.</code></pre>



<p class="wp-block-paragraph">This will create a .mac or macro assembler source file.  The extension matters as it will tell the compiler what file it is and what to do.  But luckily this is a single file, and assembles quite easily.  As a tip to Unix folk, I found that making the assembly source in MS-DOS CR/LF made life easier.</p>



<p class="wp-block-paragraph">Compiling &amp; linking is very straightforward</p>



<pre class="wp-block-code"><code>.COMPILE ZIP.MAC
ERRORS DETECTED:  0

.LINK ZIP.OBJ

. </code></pre>



<p class="wp-block-paragraph">Now we need to import a game file.  I usually test with Planetfall, so I grabbed the data file, and placed it into the working directory and then attached it to the emulator</p>



<pre class="wp-block-code"><code>Simulation stopped, PC: 152644 (BR 152622)
sim> att ptr planetfa
sim> c


.COPY PC: PLANET.IML
 Files copied:
PC:            to DK:PLANET.IML

.</code></pre>



<p class="wp-block-paragraph">Notice the filenames are short, very 8.3 for some strange coincidence!  Also I named it planet.iml, as that is what the interpreter is expecting.  Now we can just run the zip and point it to the game data file!</p>



<pre class="wp-block-code"><code>.RUN ZIP
Line width (default is 80, end with LF for status line):
File name (current default is DK:$GAME$.IML) *dk:planet.iml
PLANETFALL
Infocom interactive fiction - a science fiction story
Copyright (c) 1983 by Infocom, Inc. All rights reserved.
PLANETFALL is a trademark of Infocom, Inc.
Release 37 / Serial number 851003</code></pre>



<figure class="wp-block-image size-large"><a href="https://virtuallyfun.com/wp-content/uploads/2023/11/Planetfall-on-SIMH-via-Infocom-ZIP-for-RT-11.png"><img loading="lazy" decoding="async" width="1024" height="547" src="https://virtuallyfun.com/wp-content/uploads/2023/11/Planetfall-on-SIMH-via-Infocom-ZIP-for-RT-11-1024x547.png" alt="" class="wp-image-13494" srcset="https://virtuallyfun.com/wp-content/uploads/2023/11/Planetfall-on-SIMH-via-Infocom-ZIP-for-RT-11-1024x547.png 1024w, https://virtuallyfun.com/wp-content/uploads/2023/11/Planetfall-on-SIMH-via-Infocom-ZIP-for-RT-11-300x160.png 300w, https://virtuallyfun.com/wp-content/uploads/2023/11/Planetfall-on-SIMH-via-Infocom-ZIP-for-RT-11-768x410.png 768w, https://virtuallyfun.com/wp-content/uploads/2023/11/Planetfall-on-SIMH-via-Infocom-ZIP-for-RT-11-500x267.png 500w, https://virtuallyfun.com/wp-content/uploads/2023/11/Planetfall-on-SIMH-via-Infocom-ZIP-for-RT-11.png 1483w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></figure>



<p class="wp-block-paragraph">And there we go!  We are now running Planetfall on our simulated PDP-11!</p>



<p class="wp-block-paragraph">There is quite a few great <a href="https://github.com/erkyrath/infocom-zcode-terps/tree/master">80&#8217;s systems in the github repository</a>, I have no doubt the rest can be built, but I thought I&#8217;d tackle a system that was another bigfoot, a thing of pure legend!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://virtuallyfun.com/2023/11/21/zork-for-the-pdp-11-rt-11-recreated/feed/</wfw:commentRss>
			<slash:comments>5</slash:comments>
		
		
			</item>
		<item>
		<title>Knights of the Old Republic PowerPC</title>
		<link>https://virtuallyfun.com/2023/10/22/knights-of-the-old-republic-powerpc/</link>
					<comments>https://virtuallyfun.com/2023/10/22/knights-of-the-old-republic-powerpc/#respond</comments>
		
		<dc:creator><![CDATA[neozeed]]></dc:creator>
		<pubDate>Sun, 22 Oct 2023 16:47:31 +0000</pubDate>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[games]]></category>
		<category><![CDATA[OS X]]></category>
		<category><![CDATA[powerpc]]></category>
		<guid isPermaLink="false">https://virtuallyfun.com/?p=13362</guid>

					<description><![CDATA[I just scored a G5 iMac for £20 with a damaged panel. It doesn’t bother me at all as I’m not going to use it for anything serious, I’m just wanting something mainstream. I did want one thing which was &#8230; <a href="https://virtuallyfun.com/2023/10/22/knights-of-the-old-republic-powerpc/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">I just scored a G5 iMac for £20 with a damaged panel.  It doesn’t bother me at all as I’m not going to use it for anything serious, I’m just wanting something mainstream.</p>



<p class="wp-block-paragraph">I did want one thing which was KOTOR.</p>



<p class="wp-block-paragraph">So I looked up eBay, and yeah turns out it’s a collectors thing?</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><a href="https://virtuallyfun.com/wp-content/uploads/2023/10/IMG_8739.jpeg"><img loading="lazy" decoding="async" width="1024" height="487" src="https://virtuallyfun.com/wp-content/uploads/2023/10/IMG_8739-1024x487.jpeg" alt="" class="wp-image-13364" srcset="https://virtuallyfun.com/wp-content/uploads/2023/10/IMG_8739-1024x487.jpeg 1024w, https://virtuallyfun.com/wp-content/uploads/2023/10/IMG_8739-300x143.jpeg 300w, https://virtuallyfun.com/wp-content/uploads/2023/10/IMG_8739-768x365.jpeg 768w, https://virtuallyfun.com/wp-content/uploads/2023/10/IMG_8739-500x238.jpeg 500w, https://virtuallyfun.com/wp-content/uploads/2023/10/IMG_8739.jpeg 1125w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></figure>
</div>


<p class="wp-block-paragraph">£147!!  No way!</p>



<p class="wp-block-paragraph">I saw this for far less, the Star Wars Mac Pack!  </p>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><a href="https://virtuallyfun.com/wp-content/uploads/2023/10/IMG_8720-scaled.jpeg"><img loading="lazy" decoding="async" width="807" height="1024" src="https://virtuallyfun.com/wp-content/uploads/2023/10/IMG_8720-807x1024.jpeg" alt="" class="wp-image-13363" style="aspect-ratio:0.7880859375;width:359px;height:auto" srcset="https://virtuallyfun.com/wp-content/uploads/2023/10/IMG_8720-807x1024.jpeg 807w, https://virtuallyfun.com/wp-content/uploads/2023/10/IMG_8720-236x300.jpeg 236w, https://virtuallyfun.com/wp-content/uploads/2023/10/IMG_8720-768x975.jpeg 768w, https://virtuallyfun.com/wp-content/uploads/2023/10/IMG_8720-1210x1536.jpeg 1210w, https://virtuallyfun.com/wp-content/uploads/2023/10/IMG_8720-1613x2048.jpeg 1613w, https://virtuallyfun.com/wp-content/uploads/2023/10/IMG_8720-scaled.jpeg 2017w" sizes="auto, (max-width: 807px) 100vw, 807px" /></a></figure>
</div>


<p class="wp-block-paragraph">vBut at the flip side had this ominous warning….</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><a href="https://virtuallyfun.com/wp-content/uploads/2023/10/IMG_8721-scaled.jpeg"><img loading="lazy" decoding="async" width="1024" height="820" src="https://virtuallyfun.com/wp-content/uploads/2023/10/IMG_8721-1024x820.jpeg" alt="" class="wp-image-13365" srcset="https://virtuallyfun.com/wp-content/uploads/2023/10/IMG_8721-1024x820.jpeg 1024w, https://virtuallyfun.com/wp-content/uploads/2023/10/IMG_8721-300x240.jpeg 300w, https://virtuallyfun.com/wp-content/uploads/2023/10/IMG_8721-768x615.jpeg 768w, https://virtuallyfun.com/wp-content/uploads/2023/10/IMG_8721-1536x1230.jpeg 1536w, https://virtuallyfun.com/wp-content/uploads/2023/10/IMG_8721-2048x1639.jpeg 2048w, https://virtuallyfun.com/wp-content/uploads/2023/10/IMG_8721-375x300.jpeg 375w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a><figcaption class="wp-element-caption">Intel only</figcaption></figure>
</div>


<p class="wp-block-paragraph">I thought I’d just try the disc anyway..  nothing to lose?</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><a href="https://virtuallyfun.com/wp-content/uploads/2023/10/IMG_8719-scaled.jpeg"><img loading="lazy" decoding="async" width="1024" height="768" src="https://virtuallyfun.com/wp-content/uploads/2023/10/IMG_8719-1024x768.jpeg" alt="" class="wp-image-13366" srcset="https://virtuallyfun.com/wp-content/uploads/2023/10/IMG_8719-1024x768.jpeg 1024w, https://virtuallyfun.com/wp-content/uploads/2023/10/IMG_8719-300x225.jpeg 300w, https://virtuallyfun.com/wp-content/uploads/2023/10/IMG_8719-768x576.jpeg 768w, https://virtuallyfun.com/wp-content/uploads/2023/10/IMG_8719-1536x1152.jpeg 1536w, https://virtuallyfun.com/wp-content/uploads/2023/10/IMG_8719-2048x1536.jpeg 2048w, https://virtuallyfun.com/wp-content/uploads/2023/10/IMG_8719-400x300.jpeg 400w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a><figcaption class="wp-element-caption">Universal!?</figcaption></figure>
</div>


<p class="wp-block-paragraph">and yeah, not only is KOTOR is PPC, but yes it does run on OS X 10.4!</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="815" src="https://virtuallyfun.com/wp-content/uploads/2023/10/IMG_8722-1024x815.jpeg" alt="" class="wp-image-13367" srcset="https://virtuallyfun.com/wp-content/uploads/2023/10/IMG_8722-1024x815.jpeg 1024w, https://virtuallyfun.com/wp-content/uploads/2023/10/IMG_8722-300x239.jpeg 300w, https://virtuallyfun.com/wp-content/uploads/2023/10/IMG_8722-768x612.jpeg 768w, https://virtuallyfun.com/wp-content/uploads/2023/10/IMG_8722-1536x1223.jpeg 1536w, https://virtuallyfun.com/wp-content/uploads/2023/10/IMG_8722-2048x1631.jpeg 2048w, https://virtuallyfun.com/wp-content/uploads/2023/10/IMG_8722-377x300.jpeg 377w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">PPP KOTOR</figcaption></figure>



<p class="wp-block-paragraph">granted it’s on <a href="https://store.steampowered.com/app/32370/STAR_WARS_Knights_of_the_Old_Republic/">steam</a>, <a href="https://www.gog.com/game/star_wars_knights_of_the_old_republic">gog</a> and of course available for pretty much anything modern.  And sure yeah, it was originally PC/Xbox, but for some odd reason I&#8217;m feeling nostalgic for that last gen PPC.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://virtuallyfun.com/2023/10/22/knights-of-the-old-republic-powerpc/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Stadia controllers can be re-flashed to generic PC controllers</title>
		<link>https://virtuallyfun.com/2023/10/12/stadia-controllers-can-be-re-flashed-to-generic-pc-controllers/</link>
					<comments>https://virtuallyfun.com/2023/10/12/stadia-controllers-can-be-re-flashed-to-generic-pc-controllers/#comments</comments>
		
		<dc:creator><![CDATA[neozeed]]></dc:creator>
		<pubDate>Thu, 12 Oct 2023 11:48:20 +0000</pubDate>
				<category><![CDATA[games]]></category>
		<category><![CDATA[Google]]></category>
		<guid isPermaLink="false">https://virtuallyfun.com/?p=13324</guid>

					<description><![CDATA[So I saw this controller for sale for 20. I figured that there ought to be a way to hack it to do something useful so it may be fun. Turns out all it needs is a re-flash of new &#8230; <a href="https://virtuallyfun.com/2023/10/12/stadia-controllers-can-be-re-flashed-to-generic-pc-controllers/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-large"><a href="https://virtuallyfun.com/wp-content/uploads/2023/10/stadia-controller-scaled.jpg"><img loading="lazy" decoding="async" width="1024" height="729" src="https://virtuallyfun.com/wp-content/uploads/2023/10/stadia-controller-1024x729.jpg" alt="" class="wp-image-13325" srcset="https://virtuallyfun.com/wp-content/uploads/2023/10/stadia-controller-1024x729.jpg 1024w, https://virtuallyfun.com/wp-content/uploads/2023/10/stadia-controller-300x214.jpg 300w, https://virtuallyfun.com/wp-content/uploads/2023/10/stadia-controller-768x547.jpg 768w, https://virtuallyfun.com/wp-content/uploads/2023/10/stadia-controller-1536x1094.jpg 1536w, https://virtuallyfun.com/wp-content/uploads/2023/10/stadia-controller-2048x1458.jpg 2048w, https://virtuallyfun.com/wp-content/uploads/2023/10/stadia-controller-421x300.jpg 421w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a><figcaption class="wp-element-caption">Stadia controller</figcaption></figure>



<p class="wp-block-paragraph">So I saw this controller for sale for 20.  I figured that there ought to be a way to hack it to do something useful so it may be fun.  Turns out all it needs is a re-flash of new firmware and it&#8217;ll become a generic controller.</p>



<p class="wp-block-paragraph">All you need to do is peer it to your computer, go to <a href="https://stadia.google.com/controller" target="_blank" rel="noreferrer noopener">https://stadia.google.com/controller</a> and follow the prompts.   </p>



<figure class="wp-block-image size-full"><a href="https://virtuallyfun.com/wp-content/uploads/2023/10/stadia-switch-to-bluetooth.png"><img loading="lazy" decoding="async" width="982" height="506" src="https://virtuallyfun.com/wp-content/uploads/2023/10/stadia-switch-to-bluetooth.png" alt="" class="wp-image-13330" srcset="https://virtuallyfun.com/wp-content/uploads/2023/10/stadia-switch-to-bluetooth.png 982w, https://virtuallyfun.com/wp-content/uploads/2023/10/stadia-switch-to-bluetooth-300x155.png 300w, https://virtuallyfun.com/wp-content/uploads/2023/10/stadia-switch-to-bluetooth-768x396.png 768w, https://virtuallyfun.com/wp-content/uploads/2023/10/stadia-switch-to-bluetooth-500x258.png 500w" sizes="auto, (max-width: 982px) 100vw, 982px" /></a></figure>



<figure class="wp-block-image size-full"><a href="https://virtuallyfun.com/wp-content/uploads/2023/10/stadia-controller-discovery.jpg"><img loading="lazy" decoding="async" width="1008" height="609" src="https://virtuallyfun.com/wp-content/uploads/2023/10/stadia-controller-discovery.jpg" alt="" class="wp-image-13326" srcset="https://virtuallyfun.com/wp-content/uploads/2023/10/stadia-controller-discovery.jpg 1008w, https://virtuallyfun.com/wp-content/uploads/2023/10/stadia-controller-discovery-300x181.jpg 300w, https://virtuallyfun.com/wp-content/uploads/2023/10/stadia-controller-discovery-768x464.jpg 768w, https://virtuallyfun.com/wp-content/uploads/2023/10/stadia-controller-discovery-497x300.jpg 497w" sizes="auto, (max-width: 1008px) 100vw, 1008px" /></a></figure>



<p class="wp-block-paragraph">You might be slightly scared that the browser can talk directly to bluetooth devices, including the unlock, and re-programming the controller.</p>



<figure class="wp-block-image size-large"><a href="https://virtuallyfun.com/wp-content/uploads/2023/10/stadia-controller-setup.png"><img loading="lazy" decoding="async" width="1024" height="771" src="https://virtuallyfun.com/wp-content/uploads/2023/10/stadia-controller-setup-1024x771.png" alt="" class="wp-image-13328" srcset="https://virtuallyfun.com/wp-content/uploads/2023/10/stadia-controller-setup-1024x771.png 1024w, https://virtuallyfun.com/wp-content/uploads/2023/10/stadia-controller-setup-300x226.png 300w, https://virtuallyfun.com/wp-content/uploads/2023/10/stadia-controller-setup-768x578.png 768w, https://virtuallyfun.com/wp-content/uploads/2023/10/stadia-controller-setup-399x300.png 399w, https://virtuallyfun.com/wp-content/uploads/2023/10/stadia-controller-setup.png 1083w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></figure>



<p class="wp-block-paragraph">And yeah after that it&#8217;s all unlocked and good to go!</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="875" height="162" src="https://virtuallyfun.com/wp-content/uploads/2023/10/stadia-controller-connected.png" alt="" class="wp-image-13329" srcset="https://virtuallyfun.com/wp-content/uploads/2023/10/stadia-controller-connected.png 875w, https://virtuallyfun.com/wp-content/uploads/2023/10/stadia-controller-connected-300x56.png 300w, https://virtuallyfun.com/wp-content/uploads/2023/10/stadia-controller-connected-768x142.png 768w, https://virtuallyfun.com/wp-content/uploads/2023/10/stadia-controller-connected-500x93.png 500w" sizes="auto, (max-width: 875px) 100vw, 875px" /></figure>



<p class="wp-block-paragraph">Not sure if it matters all that much, but for anyone wanting either a controller on the cheap, or if you bought into Stadia when it was a thing (did anyone remember other than the announcement and the expected cancellation?).</p>



<p class="wp-block-paragraph">I guess it&#8217;s nice that google is providing an unlock service but I&#8217;m sure that won&#8217;t be around forever, so yeah. yay.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://virtuallyfun.com/2023/10/12/stadia-controllers-can-be-re-flashed-to-generic-pc-controllers/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
		<item>
		<title>Today is Starfield day!</title>
		<link>https://virtuallyfun.com/2023/09/01/today-is-starfield-day/</link>
					<comments>https://virtuallyfun.com/2023/09/01/today-is-starfield-day/#comments</comments>
		
		<dc:creator><![CDATA[neozeed]]></dc:creator>
		<pubDate>Fri, 01 Sep 2023 10:36:40 +0000</pubDate>
				<category><![CDATA[games]]></category>
		<category><![CDATA[Windows 10]]></category>
		<guid isPermaLink="false">https://virtuallyfun.com/?p=13159</guid>

					<description><![CDATA[And there is a map of all the locales and when the launch. I was busy working and didn&#8217;t notice that Hong Kong had already launched. Thankfully I did get a payment voucher which fully covered the super fancy edition. &#8230; <a href="https://virtuallyfun.com/2023/09/01/today-is-starfield-day/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-large"><a href="https://store.steampowered.com/news/app/1716740/view/3687939575936460662"><img loading="lazy" decoding="async" width="1024" height="684" src="https://virtuallyfun.com/wp-content/uploads/2023/09/starfield-launches-september-6th-1024x684.png" alt="" class="wp-image-13169" srcset="https://virtuallyfun.com/wp-content/uploads/2023/09/starfield-launches-september-6th-1024x684.png 1024w, https://virtuallyfun.com/wp-content/uploads/2023/09/starfield-launches-september-6th-300x200.png 300w, https://virtuallyfun.com/wp-content/uploads/2023/09/starfield-launches-september-6th-768x513.png 768w, https://virtuallyfun.com/wp-content/uploads/2023/09/starfield-launches-september-6th-449x300.png 449w, https://virtuallyfun.com/wp-content/uploads/2023/09/starfield-launches-september-6th.png 1077w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></figure>



<p class="wp-block-paragraph">And there is a map of all the locales and when the launch.  I was busy working and didn&#8217;t notice that Hong Kong had already launched.</p>



<figure class="wp-block-image size-large"><a href="https://virtuallyfun.com/wp-content/uploads/2023/09/Starfield-Global-Release-Times-4K-scaled.jpg"><img loading="lazy" decoding="async" width="1024" height="576" src="https://virtuallyfun.com/wp-content/uploads/2023/09/Starfield-Global-Release-Times-4K-1024x576.jpg" alt="" class="wp-image-13160" srcset="https://virtuallyfun.com/wp-content/uploads/2023/09/Starfield-Global-Release-Times-4K-1024x576.jpg 1024w, https://virtuallyfun.com/wp-content/uploads/2023/09/Starfield-Global-Release-Times-4K-300x169.jpg 300w, https://virtuallyfun.com/wp-content/uploads/2023/09/Starfield-Global-Release-Times-4K-768x432.jpg 768w, https://virtuallyfun.com/wp-content/uploads/2023/09/Starfield-Global-Release-Times-4K-1536x864.jpg 1536w, https://virtuallyfun.com/wp-content/uploads/2023/09/Starfield-Global-Release-Times-4K-2048x1152.jpg 2048w, https://virtuallyfun.com/wp-content/uploads/2023/09/Starfield-Global-Release-Times-4K-500x281.jpg 500w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a><figcaption class="wp-element-caption">many geo zones!</figcaption></figure>



<p class="wp-block-paragraph">Thankfully I did get a payment voucher which fully covered the super fancy edition.  Sadly there was no option for GPU&#8217;s so I&#8217;m going to try this with an OG 6GB GTX Titan.</p>



<figure class="wp-block-image size-full"><a href="https://virtuallyfun.com/wp-content/uploads/2023/09/starfield-bought-the-premium-edition.png"><img loading="lazy" decoding="async" width="621" height="215" src="https://virtuallyfun.com/wp-content/uploads/2023/09/starfield-bought-the-premium-edition.png" alt="" class="wp-image-13161" srcset="https://virtuallyfun.com/wp-content/uploads/2023/09/starfield-bought-the-premium-edition.png 621w, https://virtuallyfun.com/wp-content/uploads/2023/09/starfield-bought-the-premium-edition-300x104.png 300w, https://virtuallyfun.com/wp-content/uploads/2023/09/starfield-bought-the-premium-edition-500x173.png 500w" sizes="auto, (max-width: 621px) 100vw, 621px" /></a></figure>



<p class="wp-block-paragraph">It was a bit weird to figure out if I could run the game or not but I did get a pop up that today was the day so I guess so.</p>



<figure class="wp-block-image size-large"><a href="https://virtuallyfun.com/wp-content/uploads/2023/09/starfield-verifying-0pct.png"><img loading="lazy" decoding="async" width="1024" height="187" src="https://virtuallyfun.com/wp-content/uploads/2023/09/starfield-verifying-0pct-1024x187.png" alt="" class="wp-image-13177" srcset="https://virtuallyfun.com/wp-content/uploads/2023/09/starfield-verifying-0pct-1024x187.png 1024w, https://virtuallyfun.com/wp-content/uploads/2023/09/starfield-verifying-0pct-300x55.png 300w, https://virtuallyfun.com/wp-content/uploads/2023/09/starfield-verifying-0pct-768x140.png 768w, https://virtuallyfun.com/wp-content/uploads/2023/09/starfield-verifying-0pct-500x91.png 500w, https://virtuallyfun.com/wp-content/uploads/2023/09/starfield-verifying-0pct.png 1439w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a><figcaption class="wp-element-caption">0% verified</figcaption></figure>



<p class="wp-block-paragraph">I&#8217;ll have no choice but to update as it goes, so nothing yet to report.</p>



<p class="wp-block-paragraph">I&#8217;m just hoping it&#8217;s not the hollow world experience of Fallout 76.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="380" height="152" src="https://virtuallyfun.com/wp-content/uploads/2023/09/starfield-doesnt-like-my-titan-6gb.png" alt="" class="wp-image-13179" srcset="https://virtuallyfun.com/wp-content/uploads/2023/09/starfield-doesnt-like-my-titan-6gb.png 380w, https://virtuallyfun.com/wp-content/uploads/2023/09/starfield-doesnt-like-my-titan-6gb-300x120.png 300w" sizes="auto, (max-width: 380px) 100vw, 380px" /></figure>
</div>


<p class="wp-block-paragraph">After all that downloading, turns out it doesn&#8217;t like my video card at all.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="674" height="241" src="https://virtuallyfun.com/wp-content/uploads/2023/09/1070ti-minimum.png" alt="" class="wp-image-13181" srcset="https://virtuallyfun.com/wp-content/uploads/2023/09/1070ti-minimum.png 674w, https://virtuallyfun.com/wp-content/uploads/2023/09/1070ti-minimum-300x107.png 300w, https://virtuallyfun.com/wp-content/uploads/2023/09/1070ti-minimum-500x179.png 500w" sizes="auto, (max-width: 674px) 100vw, 674px" /></figure>



<p class="wp-block-paragraph">So yeah GTX 1070ti minimum. wow.</p>



<p class="wp-block-paragraph">So I abused a work machine that ironically has a decent mobile GPU.  swapped some storage and booted into the game, played a few hours..  And yeah</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><a href="https://virtuallyfun.com/wp-content/uploads/2023/09/starfield-bethesda-quality.jpg"><img loading="lazy" decoding="async" width="1025" height="574" src="https://virtuallyfun.com/wp-content/uploads/2023/09/starfield-bethesda-quality.jpg" alt="" class="wp-image-13183" srcset="https://virtuallyfun.com/wp-content/uploads/2023/09/starfield-bethesda-quality.jpg 1025w, https://virtuallyfun.com/wp-content/uploads/2023/09/starfield-bethesda-quality-300x168.jpg 300w, https://virtuallyfun.com/wp-content/uploads/2023/09/starfield-bethesda-quality-768x430.jpg 768w, https://virtuallyfun.com/wp-content/uploads/2023/09/starfield-bethesda-quality-500x280.jpg 500w" sizes="auto, (max-width: 1025px) 100vw, 1025px" /></a><figcaption class="wp-element-caption">Old tyme Bethesda quality</figcaption></figure>
</div>


<p class="wp-block-paragraph">When |I could, I took a detour to Earth&#8217;s moon, and went out for a walk.  Naturally there was a base less then half a click away, and naturally it had 30 insurgents automatically hostile.  What a vast but populated world.  And then the NPC following me around suddenly took off her space suit, and broke the whole thing.  I wanted to maybe get an ARC but apparente it doesn&#8217;t run at all on ARC.  Seems kinda fishy to me tho.  NVIDIA released a new driver like today for the special launch.  I don&#8217;t know if there will be any fallout.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://virtuallyfun.com/2023/09/01/today-is-starfield-day/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>Bungie to make a NEW Marathon!</title>
		<link>https://virtuallyfun.com/2023/06/28/bungie-to-make-a-new-marathon/</link>
					<comments>https://virtuallyfun.com/2023/06/28/bungie-to-make-a-new-marathon/#respond</comments>
		
		<dc:creator><![CDATA[neozeed]]></dc:creator>
		<pubDate>Wed, 28 Jun 2023 11:45:43 +0000</pubDate>
				<category><![CDATA[games]]></category>
		<category><![CDATA[Macintosh]]></category>
		<category><![CDATA[videos]]></category>
		<guid isPermaLink="false">http://virtuallyfun.com/?p=12886</guid>

					<description><![CDATA[Obviously, this is breaking news! Sure you could like read the official press release, or any of the dozens (hundreds?) of &#8216;reputable news&#8217; sites, along with thousands of vloggers, but naturally I of course check out 65scribe, and yep there &#8230; <a href="https://virtuallyfun.com/2023/06/28/bungie-to-make-a-new-marathon/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph"><a href="https://www.youtube.com/@65scribe"></a></p>



<iframe loading="lazy" width="560" height="315" src="https://www.youtube.com/embed/D_G1YWpyCKQ" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>



<p class="wp-block-paragraph">Obviously, this is breaking news!  Sure you could like read <a href="https://press.bungie.com/Bungie-Announces-Marathon-Nathan-Fillion-To-Return-to-Destiny-2-for-Th" target="_blank" rel="noreferrer noopener">the official press</a> release, or any of the dozens (hundreds?) of &#8216;reputable news&#8217; sites, along with thousands of vloggers, but naturally I of course check out <a rel="noreferrer noopener" href="https://www.youtube.com/@65scribe" target="_blank">65scribe</a>, and yep there indeed is a new video!</p>



<p class="wp-block-paragraph">Kind of disappointed there is no planned Mac version, despite what apple says about ARM gaming.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://virtuallyfun.com/2023/06/28/bungie-to-make-a-new-marathon/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
