main.c писал(а):
Тогда ещё вопрос по поводу ICW 4, в вики сказано, что биты 3 и 2 должны быть равны 0, у меня в материалах, что дал мне преподаватель бит 3 и 2 имеют вполне определённое назначение, картинку с материалами прикладываю. Вы не могли бы пояснить где информация более достоверная? Если будет интересно могу выложить полную PDF-ку материалов.
Изначально контроллер прерываний был отдельной микросхемой, обозначаемой Intel 8259, если мне склероз не изменяет (у нас его своровали под вывеской К1810ВН59). Он был рассчитан на обработку прерываний от двух типов микропроцессоров: 8-разрядного 8080 и 16-разрядного 8086/8088. Несколько микросхем могли объединяться, чтобы увеличить число линий запросов прерываний (одна микросхема обслуживала 8 линий, путём объединения можно было довести их число до 64). Предусматривались различные режимы работы и т.д.
В исходном IBM PC стоял один такой контроллер, позднее, с выходом IBM PC/AT, их стало два. Однако позднее появилась возможность впихнуть всю электронную начинку, составлявшую изначально несколько десятков микросхем, в несколько чипов намного большей степени интеграции. В отличие от довольно универсального 8259, эти микросхемы уже не могли работать с любым процессором -- они были рассчитаны на строго определённые модели. Поэтому надобность в поддержке кучи режимов попросту отпала. Именно по этой причине, когда описывают контроллер прерываний, используемый в современных ПК, для многих разрядов указывают обязательные значения -- иначе он может не заработать правильно (а может и заработать -- если в конкретной реализации эти биты игнорируются и всегда используются те значения, что должны). Ну а когда описывают исходный контроллер 8259, то всегда описывают назначение всех разрядов для любых возможных случаев его применения.