Mundarija:

KIM Uno - 5 evrolik mikroprotsessorli Dev Kit emulyatori: 13 qadam (rasmlar bilan)
KIM Uno - 5 evrolik mikroprotsessorli Dev Kit emulyatori: 13 qadam (rasmlar bilan)

Video: KIM Uno - 5 evrolik mikroprotsessorli Dev Kit emulyatori: 13 qadam (rasmlar bilan)

Video: KIM Uno - 5 evrolik mikroprotsessorli Dev Kit emulyatori: 13 qadam (rasmlar bilan)
Video: Упражнения китайского ушу нунчаку. Практикуем кунг-фу и растем вместе на youtube 2024, Iyun
Anonim
Image
Image
KIM Uno - 5 evrolik mikroprotsessorli Dev Kit emulyatori
KIM Uno - 5 evrolik mikroprotsessorli Dev Kit emulyatori
KIM Uno - 5 evrolik mikroprotsessorli Dev Kit emulyatori
KIM Uno - 5 evrolik mikroprotsessorli Dev Kit emulyatori

KIM Uno - bu (retro) mikroprotsessorlar uchun mo'ljallangan, ko'chma, dasturiy ta'minot bilan ta'minlangan dev to'plami. Ammo men bu fikrni vaqtni ortga qaytarish bilan tanishtiray:

2018 yil oxirida men MOS Technology, Inc kompaniyasining mashhur KIM-1 singari va 6502 protsessorini yaratishda ishtirok etgan Chak Peddl tomonidan ishlab chiqarilgan kichik ko'chma mikroprotsessorli asboblar to'plamini yaratmoqchi bo'lganimni esladim.

Ammo alohida mantiqiy komponentlarga ega "yalang'och" dev to'plamini yaratish hech qanday imkoniyat emas edi, chunki u katta quvvat manbaiga muhtoj edi (chunki bu qadimgi qurilmalar jiddiy oqimga moyil), shuningdek, ishlab chiqish juda ko'p vaqt talab etadi. Va men hozir xohlayman!

Shuning uchun men KIM Uno -ni portativ qurilma sifatida ishlab chiqdim, u bir qo'liga mos keladi va ikkita CR2032 batareyasi bilan ishlaydi. U 8 MGts chastotada ishlaydigan ATMega328p ("Arduino") mikrokontrolleridan foydalanib, kerakli protsessorni taqlid qiladi (yoki taqlid qiladi). Bu arxitektura, shuningdek, emulyatsiya qilingan protsessorlarni mikrokontrollerning flesh xotirasiga mos keladigan har qanday narsa bilan almashtirilishini ta'minlaydi. Shunday qilib, bu ko'p maqsadli qurilma.

Tasodifan men keyinchalik YouTube -da "Bir yo'riqnoma kompyuteri" yoki OISC haqida so'z yuritadigan, "Ultimate Apollo Guidance Computer Talk (34C3)" deb nomlangan juda yaxshi suhbatni ko'rdim. Men ular haqida bilmasdim va buni amalga oshirish uchun mukammal nomzod deb topdim.

KIM Uno protsessorni faqat bitta ko'rsatma bilan taqlid qiladi: subleq - nolga teng yoki undan kichik bo'lsa, olib tashlang va bo'laklang.

Agar siz bu yo'riqnomani men bilan birga kuzatib boradigan bo'lsangiz, qisqa vaqt ichida o'zingizning KIM Uno -ni qurishingiz mumkin. Va eng yaxshi tomoni - siz xohlaganingizcha o'zgartirishingiz mumkin, bundan tashqari, uning narxi atigi 4, 75 evroni tashkil qiladi (2018 yil oxirigacha).

Bir maslahat: Git ombori bor, u ushbu ko'rsatmaning turli bosqichlarida taqdim etilgan barcha fayllarni o'z ichiga oladi. Agar siz ba'zi manbalarni o'zgartirmoqchi bo'lsangiz va ularni biz bilan baham ko'rmoqchi bo'lsangiz, siz PR -ni yaratishingiz mumkin. Ammo siz bir vaqtning o'zida barcha fayllarni yuklab olishingiz mumkin. Faqat https://github.com/maxstrauch/kim-uno saytiga o'tish. Rahmat!

Xuddi shu (KIM Uno) deb nomlangan yana bir qiziqarli loyiha bor, u 6502 KIM Uno -ning haqiqiy nusxasini yaratadi. Bu erda tekshiring. Yaratuvchi hatto to'plamni sotadi. Agar siz 6502 ga qiziqsangiz va bu loyihani yoqtirsangiz, u erga qarashingiz kerak!

