nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 28 Mar 2024 15:31



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

Joined: 23 Aug 2010 11: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 12:21
Profile
Banned
User avatar

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


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

Who is online

Users browsing this forum: No registered users and 10 guests


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:  
cron
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.