Էմուլյացիան որոշակի համակարգի վրա սարքը նմանակելու փորձ է: Էմուլատորներ կառուցելու երեք եղանակ կա `դինամիկ և ստատիկ վերամշակում և մեկնաբանություն: Աշխատելիս առավելագույն արագության ազդեցությանը հասնելու համար խորհուրդ է տրվում օգտագործել բոլոր երեք մեթոդները: Եկեք քննարկենք տիպիկ պրոցեսորային էմուլատոր գրելու օրինակ:
Հրահանգներ
Քայլ 1
Ընտրեք ծրագրավորման լեզու: Առաջարկվող և հավանաբար միակ այլընտրանքը C- ն ու Assembler- ն են: C- ում դուք կարող եք կազմել կոդ, որը կտեղափոխվի այլ հարթակներ: Հասկանալը համեմատաբար պարզ է և սխալ կարգաբերել, բայց շատ ավելի դանդաղ է, քան մյուսները: Մոնտաժողն առանձնանում է իր աշխատանքի մեծ արագությամբ, այն օգտագործում է պրոցեսորային ռեգիստրներ, ինչը նպաստում է ծրագրի մոտավորմանը մինչև նոր կազմելը: Այնուամենայնիվ, շատ դժվար է դրանում կոդեր հետևել և ամրագրել: Կարևոր է լավ իմանալ ընտրված լեզուն և արագ օպտիմալացնել կոդը:
Քայլ 2
Նախնական արժեք նշանակեք ցիկլային և ծրագրի հաշվիչին: Cycիկլային հաշվիչը հաշվում է ժամացույցի ցիկլերի քանակը, որից հետո տեղի է ունենում ընդհատումը, և ծրագրային ապահովման համակարգիչը ցույց է տալիս հիշողության տարածքը, որում ընկած է օպկոդի հաջորդ հրահանգը:
Քայլ 3
Օպկոդն ստանալուց հետո օղակի հաշվիչից հանեք ժամացույցի ցիկլերի քանակը, որոնք անհրաժեշտ են օպկոդի գործարկման համար: Խնդրում ենք նկատի ունենալ, որ որոշ հրամաններ տարբերվում են տիզերի քանակով ՝ կախված փաստարկներից: Նման հրամանների համար ավելի ուշ փոխեք հաշվիչը գործարկման կոդի մեջ:
Քայլ 4
Օպկոդի հաջող կատարումից հետո ստուգեք ընդհատումներ հրահրելու անհրաժեշտությունը: Այս պահին լրացրեք այն առաջադրանքները, որոնք անհապաղ պետք է ժամանակին համաժամեցվեն:
Քայլ 5
Ստուգեք ցիկլի յուրաքանչյուր անցում `իր աշխատանքը ավարտելու անհրաժեշտության համար: Հիշեք, որ ծրագիրը պետք է լինի մոդուլային, քանի որ համակարգիչների մեծ մասը բաղկացած է մոդուլներից, և տիպիկ էմուլյատորը, հնարավորության դեպքում, պետք է լինի նույնը, ինչ բուն համակարգը: Սա կապահովի ծրագրի ավելի արագ և հեշտ կարգաբերում, և դուք կկարողանաք օգտագործել նույն մոդուլները տարբեր emulators- ի համար, քանի որ շատ համակարգիչներ հիմնված են պրոցեսորների կամ վիդեո պրոցեսորների նույն մոդելների վրա: