aboutsummaryrefslogtreecommitdiffstats
path: root/src/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.c')
-rw-r--r--src/main.c65
1 files changed, 5 insertions, 60 deletions
diff --git a/src/main.c b/src/main.c
index b14fbed..a322df2 100644
--- a/src/main.c
+++ b/src/main.c
@@ -13,6 +13,7 @@ WITH REGARD TO THIS SOFTWARE.
13 13
14#include "filesystem.c" 14#include "filesystem.c"
15#include "renderer.c" 15#include "renderer.c"
16#include "sequencer.c"
16 17
17// 18//
18// Config parameters. 19// Config parameters.
@@ -37,11 +38,14 @@ WITH REGARD TO THIS SOFTWARE.
37 txt_position((PROF_SHOW_X), (PROF_SHOW_Y)+1);\ 38 txt_position((PROF_SHOW_X), (PROF_SHOW_Y)+1);\
38 txt_printf("FLIP: %lu ", flip_cycles);\ 39 txt_printf("FLIP: %lu ", flip_cycles);\
39 txt_position((PROF_SHOW_X), (PROF_SHOW_Y)+2);\ 40 txt_position((PROF_SHOW_X), (PROF_SHOW_Y)+2);\
41 txt_printf("INPUT: %lu ", input_cycles);\
42 txt_position((PROF_SHOW_X), (PROF_SHOW_Y)+3);\
40 txt_printf("FRAME: %lu ", frame_counter);\ 43 txt_printf("FRAME: %lu ", frame_counter);\
41 frame_counter++;\ 44 frame_counter++;\
42 } while (0) 45 } while (0)
43#define PROF_INIT() \ 46#define PROF_INIT() \
44 u32 frame_counter = 0;\ 47 u32 frame_counter = 0;\
48 u32 input_cycles = 0;\
45 u32 eval_cycles = 0;\ 49 u32 eval_cycles = 0;\
46 u32 flip_cycles = 0; 50 u32 flip_cycles = 0;
47#else 51#else
@@ -50,66 +54,6 @@ WITH REGARD TO THIS SOFTWARE.
50#define PROF_INIT() 54#define PROF_INIT()
51#endif 55#endif
52 56
53#define TRIG_W 15
54#define TRIG_H 24
55#define TRIG_START_X 66
56#define TRIG_START_Y 90
57#define TRIG_OFFSET_X (TRIG_W + 4)
58#define TRIG_OFFSET_Y (TRIG_H + 7)
59
60void
61draw_triggers(void) {
62 for (size_t i = 0; i < 8; i++) {
63 size_t x0 = TRIG_START_X + TRIG_OFFSET_X * i;
64 size_t x1 = TRIG_START_X + TRIG_W + TRIG_OFFSET_X * i;
65 size_t y0 = TRIG_START_Y;
66 size_t y1 = TRIG_START_Y + TRIG_H;
67 draw_rect(x0, y0, x1, y1, 1);
68 }
69 for (size_t i = 0; i < 8; i++) {
70 size_t x0 = TRIG_START_X + TRIG_OFFSET_X * i;
71 size_t x1 = TRIG_START_X + TRIG_W + TRIG_OFFSET_X * i;
72 size_t y0 = TRIG_START_Y + TRIG_OFFSET_Y;
73 size_t y1 = TRIG_START_Y + TRIG_H + TRIG_OFFSET_Y;
74 draw_rect(x0, y0, x1, y1, 1);
75 }
76}
77
78#define CHAN_START_X 35
79#define CHAN_START_Y 90
80#define CHAN_OFFSET_Y 12
81
82void
83draw_channels(void) {
84 // Contains 5 channel buttons: Ch. 1-4 + FM. We are only drawing the DMG
85 // channels for now, since FM may take some time to develop.
86 u32 channel_buttons[] = {
87 0xff017111, 0x117101ff, 0xff008585, 0x879500ff,
88 0x0f080808, 0x0808080f, 0xff01b989, 0x89b901ff,
89 0xff004242, 0x434a00ff, 0x0f080909, 0x0909080f,
90 0xff015d45, 0xc55d01ff, 0xff00a1a1, 0xa1a500ff,
91 0x0f080a0a, 0x0a0a080f, 0xff015d45, 0xc55d01ff,
92 0xff00a1a1, 0xa12500ff, 0x0f080a0a, 0x0a0b080f,
93 0xff01c141, 0xc14101ff, 0xff00151c, 0x141400ff,
94 0x0f080808, 0x0808080f,
95 };
96 Tile channel_tiles[3 * 4] = {0};
97 unpack_tiles(channel_buttons, channel_tiles, 3 * 4);
98 size_t k = 0;
99 for (size_t i = 0; i < 4; i++) {
100 size_t y = CHAN_START_Y + i * CHAN_OFFSET_Y;
101 draw_tile(CHAN_START_X, y, channel_tiles + k++, false);
102 draw_tile(CHAN_START_X + 8, y, channel_tiles + k++, false);
103 draw_tile(CHAN_START_X + 16, y, channel_tiles + k++, false);
104 }
105}
106
107void
108sequencer_init(void) {
109 draw_triggers();
110 draw_channels();
111}
112
113int main(void) { 57int main(void) {
114 // Adjust system wait times. 58 // Adjust system wait times.
115 SYSTEM_WAIT = SYSTEM_WAIT_CARTRIDGE; 59 SYSTEM_WAIT = SYSTEM_WAIT_CARTRIDGE;
@@ -132,6 +76,7 @@ int main(void) {
132 while (true) { 76 while (true) {
133 bios_vblank_wait(); 77 bios_vblank_wait();
134 PROF(flip_buffer(), flip_cycles); 78 PROF(flip_buffer(), flip_cycles);
79 PROF(handle_sequencer_input(), input_cycles);
135 PROF_SHOW(); 80 PROF_SHOW();
136 } 81 }
137 82