2010-07-08 35 views
5

Trước, tôi xin lỗi vì sự kết thúc cởi mở và sự mơ hồ chung chung của câu hỏi này, bởi vì thành thật mà biết được chủ đề của tôi rất khó khăn và tôi thấy khó thậm chí mô tả vấn đề của tôi. Tôi thực sự không muốn đăng bài, nhưng tôi hoàn toàn bị mắc kẹt hoàn toàn.Lý thuyết mô phỏng NES cơ bản - Tôi bị kẹt

Tôi đã bắt đầu trình mô phỏng NES. Nó được giải thích (do đó không có recomp động).

Atm nó có thể tải và bản đồ roms (mapper 0 roms) và thực thi mã init ngay đến nơi tôi phải đối phó với ngắt và PPU. Đó là nơi tôi bị mắc kẹt.

Dưới đây là ví dụ về đầu ra từ emu của tôi. Thực hiện bắt đầu từ 8000, và tôi nhấn một vòng lặp vô hạn tại 800a, nơi tôi không có ý tưởng làm thế nào để tiến bộ từ đó.

8002: LDA #$10 ; read immediate value to set PPU control registers 
8004: STA $2000 ; store value 
8007: LDX #$FF ; load immediate value into X register 
8009: TXS   ; store X register into stack 
800a: LDA $2002 ; read PPU flags into accumulator (set N flag based on bit 7) 
800d: BPL   ; test N flag, branch to 800a if not positive, (N is set) 
800a: LDA $2002 
800d: BPL 
800a: LDA $2002 
800d: BPL 
800a: LDA $2002 
800d: BPL 
etc, etc etc (inf loop) 

Vì vậy, câu hỏi của tôi là, có thể ai đó hãy giải thích những điều cơ bản trong tổng số 1 lặp thông qua một PPU làm cho tôi, bao gồm những thứ như tính chu kỳ, ngắt vv (tức là vẽ cả một màn hình 240 scanline và chuyển sang kế tiếp).

+0

Ta để thêm một thẻ 6502 –

+1

đăng tại http://nesdev.parodius.com/ sẽ cho bạn kết quả xa, nhanh hơn và tốt hơn SO. Đó chỉ là cách nó dành cho các chủ đề thích hợp. –

+0

Tôi đã đăng ở đó, nhưng 5 ngày sau, tôi có 1 câu trả lời, và về cơ bản là đọc tài liệu (tôi có 100 lần, nhưng tôi vẫn còn chút bối rối). –

Trả lời

0

Có các trình giả lập trên mạng, bạn đã xem nguồn của họ để tìm câu trả lời chưa? thường những người được viết cho hiệu suất và không phải là rất dễ đọc nhưng bạn có thể tìm thấy một miếng ngon để giúp bạn đi. là mã chờ đợi cho một ngắt được thực hiện và bạn đã thực hiện mà gián đoạn? Có thể là ngắt làm thay đổi địa chỉ trả về và cho phép chương trình tiếp tục? là vòng lặp vô hạn bỏ phiếu một chút trong sổ đăng ký? hoặc nó là một nhánh vô điều kiện cho bản thân?

+0

Vấn đề là tôi không có xử lý ngắt. Tôi theo nghĩa đen lấy các opcodes từ bản đồ bộ nhớ, thực hiện chúng, và tăng truy cập. Đó là tất cả hoạt động tốt. Tôi đang mắc kẹt khi nói đến sự hiểu biết các chu kỳ CPU và nó liên quan đến vòng lặp chính. Tôi chỉ đang tìm một số mã giả cơ bản liên quan đến cách trình giả lập xử lý. –

+0

Bạn có chắc chắn nó không phải là gián đoạn không? Chắc chắn với video rendering và vì lý do khác sẽ có một phần cứng gián đoạn nhiệm vụ forground đang chờ đợi, các thói quen ngắt đặt một vị trí bộ nhớ hoặc trong trường hợp này chờ đợi cho một lá cờ? Tôi đã vật lộn với một vòng lặp vô hạn tương tự cho các Tiểu hành tinh cho đến khi tôi hiểu được cách mà tất cả đều hoạt động. Nếu không, tôi cần thêm thông tin về vấn đề này để trợ giúp. –

+0

Cảm ơn bạn đời. Tôi đã sắp xếp nó ra. LOL @ câu hỏi này - đã rất bối rối khi tôi viết nó. –

Các vấn đề liên quan