.TITLE EISBX .IDENT /X01/ .NLIST BEX .ENABL LC ; ; C COMPILER. ; EIS BOX SIMULATION. ; ; DAVID G. CONROY 04-MAR-78 ; .GLOBL $MULR1 .GLOBL $DIVR0 .MCALL CALL .MCALL CALLR .MCALL RETURN ;+ ; ** $MULR1 - (SP) * R1 -> R1 ; ; INPUTS: ; 2(SP)=ONE NUMBER ; R1=THE OTHER NUMBER ; ; OUTPUTS: ; R1=PRODUCT ;- $MULR1: MOV R0,-(SP) ;SAVE REGISTERS MOV R2,-(SP) ; MOV R3,-(SP) ; MOV R4,-(SP) ; CLR R2 ;SET UP CORRECT SIGNS TST R1 ;TEST MULTIPLICAND BPL 10$ ; NEG R1 ; COM R2 ; 10$: MOV 12(SP),R3 ;THEN MULTIPLIER BPL 20$ ; NEG R3 ; COM R2 ; 20$: CLR R0 ;TOP HALF OF PRODUCT MOV #16.,R4 ;STEPCOUNTERPR 30$: BIT #1,R1 ;DO THE MULTIPLY BEQ 40$ ; ADD R3,R0 ; 40$: CLC ; ROR R0 ; ROR R1 ; DEC R4 ; BNE 30$ ; TST R2 ;RECOMPLEMENT IF REQUIRED BEQ 50$ ; NEG R1 ; 50$: MOV (SP)+,R4 ;DONE MOV (SP)+,R3 ; MOV (SP)+,R2 ; MOV (SP)+,R0 ; RETURN ; ;+ ; ** $DIVR0 -- R0:R1 / (SP) -> R0 (Q) R1 (R) ; ; INPUTS: ; R0=HIGH HALF OF THE DIVIDEND ; R1=LOW HALF OF THE DIVIDEND ; (SP)=DIVISOR ; ; OUTPUTS: ; R0=QUOTIENT ; R1=REMAINDER ;- $DIVR0: MOV R2,-(SP) ;SAVE REGISTERS MOV R3,-(SP) ; MOV R4,-(SP) ; CLR R2 ;SET POSITIVE QUOTIENT TST R0 ;DIVIDEND BPL 10$ ; NEG R0 ;D.P. NEGATION IS A BORE. NEG R1 ; SBC R0 ; COM R2 ;SET FLAG 10$: MOV 10(SP),R3 ;DIVISOR BPL 20$ ; NEG R3 ; COM R2 ;SET (FLIP) FLAG 20$: MOV #16.,R4 ;STEPCOUNTER 30$: ASL R1 ;BIG LEFT SHIFT ROL R0 ; CMP R0,R3 ;DOES IT GO IT BLO 40$ ;NO SUB R3,R0 ;IS DOES INC R1 ;SET QUOTIENT BIT 40$: DEC R4 ;DO IT 16 TIMES BNE 30$ ; TST R2 ;WHAT IS THE QUOTIENT SIGN BNE 50$ ;BR IF MINUS TST 10(SP) ;IF THE DIVISOR IS MINUS BPL 70$ ; INC R1 ;FIX THE QUOTIENT BR 70$ ; 50$: TST 10(SP) ;IF THE DIVISOR IS POSITIVE BMI 60$ ; INC R1 ;FIX THE QUOTIENT 60$: NEG R1 ;THEN SET ITS SIGN 70$: MOV R0,R2 ;FINALLY PUT STUFF IN THE MOV R1,R0 ;RIGHT MOV R2,R1 ;PLACES AND MOV (SP)+,R4 ;RETURN MOV (SP)+,R3 ; MOV (SP)+,R2 ; RETURN ; .END