Forums before death by AOL, social media and spammers... "We can't have nice things"
|    alt.os.development    |    Operating system development chatter    |    4,255 messages    |
[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]
|    Message 3,320 of 4,255    |
|    Joe Monk to All    |
|    Re: segmentation    |
|    13 Oct 22 05:25:00    |
      From: joemonk64@gmail.com              > You think the entire MSDOS has been written       > with no assumptions about 4 bit shifts?       >       > You could be right. I've never looked at the       > MSDOS source code except for one bit       > someone pointed me to so that I could see       > the word Xenix.       >              Youre forgetting something. In the original IBM PC, the memory size was set by       DIP switches. So, to get the installed memory size, these switches were mapped       to port 60 and 62. This was accessed via int 12h.              --- INT 12 ---------------------------------              MEMORY_SIZE_DETERMINE              THIS ROUTINE DETERMINES THE AMOUNT OF MEMORY IN THE SYSTEM              AS REPRESENTED BY THE SWITCHES ON THE PLANAR. NOTE THAT              THE SYSTEM MAY NOT BE ABLE TO USE I/O MEMORY UNLESS THERE              IS A FULL COMPLEMENT OF 64K BYTES ON THE PLANAR.              INPUT              NO REGISTERS              THE MEMORY_SIZE VARIABLE IS SET DURING POWER ON DIAGNOSTICS              ACCORDING TO THE FOLLOWING HARDWARE ASSUMPTIONS:              PORT 60 BITS 3,2 = 00 - 16K BASE RAM              01 - 32K BASE RAM              10 - 48K BASE RAM              11 - 64K BASE RAM              PORT 62 BITS 3-0 INDICATE AMOUNT OF I/O RAM IN 32K INCREMENTS              E.G., 0000 - NO RAM IN I/O CHANNEL              0010 - 64K RAM IN I/O CHANNEL, ETC.              OUTPUT              (AX) = NUMBER OF CONTIGUOUS 1K BLOCKS OF MEMORY              --------------------------------------------               ASSUME CS:CODE,DS:DATA              MEMORY_SIZE_DETERMINE PROC FAR               STI ; INTERRUPTS BACK ON               PUSH DS ; SAVE SEGMENT               MOV AX,DATA ; ESTABLISH ADDRESSING               MOV DS,AX               MOV AX,MEMORY_SIZE ; GET VALUE               POP DS ; RECOVER SEGMENT               IRET ; RETURN TO CALLER              MEMORY_SIZE_DETERMINE ENDP              --- SoupGate-Win32 v1.05        * Origin: you cannot sedate... all the things you hate (1:229/2)    |
[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]
(c) 1994, bbs@darkrealms.ca