100
votes
Accepted
Why didn't the 8086 use linear addressing?
For once, I do have a direct source for a "Why didn't they ...?" question. Eric Isaacson, back in the late '80s and '90s, wrote a commercial assembler for the 8086, called A86. (His ...
83
votes
Accepted
Who set the 640K limit?
There was a 640K limit on the original IBM PC, but it was the result of IBM’s design decisions, and nothing to do with Microsoft: it’s the largest contiguous amount of memory which can be provided ...
46
votes
Accepted
Why did Intel abandon unified CPU cache?
I’m not sure the separate cache was “obviously better” back when the Intel designers were working on the 80486, at least, not to the designers in question.
But “better” might not even have been much ...
46
votes
Accepted
Did any computer use a 7-bit byte?
The PDP-10 had 'byte instructions' that could process a sequence of bytes of size 1 to 36 bits. The byte pointer was a word containing an 18-bit word address (and the usual index/indirect indications)...
42
votes
Accepted
What is the purpose of mirrored memory regions in NES's CPU memory map?
It is not intentionally mirrored, it is just a side effect of making the address decoding hardware for RAM as simple and cheap as possible with a single common 74LS139 chip used for the task, when an ...
38
votes
Accepted
What were the actual memory model definitions in MS-DOS?
The memory model all had to do with how much code and/or data your program was using. First some background.
The 8086(1) was based on earlier Intel chips where their address space was strictly 64K and ...
36
votes
How is memory allocated in Super Mario World?
Memory is allocated statically in Super Mario World. Every RAM location used is hard-coded into the game, although some are re-used by different parts of the code.
A full, annotated, and searchable ...
32
votes
Accepted
How did an IBM 5150 with 16KB RAM work?
What Boot Code? With 16 KiB it was pitched against the Apple II or the Commodore/Tandy/Atari with BASIC, nothing else. Remember that the PC (!) had a the cassette port? That's the intended mass ...
32
votes
Where is DOS stored in memory when a program starts?
DOS is a very un-restricted and "open" operating system with basically no protection on (benevolent or not) intrusion. That means, it's perfectly possible for a .COM program to take over the ...
30
votes
Accepted
How did old computers address far more than 64K of memory despite only having a 16 bit address bus?
I don't know details of the Sharp PC-G830 specifically but the technique used to address more than 64K with a 16-bit address bus is called "bank switching".
This involves setting up some ...
29
votes
Accepted
How did the Sideways address space work?
Sideways ROM (also RAM in later models) was paged into the processor's address space.
Sideways memory sat in the address range from $8000 to $BFFF. The BBC Model B had four slots on the motherboard ...
27
votes
Why didn't the 8086 use linear addressing?
The 8086 used a segmented memory architecture where the linear address was computed from a 16-bit segment number and a 16-bit offset. This greatly complicated things from a programming perspective.
I ...
26
votes
Accepted
Why is the Amiga ROM at a high memory location, and RAM in low memory?
It was part of the 68000 system architecture in which all the interrupt vectors are low in the memory map.
The first 1024 bytes are reserved for these vectors and if a program / os need to change ...
26
votes
Accepted
Did anyone ever put half a megabyte of memory in an Altair?
Did anyone ever put that much memory in an Altair, IMSAI or other 8080/Z80 S-100 bus machine?
Has been done a lot of times. Remember, S100 has been used all the way thru the 1980s into the 1990s. RAM ...
25
votes
Why is the Amiga ROM at a high memory location, and RAM in low memory?
All of the 68k-based computers (Amiga, Atari ST and Sinclair QL, as well as the classic Macintosh) went to market in a rush. And all of them went to market before the OS (and, thus, the ROMs) were ...
23
votes
Why did Intel abandon unified CPU cache?
Stephens Answer already carries most implications, so this is merely an add-on.
First to keep in mind is that the 68k was way more in need of a cache than x86 CPUs, as its memory access was in line ...
23
votes
Accepted
What are the "ports" used via IN/OUT, vs. the PEEK/POKE address space?
The TRS-80 series is Z80 based, and Z80 uses, like all 8080 offspring (*1,3) a separate address space for I/O. It allows easy decoding for I/O.
Thus memory address 0000h is different from I/O ...
22
votes
Why did the TI-99/4 have two databuses?
According to Wikipedia,
The unusual architecture of the 99/4 series is documented to be due to the failure of the 9985, an 8-bit processor which was being created specifically for the machine. When ...
22
votes
Who set the 640K limit?
Following up on the @StephenKitt answer:
CP/M put BIOS and BDOS code at the top of RAM, and IBM decided to copy that idea. Just like with CP/M systems, the plan was to raise the start of reserved ...
20
votes
Accepted
Was it possible to cause persistent changes to a mid-1980s IBM-PC using POKE in GWBASIC?
Assuming you started at segment 0, you overwrote the interrupt table, and the next time an interrupt occurred (probably the timer interrupt), the CPU would jump to something which was in all ...
19
votes
How did an IBM 5150 with 16KB RAM work?
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):
...
19
votes
Why did the TI-99/4 have two databuses?
Now given that the TMS9900 has a 16 bit databus, it seems to me that they could have put all memory and all periphery on that bus. It would have saved the cost of the multiplexor, and made the ...
19
votes
Accepted
How was a line of Commodore 64 BASIC code stored in its memory?
Trust Vice.
The information you obtained elsewhere is incorrect. Each line of the BASIC program is preceded by a pointer to the next line. Then, comes the line number.
Following this is the tokens ...
19
votes
What were the actual memory model definitions in MS-DOS?
The memory models were defined by compilers for high-level languages, and were reasonably standard between Microsoft, Borland and Watcom. The Small, Medium, Compact and Large models appear to have ...
18
votes
Accepted
How does Notepad store text files in memory?
Notepad (at least originally) was implemented as a simple wrapper around the Windows EDIT control. EDIT is not really designed to handle large amounts of text -- it stores text in a single block of ...
18
votes
Accepted
How does JSR actually work on the 65c816 CPU for the SNES (Super Nintendo)?
JSR works how you think — the program counter will head off to 80fa — but the SNES doesn't. The two most common memory mappers both mirror what's at $00xx at $80xx.
So when the processor reads from $...
18
votes
How was a line of Commodore 64 BASIC code stored in its memory?
As discussed and linked in this thread, Norbert Landsteiner has
written a series of blog posts on masswerk.at that cover Commodore
BASIC V2 internal program and data representation in detail and ...
17
votes
Accepted
How does the Commodore 64 address more than 64 kilobytes of memory?
The 6510 CPU used in the Commodore 64 has an additional built-in general purpose I/O port compared to the original 6502 CPU. Address $0000 controls the direction for each of the bits of this I/O port, ...
17
votes
How does the Commodore 64 address more than 64 kilobytes of memory?
The C64 BASIC ROM lives at $A000, the KERNEL ROM lives at $E000, but these ROMs also have RAM wired in 'parallel' Under normal operation this RAM is unused but you can use the LORAM/HIRAM bits to ...
Only top scored, non community-wiki answers of a minimum length are eligible
Related Tags
memory-layout × 76memory × 14
ms-dos × 10
ibm-pc × 9
commodore-64 × 8
history × 6
apple-ii × 5
graphics × 5
6502 × 5
hardware × 4
programming × 4
nintendo × 4
bbc-micro × 4
assembly × 3
z80 × 3
basic × 3
nes × 3
rom × 3
design-choices × 3
8086 × 3
amiga × 2
emulation × 2
video × 2
zx-spectrum × 2
gaming × 2