semu-c64 - Ejecutar Linux en una Commodore C-64
(github.com/onnokort)- Un proyecto que porta el emulador minimalista RISC-V32 semu a la C-64 para ejecutar Linux en una Commodore C-64
- Como los 64 KiB de memoria no alcanzan para contener la configuración completa, se necesita una RAM Expansion Unit (REU), y la velocidad de ejecución es extremadamente lenta, al punto de describirse como “extremely slowly”
- El archivo ejecutable
semugenerado es un emulador RISCV32 de propósito general y asume que la REU está mapeada en el rango de direcciones de0x00000000a0x01000000 - Para ejecutar Linux se usan emulación de memoria virtual y una MMU, y la UART emulada maneja la conversión entre mayúsculas y minúsculas de PETSCII y ASCII
- La compilación se realiza con
makey requieremos-c64-clang - Para ejecutarlo en VICE, se usan el archivo
.d64que contiene el ejecutable compiladosemuyreufile.linux, y después hay que activar el RAM Expansion Module y seleccionar un tamaño de 16MiB - En la C-64, la ejecución se hace ingresando
LOAD "SEMU",8,1y luegorun, y según el README el arranque requiere un largo tiempo de espera - El binario
semupara PC puede cargarreufile.linuxcon la opción-k, y puede usarse para obtener una secuencia de arranque determinista hasta la primera pulsación de tecla - La función de persistencia guarda el estado del emulador para cargar más rápido un Linux ya iniciado, y carga desde la dirección REU
0xfff000los registros de CPU RISC-V, la UART y el estado del controlador de interrupciones - Las releases se consideran “highly experimental” y se indica explícitamente que no son aptas para trabajo en producción
1 comentarios
Comentarios en Hacker News
Onno Kortman compiló de forma cruzada semu, un emulador RISC-V minimalista, para MOS 6502 usando llvm-mos, un port de LLVM para 6502, y logró ejecutar Linux en una Commodore 64
Kortman escribió: “Incluso en el ‘warp mode’ de VICE, sacar la captura de pantalla tomó horas. En el estado actual, una C64 real probablemente podría arrancar Linux en alrededor de una semana”
Si se escribiera un emulador de RISC-V en 6502 nativo, quizá Linux podría arrancar en hardware real en menos de un día y no en una semana. Uno se pregunta cuántas vidas salvaría eso
https://www.folklore.org/StoryView.py?story=Saving_Lives.txt
https://dmitry.gr/?r=05.Projects&proj=07.%20Linux%20on%208bi... usó un emulador ARMv5 sobre un AVR de 8 bits, pero este le gana en rareza genial
Está genial, pero mi primera reacción fue: “¡No hay forma de que eso quepa en 64 KB de RAM!”, y en efecto no cabe
Hace falta una REU de 16 MB. En esa época las REU para C64 eran de 256 KB y 512 KB, y como los esquemas están publicados, las réplicas suelen ser de ese tipo
A fines de los 90 también hubo una “expansión” para C64 con una CPU nueva, la SuperCPU (65816), compatible en código con la CPU original, y probablemente ese dispositivo sí permitía hasta 16 MB
Después aparecieron reimplementaciones basadas en FPGA y también REU de 16 MB. Los esquemas originales de la SuperCPU se perdieron, y aunque dicen que hoy se pueden comprar placas de expansión basadas en FPGA por varios cientos de euros, no conozco a nadie que realmente haya comprado una
Así que, aunque es un logro técnico muy pulcro, decir que “corre en una C64” se siente un poco como decir “corrí Doom 3 en una 386, salvo que esa 386 es una tarjeta PCI de una PC moderna”
Si no puedo ejecutarlo en mi C64 con hardware que existía en esa época o que razonablemente se podía construir en ese entonces, me cuesta llamarlo “corriendo en una C64”
Volviendo a la REU, también me pregunto por qué todavía no hay esquemas abiertos. En eBay abundan chips SRAM baratos, así que parecería fácil de hacer, pero en la práctica no es tan simple porque hay que emular dos componentes —la SuperCPU y el controlador DMA— en una FPGA bastante grande
Si aparecen FPGA más baratas o microcontroladores con capacidades parecidas a una FPGA, quizá alguien haga una SuperCPU open source. Por ahora, todos los usuarios que he visto parecen usar emulación. La emulación es muy útil para desarrollo, pero la diversión de mi hobby retro está sobre todo en correr las cosas en hardware original
Habría costado una fortuna, pero no había ningún impedimento técnico. Creo que estás confundiendo la SuperCPU con una REU común
Una REU no es más que un bloque de RAM y un ASIC que se comunica con la C64 para guardar o restaurar bancos de RAM; no tiene CPU. Como la 6502 no puede direccionar directamente más de 64 KB, lo que hace es indicarle al sistema que reemplace la RAM
La SuperCPU (65816) sí puede direccionar directamente 16 MB, pero es otra cosa. El proyecto del post original corre en una C64 base y con la CPU base de la C64; solo que necesita una cantidad descomunal de RAM que en esa época habría costado lo mismo que una casa
O si incluso eso ya choca con los límites del purismo de la emulación
Hoy en día parece que se podría meter una 386, una 486, una Pentium y otros SoC más en una sola tarjeta PCIe, incluso con refrigeración pasiva
No es sobre Linux, pero últimamente he estado probando accesorios recientes para C64
Probé Kung Fu Flash, que es un cartucho barato definido por software hecho con un STM32 y puede hacer casi de todo. Lo compré para intentar recrear la experiencia de desarrollo que veía en “8-bit show and tell”; puede emular “Super Snapshot”, pero no la REU. Es muy bueno para probar rápido mucho software y juegos de C64
https://8bithardware.wixsite.com/website/post/kung-fu-flash
https://github.com/KimJorgensen/KungFuFlash
También tengo un SD2IEC, aunque aprendí que debí haber comprado una variante con un socket DIN adicional. Está bien, pero nunca me gustó mucho el DOS original de la C64, y este dispositivo refuerza esa sensación. Para montar una imagen de disco D64 hay que escribir
OPEN1,8,15,\"CD:MYIMAGE.D64\":CLOSE1, lo cual no está muy buenoJiffyDOS, una ROM de reemplazo para C64, mejora esto, además de ser más rápida e incluir un wedge de DOS siempre disponible. Ya pedí una y tengo curiosidad por probarla con una unidad 1541 real
Lo que me metió en todo esto recientemente fue el cartucho “Penultimate +2” para VIC-20
https://www.youtube.com/watch?v=eNGyneXHKJQ
Básicamente compré una VIC-20 solo para probar este cartucho
Es una demostración de la equivalencia de Turing. Si el tiempo no fuera un problema, cualquier computadora Turing-completa puede hacer lo que hace cualquier otra computadora Turing-completa.
Entonces surge la duda: ¿cuál sería el hardware más antiguo que aún puede arrancar Linux moderno y seguir siendo usable en el día a día?
Se puede armar el sistema más liviano y rápido posible para que funcione bien incluso en una máquina lenta, pero el internet actual no perdona.
No sería muy rápido, pero con un poco de paciencia no parecería que el hardware te esté frenando. Si además le pones una GPU con decodificación de video por hardware, tal vez hasta YouTube se pueda ver a una calidad mejor que la de papa.
Me gustaría apuntar a algo de la era Pentium 4 / Athlon XP. Según la documentación, el Pentium original ya no tiene soporte, así que si de verdad quieres sufrir, quizá podrías retroceder hasta un Pentium II.
¿Esto es distinto de LUnix?
https://en.wikipedia.org/wiki/LUnix
Esto, en cambio, consiste en ejecutar un emulador de RISC-V en el C64, y sobre ese emulador simular el arranque de Linux.
Estrictamente hablando, Linux no corre directamente en el C64.
El C64 está emulando un entorno RISC-V, y Linux se ejecuta sobre eso. Sigue siendo impresionante, por supuesto, pero la distinción conceptual importa.
Me pregunto si sería posible hacerlo funcionar no con una REU, sino usando decenas de disquetes como si fueran RAM.
¿Qué tal si se le pide al usuario que cambie el disco cada vez que haga falta? Si a alguien le sobran unos meses o unos años, me gustaría ver eso en hardware real como un timelapse.
Si le agregas más RAM a una Commodore 64, ¿sigue siendo una Commodore 64?
Además, también es posible expandirla hasta una REU de 2 MB para C64. Ver https://www.neperos.com/article/rlut8ce90fbb7701.
Tener 2 MB en una C64 es bastante “legítimo”.
La memoria máxima direccionable con una REU de C64 es de 16 MB.
Hace poco conseguí una TRS-80 Model 4 completamente funcional y seguido me imagino poniéndole algo vagamente parecido a Unix.
Esa fantasía sigue viva.
Si empiezas por ahí, seguro encuentras una madriguera de conejo bastante profunda.