sprite DMA works
[mdlife] / src / main.c
1 #include <stdio.h>
2 #include "z80.h"
3 #include "vdp.h"
4 #include "sprite.h"
5 #include "debug.h"
6
7 #define SPRITE_BASE             0x8000
8 extern uint16_t cellspr_data[], cellspr_data_end[];
9
10 uint32_t dbgval[4];
11
12 int main(void)
13 {
14         uint16_t *src;
15         int tile, i;
16
17         z80_init();
18         vdp_init();
19         dbg_init();
20
21         for(i=0; i<16; i++) {
22                 vdp_setcolor(0, i, i, i, i);
23         }
24
25         /* upload sprite tiles */
26         src = cellspr_data;
27         vdp_setup_addr(VDP_VRAM, SPRITE_BASE);
28         while(src < cellspr_data_end) {
29                 VDP_DATA = *src++;
30         }
31
32         dbg_setcursor(0, 0);
33         printf("xyzzy");
34
35         for(;;) {
36                 dbg_setcursor(32, 0);
37                 for(i=0; i<4; i++) {
38                         printf("%08x\n", (unsigned int)dbgval[i]);
39                 }
40                 spr_begin();
41                 tile = VDP_ADDR2TILE(SPRITE_BASE);
42                 spr_add(160, 50, VDP_TILENAME(tile, 0, VDP_TILE_FG), SPR_SIZE(1,1));
43                 tile++;
44                 spr_add(160, 60, VDP_TILENAME(tile, 0, VDP_TILE_FG), SPR_SIZE(1,1));
45                 tile++;
46                 spr_add(160, 75, VDP_TILENAME(tile, 0, VDP_TILE_FG), SPR_SIZE(1,1));
47                 tile++;
48                 spr_add(156, 90, VDP_TILENAME(tile, 0, VDP_TILE_FG), SPR_SIZE(1,1));
49                 spr_add(164, 90, VDP_TILENAME(tile, 0, VDP_TILE_FG | VDP_TILE_HFLIP), SPR_SIZE(1,1));
50                 spr_add(156, 98, VDP_TILENAME(tile, 0, VDP_TILE_FG | VDP_TILE_VFLIP), SPR_SIZE(1,1));
51                 spr_add(164, 98, VDP_TILENAME(tile, 0, VDP_TILE_FG | VDP_TILE_HVFLIP), SPR_SIZE(1,1));
52                 tile++;
53                 spr_add(148, 120, VDP_TILENAME(tile, 0, VDP_TILE_FG), SPR_SIZE(2, 2));
54                 spr_add(164, 120, VDP_TILENAME(tile, 0, VDP_TILE_FG | VDP_TILE_HFLIP), SPR_SIZE(2, 2));
55                 spr_add(148, 136, VDP_TILENAME(tile, 0, VDP_TILE_FG | VDP_TILE_VFLIP), SPR_SIZE(2, 2));
56                 spr_add(164, 136, VDP_TILENAME(tile, 0, VDP_TILE_FG | VDP_TILE_HVFLIP), SPR_SIZE(2, 2));
57
58                 vdp_wait_vblank();
59                 spr_submit();
60         }
61
62         return 0;
63 }