Мазмұны:

Z80 компьютерін қайта қарау: 6 қадам
Z80 компьютерін қайта қарау: 6 қадам

Бейне: Z80 компьютерін қайта қарау: 6 қадам

Бейне: Z80 компьютерін қайта қарау: 6 қадам
Бейне: #Донор Қазірден бастап барлық кинотеатрларда! 2024, Қараша
Anonim
Z80 компьютеріне қайта қарау
Z80 компьютеріне қайта қарау
Z80 компьютерін қайта қарау
Z80 компьютерін қайта қарау

Бұрын мен Z80 негізіндегі компьютерді қалай құруға болатыны туралы нұсқаулық жаздым, мен схеманы мүмкіндігінше қарапайым етіп құрастырдым, сондықтан оны мүмкіндігінше оңай құрастыруға болады. Мен қарапайымдылық идеясын қолдана отырып, шағын бағдарлама жаздым. Бұл дизайн өте жақсы жұмыс істеді, бірақ мен оған мүлде риза болмадым. Мен оны жұмыс уақытында бағдарламалауға мүмкіндік беретін бағдарламаны қайта жазудан бастадым. Бұл маған код бөліктерін EEPROM -ге арнаусыз тексеруге мүмкіндік берді, бұл өз кезегінде EEPROM -ды қайта бағдарламалауды талап етеді. Бұл маған қызықты идея сияқты көрінбеді. Содан кейін мен есте сақтау кеңістігі туралы ойлана бастадым. Егер мен аппараттық құралмен (негізінен IO) интерфейс жасағым келсе, кодтың бір бөлігі жүйеде бар жад көлемінен асып кетуі мүмкін. Есіңізде болсын, дизайн адрестік шинаның төменгі байтын ғана пайдаланды, содан кейін жоғары байттың төменгі биті ROM мен RAM кеңістіктерін таңдау үшін пайдаланылды. Бұл менде тек 253 байт бос орын бар екенін білдіреді. Сіз неге 256 емес, 253 деп сұрауыңыз мүмкін. Бұл менің жаңа кодым жазбаша бағдарламаның соңында үш байтты деректерді енгізгендіктен (бұл жаңа дизайнмен жұмыс істеу үшін оны өзгерткендіктен кейінірек қарастырылады).

n

Мен тағы не болып жатқанын білу үшін ескі схемаларыма қайта оралдым. Мен жадты таңдау схемасы бар кішкене кемшілік таптым, ол жерге жеткенде оны жабамын. Оңайлатылған нұсқа: барлық жазу сұраулары іс жүзінде орындалады, бірақ ол әрқашан жедел жадқа енгізілген. Бұл алаңдауға тұрарлық емес шығар, бірақ мен оны бұл жолы дұрыс орындағым келді. Сөйтіп, мен жаңа схема құра бастадым. Бұл бетке бекітілген екі сурет нақты тізбектің алдында және кейін. Мен спагетти сымдарының көп бөлігін тазаладым, бұл күлкілі емес.

n

Егер сіз менің бастапқы ұсынысымды ұстанған болсаңыз және оны орындауды жоспарласаңыз, мені жек көресіз. Егер сіз жаңадан бастасаңыз, онда сіз сәттілікке жетесіз. Тізімдегі бөліктерді (немесе олардың баламасын) алып, жалғастырыңыз.

Жабдықтар:

