jsbeeb 1.1.1 → 1.3.3
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 +26 -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 +393 -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 +14 -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/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
package/jsconfig.json
DELETED
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
This elite image is NOT free software. It is a fixed-up version of one posted by Ian Bell
|
|
2
|
-
on his http://www.iancgbell.clara.net/elite/bbc/ website. The original version didn't
|
|
3
|
-
work and would give "Bad command" when transitioning between docked and space modes.
|
|
4
|
-
|
|
5
|
-
Help in finding and fixing this given on a Stairway to Hell link:
|
|
6
|
-
http://www.stardot.org.uk/forums/viewtopic.php?f=6&t=710
|
package/public/favicon.ico
DELETED
|
Binary file
|
package/public/images/botbar.png
DELETED
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/public/images/tv.png
DELETED
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/public/jsbeeb-icon.png
DELETED
|
Binary file
|
package/public/robots.txt
DELETED
|
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
|
-
});
|