initial commit
[megatris] / src / main.c
1 #include <stdint.h>
2 #include "vdp.h"
3 #include "io.h"
4 #include "pad.h"
5 #include "intr.h"
6
7 void load_pattern(int idx, void *data);
8 void set_tile(int nametab_idx, int x, int y, int tile_idx, int palidx);
9
10
11 int main(void)
12 {
13         int i;
14         int bgcol = 0;
15
16         vdp_init();
17         io_init();
18
19         if(IO_REG_VER & IO_VER_PAL) {
20                 vdp_setreg(VDP_REG_MODE2, vdp_getreg(VDP_REG_MODE2));
21         }
22
23         vdp_begin_palette(0, 0);
24         for(i=0; i<16; i++) {
25                 int r = i;
26                 int g = 15 - i;
27                 int b = i - 8;
28
29                 if(r > 7) r = 7;
30                 if(g > 7) g = 7;
31                 if(b < 0) b = 0;
32
33                 VDP_PORT_DATA = VDP_PACK_RGB(r, g, b);
34         }
35         vdp_set_bgcolor(0, bgcol);
36
37         for(;;) {
38                 pad_update(0);
39
40                 if(pad_pressed(0, IO_PAD_C)) {
41                         vdp_set_bgcolor(0, ++bgcol & 0xf);
42                 }
43
44                 vdp_wait_vblank();
45         }
46
47         return 0;
48 }
49
50 void load_pattern(int idx, void *data)
51 {
52         int i;
53         uint32_t *ptr = data;
54         uint16_t addr = idx << 5;
55         vdp_setup_access(addr, VDP_MEM_WRITE, VDP_MEM_VRAM);
56
57         for(i=0; i<16; i++) {
58                 VDP_PORT_DATA32 = *ptr++;
59         }
60 }
61
62 void set_tile(int nametab_idx, int x, int y, int tile_idx, int palidx)
63 {
64         uint16_t tile_ent, addr;
65
66         tile_ent = vdp_nametab_entry(tile_idx, palidx, VDP_TILE_LOW_PRIO);
67
68         addr = vdp_nametab_addr(nametab_idx) + (y * 64 + x) * 2;
69         vdp_setup_access(addr, VDP_MEM_WRITE, VDP_MEM_VRAM);
70         VDP_PORT_DATA = tile_ent;
71 }