Friday, 2024-05-17, 12:46 PM

Warezy | Wares Easy | Software Portals

Main | Registration | Login
Welcome Guest
RSS
Login form
News calendar
«  January 2009  »
SuMoTuWeThFrSa
    123
45678910
11121314151617
18192021222324
25262728293031
Search
Site friends
Statistics
Warezy Sponsors
Web Translate
 

Blog Advertising - Advertise on blogs with SponsoredReviews.com

Buy and sell Text Links
News topics
Programming [8]
Coding, Source-code, Tutorial, Problem Solving and more
Hardware [5]
Hardware Info, Troubleshooting, Price, Performance and more
History [4]
More Abou History... you must read here
Computer Tips [1]
Computer Tipz
Internet [1]
Internet news, tools, media, software and problem solving
Windows [8]
Windows Tutorials
Mobile [1]
Mobile trick, tips, tutorial, troubleshooting, hacking
News [1]
News every day
Bloging [0]
Newest [0]
for every thing new posting
Games [0]
Games sources
Business [1]
Business
Hobby [0]
Journey [0]
Making Money [0]
Making money online or offline
Troubleshooting [0]
Warezy Box!
Warezy stats




Computer Blogs - BlogCatalog Blog Directory
DigNow.org
Our poll
Rate my site
Total of answers: 4
Main » 2009 » January » 12 » The History of DOS - Part 2
The History of DOS - Part 2
9:47 AM
The Memory Map:

About a decade ago, standard memory configurations were 256KB, 512KB or 640KB on computers. This memory was often looked at in segments of 65536 bytes or 64KB. The user is allocated 10 segments, or 640KB and the system is allocated the remaining 6, or 384KB. The original designers of the 8088, decided that no one would ever possibly need more than 1MB of memory (yeah, right!). So they built the machine so that it couldn't access above 1 MB. To access the whole MEG, 20 bits are needed. This allows a total of 220 combinations of bits, that is 1048576 (= 1024*1024 or 1 MB) different numbers, each of which represents an address of a single byte of data. The problem was that the registers only had 16 bits, and if they used two registers, that would be 32 bits, which was way too much (they thought). So they came up with a rather brilliant (not!) way to do their addressing - they would use two registers. They decided that they would not be 32bits, but the two registers would create 20 bit addressing. And thus Segments and Offsets were created.

**Note: it helps to understand assembly code.

OFFSET = SEGMENT*16
SEGMENT = OFFSET/16 - note that the lower 4 bits are lost
SEGMENT * 16 |0010010000010000----| - range (0 to 65535)*16

+

OFFSET |----0100100000100010| - range (0 to 65535)

=

20 bit address |00101000100100100010| - range 0 to 1048575 (1 MB)

\----- DS -----/

\----- SI -----/

\- Overlap-/

This shows how DS : SI is used to construct a 20 bit address.

Segment registers are: CS, DS, ES, SS. On the 386+ there are also FS & GS.

Offset registers are: BX, DI, SI, BP, SP, IP. In 386+ protected mode, any general register (not a segment register) can be used as an offset register (except IP, which isn't accessable).

CS : IP Points to the currently executing code.
SS : SP Points to the current stack position.

If you'll notice, the value in the segment register is multiplied by 16 (or shifted left 4 bits) and then added to the offest register. Together they create a 20 bit address. Thus, there are many combinations of the segment and offset registers that will produce the same address. The standard notation for a SEGment/OFFset pair is:

SEGMENT : OFFSET or A000 : 0000 (in hexadecimal)

Where SEGMENT = 0A000h and OFFSET = 00000h.
(This happens to be the address of the upper left pixel on a 320x200x256 screen.)
You may be wondering what would happen if you were to have a segment value of 0FFFFh and an offset value of 0FFFFh.

Notice how <0FFFFh * 16 (or 0FFFF0h ) + 0FFFFh = 1,114,095> is larger than 1,048,576 (or 1 MEG).

This means that more than 1 MB of memory is actually accessible! Well, to actually use that extra bit of memory, you would have to enable something called the A20 line, which just enables the 21st bit for addressing. This little extra bit of memory is usually called "HIGH MEMORY" and is used when you load something into high memory or say DOS = HIGH in your AUTOEXEC.BAT file or DEVICEHIGH=MOUSE.SYS in your CONFIG.SYS file (HIMEM.SYS and EMS386.EXE actually manage that).

Here is an illustration of a typical memory map:

The IBM PC handles its address space in 64k segments, divided into
16k fractions and then further as necessary:

*********************************************************************

*start *start*end * *

*addr. *addr.*addr.* usage *

*(dec) * (hex) * *

*********************************************************************

* *640k RAM Area* *

*********************************************************************

* 0k * * start of RAM, first K is interrupt vector table *

* 16k *0000-03FF* PC-0 system board RAM ends *

* 32k *0400-07FF* *

* 48k *0800-0BFF* *

*********************************************************************

* 64k *1000-13FF* PC-1 system board RAM ends *

* 80k *1400-17FF* *

* 96k *1800-1BFF* *

* 112k *1C00-1FFF* *

*********************************************************************

* 128k *2000-23FF* *

* 144k *2400-27FF* *

* 160k *2800-2BFF* *

* 176k *2C00-2FFF* *

*********************************************************************

* 192k *3000-33FF* *

* 208k *3400-37FF* *

* 224k *3800-3BFF* *

* 240k *3C00-3FFF* *

*********************************************************************

* 256k *4000-43FF* PC-2 system board RAM ends *

* 272k *4400-47FF* *

* 288k *4800-4BFF* *

* 304k *4C00-4FFF* *

*********************************************************************

* 320k *5000-53FF* *

* 336k *5400-57FF* *

* 352k *5800-5BFF* *

* 368k *5C00-5FFF* *

*********************************************************************

* 384k *6000-63FF* *

* 400k *6400-67FF* *

* 416k *6800-6BFF* *

* 432k *6C00-6FFF* *







*********************************************************************

* 448k *7000-73FF* *

* 464k *7400-77FF* *

* 480k *7800-7BFF* *

* 496k *7C00-7FFF* *

*********************************************************************

* 512k *8000-83FF* *

* 528k *8400-87FF* *

* 544k *8800-8BFF* the original IBM PC-1 BIOS limited memory to *

* 560k *8C00-8FFF* 544k *

*********************************************************************

* 576k *9000-93FF* *

* 592k *9400-97FF* *

* 609k *9800-9BFF* *

* 624k *9C00-9FFF* to 640k (top of RAM address space) *

* 639k * * some RLL and SCSI hard disk adapters, some four *

* * * floppy controller cards, some AMI and PS/2 BIOS, *

* * * and assorted other cards sometimes try to use the*

* * * last K for storing temporary data. This can *

* * * cause trouble with programs which assume they *

* * * have a full 640k, and will prevent backfilling *

* * * memory with some memory managers. Beware! *

*********************************************************************

*A0000 ***** 64k ***** EGA/VGA starting address *

*A0000 ***** 64k ***** Toshiba 1000 DOS ROM (MS-DOS 2.11V) *

*********************************************************************

* 640k *A0000-A95B0* MCGA 320x200 256 color video buffer *

* * -AF8C0* MCGA 640x480 2 color video buffer *

* * -A3FFF* *

* 656k *A4000-A7FFF* *

* 672k *A8000-ABFFF*this 64k segment may be used for contiguous DOS *

* 688k *AC000-AFFFF*RAM with appropriate hardware and software *

*********************************************************************

*B0000 ***** 64k ***** mono and CGA address *

*********************************************************************

* 704k *B0000-B3FFF*4k mono display | The PCjr and early Tandy 1000*

* 720k *B4000-B7FFF* | BIOS revector direct write to*

* 736k *B8000-BBFFF*16k CGA | the B8 area to the Video Gate*

* 756k *BC000-BFFFF* | Array and reserved system RAM*

*********************************************************************

*C0000 ***** 64k *************** expansion ROM *

*********************************************************************

* 768k *C0000-C3FFF*16k EGA BIOS C000:001E EGA BIOS signature *

* * * (the letters 'IBM') *

* *C0000-C7FFF*32k VGA BIOS extension (typical) *

* 784k *C4000-C5FFF* *

* *C6000-C63FF*256 bytes IBM PGC video communications area *

* *C6400-C7FFF* *

* 800k *C8000-CBFFF*16k hard disk controller BIOS, drive 0 default *

* *CA000 * some 2nd floppy (HD) controller BIOSes *

* 816k *CC000-CDFFF* 8k IBM PC Network NETBIOS *

* *CE000-CFFFF* *

*********************************************************************

*D0000 ***** 64k ***** expansion ROM *

*********************************************************************

* 832k *D0000-D7FFF*32k IBM Cluster Adapter | PCjr first ROM cart. *

* * DA000*voice communications | address area. *

* 848k *D4000-D7FFF* | Common EMS board *

* 864k *D8000-DBFFF* | paging area. *

* *D8000-DBFFF* IBM Token Ring default Share RAM address *

* *DC000 * IBM Token Ring default BIOS/MMIO address *

* 880k *DC000-DFFFF* | *

* *DE000 *4k TI Pro default video buffer *

*********************************************************************

*E0000 ***** 64k ***** expansion ROM *

* wired to ROM sockets in the original IBM AT *

* used by ABIOS extensions on some PS/2 models *

*********************************************************************

* 896k *E0000-E3FFF* | PCjr second ROM cart.*

* 912k *E4000-E7FFF* | address area *

* 928k *E8000-EBFFF* | *

* 944k *EC000-EFFFF* | spare ROM sockets on *

* * * | IBM AT (reserved in *

* * * | hardware) *

*********************************************************************

*F0000 ***** 64k ***** system *

*********************************************************************

* 960k *F0000-F3FFF*reserved by IBM | cartridge address *

* 976k *F4000- * | area (PCjr cartridge *

* *F6000 *ROM BASIC Begins | BASIC) *

* 992k *F8000-FB000* | *

* 1008k*FC000-FFFFF*ROM BASIC and original | *

* * *BIOS (Compatibility BIOS | *

* * *in PS/2) | *

* 1024k* FFFFF*end of memory (1024k) for 8088 machines *

*********************************************************************

* 384k *100000-15FFFF* 80286/AT extended memory area, 1Mb mbd. *

* 15Mb *100000-FFFFFF* 80286/AT extended memory address space *

* 15Mb *160000-FDFFFF* Micro Channel RAM expansion (15Mb ext. mem) *

* 128k *FE0000-FFFFFF* system board ROM (PS/2 Advanced BIOS) *

*********************************************************************

* 64k *C0000000-C000FFFF* Weitek "Abacus" math coprocessor *

* * * memory-mapped I/O *

+*******************************************************************+
Category: History | Views: 731 | Added by: Maintate | Rating: 0.0/0 |
Total comments: 0
Name *:
Email *:
Code *:
Copyright MyCorp © 2024
Create a free website with uCoz