<?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>Darwin &#8211; Virtually Fun</title>
	<atom:link href="https://virtuallyfun.com/category/darwin/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 3 Debian makes the world go &#8217;round</title>
		<link>https://virtuallyfun.com/2024/04/24/rebuilding-darwin-from-source-part-3-debian-makes-the-world-go-round/</link>
					<comments>https://virtuallyfun.com/2024/04/24/rebuilding-darwin-from-source-part-3-debian-makes-the-world-go-round/#comments</comments>
		
		<dc:creator><![CDATA[neozeed]]></dc:creator>
		<pubDate>Wed, 24 Apr 2024 15:22:52 +0000</pubDate>
				<category><![CDATA[Darwin]]></category>
		<category><![CDATA[NeXTSTEP]]></category>
		<category><![CDATA[QEMU]]></category>
		<category><![CDATA[source code]]></category>
		<guid isPermaLink="false">https://virtuallyfun.com/?p=14375</guid>

					<description><![CDATA[In the previous posts, we&#8217;ve gone through the excruciating fun of installing Rhapsody DR2, and of course built the Rhapsody kernel from source. But now it&#8217;s time to build the software that can build software. Enter the apt* Of course &#8230; <a href="https://virtuallyfun.com/2024/04/24/rebuilding-darwin-from-source-part-3-debian-makes-the-world-go-round/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">In the previous posts, we&#8217;ve gone through the excruciating fun of installing <a href="/2024/04/22/rebuilding-darwin-from-source-part-1-qemu/#comment-370181" target="_blank" rel="noreferrer noopener">Rhapsody DR2</a>, and of course built the <a href="/2024/04/23/rebuilding-darwin-from-source-part-2-building-the-kernel/" target="_blank" rel="noreferrer noopener">Rhapsody kernel from source</a>.  But now it&#8217;s time to build the software that can build software.</p>



<p class="wp-block-paragraph">Enter the apt*</p>



<p class="wp-block-paragraph">Of course we can&#8217;t just start building apt, rather we need to start at the 1990&#8217;s super star scripting language that revolutionized massive, shared code libraries, accelerating web development, and building the modern web, of course I&#8217;m talking about PERL.</p>



<p class="wp-block-paragraph">Even back in the original effort building Perl was a slog. Even with temporary wins with miniperl it quickly fell apart from missing symbols.  When it comes to the system libraries Darwin is not complete, rather it&#8217;s a lot of amputations from OPENSTEP.  Which of course, itself was amputated from NeXTSTEP.  I&#8217;m not sure what held back NeXTSTEP from being &#8216;open&#8217; back when &#8216;open&#8217; meant published specifications, not open source, or open in any other sense of the way, like The Open Group being a gatekeeping organization that is NOT open at all.</p>



<p class="wp-block-paragraph">Anyways, Perl from the Darwin 0.1 downloads &amp; the 0.3 CD-ROM don&#8217;t build.  I gave up and moved to the OS X Server version and that one did build!  As much as I could diff them out and find the breaking difference, honestly, it&#8217;s just easier to stick with what works.</p>



<figure class="wp-block-image size-full"><a href="https://web.archive.org/web/20150713033543/http://nextftp.onionmixer.net/next.68k.org/otto/html/pub/Darwin/PublicSource/Darwin/index.html" target="_blank" rel="noreferrer noopener"><img fetchpriority="high" decoding="async" width="734" height="721" src="/wp-content/uploads/2024/04/darwin-0.1-ftp-listing.png" alt="" class="wp-image-14377" srcset="https://virtuallyfun.com/wp-content/uploads/2024/04/darwin-0.1-ftp-listing.png 734w, https://virtuallyfun.com/wp-content/uploads/2024/04/darwin-0.1-ftp-listing-300x295.png 300w, https://virtuallyfun.com/wp-content/uploads/2024/04/darwin-0.1-ftp-listing-305x300.png 305w" sizes="(max-width: 734px) 100vw, 734px" /></a><figcaption class="wp-element-caption"><strong>/pub/Darwin/PublicSource/Darwin</strong></figcaption></figure>



<p class="wp-block-paragraph">I should point out that the source to Darwin was preserved on this now defunct site &#8220;<a href="https://web.archive.org/web/20150713033543/http://nextftp.onionmixer.net/next.68k.org/otto/html/pub/Darwin/PublicSource/Darwin/index.html">next.68k.org&#8221;</a>, which in turn was also preserved on the defunct site &#8220;<a href="https://web.archive.org/web/20150713033543/http://nextftp.onionmixer.net/next.68k.org/otto/html/pub/Darwin/PublicSource/Darwin/index.html">nextftp.onionmixer.net</a>&#8220;.  Amazing how mirrors go.  Other fun things on the ftp site include <a href="https://web.archive.org/web/20150713021238/http://nextftp.onionmixer.net/next.68k.org/otto/html/pub/MacOSX-Server/Sources/index.html" target="_blank" rel="noreferrer noopener">MacOSX-Server public sources</a>, which did include the Perl that we built.</p>



<figure class="wp-block-image size-full"><a href="https://archive.org/details/Darwin0.3CDCaseFront" target="_blank" rel="noreferrer noopener"><img decoding="async" width="650" height="561" src="https://virtuallyfun.com/wp-content/uploads/2024/04/darwin-fake-cd-cover-1.png" alt="" class="wp-image-15225" srcset="https://virtuallyfun.com/wp-content/uploads/2024/04/darwin-fake-cd-cover-1.png 650w, https://virtuallyfun.com/wp-content/uploads/2024/04/darwin-fake-cd-cover-1-300x259.png 300w, https://virtuallyfun.com/wp-content/uploads/2024/04/darwin-fake-cd-cover-1-348x300.png 348w" sizes="(max-width: 650px) 100vw, 650px" /></a><figcaption class="wp-element-caption">Darwin 0.3</figcaption></figure>



<p class="wp-block-paragraph">Darwin 0.3 however was pressed onto CD-ROM, and distributed out to the masses.  It took me a short while to get a tip to a hidden server that had a copy, which really was a massive breakthrough as it had a far more complete set of files than the 0.1 ftp dump.  However at the same time there are files in the 0.1 dump that are not in the 0.3.  Was there ever a 0.2?  I have no idea, the mailing lists don&#8217;t seem to have been preserved so I really don&#8217;t know.  Does anyone have any other ftp site archives?  Not to my knowledge but I&#8217;d be more than happy to be wrong.</p>



<p class="wp-block-paragraph">With a working Perl the next thing to do is to patch the buildtools &amp; dpkg to not be PowerPC centric.  It&#8217;s no secret that all the official effort going on was to get OpenSTEP up and running on Apple PowerPC&#8217;s and to transition away from OPENSTEP to Rhapsody, the MacOS 8 Platinum feeling type OS, where everyone was going to love the &#8216;Coca&#8217; API, and dump the old MacOS stuff or be forced to run it in the &#8216;BlueBox&#8217; MacOS 8 emulator.  Obviously this future didn&#8217;t happen as developers were not interested in rewriting for Steve&#8217;s decade+ fever dream of a Unix for the &#8216;rest of us&#8217;, instead they wanted their existing software to &#8216;just work&#8217; and the Carbon API had to be created, along with a drastically different and modern looking OS X.</p>



<pre class="wp-block-code"><code>-    $flags-&gt;{'RC_CFLAGS'} = '-arch i386 -arch ppc ' . &amp;liststring (@cflags);
-    $flags-&gt;{'RC_ARCHS'} = 'i386 ppc';
+    $flags-&gt;{'RC_CFLAGS'} = '-arch i386 ' . &amp;liststring (@cflags);
+    $flags-&gt;{'RC_ARCHS'} = 'i386';</code></pre>



<p class="wp-block-paragraph">Frequently in the build tools it&#8217;s a matter of looking for ppc/powerpc and replacing them with i386.  It&#8217;s really no surprise that Darwin always built on intel, and it had to, as it&#8217;s life depended on it.  Back when NeXT hit their first real big stumbling blocks of being a vertical platform is that they just couldn&#8217;t compete in the hardware space.  But dumping the 68k based black boxes, they could now take their software and port it to the much more coveted RISC platforms, and shipping with NeXTSTEP 3.3 they supported both SPARC &amp; HPPA.  There had always been talks of further platforms like MIPS or DEC Alpha, but these never materialized, much like the i860 which had been relegated to a simple Postscript co-processor.</p>



<p class="wp-block-paragraph">Anyways.. Keeping with yesterday&#8217;s setup, and of course the .<a href="https://sourceforge.net/projects/aapl-darwin/files/Revived/darwin-builder-04-23-2024.iso/download" target="_blank" rel="noreferrer noopener">darwin-builder-04-23-2024.iso</a> CD-ROM with all the stuff we need, let&#8217;s DOIT!</p>



<figure class="wp-block-image size-full"><img decoding="async" width="661" height="418" src="/wp-content/uploads/2024/04/phase-2-complted.png" alt="" class="wp-image-14380" srcset="https://virtuallyfun.com/wp-content/uploads/2024/04/phase-2-complted.png 661w, https://virtuallyfun.com/wp-content/uploads/2024/04/phase-2-complted-300x190.png 300w, https://virtuallyfun.com/wp-content/uploads/2024/04/phase-2-complted-474x300.png 474w" sizes="(max-width: 661px) 100vw, 661px" /><figcaption class="wp-element-caption">phase 2 completed</figcaption></figure>



<p class="wp-block-paragraph">With phase 3 completed we are now ready to build the rest of the system.  I hope you are excited!  As I&#8217;m sure hoping you kept the original disk layout from the prior setup, or I&#8217;ve totally trashed your system by now.</p>



<p class="wp-block-paragraph">I should say that deb files are just specially tagged &#8216;ar&#8217; archives, that contain a data &amp; control files telling apt how to process them.  In this case I&#8217;ve taken the cc_783.1-1_i386-apple-darwin.deb file and modified it to contain the OS X 10.0 modified CC compiler.  Apt had stumbled on building it, and I&#8217;m not interested into troubleshooting why or how.  Basically, use ar to extract the contents of the deb, then tar to expand the data, replace the files, tar to put the files back into the data tar file, and ar to rebuild the archive.</p>



<pre class="wp-block-code"><code>ar r cc_783.1-1_i386-apple-darwin.deb debian-binary control.tar.gz data.tar.gz</code></pre>



<p class="wp-block-paragraph">In this case, debian-binary is a text file that simply contains &#8216;2.0&#8217;.  Amazing!</p>



<p class="wp-block-paragraph">The first thing to do is build a manifest of what needs to be built.  I just simply extract all the &#8216;fixed&#8217; source that I&#8217;d used last time to build Darwin, apply patches were needed, and then kick off the process with a darwin-buildall.</p>



<pre class="wp-block-code"><code>ls -l | awk '{print "dir /usr/src/"$9 " all"}' | tail -n +2 | grep -v gdb |grep -v cc- &gt; /tmp/manifest.txt
</code></pre>



<p class="wp-block-paragraph">In this case I skip building the C compiler, as it takes too long, and I&#8217;ve already done it.  If you really want to do it, you can do so at your own leisure.  GDB has issues building, and I haven&#8217;t even begun to tackle them. As you can guess the format of the manifest is pretty simple:</p>



<pre class="wp-block-code"><code>dir /usr/src/CoreOSMakefiles-1/ all
dir /usr/src/Csu-1/ all
dir /usr/src/Libc-1/ all
dir /usr/src/LibcAT-1/ all</code></pre>



<p class="wp-block-paragraph">Debian uses deb&#8217;s to populate a fake root directory in order to cross compile the packages.  This is like installing multiple copies of the operating system, and that is why we use a separate scratch disk.  This can consume several gigabytes when it&#8217;s done.</p>



<p class="wp-block-paragraph">Also this presented the chicken/egg problem with how do you make debs from a system that needs debs?  Thankfully NCommander had done extensive work with Debian / Canonical and was able to fake enough of a &#8216;build-base&#8217; fakery that satisfied the build system just enough to start building stuff.  In this weird way all roads lead back to the first build-base.  Thankfully we live in the future where VMs are fast, and virtual disks are cheap.</p>



<p class="wp-block-paragraph">I then create the /built directory, where the compiled deb&#8217;s will be populated, and copy in my modified compiler Debian into the built directory so that it&#8217;s used in all the compiling.  On the CD-ROM I have 2 selections of deb files, the &#8216;deb&#8217; directory from when I&#8217;d originally done this back in 2017, and the &#8216;fresh&#8217; directory that I&#8217;ve just built.  You can always manually source where the debs some come.</p>



<p class="wp-block-paragraph">Kicking off the build is as simple as running:</p>



<pre class="wp-block-code"><code>darwin-buildall /tmp/manifest.txt /source/fresh /built</code></pre>



<p class="wp-block-paragraph">This will take.. a while.  It&#8217;s a lot of files to copy &amp; expand, and compiling takes a fair bit of a toll on the olde CPU.</p>



<p class="wp-block-paragraph">By default, 118 of the 127 can be built.</p>



<ul class="wp-block-list">
<li>boot-2  the sarld won&#8217;t compile as.. there is nothing to compile. I&#8217;m lost.  Also some driverkit headers didn&#8217;t make it into the packe!</li>



<li>cvs-1 is upset about bison grammar not being in usr local lib?!</li>



<li>flex is also upset about bison grammar locations.</li>



<li>libgpp ppc/ppc-nextstep/_G_config.h missing?!</li>



<li>perl.. should be patched __environ vs _environ</li>



<li>bootstrap-cmds &#8220;multiple definitions of symbol _migcom_untypd_VERS_STRING&#8221;</li>



<li>volfs seems plain broken but subdirecotories okay?</li>



<li>netinfo missing netinfo.defs and headers?! arpa/nameser.h missing (can just touch)</li>
</ul>



<p class="wp-block-paragraph">That just leaves AppleTalk &amp; HFS not building.  Which I believe is period correct.</p>



<p class="wp-block-paragraph">The good news is that the kernel that was built boots up seemingly fine.</p>



<figure class="wp-block-image size-full"><a href="https://archive.org/details/darwin-builder-04-23-2024" target="_blank" rel="noreferrer noopener"><img loading="lazy" decoding="async" width="802" height="627" src="/wp-content/uploads/2024/04/rhapsody-mach-5.5.png" alt="" class="wp-image-14385" srcset="https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-mach-5.5.png 802w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-mach-5.5-300x235.png 300w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-mach-5.5-768x600.png 768w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-mach-5.5-384x300.png 384w" sizes="auto, (max-width: 802px) 100vw, 802px" /></a><figcaption class="wp-element-caption">Rhapsody Kernel 5.5</figcaption></figure>



<p class="wp-block-paragraph">The NeXTSTEP, of course is to now setup a new disk image, and see what is involved in booting up!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://virtuallyfun.com/2024/04/24/rebuilding-darwin-from-source-part-3-debian-makes-the-world-go-round/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Rebuilding Darwin from source: Part 2 Building the kernel</title>
		<link>https://virtuallyfun.com/2024/04/23/rebuilding-darwin-from-source-part-2-building-the-kernel/</link>
					<comments>https://virtuallyfun.com/2024/04/23/rebuilding-darwin-from-source-part-2-building-the-kernel/#comments</comments>
		
		<dc:creator><![CDATA[neozeed]]></dc:creator>
		<pubDate>Tue, 23 Apr 2024 23:16:16 +0000</pubDate>
				<category><![CDATA[Darwin]]></category>
		<category><![CDATA[disk images]]></category>
		<category><![CDATA[NeXTSTEP]]></category>
		<category><![CDATA[QEMU]]></category>
		<category><![CDATA[source code]]></category>
		<category><![CDATA[virtual networking]]></category>
		<guid isPermaLink="false">https://virtuallyfun.com/?p=14358</guid>

					<description><![CDATA[Re-creating the steps from 7 years ago the first phase was to build the Darwin kernel. Like everything else, once you know what is involved, it&#8217;s not all that difficult. But as always finding out the steps to get there &#8230; <a href="https://virtuallyfun.com/2024/04/23/rebuilding-darwin-from-source-part-2-building-the-kernel/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Re-creating the steps from 7 years ago the first phase was to build the Darwin kernel.  Like everything else, once you know what is involved, it&#8217;s not all that difficult. But as always finding out the steps to get there is half the fun!</p>



<p class="wp-block-paragraph">I&#8217;m going to assume if you want to follow along, that you&#8217;ve completed the <a href="https://virtuallyfun.com/2024/04/22/rebuilding-darwin-from-source-part-1-qemu/" target="_blank" rel="noreferrer noopener">first part of this exercise</a>, and you have a Rhapsody DR 2 system up and running.  Due to some issues I&#8217;ve had with creating a lot of files &amp; filesystem corruption, we are going to create and add two more disks to the system. On Qemu we need to add them via the CLI:</p>



<pre class="wp-block-code"><code>qemu-img create -f vmdk source.vmdk 8G<br>qemu-img create -f vmdk scratch.vmdk 8G</code></pre>



<p class="wp-block-paragraph">Adding them to the command line gives us something like this:</p>



<pre class="wp-block-code"><code>qemu -L pc-bios -m 512 ^
-k en-us ^
-rhapsodymouse ^
-hda rhapsody.vmdk ^
-hdb source.vmdk ^
-hdd scratch.vmdk ^
-cdrom darwin-builder-04-23-2024.iso ^
-fda nic.flp ^
-net nic,model=ne2k_pci,vlan=1 ^
-net socket,udp=127.0.0.1:5001,remote=127.0.0.1:5000,vlan=1 ^
-boot c ^
%1 %2 %3 %4 %5 %6 %7</code></pre>



<p class="wp-block-paragraph">Additionally you&#8217;ll also need to download the current &#8216;darwin builder&#8217; ISO that I&#8217;ve put up on <a href="https://sourceforge.net/projects/aapl-darwin/files/Revived/" target="_blank" rel="noreferrer noopener">sourceforge</a>. As of today it is <a href="https://sourceforge.net/projects/aapl-darwin/files/Revived/darwin-builder-04-23-2024.iso/download" target="_blank" rel="noreferrer noopener">darwin-builder-04-23-2024.iso</a></p>



<p class="wp-block-paragraph">Step one is to boot into single user mode.  As we need to prep &amp; format the disks under Darwin before the system starts up.</p>



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



<p class="wp-block-paragraph">We need to check the hard disk, and then create the device names for the third 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-phase1-02.png" alt="" class="wp-image-14360" srcset="https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-phase1-02.png 642w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-phase1-02-300x237.png 300w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-phase1-02-380x300.png 380w" sizes="auto, (max-width: 642px) 100vw, 642px" /></figure>



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



<p class="wp-block-paragraph">Now we need to run the &#8216;disk&#8217; command which will abstract the whole volume creation.  There are numerous flags, but we don&#8217;t need all that many.</p>



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



<pre class="wp-block-code"><code>disk -i -l 'src' /dev/rhd1a<br>disk -i -l 'scratch' /dev/rhd2a</code></pre>



<p class="wp-block-paragraph">The output scrolls off the screen, so I didn&#8217;t capture it, but you&#8217;ll see all the inodes being created, it&#8217;s a lot of output!</p>



<p class="wp-block-paragraph">With the disks created, we can now shut down the VM</p>



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



<p class="wp-block-paragraph">and then restart Qemu, and let it boot up normally.  We&#8217;ll get to the login screen, login as the root user.</p>



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



<p class="wp-block-paragraph">The first thing I&#8217;d recommend is to drag the Terminal.app from /System/Administration to the desktop to make it easier to get to.  Rhapsody, unlike NeXTSTEP &amp; OPENSTEP doesn&#8217;t have any dock, as the goal back then was to make Rhapsody look and feel more like Platinum MacOS.</p>



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



<p class="wp-block-paragraph">The next thing to do is to make the system very insecure by allowing remote root logins.  It&#8217;s just easier to deal with.  You could use sed or just copy the one I provided from the CD-ROM.  </p>



<pre class="wp-block-code"><code>cp /source/ttys /etc</code></pre>



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



<p class="wp-block-paragraph">And with that in place, its easy enough to telnet into the VM so you can copy/paste stuff in and out with ease!</p>



<p class="wp-block-paragraph">You should now be able to verify that all 3 disks are mounted:</p>



<pre class="wp-block-code"><code># mount | grep hd.a
/dev/hd0a on / (local)
/dev/hd1a on /src (local)
/dev/hd2a on /scratch (local)</code></pre>



<p class="wp-block-paragraph">From here it should be very simple to kick off the build process:</p>



<pre class="wp-block-code"><code>/source/phase1.sh</code></pre>



<p class="wp-block-paragraph">And this will kick off the build, recreating all the fun steps I&#8217;d gone through so many years ago.  These projects now are building in the following order:</p>



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



<li>driverkit-139.1-1</li>



<li>cc-798</li>



<li>bootstrap_cmds-1</li>



<li>objc-1</li>
</ul>



<p class="wp-block-paragraph">The first phase of the script will unpack both the kernel &amp; driverkit and install their respective header files into the OS.  NeXT a bunch of symlinks are created to link the system to the driverkit.  Next I decided to build the ObjectiveC compiler from 10.0, hoping it&#8217;s more bugfixed and slightly more optimized than what was available back in 1999.  Building the compiler is a little involved, as a good GCC tradition is to be cross compiled first, then re-compile itself with itself, then do that again and verify that the 3rd recompile outputs the same as the second one.  Yes it&#8217;s a thing. Yes it&#8217;s slow.  Yes you are lucky to live in the future, this was really painful back in the day.</p>



<p class="wp-block-paragraph">With the kernel compiled, we can then compile the bootstrap commands, and the objectiveC runtime that is used by the kernel.  Nothing too exciting here.</p>



<p class="wp-block-paragraph">DriverKit however&#8230;.</p>



<p class="wp-block-paragraph">The PCMCIA code was not included in any of the 0.x Darwins, so for laptop enthusiasts you are basically SOL.  As a matter of fact, a lot of weird stuff was pruned out, that either could be &#8216;touched&#8217; or borrowed from the PowerPC port and massaged into place.  Luckily I had at least figured out a simple fix for PCIKernBus.h so at least PCI works.</p>



<p class="wp-block-paragraph">Likewise for the kernel, there was some guessing on the EISA config, which also overlaps ISA, along with having to remove the PCMCIA cardbus .. bus.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="644" height="507" src="/wp-content/uploads/2024/04/rhapsody-apm-crash.png" alt="" class="wp-image-14371" srcset="https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-apm-crash.png 644w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-apm-crash-300x236.png 300w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-apm-crash-381x300.png 381w" sizes="auto, (max-width: 644px) 100vw, 644px" /><figcaption class="wp-element-caption">APM crash</figcaption></figure>



<p class="wp-block-paragraph">I had issues with the APM (Advanced Power Management), another laptopisim I suspect. I had to amputate that.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><a href="https://github.com/neozeed/Darwin_0.1/blob/e02df2480e6e5b0193fdce53f6431f892c09878c/kernel/machdep/i386/i386_init.c#L281"><img loading="lazy" decoding="async" width="447" height="240" src="/wp-content/uploads/2024/04/cpu-detect-is-a-hack.png" alt="" class="wp-image-14392" srcset="https://virtuallyfun.com/wp-content/uploads/2024/04/cpu-detect-is-a-hack.png 447w, https://virtuallyfun.com/wp-content/uploads/2024/04/cpu-detect-is-a-hack-300x161.png 300w" sizes="auto, (max-width: 447px) 100vw, 447px" /></a><figcaption class="wp-element-caption">for testing purposes</figcaption></figure>
</div>


<p class="wp-block-paragraph">Naturally the cpuid code is broken much like early NT (I wonder if both were contributed by intel?), so it doesn&#8217;t detect any half way modern Pentium processors correctly which causes it to fall all the way back to the i386, which unfortunately, Rhapsody is compiled as 486 (remember NeXTSTEP had fat binaries allowing you to recompile for different processors and ship a single binary that can be &#8216;lipo&#8217;d into the appropriate one for the host).  So being degraded to a 386 means nothing works.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="644" height="507" src="/wp-content/uploads/2024/04/rhapsody-bad-cpu-type.png" alt="" class="wp-image-14372" srcset="https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-bad-cpu-type.png 644w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-bad-cpu-type-300x236.png 300w, https://virtuallyfun.com/wp-content/uploads/2024/04/rhapsody-bad-cpu-type-381x300.png 381w" sizes="auto, (max-width: 644px) 100vw, 644px" /><figcaption class="wp-element-caption">bad CPU type in library!</figcaption></figure>



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



<p class="wp-block-paragraph">Luckily patching the cpuid was pretty simple just force it always to be a Pentium.  It is 1999 afterall.</p>



<p class="wp-block-paragraph">I&#8217;ve done my best to make this a single script to run, and all being well you&#8217;ll get something that looks like errors, but it should be fine?!</p>



<pre class="wp-block-code"><code>System/Library/Frameworks/System.framework/Versions/B/Headers/bsd/i386/table.h
System/Library/Frameworks/System.framework/Versions/B/Headers/bsd/i386/types.h
System/Library/Frameworks/System.framework/Versions/B/Headers/bsd/i386/user.h
System/Library/Frameworks/System.framework/Versions/B/Headers/bsd/i386/vmparam.h
private/
private/dev/
private/dev/MAKEDEV
private/tftpboot/
private/tftpboot/mach_kernel
mach_kernel
tar: private/dev: Could not change access and modification times: Permission denied
tar: private/dev: Cannot change mode to 0755: Permission denied
tar: private/dev: Cannot chown to uid 0 gid 0: Permission denied
tar: Error exit delayed from previous errors</code></pre>



<p class="wp-block-paragraph">A quick look around shows that there is tgz files indicating that things have been compiled.  I did backup the old original kernel as &#8220;rhapsody-gcc.tgz&#8221; in case you ever need it.  Can&#8217;t imagine why but who knows?</p>



<pre class="wp-block-code"><code>qemu:13# ls -l /usr/src/*.tgz
-rw-r--r--  1 root  wheel   173706 Apr 23 15:25 /usr/src/bootstrap_cmds.bin.tgz
-rw-r--r--  1 root  wheel  2184460 Apr 23 15:33 /usr/src/cc-798-bin.tgz
-rw-r--r--  1 root  wheel  2747289 Apr 23 15:36 /usr/src/driverkit-kern-bin.tgz
-rw-r--r--  1 root  wheel  1264957 Apr 23 15:26 /usr/src/kernel-driverkit-hdrs.tgz
-rw-r--r--  1 root  wheel   116343 Apr 23 15:26 /usr/src/objc-bin.tgz
-rw-r--r--  1 root  wheel  2173005 Apr 23 15:26 /usr/src/rhapsody-gcc.tgz
qemu:14# ls -l /mach_kernel*
-r--r--r--  2 root  wheel  1459520 Apr 23 15:36 /mach_kernel
-r--r--r--  1 root  wheel  1404116 Apr 23 15:38 /mach_kernel-rhapsody</code></pre>



<p class="wp-block-paragraph">You should now be able to reboot into the kernel that you&#8217;d compiled!</p>



<p class="wp-block-paragraph"><a href="/2024/04/24/rebuilding-darwin-from-source-part-3-debian-makes-the-world-go-round/" target="_blank" rel="noreferrer noopener">Next up is Phase 2</a>, where we compile the tools to enter the dark magic that is the Debian build system. Yes, you read that right, Apple/NeXT was all in on Debian.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://virtuallyfun.com/2024/04/23/rebuilding-darwin-from-source-part-2-building-the-kernel/feed/</wfw:commentRss>
			<slash:comments>5</slash:comments>
		
		
			</item>
		<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 loading="lazy" 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="auto, (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 loading="lazy" 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="auto, (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 loading="lazy" 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="auto, (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>Darwin 0.3 &#038; 1.0 on Qemu</title>
		<link>https://virtuallyfun.com/2018/04/22/darwin-0-3-1-0-on-qemu/</link>
					<comments>https://virtuallyfun.com/2018/04/22/darwin-0-3-1-0-on-qemu/#respond</comments>
		
		<dc:creator><![CDATA[neozeed]]></dc:creator>
		<pubDate>Sun, 22 Apr 2018 01:50:34 +0000</pubDate>
				<category><![CDATA[Darwin]]></category>
		<category><![CDATA[Macintosh]]></category>
		<category><![CDATA[NeXTSTEP]]></category>
		<category><![CDATA[OS X]]></category>
		<category><![CDATA[powerpc]]></category>
		<guid isPermaLink="false">https://virtuallyfun.com/wordpress/?p=8344</guid>

					<description><![CDATA[Interestingly enough a lot of the same weirdness of missing bits I saw on the x86, is also on the PowerPC. There is no nice installer, the CD image actually boots MacOS 8.6 which currently won&#8217;t run on Qemu.Â  However &#8230; <a href="https://virtuallyfun.com/2018/04/22/darwin-0-3-1-0-on-qemu/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[<p><div id="attachment_8345" style="width: 812px" class="wp-caption aligncenter"><a href="https://virtuallyfun.com/wp-content/uploads/2018/04/Darwin-0.3-PowerPC.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-8345" class="size-full wp-image-8345" src="https://virtuallyfun.com/wp-content/uploads/2018/04/Darwin-0.3-PowerPC.png" alt="" width="802" height="656" /></a><p id="caption-attachment-8345" class="wp-caption-text">Darwin 0.3 PowerPC</p></div></p>
<p>Interestingly enough a lot of the same weirdness of missing bits I saw on the x86, is also on the PowerPC.</p>
<p>There is no nice installer, the CD image actually boots MacOS 8.6 which currently won&#8217;t run on Qemu.Â  However Darwin 1.0 uses MacOS 9, which will.Â  There is not install program for Darwin, rather you need a secondary disk, that is partitioned so the volume manager will pick it up, and then you restore a backup onto the target disk.Â  Naturally the restore program from 0.3 won&#8217;t work, but the 1.0 will under the G4 Cube MacOS 9 CD-ROM install.</p>
<p>Also I couldn&#8217;t figure out the boot parameters soÂ I used Steve Troughton Smith&#8217;s BootX loaderÂ <a href="https://github.com/steventroughtonsmith/BootX" target="_blank" rel="noopener">https://github.com/steventroughtonsmith/BootX</a>Â to get the OS booted.</p>
<p style="padding-left: 30px;">qemu-system-ppc.exe -L pc-bios -drive file=..\darwin03.qcow2,index=0,format=qcow2,media=disk -drive file=BootX_custom.dmg,index=2,format=raw,media=disk -prom-env &#8220;boot-device=ide1:2,\BootX&#8221; -prom-env &#8220;boot-args=-v rd=hd0 debug=0xffe kdp=2&#8221; -prom-env &#8220;boot-file=ide0:8,\mach_kernel&#8221; -M g3beige</p>
<p>It&#8217;s a little convoluted but it does work.</p>
<p>I put together a binary package for Qemu on sourceforge here:Â <a href="https://sourceforge.net/projects/aapl-darwin/files/qemu-images/Darwin03-PowerPC_qemu-2.11_04_22_2018.7z/download">Darwin03-PowerPC_qemu-2.11_04_22_2018.7z</a></p>
<p>Currently there is no networking, I&#8217;m guessing I need drivers from OS X 1.x but Ive had really bad luck with the mouse to try to open a terminal window to see if the newÂ sungem NIC is functional at all.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://virtuallyfun.com/2018/04/22/darwin-0-3-1-0-on-qemu/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Mac OS X  Server 1.0 installs on Qemu</title>
		<link>https://virtuallyfun.com/2018/04/21/mac-os-x-server-1-0-installs-on-qemu/</link>
					<comments>https://virtuallyfun.com/2018/04/21/mac-os-x-server-1-0-installs-on-qemu/#comments</comments>
		
		<dc:creator><![CDATA[neozeed]]></dc:creator>
		<pubDate>Sat, 21 Apr 2018 10:45:06 +0000</pubDate>
				<category><![CDATA[Darwin]]></category>
		<category><![CDATA[OS X]]></category>
		<category><![CDATA[powerpc]]></category>
		<category><![CDATA[QEMU]]></category>
		<guid isPermaLink="false">https://virtuallyfun.com/wordpress/?p=8331</guid>

					<description><![CDATA[That&#8217;s right, the ADB is usable enough now to type and move the mouse, meaning that OS X Server can now be installed within Qemu! It&#8217;s incredibly slow, and the mouse is incredibly jumpy, but it&#8217;s actually running! Basically, like &#8230; <a href="https://virtuallyfun.com/2018/04/21/mac-os-x-server-1-0-installs-on-qemu/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[<p><div id="attachment_8333" style="width: 812px" class="wp-caption aligncenter"><a href="https://virtuallyfun.com/wp-content/uploads/2018/04/OS-X-Server-1.2-on-qemu-single-user-mode.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-8333" class="size-full wp-image-8333" src="https://virtuallyfun.com/wp-content/uploads/2018/04/OS-X-Server-1.2-on-qemu-single-user-mode.png" alt="" width="802" height="656" /></a><p id="caption-attachment-8333" class="wp-caption-text">OS X Server 1.2 on qemu single user mode</p></div></p>
<p>That&#8217;s right, the ADB is usable enough now to type and move the mouse, meaning that OS X Server can now be installed within Qemu!</p>
<p>It&#8217;s incredibly slow, and the mouse is incredibly jumpy, but it&#8217;s actually running!</p>
<p>Basically, like A/UX, you boot up into MacOS to partition the drive.</p>
<p style="padding-left: 30px;">qemu-system-ppc-screamer.exe -L pc-bios -m 256 -M mac99 -prom-env &#8220;boot-args=-v&#8221; -prom-env &#8220;auto-boot?=true&#8221; -prom-env &#8220;vga-ndrv?=true&#8221; -hda 2GB.vmdk -cdrom &#8220;Mac OS X Server 1.2, MOSX_Booter.iso&#8221; -sdl -device usb-mouse -device adb-keyboard -boot d</p>
<p><div id="attachment_8334" style="width: 652px" class="wp-caption aligncenter"><a href="https://virtuallyfun.com/wp-content/uploads/2018/04/OS-X-Server-1.2-MacOS-9-Create-OS-X-Server-partition.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-8334" class="size-full wp-image-8334" src="https://virtuallyfun.com/wp-content/uploads/2018/04/OS-X-Server-1.2-MacOS-9-Create-OS-X-Server-partition.png" alt="" width="642" height="512" /></a><p id="caption-attachment-8334" class="wp-caption-text">OS X Server 1.2 MacOS 9 Create OS X Server partition</p></div></p>
<p>And then kick off the installer:</p>
<p><div id="attachment_8335" style="width: 652px" class="wp-caption aligncenter"><a href="https://virtuallyfun.com/wp-content/uploads/2018/04/OS-X-Server-1.2-MacOS-9-Start-Install.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-8335" class="size-full wp-image-8335" src="https://virtuallyfun.com/wp-content/uploads/2018/04/OS-X-Server-1.2-MacOS-9-Start-Install.png" alt="" width="642" height="512" /></a><p id="caption-attachment-8335" class="wp-caption-text">OS X Server 1.2 MacOS 9 Start Install</p></div></p>
<p>Which really isn&#8217;t much to do, other than tagging the partition, and prepping the machine to reboot.</p>
<p><div id="attachment_8336" style="width: 380px" class="wp-caption aligncenter"><a href="https://virtuallyfun.com/wp-content/uploads/2018/04/Non-Fata-Fatal-error.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-8336" class="size-full wp-image-8336" src="https://virtuallyfun.com/wp-content/uploads/2018/04/Non-Fata-Fatal-error.png" alt="" width="370" height="163" /></a><p id="caption-attachment-8336" class="wp-caption-text">It&#8217;s OK</p></div></p>
<p>Qemu doesn&#8217;t emulate the NVRAM, so it&#8217;ll complete with this &#8216;non fatal&#8217; &#8216;fatal error&#8217;</p>
<p>After that, boot into the OS X Server kernel, and continue the install:</p>
<p style="padding-left: 30px;">qemu-system-ppc.exe -L pc-bios -prom-env &#8220;boot-args=-v rd=sd0&#8243; -drive file=2GB.vmdk,index=1,format=vmdk,media=disk -M g3beige -cpu g3 -drive file=&#8221;Mac OS X Server 1.2, MOSX_Booter.iso&#8221;,index=0,format=raw,media=cdrom -prom-env &#8220;boot-device=cd:9,\\:tbxi&#8221; -m 256 -net none</p>
<p><div id="attachment_8337" style="width: 812px" class="wp-caption aligncenter"><a href="https://virtuallyfun.com/wp-content/uploads/2018/04/OS-X-Server-1.2-installing-text-mode.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-8337" class="size-full wp-image-8337" src="https://virtuallyfun.com/wp-content/uploads/2018/04/OS-X-Server-1.2-installing-text-mode.png" alt="" width="802" height="656" /></a><p id="caption-attachment-8337" class="wp-caption-text">OS X Server 1.2 installing text mode</p></div></p>
<p>It will then format the disk, and copy over the base operating system.Â  After that it&#8217;s time to shutdown, and reboot the VM.Â  I couldn&#8217;t figure out a pure hard disk boot, but again using the CD-ROM, you can just tell it to pull the root from the hard disk.</p>
<p style="padding-left: 30px;">qemu-system-ppc.exe -L pc-bios -prom-env &#8220;boot-args=-v rd=hd0&#8243; -drive file=2GB.vmdk,index=1,format=vmdk,media=disk -M g3beige -cpu g3 -drive file=&#8221;Mac OS X Server 1.2, MOSX_Booter.iso&#8221;,index=0,format=raw,media=cdrom -prom-env &#8220;boot-device=cd:9,\\:tbxi&#8221; -m 256 -net none</p>
<p><div id="attachment_8338" style="width: 812px" class="wp-caption aligncenter"><a href="https://virtuallyfun.com/wp-content/uploads/2018/04/OS-X-Server-1.2-installing.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-8338" class="size-full wp-image-8338" src="https://virtuallyfun.com/wp-content/uploads/2018/04/OS-X-Server-1.2-installing.png" alt="" width="802" height="656" /></a><p id="caption-attachment-8338" class="wp-caption-text">OS X Server 1.2 installing</p></div></p>
<p>And after this, it&#8217;ll want to reboot again.Â  Launch it up and now we get the initial setup</p>
<p><div id="attachment_8339" style="width: 812px" class="wp-caption aligncenter"><a href="https://virtuallyfun.com/wp-content/uploads/2018/04/OS-X-Server-1.2-Setup-Assistant.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-8339" class="size-full wp-image-8339" src="https://virtuallyfun.com/wp-content/uploads/2018/04/OS-X-Server-1.2-Setup-Assistant.png" alt="" width="802" height="656" /></a><p id="caption-attachment-8339" class="wp-caption-text">Setup Assistant</p></div></p>
<p>And with that out of the way, we can logon!</p>
<p><a href="https://virtuallyfun.com/wp-content/uploads/2018/04/OSX-Server-1.2-Logging-in.png"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-8340" src="https://virtuallyfun.com/wp-content/uploads/2018/04/OSX-Server-1.2-Logging-in.png" alt="" width="802" height="656" /></a></p>
<p>And after a while, it&#8217;ll load up the desktop</p>
<p><div id="attachment_8341" style="width: 812px" class="wp-caption aligncenter"><a href="https://virtuallyfun.com/wp-content/uploads/2018/04/OS-X-Server-1.2-desktop.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-8341" class="size-full wp-image-8341" src="https://virtuallyfun.com/wp-content/uploads/2018/04/OS-X-Server-1.2-desktop.png" alt="" width="802" height="656" /></a><p id="caption-attachment-8341" class="wp-caption-text">OS X Server 1.2 Desktop</p></div></p>
<p>As mentioned above, the mouse is incredibly jittery.Â  Doing anything graphical is very difficult. But here we are, running OS X/Rhapsody for the PowerPC!</p>
<p><div id="attachment_8342" style="width: 812px" class="wp-caption aligncenter"><a href="https://virtuallyfun.com/wp-content/uploads/2018/04/OSX-Server-1.2-Restarting.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-8342" class="size-full wp-image-8342" src="https://virtuallyfun.com/wp-content/uploads/2018/04/OSX-Server-1.2-Restarting.png" alt="" width="802" height="656" /></a><p id="caption-attachment-8342" class="wp-caption-text">That&#8217;s all!</p></div></p>
<p>Because the mouse is VERY jumpy at the moment, Im going to make some pre-configured disk images available because running the disk tool under OS 9 is a major pain.Â  The first image has only been partitioned, while the second has completed the &#8216;text mode setup&#8217;, aka a minimal install.</p>
<ul>
<li><a href="http://vpsland.superglobalmegacorp.com/install/OS%20X%20PowerPC/Server%20v1.x/osx_partitined2gb.7z">osx_partitined2gb.7z</a></li>
<li><a href="http://vpsland.superglobalmegacorp.com/install/OS%20X%20PowerPC/Server%20v1.x/osx12-os9-post-phase1.7z">osx12-os9-post-phase1.7z</a></li>
</ul>
<p>And that&#8217;s it for now!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://virtuallyfun.com/2018/04/21/mac-os-x-server-1-0-installs-on-qemu/feed/</wfw:commentRss>
			<slash:comments>15</slash:comments>
		
		
			</item>
		<item>
		<title>One of those days.</title>
		<link>https://virtuallyfun.com/2017/05/26/one-of-those-days-3/</link>
					<comments>https://virtuallyfun.com/2017/05/26/one-of-those-days-3/#comments</comments>
		
		<dc:creator><![CDATA[neozeed]]></dc:creator>
		<pubDate>Fri, 26 May 2017 04:33:01 +0000</pubDate>
				<category><![CDATA[Darwin]]></category>
		<guid isPermaLink="false">https://virtuallyfun.com/?p=7145</guid>

					<description><![CDATA[/* * Abosolutely brilliant. Assume that sizeof(long) == 4. The author of this * code should give classes on how to write non-portable code. Other bitches: * * (1) assuming that all architectures are big endian * (2) storing/accessing shorts &#8230; <a href="https://virtuallyfun.com/2017/05/26/one-of-those-days-3/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[<pre>/*
* Abosolutely brilliant. Assume that sizeof(long) == 4. The author of this
* code should give classes on how to write non-portable code. Other bitches:
*
* (1) assuming that all architectures are big endian
* (2) storing/accessing shorts on unaligned boundaries
* (3) assuming all machines align things to 4 byte boundaries
*
* Define a 2-byte word type and a 4-byte word type.
*/</pre>
<p>source &#8211; <a href="http://unix.superglobalmegacorp.com/cgi-bin/cvsweb.cgi/machkit/internal.h?rev=1.1.1.1;cvsroot=Darwin0">internal.h</a></p>
<p>sigh. Â Anyone have a PDO/Enterprise Objects disc? for some reason I think I need pdo.h</p>
]]></content:encoded>
					
					<wfw:commentRss>https://virtuallyfun.com/2017/05/26/one-of-those-days-3/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
		<item>
		<title>Darwin 0.3 booted multiuser!</title>
		<link>https://virtuallyfun.com/2017/05/01/darwin-0-3-booted-multiuser/</link>
					<comments>https://virtuallyfun.com/2017/05/01/darwin-0-3-booted-multiuser/#comments</comments>
		
		<dc:creator><![CDATA[neozeed]]></dc:creator>
		<pubDate>Mon, 01 May 2017 12:31:07 +0000</pubDate>
				<category><![CDATA[Darwin]]></category>
		<guid isPermaLink="false">https://virtuallyfun.com/?p=7104</guid>

					<description><![CDATA[I know it doesn&#8217;t look exciting, but really it is! Darwin03_qemu090_01_5_2017.7z NetInfo is completely broken, but I just disabled it, I don&#8217;t think anyone cares. Â It is missing some kernel system call, and copying the one from Rhapsody results in &#8230; <a href="https://virtuallyfun.com/2017/05/01/darwin-0-3-booted-multiuser/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[<p><div id="attachment_7105" style="width: 652px" class="wp-caption aligncenter"><a href="https://virtuallyfun.com/wp-content/uploads/2017/05/Darwin-0.3-booted-multiuser.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-7105" class="size-full wp-image-7105" src="https://virtuallyfun.com/wp-content/uploads/2017/05/Darwin-0.3-booted-multiuser.png" alt="" width="642" height="507" /></a><p id="caption-attachment-7105" class="wp-caption-text">Multiuser!</p></div></p>
<p>I know it doesn&#8217;t look exciting, but really it is!</p>
<p><a href="https://sourceforge.net/projects/aapl-darwin/files/qemu-images/Darwin03_qemu090_01_5_2017.7z/download">Darwin03_qemu090_01_5_2017.7z</a></p>
<p><a href="http://docs.huihoo.com/darwin/opendarwin/articles/netinfo/index.html">NetInfo</a> is completely broken, but I just disabled it, I don&#8217;t think anyone cares. Â It is missing some kernel system call, and copying the one from Rhapsody results in missing calls in the /System library. Â So instead of spending more time on it, I just had the startup comment it out.</p>
<p>The headers and spiraling dependencies of things is out of control, so it really needs to be re-built. Â But there is enough there for it to boot up, you can telnet into it, and compile simple programs.</p>
<p>As far as I&#8217;m aware none of the early Darwin&#8217;s ever were released as binary for x86, so I guess that is a nice thing.</p>
<p>The EIDE driver is still busted, I spent a day trying to debug it to come to the conclusion that, yes it does lose interrupts. Â While stacking OO drivers to add features sure looks nice, it makes fundamental issues, either in the Driver itself, or the object framework (let&#8217;s face it, nothing is defect free) hard for an outsider to find. Â From the outside I used to think it was either the DMA or the multisector transfers screwing it up, but with source in hand, disabling both did nothing.</p>
<p style="padding-left: 30px;"><code>4.4 BSD (darwin) (ttyp0)</code></p>
<p style="padding-left: 30px;">login: root<br />
[darwin:~] root# hostinfo<br />
Mach kernel version:<br />
Kernel Release 5.5:<br />
Sun Apr 30 10:53:53 SGT 2017; root(rcbuilder):kernel-7/BUILD/RELEASE_I386<br />
Copyright (c) 1988-1995,1997-1999 Apple Computer, Inc. All Rights Reserved.</p>
<p style="padding-left: 30px;">Kernel configured for a single processor only.<br />
1 processor is physically available.<br />
Processor type: pentium (Intel Pentium)<br />
Processor active: 0<br />
Primary memory available: 64.00 megabytes.<br />
Default processor set: 40 tasks, 71 threads, 1 processors<br />
Load average: 0.99, Mach factor: 0.00<br />
[darwin:~] root#</p>
<p>For people who like this kind of stuff. Â In my limited testing, I found some configure scripts don&#8217;t like the idea of a Darwin with a major number of zero. Â And seeing that this would fall into place during OS X Server 1.0.2, which makes it Rhapsody 5.5. Â I don&#8217;t think either of the 1.2 or 1.2v3 Rhapsody 5.6 versions were ever released to the public in source, but maybe someone has a copy somewhere.</p>
<p>And, of course here is a gratuitous dmesg.</p>
<p style="padding-left: 30px;">
<code>Kernel Release 5.5:<br />
Sun Apr 30 10:53:53 SGT 2017; root(rcbuilder):kernel-7/BUILD/RELEASE_I386<br />
Copyright (c) 1988-1995,1997-1999 Apple Computer, Inc. All Rights Reserved.</code></p>
<p style="padding-left: 30px;">physical memory = 64.00 megabytes.<br />
using 227 buffers containing 1.27 megabytes of memory<br />
available memory = 59.19 megabytes. vm_page_free_count = 1d99<br />
minimum quantum is 10 ms<br />
Copyright (c) 1982, 1986, 1989, 1991, 1993<br />
The Regents of the University of California. All rights reserved.</p>
<p style="padding-left: 30px;">PCI Ver=2.10 BusCount=1 Features=[ BIOS16 CM1 ]<br />
Found PCI 2.0 device: ID=0x12378086 at Dev=0 Func=0 Bus=0<br />
Found PCI 2.0 device: ID=0x70008086 at Dev=1 Func=0 Bus=0<br />
Found PCI 2.0 device: ID=0x70108086 at Dev=1 Func=1 Bus=0<br />
Found PCI 2.0 device: ID=0x00a81013 at Dev=2 Func=0 Bus=0<br />
Found PCI 2.0 device: ID=0x802910ec at Dev=3 Func=0 Bus=0<br />
PCI bus support enabled<br />
PnP: Plug and Play support enabled<br />
ISA/EISA bus support enabled<br />
ISA bus<br />
DriverKit version 500<br />
hc0: device detected at port 0x1f0 irq 14<br />
hc0: Checking for ATA drive 0&#8230; Detected<br />
hc0: Checking for ATA drive 1&#8230;<br />
hc0: Checking for ATAPI drive 1&#8230;<br />
hc0: Resetting drives&#8230;<br />
Registering: hc0<br />
hd0: QEMU HARDDISK 0.9.0<br />
hd0: 4063 cylinders, 16 heads, 63 spt (disk geometry)<br />
hd0: using multisector (16) transfers.<br />
Registering: hd0<br />
hd0: Device Block Size: 512 bytes<br />
hd0: Device Capacity: 1999 MB<br />
hd0: Disk Label: Disk<br />
hc1: device detected at port 0x170 irq 15<br />
hc1: Checking for ATA drive 0&#8230;<br />
hc1: Checking for ATAPI drive 0&#8230; Detected<br />
hc1: Checking for ATA drive 1&#8230;<br />
hc1: Checking for ATAPI drive 1&#8230;<br />
hc1: Resetting drives&#8230;<br />
hc1: Drive 0: ATAPI CD-ROM (FAST DRQ, REMOVABLE, CMD PKT LEN=12)<br />
hc1: LBA supported.<br />
hc1: buffer type 3, 512 sectors.<br />
Registering: hc1<br />
IDEDisk: disk 0 is ATAPI<br />
Registering: sc0<br />
sd0: QEMU QEMU CD-ROM 0.9.<br />
Registering: sd0 at Target 0 LUN 0 at sc0<br />
sd0: Disk Not Ready<br />
Registering: fc0<br />
Registering: PS2Controller<br />
Registering: PCKeyboard0<br />
PCI bus support enabled<br />
Registering: PCI0<br />
Registering: EISA0<br />
Registering: event0<br />
Registering: kmDevice0<br />
rootdev 300, howto 40000<br />
BusMouse mouseInit: no resolution in config table. Default is 400<br />
Bus mouse running<br />
Registering: BusMouse<br />
Display0: Cirrus Logic GD5434 detected (2097152 Bytes)<br />
Display0: PCI Dev: 2 Func: 0 Bus: 0<br />
Display: Mode selected: 800 x 600 @ 60 Hz (RGB:256/8)<br />
Registering: Display0<br />
NE2000 Generic Driver v0.9.1b<br />
by Gabor Sebestyen</p>
<p style="padding-left: 30px;">Vendor: RealTek RTL-8029<br />
BASE: 0xc100; IRQ: 11<br />
Registering: en0<br />
en0: Ethernet address 52:54:00:12:34:56<br />
Device inited&#8230;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://virtuallyfun.com/2017/05/01/darwin-0-3-booted-multiuser/feed/</wfw:commentRss>
			<slash:comments>9</slash:comments>
		
		
			</item>
		<item>
		<title>Updated Darwin 0.3</title>
		<link>https://virtuallyfun.com/2017/04/30/updated-darwin-0-3/</link>
					<comments>https://virtuallyfun.com/2017/04/30/updated-darwin-0-3/#respond</comments>
		
		<dc:creator><![CDATA[neozeed]]></dc:creator>
		<pubDate>Sun, 30 Apr 2017 04:16:33 +0000</pubDate>
				<category><![CDATA[Darwin]]></category>
		<guid isPermaLink="false">https://virtuallyfun.com/?p=7102</guid>

					<description><![CDATA[Darwin03_29_4_2017.7z It still boots single user mode, one of the source projects has a nice rm -rf $DSTROOT so it nuked what little progress I made during the week. But I have the compiler running and lots more. Â It has &#8230; <a href="https://virtuallyfun.com/2017/04/30/updated-darwin-0-3/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[<p><a href="https://sourceforge.net/projects/aapl-darwin/files/qemu-images/Darwin03_29_4_2017.7z/download">Darwin03_29_4_2017.7z</a></p>
<p>It still boots single user mode, one of the source projects has a nice rm -rf $DSTROOT so it nuked what little progress I made during the week.</p>
<p>But I have the compiler running and lots more. Â It has issues with netinfo which is really the only thing blocking it from multiuser boot. Â Some syscall not found, and I need to dig into the kernel to see if it even exists&#8230;</p>
<p>I&#8217;ll re-build all the libs and headers. Â Oddly enough the disk image I can build libraries and programs can&#8217;t build driverkit or the kernel&#8230;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://virtuallyfun.com/2017/04/30/updated-darwin-0-3/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Darwin 0.3 single user mode test drive</title>
		<link>https://virtuallyfun.com/2017/04/24/darwin-0-3-single-user-mode-test-drive/</link>
					<comments>https://virtuallyfun.com/2017/04/24/darwin-0-3-single-user-mode-test-drive/#comments</comments>
		
		<dc:creator><![CDATA[neozeed]]></dc:creator>
		<pubDate>Sun, 23 Apr 2017 18:50:14 +0000</pubDate>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Darwin]]></category>
		<category><![CDATA[mach]]></category>
		<guid isPermaLink="false">https://virtuallyfun.com/?p=7095</guid>

					<description><![CDATA[So I asked around for some old Darwin CD&#8217;s and I got lucky! Volume 1, Summer of 1999! Â Although the back doesn&#8217;t really give it justice: As you can guess, when they talk about binary and installers, it&#8217;s for the &#8230; <a href="https://virtuallyfun.com/2017/04/24/darwin-0-3-single-user-mode-test-drive/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[<p>So I asked around for some old Darwin CD&#8217;s and I got lucky!</p>
<p><div id="attachment_7111" style="width: 572px" class="wp-caption aligncenter"><a href="https://virtuallyfun.com/wp-content/uploads/2017/04/Darwin-0.3-CD-case-Front.jpeg"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-7111" class="size-full wp-image-7111" src="https://virtuallyfun.com/wp-content/uploads/2017/04/Darwin-0.3-CD-case-Front.jpeg" alt="" width="562" height="561" /></a><p id="caption-attachment-7111" class="wp-caption-text">Darwin 0.3 Front</p></div></p>
<p>Volume 1, Summer of 1999! Â Although the back doesn&#8217;t really give it justice:</p>
<p><div id="attachment_7113" style="width: 572px" class="wp-caption aligncenter"><a href="https://virtuallyfun.com/wp-content/uploads/2017/04/Darwin-0.3-CD-case-back.jpeg"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-7113" class="size-full wp-image-7113" src="https://virtuallyfun.com/wp-content/uploads/2017/04/Darwin-0.3-CD-case-back.jpeg" alt="" width="562" height="561" /></a><p id="caption-attachment-7113" class="wp-caption-text">Darwin 0.3 back</p></div></p>
<p>As you can guess, when they talk about binary and installers, it&#8217;s for the PowerMa computers of the era, and not x86.</p>
<p>So once more again, I was able to rebuild a kernel, and build some of the OS. Â There isn&#8217;tÂ really anything to see, it&#8217;s not even slightly usable. Â However at the boot loader type in</p>
<p style="padding-left: 30px;">-s</p>
<p>hit enter, and it&#8217;ll boot up in single user mode.</p>
<p><div id="attachment_7096" style="width: 652px" class="wp-caption aligncenter"><a href="https://virtuallyfun.com/wp-content/uploads/2017/04/Darwin-0.3-single-user-mode.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-7096" class="size-full wp-image-7096" src="https://virtuallyfun.com/wp-content/uploads/2017/04/Darwin-0.3-single-user-mode.png" alt="" width="642" height="507" /></a><p id="caption-attachment-7096" class="wp-caption-text">Darwin 0.3 single user mode</p></div></p>
<p><a href="https://sourceforge.net/projects/aapl-darwin/files/qemu-images/Darwin03_qemu090_24_4_2017.7z/download">Darwin03_qemu090_24_4_2017.7z</a></p>
<p>There is no games, nothing fun to do, I didn&#8217;t even build a compiler. Â It&#8217;s just enough to show that it&#8217;ll boot up. Â If you manually conifgure the loop back you can ping yourself, launch inetd you can even try to telnet in, but control break is .. broken, and there is no NetInfo running so no passwords.</p>
<p>Of course for anyone finding this site today there are more newer, and capable images on my sourceforge page:</p>
<p><a href="https://sourceforge.net/projects/aapl-darwin/files/qemu-images/">aapl-darwin/files/qemu-images/</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://virtuallyfun.com/2017/04/24/darwin-0-3-single-user-mode-test-drive/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>Darwin 0.1 + Rhapsody DR 2 booted!</title>
		<link>https://virtuallyfun.com/2017/04/22/darwin-0-1-rhapsody-dr-2-booted/</link>
					<comments>https://virtuallyfun.com/2017/04/22/darwin-0-1-rhapsody-dr-2-booted/#comments</comments>
		
		<dc:creator><![CDATA[neozeed]]></dc:creator>
		<pubDate>Sat, 22 Apr 2017 11:42:40 +0000</pubDate>
				<category><![CDATA[Darwin]]></category>
		<category><![CDATA[mach]]></category>
		<category><![CDATA[NeXTSTEP]]></category>
		<category><![CDATA[OS X]]></category>
		<guid isPermaLink="false">https://virtuallyfun.com/?p=7082</guid>

					<description><![CDATA[Following up from yesterday, here we go! So I finally got it running, after some inspiration from NCommander over at nextcomputers.org forums, that the Darwin 0.1 kernel is in fact build-able, I went ahead and took a stab at it.  &#8230; <a href="https://virtuallyfun.com/2017/04/22/darwin-0-1-rhapsody-dr-2-booted/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[<hr />
<p>Following up <a href="https://virtuallyfun.com/2017/04/21/building-darwin-0-1-kernel/">from yesterday</a>, here we go!</p>
<p><div id="attachment_7086" style="width: 652px" class="wp-caption alignleft"><a href="https://virtuallyfun.com/wp-content/uploads/2017/04/Rhapsody-1.0-boot.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-7086" class="size-full wp-image-7086" src="https://virtuallyfun.com/wp-content/uploads/2017/04/Rhapsody-1.0-boot.png" alt="" width="642" height="507" /></a><p id="caption-attachment-7086" class="wp-caption-text">Rhapsody 1.0 booting</p></div></p>
<p>So I finally got it running, after some inspiration from <a href="http://www.nextcomputers.org/forums/profile.php?mode=viewprofile&amp;u=2808">NCommander</a> <a href="http://www.nextcomputers.org/forums/viewtopic.php?p=23359#23359">over at nextcomputers.org forums</a>, that the Darwin 0.1 kernel is in fact build-able, I went ahead and took a stab at it.  While he was trying to start from OPENSTEP, I tried it from something as close as I could to the target, which was Rhapsody DR2.</p>
<p>Back in the days of the NeXT / Apple merger, there was hope that OPENTSTEP could become the next great OS for the Apple Macintosh.  It had been a while since NeXT had the OS running so things had rotten somewhat, as time had passed on.  However, the first and most viable platform would of course be the x86.  <a href="https://books.google.com.hk/books?id=QTsEAAAAMBAJ&amp;pg=PA62&amp;lpg=PA62&amp;dq=%22nextstep+3.0%22+intel&amp;source=bl&amp;ots=v0gPactipF&amp;sig=DP5RxKN7OO_f3gJyQrTIrtQJq4g&amp;hl=en&amp;sa=X&amp;ved=0ahUKEwjtk_qR8rfTAhXJJZQKHau0DDgQ6AEIRzAG#v=onepage&amp;q=%22nextstep%203.0%22%20intel&amp;f=false">Back in 1993</a> while feeling increased pressure in the hardware space, NeXT was forced to start porting away from their black m68k based hardware, and this was an opportunity to get their software running on different platforms.  And sadly in 1993, the NRW aka NeXT RISC Workstation that was in development with dual m88000 processors was killed along with all hardware projects. In the end it didn&#8217;t matter as much as the only processor from the early 90&#8217;s that has a vibrant future is the i386.</p>
<p>So back again to this transitional time before OS X 10, there were developer versions of this OS seeded out that required you to have an intel machine as OPENSTEP was being ported to the PowerPC machines that Apple was selling.</p>
<p>So, on <a href="https://en.wikipedia.org/wiki/Rhapsody_(operating_system)#Release_history">May 14, 1998</a>, the last public version for the Intel processor was released, DR2.</p>
<p>However, two interesting things happened along the way to what would become OS X Server 1.0 .  The first is that Apple gave up on the &#8216;<a href="http://www.macworld.com/article/1154036/software-utilities/osxorigins.html">yellow box</a>&#8216; portable API, and to satisfy the GPL requirement to release changes to source code, Apple would go one further and release the source code to many of the internal system utilities, along with the kernel in what was known as Darwin.</p>
<p><a href="https://web.archive.org/web/20000817164210/http://www.opensource.apple.com:80/"><img loading="lazy" decoding="async" class="alignleft wp-image-7084 size-full" src="https://virtuallyfun.com/wp-content/uploads/2017/04/comeinitsopensmall.gif" alt="" width="200" height="152" /></a></p>
<p>This was a big deal for many of us, as the cost of getting the source code to any UNIX was incredibly prohibitive, and OS&#8217;s like Linux, NetBSD/OpenBSD/FreeBSD were picking up steam, OPENSTEP being awaken from it&#8217;s cryonic hibernation but with the promise of being free and open software was pretty great!  <a href="https://web.archive.org/web/20000817164210/http://www.opensource.apple.com:80/">Back in the day it sure looked promising</a>!</p>
<p>Obviously, things didn&#8217;t work out as everyone had hoped as Apple either straight up ignored anyone on the outside, or they hired people who showed promise, made them sign NDA&#8217;s and were basically never heard from again.</p>
<p>So the recently recovered <a href="https://virtuallyfun.com/2017/03/11/sourcecode-darwin-0-1-located/">source code to Darwin 0.1</a> corresponds with the release of the PowerPC only OS X Server 1.0.  However, as we all found out, Darwin will still built and maintained on Intel, as it was a <a href="https://web.archive.org/web/20111010030158/https://www.apple.com/pr/library/2005/06/06Apple-to-Use-Intel-Microprocessors-Beginning-in-2006.html">very secretive plan B</a>, in case something went wrong with the PowerPC platform.  Being portable had saved NeXT before, and now it would save Apple.</p>
<p>So with this little background, and a lot of stumbling around in the dark, <a href="http://www.nextcomputers.org/forums/viewtopic.php?p=23644#23644">I came up with some steps</a>, that have permitted me to build the Darwin 0.1 kernel under DR2.</p>
<p>However, it was not perfect, and the biggest glaring issue was due to the software that was recovered, the layer known as driverkit, (driverkit-139.1-1.tar.gz) turns out to be from another, later release of Darwin, the 0.2 release, which the only thing surviving is the driver kit. Â It doesn&#8217;t build cleanly, and In order to get it to build I had to break the mach PCI bus. Â This means that yes, PCI devices will not load at runtime, only at boottime by sald.</p>
<p>After a lot of fighting, I was able to produce a system that could boot into both single user and multiuser mode, although it was unable to load drivers so there was no networking, and no UI.</p>
<p>In a fit of boredom, I built a bunch of the command line tools for Darwin, and a few libraries, and then went to see why the driverkit had a problem finding the reason why KernBus was undefined, or even with some attempts at helping all the methods were unknown, I stumbled onto the fact that during compilation it will generate new headers, and in those headers are the correct interface for driverkit to call into the KernBus.  So, I was able to quickly rebuild driverkit, then re-link into the kernel and now I could load drivers!  Thrilled with this much, I did something more aggressive, I made a dump of my install &#8216;target&#8217; and then restored it onto an image of my dev VM.  And much to my amazement it booted up to the graphical login.  I now had PCI working correctly.</p>
<p><div id="attachment_7083" style="width: 812px" class="wp-caption aligncenter"><a href="https://virtuallyfun.com/wp-content/uploads/2017/04/Rhapsody-5.3-with-DR2-Apps.png"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-7083" class="size-full wp-image-7083" src="https://virtuallyfun.com/wp-content/uploads/2017/04/Rhapsody-5.3-with-DR2-Apps.png" alt="" width="802" height="627" /></a><p id="caption-attachment-7083" class="wp-caption-text">Darwin 0.1</p></div></p>
<p>This kind of thing is not for casual users, but if you install DR2 into a VM, you ought to be able to then use this <a href="https://sourceforge.net/projects/aapl-darwin/files/latest/download?source=navbar" target="_blank" rel="noopener">ISO image</a>, and follow <a href="https://web.archive.org/web/20170904001114/https://www.nextcomputers.org/forums/viewtopic.php?p=23659#23659" target="_blank" rel="noopener">these instructions</a>, and you will then have a DR2 OS from 1998 with the OS X 1.0 kernel from 1999 running. The biggest difference I&#8217;ve noticed is that the newer kernel can use 512MB of RAM, a nice bump up from 192 which was the prior limit.</p>
<p>Obviously, there is a lot more work to be done, it&#8217;d be nice to find some source to an IDE or other block controller and modify it to work with the massive disks of today, along with the filesystem code to handle partitions larger than 2GB.</p>
<p>Maybe it will be possible to port in the driverkit to XNU, so we can get things like existing drivers, and SMP, massive filesystems etc.. It&#8217;s great to see we are going the right way.</p>
<p>For fans, <a href="https://sourceforge.net/projects/aapl-darwin/files/qemu-images/Darwin03_qemu090_24_4_2017.7z/download">here is a qemu 0.90 image+exe</a> that can run Darwin 0.3 into single user mode.</p>
<p>EDIT and for people still hitting this, <a href="https://sourceforge.net/projects/aapl-darwin/files/qemu-images/Darwin03_qemu090_01_5_2017.7z/download">here is a multiuser bootable image</a>.  I&#8217;ll keep updating on the source forge page.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://virtuallyfun.com/2017/04/22/darwin-0-1-rhapsody-dr-2-booted/feed/</wfw:commentRss>
			<slash:comments>19</slash:comments>
		
		
			</item>
	</channel>
</rss>
