X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=device%2Flib%2Fz80%2Fmul.s;h=e81ac80040b958cb5be49d3e9b458f748d5900d7;hb=5a1d5e778e85664f4e6657019348b4756b16eacb;hp=00e6ce9ee2e9747a980aab13522a1c7a3d74b102;hpb=ca15c088b3c6d3cd14dee96ebbabe33a59d3c5af;p=fw%2Fsdcc diff --git a/device/lib/z80/mul.s b/device/lib/z80/mul.s index 00e6ce9e..e81ac800 100644 --- a/device/lib/z80/mul.s +++ b/device/lib/z80/mul.s @@ -1,101 +1,53 @@ - ;; Originally from GBDK by Pascal Felber. - - .area _CODE - -__mulschar_rrx_s:: - ld hl,#2 - add hl,sp - - ld e,(hl) - inc 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 - - ld a,e - rla - sbc a,a - ld d,a - - jp .mul16 - -__muluchar_rrx_s:: - ld hl,#2 - add hl,sp - - ld e,(hl) - - inc hl - ld c,(hl) - - ;; Clear the top - xor a - ld d,a - ld b,a - - jp .mul16 + .area _CODE __mulint_rrx_s:: - ld hl,#2 - add hl,sp - - ld e,(hl) - inc hl - ld d,(hl) - inc hl - ld a,(hl) - inc hl - ld h,(hl) - ld l,a + pop af + pop hl + pop de + push de + push hl + push af ;; Fall through __muluchar_rrx_hds:: __mulint_rrx_hds:: ;; Parameters: - ;; HL, DE (left, right irrelivent) + ;; 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 - jp 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 +