1
2SECTION code_clib
3SECTION code_l
4
5PUBLIC l_long_sbc_mde_mhl
6
7l_long_sbc_mde_mhl:
8
9   ; subtract the two longs at addresses hl & de
10   ;
11   ; enter : de = long *A
12   ;         hl = long *B
13   ;
14   ; exit  : dehl = A - B - carry
15   ;         flags set as result of msb subtraction
16   ;
17   ; uses  : af, bc, de, hl
18
19   ld a,(de)
20   inc de
21   sbc a,(hl)
22   inc hl
23   ld c,a
24
25   ld a,(de)
26   inc de
27   sbc a,(hl)
28   inc hl
29   ld b,a
30
31   push bc                     ; save LSW of result
32
33   ld a,(de)
34   inc de
35   sbc a,(hl)
36   inc hl
37   ld c,a
38
39   ld a,(de)
40   sbc a,(hl)
41
42   ld d,a
43   ld e,c
44   pop hl                      ; dehl = result
45
46   ret
47