PL/CBMBASIC es una extensión procedural para PostgreSQL que ejecuta cuerpos de función en BASIC V2 del Commodore 64, el intérprete original de Microsoft/Commodore de 1982. Para ello incorpora al proceso del backend la recompilación estática del código C realizada por Michael Steil en su proyecto cbmbasic, derivada de la ROM 6502 original.
Cada llamada a una función arranca un ciclo de encendido completo sobre una matriz de 64 KB de RAM emulada: registros a cero, CPU reiniciada y reentrada al ROM en la dirección $E394. La operación completa dura entre 15 y 20 microsegundos, unas mil veces más rápido que el hardware real.
La extensión exige sintaxis clásica con números de línea obligatorios; los argumentos se inyectan como asignaciones BASIC en las líneas 0 a 9 antes de ejecutar el código del usuario. Incorpora además un validador que replica las restricciones históricas del BASIC V2 —variables como TOTAL bloqueadas por contener la palabra clave TO, primeros dos caracteres significativos, identificadores reservados TI y ST— y las devuelve como errores en tiempo de CREATE FUNCTION.
Los parámetros OUT e INOUT se recuperan recorriendo la tabla de variables simples del propio intérprete, entre VARTAB y ARYTAB. El proyecto incluye una regresión y código disponible en GitHub.
El artículo explica también cómo se mapea el dispositivo 8 —la disquetera— a la base de datos: OPEN abre un canal sobre una sentencia SQL ejecutada vía SPI dentro de la transacción, los valores se devuelven registro a registro terminados en CR y ST recoge el bit de EOF como en una 1541. La dirección secundaria 15 actúa como canal de comandos, con PRINT# enviando SQL y un estado 0,OK,,0 en homenaje al protocolo original. Los errores se capturan mediante el vector ERROR del intérprete y los tiempos de espera se gestionan parchando la rutina RUN/STOP para invocar CHECK_FOR_INTERRUPTS, lo que permite terminar un 10 GOTO 10 con statement_timeout.
El autor compara el rendimiento con PL/Python: el segundo es entre 6 y 19 veces más rápido según la carga, pero el BASIC emulado alcanza alrededor de un millón de sentencias por segundo, frente a las mil del hardware original. La extensión es no confiable y requiere superusuario.
