@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
package/README.md ADDED
@@ -0,0 +1,142 @@
1
+ # AZM
2
+
3
+ AZM is a Z80 assembler in the ASM80 tradition: plain assembly input, predictable
4
+ object output, and modern safety tooling for projects that still want to see the
5
+ machine.
6
+
7
+ The project goal is a good assembler, not a high-level language. AZM keeps
8
+ labels, directives, instructions, branches, data bytes, register effects, and
9
+ generated metadata visible in source and artifacts.
10
+
11
+ ## Product boundary
12
+
13
+ AZM keeps:
14
+
15
+ - ASM80-style `.asm` / `.z80` source as the input baseline
16
+ - `.asmi` external interface files for register-care contracts
17
+ - textual `.include`
18
+ - directive aliases for importing common assembler spellings
19
+ - register-care analysis, compact AZMDoc comments, and `.asmi` external
20
+ contracts
21
+ - AST-level `op` extensions
22
+ - enums as constant namespaces
23
+ - `.type` / `.union` layout metadata
24
+ - compile-time layout constants such as `sizeof(...)`, `offset(...)`, scalar
25
+ layout sizes, and constant-only layout casts
26
+ - assembler data directives including `.db`, `.dw`, `.ds`, `.cstr`, `.pstr`,
27
+ and `.istr`
28
+
29
+ AZM `.asm` and `.z80` source rejects old ZAX high-level features such as
30
+ modules/imports, `func`, formal arguments, locals, typed assignment/storage
31
+ lowering, structured control, generated frames, typed storage blocks, and named
32
+ section blocks. Those inherited paths are removal work, not product
33
+ compatibility.
34
+
35
+ ## Install
36
+
37
+ Requires Node.js 20+.
38
+
39
+ ```sh
40
+ npm install -g @jhlagado/azm
41
+ azm path/to/program.z80
42
+ ```
43
+
44
+ From a checkout, use the local CLI after building:
45
+
46
+ ```sh
47
+ npm ci
48
+ npm run build
49
+ npm run azm -- examples/hello.asm
50
+ ```
51
+
52
+ Output files for each compiled source:
53
+
54
+ | Extension | Contents |
55
+ | ---------- | ------------------------- |
56
+ | `.hex` | Intel HEX |
57
+ | `.bin` | Flat binary |
58
+ | `.lst` | Byte dump plus symbols |
59
+ | `.z80` | Plain Z80 source emission |
60
+ | `.d8.json` | Debug80 map |
61
+
62
+ Small input example:
63
+
64
+ ```asm
65
+ ORG 0100H
66
+ START:
67
+ LD A,42
68
+ RET
69
+ ```
70
+
71
+ Compile a binary and listing:
72
+
73
+ ```sh
74
+ azm --type bin --output build/start.bin start.asm
75
+ ```
76
+
77
+ ```text
78
+ azm [options] <entry.asm|entry.z80>
79
+
80
+ Options:
81
+ -o, --output <file> Primary output path (must match --type extension)
82
+ -t, --type <type> Primary output type: hex|bin (default: hex)
83
+ -n, --nolist Suppress .lst
84
+ --nobin Suppress .bin
85
+ --nohex Suppress .hex
86
+ --nod8m Suppress .d8.json
87
+ --asm80 Emit assembler-valid lowered source (.z80)
88
+ --case-style <m> Case-style lint mode: off|upper|lower|consistent
89
+ --rc <m> Register-care mode: off|audit|warn|error|strict
90
+ --reg-report Emit .regcare.txt report
91
+ --reg-interface Emit inferred register-care interface (.asmi)
92
+ --fix Apply conservative register-care source fixes
93
+ --contracts Update source AZM contract blocks in place
94
+ --accept-out <r:c> Promote inferred output candidate while annotating
95
+ --interface <file> Load register-care interface contracts
96
+ --reg-profile <p> Register-care profile: mon3
97
+ --aliases <file> Load project directive alias JSON (repeatable)
98
+ -I, --include <dir> Add include search path (repeatable)
99
+ -V, --version Print version
100
+ -h, --help Show help
101
+ ```
102
+
103
+ ## Programmatic API
104
+
105
+ `@jhlagado/azm` exposes Node entry points for tools:
106
+
107
+ - `@jhlagado/azm`
108
+ - `@jhlagado/azm/tooling`
109
+ - `@jhlagado/azm/compile`
110
+
111
+ Minimal compile example:
112
+
113
+ ```ts
114
+ import { compile, defaultFormatWriters } from '@jhlagado/azm/compile';
115
+
116
+ const result = await compile(
117
+ '/abs/path/to/main.asm',
118
+ { outputType: 'hex' },
119
+ { formats: defaultFormatWriters },
120
+ );
121
+
122
+ console.log(result.diagnostics);
123
+ ```
124
+
125
+ See [docs/reference/cli.md](docs/reference/cli.md) for the full CLI reference
126
+ and [docs/reference/tooling-api.md](docs/reference/tooling-api.md) for the
127
+ current API notes.
128
+
129
+ ## Verification
130
+
131
+ Useful local verification lanes:
132
+
133
+ ```sh
134
+ npm run build
135
+ npm run test:azm:alpha
136
+ npm run test:azm:corpus
137
+ npm test
138
+ ```
139
+
140
+ ## License
141
+
142
+ GPL-3.0-only. See [LICENSE](LICENSE).
@@ -0,0 +1,11 @@
1
+ import type { Diagnostic } from './diagnosticTypes.js';
2
+ import type { LoadedProgram } from './sourceLoader.js';
3
+ import type { CompilerOptions } from './pipeline.js';
4
+ import { type CompileEnv } from './semantics/env.js';
5
+ export interface AnalyzeProgramOptions extends Pick<CompilerOptions, 'caseStyle' | 'requireMain'> {
6
+ }
7
+ export interface AnalyzeProgramResult {
8
+ diagnostics: Diagnostic[];
9
+ env?: CompileEnv;
10
+ }
11
+ export declare function analyzeLoadedProgram(loadedProgram: LoadedProgram, options?: AnalyzeProgramOptions): AnalyzeProgramResult;
@@ -0,0 +1,41 @@
1
+ import { hasErrors } from './compileShared.js';
2
+ import { DiagnosticIds } from './diagnosticTypes.js';
3
+ import { lintCaseStyle } from './lintCaseStyle.js';
4
+ import { buildEnv } from './semantics/env.js';
5
+ function hasMainEntryLabel(program) {
6
+ return program.files.some((sourceFile) => sourceFile.items.some((item) => item.kind === 'AsmLabel' && item.name.toLowerCase() === 'main'));
7
+ }
8
+ export function analyzeLoadedProgram(loadedProgram, options = {}) {
9
+ const diagnostics = [];
10
+ const { program, sourceTexts } = loadedProgram;
11
+ const hasProgramItems = program.files.some((sourceFile) => sourceFile.items.length > 0);
12
+ if (!hasProgramItems) {
13
+ diagnostics.push({
14
+ id: DiagnosticIds.SemanticsError,
15
+ severity: 'error',
16
+ message: 'Program contains no declarations or instruction streams.',
17
+ file: program.entryFile,
18
+ ...(program.span?.start
19
+ ? { line: program.span.start.line, column: program.span.start.column }
20
+ : {}),
21
+ });
22
+ return { diagnostics };
23
+ }
24
+ if ((options.requireMain ?? false) && !hasMainEntryLabel(program)) {
25
+ diagnostics.push({
26
+ id: DiagnosticIds.SemanticsError,
27
+ severity: 'error',
28
+ message: 'Program must define a "main" entry label.',
29
+ file: program.entryFile,
30
+ ...(program.span?.start
31
+ ? { line: program.span.start.line, column: program.span.start.column }
32
+ : {}),
33
+ });
34
+ return { diagnostics };
35
+ }
36
+ lintCaseStyle(program, sourceTexts, options.caseStyle ?? 'off', diagnostics);
37
+ const env = buildEnv(program, diagnostics);
38
+ if (hasErrors(diagnostics))
39
+ return { diagnostics };
40
+ return { diagnostics, env };
41
+ }
@@ -0,0 +1,8 @@
1
+ export { compile } from './compile.js';
2
+ export type { CaseStyleMode, CompileFn, CompileResult, CompilerOptions, PipelineDeps, } from './pipeline.js';
3
+ export { defaultFormatWriters } from './formats/index.js';
4
+ export type { Artifact, FormatWriters } from './formats/types.js';
5
+ export type { Diagnostic, DiagnosticId, DiagnosticSeverity } from './diagnosticTypes.js';
6
+ export { DiagnosticIds } from './diagnosticTypes.js';
7
+ export type { DirectiveAliasProfile } from './frontend/directiveAliases.js';
8
+ export type { RegisterCareMode } from './registerCare/types.js';
@@ -0,0 +1,3 @@
1
+ export { compile } from './compile.js';
2
+ export { defaultFormatWriters } from './formats/index.js';
3
+ export { DiagnosticIds } from './diagnosticTypes.js';
@@ -0,0 +1,25 @@
1
+ import type { Diagnostic } from './diagnosticTypes.js';
2
+ import { type AnalyzeProgramOptions, type AnalyzeProgramResult } from './analysis.js';
3
+ import { type LoadedProgram, type LoadProgramOptions } from './sourceLoader.js';
4
+ export type { Diagnostic, DiagnosticId, DiagnosticSeverity } from './diagnosticTypes.js';
5
+ export { DiagnosticIds } from './diagnosticTypes.js';
6
+ export type { BaseNode, SourceFileNode, SourceItemNode, ProgramNode, SourcePosition, SourceSpan, } from './frontend/ast.js';
7
+ export type { CompileEnv } from './semantics/env.js';
8
+ export type { LoadedProgram, LoadProgramOptions, AnalyzeProgramOptions, AnalyzeProgramResult };
9
+ export { analyzeRegisterCareForTools, codeActionForOutputCandidate, diagnosticForOutputCandidate, } from './registerCare/tooling.js';
10
+ export type { AnalyzeRegisterCareForToolsOptions, AnalyzeRegisterCareForToolsResult, RegisterCareCandidateDiagnostic, RegisterCareCodeAction, RegisterCareTextEdit, } from './registerCare/tooling.js';
11
+ export type { RegisterCareMode, RegisterCareOutputCandidate, RegisterCareUnit, } from './registerCare/types.js';
12
+ export interface ToolingLoadProgramResult {
13
+ diagnostics: Diagnostic[];
14
+ loadedProgram?: LoadedProgram;
15
+ }
16
+ /**
17
+ * Layer A: expand textual includes and parse without emitting artifacts.
18
+ */
19
+ export declare function loadProgram(options: LoadProgramOptions & {
20
+ entryFile: string;
21
+ }): Promise<ToolingLoadProgramResult>;
22
+ /**
23
+ * Layer B: run semantic checks without lowering or writing output artifacts.
24
+ */
25
+ export declare function analyzeProgram(loadedProgram: LoadedProgram, options?: AnalyzeProgramOptions): AnalyzeProgramResult;
@@ -0,0 +1,21 @@
1
+ import { analyzeLoadedProgram, } from './analysis.js';
2
+ import { loadProgram as loadProgramInternal, } from './sourceLoader.js';
3
+ export { DiagnosticIds } from './diagnosticTypes.js';
4
+ export { analyzeRegisterCareForTools, codeActionForOutputCandidate, diagnosticForOutputCandidate, } from './registerCare/tooling.js';
5
+ /**
6
+ * Layer A: expand textual includes and parse without emitting artifacts.
7
+ */
8
+ export async function loadProgram(options) {
9
+ const diagnostics = [];
10
+ const loadedProgram = await loadProgramInternal(options.entryFile, diagnostics, options);
11
+ return {
12
+ diagnostics,
13
+ ...(loadedProgram ? { loadedProgram } : {}),
14
+ };
15
+ }
16
+ /**
17
+ * Layer B: run semantic checks without lowering or writing output artifacts.
18
+ */
19
+ export function analyzeProgram(loadedProgram, options = {}) {
20
+ return analyzeLoadedProgram(loadedProgram, options);
21
+ }
@@ -0,0 +1,30 @@
1
+ #!/usr/bin/env node
2
+ import type { CaseStyleMode } from './pipeline.js';
3
+ import type { RegisterCareMode } from './registerCare/types.js';
4
+ type CliExit = {
5
+ code: number;
6
+ };
7
+ type CliOptions = {
8
+ entryFile: string;
9
+ outputPath?: string;
10
+ outputType: 'hex' | 'bin';
11
+ emitBin: boolean;
12
+ emitHex: boolean;
13
+ emitD8m: boolean;
14
+ emitListing: boolean;
15
+ emitAsm80: boolean;
16
+ caseStyle: CaseStyleMode;
17
+ includeDirs: string[];
18
+ directiveAliasFiles: string[];
19
+ registerCare: RegisterCareMode;
20
+ emitRegisterReport: boolean;
21
+ emitRegisterInterface: boolean;
22
+ annotateRegisterContracts: boolean;
23
+ fixRegisterContracts: boolean;
24
+ acceptRegisterOutputCandidates: string[];
25
+ registerCareProfile?: 'mon3';
26
+ registerCareInterfaces: string[];
27
+ };
28
+ export declare function parseCliArgs(argv: string[]): CliOptions | CliExit;
29
+ export declare function runCli(argv: string[]): Promise<number>;
30
+ export {};