The code was written so that each state could be easily broken up into sub-parts in order to reduce flicker.  Several sound and animation segments, such as the opening screen and the fireworks which are displayed when the user beats the computer can take anywhere from thirty to over two-hundred frames to execute, and thus segmentation is important for the states.  We also noticed, when first writing the code, that our reset function caused much “noise” to be introduced onto the screen.  That is, pixels which we had drawn had disappeared, and pixels which we had not drawn were appearing from nowhere.  Eventually, we determined that this occurred from attempting to draw the entire board in only one frame.  Once this was broken up into several segments, the problem went away.  After similar modifications throughout the code, flicker and the aforementioned “noise” were eliminated.

As noted in the code, the introduction of sound into our sync generating interrupt caused a considerable amount of flicker.  This was partially reduced by changing a delay call from 2 microseconds to 1 microsecond.  We then had to add a series of NOPs to the sync generator in order to eliminate the flicker.  With these nops, our sync generator was able to generate line times of 63.60 microseconds and sync pulse widths of 5 microseconds, which is very accurate, considering NTSC standards.  Please see the music link on your left for more information about how the frequencies for the music were arrived at.

The design should be very safe.  We have no moving parts and all of the hardware we used was obtained from the lab.  The overall hardware design is rather simple, and thus quite robust.  Thus, we did not experience any interference from any other groups.

The biggest problem which we faced was that our code was simply too long for the mcu's memory.  This caused us considerable headache.  Because we wanted the AI to be the best that it could, other areas of our program was forced to suffer.  For example, we had to eliminate a substantial amount of animation and sound in order to make room for the AI.  As we continued developing the program and came aware of different situations that we would have to take into account for our AI, we had to continually trim the fat off of our program.  By the end, our program had only basic features to go with the rigorous AI.  However, we left most of the code in the program, simply commenting it out, so that we could document the work.