jsbeeb 1.1.1
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/.editorconfig +15 -0
- package/.git-blame-ignore-revs +3 -0
- package/.github/copilot-instructions.md +94 -0
- package/.github/workflows/claude-issue-triage.yml +105 -0
- package/.github/workflows/claude.yml +63 -0
- package/.github/workflows/release-please.yml +75 -0
- package/.github/workflows/test-and-deploy.yml +86 -0
- package/.gitmodules +6 -0
- package/.husky/pre-commit +1 -0
- package/.idea/codeStyleSettings.xml +9 -0
- package/.idea/codeStyles/Project.xml +62 -0
- package/.idea/codeStyles/codeStyleConfig.xml +5 -0
- package/.idea/compiler.xml +22 -0
- package/.idea/copyright/profiles_settings.xml +3 -0
- package/.idea/encodings.xml +6 -0
- package/.idea/inspectionProfiles/Project_Default.xml +7 -0
- package/.idea/jsLibraryMappings.xml +6 -0
- package/.idea/jsLinters/jshint.xml +85 -0
- package/.idea/jsLinters/jslint.xml +15 -0
- package/.idea/jsbeeb.iml +11 -0
- package/.idea/misc.xml +6 -0
- package/.idea/modules.xml +8 -0
- package/.idea/prettier.xml +7 -0
- package/.idea/runConfigurations/Debug.xml +5 -0
- package/.idea/scopes/scope_settings.xml +5 -0
- package/.idea/vcs.xml +8 -0
- package/.prettierignore +4 -0
- package/.prettierrc.json +1 -0
- package/.release-please-manifest.json +3 -0
- package/.vscode/launch.json +14 -0
- package/.vscode/settings.json +6 -0
- package/CHANGELOG.md +32 -0
- package/CLAUDE.md +136 -0
- package/COPYING +674 -0
- package/Dockerfile +22 -0
- package/Makefile +30 -0
- package/README.md +259 -0
- package/docker/nginx-default.conf +10 -0
- package/docs/pal-comb-filter-research.md +129 -0
- package/docs/pal-simulation-design.md +368 -0
- package/eslint.config.js +35 -0
- package/index.html +954 -0
- package/jsconfig.json +10 -0
- package/package.json +102 -0
- package/public/discs/README.Irq-Timing +3 -0
- package/public/discs/README.bcdtest +5 -0
- package/public/discs/README.elite +6 -0
- package/public/discs/README.eng_test +3 -0
- package/public/discs/README.protection +7 -0
- package/public/favicon.ico +0 -0
- package/public/images/botbar.png +0 -0
- package/public/images/cub-monitor.png +0 -0
- package/public/images/jsbeeb-example.png +0 -0
- package/public/images/placeholder.png +0 -0
- package/public/images/red-off-16.png +0 -0
- package/public/images/red-on-16.png +0 -0
- package/public/images/sb/CD-left.jpg +0 -0
- package/public/images/sb/CD-right.jpg +0 -0
- package/public/images/sidebar.png +0 -0
- package/public/images/tv.png +0 -0
- package/public/images/yellow-off-16.png +0 -0
- package/public/images/yellow-on-16.png +0 -0
- package/public/jsbeeb-icon.png +0 -0
- package/public/robots.txt +3 -0
- package/public/roms/ADFS1-53.rom +0 -0
- package/public/roms/BASIC.ROM +0 -0
- package/public/roms/README +4 -0
- package/public/roms/a01/BASIC1.rom +0 -0
- package/public/roms/ample.rom +0 -0
- package/public/roms/ats-3.0.rom +0 -0
- package/public/roms/b/DFS-0.9.rom +0 -0
- package/public/roms/b/DFS-1.2.rom +0 -0
- package/public/roms/b1770/dfs1770.rom +0 -0
- package/public/roms/b1770/zADFS.ROM +0 -0
- package/public/roms/bp/dfs.rom +0 -0
- package/public/roms/bp/zADFS.ROM +0 -0
- package/public/roms/bpos.rom +0 -0
- package/public/roms/compact/adfs210.rom +0 -0
- package/public/roms/compact/basic48.rom +0 -0
- package/public/roms/compact/basic486.rom +0 -0
- package/public/roms/compact/os51.rom +0 -0
- package/public/roms/compact/utils.rom +0 -0
- package/public/roms/deos.rom +0 -0
- package/public/roms/master/anfs-4.25.rom +0 -0
- package/public/roms/master/mos.txt +68819 -0
- package/public/roms/master/mos3.20 +0 -0
- package/public/roms/os.rom +0 -0
- package/public/roms/os01.rom +0 -0
- package/public/roms/tube/6502Tube.rom +0 -0
- package/public/roms/tube/ARMeval_100.rom +0 -0
- package/public/roms/tube/BIOS.ROM +0 -0
- package/public/roms/tube/ReCo6502ROM_816 +0 -0
- package/public/roms/tube/Z80_120.rom +0 -0
- package/public/roms/us/USBASIC.rom +0 -0
- package/public/roms/us/USDNFS.rom +0 -0
- package/public/roms/usmos.rom +0 -0
- package/public/sounds/disc525/motor.wav +0 -0
- package/public/sounds/disc525/motoroff.wav +0 -0
- package/public/sounds/disc525/motoron.wav +0 -0
- package/public/sounds/disc525/seek.wav +0 -0
- package/public/sounds/disc525/seek2.wav +0 -0
- package/public/sounds/disc525/seek3.wav +0 -0
- package/public/sounds/disc525/step.wav +0 -0
- package/public/teletext/txt0.dat +0 -0
- package/public/teletext/txt1.dat +0 -0
- package/public/teletext/txt2.dat +0 -0
- package/public/teletext/txt3.dat +0 -0
- package/release-please-config.json +13 -0
- package/run-container.sh +92 -0
- package/src/6502.js +1347 -0
- package/src/6502.opcodes.js +1411 -0
- package/src/acia.js +261 -0
- package/src/adc.js +149 -0
- package/src/analogue-source.js +21 -0
- package/src/app/app.js +175 -0
- package/src/app/electron.js +20 -0
- package/src/app/preload.js +8 -0
- package/src/app-bench.js +33 -0
- package/src/basic/multiline-tetris +9 -0
- package/src/basic-tokenise.js +104 -0
- package/src/canvas.js +177 -0
- package/src/cmos.js +141 -0
- package/src/config.js +165 -0
- package/src/ddnoise.js +138 -0
- package/src/disc-drive.js +371 -0
- package/src/disc-hfe.js +396 -0
- package/src/disc.js +997 -0
- package/src/econet/L3FS.dat +0 -0
- package/src/econet/scsi.dat +0 -0
- package/src/econet.js +714 -0
- package/src/fake6502.js +32 -0
- package/src/fdc.js +248 -0
- package/src/filestore.js +666 -0
- package/src/gamepad-source.js +59 -0
- package/src/gamepads.js +268 -0
- package/src/google-drive.js +160 -0
- package/src/intel-fdc.js +1717 -0
- package/src/jsbeeb.css +363 -0
- package/src/keyboard.js +411 -0
- package/src/lib/README +1 -0
- package/src/lib/webgl-debug.js +911 -0
- package/src/main.js +1759 -0
- package/src/microphone-input.js +149 -0
- package/src/models.js +200 -0
- package/src/mouse-joystick-source.js +107 -0
- package/src/music5000-worklet.js +43 -0
- package/src/music5000.js +207 -0
- package/src/scheduler.js +148 -0
- package/src/serial.js +31 -0
- package/src/soundchip.js +314 -0
- package/src/sth.js +59 -0
- package/src/tapes.js +265 -0
- package/src/teletext.js +348 -0
- package/src/teletext_adaptor.js +172 -0
- package/src/teletext_data.js +1064 -0
- package/src/touchscreen.js +86 -0
- package/src/tube.js +349 -0
- package/src/url-params.js +256 -0
- package/src/utils.js +1090 -0
- package/src/via.js +702 -0
- package/src/video-filters/pal-composite.js +94 -0
- package/src/video-filters/passthrough-filter.js +70 -0
- package/src/video-filters/shaders/pal-composite.frag.glsl +147 -0
- package/src/video-filters/shaders/pal-composite.vert.glsl +8 -0
- package/src/video-filters/shaders/passthrough.frag.glsl +6 -0
- package/src/video-filters/shaders/passthrough.vert.glsl +7 -0
- package/src/video.js +794 -0
- package/src/wd-fdc.js +1344 -0
- package/src/web/audio-handler.js +146 -0
- package/src/web/audio-renderer.js +115 -0
- package/src/web/debug.js +529 -0
- package/tests/integration/RmwX.asm +47 -0
- package/tests/integration/TestInstructionsSource +27 -0
- package/tests/integration/TestTimingsResults +27 -0
- package/tests/integration/TestTimingsSource +61 -0
- package/tests/integration/bcd.js +23 -0
- package/tests/integration/dormann.js +101 -0
- package/tests/integration/dp111timing.js +42 -0
- package/tests/integration/ensure-submodules.js +25 -0
- package/tests/integration/nops.bas +119 -0
- package/tests/integration/nops.js +24 -0
- package/tests/integration/protection.js +26 -0
- package/tests/integration/rmw.js +69 -0
- package/tests/integration/teletext/expected_bug_469.png +0 -0
- package/tests/integration/teletext/expected_flash_0.png +0 -0
- package/tests/integration/teletext/expected_flash_1.png +0 -0
- package/tests/integration/teletext/expected_hoglet_held_char.png +0 -0
- package/tests/integration/teletext/expected_reveal_flash_0.png +0 -0
- package/tests/integration/teletext/expected_reveal_flash_1.png +0 -0
- package/tests/integration/teletext.js +126 -0
- package/tests/integration/timings.js +56 -0
- package/tests/integration/via.js +1125 -0
- package/tests/suite/README.md +7 -0
- package/tests/suite/Test Suite 2.15.txt +373 -0
- package/tests/suite/bin/ start +0 -0
- package/tests/suite/bin/adca +0 -0
- package/tests/suite/bin/adcax +0 -0
- package/tests/suite/bin/adcay +0 -0
- package/tests/suite/bin/adcb +0 -0
- package/tests/suite/bin/adcix +0 -0
- package/tests/suite/bin/adciy +0 -0
- package/tests/suite/bin/adcz +0 -0
- package/tests/suite/bin/adczx +0 -0
- package/tests/suite/bin/alrb +0 -0
- package/tests/suite/bin/ancb +0 -0
- package/tests/suite/bin/anda +0 -0
- package/tests/suite/bin/andax +0 -0
- package/tests/suite/bin/anday +0 -0
- package/tests/suite/bin/andb +0 -0
- package/tests/suite/bin/andix +0 -0
- package/tests/suite/bin/andiy +0 -0
- package/tests/suite/bin/andz +0 -0
- package/tests/suite/bin/andzx +0 -0
- package/tests/suite/bin/aneb +0 -0
- package/tests/suite/bin/arrb +0 -0
- package/tests/suite/bin/asla +0 -0
- package/tests/suite/bin/aslax +0 -0
- package/tests/suite/bin/asln +0 -0
- package/tests/suite/bin/aslz +0 -0
- package/tests/suite/bin/aslzx +0 -0
- package/tests/suite/bin/asoa +0 -0
- package/tests/suite/bin/asoax +0 -0
- package/tests/suite/bin/asoay +0 -0
- package/tests/suite/bin/asoix +0 -0
- package/tests/suite/bin/asoiy +0 -0
- package/tests/suite/bin/asoz +0 -0
- package/tests/suite/bin/asozx +0 -0
- package/tests/suite/bin/axsa +0 -0
- package/tests/suite/bin/axsix +0 -0
- package/tests/suite/bin/axsz +0 -0
- package/tests/suite/bin/axszy +0 -0
- package/tests/suite/bin/bccr +0 -0
- package/tests/suite/bin/bcsr +0 -0
- package/tests/suite/bin/beqr +0 -0
- package/tests/suite/bin/bita +0 -0
- package/tests/suite/bin/bitz +0 -0
- package/tests/suite/bin/bmir +0 -0
- package/tests/suite/bin/bner +0 -0
- package/tests/suite/bin/bplr +0 -0
- package/tests/suite/bin/branchwrap +0 -0
- package/tests/suite/bin/brkn +0 -0
- package/tests/suite/bin/bvcr +0 -0
- package/tests/suite/bin/bvsr +0 -0
- package/tests/suite/bin/cia1pb6 +0 -0
- package/tests/suite/bin/cia1pb7 +0 -0
- package/tests/suite/bin/cia1ta +0 -0
- package/tests/suite/bin/cia1tab +0 -0
- package/tests/suite/bin/cia1tb +0 -0
- package/tests/suite/bin/cia1tb123 +0 -0
- package/tests/suite/bin/cia2pb6 +0 -0
- package/tests/suite/bin/cia2pb7 +0 -0
- package/tests/suite/bin/cia2ta +0 -0
- package/tests/suite/bin/cia2tb +0 -0
- package/tests/suite/bin/cia2tb123 +0 -0
- package/tests/suite/bin/clcn +0 -0
- package/tests/suite/bin/cldn +0 -0
- package/tests/suite/bin/clin +0 -0
- package/tests/suite/bin/clvn +0 -0
- package/tests/suite/bin/cmpa +0 -0
- package/tests/suite/bin/cmpax +0 -0
- package/tests/suite/bin/cmpay +0 -0
- package/tests/suite/bin/cmpb +0 -0
- package/tests/suite/bin/cmpix +0 -0
- package/tests/suite/bin/cmpiy +0 -0
- package/tests/suite/bin/cmpz +0 -0
- package/tests/suite/bin/cmpzx +0 -0
- package/tests/suite/bin/cntdef +0 -0
- package/tests/suite/bin/cnto2 +0 -0
- package/tests/suite/bin/cpuport +0 -0
- package/tests/suite/bin/cputiming +0 -0
- package/tests/suite/bin/cpxa +0 -0
- package/tests/suite/bin/cpxb +0 -0
- package/tests/suite/bin/cpxz +0 -0
- package/tests/suite/bin/cpya +0 -0
- package/tests/suite/bin/cpyb +0 -0
- package/tests/suite/bin/cpyz +0 -0
- package/tests/suite/bin/dcma +0 -0
- package/tests/suite/bin/dcmax +0 -0
- package/tests/suite/bin/dcmay +0 -0
- package/tests/suite/bin/dcmix +0 -0
- package/tests/suite/bin/dcmiy +0 -0
- package/tests/suite/bin/dcmz +0 -0
- package/tests/suite/bin/dcmzx +0 -0
- package/tests/suite/bin/deca +0 -0
- package/tests/suite/bin/decax +0 -0
- package/tests/suite/bin/decz +0 -0
- package/tests/suite/bin/deczx +0 -0
- package/tests/suite/bin/dexn +0 -0
- package/tests/suite/bin/deyn +0 -0
- package/tests/suite/bin/eora +0 -0
- package/tests/suite/bin/eorax +0 -0
- package/tests/suite/bin/eoray +0 -0
- package/tests/suite/bin/eorb +0 -0
- package/tests/suite/bin/eorix +0 -0
- package/tests/suite/bin/eoriy +0 -0
- package/tests/suite/bin/eorz +0 -0
- package/tests/suite/bin/eorzx +0 -0
- package/tests/suite/bin/finish +0 -0
- package/tests/suite/bin/flipos +0 -0
- package/tests/suite/bin/icr01 +0 -0
- package/tests/suite/bin/imr +0 -0
- package/tests/suite/bin/inca +0 -0
- package/tests/suite/bin/incax +0 -0
- package/tests/suite/bin/incz +0 -0
- package/tests/suite/bin/inczx +0 -0
- package/tests/suite/bin/insa +0 -0
- package/tests/suite/bin/insax +0 -0
- package/tests/suite/bin/insay +0 -0
- package/tests/suite/bin/insix +0 -0
- package/tests/suite/bin/insiy +0 -0
- package/tests/suite/bin/insz +0 -0
- package/tests/suite/bin/inszx +0 -0
- package/tests/suite/bin/inxn +0 -0
- package/tests/suite/bin/inyn +0 -0
- package/tests/suite/bin/irq +0 -0
- package/tests/suite/bin/jmpi +0 -0
- package/tests/suite/bin/jmpw +0 -0
- package/tests/suite/bin/jsrw +0 -0
- package/tests/suite/bin/lasay +0 -0
- package/tests/suite/bin/laxa +0 -0
- package/tests/suite/bin/laxay +0 -0
- package/tests/suite/bin/laxix +0 -0
- package/tests/suite/bin/laxiy +0 -0
- package/tests/suite/bin/laxz +0 -0
- package/tests/suite/bin/laxzy +0 -0
- package/tests/suite/bin/ldaa +0 -0
- package/tests/suite/bin/ldaax +0 -0
- package/tests/suite/bin/ldaay +0 -0
- package/tests/suite/bin/ldab +0 -0
- package/tests/suite/bin/ldaix +0 -0
- package/tests/suite/bin/ldaiy +0 -0
- package/tests/suite/bin/ldaz +0 -0
- package/tests/suite/bin/ldazx +0 -0
- package/tests/suite/bin/ldxa +0 -0
- package/tests/suite/bin/ldxay +0 -0
- package/tests/suite/bin/ldxb +0 -0
- package/tests/suite/bin/ldxz +0 -0
- package/tests/suite/bin/ldxzy +0 -0
- package/tests/suite/bin/ldya +0 -0
- package/tests/suite/bin/ldyax +0 -0
- package/tests/suite/bin/ldyb +0 -0
- package/tests/suite/bin/ldyz +0 -0
- package/tests/suite/bin/ldyzx +0 -0
- package/tests/suite/bin/loadth +0 -0
- package/tests/suite/bin/lsea +0 -0
- package/tests/suite/bin/lseax +0 -0
- package/tests/suite/bin/lseay +0 -0
- package/tests/suite/bin/lseix +0 -0
- package/tests/suite/bin/lseiy +0 -0
- package/tests/suite/bin/lsez +0 -0
- package/tests/suite/bin/lsezx +0 -0
- package/tests/suite/bin/lsra +0 -0
- package/tests/suite/bin/lsrax +0 -0
- package/tests/suite/bin/lsrn +0 -0
- package/tests/suite/bin/lsrz +0 -0
- package/tests/suite/bin/lsrzx +0 -0
- package/tests/suite/bin/lxab +0 -0
- package/tests/suite/bin/mmu +0 -0
- package/tests/suite/bin/mmufetch +0 -0
- package/tests/suite/bin/nmi +0 -0
- package/tests/suite/bin/nopa +0 -0
- package/tests/suite/bin/nopax +0 -0
- package/tests/suite/bin/nopb +0 -0
- package/tests/suite/bin/nopn +0 -0
- package/tests/suite/bin/nopz +0 -0
- package/tests/suite/bin/nopzx +0 -0
- package/tests/suite/bin/oneshot +0 -0
- package/tests/suite/bin/oraa +0 -0
- package/tests/suite/bin/oraax +0 -0
- package/tests/suite/bin/oraay +0 -0
- package/tests/suite/bin/orab +0 -0
- package/tests/suite/bin/oraix +0 -0
- package/tests/suite/bin/oraiy +0 -0
- package/tests/suite/bin/oraz +0 -0
- package/tests/suite/bin/orazx +0 -0
- package/tests/suite/bin/phan +0 -0
- package/tests/suite/bin/phpn +0 -0
- package/tests/suite/bin/plan +0 -0
- package/tests/suite/bin/plpn +0 -0
- package/tests/suite/bin/rlaa +0 -0
- package/tests/suite/bin/rlaax +0 -0
- package/tests/suite/bin/rlaay +0 -0
- package/tests/suite/bin/rlaix +0 -0
- package/tests/suite/bin/rlaiy +0 -0
- package/tests/suite/bin/rlaz +0 -0
- package/tests/suite/bin/rlazx +0 -0
- package/tests/suite/bin/rola +0 -0
- package/tests/suite/bin/rolax +0 -0
- package/tests/suite/bin/roln +0 -0
- package/tests/suite/bin/rolz +0 -0
- package/tests/suite/bin/rolzx +0 -0
- package/tests/suite/bin/rora +0 -0
- package/tests/suite/bin/rorax +0 -0
- package/tests/suite/bin/rorn +0 -0
- package/tests/suite/bin/rorz +0 -0
- package/tests/suite/bin/rorzx +0 -0
- package/tests/suite/bin/rraa +0 -0
- package/tests/suite/bin/rraax +0 -0
- package/tests/suite/bin/rraay +0 -0
- package/tests/suite/bin/rraix +0 -0
- package/tests/suite/bin/rraiy +0 -0
- package/tests/suite/bin/rraz +0 -0
- package/tests/suite/bin/rrazx +0 -0
- package/tests/suite/bin/rtin +0 -0
- package/tests/suite/bin/rtsn +0 -0
- package/tests/suite/bin/sbca +0 -0
- package/tests/suite/bin/sbcax +0 -0
- package/tests/suite/bin/sbcay +0 -0
- package/tests/suite/bin/sbcb +0 -0
- package/tests/suite/bin/sbcb(eb) +0 -0
- package/tests/suite/bin/sbcix +0 -0
- package/tests/suite/bin/sbciy +0 -0
- package/tests/suite/bin/sbcz +0 -0
- package/tests/suite/bin/sbczx +0 -0
- package/tests/suite/bin/sbxb +0 -0
- package/tests/suite/bin/secn +0 -0
- package/tests/suite/bin/sedn +0 -0
- package/tests/suite/bin/sein +0 -0
- package/tests/suite/bin/shaay +0 -0
- package/tests/suite/bin/shaiy +0 -0
- package/tests/suite/bin/shsay +0 -0
- package/tests/suite/bin/shxay +0 -0
- package/tests/suite/bin/shyax +0 -0
- package/tests/suite/bin/staa +0 -0
- package/tests/suite/bin/staax +0 -0
- package/tests/suite/bin/staay +0 -0
- package/tests/suite/bin/staix +0 -0
- package/tests/suite/bin/staiy +0 -0
- package/tests/suite/bin/staz +0 -0
- package/tests/suite/bin/stazx +0 -0
- package/tests/suite/bin/stxa +0 -0
- package/tests/suite/bin/stxz +0 -0
- package/tests/suite/bin/stxzy +0 -0
- package/tests/suite/bin/stya +0 -0
- package/tests/suite/bin/styz +0 -0
- package/tests/suite/bin/styzx +0 -0
- package/tests/suite/bin/taxn +0 -0
- package/tests/suite/bin/tayn +0 -0
- package/tests/suite/bin/trap1 +0 -0
- package/tests/suite/bin/trap10 +0 -0
- package/tests/suite/bin/trap11 +0 -0
- package/tests/suite/bin/trap12 +0 -0
- package/tests/suite/bin/trap13 +0 -0
- package/tests/suite/bin/trap14 +0 -0
- package/tests/suite/bin/trap15 +0 -0
- package/tests/suite/bin/trap16 +0 -0
- package/tests/suite/bin/trap17 +0 -0
- package/tests/suite/bin/trap2 +0 -0
- package/tests/suite/bin/trap3 +0 -0
- package/tests/suite/bin/trap4 +0 -0
- package/tests/suite/bin/trap5 +0 -0
- package/tests/suite/bin/trap6 +0 -0
- package/tests/suite/bin/trap7 +0 -0
- package/tests/suite/bin/trap8 +0 -0
- package/tests/suite/bin/trap9 +0 -0
- package/tests/suite/bin/tsxn +0 -0
- package/tests/suite/bin/txan +0 -0
- package/tests/suite/bin/txsn +0 -0
- package/tests/suite/bin/tyan +0 -0
- package/tests/suite/cbm-hackers-post.html +178 -0
- package/tests/suite/cbm-hackers-post.md +78 -0
- package/tests/test-machine.js +288 -0
- package/tests/test-suite.js +147 -0
- package/tests/test.css +7 -0
- package/tests/unit/gzip/test-1 +0 -0
- package/tests/unit/gzip/test-1.gz +0 -0
- package/tests/unit/gzip/test-2 +0 -0
- package/tests/unit/gzip/test-2.gz +0 -0
- package/tests/unit/gzip/test-3 +0 -0
- package/tests/unit/gzip/test-3.gz +0 -0
- package/tests/unit/gzip/test-4 +0 -0
- package/tests/unit/gzip/test-4.gz +0 -0
- package/tests/unit/test-adc.js +307 -0
- package/tests/unit/test-bcd.js +30 -0
- package/tests/unit/test-cmos.js +266 -0
- package/tests/unit/test-disc-drive.js +85 -0
- package/tests/unit/test-disc-hfe.js +347 -0
- package/tests/unit/test-disc.js +232 -0
- package/tests/unit/test-fifo.js +35 -0
- package/tests/unit/test-gamepad-source.js +67 -0
- package/tests/unit/test-gzip.js +22 -0
- package/tests/unit/test-intel-fdc.js +93 -0
- package/tests/unit/test-keyboard.js +410 -0
- package/tests/unit/test-mouse-joystick-source.js +128 -0
- package/tests/unit/test-scheduler.js +190 -0
- package/tests/unit/test-serial.js +154 -0
- package/tests/unit/test-teletext-adaptor.js +359 -0
- package/tests/unit/test-tokenise.js +65 -0
- package/tests/unit/test-url-params.js +398 -0
- package/tests/unit/test-utils.js +276 -0
- package/tests/unit/test-video.js +498 -0
- package/tests/unit/test-zip.js +56 -0
- package/tests/unit/zip/test-mixed.zip +0 -0
- package/tests/unit/zip/test-rom.zip +0 -0
- package/tests/unit/zip/test-ssd.zip +0 -0
- package/tools/fir-generator.js +80 -0
- package/tools/vite-plugin-fir-shader.js +131 -0
- package/vite.config.js +34 -0
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<project version="4">
|
|
3
|
+
<component name="JSHintConfiguration" version="2.10.2" use-config-file="true">
|
|
4
|
+
<option asi="false" />
|
|
5
|
+
<option bitwise="false" />
|
|
6
|
+
<option boss="false" />
|
|
7
|
+
<option browser="true" />
|
|
8
|
+
<option browserify="false" />
|
|
9
|
+
<option camelcase="false" />
|
|
10
|
+
<option couch="false" />
|
|
11
|
+
<option curly="false" />
|
|
12
|
+
<option debug="false" />
|
|
13
|
+
<option devel="false" />
|
|
14
|
+
<option dojo="false" />
|
|
15
|
+
<option elision="false" />
|
|
16
|
+
<option enforceall="false" />
|
|
17
|
+
<option eqeqeq="true" />
|
|
18
|
+
<option eqnull="false" />
|
|
19
|
+
<option es3="false" />
|
|
20
|
+
<option es5="false" />
|
|
21
|
+
<option esnext="false" />
|
|
22
|
+
<option evil="false" />
|
|
23
|
+
<option expr="false" />
|
|
24
|
+
<option forin="true" />
|
|
25
|
+
<option freeze="false" />
|
|
26
|
+
<option funcscope="false" />
|
|
27
|
+
<option futurehostile="false" />
|
|
28
|
+
<option gcl="false" />
|
|
29
|
+
<option globalstrict="false" />
|
|
30
|
+
<option immed="false" />
|
|
31
|
+
<option iterator="false" />
|
|
32
|
+
<option jasmine="false" />
|
|
33
|
+
<option jquery="false" />
|
|
34
|
+
<option lastsemic="false" />
|
|
35
|
+
<option latedef="false" />
|
|
36
|
+
<option laxbreak="false" />
|
|
37
|
+
<option laxcomma="false" />
|
|
38
|
+
<option loopfunc="false" />
|
|
39
|
+
<option maxerr="50" />
|
|
40
|
+
<option mocha="false" />
|
|
41
|
+
<option module="false" />
|
|
42
|
+
<option mootools="false" />
|
|
43
|
+
<option moz="false" />
|
|
44
|
+
<option multistr="false" />
|
|
45
|
+
<option newcap="false" />
|
|
46
|
+
<option noarg="true" />
|
|
47
|
+
<option nocomma="false" />
|
|
48
|
+
<option node="false" />
|
|
49
|
+
<option noempty="true" />
|
|
50
|
+
<option nomen="false" />
|
|
51
|
+
<option nonbsp="false" />
|
|
52
|
+
<option nonew="true" />
|
|
53
|
+
<option nonstandard="false" />
|
|
54
|
+
<option notypeof="false" />
|
|
55
|
+
<option noyield="false" />
|
|
56
|
+
<option onevar="false" />
|
|
57
|
+
<option passfail="false" />
|
|
58
|
+
<option phantom="false" />
|
|
59
|
+
<option plusplus="false" />
|
|
60
|
+
<option proto="false" />
|
|
61
|
+
<option prototypejs="false" />
|
|
62
|
+
<option qunit="false" />
|
|
63
|
+
<option quotmark="false" />
|
|
64
|
+
<option rhino="false" />
|
|
65
|
+
<option scripturl="false" />
|
|
66
|
+
<option shadow="false" />
|
|
67
|
+
<option shelljs="false" />
|
|
68
|
+
<option singleGroups="false" />
|
|
69
|
+
<option smarttabs="false" />
|
|
70
|
+
<option strict="true" />
|
|
71
|
+
<option sub="false" />
|
|
72
|
+
<option supernew="false" />
|
|
73
|
+
<option trailing="false" />
|
|
74
|
+
<option typed="false" />
|
|
75
|
+
<option undef="true" />
|
|
76
|
+
<option unused="false" />
|
|
77
|
+
<option validthis="false" />
|
|
78
|
+
<option varstmt="false" />
|
|
79
|
+
<option white="false" />
|
|
80
|
+
<option withstmt="false" />
|
|
81
|
+
<option worker="false" />
|
|
82
|
+
<option wsh="false" />
|
|
83
|
+
<option yui="false" />
|
|
84
|
+
</component>
|
|
85
|
+
</project>
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<project version="4">
|
|
3
|
+
<component name="JSLintConfiguration">
|
|
4
|
+
<option bitwise="true" />
|
|
5
|
+
<option browser="true" />
|
|
6
|
+
<option devel="true" />
|
|
7
|
+
<option indent="4" />
|
|
8
|
+
<option maxerr="50" />
|
|
9
|
+
<option maxlen="100" />
|
|
10
|
+
<option node="true" />
|
|
11
|
+
<option plusplus="true" />
|
|
12
|
+
<option predef="window,Uint8Array,Uint16Array,Uint32Array,Int8Array,Int16Array,Int32Array,define" />
|
|
13
|
+
<option vars="true" />
|
|
14
|
+
</component>
|
|
15
|
+
</project>
|
package/.idea/jsbeeb.iml
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<module type="WEB_MODULE" version="4">
|
|
3
|
+
<component name="NewModuleRootManager">
|
|
4
|
+
<content url="file://$MODULE_DIR$">
|
|
5
|
+
<sourceFolder url="file://$MODULE_DIR$/tests" isTestSource="true" />
|
|
6
|
+
<excludeFolder url="file://$MODULE_DIR$/out" />
|
|
7
|
+
</content>
|
|
8
|
+
<orderEntry type="inheritedJdk" />
|
|
9
|
+
<orderEntry type="sourceFolder" forTests="false" />
|
|
10
|
+
</component>
|
|
11
|
+
</module>
|
package/.idea/misc.xml
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
<project version="4">
|
|
2
|
+
<component name="JavaScriptSettings">
|
|
3
|
+
<option name="languageLevel" value="ES6" />
|
|
4
|
+
</component>
|
|
5
|
+
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_3" default="false" project-jdk-name="Python 3.6 (compiler-explorer-image)" project-jdk-type="Python SDK" />
|
|
6
|
+
</project>
|
package/.idea/vcs.xml
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<project version="4">
|
|
3
|
+
<component name="VcsDirectoryMappings">
|
|
4
|
+
<mapping directory="$PROJECT_DIR$" vcs="Git" />
|
|
5
|
+
<mapping directory="$PROJECT_DIR$/tests/6502_65C02_functional_tests" vcs="Git" />
|
|
6
|
+
<mapping directory="$PROJECT_DIR$/tests/integration/dp111_6502Timing" vcs="Git" />
|
|
7
|
+
</component>
|
|
8
|
+
</project>
|
package/.prettierignore
ADDED
package/.prettierrc.json
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "0.2.0",
|
|
3
|
+
"configurations": [
|
|
4
|
+
{
|
|
5
|
+
"type": "chrome",
|
|
6
|
+
"request": "launch",
|
|
7
|
+
"name": "Debug a running dev server",
|
|
8
|
+
"url": "http://localhost:8080?logFdcStateChanges&logFdcCommands&model=MasterADFS&disc=CodenameDroid-ADFS_E.adf",
|
|
9
|
+
"webRoot": "${workspaceFolder}",
|
|
10
|
+
"sourceMaps": true,
|
|
11
|
+
"trace": true
|
|
12
|
+
}
|
|
13
|
+
]
|
|
14
|
+
}
|
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## [1.1.1](https://github.com/mattgodbolt/jsbeeb/compare/v1.1.0...v1.1.1) (2025-11-21)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Bug Fixes
|
|
7
|
+
|
|
8
|
+
* Fix Windows Build support ([8ffa1a0](https://github.com/mattgodbolt/jsbeeb/commit/8ffa1a037fdfd7e38e072dca65da5b1959823fb2))
|
|
9
|
+
|
|
10
|
+
## [1.1.0](https://github.com/mattgodbolt/jsbeeb/compare/v1.0.1...v1.1.0) (2025-11-21)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
### Features
|
|
14
|
+
|
|
15
|
+
* Windows Electron build support ([1955a5f](https://github.com/mattgodbolt/jsbeeb/commit/1955a5f3ad7e9eb12cdff2e9860d8b0e304196ee))
|
|
16
|
+
|
|
17
|
+
## [1.0.1](https://github.com/mattgodbolt/jsbeeb/compare/v1.0.0...v1.0.1) (2025-11-20)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
### Bug Fixes
|
|
21
|
+
|
|
22
|
+
* Trying to get release-please to work
|
|
23
|
+
|
|
24
|
+
## 1.0.0 (2025-11-20)
|
|
25
|
+
|
|
26
|
+
First actual release with a changelog! These fixes below are not the only thing in this release, we previously had v0.0.7 which was 4+ years old. But - this include Electron support again!
|
|
27
|
+
|
|
28
|
+
### Bug Fixes
|
|
29
|
+
|
|
30
|
+
- add application icon for Electron ([#536](https://github.com/mattgodbolt/jsbeeb/issues/536)) ([64c8043](https://github.com/mattgodbolt/jsbeeb/commit/64c80438bf7c0f87db993b9a878665e3d3b090bc))
|
|
31
|
+
- enable window scaling in Electron and modernize event handlers ([#533](https://github.com/mattgodbolt/jsbeeb/issues/533)) ([64551c9](https://github.com/mattgodbolt/jsbeeb/commit/64551c9d53c3a1a253dd1ac8f6b0f9dd9f266272))
|
|
32
|
+
- remove invalid package-name parameter from release-please action ([#535](https://github.com/mattgodbolt/jsbeeb/issues/535)) ([5dd0436](https://github.com/mattgodbolt/jsbeeb/commit/5dd043601282e1aae976a8cd58c2071bd2b15954))
|
package/CLAUDE.md
ADDED
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
# CLAUDE.md
|
|
2
|
+
|
|
3
|
+
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
|
4
|
+
|
|
5
|
+
## Build and Test Commands
|
|
6
|
+
|
|
7
|
+
- `npm start` - Start development server (IMPORTANT: Never run this command directly; ask the user to start the server
|
|
8
|
+
as needed)
|
|
9
|
+
- `npm run build` - Build production version
|
|
10
|
+
- `npm run lint` - Run ESLint
|
|
11
|
+
- `npm run lint-fix` - Run ESLint with auto-fix
|
|
12
|
+
- `npm run format` - Run Prettier
|
|
13
|
+
- `npm run test` - Run all tests
|
|
14
|
+
- `npm run test:unit` - Run unit tests
|
|
15
|
+
- `npm run test:integration` - Run integration tests
|
|
16
|
+
- `npm run test:cpu` - Run CPU compatibility tests
|
|
17
|
+
- `npm run ci-checks` - Run linting checks for CI
|
|
18
|
+
- `vitest run tests/unit/test-gzip.js` - Run a single test file
|
|
19
|
+
|
|
20
|
+
### Code Coverage
|
|
21
|
+
|
|
22
|
+
- `npm run coverage:unit` - Run unit tests with coverage
|
|
23
|
+
- `npm run coverage:all-tests` - Run all tests with coverage
|
|
24
|
+
- Coverage reports are generated in the `coverage` directory
|
|
25
|
+
- HTML report includes line-by-line coverage visualization
|
|
26
|
+
|
|
27
|
+
## Code Style Guidelines
|
|
28
|
+
|
|
29
|
+
- **Formatting**: Uses Prettier, configured in package.json
|
|
30
|
+
- **Linting**: ESLint with eslint-config-prettier integration
|
|
31
|
+
- **Modules**: ES modules with import/export syntax (type: "module")
|
|
32
|
+
- **JavaScript Target**: ES2020 with strict null checks
|
|
33
|
+
- **Error Handling**: Use try/catch with explicit error messages that provide context about what failed
|
|
34
|
+
- **Naming**: camelCase for variables and functions, PascalCase for classes
|
|
35
|
+
- **Imports**: Group by source (internal/external) with proper separation
|
|
36
|
+
- **Documentation**: Use JSDoc for public APIs and complex functions, add comments for non-obvious code
|
|
37
|
+
- **Error Messages**: Use consistent, specific error messages (e.g., "Track buffer overflow" instead of "Overflow in disc building")
|
|
38
|
+
|
|
39
|
+
## Test Organization
|
|
40
|
+
|
|
41
|
+
- **Test Consolidation**: All tests for a specific component should be consolidated in a single test file.
|
|
42
|
+
For example, all tests for `emulator.js` should be in `test-emulator.js` - do not create separate test files
|
|
43
|
+
for different aspects of the same component.
|
|
44
|
+
- **Test Structure**: Use nested describe blocks to organize tests by component features
|
|
45
|
+
- **Test Isolation**: When mocking components in tests, use `vi.spyOn()` with `vi.restoreAllMocks()` in
|
|
46
|
+
`afterEach` hooks rather than global `vi.mock()` to prevent memory leaks and test pollution
|
|
47
|
+
- **Memory Management**: Avoid global mocks that can leak between tests and accumulate memory usage over time
|
|
48
|
+
- **Test philosophy**
|
|
49
|
+
- Mock as little as possible: Try and rephrase code not to require it.
|
|
50
|
+
- Try not to rely on internal state: don't manipulate objects' inner state in tests
|
|
51
|
+
- Use idiomatic vitest assertions (expect/toBe/toEqual) instead of node assert
|
|
52
|
+
|
|
53
|
+
## Project-Specific Knowledge
|
|
54
|
+
|
|
55
|
+
- **Never commit code unless asked**: Very often we'll work on code and iterate. After you think it's complete, let me
|
|
56
|
+
check it before you commit.
|
|
57
|
+
|
|
58
|
+
### Code Architecture
|
|
59
|
+
|
|
60
|
+
- **General Principles**:
|
|
61
|
+
- Follow the existing code style and structure
|
|
62
|
+
- Use `const` and `let` instead of `var`
|
|
63
|
+
- Avoid global variables; use module scope
|
|
64
|
+
- Use arrow functions for callbacks
|
|
65
|
+
- Prefer template literals over string concatenation
|
|
66
|
+
- Use destructuring for objects and arrays when appropriate
|
|
67
|
+
- Use async/await for asynchronous code instead of callbacks or promises
|
|
68
|
+
- Minimise special case handling - prefer explicit over implicit behaviour
|
|
69
|
+
- Consider adding tests first before implementing features
|
|
70
|
+
- **When simplifying existing code**
|
|
71
|
+
- Prefer helper functions for repetitive operations (like the `appendParam` function)
|
|
72
|
+
- Remove unnecessary type checking where types are expected to be correct
|
|
73
|
+
- Replace complex conditionals with more readable alternatives when possible
|
|
74
|
+
- Ensure simplifications don't break existing behavior or assumptions
|
|
75
|
+
- Try and modernise the code to use ES6+ features where possible
|
|
76
|
+
|
|
77
|
+
- Prefer helper functions for repetitive operations (like the `appendParam` function)
|
|
78
|
+
- Remove unnecessary type checking where types are expected to be correct
|
|
79
|
+
- Replace complex conditionals with more readable alternatives when possible
|
|
80
|
+
- Ensure simplifications don't break existing behavior or assumptions
|
|
81
|
+
|
|
82
|
+
- **Constants and Magic Numbers**:
|
|
83
|
+
- Local un-exported properties should be used for shared constants
|
|
84
|
+
- Local constants should be used for temporary values
|
|
85
|
+
- Always use named constants instead of magic numbers in code
|
|
86
|
+
- Use PascalCase for module-level constants (e.g., `const MaxHfeTrackPulses = 3132;`)
|
|
87
|
+
- Prefer module-level constants over function-local constants for shared values
|
|
88
|
+
- Define constants at the beginning of functions or at the class/module level as appropriate
|
|
89
|
+
- Add comments explaining what the constant represents, especially for non-obvious values
|
|
90
|
+
|
|
91
|
+
- **Pre-commit Hooks**:
|
|
92
|
+
- The project uses lint-staged with ESLint
|
|
93
|
+
- Watch for unused variables and ensure proper error handling
|
|
94
|
+
- YOU MUST NEVER bypass git commit hooks on checkins. This leads to failures in CI later on
|
|
95
|
+
|
|
96
|
+
### Git Workflow
|
|
97
|
+
|
|
98
|
+
- When creating branches with Claude, use the `claude/` prefix (e.g., `claude/fix-esm-import-error`)
|
|
99
|
+
|
|
100
|
+
### Conventional Commits
|
|
101
|
+
|
|
102
|
+
This project uses [Conventional Commits](https://www.conventionalcommits.org/) for automated versioning and changelog generation via release-please.
|
|
103
|
+
|
|
104
|
+
**Commit types for user-facing changes** (appear in changelog, affect version):
|
|
105
|
+
|
|
106
|
+
- `fix:` - Bug fixes (bumps patch version: 0.0.7 → 0.0.8)
|
|
107
|
+
- `feat:` - New features (bumps minor version: 0.0.7 → 0.1.0)
|
|
108
|
+
- `fix!:` or `feat!:` - Breaking changes (bumps major version: 0.0.7 → 1.0.0)
|
|
109
|
+
|
|
110
|
+
**Commit types for internal changes** (do NOT appear in changelog, do NOT affect version):
|
|
111
|
+
|
|
112
|
+
- `chore:` - Maintenance tasks, tooling updates, dependency updates
|
|
113
|
+
- `ci:` - CI/CD configuration changes (GitHub Actions, etc.)
|
|
114
|
+
- `build:` - Build system changes (webpack, vite, electron-builder config)
|
|
115
|
+
- `docs:` - Documentation-only changes
|
|
116
|
+
- `style:` - Code style changes (formatting, whitespace)
|
|
117
|
+
- `refactor:` - Code refactoring without behavior change
|
|
118
|
+
- `test:` - Test additions or modifications
|
|
119
|
+
|
|
120
|
+
**Guidelines**:
|
|
121
|
+
|
|
122
|
+
- Use `fix:` and `feat:` ONLY for changes that affect end users
|
|
123
|
+
- Use `chore:`, `ci:`, or `build:` for internal tooling/infrastructure changes
|
|
124
|
+
- Example: A release-please workflow fix should be `ci:` or `chore:`, not `fix:`
|
|
125
|
+
- Breaking changes must include `BREAKING CHANGE:` in the commit body or use `!` (e.g., `feat!:`)
|
|
126
|
+
|
|
127
|
+
**Examples**:
|
|
128
|
+
|
|
129
|
+
```
|
|
130
|
+
fix: enable window scaling in Electron app
|
|
131
|
+
feat: add joystick support for gamepads
|
|
132
|
+
chore: update dependencies to latest versions
|
|
133
|
+
ci: fix release-please workflow configuration
|
|
134
|
+
build: configure electron-builder icon settings
|
|
135
|
+
docs: update README with installation instructions
|
|
136
|
+
```
|