mul.s (2166B)
1;-------------------------------------------------------------------------- 2; mul.s 3; 4; Copyright (C) 2000, Michael Hope 5; Copyright (C) 2021, Philipp Klaus Krause 6; 7; This library is free software; you can redistribute it and/or modify it 8; under the terms of the GNU General Public License as published by the 9; Free Software Foundation; either version 2, or (at your option) any 10; later version. 11; 12; This library is distributed in the hope that it will be useful, 13; but WITHOUT ANY WARRANTY; without even the implied warranty of 14; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15; GNU General Public License for more details. 16; 17; You should have received a copy of the GNU General Public License 18; along with this library; see the file COPYING. If not, write to the 19; Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, 20; MA 02110-1301, USA. 21; 22; As a special exception, if you link this library with other files, 23; some of which are compiled with SDCC, to produce an executable, 24; this library does not by itself cause the resulting executable to 25; be covered by the GNU General Public License. This exception does 26; not however invalidate any other reasons why the executable file 27; might be covered by the GNU General Public License. 28;-------------------------------------------------------------------------- 29 30.area _CODE 31 32.globl __mulint 33 34__mulint: 35 ld c, l 36 ld b, h 37 38 ;; 16-bit multiplication 39 ;; 40 ;; Entry conditions 41 ;; bc = multiplicand 42 ;; de = multiplier 43 ;; 44 ;; Exit conditions 45 ;; de = less significant word of product 46 ;; 47 ;; Register used: AF,BC,DE,HL 48__mul16:: 49 xor a,a 50 ld l,a 51 or a,b 52 ld b,#16 53 54 ;; Optimise for the case when this side has 8 bits of data or 55 ;; less. This is often the case with support address calls. 56 jr NZ,2$ 57 ld b,#8 58 ld a,c 591$: 60 ;; Taken from z88dk, which originally borrowed from the 61 ;; Spectrum rom. 62 add hl,hl 632$: 64 rl c 65 rla ;DLE 27/11/98 66 jr NC,3$ 67 add hl,de 683$: 69 djnz 1$ 70 ex de, hl 71 ret 72