Mündəricat:

Z80 Kompüterinə yenidən baxmaq: 6 addım
Z80 Kompüterinə yenidən baxmaq: 6 addım

Video: Z80 Kompüterinə yenidən baxmaq: 6 addım

Video: Z80 Kompüterinə yenidən baxmaq: 6 addım
Video: Kim nə başa düşdü ❓ 2024, Iyul
Anonim
Z80 Kompüterinə yenidən baxmaq
Z80 Kompüterinə yenidən baxmaq
Z80 Kompüterinə yenidən baxmaq
Z80 Kompüterinə yenidən baxmaq

Keçmişdə, Z80 əsaslı bir kompüterin necə qurulacağına dair bir bələdçi yazdım və dövrəni mümkün qədər asan qurmaq üçün mümkün qədər sadə hala gətirdim. Eyni sadəlik fikrindən istifadə edərək kiçik bir proqram da yazdım. Bu dizayn çox yaxşı işlədi, amma bundan tamamilə məmnun deyildim. İş vaxtı ərzində proqramlaşdırılmasına imkan verən bir proqramı yenidən yazmağa başladım. Bu, kod parçalarını EEPROM -a həsr etmədən sınaqdan keçirməyimə icazə vermək idi ki, bu da öz növbəsində EEPROM -u yenidən proqramlaşdırmağımı tələb edəcək. Bu mənə əyləncəli bir fikir kimi gəlmədi. Sonra yaddaş boşluqları haqqında düşünməyə başladım. Bir hissə (əsasən IO) ilə əlaqə qurmaq istəsəm, bir kod parçası potensial olaraq sistemdə mövcud olan yaddaş sahəsini aşa bilər. Unutmayın ki, dizayn yalnız ünvan avtobusunun aşağı baytını, sonra isə yüksək baytın aşağı hissəsini ROM və RAM boşluqları arasında seçmək üçün istifadə etdi. Bu, istifadə etmək üçün yalnız 253 bayt yerim olduğu anlamına gəlir. 256 əvəzinə niyə 253 olduğunu soruşa bilərsiniz. Bunun səbəbi, yeni kodum yazılı bir proqramın sonunda üç bayt məlumat daxil etməsidir (yeni dizayn üzərində işləmək üçün dəyişdirdiyim üçün bu daha sonra işıqlandırılacaq).

n

Başqa nə olduğunu görmək üçün köhnə sxemlərimə yenidən baxdım. Yaddaş seçmə sxemində kiçik bir qüsur tapdım və ora çatanda əhatə edəcəyəm. Sadələşdirilmiş versiya: həmişə RAM -a qoyulsa da, bütün yazma istəkləri gerçəkləşəcək. Yəqin ki, narahat olmağa dəyməzdi, amma bu dəfə düzgün etmək istədim. Və bununla da yeni bir sxem çəkməyə başladım. Bu səhifəyə əlavə olunan iki şəkil, əsl dövrədən əvvəl və sonra. Spagetti naqillərinin çoxunu təmizlədim, gülməli deyil.

n

Mənim orijinal təqdimatımı izlədinizsə və bu təkliflə birlikdə davam etməyi planlaşdırırsınızsa, mənə nifrət edəcəksiniz. Yenidən başlamısınızsa, şanslısınız. Sadəcə siyahıdakı hissələri (və ya onların ekvivalentini) tutun və davam edin.

Təchizat:

