mirror of
https://github.com/sehugg/8bitworkshop.git
synced 2026-10-25 00:02:16 +00:00
493 lines
14 KiB
JSON
493 lines
14 KiB
JSON
{
|
|
"name": "8bitworkshop",
|
|
"displayName": "8bitworkshop — Retro 8-bit Dev (NES, Atari, C64, 6502)",
|
|
"description": "Build, run, and debug retro 8-bit programs — NES, Atari 2600/7800/8-bit, Commodore 64, and more — with 8bitworkshop's 6502/Z80/6809 assemblers, compilers, and emulators",
|
|
"keywords": [
|
|
"retro",
|
|
"8-bit",
|
|
"8bit",
|
|
"6502",
|
|
"assembly",
|
|
"assembler",
|
|
"emulator",
|
|
"NES",
|
|
"Famicom",
|
|
"Atari 2600",
|
|
"Atari VCS",
|
|
"Atari 7800",
|
|
"Atari 8-bit",
|
|
"Commodore 64",
|
|
"C64",
|
|
"VIC-20",
|
|
"ColecoVision",
|
|
"MSX",
|
|
"ZX Spectrum",
|
|
"Apple II",
|
|
"Game Boy",
|
|
"Sega Master System",
|
|
"Z80",
|
|
"6809",
|
|
"ca65",
|
|
"dasm",
|
|
"homebrew",
|
|
"game development",
|
|
"retrogaming"
|
|
],
|
|
"version": "0.1.0",
|
|
"publisher": "8bitworkshop",
|
|
"icon": "images/icon.png",
|
|
"galleryBanner": {
|
|
"color": "#0d0d3b",
|
|
"theme": "dark"
|
|
},
|
|
"preview": true,
|
|
"license": "GPL-3.0",
|
|
"repository": {
|
|
"type": "git",
|
|
"url": "git+https://github.com/sehugg/8bitworkshop.git"
|
|
},
|
|
"engines": {
|
|
"vscode": "^1.90.0"
|
|
},
|
|
"categories": [
|
|
"Programming Languages",
|
|
"Debuggers"
|
|
],
|
|
"main": "./out/extension.js",
|
|
"activationEvents": [
|
|
"onStartupFinished",
|
|
"workspaceContains:README.md",
|
|
"workspaceContains:**/*.dasm",
|
|
"workspaceContains:**/*.ca65",
|
|
"workspaceContains:**/*.acme",
|
|
"workspaceContains:**/*.xa",
|
|
"workspaceContains:**/*.nesasm",
|
|
"workspaceContains:**/*.z",
|
|
"workspaceContains:**/*.xasm",
|
|
"workspaceContains:**/*.lwasm",
|
|
"workspaceContains:**/*.vasm",
|
|
"workspaceContains:**/*.armips"
|
|
],
|
|
"contributes": {
|
|
"commands": [
|
|
{
|
|
"command": "8bitworkshop.newProject",
|
|
"title": "New Project...",
|
|
"category": "8bitworkshop"
|
|
},
|
|
{
|
|
"command": "8bitworkshop.openExample",
|
|
"title": "Open Example",
|
|
"category": "8bitworkshop"
|
|
},
|
|
{
|
|
"command": "8bitworkshop.copyToWorkspace",
|
|
"title": "Copy to Workspace",
|
|
"category": "8bitworkshop",
|
|
"icon": "$(copy)"
|
|
},
|
|
{
|
|
"command": "8bitworkshop.downloadToolchains",
|
|
"title": "Download All Toolchains",
|
|
"category": "8bitworkshop"
|
|
},
|
|
{
|
|
"command": "8bitworkshop.build",
|
|
"title": "Build",
|
|
"category": "8bitworkshop"
|
|
},
|
|
{
|
|
"command": "8bitworkshop.run",
|
|
"title": "Run",
|
|
"category": "8bitworkshop",
|
|
"icon": "$(play)"
|
|
},
|
|
{
|
|
"command": "8bitworkshop.runThisFile",
|
|
"title": "Run This File",
|
|
"category": "8bitworkshop"
|
|
},
|
|
{
|
|
"command": "8bitworkshop.runMainFile",
|
|
"title": "Run Main File",
|
|
"category": "8bitworkshop"
|
|
},
|
|
{
|
|
"command": "8bitworkshop.followActiveEditor",
|
|
"title": "Follow Active Editor",
|
|
"category": "8bitworkshop"
|
|
},
|
|
{
|
|
"command": "8bitworkshop.setMainFile",
|
|
"title": "Set as Main File",
|
|
"category": "8bitworkshop"
|
|
},
|
|
{
|
|
"command": "8bitworkshop.changeMainFile",
|
|
"title": "Change Main File...",
|
|
"category": "8bitworkshop"
|
|
},
|
|
{
|
|
"command": "8bitworkshop.selectPlatform",
|
|
"title": "Change Platform...",
|
|
"category": "8bitworkshop"
|
|
},
|
|
{
|
|
"command": "8bitworkshop.detectProjects",
|
|
"title": "Detect Projects",
|
|
"category": "8bitworkshop"
|
|
},
|
|
{
|
|
"command": "8bitworkshop.addLaunchConfiguration",
|
|
"title": "Add Launch Configuration",
|
|
"category": "8bitworkshop"
|
|
},
|
|
{
|
|
"command": "8bitworkshop.projectMenu",
|
|
"title": "Project Options",
|
|
"category": "8bitworkshop"
|
|
},
|
|
{
|
|
"command": "8bitworkshop.reset",
|
|
"title": "Reset Emulator",
|
|
"category": "8bitworkshop",
|
|
"icon": "$(debug-restart)"
|
|
},
|
|
{
|
|
"command": "8bitworkshop.pause",
|
|
"title": "Pause Emulator",
|
|
"category": "8bitworkshop",
|
|
"icon": "$(debug-pause)"
|
|
},
|
|
{
|
|
"command": "8bitworkshop.resume",
|
|
"title": "Resume Emulator",
|
|
"category": "8bitworkshop",
|
|
"icon": "$(debug-continue)"
|
|
},
|
|
{
|
|
"command": "8bitworkshop.stop",
|
|
"title": "Stop Emulator",
|
|
"category": "8bitworkshop",
|
|
"icon": "$(debug-stop)"
|
|
},
|
|
{
|
|
"command": "8bitworkshop.mute",
|
|
"title": "Mute Emulator",
|
|
"category": "8bitworkshop",
|
|
"icon": "$(mute)"
|
|
},
|
|
{
|
|
"command": "8bitworkshop.unmute",
|
|
"title": "Unmute Emulator",
|
|
"category": "8bitworkshop",
|
|
"icon": "$(unmute)"
|
|
}
|
|
],
|
|
"configuration": {
|
|
"title": "8bitworkshop",
|
|
"properties": {
|
|
"8bitworkshop.platform": {
|
|
"type": "string",
|
|
"default": "",
|
|
"scope": "resource",
|
|
"description": "Target platform id (e.g. c64, nes, vcs, gb).",
|
|
"markdownDescription": "Target platform id (`nes`, `c64`, `vcs`, ...). Set by New Project, Set as Main File, or detection."
|
|
},
|
|
"8bitworkshop.mainFile": {
|
|
"type": "string",
|
|
"default": "",
|
|
"scope": "resource",
|
|
"description": "Main source file, relative to the workspace folder. Leave empty to run whichever program is open."
|
|
},
|
|
"8bitworkshop.tool": {
|
|
"type": "string",
|
|
"default": "",
|
|
"scope": "resource",
|
|
"description": "Tool for the main file, when it isn't the platform's usual tool for the extension (ca65 for a .asm file, say)."
|
|
},
|
|
"8bitworkshop.folders": {
|
|
"type": "object",
|
|
"default": {},
|
|
"scope": "resource",
|
|
"markdownDescription": "Projects in subdirectories: directory (relative to the workspace folder) → `{ \"platform\", \"mainFile\", \"tool\" }`. The most specific directory wins.",
|
|
"additionalProperties": {
|
|
"type": "object",
|
|
"properties": {
|
|
"platform": {
|
|
"type": "string"
|
|
},
|
|
"mainFile": {
|
|
"type": "string"
|
|
},
|
|
"tool": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"platform"
|
|
]
|
|
}
|
|
},
|
|
"8bitworkshop.autoBuild": {
|
|
"type": "string",
|
|
"enum": [
|
|
"onType",
|
|
"onSave",
|
|
"off"
|
|
],
|
|
"default": "onType",
|
|
"enumDescriptions": [
|
|
"Build as you type, after a short pause.",
|
|
"Build when you save.",
|
|
"Build only with the Build command."
|
|
],
|
|
"markdownDescription": "When to build. Tools that build on a server (llvm-mos) always wait for a save."
|
|
},
|
|
"8bitworkshop.reloadOnBuild": {
|
|
"type": "string",
|
|
"enum": [
|
|
"always",
|
|
"onSave",
|
|
"never"
|
|
],
|
|
"default": "always",
|
|
"enumDescriptions": [
|
|
"Restart the game after each successful build.",
|
|
"Restart it only when you save; typing still updates errors.",
|
|
"Keep the running game until you Run again."
|
|
],
|
|
"markdownDescription": "When a successful build restarts the running game."
|
|
},
|
|
"8bitworkshop.exportRom": {
|
|
"type": "boolean",
|
|
"default": false,
|
|
"description": "Write each successful build's ROM to the export folder."
|
|
},
|
|
"8bitworkshop.exportRomPath": {
|
|
"type": "string",
|
|
"default": "bin",
|
|
"scope": "resource",
|
|
"description": "Folder for exported ROMs, relative to the main file's directory."
|
|
},
|
|
"8bitworkshop.toolchainPath": {
|
|
"type": "string",
|
|
"default": "",
|
|
"description": "Directory containing src/worker (toolchain assets), such as an 8bitworkshop checkout. When empty, toolchains download on first use.",
|
|
"scope": "machine"
|
|
},
|
|
"8bitworkshop.assetUrl": {
|
|
"type": "string",
|
|
"default": "",
|
|
"description": "Server (or local directory) to download toolchains from, tried before the default servers. Downloads are checked against hashes built into the extension.",
|
|
"scope": "machine"
|
|
}
|
|
}
|
|
},
|
|
"languages": [
|
|
{
|
|
"id": "8bws-6502",
|
|
"aliases": [
|
|
"6502 Assembly",
|
|
"6502"
|
|
],
|
|
"extensions": [
|
|
".dasm",
|
|
".ca65",
|
|
".xa",
|
|
".nesasm"
|
|
],
|
|
"configuration": "./out/syntaxes/8bws-6502.language-configuration.json"
|
|
},
|
|
{
|
|
"id": "8bws-z80",
|
|
"aliases": [
|
|
"Z80 Assembly",
|
|
"Z80"
|
|
],
|
|
"extensions": [
|
|
".z",
|
|
".zmac",
|
|
".sgb"
|
|
],
|
|
"configuration": "./out/syntaxes/8bws-z80.language-configuration.json"
|
|
},
|
|
{
|
|
"id": "8bws-6809",
|
|
"aliases": [
|
|
"6809 Assembly",
|
|
"6809"
|
|
],
|
|
"extensions": [
|
|
".xasm",
|
|
".lwasm"
|
|
],
|
|
"configuration": "./out/syntaxes/8bws-6809.language-configuration.json"
|
|
}
|
|
],
|
|
"grammars": [
|
|
{
|
|
"language": "8bws-6502",
|
|
"scopeName": "source.asm.6502",
|
|
"path": "./out/syntaxes/8bws-6502.tmLanguage.json"
|
|
},
|
|
{
|
|
"language": "8bws-z80",
|
|
"scopeName": "source.asm.z80",
|
|
"path": "./out/syntaxes/8bws-z80.tmLanguage.json"
|
|
},
|
|
{
|
|
"language": "8bws-6809",
|
|
"scopeName": "source.asm.6809",
|
|
"path": "./out/syntaxes/8bws-6809.tmLanguage.json"
|
|
}
|
|
],
|
|
"menus": {
|
|
"editor/title": [
|
|
{
|
|
"command": "8bitworkshop.run",
|
|
"when": "8bitworkshop.canRun && activeWebviewPanelId != '8bitworkshop.emulator'",
|
|
"group": "navigation"
|
|
},
|
|
{
|
|
"command": "8bitworkshop.copyToWorkspace",
|
|
"when": "resourceScheme == 8bws-preset",
|
|
"group": "navigation@0"
|
|
},
|
|
{
|
|
"command": "8bitworkshop.pause",
|
|
"when": "activeWebviewPanelId == '8bitworkshop.emulator' && 8bitworkshop.emuRunning",
|
|
"group": "navigation@1"
|
|
},
|
|
{
|
|
"command": "8bitworkshop.resume",
|
|
"when": "activeWebviewPanelId == '8bitworkshop.emulator' && !8bitworkshop.emuRunning",
|
|
"group": "navigation@1"
|
|
},
|
|
{
|
|
"command": "8bitworkshop.reset",
|
|
"when": "activeWebviewPanelId == '8bitworkshop.emulator'",
|
|
"group": "navigation@2"
|
|
},
|
|
{
|
|
"command": "8bitworkshop.stop",
|
|
"when": "activeWebviewPanelId == '8bitworkshop.emulator'",
|
|
"group": "navigation@3"
|
|
},
|
|
{
|
|
"command": "8bitworkshop.mute",
|
|
"when": "activeWebviewPanelId == '8bitworkshop.emulator' && !8bitworkshop.muted",
|
|
"group": "navigation@0"
|
|
},
|
|
{
|
|
"command": "8bitworkshop.unmute",
|
|
"when": "activeWebviewPanelId == '8bitworkshop.emulator' && 8bitworkshop.muted",
|
|
"group": "navigation@0"
|
|
},
|
|
{
|
|
"command": "8bitworkshop.runThisFile",
|
|
"when": "8bitworkshop.canRun",
|
|
"group": "8bitworkshop@1"
|
|
}
|
|
],
|
|
"editor/context": [
|
|
{
|
|
"command": "8bitworkshop.setMainFile",
|
|
"when": "resourceScheme == file",
|
|
"group": "8bitworkshop@1"
|
|
}
|
|
],
|
|
"explorer/context": [
|
|
{
|
|
"command": "8bitworkshop.setMainFile",
|
|
"when": "!explorerResourceIsFolder",
|
|
"group": "8bitworkshop@1"
|
|
}
|
|
],
|
|
"commandPalette": [
|
|
{
|
|
"command": "8bitworkshop.copyToWorkspace",
|
|
"when": "resourceScheme == 8bws-preset"
|
|
},
|
|
{
|
|
"command": "8bitworkshop.pause",
|
|
"when": "8bitworkshop.emuRunning"
|
|
},
|
|
{
|
|
"command": "8bitworkshop.resume",
|
|
"when": "!8bitworkshop.emuRunning"
|
|
}
|
|
]
|
|
},
|
|
"viewsWelcome": [
|
|
{
|
|
"view": "explorer",
|
|
"contents": "Make a program for a classic console or computer.\n[New 8bitworkshop Project](command:8bitworkshop.newProject)\n[Open 8bitworkshop Example](command:8bitworkshop.openExample)"
|
|
}
|
|
],
|
|
"debuggers": [
|
|
{
|
|
"type": "8bitworkshop",
|
|
"label": "8bitworkshop",
|
|
"languages": [],
|
|
"configurationAttributes": {
|
|
"launch": {
|
|
"properties": {
|
|
"platform": {
|
|
"type": "string",
|
|
"description": "Platform id (nes, c64, ...). Defaults to the project's."
|
|
},
|
|
"mainFile": {
|
|
"type": "string",
|
|
"description": "The program to run, relative to the workspace folder."
|
|
},
|
|
"tool": {
|
|
"type": "string",
|
|
"description": "Tool for the main file, if not the usual one."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"configurationSnippets": [
|
|
{
|
|
"label": "8bitworkshop: Run a program",
|
|
"body": {
|
|
"type": "8bitworkshop",
|
|
"request": "launch",
|
|
"name": "Run ${1:main.c}",
|
|
"mainFile": "${1:main.c}"
|
|
}
|
|
}
|
|
]
|
|
}
|
|
]
|
|
},
|
|
"scripts": {
|
|
"build": "node scripts/build.mjs && node out/presetindex.js && node out/syntaxes.js",
|
|
"watch": "node scripts/build.mjs --watch",
|
|
"typecheck": "tsc --noEmit -p .",
|
|
"assets": "node scripts/build.mjs && node out/assetpack.js",
|
|
"assets-quick": "node scripts/build.mjs && node out/assetpack.js --quality 5",
|
|
"test": "npm run build && mocha --timeout 60000 out/test/*.test.js",
|
|
"vscode:prepublish": "npm run build",
|
|
"package": "vsce package --no-dependencies",
|
|
"vsce-publish": "vsce publish --no-dependencies",
|
|
"ovsx-publish": "npm run package && npx ovsx publish $npm_package_name-$npm_package_version.vsix"
|
|
},
|
|
"devDependencies": {
|
|
"@types/vscode": "~1.90.0",
|
|
"@vscode/vsce": "^4.0.0",
|
|
"vscode-oniguruma": "^2.0.1",
|
|
"vscode-textmate": "^9.3.2"
|
|
},
|
|
"capabilities": {
|
|
"untrustedWorkspaces": {
|
|
"supported": "limited",
|
|
"description": "Builds and emulation run sandboxed. 8bitworkshop.toolchainPath is ignored, since it loads code.",
|
|
"restrictedConfigurations": [
|
|
"8bitworkshop.toolchainPath"
|
|
]
|
|
}
|
|
}
|
|
}
|