Skip to content

Instantly share code, notes, and snippets.

@stephan-vandenheuvel
Created December 25, 2014 21:02
Show Gist options
  • Save stephan-vandenheuvel/b51cb3689b705520318d to your computer and use it in GitHub Desktop.
Save stephan-vandenheuvel/b51cb3689b705520318d to your computer and use it in GitHub Desktop.
//GCC DEFAULT
void sprite_set(u8 id, u8 xpos, u8 ypos, u16 sprite_number) {
104: e52db004 push {fp} ; (str fp, [sp, #-4]!)
108: e28db000 add fp, sp, #0
10c: e24dd010 sub sp, sp, #16
110: e54b0004 strb r0, [fp, #-4]
114: e54b1008 strb r1, [fp, #-8]
118: e54b200c strb r2, [fp, #-12]
11c: e14b31b0 strh r3, [fp, #-16]
//TODO: attr3 only shows up every 4th sprite ...
//This index is wrong
((struct Sprite*) (MEM_OAM))[id].attr0 = ypos | ATTR0_8BPP;
120: e55b3004 ldrb r3, [fp, #-4]
124: e1a03183 lsl r3, r3, #3
128: e2833407 add r3, r3, #117440512 ; 0x7000000
12c: e55b200c ldrb r2, [fp, #-12]
130: e1a02802 lsl r2, r2, #16
134: e1a02822 lsr r2, r2, #16
138: e3822a02 orr r2, r2, #8192 ; 0x2000
13c: e1a02802 lsl r2, r2, #16
140: e1a02822 lsr r2, r2, #16
144: e1c320b0 strh r2, [r3]
((struct Sprite*) (MEM_OAM))[id].attr1 = (u16) xpos;
148: e55b3004 ldrb r3, [fp, #-4]
14c: e1a03183 lsl r3, r3, #3
150: e2833407 add r3, r3, #117440512 ; 0x7000000
154: e55b2008 ldrb r2, [fp, #-8]
158: e1a02802 lsl r2, r2, #16
15c: e1a02822 lsr r2, r2, #16
160: e1c320b2 strh r2, [r3, #2]
((struct Sprite*) (MEM_OAM))[id].attr2 = sprite_number;
164: e55b3004 ldrb r3, [fp, #-4]
168: e1a03183 lsl r3, r3, #3
16c: e2833407 add r3, r3, #117440512 ; 0x7000000
170: e15b21b0 ldrh r2, [fp, #-16]
174: e1c320b4 strh r2, [r3, #4]
}
178: e28bd000 add sp, fp, #0
17c: e8bd0800 ldmfd sp!, {fp}
180: e12fff1e bx lr
//NO GCC PACKING
void sprite_set(u8 id, u8 xpos, u8 ypos, u16 sprite_number) {
104: e52db004 push {fp} ; (str fp, [sp, #-4]!)
108: e28db000 add fp, sp, #0
10c: e24dd010 sub sp, sp, #16
110: e54b0004 strb r0, [fp, #-4]
114: e54b1008 strb r1, [fp, #-8]
118: e54b200c strb r2, [fp, #-12]
11c: e14b31b0 strh r3, [fp, #-16]
//TODO: attr3 only shows up every 4th sprite ...
//This index is wrong
((struct Sprite*) (MEM_OAM))[id].attr0 = ypos | ATTR0_8BPP;
120: e55b3004 ldrb r3, [fp, #-4]
124: e1a03183 lsl r3, r3, #3
128: e2833407 add r3, r3, #117440512 ; 0x7000000
12c: e55b200c ldrb r2, [fp, #-12]
130: e1a02802 lsl r2, r2, #16
134: e1a02822 lsr r2, r2, #16
138: e3822a02 orr r2, r2, #8192 ; 0x2000
13c: e1a02802 lsl r2, r2, #16
140: e1a02822 lsr r2, r2, #16
144: e20210ff and r1, r2, #255 ; 0xff
148: e3a00000 mov r0, #0
14c: e1801001 orr r1, r0, r1
150: e5c31000 strb r1, [r3]
154: e1a02422 lsr r2, r2, #8
158: e1a02802 lsl r2, r2, #16
15c: e1a02822 lsr r2, r2, #16
160: e3a01000 mov r1, #0
164: e1812002 orr r2, r1, r2
168: e5c32001 strb r2, [r3, #1]
((struct Sprite*) (MEM_OAM))[id].attr1 = (u16) xpos;
16c: e55b3004 ldrb r3, [fp, #-4]
170: e1a03183 lsl r3, r3, #3
174: e2833407 add r3, r3, #117440512 ; 0x7000000
178: e55b2008 ldrb r2, [fp, #-8]
17c: e1a02802 lsl r2, r2, #16
180: e1a02822 lsr r2, r2, #16
184: e20210ff and r1, r2, #255 ; 0xff
188: e3a00000 mov r0, #0
18c: e1801001 orr r1, r0, r1
190: e5c31002 strb r1, [r3, #2]
194: e1a02422 lsr r2, r2, #8
198: e1a02802 lsl r2, r2, #16
19c: e1a02822 lsr r2, r2, #16
1a0: e3a01000 mov r1, #0
1a4: e1812002 orr r2, r1, r2
1a8: e5c32003 strb r2, [r3, #3]
((struct Sprite*) (MEM_OAM))[id].attr2 = sprite_number;
1ac: e55b3004 ldrb r3, [fp, #-4]
1b0: e1a03183 lsl r3, r3, #3
1b4: e2833407 add r3, r3, #117440512 ; 0x7000000
1b8: e55b2010 ldrb r2, [fp, #-16]
1bc: e3a01000 mov r1, #0
1c0: e1812002 orr r2, r1, r2
1c4: e5c32004 strb r2, [r3, #4]
1c8: e55b200f ldrb r2, [fp, #-15]
1cc: e3a01000 mov r1, #0
1d0: e1812002 orr r2, r1, r2
1d4: e5c32005 strb r2, [r3, #5]
}
1d8: e28bd000 add sp, fp, #0
1dc: e8bd0800 ldmfd sp!, {fp}
1e0: e12fff1e bx lr
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment