Цитата Сообщение от Patron Посмотреть сообщение
Насколько немедленно:

1. Дописывается на диск младший байт из сдвигового регистра, а вместо переноса в сдвиговый регистр старшего байта - начинается чтение.

2. Дописываются на диск оба байта текущего содержимого регистра данных и только потом начинается чтение.
Немедленно и сразу. Может записаться только несколько бит.

---------- Post added at 18:29 ---------- Previous post was at 18:27 ----------

Цитата Сообщение от Patron Посмотреть сообщение
Ещё вопрос - по пропуску "синхробита" при записи.

Программа форматирования пишет на диск четыре байта: 0xA1,0xA1,0xA1,0xFE с установленным в CSR битом WM. В каких байтах при этом происходит пропуск "синхробита":

1. Только в байтах 0xA1.
2. Только в первом записываемом байте из каждого слова.
3. Во всех байтах, записываемых с битом WM в CSR.
Во всех байтах записываемых с битом WM, но получится только в 0xA1, т.к. в 0xFE отсутствует требуемого количество нулевых битов (ноль после нуля).

---------- Post added at 18:40 ---------- Previous post was at 18:29 ----------

Цитата Сообщение от Patron Посмотреть сообщение
По логике работы программы форматирования - этот бит должен сбрасываться, а генератор CRC перезапускаться то ли после каждого перехода бита WM из 0 в 1 при котором в сдвиговом регистре находится байт 0xA1, то ли просто после каждого попадания при записи байта 0xA1 в сдвиговый регистр, если при этом установлен бит 14.

Записав заголовок сектора - программа форматирования ждёт установки бита 14, чтобы была выполнена запись CRC, потом без единого перехода в режим чтения - пишет промежуток, маркер данных, данные и затем повторно ожидает записи CRC:

Код:
5552$:	CALL	7614$		; Запись GAP, синхрозоны и маркера заголовка
5556$:	TSTB	@R4		; Контроллер готов к приему?
	BPL	5556$		; Нет
	MOV	14(R3),@R5	; Записать дорожку/сторону в заголовок
	MOV	2(R3),@R4	; Выключить запись маркера
5572$:	TSTB	@R4		; Контроллер готов к приему?
	BPL	5572$		; Нет
	MOV	R2,@R5		; Записать длину/номер сектора в заголовок
	MOV	#13,R0		; R0 = длина GAP2
	MOV	#175641,16(R3)	; Будет записываться маркер данных 0xFBA1
5612$:	BIT	#40000,@R4	; CRC заголовка записана?
	BEQ	5612$		; Нет
	CALL	7614$		; Запись GAP2, синхрозоны и маркера данных
	MOV	R1,R0		; R0 = размер сектора в словах
5626$:	TSTB	@R4		; Контроллер готов к приему?
	BPL	5626$		; Нет
	MOV	34(R3),@R5	; Записать первое слово заполнителя
	MOV	2(R3),@R4	; Выключить запись маркера
	DEC	R0		; Уменьшить число записываемых слов
5644$:	TSTB	@R4		; Контроллер готов к приему?
	BPL	5644$		; Нет
	MOV	34(R3),@R5	; Записать заполнитель в цикле
	SOB	R0,5644$
	INC	R2		; Увеличить номер сектора
	MOVB	62(R3),R0	; R0 = размер GAP3 в словах
	MOV	#177241,16(R3)	; Далее записывается маркер заголовка 0xFEA1
5672$:	BIT	#40000,@R4	; CRC зоны данных записана?
	BEQ	5672$		; Нет
Понятно, что в ходе записи маркера данных - бит 14 сбросился, а генератор CRC перезапустился, но обязательно ли для этого устанавливать бит WM и сработает ли такой "перезапуск" до записи CRC - не понятно.
Битов 14 целых два - один для режима чтения, другой для записи. И отображается в регистр состояния тот, в каком режиме находится контроллер. Vslav уже вроде писал, что расчет CRC при записи начинается при попадании 0xA1 в сдвиговый регистр, а бит WM нужен, чтобы при записи выполнить необходимые пропуски синхроимпульсов.
По поводу комментариев, они не всегда могут быть верные, т.к. когда я разбирал работу ПЗУ УКНЦ, а далее и фирмваре КМД ДВК, то писал так, как понимал на тот момент работу 1801ВП1-128, документации не было, и все приходилось додумывать самому. Кстати по адресу 5300 правильный комментарий, о том, что CRC начала записываться.