I thought I'd revisit the Silentype and see if I could make sense of why it has two shift clocks. It has just three signal lines going to the printer, SD serial data, SH shift clock and XC store clock.
It's a pretty simple protocol, I'm surprised that nobody hooked it up to other computers of the day though it did need a +12V power supply.
Anyway, the firmware writes a sequence of 16 bytes of 0x0e or 0x0f to c091 to send the data bits, then 1c, 18, 1c, 0c.
0x0e is a 0 bit and 0x0f is a 1 bit.
So why does this work?
I couldn't figure out the details until I made a logisim model of the circuit.
d1 is the "transitory" shift clock. If you write a 1 to d1, the shift clock goes high when clocked by phi1 then drops. The 673 loads and shifts a bit when the shift clock goes low, so this will clock in the d0 data bit.
This is quite clever as we only need to do a single write to shift out a data bit.
d4 is the latched shift clock. Writing a 1 to this will make the shift clock go high and stay high. Writing a 0 will clear the shift clock.
The d2 store clock is interesting because it gets inverted. So as long as d2 is 1 no load happens, when d2 is 0 then the parallel register gets loaded from the shift register.
Whenever d2 goes low and the shift clock is low (both d1 and d4 are zero) the shift register gets reset.
This explains why the pattern of 1c 18 1c 0c because it's
1c d4=1 d2=1,
18 d4=1 d2=0 (clocks the parallel load because xc up),
1c d4=1 d2=1 (xc down)
0c d4=0 d2=1 (drops the shift clock which actually causes a bit to shift into the register as a side effect, but we will always load 16 bits so that spurious bit gets shifted to oblivion)
Any time you have d4=0 and no shift clock, it resets the shift register, so writing a zero to c091 is an easy way to reset the printer.
More cleverness is there, as the d8 of the parallel register output is hooked up to the r/w line of the shift register, and the sd is actually a bidirectional line. Reading from c09x where a01 is true, like c092 will present the shift clock in d6 and the serial data from the shift register in d7. So if you write out a 1 into bit 8 of the parallel register, you can read the contents of the shift register. I suspect that this was used to test out communications with the unit in production perhaps.
There's also a 555 to keep the printhead from burning up should you forget to clear the printhead.
There's a funny story from Andy Hertzfeld on the development of the Silentype at https://www.folklore.org/StoryView.py?project=Macintosh&story=What_Hath_Woz_Wrought
Vic was worried about the possibility of the software crashing while it was printing. It was possible for a thermal element to be inadvertently left on indefinitely, which could potentially ruin the thermal elements or even cause a fire. Vic solved the problem by adding a bit of hardware to cut current to elements that were left on for more than 10 milliseconds. He asked me to write a test to verify that his precaution was working as intended.
I wrote code to intentionally leave each thermal element on, to verify that Vic’s safety measure was effective. I was pleased to see that it worked perfectly, but also a little disappointed to miss more exciting behavior if it hadn’t. I thought of something else to try: what if I left an element on for 9.9 milliseconds, before turning it off for only 30 microseconds, then turning it back on again. It would effectively be on for more than 99% of the time while sidestepping Vic’s remedy. I couldn’t resist coding it up to see what would happen, so I fired up the modified test and nervously awaited the results.
At first nothing seemed to happen, except for a low volume humming sound emanating from the printer. Suddenly, after about five seconds, the paper started turning a deep, inky black, spreading out from the print-head organically, almost like a liquid, darker than I had ever seen before. I started smelling an acrid odor and noticed there were open flames near the print-head beginning to spread. I quickly reset the Apple II as I smothered the fire with my jacket. The foul smell drew a small crowd but mercifully no fire alarm.