|
DataMuseum.dkPresents historical artifacts from the history of: Jet Computer Jet80 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Jet Computer Jet80 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - download
Length: 2304 (0x900) Types: TextFile Names: »DIVD.SRC«
└─⟦c9df7130d⟧ Bits:30005915 Pascal MT+ Release 5.2 (Jet-80) └─ ⟦this⟧ »DIVD.SRC«
;DIVIDE ROUTINES, AND MOD ROUTINE ; NAME DIVD ENTRY IDIVD,IMOD ; ;DIVIDE HL BY DE ; DETERMINE SIGN OF RESULT AND SAVE IT IDIVD: MOV A,H XRA D PUSH PSW ;MAKE BOTH THE DIVISOR AND DIVIDEND POSITIVE BIT 7,D JRZ DIVSPO MOV A,D ;CHANGE SIGN CMA MOV D,A MOV A,E CMA MOV E,A INX D DIVSPO: BIT 7,H JRZ DIVDPO MOV A,H ;CHANGE SIGN CMA MOV H,A MOV A,L CMA MOV L,A INX H ;NOW BOTH ARE POSITIVE, CHECK FOR DIVISION BY ZERO DIVDPO: XRA A CMP D JRNZ CKNM ORA E JRZ ZERO ;DIVISION BY ZERO ;CHECK FOR DIVISION BY ONE DCR A JRNZ NOTONE ;DIVISION BY ONE OR MINUS ONE POP PSW XRA H JP ONEDON XCHG ;DIVISOR NEGATIVE CHANGE SIGN XRA A MOV H,A ;OF THE ANSWER MOV L,A DSBC D ONEDON: XRA A MOV D,A ;REMAINDER:=0 MOV E,A RET NOTONE: DCR A JRNZ NOTTWO ;DIVISION BY TWO MOV B,H ;ANSWER INTO BC MOV C,L SRAR B RRAR C MOV H,A ;REMAINDER:=0 MOV L,A RLAR L ;REMAINDER = CARRY JR SIGNS ;DIVISION BY ZERO ZERO: POP D STC ;SET CARRY INDICATES OVFL ERROR RET NOTTWO: XRA A ;CLEAR A ;NORMALIZE THE DIVISOR, KEEPING COUNT OF THE NUMBER ;OF SHIFTS REQUIRED TO ACCOMPLISH THIS CKNM: XCHG ;IT'S EASIER TO SHIFT HL CKNM1: BIT 6,H JRNZ NORM INR A DAD H ;SHIFT DIVISOR LEFT ONE BIT JMPR CKNM1 NORM: XCHG ;RESTORE DIVISOR TO DE LXI B,0H INR A ;DIVIDE LOOP DIVLOP: ORA A ;CLEAR CARRY DSBC D ;ATTEMPT SUBTRACTION JRC FAIL STC RLAR C ;SHIFT ONE INTO ANSWER RLAR B JMPR TEST ;SUBTRACTION FAILED FAIL: DAD D SLAR C ;SHIFT ZERO INTO NUMBER RLAR B ;END LOOP TEST TEST: SRAR D ;SHIFT DIVISOR RRAR E DCR A JRNZ DIVLOP ;DONE DIVISION IS COMPLETE ;THE MAGNITUDE OF THE REMAINDER IS IN DE ;THE MAGNITUDE OF THE ANSWER IS IN BE SIGNS: POP PSW ;GET SIGN OF RESULT XCHG ;REMAINDER INTO DE LXI H,0H JP LIKE DSBC B ;CARRY IS ALREADY CLEAR FROM XRA H XRA A ;RESET CARRY RET LIKE: DAD B XRA A ;CLEAR A AND RESET CARRY RET ;MOD RETURNS HL - ( ( HL DIV DE ) * DE ) IMOD: BIT 7,H ;CHECK SIGN OF RESULT JRZ POSRSLT CALL IDIVD RC ;DONE IF AN ERROR OCCURRED MOV H,A MOV L,A ;CHANGE SIGN OF RESULT DSBC D XRA A ;CLEAR CARRY RET ;RESULT IS POSTIVE POSRSLT CALL IDIVD XCHG RET «eof»