Metropolis started when I decided to get a Minstrel ZX80-clone. Through the years I have wondered what it would be like to code for the ZX80, similar and different as it is from the ZX81 which I am quite familiar with.
The result is a graphical demo which works on both the ZX81, and the ZX80 with 8k or 4k ROM, plus a 16k RAM expansion. No need for WRX-modified memory, PseudoHires to the rescue!

Metropolis runs in 312-line 50 Hz mode regardless of the position of the PAL/NTSC-switch. Sorry about that, but it felt best not to create an almost-NTSC version with 4 extra lines.

Not being able to shut off the HSync generator on the ZX81 is a really annoying "feature", making it less flexible than the ZX80 :( 
I started coding 208-cycle lines to create a true 15625 Hz raster frequency, but I changed it to 207 cycles when I wanted to be ZX81 compatible.

The demo is an orgy in cycle counting, and not using any of the ROM code except as character table for the PseudoHires graphics. Quite a lot of time was spent on experimenting with the generation of the graphics. The picture was converted to look as good as possible within the limitations of PseudoHires.

Source code is enclosed, released as public domain. Hopefully someone will get some joy from it.

Developed with and tested on: FASMW-ZX 1.71.01u, EightyOne v1.8, Minstrel with ZXpand, ZX81 with ZXpand+. The serial transfer of the ZXpand is truly amazing when developing! 

mtrpls.p is for the 8k ROM ZX80 and ZX81
mtrpls.o is for the 4k ROM ZX80

/NollKollTroll, December 2017