;; Do not try to read this code.... .ORIG x5000 L8MAIN LEA R0,MSG1 PUTS LD R5,MASC0 ; R5 = -'0' AND R3,R3,#0 ; R3 = 0 ADD R1,R3,#4 ; R1 = 4 LEA R0,MSG2 PUTS LP1 GETC OUT ADD R0,R0,R5 ; R0 = R0 - '0' BRn TRYAGN ADD R6,R0,#-10 BRn OKAT1 ADD R0,R0,#-7 ; R0 = R0 - 7 BRn TRYAGN ADD R6,R0,#-10 BRn TRYAGN ADD R6,R0,#-16 BRn OKAT1 ADD R0,R0,#-16 ADD R0,R0,#-16 ADD R6,R0,#-10 BRn TRYAGN ADD R6,R0,#-16 BRzp TRYAGN OKAT1 ADD R3,R3,R3 ADD R3,R3,R3 ADD R3,R3,R3 ADD R3,R3,R3 ADD R3,R3,R0 ADD R1,R1,#-1 BRp LP1 AND R4,R4,#0 ; R3 = 0 ADD R1,R4,#4 ; R1 = 4 LEA R0,MSG3 PUTS LP2 GETC OUT ADD R0,R0,R5 ; R0 = R0 - '0' BRn TRYAGN ADD R6,R0,#-10 BRn OKAT2 ADD R0,R0,#-7 ; R0 = R0 - 7 BRn TRYAGN ADD R6,R0,#-10 BRn TRYAGN ADD R6,R0,#-16 BRn OKAT2 ADD R0,R0,#-16 ADD R0,R0,#-16 ADD R6,R0,#-10 BRn TRYAGN ADD R6,R0,#-16 BRzp TRYAGN OKAT2 ADD R4,R4,R4 ADD R4,R4,R4 ADD R4,R4,R4 ADD R4,R4,R4 ADD R4,R4,R0 ADD R1,R1,#-1 BRp LP2 ;; If you get to this point, you have the two numbers loaded in R3 and R4 LEA R6,STACK STR R6,R6,#2 ; Set dynamic link STR R3,R6,#3 ; Store argument one STR R4,R6,#4 ; Store argument two LD R0,SUBR JSRR R0,#0 LEA R0,MSG4 PUTS LDR R3,R6,#0 AND R5,R5,#0 ADD R4,R5,#4 PLOOP1 AND R0,R0,#0 ADD R7,R5,#4 PLOOP2 ADD R0,R0,R0 ADD R3,R3,#0 BRzp NTNEG ADD R0,R0,#1 NTNEG ADD R3,R3,R3 ADD R7,R7,#-1 BRp PLOOP2 ADD R7,R0,#-10 BRzp PRHEX LD R7,ASC0 BRnzp PRALL PRHEX LD R7,ASCAM10 PRALL ADD R0,R0,R7 OUT ADD R4,R4,#-1 BRp PLOOP1 HALT TRYAGN LEA R0,MSGERR PUTS BRnzp L8MAIN MASC0 .FILL #-48 ASC0 .FILL #48 ASCAM10 .FILL #55 SUBR .FILL x3000 MSG1 .STRINGZ "\nEnter ALL requested values as 4 digit hexadecimal numbers\n" MSG2 .STRINGZ "\nEnter First Number " MSG3 .STRINGZ "\nEnter Second Number " MSG4 .STRINGZ "\nResult (in hex) is " MSGERR .STRINGZ "\nBad number -- try again\n\n" STACK .BLKW 100 .END