aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAstatin <[email protected]>2025-06-06 12:27:51 +0200
committerAstatin <[email protected]>2025-06-06 12:27:51 +0200
commit92ebacf4087babc3766b736aefa99fcaf7b89856 (patch)
treeff748a24cc709aed7886dfef447cce36a7a0a60a
parent6438a2c98fedada7b04ab2c6d970da6710f6e703 (diff)
Adding substractions parameters + inv param macro + banked symbols
-rw-r--r--main.go8
-rw-r--r--parameters.go27
2 files changed, 34 insertions, 1 deletions
diff --git a/main.go b/main.go
index 546cfbc..b118b74 100644
--- a/main.go
+++ b/main.go
@@ -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 {