26

I read on Wikipedia that 80386 could theoretically handle 4GiB of RAM. Knowing how long ago that was, I find it impossible to believe that anyone could actually connect as much to the CPU. So, given the constraints from motherboards and actual RAM chips existing at that time, how much RAM could one put together with an 80386?

d33tah
  • 363
  • 3
  • 7
  • 1
    Keep in mind that that's the virtual address space, and many operating systems used it to keep nice round numbers for process-space blocks. – chrylis -cautiouslyoptimistic- Apr 05 '19 at 16:09
  • 1
    I'm not claiming to know of any other kind of computer that used the 386, but when you say, "setup," can we assume that you mean, "made-for-Windows PC?" – Solomon Slow Apr 05 '19 at 17:04
  • 2
    @chrylis The virtual address space of the 386 was 32 bit, but here we are talking about physical pins connected with wires. It is so physical address space, as it only can be. – peterh Apr 05 '19 at 22:52
  • 1
    @peterh That was directed at the implicit question of "why so much address space if you couldn't possibly add it to the motherboard?" – chrylis -cautiouslyoptimistic- Apr 06 '19 at 01:08
  • 1
    It's probably worth noting that, with custom hardware and purpose-specific software, you could attach an infinite amount of ram to any processor (provided it has some sort of of IO). That's rather not what you're asking, though. – Fake Name Apr 06 '19 at 06:47
  • 1
    @chrylis Right, but I think I addressed also this in my answer (see 1) socket compatibility with the future 2) memory-mapped I/O). For example, the Weitek FPU was seen by the CPU as if it would be a memory chip at 192MB. – peterh Apr 06 '19 at 20:01
  • I remember a question in a newsgroup, probably mid-nineties: "Can I put a Gigabyte of RAM in my Linux box?" The answers were "Probably -- but why on earth would you want to do that??" They were dealing with some biophysics computation with a lot of data and didn't want disk access, IIRC. – Peter - Reinstate Monica Apr 07 '19 at 05:52
  • Even the mainframe people didn't use 4GB. A million dollar plus Sequent S81 (30 odd 386DX processors) went up to only 384MB. – Alan Cox Jan 23 '23 at 23:27

4 Answers4

37

I very much doubt that anyone would ever have seriously considered fitting 4 GiB in a 386-based system, let alone designing such a beast. (To put this into context, I remember seeing early 1 GiB Alpha servers on the factory floor of Digital’s plant in Scotland in 1994, and those machines were priced at around $250,000...)

The Red Hill hardware guide provides a number of examples. 386SX systems were limited to 16 MiB at most anyway, because of the limited number of address lines. For 386DX systems, a common configuration included 8 SIMM slots, for up to 32 MiB of RAM, but Red Hill’s golden oldies page lists one SIPP-based motherboard which might have been usable with 64 MiB. Some manufacturers produced expansion boards to add more memory — e.g. ALR systems had expansion boards supporting up to 48 MiB each. In early 1993, in the US, 4 MiB of RAM cost over $100.

I bought a 386DX/33 in 1992, with 8 MiB of RAM out of a maximum 32 MiB, and that was considered large at the time — enough to run Windows 3.1 or OS/2 very comfortably. I kept that system for four years, eventually switching to Linux, and never needed to add more memory.

In those days, even servers had “small” base configurations as presented in advertisements — see this 1990 ALR advert with a 386/33 and 5 MiB of RAM for a cool $6,290...

Stephen Kitt
  • 121,835
  • 17
  • 505
  • 462
  • The limit by address lines is the important factor one could not put 4 GiB memory into a 386 setup. There were practical reasons that beat theory. – Bernhard Döbler Apr 05 '19 at 13:34
  • 1
    Sorry, I dont want to create confusion. The processors sure had the addresses. I always believed motherboards were not equipped to handle that much memory as it was not needed. – Bernhard Döbler Apr 05 '19 at 13:48
  • 2
    Ah, right, yes — adding lines costs money and would only be done if it was useful! – Stephen Kitt Apr 05 '19 at 13:53
  • 1
    Well, it was obviously Intel 80x86 architecture you were talking about, so just as a side note I remember a tech guy at my uni showing me his fully packed Sparcstation 10 in 1994, which had 512mb, so half of the GB. – Gnudiff Apr 05 '19 at 18:28
  • 1
    8MB being "considered large" in '92 is a bit of an understatement. 4MB (4 1MB SIMMs) was standard 2 years later for a 486 PC. Typical 386 PCs had 1 to 2MB, 4 or 8 256KB SIMMs. – mnem Apr 05 '19 at 18:41
  • 1
    Address lines aren't really a limit if you use EMS or paging in protected mode. You could put an unlimited amount of ram on the ISA bus if you were happy with having a driver to interface with it. – R.. GitHub STOP HELPING ICE Apr 05 '19 at 22:23
  • 1
    @R. as long as you don’t mind a hefty speed penalty ;-). – Stephen Kitt Apr 05 '19 at 22:25
24

We can see the datasheet of the 386DX here. The most important part is its pinout.

We have address lines from A2 to A31. It means, that yes, it could have handled 4GB memory on a motherboard. Although it is very unlikely, that any ordinary PC motherboard had been built with the required number of memory sockets at the time.

It is more likely, that it was used at most to make memory-mapped IO easier in embedded environments.1

(A0 and A1 are missing, because the cpu could address only 4byte memory operations. Essentially, it was an only 30-bit CPU, working with 32-bit "bytes". This trick is usual since the early 16-bit era.)

For example, the Weitek Abacus FPU was memory-mapped to 0x0C000000. Floating-point calculations could be done by writing the commands into a 64kB-block starting at far higher as any physical RAM ever could end (at the time... 192MByte), and then reading out the result with mov operands.


enter image description here

peterh
  • 1,749
  • 1
  • 14
  • 26
  • 3
    Exactly, thanks. It’s worth noting that the 386, while it addressed 32-bit words as you point out, could operate on individual octets by using the bus enable pins (BE0–3). – Stephen Kitt Apr 05 '19 at 13:51
  • 1
    Why didn’t they reduce the address pins to a more reasonable number? I mean … nobody expected you to have the full 2^32 bytes of RAM back then, right? A2–A24 for 32MiB RAM should have been perfectly sufficient. – Michael Apr 05 '19 at 14:42
  • 5
    Would be fun to see someone fitting a modern 4GiB RAM module via some type of adapter to a real 386 chip and get it to work. – Ruslan Apr 05 '19 at 14:59
  • 4
    @Michael I think they had two reasons: 1) they didn't know at the moment, how strongly should they remain compatible with their own CPU sockets of the future. At the time it was yet a real possibility that 586, 686 will be still socket-compatible (or will have at least a socket-compatible version) 2) These CPUs wasn't designed only for PCs, but also for embedded environments. If you access some hardware by memory-mapped IO, it means that you communicate with the chip with memory read/write operations. Essentially, the CPU can see the chip as if it would be a memory module. – peterh Apr 05 '19 at 15:15
  • @Michael Now the problem is that you can't convince the all the chip manufacturers of the today and the future, to be nice and compatible with your CPUs, and wire their chips to the params you would like to have. So they've needed maximal flexibility. Thus, if you have a 32-bit bus, you need to have 32-bit pins (well, 30). – peterh Apr 05 '19 at 15:16
  • 2
    @Michael The 386SX did that... it narrowed the address bus to 16MB, which was much more realistic in terms of installed RAM. On 386DX hardware, there were also products like the Weitek 1167/3167 FPU's that were memory mapped into addresses way beyond 16MB. (These devices accepted their instruction stream over the address bus, in fact.) – mschaef Apr 05 '19 at 15:30
  • @Michael An example: Weitek Abacus FPU was a floating-point coprocessor, but it was visible as if it would a 64kbyte RAM block at 0x0C000000. You wrote your commands into the memory addresses, with mov operands, and then read the result from them. It was much faster than the 387. – peterh Apr 05 '19 at 15:38
  • 1
    Having extra address lines available can simplify decoding. If, for example, some devices are are 8 bits wide, some 16, and some 32, and if some devices require wait states while others don't, one could use four address lines to control such things and still have 256MiB of address space available. If one started with only 24 address lines, using four for such purposes would leave only 1MiB of address space available for each combination of memory width and speed. – supercat Apr 05 '19 at 19:14
6

As someone who had a 386, I was happy just to upgrade from 4MB RAM to 8MB RAM. Just think of all the cool things I can do now?! At that point, my motherboard could not contain anymore RAM IC's, so the only way to upgrade further would have been to get denser chips. But by the time I needed more RAM I was on to a 486. Yes, you're correct about the theoretical maximum but, at least for consumer level machines, ain't nobody doin' that.

StealthKK
  • 61
  • 1
  • 2
    My family had a 386sx machine that capped out at 5MB, assuming it was fully populated with 1MB SIMMs (and 1MB was soldered on the motherboard). A few years later, we had a 486 that could go to 32MB if you used 4MB SIMMs, and then to 64MB via a machine-specific memory expansion board. (We never took that machine past 8MB.) – mschaef Apr 05 '19 at 15:33
  • 1
    IME there were no programs that really needed more than what half of what your RAM could be, for any x86. Modern, "typical", memory-hungry programs are a relatively new invention. If you ever rocked an x86 maxed-out, it was past its service length (and affordable) or doing something atypical. – Mazura Apr 05 '19 at 21:54
0

Moterboards for 386 processor were different in time with different memory cotrollers and slot numbers. DIPP sockets, 30 pin SIM, 72 pin SIM.

From my personal experience I think it is 8MB in early start to 16MB later. Same issues as now (controller max mem, awailable slots, RAM availability and price) 386 computers with 64 or more RAM I could not count "typical" in the place where I grown up.