<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Arbee&#x27;s WIP Emporium</title>
  <subtitle>This page will include WIP screenshots and other fun stuff for MAME™, M1, and whatever else I&#x27;m working on.</subtitle>
  <link href="https://rb6502.github.io/feed.xml" rel="self"/>
  <link href="https://rb6502.github.io/"/>
  <id>https://rb6502.github.io/</id>
  <updated>2026-07-03T18:46:00-04:00</updated>
  <author><name>Arbee</name></author>
  <entry>
    <title>MAMEception</title>
    <link href="https://rb6502.github.io/2026/07/03/mameception/"/>
    <id>https://rb6502.github.io/2026/07/03/mameception/</id>
    <published>2026-07-03T18:46:00-04:00</published>
    <updated>2026-07-03T18:46:00-04:00</updated>
    <category term="General"/>
    <content type="html">&lt;p&gt;The old MacMAME runs Pacman full speed with sound on the Power Macintosh 6100/60 driver now.  &lt;a href=&quot;https://www.youtube.com/watch?v=N0kpWXno7rk&quot;&gt;Check it out!&lt;/a&gt;&lt;/p&gt;</content>
  </entry>
  <entry>
    <title>Machines may calculate, but only humans can dream</title>
    <link href="https://rb6502.github.io/2026/06/23/machines-may-calculate-but-only-humans-can-dream/"/>
    <id>https://rb6502.github.io/2026/06/23/machines-may-calculate-but-only-humans-can-dream/</id>
    <published>2026-06-23T11:31:00-04:00</published>
    <updated>2026-06-23T11:31:00-04:00</updated>
    <category term="General"/>
    <content type="html">&lt;p&gt;Yeah, I&amp;rsquo;m gonna keep going with the Terminator 2 quotes.  MAME now has &lt;a href=&quot;https://docs.mamedev.org/contributing/index.html&quot;&gt;an AI policy for contributors&lt;/a&gt;.  It&amp;rsquo;s basically what I said in my previous post, but stated more formally.  But you&amp;rsquo;re not here for that, you&amp;rsquo;re here to hear more about the Power Macintosh emulation, so let&amp;rsquo;s get started.&lt;/p&gt;
&lt;p&gt;First up, since the last burst of activity on the pmac6100, the boot chime has played perfectly but sound in Mac OS was scratchy.  I assumed for a long time it was due to PowerPC math issues when emulating the software mixer in Mac OS, but nothing improved with the mass of improvements to the PowerPC core.  After accepting that my initial theory was wrong I aimed Claude at the audio output emulation, not expecting much.  It came back and told me I was misreporting which half of the audio double buffer was currently active, causing newly mixed data to be written to the buffer half currently being played rather than the other half.  I fixed that and got &lt;a href=&quot;https://www.youtube.com/watch?v=HER2kgNmZIA&amp;amp;t=30s&quot;&gt;perfect clear sound&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Secondly, no version of Mac OS beyond 7.5.5 would boot.  They&amp;rsquo;d act like there was no enabler for the machine.  I dug into that with Claude assisting and found that the reason was a bit weird: the ROM for the 6100/7100/8100 sets the machine type by a combination of the system ID register and the measured CPU clock speed (!)  It was measuring using the PowerPC&amp;rsquo;s &amp;lsquo;decrementer&amp;rsquo;, basically a free-running timer that can optionally generate interrupts.  The problem?  The PowerPC 601&amp;rsquo;s decrementer didn&amp;rsquo;t work like it does on other PowerPC chips.  It measures nanoseconds rather than clock cycles.  Implementing it to start counting immediately got the measured clocks in place and the ROM dutifully set the machine ID to &amp;ldquo;Power Macintosh 6100/60&amp;rdquo;, which is exactly what we wanted.&lt;/p&gt;
&lt;p&gt;With the machine type correct, System 7.1.2P showed the proper machine type in the Finder&amp;rsquo;s About box.  Systems 7.6 and 8.0 booted, and the 8.5 install CD would boot to Finder but randomly bomb out early in the install process.  And 8.1 would boot to Finder but freeze right as the desktop appeared.  A bit of tracing revealed all of these symptoms were due to memory at the very top of RAM getting corrupted.  I eventually realized that was due to the RAM mapping not being exactly right (I was mirroring the wrong banks to the wrong places).  I fixed that, with some help from a commented disassembly I made of the boot ROM&amp;rsquo;s memory sizing code, and all of those problems went away.  8.1 now runs perfectly (and much faster than on 68K machines) and with a small fix to the serial DMA register so the AppleTalk check doesn&amp;rsquo;t hang 8.5 and 8.6 also boot to Finder and run normally.&lt;/p&gt;
&lt;p&gt;The final frontier is Mac OS 9, the last version before the whole code base was famously given a funeral by Steve Jobs.  It boots to the initial &amp;ldquo;Mac OS 9&amp;rdquo; splash and then gets hung up trying to talk to a device that doesn&amp;rsquo;t exist, apparently SCSI of some kind.  Stay tuned&amp;hellip;&lt;/p&gt;</content>
  </entry>
  <entry>
    <title>I need your clothes, your boots, and your motorcycle</title>
    <link href="https://rb6502.github.io/2026/06/16/i-need-your-clothes-your-boots-and-your-motorcycle/"/>
    <id>https://rb6502.github.io/2026/06/16/i-need-your-clothes-your-boots-and-your-motorcycle/</id>
    <published>2026-06-16T12:53:00-04:00</published>
    <updated>2026-06-16T12:53:00-04:00</updated>
    <category term="General"/>
    <content type="html">&lt;p&gt;One of the reasons little progress was made on the Power Macintosh emulation in MAME for a long time is that it&amp;rsquo;s &lt;em&gt;very&lt;/em&gt; tedious to debug.  There&amp;rsquo;s a lot of code surface, it&amp;rsquo;s written in 3 languages (PowerPC, emulated 680×0, and compiled FORTH), and I&amp;rsquo;m not as familiar with the innards of the newer stuff like the Code Fragment Manager as I am with the behavior of the 680×0 codebase.  So, this being 2026, I asked Claude Code if it could control and debug MAME.  It came back with &amp;ldquo;yes, with limitations&amp;rdquo; and after a few tries settled in to using a combination of generating custom Lua boot scripts and modifying MAME to log what&amp;rsquo;s happening to a file.&lt;/p&gt;
&lt;p&gt;So I pointed it at &lt;a href=&quot;https://en.wikipedia.org/wiki/Apple_Pippin&quot;&gt;the Pippin&lt;/a&gt; and said &amp;ldquo;That doesn&amp;rsquo;t boot and it makes me sad&amp;rdquo;.  (Not really.  The actual prompt was not about my feelings, but rather informed by my previous attempts to debug it myself).  In pretty short order it found that communication with the Cuda 68HC05 was failing due to a glitch in MAME&amp;rsquo;s 6522 VIA emulation.   Fixing that got us not much farther, but after about a week it had found &lt;a href=&quot;https://github.com/mamedev/mame/commit/f5c2e0d751e8d086ece6b6b66c0e1f608f0d3158&quot;&gt;half a dozen things&lt;/a&gt; wrong with MAME&amp;rsquo;s PowerPC emulation and several other things wrong with MAME&amp;rsquo;s support for PCI-era Macintosh hardware.  So the Pippin now played its (kinda creepy) startup sound and showed the initial &amp;ldquo;P!P P!N&amp;rdquo; box logo, plus you could move the mouse pointer around the screen like it was a not-very-secret Macintosh or something.  Vas noticed an &lt;a href=&quot;https://github.com/mamedev/mame/commit/da366452b105575a58fc4d148db772ce66d2fcef&quot;&gt;anti-pattern&lt;/a&gt; in the PowerPC DRC where values from when the code was generated and cached were used during execution instead of the actual live machine state (something that&amp;rsquo;s surprisingly easy to slip into doing when writing a DRC).  I can&amp;rsquo;t point to anything specific that fixed, but it&amp;rsquo;s 100% a correctness improvement and likely will be silently helpful down the line.&lt;/p&gt;
&lt;p&gt;Moving along from that, I wanted to add support for an actual PowerMac with hardware close to the Pippin to track the broader outcome of debugging it.  The &lt;a href=&quot;https://en.wikipedia.org/wiki/Power_Macintosh_7200&quot;&gt;Power Macintosh 7200&lt;/a&gt; fit that bill nicely (and it uses a variant of the familiar &lt;a href=&quot;https://github.com/mamedev/mame/blob/master/src/mame/apple/dafb.cpp&quot;&gt;DAFB video&lt;/a&gt; used in the Quadras).  At first it seemed to be going well, thanks to all of the fixes for the Pippin &amp;ndash; it chimed and made it into the startup disk polling routine.  But it wasn&amp;rsquo;t ever initializing the on-board video.  I told Claude that&amp;rsquo;s what was now making me sad and it came up with &lt;a href=&quot;https://github.com/mamedev/mame/commit/75abfe59d418dfd53f6ba22ecb69cd2ff5eb1781&quot;&gt;two bugs&lt;/a&gt; in the PowerPC 601 emulation.  With those resolved, the main screen now turns on and shows the familiar 3.5″ floppy of the boot search routine.  However, the flashing ? that indicates a disk wasn&amp;rsquo;t found wasn&amp;rsquo;t working.  Still great progress though, and I put it aside.&lt;/p&gt;
&lt;p&gt;The next thing the machine got to hear about that was making me sad was that the Power Macintosh 6100 froze when trying to boot any System version newer than 7.5.0.  Claude pretty quickly figured out that the difference was a native PowerPC SCSI Manager vs. the emulated 680×0 code in previous System versions, and traced its failure to MAME improperly emulating the PowerPC&amp;rsquo;s atomic load/store instructions.  These are frequently used by interrupt handlers to guarantee safe operation even if another device in the system, such as a second CPU or a DMA controller, has touched memory and told the processor about it.  We had a pull request from Sega Model 2 MVP &lt;strong&gt;gm-matthew&lt;/strong&gt; addressing that because it was also breaking some things about the Sega Model 3 arcade games, but it had gotten tied up in review.  I grabbed the changes and applied them, and System 7.5.3 and 7.5.5 booted straight to Finder and ran happily (and more efficiently, thanks to the native PowerPC SCSI driver).  While regression-testing the changes I found that the same fix also caused the Pippin to advance into its animation showing that you need to insert a CD, and the PowerMac 7200 gained the missing flashing ?.  Not bad!&lt;/p&gt;
&lt;p&gt;After that, I was sad that the &lt;a href=&quot;https://www.pacifict.com/Story/&quot;&gt;famous Graphing Calculator&lt;/a&gt; that shipped with the Power Macs to show some of the increased math power of the new CPUs didn&amp;rsquo;t work in MAME.  Claude quickly pointed out that none of the FPU opcodes updated the status flags, which are not often used in &lt;a href=&quot;https://en.wikipedia.org/wiki/Scud_Race&quot;&gt;highly optimized arcade games&lt;/a&gt; like MAME&amp;rsquo;s PowerPC core was originally written to support.  But they&amp;rsquo;re very important to computer operating systems and specifically to Apple&amp;rsquo;s SANE floating point library.  I have an in-progress fix there that allows the Graphing Calculator to run the 2D portion of it&amp;rsquo;s self-demo correctly now, but the 3D part of the demo isn&amp;rsquo;t working.  So some sadness has been ameliorated and as I type this more is being worked on.  (UPDATE: 3D works now.  Alignment exceptions on the 601 weren&amp;rsquo;t working properly, something I would&amp;rsquo;ve expected to have a larger impact than I can prove it has thus far).&lt;/p&gt;
&lt;p&gt;Also, AI is quite good at taking the firmware binary for some kind of well-defined device, from a &lt;a href=&quot;https://en.wikipedia.org/wiki/Apple_Extended_Keyboard&quot;&gt;computer keyboard&lt;/a&gt; or mouse up to a &lt;a href=&quot;https://www.vintagesynth.com/alesis/qs7&quot;&gt;digital synthesizer&lt;/a&gt;, and give you excellent starting guesses about the memory map and where the major subroutines live and what they do.  (Tip: tell it the functions of the device and where it can find a copy of MAME&amp;rsquo;s unidasm disassembler.  It can do without, but you&amp;rsquo;ll get to usable output much faster if you do).  GPT 5.5 Pro (via Codex) has been especially good at this for me, but Claude&amp;rsquo;s no slouch either.  Once it&amp;rsquo;s got a solid preliminary understanding you can write prompts like &amp;ldquo;Tracing the data flow from a MIDI Note On message, what are the likely functions for each register in the custom sound chip?&amp;rdquo; and get useful, actionable answers.&lt;/p&gt;
&lt;p&gt;A few caveats here, lest this come off as a full endorsement of AI.  First off, all of this was accomplished with an experienced emulation programmer (me) supervising the AI and interrupting it to say &amp;ldquo;hey, stop that!&amp;rdquo; on the not-infrequent occasions where it was chasing some theoretical problem that was possible but that I believed wasn&amp;rsquo;t likely.  Spoiler alert: I was almost always right.  The AI is helpful in many ways, and can randomly pop out with amazing things like &amp;ldquo;oh, this data structure at 0x123456 is a QuickDraw GrafPort&amp;rdquo; and be correct, but when it has to actually draw conclusions or make a judgement from the data it can get off track quickly.&lt;/p&gt;
&lt;p&gt;Secondly, the AI &lt;em&gt;found&lt;/em&gt; the bugs but the fixes for them were &lt;em&gt;written&lt;/em&gt; by me except in a few cases of trivial one-liners (and even then I edited them to fit my personal stylistic and naming preferences).  MAME does not yet have a formal AI policy, but we don&amp;rsquo;t want to see &amp;ldquo;vibe code&amp;rdquo; submitted (and if you let the AI write your pull request description you will definitely annoy me, never mind some of the more AI skeptical members of the team).  You are free to let the AI go wild reverse-engineering and debugging all you want, but at the end of the day MAME needs code that the people submitting it understand and can maintain.&lt;/p&gt;</content>
  </entry>
  <entry>
    <title>What’s a little undocumented behavior between friends?</title>
    <link href="https://rb6502.github.io/2026/05/09/whats-a-little-undocumented-behavior-between-friends/"/>
    <id>https://rb6502.github.io/2026/05/09/whats-a-little-undocumented-behavior-between-friends/</id>
    <published>2026-05-09T15:51:00-04:00</published>
    <updated>2026-05-09T15:51:00-04:00</updated>
    <category term="General"/>
    <content type="html">&lt;p&gt;(NOTE: this post will get very technical.  Some knowledge of 16-bit x86 assembly will help).&lt;/p&gt;
&lt;p&gt;From the &lt;a href=&quot;https://en.wikipedia.org/wiki/Akai_MPC&quot;&gt;MPC60&lt;/a&gt; code that computes the duration of a note in timer ticks:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;seg000:5659                 sub     dx, dx
seg000:565B                 mov     cx, 0Ah
seg000:565E                 div     cx
seg000:5660                 jnz     short loc_5665
seg000:5662                 mov     ax, 1
seg000:5665
seg000:5665 loc_5665:
seg000:5665                 mov     bx, ax
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This was falling through the JNZ and giving a result of 1 every time, which doesn&amp;rsquo;t sound very good (the timer rate was around 290 Hz in this case, but it seems to depend on the current sequencer tempo).  What influences the JNZ?  It&amp;rsquo;s like this:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;SUB DX, DX zeros out DX and sets the zero flag&lt;/li&gt;
&lt;li&gt;MOV CX, 0Ah loads CX and doesn&amp;rsquo;t affect any flags&lt;/li&gt;
&lt;li&gt;DIV CX does a division and is documented by Intel to have undefined effects on the zero flag.  MAME i86.cpp expresses this as doing nothing to the flag, but we could also validly have set it to a random value according to that documentation.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;So the zero flag was always set, and the JNZ always fell through, turning every sample into a short click.&lt;/p&gt;
&lt;p&gt;It turns out that in the 80s it was known by some that the zero flag was set according to the quotient, so it&amp;rsquo;s cleared if the quotient isn&amp;rsquo;t 0.  Roger Linn was apparently one of the people who knew, because it&amp;rsquo;s used multiple places in the MPC60 firmware.&lt;/p&gt;
&lt;p&gt;But now that &lt;a href=&quot;https://righto.com/&quot;&gt;Ken Shirriff&lt;/a&gt; has dumped the 8086 and 8088 microcode, and you can run the microcode in order to run 8088 MPH and Area 5150 cycle-perfect in the &lt;a href=&quot;https://github.com/dbalsom/XTCE-Blue&quot;&gt;XTCE-Blue emulator&lt;/a&gt;, we know that it&amp;rsquo;s not quite that way.  Internally, the 8086 and 8088 use, essentially, &lt;a href=&quot;https://www.righto.com/2023/04/reverse-engineering-8086-divide-microcode.html&quot;&gt;long division&lt;/a&gt; with a series of subtracts.  As a side effect of this, in most cases the zero flag is set as you&amp;rsquo;d expect with respect to the quotient of the DIV or IDIV instruction: set if the quotient is zero, cleared if not.&lt;/p&gt;
&lt;p&gt;So what&amp;rsquo;s meant to happen is that you get a non-zero quotient (because you always will given constraints on the inputs here), the zero flag is cleared, the JNZ is taken, and &lt;a href=&quot;https://www.youtube.com/watch?v=blLbiFYYQzo&quot;&gt;everything works fine&lt;/a&gt;, plus or minus.&lt;/p&gt;</content>
  </entry>
  <entry>
    <title>Dropping the ball on 2025, my MAME year-in-review</title>
    <link href="https://rb6502.github.io/2026/01/01/dropping-the-ball-on-2025-my-mame-year-in-review/"/>
    <id>https://rb6502.github.io/2026/01/01/dropping-the-ball-on-2025-my-mame-year-in-review/</id>
    <published>2026-01-01T09:46:00-05:00</published>
    <updated>2026-01-01T09:46:00-05:00</updated>
    <category term="General"/>
    <content type="html">&lt;p&gt;I just realized I haven&amp;rsquo;t posted in almost a year, and yet things have been happening.  Let&amp;rsquo;s talk about them!&lt;/p&gt;
&lt;p&gt;Late last year, right around Christmas, I got a message from classic Mac hacker &lt;a href=&quot;https://www.downtowndougbrown.com/&quot;&gt;Doug Brown&lt;/a&gt; about some issues with the &lt;strong&gt;Cuda&lt;/strong&gt;, a 68HC05 microcontroller that appeared in a whole bunch of Macs from around 1993 to 1998.  In particular, he wanted the debug key sequence (Command-Power) to work and drop into a debugger like it does on hardware, and he pointed out that improper hookup of the Power key was causing misbehavior in some versions of the Mac OS when you pressed certain modifier keys (Shift, Option, Command, etc).  Because Doug&amp;rsquo;s both a scholar and a gentleman, he came armed with a suggested patch, which was adapted and applied.&lt;/p&gt;
&lt;p&gt;While doing a regression test on every system with a Cuda that we have a MAME driver for, I ran into my ongoing nemesis, the &lt;a href=&quot;https://en.wikipedia.org/wiki/Power_Macintosh_6100&quot;&gt;Power Macintosh 6100&lt;/a&gt; (aka &amp;ldquo;PDM&amp;rdquo; or &amp;ldquo;Piltdown Man&amp;rdquo;; the initial PowerPC machines were named for famous scientific hoaxes).  At that time, the machine had a working keyboard and mouse and preliminary audio and floppy DMA support.  This all netted us the ability to boot the System 7.6 install floppy and make it all the way into the installer.  But no further.  Any attempt to boot a fully installed System would fail with a not-very-helpful error message.  So after buckling in and staring at way too many instruction traces, I discovered the error was the result of &lt;a href=&quot;https://en.wikipedia.org/wiki/IBM_POWER_architecture&quot;&gt;IBM POWER&lt;/a&gt; instructions attempting to be executed.  For the uninitiated, the &lt;a href=&quot;https://en.wikipedia.org/wiki/PowerPC&quot;&gt;PowerPC&lt;/a&gt; chip was derived from IBM&amp;rsquo;s POWER processor, but had an instruction set that was similar but not compatible.  But the first PowerPC chip, the &lt;strong&gt;601&lt;/strong&gt;, included some of the old POWER instructions alongside the new PowerPC instructions, and in spite of copious warnings to third party developers it turns out Apple used those instructions themselves.&lt;/p&gt;
&lt;p&gt;MAME&amp;rsquo;s PowerPC support was mostly &amp;ldquo;pure&amp;rdquo;; it did not include the carry-over POWER instructions and so they were causing an illegal instruction fault.  Implementing those instructions caused System 7.1.2 to boot properly all the way to the Finder.  I continued on improving various rough or preliminary aspects of the rest of the machine emulation and the machine was somewhat usable.  You could even &lt;a href=&quot;https://www.youtube.com/watch?v=ypkKSniZ8mg&quot;&gt;play some Marathon&lt;/a&gt;.  And that&amp;rsquo;s pretty much where things left off, likely due to errors in the emulation of the PowerPC instruction set itself.  I&amp;rsquo;m looking to finally tackle that in 2026, which should also improve things for the &lt;a href=&quot;https://www.system16.com/hardware.php?id=717&quot;&gt;Sega Model 3&lt;/a&gt; games.  No promises on when that happens or how good the improvements will be though.&lt;/p&gt;
&lt;p&gt;In 2024 there had been several breakthroughs in the emulation of the &lt;strong&gt;Macintosh PowerBooks&lt;/strong&gt; with &lt;strong&gt;68030&lt;/strong&gt; processors (the 140, 160, 165, 170, and 180).  The next step to complete the set of 68030-based portables, the &lt;a href=&quot;https://en.wikipedia.org/wiki/PowerBook_Duo&quot;&gt;PowerBook Duos&lt;/a&gt;, beckoned. But they were based around a heavily customized 68HC05 microcontroller called &lt;strong&gt;&amp;ldquo;PG&amp;amp;E&amp;rdquo;&lt;/strong&gt;.  You can get some idea how loaded with functionality this chip is from my extensive comments at &lt;a href=&quot;https://github.com/mamedev/mame/blob/master/src/devices/cpu/m6805/m68hc05pge.cpp&quot;&gt;the top of the implementation&lt;/a&gt;, but it handles powering the system up and down, power saving modes, sleep/wake, the keyboard, the trackpad, the screen backlight brightness, and a number of other functions.  Emulating that chip, as well as the &lt;strong&gt;GSC&lt;/strong&gt; (Gray Scale Controller, a Chips &amp;amp; Technologies 65210) and &lt;strong&gt;CSC&lt;/strong&gt; (Color Screen Controller, a Chips &amp;amp; Technologies 65220) video chips and the &lt;strong&gt;MSC&lt;/strong&gt; system controller chip resulted in all of the 68030 and 68040 based PowerBook Duos graduating to fully working.&lt;/p&gt;
&lt;p&gt;While the PowerBook Duo emulation was happening, I got another ping from Doug Brown.  He&amp;rsquo;d noticed that the &lt;a href=&quot;https://en.wikipedia.org/wiki/Macintosh_Classic_II&quot;&gt;Mac Classic II&lt;/a&gt; emulation in MAME worked normally with Mac OS set to &lt;strong&gt;24 bit mode&lt;/strong&gt; (which limits it to 8 megs of RAM but was more compatible with loosely-written early Mac software).  But setting it to 32 bit mode to get the full benefit of the system&amp;rsquo;s up to 10 megs of RAM resulted in a &lt;a href=&quot;https://apple.fandom.com/wiki/Sad_Mac&quot;&gt;&amp;ldquo;Sad Mac&amp;rdquo;&lt;/a&gt; error icon once the OS started loading.  Doug&amp;rsquo;s &lt;a href=&quot;https://www.downtowndougbrown.com/2025/01/the-invalid-68030-instruction-that-accidentally-allowed-the-mac-classic-ii-to-successfully-boot-up/&quot;&gt;full writeup&lt;/a&gt; on what happened next is well worth the read, but I&amp;rsquo;ll summarize by saying that due to a bug in the ROM for the Classic II, it was accidentally executing &lt;strong&gt;an invalid 68030 instruction&lt;/strong&gt; when it attempted to deal with sound interrupts.  Invalid instructions are supposed to cause an illegal instruction fault but this particular one doesn&amp;rsquo;t for whatever reason and we were 35 years too late to report the error to Motorola.  Anyway, the exact behavior of the illegal instruction on a real chip isn&amp;rsquo;t fully understood (even now) so MAME now patches a few instructions in the Classic II&amp;rsquo;s ROM, which permits the machine to operate normally.&lt;/p&gt;
&lt;p&gt;In the meantime I emulated and hooked up a custom &lt;strong&gt;Taito&lt;/strong&gt; volume control chip for the arcade game &lt;a href=&quot;https://en.wikipedia.org/wiki/Operation_Wolf&quot;&gt;Operation Wolf&lt;/a&gt;, and continued on to the next big thing for the PowerBook Duo line.  The Duo machines were smaller than normal laptops but could be inserted into &lt;a href=&quot;https://everymac.com/systems/apple/powerbook_duo/specs/mac_powerbook_duodock.html&quot;&gt;a docking station&lt;/a&gt; in a manner similar to a cartridge in a game console.  When so docked, the Duos gained the ability to connect to a keyboard, mouse, and monitor, additional SCSI support, additional serial ports, and even NuBus expansion slots.  There were also third party docks that added a single function, like an Ethernet interface, and which attached in a manner more familiar to today&amp;rsquo;s Thunderbolt docks.&lt;/p&gt;
&lt;p&gt;While the dock slot support was cooking, I took time out to take a pass over the existing emulated NuBus cards, which fixed a lot of small issues and improved accuracy (and in a few cases performance).  Additionally, Olivier Galibert&amp;rsquo;s rewrite of MAME&amp;rsquo;s central audio support had gone in.  Instead of being stereo-only and output-only, MAME now supported an arbitrary number of input and output channels across an arbitrary number of devices.  Fully supporting this on modern macOS hosts required extensive modifications to MAME&amp;rsquo;s code that made use of Apple&amp;rsquo;s &lt;a href=&quot;https://en.wikipedia.org/wiki/Core_Audio&quot;&gt;CoreAudio API&lt;/a&gt;, and we eventually got there.  Additionally, I did some widespread cleanup work across various Macs and their video cards so that everything was using proper &lt;a href=&quot;https://en.wikipedia.org/wiki/RAMDAC&quot;&gt;RAMDAC&lt;/a&gt; devices.  In general this caused no real change, but it further improved the code and made it more maintainable.  For a project on the scale of MAME, that&amp;rsquo;s always a good thing!&lt;/p&gt;
&lt;p&gt;In the spring, a patch to MAME&amp;rsquo;s support for the &lt;strong&gt;DP83932 &amp;ldquo;SONIC&amp;rdquo;&lt;/strong&gt; Ethernet chip came in from &lt;strong&gt;Brice Onken&lt;/strong&gt;, one of the contributors who&amp;rsquo;s into old workstation support.  (In his case, the &lt;a href=&quot;https://en.wikipedia.org/wiki/Sony_NEWS&quot;&gt;Sony NEWS&lt;/a&gt; Unix systems that were in some ways predecessors of the PlayStation).  Anyway, his change to make the machines he was interested work also fixed issues that I had seen with the Mac OS driver for the chip, which is built in to many Quadra models and was used on NuBus and PDS-slot cards for many other Macs.  So working built-in Ethernet for many Mac Quadra models happened in April&amp;rsquo;s 0.277 release, and SONIC-based cards happened 2 months later in 0.278.  (May&amp;rsquo;s MAME release was skipped to give more time to address issues caused by the new audio system I mentioned earlier).&lt;/p&gt;
&lt;p&gt;Also landing in 0.278 was the PowerBook Duo dock slot support.  Docks supported included Apple&amp;rsquo;s fully featured Duo Dock, Apple&amp;rsquo;s tiny &lt;strong&gt;Floppy Dock&lt;/strong&gt; (which added a floppy drive to the Duos), and the Newer Technology &lt;strong&gt;Ethernet Microdock&lt;/strong&gt; (which adds an Ethernet interface).  The ROM for the full-size dock came from the perpetually amazing Al Kossow, who runs bitsavers.org and works for the Computer History Museum, and the ROM for the Ethernet Microdock came from Doug Brown.  0.278 also got a fix for a long-standing bug with the 6502 I/O coprocessor emulation in the &lt;a href=&quot;https://en.wikipedia.org/wiki/Macintosh_IIfx&quot;&gt;Macintosh IIfx&lt;/a&gt;, &lt;a href=&quot;https://en.wikipedia.org/wiki/Macintosh_Quadra_900&quot;&gt;Quadra 900&lt;/a&gt;, and &lt;a href=&quot;https://en.wikipedia.org/wiki/Macintosh_Quadra_950&quot;&gt;Quadra 950&lt;/a&gt; that prevented System 7.5 and later from booting properly.&lt;/p&gt;
&lt;p&gt;In July&amp;rsquo;s 0.279 there were a number of improvements for the PowerBook Duos, including smoother keyboard and mouse support and the ability to press any key to wake the emulated machine from sleep.  The &lt;a href=&quot;https://en.wikipedia.org/wiki/Apple_IIGS&quot;&gt;Apple II&lt;span style=&quot;font-variant: small-caps;&quot;&gt;GS&lt;/span&gt;&lt;/a&gt; also got a stereo channel fix, support for the 4-channel &amp;ldquo;4soniq&amp;rdquo; card, and a fix to the ADB implementation that improved mouse tracking smoothness and fixed hangs in games like &lt;strong&gt;Xenocide&lt;/strong&gt; and &lt;strong&gt;Chessmaster 2100&lt;/strong&gt;.  Long-standing issues with the real-time clock chips used in the II&lt;span style=&quot;font-variant: small-caps;&quot;&gt;GS&lt;/span&gt; and various Macs were finally fixed for real, and various fixes to the PowerBook 100 series went in that fixed the one-second interrupt used by the Alarm desk accessory among other things.  The II&lt;span style=&quot;font-variant: small-caps;&quot;&gt;GS&lt;/span&gt; additionally got a fix in the &lt;a href=&quot;https://en.wikipedia.org/wiki/Ensoniq&quot;&gt;Ensoniq&lt;/a&gt; &lt;strong&gt;ES5503&lt;/strong&gt; emulation that solved an issue with Commodore legend &lt;a href=&quot;https://en.wikipedia.org/wiki/Rob_Hubbard&quot;&gt;Rob Hubbard&lt;/a&gt;&amp;rsquo;s music in EA&amp;rsquo;s &lt;a href=&quot;https://en.wikipedia.org/wiki/Skate_or_Die!&quot;&gt;Skate or Die!&lt;/a&gt;.  Hey, it&amp;rsquo;s 30 years later, all of us 6502 fans can get along now!&lt;/p&gt;
&lt;p&gt;August&amp;rsquo;s 0.280 was quieter, involving a few random &lt;strong&gt;Apple IIe&lt;/strong&gt; fixes, some accuracy improvements for the Mac 128, 512, and Plus from Lord Nightmare, and hooking up the correct video RAMDAC on the Mac IIci and IIsi.&lt;/p&gt;
&lt;p&gt;In September, the next adventure began.  0.280 had marked the &lt;a href=&quot;https://en.wikipedia.org/wiki/Hyper_Neo_Geo_64&quot;&gt;Hyper Neo Geo 64&lt;/a&gt; arcade games as working since they were completable.  But there was a major issue with them still: the sound emulation was essentially missing.  The games used an unusual sound system: an NEC V53 8086-based system on a chip driving a custom 32-voice sample player labeled as &amp;ldquo;L7A1045 L6028 DSP-A&amp;rdquo;.  Where did they find that?  From a bunch of &lt;a href=&quot;https://www.vintagesynth.com/akai/s3000&quot;&gt;professional&lt;/a&gt; &lt;a href=&quot;https://www.vintagesynth.com/akai/mpc3000&quot;&gt;drum machines&lt;/a&gt; and &lt;a href=&quot;https://www.vintagesynth.com/akai/s2000&quot;&gt;samplers&lt;/a&gt; made by &lt;a href=&quot;https://en.wikipedia.org/wiki/Akai&quot;&gt;Akai&lt;/a&gt; in cooperation with &lt;a href=&quot;https://en.wikipedia.org/wiki/Roger_Linn&quot;&gt;Roger Linn&lt;/a&gt;.  Linn designed the &lt;a href=&quot;https://www.vintagesynth.com/linn-electronics/linndrum&quot;&gt;LinnDrum&lt;/a&gt; and &lt;a href=&quot;https://www.vintagesynth.com/linn-electronics/lm-1-drum-computer&quot;&gt;LM-1&lt;/a&gt; drum machines in the early 1980s, and those machines appeared on hits by Prince, Billy Idol, Tears for Fears, and many more artists.&lt;/p&gt;
&lt;p&gt;Waaaay back when the HNG64 was first emulated I&amp;rsquo;d taken some preliminary stabs at the sound chip, which is fairly unusual, but didn&amp;rsquo;t make much headway.  Since that time, MAME developer &lt;strong&gt;Happy&lt;/strong&gt; had done an in-depth reverse-engineering of the V53 sound driver code and what he felt that meant in terms of the chip&amp;rsquo;s registers.  I spent a few days experimenting based on that information and the sound went from occasional blasts of loud static to &lt;a href=&quot;https://www.youtube.com/watch?v=ut596mTL7KA&quot;&gt;recognizable music&lt;/a&gt;, although there was still far to go.  Work on that continued into October&amp;rsquo;s 0.282, at which point it was in &lt;a href=&quot;https://www.youtube.com/watch?v=GMhEYpWVdyM&quot;&gt;very good shape&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;November and December went mostly to work on &lt;a href=&quot;https://www.youtube.com/watch?v=U7Y-ItD2p_s&quot;&gt;the actual Akai machines&lt;/a&gt; that &lt;a href=&quot;https://www.youtube.com/watch?v=G2GL-QTcMKc&quot;&gt;originated&lt;/a&gt; the sound system.  Work continues on those as of this writing.&lt;/p&gt;
&lt;p&gt;And to bring things full circle, right before Christmas of 2025 I got a ping from Doug Brown regarding a long-standing issue in MAME with Macintosh models losing sound interrupts and the emulated machine freezing or having sound stop in the middle of a game.  But more on that when there are finalized results.&lt;/p&gt;</content>
  </entry>
</feed>
