.MCALL .PRINT,.GTIM,.EXIT,..V2..,...CM1,...CM2 ..V2.. .GLOBL JDIV TRACE=0 SUBS=0 KW11P =172540 KWSET =172542 KWCNTR = 172544 START: MOV #START,SP S1: INC SUMKNT DMOV SUM,SUM1 ;CARRY FOULS UP IF ADD IN PLACE MOV #SUM,R1 CALL DBLPRNT DADD SUM1,SUM CMP SUMKNT,#40. BLE S1 .EXIT SUMKNT: .WORD 0 SUM: .WORD 10000.,0 SUM1: .WORD 0,0 CALL INITCLK CALL GETIME DMOV TIMER,T1 CALL JDIV PASSING DIVDND,DIVSOR,QUOTNT,REMNDR CALL GETIME DMOV TIMER,T2 MOV #DIVDND,R1 MOV #QUOT2,R2 MOV #4,R3 CALL DBLDIV CALL GETIME DMOV TIMER,T3 IF QUOTNT NE QUOT2 PRFAIL ;IF FAILED IF QUOTNT+2 NE QUOT2+2 PRFAIL .PRINT #OK BR NEXT PRFAIL: .PRINT #FAIL NEXT: DSUB T2,T3 DSUB T1,T2 .PRINT #JDIVMSG MOV #T2,R1 ;SET UP DOUBLE PRINT OF JDIV TIME CALL DBLPRNT .PRINT #MYDIV MOV #T3,R1 CALL DBLPRNT CALL GETIME DMOV TIMER,T1 ;TIME GTIM .GTIM #PAR,#TIM CALL GETIME DMOV TIMER,T2 DSUB T1,T2 .PRINT #GTIMMSG MOV #T2,R1 ;PRINT CALL DBLPRNT DMOV MAX,DIVDND ;SET UP FOR ASCII CONVER TMEEASURE CALL GETIME DMOV TIMER,T1 MOV #BUFF+20,R4 L1: CALL JDIV PASSING DIVDND,DIVSOR,DIVDND,REMNDR ADD #60,REMNDR MOVB REMNDR,-(R4) ;PUT INTO BUFFER IF DIVDND NE L1 IF DIVDND+2 NE L1 CALL GETIME DMOV TIMER,T2 DSUB T1,T2 ;COMPUTE TIME .PRINT R4 ;PRINT NUMBER DMOV MAX,DIVDND ;RESET .PRINT #ASC1 ;PRINT MSG MOV #T2,R1 CALL DBLPRNT CALL GETIME DMOV TIMER,T1 ;START TIME MOV #BUFF+20,R4 ;BUFFER MOV #DIVDND,R1 ;DIVDND MOV #DIVDND,R2 ;QUOTIENT L2: MOV #4,R3 ;PRECISION CALL DBLDIV ADD #60,R3 ;CONVERT TO ASCII MOVB R3,-(R4) ;PUT INTO BUFFER IF DIVDND NE L2 IF DIVDND+2 NE L2 ;UNTIL DONE CALL GETIME DMOV TIMER,T2 DSUB T1,T2 .PRINT R4 .PRINT #ASC2 MOV #T2,R1 CALL DBLPRNT CLR @#KW11P .EXIT T1: .DOUBLE T2: .DOUBLE T3: .DOUBLE PAR: .DOUBLE TIM: .DOUBLE MAX: .WORD 177777,77777 DIVDND: .WORD 177777,77777 QUOTNT: .DOUBLE DIVSOR: .WORD 10.,0 REMNDR: .DOUBLE QUOT2: .DOUBLE OK: .ASCIZ /DIVIDED OK/ FAIL: .ASCIZ /DIVIDE FAIL/ JDIVMSG:.ASCII /JDIV /<200> MYDIV: .ASCII /MY DIV /<200> GTIMMSG:.ASCII /GTIM TOOK / .BYTE 200 BUFF: .ASCIZ / / ASC1: .ASCII /CONVERT - JDIV /<200> ASC2: .ASCII /CONVERT -MY DIV /<200> .EVEN INITCLK:MOV #KHZ100,@#104 MOV #BR6,@#106 MOV #10000.,KWSET MOV #111,KW11P ;INT ENABLE REPEAT 100KHZ RUN RETURN MIC10: .WORD 10000.,0 ;ADJUST FOR SUB TIMER: .WORD 0,0 KHZ100: ADD #10000.,MIC10 ADC MIC10+2 RTI GETIME: DMOV MIC10,TIMER SUB @#KWCNTR,TIMER SBC TIMER+2 RETURN DBLDIV: SAVE R4,R5 ADD R3,R1 ;BACKWARDS ADD R3,R2 MOV -(R1),R5 ;FIRST DIV CLR R4 TST -(R3) ;SUB 2 DIV #10.,R4 MOV R4,-(R2) ;HI PART OF DIVDND DBL.LOOP:CLR R4 ;SET UP FOR DIV SWAB R5 ;ADJUST REMAINDER BISB -(R1),R5 ;INSERT NEXT BYE DIV #10.,R4 MOVB R4,-(R2) DEC R3 BNE DBL.LOOP MOV R5,R3 ;REMAINDER RESTORE R5,R4 RETURN DBLPRNT:MOV #ENDBUF,R4 MOV (R1),TEMP MOV 2(R1),TEMP+2 SAVE R1,R2,R3 MOV #TEMP,R1 MOV R1,R2 ;DIVDND=QUOTNT L3: MOV #4.,R3 CALL DBLDIV ADD #60,R3 MOVB R3,-(R4) IF TEMP NE L3 IF TEMP+2 NE L3 .PRINT R4 RESTORE R3,R2,R1 RETURN TEMP: .DOUBLE .ASCII / / ENDBUF: .BYTE 0 .EVEN .END START