CodeGuru Home VC++ / MFC / C++ .NET / C# Visual Basic VB Forums Developer.com
Results 1 to 2 of 2

Hybrid View

  1. #1
    Join Date
    Nov 2008
    Posts
    1

    Exclamation Why int 19h point to 7c00h?

    Does anyone know why int 19h routine point to address 7c00h?is there any cause?
    how to calculate 7c00h?

  2. #2
    Join Date
    Dec 2008
    Posts
    10

    Re: Why int 19h point to 7c00h?

    Hi jawhar!
    INT 19 - Bootstrap Loader
    DL = physical drive where boot sector is located
    no output
    - track 0, sector 1 is loaded into address 0:7C00
    and control is transferred there
    - not a preferred method for rebooting by applications. A
    better method is to set the word at location 40:72 to 1234h
    and jump to location FFFF:0 in ROM
    - memory is not cleared when rebooted through this interrupt
    addtion:
    Warm Boot / System Bootstrap
    - Ctrl-Alt-Delete results in a warm boot but only after part of the
    POST sequence has executed. See COLD BOOT for more information.
    - ROM BIOS bootstrap loader (INT 19) attempts Boot Record load
    - Drive A: is searched for a Boot Record, if no Boot Record is found
    the active partition of the first drive is searched. If found, it
    is loaded into memory at 7C00:0 and given control. If still not
    found Cassette BASIC is loaded (IBM only) or a prompt for a system
    diskette is displayed.
    - the boot record code checks that IBMBIO.COM and IBMDOS.COM (IO.SYS
    and DOS.SYS for MSDOS) exist and are the first two files. These
    files must be contiguous and the first two directory entries.
    - boot record loads IBMBIO.COM
    - IBMBIO.COM initialization code loads IBMDOS.COM
    / determines equipment status
    / resets disk system
    / initializes attached devices
    / loads installable device drivers
    / sets DOS relative interrupt vectors
    / relocates IBMDOS.COM downward and begins its execution
    - IBMDOS.COM initializes its working tables
    / initializes DOS interrupt vectors for interrupts 20h through 27h
    / builds PSP for COMMAND.COM at lowest possible segment
    / interrupt vectors for INTs 0Fh through 3Fh are initialized
    (for DOS 3.1+)
    / loads COMMAND.COM (or specified command interpreter) using the
    EXEC call.
    - AUTOEXEC.BAT is then loaded and executed
    Boot Sector (since DOS 2.0)
    Offset Size Description

    00 3bytes jump to executable code
    03 8bytes OEM name and version
    0B word bytes per sector
    0D byte sectors per cluster (allocation unit size)
    0E word number of reserved sectors (starting at 0)
    10 byte number of FAT's on disk
    11 word number of root directory entries (directory size)
    13 word number of total sectors (0 if partition > 32Mb)
    15 byte media descriptor byte (see MEDIA DESCRIPTOR)
    16 word sectors per FAT
    18 word sectors per track (DOS 3.0+)
    1A word number of heads (DOS 3.0+)
    1C word number of hidden sectors (DOS 3.0+)
    20 dword (DOS 4+) number of sectors if offset 13 was 0
    24 byte (DOS 4+) physical drive number
    25 byte (DOS 4+) reserved
    26 byte (DOS 4+) signature byte (29h)
    27 dword (DOS 4+) volume serial number
    2B 11bytes (DOS 4+) volume label
    36 8bytes (DOS 4+) reserved


    - implementation format not guaranteed in all OEM DOS releases
    - BIOS expects a boot sector of 512 bytes
    - DOS 3.2 began reading BIOS Parameter Block (BPB) information from
    the boot sector, previous versions used only the media byte in FAT
    - DOS 4.x added offsets 20-3Dh and offset 20h determines the number
    of sectors if offset 13h is zero
    - hard disks have a master boot record and partition boot records;
    the master boot record and Disk Partition Table (DPT) share the
    same sector
    POST - Cold Boot / Power On Self Test Activities
    - power supply starts Clock Generator (8284) with Power
    Good signal on BUS
    - CPU reset line is pulsed resetting CPU
    - DS, ES, and SS are cleared to zero

    Cold and Warm Boot both execute the following sequence
    - CS:IP are set to FFFF:0000 (address of ROM POST code)
    - jump to CS:IP (execute POST, Power On Self test)
    - interrupts are disabled
    - CPU flags are set, read/write/read test of CPU registers
    - checksum test of ROM BIOS
    - Initialize DMA (verify/init 8237 timer, begin DMA RAM refresh)
    - save reset flag then read/write test the first 32K of memory
    - Initialize the Programmable Interrupt Controller (8259)
    and set 8 major BIOS interrupt vectors (interrupts 10h-17h)
    - determine and set configuration information
    - initialize/test CRT controller & test video memory (unless 1234h
    found in reset word)
    - test 8259 Programmable Interrupt Controller
    - test Programmable Interrupt Timer (8253)
    - reset/enable keyboard, verify scan code (AAh), clear keyboard,
    check for stuck keys, setup interrupt vector lookup table
    - hardware interrupt vectors are set
    - test for expansion box, test additional RAM
    - read/write memory above 32K (unless 1234h found in reset word)
    - addresses C800:0 through F400:0 are scanned in 2Kb blocks in
    search of valid ROM. If found, a far call to byte 3 of the ROM
    is executed.
    - test ROM cassette BASIC (checksum test)
    - test for installed diskette drives & FDC recalibration & seek
    - test printer and RS-232 ports. store printer port addresses
    at 400h and RS-232 port addresses at 408h. store printer
    time-out values at 478h and Serial time-out values at 47Ch.
    - NMI interrupts are enabled
    - perform INT 19 (bootstrap loader), pass control to boot record
    or cassette BASIC if no bootable disk found
    - WARM BOOT procedure is now executed

Posting Permissions

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





Click Here to Expand Forum to Full Width

Featured