aboutsummaryrefslogtreecommitdiff
path: root/macros.go
diff options
context:
space:
mode:
Diffstat (limited to 'macros.go')
-rw-r--r--macros.go56
1 files changed, 37 insertions, 19 deletions
diff --git a/macros.go b/macros.go
index 30ab64a..8e8d4c1 100644
--- a/macros.go
+++ b/macros.go
@@ -152,33 +152,51 @@ func MacroParse(
(*line_nb) += 1
}
- state := ProgramState{
- Labels: Clone(state.Labels),
- Defs: Clone(state.Defs),
- IsMacro: true,
- }
-
if is_first_pass {
if _, ok := MacroInstructions[definedMacroName]; ok {
return fmt.Errorf("Macro %s is already defined", definedMacroName)
}
- new_instructions, err := firstPass("MACRO$"+definedMacroName, macroContent, 0, &state)
- if err != nil {
- return err
+ MacroInstructions["."+definedMacroName] = []InstructionParams{
+ {
+ Types: []ParamType{},
+ Assembler: func(currentAddress uint16, args []uint16) ([]uint8, error) {
+ state := ProgramState{
+ Labels: Clone(state.Labels),
+ Defs: Clone(state.Defs),
+ IsMacro: true,
+ }
+ new_instructions, err := firstPass("MACRO$"+definedMacroName, macroContent, 0, &state)
+ if err != nil {
+ return nil, err
+ }
+ return new_instructions, nil
+ },
+ },
}
- MacroInstructions["."+definedMacroName] = InlineMacroAssembler(new_instructions)
} else {
- _, err := firstPass("MACRO$"+definedMacroName, macroContent, 0, &state)
- if err != nil {
- return err
+ MacroInstructions["."+definedMacroName] = []InstructionParams{
+ {
+ Types: []ParamType{},
+ Assembler: func(currentAddress uint16, args []uint16) ([]uint8, error) {
+ state := ProgramState{
+ Labels: Clone(state.Labels),
+ Defs: Clone(state.Defs),
+ IsMacro: true,
+ }
+ _, err := firstPass("MACRO$"+definedMacroName, macroContent, uint(currentAddress), &state)
+ if err != nil {
+ return nil, err
+ }
+ new_instructions, err := secondPass("MACRO$"+definedMacroName, macroContent, uint(currentAddress), state)
+ if err != nil {
+ return nil, err
+ }
+
+ return new_instructions, nil
+ },
+ },
}
- new_instructions, err := secondPass("MACRO$"+definedMacroName, macroContent, 0, state)
- if err != nil {
- return err
- }
- MacroInstructions["."+definedMacroName] = InlineMacroAssembler(new_instructions)
-
}
} else {
return fmt.Errorf("Unknown macro \"%s\"", macroName)