Pristine Ack-5.5
[Ack-5.5.git] / mach / z80 / int / dvi4.s
1 .define .dvi4
2 .sect .text
3 .sect .rom
4 .sect .data
5 .sect .bss
6 .sect .text
7 .dvi4:
8         pop hl
9         ld (retaddr),hl
10         xor a
11         ld (.flag1),a
12         ld (.flag2),a
13         ld ix,0
14         add ix,sp
15         ld b,(ix+7)             ! dividend
16         bit 7,b
17         jr z,1f
18         ld c,(ix+6)
19         ld d,(ix+5)
20         ld e,(ix+4)
21         call .negbd
22         ld (ix+7),b
23         ld (ix+6),c
24         ld (ix+5),d
25         ld (ix+4),e
26         ld a,1
27         ld (.flag1),a
28 1:
29         ld b,(ix+3)
30         bit 7,b
31         jr z,2f
32         call .negst
33         ld a,1
34         ld (.flag2),a
35 2:
36         call .dvu4
37         ld a,(.flag1)
38         or a
39         jr z,3f
40         call .negbd
41 3:
42         ld (.savebc),bc
43         ld (.savede),de
44         ld a,(.flag2)
45         ld b,a
46         ld a,(.flag1)
47         xor b
48         jr z,4f
49         call .negst
50 4:
51         ld bc,(.savebc)
52         ld de,(.savede)
53         ld hl,(retaddr)
54         jp (hl)
55 .negbd:
56         xor a
57         ld h,a
58         ld l,a
59         sbc hl,de
60         ex de,hl
61         ld h,a
62         ld l,a
63         sbc hl,bc
64         ld b,h
65         ld c,l
66         ret
67 .negst:
68         pop iy
69         pop de
70         pop bc
71         call .negbd
72         push bc
73         push de
74         jp (iy)
75 .sect .data
76         .flag1: .data1 0
77         .flag2: .data1 0
78         retaddr:.data2 0
79         .savebc: .data2 0
80         .savede: .data2 0