123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- .define .dvi4
- .sect .text
- .sect .rom
- .sect .data
- .sect .bss
- .sect .text
- ! 4-byte divide routine for z80
- ! parameters:
- ! stack: divisor
- ! dividend
- ! stack: quotient (out)
- ! bc de: remainder (out) (high part in bc)
- .dvi4:
- pop hl
- ld (retaddr),hl
- xor a
- ld (.flag1),a
- ld (.flag2),a
- ld ix,0
- add ix,sp
- ld b,(ix+7) ! dividend
- bit 7,b
- jr z,1f
- ld c,(ix+6)
- ld d,(ix+5)
- ld e,(ix+4)
- call .negbd
- ld (ix+7),b
- ld (ix+6),c
- ld (ix+5),d
- ld (ix+4),e
- ld a,1
- ld (.flag1),a
- 1:
- ld b,(ix+3)
- bit 7,b
- jr z,2f
- call .negst
- ld a,1
- ld (.flag2),a
- 2:
- call .dvu4
- ld a,(.flag1)
- or a
- jr z,3f
- call .negbd
- 3:
- ld (.savebc),bc
- ld (.savede),de
- ld a,(.flag2)
- ld b,a
- ld a,(.flag1)
- xor b
- jr z,4f
- call .negst
- 4:
- ld bc,(.savebc)
- ld de,(.savede)
- ld hl,(retaddr)
- jp (hl)
- .negbd:
- xor a
- ld h,a
- ld l,a
- sbc hl,de
- ex de,hl
- ld h,a
- ld l,a
- sbc hl,bc
- ld b,h
- ld c,l
- ret
- .negst:
- pop ix
- pop de
- pop bc
- call .negbd
- push bc
- push de
- jp (ix)
- .sect .data
- .flag1: .data1 0
- .flag2: .data1 0
- retaddr:.data2 0
- .savebc: .data2 0
- .savede: .data2 0
|