Loading from Hard Drive to Memory
Results 1 to 3 of 3

Thread: Loading from Hard Drive to Memory

  1. #1
    Senior Member
    Join Date
    Jan 2004

    Loading from Hard Drive to Memory

    I understand how the processor fetches and executes instructions from memory cell by cell, but what i don't get is how do these instructions get loaded from the hard drive and into memory when they are needed. How is the hard drive contacted at the assembly language level, are there special instructios to access it or something ??

    Any help would be great.


  2. #2
    Join Date
    Apr 2004
    It's all a matter of IRQ's, I/O addresses, and DMA's... I suggest you do a google search on these topics and read about them.
    I am the uber duck!!1
    Proxy Tools

  3. #3
    AO Curmudgeon rcgreen's Avatar
    Join Date
    Nov 2001
    Category: BIOS
    	AH = 02h
    	AL = number of sectors to read (must be nonzero)
    	CH = low eight bits of cylinder number
    	CL = sector number 1-63 (bits 0-5)
    	     high two bits of cylinder (bits 6-7, hard disk only)
    	DH = head number
    	DL = drive number (bit 7 set for hard disk)
    	ES:BX -> data buffer
    Return: CF set on error
    	    if AH = 11h (corrected ECC error), AL = burst length
    	CF clear if successful
    	AH = status (see #00234)
    	AL = number of sectors transferred (only valid if CF set for some
    Notes:	errors on a floppy may be due to the motor failing to spin up quickly
    	  enough; the read should be retried at least three times, resetting
    	  the disk with AH=00h between attempts
    	most BIOSes support "multitrack" reads, where the value in AL
    	  exceeds the number of sectors remaining on the track, in which
    	  case any additional sectors are read beginning at sector 1 on
    	  the following head in the same cylinder; the MSDOS CONFIG.SYS command
    	  MULTITRACK (or the Novell DOS DEBLOCK=) can be used to force DOS to
    	  split disk accesses which would wrap across a track boundary into two
    	  separate calls
    	the IBM AT BIOS and many other BIOSes use only the low four bits of
    	  DH (head number) since the WD-1003 controller which is the standard
    	  AT controller (and the controller that IDE emulates) only supports
    	  16 heads
    	AWARD AT BIOS and AMI 386sx BIOS have been extended to handle more
    	  than 1024 cylinders by placing bits 10 and 11 of the cylinder number
    	  into bits 6 and 7 of DH
    	under Windows95, a volume must be locked (see INT 21/AX=440Dh/CX=084Bh)
    	  in order to perform direct accesses such as INT 13h reads and writes
    	all versions of MS-DOS (including v7 [Win95]) have a bug which prevents
    	  booting on hard disks with 256 heads, so many modern BIOSes provide
    	  mappings with at most 255 heads
    SeeAlso: AH=03h,AH=0Ah,AH=06h"V10DISK.SYS",AH=21h"PS/1",AH=42h"IBM"
    SeeAlso: INT 21/AX=440Dh/CX=084Bh,INT 4D/AH=02h

    In 16 bit real mode (like dos), you could use this stuff to get low level access
    to drives, reading and writing sectors, or even messing with the bytes between
    sectors, changing sector IDs, do a true low level format etc.
    Running a modern OS, only the disk driver (deep inside the OS) has
    actual intimate knowledge of the disk, so you can access the disk from a
    high level programming language.

    #include <stdio.h>
    #include <stdlib.h>
    void main()
    FILE *myfile;
    myfile = fopen("alive.txt","w");
    puts("Some kind of file error!");
    fprintf(myfile,"I created a file! It's alive!");
    I came in to the world with nothing. I still have most of it.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts