Სარჩევი:

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

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

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

რაც უფრო შორს მივდივარ, მე ახლა დავამატე ოქტალური ჩამკეტი, 8 მართკუთხა LED და 220 Ohm რეზისტორული მასივი მთავარ დაფაზე. ასევე არის ჯუმპერი მასივის საერთო პინსა და მიწას შორის, ისე რომ LED- ები გამორთული იყოს. 74HC00 NAND კარიბჭე შეიცვალა 78LS08 AND კარიბჭით, ასევე შეიცვალა კარიბჭის გაყვანილობა. AND კარიბჭე ნიშნავს, რომ 6522 ახლა $ 6000 -ია E000 $ - ის ნაცვლად.

ასევე არსებობს გარე საათის დასაკავშირებლად 6502 -ის დასაყენებლად. MEGA კვლავ აკვირდება იმას, რაც ხდება პროცესორთან ერთად, როგორც ადრე.

მე გამოვიყენე 20 პინიანი 74HC373 ჩამკეტისთვის, რადგან მქონდა რამდენიმე. ეს ნორმალური იყო, როდესაც პურის დაფაზე იყო, მაგრამ 74HC573 თავსებადია ავტობუსთან და დაზოგავდა გაყვანილობას. UCN5801A, რომელიც არის 22 პინიანი IC, ასევე შეიძლება ჩაითვალოს წრედ, მაგრამ გაყვანილობა ოდნავ განსხვავებული იქნება.

ზედა, ერთი ნარინჯისფერი LED არის ენერგიის მაჩვენებელი და ქვედა მარცხენა წითელი მიუთითებს, როდესაც ხდება წერა. ეს უკანასკნელი უმნიშვნელო იქნება, თუ დაფა უფრო მაღალი სიჩქარით იმუშავებს.

შეცვლილი წრე არის ზემოთ (74HC573– ით).

ნაბიჯი 1: სადემონსტრაციო პროგრამები

სადემონსტრაციო პროგრამები
სადემონსტრაციო პროგრამები

ორი მარტივი სადემონსტრაციო პროგრამა შედის 6502 მონიტორში და მათი დაშლილი კოდი აქ არის.

ეს პროგრამა იტვირთება 1 6502 A რეგისტრში და ინახავს მას ჩამკეტში. შემდეგ ის ამატებს 1 რეგისტრს და ინახავს მას ჩამკეტში. შემდეგ ის ბრუნდება 1005 დოლარამდე და პროცესი სამუდამოდ მეორდება.

* = 1000

1000 A9 01 LDA #$ 01 1002 8D 00 41 STA $ 4100 1005 69 01 ADC #$ 01 1007 8D 00 41 STA $ 4100 100A 4C 05 10 JMP $ 1005 100DEND

ეს პროგრამა პირველად ადგენს 6522 პორტი DDR- ს გამომავალს. შემდეგ იგი ინახავს 55 აშშ დოლარს (B01010101) პორტში, ასევე ჩამკეტს. შემდეგ რეგისტრი ბრუნავს 1 ნაბიჯით მარჯვნივ და ახლა ფლობს $ AA (B10101010). ეს კვლავ ინახება B პორტში და ჩამკეტში. პროგრამა ბრუნდება 1005 დოლარამდე და გრძელდება სამუდამოდ.

* = 1000

1000 A9 FF LDA #$ FF 1002 8D 02 60 STA $ 6002 1005 A9 55 LDA #$ 55 1007 38 SEC 1008 8D 00 60 STA $ 6000 100B 8D 00 41 STA $ 4100 100E 6A ROR A 100F 8D 00 60 STA $ 6000 1012 8D 00 41 STA $ 4100 1015 4C 05 10 JMP 1005 1018 $. END

თქვენ შორის მკვეთრმა თვალმა შეიძლება შენიშნოს, რომ ფერადი LED- ები განსხვავებულ ნიმუშს აჩვენებს, ვიდრე მწვანე. ეს იმიტომ ხდება, რომ საერთო ტყვიის ფერი უკავშირდება 5 ვ -ს ფერადზე, ხოლო მწვანეზე - მიწას.

შეცვალეთ კოდის ეს ხაზი program2 ან program3.

setDataPins (program3 [ოფსეტური]);

6502 Assembler და Disassembler არის სასარგებლო ინსტრუმენტები, რომლებიც დაგეხმარებათ პროგრამების კოდირებაში.

ნაბიჯი 2: EEPROM- ის დამატება

EEPROM- ის დამატება
EEPROM- ის დამატება
EEPROM- ის დამატება
EEPROM- ის დამატება
EEPROM- ის დამატება
EEPROM- ის დამატება

EEPROM დაფისთვის, მე გამოვიყენე 950 x 650 მმ ზოლიანი დაფა და 19 მმ მამრობითი სათაურის ქინძისთავები, რათა გამგეობა გამეხსნა ქვემოთ. ეს დაფა ჩართულია 6502 დაფაზე ქვემოთ. EEPROM არის ATMEL 28C256, რომელსაც აქვს 28 ქინძი და შეიცავს 32k x 8 ბიტს მეხსიერებას. ეს უფრო ადეკვატურია იმ მცირე პროგრამებისთვის, რომლებიც ამჟამად გამოიყენება.

მე არ გამიკეთებია მიკროსქემის დიაგრამა ამ დაფისთვის, მაგრამ ის საკმაოდ წინ არის, თუ როგორ უკავშირდება ის 6502 დაფას ქვემოთ. ეს EEPROM ჩიპები არ არის ავტობუსისთვის მეგობრული, ამიტომ უნდა იყოს მიბმული ცალკეულ ქინძისთავებზე, შესაბამისად ყველა "მწვანე და თეთრი სპაგეტი". მე გადავწყვიტე ხიდის პრობლემა ადრინდელ დაფაზე, დაფის ქვედა მხარეს მონაცემთა ხაზების ერთმანეთთან მიერთებით.

EEPROM– ის 14 მისამართის ქინძისთავები უკავშირდება შესაბამის ქინძისთავებს მარცხენა მხარეს (მწვანე მავთულები) და I/O ქინძისთავებს მონაცემების მარჯვენა მხარეს (თეთრი მავთულები). Pin 27 (WE) უკავშირდება pin 28 -ს (5v), pin 22 (OE) უკავშირდება მიწას და pin 20 (CE) უკავშირდება NAND კარიბჭეს. NAND კარიბჭის 2 შესასვლელი უკავშირდება A15- ს მთავარი დაფა. ეს ნიშნავს, რომ როდესაც ეს პინი მაღლა იწევს, NAND კარიბჭე დაბალ სიგნალს აძლევს EEPROM- ის CE პინს, რაც მას აქტიურ ხდის. ამ დაყენებით ეს ნიშნავს, რომ EEPROM– ის წაკითხვა შესაძლებელია მხოლოდ 6502 – ის მიერ.

მეხსიერების რუქაზე EEPROM ცხოვრობს 32 კმ – ში, ეს ნიშნავს, რომ $ FFFC და $ FFFD შეიძლება შეინახოს საწყისი მისამართი 6502 – ის გადატვირთვის შემდეგ. 6522– ს აქვს მისამართები 6000–600 აშშ დოლარამდე, ხოლო ჩამკეტი 4100 აშშ დოლარია, ის აჩერებს მეხსიერების ნებისმიერ კონფლიქტს.

NMI ვექტორი ($ FFFA და $ FFFB) და BRK / IRQ ვექტორი ($ FFFE ან $ FFFF) ასევე შეიძლება დაიწეროს იმავე გზით.

ნაბიჯი 3: პროგრამირება EEPROM

EEPROM პროგრამირება
EEPROM პროგრამირება
EEPROM პროგრამირება
EEPROM პროგრამირება

EEPROM– ზე პროგრამის შესანახად მას სჭირდება პროგრამისტი. მე გავაკეთე ერთი ზოლის დაფისგან, Arduino Pro Mini– სგან, რამოდენიმე 74HC595 და ZIF სოკეტიდან. თავდაპირველად, პროგრამისტი შეიქმნა AT28C16– ისთვის, რომელსაც აქვს ნაკლები მისამართის ხაზი, ვიდრე AT28C256, ამიტომ უნდა შეიცვალოს.

