;DiskBootIOCBs.bravo  last edited by Jim Frandeen November 9, 1981  1:04 PM: Move the IncrementDataPgNum bit back one word
;Dennis Grundler  1-Sep-84 22:44:40 Add copyright notice

; Copyright (C) 1981, 1982, 1983 by Xerox Corporation.  All rights reserved.

;IOCB's used for disk booting. Heads have been moved to cylinder 0 by phase 0

	@100	;data area
	B	;special block type, ignore
	FE	;word count
	0	;not used
#02	0000	;final IOCB status word, set by DiskDlion ucode
	0000	;next IOCB (should always be 0)
	[01	;address of seek IOCB
	[25	;address of transfer IOCB
	[30	;address of verify read read parameter area
	[20	;address of verify verify read parameter area
#03	0000	;header	cylinder[0..15]
	0000	;      2	head[0..7],, sector[0..7]
#04	0000	;label	ID[ 0..15]
	0000	;      2	ID[16..31]
	0000	;      3	ID[32..47]
	0000	;      4	ID[48..63]
	0000	;      5	ID[64..89]
	0000	;      6	page[7..22]
	0000	;      7	page[0..6],, unused[0..5]← 0 ,, flags[0..2]
	0000	;      8 type[0..15]
	0000	;      9 bootChainLink[0..15]
	0000	;     10

;align on 16 word boundary
	0 0 0
	0 0 0 0
	0 0 0 0

;verify verify read parameter area (must be 16 word aligned)
#20	00	;# sectors to write, set at run time
	31	;(number of sectors that may be skipped in
	;looking for the proper sector) + 1
	0432	;control word to verify header field
	1	;word count for verify of header field
	[03	;address of header template in IOCB
	1C	;abort if NotReady, WriteFault or Overrun after header
	3	;skip to next sector if CRC or Verify error on header
	0432	;control word to verify label field
	0B	;word count for label field verify
	[04	;address of label field in IOCB
	1f	;abort if NotReady, WriteFault, Overrun, CRC or
	;Verify error after label
	0430	;control word to Read data field
	8100	;word count for Read of data field (256)
	3	;virtual page # for data buffer
	1e	;abort if NotReady, WriteFault, Overrun or CRC
	;error after data
	0420	;control word used halt hardware after each field
	0426	;control word used to find sector mark for header

;align on 16 word boundary
	0 0 0
	0 0 0 0
	0 0 0 0
	0 0 0 0

;verify read read parameter area (must be 16 word aligned)
#30	00	;# sectors to write, set at run time
	31	;(number of sectors that may be skipped in
	;looking for the proper sector) + 1
	0432	;control word to verify header field
	1	;word count for verify of header field
	[03	;address of header template in IOCB
	1C	;abort if NotReady, WriteFault or Overrun after header
	3	;skip to next sector if CRC or Verify error on header
	0430	;control word to Read label field
	0C	;word count for label field read
	[04	;address of label field in IOCB
	1e	;abort if NotReady, WriteFault, Overrun or
	;CRC error after label
	0430	;control word to Read data field
	8100	;word count for Read of data field (256)
	2	;virtual page # for data buffer
	1e	;abort if NotReady, WriteFault, Overrun or CRC
	;error after data
	0420	;control word used halt hardware after each field
	0426	;control word used to find sector mark for header
;Seek IOCB
#01	0000	; -(number of cylinders to move) supplied at run time
	8000 0422	;insure that Seek Complete
	7 0000	;Set the IOCBDone bit in UField and clear the
	;UStatus register.  Otherwise, they will return spurious
	;status bits not valid for a Seek operation into the
	;final status word.
#06	8000 0000 8000 0000	;Send step pulse (two words supplied at run time)
	0 [01	;increment the remaining distance, Zero yet?
	2 [06	;no, send another step pulse
	6 0 0 0400 [02	;yes, quit now.

;transfer IOCB
#25	5 0	;load the parameters.
	8000 0422	;wait for SeekComplete
	800	;yes, transfer run of pages
	2 [26	;if had error, finish anyway
#26	6 0 0 0400 [02	;finish up IOCB