0100h JMP 02C9h ;Jump over display strings 0103h DB "IBM SCSI Adapter Version = h..$" 0125h DB "IBM SCSI Adapter w/Cache Version = h..$" 014Fh DB "IBM Wide/Fast SCSI Adapter Version = h..$" 017Bh DB "Get POS command failed!..$ 0195h DB "No IBM PS/2 Micro Channel SCSI adapters were found!..$" 01CBh DB "Slot Number = , $" [01D9h] = Displayable slot number of SCSI adapter found [01DDh] = Adapter ID of SCSI adapter found [01FFh] = SCSI adapter microcode level [0227h] = Base I/O port (i.e. 3540h) of SCSI adapter found [0229h] = Base I/O port + 2 (i.e. 3542h) [022Bh] = Base I/O port + 4 (i.e. 3544h) [022Dh] = Base I/O port + 6 (i.e. 3546h) [022Fh] = Base I/O port + 7 (i.e. 3547h) [0231h] = Base I/O port + 5 (i.e. 3545h) 0233h SUB AH,AH ;Subroutine to display values 0235h MOV BL, 10h 0237h DIV BL 0239h CMP AL, 09h 023Bh JA 0242h 023Dh OR AL, 30h 023Fh JMP 0246h 0241h NOP 0242h SUB AL, 0Ah 0244h ADD AL, 41h 0246h CMP AH, 09h 0249h JA 024Fh 024Bh OR AH, 30h 024Eh RET 024Fh SUB AH, 0Ah 0252h ADD AH, 41h 0255h RET 0256h PUSH DX 0257h MOV CX, 0004h 025Ah MOV AX, CS 025Ch MOV DL, AH 025Eh SHL AX, CL 0260h SHR DL, CL 0262h MOV CL, DL 0264h ADD AX, BX 0266h ADC CX, +00 0269h POP DX 026Ah RET 026Bh MOV CX, 0000h 026Eh MOV DX, [022Fh] 0272h IN AL, DX 0273h TEST AL, 01h 0275h JZ 027Bh 0277h LOOP 026Eh 0279h JMP 026Eh 027Bh MOV BX, DI 027Dh CALL 0256h 0280h MOV DX, [0227h] 0284h OUT DX, AX 0285h MOV AX, CX 0287h MOV DX, [0229h] 028Bh OUT DX, AX 028Ch MOV DX, [022Bh] 0290h MOV AL, 30h 0292h OR AX, BP 0294h OUT DX, AL 0295h MOV DX, [022Fh] 0299h IN AL, DX 029Ah TEST AL, 02h 029Ch JZ 0299h 029Eh MOV CL, AL 02A0h SUB CH, CH 02A2h MOV DX, [022Dh] 02A6h IN AL, DX 02A7h PUSH AX 02A8h MOV CX, 0000h 02ABh MOV DX, [022Fh] 02AFh IN AL, DX 02B0h TEST AL, 01h 02B2h JZ 02B8h 02B4h LOOP 02ABh 02B6h JMP 02ABh 02B8h MOV DX, [022Bh] 02BCh MOV AL, E0h 02BEh OR AX, BP 02C0h OUT DX, AL 02C1h POP AX 02C2h RET [02C3h] = Port 96h value at start [02C4h] = Slot number of SCSI adapter found [02C6h] = POS setup port for system (94h) or adapter (96h) [02C8h] = Port 94h value at start 02C9h IN AL, 96h ;Enter system & slot setup 02CBh MOV [02C3h], AL 02CEh MOV AL, 60h 02D0h OUT 96h, AL 02D2h MOV DX, 0094h 02D5h MOV [02C6h], DX 02D9h IN AL, DX 02DAh MOV [02C8h], AL 02DDh MOV AL, FDh 02DFh OUT DX, AL 02E0h MOV DX, 0101h 02E3h IN AL, DX 02E4h MOV AH, AL 02E6h MOV DX, 0100h 02E9h IN AL, DX 02EAh MOV [01DDh], AX ;Save away Adapter ID 02EDh AND AX, FFF8h 02F0h CMP AX, 8EF8h ;Is it an Expansion Unit SCSI adapter? 02F3h JZ 02FEh 02F5h MOV WORD PTR [01DDh], 0000h ;Zero out the Adapter ID if not 02FBh JMP 0315h 02FDh NOP 02FEh MOV DX, 0102h 0301h IN AL, DX 0302h AND AL, 01h 0304h JZ 0315h 0306h MOV BYTE PTR [01D9], 30h 030Bh MOV DX, 01CBh 030Eh MOV AH, 09h 0310h INT 21h ;Slot number display 0312h CALL 03A2h 0315h MOV DX, [02C6h] 0319h MOV AL, [02C8h] 031Ch OUT DX, AL 031Dh MOV DX, 0096h 0320h MOV AL, [02C3h] 0323h OUT DX, AL 0324h MOV DX, 0096h 0327h MOV [02C6h], DX 032Bh IN AL, DX 032Ch MOV [02C8h], AL 032Fh MOV CX, 0008h 0332h MOV [02C4h], CX 0336h MOV AX, CX 0338h ADD AX, 0007h 033Bh MOV DX, 0096h 033Eh OUT DX, AL 033Fh MOV DX, 0101h 0342h IN AL, DX 0343h SHL AX, 04h 0346h MOV DX, 0100h 0349h IN AL,DX 034Ah CMP AX, 8EFEh ;Is it SCSI no cache? 034Dh JZ 0359h ;Jump if so 034Fh CMP AX, 8EFFh ;Is it SCSI w/ cache? 0352h JZ 0359h ;Jump if so 0354h CMP AX, 8EFCh ;Is it F/W SCSI? 0357h JNZ 0378h ;Jump if so 0359h MOV DX, 0102h 035Ch MOV [01DDh], AX 035Fh IN AL, DX 0360h AND AL, 01h 0362h JZ 0378h 0364h MOV AX, [02C4h] 0367h CALL 0233h 036Ah MOV [01D9h], AH 036Eh MOV DX, 01CBh ;"Slot Number..." displayed 0371h MOV AH, 09h 0373h INT 21h 0375h CALL 03A2h 0378h MOV CX, [02C4h] 037Ch DEC CX 037Dh JCXZ 0381h 037Fh JMP 0332h 0381h MOV DX, 0096h ;Exit slot setup 0384h MOV AL, [02C8h] 0387h OUT DX, AL 0388h PUSHF ;Mask off IRQ 14h 0389h CLI 038Ah MOV DX, 00A1h 038Dh IN AL, DX 038Eh AND AL, BF 0390h OUT DX, AL 0391h POPF 0392h CMP WORD PTR [01DDh], +00 ;Check if Adapter ID was zeroed 0397h JNZ 03A0h 0399h MOV DX, 0195h ;No IBM SCSI adapters found displayed 039Ch MOV AH, 09h 039Eh INT 21h 03A0h INT 20h ;End program 03A2h MOV DX, 0102h ;Subroutine to store away I/O Address locations 03A5h XOR AX, AX 03A7h IN AL, DX 03A8h AND AX, 000Eh 03ABh SHL AX, 02 03AEh ADD AX, 3540h 03B1h MOV DX, AX 03B3h ADD AX, 0000h 03B6h MOV [0227h], AX ;Save Base I/O Port 03B9h MOV AX, DX 03BBh ADD AX, 0002h 03BEh MOV [0229h], AX ;Save Base I/O Port + 2 03C1h MOV AX, DX 03C3h ADD AX, 0005h 03C6h MOV [0231h], AX ;Save Base I/O Port + 5 03C9h MOV AX, DX 03CBh ADD AX, 0007h 03CEh MOV [022Fh], AX ;Save Base I/O Port + 7 03D1h MOV AX, DX 03D3h ADD AX, 0006h 03D6h MOV [022D], AX ;Save Base I/O Port + 6 03D9h MOV AX, DX 03DBh ADD AX, 0004h 03DEh MOV [022Bh], AX ;Save Base I/O Port + 4 03E1h MOV DX, [02C6h] ;POS Setup port (94h or 96h) value 03E5h MOV AL, [02C8h] ;Saved POS Setup value 03E8h OUT DX, AL 03E9h PUSHF ;Turn IRQ 14h back on 03EAh CLI 03EBh MOV DX, 00A1h 03EEh IN AL, DX 03EFh OR AL, 40 03F1h OUT DX, AL 03F2h POPF 03F3h MOV DX, [0231h] ;Load Base I/O port + 5 03F7h MOV AL, 03h 03F9h OUT DX, AL 03FAh MOV DX, [022Fh] ;Load Base I/O port + 7 03FEh IN AL, DX 03FFh TEST AL, 02h 0401h JZ 0423h 0403h MOV DX, [022Dh] ;Load Base I/O port + 6 0407h IN AL, DX 0408h AND AL, 0Fh 040Ah OR AL, E0h 040Ch MOV DX, [022Fh] ;;Load Base I/O port + 7 0410h PUSH AX 0411h IN AL, DX 0412h TEST AL, 01h 0414h JNZ 0411h 0416h POP AX 0417h MOV DX, [022Bh] ;Load Base I/O port + 4 041Bh OUT DX, AL 041Ch MOV CX, 0000h 041Fh LOOP 041Fh 0421h JMP 03FAh 0423h MOV BP, 000Fh 0426h MOV BX, 01DFh 0429h CALL 0256h 042Ch MOV DI, 020Bh 042Fh MOV [DI+10h], AX 0432h MOV [DI+12h], CX 0435h MOV BX, 01F9h 0438h CALL 0256h 043Bh MOV DI, 020Bh 043Eh MOV [DI+08h], AX 0441h MOV [DI+0Ah], CX 0444h CALL 026Bh 0447h AND AL, F0h 0449h CMP AL, 10h 044Bh JNZ 0498h 044Dh MOV DX, [01FFh] ;Move ucode version to DX 0451h AND DX, 0FFFh 0455h MOV AL, DH 0457h CALL 0233h ;Make it displayable 045Ah MOV DH, AH 045Ch MOV AL, DL 045Eh CALL 0233h 0461h CMP WORD PTR [01DDh], 8EFFh ;Is it a SCSI w/ cache?? 0467h JZ 047Eh ;Jump if so 0469h CMP WORD PTR [01DDh], 8EFCh ;Is it F/W SCSI? 046Fh JZ 048Bh ;Jump if so 0471h MOV [011Fh], AX ;Move ucode version for SCSI no cache 0474h MOV [011Eh], DH 0478h MOV DX, 0103h ;SCSI no cache message 047Bh JMP 049Bh 047Dh NOP 047Eh MOV [0149h], AX ;Move ucode version for SCSI w/ cache 0481h MOV [0148h], DH 0485h MOV DX, 0125h ;SCSI w/ cache message 0488h JMP 049Bh 048Ah NOP 048Bh MOV [0175h], AX ;Move ucode version for F/W SCSI 048Eh MOV [0174h], DH 0492h MOV DX, 014Fh ;SCSI F/W message 0495h JMP 049Bh 0497h NOP 0498h MOV DX, 017Bh ;POS failed message 049Bh MOV AH, 09h ;Display message of [DX] offset 049Dh INT 21 049Fh RET