git.y1.nz

gbdk-2020

GameBoy Development Kit
download: https://git.y1.nz/archives/gbdk.tar.gz
README | Files | Log | Refs | LICENSE

gbdk-lib/libc/asm/z80/mul.s

      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
     59 1$:
     60         ;; Taken from z88dk, which originally borrowed from the
     61         ;; Spectrum rom.
     62         add     hl,hl
     63 2$:
     64         rl      c
     65         rla                     ;DLE 27/11/98
     66         jr      NC,3$
     67         add     hl,de
     68 3$:
     69         djnz    1$
     70         ex	de, hl
     71         ret
     72 

This webpage is intended to be an accessible preview of this repository. To get a fuller picture, clone it and use the git CLI.