@joezilla/8sim 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (320) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +542 -0
  3. package/dist/8sim.browser.js +4728 -0
  4. package/dist/bundles/CardBundle.d.ts +83 -0
  5. package/dist/bundles/CardBundle.d.ts.map +1 -0
  6. package/dist/bundles/CardBundle.js +41 -0
  7. package/dist/bundles/CardBundle.js.map +1 -0
  8. package/dist/bundles/kernels.d.ts +48 -0
  9. package/dist/bundles/kernels.d.ts.map +1 -0
  10. package/dist/bundles/kernels.js +132 -0
  11. package/dist/bundles/kernels.js.map +1 -0
  12. package/dist/bundles/seed/index.d.ts +24 -0
  13. package/dist/bundles/seed/index.d.ts.map +1 -0
  14. package/dist/bundles/seed/index.js +266 -0
  15. package/dist/bundles/seed/index.js.map +1 -0
  16. package/dist/bus/Bus.d.ts +21 -0
  17. package/dist/bus/Bus.d.ts.map +1 -0
  18. package/dist/bus/Bus.js +62 -0
  19. package/dist/bus/Bus.js.map +1 -0
  20. package/dist/bus/BusRegion.d.ts +8 -0
  21. package/dist/bus/BusRegion.d.ts.map +1 -0
  22. package/dist/bus/BusRegion.js +8 -0
  23. package/dist/bus/BusRegion.js.map +1 -0
  24. package/dist/bus/SnoopBus.d.ts +15 -0
  25. package/dist/bus/SnoopBus.d.ts.map +1 -0
  26. package/dist/bus/SnoopBus.js +41 -0
  27. package/dist/bus/SnoopBus.js.map +1 -0
  28. package/dist/cards/BankRamCard.d.ts +35 -0
  29. package/dist/cards/BankRamCard.d.ts.map +1 -0
  30. package/dist/cards/BankRamCard.js +56 -0
  31. package/dist/cards/BankRamCard.js.map +1 -0
  32. package/dist/cards/DazzlerCard.d.ts +42 -0
  33. package/dist/cards/DazzlerCard.d.ts.map +1 -0
  34. package/dist/cards/DazzlerCard.js +83 -0
  35. package/dist/cards/DazzlerCard.js.map +1 -0
  36. package/dist/cards/DisplaySurface.d.ts +32 -0
  37. package/dist/cards/DisplaySurface.d.ts.map +1 -0
  38. package/dist/cards/DisplaySurface.js +11 -0
  39. package/dist/cards/DisplaySurface.js.map +1 -0
  40. package/dist/cards/FdcPlusClient.d.ts +35 -0
  41. package/dist/cards/FdcPlusClient.d.ts.map +1 -0
  42. package/dist/cards/FdcPlusClient.js +130 -0
  43. package/dist/cards/FdcPlusClient.js.map +1 -0
  44. package/dist/cards/ImsaiMioCard.d.ts +36 -0
  45. package/dist/cards/ImsaiMioCard.d.ts.map +1 -0
  46. package/dist/cards/ImsaiMioCard.js +48 -0
  47. package/dist/cards/ImsaiMioCard.js.map +1 -0
  48. package/dist/cards/ImsaiSioCard.d.ts +19 -0
  49. package/dist/cards/ImsaiSioCard.d.ts.map +1 -0
  50. package/dist/cards/ImsaiSioCard.js +54 -0
  51. package/dist/cards/ImsaiSioCard.js.map +1 -0
  52. package/dist/cards/KeyboardCard.d.ts +37 -0
  53. package/dist/cards/KeyboardCard.d.ts.map +1 -0
  54. package/dist/cards/KeyboardCard.js +79 -0
  55. package/dist/cards/KeyboardCard.js.map +1 -0
  56. package/dist/cards/Mc6850Acia.d.ts +68 -0
  57. package/dist/cards/Mc6850Acia.d.ts.map +1 -0
  58. package/dist/cards/Mc6850Acia.js +132 -0
  59. package/dist/cards/Mc6850Acia.js.map +1 -0
  60. package/dist/cards/Mits2SioCard.d.ts +27 -0
  61. package/dist/cards/Mits2SioCard.d.ts.map +1 -0
  62. package/dist/cards/Mits2SioCard.js +36 -0
  63. package/dist/cards/Mits2SioCard.js.map +1 -0
  64. package/dist/cards/MitsDcddCard.d.ts +52 -0
  65. package/dist/cards/MitsDcddCard.d.ts.map +1 -0
  66. package/dist/cards/MitsDcddCard.js +294 -0
  67. package/dist/cards/MitsDcddCard.js.map +1 -0
  68. package/dist/cards/ParallelCard.d.ts +35 -0
  69. package/dist/cards/ParallelCard.d.ts.map +1 -0
  70. package/dist/cards/ParallelCard.js +32 -0
  71. package/dist/cards/ParallelCard.js.map +1 -0
  72. package/dist/cards/Port8212.d.ts +31 -0
  73. package/dist/cards/Port8212.d.ts.map +1 -0
  74. package/dist/cards/Port8212.js +47 -0
  75. package/dist/cards/Port8212.js.map +1 -0
  76. package/dist/cards/RtcCard.d.ts +30 -0
  77. package/dist/cards/RtcCard.d.ts.map +1 -0
  78. package/dist/cards/RtcCard.js +61 -0
  79. package/dist/cards/RtcCard.js.map +1 -0
  80. package/dist/cards/SerialCard.d.ts +31 -0
  81. package/dist/cards/SerialCard.d.ts.map +1 -0
  82. package/dist/cards/SerialCard.js +28 -0
  83. package/dist/cards/SerialCard.js.map +1 -0
  84. package/dist/cards/Tr1602Uart.d.ts +55 -0
  85. package/dist/cards/Tr1602Uart.d.ts.map +1 -0
  86. package/dist/cards/Tr1602Uart.js +102 -0
  87. package/dist/cards/Tr1602Uart.js.map +1 -0
  88. package/dist/cards/Usart8251.d.ts +28 -0
  89. package/dist/cards/Usart8251.d.ts.map +1 -0
  90. package/dist/cards/Usart8251.js +88 -0
  91. package/dist/cards/Usart8251.js.map +1 -0
  92. package/dist/cards/VdmCard.d.ts +27 -0
  93. package/dist/cards/VdmCard.d.ts.map +1 -0
  94. package/dist/cards/VdmCard.js +40 -0
  95. package/dist/cards/VdmCard.js.map +1 -0
  96. package/dist/clock/ImmediateClock.d.ts +8 -0
  97. package/dist/clock/ImmediateClock.d.ts.map +1 -0
  98. package/dist/clock/ImmediateClock.js +13 -0
  99. package/dist/clock/ImmediateClock.js.map +1 -0
  100. package/dist/clock/SystemClock.d.ts +45 -0
  101. package/dist/clock/SystemClock.d.ts.map +1 -0
  102. package/dist/clock/SystemClock.js +71 -0
  103. package/dist/clock/SystemClock.js.map +1 -0
  104. package/dist/cpu/Cpu8080.d.ts +34 -0
  105. package/dist/cpu/Cpu8080.d.ts.map +1 -0
  106. package/dist/cpu/Cpu8080.js +126 -0
  107. package/dist/cpu/Cpu8080.js.map +1 -0
  108. package/dist/cpu/Decoder.d.ts +12 -0
  109. package/dist/cpu/Decoder.d.ts.map +1 -0
  110. package/dist/cpu/Decoder.js +23 -0
  111. package/dist/cpu/Decoder.js.map +1 -0
  112. package/dist/cpu/Flags.d.ts +18 -0
  113. package/dist/cpu/Flags.d.ts.map +1 -0
  114. package/dist/cpu/Flags.js +33 -0
  115. package/dist/cpu/Flags.js.map +1 -0
  116. package/dist/cpu/Registers.d.ts +22 -0
  117. package/dist/cpu/Registers.d.ts.map +1 -0
  118. package/dist/cpu/Registers.js +26 -0
  119. package/dist/cpu/Registers.js.map +1 -0
  120. package/dist/cpu/instructions/alu.d.ts +3 -0
  121. package/dist/cpu/instructions/alu.d.ts.map +1 -0
  122. package/dist/cpu/instructions/alu.js +221 -0
  123. package/dist/cpu/instructions/alu.js.map +1 -0
  124. package/dist/cpu/instructions/branch.d.ts +3 -0
  125. package/dist/cpu/instructions/branch.d.ts.map +1 -0
  126. package/dist/cpu/instructions/branch.js +117 -0
  127. package/dist/cpu/instructions/branch.js.map +1 -0
  128. package/dist/cpu/instructions/control.d.ts +3 -0
  129. package/dist/cpu/instructions/control.d.ts.map +1 -0
  130. package/dist/cpu/instructions/control.js +12 -0
  131. package/dist/cpu/instructions/control.js.map +1 -0
  132. package/dist/cpu/instructions/data.d.ts +3 -0
  133. package/dist/cpu/instructions/data.d.ts.map +1 -0
  134. package/dist/cpu/instructions/data.js +137 -0
  135. package/dist/cpu/instructions/data.js.map +1 -0
  136. package/dist/cpu/instructions/io.d.ts +3 -0
  137. package/dist/cpu/instructions/io.d.ts.map +1 -0
  138. package/dist/cpu/instructions/io.js +18 -0
  139. package/dist/cpu/instructions/io.js.map +1 -0
  140. package/dist/cpu/instructions/logical.d.ts +3 -0
  141. package/dist/cpu/instructions/logical.d.ts.map +1 -0
  142. package/dist/cpu/instructions/logical.js +129 -0
  143. package/dist/cpu/instructions/logical.js.map +1 -0
  144. package/dist/cpu/instructions/rotate.d.ts +3 -0
  145. package/dist/cpu/instructions/rotate.d.ts.map +1 -0
  146. package/dist/cpu/instructions/rotate.js +34 -0
  147. package/dist/cpu/instructions/rotate.js.map +1 -0
  148. package/dist/cpu/instructions/stack.d.ts +3 -0
  149. package/dist/cpu/instructions/stack.d.ts.map +1 -0
  150. package/dist/cpu/instructions/stack.js +84 -0
  151. package/dist/cpu/instructions/stack.js.map +1 -0
  152. package/dist/cpu/status8080.d.ts +33 -0
  153. package/dist/cpu/status8080.d.ts.map +1 -0
  154. package/dist/cpu/status8080.js +73 -0
  155. package/dist/cpu/status8080.js.map +1 -0
  156. package/dist/cpu/z80/CpuZ80.d.ts +53 -0
  157. package/dist/cpu/z80/CpuZ80.d.ts.map +1 -0
  158. package/dist/cpu/z80/CpuZ80.js +168 -0
  159. package/dist/cpu/z80/CpuZ80.js.map +1 -0
  160. package/dist/cpu/z80/DecoderZ80.d.ts +26 -0
  161. package/dist/cpu/z80/DecoderZ80.d.ts.map +1 -0
  162. package/dist/cpu/z80/DecoderZ80.js +107 -0
  163. package/dist/cpu/z80/DecoderZ80.js.map +1 -0
  164. package/dist/cpu/z80/FlagsZ80.d.ts +27 -0
  165. package/dist/cpu/z80/FlagsZ80.d.ts.map +1 -0
  166. package/dist/cpu/z80/FlagsZ80.js +47 -0
  167. package/dist/cpu/z80/FlagsZ80.js.map +1 -0
  168. package/dist/cpu/z80/RegistersZ80.d.ts +60 -0
  169. package/dist/cpu/z80/RegistersZ80.d.ts.map +1 -0
  170. package/dist/cpu/z80/RegistersZ80.js +90 -0
  171. package/dist/cpu/z80/RegistersZ80.js.map +1 -0
  172. package/dist/cpu/z80/flagHelpers.d.ts +25 -0
  173. package/dist/cpu/z80/flagHelpers.d.ts.map +1 -0
  174. package/dist/cpu/z80/flagHelpers.js +136 -0
  175. package/dist/cpu/z80/flagHelpers.js.map +1 -0
  176. package/dist/cpu/z80/instructions/alu16.d.ts +4 -0
  177. package/dist/cpu/z80/instructions/alu16.d.ts.map +1 -0
  178. package/dist/cpu/z80/instructions/alu16.js +27 -0
  179. package/dist/cpu/z80/instructions/alu16.js.map +1 -0
  180. package/dist/cpu/z80/instructions/alu8.d.ts +4 -0
  181. package/dist/cpu/z80/instructions/alu8.d.ts.map +1 -0
  182. package/dist/cpu/z80/instructions/alu8.js +100 -0
  183. package/dist/cpu/z80/instructions/alu8.js.map +1 -0
  184. package/dist/cpu/z80/instructions/bits.d.ts +10 -0
  185. package/dist/cpu/z80/instructions/bits.d.ts.map +1 -0
  186. package/dist/cpu/z80/instructions/bits.js +164 -0
  187. package/dist/cpu/z80/instructions/bits.js.map +1 -0
  188. package/dist/cpu/z80/instructions/block.d.ts +10 -0
  189. package/dist/cpu/z80/instructions/block.d.ts.map +1 -0
  190. package/dist/cpu/z80/instructions/block.js +141 -0
  191. package/dist/cpu/z80/instructions/block.js.map +1 -0
  192. package/dist/cpu/z80/instructions/control.d.ts +4 -0
  193. package/dist/cpu/z80/instructions/control.d.ts.map +1 -0
  194. package/dist/cpu/z80/instructions/control.js +62 -0
  195. package/dist/cpu/z80/instructions/control.js.map +1 -0
  196. package/dist/cpu/z80/instructions/ed.d.ts +4 -0
  197. package/dist/cpu/z80/instructions/ed.d.ts.map +1 -0
  198. package/dist/cpu/z80/instructions/ed.js +149 -0
  199. package/dist/cpu/z80/instructions/ed.js.map +1 -0
  200. package/dist/cpu/z80/instructions/exchange.d.ts +4 -0
  201. package/dist/cpu/z80/instructions/exchange.d.ts.map +1 -0
  202. package/dist/cpu/z80/instructions/exchange.js +37 -0
  203. package/dist/cpu/z80/instructions/exchange.js.map +1 -0
  204. package/dist/cpu/z80/instructions/io.d.ts +8 -0
  205. package/dist/cpu/z80/instructions/io.d.ts.map +1 -0
  206. package/dist/cpu/z80/instructions/io.js +22 -0
  207. package/dist/cpu/z80/instructions/io.js.map +1 -0
  208. package/dist/cpu/z80/instructions/jump.d.ts +4 -0
  209. package/dist/cpu/z80/instructions/jump.d.ts.map +1 -0
  210. package/dist/cpu/z80/instructions/jump.js +113 -0
  211. package/dist/cpu/z80/instructions/jump.js.map +1 -0
  212. package/dist/cpu/z80/instructions/load.d.ts +7 -0
  213. package/dist/cpu/z80/instructions/load.d.ts.map +1 -0
  214. package/dist/cpu/z80/instructions/load.js +103 -0
  215. package/dist/cpu/z80/instructions/load.js.map +1 -0
  216. package/dist/cpu/z80/instructions/rotate.d.ts +9 -0
  217. package/dist/cpu/z80/instructions/rotate.d.ts.map +1 -0
  218. package/dist/cpu/z80/instructions/rotate.js +48 -0
  219. package/dist/cpu/z80/instructions/rotate.js.map +1 -0
  220. package/dist/cpu/z80/instructions/stack.d.ts +4 -0
  221. package/dist/cpu/z80/instructions/stack.d.ts.map +1 -0
  222. package/dist/cpu/z80/instructions/stack.js +19 -0
  223. package/dist/cpu/z80/instructions/stack.js.map +1 -0
  224. package/dist/cpu/z80/regcodes.d.ts +22 -0
  225. package/dist/cpu/z80/regcodes.d.ts.map +1 -0
  226. package/dist/cpu/z80/regcodes.js +93 -0
  227. package/dist/cpu/z80/regcodes.js.map +1 -0
  228. package/dist/cpu/z80/types.d.ts +59 -0
  229. package/dist/cpu/z80/types.d.ts.map +1 -0
  230. package/dist/cpu/z80/types.js +2 -0
  231. package/dist/cpu/z80/types.js.map +1 -0
  232. package/dist/cpu/z80/views.d.ts +8 -0
  233. package/dist/cpu/z80/views.d.ts.map +1 -0
  234. package/dist/cpu/z80/views.js +40 -0
  235. package/dist/cpu/z80/views.js.map +1 -0
  236. package/dist/index.d.ts +67 -0
  237. package/dist/index.d.ts.map +1 -0
  238. package/dist/index.js +49 -0
  239. package/dist/index.js.map +1 -0
  240. package/dist/interfaces/IBus.d.ts +8 -0
  241. package/dist/interfaces/IBus.d.ts.map +1 -0
  242. package/dist/interfaces/IBus.js +2 -0
  243. package/dist/interfaces/IBus.js.map +1 -0
  244. package/dist/interfaces/IBusObserver.d.ts +7 -0
  245. package/dist/interfaces/IBusObserver.d.ts.map +1 -0
  246. package/dist/interfaces/IBusObserver.js +2 -0
  247. package/dist/interfaces/IBusObserver.js.map +1 -0
  248. package/dist/interfaces/IClock.d.ts +6 -0
  249. package/dist/interfaces/IClock.d.ts.map +1 -0
  250. package/dist/interfaces/IClock.js +2 -0
  251. package/dist/interfaces/IClock.js.map +1 -0
  252. package/dist/interfaces/ICpu.d.ts +46 -0
  253. package/dist/interfaces/ICpu.d.ts.map +1 -0
  254. package/dist/interfaces/ICpu.js +2 -0
  255. package/dist/interfaces/ICpu.js.map +1 -0
  256. package/dist/interfaces/IIODevice.d.ts +7 -0
  257. package/dist/interfaces/IIODevice.d.ts.map +1 -0
  258. package/dist/interfaces/IIODevice.js +2 -0
  259. package/dist/interfaces/IIODevice.js.map +1 -0
  260. package/dist/interfaces/IInterruptController.d.ts +8 -0
  261. package/dist/interfaces/IInterruptController.d.ts.map +1 -0
  262. package/dist/interfaces/IInterruptController.js +2 -0
  263. package/dist/interfaces/IInterruptController.js.map +1 -0
  264. package/dist/interfaces/IMemory.d.ts +9 -0
  265. package/dist/interfaces/IMemory.d.ts.map +1 -0
  266. package/dist/interfaces/IMemory.js +2 -0
  267. package/dist/interfaces/IMemory.js.map +1 -0
  268. package/dist/interfaces/IModule.d.ts +5 -0
  269. package/dist/interfaces/IModule.d.ts.map +1 -0
  270. package/dist/interfaces/IModule.js +2 -0
  271. package/dist/interfaces/IModule.js.map +1 -0
  272. package/dist/interfaces/IS100Card.d.ts +6 -0
  273. package/dist/interfaces/IS100Card.d.ts.map +1 -0
  274. package/dist/interfaces/IS100Card.js +2 -0
  275. package/dist/interfaces/IS100Card.js.map +1 -0
  276. package/dist/interfaces/index.d.ts +10 -0
  277. package/dist/interfaces/index.d.ts.map +1 -0
  278. package/dist/interfaces/index.js +2 -0
  279. package/dist/interfaces/index.js.map +1 -0
  280. package/dist/interrupt/InterruptController.d.ts +13 -0
  281. package/dist/interrupt/InterruptController.d.ts.map +1 -0
  282. package/dist/interrupt/InterruptController.js +36 -0
  283. package/dist/interrupt/InterruptController.js.map +1 -0
  284. package/dist/io/IoSpace.d.ts +9 -0
  285. package/dist/io/IoSpace.d.ts.map +1 -0
  286. package/dist/io/IoSpace.js +30 -0
  287. package/dist/io/IoSpace.js.map +1 -0
  288. package/dist/machine/MachineRunner.d.ts +54 -0
  289. package/dist/machine/MachineRunner.d.ts.map +1 -0
  290. package/dist/machine/MachineRunner.js +102 -0
  291. package/dist/machine/MachineRunner.js.map +1 -0
  292. package/dist/machine/MachineSpec.d.ts +80 -0
  293. package/dist/machine/MachineSpec.d.ts.map +1 -0
  294. package/dist/machine/MachineSpec.js +9 -0
  295. package/dist/machine/MachineSpec.js.map +1 -0
  296. package/dist/machine/buildMachine.d.ts +19 -0
  297. package/dist/machine/buildMachine.d.ts.map +1 -0
  298. package/dist/machine/buildMachine.js +122 -0
  299. package/dist/machine/buildMachine.js.map +1 -0
  300. package/dist/memory/MemoryMappedIOAdapter.d.ts +14 -0
  301. package/dist/memory/MemoryMappedIOAdapter.d.ts.map +1 -0
  302. package/dist/memory/MemoryMappedIOAdapter.js +23 -0
  303. package/dist/memory/MemoryMappedIOAdapter.js.map +1 -0
  304. package/dist/memory/Ram.d.ts +17 -0
  305. package/dist/memory/Ram.d.ts.map +1 -0
  306. package/dist/memory/Ram.js +36 -0
  307. package/dist/memory/Ram.js.map +1 -0
  308. package/dist/memory/Rom.d.ts +13 -0
  309. package/dist/memory/Rom.d.ts.map +1 -0
  310. package/dist/memory/Rom.js +25 -0
  311. package/dist/memory/Rom.js.map +1 -0
  312. package/dist/util/bits.d.ts +11 -0
  313. package/dist/util/bits.d.ts.map +1 -0
  314. package/dist/util/bits.js +35 -0
  315. package/dist/util/bits.js.map +1 -0
  316. package/dist/util/hostConsole.d.ts +2 -0
  317. package/dist/util/hostConsole.d.ts.map +1 -0
  318. package/dist/util/hostConsole.js +4 -0
  319. package/dist/util/hostConsole.js.map +1 -0
  320. package/package.json +39 -0
