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.