1 -qadam: tenglikni sotib olish

PCBni sotib olish
PCBni sotib olish
PCBni sotib olish
PCBni sotib olish

Ko'rib turganingizdek, men imkoniyatdan foydalanib, tenglikni loyihalash va uni professional tarzda yasashga ruxsat berdim. Uni tashqi tomondan ishlab chiqarish va sizga jo'natish uchun ko'p vaqt kerak bo'ladi (dunyoning qaerdaligiga qarab;-)), uni buyurtma qilish-bu birinchi qadam. PCB ishlab chiqarilgan va sizga jo'natilgan paytda biz boshqa qadamlarni davom ettira olamiz.

Men PCBWay -da Xitoyda tenglikni kompyuterimga atigi 5 dollarga buyurtma qildim. Men PCBWay -ni PCB -lar uchun ishlab chiqaruvchi sifatida taqdim etishdan foyda ko'rmayapman, bu men uchun yaxshi ishlagan va siz uchun ham yaxshi ishlashi mumkin. Ammo siz ularni JLCPCB, OSH Park yoki har qanday mahalliy PCB kompaniyasi kabi boshqa joyga buyurtma qilishingiz mumkin.

Agar siz ularni PCBWay-da buyurtma qilmoqchi bo'lsangiz, biriktirilgan ZIP-faylini "kim-uno-rev1_2018-12-12_gerbers.zip" yuklab olishingiz va to'g'ridan-to'g'ri PCBWay-ga hech qanday o'zgarishsiz yuklashingiz mumkin. Bu rasmlarda ko'rishingiz mumkin bo'lgan tenglikni buyurtma qilish uchun ishlatilgan asl fayl.

Agar siz ularni boshqa ishlab chiqaruvchidan buyurtma qilsangiz, ularni KiCad-ning asl manbalaridan qayta eksport qilishingiz kerak bo'ladi, chunki men ularni PCBWay-ning texnik xususiyatlari bilan bu erda topishingiz mumkin. Asl KiCad manbalari uchun "kim-uno-kicad-sources.zip" ni yuklab oling va uni chiqarib oling.

Ammo ikkinchi yo'l ham bor: agar siz PCBga buyurtma berishni xohlamasangiz, siz o'zingizning versiyangizni perfboard yoki hatto non taxtasi yordamida qurishingiz mumkin.

Yaxshiyamki: PCBlar endi yo'lda, biz boshqa qismlarga e'tibor qaratishimiz mumkin! Kel, menga ergashing.

2 -qadam: Komponentlarning manbalari

Komponentlarning manbalari
Komponentlarning manbalari
Komponentlarning manbalari
Komponentlarning manbalari
Komponentlarning manbalari
Komponentlarning manbalari

Endi siz komponentlarni olishingiz kerak. Buning uchun sizga kerak bo'lgan barcha komponentlar va miqdorlarning umumiy tasviri, bu bosqichga biriktirilgan BOM (materiallar ro'yxati) topiladi.

BOM eBay -ga havolalarni o'z ichiga oladi. Garchi siz o'qiganingizda bu takliflar yopiq bo'lishi mumkin bo'lsa -da, siz uni boshlanish nuqtasi sifatida ishlatishingiz mumkin. Ishlatilgan komponentlar juda standart.

Quyida men sizga barcha kerakli komponentlarni tushuntirib beraman:

  • Etti segmentli displeylar uchun 7x 1 kΩ rezistorlar. Yorqinroq bo'lishi uchun siz qiymatni (masalan, 470 to gacha) kamaytirishingiz mumkin, lekin uni juda ko'p kamaytirmang, aks holda LEDlar o'ladi yoki batareya tez zaryadsizlanadi. Men bu qiymat men uchun ishlashini topdim
  • 1x 10 kΩ mikrokontrollerning RESET liniyasi uchun tortuvchi qarshilik sifatida
  • 1x 100nF kondansatör har qanday kuchlanishning ko'tarilishini yumshatish uchun (bunday bo'lmasligi kerak, chunki biz batareyadan foydalanamiz, lekin to'g'ri o'lchov uchun …)
  • DIP-28 paketidagi 1x ATMega328P (odatda ATMega328P-PU deb nomlanadi)
  • 1x asosiy PCB - oldingi bosqichga qarang; buyurtma qilingan yoki o'zingiz qurgan
  • 2 marta CR2032 batareya ushlagichlari
  • 1x SPDT (bitta qutbli, ikki martali) kalit, u asosan uchta kontaktga ega va uning har ikki holatida (yoqilgan yoki o'chirilgan) ikkita kontaktni bog'laydi.
  • Klaviatura uchun 20 marta tegib turadigan tugmalar. PCB -ning orqa tomonini ishlatish uchun men SMD tegish tugmachalarini ishlatardim (standart 6x6x6 mm) - ularni ko'rib turganingizdek lehimlash juda oson.
  • Ixtiyoriy: dasturchini ulash uchun 1x6 pinli 1x sarlavha, lekin bu ixtiyoriy, keyinroq ko'rasiz
  • 4 ta raqamli 1x etti segmentli displey va 2 ta raqamli 1x etti segmentli displey - kengashga faqat anodli simli 0,36 dyuymli (9, 14 mm) elementlar kerak bo'ladi. Ishchi birlikni olish uchun ikkala talab ham muhim. Ammo bu turdagi etti segmentli displey juda keng tarqalgan

Ushbu qadamga biriktirilgan komponentlarning o'lchamlari va turlari to'g'risida aniqroq ma'lumotlarni o'z ichiga olgan "component-datasheets.zip" faylini topishingiz mumkin. Lekin komponentlarning aksariyati juda standart bo'lib, ularni oz pulga osonlik bilan olish mumkin.

Endi siz lehimlashni davom ettirish uchun barcha komponentlar tayyor bo'lguncha kutishingiz kerak. Bu vaqt ichida siz oxirigacha o'tishingiz va xohlasangiz, KIM Uno -dan foydalanish haqida ozgina o'qishingiz mumkin.

3 -qadam: Lehim asboblariga umumiy nuqtai

Lehimlash asboblariga umumiy nuqtai
Lehimlash asboblariga umumiy nuqtai
Lehimlash asboblariga umumiy nuqtai
Lehimlash asboblariga umumiy nuqtai

KIM Uno -ni lehimlash va qurish uchun sizga rasmda ko'rsatilgan asboblar kerak bo'ladi:

  • Tel kesuvchi (komponent simlarining uchini kesish uchun)
  • Yassi penseler
  • Pinset juftligi
  • Qalin bo'lmagan lehim - men 0,56 mm lehimdan foydalanaman
  • Lehimlash temir - sizga yuqori sifatli lehim kerak emas (chunki biz bu erda raketa bilan shug'ullanmaymiz) - Men Ersa FineTip 260 -dan uzoq vaqtdan beri foydalanaman va bu juda yaxshi.
  • Oqimli qalam: komponentlar va prokladkalarga oqim qo'shilishi ularni lehimlashni ancha osonlashtiradi, chunki lehim keyin o'z -o'zidan to'g'ri joyga "oqadi"*.
  • Majburiy emas: lehimlanadigan temir uchun shimgich (metall junidan)

KIM Uno -ni keyinchalik dasturlash uchun sizga quyidagilar kerak bo'ladi:

  • dasturiy ta'minotni yuklash uchun AVR-GCC asboblar zanjiri va avrdude bo'lgan kompyuter
  • Internet -provayder (dasturchi) - rasmda ko'rib turganingizdek, men Arduino Uno -ni maxsus eskiz bilan Internet -provayder sifatida ishlatyapman - shuning uchun hech qanday ajoyib uskunani sotib olishning hojati yo'q.

* odamlarning ba'zi ko'rsatmalari kerak;-)

Tayyormisiz? Keyingi bosqichda biz KIM Uno -ni yig'ishni boshlaymiz.

4 -qadam: Lehimlash №1: Rezistorlar va kondansatkichlarni qo'shish

Lehimlash №1: Rezistorlar va kondansatkichlarni qo'shish
Lehimlash №1: Rezistorlar va kondansatkichlarni qo'shish
Lehimlash №1: Rezistorlar va kondansatkichlarni qo'shish
Lehimlash №1: Rezistorlar va kondansatkichlarni qo'shish
Lehimlash №1: Rezistorlar va kondansatkichlarni qo'shish
Lehimlash №1: Rezistorlar va kondansatkichlarni qo'shish
Lehimlash №1: Rezistorlar va kondansatkichlarni qo'shish
Lehimlash №1: Rezistorlar va kondansatkichlarni qo'shish

Siz har doim birinchi navbatda eng kichik (komponent balandligi bo'yicha) komponentlardan, eng yuqori qismlargacha ishlashingiz kerak. Shuning uchun biz rezistorlarni qo'shib, orqa tarafdagi oyoqlarini egib boshlaymiz, shunda rezistorlar lehimlanishi va joyida qolishi oson bo'ladi. Keyin uzun simlarni kesib oling.

Bundan tashqari, rasmlarda ko'rsatilmagan, xuddi shu tarzda kichik 100 nF kondansatör qo'shing.

Bir maslahat: simli oyoqlarni kichik idishda saqlang, ba'zida ular yordamga keladi.

5 -qadam: Lehimlash №2: Klaviaturani yig'ish

Lehimlash №2: Klaviaturani yig'ish
Lehimlash №2: Klaviaturani yig'ish
Lehimlash №2: Klaviaturani yig'ish
Lehimlash №2: Klaviaturani yig'ish
Lehimlash №2: Klaviaturani yig'ish
Lehimlash №2: Klaviaturani yig'ish

Keyingi qadam - 20 ta SMD sensorli kalitini lehimlash. Bu ish biroz chalkash bo'lgani uchun, biz hozirda, tenglikni ishchi dastgohga yotqizganda qilamiz.

Biz yuqoridan pastgacha (yoki agar PCB fotosuratda ko'rsatilgandek yo'naltirilgan bo'lsa, chapdan o'ngga) ishlaymiz va birinchi qatordan boshlaymiz: har bir kalit uchun to'rtta prokladkadan birini tanlang va uni oq qalam bilan namlang.

Keyin kalitni ushlab, ehtiyotkorlik bilan to'rtta o'tirgichga joylashtiring. So'ngra, faqat siz tanlagan va oqim bilan tayyorlangan yostiqdagi kalitning oyog'ini lehimlang. Buning uchun siz boshlashdan oldin dazmolingiz bilan bir oz lehim olishingiz kerak. Ushbu usuldan foydalanib, kalitlarning butun qatorini to'ldiring, faqat bitta oyog'ini lehimlang.

O'qlar bilan tasvir lehim qanday aniq bajarilganligini ko'rsatadi.

Butun qatorni lehimlagandan so'ng (faqat bitta pin), pinni orqaga qizdirish va kalitni qayta joylashtirish orqali ozgina o'zgartirishlar kiritishingiz mumkin. Kalitlarning iloji boricha yaxshi hizalanishiga ishonch hosil qiling.

Agar siz hizalamadan mamnun bo'lsangiz, siz boshqa barcha pinlarni oqimli qalam bilan namlashingiz mumkin, keyin ularni lehimlantiruvchi temir bilan tegizib lehimlang va unga tegib ozgina lehim qo'shing. Siz lehim to'g'ridan -to'g'ri yostiqqa so'rilganini ko'rasiz.

Bir qatorni lehimlagandan so'ng, siz uni ushlab turishingizni sezasiz va bu unchalik qiyin emas, lekin takrorlanadi. Qolganini qiling, shunda siz qisqa vaqt ichida tugallangan klaviaturaga ega bo'lasiz.

6 -qadam: Lehimlash #3: etti segmentli displey, kalit va pin sarlavhasi

Lehimlash № 3: etti segmentli displey, kalit va pin sarlavhasi
Lehimlash № 3: etti segmentli displey, kalit va pin sarlavhasi
Lehimlash № 3: etti segmentli displey, kalit va pin sarlavhasi
Lehimlash № 3: etti segmentli displey, kalit va pin sarlavhasi
Lehimlash № 3: etti segmentli displey, kalit va pin sarlavhasi
Lehimlash № 3: etti segmentli displey, kalit va pin sarlavhasi

Endi siz kalit va pin sarlavhasini (ixtiyoriy) barmog'ingiz bilan ushlab turishingiz va bitta pinni payvandlash orqali qo'shib qo'yishingiz mumkin, shunda siz boshqa pinlarni lehimlab, oxirigacha dastlabki tutqichga tegizishingiz mumkin.

Ehtiyot bo'ling, o'zingizni issiq lehim bilan yoqib yubormang. Agar bu sizga mos kelmasa, siz komponentni ushlab turish uchun ozgina lentani (masalan, rassom tasmasini) ishlatishingiz mumkin. Shunday qilib, ikkala qo'lingiz ham erkin harakatlanadi.

Etti segmentli displeylar xuddi shu tarzda lehimlanadi (rasmga qarang): siz uni joylashtirasiz, qo'lingiz bilan yoki lenta bilan ushlab turasiz va boshqa pinlarni lehimlab qo'yishingiz mumkin.

Ehtiyot bo'ling va etti segmentli displeyni to'g'ri yo'nalishga qo'ying (o'nlik nuqta klaviaturaga qaragan holda). Aks holda muammoga duch kelasiz …

7 -qadam: Lehimlash №4: Mikrokontrollerni lehimlash

Lehimlash №4: Mikrokontrollerni lehimlash
Lehimlash №4: Mikrokontrollerni lehimlash

Endi sizda juda ko'p mashqlar bor, siz oldinga siljishingiz mumkin va tepada (yoki birinchi pim) ustki tomoni kalitga qaragan holda mikrokontrollerni qo'yishingiz mumkin. Yassi qisqichlardan foydalanib, siz mikrokontrolderning oyoqlarini ehtiyotkorlik bilan egishingiz mumkin, shunda ular tenglikni teshiklariga mos keladi.

Bu mahkam o'rnashgani uchun, mikrokontrollerni o'rnatish uchun sizga boshqariladigan kuch kerak. Uning afzalligi shundaki, u qulab tushmaydi. Bu shuni anglatadiki, siz vaqtingizni olib, uni orqa tomondan lehimlashingiz mumkin.

8 -qadam: Lehimlash №5: Batareya ushlagichlarini qo'shing (oxirgi qadam)

Lehimlash №5: Batareya ushlagichlarini qo'shing (oxirgi qadam)
Lehimlash №5: Batareya ushlagichlarini qo'shing (oxirgi qadam)
Lehimlash №5: Batareya ushlagichlarini qo'shing (oxirgi qadam)
Lehimlash №5: Batareya ushlagichlarini qo'shing (oxirgi qadam)
Lehimlash №5: Batareya ushlagichlarini qo'shing (oxirgi qadam)
Lehimlash №5: Batareya ushlagichlarini qo'shing (oxirgi qadam)

Oxir -oqibat, siz batareya ushlagichlarini orqa tomonga qo'shishingiz kerak. Buning uchun siz oddiy qalamdan foydalaning va to'rtta prokladkani namlang, so'ngra dazmolingizga lehim soling. Batareya ushlagichini ehtiyotkorlik bilan ikkala yostiqqa tekislang. Kontaktlarning ikkala uchida ham teng miqdordagi tenglikni yostig'i ko'rinishi kerak. Dazmol bilan PCB padini va batareya ushlagichining oyog'ini bosing. Lehim yostiq ostidan va uning ustida oqadi va uni rasmda ko'rsatilgandek mahkamlaydi. Agar sizda bu bilan bog'liq muammolar bo'lsa, siz qalam bilan ko'proq oqim qo'shishingiz mumkin.

9 -qadam: Emulyatorni miltillash

Emulyator yonadi
Emulyator yonadi
Emulyator yonadi
Emulyator yonadi
Emulyator yonadi
Emulyator yonadi

"Kim-uno-firmware.zip" biriktirilgan zip arxivida siz emulyator uchun manba kodini topishingiz mumkin, uni allaqachon "main.hex" bilan tuzishingiz mumkin, uni to'g'ridan-to'g'ri mikrokontrollerga yuklashingiz mumkin.

Haqiqatan ham uni ishlatishdan oldin, mikrokontrolderning sug'urta bitlarini shunday sozlash kerakki, u ichki 8 MGts soatni ikkiga bo'linmasdan ishlatadi. Siz ishni quyidagi buyruq bilan bajarishingiz mumkin:

avrdude -c stk500v1 -b 9600 -v -v -P /dev/cu.usbmodem1421 -p m328p -U lfuse: w: 0xe2: m -U hfuse: w: 0xd9: m -U efuse: w: 0xff: m

Agar siz avrdude -ni bilmasangiz: bu dasturlarni mikrokontrollerga yuklash dasturi. Bu haqda bu erda ko'proq ma'lumot olishingiz mumkin. Asosan siz uni o'rnatasiz va keyin u foydalanishga tayyor bo'ladi. O'rnatish uchun siz "-P" argumentini boshqa ketma-ket portga o'zgartirishingiz kerak bo'lishi mumkin. Kompyuteringizda ketma -ket port ishlatilishini tekshiring (masalan, Arduino IDE ichida).

Shundan so'ng, siz ushbu buyruq yordamida dasturiy ta'minotni mikrokontrollerga o'chirib qo'yishingiz mumkin:

avrdude -c stk500v1 -b 9600 -v -v -P /dev/cu.usbmodem1421 -p m328p -U chirog'i: w: main.hex

Yana: xuddi shu narsa yuqoridagi kabi "-P" ga tegishli.

Menda "professional" ISP (tizimli dasturchi) yo'qligi uchun men har doim o'z Arduino UNO (rasmga qarang) va men qo'shgan eskizdan ("arduino-isp.ino", Randall Bohn) foydalanaman. Men bilaman, yangi versiya bor, lekin men bu versiya bilan so'nggi besh yil davomida hech qanday muammoga duch kelmadim, shuning uchun men uni saqlayman. Bu faqat ishlaydi. Eskiz sarlavhasidagi izohdan foydalanib, siz Arduino UNO -dagi pinoutni olasiz va KIM Uno sxemasidan foydalanib (ilova qarang) siz KIM Uno -dagi 1x6 ISP sarlavhasi pinini olishingiz mumkin. Etti segmentli displeyga yaqin kvadrat pin 1 -pin (GND). Quyidagi pinlar (to'g'ri tartibda): RESET, MOSI, MISO, SCK, VCC. VCC -ni 3V3 yoki 5V ga ulashingiz mumkin.

Agar siz 1x6 pinli sarlavhani qo'shmagan bo'lsangiz, siz simli simlardan foydalanishingiz va ularni ulanish teshiklariga qo'yishingiz va barmog'ingiz bilan burishingiz mumkin - xuddi rasmda ko'rsatilgandek. Bu dasturiy ta'minotni o'chirish va sigortalarni o'rnatish uchun etarli aloqa o'rnatadi. Ammo, agar sizga doimiyroq o'rnatish yoqsa, albatta 1x6 pinli sarlavhalarni qo'shishingiz kerak.

Menda ikkita qurilma bor: pinli sarlavhasiz ishlab chiqarish versiyasi va pinli sarlavhali ishlab chiqish versiyasi. Bu ancha qulayroq.

10 -qadam: tugadi

Bajarildi
Bajarildi
Bajarildi
Bajarildi

Endi siz tugatdingiz va o'zingizning subleq dasturlaringizni qog'ozga yozishni, yig'ishni va keyin xotiraga kiritishni boshlashingiz mumkin.

KIM Uno, 0x0a xotira joyidan boshlangan, oldindan dasturlashtirilgan Fibonachchi hisobi bilan birga keladi. U sukut bo'yicha n = 6 ga o'rnatiladi, shuning uchun natija 8 ga teng bo'lishi kerak. Hisoblashni boshlash uchun "O'tish" tugmasini bosing.

11 -qadam: PCB dizaynini tahlil qilish

PCB dizaynini tahlil qilish
PCB dizaynini tahlil qilish
PCB dizaynini tahlil qilish
PCB dizaynini tahlil qilish

Loyihani tugatgandan so'ng, men diqqatga sazovor joylarni topdim va ularni boshqaruv kengashining yangi tahririda ko'rib chiqish kerak:

  • ATMega328p -ning ipak ekranida birinchi pin joylashgan odatiy chiziq yo'q. DIP-28 oyoq izi hatto birinchi pin joylashgan kvadrat yostiqqa ham ega emas. Bu chalkashliklarni oldini olish uchun, albatta, silliq ekran bilan yaxshilanishi kerak
  • provayder sarlavhasida ipak ekranda ulanish yorlig'i yo'q. Bu uni provayderga qanday ulash kerakligini aniqlashni qiyinlashtiradi
  • har qanday chalkashliklarni oldini olish uchun provayder sarlavhasini standart pinli 2x6 pinli sarlavhaga o'zgartirish mumkin

Bu fikrlardan tashqari, men birinchi urinishda qanday ishlaganimdan juda xursandman.

12 -qadam: SUBLEQ -ni qanday dasturlash mumkin?

Image
Image
SUBLEQ -ni qanday dasturlash mumkin?
SUBLEQ -ni qanday dasturlash mumkin?
SUBLEQ -ni qanday dasturlash mumkin?
SUBLEQ -ni qanday dasturlash mumkin?

Avval aytib o'tganimizdek, KIM Uno -ning joriy dasturiy ta'minoti bitta ko'rsatma kompyuteri (OISC) ni taqlid qiladi va hisob -kitoblarni bajarish uchun subleq ko'rsatmasini beradi.

Subleq yo'riqnomasi "nol" dan kichik yoki teng bo'lsa, ayirish va bo'lakni bildiradi. Psevdo-kodda bu quyidagicha ko'rinadi:

subleq A B C mem [B] = mem [B] - mem [A]; agar (mem [B] <= 0) goto C;

KIM Uno 8-bitli mashinani taqlid qilgani uchun, A, B va C argumentlari 8 bitli qiymatlarga ega va shuning uchun u 256 baytli umumiy xotira xotirasiga murojaat qilishi mumkin. Shubhasiz, bu A, B va C ko'p baytli qiymatlarni yaratish orqali uzaytirilishi mumkin. Ammo hozircha oddiy qilib aytaylik.

KIM Uno -da "tashqi qurilmalar" ham bor: displey va klaviatura. Xotira xaritasi juda sodda bo'lsa -da, u atrof -muhit qurilmalarini o'zaro bog'lash uchun xotira xaritali arxitekturadan foydalanadi:

  • 0x00 = Z registri (nol) va nol saqlanishi kerak.
  • 0x01 - 0x06 = oltita bayt, ular har bir segment segmentining qiymatini ko'rsatadi (o'ngdan chapga). 0xf qiymati - qo'shimcha ma'lumot olish uchun manba kodini (main.c) ko'ring.
  • 0x07, 0x08, 0x09 = uch bayt, bu erda har bir bayt ikkita etti segmentli displeyni ko'rsatadi (o'ngdan chapga). Bu xotira joylari natijani ikkita nibblga bo'linmasdan, faqat bitta raqamli xotira joylariga 0x01 - 0x06 joylashtirish uchun ko'rsatishga imkon beradi.
  • 0x0a+ = Dastur 0x0a da boshlanadi. Hozirda "O'tish" tugmasi 0x0a sobit bajariladi.

Ushbu ma'lumot yordamida endi assambleyada dastur yozib, ko'rsatmalarni xotiraga kiritib, keyin uni bajarish mumkin. Faqat bitta ko'rsatma bo'lgani uchun faqat argumentlar (A, B va C) kiritiladi. Shunday qilib, uchta xotira joyidan so'ng, keyingi ko'rsatma argumentlari boshlanadi va hokazo.

Ushbu qadamga biriktirilgan "fibonacci.s" faylini va Fibonachchi dasturining namunasi bo'lgan qo'lda yozilgan dastur tasvirini topishingiz mumkin. Lekin kuting: subleq bo'lmagan uchta ko'rsatma ishlatiladi - aniqrog'i ADD, MOV va HLT. "Nima shartnoma? Faqat bitta ko'rsatma bor demadingizmi, subleq?" siz so'rayapsizmi? Bu juda oson: subleq yordamida bu ko'rsatmalarni juda oson taqlid qilish mumkin:

MOV a, b - a dan b gacha bo'lgan joylardagi ma'lumotlarni nusxalash:

  1. subleq b, b, 2 (keyingi ko'rsatma)
  2. a, Z, 3 subleq (keyingi ko'rsatma)
  3. subleq Z, b, 4 (keyingi ko'rsatma)
  4. subleq Z, Z, masalan. 5 (keyingi ko'rsatma)

Mem - mem [a] ni bajaradigan va natijani mem ustiga yozadigan subleq -ni ayirish xususiyatidan foydalanib, qiymat nol registr yordamida ko'chiriladi. Va "subleq Z, Z, …" Z qiymatidan qat'i nazar, nol registrini 0 ga qaytaradi.

ADD a, b - a + b qiymatlarini qo'shadi va yig'indini bda saqlaydi:

  1. a, Z, 2 subleq (keyingi ko'rsatma)
  2. subleq Z, b, 3 (keyingi ko'rsatma)
  3. subleq Z, Z, masalan. 4 (keyingi ko'rsatma)

Bu yo'riqnoma, shuningdek, ayirish xususiyatidan foydalanib, mem + mem [a] bo'lgan mem - (- mem [a]) ni hisoblab chiqadi.

HLT - protsessorni to'xtatadi va bajarishni to'xtatadi:

Ta'rif bo'yicha, emulyator CPU 0xff (yoki qo'shiq bo'lsa -1) ga o'tib ketsa, uni to'xtatishni xohlashini biladi. Shunday qilib, oddiy

sub, Z, Z, -1

ishni bajaradi va emulyatorga emulyatsiyani tugatish kerakligini ko'rsatadi.

Ushbu uchta oddiy ko'rsatma yordamida Fibonachchi algoritmini amalga oshirish mumkin va yaxshi ishlaydi. Buning sababi shundaki, OISC "haqiqiy" kompyuter hisoblashi mumkin bo'lgan hamma narsani faqat subleq ko'rsatmasi bilan hisoblay oladi. Lekin, albatta, kodning uzunligi va tezligi kabi juda ko'p farqlar mavjud. Ammo shunga qaramay, bu past darajadagi dasturiy ta'minot va kompyuterlarni o'rganish va tajriba o'tkazishning ajoyib usuli.

Ushbu qadamga biriktirilgan "kim_uno_tools.zip" arxivini ham topishingiz mumkin. U KIM Uno uchun bir nechta asosiy yig'uvchi va simulyatorni o'z ichiga oladi. Ular NodeJS -da yozilgan - uni o'rnatganingizga ishonch hosil qiling.

Dasturlarni yig'ish

Agar siz "fibonacci/fibonacci.s" ga qarasangiz, u muhokama qilingan fibonachchi dasturining manba kodi ekanligini bilib olasiz. Uni yig'ish va undan KIM Uno ishlashi uchun dastur yaratish uchun siz quyidagi buyruqni kiritasiz ("kim_uno_tools.zip" arxivining ildiziga):

tugun birikadi.js fibonacci/fibonacci.s

Agar siz xato qilgan bo'lsangiz yoki natijada paydo bo'lgan dasturni to'kib qo'ysangiz, u xato yozadi. Uni saqlash uchun siz chiqishni nusxalashingiz va faylga saqlashingiz yoki oddiygina ushbu buyruqni bajarishingiz mumkin:

tugun assemble.js fibonacci/fibonacci.s> sizning faylingiz.h

Chiqish to'g'ridan -to'g'ri KIM Uno dasturiy ta'minotiga C sarlavhali fayl sifatida kiritilishi mumkin, lekin simulyator uni simulyatsiya qilish uchun ham ishlatishi mumkin. Shunchaki kiriting:

tugun sim.js sizning faylingiz.h

Va sizga simulyatsiya natijasi va displeyda KIM Uno kutgan chiqishi taqdim etiladi.

Bu ushbu vositalarga juda qisqacha kirish edi; Men ular bilan o'ynashni va ular qanday ishlashini ko'rib chiqishni maslahat beraman. Shunday qilib, siz chuqur bilimga ega bo'lasiz va CPU, ko'rsatmalar, montajchilar va emulyatorlarning ishlash tamoyillarini o'rganasiz;-)

13 -qadam: Outlook

Outlook
Outlook
Outlook
Outlook
Outlook
Outlook

Tabriklaymiz

Agar siz buni o'qigan bo'lsangiz, ehtimol siz hamma narsani o'rgandingiz va o'zingizning KIM Uno -ni qurdingiz. Bu haqiqatan ham yoqimli.

Ammo sayohat bu bilan tugamaydi - KIM Uno -ni o'zgartirish va uni sizning xohishingiz va xohishingizga ko'ra sozlashning cheksiz ko'p variantlari mavjud.

Masalan, KIM Uno mashhur "MOS 6502" yoki "Intel 8085", "8086" yoki "8088" ni taqlid qilishi mumkin bo'lgan "haqiqiy" retro protsessor emulyatori bilan jihozlangan bo'lishi mumkin. Keyin men OISClar haqida bilib olishimdan oldin, bu mening tasavvurimga to'g'ri keladi.

Ammo boshqa foydalanish mumkin, chunki apparat dizayni juda umumiy. KIM Uno -dan foydalanish mumkin …

  • … masofadan boshqarish pulti, masalan. CNC yoki boshqa qurilmalar uchun. Ehtimol, simli yoki IR diodli yoki boshqa simsiz uzatuvchi bilan jihozlangan
  • … (o'n oltilik) cho'ntak kalkulyatori. Dasturiy ta'minotni juda oson sozlash mumkin va taxta dizaynini ko'p o'zgartirish shart emas. Ehtimol, ipak ekran matematik operatsiyalar bilan moslashtirilishi mumkin va segmentlar orasidagi bo'shliqni olib tashlash mumkin. Bundan tashqari, u allaqachon ushbu o'zgarishga tayyor

Umid qilamanki, siz KIM Uno -ni kuzatib borganingiz va men loyihalashtirganimdek, siz ham zavq oldingiz. Va agar siz uni kengaytirsangiz yoki o'zgartirsangiz - menga xabar bering. Salom!

PCB musobaqasi
PCB musobaqasi
PCB musobaqasi
PCB musobaqasi

PCB tanlovida ikkinchi o'rinni egalladi

Tavsiya: