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/mos6502/nes/set_data.s

      1     .module SetData
      2     .include "global.s"
      3 
      4     .area	GBDKOVR (PAG, OVR)
      5     _set_sprite_data_PARM_3::
      6     _set_bkg_data_PARM_3::
      7     _set_win_data_PARM_3::	    .ds 2
      8     .ppu_addr_lo:               .ds 1
      9     .ppu_addr_hi:               .ds 1
     10     src:                        .ds 2
     11     tmpX:                       .ds 1
     12 
     13     .area   _HOME
     14 
     15 _set_bkg_data::
     16 _set_win_data::
     17     sta *.ppu_addr_lo
     18     lda *_set_bkg_data_PARM_3
     19     sta *src
     20     lda *_set_bkg_data_PARM_3+1
     21     sta *src+1
     22     lda *_shadow_PPUCTRL
     23     and #PPUCTRL_BG_CHR
     24     lsr
     25     jmp .copy_tiles
     26 _set_sprite_data::
     27     sta *.ppu_addr_lo
     28     lda *_set_sprite_data_PARM_3
     29     sta *src
     30     lda *_set_sprite_data_PARM_3+1
     31     sta *src+1
     32     lda *_shadow_PPUCTRL
     33     and #PPUCTRL_SPR_CHR
     34 .copy_tiles:
     35     lsr
     36     lsr
     37     lsr
     38     ; *= 16
     39     asl *.ppu_addr_lo
     40     rol
     41     asl *.ppu_addr_lo
     42     rol
     43     asl *.ppu_addr_lo
     44     rol
     45     asl *.ppu_addr_lo
     46     rol
     47     bit *__oam_valid_display_on
     48     bvc .copy_tiles_indirect
     49     ; Direct write
     50     sta PPUADDR
     51     lda *.ppu_addr_lo
     52     sta PPUADDR
     53 .copy_tiles_loop:
     54     ; plane0 - 8 even bytes
     55     ldy #0
     56     jsr .copy_tiles_1plane
     57     ; plane1 - 8 odd bytes
     58     ldy #1
     59     jsr .copy_tiles_1plane
     60     ; src += 16
     61     lda *src
     62     clc
     63     adc #16
     64     sta *src
     65     lda *src+1
     66     adc #0
     67     sta *src+1
     68     dex
     69     bne .copy_tiles_loop
     70     rts
     71 
     72 .copy_tiles_indirect:
     73     sta *.ppu_addr_hi
     74 .copy_tiles_indirect_loop:
     75     stx *tmpX
     76     ;
     77     ldx *.ppu_addr_hi
     78     lda *.ppu_addr_lo
     79     jsr .ppu_stripe_begin_horizontal
     80     ;
     81     ldx *__vram_transfer_buffer_pos_w
     82     ldy #0
     83     jsr .copy_tiles_indirect_2planes
     84     lda .identity+16,x
     85     sta *__vram_transfer_buffer_pos_w
     86     jsr .ppu_stripe_end
     87     ; src += 16
     88     lda *src
     89     clc
     90     adc #16
     91     sta *src
     92     lda *src+1
     93     adc #0
     94     sta *src+1
     95     ; tmp += 16
     96     lda *.ppu_addr_lo
     97     clc
     98     adc #16
     99     sta *.ppu_addr_lo
    100     lda *.ppu_addr_hi
    101     adc #0
    102     sta *.ppu_addr_hi
    103     ;
    104     ldx *tmpX
    105     dex
    106     bne .copy_tiles_indirect_loop
    107     rts
    108 
    109 .copy_tiles_1plane:
    110     lda [*src],y
    111     iny
    112     iny
    113     sta PPUDATA
    114     ;
    115     lda [*src],y
    116     iny
    117     iny
    118     sta PPUDATA
    119     ;
    120     lda [*src],y
    121     iny
    122     iny
    123     sta PPUDATA
    124     ;
    125     lda [*src],y
    126     iny
    127     iny
    128     sta PPUDATA
    129     ;
    130     lda [*src],y
    131     iny
    132     iny
    133     sta PPUDATA
    134     ;
    135     lda [*src],y
    136     iny
    137     iny
    138     sta PPUDATA
    139     ;
    140     lda [*src],y
    141     iny
    142     iny
    143     sta PPUDATA
    144     ;
    145     lda [*src],y
    146     iny
    147     iny
    148     sta PPUDATA
    149     ;
    150     rts
    151 
    152 .copy_tiles_indirect_2planes:
    153     lda [*src],y
    154     iny
    155     sta __vram_transfer_buffer+0,x
    156     lda [*src],y
    157     iny
    158     sta __vram_transfer_buffer+8,x
    159     ;
    160     lda [*src],y
    161     iny
    162     sta __vram_transfer_buffer+1,x
    163     lda [*src],y
    164     iny
    165     sta __vram_transfer_buffer+9,x
    166     ;
    167     lda [*src],y
    168     iny
    169     sta __vram_transfer_buffer+2,x
    170     lda [*src],y
    171     iny
    172     sta __vram_transfer_buffer+10,x
    173     ;
    174     lda [*src],y
    175     iny
    176     sta __vram_transfer_buffer+3,x
    177     lda [*src],y
    178     iny
    179     sta __vram_transfer_buffer+11,x
    180     ;
    181     lda [*src],y
    182     iny
    183     sta __vram_transfer_buffer+4,x
    184     lda [*src],y
    185     iny
    186     sta __vram_transfer_buffer+12,x
    187     ;
    188     lda [*src],y
    189     iny
    190     sta __vram_transfer_buffer+5,x
    191     lda [*src],y
    192     iny
    193     sta __vram_transfer_buffer+13,x
    194     ;
    195     lda [*src],y
    196     iny
    197     sta __vram_transfer_buffer+6,x
    198     lda [*src],y
    199     iny
    200     sta __vram_transfer_buffer+14,x
    201     ;
    202     lda [*src],y
    203     iny
    204     sta __vram_transfer_buffer+7,x
    205     lda [*src],y
    206     iny
    207     sta __vram_transfer_buffer+15,x
    208     ;
    209     rts

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