İçindekiler:

KIM Uno - 5€'luk Mikroişlemci Geliştirme Kiti Emülatörü: 13 Adım (Resimlerle)
KIM Uno - 5€'luk Mikroişlemci Geliştirme Kiti Emülatörü: 13 Adım (Resimlerle)

Video: KIM Uno - 5€'luk Mikroişlemci Geliştirme Kiti Emülatörü: 13 Adım (Resimlerle)

Video: KIM Uno - 5€'luk Mikroişlemci Geliştirme Kiti Emülatörü: 13 Adım (Resimlerle)
Video: 2.5 yıldır ses eğitimi alıyorum ve sesim #roblox #keşfet #shorts 2024, Haziran
Anonim
Image
Image
KIM Uno - 5€'luk Mikroişlemci Geliştirme Kiti Emülatörü
KIM Uno - 5€'luk Mikroişlemci Geliştirme Kiti Emülatörü
KIM Uno - 5€'luk Mikroişlemci Geliştirme Kiti Emülatörü
KIM Uno - 5€'luk Mikroişlemci Geliştirme Kiti Emülatörü

KIM Uno, (retro) mikroişlemciler için taşınabilir, yazılım tanımlı bir geliştirme kitidir. Ama zaman içinde geriye giderek bu fikri tanıtmama izin verin:

2018'in sonlarında aklıma, MOS Technology, Inc.'in ünlü KIM-1'i gibi küçük bir taşınabilir mikroişlemci geliştirme kiti oluşturmak istediğim geldi ve aynı zamanda 6502 CPU'nun yapımında yer alan Chuck Peddle tarafından tasarlandı.

Ancak, büyük bir güç kaynağına ihtiyaç duyduğundan (bu eski cihazlar ciddi bir akım alma eğiliminde olduğundan) ayrı mantık bileşenlerine sahip bir "çıplak kemik" geliştirme kiti oluşturmak bir seçenek değildi ve ayrıca geliştirme çok zaman alacaktı. Ve şimdi istiyorum!

Bu nedenle KIM Uno'yu tek ele sığan ve iki adet CR2032 pille çalışan taşınabilir bir cihaz olarak tasarladım. İstenilen bir CPU'yu taklit etmek (veya simüle etmek) için 8 MHz'de çalışan ATMega328p ("Arduino") mikro denetleyicisini kullanır. Bu mimari aynı zamanda öykünülmüş CPU'ların mikro denetleyicinin flash belleğine uyan herhangi bir şeyle değiştirilebilmesini sağlar. Yani çok amaçlı bir cihazdır.

Tesadüfen daha sonra YouTube'da "One Instruction Set Computers" veya OISC'lerden bahseden The Ultimate Apollo Guidance Computer Talk (34C3) adlı gerçekten güzel bir konuşma izledim. Onları bilmiyordum ve bunu uygulamak için mükemmel bir aday olarak buldum.

KIM Uno, yalnızca bir komutla bir CPU'ya öykünür: subleq - sıfırdan küçük veya sıfıra eşitse çıkarma ve dallandırma.

Bu Eğitilebilir Kitap aracılığıyla benimle birlikte takip ederseniz, kendi KIM Uno'nuzu kısa sürede oluşturabilirsiniz. Ve en iyi yanı - zevkinize göre değiştirebilmenizin yanı sıra - sadece 4, 75 € maliyeti (2018 sonu itibariyle).

Bir ipucu: Bu talimatın farklı adımlarında sağlanan tüm dosyaları içeren bir Git deposu var. Bazı kaynakları değiştirmek ve bizimle paylaşmak istemeniz durumunda, bir PR yapabilirsiniz. Ancak tüm dosyaları aynı anda orada da indirebilirsiniz. Sadece https://github.com/maxstrauch/kim-uno adresine. Teşekkürler!

6502 KIM Uno'nun gerçek bir kopyasını yapan aynı (KIM Uno) adlı oldukça ilginç bir proje daha var. Buradan kontrol edin. Yaratıcı kiti bile satıyor. Yani 6502 ile ilgileniyorsanız ve bu projeyi beğendiyseniz, oraya bir göz atmalısınız!

Adım 1: PCB'nin Kaynaklanması

PCB tedarik etmek
PCB tedarik etmek
PCB tedarik etmek
PCB tedarik etmek

Gördüğünüz gibi, bir PCB tasarlama fırsatını kullandım ve profesyonelce yapılmasına izin verdim. Dışarıdan üretip size ulaştırmak çok zaman alacağından (dünyanın neresinde olduğunuza bağlı olarak;-)), sipariş vermek ilk adımdır. Daha sonra PCB yapılıp size gönderilirken diğer adımlara devam edebiliriz.

PCB'lerimi Çin'de PCBWay'den sadece 5 dolara sipariş ettim. PCBWay'i PCB'ler için goto üreticim olarak sunmaktan hiçbir fayda görmüyorum, sadece benim için iyi çalıştı ve sizin için de iyi çalışabilir. Ancak bunları JLCPCB, OSH Park veya herhangi bir yerel PCB şirketi gibi herhangi bir yerden sipariş edebilirsiniz.

Ancak bunları PCBWay'den sipariş etmek istiyorsanız, ekteki " kim-uno-rev1_2018-12-12_gerbers.zip" ZIP dosyasını indirebilir ve herhangi bir değişiklik yapmadan doğrudan PCBWay'e yükleyebilirsiniz. Bu, resimlerde gördüğünüz PCB'leri sipariş etmek için kullandığım orijinal dosya.

Bunları başka bir üreticiden sipariş ediyorsanız, orijinal KiCad kaynaklarından yeniden dışa aktarmanız gerekebilir, çünkü bunları PCBWay'in burada bulabileceğiniz özellikleriyle oluşturdum. Orijinal KiCad kaynakları için " kim-uno-kicad-sources.zip" dosyasını indirin ve çıkarın.

Ancak ikinci bir yol bile var: PCB'yi sipariş etmek istemiyorsanız, perfboard veya hatta bir breadboard kullanarak kendi sürümünüzü oluşturabilirsiniz.

Her neyse: PCB'ler yolda olduğu için diğer parçalara odaklanabiliriz! Gel, beni takip et.

Adım 2: Bileşenleri Tedarik Etme

Bileşenleri Tedarik Etme
Bileşenleri Tedarik Etme
Bileşenleri Tedarik Etme
Bileşenleri Tedarik Etme
Bileşenleri Tedarik Etme
Bileşenleri Tedarik Etme

Şimdi bileşenleri almanız gerekiyor. Bunun için ihtiyacınız olan tüm bileşenlerin ve miktarların genel bir resmini bu adıma eklenmiş olarak ve ayrıca bir Malzeme Listesi (malzeme listesi) bulacaksınız.

Malzeme Listesi, eBay'e bağlantılar içerir. Bunu okuduğunuzda bu teklifler kapalı olsa da, bunu bir başlangıç noktası olarak kullanabilirsiniz. Kullanılan bileşenler oldukça standarttır.

Aşağıda size gerekli tüm bileşenleri açıklayacağım:

  • Yedi segmentli ekran için 7x 1 kΩ dirençler. Daha parlak hale getirmek için değeri (örn. 470 Ω'a) düşürebilirsiniz, ancak çok fazla azaltmayın, aksi takdirde LED'ler ölür veya pil çok çabuk boşalır. Bu değerin benim için çalıştığını buldum
  • Mikrodenetleyicinin RESET hattı için pull-up direnci olarak 1x 10 kΩ
  • Herhangi bir voltaj artışını yumuşatmak için 1x 100nF kapasitör (bu, pil kullandığımız için olmamalı, doğru, ancak iyi bir önlem için…)
  • DIP-28 paketinde 1x ATMega328P (genellikle ATMega328P-PU olarak adlandırılır)
  • 1x ana PCB - önceki adıma bakın; ya sipariş edin ya da kendiniz inşa edin
  • 2 adet CR2032 pil tutucu
  • Temel olarak üç kontağı olan ve iki durumunun her birinde (açık veya kapalı) iki kontağı birbirine bağlayan 1x SPDT (tek kutuplu, çift atışlı) anahtar
  • Klavye için 20x dokunsal basma düğmesi. PCB'nin arka tarafını kullanmak için SMD dokunmatik butonlar kullandım (standart 6x6x6 mm olanlar) - göreceğiniz gibi lehimlemeleri oldukça kolay
  • OPSİYONEL: Programlayıcıyı bağlamak için 1x 1x6 pin header, ancak bu daha sonra göreceğiniz gibi isteğe bağlıdır
  • 4 basamaklı 1x yedi segmentli ekran ve 2 basamaklı 1x yedi segmentli ekran - kart, ortak anot kablolarıyla yalnızca 0,36 inç (9, 14 mm) öğeleri alacaktır. Bir çalışma birimi elde etmek için her iki gereksinim de önemlidir. Ama aynı zamanda bu tip yedi segmentli ekran çok yaygındır.

Bu adımın ekinde, kullanılan bileşenlerin boyutları ve türleri hakkında daha kesin bilgiler içeren " component-datasheets.zip" dosyasını bulabilirsiniz. Ancak bileşenlerin çoğu çok standarttır ve çok az parayla kolayca temin edilebilir.

Şimdi lehimlemeye devam etmek için tüm bileşenleriniz hazır olana kadar beklemeniz gerekiyor. Bu süre zarfında zaten sona atlayabilir ve isterseniz KIM Uno'nun kullanımı hakkında biraz bilgi edinebilirsiniz.

Adım 3: Lehimleme Aracına Genel Bakış

Lehimleme Aracına Genel Bakış
Lehimleme Aracına Genel Bakış
Lehimleme Aracına Genel Bakış
Lehimleme Aracına Genel Bakış

KIM Uno'yu lehimlemek ve inşa etmek için resimlerde gösterilen araçlara ihtiyacınız var:

  • Tel kesici (bileşen tellerinin ucunu kesmek için)
  • Düz pense
  • cımbız
  • (iyi) Çok kalın olmayan lehim - 0,56 mm lehim kullanıyorum
  • Bir havya - üst düzey bir havyaya ihtiyacınız yok (çünkü burada roket bilimi de yapmıyoruz) - Ersa FineTip 260'ı uzun süredir kullanıyorum ve gerçekten çok iyi
  • Akı kalemi: Bileşenlere ve pedlere akı eklemek, lehim daha sonra kendi başına doğru yere "aktığından", lehimlemeyi çok daha kolay hale getirir*
  • İsteğe bağlı olarak: havyanız için bir sünger (metal yünden)

KIM Uno'yu daha sonra programlamak için ayrıca şunlara ihtiyacınız olacak:

  • AVR-GCC araç zincirine sahip bir bilgisayar ve bellenimi yüklemek için avrdude
  • bir ISP (programcı) - resimde görebileceğiniz gibi, Arduino Uno'yu özel bir çizime sahip bir ISP olarak kullanıyorum - bu nedenle herhangi bir fantezi donanım satın almaya gerek yok

* insanlar tarafından bazı rehberlik gerekli;-)

Hazır mısın? Bir sonraki adımda KIM Uno'yu monte etmeye başlayacağız.

Adım 4: Lehimleme #1: Direnç ve Kapasitör Ekleme

Lehimleme #1: Direnç ve Kapasitör Ekleme
Lehimleme #1: Direnç ve Kapasitör Ekleme
Lehimleme #1: Direnç ve Kapasitör Ekleme
Lehimleme #1: Direnç ve Kapasitör Ekleme
Lehimleme #1: Direnç ve Kapasitör Ekleme
Lehimleme #1: Direnç ve Kapasitör Ekleme
Lehimleme #1: Direnç ve Kapasitör Ekleme
Lehimleme #1: Direnç ve Kapasitör Ekleme

Her zaman önce en küçük (bileşen yüksekliği açısından) bileşenlerden en yüksek bileşenlere kadar çalışmalısınız. Bu nedenle, dirençlerin lehimlenmesi ve yerinde kalması için dirençleri ekleyerek ve arkadaki bacakları bükerek başlıyoruz. Daha sonra uzun telleri kesin.

Ayrıca resimlerde gösterilmeyen küçük 100 nF kondansatörü de aynı şekilde ekleyin.

Bir ipucu: Bu tel ayakları küçük bir kapta saklayın, bazen işe yararlar.

Adım 5: Lehimleme #2: Klavyeyi Birleştirme

Lehimleme #2: Klavyeyi Birleştirme
Lehimleme #2: Klavyeyi Birleştirme
Lehimleme #2: Klavyeyi Birleştirme
Lehimleme #2: Klavyeyi Birleştirme
Lehimleme #2: Klavyeyi Birleştirme
Lehimleme #2: Klavyeyi Birleştirme

Bir sonraki adım, 20 SMD dokunmatik anahtarı lehimlemektir. Bu iş biraz zahmetli olduğundan, şimdi PCB tezgah üzerinde düz durduğunda yapıyoruz.

Yukarıdan aşağıya (veya PCB fotoğraflarda gösterildiği gibi yönlendirilmişse soldan sağa) çalışacağız ve ilk satırdan başlayacağız: her anahtar için dört pedden birini seçin ve akı kalemi ile ıslatın.

Daha sonra bir cımbız kullanarak bir anahtarı tutun ve dört pedin üzerine dikkatlice yerleştirin. Daha sonra seçtiğiniz pad üzerinde bulunan switch ayağını flux ile lehimleyiniz. Bunun için, başlamadan önce ütünüzle biraz lehim "almalısınız". Bu yöntemi kullanarak, yalnızca bir bacağı lehimleyerek tüm anahtar sırasını tamamlayın.

Oklarla gösterilen resim, lehimlemenin tam olarak nasıl yapıldığının büyütülmüş halidir.

Tüm sırayı lehimledikten sonra (yalnızca bir pim), pimi tekrar ısıtarak ve anahtarı yeniden konumlandırarak küçük ayarlamalar yapabilirsiniz. Anahtarların mümkün olduğunca iyi hizalandığından emin olun.

Hizalamadan memnunsanız diğer tüm pinleri flux pen ile ıslatıp daha sonra havya ile dokunarak ve üzerine de dokunarak biraz lehim ekleyerek lehimleyebilirsiniz. Lehimin doğrudan ped üzerine emildiğini göreceksiniz.

Bir sıra lehimledikten sonra, onu astığınızı ve o kadar zor değil ama tekrarlayıcı olduğunu fark edeceksiniz. Bu yüzden sadece gerisini yapın ve kısa sürede bitmiş bir klavyeye sahip olacaksınız.

Adım 6: Lehimleme #3: Yedi Segment Ekran, Anahtar ve Pin Başlığı

Lehimleme #3: Yedi Segment Ekran, Anahtar ve Pin Başlığı
Lehimleme #3: Yedi Segment Ekran, Anahtar ve Pin Başlığı
Lehimleme #3: Yedi Segment Ekran, Anahtar ve Pin Başlığı
Lehimleme #3: Yedi Segment Ekran, Anahtar ve Pin Başlığı
Lehimleme #3: Yedi Segment Ekran, Anahtar ve Pin Başlığı
Lehimleme #3: Yedi Segment Ekran, Anahtar ve Pin Başlığı

Şimdi anahtarı ve pin başlığını (isteğe bağlı) parmağınızla tutarak ve bir pini PCB'ye tutturmak için lehimleyerek ekleyebilirsiniz, böylece diğer pinleri lehimleyebilir ve son olarak ilk tutma pinine dokunabilirsiniz.

Sıcak havya ile kendinizi yakmamaya dikkat edin. Bu konuda rahat değilseniz, bileşeni tutmak için biraz bant (örneğin ressamın bandı) kullanabilirsiniz. Bu şekilde hareket etmek için iki eliniz de serbest olur.

