Login

Subversion Repositories NedoOS

Rev

Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

;dehl = m
;dehl' = n
;out: dehl = m/n
uintdiv32
        ld a,h
        cpl
        ld h,a
        ld a,l
        cpl
        ld l,a
        ld (.dividendlo),hl
        ld a,d
        cpl
        ld h,a
        ld a,e
        cpl
        ld l,a
        ld (.dividendhi),hl
        ld a,1
        ld bc,0
        ld de,1
        ld hl,0
        ld iy,0
        ld (.templo),hl
        ld (.temphi),hl
        exx
        ld bc,de
        ex de,hl
        bit 7,b
        jr nz,.rshiftloop
.lshiftloop
        sla de
        rl bc
        exx
        sla de
        rl bc
        exx
        inc a
        bit 7,b
        jr z,.lshiftloop
.rshiftloop
.templo=$+2
        ld ix,0
.temphi=$+1
        ld hl,0
        add ix,de
        adc hl,bc
        jr c,.nextbit
        push ix
        push hl
        push de
.dividendlo=$+1
        ld de,0
        add ix,de
.dividendhi=$+1
        ld de,0
        adc hl,de
        pop de
        pop hl
        pop ix
        jr c,.nextbit
        ld (.templo),ix
        ld (.temphi),hl
        exx
        add iy,de
        add hl,bc
        exx
.nextbit
        srl bc
        rr de
        exx
        srl bc
        rr de
        exx
        dec a
        jr nz,.rshiftloop
        exx
        ld de,iy
        ex de,hl
        ret

;bc = m
;de = n
;out: dehl = m*n
uintmul16
        ld hl,0
        exx
        ld hl,0
        ld de,hl
        exx
.loop   srl bc
        jr nc,.skip
        add hl,de
        exx
        adc hl,de
        exx
.skip   sla de
        exx
        rl de
        exx
        ld a,b
        or c
        jr nz,.loop
        exx
        push hl
        exx
        pop de
        ret