Sean Conner via cctalk wrote on Mon, 10 Apr 2017 17:39:57 -0400 > What about C made it difficult for the 432 to run? > > -spc (Curious here, as some aspects of the 432 made their way to the 286 > and we all know what happened to that architecture ... )
C expects memory addresses to look like integers and for it to be easy to convert between the two. If your architecture uses a pair of numbers or an even more complicated scheme then you won't be able to have a proper C but only one or more less than satisfactory approximations. The iAPX432 and 286 used logical segments. So there is no sequence of increment or decrement operations that will get you from a byte in one segment to a byte in another segment. For the 8086 that is sometimes true but can be false if the "segments" (they should really be called relocation registers instead) overlap. Another feature of C is that it doesn't take types too seriously when dealing with pointers. This means that a pointer to an integer array and a pointer to a function can be mixed up in some ways. If an application has been written like that then the best way to run it on an architectures like these Intel ones is to set all segments to the same memory region and never change them during execution. This is sometimes called the "tiny memory model". https://en.wikipedia.org/wiki/Intel_Memory_Model Most applications keep function pointers separate from other kinds of pointers and in this case you can set the code segment to a different area than the data and stack for a total of 128KB of memory (compared to just 64KB for the tiny memory model). The table in the page I indicated shows options that can use even more memory, but that requires non standard C stuff like "far pointers" and I don't consider the result to be actually C since you can't move programer to and from machines like the VAX or 68000 without rewriting them. -- Jecel p.s.: sorry about the word wrapped link in my other post. It should have been: > http://www.cpushack.com/2015/04/18/the-forgotten-ones-unisys-scamp-d-mainframe/