Questions tagged [design-choices]

Justifications and trade-offs of historical hardware and software designs, and their possible alternatives.

Filter by
Sorted by
Tagged with
18 votes
10 answers
7k views

Was there any computer since about 1960 without interrupt support?

The invention and spread of interrupts in the 1950s is reasonably well known but I am curious: were there any systems after which didn't support them?
chx's user avatar
  • 773
18 votes
3 answers
9k views

Why didn't Microsoft use a well-known encryption algorithm like RSA for telephone activation?

After 20 years the telephone activation algorithm of Windows XP has been cracked. Please understand the algorithm itself has been cracked and not the activation program. Microsoft had designed its own ...
zomega's user avatar
  • 4,670
8 votes
0 answers
454 views

How was the Amiga console supposed to work with only 32KB of RAM?

During the development of the Amiga, one of the targets was a game console with 32KB of RAM. How was it supposed to work? by blitting ahead of the beam with the Copper to avoid double buffering? was ...
Valentino Miazzo's user avatar
11 votes
3 answers
802 views

TMS9918 - why have separate data-in and data-out?

Usually 8bit video chips interface with DRAM using: an address bus for rows and columns, a bidirectional data bus in the case of 1bit DRAM data-in and data-out pins are shorted on the same data line....
Valentino Miazzo's user avatar
5 votes
1 answer
383 views

Why does the VIC-20 have its cartridge area at a higher adress than the I/O area?

Why did the designers of the Commodore VIC-20 chose to put the main cartridge ROM area at $A000, beyond the character ROM area at $8000 and the I/O area at $9000? Flipping the two around, with the ROM ...
TeaRex's user avatar
  • 703
25 votes
1 answer
3k views

Why does the Commodore 64 have 4K of non-banked RAM at $C000?

I wonder why the Commodore 64 memory map was created as it was. Naively, it seems to be that it would have been more logical to put I/O and the character ROM at $B000 to $BFFF, have the ROMs in a ...
TeaRex's user avatar
  • 703
13 votes
2 answers
718 views

Why does the FRE() function in CBM BASIC v2 return negative values?

On Commodore machines featuring CBM BASIC v2, the FRE() function to query the amount of memory available to BASIC returns a negative number when the result exceeds 32767 bytes: This quirk does not ...
Psychonaut's user avatar
  • 7,023
28 votes
5 answers
3k views

Why does the FAT file system have separate ‘hidden’ and ‘system’ attributes?

File systems used by DOS and Windows have used file attribute bits as a relatively prominent feature. The first of them, FAT, exposes four attributes to the user: read-only, archive, hidden and ...
user3840170's user avatar
  • 21.6k
36 votes
8 answers
7k views

Did they forget to add the physical layout to the USB keyboard standard?

USB keyboards must have been one of the first devices that could be connected to a USB port. When you are from the US it's possible that you have never faced this problem. But in all other parts of ...
zomega's user avatar
  • 4,670
22 votes
8 answers
6k views

Why were nested functions excluded from B and C?

I'm learning C and was curious as to why the language does not allow nested functions. From what I've read, the lack of nested functions seems to have been a simplification that was inherited from its ...
user51462's user avatar
  • 321
17 votes
2 answers
3k views

Why was there a need for separate I/O address space in addition to a memory address space already?

I was reading through PCI and PCIe configuration access mechanism in Chapter 3 (page 96) of PCIe System Architecture (Mindshare series). As a solution to prevent locking (in case of multiple threads) ...
analogkp's user avatar
  • 173
18 votes
5 answers
5k views

Why did old consoles have special RAM dedicated for a specific task?

Even in the PlayStation/Saturn era, they had like little RAM chips which were dedicated to just "sound", or "video", or "general". Since they still needed to have the RAM ...
Supernintendo Chalmers's user avatar
26 votes
6 answers
4k views

Why didn’t the 1980s micros use MC68010?

