<?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>Big Mess o&#039; Wires</title>
	<atom:link href="https://www.bigmessowires.com/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.bigmessowires.com</link>
	<description>Exploring DIY electronics, retro-computing, and maker business dreams</description>
	<lastBuildDate>Fri, 16 Oct 2026 14:38:27 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.1.3</generator>
	<item>
		<title>Help Me Choose a Web Hosting Plan: Decoding the Marketing Speak</title>
		<link>https://www.bigmessowires.com/2026/10/15/help-me-choose-a-web-hosting-plan-decoding-the-marketing-speak/</link>
					<comments>https://www.bigmessowires.com/2026/10/15/help-me-choose-a-web-hosting-plan-decoding-the-marketing-speak/#comments</comments>
		
		<dc:creator><![CDATA[Steve]]></dc:creator>
		<pubDate>Fri, 16 Oct 2026 04:43:39 +0000</pubDate>
				<category><![CDATA[Business]]></category>
		<guid isPermaLink="false">https://www.bigmessowires.com/?p=9641</guid>

					<description><![CDATA[Dear readers, I need your advice on web hosting. For 22 years (yikes) I&#8217;ve lived on DreamHost&#8217;s Shared Unlimited plan, for which I currently pay $15.99 per month. DreamHost no longer offers Shared Unlimited to new customers, but legacy customers like me can keep it. True to its name, it really is unlimited: no limits [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><img loading="lazy" decoding="async" src="https://www.bigmessowires.com/wp-content/uploads/2026/10/01-top-dreamhost-logo.jpg" alt="DreamHost logo" width="1200" height="333" class="aligncenter size-full wp-image-9642" srcset="https://www.bigmessowires.com/wp-content/uploads/2026/10/01-top-dreamhost-logo.jpg 1200w, https://www.bigmessowires.com/wp-content/uploads/2026/10/01-top-dreamhost-logo-300x83.jpg 300w, https://www.bigmessowires.com/wp-content/uploads/2026/10/01-top-dreamhost-logo-1024x284.jpg 1024w, https://www.bigmessowires.com/wp-content/uploads/2026/10/01-top-dreamhost-logo-768x213.jpg 768w" sizes="auto, (max-width: 1200px) 100vw, 1200px" /></p>
<p>Dear readers, I need your advice on web hosting. For 22 years (yikes) I&#8217;ve lived on DreamHost&#8217;s Shared Unlimited plan, for which I currently pay $15.99 per month. DreamHost no longer offers Shared Unlimited to new customers, but legacy customers like me can keep it. True to its name, it really is unlimited: no limits on disk space, bandwidth, websites, databases, email accounts, or anything else countable. But it&#8217;s a no-frills service with a basic level of server performance.</p>
<p>After my recent <a href="https://www.bigmessowires.com/2026/10/12/applying-10-years-of-server-updates-in-one-shot/">server overhaul</a>, I&#8217;ve been wondering if it&#8217;s time to change plans. I&#8217;m not interested in switching hosts, but DreamHost now offers a whole array of plans with names like Launch, Growth, DreamPress, Stack, and Managed VPS, and I&#8217;m confused about how they really differ. The product pages are full of bullet points like &#8220;40k Monthly Visits&#8221; and &#8220;WordPress-tuned server&#8221; that sound nice but don&#8217;t tell me anything concrete. How much server resources do I actually get? What happens when a bunch of people visit at once?</p>
<p>So I dug through DreamHost&#8217;s plan pages and help articles, trying to get past the marketing speak to a technical understanding of each plan. Here&#8217;s what I found.</p>
<p>My priorities, in order:</p>
<ol>
<li><strong>Easy server management.</strong> I don&#8217;t want to configure the server, patch it, or wonder whether it&#8217;s up to date. I&#8217;ve been burned by this before, and spent days digging myself out of the hole.</li>
<li><strong>Performance.</strong> The site should be fast, and stay fast when a popular post gets linked from somewhere like Hacker News. Today&#8217;s performance is adequate from here in California, but it could be better, and I don&#8217;t know how it feels for readers in more distant places like the UK, Japan, or Australia.</li>
<li><strong>Price.</strong> None of these plans are expensive compared to my other business costs, so price matters, but it&#8217;s third.</li>
</ol>
<p><img loading="lazy" decoding="async" src="https://www.bigmessowires.com/wp-content/uploads/2026/10/02-shared-server-database-300x275.png" alt="line drawing of a server rack connected to a database" width="300" height="275" class="aligncenter size-medium wp-image-9643" srcset="https://www.bigmessowires.com/wp-content/uploads/2026/10/02-shared-server-database-300x275.png 300w, https://www.bigmessowires.com/wp-content/uploads/2026/10/02-shared-server-database-1024x938.png 1024w, https://www.bigmessowires.com/wp-content/uploads/2026/10/02-shared-server-database-768x704.png 768w, https://www.bigmessowires.com/wp-content/uploads/2026/10/02-shared-server-database.png 1280w" sizes="auto, (max-width: 300px) 100vw, 300px" /></p>
<h2 class="bmow-subhead">What &#8220;Shared&#8221; Actually Means</h2>
<p>Shared hosting means my site lives on a single physical Linux server alongside hundreds of other customers&#8217; sites, all drawing from the same pool of CPU, RAM, and disk I/O. To keep one customer from hogging the machine, a <a href="https://help.dreamhost.com/hc/en-us/articles/216540488">process monitor</a> watches each user&#8217;s combined CPU and memory usage, and kills processes when it&#8217;s too high. That means a burst of simultaneous page requests can trip the limit even if each individual process is lightweight, and visitors will see a slow page or an error. DreamHost doesn&#8217;t publish the actual CPU and memory limits, but the <a href="https://www.dreamhost.com/legal/unlimited-policy-legacy/">Legacy Unlimited Policy</a> is clear that these resources are capped.</p>
<p>This brings us to what may be the most important concept for understanding these plans: the difference between a limit and a guarantee.</p>
<ul>
<li>A <strong>limit</strong> is a ceiling: the most resources you can use before something stops you.</li>
<li>A <strong>guarantee</strong> is a floor: the minimum resources always available to you, no matter what anyone else is doing.</li>
</ul>
<p>Shared hosting has a limit, but no guarantee. In practice, this hasn&#8217;t caused me major problems, but I have seen occasional unexplained sluggishness and downtime.</p>
<h2 class="bmow-subhead">Web Hosting Launch, Growth, Scale</h2>
<p>These are DreamHost&#8217;s current shared hosting plans, which replaced Shared Unlimited. Prices are renewal rates for annual billing:</p>
<table>
<tr>
<th scope="col" class="bmow-th"></th>
<th scope="col" class="bmow-th"><strong>Launch</strong></th>
<th scope="col" class="bmow-th"><strong>Growth</strong></th>
<th scope="col" class="bmow-th"><strong>Scale</strong></th>
</tr>
<tr>
<td>Price/mo</td>
<td>$10.99</td>
<td>$12.99</td>
<td>$25.99</td>
</tr>
<tr>
<td>Websites</td>
<td>25</td>
<td>50</td>
<td>100</td>
</tr>
<tr>
<td>Storage</td>
<td>25 GB</td>
<td>50 GB</td>
<td>100 GB</td>
</tr>
<tr>
<td>MySQL databases</td>
<td>25</td>
<td>50</td>
<td>300</td>
</tr>
<tr>
<td>Monthly visits</td>
<td>40K</td>
<td>200K</td>
<td>400K</td>
</tr>
</table>
<p>All three include unlimited bandwidth. Email is a paid add-on starting at $1.67/mo per mailbox.</p>
<p>There&#8217;s nothing in that table about CPU or RAM. Reading DreamHost&#8217;s <a href="https://www.dreamhost.com/legal/resource-allocation-policy/">Resource Allocation Policy</a>, it sounds like these plans run on the same shared infrastructure as Shared Unlimited: a limit, no guarantee. So what do the monthly visits numbers mean? Does Scale get a higher CPU/RAM ceiling than Launch? Or is the visits number only used to decide who gets asked to upgrade? And do these plans provide better or worse performance than my current plan, which says nothing about visits? If anybody knows, I&#8217;d love to hear it.</p>
<p>As far as I can see, these plans are Shared Unlimited with limits added. They&#8217;re a bit cheaper, but won&#8217;t make server management any easier or the site any faster.</p>
<h2 class="bmow-subhead">Do I Actually Need Unlimited?</h2>
<p>Probably not. My DreamHost account hosts four websites:</p>
<ul>
<li><strong>bigmessowires.com</strong> – this site, the big one.</li>
<li><strong>mactoberfestmeetup.org</strong> – a simple two-page WordPress site for the <a href="https://mactoberfestmeetup.org">Mactoberfest Meetup</a> classic Macintosh event, which I&#8217;m helping to host next month.</li>
<li><strong>runworks.com</strong> and <strong>stevechamberlin.com</strong> – old static content, nothing interactive.</li>
</ul>
<p>Altogether that&#8217;s 4 websites, 1 subdomain, 4 databases, and 9 GB of disk space, nowhere near the limits of even the smallest Launch plan. Email is the only wrinkle, but only runworks.com uses DreamHost email, and very rarely. I could pay $1.67 a month to keep it, or live without it.</p>
<p>So the countable limits in the Web Hosting plans aren&#8217;t a problem for me. What I care about is performance, which the tables don&#8217;t spell out.</p>
<p><img loading="lazy" decoding="async" src="https://www.bigmessowires.com/wp-content/uploads/2026/10/03-visitors-group-300x209.png" alt="outline icon of a group of three people" width="300" height="209" class="aligncenter size-medium wp-image-9644" srcset="https://www.bigmessowires.com/wp-content/uploads/2026/10/03-visitors-group-300x209.png 300w, https://www.bigmessowires.com/wp-content/uploads/2026/10/03-visitors-group-1024x712.png 1024w, https://www.bigmessowires.com/wp-content/uploads/2026/10/03-visitors-group-768x534.png 768w, https://www.bigmessowires.com/wp-content/uploads/2026/10/03-visitors-group.png 1274w" sizes="auto, (max-width: 300px) 100vw, 300px" /></p>
<h2 class="bmow-subhead">What Does &#8220;40,000 Monthly Visits&#8221; Actually Mean?</h2>
<p>DreamHost&#8217;s resource policy defines monthly visits as &#8220;the number of unique visitors your site may receive per calendar month,&#8221; excluding bots and crawlers. The pricing page calls it an estimate of what your site can comfortably handle, and says they won&#8217;t cut you off if you go over. But elsewhere they say that if you consistently exceed it, you &#8220;may be required to upgrade to a higher tier.&#8221; It sounds like a soft limit enforced by a sales email.</p>
<p>Is 40,000 a lot? It&#8217;s about 1,300 visitors per day, or one per minute on average. Any modern server should handle that without breaking a sweat.</p>
<p>The problem is that traffic is spiky. What matters for performance is how many requests arrive at the same moment, like when 500 people click a link to a popular post within a few minutes. A monthly count tells you almost nothing about that. Both Web Hosting Launch and the much pricier DreamPress 1 are rated for 40K monthly visits, despite running on very different infrastructure. I conclude that &#8220;monthly visits&#8221; is a marketing label rather than a technical measurement, which still leaves me wondering how to choose a plan that&#8217;s sized for my needs.</p>
<h2 class="bmow-subhead">So How Many Visitors Do I Have?</h2>
<p>Even if it&#8217;s mostly marketing, the monthly visitor number decides which tier DreamHost thinks I belong in. I assumed BMOW was comfortably under 40K. It turns out I really have no idea.</p>
<p>DreamHost&#8217;s traffic stats reported 657,000 requests and 137,000 &#8220;unique requests&#8221; last month. Neither is a visitor count. I couldn&#8217;t find anywhere in the traffic data that shows the number that DreamHost would actually use to decide if I&#8217;m over my plan&#8217;s limit.</p>
<p>I went to the raw server logs for the last week and counted unique IP addresses, excluding anything that identified itself as a bot or feed reader. A typical day has about 4000. But I need to account for factors like regular visitors who access the site many times per month, devices that appear with multiple IP addresses, and bots that pretend to be ordinary browsers. My best guess is somewhere between 40K and 100K unique human visitors per month, attempting to follow DreamHost&#8217;s methodology, but I can&#8217;t measure it exactly how they do.</p>
<p>The logs also show why focusing on a monthly visitor number misses the point. After my server update post last week, traffic spiked to about six times normal for a day, which is over half of a 40K plan&#8217;s monthly allowance in one day. What I care about is whether the server keeps up on a day like that.</p>
<h2 class="bmow-subhead">Virtual Private Servers: I&#8217;m Too Lazy for This</h2>
<p>I looked briefly at DreamHost&#8217;s self-managed VPS plans. They probably win on performance per dollar, with guaranteed CPU and RAM for about what I pay now. But I&#8217;d be the sysadmin, responsible for OS updates, security patches, and server configuration. That&#8217;s exactly what I&#8217;m trying to avoid.</p>
<p><img loading="lazy" decoding="async" src="https://www.bigmessowires.com/wp-content/uploads/2026/10/05-managed-vps-we-manage-it.webp" alt="DreamHost Managed VPS dashboard showing CPU, RAM, and disk usage graphs" width="1864" height="1045" class="aligncenter size-full wp-image-9645" srcset="https://www.bigmessowires.com/wp-content/uploads/2026/10/05-managed-vps-we-manage-it.webp 1864w, https://www.bigmessowires.com/wp-content/uploads/2026/10/05-managed-vps-we-manage-it-300x168.webp 300w, https://www.bigmessowires.com/wp-content/uploads/2026/10/05-managed-vps-we-manage-it-1024x574.webp 1024w, https://www.bigmessowires.com/wp-content/uploads/2026/10/05-managed-vps-we-manage-it-768x431.webp 768w, https://www.bigmessowires.com/wp-content/uploads/2026/10/05-managed-vps-we-manage-it-1536x861.webp 1536w" sizes="auto, (max-width: 1864px) 100vw, 1864px" /></p>
<h2 class="bmow-subhead">Managed VPS: An Interesting Middle Ground</h2>
<p>Managed VPS is a VPS where DreamHost does the system administration. Prices are renewal rates after the initial promo period:</p>
<table>
<tr>
<th scope="col" class="bmow-th"></th>
<th scope="col" class="bmow-th"><strong>Business</strong></th>
<th scope="col" class="bmow-th"><strong>Professional</strong></th>
<th scope="col" class="bmow-th"><strong>Enterprise</strong></th>
<th scope="col" class="bmow-th"><strong>Premier</strong></th>
</tr>
<tr>
<td>Price/mo</td>
<td>$24.99</td>
<td>$46.99</td>
<td>$92.99</td>
<td>$114.99</td>
</tr>
<tr>
<td>CPU cores</td>
<td>2</td>
<td>2</td>
<td>4</td>
<td>6</td>
</tr>
<tr>
<td>RAM</td>
<td>2 GB</td>
<td>4 GB</td>
<td>8 GB</td>
<td>12 GB</td>
</tr>
<tr>
<td>Storage</td>
<td>60 GB</td>
<td>120 GB</td>
<td>240 GB</td>
<td>360 GB</td>
</tr>
</table>
<p>Here DreamHost would manage &#8220;security patches, Ubuntu OS updates, and PHP releases,&#8221; and I&#8217;d manage my site content. I&#8217;d get SSH but no root access. Websites, email, and bandwidth are unlimited with these plans, so all four of my sites could live on one Business plan. An Auto-Boost feature temporarily adds RAM during memory spikes. Server-side caching uses OPcache. I might need a WordPress page caching plugin.</p>
<p>This is the first plan with a published resource guarantee: 2 GB of RAM and 2 cores that are all mine at the lowest tier. So how much RAM and cores does my site actually need? Ummm&#8230; I don&#8217;t know.</p>
<p>One important footnote: Reading the fine print, with Managed VPS plans your MySQL databases still live on DreamHost&#8217;s <em>shared</em> database servers. Since WordPress is heavily database-driven, part of every page load would still depend on shared infrastructure with no guarantee.</p>
<h2 class="bmow-subhead">DreamPress: Managed WordPress</h2>
<p>DreamPress is DreamHost&#8217;s &#8220;managed WordPress&#8221; product. Prices are renewal rates for annual billing:</p>
<table>
<tr>
<th scope="col" class="bmow-th"></th>
<th scope="col" class="bmow-th"><strong>DreamPress 1</strong></th>
<th scope="col" class="bmow-th"><strong>DreamPress 2</strong></th>
<th scope="col" class="bmow-th"><strong>DreamPress 3</strong></th>
<th scope="col" class="bmow-th"><strong>DreamPress 5</strong></th>
</tr>
<tr>
<td>Price/mo</td>
<td>$19.99</td>
<td>$24.99</td>
<td>$28.99</td>
<td>$40.99</td>
</tr>
<tr>
<td>Websites</td>
<td>1</td>
<td>2</td>
<td>3</td>
<td>5</td>
</tr>
<tr>
<td>Storage</td>
<td>15 GB</td>
<td>25 GB</td>
<td>30 GB</td>
<td>50 GB</td>
</tr>
<tr>
<td>Monthly visits</td>
<td>40K</td>
<td>80K</td>
<td>125K</td>
<td>175K</td>
</tr>
<tr>
<td>Backup retention</td>
<td>14 days</td>
<td>14 days</td>
<td>14 days</td>
<td>30 days</td>
</tr>
</table>
<p>DreamPress&#8217;s limits may look stingy, but it has the richest set of extras: NGINX page caching, Redis object caching, and OPcache all preconfigured, plus a free CDN tier with 10 locations, one-click staging, daily and on-demand backups, SSH and WP-CLI, and WordPress-specialist support.</p>
<p>The one-click staging would have saved me a lot of grief during my recent site update, when I built the new site on a subdomain and copied database tables and swapped directories to cut over. Yes I know I could roll my own staging solution, but it&#8217;s more friction.</p>
<p>The caching could make a big difference for performance. With NGINX serving cached pages to anonymous visitors (nearly everybody), most requests would never touch PHP or MySQL. 500 people arriving in three minutes would become much less scary. I&#8217;m not sure how NGINX caching would compare to a WordPress caching plugin, but I have to believe it would be faster. And the CDN would also help those readers in the UK, Japan, and Australia.</p>
<p>As for resources, DreamHost&#8217;s policy says DreamPress runs on &#8220;an isolated, dedicated allocation of resources,&#8221; and the process monitor doesn&#8217;t apply. That sounds like a guarantee, but unlike Managed VPS, they don&#8217;t say exactly how much CPU or RAM it is for any tier. It&#8217;s a guarantee of&#8230; something.</p>
<p>There are a few drawbacks. DreamPress is WordPress-only, so my two static sites would have to live somewhere else. And in the DreamPress plan tiers, the number of sites rises in lockstep with the visitor estimate, so there&#8217;s no way to buy more visitor capacity without also buying more site slots. If I ended up needing DreamPress 2 or 3 for performance reasons, I&#8217;d be paying for extra site slots I didn&#8217;t really need.</p>
<p><img loading="lazy" decoding="async" src="https://www.bigmessowires.com/wp-content/uploads/2026/10/Screenshot-2026-10-15-at-9.12.57-PM.png" alt="DreamHost pricing page source code" width="1600" height="1004" class="aligncenter size-full wp-image-9650" srcset="https://www.bigmessowires.com/wp-content/uploads/2026/10/Screenshot-2026-10-15-at-9.12.57-PM.png 1600w, https://www.bigmessowires.com/wp-content/uploads/2026/10/Screenshot-2026-10-15-at-9.12.57-PM-300x188.png 300w, https://www.bigmessowires.com/wp-content/uploads/2026/10/Screenshot-2026-10-15-at-9.12.57-PM-1024x643.png 1024w, https://www.bigmessowires.com/wp-content/uploads/2026/10/Screenshot-2026-10-15-at-9.12.57-PM-768x482.png 768w, https://www.bigmessowires.com/wp-content/uploads/2026/10/Screenshot-2026-10-15-at-9.12.57-PM-1536x964.png 1536w" sizes="auto, (max-width: 1600px) 100vw, 1600px" /></p>
<h2 class="bmow-subhead">Seekrit Hidden Information in the Pricing Page</h2>
<p>But wait! Maybe those DreamPress performance guarantees aren&#8217;t unknown after all. As of today, if you view DreamHost&#8217;s <a href="https://www.dreamhost.com/pricing/">Pricing &amp; Plans Page</a>, there&#8217;s a plan details data table hidden inside a script in the HTML. The data is never displayed on the page, but it&#8217;s there. To see it yourself, open the page, choose View Page Source, and search for &#8220;ramGb&#8221;. Here&#8217;s the relevant part of the table:</p>
<table>
<tr>
<th scope="col" class="bmow-th"><strong>Plan</strong></th>
<th scope="col" class="bmow-th"><strong>RAM (GB)</strong></th>
<th scope="col" class="bmow-th"><strong>CPU cores</strong></th>
<th scope="col" class="bmow-th"><strong>Storage (GB)</strong></th>
<th scope="col" class="bmow-th"><strong>Monthly visits</strong></th>
<th scope="col" class="bmow-th"><strong>Websites</strong></th>
</tr>
<tr>
<td>DreamPress 1</td>
<td>16</td>
<td>12</td>
<td>15</td>
<td>40K</td>
<td>1</td>
</tr>
<tr>
<td>DreamPress 2</td>
<td>16</td>
<td>12</td>
<td>25</td>
<td>80K</td>
<td>2</td>
</tr>
<tr>
<td>DreamPress 3</td>
<td>16</td>
<td>12</td>
<td>30</td>
<td>125K</td>
<td>3</td>
</tr>
<tr>
<td>DreamPress 5</td>
<td>16</td>
<td>12</td>
<td>50</td>
<td>175K</td>
<td>5</td>
</tr>
<tr>
<td>DreamPress 10</td>
<td>16</td>
<td>12</td>
<td>100</td>
<td>350K</td>
<td>10</td>
</tr>
<tr>
<td>DreamPress 20</td>
<td>16</td>
<td>12</td>
<td>200</td>
<td>700K</td>
<td>20</td>
</tr>
<tr>
<td>Managed VPS Business</td>
<td>2</td>
<td>2</td>
<td>60</td>
<td>—</td>
<td>—</td>
</tr>
<tr>
<td>Managed VPS Premier</td>
<td>12</td>
<td>6</td>
<td>360</td>
<td>—</td>
<td>—</td>
</tr>
</table>
<p>The table rows for Web Hosting Launch, Growth and Scale have no RAM or CPU fields at all.</p>
<p>What does this all mean? It&#8217;s very unlikely each DreamPress customer gets 16 GB and 12 cores. DreamPress 1 costs $19.99, while Managed VPS Premier costs $114.99 for 12 GB and 6 cores. Possibly 16/12 describes the server or container that DreamPress sites run on, not the slice dedicated specifically to you. Or maybe those values are just placeholders that nobody filled in properly.</p>
<h2 class="bmow-subhead">Summary</h2>
<p>2000 words later, here&#8217;s my attempt to compare the most likely choices:</p>
<table>
<tr>
<th scope="col" class="bmow-th"></th>
<th scope="col" class="bmow-th"><strong>Shared Unlimited (current)</strong></th>
<th scope="col" class="bmow-th"><strong>Web Hosting Growth</strong></th>
<th scope="col" class="bmow-th"><strong>Managed VPS Business</strong></th>
<th scope="col" class="bmow-th"><strong>DreamPress</strong></th>
</tr>
<tr>
<td>Price/mo (renewal)</td>
<td>$15.99</td>
<td>$12.99</td>
<td>$24.99</td>
<td>$19.99 – $28.99</td>
</tr>
<tr>
<td>Storage</td>
<td>Unlimited</td>
<td>50 GB</td>
<td>60 GB</td>
<td>15 &#8211; 30 GB</td>
</tr>
<tr>
<td>Monthly visitors</td>
<td>N/A</td>
<td>200K</td>
<td>N/A</td>
<td>40K &#8211; 125K</td>
</tr>
<tr>
<td>CPU/RAM guarantee</td>
<td>None</td>
<td>None</td>
<td>2 cores, 2 GB</td>
<td>Yes, size unknown</td>
</tr>
<tr>
<td>CPU/RAM limit</td>
<td>Undisclosed</td>
<td>Undisclosed</td>
<td>Plan size + Auto-Boost</td>
<td>Unknown</td>
</tr>
<tr>
<td>Server-side caching</td>
<td>None built-in</td>
<td>None built-in</td>
<td>OPcache only</td>
<td>NGINX + Redis + OPcache</td>
</tr>
<tr>
<td>CDN</td>
<td>No</td>
<td>No</td>
<td>No</td>
<td>Bunny CDN included</td>
</tr>
<tr>
<td>Staging</td>
<td>No</td>
<td>No</td>
<td>No</td>
<td>One-click</td>
</tr>
<tr>
<td>Backups</td>
<td>3 file snapshots, 9 daily DB backups</td>
<td>Daily</td>
<td>Daily</td>
<td>Daily, 14-day retention</td>
</tr>
<tr>
<td>Email</td>
<td>Unlimited</td>
<td>Paid add-on</td>
<td>Unlimited</td>
<td>Unlimited</td>
</tr>
<tr>
<td>Non-WordPress sites</td>
<td>Yes</td>
<td>Yes</td>
<td>Yes</td>
<td>No</td>
</tr>
</table>
<p>All four meet my top priority, since DreamHost handles OS and security updates for each plan. The differences are performance guarantees, convenience extras, and price. Shared Unlimited and Growth are basically the same, with Growth slightly cheaper but arguably worse. Managed VPS gives hard CPU and RAM numbers and holds all four sites, but has few conveniences and a shared database. DreamPress has all the bells and whistles and a vague promise of dedicated resources, but only for WordPress.</p>
<p><img loading="lazy" decoding="async" src="https://www.bigmessowires.com/wp-content/uploads/2026/10/06-split-moving-boxes-300x275.png" alt="labeled moving boxes" width="300" height="275" class="aligncenter size-medium wp-image-9652" srcset="https://www.bigmessowires.com/wp-content/uploads/2026/10/06-split-moving-boxes-300x275.png 300w, https://www.bigmessowires.com/wp-content/uploads/2026/10/06-split-moving-boxes-1024x938.png 1024w, https://www.bigmessowires.com/wp-content/uploads/2026/10/06-split-moving-boxes-768x703.png 768w, https://www.bigmessowires.com/wp-content/uploads/2026/10/06-split-moving-boxes.png 1280w" sizes="auto, (max-width: 300px) 100vw, 300px" /></p>
<h2 class="bmow-subhead">The Leading Candidate: Divide It Up</h2>
<p>I&#8217;m leaning towards dividing my account: bigmessowires.com on DreamPress, and the other three small sites on Web Hosting Launch. BMOW would get caching, CDN, staging, and dedicated resources. The small sites would sit on the cheapest plan, which is plenty for them. If my traffic requires DreamPress 2 or 3 anyway, mactoberfestmeetup.org could use one of the spare WordPress slots, leaving only the static sites on Launch.</p>
<p>The downside is cost. Here are the whole-account options, at renewal prices:</p>
<table>
<tr>
<th scope="col" class="bmow-th"><strong>Option</strong></th>
<th scope="col" class="bmow-th"><strong>Price/mo</strong></th>
</tr>
<tr>
<td>Stay on Shared Unlimited</td>
<td>$15.99</td>
</tr>
<tr>
<td>Everything on Web Hosting Growth</td>
<td>$12.99</td>
</tr>
<tr>
<td>Everything on Managed VPS Business</td>
<td>$24.99</td>
</tr>
<tr>
<td>DreamPress 1 + Web Hosting Launch</td>
<td>$30.98</td>
</tr>
<tr>
<td>DreamPress 2 + Web Hosting Launch</td>
<td>$35.98</td>
</tr>
<tr>
<td>DreamPress 3 + Web Hosting Launch</td>
<td>$39.98</td>
</tr>
</table>
<p>Depending on the DreamPress tier, splitting would increase my current bill by roughly 2x or more. That might be worth it for the performance and convenience, but I&#8217;d like to be sure I&#8217;m getting something meaningful for it. In particular, with my low-ish traffic site (if I&#8217;m reading the data correctly), I have a nagging worry that DreamPress might not provide any obvious performance difference over Shared Unlimited. Or could even be worse, in some cases.</p>
<h2 class="bmow-subhead">What Would You Do?</h2>
<p>If you were running these web sites, which plan would you pick? To review, I&#8217;m estimating the BMOW site gets 40,000 to 100,000 visitors per month, with spiky traffic patterns. It&#8217;s a WordPress blog with about a thousand posts and many thousands of images. The other sites receive negligible traffic. Total disk usage across all four sites is 9 GB. The BMOW store is hosted separately on Shopify, so there&#8217;s no e-commerce to worry about here.</p>
<p>Some specific questions I&#8217;m hoping someone can answer:</p>
<ul>
<li>How are this site&#8217;s page load speeds for you? Is it snappy, sluggish, or somewhere in between?</li>
<li>Does DreamPress for BMOW plus Web Hosting Launch for everything else make sense? Or would Managed VPS Business be a better choice, with all four sites on one plan and a caching plugin?</li>
<li>How can I estimate my monthly visitors the way DreamHost counts them? Given my numbers, is a 40K plan out of the question?</li>
<li>Do the Web Hosting Launch/Growth/Scale plans get different CPU/RAM ceilings, or is it the same shared server with different disk quotas?</li>
<li>What CPU and RAM resources does DreamPress actually provide? Is there even a fixed number, or does it not work that way?</li>
<li>For a largely read-only blog like this, is DreamPress&#8217;s page cache what really matters, more than guaranteed resources? Could I get 90% of the benefit by staying on shared hosting with a caching plugin and a CDN like Cloudflare?</li>
<li>Should my two static sites even be on DreamHost? Is it worth the hassles to move them to a static hosting service like GitHub Pages or Cloudflare Pages?</li>
<li>Is there any other reason to keep a grandfathered &#8220;truly unlimited&#8221; plan, or will I regret giving it up?</li>
</ul>
<p>Leave a comment below and let me know what you think!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bigmessowires.com/2026/10/15/help-me-choose-a-web-hosting-plan-decoding-the-marketing-speak/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Applying 10 Years of Server Updates in One Shot</title>
		<link>https://www.bigmessowires.com/2026/10/12/applying-10-years-of-server-updates-in-one-shot/</link>
					<comments>https://www.bigmessowires.com/2026/10/12/applying-10-years-of-server-updates-in-one-shot/#comments</comments>
		
		<dc:creator><![CDATA[Steve]]></dc:creator>
		<pubDate>Tue, 13 Oct 2026 07:09:13 +0000</pubDate>
				<category><![CDATA[Business]]></category>
		<guid isPermaLink="false">https://www.bigmessowires.com/?p=9623</guid>

					<description><![CDATA[The Big Mess o&#8217; Wires website has a new foundation and updated look for 2026, cleaning out the cruft and junk. It&#8217;s a familiar story. Over the years, the site accumulated loads of customizations that tended to complicate updates. One day in 2016 an update broke the site. Lacking the energy to troubleshoot the problem, [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><img loading="lazy" decoding="async" src="https://www.bigmessowires.com/wp-content/uploads/2026/10/home-before-after.webp" alt="side by side comparison of old and new home page" width="1596" height="705" class="aligncenter size-full wp-image-9634" srcset="https://www.bigmessowires.com/wp-content/uploads/2026/10/home-before-after.webp 1596w, https://www.bigmessowires.com/wp-content/uploads/2026/10/home-before-after-300x133.webp 300w, https://www.bigmessowires.com/wp-content/uploads/2026/10/home-before-after-1024x452.webp 1024w, https://www.bigmessowires.com/wp-content/uploads/2026/10/home-before-after-768x339.webp 768w, https://www.bigmessowires.com/wp-content/uploads/2026/10/home-before-after-1536x678.webp 1536w" sizes="auto, (max-width: 1596px) 100vw, 1596px" /></p>
<p>The Big Mess o&#8217; Wires website has a new foundation and updated look for 2026, cleaning out the cruft and junk. It&#8217;s a familiar story. Over the years, the site accumulated loads of customizations that tended to complicate updates. One day in 2016 an update broke the site. Lacking the energy to troubleshoot the problem, I simply turned off updates and never turned them back on. Eventually the version of PHP that I was using reached end of life, but it couldn&#8217;t be updated without causing breakages either. For the past four years, I&#8217;ve paid a monthly fee for extended maintenance of my obsolete configuration. </p>
<p>Being frozen in time with a 10-year-old technology stack would be bad enough, but it was actually worse than that. The theme I was using, which determines the visual appearance of the site, was 21 years old! I could never update it, because I&#8217;d directly edited many of its files for reasons I&#8217;m sure were excellent but which I could never remember later. It was a similar story with several other key plugins. So there I was, stuck with a 2005-2007 infrastructure that wasn&#8217;t surviving very well in 2026.</p>
<p>I finally decided it was time to take action, backing up the whole site to my laptop and getting it running locally in a 5 GB container. This afforded me the time and space I needed to upgrade pieces of the infrastructure and break things temporarily while I worked. The trickiest part was getting it all back onto the server again, and cutting over quickly and cleanly from the old version to the new one. The whole process took me about 10 days of on-and-off work. </p>
<h2 class="bmow-subhead">Core Platform</h2>
<ul>
<li>Updated from WordPress 4.7.22 to 7.1.3, and PHP 7.4 to 8.4. Paid legacy-PHP support is no longer needed!</li>
<li>Lots of code that would crash under WordPress 7 or PHP 8 was removed or replaced.</li>
<li>The database also moved to InnoDB, MySQL&#8217;s newer table format.</li>
<li>Everything is https across the board now. Http redirects to https.</li>
</ul>
<h2 class="bmow-subhead">Database Character Set</h2>
<ul>
<li>Somehow the old database contained latin1 tables that actually held UTF-8 text, which caused a number of <a href="https://www.bigmessowires.com/2021/10/14/non-breaking-spaces-and-utf-8-madness/">odd problems I&#8217;ve written about before</a>. Depending on the age of the data, some text was doubly-encoded. </li>
<li>I used a script to examine and fix all of the database text as individually needed, instead of a blanket conversion.</li>
<li>Characters outside latin1 now work consistently. Posts and comments can contain äcçéntêd letters, Japanese 日本語のテキスト text, even 😆💩🦋emojis.</li>
<li>I also fixed over 1000 instances where the HTML non-breaking space entity &amp;nbsp; had been converted into Unicode character C2A0 (non-breaking space) and stored that way in the database, causing confusion and layout problems.</li>
</ul>
<h2 class="bmow-subhead">Plugins</h2>
<ul>
<li>Removed a cacheing plugin that was disabled anyway, a backup plugin that had silently stopped working five years prior, a security plugin of questionable value, a plugin that was supposed to magically turn my desktop theme into a mobile theme, and many others.</li>
<li>Found and configured new plugins for anti-spam, comment subscriptions, image format conversion, and link redirection.</li>
<li>Created a few small plugins to modify my new theme&#8217;s behavior, instead of modifying any theme files directly. These were mostly related to the appearance and behavior of the comment sections, but also the &#8220;Most Discussed&#8221; sidebar widget you see here.</li>
</ul>
<h2 class="bmow-subhead">Cleanup</h2>
<ul>
<li>Large amounts of spam and trash comments and leftover junk was deleted from the database, shrinking it by a third.</li>
<li>Deleted more than 50 installed but unused themes.</li>
<li>Removed old backups and other files accidentally left on the server years ago.</li>
<li>Removed all remaining traces of the old WooCommerce store at bigmessowires.com/shop. Since 2021, the store has been powered by Shopify and lives at shop.bigmessowires.com.</li>
<li>Removed some unused jQuery and Google Analytics code that was appearing on many pages.</li>
</ul>
<h2 class="bmow-subhead">Things That Were Broken On The Old Site</h2>
<ul>
<li>Fixed several dozen photos in old posts that were appearing sideways or upside down, due to changes over the years in the way browsers handle rotation metadata in images.</li>
<li>Repaired large numbers of embedded YouTube videos that weren&#8217;t working because of http vs https issues in the YouTube link.</li>
<li>Fixed many links that were typos or that didn&#8217;t work due to capitalization differences.</li>
<li>Reviewed about 100 dead links, replacing many of them with links to the Internet Archive.</li>
</ul>
<h2 class="bmow-subhead">Content, Look, and Speed</h2>
<ul>
<li>All images in posts and pages now have width and height attributes, so pages no longer jump around while loading.</li>
<li>Set featured images for most posts going back to 2007, used for the cards on the home page.</li>
<li>Changed the Archives widget to only show links for each year, instead of a separate link for each of the ~240 months in the blog&#8217;s history.</li>
<li>Addressed issues with past comments, like commenter names that were a space character rather than an empty string, and replies to comments that no longer existed.</li>
<li>Adopted a new modern and responsive theme, but with fSpring&#8217;s colors and feel. New home page card design, a new top banner, reworked sidebar, new numbered page UI for post listings and pages with over 50 comments.</li>
<li>The mobile version of the site now looks completely different than before, and more like the desktop version.</li>
<li>Implemented many page loading speedups: WebP images, lazy loading of images, delayed loading of the YouTube player until it&#8217;s actually clicked, fewer scripts. To view a typical page, it now requires only about a third of the data download that it used to. </li>
</ul>
<h2 class="bmow-subhead">Accessibility</h2>
<ul>
<li>This was an important one! For the last several years, a few unscrupulous law firms have been filing <a href="https://www.saul.com/insights/blog/ada-website-accessibility-risk">thousands of nuisance lawsuits related to ADA accessibility issues</a> against small web site operators.</li>
<li>Rather than a genuine problem report from a site visitor looking for help, these are straight-up cash grabs where the law firms hope the site operators will agree to pay a 5 or 6-figure settlement rather than take a risk in court, since fixing issues after the fact doesn&#8217;t necessarily absolve liability. </li>
<li>Prior to the server update, a popular accessibility checker tool crawled the BMOW site and flagged thousands of issues. With the updated site, it finds zero.</li>
<li>Meaningful &#8220;alt&#8221; tag text was added to over 1500 images, for use by screen-reader software. </li>
<li>All tables now have properly-tagged headers.</li>
<li>All content headings such as &#8220;Accessibility&#8221; above now use structural tags like &lt;h2&gt; and &lt;h3&gt; rather than relying solely on font size and weight to convey their purpose.</li>
<li>Closely-spaced links and buttons are now spaced further apart, as WCAG rules require.</li>
<li>UI colors were adjusted to maintain a minimum contrast level between text and background.</li>
<li>The site can be navigated with the keyboard and tab items.</li>
<li>Hidden labels and names that are only used by screen readers were added to many UI items.</li>
<li>Added an Accessibility statement page.</li>
</ul>
<h2 class="bmow-subhead">Preventing Mistakes</h2>
<ul>
<li>To avoid the risk of breaking something subtle that wouldn&#8217;t be noticed until later, the entire site was crawled and logged before beginning work. After making changes, the work-in-progress site was then crawled again to confirm that the only changes were the intended ones.</li>
<li>Rather than making ad-hoc edits to the server data and files, the update was constructed as a series of about 50 scripts that operated on a local copy of files, each script responsible for applying one specific update or change. The scripts could be re-run from the original server dump at any time.</li>
<li>Because my web host lacks any real sandboxing or versioning capability, the finished site was deployed to a subdomain for live testing. The cut-over was achieved by renaming and swapping the server root directories of the subdomain and main domain. </li>
</ul>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bigmessowires.com/2026/10/12/applying-10-years-of-server-updates-in-one-shot/feed/</wfw:commentRss>
			<slash:comments>7</slash:comments>
		
		
			</item>
		<item>
		<title>The Mother of All USB Wombat Firmware Updates</title>
		<link>https://www.bigmessowires.com/2026/10/10/the-mother-of-all-usb-wombat-firmware-updates/</link>
					<comments>https://www.bigmessowires.com/2026/10/10/the-mother-of-all-usb-wombat-firmware-updates/#comments</comments>
		
		<dc:creator><![CDATA[Steve]]></dc:creator>
		<pubDate>Sun, 11 Oct 2026 00:24:11 +0000</pubDate>
				<category><![CDATA[USB Wombat]]></category>
		<guid isPermaLink="false">https://www.bigmessowires.com/?p=8984</guid>

					<description><![CDATA[For three years, the ADB-USB Wombat firmware sat quietly at version 0.3.9. Everything worked well for most people, most of the time, but the key word in that sentence is &#8220;most&#8221;. My customer support inbox had many stories describing specific models of keyboards that didn&#8217;t type, mice that didn&#8217;t move, and KVMs that didn&#8217;t cooperate. [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><img loading="lazy" decoding="async" src="https://www.bigmessowires.com/wp-content/uploads/2026/10/PCB-assembly-line.jpg" alt="PCB manufacturing assembly line" width="800" height="394" class="aligncenter size-full wp-image-9026" srcset="https://www.bigmessowires.com/wp-content/uploads/2026/10/PCB-assembly-line.jpg 1331w, https://www.bigmessowires.com/wp-content/uploads/2026/10/PCB-assembly-line-300x148.jpg 300w, https://www.bigmessowires.com/wp-content/uploads/2026/10/PCB-assembly-line-768x379.jpg 768w, https://www.bigmessowires.com/wp-content/uploads/2026/10/PCB-assembly-line-1024x505.jpg 1024w, https://www.bigmessowires.com/wp-content/uploads/2026/10/PCB-assembly-line-900x444.jpg 900w" sizes="auto, (max-width: 800px) 100vw, 800px" /></p>
<p>For three years, the ADB-USB Wombat firmware sat quietly at version 0.3.9. Everything worked well for most people, most of the time, but the key word in that sentence is &#8220;most&#8221;. My customer support inbox had many stories describing specific models of keyboards that didn&#8217;t type, mice that didn&#8217;t move, and KVMs that didn&#8217;t cooperate. Too many of those stories ended with an unsatisfying &#8220;sorry, that device isn&#8217;t compatible.&#8221; Most of it seemed to be due to limitations of Microchip&#8217;s USB stack code, which I didn&#8217;t write and don&#8217;t understand well.</p>
<p>This fall, with the help of fancy new AI coding tools, I decided to work through that whole list of issues. Between late September and early October, the firmware went through eleven releases, from 0.3.11 to 3.21. Most of them never received any public announcement or release, so everything in 0.3.11 to 3.21 is effectively one giant update. If you have a Wombat, it&#8217;s time to <a href="/usb-wombat/#firmware">update your firmware</a>!</p>
<p>About the version numbers: Yes, it jumped from 0.3.16 to 3.17. I decided to ditch the leading zero, which served no practical purpose.</p>
<p>&nbsp;</p>
<h2 class="bmow-subhead">Greatly Improved USB Device Compatibility</h2>
<p>This was the biggest problem, and it had many causes. The first one was a basic byte/word size discrepancy in the USB stack code. When the Wombat fetched a USB device&#8217;s HID report descriptor, the code stored the length of the descriptor in an 8-bit variable. Later it checked that value against the expected length, a 16-bit variable. Any descriptor longer than 255 bytes got its length truncated, the length check failed, and device enumeration silently stopped. No keyboard, no mouse, nothing. Simple USB devices have small descriptors, but anything with complex features or lots of buttons can easily exceed 255 bytes. The Logitech Bolt receiver&#8217;s touchpad interface alone has a 429-byte descriptor. After fixing this bug, a huge number of devices that had never worked with the Wombat suddenly did.</p>
<p>To fix more compatibility bugs, I realized that my biggest limitation was testing. I could go broke buying hundreds of keyboards and mice and plugging them into the Wombat to see how they were handled. Then I realized that compatibility issues were almost always related to the USB report descriptor, and if I had the descriptor, I could &#8220;virtually&#8221; test a device against the Wombat without having a physical sample. So I put together a corpus of descriptors from about 200 devices, common ones and weird ones, harvested from forums and bug trackers all over the web. I created a simulator to test how the Wombat handled enumerating and processing sample reports from each device. This proved to be super useful and revealed all sorts of additional Wombat issues.</p>
<p>One big issue uncovered by the corpus testing was keyboards that report their keys as a bitmap instead of as a traditional array of pressed keys. This is common on gaming keyboards that support N-key rollover. The old firmware decoded those bitmaps as if they were key arrays, with entertaining results: on one keyboard tested, pressing the space bar consistently typed the letter &#8220;m&#8221;. Bitmap keyboards are now fully supported, including keyboards that send both formats on the same interface.</p>
<p>Then there were keyboards running QMK, VIA, Keychron, and Keyboardio firmware, which need to be explicitly asked to switch to the simpler &#8220;boot protocol&#8221; mode, gaming keyboards that split their keys across several separate USB interfaces (Logitech G810 and some Razer models), gaming mice and KVM switches whose buttons and scroll wheels were ignored by the Wombat, devices that combine a keyboard and mouse in one, and the Apple Magic Keyboard, which misbehaved after pressing Caps Lock because of a bug in how the Wombat sent keyboard LED updates.</p>
<p>&nbsp;</p>
<h2 class="bmow-subhead">Multiple Simultaneous Keyboards and Mice</h2>
<p>A notable limitation of the old firmware was that it managed exactly one keyboard and one mouse. If you plugged in more, all but one of them would be ignored, and it wasn&#8217;t easy to predict which one would actually work. That caused a lot of confusion, especially because some gaming mice also pretend to be keyboards for their macro buttons, and some keyboards also pretend to be mice. This meant that a real keyboard could end up being ignored because the Wombat was managing the mouse&#8217;s macro button keyboard instead.</p>
<p>Now every attached USB keyboard and mouse works at the same time. Keys from all keyboards are combined, mouse movements are added together, and buttons from all mice are merged. It all just works.</p>
<p>To accomplish this, it required more than just code changes to poll additional USB devices and combine their reports. The PIC microcontroller struggled to manage polling and processing of up to 8 USB devices at once while also responding to ADB commands fast enough to meet the timing requirements. I created a special measurement build of the Wombat firmware to capture timing and profiling data, testing it on an Apple IIgs and all of my Macs to find the most challenging environment. The most demanding was the Mac IIci, which fires about 244 ADB commands per second in bursts during startup, with only about 500 microseconds between them. After optimizing the code and carefully reviewing interrupt priorities, the Wombat is now able to handle the heavier USB load while simultaneously processing high-frequency ADB commands, no matter how many devices are attached.</p>
<p>In ADB-to-USB mode, the Wombat now supports up to two ADB keyboards and two ADB mice at the same time, like an Apple Extended Keyboard plus a separate numeric keypad, or a keyboard, a trackball, and a mouse in one daisy chain. ADB devices can also now be plugged in and unplugged while the Wombat is running.</p>
<p>&nbsp;</p>
<h2 class="bmow-subhead">A Real Preferences Menu</h2>
<p>The Wombat has no display screen and no buttons except a power key, so how do you configure its settings? Previously the answer was a collection of ugly tricks. Depending on the setting, you might short-click or long-click the mouse wheel, press a magic key combination, or change an option that was incongruously included in the key mapping table. Nobody remembered any of these methods, including me. Only one of these settings was actually preserved when power was turned off, so the rest had to be reconfigured every time.</p>
<p>Now the Wombat has a real preferences menu! Open a text editor or go to the BASIC prompt, press Control-Shift-Capslock-P, and the Wombat &#8220;types&#8221; a menu into your document:</p>
<pre>BMOW Wombat ver 3.21 preferences
1 Keyboard layout is US
2 Mouse speed is 3 of 6
3 Right button is CTRL LEFT CLICK
4 Scroll wheel arrow keys are ON
0 Restore defaults
1234 change, RETURN save, ESC cancel</pre>
<p>Press a number key to change a setting. Settings are saved in the Wombat&#8217;s flash memory, and survive power-off and firmware updates.</p>
<p>To correctly support this method of virtual typing for menus, the Apple IIgs needed some special love. In GS/OS, the IIgs couldn&#8217;t keep up with the speed of the Wombat&#8217;s virtual typing. Longer messages apparently overflowed a keyboard buffer in the OS and came out garbled. I didn&#8217;t want to slow down the text output for everybody, though, so I developed a way to fingerprint the host computer and detect when it&#8217;s a IIgs running GS/OS, based upon the rate of ADB commands received and the mix of commands. That enabled me to slow down the text for GS/OS only.</p>
<p>At the IIgs BASIC prompt, every line of menu text ended in a Return keypress, so BASIC tried to interpret it as a code statement and replied with ?SYNTAX ERROR to each line. That was super annoying, so I developed another fingerprinting technique to detect when the host computer is a IIgs running BASIC. When in BASIC, the Wombat now ends each line of text with Control-X instead of Return, which cancels the line instead of running it.</p>
<p>&nbsp;</p>
<h2 class="bmow-subhead">No Stone Left Unturned</h2>
<p>Beyond those three big changes, there was a long list of other fixes and improvements:</p>
<ul>
<li><em>Stuck and lost keys</em> &#8211; Several bugs that caused keys to get stuck down, go missing, or arrive in the wrong order are fixed, in both directions.</li>
<li><em>Caps Lock</em> &#8211; At least half a dozen separate bugs caused the Wombat, the keyboard, and the computer to disagree about whether Caps Lock was on. Caps Lock is now in sync everywhere, including the latching Caps Lock key on Apple Extended Keyboards.</li>
<li><em>Startup key combinations</em> &#8211; Combinations held down during startup or reset now work reliably: Control-Apple-Reset and the self-test on the Apple IIgs, Command-Option-P-R to reset a Mac&#8217;s PRAM, Command-Option-O-F for Open Firmware, and others.</li>
<li><em>Screensavers and sleep</em> &#8211; In ADB-to-USB mode on a modern computer, the Wombat no longer prevents the computer from going to sleep or starting its screensaver.</li>
<li><em>Boot prompts</em> &#8211; The Wombat now works correctly in environments that poll the keyboard but never poll the mouse, like the Linux disk encryption password prompt and some BIOS screens.</li>
<li><em>ADB devices</em> &#8211; Kensington Turbo Mouse 4.0 and 5.0 trackballs work better, and the right button of MacAlly 2-button mice now works.</li>
<li><em>USB hubs</em> &#8211; The Wombat supports up to 8 hub ports in total, and older firmware crashed if you exceeded that. It now ignores the extra ports, and the -I help command tells you how many were ignored.</li>
</ul>
<p>&nbsp;</p>
<h2 class="bmow-subhead">Weird Bugs</h2>
<p>A few of the bugs that I found were especially interesting.</p>
<p><em>The hourly screw-up</em> &#8211; A few customers had reported problems that occurred regularly after about an hour of Wombat use. One person even told me that after 30-60 minutes of use, their mouse started typing keys on their Mac. I must admit I didn&#8217;t give these reports much weight, and thought it must be a coincidence or caused by something else. Ha ha. The actual cause was the Wombat&#8217;s microsecond timer, a 32-bit counter. 2^32 microseconds sounds like a long time, but it&#8217;s actually only about 72 minutes. When the counter wrapped around, a time comparison in the firmware went wrong and the Wombat thought the Mac had sent an ADB reset. This reset all the ADB devices and a bunch of related state data, without properly reinitializing it again. Chaos ensued.</p>
<p><em>Intermittent failures</em> &#8211; In one of my tests, the USB keyboard occasionally didn&#8217;t work after power-up, but I couldn&#8217;t figure out why. After much digging, the cause turned out to be the Microchip USB stack&#8217;s internal event queue. It held only four events, and when it was full, it silently threw away new events. Because nobody will ever experience more than four USB events before they can respond to them, right? If an event related to enumerating a newly-attached device was lost, that device got stuck waiting forever. A deeper queue plus a timeout fixed this.</p>
<p>&nbsp;</p>
<h2 class="bmow-subhead">Microchip Tools and Automated Testing</h2>
<p>Years back when I originally selected the PIC32 for the Wombat, a BMOW reader warned me against it. Not for any hardware reason, but because he said the Microchip tools made him angry. I can now appreciate why.</p>
<p>Virtually every time I return to Wombat development after an extended break, I find that some Windows update or who-knows-what has caused my PICkit 3 programmer to stop working. Again, and again. This time was no exception. Was it a Windows 11 thing? Java update? A USB driver issue? It didn&#8217;t help that Microchip themselves discouraged people from buying the PICkit even when it was an active product, and it&#8217;s since been discontinued.</p>
<p>I&#8217;d been carefully avoiding updating MPLAB X, the Microchip IDE, because it had been such a pain to get configured the first time. But in an attempt to solve my PICkit woes, I finally bit the bullet and updated my 2017 installation of MPLAB X 3.61 to a shiny new MPLAB X 6.20, the most recent version still with PICkit support. I was pleasantly surprised to discover that I could use the 6.20 GUI and debugging tools, but keep the compiler and toolchain from 3.61, so a painful project reconfiguration wasn&#8217;t needed. That mostly resolved my PICkit issues, although I&#8217;ve still had some mysterious failure episodes where I needed to unplug everything and plug it in again.</p>
<p>Once I had the PICkit mostly working, and attached a serial cable to read the Wombat&#8217;s debug output, it opened up some very cool opportunities for automated testing. My AI coding tool created scripts that would flash a new firmware version to the Wombat, run it, look at the serial log output to collect data on timing and USB events, then apply fixes to the firmware based upon the collected data, compile and flash the new firmware, and try again. It modified, tested, and fixed itself in a repeating dev cycle while I sat there drinking beer and watching it work, nodding my head. Impressive stuff.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bigmessowires.com/2026/10/10/the-mother-of-all-usb-wombat-firmware-updates/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
			</item>
		<item>
		<title>Thoughts on implementing game controller support for the ADB-USB Wombat</title>
		<link>https://www.bigmessowires.com/2026/10/03/thoughts-on-implementing-game-controller-support-for-the-adb-usb-wombat/</link>
					<comments>https://www.bigmessowires.com/2026/10/03/thoughts-on-implementing-game-controller-support-for-the-adb-usb-wombat/#comments</comments>
		
		<dc:creator><![CDATA[Steve]]></dc:creator>
		<pubDate>Sat, 03 Oct 2026 18:32:49 +0000</pubDate>
				<category><![CDATA[USB Wombat]]></category>
		<guid isPermaLink="false">https://www.bigmessowires.com/?p=8970</guid>

					<description><![CDATA[The Wombat is great for adapting USB keyboards and mice to classic ADB Macintoshes, and ADB keyboards and mice to modern USB computers. But what about game controllers? They&#8217;re not supported. It&#8217;s an often-requested feature, but one that&#8217;s not as easy to implement as it might seem. The main problem is that unlike keyboards and [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><img loading="lazy" decoding="async" src="https://www.bigmessowires.com/wp-content/uploads/2026/10/gamepad2.png" alt="Classic style game controller with D-pad" width="800" height="409" class="aligncenter size-full wp-image-8973" srcset="https://www.bigmessowires.com/wp-content/uploads/2026/10/gamepad2.png 1122w, https://www.bigmessowires.com/wp-content/uploads/2026/10/gamepad2-300x153.png 300w, https://www.bigmessowires.com/wp-content/uploads/2026/10/gamepad2-768x392.png 768w, https://www.bigmessowires.com/wp-content/uploads/2026/10/gamepad2-1024x523.png 1024w, https://www.bigmessowires.com/wp-content/uploads/2026/10/gamepad2-900x460.png 900w" sizes="auto, (max-width: 800px) 100vw, 800px" /></p>
<p>The <a href="/usb-wombat/">Wombat</a> is great for adapting USB keyboards and mice to classic ADB Macintoshes, and ADB keyboards and mice to modern USB computers. But what about game controllers? They&#8217;re not supported. It&#8217;s an often-requested feature, but one that&#8217;s not as easy to implement as it might seem. The main problem is that unlike keyboards and mice, there doesn&#8217;t exist any uniform standard for communicating with game controllers: neither for ADB nor for USB.</p>
<p>In the past when people have asked about game controller support, it&#8217;s not always clear if they&#8217;re asking to use USB game controllers via the Wombat on a vintage Mac, or if they&#8217;re asking to use classic ADB game controllers like those from Gravis via the Wombat on a modern PC. From reviewing the comments and emails I&#8217;ve received, I think interest is roughly evenly split between USB-to-ADB and ADB-to-USB game controller support.</p>
<p>I&#8217;m using the term &#8220;game controller&#8221; here to include both joysticks (typically analog) as well as gamepads (typically a collection of buttons with digital on/off status). The challenges involved in both are similar, but the details differ. </p>
<h2 class="bmow-subhead">USB-to-ADB Game Controller Implementation</h2>
<p>Of the two possible directions for adapting game controller communications, this is probably the easier one: connecting USB game controllers via the Wombat to play classic games on a vintage Macintosh. For the moment, let&#8217;s limit our thinking to just gamepads with digital buttons. A simple way to implement basic support might be to program the Wombat to make gamepads appear like a keyboard to the Mac, with a fixed key map. For example the D-pad buttons could send arrow key press events, ABXY could literally type A, B, X and Y, and the Select button, Start, and shoulder buttons would send other keyboard key events. </p>
<p>This may be doable, but there are some difficulties. The main issue is that as far as I understand, there’s no true standard way for USB game controllers to communicate their state to a USB host. Some use DirectInput, some use XInput, some use regular USB HID as if they were a standard keyboard or mouse. The Wombat would probably need to support all of these methods, and somehow determine which one to use. DirectInput and XInput differ from regular USB HID, and supporting those input methods would require developing a new feature for the Wombat firmware. </p>
<p>The other big challenge is that apparently there’s no standard order in which USB game controllers report the state of their buttons. One might report its D-pad as buttons 0 through 3, another as buttons 2-5, another as buttons 6-9. That would seem to prevent the Wombat from using any kind of fixed button-to-key mapping, like automatically treating the D-pad buttons as arrow keys, because it wouldn’t know which are the D-pad buttons. </p>
<p>Maybe the games themselves could be configured in their preference settings to expect directional movement input from a weird key combination like X/1/B/A, but I don’t know if all games are that flexible. Probably some are hard-coded to expect arrow keys for movement and space bar to jump or shoot. Users would also probably be confused or frustrated if the behavior and default button-to-key mapping were different depending on the exact brand of USB gamepad they used, seeing different behavior from nearly identical-looking gamepads. </p>
<p>It would be better to include a configuration / mapping layer somewhere, but where? The Wombat lacks any UI of its own, and isn&#8217;t suited to that task. Maybe a text configuration file could be loaded from a USB thumb drive. It seems clunky, though.</p>
<p>The USB gamepad wouldn&#8217;t necessarily need to appear as a standard keyboard to the ADB Macintosh. Another option could be to make it appear as if a Gravis gamepad were present. This would also require installing the Gravis control panel on the Mac. Fortunately the Gravis ADB protocols have been <a href="https://github.com/lampmerchant/tashnotes/tree/main/macintosh/adb/protocols">documented by Tashtari</a>, so it is technically possible, but I&#8217;m not sure it would really solve any problems. If the Wombat doesn&#8217;t know whether USB gamepad button 1 is D-pad right or the Start button, then it can&#8217;t do a sensible job of emulating a Gravis gamepad, no matter how the Gravis control panel is set up. Ultimately I&#8217;m not sure that emulating a Gravis device would provide any clear benefit over emulating a keyboard and/or mouse.</p>
<p>Maybe the situation isn’t as bad as I fear, and in practice USB game controllers are more consistent than I think? I could buy a sample set of the 5 or 10 most common or most popular USB game controllers, and analyze how they work. But that could be expensive and time-consuming.</p>
<p>As for joysticks, I know a lot less about how they work, both on the ADB and USB side. According to one report, typical ADB joysticks behave like a mouse+keyboard to the Macintosh, where the &#8220;cursor&#8221; snaps back the same distance it traveled in the axis when pressure is no longer applied to the stick, and the buttons get mapped to keyboard buttons. I&#8217;d probably need to purchase some ADB joysticks to experiment with, to confirm their behaviors and see if there are differences across models and brands.</p>
<h2 class="bmow-subhead">ADB-to-USB Game Controller Implementation</h2>
<p>I&#8217;ve thought much less about this direction. To me, it seems the less compelling of the two. There are real reasons to want USB-to-ADB game controller support: you want to play a classic game on your classic Mac, but classic ADB game controllers are very hard to find. A USB game controller plus the Wombat could then serve as a substitute. The purpose of ADB-to-USB game controller support would be more for nostalgia or for laughs maybe. Yeah you could use your ADB Gravis Mousestick II to play a modern game on your Windows machine, but it&#8217;s a little silly when you probably already have a perfectly good USB joystick, or can purchase one for a few dollars.</p>
<p>Putting aside the question of rationale, Gravis protocol support would be a must for ADB-to-USB game controller support. All of the most popular ADB game controllers were made by Gravis, so the Wombat definitely would need to know how to talk to them. Translating the input from the Gravis controller and emulating a USB game controller or joystick might be simpler than the reverse task, because I could probably just choose one of the three common interfaces (DirectInput, XInput, USB HID) instead of needing to support all three. And I wouldn&#8217;t need to worry about non-standard button mappings, since I&#8217;d only need one mapping, and could just copy the mapping from any popular USB game controller. I think.</p>
<p>As you can see, this is all about as clear as mud, and maybe it gives you more appreciation for why game controllers have remained unsupported by the Wombat. It&#8217;s just not a straightforward task, and there&#8217;s no obvious &#8220;best&#8221; solution. I&#8217;m sharing my thoughts here and looking for your feedback on all of this. Which direction of game controller emulation would be most valuable to you? How would you imagine it working, exactly? Have I overlooked or misunderstood anything important about the implementation details? Do you have any experience with USB game controllers and how they typically work, how they select between the various communication protocols and so on? If you all can help me sketch out a plan that makes sense here, I&#8217;ll try to implement it. </p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bigmessowires.com/2026/10/03/thoughts-on-implementing-game-controller-support-for-the-adb-usb-wombat/feed/</wfw:commentRss>
			<slash:comments>5</slash:comments>
		
		
			</item>
		<item>
		<title>ADB-USB Wombat firmware fix for unrecognized USB keyboards and mice</title>
		<link>https://www.bigmessowires.com/2026/09/29/adb-usb-wombat-firmware-fix-for-unrecognized-usb-keyboards-and-mice/</link>
					<comments>https://www.bigmessowires.com/2026/09/29/adb-usb-wombat-firmware-fix-for-unrecognized-usb-keyboards-and-mice/#comments</comments>
		
		<dc:creator><![CDATA[Steve]]></dc:creator>
		<pubDate>Tue, 29 Sep 2026 22:12:49 +0000</pubDate>
				<category><![CDATA[USB Wombat]]></category>
		<guid isPermaLink="false">https://www.bigmessowires.com/?p=8947</guid>

					<description><![CDATA[Mea culpa time here. Since the beginnings of the Wombat there have been reports that certain USB keyboards and mice weren&#8217;t recognized by the device. Nothing happened when typing or moving the mouse, and the Wombat&#8217;s activity LED didn&#8217;t blink. The affected devices were usually fancier keyboards and mice with lots of buttons and features, [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><img loading="lazy" decoding="async" src="https://www.bigmessowires.com/wp-content/uploads/2017/06/20170624_131312.jpg" alt="Wombat device in the plastic case" width="800" height="519" class="aligncenter size-full wp-image-4856" srcset="https://www.bigmessowires.com/wp-content/uploads/2017/06/20170624_131312.jpg 800w, https://www.bigmessowires.com/wp-content/uploads/2017/06/20170624_131312-300x195.jpg 300w, https://www.bigmessowires.com/wp-content/uploads/2017/06/20170624_131312-768x498.jpg 768w" sizes="auto, (max-width: 800px) 100vw, 800px" /></p>
<p>Mea culpa time here. Since the beginnings of the Wombat there have been reports that certain USB keyboards and mice weren&#8217;t recognized by the device. Nothing happened when typing or moving the mouse, and the Wombat&#8217;s activity LED didn&#8217;t blink. The affected devices were usually fancier keyboards and mice with lots of buttons and features, as opposed to plain vanilla $8 two-button mice and generic 101-key keyboards. I had always chalked this up to some unknown issue in the Microchip USB stack code for handling of peripherals with multiple USB interfaces or a single interface with multiple types of data. It was something in the bowels of that code, which I didn&#8217;t write and didn&#8217;t understand too well, so I treated it as a regrettable known incompatibility.</p>
<p>Recently a few Wombat customers reported more problems like these related to the Logitech Bolt USB receiver, and I decided to take another look. One helpful customer sent me a dump of the Bolt&#8217;s USB HID report descriptor as reported by Linux. I dug through the code with the help of AI, attempting to analyze how the USB stack would handle this report descriptor. It looked hopeless, until&#8230;</p>
<p>After wading through thousands of lines of mind-numbing USB goo, I found the smoking gun. Upon completing a USB transfer, the code was storing the number of bytes transferred in an 8-bit local variable and then comparing it to the 16-bit expected transfer size. The result was that any transfer larger than 255 bytes would always fail! Please queue the laugh track and sad trombone sound effects.</p>
<p>What does this have to do with composite USB devices? Nothing, except that composite USB devices have more interfaces with more data to report, resulting in larger report descriptors that are more likely to exceed 255 bytes. </p>
<p><a href="https://www.bigmessowires.com/usb-wombat/#firmware">Firmware 0.3.11</a> was released yesterday to fix this bug. It&#8217;s not just something relevant to the Logitech Bolt. If you&#8217;ve been using the Wombat in USB-to-ADB mode and encountered certain keyboards or mice that just mysteriously didn&#8217;t work with the Wombat, please try the new firmware. There&#8217;s a good chance that this will fix it. </p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bigmessowires.com/2026/09/29/adb-usb-wombat-firmware-fix-for-unrecognized-usb-keyboards-and-mice/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
		<item>
		<title>Floppy Emu Hardware Failure Analysis Results</title>
		<link>https://www.bigmessowires.com/2026/09/29/floppy-emu-hardware-failure-analysis-results/</link>
					<comments>https://www.bigmessowires.com/2026/09/29/floppy-emu-hardware-failure-analysis-results/#respond</comments>
		
		<dc:creator><![CDATA[Steve]]></dc:creator>
		<pubDate>Tue, 29 Sep 2026 21:33:40 +0000</pubDate>
				<category><![CDATA[Floppy Emu]]></category>
		<guid isPermaLink="false">https://www.bigmessowires.com/?p=8936</guid>

					<description><![CDATA[Nobody enjoys troubleshooting non-working hardware, and I&#8217;m no exception. Every time I ask a contract manufacturer to assemble a batch of more Floppy Emus, there are always a few that don&#8217;t pass QA testing. What happens with those? For several years the accumulating QA failures have been sitting in a pile in the corner of [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><img loading="lazy" decoding="async" src="https://www.bigmessowires.com/wp-content/uploads/2014/03/Screen-Shot-2014-03-07-at-8.40.06-AM.png" alt="A logic probe testing a circuit board" width="745" height="437" class="aligncenter size-full wp-image-1372" srcset="https://www.bigmessowires.com/wp-content/uploads/2014/03/Screen-Shot-2014-03-07-at-8.40.06-AM.png 745w, https://www.bigmessowires.com/wp-content/uploads/2014/03/Screen-Shot-2014-03-07-at-8.40.06-AM-300x175.png 300w" sizes="auto, (max-width: 745px) 100vw, 745px" /></p>
<p>Nobody enjoys troubleshooting non-working hardware, and I&#8217;m no exception. Every time I ask a contract manufacturer to assemble a batch of more Floppy Emus, there are always a few that don&#8217;t pass QA testing. What happens with those? For several years the accumulating QA failures have been sitting in a pile in the corner of my office, along with a few customer returns, all waiting for the day when I would dedicate time to their investigation. It was a long time coming, but &#8220;Failure Analysis Day&#8221; finally arrived, or more like Failure Analysis Month, and the results were pretty interesting.</p>
<p>Here&#8217;s a breakdown of the unique causes of failure that I identified, and the number of boards affected by each cause.</p>
<table>
<tr>
<th scope="col" class="bmow-th"><strong>Hardware Issue Diagnosis</strong></th>
<th scope="col" class="bmow-th"><strong>Count</strong></th>
</tr>
<tr>
<td>clock crystal / no clock</td>
<td>26</td>
</tr>
<tr>
<td>clock crystal / bad clock</td>
<td>16</td>
</tr>
<tr>
<td>bad CPLD chip</td>
<td>6</td>
</tr>
<tr>
<td>microcontroller not programmed</td>
<td>5</td>
</tr>
<tr>
<td>soldering problems</td>
<td>5</td>
</tr>
<tr>
<td>bad microcontroller chip</td>
<td>4</td>
</tr>
<tr>
<td>broken display header</td>
<td>1</td>
</tr>
<tr>
<td>missing component</td>
<td>1</td>
</tr>
<tr>
<td>cracked PCB</td>
<td>1</td>
</tr>
<tr>
<td>no issue, good board</td>
<td>1</td>
</tr>
<tr>
<td>unknown, couldn&#8217;t resolve</td>
<td>2</td>
</tr>
</table>
<p>&nbsp;<br />
<strong><strong>Clock Crystal</strong></strong> </p>
<p>This was a strange failure that required a lot of time to track down initially, but once I learned to recognize the symptoms, I realized that most of my QA failures were due to this problem. I wrote about the clock crystal mysteries in more detail in a <a href="https://www.bigmessowires.com/2026/08/30/adventures-in-microcontroller-circuit-debugging/">separate post last month</a>. The short story is that during my most recent manufacturing batch, my normal supplier of clock crystals was out of stock. The contract manufacturer, with my approval, substituted a different crystal with the same specs. It shouldn&#8217;t have affected anything. But somehow it did.</p>
<p>26 of the QA failures appeared to have no functioning clock at all. The board utterly failed to do anything when the microcontroller clock source was changed to the external crystal. A further 16 displayed some level of function, but with erratic behavior or failures at higher clock speeds. Initially I wasn&#8217;t sure whether this was due to the newer crystals exposing some defect or fragility in the Floppy Emu design, or whether it was simply caused by defective or damaged crystals. Eventually I came to the opinion that the crystals were damaged by rough handling or overheating during assembly. Replacing the crystals and reprogramming the boards resolved all the issues. </p>
<p>&nbsp;<br />
<strong><strong>CPLD Chip</strong></strong> </p>
<p>The Xilinx CPLD chip on the Floppy Emu is a delicate flower that has long been a source of challenges. Prior to this year&#8217;s crystal-gate debacle, the CPLD was the single biggest source of failures that I&#8217;d observed. As the chip that&#8217;s directly connected to the Floppy Emu&#8217;s external interface, it bares the brunt of any static discharge or electrical stress. It&#8217;s a 5V-tolerant 3.3V part, but its 5V tolerance has sometimes seemed a bit questionable, at least in the way it&#8217;s used here.</p>
<p>Symptoms of a failed or bad CPLD can include disk emulation failures, overheating, or erratic behavior. Usually the device will still be functional and text appears on its display, but the disk features no longer work. In extreme cases the failed CPLD acts as a hard short-circuit from power to ground, and then nothing works. Replacing and reprogramming the CPLD resolved all of the problems with these boards.</p>
<p>&nbsp;<br />
<strong><strong>Microcontroller not programmed</strong></strong>  </p>
<p>Amusingly, or depressingly depending on your perspective, the third leading cause of QA failures was that the microcontroller simply wasn&#8217;t programmed. Somebody fell asleep at the switch at the contract manufacturer, lost track of what they were doing, put a PCB in the wrong pile, or whatever. A board with an unprogrammed microcontroller will appear completely dead at first glance, but it still responds in the debugger and it only takes a few seconds to flash the chip and get everything working.</p>
<p>&nbsp;<br />
<strong><strong>Soldering problems</strong></strong>  </p>
<p>Every component must be electrically bonded to the PCB with solder. Soldering problems can be tough to spot with the naked eye, but usually jump out under magnification, so one of my first troubleshooting steps is usually to look at a problematic board at 10x. I really should get a cool desktop microscope, but for the moment I&#8217;m using a cheap 10x jeweler&#8217;s loupe which works well enough.</p>
<p>A couple of boards had too much solder in places, resulting in a solder bridge that unintentionally connected two adjacent IC pins. But it was more common to find joints with insufficient solder or poor solder joints, where an IC pin was sort of resting on the PCB pad without actually bonding to it. Fortunately both problems were easy to fix with a soldering iron and a bit of flux.</p>
<p>&nbsp;<br />
<strong><strong>Bad microcontroller chip</strong></strong> </p>
<p>The onboard microcontroller trip is another potential source of failure. In my experience, these microcontrollers are pretty robust, and the only failures I have seen are caused in the field when customers accidentally connect the Floppy Emu cable backwards to their Apple II Disk II controller. This is distressingly easy to do, since the Disk II controller has bare pin connectors instead of a shrouded and keyed header. A backwards connection results in +12 and -12 volts applied to the mcu&#8217;s pins, killing it. </p>
<p>Unfortunately the symptoms of a bad microcontroller are nearly identical to the symptoms of a bad clock crystal: a completely unresponsive board, with no debugger activity. I had to review each non-responsive board&#8217;s history in order to guess which issue was at fault. In some cases I guessed wrong, and I ended up replacing the microcontroller, and then when that didn&#8217;t help, also replacing the clock crystal.</p>
<p>&nbsp;<br />
<strong><strong>Other</strong></strong> </p>
<p>The remaining issues were all one-offs. One board&#8217;s display header was physically broken and missing a pin, resulting in a blank display. Another board failed QA because the LED didn&#8217;t illuminate, except there was no LED! There was only a blank pad on the PCB. I also encountered a failure due to a PCB that was physically cracked, a long line running down the breadth of the PCB that could only be seen clearly under light from a specific angle. Two more boards defied my efforts to pinpoint the cause of their failures, and after spending too much time on them, I threw them into the scrap bin. </p>
<p>The very last board that I examined turned out to have no problems at all. I tested it extensively and it worked perfectly. This might have failed QA due to something external like a bad power supply or cable, or maybe it was simply miscategorized. </p>
<p>&nbsp;<br />
<strong><strong>Final results</strong></strong> </p>
<p>Of 68 Floppy Emus in the failure analysis heap, I managed to resuscitate 65 of them. That&#8217;s a pretty solid percentage! I learned to recognize the symptoms of certain failure causes, so I can address them faster if I see them again. More importantly, the failure analysis learnings (especially about clock crystals) will also help guide me in making design and assembly process changes, so I can reduce the number of future QA failures. Knowledge is power, as they say, and now I have lots of power. </p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bigmessowires.com/2026/09/29/floppy-emu-hardware-failure-analysis-results/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
