Daftar Isi:

KIM Uno - Emulator Kit Dev Mikroprosesor 5€: 13 Langkah (dengan Gambar)
KIM Uno - Emulator Kit Dev Mikroprosesor 5€: 13 Langkah (dengan Gambar)

Video: KIM Uno - Emulator Kit Dev Mikroprosesor 5€: 13 Langkah (dengan Gambar)

Video: KIM Uno - Emulator Kit Dev Mikroprosesor 5€: 13 Langkah (dengan Gambar)
Video: МЫ ВЫХОДИМ В ЭФИР 42: ПОСЛЕДНИЙ ПЕРЕД РОЖДЕСТВОМ! 2024, Juni
Anonim
Image
Image
KIM Uno - Emulator Dev Kit Mikroprosesor 5€
KIM Uno - Emulator Dev Kit Mikroprosesor 5€
KIM Uno - Emulator Dev Kit Mikroprosesor 5€
KIM Uno - Emulator Dev Kit Mikroprosesor 5€

KIM Uno adalah kit dev portabel yang ditentukan perangkat lunak untuk mikroprosesor (retro). Tapi izinkan saya memperkenalkan idenya dengan kembali ke masa lalu:

Kembali pada akhir tahun 2018 terlintas dalam pikiran saya, bahwa saya ingin membangun kit dev mikroprosesor portabel kecil, seperti KIM-1 yang terkenal dari MOS Technology, Inc. dan dirancang oleh Chuck Peddle yang juga terlibat dalam pembuatan 6502 CPU.

Tetapi membangun kit dev "telanjang" dengan komponen logika diskrit bukanlah pilihan karena membutuhkan catu daya yang besar (karena perangkat kuno itu cenderung mengambil arus yang serius) dan juga pengembangannya akan sangat memakan waktu. Dan aku menginginkannya sekarang!

Oleh karena itu, saya merancang KIM Uno sebagai perangkat portabel, yang pas di satu tangan dan ditenagai oleh dua baterai CR2032. Ini menggunakan mikrokontroler ATMega328p ("Arduino") yang berjalan pada 8 MHz untuk meniru (atau mensimulasikan) CPU yang diinginkan. Arsitektur ini juga memastikan, bahwa CPU yang diemulasi dapat dipertukarkan dengan apa pun yang sesuai dengan memori flash mikrokontroler. Jadi ini adalah perangkat serbaguna.

Secara kebetulan saya kemudian menonton ceramah yang sangat bagus - berjudul The Ultimate Apollo Guidance Computer Talk (34C3) - di YouTube di mana "One Instruction Set Computers" atau OISC disebutkan. Saya tidak tahu tentang mereka dan menemukan ini sebagai kandidat yang sempurna untuk menerapkannya.

KIM Uno mengemulasi CPU hanya dengan satu instruksi: subleq - kurangi dan cabangkan jika kurang dari atau sama dengan nol.

Jika Anda mengikuti saya melalui Instruksi ini, Anda dapat membangun KIM Uno Anda sendiri dalam waktu singkat. Dan bagian terbaiknya - selain fakta bahwa Anda dapat memodifikasinya sesuai selera Anda - adalah, biaya pembuatannya hanya 4, 75 € (per akhir 2018).

Satu petunjuk: ada repositori Git yang berisi semua file yang disediakan oleh langkah-langkah berbeda dari instruksi ini. Jika Anda ingin mengubah beberapa sumber dan membagikannya kepada kami, Anda dapat membuat PR. Tetapi Anda juga dapat mengunduh semua file sekaligus di sana. Cukup ke https://github.com/maxstrauch/kim-uno. Terima kasih!

Ada proyek lain yang cukup menarik, yang disebut sama (KIM Uno), yang melakukan replika nyata dari 6502 KIM Uno. Lihat disini. Pencipta bahkan menjual kit. Jadi jika Anda tertarik dengan 6502 dan menyukai proyek ini, Anda harus melihatnya di sana!

Langkah 1: Sumber PCB

Sumber PCB
Sumber PCB
Sumber PCB
Sumber PCB

Seperti yang Anda lihat, saya menggunakan kesempatan untuk mendesain PCB dan membuatnya dibuat secara profesional. Karena memproduksinya secara eksternal dan mengirimkannya kepada Anda akan memakan banyak waktu (tergantung di mana Anda berada di dunia;-)), memesannya adalah langkah pertama. Kami kemudian dapat melanjutkan dengan langkah-langkah lain saat PCB dibuat dan dikirimkan kepada Anda.

Saya memesan PCB saya di China di PCBWay hanya dengan $5. Saya tidak mendapatkan manfaat apa pun untuk menghadirkan PCBWay sebagai produsen goto saya untuk PCB, hanya saja itu berfungsi dengan baik untuk saya dan mungkin juga berfungsi dengan baik untuk Anda. Tetapi Anda dapat memesannya di tempat lain seperti JLCPCB, OSH Park atau perusahaan PCB lokal.

Tetapi jika Anda ingin memesannya di PCBWay, Anda dapat mengunduh file ZIP terlampir " kim-uno-rev1_2018-12-12_gerbers.zip" dan mengunggahnya langsung ke PCBWay tanpa perubahan apa pun. Ini adalah file asli yang saya gunakan untuk memesan PCB yang dapat Anda lihat di gambar.

Jika Anda memesannya dari pabrikan lain, Anda mungkin perlu mengekspor ulang dari sumber asli KiCad, karena saya membuatnya dengan spesifikasi dari PCBWay yang dapat Anda temukan di sini. Untuk sumber asli KiCad, unduh " kim-uno-kicad-sources.zip" dan ekstrak.

Tetapi bahkan ada cara kedua: jika Anda tidak ingin memesan PCB, Anda dapat membuat versi Anda sendiri menggunakan perfboard atau bahkan papan tempat memotong roti.

Bagaimanapun: karena PCB sekarang sedang dalam perjalanan, kita dapat fokus pada bagian lain! Ayo, ikuti aku.

Langkah 2: Sumber Komponen

Sumber Komponen
Sumber Komponen
Sumber Komponen
Sumber Komponen
Sumber Komponen
Sumber Komponen

Sekarang Anda perlu mendapatkan komponennya. Untuk ini, Anda akan menemukan gambaran umum dari semua komponen dan jumlah yang Anda butuhkan, terlampir pada langkah ini serta BOM (bill of material).

BOM berisi tautan ke eBay. Meskipun penawaran tersebut mungkin ditutup saat Anda membaca ini, Anda dapat menggunakannya sebagai titik awal. Komponen yang digunakan cukup standar.

Berikut ini saya akan menjelaskan kepada Anda semua komponen yang dibutuhkan:

  • 7x 1 kΩ resistor untuk tampilan tujuh segmen. Anda dapat mengurangi nilainya (misalnya menjadi 470) untuk membuatnya bersinar lebih terang, tetapi kurangi tidak terlalu banyak jika tidak, LED akan mati atau baterai cepat habis. Saya menemukan bahwa nilai ini bekerja untuk saya
  • 1x 10 kΩ sebagai resistor pull-up untuk jalur RESET mikrokontroler
  • 1x 100nF kapasitor untuk menghaluskan lonjakan tegangan (yang seharusnya tidak terjadi karena kami menggunakan baterai, benar, tetapi untuk ukuran yang baik …)
  • 1x ATMega328P dalam paket DIP-28 (biasanya bernama ATMega328P-PU)
  • 1x PCB utama - lihat langkah sebelumnya; baik dipesan atau dibangun sendiri
  • 2x pemegang baterai CR2032
  • 1x SPDT (single pole, double throw) switch yang pada dasarnya memiliki tiga kontak dan di setiap dua statusnya (baik hidup atau mati) menghubungkan dua kontak
  • 20x tombol tekan taktil untuk keyboard. Untuk menggunakan bagian belakang PCB saya menggunakan tombol tekan taktil SMD (yang standar 6x6x6 mm) - mereka cukup mudah untuk disolder seperti yang akan Anda lihat
  • OPSIONAL: 1x 1x6 pin header untuk menghubungkan programmer, tetapi ini opsional seperti yang akan Anda lihat nanti
  • 1x layar tujuh segmen dengan 4 digit dan 1x layar tujuh segmen dengan 2 digit - papan hanya akan mengambil elemen 0,36 inci (9, 14 mm) dengan kabel anoda umum. Kedua persyaratan tersebut penting untuk mendapatkan unit kerja. Tetapi juga jenis tampilan tujuh segmen ini sangat umum

Terlampir pada langkah ini Anda dapat menemukan file " component-datasheets.zip" yang berisi informasi yang lebih tepat tentang dimensi dan jenis komponen yang digunakan. Tetapi sebagian besar komponen sangat standar dan dapat diperoleh dengan mudah dengan sedikit uang.

Sekarang Anda perlu menunggu sampai semua komponen siap untuk melanjutkan menyolder. Selama ini Anda sudah bisa melompat ke akhir dan membaca sedikit tentang penggunaan KIM Uno jika Anda mau.

Langkah 3: Ikhtisar Alat Solder

Ikhtisar Alat Solder
Ikhtisar Alat Solder
Ikhtisar Alat Solder
Ikhtisar Alat Solder

Untuk menyolder dan membangun KIM Uno, Anda memerlukan alat yang ditunjukkan oleh gambar:

  • Pemotong kawat (untuk memotong ujung kabel komponen)
  • Tang datar
  • Sepasang pinset
  • (layak) Solder yang tidak terlalu tebal - saya menggunakan solder 0,56 mm
  • Besi solder - Anda tidak memerlukan besi solder kelas atas (karena kami juga tidak melakukan ilmu roket di sini) - Saya menggunakan Ersa FineTip 260 untuk waktu yang lama sekarang dan itu sangat bagus
  • Pena fluks: menambahkan fluks ke komponen dan bantalan membuatnya jauh lebih mudah untuk menyoldernya karena solder kemudian "mengalir" dengan sendirinya ke tempat yang tepat*
  • Opsional: spons (dari metalwool) untuk besi solder Anda

Untuk memprogram KIM Uno nanti, Anda juga memerlukan:

  • komputer dengan rantai alat AVR-GCC dan avrdude untuk mengunggah firmware
  • ISP (programmer) - seperti yang Anda lihat pada gambar, saya menggunakan Arduino Uno sebagai ISP dengan sketsa khusus - jadi tidak perlu membeli perangkat keras yang mewah

* beberapa bimbingan oleh manusia diperlukan;-)

Apakah kamu siap? Pada langkah selanjutnya kita akan mulai merakit KIM Uno.

Langkah 4: Solder #1: Menambahkan Resistor dan Kapasitor

Solder #1: Menambahkan Resistor dan Kapasitor
Solder #1: Menambahkan Resistor dan Kapasitor
Solder #1: Menambahkan Resistor dan Kapasitor
Solder #1: Menambahkan Resistor dan Kapasitor
Solder #1: Menambahkan Resistor dan Kapasitor
Solder #1: Menambahkan Resistor dan Kapasitor
Solder #1: Menambahkan Resistor dan Kapasitor
Solder #1: Menambahkan Resistor dan Kapasitor

Anda harus selalu bekerja dari komponen terkecil (dalam hal tinggi komponen) terlebih dahulu, hingga komponen tertinggi terakhir. Oleh karena itu, kita mulai dengan menambahkan resistor dan menekuk kaki di bagian belakang agar resistor mudah disolder dan tetap di tempatnya. Setelah itu potong kabel yang panjang.

Juga, tidak ditunjukkan pada gambar, tambahkan kapasitor 100 nF kecil dengan cara yang sama.

Satu tip: simpan kaki kawat itu dalam wadah kecil, terkadang berguna.

Langkah 5: Solder #2: Merakit Keyboard

Solder #2: Merakit Keyboard
Solder #2: Merakit Keyboard
Solder #2: Merakit Keyboard
Solder #2: Merakit Keyboard
Solder #2: Merakit Keyboard
Solder #2: Merakit Keyboard

Langkah selanjutnya adalah menyolder 20 sakelar taktil SMD. Karena pekerjaan ini sedikit rumit, kami melakukannya sekarang, ketika PCB diletakkan di atas meja kerja.

Kami akan bekerja dari atas ke bawah (atau dari kiri ke kanan jika PCB berorientasi seperti yang ditunjukkan pada foto) dan mulai dengan baris pertama: pilih salah satu dari empat bantalan untuk setiap sakelar dan basahi dengan pena fluks.

Kemudian gunakan pinset untuk mengambil sakelar dan posisikan dengan hati-hati pada keempat bantalan. Kemudian solder hanya kaki sakelar yang ada di bantalan yang Anda pilih dan siapkan dengan fluks. Untuk ini, Anda harus "mengambil" beberapa solder dengan setrika Anda sebelum memulai. Dengan menggunakan metode ini, selesaikan seluruh baris sakelar, hanya menyolder satu kaki.

Gambar dengan panah menunjukkan pembesaran bagaimana penyolderan dilakukan dengan tepat.

Setelah Anda menyolder seluruh baris (hanya satu pin), Anda dapat melakukan sedikit penyesuaian dengan memanaskan kembali pin dan memposisikan ulang sakelar. Pastikan, bahwa sakelar disejajarkan sebaik mungkin.

Jika Anda senang dengan keselarasan, Anda dapat membasahi semua pin lainnya dengan pena fluks dan kemudian menyoldernya dengan menyentuhnya dengan besi solder dan menambahkan sedikit solder dengan menyentuhnya juga. Anda akan melihat bahwa solder tersedot langsung ke pad.

Setelah menyolder satu baris atau lebih, Anda akan melihat bahwa Anda memahaminya dan itu tidak terlalu sulit tetapi berulang. Jadi lakukan saja sisanya dan Anda akan mendapatkan keyboard yang sudah jadi dalam waktu singkat.

Langkah 6: Solder #3: Tampilan Tujuh Segmen, Switch dan Pin Header

Solder #3: Tampilan Tujuh Segmen, Sakelar, dan Header Pin
Solder #3: Tampilan Tujuh Segmen, Sakelar, dan Header Pin
Solder #3: Tampilan Tujuh Segmen, Sakelar, dan Header Pin
Solder #3: Tampilan Tujuh Segmen, Sakelar, dan Header Pin
Solder #3: Tampilan Tujuh Segmen, Sakelar, dan Header Pin
Solder #3: Tampilan Tujuh Segmen, Sakelar, dan Header Pin

Sekarang Anda dapat menambahkan sakelar dan pin header (opsional) dengan memegangnya dengan jari Anda dan menyolder satu pin untuk menahannya ke PCB, sehingga Anda dapat menyolder pin lainnya dan akhirnya menyentuh pin penahan awal.

Berhati-hatilah agar Anda tidak membakar diri sendiri dengan besi solder yang panas. Jika Anda tidak nyaman dengan ini, Anda dapat menggunakan sedikit selotip (misalnya selotip pelukis) untuk menahan komponen. Dengan cara ini Anda memiliki kedua tangan bebas untuk bergerak.

Tampilan tujuh segmen disolder dengan cara yang sama (lihat gambar): Anda memasukkannya, memegangnya dengan tangan atau selotip dan menyolder dua pin yang berlawanan untuk menahannya sementara Anda dapat menyolder pin lainnya.

Tapi hati-hati dan letakkan tampilan tujuh segmen di arah yang benar (dengan titik desimal menghadap ke keyboard). Jika tidak, Anda dalam masalah…

Langkah 7: Menyolder # 4: Menyolder Mikrokontroler

Solder #4: Menyolder Mikrokontroler
Solder #4: Menyolder Mikrokontroler

Sekarang setelah Anda memiliki banyak latihan, Anda dapat melanjutkan dan memasang mikrokontroler dengan takik di bagian atas (atau pin pertama) menghadap ke sakelar. Dengan menggunakan tang datar, Anda dapat dengan hati-hati menekuk kaki mikrokontroler sedikit ke dalam, sehingga sesuai dengan lubang pada PCB.

Karena sangat pas, Anda memerlukan kekuatan yang terkendali untuk memasang mikrokontroler. Keuntungannya adalah tidak jatuh. Ini berarti, Anda dapat meluangkan waktu dan menyoldernya dari belakang.

Langkah 8: Solder #5: Tambahkan Dudukan Baterai (Langkah terakhir)

Solder #5: Tambahkan Dudukan Baterai (Langkah terakhir)
Solder #5: Tambahkan Dudukan Baterai (Langkah terakhir)
Solder #5: Tambahkan Dudukan Baterai (Langkah terakhir)
Solder #5: Tambahkan Dudukan Baterai (Langkah terakhir)
Solder #5: Tambahkan Dudukan Baterai (Langkah terakhir)
Solder #5: Tambahkan Dudukan Baterai (Langkah terakhir)

Akhirnya Anda perlu menambahkan dudukan baterai ke belakang. Untuk ini, Anda cukup menggunakan pena fluks dan membasahi keempat bantalan dan kemudian mendapatkan beberapa solder pada setrika Anda. Sejajarkan dudukan baterai dengan hati-hati pada kedua bantalan. Di kedua ujung kontak harus ada jumlah papan PCB yang sama yang terlihat. Sentuh bantalan PCB dan kaki dudukan baterai dengan setrika Anda. Solder akan mengalir di bawah bantalan dan di atasnya dan mengamankannya di tempatnya seperti yang ditunjukkan pada gambar. Jika Anda memiliki masalah dengan ini, Anda dapat menambahkan lebih banyak fluks dengan pena.

Langkah 9: Mem-flash Emulator

Mem-flash Emulator
Mem-flash Emulator
Mem-flash Emulator
Mem-flash Emulator
Mem-flash Emulator
Mem-flash Emulator

Dalam arsip zip terlampir " kim-uno-firmware.zip" Anda dapat menemukan kode sumber untuk emulator bersama dengan "main.hex" yang sudah dikompilasi yang dapat langsung Anda unggah ke mikrokontroler.

Sebelum Anda benar-benar dapat menggunakannya, Anda perlu mengatur bit sekering mikrokontroler, sehingga menggunakan clock internal 8 MHz tanpa membaginya menjadi dua. Anda dapat menyelesaikan pekerjaan dengan perintah berikut:

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

Jika Anda tidak tahu avrdude: ini adalah program untuk mengunggah program ke mikrokontroler. Anda dapat mempelajarinya lebih lanjut di sini. Pada dasarnya Anda menginstalnya dan kemudian siap digunakan. Untuk pengaturan Anda, Anda mungkin perlu mengubah argumen "-P" ke port serial lain. Silakan periksa di komputer Anda port serial mana yang digunakan (misalnya di dalam Arduino IDE).

Setelah ini, Anda dapat mem-flash firmware ke mikrokontroler dengan perintah ini:

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

Sekali lagi: hal yang sama berlaku untuk "-P" seperti di atas.

Karena saya tidak memiliki ISP (In-System Programmer) "profesional", saya selalu menggunakan Arduino UNO (lihat gambar) dan sketsa yang saya lampirkan ("arduino-isp.ino", dari Randall Bohn). Saya tahu bahwa ada versi yang lebih baru, tetapi dengan versi ini saya tidak mengalami masalah selama lima tahun terakhir, jadi saya menyimpannya. Ini hanya bekerja. Menggunakan komentar di header sketsa Anda mendapatkan pinout pada Arduino UNO dan menggunakan skema KIM Uno (lihat terlampir) Anda bisa mendapatkan pinout header ISP 1x6 pada KIM Uno. Pin persegi, dekat dengan tampilan tujuh segmen adalah pin 1 (GND). Pin berikut adalah (dalam urutan yang benar): RESET, MOSI, MISO, SCK, VCC. Anda dapat menghubungkan VCC baik ke 3V3 atau ke 5V.

Jika Anda tidak menambahkan pin header 1x6, Anda dapat menggunakan kabel papan tempat memotong roti dan memasukkannya ke dalam lubang sambungan dan memiringkannya dengan jari Anda - seperti yang ditunjukkan pada gambar. Ini membuat kontak yang cukup untuk mem-flash firmware dan mengatur sekering. Tetapi jika Anda menyukai pengaturan yang lebih permanen, Anda harus menambahkan header pin 1x6.

Saya memiliki dua perangkat: versi produksi tanpa pin header dan versi pengembangan dengan pin header yang saya biarkan terhubung dan menggunakannya berulang kali selama pengembangan. Ini jauh lebih nyaman.

Langkah 10: Selesai

Selesai
Selesai
Selesai
Selesai

Sekarang Anda telah selesai dan dapat mulai menulis program subleq Anda sendiri di atas kertas, merakitnya dan kemudian memasukkannya ke dalam memori.

KIM Uno dilengkapi dengan perhitungan Fibonacci yang telah diprogram sebelumnya mulai dari lokasi memori 0x0a. Ini diatur secara default ke n = 6 sehingga akan menghasilkan nilai 8. Tekan "Go" untuk memulai perhitungan.

Langkah 11: Analisis Desain PCB

Analisis Desain PCB
Analisis Desain PCB
Analisis Desain PCB
Analisis Desain PCB

Setelah menyelesaikan proyek ini, saya menemukan beberapa poin yang patut diperhatikan dan harus dibahas dalam revisi dewan yang baru:

  • sablon ATMega328p tidak memiliki notch seperti biasanya dimana pin pertama berada. Jejak DIP-28 bahkan tidak memiliki alas persegi tempat pin pertama berada. Ini pasti harus ditingkatkan dengan silkscreen yang lebih detail untuk mencegah kebingungan
  • header ISP tidak memiliki label koneksi di layar sutra. Ini membuatnya sulit untuk mengenali cara menghubungkannya ke ISP
  • header ISP dapat diubah menjadi header pin 2x6 dengan tata letak pin standar untuk mencegah kebingungan

Terlepas dari poin-poin itu, saya cukup senang dengan hasilnya dan berhasil pada percobaan pertama.

Langkah 12: Bagaimana Memprogram SUBLEQ?

Image
Image
Bagaimana Memprogram SUBLEQ?
Bagaimana Memprogram SUBLEQ?
Bagaimana Memprogram SUBLEQ?
Bagaimana Memprogram SUBLEQ?

Seperti disebutkan di awal, firmware KIM Uno saat ini tidak mengemulasi One Instruction Set Computer (OISC) dan menyediakan instruksi subleq untuk melakukan komputasi.

Instruksi subleq adalah singkatan dari kurangi dan cabang jika kurang dari atau sama dengan nol. Dalam pseudo-code ini terlihat seperti berikut:

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

Karena KIM Uno mengemulasi mesin 8-bit, semua argumen A, B dan C adalah nilai 8 bit dan oleh karena itu dapat menangani total memori utama 256 byte. Jelas ini dapat diperpanjang, dengan membuat nilai multi-byte A, B dan C. Tapi untuk saat ini mari kita tetap sederhana.

KIM Uno juga memiliki "periferal": layar dan keyboard. Ini menggunakan arsitektur yang dipetakan memori untuk menghubungkan periferal tersebut, meskipun peta memori sangat sederhana:

  • 0x00 = register Z (nol) dan harus tetap nol.
  • 0x01 - 0x06 = enam byte yang mewakili nilai setiap segmen tampilan (dari kanan ke kiri). Nilai 0xf - lihat kode sumber (main.c) untuk lebih jelasnya.
  • 0x07, 0x08, 0x09 = tiga byte di mana setiap byte mewakili dua tampilan tujuh segmen (dari kanan ke kiri). Lokasi memori ini memungkinkan hanya menampilkan hasil tanpa membagi hasil menjadi dua camilan untuk menempatkannya di lokasi memori satu digit 0x01 - 0x06.
  • 0x0a+ = Program dimulai pada 0x0a. Saat ini kunci "Go" dijalankan dari 0x0a diperbaiki.

Dengan informasi ini seseorang sekarang dapat menulis program di assembler dan memasukkan instruksi ke dalam memori dan kemudian menjalankannya. Karena hanya ada satu instruksi, hanya argumen (A, B dan C) yang dimasukkan. Jadi setelah tiga lokasi memori, argumen instruksi berikutnya dimulai dan seterusnya.

Terlampir pada langkah ini Anda dapat menemukan file " fibonacci.s" dan juga gambar program tulisan tangan yang merupakan contoh implementasi Fibonacci. Tapi tunggu: ada tiga instruksi yang digunakan - khususnya ADD, MOV dan HLT - yang tidak subleq. "Apa kesepakatannya? Bukankah kamu mengatakan bahwa hanya ada satu instruksi, subleq?" Anda bertanya? Sangat mudah: dengan subleq seseorang dapat meniru instruksi tersebut dengan sangat mudah:

MOV a, b - menyalin data di lokasi a ke b dapat terdiri dari:

  1. subleq b, b, 2 (instruksi selanjutnya)
  2. subleq a, Z, 3 (instruksi selanjutnya)
  3. subleq Z, b, 4 (instruksi selanjutnya)
  4. subleq Z, Z, mis. 5 (instruksi berikutnya)

Menggunakan fitur pengurangan subleq, yang mem - mem[a] dan menimpa mem dengan hasilnya, nilainya disalin menggunakan register nol. Dan "subleq Z, Z, …" cukup me-reset register nol ke 0, terlepas dari nilai Z.

ADD a, b - menambahkan nilai a + b dan menyimpan jumlah di b dapat terdiri dari:

  1. subleq a, Z, 2 (instruksi selanjutnya)
  2. subleq Z, b, 3 (instruksi selanjutnya)
  3. subleq Z, Z, mis. 4 (instruksi berikutnya)

Instruksi ini hanya menghitung mem - (- mem[a]) yang mem + mem[a] dengan juga menggunakan fitur pengurangan.

HLT - menghentikan CPU dan mengakhiri eksekusi:

Menurut definisi, emulator mengetahui bahwa CPU ingin dihentikan jika melompat ke 0xff (atau -1 jika hangus). Jadi sederhana

subleq Z, Z, -1

melakukan pekerjaan dan menunjukkan kepada emulator, bahwa itu harus mengakhiri emulasi.

Dengan menggunakan tiga instruksi sederhana ini, algoritma Fibonacci dapat diimplementasikan dan bekerja dengan baik. Ini karena OISC dapat menghitung segala sesuatu yang dapat dihitung oleh komputer "nyata" hanya dengan subleq instruksi. Tapi tentu saja, ada banyak pengorbanan yang harus dilakukan - seperti panjang dan kecepatan kode. Namun demikian, ini adalah cara yang bagus untuk belajar dan bereksperimen dengan pemrograman perangkat lunak dan komputer tingkat rendah.

Terlampir pada langkah ini Anda juga dapat menemukan arsip zip " kim_uno_tools.zip". Ini berisi beberapa assembler dasar dan simulator untuk KIM Uno. Mereka ditulis dalam NodeJS - pastikan Anda telah menginstalnya.

Merakit program

Jika Anda melihat "fibonacci/fibonacci.s" Anda akan menemukan bahwa itu adalah kode sumber untuk implementasi fibonacci yang dibahas. Untuk merakitnya dan membuat program darinya, yang dapat dijalankan oleh KIM Uno, Anda memasukkan perintah berikut (di root arsip "kim_uno_tools.zip" yang diekstraksi):

simpul assemble.js fibonacci/fibonacci.s

dan itu akan mencetak kesalahan jika Anda membuat kesalahan atau menumpahkan program yang dihasilkan. Untuk menyimpannya, Anda dapat menyalin output dan menyimpannya ke file atau cukup jalankan perintah ini:

node assemble.js fibonacci/fibonacci.s > yourfile.h

Output diformat sedemikian rupa sehingga dapat langsung dimasukkan ke dalam firmware KIM Uno sebagai file header C, tetapi simulator juga dapat menggunakannya untuk mensimulasikan. Cukup masukkan:

simpul sim.js file Anda.h

Dan Anda akan disajikan dengan hasil simulasi dan output yang diharapkan dari KIM Uno di layar.

Ini adalah pengenalan yang sangat singkat untuk alat ini; Saya sarankan Anda untuk bermain-main dengan mereka dan melihat bagaimana mereka bekerja. Dengan cara ini Anda mendapatkan pengetahuan yang mendalam dan mempelajari prinsip-prinsip fungsi di balik CPU, instruksi, assembler, dan emulator;-)

Langkah 13: Pandangan

Pandangan
Pandangan
Pandangan
Pandangan
Pandangan
Pandangan

Selamat

Jika Anda membaca ini, Anda mungkin telah mempelajari seluruh instruksi ini dan membuat KIM Uno Anda sendiri. Ini sangat bagus.

Tetapi perjalanan tidak berakhir di sini - ada banyak sekali pilihan bagaimana Anda dapat memodifikasi KIM Uno dan menyesuaikannya dengan kebutuhan dan keinginan Anda.

Misalnya KIM Uno dapat dilengkapi dengan emulator CPU retro "nyata" yang mungkin meniru MOS 6502 atau Intel 8085, 8086 atau 8088 yang terkenal. Kemudian itu akan menuju ke visi awal saya, sebelum saya belajar tentang OISC.

Tetapi ada kemungkinan kegunaan lain, karena desain perangkat kerasnya cukup umum. KIM Uno dapat digunakan sebagai…

  • … pengendali jarak jauh mis. untuk CNC atau perangkat lain. Mungkin kabel atau dilengkapi dengan dioda IR atau pengirim nirkabel lainnya
  • … kalkulator saku (heksadesimal). Firmware dapat disesuaikan dengan sangat mudah dan desain papan tidak perlu banyak diubah. Mungkin silkscreen bisa disesuaikan dengan operasi matematika dan celah antar segmen bisa dihilangkan. Terlepas dari ini, sudah siap untuk transformasi ini

Saya harap Anda bersenang-senang mengikuti dan semoga membangun KIM Uno seperti yang saya rancang dan rencanakan. Dan jika Anda memperpanjang atau memodifikasinya - beri tahu saya. Bersulang!

Kontes PCB
Kontes PCB
Kontes PCB
Kontes PCB

Runner Up di Lomba PCB

Direkomendasikan: