@jhlagado/azm 0.1.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 (301) hide show
  1. package/LICENSE +649 -0
  2. package/README.md +142 -0
  3. package/dist/src/analysis.d.ts +11 -0
  4. package/dist/src/analysis.js +41 -0
  5. package/dist/src/api-compile.d.ts +8 -0
  6. package/dist/src/api-compile.js +3 -0
  7. package/dist/src/api-tooling.d.ts +25 -0
  8. package/dist/src/api-tooling.js +21 -0
  9. package/dist/src/cli.d.ts +30 -0
  10. package/dist/src/cli.js +523 -0
  11. package/dist/src/compile.d.ts +10 -0
  12. package/dist/src/compile.js +175 -0
  13. package/dist/src/compileShared.d.ts +3 -0
  14. package/dist/src/compileShared.js +7 -0
  15. package/dist/src/diagnosticTypes.d.ts +77 -0
  16. package/dist/src/diagnosticTypes.js +53 -0
  17. package/dist/src/formats/index.d.ts +7 -0
  18. package/dist/src/formats/index.js +17 -0
  19. package/dist/src/formats/range.d.ts +17 -0
  20. package/dist/src/formats/range.js +45 -0
  21. package/dist/src/formats/types.d.ts +208 -0
  22. package/dist/src/formats/types.js +1 -0
  23. package/dist/src/formats/writeAsm80.d.ts +6 -0
  24. package/dist/src/formats/writeAsm80.js +86 -0
  25. package/dist/src/formats/writeBin.d.ts +7 -0
  26. package/dist/src/formats/writeBin.js +23 -0
  27. package/dist/src/formats/writeD8m.d.ts +9 -0
  28. package/dist/src/formats/writeD8m.js +239 -0
  29. package/dist/src/formats/writeHex.d.ts +9 -0
  30. package/dist/src/formats/writeHex.js +39 -0
  31. package/dist/src/formats/writeListing.d.ts +8 -0
  32. package/dist/src/formats/writeListing.js +83 -0
  33. package/dist/src/frontend/asm80/asmLine.d.ts +39 -0
  34. package/dist/src/frontend/asm80/asmLine.js +89 -0
  35. package/dist/src/frontend/asm80/parseAsmRawValues.d.ts +4 -0
  36. package/dist/src/frontend/asm80/parseAsmRawValues.js +94 -0
  37. package/dist/src/frontend/asm80/quoteScan.d.ts +10 -0
  38. package/dist/src/frontend/asm80/quoteScan.js +25 -0
  39. package/dist/src/frontend/ast.d.ts +376 -0
  40. package/dist/src/frontend/ast.js +1 -0
  41. package/dist/src/frontend/directiveAliases.d.ts +14 -0
  42. package/dist/src/frontend/directiveAliases.js +189 -0
  43. package/dist/src/frontend/grammarData.d.ts +14 -0
  44. package/dist/src/frontend/grammarData.js +65 -0
  45. package/dist/src/frontend/immExprUtils.d.ts +2 -0
  46. package/dist/src/frontend/immExprUtils.js +12 -0
  47. package/dist/src/frontend/parseAsmFlatDirectiveLine.d.ts +17 -0
  48. package/dist/src/frontend/parseAsmFlatDirectiveLine.js +187 -0
  49. package/dist/src/frontend/parseAsmInstruction.d.ts +3 -0
  50. package/dist/src/frontend/parseAsmInstruction.js +73 -0
  51. package/dist/src/frontend/parseAsmStatements.d.ts +6 -0
  52. package/dist/src/frontend/parseAsmStatements.js +16 -0
  53. package/dist/src/frontend/parseAsmStream.d.ts +10 -0
  54. package/dist/src/frontend/parseAsmStream.js +33 -0
  55. package/dist/src/frontend/parseAsmTopLevel.d.ts +18 -0
  56. package/dist/src/frontend/parseAsmTopLevel.js +34 -0
  57. package/dist/src/frontend/parseDiagnostics.d.ts +9 -0
  58. package/dist/src/frontend/parseDiagnostics.js +16 -0
  59. package/dist/src/frontend/parseEnum.d.ts +12 -0
  60. package/dist/src/frontend/parseEnum.js +70 -0
  61. package/dist/src/frontend/parseImm.d.ts +10 -0
  62. package/dist/src/frontend/parseImm.js +397 -0
  63. package/dist/src/frontend/parseLogicalLines.d.ts +11 -0
  64. package/dist/src/frontend/parseLogicalLines.js +94 -0
  65. package/dist/src/frontend/parseOp.d.ts +25 -0
  66. package/dist/src/frontend/parseOp.js +120 -0
  67. package/dist/src/frontend/parseOpHeader.d.ts +20 -0
  68. package/dist/src/frontend/parseOpHeader.js +32 -0
  69. package/dist/src/frontend/parseOperands.d.ts +4 -0
  70. package/dist/src/frontend/parseOperands.js +290 -0
  71. package/dist/src/frontend/parseParams.d.ts +6 -0
  72. package/dist/src/frontend/parseParams.js +62 -0
  73. package/dist/src/frontend/parseParserRecovery.d.ts +12 -0
  74. package/dist/src/frontend/parseParserRecovery.js +17 -0
  75. package/dist/src/frontend/parseParserShared.d.ts +2 -0
  76. package/dist/src/frontend/parseParserShared.js +8 -0
  77. package/dist/src/frontend/parseRawDataDirectiveStart.d.ts +1 -0
  78. package/dist/src/frontend/parseRawDataDirectiveStart.js +3 -0
  79. package/dist/src/frontend/parseRawDataDirectives.d.ts +7 -0
  80. package/dist/src/frontend/parseRawDataDirectives.js +142 -0
  81. package/dist/src/frontend/parseRecordFieldDecl.d.ts +34 -0
  82. package/dist/src/frontend/parseRecordFieldDecl.js +177 -0
  83. package/dist/src/frontend/parseSourceItemDispatch.d.ts +46 -0
  84. package/dist/src/frontend/parseSourceItemDispatch.js +53 -0
  85. package/dist/src/frontend/parseSourceItemTable.d.ts +16 -0
  86. package/dist/src/frontend/parseSourceItemTable.js +68 -0
  87. package/dist/src/frontend/parseTopLevelCommon.d.ts +11 -0
  88. package/dist/src/frontend/parseTopLevelCommon.js +50 -0
  89. package/dist/src/frontend/parseTypes.d.ts +24 -0
  90. package/dist/src/frontend/parseTypes.js +77 -0
  91. package/dist/src/frontend/parser.d.ts +11 -0
  92. package/dist/src/frontend/parser.js +88 -0
  93. package/dist/src/frontend/source.d.ts +28 -0
  94. package/dist/src/frontend/source.js +58 -0
  95. package/dist/src/frontend/sourceExtensions.d.ts +2 -0
  96. package/dist/src/frontend/sourceExtensions.js +6 -0
  97. package/dist/src/index.d.ts +3 -0
  98. package/dist/src/index.js +2 -0
  99. package/dist/src/lintCaseStyle.d.ts +4 -0
  100. package/dist/src/lintCaseStyle.js +129 -0
  101. package/dist/src/lowering/asmDirectiveLowering.d.ts +4 -0
  102. package/dist/src/lowering/asmDirectiveLowering.js +229 -0
  103. package/dist/src/lowering/asmDirectiveTraversal.d.ts +47 -0
  104. package/dist/src/lowering/asmDirectiveTraversal.js +52 -0
  105. package/dist/src/lowering/asmEquResolution.d.ts +8 -0
  106. package/dist/src/lowering/asmEquResolution.js +69 -0
  107. package/dist/src/lowering/asmInstructionLdHelpers.d.ts +15 -0
  108. package/dist/src/lowering/asmInstructionLdHelpers.js +102 -0
  109. package/dist/src/lowering/asmInstructionLowering.d.ts +5 -0
  110. package/dist/src/lowering/asmInstructionLowering.js +54 -0
  111. package/dist/src/lowering/asmInstructionStream.d.ts +46 -0
  112. package/dist/src/lowering/asmInstructionStream.js +51 -0
  113. package/dist/src/lowering/asmLoweringBranchCall.d.ts +43 -0
  114. package/dist/src/lowering/asmLoweringBranchCall.js +254 -0
  115. package/dist/src/lowering/asmLoweringHost.d.ts +23 -0
  116. package/dist/src/lowering/asmLoweringHost.js +1 -0
  117. package/dist/src/lowering/asmLoweringLd.d.ts +28 -0
  118. package/dist/src/lowering/asmLoweringLd.js +144 -0
  119. package/dist/src/lowering/asmRangeLowering.d.ts +17 -0
  120. package/dist/src/lowering/asmRangeLowering.js +39 -0
  121. package/dist/src/lowering/asmRawDataLowering.d.ts +16 -0
  122. package/dist/src/lowering/asmRawDataLowering.js +209 -0
  123. package/dist/src/lowering/asmSourceEmitter.d.ts +4 -0
  124. package/dist/src/lowering/asmSourceEmitter.js +9 -0
  125. package/dist/src/lowering/asmSourceInstructionLowering.d.ts +4 -0
  126. package/dist/src/lowering/asmSourceInstructionLowering.js +14 -0
  127. package/dist/src/lowering/asmUtils.d.ts +13 -0
  128. package/dist/src/lowering/asmUtils.js +105 -0
  129. package/dist/src/lowering/assemblerFlowSetup.d.ts +54 -0
  130. package/dist/src/lowering/assemblerFlowSetup.js +128 -0
  131. package/dist/src/lowering/assemblerLoweringContext.d.ts +151 -0
  132. package/dist/src/lowering/assemblerLoweringContext.js +16 -0
  133. package/dist/src/lowering/assemblerLoweringContextSplit.d.ts +7 -0
  134. package/dist/src/lowering/assemblerLoweringContextSplit.js +75 -0
  135. package/dist/src/lowering/assemblerLoweringPhases.d.ts +66 -0
  136. package/dist/src/lowering/assemblerLoweringPhases.js +166 -0
  137. package/dist/src/lowering/bytePlacement.d.ts +7 -0
  138. package/dist/src/lowering/bytePlacement.js +37 -0
  139. package/dist/src/lowering/capabilities.d.ts +67 -0
  140. package/dist/src/lowering/capabilities.js +1 -0
  141. package/dist/src/lowering/eaResolution.d.ts +58 -0
  142. package/dist/src/lowering/eaResolution.js +159 -0
  143. package/dist/src/lowering/emissionCore.d.ts +17 -0
  144. package/dist/src/lowering/emissionCore.js +21 -0
  145. package/dist/src/lowering/emit.d.ts +17 -0
  146. package/dist/src/lowering/emit.js +46 -0
  147. package/dist/src/lowering/emitContextBuilder.d.ts +63 -0
  148. package/dist/src/lowering/emitContextBuilder.js +41 -0
  149. package/dist/src/lowering/emitFinalization.d.ts +61 -0
  150. package/dist/src/lowering/emitFinalization.js +66 -0
  151. package/dist/src/lowering/emitFinalizationSetup.d.ts +19 -0
  152. package/dist/src/lowering/emitFinalizationSetup.js +26 -0
  153. package/dist/src/lowering/emitPhase1BuildProgramLoweringContext.d.ts +7 -0
  154. package/dist/src/lowering/emitPhase1BuildProgramLoweringContext.js +119 -0
  155. package/dist/src/lowering/emitPhase1Helpers.d.ts +4 -0
  156. package/dist/src/lowering/emitPhase1Helpers.js +12 -0
  157. package/dist/src/lowering/emitPhase1Types.d.ts +21 -0
  158. package/dist/src/lowering/emitPhase1Types.js +1 -0
  159. package/dist/src/lowering/emitPhase1WirePipeline.d.ts +70 -0
  160. package/dist/src/lowering/emitPhase1WirePipeline.js +203 -0
  161. package/dist/src/lowering/emitPhase1Workspace.d.ts +82 -0
  162. package/dist/src/lowering/emitPhase1Workspace.js +55 -0
  163. package/dist/src/lowering/emitPipeline.d.ts +121 -0
  164. package/dist/src/lowering/emitPipeline.js +57 -0
  165. package/dist/src/lowering/emitProgramContext.d.ts +39 -0
  166. package/dist/src/lowering/emitProgramContext.js +29 -0
  167. package/dist/src/lowering/emitState.d.ts +90 -0
  168. package/dist/src/lowering/emitState.js +124 -0
  169. package/dist/src/lowering/fixupBaseResolution.d.ts +7 -0
  170. package/dist/src/lowering/fixupBaseResolution.js +23 -0
  171. package/dist/src/lowering/fixupEmission.d.ts +64 -0
  172. package/dist/src/lowering/fixupEmission.js +199 -0
  173. package/dist/src/lowering/immMath.d.ts +2 -0
  174. package/dist/src/lowering/immMath.js +34 -0
  175. package/dist/src/lowering/inputAssets.d.ts +7 -0
  176. package/dist/src/lowering/inputAssets.js +106 -0
  177. package/dist/src/lowering/ldEncoding.d.ts +15 -0
  178. package/dist/src/lowering/ldEncoding.js +12 -0
  179. package/dist/src/lowering/ldEncodingRegMemHelpers.d.ts +5 -0
  180. package/dist/src/lowering/ldEncodingRegMemHelpers.js +124 -0
  181. package/dist/src/lowering/ldFormSelection.d.ts +26 -0
  182. package/dist/src/lowering/ldFormSelection.js +92 -0
  183. package/dist/src/lowering/ldLowering.d.ts +7 -0
  184. package/dist/src/lowering/ldLowering.js +13 -0
  185. package/dist/src/lowering/loweredAsmByteEmission.d.ts +23 -0
  186. package/dist/src/lowering/loweredAsmByteEmission.js +185 -0
  187. package/dist/src/lowering/loweredAsmPlacement.d.ts +13 -0
  188. package/dist/src/lowering/loweredAsmPlacement.js +86 -0
  189. package/dist/src/lowering/loweredAsmStreamRecording.d.ts +27 -0
  190. package/dist/src/lowering/loweredAsmStreamRecording.js +215 -0
  191. package/dist/src/lowering/loweredAsmTypes.d.ts +202 -0
  192. package/dist/src/lowering/loweredAsmTypes.js +1 -0
  193. package/dist/src/lowering/loweredFormat.d.ts +3 -0
  194. package/dist/src/lowering/loweredFormat.js +26 -0
  195. package/dist/src/lowering/loweredItemSize.d.ts +4 -0
  196. package/dist/src/lowering/loweredItemSize.js +17 -0
  197. package/dist/src/lowering/loweringDiagnostics.d.ts +9 -0
  198. package/dist/src/lowering/loweringDiagnostics.js +55 -0
  199. package/dist/src/lowering/loweringTypes.d.ts +27 -0
  200. package/dist/src/lowering/loweringTypes.js +1 -0
  201. package/dist/src/lowering/opCandidateRegistry.d.ts +9 -0
  202. package/dist/src/lowering/opCandidateRegistry.js +9 -0
  203. package/dist/src/lowering/opExpansionExecution.d.ts +15 -0
  204. package/dist/src/lowering/opExpansionExecution.js +45 -0
  205. package/dist/src/lowering/opExpansionOrchestration.d.ts +15 -0
  206. package/dist/src/lowering/opExpansionOrchestration.js +88 -0
  207. package/dist/src/lowering/opExpansionStream.d.ts +12 -0
  208. package/dist/src/lowering/opExpansionStream.js +176 -0
  209. package/dist/src/lowering/opMatching.d.ts +52 -0
  210. package/dist/src/lowering/opMatching.js +355 -0
  211. package/dist/src/lowering/opSubstitution.d.ts +13 -0
  212. package/dist/src/lowering/opSubstitution.js +175 -0
  213. package/dist/src/lowering/prescanTypes.d.ts +7 -0
  214. package/dist/src/lowering/prescanTypes.js +1 -0
  215. package/dist/src/lowering/programLowering.d.ts +144 -0
  216. package/dist/src/lowering/programLowering.js +2 -0
  217. package/dist/src/lowering/programLoweringDeclarations.d.ts +5 -0
  218. package/dist/src/lowering/programLoweringDeclarations.js +5 -0
  219. package/dist/src/lowering/programLoweringFinalize.d.ts +18 -0
  220. package/dist/src/lowering/programLoweringFinalize.js +115 -0
  221. package/dist/src/lowering/programLoweringTraversal.d.ts +2 -0
  222. package/dist/src/lowering/programLoweringTraversal.js +93 -0
  223. package/dist/src/lowering/programPrescan.d.ts +3 -0
  224. package/dist/src/lowering/programPrescan.js +37 -0
  225. package/dist/src/lowering/traceFormat.d.ts +13 -0
  226. package/dist/src/lowering/traceFormat.js +211 -0
  227. package/dist/src/pathCompare.d.ts +3 -0
  228. package/dist/src/pathCompare.js +26 -0
  229. package/dist/src/pipeline.d.ts +78 -0
  230. package/dist/src/pipeline.js +1 -0
  231. package/dist/src/registerCare/analyze.d.ts +24 -0
  232. package/dist/src/registerCare/analyze.js +327 -0
  233. package/dist/src/registerCare/annotate.d.ts +11 -0
  234. package/dist/src/registerCare/annotate.js +76 -0
  235. package/dist/src/registerCare/boundaryHints.d.ts +2 -0
  236. package/dist/src/registerCare/boundaryHints.js +10 -0
  237. package/dist/src/registerCare/carriers.d.ts +4 -0
  238. package/dist/src/registerCare/carriers.js +78 -0
  239. package/dist/src/registerCare/controlFlow.d.ts +5 -0
  240. package/dist/src/registerCare/controlFlow.js +35 -0
  241. package/dist/src/registerCare/fix.d.ts +11 -0
  242. package/dist/src/registerCare/fix.js +119 -0
  243. package/dist/src/registerCare/liveness.d.ts +7 -0
  244. package/dist/src/registerCare/liveness.js +227 -0
  245. package/dist/src/registerCare/profiles.d.ts +11 -0
  246. package/dist/src/registerCare/profiles.js +45 -0
  247. package/dist/src/registerCare/programModel.d.ts +3 -0
  248. package/dist/src/registerCare/programModel.js +181 -0
  249. package/dist/src/registerCare/report.d.ts +5 -0
  250. package/dist/src/registerCare/report.js +139 -0
  251. package/dist/src/registerCare/smartComments.d.ts +5 -0
  252. package/dist/src/registerCare/smartComments.js +247 -0
  253. package/dist/src/registerCare/sourceText.d.ts +8 -0
  254. package/dist/src/registerCare/sourceText.js +15 -0
  255. package/dist/src/registerCare/summary.d.ts +3 -0
  256. package/dist/src/registerCare/summary.js +492 -0
  257. package/dist/src/registerCare/tooling.d.ts +42 -0
  258. package/dist/src/registerCare/tooling.js +50 -0
  259. package/dist/src/registerCare/types.d.ts +154 -0
  260. package/dist/src/registerCare/types.js +1 -0
  261. package/dist/src/semantics/declVisitor.d.ts +5 -0
  262. package/dist/src/semantics/declVisitor.js +11 -0
  263. package/dist/src/semantics/env.d.ts +28 -0
  264. package/dist/src/semantics/env.js +432 -0
  265. package/dist/src/semantics/layout.d.ts +21 -0
  266. package/dist/src/semantics/layout.js +226 -0
  267. package/dist/src/semantics/layoutCastFold.d.ts +22 -0
  268. package/dist/src/semantics/layoutCastFold.js +118 -0
  269. package/dist/src/semantics/semanticsDiagnostics.d.ts +2 -0
  270. package/dist/src/semantics/semanticsDiagnostics.js +4 -0
  271. package/dist/src/semantics/typeQueries.d.ts +31 -0
  272. package/dist/src/semantics/typeQueries.js +124 -0
  273. package/dist/src/sourceIncludeExpansion.d.ts +17 -0
  274. package/dist/src/sourceIncludeExpansion.js +124 -0
  275. package/dist/src/sourceIncludePaths.d.ts +1 -0
  276. package/dist/src/sourceIncludePaths.js +12 -0
  277. package/dist/src/sourceLoader.d.ts +15 -0
  278. package/dist/src/sourceLoader.js +118 -0
  279. package/dist/src/z80/effects.d.ts +3 -0
  280. package/dist/src/z80/effects.js +516 -0
  281. package/dist/src/z80/encode.d.ts +10 -0
  282. package/dist/src/z80/encode.js +412 -0
  283. package/dist/src/z80/encodeAlu.d.ts +7 -0
  284. package/dist/src/z80/encodeAlu.js +219 -0
  285. package/dist/src/z80/encodeBitOps.d.ts +7 -0
  286. package/dist/src/z80/encodeBitOps.js +123 -0
  287. package/dist/src/z80/encodeContext.d.ts +29 -0
  288. package/dist/src/z80/encodeContext.js +1 -0
  289. package/dist/src/z80/encodeControl.d.ts +26 -0
  290. package/dist/src/z80/encodeControl.js +180 -0
  291. package/dist/src/z80/encodeCoreOps.d.ts +7 -0
  292. package/dist/src/z80/encodeCoreOps.js +131 -0
  293. package/dist/src/z80/encodeIo.d.ts +9 -0
  294. package/dist/src/z80/encodeIo.js +128 -0
  295. package/dist/src/z80/encodeLd.d.ts +13 -0
  296. package/dist/src/z80/encodeLd.js +273 -0
  297. package/dist/src/z80/encoderRegistry.d.ts +13 -0
  298. package/dist/src/z80/encoderRegistry.js +169 -0
  299. package/docs/reference/cli.md +134 -0
  300. package/docs/reference/tooling-api.md +248 -0
  301. package/package.json +98 -0
@@ -0,0 +1,248 @@
1
+ # AZM Tooling API
2
+
3
+ `@jhlagado/azm` exposes a stable programmatic surface for Node tooling. Use
4
+ these imports instead of deep paths under `dist/src`.
5
+
6
+ Install the package once, then import from the public entry points:
7
+
8
+ ```sh
9
+ npm install @jhlagado/azm
10
+ ```
11
+
12
+ ## Stable entry points
13
+
14
+ - `@jhlagado/azm`
15
+ Re-exports the stable public surface.
16
+ - `@jhlagado/azm/tooling`
17
+ Layer A/B APIs for parsing, loading, diagnostics, spans, and semantics-only analysis.
18
+ - `@jhlagado/azm/compile`
19
+ Layer C compile API and default format writers.
20
+
21
+ ## Debug80 Integration Path
22
+
23
+ Debug80 should link through the public package entry points, not internal
24
+ `dist/src/...` paths.
25
+
26
+ Use this path when Debug80 needs editor-style diagnostics, symbols, or
27
+ register-care information without writing files:
28
+
29
+ ```ts
30
+ import { analyzeProgram, analyzeRegisterCareForTools, loadProgram } from '@jhlagado/azm/tooling';
31
+
32
+ const loaded = await loadProgram({
33
+ entryFile: '/abs/path/to/main.asm',
34
+ includeDirs: ['/abs/path/to/includes'],
35
+ });
36
+
37
+ if (!loaded.loadedProgram) {
38
+ return loaded.diagnostics;
39
+ }
40
+
41
+ const analysis = analyzeProgram(loaded.loadedProgram, {
42
+ caseStyle: 'consistent',
43
+ requireMain: false,
44
+ });
45
+
46
+ const registerCare = analyzeRegisterCareForTools(loaded.loadedProgram, {
47
+ mode: 'audit',
48
+ profile: 'mon3',
49
+ });
50
+ ```
51
+
52
+ Use this path when Debug80 needs assembled bytes and debugger metadata:
53
+
54
+ ```ts
55
+ import { compile, defaultFormatWriters } from '@jhlagado/azm/compile';
56
+
57
+ const result = await compile(
58
+ '/abs/path/to/main.asm',
59
+ {
60
+ includeDirs: ['/abs/path/to/includes'],
61
+ outputType: 'hex',
62
+ emitBin: true,
63
+ emitHex: true,
64
+ emitD8m: true,
65
+ emitListing: true,
66
+ registerCare: 'audit',
67
+ registerCareInterfaces: ['/abs/path/to/mon3.asmi'],
68
+ },
69
+ { formats: defaultFormatWriters },
70
+ );
71
+
72
+ const diagnostics = result.diagnostics;
73
+ const d8m = result.artifacts.find((artifact) => artifact.kind === 'd8m');
74
+ const binary = result.artifacts.find((artifact) => artifact.kind === 'bin');
75
+ ```
76
+
77
+ The integration contract is:
78
+
79
+ - source entries are `.asm` or `.z80`
80
+ - external register-care contracts are `.asmi`
81
+ - include search paths are supplied explicitly with `includeDirs`
82
+ - directive alias JSON files are supplied explicitly with `directiveAliasFiles`
83
+ - `compile()` returns artifacts in memory; the CLI is only responsible for
84
+ writing those artifacts to disk
85
+ - Debug80 should consume the `d8m` artifact for source/address metadata and the
86
+ `bin` or `hex` artifact for loadable bytes
87
+ - diagnostics are data objects and should be displayed directly rather than
88
+ parsed from CLI text
89
+
90
+ ## Layer A: Load and Parse
91
+
92
+ Use `loadProgram()` when you need the same AST, spans, and diagnostics that the compiler uses, but without lowering or writing artifacts.
93
+
94
+ ```ts
95
+ import { loadProgram } from '@jhlagado/azm/tooling';
96
+
97
+ const result = await loadProgram({
98
+ entryFile: '/abs/path/to/main.asm',
99
+ includeDirs: ['/abs/path/to/includes'],
100
+ preloadedText: 'ORG 0100H\\nSTART:\\n RET\\n',
101
+ });
102
+
103
+ if (result.loadedProgram) {
104
+ console.log(result.loadedProgram.program.kind); // "Program"
105
+ }
106
+
107
+ for (const diagnostic of result.diagnostics) {
108
+ console.log(diagnostic.id, diagnostic.message);
109
+ }
110
+ ```
111
+
112
+ Notes:
113
+
114
+ - `preloadedText` applies to the entry file only. This is intended for unsaved editor buffers.
115
+ - `signal?: AbortSignal` is accepted for best-effort cancellation of stale editor work.
116
+ - `parseEntryOnly` is not part of v1. Use `loadProgram()` and debounce at the caller when needed.
117
+
118
+ ## Layer B: Analyze Without Emitting
119
+
120
+ Use `analyzeProgram()` after `loadProgram()` to run the current non-codegen semantic checks:
121
+
122
+ - entry contract validation such as `requireMain`
123
+ - case-style linting
124
+ - environment building
125
+ - instruction acceptance checks that do not require lowering
126
+
127
+ ```ts
128
+ import { analyzeProgram, loadProgram } from '@jhlagado/azm/tooling';
129
+
130
+ const loaded = await loadProgram({ entryFile: '/abs/path/to/main.asm' });
131
+ if (!loaded.loadedProgram) {
132
+ throw new Error('Parse/load failed');
133
+ }
134
+
135
+ const analysis = analyzeProgram(loaded.loadedProgram, {
136
+ caseStyle: 'consistent',
137
+ requireMain: true,
138
+ });
139
+
140
+ console.log(analysis.diagnostics);
141
+ ```
142
+
143
+ `analysis.env` is returned only when semantic analysis completes without errors.
144
+
145
+ ## Register-Care Tooling
146
+
147
+ Use `analyzeRegisterCareForTools()` after `loadProgram()` when an editor, lint runner, or future LSP server needs register-care diagnostics without parsing report text. The function returns the same inferred output candidates used by the CLI report, plus ready-to-apply quick-fix metadata for confirming intent at the call site.
148
+
149
+ ```ts
150
+ import { analyzeRegisterCareForTools, loadProgram } from '@jhlagado/azm/tooling';
151
+
152
+ const loaded = await loadProgram({ entryFile: '/abs/path/to/main.z80' });
153
+ if (!loaded.loadedProgram) {
154
+ throw new Error('Parse/load failed');
155
+ }
156
+
157
+ const registerCare = analyzeRegisterCareForTools(loaded.loadedProgram, {
158
+ mode: 'audit',
159
+ profile: 'mon3',
160
+ });
161
+
162
+ for (const diagnostic of registerCare.candidateDiagnostics) {
163
+ console.log(diagnostic.file, diagnostic.line, diagnostic.message);
164
+ console.log(diagnostic.autoFixable); // true when CLI --fix can safely add the hint
165
+ console.log(diagnostic.codeAction.edit.text); // "; expects out A\n"
166
+ }
167
+ ```
168
+
169
+ Candidate diagnostics use `kind: "register-care-output-candidate"` and `severity: "info"`.
170
+ The `autoFixable` flag distinguishes direct continuation reads that `--fix` may
171
+ confirm automatically from cases that need programmer review. Code actions are
172
+ intentionally simple text insertions: insert the supplied newline-terminated
173
+ `text` at column 1 of the supplied `line`, so the hint is inserted above the call
174
+ instruction. This keeps CLI, editor light-bulbs, and future LSP integrations
175
+ aligned around one inference source.
176
+
177
+ ## Layer C: Full Compile
178
+
179
+ Use `compile()` when you want assembly plus output artifacts.
180
+
181
+ ```ts
182
+ import { compile, defaultFormatWriters } from '@jhlagado/azm/compile';
183
+
184
+ const result = await compile(
185
+ '/abs/path/to/main.asm',
186
+ { outputType: 'hex', emitAsm80: true },
187
+ { formats: defaultFormatWriters },
188
+ );
189
+ ```
190
+
191
+ The compiler accepts flat `.asm` / `.z80` source, retained AZM assembler
192
+ features, and the same output writers used by the CLI. External register-care
193
+ interfaces are `.asmi` metadata files, not compile entry files.
194
+
195
+ Retained AZM features include the ASM80 baseline, compact AZMDoc `;!` comments,
196
+ directive aliases, AST `op` declarations, enums, `.type` / `.union`, `sizeof`,
197
+ `offset`, constant-only layout casts, and scalar type shorthand in `.ds` and
198
+ `.field`.
199
+
200
+ High-level ZAX constructs such as modules/imports, `func`, locals, formal args,
201
+ typed assignment/storage lowering, named sections, structured control, and
202
+ generated frames are outside this API contract for AZM source.
203
+
204
+ ## Public Types
205
+
206
+ The public tooling surface includes:
207
+
208
+ - `Diagnostic`, `DiagnosticIds`, severity/id types
209
+ - `SourcePosition`, `SourceSpan`
210
+ - `ProgramNode`, `SourceFileNode`, `SourceItemNode`
211
+ - `LoadedProgram`
212
+ - `CompileEnv`
213
+ - `RegisterCareCandidateDiagnostic`, `RegisterCareCodeAction`, `RegisterCareOutputCandidate`
214
+
215
+ In v1, the AST exported from `src/frontend/ast.ts` is part of the public contract. Additive fields are minor-version changes; breaking shape changes are major-version changes.
216
+
217
+ ## Syntax Highlighting Example
218
+
219
+ Syntax colouring is an example consumer of the tooling API:
220
+
221
+ 1. Call `loadProgram()` with the file path and optional unsaved buffer text.
222
+ 2. Walk `ProgramNode` and inspect `node.kind` plus `node.span`.
223
+ 3. Map those spans to TextMate scopes or semantic token kinds in the editor.
224
+ 4. Fall back to regex/TextMate-only colouring if parsing fails or the editor needs a cheaper fast path.
225
+
226
+ The same spans and node kinds also support outline views, hover preparation, diagnostics, and navigation features.
227
+
228
+ ## Migration From Deep Imports
229
+
230
+ Replace unstable imports such as:
231
+
232
+ ```ts
233
+ import { loadProgram } from '@jhlagado/azm/dist/src/sourceLoader.js';
234
+ ```
235
+
236
+ with:
237
+
238
+ ```ts
239
+ import { loadProgram } from '@jhlagado/azm/tooling';
240
+ ```
241
+
242
+ Likewise, prefer `@jhlagado/azm/compile` over `@jhlagado/azm/dist/src/compile.js`.
243
+
244
+ ## Semver Policy
245
+
246
+ - Patch: bug fixes that preserve the intent of exported APIs and types
247
+ - Minor: additive exports, additive AST fields, new optional options
248
+ - Major: breaking changes to exported types, AST node shapes, or public function behavior
package/package.json ADDED
@@ -0,0 +1,98 @@
1
+ {
2
+ "name": "@jhlagado/azm",
3
+ "version": "0.1.0",
4
+ "description": "AZM assembler for the Z80 family (Node.js CLI)",
5
+ "license": "GPL-3.0-only",
6
+ "engines": {
7
+ "node": ">=20"
8
+ },
9
+ "type": "module",
10
+ "exports": {
11
+ ".": {
12
+ "types": "./dist/src/index.d.ts",
13
+ "import": "./dist/src/index.js"
14
+ },
15
+ "./compile": {
16
+ "types": "./dist/src/api-compile.d.ts",
17
+ "import": "./dist/src/api-compile.js"
18
+ },
19
+ "./tooling": {
20
+ "types": "./dist/src/api-tooling.d.ts",
21
+ "import": "./dist/src/api-tooling.js"
22
+ },
23
+ "./cli": {
24
+ "types": "./dist/src/cli.d.ts",
25
+ "import": "./dist/src/cli.js",
26
+ "default": "./dist/src/cli.js"
27
+ },
28
+ "./package.json": "./package.json"
29
+ },
30
+ "types": "dist/src/index.d.ts",
31
+ "bin": {
32
+ "azm": "dist/src/cli.js"
33
+ },
34
+ "files": [
35
+ "dist/src",
36
+ "docs/reference/cli.md",
37
+ "docs/reference/tooling-api.md"
38
+ ],
39
+ "publishConfig": {
40
+ "access": "public"
41
+ },
42
+ "repository": {
43
+ "type": "git",
44
+ "url": "git+https://github.com/jhlagado/AZM.git"
45
+ },
46
+ "bugs": {
47
+ "url": "https://github.com/jhlagado/AZM/issues"
48
+ },
49
+ "homepage": "https://github.com/jhlagado/AZM#readme",
50
+ "keywords": [
51
+ "assembler",
52
+ "z80",
53
+ "retro",
54
+ "8-bit",
55
+ "azm"
56
+ ],
57
+ "scripts": {
58
+ "clean": "rm -rf dist",
59
+ "build": "npm run clean && tsc -p tsconfig.json",
60
+ "typecheck": "tsc -p tsconfig.json --noEmit",
61
+ "lint": "eslint \"src/**/*.ts\" \"test/**/*.ts\"",
62
+ "lint:fix": "eslint \"src/**/*.ts\" \"test/**/*.ts\" --fix",
63
+ "fallow": "fallow",
64
+ "fallow:dead-code": "fallow dead-code",
65
+ "fallow:dupes": "fallow dupes",
66
+ "fallow:health": "fallow health",
67
+ "fallow:audit": "fallow audit --base main",
68
+ "pretest": "mkdir -p coverage/.tmp",
69
+ "test": "npm run test:azm:alpha",
70
+ "test:all": "vitest run",
71
+ "test:coverage": "vitest run --coverage",
72
+ "test:ci:slow-reliability": "vitest run --no-file-parallelism --maxWorkers=1 --minWorkers=1 --testTimeout=20000 --hookTimeout=300000 --passWithNoTests 'test/cli_*.test.ts' 'test/cli/**/*.test.ts'",
73
+ "test:azm:alpha": "node scripts/dev/run-azm-alpha-guardrails.mjs",
74
+ "test:azm:corpus": "node scripts/dev/run-azm-corpus-guardrails.mjs",
75
+ "test:package": "node scripts/dev/smoke-npm-package.mjs",
76
+ "test:asm80:baseline": "node scripts/dev/run-asm80-baseline.mjs",
77
+ "test:asm80:tetro": "AZM_RUN_TETRO_ACCEPTANCE=1 vitest run test/asm80/tetro_acceptance.test.ts",
78
+ "test:watch": "vitest",
79
+ "format": "prettier -w .",
80
+ "format:check": "prettier -c .",
81
+ "check:source-file-sizes": "node scripts/check-source-file-sizes.mjs",
82
+ "check:source-file-sizes:enforce": "node scripts/check-source-file-sizes.mjs --enforce-hard-cap",
83
+ "prepack": "npm run build",
84
+ "prepublishOnly": "npm run build",
85
+ "azm": "npm run build && node dist/src/cli.js"
86
+ },
87
+ "devDependencies": {
88
+ "@types/node": "^22.13.1",
89
+ "@vitest/coverage-v8": "^2.1.9",
90
+ "eslint": "^10.1.0",
91
+ "fallow": "^2.54.2",
92
+ "globals": "^17.4.0",
93
+ "prettier": "^3.5.0",
94
+ "typescript": "^5.7.3",
95
+ "typescript-eslint": "^8.57.2",
96
+ "vitest": "^2.1.9"
97
+ }
98
+ }