Mündəricat:

KIM Uno - 5 Avroluq Mikroprosessor Dev Kit Emulatoru: 13 Addım (Şəkillərlə birlikdə)
KIM Uno - 5 Avroluq Mikroprosessor Dev Kit Emulatoru: 13 Addım (Şəkillərlə birlikdə)

Video: KIM Uno - 5 Avroluq Mikroprosessor Dev Kit Emulatoru: 13 Addım (Şəkillərlə birlikdə)

Video: KIM Uno - 5 Avroluq Mikroprosessor Dev Kit Emulatoru: 13 Addım (Şəkillərlə birlikdə)
Video: CS50 2014 – лекция Стива Балмера по CS50 2024, Iyun
Anonim
Image
Image
KIM Uno - 5 Avroluq Mikroprosessor Dev Kit Emulatoru
KIM Uno - 5 Avroluq Mikroprosessor Dev Kit Emulatoru
KIM Uno - 5 Avroluq Mikroprosessor Dev Kit Emulatoru
KIM Uno - 5 Avroluq Mikroprosessor Dev Kit Emulatoru

KIM Uno, (retro) mikroprosessorlar üçün portativ, proqram təminatlı bir inkişaf dəstidir. Ancaq bu fikri keçmişə dönərək təqdim edim:

2018-ci ilin sonlarında, MOS Technology, Inc-dən məşhur 6502 CPU-nun yaradılmasında iştirak edən Chuck Peddle tərəfindən hazırlanan məşhur KIM-1 kimi kiçik bir portativ mikroprosessor qurğusu qurmaq istədiyimi düşündüm.

Ancaq ayrı bir məntiq komponentləri olan "çılpaq sümüklü" bir qurğunun qurulması heç bir seçim deyildi, çünki böyük bir enerji təchizatına ehtiyac var idi (çünki bu qədim qurğular ciddi bir cərəyan alır) və inkişaf da çox vaxt aparacaq. Və indi istəyirəm!

Buna görə, KIM Uno -nu bir ələ sığan və iki CR2032 batareyası ilə işləyən portativ bir cihaz kimi hazırladım. İstədiyiniz bir CPU -nu təqlid etmək (və ya simulyasiya etmək) üçün 8 MHz -də işləyən ATMega328p ("Arduino") mikro nəzarətçisindən istifadə edir. Bu arxitektura, emulyasiya edilmiş CPU -ların mikro nəzarətçinin flaş yaddaşına uyğun olan hər hansı bir şeylə əvəzlənə biləcəyini də təmin edir. Beləliklə, çox məqsədli bir cihazdır.

Təsadüfən daha sonra YouTube -da "Bir Təlimat Kompüteri" və ya OISC -dən bəhs edilən "Ultimate Apollo Guidance Computer Talk (34C3)" adlı çox yaxşı bir söhbətə baxdım. Onlardan xəbərim yox idi və bunu həyata keçirmək üçün mükəmməl namizəd kimi gördüm.

KIM Uno, CPU -nu yalnız bir təlimatla təqlid edir: subleq - sıfırdan az və ya bərabər olduqda çıxarın və bölün.

Bu təlimatı mənimlə birlikdə izləsəniz, qısa müddətdə öz KIM Uno qura bilərsiniz. Və ən yaxşı tərəfi - zövqünüzə uyğun olaraq dəyişdirə biləcəyinizdən başqa - hazırlamaq üçün cəmi 4, 75 avroya başa gəlir (2018 -ci ilin sonuna).

Bir ipucu: Bu təlimatlandırmanın fərqli addımları ilə təmin edilən bütün faylları ehtiva edən bir Git anbarı var. Bəzi mənbələri dəyişdirmək və bunları bizimlə bölüşmək istəsəniz, bir PR edə bilərsiniz. Ancaq eyni zamanda bütün faylları bir yerdə yükləyə bilərsiniz. Sadəcə https://github.com/maxstrauch/kim-uno ünvanına. Təşəkkürlər!

Eyni (KIM Uno) adlanan və 6502 KIM Uno -nun həqiqi bir nüsxəsini hazırlayan başqa olduqca maraqlı bir layihə var. Burada yoxlayın. Yaradıcı hətta dəsti satır. 6502 ilə maraqlanırsınızsa və bu layihəni bəyənirsinizsə, oraya baxmalısınız!

