Кіріспе

Mac 68k эмуляторы – PowerPC үшін Mac OS классикалық жүйесінің барлық нұсқаларына кіріктірілген бағдарламалық эмулятор. Бұл эмулятор бастапқыда 680x0 процессорларында жұмыс ілген Macintosh модельдері үшін жазылған қосымшаларды және жүйелік кодты іске қосуға мүмкіндік берді. Connectix-тің RAM Doubler сияқты бірнеше ерекшеліктерді қоспағанда, эмулятор барлық бағдарламаларды PowerPC үшін компиляцияланған нұсқаларымен салыстырғанда өнімділікті азайтудан басқа ешқандай көзге көрінбейтін әсерсіз іске қосты.

Шығу тегі

Бірінші нұсқаны Гари Дэвидян жазды, ол бастапқыда Motorola 88000 процессоры үшін жасаған, ол Apple компаниясының RISC платформасын құрудағы алғашқы сәтсіз талпынысында қолданылған. Кейінірек Эрик Траут динамикалық қайта компиляцияны пайдалана отырып, жаңа нұсқасын жасады, ол кейін Connectix компаниясында Virtual Game Station және Virtual PC сияқты табысты эмуляция жобаларында жұмыс істеді. Траут келгенге дейін Connectix Speed Doubler бағдарламасын шығарды, оның құрамында одан да жылдам PowerPC 68k эмуляторы болды.

Іске асыру

Бұл эмулятордың барлық нұсқалары 68EC040 нұсқаулар жиынтығының "пайдаланушы" кіші жиынтығын 68020/68030 ерекшелік стек фреймімен эмуляциялады. Apple әзірлеушілер құжаттарында эмулятордың Macintosh Centris 610 операциялық ортасына ең жақын, Motorola 68LC040 микропроцессоры негізінде құрылған жүйеге ұқсас екендігі көрсетілген. Алғашқы нұсқалар әрбір нұсқауды декодтап, бірден PowerPC нұсқауларының тізбесін орындау арқылы эмуляциялады. PCI PowerMac үшін өнімділікті арттыру мақсатында динамикалық қайта құрастыру эмуляторы қолданылды. Динамикалық қайта құрастыру кодтың жиі кездесетін бөлімдерін жылдам, PowerPC-ге арналған тізбектерге "қайта құрастыру" арқылы жұмыс істейді, олар жергілікті кэште сақталады. Эмулятор 680x0 кодының бірдей тізбесін тани алады және аударманы қайта жасау қажеттігін болдырмау үшін бұрын сақталған PowerPC кодын орындай алады. Теориялық тұрғыдан алғанда, бұл эмулятор 680x0 кодын кез келген нақты 680x0 процессордан жылдам эмуляциялай алатын еді. 68LC040 процессорда қозғалатын нүктелік есептеулерге арналған нұсқаулар болмағандықтан, бұл жетістік сәл оңай болды, бірақ бәрібір әсерлі. Бұл эмуляцияның сәтті болуының бір себебі - Mac OS жүйесінің көптеген API-лері бастапқыда 680x0 процессорында "тұзақтар" ретінде жүзеге асырылған; сондықтан API-ді шақыру 680x0 үшін қате жағдайға тең болып танылды, бұл аппараттық векторлардың бірі арқылы қатені өңдеуге әкелді. Бұл вектор ROM немесе RAM-нан операциялық жүйе процедурасын іздеп, орындайтын еді. Эмуляторда мұндай тұзақтарды PowerPC-ге арналған түпкілікті кодпен алмастыруға болады, сондықтан эмуляцияланатын жалғыз код - қолданбаның өзі, ал оның шақырған кез келген жүйелік API-і PowerPC-ге арналған түпкілікті кодпен үдетілуі мүмкін. Бұл Apple компаниясына операциялық жүйені PowerPC-ге көшіруге уақыт берді. Бастапқыда тек өте маңызды бөлімдері түпкілікті кодқа қайта жазылды, ал операциялық жүйенің көп бөлігі эмуляцияланды. Бірте-бірте операциялық жүйенің көп бөлігі түпкілікті кодқа қайта жазылды, сондықтан операциялық жүйе уақыт өте жылдамдады. Бағдарламашы үшін PowerPC-ге көшу оңай болды, өйткені эмулятор автоматты түрде іске қосылып, тоқтатылды. Бұл жаңа типтегі көрсеткіштің көмегімен іске асырылды, ол Универсалды Процедуралық Көрсеткіш (UPP) деп аталды. 68k коды үшін бұл көрсеткіш кодқа қарапайым көрсеткіш ретінде көрінетін және осылай қолданылатын еді. Алайда, ол шын мәнінде арнайы тұзақ нұсқауын және шақырылған кодтың нұсқаулар жиынтығы архитектурасын (ISA) көрсететін жалаушаларды қамтитын дерек құрылымын қамтыды. PowerPC кодынан бұл UPP CallUniversalProc() функциясына беріліп, шақырылуы мүмкін еді. 68k эмуляторы сұраныс бойынша ISA үшін дұрыс ретпен берілген параметрлерді ұсыну және қажет болған жағдайда эмуляторды іске қосу және тоқтату сияқты егжей-тегжейлі мәселелермен айналысты. Mac OS компиляторлары тиісті макростар қолданылған кезде мұндай UPP-терді автоматты түрде жасады, ал PowerPC жүйелік кітапханаларында қажеттілікке қарай түпкілікті немесе әлі 68k функцияларын ашық түрде шақыруға арналған түпкілікті шұңқырлар болды. Бұл екі архитектурамен жұмыс істеу бағдарламашы үшін өте аз жұмыс талап етті және операциялық жүйе сияқты, қолданбалар 680x0 және PowerPC кодын оңай араластыра алатын еді.

Ағымдағы жағдай

Ол классикалық Mac OS-тің барлық PowerPC нұсқаларына кіріктірілгендіктен, эмулятор Mac OS X-тегі Classic ортасының да бөлігі болды. Сондықтан, SheepShaver сияқты PowerPC Macintosh эмуляторлары классикалық Mac OS-ті іске қосқанда осы эмуляторды пайдаланады. Classic режимінен тыс Mac OS X-тің түпнұсқа нұсқалары эмуляторды ешқашан қолданған жоқ.