I got 10 characters I think it was, rendering horizontally. I just used $20 and $FF so the display should give horizontal lines - but if I'd used different values I could have done anything from the character set.
The problem is that the Aquarius just isn't fast enough.
The PAL scanline is 64uS - I imagine the NTSC one is similar. We're running at 3.5MHz, which means about 225 cycles per line. In other words, we have only 225 cycles in which to do anything if we're going to maintain a line resolution - any more and we'll not keep up and it'll fail further down the screen.
If each instruction was 1 cycle, that'd be fine - there's only 40 characters on the row. Unfortunately, unlike the 6502, instructions take multiple cycles - doing an LDIR as you did takes 21 cycles per access, leaving us 10 squares - but you need to reset the HL and DE registers which takes up another 10 cycles. It's actually faster to do an explicit LD (HL),xx INC HL. It does mean more code though of course.
Essentially there's three options therefore:
1) Have a 10-square wide "high resolution" bitmap. All 10 squares change all the time.
2) Have a wider bitmap, but only updating 10 squares. This could be done by building essentially an instruction map of NOPs where no changes are and cycle counting to make a change when one is due. A fair amount of work but not impossible.... you just need to map the cycle to a position on the screen. You would need a fairly intelligent algorithm to work out which square should change though as only 25% of the squares can change at any time in a row.
3) a hybrid of the two - if you have a 20 square width bitmap, you could interlace which row is going to be updated. Odd columns would update in odd rows, even ones in even.
I'll see if I can get anything more stable and post a version if I can!
--- In email@example.com, "chjmartin2" <chjmartin2@...> wrote:
> You are right, I am switching between the two characters. Your method is much more interesting and I will have to check it out. We do have the vertical blank and we can see when we come out of the vertical blank. You said you got 8 stable characters, do you mean 8 across or 8 per block? So, what it sounds like you are doing is switching the character and chasing the beam down the screen? (James suggested this at one point.)
> The Aquarius has quite a bit of horsepower, and even if you were able to split the character up into 4 sections of 8x2 then you'd really have something. You could pick the optimal characters to display for each block.
> Well... please keep plugging away because I plan on stealing your work to incorporate into a converter. If I had even 4 characters per block that would be awesome. AND, if you had enough cycles to change color and character then you could have a much higher effective resolution.
> Invent away! It would be really great if you could post a CAQ file showing what you have done. Also, will this effect only work on a PAL Aquarius? Isn't the timing different for NTSC?