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/metasprites_flipx.s
1 .include "global.s"
2
3 .title "Metasprites"
4 .module Metasprites
5
6 .area GBDKOVR (PAG, OVR)
7 ___move_metasprite_vflip_PARM_2::
8 ___move_metasprite_flipx_PARM_2:: .ds 2
9 ___move_metasprite_vflip_PARM_3::
10 ___move_metasprite_flipx_PARM_3:: .ds 2
11
12 .area _HOME
13
14 .define xPos "___move_metasprite_flipx_PARM_2"
15 .define yPos "___move_metasprite_flipx_PARM_3"
16
17 ; uint8_t __move_metasprite_flipx(uint8_t id, int16_t x, int16_t y)
18
19 ___move_metasprite_flipx::
20 ___move_metasprite_vflip::
21 jsr .move_metasprite_prologue
22 ___move_metasprite_flipx_loop:
23 lda [*___current_metasprite],y ; dy
24 bmi ___move_metasprite_flipx_dyNeg
25 clc
26 adc *yPos
27 sta *yPos
28 bcc 1$
29 inc *yPos+1
30 1$:
31 ___move_metasprite_flipx_loop_writePosY:
32 sta _shadow_OAM+OAM_POS_Y,x
33 lda *yPos+1
34 bne ___move_metasprite_flipx_outsideY
35 iny
36 lda [*___current_metasprite],y ; dx
37 eor #0xFF
38 bmi ___move_metasprite_flipx_dxNeg
39 sec
40 adc *xPos
41 sta *xPos
42 bcc 2$
43 inc *xPos+1
44 2$:
45 ___move_metasprite_flipx_loop_writePosX:
46 sta _shadow_OAM+OAM_POS_X,x
47 lda *xPos+1
48 bne ___move_metasprite_flipx_outsideX
49 iny
50 lda [*___current_metasprite],y ; tile index
51 iny
52 clc
53 adc *___current_base_tile
54 sta _shadow_OAM+OAM_TILE_INDEX,x
55 lda [*___current_metasprite],y ; props
56 eor #OAMF_XFLIP
57 adc *___current_base_prop
58 iny
59 sta _shadow_OAM+OAM_ATTRIBUTES,x
60 inx
61 inx
62 inx
63 inx
64 bne ___move_metasprite_flipx_loop
65 ___move_metasprite_flipx_end:
66 jmp .move_metasprite_epilogue
67
68 ___move_metasprite_flipx_dxNeg:
69 sec
70 adc *xPos
71 sta *xPos
72 bcs 1$
73 dec *xPos+1
74 1$:
75 jmp ___move_metasprite_flipx_loop_writePosX
76
77 ___move_metasprite_flipx_dyNeg:
78 cmp #0x80
79 beq ___move_metasprite_flipx_end
80 clc
81 adc *yPos
82 sta *yPos
83 bcs 1$
84 dec *yPos+1
85 1$:
86 jmp ___move_metasprite_flipx_loop_writePosY
87
88 ___move_metasprite_flipx_outsideY:
89 iny
90 lda [*___current_metasprite],y ; dx
91 eor #0xFF
92 bmi ___move_metasprite_flipx_outsideY_dxNeg
93 sec
94 adc *xPos
95 sta *xPos
96 bcc ___move_metasprite_flipx_outsideX
97 inc *xPos+1
98 ___move_metasprite_flipx_outsideX:
99 iny
100 ; Skip tile index / props
101 iny
102 iny
103 lda #0xF0
104 sta _shadow_OAM+OAM_POS_Y,x
105 jmp ___move_metasprite_flipx_loop
106
107 ___move_metasprite_flipx_outsideY_dxNeg:
108 sec
109 adc *xPos
110 sta *xPos
111 bcs 1$
112 dec *xPos+1
113 1$:
114 jmp ___move_metasprite_flipx_outsideX
This webpage is intended to be an accessible preview of this repository. To get a fuller picture, clone it and use the git CLI.