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

      1     .include    "global.s"
      2 
      3     .area   GBDKOVR (PAG, OVR)
      4     _set_bkg_tile_xy_PARM_3::
      5     _set_win_tile_xy_PARM_3::   .ds 1   ; (shared with _set_vram_byte_PARM_2)
      6     .bkg_tile_ppu_addr::        .ds 2
      7     .ppuhi:                     .ds 1
      8 
      9     .area   _HOME
     10 
     11 .ifdef NES_TILEMAP_S
     12 .define PPUHI_MASK "#>PPU_NT0"
     13 .else
     14 .define PPUHI_MASK "*.ppuhi"
     15 .endif
     16 
     17 .ifdef NES_WINDOW_LAYER
     18 _get_win_xy_addr::
     19     jsr _get_bkg_xy_addr
     20     tay
     21     txa
     22     ora #PPUHI_WIN
     23     tax
     24     tya
     25     rts
     26 .endif
     27 
     28 _get_bkg_xy_addr::
     29     ; XA = (PPU_NT0) | (X << 5) | A
     30     ; (A = x_pos, X = y_pos)
     31 .ifne NT_2W
     32     tay
     33 .endif
     34     and #NT_WIDTH-1
     35     sta *.bkg_tile_ppu_addr
     36 .ifne NT_2W
     37     tya
     38     ; .ppuhi = (xpos >> 3) & 0b00000100
     39     lsr
     40     lsr
     41     lsr
     42     and #0b00000100
     43     ora #>PPU_NT0
     44     sta *.ppuhi
     45 .else
     46 .ifne NT_2H
     47     lda #>PPU_NT0
     48     sta *.ppuhi
     49 .endif
     50 .endif
     51 .ifne NT_2H
     52     ; .ppuhi |= ((ypos / DEVICE_SCREEN_BUFFER_HEIGHT) << 3) & 0b00001000
     53     ldy #0
     54     txa
     55     cmp #NT_HEIGHT
     56     bcc 1$
     57     sbc #NT_HEIGHT  ; Assumes carry set by cmp
     58     iny
     59 1$:
     60     tax
     61     tya
     62     asl
     63     asl
     64     asl
     65     and #0b00001000
     66     ora *.ppuhi
     67     sta *.ppuhi
     68 .endif
     69     txa
     70     asl
     71     asl
     72     asl
     73     asl
     74     rol *.bkg_tile_ppu_addr+1
     75     asl
     76     ora *.bkg_tile_ppu_addr
     77     sta *.bkg_tile_ppu_addr
     78     lda *.bkg_tile_ppu_addr+1
     79     rol
     80     and #0x03
     81     ora PPUHI_MASK
     82     tax
     83     lda *.bkg_tile_ppu_addr
     84     rts
     85 
     86 _set_bkg_tile_xy::
     87     jsr _get_bkg_xy_addr
     88     jmp _set_vram_byte
     89 
     90 .ifdef NES_WINDOW_LAYER
     91 _set_win_tile_xy::
     92     jsr _get_bkg_xy_addr
     93     pha
     94     txa
     95     ora #PPUHI_WIN
     96     tax
     97     pla
     98     jsr _set_vram_byte
     99     rts
    100 .endif

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