4 ms·
Yup... that capability was introduced with the Macintosh II and Color QuickDraw. The II essentially switched the platform to a PC-style model where there was a
by mschaef 8y ago
Yup... that capability was introduced with the Macintosh II and Color QuickDraw. The II essentially switched the platform to a PC-style model where there was a case with drive bays and six expansion slots and you had a separate video adapter in a slot to run your monitor. Apple made it possible to install multiple video cards, each running its own display.
This was 1987. so at the time PC's were way behind in terms of the architecture needed to do this. Apple had a 24/32-bit [1] address space and an OS abstraction layer sitting in front of the graphics hardware. The closest in the PC space at the time was Windows 2.x, which ran in a 20-bit segmented real mode address space or OS/2, which nobody had. PC Video cards of the time were also hardwired to certain physical addresses, so installing two in one machine would run the risk of physically damaging hardware when the two boards both attempted to respond to a memory operation in that shared space. (The MDA was a unique case since it had its own memory window, separate from the rest.)
1] The original Mac II marked the first use of the fully 32-bit 68020 in the Macintosh. The earlier 68000 did operate internally on 32-bit addresses, but only exposed 24-bits on the package. (The 68000 was introduced in 1979, so >16MB was a fantasy.)
The net result of this is that programmers would often pack flags into the top 8 bits of a 32-bit address, with the knowledge that the hardware would just mask them off and ignore them. Since the Mac II had a fully 32-bit bus, that wouldn't work and Apple added external hardware to the CPU that would mask down to 24-bit addresses. Even the early Mac II ROM wasn't '32-bit clean' enough to run without this masking.
(PC's had a similar problem on a smaller scale. The (seg<<4)+ofs addressing scheme used in real-mode allowed 64K-16 addresses to be generated past the 1MB bound. On a chip with a 20-bit address bus (8088, etc.), these would wrap around. On a 286, they would address new memory locations. So AT class machines had masking of the A20 bit to allow them to wrap around addresses too. This masking also made its way into CPU packages, since there are implications for caching if you mask A20 and wrap the address space at 1MB.)