"П.Нортон "Программно-аппаратная организация компьютера IBM PC"" - читать интересную книгу автора

кассетного накопителя. О том, как используются все эти порты, будет
рассказано в главе 11.
Монохромный дисплей использует несколько последовательных портов,
начиная с порта 944(3В0(16)), а цветной графический - последовательность,
начинающуюся с порта 976(3D0(16)). Контролер гибких дисков использует
последовательность портов, начиная с порта 1008(3F0(16)), а собственно
данные, записываемые на дискету или считываемые с нее, передаются через
порт 1013(3F5(16)).
Вместе с программой 3.1 для исследования конфигурации памяти,
листинги 3.2 и 3.3 показывают программу, объединяющую модули, написанные
на Паскале и на ассемблере, которая считывает все порты и сообщает о том,
какие из них наиболее вероятно активны. Готовая к запуску версия этой
программы имеется на дискете, прилагающейся к этой книге. В отличие от
программы обследования памяти эта программа не дает достаточно практичного
результата, однако, она может оказаться довольно интересной.
Поскольку Бейсик обеспечивает доступ к портам, эту программу можно
было бы написать на Бейсике, но тогда для читателя не было бы в ней ничего
нового. Вместо этого приведенный пример может послужить хорошим введением
в программирование на ассемблере, Паскале и примером объединения программ,
написанных на разных языках.


Приложение 3.1. Текст программы поиска активного участка памяти
(Бейсик).

1000 REM
1010 REM
1020 REM
1030 GOSUB 2000 ' TITLE
1040 GOSUB 3000 ' SEARCH AND DISPLAY
1050 GOSUB 4000 ' RETURN TO DOS
2000 REM
2010 KEY OFF : CLS : WIDTH 80
2020 REM
2030 PRINT "
2040 PRINT "
2050 PRINT
2060 PRINT "
2070 PRINT
2080 PRINT "
2090 PRINT "
2100 PRINT
2999 RETURN
3000 REM
3010 TRUE.% = -1
3020 FALSE.% = 0
3030 IN.MEMORY.% = FALSE.%
3040 FOR PARAGRAPH.! = 0 TO 65535! STEP 64 ' CHECK EACH 1K OF MEMORY
3050 GOSUB 5000 ' CHECK FOR ACTIVE MEMORY
3060 IF (IN.MEMORY.%=FALSE.%) AND (MEMORY.HERE.%=TRUE.%) THEN GOSUB