Introductory Lab: The Web, Java, and DataReps. This lab is mainly an introduction to the use of the World Wide Web and to the idea of Java applets. A simple applet, DataReps, serves as an example of an applet. It also serves to demonstrate how several different types of data are represented in a computer.
xLogicCircuits Lab 1: Logic Circuits. Explores logic circuits created out of AND, OR and NOT gates. The relationship between circuits and Boolean algebra is also covered.
xLogicCircuits Lab 2: Memory Circuits. Shows how circuits that contain feedback loops can be used as memory circuits, and how a RAM (random access memory) can be constructed and used.
xComputer Lab 1: Introduction to xComputer. Introduces the xComputer, a simple model computer, and investigates how it operates in a fetchandexecute cycle to carry out machine language instructions stored in its memory.
xComputer Lab 2: Assembly Language Programming. Covers assembly language programming for the xComputer, including labels and indirect addressing.
xComputer Lab 3: Subroutines. Introduces the idea of a subroutine and shows how subroutines can be implemented "by hand" in the assembly language of xComputer, even though that language does not offer direct support for subroutines.
xTuringMachine Lab: Introduction to Turing Machines. This lab is meant to illustrate the basic operation of Turing machines and to show that even the extremely simple operations performed by Turing machines are sufficient for performing complex computations.
Publishing on the Web. This lab will cover some of the basics of Web publishing, concentrating on the "Composer" utility in Netscape Communicator. This lab is not closely related to The Most Complex Machine, and it does not use any applets. However, it does sort of fit in with the theme of "real computers" and their impact on society, which is covered in Chapter 5 of the text. (This lab is somewhat specific to Hobart and William Smith Colleges.)
xTurtle Lab 1: Introduction to Programming. Covers the basics of the xTurtle programming language, including loops, if statements, variables, and builtin turtle graphics commands.
xTurtle Lab 2: Thinking about Programs. Investigates how preconditions and postconditions can be used to help develop working programs that perform complex tasks. Also introduces the idea of subroutines.
xTurtle Lab 3: Subroutines and Recursion. Continues with subroutines in general and recursive subroutines in particular. Recursion is used to produce nifty pictures.
xSortLab Lab: Sorting and the Analysis of Algorithms. Uses the xSortLab applet to investigate several different algorithms for sorting lists of numbers.
xTurtle Lab 4: Multiprocessing. Shows how multiprocessing can be used to divide a large problem into several subtasks that can be executed in parallel. Some examples of communication between parallel processes are also given.
xModels Lab 1: TwoD Graphics and Animation. Introduces a scenedescription language for creating still images and multiframe animations. Shows how hierarchical, geometric models are used in computer graphics. In this lab, only twodimensional images are covered.
xModels Lab 2: Adding the Third Dimension. Extends the ideas covered in the previous lab to three dimensions. Also covers "lathing" and "extrusion," two operations for producing threedimensional objects.
Project  Description  Date Due 

conversion pt I  binary / octal / hex conversion  
conversion pt II  2's complement, floating point  
DeMorgan's Law  Use digital logic to prove an important law in boolean algebra 

Adder  Build a simple 2bit adder  adder.html 
Architecture  Diagram the Von Neumann Architecture  
Assembly Language One  Write a swapper in assembler  The swapper 
Assembly Language Two  Write a string copy function  
Algorithms One  Write the Algorithm for a Guessing Game  
Algorithms Two  TBA  
Complexity  Algorithm Analysis Lab  
Software Engineering  UML Diagram 