|
|
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: 4802 (0x12c2)
Notes: pts_type(SC)
Names: »DIVMOD.SC«
└─⟦173d42e04⟧ Bits:30009663 Philips computer tape "600105"
└─⟦this⟧ »TOSSWORK/DIVMOD.SC«
└─⟦48601905a⟧ Bits:30009668 Philips computer tape "600121"
└─⟦this⟧ »M:TU10/DIVMOD.SC«
└─⟦d2a299635⟧ Bits:30009698 Philips computer tape "600415"
└─⟦this⟧ »M:TU10/DIVMOD.SC«
IDENT DIVMOD REL 10.0 80-03-14 870105041000
*
****************************************************
*
* 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
IFF CPU852=1
DVR A6
XIF
IFT CPU852=1
LDR A8,A1 SAVE DIVIDEND SIGN
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
IFF CPU852=1
RF(1) END1
XIF
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
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