ack/mach/6500/libem/duv4.s
1987-01-30 18:41:42 +00:00

72 lines
900 B
ArmAsm

.define Duv4
.sect .text
.sect .rom
.sect .data
.sect .bss
.sect .text
! This subroutine performs an unsigned division on two fourbyte
! unsigned integers.
! For more details see dvi.s
! The only difference is that zeropage locations are twice as big.
Duv4:
1: ldy #0
sty ARTH+8
sty ARTH+9
sty ARTH+10
sty ARTH+11
ldy #33
4: lda ARTH+11
cmp ARTH+3
bcc 1f ! no sub
bne 2f ! sub
lda ARTH+10
cmp ARTH+2
bcc 1f
bne 2f
lda ARTH+9
cmp ARTH+1
bcc 1f
bne 2f
lda ARTH+8
cmp ARTH
bcc 1f
2: sec
lda ARTH+8
sbc ARTH
sta ARTH+8
lda ARTH+9
sbc ARTH+1
sta ARTH+9
lda ARTH+10
sbc ARTH+2
sta ARTH+10
lda ARTH+11
sbc ARTH+3
sta ARTH+11
sec
rol ARTH+4
bne 3f
1: asl ARTH+4
3: rol ARTH+5
rol ARTH+6
rol ARTH+7
rol ARTH+8
rol ARTH+9
rol ARTH+10
rol ARTH+11
dey
bne 4b
ldy UNSIGN
beq 1f
ldy SIGN
beq 1f
lda #0
ldx #ARTH+4
jsr Ngi4
1: rts