Სარჩევი:

6502 მინიმალური კომპიუტერი (Arduino MEGA– ით) ნაწილი 1: 7 ნაბიჯი
6502 მინიმალური კომპიუტერი (Arduino MEGA– ით) ნაწილი 1: 7 ნაბიჯი

ვიდეო: 6502 მინიმალური კომპიუტერი (Arduino MEGA– ით) ნაწილი 1: 7 ნაბიჯი

ვიდეო: 6502 მინიმალური კომპიუტერი (Arduino MEGA– ით) ნაწილი 1: 7 ნაბიჯი
ვიდეო: История CPU: MOS 6502 2024, ივლისი
Anonim
6502 მინიმალური კომპიუტერი (Arduino MEGA– ით) ნაწილი 1
6502 მინიმალური კომპიუტერი (Arduino MEGA– ით) ნაწილი 1

6502 მიკროპროცესორი პირველად გამოჩნდა 1975 წელს და შეიქმნა პატარა გუნდის მიერ ჩაკ პედლდის ხელმძღვანელობით MOS ტექნოლოგიისთვის. მაშინ ის გამოიყენებოდა ვიდეო კონსოლებში და სახლის კომპიუტერებში, მათ შორის Atari, Apple II, Nintendo Entertainment System, BBC Micro, Commodore VIC20 და 64. იმ დროს ის იყო ერთ – ერთი ყველაზე იაფი ბაზარზე. ის არასოდეს გაქრა და ახლა მას იყენებენ ჰობისტები და პროფესიონალები მრავალი პროგრამისთვის.

ვერსია, რომელსაც მე ვიყენებ, არის W65C02S6TPG-14, რომელიც დამზადებულია დასავლური დიზაინის ცენტრის მიერ და იყენებს ათჯერ ნაკლებ ენერგიას ვიდრე ორიგინალი. ის განსაკუთრებულია იმით, რომ მას არ სჭირდება 1 მეგაჰერც სიხშირეზე ორიგინალური ჩიპის მსგავსად. მას შეუძლია გაცილებით ნელა იმუშაოს ან გამოიყენოს ერთი ნაბიჯი პროგრამის გავლით და კიდევ გააძლიეროს 14 MHz. ჩიპის მონაცემთა ფურცელი განმარტავს მის შესაძლებლობებს. სხვა 6502 ჩიპს არ აქვს ეს შესაძლებლობა და არ იმუშავებს ამ გზით. ჩიპები ამჟამად ხელმისაწვდომია Ebay– ზე და სხვა წყაროებზე.

მარაგები

გამოყენებული ყველა ნაწილი ამჟამად ხელმისაწვდომია Ebay, AliExpress და სხვა.

ნაბიჯი 1: კონცეფცია

ჩემი შთაგონება მივიღე ბენ ეატერისგან, რომელმაც შექმნა ვიდეოების სერია YouTube– ზე 6502 – ის შესახებ და კომპიუტერებისა და სქემების მშენებლობის მრავალი სხვა ასპექტის შესახებ. პროგრამა თავდაპირველად მის მიერ იყო დაწერილი და მე შევცვალე ეს და მისი ზოგიერთი დიზაინი ამ ინსტრუქციულთან ერთად. კიდევ ერთი ადამიანი, ვინც ჩემში შთააგონა, იყო ენდრიუ ჯაკობსი, რომელსაც აქვს განყოფილება GitHub– ზე, სადაც ის იყენებს PIC მიკროს, რომ გააკონტროლოს თავისი 6502.

ბენის მსგავსად, მე ვიყენებ Arduino MEGA- ს 6502 -ის მონიტორინგისთვის. მე ასევე ვიყენებ MEGA- ს ბენისგან განსხვავებით საათის სიგნალის უზრუნველსაყოფად. ამჟამად მე არ ვიყენებ არც EEPROM- ებს და არც RAM- ს.

ნაბიჯი 2: მოთხოვნები

მოთხოვნები
მოთხოვნები

ამ "კომპიუტერის" შესაქმნელად ნივთების ჩამონათვალი ასეთია:

1 x Arduino MEGA

1 x დასავლური დიზაინის ცენტრი W65C02S6TPG-14

1 x 74HC00N IC (Quad 2-input NAND gate) ან მსგავსი

