2009-08-01 29 views
12

Tôi muốn quan tâm đến việc viết trình giả lập đơn giản của riêng mình cho bộ xử lý Z80. Tôi không có kinh nghiệm với loại lập trình này. Tôi chủ yếu sử dụng các ngôn ngữ dựa trên C vì chúng là những thứ tôi biết rõ nhất.Viết bộ mô phỏng đồ họa Z80 trong C hoặc C++

Tôi cần gì để thực hiện điều này và một số hướng dẫn/tham khảo tốt có thể hỗ trợ tôi trong dự án này là gì?

Tôi cũng muốn hướng dẫn viết mã ứng dụng bán phá giá ROM cho máy tính TI-84 Plus của mình để tôi có thể sử dụng ROM của nó bằng trình mô phỏng này.

+2

Z80 thật tuyệt vời !! – MadH

Trả lời

5

Mitch hoàn toàn chính xác. Bắt đầu bằng cách hiểu bộ vi xử lý. Sau đó, chơi xung quanh một chút bằng cách viết mã để thực hiện các hướng dẫn cụ thể. Sử dụng C++ cho điều này, BTW, không phải C, hoặc các khái niệm của bộ vi xử lý sẽ không ánh xạ tới các lớp trong mã của bạn.

Trong quá trình thực hiện hướng dẫn, bạn sẽ thấy bạn cần xác định những thứ như cờ và con trỏ chỉ dẫn. Điều đó cuối cùng sẽ đưa bạn đến nơi bạn cần để thực hiện mô hình bộ nhớ, và thậm chí cả mô hình I/O.

Cuối cùng bạn sẽ phải tìm ra cách tải mã và dữ liệu vào bộ nhớ, và có thể cách đưa nó trở lại đĩa.

Chỉ sau đó bạn mới cần đến điểm mô phỏng thực thi mã, được nạp vào bộ nhớ, tại một con trỏ chỉ dẫn đã cho.

+0

Tôi cũng muốn cảm ơn lời khuyên của bạn. –

16

Đó là một chút của một chuyến đi phụ, nhưng vì bạn nói bạn không có kinh nghiệm với loại lập trình này, bạn có thể muốn bắt đầu bằng cách xây dựng trình mô phỏng cho số Universal Virtual Machine từ 2006 ICFP programming contest. Đây là một nhiệm vụ mất một lập trình viên có kinh nghiệm 90   phút, nhưng nhiều nhóm không có kinh nghiệm có thể hoàn thành nó trong một vài ngày. Khi bạn hoàn thành trình giả lập nó sẽ mở ra một loạt các công cụ thú vị, và nó có thể là một sự khởi động tốt trước khi bạn giải quyết Z80.

+0

+1 Cảm ơn bạn đã liên kết cuộc thi. – AraK

+4

+1 cho liên kết cuộc thi! – TarkaDaal

3

Bạn dường như muốn trình giả lập hơn một bộ xử lý, nhưng đối với một máy hoàn chỉnh. Bạn cũng sẽ có nhiệm vụ mô phỏng phần còn lại của phần cứng và tìm tài liệu cho điều đó cũng có thể là nhiệm vụ khó khăn hơn đang chờ bạn.

Tùy thuộc vào mục tiêu của bạn, bạn có thể muốn bắt đầu với trình giả lập đã có cho Z80. Một tìm kiếm nhanh cho nhiều người trong số họ nhưng không giả lập cho TI-84. simh, một khuôn khổ cho mô phỏng máy tính cũ đã có mô phỏng một bộ xử lý Z80, việc thêm mô phỏng phần còn lại của phần cứng của bạn sẽ dễ dàng hơn là bắt đầu từ đầu. Ngay cả khi bạn không đi trên con đường đó, có một số tài liệu thiết kế ở đó có thể giúp bạn.

3

Tôi khuyên bạn nên xem xét bắt đầu bằng cách viết trình mô phỏng cho CPU đơn giản hơn một chút nhưng có liên quan, 8080. Z80 thực sự khá phức tạp (hướng dẫn nhiều byte, nhiều chế độ địa chỉ, thanh ghi chỉ mục, v.v.), trong khi 8080 hướng dẫn rất dễ giải mã (bạn chỉ có thể sử dụng bảng tra cứu 256 mục, làm giải pháp đặt hàng đầu tiên).

Tất cả mã bạn viết để điều khiển chương trình (hiển thị, nhập dữ liệu, lưu bộ nhớ, v.v.) có thể sử dụng được nếu bạn quyết định tiếp tục thử Z80 và thực sự bạn nên thiết kế giao diện người dùng được mô phỏng độc lập với bộ xử lý.

+1

Tôi không đồng ý về việc giải mã.Hướng dẫn Z80 dễ dàng được giải mã, chia chúng thành các trường bit {2, 3, 3}. Tôi đã làm xong. –

+0

Z80 có cả hai byte đơn và hai byte opcodes (ngoại trừ thông tin eddress). Các 8080 (mà chỉ có opcode byte đơn) do đó dễ dàng giải mã. Ngoài ra, số lượng các chế độ địa chỉ bạn cần xử lý nhỏ hơn trên 8080. Vì vậy, việc viết trình mô phỏng 8080 dễ dàng hơn. Tôi đã viết cả hai, BTW. –

8

Một số điều cần thêm (đặc biệt đối với Z80):

  1. Đừng tin tưởng vào tài liệu là 100 % lỗi miễn phí

    Tôi chưa thấy bất kỳ lỗi nào, kể cả những lỗi được đề cập ở đây.

  2. thử nghiệm lõi CPU của bạn cho các lỗi đúng

    Nó sẽ giúp bạn tiết kiệm từ nhiều nhức đầu và nhầm lẫn về sau.

Để thử nghiệm Tôi đang sử dụng ba phương pháp:

  1. Stepping/tracing chống lại các mã được biết đến (thường nhận xét tháo gỡ ROM)

    Đó là bước đầu tiên khi không có gì làm việc chưa . Bạn sẽ thấy các hướng dẫn được mã hóa (de).

  2. Bao gồm lõi Z80 khác nhau trong giả lập của bạn và xử lý tất cả mọi thứ như thi đua đôi

    Làm cho hai giả lập 'tách' với stepping cùng, truy tìm, và hệ thống chạy. Cả hai CPU nên có phần cứng bộ nhớ riêng của nó, vv

    My dual emulator example

    • Chạy giả lập và sau mỗi câu lệnh so sánh thanh ghi và bộ nhớ vị trí ngay lập tức như [hl],[sp],[sp-1] ...
    • Tại điểm dừng chân khác biệt đầu tiên và xem những gì hướng dẫn gây ra nó.
      Gỡ lỗi và tiếp tục cho đến khi bạn 'không có lỗi'. Cẩn thận với lõi thứ hai cũng có thể được lỗi để gỡ lỗi cẩn thận.
  3. Khi bạn có nhiều run-thể sử dụng lõi thử

    Sử dụng ZEXALL Exerciser. Nó là tốt nhất trên Z80 (ít nhất là từ kinh nghiệm của tôi).Nó đã giúp tôi với rất nhiều thứ (cốt lõi của tôi bây giờ là 100% ZEXALL tương thích). Nó được thực hiện chống lại phần cứng thực sự vì vậy không có lỗi trong đó. Đó là từ CP/M vì vậy một số phiên bản cần chế độ RAM 64K để chạy. Khác nhau OS/ROM hoặc bất kỳ điều gì có thể khiến một số hướng dẫn có quyền truy cập bộ nhớ bị lỗi, vì vậy đối với những người bạn cần tìm CRC đã sửa hoặc so sánh với phần cứng thực.

    Ví dụ, liệu ZEXALL thất bại nhiều điều về ZX Spectrum (vì nó được thực hiện cho MSX64K RAM mà không ROM), nhưng có một phiên bản làm cho thực ZX Spectrum và họ là 100% OK trên ZX Spectrum (và trên giả lập của tôi quá :))

    Z80all instruction exerciser 
    
    <adc,sbc> hl,<bc,de,hl,sp>...OK 
    add hl,<bc,de,hl,sp>.........OK 
    add ix,<bc,de,ix,sp>.........OK 
    add iy,<bc,de,iy,sp>.........OK 
    aluop a,nn...................OK 
    aluop a,<b,c,d,e,h,l,(hl),a>.OK 
    aluop a,<ixh,ixl,iyh,iyl>....OK 
    aluop a,(<ix,iy>+1)..........OK 
    bit n,(<ix,iy>+1)............OK 
    bit n,<b,c,d,e,h,l,(hl),a>...OK 
    cpd<r>.......................OK 
    cpi<r>.......................OK 
    <daa,cpl,scf,ccf>............OK 
    <inc,dec> a..................OK 
    <inc,dec> b..................OK 
    <inc,dec> bc.................OK 
    <inc,dec> c..................OK 
    <inc,dec> d..................OK 
    <inc,dec> de.................OK 
    <inc,dec> e..................OK 
    <inc,dec> h..................OK 
    <inc,dec> hl.................OK 
    <inc,dec> ix.................OK 
    <inc,dec> iy.................OK 
    <inc,dec> l..................OK 
    <inc,dec> (hl)...............OK 
    <inc,dec> sp.................OK 
    <inc,dec> (<ix,iy>+1)........OK 
    <inc,dec> ixh................OK 
    <inc,dec> ixl................OK 
    <inc,dec> iyh...............OK 
    <inc,dec> iyl................OK 
    ld <bc,de>,(nnnn)............OK 
    ld hl,(nnnn).................OK 
    ld sp,(nnnn).................OK 
    ld <ix,iy>,(nnnn)............OK 
    ld (nnnn),<bc,de>............OK 
    ld (nnnn),hl.................OK 
    ld (nnnn),sp.................OK 
    ld (nnnn),<ix,iy>............OK 
    ld <bc,de,hl,sp>,nnnn........OK 
    ld <ix,iy>,nnnn..............OK 
    ld a,<(bc),(de)>.............OK 
    ld <b,c,d,e,h,l,(hl),a>,nn...OK 
    ld (<ix,iy>+1),nn............OK 
    ld <b,c,d,e>,(<ix,iy>+1).....OK 
    ld <h,l>,(<ix,iy>+1).........OK 
    ld a,(<ix,iy>+1).............OK 
    ld <ixh,ixl,iyh,iyl>,nn......OK 
    ld <bcdehla>,<bcdehla>.......OK 
    ld <bcdexya>,<bcdexya>.......OK 
    ld a,(nnnn)/ld (nnnn),a....OK 
    ldd<r> (1)...................OK 
    ldd<r> (2)...................OK 
    ldi<r> (1)...................OK 
    ldi<r> (2)...................OK 
    neg..........................OK 
    <rrd,rld>....................OK 
    <rlca,rrca,rla,rra>..........OK 
    shf/rot (<ix,iy>+1)..........OK 
    shf/rot <b,c,d,e,h,l,(hl),a>.OK 
    <set,res> n,<bcdehl(hl)a>....OK 
    <set,res> n,(<ix,iy>+1)......OK 
    ld (<ix,iy>+1),<b,c,d,e>.....OK 
    ld (<ix,iy>+1),<h,l>.........OK 
    ld (<ix,iy>+1),a.............OK 
    ld (<bc,de>),a...............OK 
    Tests complete 
    

    Trong trường hợp bạn muốn sử dụng ZEXALL hãy cẩn thận đó là thử nghiệm thực sự đầy đủ và IIRC trên ~ 50MHz thi đua phải mất khoảng 30-60 phút để hoàn thành. Và nó cần phải nhấn một phím để cuộn vài lần ...

    Nếu bạn cần một mô hình tranh chấp, hãy thêm các kiểm tra thích hợp. Sau đó tìm một. Đối với ZX Spectrum có rất nhiều trình kiểm tra bus, ngắt và màn hình nổi. Đối với TI Tôi không có ý tưởng ... (Tôi không phải là TI sử dụng tính)

BTW: Làm thế nào mà nó đi với giả lập của bạn? (Bạn đã làm được điều đó?)

Hướng dẫn thiết lập

tôi sẽ sao chép hướng dẫn của tôi đặt ở đây nhưng nó có 1792 dòng và 121   KB vì vậy nó sẽ không phù hợp với một giới hạn KB 30  . Thay vào đó, bạn có thể tìm thấy liên kết tải xuống trong câu trả lời này của tôi

Nó chứa 'tất cả' ZX hướng dẫn với đúng OP mã, mã hóa thời gian và chu kỳ máy. Tôi mất vài năm để tập hợp tất cả các tài liệu, vì vậy tôi đang chuyển ZEXALL 100% chính xác. Trình mô phỏng của tôi tải tập tin văn bản (1792 hướng dẫn) này lên lõi trên init và định cấu hình bộ giải mã và bộ xử lý lúc chạy, vì vậy tôi có thể thay đổi mọi thứ thực sự nhanh chóng và đơn giản (nếu phát hiện lỗi) ... a thời gian.

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