Мазмуну:

KIM Uno - 5 евролук микропроцессордук эмулятор: 13 кадам (сүрөттөр менен)
KIM Uno - 5 евролук микропроцессордук эмулятор: 13 кадам (сүрөттөр менен)

Video: KIM Uno - 5 евролук микропроцессордук эмулятор: 13 кадам (сүрөттөр менен)

Video: KIM Uno - 5 евролук микропроцессордук эмулятор: 13 кадам (сүрөттөр менен)
Video: ДЕШЕВЫЕ ПАКЕТЫ от HUAWEI APPGALLERY I War Planet Online 2024, Июнь
Anonim
Image
Image
KIM Uno - 5 евролук микропроцессордук Dev эмулятору
KIM Uno - 5 евролук микропроцессордук Dev эмулятору
KIM Uno - 5 евролук микропроцессордук Dev эмулятору
KIM Uno - 5 евролук микропроцессордук Dev эмулятору

KIM Uno - бул (ретро) микропроцессорлор үчүн көчмө, программалык камсыздоонун аныкталган dev комплекси. Бирок, мен артка кайрылып, анын идеясын киргизейин:

2018-жылдын аягында MOS Technology, Inc компаниясынын атактуу KIM-1 сыяктуу чакан портативдүү микропроцессордук түзүлүштү кургум келип, Чак Педдл тарабынан иштелип чыккан, ал 6502 CPU түзүүгө катышкан.

Бирок дискреттик логикалык компоненттери бар "жылаңач" иштеп чыгуучу комплектти куруу эч кандай вариант эмес болчу, анткени ал чоң энергия менен камсыздоого муктаж болгон (анткени бул байыркы аппараттар олуттуу токту алат), ошондой эле өнүгүү өтө көп убакытты талап кылат. А мен азыр каалайм!

Ошондуктан, мен KIM Uno портативдүү түзмөк катары иштеп чыктым, ал бир колго батат жана CR2032 эки батареясы менен иштейт. Бул каалаган CPUны тууроо (же тууроо) үчүн 8 МГцте иштеген ATMega328p ("Arduino") микроконтроллерин колдонот. Бул архитектура эмуляцияланган CPUлар микроконтроллердин флеш -эсинин ичине туура келген нерселер менен алмаштырылаарын дагы камсыз кылат. Ошентип, бул көп максаттуу түзмөк.

Кокустан мен кийинчерээк YouTube'да "One Instruction Set Computers" же OISCs айтылган The Ultimate Apollo Guidance Computer Talk (34C3) деп аталган абдан жакшы баяндамасын көрдүм. Мен алар жөнүндө билген эмесмин жана муну ишке ашыруу үчүн идеалдуу талапкер катары таптым.

KIM Uno CPUны бир гана көрсөтмө менен эмуляциялайт: subleq - нөлдөн азыраак же барабар болсо, алып салуу жана таркатуу.

Эгерде сиз мени менен бирге ушул Нускамалык көрсөтмөнү ээрчисеңиз, анда өзүңүздүн KIM Unoңузду кыска убакыттын ичинде кура аласыз. Жана эң жакшы жери - аны өзүңүздүн табитиңизге жараша өзгөртө аласыз - бул болгону 4, 75 еврону түзөт (2018 -жылдын аягына карата).

Бир ишарат: бул нускамалуу ар кандай кадамдар менен берилген бардык файлдарды камтыган Git репозиторийи бар. Эгерде сиз кээ бир ресурстарды өзгөрткүңүз келсе жана аларды биз менен бөлүшкүңүз келсе, анда сиз пиар жасай аласыз. Бирок сиз ошол жерден дароо бардык файлдарды жүктөп алсаңыз болот. Жөн гана https://github.com/maxstrauch/kim-uno. Рахмат!

Ошол эле (KIM Uno) деп аталган дагы бир абдан кызыктуу долбоор бар, ал 6502 KIM Unoнун чыныгы көчүрмөсүн жасайт. Бул жерден текшерип көрүңүз. Жаратуучу комплектти да сатат. Демек, сиз 6502ге кызыксаңыз жана бул проекти жактырсаңыз, анда ошол жакты карап көрүңүз!

1 -кадам: ПХБ алуу

PCB булагы
PCB булагы
PCB булагы
PCB булагы

Көрүнүп тургандай, мен мүмкүнчүлүктөн пайдаланып, ПХБны иштеп чыгып, аны профессионалдуу түрдө жасоого уруксат бердим. Аны сырттан өндүрүп, сизге жеткирүү үчүн көп убакыт талап кылынат (дүйнөнүн кайсы жеринде экениңизге жараша;-)), буюртма алуу-бул биринчи кадам. PCB жасалып, сизге жөнөтүлгөндө, биз башка кадамдарды уланта алабыз.

Мен Кытайдагы PCBлеримди PCBWayден болгону 5 долларга заказ кылдым. Мен PCBWayди PCB үчүн менин goto өндүрүүчүсүм катары көрсөтүүдөн эч кандай пайда таппайм, бул мен үчүн жакшы иштеген жана сиз үчүн да жакшы иштеши мүмкүн. Бирок сиз аларды JLCPCB, OSH Park же башка жергиликтүү PCB компаниясы сыяктуу каалаган жерден заказ кылсаңыз болот.

Бирок, эгерде сиз аларды PCBWayден заказ кылгыңыз келсе, анда тиркелген ZIP файлын "kim-uno-rev1_2018-12-12_gerbers.zip" жүктөп алып, түз эле PCBWayге эч кандай өзгөртүүсүз жүктөй аласыз. Бул сүрөттөрдө көрө алган ПХБга заказ кылуу үчүн колдонулган түпнуска файл.

Эгерде сиз аларды башка өндүрүүчүдөн заказ кылып жатсаңыз, аларды баштапкы KiCad булактарынан кайра экспорттоого туура келиши мүмкүн, анткени мен аларды PCBWayдин спецификациясы менен бул жерден таба аласыз. Түпнуска KiCad булактары үчүн "kim-uno-kicad-sources.zip" жүктөп алып, аны чыгарып алыңыз.

Бирок, экинчи жолу дагы бар: эгер сиз ПХБга заказ берүүнү каалабасаңыз, анда өзүңүздүн версияңызды perfboard же ал тургай нан тактасын колдонуп түзө аласыз.

Баары бир: PCBлер азыр жолдо болгондуктан, биз башка бөлүктөргө көңүл бура алабыз! Кел, мени ээрчи.

2 -кадам: Компоненттерди алуу

Компоненттерди сатып алуу
Компоненттерди сатып алуу
Компоненттерди сатып алуу
Компоненттерди сатып алуу
Компоненттерди сатып алуу
Компоненттерди сатып алуу

Эми сиз компоненттерди алышыңыз керек. Бул үчүн сизге керектүү болгон бардык компоненттердин жана көлөмдөрдүн жалпы сүрөтү, бул кадамга тиркелген, ошондой эле БОМ (материалдардын эсеби) табылат.

BOM eBayге шилтемелерди камтыйт. Муну окуганда бул сунуштар жабык болушу мүмкүн, бирок сиз аны баштапкы чекит катары колдоно аласыз. Колдонулган компоненттер абдан стандарттуу.

Төмөндө мен сизге бардык керектүү компоненттерди түшүндүрөм:

  • 7x 1 кОмдук резисторлор жети сегменттүү дисплейлер үчүн. Аларды жаркыратуу үчүн маанини (мис. 470 Ω чейин) азайта аласыз, бирок аны өтө эле азайтпаңыз, антпесе Светодиоддор өлүп калат же батарейкасы бат эле түгөнөт. Бул баалуулук мен үчүн иштээрин түшүндүм
  • 1x 10 кОм микроконтроллердин RESET линиясынын тартылуу каршылыгы катары
  • 1x 100nF конденсатор кандайдыр бир чыңалуу секирүүсүн текшилөө үчүн (мындай болбошу керек, анткени биз батарейканы колдонуп жатабыз, бирок жакшы чара үчүн …)
  • DIP-28 пакетинде 1x ATMega328P (көбүнчө ATMega328P-PU деп аталат)
  • 1x негизги ПХБ - мурунку кадамды караңыз; буйрутма же өзүңүз тарабынан курулган
  • 2x CR2032 батарея кармагычтары
  • 1x SPDT (бир полюстуу, эки жолу ыргытуучу) которгуч, ал негизинен үч контактка ээ жана анын эки абалынын баарында (же күйгүзүлгөндө) эки контактты туташтырат
  • Клавиатура үчүн 20x тийүү баскычтары. ПХБнын арткы жагын колдонуу үчүн мен SMD тактилдүү баскычтарын (6х6х6 мм стандарттуу) колдондум - алар көрүп тургандай эритүүгө оңой.
  • ОПЦИОНАЛДЫК: Программистти туташтыруу үчүн 1х1х6 пин төбөсү, бирок бул милдеттүү эмес, кийинчерээк көрө аласыз
  • 4 цифралуу 1х жети сегменттик дисплей жана 2 цифралуу 1x жети сегменттик дисплей - такта жалпы аноддук зымдары бар болгону 0,36 дюймдук (9, 14 мм) элементтерди алат. Жумушчу бирдигин алуу үчүн эки талап тең маанилүү. Бирок ошондой эле жети сегменттин дисплейинин бул түрү абдан кеңири таралган

Бул кадамга тиркелип, колдонулган компоненттердин өлчөмдөрү жана түрлөрү боюнча тагыраак маалыматты камтыган "component-datasheets.zip" файлын таба аласыз. Бирок компоненттердин көбү абдан стандарттуу жана аз акчага оңой эле алынат.

Эми сиз ширетүүнү улантуу үчүн бардык компоненттер даяр болгонго чейин күтүшүңүз керек. Бул убакыттын ичинде сиз аягына чейин секирип, кааласаңыз KIM Uno колдонуу жөнүндө бир аз окуй аласыз.

3 -кадам: Soldering Tool обзор

Soldering Tool карап чыгуу
Soldering Tool карап чыгуу
Soldering Tool карап чыгуу
Soldering Tool карап чыгуу

KIM Uno ширетүү жана куруу үчүн сизге сүрөттөрдө көрсөтүлгөн шаймандар керек:

  • Зым кескич (компоненттин зымдарынын учун кесүү үчүн)
  • Жалпак кычкачтар
  • Пинцет жуп
  • (татыктуу) Калың эмес ширетүүчү - мен 0,56 мм ширетүүнү колдоном
  • Паяльник - сизге жогорку сапаттагы темирдин кереги жок (анткени биз бул жерде ракета илими менен да алектенбейбиз) - Мен Ersa FineTip 260ду көп убакыттан бери колдонуп келем жана бул чындыгында жакшы
  • Флюс калеми: компоненттерге жана төшөмөлөргө флюс кошуу, аларды lehимдөөнү бир топ жеңилдетет, анткени lehim өзүнөн өзү керектүү жерге "агат"*
  • Кошумча: губка (металл жүнүнөн) сиздин ширетүүчү темириңиз үчүн

Кийинчерээк KIM Uno программасы үчүн сизге дагы керек болот:

  • AVR-GCC шаймандарын камтыган компьютер жана программаны жүктөө үчүн avrdude
  • ISP (программист) - сүрөттө көрүнүп тургандай, мен атайын эскиз менен ISP катары Arduino Uno колдонуп жатам - андыктан эч кандай кооз жабдык сатып алуунун кажети жок

* адамдар тарабынан кээ бир жетекчилик керек;-)

Даярсыңбы? Кийинки кадамда биз KIM Uno кураштырууну баштайбыз.

4 -кадам: #1 ширетүү: Резисторлорду жана конденсаторлорду кошуу

Soldering #1: Резисторлорду жана конденсаторлорду кошуу
Soldering #1: Резисторлорду жана конденсаторлорду кошуу
Soldering #1: Резисторлорду жана конденсаторлорду кошуу
Soldering #1: Резисторлорду жана конденсаторлорду кошуу
Soldering #1: Резисторлорду жана конденсаторлорду кошуу
Soldering #1: Резисторлорду жана конденсаторлорду кошуу
Soldering #1: Резисторлорду жана конденсаторлорду кошуу
Soldering #1: Резисторлорду жана конденсаторлорду кошуу

Сиз ар дайым эң кичине (компоненттин бийиктиги боюнча) компоненттерден баштап, эң жогорку компоненттерге чейин иштешиңиз керек. Ошондуктан, биз резисторлорду кошуу менен баштайбыз жана каршылыгынын артында буттарыбызды бүгүшүбүз керек, ошондуктан резисторлор оңой эле ширетилип, ордунда калышат. Андан кийин узун зымдарды кесип салыңыз.

Ошондой эле, сүрөттөрдө көрсөтүлгөн эмес, кичинекей 100 нФ конденсаторду ошол эле жол менен кошуңуз.

Бир кеңеш: бул зым буттарды кичинекей контейнерде сактаңыз, кээде алар жардамга келет.

5 -кадам: #2 ширетүү: Баскычтопту чогултуу

Soldering #2: Баскычтопту чогултуу
Soldering #2: Баскычтопту чогултуу
Soldering #2: Баскычтопту чогултуу
Soldering #2: Баскычтопту чогултуу
Soldering #2: Баскычтопту чогултуу
Soldering #2: Баскычтопту чогултуу

Кийинки кадам 20 SMD тийүү өчүргүчтөрүн ширетүү. Бул иш бир аз катаал болгондуктан, биз азыр ПКБ жумушчу үстөлгө жаткандан кийин жасайбыз.

Биз өйдөдөн ылдыйга карай иштейбиз (же эгер ПХБ сүрөттөрдө көрсөтүлгөндөй багытталган болсо, солдон оңго карай) жана биринчи саптан баштайбыз: ар бир которгуч үчүн төрт подкладтын бирин тандап, аны флюс калеми менен нымдап алыңыз.

Андан кийин бир пинцетти колдонуп, которгучту кармап, аны төрт төшөктө кылдаттык менен жайгаштырыңыз. Андан кийин сиз тандап, флюс менен даярдаган подкладкадагы коммутатордун бир гана бутун ээрчиңиз. Бул үчүн сиз баштаардан мурун темир менен кандайдыр бир ширетүүнү "кармап" алышыңыз керек. Бул ыкманы колдонуп, бир бутун гана ширетип, бүтүндөй өчүргүчтөрдү толуктаңыз.

Жебелер менен сүрөт ширетүүнүн так кантип жасалганын көрсөтөт.

Бүт сапты ширеткенден кийин (бир гана төөнөгүч), пинди кайра жылытуу жана которгучту кайра жайгаштыруу аркылуу кичине жөнгө салууга болот. Коммутаторлор мүмкүн болушунча жакшы тегизделгенин текшериңиз.

Эгерде сиз тегиздөө менен бактылуу болсоңуз, анда башка бардык төөнөгүчтөрдү флюс калеми менен нымдап, андан кийин аларды ширетүүчү темирге тийгизип жана ага тийип бир аз ширетүүнү кошуп койсоңуз болот. Сиз көрөсүз, бул ширетүү түздөн -түз аянтка сорулган.

Катарды ширеткенден кийин, сиз аны кармап калганыңызды байкайсыз жана бул анча кыйын эмес, бирок кайталанат. Ошентип, калганын кылыңыз жана сиз кыска убакыттын ичинде даяр клавиатура менен аяктайсыз.

6 -кадам: #3 ширетүү: жети сегменттин дисплейи, которгуч жана пин башы

Soldering #3: Жети сегменттин дисплейи, которгуч жана пин башы
Soldering #3: Жети сегменттин дисплейи, которгуч жана пин башы
Soldering #3: Жети сегменттин дисплейи, которгуч жана пин башы
Soldering #3: Жети сегменттин дисплейи, которгуч жана пин башы
Soldering #3: Жети сегменттин дисплейи, которгуч жана пин башы
Soldering #3: Жети сегменттин дисплейи, которгуч жана пин башы

Эми сиз манжаңыз менен кармап, бир түйрүктү ПХБга туташтыруу менен которгучту жана төөнөгүчтү (милдеттүү эмес) кошо аласыз, ошондо сиз башка казыктарды ширетип, акыры баштапкы кармоочу пинге тийип аласыз.

Өзүңүздү ысык ширетүүчү менен күйгүзбөңүз деп этият болуңуз. Эгер бул сизге ыңгайсыз болсо, анда компонентти кармоо үчүн бир аз лента (мисалы, сүрөтчүнүн лента) колдонсоңуз болот. Ошентип эки колуңуз тең бош жүрө алат.

Жети сегменттин дисплейлери дал ушундай жол менен ширетилет (сүрөттү караңыз): сиз аны салып, колуңуз менен же скотч менен кармап, эки карама -каршы төөнөгүчтү башка жерге туташтыра аласыз.

Бирок этият болуңуз жана жети сегменттүү дисплейди туура багытка коюңуз (ондук чекиттер клавиатурага караган). Болбосо сиз кыйынчылыкта…

7 -кадам: #4 ширетүү: Микроконтроллерди ширетүү

Soldering #4: Микроконтроллерди ширетүү
Soldering #4: Микроконтроллерди ширетүү

Эми сизде көп практика болгондо, сиз алдыга жылып, микроконтроллерди үстүндөгү оюк менен (же биринчи пин) которуштуруучу тарапка каратып коюңуз. Жалпак кычкачтарды колдонуу менен микроконтроллердин буттарын бир аз ийип коюңуз, алар ПХБдагы тешиктерге дал келет.

Бул тыгыз жайгашкандан кийин, микроконтроллерди орнотуу үчүн кандайдыр бир башкарылуучу күч керек. Артыкчылыгы - ал түшпөйт. Бул сиздин убактыңызды бөлүп, аны арткы бөлүгүнөн ширете аласыз дегенди билдирет.

8 -кадам: №5 ширетүү: Батарея кармагычтарды кошуу (акыркы кадам)

Soldering #5: Батарея кармагычтарды кошуу (акыркы кадам)
Soldering #5: Батарея кармагычтарды кошуу (акыркы кадам)
Soldering #5: Батарея кармагычтарды кошуу (акыркы кадам)
Soldering #5: Батарея кармагычтарды кошуу (акыркы кадам)
Soldering #5: Батарея кармагычтарды кошуу (акыркы кадам)
Soldering #5: Батарея кармагычтарды кошуу (акыркы кадам)

Акыр -аягы, арткы жагына батарейка кармагычтарын кошушуңуз керек. Бул үчүн сиз жөн гана флюс калемди колдонуп, төрт подкладканы нымдап, анан үтүгүңүзгө бир аз ширетип алыңыз. Батарея кармагычты эки подкладка кылдат тегиздеңиз. Байланыштардын эки учунда бирдей өлчөмдөгү ПХБ аянты көрүнүшү керек. Үтүгүңүз менен ПХБ жаздыкчасына жана батарея кармагычтын бутуна тийиңиз. Лайк блокноттун астынан жана анын үстүнөн агып чыгып, аны сүрөттө көрсөтүлгөндөй бекемдейт. Эгерде сизде бул менен көйгөйлөр болсо, калем менен көбүрөөк флюс кошсоңуз болот.

9 -кадам: Эмуляторду күйгүзүү

Эмулятор жаркырап жатат
Эмулятор жаркырап жатат
Эмулятор жаркырап жатат
Эмулятор жаркырап жатат
Эмулятор жаркырап жатат
Эмулятор жаркырап жатат

Тиркелген ZIP архивинде "kim-uno-firmware.zip" сиз эмулятордун баштапкы кодун жана микроконтроллерге түздөн-түз жүктөлүп берилген "main.hex" менен бирге таба аласыз.

Аны иш жүзүндө колдонуудан мурун, микроконтроллердин сактандыруучу биттерин орнотуу керек, ал ички 8 МГц саатты жарымга бөлбөй колдонот. Сиз жумушту төмөнкү буйрук менен аткара аласыз:

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 flash: w: main.hex

Дагы: ошол эле нерсе жогорудагыдай "-P" үчүн колдонулат.

Менде "профессионалдуу" ISP (Системдик Программист) жок болгондуктан, мен ар дайым Arduino UNO (сүрөттү караңыз) жана тиркеген эскизимди ("arduino-isp.ino", Рэндалл Бохн) колдоном. Мен жаңы версия бар экенин билем, бирок бул версия менен акыркы беш жылдын ичинде эч кандай көйгөйүм болгон жок, ошондуктан мен аны сактап калам. Бул жөн эле иштейт. Эскиздин башындагы комментарийди колдонуп, сиз Arduino UNO боюнча пинту аласыз жана KIM Uno схемасын колдонуп (тиркелгенди караңыз), сиз KIM Uno боюнча 1x6 ISP башынын чокусун ала аласыз. Жети сегменттин дисплейине жакын болгон төрт бурчтуу пин 1 -пин (GND). Төмөнкү казыктар (туура тартипте): RESET, MOSI, MISO, SCK, VCC. Сиз VCCди 3V3кө же 5Vга туташтыра аласыз.

Эгерде сиз 1x6 пин башын кошпосоңуз, анда панель зымдарын колдонуп, туташуу тешиктерине салып, манжаңыз менен бурчка бурсаңыз болот - сүрөттө көрсөтүлгөндөй. Бул камтылган программаны жаркылдатуу жана сактандыргычтарды орнотуу үчүн жетиштүү байланыш түзөт. Эгер сизге туруктуу орнотуу жакса, анда сөзсүз түрдө 1x6 пин баштарын кошушуңуз керек.

Менде эки түзмөк бар: пин төбөлөрү жок өндүрүш версиясы жана пин баштары бар иштеп чыгуу версиясы, мен аларды туташтырып таштап, иштеп чыгуу учурунда кайра -кайра колдоном. Бул алда канча ыңгайлуу.

10 -кадам: Бүттү

Бүттү
Бүттү
Бүттү
Бүттү

Эми сиз бүттүңүз жана кагазга өзүңүздүн сублекс программаларыңызды жаза баштаңыз, аны чогултуп, анан эстутумга киргизиңиз.

KIM Uno 0x0a эс тутумунан баштап, алдын ала программаланган Фибоначчи эсептөөсү менен келет. Ал демейки боюнча n = 6 деп коюлган, андыктан 8 мааниге ээ болушу керек. Эсептөөнү баштоо үчүн "Go" баскычын басыңыз.

11 -кадам: PCB Дизайн анализи

PCB Дизайн анализи
PCB Дизайн анализи
PCB Дизайн анализи
PCB Дизайн анализи

Бул долбоорду аяктагандан кийин, мен көңүл бурууга арзый турган бир нече пункттарды таптым жана башкармалыктын жаңы редакциясында каралышы керек:

  • ATMega328pдин жибек экраны биринчи пин жайгашкан кадимки оюкка ээ эмес. DIP-28 изинин биринчи пин жайгашкан төрт бурчтуу аянтчасы да жок. Бул, албетте, башаламандыкты болтурбоо үчүн деталдуу жибек экраны менен жакшыртылышы керек
  • провайдердин башкы бөлүмүндө жибек экранда эч кандай байланыш энбелгиси жок. Бул аны ISPге кантип туташтырууну таанууну кыйындатат
  • Интернет провайдеринин башы 2x6 пин башына стандарттуу пин жайгашуусу менен өзгөртүлүшү мүмкүн

Бул пункттардан тышкары, мен анын кандай болгонун жана биринчи аракетимде иштегенине абдан кубанычтамын.

12 -кадам: SUBLEQты кантип программалаш керек?

Image
Image
SUBLEQ программасын кантип түзүү керек?
SUBLEQ программасын кантип түзүү керек?
SUBLEQ программасын кантип түзүү керек?
SUBLEQ программасын кантип түзүү керек?

Башында айтылгандай, KIM Uno учурдагы камтылган программасы One Instruction Set Computer (OISC) үлгүсүнө ээ жана эсептөөнү жүргүзүү үчүн subleq инструкциясын берет.

Subleq инструкциясы нөлдөн аз же барабар болсо, алып салууну жана бутакты билдирет. Псевдо-коддо бул төмөнкүдөй көрүнөт:

subleq A B C mem [B] = mem [B] - mem [A]; if (mem [B] <= 0) goto 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 - а -дан b -ге чейинки маалыматты көчүрүү төмөнкүлөрдөн турушу мүмкүн:

  1. subleq b, b, 2 (кийинки көрсөтмө)
  2. subleq a, Z, 3 (кийинки көрсөтмө)
  3. subleq Z, b, 4 (кийинки көрсөтмө)
  4. subleq Z, Z, мис. 5 (кийинки көрсөтмө)

Mem - mem [a] кылган жана mem жыйынтыгы менен кайра жазган subleqтин алып салуу өзгөчөлүгүн колдонуу менен, нөлдүк реестрдин жардамы менен көчүрүлөт. Жана "subleq Z, Z,…" нөлдүн регистрин 0гө кайтарат, Z маанисине карабастан.

ADD a, b - a + b маанилерин кошот жана сумманы bде сактайт:

  1. subleq a, Z, 2 (кийинки көрсөтмө)
  2. subleq Z, b, 3 (кийинки көрсөтмө)
  3. subleq Z, Z, мис. 4 (кийинки көрсөтмө)

Бул көрсөтмө жөн эле алып салуу мүмкүнчүлүгүн колдонуу менен mem + mem [a] болгон mem - (- mem [a]) эсептейт.

HLT - CPUны токтотуп, аткарууну токтотот:

Аныктама боюнча, эмулятор CPU 0xffке секирсе (же ырдалса -1) токтотууну каалаарын билет. Ошентип, жөнөкөй

subleq Z, Z, -1

жумушту жасайт жана эмуляторго эмуляцияны токтотушу керектигин көрсөтөт.

Бул үч жөнөкөй көрсөтмөнү колдонуп, Фибоначчи алгоритмин ишке ашырса болот жана жакшы иштейт. Бул, анткени OISC "чыныгы" компьютердин эсептөөчү сублексинин көрсөтмөсү менен баарын эсептей алат. Бирок, албетте, коддун узундугу жана ылдамдыгы сыяктуу көптөгөн айырмачылыктар бар. Бирок, ошентсе да, төмөн деңгээлдеги программалык камсыздоону жана компьютерлерди үйрөнүүнүн жана эксперимент кылуунун эң сонун жолу.

Бул кадамга тиркелип, ZIP архивин да таба аласыз "kim_uno_tools.zip". Бул KIM Uno үчүн кээ бир негизги жыйноочу жана симуляторду камтыйт. Алар NodeJSте жазылган - аны орнотконуңузду текшериңиз.

Программаларды чогултуу

Эгерде сиз "fibonacci/fibonacci.s" карап көрсөңүз, анда ал талкууланган фибоначчи ишке ашыруу үчүн булак коду экенин таба аласыз. Аны чогултуу жана андан KIM Uno иштете турган программа жасоо үчүн, сиз төмөнкү буйрукту киргизиңиз ("kim_uno_tools.zip" архивинин түпкүрүндө):

түйүн чогулат.js fibonacci/fibonacci.s

жана эгер сиз ката кетирсеңиз же катаны басып чыгарсаңыз же натыйжада чыккан программаны төгүп салсаңыз. Аны сактоо үчүн, чыгарууну көчүрүп, файлга сактап же жөн гана бул буйрукту иштетсеңиз болот:

түйүн бириктирет.js фибоначчи/фибоначчи.с> сиздин файл.h

Чыгаруу CIM файлына түздөн -түз KIM Uno программасына киргизиле тургандай түрдө форматталган, бирок симулятор аны симуляциялоо үчүн да колдоно алат. Жөн эле киргизиңиз:

түйүн sim.js yourfile.h

Жана сизге симуляциянын натыйжасы жана дисплейде KIM Uno күткөн өндүрүш тартууланат.

Бул бул куралдарга абдан кыскача киришүү болду; Мен алар менен ойноп, алардын кантип иштээрин карап көрүүнү сунуштайм. Ошентип, сиз терең билимге ээ болуп, CPU, инструкциялар, монтаждоочулар жана эмуляторлордун иштөө принциптерин үйрөнөсүз;-)

13 -кадам: Outlook

Outlook
Outlook
Outlook
Outlook
Outlook
Outlook

Куттуктайм

Эгер сиз муну окуган болсоңуз, балким, бул толугу менен нускамалуу жолду басып өтүп, өзүңүздүн KIM Uno курдуңуз. Бул чынында эле сонун.

Бирок саякат муну менен эле бүтпөйт - KIM Uno кантип өзгөртүүгө жана аны сиздин муктаждыктарыңызга жана каалоолоруңузга ылайыкташтыруунун чексиз варианттары бар.

Мисалы, KIM Uno атактуу MOS 6502 же Intel 8085, 8086 же 8088ди туурай турган "чыныгы" ретро процессор эмулятору менен жабдылган болушу мүмкүн. Анан мен OISCs жөнүндө биле электе, ал менин алгачкы көрүнүшүмө жетмек.

Башка мүмкүнчүлүктөр бар, анткени аппараттык дизайн абдан жалпы. KIM Uno катары колдонсо болот …

  • … Алыстан башкаруу CNC же башка түзмөктөр үчүн. Балким зымдуу же IR диод же башка зымсыз жөнөтүүчү менен жабдылган
  • … (Он алтылык) чөнтөк калькулятору. Камтылган программаны абдан оңой ыңгайлаштырууга болот жана тактанын дизайнын анча деле өзгөртүүнүн кажети жок. Балким, жибек экраны математикалык операциялар менен ыңгайлаштырылып, сегменттердин ортосундагы ажырымды алып салса болот. Мындан тышкары, ал бул трансформацияга даяр

КИМ Uno долбоорун мен пландап жатканымдай, сизде да кызыктуу болду деп үмүттөнөм. Ал эми аны узартсаңыз же өзгөртсөңүз - мага кабарлаңыз. Ура!

PCB сынагы
PCB сынагы
PCB сынагы
PCB сынагы

PCB сынагында экинчи орун

Сунушталууда: