I'll look at your circles routines because I still do not understand why you are limited to 2
As I said to you at Revision, I used EXX to switch between the 2 bobs data. For each scanlines (64 nop) I need to manage left edge bob 1 + right edge bob 1 + left edge bob 2 + right edge bob 2 + update raster. Don't forget for each edge to have to manage a blank byte to "clear" data (when displaying second half part of a circle).
I would be surprised to see 3 bobs of similar size moving fullscreen on CPC one day, but if there would be one I would be quite impressed

I think phX is the very first demo that does not work on a standard 3" disc
Phortem was the first.
do you plan to release a 3" discs version ?
No. Version released @ Revision was the final one.
The only complain I got with Phortem was a comment from Super Sylvestre, which I did not focus much since he had the hardware to launch the demo anyway.
Nowadays, I believe people watch the demo like that:
- 85% youtube
- 10% emulator
- 4% old devices (SDCard, USB, 3"1/2..)
- less than 1% for 3" ?
did the revision organizers asked you to justify that ?
They don't care.
Keep in mind modern storage devices (SDcard, USB & co) attached to the machine are the new standard. C64 have the Ultimate-II for years.
Now if the machine would come with many attached expansions I think they would probably start asking questions.
I have to admit that I'm (positively) surprised of the implementation of the tunnel
Thanks !
If you want to dig for some "gem" in my source-code, I recommend looking at those files
They can eventually be reused with any another projects, independently from phX.
src/Z80/Framework/_PreProcsNops.z80
src/Z80/Framework/CallLinesNops.z80
src/Z80/Framework/PreProc.z80
But honestly, it's already pretty difficult for me to understand my own code few weeks later - so I can imagine how hard it may be for someone not used to the code base

Wish you happy digging!