Skip to content

Commit a2380a7

Browse files
committed
feat: v0.2.0 Full C64 Ultimate REST API Support
1 parent 5335c28 commit a2380a7

28 files changed

+3155
-500
lines changed

.DS_Store

6 KB
Binary file not shown.

.github/workflows/release.yml

Lines changed: 136 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,136 @@
1+
name: Release
2+
3+
on:
4+
push:
5+
tags:
6+
- 'v*'
7+
8+
permissions:
9+
contents: write
10+
11+
jobs:
12+
build:
13+
runs-on: ubuntu-latest
14+
strategy:
15+
matrix:
16+
include:
17+
- vscode_target: darwin-arm64
18+
goos: darwin
19+
goarch: arm64
20+
binary_dir: darwin-arm64
21+
- vscode_target: darwin-x64
22+
goos: darwin
23+
goarch: amd64
24+
binary_dir: darwin-amd64
25+
- vscode_target: linux-x64
26+
goos: linux
27+
goarch: amd64
28+
binary_dir: linux-amd64
29+
- vscode_target: linux-arm64
30+
goos: linux
31+
goarch: arm64
32+
binary_dir: linux-arm64
33+
- vscode_target: win32-x64
34+
goos: windows
35+
goarch: amd64
36+
binary_dir: windows-amd64
37+
38+
steps:
39+
- name: Checkout extension
40+
uses: actions/checkout@v4
41+
42+
- name: Setup Go
43+
uses: actions/setup-go@v5
44+
with:
45+
go-version: '1.22'
46+
47+
- name: Setup Node.js
48+
uses: actions/setup-node@v4
49+
with:
50+
node-version: '20'
51+
52+
- name: Validate version
53+
run: |
54+
PKG_VERSION=$(node -p "require('./package.json').version")
55+
TAG_VERSION="${GITHUB_REF_NAME#v}"
56+
if [ "$PKG_VERSION" != "$TAG_VERSION" ]; then
57+
echo "::error::Tag $GITHUB_REF_NAME does not match package.json version $PKG_VERSION"
58+
exit 1
59+
fi
60+
61+
- name: Clone kickass_ls
62+
run: git clone --depth 1 https://github.com/cybersorcerer/kickass_ls.git ../kickass_ls
63+
64+
- name: Clone c64u
65+
run: git clone --depth 1 https://github.com/cybersorcerer/c64u.git ../c64u
66+
67+
- name: Build kickass_ls
68+
env:
69+
GOOS: ${{ matrix.goos }}
70+
GOARCH: ${{ matrix.goarch }}
71+
run: |
72+
EXT=""
73+
if [ "$GOOS" = "windows" ]; then EXT=".exe"; fi
74+
mkdir -p binaries/${{ matrix.binary_dir }}
75+
cd ../kickass_ls
76+
VERSION=$(git describe --tags --always 2>/dev/null || echo "dev")
77+
go build -trimpath \
78+
-ldflags "-s -w -X main.Version=$VERSION" \
79+
-o "$GITHUB_WORKSPACE/binaries/${{ matrix.binary_dir }}/kickass_ls${EXT}" .
80+
81+
- name: Copy kickass_ls config files
82+
run: |
83+
cp ../kickass_ls/kickass.json binaries/${{ matrix.binary_dir }}/ 2>/dev/null || true
84+
cp ../kickass_ls/mnemonic.json binaries/${{ matrix.binary_dir }}/ 2>/dev/null || true
85+
cp ../kickass_ls/c64memory.json binaries/${{ matrix.binary_dir }}/ 2>/dev/null || true
86+
87+
- name: Build c64u
88+
env:
89+
GOOS: ${{ matrix.goos }}
90+
GOARCH: ${{ matrix.goarch }}
91+
run: |
92+
EXT=""
93+
if [ "$GOOS" = "windows" ]; then EXT=".exe"; fi
94+
cd ../c64u/tools/c64u
95+
VERSION=$(cd "$GITHUB_WORKSPACE/../c64u" && git describe --tags --always 2>/dev/null || echo "dev")
96+
go build -trimpath \
97+
-ldflags "-s -w -X main.version=$VERSION" \
98+
-o "$GITHUB_WORKSPACE/binaries/${{ matrix.binary_dir }}/c64u${EXT}" ./cmd/c64u
99+
100+
- name: Install dependencies
101+
run: npm ci
102+
103+
- name: Compile TypeScript
104+
run: npm run compile
105+
106+
- name: Strip vscode:prepublish hook
107+
run: npm pkg delete scripts.vscode:prepublish
108+
109+
- name: Package VSIX
110+
run: npx vsce package --target ${{ matrix.vscode_target }}
111+
112+
- name: Upload VSIX
113+
uses: actions/upload-artifact@v4
114+
with:
115+
name: vsix-${{ matrix.vscode_target }}
116+
path: '*.vsix'
117+
118+
release:
119+
needs: build
120+
runs-on: ubuntu-latest
121+
steps:
122+
- name: Download all VSIX artifacts
123+
uses: actions/download-artifact@v4
124+
with:
125+
pattern: vsix-*
126+
merge-multiple: true
127+
128+
- name: Create GitHub Release
129+
env:
130+
GH_TOKEN: ${{ github.token }}
131+
run: |
132+
gh release create ${{ github.ref_name }} \
133+
--repo ${{ github.repository }} \
134+
--title "${{ github.ref_name }}" \
135+
--generate-notes \
136+
*.vsix

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11
node_modules
2+
test-files
23
out
34
*.vsix
45
.vscode-test/
6+
monitor.log
7+
binaries/

.kickass_ls.json

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
{
2+
"kickass_ls": {
3+
"warnUnusedLabels": false,
4+
"zeroPageOptimization": {
5+
"enabled": true,
6+
"showHints": true
7+
},
8+
"branchDistanceValidation": {
9+
"enabled": true,
10+
"showWarnings": true
11+
},
12+
"illegalOpcodeDetection": {
13+
"enabled": true,
14+
"showWarnings": true
15+
},
16+
"hardwareBugDetection": {
17+
"enabled": true,
18+
"showWarnings": true,
19+
"jmpIndirectBug": true
20+
},
21+
"memoryLayoutAnalysis": {
22+
"enabled": true,
23+
"showIOAccess": true,
24+
"showStackWarnings": true,
25+
"showROMWriteWarnings": false
26+
},
27+
"magicNumberDetection": {
28+
"enabled": true,
29+
"showHints": true,
30+
"c64Addresses": true
31+
},
32+
"deadCodeDetection": {
33+
"enabled": true,
34+
"showWarnings": true
35+
},
36+
"styleGuideEnforcement": {
37+
"enabled": false,
38+
"showHints": false,
39+
"upperCaseConstants": true,
40+
"descriptiveLabels": true
41+
}
42+
}
43+
}

.vscode/launch.json

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
{
2+
"version": "0.2.0",
3+
"configurations": [
4+
{
5+
"name": "Run Extension",
6+
"type": "extensionHost",
7+
"request": "launch",
8+
"args": [
9+
"--extensionDevelopmentPath=${workspaceFolder}",
10+
"${workspaceFolder}"
11+
],
12+
"outFiles": [
13+
"${workspaceFolder}/out/**/*.js"
14+
],
15+
"preLaunchTask": "${defaultBuildTask}"
16+
},
17+
{
18+
"name": "Extension Tests",
19+
"type": "extensionHost",
20+
"request": "launch",
21+
"args": [
22+
"--extensionDevelopmentPath=${workspaceFolder}",
23+
"--extensionTestsPath=${workspaceFolder}/out/test/suite/index"
24+
],
25+
"outFiles": [
26+
"${workspaceFolder}/out/test/**/*.js"
27+
],
28+
"preLaunchTask": "${defaultBuildTask}"
29+
}
30+
]
31+
}

.vscode/settings.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"c64.kickassJarPath": "/Applications/KickAssembler/KickAss.jar",
3+
"c64u.enabled": true,
4+
"c64u.host": "c64u.homelab.cybersorcerer.org",
5+
"c64u.port": 80
6+
}

.vscode/tasks.json

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
{
2+
"version": "2.0.0",
3+
"tasks": [
4+
{
5+
"type": "npm",
6+
"script": "watch",
7+
"problemMatcher": "$tsc-watch",
8+
"isBackground": true,
9+
"presentation": {
10+
"reveal": "never"
11+
},
12+
"group": {
13+
"kind": "build",
14+
"isDefault": true
15+
}
16+
},
17+
{
18+
"type": "npm",
19+
"script": "compile",
20+
"problemMatcher": "$tsc",
21+
"presentation": {
22+
"reveal": "never"
23+
},
24+
"group": "build"
25+
}
26+
]
27+
}

.vscodeignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
.vscode/**
22
.vscode-test/**
33
src/**
4+
scripts/**
45
.gitignore
56
.yarnrc
67
vsc-extension-quickstart.md
78
**/tsconfig.json
89
**/.eslintrc.json
910
**/*.map
1011
**/*.ts
12+
!binaries/**
1113
node_modules/**

CHANGELOG.md

Lines changed: 45 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -2,28 +2,51 @@
22

33
All notable changes to the "c64-vscode" extension will be documented in this file.
44

5+
## [Unreleased]
6+
7+
### Added
8+
9+
- **Language Server Settings UI** — All kickass_ls diagnostics and formatting options are now configurable via VS Code settings (search for "kickass_ls"). Changes take effect immediately without reload.
10+
- **GitHub Actions Release Workflow** — Automatically builds platform-specific VSIX files when a version tag is pushed.
11+
12+
## [0.3.0] - 2026-02-07
13+
14+
### Added
15+
16+
- **Bundled Binaries** — kickass_ls and c64u are now bundled in the VSIX for all supported platforms (macOS, Linux, Windows). Binary resolution: Settings > PATH > Bundled.
17+
- **C64 Ultimate Tree View File Explorer** — Full tree view in the Activity Bar with drag-and-drop support for file management on the C64 Ultimate.
18+
- **Open files from Tree Explorer** — Text files (.asm, .bas, .seq, .txt, .cfg, .inc, .sym, .dbg) open in the editor with auto-upload on save. Binary files (.prg, .crt, .bin, .tap, .t64, .rel, .ko) open in the Hex Editor.
19+
- **Disk image creation** — Create d64, d71, d81, g64, and dnp disk images directly from the Tree View.
20+
- **Mount/unmount disk images** — Mount disk images on IEC drives with read-write, read-only, or unlinked modes.
21+
- **Context menu actions** — Right-click items in the Tree View for rename, copy, delete, download, upload, run, and mount operations.
22+
- **Build scripts**`scripts/build-binaries.sh` for local cross-compilation with auto-update support (git pull + incremental builds via commit hash tracking).
23+
24+
### Changed
25+
26+
- Binary paths for kickass_ls and c64u are now independently configurable via `c64.kickassLsBinary` and `c64u.cliBinary` settings.
27+
28+
## [0.2.0] - 2026-01-20
29+
30+
### Added
31+
32+
- **C64 Ultimate integration** — Upload, download, and run programs on real C64 Ultimate hardware via the c64u CLI.
33+
- **Interactive file browser** — QuickPick-based file browser for navigating the C64 Ultimate filesystem.
34+
- **Machine control** — Reset, reboot, pause, and resume the C64 Ultimate.
35+
- **File operations** — Create directories, move, copy, delete, and show file info on the C64 Ultimate.
36+
37+
### Fixed
38+
39+
- **Process timeout** — Added 60-second timeout for Kick Assembler to prevent hanging builds.
40+
- **VICE error handling** — Improved error messages when VICE binary is not found (ENOENT detection).
41+
- **Auto-detection race condition** — Fixed duplicate event handlers and timing issues in Kick Assembler file detection.
42+
543
## [0.1.0] - 2026-01-10
644

745
### Added
8-
- Initial release
9-
- LSP-based syntax highlighting via kickass_ls (no static syntax files!)
10-
- Kick Assembler integration with error/warning detection
11-
- VICE emulator support with autostart
12-
- C64 Ultimate integration via c64u CLI:
13-
- Interactive file browser (QuickPick-based)
14-
- Upload/download files
15-
- Mount disk images (d64/d71/d81/g64/g71)
16-
- Machine control (reset, reboot, pause, resume)
17-
- Directory operations (create, delete, list)
18-
- File operations (move, copy, delete, info)
19-
- Keyboard shortcuts for quick access
20-
- Comprehensive configuration options
21-
- Problems panel integration for assembly errors
22-
23-
### Features
24-
- **No static syntax files** - All highlighting from LSP
25-
- **Semantic tokens** - Context-aware syntax highlighting
26-
- **Real-time diagnostics** - Instant feedback on code issues
27-
- **C64 Ultimate workflow** - Assemble, upload and run on real hardware
28-
- **File browser** - Navigate C64 Ultimate filesystem
29-
- **Disk image support** - Mount and manage disk images
46+
47+
- Initial release.
48+
- LSP-based syntax highlighting via kickass_ls — no static syntax files.
49+
- Kick Assembler integration with error/warning detection in Problems panel.
50+
- VICE emulator support with autostart mode.
51+
- Keyboard shortcuts for assemble, run, and assemble-and-run.
52+
- Semantic token support for context-aware highlighting.

0 commit comments

Comments
 (0)