Mac 68K: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
m Nuova pagina: {{WIP|hellis}} Il '''Mac 68K''' era emulatore software incluso in tutte le versioni di Mac OS per i processori PowerPC. L'emulatore permetteva l'esecuzi...
 
mNessun oggetto della modifica
Riga 1:
{{WIP|hellis}}
Il '''Mac 68K''' era [[emulatore]] software incluso in tutte le versioni di [[Mac OS]] per i processori [[PowerPC]]. L'emulatore permetteva l'esecuzione delle applicazioni e delle componenti del sistema operativo scritte in codice [[Motorola 68000|68000]] sui processori PowerPC. L'emulatore era totalmente trasparente per l'utente e quasi trasparente per il programmatore. Inizialmente l'emulatore venne scritto da Gary Davidian per i processori 88000, i processori RISC che inizialmente Apple voleva utilizzare per sostituire i processori 68000. In seguito l'emulatore venne scritto per PowerPC e venne utilizzata la [[ricompilazione dinamica]] al fine di migliorarne le prestazioni, questa versione venne scritta da [[Eric Traut]] che in seguitò lavoro allo sviluppo della [[Virtual Game Station]] e dell'emulatore [[Virtual PC]].
 
Tutte le versione emulavano le istruzioni utente del [[Motorola 68EC040]] e il gestore delle eccezioni dei processori 68020/68030. La macchina emulata era simile al [[Centris 610]], un computer basato su Motorola 68EC040.<ref>[http://developer.apple.com/documentation/mac/PPCSoftware/PPCSoftware-13.html Documentazione software]</ref> La prima versione prelevava le singole istruzioni 68000 e le convertiva in equivalenti istruzioni PowerPC, in seguito con i sistemi PCI PowerMac venne presentata una nuova versione dotata di ricompilazione dinamica del software. La ricompilazione dinamica analizzava intere sezioni di codice e le convertiva in codice PowerPC. Questi frammenti di codice venivano tenuti in memoria al fine di poterli riutilizzare direttamente senza ricompilazione in caso fossero stati nuovamente necessari. Questo permetteva all'emulatore di essere anche più veloce di un'equivalente processore 68EC040.
 
L'emulatore era inserito all'interno del sistema operativo a un livello molto basso. Questi si era reso necessario anche perché buona parte del sistema operativo quando vennero presentate le macchine PowerPC non era stato convertito in codice PowerPC ma era rimasto in codice 680X0. Quando un programma chiamava un'[[API]] non convertita il processore PowerPC generava un'eccezione che attivava l'emulatore che provvedeva a eseguire l'API.
Il sistema operativo venne convertito con una certa lentezza da Apple in codice PowerPC, questo perché il sistema operativo non era stato scritto in modo da essere portabile e quindi buona parte del sistema operativo in realtà venne riscritto totalmente. Questo portava il sistema operativi a diventare più veloce mano a mano che la conversione dello stesso proseguiva.
 
Per il programmatore la transizione all'architettura PowerPC fu quasi indolore, l'emulatore si attivava e si bloccava in modo trasparente non interferendo con i normali flussi dei programmi. Per la transizione venne sviluppato un nuovo tipo di puntatore, chiamato Universal Procedure Pointer (UPP). Per il codice 680X0 questo era un normale puntatore ma in realtà questo indirizzava una speciale struttura dati, questa serviva per determinare se il codice da eseguire era PowerPC o 680X0 e questa struttura dati veniva utilizzata per avviare il corretto codice dato che le applicazioni scritte durante il periodo di transizioni contenevano al loro interno codice PowerPC e codice 680X0. Questo permetteva anche di miscelare codice 680X0 e PowerPC nella stessa applicazione, il programmatore quindi poteva convertire le applicazioni una componente per volta suddividendo il lavoro in più fasi.
One reason that this emulation was so successful is that many of the [[API]]s for the Mac OS were originally implemented as traps on the 680x0 processor - calling an API actually was recognised by the 680x0 as the equivalent of an error condition, which would cause it to handle that error through one of its hardware vectors, which in turn would look up and run the operating system routine from ROM or RAM. In the emulator, such traps could be replaced by native PowerPC code, so the only code being emulated was the application itself - any system API it called could be accelerated with native PowerPC code. It also allowed Apple time to port the OS to the PowerPC - at first only time critical aspects were rewritten in native code, leaving much of the OS emulated. Gradually most of the OS was rewritten to be native, so the OS got faster over time.
 
L'emulatore è stato integrato all'interno dell'ambiente [[Classic]] del [[Max OS X]] ma con la transizione all'architettura Intel questa componente è stata rimossa e con essa anche l'emulatore.
For the programmer, the transition to the PowerPC was made fairly painless, as the emulator was started and stopped automatically. This was achieved using a new type of [[pointer]] called a Universal Procedure Pointer (UPP). For 68k code, this pointer appeared and used as an ordinary pointer to code, but actually led to a special data structure, which contained a special trap instruction and flags indicating the instruction set architecture (ISA) of the called code, and from PowerPC code, can be passed to the CallUniversalProc() function to call it. The 68k emulator then dealt with details such as presenting passed parameters in the right order for the ISA in question, as well as starting and stopping the emulator as required. The compilers for Mac OS created such UPPs automatically when the proper [[Macro (computer science)|macros]] were used, and the PowerPC system libraries contained native stubs to transparently call through to native or still-68k functions as needed, so dealing with the dual architecture required very little work for the programmer. And just like the OS, applications themselves could mix and match 680x0 and PowerPC code fairly easily.
 
== Voci correlate ==
The emulator is no longer part of [[Mac OS X]], though it remains as an integral part of the [[Classic (Mac OS X)|Classic environment]].
* [[Rosetta (software)|Rosetta]]
 
== See also ==
* [[Mac OS nanokernel]]
* [[Rosetta (software)|Rosetta]], a similar feature in Mac OS X that translates [[PowerPC]] instructions to [[x86]] instructions
 
[[Category:Mac OS]]
[[Categoryen:Mac OS68K emulation softwareemulator]]
[[Category:Macintosh platform emulators]]
[[Category:68k emulators]]