This question has to do with expectations. The memory-mapped address of the keyboard register is 0x6000. I observed that the memory module passed the comparison test when only the upper two bits of the register's address were used for decoding purposes. Is this intentional, or was the expectation that the entire 15-bit address would be decoded? Also, all memory-mapped addresses above 0x6000 are declared to be invalid. Is this a way of saying that such addresses will never be given to the memory and, therefore, the memory module can be designed based on this assumption? Thank you for taking the time to answer my questions.
If I recall correctly, the specification is not very specific on this point. This is unfortunate, as it basically means that the behavior when you try to access memory above the keyboard register is undefined. Thus the tools (and your implementation) are not bound by anything in this regard -- including being consistent with each other.
The authors have intentionally skirted these issues by only providing test cases that cover defined behavior. That's one of the compromises associated with covering such a broad range of topics in a single course.
So you can assume that the test scripts used to test your implementations will not attempt to decode invalid addresses. The flip side is that you also can't make any assumptions about how the tools should or will respond if your programs attempt to do so. Furthermore, you can't draw any conclusions based on how they do respond if you do so.