Re: UART receiver
Posted: Sat Sep 14, 2024 1:46 am
Completely insane, but... The C in 7F0C makes addresses that end with C (1CC, 1DC in the last example) defective! Changing 7F0C to 7F0E makes ...E addresses defective...
I think I see a reasonablish explanation! Memory writes use the datastack TOS and NOS. James Bowman's J1 processor which my CPU is based on has a stack I've sometimes doubted and other times admired -- it uses a mix of combinational and flopped logic, and NOS is muxed in. Somehow when a memory write is combined with a drop (the usual case), the address and data get physically mixed up, which is why I needed lots of F's in one word and lots of zeros in the other.
I'll just have to remake the stack with TOS and NOS as actual permanent registers.
Actually, the previous cycle DSP modification seems to affect the write in the next cycle. Keeping DSP steady the cycle before fixes the issue for now.
I am still wondering about the exact details of this weirdness, and will look into it some more, just out of curiosity.
P.S. Yes, that was the problem.
I think I see a reasonablish explanation! Memory writes use the datastack TOS and NOS. James Bowman's J1 processor which my CPU is based on has a stack I've sometimes doubted and other times admired -- it uses a mix of combinational and flopped logic, and NOS is muxed in. Somehow when a memory write is combined with a drop (the usual case), the address and data get physically mixed up, which is why I needed lots of F's in one word and lots of zeros in the other.
I'll just have to remake the stack with TOS and NOS as actual permanent registers.
Actually, the previous cycle DSP modification seems to affect the write in the next cycle. Keeping DSP steady the cycle before fixes the issue for now.
I am still wondering about the exact details of this weirdness, and will look into it some more, just out of curiosity.
P.S. Yes, that was the problem.