nedoPC.org

Community of electronics hobbyists established in 2002

...
Atom Feed | View unanswered posts | View active topics It is currently 20 Jun 2018 09:08



Reply to topic  [ 2 posts ] 
Вопрос про выход из HALT-состояния по NMI/INT в Z80 
Author Message
Junior

Joined: 23 Aug 2010 12:44
Posts: 1
Location: 79.111.177.2
Reply with quote
Доброго времени суток.
Как ведёт себя реальный железный Z80 когда он находится в состоянии останова (HALT) и приходит NMI или же INT (считаем, что INT разрешены)?
Он инкрементирует PC, а затем кладёт его в стек и прыгает на адрес обработчика прерывания или он просто кладёт PC в стек и прыгает на адрес обработчика прерывания?

Например ситуация с одним симулятором такая:
1. Допустим, инструкция HALT лежит по адресу 100
2. Симулятор процессора натыкается на неё и начинает генерировать NOP, при этом PC не инкрментируется, его значение так и остаётся 100.
3. Приходит NMI. Симулятор кладёт текущее значение PC (100) в стек и прыгает на адрес 66.
5. Допустим, по адресу 66 находится простой RET. В результате мы опять попадаем на адрес 100 где находится HALT. И так до бесконечности.

А ситуация с другим симулятором такая:
1. Допустим, инструкция HALT лежит по адресу 100
2. Симулятор процессора натыкается на неё и начинает генерировать NOP, при этом PC не инкрментируется, его значение так и остаётся 100.
3. Приходит NMI. Симулятор инкрементирует PC (PC становится равным 101) а затем кладёт его в стек и прыгает на адрес 66.
5. Допустим, по адресу 66 находится простой RET. В результате мы попадаем на адрес 101 и выполняем какую либо команду по этому адресу. На HALT по адресу 100 мы уже не залипаем.

Непонятно кому верить, а до практического эксперимента ещё не дошёл.


23 Aug 2010 13:21
Profile
Banned
User avatar

Joined: 20 Mar 2005 14:41
Posts: 2150
Location: От туда
Reply with quote
Post 
Курите маны. Z80 в состоянии останова (!HALT=0) генерирует NOP'ы для обеспечения сигнала !REFSH (встроенная регенерация памяти). Из этого состояния его может вывести ТОЛЬКО аппаратное прерывание. А именно: !RESET, при этом он обнуляется и начинает с началаю !NMI, при этом в стэк пихается следующий за HALT адрес и выполняется 66h. !INT, только при EI, в остальном, так же как и с NMI - в стек следующий адрес, адрес перехода зависит от режима IM [0..2].
Поэтому, в спектруме каждая HALT = ждать следующий фрейм.


23 Aug 2010 21:09
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 2 posts ] 

Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.