Съдържание:

KIM Uno - 5 € микропроцесорен Dev Kit емулатор: 13 стъпки (със снимки)
KIM Uno - 5 € микропроцесорен Dev Kit емулатор: 13 стъпки (със снимки)

Видео: KIM Uno - 5 € микропроцесорен Dev Kit емулатор: 13 стъпки (със снимки)

Видео: KIM Uno - 5 € микропроцесорен Dev Kit емулатор: 13 стъпки (със снимки)
Видео: The Choice is Ours (2016) Official Full Version 2024, Юни
Anonim
Image
Image
KIM Uno - 5 € микропроцесорен Dev Kit емулатор
KIM Uno - 5 € микропроцесорен Dev Kit емулатор
KIM Uno - 5 € микропроцесорен Dev Kit емулатор
KIM Uno - 5 € микропроцесорен Dev Kit емулатор

KIM Uno е преносим софтуерно дефиниран комплект за (ретро) микропроцесори. Но нека въведа идеята за това, като се върна във времето:

В края на 2018 г. ми хрумна, че исках да създам малък преносим комплект за разработка на микропроцесори, точно като известния KIM-1 от MOS Technology, Inc. и проектиран от Chuck Peddle, който също участва в създаването на 6502 CPU.

Но изграждането на комплект за разработчици с „голи кости“с дискретни логически компоненти не беше опция, тъй като се нуждаеше от голямо захранване (тъй като тези древни устройства са склонни да поемат сериозен ток), а също така развитието щеше да отнеме много време. И аз го искам сега!

Затова проектирах KIM Uno като преносимо устройство, което се побира в една ръка и се захранва от две батерии CR2032. Той използва микроконтролера ATMega328p ("Arduino"), работещ на 8 MHz, за да емулира (или симулира) желания процесор. Тази архитектура също така гарантира, че емулираните процесори са взаимозаменяеми с всичко, което се побира във флаш паметта на микроконтролера. Така че това е многофункционално устройство.

По стечение на обстоятелствата по -късно гледах един наистина добър разговор - наречен The Ultimate Apollo Guidance Computer Talk (34C3) - в YouTube, където се споменават „Компютри с една инструкция“или OISC. Не знаех за тях и намерих това за идеалния кандидат за прилагането му.

KIM Uno емулира CPU само с една инструкция: subleq - изважда и разклонява, ако е по -малко или равно на нула.

Ако следвате заедно с мен през тази инструкция, можете да създадете свой собствен KIM Uno за нула време. И най -хубавото - освен факта, че можете да го модифицирате според вашия вкус - е, че струва само 4, 75 € за изработка (към края на 2018 г.).

Един съвет: има хранилище на Git, което съдържа всички файлове, предоставени от различните стъпки на тази инструкция. В случай, че искате да промените някои ресурси и да ги споделите с нас, можете да направите PR. Но можете също да изтеглите всички файлове наведнъж там. Просто отидете на https://github.com/maxstrauch/kim-uno. Благодаря!

Има и друг доста интересен проект, наречен същия (KIM Uno), който прави истинска реплика на 6502 KIM Uno. Проверете го тук. Създателят дори продава комплекта. Така че, ако се интересувате от 6502 и харесвате този проект, трябва да погледнете там!

Стъпка 1: Източник на печатни платки

Източник на печатни платки
Източник на печатни платки
Източник на печатни платки
Източник на печатни платки

Както можете да видите, използвах възможността да проектирам печатна платка и да я направя професионално направена. Тъй като го произвеждате отвън и го доставяте до вас, ще отнеме много време (в зависимост от това къде се намирате по света;-)), поръчването му е първата стъпка. След това можем да продължим с останалите стъпки, докато печатната платка е изработена и изпратена до вас.

Поръчах моите печатни платки в Китай в PCBWay само за 5 долара. Не получавам никаква полза от представянето на PCBWay като мой производител на печатни платки, просто той работи добре за мен и може да работи добре и за вас. Но можете да ги поръчате на всяко друго място като JLCPCB, OSH Park или друга местна компания за печатни платки.

Но ако желаете да ги поръчате в PCBWay, можете да изтеглите прикачения пощенски файл „kim-uno-rev1_2018-12-12_gerbers.zip“и да го качите директно в PCBWay без никакви промени. Това е оригиналният файл, който използвах, за да поръчам печатни платки, които можете да видите на изображенията.

