@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 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/bundles/seed/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import type { IBus } from '../interfaces/IBus.js';
2
+ import type { IMemory } from '../interfaces/IMemory.js';
3
+ import type { IIODevice } from '../interfaces/IIODevice.js';
4
+ import type { IInterruptController } from '../interfaces/IInterruptController.js';
5
+ export declare class Bus implements IBus {
6
+ private regions;
7
+ private ioSpace;
8
+ private pic;
9
+ constructor(pic: IInterruptController);
10
+ attachMemory(mem: IMemory): void;
11
+ attachIODevice(dev: IIODevice): void;
12
+ read(address: number): number;
13
+ write(address: number, value: number): void;
14
+ ioRead(port: number): number;
15
+ ioWrite(port: number, value: number): void;
16
+ acknowledgeInterrupt(): number;
17
+ getPic(): IInterruptController;
18
+ reset(): void;
19
+ private findRegion;
20
+ }
21
+ //# sourceMappingURL=Bus.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Bus.d.ts","sourceRoot":"","sources":["../../src/bus/Bus.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAIlF,qBAAa,GAAI,YAAW,IAAI;IAC9B,OAAO,CAAC,OAAO,CAAmB;IAClC,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,GAAG,CAAuB;gBAEtB,GAAG,EAAE,oBAAoB;IAKrC,YAAY,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI;IAKhC,cAAc,CAAC,GAAG,EAAE,SAAS,GAAG,IAAI;IAIpC,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAO7B,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAQ3C,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAI5B,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAI1C,oBAAoB,IAAI,MAAM;IAI9B,MAAM,IAAI,oBAAoB;IAI9B,KAAK,IAAI,IAAI;IAQb,OAAO,CAAC,UAAU;CAQnB"}
@@ -0,0 +1,62 @@
1
+ import { createRegion } from './BusRegion.js';
2
+ import { IoSpace } from '../io/IoSpace.js';
3
+ export class Bus {
4
+ regions = [];
5
+ ioSpace;
6
+ pic;
7
+ constructor(pic) {
8
+ this.pic = pic;
9
+ this.ioSpace = new IoSpace();
10
+ }
11
+ attachMemory(mem) {
12
+ this.regions.push(createRegion(mem));
13
+ this.regions.sort((a, b) => a.start - b.start);
14
+ }
15
+ attachIODevice(dev) {
16
+ this.ioSpace.register(dev);
17
+ }
18
+ read(address) {
19
+ const addr = address & 0xffff;
20
+ const region = this.findRegion(addr);
21
+ if (region === undefined)
22
+ return 0xff;
23
+ return region.module.read(addr - region.start);
24
+ }
25
+ write(address, value) {
26
+ const addr = address & 0xffff;
27
+ const region = this.findRegion(addr);
28
+ if (region === undefined)
29
+ return;
30
+ if (region.module.readOnly)
31
+ return;
32
+ region.module.write(addr - region.start, value);
33
+ }
34
+ ioRead(port) {
35
+ return this.ioSpace.read(port & 0xff);
36
+ }
37
+ ioWrite(port, value) {
38
+ this.ioSpace.write(port & 0xff, value & 0xff);
39
+ }
40
+ acknowledgeInterrupt() {
41
+ return this.pic.acknowledge();
42
+ }
43
+ getPic() {
44
+ return this.pic;
45
+ }
46
+ reset() {
47
+ for (const region of this.regions) {
48
+ region.module.reset();
49
+ }
50
+ this.ioSpace.reset();
51
+ this.pic.reset();
52
+ }
53
+ findRegion(addr) {
54
+ for (const region of this.regions) {
55
+ if (addr >= region.start && addr <= region.end) {
56
+ return region;
57
+ }
58
+ }
59
+ return undefined;
60
+ }
61
+ }
62
+ //# sourceMappingURL=Bus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Bus.js","sourceRoot":"","sources":["../../src/bus/Bus.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAkB,MAAM,gBAAgB,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAE3C,MAAM,OAAO,GAAG;IACN,OAAO,GAAgB,EAAE,CAAC;IAC1B,OAAO,CAAU;IACjB,GAAG,CAAuB;IAElC,YAAY,GAAyB;QACnC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAC/B,CAAC;IAED,YAAY,CAAC,GAAY;QACvB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;QACrC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;IACjD,CAAC;IAED,cAAc,CAAC,GAAc;QAC3B,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IAED,IAAI,CAAC,OAAe;QAClB,MAAM,IAAI,GAAG,OAAO,GAAG,MAAM,CAAC;QAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC;QACtC,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IACjD,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,KAAa;QAClC,MAAM,IAAI,GAAG,OAAO,GAAG,MAAM,CAAC;QAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO;QACjC,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ;YAAE,OAAO;QACnC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAClD,CAAC;IAED,MAAM,CAAC,IAAY;QACjB,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;IACxC,CAAC;IAED,OAAO,CAAC,IAAY,EAAE,KAAa;QACjC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,EAAE,KAAK,GAAG,IAAI,CAAC,CAAC;IAChD,CAAC;IAED,oBAAoB;QAClB,OAAO,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;IAChC,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAC,GAAG,CAAC;IAClB,CAAC;IAED,KAAK;QACH,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAClC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACxB,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACrB,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;IACnB,CAAC;IAEO,UAAU,CAAC,IAAY;QAC7B,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAClC,IAAI,IAAI,IAAI,MAAM,CAAC,KAAK,IAAI,IAAI,IAAI,MAAM,CAAC,GAAG,EAAE,CAAC;gBAC/C,OAAO,MAAM,CAAC;YAChB,CAAC;QACH,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;CACF"}
@@ -0,0 +1,8 @@
1
+ import type { IMemory } from '../interfaces/IMemory.js';
2
+ export interface BusRegion {
3
+ readonly start: number;
4
+ readonly end: number;
5
+ readonly module: IMemory;
6
+ }
7
+ export declare function createRegion(module: IMemory): BusRegion;
8
+ //# sourceMappingURL=BusRegion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BusRegion.d.ts","sourceRoot":"","sources":["../../src/bus/BusRegion.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAExD,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CAC1B;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,OAAO,GAAG,SAAS,CAMvD"}
@@ -0,0 +1,8 @@
1
+ export function createRegion(module) {
2
+ return {
3
+ start: module.baseAddress,
4
+ end: module.baseAddress + module.size - 1,
5
+ module,
6
+ };
7
+ }
8
+ //# sourceMappingURL=BusRegion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BusRegion.js","sourceRoot":"","sources":["../../src/bus/BusRegion.ts"],"names":[],"mappings":"AAQA,MAAM,UAAU,YAAY,CAAC,MAAe;IAC1C,OAAO;QACL,KAAK,EAAE,MAAM,CAAC,WAAW;QACzB,GAAG,EAAE,MAAM,CAAC,WAAW,GAAG,MAAM,CAAC,IAAI,GAAG,CAAC;QACzC,MAAM;KACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { IBus } from '../interfaces/IBus.js';
2
+ import type { IBusObserver } from '../interfaces/IBusObserver.js';
3
+ export declare class SnoopBus implements IBus {
4
+ private inner;
5
+ private observers;
6
+ constructor(inner: IBus);
7
+ attach(observer: IBusObserver): void;
8
+ detach(observer: IBusObserver): void;
9
+ read(address: number): number;
10
+ write(address: number, value: number): void;
11
+ ioRead(port: number): number;
12
+ ioWrite(port: number, value: number): void;
13
+ acknowledgeInterrupt(): number;
14
+ }
15
+ //# sourceMappingURL=SnoopBus.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SnoopBus.d.ts","sourceRoot":"","sources":["../../src/bus/SnoopBus.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAElE,qBAAa,QAAS,YAAW,IAAI;IAGvB,OAAO,CAAC,KAAK;IAFzB,OAAO,CAAC,SAAS,CAAsB;gBAEnB,KAAK,EAAE,IAAI;IAE/B,MAAM,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI;IAIpC,MAAM,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI;IAKpC,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAM7B,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAK3C,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAM5B,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAK1C,oBAAoB,IAAI,MAAM;CAG/B"}
@@ -0,0 +1,41 @@
1
+ export class SnoopBus {
2
+ inner;
3
+ observers = [];
4
+ constructor(inner) {
5
+ this.inner = inner;
6
+ }
7
+ attach(observer) {
8
+ this.observers.push(observer);
9
+ }
10
+ detach(observer) {
11
+ const i = this.observers.indexOf(observer);
12
+ if (i !== -1)
13
+ this.observers.splice(i, 1);
14
+ }
15
+ read(address) {
16
+ const value = this.inner.read(address);
17
+ for (const obs of this.observers)
18
+ obs.onMemRead?.(address & 0xffff, value);
19
+ return value;
20
+ }
21
+ write(address, value) {
22
+ this.inner.write(address, value);
23
+ for (const obs of this.observers)
24
+ obs.onMemWrite?.(address & 0xffff, value & 0xff);
25
+ }
26
+ ioRead(port) {
27
+ const value = this.inner.ioRead(port);
28
+ for (const obs of this.observers)
29
+ obs.onIoRead?.(port & 0xff, value);
30
+ return value;
31
+ }
32
+ ioWrite(port, value) {
33
+ this.inner.ioWrite(port, value);
34
+ for (const obs of this.observers)
35
+ obs.onIoWrite?.(port & 0xff, value & 0xff);
36
+ }
37
+ acknowledgeInterrupt() {
38
+ return this.inner.acknowledgeInterrupt();
39
+ }
40
+ }
41
+ //# sourceMappingURL=SnoopBus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SnoopBus.js","sourceRoot":"","sources":["../../src/bus/SnoopBus.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,QAAQ;IAGC;IAFZ,SAAS,GAAmB,EAAE,CAAC;IAEvC,YAAoB,KAAW;QAAX,UAAK,GAAL,KAAK,CAAM;IAAG,CAAC;IAEnC,MAAM,CAAC,QAAsB;QAC3B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAChC,CAAC;IAED,MAAM,CAAC,QAAsB;QAC3B,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC3C,IAAI,CAAC,KAAK,CAAC,CAAC;YAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5C,CAAC;IAED,IAAI,CAAC,OAAe;QAClB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACvC,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,SAAS;YAAE,GAAG,CAAC,SAAS,EAAE,CAAC,OAAO,GAAG,MAAM,EAAE,KAAK,CAAC,CAAC;QAC3E,OAAO,KAAK,CAAC;IACf,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,KAAa;QAClC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACjC,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,SAAS;YAAE,GAAG,CAAC,UAAU,EAAE,CAAC,OAAO,GAAG,MAAM,EAAE,KAAK,GAAG,IAAI,CAAC,CAAC;IACrF,CAAC;IAED,MAAM,CAAC,IAAY;QACjB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACtC,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,SAAS;YAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,IAAI,GAAG,IAAI,EAAE,KAAK,CAAC,CAAC;QACrE,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,CAAC,IAAY,EAAE,KAAa;QACjC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAChC,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,SAAS;YAAE,GAAG,CAAC,SAAS,EAAE,CAAC,IAAI,GAAG,IAAI,EAAE,KAAK,GAAG,IAAI,CAAC,CAAC;IAC/E,CAAC;IAED,oBAAoB;QAClB,OAAO,IAAI,CAAC,KAAK,CAAC,oBAAoB,EAAE,CAAC;IAC3C,CAAC;CACF"}
@@ -0,0 +1,35 @@
1
+ import type { IS100Card } from '../interfaces/IS100Card.js';
2
+ import type { Bus } from '../bus/Bus.js';
3
+ export interface BankRamCardOptions {
4
+ /** Address of the switched window (top of the CPU's 64K it appears in). */
5
+ readonly window?: number;
6
+ /** Bytes visible in the window (one bank's worth). */
7
+ readonly size?: number;
8
+ /** How many banks of RAM the card carries. */
9
+ readonly banks?: number;
10
+ /** I/O port that selects the active bank. */
11
+ readonly selectPort?: number;
12
+ }
13
+ /**
14
+ * Bank-switching RAM card (Story 5.10) — the S-100 way past the 8080/Z80's 64K
15
+ * ceiling. The card carries N banks of RAM but shows only one at a time in a
16
+ * fixed address window; a write to the select port swaps which bank is visible.
17
+ * Total RAM is banks × size, addressable a window at a time (the classic
18
+ * Cromemco/North Star / CP/M-80 bank scheme).
19
+ *
20
+ * The card manages its own memory, so it attaches a banked region directly to
21
+ * the bus rather than declaring a static MachineSpec region — keep the window
22
+ * clear of other RAM/ROM (the engine can't overlap-check card-attached memory).
23
+ */
24
+ export declare class BankRamCard implements IS100Card {
25
+ readonly id: string;
26
+ private readonly banks;
27
+ private readonly selectPort;
28
+ private current;
29
+ private readonly mem;
30
+ private readonly dev;
31
+ constructor(id?: string, opts?: BankRamCardOptions);
32
+ attach(bus: Bus): void;
33
+ reset(): void;
34
+ }
35
+ //# sourceMappingURL=BankRamCard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BankRamCard.d.ts","sourceRoot":"","sources":["../../src/cards/BankRamCard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAG5D,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAGzC,MAAM,WAAW,kBAAkB;IACjC,2EAA2E;IAC3E,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,sDAAsD;IACtD,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,8CAA8C;IAC9C,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,6CAA6C;IAC7C,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED;;;;;;;;;;GAUG;AACH,qBAAa,WAAY,YAAW,SAAS;IAC3C,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAe;IACrC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAU;IAC9B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAY;gBAEpB,EAAE,SAAY,EAAE,IAAI,GAAE,kBAAuB;IA2BzD,MAAM,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI;IAKtB,KAAK,IAAI,IAAI;CAId"}
@@ -0,0 +1,56 @@
1
+ import { u8 } from '../util/bits.js';
2
+ /**
3
+ * Bank-switching RAM card (Story 5.10) — the S-100 way past the 8080/Z80's 64K
4
+ * ceiling. The card carries N banks of RAM but shows only one at a time in a
5
+ * fixed address window; a write to the select port swaps which bank is visible.
6
+ * Total RAM is banks × size, addressable a window at a time (the classic
7
+ * Cromemco/North Star / CP/M-80 bank scheme).
8
+ *
9
+ * The card manages its own memory, so it attaches a banked region directly to
10
+ * the bus rather than declaring a static MachineSpec region — keep the window
11
+ * clear of other RAM/ROM (the engine can't overlap-check card-attached memory).
12
+ */
13
+ export class BankRamCard {
14
+ id;
15
+ banks;
16
+ selectPort;
17
+ current = 0;
18
+ mem;
19
+ dev;
20
+ constructor(id = 'bankram', opts = {}) {
21
+ this.id = id;
22
+ const window = (opts.window ?? 0xc000) & 0xffff;
23
+ const size = Math.max(1, Math.min(0x10000, opts.size ?? 0x4000));
24
+ const bankCount = Math.max(1, Math.min(256, opts.banks ?? 4));
25
+ this.selectPort = (opts.selectPort ?? 0x40) & 0xff;
26
+ this.banks = Array.from({ length: bankCount }, () => new Uint8Array(size));
27
+ const self = this;
28
+ this.mem = {
29
+ id: `${id}:ram`,
30
+ baseAddress: window,
31
+ size,
32
+ readOnly: false,
33
+ read: (offset) => self.banks[self.current][offset] ?? 0xff,
34
+ write: (offset, value) => { self.banks[self.current][offset] = u8(value); },
35
+ reset: () => { for (const b of self.banks)
36
+ b.fill(0); self.current = 0; },
37
+ };
38
+ this.dev = {
39
+ id: `${id}:sel`,
40
+ basePorts: [this.selectPort],
41
+ ioRead: () => self.current & 0xff,
42
+ ioWrite: (_port, value) => { self.current = (value & 0xff) % self.banks.length; },
43
+ reset: () => { self.current = 0; },
44
+ };
45
+ }
46
+ attach(bus) {
47
+ bus.attachMemory(this.mem);
48
+ bus.attachIODevice(this.dev);
49
+ }
50
+ reset() {
51
+ for (const b of this.banks)
52
+ b.fill(0);
53
+ this.current = 0;
54
+ }
55
+ }
56
+ //# sourceMappingURL=BankRamCard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BankRamCard.js","sourceRoot":"","sources":["../../src/cards/BankRamCard.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAarC;;;;;;;;;;GAUG;AACH,MAAM,OAAO,WAAW;IACb,EAAE,CAAS;IACH,KAAK,CAAe;IACpB,UAAU,CAAS;IAC5B,OAAO,GAAG,CAAC,CAAC;IACH,GAAG,CAAU;IACb,GAAG,CAAY;IAEhC,YAAY,EAAE,GAAG,SAAS,EAAE,OAA2B,EAAE;QACvD,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,GAAG,MAAM,CAAC;QAChD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,IAAI,MAAM,CAAC,CAAC,CAAC;QACjE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC;QAC9D,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC;QACnD,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,GAAG,EAAE,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;QAE3E,MAAM,IAAI,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,GAAG,GAAG;YACT,EAAE,EAAE,GAAG,EAAE,MAAM;YACf,WAAW,EAAE,MAAM;YACnB,IAAI;YACJ,QAAQ,EAAE,KAAK;YACf,IAAI,EAAE,CAAC,MAAc,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAE,CAAC,MAAM,CAAC,IAAI,IAAI;YACnE,KAAK,EAAE,CAAC,MAAc,EAAE,KAAa,EAAE,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAE,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC5F,KAAK,EAAE,GAAG,EAAE,GAAG,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK;gBAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC;SAC1E,CAAC;QACF,IAAI,CAAC,GAAG,GAAG;YACT,EAAE,EAAE,GAAG,EAAE,MAAM;YACf,SAAS,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC;YAC5B,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI;YACjC,OAAO,EAAE,CAAC,KAAa,EAAE,KAAa,EAAE,EAAE,GAAG,IAAI,CAAC,OAAO,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;YACjG,KAAK,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC;SACnC,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,GAAQ;QACb,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC3B,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC/B,CAAC;IAED,KAAK;QACH,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK;YAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACtC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;IACnB,CAAC;CACF"}
@@ -0,0 +1,42 @@
1
+ import type { IS100Card } from '../interfaces/IS100Card.js';
2
+ import type { Bus } from '../bus/Bus.js';
3
+ import type { DisplaySurface } from './DisplaySurface.js';
4
+ export interface DazzlerCardOptions {
5
+ /** Control port — D7 enables the picture, D0–D6 select the buffer page. */
6
+ readonly controlPort?: number;
7
+ /** Format port — resolution / colour / memory-size bits. */
8
+ readonly formatPort?: number;
9
+ }
10
+ /**
11
+ * Cromemco Dazzler (Story 5.9) — the first S-100 colour graphics card (1976).
12
+ *
13
+ * Unlike the VDM-1 (which *is* the video RAM, memory-mapped), the Dazzler is a
14
+ * DMA display: the CPU points it at any page of ordinary system RAM and it reads
15
+ * the pixels back over the bus each frame. Two output ports drive it:
16
+ *
17
+ * - control (0x0E): D7 = picture on, D0–D6 = buffer page (base = page << 9).
18
+ * - format (0x0F): D6 = 2K/512, D5 = X4 resolution, D4 = colour/mono, D0–D3 =
19
+ * the on-colour in monochrome X4 mode.
20
+ *
21
+ * The card exposes a `bitmap` display surface carrying the raw quadrant-
22
+ * interleaved buffer plus the format state; the host unpacks it (de-interleave +
23
+ * 4-bit RGBI palette). Reading the control port returns a toggling frame-sync
24
+ * bit (D6) so retrace-polling software makes progress.
25
+ */
26
+ export declare class DazzlerCard implements IS100Card {
27
+ readonly id: string;
28
+ readonly display: DisplaySurface;
29
+ private readonly controlPort;
30
+ private readonly formatPort;
31
+ private control;
32
+ private format;
33
+ private frameFlip;
34
+ private bus?;
35
+ private readonly dev;
36
+ constructor(id?: string, opts?: DazzlerCardOptions);
37
+ attach(bus: Bus): void;
38
+ reset(): void;
39
+ /** DMA the display buffer out of system RAM at the current page. */
40
+ private dma;
41
+ }
42
+ //# sourceMappingURL=DazzlerCard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DazzlerCard.d.ts","sourceRoot":"","sources":["../../src/cards/DazzlerCard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAE5D,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAK1D,MAAM,WAAW,kBAAkB;IACjC,2EAA2E;IAC3E,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,4DAA4D;IAC5D,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,WAAY,YAAW,SAAS;IAC3C,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;IACjC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,GAAG,CAAC,CAAM;IAClB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAY;gBAEpB,EAAE,SAAY,EAAE,IAAI,GAAE,kBAAuB;IAmCzD,MAAM,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI;IAKtB,KAAK,IAAI,IAAI;IAIb,oEAAoE;IACpE,OAAO,CAAC,GAAG;CAQZ"}
@@ -0,0 +1,83 @@
1
+ /** The Dazzler DMAs at most 2 KB (its high-resolution buffer) from system RAM. */
2
+ const MAX_BUFFER = 2048;
3
+ /**
4
+ * Cromemco Dazzler (Story 5.9) — the first S-100 colour graphics card (1976).
5
+ *
6
+ * Unlike the VDM-1 (which *is* the video RAM, memory-mapped), the Dazzler is a
7
+ * DMA display: the CPU points it at any page of ordinary system RAM and it reads
8
+ * the pixels back over the bus each frame. Two output ports drive it:
9
+ *
10
+ * - control (0x0E): D7 = picture on, D0–D6 = buffer page (base = page << 9).
11
+ * - format (0x0F): D6 = 2K/512, D5 = X4 resolution, D4 = colour/mono, D0–D3 =
12
+ * the on-colour in monochrome X4 mode.
13
+ *
14
+ * The card exposes a `bitmap` display surface carrying the raw quadrant-
15
+ * interleaved buffer plus the format state; the host unpacks it (de-interleave +
16
+ * 4-bit RGBI palette). Reading the control port returns a toggling frame-sync
17
+ * bit (D6) so retrace-polling software makes progress.
18
+ */
19
+ export class DazzlerCard {
20
+ id;
21
+ display;
22
+ controlPort;
23
+ formatPort;
24
+ control = 0; // D7 = on, D0–D6 = page
25
+ format = 0; // resolution / colour / size
26
+ frameFlip = 0; // toggling sync bit for control-port reads
27
+ bus;
28
+ dev;
29
+ constructor(id = 'dazzler', opts = {}) {
30
+ this.id = id;
31
+ this.controlPort = (opts.controlPort ?? 0x0e) & 0xff;
32
+ this.formatPort = (opts.formatPort ?? 0x0f) & 0xff;
33
+ const self = this;
34
+ this.dev = {
35
+ id: `${id}:io`,
36
+ basePorts: this.controlPort === this.formatPort ? [this.controlPort] : [this.controlPort, this.formatPort],
37
+ ioRead(port) {
38
+ if ((port & 0xff) === self.controlPort) {
39
+ self.frameFlip ^= 0x40; // vertical-retrace sync bit toggles each read
40
+ return self.frameFlip;
41
+ }
42
+ return 0;
43
+ },
44
+ ioWrite(port, value) {
45
+ if ((port & 0xff) === self.controlPort)
46
+ self.control = value & 0xff;
47
+ else if ((port & 0xff) === self.formatPort)
48
+ self.format = value & 0xff;
49
+ },
50
+ reset() {
51
+ self.control = 0;
52
+ self.format = 0;
53
+ self.frameFlip = 0;
54
+ },
55
+ };
56
+ this.display = {
57
+ descriptor: { mode: 'bitmap', width: 128, height: 128, format: 'dazzler' },
58
+ frame: () => ({
59
+ bytes: this.dma(),
60
+ state: { on: (this.control >> 7) & 1, format: this.format, control: this.control },
61
+ }),
62
+ };
63
+ }
64
+ attach(bus) {
65
+ this.bus = bus;
66
+ bus.attachIODevice(this.dev);
67
+ }
68
+ reset() {
69
+ this.dev.reset();
70
+ }
71
+ /** DMA the display buffer out of system RAM at the current page. */
72
+ dma() {
73
+ const out = new Uint8Array(MAX_BUFFER);
74
+ const bus = this.bus;
75
+ if (!bus)
76
+ return out;
77
+ const base = (this.control & 0x7f) << 9;
78
+ for (let i = 0; i < MAX_BUFFER; i++)
79
+ out[i] = bus.read((base + i) & 0xffff) & 0xff;
80
+ return out;
81
+ }
82
+ }
83
+ //# sourceMappingURL=DazzlerCard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DazzlerCard.js","sourceRoot":"","sources":["../../src/cards/DazzlerCard.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * The host-side surface a video card exposes (Bitsby8 Story 5.9) — the display
3
+ * counterpart to a serial card's `.channel` or a parallel card's `.gpio`. The
4
+ * host reads a frame each refresh and renders it per the descriptor's mode:
5
+ * - `charGrid` — a character display (VDM-1): a text grid rendered via a font.
6
+ * - `bitmap` — a packed pixel buffer (Dazzler): unpacked per pixel format.
7
+ * The bytes come from the machine's memory (read via the bus), so what the CPU
8
+ * writes to video RAM shows on screen.
9
+ */
10
+ export type DisplayDescriptor = {
11
+ readonly mode: 'charGrid';
12
+ readonly cols: number;
13
+ readonly rows: number;
14
+ readonly font: string;
15
+ readonly attrBit: number;
16
+ } | {
17
+ readonly mode: 'bitmap';
18
+ readonly width: number;
19
+ readonly height: number;
20
+ readonly format: string;
21
+ };
22
+ export interface DisplayFrame {
23
+ /** The current source bytes (a character buffer, or a packed pixel buffer). */
24
+ readonly bytes: Uint8Array;
25
+ /** Dynamic per-frame state (e.g. VDM scroll line, Dazzler on/format). */
26
+ readonly state: Record<string, number>;
27
+ }
28
+ export interface DisplaySurface {
29
+ readonly descriptor: DisplayDescriptor;
30
+ frame(): DisplayFrame;
31
+ }
32
+ //# sourceMappingURL=DisplaySurface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DisplaySurface.d.ts","sourceRoot":"","sources":["../../src/cards/DisplaySurface.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,MAAM,iBAAiB,GACzB;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAC5H;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAE1G,MAAM,WAAW,YAAY;IAC3B,+EAA+E;IAC/E,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,yEAAyE;IACzE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACxC;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,UAAU,EAAE,iBAAiB,CAAC;IACvC,KAAK,IAAI,YAAY,CAAC;CACvB"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * The host-side surface a video card exposes (Bitsby8 Story 5.9) — the display
3
+ * counterpart to a serial card's `.channel` or a parallel card's `.gpio`. The
4
+ * host reads a frame each refresh and renders it per the descriptor's mode:
5
+ * - `charGrid` — a character display (VDM-1): a text grid rendered via a font.
6
+ * - `bitmap` — a packed pixel buffer (Dazzler): unpacked per pixel format.
7
+ * The bytes come from the machine's memory (read via the bus), so what the CPU
8
+ * writes to video RAM shows on screen.
9
+ */
10
+ export {};
11
+ //# sourceMappingURL=DisplaySurface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DisplaySurface.js","sourceRoot":"","sources":["../../src/cards/DisplaySurface.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG"}
@@ -0,0 +1,35 @@
1
+ export interface WebSocketLike {
2
+ send(data: Uint8Array): void;
3
+ close(): void;
4
+ onmessage: ((ev: {
5
+ data: ArrayBuffer | Uint8Array;
6
+ }) => void) | null;
7
+ onclose: (() => void) | null;
8
+ onerror: ((err: unknown) => void) | null;
9
+ readonly readyState: number;
10
+ }
11
+ export declare class FdcPlusClient {
12
+ private readonly ws;
13
+ private rxBuf;
14
+ private rxTotal;
15
+ private pending;
16
+ private chainTail;
17
+ constructor(ws: WebSocketLike);
18
+ stat(drive: number, headLoad: boolean, track: number): Promise<number>;
19
+ readTrack(drive: number, track: number, length: number): Promise<Uint8Array>;
20
+ writeTrack(drive: number, track: number, data: Uint8Array): Promise<void>;
21
+ /**
22
+ * Run one full request/response exchange with exclusive use of the wire.
23
+ * Starts synchronously when the wire is idle (device registers depend on the
24
+ * command going out on the same tick); queues behind the in-flight exchange
25
+ * otherwise. A failed exchange never blocks the queue.
26
+ */
27
+ private exchange;
28
+ private makeCmd;
29
+ private parseCmd;
30
+ private enqueue;
31
+ private drain;
32
+ private collect;
33
+ private rejectAll;
34
+ }
35
+ //# sourceMappingURL=FdcPlusClient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FdcPlusClient.d.ts","sourceRoot":"","sources":["../../src/cards/FdcPlusClient.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,CAAC;IAC7B,KAAK,IAAI,IAAI,CAAC;IACd,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE;QAAE,IAAI,EAAE,WAAW,GAAG,UAAU,CAAA;KAAE,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC;IACrE,OAAO,EAAI,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,CAAC;IAC/B,OAAO,EAAI,CAAC,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC;IAC3C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAQD,qBAAa,aAAa;IAWZ,OAAO,CAAC,QAAQ,CAAC,EAAE;IAV/B,OAAO,CAAC,KAAK,CAAsB;IACnC,OAAO,CAAC,OAAO,CAAM;IACrB,OAAO,CAAC,OAAO,CAAsB;IAMrC,OAAO,CAAC,SAAS,CAA8B;gBAElB,EAAE,EAAE,aAAa;IAa9C,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAQtE,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAQ5E,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBzE;;;;;OAKG;IACH,OAAO,CAAC,QAAQ;IAQhB,OAAO,CAAC,OAAO;IAUf,OAAO,CAAC,QAAQ;IAShB,OAAO,CAAC,OAAO;IAOf,OAAO,CAAC,KAAK;IASb,OAAO,CAAC,OAAO;IAsBf,OAAO,CAAC,SAAS;CAIlB"}