DataMuseum.dk

Presents historical artifacts from the history of:

Jet Computer Jet80

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about Jet Computer Jet80

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download

⟦332182bea⟧ TextFile

    Length: 2304 (0x900)
    Types: TextFile
    Names: »DIVD.SRC«

Derivation

└─⟦c9df7130d⟧ Bits:30005915 Pascal MT+ Release 5.2 (Jet-80)
    └─ ⟦this⟧ »DIVD.SRC« 

TextFile

;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»