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/get_xy_t.s

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