Addım 1: PCB əldə etmək

PCB əldə etmək
PCB əldə etmək
PCB əldə etmək
PCB əldə etmək

Gördüyünüz kimi, fürsətdən istifadə edərək bir PCB hazırladım və peşəkar şəkildə hazırlanmasına icazə verdim. Xaricdən istehsal edib sizə göndərmək çox vaxt aparacaq (dünyanın harasında olduğunuzdan asılı olaraq;-)), sifariş verilməsi ilk addımdır. PCB hazırlanıb sizə göndərildikdə digər addımlara davam edə bilərik.

PCB -lərimi Çində PCBWay -da cəmi 5 dollara sifariş verdim. PCBWay -ı PCB -lər üçün goto istehsalçısı olaraq təqdim etməkdən heç bir fayda görmürəm, sadəcə mənim üçün yaxşı işləyib və sizin üçün də yaxşı işləyə bilər. Ancaq bunları JLCPCB, OSH Park və ya hər hansı bir yerli PCB şirkəti kimi başqa bir yerdə sifariş edə bilərsiniz.

Ancaq bunları PCBWay-də sifariş etmək istəsəniz, əlavə edilmiş "kim-uno-rev1_2018-12-12_gerbers.zip" ZIP faylını yükləyə və heç bir dəyişiklik etmədən birbaşa PCBWay-a yükləyə bilərsiniz. Bu, şəkillərdə görə biləcəyiniz PCB -ləri sifariş etmək üçün istifadə etdiyim orijinal sənəddir.

Onları başqa bir istehsalçıdan sifariş edirsinizsə, onları orijinal KiCad mənbələrindən yenidən ixrac etməyiniz lazım ola bilər, çünki onları burada tapa biləcəyiniz PCBWay spesifikasiyaları ilə yaratdım. Orijinal KiCad mənbələri üçün "kim-uno-kicad-sources.zip" yükləyin və çıxarın.

Ancaq ikinci bir yol da var: PCB sifariş etmək istəmirsinizsə, perfboard və ya hətta bir çörək taxtası istifadə edərək öz versiyanızı qura bilərsiniz.

Hər halda: PCB -lər artıq yolda olduğundan, digər hissələrə diqqət edə bilərik! Gəl, məni izlə.

Addım 2: Komponentlərin mənbəyi

Komponentlərin mənbəyi
Komponentlərin mənbəyi
Komponentlərin mənbəyi
Komponentlərin mənbəyi
Komponentlərin mənbəyi
Komponentlərin mənbəyi

İndi komponentləri almalısınız. Bunun üçün ehtiyac duyduğunuz bütün komponentlərin və miqdarların ümumi görünüşünü, bu addıma əlavə edilmiş bir BOM -u (materialların siyahısı) tapa bilərsiniz.

BOM -da eBay -ə bağlantılar var. Bunu oxuduğunuz zaman bu təkliflər bağlana bilər, ancaq bir başlanğıc nöqtəsi olaraq istifadə edə bilərsiniz. İstifadə olunan komponentlər olduqca standartdır.

Aşağıda sizə lazım olan bütün komponentləri izah edəcəyəm:

  • Yeddi seqmentli ekranlar üçün 7x 1 kΩ rezistorlar. Parlaqlığını artırmaq üçün dəyəri (məsələn, 470 to -ə) endirə bilərsiniz, amma çox da azaltmayın, əks halda LEDlər sönəcək və ya batareya çox tez boşalacaq. Bu dəyərin mənim üçün işlədiyini gördüm
  • 1x 10 kΩ mikrokontrolörün RESET xətti üçün bir çəkmə müqaviməti olaraq
  • Gərginlik sıçrayışlarını hamarlaşdırmaq üçün 1x 100nF kondansatör (bu, batareyalardan istifadə etdiyimiz üçün baş verməməlidir, amma yaxşı ölçü üçün …)
  • DIP-28 paketində 1x ATMega328P (adətən ATMega328P-PU adlanır)
  • 1x əsas PCB - əvvəlki addıma baxın; ya özünüz sifariş verdiniz, ya da tikdiniz
  • 2x CR2032 batareya tutacaqları
  • Əsasən üç kontaktı olan və hər iki vəziyyətində (ya açıq, ya da söndürülmüş) iki kontağı birləşdirən 1x SPDT (tək qütblü, ikiqat atma) açarı
  • Klaviatura üçün 20x toxunma düymələri. PCB -nin arxa tərəfini istifadə etmək üçün SMD toxunma düymələrindən istifadə etdim (standart 6x6x6 mm olanlar) - gördüyünüz kimi lehimləmək olduqca asandır.
  • İSTEĞE BAĞLI: Proqramçıya qoşulmaq üçün 1x1x6 pinli başlıq, lakin bu, sonradan görəcəyiniz kimi isteğe bağlıdır
  • 4 rəqəmdən ibarət 1x yeddi seqmentli ekran və 2 rəqəmdən ibarət 1x yeddi seqmentli ekran - lövhədə ümumi anod naqilləri olan yalnız 0,36 düym (9, 14 mm) elementlər alınacaq. İş vahidi əldə etmək üçün hər iki tələb vacibdir. Həm də bu tip yeddi seqmentli ekran çox yaygındır

Bu addıma əlavə olaraq istifadə olunan komponentlərin ölçüləri və növləri haqqında daha dəqiq məlumatları ehtiva edən "component-datasheets.zip" faylını tapa bilərsiniz. Lakin komponentlərin çoxu çox standartdır və az pula asanlıqla əldə edilə bilər.

İndi lehimləməyə davam etmək üçün bütün komponentlər hazır olana qədər gözləmək lazımdır. Bu müddət ərzində artıq sona qədər atlaya bilərsiniz və istəsəniz KIM Uno istifadə haqqında bir az oxuya bilərsiniz.

Addım 3: Lehim Alətlərinə Baxış

Lehim Alətlərinə Baxış
Lehim Alətlərinə Baxış
Lehim Alətlərinə Baxış
Lehim Alətlərinə Baxış

KIM Uno -nun lehimlənməsi və qurulması üçün şəkillərdə göstərilən vasitələrə ehtiyacınız var:

  • Tel kəsici (komponent tellərinin ucunu kəsmək üçün)
  • Düz kəlbətinlər
  • Cımbız cütü
  • (layiqli) Qalın olmayan lehim - 0,56 mm lehim istifadə edirəm
  • Bir lehimləmə dəmiri - yüksək keyfiyyətli bir lehimləmə dəmirinə ehtiyacınız yoxdur (çünki burada da raket elmi ilə məşğul deyilik) - Ersa FineTip 260 -ı uzun müddətdir istifadə edirəm və həqiqətən yaxşıdır
  • Bir qələm qələmi: komponentlərə və yastiqciklərə axı əlavə etmək, lehimləməyi daha asanlaşdırır, çünki lehim öz başına doğru yerə "axır"*
  • İsteğe bağlı: lehimləmə dəmiriniz üçün bir süngər (metal yundan)

Daha sonra KIM Uno proqramlaşdırmaq üçün sizə lazım olacaq:

  • firmware yükləmək üçün AVR-GCC alət zəncirinə və avrdude malik bir kompüter
  • bir ISP (proqramçı) - şəkildə gördüyünüz kimi Arduino Uno -nu xüsusi bir eskizlə ISP olaraq istifadə edirəm - buna görə də heç bir xülya avadanlıq almağa ehtiyac yoxdur

* insanların bəzi rəhbərliyinə ehtiyac var;-)

Siz hazırsınızmı? Növbəti addımda KIM Uno yığmağa başlayacağıq.

Addım 4: Lehimləmə #1: Rezistorlar və kondansatörlər əlavə edin

Lehimləmə #1: Rezistorlar və kondansatörlər əlavə etmək
Lehimləmə #1: Rezistorlar və kondansatörlər əlavə etmək
Lehimləmə #1: Rezistorlar və kondansatörlər əlavə edin
Lehimləmə #1: Rezistorlar və kondansatörlər əlavə edin
Lehimləmə #1: Rezistorlar və kondansatörlər əlavə edin
Lehimləmə #1: Rezistorlar və kondansatörlər əlavə edin
Lehimləmə #1: Rezistorlar və kondansatörlər əlavə etmək
Lehimləmə #1: Rezistorlar və kondansatörlər əlavə etmək

Həmişə əvvəlcə ən kiçik (komponent hündürlüyü baxımından) komponentlərdən, ən yüksək komponentlərə qədər işləməlisiniz. Buna görə də, rezistorların lehimlənməsi və yerində qalması asan olması üçün rezistorları əlavə edərək arxa ayaqları üzərində əyilməyə başlayırıq. Sonra uzun telləri kəsin.

Ayrıca, şəkillərdə göstərilməyən kiçik 100 nF kondansatörü eyni şəkildə əlavə edin.

Bir ipucu: bu tel ayaqları kiçik bir qabda saxlayın, bəzən lazımlı gəlir.

Addım 5: Lehimləmə #2: Klaviaturanın yığılması

Lehimləmə #2: Klaviaturanın yığılması
Lehimləmə #2: Klaviaturanın yığılması
Lehimləmə #2: Klaviaturanın yığılması
Lehimləmə #2: Klaviaturanın yığılması
Lehimləmə #2: Klaviaturanın yığılması
Lehimləmə #2: Klaviaturanın yığılması

Növbəti addım 20 SMD toxunma açarını lehimləməkdir. Bu iş bir az anlaşılmaz olduğundan, PCB tezgahın üstünə düz qoyanda indi edirik.

Yuxarıdan aşağıya (və ya PCB fotoşəkillərdə göstərildiyi kimi yönəldilmişsə soldan sağa) işləyəcəyik və birinci sıra ilə başlayacağıq: hər keçid üçün dörd yastıqdan birini seçin və qələm qələmi ilə isladın.

Sonra bir düyməni tutmaq və diqqətlə dörd yastığa yerləşdirmək üçün bir cımbız istifadə edin. Sonra yalnız seçdiyiniz və axını ilə hazırladığınız yastığın üzərindəki keçid ayağını lehimləyin. Bunun üçün başlamazdan əvvəl ütünüzlə bir az lehim "tutmalısınız". Bu üsuldan istifadə edərək, yalnız bir ayağı lehimləyərək bütün açar sıralarını tamamlayın.

Okları olan şəkil, lehimləmə prosesinin tam olaraq necə edildiyini göstərir.

Bütün cərgəni (yalnız bir pinlə) lehimlədikdən sonra, pimi yenidən qızdırıb açarı yenidən yerləşdirərək kiçik düzəlişlər edə bilərsiniz. Şalterlərin mümkün qədər yaxşı hizalandığından əmin olun.

Hizalamadan məmnun olsanız, bütün digər sancaqları axı qələmi ilə isladın və sonra lehimləmə dəmiri ilə toxunaraq lehimləyin və toxunaraq bir az lehim əlavə edin. Lehimin birbaşa yastığa çəkildiyini görəcəksiniz.

Bir sıra lehimlədikdən sonra başa düşürsünüz ki, bu o qədər də çətin deyil, amma təkrarlanır. Beləliklə, qalanını et və qısa müddətdə bitmiş bir klaviatura ilə başa çatacaqsan.

Addım 6: Lehimləmə #3: Yeddi Segment Ekranı, Açar və Pin Başlığı

Lehimləmə #3: Yeddi Segment Ekranı, Açar və Pin Başlığı
Lehimləmə #3: Yeddi Segment Ekranı, Açar və Pin Başlığı
Lehimləmə #3: Yeddi Segment Ekranı, Açar və Pin Başlığı
Lehimləmə #3: Yeddi Segment Ekranı, Açar və Pin Başlığı
Lehimləmə #3: Yeddi Segment Ekranı, Açar və Pin Başlığı
Lehimləmə #3: Yeddi Segment Ekranı, Açar və Pin Başlığı

İndi keçid və pin başlığını (isteğe bağlı) barmağınızla tutaraq PCB -yə tutmaq üçün bir pimi lehimləyərək əlavə edə bilərsiniz ki, digər pinləri də lehimləyə və nəhayət ilkin tutma pininə toxunun.

Özünüzü isti lehimləmə dəmiri ilə yandırmamaq üçün diqqətli olun. Əgər bu sizi qane etmirsə, komponenti tutmaq üçün bir az lent (məsələn, rəssam lenti) istifadə edə bilərsiniz. Bu şəkildə hər iki əliniz sərbəst hərəkət edə bilər.

Yeddi seqmentli ekranlar eyni şəkildə lehimlənir (şəklə baxın): onu qoydunuz, əlinizlə və ya lentinizlə tutdunuz və digər pinləri lehimləyərkən yerində saxlamaq üçün iki əks sancağı lehimlədiniz.

Ancaq diqqətli olun və yeddi seqmentli ekranı düzgün istiqamətə qoyun (ondalık nöqtələri klaviaturaya baxaraq). Əks təqdirdə problemlə üzləşirsiniz …

Addım 7: Lehimləmə #4: Mikrokontrolörün lehimlənməsi

Lehimləmə #4: Mikrokontrolörün lehimlənməsi
Lehimləmə #4: Mikrokontrolörün lehimlənməsi

İndi çox təcrübəniz olduğu üçün, irəli gedə bilərsiniz və yuxarıdakı çentik (və ya ilk pin) açara tərəf baxaraq mikrokontrolöre daxil edə bilərsiniz. Düz kəlbətin istifadə edərək, mikrokontrolörün ayaqlarını PCB üzərindəki deliklərə uyğun şəkildə diqqətlə bükə bilərsiniz.

Sıx bir şəkildə yerləşdiyindən, mikrokontrolörü taxmaq üçün bir qədər idarə olunan qüvvəyə ehtiyacınız var. Üstünlüyü, düşməməsidir. Bu o deməkdir ki, vaxtınızı alıb arxadan lehimləyə bilərsiniz.

Addım 8: Lehimləmə #5: Batareya Tutacaqlarını əlavə edin (son addım)

Lehimləmə #5: Batareya Tutacaqlarını əlavə edin (son addım)
Lehimləmə #5: Batareya Tutacaqlarını əlavə edin (son addım)
Lehimləmə #5: Batareya Tutacaqlarını əlavə edin (son addım)
Lehimləmə #5: Batareya Tutacaqlarını əlavə edin (son addım)
Lehimləmə #5: Batareya Tutacaqlarını əlavə edin (son addım)
Lehimləmə #5: Batareya Tutacaqlarını əlavə edin (son addım)

Nəhayət, batareya tutacaqlarını arxaya əlavə etməlisiniz. Bunun üçün sadəcə flux qələmdən istifadə edin və dörd yastığı isladın və sonra ütünüzə bir az lehim alın. Batareya tutucusunu hər iki yastığa diqqətlə hizalayın. Kontaktların hər iki ucunda eyni miqdarda görünən PCB yastığı olmalıdır. Ütü ilə PCB padinə və batareya tutacağının ayağına toxunun. Lehim, yastığın altından və üstündən axacaq və şəkildə göstərildiyi kimi yerinə sabitlənəcəkdir. Bununla əlaqədar probleminiz varsa, qələmlə daha çox axın əlavə edə bilərsiniz.

Addım 9: Emulatorun yanıb sönməsi

Emulatorun yanıb sönməsi
Emulatorun yanıb sönməsi
Emulatorun yanıb sönməsi
Emulatorun yanıb sönməsi
Emulatorun yanıb sönməsi
Emulatorun yanıb sönməsi

Əlavə edilmiş "kim-uno-firmware.zip" zip arxivində, birbaşa mikrokontrolörə yükləyə biləcəyiniz, artıq tərtib edilmiş "main.hex" ilə birlikdə emulatorun mənbə kodunu tapa bilərsiniz.

Həqiqətən istifadə etməzdən əvvəl, mikrokontrolörün qoruyucu bitlərini, 8 MHz daxili saatı yarıya bölmədən istifadə etməsi üçün qurmalısınız. İşi aşağıdakı əmrlə edə bilərsiniz:

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

Avrdude bilmirsinizsə: proqramları mikrokontrollerə yükləmək üçün bir proqramdır. Burada daha çox məlumat əldə edə bilərsiniz. Əsasən onu quraşdırırsınız və sonra istifadəyə hazırsınız. Quraşdırma üçün "-P" arqumentini başqa bir seriya limanına dəyişdirməyiniz lazım ola bilər. Zəhmət olmasa kompüterinizdə hansı seriya portunun istifadə olunduğunu yoxlayın (məsələn, Arduino IDE daxilində).

Bundan sonra firmware proqramını mikrokontrolörün üzərinə bu əmrlə yandıra bilərsiniz:

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

Yenə də eyni şey yuxarıdakı kimi "-P" yə aiddir.

"Professional" bir ISP (Sistem İçi Proqramçı) sahibi olmadığım üçün həmişə Arduino UNO (şəkilə bax) və əlavə etdiyim eskizi ("arduino-isp.ino", Randall Bohn) istifadə edirəm. Daha yeni bir versiya olduğunu bilirəm, amma bu versiya ilə son beş ildə heç bir problem yaşamadım, buna görə də saxlayıram. Sadəcə işləyir. Eskizin başlığındakı şərhdən istifadə edərək Arduino UNO -da bir pinout əldə edirsiniz və KIM Uno -nun sxemini istifadə edərək (əlavə edin) KIM Uno üzərindəki 1x6 ISP başlığının pinoutunu əldə edə bilərsiniz. Yeddi seqmentli ekrana yaxın olan kvadrat pin, pin 1 -dir (GND). Aşağıdakı pinlər (düzgün qaydada): RESET, MOSI, MISO, SCK, VCC. VCC -ni ya 3V3 -ə, ya da 5V -ə qoşa bilərsiniz.

1x6 pin başlığını əlavə etməmisinizsə, çörək taxtası tellərindən istifadə edə bilərsiniz və onları bağlantı deliklərinə yerləşdirə və barmağınızla açılaya bilərsiniz - şəkildəki kimi. Bu, proqram təminatını yandırmaq və qoruyucuları qurmaq üçün kifayət qədər əlaqə yaradır. Ancaq daha daimi bir quruluşu sevirsinizsə, mütləq 1x6 pin başlıqlarını əlavə etməlisiniz.

İki cihazım var: pin başlıqları olmayan bir istehsal versiyası və əlaqəli olaraq buraxdığım pin başlıqları olan bir inkişaf versiyası və inkişaf zamanı təkrar -təkrar istifadə edirəm. Bu daha rahatdır.

Addım 10: Bitdi

Bitdi
Bitdi
Bitdi
Bitdi

İndi bitirdiniz və öz subleq proqramlarınızı kağız üzərində yazmağa, yığmağa və sonra yaddaşa daxil etməyə başlaya bilərsiniz.

KIM Uno, 0x0a yaddaş yerindən başlayaraq əvvəlcədən proqramlaşdırılmış Fibonacci hesablaması ilə gəlir. Varsayılan olaraq n = 6 olaraq təyin olunur, buna görə 8 dəyəri ilə nəticələnməlidir. Hesablamaya başlamaq üçün "Git" düyməsini basın.

Addım 11: PCB Dizayn Analizi

PCB Dizayn Təhlili
PCB Dizayn Təhlili
PCB Dizayn Təhlili
PCB Dizayn Təhlili

Bu layihəni bitirdikdən sonra diqqətəlayiq olan və idarə heyətinin yeni bir versiyasında müzakirə edilməli olan bir neçə məqam tapdım:

  • ATMega328p -in ipək ekranında ilk pimin yerləşdiyi adi bir çentik yoxdur. DIP-28 ayaq izində hətta ilk sancağın yerləşdiyi kvadrat yastıq da yoxdur. Qarışıqlığın qarşısını almaq üçün bu, daha ətraflı bir ipək ekranla mütləq təkmilləşdirilməlidir
  • ISP başlığının ipək ekranda heç bir əlaqə etiketi yoxdur. Bu, ISS -ə necə qoşulacağınızı tanımağı çətinləşdirir
  • ISP başlığı, qarışıqlığın qarşısını almaq üçün standart bir pin düzeni ilə 2x6 pin başlığına dəyişdirilə bilər

Bu nöqtələrdən başqa, ilk cəhddə necə çıxdığına və işlədiyinə görə çox xoşbəxtəm.

Addım 12: SUBLEQ necə proqramlaşdırılır?

Image
Image
SUBLEQ necə proqramlaşdırılır?
SUBLEQ necə proqramlaşdırılır?
SUBLEQ necə proqramlaşdırılır?
SUBLEQ necə proqramlaşdırılır?

Əvvəldə qeyd edildiyi kimi, KIM Uno -nun hazırki proqram təminatı Bir Təlimat Kompüterini (OISC) təqlid edir və hesablama aparmaq üçün subleq təlimatı verir.

