╔═───────────────════════───────────────═╗ │ Хитрые процессоры │ ╚═──────────────────────────────────────═╝ - Я сказал DI : HALT - Ну и что?! Александр Майоров Дмитрий Ломов Вам, уважаемые читатели, не встречались программы, которые стабильно, в одном и том же месте, "зависают"? Ну, причин для этого очень много, а вот ещё одна: Некая программа при запуске "висела", и, с вопросом "почему?", на Скорпе была нажа- та кнопка "Magic"... И что-же оказалось? А вот что: Процессор выполнял команду HALT при зап- рещённых прерываниях! И такой же "эффект" имелся ещё в некото- рых программах. Разумеется, после того, как процессор "протолкнули" через этот HALT, программа заработала... Поскольку маловероятно, что авторы прог- рамм "не заметили" этот "глюк" при отладки программы, то вопрос "что же это такое?", казалось, не имел ответа... Оказывается, всё объясняется процессором КР1858ВМ3. Его система прерываний несколь- ко отличается от фирменного Z80. Пункт номер раз: В случае выполнения команды HALT запрет прерываний игнорируется. То есть, команда DI запрещает прерывания, и они невозможны до тех пор, пока процессор не наткнется на HALT. На время исполнения HALT прерывания разрешаются, и, как только прерывание воз- никло, опять запрещаются. Пункт номер два: Во время ожидания прерывания по команде HALT не выполняются циклы регенерации па- мяти. Ни к чему фатальному это не приво- дит, так как память регенерируется видео- контроллером. В случае стандартного про- цессора во время ожидания по HALT внутри процессора генерируются и выполняются ко- манды NOP, и вместе с ними проходят циклы регенерации. В результате, для процессора ВМ3 регистр {R} не меняется во время ис- полнения HALT. Пункт номер три, следствие предыдущего: Во время исполнения HALT реакция на прерывание при поступлении запроса проис- ходит мгновенно. В стандартном же процес- соре реакция на прерывание возникает толь- ко по окончанию выполнения текущей холос- той команды NOP. Рулезное следствие пункта три: При написании мультиколоров внутри стро- ки (например, шахматное поле), для стан- дартного процессора нужно выравнивать всю программу, дабы время её исполнения от HALTа до HALTа было кратно четырем (здесь также нужно учитывать цикл подтверждения прерывания). Если программа не выровняна, то возникают "дрожалки" по горизонтали, так как время между возникновением преры- вания и его подтверждением зависит от фазы быполнения холостых NOPов (неравномерность от нуля до трех тактов). В случае процес- сора ВМ3 время между возникновением пре- рывания и его подтверждением всегда равно нулю (если был HALT). Посему процессор ВМ3 незаменим на этапе отладки мультиколоров. Процессор 1858ВМ3 является аналогом Z84C004 (Z80A), исключая вышеназванные обстоятельства. Вот так-то! __________________________ ──────────────────── >