Mục lục:

Máy tính tối thiểu 6502 (với Arduino MEGA) Phần 1: 7 bước
Máy tính tối thiểu 6502 (với Arduino MEGA) Phần 1: 7 bước

Video: Máy tính tối thiểu 6502 (với Arduino MEGA) Phần 1: 7 bước

Video: Máy tính tối thiểu 6502 (với Arduino MEGA) Phần 1: 7 bước
Video: Hướng dẫn lập trình Arduino phần 5 : Giới thiệu mạch arduino mega 2560 2024, Tháng mười một
Anonim
Máy tính tối thiểu 6502 (với Arduino MEGA) Phần 1
Máy tính tối thiểu 6502 (với Arduino MEGA) Phần 1

Bộ vi xử lý 6502 xuất hiện lần đầu tiên vào năm 1975 và được thiết kế bởi một nhóm nhỏ do Chuck Peddle dẫn đầu cho MOS Technology. Hồi đó nó được sử dụng trong máy chơi game và máy tính gia đình bao gồm Atari, Apple II, Nintendo Entertainment System, BBC Micro, Commodore VIC20 và 64. Vào thời điểm đó, nó là một trong những loại rẻ nhất trên thị trường. Nó chưa bao giờ thực sự biến mất và bây giờ nó được sử dụng bởi những người yêu thích và các chuyên gia cho nhiều ứng dụng.

Phiên bản tôi đang sử dụng là W65C02S6TPG-14 do Trung tâm Thiết kế Phương Tây sản xuất và sử dụng ít năng lượng hơn 10 lần so với phiên bản gốc. Nó đặc biệt ở chỗ nó không phải chạy ở tốc độ 1 MHz như chip gốc. Nó có thể chạy chậm hơn nhiều hoặc được sử dụng để thực hiện từng bước trong một chương trình và thậm chí còn được tăng tốc lên đến 14 MHz. Bảng dữ liệu cho chip giải thích các khả năng của nó. Các chip 6502 khác không có khả năng này và sẽ không chạy theo cách này. Các chip hiện đang có sẵn trên Ebay cũng như các nguồn khác.

Quân nhu

Tất cả các bộ phận được sử dụng hiện có sẵn trên Ebay, AliExpress và những nơi khác.

Bước 1: Khái niệm

Tôi lấy cảm hứng từ Ben Eater, người đã sản xuất một loạt video trên YouTube về 6502 và nhiều khía cạnh khác của việc xây dựng máy tính và vi mạch. Chương trình được viết bởi anh ấy ban đầu và tôi đã sửa đổi điều này và một số thiết kế của anh ấy để đưa ra chương trình Có thể hướng dẫn này. Một người khác đã truyền cảm hứng cho tôi là Andrew Jacobs, người có một phần trên GitHub, nơi anh ấy sử dụng một vi PIC để điều khiển chiếc 6502 của mình.

Giống như Ben, tôi đang sử dụng Arduino MEGA để theo dõi 6502. Tôi cũng đang sử dụng MEGA để cung cấp tín hiệu đồng hồ không giống như Ben. Hiện tại tôi cũng không sử dụng bất kỳ EEPROM hoặc RAM nào.

Bước 2: Yêu cầu

Yêu cầu
Yêu cầu

Để xây dựng "máy tính" này, một danh sách các mục như sau:

1 x Arduino MEGA

1 x Trung tâm thiết kế phương Tây W65C02S6TPG-14

1 x 74HC00N IC (4 cổng NAND 2 đầu vào) hoặc tương tự

1 x 74HC373N IC (chốt trong suốt kiểu bát phân D) hoặc tương tự

Bảng bánh mì 2 x 830 lỗ (1 cái ở chốt)

Nhiều loại Dupont nam - dây dẫn nam và dây liên kết

2 x đèn LED (Tôi đã sử dụng 5mm màu xanh lam vì bạn có thể tránh xa mà không có điện trở)

1 x 12mm Công tắc nút nhấn xúc giác tạm thời PCB được gắn SPST hoặc tương tự

1 x 1K điện trở

2 x 0,1 uF tụ gốm

1 x 8 Way Water Light Marquee 5mm LED màu đỏ (như trên) hoặc 8 đèn LED và điện trở

LƯU Ý: Nếu bạn nhận được bộ chưa bán được, bạn có thể lắp các đèn LED không đúng cách để chúng là cực âm chung. Tôi gắn một đầu ruồi (thay vì ghim) để nó có thể dễ dàng kết nối ở nơi khác. VCC bây giờ trở thành Ground. Tất nhiên, bạn có thể xoay đèn LED xung quanh (trên một mặt hàng đã lắp ráp) và hàn lại chúng, nhưng điều này rất rắc rối! Bộ dụng cụ hiện đang có sẵn trên AliExpress.

Bước 3: Kết hợp nó lại với nhau

Kết hợp nó lại với nhau
Kết hợp nó lại với nhau
Kết hợp nó lại với nhau
Kết hợp nó lại với nhau

Tôi thấy dễ dàng hơn khi sử dụng các dây DuPont mới chưa được tách khỏi dải băng của chúng cho các bus địa chỉ và dữ liệu.

Kết nối chân 9 (A0) của 6502 với chân 52 của MEGA, chân 10 (A1) của 6502 đến chân 50, v.v.

cho đến khi

Kết nối chân 25 (A15) của 6502 với chân 22 của MEGA.

16 kết nối cho đến nay.

Tương tự như vậy

Kết nối chân 26 (D7) của 6502 với chân 39 của MEGA, chân 27 (D6) của 6502 đến chân 41, v.v.

cho đến khi

Kết nối chân 33 (D0) của 6502 với chân 53 của MEGA.

8 kết nối nữa.

Kết nối chân 8 (VDD) với 5v trên MEGA.

Một tụ điện 0,1uF được kết nối từ chân 8 đến Gnd của bảng mạch bánh mì có thể hữu ích ở đây nhưng không cần thiết.

Kết nối chân 21 (VSS) với Gnd trên MEGA.

Các chân 2, 4, 6, 36 và 38 có thể được gắn với 5v

Kết nối chân 37 (Đồng hồ) với chân 2 và chân 7 của MEGA.

Kết nối chân 34 (RWB) với chân 3 của MEGA.

Kết nối chân 40 (Reset) như sơ đồ trên.

Bước 4: Kiểm tra mạch

Kiểm tra mạch
Kiểm tra mạch

Ở giai đoạn này, 6502 sẽ hoạt động và chương trình1 có thể được sử dụng. Nếu bạn đang sử dụng bảng điều khiển 8 cách (như trên), nó có thể được lắp thẳng vào breadboard và dây dẫn ruồi nối với mặt đất, hoặc bạn có thể sử dụng 8 đèn LED và điện trở. LEDS sẽ hiển thị những gì có trên bus dữ liệu.

Ở giai đoạn này, cũng nên đặt độ trễ trong Vòng lặp () thành 500 hoặc hơn, để theo dõi những gì đang xảy ra.

Bạn sẽ nhận được một đầu ra tương tự trên Serial Monitor như ở trên. Khi Reset được nhấn, bộ xử lý sẽ trải qua 7 chu kỳ và sau đó nó sẽ tìm kiếm điểm bắt đầu của chương trình ở các vị trí $ FFFC và $ FFFD. Vì không có địa chỉ vật lý nào để 6502 đọc, chúng tôi phải cung cấp chúng từ MEGA.

Trong kết quả đầu ra ở trên, 6502 đọc $ FFFC và $ FFFD và nhận được $ 00 và $ 10 (byte thấp, byte cao) là giá trị bắt đầu của chương trình ở mức $ 1000. Sau đó, bộ xử lý bắt đầu thực hiện chương trình tại vị trí $ 1000 (như trên). Trong trường hợp này, nó ghi $ A9 và $ 55, tức là LDA # $ 55 (Nạp 85 vào bộ tích lũy). Một lần nữa vì không có vị trí bộ nhớ vật lý, MEGA mô phỏng những gì được đọc từ bus dữ liệu.

$ 55 (85) cho dạng nhị phân 01010101 và khi xoay 1 bit sang trái cho $ AA (170) 10101010.

Chương trình cho thấy rằng bộ xử lý đang hoạt động chính xác nhưng sẽ sớm hơi nhàm chán, hãy chuyển sang phần tiếp theo.

Bước 5: Bước tiếp theo

Bước tiếp theo
Bước tiếp theo
Bước tiếp theo
Bước tiếp theo

"Một đống mì Ý" ở trên có lẽ là thứ giống như những gì bạn sẽ có sau công đoạn này.

Tiếp theo, bạn cần thêm các IC 74HC373N và 74HC00N vào breadboard.

Thật không may, các chân của 373 không thẳng hàng với bus dữ liệu, vì vậy sẽ cần phải được nối bằng dây.

Kết nối 5v với chân 20.

Kết nối đất với chân số 10.

Kết nối chân 33 (D0) của 6502 với chân 3 (D0) của 74HC373N

và tương tự như vậy với chân D1 đến D7.

Q0 đến Q7 là các đầu ra và những đầu ra này sẽ cần kết nối với đèn LED hoặc các đèn LED và điện trở riêng lẻ.

Với 74HC00 chỉ cần 2 cổng của nó

Kết nối 5v với chân 14.

Kết nối đất với chân số 7.

Kết nối chân 17 (A8) của 6502 với chân 1 (1A) của 74HC00

Kết nối chân 25 (A15) của 6502 với chân 2 (1B) của 74HC00

Kết nối chân 34 (R / W) của 6502 với chân 5 (2B) của 74HC00

Kết nối chân 3 (1Y) của 74HC00 với chân 4 (2A) của 74HC00

Kết nối chân 6 (2Y) của 74HC00 với chân 11 (LE) của 74HC373N

Kết nối chân 11 (LE) của 74HC373N với chân 1 (OE) của 74HC373N

Bạn có thể kết nối đèn LED màu xanh lam với 1Y và nối đất cũng như 2Y với đất, điều này sẽ cho biết khi nào cổng hoạt động.

Cuối cùng thay đổi dòng trong thủ tục onClock từ chương trình1 thành chương trình2

setDataPins (program2 [offset]);

Bước 6: Chương trình

Chương trình
Chương trình
Chương trình
Chương trình

Chương trình 6502-Monitor chứa hai quy trình 6502 được mô tả ở trên.

Chương trình vẫn đang được phát triển và còn một chút rắc rối.

Khi chạy chương trình2, độ trễ trong vòng lặp () có thể từ 50 trở xuống và thậm chí bị loại bỏ hoàn toàn. Nhận xét về các dòng Serial.print () cũng làm cho 6502 chạy nhanh hơn. Ngắt kết nối chân 1 (OE) của 373 khỏi chân 11 (LE) tạo ra các kết quả khác nhau. Ngắt kết nối chân 1 và chân 11 của 373 khỏi các cổng NAND cho phép bạn xem những gì đang có trên bus dữ liệu ở mỗi chu kỳ đồng hồ.

Bạn có thể cần buộc OE xuống đất thay vì để nó nổi vì 8 đường đầu ra bị vô hiệu hóa nếu chân này lên cao. Khi chân LE ở mức cao, các chân đầu ra giống như các đầu vào. Việc lấy chân LE ở mức thấp sẽ chốt các đầu ra, tức là nếu các chân đầu vào thay đổi, các đầu ra vẫn giữ nguyên.

Tôi đã cố gắng giữ chương trình càng đơn giản càng tốt để dễ hiểu hơn.

Thử nghiệm với độ trễ thời gian cho phép bạn theo dõi chính xác những gì 6502 đang làm.

Dưới đây là hai chương trình (cả hai đều chạy ở địa chỉ $ 1000) trong 6502 Assembler:

chương trình1

LDA # $ 55

NOP

ROL

STA $ 1010

JMP $ 1000

ROL xoay nội dung của bộ tích lũy sang trái một bit, có nghĩa là $ 55 bây giờ trở thành $ AA.

Trong mã máy (hex): A9 55 EA 2A 8D 10 10 4C 00 10

chương trình2

LDA # $ 01

STA $ 8100

ADC # $ 03

STA $ 8100

JMP $ 1005

Trong mã máy (hex): A9 01 8D 00 81 69 03 8D 00 81 4C 05 10

Trong chương trình2 bây giờ có một địa chỉ thực $ 8100, đó là nơi 74HC373 nằm trên bus địa chỉ.

tức là A15 của 6502 là 32768 ($ 8000) và A8 là 256 ($ 0100) = 33024 ($ 8100).

Vì vậy, khi 6502 ghi vào $ 8100 (STA $ 8100), R / W của 6502 thấp và dữ liệu trên bus dữ liệu 6502 được chốt khi 373 LE xuống thấp. Vì Cổng 74HC00 NAND, các tín hiệu bị đảo ngược.

Trong màn hình trên, bản in thứ hai đã tăng 3 (ADC # $ 03) - từ $ 7F lên $ 82.

Trong thực tế, hơn 2 dòng của bus địa chỉ sẽ được sử dụng cho vị trí cụ thể của 373. Vì đây là địa chỉ vật lý duy nhất trong số 65536 có thể, nên nó thể hiện cách hoạt động của bus địa chỉ. Bạn có thể thử nghiệm với các chân địa chỉ khác nhau và đặt nó ở một vị trí khác. Tất nhiên, bạn sẽ cần thay đổi toán hạng STA sang vị trí mới. ví dụ. Nếu bạn sử dụng dòng địa chỉ A15 và A9, địa chỉ sẽ là $ 8200 (32768 + 512).

Bước 7: Kết luận

Phần kết luận
Phần kết luận

Tôi đã cố gắng chứng minh việc thiết lập và chạy 6502 dễ dàng như thế nào.

Tôi không phải là chuyên gia trong lĩnh vực này vì vậy tôi hoan nghênh bất kỳ nhận xét hoặc thông tin mang tính xây dựng nào.

Chúng tôi hoan nghênh bạn phát triển điều này hơn nữa và tôi sẽ quan tâm đến những gì bạn đã làm được.

Tôi dự định thêm EEPROM, SRAM và 6522 vào dự án cũng như đưa nó lên bảng mạch dải trong tương lai.

Đề xuất: