Q: What causes "banded" display? (Every other 16 pixels black)
There are several reasons for my interest in this. One is that IIRC that was what Omega's full screen and DOTLB looked like - mostly - on my old STF. Another is that when I made thousands of reboots to create the synctables for LoSTE, working in both cold and warm modes, the intermediate "warming" state was always banded. A third is how Paulo had to include a hotkey to swap between two different unstabilisers in his 4 pix scroll demos due to banded modes.
So, there's good reason to want to understand why it happens I think
I believe the interested parties to be the MMU and the Shifter. Recall it's the MMU that raises LOAD which causes Shifter to read data off the selected memory address.
The four following signals are sent towards the GST Shifter to synchronize it with the data transfer of the video RAM as well as the signals VSYNC and HSYNC which were generated by the GLUE in the STF. *DCYC (Data CYCIe) indicates to Shifter that the data are available from the RAMs (i.e. the GST MCU has just selected the RAM address of the next data to be loaded in the GST Shifter; this addressing is carried out 16000 times per image in connection with the VCOUNT counters of GST MCU (or of the MMU in a STF)
http://info-coach.fr/atari/hardware/STE-HW.php
The Shifter then loads up four words before transferring them to the "rotating registers" which will shift a group of 4 bits each cycle to the RGB output via palette lookup. Alien's description is good:
Code: Select all
Number_of_read_bitplanes = 0
REPEAT
IF Load is active THEN IR[Number_of_read_bitplanes] = Data sent from MMU
Number_of_read_bitplanes = Number_of_read_bitplanes + 1
IF Number_of_read_bitplanes == 4 AND IF DE is active
THEN RR1 = IR1; RR2 = IR2; RR3 = IR3; RR4 = IR4
IF Number_of_read_bitplanes == 4 THEN Number_of_read_bitplanes = 0
END_REPEAT
http://alive.atari.org/alive11/oscan2b.php
So, based in this we can start guessing what must happen to get a "banded" screen: Each and every line must fail at reading every second group of bitplane words from the MMU - or every second group of Shifter IR registers must fail being copied to the corresponding RR. It's a persistent state when it happens and continues until cancelled by some new disruption.
We also know it can be forced by sync switches, can be caused by "warming" and is also persistent per cold boot in some situations

Sounds easy enough to track down.
1) It's likely not the MMU forgetting to select the right memory address. The next column is in its correct place.
2) It could be bus contention - Shifter is unable to read the memory (32MHz 4*16 bits = 16 CPU cycles) and so IR will be empty when copied into RR.
3) Bug in the Shifter (Alien's code is pseudo) and the reset after 4 bitplanes fails every second time - thus IR doesn't get copied into RR. But why?
4) The Shifter goes on a rampage and every other line believes it's in HI res*.
For the second case I'd pose the possibility that the Shifter (32MHz) and MMU (16Mhz) could be offset in a way making this happen - and that the offset can change with warming. I'm not the best at understanding that here though - Dio can probably weigh in.
So, thoughts anyone?
/Troed
*) In my old 1989 setup, common in SYNC, we ran an SM124 off the monitor port and a TV through RF. It allowed us to code in hi res and when the demo started it would automagically switch to the color screen (and back, when exiting). I have a very very very faint memory of how I could see sync effects on the mono monitor as short white lines when HI/LO switches were made. Such a setup should spot #4 - although I consider ut unlikely.