6 ms·
You gotta love that weird segmented memory model though, to allow it to address up to 1MB of RAM using 20 lines, combining a pair of 16 bit registers to generat
by mrlonglong 6y ago
You gotta love that weird segmented memory model though, to allow it to address up to 1MB of RAM using 20 lines, combining a pair of 16 bit registers to generate the 20 bit address. The Motorola 680x0 was a bit saner.
- chihuahua 6y agoI wish Intel had just added some address lines and increased the price by $10 or whatever. I remember writing 68k assembly code and it was very pleasant to work with. 8 address registers, 8 data registers, if you want to access memory, you just put a 32-bit address into an address register. Then I read a book about 80286 assembly and though "ugh this is horrible" and never wrote a single line of x86 assembly code. Worrying about segments and memory models (tiny, small, medium, compact, large, huge) seemed like such a drag on programmer productivity.
- microcolonel 6y ago> I wish Intel had just added some address lines and increased the price by $10 or whatever. It was at a magic price point though, ten dollars literally could have broken the whole product.
- kabdib 6y agoIt probably would have tipped IBM over to using the 68K. IIRC it was a near thing anyway.
- AnimalMuppet 6y agoI have heard that IBM chose the 8088 because Intel sowed some FUD about Motorola's ability to supply the 68000 in sufficient quantity for IBM. The decades of insanity we could have saved if IBM had chosen differently...
- pwg 6y agoThe Wikipedia page on AMD has a slightly different take (https://en.wikipedia.org/wiki/Amd#Technology_exchange_agreement_with_Intel https://en.wikipedia.org/wiki/Amd#Technology_exchange_agreem...): -quote- Technology exchange agreement with Intel Intel had introduced the first x86 microprocessors in 1978. In 1981, IBM created its PC, and wanted Intel's x86 processors, but only under the condition that Intel also provide a second-source manufacturer for its patented x86 microprocessors. Intel and AMD entered into a 10-year technology exchange agreement, first signed in October 1981 and formally executed in February 1982. The terms of the agreement were that each company could acquire the right to become a second-source manufacturer of semiconductor products developed by the other; that is, each party could "earn" the right to manufacture and sell a product developed by the other, if agreed to, by exchanging the manufacturing rights to a product of equivalent technical complexity. The technical information and licenses needed to make and sell a part would be exchanged for a royalty to the developing company. The 1982 agreement also extended the 1976 AMD–Intel cross-licensing agreement through 1995. The agreement included the right to invoke arbitration of disagreements, and after five years the right of either party to end the agreement with one year's notice. The main result of the 1982 agreement was that AMD became a second-source manufacturer of Intel's x86 microprocessors and related chips, and Intel provided AMD with database tapes for its 8086, 80186, and 80286 chips. -end quote- How much really was Intel sowing FUD vs. IBM demanding a second source be available is probably lost to time.
- bbojan 6y agoI've heard a story that due to the hardware divide instruction in 68000, IBM engineers were concerned about interrupt latency (the instruction took many cycles to execute and couldn't be pre-empted by in interrupt).
- SomeoneFromCA 6y ago8086 also had hardware div.
- Gibbon1 6y agoThe explanation I read back in the early 80's was Intel had the 8088 which required 8 DRAM chips. And the 68000 required 16 DRAM chips. For early microcomputers the cost of DRAM was the dominant cost.
- a1369209993 6y agoIt's not a matter of address lines; registers are 16-bit (can addresss only 64 kilobytes), so you need segmentation regardless of whether your segements are mapped into 1MB, 16MB, or 4GB. (For Abus = Areg + Sreg << 4, 8, or 16 respectively.)
- ibiza 6y agoMotorola jumped from their 8-bit 6809 to a full 32-bit (internal) processor in 1979. Intel delivered a 32-bit processor 6 years later in 1985. Intel Motorola 1974 8080 8-bit 1974 6800 8-bit 1976 8085 8-bit 1978 6809 8-bit 1978 8086 16-bit 1979 68000 32-bit 1982 80286 16-bit 1985 80386 32-bit
- a1369209993 6y agoYes, but that's not a matter of "just add[ing] some address lines"; it's a matter of adding additional bits to the registers (and probably the ALU and internal data buses, but the registers are the limiting factor: if you don't have 32-bit registers you can't have (32-bit) flat address space). Even if it were "just", it would be "just add some register bits".
- kabdib 6y agoI think that the face of computing would have changed quite dramatically if Intel had decided to make the x86 segment paragraph size 256 bytes (8 bits) instead of the useless 4 bits. Imagine not having a 640K (or 1MB) ceiling (without hacks like "expanded" or "extended" memory). It would not have been a big deal for Intel to do this; I'm pretty sure they could have multiplexed four more pins worth of address lines. It would have given the x86 a native 24MB address space, equal to the 68000's physically provisioned 24 bits (which is all most 68K systems supported anyway, certainly the Atari ST and the Mac). For instance, in the mid 80s, VisiCorp was trying really, really hard to fit their products into 640K. They had some whizzy stuff, but the address space problem pretty much killed them. Later, Microsoft and IBM came along, did the disgusting memory-space hacks that plagued users for a decade or more, and VisiCorp foundered.
- cesarb 6y ago> if Intel had decided to make the x86 segment paragraph size 256 bytes (8 bits) instead of the useless 4 bits It would also have increased memory fragmentation. Many memory allocations were aligned to a segment boundary, so you'd be wasting up to 255 bytes instead of up to 15 bytes on each allocation.
- mrlonglong 6y agoActually there aren't any alignment issues with the 8086, as it's still a 8 bit processor at heart.
- mschaef 6y agoSegment alignment. Not read alignment. Large model memory allocators would allocate memory on segment boundaries. This is more or less essential if you need to use more than 64K of memory in your program. An 8-bit paragraph size (rather than the 4 that were used) would've forced all segment allocations to 256-byte boundaries, so that's where the fragmentation issue comes from. Steve Morse (one of the designers of the chip) talks about the issue in page 16 of this: https://www.stevemorse.org/8086history/8086history.pdf https://www.stevemorse.org/8086history/8086history.pdf
- pkaye 6y agoI think the idea of the segment registers is to create isolated memory ranges for multi tasking. These segments are at the granularity of 16 bytes and have a starting offset and length within 1MB of RAM. There are multiple segments so the code segment can be shared between processes and have separate stack and data segments. When you imagine it as one big 1MB address space this memory model looks wierd.
- andrewf 6y agoIntel leaned into this with the 286's protected mode - segments became references to "selectors" so the OS could place your 64k chunks of code/data wherever it wanted within 16M. I think the existing base of 8080 software (including CP/M software) was on their minds. You see the same thing in the 386/486, they have the large flat virtual address space software devs wanted, but until the early 90s their commercial value was running 8088 software really fast.
- pwg 6y ago>I think the existing base of 8080 software (including CP/M software) was on their minds. This is the generally accepted history. According to what's in Wikipedia (https://en.wikipedia.org/wiki/Intel_8086#The_first_x86_design https://en.wikipedia.org/wiki/Intel_8086#The_first_x86_desig...) the design was developed very quickly, and intentionally built as a straightforward 'extension' of the 8080/8085 chips into the 16-bit world: -quote- The first x86 design The 8086 project started in May 1976 and was originally intended as a temporary substitute for the ambitious and delayed iAPX 432 project. ... Both the architecture and the physical chip were therefore developed rather quickly by a small group of people, and using the same basic microarchitecture elements and physical implementation techniques as employed for the slightly older 8085 (and for which the 8086 also would function as a continuation). Marketed as source compatible, the 8086 was designed to allow assembly language for the 8008, 8080, or 8085 to be automatically converted into equivalent (suboptimal) 8086 source code, with little or no hand-editing. The programming model and instruction set is (loosely) based on the 8080 in order to make this possible. However, the 8086 design was expanded to support full 16-bit processing, instead of the fairly limited 16-bit capabilities of the 8080 and 8085. -end quote-
- WalterBright 6y agoYou grow to love it, though, sort of like Stockholm Syndrome.
- Koshkin 6y agoIsn't all love like that.
- mrlonglong 6y agoI liked being able to compile tightest code to fit the appropriate memory model. Tiny was a favourite with all segment registers pointing to the same segment. Another favourite was the huge memory model, multiple code, data and stack segments. Until the day came when one couldn't fit anymore in. I was glad when the mighty 386 came along.
- WalterBright 6y agoIt turns out that it wasn't actually necessary for a COM file to have the segment registers all the same. The Zortech COM file generation only required that the COM file be less than 64K. The startup code would fix things up so it would load and run.
- mschaef 6y agoIntel was trying to maintain backward compatibility, so the segments made sense. (They let you default to using the same 16-bit pointers as the earlier 8-bit CPU's, and only use the extended capability if you explicitly opted in by adjusting segment registers and the like.) And given the cost of memory and CPU packaging pins, 20-bite probably didn't seem like too much of a loss compared to 24-bit addressing (or Motorola's internal 32-bit).