jdBasic is a BASIC interpreter and has a LLVM native compiler.
You can run it as a MCP server. The video is showing ai-pair coding with Claude.
While my mini shooter is running you can press F6 and the VM will pause.
When you prompt claude to change the code, it sends it via the
jdBasic MCP Server to the running interpreter.
Changes shown in the video:
I prompt: "Turn the ship red and give me 100 lives".
Claude changes 2 interpreter vars using the mcp command jdb_eval:
like: g_palette{"player"} = [255, 80, 80] : lives = 100
I prompt: "Move the shield bar 20 pixels up"
This needs source code edits and a recompile.
The mcp command jdb_recompile compiles the code and set the program
pointer at the right opcode, before the change happend.
Claude resumes and everything is still at the same position and
every var has the same value, but the rendering loop draws with the changed
sub.
I build jdBasic because I missed the easyness of VB6. VB6 could pause a
running program, I can edit the code and form and everthing is continuing.
jdBasic was always meant to be a dirty little language that still
do this. Using AI to code needed an MCP server included in jdBasic.
Inside the game is a little jdBasic IMPORT for the MCP handling and
only one loc in the rendering loop.
The video was recorded on Windows, but jdBasic runs on linux and MacOS, too.
A light version is available as a WebAssembly build.
What else can do this today? No module reloading, but an external process
holding a handle to the paused interpreter, reading/changing actual variables.
Replacing/Changing code without messing the program state.
atomijd•3h ago
While my mini shooter is running you can press F6 and the VM will pause. When you prompt claude to change the code, it sends it via the jdBasic MCP Server to the running interpreter.
Changes shown in the video:
I prompt: "Turn the ship red and give me 100 lives". Claude changes 2 interpreter vars using the mcp command jdb_eval: like: g_palette{"player"} = [255, 80, 80] : lives = 100
I prompt: "Move the shield bar 20 pixels up" This needs source code edits and a recompile. The mcp command jdb_recompile compiles the code and set the program pointer at the right opcode, before the change happend. Claude resumes and everything is still at the same position and every var has the same value, but the rendering loop draws with the changed sub.
I build jdBasic because I missed the easyness of VB6. VB6 could pause a running program, I can edit the code and form and everthing is continuing. jdBasic was always meant to be a dirty little language that still do this. Using AI to code needed an MCP server included in jdBasic.
Inside the game is a little jdBasic IMPORT for the MCP handling and only one loc in the rendering loop.
My Blog: https://www.atomijd.onl/blog-post-19.html Video: https://youtu.be/s-BRaSy1EQo Windows zip, shooter and runtime, nothing to install: https://github.com/AtomiJD/jdBasic/releases/latest
The video was recorded on Windows, but jdBasic runs on linux and MacOS, too. A light version is available as a WebAssembly build.
What else can do this today? No module reloading, but an external process holding a handle to the paused interpreter, reading/changing actual variables. Replacing/Changing code without messing the program state.