1 / 19

Crafting a ‘boot time’ program

Learn how to explore the CPU's startup state and write a boot loader program to study the CPU without any operating system interference. Utilize ROM-BIOS routines for memory loading and execute code from non-volatile storage mediums.

ralphowen
Download Presentation

Crafting a ‘boot time’ program

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Crafting a ‘boot time’ program How we can utilize some standard ‘real-mode’ routines that reside in the PC’s ROM-BIOS firmware

  2. Our ‘bare machine’ • If we want to do a “hands on” study of our CPU, without any operating system getting in our way, we have to begin by exploring ‘Real Mode’ (it’s the CPU’s startup state) • We will need to devise a mechanism by which our program-code can get loaded into memory (since we won’t have an OS) • This means we must write a ‘boot loader’

  3. Our ‘bare machine’ • If we want to do a “hands on” study of our CPU, without any operating system getting in our way, we have to begin by exploring ‘Real Mode’ (it’s the CPU’s startup state) • We will need to devise a mechanism by which our program-code can get loaded into memory (since we won’t have an OS) • So we utilize the ROM-BIOS ‘boot loader’

  4. What’s a ‘boot loader’ • After testing and initializing the machine’s essential hardware devices, the startup program in the ROM-BIOS firmware will execute its ‘boot loader’, to read a small amount of code and data into memory from some type of non-volatile storage medium (e.g, floppy-diskette, hard-disk, magnetic-tape, CD-ROM, etc.) and then ‘jump’ to that location in memory

  5. PC ROM-BIOS BOOT_LOCN ROM-BIOS Vendor’s Firmware No installed memory Video Display Memory VRAM 1-MB Volatile Program Memory RAM 0x00007E00 BOOT_LOCN 512 bytes 0x00007C00 IVT and BDA 8086 memory-map

  6. Some Requirements • A ‘boot loader’ has to be 512 bytes in size (because it has to fit within a disk sector) • Must begin with executable machine-code • Must end with a special ‘boot signature’ • Depending on the type of storage medium, it may need to share its limited space with certain other data-structures (such as the ‘partition table’ on a hard disk, or the Bios Parameter Block’ on a MS-DOS diskette)

  7. Writing a ‘boot-sector’ program • Not practical to use a high-level language • We need to use 8086 assembly language • We can use the Linux development tools: • The ‘vi’ editor • The ‘as’ assembler • The ‘ld’ linker • The ‘dd’ copy-and-convert utility

  8. Using ROM-BIOS functions • Our system firmware provides many basic service-functions that real mode programs can invoke (this includes ‘boot-loaders’): • Video display functions • Keyboard input functions • Disk access functions • System query functions • A machine ‘re-boot’ function

  9. ROM-BIOS documentation • The standard ROM-BIOS service-routines are described in numerous books that deal with assembly language programming for Intel-based Personal Computers • They are also documented online (e.g., see the link on our class website to Ralf Brown’s Interrupt List)

  10. A ‘typical’ calling convention • A service-function ID-number is placed in the processor’s AH register • Other registers are then loaded with the values of any parameters that are needed • Then a ‘software interrupt’ instruction is executed which transfers control to the code in the Read-Only Memory (ROM) • Often, upon return, the carry-flag is used for indicating that the function succeeded

  11. Example: Write_String function • Setup parameters in designated registers • AH = function ID-number (e.g. 0x13) • AL = cursor handling method (e.g. 0x01) • BH = display page-number (e.g., 0x00) • BL = color attributes (e.g., 0x0A) • CX = length of the character-string • DH, DL = row-number, column-number • ES:BP = string’s starting-address (seg:off) • Call BIOS via software interrupt (int-0x10)

  12. Real Mode • 8086/8088 had only one execution mode • It used “segmented” memory-addressing • Physical memory on 8086 was subdivided into overlapping “segments” of fixed-size • The length of any memory “segment” was fixed at 64KB until the processor has been switched out of its initial ‘real-mode’ and its segment-registers reprogrammed

  13. 64KB Memory-Segments • Fixed-size segments partially overlap • Segments start on paragraph boundaries • Segment-registers serve as “selectors” stack data SS DS code CS

  14. Real-Mode Address-Translation 16-bit segment-address 16-bit offset-address 0x1234 0x6789 Logical address: 0x12340 + 0x06789 ---------------- 0x18AC9 x 16 + 20-bit bus-address 0x18AC9 Physical address:

  15. ‘Real-Mode’ Memory Map ROM-BIOS Vendor’s Firmware 64+ kbytes No installed memory Video-ROM Video Display Memory VRAM 128 kbytes Top of RAM (= 0x000A0000) Extended BIOS Data 1-MB Volatile Program Memory RAM 0x00007E00 BOOT_LOCN 512 bytes 0x00007C00 0x00000500 256 bytes RBDA 0x00000400 IVT 1024 bytes 0x00000000

  16. Downloading a class demo • You can ‘download’ a program source-file from our CS 630 course-website to your own ‘present working directory’ by using the Linux file-copy command, like this: $ cp /home/web/cruse/cs630/bootdemo.s . (Here the final period-character (‘.’) is the Linux shell’s symbol for your ‘current directory’).

  17. Compiling and Installing • Compiling our ‘bootdemo.s’ using ‘as’ is a two-step operation (and requires use of a linker-script, named ‘ldscript’): $ as bootdemo.s –o bootdemo.o $ ld bootdemo.o –T ldscript –o bootdemo.b • Installing our bootdemo.b into the starting sector of a hard-disk partition is very simple: $ dd if=bootload.b of=/dev/sda4

  18. Executing our ‘bootdemo’ • You’ll need to perform a system ‘reboot’ • Our classroom machines will load GRUB (the Linux GRand Unified Boot-loader) • GRUB will display a menu of Boot Options • You can choose ‘boot from a disk-partition’

  19. In-class exercise • Can you modify our ‘bootdemo.s’ program so that it will display some information that is more useful? • For example, can you display the Vendor Identification String and the Brand String? • (Remember, you code and data must fit within a single 512-byte disk-sector) • You can use ‘fileview’ to check on space

More Related