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

      1         .include        "global.s"
      2 
      3         .globl  .copy_vram
      4 
      5         .area   _HOME
      6 
      7 _get_bkg_data::
      8 _get_win_data::
      9         LDH     A,(.LCDC)
     10         AND     #LCDCF_BG8000
     11         JP      NZ,_get_sprite_data
     12 
     13         PUSH    BC
     14 
     15         LDA     HL,7(SP)        ; Skip return address and registers
     16         LD      A,(HL-)         ; BC = data
     17         LD      B, A
     18         LD      A,(HL-)
     19         LD      C, A
     20         LD      A,(HL-)         ; E = nb_tiles
     21         LD      E, A
     22         LD      L,(HL)          ; L = first_tile
     23         PUSH    HL
     24 
     25         XOR     A
     26         OR      E               ; Is nb_tiles == 0?
     27         JR      NZ,1$
     28         LD      DE,#0x1000      ; DE = nb_tiles = 256
     29         JR      2$
     30 1$:
     31         LD      H,#0x00         ; HL = nb_tiles
     32         LD      L,E
     33         ADD     HL,HL           ; HL *= 16
     34         ADD     HL,HL
     35         ADD     HL,HL
     36         ADD     HL,HL
     37         LD      D,H             ; DE = nb_tiles
     38         LD      E,L
     39 2$:
     40         POP     HL              ; HL = first_tile
     41         LD      A,L
     42         RLCA                    ; Sign extend (patterns have signed numbers)
     43         SBC     A
     44         LD      H,A
     45         ADD     HL,HL           ; HL *= 16
     46         ADD     HL,HL
     47         ADD     HL,HL
     48         ADD     HL,HL
     49 
     50         PUSH    BC
     51         LD      BC,#0x9000
     52         ADD     HL,BC
     53         POP     BC
     54 
     55 3$:                             ; Special version of '.copy_vram'
     56         BIT     3,H             ; Bigger than 0x9800
     57         JR      Z,4$
     58         BIT     4,H
     59         JR      Z,4$
     60         RES     4,H             ; Switch to 0x8800
     61 4$:
     62         WAIT_STAT
     63 
     64         LD      A,(HL+)
     65         LD      (BC),A
     66         INC     BC
     67         DEC     DE
     68         LD      A,D
     69         OR      E
     70         JR      NZ,3$
     71 
     72         POP     BC
     73         RET
     74 
     75 _get_sprite_data::
     76         PUSH    BC
     77 
     78         LDA     HL,5(SP)        ; Skip return address and registers
     79         LD      A,(HL-)         ; E = nb_tiles
     80         LD      E, A
     81         LD      L,(HL)          ; L = first_tile
     82         PUSH    HL
     83 
     84         XOR     A
     85         OR      E               ; Is nb_tiles == 0?
     86         JR      NZ,1$
     87         LD      DE,#0x1000      ; DE = nb_tiles = 256
     88         JR      2$
     89 1$:
     90         XOR     A
     91         LD      H,A             ; HL = nb_tiles
     92         LD      L,E
     93         ADD     HL,HL           ; HL *= 16
     94         ADD     HL,HL
     95         ADD     HL,HL
     96         ADD     HL,HL
     97         LD      B,H             ; BC = nb_tiles
     98         LD      C,L
     99 2$:
    100         POP     HL              ; HL = first_tile
    101         LD      H,A
    102         ADD     HL,HL           ; HL *= 16
    103         ADD     HL,HL
    104         ADD     HL,HL
    105         ADD     HL,HL
    106 
    107         LD      DE,#0x8000
    108         ADD     HL,DE
    109         LD      D,H
    110         LD      E,L             ; DE = dest
    111 
    112         LDA     HL,7(SP)
    113         LD      A,(HL-)
    114         LD      L,(HL)
    115         LD      H,D
    116         LD      D,A
    117         LD      A,L
    118         LD      L,E
    119         LD      E,A             ; HL = sour, DE = dest
    120 
    121         CALL    .copy_vram
    122 
    123         POP     BC
    124         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.