J_OK:
MOV DX,03F1H ; D/S/P DIAGNOSTIC REGISTER
IN AL,DX ; READ D/S/P TYPE CODE
AND AL,11111000B ; KEEP ONLY UNIQUE CODE FOR D/S/P
CMP AL,01010000B ; D/S/P CARD - MULTIPLE DATA RATE?
JZ J_OK3 ; IF SO JUMP
MOV DX,05F7H ; FIXED DISK DIAGNOSTIC REGISTER
IN AL,DX ; READ FIXED DISK TYPE CODE
AND AL,11110000B ; KEEP ONLY UNIQUE CODE FOR F/D
CMP AL,10100000B ; FIXED DISK ADAPTER ?
JZ J_FAIL ; MUST BE COMBO ELSE ERROR
MOV BL,0FH ; OUTER LOOP COUNT WAIT FOR BUSY OFF
SUB CX,CX
MOV DX,01F7H ; HARD FILE STATUS PORT
J_OK1:
IN AL,DX ; GET THE STATUS
TEST AL,080H ; IS THE CONTROLLER BUSY?
JZ J_OK2 ; CONTINUE IF NOT
LOOP J_OK1 ; TRY AGAIN
DEC BL ; DECREMENT OUTER LOOP
JNZ J_OK1 ; TRY AGAIN IF NOT ZERO
AND AL,0CH ; BITS 2 & 3 = 0 IF MULTI DATA CAPABLE
JZ J_OK3 ; GO IF YES
JMP SHORT J_FAIL ; NO MULTIPLE DATA RATE CAPABILITY
J_OK2:
MOV DX,1F4H ; VERIFY MULTIPLE DATA RATE CAPABLE
MOV AL,055H ; WRITE TO THE CYLINDER BYTE
OUT DX,AL
JMP $+2 ; I/O DELAY
IN AL,DX ; CHECK DATA WRITTEN = DATA READ
CMP AL,055H
JNZ J_FAIL ; GO IF NOT
MOV AL,0AAH ; WRITE ANOTHER PATTERN
OUT DX,AL
JMP $+2 ; I/O DELAY
IN AL,DX
CMP AL,0AAH ; IS DATA PATTERN THE SAME?
JZ J_OK3 ; GO IF SO