LM7805 - 5 Volt tənzimləyici Z80 - CPU; AT28C64B - EEPROM sisteminin beyinləri. Kompüterin firmwareIDT6116SA - SRAM üçün istifadə olunan "Daimi" məlumat saxlama; istifadəçi kodunun və /və ya ümumi məlumatların saxlanması üçün istifadə olunurNE555 - Sistem saatı74HC374 - /OE ilə Octal D -Latch; giriş çipi kimi istifadə olunur74LS273 - Octal D -Latch with /MR; çıxış çipiTLC59211 - LED sürücü çipi (74LS273 LED -ləri idarə edə biləcəyi üçün istifadə olunur, çünki tək başına cari çıxışa qadir deyil) MC14572 - Bu "Line Driver" çipidir, amma Yaddaş İdarəetmə məntiqi üçün mükəmməl olduğunu gördüm. 4 invertör və 74LS32 - Dörd və ya darvaza CD4001 - Dörd NOR qapısıCD4040 - 12 Mərhələ Ripple Sayğacında qurulmuş bir NAND və NOR qapısı var; Çəkilmiş, lakin tətbiq edilməyən saat bölücü (sistemi daha aşağı saat sürətində işlətmək üçün) 2 10K Ohm Rezistorlar - Biri 555 taymer dövrəsində istifadə olunur, buna görə də istədiyiniz hər hansı bir dəyəri istifadə edin 4 1K Ohm Rezistorlar - biri üçün istifadə olunur 555 timer dövrə, buna görə də nə istəsən istifadə et. Başqa bir LED idarə etmək üçün istifadə olunur, buna görə də 8x330 Ohm Rezistor Bus8x10K Ohm Dirençli Bus11 LEDləri istəsəniz də dəyişin - Üçü sistem vəziyyəti üçün, digər səkkizi isə çıxışdır. 8 üçün bir çubuq qrafikli ekran istifadə etdim (HDSP -4836) 4 Kondansatör - İki LM7805 istifadə olunur; 0.22 uF və 0.1 uF. Biri 555 taymer üçündür, ona görə də doğru hesab etdiyiniz şeyi istifadə edin. Sonuncu, gücün sıfırlanması üçündür; 100uF2 N. O. Düymələr - Biri giriş üçün, digəri sıfırlamaq üçün istifadə olunur8 SPST DIP Switch - Məlumat girişi; Piano Key styleWire istifadə etdim. Çox və çox tel

n

DİQQƏT: MC14572 deşikli versiyası köhnəlmişdir, lakin SMD versiyası hələ də aktivdir (hətta "yeni dizayn üçün deyil" statusu), buna görə də istifadə etməyinizə icazə vermək üçün bir lövhə satın almanız lazım ola bilər. MC14572 yerinə ikinci 74LS32 istifadə edilə bilər (əvvəlki ible -nin "yaddaş seçim dövrəsi" sxeminə baxın)

Addım 1: Dəyişikliklərə + Şemalara Tez Baxış

Dəyişikliklərə + Baxışlara Tez Baxış
Dəyişikliklərə + Baxışlara Tez Baxış

Sxemləri necə oxumaq olar: Çipə yönəldilmiş ox girişdir: Giriş> -Çipdən uzaqlaşdırılmış bir ox çıxışdır: Çıxış <-Avtobuslar bir ox yerinə bir xətt istifadə edir: Avtobus |-

n

Çiplərin çoxu dəqiq pinoutları ilə çəkilmişdir. Bu çiplər üzərində kiçik bir dalğa çəkilmişdir. Əksər çiplərdə pin nömrələri və etiketlər də var. Oxumaq bir az çətin ola bilər. Qələm sönürdü.

n

Dövrə əlaqələri baxımından, yeni dizaynın düzeni əsasən orijinaldan dəyişməmişdir. Yüksək bayt ünvanını aşağı ucunu xatirələrə bağladım və sonra RAM/ROM seçimi üçün yuxarı ucun aşağı hissəsini (A12) istifadə etdim. Bu, ROM sahəsinin 0000-00FF-dən 0000-0FFF-ə qədər getdiyi anlamına gəlir. Ram sahəsi 0100-01FF ilə 1000-1FFF arasında dəyişdi. Daha yaxşı bir dizayn üçün Yaddaş İdarəetmə məntiqini dəyişdirdim və iki yeni vəziyyət LEDini (və bəzi yapışqan məntiqini) əlavə etdim. Həm də bir saat bölücü dövrə çəkdim (amma tel etmədim). İki funksiyanı yerinə yetirmək idi. Açıq funksiya, saat tezliyini aşağı bölməkdir. Digər funksiya, PWM (Pulse Width Modulation) məqsədləri üçündür, çünki 555, 50% vəzifə dövrü olan dalğalar yaratmır. Bu dövrədə bunun heç bir əhəmiyyəti yoxdur, amma bəzi LED -ləri idarə etmək üçün saatı istifadə etmək istəsəniz, təsirləri mütləq görəcəksiniz (bir (LED) LED -lər digərindən daha qaranlıq olacaq). Dövrün bütün qalan hissəsi əslində dəyişməzdir.

Addım 2: CPU, Yaddaş və Yaddaş Nəzarəti

CPU, Yaddaş və Yaddaş Nəzarəti
CPU, Yaddaş və Yaddaş Nəzarəti
CPU, Yaddaş və Yaddaş Nəzarəti
CPU, Yaddaş və Yaddaş Nəzarəti
CPU, Yaddaş və Yaddaş Nəzarəti
CPU, Yaddaş və Yaddaş Nəzarəti
CPU, Yaddaş və Yaddaş Nəzarəti
CPU, Yaddaş və Yaddaş Nəzarəti

Bu, əvvəlki versiyamın oxucularının mənə nifrət etdiyi hissədir. Orijinal quruluşda, hissələri lövhəyə bağladığımda kiçik bir problem yaratacaqları yerə atdım. Nəticə kiminsə üzərinə bir boşqab spagetti tökdüyünə bənzəyirdi və "tellər!" Bir az təmizləmək istədim, buna görə CPU, RAM və ROM istisna olmaqla hər şeyi cırmaqla başladım. Demək olar ki, bütün giriş dövrəsini, çıxış dövrəsini və yapışqan məntiqini çəkdim. Demək olar ki, məni incitdi, amma lazım idi. Bütün məlumat əlaqələrini və ünvan avtobusunun aşağı baytını qoydum. Daha sonra ünvan avtobusunun (A8-A11) növbəti dörd bitini ROM çipinə bağladım. Yenidən proqramlaşdırma aparmağı asanlaşdırmaq üçün bu dəfə çipin ətrafında gəzməyə diqqət etdim. Ünvan bağlantılarını da RAM çipinə endirdim.

n

Yoldan çıxaraq, indi yaddaş idarəetmə məntiqini bağlamalı oldum. Orijinal sxemdə, prosessorun /MREQ xəttini hər iki yaddaş çipinə /CE -yə birbaşa bağladım, sonra RAM -a /WE -yə tel bağladım. Sonra CPU /RD və /MREQ -ni A9 ilə birlikdə məntiqi olaraq ORD edərdim. Əslində, bütün yaddaş istəkləri həm RAM, həm də ROMu aktivləşdirəcək şəkildə qurulmuşdu, ancaq A9 -dan hansı çipin /OE -nin seçildiyini seçmək üçün istifadə edilmişdir. Bu yaxşı idi və hamısı ona görə ki, yaddaş sorğusu edilənə qədər çiplər hərəkətsiz qalacaq və sonra oxu sorğusu zamanı yalnız bir /OE aktiv olacaq. Bu, çarpışmanın qarşısını aldı, amma yöndəmsiz bir nüans təqdim etdi. A9 yalnız hansı çipin məlumat çıxardığını təyin etmək üçün istifadə edildiyindən və CPU -nun RAM /WE pininə birbaşa çıxışı olduğu üçün hər hansı bir yazma sorğusu keçəcək. Yazma rejimi /WE -ni birbaşa 5V təchizatına bağlamaqla maneə törədildiyi üçün bu ROM üçün yaxşı idi. RAM, A9 -dan asılı olmayaraq yazılacaq. Bu, bir ROM məkanına yazmağa cəhd edildikdə, RAM məkanında eyni yerə yazılacağı anlamına gəlirdi.

n

Bunun bir həll yolu, CPU -nun fişlərin /OE və /WE pinlərinə birbaşa çıxışı olması üçün MREQ və A12 -dən istifadə edərək hansı fişlərin /CE -nin idarə olunacağını seçmək üçün idarəetmə məntiqini yenidən qurmaq olardı. Bu fikirlə getdim, amma orijinal dizayn kimi dörd NOR qapısı və bir çevirici istifadə etmək əvəzinə, tapşırıq üçün mükəmməl olan yöndəmsiz kiçik bir çip tapdım. Yalnız çipdə mövcud olan məntiq qapılarından istifadə edən bir dövrə yaratmaq məcburiyyətində qaldım, amma bu kifayət qədər asan idi. A12 birbaşa NAND qapısına və NOR qapısına daxil olur. /MREQ NOR qapısına daxil edilir və komplimenti NAND qapısına daxil edilir. NAND qapısı RAM üçün /CE sürmək üçün istifadə olunur və NOR çıxışı ters çevrilir və ROM /CE sürmək üçün istifadə olunur. Bu, hər hansı bir çip seçilməzdən əvvəl /MREQ -nin aşağı olması və sonra A12 hansının seçiləcəyini seçməsini təmin edir. Bu quraşdırma ilə, indi ROM -a yazılan hər hansı bir sorğu heç bir iş görməyəcək. Həm də enerji qənaət edir, çünki hər ikisinin yerinə yalnız bir çip aktivdir. Məntiq çipinin özünə gəlincə, içimizdə hələ də istifadə olunmamış iki çevirici var. Biri daha sonra alışacaq, amma ora çatanda ora çatacağıq.

Addım 3: Sistem Status LEDləri

Sistem Vəziyyəti LEDləri
Sistem Vəziyyəti LEDləri
Sistem Vəziyyəti LEDləri
Sistem Vəziyyəti LEDləri

Bu layihəyə başlamazdan əvvəl müəyyən bir IC ilə əlaqə qurmağa çalışırdım, amma problemlə üzləşirdim. Nə baş verdiyindən əmin deyiləm, ətrafı araşdırmaq üçün bir panel montaj LEDindən istifadə etdim (quraşdırılmış rezistoru olan montajlardan biri). Bunu etmək mənə bu günə qədər istifadə olunan bir nostalji fikri verdi: yaddaşın oxunub oxunmadığını və ya yazıldığını göstərmək üçün vəziyyət LEDləri. Artıq sahib olduğum giriş LED -ləri ilə birlikdə istifadə edilməli idi. Sistemin girişi gözlədiyini göstərmək üçün giriş LED /WAIT siqnal generatoruna qoşuldu (ora gedəcəm, narahat olmayın). Bir IO yazmasını göstərmək üçün bir LED əlavə etməyi düşündüm, amma dəyişən çıxan LEDlərin artıq bunun əla bir göstəricisi olacağını düşündüm. Düşünərək, hələ də əlavə edə bilərəm. Buna baxmayaraq, yaddaşın oxunduğunu və ya yazıldığını bilməyi faydalı hesab edirəm. Yaxşı, hər halda proqram ayıklama üçün faydalıdır. Proqramımı işə salmağa çalışarkən əslində bundan çox istifadə etdim: “niyə yaddaşa yazır? Hələ belə etmək lazım deyil!”

n

Bu LEDləri idarə etmək üçün dördlü NOR qapısından istifadə etdim. Bütün qapılardan istifadə etdim. Vəziyyət siqnallarını yaratmaq üçün yalnız ikisi istifadə edildi, lakin çipin LED -ləri idarə etmək üçün güc imkanları yoxdur. Bu qədər gücü batırmağa qadirdirlər, buna görə digər iki NOR qapısını inverter olaraq istifadə etdim və LEDləri belə bağladım. Bir LED oxuduğunu göstərmək üçün, digəri isə yazmaq üçün istifadə edildiyindən və oxu və yazma sorğusu eyni vaxtda baş vermədiyinə görə hər iki LED üçün yalnız bir rezistor istifadə edərək xilas ola bildim. Kodunu açmaq üçün lazım olan siqnallara gəldikdə, bu da kifayət qədər asan idi. Bütün yaddaş oxumaq istəklərinin göstərilməsini istədim, buna görə ilk NOR qapısının girişlərində /MREQ və /RD var idi. Yazma vəziyyəti bir az hiyləgər idi, amma eyni dərəcədə asan idi. Hələ də bir giriş olaraq /MREQ istifadə etdim, amma digər kimi /WR istifadə etməkdən qaçmaq istədiyim kiçik bir nüansa səbəb olardı. BÜTÜN yazma istəklərini göstərərdi. Yalnız gerçəkdən keçənləri istədim. Bəs bunu necə edərdim? Yaxşı, RAM -ı yazmaq üçün sistemi necə qurduğumu xatırlayın? NOR qapısına digər giriş olaraq RAM /CE istifadə etdim. Bu o deməkdir ki, LED yalnız RAM seçildikdə və yazma istəyi edildikdə yanacaq. LED rəngi baxımından oxu göstəricisi olaraq narıncı (ancaq sarı olanları tapdım) və yazma göstəricisi olaraq qırmızı seçdim.

Addım 4: Giriş və Çıxış

Giriş və Çıxış
Giriş və Çıxış
Giriş və Çıxış
Giriş və Çıxış
Giriş və Çıxış
Giriş və Çıxış

Əvvəlki addımda, qalan komponentlərin bir hissəsini lövhəyə əlavə etdiyimi görmüş ola bilərsiniz. Mən yer ayırırdım ki, təsadüfən bir komponent istədiyim yerə tellər qoymayım (beləliklə, bu komponent üçün yeni bir yer tapmalıyam). Giriş açarlarını yerində qoyub elektrik rayına bağladığımı da fərq etmiş ola bilərsiniz. Orijinal yerin mükəmməl bir yer olduğuna qərar verdim və çıxış LEDlərini yaxınlıqda (yuxarıda) yerləşdirməyə qərar verdim. Çubuq ekranın sağında giriş mandalı var. Yuxarıda çıxış mandalı və solunda LED sürücüsü var. Ekranı sürücüyə bağlamaqla başladım, çünki bunu etmək ən asan idi. Sonra açarları giriş mandalının giriş tərəfinə bağladım. Sonra çıxış mandalının çıxış tərəfini LED sürücüsünə bağladım. Bu telləri çəkmək çətin bir əmr kimi görünə bilər, amma bunun bir səbəbi var idi. Çıxış mandalının girişi məlumat ötürücüsünə və giriş mandalının çıxışına bağlanmalı idi. Fikir, giriş mandalının çıxışlarını mənim etdiyim çıxış mandalının girişlərinə bağlamaq idi. Sonra etməli olduğum tək şey, məlumat avtobusuna bağlı olan bu qarışıqlığı əldə etmək idi. Bu əlaqələrin fiziki olaraq hara getməsinin əhəmiyyəti yox idi, çünki hamısı elektriklə bağlı olacaqdı. İndi kompüter demək olar ki, hazırdır.

Addım 5: Giriş və Çıxışı sıfırlayın və bitirin

Üzr istəyirik, bu addım üçün heç bir şəkil yoxdur. Şəkillər üçün əvvəlki addıma baxın.

n

Əvvəlki addımın son şəklində fərq etdiniz, yaşıl bir düymə və başqa bir məntiq çipi quraşdırdım. Çip OR qapısıdır. /WAIT siqnalını yaratmaq üçün iki qapıdan istifadə olunur. Yaxşı, biri prosessordan OR-ing /IORQ və /RD ilə siqnal yaradır. Çıxış ikinci qapıya verilir, burada OR düyməsini yenidən bir düyməyə alır. Düymə qapının girişini yüksək gətirir, beləliklə çıxışı yüksək edir. Bu çıxış prosessorlara /WAIT pininə verilir. Basılan olmasa da, bir rezistor girişi aşağı saxlayır. Əvvəlcə 10K rezistor istifadə etdim, amma LS32 əslində girişə gərginlik verirdi. Rezistor kifayət qədər aşağı düşmədi və 1K ilə əvəz etməli oldum. Hər halda, fikir budur ki, IO oxumaq istəyi edildikdə, birinci və ya ikinci OR qapıları prosessora gözləməyi bildirir. Giriş açarlarını istədiyinizə təyin etdikdən sonra düyməni basdığınız zaman CPU gözləmə vəziyyətindən çıxarılır. Yaşıl "giriş" LEDi, əvvəlki bir addımda dediyim kimi, /WAIT pimi aşağı düşəndə yanır.

n

Ancaq hələ bitirməmişik. Giriş flip flopu, məlumat girişinin nə vaxt etibarlı olduğunu və CPU -ya verilməli olduğunu bildirmək üçün bir siqnala ehtiyac duyur. Bu saat pimi yüksək aktivdir. Əvvəllər onu düyməyə bağlayırdıq. Bu hələ də etibarlı bir seçimdir, amma bu dəfə ikinci OR qapısı ilə eyni çıxışa qoymağı seçdim. Bu IC -də idarə edilməli olan bir /OE pin də var. Yüksək tutulsaydı, heç vaxt avtobusa məlumat daxil etməzdi. Aşağı tutsaydı, həmişə avtobus sürərdi. Bunu düzəltmək üçün sadəcə üçüncü bir OR qapısından istifadə etdim. Girişlər /IORQ və /RD -dir və çıxış birbaşa mandalın /OE -yə gedir.

n

Çıxış mandalının da idarə olunması üçün saat pininə ehtiyacı var. Yenə yüksək aktivdir. Şematik olaraq, /IORQ və /WR istifadə edərək pini birbaşa idarə edən dördüncü OR qapısını çəkdim. Bu, yazma sorğusu edilənə qədər saat pininin yüksək tutulacağını, sonra yenidən aşağıya, sonra yenidən yuxarıya doğru gedəcəyini bildirir. Yəqin ki, yaxşı olardı, çünki məlumat avtobusunun yazmağa cəhd edildikdən dərhal sonra hələ də bu barədə etibarlı məlumatları olardı, amma mühəndislik baxımından zibil dizaynı idi. Son şəkilləri çəkənə qədər bu səhvi görmədim, amma bu əlaqəni kəsdim və sonra OR qapısının çıxışını yaddaş idarəetmə məntiqindən istifadə edilməmiş çeviricilərdən birinə verdim, sonra çıxışını saat pininə bağladım.. Sxemanı da düzəltdim və etdiyim başqa bir səhv tapdım. Mən də düzəltdim.

n

Bütün bunları nəhayət tamamladıqdan sonra çox az iş görməli oldum: sıfırlama dövrəsi. Lövhəyə bir düymə əlavə etdim və bir tərəfi yüksək tutmaq üçün 10K müqavimət istifadə etdim. Digər tərəf birbaşa yerə gedir. Yüksək tutulan tərəf, hər çipə /RESET pinlə (CPU və çıxış mandalı) gedən /RESET çıxışıdır. Gücün sıfırlanmasını həyata keçirmək üçün /RESET çıxışına bir kondansatör əlavə etdim. Fikir, böyük dəyər müqavimətinin nisbətən böyük kondansatörün yavaş -yavaş doldurulmasına və /RESET sancaqlarını bir qədər saat dövrü üçün aşağı tutmasına səbəb olmasıdır (CPU dörd saat dövrünə ehtiyac duyur). Yəqin ki, bu dövrənin mənfi tərəfinin nə olduğunu təxmin edə bilərsiniz. Eyni dövrə olduğu üçün əvvəlki versiya ilə eyni mənfi. Düymə basıldıqda, kondansatör əsas olaraq düymə vasitəsilə qısalır. Bu həm qapaq, həm də düymə üçün pisdir, buna görə də quruluşunuzu bir az daimi etmək istəyirsinizsə, onu yenidən dizayn etmək istəyə bilərsiniz. Monostable rejimində qurulmuş başqa 555 taymer haqqında düşünürdüm. Ancaq bununla da kompüter dövrəsi artıq başa çatmışdır. Xeyir. İndi proqramlaşdırılmalıdır.

Addım 6: Proqramlaşdırma

Bu şeyi proqramlaşdırmaq bir kabus idi. Arduino EEPROM proqramçısı qurdum. İşləmədi. Başqasının dizaynına və kodlamasına əsaslanaraq başqa birini qurdum. Hələ də işləmədi. Əl ilə ünvanları və məlumat baytlarını əl ilə təyin etmək üçün sınaqdan keçirilmiş üsula qayıtdım. Nədənsə, bunu pozdum. Yenidən sınadım və yenə də səhv başa düşdüm. Yenə geri qayıtdım və bir baytla söndüyünü kəşf etdim, buna görə düzəltdim və nəhayət Allaha şükürlər oldu.

n

Həqiqi proqrama gəlincə, çox mürəkkəb və təqib etmək çətin görünür, amma belə deyil. Əslində olduqca sadədir. Yarısı ətrafdakı rəqəmləri kopyalamaqdır. Digər yarısı, 16 bitlik riyaziyyat, şərti atlamalar və daha da çox sayda kopyalama arasında paylaşılır. Buna görə keçməyimə və bunun necə işlədiyini söyləyim.

n

Başlanğıc, proqramın istifadəsi üçün bəzi qeyd dəyərlərini təyin edir. Proqram döngəsi bir az daha mürəkkəbdir, lakin çox deyil. Birincisi, 00 portundakı A qeydinə girişi qəbul edir. Sonra E reyestri yaddaşa yazılır. İlk iki döngədə, E reyestri lazımsız məlumatları ehtiva edir, buna görə də əslində yazılmayacağı üçün onu son iki bayt ROM boşluğuna yazmağa çalışırıq; sonra ünvan göstəricisi (IY) artırılır. D -də saxlanılan dəyər daha sonra yazılmaq üçün E -yə köçürülür. A daha sonra D və L -ə yüklənir və E H. -ə kopyalanır, burada dəyər müqayisə çıxma və ZF (sıfır bayrağı) yoxlanılması yolu ilə aparılır. Müqayisə edilən ilk dəyər B və C qeydlərində saxlanılır. B və C vahid 16 bitlik qeyd kimi qəbul edilir. Dəyərlər eynidirsə, proqram birbaşa istifadəçi kodunun yerləşdiyi güman edildiyi RAM sahəsinə atlayır. BC -dəki kod uyğun gəlmirsə, HL D və E -dən olan ilkin dəyərlərlə yenidən yüklənir və BC ilə müqayisə edildiyi kimi yenidən SP -dəki dəyərlə müqayisə olunur. Bir uyğunluq varsa, eyni nəticəyə malikdir, ancaq yaddaşa üç əlavə bayt yazılır. Baytlar, CPU -nun proqramın əvvəlinə (proqram sıfırlaması) geri dönməsinə səbəb olan bir koddur. İkinci müqayisə uyğun gəlmirsə, proqram istifadəçidən dəyər aldığı yerə doğru irəliləyir.

n

LD SP, EDBFH; exe kodu (atlama əlavə edir)

n

LD IY, FFEH; kod saxlama üçün ilkin yaddaş göstəricisi

n

LD BC, EDC3H; exe kodu (döngə yoxdur)

n

döngə; assembler direktivinə görə bu hissənin yaddaşda harada yerləşdiyini bilmək məcburiyyətində deyilik

n

A -da, (00H); proqram məlumatlarını əldə edin

n

LD (IY+00H), E; E saxlanılacaq kodu ehtiva edir

n

INC IY; növbəti yaddaş yerinə keçin

n

LD E, D; ld D -ni E -yə daxil edin

n

LD D, A; ld A -dan D -ə qədər

n

LD H, E; ld E H daxil edin

n

LD L, D; ld D daxil L

n

OR A; daşıyan bayrağı sıfırlayın

n

SBC HL, BC; exe kodu 2 daxil edildikdə 0 qaytarır

n

JP Z, 1000H; Əgər belədirsə, proqrama keçin və icra edin

n

LD H, E; əks halda, bunları müvafiq dəyərlərə yeniləyin

n

LD L, D.

n

OR A; ilk çıxarıla bilər daşıyan bayrağı. Təmizləyin

n

SBC HL, SP; exe kodu 1 daxil edildikdə 0 qaytarır

n

JP NZ, döngə; deyilsə, prosesi təkrarlayın (bir dəyər əldə etməklə başlayaraq)

n

LD (IY+00H), C3H; əks halda, istifadəçi proqramının sonunda bir atlama kodu daxil edin

n

LD (IY+01H), 00H; jump əsasən proqram sıfırlaması kimi çıxış edir

n

LD (IY+02H), 00H; registrlərin dəyişdirilməsi halında tam sıfırlama

n

JP 1000H; istifadəçi proqramına keçin və yerinə yetirin

Tövsiyə: