|
|
DataMuseum.dkPresents historical artifacts from the history of: Philips Data Systems |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Philips Data Systems Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 4486 (0x1186)
Notes: pts_type(SC)
Names: »DIVMOD.SC«
└─⟦110b7ed5e⟧ Bits:30009664 Philips computer tape "600106"
└─⟦this⟧ »TOSSWORK/DIVMOD.SC«
└─⟦781e933ac⟧ Bits:30009686 Philips computer tape "600310"
└─⟦this⟧ »M:92T1/DIVMOD.SC«
└─⟦7e2393f80⟧ Bits:30009710 Philips computer tape "M_KONV"
└─⟦this⟧ »M:KONV/DIVMOD.SC«
└─⟦7f25f14aa⟧ Bits:30009683 Philips computer tape "600307"
└─⟦this⟧ »M:92F4/DIVMOD.SC«
└─⟦f740ae34d⟧ Bits:30009708 Philips computer tape "M_92F3"
└─⟦this⟧ »M:92F3/DIVMOD.SC«
IDENT DIVMOD REL 9.2 79-11-16 870105040920
* =1 RET COND
*
****************************************************
*
* PHILIPS TERMINAL SYSTEM PTS
*
* TOSS DATA MANAGEMENT
*
*
*
****************************************************
* THIS ROUTINE EXECUTES THE DIVIDE INSTRUCTION ON THE ALPHA COMPUTER
* CALLING SEQUENCE
* A1-A2= DIVIDEND
* A6 = DIVISOR
* CF A14,DIVMOD
*RETURN* RESUT IN A1-A2 ; A1= REMAINDER;A2= QUOTIENT
* CAUTION : REGISTERS A3,A4,A6,A7,A8 ARE CRUSHED.
ENTRY DIVMOD
*
*
*****************************************
*
* CONDITIONAL ASSEMBLY
*
*****************************************
*
* A PROGRAM VERSION USING THE EXTENDED INSTRUCTION
* SET IS OBTAINED BY SETTING CPU852 EQU 0.
*
CPU852 EQU 1
*
EJECT
DIVMOD EQU *
LDK A3,0 =1
IFF CPU852=1
DVR A6
XIF
IFT CPU852=1
LDR A8,A1 SAVE DIVIDEND SIGN
* =1
ADK A6,0
RF(0) END3 * IF DIVISOR IS NULL, OVREFLOW
ADK A1,0
RF(4) SIGNE
ANK.L A2,/7FFF
RF(0) END0 * IF DIVIDEND IS NULL, CR = 0
* THIS SEQUENCE GIVES THE OPERAND A POSITIVE VALUE
SIGNE LDK A7,0
LDK A4,16
ADK A1,0 *SIGN OF DIVIDEND
RF(6) DIVENP
ADK A3,1 * DIVIDEND IS NEGATIVE
C1R A1,A1
C1R A2,A2
ANK.L A2,X'7FFF'
ADK A2,1
RF(1) DIVENP
ADK A1,1
RF(5) END3
DIVENP ADK A6,0 *SIGN OF DIVISOR
RF(6) DIVORP
SUK A3,1 *NEGATIVE DIVISOR
C1R A6,A6
ADK A6,1
ADK A6,0 RESET IF OVERFLOW
RF(5) CASSPE
DIVORP CWR A1,A6
RF(1) END3
RF(0) CASSP1
SHIFT SUK A4,1 *A1 LESS THAN A6
RF(0) END
SLL A1,1
SLL A7,1
SLL A2,1
RF(6) *+4
ADK A1,1
ADK A1,0
RF(2) CASSP1
CWR A1,A6
RB(2) SHIFT
CASSP1 SUR A1,A6
ADK A7,1
RB(7) SHIFT
*THIS SEQUENCE RESTORES THE SIGN OF THE RESULTS
END LDR A2,A7
ADK A3,0
RF(0) NOSIGN
RF(2) AA DIVIDEND +. DIVISOR +
C1R A1,A1 *REMAINDER
ADK A1,1
AA C1R A2,A2 * QUOTIENT
ADK A2,1
*CAUTION THE NEXT INSTRUCTION IS ABSOLUTELY NECESSARY TO SET CR
* WHEN THE ADK A2,1 SET AN OVERFLOW CR EX (QUOTIENT=8000)
ADK A2,0
XIF =1
IFT CPU852=0 6813 =1
RF(1) END1 =1
XIF =1
RF(2) END2
RF(0) END0
END3 ADK A3,/81
END2 ADK A3,/81
END1 ADK A3,/81
END0 SLL A3,1 **********************************
ANK.L A3,/0300
LDK.L A4,/FCFF
AN.S A4,2,A14
OR.S A3,2,A14 UPDATE CR IN PSW CALLING PROGRAM
* =1
RTN A14
IFT CPU852=1
NOSIGN ADK.L A8,0 TEST OF DIVIDEND SIGN
RF(6) BB
C1R A1,A1 DIVIDEND- .DIVISOR -
ADK A1,1 REMAINDER -
BB ADK A2,0
RB(0) END0
RB(2) END2
RB(7) END1
CASSPE LDR A7,A1
LDR A1,A2
CWK A1,/8000
RB(4) END
LDK A1,0
RB(7) END
XIF
END