These are all legendary 16/32-bit machines that were introduced in 1984 or later that are running the 68000: Apple Macintosh Atari ST Commodore Amiga Sharp X68000 But the 68010 was already available,...
Jacob Krall's user avatar
  • 2,230
6 votes
1 answer
591 views

Why did the 8085 multiplex data with the low address byte?

Intel’s 8085 used bus multiplexing to stuff more functionality into 40 pins than would otherwise be possible. One of those pins, ALE, signals when the AD0…7 pins are outputting the low byte of the ...
Jacob Krall's user avatar
  • 2,230
24 votes
1 answer
2k views

Why was PETSCII based on an obsolete version of ASCII?

PETSCII (sometimes PETASCII) is the character set developed by Commodore for use in its microcomputers. The first of these, the PET, started to be developed in early 1976. Why, then, did Commodore ...
Psychonaut's user avatar
  • 7,023
19 votes
7 answers
6k views

Why does the x86 not have an instruction to obtain its instruction pointer?

This has always confused me. Why can you not directly obtain the IP, and instead have to go through some odd assembly hoops such as calling a function whose only purpose is to push its own return ...
Michael Stachowsky's user avatar
33 votes
2 answers
3k views

When and why was the question mark chosen to abbreviate PRINT?

In many dialects of BASIC, the PRINT statement can be abbreviated with a single question mark when entering programs or direct-mode commands. So instead of typing PRINT "HELLO, WORLD" you ...
Psychonaut's user avatar
  • 7,023
9 votes
1 answer
504 views

What is the purpose of the 2x4-bit split of the PCH incrementer?

On this detailed 6502 block diagram that can be found all over the net, the increment logic for the high byte of the program counter is split into two 4-bit parts, with a named PCHC line for the carry ...
Cactus's user avatar
  • 2,642
28 votes
3 answers
4k views

The two types of Return keys on keyboard layouts

Why have these two types of Return keys persisted to this day? A quick look at different keyboards from different keyboard manufacturers from today shows the Shift-style Return seems to have more ...
raspi's user avatar
  • 383
8 votes
7 answers
2k views

Why are symmetric bi-directional communication port cables not always crossover cables?

There are a number of bi-directional communication port standards in which cables are used to connect two identical ports, and usually those connect each pin of one port to the same pin of the other ...
user3840170's user avatar
  • 21.6k
25 votes
5 answers
3k views

Why did the stock Amigas not have a battery for keeping the time/date?

The Amiga computers were advanced machines meant to do all sorts of things, including file management. They had a GUI OS (Workbench) and everything right from the very start. They were not some games-...
Superfrog's user avatar
  • 251
21 votes
4 answers
8k views

Why are the Nintendo 64 memory cards' batteries *soldered* on?

After recently learning that it has a battery inside of it, I unscrewed my Controller Pak (N64 memory card) to put in a new battery. The old one says "98" on it, referring to 1998. So it's ...
user23842's user avatar
  • 211
15 votes
2 answers
3k views

Why are the magnetic floppy disk drives (FDD) heads not frictionless?

After reading this answer to the question How long can a floppy disk spin before wearing out? ... one could see thru the floppy... Not just badly worn, but the magnetic coating was outright polished ...
Bob Ortiz's user avatar
  • 1,662
10 votes
2 answers
2k views

How did the 6502 designers intend for the indirect addressing modes to be used?

The 6502 has three indirect addressing modes: Indirect, Indexed Indirect (Indirect,X) and Indirect Indexed (Indirect,Y). Indirect is only used on the JMP instruction, no other. Why was this mode ...
nexus_2006's user avatar
  • 1,055
34 votes
1 answer
12k views

Why did the NES not allow rotated sprites?

I'm taking a look at the chapter on sprites from a NES programming guide at famicom.party. There is a little table which describes what the different sprite attribute flags do: Bit # Purpose 7 Flips ...
Jojo's user avatar
  • 547
6 votes
3 answers
2k views

What was the reason that the original Western NES console had a "cartridge bed" that had to be pushed down to play?

In Japan, they had the Famicom. You put in the cartridges on the top, just like with the later SNES and other consoles. But for Europe and the USA (and the entire "West"), the "NES"...
Madix's user avatar
  • 87
38 votes
6 answers
7k views

Why couldn't early C compilers handle variable declarations between statements?

In modern C, you may place variable declarations between statements: do_something(); int x; x = something_else(); However, older C compilers required that variables are declared before all statements:...
DrSheldon's user avatar
  • 15.8k
9 votes
2 answers
2k views

Why did the BIOS load the MBR at 0x7c00?

The IVT is at 0x0000-0x03ff while the BDA is at 0x0400-0x04ff but boot sectors are loaded at 0x7c00. What was at 0x0500-0x7bff that caused this convention? I'm also curious why some MBRs relocate ...
Anthony's user avatar
  • 455
26 votes
7 answers
5k views

Why do variable names in BASIC need type suffixes?

The BASIC I'm most familiar with is Atari BASIC since I had an Atari 800 way back when. The Atari BASIC Source Book includes details about how Atari BASIC maintains variables. There is a Variable Name ...
Willis Blackburn's user avatar
25 votes
2 answers
4k views

Was leaving all xxxxxx11 opcodes unused on the 6502 a deliberate design choice?

The 6502, like many 8-bit processors, has a somewhat arcane opcode-mode restrictions. On most such processors, the restriction is a clear result of trying to pack a lot of instructions into a limited ...
supercat's user avatar
  • 34.7k
16 votes
3 answers
970 views

Why did instruction sets since the late 1970s seemingly stop including an "execute" instruction?

Many mainframe instruction set architectures (ISAs) in the 1960s included an Execute instruction, which would treat data as an instruction. I haven't found an architecture designed after 1976 which ...
Stavros Macrakis's user avatar
5 votes
1 answer
511 views

Why does the ‘Get Next Selector Increment Value’ DPMI call exist?

In DPMI, interrupt 0x31 services 0x0000 and 0x0100 are capable of simultaneously allocating multiple protected-mode selectors in a single call. When that happens, both services return only the first ...
user3840170's user avatar
  • 21.6k
4 votes
1 answer
435 views

Why did the Speak & Spell have an alphabetic keyboard?

Many of us remember the original Speak & Spell from 1978: Image source: Wikipedia One of the interesting things about this early handheld educational game console is the keyboard. It's not normal!...
Robert Columbia's user avatar
3 votes
1 answer
880 views

Why were procedure parameter specifications optional in the ALGOL 60 Revised Report?

In Algol 60 procedure declarations, the 'specification' part was optional for by-name parameters. The specification is what gives (loosely speaking) the type of parameter - whether it's real, integer,...
another-dave's user avatar
  • 33.5k
16 votes
4 answers
4k views

Why does Pascal have numeric labels?

Pascal was intended, in part, to be a simple language to implement. Some of the design decisions reflecting this are Declarations/definitions must be given in a strict order (labels, constants, types,...
texdr.aft's user avatar
  • 3,465
5 votes
0 answers
267 views

What was the first device to "beep" in lieu of tactile feedback to button presses?

I'm splitting this question off of When was beeping invented, in a user interface sense? because I think it's more answerable on its own and I suspect likely to still be computing-related. At some ...
natevw's user avatar
  • 2,917
6 votes
2 answers
769 views

When was beeping invented, in a user interface sense?

UPDATE: thanks all, lots of good discussion but I think this question is a bit too vague to be answerable. I'm casting my own close vote against it and will re-ask a more specific one. Specifically I ...
natevw's user avatar
  • 2,917
60 votes
4 answers
12k views

Why were single quotes ('…') chosen for characters, and double quotes ("…") for strings?

In C, '' is used to denote a character, while "" is used to denote a string. Why was this syntax chosen? I tried to research this using Wikipedia’s Timeline of Programming Languages along ...
hb20007's user avatar
  • 653
108 votes
7 answers
27k views

Why was `!` chosen for negation?

It seems that the use of the exclamation mark ! to denote negation started with the C programming language (as far as I can tell from my Google research). Nowhere though is mentioned who and why chose ...
blues's user avatar
  • 1,089
29 votes
5 answers
8k views

Why did old IBM-PC-compatible computers only have 16 colors available?

In the MS-DOS Editor, the only choices for colors were a collection of 16 colors: That's 16 colors: Black Blue Green Cyan Red Magenta Brown White Gray Bright Blue Bright Green Bright Cyan Bright Red ...
no ai please's user avatar
  • 1,123
9 votes
2 answers
1k views

What technical reasons prevented the Win9x Virtual Machine Monitor from running multiple threads simultaneously?

Were there any inherent limitations in the way the VMM for Win9x was designed that prevented it from being able to run threads simultaneously if the underlying hardware had multiple cores/processors? ...
user1628056's user avatar
17 votes
2 answers
3k views

Why does the 6502 JSR instruction only increment the return address by 2 bytes?

Currently messing with 6502 assembly on a C64, and I don't understand why the JSR instruction is so weird. According to the instruction table, JSR is a 3-byte instruction and only operates in absolute ...
Jeroen Jacobs's user avatar
-4 votes
3 answers
378 views

What was the last personal computer to have the chips neatly arranged in rows and columns?

Once upon a time, the chips on the circuit boards of personal computers1 were arranged in a tidy grid pattern. Observe the board of the Apple ][+: Or the Commodore 128: Sadly, the zen of neat rows ...
DrSheldon's user avatar
  • 15.8k
33 votes
3 answers
4k views

What aspect of portable floating point did Java back down on?

Java was released under the slogan 'write once, run anywhere'; while its adoption was probably more about 'now we have a language that provides garbage collection in a familiar workflow and with a ...
rwallace's user avatar
  • 58.4k
22 votes
1 answer
2k views

Why do Amiga Libraries have negative entry points?

As described in these answers, the jump table offsets to functions contained in an AmigaOS library are always negative values. The reason for this is not intuitive to me, but I suspect Carl Sassenrath ...
Brian H's user avatar
  • 60.1k
8 votes
2 answers
292 views

Why was the VT05 resolution 72×20?

According to https://en.wikipedia.org/wiki/VT05 the VT05 presented the user with an upper-case only ASCII character display of 20 rows by 72 columns. At first glance this seems a reasonably natural ...
rwallace's user avatar
  • 58.4k
31 votes
3 answers
4k views

Why is the ‘auto’ storage class specifier included in C?

The auto keyword in C seems quite redundant: wherever it makes sense to define a variable with automatic storage duration, it is already the default, so there is no reason to use the keyword. The ...
user3840170's user avatar
  • 21.6k
26 votes
5 answers
11k views

Twist in floppy disk cable - hack or intended design?

There are many documents (e.g. this) describing the twist on two-drive floppy disk cable on IBM PC compatibles. While this is not the most proud example of clean hardware design, how much of this was ...
tuomas's user avatar
  • 2,753
23 votes
5 answers
6k views

Why did mainframes have big conspicuous power-off buttons?

Some fascinating stories in this discussion thread. It starts with discussion about computers overheating, but about halfway through the thread, it switches to discussion of mainframe installations in ...
rwallace's user avatar
  • 58.4k
9 votes
3 answers
1k views

Why does -z and -n exist in most shells and /bin/test?

The test command on Unix-like systems provides two special syntax forms for checking whether a string is empty or not: test -z "$foo" # the length of $foo is zero test -n "$foo" # ...
Evan Carroll's user avatar
  • 3,388