home bbs files messages ]

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