web-a2e 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.clangd +5 -0
- package/.mcp.json +12 -0
- package/CLAUDE.md +362 -0
- package/CMakeLists.txt +774 -0
- package/LICENSE +21 -0
- package/README.md +392 -0
- package/build-wasm/generated/roms.cpp +2447 -0
- package/docker-compose.staging.yml +9 -0
- package/docs/basic-rom-disassembly.md +6663 -0
- package/docs/softswitch-comparison.md +273 -0
- package/docs/thunderclock-debug.md +89 -0
- package/examples/cube.bas +72 -0
- package/examples/hello.s +55 -0
- package/examples/scroll.s +140 -0
- package/package.json +18 -0
- package/public/assets/apple-logo-old.png +0 -0
- package/public/assets/apple-logo.png +0 -0
- package/public/assets/drive-closed-light-on.png +0 -0
- package/public/assets/drive-closed.png +0 -0
- package/public/assets/drive-open-light-on.png +0 -0
- package/public/assets/drive-open.png +0 -0
- package/public/audio-worklet.js +82 -0
- package/public/disks/Apple DOS 3.3 January 1983.dsk +0 -0
- package/public/disks/ProDOS 2.4.3.po +0 -0
- package/public/disks/h32mb.2mg +0 -0
- package/public/disks/library.json +26 -0
- package/public/docs/llms/llm-assembler.txt +90 -0
- package/public/docs/llms/llm-basic-program.txt +256 -0
- package/public/docs/llms/llm-disk-drives.txt +72 -0
- package/public/docs/llms/llm-file-explorer.txt +50 -0
- package/public/docs/llms/llm-hard-drives.txt +80 -0
- package/public/docs/llms/llm-main.txt +51 -0
- package/public/docs/llms/llm-slot-configuration.txt +66 -0
- package/public/icons/icon-192.svg +4 -0
- package/public/icons/icon-512.svg +4 -0
- package/public/index.html +661 -0
- package/public/llms.txt +49 -0
- package/public/manifest.json +29 -0
- package/public/shaders/burnin.glsl +22 -0
- package/public/shaders/crt.glsl +706 -0
- package/public/shaders/edge.glsl +109 -0
- package/public/shaders/vertex.glsl +8 -0
- package/public/sw.js +186 -0
- package/roms/341-0027.bin +0 -0
- package/roms/341-0160-A-US-UK.bin +0 -0
- package/roms/341-0160-A.bin +0 -0
- package/roms/342-0273-A-US-UK.bin +0 -0
- package/roms/342-0349-B-C0-FF.bin +0 -0
- package/roms/Apple Mouse Interface Card ROM - 342-0270-C.bin +0 -0
- package/roms/Thunderclock Plus ROM.bin +0 -0
- package/scripts/generate_roms.sh +69 -0
- package/src/bindings/wasm_interface.cpp +1940 -0
- package/src/core/assembler/assembler.cpp +1239 -0
- package/src/core/assembler/assembler.hpp +115 -0
- package/src/core/audio/audio.cpp +160 -0
- package/src/core/audio/audio.hpp +81 -0
- package/src/core/basic/basic_detokenizer.cpp +436 -0
- package/src/core/basic/basic_detokenizer.hpp +41 -0
- package/src/core/basic/basic_tokenizer.cpp +286 -0
- package/src/core/basic/basic_tokenizer.hpp +26 -0
- package/src/core/basic/basic_tokens.hpp +295 -0
- package/src/core/cards/disk2_card.cpp +568 -0
- package/src/core/cards/disk2_card.hpp +316 -0
- package/src/core/cards/expansion_card.hpp +185 -0
- package/src/core/cards/mockingboard/ay8910.cpp +616 -0
- package/src/core/cards/mockingboard/ay8910.hpp +159 -0
- package/src/core/cards/mockingboard/via6522.cpp +530 -0
- package/src/core/cards/mockingboard/via6522.hpp +163 -0
- package/src/core/cards/mockingboard_card.cpp +312 -0
- package/src/core/cards/mockingboard_card.hpp +159 -0
- package/src/core/cards/mouse_card.cpp +654 -0
- package/src/core/cards/mouse_card.hpp +190 -0
- package/src/core/cards/smartport/block_device.cpp +202 -0
- package/src/core/cards/smartport/block_device.hpp +60 -0
- package/src/core/cards/smartport/smartport_card.cpp +603 -0
- package/src/core/cards/smartport/smartport_card.hpp +120 -0
- package/src/core/cards/thunderclock_card.cpp +237 -0
- package/src/core/cards/thunderclock_card.hpp +122 -0
- package/src/core/cpu/cpu6502.cpp +1609 -0
- package/src/core/cpu/cpu6502.hpp +203 -0
- package/src/core/debug/condition_evaluator.cpp +470 -0
- package/src/core/debug/condition_evaluator.hpp +87 -0
- package/src/core/disassembler/disassembler.cpp +552 -0
- package/src/core/disassembler/disassembler.hpp +171 -0
- package/src/core/disk-image/disk_image.hpp +267 -0
- package/src/core/disk-image/dsk_disk_image.cpp +827 -0
- package/src/core/disk-image/dsk_disk_image.hpp +204 -0
- package/src/core/disk-image/gcr_encoding.cpp +147 -0
- package/src/core/disk-image/gcr_encoding.hpp +78 -0
- package/src/core/disk-image/woz_disk_image.cpp +1049 -0
- package/src/core/disk-image/woz_disk_image.hpp +343 -0
- package/src/core/emulator.cpp +2126 -0
- package/src/core/emulator.hpp +434 -0
- package/src/core/filesystem/dos33.cpp +178 -0
- package/src/core/filesystem/dos33.hpp +66 -0
- package/src/core/filesystem/pascal.cpp +262 -0
- package/src/core/filesystem/pascal.hpp +87 -0
- package/src/core/filesystem/prodos.cpp +369 -0
- package/src/core/filesystem/prodos.hpp +119 -0
- package/src/core/input/keyboard.cpp +227 -0
- package/src/core/input/keyboard.hpp +111 -0
- package/src/core/mmu/mmu.cpp +1387 -0
- package/src/core/mmu/mmu.hpp +236 -0
- package/src/core/types.hpp +196 -0
- package/src/core/video/video.cpp +680 -0
- package/src/core/video/video.hpp +156 -0
- package/src/css/assembler-editor.css +1617 -0
- package/src/css/base.css +470 -0
- package/src/css/basic-debugger.css +791 -0
- package/src/css/basic-editor.css +792 -0
- package/src/css/controls.css +783 -0
- package/src/css/cpu-debugger.css +1413 -0
- package/src/css/debug-base.css +160 -0
- package/src/css/debug-windows.css +6455 -0
- package/src/css/disk-drives.css +406 -0
- package/src/css/documentation.css +392 -0
- package/src/css/file-explorer.css +867 -0
- package/src/css/hard-drive.css +180 -0
- package/src/css/layout.css +217 -0
- package/src/css/memory-windows.css +798 -0
- package/src/css/modals.css +510 -0
- package/src/css/monitor.css +425 -0
- package/src/css/release-notes.css +101 -0
- package/src/css/responsive.css +400 -0
- package/src/css/rule-builder.css +340 -0
- package/src/css/save-states.css +201 -0
- package/src/css/settings-windows.css +1231 -0
- package/src/css/window-switcher.css +150 -0
- package/src/js/agent/agent-manager.js +643 -0
- package/src/js/agent/agent-tools.js +293 -0
- package/src/js/agent/agent-version-tools.js +131 -0
- package/src/js/agent/assembler-tools.js +357 -0
- package/src/js/agent/basic-program-tools.js +894 -0
- package/src/js/agent/disk-tools.js +417 -0
- package/src/js/agent/file-explorer-tools.js +269 -0
- package/src/js/agent/index.js +13 -0
- package/src/js/agent/main-tools.js +222 -0
- package/src/js/agent/slot-tools.js +303 -0
- package/src/js/agent/smartport-tools.js +257 -0
- package/src/js/agent/window-tools.js +80 -0
- package/src/js/audio/audio-driver.js +417 -0
- package/src/js/audio/audio-worklet.js +85 -0
- package/src/js/audio/index.js +8 -0
- package/src/js/config/default-layout.js +34 -0
- package/src/js/config/version.js +8 -0
- package/src/js/data/apple2-rom-routines.js +577 -0
- package/src/js/debug/assembler-editor-window.js +2993 -0
- package/src/js/debug/basic-breakpoint-manager.js +529 -0
- package/src/js/debug/basic-program-parser.js +436 -0
- package/src/js/debug/basic-program-window.js +2594 -0
- package/src/js/debug/basic-variable-inspector.js +447 -0
- package/src/js/debug/breakpoint-manager.js +472 -0
- package/src/js/debug/cpu-debugger-window.js +2396 -0
- package/src/js/debug/index.js +22 -0
- package/src/js/debug/label-manager.js +238 -0
- package/src/js/debug/memory-browser-window.js +416 -0
- package/src/js/debug/memory-heat-map-window.js +481 -0
- package/src/js/debug/memory-map-window.js +206 -0
- package/src/js/debug/mockingboard-window.js +882 -0
- package/src/js/debug/mouse-card-window.js +355 -0
- package/src/js/debug/rule-builder-window.js +648 -0
- package/src/js/debug/soft-switch-window.js +458 -0
- package/src/js/debug/stack-viewer-window.js +221 -0
- package/src/js/debug/symbols.js +416 -0
- package/src/js/debug/trace-panel.js +291 -0
- package/src/js/debug/zero-page-watch-window.js +297 -0
- package/src/js/disk-manager/disk-drives-window.js +212 -0
- package/src/js/disk-manager/disk-operations.js +284 -0
- package/src/js/disk-manager/disk-persistence.js +301 -0
- package/src/js/disk-manager/disk-surface-renderer.js +388 -0
- package/src/js/disk-manager/drive-sounds.js +139 -0
- package/src/js/disk-manager/hard-drive-manager.js +481 -0
- package/src/js/disk-manager/hard-drive-persistence.js +187 -0
- package/src/js/disk-manager/hard-drive-window.js +57 -0
- package/src/js/disk-manager/index.js +890 -0
- package/src/js/display/display-settings-window.js +383 -0
- package/src/js/display/index.js +10 -0
- package/src/js/display/screen-window.js +342 -0
- package/src/js/display/webgl-renderer.js +705 -0
- package/src/js/file-explorer/disassembler.js +574 -0
- package/src/js/file-explorer/dos33.js +266 -0
- package/src/js/file-explorer/file-viewer.js +359 -0
- package/src/js/file-explorer/index.js +1261 -0
- package/src/js/file-explorer/prodos.js +549 -0
- package/src/js/file-explorer/utils.js +67 -0
- package/src/js/help/documentation-window.js +1096 -0
- package/src/js/help/index.js +10 -0
- package/src/js/help/release-notes-window.js +85 -0
- package/src/js/help/release-notes.js +612 -0
- package/src/js/input/gamepad-handler.js +176 -0
- package/src/js/input/index.js +12 -0
- package/src/js/input/input-handler.js +396 -0
- package/src/js/input/joystick-window.js +404 -0
- package/src/js/input/mouse-handler.js +99 -0
- package/src/js/input/text-selection.js +462 -0
- package/src/js/main.js +653 -0
- package/src/js/state/index.js +15 -0
- package/src/js/state/save-states-window.js +393 -0
- package/src/js/state/state-manager.js +409 -0
- package/src/js/state/state-persistence.js +218 -0
- package/src/js/ui/confirm.js +43 -0
- package/src/js/ui/disk-drive-positioner.js +347 -0
- package/src/js/ui/reminder-controller.js +129 -0
- package/src/js/ui/slot-configuration-window.js +560 -0
- package/src/js/ui/theme-manager.js +61 -0
- package/src/js/ui/toast.js +44 -0
- package/src/js/ui/ui-controller.js +897 -0
- package/src/js/ui/window-switcher.js +275 -0
- package/src/js/utils/basic-autocomplete.js +832 -0
- package/src/js/utils/basic-highlighting.js +473 -0
- package/src/js/utils/basic-tokenizer.js +153 -0
- package/src/js/utils/basic-tokens.js +117 -0
- package/src/js/utils/constants.js +28 -0
- package/src/js/utils/indexeddb-helper.js +225 -0
- package/src/js/utils/merlin-editor-support.js +905 -0
- package/src/js/utils/merlin-highlighting.js +551 -0
- package/src/js/utils/storage.js +125 -0
- package/src/js/utils/string-utils.js +19 -0
- package/src/js/utils/wasm-memory.js +54 -0
- package/src/js/windows/base-window.js +690 -0
- package/src/js/windows/index.js +9 -0
- package/src/js/windows/window-manager.js +375 -0
- package/tests/catch2/catch.hpp +17976 -0
- package/tests/common/basic_program_builder.cpp +119 -0
- package/tests/common/basic_program_builder.hpp +209 -0
- package/tests/common/disk_image_builder.cpp +444 -0
- package/tests/common/disk_image_builder.hpp +141 -0
- package/tests/common/test_helpers.hpp +118 -0
- package/tests/gcr/gcr-test.cpp +142 -0
- package/tests/integration/check-rom.js +70 -0
- package/tests/integration/compare-boot.js +239 -0
- package/tests/integration/crash-trace.js +102 -0
- package/tests/integration/disk-boot-test.js +264 -0
- package/tests/integration/memory-crash.js +108 -0
- package/tests/integration/nibble-read-test.js +249 -0
- package/tests/integration/phase-test.js +159 -0
- package/tests/integration/test_emulator.cpp +291 -0
- package/tests/integration/test_emulator_basic.cpp +91 -0
- package/tests/integration/test_emulator_debug.cpp +344 -0
- package/tests/integration/test_emulator_disk.cpp +153 -0
- package/tests/integration/test_emulator_state.cpp +163 -0
- package/tests/klaus/6502_functional_test.bin +0 -0
- package/tests/klaus/65C02_extended_opcodes_test.bin +0 -0
- package/tests/klaus/klaus_6502_test.cpp +184 -0
- package/tests/klaus/klaus_65c02_test.cpp +197 -0
- package/tests/thunderclock/thunderclock_mmu_test.cpp +304 -0
- package/tests/thunderclock/thunderclock_test.cpp +550 -0
- package/tests/unit/test_assembler.cpp +521 -0
- package/tests/unit/test_audio.cpp +196 -0
- package/tests/unit/test_ay8910.cpp +311 -0
- package/tests/unit/test_basic_detokenizer.cpp +265 -0
- package/tests/unit/test_basic_tokenizer.cpp +382 -0
- package/tests/unit/test_block_device.cpp +259 -0
- package/tests/unit/test_condition_evaluator.cpp +219 -0
- package/tests/unit/test_cpu6502.cpp +1301 -0
- package/tests/unit/test_cpu_addressing.cpp +361 -0
- package/tests/unit/test_cpu_cycle_counts.cpp +409 -0
- package/tests/unit/test_cpu_decimal.cpp +166 -0
- package/tests/unit/test_cpu_interrupts.cpp +285 -0
- package/tests/unit/test_disassembler.cpp +323 -0
- package/tests/unit/test_disk2_card.cpp +330 -0
- package/tests/unit/test_dos33.cpp +273 -0
- package/tests/unit/test_dsk_disk_image.cpp +315 -0
- package/tests/unit/test_expansion_card.cpp +178 -0
- package/tests/unit/test_gcr_encoding.cpp +232 -0
- package/tests/unit/test_keyboard.cpp +262 -0
- package/tests/unit/test_mmu.cpp +555 -0
- package/tests/unit/test_mmu_slots.cpp +323 -0
- package/tests/unit/test_mockingboard.cpp +352 -0
- package/tests/unit/test_mouse_card.cpp +386 -0
- package/tests/unit/test_pascal.cpp +248 -0
- package/tests/unit/test_prodos.cpp +259 -0
- package/tests/unit/test_smartport_card.cpp +321 -0
- package/tests/unit/test_thunderclock.cpp +354 -0
- package/tests/unit/test_via6522.cpp +323 -0
- package/tests/unit/test_video.cpp +319 -0
- package/tests/unit/test_woz_disk_image.cpp +257 -0
- package/vite.config.js +96 -0
- package/wiki/AI-Agent.md +372 -0
- package/wiki/Architecture-Overview.md +303 -0
- package/wiki/Audio-System.md +449 -0
- package/wiki/CPU-Emulation.md +477 -0
- package/wiki/Debugger.md +516 -0
- package/wiki/Disk-Drives.md +161 -0
- package/wiki/Disk-System-Internals.md +547 -0
- package/wiki/Display-Settings.md +88 -0
- package/wiki/Expansion-Slots.md +187 -0
- package/wiki/File-Explorer.md +259 -0
- package/wiki/Getting-Started.md +156 -0
- package/wiki/Home.md +69 -0
- package/wiki/Input-Devices.md +183 -0
- package/wiki/Keyboard-Shortcuts.md +158 -0
- package/wiki/Memory-System.md +364 -0
- package/wiki/Save-States.md +172 -0
- package/wiki/Video-Rendering.md +658 -0
|
@@ -0,0 +1,612 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* release-notes.js - Release notes content data
|
|
3
|
+
*
|
|
4
|
+
* Written by
|
|
5
|
+
* Mike Daley <michael_daley@icloud.com>
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Curated release notes organized by week
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
export const RELEASE_NOTES = [
|
|
13
|
+
{
|
|
14
|
+
week: "February 15, 2026",
|
|
15
|
+
features: [
|
|
16
|
+
{
|
|
17
|
+
title: "BASIC conditional breakpoints",
|
|
18
|
+
description:
|
|
19
|
+
"Set conditional breakpoints on BASIC variables and arrays using the Rule Builder. Supports simple variables (e.g. break when SCORE >= 1000), 1D arrays (e.g. A(5) == 42), and 2D arrays (e.g. G(2,3) == 23). Conditions are evaluated natively in C++ at every BASIC statement boundary for accuracy.",
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
title: "Condition-only rules",
|
|
23
|
+
description:
|
|
24
|
+
"Add breakpoint rules that aren't tied to a specific line — they evaluate on every BASIC statement and break wherever the condition becomes true. Access via the 'if...' button in the breakpoint toolbar.",
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
title: "Breakpoint trigger indicators",
|
|
28
|
+
description:
|
|
29
|
+
"When a breakpoint fires, the triggered item in the breakpoint list pulses red and the source line highlights in red (instead of the usual blue stepping highlight), making it clear which breakpoint stopped execution.",
|
|
30
|
+
},
|
|
31
|
+
],
|
|
32
|
+
fixes: [
|
|
33
|
+
{
|
|
34
|
+
title: "BASIC editor gutter scroll",
|
|
35
|
+
description:
|
|
36
|
+
"The breakpoint gutter no longer scrolls independently of the editor — it stays locked to the editor content.",
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
title: "2D array breakpoint formula",
|
|
40
|
+
description:
|
|
41
|
+
"Fixed the flat index calculation for 2D array variable watches to match Applesoft's column-major storage order.",
|
|
42
|
+
},
|
|
43
|
+
],
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
week: "February 14, 2026",
|
|
47
|
+
features: [
|
|
48
|
+
{
|
|
49
|
+
title: "BASIC Stop button",
|
|
50
|
+
description:
|
|
51
|
+
"New Stop button in the BASIC debugger toolbar sends Ctrl+C to the emulator to break a running program. Also unpauses the emulator if paused so the keystroke is processed.",
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
title: "Game controller support",
|
|
55
|
+
description:
|
|
56
|
+
"Physical game controllers are now detected and functional via the Gamepad API. The left stick maps to paddle values and buttons A/B map to Apple II buttons 0/1, with configurable deadzone.",
|
|
57
|
+
},
|
|
58
|
+
],
|
|
59
|
+
fixes: [
|
|
60
|
+
{
|
|
61
|
+
title: "Save states light theme",
|
|
62
|
+
description:
|
|
63
|
+
"Fixed the Save States window rendering with hardcoded dark colours. All values now use CSS theme variables for correct light and dark theme appearance.",
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
title: "Window focus click-through",
|
|
67
|
+
description:
|
|
68
|
+
"Buttons and interactive controls in unfocused windows now respond on the first click instead of requiring a second click after focusing the window.",
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
title: "Screen window keyboard focus",
|
|
72
|
+
description:
|
|
73
|
+
"Clicking the emulator screen window now immediately gives the canvas keyboard focus, so keystrokes reach the emulator without needing a second click.",
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
title: "BASIC tokenizer empty lines",
|
|
77
|
+
description:
|
|
78
|
+
"Lines with only a line number and no code are now skipped when writing a BASIC program to memory, preventing unintended line deletions.",
|
|
79
|
+
},
|
|
80
|
+
],
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
week: "February 13, 2026",
|
|
84
|
+
features: [
|
|
85
|
+
{
|
|
86
|
+
title: "BASIC line heat map",
|
|
87
|
+
description:
|
|
88
|
+
"New Heat toggle in the BASIC editor toolbar shows a colour-coded gutter (blue to red) indicating how frequently each line executes. Driven by cycle-accurate C++ tracking at every BASIC statement, with smooth decay so lines fade when no longer active.",
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
title: "BASIC trace toggle",
|
|
92
|
+
description:
|
|
93
|
+
"New Trace toggle lets you disable current-line highlighting while a BASIC program runs, reducing visual noise for long-running programs.",
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
title: "BASIC editor improvements",
|
|
97
|
+
description:
|
|
98
|
+
"Statement hover highlighting, live current-line tracking while running, tokenizer fixes, and 30fps refresh rate for smoother updates.",
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
title: "Window z-index persistence",
|
|
102
|
+
description:
|
|
103
|
+
"Window stacking order is now saved and restored between sessions, so your window layout is exactly as you left it.",
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
title: "Click-to-focus windows",
|
|
107
|
+
description:
|
|
108
|
+
"Clicking an unfocused window now only brings it to front — buttons and inputs don't activate until the window has focus.",
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
title: "Window switcher completeness",
|
|
112
|
+
description:
|
|
113
|
+
"The window switcher (Ctrl+`) now includes all windows: Hard Drives, File Explorer, and Trace Panel were missing.",
|
|
114
|
+
},
|
|
115
|
+
],
|
|
116
|
+
fixes: [
|
|
117
|
+
{
|
|
118
|
+
title: "Disk drives window sizing",
|
|
119
|
+
description:
|
|
120
|
+
"Fixed disk drives window being too small for new users with no saved state.",
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
title: "Agent connection",
|
|
124
|
+
description:
|
|
125
|
+
"Fixed app connection to the MCP agent server.",
|
|
126
|
+
},
|
|
127
|
+
],
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
week: "February 12, 2026",
|
|
131
|
+
features: [
|
|
132
|
+
{
|
|
133
|
+
title: "Expansion Slots redesign",
|
|
134
|
+
description:
|
|
135
|
+
"Redesigned the Expansion Slots window with a drag-and-drop card tray and motherboard layout for intuitive slot management.",
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
title: "Joystick window redesign",
|
|
139
|
+
description:
|
|
140
|
+
"Redesigned the joystick window with a circular pad, gauge bars, and LED-style buttons for a more tactile feel.",
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
title: "Update badge on Help button",
|
|
144
|
+
description:
|
|
145
|
+
"Service worker updates now show a badge on the Help button instead of auto-reloading the page.",
|
|
146
|
+
},
|
|
147
|
+
],
|
|
148
|
+
fixes: [
|
|
149
|
+
{
|
|
150
|
+
title: "SmartPort ProDOS boot",
|
|
151
|
+
description:
|
|
152
|
+
"Fixed SmartPort card breaking ProDOS floppy boot and slow agent text input speed.",
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
title: "SmartPort crash on empty drive",
|
|
156
|
+
description:
|
|
157
|
+
"Fixed a crash when booting with a SmartPort card installed but no disk image loaded.",
|
|
158
|
+
},
|
|
159
|
+
{
|
|
160
|
+
title: "Window state persistence",
|
|
161
|
+
description:
|
|
162
|
+
"Fixed slot config and disk drives window state not persisting across browser refresh.",
|
|
163
|
+
},
|
|
164
|
+
{
|
|
165
|
+
title: "Slot config UX",
|
|
166
|
+
description:
|
|
167
|
+
"Merged the slot config warning into the Apply button and fixed window sizing issues.",
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
title: "Window centering",
|
|
171
|
+
description:
|
|
172
|
+
"Windows now center in the viewport when no saved position exists instead of appearing at origin.",
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
title: "CRT static noise",
|
|
176
|
+
description:
|
|
177
|
+
"Reduced CRT static noise block size for a finer grain effect.",
|
|
178
|
+
},
|
|
179
|
+
],
|
|
180
|
+
},
|
|
181
|
+
{
|
|
182
|
+
week: "February 9, 2026",
|
|
183
|
+
features: [
|
|
184
|
+
{
|
|
185
|
+
title: "BASIC tokenizer in WASM",
|
|
186
|
+
description:
|
|
187
|
+
"Moved the Applesoft BASIC tokenizer from JavaScript to C++ WebAssembly for faster and more accurate tokenization. Fixed detokenizer spacing for numbers and variables.",
|
|
188
|
+
},
|
|
189
|
+
{
|
|
190
|
+
title: "Assembler symbol integration",
|
|
191
|
+
description:
|
|
192
|
+
"Assembler symbols are now automatically loaded into the CPU debugger, so breakpoints and disassembly show your label names. Added a Debug button to the assembler toolbar.",
|
|
193
|
+
},
|
|
194
|
+
{
|
|
195
|
+
title: "Instruction Trace window",
|
|
196
|
+
description:
|
|
197
|
+
"New debug window that records a full disassembled instruction trace with auto-scroll, clear, and column-aligned display.",
|
|
198
|
+
},
|
|
199
|
+
{
|
|
200
|
+
title: "Disk Library",
|
|
201
|
+
description:
|
|
202
|
+
"Added a Disk Library window for one-click loading of bundled disk images, cached locally in IndexedDB for instant access.",
|
|
203
|
+
},
|
|
204
|
+
{
|
|
205
|
+
title: "SmartPort hard drive UI",
|
|
206
|
+
description:
|
|
207
|
+
"SmartPort Drives window now uses a side-by-side layout with drive separators. Added toast notifications and slot validation.",
|
|
208
|
+
},
|
|
209
|
+
{
|
|
210
|
+
title: "Browse button on floppy drives",
|
|
211
|
+
description:
|
|
212
|
+
"Floppy disk drives now have a Browse button that opens the File Explorer for the inserted disk.",
|
|
213
|
+
},
|
|
214
|
+
{
|
|
215
|
+
title: "Custom confirm dialogs",
|
|
216
|
+
description:
|
|
217
|
+
"Replaced all native browser confirm() dialogs with styled in-app modals that match the emulator theme.",
|
|
218
|
+
},
|
|
219
|
+
{
|
|
220
|
+
title: "CSS bundling via Vite",
|
|
221
|
+
description:
|
|
222
|
+
"Moved all CSS into src/css/ so Vite can bundle and minify stylesheets for production builds.",
|
|
223
|
+
},
|
|
224
|
+
],
|
|
225
|
+
fixes: [
|
|
226
|
+
{
|
|
227
|
+
title: "Warm reset behavior",
|
|
228
|
+
description:
|
|
229
|
+
"Warm reset (Ctrl+Reset) now resets soft switches and stops the disk motor like real hardware, while preserving memory contents.",
|
|
230
|
+
},
|
|
231
|
+
{
|
|
232
|
+
title: "Disk II write support",
|
|
233
|
+
description:
|
|
234
|
+
"Fixed Disk II write failures by correctly converting the level signal to flux transitions.",
|
|
235
|
+
},
|
|
236
|
+
{
|
|
237
|
+
title: "Disk drives window layout",
|
|
238
|
+
description:
|
|
239
|
+
"Fixed Browse button styling, widened the drives window to fit content, and constrained it to the viewport after resize.",
|
|
240
|
+
},
|
|
241
|
+
{
|
|
242
|
+
title: "Cold reset cleanup",
|
|
243
|
+
description:
|
|
244
|
+
"Clearing stale frame sync and BASIC state on cold reset to prevent ghost state from previous sessions.",
|
|
245
|
+
},
|
|
246
|
+
],
|
|
247
|
+
},
|
|
248
|
+
{
|
|
249
|
+
week: "February 2, 2026",
|
|
250
|
+
features: [
|
|
251
|
+
{
|
|
252
|
+
title: "65C02 assembler editor",
|
|
253
|
+
description:
|
|
254
|
+
"Full-featured assembler with syntax highlighting, gutter line numbers, breakpoints, validation, error display, ROM routine reference panel, and file save/load.",
|
|
255
|
+
},
|
|
256
|
+
{
|
|
257
|
+
title: "BASIC debugger",
|
|
258
|
+
description:
|
|
259
|
+
"Added breakpoints, statement-level stepping, variable inspection and editing, runtime error detection, and line highlighting for Applesoft BASIC programs.",
|
|
260
|
+
},
|
|
261
|
+
{
|
|
262
|
+
title: "SmartPort expansion card",
|
|
263
|
+
description:
|
|
264
|
+
"New SmartPort hard drive controller supporting two ProDOS block devices with a self-built ROM. Includes pulsing LED activity indicator and hard drive file browsing.",
|
|
265
|
+
},
|
|
266
|
+
{
|
|
267
|
+
title: "Light and dark themes",
|
|
268
|
+
description:
|
|
269
|
+
"Added light, dark, and system-follow theme support. All accent colors are derived from the six-stripe Apple rainbow logo palette.",
|
|
270
|
+
},
|
|
271
|
+
{
|
|
272
|
+
title: "Save States window",
|
|
273
|
+
description:
|
|
274
|
+
"New save states manager with an autosave slot and five manual save slots, including high-res hover previews of each state.",
|
|
275
|
+
},
|
|
276
|
+
{
|
|
277
|
+
title: "Mouse Interface Card",
|
|
278
|
+
description:
|
|
279
|
+
"Apple Mouse Interface Card emulation using the AppleWin PIA command protocol, with a dedicated debug window showing PIA registers and position.",
|
|
280
|
+
},
|
|
281
|
+
{
|
|
282
|
+
title: "Per-scanline raster rendering",
|
|
283
|
+
description:
|
|
284
|
+
"Video output is now rendered scanline-by-scanline with sub-scanline precision and a 2-cycle pipeline delay, enabling accurate raster bar effects.",
|
|
285
|
+
},
|
|
286
|
+
{
|
|
287
|
+
title: "Mockingboard improvements",
|
|
288
|
+
description:
|
|
289
|
+
"Unified channel-centric debug window with inline waveforms, level meters, per-channel mute, and MAME-aligned PSG audio engine.",
|
|
290
|
+
},
|
|
291
|
+
{
|
|
292
|
+
title: "Window management",
|
|
293
|
+
description:
|
|
294
|
+
"Added window switcher overlay (Ctrl+`), Option+Tab cycling, focused window highlighting, viewport-lock for the screen, and auto-hiding toolbar in full-page mode.",
|
|
295
|
+
},
|
|
296
|
+
{
|
|
297
|
+
title: "Canvas-based disk surface",
|
|
298
|
+
description:
|
|
299
|
+
"Replaced disk drive PNG images with real-time canvas-rendered disk surfaces showing track position and read/write activity.",
|
|
300
|
+
},
|
|
301
|
+
{
|
|
302
|
+
title: "Core logic moved to WASM",
|
|
303
|
+
description:
|
|
304
|
+
"Migrated debug evaluation, filesystem parsing, BASIC detokenization, screen text extraction, and input handling from JavaScript to C++ WebAssembly.",
|
|
305
|
+
},
|
|
306
|
+
{
|
|
307
|
+
title: "Beam position breakpoints",
|
|
308
|
+
description:
|
|
309
|
+
"CPU debugger can now break at specific scanline and horizontal beam positions, with wildcard support and a multi-beam tab panel.",
|
|
310
|
+
},
|
|
311
|
+
{
|
|
312
|
+
title: "Dev menu",
|
|
313
|
+
description:
|
|
314
|
+
"New Dev menu grouping the Assembler and BASIC Program windows, with a dedicated category in the window switcher.",
|
|
315
|
+
},
|
|
316
|
+
{
|
|
317
|
+
title: "Color bleed CRT effect",
|
|
318
|
+
description:
|
|
319
|
+
"Added a color bleed shader parameter for more authentic CRT monitor appearance.",
|
|
320
|
+
},
|
|
321
|
+
{
|
|
322
|
+
title: "Merlin source viewer",
|
|
323
|
+
description:
|
|
324
|
+
"File Explorer can now display Merlin assembler source files from disk images.",
|
|
325
|
+
},
|
|
326
|
+
],
|
|
327
|
+
fixes: [
|
|
328
|
+
{
|
|
329
|
+
title: "Disk II accuracy",
|
|
330
|
+
description:
|
|
331
|
+
"Replaced the nibble-at-a-time disk model with a P6 ROM-driven Logic State Sequencer for cycle-accurate disk emulation.",
|
|
332
|
+
},
|
|
333
|
+
{
|
|
334
|
+
title: "Speaker audio quality",
|
|
335
|
+
description:
|
|
336
|
+
"Fixed speaker pitch drift on subsequent beeps and audio mixing clipping when speaker and Mockingboard play simultaneously.",
|
|
337
|
+
},
|
|
338
|
+
{
|
|
339
|
+
title: "AY-3-8910 sound chip",
|
|
340
|
+
description:
|
|
341
|
+
"Fixed noise LFSR polynomial, envelope timing, period-zero handling, PSG phase cancellation, and aligned output with MAME reference.",
|
|
342
|
+
},
|
|
343
|
+
{
|
|
344
|
+
title: "Double Low-Res rendering",
|
|
345
|
+
description:
|
|
346
|
+
"Fixed color rendering using wrong palette and missing auxiliary memory nibble rotation.",
|
|
347
|
+
},
|
|
348
|
+
{
|
|
349
|
+
title: "Paste performance",
|
|
350
|
+
description:
|
|
351
|
+
"Replaced slow keyboard-paste BASIC loading with instant direct memory insertion. Fixed paste queue setTimeout violations.",
|
|
352
|
+
},
|
|
353
|
+
{
|
|
354
|
+
title: "Theme consistency",
|
|
355
|
+
description:
|
|
356
|
+
"Fixed hardcoded dark-theme colors in CPU Debugger and BASIC Program windows.",
|
|
357
|
+
},
|
|
358
|
+
],
|
|
359
|
+
},
|
|
360
|
+
{
|
|
361
|
+
week: "January 26, 2026",
|
|
362
|
+
features: [
|
|
363
|
+
{
|
|
364
|
+
title: "Expansion card architecture",
|
|
365
|
+
description:
|
|
366
|
+
"Added a pluggable expansion card system matching real Apple IIe hardware, with an Expansion Slots configuration UI for managing cards in slots 1-7.",
|
|
367
|
+
},
|
|
368
|
+
{
|
|
369
|
+
title: "Thunderclock Plus",
|
|
370
|
+
description:
|
|
371
|
+
"ProDOS-compatible real-time clock card that provides the current date and time to software. Configurable for slot 5 or 7.",
|
|
372
|
+
},
|
|
373
|
+
{
|
|
374
|
+
title: "Dropdown menus",
|
|
375
|
+
description:
|
|
376
|
+
"Replaced header buttons with grouped dropdown menus (File, View, Debug, Dev, Help) for a cleaner toolbar.",
|
|
377
|
+
},
|
|
378
|
+
{
|
|
379
|
+
title: "Emulation speed multiplier",
|
|
380
|
+
description:
|
|
381
|
+
"Adjustable speed control for fast-forwarding through slow operations like BASIC program loading and disk access.",
|
|
382
|
+
},
|
|
383
|
+
{
|
|
384
|
+
title: "Mockingboard waveform scope",
|
|
385
|
+
description:
|
|
386
|
+
"Split Mockingboard window into detail and scope views with real-time waveform visualization and channel muting.",
|
|
387
|
+
},
|
|
388
|
+
{
|
|
389
|
+
title: "Stereo audio output",
|
|
390
|
+
description:
|
|
391
|
+
"Mockingboard now outputs in stereo with proper PSG channel separation between left and right speakers.",
|
|
392
|
+
},
|
|
393
|
+
{
|
|
394
|
+
title: "Viewport-lock for screen",
|
|
395
|
+
description:
|
|
396
|
+
"Screen window can be locked to fill the browser viewport, with proper aspect ratio enforcement.",
|
|
397
|
+
},
|
|
398
|
+
{
|
|
399
|
+
title: "Window option persistence",
|
|
400
|
+
description:
|
|
401
|
+
"All window toggle states, view modes, and mute settings are now saved between sessions via localStorage.",
|
|
402
|
+
},
|
|
403
|
+
],
|
|
404
|
+
fixes: [
|
|
405
|
+
{
|
|
406
|
+
title: "VIA 6522 timer interrupts",
|
|
407
|
+
description:
|
|
408
|
+
"Fixed timer interrupt handling on mode transitions and ensured timers always decrement for proper Mockingboard detection.",
|
|
409
|
+
},
|
|
410
|
+
{
|
|
411
|
+
title: "Mockingboard audio clipping",
|
|
412
|
+
description:
|
|
413
|
+
"Fixed audio timing, clipping, and output normalization issues in the Mockingboard sound engine.",
|
|
414
|
+
},
|
|
415
|
+
{
|
|
416
|
+
title: "PSG register timing",
|
|
417
|
+
description:
|
|
418
|
+
"Added timestamped PSG register writes for cycle-accurate audio, with proper bipolar AC-coupled output.",
|
|
419
|
+
},
|
|
420
|
+
{
|
|
421
|
+
title: "Window positioning",
|
|
422
|
+
description:
|
|
423
|
+
"Constrained all windows to visible viewport bounds and computed sensible default positions.",
|
|
424
|
+
},
|
|
425
|
+
{
|
|
426
|
+
title: "NTSC fringing in monochrome",
|
|
427
|
+
description:
|
|
428
|
+
"Monochrome display modes now correctly skip NTSC color artifact rendering.",
|
|
429
|
+
},
|
|
430
|
+
],
|
|
431
|
+
},
|
|
432
|
+
{
|
|
433
|
+
week: "January 19, 2026",
|
|
434
|
+
features: [
|
|
435
|
+
{
|
|
436
|
+
title: "Mockingboard sound card",
|
|
437
|
+
description:
|
|
438
|
+
"Dual AY-3-8910 PSG chips with VIA 6522 timers, providing stereo music and sound effects for supported software.",
|
|
439
|
+
},
|
|
440
|
+
{
|
|
441
|
+
title: "BASIC Program window",
|
|
442
|
+
description:
|
|
443
|
+
"Load Applesoft BASIC programs directly into emulator memory with IntelliSense autocomplete for keywords, variables, and line numbers.",
|
|
444
|
+
},
|
|
445
|
+
{
|
|
446
|
+
title: "Drag-to-move",
|
|
447
|
+
description:
|
|
448
|
+
"Monitor and disk drives can now be repositioned by dragging, with viewport constraint to keep everything on screen.",
|
|
449
|
+
},
|
|
450
|
+
{
|
|
451
|
+
title: "Recent disks",
|
|
452
|
+
description:
|
|
453
|
+
"Per-drive recent disks dropdown menus with clear option, so frequently used disk images are always one click away.",
|
|
454
|
+
},
|
|
455
|
+
{
|
|
456
|
+
title: "Disk persistence",
|
|
457
|
+
description:
|
|
458
|
+
"Inserted disk images and any modifications are preserved across browser sessions automatically.",
|
|
459
|
+
},
|
|
460
|
+
{
|
|
461
|
+
title: "Joystick window",
|
|
462
|
+
description:
|
|
463
|
+
"Floating joystick window for paddle and joystick input with snap-back-to-center behavior.",
|
|
464
|
+
},
|
|
465
|
+
{
|
|
466
|
+
title: "CRT shader enhancements",
|
|
467
|
+
description:
|
|
468
|
+
"Added rounded corners, edge highlights, and color fringing toggle for more realistic CRT monitor appearance.",
|
|
469
|
+
},
|
|
470
|
+
{
|
|
471
|
+
title: "Help system",
|
|
472
|
+
description:
|
|
473
|
+
"Comprehensive help window (F1) with documentation, plus release notes page with automatic update checking.",
|
|
474
|
+
},
|
|
475
|
+
],
|
|
476
|
+
fixes: [
|
|
477
|
+
{
|
|
478
|
+
title: "65C02 CPU compliance",
|
|
479
|
+
description:
|
|
480
|
+
"Fixed CPU emulation bugs discovered by Klaus Dormann's 65C02 functional test suite.",
|
|
481
|
+
},
|
|
482
|
+
{
|
|
483
|
+
title: "Double Lo-Res colors",
|
|
484
|
+
description:
|
|
485
|
+
"Corrected the color palette mapping for Double Lo-Res graphics mode.",
|
|
486
|
+
},
|
|
487
|
+
{
|
|
488
|
+
title: "Disk II stepper motor",
|
|
489
|
+
description:
|
|
490
|
+
"Fixed stepper motor timing to match real hardware quarter-track behavior.",
|
|
491
|
+
},
|
|
492
|
+
{
|
|
493
|
+
title: "Hi-Res color rendering",
|
|
494
|
+
description:
|
|
495
|
+
"Fixed alternating fill patterns for continuous colored lines and artifact color accuracy.",
|
|
496
|
+
},
|
|
497
|
+
{
|
|
498
|
+
title: "DSK disk corruption",
|
|
499
|
+
description:
|
|
500
|
+
"Fixed a bug that corrupted DSK disk images during write operations.",
|
|
501
|
+
},
|
|
502
|
+
{
|
|
503
|
+
title: "Keyboard and DHGR",
|
|
504
|
+
description:
|
|
505
|
+
"Fixed keyboard input issues and Double Hi-Res rendering problems.",
|
|
506
|
+
},
|
|
507
|
+
],
|
|
508
|
+
},
|
|
509
|
+
{
|
|
510
|
+
week: "January 12, 2026",
|
|
511
|
+
features: [
|
|
512
|
+
{
|
|
513
|
+
title: "File Explorer",
|
|
514
|
+
description:
|
|
515
|
+
"Browse the contents of DOS 3.3 and ProDOS disk images, view BASIC listings with syntax formatting, and disassemble binary files with recursive descent flow analysis.",
|
|
516
|
+
},
|
|
517
|
+
{
|
|
518
|
+
title: "C++ disassembler",
|
|
519
|
+
description:
|
|
520
|
+
"New disassembler running in WebAssembly with virtual scrolling, categorized symbols, clickable jump targets, and tooltips.",
|
|
521
|
+
},
|
|
522
|
+
{
|
|
523
|
+
title: "Monochrome display modes",
|
|
524
|
+
description:
|
|
525
|
+
"Green, amber, and white phosphor display modes that bypass NTSC artifact coloring for a classic terminal look.",
|
|
526
|
+
},
|
|
527
|
+
{
|
|
528
|
+
title: "Debug window system",
|
|
529
|
+
description:
|
|
530
|
+
"Movable, resizable debug windows with viewport constraints, minimum size enforcement, and state persistence. Includes Memory Map, heat map, and soft switch monitor.",
|
|
531
|
+
},
|
|
532
|
+
{
|
|
533
|
+
title: "Display settings window",
|
|
534
|
+
description:
|
|
535
|
+
"Converted display settings to a movable window with improved layout, brightness, contrast, saturation, and CRT effect controls.",
|
|
536
|
+
},
|
|
537
|
+
{
|
|
538
|
+
title: "Text selection",
|
|
539
|
+
description:
|
|
540
|
+
"Select and copy text directly from the emulator screen with Ctrl+C support and proper Apple II screen code conversion.",
|
|
541
|
+
},
|
|
542
|
+
{
|
|
543
|
+
title: "Full-page mode",
|
|
544
|
+
description:
|
|
545
|
+
"Expand the emulator to fill the entire browser window, exit with Ctrl+Escape.",
|
|
546
|
+
},
|
|
547
|
+
{
|
|
548
|
+
title: "Mobile layout",
|
|
549
|
+
description:
|
|
550
|
+
"Responsive layout with virtual keyboard support for mobile devices.",
|
|
551
|
+
},
|
|
552
|
+
{
|
|
553
|
+
title: "PWA support",
|
|
554
|
+
description:
|
|
555
|
+
"Progressive Web App with offline functionality, service worker caching, and an update notification button.",
|
|
556
|
+
},
|
|
557
|
+
{
|
|
558
|
+
title: "UK/US character set",
|
|
559
|
+
description:
|
|
560
|
+
"Toggle between UK and US character ROMs with persistent setting.",
|
|
561
|
+
},
|
|
562
|
+
{
|
|
563
|
+
title: "Sound controls",
|
|
564
|
+
description:
|
|
565
|
+
"Volume slider, mute toggle, and disk drive seek sound with persistent settings.",
|
|
566
|
+
},
|
|
567
|
+
{
|
|
568
|
+
title: "State persistence",
|
|
569
|
+
description:
|
|
570
|
+
"Auto-save emulator state on exit and restore on reload, including all window positions and sizes.",
|
|
571
|
+
},
|
|
572
|
+
],
|
|
573
|
+
fixes: [
|
|
574
|
+
{
|
|
575
|
+
title: "Memory banking",
|
|
576
|
+
description:
|
|
577
|
+
"Fixed Language Card write behavior, double-read requirement, 80STORE banking, and expansion ROM space handling ($C800-$CFFF).",
|
|
578
|
+
},
|
|
579
|
+
{
|
|
580
|
+
title: "Soft switches",
|
|
581
|
+
description:
|
|
582
|
+
"Fixed read side effects for $C000-$C00F, INTCXROM handling, and comprehensive soft switch support.",
|
|
583
|
+
},
|
|
584
|
+
{
|
|
585
|
+
title: "WOZ disk timing",
|
|
586
|
+
description:
|
|
587
|
+
"Fixed WOZ disk write/read timing and added disk image export functionality.",
|
|
588
|
+
},
|
|
589
|
+
{
|
|
590
|
+
title: "Hi-Res and Double Hi-Res",
|
|
591
|
+
description:
|
|
592
|
+
"Fixed DHR mode detection, 80-column text rendering, and hi-res graphics artifact colors.",
|
|
593
|
+
},
|
|
594
|
+
{
|
|
595
|
+
title: "Character ROM",
|
|
596
|
+
description:
|
|
597
|
+
"Fixed Enhanced character ROM rendering and flash character display.",
|
|
598
|
+
},
|
|
599
|
+
],
|
|
600
|
+
},
|
|
601
|
+
{
|
|
602
|
+
week: "January 5, 2026",
|
|
603
|
+
features: [
|
|
604
|
+
{
|
|
605
|
+
title: "Initial release",
|
|
606
|
+
description:
|
|
607
|
+
"Apple //e emulator with cycle-accurate 65C02 CPU, audio-driven frame sync at 60Hz, Disk II controller with DSK/DO/PO/NIB/WOZ support, WebGL rendering, and CRT shader effects.",
|
|
608
|
+
},
|
|
609
|
+
],
|
|
610
|
+
fixes: [],
|
|
611
|
+
},
|
|
612
|
+
];
|