Contended memory article on Wikipedia
Yeah, apparently there's one. https://en.m.wikipedia.org/wiki/ZX_Spectrum_Contended_Memory
Surely this is incorrect? They seem to be mixing up several things together (e.g. snow is something else entirely), and this is the first time I've heard of the 'blank white pixels' thing
However, the ULA must wait for a Z80 read or write to complete before it can stop the Z80's clock and access the memory. As the ULA has no capacity to prefetch and store data in advance, it relies upon the memory being available to read to produce a clean and true video display. If an existing Z80 access is in progress when the ULA must read video data, the read is missed and the display shows blank white pixels in place of the correct video pixels. On the next frame, they may well be read correctly. The consequences of this often appeared as a flickering of missing pixels on the display, or 'snow' as it was also called. To avoid snow, some programs and games only copied data to the display on interrupt, as the Spectrum maskable interrupt was generated by the display vertical refresh signal. This ensures that as much of the display as possible was updated during the blanking and border time when video data was not used.
Surely this is incorrect? They seem to be mixing up several things together (e.g. snow is something else entirely), and this is the first time I've heard of the 'blank white pixels' thing

Comments
@luny@mstdn.games
https://www.luny.co.uk
SevenFFF / Threetwosevensixseven / colonel32
NXtel • NXTP • ESP Update • ESP Reset • CSpect Plugins
It is true that contention doesn't occur during the drawing of the border, but that isn't why sprite updates are down on the interrupt. The interrupt provides a "reset" time where you know you aren't going to be updating screen sprites at the same time as the scanline draws the old/new sprite (which results in "tearing")