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
; Micro Channel (MCA) bus.
;
; Returns:
;     CF clear if Micro Channel bus
;         AL = Number of MCA slots (0 for 7552)
;     CF set on failure or if not Micro Channel bus
;         AL = 0
;
; Destroys AX,BX,ES,FLAGS
;----------------------------------------------

CheckMCA proc near
; Check for MCA system
	mov	AH, C0h
	int	15h
	mov	AL, 0    ; default to 0 slots
	jc	Failure  ; Leave if call unsupported
	test	byte ptr ES:[BX+5], 2  ; MCA flag bit?
	jz	Failure  ; Leave if not MCA system
; Detect 7552 (non-standard MCA)
	cmp	byte ptr ES:[BX+2], FCh  ; IBM 286?
	jne	Slots
	cmp	byte ptr ES:[BX+3], 6  ; 7552 Gearbox?
	je	Success  ; Report MCA w/ zero slots on 7552
; Get slot count
Slots:
	cli  ; mask interrupts
	mov	AL, 1
	out	75h, AL  ; NVRAM index high
	out	4Fh, AL  ; delay (dummy I/O op.)
	mov	AL, 8Eh
	out	74h, AL  ; NVRAM index high
	out	4Fh, AL  ; delay (dummy I/O op.)
	in	AL, 76h  ; NVRAM data from index 18Eh
	sti  ; allow interrupts
	cmp	AL, 8    ; # of slots must be <= 8
	jbe	Success
	mov	AL, 4    ; default to 4 slots
Success:
	clc
	retn
Failure:
	stc
	retn
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 7 March 2022
Back to the 'Routines' index