1 x 74HC373N IC (ოქტალური D- ტიპის გამჭვირვალე ჩამკეტი) ან მსგავსი

2 x 830 ხვრელი პურის დაფები (1 პინჩზე)

სხვადასხვა Dupont მამრობითი - მამრობითი ლიდერობს და დამაკავშირებელი მავთულები

2 x LED- ები (მე გამოვიყენე 5 მმ ლურჯი, რადგან შეგიძლიათ მოშორდეთ რეზისტორების გარეშე)

1 x 12 მმ Momentary Tactile Push Button Switch PCB Mounted SPST ან მსგავსი

1 x 1K რეზისტორი

2 x 0.1 uF კერამიკული კონდენსატორები

1 x 8 Way Water Light Marquee 5 მმ წითელი LED (როგორც ზემოთ) ან 8 LED და რეზისტორები

შენიშვნა: თუ თქვენ მიიღებთ დაუმუშავებელ ნაკრებებს, შეგიძლიათ განათავსოთ LED- ები არასწორად ისე, რომ ისინი საერთო კათოდური იყოს. მე ვამაგრებ ბუდის ტყვიას (პინის ნაცვლად) ისე, რომ ადვილად შეაერთოს სხვაგან. VCC ახლა ხდება Ground. თქვენ, რა თქმა უნდა, შეგიძლიათ ჩართოთ LED- ები (აწყობილ ნივთზე) და ხელახლა შეაერთოთ ისინი, მაგრამ ეს ბევრი შეცდომაა! ნაკრები ამჟამად ხელმისაწვდომია AliExpress– ზე.

ნაბიჯი 3: ერთად აწყობა

ერთად აყენებს მას
ერთად აყენებს მას
ერთად აყენებს მას
ერთად აყენებს მას

მე უფრო გამიადვილდა ახალი DuPont მავთულის გამოყენება, რომელიც არ იყო გამოყოფილი მათი ლენტიდან მისამართისა და მონაცემთა ავტობუსებისთვის.

შეაერთეთ 6502 -ის პინ 9 (A0) MEGA- ს პინ 52 -თან, პინ 10 (A1) 6502 დან პინ 50 და ა.შ …

სანამ

შეაერთეთ 6502 -ის პინ 25 (A15) MEGA- ს 22 პინთან.

ჯერჯერობით 16 კავშირი.

ანალოგიურად

შეაერთეთ 6502 -ის პინ 26 (D7) MEGA- ს 39 პინთან, პინ 27 (D6) 6502 დან 41 პინამდე და ა.შ …

სანამ

შეაერთეთ 6502 -ის 33 პუნქტი (D0) MEGA- ს 53 პინთან.

კიდევ 8 კავშირი.

შეაერთეთ PIN 8 (VDD) 5 ვ MEGA– ზე.

0,1uF კონდენსატორი, რომელიც დაკავშირებულია პინიდან 8 პურის დაფის Gnd– თან, შეიძლება სასარგებლო იყოს აქ, მაგრამ არა აუცილებელი.

შეაერთეთ პინ 21 (VSS) Gnd MEGA– ზე.

ქინძისთავები 2, 4, 6, 36 და 38 შეიძლება მიბმული იყოს 5 ვ

შეაერთეთ პინ 37 (საათი) MEGA- ს პინ 2 -სა და მე -7 პინს.

შეაერთეთ PIN 34 (RWB) MEGA- ს მე -3 პინთან.

დააკავშირეთ პინ 40 (გადატვირთვა), როგორც ზემოთ დიაგრამა.

ნაბიჯი 4: წრის შემოწმება

წრის შემოწმება
წრის შემოწმება

ამ ეტაპზე 6502 იმუშავებს და პროგრამა 1 შეიძლება გამოყენებულ იქნას. თუ თქვენ იყენებთ 8 გზის მარკირს (როგორც ზემოთ), ის შეიძლება პირდაპირ ჩასვათ დაფაზე და ბუდის ტყვია მიწასთან იყოს დაკავშირებული, ან შეგიძლიათ გამოიყენოთ 8 LED- ები და რეზისტორები. LEDS აჩვენებს რა არის მონაცემთა ავტობუსში.

ამ ეტაპზე ასევე იქნება მარყუჟის () შეფერხებების დაყენება 500 ან მეტი, რათა მიყვეთ რა ხდება.

