2012-06-21 35 views
7

thể trùng lặp:
How do emulators work and how are they written?Làm cách nào để tìm hiểu cách viết trình mô phỏng bảng điều khiển?

Tôi muốn thử viết một giả lập gameboy cơ bản, hoặc thậm chí có thể NES. Tôi biết những điều cơ bản của C và tôi khá tốt ở Java, vì vậy tôi biết những điều cơ bản cần thiết của lập trình. Những gì tôi không biết mặc dù, là cách mọi người xử lý tất cả các dữ liệu vào một chương trình C và tạo ra một giả lập ra khỏi nó. Tôi biết tôi nên học từ nguồn, nhưng thật khó để thấy một loạt các dòng mã mà không biết tại sao họ lại ở đó và họ phải làm gì. Tôi bắt đầu từ đâu nếu tôi muốn học cách viết một trình giả lập như vậy?

Tôi đã tìm kiếm trên Internet, nhưng tôi chỉ tìm thấy các hướng dẫn không rõ ràng chứa quá nhiều lỗi để tự mình tìm ra. Tôi bắt đầu từ đâu?

+1

Tôi có một bộ sưu tập các mô phỏng http://github.com/dwelch67 Những gì bạn cần phải học đầu tiên là ngôn ngữ lắp ráp cho các cpu mục tiêu, sau đó làm việc trên một disassembler rằng disassembles nhằm thực hiện , tại một số điểm bạn chỉ có thể bắt đầu chuyển nó vào bộ mô phỏng lệnh. Sau đó, bạn phải làm giả lập cho tất cả các thiết bị ngoại vi. Vì vậy, bạn sẽ cần tài liệu tốt cho hệ thống mà bạn đang mô phỏng. –

+0

Cách tiếp cận khác là một trình dịch nhị phân tĩnh, SBT. http://www.dwelch.com/ipod/asteroids.htm là một trong những tôi đã làm cho ipod (cổ điển) Tôi có rất nhiều công việc trên đó một kể từ khi phát hành, không được xuất bản bất cứ nơi nào mặc dù. Một hướng dẫn tốt về chủ đề này. http://www.gtoal.com/sbt/ bạn cũng có thể thực hiện dịch năng động, dịch nhanh hơn là tĩnh. Tôi sẽ không cố gắng năng động cho đến khi bạn có thể làm tĩnh. –

Trả lời

6

Bạn không. Bạn mô phỏng HARDWARE. Bạn không cần phải "xử lý" dữ liệu chương trình chút nào, bạn sẽ cần phải viết mã bắt chước CPU, phần cứng đồ họa, thiết bị đầu vào, v.v.

Bước đầu tiên có thể là viết chữ Z Giả lập máy, mà trong khi không phải là một giao diện điều khiển, nó thực sự là "trình giả lập" phổ biến đầu tiên. Nó được sử dụng cho tất cả các cuộc phiêu lưu văn bản Infocom (zork, vv). Vì đó là định dạng trò chơi theo định dạng văn bản, không có nhiều điều để mô phỏng về đồ họa hoặc âm thanh, thiết bị đầu vào duy nhất là bàn phím và bạn không phải lo lắng về tốc độ/đồng bộ hóa thực thi.

Nó rất tốt tài liệu ở đây: http://www.gnelson.demon.co.uk/zspec/preface.html

Nó thực sự là một dự án tôi có nghĩa là để thực hiện bản thân mình là một trong những ngày này, chỉ chưa bao giờ khá tìm thấy thời điểm đó.

+0

Một điều mà tôi đã luôn luôn tự hỏi là nơi chính xác người ta tìm thấy các thông số kỹ thuật cho một hệ thống cụ thể. Một số hệ thống, như bạn đã đề cập, có tài liệu rất tốt, nhưng còn về một dự án như [Dolphin Emu] (http://dolphin-emulator.com/) thì sao? Nintendo có thực sự phát hành kiến ​​trúc giao diện điều khiển của họ cho mọi người xem không? – voithos

+0

Rất nhiều công việc khó khăn và kỹ thuật đảo ngược. Đôi khi bắt đầu từ ví dụ: pinouts trên chip, đôi khi đi xa như gắn bó đầu dò trên phần cứng thực tế trong khi hệ thống đang hoạt động. –

1

Bạn có thể bắt đầu bằng cách thu thập thông tin về phần cứng bạn muốn mô phỏng. CPU có lẽ là phần lớn nhất, và dễ nhất có sẵn, do đó, đó là một điểm khởi đầu hợp lý.

Trình mô phỏng CPU về cơ bản đọc byte của chương trình, giải mã từng lệnh và thực thi chúng. Bạn thường phân bổ một mảng lớn để biểu diễn bộ nhớ của thiết bị và một số biến để biểu diễn thanh ghi của CPU. Bạn mô phỏng việc thực hiện các lệnh bằng cách thực hiện một thao tác tại một thời điểm trên các vị trí "sổ đăng ký"/bộ nhớ đó.

Bạn cũng sẽ phải tìm thông tin về I/O trên thiết bị bạn đang cố gắng mô phỏng - ví dụ: cổng hoặc vị trí bộ nhớ đại diện cho đầu vào từ các nút cụ thể, địa chỉ đại diện cho màn hình, v.v. một thiết bị mới hơn (nhưng thường không phải hầu hết các thiết bị cũ), bạn sẽ có một bộ xử lý đồ họa riêng biệt mà bạn cần để mô phỏng. Bạn sẽ không chỉ cần mô phỏng chính bộ xử lý đó mà còn phải kết nối với CPU chính như thế nào.

1

Trình mô phỏng bảng điều khiển là một dự án thực sự lớn, và tôi dự đoán nó sẽ không có nhiều niềm vui cho hầu hết các dự án; bạn phải nhận được nội dung ngay trước khi bất kỳ trò chơi nào thậm chí sẽ bắt đầu chạy.

Có thể sẽ thú vị hơn khi tìm một dự án nguồn mở hiện có đang cố gắng mô phỏng một bảng điều khiển và xem bạn có thể tìm bất kỳ cách nào để cải thiện nó hay không.

Nhưng nếu bạn chỉ tìm kiếm một dự án rất giáo dục, tôi có một gợi ý khác: viết trình thông dịch Scheme của riêng bạn, hoặc viết thông dịch viên FORTH của riêng bạn. Cả hai đều là các ngôn ngữ tối thiểu, thanh lịch (và cả hai đều có các quy tắc cú pháp không chính thống!).Bạn có thể viết Đề án của riêng bạn hoặc FORTH từ đầu và chạy chương trình trong một vài ngày.

Đây không phải là đồ chơi và viết chúng sẽ mang tính giáo dục.

Chỉ cần tưởng tượng: nhận được một bản sao của SICP [1] và chạy các chương trình trong hệ thống bạn đã tự viết! Hoặc nhận được một bản sao của một cuốn sách FORTH và làm các vấn đề trên một hệ thống bạn đã viết cho mình!

Nếu bạn quan tâm đến các dự án này, Google tìm kiếm "viết một trình thông dịch Scheme" và/hoặc "viết một thông dịch viên FORTH".

P.S. Khi tôi lần đầu tiên bắt đầu với máy tính, tôi đã dành rất nhiều thời gian hack xung quanh trong FORTH, và nó đã dạy tôi rất nhiều. Những bài học tôi học được từ đó đã giúp tôi qua nhiều năm.

[1] http://sicpebook.wordpress.com/

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