Цитата Сообщение от Jarik65535 Посмотреть сообщение
записываем в CSR код операции, затем в регистр данных пишем последовательно номер тома, номер блока, кол-во блоков, затем собственно пишем или читаем данные, причем постоянно проверяем бит готовности в CSR перед каждым обращением к регистру.
Да, драйвер HX так и работает, только при чтении система может запросить не целый блок, а только одно слово, поэтому в операции сообщается не количество блоков для передачи, а количество байтов.

Код:
	Mov	#"CW, R0		; Packet type = COMMAND ; Command = Cmd_WRITE_RAW
	Call	WOs

	Mov	R3,  R0			; Unit
	Call	ChOs

	Mov	R2,  R0			; Block
	Call	WOs

	Clr	R0
	Call	WOs			; 16bit Block -> 32bit Block

	Mov	R1,   R0		; ByteCount
	Add	(SP), R0		; R0 = ByteCount + fill count
	Call	WOs
1$:
.IF	EQ	MMG$T
	MovB	(R5)+, R0
.IFF
	Call	@$GTBYT
	Mov	(SP)+, R0
.EndC
	Call	ChOs
	SOB	R1, 1$

	Mov	(SP)+, R1		; R1 = Bytes to fill
	BEq	SkipFill		; Skip fill on full blocks
	Clr	R0
4$:
	Call	ChOs
	SOB	R1, 4$
SkipFill:



Цитата Сообщение от Jarik65535 Посмотреть сообщение
Может кто знает, что приходит на вход драйвера в RT-11?
Код:
	Mov	HXCQE,  R4		; R4 -> Queue element
	Mov	(R4)+,  R2		; R2 = Block number
	MovB	(R4)+,  R1		; R1 = SpFun code
	MovB	(R4)+,  R3		; R3 = Unit number
	BiC	#^c7,   R3		; Force it to be 0..7

	Tst	R1
	BNE	SPFUN			; Is it SpFun call?

	Mov	(R4)+,	R5		; R5 = buf addr
	Mov	(R4),	R1		; R1 = word count

	Tst	R1
	BEq	DONE			; R1 = 0 - Nothing to do
	BPl	HXREAD			;    > 0 - Read
					;    < 0 - Write
	Call	HX.Write		; Make Write to HX
	Br	CHECK			; OK?

HXREAD:					; Make Read from HX
	Call	HX.Read
CHECK:					; Error?
	BCC	DONE			;   No - OK
					;   Else  - abort
HXINT:
HXERR:
	Mov	HXCQE,	R4		;
	BiS	#HDERR$, @-(R4)		; Set ERROR bit in CSW.