Assignment 11, due Apr 18Solutions
Part of
the homework for 22C:60 (CS:2630), Spring 2014
|
On every assignment, write your name legibly as it appears on your University ID card! Homework is due on paper at the start of class on the day indicated (usually Friday). Exceptions will be made only by advance arrangement (excepting "acts of God"). Late work must be turned in to the TA's mailbox (ask the CS receptionist in 14 MLH for help). Never push homework under someone's door!
c = ad
d = bc
Assume that each logic element, and, or, nand, nor and not has a propagation delay of exactly one nanosecond, where this matters.
a) Draw a logic circuit for this, using the conventional graphic notation for and, or, nand, nor and not gates. Neatness, proportion and organizaiton all count. (0.5 points)
b) Complete this timing diagram, showing the output of the above circuit in response to changes in its inputs:
| ._._._. . . . . . . . . ._._._._._._. . . ._._._._._._._._._._ a |_| |_________________| |_____| | . . . . . . ._._._. . . . . . ._._._._._._._._._. . . ._._._._ b |_____________| |___________| |_____| | . ._._._. . . . . . . . . ._._._._._._. . . . . . . ._._._._._ c |___| |_________________| |_____________| | . . . . . . . ._._._. . . . . . . . . . ._._._._._. . . . . . d |_______________| |___________________| |___________ |_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._ | TIME -------> (each dot is one nanosecond)
Lines c and d above were blank in the original.
You may photocopy, cut and paste, or copy (with ruler) or use graph paper, but neatness matters. The grader will discount illegible work. (0.5 points)
c) Identify the connections to this circuit that would be conventionally labeled R, S, R, S, Q or Q if any. (0.5 points)
a is R,
b is S,
c is Q, and
d is Q.
PUTCHAT:; expects R3 = ch, a character to be plotted on the screen ; R4 = x, the unsigned integer x coordinate ; R5 = y, the unsigned integer y coordinate
The following SMAL definitions are useful in accessing the Hawk display:
; memory mapped display interface DISPBASE = #FF000000 ; base memory address of the display interface DISPLINES = 0 ; - displacement of the lines interface register DISPCOLS = 4 ; - displacement of the columns interface register DISPTEXT = #100 ; - displacement to the start of video RAM
a) Write code to load the base address of the display interface into R6. (0.3 points)
LIW R6,DISPBASE ; there are many other solutions.
b) Given that the y coordinate to be used is in R5, the base address of the display interface is in R6, and R7 is available as a scratch register, write code to check that the y coordinate is on screen and branch to OFFSCR if it is not. (0.3 points)
Using unsigned comparisons gives the simplest solution:
LOAD R7,R6,DISPLINES CMP R5,R7 BGEU OFFSCRUsing signed comparisons is more complicated but equivalent so long as the number of lines on the display is under 2 billion (this seems very likely):
LOADCC R7,R6,DISPLINES CMP R5,R7 BGE OFFSCR TESTR R5 BNS OFFSCR
c) Given that the base address of the display interface is in R6, write the best possible code to load the starting address of the video RAM in R8. (0.3 points)
LEA R8,R6,DISPTEXTOr, equivalently:
ADDI R8,R6,DISPTEXT
d) Given that the address of the video RAM is in R8, the base address of the display interface is in R6, and the y coordinate is in R5, write code to compute the starting address in video RAM of the display line at that y coordinate and leave that address in R8. This will involve a call to the TIMESU monitor routine. (0.3 points)
LOAD R4,R6,DISPCOLS ADDI R2,R2,ARSIZE LIL R1,TIMESU JSRS R1,R1 ; R3 = dispcols * y ADDI R2,R2,-ARSIZE ADD R8,R8,R3 ; R8 = address of text[y,0]
e) Which registers discussed above contain information that is still needed after step d) but will be wiped out by the computation described required by step d? (0.3 points)
The documentation for TIMESU in monitor.h say that it wipes our R4 and R6. We also used R3, so we lost:
R3 -- the character to be plotted
R4 -- the unsigned integer x coordinate
Assuming that we have already checked that both coordinates are on screen, it is unlikely that we will need anything else, since all that is left to be done is to compute the address of text[y,x] from the address of text[y,0] and then store the character at that byte address.