Checking if it is a microchannel system

In many of the PS/2 routines you may need to check if the system is a microchannel computer. This routine does that check, setting the Carry flag if the system does not have the microchannel bus. If it is a microchannel system, the Carry flag is clear and the AL register holds the number of microchannel 'slots'. Be aware that some of the system planar resources may be identified as a 'slot'.

;----------------------------------------------
; 	    CheckMCA Assembly routine
; This routine checks whether the system has a 
; microchannel (MCA) bus.
; 
;    Entry:
;	None
;
;    Exit:
;	Carry flag clear if microchannel bus
;	    AL = Number of MCA slots
;	Carry flag set if not microchannel bus
;	    AL = 0
;
;----------------------------------------------

CheckMCA	proc	near
		mov	AH,C0h
		int 	15h
		mov	AL,0
		jc	Finish			;Call supported?
		stc
		test 	byte ptr ES:[BX+05],02	;MCA flag bit?
		jne 	Finish
		cmp	byte ptr ES:[BX+02],FC	;IBM 286?
		jne	Slots
		cmp	byte ptr ES:[BX+03],06	;7552 Gearbox?
		je	Finish
Slots:		clc
		cli
		out 	75h,01
		mov	AL,8Eh
		out 	74h,AL
		in 	AL,76h
		cmp	AL,08
		jbe	Finish
		mov	AL,04
Finish:		sti
CheckMCA	endp

Note: The PS/2 Model 50, 50Z, and 55SX, as well as the Industrial Models 7541/7542 (because both are based on a Model 50Z planar) lack the 2Kb "Extended CMOS RAM" that is used for a microchannel configuration of more than four adapters. The IBM 7552 "Gearbox" (BIOS Model FCh, Submodel 06h) has microchannel adapter interposers that can be installed, but implements the microchannel configuration by a different method from later designs, therefore it is excluded by this detection routine.

Last updated 25 September 2021
Back to the Interrupt 15h index