cscg22-gearboy

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

labs.s (1994B)


      1;--------------------------------------------------------------------------
      2;  labs.s
      3;
      4;  Copyright (C) 2020, Tony Pavlov
      5;
      6;  This library is free software; you can redistribute it and/or modify it
      7;  under the terms of the GNU General Public License as published by the
      8;  Free Software Foundation; either version 2, or (at your option) any
      9;  later version.
     10;
     11;  This library is distributed in the hope that it will be useful,
     12;  but WITHOUT ANY WARRANTY; without even the implied warranty of
     13;  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
     14;  GNU General Public License for more details.
     15;
     16;  You should have received a copy of the GNU General Public License 
     17;  along with this library; see the file COPYING. If not, write to the
     18;  Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston,
     19;   MA 02110-1301, USA.
     20;
     21;  As a special exception, if you link this library with other files,
     22;  some of which are compiled with SDCC, to produce an executable,
     23;  this library does not by itself cause the resulting executable to
     24;  be covered by the GNU General Public License. This exception does
     25;  not however invalidate any other reasons why the executable file
     26;   might be covered by the GNU General Public License.
     27;--------------------------------------------------------------------------
     28
     29        .module labs
     30
     31        .area   _HOME
     32
     33;long labs(long num)
     34_labs::
     35        lda     HL, 2(SP)
     36        ld      A, (HL+)
     37        ld      E, A
     38        ld      A, (HL+)
     39        ld      D, A
     40        ld      A, (HL+)
     41        ld      H, (HL)
     42        ld      L, A            ; DEHL = num
     43
     44.labs::
     45        ld      A, H
     46        add     A, A
     47        ret     NC
     48
     491$:
     50        ld      A, E
     51        cpl
     52        add     #1
     53        ld      E, A
     54
     55        ld      A, D
     56        cpl
     57        adc     #0
     58        ld      D, A
     59
     60        ld      A, L
     61        cpl
     62        adc     #0
     63        ld      L, A
     64
     65        ld      A, H
     66        cpl
     67        adc     #0
     68        ld      H, A
     69
     70        ret