Bit 0 of the command byte is actually the clock/strobe bit that activates 
processing of a command byte in the controller when it is asserted to one.
The bit must be returned to zero before another command can be recognized. 

With the early interface boards, de-assertion was done in software. The
program had to write a command byte with bit 0 cleared in between each
command. This was typically by writing the Examine Staus or Examine Read
Buffer "commands."

To speed up the data transfer loop, later interface boards included a
one-shot that drove bit 0 of the command byte to the controller. The one-
shot was triggered by data input and output operations which then executed
the command byte (already present) by temporarily asserting command bit 0.

The one-shot also automatically asserted and cleared bit 0 to the controller
for any command written that had bit 0 set to 1. This meant the software did
not have to follow every command with an examine command to clear bit 0.

;--------------------------------------------------------------------------
; Set track, 3712
;--------------------------------------------------------------------------
	mvi	a,1		;want to seek to track 1
	out	0C1h		;output to data register
	
	mvi	a,11h		;set track command, bit 0 high
	out	0C0h		;issue command
	
	xra	a		;A=0=status command, bit 0 low
	out	0C0h		;  so next command will work
	
;--------------------------------------------------------------------------
; Set track, 3812
;--------------------------------------------------------------------------
	mvi	a,1		;want to seek to track 1
	out	0C1h		;output to data register
	
	mvi	a,11h		;set track command, bit 0 high
	out	0C0h		;issue command
	
;--------------------------------------------------------------------------
; Read data buffer loop, 3712
;--------------------------------------------------------------------------
loop	mvi	a,40h		;examine read buffer, bit 0 is low, so not
	out	0C0h		;  really a command, just enables RAM output
				;  and clears bit 0 for next shift command
				
	in	0C0h		;input data from the buffer RAM
	mov	m,a		;save in our memory
	
	mvi	a,41h		;shift read buffer, bit 1 is set, so it
	out	0C0h		;  executes. Bit 0 cleared with next examine
	
	inx	h		;increment pointer
	dcr	b		;decrement byte count
	jnz	loop

	xra	a		;A=0=status command, bit 0 low so next
	out	0C0h		;  command will work

;--------------------------------------------------------------------------
; Read data buffer loop, 3812
;--------------------------------------------------------------------------
	mvi	a,40h		;examine read buffer, bit 0 is low, so not
	out	0C0h		;  really a command, just enables RAM output

loop	in	0C0h		;input data from the buffer RAM, also pulses
				;  bit 0 of the command byte which makes 
				;  the 40h execute as a 41h (shift)
				
	mov	m,a		;save in our memory
	
	inx	h		;increment pointer
	dcr	b		;decrement byte count
	jnz	loop

;--------------------------------------------------------------------------
; Write data buffer loop, 3712
;--------------------------------------------------------------------------
loop	mov	a,m		;A=next byte to write
	out	0C1h		;the byte is now on the data out lines

	mvi	a,31h		;write buffer, bit 1 is set so this executes
	out	0C0h		;  and copies data byte into next buffer spot
	
	xra	a		;A=0=status command, bit 0 low, required so
	out	0C0h		;  next write buffer command works
	
	inx	h		;increment pointer
	dcr	b		;decrement byte count
	jnz	loop

;--------------------------------------------------------------------------
; Write data buffer loop, 3812
;--------------------------------------------------------------------------
	mvi	a,30h		;write buffer, bit 0 is low, so this is not
	out	0C0h		;  really a command and does nothing

loop	mov	a,m		;A=next byte to write
	out	0C1h		;the byte is now on the data out lines and 
				;  this also pulses bit 0 of the command
				;  byte causing the 30h to execute as 31h,
				;  write buffer

	inx	h		;increment pointer
	dcr	b		;decrement byte count
	jnz	loop
