home.social

#buddhabrot — Public Fediverse posts

Live and recent posts from across the Fediverse tagged #buddhabrot, aggregated by home.social.

  1. Avances de Emu68 con soporte PowerPC

    Michal Schulz ha publicado una nueva actualización de desarrollo en la que aborda una de las preguntas más frecuentes entre los usuarios de Emu68: si sería posible ejecutar código ARM directamente a través del sistema. Según explica, siempre respondió que no, principalmente para evitar dividir aún más a la comunidad Amiga y generar ejecutables exclusivos de Emu68.

    Sin embargo, reconoce que existen ya placas con CPU ARM y que, si en algún momento se abriese esa posibilidad, lo ideal sería hacerlo de manera abierta. Schulz menciona incluso variantes potenciales como AArch32, AArch64, el modo Thumb2 y las configuraciones little o big endian, pero finalmente concluye que el panorama ARM no es tan estable como podría parecer.

    En cambio, ha decidido avanzar en otra dirección: añadir soporte PowerPC a Emu68. Aclara que el nombre se mantiene —no se abandona el M68k, sino que simplemente se añade PPC—. La idea, comenta, surgió hace años y se ha ido consolidando con el tiempo, ya que ambas arquitecturas son RISC y comparten ciertos principios.

    Para ello, Schulz tomó los componentes principales de Emu68 —el traductor, las cachés y el bucle principal JIT— y comenzó a experimentar. En poco tiempo logró ejecutar cerca del 90 % de las instrucciones enteras del PowerPC, condensando todo el traductor en unas 7.000 líneas de código C++.

    Durante las pruebas iniciales obtuvo resultados notables: alrededor de 3.600 MIPS, con un rendimiento medio de 1,8 instrucciones PowerPC por ciclo ARM, escribiendo en memoria cacheada con operaciones de 16 bits.

    Schulz explica que estos valores se deben a la eficiencia del compilador GCC al generar código PowerPC, optimizado para aprovechar los registros disponibles en una arquitectura load/store. Dado que Emu68 utiliza un JIT sencillo, evita optimizaciones pesadas, pero en este caso no son necesarias porque el propio código PowerPC ya está bien organizado.

    El nuevo traductor PowerPC funciona de forma completamente independiente del núcleo M68k, ejecutándose en un núcleo de CPU separado. Esto garantiza que el rendimiento del 68k no se vea afectado. Si el usuario no necesita PowerPC, simplemente puede ignorarlo: el núcleo adicional permanece inactivo.

    Schulz justifica esta decisión explicando que ejecutar ambas arquitecturas en el mismo núcleo provocaría pérdidas de rendimiento y complicaciones de contexto. Detalla además cómo mapea los registros: los 16 enteros y 14 de coma flotante más usados se mantienen en registros AArch64, mientras que los demás se cargan dinámicamente bajo una política LRU. Los registros enteros temporales se almacenan en espacios SIMD, lo que permite cruces rápidos con una penalización de solo 2-3 ciclos.

    También señala que el cambio de contexto, un problema histórico en las aceleradoras PPC reales debido a la falta de coherencia entre cachés, se simplifica enormemente bajo Emu68, ya que los núcleos AArch64 mantienen coherencia automática. En la práctica, basta con una barrera de memoria para sincronizar los datos.

    Actualmente, la parte entera del PowerPC está prácticamente completa. El emulador soporta interrupciones entre ambos lados (M68k y PPC) y dispone de un ROM propio que se inicia junto con el sistema, esperando a su compañera powerpc.library, aún en desarrollo. Esta librería busca compatibilidad con WarpOS tanto en API como en ABI, en colaboración con Hedeon, autor de hardware PowerPC PCI como las tarjetas Sonnet Crescendo 7200.

    El ROM incluye un programador específico para tareas PPC, permitiendo que se ejecuten en paralelo con los procesos M68k. Aunque la emulación de coma flotante está en una fase temprana, ya se han realizado pruebas con una versión adaptada del generador de fractales Buddhabrot, que ofrece tiempos de ejecución significativamente menores que en M68k, así como una mejora aproximada de 2× en pruebas Dhrystone 2.1.

    Schulz concluye mencionando que este texto debía formar parte de la tercera entrega de “What’s new in 1.1”, pero el tema acabó creciendo más de lo previsto. Añade que se encuentra agotado tras varios resfriados y que necesita un descanso antes de seguir avanzando. Anticipa que en los próximos días ofrecerá más información sobre Emu68 1.1, el soporte PPC, el encuentro Amiga40 y un cambio técnico importante: la migración progresiva del proyecto hacia C++.

    #68k #AArch64 #Amiga40 #amigaos #Buddhabrot #CCommodoreAmiga #Dhrystone #emu68 #Hedeon #jit #M68k #MichalSchulz #pistorm #powerpc #ppc #RISC #warpos