Los emuladores son escogidos al azar, no tienen importancia para el tema que se va a tratar.
Las mediciones, no son precisas, ya que no hace falta medir a máxima precisión, ya que con una mirada rápida a los números, ya se ve el alcance.
Si probamos el emulador Vice ver 3.2 rev 34843M de 32 bits en Windows, que está muy bien, con las opciones básicas del emulador C64 y con una resolución de 640x480, nos da un consumo de 37 MB de RAM.
Si probamos el emulador DSP ver 0.21f de 32 bits en Windows (desarrollador Español Leniad), que está muy bien, disponiendo de código fuente para Lazarus (Pascal), nos da un consumo de 100 MB de RAM.
Ahora probamos con el código del Emudore de Mario Ballano (está muy bien), el cual estoy portando, para ESP32. El código original, no dispone de emulación SID ni salida de audio, así que se lo he añadido, por lo que consume aún más RAM que el original. Estaba preparado para SDL2, de manera, que llega a consumir 32 MB de RAM en Windows con 640x480:
Aplicando podados, convirtiendo todo a C, así como a SDL1, me queda con 640x480 y con sonido, en 3.6 MB de RAM:
Se puede ver, como la versión final del emudore respecto a la original de SDL2, consume 8 veces menos de RAM, así como 10 veces menos respecto al Vice y 27 veces respecto a DSP. Y lo más importante, es que aún se puede seguir podando más.
Se ha escogido sólo un recurso básico como es la RAM, y se puede ver la mejora, eliminando cosas como librerías, funciones, orientación a objetos, cambio en tipo de datos, eliminación de código de tipo Dali y Da Vinci , etc...
La mayoría de las máquinas a emular, tienen 16 colores (4 bits), así que con trabajar con 8 bits de SDL y paleta, ya nos ahorramos recursos, frente a texturas de SDL2 o uso de canal alpha en SDL1, que serían entre 3 y 4 veces más el consumo de RAM.
Código: Seleccionar todo
256 colores - 1 byte - 8 bits
RGB - 3 bytes - 24 bits
ARGB - 4 bytes - 32 bits
640x480x4 = 153600 bytes
640x480x8 = 307200 bytes
640x480x24 = 921600 bytes
640x480x32 = 1228800 bytes
Con esto queda claro que en el desarrollo actual de emulatas se estan desperdiciando recursos, que eso, no quiere decir que este mal, dado que en PC se dispone de ellos.
En algunos emulatas, he llegado a ver el uso de diccionarios con librerías adicionales, como STL para el conteo de estados de CPU, que con un simple array, ya sirve.
Todo esto, hay que intentar reducirlo en dispositivos como el ESP32.