IBM never used these terms “Model A” and “Model B” which makes it a little nebulous on exactly what this means. But from this article posted by IBM (here), there were substantial changes to the 5150 around March/April of 1983.
|MODEL A 5150||MODEL B 5150|
|Before March 1983||After March 1983|
|64KB system board RAM||256KB system board RAM|
|Dark 63W power supply||Silver 63W power supply|
|Oval shaped pass-thru slot on back of case (no “B” label stamp)||“B” label stamped on back of case|
|Single Sided Disk Drive (160KB/180KB)||Double Sided Disk Drive (320KB/360KB)|
|Buggy ROM BIOS (544KB max. RAM)||1982 BIOS Standard (640KB max. RAM)|
|CGA supported but MDA only monitor type available||Both MDA or CGA+MDA video monitors available|
|Intel 8088 4.77 MHz Processor||Intel 8088 4.77 MHz Processor|
|5 Expansion Slots||5 Expansion Slots|
|Cassette Port (CBASIC 1.0)||Cassette Port (CBASIC 1.10)|
Below is an example of what the “B” stamp on the back of 5150 case looks like (generally located above the KEYBOARD/CASSETTE input ports):
A “Model A” is a 5150 made before March 1983, and a “Model B” was made after this date (possibly as late as 1987, where the entire IBM PC line was discontinued in April 1987).
The main difference is the “Model B” had the newer BIOS (from 1982) and could have 256KB RAM onboard (on the mainboard, not as an expansion card). The “Model A” could have its BIOS upgraded (easy chip swap, no soldering), but its mainboard was limited to 64KB RAM. In either case, almost always one expansion slot was consumed for memory expansion (generally to 384KB, 512KB, or ultimately 640KB). There was huge demand for RAM and disk drives in these early days, with limited production capacity, and so prices remained high throughout the mid-1980s.
Other differences are that the Model A might more likely have single-sided disk drives, and can only access up to 544KB RAM, as well as various minor cosmetic differences (such as the power supply being black instead of silver). IBM was not sure how much interest there would be in the 5150 model (plus at about the same time, they were selling the much more expensive Datamaster to more business oriented customers). But turns out the 5150 was very successful, being sold as fast as they could be made, particularly to small business owners.
If you boot up with no disk and get to Cassette (ROM) BASIC, it won’t be obvious if you have 64KB or 256KB RAM. If you do have a DOS boot disk, or can boot to some “fixed disk” installed operating system, then running “CHKDSK” program might show the available memory (the program does more than just “check the disk”).
If you don’t have any physical floppy disks with a version of DOS or the drives don’t work, then look for a “B” stamp on the back of the case (which is the only reason it is called “Model B”). If that fails, then you have to open the case and look for this: at the edge of the motherboard near the speaker will be a stamp “64KB – 256KB CPU” (the original 5150 would be labeled “16-64KB”).
Here is the label location on my 5150, with the case removed. For an example of the 16-64KB label, refer to here.
Should you encounter an IBM PC 5150, but have no disks and can’t easily open the case, you can boot to ROM Cassette BASIC and key in a couple interesting programs:
OPTION 1: See >>here<< (PEEK commands to get BIOS version)
10 DEF SEG = &HF000 20 FOR i = 0 TO 7 30 PRINT CHR$(PEEK(&HFFF5 + i)); 40 NEXT
This works based on studying the 5150 BIOS assembly source code (where the segment:offset containing the date is just after the RESET code near the very end of the BIOS assembly code). For references to that IBM PC BIOS assembly code, see:
Another option is to explore the IBM copyright in the BIOS, using the following program:
10 DEF SEG=$HF000 20 FOR I = 0 TO 24 30 PRINT CHR$(PEEK($HE000+I));:PRINT " "; 40 NEXT
The program result should look like the following:
As another suggestion:
def seg=&h40 print peek(&h14)*256 + peek(&h13)
This is valid BASIC and is interpreted “on the fly.” Line numbers are not technically required (except in certain cases, such as for explicit GOTO branching).
OPTION 2: Iterate across each segment and attempt to write data and read the same value back. In the example below, you don’t need to type the REM portions (those are just “REMINDERS” or comments that are optional).
10 N = 0:REM START FIRST SEGMENT 20 DEF SEG = N 30 POKE 50,100:REM POKE A VALUE 40 A = PEEK(50):REM PEEK SHOULD RETURN SAME VALUE 50 IF A<>100 GOTO 80:REM IF NO, ASSUME NO MORE SEGMENTS 60 N = N+4096:REM INCREMENT TO NEXT SEGMENT 70 GOTO 20 80 PRINT (N/4096)*64; 90 PRINT "KB"
And slightly longer “per-segment” version is:
10 N=0:S=0 20 DEF SEG=N 30 FOR I = 0 TO 63:REM EXAMINE EACH KB OF THE CURRENT SEGMENT 40 POKE I*1024,100 50 A=PEEK(I*1024) 60 IF A<>100 GOTO 80 70 NEXT I 80 PRINT "SEG ";:PRINT N/4096; 90 PRINT "KB=";:PRINT I 100 IF S=15 GOTO 130 110 N=N+4096:S=S+1 120 GOTO 20 130 PRINT "DONE"
Comparison to the IBM PC XT (a.k.a. 5160)
The main differences with the IBM PC XT is that it has a more powerful power supply (130W), because the XT also came with a 10MB hard disk drive as standard (and a single disk drive) and also 8x expansion ISA slots instead of only 5x. For the XT, other disk drive configurations gradually became available (as “half height” drives became available, so finally a 3.5″ drive and 5.25″ drive could be fitted together in the same bay).
The XT still had the same 8088 processor and ROM BASIC, but the cassette port itself is removed (preventing any way to actually save or load Cassette ROM BASIC programs). The above BASIC samples will work in an XT as well, but must be manually typed each time the system is powered on.