Die Grenze ergab sich damals aus den maximal 1 MiB, die der 8088 verwalten konnte, und dem Bedarf an systeminternen Speicher.
8088/8086: Segment Register + Basisregister, beide 16 bit und addiert, dabei das Segment Register um 4 bit nach links verschoben. Maximale Adresse daher z.B. für Programmcode: CS=0xFFFF, IP=0x000F
Code:
CS: FFFF -> FFFF0
FFFF0 + (CS)
000F (IP)
-------------
Adr: FFFFF = dezimal 1.048.575 Bytes
Wird IP größer, gibt es einen Wrap, d.h. CS=0xFFFF und IP=0x1F gibt wg. des Overflows 0x0000F. Das gab dann auch später Probleme, wenn Programme diesen Wrap ausgenutzt haben, um z.B. die Interrupt-Tabelle im unteren RAM-Bereich anzusprechen.
Der 8088 hatte auch nach außen nur 20 Adress-Leitungen und konnte damit eben nur physikalische 1.048.575, also 1 MB Speicher (RAM oder ROM) ansprechen.
Eins minus das andere ließ 640k freien Adressraum für Anwendungen und ohne Adressvirtualisierung hatte das Betriebssystem auch keine Wahlfreiheit, wo im Adressraum der reservierte Block liegt; er kam ganz nach oben.
Der Original IBM-PC hatte einfach nur maximal 640K an RAM-Chips drin (wir reden über zwei- bis drei stellige Kilobits pro Chip). Im oberen Adressbereich lag dann das BIOS-ROM, der eigentliche Startcode musste ab 0xFFFF0 beginnen (beim Power On: Segment Register CS = 0xFFFF, Instruction Pointer = 0x0000, mit der 4bit versetzten Addition: 0xFFFF0, dort war dann ein Sprung in eine der Adressen weiter unten, wo das eigentliche BIOS begann (ich glaube ab 0xF0000).
Auch dass das VIdeo-RAM der CGA (und später EGA + VGA) zwischen RAM und BIOS lag (ich glaube, 0xA0000, das erklärt auch die 640K "Normal-RAM"), war wohl eine Design-Entscheidung, die aber eigentlich wegen des 8088 Segment Register Modells eh wurscht ist, das Limit waren einfach die 20 Adressleitungen.
Die "Kompatiblen" hatten später größere RAM-Chips drin und damit das volle Megabyte, allerdings wurde das BIOS einfach über das RAM gemappt. Es gab dann auch NEAT-Chips, die man programmieren konnte und damit z.B. einen Teil der RAM-Chips an bestimmte, unbenutzte Stellen im BIOS mappen. Da liesen sich dann per UMB (Upper Memory Blocks), die ab einer bestimmten Version des EMM386.SYS zur Verfügung standen, TSR-Treiber reinladen und damit den Bereich <640 KB entlasten.
Es gab in den 4-6 Jahren vor dem IBM-PC keine quantitative Entwicklung und mehr als 6 Jahre davor gab es Einzelplatzcomputer
Ähm, PET, Commodore, Amiga, ich selbst hatte einen 8080 8bit DAI Computer (wow,
den gibts sogar noch im Wikipedia), den ich am "Fernseher" per Antennenkabel angeschlossen hatte. Im Gegensatz zu heutigen Gurken: einschalten...2 Sekunden warten...geht. Und gespeichert wurde per Kassettenrekorder, weil die damaligen Floppy-Laufwerke teurer waren als der Computer.
Ich denke, IBM konnte einfach den PC in die Firmen bringen (hatte selbst einen "PC-XT" bekommen). Da sitzt das Geld, Firmen kaufen so was, wenn es Vorteile bringt. Und wenn man im Job den Vorteil sieht, will man so ein Teil auch zuhause haben...dann kamen die bezahlbaren Kompatiblen.
Allerdings hätte IBM die Motorola 68000 CPU nehmen sollen, die hat ein stimmigeres Register- und Opcode-Modell und hätte auch schon 24bit Adressleitungen gehabt. Wäre m.E. einfacher zu erweitern gewesen.
Übrigens: auch in der real existierenden DOSBox kann spielen Spaß machen, ich selbst baller ab und an gern mit der einst gekauften
DOS Vollversion von Raptor rum. Oder kennt jemand noch die
Space Quest Reihe mit Roger Wilco ?
Gut, dass ich meine alten Disketten alle auf CD/DVD-ROM kopiert hab, als die Mainboards keine Floppy-Anschlüsse mehr hatten
