That's really a great application, the best implementation ever seen on CPC. Greets!!!
Wow, thank you very much!
This is still so damn fast!
Thanks to you, too, again!

Yes, the main advantage of MODE 1, and a big one, is that it enables rows of 256 cells wide, which therefore are aligned on page boundaries, which makes things a lot faster when I need to navigate up and down. That’s why it doesn’t slow down as much as might be predicted from the increased resolution (
i.e. like it would if I had to add and subtract numbers other than 256).
Another boost, which I didn’t think to mention before for some reason, is that this version doesn’t have to plot twice vertically as in MODE 0; that’s not a huge consumer of NOPs compared to other things, but it definitely counts. Incidentally, I have an option in my MODE 0 source to make the pixels single-height, but it doesn’t look particularly nice!
If I see it correctly, you do the field generation and conversion to the screen in the same step. Is that the way you do it?
Yeah, it’s all done at once. But what you said next is
very interesting and might also mean that I don’t give up on the idea of a MODE 1 version quite yet… so excuse me while I think aloud in my next paragraphs
So I wonder, if you could seperate it into two steps without loosing performance (maybe you could even gain speed, as you have more registers for each step - on the other hand you have to read the data twice...).
I probably wouldn’t have considered separating the steps for the MODE 0 version, but since you’ve mentioned it and the potential benefits due to reallocation of registers,
maybe it just might be better to separate the two, even despite having to read the buffer twice… It’s worth a try, anyway. I’m coding that version now and will report the timings when I can.
Anyway, in a – completely hypothetical! – MODE 1 version using the extended RAM, that would definitely be the best way to do it, because…
If you do it in two steps, you can store and calculate the two fields completely in the 2nd 64K ram bank (out #7f00,#c2). Only for plotting it on the screen, you change to the 1st ram bank. You only need to do memory banking about 3 or 4 times for each generation.
Almost a whole 64 kB… Depending on how much space I allow for the program, I’m calculating that I could have 190, 222, maybe even 238 lines of vertical resolution – wow! I would save a tonne of NOPs by not having to page back and forth for every changing cell – which I now feel would have been very silly – instead, only before and after drawing. Also, even besides the RAM-paging, having a full 64 kB to play with would let me go back to the faster method of flipping the buffers that I use in the MODE 0 version; the current MODE 1 has to use a slower method to fit in the lower 64 kB alongside the screen. Actually, with separate computing and drawing passes, being able to reallocate registers would enable an even faster way of doing it! What an array of possibilities :O
So, combining all of these intriguing possibilities, you’ve made a fantastic suggestion – thanks a lot!

This does make me quite a bit more likely to try this out, even if it’s only due to extreme curiosity… Since the current slower method generates about 1.2 generations per second (at an optimistic estimate), I wonder if, using all these advantages, I could at least double the vertical resolution and not go below 1 generation per second – which I would say is good enough, especially when we consider the numbers of cells that would be involved.
Although it wouldn’t matter for this thanks to your idea, just to confirm a silly question: If I did want to use the full 128 kB from one bit of code, which would want to access bytes from both of the 64 kB pages –
i.e. flipping between configurations 0 and 2 – I have to duplicate it at the same addresses in both pages, right, so that it’s still there when they are swapped? Silly question, I know…
In any case, IMHO the Mode1 version is VERY impressive for an 8bit system, as it shows, that the CPC can do this even at a very high resolution!
Again, thanks a lot for the great positive feedback! And someone with your experience on the CPC/Z80 doesn’t technically need to have a Humble Opinion, so it’s appreciated even more.
And I hope it’s clear that I really appreciate these suggestions; I’ll let you know if I get any of them going. But there I was just doing simple things like sketching out how I can implement the four-colour–inheriting system of QuadLife; thinking about Generations, too; and other things… instead, now I’ll be distracted by thoughts about an entire other version! Haha.