สารบัญ:

6502 คอมพิวเตอร์ขั้นต่ำ (พร้อม Arduino MEGA) ส่วนที่ 1: 7 ขั้นตอน
6502 คอมพิวเตอร์ขั้นต่ำ (พร้อม Arduino MEGA) ส่วนที่ 1: 7 ขั้นตอน

วีดีโอ: 6502 คอมพิวเตอร์ขั้นต่ำ (พร้อม Arduino MEGA) ส่วนที่ 1: 7 ขั้นตอน

วีดีโอ: 6502 คอมพิวเตอร์ขั้นต่ำ (พร้อม Arduino MEGA) ส่วนที่ 1: 7 ขั้นตอน
วีดีโอ: Altair 8800micro (homebrew clone) part 1 2024, พฤศจิกายน
Anonim
6502 คอมพิวเตอร์ขนาดเล็ก (พร้อม Arduino MEGA) ตอนที่ 1
6502 คอมพิวเตอร์ขนาดเล็ก (พร้อม Arduino MEGA) ตอนที่ 1

ไมโครโปรเซสเซอร์ 6502 ปรากฏตัวครั้งแรกในปี 1975 และได้รับการออกแบบโดยทีมเล็กๆ ที่นำโดย Chuck Peddle สำหรับ MOS Technology ย้อนกลับไปตอนนั้น มันถูกใช้ในคอนโซลวิดีโอและคอมพิวเตอร์ที่บ้านรวมถึง Atari, Apple II, Nintendo Entertainment System, BBC Micro, Commodore VIC20 และ 64 ในเวลานั้นมันเป็นหนึ่งในราคาถูกที่สุดในตลาด มันไม่เคยหายไปจริง ๆ และตอนนี้มันถูกใช้โดยมือสมัครเล่นและมืออาชีพสำหรับการใช้งานมากมาย

รุ่นที่ฉันใช้คือ W65C02S6TPG-14 ซึ่งผลิตโดย Western Design Center และใช้พลังงานน้อยกว่ารุ่นเดิมสิบเท่า พิเศษตรงที่ไม่ต้องวิ่งที่ 1 MHz เหมือนชิปตัวเดิม มันสามารถทำงานช้ากว่ามากหรือใช้เป็นขั้นตอนเดียวผ่านโปรแกรมและเพิ่มขึ้นถึง 14 MHz เอกสารข้อมูลสำหรับชิปอธิบายความสามารถ ชิป 6502 อื่นๆ ไม่มีความสามารถนี้และจะไม่ทำงานในลักษณะนี้ ปัจจุบันชิปดังกล่าวมีอยู่ใน eBay และแหล่งอื่นๆ

เสบียง

ชิ้นส่วนทั้งหมดที่ใช้มีอยู่ใน Ebay, AliExpress และอื่นๆ

ขั้นตอนที่ 1: แนวคิด

ฉันได้รับแรงบันดาลใจจาก Ben Eater ผู้สร้างซีรีส์วิดีโอบน YouTube เกี่ยวกับ 6502 และแง่มุมอื่นๆ มากมายในการสร้างคอมพิวเตอร์และวงจร โปรแกรมเขียนโดยเขาในตอนแรกและฉันได้แก้ไขสิ่งนี้และการออกแบบบางส่วนของเขาเพื่อให้ได้คำแนะนำนี้ อีกคนที่เป็นแรงบันดาลใจให้ฉันคือ Andrew Jacobs ที่มีหัวข้อเกี่ยวกับ GitHub ซึ่งเขาใช้ไมโคร PIC เพื่อควบคุม 6502 ของเขา

เช่นเดียวกับ Ben ฉันใช้ Arduino MEGA เพื่อตรวจสอบ 6502 ฉันยังใช้ MEGA เพื่อให้สัญญาณนาฬิกาไม่เหมือน Ben ตอนนี้ฉันไม่ได้ใช้ EEPROM หรือ RAM เลย

ขั้นตอนที่ 2: ข้อกำหนด

ความต้องการ
ความต้องการ

ในการสร้าง "คอมพิวเตอร์" นี้ รายการมีดังนี้:

1 x Arduino MEGA

1 x Western Design Center W65C02S6TPG-14

1 x 74HC00N IC (เกท NAND แบบ Quad 2-input) หรือใกล้เคียง

1 x 74HC373N IC (สลักโปร่งใสชนิด Octal D) หรือคล้ายกัน

กระดานขนมปังรู 2 x 830 (1 ที่หยิก)

