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_flipxy.s
1 .include "global.s"
2
3 .title "Metasprites"
4 .module Metasprites
5
6 .area GBDKOVR (PAG, OVR)
7 ___move_metasprite_hvflip_PARM_2::
8 ___move_metasprite_flipxy_PARM_2:: .ds 2
9 ___move_metasprite_hvflip_PARM_3::
10 ___move_metasprite_flipxy_PARM_3:: .ds 2
11
12 .area _HOME
13
14 .define xPos "___move_metasprite_flipxy_PARM_2"
15 .define yPos "___move_metasprite_flipxy_PARM_3"
16
17 ; uint8_t __move_metasprite_flipxy(uint8_t id, int16_t x, int16_t y)
18
19 ___move_metasprite_flipxy::
20 ___move_metasprite_hvflip::
21 jsr .move_metasprite_prologue
22 ___move_metasprite_flipxy_loop:
23 lda [*___current_metasprite],y ; dy
24 eor #0xFF
25 bpl ___move_metasprite_flipxy_dyNeg
26 sec
27 adc *yPos
28 sta *yPos
29 bcs 1$
30 dec *yPos+1
31 1$:
32 ___move_metasprite_flipxy_loop_writePosY:
33 sta _shadow_OAM+OAM_POS_Y,x
34 lda *yPos+1
35 bne ___move_metasprite_flipxy_outsideY
36 iny
37 lda [*___current_metasprite],y ; dx
38 eor #0xFF
39 bmi ___move_metasprite_flipxy_dxNeg
40 sec
41 adc *xPos
42 sta *xPos
43 bcc 2$
44 inc *xPos+1
45 2$:
46 ___move_metasprite_flipxy_loop_writePosX:
47 sta _shadow_OAM+OAM_POS_X,x
48 lda *xPos+1
49 bne ___move_metasprite_flipxy_outsideX
50 iny
51 lda [*___current_metasprite],y ; tile index
52 iny
53 clc
54 adc *___current_base_tile
55 sta _shadow_OAM+OAM_TILE_INDEX,x
56 lda [*___current_metasprite],y ; props
57 eor #OAMF_YFLIP+OAMF_XFLIP
58 adc *___current_base_prop
59 iny
60 sta _shadow_OAM+OAM_ATTRIBUTES,x
61 inx
62 inx
63 inx
64 inx
65 bne ___move_metasprite_flipxy_loop
66 ___move_metasprite_flipxy_end:
67 jmp .move_metasprite_epilogue
68
69 ___move_metasprite_flipxy_dxNeg:
70 sec
71 adc *xPos
72 sta *xPos
73 bcs 1$
74 dec *xPos+1
75 1$:
76 jmp ___move_metasprite_flipxy_loop_writePosX
77
78 ___move_metasprite_flipxy_dyNeg:
79 cmp #0x7F
80 beq ___move_metasprite_flipxy_end
81 sec
82 adc *yPos
83 sta *yPos
84 bcc 1$
85 inc *yPos+1
86 1$:
87 jmp ___move_metasprite_flipxy_loop_writePosY
88
89 ___move_metasprite_flipxy_outsideY:
90 iny
91 lda [*___current_metasprite],y ; dx
92 eor #0xFF
93 bmi ___move_metasprite_flipxy_outsideY_dxNeg
94 sec
95 adc *xPos
96 sta *xPos
97 bcc ___move_metasprite_flipxy_outsideX
98 inc *xPos+1
99 ___move_metasprite_flipxy_outsideX:
100 iny
101 ; Skip tile index / props
102 iny
103 iny
104 lda #0xF0
105 sta _shadow_OAM+OAM_POS_Y,x
106 jmp ___move_metasprite_flipxy_loop
107
108 ___move_metasprite_flipxy_outsideY_dxNeg:
109 sec
110 adc *xPos
111 sta *xPos
112 bcs 1$
113 dec *xPos+1
114 1$:
115 jmp ___move_metasprite_flipxy_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.