;*********************************************************************** ; ; LANGUAGE FOR TUTORIAL COURSES ; UTILITIES. PART 4 ; .ENABL GBL ;---------------------------------------------------------------------- ; ; READ THE DECIMAL NUMBER ; AND CONVERT IT TO BINARY FORM ; ; INPUT ; R1 = PTR TO NUMBER IN ASCII CODE ; [-]0-32767 (LEADING BLANKS ARE POSSIBLE) ; ; OUTPUT ; R0 = BINARY VALUE OF NUMBER READ ; R1 = PTR TO THE 1. NOTDIGITAL SYMBOL ; UU.DEC:: MOV R2,-(SP) 10$: MOVB (R1)+,R0 CMPB R0,#' BEQ 10$ ; R0 = 1. NOTBLANK SYMBOL CLR R2 ; SET FLAG - NEGATIVE NUMBER CMPB R0,#'- BEQ 20$ ; MINUS SIGN - NUMBER IS NEGATIVE -BR INC R2 ; R2 /= 0 - FLAG OF POSITIVE NUMBER DEC R1 20$: TRAP 13 ; CONVERT A DECIMAL NUMBER TO BINARY TST R2 BNE 30$ ; SET THE TRUE SIGN ACCORDING TO NEG R0 ; FLAG IN R2 30$: MOV (SP)+,R2 RETURN .PAGE ;---------------------------------------------------------------------- ; ; GET THE PTR AND INSTRUCTION CODE OF A ; NEXT STATEMENT ; ; INPUT ; R1 = ANY PTR IN THE TUTORIAL PROGRAM. PROGRAM WILL SEARCH ; THE NEXT STATEMENT AFTER THE PTR GIVEN ; ; OUTPUT ; R0 = TWO SYMBOLS OF KEYWORD, 1ST SYMBOL IN LOWER BYTE AND ; THE 2ND SYMBOL (OR 0 IF DOESN'T EXIST) IN HIGHER BYTE ; R1 = PTR TO NEXT SYMBOL AFTER THE ; R2 = PTR TO BEGIN OF STATEMENT (TO '!' SYMBOL) ; BIT C IS ON - END OF TUTORIAL PROGRAM HAS BEEN REACHED ; UU.GNS:: 10$: CMPB (R1)+,#12 ; BYPASS UP TO END OF CURRENT STRING BNE 10$ TSTB @R1 ; CHECK FOR THE END OF PROGRAM BEQ 20$ ; BRANCH IF SO CMPB (R1)+,#'! ; IF THERE IS A FLAG OF A STATEMENT BNE 10$ ; NO - SKIP THIS STRING MOV R1,R2 DEC R2 ; R2 = @ STATEMENT SEEKED FOR CALL UU.GKW ; READ THE TST (PC)+ ; RESET THE "C" BIT - SUCCESS FLAG 20$: SEC ; END OF PROGRAM HAS BEEN REACHED RETURN ;---------------------------------------------------------------------- ; ; GET THE OF A STATEMENT ; ; INPUT ; R1 = PTR TO SYMBOL AFTER THE '!' ; ; OUTPUT ; R0 = TWO SYMBOLS OF KEYWORD, 1ST SYMBOL IN LOWER BYTE AND ; THE 2ND SYMBOL (OR 0 IF DOESN'T EXIST) IN HIGHER BYTE ; R1 = PTR TO NEXT SYMBOL AFTER THE ; UU.GKW:: MOVB (R1)+,R0 ; 1ST KEYWORD SYMBOL IN R0 SWAB R0 CLRB R0 ; SHIFT IT IN HIGHER BYTE CMPB @R1,#' ; Q. END OF KEYWORD (BLANK OR NL BLOS 10$ ; SYMBOL) BISB (R1)+,R0 ; IF NO, GET NEXT KEYWORD SYMBOL 10$: SWAB R0 ; 1ST KEYWORD SYMBOL IS IN LOW BYTE RETURN ; NOW, 2ND - IN HIGH BYTE .PAGE ;---------------------------------------------------------------------- ; ; DELAY THE PROGRAM EXECUTION UNTIL ANY ; KEY WAS NOT PRESSED ; ; OUTPUT ; R0 = CODE OF KEY BEEN PRESSED UU.DELAY:: MOV R1,-(SP) ; SAVE THE R1 MOV PC,R1 ADD #,R1 ; R1 = PTR TO MESSAGE TRAP 4 ; OUTPUT THE MESSAGE EMT 6 ; WAIT FOR KEY PRESSING MOV (SP)+,R1 ; RESTORE R1 RETURN DELM: .ASCIZ <5><12><27><231>/NAZMITE L@BU@ KLAWI[U/ .END