Ако ги поръчвате от друг производител, може да се наложи да ги реекспортирате от оригиналните източници на KiCad, защото ги генерирах със спецификациите от PCBWay, които можете да намерите тук. За оригиналните източници на KiCad изтеглете „kim-uno-kicad-sources.zip“и го извлечете.

Но има дори втори начин: ако не искате да поръчате печатната платка, можете да създадете своя собствена версия, използвайки перфборд или дори макет.

Както и да е: тъй като печатните платки вече са на път, можем да се съсредоточим върху другите части! Ела, следвай ме.

Стъпка 2: Източник на компоненти

Източник на компонентите
Източник на компонентите
Източник на компонентите
Източник на компонентите
Източник на компонентите
Източник на компонентите

Сега трябва да вземете компонентите. За това ще намерите общ образ на всички компоненти и количества, от които се нуждаете, приложен към тази стъпка, както и спецификация (материал).

Спецификацията съдържа връзки към eBay. Въпреки че тези оферти може да бъдат затворени, когато прочетете това, можете да го използвате като отправна точка. Използваните компоненти са доста стандартни.

По -долу ще ви обясня всички необходими компоненти:

  • 7x 1 kΩ резистори за седемте сегментни дисплея. Можете да намалите стойността (например до 470 Ω), за да ги накарате да блестят по -силно, но не я намалявайте твърде много, в противен случай светодиодите ще умрат или батерията се изтощи много бързо. Открих, че тази стойност работи за мен
  • 1x 10 kΩ като изтеглящ резистор за линията RESET на микроконтролера
  • 1x 100nF кондензатор за изглаждане на всички скокове на напрежението (което не би трябвало да се случва, тъй като използваме батерии, нали, но за добра мярка …)
  • 1x ATMega328P в пакета DIP-28 (обикновено се нарича ATMega328P-PU)
  • 1x основната платка - вижте предишната стъпка; поръчани или изработени от вас
  • 2x държачи за батерии CR2032
  • 1x SPDT (еднополюсен, двукратен) превключвател, който основно има три контакта и във всяко от двете си състояния (включен или изключен) свързва два контакта
  • 20x тактилни бутони за клавиатурата. За да използвам задната част на печатната платка, използвах SMD тактилни бутони (стандартните 6x6x6 mm такива) - те са доста лесни за запояване, както ще видите
  • ОПЦИЯ: 1x 1x6 пинов хедър за свързване на програмиста, но това е по избор, както ще видите по -късно
  • 1x седемсегментен дисплей с 4 цифри и 1x седем сегментен дисплей с 2 цифри - платката ще поеме само 0,36 инчови (9, 14 мм) елементи с общо анодно окабеляване. И двете изисквания са важни, за да се получи работна единица. Но също така този тип седем сегментни дисплеи са много често срещани

Приложен към тази стъпка можете да намерите файла "component-datasheets.zip", който съдържа по-точна информация за размерите и типовете на използваните компоненти. Но повечето от компонентите са много стандартни и могат да бъдат доставени лесно за малко пари.

Сега трябва да изчакате, докато всички компоненти са готови, за да продължите да запоявате. През това време вече можете да скочите до края и да прочетете малко за използването на KIM Uno, ако желаете.

Стъпка 3: Преглед на инструмента за запояване

Преглед на инструмента за запояване
Преглед на инструмента за запояване
Преглед на инструмента за запояване
Преглед на инструмента за запояване

За запояване и изграждане на KIM Uno се нуждаете от инструментите, показани на изображенията:

  • Резачка за тел (за да отрежете края на проводниците на компонентите)
  • Плоски клещи
  • Чифт пинсети
  • (приличен) Припой, който не е твърде дебел - използвам спойка 0,56 мм
  • Поялник - не се нуждаете от поялник от висок клас (защото тук също не се занимаваме с ракетна наука) - използвам Ersa FineTip 260 от дълго време и е наистина добър
  • Флюс писалка: добавянето на поток към компонентите и подложките прави много по -лесно тяхното запояване, тъй като спойката след това „тече“сама по себе си на правилното място*
  • По избор: гъба (от метална вата) за вашия поялник

За по -късно програмиране на KIM Uno също ще ви трябва:

  • компютър с AVR-GCC инструментариум и avrdude за качване на фърмуера
  • ISP (програмист) - както можете да видите на изображението, използвам моя Arduino Uno като ISP със специална скица - така че няма нужда да купувате някакъв изискан хардуер

* необходими са някои насоки от хора;-)

Готов ли си? В следващата стъпка ще започнем да сглобяваме KIM Uno.

Стъпка 4: Запояване #1: Добавяне на резистори и кондензатори

Запояване #1: Добавяне на резистори и кондензатори
Запояване #1: Добавяне на резистори и кондензатори
Запояване #1: Добавяне на резистори и кондензатори
Запояване #1: Добавяне на резистори и кондензатори
Запояване #1: Добавяне на резистори и кондензатори
Запояване #1: Добавяне на резистори и кондензатори
Запояване #1: Добавяне на резистори и кондензатори
Запояване #1: Добавяне на резистори и кондензатори

Винаги трябва първо да работите от най -малките (по отношение на височината на компонентите) компоненти до последните най -високите компоненти. Затова започваме с добавяне на резисторите и огъване над краката отзад, така че резисторите да се запояват лесно и да останат на място. След това отрежете дългите проводници.

Също така, не е показано на изображенията, добавете малкия 100 nF кондензатор по същия начин.

Един съвет: дръжте тези телени крака в малък контейнер, понякога са полезни.

Стъпка 5: Запояване #2: Сглобяване на клавиатурата

Запояване #2: Сглобяване на клавиатурата
Запояване #2: Сглобяване на клавиатурата
Запояване #2: Сглобяване на клавиатурата
Запояване #2: Сглобяване на клавиатурата
Запояване #2: Сглобяване на клавиатурата
Запояване #2: Сглобяване на клавиатурата

Следващата стъпка е да запоите 20 SMD тактилни превключвателя. Тъй като тази работа е малко неудобна, ние я правим сега, когато печатната платка лежи върху работната маса.

Ще работим отгоре надолу (или отляво надясно, ако печатната платка е ориентирана, както е показано на снимките) и ще започнем с първия ред: изберете една от четирите подложки за всеки превключвател и я намокрете с писалката.

След това използвайте чифт пинсети, за да вземете превключвател и да го поставите внимателно върху четирите подложки. След това запоявайте само крака на превключвателя, който е върху подложката, която сте избрали и приготвили с поток. За това трябва да "вземете" малко спойка с ютията си, преди да започнете. Използвайки този метод, завършете целия ред превключватели, запоявайки само един крак.

Изображението със стрелките показва увеличение как точно е извършено запояването.

След като сте запояли целия ред (само с един щифт), можете да направите малки корекции, като загреете щифта обратно и отново позиционирате превключвателя. Уверете се, че превключвателите са подредени възможно най -добре.

Ако сте доволни от подравняването, можете да намокрите всички останали щифтове с писалката и след това да ги запоите, като я докоснете с поялника и добавете малко спойка, като я докоснете също. Ще видите, че спойката е засмукана директно върху подложката.

След запояване на един ред или повече ще забележите, че се справяте и не е толкова трудно, но се повтаря. Така че направете останалото и за нула време ще получите завършена клавиатура.

Стъпка 6: Запояване #3: Седем сегментният дисплей, превключвател и заглавка на щифт

Запояване #3: Седем сегментният дисплей, превключвател и заглавка на щифтове
Запояване #3: Седем сегментният дисплей, превключвател и заглавка на щифтове
Запояване #3: Седем сегментният дисплей, превключвател и заглавка на щифтове
Запояване #3: Седем сегментният дисплей, превключвател и заглавка на щифтове
Запояване #3: Седем сегментният дисплей, превключвател и заглавка на щифтове
Запояване #3: Седем сегментният дисплей, превключвател и заглавка на щифтове

Сега можете да добавите превключвателя и заглавката на щифта (по избор), като го държите с пръст и запоявате един щифт, за да го държите към печатната платка, така че да можете да запоявате другите щифтове и накрая да докоснете първоначалния задържащ щифт.

Внимавайте да не се изгорите с горещия поялник. Ако това не ви харесва, можете да използвате малко лента (например бояджийска лента), за да задържите компонента. По този начин имате две ръце свободни за движение.

Седемте сегментни дисплея са запоени по същия начин (вижте изображението): поставяте го, държите го с ръка или лента и запоявате два противоположни щифта, за да го задържите на място, докато можете да запоявате другите щифтове.

Но бъдете внимателни и поставете седем сегментния дисплей в правилната посока (с десетични точки, обърнати към клавиатурата). Иначе си в беда …

Стъпка 7: Запояване #4: Запояване на микроконтролера

Запояване #4: Запояване на микроконтролера
Запояване #4: Запояване на микроконтролера

Сега, когато имате много практика, можете да продължите напред и да поставите микроконтролера с прореза на горната част (или първия щифт), обърнат към превключвателя. С помощта на плоски клещи можете внимателно леко да огънете краката на микроконтролера, така че да съвпадат с отворите на печатната платка.

Тъй като е плътно прилепнал, имате нужда от някаква контролирана сила, за да поставите микроконтролера. Предимството е, че не пада. Това означава, че можете да отделите време и да го запоите отзад.

Стъпка 8: Запояване #5: Добавете държачите на батерията (последна стъпка)

Запояване #5: Добавете държачите на батериите (последна стъпка)
Запояване #5: Добавете държачите на батериите (последна стъпка)
Запояване #5: Добавете държачите на батерията (последна стъпка)
Запояване #5: Добавете държачите на батерията (последна стъпка)
Запояване #5: Добавете държачите на батериите (последна стъпка)
Запояване #5: Добавете държачите на батериите (последна стъпка)

Накрая трябва да добавите държачите на батерията отзад. За това просто използвайте писалката и намокрете четирите подложки и след това поставете малко спойка върху ютията си. Подравнете внимателно държача на батерията на двете подложки. В двата края на контактите трябва да се вижда еднакво количество на PCB подложката. Докоснете печатната платка и крака на държача на батерията с ютията си. Припоят ще тече под подложката и над нея и ще я закрепи на място, както е показано на изображението. Ако имате проблеми с това, можете да добавите още флюс с писалката.

Стъпка 9: Мига на емулатора

Мига на емулатора
Мига на емулатора
Мига на емулатора
Мига на емулатора
Мига на емулатора
Мига на емулатора

В прикачения zip архив „kim-uno-firmware.zip“можете да намерите изходния код за емулатора заедно с вече компилиран „main.hex“, който можете директно да качите в микроконтролера.

Преди да можете да го използвате, трябва да настроите предпазителите на микроконтролера, така че да използва вътрешния 8 MHz часовник, без да го разделя наполовина. Можете да свършите работата със следната команда:

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: това е програма за качване на програми в микроконтролер. Можете да научите повече за това тук. По принцип го инсталирате и след това е готов за употреба. За вашата настройка може да се наложи да промените аргумента на "-P" на друг сериен порт. Моля, проверете на вашия компютър кой сериен порт се използва (например вътре в Arduino IDE).

След това можете да мигате фърмуера на микроконтролера с тази команда:

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

Отново: същото важи за "-P", както по-горе.

Тъй като не притежавам "професионален" ISP (програмист в системата), винаги използвам моя Arduino UNO (вижте изображението) и приложената скица ("arduino-isp.ino", от Randall Bohn). Знам, че има по -нова версия, но с тази версия нямах никакви проблеми през последните пет години, затова я запазвам. Просто работи. Използвайки коментара в заглавката на скицата, получавате разпечатката на Arduino UNO и като използвате схемата на KIM Uno (вижте приложеното), можете да получите разпечатката на заглавката на ISP 1x6 на KIM Uno. Квадратният щифт, близо до седемсегментния дисплей, е щифт 1 (GND). Следните щифтове са (в правилния ред): RESET, MOSI, MISO, SCK, VCC. Можете да свържете VCC към 3V3 или към 5V.

Ако не сте добавили заглавката с 1x6 щифтове, можете да използвате проводници за платки и да ги поставите в отворите за свързване и да ги наклоните с пръст - точно както е показано на снимката. Това прави достатъчно контакт, за да мига фърмуера и да настрои предпазителите. Но ако харесвате по -постоянна настройка, определено трябва да добавите 1x6 пинови заглавки.

Имам две устройства: производствена версия без щифтове и версия за разработка с пинови заглавки, които оставям свързани и ги използвам отново и отново по време на разработката. Това е много по -удобно.

Стъпка 10: Готово

Завършен
Завършен
Завършен
Завършен

Сега сте готови и можете да започнете да пишете свои собствени сублек програми на хартия, да ги сглобявате и след това да ги въвеждате в паметта.

KIM Uno идва с предварително програмирано изчисление на Фибоначи, започващо от място на паметта 0x0a. По подразбиране е зададено на n = 6, така че трябва да доведе до стойност 8. Натиснете "Go", за да започнете изчислението.

Стъпка 11: Анализ на дизайна на печатни платки

Анализ на дизайна на печатни платки
Анализ на дизайна на печатни платки
Анализ на дизайна на печатни платки
Анализ на дизайна на печатни платки

След завършването на този проект открих няколко точки, които са забележителни и трябва да бъдат разгледани в нова редакция на борда:

  • коприненият екран на ATMega328p няма обичайния прорез, където се намира първият щифт. Отпечатъкът DIP-28 дори няма квадратна подложка, където се намира първият щифт. Това определено трябва да се подобри с по -подробна коприна, за да се предотврати объркване
  • заглавката на ISP няма етикети за връзка на копринения екран. Това затруднява разпознаването как да го свържете към ISP
  • заглавката на ISP може да бъде променена в 2x6 пинова заглавка със стандартно разположение на щифтовете, за да се предотврати объркване

Освен тези точки съм доста щастлив как се получи и работи при първия опит.

Стъпка 12: Как да програмирате SUBLEQ?

Image
Image
Как да програмирате SUBLEQ?
Как да програмирате SUBLEQ?
Как да програмирате SUBLEQ?
Как да програмирате SUBLEQ?

Както бе споменато в началото, настоящият фърмуер на KIM Uno емулира компютър с един набор от инструкции (OISC) и предоставя инструкцията за подчинение за извършване на изчисления.

Инструкцията subleq означава изваждане и разклоняване, ако е по -малко или равно на нула. В псевдокода това изглежда така:

subleq A B C mem [B] = mem [B] - mem [A]; ако (mem [B] <= 0) отидете на C;

Тъй като KIM Uno емулира 8-битова машина, всички аргументи A, B и C са 8-битови стойности и следователно може да адресира обща основна памет от 256 байта. Очевидно това може да бъде разширено, като се направят многобайтови стойности A, B и C. Но засега нека останем прости.

KIM Uno има и „периферни устройства“: дисплея и клавиатурата. Той използва картирана архитектура на паметта, за да взаимодейства с тези периферни устройства, въпреки че картата с памет е много проста:

  • 0x00 = регистър Z (нула) и трябва да се поддържа нула.
  • 0x01 - 0x06 = шест байта, които представляват стойността на всеки от сегментите на дисплея (отдясно наляво). Стойност 0xf - вижте изходния код (main.c) за повече подробности.
  • 0x07, 0x08, 0x09 = три байта, където всеки байт представлява два седем сегментни дисплея (отдясно наляво). Тези места в паметта позволяват просто показване на резултат, без да се разделя резултатът на две части, за да се постави в едноцифрените места на паметта 0x01 - 0x06.
  • 0x0a+ = Програма започва от 0x0a. В момента клавишът "Go" се изпълнява от 0x0a фиксиран.

С тази информация вече можете да напишете програма в асемблер и да въведете инструкциите в паметта и след това да я изпълните. Тъй като има само една инструкция, се въвеждат само аргументите (A, B и C). И така, след три места в паметта започват следващите аргументи на инструкциите и така нататък.

Приложен към тази стъпка можете да намерите файла "fibonacci.s", а също и изображение на ръкописната програма, която е примерна реализация на Фибоначи. Но изчакайте: използвани са три инструкции - по -специално ADD, MOV и HLT - които не са subleq. "Каква е сделката? Не казахте ли, че има само една инструкция, subleq?" питаш ли? Много е лесно: с subleq човек може много лесно да имитира тези инструкции:

MOV a, b - копирането на данни на място от a до b може да се състои от:

  1. subleq b, b, 2 (следваща инструкция)
  2. subleq a, Z, 3 (следваща инструкция)
  3. subleq Z, b, 4 (следваща инструкция)
  4. сублек Z, Z, напр. 5 (следваща инструкция)

Използвайки функцията за изваждане на subleq, която прави mem - mem [a] и презаписва mem с резултата, стойността се копира с помощта на нулевия регистър. И "subleq Z, Z, …" просто нулира регистъра на нулата до 0, независимо от стойността на Z.

ADD a, b - добавя стойностите a + b и съхранява сумата в b може да се състои от:

  1. subleq a, Z, 2 (следваща инструкция)
  2. subleq Z, b, 3 (следваща инструкция)
  3. сублек Z, Z, напр. 4 (следваща инструкция)

Тази инструкция просто изчислява mem - (- mem [a]), което е mem + mem [a], като се използва и функцията за изваждане.

HLT - спира процесора и прекратява изпълнението:

По дефиниция емулаторът знае, че процесорът иска да прекрати, ако скочи до 0xff (или -1, ако е опечен). Така просто

сублек Z, Z, -1

върши работата и посочва на емулатора, че трябва да прекрати емулацията.

Използвайки тези три прости инструкции, алгоритъмът на Фибоначи може да бъде приложен и работи добре. Това е така, защото OISC може да изчисли всичко, което „истинският“компютър може да изчисли само с инструкцията subleq. Но разбира се, трябва да се направят много компромиси - като дължина и скорост на кода. Но въпреки това това е чудесен начин да научите и експериментирате със софтуерно програмиране на ниско ниво и компютри.

Към тази стъпка можете да намерите и zip архива „kim_uno_tools.zip“. Той съдържа основен асемблер и симулатор за KIM Uno. Те са написани на NodeJS - уверете се, че сте го инсталирали.

Сглобяващи програми

Ако погледнете "fibonacci/fibonacci.s", ще откриете, че това е изходният код за обсъжданата реализация на fibonacci. За да го сглобите и да направите програма от него, която KIM Uno да изпълнява, въвеждате следната команда (в корена на извлечения архив "kim_uno_tools.zip"):

възел assemble.js fibonacci/fibonacci.s

и той или ще отпечата грешка, ако сте допуснали грешка, или разпиляте получената програма. За да го запишете, можете да копирате изхода и да го запишете във файл или просто да изпълните тази команда:

възел assemble.js fibonacci/fibonacci.s> yourfile.h

Изходът е форматиран по начин, който може да бъде директно включен във фърмуера на KIM Uno като C заглавен файл, но симулаторът може да го използва и за симулиране. Просто въведете:

възел sim.js yourfile.h

Ще ви бъде представен резултатът от симулацията и очакваният изход от KIM Uno на дисплея.

Това беше много кратко въведение в този инструмент; Препоръчвам ви да си поиграете с тях и да видите как работят. По този начин получавате задълбочени познания и научавате принципите на функциониране зад процесорите, инструкциите, асемблерите и емулаторите;-)

Стъпка 13: Outlook

Outlook
Outlook
Outlook
Outlook
Outlook
Outlook

Честито

Ако прочетете това, вероятно сте преминали през цялата инструкция и сте създали свой собствен KIM Uno. Това е наистина хубаво.

Но пътуването не свършва дотук - има безкраен брой опции как можете да промените KIM Uno и да го персонализирате според вашите нужди и предпочитания.

Например KIM Uno може да бъде оборудван с „истински“емулатор на ретро процесор, който може да емулира известния MOS 6502 или Intel 8085, 8086 или 8088. Тогава това щеше да мине по пътя към първоначалната ми визия, преди да науча за OISC.

Но има възможни други приложения, тъй като хардуерният дизайн е доста общ. KIM Uno може да се използва като …

  • … дистанционно управление, напр. за CNC или други устройства. Може би жичен или оборудван с IR диод или друг безжичен изпращач
  • … (шестнадесетичен) джобен калкулатор. Фърмуерът може да се адаптира много лесно и дизайнът на платката не трябва да се променя много. Може би коприненият екран може да бъде адаптиран с математически операции и пропастта между сегментите да бъде премахната. Отделно от това, той вече е готов за тази трансформация

Надявам се, че сте се забавлявали следвайки и изграждайки KIM Uno, както аз го проектирах и планирах. И ако го разширите или промените - моля, уведомете ме. Наздраве!

Конкурс за печатни платки
Конкурс за печатни платки
Конкурс за печатни платки
Конкурс за печатни платки

Вицешампион в конкурса за печатни платки

Препоръчано: