ID - Idle ---------- SCENG -- set scene good. (HSE)==>RCOM1 RCOM1 - Read command --------------------- HSI -- raise internal handshake to prompt data INWR -- write data into IN register (!HSE)==>ID ()==>RCOM2 RCOM2 ------ INEN -- attach IN to bus IRWR -- write data into IR (NOP)==>ID (IN) ==>IN1 (OUT)==>OUT1 (CLR)==>CLR1 (DRW)==>DRW1 IN1 - Service IN instruction ----------------------------- HSI -- raise internal handshake to prompt data INWR -- write data into In register (!HSE)==>ID ()==>IN2 IN2 ---- INEN -- attach IN to bus RFWR -- write data into RF ()==>ID OUT1 - Service OUT instruction ------------------------------- RFRE -- RF outputs data to bus OUTW -- write data to OUT register (!HSE)==>ID ()==>OUT2 # Initialize loop variables CLR1 - service CLR instruction ------------------------------- ROMA = (00) -- index literal 00 in ROM ROMR -- read from ROM COLWR -- write value to color register !SCENG CLR2 ----- ROMA = (FF) -- index literal FF in ROM ROMR -- read from ROM ADWR = (ARG) -- index ARG register RFWR -- write enable register file CLR3 ----- ROMA = (FF) -- index literal FF in ROM ROMR -- read from ROM ADWR = (TP) -- index TP register RFWR -- write enable register file # setup address values CLR4 ----- ADRE = (ARG) -- select ARG for output RFRE -- set RF output to bus OUTW -- load OUT register CLR5 ----- ALWR -- address latch write CLR6 ----- ADRE = (TP) -- select TP for output RFRE -- set RF to output to bus OUTW -- load OUT register ALUINST = <THRU> -- write throught to ACC ACCW -- load ACC register # write to external memory, check for termination of inside loop CLR7 ----- MEMWRITE -- write to external memory (ZERO)==>CLRA1 # loop not terminated, lcv--, jump back to top CLR8 ----- ALUINST = <DEC> -- set code for ALU dec ADRE = (TP) -- set TP for output RFRE -- read from RF ACCW -- write to ACC CLR9 ----- ADWR = (TP) -- set TP for input RFWR -- write to RF ACCEN -- connect ACC to bus ()==>CLR6 # inside loop terminated, check for outside loop termination CLRA1 ------ ADRE = (ARG) -- set ARG for output RFRE -- read from RF ALUINST = <THRU> -- set code for ALU pass through ACCW -- write to ACC (ZERO)==>ID # outside loop not terminated, lcv--, jump to top, reinit inner loop CLRA2 ------ ADRE = (ARG) -- set ARG for output RFRE -- read from RF ALUINST = <DEC> -- set code for ALU dec ACCW -- write to ACC CLRA3 ------ ADWR = (ARG) -- set ARG for input RFWR -- write to RF ACCEN -- connect ACC to bus ()==>CLR3 ****************** * Line Draw Unit * ****************** # check whether object drawable DRW1 - Bresenham linedraw instruction -------------------------------------- ALUINST = <THRU> -- set ALU op to pass through ADRE = (CO5) -- set CO5 for output RFRE -- read from RF COLWR -- write value to color register !SCENG -- set scene not good DRW2 ----- ALUINST = <AND> -- set ALU op to XOR ROMA = (F0) -- set mask to isolate line flags ROMR -- read from ROM (!ZERO)=>ID -- if any flags set, skip out # Calculate DX DRW3 ----- ALUINST = <THRU> -- set ALU op to pass through ADRE = (CO1) -- set CO1 for output RFRE -- read from RF DRW4 ----- ALUINST = <SUB> -- set ALU op to subtraction ADRE = (CO3) -- CO3 for output RFRE -- read from RF ACCW -- load ACC register DRW5 ----- ADWR = (DX) -- select DX for input RFWR -- write to RF ACCEN -- set ACC to write to bus SBWR -- write sign bit to sign box # Calculate DY DRW6 ----- ALUINST = <THRU> -- set ALU op to pass through ADRE = (CO2) -- set CO2 for output RFRE -- read from RF DRW7 ----- ALUINST = <sub> -- set ALU op to subtraction ADRE = (CO4) -- CO4 for output RFRE -- read from RF ACCW -- load ACC register DRW8 ----- ADWR = (DY) -- select DY for input RFWR -- write to RF ACCEN -- set ACC to write to bus SBWR -- write sign bit to sign box # Decide whether X or Y is to be iterated across (set FLIP bit) DRW9 ----- ALUINST = -- set ALU op to subtraction ADRE = (DX) -- set DX for output RFRE -- read from RF ACCW -- load ACC register (NEG)==>DRWF1 # Proceed with line draw initialization DRW10 ------ ALUINST = <SHIFT>-- set ALU op for bitshift ADRE = (DY) -- set DY for output RFRE -- read from RF ACCW -- load ACC register DRW11 ------ ADWR = (DY) -- select DY for input RFWR -- write to RF ACCEN -- set ACC to write to bus SBWR -- write sign bit to sign box DRW12 ------ ALUINST = -- set ALU op for subtract ADRE = (DX) -- set DX for output RFRE -- read from RF ACCW -- load ACC register DRW13 ------ ADWR = (E) -- select E for input RFWR -- write to RF ACCEN -- set ACC to write to bus SBWR -- write sign bit to sign box DRW14 ------ ADWR = (I) -- select I for input RFWR -- write to RF ADRE = (DX) -- select DX for output RFRE -- read from RF DRW15 ------ ALUINST = <SHIFT>-- set ALU op for bitshift ADRE = (DX) -- set DX for output RFRE -- read from RF ACCW -- load ACC register DRW16 ------ ADWR = (DX) -- select DX for input RFWR -- write to RF ACCEN -- set ACC to write bus SBWR -- write sign bit to sign box # Check terminate condition for linedraw DRW17 ------ ALUINST = <THRU> -- set ALU op for pass through ADRE = (I) -- select I for output RFRE -- read from RF (ZERO)==>ID # Plot value at (x1, y1) DRW18 ------ ADRE = (X1) -- select X1 for output RFRE -- read from RF OUTW -- write to OUT DRW19 ------ ALWR -- address latch write DRW20 ------ ADRE = (Y1) -- select Y1 for output RFRE -- read from RF OUTW -- write to OUT DRW21 ------ MEMWRITE -- write to external memory # Check accumulated error, inc/decrement values DRW22 ------ ALUop = <THRU> -- set code for ALU pass through ADRE = (E) -- set E for output RFRE -- read from RF ACCW -- write to ACC (NEG)==>DRW34 # Branch One (E > 0) DRW23 ------ ALUop = <THRU> -- set code for ALU pass through ADRE = (DY) -- set DY for output RFRE -- read from RF ACCW -- write to ACC (NEG)==>DRW25 DRW24 ------ ALUop = <INC> -- set code for ALU increment ADDRE = (Y1) -- set Y1 for output RFRE -- read from RF ACCW -- write to ACC ()==>DRW26 DRW25 ------ ALUop = <DEC> -- set code for ALU decrement ADDRE = (Y1) -- set Y1 for output RFRE -- read from RF ACCW -- write to ACC DRW26 ------ ADWR = (Y1) -- select Y1 for input RFWR -- write to RF ACCEN -- set ACC to write bus DRW27 ------ ALUop = <THRU> -- set code for ALU pass through ADDRE = (E) -- set Y1 for output RFRE -- read from RF ACCW -- write to ACC DRW28 ------ ALUop = <ADD> -- set code for ALU add ADDRE = (DY) -- set DY for output RFRE -- read from RF ACCW -- write to ACC DRW29 ------ ALUop = -- set code for ALU subtract ADDRE = (DX) -- set DX for output RFRE -- read from RF ACCW -- write to ACC DRW30 ------ ADWR = (E) -- select E for input RFWR -- write to RF ACCEN -- set ACC to write bus SBWR -- write sign bit to sign box ()==>DRW34 # Branch Two (E < 0) DRW31 ------ ALUop = <THRU> -- set code for ALU pass through ADDRE = (E) -- set E for output RFRE -- read from RF ACCW -- write to ACC DRW32 ------ ALUop = <ADD> -- set code for ALU add ADDRE = (DY) -- set DY for output RFRE -- read from RF ACCW -- write to ACC DRW33 ------ ADWR = (DY) -- select DY for input RFWR -- write to RF ACCEN -- set ACC to write bus SBWR -- write sign bit to sign box # Branches One and Two rejoin. End of loop increment DRW34 ------ ALUop = <INC> -- set code for ALU increment ADDRE = (X1) -- set X1 for output RFRE -- read from RF ACCW -- write to ACC DRW35 ------ ADWR = (X1) -- select X1 for input RFWR -- write to RF ACCEN -- set ACC to write bus DRW36 ------ ALUop = <DEC> -- set code for ALU decrement ADDRE = (I) -- set I for output RFRE -- read from RF ACCW -- write to ACC # Return to end-of-draw test condition DRW37 ------ ADWR = (I) -- select I for input RFWR -- write to RF ACCEN -- set ACC to write bus SBWR -- write sign bit to sign box ()==>17