Quote Originally Posted by deathshadow View Post
Or at least that's how it seems to work. I only really noticed it when I was page-flipping text-mode really fast and noticed tearing instead of a reset or waiting for the new frame -- at least on the 1000SX.
Ah, I wondered if it might be something like that. I'm pretty sure this is not going to work on CGA (at least one based on a 6845). Changing the start address on a 6845 only takes effect at the beginning of the frame. There is also no addition or subtraction circuitry on a real 6845 - the only operations are incrementing, copying one internal register to another, and comparing two internal registers for equality. So the 6845 does a "move to the next character row" operation by checking to see if it's at the first character of the right overscan and the last scanline of the row, and if it is then it copies the "current address" register to the "address at start of row" internal register.

Quote Originally Posted by deathshadow View Post
That text mode translation part is really funky. That it reads the video location, shifts it to use it as an offset into the font ROM, and then reads the next byte to apply colour attributes, then outputs the corresponding bits? Funky.

Even funkier that trying to drive something like that directly off an ARM CPU's ports with something like a Teensy, even at 192mhz there aren't enough clocks to do it. You'd have to push up into the ghz range. The difference between direct silicon and code.
Yep! Hence why we have FPGAs as well as CPUs - they have the flexibility of a reprogrammable device but can do a lot of operations in parallel like hardware.