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

      1     .module SetNativeData
      2 
      3     .include "global.s"
      4 
      5     .area	GBDKOVR (PAG, OVR)
      6     _set_sprite_native_data_PARM_3::
      7     _set_bkg_native_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_native_data::
     16     sta *.ppu_addr_lo
     17     lda *_set_bkg_data_PARM_3
     18     sta *src
     19     lda *_set_bkg_data_PARM_3+1
     20     sta *src+1
     21     lda *_shadow_PPUCTRL
     22     and #PPUCTRL_BG_CHR
     23     lsr
     24     jmp .copy_tiles
     25 _set_sprite_native_data::
     26     sta *.ppu_addr_lo
     27     lda *_set_sprite_data_PARM_3
     28     sta *src
     29     lda *_set_sprite_data_PARM_3+1
     30     sta *src+1
     31     lda *_shadow_PPUCTRL
     32     and #PPUCTRL_SPR_CHR
     33 .copy_tiles:
     34     lsr
     35     lsr
     36     lsr
     37     ; *= 16
     38     asl *.ppu_addr_lo
     39     rol
     40     asl *.ppu_addr_lo
     41     rol
     42     asl *.ppu_addr_lo
     43     rol
     44     asl *.ppu_addr_lo
     45     rol
     46     bit *__oam_valid_display_on
     47     bvc .copy_tiles_indirect
     48     ; Direct write
     49     sta PPUADDR
     50     lda *.ppu_addr_lo
     51     sta PPUADDR
     52 .copy_tiles_loop:
     53     ldy #0
     54 1$:
     55     lda [*src],y
     56     sta PPUDATA
     57     iny
     58     cpy #16
     59     bne 1$
     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     jsr .copy_tiles_indirect_2planes
     82     jsr .ppu_stripe_end
     83     ; src += 16
     84     lda *src
     85     clc
     86     adc #16
     87     sta *src
     88     lda *src+1
     89     adc #0
     90     sta *src+1
     91     ; tmp += 16
     92     lda *.ppu_addr_lo
     93     clc
     94     adc #16
     95     sta *.ppu_addr_lo
     96     lda *.ppu_addr_hi
     97     adc #0
     98     sta *.ppu_addr_hi
     99     ;
    100     ldx *tmpX
    101     dex
    102     bne .copy_tiles_indirect_loop
    103     rts
    104 
    105 .copy_tiles_indirect_2planes:
    106     lda *__vram_transfer_buffer_pos_w
    107     clc
    108     adc #16
    109     sta *__vram_transfer_buffer_pos_w
    110     tax
    111     dex
    112     ldy #15
    113 1$:
    114     lda [*src],y
    115     sta __vram_transfer_buffer,x
    116     dex
    117     dey
    118     bpl 1$
    119     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.