C9-11 is a counter driven by a 8 Mhz clock. After 8 counts (8 pixels), it rolls over and triggers C8-3 to load the shift register to display a new character. The output of C9-11 is also fed into C9-12 to count characters.
C5-5 controls DISPLAY ON and DISPLAY OFF, using the 6-bit counter implemented by C9-12 (1 bit), B5-12 (4 bits), and C7-5 (1 bit). DISPLAY ON goes high at the start of every line, when the counter reaches 42. DISPLAY OFF goes high at the end of every line, when the counter reaches 18. The counter resets to zero after 63. So DISPLAY OFF is high for 24 characters (42-18), and DISPLAY ON is high for 40 characters (18-24+64).
Each character is 8 pixels high, so it takes 8 horizontal scans to draw it. The 3-bit counter A1 counts from 0 to 7 to keep track of which part of the character is being drawn. It increments whenever DISPLAY ON goes low, at the end of every line. The counter value gets passed into the lowest 3 address lines of the character ROM to retrieve the correct character data.
E6 is an 8-bit latch that stores the index of beginning of the current line (divided by 4). So for example, at the top of the screen, it contains zero, and on the last line of the screen, it contains 240 (24 lines * 40 columns / 4 = 240). There is no need to store the lower 2 bits, since they are always zero.
The output of the E6 latch is used to load 2 4-bit counters (D6 and D7) at the start of each line. These counters are the top 8 bits of the index of the current character. The bottom 2 bits are stored in the two J/K flip-flops at D5. They act as a 10-bit counter that counts up to 1000 (25 lines * 40 columns = 1000). This counter value gets passed into the address lines of screen memory, to retrieve the correct character in order to display it. At the end of every line, the counter gets reset to the value from E6 (the start of the line), because we need to scan each row of screen memory 8 times. The 8th time, E6 gets loaded with the counter value from D6 and D7 as they count up, so we go to the next line instead of rescanning the same line again.
The 8-bit value read from screen memory is the character to draw. The lower 7 bits get passed into the address lines of character ROM. (The high bit is a reverse bit, which gets handled elsewhere.) The GRAPHIC line gets passed into the top address line of character ROM to select either graphic mode or lowercase mode. (The GRAPHIC line can be toggled high and low by clicking the logic input on the right side.) The data lines read from ROM contain the character data we need to draw. They get passed to the input of the shift register so it can be drawn one bit at a time.
The reverse bit is stored in the D flip-flops at C1, which delay it until it is ready to be used. The reverse bit is used to select whether the Q or /Q output of the shift register is used. The result goes to the VIDEO OUT output, which is inverted and then displayed on the screen.
When the processor needs to read from screen memory, it brings the SEL 8 line high. This connects the lines BA9-BA0 to the address lines of the screen RAM chip. But whatever value is stored in the RAM at this location will also be displayed on the screen. This is what causes "snow" on the old PETs.