Порт FF

Материал из SpeccyWiki
Версия от 19:57, 26 декабря 2007; Black Cat (обсуждение | вклад)

(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

Порт #FF (255) - порт - недоразумение, по своей сути портом не являлся и физически никогда не существовал. Обязан своим возникновением аппаратной архитектуре оригинального компьютера ZX Spectrum, который фактически состоял из двух электрически соединённых шинами данных с помощью резисторов блоков - процессорного блока, и блока видеопроцессора, что с экономической точки зрения удешевляло схему компьютера. Такое соединение позволяло развязать шины от влияния друг друга, но при этом иметь возможность в любой момент читать с другой шины, или писать на неё в момент когда она свободна. Именно наличием возможности читать процессором данные с шины видеопроцессора и обязан своим возникновением этот виртуальный порт. Эффект чтения осмысленных данных возникает при попытке чтения из любого несуществующего порта компьютера, вследствие того, что четвёртый такт, в который на шине данных должны выставляться валидные значения с читаемого порта совпадает по времени с тактом чтения видеопроцессором данных атрибутов знакоместа из видеопамяти. А т.к. в процессорном блоке никакой порт в этот момент на шину данных ничего не выдаёт (ввиду отсутствия порта), то через резисторы, которыми объединены шины данных двух блоков, из блока видеопроцессора читались текущие данные атрибутов знакоместа. Условный выбор адреса #FF для этого несуществующего порта обусловлен тем, что ввиду упрощённой дешифрации адресов портов, на все чётные адреса откликался порт #xxFE, а порты с меньшими нечётными адресами использовались различным периферийным оборудованием имевшим так же упрощённую дешифрацию. Из всех возможных портов, порт #FF был единственным, который требовал обязательной полной дешифрации и по этой причине был не выгоден для производителей, старавшихся сэкономить на логике дешифрации портов выпускаемых ими устройств. Впоследствии, этому "порту" нашлось применение для определения момента начала сканирования экранной области видеопроцессором. В этот момент считаемые из него данные становились отличными от значения #FF, что свидетельствовало о начале сканирования экранной области и могло быть использовано в программах, синхронизирующих свои действия с началом воспроизведения экранной области.