aboutsummaryrefslogtreecommitdiff
path: root/parameters.go
diff options
context:
space:
mode:
authorAstatin <[email protected]>2025-06-10 18:27:56 +0200
committerAstatin <[email protected]>2025-06-10 18:27:56 +0200
commit501b255423d9a08ab5d9765c3feb5bf3a6b7b0af (patch)
treec2f7573b409bf591dad3302ec6816878842d24d2 /parameters.go
parenta7d6e62878245810323787eeb5458e418371b89f (diff)
Add ASSERT macro + fix label substractions banks + add . for current address
Diffstat (limited to 'parameters.go')
-rw-r--r--parameters.go21
1 files changed, 19 insertions, 2 deletions
diff --git a/parameters.go b/parameters.go
index 5dffc1c..b812fef 100644
--- a/parameters.go
+++ b/parameters.go
@@ -234,17 +234,29 @@ func Raw16(
if strings.Contains(param, "-") {
spl := strings.Split(param, "-")
- v, err := Raw16(labels, lastAbsoluteLabel, defs, currentAddress, spl[0])
+ v, err := ROMAddress(labels, lastAbsoluteLabel, defs, currentAddress, spl[0])
if err != nil {
return 0, err
}
+
+ bank := v / 0x4000
result := v
for _, arg := range spl[1:] {
- v, err := Raw16(labels, lastAbsoluteLabel, defs, currentAddress, arg)
+ v, err := ROMAddress(labels, lastAbsoluteLabel, defs, currentAddress, arg)
if err != nil {
return 0, err
}
+ otherBank := v / 0x4000
+ if bank != otherBank {
+ return 0, fmt.Errorf(
+ "Cannot get distance between rom addresses in different banks (%s is in bank %v, %s is in bank %v)",
+ spl[0],
+ bank,
+ arg,
+ otherBank,
+ )
+ }
result -= v
}
@@ -293,6 +305,7 @@ func Raw16(
currentBank := currentAddress / 0x4000
romAddrBank := romAddr / 0x4000
+ // TODO: Forbidding calls from other banks to bank 0
if romAddrBank == 0 {
return romAddr, nil
}
@@ -422,6 +435,10 @@ func ROMAddress(
currentAddress uint32,
param string,
) (uint32, error) {
+ if param == "." {
+ return currentAddress, nil
+ }
+
if strings.HasPrefix(param, "=") {
labelWithoutOffset, offset, err := parseOffset(param[1:])
if err != nil {