PDA

Просмотр полной версии : Z80 особенности работы ...



Robus
08.11.2013, 19:42
Привет, всем.

Возник вопрос на уровне структуры работы выходов Z80 при каждом такте. Итак рассматриваем ситуацию сигнала M1 при дешифровке команды LD SP,(0). = [ED 7B 00 00]
Если верить описанию, то M1 станет нулём при T1 и T2, при T3 и T4 будет снова единица. Как себя будет вести M1 в случае [ED 7B 00 00] ???

По логике длжно быть так:
T1 M1=0
T2 M1=0
T3 M1=0
T4 M1=0
T5 M1=0
T6 M1=0
T7..T20 M1=1

Получается на старте такта Т3 проверяется префикс ли был прочитан и M1 не сбрасывается ??? Правильно ли я понял ???

Blade
08.11.2013, 19:51
Нет. На шине будут циклы <M1><M1><MemRd><MemRd><MemRd><MemRd>. Диаграммы циклов есть в даташите.

Robus
08.11.2013, 20:03
Нет. На шине будут циклы <M1><M1><MemRd><MemRd><MemRd><MemRd>. Диаграммы циклов есть в даташите.

То есть выход M1 будет только на фоне ED ??? И до следующей команды не возникнет ?

Где можно получить такой даташит ? В том даташите который у меня "МИНСК УКИК ЦЕНТР 1991", показано диаграммой только цикл М1 и циклы чтения и записи. По описанию написано, что в цикл М1 входит CBR и OCR ... Получается что выход M1 должен быть дважды на фоне этой команды ?

Помогите разобраться ...

Robus
08.11.2013, 20:31
0xED: <OpCodeFetch>
T1 M1=0
T2 M1=0
T3 M1=1
T4 M1=1
0x7B: <OpCodeFetch>
T1 M1=0
T2 M1=0
T3 M1=1
T4 M1=1
Отлично !!! Большое спасибо !!! Вношу коррективы.

Тогда следующий назревший вопрос ... Допустим, что на шине данных всегда DD, то есть префикс для IX, то есть вообще всегда, чисто теоретически вся память без исключения заполнена значением DD, произойдёт ли прерывание ?

DDp
08.11.2013, 20:55
Допустим, что на шине данных всегда DD, то есть префикс для IX, то есть вообще всегда, чисто теоретически вся память без исключения заполнена значением DD, произойдёт ли прерывание ?
http://zx.pk.ru/showpost.php?p=119374&postcount=27

Robus
08.11.2013, 21:17
http://zx.pk.ru/showpost.php?p=119374&postcount=27
Тут может быть продолжение экспериментов. У меня на моём Speccy, есть потенциометр, которым я могу регулировать длину INT'а. Самое длинное что могу накрутить это 900 тактов. Я как-то проводил такие испытания и точно помню, что если я накручивал длину инта меньше 21 такта, то при исполнении команды LDIR, я получал пропуски прерывания. Поэтому хотелось бы точно убедиться, что прерывания никогда не сработают, и причина будет не длина сигнала INT, а именно постоянный префикс.

---------- Post added at 19:17 ---------- Previous post was at 19:09 ----------


http://zx.pk.ru/showpost.php?p=119374&postcount=27
Прикол ... То есть сигнал INT процессором обрабатывается только перед началом T1? Ну или после последнего такта.

Странно, в описании нарисована диаграмма где длина INT'а вообще пол такта ... Что же тогда у меня к Speccy накручивалось ? Вроде точно помню, что длина INT'а.

Lion17
12.11.2013, 07:59
Прикол ... То есть сигнал INT процессором обрабатывается только перед началом T1? Ну или после последнего такта.

Странно, в описании нарисована диаграмма где длина INT'а вообще пол такта ... Что же тогда у меня к Speccy накручивалось ? Вроде точно помню, что длина INT'а.

Int проверяется во второй половине последнего такта инструкции.
В описании показана не длина Int, а период когда он имеет значение. В остальное время сигнал Int игнорируется.

Robus
18.11.2013, 17:56
Int проверяется во второй половине последнего такта инструкции.
Спасибо, уже делаю ...

Возник ещё один вопрос ...
1. В описании LDI имеет четыре опарации CBR(4);OCR(4);MRD(3);MWR(3), что в сумме даёт 14 тактов, а реально их-то 16. Это ошибка ???
2. В описании CPI стоит в той же группе что и LDI и имеет операцию MWR. Процессор реально генерит цикл записи при сравнении ? Эта запись происходит по адресу (HL) ???

SAM style
18.11.2013, 18:20
в LDI MWR занимает 5 тактов (4+4+3+5 = 16)

Robus
18.11.2013, 18:28
в LDI MWR занимает 5 тактов (4+4+3+5 = 16)
оО ... Спасибо ... А то я заложил как 4+4+4+4 ... Я так понимаю, что в реальности 4+4+3+3+2, по три такта на чтение и запись, и 2 такта на внутренние операции ?

SAM style
18.11.2013, 19:25
оО ... Спасибо ... А то я заложил как 4+4+4+4 ... Я так понимаю, что в реальности 4+4+3+3+2, по три такта на чтение и запись, и 2 такта на внутренние операции ?
Скорее всего, лишние такты тратятся на инкремент HL и DE, декремент BC и выставление флагов.

Robus
18.11.2013, 19:56
Скорее всего, лишние такты тратятся на инкремент HL и DE, декремент BC и выставление флагов
Да, я это понимаю, но мне важно в какой момент Z80 у себя внутри тратит эти такты. Мне важен момент на каком такте происходит запись и чтение, что бы в нужный момент на шине появились циклы записи и чтения.

С CPI так мне и не ясно ... Я заложил цикл записи по тому же адресу что и чтение, как написано в документации, но чувствую, что это не верно. Можно, конечно, наплевать, думаю, что никто не обратит внимание на подобную разницу, но всё же хотелось бы сделать в точности как в Z80.

krotan
13.02.2014, 01:47
Кто-нибудь знает, активируется ли сигнал RFSH процессора Z80 при чтении (записи) данных из памяти (не кода операции)? По даташиту непонятно, не изображён на диаграмме...
http://i57.fastpic.ru/big/2014/0213/22/70f1e06ff6bab78934beb9fca8844d22.gif

vlad
13.02.2014, 02:00
RFSH активизируется во время тактов Т3 и Т4 при извлечении кода операции в цикле М1.

krotan
13.02.2014, 02:07
А как же тогда предусмотрен рефреш памяти при выполнении длинных команд типа ldir ?

Titus
13.02.2014, 03:05
А как же тогда предусмотрен рефреш памяти при выполнении длинных команд типа ldir ?

Очевидно, ldir - это постоянное выполнение ED B0, с выборкой в каждом цикле.