stringtranslate.com

emulador mac 68k

El emulador Mac 68k [1] es un emulador de software integrado en todas las versiones del Mac OS clásico para PowerPC . Este emulador permitía ejecutar aplicaciones y código de sistema que se escribieron originalmente para los modelos Macintosh basados ​​en 680x0 . Con algunas excepciones, en particular RAM Doubler de Connectix , el emulador ejecutó todo el software sin ningún impacto notable más que un menor rendimiento en relación con el mismo programa cuando se compiló para PowerPC.

Orígenes

La primera versión fue escrita por Gary Davidian, quien la había creado originalmente para su uso en la CPU Motorola 88000 , utilizada en el primer intento fallido de Apple en una plataforma de destino RISC . [2] [3] Eric Traut desarrolló una versión posterior, que utiliza recompilación dinámica , quien luego trabajó en exitosos proyectos de emulación en Connectix , como Virtual Game Station y Virtual PC . Antes de la llegada de Traut allí, Connectix había lanzado Speed ​​Doubler, que incluía un emulador PowerPC 68k aún más rápido.

Implementación

Todas las versiones de este emulador emularon el subconjunto "usuario" del conjunto de instrucciones 68EC040 con un marco de pila de excepción 68020/68030. Los documentos de los desarrolladores de Apple indican que el emulador proporcionaba un entorno operativo muy parecido al del Macintosh Centris 610 , un sistema basado en el microprocesador Motorola 68LC040 . [4] Las primeras versiones lo emularon decodificando cada instrucción y ejecutando inmediatamente una serie de instrucciones PowerPC equivalentes. Para los PCI PowerMac , se utilizó el emulador de recompilación dinámica para mejorar el rendimiento. La recompilación dinámica funciona "recompilando" secciones comunes del código en secuencias más rápidas, nativas de PowerPC, que se almacenaron en caché localmente. El emulador podría reconocer la misma secuencia de código 680x0 y ejecutar el código PowerPC previamente almacenado en caché para evitar volver a realizar la traducción. En teoría, este emulador era capaz de emular código 680x0 más rápido que cualquier 680x0 real capaz de ejecutarlo. El 68LC040 no tenía instrucciones de punto flotante, lo que hace que esta hazaña sea un poco más simple pero no menos impresionante.

Una de las razones por las que esta emulación tuvo tanto éxito es que muchas de las API para Mac OS se implementaron originalmente como trampas en el procesador 680x0; por lo tanto, llamar a una API en realidad fue reconocido por el 680x0 como el equivalente a una condición de error, lo que haría que manejara ese error a través de uno de sus vectores de hardware. A su vez, este vector buscaría y ejecutaría la rutina del sistema operativo desde la ROM o la RAM. En el emulador, dichas trampas podían ser reemplazadas por código nativo de PowerPC, por lo que el único código que se emulaba era la propia aplicación, y cualquier API del sistema al que llamara podía acelerarse con código nativo de PowerPC. Esto también le dio tiempo a Apple para migrar el sistema operativo al PowerPC. Al principio, sólo los aspectos críticos en el tiempo se reescribieron en código nativo, dejando gran parte del sistema operativo emulado. Poco a poco, la mayor parte del sistema operativo se fue reescribiendo para que fuera nativo, por lo que el sistema operativo se volvió más rápido con el tiempo.

Para el programador, la transición al PowerPC fue bastante sencilla, porque el emulador se iniciaba y detenía automáticamente. Esto se logró utilizando un nuevo tipo de puntero llamado Puntero de procedimiento universal (UPP). Para código de 68k, este puntero parecía ser un puntero ordinario a código y podía usarse como tal. Sin embargo, en realidad conducía a una estructura de datos que contenía una instrucción trampa especial y banderas que indicaban la arquitectura del conjunto de instrucciones (ISA) del código llamado. Desde el código PowerPC, este UPP podría pasarse a la función CallUniversalProc( ) para llamarlo. Luego, el emulador de 68k se ocupó de detalles como presentar los parámetros pasados ​​en el orden correcto para la ISA en cuestión, así como iniciar y detener el emulador según fuera necesario. Los compiladores para Mac OS crearon dichos UPP automáticamente cuando se utilizaron las macros adecuadas , y las bibliotecas del sistema PowerPC contenían códigos auxiliares nativos para llamar de forma transparente a funciones nativas o de 68k según fuera necesario. Esto significaba que lidiar con la arquitectura dual requería muy poco trabajo para el programador y, al igual que el sistema operativo, las aplicaciones mismas podían mezclar y combinar código 680x0 y PowerPC con bastante facilidad.

Estado actual

Debido a que estaba integrado en todas las versiones PowerPC del Mac OS clásico , el emulador también formaba parte del entorno Clásico de Mac OS X. Por lo tanto, los emuladores PowerPC Macintosh como SheepShaver también utilizan el emulador cuando ejecutan el sistema operativo Mac clásico. Mac OS X nativo fuera de Classic nunca usó el emulador.

Ver también

Referencias

  1. ^ "PowerBook: información sobre ROM en RAM". Soporte de Apple . 20 de febrero de 2012.
  2. ^ "El triunfo de PowerPC" . Consultado el 1 de julio de 2011 .
  3. ^ "Power Computing: ¿contraatacar por Mac o robar clientes de Apple?". Mac de gama baja . Archivado desde el original el 26 de marzo de 2012 . Consultado el 1 de julio de 2011 .
  4. ^ "El emulador 68LC040 (IM: PS)". Desarrollador de Apple . 3 de julio de 1996 . Consultado el 1 de julio de 2011 .