用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/mattgodbolt/jsbeeb --skill emulator命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
基于 SOC 职业分类
正在显示 SKILL.md
| name | emulator |
| description | Boot and interact with a headless BBC Micro or Acorn Atom emulator for testing |
| allowed-tools | Bash, Read |
Boot a BBC Micro or Acorn Atom emulator and interact with it via typed commands.
Uses MachineSession from src/machine-session.js.
Run Node.js one-liners from the jsbeeb project root:
import { MachineSession } from "./src/machine-session.js";
const session = new MachineSession("MODEL_NAME");
await session.initialise();
await session.boot(10);
session.drainOutput(); // clear boot text
await session._machine.type("PRINT 1+1");
await session._machine.runFor(2000000);
console.log(session.drainOutput().screenText);
// "\n\n PRINT 1+1\n 2\n>"
session.destroy();
Prefer text output (drainOutput().screenText) -- it's lightweight and easy to parse.
Only use screenshots when you need to verify graphical output (MODE changes, plotting, character rendering).
// Text (default, preferred):
const output = session.drainOutput();
console.log(output.screenText);
// Screenshot (only when visual verification needed):
import { writeFileSync } from "fs";
const png = await session.screenshot();
writeFileSync("/tmp/screen.png", png);
// Then use Read tool on /tmp/screen.png to view it
B-DFS1.2, B-DFS2.26, Master, Master-MOS3.20Atom-Tape, Atom-Tape-FP, Atom-MMC, Atom-DOSEND as the last line of programs* prefix: *LOAD, *SAVE, *CATrunFor valuesrunFor(n) runs n CPU cycles. At 2 MHz (BBC): n/2000000 seconds. At 1 MHz (Atom): n/1000000 seconds.drainOutput() returns { elements, screenText } and clears the buffer. Call between commands for clean output.runFor(500000) between them.session._machine.readbyte(addr) / writebyte(addr, val) for direct memory access.session.registers() returns { pc, a, x, y, s, p }.const session = new MachineSession("Atom-Tape");
await session.initialise();
await session.boot(10);
session.drainOutput();
for (const line of ['10PRINT"HELLO"', "20END"]) {
await session._machine.type(line);
await session._machine.runFor(500000);
}
session.drainOutput(); // clear line entry echo
await session._machine.type("RUN");
await session._machine.runFor(2000000);
console.log(session.drainOutput().screenText);
// HELLO>
session.destroy();