Tôi đang lên kế hoạch tạo bộ mô phỏng Hệ thống Sega Master trong vài tháng tới, như một dự án sở thích trong Java (tôi biết nó không phải là ngôn ngữ tốt nhất cho điều này nhưng tôi thấy nó rất thoải mái khi làm việc, và với tư cách là người dùng thường xuyên của cả Windows và Linux, tôi nghĩ một ứng dụng đa nền tảng sẽ rất tuyệt vời). Câu hỏi của tôi liên quan đến đếm chu kỳ;Câu hỏi về độ chính xác đếm chu kỳ khi mô phỏng CPU
Tôi đã xem qua mã nguồn cho trình mô phỏng Z80 khác và cho các trình mô phỏng khác, và đặc biệt vòng lặp thực hiện thu hút tôi - khi nó được gọi, int được chuyển thành đối số (giả sử 1000 là một ví dụ). Bây giờ tôi nhận được rằng mỗi opcode mất một số chu kỳ khác nhau để thực hiện, và khi chúng được thực hiện, số chu kỳ được giảm đi từ con số tổng thể. Khi số chu kỳ còn lại là < = 0, vòng lặp thực thi sẽ kết thúc.
Câu hỏi của tôi là nhiều người trong số các trình giả lập này không tính đến thực tế là lệnh cuối cùng được thực thi có thể đẩy số chu kỳ đến giá trị âm - nghĩa là giữa các vòng lặp thực hiện, có thể kết thúc bằng , 1002 chu kỳ được thực hiện thay vì 1000. Điều này có ý nghĩa không? Một số trình giả lập giải thích điều này bằng cách bù vào vòng lặp thực hiện tiếp theo và một số giả định không - cách tiếp cận nào là tốt nhất? Cho phép tôi minh họa cho câu hỏi của mình vì tôi không đặc biệt giỏi khi đặt mình lên trên:
public void execute(int numOfCycles)
{ //this is an execution loop method, called with 1000.
while (numOfCycles > 0)
{
instruction = readInstruction();
switch (instruction)
{
case 0x40: dowhatever, then decrement numOfCycles by 5;
break;
//lets say for arguments sake this case is executed when numOfCycles is 3.
}
}
Sau khi kết thúc ví dụ lặp này, numOfCycles sẽ là -2. Điều này sẽ chỉ bao giờ là một sự thiếu chính xác nhỏ nhưng liệu nó có quan trọng trong kinh nghiệm của mọi người không? Tôi đánh giá cao sự hiểu biết của bất cứ ai về điều này. Tôi có kế hoạch để làm gián đoạn CPU sau mỗi khung như thế này có vẻ thích hợp, vì vậy 1000 chu kỳ là thấp tôi biết, đây chỉ là một ví dụ mặc dù.
Rất cám ơn, Phil
Cảm ơn :-) Tôi đã xem bài viết này cách đây vài ngày và đó là một bài đọc rất thú vị. Có vẻ như tôi có thể bỏ qua vấn đề này - đã cắt công việc của tôi nhưng nên vui vẻ! :-p – PhilPotter1987