![](http://www.nedopc.org/nedopc/image/nedobanner3.gif) |
nedoPC.orgElectronics hobbyists community established in 2002 |
![](http://www.nedopc.org/nedopc/image/nedobanner4.gif) |
|
Page 1 of 1
|
[ 2 posts ] |
|
Вопрос про выход из HALT-состояния по NMI/INT в Z80
Author |
Message |
antok
Junior
Joined: 23 Aug 2010 11:44 Posts: 1 Location: 79.111.177.2
|
![Reply with quote Reply with quote](./styles/getaway/imageset/en/icon_post_quote.gif)
Доброго времени суток.
Как ведёт себя реальный железный 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 |
|
![](./styles/getaway/theme/images/spacer.gif) |
HardWareMan
Banned
Joined: 20 Mar 2005 13:41 Posts: 2141 Location: От туда
|
Курите маны. Z80 в состоянии останова (!HALT=0) генерирует NOP'ы для обеспечения сигнала !REFSH (встроенная регенерация памяти). Из этого состояния его может вывести ТОЛЬКО аппаратное прерывание. А именно: !RESET, при этом он обнуляется и начинает с началаю !NMI, при этом в стэк пихается следующий за HALT адрес и выполняется 66h. !INT, только при EI, в остальном, так же как и с NMI - в стек следующий адрес, адрес перехода зависит от режима IM [0..2].
Поэтому, в спектруме каждая HALT = ждать следующий фрейм.
|
23 Aug 2010 20:09 |
|
|
|
Page 1 of 1
|
[ 2 posts ] |
|
Who is online |
Users browsing this forum: No registered users and 22 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
|
|