diff options
author | Astatin <[email protected]> | 2025-06-06 12:27:51 +0200 |
---|---|---|
committer | Astatin <[email protected]> | 2025-06-06 12:27:51 +0200 |
commit | 92ebacf4087babc3766b736aefa99fcaf7b89856 (patch) | |
tree | ff748a24cc709aed7886dfef447cce36a7a0a60a | |
parent | 6438a2c98fedada7b04ab2c6d970da6710f6e703 (diff) |
Adding substractions parameters + inv param macro + banked symbols
-rw-r--r-- | main.go | 8 | ||||
-rw-r--r-- | parameters.go | 27 |
2 files changed, 34 insertions, 1 deletions
@@ -21,7 +21,13 @@ type ProgramState struct { func printSymbols(labels map[string]uint) { for key, value := range labels { - fmt.Printf("00:%04x %s\n", value, key) + if value < 0x4000 { + fmt.Printf("00:%04x %s\n", value, key) + } else { + bank := value / 0x4000 + addr := value%0x4000 + 0x4000 + fmt.Printf("%02x:%04x %s\n", bank, addr, key) + } } } diff --git a/parameters.go b/parameters.go index 48d053d..06202f9 100644 --- a/parameters.go +++ b/parameters.go @@ -113,6 +113,13 @@ func Raw8( } return uint16(v & 0xff), nil } + if strings.HasPrefix(param, "inv(") && strings.HasSuffix(param, ")") { + v, err := Raw8(labels, lastAbsoluteLabel, defs, param[4:len(param)-1]) + if err != nil { + return 0, err + } + return uint16((256 / v) & 0xff), nil + } if strings.HasPrefix(param, "$") { param = strings.ToUpper(strings.TrimPrefix(param, "$")) if res, err := strconv.ParseUint(param, 16, 16); err == nil { @@ -165,6 +172,26 @@ func Raw16( defs *Definitions, param string, ) (uint16, error) { + if strings.Contains(param, "-") { + spl := strings.Split(param, "-") + + v, err := Raw16(labels, lastAbsoluteLabel, defs, spl[0]) + if err != nil { + return 0, err + } + result := v + + for _, arg := range spl[1:] { + v, err := Raw16(labels, lastAbsoluteLabel, defs, arg) + if err != nil { + return 0, err + } + result -= v + } + + return result, nil + } + if strings.HasPrefix(param, "$") { param = strings.ToUpper(strings.TrimPrefix(param, "$")) if res, err := strconv.ParseUint(param, 16, 16); err == nil { |