Biểu đồ thời gian Zilog giữ câu trả lời cho câu hỏi của bạn.
Làm mới xảy ra trong T3 và T4 của tất cả các chu kỳ M1 (tìm nạp mã).
Trong trường hợp chỉ dẫn một mã opcode, đó là một lần làm mới cho mỗi lệnh. Đối với các hướng dẫn tiền tố đơn (tiền tố được đọc bằng các chu kỳ M1), đó là hai lần làm mới cho mỗi lệnh.
Đối với những lệnh DD-CB-disp-opcode và FD-CB-disp-opcode lạ kỳ lạ (kỳ lạ vì byte dịch chuyển đến trước opcode cuối cùng thay vì sau), số lần làm mới ít nhất 3 (cho hai tiền tố và opcode cuối cùng), nhưng tôi không chắc chắn nếu byte chuyển được đọc như là một phần của chu trình M1 (sẽ kích hoạt làm mới khác) hoặc chu kỳ đọc bộ nhớ thông thường (không làm mới). Tôi có xu hướng tin rằng byte dịch chuyển được đọc trong một chu kỳ M1 cho các hướng dẫn này, nhưng tôi không chắc chắn. Tôi hỏi Sean Young về điều này; anh cũng không chắc. Có ai biết chắc chắn không?
UPDATE:
Tôi đã trả lời câu hỏi của riêng tôi lại những hướng dẫn DD-CB-disp-opcode và FD-CB-disp-opcode lạ. Nếu bạn kiểm tra tài liệu của Zilog về các lệnh loại này, chẳng hạn như RLC (IX + d), bạn sẽ lưu ý rằng lệnh yêu cầu 6 chu trình M và 23 chu kỳ T được chia nhỏ thành: (4,4,3,5, 4,3).
Chúng tôi biết hai chu kỳ M đầu tiên là các chu kỳ M1 để tìm nạp tiền tố DD và CB (4 T-chu kỳ mỗi). Chu kỳ M tiếp theo đọc byte dịch chuyển d. Nhưng chu trình M đó chỉ sử dụng 3 chu trình T, không phải 4, vì vậy nó không thể là một chu kỳ M1; thay vào đó là một chu kỳ đọc bộ nhớ bình thường.
Đây là sự phân hủy của các RLC (IX + d) sáu M-chu kỳ chỉ dẫn của:
- M1 chu kỳ để đọc các tiền tố 0xDD (4 T-chu kỳ)
- chu kỳ M1 để đọc các tiền tố 0xCB (4 T-chu kỳ)
- Memory đọc chu kỳ để đọc các byte chuyển (3 T-chu kỳ)
- chu kỳ M1 để lấy opcode 0x06 và tải IX vào ALU (5 T-chu kỳ)
- Memory đọc chu kỳ để tính toán và đọc từ địa chỉ IX + d (4 T-cy Cles)
- Memory Write chu kỳ để tính toán RLC và viết kết quả để giải quyết IX + d (3 T-chu kỳ)
(Việc tính toán RLC chồng chéo M-chu kỳ 5 và 6.)
Những hướng dẫn loại là duy nhất ở chỗ chúng là các chỉ dẫn Z80 duy nhất có chu kỳ M1 không tiếp giáp (M-chu kỳ 1, 2 và 4 ở trên). Chúng cũng chậm nhất!
Paul
Tôi nghĩ rằng lệnh CPDR sẽ tăng thanh ghi nhớ làm mới bộ nhớ không một lần, cũng không hai lần, nhưng nhiều lần vì nó sẽ được lặp lại, vì nó là lệnh lặp lại. (Và tôi nghi ngờ rằng bộ nhớ đã được dự kiến sẽ đi mà không cần làm mới cho toàn bộ thời gian của các hướng dẫn lặp lại.) –