jsbeeb 1.1.1 → 1.3.2
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/package.json +25 -12
- package/src/6502.js +51 -41
- package/src/app/app.js +99 -8
- package/src/app/electron.js +47 -5
- package/src/app/preload.js +11 -1
- package/src/config.js +9 -2
- package/src/disc.js +2 -2
- package/src/filestore.js +1 -4
- package/src/gamepad-source.js +1 -1
- package/src/machine-session.js +396 -0
- package/src/main.js +36 -7
- package/src/music5000-worklet.js +1 -0
- package/src/music5000.js +1 -9
- package/src/sth.js +3 -1
- package/src/utils.js +2 -2
- package/src/web/audio-renderer.js +1 -1
- package/src/web/debug.js +2 -2
- package/tests/test-machine.js +82 -1
- package/.editorconfig +0 -15
- package/.git-blame-ignore-revs +0 -3
- package/.github/copilot-instructions.md +0 -94
- package/.github/workflows/claude-issue-triage.yml +0 -105
- package/.github/workflows/claude.yml +0 -63
- package/.github/workflows/release-please.yml +0 -75
- package/.github/workflows/test-and-deploy.yml +0 -86
- package/.gitmodules +0 -6
- package/.husky/pre-commit +0 -1
- package/.idea/codeStyleSettings.xml +0 -9
- package/.idea/codeStyles/Project.xml +0 -62
- package/.idea/codeStyles/codeStyleConfig.xml +0 -5
- package/.idea/compiler.xml +0 -22
- package/.idea/copyright/profiles_settings.xml +0 -3
- package/.idea/encodings.xml +0 -6
- package/.idea/inspectionProfiles/Project_Default.xml +0 -7
- package/.idea/jsLibraryMappings.xml +0 -6
- package/.idea/jsLinters/jshint.xml +0 -85
- package/.idea/jsLinters/jslint.xml +0 -15
- package/.idea/jsbeeb.iml +0 -11
- package/.idea/misc.xml +0 -6
- package/.idea/modules.xml +0 -8
- package/.idea/prettier.xml +0 -7
- package/.idea/runConfigurations/Debug.xml +0 -5
- package/.idea/scopes/scope_settings.xml +0 -5
- package/.idea/vcs.xml +0 -8
- package/.prettierignore +0 -4
- package/.prettierrc.json +0 -1
- package/.release-please-manifest.json +0 -3
- package/.vscode/launch.json +0 -14
- package/.vscode/settings.json +0 -6
- package/CHANGELOG.md +0 -32
- package/CLAUDE.md +0 -136
- package/Dockerfile +0 -22
- package/Makefile +0 -30
- package/docker/nginx-default.conf +0 -10
- package/docs/pal-comb-filter-research.md +0 -129
- package/docs/pal-simulation-design.md +0 -368
- package/eslint.config.js +0 -35
- package/index.html +0 -954
- package/jsconfig.json +0 -10
- package/public/discs/README.Irq-Timing +0 -3
- package/public/discs/README.bcdtest +0 -5
- package/public/discs/README.elite +0 -6
- package/public/discs/README.eng_test +0 -3
- package/public/discs/README.protection +0 -7
- 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 +0 -3
- package/public/roms/ADFS1-53.rom +0 -0
- package/public/roms/BASIC.ROM +0 -0
- package/public/roms/README +0 -4
- 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 +0 -68819
- 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 +0 -13
- package/run-container.sh +0 -92
- package/tests/integration/RmwX.asm +0 -47
- package/tests/integration/TestInstructionsSource +0 -27
- package/tests/integration/TestTimingsResults +0 -27
- package/tests/integration/TestTimingsSource +0 -61
- package/tests/integration/bcd.js +0 -23
- package/tests/integration/dormann.js +0 -101
- package/tests/integration/dp111timing.js +0 -42
- package/tests/integration/ensure-submodules.js +0 -25
- package/tests/integration/nops.bas +0 -119
- package/tests/integration/nops.js +0 -24
- package/tests/integration/protection.js +0 -26
- package/tests/integration/rmw.js +0 -69
- 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 +0 -126
- package/tests/integration/timings.js +0 -56
- package/tests/integration/via.js +0 -1125
- package/tests/suite/README.md +0 -7
- package/tests/suite/Test Suite 2.15.txt +0 -373
- 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 +0 -178
- package/tests/suite/cbm-hackers-post.md +0 -78
- package/tests/test-suite.js +0 -147
- package/tests/test.css +0 -7
- 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 +0 -307
- package/tests/unit/test-bcd.js +0 -30
- package/tests/unit/test-cmos.js +0 -266
- package/tests/unit/test-disc-drive.js +0 -85
- package/tests/unit/test-disc-hfe.js +0 -347
- package/tests/unit/test-disc.js +0 -232
- package/tests/unit/test-fifo.js +0 -35
- package/tests/unit/test-gamepad-source.js +0 -67
- package/tests/unit/test-gzip.js +0 -22
- package/tests/unit/test-intel-fdc.js +0 -93
- package/tests/unit/test-keyboard.js +0 -410
- package/tests/unit/test-mouse-joystick-source.js +0 -128
- package/tests/unit/test-scheduler.js +0 -190
- package/tests/unit/test-serial.js +0 -154
- package/tests/unit/test-teletext-adaptor.js +0 -359
- package/tests/unit/test-tokenise.js +0 -65
- package/tests/unit/test-url-params.js +0 -398
- package/tests/unit/test-utils.js +0 -276
- package/tests/unit/test-video.js +0 -498
- package/tests/unit/test-zip.js +0 -56
- 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 +0 -80
- package/tools/vite-plugin-fir-shader.js +0 -131
- package/vite.config.js +0 -34
|
Binary file
|
package/public/roms/os.rom
DELETED
|
Binary file
|
package/public/roms/os01.rom
DELETED
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/public/roms/usmos.rom
DELETED
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/public/teletext/txt0.dat
DELETED
|
Binary file
|
package/public/teletext/txt1.dat
DELETED
|
Binary file
|
package/public/teletext/txt2.dat
DELETED
|
Binary file
|
package/public/teletext/txt3.dat
DELETED
|
Binary file
|
package/run-container.sh
DELETED
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
# Helper script that builds and launches the Docker container.
|
|
3
|
-
|
|
4
|
-
# ---------------------------------------------------------------------
|
|
5
|
-
|
|
6
|
-
function main
|
|
7
|
-
{
|
|
8
|
-
# initialize
|
|
9
|
-
cd `dirname "$0"`
|
|
10
|
-
PORT=8271
|
|
11
|
-
IMAGE_TAG=latest
|
|
12
|
-
CONTAINER_NAME=jsbeeb
|
|
13
|
-
DETACH=
|
|
14
|
-
NO_BUILD=
|
|
15
|
-
|
|
16
|
-
# parse the command-line arguments
|
|
17
|
-
if [ $# -eq 0 ]; then
|
|
18
|
-
print_help
|
|
19
|
-
exit 0
|
|
20
|
-
fi
|
|
21
|
-
params="$(getopt -o p:t:d -l port:,tag:,name:,detach,,no-build,help --name "$0" -- "$@")"
|
|
22
|
-
if [ $? -ne 0 ]; then exit 1; fi
|
|
23
|
-
eval set -- "$params"
|
|
24
|
-
while true; do
|
|
25
|
-
case "$1" in
|
|
26
|
-
-p | --port)
|
|
27
|
-
PORT=$2
|
|
28
|
-
shift 2 ;;
|
|
29
|
-
-t | --tag)
|
|
30
|
-
IMAGE_TAG=$2
|
|
31
|
-
shift 2 ;;
|
|
32
|
-
--name)
|
|
33
|
-
CONTAINER_NAME=$2
|
|
34
|
-
shift 2 ;;
|
|
35
|
-
-d | --detach )
|
|
36
|
-
DETACH=--detach
|
|
37
|
-
shift 1 ;;
|
|
38
|
-
--no-build )
|
|
39
|
-
NO_BUILD=1
|
|
40
|
-
shift 1 ;;
|
|
41
|
-
--help )
|
|
42
|
-
print_help
|
|
43
|
-
exit 0 ;;
|
|
44
|
-
-- ) shift ; break ;;
|
|
45
|
-
* )
|
|
46
|
-
echo "Unknown option: $1" >&2
|
|
47
|
-
exit 1 ;;
|
|
48
|
-
esac
|
|
49
|
-
done
|
|
50
|
-
|
|
51
|
-
# build the image
|
|
52
|
-
if [ -z "$NO_BUILD" ]; then
|
|
53
|
-
echo Building the \"$IMAGE_TAG\" image...
|
|
54
|
-
docker build \
|
|
55
|
-
--tag jsbeeb:$IMAGE_TAG \
|
|
56
|
-
. 2>&1 \
|
|
57
|
-
| sed -e 's/^/ /'
|
|
58
|
-
if [ ${PIPESTATUS[0]} -ne 0 ]; then exit 10 ; fi
|
|
59
|
-
echo
|
|
60
|
-
fi
|
|
61
|
-
|
|
62
|
-
# launch the container
|
|
63
|
-
echo Launching the \"$IMAGE_TAG\" image as \"$CONTAINER_NAME\"...
|
|
64
|
-
docker run \
|
|
65
|
-
--name $CONTAINER_NAME \
|
|
66
|
-
--publish $PORT:80 \
|
|
67
|
-
$DETACH \
|
|
68
|
-
-it --rm \
|
|
69
|
-
jsbeeb:$IMAGE_TAG \
|
|
70
|
-
2>&1 \
|
|
71
|
-
| sed -e 's/^/ /'
|
|
72
|
-
exit ${PIPESTATUS[0]}
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
# ---------------------------------------------------------------------
|
|
76
|
-
|
|
77
|
-
function print_help {
|
|
78
|
-
echo "`basename "$0"` {options}"
|
|
79
|
-
cat <<EOM
|
|
80
|
-
Build and launch the "jsbeeb" container.
|
|
81
|
-
|
|
82
|
-
-p --port Web server port number.
|
|
83
|
-
-t --tag Docker image tag.
|
|
84
|
-
--name Docker container name.
|
|
85
|
-
-d --detach Detach from the container and let it run in the background.
|
|
86
|
-
--no-build Launch the container as-is (i.e. without rebuilding the image first).
|
|
87
|
-
EOM
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
# ---------------------------------------------------------------------
|
|
91
|
-
|
|
92
|
-
main "$@"
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
\ Timings test (thanks to Ed Spittles)
|
|
2
|
-
\ build with: beebasm -i RmwX.asm -do ../discs/RmwX.ssd -boot Timings
|
|
3
|
-
ORG &100
|
|
4
|
-
.start
|
|
5
|
-
NOP:NOP:NOP:NOP
|
|
6
|
-
NOP:NOP:NOP:NOP
|
|
7
|
-
NOP:NOP:NOP:NOP
|
|
8
|
-
NOP:NOP:NOP:NOP
|
|
9
|
-
.begin
|
|
10
|
-
SEI
|
|
11
|
-
LDA#&20:STA&FE44:STA&FE45
|
|
12
|
-
LDX#0
|
|
13
|
-
INC&41FF,X:INC&41FF,X
|
|
14
|
-
LDA&FE44:STA&100
|
|
15
|
-
DEC&41FF,X:DEC&41FF,X
|
|
16
|
-
LDA&FE44:STA&101
|
|
17
|
-
ROL&41FF,X:ROL&41FF,X
|
|
18
|
-
LDA&FE44:STA&102
|
|
19
|
-
ROR&41FF,X:ROR&41FF,X
|
|
20
|
-
LDA&FE44:STA&103
|
|
21
|
-
LSR&41FF,X:LSR&41FF,X
|
|
22
|
-
LDA&FE44:STA&104
|
|
23
|
-
ASL&41FF,X:ASL&41FF,X
|
|
24
|
-
LDA&FE44:STA&105
|
|
25
|
-
LDA#&20:STA&FE44:STA&FE45
|
|
26
|
-
LDX#&FF
|
|
27
|
-
INC&41FF,X:INC&41FF,X
|
|
28
|
-
LDA&FE44:STA&108
|
|
29
|
-
DEC&41FF,X:DEC&41FF,X
|
|
30
|
-
LDA&FE44:STA&109
|
|
31
|
-
ROL&41FF,X:ROL&41FF,X
|
|
32
|
-
LDA&FE44:STA&10a
|
|
33
|
-
ROR&41FF,X:ROR&41FF,X
|
|
34
|
-
LDA&FE44:STA&10b
|
|
35
|
-
INX
|
|
36
|
-
INC&41FF,X:INC&41FF,X
|
|
37
|
-
LDA&FE44:STA&10c
|
|
38
|
-
DEC&41FF,X:DEC&41FF,X
|
|
39
|
-
LDA&FE44:STA&10d
|
|
40
|
-
ROL&41FF,X:ROL&41FF,X
|
|
41
|
-
LDA&FE44:STA&10e
|
|
42
|
-
ROR&41FF,X:ROR&41FF,X
|
|
43
|
-
LDA&FE44:STA&10f
|
|
44
|
-
CLI:RTS
|
|
45
|
-
.end
|
|
46
|
-
|
|
47
|
-
SAVE "Timings", start, end, begin
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
REM TestInstructions
|
|
2
|
-
HIMEM = &4000
|
|
3
|
-
FOR N%=0 TO 2 STEP 2:P%=&4400:[OPT N%
|
|
4
|
-
SEI
|
|
5
|
-
LDA #0
|
|
6
|
-
STA testInstr + 1
|
|
7
|
-
.loop
|
|
8
|
-
LDA #0
|
|
9
|
-
TAX
|
|
10
|
-
TAY
|
|
11
|
-
CLC
|
|
12
|
-
.testInstr ADC #0
|
|
13
|
-
.storeAddr STA &4000
|
|
14
|
-
INC testInstr + 1
|
|
15
|
-
INC storeAddr + 1
|
|
16
|
-
BNE loop
|
|
17
|
-
CLI
|
|
18
|
-
RTS
|
|
19
|
-
]NEXT
|
|
20
|
-
CALL &4400
|
|
21
|
-
FOR N%=0 TO 255 STEP 16
|
|
22
|
-
FOR M%=&4000 + N% TO &4000 + N% + 15
|
|
23
|
-
IF ?M%<16:PRINT ;0;
|
|
24
|
-
PRINT ;~?M%;
|
|
25
|
-
NEXT
|
|
26
|
-
PRINT
|
|
27
|
-
NEXT
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
>RUN
|
|
2
|
-
4436 (AD 1 10) 0 DD
|
|
3
|
-
4443 (AD 2 10) 0 DD
|
|
4
|
-
4450 (AD 3 10) 0 DD
|
|
5
|
-
445E (AD 4 10) 0 DD
|
|
6
|
-
0 (C6 16 D0) 0 0
|
|
7
|
-
0 (C6 16 D0) 0 0
|
|
8
|
-
4488 (AD 7 10) 0 FF
|
|
9
|
-
4497 (AD 8 10) 0 0
|
|
10
|
-
0 (C6 16 D0) 0 0
|
|
11
|
-
44B8 (E6 71 8C) C0 FF
|
|
12
|
-
44C5 (E6 71 8C) C0 FF
|
|
13
|
-
0 (C6 16 D0) 0 0
|
|
14
|
-
0 (C6 16 D0) 0 0
|
|
15
|
-
44F6 (AD E 10) C0 DB
|
|
16
|
-
4506 (AD F 10) C0 DC
|
|
17
|
-
4516 (AD 10 10) C0 FF
|
|
18
|
-
4527 (AD 11 10) C0 0
|
|
19
|
-
453A (8E 64 FE) C0 1
|
|
20
|
-
454A (8E 64 FE) C0 1
|
|
21
|
-
4559 (AD 14 20) C0 0
|
|
22
|
-
4569 (AD 15 20) C0 0
|
|
23
|
-
4578 (AD 16 20) C0 1
|
|
24
|
-
458A (E6 71 8C) C0 FF
|
|
25
|
-
4599 (E6 71 8C) C0 0
|
|
26
|
-
45A6 (E6 71 78) C0 0
|
|
27
|
-
0 (C6 16 D0) 0 0
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
1 REM TestTimings - by Richard Talbot-Watkins
|
|
2
|
-
5 HIMEM=&4000
|
|
3
|
-
10 FOR N%=0 TO 2 STEP 2:P%=&4400:[OPT N%
|
|
4
|
-
20 SEI
|
|
5
|
-
30 LDA #irq MOD 256:STA &204
|
|
6
|
-
40 LDA #irq DIV 256:STA &205
|
|
7
|
-
50 LDA &FE4E:STA &70
|
|
8
|
-
60 LDA #&7F:STA &FE4E:STA &FE6E
|
|
9
|
-
70 LDA #&C0:STA &FE6E
|
|
10
|
-
80 LDA #0:STA &FE6B:STA &71
|
|
11
|
-
90 CLI
|
|
12
|
-
100 LDX #4:STX &FE64:LDY #0
|
|
13
|
-
105 STY &FE65:LDA (0),Y:LDA #1:DEC &FE65:LDA &1001:INC &71
|
|
14
|
-
110 STY &FE65:LDA (0,X):DEC &FE65:LDA &1002:INC &71
|
|
15
|
-
120 STY &FE65:LDA (0),Y:DEC &FE65:LDA &1003:INC &71
|
|
16
|
-
130 STY &FE65:LDA &1234:DEC &FE65:LDA &1004:INC &71
|
|
17
|
-
140 STY &FE65:LDA &12:DEC &FE65:LDA &1005:INC &71
|
|
18
|
-
150 STY &FE65:LDA #1:DEC &FE65:LDA &1006:INC &71
|
|
19
|
-
160 STY &FE65:LDA (0,X):LDA &1234:LDA &FE64:LDA &1007:INC &71
|
|
20
|
-
170 STY &FE65:LDA (0,X):LDA &12:LDA &FE64:LDA &1008:INC &71
|
|
21
|
-
180 STY &FE65:LDA (0,X):LDA #1:LDA &FE64:LDA &1009:INC &71
|
|
22
|
-
190 STY &FE65:LDA (0),Y:LDA #1:LDA &FE64:LDA &100A:INC &71
|
|
23
|
-
191 STY &FE65:LDA (0,X):LDA &FE64:LDA &100B:INC &71
|
|
24
|
-
192 STY &FE65:LDA (0),Y:LDA &1234:ROL &FE64:LDA &100C:STX &FE64:INC &71
|
|
25
|
-
193 STY &FE65:LDA (0),Y:LDA &12:ROL &FE64:LDA &100D:STX &FE64:INC &71
|
|
26
|
-
195 STY &FE65:LDA (0),Y:LDA #1:ROL &FE64:LDA &100E:STX &FE64:INC &71
|
|
27
|
-
200 STY &FE65:LDA (0,X):ROL &FE64:LDA &100F:STX &FE64:INC &71
|
|
28
|
-
210 STY &FE65:LDA (0),Y:ROL &FE64:LDA &1010:STX &FE64:INC &71
|
|
29
|
-
220 STY &FE65:LDA &1234:ROL &FE64:LDA &1011:STX &FE64:INC &71
|
|
30
|
-
230 STY &FE65:LDA &12:ROL &FE64:LDA &1012:STX &FE64:INC &71
|
|
31
|
-
240 STY &FE65:LDA #1:ROL &FE64:LDA &1013:STX &FE64:INC &71
|
|
32
|
-
241 STY &FE65:LDA (0,X):LDA (0),Y:LDA &1014:LDA &2014:INC &71
|
|
33
|
-
242 STY &FE65:LDA (0,X):LDA &1234:LDA &1015:LDA &2015:INC &71
|
|
34
|
-
243 STY &FE65:LDA (0,X):LDA &12:LDA &1016:LDA &2016:INC &71
|
|
35
|
-
244 STY &FE65:LDA (0,X):LDA #1:LDA &1017:LDA &2017:INC &71
|
|
36
|
-
245 STY &FE65:LDA (0),Y:LDA #1:LDA &1018:LDA &2018:INC &71
|
|
37
|
-
246 STY &FE65:LDA (0,X):LDA &1019:LDA &2019:INC &71
|
|
38
|
-
250 SEI
|
|
39
|
-
260 LDA &70:STA &FE4E:LDA #&7F:STA &FE6E
|
|
40
|
-
270 LDA #?&204:STA &204
|
|
41
|
-
280 LDA #?&205:STA &205
|
|
42
|
-
290 CLI:RTS
|
|
43
|
-
300 .irq
|
|
44
|
-
310 STX &72
|
|
45
|
-
320 TSX:INX:INX:LDA &100,X:STA &73
|
|
46
|
-
325 INX:LDA &100,X
|
|
47
|
-
330 LDX &71:STA &4300,X
|
|
48
|
-
335 LDA &73:STA &4000,X
|
|
49
|
-
340 LDA &FE6D:STA &4100,X
|
|
50
|
-
350 LDA &FE64:STA &4200,X
|
|
51
|
-
360 LDX &72
|
|
52
|
-
370 LDA &FC:RTI
|
|
53
|
-
380 ]NEXT
|
|
54
|
-
385 *FX 16,0
|
|
55
|
-
390 FOR N%=0 TO &3FF STEP 4:N%!&4000=0:NEXT
|
|
56
|
-
400 CALL &4400
|
|
57
|
-
410 FOR N%=0 TO ?&71
|
|
58
|
-
420 A%=(N%?&4300)*256+(N%?&4000)
|
|
59
|
-
430 PRINT ;~A%;" (";~A%?0;" ";~A%?1;" ";~A%?2;") ";TAB(22);~N%?&4100;TAB(30);~N%?&4200
|
|
60
|
-
440 NEXT
|
|
61
|
-
|
package/tests/integration/bcd.js
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { describe, it } from "vitest";
|
|
2
|
-
import { TestMachine } from "../test-machine.js";
|
|
3
|
-
import assert from "assert";
|
|
4
|
-
|
|
5
|
-
describe("test binary coded decimal behaviour", { timeout: 30000 }, function () {
|
|
6
|
-
const doTest = async (model) => {
|
|
7
|
-
const testMachine = new TestMachine(model);
|
|
8
|
-
await testMachine.initialise();
|
|
9
|
-
await testMachine.loadDisc("discs/bcdtest.ssd");
|
|
10
|
-
await testMachine.runUntilInput();
|
|
11
|
-
await testMachine.type("*BCDTEST");
|
|
12
|
-
let output = "";
|
|
13
|
-
testMachine.captureText((elem) => (output += elem.text));
|
|
14
|
-
await testMachine.runUntilInput();
|
|
15
|
-
assert(output.indexOf("PASSED") >= 0, `Failed with ${output}`);
|
|
16
|
-
};
|
|
17
|
-
it("should match on 65C12", async () => {
|
|
18
|
-
await doTest("Master");
|
|
19
|
-
});
|
|
20
|
-
it("should match on 6502", async () => {
|
|
21
|
-
await doTest();
|
|
22
|
-
});
|
|
23
|
-
});
|
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
import _ from "underscore";
|
|
4
|
-
import { describe, it } from "vitest";
|
|
5
|
-
import * as utils from "../../src/utils.js";
|
|
6
|
-
import { fake6502, fake65C02, fake65C12 } from "../../src/fake6502.js";
|
|
7
|
-
|
|
8
|
-
import assert from "assert";
|
|
9
|
-
|
|
10
|
-
const log = false;
|
|
11
|
-
|
|
12
|
-
async function runTest(processor, test, name) {
|
|
13
|
-
const base = "tests/6502_65C02_functional_tests/bin_files/" + test;
|
|
14
|
-
|
|
15
|
-
function parseSuccess(listing) {
|
|
16
|
-
let expectedPc = null;
|
|
17
|
-
let next = false;
|
|
18
|
-
let successRe = /^\s*success\b\s*(;.*)?$/;
|
|
19
|
-
_.each(listing.split("\n"), function (line) {
|
|
20
|
-
if (next) {
|
|
21
|
-
next = false;
|
|
22
|
-
expectedPc = parseInt(line.match(/^([0-9a-fA-F]+)/)[1], 16);
|
|
23
|
-
console.log("Found success address $" + utils.hexword(expectedPc));
|
|
24
|
-
} else {
|
|
25
|
-
next = !!line.match(successRe);
|
|
26
|
-
}
|
|
27
|
-
});
|
|
28
|
-
if (expectedPc === null) throw "Unable to parse";
|
|
29
|
-
return expectedPc;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
const expectedPc = parseSuccess((await utils.loadData(base + ".lst")).toString());
|
|
33
|
-
const data = await utils.loadData(base + ".bin");
|
|
34
|
-
for (let i = 0; i < data.length; ++i) processor.writemem(i, data[i]);
|
|
35
|
-
|
|
36
|
-
processor.pc = 0x400;
|
|
37
|
-
processor.debugInstruction.add(function (addr) {
|
|
38
|
-
if (log) {
|
|
39
|
-
console.log(
|
|
40
|
-
utils.hexword(addr) +
|
|
41
|
-
" : A=" +
|
|
42
|
-
utils.hexbyte(processor.a) +
|
|
43
|
-
" : X=" +
|
|
44
|
-
utils.hexbyte(processor.x) +
|
|
45
|
-
" : Y=" +
|
|
46
|
-
utils.hexbyte(processor.y) +
|
|
47
|
-
" : " +
|
|
48
|
-
processor.disassembler.disassemble(processor.pc)[0],
|
|
49
|
-
);
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
// Stop once we get stuck at the same address.
|
|
53
|
-
return addr === processor.getPrevPc(1);
|
|
54
|
-
});
|
|
55
|
-
console.log("Running Dormann " + name + " tests...");
|
|
56
|
-
processor.execute(2000000 * 60);
|
|
57
|
-
console.log(`Run complete at $${utils.hexword(processor.pc)}`);
|
|
58
|
-
const result = processor.pc === expectedPc;
|
|
59
|
-
if (!result) logFailure(processor);
|
|
60
|
-
return result;
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
function logFailure(processor) {
|
|
64
|
-
console.log("Failed at " + utils.hexword(processor.pc));
|
|
65
|
-
console.log("Previous PCs:");
|
|
66
|
-
for (let i = 1; i < 16; ++i) {
|
|
67
|
-
console.log(" " + utils.hexword(processor.getPrevPc(i)));
|
|
68
|
-
}
|
|
69
|
-
console.log("A: " + utils.hexbyte(processor.a));
|
|
70
|
-
console.log("X: " + utils.hexbyte(processor.x));
|
|
71
|
-
console.log("Y: " + utils.hexbyte(processor.y));
|
|
72
|
-
console.log("S: " + utils.hexbyte(processor.s));
|
|
73
|
-
console.log("P: " + utils.hexbyte(processor.p.asByte()) + " " + processor.p.debugString());
|
|
74
|
-
console.log(
|
|
75
|
-
utils.hd(
|
|
76
|
-
function (i) {
|
|
77
|
-
return processor.readmem(i);
|
|
78
|
-
},
|
|
79
|
-
0x00,
|
|
80
|
-
0x40,
|
|
81
|
-
),
|
|
82
|
-
);
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
describe("dormann tests", { timeout: 30000 }, function () {
|
|
86
|
-
it("should pass 6502 functional tests", async () => {
|
|
87
|
-
const cpu = fake6502();
|
|
88
|
-
await cpu.initialise();
|
|
89
|
-
assert(await runTest(cpu, "6502_functional_test", "6502"));
|
|
90
|
-
});
|
|
91
|
-
it("should pass 65c02 extended opcode tests", async () => {
|
|
92
|
-
const cpu = fake65C02();
|
|
93
|
-
await cpu.initialise();
|
|
94
|
-
assert(await runTest(cpu, "65C02_extended_opcodes_test", "65C02"));
|
|
95
|
-
});
|
|
96
|
-
it("should pass 65c12 extended opcode tests", async () => {
|
|
97
|
-
const cpu = fake65C12();
|
|
98
|
-
await cpu.initialise();
|
|
99
|
-
assert(await runTest(cpu, "65C12_extended_opcodes_test", "65C12"));
|
|
100
|
-
});
|
|
101
|
-
});
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import { describe, it } from "vitest";
|
|
2
|
-
import { TestMachine } from "../test-machine.js";
|
|
3
|
-
import assert from "assert";
|
|
4
|
-
|
|
5
|
-
describe("test dp111's timing tests", { timeout: 30000 }, function () {
|
|
6
|
-
const doTest = async (disc, machine) => {
|
|
7
|
-
const testMachine = new TestMachine(machine);
|
|
8
|
-
await testMachine.initialise();
|
|
9
|
-
await testMachine.loadDisc(`tests/integration/dp111_6502Timing/${disc}.ssd`);
|
|
10
|
-
await testMachine.runUntilInput();
|
|
11
|
-
let output = "";
|
|
12
|
-
testMachine.captureText((elem) => {
|
|
13
|
-
output += `${elem.text}\n`;
|
|
14
|
-
});
|
|
15
|
-
await testMachine.type("*RUN 6502TIM");
|
|
16
|
-
let numFailedTests = null;
|
|
17
|
-
const hook = testMachine.processor.debugWrite.add((addr, value) => {
|
|
18
|
-
if (addr === 0xfcd0) {
|
|
19
|
-
numFailedTests = value;
|
|
20
|
-
}
|
|
21
|
-
});
|
|
22
|
-
await testMachine.runUntilInput();
|
|
23
|
-
hook.remove();
|
|
24
|
-
if (numFailedTests) {
|
|
25
|
-
console.log(`Test failed, output:\n${output}`);
|
|
26
|
-
}
|
|
27
|
-
assert.equal(numFailedTests, 0);
|
|
28
|
-
};
|
|
29
|
-
it("should handle 6502timing", async () => {
|
|
30
|
-
await doTest("6502timing");
|
|
31
|
-
});
|
|
32
|
-
it("should handle 6502timing with 1MHz bus", async () => {
|
|
33
|
-
await doTest("6502timing1M");
|
|
34
|
-
});
|
|
35
|
-
|
|
36
|
-
it("should handle 65C12timing", async () => {
|
|
37
|
-
await doTest("65C12timing", "Master");
|
|
38
|
-
});
|
|
39
|
-
it("should handle 65C12timing with 1MHz bus", async () => {
|
|
40
|
-
await doTest("65C12timing1M", "Master");
|
|
41
|
-
});
|
|
42
|
-
});
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import { describe, it } from "vitest";
|
|
2
|
-
import assert from "assert";
|
|
3
|
-
import * as fs from "fs";
|
|
4
|
-
|
|
5
|
-
describe("ensure git submodules are present", function () {
|
|
6
|
-
it("should have functional tests", function () {
|
|
7
|
-
try {
|
|
8
|
-
fs.accessSync("tests/6502_65C02_functional_tests/README.md");
|
|
9
|
-
} catch {
|
|
10
|
-
assert.fail(
|
|
11
|
-
"Functional tests submodule missing. Ensure git submodules are fetched (git submodule update --init).",
|
|
12
|
-
);
|
|
13
|
-
}
|
|
14
|
-
});
|
|
15
|
-
|
|
16
|
-
it("should have timing tests", function () {
|
|
17
|
-
try {
|
|
18
|
-
fs.accessSync("tests/integration/dp111_6502Timing/README.md");
|
|
19
|
-
} catch {
|
|
20
|
-
assert.fail(
|
|
21
|
-
"Timing tests submodule missing. Ensure git submodules are fetched (git submodule update --init).",
|
|
22
|
-
);
|
|
23
|
-
}
|
|
24
|
-
});
|
|
25
|
-
});
|
|
@@ -1,119 +0,0 @@
|
|
|
1
|
-
1REM Thanks to Tom Seddon!
|
|
2
|
-
10REM>NOPS
|
|
3
|
-
20MODE1
|
|
4
|
-
30PRINX%=0:PRINY%=0:COLWIDTH%=0
|
|
5
|
-
40CODESIZE%=1000:DIMCODE%CODESIZE%
|
|
6
|
-
50:
|
|
7
|
-
60FORPASS%=0TO2STEP2:P%=CODE%:[OPTPASS%
|
|
8
|
-
70LDA&60:PHA
|
|
9
|
-
80LDA#0:STA&60
|
|
10
|
-
90JSRSMBTEST
|
|
11
|
-
100LDA&60:STA&70
|
|
12
|
-
110PLA:STA&60
|
|
13
|
-
120RTS
|
|
14
|
-
130:
|
|
15
|
-
140.SMBTEST
|
|
16
|
-
150EQUB&87:EQUB&60:\SMB0 &60
|
|
17
|
-
160RTS
|
|
18
|
-
170]
|
|
19
|
-
180NEXT
|
|
20
|
-
190CALLCODE%
|
|
21
|
-
200ROCKWELL%=?&70<>0
|
|
22
|
-
210IFROCKWELL%:PROCPRINT(3,0,"ROCKWELL/WDC CPU"):ELSE:PROCPRINT(3,0,"CMOS CPU")
|
|
23
|
-
220PROCPRINT(0,1,"2 CYCLES")
|
|
24
|
-
230T2C%=FNTIME(1,&EA,1,-1)
|
|
25
|
-
240PROCPRINT(0,1,"3 CYCLES")
|
|
26
|
-
250T3C%=FNTIME(1,&A5,2,-1)
|
|
27
|
-
260PROCPRINT(0,1,"4 CYCLES")
|
|
28
|
-
270T4C%=FNTIME(1,&AD,3,-1)
|
|
29
|
-
271PROCPRINT(0,1,"8 CYCLES")
|
|
30
|
-
272T8C%=FNTIME(2,&AD,3,-1)
|
|
31
|
-
273PROCPRINT(0,1,"1 CYCLES")
|
|
32
|
-
274T1C%=T2C%-INT(((T3C%-T2C%)+(T4C%-T2C%)/2+(T8C%-T2C%)/6)/3)
|
|
33
|
-
275PROCPRINT(0,3,"GUESS: "+STR$T1C%)
|
|
34
|
-
280RESTORE560:PROCMULTI(T2C%,2,2)
|
|
35
|
-
290RESTORE580:PROCMULTI(T3C%,3,2)
|
|
36
|
-
300RESTORE620:PROCMULTI(T4C%,4,2)
|
|
37
|
-
310RESTORE680:PROCMULTI(T8C%,8,3)
|
|
38
|
-
320RESTORE410:PROCMULTI(-1,1,1)
|
|
39
|
-
330IFNOTROCKWELL%:RESTORE440:PROCMULTI(-1,1,1)
|
|
40
|
-
340RESTORE470:PROCMULTI(-1,1,1)
|
|
41
|
-
350IFNOTROCKWELL%:RESTORE500:PROCMULTI(-1,1,1)
|
|
42
|
-
360IFNOTROCKWELL%:RESTORE530:PROCMULTI(-1,1,1)
|
|
43
|
-
370END
|
|
44
|
-
380:
|
|
45
|
-
390:
|
|
46
|
-
400REM 1 CYCLES, 1 BYTES
|
|
47
|
-
410DATA &03,&13,&23,&33,&43,&53,&63,&73,&83,&93,&A3,&B3,&C3,&D3,&E3,&F3,-1
|
|
48
|
-
420:
|
|
49
|
-
430REM 1 CYCLES, 1 BYTES (NOT ROCKWELL)
|
|
50
|
-
440DATA &07,&17,&27,&37,&47,&57,&67,&77,&87,&97,&A7,&B7,&C7,&D7,&E7,&F7,-1
|
|
51
|
-
450:
|
|
52
|
-
460REM 1 CYCLES, 1 BYTES
|
|
53
|
-
470DATA &0B,&1B,&2B,&3B,&4B,&5B,&6B,&7B,&8B,&9B,&AB,&BB,&EB,&FB,-1
|
|
54
|
-
480:
|
|
55
|
-
490REM 1 CYCLES, 1 BYTES (NOT WDC)
|
|
56
|
-
500DATA &CB,&DB,-1
|
|
57
|
-
510:
|
|
58
|
-
520REM 1 CYCLES, 1 BYTES (NOT ROCKWELL)
|
|
59
|
-
530DATA &0F,&1F,&2F,&3F,&4F,&5F,&6F,&7F,&8F,&9F,&AF,&BF,&CF,&DF,&EF,&FF,-1
|
|
60
|
-
540:
|
|
61
|
-
550REM 2 CYCLES, 2 BYTES
|
|
62
|
-
560DATA &02,&22,&42,&62,&82,&C2,&E2,-1
|
|
63
|
-
570:
|
|
64
|
-
580REM 3 CYCLES, 2 BYTES
|
|
65
|
-
590DATA &44,-1
|
|
66
|
-
600:
|
|
67
|
-
610REM 4 CYCLES, 2 BYTES
|
|
68
|
-
620DATA &54,&D4,&F4,-1
|
|
69
|
-
630:
|
|
70
|
-
640REM 4 CYCLES, 3 BYTES
|
|
71
|
-
650DATA &DC,&FC,-1
|
|
72
|
-
660:
|
|
73
|
-
670REM 8 CYCLES, 3 BYTES
|
|
74
|
-
680DATA &5C,-1
|
|
75
|
-
690:
|
|
76
|
-
700DEFPROCMULTI(TEXPECTED%,NC%,NB%)
|
|
77
|
-
710PROCPRINT(0,2,STR$NC%+" CYCLES")
|
|
78
|
-
720REPEAT
|
|
79
|
-
730READNOP%:IFNOP%=-1:GOTO750
|
|
80
|
-
740T%=FNTIME(1,NOP%,NB%,TEXPECTED%)
|
|
81
|
-
750UNTILNOP%=-1
|
|
82
|
-
760ENDPROC
|
|
83
|
-
770:
|
|
84
|
-
780DEFFNTIME(NCOPIES%,NOP%,N%,TEXPECTED%)
|
|
85
|
-
790IFN%<1ORN%>3:STOP
|
|
86
|
-
800FORPASS%=0TO2STEP2:P%=CODE%:[OPTPASS%
|
|
87
|
-
810.START
|
|
88
|
-
820LDX#0
|
|
89
|
-
830.XLOOP
|
|
90
|
-
840LDY#0
|
|
91
|
-
850.YLOOP
|
|
92
|
-
860]
|
|
93
|
-
870FORI%=1TONCOPIES%*10
|
|
94
|
-
880[OPTPASS%:EQUBNOP%:]
|
|
95
|
-
890IFN%>=2:[OPTPASS%:EQUB0:]
|
|
96
|
-
900IFN%>=3:[OPTPASS%:EQUB0:]
|
|
97
|
-
910NEXT
|
|
98
|
-
920[OPTPASS%
|
|
99
|
-
930DEY:BNEYLOOP
|
|
100
|
-
940DEX:BNEXLOOP
|
|
101
|
-
950RTS
|
|
102
|
-
960]IFP%>CODE%+CODESIZE%:STOP
|
|
103
|
-
970NEXT
|
|
104
|
-
980TIME=0
|
|
105
|
-
990REMPRINTFNHEX2(NOP%)" (";N%"): ";
|
|
106
|
-
1000CALLSTART
|
|
107
|
-
1010T%=TIME
|
|
108
|
-
1020IFTEXPECTED%>=0ANDABS(TIME-TEXPECTED%)>2:B%=1:ELSE:B%=0
|
|
109
|
-
1030PROCPRINT(B%,3,FNHEX2(NOP%)+" ("+STR$N%+"): "+STR$T%)
|
|
110
|
-
1040=T%
|
|
111
|
-
1050DEFFNHEX2(X%)=RIGHT$("0"+STR$~X%,2)
|
|
112
|
-
1060DEFPROCPRINT(B%,F%,MSG$)
|
|
113
|
-
1070COLOUR128+B%:COLOURF%
|
|
114
|
-
1080PRINTTAB(PRINX%,PRINY%);MSG$;
|
|
115
|
-
1090COLOUR128:COLOUR7
|
|
116
|
-
1100IFLENMSG$>COLWIDTH%:COLWIDTH%=LENMSG$
|
|
117
|
-
1110PRINY%=PRINY%+1
|
|
118
|
-
1120IFPRINY%=32:PRINY%=0:PRINX%=PRINX%+COLWIDTH%+1:COLWIDTH%=0
|
|
119
|
-
1130ENDPROC
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import { describe, it } from "vitest";
|
|
2
|
-
import assert from "assert";
|
|
3
|
-
import * as utils from "../../src/utils.js";
|
|
4
|
-
import { TestMachine } from "../test-machine.js";
|
|
5
|
-
|
|
6
|
-
describe("test various NOP timings", { timeout: 30000 }, function () {
|
|
7
|
-
it("should match the nops.bas code", async () => {
|
|
8
|
-
const testMachine = new TestMachine("Master");
|
|
9
|
-
await testMachine.initialise();
|
|
10
|
-
await testMachine.runUntilInput();
|
|
11
|
-
const data = await utils.loadData("tests/integration/nops.bas");
|
|
12
|
-
await testMachine.loadBasic(utils.uint8ArrayToString(data));
|
|
13
|
-
|
|
14
|
-
let numCaptures = 0;
|
|
15
|
-
testMachine.captureText((elem) => {
|
|
16
|
-
assert(elem.background !== 1, `Failure from test - ${JSON.stringify(elem)}`);
|
|
17
|
-
console.log(`emulator output: ${elem.text}`);
|
|
18
|
-
numCaptures++;
|
|
19
|
-
});
|
|
20
|
-
await testMachine.type("RUN");
|
|
21
|
-
await testMachine.runUntilInput(2 * 60);
|
|
22
|
-
assert(numCaptures === 97, "Missing output");
|
|
23
|
-
});
|
|
24
|
-
});
|