aboutsummaryrefslogtreecommitdiff
path: root/parameters.go
diff options
context:
space:
mode:
Diffstat (limited to 'parameters.go')
-rw-r--r--parameters.go20
1 files changed, 18 insertions, 2 deletions
diff --git a/parameters.go b/parameters.go
index 8a3174b..5e234f5 100644
--- a/parameters.go
+++ b/parameters.go
@@ -120,7 +120,7 @@ func Raw16(labels *Labels, defs *Definitions, param string) (uint16, error) {
return uint16(res), nil
}
- if strings.HasPrefix(param, "=") {
+ if strings.HasPrefix(param, "=") && !strings.HasPrefix(param, "=$") {
if labels == nil {
return 0, nil
}
@@ -144,6 +144,23 @@ func Raw16(labels *Labels, defs *Definitions, param string) (uint16, error) {
return uint16(res), err
}
+func MacroLabel(labels *Labels, defs *Definitions, param string) (uint16, error) {
+ if strings.HasPrefix(param, "=$") {
+ if labels == nil {
+ return 0, nil
+ }
+
+ label := strings.ToUpper(strings.TrimPrefix(param, "="))
+ labelValue, ok := (*labels)[label]
+ if !ok {
+ return 0, fmt.Errorf("Label \"%s\" not found", label)
+ }
+
+ return uint16(labelValue), nil
+ }
+ return 0, fmt.Errorf("Invalid macro label")
+}
+
func Reg16Indirect(_ *Labels, _ *Definitions, param string) (uint16, error) {
switch param {
case "(BC)":
@@ -202,7 +219,6 @@ func Raw16Indirect(labels *Labels, defs *Definitions, param string) (uint16, err
if !ok {
return 0, fmt.Errorf("$%s is of type %T but Indirect16b expected", param, res)
}
- fmt.Println("YOU CAN LOOSE YOUR MIND NOW ! IT OFFICIALLY DOESN'T MAKE SENSE", param, res)
return uint16(res), nil
}
if len(param) < 2 || param[0] != '(' || param[len(param)-1] != ')' {