summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLeo C2018-11-29 20:10:02 +0100
committerLeo C2018-11-29 20:10:02 +0100
commitf33961b549672c23d768bdfe2c2880db9a58ff6e (patch)
tree24cdc682b32a8cab102a36cd29fa69e3bd2a0a4f
parent81c1eadbced80bf070a9828ae70e818a8de7cd22 (diff)
downloadddt180-f33961b549672c23d768bdfe2c2880db9a58ff6e.zip
Improved div_hl_de
-rw-r--r--ddt180.z8051
1 files changed, 22 insertions, 29 deletions
diff --git a/ddt180.z80 b/ddt180.z80
index 246ff90..e624c8b 100644
--- a/ddt180.z80
+++ b/ddt180.z80
@@ -999,40 +999,33 @@ doop_mod:
; de: r (x%y)
div_hl_de:
- push bc
- ex de,hl
- ld b,h
- ld c,l
- ld hl,0
- ld a,16
+ push bc
+ ex de,hl ;de: x
+ ld b,h ;bc: y
+ ld c,l
+ ld hl,0 ;hl: r
+ ld a,16
; de: x (x shifted out, q shifted in)
; bc: y
; hl: r (initially 0)
-l047eh:
- push af
- add hl,hl
- ex de,hl
- xor a
- add hl,hl
- ex de,hl
- adc a,l
- sub c
- ld l,a
- ld a,h
- sbc a,b
- ld h,a
- inc de
- jr nc,l048fh
- add hl,bc
- dec de
-l048fh:
- pop af
- dec a
- jr nz,l047eh
- ex de,hl
- pop bc
+div_lp:
+ ex de,hl
+ add hl,hl ;x <<= 1
+ ex de,hl
+ adc hl,hl ;r <<= 1
+ inc de
+ or a
+ sbc hl,bc
+ jr nc,div_norestore
+ dec de
+ add hl,bc
+div_norestore:
+ dec a
+ jr nz,div_lp
+ ex de,hl
+ pop bc
ret
doop_and: