@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.
- package/LICENSE +649 -0
- package/README.md +142 -0
- package/dist/src/analysis.d.ts +11 -0
- package/dist/src/analysis.js +41 -0
- package/dist/src/api-compile.d.ts +8 -0
- package/dist/src/api-compile.js +3 -0
- package/dist/src/api-tooling.d.ts +25 -0
- package/dist/src/api-tooling.js +21 -0
- package/dist/src/cli.d.ts +30 -0
- package/dist/src/cli.js +523 -0
- package/dist/src/compile.d.ts +10 -0
- package/dist/src/compile.js +175 -0
- package/dist/src/compileShared.d.ts +3 -0
- package/dist/src/compileShared.js +7 -0
- package/dist/src/diagnosticTypes.d.ts +77 -0
- package/dist/src/diagnosticTypes.js +53 -0
- package/dist/src/formats/index.d.ts +7 -0
- package/dist/src/formats/index.js +17 -0
- package/dist/src/formats/range.d.ts +17 -0
- package/dist/src/formats/range.js +45 -0
- package/dist/src/formats/types.d.ts +208 -0
- package/dist/src/formats/types.js +1 -0
- package/dist/src/formats/writeAsm80.d.ts +6 -0
- package/dist/src/formats/writeAsm80.js +86 -0
- package/dist/src/formats/writeBin.d.ts +7 -0
- package/dist/src/formats/writeBin.js +23 -0
- package/dist/src/formats/writeD8m.d.ts +9 -0
- package/dist/src/formats/writeD8m.js +239 -0
- package/dist/src/formats/writeHex.d.ts +9 -0
- package/dist/src/formats/writeHex.js +39 -0
- package/dist/src/formats/writeListing.d.ts +8 -0
- package/dist/src/formats/writeListing.js +83 -0
- package/dist/src/frontend/asm80/asmLine.d.ts +39 -0
- package/dist/src/frontend/asm80/asmLine.js +89 -0
- package/dist/src/frontend/asm80/parseAsmRawValues.d.ts +4 -0
- package/dist/src/frontend/asm80/parseAsmRawValues.js +94 -0
- package/dist/src/frontend/asm80/quoteScan.d.ts +10 -0
- package/dist/src/frontend/asm80/quoteScan.js +25 -0
- package/dist/src/frontend/ast.d.ts +376 -0
- package/dist/src/frontend/ast.js +1 -0
- package/dist/src/frontend/directiveAliases.d.ts +14 -0
- package/dist/src/frontend/directiveAliases.js +189 -0
- package/dist/src/frontend/grammarData.d.ts +14 -0
- package/dist/src/frontend/grammarData.js +65 -0
- package/dist/src/frontend/immExprUtils.d.ts +2 -0
- package/dist/src/frontend/immExprUtils.js +12 -0
- package/dist/src/frontend/parseAsmFlatDirectiveLine.d.ts +17 -0
- package/dist/src/frontend/parseAsmFlatDirectiveLine.js +187 -0
- package/dist/src/frontend/parseAsmInstruction.d.ts +3 -0
- package/dist/src/frontend/parseAsmInstruction.js +73 -0
- package/dist/src/frontend/parseAsmStatements.d.ts +6 -0
- package/dist/src/frontend/parseAsmStatements.js +16 -0
- package/dist/src/frontend/parseAsmStream.d.ts +10 -0
- package/dist/src/frontend/parseAsmStream.js +33 -0
- package/dist/src/frontend/parseAsmTopLevel.d.ts +18 -0
- package/dist/src/frontend/parseAsmTopLevel.js +34 -0
- package/dist/src/frontend/parseDiagnostics.d.ts +9 -0
- package/dist/src/frontend/parseDiagnostics.js +16 -0
- package/dist/src/frontend/parseEnum.d.ts +12 -0
- package/dist/src/frontend/parseEnum.js +70 -0
- package/dist/src/frontend/parseImm.d.ts +10 -0
- package/dist/src/frontend/parseImm.js +397 -0
- package/dist/src/frontend/parseLogicalLines.d.ts +11 -0
- package/dist/src/frontend/parseLogicalLines.js +94 -0
- package/dist/src/frontend/parseOp.d.ts +25 -0
- package/dist/src/frontend/parseOp.js +120 -0
- package/dist/src/frontend/parseOpHeader.d.ts +20 -0
- package/dist/src/frontend/parseOpHeader.js +32 -0
- package/dist/src/frontend/parseOperands.d.ts +4 -0
- package/dist/src/frontend/parseOperands.js +290 -0
- package/dist/src/frontend/parseParams.d.ts +6 -0
- package/dist/src/frontend/parseParams.js +62 -0
- package/dist/src/frontend/parseParserRecovery.d.ts +12 -0
- package/dist/src/frontend/parseParserRecovery.js +17 -0
- package/dist/src/frontend/parseParserShared.d.ts +2 -0
- package/dist/src/frontend/parseParserShared.js +8 -0
- package/dist/src/frontend/parseRawDataDirectiveStart.d.ts +1 -0
- package/dist/src/frontend/parseRawDataDirectiveStart.js +3 -0
- package/dist/src/frontend/parseRawDataDirectives.d.ts +7 -0
- package/dist/src/frontend/parseRawDataDirectives.js +142 -0
- package/dist/src/frontend/parseRecordFieldDecl.d.ts +34 -0
- package/dist/src/frontend/parseRecordFieldDecl.js +177 -0
- package/dist/src/frontend/parseSourceItemDispatch.d.ts +46 -0
- package/dist/src/frontend/parseSourceItemDispatch.js +53 -0
- package/dist/src/frontend/parseSourceItemTable.d.ts +16 -0
- package/dist/src/frontend/parseSourceItemTable.js +68 -0
- package/dist/src/frontend/parseTopLevelCommon.d.ts +11 -0
- package/dist/src/frontend/parseTopLevelCommon.js +50 -0
- package/dist/src/frontend/parseTypes.d.ts +24 -0
- package/dist/src/frontend/parseTypes.js +77 -0
- package/dist/src/frontend/parser.d.ts +11 -0
- package/dist/src/frontend/parser.js +88 -0
- package/dist/src/frontend/source.d.ts +28 -0
- package/dist/src/frontend/source.js +58 -0
- package/dist/src/frontend/sourceExtensions.d.ts +2 -0
- package/dist/src/frontend/sourceExtensions.js +6 -0
- package/dist/src/index.d.ts +3 -0
- package/dist/src/index.js +2 -0
- package/dist/src/lintCaseStyle.d.ts +4 -0
- package/dist/src/lintCaseStyle.js +129 -0
- package/dist/src/lowering/asmDirectiveLowering.d.ts +4 -0
- package/dist/src/lowering/asmDirectiveLowering.js +229 -0
- package/dist/src/lowering/asmDirectiveTraversal.d.ts +47 -0
- package/dist/src/lowering/asmDirectiveTraversal.js +52 -0
- package/dist/src/lowering/asmEquResolution.d.ts +8 -0
- package/dist/src/lowering/asmEquResolution.js +69 -0
- package/dist/src/lowering/asmInstructionLdHelpers.d.ts +15 -0
- package/dist/src/lowering/asmInstructionLdHelpers.js +102 -0
- package/dist/src/lowering/asmInstructionLowering.d.ts +5 -0
- package/dist/src/lowering/asmInstructionLowering.js +54 -0
- package/dist/src/lowering/asmInstructionStream.d.ts +46 -0
- package/dist/src/lowering/asmInstructionStream.js +51 -0
- package/dist/src/lowering/asmLoweringBranchCall.d.ts +43 -0
- package/dist/src/lowering/asmLoweringBranchCall.js +254 -0
- package/dist/src/lowering/asmLoweringHost.d.ts +23 -0
- package/dist/src/lowering/asmLoweringHost.js +1 -0
- package/dist/src/lowering/asmLoweringLd.d.ts +28 -0
- package/dist/src/lowering/asmLoweringLd.js +144 -0
- package/dist/src/lowering/asmRangeLowering.d.ts +17 -0
- package/dist/src/lowering/asmRangeLowering.js +39 -0
- package/dist/src/lowering/asmRawDataLowering.d.ts +16 -0
- package/dist/src/lowering/asmRawDataLowering.js +209 -0
- package/dist/src/lowering/asmSourceEmitter.d.ts +4 -0
- package/dist/src/lowering/asmSourceEmitter.js +9 -0
- package/dist/src/lowering/asmSourceInstructionLowering.d.ts +4 -0
- package/dist/src/lowering/asmSourceInstructionLowering.js +14 -0
- package/dist/src/lowering/asmUtils.d.ts +13 -0
- package/dist/src/lowering/asmUtils.js +105 -0
- package/dist/src/lowering/assemblerFlowSetup.d.ts +54 -0
- package/dist/src/lowering/assemblerFlowSetup.js +128 -0
- package/dist/src/lowering/assemblerLoweringContext.d.ts +151 -0
- package/dist/src/lowering/assemblerLoweringContext.js +16 -0
- package/dist/src/lowering/assemblerLoweringContextSplit.d.ts +7 -0
- package/dist/src/lowering/assemblerLoweringContextSplit.js +75 -0
- package/dist/src/lowering/assemblerLoweringPhases.d.ts +66 -0
- package/dist/src/lowering/assemblerLoweringPhases.js +166 -0
- package/dist/src/lowering/bytePlacement.d.ts +7 -0
- package/dist/src/lowering/bytePlacement.js +37 -0
- package/dist/src/lowering/capabilities.d.ts +67 -0
- package/dist/src/lowering/capabilities.js +1 -0
- package/dist/src/lowering/eaResolution.d.ts +58 -0
- package/dist/src/lowering/eaResolution.js +159 -0
- package/dist/src/lowering/emissionCore.d.ts +17 -0
- package/dist/src/lowering/emissionCore.js +21 -0
- package/dist/src/lowering/emit.d.ts +17 -0
- package/dist/src/lowering/emit.js +46 -0
- package/dist/src/lowering/emitContextBuilder.d.ts +63 -0
- package/dist/src/lowering/emitContextBuilder.js +41 -0
- package/dist/src/lowering/emitFinalization.d.ts +61 -0
- package/dist/src/lowering/emitFinalization.js +66 -0
- package/dist/src/lowering/emitFinalizationSetup.d.ts +19 -0
- package/dist/src/lowering/emitFinalizationSetup.js +26 -0
- package/dist/src/lowering/emitPhase1BuildProgramLoweringContext.d.ts +7 -0
- package/dist/src/lowering/emitPhase1BuildProgramLoweringContext.js +119 -0
- package/dist/src/lowering/emitPhase1Helpers.d.ts +4 -0
- package/dist/src/lowering/emitPhase1Helpers.js +12 -0
- package/dist/src/lowering/emitPhase1Types.d.ts +21 -0
- package/dist/src/lowering/emitPhase1Types.js +1 -0
- package/dist/src/lowering/emitPhase1WirePipeline.d.ts +70 -0
- package/dist/src/lowering/emitPhase1WirePipeline.js +203 -0
- package/dist/src/lowering/emitPhase1Workspace.d.ts +82 -0
- package/dist/src/lowering/emitPhase1Workspace.js +55 -0
- package/dist/src/lowering/emitPipeline.d.ts +121 -0
- package/dist/src/lowering/emitPipeline.js +57 -0
- package/dist/src/lowering/emitProgramContext.d.ts +39 -0
- package/dist/src/lowering/emitProgramContext.js +29 -0
- package/dist/src/lowering/emitState.d.ts +90 -0
- package/dist/src/lowering/emitState.js +124 -0
- package/dist/src/lowering/fixupBaseResolution.d.ts +7 -0
- package/dist/src/lowering/fixupBaseResolution.js +23 -0
- package/dist/src/lowering/fixupEmission.d.ts +64 -0
- package/dist/src/lowering/fixupEmission.js +199 -0
- package/dist/src/lowering/immMath.d.ts +2 -0
- package/dist/src/lowering/immMath.js +34 -0
- package/dist/src/lowering/inputAssets.d.ts +7 -0
- package/dist/src/lowering/inputAssets.js +106 -0
- package/dist/src/lowering/ldEncoding.d.ts +15 -0
- package/dist/src/lowering/ldEncoding.js +12 -0
- package/dist/src/lowering/ldEncodingRegMemHelpers.d.ts +5 -0
- package/dist/src/lowering/ldEncodingRegMemHelpers.js +124 -0
- package/dist/src/lowering/ldFormSelection.d.ts +26 -0
- package/dist/src/lowering/ldFormSelection.js +92 -0
- package/dist/src/lowering/ldLowering.d.ts +7 -0
- package/dist/src/lowering/ldLowering.js +13 -0
- package/dist/src/lowering/loweredAsmByteEmission.d.ts +23 -0
- package/dist/src/lowering/loweredAsmByteEmission.js +185 -0
- package/dist/src/lowering/loweredAsmPlacement.d.ts +13 -0
- package/dist/src/lowering/loweredAsmPlacement.js +86 -0
- package/dist/src/lowering/loweredAsmStreamRecording.d.ts +27 -0
- package/dist/src/lowering/loweredAsmStreamRecording.js +215 -0
- package/dist/src/lowering/loweredAsmTypes.d.ts +202 -0
- package/dist/src/lowering/loweredAsmTypes.js +1 -0
- package/dist/src/lowering/loweredFormat.d.ts +3 -0
- package/dist/src/lowering/loweredFormat.js +26 -0
- package/dist/src/lowering/loweredItemSize.d.ts +4 -0
- package/dist/src/lowering/loweredItemSize.js +17 -0
- package/dist/src/lowering/loweringDiagnostics.d.ts +9 -0
- package/dist/src/lowering/loweringDiagnostics.js +55 -0
- package/dist/src/lowering/loweringTypes.d.ts +27 -0
- package/dist/src/lowering/loweringTypes.js +1 -0
- package/dist/src/lowering/opCandidateRegistry.d.ts +9 -0
- package/dist/src/lowering/opCandidateRegistry.js +9 -0
- package/dist/src/lowering/opExpansionExecution.d.ts +15 -0
- package/dist/src/lowering/opExpansionExecution.js +45 -0
- package/dist/src/lowering/opExpansionOrchestration.d.ts +15 -0
- package/dist/src/lowering/opExpansionOrchestration.js +88 -0
- package/dist/src/lowering/opExpansionStream.d.ts +12 -0
- package/dist/src/lowering/opExpansionStream.js +176 -0
- package/dist/src/lowering/opMatching.d.ts +52 -0
- package/dist/src/lowering/opMatching.js +355 -0
- package/dist/src/lowering/opSubstitution.d.ts +13 -0
- package/dist/src/lowering/opSubstitution.js +175 -0
- package/dist/src/lowering/prescanTypes.d.ts +7 -0
- package/dist/src/lowering/prescanTypes.js +1 -0
- package/dist/src/lowering/programLowering.d.ts +144 -0
- package/dist/src/lowering/programLowering.js +2 -0
- package/dist/src/lowering/programLoweringDeclarations.d.ts +5 -0
- package/dist/src/lowering/programLoweringDeclarations.js +5 -0
- package/dist/src/lowering/programLoweringFinalize.d.ts +18 -0
- package/dist/src/lowering/programLoweringFinalize.js +115 -0
- package/dist/src/lowering/programLoweringTraversal.d.ts +2 -0
- package/dist/src/lowering/programLoweringTraversal.js +93 -0
- package/dist/src/lowering/programPrescan.d.ts +3 -0
- package/dist/src/lowering/programPrescan.js +37 -0
- package/dist/src/lowering/traceFormat.d.ts +13 -0
- package/dist/src/lowering/traceFormat.js +211 -0
- package/dist/src/pathCompare.d.ts +3 -0
- package/dist/src/pathCompare.js +26 -0
- package/dist/src/pipeline.d.ts +78 -0
- package/dist/src/pipeline.js +1 -0
- package/dist/src/registerCare/analyze.d.ts +24 -0
- package/dist/src/registerCare/analyze.js +327 -0
- package/dist/src/registerCare/annotate.d.ts +11 -0
- package/dist/src/registerCare/annotate.js +76 -0
- package/dist/src/registerCare/boundaryHints.d.ts +2 -0
- package/dist/src/registerCare/boundaryHints.js +10 -0
- package/dist/src/registerCare/carriers.d.ts +4 -0
- package/dist/src/registerCare/carriers.js +78 -0
- package/dist/src/registerCare/controlFlow.d.ts +5 -0
- package/dist/src/registerCare/controlFlow.js +35 -0
- package/dist/src/registerCare/fix.d.ts +11 -0
- package/dist/src/registerCare/fix.js +119 -0
- package/dist/src/registerCare/liveness.d.ts +7 -0
- package/dist/src/registerCare/liveness.js +227 -0
- package/dist/src/registerCare/profiles.d.ts +11 -0
- package/dist/src/registerCare/profiles.js +45 -0
- package/dist/src/registerCare/programModel.d.ts +3 -0
- package/dist/src/registerCare/programModel.js +181 -0
- package/dist/src/registerCare/report.d.ts +5 -0
- package/dist/src/registerCare/report.js +139 -0
- package/dist/src/registerCare/smartComments.d.ts +5 -0
- package/dist/src/registerCare/smartComments.js +247 -0
- package/dist/src/registerCare/sourceText.d.ts +8 -0
- package/dist/src/registerCare/sourceText.js +15 -0
- package/dist/src/registerCare/summary.d.ts +3 -0
- package/dist/src/registerCare/summary.js +492 -0
- package/dist/src/registerCare/tooling.d.ts +42 -0
- package/dist/src/registerCare/tooling.js +50 -0
- package/dist/src/registerCare/types.d.ts +154 -0
- package/dist/src/registerCare/types.js +1 -0
- package/dist/src/semantics/declVisitor.d.ts +5 -0
- package/dist/src/semantics/declVisitor.js +11 -0
- package/dist/src/semantics/env.d.ts +28 -0
- package/dist/src/semantics/env.js +432 -0
- package/dist/src/semantics/layout.d.ts +21 -0
- package/dist/src/semantics/layout.js +226 -0
- package/dist/src/semantics/layoutCastFold.d.ts +22 -0
- package/dist/src/semantics/layoutCastFold.js +118 -0
- package/dist/src/semantics/semanticsDiagnostics.d.ts +2 -0
- package/dist/src/semantics/semanticsDiagnostics.js +4 -0
- package/dist/src/semantics/typeQueries.d.ts +31 -0
- package/dist/src/semantics/typeQueries.js +124 -0
- package/dist/src/sourceIncludeExpansion.d.ts +17 -0
- package/dist/src/sourceIncludeExpansion.js +124 -0
- package/dist/src/sourceIncludePaths.d.ts +1 -0
- package/dist/src/sourceIncludePaths.js +12 -0
- package/dist/src/sourceLoader.d.ts +15 -0
- package/dist/src/sourceLoader.js +118 -0
- package/dist/src/z80/effects.d.ts +3 -0
- package/dist/src/z80/effects.js +516 -0
- package/dist/src/z80/encode.d.ts +10 -0
- package/dist/src/z80/encode.js +412 -0
- package/dist/src/z80/encodeAlu.d.ts +7 -0
- package/dist/src/z80/encodeAlu.js +219 -0
- package/dist/src/z80/encodeBitOps.d.ts +7 -0
- package/dist/src/z80/encodeBitOps.js +123 -0
- package/dist/src/z80/encodeContext.d.ts +29 -0
- package/dist/src/z80/encodeContext.js +1 -0
- package/dist/src/z80/encodeControl.d.ts +26 -0
- package/dist/src/z80/encodeControl.js +180 -0
- package/dist/src/z80/encodeCoreOps.d.ts +7 -0
- package/dist/src/z80/encodeCoreOps.js +131 -0
- package/dist/src/z80/encodeIo.d.ts +9 -0
- package/dist/src/z80/encodeIo.js +128 -0
- package/dist/src/z80/encodeLd.d.ts +13 -0
- package/dist/src/z80/encodeLd.js +273 -0
- package/dist/src/z80/encoderRegistry.d.ts +13 -0
- package/dist/src/z80/encoderRegistry.js +169 -0
- package/docs/reference/cli.md +134 -0
- package/docs/reference/tooling-api.md +248 -0
- 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,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 {};
|