Përmbajtje:
- Hapi 1: Vështrim i Shpejtë i Ndryshimeve + Skemat
- Hapi 2: CPU, kujtesa dhe kontrolli i kujtesës
- Hapi 3: LED të statusit të sistemit
- Hapi 4: Hyrja dhe Dalja
- Hapi 5: Rivendosja dhe përfundimi i hyrjes dhe daljes
- Hapi 6: Programimi
Video: Rishikimi i kompjuterit Z80: 6 hapa
2024 Autor: John Day | [email protected]. E modifikuara e fundit: 2024-01-30 12:10
Në të kaluarën, unë kam shkruar një udhëzues se si të ndërtoj një kompjuter të bazuar në Z80 dhe kam projektuar qarkun të jetë sa më i thjeshtuar që të jetë e mundur në mënyrë që të mund të ndërtohet sa më lehtë. Kam shkruar edhe një program të vogël duke përdorur të njëjtën ide të thjeshtësisë. Ky dizajn funksionoi mjaft mirë, por unë nuk isha plotësisht i kënaqur me të. Fillova me rishkrimin e një programi për të që e lejoi atë të programohej gjatë kohës së ekzekutimit. Kjo do të më lejonte të provoja pjesë të kodit pa qenë nevoja t'ia kushtoja atë EEPROM, e cila nga ana tjetër do të më kërkonte të riprogramoja EEPROM. Kjo nuk më dukej si një ide argëtuese. Pastaj fillova të mendoj për hapësirat e kujtesës. Nëse do të doja të ndërlidhja një pjesë të pajisjeve (kryesisht IO), një pjesë e kodit potencialisht mund të tejkalonte sasinë e hapësirës së kujtesës në dispozicion të sistemit. Mbani mend, dizajni përdori vetëm bajtin më të ulët të autobusit të adresës dhe më pas pjesa më e ulët e bajtit të lartë u përdor për të zgjedhur midis hapësirave ROM dhe RAM. Kjo do të thoshte se kisha vetëm 253 bajt hapësirë për t'u përdorur. Ju mund të pyesni pse 253 në vend të 256. Kjo ndodh sepse kodi im i ri injekton tre bajt të dhëna në fund të një programi të shkruar (kjo do të mbulohet më vonë, pasi e modifikova për të punuar në modelin e ri).
n
U ktheva mbi skemat e mia të vjetra për të parë se çfarë tjetër po ndodhte. Kam gjetur një të metë të vogël me qarkun e përzgjedhjes së kujtesës, të cilën do ta mbuloj kur të arrij atje. Versioni i thjeshtuar: të gjitha kërkesat për shkrim në të vërtetë do të kalonin, megjithëse gjithmonë futeshin në RAM. Kjo ndoshta nuk ishte asgjë për të cilën duhet të shqetësohesh, por doja ta bëja siç duhet këtë herë. Dhe me këtë, fillova të vizatoj një skemë të re. Dy fotografitë e bashkangjitura në këtë faqe janë para dhe pas qarkut aktual. Pastrova aq shumë telat e spagetit, nuk është për të qeshur.
n
Nëse keni ndjekur së bashku me paraqitjen time origjinale dhe planifikoni të ndiqni së bashku me këtë, ju do të më urreni. Nëse jeni duke filluar nga e para, atëherë jeni me fat. Thjesht kapni pjesët në listë (ose ekuivalentin e tyre) dhe ndiqni.
Furnizimet:
LM7805 - Rregullatori 5 VoltZ80 - CPU; trurin e sistemit AT28C64B - EEPROM. Magazinimi "i përhershëm" i të dhënave i përdorur për firmware -in e kompjuteritIDT6116SA - SRAM; përdoret për ruajtjen e kodit të përdoruesit dhe /ose ruajtjes së përgjithshme të të dhënaveNE555 - Ora e sistemit74HC374 - D -Latch Octal me /OE; përdoret si çip hyrës74LS273 - D -Latch Octal me /MR; çip dalësTLC59211 - çipi i shoferit LED (përdoret në mënyrë që 74LS273 të mund të drejtojë LED, pasi vetëm ai nuk është i aftë për daljen aktuale) MC14572 - Ky është një çip "Line Driver", por e kam gjetur atë të përsosur për logjikën e Kontrollit të kujtesës. Ajo ka 4 inverter, dhe një portë NAND dhe NOR të ndërtuar në 74LS32 - portë Quad OR port 400400 - portë Quad NORCD404040 - Counter 12 Faza Ripple; Ndarës i orës i tërhequr, por jo i zbatuar (për drejtimin e sistemit me shpejtësi më të ngadaltë të orës) 2 Rezistorë 10K Ohm - Njëra përdoret në qarkun e kohëmatësit 555, prandaj përdorni çfarëdo vlere që dëshironi për të 4 Rezistorë 1K Ohm - Njëra përdoret për Qarku i kohëmatësit 555, kështu që përdorni gjithçka që dëshironi për të. Një tjetër përdoret për drejtimin e LED -ve, kështu që ndryshojeni edhe atë nëse dëshironi 8 LED LED me rezistencë8x330 Ohm Bus8x10K Ohm - Tre përdoren për statusin e sistemit dhe tetë të tjerat janë dalje. Për 8, kam përdorur një ekran me grafik (HDSP -4836) 4 Kondensatorë - Dy janë përdorur LM7805; 0.22uF dhe 0.1uF. Njëra është për kohëmatësin 555, kështu që përdorni atë që mendoni se është e drejtë. E fundit është për rivendosjen e ndezjes; 100uF2 N. O. Butonat Push - Njëra përdoret për hyrje, tjetra për rivendosjen8 Çelsat SPIP DIP - Futja e të dhënave; Kam përdorur Piano Key styleWire. Shumë dhe shumë tela
n
SH NOTNIM: versioni MC14572 përmes vrimës është i vjetëruar, por versioni SMD është ende aktiv (madje as për statusin "jo për dizajn të ri"), kështu që mund t'ju duhet të blini një tabelë qarku për t'ju lejuar ta përdorni atë. Një 74LS32 i dytë mund të përdoret në vend të MC14572 (referojuni skemës së "qarkut të përzgjedhjes së kujtesës" të figurës së mëparshme)
Hapi 1: Vështrim i Shpejtë i Ndryshimeve + Skemat
Si të lexoni skemat: Një shigjetë e drejtuar në një çip është një hyrje: Input> -Një shigjetë e drejtuar nga një çip është një dalje: Output <-Busët përdorin një linjë në vend të një shigjete: Bus |-
n
Shumica e patate të skuqura janë tërhequr me pinouts e tyre të saktë. Zhytja e vogël është tërhequr në këto patate të skuqura. Shumica e patate të skuqura gjithashtu kanë numra pin dhe etiketa mbi to. Ato mund të jenë pak të vështira për t'u lexuar. Lapsi im po bëhej i shurdhër.
n
Për sa i përket lidhjeve të qarkut, paraqitja e modelit të ri është kryesisht e pandryshuar nga origjinali. Unë e lidha zhurmën e poshtme të adresës me bajt të lartë me kujtimet dhe më pas përdor pjesën e ulët të gërvishtjes së sipërme (A12) për zgjedhjen e RAM/ROM. Kjo do të thoshte që hapësira ROM shkoi nga 0000-00FF në 0000-0FFF. Hapësira e Ramit shkoi nga 0100-01FF në 1000-1FFF. Unë gjithashtu ndërrova logjikën e Kontrollit të kujtesës për një dizajn më të mirë dhe shtova dy LED të reja të statusit (dhe disa logjika ngjitëse). Unë gjithashtu kam vizatuar (por nuk e kam lidhur) një qark ndarës të orës. Ishte për të kryer dy funksione. Funksioni i dukshëm është të ndani frekuencën e orës poshtë. Funksioni tjetër është për qëllime PWM (Modulimi i Gjerësisë së Pulsit), pasi 555 nuk gjeneron valë me 50% cikle detyre. Kjo nuk ka shumë rëndësi në këtë qark, por nëse dëshironi të përdorni orën për të drejtuar disa LED, patjetër që do të vini re efektet (një (grup) LED (s) do të jetë më e zbehtë se tjetra). E gjithë pjesa tjetër e qarkut është në thelb e pandryshuar.
Hapi 2: CPU, kujtesa dhe kontrolli i kujtesës
Kjo është pjesa ku lexuesit e versionit tim të mëparshëm më urrejnë. Në ndërtimin origjinal, unë thjesht hodha pjesë në dërrasë në një vend që dukej se do të impononin një problem të vogël me lidhjen. Rezultati dukej sikur dikush hodhi një pjatë me spageti mbi të dhe ishte si "tela!" Doja ta pastroja pak, kështu që fillova duke grisur gjithçka përveç CPU, RAM dhe ROM. Unë tërhoqa gati të gjithë qarkun hyrës, qarkun dalës dhe logjikën e ngjitësit. Pothuajse më lëndoi ta bëja, por ishte e nevojshme. I lashë të gjitha lidhjet e të dhënave të paprekura dhe bajtin më të ulët të autobusit të adresave. Pastaj i lidha katër pjesët e ardhshme të autobusit të adresave (A8-A11) me çipin ROM. Unë u kujdesa të shkoj rreth çipit këtë herë për ta bërë më të lehtë tërheqjen për riprogramim. Unë gjithashtu hodha lidhjet e adresave poshtë në çipin RAM.
n
Me këtë jashtë rrugës, më duhej të lidhja logjikën e kontrollit të kujtesës. Në skemën origjinale, unë e kisha lidhur linjën e procesorit /MREQ drejtpërdrejt me /CE në të dy çipat e kujtesës, pastaj e lidhja /WR me RAM -in /WE. Pastaj kisha CPU /RD dhe /MREQ logjikisht OR'd së bashku, si dhe A9. Në thelb, ajo u krijua në mënyrë që të gjitha kërkesat e kujtesës të aktivizonin si RAM ashtu edhe ROM, por A9 u përdor për të zgjedhur se cili nga çipat /OE u zgjodh. Kjo ishte mirë dhe e gjitha sepse patate të skuqura do të mbeteshin joaktive derisa të bëhej një kërkesë për memorje dhe atëherë vetëm një /OE do të ishte aktiv gjatë një kërkese për lexim. Kjo parandaloi kryqëzimin, por prezantoi një nuancë të vështirë. Për shkak se A9 u përdor vetëm për të përcaktuar se cili çip po jepte të dhëna dhe sepse CPU kishte qasje të drejtpërdrejtë në kunjin e RAM /WE, çdo kërkesë për të shkruar do të kalonte. Kjo ishte në rregull për ROM sepse mënyra e tij e shkrimit pengohet duke lidhur /NE direkt me furnizimin me 5V. RAM -i, megjithatë, do t'i shkruhej pavarësisht A9. Kjo do të thoshte se një përpjekje për të shkruar në një vendndodhje të hapësirës ROM do të shkruante në të njëjtin vend në hapësirën RAM.
n
Një zgjidhje për këtë do të ishte rilidhja e logjikës së kontrollit në mënyrë që CPU të ketë qasje të drejtpërdrejtë në kunjat e çipave /OE dhe /WE dhe më pas duke përdorur MREQ dhe A12 për të zgjedhur se cilat çipa /CE janë drejtuar. Unë shkova me këtë ide, por në vend që të përdorja katër porta NOR dhe një inverter si modeli origjinal, gjeta një çip të vogël të pakëndshëm që ishte perfekt për detyrën. Më duhej të krijoja një qark që përdorte vetëm portat logjike të disponueshme në çip, por kjo ishte mjaft e lehtë. A12 ushqehet drejtpërdrejt në një portë NAND dhe një portë NOR. /MREQ futet në portën NOR dhe komplimenti i saj futet në portën NAND. Porta NAND përdoret për të drejtuar /CE për RAM dhe dalja NOR kthehet e përmbysur dhe përdoret për të drejtuar ROM /CE. Kjo e bën atë që /MREQ duhet të jetë e ulët para se të zgjidhet çipi dhe më pas A12 zgjedh se cili zgjidhet. Me këtë konfigurim, tani çdo kërkesë për shkrim në ROM nuk do të bëjë asgjë. Gjithashtu kursen energji sepse vetëm një çip është aktiv në vend të të dyjave. Sa i përket vetë çipit logjik, ne kemi ende dy inverter të papërdorur brenda. Njëri do të mësohet më vonë, por ne do të arrijmë atje kur të arrijmë atje.
Hapi 3: LED të statusit të sistemit
Para se të filloja këtë projekt, po përpiqesha të ndërlidhesha me një IC të caktuar, por kisha probleme me të. I pasigurt për atë që po ndodhte, unë përdor një LED të montuar në panel për të hetuar (një nga ato kuvendet që ka një rezistencë të integruar). Bërja e kësaj më dha një ide nostalgjie që përdoret ende sot: LED -të e statusit të përdorura për të treguar nëse kujtesa po lexohej ose shkruhej. Ai duhej të përdorej në lidhje me LED -in hyrës që kisha tashmë. LED -ja hyrëse ishte e lidhur me gjeneratorin e sinjalit /PRIT për të na treguar se sistemi, mirë, po pret hyrjen (do të shkoj atje, mos u shqetëso). Kam marrë parasysh shtimin e një LED për të treguar një shkrim IO, por kuptova se ndryshimi i LED -ve të daljes do të ishte tashmë një tregues i shkëlqyeshëm i kësaj. Duke menduar për të, mund ta shtoj akoma. Sidoqoftë, më duket e dobishme të di nëse kujtesa lexohet apo shkruhet. Epo, është e dobishme për korrigjimin e programit, sidoqoftë. Unë në fakt e shfrytëzova shumë si të tillë kur përpiqesha të punoja programin tim: “pse po shkruan në kujtesë? Nuk supozohet se po e bën akoma këtë!"
n
Për të kontrolluar këto LED, kam përdorur portën quad NOR. Kam përdorur të gjitha portat. Vetëm dy u përdorën për të gjeneruar sinjalet e statusit, por çipi nuk ka aftësitë e fuqisë për të drejtuar në të vërtetë LED -të. Ata janë të aftë të fundosin aq shumë energji, kështu që unë përdori dy portat e tjera NOR si inverter dhe lidha LED -të si të tilla. Meqenëse një LED përdoret për të treguar leximet dhe tjetra për shkrime, dhe një kërkesë për lexim dhe shkrim nuk do të ndodhë në të njëjtën kohë, unë kam qenë në gjendje të shpëtoj duke përdorur vetëm një rezistencë për të dy LED. Sa i përket sinjaleve që më duheshin për të deshifruar, kjo ishte gjithashtu mjaft e lehtë. Doja që të gjitha kërkesat për leximin e kujtesës të tregoheshin, kështu që porta e parë NOR kishte /MREQ dhe /RD në hyrjet e saj. Statusi i shkrimit ishte pak më i ndërlikuar, por po aq i lehtë. Unë ende përdor /MREQ si një hyrje, por përdorimi i /WR si tjetri do të shkaktonte një nuancë të vogël që doja të shmangja. Do të kishte treguar të GJITHA kërkesat për shkrim. Doja vetëm ato që kaluan në të vërtetë. Pra, si do ta bëja atë? Epo, mbani mend se si e kam sistemuar sistemin, kështu që vetëm RAM -i mund të shkruhet? Kam përdorur RAM /CE si hyrje tjetër në portën NOR. Kjo do të thotë që LED do të ndizet vetëm kur zgjidhet RAM dhe bëhet një kërkesë për shkrim. Për sa i përket ngjyrës LED, unë zgjodha portokallinë si tregues të leximit (por gjeta vetëm ato të verdha) dhe të kuqe si tregues të shkrimit.
Hapi 4: Hyrja dhe Dalja
Në hapin e mëparshëm, ju mund të keni vënë re se kam shtuar disa nga pjesët e tjera të përbërësve në tabelë tashmë. Unë isha duke rezervuar hapësirën kështu që nuk do të vendosja aksidentalisht telat aty ku doja një komponent (kështu që do të më duhej të gjeja një vend të ri për përbërësin në fjalë). Ju gjithashtu mund të keni vënë re që lashë çelësat e hyrjes në vend dhe u lidha me hekurudhën e energjisë. Vendosa që vendndodhja origjinale ishte vendi i përsosur dhe vendosa të vendosja LED -të e daljes aty pranë (sipër). Në të djathtë të ekranit të shiritit është shulja hyrëse. Mbi atë është shulja e daljes, dhe në të majtë të saj është drejtuesi LED. Fillova duke e lidhur ekranin me drejtuesin pasi ishte më e lehtë për tu bërë. Pastaj i lidha çelsat në anën hyrëse të shulës hyrëse. Tjetra unë lidha anën e daljes së shulit të daljes me drejtuesin LED. Kjo mund të duket si një urdhër i vështirë për të marrë këto tela, por ishte për një arsye. Hyrja e shulit dalës do të lidhej me autobusin e të dhënave, si dhe daljen e shulit hyrës. Ideja ishte që të lidheshin daljet e shulit hyrës me hyrjet e shulit dalës, gjë që e bëra. Atëherë e vetmja gjë që më duhej të bëja ishte ta lidhja atë rrëmujë me autobusin e të dhënave. Nuk kishte rëndësi se ku shkuan këto lidhje fizikisht sepse të gjitha do të lidheshin elektrikisht. Kompjuteri tani është pothuajse gati.
Hapi 5: Rivendosja dhe përfundimi i hyrjes dhe daljes
Na falni, nuk ka fotografi për këtë hap. Referojuni hapit të mëparshëm për fotografitë.
n
Ju mund ta keni vënë re në fotografinë e fundit të hapit të mëparshëm, unë kisha një buton të gjelbër dhe një çip tjetër logjik të instaluar. Çipi është porta OR. Dy porta përdoren për të gjeneruar sinjalin /PRIT. Epo, dikush gjeneron sinjalin përmes OR-ing /IORQ dhe /RD nga procesori. Dalja futet në portën e dytë, ku merr OR'd përsëri në një buton shtytës. Butoni sjell hyrjen e portës lartë, duke sjellë kështu daljen lartë. Ky dalje i jepet procesorit /pinit WAIT. Ndërsa nuk shtypet, një rezistencë mban hyrjen e ulët. Fillimisht kam përdorur një rezistencë 10K, por LS32 në të vërtetë po vendoste tension në hyrje. Rezistori nuk e uli atë mjaftueshëm dhe më duhej ta zëvendësoja me një 1K. Gjithsesi, ideja është që kur bëhet një kërkesë IO për lexim, portat e para dhe të dyta OR i thonë procesorit të presë. Pasi të vendosni çelsat e hyrjes në çfarëdo që dëshironi, shtypni butonin dhe ai e nxjerr CPU nga gjendja e pritjes. LED e gjelbër "hyrëse", siç e kam quajtur në një hap të mëparshëm, është e lidhur në mënyrë që kur kunja /Pritja të ulet, të ndizet.
n
Por ne nuk kemi mbaruar akoma. Flip -flop -i i hyrjes ka nevojë për një sinjal për ta njoftuar kur të dhënat e hyrjes janë të vlefshme dhe duhet t'i jepen CPU -së. Ky kunj i orës është aktiv i lartë. Më parë, ne thjesht e lidhëm atë me butonin. Ky është ende një opsion i vlefshëm, por këtë herë zgjodha ta vendos atë në të njëjtën dalje si porta e dytë OR. Ky IC gjithashtu ka një kunj /OE që duhet të drejtohet. Nëse do të mbahej lart, nuk do të fuste kurrë të dhëna në autobus. Nëse mbahet ulët, gjithmonë do të ngiste autobusin. Për ta rregulluar këtë, unë thjesht përdor një portë të tretë OR. Hyrjet janë /IORQ dhe /RD dhe dalja shkon drejtpërdrejt në shulën /OE.
n
Shulja e daljes gjithashtu ka nevojë që kunja e orës të drejtohet. Përsëri, ajo është aktive e lartë. Në skemën time, unë vizatova portën e katërt OR drejtpërdrejt duke drejtuar kunjin duke përdorur /IORQ dhe /WR. Kjo do të thoshte që kunja e orës do të mbahej lart derisa të bëhej një kërkesë për shkrim, pastaj do të zbriste poshtë pastaj përsëri lart. Kjo ndoshta do të ishte mirë sepse autobusi i të dhënave do të kishte ende të dhëna të vlefshme mbi të menjëherë pas përpjekjes për të shkruar, por nga pikëpamja inxhinierike, ishte një dizajn mbeturinash. Unë nuk e vura re këtë gabim vetëm pasi kisha bërë fotografitë përfundimtare, por e grisja atë lidhje dhe më pas e futa daljen e portës OR në një nga invertorët e papërdorur nga logjika e kontrollit të kujtesës, pastaj e lidha daljen e saj me kunjin e orës Me Unë gjithashtu rregullova skemën dhe gjeta një gabim tjetër që kisha bërë. E korigjova edhe une.
n
Me gjithë atë që u bë më në fund, kisha një punë shumë të vogël për të bërë: qarkun e rivendosjes. Shtova një buton në tabelë dhe përdor një rezistencë 10K për të mbajtur njërën anë lart. Ana tjetër shkon direkt në tokë. Ana e mbajtur lart është dalja /RESET, e cila shkonte në çdo çip me një pin /RESET (CPU dhe shulja e daljes). Për të kryer rivendosjen e energjisë, shtova një kondensator në daljen /RESET. Ideja është se rezistenca me vlerë të madhe do të bënte që kondensatori relativisht i madh të karikohet ngadalë dhe të mbajë këmbët /RESET të ulëta për një sasi të cikleve të orës (CPU -së i duhen katër cikle të orës). Ju ndoshta tashmë mund ta merrni me mend se cila është ana negative e këtij qarku. Theshtë i njëjti negativ si versioni i mëparshëm sepse është i njëjti qark. Kur shtypet butoni, kondensatori në thelb shkurtohet përmes butonit. Kjo është e keqe si për kapakun ashtu edhe për butonin, kështu që nëse doni ta bëni ndërtimin tuaj pak më të përhershëm, mund të dëshironi ta ridizajnoni atë. Po mendoja për një kohëmatës tjetër 555 të vendosur në mënyrë monostabile. Por me këtë, qarku kompjuterik tani ka përfunduar. Po Tani ka nevojë për programim.
Hapi 6: Programimi
Programimi i kësaj gjëje ishte një makth. Kam ndërtuar një programues Arduino EEPROM. Nuk funksionoi. Unë ndërtova një tjetër bazuar në modelin dhe kodimin e dikujt tjetër. Ende nuk funksionoi. Unë iu ktheva metodës së provuar dhe të vërtetë të vendosjes me dorë të adresave dhe byteve të të dhënave. Disi, e ngatërrova atë. Unë u përpoqa përsëri dhe prapë e kam gabim. U ktheva përsëri dhe zbulova se ishte jashtë me një bajt të vetëm, kështu që e korrigjova dhe më në fund funksionoi, falë Zotit.
n
Sa i përket programit aktual, duket se është super kompleks dhe i vështirë për t'u ndjekur, por nuk është. Quiteshtë mjaft e thjeshtë, në fakt. Gjysma e tij po kopjon numrat përreth. Gjysma tjetër ndahet midis matematikës 16-bit, kërcimeve të kushtëzuara dhe akoma më shumë kopjimit të numrave përreth. Kështu që më lejoni ta kaloj dhe t'ju tregoj se si funksionon.
n
Fillimi thjesht vendos disa vlera të regjistrit për përdorim nga programi. Rrethi i programit është pak më kompleks, por jo shumë. Së pari, ai pranon hyrjen në regjistrin A në portin 00. Pastaj regjistri E regjistrohet në kujtesë. Në dy sythet e para, regjistri E përmban të dhëna junk, kështu që ne përpiqemi t'i shkruajmë në dy bajtët e fundit të hapësirës ROM sepse nuk do të shkruhen në të vërtetë; treguesi i adresës (IY) më pas shtohet. Vlera e ruajtur në D pastaj zhvendoset në E për t'u shkruar më pas. A pastaj ngarkohet në D dhe L dhe E kopjohet në H. HL është vendi ku krahasimi i vlerës bëhet me zbritjen dhe kontrollimin e ZF (zero flamur). Vlera e parë në krahasim me të ruhet në regjistrat B dhe C. B dhe C trajtohen si një regjistër i vetëm 16-bitësh, BC. Nëse vlerat janë të njëjta, atëherë programi hidhet drejtpërdrejt në hapësirën RAM, ku supozohet se banon kodi i përdoruesit. Nëse kodi në BC nuk është një ndeshje, atëherë HL ringarkohet me vlerat fillestare nga D dhe E dhe krahasohet përsëri me vlerën në SP në të njëjtën mënyrë siç ishte krahasuar me BC. Nëse është një ndeshje, ka të njëjtin rezultat, por tre bajt shtesë shkruhen në kujtesë. Bajtët janë një kod që bën që CPU të kthehet në fillimin e programit të tij (një rivendosje e softuerit). Nëse krahasimi i dytë nuk ishte një ndeshje, megjithatë, programi shkon atje ku merr një vlerë nga përdoruesi.
n
LD PS, EDBFH; kodi exe (shton kërcimin)
n
LD IY, FFEH; treguesi fillestar i kujtesës për ruajtjen e kodit
n
LD BC, EDC3H; kodi exe (pa lak)
n
lak; direktiva assembler kështu që nuk duhet të dimë se ku në kujtesë qëndron kjo pjesë
n
N A A, (00H); merrni të dhënat e programit
n
LD (IY+00H), E; E përmban kodin për tu ruajtur
n
INC IY; kaloni në vendndodhjen tjetër të kujtesës
n
LD E, D; ld në E
n
LD D, A; ld A në D
n
LD H, E; ld E në H
n
LD L, D; ld D në L
n
OSE A; rivendos flamurin e bartjes
n
SBC HL, BC; kthen 0 nëse kodi exe 2 është futur
n
JP Z, 1000H; nëse po, hidheni dhe ekzekutoni programin
n
LD H, E; përndryshe, rifreskojini këto në vlerat e duhura
n
LD L, D
n
OSE A; zbritja e parë mund të ketë vendosur flamurin e bartjes. Pastroje atë
n
SBC HL, PS; kthen 0 nëse kodi exe 1 është futur
n
JP NZ, lak; nëse jo, përsërit procesin (duke filluar me marrjen e një vlere)
n
LD (IY+00H), C3H; përndryshe, injektoni një kod kërcimi në fund të programit të përdoruesit
n
LD (IY+01H), 00H; kërcimi në thelb vepron si një rivendosje e softuerit
n
LD (IY+02H), 00H; është një rivendosje e plotë në rast se regjistrat e rasteve modifikohen
n
JP 1000H; hidheni dhe ekzekutoni programin e përdoruesit
Recommended:
Përforcuesi i altoparlantit të kompjuterit: 6 hapa (me fotografi)
Përforcues i altoparlantëve të PC: Ky është një përforcues transistor me fuqi të vogël (Më pak se 10 Watt) duke përdorur LM386 dhe TIP41/42. Edhe pse fuqia dalëse nuk është shumë mbresëlënëse, prapëseprapë mund të shërbejë si një përforcues për altoparlantin e kompjuterit dhe MP3 player. Kur jetoni në një paketim apartament së bashku, një ha
Vendosni Raspberry Pi 4 përmes laptopit/kompjuterit tuaj duke përdorur kabllo Ethernet (Pa monitor, pa Wi-Fi): 8 hapa
Vendosni Raspberry Pi 4 përmes laptopit/kompjuterit duke përdorur kabllo Ethernet (Pa monitor, pa Wi-Fi): Në këtë do të punojmë me Raspberry Pi 4 Model-B me 1 GB RAM për konfigurimin. Raspberry-Pi është një kompjuter me një bord të vetëm që përdoret për qëllime edukative dhe projekte DIY me një kosto të përballueshme, kërkon një furnizim me energji elektrike prej 5V 3A. Sistemet Operative si
Elegoo Super Started Kit Uno R3 Rishikimi: 4 hapa
Elegoo Super Started Kit Uno R3 Rishikimi: Disa ditë më parë Elegoo më dërgoni këtë Super Starter Kit për testim. Pra, le të shohim se çfarë ka brenda. Kur hapim këtë kuti kompakte ne mund të shohim shumë gjëra. Në kopertinë ka një indeks me të gjithë përbërësit. Brenda kemi një kartë falënderimi me të gjitha
Z80-mbc2 Z80 Kodi LED LED i përdoruesit: 3 hapa
Z80-mbc2 Z80 Code Flash User User: Ky është një shembull i programit LED të përdoruesit i shkruar në montuesin Z80 për kompjuterin z80-mbc2. E bëra këtë një ushtrim testimi dhe rishikimi për mua, ky është programi im i parë Z80 për mbi 35 vjet. Gëzoni
Rishikimi i programuesit JDM: 9 hapa
Rishikimi i Programuesit JDM: JDM është një programues i njohur PIC sepse përdor një port serial, një minimum të përbërësve dhe nuk kërkon furnizim me energji. Por ka një konfuzion atje, me shumë ndryshime programuesish në rrjet, cilat funksionojnë me cilat PIC? Në këtë “udhëzim