Subleq təlimatı, sıfırdan az və ya bərabər olduqda çıxart və bölmə deməkdir. Yalan kodda bu belə görünür:

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

KIM Uno 8 bitlik bir maşını təqlid etdiyindən bütün A, B və C arqumentləri 8 bit dəyərlərdir və buna görə də 256 baytlıq ümumi yaddaşa müraciət edə bilər. Aydındır ki, A, B və C çox baytlı dəyərlər verilərək uzadıla bilər. Amma hələlik bunu sadə saxlayaq.

KIM Uno -nun "ətraf qurğuları" da var: ekran və klaviatura. Yaddaş xəritəsi çox sadə olsa da, bu ətraf qurğularla əlaqə qurmaq üçün yaddaş xəritəli bir arxitekturadan istifadə edir:

  • 0x00 = Z reyestri (sıfır) və sıfır saxlanılmalıdır.
  • 0x01 - 0x06 = ekran seqmentlərinin hər birinin dəyərini təmsil edən altı bayt (sağdan sola). 0xf dəyəri - daha ətraflı məlumat üçün mənbə koduna (main.c) baxın.
  • 0x07, 0x08, 0x09 = hər baytın iki yeddi seqmentli ekranı təmsil etdiyi üç bayt (sağdan sola). Bu yaddaş yerləri, nəticəni iki nibble bölmədən sadəcə bir rəqəmin 0x01 - 0x06 yaddaş yerlərində yerləşdirilməsinə imkan verir.
  • 0x0a+ = Bir proqram 0x0a ilə başlayır. Hal -hazırda "Get" düyməsi 0x0a sabitdən icra edir.

Bu məlumatla artıq montajçıya bir proqram yaza və təlimatları yaddaşa daxil edib sonra icra edə bilərsiniz. Yalnız bir göstəriş olduğu üçün yalnız arqumentlər (A, B və C) daxil edilir. Beləliklə, üç yaddaş yerindən sonra növbəti təlimat arqumentləri başlayır və s.

Bu addıma əlavə olaraq, "fibonacci.s" faylını və Fibonacci -nin nümunə tətbiqi olan əlyazma proqramının görüntüsünü tapa bilərsiniz. Ancaq gözləyin: subleq olmayan üç xüsusi təlimat var - xüsusən ADD, MOV və HLT. "Sövdələşmə nədir? Tək bir təlimat olduğunu demədin, subleq?" soruşursan? Çox asandır: subleq ilə bu təlimatları çox asanlıqla təqlid edə bilərsiniz:

MOV a, b - a -dan b -dək yerdəki məlumatların surəti aşağıdakılardan ibarət ola bilər:

  1. alt b, b, 2 (növbəti təlimat)
  2. subleq a, Z, 3 (növbəti təlimat)
  3. alt z, b, 4 (növbəti təlimat)
  4. subleq Z, Z, məs. 5 (növbəti təlimat)

Mem - mem [a] edən və nəticədə mem üzərinə yazan subleq -in çıxma xüsusiyyətindən istifadə edərək, dəyər sıfır qeydindən istifadə edərək kopyalanır. Və "subleq Z, Z,…", Z dəyərindən asılı olmayaraq sıfır qeydini sıfıra sıfırlayır.

ADD a, b - a + b dəyərlərini əlavə edir və c -ni b -də saxlaya bilər:

  1. subleq a, Z, 2 (növbəti təlimat)
  2. alt z, b, 3 (növbəti təlimat)
  3. subleq Z, Z, məs. 4 (növbəti təlimat)

Bu təlimat sadəcə çıxma xüsusiyyətindən istifadə edərək mem + mem [a] olan mem - (- mem [a]) hesablayır.

HLT - CPU -nu dayandırır və icrasını bitirir:

Tərifə görə, emulator bilir ki, CPU 0xff -ə (və ya oxunsa -1) sıçrayarsa onu bitirmək istəyir. Belə ki, sadə

alt Z, Z, -1

işi görür və emulyasiyaya emulyasiyanı dayandırması lazım olduğunu bildirir.

Bu üç sadə təlimatdan istifadə edərək, Fibonacci alqoritmi tətbiq oluna və yaxşı işləyir. Bunun səbəbi, OISC "real" bir kompüterin yalnız subleq təlimatı ilə hesablaya biləcəyi hər şeyi hesablaya biləcəyidir. Ancaq əlbəttə ki, kod uzunluğu və sürəti kimi etmək üçün bir çox güzəştlər var. Ancaq buna baxmayaraq, aşağı səviyyəli proqramlaşdırma və kompüterləri öyrənmək və sınamaq üçün əla bir yoldur.

Bu addıma əlavə olaraq "kim_uno_tools.zip" zip arxivini də tapa bilərsiniz. KIM Uno üçün bir neçə əsas montajçı və simulyatordan ibarətdir. NodeJS -də yazılıb - quraşdırdığınızdan əmin olun.

Proqramların yığılması

"Fibonacci/fibonacci.s" ə baxsanız, bunun müzakirə olunan fibonacci tətbiqi üçün mənbə kodu olduğunu görəcəksiniz. Onu yığmaq və KIM Uno -nun işləyə biləcəyi bir proqram hazırlamaq üçün aşağıdakı əmri daxil edin (çıxarılmış "kim_uno_tools.zip" arxivinin kökündə):

qovşaq birləşir.js fibonacci/fibonacci.s

və ya səhv etmisinizsə və ya nəticələnən proqramı töksəniz ya səhv yazacaq. Yadda saxlamaq üçün çıxışı kopyalayıb bir faylda saxlaya və ya sadəcə bu əmri işlədə bilərsiniz:

node assemble.js fibonacci/fibonacci.s> faylınız.h

Çıxış, bir C başlıq faylı olaraq birbaşa KIM Uno firmware -ə daxil edilə biləcək şəkildə formatlaşdırılmışdır, lakin simulyator simulyasiya etmək üçün də istifadə edə bilər. Sadəcə daxil edin:

node sim.js faylınız.h

Sizə simulyasiya nəticəsi və ekranda KIM Uno -dan gözlənilən çıxış təqdim olunacaq.

Bu alətlərə çox qısa bir giriş idi; Onlarla oynamağı və necə işlədiyini görməyi məsləhət görürəm. Bu yolla dərin bir məlumat əldə edəcək və CPU, təlimat, montajçı və emulyatorların arxasında işləyən prinsipləri öyrənəcəksiniz;-)

Addım 13: Outlook

Outlook
Outlook
Outlook
Outlook
Outlook
Outlook

Təbrik edirik

Bunu oxusanız, ehtimal ki, bütün bu təlimatlardan keçdiniz və öz KIM Uno qurdunuz. Bu həqiqətən gözəldir.

Ancaq səyahət burada bitmir - KIM Uno -nu necə dəyişdirə və ehtiyaclarınıza və zövqünüzə uyğunlaşdıra biləcəyiniz sonsuz sayda seçim var.

Məsələn, KIM Uno, məşhur MOS 6502 və ya Intel 8085, 8086 və ya 8088 -i təqlid edə biləcək "əsl" bir retro CPU emulyatoru ilə təchiz oluna bilər. OISC -ləri öyrənməzdən əvvəl bu, mənim ilk görmə qabiliyyətimə gedəcəkdi.

Ancaq başqa istifadə variantları da var, çünki hardware dizaynı olduqca ümumidır. KIM Uno kimi istifadə edilə bilər …

  • … Uzaqdan idarəetmə CNC və ya digər cihazlar üçün. İR diodu və ya hər hansı digər simsiz ötürücü ilə əlaqəli ola bilər
  • … (Onaltılıq) cib kalkulyatoru. Firmware çox asanlıqla uyğunlaşdırıla bilər və lövhənin dizaynını çox dəyişdirmək lazım deyil. Bəlkə də ipək ekran riyazi əməliyyatlarla uyğunlaşdırıla bilər və seqmentlər arasındakı boşluq aradan qaldırıla bilər. Bunun xaricində artıq bu çevrilməyə hazırdır

Ümid edirəm ki, KIM Uno -nu izlədikcə və inşallah mənim dizayn etdiyim və planlaşdırdığım qədər çox əyləndiniz. Və onu uzatsanız və ya dəyişdirsəniz - mənə bildirin. Sağol!

PCB Müsabiqəsi
PCB Müsabiqəsi
PCB Müsabiqəsi
PCB Müsabiqəsi

PCB Müsabiqəsində ikinci yer

Tövsiyə: