<?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>mingw &#8211; Virtually Fun</title>
	<atom:link href="https://virtuallyfun.com/category/mingw/feed/" rel="self" type="application/rss+xml" />
	<link>https://virtuallyfun.com</link>
	<description>Fun with Virtualization</description>
	<lastBuildDate>Wed, 19 Mar 2025 20:05:28 +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>Rebuilding Darwin from source: Part 1 Qemu</title>
		<link>https://virtuallyfun.com/2024/04/22/rebuilding-darwin-from-source-part-1-qemu/</link>
					<comments>https://virtuallyfun.com/2024/04/22/rebuilding-darwin-from-source-part-1-qemu/#comments</comments>
		
		<dc:creator><![CDATA[neozeed]]></dc:creator>
		<pubDate>Mon, 22 Apr 2024 17:43:42 +0000</pubDate>
				<category><![CDATA[Darwin]]></category>
		<category><![CDATA[mingw]]></category>
		<category><![CDATA[NeXTSTEP]]></category>
		<category><![CDATA[QEMU]]></category>
		<category><![CDATA[Win32]]></category>
		<guid isPermaLink="false">https://virtuallyfun.com/?p=14278</guid>

					<description><![CDATA[Back in the old old.. It&#8217;s hard to believe it&#8217;s been 7 years ago since I reproduced Ncommander&#8216;s adventure in building the Mach kernel from Darwin 0.1 sources that had been found years ago. At one point we&#8217;d managed to &#8230; <a href="https://virtuallyfun.com/2024/04/22/rebuilding-darwin-from-source-part-1-qemu/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Back in the old old..</p>



<figure class="wp-block-image size-full"><a href="/wp-content/uploads/2024/04/7-years-ago-darwin.png" target="_blank" rel="noreferrer noopener"><img fetchpriority="high" decoding="async" width="825" height="545" src="/wp-content/uploads/2024/04/7-years-ago-darwin.png" alt="" class="wp-image-14279" srcset="https://virtuallyfun.com/wp-content/uploads/2024/04/7-years-ago-darwin.png 825w, https://virtuallyfun.com/wp-content/uploads/2024/04/7-years-ago-darwin-300x198.png 300w, https://virtuallyfun.com/wp-content/uploads/2024/04/7-years-ago-darwin-768x507.png 768w, https://virtuallyfun.com/wp-content/uploads/2024/04/7-years-ago-darwin-454x300.png 454w" sizes="(max-width: 825px) 100vw, 825px" /></a><figcaption class="wp-element-caption">7 years ago!</figcaption></figure>



<p class="wp-block-paragraph">It&#8217;s hard to believe it&#8217;s been 7 years ago since I reproduced <a href="https://www.youtube.com/@NCommander" target="_blank" rel="noreferrer noopener">Ncommander</a>&#8216;s adventure in building the Mach kernel from Darwin 0.1 sources that had been found years ago.  At one point we&#8217;d managed to build enough of Darwin to do a dump/restore onto a new disk image, and have a mostly built Darwin system save for a hand full of files.</p>



<p class="wp-block-paragraph">Time goes on by, and memories fade, and I thought it&#8217;d be worth going over the adventure, yet again.  Just as it was true back then, I thought I&#8217;d reproduce the same setup that I&#8217;d been using back then.  Qemu was a new and exciting thing back then, and </p>



<p class="wp-block-paragraph">the Disk driver is <em>VERY</em> picky and honestly ancient Qemu is a pretty solid option to emulate NeXTSTEP/OPENSTEP/Rhapsody with some patches to both 0.8 &amp; 0.9 by Michael Engel, which change a nested interrupt and add support for a busmouse, as the PS/2 mouse doesn&#8217;t work for some unknown reason.  I know many are scared of old Qemu, but the disk support is pretty solid and the CPU recompilation is very fast, so having to rely on MinGW v3 isn&#8217;t so terrible.</p>



<p class="wp-block-paragraph">While I had hid away a lot of these resources on <a href="https://archive.org/details/qemuwin32-nextstep-mingw32" target="_blank" rel="noreferrer noopener">archive.org</a>, I thought it was best to just go back to the oldest post I had where I had painfully documented how to compile Qemu and get it working with <a href="https://web.archive.org/web/20061113122333/http://forums.bsdnexus.com/viewtopic.php?pid=9344" target="_blank" rel="noreferrer noopener">NeXTSTEP, back on BSDnexus</a>. I&#8217;m so glad I took the time so long ago to not only write it down, and add screenshots, but also tag the version numbers.  Software drift, especially free software can be so difficult to pin down, and it&#8217;s nice to be able to return to a known good value.  I went ahead and placed the recreated toolchain <a href="https://archive.org/details/min-gw-3-installed">over on archive.org</a>.</p>



<p class="wp-block-paragraph">Rhapsody is a weird OS, in that NeXT had kind of given up on the OS market after their NeXT RISC Workstation had basically died with the 88k, and even their early abandoned PowerPC 601 aka <a href="https://github.com/neozeed/Darwin_0.1/blob/main/kernel/mach/machine.h#L237" target="_blank" rel="noreferrer noopener">MC98000/98601</a> port.  Apple had left a few of the <a href="https://github.com/neozeed/Darwin_0.1/tree/main/architecture/changelog" target="_blank" rel="noreferrer noopener">changelogs</a>, in the source code.  It&#8217;s very interesting stuff!  I guess to go off on my own tangent NeXT was just too early, the cube with it&#8217;s Unix &amp; magnetic optical media and great audio DSP capabilities was just too ahead of the curve.  What the cube couldn&#8217;t pull off in 1988, the iMac and OS X sure did in 2001.</p>



<p class="wp-block-paragraph">I also added UDP support to this Qemu so I could use the <a href="/2024/03/29/looking-at-unixware-7-1-1-on-vmware-qemu-yet-again/" target="_blank" rel="noreferrer noopener">HecnetNT bridge trick</a> giving me the ability to telnet/ftp into the VM greatly reducing my pain.  Back in the day I had used NFS and the network slirp redirection.  But I like having direct access so much more!</p>



<p class="wp-block-paragraph">Rhapsody throws up yet another fun &#8216;road block&#8217; in that the mouse buttons map backwards for some reason.  It&#8217;s a trivial fix in the source code, but I made it a runtime option in case I needed or wanted to run NeXTSTEP.  And it was a good thing, as I did need to find the NXLock.h file for building one part of Darwin.</p>



<p class="wp-block-paragraph">When building Darwin, I started with the last x86 version of NeXTSTEP that was available, and that was <a href="https://winworldpc.com/product/mac-os-x/rhapsody"></a>Apple &#8221;Rhapsody&#8221; / Titan1U x86 Developer Release 2. My thinking at the time and still is that the closer you can get your build to whatever they were using as &#8216;current&#8217; the easier this will be.</p>



<p class="wp-block-paragraph">Rhapsody can support an 8GB disk, so let&#8217;s go with that.  This always has an issue with people that try much larger, and just fail, so for my sake and yours let&#8217;s just go with 8.</p>



<pre class="wp-block-code"><code>qemu-img.exe create -f vmdk rhapsody.vmdk 8G</code></pre>



<p class="wp-block-paragraph">And to simply start off the installer:</p>



<pre class="wp-block-code"><code>qemu -L pc-bios -m 128 ^
-k en-us ^
-rhapsodymouse ^
-hda rhapsody.vmdk ^
-cdrom rhapsody_dr2_x86.iso ^
-fda rhapsody_dr2_x86_InstallationFloppy.img ^
-boot a</code></pre>



<p class="wp-block-paragraph">You may be wondering, why only use 128MB of RAM?  Well there is a bug in the shipping Rhapsody kernel that prevents booting on machines with more than 192? MB of RAM. Naturally, once we are to the point of building our own kernels this won&#8217;t be a problem but for now we are limited.</p>



<p class="wp-block-paragraph">The bootloader will give us a few seconds to do anything fancy, I just hit -v so I always have the verbose boot.</p>



<figure class="wp-block-image size-full"><img decoding="async" width="722" height="427" src="/wp-content/uploads/2024/04/rhapsody-install-01.png" alt="" class="wp-image-14283" srcset="https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-01.png 722w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-01-300x177.png 300w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-01-500x296.png 500w" sizes="(max-width: 722px) 100vw, 722px" /></figure>



<p class="wp-block-paragraph">From here it&#8217;s just a few options to go thru the installer</p>



<figure class="wp-block-image size-full"><img decoding="async" width="722" height="427" src="/wp-content/uploads/2024/04/rhapsody-install-02.png" alt="" class="wp-image-14284" srcset="https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-02.png 722w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-02-300x177.png 300w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-02-500x296.png 500w" sizes="(max-width: 722px) 100vw, 722px" /></figure>



<p class="wp-block-paragraph">And a disk change is required</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="722" height="427" src="/wp-content/uploads/2024/04/rhapsody-install-03.png" alt="" class="wp-image-14285" srcset="https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-03.png 722w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-03-300x177.png 300w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-03-500x296.png 500w" sizes="auto, (max-width: 722px) 100vw, 722px" /></figure>



<p class="wp-block-paragraph">CONTROL+ALT+2 will bring up the monitor prompt, where we can change the disk</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="722" height="427" src="/wp-content/uploads/2024/04/rhapsody-install-04.png" alt="" class="wp-image-14286" srcset="https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-04.png 722w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-04-300x177.png 300w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-04-500x296.png 500w" sizes="auto, (max-width: 722px) 100vw, 722px" /></figure>



<p class="wp-block-paragraph">CONTROL+ALT+1 will return us to the console. Now we have to go through all the SCSI cards, and kind of compatible IDE cards</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="722" height="427" src="/wp-content/uploads/2024/04/rhapsody-install-05.png" alt="" class="wp-image-14287" srcset="https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-05.png 722w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-05-300x177.png 300w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-05-500x296.png 500w" sizes="auto, (max-width: 722px) 100vw, 722px" /></figure>



<p class="wp-block-paragraph">Further..</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="722" height="427" src="/wp-content/uploads/2024/04/rhapsody-install-06.png" alt="" class="wp-image-14288" srcset="https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-06.png 722w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-06-300x177.png 300w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-06-500x296.png 500w" sizes="auto, (max-width: 722px) 100vw, 722px" /></figure>



<p class="wp-block-paragraph">Further still&#8230;</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="722" height="427" src="/wp-content/uploads/2024/04/rhapsody-install-07.png" alt="" class="wp-image-14289" srcset="https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-07.png 722w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-07-300x177.png 300w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-07-500x296.png 500w" sizes="auto, (max-width: 722px) 100vw, 722px" /></figure>



<p class="wp-block-paragraph">And how select the Primary/Secondary(DUAL) EIDE/ATAPI Device Controller (v5.01)</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="722" height="427" src="/wp-content/uploads/2024/04/rhapsody-install-08.png" alt="" class="wp-image-14290" srcset="https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-08.png 722w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-08-300x177.png 300w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-08-500x296.png 500w" sizes="auto, (max-width: 722px) 100vw, 722px" /></figure>



<p class="wp-block-paragraph">We only need the one driver, so we&#8217;re good to go!</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="722" height="427" src="/wp-content/uploads/2024/04/rhapsody-install-09.png" alt="" class="wp-image-14291" srcset="https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-09.png 722w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-09-300x177.png 300w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-09-500x296.png 500w" sizes="auto, (max-width: 722px) 100vw, 722px" /></figure>



<p class="wp-block-paragraph">Continuing onwards will now start the kernel, along with a change to graphical mode.  Just like a NeXT!</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="642" height="507" src="/wp-content/uploads/2024/04/rhapsody-install-10.png" alt="" class="wp-image-14292" srcset="https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-10.png 642w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-10-300x237.png 300w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-10-380x300.png 380w" sizes="auto, (max-width: 642px) 100vw, 642px" /></figure>



<p class="wp-block-paragraph">Now we can confirm again we want to install</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="642" height="507" src="/wp-content/uploads/2024/04/rhapsody-install-11.png" alt="" class="wp-image-14293" srcset="https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-11.png 642w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-11-300x237.png 300w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-11-380x300.png 380w" sizes="auto, (max-width: 642px) 100vw, 642px" /></figure>



<p class="wp-block-paragraph">As you can see there is our hard disk!</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="642" height="507" src="/wp-content/uploads/2024/04/rhapsody-install-12.png" alt="" class="wp-image-14294" srcset="https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-12.png 642w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-12-300x237.png 300w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-12-380x300.png 380w" sizes="auto, (max-width: 642px) 100vw, 642px" /></figure>



<p class="wp-block-paragraph">In the future we don&#8217;t need to dual boot so, just give it the entire disk.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="642" height="507" src="/wp-content/uploads/2024/04/rhapsody-install-13.png" alt="" class="wp-image-14295" srcset="https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-13.png 642w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-13-300x237.png 300w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-13-380x300.png 380w" sizes="auto, (max-width: 642px) 100vw, 642px" /></figure>



<p class="wp-block-paragraph">A few more 1&#8217;s and we are finally installing!</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="642" height="507" src="/wp-content/uploads/2024/04/rhapsody-install-14.png" alt="" class="wp-image-14296" srcset="https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-14.png 642w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-14-300x237.png 300w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-14-380x300.png 380w" sizes="auto, (max-width: 642px) 100vw, 642px" /></figure>



<p class="wp-block-paragraph">Trust me it&#8217;s fast on Qemu!</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="642" height="507" src="/wp-content/uploads/2024/04/rhapsody-install-15.png" alt="" class="wp-image-14297" srcset="https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-15.png 642w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-15-300x237.png 300w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-15-380x300.png 380w" sizes="auto, (max-width: 642px) 100vw, 642px" /></figure>



<p class="wp-block-paragraph">And just like that, we&#8217;ve completed the first part of the install.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="642" height="507" src="/wp-content/uploads/2024/04/rhapsody-install-16.png" alt="" class="wp-image-14299" srcset="https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-16.png 642w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-16-300x237.png 300w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-16-380x300.png 380w" sizes="auto, (max-width: 642px) 100vw, 642px" /></figure>



<p class="wp-block-paragraph">You can use CONTROL+ALT+2 to toggle back to the monitor and type in</p>



<p class="wp-block-paragraph">eject fda</p>



<p class="wp-block-paragraph">to eject the floppy, then it&#8217;s CONTROL+ALT+1 to return to the display and have it reboot.  Qemu won&#8217;t try to boot to the hard disk, and with no disk in the drive, it&#8217;ll hang at the BIOS.  Now is a good time to close Qemu and backup the hard disk.  Mostly because I hate repeating this stuff.</p>



<p class="wp-block-paragraph">To try to make this a bit easier, I&#8217;ve made a f<a href="https://archive.org/details/nic_20240423" target="_blank" rel="noreferrer noopener">loppy disk with the NE2000 driver and updated kernel in one plac</a>e where they can be injected via single user mode. A simple enough config file:</p>



<pre class="wp-block-code"><code>qemu -L pc-bios -m 128 ^
-k en-us ^
-rhapsodymouse ^
-hda rhapsody.vmdk ^
-cdrom rhapsody_dr2_x86.iso ^
-fda <a href="https://archive.org/details/nic_20240423" target="_blank" rel="noreferrer noopener">nic.flp</a> ^
-boot c</code></pre>



<p class="wp-block-paragraph">Type in -s for SINGLE USER MODE.  This is where a lot of Unix problems got solved in the old days</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="722" height="427" src="/wp-content/uploads/2024/04/rhapsody-install-20.png" alt="" class="wp-image-14302" srcset="https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-20.png 722w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-20-300x177.png 300w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-20-500x296.png 500w" sizes="auto, (max-width: 722px) 100vw, 722px" /></figure>



<p class="wp-block-paragraph">It&#8217;s a little tricky as this does involve typing.  As instructed we need to check the hard disk prior to mounting it read/write</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="642" height="507" src="/wp-content/uploads/2024/04/rhapsody-install-21.png" alt="" class="wp-image-14303" srcset="https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-21.png 642w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-21-300x237.png 300w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-21-380x300.png 380w" sizes="auto, (max-width: 642px) 100vw, 642px" /></figure>



<p class="wp-block-paragraph">run the commands:</p>



<pre class="wp-block-code"><code>fsck -y /dev/rhd0a
mount -w /</code></pre>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="642" height="507" src="/wp-content/uploads/2024/04/rhapsody-install-22.png" alt="" class="wp-image-14304" srcset="https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-22.png 642w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-22-300x237.png 300w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-22-380x300.png 380w" sizes="auto, (max-width: 642px) 100vw, 642px" /></figure>



<p class="wp-block-paragraph">Now we can mount the floppy disk</p>



<pre class="wp-block-code"><code>mkdir /mnt
mount /dev/fd0a /mnt
ls /mnt</code></pre>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="642" height="507" src="/wp-content/uploads/2024/04/rhapsody-install-23.png" alt="" class="wp-image-14305" srcset="https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-23.png 642w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-23-300x237.png 300w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-23-380x300.png 380w" sizes="auto, (max-width: 642px) 100vw, 642px" /></figure>



<p class="wp-block-paragraph">I&#8217;ve included both the kernel &amp; NE2000 driver in one file, and JUST the NE2000 driver in the other.  For my sake I use the first one, update.tar.gz as I wanted to use the newer kernel ASAP.  tar -zxvf didn&#8217;t want to run, so I did a rather awkward version to achieve the same thing.</p>



<pre class="wp-block-code"><code>cat /mnt/update.tar.gz | gzip -dc | tar -xvf -</code></pre>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="642" height="507" src="/wp-content/uploads/2024/04/rhapsody-install-24.png" alt="" class="wp-image-14306" srcset="https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-24.png 642w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-24-300x237.png 300w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-24-380x300.png 380w" sizes="auto, (max-width: 642px) 100vw, 642px" /></figure>



<p class="wp-block-paragraph">With the files in place, you can now shut down the system with a simple</p>



<pre class="wp-block-code"><code>shutdown -h now</code></pre>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="642" height="507" src="/wp-content/uploads/2024/04/rhapsody-install-25.png" alt="" class="wp-image-14307" srcset="https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-25.png 642w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-25-300x237.png 300w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-25-380x300.png 380w" sizes="auto, (max-width: 642px) 100vw, 642px" /></figure>



<p class="wp-block-paragraph">Once more again, I&#8217;d shut down the emulator, and backup the hard disk. If anything goes wrong you can restore your backups at any phase, at least saving some time!</p>



<p class="wp-block-paragraph">Next is the graphical install.  In this case I use the hecnet bridge to give full access, you can setup with the slirp driver with a simple &#8220;-net user&#8221; but it doesn&#8217;t matter at the moment  Since I opted for the newer kernel, I can take advantage of the 512MB RAM.</p>



<pre class="wp-block-code"><code>qemu -L pc-bios -m 512 ^
-k en-us ^
-rhapsodymouse ^
-hda rhapsody.vmdk ^
-cdrom rhapsody_dr2_x86.iso ^
-fda rhapsody_dr2_x86_InstallationFloppy.img ^
-net nic,model=ne2k_pci,vlan=5 ^
-net socket,udp=0.0.0.0:5001,remote=127.0.0.1:5000 ^
-boot c ^</code></pre>



<p class="wp-block-paragraph">Booting Rhapsody</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="642" height="507" src="/wp-content/uploads/2024/04/rhapsody-install-30.png" alt="" class="wp-image-14308" srcset="https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-30.png 642w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-30-300x237.png 300w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-30-380x300.png 380w" sizes="auto, (max-width: 642px) 100vw, 642px" /></figure>



<p class="wp-block-paragraph">Now we have to setup the hardware.  It should be somewhat straight forward, first we start with the monitor.  The mouse should be working although I find that I have to move slowly.  Sorry it tracks weird on real hardware too.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="642" height="507" src="/wp-content/uploads/2024/04/rhapsody-install-31.png" alt="" class="wp-image-14309" srcset="https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-31.png 642w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-31-300x237.png 300w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-31-380x300.png 380w" sizes="auto, (max-width: 642px) 100vw, 642px" /></figure>



<p class="wp-block-paragraph">The Cirrus Logic GD5446 should be detected automatically, I just go with the default 1MB</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="642" height="507" src="/wp-content/uploads/2024/04/rhapsody-install-32.png" alt="" class="wp-image-14310" srcset="https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-32.png 642w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-32-300x237.png 300w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-32-380x300.png 380w" sizes="auto, (max-width: 642px) 100vw, 642px" /></figure>



<p class="wp-block-paragraph">Next under the mice, select the PS/2 mouse and remove it</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="642" height="507" src="/wp-content/uploads/2024/04/rhapsody-install-33.png" alt="" class="wp-image-14311" srcset="https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-33.png 642w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-33-300x237.png 300w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-33-380x300.png 380w" sizes="auto, (max-width: 642px) 100vw, 642px" /></figure>



<p class="wp-block-paragraph">This leaves us with the Bus Mouse driver.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="642" height="507" src="/wp-content/uploads/2024/04/rhapsody-install-34.png" alt="" class="wp-image-14312" srcset="https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-34.png 642w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-34-300x237.png 300w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-34-380x300.png 380w" sizes="auto, (max-width: 642px) 100vw, 642px" /></figure>



<p class="wp-block-paragraph">Under the network tab, the NE2000 should be automatically detected.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="642" height="507" src="/wp-content/uploads/2024/04/rhapsody-install-35.png" alt="" class="wp-image-14313" srcset="https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-35.png 642w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-35-300x237.png 300w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-35-380x300.png 380w" sizes="auto, (max-width: 642px) 100vw, 642px" /></figure>



<p class="wp-block-paragraph">On the last tab, I make a habit of removing the Parallel port freeing IRQ 7, in case I wanted it for something else.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="642" height="507" src="/wp-content/uploads/2024/04/rhapsody-install-36.png" alt="" class="wp-image-14314" srcset="https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-36.png 642w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-36-300x237.png 300w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-36-380x300.png 380w" sizes="auto, (max-width: 642px) 100vw, 642px" /></figure>



<p class="wp-block-paragraph">Back to the summary, we now have Cirrus Logic video, NE2k networking, with no SCSI, no Audio.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="642" height="507" src="/wp-content/uploads/2024/04/rhapsody-install-37.png" alt="" class="wp-image-14315" srcset="https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-37.png 642w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-37-300x237.png 300w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-37-380x300.png 380w" sizes="auto, (max-width: 642px) 100vw, 642px" /></figure>



<p class="wp-block-paragraph">With the config saved, now we can just install as is.  I un-installed Japanese, but it doesn&#8217;t matter.  You absolutely need the Development Tools, so may as well go with eveything.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="642" height="507" src="/wp-content/uploads/2024/04/rhapsody-install-38.png" alt="" class="wp-image-14316" srcset="https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-38.png 642w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-38-300x237.png 300w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-38-380x300.png 380w" sizes="auto, (max-width: 642px) 100vw, 642px" /></figure>



<p class="wp-block-paragraph">The installation only takes a few minutes and we are ready to reboot</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="642" height="507" src="/wp-content/uploads/2024/04/rhapsody-install-39.png" alt="" class="wp-image-14317" srcset="https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-39.png 642w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-39-300x237.png 300w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-39-380x300.png 380w" sizes="auto, (max-width: 642px) 100vw, 642px" /></figure>



<p class="wp-block-paragraph">The kernel will now shut down.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="642" height="507" src="/wp-content/uploads/2024/04/rhapsody-install-39b.png" alt="" class="wp-image-14318" srcset="https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-39b.png 642w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-39b-300x237.png 300w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-39b-380x300.png 380w" sizes="auto, (max-width: 642px) 100vw, 642px" /></figure>



<p class="wp-block-paragraph">Once more again this is a great time to make another backup of the hard disk.  At this point this is a great backup to save, as we&#8217;ve installed the OS, and selected drivers, in the next reboot we&#8217;ll be personalizing the operating system.</p>



<p class="wp-block-paragraph">We can re-run the last config once the disk has been saved.  We&#8217;ll be greeted with a message that the Server isn&#8217;t responding.  Answer YES to continue without networking.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="642" height="507" src="/wp-content/uploads/2024/04/rhapsody-install-40.png" alt="" class="wp-image-14323" srcset="https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-40.png 642w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-40-300x237.png 300w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-40-380x300.png 380w" sizes="auto, (max-width: 642px) 100vw, 642px" /></figure>



<p class="wp-block-paragraph">From here we are in the Setup Assistant, taking a nod from MacOS 8</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="802" height="627" src="/wp-content/uploads/2024/04/rhapsody-install-41.png" alt="" class="wp-image-14324" srcset="https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-41.png 802w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-41-300x235.png 300w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-41-768x600.png 768w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-41-384x300.png 384w" sizes="auto, (max-width: 802px) 100vw, 802px" /></figure>



<p class="wp-block-paragraph">I use USA keyboards. The best keyboards!  I touch type so I don&#8217;t have to deal with weird layouts.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="802" height="627" src="/wp-content/uploads/2024/04/rhapsody-install-42.png" alt="" class="wp-image-14325" srcset="https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-42.png 802w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-42-300x235.png 300w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-42-768x600.png 768w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-42-384x300.png 384w" sizes="auto, (max-width: 802px) 100vw, 802px" /></figure>



<p class="wp-block-paragraph">Specify for a LAN connection</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="802" height="627" src="/wp-content/uploads/2024/04/rhapsody-install-43.png" alt="" class="wp-image-14326" srcset="https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-43.png 802w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-43-300x235.png 300w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-43-768x600.png 768w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-43-384x300.png 384w" sizes="auto, (max-width: 802px) 100vw, 802px" /></figure>



<p class="wp-block-paragraph">There is no DHCP support so specify a manual IP address.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="802" height="627" src="/wp-content/uploads/2024/04/rhapsody-install-44.png" alt="" class="wp-image-14327" srcset="https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-44.png 802w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-44-300x235.png 300w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-44-768x600.png 768w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-44-384x300.png 384w" sizes="auto, (max-width: 802px) 100vw, 802px" /></figure>



<p class="wp-block-paragraph">The default stuff is just wrong.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="802" height="627" src="/wp-content/uploads/2024/04/rhapsody-install-45.png" alt="" class="wp-image-14328" srcset="https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-45.png 802w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-45-300x235.png 300w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-45-768x600.png 768w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-45-384x300.png 384w" sizes="auto, (max-width: 802px) 100vw, 802px" /></figure>



<p class="wp-block-paragraph">On my LAN this is good enough.  DONT add a router.  It&#8217;ll just confuse it.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="802" height="627" src="/wp-content/uploads/2024/04/rhapsody-install-46.png" alt="" class="wp-image-14329" srcset="https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-46.png 802w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-46-300x235.png 300w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-46-768x600.png 768w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-46-384x300.png 384w" sizes="auto, (max-width: 802px) 100vw, 802px" /></figure>



<p class="wp-block-paragraph">We don&#8217;t have or want NetInfo.  This would be the server to give out IP addresses, and authentication.  We don&#8217;t need it!</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="802" height="627" src="/wp-content/uploads/2024/04/rhapsody-install-47.png" alt="" class="wp-image-14330" srcset="https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-47.png 802w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-47-300x235.png 300w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-47-768x600.png 768w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-47-384x300.png 384w" sizes="auto, (max-width: 802px) 100vw, 802px" /></figure>



<p class="wp-block-paragraph">Leave the DNS servers blank</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="802" height="627" src="/wp-content/uploads/2024/04/rhapsody-install-48.png" alt="" class="wp-image-14331" srcset="https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-48.png 802w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-48-300x235.png 300w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-48-768x600.png 768w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-48-384x300.png 384w" sizes="auto, (max-width: 802px) 100vw, 802px" /></figure>



<p class="wp-block-paragraph">You can setup any location, it doesn&#8217;t matter.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="802" height="627" src="/wp-content/uploads/2024/04/rhapsody-install-49.png" alt="" class="wp-image-14332" srcset="https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-49.png 802w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-49-300x235.png 300w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-49-768x600.png 768w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-49-384x300.png 384w" sizes="auto, (max-width: 802px) 100vw, 802px" /></figure>



<p class="wp-block-paragraph">Likewise, with NTP, turn it off.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="802" height="627" src="/wp-content/uploads/2024/04/rhapsody-install-50.png" alt="" class="wp-image-14321" srcset="https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-50.png 802w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-50-300x235.png 300w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-50-768x600.png 768w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-50-384x300.png 384w" sizes="auto, (max-width: 802px) 100vw, 802px" /></figure>



<p class="wp-block-paragraph">We will then get the option to set the date/time manually.  The default time is far too old and it&#8217;ll break stuff.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="802" height="627" src="/wp-content/uploads/2024/04/rhapsody-install-51.png" alt="" class="wp-image-14322" srcset="https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-51.png 802w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-51-300x235.png 300w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-51-768x600.png 768w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-51-384x300.png 384w" sizes="auto, (max-width: 802px) 100vw, 802px" /></figure>



<p class="wp-block-paragraph">Next up is user accounts.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="802" height="627" src="/wp-content/uploads/2024/04/rhapsody-install-52.png" alt="" class="wp-image-14335" srcset="https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-52.png 802w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-52-300x235.png 300w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-52-768x600.png 768w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-52-384x300.png 384w" sizes="auto, (max-width: 802px) 100vw, 802px" /></figure>



<p class="wp-block-paragraph">I always make local accounts.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="802" height="627" src="/wp-content/uploads/2024/04/rhapsody-install-53.png" alt="" class="wp-image-14336" srcset="https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-53.png 802w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-53-300x235.png 300w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-53-768x600.png 768w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-53-384x300.png 384w" sizes="auto, (max-width: 802px) 100vw, 802px" /></figure>



<p class="wp-block-paragraph">Come up with some creative name</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="802" height="627" src="/wp-content/uploads/2024/04/rhapsody-install-54.png" alt="" class="wp-image-14337" srcset="https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-54.png 802w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-54-300x235.png 300w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-54-768x600.png 768w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-54-384x300.png 384w" sizes="auto, (max-width: 802px) 100vw, 802px" /></figure>



<p class="wp-block-paragraph">and a password</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="802" height="627" src="/wp-content/uploads/2024/04/rhapsody-install-55.png" alt="" class="wp-image-14338" srcset="https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-55.png 802w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-55-300x235.png 300w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-55-768x600.png 768w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-55-384x300.png 384w" sizes="auto, (max-width: 802px) 100vw, 802px" /></figure>



<p class="wp-block-paragraph">I don&#8217;t have it doing any automatic login.  You can if you want, it&#8217;s all up to you, this one doesn&#8217;t matter.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="802" height="627" src="/wp-content/uploads/2024/04/rhapsody-install-56.png" alt="" class="wp-image-14339" srcset="https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-56.png 802w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-56-300x235.png 300w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-56-768x600.png 768w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-56-384x300.png 384w" sizes="auto, (max-width: 802px) 100vw, 802px" /></figure>



<p class="wp-block-paragraph">Next is an Administrator password</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="802" height="627" src="/wp-content/uploads/2024/04/rhapsody-install-57.png" alt="" class="wp-image-14340" srcset="https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-57.png 802w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-57-300x235.png 300w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-57-768x600.png 768w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-57-384x300.png 384w" sizes="auto, (max-width: 802px) 100vw, 802px" /></figure>



<p class="wp-block-paragraph">And now we can apply our changes.  </p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="802" height="627" src="/wp-content/uploads/2024/04/rhapsody-install-58.png" alt="" class="wp-image-14341" srcset="https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-58.png 802w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-58-300x235.png 300w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-58-768x600.png 768w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-58-384x300.png 384w" sizes="auto, (max-width: 802px) 100vw, 802px" /></figure>



<p class="wp-block-paragraph">It takes seconds!</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="802" height="627" src="/wp-content/uploads/2024/04/rhapsody-install-59.png" alt="" class="wp-image-14342" srcset="https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-59.png 802w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-59-300x235.png 300w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-59-768x600.png 768w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-59-384x300.png 384w" sizes="auto, (max-width: 802px) 100vw, 802px" /></figure>



<p class="wp-block-paragraph">And now we&#8217;ere done.  You may want yet another backup as this is tedious!</p>



<p class="wp-block-paragraph">With the final configured backup in hand, now we can boot back one more time, and now we&#8217;re in SVGA mode! </p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="802" height="627" src="/wp-content/uploads/2024/04/rhapsody-install-70.png" alt="" class="wp-image-14344" srcset="https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-70.png 802w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-70-300x235.png 300w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-70-768x600.png 768w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-70-384x300.png 384w" sizes="auto, (max-width: 802px) 100vw, 802px" /><figcaption class="wp-element-caption">Rhapsody DR2 Login Screen</figcaption></figure>



<p class="wp-block-paragraph">Logging in as root will give me the desktop</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="802" height="627" src="/wp-content/uploads/2024/04/rhapsody-install-72.png" alt="" class="wp-image-14345" srcset="https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-72.png 802w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-72-300x235.png 300w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-72-768x600.png 768w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-install-72-384x300.png 384w" sizes="auto, (max-width: 802px) 100vw, 802px" /><figcaption class="wp-element-caption">Desktop</figcaption></figure>



<p class="wp-block-paragraph">And there we are, all installed.</p>



<p class="wp-block-paragraph">For anyone brave enough to have read all of this, but wants the quick and easy version, it&#8217;s up on <a href="https://archive.org/details/rhapsody-install-ready-to-configure" target="_blank" rel="noreferrer noopener">archive.org</a>!</p>



<p class="wp-block-paragraph">In <a href="/2024/04/23/rebuilding-darwin-from-source-part-2-building-the-kernel/" target="_blank" rel="noreferrer noopener">part two I&#8217;ll pick up</a> with the source CD-ROM I&#8217;ve prepared, so we can start compiling Darwin!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://virtuallyfun.com/2024/04/22/rebuilding-darwin-from-source-part-1-qemu/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
			</item>
		<item>
		<title>Missing link for Basilisk I found</title>
		<link>https://virtuallyfun.com/2021/09/13/missing-link-for-basilisk-i-found/</link>
					<comments>https://virtuallyfun.com/2021/09/13/missing-link-for-basilisk-i-found/#respond</comments>
		
		<dc:creator><![CDATA[neozeed]]></dc:creator>
		<pubDate>Mon, 13 Sep 2021 13:30:20 +0000</pubDate>
				<category><![CDATA[68000]]></category>
		<category><![CDATA[BasiliskII]]></category>
		<category><![CDATA[mingw]]></category>
		<category><![CDATA[source code]]></category>
		<category><![CDATA[UAE]]></category>
		<guid isPermaLink="false">https://virtuallyfun.com/wordpress/?p=11331</guid>

					<description><![CDATA[Actually I held onto this, as I wanted to do something crazy for that Marchintosh thing but life got in the way it fell by the wayside, and well now it&#8217;s September, and I already have a Qemu instance running &#8230; <a href="https://virtuallyfun.com/2021/09/13/missing-link-for-basilisk-i-found/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Actually I held onto this, as I wanted to do something crazy for that Marchintosh thing but life got in the way it fell by the wayside, and well now it&#8217;s September, and I already have a <a href="https://virtuallyfun.com/wordpress/2021/09/02/qemus-macintosh-quadra-in-alpha-usability-runs-a-ux/" target="_blank" rel="noreferrer noopener">Qemu instance running A/UX</a> so my &#8216;at best&#8217; hope of Basilisk II with MMU emulation is all but moot.</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><a href="https://virtuallyfun.com/wp-content/uploads/2021/09/uae-basilisk-merge.png"><img loading="lazy" decoding="async" width="1024" height="409" src="https://virtuallyfun.com/wp-content/uploads/2021/09/uae-basilisk-merge-1024x409.png" alt="" class="wp-image-11332" srcset="https://virtuallyfun.com/wp-content/uploads/2021/09/uae-basilisk-merge-1024x409.png 1024w, https://virtuallyfun.com/wp-content/uploads/2021/09/uae-basilisk-merge-300x120.png 300w, https://virtuallyfun.com/wp-content/uploads/2021/09/uae-basilisk-merge-768x306.png 768w, https://virtuallyfun.com/wp-content/uploads/2021/09/uae-basilisk-merge-500x200.png 500w, https://virtuallyfun.com/wp-content/uploads/2021/09/uae-basilisk-merge.png 1248w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a><figcaption>Captain, oh Captain!</figcaption></figure></div>



<p class="wp-block-paragraph">While it may look like 2 very old emulators, which they are, the interesting thing here is that this old version of Basilisk that only has Macintosh Classic emulation is using the 68000 emulation core from UAE 0.6.8.  It took a lot of downloading stuff, a lot of other nonsense, but I eventually found it, and was able to diff around to find the changes made were rather inconsequential, there by letting me rebuild UAE back on top of Basilisk.</p>



<p class="wp-block-paragraph">My plan had been to either use far newer UAE cpu core, say from Previous as it has working MMU support, or Musashi.</p>



<p class="wp-block-paragraph">I was building hard coded for TDM GCC 5.1.0 on MinGW.  It doesn&#8217;t matter anymore but I threw it up on github since that is where all the cool kids are.</p>



<p class="wp-block-paragraph"><a href="https://github.com/neozeed/basilisk-uae-merge" target="_blank" rel="noreferrer noopener">https://github.com/neozeed/basilisk-uae-merge</a></p>



<p class="wp-block-paragraph">It&#8217;s absolutely pointless I guess, but maybe someone will find it interesting.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://virtuallyfun.com/2021/09/13/missing-link-for-basilisk-i-found/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Cockatrice III 0.5a update</title>
		<link>https://virtuallyfun.com/2020/10/28/cockatrice-iii-0-5a-update/</link>
					<comments>https://virtuallyfun.com/2020/10/28/cockatrice-iii-0-5a-update/#comments</comments>
		
		<dc:creator><![CDATA[neozeed]]></dc:creator>
		<pubDate>Wed, 28 Oct 2020 06:35:23 +0000</pubDate>
				<category><![CDATA[68000]]></category>
		<category><![CDATA[68030]]></category>
		<category><![CDATA[68040]]></category>
		<category><![CDATA[audio]]></category>
		<category><![CDATA[BasiliskII]]></category>
		<category><![CDATA[gcc]]></category>
		<category><![CDATA[m68k]]></category>
		<category><![CDATA[Macintosh]]></category>
		<category><![CDATA[MacOS]]></category>
		<category><![CDATA[mingw]]></category>
		<category><![CDATA[SDL]]></category>
		<guid isPermaLink="false">https://virtuallyfun.com/wordpress/?p=10569</guid>

					<description><![CDATA[Well this is a &#8216;small&#8217; update, but with a big change, the audio is for the most part working great now thanks to this fix from rakslice. Namely changing SDL to MSB: desired.format = AUDIO_S16MSB; And another MinGW tweak, and &#8230; <a href="https://virtuallyfun.com/2020/10/28/cockatrice-iii-0-5a-update/">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/2020/10/booz-cheers.jpg"><img loading="lazy" decoding="async" width="1002" height="627" src="https://virtuallyfun.com/wp-content/uploads/2020/10/booz-cheers.jpg" alt="" class="wp-image-10570" srcset="https://virtuallyfun.com/wp-content/uploads/2020/10/booz-cheers.jpg 1002w, https://virtuallyfun.com/wp-content/uploads/2020/10/booz-cheers-300x188.jpg 300w, https://virtuallyfun.com/wp-content/uploads/2020/10/booz-cheers-768x481.jpg 768w, https://virtuallyfun.com/wp-content/uploads/2020/10/booz-cheers-479x300.jpg 479w" sizes="auto, (max-width: 1002px) 100vw, 1002px" /></a><figcaption>Here&#8217;s to US!</figcaption></figure>



<p class="wp-block-paragraph">Well this is a &#8216;small&#8217; update, but with a big change, the audio is for the most part working great now thanks to <a href="https://sourceforge.net/p/cockatrice/git/ci/1fe8a2e005cf50f2d9bf27e3053a6a4f6ec0ce18/">this fix</a> from <a href="https://sourceforge.net/u/rakslice/">rakslice</a>.  Namely changing SDL to MSB:</p>



<pre class="wp-block-preformatted">desired.format = AUDIO_S16MSB;</pre>



<p class="wp-block-paragraph">And another MinGW tweak, and yeah it&#8217;s GREAT!</p>



<figure class="wp-block-image size-large"><a href="https://virtuallyfun.com/wp-content/uploads/2020/10/RealAudio-3-on-MacOS-8.1.jpg"><img loading="lazy" decoding="async" width="1002" height="627" src="https://virtuallyfun.com/wp-content/uploads/2020/10/RealAudio-3-on-MacOS-8.1.jpg" alt="" class="wp-image-10571" srcset="https://virtuallyfun.com/wp-content/uploads/2020/10/RealAudio-3-on-MacOS-8.1.jpg 1002w, https://virtuallyfun.com/wp-content/uploads/2020/10/RealAudio-3-on-MacOS-8.1-300x188.jpg 300w, https://virtuallyfun.com/wp-content/uploads/2020/10/RealAudio-3-on-MacOS-8.1-768x481.jpg 768w, https://virtuallyfun.com/wp-content/uploads/2020/10/RealAudio-3-on-MacOS-8.1-479x300.jpg 479w" sizes="auto, (max-width: 1002px) 100vw, 1002px" /></a></figure>



<p class="wp-block-paragraph">Even stuff like RealAudio work now!  I&#8217;ll add some self hosted video later as it&#8217;d just get struck from anything public.</p>



<p class="wp-block-paragraph">Also since the RealAudio player is timebombed for installing, I added some lazy offset to remove however many billions of ticks from the clock letting you jump in some random point in the past when it won&#8217;t care.</p>



<p class="wp-block-paragraph">I guess the final if any justification for a bump would be rebuilding with GCC 8.1.0 on MinGW.  I somehow butchered the slirp.h to make it too MinGW&#8217;ish so it won&#8217;t clean build on Linux or OS X, but I have re-butchered a private branch and it works.. I just need to merge and clean but I&#8217;m not in the mood at the moment.</p>



<p class="wp-block-paragraph">I could be crazy but it &#8220;feels&#8221; faster.</p>



<p class="wp-block-paragraph">At any rate, I found that System 7 is more agreeable to running Return to Zork, just use some toast image mounter from within MacOS, and it&#8217;ll run!</p>



<p class="wp-block-paragraph">Also there is some ULONGLONG weirdness going on, so I had to backout Peter&#8217;s changes for larger disks.  No doubt some standard type thing change in GCC 8.</p>



<p class="wp-block-paragraph">You can <a href="https://sourceforge.net/projects/cockatrice/">download binaries/source from Sourceforge</a>.</p>



<a href="https://sourceforge.net/projects/cockatrice/files/latest/download"><img loading="lazy" decoding="async" alt="Download Cockatrice III" src="https://a.fsdn.com/con/app/sf-download-button" width="276" height="48" srcset="https://a.fsdn.com/con/app/sf-download-button?button_size=2x 2x"></a><br>



<a href="https://sourceforge.net/projects/cockatrice/files/latest/download"><img decoding="async" alt="Download Cockatrice III" src="https://img.shields.io/sourceforge/dm/cockatrice.svg"></a>
]]></content:encoded>
					
					<wfw:commentRss>https://virtuallyfun.com/2020/10/28/cockatrice-iii-0-5a-update/feed/</wfw:commentRss>
			<slash:comments>9</slash:comments>
		
		
			</item>
		<item>
		<title>Couldn&#8217;t reserve space for Cygwin&#8217;s heap</title>
		<link>https://virtuallyfun.com/2020/08/24/couldnt-reserve-space-for-cygwins-heap/</link>
					<comments>https://virtuallyfun.com/2020/08/24/couldnt-reserve-space-for-cygwins-heap/#respond</comments>
		
		<dc:creator><![CDATA[neozeed]]></dc:creator>
		<pubDate>Mon, 24 Aug 2020 08:04:42 +0000</pubDate>
				<category><![CDATA[gcc]]></category>
		<category><![CDATA[microsoft windows]]></category>
		<category><![CDATA[mingw]]></category>
		<category><![CDATA[msys]]></category>
		<category><![CDATA[Win32]]></category>
		<guid isPermaLink="false">https://virtuallyfun.com/wordpress/?p=10451</guid>

					<description><![CDATA[I have this old toolchain that relies on MSYS 1.0 from 20+ years ago. It&#8217;s great. I know others always love the newer, but I&#8217;m happy with this one. Well this morning I wanted to rebuild some Qemu 0.90 thing &#8230; <a href="https://virtuallyfun.com/2020/08/24/couldnt-reserve-space-for-cygwins-heap/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="979" height="512" src="https://virtuallyfun.com/wp-content/uploads/2021/03/cygwinheap-problem.png" alt="" class="wp-image-10917" srcset="https://virtuallyfun.com/wp-content/uploads/2021/03/cygwinheap-problem.png 979w, https://virtuallyfun.com/wp-content/uploads/2021/03/cygwinheap-problem-300x157.png 300w, https://virtuallyfun.com/wp-content/uploads/2021/03/cygwinheap-problem-768x402.png 768w, https://virtuallyfun.com/wp-content/uploads/2021/03/cygwinheap-problem-500x261.png 500w" sizes="auto, (max-width: 979px) 100vw, 979px" /></figure>



<p class="wp-block-paragraph">I have this old toolchain that relies on MSYS 1.0 from 20+ years ago.  It&#8217;s great.  I know others always love the newer, but I&#8217;m happy with this one.</p>



<p class="wp-block-paragraph">Well this morning I wanted to rebuild some Qemu 0.90 thing and I got this fun error trying to run configure:</p>



<pre class="wp-block-code"><code>      0 &#91;main] us 0 init_cheap: VirtualAlloc pointer is null, Win32 error 487
AllocationBase 0x0, BaseAddress 0x71110000, RegionSize 0x440000, State 0x10000
d:\mingw\msys\bin\bash.exe: *** Couldn't reserve space for cygwin's heap, Win32 error 0
</code></pre>



<p class="wp-block-paragraph">What the heck?!  MSYS uses cygwin?  I guess I should have known.  So the solution is to <a href="https://blog.csdn.net/wzhg0508/article/details/46239761">&#8216;rebase&#8217; the DLL</a>, as it tries to take a static &#8216;grab&#8217; at some memory block, because&#8230;. I guess subsystems or loaded DLL&#8217;s suck?</p>



<p class="wp-block-paragraph">I rebooted and got the same error.</p>



<p class="wp-block-paragraph">So obviously it&#8217;s a lot more involved.</p>



<p class="wp-block-paragraph">So looking the rebase I have is part of the Platform SDK.  Maybe there are others.</p>



<pre class="wp-block-code"><code>D:\MinGW\msys\bin&gt;"D:\MinGW\include\directx\Microsoft Visual Studio 8\VC\PlatformSDK\Bin\rebase" -b 0x50000000 msys-1.0.dll

REBASE: Total Size of mapping 0x0000000000110000
REBASE: Range 0x0000000050000000 -0x0000000050110000</code></pre>



<p class="wp-block-paragraph">And now I can run stuff again. YAY.</p>



<p class="wp-block-paragraph">I&#8217;m sure this has been covered time and time again, but you know it&#8217;s mostly to remind me in another 20 years.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://virtuallyfun.com/2020/08/24/couldnt-reserve-space-for-cygwins-heap/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>MinGW and missing DLL&#8217;s</title>
		<link>https://virtuallyfun.com/2018/01/21/mingw-and-missing-dlls/</link>
					<comments>https://virtuallyfun.com/2018/01/21/mingw-and-missing-dlls/#comments</comments>
		
		<dc:creator><![CDATA[neozeed]]></dc:creator>
		<pubDate>Sun, 21 Jan 2018 12:12:27 +0000</pubDate>
				<category><![CDATA[binutils]]></category>
		<category><![CDATA[mingw]]></category>
		<guid isPermaLink="false">https://virtuallyfun.com/?p=8075</guid>

					<description><![CDATA[Stuff like this drives me crazy.Â  Once upon a time everything was statically linked, there were no DLL&#8217;s, and all exe&#8217;s had a lot of the same code in them, and people realized that the majority of a hard disk &#8230; <a href="https://virtuallyfun.com/2018/01/21/mingw-and-missing-dlls/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[<p><div id="attachment_8076" style="width: 1118px" class="wp-caption aligncenter"><a href="https://virtuallyfun.com/wp-content/uploads/2018/01/dll-error-1.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-8076" class="size-full wp-image-8076" src="https://virtuallyfun.com/wp-content/uploads/2018/01/dll-error-1.png" alt="" width="1108" height="424" /></a><p id="caption-attachment-8076" class="wp-caption-text">UGH</p></div></p>
<p>Stuff like this drives me crazy.Â  Once upon a time everything was statically linked, there were no DLL&#8217;s, and all exe&#8217;s had a lot of the same code in them, and people realized that the majority of a hard disk could literally contain the same thing over and over.Â  Not to mention that if you were to fix some bug in say, LIBC you would have to re-compile everything.Â  So we entered the brave new world of dynamic linking where we now live in the proverbial DLL hell, that although we did save space, we have things where slight variations in the same DLL can break things in unforeseen ways.Â  People have tried various things such as weak linking, Side by side assemblies, Frameworks, and all kinds of things to try to keep things together.</p>
<p>Honestly it&#8217;s just easier to go back, and statically link things, and just re-build as needed.</p>
<p>common culprits of MinGW based stuff always include:</p>
<ul>
<li>libwinpthread-1.dll</li>
<li>libgcc_s_dw2-1.dll</li>
<li>libstdc++-6.dll</li>
</ul>
<p>ugh.</p>
<p>The hard one is the pthread library.Â  If you try to link it statically it&#8217;ll try to link everything else statically and not every DLL can link statically (SDL<strong>*</strong> <em>keep reading</em>).Â  But GCC / Binutils does have the option to turn various features on and off through the link string</p>
<p>-static-libstdc++ -static-libgcc -Wl,-Bstatic -lstdc++ -lpthread -Wl,-Bdynamic</p>
<p>As you can see, everything after &#8220;-Wl,-Bstatic&#8221; will be linked statically, while everything after &#8220;-Wl,-Bdynamic&#8221; will go back to being dynamically linked.</p>
<p>Ok, that is great but what about SDL, you may ask.Â  Well sure it&#8217;s a DLL, but even DLL&#8217;s come from somewhere.Â  Download the source, build it yourself and you can directly link the objects that make up the DLL.Â  In version 1.2.15 they live in the .libs directory.</p>
<p>SDL-1.2.15\build\.libs\*.o</p>
<p>And on Windows, if you get weird errors like:</p>
<p>SDL_dx5events.o: In function `DX5_DInputInit&#8217;:<br />
SDL-1.2.15/./src/video/windx5/SDL_dx5events.c:183: undefined reference to `IID_IDirectInputDevice2A&#8217;</p>
<p>Just add theÂ -ldxguid library and you can link this too.Â  I&#8217;m sure once upon a time people may not have had DirectX 5 or higher, but this isn&#8217;t 1997.</p>
<p>And please at least test your programs with no path, so that way you are aware of what is needed for re-distribution.</p>
<p>set path=.<br />
D:\dosbox-code-0-4068\dosbox\trunk\src&gt;dosbox.exe</p>
<p><div id="attachment_8077" style="width: 654px" class="wp-caption aligncenter"><a href="https://virtuallyfun.com/wp-content/uploads/2018/01/DOSBox-SVN-with-DPI-scaling-issues.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-8077" class="size-full wp-image-8077" src="https://virtuallyfun.com/wp-content/uploads/2018/01/DOSBox-SVN-with-DPI-scaling-issues.png" alt="" width="644" height="461" /></a><p id="caption-attachment-8077" class="wp-caption-text">DOSBox SVN</p></div></p>
<p>It gets so old when people never test.Â  And people freak out trying to download DLL&#8217;s from weird sites, and you know that never ends well.</p>
<p>Oh yeah, and a static version of DOSBox is 4MB.</p>
<p>4,033,550 dosbox.exe</p>
<p>I know that was massive a long long time ago, but today?</p>
]]></content:encoded>
					
					<wfw:commentRss>https://virtuallyfun.com/2018/01/21/mingw-and-missing-dlls/feed/</wfw:commentRss>
			<slash:comments>12</slash:comments>
		
		
			</item>
		<item>
		<title>Porting Catacomb3D to MS-DOS (DJGPP v1/GO32).</title>
		<link>https://virtuallyfun.com/2017/08/31/porting-catacomb3d-ms-dos-djgpp-v1go32/</link>
					<comments>https://virtuallyfun.com/2017/08/31/porting-catacomb3d-ms-dos-djgpp-v1go32/#respond</comments>
		
		<dc:creator><![CDATA[neozeed]]></dc:creator>
		<pubDate>Thu, 31 Aug 2017 13:25:22 +0000</pubDate>
				<category><![CDATA[djgpp]]></category>
		<category><![CDATA[DOSBox]]></category>
		<category><![CDATA[DPMI]]></category>
		<category><![CDATA[gcc]]></category>
		<category><![CDATA[i386]]></category>
		<category><![CDATA[mingw]]></category>
		<category><![CDATA[MS-DOS]]></category>
		<guid isPermaLink="false">https://virtuallyfun.com/?p=7269</guid>

					<description><![CDATA[No really, it&#8217;s Catacomb 3-D: The Descent. Â First ported to 32-bit SDL by NotStiller. Â Me being the person I am, I fixed a slight bug regarding binary files on Windows, and MS-DOS, then cleaned up some of the C++ syntax &#8230; <a href="https://virtuallyfun.com/2017/08/31/porting-catacomb3d-ms-dos-djgpp-v1go32/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[<p><div id="attachment_7270" style="width: 972px" class="wp-caption aligncenter"><a href="https://virtuallyfun.com/wp-content/uploads/2017/08/Catacomb-3-D-for-GO32.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-7270" class="size-full wp-image-7270" src="https://virtuallyfun.com/wp-content/uploads/2017/08/Catacomb-3-D-for-GO32.png" alt="" width="962" height="627" /></a><p id="caption-attachment-7270" class="wp-caption-text">Catacomb 3-D for GO32</p></div></p>
<p>No really, it&#8217;s <a href="https://www.gog.com/game/catacombs_pack">Catacomb 3-D: The Descent</a>. Â First ported to <a href="https://github.com/NotStiller/Catacomb3D">32-bit SDL by NotStiller</a>. Â Me being the person I am, I fixed a slight bug regarding binary files on Windows, and MS-DOS, then cleaned up some of the C++ syntax (yuck!) making it far more C89 friendly. Â And of course, hot off the heels of <a href="https://virtuallyfun.com/2017/07/29/null-doom-gcc-1-39-go32-dpmi/">DooM for GO32 DPMI</a>, I was able to get it to build and run using GCC 1.39 and GO32.</p>
<p>I know most people really won&#8217;t care, but I found it kind of interesting. Â I should try to see if it&#8217;ll run on actual hardware, just as a comparison of tightly optimized Borland C++ / Assembly vs 100% pure C on DJGPP. Â The best tech of 1991 for sure!</p>
<p>At current I just put the source up, <a href="https://sourceforge.net/p/crossdjgppv1/Catacomb3D/ci/master/tree/">you can git it here</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://virtuallyfun.com/2017/08/31/porting-catacomb3d-ms-dos-djgpp-v1go32/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>26th anniversary of Linux!</title>
		<link>https://virtuallyfun.com/2017/08/26/26th-anniversary-linux/</link>
					<comments>https://virtuallyfun.com/2017/08/26/26th-anniversary-linux/#respond</comments>
		
		<dc:creator><![CDATA[neozeed]]></dc:creator>
		<pubDate>Sat, 26 Aug 2017 07:22:25 +0000</pubDate>
				<category><![CDATA[binutils]]></category>
		<category><![CDATA[cross compiler]]></category>
		<category><![CDATA[gcc]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[microsoft windows]]></category>
		<category><![CDATA[mingw]]></category>
		<category><![CDATA[QEMU]]></category>
		<category><![CDATA[Win32]]></category>
		<category><![CDATA[Windows 10]]></category>
		<guid isPermaLink="false">https://virtuallyfun.com/?p=7254</guid>

					<description><![CDATA[As the joke goes: So it&#8217;s always a fun time for me to push my old projectÂ Ancient Linux on Windows. Â And what makes this so special? Â Well it&#8217;s a cross compiler for the ancient Linux kernels, along with source to &#8230; <a href="https://virtuallyfun.com/2017/08/26/26th-anniversary-linux/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[<p><a href="https://twitter.com/bbotezatu/status/768756952528723969?lang=en">As the joke goes</a>:</p>
<p><div id="attachment_7255" style="width: 1137px" class="wp-caption aligncenter"><a href="https://virtuallyfun.com/wp-content/uploads/2017/08/bake-a-cake.jpg"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-7255" class="size-full wp-image-7255" src="https://virtuallyfun.com/wp-content/uploads/2017/08/bake-a-cake.jpg" alt="" width="1127" height="900" /></a><p id="caption-attachment-7255" class="wp-caption-text">Happy 25th birthday, Linux! Here&#8217;s your f-ing cake, go ahead and compile it yourself.</p></div></p>
<p>So it&#8217;s always a fun time for me to push my old projectÂ <a href="https://sourceforge.net/projects/linux011/">Ancient Linux on Windows</a>. Â And what makes this so special? Â Well it&#8217;s a cross compiler for the ancient Linux kernels, along with source to the kernels so you can easily edit, compile and run early Linux from Windows!</p>
<p>As always the kernels I have built and done super basic testing on are:</p>
<ul>
<li>linux-0.10</li>
<li>linux-0.11</li>
<li>linux-0.12</li>
<li>linux-0.95c+</li>
<li>linux-0.96c</li>
<li>linux-0.97.6</li>
<li>linux-0.98.6</li>
</ul>
<p>All of these are a.out kernels, like things were back in the old days. Â You can edit stuff in notepad if you so wish, or any other editor. Â A MSYS environment is included, so you can just type in &#8216;make&#8217; and a kernel can be built, and it also can be tested in the included Qemu. Â I&#8217;ve updated a few things, first with <a href="https://virtuallyfun.com/2017/08/17/setting-windows-environment-variables-djgpp-gcc-based-compilers/">better environment variables</a>, and only tested on Windows 10. Â Although building a standalone linux EXE still requires a bit of work, it isn&#8217;t my goal here as this whole thing is instead geared around building kernels from source. Â I included bison in this build, so more of GCC is generated on the host. Â Not that I think it matters too much, although it ended up being an issue doing <a href="https://virtuallyfun.com/2017/08/17/uploaded-cross-djgpp-v1-environment-sourceforge/">DooM on GCC 1.39</a>.</p>
<p>So for people who want to relive the good old bad days of Linux, and want to do so from the comfort of Windows, this is your chance!</p>
<p><a href="https://virtuallyfun.com/wp-content/uploads/2017/08/ancient-linux-on-Windows.png"><img loading="lazy" decoding="async" class="size-full wp-image-7256 alignleft" src="https://virtuallyfun.com/wp-content/uploads/2017/08/ancient-linux-on-Windows.png" alt="" width="448" height="58" /></a><br />
<a href="https://sourceforge.net/projects/linux011/files/latest/download" rel="nofollow"><img decoding="async" src="https://img.shields.io/sourceforge/dt/linux011.svg" alt="Download Ancient Linux on Windows" /></a><br />
<a href="https://sourceforge.net/projects/linux011/files/latest/download" rel="nofollow"><img decoding="async" src="https://a.fsdn.com/con/app/sf-download-button" alt="Download Ancient Linux on Windows" /></a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://virtuallyfun.com/2017/08/26/26th-anniversary-linux/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>WSAPoll &#038; MinGW</title>
		<link>https://virtuallyfun.com/2017/02/11/wsapoll-mingw/</link>
					<comments>https://virtuallyfun.com/2017/02/11/wsapoll-mingw/#respond</comments>
		
		<dc:creator><![CDATA[neozeed]]></dc:creator>
		<pubDate>Sat, 11 Feb 2017 03:45:51 +0000</pubDate>
				<category><![CDATA[mingw]]></category>
		<category><![CDATA[Win32]]></category>
		<guid isPermaLink="false">https://virtuallyfun.com/?p=6770</guid>

					<description><![CDATA[For some reason if you try to use WSAPoll, you&#8217;ll get this fine error on linking: poll.c:(.text+0x26): undefined reference to `WSAPoll&#8217; Yeah. Turns out that it&#8217;s basically missing from the includes. Â Thanks to this hint, just simply add this into &#8230; <a href="https://virtuallyfun.com/2017/02/11/wsapoll-mingw/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[<p>For some reason if you try to use WSAPoll, you&#8217;ll get this fine error on linking:</p>
<p style="padding-left: 30px;">poll.c:(.text+0x26): undefined reference to `WSAPoll&#8217;</p>
<p>Yeah.</p>
<p>Turns out that it&#8217;s basically missing from the includes. Â <a href="https://libwebsockets.org/lws-api-doc-master/html/md_README_8build.html">Thanks to this hint</a>, just simply add this into your source/header after pulling in winsock2.h and it&#8217;ll link.</p>
<blockquote>
<div class="line">typedef struct pollfd {</div>
<div class="line"></div>
<div class="line">SOCKET fd;</div>
<div class="line">SHORT events;</div>
<div class="line">SHORT revents;</div>
<div class="line"></div>
<div class="line">} WSAPOLLFD, *PWSAPOLLFD, FAR *LPWSAPOLLFD;</div>
<div class="line"></div>
<div class="line">WINSOCK_API_LINKAGE int WSAAPI WSAPoll(LPWSAPOLLFD fdArray, ULONG fds, INT timeout);</div>
</blockquote>
<p>And now you can happily compile and link.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://virtuallyfun.com/2017/02/11/wsapoll-mingw/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Just for you, lucky Spanish user, GCC 3.0.4 for Windows NT (MinGW)</title>
		<link>https://virtuallyfun.com/2016/12/09/just-lucky-spanish-user-gcc-3-0-4-windows-nt-mingw/</link>
					<comments>https://virtuallyfun.com/2016/12/09/just-lucky-spanish-user-gcc-3-0-4-windows-nt-mingw/#comments</comments>
		
		<dc:creator><![CDATA[neozeed]]></dc:creator>
		<pubDate>Fri, 09 Dec 2016 13:43:28 +0000</pubDate>
				<category><![CDATA[gcc]]></category>
		<category><![CDATA[mingw]]></category>
		<category><![CDATA[Win32]]></category>
		<category><![CDATA[Windows NT 3.5]]></category>
		<category><![CDATA[Windows NT 3.51]]></category>
		<category><![CDATA[Windows NT 4.0]]></category>
		<guid isPermaLink="false">https://virtuallyfun.com/?p=6690</guid>

					<description><![CDATA[I cannot understand why you want this, or why I&#8217;m even going to do it. Â At this point in GCC history the winnt-3.5 target had been dumped in favour of going all in with Cygwin. Â So yeah, this does not &#8230; <a href="https://virtuallyfun.com/2016/12/09/just-lucky-spanish-user-gcc-3-0-4-windows-nt-mingw/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[<p><div id="attachment_6691" style="width: 1472px" class="wp-caption aligncenter"><a href="http://www.google.es/search?q=gcc+3.0+windows+nt&amp;ie=utf-8&amp;oe=utf-8&amp;aq=t&amp;rls=org.mozilla:en-US:official&amp;client=firefox-a&amp;gfe_rd=cr&amp;ei=FX5KWNjxHOaJ8Qff1ZDoAQ"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-6691" class="wp-image-6691 size-full" src="https://virtuallyfun.com/wp-content/uploads/2016/12/gcc-3.0-windows-nt.png" width="1462" height="59" /></a><p id="caption-attachment-6691" class="wp-caption-text">From Spain!</p></div></p>
<p>I cannot understand why you want this, or why I&#8217;m even going to do it. Â At this point in GCC history the winnt-3.5 target had been dumped in favour of going all in with Cygwin. Â So yeah, this does not either clearly configure, or compile. Â But a little bit of mashing files, and I have it at least compiling some assembly that can be translated into an object file that a later version of MinGW can actually compile.</p>
<p>All I&#8217;ve built is the gcc driver, the cpp pre-processor, and the cc1 aka C backend.<br />
<code><br />
D:\proj\gcc-3.0.4\gcc>xgcc -c -v hi.c<br />
Using builtin specs.<br />
Configured with:<br />
Thread model: single<br />
gcc version 3.0.4<br />
 cc1 -lang-c -v -iprefix ../lib/gcc-lib/i386-winnt35/3.0.4/ -D__GNUC__=3 -D__GNUC_MINOR__=0 -D__GNUC_PATCHLEVEL__=4 -Dunix -DWIN32 -D_WIN32 -DWINNT -D_M_IX86=300 -D_X86_=1 -D__STDC__=0 -DALMOST_STDC -D_MSC_VER=800 -D__stdcall=__attribute__((__stdcall__)) -D__cdecl=__attribute__((__cdecl__)) -D_cdecl=__attribute__((__cdecl__)) -D__unix__ -D__WIN32__ -D_WIN32 -D__WINNT__ -D_M_IX86=300 -D_X86_=1 -D__STDC__=0 -D__ALMOST_STDC__ -D_MSC_VER=800 -D__stdcall=__attribute__((__stdcall__)) -D__cdecl=__attribute__((__cdecl__)) -D__cdecl__=__attribute__((__cdecl__)) -D__unix -D__WIN32 -D__WINNT -D__ALMOST_STDC -D__cdecl=__attribute__((__cdecl__)) -Asystem=unix -Asystem=winnt -D__NO_INLINE__ -D__STDC_HOSTED__=1 -Acpu=i386 -Amachine=i386 -Di386 -D__i386 -D__i386__ -D__tune_i386__ hi.c -quiet -dumpbase hi.c -version -o C:\Users\jason\AppData\Local\Temp\ccpflisr.s<br />
GNU CPP version 3.0.4 (cpplib) (80386, BSD syntax)<br />
GNU C version 3.0.4 (i386-winnt35)<br />
        compiled by GNU C version 5.1.0.<br />
ignoring nonexistent directory "../lib/gcc-lib/i386-winnt35/3.0.4/include"<br />
ignoring nonexistent directory "../lib/gcc-lib/i386-winnt35/3.0.4/../../../../i386-winnt35/include"<br />
ignoring nonexistent directory "D:/pcem/building/MinGW/msys/1.0/local/include"<br />
ignoring nonexistent directory "NONE/include"<br />
ignoring nonexistent directory "D:/pcem/building/MinGW/msys/1.0/local/lib/gcc-lib/i386-winnt35/3.0.4/include"<br />
ignoring nonexistent directory "D:/pcem/building/MinGW/msys/1.0/local/lib/gcc-lib/i386-winnt35/3.0.4/../../../../i386-winnt35/include"<br />
ignoring nonexistent directory "/usr/include"<br />
#include "..." search starts here:<br />
End of search list.<br />
<command line>: warning: "__STDC__" redefined<br />
<builtin>: warning: this is the location of the previous definition<br />
<command line>: warning: "__STDC__" redefined<br />
<command line>: warning: this is the location of the previous definition<br />
hi.c: In function `main':<br />
hi.c:3: warning: return type of `main' is not `int'<br />
 as --traditional-format -o hi.o C:\Users\jason\AppData\Local\Temp\ccpflisr.s</p>
<p>D:\proj\gcc-3.0.4\gcc>gcc hi.o -o hi</p>
<p>D:\proj\gcc-3.0.4\gcc>hi<br />
Hello from GCC 3.0.4<br />
</code></p>
<p>So there you go, mysterious internet user! Â Download my source dump with binaries in the tree because I&#8217;m lazy.</p>
<p><a href="http://vpsland.superglobalmegacorp.com/install/mingw/gcc-3.0.4-MinGW.7z">gcc-3.0.4-MinGW.7z</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://virtuallyfun.com/2016/12/09/just-lucky-spanish-user-gcc-3-0-4-windows-nt-mingw/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>N64 cross GCC / Binutils for Win32</title>
		<link>https://virtuallyfun.com/2016/10/20/n64-cross-gcc-binutils-for-win32/</link>
					<comments>https://virtuallyfun.com/2016/10/20/n64-cross-gcc-binutils-for-win32/#comments</comments>
		
		<dc:creator><![CDATA[neozeed]]></dc:creator>
		<pubDate>Thu, 20 Oct 2016 14:26:59 +0000</pubDate>
				<category><![CDATA[cross compiler]]></category>
		<category><![CDATA[gcc]]></category>
		<category><![CDATA[mingw]]></category>
		<category><![CDATA[MIPS]]></category>
		<guid isPermaLink="false">https://virtuallyfun.com/?p=6504</guid>

					<description><![CDATA[Building GCC &#38; Binutils for the Nintendo 64 I had a request to help get a GCC+Binutils running as native win32 exe&#8217;s something comparable to the ancient &#8216;ultra&#8217; N64 toolchain done by Kyoto Microcomputer (resume pdf).  One interesting thing about &#8230; <a href="https://virtuallyfun.com/2016/10/20/n64-cross-gcc-binutils-for-win32/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[<h1>Building GCC &amp; Binutils for the Nintendo 64</h1>
<p>I had a request to help get a GCC+Binutils running as native win32 exe&#8217;s something comparable to the ancient &#8216;ultra&#8217; N64 toolchain done by <a href="http://www.kmckk.co.jp/en/">Kyoto Microcomputer</a> (<a href="http://www.kmckk.co.jp/en/img/about_KMC_en.pdf">resume pdf</a>).  One interesting thing about their toolchain is that they used a common object format for MS-DOS, DOS/V and MS-DOS on the PC-98 format, along with Win32.  However, the Win32 runtime doesn&#8217;t like Win64 environments.  On Win64 the exew32 driver just complains:</p>
<p style="padding-left: 30px;">Can&#8217;t allocate memory (Error Code=487)</p>
<p>However the stubs in all the exe&#8217;s reference exegcc98 exegccv DOS extender&#8217;s along with a exegcc. However, googling around yields nothing.</p>
<p>Running on a x86 version of Windows, however the tools run and report gcc 2.7.2 release 1.2 and the binutils version is simply 2.6 with BFD version 2.6.  So going with this, and the request to keep it 1997 vintage I went ahead with Gcc 2.7.2.3 and Binutils 2.8.1 as they are the end of the line in both trains of code.</p>
<p>To configure is really a snap, as both support the Windows NT platform directly</p>
<p style="padding-left: 30px;"><code>sh configure --host=i386-winnt3.5 --target=mips-elf</code></p>
<form id="form-t1_d8zrppl6n1" class="usertext warn-on-unload" action="https://www.reddit.com/user/derfherdez/#">
<div class="usertext-body may-blank-within md-container ">
<div class="md">
<p>I guess I should add that I build with <a href="http://tdm-gcc.tdragon.net/">TDM GCC 5.1</a>, and I use the incredibly ancient <a href="http://vpsland.superglobalmegacorp.com/install/mingw/MSYS-1.0.11-rc-1.exe">MSYS-1.0.11-rc-1</a>. It&#8217;s enough to bootstrap and build with!  Since my GCC is much newer, I did have to finagle some things.  Here is a quick list of my notes on what I had changed, and some justification.</p>
</div>
</div>
</form>
<h1><span style="text-decoration: underline;">Binutils 2.8.1 notes:</span></h1>
<p>include/fopen-same.h</p>
<p style="padding-left: 30px;">make sure this uses MS-DOS rb wb type constraints!</p>
<p>libiberty/xmalloc.c</p>
<p style="padding-left: 30px;">There is no sbrk on my MinGW32 &#8230; so comment out all the sbrk stuff.</p>
<p>bfd/targmatch.sed</p>
<p style="padding-left: 30px;">My sed LOVES UNIX style text files, so this one shouldn&#8217;t be in MS-DOS CRLF format.</p>
<p>binutils/objcopy.c</p>
<p style="padding-left: 30px;">mkdir only accepts the path on Win32.  Also there is now chown.</p>
<h1><span style="text-decoration: underline;">Gcc 2.7.2.3 notes:</span></h1>
<p>c-gperf.h</p>
<p style="padding-left: 30px;">&#8216;__inline&#8217; for is_reserved_word needs to be commented out.</p>
<p>config/mips/mips.h</p>
<p style="padding-left: 30px;">Set like the following for both ASM_FINAL_SPEC to prevent the t-mips from trying to be run.</p>
<p style="padding-left: 30px;">#define ASM_FINAL_SPEC &#8220;\<br />
+%{pipe:-}&#8221;</p>
<p>config/winnt/xm-winnt.h</p>
<p style="padding-left: 30px;">OBJECT_SUFFIX &#8220;.o&#8221;</p>
<p style="padding-left: 30px;">Just because we are on Windows NT, doesn&#8217;t mean we want an .obj object suffix.</p>
<p>gcc.c</p>
<p style="padding-left: 30px;">__spawnv : __spawnvp work better as _spawnv : _spawnvp</p>
<p>obstack.h</p>
<p style="padding-left: 30px;">*((void **)__o-&gt;next_free)++ = ((void *)datum);</p>
<p style="padding-left: 30px;">confuses newer compilers, with this error message:</p>
<p style="padding-left: 30px;">obstack.h:341:32: error: lvalue required as increment operand</p>
<p style="padding-left: 30px;">replace it with with:</p>
<p style="padding-left: 30px;">*(__o-&gt;next_free)++ = ((void *)datum);</p>
<p>So at the end I have a cross compiler, and I can generate object files, and link files that the final tool MILD can then use and produce N64 ROM images.  It&#8217;s not a 100% solution, as I don&#8217;t see any mention of MILD being GNU, however the compiler and binutils is running on Windows 10 x64!</p>
<p><div id="attachment_6506" style="width: 1289px" class="wp-caption aligncenter"><a href="https://virtuallyfun.com/wp-content/uploads/2016/10/n64-dev.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-6506" class="size-full wp-image-6506" src="https://virtuallyfun.com/wp-content/uploads/2016/10/n64-dev.png" alt="GCC cross compiling to the N64 target" width="1279" height="814" /></a><p id="caption-attachment-6506" class="wp-caption-text">GCC cross compiling to the N64 target</p></div></p>
<p>I built a few demos and tested with the <a href="http://www.emuparadise.me/Nintendo_64_Emulators/Windows/1964/49">1964 emulator</a>.</p>
<p>And there you have it.  For anyone who cares, you can download the toolchain + source here: <a href="http://vpsland.superglobalmegacorp.com/install/Win32/MIPS/winnt3.5_i386-mips_elf-gcc-2.7.2.3_binutils-2.8.1.7z">winnt3.5_i386-mips_elf-gcc-2.7.2.3_binutils-2.8.1.7z</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://virtuallyfun.com/2016/10/20/n64-cross-gcc-binutils-for-win32/feed/</wfw:commentRss>
			<slash:comments>12</slash:comments>
		
		
			</item>
	</channel>
</rss>
