"Роберт Джордайн. Справочное пособие программиста - 2 (ассемблер, операционная система MS DOS)" - читать интересную книгу автора

более просто. Напоминаем, что нельзя забывать о восстановлении
первоначального значения в порте B.

IN AL,61H ;получаем значение из порта B
OR AL,10000000B ;устанавливаем бит 7 в 1
OUT 61H,AL ;заменяем байт
IN AL,60H ;получаем значение из порта A
MOV CL,6 ;подготовка для сдвига AL
SHR AL,CL ;сдвигаем 2 старших бита на 6 позиций
INC AL ;начинаем счет с 1, а не с 0
MOV NUM_DRIVES,AL ;получаем число накопителей
IN AL,61H ;подготовка к восстановлению порта B
AND AL,01111111B ;сбрасываем бит 7
OUT 61H,AL ;восстанавливаем байт

.h3 1.1.2 Определение типа IBM PC.
----------------------------------

Имеются проблемы совместимости между различными типами IBM PC.
Для того чтобы программа могла работать на любом из IBM PC, ис-
пользуя все его возможности, необходимо чтобы она могла опреде-
лить тип машины, в которую она загружена. Эта информация содер-
жится во втором с конца байте памяти по адресу FFFFE в ROM-BIOS,
с использованием следующих ключевых чисел.

Компьютер Код

PC FF
XT FE
PCjr FD
AT FC

Высокий уровень.

В Бейсике надо просто использовать PEEK для чтения значения:

100 DEF SEG = &HF000 'указываем на верхние 64K памяти
110 X = PEEK(&HFFFE) 'читаем второй с конца байт
120 IF X = &HFD THEN ... '... тогда это PCjr

Низкий уровень.

В языке ассемблера:

;--- Определение типа компьютера:
MOV AX,0F000H ;указывает ES на ПЗУ
MOV ES,AX
MOV AL,ES:[0FFFEH] ;получаем байт
CMP AL,0FDH ;это PCjr?
JE INITIALIZE_JR ;переходим на инициализацию