LM7805 - 5 вольтты реттегіш Z80 - процессор; жүйенің миы AT28C64B - EEPROM. IDT6116SA - SRAM микробағдарламасы үшін пайдаланылатын «тұрақты» деректерді сақтау; пайдаланушы кодын және /немесе жалпы деректерді сақтау үшін қолданыладыNE555 - Жүйелік сағат74HC374 - Octal D -Latch /OE; кіріс чипі ретінде пайдаланылады74LS273 - Octal D -Latch with /MR; шығыс чипіTLC59211 - жарықдиодты драйвер чипі (74LS273 светодиодты басқара алатындай пайдаланылады, себебі ол ток шығаруға қабілетті емес) MC14572 - Бұл «Жол драйвері» чипі, бірақ мен оны жадты басқару логикасына өте ыңғайлы деп таптым. Оның 4 инверторы және 74LS32 - Quad OR gateCD4001 - Quad NOR қақпасы CD4040 - 12 сатылы толқынды есептегішке салынған NAND және NOR қақпасы бар; Сызылған, бірақ енгізілмеген сағат бөлгіші (жүйені сағаттың баяу жылдамдығында іске қосу үшін) 2 10К Ом резисторлары - 555 таймерлік тізбекте біреуі қолданылады, сондықтан ол үшін қалаған мәнді пайдаланыңыз4 1К Ом резисторлары - біреуі 555 таймер схемасы, сондықтан сіз қалаған нәрсені қолданыңыз. Басқасы жарықдиодты жарықдиодты басқару үшін қолданылады, сондықтан егер сіз 8х330 Ом резисторлық шинасы 8х10К Ом резистор шинасы11 жарықдиодты қаласаңыз, оны өзгерте аласыз - үшеуі жүйенің күйі үшін, ал қалған сегізі - шығыс. 8 үшін мен штрих -графикалық дисплейді қолдандым (HDSP -4836) 4 Конденсатор - LM7805 екеуі қолданылады; 0,22uF және 0,1uF. Біреуі 555 таймеріне арналған, сондықтан сіз дұрыс деп санайтын нәрсені қолданыңыз. Соңғысы-қосуды қалпына келтіру; 100uF2 N. O. Басу түймелері - бірі енгізу үшін, екіншісі қалпына келтіру үшін қолданылады8 SPST DIP қосқыштары - Деректерді енгізу; Мен Piano Key styleWire қолдандым. Көптеген сымдар

n

ЕСКЕРТПЕ: MC14572 саңылаулы нұсқасы ескірген, бірақ SMD нұсқасы әлі де белсенді (тіпті «жаңа дизайн үшін емес» күйі), сондықтан сізге оны пайдалануға рұқсат беру үшін схеманы сатып алу қажет болуы мүмкін. MC14572 орнына екінші 74LS32 қолдануға болады (алдыңғы ible -дің «жадты таңдау схемасы» бөлімін қараңыз)

1 -қадам: Өзгерістерге шолу + схемалар

Өзгерістерге шолу + схемалар
Өзгерістерге шолу + схемалар

Схеманы қалай оқу керек: Чипке бағытталған көрсеткі-бұл кіріс: Кіріс> -Микросхемадан бағытталған көрсеткі-бұл шығыс: Шығу <-Автобустар көрсеткінің орнына сызықты қолданады: Автобус |-

n

Чиптердің көпшілігі дәл түйреуіштермен салынған. Бұл чиптерге кішкене түсіру сызылған. Көптеген чиптерде пин нөмірлері мен белгілер бар. Оларды оқу қиын болуы мүмкін. Менің қарындашым түссіз болды.

n

Схемалық қосылыстарға келетін болсақ, жаңа дизайнның макеті негізінен түпнұсқадан өзгеріссіз қалады. Мен жоғары байт адресінің төменгі ұшын естеліктерге қостым, содан кейін RAM/ROM таңдау үшін жоғарғы жақтың төменгі ұшын (A12) қолдандым. Бұл ROM кеңістігі 0000-00FF-ден 0000-0FFF-ге дейін өзгерді дегенді білдіреді. Қошқар кеңістігі 0100-01FF-ден 1000-1FFF-ке дейін өзгерді. Мен сондай -ақ жадты басқару логикасын жақсы дизайнға ауыстырдым және екі жаңа күй диодты қостым (және желімнің логикасы). Мен сонымен қатар сағат бөлгіш схемасын салдым (бірақ сым тартпадым). Бұл екі функцияны орындау еді. Айқын функция - сағат жиілігін төмендету. Басқа функция PWM (импульстік ені модуляциясы) мақсаттарына арналған, өйткені 555 50% жұмыс циклі бар толқындарды тудырмайды. Бұл тізбекте бұл маңызды емес, бірақ егер сіз светодиодты басқару үшін сағатты қолданғыңыз келсе, сіз әсерлерді байқайсыз (бір (жарық диодты) екіншісіне қарағанда күңгірт болады). Схеманың қалған бөлігі іс жүзінде өзгермейді.

2 -қадам: процессор, жад және жадты басқару

CPU, жад және жадты басқару
CPU, жад және жадты басқару
CPU, жад және жадты басқару
CPU, жад және жадты басқару
CPU, жад және жадты басқару
CPU, жад және жадты басқару
CPU, жад және жадты басқару
CPU, жад және жадты басқару

Бұл менің алдыңғы нұсқамның оқырмандары мені жек көретін бөлігі. Түпнұсқалық конструкцияда мен бөлшектерді тақтаға олар сымға қосуда қиындық тудырмайтын жерге тастадым. Нәтиже біреу спагетти табағын лақтырып жібергенге ұқсайды және «сымдар!» Мен оны аздап тазартқым келді, сондықтан мен процессордан, жедел жадтан және ROM -нан басқасының бәрін жыртудан бастадым. Мен барлық кіріс схемасын, шығыс схемасын және желімнің логикасын жинадым. Бұл маған ауыр тиді, бірақ бұл қажет болды. Мен барлық деректер қосылымдарын және адрестік шинаның төменгі байтын қалдырдым. Содан кейін мен мекенжай шинасының келесі төрт битін (A8-A11) ROM чипіне қостым. Мен бұл жолы қайта бағдарламалауды жеңілдету үшін чипті айналып өтуді жөн көрдім. Мен сонымен қатар RAM чипіне адрестік қосылымдарды жібердім.

n

Бұған жол бермеу үшін мен енді жадыны басқару логикасын қосуым керек болды. Түпнұсқа схемада мен процессордың /MREQ желісін екі CE жад микросхемасына тікелей /CE -ге қостым, содан кейін мен RAM /WE -ге сымсыз қосылдым. Содан кейін менде CPU /RD және /MREQ логикалық түрде OR' еді, сонымен қатар A9 болды. Негізінде, ол барлық жад сұраулары жедел жады мен ROM -ды қосатын етіп орнатылды, бірақ A9 чиптер /ОЭ -нің қайсысы таңдалғанын таңдау үшін пайдаланылды. Бұл жақсы болды, себебі микросхемалар жадыға сұраныс жасамайынша белсенді емес болып қалады, содан кейін оқу сұранысы кезінде тек бір /OE белсенді болады. Бұл қиылысудың алдын алды, бірақ ыңғайсыз нюансты енгізді. A9 тек қандай чип мәліметтерді шығаратынын анықтау үшін қолданылғандықтан және процессордың RAM /WE түйініне тікелей қол жеткізе алатындықтан, кез келген және барлық жазу сұраулары орындалады. Бұл ROM үшін жақсы болды, себебі оның жазу режимі /5 В қуат көзіне тікелей байланыстыру арқылы тежеледі. ЖЖҚ A9 -ға қарамастан жазылады. Бұл ROM кеңістігіне жазылу әрекеті жедел жадта сол орынға жазылатынын білдіреді.

n

Мұның бір шешімі - бұл процессордың чиптердің /OE және /WE түйреуіштеріне тікелей қол жеткізуі үшін басқару логикасын қайта қосу, содан кейін MREQ және A12 көмегімен микросхемалар /CE -ді басқаруды таңдау. Мен бұл идеямен жүрдім, бірақ түпнұсқалық дизайн сияқты төрт NOR қақпасы мен инверторды пайдаланудың орнына, мен тапсырмаға өте ыңғайлы шағын чипті таптым. Мен чипте бар логикалық қақпаларды ғана қолданатын схеманы құруға тура келді, бірақ бұл жеткілікті оңай болды. A12 тікелей NAND қақпасы мен NOR қақпасына беріледі. /MREQ NOR қақпасына, ал комплимент NAND қақпасына беріледі. NAND қақпасы жедел жады үшін /CE жүргізуге арналған, ал NOR шығысы кері айналады және ROM /CE жетегі үшін қолданылады. Бұл чип таңдалмастан бұрын /MREQ төмен болуы керек, содан кейін A12 қайсысы таңдалатынын таңдайды. Бұл қондырғы арқылы енді ROM -ға кез келген жазу сұраулары ештеңе жасамайды. Бұл сонымен бірге қуатты үнемдейді, себебі екеуінің орнына тек бір чип белсенді. Логикалық чиптің өзіне келетін болсақ, бізде әлі де пайдаланылмаған екі инвертор бар. Біреу кейінірек үйренеді, бірақ біз оған жеткенде жетеміз.

3 -қадам: Жүйе күйінің жарық диодтары

Жүйе күйінің жарық диодтары
Жүйе күйінің жарық диодтары
Жүйе күйінің жарық диодтары
Жүйе күйінің жарық диодтары

Бұл жобаны бастамас бұрын мен белгілі бір IC -мен байланыс орнатуға тырыстым, бірақ менде қиындықтар болды. Мен не болып жатқанын білмеймін, мен жарық диодты панельді қолдандым (резисторы бар қондырғылардың бірі). Бұл маған ностальгия туралы идея берді, ол әлі күнге дейін қолданылады: жарық диодты жад оқылғанын немесе жазылғанын көрсету үшін қолданылады. Ол менде болған кіріс жарық диодымен бірге қолданылуы керек еді. Кіріс жарық диоды /WAIT сигнал генераторына қосылды, ол бізге жүйенің кірісті күтіп тұрғанын көрсетеді (мен сонда жетемін, уайымдамаңыз). Мен IO жазбасын көрсету үшін жарықдиодты қосуды қарастырдым, бірақ өзгерген жарықдиодты шамалар бұл үшін керемет көрсеткіш болады деп ойладым. Ойлана келе, мен оны әлі қосуға болады. Дегенмен, есте сақтаудың оқылатынын немесе жазылғанын білу пайдалы деп ойлаймын. Қалай болғанда да, бұл бағдарламаны жөндеу үшін пайдалы. Мен өз бағдарламамды іске қосуға тырысқанда, мен оны қатты қолдандым: «ол неге жадқа жазылған? Әзірге олай етуге болмайды! »

n

Бұл жарықдиодты басқару үшін мен NOR төртбұрышты қақпасын қолдандым. Мен барлық қақпаларды қолдандым. Күй сигналдарын генерациялау үшін тек екеуі қолданылды, бірақ чиптің жарық диодты жүргізуге мүмкіндіктері жоқ. Олар соншалықты қуатты сіңіре алады, сондықтан мен басқа екі NOR қақпасын инвертор ретінде қолдандым және светодиодтарды осылай жалғадым. Бір жарық диоды оқуды, екіншісі жазу үшін қолданылатындықтан және оқу мен жазуға сұраныс бір уақытта орындалмайтындықтан, мен екі жарықдиодты бір резисторды қолдана отырып құтыла алдым. Маған декодтау керек сигналдарға келетін болсақ, бұл да оңай болды. Мен барлық жадты оқуға сұраныстардың көрсетілуін қаладым, сондықтан бірінші NOR қақпасында кірістерде /MREQ және /RD болды. Жазу мәртебесі сәл қиын болды, бірақ дәл солай. Мен әлі де бір кіріс ретінде /MREQ қолдандым, бірақ /WR -ді екіншісі ретінде пайдалану мен болдырмағым келетін кішкене нюансты тудырады. Бұл БАРЛЫҚ жазу сұрауларын көрсетер еді. Мен тек басынан өткендерді ғана қалаймын. Сонымен мен мұны қалай жасар едім? Есіңізде болсын, менде жүйені қалай орнатқанмын, тек жедел жады ғана жазылады? Мен NOR қақпасының басқа кірісі ретінде RAM /CE қолдандым. Бұл жарық диодты ЖЖҚ таңдалған кезде және жазу сұранысы жасалған кезде ғана жанатынын білдіреді. Жарықдиодты түсі бойынша мен оқу индикаторы ретінде апельсинді таңдадым (бірақ мен тек сары түстерді таптым) және жазу индикаторы ретінде қызыл түсті.

4 -қадам: Енгізу және шығару

Енгізу және шығару
Енгізу және шығару
Енгізу және шығару
Енгізу және шығару
Енгізу және шығару
Енгізу және шығару

Алдыңғы қадамда сіз қалған компоненттерді тақтаға қосқанымды байқаған боларсыз. Мен кеңістікті сақтап қалдым, сондықтан кездейсоқ сымдарды мен қалаған жерге қоймас едім (осылайша мен бұл компоненттің жаңа орнын табуым керек еді). Сіз сондай -ақ менің кіріс қосқыштарды орнында қалдырып, электр рельсіне қосылуымды байқаған боларсыз. Мен түпнұсқалық орынды тамаша орын деп шештім және жақын жерде (жоғарыда) шығыс жарық диодтарын орналастыруды шештім. Жолақ дисплейінің оң жағында кіріс ысырмасы орналасқан. Оның үстінде шығыс ысырмасы, ал сол жағында жарықдиодты драйвер орналасқан. Мен дисплейді драйверге қосудан бастадым, себебі бұл ең оңай. Содан кейін мен қосқыштарды кіріс ысырмасының кіріс жағына қостым. Содан кейін мен шығыс ысырмасының шығыс жағын жарықдиодты драйверге қостым. Бұл сымды алудың ыңғайсыз бұйрығы сияқты көрінуі мүмкін, бірақ бұл себеп болды. Шығу ысырмасының кірісі деректер шинасына, сондай -ақ кіріс ысырмасының шығысына қосылуы керек еді. Идея - кіріс ысырмасының шығысын шығыс ысырмасының кірістеріне қосу болды, мен жасадым. Содан кейін мен тек деректерді беру шинасына қосылуым керек болды. Бұл байланыстар физикалық түрде қайда кеткені маңызды емес, өйткені олардың барлығы электрмен қосылады. Қазір компьютер дерлік дайын.

5 -қадам: Кіріс пен шығуды қалпына келтіру және аяқтау

Кешіріңіз, бұл қадам үшін суреттер жоқ. Суреттер үшін алдыңғы қадамды қараңыз.

n

Сіз алдыңғы қадамның соңғы суретін байқаған боларсыз, менде жасыл түйме және басқа логикалық чип орнатылған. Чип - OR қақпасы. /WAIT сигналын шығару үшін екі қақпа қолданылады. Сигналды процессордан OR-ing /IORQ және /RD арқылы шығарады. Шығару екінші қақпаға беріледі, онда ол OR түймесін қайтадан басу түймесін алады. Түйме қақпаның кірісін жоғарылатады, осылайша шығымды жоғарылатады. Бұл шығыс процессорларға /WAIT түйреуішіне беріледі. Басылмаған кезде резистор кірісті төмендетеді. Мен бастапқыда 10K резисторды қолдандым, бірақ LS32 кіріске кернеуді түсірді. Резистор оны төмен түсірмеді, мен оны 1K -мен ауыстыруға тура келді. Қалай болғанда да, идея: IO оқуға сұраныс жасалған кезде, бірінші және екінші OR қақпалары процессорға күтуді айтады. Кіріс қосқыштарын қалаған нәрсеге орнатқаннан кейін сіз түймені басасыз және ол процессорды күту жағдайынан шығарады. Жасыл «кіріс» жарық диоды, мен оны алдыңғы қадамда айтқандай, /WAIT түйреуіші төмен түскенде ол жанады.

n

Бірақ біз әлі аяқталған жоқпыз. Кіріс флипіне деректерді енгізу жарамды болған кезде хабарлау үшін сигнал қажет және оны процессорға шығару керек. Бұл сағат штыры жоғары белсенді. Бұрын біз оны тек түймені қосқан болатынбыз. Бұл әлі де жарамды нұсқа, бірақ бұл жолы мен оны НЕМЕСЕ екінші қақпасы сияқты шығаруды таңдадым. Бұл IC -де қозғалуы қажет /OE түйрегіші бар. Егер ол жоғары ұсталса, ол автобусқа ешқашан деректерді енгізбейді. Егер төмен ұсталса, ол әрқашан автобусты басқарады. Мұны түзету үшін мен үшінші OR қақпасын қолдандым. Кірістер /IORQ және /RD болып табылады және шығыс тікелей ысырманың /OE -ге түседі.

n

Сондай -ақ, шығыс ысырмасына сағаттық істік қажет болады. Тағы да, ол жоғары белсенділікке ие. Схемада мен /IORQ және /WR көмегімен түйреуішті басқаратын төртінші OR қақпасын салдым. Бұл сағатты жазу сұранысы түскенше жоғары ұсталатынын, содан кейін төмен түсіп, қайтадан жоғары болатынын білдірді. Мүмкін, бұл жақсы болар еді, себебі деректер шинасы жазуға тырысқаннан кейін де ол туралы жарамды деректерге ие болар еді, бірақ инженерлік тұрғыдан қоқыс жобасы болды. Мен бұл қатені соңғы суреттерді түсіргенге дейін байқамадым, бірақ мен бұл байланысты үзіп тастадым, содан кейін OR қақпасының шығысын жадты басқару логикасынан пайдаланылмаған инверторлардың біріне бердім, содан кейін оның шығысын сағаттық істікке жалғадым.. Мен сондай -ақ схеманы түзеттім және мен жасаған басқа қатені таптым. Мен де оны түзеттім.

n

Мұның бәрі аяқталғаннан кейін менде өте аз жұмыс болды: қалпына келтіру схемасы. Мен тақтаға түйме қостым және бір жағын жоғары ұстау үшін 10K резисторды қолдандым. Екінші жағы тікелей жерге түседі. Жоғарғы жағы - бұл /RESET түйрегіші бар барлық чиптерге баратын /RESET шығысы (процессор мен шығыс ысырмасы). Қуатты қосуды қалпына келтіру үшін мен /RESET шығысына конденсатор қостым. Идея - үлкен мәнді резистор салыстырмалы түрде үлкен конденсатордың баяу зарядталуына әкеліп соғады және /RESET түйреуіштерін бірнеше сағаттық цикл үшін төмен ұстап тұрады (процессорға төрт сағаттық цикл қажет). Сіз бұл тізбектің теріс жағы не екенін болжай аласыз. Бұл алдыңғы нұсқадағыдай теріс, себебі ол бірдей схема. Түйме басылған кезде конденсатор түйме арқылы қысқарады. Бұл қақпақ үшін де, түйме үшін де жаман, сондықтан егер сіз өзіңіздің құрылымыңызды біршама тұрақты еткіңіз келсе, оны қайта жасағыңыз келуі мүмкін. Мен моноқабыл режимде орнатылған тағы 555 таймер туралы ойладым. Бірақ осымен компьютерлік схема аяқталды. Алақай. Енді оны бағдарламалау қажет.

6 -қадам: Бағдарламалау

Бұл нәрсені бағдарламалау қорқынышты болды. Мен Arduino EEPROM бағдарламашысын құрдым. Ол жұмыс істемеді. Мен басқа біреудің дизайны мен кодтауының негізінде басқасын жасадым. Әлі де жұмыс істемеді. Мен қолмен адрестер мен деректер байттарын қолмен орнатудың тәжірибелі әдісіне оралдым. Әйтеуір мен мұны шатастырдым. Мен қайтадан тырыстым және әлі де қате түсіндім. Мен тағы да қайтып оралдым және ол бір байтпен өшірілгенін білдім, сондықтан мен оны түзеттім және ол ақыры жұмыс істеді, Құдайға шүкір.

n

Нақты бағдарламаға келетін болсақ, бұл өте күрделі және оны орындау қиын сияқты, бірақ олай емес. Бұл өте қарапайым, шын мәнінде. Оның жартысы сандарды көшіреді. Қалған жартысы 16-биттік математика, шартты секіру және тағы да сандарды көшіру арасында бөлінеді. Олай болса, мен оны өтуге және оның қалай жұмыс істейтінін айтуға рұқсат етіңіз.

n

Инициализация бағдарламада пайдалану үшін регистрдің кейбір мәндерін орнатады. Бағдарламалық цикл біршама күрделі, бірақ көп емес. Біріншіден, ол 00 портындағы A регистріне енгізуді қабылдайды. Содан кейін E регистрі жадқа жазылады. Алғашқы екі ілмекте E регистрінде қажетсіз деректер бар, сондықтан біз оны ROM кеңістігінің соңғы екі байтына жазуға тырысамыз, себебі ол жазылмайды; содан кейін мекенжай көрсеткіші (IY) ұлғаяды. Содан кейін D -де сақталған мән E -ге жылжытылады және келесі жазылады. A содан кейін D -ге жүктеледі, ал E - HL -ге көшіріледі, онда мәнді салыстыру ZF (нөлдік жалаушаны) шегеру және тексеру арқылы жүзеге асады. Салыстырылған бірінші мән В және С регистрлерінде сақталады. В және С бірыңғай 16-разрядты регистр ретінде қарастырылады. Егер мәндер бірдей болса, онда бағдарлама тікелей RAM кеңістігіне секіреді, онда пайдаланушы коды орналасқан деп есептеледі. Егер BC -дегі код сәйкес келмесе, онда HL D және E бастапқы мәндерімен қайта жүктеледі және BC -мен салыстырғандай SP мәнімен қайтадан салыстырылады. Егер бұл сәйкестік болса, онда ол бірдей нәтиже береді, бірақ жадқа үш қосымша байт жазылады. Байттар - бұл процессорды бағдарламаның бастапқы кезеңіне (бағдарламалық жасақтаманы қалпына келтіру) қайтаруға мәжбүр ететін код. Егер екінші салыстыру сәйкес келмесе, онда бағдарлама пайдаланушыдан мәнді алатын жерге ауысады.

n

LD SP, EDBFH; exe коды (секіруді қосады)

n

LD IY, FFEH; кодты сақтауға арналған бастапқы жад көрсеткіші

n

LD BC, EDC3H; exe коды (цикл жоқ)

n

цикл; Ассемблер директивасы, сондықтан бұл бөлік жадта қайда орналасқанын білудің қажеті жоқ

n

A, IN (00H); бағдарлама мәліметтерін алу

n

LD (IY+00H), E; E сақталатын кодты қамтиды

n

INC IY; жадтың келесі орнына өтіңіз

n

LD E, D; ld D -ден E -ге дейін

n

LD D, A; ld A -дан D -ге дейін

n

LD H, E; ld E -ден H -ге дейін

n

LD L, D; ld D -ден L -ге дейін

n

НЕМЕСЕ А; тасымалдау жалаушасын қалпына келтіру

n

SBC HL, BC; егер exe коды 2 енгізілген болса, 0 қайтарады

n

JP Z, 1000H; олай болса, бағдарламаға өтіп, оны орындаңыз

n

LD H, E; әйтпесе, оларды тиісті мәндерге жаңартыңыз

n

LD L, D

n

НЕМЕСЕ А; бірінші шегерім тасымалдау жалаушасын орнатуы мүмкін. Тазалаңыз

n

SBC HL, SP; exe коды 1 енгізілген болса, 0 қайтарады

n

JP NZ, цикл; олай болмаса, процедураны қайталаңыз (мәнді алудан басталады)

n

LD (IY+00H), C3H; Әйтпесе, пайдаланушы бағдарламасының соңына өту кодын енгізіңіз

n

LD (IY+01H), 00H; jump негізінен бағдарламалық жасақтаманы қалпына келтіру қызметін атқарады

n

LD (IY+02H), 00H; регистрлер өзгертілген жағдайда бұл толық қалпына келтіру

n

JP 1000H; пайдаланушы бағдарламасына өту және оны орындау

Ұсынылған: