<?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>Visual C++ &#8211; Virtually Fun</title>
	<atom:link href="https://virtuallyfun.com/category/visual-c/feed/" rel="self" type="application/rss+xml" />
	<link>https://virtuallyfun.com</link>
	<description>Fun with Virtualization</description>
	<lastBuildDate>Thu, 18 Jul 2024 09:36:07 +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>Attempting to port Alexander Batalov&#8217;s Fallout1-re to RISC</title>
		<link>https://virtuallyfun.com/2024/07/18/attempting-to-port-alexander-batalovs-fallout1-re-to-risc/</link>
					<comments>https://virtuallyfun.com/2024/07/18/attempting-to-port-alexander-batalovs-fallout1-re-to-risc/#respond</comments>
		
		<dc:creator><![CDATA[neozeed]]></dc:creator>
		<pubDate>Thu, 18 Jul 2024 09:36:07 +0000</pubDate>
				<category><![CDATA[Visual C++]]></category>
		<category><![CDATA[Windows NT 4.0]]></category>
		<guid isPermaLink="false">https://virtuallyfun.com/?p=14679</guid>

					<description><![CDATA[TLDR; It doesn&#8217;t work With all the excitement of PowerPC NT being runnable under emulation, I thought I&#8217;d try to do something fun, and port Alexander Batalov&#8216;s fallout1-re, to Visual C++ 4.0. The &#8216;problem&#8217; is that it&#8217;s written using a &#8230; <a href="https://virtuallyfun.com/2024/07/18/attempting-to-port-alexander-batalovs-fallout1-re-to-risc/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">TLDR;  It doesn&#8217;t work</h2>



<figure class="wp-block-image size-full"><a href="https://virtuallyfun.com/wp-content/uploads/2024/07/fallout1-fail-on-PowerPC.png"><img fetchpriority="high" decoding="async" width="865" height="321" src="https://virtuallyfun.com/wp-content/uploads/2024/07/fallout1-fail-on-PowerPC.png" alt="" class="wp-image-14680" srcset="https://virtuallyfun.com/wp-content/uploads/2024/07/fallout1-fail-on-PowerPC.png 865w, https://virtuallyfun.com/wp-content/uploads/2024/07/fallout1-fail-on-PowerPC-300x111.png 300w, https://virtuallyfun.com/wp-content/uploads/2024/07/fallout1-fail-on-PowerPC-768x285.png 768w, https://virtuallyfun.com/wp-content/uploads/2024/07/fallout1-fail-on-PowerPC-500x186.png 500w" sizes="(max-width: 865px) 100vw, 865px" /></a><figcaption class="wp-element-caption">Fallout 1 needs DirectX 3.0a / NT 4.0 SP3</figcaption></figure>



<p class="wp-block-paragraph">With all the excitement of PowerPC NT being runnable under emulation, I thought I&#8217;d try to do something fun, and port <a href="https://github.com/alexbatalov">Alexander Batalov</a>&#8216;s <a href="https://github.com/alexbatalov/fallout1-re" target="_blank" rel="noreferrer noopener">fallout1-re</a>, to Visual C++ 4.0.</p>



<p class="wp-block-paragraph">The &#8216;problem&#8217; is that it&#8217;s written using a more modern C that allows C++ style variables in the code.  In traditional C, the declaration of variables has to be at the start of each function, however C++ allows you to place them wherever you want in the code.  </p>



<figure class="wp-block-image size-full"><a href="https://virtuallyfun.com/wp-content/uploads/2024/07/frame_ptr.png"><img decoding="async" width="836" height="439" src="https://virtuallyfun.com/wp-content/uploads/2024/07/frame_ptr.png" alt="" class="wp-image-14681" srcset="https://virtuallyfun.com/wp-content/uploads/2024/07/frame_ptr.png 836w, https://virtuallyfun.com/wp-content/uploads/2024/07/frame_ptr-300x158.png 300w, https://virtuallyfun.com/wp-content/uploads/2024/07/frame_ptr-768x403.png 768w, https://virtuallyfun.com/wp-content/uploads/2024/07/frame_ptr-500x263.png 500w" sizes="(max-width: 836px) 100vw, 836px" /></a><figcaption class="wp-element-caption">the frame_ptr function from art.c</figcaption></figure>



<p class="wp-block-paragraph">The &#8216;fix&#8217; is quite simple, you just have to separate the creation of variables in the code, and place them on top, as simple as!</p>



<p class="wp-block-paragraph">You can see in this case the deletions in red, and the additions in green.</p>



<p class="wp-block-paragraph"><strong>115 changed files with 21,455 additions and 4,437 deletions.</strong></p>



<p class="wp-block-paragraph">It was a LOT of changes.  It took me 3 days to go through the code.  But with a lot of work I was able to get it to compile first with Visual C++ 2003.  I then created a Makefile allowing me to compile with Visual C++ 4.0</p>



<p class="wp-block-paragraph">I have to admit, I was kind of surprised that it actually compiled for the PowerPC.  And instantly saddened that it doesn&#8217;t actually work.  Maybe some code amputations may get around the running part, but that&#8217;s just speculation right now.</p>



<p class="wp-block-paragraph">Shockingly the opening animations play fine, the menus load, however you get about one frame in the game, and it goes unresponsive.</p>



<figure class="wp-block-image size-full"><a href="https://github.com/neozeed/fallout1-re"><img decoding="async" width="640" height="480" src="https://virtuallyfun.com/wp-content/uploads/2024/07/Fallout1-VC4-hanging.png" alt="" class="wp-image-14682" srcset="https://virtuallyfun.com/wp-content/uploads/2024/07/Fallout1-VC4-hanging.png 640w, https://virtuallyfun.com/wp-content/uploads/2024/07/Fallout1-VC4-hanging-300x225.png 300w, https://virtuallyfun.com/wp-content/uploads/2024/07/Fallout1-VC4-hanging-400x300.png 400w" sizes="(max-width: 640px) 100vw, 640px" /></a><figcaption class="wp-element-caption">As far as it gets</figcaption></figure>



<p class="wp-block-paragraph">I don&#8217;t know why but Visual C++ 2003 won&#8217;t debug it correctly.  I&#8217;m not sure why it won&#8217;t set the working directory correctly.  Attaching to the process seems to produce different results, where it&#8217;s stuck in some loop that I can&#8217;t peg down.</p>



<p class="wp-block-paragraph">Obviously, I did screw something up, the &#8216;solution&#8217; is to install a newer version of Visual Studio and &#8216;blend&#8217; the files, to try to rule out where or what went wrong.</p>



<p class="wp-block-paragraph">The annoying thing is that even if I go through the required steps to get the VC4 version working, it won&#8217;t matter as at best this would only be relevant for the currently unemulated Dec Alpha.</p>



<p class="wp-block-paragraph">Oh well, <a href="https://www.youtube.com/watch?v=B48D60wH8gA" target="_blank" rel="noreferrer noopener">sometimes you eat the bar, sometimes the bar eats you.</a>(yes I know it&#8217;s BEAR).</p>
]]></content:encoded>
					
					<wfw:commentRss>https://virtuallyfun.com/2024/07/18/attempting-to-port-alexander-batalovs-fallout1-re-to-risc/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Targeting OS/2 with Visual Studio 2003</title>
		<link>https://virtuallyfun.com/2024/02/11/targeting-os-2-with-visual-studio-2003/</link>
					<comments>https://virtuallyfun.com/2024/02/11/targeting-os-2-with-visual-studio-2003/#comments</comments>
		
		<dc:creator><![CDATA[neozeed]]></dc:creator>
		<pubDate>Sun, 11 Feb 2024 09:08:22 +0000</pubDate>
				<category><![CDATA[assembly]]></category>
		<category><![CDATA[OS/2 2.0]]></category>
		<category><![CDATA[Visual C++]]></category>
		<category><![CDATA[Visual C++ toolkit 2003]]></category>
		<category><![CDATA[Visual Studio 2003]]></category>
		<category><![CDATA[Watcom C++]]></category>
		<category><![CDATA[Win32]]></category>
		<guid isPermaLink="false">https://virtuallyfun.com/?p=13926</guid>

					<description><![CDATA[No, it&#8217;s not a typo. This is a long-winded post, but the short version is that I found a working combination to get the C compiler from Visual Studio 2003 targeting OS/2. Once I&#8217;d learned how C compilers are a &#8230; <a href="https://virtuallyfun.com/2024/02/11/targeting-os-2-with-visual-studio-2003/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-full"><a href="/wp-content/uploads/2024/02/syneys-idea-of-visual-c-for-os2.jpg"><img loading="lazy" decoding="async" width="1024" height="1024" src="/wp-content/uploads/2024/02/syneys-idea-of-visual-c-for-os2.jpg" alt="" class="wp-image-13931" srcset="https://virtuallyfun.com/wp-content/uploads/2024/02/syneys-idea-of-visual-c-for-os2.jpg 1024w, https://virtuallyfun.com/wp-content/uploads/2024/02/syneys-idea-of-visual-c-for-os2-300x300.jpg 300w, https://virtuallyfun.com/wp-content/uploads/2024/02/syneys-idea-of-visual-c-for-os2-150x150.jpg 150w, https://virtuallyfun.com/wp-content/uploads/2024/02/syneys-idea-of-visual-c-for-os2-768x768.jpg 768w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a><figcaption class="wp-element-caption">Sydney&#8217;s idea of what Visual C++ for OS/2 should look like</figcaption></figure>



<p class="wp-block-paragraph">No, it&#8217;s not a typo.</p>



<p class="wp-block-paragraph">This is a long-winded post, but the short version is that I found a working combination to get the C compiler from Visual Studio 2003 targeting OS/2.</p>



<p class="wp-block-paragraph">Once I&#8217;d learned how C compilers are a collection of programs working in concert, I&#8217;d always wanted to force Microsoft C to work in that fashion, however it is born to be a compiler that integrates everything but linking. There has been a &#8220;/Fa&#8221; or output assembly option, but I&#8217;ve never gotten it to do anything useful.  I&#8217;m not that much into assembly but it seemed insurmountable.</p>



<p class="wp-block-paragraph">But for some reason this time things were different.</p>



<p class="wp-block-paragraph">This time I used:</p>



<p class="wp-block-paragraph"><strong>Microsoft (R) Macro Assembler Version 6.11</strong></p>



<p class="wp-block-paragraph">After the great divorce and the rise of Windows NT, Microsoft had shifted from the OMF format to COFF.  However somewhere buried in their old tools it still supports it, namely MASM.  For example, if I try to run LINK386 (the OS/2 Linker) against output from Visual C++ 2003 I get his</p>



<pre class="wp-block-code"><code>abandon.obj :  fatal error L1101: invalid object module
 Object file offset: 1  Record type: 4c</code></pre>



<p class="wp-block-paragraph">However if I output to assembly and then have MASM assemble that, and try the linker, I&#8217;m bombarded with errors like this:</p>



<pre class="wp-block-code"><code>warp.obj(warp.asm) :  error L2025: __real@4059000000000000 : symbol defined more than once
warp.obj(warp.asm) :  error L2029: '__ftol2' : unresolved external</code></pre>



<p class="wp-block-paragraph">If I was smart I&#8217;d have given up, there is pages and pages of this stuff.  But I&#8217;m not smart, so instead I decided to something different, and use SED, the stream editor, and try to patch out the errors.</p>



<p class="wp-block-paragraph">The ftol2 call is for newer CPU&#8217;s and any OS/2 library won&#8217;t have it.  But instead of binary editing symbols we can replace the ftol2 with ftol with this simple line:</p>



<pre class="wp-block-code"><code> sed -e 's/_ftol2/_ftol/g'</code></pre>



<p class="wp-block-paragraph">For some reason Visual C++ likes to make all it&#8217;s reals &#8220;public&#8221; meaning there can only be one, but yet there is so many.  Why not comment them all out?</p>



<pre class="wp-block-code"><code>sed -e 's/PUBLIC\t__real@/;PUBLIC\t__real@/g'</code></pre>



<p class="wp-block-paragraph">And there are various other annoying things, but again they can be all patched out.  Just as the older Windows 1991 Pre-release compilers also have weird syntax that MASM doesn&#8217;t understand.</p>



<pre class="wp-block-code"><code>astro.asm(59): error A2138: invalid data initializer</code></pre>



<p class="wp-block-paragraph">which goes into how Microsoft C used to initialize floating point constants:</p>



<pre class="wp-block-code"><code>CONST   SEGMENT  DWORD USE32 PUBLIC 'CONST'
$T20000         DQ      0a0ce51293ee845c8r    ; 1.157407407407407E-05
$T20001         DQ      0bffffd3441429ec5r    ; 2440587.499999667
CONST      ENDS</code></pre>



<p class="wp-block-paragraph">while I found that the C compiler in Xenix 386 initialises them like this:</p>



<pre class="wp-block-code"><code>$T20000         DQ      0a0ce51293ee845c8h    ; 1.157407407407407E-05
$T20001         DQ      0bffffd3441429ec5h    ; 2440587.499999667</code></pre>



<p class="wp-block-paragraph">This one was a little hard for me as I&#8217;m not a sed expert, but I did figure out how to mark the section, and then to replace it</p>



<pre class="wp-block-code"><code>sed -e "s/DQ\t&#91;0-9a-f]<em>r/&amp;XMMMMMMX/g" $</em>.a1 |  sed -e "s/rXMMMMMMX/H/g"</code></pre>



<p class="wp-block-paragraph">And so on.  At the moment my &#8216;mangle&#8217; script is now this:</p>



<pre class="wp-block-code"><code>.c.obj:
        $(CC) $(INC) $(OPT) $(DEBUG) /c /Fa$*.a $*.c
        wsl sed -e 's/FLAT://g' $*.a &gt; $*.a1
        wsl sed -e "s/DQ\t&#91;0-9a-f]*r/&amp;XMMMMMMX/g" $*.a1 \
        | wsl sed -e "s/rXMMMMMMX/H/g" \
        | wsl sed -e 's/call \t\&#91;/call DWORD PTR\&#91;/g' \
        | wsl sed -e 's/PUBLIC\t__real@/;PUBLIC\t__real@/g' \
        | wsl sed -e 's/_ftol2/_ftol/g' &gt; $*.asm
        ml /c $*.asm
        del $*.a $*.a1 $*.asm</code></pre>



<p class="wp-block-paragraph">This allows me to plug it into a Makefile, so I only have to edit it in one place.</p>



<p class="wp-block-paragraph">Not surprisingly, this allows the LINK from Visual C++ 1.0 to link the MASM generated object files and get a native Win32 executable.  Even from the oldest compiler I have from the Microsoft OS/2 2.00 Beta 2 SDK from 1989!</p>



<p class="wp-block-paragraph">But now that we have the C compilers being able to output to something we can edit and force into a Win32, there is a few more things and suddenly:</p>



<pre class="wp-block-code"><code>        C:\cl386-research\bin\13.10.6030\cl386 /u /w /G3 /O  /c /Faphoon.a phoon.c
C:\cl386-research\bin\13.10.6030\CL386.EXE: warning: invoking C:\cl386-research\bin\13.10.6030\CL.EXE
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 13.10.6030 for 80x86
Copyright (C) Microsoft Corporation 1984-2002. All rights reserved.

phoon.c
        wsl sed -e 's/FLAT://g' phoon.a &gt; phoon.a1
        wsl sed -e "s/DQ\t&#91;0-9a-f]*r/&amp;XMMMMMMX/g" phoon.a1  | wsl sed -e "s/rXMMMMMMX/H/g"  | wsl sed -e 's/call \t\&#91;/call DWORD PTR\&#91;/g'  | wsl sed -e 's/PUBLIC\t__real@/;PUBLIC\t__real@/g'  | wsl sed -e 's/_ftol2/_ftol/g' &gt; phoon.asm
        ml /c phoon.asm
Microsoft (R) Macro Assembler Version 6.11
Copyright (C) Microsoft Corp 1981-1993.  All rights reserved.

 Assembling: phoon.asm
        del phoon.a phoon.a1 phoon.asm
        msdos286 run286 C:\cl386-research\bin\ddk12\LINK386.EXE @phoon.lnk

Operating System/2 Linear Executable Linker
Version 2.01.012 Nov 02 1993
Copyright (C) IBM Corporation 1988-1993.
Copyright (C) Microsoft Corp. 1988-1993.
 All rights reserved.

Object Modules &#91;.obj]: astro.obj date_p.obj phoon.obj
Run File &#91;astro.exe]: phoon2 /NOE /NOI /NOD:OLDNAMES
List File &#91;nul.map]: nul.map
Libraries &#91;.lib]: ..\..\lib2\libc.lib +
Libraries &#91;.lib]: ..\..\lib2\os2386.lib
Definitions File &#91;nul.def]: nul.def;
LINK386 :  warning L4071: application type not specified; assuming WINDOWCOMPAT</code></pre>



<p class="wp-block-paragraph">I know it&#8217;s a bit of a word salad, but the key thing here is that using Visual C++ 2003&#8217;s compiler (version 13.10.6030), and outputting to assembly that we can edit, we can then use MASM to build objects that surprisingly LINK386 version 2.01.012 will link with.  I suspect this has to do with device drivers, and probably the majority of the OS/2 operating system.</p>



<p class="wp-block-paragraph">Anways, we&#8217;ve done the incredible, using the same object files, we made both a Win32 application, and an OS/2 application!</p>



<pre class="wp-block-code"><code>phoon-13.10.6030.exe: PE32 executable (console) Intel 80386, for MS Windows<br>phoon2.exe: MS-DOS executable, LX for OS/2 (console) i80386</code></pre>



<figure class="wp-block-image size-full"><a href="/wp-content/uploads/2024/02/phoon-on-os2-compiled-by-visual-cplus-plus-2003.png"><img loading="lazy" decoding="async" width="802" height="633" src="/wp-content/uploads/2024/02/phoon-on-os2-compiled-by-visual-cplus-plus-2003.png" alt="" class="wp-image-13927" srcset="https://virtuallyfun.com/wp-content/uploads/2024/02/phoon-on-os2-compiled-by-visual-cplus-plus-2003.png 802w, https://virtuallyfun.com/wp-content/uploads/2024/02/phoon-on-os2-compiled-by-visual-cplus-plus-2003-300x237.png 300w, https://virtuallyfun.com/wp-content/uploads/2024/02/phoon-on-os2-compiled-by-visual-cplus-plus-2003-768x606.png 768w, https://virtuallyfun.com/wp-content/uploads/2024/02/phoon-on-os2-compiled-by-visual-cplus-plus-2003-380x300.png 380w" sizes="auto, (max-width: 802px) 100vw, 802px" /></a><figcaption class="wp-element-caption">Phoon compiled by Visual C++ 2003 on OS/2 2.00</figcaption></figure>



<p class="wp-block-paragraph">Incidentally Happy CNY!</p>



<p class="wp-block-paragraph">Obviously, this is <em>VERY</em> cool stuff.</p>



<p class="wp-block-paragraph">I know the next question is do we have to rely on a 16bit linker?  How about Watcom?</p>



<pre class="wp-block-code"><code>C:\cl386-research\proj\trek&gt;wlink @trek.wlk
WATCOM Linker Version 10.0
Copyright by WATCOM International Corp. 1985, 1994. All rights reserved.
WATCOM is a trademark of WATCOM International Corp.
loading object files
searching libraries
Warning(1008): cannot open LIBC.lib : No such file or directory
Warning(1008): cannot open OLDNAMES.lib : No such file or directory
creating an OS/2 32-bit executable
</code></pre>



<p class="wp-block-paragraph">Ignore the warnings and <strong><em>YES</em></strong> <em>we can</em> Link from something much newer &amp; 32bit!  In this example I linked the old TREK game, also built with Visual C++ 2003.  The response file looks lke:</p>



<pre class="wp-block-code"><code>SYS os2v2
NAME trek2w
FILE abandon.obj,attack.obj,autover.obj,capture.obj,cgetc.obj,checkcond.obj
FILE check_out.obj,compkl.obj,computer.obj,damage.obj,damaged.obj,dcrept.obj
FILE destruct.obj,dock.obj,dumpgame.obj,dumpme.obj,dumpssradio.obj,events.obj
FILE externs.obj,getcodi.obj,getpar.obj,help.obj,impulse.obj,initquad.obj
FILE kill.obj,klmove.obj,lose.obj,lrscan.obj,main.OBJ,move.obj
FILE nova.obj,nullsleep.obj,out.obj,phaser.obj,play.obj,ram.obj
FILE ranf.obj,rest.obj,schedule.obj,score.obj,setup.obj,setwarp.obj
FILE shield.obj,snova.obj,srscan.obj,systemname.obj,torped.obj,utility.obj
FILE visual.obj,warp.obj,win.obj
LIBR ..\..\lib2\LIBC.LIB
LIBR ..\..\lib2\OS2386.LIB</code></pre>



<p class="wp-block-paragraph">It&#8217;s probably needing additional stack space, maybe some other stuff, or resources, maybe how to flag it&#8217;s windowing compatible.</p>



<figure class="wp-block-image size-full"><a href="/wp-content/uploads/2024/02/watcom-linked-trek.png" target="_blank" rel="noreferrer noopener"><img loading="lazy" decoding="async" width="770" height="412" src="/wp-content/uploads/2024/02/watcom-linked-trek.png" alt="" class="wp-image-13928" srcset="https://virtuallyfun.com/wp-content/uploads/2024/02/watcom-linked-trek.png 770w, https://virtuallyfun.com/wp-content/uploads/2024/02/watcom-linked-trek-300x161.png 300w, https://virtuallyfun.com/wp-content/uploads/2024/02/watcom-linked-trek-768x411.png 768w, https://virtuallyfun.com/wp-content/uploads/2024/02/watcom-linked-trek-500x268.png 500w" sizes="auto, (max-width: 770px) 100vw, 770px" /></a><figcaption class="wp-element-caption">TREK built by Visual C++ 2003, and Linked using Watcom C/C++ 10.0</figcaption></figure>



<p class="wp-block-paragraph">How do I get started, if I dare?!  First download and unpack <a href="https://archive.org/details/cl386-research-v2">cl386-research-v2</a>.  Ideally on the root of your C: drive, because why not?</p>



<p class="wp-block-paragraph">run the &#8216;env&#8217; command to set your environment up. Its pretty complicated but in the proj directly there is currently:</p>



<p class="wp-block-paragraph"><strong>*NOTE</strong> that I do use <strong>SED</strong> scripts, I have it set to use Linux in the WSL package.<br>I tried some Win32 sed but it didn&#8217;t work. So you need <strong>WSL</strong> or a working sed!</p>



<ul class="wp-block-list">
<li>bench</li>



<li>doom</li>



<li>info</li>



<li>phoon</li>



<li>trek</li>



<li>(<a href="https://github.com/neozeed/cl386-research" target="_blank" rel="noreferrer noopener">more stuff being added or updated on github</a>)</li>
</ul>



<p class="wp-block-paragraph">you can then go into each directory and run</p>



<pre class="wp-block-code"><code>make os2</code></pre>



<p class="wp-block-paragraph">and it&#8217;ll compile populate a floppy and launch the emulator</p>



<p class="wp-block-paragraph">Its all good fun.</p>



<p class="wp-block-paragraph">Read the Makefiles to configure a compiler, how to run it, and if you need to mangle the assembly. The 32bit new stuff needs to be mangled, the older stuff almost always works with just compile.</p>



<pre class="wp-block-code"><code># Version 6.00.054      1989
# https://archive.org/details/os-2-cd-rom_202401
PLATFORM = ddksrc</code></pre>



<p class="wp-block-paragraph">In this case it&#8217;ll select the platform from the &#8216;ddksdk&#8217; release. The next is if the compiler is OS/2 based or native win32. Basically 73g / windows 95 &amp; below are native Win32.</p>



<p class="wp-block-paragraph">In the above example we comment out the dos extended cross</p>



<pre class="wp-block-code"><code># dos exteded cross
CC =  $(EMU) $(DOSX) $(CL386ROOT)\$(PLATFORM)\cl386
# native CC
# CC =  $(CL386ROOT)\$(PLATFORM)\cl386</code></pre>



<p class="wp-block-paragraph">Next is the mangle strategy. In this case it&#8217;s an ancient OS/2 (like) compile so<br>try un commenting the &#8216;just compile&#8217; line</p>



<pre class="wp-block-code"><code># must include ONLY ONE strategey..
# for OS/2 it must have been assembled my MASM 6.11

include ..\-justcompile.mak
#include ..\-mangleassembly.mak
#include ..\-plainassembly.mak</code></pre>



<p class="wp-block-paragraph">save the makefile, and run</p>



<pre class="wp-block-code"><code>nmake os2</code></pre>



<p class="wp-block-paragraph">You can just close the emulator as after each run it&#8217;ll unpack a hard disk image, so nothing will be lost. or saved. It&#8217;s just for testing.  You may need to periodically clean the floppy drive, as that is the only way to transfer stuff in and out of the VM.</p>



<p class="wp-block-paragraph">What versions of CL386 have I found?  Well, it&#8217;s quite a few, although I know I&#8217;m missing quite a few.  </p>



<pre class="wp-block-code"><code>== c386 ============================
Microsoft C 5 386 Compiler

Microsoft C 5.2 286/386 Compiler -- Driver

@(#)C Compiler Apr 19 1990 11:48:30

Copyright (c) Microsoft Corp
1984-1989. All rights reserved.
  (press &lt;return&gt; to continue)
Microsoft 386 C Compiler. Version 1.00.075
Quick C Compiler Version 2.00.000
1.00.075

== ddk12 ============================

C 6.00 (Alpha) Aug 24 1990 19:12:31

Copyright (c) Microsoft Corp
1984-1989. All rights reserved.
  (press &lt;return&gt; to continue)
Microsoft 386 C Compiler. Version 6.00.054
Quick C Compiler Version 2.00.000
6.00.054

== ddk20 ============================

C 6.00 (Alpha) Aug 16 1990 23:04:06

Copyright (c) Microsoft Corp
1984-1989. All rights reserved.
  (press &lt;return&gt; to continue)
Microsoft 386 C Compiler. Version 6.00.054
Quick C Compiler Version 2.00.000
6.00.054

== ddksrc ============================

C 6.00 (Alpha) Aug 24 1990 19:21:49

Copyright (c) Microsoft Corp
1984-1989. All rights reserved.
  (press &lt;return&gt; to continue)
Microsoft 386 C Compiler. Version 6.00.054
Quick C Compiler Version 2.00.000
6.00.054

== nt-sep ============================

@(#)C Compiler 6.00 Feb 06 1991 17:15:19
@(#)C Compiler 6.00 May 13 1991 23:54:12
@(#)C Compiler 6.00 Jun 03 1991 15:16:22


Copyright (c) Microsoft Corp
1984-1991. All rights reserved.
  (press &lt;return&gt; to continue)
Microsoft 386 C Compiler. Version 6.00.077
Quick C Compiler Version 2.00.000
6.00.077

== nt-oct ============================

@(#)C Compiler 6.00 Jun 03 1991 15:16:22
@(#)C Compiler 6.00 Jun 13 1991 22:07:23
@(#)C Compiler 6.00 Oct 10 1991 00:42:24

Copyright (c) Microsoft Corp
1984-1991. All rights reserved.
  (press &lt;return&gt; to continue)
Microsoft 386 C Compiler. Version 6.00.080
Quick C Compiler Version 2.00.000
6.00.080

== nt-dec ============================
@(#)C Compiler 6.00 Jun 03 1991 15:16:22
@(#)C Compiler 6.00 Jun 13 1991 22:07:23
@(#)C Compiler 6.00 Oct 10 1991 00:42:24

Copyright (c) Microsoft Corp
1984-1991. All rights reserved.
  (press &lt;return&gt; to continue)
Microsoft 386 C Compiler. Version 6.00.081
Quick C Compiler Version 2.00.000
6.00.081

== 73g  ============================
1984-1993. All rights reserved.
Copyright (c) Microsoft Corp
8.00.3200
32-bit C/C++ Optimizing Compiler Version
Microsoft (R)


== msvc32s ============================

Microsoft 8.00.0000 - Copyright (C) 1986-1993 Microsoft Corp.
Microsoft 8.00.0000 - Copyright (C) 1986-1993 Microsoft Corp.
@(#) Microsoft C/C++ 32 bits x86 Compiler Version 8.00.XXXX

8.00.000

== 13.10.6030 ============================

Microsoft (R) C/C++ Compiler Version 13.10.6030
From my install of Visual Studio 2003 Enterprise</code></pre>



<p class="wp-block-paragraph">As you can see many of these earlier OS/2 compilers report the same versions but are in fact different builds on the inside.  I suspect Microsoft had to support one version, and an Alpha version of version 6 is as good as it got.  I would have imagined there were internal 32bit versions of 6 or 7, but I haven&#8217;t seen them.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="960" height="609" src="/wp-content/uploads/2024/02/trek_3.gif" alt="" class="wp-image-13936"/><figcaption class="wp-element-caption">Compiling and running TREK</figcaption></figure>



<p class="wp-block-paragraph">Hopefully this gives some idea of how I tried to made a probably too modular build system to try all kinds of different compilers.  I might have to see if it&#8217;s possible to run the tools from the 1992 versions of Windows NT in this setup, perhaps they are interesting as well.</p>



<p class="wp-block-paragraph">One thing in my <a href="https://virtuallyfun.com/2024/02/10/porting-gcc-to-32bit-os-2/" target="_blank" rel="noreferrer noopener">porting GCC to OS/2 experience</a> is that the usability of the C compilers from 1991 were dramatically better than what Microsoft had given IBM at the time of the divorce.  No doubt the upcoming NTOS/2 project was placing a bigger demand on the tools team.</p>



<p class="wp-block-paragraph">If anyone has any access to other &#8216;cl386&#8217; compilers, or early OS/2 2.00 stuff, please let me know!  I&#8217;d love to do build/tests and see if my idea of distributing objects &#8216;just works&#8217;!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://virtuallyfun.com/2024/02/11/targeting-os-2-with-visual-studio-2003/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
		<item>
		<title>When 0 is greater than 1.0</title>
		<link>https://virtuallyfun.com/2023/04/22/when-0-is-greater-than-1-0/</link>
					<comments>https://virtuallyfun.com/2023/04/22/when-0-is-greater-than-1-0/#comments</comments>
		
		<dc:creator><![CDATA[neozeed]]></dc:creator>
		<pubDate>Sat, 22 Apr 2023 08:43:13 +0000</pubDate>
				<category><![CDATA[DEC Alpha]]></category>
		<category><![CDATA[Visual C++]]></category>
		<category><![CDATA[Windows NT 4.0]]></category>
		<guid isPermaLink="false">https://virtuallyfun.com/?p=12369</guid>

					<description><![CDATA[I came across this fun thing debugging a QuakeWorld client on a RISC machine. I think something is failing as I&#8217;m using terminal server. For some reason width is being passed as 0. Not sure why I didn&#8217;t debug it &#8230; <a href="https://virtuallyfun.com/2023/04/22/when-0-is-greater-than-1-0/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-full"><a href="/wp-content/uploads/2023/04/x-greater-than-zero.png"><img decoding="async" src="/wp-content/uploads/2023/04/x-greater-than-zero.png" alt="" class="wp-image-12371"/></a></figure>



<p class="wp-block-paragraph">I came across this fun thing debugging a QuakeWorld client on a RISC machine.  I think something is failing as I&#8217;m using terminal server.  For some reason width is being passed as 0.  Not sure why I didn&#8217;t debug it enough to care, so I setup a quick block to only evaluate the Fov if the calculated x was greater than 1.0</p>



<p class="wp-block-paragraph">And Microsoft C did not disappoint.</p>



<p class="wp-block-paragraph">I think it may have been some incremental linking issue? I&#8217;m not sure I purged the build directory and re-ran make and didn&#8217;t experience the crash again.  I had to get the screenshot or even I wouldn&#8217;t believe it.</p>



<p class="wp-block-paragraph">In the end I got it running:</p>



<figure class="wp-block-image size-full"><a href="/wp-content/uploads/2023/04/QuakeWorld-on-Dec-Alpha-using-version-13.00.8499-compiler.png"><img decoding="async" src="/wp-content/uploads/2023/04/QuakeWorld-on-Dec-Alpha-using-version-13.00.8499-compiler.png" alt="" class="wp-image-12372"/></a></figure>



<p class="wp-block-paragraph">Of course among the eagle eyed you may notice this is version 13.00.8499 of the compiler.  But the last compiler for the Dec Alpha / Windows NT was version 12&#8230;</p>



<p class="wp-block-paragraph">More on that later!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://virtuallyfun.com/2023/04/22/when-0-is-greater-than-1-0/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>GNU Chess &#8217;87</title>
		<link>https://virtuallyfun.com/2022/11/07/gnu-chess-87/</link>
					<comments>https://virtuallyfun.com/2022/11/07/gnu-chess-87/#respond</comments>
		
		<dc:creator><![CDATA[neozeed]]></dc:creator>
		<pubDate>Mon, 07 Nov 2022 12:11:14 +0000</pubDate>
				<category><![CDATA[games]]></category>
		<category><![CDATA[Visual C++]]></category>
		<category><![CDATA[Win32]]></category>
		<guid isPermaLink="false">https://virtuallyfun.com/?p=12028</guid>

					<description><![CDATA[I am not much of a chess player. That said one thing that has annoyed me to no end is GNU Chess 1.2. Over on bitsavers is this fun directory: And despite being a treasure trove of ancient GNU software, &#8230; <a href="https://virtuallyfun.com/2022/11/07/gnu-chess-87/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[<div class="wp-block-image">
<figure class="aligncenter size-full"><a href="https://virtuallyfun.com/wp-content/uploads/2022/11/gnuchess-on-NT.png"><img loading="lazy" decoding="async" width="1001" height="524" src="https://virtuallyfun.com/wp-content/uploads/2022/11/gnuchess-on-NT.png" alt="" class="wp-image-12029" srcset="https://virtuallyfun.com/wp-content/uploads/2022/11/gnuchess-on-NT.png 1001w, https://virtuallyfun.com/wp-content/uploads/2022/11/gnuchess-on-NT-300x157.png 300w, https://virtuallyfun.com/wp-content/uploads/2022/11/gnuchess-on-NT-768x402.png 768w, https://virtuallyfun.com/wp-content/uploads/2022/11/gnuchess-on-NT-500x262.png 500w" sizes="auto, (max-width: 1001px) 100vw, 1001px" /></a></figure>
</div>


<p class="wp-block-paragraph">I am not much of a chess player.  That said one thing that has annoyed me to no end is GNU Chess 1.2.  Over on bitsavers is this fun <a href="http://bitsavers.org/bits/MIT/gnu/" target="_blank" rel="noreferrer noopener">directory</a>:</p>


<div class="wp-block-image">
<figure class="alignleft size-full"><a href="http://bitsavers.org/bits/MIT/gnu/"><img loading="lazy" decoding="async" width="375" height="295" src="https://virtuallyfun.com/wp-content/uploads/2022/11/gnu87.png" alt="" class="wp-image-12030" srcset="https://virtuallyfun.com/wp-content/uploads/2022/11/gnu87.png 375w, https://virtuallyfun.com/wp-content/uploads/2022/11/gnu87-300x236.png 300w" sizes="auto, (max-width: 375px) 100vw, 375px" /></a></figure>
</div>


<p class="wp-block-paragraph">And despite being a treasure trove of ancient GNU software, I have never been able to get GNU Chess to do much of anything.  At best it&#8217;ll give the Chess prompt, and then it&#8217;ll either crash (good!) or worst case it just exits silently with no reason given.</p>



<p class="wp-block-paragraph">I have put only minimal effort into debugging it, and really got nowhere.  I don&#8217;t know why this is such a tough beast to deal with, or why I even care.  As I mentioned above, I&#8217;m not much of a chess player.</p>



<p class="wp-block-paragraph">But for some reason this time around I thought I&#8217;d try the earliest release quality Visual C++ to build it.  I wasn&#8217;t expecting much, however for some reason this ancient version seems to run.</p>



<p class="wp-block-paragraph">I had to enable a few things such as the RANDOM &amp; HASH to make it look like it wants to play.  I ended up having to make some changes after a draw or victory as the &#8216;self playing mode&#8217;would keep going.  Not sure what&#8217;s going on there, and I added a line at the end of the logic loop to always print the board, so at least you can see what is going on if you have it playing itself.</p>



<p class="wp-block-paragraph">With that said this is the most ridiculous thing I&#8217;ve seen:</p>



<pre class="wp-block-preformatted">  White Black Depth  Nodes  Score    Cpu     Rate
1. e2e4 e7e5      4   5793      0   0.00      1
2. d2d4 b8c6      4      0      0   0.00      0
3. d4e5 c6e5      4  17966      0   0.00      1
4. g1f3 b7b6      4      0      0   0.00      0
5. f3e5 f8c5      4 487931   -325   0.00      1
6. d1d5 c5b4      4 2079943   -425   1.00      2079943
7. e1d1 a7a6      4      0    775   0.00      0
8. d5f7           4 161840   4525   0.00      1
Averages:  4.00 ply, 550695 nodes,  0.20 cpu, 2753473 nodes/sec</pre>



<p class="wp-block-paragraph">Given I don&#8217;t have any good rusage emulation going on (I know its in MinGW at some point, and I probably can find it, and get it running on MSVC but I don&#8217;t see that as important) an 8 move victory seems pretty&#8230; unlikely?</p>



<p class="wp-block-paragraph">Maybe it&#8217;s a good test of other C compilers to see if they produce anything.  Or maybe it&#8217;s all a red herring? I haven&#8217;t tested with much but GCC 1.40 can&#8217;t even run it on x86.  Watcom 10 can build, but it crashes during a self game.</p>



<p class="wp-block-paragraph">It&#8217;s one of those mysteries, that I&#8217;m sure there is some fundamental lesson, but I&#8217;m not sure what it is.</p>



<p class="wp-block-paragraph">Other than it&#8217;s a long way down, standing on the shoulders of giants.</p>



<p class="wp-block-paragraph">I put <a href="https://github.com/neozeed/gnuchess-87" target="_blank" rel="noreferrer noopener">the source</a> &amp; <a href="https://github.com/neozeed/gnuchess-87/releases/tag/v1.0" target="_blank" rel="noreferrer noopener">exe over on github</a>.  Not that I expect any takers.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://virtuallyfun.com/2022/11/07/gnu-chess-87/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>oneAPI Base Toolkit from Intel [free as in beer]</title>
		<link>https://virtuallyfun.com/2021/05/30/oneapi-base-toolkit-from-intel-free-as-in-beer/</link>
					<comments>https://virtuallyfun.com/2021/05/30/oneapi-base-toolkit-from-intel-free-as-in-beer/#respond</comments>
		
		<dc:creator><![CDATA[neozeed]]></dc:creator>
		<pubDate>Sun, 30 May 2021 03:15:51 +0000</pubDate>
				<category><![CDATA[C++]]></category>
		<category><![CDATA[random updates]]></category>
		<category><![CDATA[Visual C++]]></category>
		<category><![CDATA[Visual Studio 2019]]></category>
		<guid isPermaLink="false">https://virtuallyfun.com/wordpress/?p=11092</guid>

					<description><![CDATA[I&#8217;ve been informed that the toolkit includes some fancy memory tools to detect incorrect access types when you use void pointers for fun and profit, but accidentally copy in too much ( or little ) and can really mess stuff &#8230; <a href="https://virtuallyfun.com/2021/05/30/oneapi-base-toolkit-from-intel-free-as-in-beer/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">I&#8217;ve been informed that the toolkit includes some fancy memory tools to detect incorrect access types when you use void pointers for fun and profit, but accidentally copy in too much ( or little ) and can really mess stuff up.  Just because of alignment and it &#8216;fits&#8217; doesn&#8217;t mean you are doing what you think you are doing!</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="864" height="486" src="https://virtuallyfun.com/wp-content/uploads/2021/05/benchmark-dpcpp-dpcpp-xeon-16x9.png.rendition.intel_.web_.864.486.png" alt="" class="wp-image-11093" srcset="https://virtuallyfun.com/wp-content/uploads/2021/05/benchmark-dpcpp-dpcpp-xeon-16x9.png.rendition.intel_.web_.864.486.png 864w, https://virtuallyfun.com/wp-content/uploads/2021/05/benchmark-dpcpp-dpcpp-xeon-16x9.png.rendition.intel_.web_.864.486-300x169.png 300w, https://virtuallyfun.com/wp-content/uploads/2021/05/benchmark-dpcpp-dpcpp-xeon-16x9.png.rendition.intel_.web_.864.486-768x432.png 768w, https://virtuallyfun.com/wp-content/uploads/2021/05/benchmark-dpcpp-dpcpp-xeon-16x9.png.rendition.intel_.web_.864.486-500x281.png 500w" sizes="auto, (max-width: 864px) 100vw, 864px" /></figure></div>



<p class="wp-block-paragraph"><a href="https://software.intel.com/content/www/us/en/develop/tools/oneapi/base-toolkit/download.html" target="_blank" rel="noreferrer noopener">Anyways, link is here</a>!</p>



<p class="wp-block-paragraph">The intel toolkit is expected to integrate with Visual Studio 2017 or 2019.  I have the &#8216;community version&#8217; and it picked it up fine.  In addition 2019 has <a href="https://docs.microsoft.com/en-us/cpp/sanitizers/asan?view=msvc-160">ASAN</a> which also helps combat the infamous memory issues of C/C++</p>



<p class="wp-block-paragraph"><em>&lt;need quote from [HCI]Mara&#8217;akate&#8230;></em></p>



<p class="wp-block-paragraph">With the win being the profiling tools, and the memory leak tool.  I just haven&#8217;t had time lately, I&#8217;ve been busy IRL, and wanting to wrap up some a.out to OMF adventures.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://virtuallyfun.com/2021/05/30/oneapi-base-toolkit-from-intel-free-as-in-beer/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Windows Dev VM</title>
		<link>https://virtuallyfun.com/2021/03/08/windows-dev-vm/</link>
					<comments>https://virtuallyfun.com/2021/03/08/windows-dev-vm/#comments</comments>
		
		<dc:creator><![CDATA[tenox]]></dc:creator>
		<pubDate>Mon, 08 Mar 2021 11:21:31 +0000</pubDate>
				<category><![CDATA[guest post]]></category>
		<category><![CDATA[Visual C++]]></category>
		<category><![CDATA[Win32]]></category>
		<category><![CDATA[Win64]]></category>
		<category><![CDATA[Windows 10]]></category>
		<guid isPermaLink="false">https://virtuallyfun.com/wordpress/?p=10889</guid>

					<description><![CDATA[(This is a guest post from Antoni Sawicki aka Tenox) I have been living under a rock for several years now when it comes to Windows development. Recently wanting to do some maintenance on couple of my projects I needed &#8230; <a href="https://virtuallyfun.com/2021/03/08/windows-dev-vm/">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 Antoni Sawicki aka Tenox)</em></p>



<p class="wp-block-paragraph">I have been living under a rock for several years now when it comes to Windows development. Recently wanting to do some maintenance on couple of my projects I needed to download Visual Studio and Windows SDK. Poking around the download page I have discovered that Microsoft now provides a <a href="https://developer.microsoft.com/en-us/windows/downloads/virtual-machines/" data-type="URL" data-id="https://developer.microsoft.com/en-us/windows/downloads/virtual-machines/">fully pre-installed VMs with Visual Studio, SDK etc. for VMware, Hyper-V, VirtualBox and Parallels</a>. That&#8217;s actually super cool and handy. Thank you Microsoft!</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="640" height="499" src="https://virtuallyfun.com/wp-content/uploads/2021/03/windevvm.png" alt="" class="wp-image-10890" srcset="https://virtuallyfun.com/wp-content/uploads/2021/03/windevvm.png 640w, https://virtuallyfun.com/wp-content/uploads/2021/03/windevvm-300x234.png 300w, https://virtuallyfun.com/wp-content/uploads/2021/03/windevvm-385x300.png 385w" sizes="auto, (max-width: 640px) 100vw, 640px" /></figure>



<p class="wp-block-paragraph">Looks like this has been available for 3 or 4 years now. Oh well.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://virtuallyfun.com/2021/03/08/windows-dev-vm/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>Christmas came early!</title>
		<link>https://virtuallyfun.com/2019/12/13/christmas-came-early/</link>
					<comments>https://virtuallyfun.com/2019/12/13/christmas-came-early/#comments</comments>
		
		<dc:creator><![CDATA[neozeed]]></dc:creator>
		<pubDate>Fri, 13 Dec 2019 07:51:08 +0000</pubDate>
				<category><![CDATA[microsoft windows]]></category>
		<category><![CDATA[random updates]]></category>
		<category><![CDATA[Visual C++]]></category>
		<category><![CDATA[Visual Studio 2005]]></category>
		<category><![CDATA[Windows NT 4.0]]></category>
		<guid isPermaLink="false">https://virtuallyfun.com/wordpress/?p=9937</guid>

					<description><![CDATA[Iv&#8217;e been in Japan the last 10 days, but upon my return to Hong Kong this little 9kg box was eagerly awaiting me! I know that &#8216;unboxing&#8217; donation videos are quite popular, but I thought I&#8217;d do the blog equivalent. &#8230; <a href="https://virtuallyfun.com/2019/12/13/christmas-came-early/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Iv&#8217;e been in Japan the last 10 days, but upon my return to Hong Kong this little 9kg box was eagerly awaiting me!</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="558" height="399" src="https://virtuallyfun.com/wp-content/uploads/2019/12/box.jpg" alt="" class="wp-image-9938" srcset="https://virtuallyfun.com/wp-content/uploads/2019/12/box.jpg 558w, https://virtuallyfun.com/wp-content/uploads/2019/12/box-300x215.jpg 300w, https://virtuallyfun.com/wp-content/uploads/2019/12/box-420x300.jpg 420w" sizes="auto, (max-width: 558px) 100vw, 558px" /></figure></div>



<p class="wp-block-paragraph">I know that &#8216;unboxing&#8217; donation videos are quite popular, but I thought I&#8217;d do the blog equivalent.  I don&#8217;t want to &#8216;out&#8217; the sender, although I did email them back a big THANKS, although I didn&#8217;t get a reply.  Maybe it&#8217;s an email thing but I wanted to tell them THANKS again!</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="454" height="591" src="https://virtuallyfun.com/wp-content/uploads/2019/12/box-CD-ROMS.jpg" alt="" class="wp-image-9939" srcset="https://virtuallyfun.com/wp-content/uploads/2019/12/box-CD-ROMS.jpg 454w, https://virtuallyfun.com/wp-content/uploads/2019/12/box-CD-ROMS-230x300.jpg 230w" sizes="auto, (max-width: 454px) 100vw, 454px" /></figure></div>



<p class="wp-block-paragraph">To start is a bunch of loose CD&#8217;s including old SDK&#8217;s, and the infamous Windows 2000 RC1 set including Dec Alpha builds of workstation &amp; server.  Also in there is Beta 3 of Windows 98!  Cool!</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="547" height="432" src="https://virtuallyfun.com/wp-content/uploads/2019/12/box-contents.jpg" alt="" class="wp-image-9940" srcset="https://virtuallyfun.com/wp-content/uploads/2019/12/box-contents.jpg 547w, https://virtuallyfun.com/wp-content/uploads/2019/12/box-contents-300x237.jpg 300w, https://virtuallyfun.com/wp-content/uploads/2019/12/box-contents-380x300.jpg 380w" sizes="auto, (max-width: 547px) 100vw, 547px" /></figure></div>



<p class="wp-block-paragraph">In the box was also Back Office 45, Visual C++ 6.0, a sealed copy of Windows 2000 Server, Visual Studio 2005 Standard and Expression Studio 2.</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="796" height="445" src="https://virtuallyfun.com/wp-content/uploads/2019/12/back-office-45.jpg" alt="" class="wp-image-9941" srcset="https://virtuallyfun.com/wp-content/uploads/2019/12/back-office-45.jpg 796w, https://virtuallyfun.com/wp-content/uploads/2019/12/back-office-45-300x168.jpg 300w, https://virtuallyfun.com/wp-content/uploads/2019/12/back-office-45-768x429.jpg 768w, https://virtuallyfun.com/wp-content/uploads/2019/12/back-office-45-500x280.jpg 500w" sizes="auto, (max-width: 796px) 100vw, 796px" /></figure></div>



<p class="wp-block-paragraph">I&#8217;ve always loved this, it&#8217;s NT 4.0 and all the good bits of 1997, like Exchange 5.5 &amp; IIS 4.0!  Also in there is a copy of Outlook 2000, so this is a much later build/packaging of Back Office 4.5 .  I&#8217;ve always wondered how many if any Back Office purchasers ever used SNA Server.  I&#8217;ve seen it something exclusively used in real enterprises that have site licenses anyways.</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="745" height="423" src="https://virtuallyfun.com/wp-content/uploads/2019/12/Visual-C-6.0-box.jpg" alt="" class="wp-image-9942" srcset="https://virtuallyfun.com/wp-content/uploads/2019/12/Visual-C-6.0-box.jpg 745w, https://virtuallyfun.com/wp-content/uploads/2019/12/Visual-C-6.0-box-300x170.jpg 300w, https://virtuallyfun.com/wp-content/uploads/2019/12/Visual-C-6.0-box-500x284.jpg 500w" sizes="auto, (max-width: 745px) 100vw, 745px" /></figure></div>



<p class="wp-block-paragraph">Visual C 6.0 is the last x86 compiler that was &#8216;pure&#8217; before the .NET invasion.  Although you can with a bit of work get 2003 and onward to build for strict Win32, but who wants to work?  This is getting increasingly hard to find, and getting far more expensive.  But it&#8217;s great to have this in retail in the box again!  (I used to have this and Visual Studio 97/6.0).</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="339" height="454" src="https://virtuallyfun.com/wp-content/uploads/2019/12/Windows-2000-box.jpg" alt="" class="wp-image-9943" srcset="https://virtuallyfun.com/wp-content/uploads/2019/12/Windows-2000-box.jpg 339w, https://virtuallyfun.com/wp-content/uploads/2019/12/Windows-2000-box-224x300.jpg 224w" sizes="auto, (max-width: 339px) 100vw, 339px" /></figure></div>



<p class="wp-block-paragraph">It almost feels wrong to break the seal on this, although I&#8217;ll probably do an active directory deployment eventually now that I have machines running in the USA, Hong Kong, and Japan.</p>



<p class="wp-block-paragraph">I&#8217;m super thankful for all of this, and if anyone else wants to send me their &#8216;old / obsolete junk&#8217; drop me a line!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://virtuallyfun.com/2019/12/13/christmas-came-early/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>VC6 Ultimate updates</title>
		<link>https://virtuallyfun.com/2019/03/08/vc6-ultimate-updates/</link>
					<comments>https://virtuallyfun.com/2019/03/08/vc6-ultimate-updates/#respond</comments>
		
		<dc:creator><![CDATA[neozeed]]></dc:creator>
		<pubDate>Fri, 08 Mar 2019 10:49:54 +0000</pubDate>
				<category><![CDATA[Visual C++]]></category>
		<category><![CDATA[Visual Studio 2003]]></category>
		<category><![CDATA[Visual Studio 2005]]></category>
		<category><![CDATA[Win32]]></category>
		<category><![CDATA[Win64]]></category>
		<guid isPermaLink="false">https://virtuallyfun.com/wordpress/?p=9259</guid>

					<description><![CDATA[I&#8217;ve been trading emails with various people from the project after I had made my post, and helping them integrate more of Visual Studio 2003 into the project and working through a few issues to bring far better compatibility to &#8230; <a href="https://virtuallyfun.com/2019/03/08/vc6-ultimate-updates/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">I&#8217;ve been trading emails with various people from the project after I had made my post, and helping them integrate more of Visual Studio 2003 into the project and working through a few issues to bring far better compatibility to VS 2003.</p>



<p class="wp-block-paragraph">And the best part is being able to build projects in parallel!</p>



<div class="wp-block-image"><figure class="aligncenter"><img loading="lazy" decoding="async" width="1024" height="661" src="https://virtuallyfun.com/wp-content/uploads/2019/03/dosbox-parallel-build-10-seconds-1024x661.png" alt="" class="wp-image-9261" srcset="https://virtuallyfun.com/wp-content/uploads/2019/03/dosbox-parallel-build-10-seconds-1024x661.png 1024w, https://virtuallyfun.com/wp-content/uploads/2019/03/dosbox-parallel-build-10-seconds-300x194.png 300w, https://virtuallyfun.com/wp-content/uploads/2019/03/dosbox-parallel-build-10-seconds-768x496.png 768w, https://virtuallyfun.com/wp-content/uploads/2019/03/dosbox-parallel-build-10-seconds-1200x775.png 1200w, https://virtuallyfun.com/wp-content/uploads/2019/03/dosbox-parallel-build-10-seconds.png 1306w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption>10.2 seconds in parallel!</figcaption></figure></div>



<p class="wp-block-paragraph">I haven&#8217;t ordered new processors, so the 2.1Ghz parts are&#8230; lacking.  However being able to use all available cores makes building DOSBox pretty fast.</p>



<div class="wp-block-image"><figure class="aligncenter"><img loading="lazy" decoding="async" width="467" height="138" src="https://virtuallyfun.com/wp-content/uploads/2019/03/dosbox-parallel-build-single-thread.png" alt="" class="wp-image-9262" srcset="https://virtuallyfun.com/wp-content/uploads/2019/03/dosbox-parallel-build-single-thread.png 467w, https://virtuallyfun.com/wp-content/uploads/2019/03/dosbox-parallel-build-single-thread-300x89.png 300w" sizes="auto, (max-width: 467px) 100vw, 467px" /></figure></div>



<p class="wp-block-paragraph">Restricting the build to a single process takes 1:13 while the full parallel build on this machine takes a mere 10 seconds!</p>



<p class="wp-block-paragraph"><a href="https://gitlab.com/VC6Ultimate/VC6Ultimate">So absolutely check out VC6Ultimate</a>!</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="827" height="1024" src="https://virtuallyfun.com/wp-content/uploads/2019/03/Visual-Studio-.NET-Enterprise-Architect-Front-827x1024.jpg" alt="" class="wp-image-9263" srcset="https://virtuallyfun.com/wp-content/uploads/2019/03/Visual-Studio-.NET-Enterprise-Architect-Front-827x1024.jpg 827w, https://virtuallyfun.com/wp-content/uploads/2019/03/Visual-Studio-.NET-Enterprise-Architect-Front-242x300.jpg 242w, https://virtuallyfun.com/wp-content/uploads/2019/03/Visual-Studio-.NET-Enterprise-Architect-Front-768x951.jpg 768w, https://virtuallyfun.com/wp-content/uploads/2019/03/Visual-Studio-.NET-Enterprise-Architect-Front-1200x1486.jpg 1200w, https://virtuallyfun.com/wp-content/uploads/2019/03/Visual-Studio-.NET-Enterprise-Architect-Front.jpg 1563w" sizes="auto, (max-width: 827px) 100vw, 827px" /><figcaption>Visual Studio .net Enterprise Architect<br></figcaption></figure>



<p class="wp-block-paragraph">I uh, <a href="https://archive.org/details/VisualStudioNETEnterpriseArchitect">also saw this on archive.org</a>, which may help people looking for this stuff from the future as old tools get harder and harder to find.  Especially bigger editions like the Enterprise Architect version.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://virtuallyfun.com/2019/03/08/vc6-ultimate-updates/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>VC6 Ultimate</title>
		<link>https://virtuallyfun.com/2019/02/26/vc6-ultimate/</link>
					<comments>https://virtuallyfun.com/2019/02/26/vc6-ultimate/#comments</comments>
		
		<dc:creator><![CDATA[neozeed]]></dc:creator>
		<pubDate>Tue, 26 Feb 2019 02:04:16 +0000</pubDate>
				<category><![CDATA[Visual C++]]></category>
		<category><![CDATA[Visual Studio 2003]]></category>
		<category><![CDATA[Visual Studio 2005]]></category>
		<category><![CDATA[Win32]]></category>
		<category><![CDATA[Win64]]></category>
		<guid isPermaLink="false">https://virtuallyfun.com/wordpress/?p=9244</guid>

					<description><![CDATA[I saw this the other day, VC6 Ultimate. It&#8217;s an interesting &#8216;update&#8217; on the old Visual C++ 6.0 product with an improved UI, along with updated compiler toolchain taken from later versions of Visual C++. Naturally something like this is &#8230; <a href="https://virtuallyfun.com/2019/02/26/vc6-ultimate/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image"><img loading="lazy" decoding="async" width="930" height="585" src="https://virtuallyfun.com/wp-content/uploads/2019/02/VC6-Ultimate.png" alt="" class="wp-image-9247" srcset="https://virtuallyfun.com/wp-content/uploads/2019/02/VC6-Ultimate.png 930w, https://virtuallyfun.com/wp-content/uploads/2019/02/VC6-Ultimate-300x189.png 300w, https://virtuallyfun.com/wp-content/uploads/2019/02/VC6-Ultimate-768x483.png 768w" sizes="auto, (max-width: 930px) 100vw, 930px" /><figcaption><br></figcaption></figure>



<p class="wp-block-paragraph">I saw this the other day, <a href="http://vc6.ultim.pw/">VC6 Ultimate</a>. It&#8217;s an interesting &#8216;update&#8217; on the old Visual C++ 6.0 product with an improved UI, along with updated compiler toolchain taken from later versions of Visual C++.  Naturally something like this is 1000000% unofficial.</p>



<p class="wp-block-paragraph">Features include:</p>



<ul class="wp-block-list"><li>Portable and compatible with Win7 / Win10<br>
bye bye regedit, hello .hjson setting file !<br>
also meaning it should not mess with your current install</li><li>More compatible compiler<br>
multicore version of VC7.1 compiler (It&#8217;s fast)<br>
you can compile with other compilers (64bit), but not debug yet</li><li>Real-time highlighting and diagnostics<br>
based on libclang 6.0 and compatible with VisualAssistX</li><li>Real multicursor editing<br>
search, sort, number, evaluate, etc. while in multicursor mode</li><li>Improved UX and UI<br>
32bit icons, dark skin, lot of visual hints<br>
multi-monitor friendly<br>
revamped dialogs (project settings, threads, breakpoints, â€¦)<br>
searchable command palette</li><li>It&#8217;s free (as in free beer)<br>
ever had to pay for a birthday present ? <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f609.png" alt="😉" class="wp-smiley" style="height: 1em; max-height: 1em;" /></li><li>Every change has a toggle<br>
only take what you like, but we can not check each combination</li><li>It&#8217;s an internal spare time project<br>
don&#8217;t expect everything to work in every setup, but feel free to reach out</li></ul>



<p class="wp-block-paragraph">Included in the bundle is the following compilers:</p>



<ul class="wp-block-list"><li>clang version 3.8.0 (branches/release_38)<br>
Target: i686-pc-windows-msvc</li><li>Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 13.10.6030 for 80&#215;86<br>
Copyright (C) Microsoft Corporation 1984-2002. All rights reserved.</li><li>Microsoft (R) C/C++ Optimizing Compiler Version 14.00.40310.41 for AMD64<br>
Copyright (C) Microsoft Corporation.  All rights reserved.</li></ul>



<p class="wp-block-paragraph">It&#8217;s an interesting project, although I tried to re-build some Visual C++ 2003 projects and it bombed out.  Maybe it&#8217;s just more geared towards VC 6 as indicated.</p>



<p class="wp-block-paragraph">You can download it here</p>



<p class="wp-block-paragraph"><a href="https://gitlab.com/VC6Ultimate/VC6Ultimate">https://gitlab.com/VC6Ultimate/VC6Ultimate</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://virtuallyfun.com/2019/02/26/vc6-ultimate/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Platform SDK &#038; DirectX for Visual C++ Express Edition 2005</title>
		<link>https://virtuallyfun.com/2017/09/18/platform-sdk-directx-visual-c-express-edition-2005/</link>
					<comments>https://virtuallyfun.com/2017/09/18/platform-sdk-directx-visual-c-express-edition-2005/#respond</comments>
		
		<dc:creator><![CDATA[neozeed]]></dc:creator>
		<pubDate>Mon, 18 Sep 2017 04:38:37 +0000</pubDate>
				<category><![CDATA[Visual C++]]></category>
		<category><![CDATA[Visual Studio 2005]]></category>
		<category><![CDATA[VisualC++ 2005 Express]]></category>
		<guid isPermaLink="false">https://virtuallyfun.com/?p=7422</guid>

					<description><![CDATA[So I&#8217;m back out, and on my limited machine (I did order something new, but on a group buying thing so it won&#8217;t be here for another SIX weeks&#8230; but then I&#8217;ll be on the road again so if I&#8217;m &#8230; <a href="https://virtuallyfun.com/2017/09/18/platform-sdk-directx-visual-c-express-edition-2005/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[<p><div id="attachment_7423" style="width: 646px" class="wp-caption aligncenter"><a href="https://virtuallyfun.com/wp-content/uploads/2017/09/Visual-C-2005-Express-Edition.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-7423" class="size-full wp-image-7423" src="https://virtuallyfun.com/wp-content/uploads/2017/09/Visual-C-2005-Express-Edition.png" alt="" width="636" height="490" /></a><p id="caption-attachment-7423" class="wp-caption-text">Visual C++ 2005 Express Edition</p></div></p>
<p>So I&#8217;m back out, and on my limited machine (I did order something new, but on a group buying thing so it won&#8217;t be here for another SIX weeks&#8230; but then I&#8217;ll be on the road again so if I&#8217;m lucky 11 weeks&#8230;&#8230;..) I&#8217;m using Visual C++ 2005 Express Edition, which by default includes just enough to compile simple stdio CLI based stuff. Â To do anything more complicated you need what is known as the &#8216;Platform SDK&#8217;. Â And to match up for the time period I&#8217;m using theÂ <a href="https://www.microsoft.com/en-hk/download/details.aspx?id=12261">WindowsÂ® Server 2003 SP1 Platform SDK Full Download</a>. And of course various <a href="https://virtuallyfun.com/2017/09/16/early-direct-x-sdks/">Direct X SDK&#8217;s</a> too.</p>
<p>For my benefit (maybe yours too), here is</p>
<ul>
<li><a href="http://vpsland.superglobalmegacorp.com/install/Visual%20Studio%202005%20Express/Visual%20C++%202005%20Express%20Edition.iso">Visual C++ 2005 Express Edition.iso</a></li>
<li><a href="http://vpsland.superglobalmegacorp.com/install/Visual%20Studio%202005%20Express/Visual%20C++%202005%20Express%20Edition%20SP1.exe">Visual C++ 2005 Express Edition SP1.exe</a></li>
<li><a href="http://vpsland.superglobalmegacorp.com/old/install/Visual%20Studio%202005%20Express/Windows%ae%20Server%202003%20SP1%20Platform%20SDK%20Full%20Download.tar">WindowsÂ® Server 2003 SP1 Platform SDK Full Download.tar</a></li>
</ul>
<p>Instructions to <a href="https://web.archive.org/web/20150101072933/https://msdn.microsoft.com/en-us/library/ms235626(v=vs.80).aspx">integrate the Platform SDK are here</a>, although I did set this to match the expected paths that were in my setup after installing service pack 1. Â However I still had to manually do step 4:</p>
<p style="padding-left: 30px;">Update the default.js file (found in %VSINSTALLDIR%\VC\VCWizards\AppWiz\Generic\Application\scripts\1033) and change the two lines that read:</p>
<p style="padding-left: 30px;">LinkTool.AdditionalDependencies = &#8220;kernel32.lib $(NoInherit)&#8221;;</p>
<p style="padding-left: 30px;">to:</p>
<p style="padding-left: 30px;">// LinkTool.AdditionalDependencies = &#8220;kernel32.lib $(NoInherit)&#8221;;</p>
<p>And I was all set to go.</p>
<p>To make life easier (for me)Â this is headers &amp; libs for the platform SDK + Direct X 6 &amp; 7, and only 18 megabytes, instead of hundreds to download <a href="http://vpsland.superglobalmegacorp.com/install/Visual%20Studio%202005%20Express/platform_directx6_7.7z">platform_directx6_7.7z</a>Â  This has the directories and whatnot where they were expected, although you&#8217;ll have to manually add in the Direct X include &amp; library directories, if you want to do anything with Direct X.</p>
<p style="padding-left: 30px;">From theÂ <b>Tools</b>Â menu in Visual Studio, selectÂ <b>Options</b>. TheÂ <b>Options</b>Â dialog box appears.</p>
<p style="padding-left: 30px;">From theÂ <b>Options</b>Â dialog box, expand theÂ <b>Projects and Solutions</b>Â node and selectÂ <b>VC++ Directories</b>. In that section, add the following paths to the appropriate subsection:</p>
]]></content:encoded>
					
					<wfw:commentRss>https://virtuallyfun.com/2017/09/18/platform-sdk-directx-visual-c-express-edition-2005/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
