; ; SYSLIB Module Name: SMATH ; Author: Richard Conn ; SYSLIB Version Number: 2.0 ; Module Version Number: 1.0 ; Module Entry Points: ; ADDHD SUBHD MULHD DIVHD ; NEGH CMPH ROTLH ROTRH ; SHFTLH SHFTRH ANDHD ORHD ; XORHD ; Module External References: ; None ; ; ; ADDHD -- ADD DE TO HL, RESULT IN HL ; RETURN WITH HL=RESULT, CARRY SET IF OVFL ; ADDHD:: PUSH PSW MOV A,E ; ADD L AND E ADD L MOV L,A MOV A,D ; ADD H AND D ADC H MOV H,A JNC OKRET OVFLRET: POP PSW ; GET PSW STC ; SET CARRY RET OKRET: POP PSW ORA A ; CLEAR CARRY RET ; ; SUBHD -- SUBTRACT DE FROM HL, RESULT IN HL ; RETURN WITH HL=RESULT, CARRY SET IF HL DE MOV A,H CMP D ; H > D? JC DOVFL ; ZERO RESULT IF H < D JNZ DNOVFL MOV A,L CMP E ; L > E? JC DOVFL ; ZERO RESULT IF HL < DE DNOVFL: MVI B,16 ; 16 LOOPS DVHD: CALL SHFTLH ; SHIFT DIVIDEND LEFT PUSH H ; SAVE DIVIDEND LHLD ACC ; GET ACC CALL SHFLCH ; ROTATE ACC AND MOVE IN CARRY SHLD ACC ; NEW ACC MOV A,L ; LOW COMPARISON SUB E ; COMPARE AND SUBTRACT MOV L,A MOV A,H ; HIGH COMPARISON SBB D ; COMPARE AND SUBTRACT MOV H,A JC DVHD0 SHLD ACC ; SAVE NEW ACC POP H ; GET DIVIDEND MOV A,L ; PLACE IN A 1 TO QUOTIENT ORI 1 MOV L,A JMP DVHD1 DVHD0: POP H ; GET DIVIDEND AND LEAVE LSB AT ZERO DVHD1: DCR B ; COUNT DOWN JNZ DVHD DVRET: POP B POP PSW RET DOVFL: LXI H,0 ; RESULT IS ZERO JMP DVRET END