TWiki
>
CS385fall14 Web
>
Homeworks
>
Homework2
(2014-09-03, Main.srogha2)
(raw view)
E
dit
A
ttach
---++ Homework 2: A splash screen boot sector In this homework, we use BIOS services to create a "splash screen" boot sector. This requires: * creating a "disk" that contains the boot sector and the picture to be shown, * waiting for the user to press a key, and outputting text on the console. * changing the video mode and palette settings, * reading an image from disk into memory, * (bonus points) produce a nice-looking, alternative picture to display, in the right format. ---+++ Getting started A skeleton boot sector is provided in bootskel.S in the xv6 folder. This was recently added, to access it, first =git pull= the latest updates from the class repository, then =git checkout -b hw2 origin/hw2= to create a new branch called hw2, based on the hw2 branch at the course repository. The default image is provided in the same folder, as cover.raw and cover.bmp respectively. The _raw_ version is in the correct format for video mode 13h. ---+++ Creating the disk Use the program dd twice to create your disk. First to copy the boot sector to the first block of the disk, then to append the image after the boot sector. Handy 'dd' parameters to use are _if_, _of_, _count_, _bs_ for block size, _skip_ (jump past input blocks) and _seek_ (start writing this many blocks into the output file). Copy the bootskel.img Makefile target to make a now bootsplash.img target with the necessary commands, rather than type things on the command line over and over. Chances are you'll be doing it many many times. Try your finished disk by running =qemu-system-i386 bootsplash.img=. You should see a single character A appear on the screen. ---+++ Writing text to the screen When in text mode, use Int 10h, AH=0Eh to write a single character at a time to the screen. Update the boot sector code to say "Welcome to xv6 @ UIC. Press any key... " instead of "A". Then wait for a keypress before continuing. Use Int 16h, AH=00 to wait for a keypress. ---+++ Reading from disk using BIOS services Int 13h, function AH=42h reads from disk. Fill in a disk address packet struct, specifying the buffer address, start sector, number of sectors to read etc, and call the interrupt to get the buffer filled in. To see if you succeeded, start qemu with the flags "-s -S" to have it wait for gdb. Start gdb in a separate Linux window, and type =target remote 127.0.0.1:1234= if running qemu in Linux. If running outside Linux, replace 127.0.0.1 with the IP address of your host machine. Now you can inspect your memory. For example, =x/100uwx 0x7c00= prints out 100 unsigned words in hexadecimal, starting at 0x7c00. This should show your boot sector binary. ---+++ Changing video mode BIOS interrupt 10h lets you set the video mode using function ah=00h. Use video mode 13h for this homework.[[http://en.wikipedia.org/wiki/INT_10H][WikiPedia on Int 10h]]. You should notice the screen going blank (and perhaps the emulator window changing shape) upon success. ---+++ Writing graphics to the screen Once in video mode, the screen will show whatever is in memory starting at address 0xA0000. Assuming you put something other than zeroes in 0xA0000, you should notice something on the screen after switching to video mode 13h. Put the image from the disk onto the screen. ---+++ Manipulate palette settings Int 10h, function AH=10h, lets you configure the palette. [[http://kernelx.weebly.com/video-bios-functions.html][function listing]]. [[http://asm.inightmare.org/index.php?tutorial=2&location=11][Assembler for Dummies: Graphics II - palette]]. To complete this part, wait for another key press after displaying the initial image. Then change some of the colors in the image and wait for another key press. ---+++ Customize the image (bonus points) For bonus points (20% extra), add a "flame" icon in 2-3 colors to the standard image, cycle the flame colors through red/orange/yellow to simulate a burning fire after loading the image, instead of waiting for a key press. If you do this part, please email Sepideh separately to mention this. To update the image, start with the .bmp picture. Edit it with a drawing program, making sure to use only a few colors. The last 64,000 bytes in the is the actual image, although as you'll find out, the bytes are in a different order (flipped/reversed). For the full score, make sure the image looks correct. ---+++ Make a UIC/xv6-themed image that looks good with standard VGA palette. (major cred with instructor) Face it. The current image isn't a great boot loader splash screen.
E
dit
|
A
ttach
|
P
rint version
|
H
istory
: r5
<
r4
<
r3
<
r2
<
r1
|
B
acklinks
|
V
iew topic
|
Ra
w
edit
|
M
ore topic actions
Topic revision: r5 - 2014-09-03 - 21:28:34 - Main.srogha2
CS385fall14
Syllabus
Lecture Notes
Homeworks
Log In
CS385fall14 Web
Create New Topic
Index
Search
Changes
Notifications
RSS Feed
Statistics
Preferences
ABOUT US
Our Department
Recent News
Contact Us
ACADEMICS
Prospective Students
Undergraduate
CS Minor
Graduate
Courses
RESEARCH
Overview
By Faculty
Labs
PEOPLE
Faculty
Adjuncts
Staff
Students
Alumni
Copyright 2016 The Board of Trustees
of the University of Illinois.
webmaster@cs.uic.edu
WISEST
Helping Women Faculty Advance
Funded by NSF