From cf1effe02d99d74db684ff324a46fa32cf186417 Mon Sep 17 00:00:00 2001 From: lonkaars Date: Wed, 8 Mar 2023 10:41:26 +0100 Subject: fix windows build system and add vscode configuration files --- src/stm32.mk | 3 +++ 1 file changed, 3 insertions(+) (limited to 'src/stm32.mk') diff --git a/src/stm32.mk b/src/stm32.mk index e41bcf9..6926dea 100644 --- a/src/stm32.mk +++ b/src/stm32.mk @@ -17,6 +17,9 @@ SHARED_FLAGS += -I./stm32 ifeq ($(HOST),GNU/Linux) SHARED_FLAGS += -I/usr/arm-none-eabi/include/ endif +ifeq ($(HOST),Msys) +SHARED_FLAGS += -I/mingw64/arm-none-eabi/include/ +endif SHARED_FLAGS += -ffunction-sections SHARED_FLAGS += -fdata-sections SHARED_FLAGS += -Wl,--gc-sections -- cgit v1.2.3 From c6563a099ce05d9291a0c27fdbab3ffd9efddc48 Mon Sep 17 00:00:00 2001 From: lonkaars Date: Fri, 10 Mar 2023 12:26:33 +0100 Subject: initial merge of #26 --- GameLogic/stm32/main.c | 558 ----------------------------------- GameLogic/stm32/main.h | 69 ----- GameLogic/stm32/stm32Design.md | 33 --- GameLogic/stm32/stm32f0xx_hal_conf.h | 322 -------------------- GameLogic/stm32/stm32f0xx_hal_msp.c | 190 ------------ GameLogic/stm32/stm32f0xx_it.c | 145 --------- GameLogic/stm32/stm32f0xx_it.h | 62 ---- GameLogic/stm32/syscalls.c | 176 ----------- GameLogic/stm32/sysmem.c | 79 ----- GameLogic/stm32/system_stm32f0xx.c | 247 ---------------- GameLogic/vhdl/cnts.xdc | 72 ----- GameLogic/vhdl/constraints.txt | 6 - GameLogic/vhdl/spiSlave.vhd | 105 ------- basys3/basys3.srcs/io.xdc | 6 + basys3/basys3.srcs/top.vhd | 105 +++++++ pinout.md | 33 +++ src/ds.c | 15 + src/ds.mk | 3 +- src/main.c | 247 +++++++++++++++- src/ppu/stm.c | 4 + src/stm32.mk | 30 +- src/stm32/setup.c | 197 +++++++++++++ src/stm32/setup.h | 24 ++ src/stm32/stm32f0xx_hal_conf.h | 16 +- 24 files changed, 650 insertions(+), 2094 deletions(-) delete mode 100644 GameLogic/stm32/main.c delete mode 100644 GameLogic/stm32/main.h delete mode 100644 GameLogic/stm32/stm32Design.md delete mode 100644 GameLogic/stm32/stm32f0xx_hal_conf.h delete mode 100644 GameLogic/stm32/stm32f0xx_hal_msp.c delete mode 100644 GameLogic/stm32/stm32f0xx_it.c delete mode 100644 GameLogic/stm32/stm32f0xx_it.h delete mode 100644 GameLogic/stm32/syscalls.c delete mode 100644 GameLogic/stm32/sysmem.c delete mode 100644 GameLogic/stm32/system_stm32f0xx.c delete mode 100644 GameLogic/vhdl/cnts.xdc delete mode 100644 GameLogic/vhdl/constraints.txt delete mode 100644 GameLogic/vhdl/spiSlave.vhd create mode 100644 basys3/basys3.srcs/io.xdc create mode 100644 basys3/basys3.srcs/top.vhd create mode 100644 pinout.md create mode 100644 src/ds.c create mode 100644 src/ppu/stm.c create mode 100644 src/stm32/setup.c create mode 100644 src/stm32/setup.h (limited to 'src/stm32.mk') diff --git a/GameLogic/stm32/main.c b/GameLogic/stm32/main.c deleted file mode 100644 index 666992f..0000000 --- a/GameLogic/stm32/main.c +++ /dev/null @@ -1,558 +0,0 @@ -/* USER CODE BEGIN Header */ -/** - ****************************************************************************** - * @file : main.c - * @brief : Main program body - ****************************************************************************** - * @attention - * - * Copyright (c) 2023 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ -/* USER CODE END Header */ -/* Includes ------------------------------------------------------------------*/ -#include "main.h" - -/* Private includes ----------------------------------------------------------*/ -/* USER CODE BEGIN Includes */ -#include -/* USER CODE END Includes */ - -/* Private typedef -----------------------------------------------------------*/ -/* USER CODE BEGIN PTD */ - -/* USER CODE END PTD */ - -/* Private define ------------------------------------------------------------*/ -/* USER CODE BEGIN PD */ -/* USER CODE END PD */ - -/* Private macro -------------------------------------------------------------*/ -/* USER CODE BEGIN PM */ - -/* USER CODE END PM */ - -/* Private variables ---------------------------------------------------------*/ -SPI_HandleTypeDef hspi1; - -TIM_HandleTypeDef htim3; - -/* USER CODE BEGIN PV */ - -static int8_t buttonDPAD[] = {0,0,0,0}; //1left 2right 3down 4up - -struct playerData{ - uint16_t posX; - uint16_t posY; - uint8_t radius; - uint8_t rotation; //45 degrees steps 0 == right 2 == down 4 == left 6 == up - uint8_t directionX; //direction where its looking at in case no input; - int8_t speed; //10 default L/R MODifier - bool inAir; - -}; - -struct playerData player1; - -uint8_t tileMap[30][40] = - { - {1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 }, - {1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 }, - {1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 }, - {1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 }, - {1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 }, - {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 }, - {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 }, - {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 }, - {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 }, - {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 }, - {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 }, - {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 }, - {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 }, - {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 }, - {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 }, - {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 }, - {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 }, - {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 }, - {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 }, - {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 }, - {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 }, - {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 }, - {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 }, - {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 }, - {1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 }, - {1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 }, - {1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 }, - {1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 }, - {1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 }, - {1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 } - - - - }; - -/* USER CODE END PV */ - -/* Private function prototypes -----------------------------------------------*/ -void SystemClock_Config(void); -static void MX_GPIO_Init(void); -static void MX_SPI1_Init(void); -static void MX_TIM3_Init(void); -/* USER CODE BEGIN PFP */ -void buttonRead(); -void playerMovement(); -void sendData(uint8_t, uint16_t); -/* USER CODE END PFP */ - -/* Private user code ---------------------------------------------------------*/ -/* USER CODE BEGIN 0 */ - - -/* USER CODE END 0 */ - -/** - * @brief The application entry point. - * @retval int - */ -int main(void) -{ - /* USER CODE BEGIN 1 */ - - /* USER CODE END 1 */ - - /* MCU Configuration--------------------------------------------------------*/ - - /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ - HAL_Init(); - - /* USER CODE BEGIN Init */ - - /* USER CODE END Init */ - - /* Configure the system clock */ - SystemClock_Config(); - - /* USER CODE BEGIN SysInit */ - - /* USER CODE END SysInit */ - - /* Initialize all configured peripherals */ - MX_GPIO_Init(); - MX_SPI1_Init(); - MX_TIM3_Init(); - /* USER CODE BEGIN 2 */ - // correct byte for led control - uint16_t pos_x; //0b0000 0001 0011 0110 - uint16_t pos_y; - - uint8_t left = 0; - uint8_t right = 0; - uint8_t up = 0; - uint8_t down = 0; - - - - uint8_t pos_x_bit[2]; - uint8_t pos_y_bit[2]; - uint8_t data_send[3]; - - int tileX; - int tileY; -// struct playerData player1; - //int buttons[] = {GPIO_PIN_4,GPIO_PIN_5,GPIO_PIN_6,GPIO_PIN_8}; // 1 left // 2 right // 3 up // 4 down - -/// init struct - player1.posX = 31000; //0b0000 0001 0011 0110 - player1.posY = 21000; - player1.radius = 8; - player1.speed = 1; - player1.directionX = 1; - player1.rotation = 8; - player1.inAir = false; - /* USER CODE END 2 */ - - /* Infinite loop */ - /* USER CODE BEGIN WHILE */ - while (1) - { - - - - - buttonRead(); - playerMovement(); - - - // send data via SPI //adjust map size - pos_x = player1.posX / 100; - pos_y = player1.posY / 100; - - sendData(0b01000000,pos_x); - sendData(0b00000000,pos_y); - - - /* USER CODE END WHILE */ - - /* USER CODE BEGIN 3 */ - } - /* USER CODE END 3 */ -} - -/** - * @brief System Clock Configuration - * @retval None - */ -void SystemClock_Config(void) -{ - RCC_OscInitTypeDef RCC_OscInitStruct = {0}; - RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; - - /** Initializes the RCC Oscillators according to the specified parameters - * in the RCC_OscInitTypeDef structure. - */ - RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI; - RCC_OscInitStruct.HSIState = RCC_HSI_ON; - RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT; - RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE; - if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) - { - Error_Handler(); - } - - /** Initializes the CPU, AHB and APB buses clocks - */ - RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK - |RCC_CLOCKTYPE_PCLK1; - RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI; - RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; - RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1; - - if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK) - { - Error_Handler(); - } -} - -/** - * @brief SPI1 Initialization Function - * @param None - * @retval None - */ -static void MX_SPI1_Init(void) -{ - - /* USER CODE BEGIN SPI1_Init 0 */ - - /* USER CODE END SPI1_Init 0 */ - - /* USER CODE BEGIN SPI1_Init 1 */ - - /* USER CODE END SPI1_Init 1 */ - /* SPI1 parameter configuration*/ - hspi1.Instance = SPI1; - hspi1.Init.Mode = SPI_MODE_MASTER; - hspi1.Init.Direction = SPI_DIRECTION_1LINE; - hspi1.Init.DataSize = SPI_DATASIZE_8BIT; - hspi1.Init.CLKPolarity = SPI_POLARITY_LOW; - hspi1.Init.CLKPhase = SPI_PHASE_1EDGE; - hspi1.Init.NSS = SPI_NSS_SOFT; - hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_16; - hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB; - hspi1.Init.TIMode = SPI_TIMODE_DISABLE; - hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; - hspi1.Init.CRCPolynomial = 7; - hspi1.Init.CRCLength = SPI_CRC_LENGTH_DATASIZE; - hspi1.Init.NSSPMode = SPI_NSS_PULSE_DISABLE; - if (HAL_SPI_Init(&hspi1) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN SPI1_Init 2 */ - - /* USER CODE END SPI1_Init 2 */ - -} - -/** - * @brief TIM3 Initialization Function - * @param None - * @retval None - */ -static void MX_TIM3_Init(void) -{ - - /* USER CODE BEGIN TIM3_Init 0 */ - - /* USER CODE END TIM3_Init 0 */ - - TIM_ClockConfigTypeDef sClockSourceConfig = {0}; - TIM_MasterConfigTypeDef sMasterConfig = {0}; - - /* USER CODE BEGIN TIM3_Init 1 */ - - /* USER CODE END TIM3_Init 1 */ - htim3.Instance = TIM3; - htim3.Init.Prescaler = 7999; - htim3.Init.CounterMode = TIM_COUNTERMODE_UP; - htim3.Init.Period = 65535; - htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; - htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; - if (HAL_TIM_Base_Init(&htim3) != HAL_OK) - { - Error_Handler(); - } - sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; - if (HAL_TIM_ConfigClockSource(&htim3, &sClockSourceConfig) != HAL_OK) - { - Error_Handler(); - } - sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; - sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; - if (HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig) != HAL_OK) - { - Error_Handler(); - } - /* USER CODE BEGIN TIM3_Init 2 */ - - /* USER CODE END TIM3_Init 2 */ - -} - -/** - * @brief GPIO Initialization Function - * @param None - * @retval None - */ -static void MX_GPIO_Init(void) -{ - GPIO_InitTypeDef GPIO_InitStruct = {0}; - - /* GPIO Ports Clock Enable */ - __HAL_RCC_GPIOA_CLK_ENABLE(); - __HAL_RCC_GPIOB_CLK_ENABLE(); - - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(GPIOA, GPIO_PIN_9, GPIO_PIN_SET); - - /*Configure GPIO pin : PA9 */ - GPIO_InitStruct.Pin = GPIO_PIN_9; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); - - /*Configure GPIO pins : PB4 PB5 PB6 PB8 */ - GPIO_InitStruct.Pin = GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_8; - GPIO_InitStruct.Mode = GPIO_MODE_INPUT; - GPIO_InitStruct.Pull = GPIO_PULLDOWN; - HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); - -} - -/* USER CODE BEGIN 4 */ -void sendData(uint8_t address, uint16_t data) -{ - uint8_t bitData[3]; - bitData[2] = data & 0xff; - bitData[1] = (data >> 8); - bitData[0] = address; // first byte is address - - - - HAL_GPIO_WritePin(GPIOA, GPIO_PIN_9, GPIO_PIN_RESET); - HAL_SPI_Transmit(&hspi1, bitData, 3, 100); //2*8 bit data - HAL_GPIO_WritePin(GPIOA, GPIO_PIN_9, GPIO_PIN_SET); - -} - - -/* -#define GPIO_PIN_0 ((uint16_t)0x0001U) Pin 0 selected -#define GPIO_PIN_1 ((uint16_t)0x0002U) Pin 1 selected -#define GPIO_PIN_2 ((uint16_t)0x0004U) Pin 2 selected -#define GPIO_PIN_3 ((uint16_t)0x0008U) Pin 3 selected -#define GPIO_PIN_4 ((uint16_t)0x0010U) Pin 4 selected -#define GPIO_PIN_5 ((uint16_t)0x0020U) Pin 5 selected -#define GPIO_PIN_6 ((uint16_t)0x0040U) Pin 6 selected -#define GPIO_PIN_7 ((uint16_t)0x0080U) Pin 7 selected -#define GPIO_PIN_8 ((uint16_t)0x0100U) Pin 8 selected -#define GPIO_PIN_9 ((uint16_t)0x0200U) Pin 9 selected -#define GPIO_PIN_10 ((uint16_t)0x0400U) Pin 10 selected -#define GPIO_PIN_11 ((uint16_t)0x0800U) Pin 11 selected -#define GPIO_PIN_12 ((uint16_t)0x1000U) Pin 12 selected -#define GPIO_PIN_13 ((uint16_t)0x2000U) Pin 13 selected -#define GPIO_PIN_14 ((uint16_t)0x4000U) Pin 14 selected -#define GPIO_PIN_15 ((uint16_t)0x8000U) Pin 15 selected -#define GPIO_PIN_All ((uint16_t)0xFFFFU) All pins selected -*/ - -void buttonRead() -{ - //int buttons[] = {GPIO_PIN_4,GPIO_PIN_5,GPIO_PIN_6,GPIO_PIN_8}; // 1 left // 2 right // 3 down // 4 up 8-6-4-5 - uint16_t buttons[] = {0x0100U,0x0040U,0x0010U,0x0020U}; // 1 left // 2 right // 3 down // 4 up - - for(int i = 0; i < 4; i++) - { - if(HAL_GPIO_ReadPin(GPIOB, buttons[i]) == 1) - { - if((i+2) % 2 == 0) - { - buttonDPAD[i] = 1; - } - else - { - buttonDPAD[i] = -1; - } - } - else - { - buttonDPAD[i] = 0; - } - } -} - -void playerMovement() -{ - - int8_t directionX = 0; // -1 = L || 1 == R - int8_t directionY = 0; // -1 = D || 1 == U - - uint8_t i,j; - uint8_t rotation = 0; // 0-7 - //temp var for testing - - - - // direction calc - directionX = buttonDPAD[0] + buttonDPAD[1]; - directionY = buttonDPAD[2] + buttonDPAD[3]; - - //rotation calc - for(i = -1; i < 2;i++) - { - for(j = -1; j < 2; j++) - { - if(directionX == i) - { - if(directionY == j) - { - if(i != 0 && j != 0) //dont update when player idle - { - player1.rotation = rotation; - } - } - } - rotation++; - } - } - //direction calc - if(directionX != 0) //update direction if player is not idle - { - player1.directionX = directionX; - } - //collision map x-axis - - //tile calc including radius and direction for background coliision - - uint16_t tileColX; - uint16_t tileColY = ( player1.posY / 100) / 16; ; - - // remaining space between grid and exact - uint8_t modTileX; - uint8_t modTileY; - - - - if(player1.inAir == false && directionX != 0) - { - if(directionX == 1) - { - tileColX = ( ( player1.posX / 100) + player1.radius ) / 20; - modTileX = ( player1.posX + ( 100 * player1.radius ) ) % 2000; - } - else if(directionX == -1) - { - tileColX = ( ( player1.posX / 100) - player1.radius ) / 20; - modTileX = ( player1.posX - ( 100 * player1.radius ) ) % 2000; - } - - if(tileMap[tileColY][tileColX + directionX] != 1) - { - player1.posX = player1.posX + (directionX * player1.speed); // NEW x set - } - - else if(tileMap[tileColY][tileColX + directionX] == 1) - { - if(modTileX < player1.speed) - { - player1.posX = player1.posX + (directionX * modTileX); // NEW x set - } - else - { - player1.posX = player1.posX + (directionX * player1.speed); // NEW x set - } - } - - } - else //if in air different all borders have to be checked - { - - } - - //collision map floor (y-axis) (falling) - // if falling no jump press (implement) - /* - tileColY = (( player1.posY / 100) + player1.radius) / 16; //bottom of player box - modTileY = 1; - if(tileMap[tileColY+1][tileColX] != 1) //rework after jumping - { - player1.posY = player1.posY + 5 ;// NEW y set //makew var gravity - //playerStat = falling; //for later use of graphics/sound - } - */ - //else if(tileMap[]) - - - - - -} -/* USER CODE END 4 */ - -/** - * @brief This function is executed in case of error occurrence. - * @retval None - */ -void Error_Handler(void) -{ - /* USER CODE BEGIN Error_Handler_Debug */ - /* User can add his own implementation to report the HAL error return state */ - __disable_irq(); - while (1) - { - } - /* USER CODE END Error_Handler_Debug */ -} - -#ifdef USE_FULL_ASSERT -/** - * @brief Reports the name of the source file and the source line number - * where the assert_param error has occurred. - * @param file: pointer to the source file name - * @param line: assert_param error line source number - * @retval None - */ -void assert_failed(uint8_t *file, uint32_t line) -{ - /* USER CODE BEGIN 6 */ - /* User can add his own implementation to report the file name and line number, - ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ - /* USER CODE END 6 */ -} -#endif /* USE_FULL_ASSERT */ diff --git a/GameLogic/stm32/main.h b/GameLogic/stm32/main.h deleted file mode 100644 index 4495405..0000000 --- a/GameLogic/stm32/main.h +++ /dev/null @@ -1,69 +0,0 @@ -/* USER CODE BEGIN Header */ -/** - ****************************************************************************** - * @file : main.h - * @brief : Header for main.c file. - * This file contains the common defines of the application. - ****************************************************************************** - * @attention - * - * Copyright (c) 2023 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ -/* USER CODE END Header */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __MAIN_H -#define __MAIN_H - -#ifdef __cplusplus -extern "C" { -#endif - -/* Includes ------------------------------------------------------------------*/ -#include "stm32f0xx_hal.h" - -/* Private includes ----------------------------------------------------------*/ -/* USER CODE BEGIN Includes */ - -/* USER CODE END Includes */ - -/* Exported types ------------------------------------------------------------*/ -/* USER CODE BEGIN ET */ - -/* USER CODE END ET */ - -/* Exported constants --------------------------------------------------------*/ -/* USER CODE BEGIN EC */ - -/* USER CODE END EC */ - -/* Exported macro ------------------------------------------------------------*/ -/* USER CODE BEGIN EM */ - -/* USER CODE END EM */ - -/* Exported functions prototypes ---------------------------------------------*/ -void Error_Handler(void); - -/* USER CODE BEGIN EFP */ - -/* USER CODE END EFP */ - -/* Private defines -----------------------------------------------------------*/ - -/* USER CODE BEGIN Private defines */ - -/* USER CODE END Private defines */ - -#ifdef __cplusplus -} -#endif - -#endif /* __MAIN_H */ diff --git a/GameLogic/stm32/stm32Design.md b/GameLogic/stm32/stm32Design.md deleted file mode 100644 index f4569d2..0000000 --- a/GameLogic/stm32/stm32Design.md +++ /dev/null @@ -1,33 +0,0 @@ -Pin layout - -| pin STM | function | -|---------|----------| -| PA5 / D13 | SPI clock | -| PA7 / D11 | SPI MOSI | -| PA9 / D8 | SPI cs | -| PB4 / D5 | button 1 | -| PB5 / D4 | button 2 | -| PB6 / D10 | button 3 | -| PB8 / D15 | button 4 | - -| pin FPGA | function | -|---------|----------| -| JB 7 | SPI clock | -| JB 8 | SPI data | -| JB 9 | SPI cs | - - - -constraints: - -set_property PACKAGE_PIN A15 [get_ports clkSPI] - -set_property PACKAGE_PIN C15 [get_ports csSPI] - -set_property PACKAGE_PIN A17 [get_ports dataSPI] - -set_property IOSTANDARD LVCMOS33 [get_ports dataSPI] - -set_property IOSTANDARD LVCMOS33 [get_ports csSPI] - -set_property IOSTANDARD LVCMOS33 [get_ports clkSPI] . diff --git a/GameLogic/stm32/stm32f0xx_hal_conf.h b/GameLogic/stm32/stm32f0xx_hal_conf.h deleted file mode 100644 index 02785c6..0000000 --- a/GameLogic/stm32/stm32f0xx_hal_conf.h +++ /dev/null @@ -1,322 +0,0 @@ -/* USER CODE BEGIN Header */ -/** - ****************************************************************************** - * @file stm32f0xx_hal_conf.h - * @brief HAL configuration file. - ****************************************************************************** - * @attention - * - * Copyright (c) 2016 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ -/* USER CODE END Header */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F0xx_HAL_CONF_H -#define __STM32F0xx_HAL_CONF_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Exported types ------------------------------------------------------------*/ -/* Exported constants --------------------------------------------------------*/ - -/* ########################## Module Selection ############################## */ -/** - * @brief This is the list of modules to be used in the HAL driver - */ -#define HAL_MODULE_ENABLED - /*#define HAL_ADC_MODULE_ENABLED */ -/*#define HAL_CRYP_MODULE_ENABLED */ -/*#define HAL_CAN_MODULE_ENABLED */ -/*#define HAL_CEC_MODULE_ENABLED */ -/*#define HAL_COMP_MODULE_ENABLED */ -/*#define HAL_CRC_MODULE_ENABLED */ -/*#define HAL_CRYP_MODULE_ENABLED */ -/*#define HAL_TSC_MODULE_ENABLED */ -/*#define HAL_DAC_MODULE_ENABLED */ -/*#define HAL_I2S_MODULE_ENABLED */ -/*#define HAL_IWDG_MODULE_ENABLED */ -/*#define HAL_LCD_MODULE_ENABLED */ -/*#define HAL_LPTIM_MODULE_ENABLED */ -/*#define HAL_RNG_MODULE_ENABLED */ -/*#define HAL_RTC_MODULE_ENABLED */ -#define HAL_SPI_MODULE_ENABLED -#define HAL_TIM_MODULE_ENABLED -/*#define HAL_UART_MODULE_ENABLED */ -/*#define HAL_USART_MODULE_ENABLED */ -/*#define HAL_IRDA_MODULE_ENABLED */ -/*#define HAL_SMARTCARD_MODULE_ENABLED */ -/*#define HAL_SMBUS_MODULE_ENABLED */ -/*#define HAL_WWDG_MODULE_ENABLED */ -/*#define HAL_PCD_MODULE_ENABLED */ -#define HAL_CORTEX_MODULE_ENABLED -#define HAL_DMA_MODULE_ENABLED -#define HAL_FLASH_MODULE_ENABLED -#define HAL_GPIO_MODULE_ENABLED -#define HAL_EXTI_MODULE_ENABLED -#define HAL_PWR_MODULE_ENABLED -#define HAL_RCC_MODULE_ENABLED -#define HAL_I2C_MODULE_ENABLED - -/* ########################## HSE/HSI Values adaptation ##################### */ -/** - * @brief Adjust the value of External High Speed oscillator (HSE) used in your application. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSE is used as system clock source, directly or through the PLL). - */ -#if !defined (HSE_VALUE) - #define HSE_VALUE ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */ -#endif /* HSE_VALUE */ - -/** - * @brief In the following line adjust the External High Speed oscillator (HSE) Startup - * Timeout value - */ -#if !defined (HSE_STARTUP_TIMEOUT) - #define HSE_STARTUP_TIMEOUT ((uint32_t)100) /*!< Time out for HSE start up, in ms */ -#endif /* HSE_STARTUP_TIMEOUT */ - -/** - * @brief Internal High Speed oscillator (HSI) value. - * This value is used by the RCC HAL module to compute the system frequency - * (when HSI is used as system clock source, directly or through the PLL). - */ -#if !defined (HSI_VALUE) - #define HSI_VALUE ((uint32_t)8000000) /*!< Value of the Internal oscillator in Hz*/ -#endif /* HSI_VALUE */ - -/** - * @brief In the following line adjust the Internal High Speed oscillator (HSI) Startup - * Timeout value - */ -#if !defined (HSI_STARTUP_TIMEOUT) - #define HSI_STARTUP_TIMEOUT ((uint32_t)5000) /*!< Time out for HSI start up */ -#endif /* HSI_STARTUP_TIMEOUT */ - -/** - * @brief Internal High Speed oscillator for ADC (HSI14) value. - */ -#if !defined (HSI14_VALUE) -#define HSI14_VALUE ((uint32_t)14000000) /*!< Value of the Internal High Speed oscillator for ADC in Hz. - The real value may vary depending on the variations - in voltage and temperature. */ -#endif /* HSI14_VALUE */ - -/** - * @brief Internal High Speed oscillator for USB (HSI48) value. - */ -#if !defined (HSI48_VALUE) - #define HSI48_VALUE ((uint32_t)48000000) /*!< Value of the Internal High Speed oscillator for USB in Hz. - The real value may vary depending on the variations - in voltage and temperature. */ -#endif /* HSI48_VALUE */ - -/** - * @brief Internal Low Speed oscillator (LSI) value. - */ -#if !defined (LSI_VALUE) - #define LSI_VALUE ((uint32_t)40000) -#endif /* LSI_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz - The real value may vary depending on the variations - in voltage and temperature. */ -/** - * @brief External Low Speed oscillator (LSI) value. - */ -#if !defined (LSE_VALUE) - #define LSE_VALUE ((uint32_t)32768) /*!< Value of the External Low Speed oscillator in Hz */ -#endif /* LSE_VALUE */ - -/** - * @brief Time out for LSE start up value in ms. - */ -#if !defined (LSE_STARTUP_TIMEOUT) - #define LSE_STARTUP_TIMEOUT ((uint32_t)5000) /*!< Time out for LSE start up, in ms */ -#endif /* LSE_STARTUP_TIMEOUT */ - -/* Tip: To avoid modifying this file each time you need to use different HSE, - === you can define the HSE value in your toolchain compiler preprocessor. */ - -/* ########################### System Configuration ######################### */ -/** - * @brief This is the HAL system configuration section - */ -#define VDD_VALUE ((uint32_t)3300) /*!< Value of VDD in mv */ -#define TICK_INT_PRIORITY ((uint32_t)3) /*!< tick interrupt priority (lowest by default) */ - /* Warning: Must be set to higher priority for HAL_Delay() */ - /* and HAL_GetTick() usage under interrupt context */ -#define USE_RTOS 0 -#define PREFETCH_ENABLE 1 -#define INSTRUCTION_CACHE_ENABLE 0 -#define DATA_CACHE_ENABLE 0 -#define USE_SPI_CRC 0U - -#define USE_HAL_ADC_REGISTER_CALLBACKS 0U /* ADC register callback disabled */ -#define USE_HAL_CAN_REGISTER_CALLBACKS 0U /* CAN register callback disabled */ -#define USE_HAL_COMP_REGISTER_CALLBACKS 0U /* COMP register callback disabled */ -#define USE_HAL_CEC_REGISTER_CALLBACKS 0U /* CEC register callback disabled */ -#define USE_HAL_DAC_REGISTER_CALLBACKS 0U /* DAC register callback disabled */ -#define USE_HAL_I2C_REGISTER_CALLBACKS 0U /* I2C register callback disabled */ -#define USE_HAL_SMBUS_REGISTER_CALLBACKS 0U /* SMBUS register callback disabled */ -#define USE_HAL_UART_REGISTER_CALLBACKS 0U /* UART register callback disabled */ -#define USE_HAL_USART_REGISTER_CALLBACKS 0U /* USART register callback disabled */ -#define USE_HAL_IRDA_REGISTER_CALLBACKS 0U /* IRDA register callback disabled */ -#define USE_HAL_SMARTCARD_REGISTER_CALLBACKS 0U /* SMARTCARD register callback disabled */ -#define USE_HAL_WWDG_REGISTER_CALLBACKS 0U /* WWDG register callback disabled */ -#define USE_HAL_RTC_REGISTER_CALLBACKS 0U /* RTC register callback disabled */ -#define USE_HAL_SPI_REGISTER_CALLBACKS 0U /* SPI register callback disabled */ -#define USE_HAL_I2S_REGISTER_CALLBACKS 0U /* I2S register callback disabled */ -#define USE_HAL_TIM_REGISTER_CALLBACKS 0U /* TIM register callback disabled */ -#define USE_HAL_TSC_REGISTER_CALLBACKS 0U /* TSC register callback disabled */ -#define USE_HAL_PCD_REGISTER_CALLBACKS 0U /* PCD register callback disabled */ - -/* ########################## Assert Selection ############################## */ -/** - * @brief Uncomment the line below to expanse the "assert_param" macro in the - * HAL drivers code - */ -/* #define USE_FULL_ASSERT 1U */ - -/* Includes ------------------------------------------------------------------*/ -/** - * @brief Include module's header file - */ - -#ifdef HAL_RCC_MODULE_ENABLED - #include "stm32f0xx_hal_rcc.h" -#endif /* HAL_RCC_MODULE_ENABLED */ - -#ifdef HAL_GPIO_MODULE_ENABLED - #include "stm32f0xx_hal_gpio.h" -#endif /* HAL_GPIO_MODULE_ENABLED */ - -#ifdef HAL_EXTI_MODULE_ENABLED - #include "stm32f0xx_hal_exti.h" -#endif /* HAL_EXTI_MODULE_ENABLED */ - -#ifdef HAL_DMA_MODULE_ENABLED - #include "stm32f0xx_hal_dma.h" -#endif /* HAL_DMA_MODULE_ENABLED */ - -#ifdef HAL_CORTEX_MODULE_ENABLED - #include "stm32f0xx_hal_cortex.h" -#endif /* HAL_CORTEX_MODULE_ENABLED */ - -#ifdef HAL_ADC_MODULE_ENABLED - #include "stm32f0xx_hal_adc.h" -#endif /* HAL_ADC_MODULE_ENABLED */ - -#ifdef HAL_CAN_MODULE_ENABLED - #include "stm32f0xx_hal_can.h" -#endif /* HAL_CAN_MODULE_ENABLED */ - -#ifdef HAL_CEC_MODULE_ENABLED - #include "stm32f0xx_hal_cec.h" -#endif /* HAL_CEC_MODULE_ENABLED */ - -#ifdef HAL_COMP_MODULE_ENABLED - #include "stm32f0xx_hal_comp.h" -#endif /* HAL_COMP_MODULE_ENABLED */ - -#ifdef HAL_CRC_MODULE_ENABLED - #include "stm32f0xx_hal_crc.h" -#endif /* HAL_CRC_MODULE_ENABLED */ - -#ifdef HAL_DAC_MODULE_ENABLED - #include "stm32f0xx_hal_dac.h" -#endif /* HAL_DAC_MODULE_ENABLED */ - -#ifdef HAL_FLASH_MODULE_ENABLED - #include "stm32f0xx_hal_flash.h" -#endif /* HAL_FLASH_MODULE_ENABLED */ - -#ifdef HAL_I2C_MODULE_ENABLED - #include "stm32f0xx_hal_i2c.h" -#endif /* HAL_I2C_MODULE_ENABLED */ - -#ifdef HAL_I2S_MODULE_ENABLED - #include "stm32f0xx_hal_i2s.h" -#endif /* HAL_I2S_MODULE_ENABLED */ - -#ifdef HAL_IRDA_MODULE_ENABLED - #include "stm32f0xx_hal_irda.h" -#endif /* HAL_IRDA_MODULE_ENABLED */ - -#ifdef HAL_IWDG_MODULE_ENABLED - #include "stm32f0xx_hal_iwdg.h" -#endif /* HAL_IWDG_MODULE_ENABLED */ - -#ifdef HAL_PCD_MODULE_ENABLED - #include "stm32f0xx_hal_pcd.h" -#endif /* HAL_PCD_MODULE_ENABLED */ - -#ifdef HAL_PWR_MODULE_ENABLED - #include "stm32f0xx_hal_pwr.h" -#endif /* HAL_PWR_MODULE_ENABLED */ - -#ifdef HAL_RTC_MODULE_ENABLED - #include "stm32f0xx_hal_rtc.h" -#endif /* HAL_RTC_MODULE_ENABLED */ - -#ifdef HAL_SMARTCARD_MODULE_ENABLED - #include "stm32f0xx_hal_smartcard.h" -#endif /* HAL_SMARTCARD_MODULE_ENABLED */ - -#ifdef HAL_SMBUS_MODULE_ENABLED - #include "stm32f0xx_hal_smbus.h" -#endif /* HAL_SMBUS_MODULE_ENABLED */ - -#ifdef HAL_SPI_MODULE_ENABLED - #include "stm32f0xx_hal_spi.h" -#endif /* HAL_SPI_MODULE_ENABLED */ - -#ifdef HAL_TIM_MODULE_ENABLED - #include "stm32f0xx_hal_tim.h" -#endif /* HAL_TIM_MODULE_ENABLED */ - -#ifdef HAL_TSC_MODULE_ENABLED - #include "stm32f0xx_hal_tsc.h" -#endif /* HAL_TSC_MODULE_ENABLED */ - -#ifdef HAL_UART_MODULE_ENABLED - #include "stm32f0xx_hal_uart.h" -#endif /* HAL_UART_MODULE_ENABLED */ - -#ifdef HAL_USART_MODULE_ENABLED - #include "stm32f0xx_hal_usart.h" -#endif /* HAL_USART_MODULE_ENABLED */ - -#ifdef HAL_WWDG_MODULE_ENABLED - #include "stm32f0xx_hal_wwdg.h" -#endif /* HAL_WWDG_MODULE_ENABLED */ - -/* Exported macro ------------------------------------------------------------*/ -#ifdef USE_FULL_ASSERT -/** - * @brief The assert_param macro is used for function's parameters check. - * @param expr If expr is false, it calls assert_failed function - * which reports the name of the source file and the source - * line number of the call that failed. - * If expr is true, it returns no value. - * @retval None - */ - #define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) -/* Exported functions ------------------------------------------------------- */ - void assert_failed(uint8_t* file, uint32_t line); -#else - #define assert_param(expr) ((void)0U) -#endif /* USE_FULL_ASSERT */ - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32F0xx_HAL_CONF_H */ - diff --git a/GameLogic/stm32/stm32f0xx_hal_msp.c b/GameLogic/stm32/stm32f0xx_hal_msp.c deleted file mode 100644 index 93bc303..0000000 --- a/GameLogic/stm32/stm32f0xx_hal_msp.c +++ /dev/null @@ -1,190 +0,0 @@ -/* USER CODE BEGIN Header */ -/** - ****************************************************************************** - * @file stm32f0xx_hal_msp.c - * @brief This file provides code for the MSP Initialization - * and de-Initialization codes. - ****************************************************************************** - * @attention - * - * Copyright (c) 2023 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ -/* USER CODE END Header */ - -/* Includes ------------------------------------------------------------------*/ -#include "main.h" -/* USER CODE BEGIN Includes */ - -/* USER CODE END Includes */ - -/* Private typedef -----------------------------------------------------------*/ -/* USER CODE BEGIN TD */ - -/* USER CODE END TD */ - -/* Private define ------------------------------------------------------------*/ -/* USER CODE BEGIN Define */ - -/* USER CODE END Define */ - -/* Private macro -------------------------------------------------------------*/ -/* USER CODE BEGIN Macro */ - -/* USER CODE END Macro */ - -/* Private variables ---------------------------------------------------------*/ -/* USER CODE BEGIN PV */ - -/* USER CODE END PV */ - -/* Private function prototypes -----------------------------------------------*/ -/* USER CODE BEGIN PFP */ - -/* USER CODE END PFP */ - -/* External functions --------------------------------------------------------*/ -/* USER CODE BEGIN ExternalFunctions */ - -/* USER CODE END ExternalFunctions */ - -/* USER CODE BEGIN 0 */ - -/* USER CODE END 0 */ -/** - * Initializes the Global MSP. - */ -void HAL_MspInit(void) -{ - /* USER CODE BEGIN MspInit 0 */ - - /* USER CODE END MspInit 0 */ - - __HAL_RCC_SYSCFG_CLK_ENABLE(); - __HAL_RCC_PWR_CLK_ENABLE(); - - /* System interrupt init*/ - - /* USER CODE BEGIN MspInit 1 */ - - /* USER CODE END MspInit 1 */ -} - -/** -* @brief SPI MSP Initialization -* This function configures the hardware resources used in this example -* @param hspi: SPI handle pointer -* @retval None -*/ -void HAL_SPI_MspInit(SPI_HandleTypeDef* hspi) -{ - GPIO_InitTypeDef GPIO_InitStruct = {0}; - if(hspi->Instance==SPI1) - { - /* USER CODE BEGIN SPI1_MspInit 0 */ - - /* USER CODE END SPI1_MspInit 0 */ - /* Peripheral clock enable */ - __HAL_RCC_SPI1_CLK_ENABLE(); - - __HAL_RCC_GPIOA_CLK_ENABLE(); - /**SPI1 GPIO Configuration - PA5 ------> SPI1_SCK - PA7 ------> SPI1_MOSI - */ - GPIO_InitStruct.Pin = GPIO_PIN_5|GPIO_PIN_7; - GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; - GPIO_InitStruct.Alternate = GPIO_AF0_SPI1; - HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); - - /* USER CODE BEGIN SPI1_MspInit 1 */ - - /* USER CODE END SPI1_MspInit 1 */ - } - -} - -/** -* @brief SPI MSP De-Initialization -* This function freeze the hardware resources used in this example -* @param hspi: SPI handle pointer -* @retval None -*/ -void HAL_SPI_MspDeInit(SPI_HandleTypeDef* hspi) -{ - if(hspi->Instance==SPI1) - { - /* USER CODE BEGIN SPI1_MspDeInit 0 */ - - /* USER CODE END SPI1_MspDeInit 0 */ - /* Peripheral clock disable */ - __HAL_RCC_SPI1_CLK_DISABLE(); - - /**SPI1 GPIO Configuration - PA5 ------> SPI1_SCK - PA7 ------> SPI1_MOSI - */ - HAL_GPIO_DeInit(GPIOA, GPIO_PIN_5|GPIO_PIN_7); - - /* USER CODE BEGIN SPI1_MspDeInit 1 */ - - /* USER CODE END SPI1_MspDeInit 1 */ - } - -} - -/** -* @brief TIM_Base MSP Initialization -* This function configures the hardware resources used in this example -* @param htim_base: TIM_Base handle pointer -* @retval None -*/ -void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base) -{ - if(htim_base->Instance==TIM3) - { - /* USER CODE BEGIN TIM3_MspInit 0 */ - - /* USER CODE END TIM3_MspInit 0 */ - /* Peripheral clock enable */ - __HAL_RCC_TIM3_CLK_ENABLE(); - /* USER CODE BEGIN TIM3_MspInit 1 */ - - /* USER CODE END TIM3_MspInit 1 */ - } - -} - -/** -* @brief TIM_Base MSP De-Initialization -* This function freeze the hardware resources used in this example -* @param htim_base: TIM_Base handle pointer -* @retval None -*/ -void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* htim_base) -{ - if(htim_base->Instance==TIM3) - { - /* USER CODE BEGIN TIM3_MspDeInit 0 */ - - /* USER CODE END TIM3_MspDeInit 0 */ - /* Peripheral clock disable */ - __HAL_RCC_TIM3_CLK_DISABLE(); - /* USER CODE BEGIN TIM3_MspDeInit 1 */ - - /* USER CODE END TIM3_MspDeInit 1 */ - } - -} - -/* USER CODE BEGIN 1 */ - -/* USER CODE END 1 */ diff --git a/GameLogic/stm32/stm32f0xx_it.c b/GameLogic/stm32/stm32f0xx_it.c deleted file mode 100644 index ced8734..0000000 --- a/GameLogic/stm32/stm32f0xx_it.c +++ /dev/null @@ -1,145 +0,0 @@ -/* USER CODE BEGIN Header */ -/** - ****************************************************************************** - * @file stm32f0xx_it.c - * @brief Interrupt Service Routines. - ****************************************************************************** - * @attention - * - * Copyright (c) 2023 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ -/* USER CODE END Header */ - -/* Includes ------------------------------------------------------------------*/ -#include "main.h" -#include "stm32f0xx_it.h" -/* Private includes ----------------------------------------------------------*/ -/* USER CODE BEGIN Includes */ -/* USER CODE END Includes */ - -/* Private typedef -----------------------------------------------------------*/ -/* USER CODE BEGIN TD */ - -/* USER CODE END TD */ - -/* Private define ------------------------------------------------------------*/ -/* USER CODE BEGIN PD */ - -/* USER CODE END PD */ - -/* Private macro -------------------------------------------------------------*/ -/* USER CODE BEGIN PM */ - -/* USER CODE END PM */ - -/* Private variables ---------------------------------------------------------*/ -/* USER CODE BEGIN PV */ - -/* USER CODE END PV */ - -/* Private function prototypes -----------------------------------------------*/ -/* USER CODE BEGIN PFP */ - -/* USER CODE END PFP */ - -/* Private user code ---------------------------------------------------------*/ -/* USER CODE BEGIN 0 */ - -/* USER CODE END 0 */ - -/* External variables --------------------------------------------------------*/ - -/* USER CODE BEGIN EV */ - -/* USER CODE END EV */ - -/******************************************************************************/ -/* Cortex-M0 Processor Interruption and Exception Handlers */ -/******************************************************************************/ -/** - * @brief This function handles Non maskable interrupt. - */ -void NMI_Handler(void) -{ - /* USER CODE BEGIN NonMaskableInt_IRQn 0 */ - - /* USER CODE END NonMaskableInt_IRQn 0 */ - /* USER CODE BEGIN NonMaskableInt_IRQn 1 */ - while (1) - { - } - /* USER CODE END NonMaskableInt_IRQn 1 */ -} - -/** - * @brief This function handles Hard fault interrupt. - */ -void HardFault_Handler(void) -{ - /* USER CODE BEGIN HardFault_IRQn 0 */ - - /* USER CODE END HardFault_IRQn 0 */ - while (1) - { - /* USER CODE BEGIN W1_HardFault_IRQn 0 */ - /* USER CODE END W1_HardFault_IRQn 0 */ - } -} - -/** - * @brief This function handles System service call via SWI instruction. - */ -void SVC_Handler(void) -{ - /* USER CODE BEGIN SVC_IRQn 0 */ - - /* USER CODE END SVC_IRQn 0 */ - /* USER CODE BEGIN SVC_IRQn 1 */ - - /* USER CODE END SVC_IRQn 1 */ -} - -/** - * @brief This function handles Pendable request for system service. - */ -void PendSV_Handler(void) -{ - /* USER CODE BEGIN PendSV_IRQn 0 */ - - /* USER CODE END PendSV_IRQn 0 */ - /* USER CODE BEGIN PendSV_IRQn 1 */ - - /* USER CODE END PendSV_IRQn 1 */ -} - -/** - * @brief This function handles System tick timer. - */ -void SysTick_Handler(void) -{ - /* USER CODE BEGIN SysTick_IRQn 0 */ - - /* USER CODE END SysTick_IRQn 0 */ - HAL_IncTick(); - /* USER CODE BEGIN SysTick_IRQn 1 */ - - /* USER CODE END SysTick_IRQn 1 */ -} - -/******************************************************************************/ -/* STM32F0xx Peripheral Interrupt Handlers */ -/* Add here the Interrupt Handlers for the used peripherals. */ -/* For the available peripheral interrupt handler names, */ -/* please refer to the startup file (startup_stm32f0xx.s). */ -/******************************************************************************/ - -/* USER CODE BEGIN 1 */ - -/* USER CODE END 1 */ diff --git a/GameLogic/stm32/stm32f0xx_it.h b/GameLogic/stm32/stm32f0xx_it.h deleted file mode 100644 index a3fa1b9..0000000 --- a/GameLogic/stm32/stm32f0xx_it.h +++ /dev/null @@ -1,62 +0,0 @@ -/* USER CODE BEGIN Header */ -/** - ****************************************************************************** - * @file stm32f0xx_it.h - * @brief This file contains the headers of the interrupt handlers. - ****************************************************************************** - * @attention - * - * Copyright (c) 2023 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ -/* USER CODE END Header */ - -/* Define to prevent recursive inclusion -------------------------------------*/ -#ifndef __STM32F0xx_IT_H -#define __STM32F0xx_IT_H - -#ifdef __cplusplus - extern "C" { -#endif - -/* Private includes ----------------------------------------------------------*/ -/* USER CODE BEGIN Includes */ - -/* USER CODE END Includes */ - -/* Exported types ------------------------------------------------------------*/ -/* USER CODE BEGIN ET */ - -/* USER CODE END ET */ - -/* Exported constants --------------------------------------------------------*/ -/* USER CODE BEGIN EC */ - -/* USER CODE END EC */ - -/* Exported macro ------------------------------------------------------------*/ -/* USER CODE BEGIN EM */ - -/* USER CODE END EM */ - -/* Exported functions prototypes ---------------------------------------------*/ -void NMI_Handler(void); -void HardFault_Handler(void); -void SVC_Handler(void); -void PendSV_Handler(void); -void SysTick_Handler(void); -/* USER CODE BEGIN EFP */ - -/* USER CODE END EFP */ - -#ifdef __cplusplus -} -#endif - -#endif /* __STM32F0xx_IT_H */ diff --git a/GameLogic/stm32/syscalls.c b/GameLogic/stm32/syscalls.c deleted file mode 100644 index f4278b7..0000000 --- a/GameLogic/stm32/syscalls.c +++ /dev/null @@ -1,176 +0,0 @@ -/** - ****************************************************************************** - * @file syscalls.c - * @author Auto-generated by STM32CubeIDE - * @brief STM32CubeIDE Minimal System calls file - * - * For more information about which c-functions - * need which of these lowlevel functions - * please consult the Newlib libc-manual - ****************************************************************************** - * @attention - * - * Copyright (c) 2020-2022 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Includes */ -#include -#include -#include -#include -#include -#include -#include -#include - - -/* Variables */ -extern int __io_putchar(int ch) __attribute__((weak)); -extern int __io_getchar(void) __attribute__((weak)); - - -char *__env[1] = { 0 }; -char **environ = __env; - - -/* Functions */ -void initialise_monitor_handles() -{ -} - -int _getpid(void) -{ - return 1; -} - -int _kill(int pid, int sig) -{ - (void)pid; - (void)sig; - errno = EINVAL; - return -1; -} - -void _exit (int status) -{ - _kill(status, -1); - while (1) {} /* Make sure we hang here */ -} - -__attribute__((weak)) int _read(int file, char *ptr, int len) -{ - (void)file; - int DataIdx; - - for (DataIdx = 0; DataIdx < len; DataIdx++) - { - *ptr++ = __io_getchar(); - } - - return len; -} - -__attribute__((weak)) int _write(int file, char *ptr, int len) -{ - (void)file; - int DataIdx; - - for (DataIdx = 0; DataIdx < len; DataIdx++) - { - __io_putchar(*ptr++); - } - return len; -} - -int _close(int file) -{ - (void)file; - return -1; -} - - -int _fstat(int file, struct stat *st) -{ - (void)file; - st->st_mode = S_IFCHR; - return 0; -} - -int _isatty(int file) -{ - (void)file; - return 1; -} - -int _lseek(int file, int ptr, int dir) -{ - (void)file; - (void)ptr; - (void)dir; - return 0; -} - -int _open(char *path, int flags, ...) -{ - (void)path; - (void)flags; - /* Pretend like we always fail */ - return -1; -} - -int _wait(int *status) -{ - (void)status; - errno = ECHILD; - return -1; -} - -int _unlink(char *name) -{ - (void)name; - errno = ENOENT; - return -1; -} - -int _times(struct tms *buf) -{ - (void)buf; - return -1; -} - -int _stat(char *file, struct stat *st) -{ - (void)file; - st->st_mode = S_IFCHR; - return 0; -} - -int _link(char *old, char *new) -{ - (void)old; - (void)new; - errno = EMLINK; - return -1; -} - -int _fork(void) -{ - errno = EAGAIN; - return -1; -} - -int _execve(char *name, char **argv, char **env) -{ - (void)name; - (void)argv; - (void)env; - errno = ENOMEM; - return -1; -} diff --git a/GameLogic/stm32/sysmem.c b/GameLogic/stm32/sysmem.c deleted file mode 100644 index 54081ac..0000000 --- a/GameLogic/stm32/sysmem.c +++ /dev/null @@ -1,79 +0,0 @@ -/** - ****************************************************************************** - * @file sysmem.c - * @author Generated by STM32CubeIDE - * @brief STM32CubeIDE System Memory calls file - * - * For more information about which C functions - * need which of these lowlevel functions - * please consult the newlib libc manual - ****************************************************************************** - * @attention - * - * Copyright (c) 2022 STMicroelectronics. - * All rights reserved. - * - * This software is licensed under terms that can be found in the LICENSE file - * in the root directory of this software component. - * If no LICENSE file comes with this software, it is provided AS-IS. - * - ****************************************************************************** - */ - -/* Includes */ -#include -#include - -/** - * Pointer to the current high watermark of the heap usage - */ -static uint8_t *__sbrk_heap_end = NULL; - -/** - * @brief _sbrk() allocates memory to the newlib heap and is used by malloc - * and others from the C library - * - * @verbatim - * ############################################################################ - * # .data # .bss # newlib heap # MSP stack # - * # # # # Reserved by _Min_Stack_Size # - * ############################################################################ - * ^-- RAM start ^-- _end _estack, RAM end --^ - * @endverbatim - * - * This implementation starts allocating at the '_end' linker symbol - * The '_Min_Stack_Size' linker symbol reserves a memory for the MSP stack - * The implementation considers '_estack' linker symbol to be RAM end - * NOTE: If the MSP stack, at any point during execution, grows larger than the - * reserved size, please increase the '_Min_Stack_Size'. - * - * @param incr Memory size - * @return Pointer to allocated memory - */ -void *_sbrk(ptrdiff_t incr) -{ - extern uint8_t _end; /* Symbol defined in the linker script */ - extern uint8_t _estack; /* Symbol defined in the linker script */ - extern uint32_t _Min_Stack_Size; /* Symbol defined in the linker script */ - const uint32_t stack_limit = (uint32_t)&_estack - (uint32_t)&_Min_Stack_Size; - const uint8_t *max_heap = (uint8_t *)stack_limit; - uint8_t *prev_heap_end; - - /* Initialize heap end at first call */ - if (NULL == __sbrk_heap_end) - { - __sbrk_heap_end = &_end; - } - - /* Protect heap from growing into the reserved MSP stack */ - if (__sbrk_heap_end + incr > max_heap) - { - errno = ENOMEM; - return (void *)-1; - } - - prev_heap_end = __sbrk_heap_end; - __sbrk_heap_end += incr; - - return (void *)prev_heap_end; -} diff --git a/GameLogic/stm32/system_stm32f0xx.c b/GameLogic/stm32/system_stm32f0xx.c deleted file mode 100644 index 1b0fbe5..0000000 --- a/GameLogic/stm32/system_stm32f0xx.c +++ /dev/null @@ -1,247 +0,0 @@ -/** - ****************************************************************************** - * @file system_stm32f0xx.c - * @author MCD Application Team - * @brief CMSIS Cortex-M0 Device Peripheral Access Layer System Source File. - * - * 1. This file provides two functions and one global variable to be called from - * user application: - * - SystemInit(): This function is called at startup just after reset and - * before branch to main program. This call is made inside - * the "startup_stm32f0xx.s" file. - * - * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used - * by the user application to setup the SysTick - * timer or configure other parameters. - * - * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must - * be called whenever the core clock is changed - * during program execution. - * - * - ****************************************************************************** - * @attention - * - *

© Copyright (c) 2016 STMicroelectronics. - * All rights reserved.

- * - * This software component is licensed by ST under BSD 3-Clause license, - * the "License"; You may not use this file except in compliance with the - * License. You may obtain a copy of the License at: - * opensource.org/licenses/BSD-3-Clause - * - ****************************************************************************** - */ - -/** @addtogroup CMSIS - * @{ - */ - -/** @addtogroup stm32f0xx_system - * @{ - */ - -/** @addtogroup STM32F0xx_System_Private_Includes - * @{ - */ - -#include "stm32f0xx.h" - -/** - * @} - */ - -/** @addtogroup STM32F0xx_System_Private_TypesDefinitions - * @{ - */ - -/** - * @} - */ - -/** @addtogroup STM32F0xx_System_Private_Defines - * @{ - */ -#if !defined (HSE_VALUE) - #define HSE_VALUE ((uint32_t)8000000) /*!< Default value of the External oscillator in Hz. - This value can be provided and adapted by the user application. */ -#endif /* HSE_VALUE */ - -#if !defined (HSI_VALUE) - #define HSI_VALUE ((uint32_t)8000000) /*!< Default value of the Internal oscillator in Hz. - This value can be provided and adapted by the user application. */ -#endif /* HSI_VALUE */ - -#if !defined (HSI48_VALUE) -#define HSI48_VALUE ((uint32_t)48000000) /*!< Default value of the HSI48 Internal oscillator in Hz. - This value can be provided and adapted by the user application. */ -#endif /* HSI48_VALUE */ -/** - * @} - */ - -/** @addtogroup STM32F0xx_System_Private_Macros - * @{ - */ - -/** - * @} - */ - -/** @addtogroup STM32F0xx_System_Private_Variables - * @{ - */ - /* This variable is updated in three ways: - 1) by calling CMSIS function SystemCoreClockUpdate() - 2) by calling HAL API function HAL_RCC_GetHCLKFreq() - 3) each time HAL_RCC_ClockConfig() is called to configure the system clock frequency - Note: If you use this function to configure the system clock; then there - is no need to call the 2 first functions listed above, since SystemCoreClock - variable is updated automatically. - */ -uint32_t SystemCoreClock = 8000000; - -const uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; -const uint8_t APBPrescTable[8] = {0, 0, 0, 0, 1, 2, 3, 4}; - -/** - * @} - */ - -/** @addtogroup STM32F0xx_System_Private_FunctionPrototypes - * @{ - */ - -/** - * @} - */ - -/** @addtogroup STM32F0xx_System_Private_Functions - * @{ - */ - -/** - * @brief Setup the microcontroller system - * @param None - * @retval None - */ -void SystemInit(void) -{ - /* NOTE :SystemInit(): This function is called at startup just after reset and - before branch to main program. This call is made inside - the "startup_stm32f0xx.s" file. - User can setups the default system clock (System clock source, PLL Multiplier - and Divider factors, AHB/APBx prescalers and Flash settings). - */ -} - -/** - * @brief Update SystemCoreClock variable according to Clock Register Values. - * The SystemCoreClock variable contains the core clock (HCLK), it can - * be used by the user application to setup the SysTick timer or configure - * other parameters. - * - * @note Each time the core clock (HCLK) changes, this function must be called - * to update SystemCoreClock variable value. Otherwise, any configuration - * based on this variable will be incorrect. - * - * @note - The system frequency computed by this function is not the real - * frequency in the chip. It is calculated based on the predefined - * constant and the selected clock source: - * - * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) - * - * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) - * - * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) - * or HSI_VALUE(*) multiplied/divided by the PLL factors. - * - * (*) HSI_VALUE is a constant defined in stm32f0xx_hal_conf.h file (default value - * 8 MHz) but the real value may vary depending on the variations - * in voltage and temperature. - * - * (**) HSE_VALUE is a constant defined in stm32f0xx_hal_conf.h file (its value - * depends on the application requirements), user has to ensure that HSE_VALUE - * is same as the real frequency of the crystal used. Otherwise, this function - * may have wrong result. - * - * - The result of this function could be not correct when using fractional - * value for HSE crystal. - * - * @param None - * @retval None - */ -void SystemCoreClockUpdate (void) -{ - uint32_t tmp = 0, pllmull = 0, pllsource = 0, predivfactor = 0; - - /* Get SYSCLK source -------------------------------------------------------*/ - tmp = RCC->CFGR & RCC_CFGR_SWS; - - switch (tmp) - { - case RCC_CFGR_SWS_HSI: /* HSI used as system clock */ - SystemCoreClock = HSI_VALUE; - break; - case RCC_CFGR_SWS_HSE: /* HSE used as system clock */ - SystemCoreClock = HSE_VALUE; - break; - case RCC_CFGR_SWS_PLL: /* PLL used as system clock */ - /* Get PLL clock source and multiplication factor ----------------------*/ - pllmull = RCC->CFGR & RCC_CFGR_PLLMUL; - pllsource = RCC->CFGR & RCC_CFGR_PLLSRC; - pllmull = ( pllmull >> 18) + 2; - predivfactor = (RCC->CFGR2 & RCC_CFGR2_PREDIV) + 1; - - if (pllsource == RCC_CFGR_PLLSRC_HSE_PREDIV) - { - /* HSE used as PLL clock source : SystemCoreClock = HSE/PREDIV * PLLMUL */ - SystemCoreClock = (HSE_VALUE/predivfactor) * pllmull; - } -#if defined(STM32F042x6) || defined(STM32F048xx) || defined(STM32F072xB) || defined(STM32F078xx) || defined(STM32F091xC) || defined(STM32F098xx) - else if (pllsource == RCC_CFGR_PLLSRC_HSI48_PREDIV) - { - /* HSI48 used as PLL clock source : SystemCoreClock = HSI48/PREDIV * PLLMUL */ - SystemCoreClock = (HSI48_VALUE/predivfactor) * pllmull; - } -#endif /* STM32F042x6 || STM32F048xx || STM32F072xB || STM32F078xx || STM32F091xC || STM32F098xx */ - else - { -#if defined(STM32F042x6) || defined(STM32F048xx) || defined(STM32F070x6) \ - || defined(STM32F078xx) || defined(STM32F071xB) || defined(STM32F072xB) \ - || defined(STM32F070xB) || defined(STM32F091xC) || defined(STM32F098xx) || defined(STM32F030xC) - /* HSI used as PLL clock source : SystemCoreClock = HSI/PREDIV * PLLMUL */ - SystemCoreClock = (HSI_VALUE/predivfactor) * pllmull; -#else - /* HSI used as PLL clock source : SystemCoreClock = HSI/2 * PLLMUL */ - SystemCoreClock = (HSI_VALUE >> 1) * pllmull; -#endif /* STM32F042x6 || STM32F048xx || STM32F070x6 || - STM32F071xB || STM32F072xB || STM32F078xx || STM32F070xB || - STM32F091xC || STM32F098xx || STM32F030xC */ - } - break; - default: /* HSI used as system clock */ - SystemCoreClock = HSI_VALUE; - break; - } - /* Compute HCLK clock frequency ----------------*/ - /* Get HCLK prescaler */ - tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)]; - /* HCLK clock frequency */ - SystemCoreClock >>= tmp; -} - -/** - * @} - */ - -/** - * @} - */ - -/** - * @} - */ - -/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ - diff --git a/GameLogic/vhdl/cnts.xdc b/GameLogic/vhdl/cnts.xdc deleted file mode 100644 index b8c0604..0000000 --- a/GameLogic/vhdl/cnts.xdc +++ /dev/null @@ -1,72 +0,0 @@ -set_property PACKAGE_PIN W5 [get_ports clk100] -set_property PACKAGE_PIN P19 [get_ports hsync] -set_property PACKAGE_PIN R19 [get_ports vsync] -set_property PACKAGE_PIN N18 [get_ports {blue[3]}] -set_property PACKAGE_PIN L18 [get_ports {blue[2]}] -set_property PACKAGE_PIN K18 [get_ports {blue[1]}] -set_property PACKAGE_PIN J18 [get_ports {blue[0]}] -set_property PACKAGE_PIN J17 [get_ports {green[3]}] -set_property PACKAGE_PIN H17 [get_ports {green[2]}] -set_property PACKAGE_PIN G17 [get_ports {green[1]}] -set_property PACKAGE_PIN D17 [get_ports {green[0]}] -set_property PACKAGE_PIN G19 [get_ports {red[3]}] -set_property PACKAGE_PIN H19 [get_ports {red[2]}] -set_property PACKAGE_PIN J19 [get_ports {red[1]}] -set_property PACKAGE_PIN N19 [get_ports {red[0]}] -set_property IOSTANDARD LVCMOS33 [get_ports clk100] -set_property IOSTANDARD LVCMOS33 [get_ports hsync] -set_property IOSTANDARD LVCMOS33 [get_ports vsync] -set_property IOSTANDARD LVCMOS33 [get_ports {blue[3]}] -set_property IOSTANDARD LVCMOS33 [get_ports {blue[2]}] -set_property IOSTANDARD LVCMOS33 [get_ports {blue[0]}] -set_property IOSTANDARD LVCMOS33 [get_ports {blue[1]}] -set_property IOSTANDARD LVCMOS33 [get_ports {green[3]}] -set_property IOSTANDARD LVCMOS33 [get_ports {green[2]}] -set_property IOSTANDARD LVCMOS33 [get_ports {green[1]}] -set_property IOSTANDARD LVCMOS33 [get_ports {red[3]}] -set_property IOSTANDARD LVCMOS33 [get_ports {red[2]}] -set_property IOSTANDARD LVCMOS33 [get_ports {red[1]}] -set_property IOSTANDARD LVCMOS33 [get_ports {red[0]}] -set_property IOSTANDARD LVCMOS33 [get_ports {green[0]}] - -set_property PACKAGE_PIN T18 [get_ports resetButton] -set_property IOSTANDARD LVCMOS33 [get_ports resetButton] - -set_property PACKAGE_PIN A15 [get_ports clkSPI] -set_property PACKAGE_PIN C15 [get_ports csSPI] -set_property PACKAGE_PIN A17 [get_ports dataSPI] -set_property IOSTANDARD LVCMOS33 [get_ports dataSPI] -set_property IOSTANDARD LVCMOS33 [get_ports csSPI] -set_property IOSTANDARD LVCMOS33 [get_ports clkSPI] -set_property PACKAGE_PIN L1 [get_ports {led[15]}] -set_property PACKAGE_PIN P1 [get_ports {led[14]}] -set_property PACKAGE_PIN N3 [get_ports {led[13]}] -set_property PACKAGE_PIN P3 [get_ports {led[12]}] -set_property PACKAGE_PIN U3 [get_ports {led[11]}] -set_property PACKAGE_PIN W3 [get_ports {led[10]}] -set_property PACKAGE_PIN V3 [get_ports {led[9]}] -set_property PACKAGE_PIN V13 [get_ports {led[8]}] -set_property PACKAGE_PIN V14 [get_ports {led[7]}] -set_property PACKAGE_PIN U14 [get_ports {led[6]}] -set_property PACKAGE_PIN U15 [get_ports {led[5]}] -set_property PACKAGE_PIN W18 [get_ports {led[4]}] -set_property PACKAGE_PIN V19 [get_ports {led[3]}] -set_property PACKAGE_PIN U19 [get_ports {led[2]}] -set_property PACKAGE_PIN E19 [get_ports {led[1]}] -set_property PACKAGE_PIN U16 [get_ports {led[0]}] -set_property IOSTANDARD LVCMOS33 [get_ports {led[0]}] -set_property IOSTANDARD LVCMOS33 [get_ports {led[1]}] -set_property IOSTANDARD LVCMOS33 [get_ports {led[2]}] -set_property IOSTANDARD LVCMOS33 [get_ports {led[3]}] -set_property IOSTANDARD LVCMOS33 [get_ports {led[4]}] -set_property IOSTANDARD LVCMOS33 [get_ports {led[5]}] -set_property IOSTANDARD LVCMOS33 [get_ports {led[6]}] -set_property IOSTANDARD LVCMOS33 [get_ports {led[7]}] -set_property IOSTANDARD LVCMOS33 [get_ports {led[8]}] -set_property IOSTANDARD LVCMOS33 [get_ports {led[9]}] -set_property IOSTANDARD LVCMOS33 [get_ports {led[10]}] -set_property IOSTANDARD LVCMOS33 [get_ports {led[11]}] -set_property IOSTANDARD LVCMOS33 [get_ports {led[12]}] -set_property IOSTANDARD LVCMOS33 [get_ports {led[13]}] -set_property IOSTANDARD LVCMOS33 [get_ports {led[14]}] -set_property IOSTANDARD LVCMOS33 [get_ports {led[15]}] diff --git a/GameLogic/vhdl/constraints.txt b/GameLogic/vhdl/constraints.txt deleted file mode 100644 index f254cdd..0000000 --- a/GameLogic/vhdl/constraints.txt +++ /dev/null @@ -1,6 +0,0 @@ -set_property PACKAGE_PIN A15 [get_ports clkSPI] -set_property PACKAGE_PIN C15 [get_ports csSPI] -set_property PACKAGE_PIN A17 [get_ports dataSPI] -set_property IOSTANDARD LVCMOS33 [get_ports dataSPI] -set_property IOSTANDARD LVCMOS33 [get_ports csSPI] -set_property IOSTANDARD LVCMOS33 [get_ports clkSPI] \ No newline at end of file diff --git a/GameLogic/vhdl/spiSlave.vhd b/GameLogic/vhdl/spiSlave.vhd deleted file mode 100644 index 7cf3e63..0000000 --- a/GameLogic/vhdl/spiSlave.vhd +++ /dev/null @@ -1,105 +0,0 @@ ----------------------------------------------------------------------------------- --- Company: --- Engineer: --- --- Create Date: 15.02.2023 21:09:16 --- Design Name: --- Module Name: top - Behavioral --- Project Name: --- Target Devices: --- Tool Versions: --- Description: --- --- Dependencies: --- --- Revision: --- Revision 0.01 - File Created --- Additional Comments: --- ----------------------------------------------------------------------------------- - - -library IEEE; -use IEEE.STD_LOGIC_1164.ALL; - --- Uncomment the following library declaration if using --- arithmetic functions with Signed or Unsigned values -use IEEE.NUMERIC_STD.ALL; -use IEEE.STD_LOGIC_UNSIGNED.ALL; --- Uncomment the following library declaration if instantiating --- any Xilinx leaf cells in this code. ---library UNISIM; ---use UNISIM.VComponents.all; - -entity spiSlave is - Port ( clkBoard : in std_logic; -- clock basys3 100MHz - clkSPI : in std_logic; -- incoming clock of SPI - dataSPI : in std_logic; -- incoming data of SPI - csSPI : in std_logic; -- incoming select of SPI - dataRead : out std_logic_vector(23 downto 0) := (others => '0') -- data read - - ); -end spiSlave; - -architecture Behavioral of spiSlave is - signal PulseFF0,PulseFF1,PulseFF2,PulseFF3 : std_logic := '0'; -- signal for metastability synchronizer of clk SPI - signal dataFF0,dataFF1,dataFF2,dataFF3 : std_logic := '0'; -- signal for metastability synchronizer of data SPI - signal ssFF0,ssFF1,ssFF2,ssFF3 : std_logic := '0'; -- signal for metastability synchronizer of slave select SPI - - signal data : std_logic_vector(23 downto 0) := (others => '0'); -- signal to store incomming data of dataSPI (2x 8bit) - signal counter : integer := 23; --counter for data position - signal enable : std_logic := '0'; -- enable signal if slave is selected -begin - - process (clkBoard) - begin - - if rising_edge(clkBoard) then - -- flip flop for clk SPI to synchronise a - PulseFF0 <= clkSPI; - PulseFF1 <= PulseFF0; - PulseFF2 <= PulseFF1; - PulseFF3 <= PulseFF2; - -- flip flop for data SPI to synchronise - dataFF0 <= dataSPI; - dataFF1 <= dataFF0; - dataFF2 <= dataFF1; - dataFF3 <= dataFF2; - -- flip flop for slave select SPI to synchronise - ssFF0 <= csSPI; - ssFF1 <= ssFF0; - ssFF2 <= ssFF1; - ssFF3 <= ssFF2; - -- check if slave select signal has falling edge (slave is selected by master) - if(ssFF3 = '1' and ssFF2 = '0') then - --reset counter if true - counter <= 23; - --disable data read if rising edge (slave is not selected) - elsif (ssFF3 = '0' and ssFF2 = '1') then - enable <= '0'; - end if; - --check if synchronised slave select signal is falling edge or data read is enabled - if(ssFF3 = '1' and ssFF2 = '0') or enable = '1' then - enable <= '1'; --enable data read - if (PulseFF3 = '0' and PulseFF2 = '1') then -- check for rising edge of clk SPI - if counter > -1 then - counter <= counter - 1; - -- data transfer into vector - data(counter) <= dataFF3; - end if; - end if; - --check if counter is done - if counter = -1 then - counter <= 23; --reset counter - dataRead <= data; - end if; - elsif (enable = '0') then - --dataRead <= data; - - end if; - - end if; - - end process; - -end Behavioral; diff --git a/basys3/basys3.srcs/io.xdc b/basys3/basys3.srcs/io.xdc new file mode 100644 index 0000000..f254cdd --- /dev/null +++ b/basys3/basys3.srcs/io.xdc @@ -0,0 +1,6 @@ +set_property PACKAGE_PIN A15 [get_ports clkSPI] +set_property PACKAGE_PIN C15 [get_ports csSPI] +set_property PACKAGE_PIN A17 [get_ports dataSPI] +set_property IOSTANDARD LVCMOS33 [get_ports dataSPI] +set_property IOSTANDARD LVCMOS33 [get_ports csSPI] +set_property IOSTANDARD LVCMOS33 [get_ports clkSPI] \ No newline at end of file diff --git a/basys3/basys3.srcs/top.vhd b/basys3/basys3.srcs/top.vhd new file mode 100644 index 0000000..7cf3e63 --- /dev/null +++ b/basys3/basys3.srcs/top.vhd @@ -0,0 +1,105 @@ +---------------------------------------------------------------------------------- +-- Company: +-- Engineer: +-- +-- Create Date: 15.02.2023 21:09:16 +-- Design Name: +-- Module Name: top - Behavioral +-- Project Name: +-- Target Devices: +-- Tool Versions: +-- Description: +-- +-- Dependencies: +-- +-- Revision: +-- Revision 0.01 - File Created +-- Additional Comments: +-- +---------------------------------------------------------------------------------- + + +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; + +-- Uncomment the following library declaration if using +-- arithmetic functions with Signed or Unsigned values +use IEEE.NUMERIC_STD.ALL; +use IEEE.STD_LOGIC_UNSIGNED.ALL; +-- Uncomment the following library declaration if instantiating +-- any Xilinx leaf cells in this code. +--library UNISIM; +--use UNISIM.VComponents.all; + +entity spiSlave is + Port ( clkBoard : in std_logic; -- clock basys3 100MHz + clkSPI : in std_logic; -- incoming clock of SPI + dataSPI : in std_logic; -- incoming data of SPI + csSPI : in std_logic; -- incoming select of SPI + dataRead : out std_logic_vector(23 downto 0) := (others => '0') -- data read + + ); +end spiSlave; + +architecture Behavioral of spiSlave is + signal PulseFF0,PulseFF1,PulseFF2,PulseFF3 : std_logic := '0'; -- signal for metastability synchronizer of clk SPI + signal dataFF0,dataFF1,dataFF2,dataFF3 : std_logic := '0'; -- signal for metastability synchronizer of data SPI + signal ssFF0,ssFF1,ssFF2,ssFF3 : std_logic := '0'; -- signal for metastability synchronizer of slave select SPI + + signal data : std_logic_vector(23 downto 0) := (others => '0'); -- signal to store incomming data of dataSPI (2x 8bit) + signal counter : integer := 23; --counter for data position + signal enable : std_logic := '0'; -- enable signal if slave is selected +begin + + process (clkBoard) + begin + + if rising_edge(clkBoard) then + -- flip flop for clk SPI to synchronise a + PulseFF0 <= clkSPI; + PulseFF1 <= PulseFF0; + PulseFF2 <= PulseFF1; + PulseFF3 <= PulseFF2; + -- flip flop for data SPI to synchronise + dataFF0 <= dataSPI; + dataFF1 <= dataFF0; + dataFF2 <= dataFF1; + dataFF3 <= dataFF2; + -- flip flop for slave select SPI to synchronise + ssFF0 <= csSPI; + ssFF1 <= ssFF0; + ssFF2 <= ssFF1; + ssFF3 <= ssFF2; + -- check if slave select signal has falling edge (slave is selected by master) + if(ssFF3 = '1' and ssFF2 = '0') then + --reset counter if true + counter <= 23; + --disable data read if rising edge (slave is not selected) + elsif (ssFF3 = '0' and ssFF2 = '1') then + enable <= '0'; + end if; + --check if synchronised slave select signal is falling edge or data read is enabled + if(ssFF3 = '1' and ssFF2 = '0') or enable = '1' then + enable <= '1'; --enable data read + if (PulseFF3 = '0' and PulseFF2 = '1') then -- check for rising edge of clk SPI + if counter > -1 then + counter <= counter - 1; + -- data transfer into vector + data(counter) <= dataFF3; + end if; + end if; + --check if counter is done + if counter = -1 then + counter <= 23; --reset counter + dataRead <= data; + end if; + elsif (enable = '0') then + --dataRead <= data; + + end if; + + end if; + + end process; + +end Behavioral; diff --git a/pinout.md b/pinout.md new file mode 100644 index 0000000..f4569d2 --- /dev/null +++ b/pinout.md @@ -0,0 +1,33 @@ +Pin layout + +| pin STM | function | +|---------|----------| +| PA5 / D13 | SPI clock | +| PA7 / D11 | SPI MOSI | +| PA9 / D8 | SPI cs | +| PB4 / D5 | button 1 | +| PB5 / D4 | button 2 | +| PB6 / D10 | button 3 | +| PB8 / D15 | button 4 | + +| pin FPGA | function | +|---------|----------| +| JB 7 | SPI clock | +| JB 8 | SPI data | +| JB 9 | SPI cs | + + + +constraints: + +set_property PACKAGE_PIN A15 [get_ports clkSPI] + +set_property PACKAGE_PIN C15 [get_ports csSPI] + +set_property PACKAGE_PIN A17 [get_ports dataSPI] + +set_property IOSTANDARD LVCMOS33 [get_ports dataSPI] + +set_property IOSTANDARD LVCMOS33 [get_ports csSPI] + +set_property IOSTANDARD LVCMOS33 [get_ports clkSPI] . diff --git a/src/ds.c b/src/ds.c new file mode 100644 index 0000000..d6d4357 --- /dev/null +++ b/src/ds.c @@ -0,0 +1,15 @@ +#include "main.h" +#include "ppu/ppu.h" +#include "demo.h" + +void hh_setup() { + hh_ppu_init(); + + hh_demo_setup(); +} + +void hh_exit() { + g_hh_run = false; + + hh_ppu_deinit(); +} diff --git a/src/ds.mk b/src/ds.mk index d4354a2..b5633b3 100644 --- a/src/ds.mk +++ b/src/ds.mk @@ -10,5 +10,6 @@ endif DESKTOP_SRCS += ppusim/sim.c \ ppusim/mem.c \ ppusim/pixel.c \ - ppusim/work.c + ppusim/work.c \ + ds.c diff --git a/src/main.c b/src/main.c index f4de225..ee6125f 100644 --- a/src/main.c +++ b/src/main.c @@ -1,13 +1,98 @@ #include #include "main.h" -#include "ppu/ppu.h" #include "demo.h" bool g_hh_run = true; +static int8_t buttonDPAD[] = {0,0,0,0}; //1left 2right 3down 4up + +struct playerData{ + uint16_t posX; + uint16_t posY; + uint8_t radius; + uint8_t rotation; //45 degrees steps 0 == right 2 == down 4 == left 6 == up + uint8_t directionX; //direction where its looking at in case no input; + int8_t speed; //10 default L/R MODifier + bool inAir; + +}; + +struct playerData player1; + +uint8_t tileMap[30][40] = + { + {1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 }, + {1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 }, + {1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 }, + {1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 }, + {1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 }, + {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 }, + {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 }, + {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 }, + {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 }, + {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 }, + {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 }, + {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 }, + {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 }, + {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 }, + {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 }, + {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 }, + {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 }, + {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 }, + {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 }, + {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 }, + {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 }, + {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 }, + {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 }, + {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 }, + {1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 }, + {1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 }, + {1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 }, + {1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 }, + {1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 }, + {1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 } + + + + }; + +void buttonRead(); +void playerMovement(); +void sendData(uint8_t, uint16_t); + + uint16_t pos_x; //0b0000 0001 0011 0110 + uint16_t pos_y; + + uint8_t left = 0; + uint8_t right = 0; + uint8_t up = 0; + uint8_t down = 0; + + + + uint8_t pos_x_bit[2]; + uint8_t pos_y_bit[2]; + uint8_t data_send[3]; + + int tileX; + int tileY; +// struct playerData player1; + //int buttons[] = {GPIO_PIN_4,GPIO_PIN_5,GPIO_PIN_6,GPIO_PIN_8}; // 1 left // 2 right // 3 up // 4 down + + int main() { hh_setup(); + +/// init struct + player1.posX = 31000; //0b0000 0001 0011 0110 + player1.posY = 21000; + player1.radius = 8; + player1.speed = 1; + player1.directionX = 1; + player1.rotation = 8; + player1.inAir = false; + hh_loop(); hh_exit(); return 0; @@ -17,17 +102,163 @@ void hh_ppu_vblank_interrupt() { static unsigned long frame = 0; frame++; - hh_demo_loop(frame); + buttonRead(); + playerMovement(); + + + // send data via SPI //adjust map size + pos_x = player1.posX / 100; + pos_y = player1.posY / 100; + + sendData(0b01000000,pos_x); + sendData(0b00000000,pos_y); + + // hh_demo_loop(frame); } -void hh_setup() { - hh_ppu_init(); +void sendData(uint8_t address, uint16_t data) +{ + uint8_t bitData[3]; + bitData[2] = data & 0xff; + bitData[1] = (data >> 8); + bitData[0] = address; // first byte is address + + + + HAL_GPIO_WritePin(GPIOA, GPIO_PIN_9, GPIO_PIN_RESET); + HAL_SPI_Transmit(&hspi1, bitData, 3, 100); //2*8 bit data + HAL_GPIO_WritePin(GPIOA, GPIO_PIN_9, GPIO_PIN_SET); - hh_demo_setup(); } -void hh_exit() { - g_hh_run = false; +void buttonRead() +{ + //int buttons[] = {GPIO_PIN_4,GPIO_PIN_5,GPIO_PIN_6,GPIO_PIN_8}; // 1 left // 2 right // 3 down // 4 up 8-6-4-5 + uint16_t buttons[] = {0x0100U,0x0040U,0x0010U,0x0020U}; // 1 left // 2 right // 3 down // 4 up + + for(int i = 0; i < 4; i++) + { + if(HAL_GPIO_ReadPin(GPIOB, buttons[i]) == 1) + { + if((i+2) % 2 == 0) + { + buttonDPAD[i] = 1; + } + else + { + buttonDPAD[i] = -1; + } + } + else + { + buttonDPAD[i] = 0; + } + } +} + +void playerMovement() +{ + + int8_t directionX = 0; // -1 = L || 1 == R + int8_t directionY = 0; // -1 = D || 1 == U + + uint8_t i,j; + uint8_t rotation = 0; // 0-7 + //temp var for testing + + + + // direction calc + directionX = buttonDPAD[0] + buttonDPAD[1]; + directionY = buttonDPAD[2] + buttonDPAD[3]; + + //rotation calc + for(i = -1; i < 2;i++) + { + for(j = -1; j < 2; j++) + { + if(directionX == i) + { + if(directionY == j) + { + if(i != 0 && j != 0) //dont update when player idle + { + player1.rotation = rotation; + } + } + } + rotation++; + } + } + //direction calc + if(directionX != 0) //update direction if player is not idle + { + player1.directionX = directionX; + } + //collision map x-axis + + //tile calc including radius and direction for background coliision + + uint16_t tileColX; + uint16_t tileColY = ( player1.posY / 100) / 16; ; + + // remaining space between grid and exact + uint8_t modTileX; + uint8_t modTileY; + + + + if(player1.inAir == false && directionX != 0) + { + if(directionX == 1) + { + tileColX = ( ( player1.posX / 100) + player1.radius ) / 20; + modTileX = ( player1.posX + ( 100 * player1.radius ) ) % 2000; + } + else if(directionX == -1) + { + tileColX = ( ( player1.posX / 100) - player1.radius ) / 20; + modTileX = ( player1.posX - ( 100 * player1.radius ) ) % 2000; + } + + if(tileMap[tileColY][tileColX + directionX] != 1) + { + player1.posX = player1.posX + (directionX * player1.speed); // NEW x set + } + + else if(tileMap[tileColY][tileColX + directionX] == 1) + { + if(modTileX < player1.speed) + { + player1.posX = player1.posX + (directionX * modTileX); // NEW x set + } + else + { + player1.posX = player1.posX + (directionX * player1.speed); // NEW x set + } + } + + } + else //if in air different all borders have to be checked + { + + } + + //collision map floor (y-axis) (falling) + // if falling no jump press (implement) + /* + tileColY = (( player1.posY / 100) + player1.radius) / 16; //bottom of player box + modTileY = 1; + if(tileMap[tileColY+1][tileColX] != 1) //rework after jumping + { + player1.posY = player1.posY + 5 ;// NEW y set //makew var gravity + //playerStat = falling; //for later use of graphics/sound + } + */ + //else if(tileMap[]) + + + + - hh_ppu_deinit(); } diff --git a/src/ppu/stm.c b/src/ppu/stm.c new file mode 100644 index 0000000..fd4a18c --- /dev/null +++ b/src/ppu/stm.c @@ -0,0 +1,4 @@ +#include "ppu/ppu.h" + +void hh_ppu_init() {} +void hh_ppu_deinit() {} diff --git a/src/stm32.mk b/src/stm32.mk index 6926dea..eab34a4 100644 --- a/src/stm32.mk +++ b/src/stm32.mk @@ -43,22 +43,24 @@ STM_SRCS += lib/FreeRTOS-Kernel/croutine.c \ lib/FreeRTOS-Kernel/timers.c \ lib/FreeRTOS-Kernel/portable/GCC/ARM_CM0/port.c \ lib/FreeRTOS-Kernel/portable/MemMang/heap_4.c -STM_SRCS += lib/STM32-base-STM32Cube/HAL/STM32F0xx/src/stm32f0xx_hal_rcc.c \ - lib/STM32-base-STM32Cube/HAL/STM32F0xx/src/stm32f0xx_hal_rcc_ex.c \ - lib/STM32-base-STM32Cube/HAL/STM32F0xx/src/stm32f0xx_hal.c \ - lib/STM32-base-STM32Cube/HAL/STM32F0xx/src/stm32f0xx_hal_i2c.c \ - lib/STM32-base-STM32Cube/HAL/STM32F0xx/src/stm32f0xx_hal_i2c_ex.c \ - lib/STM32-base-STM32Cube/HAL/STM32F0xx/src/stm32f0xx_hal_gpio.c \ - lib/STM32-base-STM32Cube/HAL/STM32F0xx/src/stm32f0xx_hal_dma.c \ - lib/STM32-base-STM32Cube/HAL/STM32F0xx/src/stm32f0xx_hal_cortex.c \ - lib/STM32-base-STM32Cube/HAL/STM32F0xx/src/stm32f0xx_hal_pwr.c \ - lib/STM32-base-STM32Cube/HAL/STM32F0xx/src/stm32f0xx_hal_pwr_ex.c \ - lib/STM32-base-STM32Cube/HAL/STM32F0xx/src/stm32f0xx_hal_flash.c \ - lib/STM32-base-STM32Cube/HAL/STM32F0xx/src/stm32f0xx_hal_flash_ex.c \ +STM_SRCS += lib/STM32-base-STM32Cube/HAL/STM32F0xx/src/stm32f0xx_hal.c \ + lib/STM32-base-STM32Cube/HAL/STM32F0xx/src/stm32f0xx_hal_spi.c \ + lib/STM32-base-STM32Cube/HAL/STM32F0xx/src/stm32f0xx_hal_spi_ex.c \ lib/STM32-base-STM32Cube/HAL/STM32F0xx/src/stm32f0xx_hal_tim.c \ lib/STM32-base-STM32Cube/HAL/STM32F0xx/src/stm32f0xx_hal_tim_ex.c \ lib/STM32-base-STM32Cube/HAL/STM32F0xx/src/stm32f0xx_hal_uart.c \ - lib/STM32-base-STM32Cube/HAL/STM32F0xx/src/stm32f0xx_hal_uart_ex.c + lib/STM32-base-STM32Cube/HAL/STM32F0xx/src/stm32f0xx_hal_uart_ex.c \ + lib/STM32-base-STM32Cube/HAL/STM32F0xx/src/stm32f0xx_hal_cortex.c \ + lib/STM32-base-STM32Cube/HAL/STM32F0xx/src/stm32f0xx_hal_dma.c \ + lib/STM32-base-STM32Cube/HAL/STM32F0xx/src/stm32f0xx_hal_flash.c \ + lib/STM32-base-STM32Cube/HAL/STM32F0xx/src/stm32f0xx_hal_flash_ex.c \ + lib/STM32-base-STM32Cube/HAL/STM32F0xx/src/stm32f0xx_hal_gpio.c \ + lib/STM32-base-STM32Cube/HAL/STM32F0xx/src/stm32f0xx_hal_pwr.c \ + lib/STM32-base-STM32Cube/HAL/STM32F0xx/src/stm32f0xx_hal_pwr_ex.c \ + lib/STM32-base-STM32Cube/HAL/STM32F0xx/src/stm32f0xx_hal_rcc.c \ + lib/STM32-base-STM32Cube/HAL/STM32F0xx/src/stm32f0xx_hal_rcc_ex.c STM_SRCS += stm32/idle_task_static_memory.c \ - stm32/main.c + stm32/main.c \ + stm32/setup.c \ + ppu/stm.c diff --git a/src/stm32/setup.c b/src/stm32/setup.c new file mode 100644 index 0000000..2c3552b --- /dev/null +++ b/src/stm32/setup.c @@ -0,0 +1,197 @@ +#include +#include +#include +#include +#include +#include + +#include "main.h" +#include "setup.h" +#include "ppu/ppu.h" + +UART_HandleTypeDef huart2 = { + .Instance = USART2, + .Init.BaudRate = 115200, + .Init.WordLength = UART_WORDLENGTH_8B, + .Init.StopBits = UART_STOPBITS_1, + .Init.Parity = UART_PARITY_NONE, + .Init.Mode = UART_MODE_TX_RX, + .Init.HwFlowCtl = UART_HWCONTROL_NONE, + .Init.OverSampling = UART_OVERSAMPLING_16, + .Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE, + .AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT, +}; + +GPIO_InitTypeDef spi_gpio = { + .Pin = HH_IO_SPI_PINS, + .Mode = GPIO_MODE_AF_PP, + .Pull = GPIO_NOPULL, + .Speed = GPIO_SPEED_FREQ_HIGH, + .Alternate = GPIO_AF0_SPI1, +}; + +SPI_HandleTypeDef hspi1 = { + .Instance = SPI1, + .Init.Mode = SPI_MODE_MASTER, + .Init.Direction = SPI_DIRECTION_1LINE, + .Init.DataSize = SPI_DATASIZE_8BIT, + .Init.CLKPolarity = SPI_POLARITY_LOW, + .Init.CLKPhase = SPI_PHASE_1EDGE, + .Init.NSS = SPI_NSS_SOFT, + .Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_16, + .Init.FirstBit = SPI_FIRSTBIT_MSB, + .Init.TIMode = SPI_TIMODE_DISABLE, + .Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE, + .Init.CRCPolynomial = 7, + .Init.CRCLength = SPI_CRC_LENGTH_DATASIZE, + .Init.NSSPMode = SPI_NSS_PULSE_DISABLE, +}; + +TIM_HandleTypeDef htim3 = { + .Instance = TIM3, + .Init.Prescaler = 7999, + .Init.CounterMode = TIM_COUNTERMODE_UP, + .Init.Period = 65535, + .Init.ClockDivision = TIM_CLOCKDIVISION_DIV1, + .Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE, +}; + +static void hh_io_spi_setup(); +static void hh_io_tim_setup(); +static void hh_io_usart2_setup(); +static void hh_io_gpio_setup(); +static void hh_io_clock_setup(); +static void hh_io_setup_error_handler(); + +void hh_setup() { + HAL_Init(); + + hh_io_clock_setup(); + hh_io_usart2_setup(); + hh_io_gpio_setup(); + hh_io_spi_setup(); + hh_io_tim_setup(); + + hh_ppu_init(); +} + +void hh_exit() { + hh_ppu_deinit(); + + HAL_DeInit(); +} + +void hh_io_clock_setup() { + if (HAL_OK != HAL_RCC_OscConfig(&(RCC_OscInitTypeDef){ + .OscillatorType = RCC_OSCILLATORTYPE_HSI, + .HSIState = RCC_HSI_ON, + .HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT, + .PLL.PLLState = RCC_PLL_ON, + })) return hh_io_setup_error_handler(); + + // cpu, ahb & apb clocks + if (HAL_OK != HAL_RCC_ClockConfig(&(RCC_ClkInitTypeDef){ + .ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_PCLK1, + .SYSCLKSource = RCC_SYSCLKSOURCE_HSI, + .AHBCLKDivider = RCC_SYSCLK_DIV1, + .APB1CLKDivider = RCC_HCLK_DIV1, + }, FLASH_LATENCY_1)) return hh_io_setup_error_handler(); + + // usart2 clock (usb serial) + if (HAL_RCCEx_PeriphCLKConfig(&(RCC_PeriphCLKInitTypeDef){ + .PeriphClockSelection = RCC_PERIPHCLK_USART2, + .Usart2ClockSelection = RCC_USART2CLKSOURCE_PCLK1, + .I2c1ClockSelection = RCC_I2C1CLKSOURCE_HSI, + }) != HAL_OK) return hh_io_setup_error_handler(); +} + +void hh_io_spi_setup() { + if (HAL_SPI_Init(&hspi1) != HAL_OK) + return hh_io_setup_error_handler(); +} + +void hh_io_usart2_setup() { + if (HAL_UART_Init(&huart2) != HAL_OK) + return hh_io_setup_error_handler(); +} + +void hh_io_tim_setup() { + if (HAL_TIM_Base_Init(&htim3) != HAL_OK) + return hh_io_setup_error_handler(); + + if (HAL_TIM_ConfigClockSource(&htim3, &(TIM_ClockConfigTypeDef) { + .ClockSource = TIM_CLOCKSOURCE_INTERNAL + }) != HAL_OK) return hh_io_setup_error_handler(); + + if (HAL_TIMEx_MasterConfigSynchronization(&htim3, &(TIM_MasterConfigTypeDef) { + .MasterOutputTrigger = TIM_TRGO_RESET, + .MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE, + }) != HAL_OK) return hh_io_setup_error_handler(); +} + +void hh_io_gpio_setup() { + __HAL_RCC_GPIOA_CLK_ENABLE(); + __HAL_RCC_GPIOB_CLK_ENABLE(); + + HAL_GPIO_WritePin(GPIOA, GPIO_PIN_9, GPIO_PIN_SET); + HAL_GPIO_Init(GPIOA, &(GPIO_InitTypeDef) { + .Pin = GPIO_PIN_9, + .Mode = GPIO_MODE_OUTPUT_PP, + .Pull = GPIO_NOPULL, + .Speed = GPIO_SPEED_FREQ_LOW, + }); + HAL_GPIO_Init(GPIOA, &(GPIO_InitTypeDef) { + .Pin = GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_8, + .Mode = GPIO_MODE_INPUT, + .Pull = GPIO_PULLDOWN, + }); +} + +void HAL_MspInit() { + __HAL_RCC_SYSCFG_CLK_ENABLE(); + __HAL_RCC_PWR_CLK_ENABLE(); +} + +void HAL_SPI_MspInit(SPI_HandleTypeDef* hspi) { + if(hspi->Instance != SPI1) return; + + __HAL_RCC_SPI1_CLK_ENABLE(); + __HAL_RCC_GPIOA_CLK_ENABLE(); + + HAL_GPIO_Init(HH_IO_SPI_PORT, &spi_gpio); +} + +void HAL_SPI_MspDeInit(SPI_HandleTypeDef* hspi) { + if(hspi->Instance != SPI1) return; + + __HAL_RCC_SPI1_CLK_DISABLE(); + + HAL_GPIO_DeInit(HH_IO_SPI_PORT, HH_IO_SPI_PINS); +} + +void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base) { + if(htim_base->Instance != TIM3) return; + + __HAL_RCC_TIM3_CLK_ENABLE(); +} + +void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* htim_base) { + if(htim_base->Instance != TIM3) return; + + __HAL_RCC_TIM3_CLK_DISABLE(); +} + +void SysTick_Handler() { + HAL_IncTick(); + if (xTaskGetSchedulerState() != taskSCHEDULER_NOT_STARTED) + xPortSysTickHandler(); +} + +void HardFault_Handler() { + for(;;); +} + +void hh_io_setup_error_handler() { + __disable_irq(); + while (1); +} diff --git a/src/stm32/setup.h b/src/stm32/setup.h new file mode 100644 index 0000000..66d5ff3 --- /dev/null +++ b/src/stm32/setup.h @@ -0,0 +1,24 @@ +#pragma once + +#include +#include +#include +#include + +#define HH_IO_SPI_PINS (GPIO_PIN_5 | GPIO_PIN_7) +#define HH_IO_SPI_PORT GPIOA + +extern UART_HandleTypeDef huart2; // NOLINT +extern GPIO_InitTypeDef spi_gpio; // NOLINT +extern SPI_HandleTypeDef hspi1; // NOLINT +extern TIM_HandleTypeDef htim3; // NOLINT + +// required HAL setup functions +void HAL_MspInit(); // NOLINT +void HAL_UART_MspInit(UART_HandleTypeDef *huart); // NOLINT +void HAL_SPI_MspInit(SPI_HandleTypeDef* hspi); // NOLINT +void HAL_SPI_MspDeInit(SPI_HandleTypeDef* hspi); // NOLINT +void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base); // NOLINT +void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* htim_base); // NOLINT +void HardFault_Handler(); // NOLINT +void SysTick_Handler(); // NOLINT diff --git a/src/stm32/stm32f0xx_hal_conf.h b/src/stm32/stm32f0xx_hal_conf.h index fc27221..84a3b74 100644 --- a/src/stm32/stm32f0xx_hal_conf.h +++ b/src/stm32/stm32f0xx_hal_conf.h @@ -19,16 +19,18 @@ #define DATA_CACHE_ENABLE 0U #define USE_SPI_CRC 0U -#define HAL_RCC_MODULE_ENABLED #define HAL_MODULE_ENABLED -#define HAL_I2C_MODULE_ENABLED -#define HAL_GPIO_MODULE_ENABLED -#define HAL_DMA_MODULE_ENABLED -#define HAL_CORTEX_MODULE_ENABLED -#define HAL_PWR_MODULE_ENABLED -#define HAL_FLASH_MODULE_ENABLED +#define HAL_SPI_MODULE_ENABLED #define HAL_TIM_MODULE_ENABLED #define HAL_UART_MODULE_ENABLED +#define HAL_CORTEX_MODULE_ENABLED +#define HAL_DMA_MODULE_ENABLED +#define HAL_FLASH_MODULE_ENABLED +#define HAL_GPIO_MODULE_ENABLED +#define HAL_EXTI_MODULE_ENABLED +#define HAL_PWR_MODULE_ENABLED +#define HAL_RCC_MODULE_ENABLED +// #define HAL_I2C_MODULE_ENABLED #ifdef HAL_RCC_MODULE_ENABLED #include -- cgit v1.2.3 From bf8c5fdb43ae2446a502227a95f17167c3dcda33 Mon Sep 17 00:00:00 2001 From: lonkaars Date: Fri, 10 Mar 2023 13:12:02 +0100 Subject: add input emulation to test collision --- src/demo.c | 153 +++++++++++++++++++++++++++++++-- src/demo.h | 35 ++++++++ src/ds.mk | 4 +- src/entity.h | 15 ++++ src/input.h | 22 +++++ src/main.c | 248 +---------------------------------------------------- src/ppusim/input.c | 16 ++++ src/stm32.mk | 3 +- src/stm32/input.c | 13 +++ 9 files changed, 256 insertions(+), 253 deletions(-) create mode 100644 src/entity.h create mode 100644 src/input.h create mode 100644 src/ppusim/input.c create mode 100644 src/stm32/input.c (limited to 'src/stm32.mk') diff --git a/src/demo.c b/src/demo.c index 019750a..c4e4d7a 100644 --- a/src/demo.c +++ b/src/demo.c @@ -2,10 +2,36 @@ #include "demo.h" #include "ppu/ppu.h" +#include "input.h" +#include "entity.h" -#define HH_DEMO_BALL_COUNT 5 +#define HH_DEMO_BALL_COUNT 1 hh_s_ppu_loc_fam_entry g_hh_demo_balls[HH_DEMO_BALL_COUNT]; +hh_s_entity_player g_hh_player_1 = { + .pos_x = 31000, //0b0000 0001 0011 0110 + .pos_y = 21000, + .radius = 8, + .speed = 1, + .direction_x = 1, + .rotation = 8, + .in_air = false, +}; + +void playerMovement(); + +uint16_t pos_x; //0b0000 0001 0011 0110 +uint16_t pos_y; +uint8_t left = 0; +uint8_t right = 0; +uint8_t up = 0; +uint8_t down = 0; +uint8_t pos_x_bit[2]; +uint8_t pos_y_bit[2]; +uint8_t data_send[3]; +int tileX; +int tileY; + void hh_demo_setup() { // load sprites hh_ppu_update_sprite(0, HH_DBG_SPRITE_BALL); @@ -39,6 +65,22 @@ void hh_demo_setup() { } void hh_demo_loop(unsigned long frame) { + playerMovement(); + + //adjust map size + pos_x = g_hh_player_1.pos_x / 100; + pos_y = g_hh_player_1.pos_y / 100; + + // input testing (no hitbox stuff) + // pos_x += (-1 * g_hh_controller_p1.dpad_left) + (1 * g_hh_controller_p1.dpad_right); // -1 = L || 1 == R + // pos_y += (-1 * g_hh_controller_p1.dpad_up) + (1 * g_hh_controller_p1.dpad_down); // -1 = D || 1 == U + + // update player sprite on ppu + g_hh_demo_balls[0].position_x = pos_x; + g_hh_demo_balls[0].position_y = pos_y; + hh_ppu_update_foreground(0, g_hh_demo_balls[0]); + + // set background pattern position hh_ppu_update_aux((hh_s_ppu_loc_aux) { .bg_shift_x = (frame / 2) % HH_PPU_SPRITE_WIDTH, @@ -46,10 +88,111 @@ void hh_demo_loop(unsigned long frame) { .fg_fetch = 0, .sysreset = 0, }); +} + +// void sendData(uint8_t address, uint16_t data) { +// uint8_t bitData[3]; +// bitData[2] = data & 0xff; +// bitData[1] = (data >> 8); +// bitData[0] = address; // first byte is address +// +// HAL_GPIO_WritePin(GPIOA, GPIO_PIN_9, GPIO_PIN_RESET); +// HAL_SPI_Transmit(&hspi1, bitData, 3, 100); //2*8 bit data +// HAL_GPIO_WritePin(GPIOA, GPIO_PIN_9, GPIO_PIN_SET); +// } + +void playerMovement() { + int8_t directionX = (-1 * g_hh_controller_p1.dpad_left) + (1 * g_hh_controller_p1.dpad_right); // -1 = L || 1 == R + int8_t directionY = (-1 * g_hh_controller_p1.dpad_down) + (1 * g_hh_controller_p1.dpad_up); // -1 = D || 1 == U + + uint8_t i,j; + uint8_t rotation = 0; // 0-7 + + //rotation calc + for(i = -1; i < 2;i++) + { + for(j = -1; j < 2; j++) + { + if(directionX == i) + { + if(directionY == j) + { + if(i != 0 && j != 0) //dont update when player idle + { + g_hh_player_1.rotation = rotation; + } + } + } + rotation++; + } + } + //direction calc + if(directionX != 0) //update direction if player is not idle + { + g_hh_player_1.direction_x = directionX; + } + //collision map x-axis + + //tile calc including radius and direction for background coliision + + uint16_t tileColX; + uint16_t tileColY = ( g_hh_player_1.pos_y / 100) / 16; ; + + // remaining space between grid and exact + uint8_t modTileX; + uint8_t modTileY; + + if(g_hh_player_1.in_air == false && directionX != 0) + { + if(directionX == 1) + { + tileColX = ( ( g_hh_player_1.pos_x / 100) + g_hh_player_1.radius ) / 20; + modTileX = ( g_hh_player_1.pos_x + ( 100 * g_hh_player_1.radius ) ) % 2000; + } + else if(directionX == -1) + { + tileColX = ( ( g_hh_player_1.pos_x / 100) - g_hh_player_1.radius ) / 20; + modTileX = ( g_hh_player_1.pos_x - ( 100 * g_hh_player_1.radius ) ) % 2000; + } + + if(HH_DEMO_HITBOX_TILEMAP[tileColY][tileColX + directionX] != 1) + { + g_hh_player_1.pos_x = g_hh_player_1.pos_x + (directionX * g_hh_player_1.speed); // NEW x set + } + + else if(HH_DEMO_HITBOX_TILEMAP[tileColY][tileColX + directionX] == 1) + { + if(modTileX < g_hh_player_1.speed) + { + g_hh_player_1.pos_x = g_hh_player_1.pos_x + (directionX * modTileX); // NEW x set + } + else + { + g_hh_player_1.pos_x = g_hh_player_1.pos_x + (directionX * g_hh_player_1.speed); // NEW x set + } + } + + } + else //if in air different all borders have to be checked + { - for (unsigned i = 0; i < HH_DEMO_BALL_COUNT; i++) { - g_hh_demo_balls[i].position_x = HH_PPU_SCREEN_WIDTH/2 - HH_PPU_SPRITE_WIDTH/2 + (int)(60 * (double)sin((1*(double)frame / 10) + (double)i * 12)); - g_hh_demo_balls[i].position_y = HH_PPU_SCREEN_HEIGHT/2 - HH_PPU_SPRITE_HEIGHT/2 + (int)(30 * (double)sin((2*(double)frame / 10) + (double)i * 12)); - hh_ppu_update_foreground(i, g_hh_demo_balls[i]); } + + //collision map floor (y-axis) (falling) + // if falling no jump press (implement) + /* + tileColY = (( g_hh_player_1.pos_y / 100) + g_hh_player_1.radius) / 16; //bottom of player box + modTileY = 1; + if(HH_DEMO_HITBOX_TILEMAP[tileColY+1][tileColX] != 1) //rework after jumping + { + g_hh_player_1.pos_y = g_hh_player_1.pos_y + 5 ;// NEW y set //makew var gravity + //playerStat = falling; //for later use of graphics/sound + } + */ + //else if(HH_DEMO_HITBOX_TILEMAP[]) + + + + + } diff --git a/src/demo.h b/src/demo.h index 89436b5..ddf8403 100644 --- a/src/demo.h +++ b/src/demo.h @@ -42,3 +42,38 @@ static const hh_s_ppu_loc_sprite HH_DBG_SPRITE_CHECKERBOARD = { 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0 }; + +static const uint8_t HH_DEMO_HITBOX_TILEMAP[30][40] = + { + {1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 }, + {1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 }, + {1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 }, + {1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 }, + {1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 }, + {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 }, + {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 }, + {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 }, + {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 }, + {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 }, + {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 }, + {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 }, + {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 }, + {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 }, + {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 }, + {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 }, + {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 }, + {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 }, + {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 }, + {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 }, + {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 }, + {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 }, + {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 }, + {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 }, + {1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 }, + {1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 }, + {1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 }, + {1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 }, + {1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 }, + {1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 } + }; + diff --git a/src/ds.mk b/src/ds.mk index b5633b3..57d1776 100644 --- a/src/ds.mk +++ b/src/ds.mk @@ -11,5 +11,5 @@ DESKTOP_SRCS += ppusim/sim.c \ ppusim/mem.c \ ppusim/pixel.c \ ppusim/work.c \ - ds.c - + ds.c \ + ppusim/input.c diff --git a/src/entity.h b/src/entity.h new file mode 100644 index 0000000..20cbf42 --- /dev/null +++ b/src/entity.h @@ -0,0 +1,15 @@ +#pragma once + +#include +#include + +typedef struct { + uint16_t pos_x; + uint16_t pos_y; + uint8_t radius; + uint8_t rotation; //45 degrees steps 0 == right 2 == down 4 == left 6 == up + uint8_t direction_x; //direction where its looking at in case no input; + int8_t speed; //10 default L/R MODifier + bool in_air; +} hh_s_entity_player; + diff --git a/src/input.h b/src/input.h new file mode 100644 index 0000000..adacba2 --- /dev/null +++ b/src/input.h @@ -0,0 +1,22 @@ +#pragma once + +#include + +/** @brief game controller state */ +typedef struct { + bool dpad_up; + bool dpad_down; + bool dpad_left; + bool dpad_right; + bool button_primary; + bool button_secondary; +} hh_s_gamepad; + +/** @brief player 1's controller */ +extern hh_s_gamepad g_hh_controller_p1; +/** @brief player 2's controller */ +extern hh_s_gamepad g_hh_controller_p2; + +/** @brief update g_hh_controller_p1 and 2 by reading buttons */ +void hh_input_read(); + diff --git a/src/main.c b/src/main.c index ee6125f..fa63aa2 100644 --- a/src/main.c +++ b/src/main.c @@ -2,97 +2,12 @@ #include "main.h" #include "demo.h" +#include "input.h" bool g_hh_run = true; -static int8_t buttonDPAD[] = {0,0,0,0}; //1left 2right 3down 4up - -struct playerData{ - uint16_t posX; - uint16_t posY; - uint8_t radius; - uint8_t rotation; //45 degrees steps 0 == right 2 == down 4 == left 6 == up - uint8_t directionX; //direction where its looking at in case no input; - int8_t speed; //10 default L/R MODifier - bool inAir; - -}; - -struct playerData player1; - -uint8_t tileMap[30][40] = - { - {1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 }, - {1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 }, - {1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 }, - {1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 }, - {1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 }, - {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 }, - {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 }, - {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 }, - {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 }, - {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 }, - {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 }, - {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 }, - {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 }, - {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 }, - {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 }, - {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 }, - {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 }, - {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 }, - {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 }, - {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 }, - {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 }, - {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 }, - {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 }, - {1,1,1,1,1,1,1,1,1,1 ,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0 ,1,1,1,1,1,1,1,1,1,1 }, - {1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 }, - {1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 }, - {1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 }, - {1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 }, - {1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 }, - {1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1 } - - - - }; - -void buttonRead(); -void playerMovement(); -void sendData(uint8_t, uint16_t); - - uint16_t pos_x; //0b0000 0001 0011 0110 - uint16_t pos_y; - - uint8_t left = 0; - uint8_t right = 0; - uint8_t up = 0; - uint8_t down = 0; - - - - uint8_t pos_x_bit[2]; - uint8_t pos_y_bit[2]; - uint8_t data_send[3]; - - int tileX; - int tileY; -// struct playerData player1; - //int buttons[] = {GPIO_PIN_4,GPIO_PIN_5,GPIO_PIN_6,GPIO_PIN_8}; // 1 left // 2 right // 3 up // 4 down - - int main() { hh_setup(); - -/// init struct - player1.posX = 31000; //0b0000 0001 0011 0110 - player1.posY = 21000; - player1.radius = 8; - player1.speed = 1; - player1.directionX = 1; - player1.rotation = 8; - player1.inAir = false; - hh_loop(); hh_exit(); return 0; @@ -100,165 +15,8 @@ int main() { void hh_ppu_vblank_interrupt() { static unsigned long frame = 0; + hh_input_read(); + hh_demo_loop(frame); frame++; - - buttonRead(); - playerMovement(); - - - // send data via SPI //adjust map size - pos_x = player1.posX / 100; - pos_y = player1.posY / 100; - - sendData(0b01000000,pos_x); - sendData(0b00000000,pos_y); - - // hh_demo_loop(frame); } -void sendData(uint8_t address, uint16_t data) -{ - uint8_t bitData[3]; - bitData[2] = data & 0xff; - bitData[1] = (data >> 8); - bitData[0] = address; // first byte is address - - - - HAL_GPIO_WritePin(GPIOA, GPIO_PIN_9, GPIO_PIN_RESET); - HAL_SPI_Transmit(&hspi1, bitData, 3, 100); //2*8 bit data - HAL_GPIO_WritePin(GPIOA, GPIO_PIN_9, GPIO_PIN_SET); - -} - -void buttonRead() -{ - //int buttons[] = {GPIO_PIN_4,GPIO_PIN_5,GPIO_PIN_6,GPIO_PIN_8}; // 1 left // 2 right // 3 down // 4 up 8-6-4-5 - uint16_t buttons[] = {0x0100U,0x0040U,0x0010U,0x0020U}; // 1 left // 2 right // 3 down // 4 up - - for(int i = 0; i < 4; i++) - { - if(HAL_GPIO_ReadPin(GPIOB, buttons[i]) == 1) - { - if((i+2) % 2 == 0) - { - buttonDPAD[i] = 1; - } - else - { - buttonDPAD[i] = -1; - } - } - else - { - buttonDPAD[i] = 0; - } - } -} - -void playerMovement() -{ - - int8_t directionX = 0; // -1 = L || 1 == R - int8_t directionY = 0; // -1 = D || 1 == U - - uint8_t i,j; - uint8_t rotation = 0; // 0-7 - //temp var for testing - - - - // direction calc - directionX = buttonDPAD[0] + buttonDPAD[1]; - directionY = buttonDPAD[2] + buttonDPAD[3]; - - //rotation calc - for(i = -1; i < 2;i++) - { - for(j = -1; j < 2; j++) - { - if(directionX == i) - { - if(directionY == j) - { - if(i != 0 && j != 0) //dont update when player idle - { - player1.rotation = rotation; - } - } - } - rotation++; - } - } - //direction calc - if(directionX != 0) //update direction if player is not idle - { - player1.directionX = directionX; - } - //collision map x-axis - - //tile calc including radius and direction for background coliision - - uint16_t tileColX; - uint16_t tileColY = ( player1.posY / 100) / 16; ; - - // remaining space between grid and exact - uint8_t modTileX; - uint8_t modTileY; - - - - if(player1.inAir == false && directionX != 0) - { - if(directionX == 1) - { - tileColX = ( ( player1.posX / 100) + player1.radius ) / 20; - modTileX = ( player1.posX + ( 100 * player1.radius ) ) % 2000; - } - else if(directionX == -1) - { - tileColX = ( ( player1.posX / 100) - player1.radius ) / 20; - modTileX = ( player1.posX - ( 100 * player1.radius ) ) % 2000; - } - - if(tileMap[tileColY][tileColX + directionX] != 1) - { - player1.posX = player1.posX + (directionX * player1.speed); // NEW x set - } - - else if(tileMap[tileColY][tileColX + directionX] == 1) - { - if(modTileX < player1.speed) - { - player1.posX = player1.posX + (directionX * modTileX); // NEW x set - } - else - { - player1.posX = player1.posX + (directionX * player1.speed); // NEW x set - } - } - - } - else //if in air different all borders have to be checked - { - - } - - //collision map floor (y-axis) (falling) - // if falling no jump press (implement) - /* - tileColY = (( player1.posY / 100) + player1.radius) / 16; //bottom of player box - modTileY = 1; - if(tileMap[tileColY+1][tileColX] != 1) //rework after jumping - { - player1.posY = player1.posY + 5 ;// NEW y set //makew var gravity - //playerStat = falling; //for later use of graphics/sound - } - */ - //else if(tileMap[]) - - - - - -} diff --git a/src/ppusim/input.c b/src/ppusim/input.c new file mode 100644 index 0000000..bdb94ac --- /dev/null +++ b/src/ppusim/input.c @@ -0,0 +1,16 @@ +#include + +#include "input.h" + +hh_s_gamepad g_hh_controller_p1 = { 0 }; +hh_s_gamepad g_hh_controller_p2 = { 0 }; + +void hh_input_read() { + // SDL_PumpEvents(); + const Uint8* kb = SDL_GetKeyboardState(NULL); + g_hh_controller_p1.dpad_up = kb[SDL_SCANCODE_W]; + g_hh_controller_p1.dpad_down = kb[SDL_SCANCODE_S]; + g_hh_controller_p1.dpad_left = kb[SDL_SCANCODE_A]; + g_hh_controller_p1.dpad_right = kb[SDL_SCANCODE_D]; +} + diff --git a/src/stm32.mk b/src/stm32.mk index eab34a4..3b5ccb9 100644 --- a/src/stm32.mk +++ b/src/stm32.mk @@ -62,5 +62,6 @@ STM_SRCS += lib/STM32-base-STM32Cube/HAL/STM32F0xx/src/stm32f0xx_hal.c \ STM_SRCS += stm32/idle_task_static_memory.c \ stm32/main.c \ stm32/setup.c \ - ppu/stm.c + ppu/stm.c \ + stm32/input.c diff --git a/src/stm32/input.c b/src/stm32/input.c new file mode 100644 index 0000000..e2d07cb --- /dev/null +++ b/src/stm32/input.c @@ -0,0 +1,13 @@ +#include + +#include "input.h" + +hh_s_gamepad g_hh_controller_p1 = { 0 }; +hh_s_gamepad g_hh_controller_p2 = { 0 }; + +void hh_input_read() { + g_hh_controller_p1.dpad_left = HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_4); + g_hh_controller_p1.dpad_right = HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_5); + g_hh_controller_p1.dpad_down = HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_6); + g_hh_controller_p1.dpad_up = HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_8); +} -- cgit v1.2.3