fixed 8bit writes to vmem, unaligned data buffers, and started on
[gba_blender] / src / main.c
index a519dc0..30d92c2 100644 (file)
@@ -26,6 +26,8 @@ along with this program.  If not, see <https://www.gnu.org/licenses/>.
 #include "polyfill.h"
 #include "debug.h"
 #include "meshdata.h"
+#include "sprites.h"
+#include "dma.h"
 
 #define MENU_HEIGHT            17
 #define TRACK_HEIGHT   18
@@ -76,7 +78,7 @@ int main(void)
        set_intr();
 
        /* mode 4: 240x160 8bpp */
-       REG_DISPCNT = DISPCNT_BG2 | 4;
+       REG_DISPCNT = DISPCNT_BG2 | DISPCNT_OBJ | 4;
 
        fbptr[0] = (unsigned char*)VRAM_LFB_FB0_ADDR;
        fbptr[1] = (unsigned char*)VRAM_LFB_FB1_ADDR;
@@ -94,8 +96,11 @@ int main(void)
                r = i / 5 + 6;
                *cptr++ = r | (r << 5) | (r << 10);
        }
-       memcpy(fbptr[0], bgimg_pixels, 240 * 160);
-       memcpy(fbptr[1], bgimg_pixels, 240 * 160);
+       dma_copy16(3, fbptr[0], bgimg_pixels, 240 * 160 / 2);
+       dma_copy16(3, fbptr[1], bgimg_pixels, 240 * 160 / 2);
+
+       init_sprites();
+       set_sprite(0, 0, 512, 42, 42, 0, SPR_SZ64);
 
        xgl_init();
        xgl_viewport(0, 0, 240, VP_HEIGHT);
@@ -128,13 +133,11 @@ int main(void)
                        } else {
                                xgl_draw(XGL_LINES, gridaxes + 6, 2);   /* -Z */
                        }
-
                        if(show_obj == 1) {
                                xgl_draw(XGL_QUADS, cube, sizeof cube / sizeof *cube);
                        } else {
                                xgl_draw(XGL_TRIANGLES, suzanne, sizeof suzanne / sizeof *suzanne);
                        }
-
                        if(cam_theta < X_PI) {
                                xgl_draw(XGL_LINES, gridaxes, 2);               /* +X */
                        } else {