Spisu treści:

KIM Uno - emulator zestawu deweloperskiego mikroprocesora za 5 euro: 13 kroków (ze zdjęciami)
KIM Uno - emulator zestawu deweloperskiego mikroprocesora za 5 euro: 13 kroków (ze zdjęciami)

Wideo: KIM Uno - emulator zestawu deweloperskiego mikroprocesora za 5 euro: 13 kroków (ze zdjęciami)

Wideo: KIM Uno - emulator zestawu deweloperskiego mikroprocesora za 5 euro: 13 kroków (ze zdjęciami)
Wideo: 🟡 POCO X5 PRO - САМЫЙ ДЕТАЛЬНЫЙ ОБЗОР и ТЕСТЫ 2024, Czerwiec
Anonim
Image
Image
KIM Uno - emulator mikroprocesorowego zestawu deweloperskiego za 5€
KIM Uno - emulator mikroprocesorowego zestawu deweloperskiego za 5€
KIM Uno - emulator mikroprocesorowego zestawu deweloperskiego za 5€
KIM Uno - emulator mikroprocesorowego zestawu deweloperskiego za 5€

KIM Uno to przenośny, zdefiniowany programowo zestaw deweloperski dla (retro) mikroprocesorów. Ale pozwólcie, że przedstawię ideę tego, cofając się w czasie:

Pod koniec 2018 roku przyszło mi do głowy, że chciałem zbudować mały przenośny mikroprocesorowy zestaw deweloperski, taki jak słynny KIM-1 firmy MOS Technology, Inc. i zaprojektowany przez Chucka Peddle'a, który był również zaangażowany w tworzenie procesora 6502.

Ale zbudowanie "gołego" zestawu deweloperskiego z dyskretnymi komponentami logicznymi nie było opcją, ponieważ wymagał dużego zasilania (ponieważ te stare urządzenia mają tendencję do pobierania poważnego prądu), a także rozwój byłby bardzo czasochłonny. I chcę to teraz!

Dlatego KIM Uno zaprojektowałem jako urządzenie przenośne, mieszczące się w jednej ręce i zasilane dwoma bateriami CR2032. Wykorzystuje mikrokontroler ATMega328p („Arduino”) działający z częstotliwością 8 MHz do emulacji (lub symulacji) żądanego procesora. Taka architektura zapewnia również, że emulowane procesory są wymienne z wszystkim, co mieści się w pamięci flash mikrokontrolera. Jest to więc urządzenie wielofunkcyjne.

Przez przypadek obejrzałem później naprawdę dobry wykład - zatytułowany The Ultimate Apollo Guidance Computer Talk (34C3) - na YouTube, gdzie wspomina się o "One Instruction Set Computers" lub OISC. Nie wiedziałem o nich i uznałem to za idealnego kandydata do jego wdrożenia.

KIM Uno emuluje procesor za pomocą tylko jednej instrukcji: subleq - odejmij i rozgałęź, jeśli jest mniejsze lub równe zero.

Jeśli podążysz za mną przez ten Instruktaż, możesz zbudować własne KIM Uno w mgnieniu oka. A najlepsze - poza tym, że możesz go zmodyfikować według własnego gustu - jest to, że kosztuje tylko 4, 75 € (stan na koniec 2018 r.).

Jedna wskazówka: istnieje repozytorium Git, które zawiera wszystkie pliki dostarczone przez różne kroki tej instrukcji. Jeśli chcesz zmodyfikować niektóre zasoby i udostępnić je nam wszystkim, możesz zrobić PR. Ale możesz też pobrać wszystkie pliki na raz. Wystarczy do https://github.com/maxstrauch/kim-uno. Dziękuję!

Jest jeszcze jeden całkiem ciekawy projekt, o tej samej nazwie (KIM Uno), który jest prawdziwą repliką 6502 KIM Uno. Sprawdź to tutaj. Twórca sprzedaje nawet zestaw. Jeśli więc interesuje Cię 6502 i podoba Ci się ten projekt, powinieneś tam zajrzeć!

Krok 1: Pozyskiwanie PCB

Pozyskiwanie PCB
Pozyskiwanie PCB
Pozyskiwanie PCB
Pozyskiwanie PCB

Jak widać, wykorzystałem możliwość zaprojektowania płytki PCB i powierzenia jej profesjonalnego wykonania. Ponieważ wytworzenie go na zewnątrz i wysłanie go do Ciebie zajmie dużo czasu (w zależności od tego, gdzie jesteś na świecie;-)), zamówienie go jest pierwszym krokiem. Następnie możemy przejść do innych kroków, podczas gdy płytka PCB zostanie wykonana i wysłana do Ciebie.

Zamówiłem moje PCB w Chinach w PCBWay za jedyne 5 USD. Nie czerpię żadnych korzyści z przedstawiania PCBWay jako mojego producenta goto dla PCB, po prostu działało to dobrze dla mnie i może również działać dobrze dla ciebie. Ale możesz je zamówić w dowolnym innym miejscu, takim jak JLCPCB, OSH Park lub lokalna firma PCB.

Ale jeśli chcesz je zamówić w PCBWay, możesz pobrać załączony plik ZIP " kim-uno-rev1_2018-12-12_gerbers.zip" i przesłać go bezpośrednio do PCBWay bez żadnych zmian. To jest oryginalny plik, którego użyłem do zamówienia płytek PCB, które można zobaczyć na zdjęciach.

Jeśli zamawiasz je od innego producenta, być może będziesz musiał je ponownie wyeksportować z oryginalnych źródeł KiCad, ponieważ wygenerowałem je ze specyfikacjami z PCBWay, które możesz znaleźć tutaj. Aby uzyskać oryginalne źródła programu KiCad, pobierz plik " kim-uno-kicad-sources.zip" i rozpakuj go.

Ale jest nawet drugi sposób: jeśli nie chcesz zamawiać płytki drukowanej, możesz zbudować własną wersję przy użyciu płytki perforowanej lub nawet płytki stykowej.

W każdym razie: skoro PCB są już w drodze, możemy skupić się na innych częściach! Chodź za mną.

Krok 2: Pozyskiwanie komponentów

Pozyskiwanie komponentów
Pozyskiwanie komponentów
Pozyskiwanie komponentów
Pozyskiwanie komponentów
Pozyskiwanie komponentów
Pozyskiwanie komponentów

Teraz musisz zdobyć komponenty. W tym celu znajdziesz obraz poglądowy wszystkich potrzebnych składników i ilości, dołączony do tego kroku, a także BOM (zestawienie materiałów).

BOM zawiera łącza do serwisu eBay. Chociaż te oferty mogą zostać zamknięte, gdy to przeczytasz, możesz użyć ich jako punktu wyjścia. Zastosowane komponenty są dość standardowe.

Poniżej wyjaśnię Ci wszystkie potrzebne komponenty:

  • Rezystory 7x 1 kΩ dla wyświetlaczy siedmiosegmentowych. Możesz zmniejszyć wartość (np. do 470 Ω), aby świeciły jaśniej, ale nie zmniejszaj jej za bardzo, w przeciwnym razie diody zgasną lub bateria bardzo szybko się wyczerpie. Zauważyłem, że ta wartość działa na mnie
  • 1x 10 kΩ jako rezystor podciągający dla linii RESET mikrokontrolera
  • 1x kondensator 100nF do wygładzania wszelkich skoków napięcia (co nie powinno się zdarzyć, ponieważ używamy baterii, prawda, ale na wszelki wypadek…)
  • 1x ATMega328P w pakiecie DIP-28 (zwykle nazywany ATMega328P-PU)
  • 1x główna płytka drukowana - patrz poprzedni krok; zamówione lub zbudowane samodzielnie
  • 2x uchwyty na baterie CR2032
  • 1x przełącznik SPDT (jednobiegunowy, podwójny), który zasadniczo ma trzy styki i w każdym z dwóch stanów (włączony lub wyłączony) łączy dwa styki
  • 20x dotykowych przycisków na klawiaturze. Aby wykorzystać tylną stronę płytki, użyłem przycisków dotykowych SMD (standardowe 6x6x6 mm) - są dość łatwe do lutowania, jak zobaczysz
  • OPCJONALNIE: 1x listwa pinowa 1x6 do podłączenia programatora, ale jest to opcjonalne, jak zobaczysz później
  • 1x siedmiosegmentowy wyświetlacz z 4 cyframi i 1x siedmiosegmentowy wyświetlacz z 2 cyframi - płytka zajmie tylko 0,36 cala (9, 14 mm) elementy ze wspólnym okablowaniem anodowym. Oba wymagania są ważne, aby uzyskać działającą jednostkę. Ale również tego typu wyświetlacze siedmiosegmentowe są bardzo popularne

Do tego kroku dołączony jest plik „component-datasheets.zip”, który zawiera dokładniejsze informacje o wymiarach i typach użytych komponentów. Ale większość komponentów jest bardzo standardowych i można je łatwo pozyskać za niewielkie pieniądze.

Teraz musisz poczekać, aż wszystkie komponenty będą gotowe do dalszego lutowania. W tym czasie możesz już przeskoczyć do końca i poczytać trochę o używaniu KIM Uno, jeśli chcesz.

Krok 3: Przegląd lutownicy

Przegląd lutownicy
Przegląd lutownicy
Przegląd lutownicy
Przegląd lutownicy

Do lutowania i budowy KIM Uno potrzebne są narzędzia pokazane na zdjęciach:

  • Przecinak do drutu (do odcinania końcówek przewodów składowych)
  • Szczypce płaskie
  • Para pęsety
  • (przyzwoicie) Lut, który nie jest zbyt gruby - używam lutu 0,56 mm
  • Lutownica - nie potrzebujesz wysokiej klasy lutownicy (bo tu też nie zajmujemy się nauką o rakietach) - od dawna używam Ersa FineTip 260 i jest naprawdę dobra
  • Topnik w pisaku: dodanie topnika do komponentów i padów znacznie ułatwia ich lutowanie, ponieważ lut „spływa” sam we właściwe miejsce*
  • Opcjonalnie: gąbka (z wełny metalowej) do lutownicy

Do późniejszego zaprogramowania KIM Uno potrzebne będą również:

  • komputer z toolchainem AVR-GCC i avrdude do wgrania firmware
  • ISP (programista) - jak widać na obrazku używam mojego Arduino Uno jako ISP ze specjalnym szkicem - więc nie ma potrzeby kupowania żadnego wymyślnego sprzętu

* potrzebne wskazówki od ludzi;-)

Jesteś gotowy? W następnym kroku zaczniemy składać KIM Uno.

Krok 4: Lutowanie #1: Dodawanie rezystorów i kondensatorów

Lutowanie #1: Dodawanie rezystorów i kondensatorów
Lutowanie #1: Dodawanie rezystorów i kondensatorów
Lutowanie #1: Dodawanie rezystorów i kondensatorów
Lutowanie #1: Dodawanie rezystorów i kondensatorów
Lutowanie #1: Dodawanie rezystorów i kondensatorów
Lutowanie #1: Dodawanie rezystorów i kondensatorów
Lutowanie #1: Dodawanie rezystorów i kondensatorów
Lutowanie #1: Dodawanie rezystorów i kondensatorów

Zawsze powinieneś pracować od najmniejszych (pod względem wysokości komponentów) komponentów w pierwszej kolejności, do najwyższych komponentów na końcu. Dlatego zaczynamy od dodania rezystorów i pochylenia się nad nogami z tyłu, aby rezystory były łatwe do przylutowania i pozostały na swoim miejscu. Następnie odetnij długie przewody.

Również nie pokazano na zdjęciach, dodaj mały kondensator 100 nF w ten sam sposób.

Jedna wskazówka: trzymaj te druciane nogi w małym pojemniku, czasem się przydadzą.

Krok 5: Lutowanie #2: Montaż klawiatury

Lutowanie #2: Montaż klawiatury
Lutowanie #2: Montaż klawiatury
Lutowanie #2: Montaż klawiatury
Lutowanie #2: Montaż klawiatury
Lutowanie #2: Montaż klawiatury
Lutowanie #2: Montaż klawiatury

Następnym krokiem jest przylutowanie 20 dotykowych przełączników SMD. Ponieważ ta praca jest trochę kłopotliwa, robimy to teraz, kiedy płytka PCB leży płasko na stole warsztatowym.

Będziemy pracować od góry do dołu (lub od lewej do prawej, jeśli płytka jest zorientowana tak, jak pokazano na zdjęciach) i zaczniemy od pierwszego rzędu: wybierz jeden z czterech padów dla każdego przełącznika i zwilż go pisakiem topnikowym.

Następnie użyj pęsety, aby chwycić przełącznik i ostrożnie umieścić go na czterech podkładkach. Następnie przylutuj tylko nóżkę przełącznika, która jest na podkładce, którą wybrałeś i przygotowałeś z topnikiem. W tym celu przed rozpoczęciem należy "złapać" trochę lutu żelazkiem. Tą metodą skompletuj cały rząd przełączników, lutując tylko jedną nogę.

Obraz ze strzałkami pokazuje w powiększeniu, jak dokładnie zostało wykonane lutowanie.

Po przylutowaniu całego rzędu (tylko jeden kołek) można dokonać drobnych korekt, podgrzewając kołek z powrotem i ponownie ustawiając przełącznik. Upewnij się, że przełączniki są ustawione tak dobrze, jak to możliwe.

Jeśli jesteś zadowolony z wyrównania, możesz zwilżyć wszystkie pozostałe piny topnikiem, a następnie przylutować je dotykając lutownicą i dodając trochę lutu, również dotykając. Zobaczysz, że lut jest zasysany bezpośrednio do podkładki.

Po przylutowaniu rzędu zauważysz, że to łapiesz i nie jest to takie trudne, ale powtarzalne. Więc po prostu zrób resztę, a otrzymasz gotową klawiaturę w mgnieniu oka.

Krok 6: Lutowanie #3: wyświetlacz siedmiosegmentowy, przełącznik i nagłówek pinów

Lutowanie #3: wyświetlacz siedmiosegmentowy, przełącznik i głowica pinowa
Lutowanie #3: wyświetlacz siedmiosegmentowy, przełącznik i głowica pinowa
Lutowanie #3: wyświetlacz siedmiosegmentowy, przełącznik i głowica pinowa
Lutowanie #3: wyświetlacz siedmiosegmentowy, przełącznik i głowica pinowa
Lutowanie #3: wyświetlacz siedmiosegmentowy, przełącznik i głowica pinowa
Lutowanie #3: wyświetlacz siedmiosegmentowy, przełącznik i głowica pinowa

Teraz możesz dodać przełącznik i nagłówek pinów (opcjonalnie), przytrzymując je palcem i lutując jeden pin, aby przymocować go do płytki drukowanej, tak aby można było przylutować pozostałe piny i na koniec poprawić początkowy pin mocujący.

Uważaj, aby nie poparzyć się gorącą lutownicą. Jeśli nie czujesz się z tym komfortowo, możesz użyć trochę taśmy (np. taśmy malarskiej), aby przytrzymać element. W ten sposób masz wolne obie ręce do poruszania się.

Wyświetlacze siedmiosegmentowe są lutowane w ten sam sposób (patrz zdjęcie): wkładasz go, trzymasz ręką lub taśmą i lutujesz dwa przeciwległe piny, aby utrzymać go na miejscu, podczas gdy możesz lutować inne piny.

Ale bądź ostrożny i ustaw siedmiosegmentowy wyświetlacz we właściwym kierunku (kropki dziesiętne skierowane w stronę klawiatury). W przeciwnym razie masz kłopoty…

Krok 7: Lutowanie #4: Lutowanie mikrokontrolera

Lutowanie #4: Lutowanie mikrokontrolera
Lutowanie #4: Lutowanie mikrokontrolera

Teraz, gdy masz dużo praktyki, możesz śmiało włożyć mikrokontroler tak, aby wycięcie na górze (lub pierwszy pin) było skierowane w stronę przełącznika. Za pomocą płaskich szczypiec można delikatnie wygiąć nóżki mikrokontrolera, tak aby pasowały do otworów na płytce drukowanej.

Ponieważ jest ciasno spasowany, włożenie mikrokontrolera wymaga pewnej kontrolowanej siły. Zaletą jest to, że nie wypada. Oznacza to, że możesz nie spieszyć się i przylutować go od tyłu.

Krok 8: Lutowanie #5: Dodaj uchwyty baterii (ostatni krok)

Lutowanie #5: Dodaj uchwyty baterii (ostatni krok)
Lutowanie #5: Dodaj uchwyty baterii (ostatni krok)
Lutowanie #5: Dodaj uchwyty baterii (ostatni krok)
Lutowanie #5: Dodaj uchwyty baterii (ostatni krok)
Lutowanie #5: Dodaj uchwyty baterii (ostatni krok)
Lutowanie #5: Dodaj uchwyty baterii (ostatni krok)

Na koniec musisz dodać uchwyty baterii z tyłu. W tym celu wystarczy użyć topnika i zwilżyć wszystkie cztery pady, a następnie nałożyć trochę lutu na żelazko. Ostrożnie dopasuj uchwyt baterii do obu elektrod. Na obu końcach styków powinna być widoczna taka sama ilość padu PCB. Dotknij podkładki PCB i nogi uchwytu baterii żelazkiem. Lut przepłynie pod padem i nad nim i zabezpieczy go na miejscu, jak pokazano na obrazku. Jeśli masz z tym problemy, możesz dodać więcej topnika za pomocą pióra.

Krok 9: Flashowanie emulatora

Flashowanie emulatora
Flashowanie emulatora
Flashowanie emulatora
Flashowanie emulatora
Flashowanie emulatora
Flashowanie emulatora

W załączonym archiwum zip " kim-uno-firmware.zip" znajdziesz kod źródłowy emulatora wraz z już skompilowanym "main.hex", który możesz bezpośrednio wgrać do mikrokontrolera.

Zanim będzie można z niego faktycznie korzystać, należy ustawić bity fuse bitów mikrokontrolera tak, aby korzystał z wewnętrznego zegara 8 MHz bez dzielenia go na pół. Możesz wykonać zadanie za pomocą następującego polecenia:

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

Jeśli nie znasz avrdude: jest to program do wgrywania programów do mikrokontrolera. Więcej na ten temat dowiesz się tutaj. Zasadniczo instalujesz go, a następnie jest gotowy do użycia. Dla twojej konfiguracji może być konieczna zmiana argumentu "-P" na inny port szeregowy. Sprawdź na swoim komputerze, który port szeregowy jest używany (np. wewnątrz Arduino IDE).

Następnie możesz sflashować oprogramowanie układowe do mikrokontrolera za pomocą tego polecenia:

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

Znowu: to samo dotyczy "-P" jak powyżej.

Ponieważ nie posiadam „profesjonalnego” ISP (programisty w systemie), zawsze używam mojego Arduino UNO (patrz zdjęcie) i załączonego szkicu („arduino-isp.ino”, od Randall Bohn). Wiem, że jest nowsza wersja, ale z tą wersją nie miałem żadnych problemów przez ostatnie pięć lat, więc ją trzymam. To po prostu działa. Korzystając z komentarza w nagłówku szkicu, otrzymujesz pinout na Arduino UNO, a korzystając ze schematu KIM Uno (patrz załączony) możesz uzyskać pinout nagłówka ISP 1x6 na KIM Uno. Kwadratowy pin w pobliżu wyświetlacza siedmiosegmentowego to pin 1 (GND). Następujące piny to (w odpowiedniej kolejności): RESET, MOSI, MISO, SCK, VCC. Możesz podłączyć VCC do 3V3 lub 5V.

Jeśli nie dodałeś listwy 1x6 pin, możesz użyć przewodów płytki stykowej i włożyć je do otworów połączeniowych i pod kątem je palcem - tak jak pokazano na zdjęciu. To zapewnia wystarczający kontakt, aby sflashować oprogramowanie i ustawić bezpieczniki. Ale jeśli lubisz bardziej trwałą konfigurację, zdecydowanie powinieneś dodać nagłówki 1x6.

Mam dwa urządzenia: wersję produkcyjną bez nagłówków pinów oraz wersję rozwojową z nagłówkami pinów, które zostawiam podłączone i używam w kółko podczas rozwoju. To jest o wiele wygodniejsze.

Krok 10: Zakończono

Skończone
Skończone
Skończone
Skończone

Teraz jesteś skończony i możesz zacząć pisać własne programy subleq na papierze, składać je, a następnie wprowadzać do pamięci.

KIM Uno jest wyposażony w zaprogramowane obliczenia Fibonacciego zaczynające się od lokalizacji pamięci 0x0a. Domyślnie jest ustawiony na n = 6, więc powinno dać wartość 8. Naciśnij "Go", aby rozpocząć obliczenia.

Krok 11: Analiza projektu PCB

Analiza projektu PCB
Analiza projektu PCB
Analiza projektu PCB
Analiza projektu PCB

Po ukończeniu tego projektu znalazłem kilka punktów, które są godne uwagi i powinny zostać poruszone w nowej wersji tablicy:

  • W sitodruku ATMega328p nie ma zwykłego wycięcia, w którym znajduje się pierwsza szpilka. Ślad DIP-28 nie ma nawet kwadratowej podkładki, w której znajduje się pierwszy pin. Należy to zdecydowanie poprawić za pomocą bardziej szczegółowego sitodruku, aby zapobiec zamieszaniu
  • nagłówek ISP nie ma etykiet połączeń na sitodruku. Utrudnia to rozpoznanie, jak podłączyć go do dostawcy usług internetowych
  • nagłówek ISP może zostać zmieniony na nagłówek pinowy 2x6 ze standardowym układem pinów, aby uniknąć nieporozumień

Poza tymi punktami jestem całkiem zadowolony z tego, jak wyszło i zadziałało za pierwszym podejściem.

Krok 12: Jak zaprogramować SUBLEQ?

Image
Image
Jak zaprogramować SUBLEQ?
Jak zaprogramować SUBLEQ?
Jak zaprogramować SUBLEQ?
Jak zaprogramować SUBLEQ?

Jak wspomniano na początku, obecne oprogramowanie układowe KIM Uno emuluje komputer z jednym zestawem instrukcji (OISC) i udostępnia instrukcję podrzędną do wykonywania obliczeń.

Instrukcja subleq oznacza odejmowanie i rozgałęzienie, jeśli jest mniejsze lub równe zero. W pseudokodzie wygląda to tak:

subleq A B C mem[B] = mem [B] - mem[A]; if (mem[B] <= 0) przejdź do C;

Ponieważ KIM Uno emuluje maszynę 8-bitową, wszystkie argumenty A, B i C są wartościami 8-bitowymi i dlatego może zaadresować całkowitą pamięć główną o wielkości 256 bajtów. Oczywiście można to rozszerzyć, tworząc wielobajtowe wartości A, B i C. Ale na razie zachowajmy prostotę.

KIM Uno ma również „peryferia”: wyświetlacz i klawiaturę. Wykorzystuje architekturę mapowaną w pamięci do łączenia tych urządzeń peryferyjnych, chociaż mapa pamięci jest bardzo prosta:

  • 0x00 = rejestr Z (zero) i powinno być zerowe.
  • 0x01 - 0x06 = sześć bajtów, które reprezentują wartość każdego z segmentów wyświetlacza (od prawej do lewej). Wartość 0xf - więcej szczegółów znajdziesz w kodzie źródłowym (main.c).
  • 0x07, 0x08, 0x09 = trzy bajty, gdzie każdy bajt reprezentuje dwa wyświetlacze siedmiosegmentowe (od prawej do lewej). Te lokalizacje pamięci pozwalają na proste wyświetlanie wyniku bez dzielenia wyniku na dwie części w celu umieszczenia go w jednocyfrowych lokalizacjach pamięci 0x01 - 0x06.
  • 0x0a+ = Program zaczyna się od 0x0a. Obecnie klawisz "Go" wykonuje się od 0x0a naprawione.

Dzięki tym informacjom można teraz napisać program w asemblerze i wprowadzić instrukcje do pamięci, a następnie je wykonać. Ponieważ istnieje tylko jedna instrukcja, wprowadzane są tylko argumenty (A, B i C). Tak więc po trzech lokalizacjach w pamięci zaczynają się następne argumenty instrukcji i tak dalej.

Do tego kroku dołączony jest plik „fibonacci.s”, a także obraz odręcznie napisanego programu, który jest przykładową implementacją Fibonacciego. Ale poczekaj: używane są trzy instrukcje - konkretnie ADD, MOV i HLT - które nie są podrzędne. - O co chodzi? Czy nie mówiłeś, że jest tylko jedna instrukcja, subleq? pytasz? To bardzo proste: z subleq można bardzo łatwo naśladować te instrukcje:

MOV a, b - kopiowanie danych w lokalizacji a do b może składać się z:

  1. podleq b, b, 2 (następna instrukcja)
  2. podleq a, Z, 3 (następna instrukcja)
  3. podleq Z, b, 4 (następna instrukcja)
  4. podleq Z, Z, np. 5 (następna instrukcja)

Używając funkcji subleq odejmowania, która wykonuje mem - mem[a] i nadpisuje mem wynikiem, wartość jest kopiowana przy użyciu rejestru zerowego. A „subleq Z, Z, …” po prostu resetuje rejestr zerowy do 0, niezależnie od wartości Z.

DODAJ a, b - dodaje wartości a + b i przechowuje sumę w b może składać się z:

  1. podleq a, Z, 2 (następna instrukcja)
  2. podleq Z, b, 3 (następna instrukcja)
  3. podleq Z, Z, np. 4 (następna instrukcja)

Ta instrukcja po prostu oblicza mem - (- mem[a]), czyli mem + mem[a] również przy użyciu funkcji odejmowania.

HLT - zatrzymuje procesor i kończy wykonywanie:

Z definicji emulator wie, że procesor chce zakończyć działanie, jeśli przeskoczy do 0xff (lub -1, jeśli jest oznaczony). Więc proste

podrzędny Z, Z, -1

wykonuje zadanie i wskazuje emulatorowi, że powinien zakończyć emulację.

Korzystając z tych trzech prostych instrukcji, algorytm Fibonacciego może zostać zaimplementowany i działa dobrze. Dzieje się tak, ponieważ OISC może obliczyć wszystko, co "prawdziwy" komputer może obliczyć tylko za pomocą podleq instrukcji. Ale oczywiście jest wiele kompromisów do zrobienia - jak długość kodu i szybkość. Niemniej jednak jest to świetny sposób na naukę i eksperymentowanie z oprogramowaniem i komputerami niskiego poziomu.

Do tego kroku dołączone jest także archiwum zip " kim_uno_tools.zip". Zawiera podstawowy asembler i symulator dla KIM Uno. Są napisane w NodeJS - upewnij się, że je zainstalowałeś.

Składanie programów

Jeśli spojrzysz na "fibonacci/fibonacci.s", przekonasz się, że jest to kod źródłowy omawianej implementacji fibonacci. Aby go złożyć i zrobić z niego program, który KIM Uno może uruchomić, wpisujesz następujące polecenie (w katalogu głównym rozpakowanego archiwum „kim_uno_tools.zip”):

węzeł assemble.js fibonacci/fibonacci.s

i albo wypisze błąd, jeśli popełniłeś błąd, albo wyleje wynikowy program. Aby go zapisać, możesz skopiować dane wyjściowe i zapisać je do pliku lub po prostu uruchomić to polecenie:

node assemble.js fibonacci/fibonacci.s > twój plik.h

Dane wyjściowe są sformatowane w taki sposób, że mogą być bezpośrednio dołączone do oprogramowania układowego KIM Uno jako plik nagłówkowy C, ale symulator może również wykorzystać je do symulacji. Wystarczy wpisać:

node sim.js twójplik.h

Na wyświetlaczu pojawi się wynik symulacji i dane wyjściowe oczekiwane od KIM Uno.

To było bardzo krótkie wprowadzenie do tych narzędzi; Polecam pobawić się nimi i przyjrzeć się, jak działają. W ten sposób zdobędziesz głęboką wiedzę i poznasz zasady działania procesorów, instrukcji, asemblerów i emulatorów;-)

Krok 13: Outlook

Perspektywy
Perspektywy
Perspektywy
Perspektywy
Perspektywy
Perspektywy

Gratulacje

Jeśli to czytasz, prawdopodobnie przeszedłeś przez całą tę instrukcję i zbudowałeś własne KIM Uno. To naprawdę miłe.

Ale podróż nie kończy się na tym - istnieje nieskończona ilość możliwości modyfikacji KIM Uno i dostosowania go do własnych potrzeb i upodobań.

Na przykład KIM Uno mógłby być wyposażony w "prawdziwy" emulator procesora retro, który mógłby emulować słynny MOS 6502 lub Intel 8085, 8086 lub 8088. Wtedy poszłoby to w kierunku mojej początkowej wizji, zanim dowiedziałem się o OISC.

Ale możliwe są inne zastosowania, ponieważ konstrukcja sprzętu jest dość ogólna. KIM Uno może być używany jako …

  • … pilot zdalnego sterowania np. dla CNC lub innych urządzeń. Może być przewodowy lub wyposażony w diodę IR lub inny bezprzewodowy nadajnik
  • … kalkulator kieszonkowy (szesnastkowy). Oprogramowanie układowe można bardzo łatwo dostosować, a projekt płyty nie musi być zbytnio zmieniany. Być może sitodruk można dostosować za pomocą operacji matematycznych i usunąć lukę między segmentami. Poza tym jest już gotowy na tę transformację

Mam nadzieję, że obserwowanie i budowanie KIM Uno sprawiło ci tyle radości, ile ja projektowałem i planowałem. A jeśli ją rozszerzysz lub zmodyfikujesz - daj mi znać. Pozdrawiam!

Konkurs na PCB
Konkurs na PCB
Konkurs na PCB
Konkurs na PCB

Drugie miejsce w konkursie PCB

Zalecana: