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/sm83/set_1bit_data.s

      1         .include        "global.s"
      2 
      3         .globl __current_1bpp_colors
      4 
      5         .area   _HOME
      6 
      7 _set_bkg_1bpp_data::
      8 _set_win_1bpp_data::
      9         ld d, #0x90
     10         ldh a, (.LCDC)
     11         and #LCDCF_BG8000
     12         jr z, .copy_1bpp_tiles
     13 _set_sprite_1bpp_data::
     14         ld d, #0x80
     15 .copy_1bpp_tiles:
     16         push bc
     17 
     18         lda hl, 4(sp)
     19         ld a, (hl+) ; ID of 1st tile
     20         ld e, a
     21         ld a, (hl+) ; Nb of tiles
     22         ld c, a
     23         ld a, (hl+) ; Src ptr
     24         ld h, (hl)
     25         ld l, a
     26         
     27         ; Compute dest ptr
     28         swap e ; *16 (size of a tile)
     29         ld a, e
     30         and #0x0F ; Get high bits
     31         add d ; Add base offset of target tile "block"
     32         ld d, a
     33         ld a, e
     34         and #0xF0 ; Get low bits only
     35         ld e, a
     36 
     37         push de
     38         ld d, h
     39         ld e, l
     40         pop hl
     41 
     42 1$:
     43         ; Wrap from past $97FF to $8800 onwards
     44         ; This can be reduced to "bit 4 must be clear if bit 3 is set"
     45         bit 3, h
     46         jr z, 2$
     47         res 4, h
     48 2$:
     49         ld b, #8
     50 3$:
     51         push bc
     52         ld a, (de)     ; a == bits
     53         inc de
     54         push de
     55         push hl
     56 
     57         ld hl, #__current_1bpp_colors
     58         ld c, (hl)
     59         inc hl
     60         ld h, (hl)
     61         ld l, c         ; L ==.fg_colour, H == .bg_colour
     62 
     63         ld e, #8
     64 8$:
     65         rra
     66         jr c, 7$
     67         ld d, h
     68         jr 9$
     69 7$:
     70         ld d, l
     71 9$:
     72         srl d
     73         rr c
     74         srl d
     75         rr b
     76 
     77         dec e
     78         jr nz, 8$
     79 
     80         pop hl
     81 
     82         WAIT_STAT
     83         ld (hl), c
     84         inc l
     85         ld (hl), b
     86         inc hl
     87 
     88         pop de
     89         pop bc
     90 
     91         dec b
     92         jr nz, 3$
     93 
     94         dec c
     95         jr nz, 1$
     96 
     97         pop bc
     98         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.