RUSSIAN SOFTWARE and real ZX
Russian ZX games is writed on russian ZX clones and support hardware feature TURBO OFF ( for ZX clone ZS SCORPION ). Russian ZX clone ZS SCORPION use software switching of TURBO cpu mode 3.5MHz and 7.0 MHz:
Read port #7FFD = CPU turbo 7MHz (turbo on)
Read port #1FFD = CPU run at 3.5MHz (turbo off)
Write only ports #7FFD and #1FFD is used on ZS SCORPION for memory paging and reading this ports is used for CPU TURBO mode switching.
On ZX Spectrum +2A and +3 is port #7FFD and #1FFD(with different functions) used too for memory paging. Read of this ports is not supported and CPU read data from floating bus ( value #FF ). Software TURBO switching routines for ZS SCORPION is on ZX+2A/+3 models ignored (without effect) and software run always at original ZX speed (3.5 MHz)
Problem with this russian software is on original ZX Spectrum 128 / +2 (grey) models. This computers contain hardware bug - after read port #7FFD will ZX crash (data from floating bus is writed to paging port).
Read port #7FFD = on ZX128/+2 write to paging port data from floating bus (can't be use)
Read port #1FFD = on ZX128/+2 write to paging port data from floating bus (can't be use)
ZX128/+2 use paging port #7FFD only. Hardware use incomplette port adressation (accept only A15=0 + A1=0 and port adress #1FFD is same as port #7FFD). If any russian software use read of port #7FFD of #1FFD, then real ZX128/+2 will crash. For fixed this problem you must remove instruction IN ?,(C) if BC=#1FFD or #7FFD.
This is critical routines ("?" = any register A,B,C,D,E,H,L):
LD BC,#1FFD
IN ?,(C)
LD BC,#7FFD
IN ?,(C)
LD A,#1F
IN A,(#FD)
LD A,#7F
IN A,(#FD)
If you remove this IN instructions from russian games/demos/utilities then will possible use this software also on ZX128/+2 and all other ZX models (+2A/+3 and russian ZX clones)
This is my fixed TAP version of Dizzy 'B' Treasure Island game with removed instruction IN A,(C). Version for all ZX128 models(ZX128/+2/+2A/+3/russian clones):
http://www.worldofspectrum.org/shows...sureIsland.gif
http://velesoft.speccy.cz/other/dizzy-b_fixed.zip
This is original release(crash on ZX128/+2):
http://www.worldofspectrum.org/infos...cgi?id=0015211
And this is my fixed TAP ( ! ! ! ) version of WALKER game:
http://velesoft.speccy.cz/kmouse/kmgames/walker-scr.gifhttp://velesoft.speccy.cz/kmouse/kmg...alker-game.gif
http://velesoft.speccy.cz/kmouse/kmg...emo-km.tap.zip
This is original release(crash on ZX128/+2):
http://www.worldofspectrum.org/infos...cgi?id=0013118
problem with FAST and SLOW(contended) memory
Russian games/demos designed for ZX clones run on original ZX128 models with different speed and can crash. :v2_frown:
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): :v2_thumb:
#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: :v2_wacko:
#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).
http://velesoft.speccy.cz/other/vera.gif
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. :v2_yahoo:
VELESOFT