@@ -0,0 +1,40 @@
1
+ /** Sign-extend an 8-bit displacement to a signed JS number. */
2
+ export function sext8(b) {
3
+ return (b & 0x80) !== 0 ? (b & 0xff) - 0x100 : b & 0xff;
4
+ }
5
+ /** HL view — the unprefixed instruction table. */
6
+ export const HL_VIEW = {
7
+ kind: 'hl',
8
+ indexed: false,
9
+ memExtra: 0,
10
+ getPair: (r) => r.hl,
11
+ setPair: (r, v) => { r.hl = v & 0xffff; },
12
+ getHi: (r) => r.h,
13
+ setHi: (r, v) => { r.h = v & 0xff; },
14
+ getLo: (r) => r.l,
15
+ setLo: (r, v) => { r.l = v & 0xff; },
16
+ // Plain (HL) access does not touch WZ.
17
+ memAddr: (cpu) => cpu.regs.hl,
18
+ };
19
+ function makeIndexView(kind, getReg, setReg, getH, setH, getL, setL) {
20
+ return {
21
+ kind,
22
+ indexed: true,
23
+ memExtra: 8, // 3 T to read d + 5 T internal add
24
+ getPair: getReg,
25
+ setPair: setReg,
26
+ getHi: getH,
27
+ setHi: setH,
28
+ getLo: getL,
29
+ setLo: setL,
30
+ memAddr: (cpu) => {
31
+ const d = sext8(cpu.fetchByte());
32
+ const addr = (getReg(cpu.regs) + d) & 0xffff;
33
+ cpu.regs.wz = addr;
34
+ return addr;
35
+ },
36
+ };
37
+ }
38
+ export const IX_VIEW = makeIndexView('ix', (r) => r.ix, (r, v) => { r.ix = v & 0xffff; }, (r) => r.ixh, (r, v) => { r.ixh = v; }, (r) => r.ixl, (r, v) => { r.ixl = v; });
39
+ export const IY_VIEW = makeIndexView('iy', (r) => r.iy, (r, v) => { r.iy = v & 0xffff; }, (r) => r.iyh, (r, v) => { r.iyh = v; }, (r) => r.iyl, (r, v) => { r.iyl = v; });
40
+ //# sourceMappingURL=views.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"views.js","sourceRoot":"","sources":["../../../src/cpu/z80/views.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ export type { IModule } from './interfaces/IModule.js';
2
+ export type { ICpu, CpuState } from './interfaces/ICpu.js';
3
+ export type { IBus } from './interfaces/IBus.js';
4
+ export type { IMemory } from './interfaces/IMemory.js';
5
+ export type { IIODevice } from './interfaces/IIODevice.js';
6
+ export type { IInterruptController } from './interfaces/IInterruptController.js';
7
+ export type { IClock } from './interfaces/IClock.js';
8
+ export type { IBusObserver } from './interfaces/IBusObserver.js';
9
+ export type { IS100Card } from './interfaces/IS100Card.js';
10
+ export { Cpu8080 } from './cpu/Cpu8080.js';
11
+ export { Registers } from './cpu/Registers.js';
12
+ export { Flags } from './cpu/Flags.js';
13
+ export { CpuZ80 } from './cpu/z80/CpuZ80.js';
14
+ export { RegistersZ80 } from './cpu/z80/RegistersZ80.js';
15
+ export { FlagsZ80 } from './cpu/z80/FlagsZ80.js';
16
+ export { Bus } from './bus/Bus.js';
17
+ export { SnoopBus } from './bus/SnoopBus.js';
18
+ export type { BusRegion } from './bus/BusRegion.js';
19
+ export { Ram } from './memory/Ram.js';
20
+ export { Rom } from './memory/Rom.js';
21
+ export { MemoryMappedIOAdapter } from './memory/MemoryMappedIOAdapter.js';
22
+ export { IoSpace } from './io/IoSpace.js';
23
+ export { InterruptController } from './interrupt/InterruptController.js';
24
+ export { ImmediateClock } from './clock/ImmediateClock.js';
25
+ export { SystemClock } from './clock/SystemClock.js';
26
+ export { MachineRunner } from './machine/MachineRunner.js';
27
+ export type { MachineRunnerOptions, CpuSpeed, ISteppable } from './machine/MachineRunner.js';
28
+ export { buildMachine } from './machine/buildMachine.js';
29
+ export type { BuildOptions } from './machine/buildMachine.js';
30
+ export { MachineSpecError } from './machine/MachineSpec.js';
31
+ export type { MachineSpec, Machine, CpuKind, Clock, MemoryRegionSpec, CardSpec, CardFactory, CardContext, } from './machine/MachineSpec.js';
32
+ export { withDefaults, CardConfigError } from './bundles/CardBundle.js';
33
+ export type { CardBundle, CardManifest, ConfigParamSpec, ClaimsFn } from './bundles/CardBundle.js';
34
+ export { seedBundles, seedBundleByName } from './bundles/seed/index.js';
35
+ export { kernels, kernelById, serialKernel, parallelKernel, keyboardKernel, vdmKernel, dazzlerKernel, rtcKernel, bankRamKernel } from './bundles/kernels.js';
36
+ export type { CardKernel } from './bundles/kernels.js';
37
+ export { SerialCard } from './cards/SerialCard.js';
38
+ export type { SerialChip, SerialCardOptions } from './cards/SerialCard.js';
39
+ export { ParallelCard } from './cards/ParallelCard.js';
40
+ export type { PortDirection, ParallelCardOptions, GpioPort } from './cards/ParallelCard.js';
41
+ export { KeyboardCard } from './cards/KeyboardCard.js';
42
+ export type { KeyboardPort, KeyboardCardOptions } from './cards/KeyboardCard.js';
43
+ export { VdmCard } from './cards/VdmCard.js';
44
+ export type { VdmCardOptions } from './cards/VdmCard.js';
45
+ export { DazzlerCard } from './cards/DazzlerCard.js';
46
+ export type { DazzlerCardOptions } from './cards/DazzlerCard.js';
47
+ export { RtcCard } from './cards/RtcCard.js';
48
+ export type { RtcCardOptions, RtcClock } from './cards/RtcCard.js';
49
+ export { BankRamCard } from './cards/BankRamCard.js';
50
+ export type { BankRamCardOptions } from './cards/BankRamCard.js';
51
+ export type { DisplaySurface, DisplayDescriptor, DisplayFrame } from './cards/DisplaySurface.js';
52
+ export { Usart8251 } from './cards/Usart8251.js';
53
+ export { ImsaiSioCard } from './cards/ImsaiSioCard.js';
54
+ export type { SioCardOptions } from './cards/ImsaiSioCard.js';
55
+ export { FdcPlusClient } from './cards/FdcPlusClient.js';
56
+ export type { WebSocketLike } from './cards/FdcPlusClient.js';
57
+ export { MitsDcddCard } from './cards/MitsDcddCard.js';
58
+ export type { DcddOptions } from './cards/MitsDcddCard.js';
59
+ export { Tr1602Uart } from './cards/Tr1602Uart.js';
60
+ export { Port8212 } from './cards/Port8212.js';
61
+ export { ImsaiMioCard } from './cards/ImsaiMioCard.js';
62
+ export type { MioCardOptions } from './cards/ImsaiMioCard.js';
63
+ export { Mc6850Acia } from './cards/Mc6850Acia.js';
64
+ export { Mits2SioCard } from './cards/Mits2SioCard.js';
65
+ export type { Sio2CardOptions } from './cards/Mits2SioCard.js';
66
+ export * from './util/bits.js';
67
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js ADDED
@@ -0,0 +1,49 @@
1
+ // CPU
2
+ export { Cpu8080 } from './cpu/Cpu8080.js';
3
+ export { Registers } from './cpu/Registers.js';
4
+ export { Flags } from './cpu/Flags.js';
5
+ export { CpuZ80 } from './cpu/z80/CpuZ80.js';
6
+ export { RegistersZ80 } from './cpu/z80/RegistersZ80.js';
7
+ export { FlagsZ80 } from './cpu/z80/FlagsZ80.js';
8
+ // Bus
9
+ export { Bus } from './bus/Bus.js';
10
+ export { SnoopBus } from './bus/SnoopBus.js';
11
+ // Memory
12
+ export { Ram } from './memory/Ram.js';
13
+ export { Rom } from './memory/Rom.js';
14
+ export { MemoryMappedIOAdapter } from './memory/MemoryMappedIOAdapter.js';
15
+ // IO
16
+ export { IoSpace } from './io/IoSpace.js';
17
+ // Interrupt
18
+ export { InterruptController } from './interrupt/InterruptController.js';
19
+ // Clock
20
+ export { ImmediateClock } from './clock/ImmediateClock.js';
21
+ export { SystemClock } from './clock/SystemClock.js';
22
+ // Machine
23
+ export { MachineRunner } from './machine/MachineRunner.js';
24
+ export { buildMachine } from './machine/buildMachine.js';
25
+ export { MachineSpecError } from './machine/MachineSpec.js';
26
+ // Card bundles (seed)
27
+ export { withDefaults, CardConfigError } from './bundles/CardBundle.js';
28
+ export { seedBundles, seedBundleByName } from './bundles/seed/index.js';
29
+ export { kernels, kernelById, serialKernel, parallelKernel, keyboardKernel, vdmKernel, dazzlerKernel, rtcKernel, bankRamKernel } from './bundles/kernels.js';
30
+ export { SerialCard } from './cards/SerialCard.js';
31
+ export { ParallelCard } from './cards/ParallelCard.js';
32
+ export { KeyboardCard } from './cards/KeyboardCard.js';
33
+ export { VdmCard } from './cards/VdmCard.js';
34
+ export { DazzlerCard } from './cards/DazzlerCard.js';
35
+ export { RtcCard } from './cards/RtcCard.js';
36
+ export { BankRamCard } from './cards/BankRamCard.js';
37
+ // Cards
38
+ export { Usart8251 } from './cards/Usart8251.js';
39
+ export { ImsaiSioCard } from './cards/ImsaiSioCard.js';
40
+ export { FdcPlusClient } from './cards/FdcPlusClient.js';
41
+ export { MitsDcddCard } from './cards/MitsDcddCard.js';
42
+ export { Tr1602Uart } from './cards/Tr1602Uart.js';
43
+ export { Port8212 } from './cards/Port8212.js';
44
+ export { ImsaiMioCard } from './cards/ImsaiMioCard.js';
45
+ export { Mc6850Acia } from './cards/Mc6850Acia.js';
46
+ export { Mits2SioCard } from './cards/Mits2SioCard.js';
47
+ // Utils
48
+ export * from './util/bits.js';
49
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAWA,MAAM;AACN,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEjD,MAAM;AACN,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAG7C,SAAS;AACT,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AACtC,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AACtC,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAE1E,KAAK;AACL,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE1C,YAAY;AACZ,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAEzE,QAAQ;AACR,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD,UAAU;AACV,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAE3D,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAY5D,sBAAsB;AACtB,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAExE,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE7J,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEnD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAEvD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAEvD,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAE7C,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAE7C,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAIrD,QAAQ;AACR,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAEvD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAEzD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAEvD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAEvD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAGvD,QAAQ;AACR,cAAc,gBAAgB,CAAC"}
@@ -0,0 +1,8 @@
1
+ export interface IBus {
2
+ read(address: number): number;
3
+ write(address: number, value: number): void;
4
+ ioRead(port: number): number;
5
+ ioWrite(port: number, value: number): void;
6
+ acknowledgeInterrupt(): number;
7
+ }
8
+ //# sourceMappingURL=IBus.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IBus.d.ts","sourceRoot":"","sources":["../../src/interfaces/IBus.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,IAAI;IACnB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;IAC9B,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5C,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IAC7B,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3C,oBAAoB,IAAI,MAAM,CAAC;CAChC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=IBus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IBus.js","sourceRoot":"","sources":["../../src/interfaces/IBus.ts"],"names":[],"mappings":""}
@@ -0,0 +1,7 @@
1
+ export interface IBusObserver {
2
+ onMemRead?(address: number, value: number): void;
3
+ onMemWrite?(address: number, value: number): void;
4
+ onIoRead?(port: number, value: number): void;
5
+ onIoWrite?(port: number, value: number): void;
6
+ }
7
+ //# sourceMappingURL=IBusObserver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IBusObserver.d.ts","sourceRoot":"","sources":["../../src/interfaces/IBusObserver.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,SAAS,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACjD,UAAU,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAClD,QAAQ,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7C,SAAS,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/C"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=IBusObserver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IBusObserver.js","sourceRoot":"","sources":["../../src/interfaces/IBusObserver.ts"],"names":[],"mappings":""}
@@ -0,0 +1,6 @@
1
+ export interface IClock {
2
+ addCycles(cycles: number): void;
3
+ getElapsedCycles(): bigint;
4
+ reset(): void;
5
+ }
6
+ //# sourceMappingURL=IClock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IClock.d.ts","sourceRoot":"","sources":["../../src/interfaces/IClock.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,MAAM;IACrB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,gBAAgB,IAAI,MAAM,CAAC;IAC3B,KAAK,IAAI,IAAI,CAAC;CACf"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=IClock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IClock.js","sourceRoot":"","sources":["../../src/interfaces/IClock.ts"],"names":[],"mappings":""}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Minimal common surface shared by every CPU core (Cpu8080, CpuZ80).
3
+ *
4
+ * Deliberately lightweight: it does NOT expose the register file or flags,
5
+ * because those differ between CPUs. It re-declares `step(): number`, so any
6
+ * ICpu is structurally assignable to `ISteppable` (src/machine/MachineRunner.ts)
7
+ * and can be driven by MachineRunner without either module importing the other.
8
+ */
9
+ export interface ICpu {
10
+ /** Execute one instruction (or service one pending interrupt); returns T-states consumed. */
11
+ step(): number;
12
+ /** Clear all registers, flags, and internal state to power-on defaults. */
13
+ reset(): void;
14
+ /** Run until halted or `maxCycles` T-states elapse; returns total T-states executed. */
15
+ run(maxCycles?: number): bigint;
16
+ /** True while the CPU is halted (HLT/HALT executed, awaiting an interrupt). */
17
+ halted: boolean;
18
+ /** Program counter, proxying the underlying register file. */
19
+ pc: number;
20
+ /** A uniform read-only register/flags snapshot for introspection (front panel,
21
+ * debuggers) — the common 8-bit registers both cores share. */
22
+ state(): CpuState;
23
+ }
24
+ /** A CPU register/flags snapshot — the registers common to the 8080 and Z80. */
25
+ export interface CpuState {
26
+ pc: number;
27
+ sp: number;
28
+ a: number;
29
+ /** Flags packed to a byte (PSW low byte on the 8080; F on the Z80). */
30
+ f: number;
31
+ b: number;
32
+ c: number;
33
+ d: number;
34
+ e: number;
35
+ h: number;
36
+ l: number;
37
+ halted: boolean;
38
+ /** Interrupt-enable flip-flop (8080 INTE / Z80 IFF1) — drives the panel INTE lamp. */
39
+ inte: boolean;
40
+ /** A maskable interrupt is currently asserted at the controller — the INT lamp. */
41
+ intPending: boolean;
42
+ /** 8080 status byte of the last instruction — drives the panel machine-cycle
43
+ * lamps (MEMR/INP/M1/OUT/STACK/WO/HLTA/INTA). See `status8080.ts`. */
44
+ status: number;
45
+ }
46
+ //# sourceMappingURL=ICpu.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ICpu.d.ts","sourceRoot":"","sources":["../../src/interfaces/ICpu.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,WAAW,IAAI;IACnB,6FAA6F;IAC7F,IAAI,IAAI,MAAM,CAAC;IACf,2EAA2E;IAC3E,KAAK,IAAI,IAAI,CAAC;IACd,wFAAwF;IACxF,GAAG,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAChC,+EAA+E;IAC/E,MAAM,EAAE,OAAO,CAAC;IAChB,8DAA8D;IAC9D,EAAE,EAAE,MAAM,CAAC;IACX;mEAC+D;IAC/D,KAAK,IAAI,QAAQ,CAAC;CACnB;AAED,gFAAgF;AAChF,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,CAAC,EAAE,MAAM,CAAC;IACV,uEAAuE;IACvE,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,MAAM,EAAE,OAAO,CAAC;IAChB,sFAAsF;IACtF,IAAI,EAAE,OAAO,CAAC;IACd,mFAAmF;IACnF,UAAU,EAAE,OAAO,CAAC;IACpB;0EACsE;IACtE,MAAM,EAAE,MAAM,CAAC;CAChB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ICpu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ICpu.js","sourceRoot":"","sources":["../../src/interfaces/ICpu.ts"],"names":[],"mappings":""}
@@ -0,0 +1,7 @@
1
+ import type { IModule } from './IModule.js';
2
+ export interface IIODevice extends IModule {
3
+ readonly basePorts: ReadonlyArray<number>;
4
+ ioRead(port: number): number;
5
+ ioWrite(port: number, value: number): void;
6
+ }
7
+ //# sourceMappingURL=IIODevice.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IIODevice.d.ts","sourceRoot":"","sources":["../../src/interfaces/IIODevice.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C,MAAM,WAAW,SAAU,SAAQ,OAAO;IACxC,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAC1C,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IAC7B,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5C"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=IIODevice.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IIODevice.js","sourceRoot":"","sources":["../../src/interfaces/IIODevice.ts"],"names":[],"mappings":""}
@@ -0,0 +1,8 @@
1
+ import type { IModule } from './IModule.js';
2
+ export interface IInterruptController extends IModule {
3
+ hasPendingInterrupt(): boolean;
4
+ acknowledge(): number;
5
+ assertIRQ(line: number): void;
6
+ clearIRQ(line: number): void;
7
+ }
8
+ //# sourceMappingURL=IInterruptController.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IInterruptController.d.ts","sourceRoot":"","sources":["../../src/interfaces/IInterruptController.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C,MAAM,WAAW,oBAAqB,SAAQ,OAAO;IACnD,mBAAmB,IAAI,OAAO,CAAC;IAC/B,WAAW,IAAI,MAAM,CAAC;IACtB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=IInterruptController.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IInterruptController.js","sourceRoot":"","sources":["../../src/interfaces/IInterruptController.ts"],"names":[],"mappings":""}
@@ -0,0 +1,9 @@
1
+ import type { IModule } from './IModule.js';
2
+ export interface IMemory extends IModule {
3
+ readonly baseAddress: number;
4
+ readonly size: number;
5
+ readonly readOnly: boolean;
6
+ read(offset: number): number;
7
+ write(offset: number, value: number): void;
8
+ }
9
+ //# sourceMappingURL=IMemory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IMemory.d.ts","sourceRoot":"","sources":["../../src/interfaces/IMemory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C,MAAM,WAAW,OAAQ,SAAQ,OAAO;IACtC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IAC7B,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5C"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=IMemory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IMemory.js","sourceRoot":"","sources":["../../src/interfaces/IMemory.ts"],"names":[],"mappings":""}
@@ -0,0 +1,5 @@
1
+ export interface IModule {
2
+ readonly id: string;
3
+ reset(): void;
4
+ }
5
+ //# sourceMappingURL=IModule.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IModule.d.ts","sourceRoot":"","sources":["../../src/interfaces/IModule.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,KAAK,IAAI,IAAI,CAAC;CACf"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=IModule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IModule.js","sourceRoot":"","sources":["../../src/interfaces/IModule.ts"],"names":[],"mappings":""}
@@ -0,0 +1,6 @@
1
+ import type { IModule } from './IModule.js';
2
+ import type { Bus } from '../bus/Bus.js';
3
+ export interface IS100Card extends IModule {
4
+ attach(bus: Bus): void;
5
+ }
6
+ //# sourceMappingURL=IS100Card.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IS100Card.d.ts","sourceRoot":"","sources":["../../src/interfaces/IS100Card.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAEzC,MAAM,WAAW,SAAU,SAAQ,OAAO;IACxC,MAAM,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CAAC;CACxB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=IS100Card.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IS100Card.js","sourceRoot":"","sources":["../../src/interfaces/IS100Card.ts"],"names":[],"mappings":""}
@@ -0,0 +1,10 @@
1
+ export type { IModule } from './IModule.js';
2
+ export type { ICpu } from './ICpu.js';
3
+ export type { IBus } from './IBus.js';
4
+ export type { IMemory } from './IMemory.js';
5
+ export type { IIODevice } from './IIODevice.js';
6
+ export type { IInterruptController } from './IInterruptController.js';
7
+ export type { IClock } from './IClock.js';
8
+ export type { IBusObserver } from './IBusObserver.js';
9
+ export type { IS100Card } from './IS100Card.js';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/interfaces/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,YAAY,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACtC,YAAY,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACtC,YAAY,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,YAAY,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,YAAY,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACtE,YAAY,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,YAAY,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/interfaces/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,13 @@
1
+ import type { IInterruptController } from '../interfaces/IInterruptController.js';
2
+ export declare class InterruptController implements IInterruptController {
3
+ readonly id = "pic";
4
+ private pending;
5
+ private readonly lines;
6
+ constructor(lines?: number);
7
+ hasPendingInterrupt(): boolean;
8
+ acknowledge(): number;
9
+ assertIRQ(line: number): void;
10
+ clearIRQ(line: number): void;
11
+ reset(): void;
12
+ }
13
+ //# sourceMappingURL=InterruptController.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InterruptController.d.ts","sourceRoot":"","sources":["../../src/interrupt/InterruptController.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAElF,qBAAa,mBAAoB,YAAW,oBAAoB;IAC9D,QAAQ,CAAC,EAAE,SAAS;IACpB,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;gBAEnB,KAAK,SAAI;IAIrB,mBAAmB,IAAI,OAAO;IAI9B,WAAW,IAAI,MAAM;IAYrB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAM7B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAM5B,KAAK,IAAI,IAAI;CAGd"}
@@ -0,0 +1,36 @@
1
+ export class InterruptController {
2
+ id = 'pic';
3
+ pending = 0; // bitmask of pending IRQ lines
4
+ lines;
5
+ constructor(lines = 8) {
6
+ this.lines = lines;
7
+ }
8
+ hasPendingInterrupt() {
9
+ return this.pending !== 0;
10
+ }
11
+ acknowledge() {
12
+ // Find lowest pending IRQ line
13
+ for (let i = 0; i < this.lines; i++) {
14
+ if ((this.pending & (1 << i)) !== 0) {
15
+ this.pending &= ~(1 << i);
16
+ // RST n instruction: 0b11_nnn_111
17
+ return 0xc7 | (i << 3);
18
+ }
19
+ }
20
+ return 0xff; // no interrupt (NOP)
21
+ }
22
+ assertIRQ(line) {
23
+ if (line >= 0 && line < this.lines) {
24
+ this.pending |= 1 << line;
25
+ }
26
+ }
27
+ clearIRQ(line) {
28
+ if (line >= 0 && line < this.lines) {
29
+ this.pending &= ~(1 << line);
30
+ }
31
+ }
32
+ reset() {
33
+ this.pending = 0;
34
+ }
35
+ }
36
+ //# sourceMappingURL=InterruptController.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InterruptController.js","sourceRoot":"","sources":["../../src/interrupt/InterruptController.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,mBAAmB;IACrB,EAAE,GAAG,KAAK,CAAC;IACZ,OAAO,GAAG,CAAC,CAAC,CAAC,+BAA+B;IACnC,KAAK,CAAS;IAE/B,YAAY,KAAK,GAAG,CAAC;QACnB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED,mBAAmB;QACjB,OAAO,IAAI,CAAC,OAAO,KAAK,CAAC,CAAC;IAC5B,CAAC;IAED,WAAW;QACT,+BAA+B;QAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;YACpC,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;gBACpC,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;gBAC1B,kCAAkC;gBAClC,OAAO,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YACzB,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC,CAAC,qBAAqB;IACpC,CAAC;IAED,SAAS,CAAC,IAAY;QACpB,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;YACnC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,IAAI,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,QAAQ,CAAC,IAAY;QACnB,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;YACnC,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;IAED,KAAK;QACH,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;IACnB,CAAC;CACF"}
@@ -0,0 +1,9 @@
1
+ import type { IIODevice } from '../interfaces/IIODevice.js';
2
+ export declare class IoSpace {
3
+ private devices;
4
+ register(dev: IIODevice): void;
5
+ read(port: number): number;
6
+ write(port: number, value: number): void;
7
+ reset(): void;
8
+ }
9
+ //# sourceMappingURL=IoSpace.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IoSpace.d.ts","sourceRoot":"","sources":["../../src/io/IoSpace.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAE5D,qBAAa,OAAO;IAClB,OAAO,CAAC,OAAO,CAAgC;IAE/C,QAAQ,CAAC,GAAG,EAAE,SAAS,GAAG,IAAI;IAM9B,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAM1B,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAMxC,KAAK,IAAI,IAAI;CASd"}
@@ -0,0 +1,30 @@
1
+ export class IoSpace {
2
+ devices = new Map();
3
+ register(dev) {
4
+ for (const port of dev.basePorts) {
5
+ this.devices.set(port & 0xff, dev);
6
+ }
7
+ }
8
+ read(port) {
9
+ const dev = this.devices.get(port & 0xff);
10
+ if (dev === undefined)
11
+ return 0xff;
12
+ return dev.ioRead(port & 0xff);
13
+ }
14
+ write(port, value) {
15
+ const dev = this.devices.get(port & 0xff);
16
+ if (dev === undefined)
17
+ return;
18
+ dev.ioWrite(port & 0xff, value & 0xff);
19
+ }
20
+ reset() {
21
+ const seen = new Set();
22
+ for (const dev of this.devices.values()) {
23
+ if (!seen.has(dev)) {
24
+ seen.add(dev);
25
+ dev.reset();
26
+ }
27
+ }
28
+ }
29
+ }
30
+ //# sourceMappingURL=IoSpace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IoSpace.js","sourceRoot":"","sources":["../../src/io/IoSpace.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,OAAO;IACV,OAAO,GAAG,IAAI,GAAG,EAAqB,CAAC;IAE/C,QAAQ,CAAC,GAAc;QACrB,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,SAAS,EAAE,CAAC;YACjC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,EAAE,GAAG,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IAED,IAAI,CAAC,IAAY;QACf,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;QAC1C,IAAI,GAAG,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC;QACnC,OAAO,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,IAAY,EAAE,KAAa;QAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;QAC1C,IAAI,GAAG,KAAK,SAAS;YAAE,OAAO;QAC9B,GAAG,CAAC,OAAO,CAAC,IAAI,GAAG,IAAI,EAAE,KAAK,GAAG,IAAI,CAAC,CAAC;IACzC,CAAC;IAED,KAAK;QACH,MAAM,IAAI,GAAG,IAAI,GAAG,EAAa,CAAC;QAClC,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;YACxC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBACnB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACd,GAAG,CAAC,KAAK,EAAE,CAAC;YACd,CAAC;QACH,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,54 @@
1
+ /** Anything with a step() that executes one instruction and returns T-states. */
2
+ export interface ISteppable {
3
+ step(): number;
4
+ }
5
+ /** Target CPU speed: a frequency in Hz, or 'max' for unthrottled execution. */
6
+ export type CpuSpeed = number | 'max';
7
+ export interface MachineRunnerOptions {
8
+ /** Target CPU clock. Default 2 MHz — a stock 8080. */
9
+ hz?: CpuSpeed;
10
+ /**
11
+ * Scheduler for the next tick. Defaults to setTimeout (browser-portable).
12
+ * Node callers wanting maximum throughput in 'max' mode can pass
13
+ * (fn, ms) => ms > 0 ? setTimeout(fn, ms) : setImmediate(fn).
14
+ */
15
+ schedule?: (fn: () => void, delayMs: number) => void;
16
+ /** Called after the runner stops itself because step() threw. */
17
+ onError?: (err: unknown) => void;
18
+ /** Time source in ms. Default performance.now — override for tests. */
19
+ now?: () => number;
20
+ }
21
+ /**
22
+ * Drives a CPU's step() loop at a configurable real-time speed.
23
+ *
24
+ * Throttled mode runs the CPU in ~1 ms slices of simulated time and compares
25
+ * simulated progress against wall time (absolute accounting via SystemClock,
26
+ * so timer jitter self-corrects): ahead → sleep the difference; behind → keep
27
+ * stepping up to MAX_SLICE_MS per tick, then yield so host I/O stays
28
+ * responsive. Host stalls beyond RESYNC_BEHIND_MS are forfeited rather than
29
+ * replayed at full speed.
30
+ */
31
+ export declare class MachineRunner {
32
+ private readonly cpu;
33
+ private hz;
34
+ private readonly clock;
35
+ private readonly schedule;
36
+ private readonly onError;
37
+ private readonly now;
38
+ private running;
39
+ private startedAt;
40
+ private cyclesAtStart;
41
+ constructor(cpu: ISteppable, options?: MachineRunnerOptions);
42
+ get targetHz(): CpuSpeed;
43
+ /** Measured average speed in Hz since start() — for status displays. */
44
+ get effectiveHz(): number;
45
+ get isRunning(): boolean;
46
+ /** Total simulated T-states executed across the runner's lifetime. */
47
+ get elapsedCycles(): bigint;
48
+ start(): void;
49
+ stop(): void;
50
+ /** Change speed while running; pacing restarts from this moment. */
51
+ setHz(hz: CpuSpeed): void;
52
+ private readonly tick;
53
+ }
54
+ //# sourceMappingURL=MachineRunner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MachineRunner.d.ts","sourceRoot":"","sources":["../../src/machine/MachineRunner.ts"],"names":[],"mappings":"AAEA,iFAAiF;AACjF,MAAM,WAAW,UAAU;IACzB,IAAI,IAAI,MAAM,CAAC;CAChB;AAED,+EAA+E;AAC/E,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,KAAK,CAAC;AAEtC,MAAM,WAAW,oBAAoB;IACnC,sDAAsD;IACtD,EAAE,CAAC,EAAE,QAAQ,CAAC;IACd;;;;OAIG;IACH,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,IAAI,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACrD,iEAAiE;IACjE,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;IACjC,uEAAuE;IACvE,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB;AASD;;;;;;;;;GASG;AACH,qBAAa,aAAa;IAUZ,OAAO,CAAC,QAAQ,CAAC,GAAG;IAThC,OAAO,CAAC,EAAE,CAAW;IACrB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAc;IACpC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA4C;IACrE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyB;IACjD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;IACnC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,aAAa,CAAM;gBAEE,GAAG,EAAE,UAAU,EAAE,OAAO,GAAE,oBAAyB;IAQhF,IAAI,QAAQ,IAAI,QAAQ,CAEvB;IAED,wEAAwE;IACxE,IAAI,WAAW,IAAI,MAAM,CAIxB;IAED,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED,sEAAsE;IACtE,IAAI,aAAa,IAAI,MAAM,CAE1B;IAED,KAAK,IAAI,IAAI;IASb,IAAI,IAAI,IAAI;IAIZ,oEAAoE;IACpE,KAAK,CAAC,EAAE,EAAE,QAAQ,GAAG,IAAI;IAOzB,OAAO,CAAC,QAAQ,CAAC,IAAI,CA0BnB;CACH"}