We could make maprom reallocate a new FRB even if one already exists.exxos wrote: 05 May 2022 22:36 I had a thought to compile TOS and disable the FRB cookie thinking MAPROM would install it higher up in RAM, but I don't think it installed the FRB cookie, assume as it found TOS had already allocated alt-ram :shrug:
Or maybe just have it check if the FRB exists as a separate thing. I can't remember for sure but I think you're assumption is correct in that it only installs the FRB if it also had to install alt-ram.
I think you have a very good point. When it installs the FRB itself it should be >4k but if it's already there it would be good if it double checked and avoided that (or just create and install a new one)exxos wrote: 01 May 2022 00:18 So I guess maprom isn't avoiding the actual FRB 64k block for caching then @agranlund ? If that's being cached then could may well explain why the floppy is going nuts.
Yeah the thing is, you can't 100% cache inhibit areas from the hardware side only.exxos wrote: 05 May 2022 22:36 I did wonder about trying to cache inhibit the FRB area in the TF536 firmware, but problem is, it may not always be in the same place, and I am still not convinced cache inhibit works in firmware :roll:
For that you need the PMMU to be properly set up from software. Usually this'll be the task of an operating system.
This has nothing to do with the TF536, it's just how the 68030 CPU works.
The CIIN pin on the 68030 is only cache-inhibit for cpu-reads (and also only if that data is not already in the cache, for whatever reason)
The pin has no effect when the cpu is writing.
Even if you're asserting CIIN for some region, a write to that region will still put the data in the cache.
And since it's now in the cache, a subsequent cpu-reads will get it from the cache even if you assert CIIN..
Combined with DMA this can cause bad-things of course:
1) cpu writes something to a buffer (CIIN does not effect writes, so the data ends up in cache)
2) something is DMA'ed to the buffer
3) cpu reads from the buffer -- it gets the cached data from 1 (CIIN is ignored because the data is already in the cache)
The MMU is needed to avoid things like that example from happening.

