100 A = INP(&H61) 'получаем значение из порта B
110 A = A OR 128 'устанавливаем бит 7
120 OUT &H61,A 'посылаем байт назад в порт B
130 B = INP(&H60) 'получаем значение из порта A
140 A = A AND 128 'сбрасываем бит 7
150 OUT &H61,A 'восстанавливаем значение порта B
160 GOSUB 1000 'преобразуем в двоичную строку
170 NUMDISK$ = RIGHT$(B$,1) 'получаем нулевой бит
180 IF D$ = 1 THEN NUMDISK = 0: GOTO 230 'нет дисков
190 C$ = LEFT$(B$,2) 'берем два старших бита строки
200 TALLEY = 0 'переменная для числа дисков
210 IF RIGHT$(C$,1) = "1" THEN TALLEY = 2 'берем старший бит
220 IF LEFT$(C$,1) = "1" THEN TALLEY = TALLEY + 1 'и младший
230 TALLEY = TALLEY + 1 'счет начинается с 1, а не с 0
'теперь имеем число накопителей
1000 '''Подпрограмма преобразования байта в двоичную строку
1010 B$ = "" 'заводим строку
1020 FOR N = 7 TO 0 STEP -1 'проверка очередной степени 2
1030 Z = B - 2^N '
1040 IF Z >= 0 THEN B = Z: B$ = B$+"1" ELSE B$ = B$+"0"
1050 NEXT 'повторяем для каждого бита
1060 RETURN 'все закончено
Низкий уровень.
Ассемблерная программа получает число имеющихся дисковых нако-
пителей тем же способом, что и в вышеприведенном примере, но
более просто. Напоминаем, что нельзя забывать о восстановлении
первоначального значения в порте B.
Предыдущая страница 13 Следующая страница
1180691813
|