TWiki
>
CS385 Web
>
Homework2
(2017-01-24, Main.jakob)
(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 updated; 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 and waiting for keypress 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. ---+++ 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. However, not that the video buffer is cleared by switching modes. Once you put something other than zeroes in 0xA0000, you should notice something on the screen once you are in video mode 13h. Then put the image from the disk onto the screen, as per below. ---+++ 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. [[http://www.ctyme.com/intr/rb-0708.htm][Int 13h, ah=42h documentation]]. Note that the "transfer buffer" address is a 32-bit field, in offset:segment form. Also, pay attention to byte order. 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. ---+++ 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 the TA 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
: r6
<
r5
<
r4
<
r3
<
r2
|
B
acklinks
|
V
iew topic
|
Ra
w
edit
|
M
ore topic actions
Topic revision: r6 - 2017-01-24 - 21:19:23 - Main.jakob
CS385
Syllabus
Lecture Recordings
Piazza
Homeworks
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