The minimal version of IBM PC, also known as cassette version, was shipped with 40KB ROM and 16KB RAM as outlined in IBM 5150 Technical Reference (SECTION I. HARDWARE OVERVIEW in the reference):
The System Board is a large board which fits horizontally in the base
of the System Unit and includes the microprocessor, 40KB ROM and 16KB
memory. The memory can be expanded in 16KB increments to 64KB. The
System Board also includes an enhanced version of the Microsoft
BASIC-80 Interpreter without diskette functions. The BASIC Interpreter
is included in the ROM. The System Board also permits the attachment
of an audio cassette recorder for loading or saving programs and data.
The 40KB ROM is split between IBM Cassette BASIC and BIOS ROM:
The System Board is designed to support both ROM and Read/Write
Memory. The System Board contains space for 48K x 8 of ROM or EPROM.
Six module sockets are provided, each capable of accepting an 8K x 8
device. Five of the sockets are populated with 40 KB of ROM. This ROM
contains the Cassette BASIC interpreter, cassette operating system,
Power-on Self-test, I/O drivers, dot patterns for 128 characters inn
graphics mode, and a diskette bootstrap loader. The ROM is packaged in
24-pin modules and has an access time of 250 ns and a cycle time of 375
ns.
The 40KB are mapped at the end of SYSTEM MEMORY MAP below 1 MB from F6000 to FFFFF (see 2-24 in the reference). 8KB area from FE000 to FFFFF belongs BIOS program, according to BIOS MEMORY MAP (see Figure 24 in the reference). CASSETTE BASIC INTERPRETER takes 32KB from F6000 to FE000 just below the BIOS.
The 16KB RAM is mapped at the beginning of SYSTEM MEMORY MAP from 0000 to 3FFF.
CPU starts at the reset vector FFFF0 (16 bytes below 1MB) in the BIOS part of the ROM. BIOS performs Power-On Self Tests (including set up of interrupt vectors in the beginning of low memory) and then jumps to BOOT_STRAP routine:
;--- INT 19 -----------------------------
;BOOT STRAP LOADER
; IF A 5 1/4" DISKETTE DRIVE IS AVAILABLE
; ON THE SYSTEM, TRACK 0, SECTOR 1 IS READ INTO THE
; BOOT LOCATION (SEGMENT 0, OFFSET 7C00)
; AND CONTROL IS TRANSFERRED THERE.
;
; IF THERE IS NO DISKETTE DRIVE, OR IF THERE IS
; IS A HARDWARE ERROR CONTROL IS TRANSFERRED
; TO THE CASSETTE BASIC ENTRY POINT.
;
; IPL ASSUMPTIONS
; 8255 PORT 60H BIT 0
; = 1 IF IPL FROM DISKETTE
;-----------------------------------------
ASSUME CS:CODE,DS:DATA
BOOT_STRAP PROC NEAR
STI ; ENABLE INTERRUPTS
MOV AX,DATA ; ESTABLISH ADDRESSING
MOV DS,AX
MOV AX,EQUIP_FLAG ; GET THE EQUIPMENT SWITCHES
TEST AL,1 ; ISOLATE IPL SENSE SWITCH
JZ H3 ; GO TO CASSETTE BASIC ENTRY POINT
;------ MUST LOAD SYSTEM FROM DISKETTE -- CX HAS RETRY COUNT
MOV CX,4 ; SET RETRY COUNT
H1: ; IPL_SYSTEM
PUSH CX ; SAVE RETRY COUNT
MOV AH,0 ; RESET THE DISKETTE SYSTEM
INT 13H ; DISKETTE_IO
JC H2 ; IF ERROR, TRY AGAIN
MOV AH,2 ; READ IN THE SINGLE SECTOR
MOV BX,0 ; TO THE BOOT LOCATION
MOV ES,BX
MOV BX,OFFSET BOOT_LOCN
MOV DX,0 ; DRIVE 0, HEAD 0
MOV CX,1 ; SECTOR 1, TRACK 0
MOV AL,1 ; READ ONE SECTOR
INT 13H ; DISKETTE_IO
H2: POP CX ; RECOVER RETRY COUNT
JNC H4 ; CF SET BY UNSUCCESSFUL READ
LOOP H1 ; DO IT FOR RETRY TIMES
;------ UNABLE TO IPL FROM THE DISKETTE
H3: ; CASSETTE_JUMP:
INT 18H ; USE INTERRUPT VECTOR TO GET TO BASIC
;------ IPL WAS SUCCESSFUL
H4:
JMP BOOT_LOCN
BOOT_STRAP ENDP
So, if the system didn't have a diskette or diskette drive (which wasn't present on entry-level IBM PC), BOOT_STRAP
routine starts BASIC via INT 18H
. The interrupt vector for 18H
defines beginning of the 40KB ROM as the entry point to the BASIC:
DW 00000H ; INTERRUPT 18H
DW 0F600H ; ROM BASIC ENTRY POINT
16KB of RAM was enough to run BASIC programs according to the reference (SYSTEM BOARD. 2-4):
A minimum system would have 16 KB of memory with module sockets for an
additional 48 KB. In a cassette version of the system, approximately 4
KB is used by the system leaving approximately 12 KB of user's space
for BASIC programs.