ดูปองท์ ตัวผู้ - ตัวผู้และสายเชื่อมโยงต่างๆ

ไฟ LED 2 ดวง (ฉันใช้สีน้ำเงิน 5 มม. เพราะคุณสามารถหลีกเลี่ยงได้โดยไม่มีตัวต้านทาน)

1 x 12mm Momentary Tactile Push Button Switch PCB Mounted SPST หรือใกล้เคียง

ตัวต้านทาน 1 x 1K

ตัวเก็บประจุเซรามิก 2 x 0.1 uF

1 x 8 Way Water Light Marquee 5mm LED สีแดง (ด้านบน) หรือ 8 LEDs และตัวต้านทาน

หมายเหตุ: หากคุณได้รับชุดอุปกรณ์ที่ยังไม่ได้ขาย คุณสามารถเสียบ LED ผิดทางเพื่อให้เป็นแคโทดทั่วไป ฉันติดสายจูง (แทนหมุด) เพื่อให้สามารถเชื่อมต่อกับที่อื่นได้ง่าย VCC ตอนนี้กลายเป็น Ground แน่นอนคุณสามารถหมุน LED ไปรอบๆ (บนสินค้าที่ประกอบแล้ว) และบัดกรีใหม่ได้ แต่นี่เป็นเรื่องเหลวไหลมาก! ปัจจุบันมีชุดอุปกรณ์ใน AliExpress

ขั้นตอนที่ 3: นำมันมารวมกัน

เอามารวมกัน
เอามารวมกัน
เอามารวมกัน
เอามารวมกัน

ฉันพบว่ามันง่ายกว่าที่จะใช้สายของดูปองท์ใหม่ที่ไม่ได้แยกออกจากริบบอนสำหรับแอดเดรสและบัสข้อมูล

ต่อพิน 9 (A0) ของ 6502 เข้ากับพิน 52 ของ MEGA

พิน 10 (A1) ของ 6502 ถึงพิน 50 ฯลฯ …

จนกระทั่ง

ต่อพิน 25 (A15) ของ 6502 เข้ากับพิน 22 ของ MEGA

การเชื่อมต่อ 16 ครั้ง

เช่นเดียวกัน

ต่อพิน 26 (D7) ของ 6502 เข้ากับพิน 39 ของ MEGA

พิน 27 (D6) ของ 6502 ถึงพิน 41 ฯลฯ …

จนกระทั่ง

ต่อพิน 33 (D0) ของ 6502 เข้ากับพิน 53 ของ MEGA

8 การเชื่อมต่อเพิ่มเติม

เชื่อมต่อพิน 8 (VDD) กับ 5v บน MEGA

ตัวเก็บประจุ 0.1uF ที่เชื่อมต่อจากพิน 8 ถึง Gnd ของบอร์ดขนมปังอาจมีประโยชน์ที่นี่ แต่ไม่จำเป็น

เชื่อมต่อพิน 21 (VSS) กับ Gnd บน MEGA

พิน 2, 4, 6, 36 และ 38 สามารถผูกกับ 5v

ต่อพิน 37 (นาฬิกา) กับพิน 2 และพิน 7 ของ MEGA

เชื่อมต่อพิน 34 (RWB) กับพิน 3 ของ MEGA

เชื่อมต่อพิน 40 (รีเซ็ต) ตามไดอะแกรมด้านบน

ขั้นตอนที่ 4: ทดสอบวงจร

การทดสอบวงจร
การทดสอบวงจร

ในขั้นตอนนี้ 6502 จะทำงานและสามารถใช้โปรแกรม 1 ได้ หากคุณใช้กระโจม 8 ทาง (ดังที่กล่าวข้างต้น) คุณสามารถเสียบเข้ากับเขียงหั่นขนมและสายตรงที่เชื่อมต่อกับกราวด์ หรือคุณสามารถใช้ LED และตัวต้านทาน 8 ตัว ไฟ LED จะแสดงสิ่งที่อยู่บนบัสข้อมูล

ในขั้นตอนนี้ จะเป็นการดีเช่นกันที่จะตั้งค่าการหน่วงเวลาใน Loop() เป็น 500 หรือมากกว่า เพื่อติดตามสิ่งที่เกิดขึ้น

คุณควรได้ผลลัพธ์ที่คล้ายกันบน Serial Monitor เช่นเดียวกับด้านบน เมื่อกดรีเซ็ต โปรเซสเซอร์จะผ่านไป 7 รอบ จากนั้นจะมองหาการเริ่มต้นโปรแกรมในตำแหน่ง $FFFC และ $FFFD เนื่องจากไม่มีที่อยู่จริงสำหรับ 6502 ในการอ่าน เราจึงต้องจัดหาจาก MEGA

ในผลลัพธ์ข้างต้น 6502 อ่านค่า $FFFC และ $FFFD และรับ $00 และ $10 (Low byte, High byte) ซึ่งเป็นจุดเริ่มต้นของโปรแกรมที่ $1000 จากนั้นโปรเซสเซอร์จะเริ่มรันโปรแกรมที่ตำแหน่ง $1,000 (ดังด้านบน) ในกรณีนี้คือ $A9 และ $55 นั่นคือ LDA#$55 (โหลด 85 ลงในตัวสะสม) อีกครั้งเนื่องจากไม่มีตำแหน่งหน่วยความจำกายภาพ MEGA จะจำลองสิ่งที่อ่านจากบัสข้อมูล

$55 (85) ให้รูปแบบไบนารี 01010101 และเมื่อหมุนไปทางซ้าย 1 บิต จะให้ $AA (170) 10101010

โปรแกรมแสดงให้เห็นว่าโปรเซสเซอร์ทำงานอย่างถูกต้อง แต่ในไม่ช้าก็จะน่าเบื่อเล็กน้อย ดังนั้นในตอนต่อไป

ขั้นตอนที่ 5: ขั้นตอนต่อไป

ขั้นตอนต่อไป
ขั้นตอนต่อไป
ขั้นตอนต่อไป
ขั้นตอนต่อไป

"ปาเก็ตตี้กอง" ข้างบนนี้น่าจะประมาณนี้ค่ะ

ถัดไป คุณต้องเพิ่มไอซี 74HC373N และ 74HC00N ลงในเขียงหั่นขนม

น่าเสียดายที่หมุดของ 373 นั้นไม่อยู่ในแนวเดียวกับดาต้าบัส ดังนั้นจะต้องต่อสายไฟ

เชื่อมต่อ 5v กับพิน 20

เชื่อมต่อกราวด์กับพิน 10

ต่อพิน 33 (D0) ของ 6502 เข้ากับพิน 3 (D0) ของ 74HC373N

และเช่นเดียวกันกับหมุด D1 ถึง D7

Q0 ถึง Q7 คือเอาต์พุต และสิ่งเหล่านี้จะต้องเชื่อมต่อกับ LED Marquee หรือ LED และตัวต้านทานแต่ละตัว

ด้วย 74HC00 จำเป็นต้องมีเพียง 2 ประตูเท่านั้น

เชื่อมต่อ 5v กับพิน 14

ต่อกราวด์กับพิน 7

ต่อพิน 17 (A8) ของ 6502 เข้ากับพิน 1 (1A) ของ 74HC00

ต่อพิน 25 (A15) ของ 6502 เข้ากับพิน 2 (1B) ของ 74HC00

ต่อพิน 34(R/W) ของ 6502 เข้ากับพิน 5 (2B) ของ 74HC00

เชื่อมต่อพิน 3 (1Y) ของ 74HC00 เข้ากับพิน 4 (2A) ของ 74HC00

เชื่อมต่อพิน 6 (2Y) ของ 74HC00 กับพิน 11 (LE) ของ 74HC373N

เชื่อมต่อพิน 11 (LE) ของ 74HC373N เข้ากับพิน 1 (OE) ของ 74HC373N

คุณสามารถเชื่อมต่อไฟ LED สีน้ำเงินกับ 1Y และกราวด์รวมทั้ง 2Y กับกราวด์ ซึ่งจะระบุเมื่อเกททำงาน

สุดท้ายเปลี่ยนบรรทัดในขั้นตอน onClock จาก program1 เป็น program2

setDataPins (โปรแกรม 2 [ออฟเซ็ต]);

ขั้นตอนที่ 6: โปรแกรม

โปรแกรม
โปรแกรม
โปรแกรม
โปรแกรม

โปรแกรม 6502-Monitor ประกอบด้วยรูทีน 6502 สองรายการที่อธิบายไว้ข้างต้น

โปรแกรมยังอยู่ระหว่างการพัฒนาและไม่เป็นระเบียบเล็กน้อย

เมื่อรันโปรแกรม 2 ความล่าช้าในลูป () สามารถเป็น 50 หรือน้อยกว่าและลบออกทั้งหมด การแสดงความคิดเห็นในบรรทัด Serial.print() ทำให้ 6502 ทำงานเร็วขึ้น การถอดพิน 1 (OE) ของ 373 จากพิน 11 (LE) ให้ผลลัพธ์ที่แตกต่างกัน การถอดพิน 1 และพิน 11 ของ 373 จากเกต NAND ช่วยให้คุณเห็นสิ่งที่อยู่บนบัสข้อมูลในทุกรอบนาฬิกา

คุณอาจต้องผูก OE กับกราวด์แทนที่จะปล่อยให้ลอย เนื่องจากสายเอาต์พุต 8 เส้นถูกปิดใช้งานหากพินนี้สูง เมื่อพิน LE สูง พินเอาต์พุตจะเหมือนกับอินพุต การใช้พิน LE ต่ำจะล็อคเอาท์พุตเช่นถ้าพินอินพุทเปลี่ยนไปเอาท์พุทจะเหมือนเดิม

ฉันพยายามทำให้โปรแกรมเรียบง่ายที่สุดเพื่อให้เข้าใจง่ายขึ้น

การทดลองกับการหน่วงเวลาทำให้คุณสามารถติดตามสิ่งที่ 6502 กำลังทำอยู่ได้อย่างแน่นอน

ด้านล่างนี้คือสองโปรแกรม (ทั้งสองทำงานที่ที่อยู่ $100) ใน 6502 Assembler:

โปรแกรม1

LDA#$55

นพ

ROL

STA$1010

JMP$1000

ROL จะหมุนเนื้อหาของตัวสะสมเหลือหนึ่งบิต ซึ่งหมายความว่า $55 ตอนนี้กลายเป็น $AA

ในรหัสเครื่อง (ฐานสิบหก): A9 55 EA 2A 8D 10 10 4C 00 10

โปรแกรม2

LDA#$01

STA$8100

ADC#$03

STA$8100

JMP$105

ในรหัสเครื่อง (ฐานสิบหก): A9 01 8D 00 81 69 03 8D 00 81 4C 05 10

ในโปรแกรมที่ 2 ขณะนี้มีที่อยู่จริง $8100 ซึ่งเป็นที่ตั้งของ 74HC373 บนแอดเดรสบัส

เช่น A15 ของ 6502 คือ 32768 ($8000) และ A8 คือ 256 ($01100) = 33024 ($8100)

ดังนั้นเมื่อ 6502 เขียนถึง $8100 (STA$8100) R/W ของ 6502 นั้นต่ำ และข้อมูลบนบัสข้อมูล 6502 จะถูกล็อคเมื่อ 373 LE เหลือน้อย เนื่องจากเกท 74HC00 NAND สัญญาณจึงกลับด้าน

ในการพิมพ์หน้าจอด้านบน การเขียนครั้งที่สองเพิ่มขึ้น 3 (ADC#$03) - จาก $7F เป็น $82

ในความเป็นจริง จะใช้แอดเดรสบัสมากกว่า 2 บรรทัดสำหรับตำแหน่งเฉพาะของ 373 เนื่องจากเป็นที่อยู่จริงเพียงที่อยู่เดียวจาก 65536 ที่เป็นไปได้ จึงสาธิตวิธีการทำงานของแอดเดรสบัส คุณสามารถทดลองกับหมุดที่อยู่ที่แตกต่างกันและวางไว้ในตำแหน่งอื่น แน่นอน คุณจะต้องเปลี่ยนตัวถูกดำเนินการ STA ไปยังตำแหน่งใหม่ เช่น. หากคุณใช้บรรทัดที่อยู่ A15 และ A9 ที่อยู่จะเป็น $8200 (32768 + 512)

ขั้นตอนที่ 7: บทสรุป

บทสรุป
บทสรุป

ฉันได้พยายามสาธิตให้เห็นว่าการติดตั้ง 6502 นั้นง่ายเพียงใด

ฉันไม่ใช่ผู้เชี่ยวชาญในสาขานี้ ดังนั้นฉันจึงยินดีรับความคิดเห็นหรือข้อมูลที่สร้างสรรค์

คุณยินดีที่จะพัฒนาสิ่งนี้ต่อไปและฉันจะสนใจในสิ่งที่คุณได้ทำ

ฉันตั้งใจที่จะเพิ่ม EEPROM, SRAM และ 6522 ในโครงการรวมทั้งวางไว้บนกระดานแถบในอนาคต

แนะนำ: