view lib/alib/div16x16.a @ 2765:0bd16cca86b7

Updated rules.mak for all the os9 format's to format the entire disk. People were having some issues with the disk images not being formatted to their full capacity and preventing some functions from working.
author drencor-xeen
date Thu, 17 Jan 2013 11:03:26 -0600
parents 7d70b7e1cb21
children aaba193af04f
line wrap: on
line source

*********************************************
* 16 x 16 bit integer divide

* OTHER MODULES NEEDED: none

* ENTRY: D = divisor
*        X = dividend

*  EXIT: X = quotient
*        D = remainder

 nam 16x16 bit Divide
 ttl Assembler Library Module


 psect DIV16,0,0,0,0,0

 vsect
negcount rmb 1
 endsect

* Signed Divide
SDIV16:
 clr negcount,u
 PSHS D,X
 tst ,s
 bpl testquo
 ldd ,s
 comb
 coma
 addd #$0001
 std ,s
 inc negcount,u
testquo
 tst 2,s
 bpl ok
 ldd 2,s
 comb
 coma
 addd #$0001
 std 2,s
 inc negcount,u
ok
 puls d,x
 bsr DIV16
 dec negcount,u
 bne goforit
 pshs d,x
 ldd ,s
 coma
 comb
 addd #$0001
 std ,s
 ldd 2,s
 coma
 comb
 addd #$0001
 std 2,s 
 puls d,x
goforit 
 rts
 

* Unsigned Divide
DIV16:
 PSHS D,X save divisor & dividend
 LDA #16 bit counter
 PSHS A
 CLRA initialize remainder
 CLRB

div1
 ASL 4,S shift dividend & quotient
 ROL 3,S
 ROLB shift dividend into B
 ROLA
 CMPD 1,S trial subtraction reqd?
 BLO div2
 SUBD 1,S yes, do subtraction
 INC 4,S increment quotient

div2
 DEC ,S count down another bit
 BNE div1
 LDX 3,S get quotient
 LEAS 5,S clean stack
 RTS

 endsect