X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=device%2Flib%2Fz80%2Fmul.s;h=61ff5cf34179e99e6ab25d8ac8c2726725d46555;hb=e56ff7ea8ea1bffdcf4fee43ec8a125453a6ad8d;hp=424554a732d994920348a779be65c34f3a2c466f;hpb=ac2a3bee4ffe024a919c1b360cc888679a45f326;p=fw%2Fsdcc diff --git a/device/lib/z80/mul.s b/device/lib/z80/mul.s index 424554a7..61ff5cf3 100644 --- a/device/lib/z80/mul.s +++ b/device/lib/z80/mul.s @@ -1,74 +1,5 @@ .area _CODE -; This multiplication routine is similar to the one -; from Rodnay Zaks, "Programming the Z80". - -__muluchar_rrx_s:: - ld hl, #2+1 - add hl, sp - ld e, (hl) - dec hl - ld h, (hl) - ld l, #0 - ld d, l - ld b, #8 -muluchar_rrx_s_loop: - add hl, hl - jr nc, muluchar_rrx_s_noadd - add hl, de -muluchar_rrx_s_noadd: - djnz muluchar_rrx_s_loop - ret - -; operands have different sign - -__mulsuchar_rrx_s:: - ld hl,#2+1 - add hl,sp - - ld e,(hl) - dec hl - ld c,(hl) - ld b, #0 - jr signexte - -__muluschar_rrx_s:: - ld hl,#2+1 - add hl,sp - - ld c,(hl) - ld b, #0 - dec hl - ld e,(hl) - jr signexte - -;; Originally from GBDK by Pascal Felber. - -__mulschar_rrx_s:: - ld hl,#2+1 - add hl,sp - - ld e,(hl) - dec hl - ld l,(hl) - - ;; Fall through -__mulschar_rrx_hds:: - ;; Need to sign extend before going in. - ld c,l - - ld a,l - rla - sbc a,a - ld b,a -signexte: - ld a,e - rla - sbc a,a - ld d,a - - jr .mul16 - __mulint_rrx_s:: ld hl,#2 add hl,sp @@ -87,41 +18,41 @@ __mulint_rrx_s:: __muluchar_rrx_hds:: __mulint_rrx_hds:: ;; Parameters: - ;; HL, DE (left, right irrelevant) + ;; hl, de (left, right irrelevant) ld b,h ld c,l ;; 16-bit multiplication ;; ;; Entry conditions - ;; BC = multiplicand - ;; DE = multiplier + ;; bc = multiplicand + ;; de = multiplier ;; ;; Exit conditions - ;; DE = less significant word of product + ;; hl = less significant word of product ;; ;; Register used: AF,BC,DE,HL -.mul16: - ld hl,#0 - ld a,b - ; ld c,c - ld b,#16 +__mul16:: + xor a,a + ld l,a + or a,b + ld b,#16 ;; Optimise for the case when this side has 8 bits of data or ;; less. This is often the case with support address calls. - or a - jr NZ,1$ - + jr NZ,2$ ld b,#8 ld a,c 1$: ;; Taken from z88dk, which originally borrowed from the ;; Spectrum rom. add hl,hl +2$: rl c rla ;DLE 27/11/98 - jr NC,2$ + jr NC,3$ add hl,de -2$: +3$: djnz 1$ ret +