>>33
You don't need to reverse the chip to understand the arch.
If you know the public interface, that's enough to have all the software work properly on your system. How you create something which implements that interface is up to you, and it doesn't have to be the same way as done by the original chip maker: providing your implementation is faithful to the documented interface, the software would work the same. The public interface (assembly language being one such thing) is usually well documented, so anyone versed in CPU and hardware design should be able to implement it given enough time (there's no real secrets on how to implement various things, the only trick here is doing it efficiently, which is what most of the time is invested on modern CPUs, but those are just optimizations(even if the entire chip may consist of them)).
So no, my claim still stands that you don't really need to know the exact undocumented internals of an architecture to understand it or make compatible software for it (on all levels, both kernel and user mode). If I didn't explain myself well-enough, I'll give a practical example that anyone can understand: x86 is implemented by both Intel and AMD, both doing their own R&D (they do have some agreements when it comes to their patent pool sharing and similar things, but that's still just sharing of PUBLIC, WELL-DOCUMENTED information that the hardware and software must conform to be called x86). The same is true for other things like RAM interfaces, buses and whatnot.
Another thing to note is that one doesn't even have to know how hardware internally works to understand a platform: an emulated platform (based on a software model) is just as valid as a hardware model, in fact, many hardware models first start off as a simple software model on which one can test and toy around, after which hardware models are developed. I'd imagine people here on
/prog/ would understand that the model/interface is an universal and abstract mathemathical construct which can be implemented in actual code, be it physical "code" (hardware), or pure software code, or ever something inbetween. When people develop for a platform, they develop for the model of a platform, while the platform itself can be implemented in many different ways (emulated, virtualized, FPGA, ASIC, different full-custom CPUs, and so on). Another simple example would be the Java virtual machine which started out as a purely virtual machine which implements the model of a certain stack-based CPU, which was only implemented in software at that time. After years have passed and Java become popular, there appeared CPUs in the market which could execute java bytecode natively, thus the platform was now implemented in hardware, but the same (compliant) software would still work, as it was designed for a certain abstract CPU model.