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_xy_t.s

      1         .include        "global.s"
      2 
      3         .title  "Set tile map"
      4         .module SetTileMap
      5 
      6         .area   _INITIALIZED
      7 
      8 __map_tile_offset::
      9         .ds     0x01
     10 
     11         .area   _INITIALIZER
     12 
     13         .db     0x00
     14 
     15         .area   _HOME
     16 
     17         ;; Set window tile table from BC at XY = DE of size WH = HL
     18 .set_xy_wtt::
     19         PUSH    HL              ; Store WH
     20         LDH     A,(.LCDC)
     21         AND     #LCDCF_WIN9C00
     22         JR      Z,.is98
     23         JR      .is9c
     24         ;; Set background tile table from (BC) at XY = DE of size WH = HL
     25 .set_xy_btt::
     26         PUSH    HL              ; Store WH
     27         LDH     A,(.LCDC)
     28         AND     #LCDCF_BG9C00
     29         JR      NZ,.is9c
     30 .is98:
     31         LD      HL,#0x9800
     32         JR      .set_xy_tt
     33 .is9c:
     34         LD      HL,#0x9C00
     35         ;; Set background tile from (BC) at XY = DE, size WH on stack, to vram from address (HL)
     36 .set_xy_tt::
     37         PUSH    BC              ; Store source
     38 
     39         SWAP    E
     40         RLC     E
     41         LD      A,E
     42         AND     #0x03
     43         ADD     H
     44         LD      B,A
     45         LD      A,#0xE0
     46         AND     E
     47         ADD     D
     48         LD      C,A             ; dest BC = HL + 0x20 * Y + X
     49 
     50         POP     HL              ; HL = source
     51         POP     DE              ; DE = WH
     52         PUSH    DE              ; store WH
     53         PUSH    BC              ; store dest
     54 
     55 3$:                             ; Copy W tiles
     56 
     57         LD      A, (__map_tile_offset)
     58         ADD     (HL)
     59         LD      E, A
     60         WAIT_STAT
     61         LD      A, E
     62         LD      (BC), A
     63         INC     HL
     64         
     65         LD      A, C            ; inc dest and wrap around
     66         AND     #0xE0
     67         LD      E, A
     68         LD      A, C
     69         INC     A
     70         AND     #0x1F
     71         OR      E
     72         LD      C, A
     73 
     74         DEC     D
     75         JR      NZ, 3$
     76 
     77         POP     BC
     78         POP     DE
     79 
     80         DEC     E
     81         RET     Z
     82 
     83         PUSH    DE
     84 
     85         LD      A, B            ; next row and wrap around
     86         AND     #0xFC
     87         LD      E, A            ; save high bits
     88 
     89         LD      A,#0x20
     90 
     91         ADD     C
     92         LD      C, A
     93         ADC     B
     94         SUB     C
     95         AND     #0x03
     96         OR      E               ; restore high bits
     97         LD      B, A
     98 
     99         PUSH    BC
    100         
    101         JR      3$

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