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.
Files changed (450) hide show
  1. package/package.json +25 -12
  2. package/src/6502.js +51 -41
  3. package/src/app/app.js +99 -8
  4. package/src/app/electron.js +47 -5
  5. package/src/app/preload.js +11 -1
  6. package/src/config.js +9 -2
  7. package/src/disc.js +2 -2
  8. package/src/filestore.js +1 -4
  9. package/src/gamepad-source.js +1 -1
  10. package/src/machine-session.js +396 -0
  11. package/src/main.js +36 -7
  12. package/src/music5000-worklet.js +1 -0
  13. package/src/music5000.js +1 -9
  14. package/src/sth.js +3 -1
  15. package/src/utils.js +2 -2
  16. package/src/web/audio-renderer.js +1 -1
  17. package/src/web/debug.js +2 -2
  18. package/tests/test-machine.js +82 -1
  19. package/.editorconfig +0 -15
  20. package/.git-blame-ignore-revs +0 -3
  21. package/.github/copilot-instructions.md +0 -94
  22. package/.github/workflows/claude-issue-triage.yml +0 -105
  23. package/.github/workflows/claude.yml +0 -63
  24. package/.github/workflows/release-please.yml +0 -75
  25. package/.github/workflows/test-and-deploy.yml +0 -86
  26. package/.gitmodules +0 -6
  27. package/.husky/pre-commit +0 -1
  28. package/.idea/codeStyleSettings.xml +0 -9
  29. package/.idea/codeStyles/Project.xml +0 -62
  30. package/.idea/codeStyles/codeStyleConfig.xml +0 -5
  31. package/.idea/compiler.xml +0 -22
  32. package/.idea/copyright/profiles_settings.xml +0 -3
  33. package/.idea/encodings.xml +0 -6
  34. package/.idea/inspectionProfiles/Project_Default.xml +0 -7
  35. package/.idea/jsLibraryMappings.xml +0 -6
  36. package/.idea/jsLinters/jshint.xml +0 -85
  37. package/.idea/jsLinters/jslint.xml +0 -15
  38. package/.idea/jsbeeb.iml +0 -11
  39. package/.idea/misc.xml +0 -6
  40. package/.idea/modules.xml +0 -8
  41. package/.idea/prettier.xml +0 -7
  42. package/.idea/runConfigurations/Debug.xml +0 -5
  43. package/.idea/scopes/scope_settings.xml +0 -5
  44. package/.idea/vcs.xml +0 -8
  45. package/.prettierignore +0 -4
  46. package/.prettierrc.json +0 -1
  47. package/.release-please-manifest.json +0 -3
  48. package/.vscode/launch.json +0 -14
  49. package/.vscode/settings.json +0 -6
  50. package/CHANGELOG.md +0 -32
  51. package/CLAUDE.md +0 -136
  52. package/Dockerfile +0 -22
  53. package/Makefile +0 -30
  54. package/docker/nginx-default.conf +0 -10
  55. package/docs/pal-comb-filter-research.md +0 -129
  56. package/docs/pal-simulation-design.md +0 -368
  57. package/eslint.config.js +0 -35
  58. package/index.html +0 -954
  59. package/jsconfig.json +0 -10
  60. package/public/discs/README.Irq-Timing +0 -3
  61. package/public/discs/README.bcdtest +0 -5
  62. package/public/discs/README.elite +0 -6
  63. package/public/discs/README.eng_test +0 -3
  64. package/public/discs/README.protection +0 -7
  65. package/public/favicon.ico +0 -0
  66. package/public/images/botbar.png +0 -0
  67. package/public/images/cub-monitor.png +0 -0
  68. package/public/images/jsbeeb-example.png +0 -0
  69. package/public/images/placeholder.png +0 -0
  70. package/public/images/red-off-16.png +0 -0
  71. package/public/images/red-on-16.png +0 -0
  72. package/public/images/sb/CD-left.jpg +0 -0
  73. package/public/images/sb/CD-right.jpg +0 -0
  74. package/public/images/sidebar.png +0 -0
  75. package/public/images/tv.png +0 -0
  76. package/public/images/yellow-off-16.png +0 -0
  77. package/public/images/yellow-on-16.png +0 -0
  78. package/public/jsbeeb-icon.png +0 -0
  79. package/public/robots.txt +0 -3
  80. package/public/roms/ADFS1-53.rom +0 -0
  81. package/public/roms/BASIC.ROM +0 -0
  82. package/public/roms/README +0 -4
  83. package/public/roms/a01/BASIC1.rom +0 -0
  84. package/public/roms/ample.rom +0 -0
  85. package/public/roms/ats-3.0.rom +0 -0
  86. package/public/roms/b/DFS-0.9.rom +0 -0
  87. package/public/roms/b/DFS-1.2.rom +0 -0
  88. package/public/roms/b1770/dfs1770.rom +0 -0
  89. package/public/roms/b1770/zADFS.ROM +0 -0
  90. package/public/roms/bp/dfs.rom +0 -0
  91. package/public/roms/bp/zADFS.ROM +0 -0
  92. package/public/roms/bpos.rom +0 -0
  93. package/public/roms/compact/adfs210.rom +0 -0
  94. package/public/roms/compact/basic48.rom +0 -0
  95. package/public/roms/compact/basic486.rom +0 -0
  96. package/public/roms/compact/os51.rom +0 -0
  97. package/public/roms/compact/utils.rom +0 -0
  98. package/public/roms/deos.rom +0 -0
  99. package/public/roms/master/anfs-4.25.rom +0 -0
  100. package/public/roms/master/mos.txt +0 -68819
  101. package/public/roms/master/mos3.20 +0 -0
  102. package/public/roms/os.rom +0 -0
  103. package/public/roms/os01.rom +0 -0
  104. package/public/roms/tube/6502Tube.rom +0 -0
  105. package/public/roms/tube/ARMeval_100.rom +0 -0
  106. package/public/roms/tube/BIOS.ROM +0 -0
  107. package/public/roms/tube/ReCo6502ROM_816 +0 -0
  108. package/public/roms/tube/Z80_120.rom +0 -0
  109. package/public/roms/us/USBASIC.rom +0 -0
  110. package/public/roms/us/USDNFS.rom +0 -0
  111. package/public/roms/usmos.rom +0 -0
  112. package/public/sounds/disc525/motor.wav +0 -0
  113. package/public/sounds/disc525/motoroff.wav +0 -0
  114. package/public/sounds/disc525/motoron.wav +0 -0
  115. package/public/sounds/disc525/seek.wav +0 -0
  116. package/public/sounds/disc525/seek2.wav +0 -0
  117. package/public/sounds/disc525/seek3.wav +0 -0
  118. package/public/sounds/disc525/step.wav +0 -0
  119. package/public/teletext/txt0.dat +0 -0
  120. package/public/teletext/txt1.dat +0 -0
  121. package/public/teletext/txt2.dat +0 -0
  122. package/public/teletext/txt3.dat +0 -0
  123. package/release-please-config.json +0 -13
  124. package/run-container.sh +0 -92
  125. package/tests/integration/RmwX.asm +0 -47
  126. package/tests/integration/TestInstructionsSource +0 -27
  127. package/tests/integration/TestTimingsResults +0 -27
  128. package/tests/integration/TestTimingsSource +0 -61
  129. package/tests/integration/bcd.js +0 -23
  130. package/tests/integration/dormann.js +0 -101
  131. package/tests/integration/dp111timing.js +0 -42
  132. package/tests/integration/ensure-submodules.js +0 -25
  133. package/tests/integration/nops.bas +0 -119
  134. package/tests/integration/nops.js +0 -24
  135. package/tests/integration/protection.js +0 -26
  136. package/tests/integration/rmw.js +0 -69
  137. package/tests/integration/teletext/expected_bug_469.png +0 -0
  138. package/tests/integration/teletext/expected_flash_0.png +0 -0
  139. package/tests/integration/teletext/expected_flash_1.png +0 -0
  140. package/tests/integration/teletext/expected_hoglet_held_char.png +0 -0
  141. package/tests/integration/teletext/expected_reveal_flash_0.png +0 -0
  142. package/tests/integration/teletext/expected_reveal_flash_1.png +0 -0
  143. package/tests/integration/teletext.js +0 -126
  144. package/tests/integration/timings.js +0 -56
  145. package/tests/integration/via.js +0 -1125
  146. package/tests/suite/README.md +0 -7
  147. package/tests/suite/Test Suite 2.15.txt +0 -373
  148. package/tests/suite/bin/ start +0 -0
  149. package/tests/suite/bin/adca +0 -0
  150. package/tests/suite/bin/adcax +0 -0
  151. package/tests/suite/bin/adcay +0 -0
  152. package/tests/suite/bin/adcb +0 -0
  153. package/tests/suite/bin/adcix +0 -0
  154. package/tests/suite/bin/adciy +0 -0
  155. package/tests/suite/bin/adcz +0 -0
  156. package/tests/suite/bin/adczx +0 -0
  157. package/tests/suite/bin/alrb +0 -0
  158. package/tests/suite/bin/ancb +0 -0
  159. package/tests/suite/bin/anda +0 -0
  160. package/tests/suite/bin/andax +0 -0
  161. package/tests/suite/bin/anday +0 -0
  162. package/tests/suite/bin/andb +0 -0
  163. package/tests/suite/bin/andix +0 -0
  164. package/tests/suite/bin/andiy +0 -0
  165. package/tests/suite/bin/andz +0 -0
  166. package/tests/suite/bin/andzx +0 -0
  167. package/tests/suite/bin/aneb +0 -0
  168. package/tests/suite/bin/arrb +0 -0
  169. package/tests/suite/bin/asla +0 -0
  170. package/tests/suite/bin/aslax +0 -0
  171. package/tests/suite/bin/asln +0 -0
  172. package/tests/suite/bin/aslz +0 -0
  173. package/tests/suite/bin/aslzx +0 -0
  174. package/tests/suite/bin/asoa +0 -0
  175. package/tests/suite/bin/asoax +0 -0
  176. package/tests/suite/bin/asoay +0 -0
  177. package/tests/suite/bin/asoix +0 -0
  178. package/tests/suite/bin/asoiy +0 -0
  179. package/tests/suite/bin/asoz +0 -0
  180. package/tests/suite/bin/asozx +0 -0
  181. package/tests/suite/bin/axsa +0 -0
  182. package/tests/suite/bin/axsix +0 -0
  183. package/tests/suite/bin/axsz +0 -0
  184. package/tests/suite/bin/axszy +0 -0
  185. package/tests/suite/bin/bccr +0 -0
  186. package/tests/suite/bin/bcsr +0 -0
  187. package/tests/suite/bin/beqr +0 -0
  188. package/tests/suite/bin/bita +0 -0
  189. package/tests/suite/bin/bitz +0 -0
  190. package/tests/suite/bin/bmir +0 -0
  191. package/tests/suite/bin/bner +0 -0
  192. package/tests/suite/bin/bplr +0 -0
  193. package/tests/suite/bin/branchwrap +0 -0
  194. package/tests/suite/bin/brkn +0 -0
  195. package/tests/suite/bin/bvcr +0 -0
  196. package/tests/suite/bin/bvsr +0 -0
  197. package/tests/suite/bin/cia1pb6 +0 -0
  198. package/tests/suite/bin/cia1pb7 +0 -0
  199. package/tests/suite/bin/cia1ta +0 -0
  200. package/tests/suite/bin/cia1tab +0 -0
  201. package/tests/suite/bin/cia1tb +0 -0
  202. package/tests/suite/bin/cia1tb123 +0 -0
  203. package/tests/suite/bin/cia2pb6 +0 -0
  204. package/tests/suite/bin/cia2pb7 +0 -0
  205. package/tests/suite/bin/cia2ta +0 -0
  206. package/tests/suite/bin/cia2tb +0 -0
  207. package/tests/suite/bin/cia2tb123 +0 -0
  208. package/tests/suite/bin/clcn +0 -0
  209. package/tests/suite/bin/cldn +0 -0
  210. package/tests/suite/bin/clin +0 -0
  211. package/tests/suite/bin/clvn +0 -0
  212. package/tests/suite/bin/cmpa +0 -0
  213. package/tests/suite/bin/cmpax +0 -0
  214. package/tests/suite/bin/cmpay +0 -0
  215. package/tests/suite/bin/cmpb +0 -0
  216. package/tests/suite/bin/cmpix +0 -0
  217. package/tests/suite/bin/cmpiy +0 -0
  218. package/tests/suite/bin/cmpz +0 -0
  219. package/tests/suite/bin/cmpzx +0 -0
  220. package/tests/suite/bin/cntdef +0 -0
  221. package/tests/suite/bin/cnto2 +0 -0
  222. package/tests/suite/bin/cpuport +0 -0
  223. package/tests/suite/bin/cputiming +0 -0
  224. package/tests/suite/bin/cpxa +0 -0
  225. package/tests/suite/bin/cpxb +0 -0
  226. package/tests/suite/bin/cpxz +0 -0
  227. package/tests/suite/bin/cpya +0 -0
  228. package/tests/suite/bin/cpyb +0 -0
  229. package/tests/suite/bin/cpyz +0 -0
  230. package/tests/suite/bin/dcma +0 -0
  231. package/tests/suite/bin/dcmax +0 -0
  232. package/tests/suite/bin/dcmay +0 -0
  233. package/tests/suite/bin/dcmix +0 -0
  234. package/tests/suite/bin/dcmiy +0 -0
  235. package/tests/suite/bin/dcmz +0 -0
  236. package/tests/suite/bin/dcmzx +0 -0
  237. package/tests/suite/bin/deca +0 -0
  238. package/tests/suite/bin/decax +0 -0
  239. package/tests/suite/bin/decz +0 -0
  240. package/tests/suite/bin/deczx +0 -0
  241. package/tests/suite/bin/dexn +0 -0
  242. package/tests/suite/bin/deyn +0 -0
  243. package/tests/suite/bin/eora +0 -0
  244. package/tests/suite/bin/eorax +0 -0
  245. package/tests/suite/bin/eoray +0 -0
  246. package/tests/suite/bin/eorb +0 -0
  247. package/tests/suite/bin/eorix +0 -0
  248. package/tests/suite/bin/eoriy +0 -0
  249. package/tests/suite/bin/eorz +0 -0
  250. package/tests/suite/bin/eorzx +0 -0
  251. package/tests/suite/bin/finish +0 -0
  252. package/tests/suite/bin/flipos +0 -0
  253. package/tests/suite/bin/icr01 +0 -0
  254. package/tests/suite/bin/imr +0 -0
  255. package/tests/suite/bin/inca +0 -0
  256. package/tests/suite/bin/incax +0 -0
  257. package/tests/suite/bin/incz +0 -0
  258. package/tests/suite/bin/inczx +0 -0
  259. package/tests/suite/bin/insa +0 -0
  260. package/tests/suite/bin/insax +0 -0
  261. package/tests/suite/bin/insay +0 -0
  262. package/tests/suite/bin/insix +0 -0
  263. package/tests/suite/bin/insiy +0 -0
  264. package/tests/suite/bin/insz +0 -0
  265. package/tests/suite/bin/inszx +0 -0
  266. package/tests/suite/bin/inxn +0 -0
  267. package/tests/suite/bin/inyn +0 -0
  268. package/tests/suite/bin/irq +0 -0
  269. package/tests/suite/bin/jmpi +0 -0
  270. package/tests/suite/bin/jmpw +0 -0
  271. package/tests/suite/bin/jsrw +0 -0
  272. package/tests/suite/bin/lasay +0 -0
  273. package/tests/suite/bin/laxa +0 -0
  274. package/tests/suite/bin/laxay +0 -0
  275. package/tests/suite/bin/laxix +0 -0
  276. package/tests/suite/bin/laxiy +0 -0
  277. package/tests/suite/bin/laxz +0 -0
  278. package/tests/suite/bin/laxzy +0 -0
  279. package/tests/suite/bin/ldaa +0 -0
  280. package/tests/suite/bin/ldaax +0 -0
  281. package/tests/suite/bin/ldaay +0 -0
  282. package/tests/suite/bin/ldab +0 -0
  283. package/tests/suite/bin/ldaix +0 -0
  284. package/tests/suite/bin/ldaiy +0 -0
  285. package/tests/suite/bin/ldaz +0 -0
  286. package/tests/suite/bin/ldazx +0 -0
  287. package/tests/suite/bin/ldxa +0 -0
  288. package/tests/suite/bin/ldxay +0 -0
  289. package/tests/suite/bin/ldxb +0 -0
  290. package/tests/suite/bin/ldxz +0 -0
  291. package/tests/suite/bin/ldxzy +0 -0
  292. package/tests/suite/bin/ldya +0 -0
  293. package/tests/suite/bin/ldyax +0 -0
  294. package/tests/suite/bin/ldyb +0 -0
  295. package/tests/suite/bin/ldyz +0 -0
  296. package/tests/suite/bin/ldyzx +0 -0
  297. package/tests/suite/bin/loadth +0 -0
  298. package/tests/suite/bin/lsea +0 -0
  299. package/tests/suite/bin/lseax +0 -0
  300. package/tests/suite/bin/lseay +0 -0
  301. package/tests/suite/bin/lseix +0 -0
  302. package/tests/suite/bin/lseiy +0 -0
  303. package/tests/suite/bin/lsez +0 -0
  304. package/tests/suite/bin/lsezx +0 -0
  305. package/tests/suite/bin/lsra +0 -0
  306. package/tests/suite/bin/lsrax +0 -0
  307. package/tests/suite/bin/lsrn +0 -0
  308. package/tests/suite/bin/lsrz +0 -0
  309. package/tests/suite/bin/lsrzx +0 -0
  310. package/tests/suite/bin/lxab +0 -0
  311. package/tests/suite/bin/mmu +0 -0
  312. package/tests/suite/bin/mmufetch +0 -0
  313. package/tests/suite/bin/nmi +0 -0
  314. package/tests/suite/bin/nopa +0 -0
  315. package/tests/suite/bin/nopax +0 -0
  316. package/tests/suite/bin/nopb +0 -0
  317. package/tests/suite/bin/nopn +0 -0
  318. package/tests/suite/bin/nopz +0 -0
  319. package/tests/suite/bin/nopzx +0 -0
  320. package/tests/suite/bin/oneshot +0 -0
  321. package/tests/suite/bin/oraa +0 -0
  322. package/tests/suite/bin/oraax +0 -0
  323. package/tests/suite/bin/oraay +0 -0
  324. package/tests/suite/bin/orab +0 -0
  325. package/tests/suite/bin/oraix +0 -0
  326. package/tests/suite/bin/oraiy +0 -0
  327. package/tests/suite/bin/oraz +0 -0
  328. package/tests/suite/bin/orazx +0 -0
  329. package/tests/suite/bin/phan +0 -0
  330. package/tests/suite/bin/phpn +0 -0
  331. package/tests/suite/bin/plan +0 -0
  332. package/tests/suite/bin/plpn +0 -0
  333. package/tests/suite/bin/rlaa +0 -0
  334. package/tests/suite/bin/rlaax +0 -0
  335. package/tests/suite/bin/rlaay +0 -0
  336. package/tests/suite/bin/rlaix +0 -0
  337. package/tests/suite/bin/rlaiy +0 -0
  338. package/tests/suite/bin/rlaz +0 -0
  339. package/tests/suite/bin/rlazx +0 -0
  340. package/tests/suite/bin/rola +0 -0
  341. package/tests/suite/bin/rolax +0 -0
  342. package/tests/suite/bin/roln +0 -0
  343. package/tests/suite/bin/rolz +0 -0
  344. package/tests/suite/bin/rolzx +0 -0
  345. package/tests/suite/bin/rora +0 -0
  346. package/tests/suite/bin/rorax +0 -0
  347. package/tests/suite/bin/rorn +0 -0
  348. package/tests/suite/bin/rorz +0 -0
  349. package/tests/suite/bin/rorzx +0 -0
  350. package/tests/suite/bin/rraa +0 -0
  351. package/tests/suite/bin/rraax +0 -0
  352. package/tests/suite/bin/rraay +0 -0
  353. package/tests/suite/bin/rraix +0 -0
  354. package/tests/suite/bin/rraiy +0 -0
  355. package/tests/suite/bin/rraz +0 -0
  356. package/tests/suite/bin/rrazx +0 -0
  357. package/tests/suite/bin/rtin +0 -0
  358. package/tests/suite/bin/rtsn +0 -0
  359. package/tests/suite/bin/sbca +0 -0
  360. package/tests/suite/bin/sbcax +0 -0
  361. package/tests/suite/bin/sbcay +0 -0
  362. package/tests/suite/bin/sbcb +0 -0
  363. package/tests/suite/bin/sbcb(eb) +0 -0
  364. package/tests/suite/bin/sbcix +0 -0
  365. package/tests/suite/bin/sbciy +0 -0
  366. package/tests/suite/bin/sbcz +0 -0
  367. package/tests/suite/bin/sbczx +0 -0
  368. package/tests/suite/bin/sbxb +0 -0
  369. package/tests/suite/bin/secn +0 -0
  370. package/tests/suite/bin/sedn +0 -0
  371. package/tests/suite/bin/sein +0 -0
  372. package/tests/suite/bin/shaay +0 -0
  373. package/tests/suite/bin/shaiy +0 -0
  374. package/tests/suite/bin/shsay +0 -0
  375. package/tests/suite/bin/shxay +0 -0
  376. package/tests/suite/bin/shyax +0 -0
  377. package/tests/suite/bin/staa +0 -0
  378. package/tests/suite/bin/staax +0 -0
  379. package/tests/suite/bin/staay +0 -0
  380. package/tests/suite/bin/staix +0 -0
  381. package/tests/suite/bin/staiy +0 -0
  382. package/tests/suite/bin/staz +0 -0
  383. package/tests/suite/bin/stazx +0 -0
  384. package/tests/suite/bin/stxa +0 -0
  385. package/tests/suite/bin/stxz +0 -0
  386. package/tests/suite/bin/stxzy +0 -0
  387. package/tests/suite/bin/stya +0 -0
  388. package/tests/suite/bin/styz +0 -0
  389. package/tests/suite/bin/styzx +0 -0
  390. package/tests/suite/bin/taxn +0 -0
  391. package/tests/suite/bin/tayn +0 -0
  392. package/tests/suite/bin/trap1 +0 -0
  393. package/tests/suite/bin/trap10 +0 -0
  394. package/tests/suite/bin/trap11 +0 -0
  395. package/tests/suite/bin/trap12 +0 -0
  396. package/tests/suite/bin/trap13 +0 -0
  397. package/tests/suite/bin/trap14 +0 -0
  398. package/tests/suite/bin/trap15 +0 -0
  399. package/tests/suite/bin/trap16 +0 -0
  400. package/tests/suite/bin/trap17 +0 -0
  401. package/tests/suite/bin/trap2 +0 -0
  402. package/tests/suite/bin/trap3 +0 -0
  403. package/tests/suite/bin/trap4 +0 -0
  404. package/tests/suite/bin/trap5 +0 -0
  405. package/tests/suite/bin/trap6 +0 -0
  406. package/tests/suite/bin/trap7 +0 -0
  407. package/tests/suite/bin/trap8 +0 -0
  408. package/tests/suite/bin/trap9 +0 -0
  409. package/tests/suite/bin/tsxn +0 -0
  410. package/tests/suite/bin/txan +0 -0
  411. package/tests/suite/bin/txsn +0 -0
  412. package/tests/suite/bin/tyan +0 -0
  413. package/tests/suite/cbm-hackers-post.html +0 -178
  414. package/tests/suite/cbm-hackers-post.md +0 -78
  415. package/tests/test-suite.js +0 -147
  416. package/tests/test.css +0 -7
  417. package/tests/unit/gzip/test-1 +0 -0
  418. package/tests/unit/gzip/test-1.gz +0 -0
  419. package/tests/unit/gzip/test-2 +0 -0
  420. package/tests/unit/gzip/test-2.gz +0 -0
  421. package/tests/unit/gzip/test-3 +0 -0
  422. package/tests/unit/gzip/test-3.gz +0 -0
  423. package/tests/unit/gzip/test-4 +0 -0
  424. package/tests/unit/gzip/test-4.gz +0 -0
  425. package/tests/unit/test-adc.js +0 -307
  426. package/tests/unit/test-bcd.js +0 -30
  427. package/tests/unit/test-cmos.js +0 -266
  428. package/tests/unit/test-disc-drive.js +0 -85
  429. package/tests/unit/test-disc-hfe.js +0 -347
  430. package/tests/unit/test-disc.js +0 -232
  431. package/tests/unit/test-fifo.js +0 -35
  432. package/tests/unit/test-gamepad-source.js +0 -67
  433. package/tests/unit/test-gzip.js +0 -22
  434. package/tests/unit/test-intel-fdc.js +0 -93
  435. package/tests/unit/test-keyboard.js +0 -410
  436. package/tests/unit/test-mouse-joystick-source.js +0 -128
  437. package/tests/unit/test-scheduler.js +0 -190
  438. package/tests/unit/test-serial.js +0 -154
  439. package/tests/unit/test-teletext-adaptor.js +0 -359
  440. package/tests/unit/test-tokenise.js +0 -65
  441. package/tests/unit/test-url-params.js +0 -398
  442. package/tests/unit/test-utils.js +0 -276
  443. package/tests/unit/test-video.js +0 -498
  444. package/tests/unit/test-zip.js +0 -56
  445. package/tests/unit/zip/test-mixed.zip +0 -0
  446. package/tests/unit/zip/test-rom.zip +0 -0
  447. package/tests/unit/zip/test-ssd.zip +0 -0
  448. package/tools/fir-generator.js +0 -80
  449. package/tools/vite-plugin-fir-shader.js +0 -131
  450. package/vite.config.js +0 -34
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -1,13 +0,0 @@
1
- {
2
- "release-type": "node",
3
- "packages": {
4
- ".": {
5
- "changelog-path": "CHANGELOG.md",
6
- "release-type": "node",
7
- "bump-minor-pre-major": true,
8
- "bump-patch-for-minor-pre-major": true,
9
- "draft": false,
10
- "prerelease": false
11
- }
12
- }
13
- }
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
-
@@ -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
- });