Russian games/demos designed for ZX clones run on original ZX128 models with different speed and can crash.

More ZX clones use fast access to contended(with ULA/videoram) memory. Original ZX Spectrum models use slow access to contended memory(ULA slow-down CPU).

adress space on original ZX128/+2(grey model):
#0000-#3FFF = zx rom (fast memory)
#4000-#7FFF = videoram 1 (slow memory contended with ula)
#8000-#BFFF = fast memory
#C000-#FFFF = memory paging area (pages 0,2,4,6 = fast / pages 1,3,5,7 = slow)
128kB memory = 64kB fast mem. + 64kB slow mem.

adress space on original ZX128+2A/+3:
#0000-#3FFF = zx rom (fast memory)
#4000-#7FFF = videoram 1 (slow memory contended with ula)
#8000-#BFFF = fast memory
#C000-#FFFF = memory paging area (pages 0,1,2,3 = fast / pages 4,5,6,7 = slow)
128kB memory = 64kB fast mem. + 64kB slow mem.

RESULT:
Different ZX128 models/clones use different layout of slow and fast memory pages !!! For example - Animation effect run in VERA game(in menu) incorrect on real ZX128/+2 (incorrect animations and problem with cursor).

Animation code work with slow memory pages. More russian demos use too slow(on real ZX) pages and crash. Any russian software work only on ZX128/+2 and other only on ZX128+2A/+3 because this models use different numbers of slow memory pages. Russian ZX clones use all memory pages fast and software work always correct at full speed. If coders will accept also memory layout for orig.ZX models, russian software can work too on this computers. Disk loader can detect type of used ZX model and load critical timing routines only to fast memory pages and other data to slow memory.

RESULT:
More russian games/demos can run on different ZX models only if you rewrite numbers of memory pages on instructions OUT (?),A (OUT #7FFD,xx). This is easy way for best compatibility.

VELESOFT