წრიული დიაგრამა გვიჩვენებს, თუ როგორ უნდა დააკავშიროთ ორივე ეს EEPROM. ფოტოდან არ ჩანს, რომ ორი 595 ჩიპი თავდაყირა დგას და არა ისე, როგორც დიაგრამაზეა ნაჩვენები. 595/1 – ის 1 – დან 7 – მდე მიმაგრებულია EEPROM– ის A1– დან A7– მდე, მიუხედავად იმისა, თუ რომელია გამოყენებული. ეს ზოგავს 7 დამაკავშირებელ მავთულს. დაფა ახლა ცოტა მჭიდროდ გამოიყურება და ეს იმიტომ ხდება, რომ თავდაპირველად მე გამოვიყენე 24 პინიანი DIL სოკეტი, რომელიც ახლა შეიცვალა ბევრად უფრო დიდი 28 პინიანი ZIF სოკეტით.

შედის პროგრამა, რომელიც მუშაობს ჩემს დაფაზე. პროგრამა იმუშავებს ნებისმიერ Arduino– სთან და 595 – თან წრეში, როგორც ნაჩვენებია. მე ავირჩიე 5v Pro Mini, რადგან ის კომპაქტური და იაფია საკმარისი იმისათვის, რომ დატოვოს კომპლექტში.

ნაბიჯი 4: EEPROM პროგრამები

EEPROM პროგრამები
EEPROM პროგრამები

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

// წაიკითხეთ 6522 წლის A პორტიდან

// const byte data = {0xA9, 0x00, 0x8D, 0x03, 0x60, 0xAD, 0x01, 0x60, 0x4C, 0x05, 0x90, 0x00};

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

// წაშლა EEPROM (422, 930, 0x41); // გამოიყენეთ EEPROM– ის მთლიანად ან ნაწილის წასაშლელად - დაწყება, დასრულება, ბაიტი

Serial.println ("პროგრამირება EEPROM"); თანხა = პროგრამის_ რიცხვითი_მონაცემები (0x1000); ჩაწერეთ EEPROM (0x7ffc, 0x00); // დააყენეთ $ FFFC 6502 ჩაწერისთვის EEPROM (0x7ffd, 0x90); // დააყენეთ $ FFFD 6502 -ისთვის // ჩაწერეთ EEPROM (0x1000, 0xA9); // ჩაწერეთ მონაცემების 1 ბაიტი Serial.println ("შესრულებულია"); სიმებიანი მონახაზი = "დაწერილი" + (სიმებიანი) თანხა + "ბაიტი"; Serial.println (მონახაზი); Serial.println ("კითხულობს EEPROM"); printContents (0x0000, 0x112f); // printContents- ის ჩვენების დიაპაზონი (0x7ff0, 0x7fff); // კითხულობს ბოლო 16 ბაიტს EEPROM– ზე

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

ნაბიჯი 5: გაუშვით 6502 EEPROM– დან

მუშაობს 6502 EEPROM– დან
მუშაობს 6502 EEPROM– დან
მუშაობს 6502 EEPROM– დან
მუშაობს 6502 EEPROM– დან
მუშაობს 6502 EEPROM– დან
მუშაობს 6502 EEPROM– დან

დაპროგრამებული EEPROM ახლა შეიძლება ჩასვათ მის დაფაზე და ეს ყულაბა ზურგსუკან მიდის მთავარ 6502 დაფაზე, რომელსაც ყულაბა უჭერს მხარს MEGA- ს. გვერდითა და ზედა ხედის ფოტოები აჩვენებს, თუ როგორ ჯდება ეს ყველაფერი ერთად.

6502 -ს ახლა შეუძლია წაიკითხოს საწყისი ვექტორი $ FFFC- დან და $ FFFD- დან (რაც $ 9000) და შემდეგ გადავიდეს იქ შენახულ პროგრამაზე. MEGA კვლავ აწვდის საათის სიგნალს და მისი პროგრამა უნდა შეიცვალოს მხოლოდ საათის სიგნალის უზრუნველსაყოფად და 6502 -ის მონიტორინგისთვის. ამისათვის მოწოდებულია მოდიფიცირებული პროგრამა.

გაშვებული ფოტო გვიჩვენებს, რომ ეს პროგრამა მუშაობს.

9000 LDA #$ 00 A9 00

9002 STA $ 6003 8D 03 60 9005 LDA #$ FF A9 FF 9007 STA $ 6002 8D 02 60 900A LDA $ 6001 AD 01 60 900D STA $ 6000 8D 00 60 9010 EOR #$ FF 49 FF 9012 STA $ 4100 8D 00 41 9015 JMP $ 900A 4C 0A 90

კონცენტრატორები ჩართულია A პორტში და პროგრამა აჩვენებს მნიშვნელობას, რომელსაც კითხულობს B პორტში და 74HC373 (რომელიც ამჟამად ბუნდოვანია). კონცენტრატორები დაკავშირებულია მიწასთან და LED- ები უკავშირდება 5 ვ -ს. EOR #$ FF ასწორებს ჩამკეტისა და B პორტის პრობლემას, რომელიც ასახავს სხვადასხვა შაბლონებს ბიტების გადაბრუნებით ჩაკეტვამდე.

ნაბიჯი 6: გარე დროის სიგნალი

გარე დროის სიგნალი
გარე დროის სიგნალი

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

მე ასევე ვცადე 555 ქრონომეტრიდან გამოსვლა, მაგრამ ეს არ მუშაობს. მე ვფიქრობ, რომ ეს შეიძლება იყოს იმიტომ, რომ ეს არ არის კვადრატული ტალღა? როდესაც CD4017 ერთ -ერთ გამოსავალს უკავშირდება, ის მართავს 6502 -ს.

მე ჯერ კიდევ ვეძებ სხვადასხვა სიგნალებს საათის სიგნალის მისაღებად.

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

მე ვაჩვენე, თუ როგორ უნდა ავაშენოთ რამდენიმე რთული სქემა და მივიღო ძალიან მარტივი "კომპიუტერი", რომელიც იმუშავებს მინიმალური რაოდენობის ნაწილებით. რასაკვირველია, კომპიუტერს არ შეუძლია ბევრი რამის გაკეთება, ან სავარაუდოდ მომავალში.

ჯერ კიდევ 80 -იანი წლების დასაწყისში, ჩემი VIC20– ით, მე მაინტერესებდა გასაოცარი მანქანა და არ მქონდა პირველი იდეა, თუ როგორ უნდა დაიწყოს მისი აწყობა. დრო გავიდა და ტექნოლოგიაც ასეა, მაგრამ მაინც სასიამოვნოა დაუბრუნდე საფუძვლებს და იამაყო იმით, რაც შენ ააშენე ნულიდან.

ამ კომპიუტერის შემდგომი განვითარების მიზნით, მე ვაპირებ 2K SRAM- ის დაყენებას $ 0000 -დან $ 2047 -მდე და დამატებას 1 MHz ოსცილატორზე. ალბათ დავამატებ რაღაცას CD4040- ს (12-ეტაპიანი ორობითი ტალღის მრიცხველი / გამყოფი), რომ შევძლო საათის სხვადასხვა სიჩქარეზე შეხება.

შეიძლება დაამატოთ LCD დისპლეი ტექსტის გამოსავლელად და არა მხოლოდ მოციმციმე შუქებით. EEPROM პროგრამისტი ასევე უნდა შეიცვალოს, რათა გაუმკლავდეს უფრო დიდ პროგრამებს, რომლებიც საჭიროა LCD ეკრანის გასაშვებად.

მიუხედავად იმისა, რომ MEGA ხდება არასაჭირო 6502 – ის მუშაობისთვის, ის მაინც გამოდგება მანქანის კოდის გამართვისთვის. როგორც ყველამ იცის, მანქანის კოდი ყოველთვის შეიცავს შეცდომებს!

გირჩევთ: