Talaan ng mga Nilalaman:
- Hakbang 1: Mabilis na Pangkalahatang-ideya ng Mga Pagbabago + Mga Iskema
- Hakbang 2: CPU, Memory at Memory Control
- Hakbang 3: Mga Status ng LED LED
- Hakbang 4: Input at Output
- Hakbang 5: I-reset at Tinatapos ang Input at Output
- Hakbang 6: Programming
Video: Revisiting the Z80 Computer: 6 Hakbang
2024 May -akda: John Day | [email protected]. Huling binago: 2024-01-30 13:10
Noong nakaraan, nagsulat ako ng isang gabay sa kung paano bumuo ng isang computer na nakabatay sa Z80, at dinisenyo ko ang circuit na maging mas simple hangga't maaari upang madali itong maitayo. Sumulat din ako ng isang maliit na programa na gumagamit din ng parehong ideya ng pagiging simple. Mas mahusay na gumana ang disenyo na ito, ngunit hindi ako lubos na nasisiyahan dito. Nagsimula ako sa muling pagsusulat ng isang programa para dito na pinapayagan itong mai-program sa panahon ng runtime. Ito ay upang payagan akong subukan ang mga piraso ng code nang hindi kinakailangang ilaan ito sa EEPROM, na siya namang, ay mag-iatas sa akin upang muling iprogram ang EEPROM. Hindi ito tulad ng isang nakakatuwang ideya sa akin. Pagkatapos nagsimula akong mag-isip tungkol sa mga puwang ng memorya. Kung nais kong i-interface ang isang piraso ng hardware (higit sa lahat ang IO), ang isang piraso ng code ay maaaring potensyal na lumampas sa dami ng puwang ng memorya na magagamit sa system. Tandaan, ginamit lamang ng disenyo ang mas mababang byte ng address bus at pagkatapos ay ang mas mababang piraso ng mataas na byte ay ginamit upang pumili sa pagitan ng mga puwang ng ROM at RAM. Nangangahulugan ito na mayroon lamang akong 253 bytes na espasyo upang magamit. Maaari kang magtanong kung bakit 253 sa halip na 256. Iyon ay dahil ang aking bagong code ay nagtuturo ng tatlong byte ng data sa pagtatapos ng isang nakasulat na programa (sasakupin ito sa paglaon, habang binago ko ito upang gumana sa bagong disenyo).
n
Bumalik ako sa aking mga dating iskema upang makita kung ano pa ang nangyayari. Natagpuan ko ang isang maliit na kamalian sa circuit ng pagpili ng memorya, na tatakpan ko pagdating ko doon. Ang pinasimple na bersyon: ang lahat ng mga kahilingan sa pagsusulat ay talagang dumadaan, kahit na palagi itong inilalagay sa RAM. Marahil ay hindi ito anumang bagay na nagkabahala, ngunit nais kong gawin ito nang maayos sa oras na ito. At sa mga iyon, nagsimula akong gumuhit ng isang bagong iskema. Ang dalawang larawan na nakakabit sa pahinang ito ay bago at pagkatapos ng aktwal na circuit. Nilinis ko ang napakaraming mga kable ng spaghetti, hindi nakakatawa.
n
Kung sinundan mo kasama ang aking orihinal na pagsusumite at balak na sundin kasama ang isang ito, mapopoot ka sa akin. Kung nagsisimula ka ng sariwa, ikaw ay swerte. Kunin lamang ang mga bahagi sa listahan (o kanilang katumbas) at sundin.
Mga Pantustos:
LM7805 - 5 Volt regulatorZ80 - ang CPU; ang talino ng systemAT28C64B - EEPROM. Ang imbakan ng data na "Permanenteng" ginamit para sa firmwareIDT6116SA ng computer - SRAM; ginamit para sa pag-iimbak ng code ng gumagamit at / o pangkalahatang imbakan ng dataNE555 - Sistema ng orasan74HC374 - Octal D-Latch na may / OE; ginamit bilang input chip74LS273 - Octal D-Latch na may / MR; output chipTLC59211 - LED driver chip (ginamit upang ang 74LS273 ay maaaring maghimok ng mga LED, dahil ito lamang ay hindi may kakayahang kasalukuyang output) MC14572 - Ito ay isang "Line Driver" chip, ngunit nakita kong perpekto ito para sa lohika ng Memory Control. Mayroon itong 4 na inverters, at isang NAND at NOR gate na itinayo in74LS32 - Quad OR gateCD4001 - Quad NOR gateCD4040 - 12 Stage Ripple Counter; Inilabas, ngunit hindi ipinataw na divider ng orasan (para sa pagpapatakbo ng system sa mas mabagal na bilis ng orasan) 2 10K Ohm Resistors - Ginagamit ang isa sa 555 timer circuit, kaya gamitin ang anumang halagang nais mo para dito4 1K Ohm Resistors - Ginagamit ang isa para sa 555 timer circuit, kaya't gamitin ang anumang nais mo para dito. Ang isa pa ay ginagamit para sa pagmamaneho ng mga LED, kaya't iba-iba din ito kung nais mo ng8x330 Ohm Resistor Bus8x10K Ohm Resistor Bus11 LEDs - Tatlong ginagamit para sa katayuan ng system at ang iba pang walo ay mga output. Para sa 8, gumamit ako ng isang bar graph display (HDSP-4836) 4 Capacitors - Dalawang ginagamit ang LM7805; 0.22uF at 0.1uF. Ang isa ay para sa 555 timer, kaya gamitin ang nararamdaman mong tama. Ang huli ay para sa power-on reset; 100uF2 N. O. Mga Push Button - Ang isa ay ginagamit para sa pag-input, ang isa pa para sa reset8 SPST DIP Switches - Pag-input ng data; Gumamit ako ng Piano Key styleWire. Ang daming wire
n
TANDAAN: ang MC14572 hanggang sa bersyon ng butas ay lipas na, ngunit ang bersyon ng SMD ay aktibo pa rin (hindi kahit katayuan na "hindi para sa bagong disenyo"), kaya maaaring kailanganin mong bumili ng isang circuit board upang payagan kang magamit ito. Ang isang pangalawang 74LS32 ay maaaring gamitin bilang kapalit ng MC14572 (sumangguni sa iskemang "circuit seleksyon ng memorya" ng nakaraang ible)
Hakbang 1: Mabilis na Pangkalahatang-ideya ng Mga Pagbabago + Mga Iskema
Paano basahin ang mga iskema: Ang isang arrow na itinuro sa isang maliit na tilad ay isang input: Input> -Ang isang arrow na itinuro ang layo mula sa isang maliit na tilad ay isang output: Output <-Busses Gumamit ng isang linya sa halip na isang arrow: Bus | -
n
Karamihan sa mga chips ay iginuhit gamit ang kanilang eksaktong mga pinout. Ang maliit na paglubog ay iginuhit sa mga chips na ito. Karamihan sa mga chips ay mayroon ding mga numero ng pin at mga label sa kanila. Maaari silang maging mahirap basahin. Nanlalabo ang lapis ko.
n
Sa mga tuntunin ng mga koneksyon sa circuitry, ang layout ng bagong disenyo ay halos hindi nagbabago mula sa orihinal. Ikinonekta ko ang mas mababang nibble ng address na mataas na byte sa mga alaala at pagkatapos ay ginamit ang mababang piraso ng itaas na nibble (A12) para sa pagpili ng RAM / ROM. Nangangahulugan ito na ang puwang ng ROM ay nagmula sa 0000-00FF hanggang sa 0000-0FFF. Ang Ram space ay mula 0100-01FF hanggang 1000-1FFF. Ipinagpalit ko rin ang lohika ng Memory Control para sa isang mas mahusay na disenyo at nagdagdag ng dalawang bagong LED status (at ilang lohika na lohika). Gumuhit din ako (ngunit hindi nag-wire) isang orasan na divider circuit. Ito ay upang maisagawa ang dalawang pag-andar. Ang malinaw na pagpapaandar ay upang hatiin ang dalas ng orasan pababa. Ang iba pang pagpapaandar ay para sa mga layunin ng PWM (Pulse Width Modulation), dahil ang 555 ay hindi bumubuo ng mga alon na may 50% na cycle ng tungkulin. Hindi iyon mahalaga sa circuit na ito, ngunit kung nais mong gamitin ang orasan upang maghimok ng ilang mga LED, tiyak na mapapansin mo ang mga epekto (ang isang (hanay ng) LED (s) ay magiging mas malapaw kaysa sa isa pa). Ang buong natitirang circuitry ay mahalagang hindi nagbabago.
Hakbang 2: CPU, Memory at Memory Control
Ito ang bahagi kung saan kinamumuhian ako ng mga mambabasa ng aking dating bersyon. Sa orihinal na pagbuo, medyo nagtapon lamang ako ng mga bahagi sa pisara sa isang lugar na mukhang gusto nilang magpataw ng kaunting isyu sa pag-upo. Ang resulta ay parang may nagtapon ng isang plato ng spaghetti dito at parang "wires!" Nais kong linisin ito nang kaunti, kaya nagsimula ako sa pamamagitan ng pag-aalis ng lahat maliban sa CPU, RAM at ROM. Inilabas ko ang halos buong input circuit, output circuit, at ang pandikit na lohika. Halos saktan ako nitong gawin, ngunit kinakailangan. Iniwan ko ang lahat ng mga koneksyon ng data na buo at ang mas mababang byte ng address bus. Naikonekta ko pagkatapos ang susunod na apat na piraso ng address bus (A8-A11) sa ROM chip. Nag-ingat ako upang mag-ikot sa chip sa oras na ito upang gawing mas madali ang paghugot para sa muling pag-program. Inilundag ko rin ang mga koneksyon sa address pababa sa RAM chip.
n
Sa pamamagitan ng na sa labas ng paraan, kailangan kong makuha ang wika ng control control. Sa orihinal na eskematiko, nakakonekta ko ang linya ng processor / MREQ nang direkta sa / CE sa parehong mga memory chip, pagkatapos ay nag-wire ako / WR sa RAM / WE. Pagkatapos ay nagkaroon ako ng CPU's / RD at / MREQ nang lohikal O nais na magkasama pati na rin ang A9. Mahalaga, na-set up ito upang ang lahat ng mga kahilingan sa memorya ay naka-aktibo ang parehong RAM at ROM, ngunit ginamit ang A9 upang mapili kung alin sa mga chips na '/ OE ang napili. Mabuti ito at lahat dahil ang mga chips ay mananatiling hindi aktibo hanggang sa magawa ang isang kahilingan sa memorya at pagkatapos ay isa lamang / OE ang magiging aktibo habang binasa ang isang kahilingan. Pinigilan nito ang crosstalk, ngunit nagpakilala ng isang mahirap na pananarinari. Dahil ang A9 ay ginamit lamang upang matukoy kung aling chip ang naglalabas ng data at dahil ang CPU ay may direktang pag-access sa RAM / WE pin, ang alinman at lahat ng mga kahilingan sa pagsusulat ay dadaan. Ito ay okay para sa ROM dahil ang mode ng pagsulat nito ay pinigilan ng tinali / TAYONG direkta sa supply ng 5V. Gayunpaman, ang RAM ay isusulat sa anuman ang A9. Nangangahulugan ito na ang isang pagtatangkang sumulat sa isang lokasyon ng puwang ng ROM ay magsusulat sa parehong lokasyon sa puwang ng RAM.
n
Ang isang solusyon para dito ay ang muling pag-rewire ng control logic upang ang CPU ay may direktang pag-access sa chips '/ OE at / WE pin at pagkatapos ay ginagamit ang MREQ at A12 upang piliin kung aling mga chips / CE ang hinimok. Nagpunta ako sa ideyang ito, ngunit sa halip na gumamit ng apat na pintuang NOR at isang inverter tulad ng orihinal na disenyo, nakakita ako ng isang mahirap na maliit na maliit na maliit na tilad na perpekto para sa gawain. Kailangan kong lumikha ng isang circuit na ginagamit lamang ang mga gate ng lohika na magagamit sa maliit na tilad, ngunit iyon ay sapat na madali. Direkta ang feed ng A12 sa isang NAND gate at isang NOR gate. / Ang MREQ ay pinakain sa gate ng NOR at ang papuri nito ay ipinapasok sa gate ng NAND. Ang NAND gate ay ginagamit upang magmaneho / CE para sa RAM at ang output ng NOR ay mababaligtad at ginagamit upang himukin ang ROM / CE. Ginagawa ito upang ang / MREQ ay dapat maging mababa bago pumili ng alinman sa maliit na tilad at pagkatapos ay pipiliin ng A12 kung alin ang napili. Sa pag-set up na ito, ngayon ang anumang mga kahilingan sa pagsusulat sa ROM ay walang gagawin. Makakatipid din ito ng kuryente sapagkat isang maliit na tilad lamang ang aktibo sa halip na pareho. Tulad ng para sa logic chip mismo, mayroon pa kaming dalawang hindi nagamit na inverters sa loob. Ang isa ay masasanay mamaya, ngunit makakarating tayo doon pagdating natin doon.
Hakbang 3: Mga Status ng LED LED
Bago ko sinimulan ang proyektong ito, sinusubukan kong makipag-ugnay sa isang tiyak na IC, ngunit nagkakaproblema ako rito. Hindi natitiyak kung ano ang nangyayari, gumamit ako ng isang panel mount LED upang mag-imbestiga sa paligid (isa sa mga pagpupulong na may built na risistor). Ang paggawa nito ay nagbigay sa akin ng isang ideya ng nostalgia na ginagamit pa rin ngayon: ang mga LED status ay ginagamit upang ipahiwatig kung binabasa ang memorya mula o isinulat sa. Ito ay gagamitin kasabay ng input LED na mayroon na ako. Ang input LED ay nakakonekta sa / maghintay signal generator upang ipahiwatig sa amin na ang system ay, mabuti, naghihintay para sa pag-input (makakarating ako doon, huwag mag-alala). Isinasaalang-alang ko ang pagdaragdag ng isang LED para sa nagpapahiwatig ng isang pagsulat ng IO, ngunit naisip ko na ang mga output na nababago ng LEDs ay magiging isang mahusay na tagapagpahiwatig nito. Sa pag-iisip dito, maaari ko pa itong idagdag. Gayunpaman, nakita kong kapaki-pakinabang upang malaman kung ang memorya ay binabasa o nakasulat. Sa gayon, kapaki-pakinabang ito para sa pag-debug ng programa. Talagang ginawa ko ito ng mabigat na paggamit nito nang sinusubukan kong gumana ang aking programa: "bakit nagsusulat ito sa memorya? Hindi pa dapat ginagawa iyon!"
n
Upang makontrol ang mga LED na ito, ginamit ko ang quad NOR gate. Ginamit ko ang lahat ng mga pintuan. Dalawa lamang ang ginamit upang makabuo ng mga signal ng katayuan, ngunit ang maliit na tilad ay walang mga kakayahan sa kuryente upang aktwal na himukin ang mga LED. Ang mga ito ay may kakayahang lumubog ng gaanong lakas, kaya ginamit ko ang iba pang dalawang mga pintuang NOR bilang mga inverter at konektado ang mga LED na tulad nito. Dahil ang isang LED ay ginagamit upang ipahiwatig ang mga binabasa at ang iba pa para sa mga pagsusulat, at ang isang kahilingan sa pagbasa at pagsulat ay hindi mangyayari nang sabay, nakaligtas ako sa paggamit lamang ng isang risistor para sa parehong mga LED. Tulad ng para sa mga signal na kailangan kong mag-decode, madali din iyon. Nais kong ang lahat ng mga memorya na basahin ang mga kahilingan upang maipahiwatig, kaya ang unang gate ng NOR ay mayroong / MREQ at / RD sa mga input nito. Ang katayuan sa pagsulat ay medyo mahirap, ngunit kasing dali. Ginamit ko pa rin / MREQ bilang isang input, ngunit ang paggamit / WR tulad ng iba pa ay magiging sanhi ng isang maliit na pananarinari na nais kong iwasan. Ipahiwatig nito ang LAHAT ng mga kahilingan sa pagsulat. Gusto ko lang yung talagang pinagdaanan. Kaya paano ko magagawa iyon? Kaya, alalahanin kung paano ko na-set up ang system kaya ang RAM lamang ang maaaring maisulat? Ginamit ko ang mga RAM / CE bilang iba pang input sa NOR gate. Nangangahulugan ito na ang LED ay magpapasindi lamang kapag ang RAM ay napili at isang kahilingan sa pagsusulat ang ginagawa. Sa mga tuntunin ng kulay ng LED, pinili ko ang kulay kahel bilang tagapagpahiwatig na binasa (ngunit nakita ko lamang ang mga dilaw) at pula bilang tagapagpahiwatig ng pagsulat.
Hakbang 4: Input at Output
Sa nakaraang hakbang, maaaring napansin mo na naidagdag ko na ang ilan sa natitirang mga bahagi sa board na. Inireserba ko ang puwang upang hindi ko sinasadyang mailagay ang mga wire kung saan ko nais ang isang bahagi (sa gayon ay kailangan kong makahanap ng isang bagong lokasyon para sa nasabing sangkap). Maaari mo ring napansin na iniwan ko ang mga switch ng input sa lugar at nag-wire hanggang sa power rail. Napagpasyahan ko na ang orihinal na lokasyon ay ang perpektong lugar at nagpasyang ilagay ang mga output na malapit sa itaas (sa itaas). Sa kanan ng display ng bar ay ang input latch. Sa itaas iyon ang output aldaba, at sa kaliwa nito ay ang LED driver. Nagsimula ako sa pamamagitan ng pagkonekta sa display sa driver dahil iyon ang pinakamadaling gawin. Pagkatapos ay ikinonekta ko ang mga switch sa input na bahagi ng input latch. Susunod na ikinonekta ko ang output na bahagi ng output latch sa LED driver. Ito ay maaaring mukhang isang mahirap na order upang makuha ang mga wired, ngunit ito ay para sa isang kadahilanan. Ang pag-input ng output latch ay upang maiugnay sa data bus pati na rin ang output ng input latch. Ang ideya ay upang ikonekta ang mga output ng input latch sa mga input ng output aldaba, na ginawa ko. Pagkatapos ang kailangan ko lang gawin ay kunin ang gulo na iyon sa data bus. Hindi mahalaga kung saan nagpunta ang mga koneksyon na ito sa pisikal dahil lahat sila ay konektado sa elektrisidad. Halos tapos na ang computer.
Hakbang 5: I-reset at Tinatapos ang Input at Output
Paumanhin, walang mga larawan para sa hakbang na ito. Sumangguni sa nakaraang hakbang para sa mga larawan.
n
Maaaring napansin mo sa huling larawan ng nakaraang hakbang, mayroon akong isang berdeng pindutan at isa pang naka-install na logic chip. Ang maliit na tilad ay ang OR gate. Ginagamit ang dalawang gate upang makabuo ng signal na / WAIT. Kaya, ang isa ay bumubuo ng signal sa pamamagitan ng OR-ing / IORQ at / RD mula sa processor. Ang output ay pinakain sa pangalawang gate, kung saan makakakuha ulit NG isang pindutan ng push. Dinadala ng pindutan ang input ng gate na mataas, kaya't dinadala ang output na mataas. Ang output na ito ay pinakain sa mga processors / WAIT pin. Habang hindi pinindot, isang resistor ang humawak sa input ng mababa. Sa una ay gumamit ako ng isang risistor na 10K, ngunit ang LS32 ay talagang naglalagay ng boltahe sa input. Ang risistor ay hindi nahulog nang sapat na mababa at kailangan kong palitan ito ng isang 1K. Gayunpaman, ang ideya ay kapag ang isang kahilingan na nabasa ng IO ay ginawa, sinabi ng una at pangalawang O pintuang-daan sa processor na maghintay. Kapag naitakda mo ang mga switch ng input sa anumang gusto mo, pinindot mo ang pindutan at ilalabas nito ang CPU sa kundisyon ng paghihintay. Ang berdeng "input" LED, tulad ng pagtawag ko sa isang naunang hakbang, ay wired upang kapag ang pin na / WAIT ay bumaba, lumiliwanag ito.
n
Ngunit hindi pa tayo tapos. Ang input flip flop ay nangangailangan ng isang senyas upang ipaalam ito kapag ang input ng data ay wasto at dapat na ilagay sa CPU. Aktibo na mataas ang orasan na ito Dati, ikinonekta lamang namin ito sa pindutan. Ito ay isang wastong pagpipilian pa rin, ngunit sa oras na ito pinili ko na ilagay ito sa parehong output bilang pangalawang O gate. Ang IC na ito ay mayroon ding isang / OE pin na kailangang himukin. Kung ito ay gaganapin mataas, hindi ito maglalagay ng data sa bus. Kung gaganapin mababa, ito ay palaging nagmamaneho ng bus. Upang ayusin ito, simpleng ginamit ko ang pangatlong OR gate. Ang mga input ay / IORQ at / RD at ang output ay direktang dumidirekta sa latch’s / OE.
n
Kinakailangan din ng output latch ang pin ng orasan upang mahimok. Muli, ito ay aktibo mataas. Sa aking iskematiko, iginuhit ko ang pang-apat O gate na direktang nagmamaneho ng pin gamit ang / IORQ at / WR. Nangangahulugan ito na ang pin ng orasan ay gaganapin mataas hanggang sa magawa ang isang kahilingan sa pagsulat, pagkatapos ay bababa ito pagkatapos ay mataas muli. Marahil ay maayos lang ito dahil ang data bus ay magkakaroon pa rin ng wastong data dito pagkatapos ng tangkang pagsulat, ngunit mula sa pananaw sa engineering, ay isang disenyo ng basura. Hindi ko napansin ang error na ito hanggang matapos kong makuha ang pangwakas na mga larawan, ngunit hinawi ko ang koneksyon na iyon at pagkatapos ay pinakain ang output ng O gate sa isa sa mga hindi nagamit na inverters mula sa lohika ng kontrol sa memorya, pagkatapos ay ikinonekta ang output nito sa pin na orasan. Inayos ko rin ang eskematiko at nakakita ng isa pang error na nagawa ko. Inayos ko din ito.
n
Sa lahat ng iyon sa wakas ay tapos na, mayroon akong napakaliit na trabahong dapat gawin: ang reset circuit. Nagdagdag ako ng isang pindutan sa board at gumamit ng isang resistor na 10K upang hawakan ang isang gilid na mataas. Ang kabilang panig ay diretso sa lupa. Ang panig na hawak na mataas ay ang / RESET output, na napunta sa bawat maliit na tilad na may isang / RESET pin (ang CPU at output latch). Upang makamit ang power-on reset, nagdagdag ako ng isang kapasitor sa output na / RESET. Ang ideya ay ang malaking resistor ng halaga ay magiging sanhi ng medyo malaking kapasitor na mag-charge nang dahan-dahan at hawakan ang / RESET na mga pin na mababa para sa ilang halaga ng mga cycle ng orasan (ang CPU ay nangangailangan ng apat na cycle ng orasan). Marahil maaari mong hulaan kung ano ang negatibong bahagi ng circuit na ito. Ito ay parehong negatibo tulad ng nakaraang bersyon dahil ito ay pareho ng circuit. Kapag ang pindutan ay pinindot, ang capacitor ay mahalagang pinaikling sa pamamagitan ng pindutan. Masama ito para sa kapwa cap at pindutan, kaya kung nais mong gawing mas permanente ang iyong pagbuo, maaari mo itong muling idisenyo. Nag-iisip ako ng isa pang 555 timer na naka-set up sa monostable mode. Ngunit sa pamamagitan nito, natapos na ang circuit ng computer. Oo naman Ngayon ay kailangan itong mai-program.
Hakbang 6: Programming
Ang pag-program ng bagay na ito ay isang bangungot. Nagtayo ako ng isang programmer ng Arduino EEPROM. Hindi ito gumana. Bumuo ako ng isa pa batay sa disenyo at pag-coding ng iba. Hindi pa rin gumana. Bumalik ako sa sinubukan at totoong pamamaraan ng manu-manong pagtatakda ng mga address at byte ng data nang manu-mano. Kahit papaano, ginulo ko iyon. Sinubukan ko ulit at nagkamali pa rin. Bumalik ako muli at natuklasan na off ito ng isang byte, kaya't itinama ko ito at sa wakas ay gumana ito, salamat sa Diyos.
n
Tulad ng para sa aktwal na programa, mukhang sobrang kumplikado at mahirap sundin, ngunit hindi. Medyo simple, talaga. Kalahati nito ay ang pagkopya ng mga numero sa paligid. Ang kalahati ay ibinabahagi sa pagitan ng 16-bit na matematika, mga kondisyong paglukso, at kahit na higit pang mga pagkopya ng mga numero sa paligid. Kaya't hayaan mo akong dumaan dito at sabihin sa iyo kung paano ito gumagana.
n
Ang Initialization ay nagtatakda lamang ng ilang mga halaga ng rehistro para magamit ng programa. Ang loop ng programa ay medyo mas kumplikado, ngunit hindi isang kabuuan. Una, tumatanggap ito ng input sa A register sa port 00. Pagkatapos ang E register ay nakasulat sa memorya. Sa unang dalawang mga loop, ang rehistro ng E ay naglalaman ng data ng basura, kaya sinubukan naming isulat ito sa huling dalawang byte ng puwang ng ROM dahil hindi talaga ito maisusulat; ang address pointer (IY) ay pagkatapos ay nadagdagan. Ang halagang nakaimbak sa D ay inililipat sa E upang isulat sa susunod. Ang A ay pagkatapos ay na-load sa D at L at E ay nakopya sa H. HL kung saan ang paghahambing ng halaga ay nagaganap sa pamamagitan ng pagbabawas at pag-check sa ZF (zero flag). Ang unang halaga kung ihahambing laban ay nakaimbak sa mga rehistro ng B at C. Ang B at C ay ginagamot bilang isang solong 16-bit register, BC. Kung ang mga halaga ay pareho, kung gayon ang programa ay tumatalon diretso sa puwang ng RAM, kung saan ang code ng gumagamit ay ipinapalagay na manirahan. Kung ang code sa BC ay hindi tugma, pagkatapos ang HL ay nai-reload sa mga paunang halaga mula sa D at E at ihinahambing muli sa halaga sa SP sa parehong paraan kung ihambing ito sa BC. Kung ito ay isang tugma, mayroon itong parehong resulta, ngunit tatlong dagdag na byte ang nakasulat sa memorya. Ang mga byte ay isang code na nagsasanhi ng CPU na bumalik sa pinakadulo simula ng programa nito (isang pag-reset ng software). Kung ang pangalawang paghahambing ay hindi isang tugma, gayunpaman, ang programa ay nag-loop sa kung saan kumukuha ito ng isang halaga mula sa gumagamit.
n
LD SP, EDBFH; exe code (nagdaragdag ng pagtalon)
n
LD IY, FFEH; paunang memory pointer para sa pag-iimbak ng code
n
LD BC, EDC3H; exe code (walang loop)
n
loop; direktiba ng assembler kaya hindi namin kailangang malaman kung saan sa memorya naninirahan ang bahaging ito
n
SA A, (00H); kumuha ng data ng programa
n
LD (IY + 00H), E; Naglalaman ang E ng code na maiimbak
n
INC IY; lumipat sa susunod na lokasyon ng memorya
n
LD E, D; ld D sa E
n
LD D, A; ld A sa D
n
LD H, E; ld E sa H
n
LD L, D; ld D sa L
n
O A; i-reset ang pagdadala ng bandila
n
SBC HL, BC; nagbabalik ng 0 kung ipinasok ang exe code 2
n
JP Z, 1000H; kung gayon, tumalon sa at magpatupad ng programa
n
LD H, E; kung hindi man, i-refresh ang mga ito sa tamang halaga
n
LD L, D
n
O A; unang ibawas ay maaaring nagtakda ng pagdala bandila. Linawin mo
n
SBC HL, SP; nagbabalik ng 0 kung ipinasok ang exe code 1
n
JP NZ, loop; kung hindi, ulitin ang proseso (simula sa pagkuha ng isang halaga)
n
LD (IY + 00H), C3H; kung hindi man, mag-iniksyon ng isang jump code sa pagtatapos ng programa ng gumagamit
n
LD (IY + 01H), 00H; tumalon karaniwang gumaganap bilang isang pag-reset ng software
n
LD (IY + 02H), 00H; ito ay isang buong pag-reset kung sakaling nabago ang mga rehistro
n
JP 1000H; tumalon at magpatupad ng programa ng gumagamit
Inirerekumendang:
Z80-mbc2 Z80 Code Flash User LED: 3 Mga Hakbang
Z80-mbc2 Z80 Code Flash User LED: Ito ay isang halimbawa ng LED program ng gumagamit na nakasulat sa Z80 assembler para sa z80-mbc2 computer. Ginawa ko ito ng isang pagsubok at rebisyon na ehersisyo para sa akin, ito ang aking unang programa ng Z80 sa loob ng higit sa 35 taon
Paano Magpadala ng Malaking Mga File Mula sa Computer sa Computer: 6 Mga Hakbang
Paano Magpadala ng Malalaking Mga File Mula sa Computer sa Computer: Ang mga laki ng file ay patuloy na tumataas sa laki habang sumusulong ang teknolohiya. Kung ikaw ay nasa isang malikhaing bapor, tulad ng disenyo o pagmomodelo, o isang libangan lamang, ang paglipat ng malalaking mga file ay maaaring maging isang abala. Karamihan sa mga serbisyo sa email ay naglilimita sa mga maximum na laki ng attachment sa halos 25
Magsalita ng Computer Computer: 6 Hakbang
Mag-log Computer Speaker: Ang itinuturo na ito ay kung paano ko na-install ang mga lumang computer speaker sa isang log. Sinusubukan kong gamitin ang lahat ng mga na-reclaim na materyales para sa aking mga proyekto at gamitin ang anumang mayroon ako sa paligid ko sa oras ng pagbuo. I-reclaim ang anumang bagay at lahat ay ang aking moto. Mga natural na materyales, ol
Isang Madaling Bumuo ng Tunay na Homemade Computer: Z80-MBC2 !: 9 Mga Hakbang (na may Mga Larawan)
Isang Madaling Bumuo ng Tunay na Homemade Computer: Z80-MBC2 !: Kung ikaw ay nagtataka tungkol sa kung paano gumagana ang isang computer at nakikipag-ugnay sa " panlabas na mga bagay ", sa panahon ngayon maraming mga board na handa nang maglaro tulad ng Arduino o Raspberry at marami pang iba. Ngunit ang mga board na ito ay mayroong lahat ng " limit " … kumusta sila
Paggamit ng PSP Bilang Computer Joystick at Pagkatapos Pagkontrol ng Iyong Computer Sa PSP: 5 Hakbang (na may Mga Larawan)
Paggamit ng PSP Bilang Computer Joystick at Pagkatapos ay Pagkontrol ng Iyong Computer Sa PSP: Maaari kang gumawa ng maraming mga cool na bagay sa PSP homebrew, at sa itinuturo na ito ay magtuturo ako sa iyo kung paano gamitin ang iyong PSP bilang isang joystick para sa paglalaro ng mga laro, ngunit mayroon ding isang programa na nagpapahintulot sa iyo na gamitin ang iyong joystick bilang iyong mouse. Narito ang mater