the blog


Downgrade

rom01

So I finally decided that since I had both motherboards laying around, perhaps it was time to revert to ROM 01, and at least evaluate its merits. I think I'm going to stick with it. I'm not sure that the performance difference from running tools out of ROM, or not loading them from mass storage, is subjectively all that great, and yeah I really did miss the Sales Demo, Shufflepuck Cafe, and Alien Mind. Yes, sound artifacts seem to be increased somewhat, the old familiar cadence of ROM 01 at idle in Finder was frighteningly recognizable from childhood, versus the quieter ROM 03. But that's the biggest difference. Nothing broke. And on a platform where nostalgia clearly matters, I felt it was prudent to aim for maximum compatibility.


To be honest, I tried it the other way, at first. I began stepping through the IIGS Sales Demo and finding out exactly what was breaking on ROM 03. The first hitch was easy enough to see: A BRK crash into E1/00A8, the inline-based GS/OS or ProDOS 16 dispatch vector. But the Sales Demo was written for ProDOS 8. The explanation is that in ROM 03, one of the tool startup calls (I didn't look far enough to see which, I hope it wasn't _QDStartUp) actually makes a GS/OS (or ProDOS 16) stack-based call, thus dispatched via E1/00B0, to open FastFont. E1/00B0 is set up at cold boot, to jump to a ROM-based subroutine that pulls the parameters off of the stack, and allocates new space on the stack to store a dynamically-generated subroutine to make a class-0 (inline) translation of the same OS call (presumably for greater compatibility), and dispatch that via E1/00A8.


Without commenting too deeply on the merits of that decision, I have to say that must have been a tough call for the firmware engineers to make, coupling the ROM tools that closely with the operating system. In the past, I've seen tool calls made from ProDOS 8 very often, and this appears to break them.


But it's an easy fix, right? Change E1/00A8 to something like 5C 00 00 30 6B, to JML to 30/0000, and at 30/0000, add something like:

  PLA

  CLC

  ADC #0006

  PHA

  SEC

  LDA #0046

  RTL


Pull the return address off the stack, increment it so the RTL will return to the address after the inline parameters, set carry to indicate error, and set A to $0046 (File Not Found). Fixes everything, right?


Nope. Things do get a few seconds farther, but it only leads up to another crash. But after pondering the number of patches I'd end up doing to make everything run, as well as the nature of ROM changes such as this, I decided to give downgrading a shot.


Oh, and the silly stuff I wrote back in high school that uses $C4xx on the mouse instead of _ReadMouse, magically works again. Ha.


-Chris

February Update

Hello!


Lately I've gone through another one of my phases where the IIGS gets a lot of attention. I started by checking out the new Dora the Explorer Coloring application for the IIGS, and then I was simply blown away by all the goodies on the new Brutal Deluxe website.


After that, I checked out the new Reactive Micro site, and got myself a LittlePower adapter and one of the recommended external ATX PSU's. The externalization of the power supply is always a good thing. I also threw a fan inside the IIGS, thanks to MC Price Breakers. The resulting airflow (and lack of hot noisy internal brick) was enough to make the GS more stable at 12MHz, although 16 is still too hot. Oh well, all TWGS'es (and GS logic boards) are not created equal.


I'm migrating away from using USB/PS2 devices for keyboard and mouse, in favor of an authentic IIGS keyboard and a (super cheap on eBay) ADB Alps Glidepoint. Also picked up a Sirius RAM card, although it has a couple hiccups and will need a bit more TLC before I can make oh-so-important leap from 5MB to 8MB of RAM.


When I'm not playing old Apple II games from The 202 Collection, or coaxing nice IIGS games into installing onto CompactFlash, I'm even working on my game, which is very close to finally hitting Milestone 1, which is to say that I've got a tiled world scrolling while fully digitized music plays through my Oversampler ripoff sound engine. If I ever ship my game, or even show it off at KansasFest, I promise we'll both be surprised.


Anyhow, I just wanted to drop a line and say that work has been hell, but I've still found time to use and enhance my favorite computer of all time, and that we're a lot closer to the day I'll pull back the cover and show you the secret game I've been working on. Till then, what's most important to both you and I, is that this 22 year old computer continues to surprise us.


I've also been collecting a ton of software in anticipation of collecting our old arch-rivals the Commodore 128 and Amiga 1200. These machines have a lot in common with our IIGS, except of course the IIGS's crippling graphics IO bottleneck (and its comparably gorgeous desktop environment).


-Chris

Eureka

I've received all the development tools I needed, plus a copy of the incomparable Spectrum. Recently, I also yanked the Video Overlay and Superdrive cards out of the IIGS on the suspicion that the machine would behave itself better without them. I wasn't wrong. This probably has nothing to do with those cards themselves, but rather the amount of amperage being pulled through the traces of the board and subsequently converted to heat. Interestingly, without those two cards, I have zero stability problems now, which, when combined with the new software (and all the games I've painstakingly and individually tricked into running from the CF card) makes the IIGS a much more appealing computer to use regularly.


So did I get anywhere with the new stuff? Yes.


For the first time ever, I've seen the tiled world of the game I've been working on, scrolling on a IIGS screen in both axes. I'll be working all weekend to combine this with my sound driver into a fun little demo to show off. We're cookin with gas now. I just can't wait to show you what I've been working on all this time.


-Chris