თქვენ უნდა მიიღოთ მსგავსი გამომავალი სერიულ მონიტორზე, როგორც ზემოთ. როდესაც გადატვირთულია დაჭერილი, პროცესორი გადის 7 ციკლს და შემდეგ ის ეძებს პროგრამის დაწყებას $ FFFC და $ FFFD ადგილებში. რადგან არ არსებობს 6502 – ის წასაკითხად ფიზიკური მისამართები, ჩვენ უნდა მივაწოდოთ ისინი MEGA– დან.

ზემოაღნიშნულ გამომავალში, 6502 კითხულობს $ FFFC და $ FFFD და იღებს $ 00 და $ 10 (დაბალი ბაიტი, მაღალი ბაიტი), რაც პროგრამის დასაწყისია $ 1000. შემდეგ პროცესორი იწყებს პროგრამის შესრულებას $ 1000 ადგილას (როგორც ზემოთ). ამ შემთხვევაში ის კითხულობს A9 $ და 55 $, ანუ LDA#55 $ (ჩატვირთეთ 85 აკუმულატორში). ისევ და ისევ, ვინაიდან არ არსებობს ფიზიკური მეხსიერების ადგილმდებარეობა, MEGA ახდენს სიმულაციის მონაცემებს მონაცემთა წაკითხვისგან.

55 $ (85) იძლევა ორობითი შაბლონს 01010101 და როტაციისას 1 ბიტი მარცხნივ იძლევა $ AA (170) 10101010.

პროგრამა აჩვენებს, რომ პროცესორი მუშაობს სწორად, მაგრამ მალე ხდება ცოტა მოსაწყენი, ასე რომ შემდეგ ნაწილზე.

ნაბიჯი 5: შემდეგი ნაბიჯი

Შემდეგი ნაბიჯი
Შემდეგი ნაბიჯი
Შემდეგი ნაბიჯი
Შემდეგი ნაბიჯი

"სპაგეტის გროვა" ზემოთ არის ალბათ რაღაც ისეთი, რაც გექნებათ ამ ეტაპის შემდეგ.

შემდეგ თქვენ უნდა დაამატოთ 74HC373N და 74HC00N ICs პურის დაფაზე.

სამწუხაროდ 373 -ის ქინძისთავები არ ემთხვევა მონაცემთა ავტობუსს, ამიტომ საჭირო იქნება მავთულხლართებით დაკავშირება.

შეაერთეთ 5v 20 პინთან.

დააკავშირეთ გრუნტი პინ 10 -თან.

დააკავშირეთ 6502 -ის 33 -ე (D0) 74HC373N- ის 3 (D0) პინთან

და ასევე ქინძისთავებით D1 დან D7.

Q0- დან Q7- მდე არის შედეგები და მათ დასჭირდებათ LED მარკირებასთან ან ცალკეულ LED- ებთან და რეზისტორებთან დაკავშირება.

74HC00– ით მხოლოდ 2 მისი კარიბჭეა საჭირო

შეაერთეთ 5v 14 პინთან.

დააკავშირეთ გრუნტი პინ 7 -თან.

შეაერთეთ 6502 -ის პინ 17 (A8) 74HC00- ის 1 (1A) პინთან

შეაერთეთ 6502 -ის pin 25 (A15) 74HC00- ის 2 (1B) პინთან

შეაერთეთ 6502 -ის 34 (R/W) 74HC00- ის 5 (2B) პინთან

შეაერთეთ 74HC00- ის პინი 3 (1Y) 74HC00- ის 4 (2A)

შეაერთეთ 74HC00- ის პინ 6 (2Y) 74HC373N- ის 11 (LE) პინთან

შეაერთეთ 74HC373N- ის პინი 11 (LE) 74HC373N- ის 1 (OE) - თან

თქვენ შეგიძლიათ დააკავშიროთ ლურჯი LED 1Y და ადგილზე, ასევე 2Y მიწასთან, ეს მიუთითებს როდის არის კარიბჭე აქტიური.

საბოლოოდ შეცვალეთ ხაზი onClock პროცედურაში program1– დან program2– ზე

setDataPins (პროგრამა 2 [ოფსეტური]);

ნაბიჯი 6: პროგრამა

Პროგრამა
Პროგრამა
Პროგრამა
Პროგრამა

6502-მონიტორის პროგრამა შეიცავს ზემოთ აღწერილ ორ 6502 რუტინას.

პროგრამა ჯერ კიდევ დამუშავების პროცესშია და ცოტა მოუწესრიგებელია.

პროგრამის 2 გაშვებისას მარყუჟის () შეფერხებები შეიძლება იყოს 50 ან ნაკლები და საერთოდ ამოღებულიც კი. Serial.print () ხაზების კომენტარი ასევე 6502 -ს აჩქარებს. 373 -ის ქინძისთავის 1 (OE) გათიშვა pin 11 -დან (LE) აწარმოებს სხვადასხვა შედეგს. NAND კარიბჭეებიდან 373 -დან 1 და 11 პინების გათიშვა საშუალებას გაძლევთ ნახოთ რა არის მონაცემთა ავტობუსში ყოველ საათის ციკლში.

შეიძლება დაგჭირდეთ OE მიწასთან მიბმა, ვიდრე არ დატოვოთ ის მცურავი, რადგან 8 გამომავალი ხაზი გამორთულია, თუ ეს პინი მაღლა მიდის. როდესაც LE pin მაღალია, გამომავალი ქინძისთავები იგივეა, რაც შემავალი. LE პინის დაბალ ჩაკეტვას აწარმოებს, ანუ თუ შეყვანის ბუდეები იცვლება, გამომავალი იგივე რჩება.

მე შევეცადე, რომ პროგრამა მაქსიმალურად მარტივი ყოფილიყო გასაგები.

დროის დაგვიანებით ექსპერიმენტი საშუალებას გაძლევთ ზუსტად მიყევით რას აკეთებს 6502.

ქვემოთ მოცემულია ორი პროგრამა (ორივე გაშვებულია მისამართზე $ 1000) 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 1005 დოლარი

აპარატის კოდით (ექვსკუთხედი): A9 01 8D 00 81 69 03 8D 00 81 4C 05 10

Program2– ში ახლა არის ფიზიკური მისამართი $ 8100, სადაც 74HC373 მდებარეობს მისამართის ავტობუსში.

ანუ A50 6502 -დან არის 32768 ($ 8000) და A8 არის 256 ($ 0100) = 33024 ($ 8100).

ასე რომ, როდესაც 6502 წერს 8100 $ (STA $ 8100), R/W 6502 დაბალია და მონაცემები 6502 მონაცემთა ავტობუსზე იკეტება, როდესაც 373 LE მცირდება. 74HC00 NAND Gate– ის გამო სიგნალები უკუქცეულია.

ზემოთა ეკრანზე დაბეჭდილი მეორე ჩაწერა გაიზარდა 3 -ით (ADC#$ 03) - $ 7F– დან $ 82 – მდე.

სინამდვილეში, 373 -ის კონკრეტული მდებარეობისთვის გამოყენებული იქნება მისამართის ავტობუსის 2 -ზე მეტი ხაზი. ვინაიდან ეს არის ერთადერთი ფიზიკური მისამართი შესაძლო 65536 -დან, ის გვიჩვენებს, თუ როგორ მუშაობს მისამართების ავტობუსი. თქვენ შეგიძლიათ ექსპერიმენტი ჩაატაროთ სხვადასხვა მისამართების ქინძისთავებით და განათავსოთ იგი სხვა ადგილას. რა თქმა უნდა, თქვენ უნდა შეცვალოთ STA ოპერანდები ახალ ადგილას. მაგალითად. თუ თქვენ იყენებთ მისამართების ხაზებს A15 და A9, მისამართი იქნება $ 8200 (32768 + 512).

ნაბიჯი 7: დასკვნა

დასკვნა
დასკვნა

მე შევეცადე მეჩვენებინა, რამდენად ადვილია 6502 -ის ამოქმედება.

მე არ ვარ ამ დარგის ექსპერტი, ამიტომ მივესალმები ნებისმიერ კონსტრუქციულ კომენტარს ან ინფორმაციას.

კეთილი იყოს თქვენი მობრძანება, რომ ეს კიდევ უფრო განავითაროთ და მე დაინტერესებული ვიქნები, რაც თქვენ გააკეთეთ.

მე ვაპირებ პროექტს დავამატო EEPROM, SRAM და 6522, ასევე მომავალში დავაყენო იგი ზოლის დაფაზე.

გირჩევთ: