สารบัญ:
- เสบียง
- ขั้นตอนที่ 1: แนวคิด
- ขั้นตอนที่ 2: ข้อกำหนด
- ขั้นตอนที่ 3: นำมันมารวมกัน
- ขั้นตอนที่ 4: ทดสอบวงจร
- ขั้นตอนที่ 5: ขั้นตอนต่อไป
- ขั้นตอนที่ 6: โปรแกรม
- ขั้นตอนที่ 7: บทสรุป
วีดีโอ: 6502 คอมพิวเตอร์ขั้นต่ำ (พร้อม Arduino MEGA) ส่วนที่ 1: 7 ขั้นตอน
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:04
ไมโครโปรเซสเซอร์ 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 ในโครงการรวมทั้งวางไว้บนกระดานแถบในอนาคต
แนะนำ:
All Band Receiver พร้อม SI4732 / SI4735 (FM / RDS, AM และ SSB) พร้อม Arduino: 3 ขั้นตอน
All Band Receiver พร้อม SI4732 / SI4735 (FM / RDS, AM และ SSB) พร้อม Arduino: เป็นโปรเจ็กต์เครื่องรับย่านความถี่ทั้งหมด ใช้ห้องสมุด Arduino Si4734 ห้องสมุดนี้มีตัวอย่างมากกว่า 20 ตัวอย่าง คุณสามารถฟัง FM ด้วย RDS สถานี AM (MW) ในพื้นที่ SW และสถานีวิทยุสมัครเล่น (SSB) เอกสารทั้งหมดที่นี่
6502 Minimal Computer (พร้อม Arduino MEGA) ตอนที่ 3: 7 ขั้นตอน
6502 Minimal Computer (พร้อม Arduino MEGA) ตอนที่ 3: ก้าวต่อไปตอนนี้ฉันได้เพิ่ม Octal Latch, ไฟ LED รูปสี่เหลี่ยมผืนผ้า 8 ดวงและอาร์เรย์ตัวต้านทาน 220 โอห์มในกระดานหลัก นอกจากนี้ยังมีจัมเปอร์ระหว่างพินและกราวด์ทั่วไปของอาร์เรย์ เพื่อให้สามารถปิดไฟ LED ได้ เกท 74HC00 NAND h
6502 & 6522 Minimal Computer (พร้อม Arduino MEGA) ตอนที่ 2: 4 ขั้นตอน
6502 & 6522 Minimal Computer (พร้อม Arduino MEGA) ส่วนที่ 2: ต่อจาก Instructable ก่อนหน้าของฉัน ตอนนี้ฉันได้ใส่ 6502 ลงบนบอร์ดสตริปและเพิ่ม 6522 Versatile Interface Adapter (VIA) อีกครั้ง ฉันกำลังใช้รุ่น WDC ของ 6522 เนื่องจากมันเข้ากันได้อย่างสมบูรณ์แบบกับ 6502 ของพวกเขา ไม่เพียงแต่ทำค
PWM พร้อม ESP32 - Dimming LED พร้อม PWM บน ESP 32 พร้อม Arduino IDE: 6 ขั้นตอน
PWM พร้อม ESP32 | Dimming LED พร้อม PWM บน ESP 32 พร้อม Arduino IDE: ในคำแนะนำนี้เราจะดูวิธีสร้างสัญญาณ PWM ด้วย ESP32 โดยใช้ Arduino IDE & โดยทั่วไปแล้ว PWM จะใช้เพื่อสร้างเอาต์พุตแอนะล็อกจาก MCU ใดๆ และเอาต์พุตแอนะล็อกนั้นอาจเป็นอะไรก็ได้ระหว่าง 0V ถึง 3.3V (ในกรณีของ esp32) & จาก
ส่วนที่ 2 รุ่น ThinkBioT พร้อม Google AutoML: 8 ขั้นตอน
ส่วนที่ 2 โมเดล ThinkBioT พร้อม Google AutoML: ThinkBioT ได้รับการออกแบบมาให้ "เสียบแล้วใช้งานได้จริง" พร้อมด้วยโมเดล TensorFlow Lite ที่เข้ากันได้กับ Edge TPU ในเอกสารนี้ เราจะกล่าวถึงการสร้างสเปกโตรแกรม การจัดรูปแบบข้อมูลของคุณ และการใช้ Google AutoML รหัสในบทช่วยสอนนี้จะถูกเขียนขึ้น