cscg22-gearboy

CSCG 2022 Challenge 'Gearboy'
git clone https://git.sinitax.com/sinitax/cscg22-gearboy
Log | Files | Refs | sfeed.txt

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