<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/"
>
	<channel>
		<title>Michael Dale</title>
		<link>https://michaeldale.com.au</link>
		<description>looking back it was easy</description>
		<copyright>Copyright 2004-07-03 09:00:00</copyright>
		<generator>https://michaeldale.com.au</generator>
				<lastBuildDate>Sun, 07 Jun 2026 23:58:56 +1000</lastBuildDate>
						<item>
					<title>Does SimCity 2000 actually use your FPU?</title>
					<link>https://michaeldale.com.au/archive/2026/06/07/does-simcity-2000-actually-use-your-fpu/</link>
					<comments>https://michaeldale.com.au/archive/2026/06/07/does-simcity-2000-actually-use-your-fpu/#comments</comments>
					<pubDate>Sun, 07 Jun 2026 23:58:56 +1000</pubDate>
					<dc:creator>Michael Dale</dc:creator>
					<description><![CDATA[<p>A question that's nagged me for years: if you dropped a 387 maths coprocessor into a 386DX-40, would <em>SimCity 2000</em> run any faster? Plenty of DOS games never touched the FPU, so the coprocessor was often dead weight. So I pulled apart the shipped binary to check.</p>
<p>There's no source, so this is static analysis — disassembling <code>SC2000.EXE</code> from the 1994 CD-ROM Collection. Claude did most of the legwork counting opcodes, same as the recent site redesign.</p>
<h3>What it is</h3>
<p><code>SC2000.EXE</code> is a 32-bit protected-mode program behind a <strong>DOS/4GW</strong> extender, compiled with <strong>Watcom C/C++</strong> as a Linear Executable. It was built with Watcom's <code>-fpi</code> floating-point model, which matters below.</p>
<h3>Does it use floating point?</h3>
<p>Yes — around <strong>543</strong> x87 instructions spread across the 644 KB code segment. A typical routine:</p>
<pre>
fild   word ptr [ebp-4]     ; int -&gt; float
fmul   dword ptr [ebp-0xc]
fadd   dword ptr [ebp-8]
fdiv   dword ptr [0x543b]   ; divide by a float constant
fld1                        ; load 1.0
fcomp  dword ptr [ebp-8]
fnstsw ax / sahf / jbe      ; FP compare -&gt; branch
</pre>
<p>The <code>fnstsw ax; sahf; jbe</code> sequence is the 387-era way of branching on a float compare; a Pentium Pro would use <code>fcomi</code>, which never appears, so this was written for the 386. There's also a lot of <code>fild</code>/<code>fistp</code> — int to float and back — which is what you'd expect from a sim that keeps its state as integers.</p>
<h3>Hardware or emulator?</h3>
<p>The <code>-fpi</code> model emits real x87 instructions and links a software emulator as a fallback. With a coprocessor they run on it; without, they fault and the emulator handles them. There's the usual detection routine (<code>fninit</code>, read the control word, <code>cmp ah, 3</code>) and support for the <code>NO87</code> environment variable to force the emulator. So an FPU is used when present but not required.</p>
<h3>How much faster?</h3>
<p>Per operation, a 387 op is about 25–90 cycles; emulated in software it's roughly 1,000–5,000, so the coprocessor is about <strong>20–80× faster</strong>, worst for divides and transcendentals. But only about <strong>2.5%</strong> of the game's functions touch the FPU. The constant work — the 128×128 tile sim (power, water, traffic, pollution, land value, crime) and the isometric blitter — is all integer.</p>
<table border="1" cellpadding="6" cellspacing="0">
    <tbody>
        <tr>
            <th align="left">Workload</th>
            <th align="left">Effect of a 387</th>
        </tr>
        <tr>
            <td>Normal play — scrolling, drawing, the sim tick, UI</td>
            <td>A few percent at most.</td>
        </tr>
        <tr>
            <td>Periodic recalcs — budget, graphs, terrain generation, loading a city</td>
            <td>Noticeable; a 1–2 s pause can become near-instant.</td>
        </tr>
    </tbody>
</table>
<h3>Bottom line</h3>
<p>A 386DX-40 with no coprocessor runs SimCity 2000 fine — that's what the <code>-fpi</code>/<code>NO87</code> design is for. A 387 won't help the scrolling, but it takes the edge off the periodic pauses (when processing e.g the budget).</p>]]></description>
				</item>
							<item>
					<title>Claude Code</title>
					<link>https://michaeldale.com.au/archive/2026/04/15/claude-code/</link>
					<comments>https://michaeldale.com.au/archive/2026/04/15/claude-code/#comments</comments>
					<pubDate>Wed, 15 Apr 2026 23:07:33 +1000</pubDate>
					<dc:creator>Michael Dale</dc:creator>
					<description><![CDATA[<p>AI is finally here to take our jobs :)</p>
<p>Got Claude Code do to a bit of design work to the site. Still running the same old backend PHP but some newer HTML/CSS. It makes updating old code so much more accessible, hopefully I will still be running the same old crusty backend in 2050.</p>
<p>I used this markdown file <a href="https://getdesign.md/ibm/design-md">https://getdesign.md/ibm/design-md</a> to ask Claude to rewrite the theme.</p>
<p>It's not really a massive improvement at this stage, but I didn't have to write any code, so that is a plus...</p>
<p>I should ask it to start writing my blog posts, might be more interesting.</p>
<p>EDIT: I ran out of tokens now too :(</p>]]></description>
				</item>
							<item>
					<title>It works on PHP 8.2!</title>
					<link>https://michaeldale.com.au/archive/2024/12/21/it-works-on-php-82/</link>
					<comments>https://michaeldale.com.au/archive/2024/12/21/it-works-on-php-82/#comments</comments>
					<pubDate>Sat, 21 Dec 2024 20:15:43 +1000</pubDate>
					<dc:creator>Michael Dale</dc:creator>
					<description><![CDATA[<p>Upgrading the OS this site (and a few others including <a href="https://www.vogonswiki.com">https://www.vogonswiki.com</a>) runs on was one of my goals for the Christmas break this year.</p>
<p>Unfortunately there is a lot of old scripts running on it; making it difficult to move past PHP 7.0.</p>
<p>I've finally fixed a lot, most were pretty easy (including this site), mediawiki was the worst so far.</p>
<ul>
    <li>Bluetrait Blog now works on PHP 8.2!</li>
    <li>Media Wiki upgraded (ish, still a super old version, extension hell there)</li>
    <li>The Board (old recipe tracking system)</li>
</ul>
<p>I've been able to switch over to PHP 7.3 now which is great. Hopefully I can get to 7.4 this year?</p>
<p>Also had to rebuild the raspberry pi zero running our gate recently. That was a pain. The SD card died so I replaced that and upgraded to Raspbian/Debian 12, that broke all the GPIO libraries I was using :/</p>
<p>Isn't upgrading fun? Actually I'm pretty happy how well things are working considering I ignore them for years at a time.</p>
<p>Next I'm actually thinking of upgrading this blog to replace the theme with something new, although not sure yet.</p>]]></description>
				</item>
							<item>
					<title>3dfx Voodoo 5 Changeling AGP unboxing &amp; overview</title>
					<link>https://michaeldale.com.au/archive/2023/11/17/3dfx-voodoo-5-changeling-agp-unboxing--overview/</link>
					<comments>https://michaeldale.com.au/archive/2023/11/17/3dfx-voodoo-5-changeling-agp-unboxing--overview/#comments</comments>
					<pubDate>Fri, 17 Nov 2023 16:48:03 +1000</pubDate>
					<dc:creator>Michael Dale</dc:creator>
					<description><![CDATA[<p>When I get time, I've been doing various retro computer hardware videos on youtube. As the ads get worse and worse, I feel I should host them somewhere else. This seems like the best place, maybe not the best technically, but logically! I'm not sure if this will work, I may need to convert them.</p>
<p>If it works, time permitting, I might upgrade the site to handle videos better....</p>
<p>EDIT: It's not working currently, haha, now I need to find the repo for this site to fix it, It may still be running in subversion, need to migrate it to git, oh wow this just became a big job.</p>
<p>EDIT: Success! Repo was already moved to git so that was good, just needed to work out how to get video allowed in library I use to whitelist html. I've also used ffmpeg to convert to mp4.</p>
<p></p><video width="560" controls="" muted="" playsinline="">   <source src="/images/videos/2023-3dfx.mp4" type="video/mp4"></source> </video><p> </p>]]></description>
				</item>
							<item>
					<title>Victron MPPT BlueSolar 75/15 Over Temperature</title>
					<link>https://michaeldale.com.au/archive/2018/12/29/victron-mppt-7515-over-temperature/</link>
					<comments>https://michaeldale.com.au/archive/2018/12/29/victron-mppt-7515-over-temperature/#comments</comments>
					<pubDate>Sat, 29 Dec 2018 17:42:53 +1000</pubDate>
					<dc:creator>Michael Dale</dc:creator>
					<description><![CDATA[<p>I have a small solar setup in the shed outside to power some lighting and a couple of raspberry pi's.</p>
<p>Normally if I go into the shed during the day and start using power the Victron solar charge controller will automatically feed power in to cover the load (where possible). I noticed today that it wasn't.</p>
<p>I did a bit of googling and connected the controller to my laptop and couldn't find any issues. The load output was still working but no power was being taken in from the solar panels. The lights on the controller still seemed to indicate that it was trying to charge.</p>
<p>I have an amp meter on the solar side so I knew there was no power going in.</p>
<p>So I disconnected the panels and battery to restart the controller and it just starting working again. I assumed that it crashed or something (which was disappointing as I really like it and want another).</p>
<p>After I left it to top up the battery I tried again and noticed the same issue.</p>
<p>Looking at the shed temperature I found it was just hitting 40c when the issue occurred.</p>
<p>This time I didn't reboot the controller and left it.</p>
<p>This afternoon once the temp dropped below 40c the charge controller automatically kicked in again without any intervention on my part.</p>
<p>So good news it seems that the controller didn't crash but simply limits the charging if above 40c. I'm happy with that and now know for future.</p>]]></description>
				</item>
							<item>
					<title>Old code is old</title>
					<link>https://michaeldale.com.au/archive/2018/04/29/old-code-is-old/</link>
					<comments>https://michaeldale.com.au/archive/2018/04/29/old-code-is-old/#comments</comments>
					<pubDate>Sun, 29 Apr 2018 17:59:53 +1000</pubDate>
					<dc:creator>Michael Dale</dc:creator>
					<description><![CDATA[<p>I just upgraded the server that runs this website to Debian 9 (finally). This broke some things (old KSES html cleaning code).</p>
<p>I found a version I half worked on from ~5 years ago and did an upgrade to that (uses new htmlpurifier and replaces KSES).</p>
<p>That version had a half written new authentication hash system (thanks Michael from 2014).</p>
<p>So that broke login.</p>
<p>That is now somewhat fixed!</p>
<p>Honestly not too bad considering the code is almost 15 years old! </p>]]></description>
				</item>
							<item>
					<title>Mass update SickBeard/Rage folder location</title>
					<link>https://michaeldale.com.au/archive/2016/10/09/mass-update-sickbeardrage-folder-location/</link>
					<comments>https://michaeldale.com.au/archive/2016/10/09/mass-update-sickbeardrage-folder-location/#comments</comments>
					<pubDate>Sun, 09 Oct 2016 10:57:15 +1000</pubDate>
					<dc:creator>Michael Dale</dc:creator>
					<description><![CDATA[<ol>
    <li>Stop SickBeard</li>
    <li>Backup .db SQLite file</li>
    <li>Get a SQLite viewer/editor. There is a Firefox plugin that can do this.</li>
    <li>Run this command on the database: UPDATE tv_shows SET location = replace(location, "/old_folder_path/", "/new_folder_path/");</li>
    <li>Done.</li>
</ol>]]></description>
				</item>
							<item>
					<title>Debian + Proxmox + VYOS + NAT + IPSec + IPTables = Fun</title>
					<link>https://michaeldale.com.au/archive/2016/03/12/debian--proxmox--vyos--nat--ipsec--iptables--fun/</link>
					<comments>https://michaeldale.com.au/archive/2016/03/12/debian--proxmox--vyos--nat--ipsec--iptables--fun/#comments</comments>
					<pubDate>Sat, 12 Mar 2016 15:07:58 +1000</pubDate>
					<dc:creator>Michael Dale</dc:creator>
					<description><![CDATA[<p><a href="http://www.vogonswiki.com/images/6/68/Debian_%2B_Proxmox_%2B_VYOS_%2B_NAT_%2B_IPSec_%2B_IPTables_%3D_Fun.pdf"><strong><span style="font-size:large;">I ended up writing this in pages but here is the PDF.</span></strong></a></p>
<p>[<a href="http://www.vogonswiki.com/images/6/68/Debian_%2B_Proxmox_%2B_VYOS_%2B_NAT_%2B_IPSec_%2B_IPTables_%3D_Fun.pdf">Download PDF</a>, ~800KB]</p>]]></description>
				</item>
							<item>
					<title>Australian Retro Computing</title>
					<link>https://michaeldale.com.au/archive/2016/01/02/australian-retro-computing/</link>
					<comments>https://michaeldale.com.au/archive/2016/01/02/australian-retro-computing/#comments</comments>
					<pubDate>Sat, 02 Jan 2016 21:39:22 +1000</pubDate>
					<dc:creator>Michael Dale</dc:creator>
					<description><![CDATA[<p>I've created a forum for <a href="http://retrocomputing.com.au">Australia Retro Computing</a></p>]]></description>
				</item>
							<item>
					<title>iSCSI for games</title>
					<link>https://michaeldale.com.au/archive/2015/01/03/iscsi-for-games/</link>
					<comments>https://michaeldale.com.au/archive/2015/01/03/iscsi-for-games/#comments</comments>
					<pubDate>Sat, 03 Jan 2015 12:51:16 +1000</pubDate>
					<dc:creator>Michael Dale</dc:creator>
					<description><![CDATA[<p>I have a 2012 MacBook Pro with 256GB of storage. Currently I have a 50GB windows partition to play a few games.</p>
<p>Recently I wanted to play the new Wolfenstein game but it requires 40GB of storage!</p>
<p>Unfortunately I just don't have enough storage space on this laptop.</p>
<p>So I have a Synology DS213+ at home with a pair of 3TB drives in Raid 1, this is used for Time Machine backup and backing up my home server.</p>
<p>I decided to see if I could run the game off an iSCSI drive from the DS213+.</p>
<p>I created a standard file based iSCSI Lun (200GB of thin provisioned storage) and then attached it to my Windows 8 bootcamp install.</p>
<p>I then proceeded to to install Wolfenstein directly on to the new drive, I decided to connect my computer via gig ethernet as I was sure that it would be a bottleneck on wifi.</p>
<p>Anyway the game works great (other than the graphics card being a touch slow). In fact based on the cacti graph I think it would work fine on wifi.</p>
<p>After playing about 30 minutes of the game it looks to average about 2-3MB/sec. So am I actually surprised at how low I/O requirements the game needs.</p>
<p>Now I need to be on the local lan to play, but that doesn't matter for me and saving me from spending a bunch of money upgrading the SSD.</p>
<p>I suspect the DS213+ could probably cope with another machine doing a similar thing, the CPU is a bit slow so the new DS415+ would be much better (plus having 4x1GB nics).</p>
<p> </p>]]></description>
				</item>
				</channel>
</rss>