print a human readable warning when encountering invalid word addresses

Signed-off-by: Hans Baier <[email protected]>
This commit is contained in:
Hans Baier
2024-01-08 14:00:21 +07:00
parent 0a511f5b7f
commit eb97742863
+13
View File
@@ -9,6 +9,8 @@
# #
# SPDX-License-Identifier: ISC # SPDX-License-Identifier: ISC
import fasm import fasm
import sys
from prjxray import bitstream from prjxray import bitstream
@@ -56,6 +58,10 @@ class FasmAssembler(object):
for (frame_addr, word_addr, bit_index), is_set in self.frames.items(): for (frame_addr, word_addr, bit_index), is_set in self.frames.items():
init_frame_at_address(frames, frame_addr) init_frame_at_address(frames, frame_addr)
if word_addr >= 101:
print(f"get_frames: invalid word address {word_addr} in line: {self.frames_line[(frame_addr, word_addr, bit_index)]}", file=sys.stderr)
if frame_addr not in frames:
print(f"get_frames: invalid frame address {frame_addr:x8}", file=sys.stderr)
if is_set: if is_set:
frames[frame_addr][word_addr] |= 1 << bit_index frames[frame_addr][word_addr] |= 1 << bit_index
@@ -77,6 +83,9 @@ class FasmAssembler(object):
assert bit_index is not None assert bit_index is not None
key = (frame_addr, word_addr, bit_index) key = (frame_addr, word_addr, bit_index)
if word_addr >= 101:
print(f"frame_set: invalid word address {word_addr} in line: {line}", file=sys.stderr)
return
if key in self.frames: if key in self.frames:
if self.frames[key] != 1: if self.frames[key] != 1:
raise FasmInconsistentBits( raise FasmInconsistentBits(
@@ -96,6 +105,9 @@ class FasmAssembler(object):
assert bit_index is not None assert bit_index is not None
key = (frame_addr, word_addr, bit_index) key = (frame_addr, word_addr, bit_index)
if word_addr >= 101:
print(f"frame_clear: invalid word address {word_addr} in line: {line}", file=sys.stderr)
return
if key in self.frames: if key in self.frames:
if self.frames[key] != 0: if self.frames[key] != 0:
raise FasmInconsistentBits( raise FasmInconsistentBits(
@@ -119,6 +131,7 @@ class FasmAssembler(object):
frame_addr = bit.word_column frame_addr = bit.word_column
word_addr = bit.word_bit // bitstream.WORD_SIZE_BITS word_addr = bit.word_bit // bitstream.WORD_SIZE_BITS
bit_index = bit.word_bit % bitstream.WORD_SIZE_BITS bit_index = bit.word_bit % bitstream.WORD_SIZE_BITS
if bit.isset: if bit.isset:
self.frame_set(frame_addr, word_addr, bit_index, line) self.frame_set(frame_addr, word_addr, bit_index, line)
else: else: