When you're done, you'll have a processor capable of running an operating system. Fortunately, we've written an operating system, and your machine will run it.
To emphasize the advice to work on this assignment piece-by-piece, the bulk of writeup is given on separate pages.
That said, what follows is a sequence of tasks, including suggested target completion dates, that lead to completion of the entire assignment.
Goal: | Understand all of the assignment, at least roughly. Understand the first piece enough to begin implementing it. |
Details: | This page gives an overview. |
See also: | All other pages related to the assignment. |
Target completion: | 11:59PM, Friday, February 6 |
Goal: | Implement the Cebollita memory mapped IO architecture, enabling programs to read keyboard input, to write character output, and to do disk IO. |
Details: | This page with the assignment description for this step. |
Building applications: | Consult the assignment details. |
RUNNING APPLICATIONS: | SEE the assignment details. |
See also: | This description of the memory mapped architecture.
This page on the SMOK memory map container. iolib.c, a library that knows how to use the memory mapped IO devices. |
Target completion: | 11:59PM, Monday, February 9 |
Goal: | Implement address translation, using the Cebollita memory mapped architecture components. |
Details: | This page with the assignment description for this step. |
Building applications: | Consult the assignment details. |
See also: | This description of the memory mapped architecture. |
Target completion: | 11:59PM, Wednesday, February 11 |
Goal: | Implement exception handling, and the syscall and rfe
instructions.
|
Details: | This page with the assignment description for this step. |
Building applications: | Consult the assignment details. |
See also: | This description of the memory mapped architecture.
These lecture notes. |
Target completion: | 11:59PM, Saturday, February 14 |
Goal: | Demonstrate that everything is working by running the Cebollita OS and shell. |
Details: | This page with the assignment description for this step. |
Building applications: | Consult the assignment details. |
See also: | These lecture notes. |
Target completion: | 11:59PM, Tuesday, February 17 |
In this part you'll modify both the hardware and the software (OS) to provide interrupt-driven buffering of keyboard input. In the hardware you should connect up the Character Controller in the memory mapping container to your exception control logic, so that an interrupt is raised when a new keyboard character becomes ready. In the software, you should implement a new function for this handle this interrupt. The interrupt routine should read the character from the Character Controller and store it in some buffer it owns. It should also echo the character back to the console, so that the user sees s/he has typed something. Then the interrupt routine returns to the running program. (If the buffer overlows, well, too bad, now input data has been lost.)
You also need to modify the function that services the readString
system call.
It must fetch characters out of the buffer your interrupt handler has been filling.
If it manages to find an entire string in there, it's done -- it returns the result to the application.
If not, it has to go into a busy loop waiting for more user input.
...cebollita\apps
, including the OS.
$ java util.Disasm > 34084000 ori $t0, $0, 16384 > 8d090000 lw $t1, $t0, 0 > [killed with ^C] $ java util.Disasm 34084000 ori $t0, $0, 16384