From fdf1a42bba882acc87db3bdd322f4458367d0952 Mon Sep 17 00:00:00 2001 From: Clyne Sullivan Date: Sun, 29 Nov 2020 08:04:13 -0500 Subject: display optimization; sprites --- main.c | 162 ++++++++++++++++++++++++++++++++++++++--------------------------- 1 file changed, 95 insertions(+), 67 deletions(-) (limited to 'main.c') diff --git a/main.c b/main.c index 126c47e..e7949a8 100644 --- a/main.c +++ b/main.c @@ -1,67 +1,95 @@ -/** - * main.c - Firmware entry point and main loop for game or testing. - * Copyright (C) 2020 Clyne Sullivan - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * See the GNU General Public License for more details. - */ - -#include "buttons.h" -#include "ch.h" -#include "dogs.h" -#include "hal.h" - -/* - * Progress: - * - Serial through LPUART1 works (38400 baud, takes over swdio pins) - * - Display comm. over SPI, can clear screen - * - Can read buttons through PAL (through interrupts now) - */ - -THD_WORKING_AREA(waThread2, 96); -THD_FUNCTION(Thread2, arg) -{ - (void)arg; - - dogs_init(); - - while (1) { - chThdSleepMilliseconds(100); - dogs_buffer[0] = button_state; - dogs_buffer[1] = button_state; - dogs_buffer[2] = button_state; - dogs_buffer[3] = button_state; - dogs_flush(); - } -} - -THD_TABLE_BEGIN - THD_TABLE_THREAD(0, "game", waThread2, Thread2, NULL) -THD_TABLE_END - -int main(void) -{ - halInit(); - chSysInit(); - - buttons_init(); - - // Below code for serial -- note that it cuts off debugging, and MUST be used in a thread - //chThdSleepMilliseconds(2000); - //palSetPadMode(GPIOA, 13, PAL_MODE_ALTERNATE(6)); - //palSetPadMode(GPIOA, 14, PAL_MODE_ALTERNATE(6)); - //sdStart(&LPSD1, NULL); - //chnWrite(&LPSD1, (const uint8_t *)"Hello World!\r\n", 14); - - - - /* This is now the idle thread loop, you may perform here a low priority - task but YOU MUST NEVER TRY TO SLEEP OR WAIT in this loop. Note that - this tasks runs at the lowest priority level so any instruction added - here will be executed after all other tasks have been started. */ - while (1); -} - +/** + * main.c - Firmware entry point and main loop for game or testing. + * Copyright (C) 2020 Clyne Sullivan + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * See the GNU General Public License for more details. + */ + +#include "buttons.h" +#include "ch.h" +#include "dogs.h" +#include "hal.h" + +/* + * Progress: + * - Serial through LPUART1 works (38400 baud, takes over swdio pins) + * - Display comm. over SPI, can clear screen + * - Can read buttons through PAL (through interrupts now) + */ + +THD_WORKING_AREA(waThread2, 96); +THD_FUNCTION(Thread2, arg) +{ + (void)arg; + + dogs_init(); + + const unsigned char testbitmap[] = { + 8, 8, + 0b00111100, + 0b01100110, + 0b01000010, + 0b01111110, + 0b01100110, + 0b01000010, + 0b11000000, + 0b11000000, + }; + + + int x = 0, y = 0; + while (1) { + chThdSleepMilliseconds(100); + + unsigned char b = button_state; + if ((b & (BUTTON_JOYUR | BUTTON_JOYUL)) == (BUTTON_JOYUR | BUTTON_JOYUL)) + y--; + else if ((b & (BUTTON_JOYUR | BUTTON_JOYDR)) == (BUTTON_JOYUR | BUTTON_JOYDR)) + x++; + else if ((b & (BUTTON_JOYDR | BUTTON_JOYDL)) == (BUTTON_JOYDR | BUTTON_JOYDL)) + y++; + else if ((b & (BUTTON_JOYDL | BUTTON_JOYUL)) == (BUTTON_JOYDL | BUTTON_JOYUL)) + x--; + + dogs_clear(); + draw_bitmap(x, y, testbitmap); + dogs_flush(); + } +} + +THD_TABLE_BEGIN + THD_TABLE_THREAD(0, "game", waThread2, Thread2, NULL) +THD_TABLE_END + +int main(void) +{ + halInit(); + chSysInit(); + + buttons_init(); + + // Below code for serial -- note that it cuts off debugging, and MUST be used in a thread + //chThdSleepMilliseconds(2000); + //palSetPadMode(GPIOA, 13, PAL_MODE_ALTERNATE(6)); + //palSetPadMode(GPIOA, 14, PAL_MODE_ALTERNATE(6)); + //sdStart(&LPSD1, NULL); + //chnWrite(&LPSD1, (const uint8_t *)"Hello World!\r\n", 14); + + + + /* This is now the idle thread loop, you may perform here a low priority + task but YOU MUST NEVER TRY TO SLEEP OR WAIT in this loop. Note that + this tasks runs at the lowest priority level so any instruction added + here will be executed after all other tasks have been started. */ + while (1); +} + +void HardFault_Handler() +{ + while (1); +} + -- cgit v1.2.3