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/targets/z80/sms_metasprites.s

      1         .include    "global.s"
      2 
      3         .title  "Metasprites"
      4         .module Metasprites
      5 
      6         .ez80
      7 
      8         .area   _DATA
      9 
     10 ___current_metasprite::
     11         .ds     0x02
     12 ___current_base_tile::
     13         .ds     0x01
     14 
     15         .area   _INITIALIZED
     16 ___render_shadow_OAM::
     17         .ds     0x01
     18 
     19         .area   _INITIALIZER
     20         .db     #>_shadow_OAM
     21 
     22         .area   _CODE
     23 
     24 ; uint8_t __move_metasprite(uint8_t id, int16_t x, int16_t y);
     25 ; a      == id
     26 ; de     == x
     27 ; (sp+2) == y
     28 ___move_metasprite::
     29         ld      iyl, a
     30 
     31         pop     hl
     32         pop     bc              ; de = x, bc = y
     33         push    hl
     34 
     35         push    af
     36         push    ix
     37 
     38         ld      ix, (___current_metasprite)
     39 
     40         ld      a, (___render_shadow_OAM)
     41         ld      iyh, a
     42 1$:
     43         ld      a, 0(ix)        ; dy
     44         cp      #0x80
     45         jp      z, 2$
     46 
     47         add     a, a
     48         sbc     a, a
     49         ld      h, a
     50         ld      l, 0(ix)
     51         inc     ix
     52         add     hl, bc
     53         ld      b, h
     54         ld      c, l
     55 
     56         ld      a, #0x20
     57         add     l
     58         ld      l, a
     59         adc     h
     60         sub     l
     61         jp      nz, 5$
     62         ld      a, l
     63         cp      #(0x20 + 0xC0)
     64         jp      c, 6$
     65 5$:
     66         ld      0(iy), #0xC0
     67         jp      7$
     68 6$:
     69         ld      0(iy), c
     70 7$:
     71         ld      a, 0(ix)        ; dx
     72         add     a, a
     73         sbc     a, a
     74         ld      h, a
     75         ld      l, 0(ix)
     76         inc     ix
     77         add     hl, de
     78         ex      de, hl
     79         ld      a, d
     80         or      a
     81         jp      nz, 4$
     82 
     83         ld      a, iyl
     84         rlca
     85         ld      iyl, a
     86 
     87         ld      0x40(iy), e
     88 
     89         ld      a, (___current_base_tile)
     90         add     0(ix)           ; tile
     91         inc     ix
     92         ld      0x41(iy), a
     93 
     94         ld      a, iyl
     95         rrca
     96         inc     a
     97         ld      iyl, a
     98 
     99         jp      1$
    100 4$:
    101         ld      0(iy), #0xC0
    102         inc     ix
    103         inc     iyl
    104         jp      1$
    105 2$:
    106         pop     ix
    107         pop     bc
    108 
    109         ld      a, iyl
    110         sub     b
    111         ret

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