From 32cd65387f8ba2ea6a92c1c44da7a31b8ceef4b0 Mon Sep 17 00:00:00 2001 From: Bad Diode Date: Tue, 8 Jun 2021 10:15:44 +0200 Subject: Add drawing of triggers and channel buttons --- src/main.c | 71 +++++++++++++++++++++++++++++++++++++++++++++++---------- src/text/font.h | 7 ------ 2 files changed, 59 insertions(+), 19 deletions(-) (limited to 'src') diff --git a/src/main.c b/src/main.c index 3a15655..b14fbed 100644 --- a/src/main.c +++ b/src/main.c @@ -50,21 +50,66 @@ WITH REGARD TO THIS SOFTWARE. #define PROF_INIT() #endif +#define TRIG_W 15 +#define TRIG_H 24 +#define TRIG_START_X 66 +#define TRIG_START_Y 90 +#define TRIG_OFFSET_X (TRIG_W + 4) +#define TRIG_OFFSET_Y (TRIG_H + 7) + void -test_rects() { - for (size_t i = 0; i < 100; i++) { - // draw_line(0, 10, 10, 10, 1); - // draw_line(10, 10, 10, 20, 1); - // draw_line(0, 0, 10, 10, 2); - // draw_line(0, 20, 20, 14, 1); - // draw_line(0, 0, 239, 159, 2); - // draw_line(0, 159, 239, 0, 3); - // draw_filled_rect(10, 10, SCREEN_WIDTH - 11, SCREEN_HEIGHT - 11, 3); - // draw_filled_rect(10, 10, 13, 21, 3); - draw_filled_rect(10, 10, 20, 20, 3); +draw_triggers(void) { + for (size_t i = 0; i < 8; i++) { + size_t x0 = TRIG_START_X + TRIG_OFFSET_X * i; + size_t x1 = TRIG_START_X + TRIG_W + TRIG_OFFSET_X * i; + size_t y0 = TRIG_START_Y; + size_t y1 = TRIG_START_Y + TRIG_H; + draw_rect(x0, y0, x1, y1, 1); + } + for (size_t i = 0; i < 8; i++) { + size_t x0 = TRIG_START_X + TRIG_OFFSET_X * i; + size_t x1 = TRIG_START_X + TRIG_W + TRIG_OFFSET_X * i; + size_t y0 = TRIG_START_Y + TRIG_OFFSET_Y; + size_t y1 = TRIG_START_Y + TRIG_H + TRIG_OFFSET_Y; + draw_rect(x0, y0, x1, y1, 1); } } +#define CHAN_START_X 35 +#define CHAN_START_Y 90 +#define CHAN_OFFSET_Y 12 + +void +draw_channels(void) { + // Contains 5 channel buttons: Ch. 1-4 + FM. We are only drawing the DMG + // channels for now, since FM may take some time to develop. + u32 channel_buttons[] = { + 0xff017111, 0x117101ff, 0xff008585, 0x879500ff, + 0x0f080808, 0x0808080f, 0xff01b989, 0x89b901ff, + 0xff004242, 0x434a00ff, 0x0f080909, 0x0909080f, + 0xff015d45, 0xc55d01ff, 0xff00a1a1, 0xa1a500ff, + 0x0f080a0a, 0x0a0a080f, 0xff015d45, 0xc55d01ff, + 0xff00a1a1, 0xa12500ff, 0x0f080a0a, 0x0a0b080f, + 0xff01c141, 0xc14101ff, 0xff00151c, 0x141400ff, + 0x0f080808, 0x0808080f, + }; + Tile channel_tiles[3 * 4] = {0}; + unpack_tiles(channel_buttons, channel_tiles, 3 * 4); + size_t k = 0; + for (size_t i = 0; i < 4; i++) { + size_t y = CHAN_START_Y + i * CHAN_OFFSET_Y; + draw_tile(CHAN_START_X, y, channel_tiles + k++, false); + draw_tile(CHAN_START_X + 8, y, channel_tiles + k++, false); + draw_tile(CHAN_START_X + 16, y, channel_tiles + k++, false); + } +} + +void +sequencer_init(void) { + draw_triggers(); + draw_channels(); +} + int main(void) { // Adjust system wait times. SYSTEM_WAIT = SYSTEM_WAIT_CARTRIDGE; @@ -79,12 +124,14 @@ int main(void) { irq_init(); irs_set(IRQ_VBLANK, irs_stub); + // Initialize sequencer. + sequencer_init(); + // Main loop. PROF_INIT(); while (true) { bios_vblank_wait(); PROF(flip_buffer(), flip_cycles); - PROF(test_rects(), eval_cycles); PROF_SHOW(); } diff --git a/src/text/font.h b/src/text/font.h index 65579b8..4f3c319 100644 --- a/src/text/font.h +++ b/src/text/font.h @@ -128,10 +128,3 @@ static const u32 font[] = { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, }; - -u16 palette[16] = { - 0x7fff, 0x0000, 0x7fff, 0x7fff, - 0x7fff, 0x7fff, 0x7fff, 0x7fff, - 0x7fff, 0x7fff, 0x7fff, 0x7fff, - 0x7fff, 0x7fff, 0x7fff, 0x7fff, -}; -- cgit v1.2.1