--- /dev/null
+ .area _CODE
+
+; This multiplication routine is similar to the one
+; from Rodnay Zaks, "Programming the Z80".
+
+; Now replaced by a builtin for code generation, but
+; still called from some asm files in this directory.
+__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
+
+ jp __mul16
+