Remix.run Logo
smallstepforman an hour ago

To support protected memory, you need an MMU, and the base 68000 did not ship with an MMU, however the 68020 and later did. The Amiga 3000 onwards should have defaulted to MMU and had a flicker fixer and chunky graphics and 16 bit sound to really succeed. Another multiverse timeline, perhaps.

vidarh 36 minutes ago | parent [-]

The A3000 had a ficker fixer. If you meant that the other later models should have also included it, I agree.

Regarding the MMU, the problem was/is the OS. AmigaOS uses message passing between processes extensively, and those messages often involved passing pointers to structures that the receiver expected to be able to dereference and even writ to in some cases.

I'm on record repeatedly arguing over the years that it would be possible to retrofit at least limited memory protection onto AmigaOS, but it's decidedly not something that'd be simple to do, and most likely you'd need to basically sandbox old apps and create new API's for new apps to do it properly.

amiga386 21 minutes ago | parent [-]

It would be simple, but somewhat incomplete. It would not look like a virtual memory subsystem where merely accessing an address can allocate physical RAM to it.

The API is already there! AllocMem(, MEMF_PUBLIC) allocates shared memory, otherwise you get private memory.

You can then enforce memory protection around that, but obviously the entire OS is still built on message-passing between tasks where the message itself remains at exactly the same (public) address and isn't copied between private memory spaces, and there's a gentlemens' agreement as to who currently owns it (PutMsg/ReplyMsg)

Software like Enforcer and MuGuardianAngel already checked this, and dinged your program for accessing non-allocated memory.