Yedi segmentli ekranlar aynı şekilde lehimlenmiştir (resme bakın): onu yerleştirin, elinizle veya bantla tutun ve diğer pimleri lehimlerken yerinde tutmak için iki zıt pimi lehimleyin.

Ancak dikkatli olun ve yedi segmentli ekranı doğru yöne yerleştirin (ondalık noktalar klavyeye bakacak şekilde). Aksi halde başınız belaya girer…

Adım 7: Lehimleme #4: Mikrodenetleyiciyi Lehimleme

Lehimleme #4: Mikrodenetleyiciyi Lehimleme
Lehimleme #4: Mikrodenetleyiciyi Lehimleme

Artık çok fazla alıştırma yaptığınıza göre, mikrodenetleyiciyi üstteki çentik (veya ilk pim) anahtara bakacak şekilde yerleştirebilirsiniz. Düz pense kullanarak mikrodenetleyicinin bacaklarını PCB üzerindeki deliklerle eşleşmeleri için dikkatlice biraz bükebilirsiniz.

Sıkı bir uyum olduğundan, mikrodenetleyiciyi yerleştirmek için kontrollü bir kuvvete ihtiyacınız vardır. Avantajı, düşmemesidir. Bu, zamanınızı alıp arkadan lehimleyebileceğiniz anlamına gelir.

Adım 8: Lehimleme #5: Pil Tutucuları Ekleyin (son Adım)

Lehimleme #5: Pil Tutucuları Ekleyin (son Adım)
Lehimleme #5: Pil Tutucuları Ekleyin (son Adım)
Lehimleme #5: Pil Tutucuları Ekleyin (son Adım)
Lehimleme #5: Pil Tutucuları Ekleyin (son Adım)
Lehimleme #5: Pil Tutucuları Ekleyin (son Adım)
Lehimleme #5: Pil Tutucuları Ekleyin (son Adım)

Son olarak pil tutucuları arkaya eklemeniz gerekiyor. Bunun için sadece flux kalemi kullanın ve dört pedi de ıslatın ve ardından ütünüze biraz lehim yapın. Pil tutucuyu her iki ped üzerinde dikkatlice hizalayın. Kontakların her iki ucunda da aynı miktarda PCB pedi görünür olmalıdır. Ütünüzle PCB pedine ve pil tutucunun ayağına dokunun. Lehim, pedin altından ve üzerinden akacak ve resimde gösterildiği gibi yerine sabitleyecektir. Bununla ilgili sorunlarınız varsa, kalemle daha fazla akı ekleyebilirsiniz.

9. Adım: Öykünücüyü Yanıp Sönme

Emülatörü Yanıp Sönme
Emülatörü Yanıp Sönme
Emülatörü Yanıp Sönme
Emülatörü Yanıp Sönme
Emülatörü Yanıp Sönme
Emülatörü Yanıp Sönme

Ekteki " kim-uno-firmware.zip" zip arşivinde, doğrudan mikro denetleyiciye yükleyebileceğiniz önceden derlenmiş bir "main.hex" ile birlikte öykünücünün kaynak kodunu bulabilirsiniz.

Gerçekten kullanmadan önce, mikrodenetleyicinin sigorta bitlerini, dahili 8 MHz saatini ikiye bölmeden kullanacak şekilde ayarlamanız gerekir. Aşağıdaki komutla işi tamamlayabilirsiniz:

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

Eğer bilmiyorsanız avrdude: programları bir mikrodenetleyiciye yüklemek için bir programdır. Burada daha fazla bilgi edinebilirsiniz. Temel olarak onu kurarsınız ve ardından kullanıma hazırdır. Kurulumunuz için "-P" argümanını başka bir seri bağlantı noktasına değiştirmeniz gerekebilir. Lütfen bilgisayarınızda hangi seri bağlantı noktasının kullanıldığını kontrol edin (örneğin Arduino IDE içinde).

Bundan sonra, bu komutla bellenimi mikrodenetleyiciye yükleyebilirsiniz:

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

Yine: aynı şey yukarıdaki gibi "-P" için de geçerlidir.

"Profesyonel" bir ISP'ye (Sistem İçi Programcı) sahip olmadığım için her zaman Arduino UNO'mu (resme bakın) ve eklediğim çizimi (Randall Bohn'dan "arduino-isp.ino") kullanırım. Daha yeni bir sürüm olduğunu biliyorum, ancak bu sürümle son beş yılda sıfır sorun yaşadım, bu yüzden devam ediyorum. Sadece çalışıyor. Çizimin başlığındaki yorumu kullanarak Arduino UNO'daki pinout'u alırsınız ve KIM Uno'nun şemasını kullanarak (ekliye bakın) KIM Uno'daki 1x6 ISP başlığının pin çıkışını alabilirsiniz. Yedi segmentli ekranın yanındaki kare pin, pin 1'dir (GND). Aşağıdaki pinler (doğru sırada): RESET, MOSI, MISO, SCK, VCC. VCC'yi 3V3 veya 5V'a bağlayabilirsiniz.

1x6 pin başlığını eklemediyseniz breadboard kabloları kullanarak bağlantı deliklerine yerleştirip parmağınızla resimdeki gibi açı yapabilirsiniz. Bu, bellenimi yakmak ve sigortaları ayarlamak için yeterli temas sağlar. Ama daha kalıcı bir kurulum seviyorsanız 1x6 pin başlıklarını mutlaka eklemelisiniz.

İki cihazım var: pin başlıkları olmayan bir üretim versiyonu ve bağlı bıraktığım ve geliştirme sırasında tekrar tekrar kullandığım pin başlıklarına sahip bir geliştirme versiyonu. Bu çok daha rahat.

Adım 10: Tamamlandı

bitmiş
bitmiş
bitmiş
bitmiş

Artık işiniz bitti ve kendi subleq programlarınızı kağıda yazmaya, birleştirmeye ve ardından belleğe girmeye başlayabilirsiniz.

KIM Uno, 0x0a bellek konumundan başlayan önceden programlanmış bir Fibonacci hesaplaması ile birlikte gelir. Varsayılan olarak n = 6'ya ayarlanmıştır, bu nedenle 8 değeriyle sonuçlanmalıdır. Hesaplamayı başlatmak için "Git"e basın.

Adım 11: PCB Tasarım Analizi

PCB Tasarım Analizi
PCB Tasarım Analizi
PCB Tasarım Analizi
PCB Tasarım Analizi

Bu projeyi tamamladıktan sonra, dikkate değer ve yeni bir yönetim kurulu revizyonunda ele alınması gereken birkaç nokta buldum:

  • ATMega328p'nin ipek ekranında, ilk pimin bulunduğu olağan çentik yok. DIP-28 ayak izinde, ilk pimin bulunduğu yerde kare bir ped bile yoktur. Bu, karışıklığı önlemek için kesinlikle daha ayrıntılı bir serigrafi ile geliştirilmelidir.
  • ISP başlığının serigrafi üzerinde bağlantı etiketi yoktur. Bu, onu ISP'ye nasıl bağlayacağınızı tanımayı zorlaştırır
  • ISP başlığı, herhangi bir karışıklığı önlemek için standart bir pin düzenine sahip 2x6 pinli bir başlığa dönüştürülebilir

Bu noktaların dışında, ilk denemede nasıl sonuçlandığı ve çalıştığı için oldukça mutluyum.

Adım 12: SUBLEQ Nasıl Programlanır?

Image
Image
SUBLEQ Nasıl Programlanır?
SUBLEQ Nasıl Programlanır?
SUBLEQ Nasıl Programlanır?
SUBLEQ Nasıl Programlanır?

Başta bahsedildiği gibi, KIM Uno'nun mevcut bellenimi Bir Komut Setli Bilgisayarı (OISC) taklit eder ve hesaplamayı gerçekleştirmek için alt komut sağlar.

subleq komutu, sıfırdan küçük veya sıfıra eşitse çıkarma ve dallanma anlamına gelir. Sözde kodda bu aşağıdaki gibi görünür:

subleq A B C mem[B] = mem [B] - mem[A]; if (mem[B] <= 0) C'ye git;

KIM Uno 8 bitlik bir makineyi taklit ettiğinden, tüm A, B ve C argümanları 8 bit değerlerdir ve bu nedenle toplam 256 baytlık bir ana belleğe hitap edebilir. Açıkçası bu, A, B ve C çok baytlı değerler yaparak genişletilebilir. Ama şimdilik basit tutalım.

KIM Uno'nun ayrıca "çevre birimleri" vardır: ekran ve klavye. Bellek haritası çok basit olmasına rağmen, bu çevre birimlerini arayüzlemek için bir bellek eşlemeli mimari kullanır:

  • 0x00 = Z kaydı (sıfır) ve sıfır tutulmalıdır.
  • 0x01 - 0x06 = ekran bölümlerinin her birinin değerini temsil eden altı bayt (sağdan sola). 0xf değeri - daha fazla ayrıntı için kaynak koduna (main.c) bakın.
  • 0x07, 0x08, 0x09 = her baytın iki yedi segmentli ekranı temsil ettiği (sağdan sola) üç bayt. Bu bellek konumları, sonucu 0x01 - 0x06 tek basamaklı bellek konumlarına yerleştirmek için sonucu iki parçaya bölmeden basitçe görüntülemeye izin verir.
  • 0x0a+ = Bir program 0x0a'da başlar. Şu anda "Git" tuşu sabit 0x0a'dan yürütülür.

Bu bilgilerle artık assembler'a bir program yazabilir ve komutları belleğe girip çalıştırabilir. Yalnızca bir komut olduğundan, yalnızca bağımsız değişkenler (A, B ve C) girilir. Böylece, üç bellek konumundan sonra bir sonraki talimat argümanları başlar ve bu böyle devam eder.

Bu adıma ek olarak " fibonacci.s" dosyasını ve ayrıca Fibonacci'nin örnek bir uygulaması olan el yazısı programın bir görüntüsünü bulabilirsiniz. Ancak bekleyin: kullanılan üç talimat vardır - özellikle ADD, MOV ve HLT - bunlar subleq değildir. "Anlaşma nedir? Sadece bir talimat olduğunu söylemedin mi, subleq?" Soruyorsun? Çok kolay: subleq ile bu talimatları çok kolay bir şekilde taklit edebilirsiniz:

MOV a, b - a'dan b'ye konumdaki verileri kopyalayın:

  1. subleq b, b, 2 (sonraki talimat)
  2. subleq a, Z, 3 (sonraki talimat)
  3. subleq Z, b, 4 (sonraki talimat)
  4. subleq Z, Z, ör. 5 (sonraki talimat)

mem - mem[a] yapan ve sonucu mem üzerine yazan subleq'in çıkarma özelliği kullanılarak, değer sıfır kaydı kullanılarak kopyalanır. Ve "subleq Z, Z, …" Z'nin değerinden bağımsız olarak sıfır kaydını 0'a sıfırlar.

ADD a, b - a + b değerlerini toplar ve toplamı b'de saklar, şunlardan oluşabilir:

  1. subleq a, Z, 2 (sonraki talimat)
  2. subleq Z, b, 3 (sonraki talimat)
  3. subleq Z, Z, ör. 4 (sonraki talimat)

Bu komut, çıkarma özelliğini de kullanarak mem + mem[a] olan mem - (- mem[a])'yı basitçe hesaplar.

HLT - CPU'yu durdurur ve yürütmeyi sonlandırır:

Tanım olarak öykünücü, CPU'nun 0xff'e (veya söylenirse -1) atlarsa sonlandırmak istediğini bilir. çok basit

subleq Z, Z, -1

işi yapar ve öykünücüye öykünmeyi bitirmesi gerektiğini belirtir.

Bu üç basit talimatı kullanarak Fibonacci algoritması uygulanabilir ve iyi çalışır. Bunun nedeni, OISC'nin "gerçek" bir bilgisayarın hesaplayabileceği her şeyi yalnızca komut alt dizisi ile hesaplayabilmesidir. Ama elbette, kod uzunluğu ve hızı gibi yapılacak birçok ödünleşim var. Ancak yine de, düşük seviyeli yazılım programlama ve bilgisayarları öğrenmek ve denemek için harika bir yoldur.

Bu adıma ek olarak " kim_uno_tools.zip" zip arşivini de bulabilirsiniz. KIM Uno için bazı temel montajcı ve simülatör içerir. NodeJS'de yazılmıştır - yüklediğinizden emin olun.

Montaj programları

Eğer "fibonacci/fibonacci.s" dosyasına bakarsanız, bunun tartışılan fibonacci uygulamasının kaynak kodu olduğunu göreceksiniz. Onu birleştirmek ve KIM Uno'nun çalıştırabileceği bir program yapmak için aşağıdaki komutu girin (çıkartılan "kim_uno_tools.zip" arşivinin kökünde):

düğüm assemble.js fibonacci/fibonacci.s

ve eğer bir hata yaptıysanız ya bir hata yazdıracak ya da ortaya çıkan programı dökecektir. Kaydetmek için çıktıyı kopyalayıp bir dosyaya kaydedebilir veya basitçe şu komutu çalıştırabilirsiniz:

düğüm assemble.js fibonacci/fibonacci.s > dosyanız.h

Çıktı, doğrudan bir C başlık dosyası olarak KIM Uno üretici yazılımına dahil edilebilecek şekilde biçimlendirilir, ancak simülatör bunu benzetmek için de kullanabilir. Basitçe girin:

düğüm sim.js dosyanız.h

Ve size simülasyon sonucu ve KIM Uno'dan beklenen çıktı ekranda gösterilecektir.

Bu, bu araçlara çok kısa bir girişti; Onlarla oynamanızı ve nasıl çalıştıklarına bakmanızı tavsiye ederim. Bu şekilde derin bir bilgi edinirsiniz ve CPU'ların, talimatların, birleştiricilerin ve öykünücülerin arkasındaki çalışma ilkelerini öğrenirsiniz;-)

Adım 13: Görünüm

Görünüm
Görünüm
Görünüm
Görünüm
Görünüm
Görünüm

Tebrikler

Bunu okursanız, muhtemelen tüm bu talimattan geçtiniz ve kendi KIM Uno'nuzu oluşturdunuz. Bu gerçekten güzel.

Ancak yolculuk burada bitmiyor - KIM Uno'yu nasıl değiştirebileceğiniz ve ihtiyaçlarınıza ve beğeninize göre özelleştirebileceğiniz sonsuz sayıda seçenek var.

Örneğin, KIM Uno, ünlü MOS 6502 veya Intel 8085, 8086 veya 8088'i taklit edebilecek "gerçek" bir retro CPU öykünücüsü ile donatılabilir. OISC'leri öğrenmeden önce, bu benim ilk vizyonuma gidecekti.

Ancak donanım tasarımı oldukça genel olduğu için başka kullanımlar da olabilir. KIM Uno olarak kullanılabilir…

  • … bir uzaktan kumanda örn. CNC'ler veya diğer cihazlar için. Belki kablolu veya bir IR diyot veya başka bir kablosuz gönderici ile donatılmış
  • … bir (onaltılık) cep hesaplayıcısı. Firmware çok kolay bir şekilde uyarlanabilir ve kart tasarımının çok fazla değiştirilmesine gerek yoktur. Belki serigrafi matematik işlemlerle uyarlanabilir ve segmentler arasındaki boşluk kaldırılabilir. Bunun dışında zaten bu dönüşüme hazır

Umarım KIM Uno'yu takip ederken ve umarım benim tasarladığım ve planladığım kadar siz de eğlenmişsinizdir. Ve genişletirseniz veya değiştirirseniz - lütfen bana bildirin. Şerefe!

PCB Yarışması
PCB Yarışması
PCB Yarışması
PCB Yarışması

PCB Yarışmasında İkincilik

Önerilen: