From 501b255423d9a08ab5d9765c3feb5bf3a6b7b0af Mon Sep 17 00:00:00 2001 From: Astatin Date: Tue, 10 Jun 2025 18:27:56 +0200 Subject: Add ASSERT macro + fix label substractions banks + add . for current address --- parameters.go | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) (limited to 'parameters.go') 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 { -- cgit v1.2.3-70-g09d2