This textbook covers topics which cross the border between hardware and software and should be of value to both students of computer science and electronic engineering. It shows how one may proceed top-down through software engineering to arrive at the fundamental programming constructs that one wishes to run as process. Finally one arrives at the fundamental atoms of programming which must be available to make a universally programmable machine. Explanation is given of what the components of a computer are, how they are connected together and how they in turn are constructed. No particular technology is assumed.