Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "../../Crazy-driver/src/video_demo.h"
- #include <stdio.h>
- #include "xuartps.h"
- #include "math.h"
- #include <ctype.h>
- #include <stdlib.h>
- #include "xil_types.h"
- #include "xil_cache.h"
- #include "xparameters.h"
- #include <stdio.h>
- #include "xtime_l.h"
- #include "xgpio.h"
- #include "xscugic.h"
- #include <unistd.h>
- #include "../../Crazy-driver/src/display_ctrl/display_ctrl.h"
- #include "../../Crazy-driver/src/intc/intc.h"
- #include "../../Crazy-driver/src/timer_ps/timer_ps.h"
- #include "../../Crazy-driver/src/video_capture/video_capture.h"
- #include "xtmrctr.h"
- Farve red={255,0,0};
- Farve sort = {192,192,192};
- /*
- * XPAR redefines
- */
- #define DYNCLK_BASEADDR XPAR_AXI_DYNCLK_0_BASEADDR
- #define VGA_VDMA_ID XPAR_AXIVDMA_0_DEVICE_ID
- #define DISP_VTC_ID XPAR_VTC_0_DEVICE_ID
- #define VID_VTC_ID XPAR_VTC_1_DEVICE_ID
- #define VID_GPIO_ID XPAR_AXI_GPIO_VIDEO_DEVICE_ID
- #define VID_VTC_IRPT_ID XPS_FPGA3_INT_ID
- #define VID_GPIO_IRPT_ID XPS_FPGA4_INT_ID
- #define SCU_TIMER_ID XPAR_SCUTIMER_DEVICE_ID
- #define UART_BASEADDR XPAR_PS7_UART_1_BASEADDR
- #define BTNS_DEVICE_ID XPAR_AXI_GPIO_BTN_DEVICE_ID
- #define LEDS_DEVICE_ID XPAR_AXI_GPIO_LED_DEVICE_ID
- #define INTC_GPIO_INTERRUPT_ID XPAR_FABRIC_AXI_GPIO_BTN_IP2INTC_IRPT_INTR
- #define INTC_TMR_INTERRUPT_ID XPAR_FABRIC_AXI_TIMER_0_INTERRUPT_INTR
- #define BTN_INT XGPIO_IR_CH1_MASK
- /* ------------------------------------------------------------ */
- /* Global Variables */
- /* ------------------------------------------------------------ */
- char userInput = 0;
- int playeNewPos;
- int player_pos = 220;
- int GameStartet = 0;
- int score = 0;
- int highScore = 0;
- int ra1;
- int ra2;
- int ra3;
- int ra4;
- int r1 = 5;
- int r2 = 8;
- int r3 = 10;
- int r4 = 5;
- int enemySpeedCounter1;
- int enemySpeedCounter2;
- int enemySpeedCounter3;
- int enemySpeedCounter4;
- int speedUp = 0;
- int speed1 = 5;
- int speed2 = 8;
- int speed3 = 11;
- int Enemy_X4 = 800;
- int Enemy4_wGreen = 0;
- int Enemy4_wRed = 255;
- int Enemy4_wBlue = 0;
- int enemy_y4 = 300;
- int Enemy_X3 = 800;
- int Enemy3_wGreen = 0;
- int Enemy3_wRed = 255;
- int Enemy3_wBlue = 0;
- int enemy_y3 = 260;
- int Enemy_X2 = 1200;
- int Enemy2_wGreen = 0;
- int Enemy2_wRed = 255;
- int Enemy2_wBlue = 0;
- int enemy_y2 = 220;
- int Enemy_wGreen = 0;
- int Enemy_wRed = 255;
- int Enemy_wBlue = 0;
- int enemy_y = 180;
- int Enemy_X = 1200;
- int Enemy_y_size = 10;
- int Enemy_x_size = 40;
- int value = 1;
- XGpio LEDInst, BTNInst;
- XScuGic INTCInst;
- int SpilStartet;
- int r;
- int r2;
- int x=5;
- int led_data;
- int btn_value;
- /*
- * Display and Video Driver structs
- */
- DisplayCtrl dispCtrl;
- XAxiVdma vdma;
- VideoCapture videoCapt;
- INTC intc;
- char fRefresh; //flag used to trigger a refresh of the Menu on video detect
- int randomCount;
- int count;
- /* ------------------------------------------------------------ */
- /* PROTOTYPE Definitions */
- /* ------------------------------------------------------------ */
- void Int_Handler(void *InstancePtr);
- void BTN_Intr_Handler(void *baseaddr_p);
- void TMR_Intr_Handler(void *InstancePtr, u8 TmrCtrNumber);
- int InterruptSystemSetup(XScuGic *XScuGicInstancePtr);
- int IntcInitFunction(u16 DeviceId, XGpio *GpioInstancePtr);
- /*
- * Framebuffers for video data
- */
- u8 frameBuf[DISPLAY_NUM_FRAMES][DEMO_MAX_FRAME];
- u8 *pFrames[DISPLAY_NUM_FRAMES]; //array of pointers to the frame buffers
- /*
- * Interrupt vector table
- */
- const ivt_t ivt[] = {
- videoGpioIvt(VID_GPIO_IRPT_ID, &videoCapt),
- videoVtcIvt(VID_VTC_IRPT_ID, &(videoCapt.vtc)),
- {66, (XInterruptHandler)Int_Handler, NULL, 0xA0, 0x3}
- };
- void XTmrCtr_ClearInterruptFlag(XTmrCtr * InstancePtr, u8 TmrCtrNumber)
- {
- u32 CounterControlReg;
- Xil_AssertVoid(InstancePtr != NULL);
- Xil_AssertVoid(TmrCtrNumber < XTC_DEVICE_TIMER_COUNT);
- Xil_AssertVoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY);
- /*
- * Read current contents of the CSR register so it won't be destroyed
- */
- CounterControlReg = XTmrCtr_ReadReg(InstancePtr->BaseAddress,
- TmrCtrNumber, XTC_TCSR_OFFSET);
- /*
- * Reset the interrupt flag
- */
- XTmrCtr_WriteReg(InstancePtr->BaseAddress, TmrCtrNumber,
- XTC_TCSR_OFFSET,
- CounterControlReg | XTC_CSR_INT_OCCURED_MASK);
- }
- void BTN_Intr_Handler(void *InstancePtr)
- {
- // Disable GPIO interrupts
- XGpio_InterruptDisable(&BTNInst, BTN_INT);
- // Ignore additional button presses
- if ((XGpio_InterruptGetStatus(&BTNInst) & BTN_INT) !=
- BTN_INT)
- { return;
- }
- btn_value = XGpio_DiscreteRead(&BTNInst, 1);
- if ( btn_value == 8) {
- value = 1;
- userInput = '1';
- }
- XGpio_DiscreteWrite(&LEDInst, 1, led_data);
- (void)XGpio_InterruptClear(&BTNInst, BTN_INT);
- // Enable GPIO interrupts
- XGpio_InterruptEnable(&BTNInst, BTN_INT);
- }
- /* ------------------------------------------------------------ */
- /* Procedure Definitions */
- /* ------------------------------------------------------------ */
- int a=1;
- int main(void)
- {
- int status;
- XTmrCtr TMRInst;
- //----------------------------------------------------
- // INITIALIZE THE PERIPHERALS & SET DIRECTIONS OF GPIO
- //----------------------------------------------------
- // Initialise LEDs
- status = XGpio_Initialize(&LEDInst, LEDS_DEVICE_ID);
- if(status != XST_SUCCESS) return XST_FAILURE;
- // Initialise Push Buttons
- status = XGpio_Initialize(&BTNInst, BTNS_DEVICE_ID);
- if(status != XST_SUCCESS) return XST_FAILURE;
- // Set LEDs direction to outputs
- XGpio_SetDataDirection(&LEDInst, 1, 0x00);
- // Set all buttons direction to inputs
- XGpio_SetDataDirection(&BTNInst, 1, 0xFF);
- status = IntcInitFunction(INTC_DEVICE_ID, &BTNInst);
- if (status != XST_SUCCESS) return XST_FAILURE;
- DemoInitialize();
- u8* frame = &frameBuf[0];
- PlayerBox(frame,50,220,40,10,1);
- DisplayChangeFrame(&dispCtrl, 0);
- while(1){
- switch (value)
- {
- case 1:
- xil_printf("\n\rVelkommen til Crazy Driver!");
- xil_printf("\n\rTryk på button 8 for at starte.");
- xil_printf("\n\rTryk på button 1 for at bevæge dig op.");
- xil_printf("\n\rTryk på button 2 for at bevæge dig ned.");
- xil_printf("\n\rHeld og lykke!");
- userInput = 0;
- GameStartet = 0;
- GenstartEnemy();
- score=0;
- StartSpil();
- PlayerBox(frame,50,220,40,10,1);
- Input();
- while(userInput != '2') {
- Input();
- if(GameStartet == 1) {
- CompareAdjustSpeed();
- EnemySpeed1();
- tegn_box(frame,Enemy_X,enemy_y,40,10,sort);
- MoveEnemy1();
- tegn_box(frame,Enemy_X,enemy_y,40,10,red);
- EnemySpeed2();
- tegn_box(frame,Enemy_X2,enemy_y2,40,10,sort);
- MoveEnemy2();
- tegn_box(frame,Enemy_X2,enemy_y2,40,10,red);
- EnemySpeed3();
- tegn_box(frame,Enemy_X3,enemy_y3,40,10,sort);
- MoveEnemy3();
- tegn_box(frame,Enemy_X3,enemy_y3,40,10,red);
- EnemySpeed4();
- tegn_box(frame,Enemy_X4,enemy_y4,40,10,sort);
- MoveEnemy4();
- tegn_box(frame,Enemy_X4,enemy_y4,40,10,red);
- HitDetection();
- speedUp++;
- score++;
- xil_printf("\n\rScore: %d", score);
- if(score > highScore) {
- highScore = score;
- }
- }
- Xil_DCacheFlushRange((unsigned int) frame, DEMO_MAX_FRAME);
- //xil_printf("test\n\r");
- usleep(16000);
- }
- break;
- case 2:
- xil_printf("\n\rVelkommen til Crazy Driver!");
- xil_printf("\n\rTryk på button 8 for at starte.");
- xil_printf("\n\rTryk på button 1 for at bevæge dig op.");
- xil_printf("\n\rTryk på button 2 for at bevæge dig ned.");
- xil_printf("\n\rHeld og lykke!");
- userInput = 0;
- GameStartet = 0;
- score=0;
- GenstartEnemy();
- StartSpil();
- player_pos = 220;
- PlayerBox(frame,50,220,40,10,1);
- Input();
- while(userInput != '2') {
- Input();
- if(GameStartet == 1) {
- CompareAdjustSpeed();
- EnemySpeed1();
- tegn_box(frame,Enemy_X,enemy_y,40,10,sort);
- MoveEnemy1();
- tegn_box(frame,Enemy_X,enemy_y,40,10,red);
- EnemySpeed2();
- tegn_box(frame,Enemy_X2,enemy_y2,40,10,sort);
- MoveEnemy2();
- tegn_box(frame,Enemy_X2,enemy_y2,40,10,red);
- EnemySpeed3();
- tegn_box(frame,Enemy_X3,enemy_y3,40,10,sort);
- MoveEnemy3();
- tegn_box(frame,Enemy_X3,enemy_y3,40,10,red);
- EnemySpeed4();
- tegn_box(frame,Enemy_X4,enemy_y4,40,10,sort);
- MoveEnemy4();
- tegn_box(frame,Enemy_X4,enemy_y4,40,10,red);
- HitDetection2();
- speedUp++;
- score++;
- xil_printf("\n\rScore: %d", score);
- if(score > highScore) {
- highScore = score;
- }
- }
- Xil_DCacheFlushRange((unsigned int) frame, DEMO_MAX_FRAME);
- //xil_printf("test\n\r");
- usleep(16000);
- }
- break;
- default :
- xil_printf("\n\rInvalid Selection");
- TimerDelay(500000);
- break;
- }
- }
- }
- void Int_Handler(void *InstancePtr){
- enemySpeedCounter1++;
- enemySpeedCounter2++;
- enemySpeedCounter3++;
- enemySpeedCounter4++;
- //xil_printf("%d\n\r", enemySpeedCounter3);
- }
- void DemoInitialize()
- {
- int Status;
- XAxiVdma_Config *vdmaConfig;
- int i;
- /*
- * Initialize an array of pointers to the 3 frame buffers
- */
- for (i = 0; i < DISPLAY_NUM_FRAMES; i++)
- {
- pFrames[i] = frameBuf[i];
- }
- /*
- * Initialize a timer used for a simple delay
- */
- TimerInitialize(SCU_TIMER_ID);
- /*
- * Initialize VDMA driver
- */
- vdmaConfig = XAxiVdma_LookupConfig(VGA_VDMA_ID);
- if (!vdmaConfig)
- {
- xil_printf("No video DMA found for ID %d\r\n", VGA_VDMA_ID);
- return;
- }
- Status = XAxiVdma_CfgInitialize(&vdma, vdmaConfig, vdmaConfig->BaseAddress);
- if (Status != XST_SUCCESS)
- {
- xil_printf("VDMA Configuration Initialization failed %d\r\n", Status);
- return;
- }
- /*
- * Initialize the Display controller and start it
- */
- Status = DisplayInitialize(&dispCtrl, &vdma, DISP_VTC_ID, DYNCLK_BASEADDR, pFrames, DEMO_STRIDE);
- if (Status != XST_SUCCESS)
- {
- xil_printf("Display Ctrl initialization failed during demo initialization%d\r\n", Status);
- return;
- }
- Status = DisplayStart(&dispCtrl);
- if (Status != XST_SUCCESS)
- {
- xil_printf("Couldn't start display during demo initialization%d\r\n", Status);
- return;
- }
- /*
- * Initialize the Video Capture device
- */
- Status = VideoInitialize(&videoCapt, &intc, &vdma, VID_GPIO_ID, VID_VTC_ID, VID_VTC_IRPT_ID, pFrames, DEMO_STRIDE, DEMO_START_ON_DET);
- if (Status != XST_SUCCESS)
- {
- xil_printf("Video Ctrl initialization failed during demo initialization%d\r\n", Status);
- return;
- }
- /*
- * Set the Video Detect callback to trigger the menu to reset, displaying the new detected resolution
- */
- VideoSetCallback(&videoCapt, DemoISR, &fRefresh);
- StartSpil();
- return;
- }
- void DemoInvertFrame(u8 *srcFrame, u8 *destFrame, u32 width, u32 height, u32 stride)
- {
- u32 xcoi, ycoi;
- u32 lineStart = 0;
- for(ycoi = 0; ycoi < height; ycoi++)
- {
- for(xcoi = 0; xcoi < (width * 3); xcoi+=3)
- {
- destFrame[xcoi + lineStart] = ~srcFrame[xcoi + lineStart]; //Red
- destFrame[xcoi + lineStart + 1] = ~srcFrame[xcoi + lineStart + 1]; //Blue
- destFrame[xcoi + lineStart + 2] = ~srcFrame[xcoi + lineStart + 2]; //Green
- }
- lineStart += stride;
- }
- /*
- * Flush the framebuffer memory range to ensure changes are written to the
- * actual memory, and therefore accessible by the VDMA.
- */
- Xil_DCacheFlushRange((unsigned int) destFrame, DEMO_MAX_FRAME);
- }
- /*
- * Bilinear interpolation algorithm. Assumes both frames have the same stride.
- */
- void DemoScaleFrame(u8 *srcFrame, u8 *destFrame, u32 srcWidth, u32 srcHeight, u32 destWidth, u32 destHeight, u32 stride)
- {
- float xInc, yInc; // Width/height of a destination frame pixel in the source frame coordinate system
- float xcoSrc, ycoSrc; // Location of the destination pixel being operated on in the source frame coordinate system
- float x1y1, x2y1, x1y2, x2y2; //Used to store the color data of the four nearest source pixels to the destination pixel
- int ix1y1, ix2y1, ix1y2, ix2y2; //indexes into the source frame for the four nearest source pixels to the destination pixel
- float xDist, yDist; //distances between destination pixel and x1y1 source pixels in source frame coordinate system
- int xcoDest, ycoDest; // Location of the destination pixel being operated on in the destination coordinate system
- int iy1; //Used to store the index of the first source pixel in the line with y1
- int iDest; //index of the pixel data in the destination frame being operated on
- int i;
- xInc = ((float) srcWidth - 1.0) / ((float) destWidth);
- yInc = ((float) srcHeight - 1.0) / ((float) destHeight);
- ycoSrc = 0.0;
- for (ycoDest = 0; ycoDest < destHeight; ycoDest++)
- {
- iy1 = ((int) ycoSrc) * stride;
- yDist = ycoSrc - ((float) ((int) ycoSrc));
- /*
- * Save some cycles in the loop below by presetting the destination
- * index to the first pixel in the current line
- */
- iDest = ycoDest * stride;
- xcoSrc = 0.0;
- for (xcoDest = 0; xcoDest < destWidth; xcoDest++)
- {
- ix1y1 = iy1 + ((int) xcoSrc) * 3;
- ix2y1 = ix1y1 + 3;
- ix1y2 = ix1y1 + stride;
- ix2y2 = ix1y1 + stride + 3;
- xDist = xcoSrc - ((float) ((int) xcoSrc));
- /*
- * For loop handles all three colors
- */
- for (i = 0; i < 3; i++)
- {
- x1y1 = (float) srcFrame[ix1y1 + i];
- x2y1 = (float) srcFrame[ix2y1 + i];
- x1y2 = (float) srcFrame[ix1y2 + i];
- x2y2 = (float) srcFrame[ix2y2 + i];
- /*
- * Bilinear interpolation function
- */
- destFrame[iDest] = (u8) ((1.0-yDist)*((1.0-xDist)*x1y1+xDist*x2y1) + yDist*((1.0-xDist)*x1y2+xDist*x2y2));
- iDest++;
- }
- xcoSrc += xInc;
- }
- ycoSrc += yInc;
- }
- /*
- * Flush the framebuffer memory range to ensure changes are written to the
- * actual memory, and therefore accessible by the VDMA.
- */
- Xil_DCacheFlushRange((unsigned int) destFrame, DEMO_MAX_FRAME);
- return;
- }
- void Input(){
- fRefresh = 0;
- /* Store the first character in the UART receive FIFO and echo it */
- if (XUartPs_IsReceiveData(UART_BASEADDR))
- {
- btn_value = XUartPs_ReadReg(UART_BASEADDR, XUARTPS_FIFO_OFFSET);
- xil_printf("%c", userInput);
- }
- else //Refresh triggered by video detect interrupt
- {
- userInput = 'r';
- }
- if(btn_value == 1){
- PlayerMove(1);
- btn_value = 0;
- }
- if(btn_value == 2){
- PlayerMove(2);
- btn_value = 0;
- }
- /*
- if(btn_value == 1 && btn_last_value!= 1){
- PlayerMove(1);
- btn_value = 0;
- btn_last_value = 1;
- }
- if(btn_value == 2 && btn_last_value2 != 1){
- PlayerMove(2);
- btn_value = 0;
- btn_last_value2 = 1;
- }
- */
- if(btn_value == 8) {
- GameStartet = 1;
- }
- }
- void GenstartEnemy(){
- Enemy_X4 = 800;
- Enemy4_wGreen = 0;
- Enemy4_wRed = 255;
- Enemy4_wBlue = 0;
- enemy_y4 = 300;
- player_pos = 220;
- speedUp = 0;
- speed1 = 5;
- speed2 = 8;
- speed3 = 11;
- Enemy_X3 = 800;
- Enemy3_wGreen = 0;
- Enemy3_wRed = 255;
- Enemy3_wBlue = 0;
- enemy_y3 = 260;
- Enemy_X2 = 1200;
- Enemy2_wGreen = 0;
- Enemy2_wRed = 255;
- Enemy2_wBlue = 0;
- enemy_y2 = 220;
- Enemy_wGreen = 0;
- Enemy_wRed = 255;
- Enemy_wBlue = 0;
- enemy_y = 180;
- Enemy_X = 1200;
- Enemy_y_size = 10;
- Enemy_x_size = 40;
- }
- void MoveEnemy1(){
- Enemy_X = Enemy_X - r1;
- if (Enemy_X <= 0) {
- Enemy_X = 1200;
- }
- }
- void MoveEnemy2(){
- Enemy_X2 = Enemy_X2 - r2;
- if (Enemy_X2 <= 0) {
- Enemy_X2 = 600;
- }
- }
- void MoveEnemy3(){
- Enemy_X3 = Enemy_X3 - r3;
- if (Enemy_X3 <= 0) {
- Enemy_X3 = 800;
- }
- }
- void MoveEnemy4(){
- Enemy_X4 = Enemy_X4 - r4;
- if (Enemy_X4 <= 0) {
- Enemy_X4 = 800;
- }
- }
- void CompareAdjustSpeed() {
- if(speedUp == 200){
- speed1 += 2;
- speed2 += 2;
- speed3 += 2;
- speedUp = 0;
- }
- if(r1 == r2) {
- r2 = r3;
- }
- if(r2 == r3){
- r3 = r4;
- }
- if(r3 == r4){
- r4 = r1;
- }
- }
- void EnemySpeed1(){
- if(enemySpeedCounter1 >= 100 && Enemy_X >= 580){
- ra1=rand()%3;
- if(ra1 == 0){
- r1 = speed1;
- }
- if(ra1 == 1) {
- r1 = speed2;
- }
- if(ra1 == 2) {
- r1 = speed3;
- }
- enemySpeedCounter1 = 0;
- }
- }
- void EnemySpeed2(){
- if(enemySpeedCounter2 >= 100 && Enemy_X2 >= 580){
- ra2=rand()%3;
- if(ra2 == 0){
- r2 = speed1;
- }
- if(ra2 == 1) {
- r2 = speed2;
- }
- if(ra2 == 2) {
- r2 = speed3;
- }
- enemySpeedCounter2 = 0;
- }
- }
- void EnemySpeed3(){
- if(enemySpeedCounter3 >= 100 && Enemy_X3 >= 580){
- ra3=rand()%3;
- if(ra3 == 0){
- r3 = speed1;
- }
- if(ra3 == 1) {
- r3 = speed2;
- }
- if(ra3 == 2) {
- r3 = speed3;
- }
- enemySpeedCounter3 = 0;
- }
- }
- void EnemySpeed4(){
- if(enemySpeedCounter4 >= 100 && Enemy_X4 >= 580){
- ra4=rand()%3;
- if(ra4 == 0){
- r4 = speed1;
- }
- if(ra4 == 1) {
- r4 = speed2;
- }
- if(ra4 == 2) {
- r4 = speed3;
- }
- enemySpeedCounter4 = 0;
- }
- }
- void HitDetection() {
- if (player_pos == enemy_y && Enemy_X <= 90 && Enemy_X >= 10) {
- GameOver(pFrames[dispCtrl.curFrame], dispCtrl.vMode.width, dispCtrl.vMode.height, DEMO_STRIDE);
- GameOverTitle(pFrames[dispCtrl.curFrame],120,220,10, DEMO_STRIDE);
- TimerDelay(2000000);
- userInput = '2';
- value = 2;
- }
- if (player_pos == enemy_y2 && Enemy_X2 <= 90 && Enemy_X2 >= 10 ) {
- GameOver(pFrames[dispCtrl.curFrame], dispCtrl.vMode.width, dispCtrl.vMode.height, DEMO_STRIDE);
- GameOverTitle(pFrames[dispCtrl.curFrame],120,220,10, DEMO_STRIDE);
- TimerDelay(2000000);
- userInput = '2';
- value = 2;
- }
- if (player_pos == enemy_y3 && Enemy_X3 <= 90 && Enemy_X3 >= 10 ) {
- GameOver(pFrames[dispCtrl.curFrame], dispCtrl.vMode.width, dispCtrl.vMode.height, DEMO_STRIDE);
- GameOverTitle(pFrames[dispCtrl.curFrame],120,220,10, DEMO_STRIDE);
- TimerDelay(2000000);
- userInput = '2';
- value = 2;
- }
- if (player_pos == enemy_y4 && Enemy_X4 <= 90 && Enemy_X4 >= 10 ) {
- GameOver(pFrames[dispCtrl.curFrame], dispCtrl.vMode.width, dispCtrl.vMode.height, DEMO_STRIDE);
- GameOverTitle(pFrames[dispCtrl.curFrame],120,220,10, DEMO_STRIDE);
- TimerDelay(2000000);
- userInput = '2';
- value = 2;
- }
- }
- void HitDetection2() {
- if (player_pos == enemy_y && Enemy_X <= 90 && Enemy_X >= 10) {
- GameOver(pFrames[dispCtrl.curFrame], dispCtrl.vMode.width, dispCtrl.vMode.height, DEMO_STRIDE);
- GameOverTitle(pFrames[dispCtrl.curFrame],120,220,10, DEMO_STRIDE);
- TimerDelay(2000000);
- userInput = '2';
- value = 1;
- }
- if (player_pos == enemy_y2 && Enemy_X2 <= 90 && Enemy_X2 >= 10 ) {
- GameOver(pFrames[dispCtrl.curFrame], dispCtrl.vMode.width, dispCtrl.vMode.height, DEMO_STRIDE);
- GameOverTitle(pFrames[dispCtrl.curFrame],120,220,10, DEMO_STRIDE);
- TimerDelay(2000000);
- userInput = '2';
- value = 1;
- }
- if (player_pos == enemy_y3 && Enemy_X3 <= 90 && Enemy_X3 >= 10 ) {
- GameOver(pFrames[dispCtrl.curFrame], dispCtrl.vMode.width, dispCtrl.vMode.height, DEMO_STRIDE);
- GameOverTitle(pFrames[dispCtrl.curFrame],120,220,10, DEMO_STRIDE);
- TimerDelay(2000000);
- userInput = '2';
- value = 1;
- }
- if (player_pos == enemy_y4 && Enemy_X4 <= 90 && Enemy_X4 >= 10 ) {
- GameOver(pFrames[dispCtrl.curFrame], dispCtrl.vMode.width, dispCtrl.vMode.height, DEMO_STRIDE);
- GameOverTitle(pFrames[dispCtrl.curFrame],120,220,10, DEMO_STRIDE);
- TimerDelay(4000000);
- userInput = '2';
- value = 1;
- }
- }
- void tegn_box(u8* frame, u32 x, u32 y, u32 dx, u32 dy, Farve f){
- u32 x_tmp, y_tmp;
- u32 iPixelAddr;
- for(x_tmp = x ; x_tmp < x+dx; x_tmp++)
- {
- for(y_tmp=y; y_tmp < y+dy; y_tmp++)
- {
- iPixelAddr = 3*x_tmp + y_tmp*DEMO_STRIDE;
- frame[iPixelAddr] = f.g;
- frame[iPixelAddr + 1] = f.b;
- frame[iPixelAddr + 2] = f.r;
- }
- }
- }
- void PlayerBox(u8 *frame, u32 x, u32 y, u32 x_size, u32 y_size, u32 color) {
- u32 iPixelAddr;
- u8 wRed, wBlue, wGreen;
- u32 x_tmp, y_tmp;
- //Sort farve
- if(color == 1) {
- wGreen = 0;
- wRed = 0;
- wBlue = 0;
- }
- //Grå farve
- else {
- wGreen = 192;
- wRed = 192;
- wBlue = 192;
- }
- //Tegner boxen
- for(x_tmp=x; x_tmp < x+x_size; x_tmp++)
- {
- for(y_tmp=y; y_tmp < y+y_size; y_tmp++)
- {
- iPixelAddr = 3*x_tmp + y_tmp*DEMO_STRIDE;
- frame[iPixelAddr] = wGreen;
- frame[iPixelAddr + 1] = wBlue;
- frame[iPixelAddr + 2] = wRed;
- }
- }
- Xil_DCacheFlushRange((unsigned int) frame, DEMO_MAX_FRAME);
- }
- void PlayerMove(u32 playerNewPos){
- int y;
- y = player_pos;
- // Flytter player op
- if(playerNewPos == 1 && player_pos == 260 ){
- PlayerBox(frameBuf[0],50,y,40,10,2);
- y = y-40;
- PlayerBox(frameBuf[0],50,y,40,10,1);
- //PlayerBox(frameBuf[0],50,y,40,10,0);
- }
- if(playerNewPos == 1 && player_pos == 220 ){
- PlayerBox(frameBuf[0],50,y,40,10,2);
- y = y-40;
- PlayerBox(frameBuf[0],50,y,40,10,1);
- //PlayerBox(frameBuf[0],50,y,40,10,0);
- }
- // Flytter player op
- if(playerNewPos == 1 && player_pos == 300 ){
- PlayerBox(frameBuf[0],50,y,40,10,2);
- y = y-40;
- PlayerBox(frameBuf[0],50,y,40,10,1);
- //PlayerBox(frameBuf[0],50,y,40,10,0);
- }
- // Flytter player ned
- if(playerNewPos == 2 && player_pos == 180 ){
- PlayerBox(frameBuf[0],50,y,40,10,2);
- y = y+40;
- PlayerBox(frameBuf[0],50,y,40,10,1);
- //PlayerBox(frameBuf[0],50,y,40,10,0);
- }
- // Flytter player ned
- if(playerNewPos == 2 && player_pos == 220 ){
- PlayerBox(frameBuf[0],50,y,40,10,2);
- y = y+40;
- PlayerBox(frameBuf[0],50,y,40,10,1);
- //PlayerBox(frameBuf[0],50,y,40,10,0);
- }
- // Flytter player ned
- if(playerNewPos == 2 && player_pos == 260 ){
- PlayerBox(frameBuf[0],50,y,40,10,2);
- y = y+40;
- PlayerBox(frameBuf[0],50,y,40,10,1);
- //PlayerBox(frameBuf[0],50,y,40,10,0);
- }
- player_pos=y;
- }
- void StartSpil(){
- SpilStartet = 1;
- Background(pFrames[dispCtrl.curFrame], dispCtrl.vMode.width, dispCtrl.vMode.height, DEMO_STRIDE);
- Platform2(pFrames[dispCtrl.curFrame], dispCtrl.vMode.width, dispCtrl.vMode.height, DEMO_STRIDE);
- Platform(pFrames[dispCtrl.curFrame], dispCtrl.vMode.width, dispCtrl.vMode.height, DEMO_STRIDE);
- OpStribe(pFrames[dispCtrl.curFrame], dispCtrl.vMode.width, dispCtrl.vMode.height, DEMO_STRIDE);
- NedStribe(pFrames[dispCtrl.curFrame], dispCtrl.vMode.width, dispCtrl.vMode.height, DEMO_STRIDE);
- NederstStribe(pFrames[dispCtrl.curFrame], dispCtrl.vMode.width, dispCtrl.vMode.height, DEMO_STRIDE);
- GreyBox(pFrames[dispCtrl.curFrame], dispCtrl.vMode.width, dispCtrl.vMode.height, DEMO_STRIDE, 100, 1700);
- GreyBox(pFrames[dispCtrl.curFrame], dispCtrl.vMode.width, dispCtrl.vMode.height, DEMO_STRIDE, 400, 1400);
- GreyBox(pFrames[dispCtrl.curFrame], dispCtrl.vMode.width, dispCtrl.vMode.height, DEMO_STRIDE, 700, 1100);
- GreyBox(pFrames[dispCtrl.curFrame], dispCtrl.vMode.width, dispCtrl.vMode.height, DEMO_STRIDE, 1000, 800);
- GreyBox(pFrames[dispCtrl.curFrame], dispCtrl.vMode.width, dispCtrl.vMode.height, DEMO_STRIDE, 1300, 500);
- GreyBox(pFrames[dispCtrl.curFrame], dispCtrl.vMode.width, dispCtrl.vMode.height, DEMO_STRIDE, 1600, 200);
- GreyBox(pFrames[dispCtrl.curFrame], dispCtrl.vMode.width, dispCtrl.vMode.height, DEMO_STRIDE, 1900, 0);
- Title(pFrames[dispCtrl.curFrame],150,60,6, DEMO_STRIDE);
- //Score(pFrames[dispCtrl.curFrame],30,400,6, DEMO_STRIDE);
- }
- void Platform2(u8 *frame, u32 width, u32 height, u32 stride){
- u32 xcoi, ycoi;
- u32 iPixelAddr;
- u8 wRed, wBlue, wGreen;
- wGreen = 255;
- wRed = 255;
- wBlue = 255;
- for(xcoi = 0; xcoi < (width*3); xcoi+=3)
- {
- iPixelAddr = xcoi + 315*stride;
- for(ycoi = 270; ycoi < height-200; ycoi++)
- {
- frame[iPixelAddr] = wGreen;
- frame[iPixelAddr + 1] = wBlue;
- frame[iPixelAddr + 2] = wRed;
- iPixelAddr += stride;
- }
- }
- Xil_DCacheFlushRange((unsigned int) frame, DEMO_MAX_FRAME);
- }
- void Platform(u8 *frame, u32 width, u32 height, u32 stride){
- u32 xcoi, ycoi;
- u32 iPixelAddr;
- u8 wRed, wBlue, wGreen;
- wGreen = 255;
- wRed = 255;
- wBlue = 255;
- for(xcoi = 0; xcoi < (width*3); xcoi+=3)
- {
- iPixelAddr = xcoi + 158*stride;
- for(ycoi = 270; ycoi < height-200; ycoi++)
- {
- frame[iPixelAddr] = wGreen;
- frame[iPixelAddr + 1] = wBlue;
- frame[iPixelAddr + 2] = wRed;
- iPixelAddr += stride;
- }
- }
- Xil_DCacheFlushRange((unsigned int) frame, DEMO_MAX_FRAME);
- }
- void Background(u8 *frame, u32 width, u32 height, u32 stride)
- {
- u32 xcoi, ycoi;
- u32 iPixelAddr;
- u8 wRed, wBlue, wGreen;
- wGreen = 192;
- wRed = 192;
- wBlue = 192;
- for(xcoi = 0; xcoi < (width*3)-1; xcoi+=3)
- {
- iPixelAddr = xcoi + 165*stride;
- for(ycoi = 0; ycoi < height-320; ycoi++)
- {
- frame[iPixelAddr] = wGreen;
- frame[iPixelAddr +1] = wBlue;
- frame[iPixelAddr + 2] = wRed;
- iPixelAddr += stride;
- }
- }
- Xil_DCacheFlushRange((unsigned int) frame, DEMO_MAX_FRAME);
- }
- void OpStribe(u8 *frame, u32 width, u32 height, u32 stride){
- u32 xcoi, ycoi;
- u32 iPixelAddr;
- u8 wRed, wBlue, wGreen;
- wGreen = 255;
- wRed = 255;
- wBlue = 255;
- for(xcoi = 0; xcoi < (width*3); xcoi+=3)
- {
- iPixelAddr = xcoi + 200*stride;
- for(ycoi = 276; ycoi < height-200; ycoi++)
- {
- frame[iPixelAddr] = wGreen;
- frame[iPixelAddr + 1] = wBlue;
- frame[iPixelAddr + 2] = wRed;
- iPixelAddr += stride;
- }
- }
- Xil_DCacheFlushRange((unsigned int) frame, DEMO_MAX_FRAME);
- }
- void NedStribe(u8 *frame, u32 width, u32 height, u32 stride){
- u32 xcoi, ycoi;
- u32 iPixelAddr;
- u8 wRed, wBlue, wGreen;
- wGreen = 255;
- wRed = 255;
- wBlue = 255;
- for(xcoi = 0; xcoi < (width*3); xcoi+=3)
- {
- iPixelAddr = xcoi + 240*stride;
- for(ycoi = 276; ycoi < height-200; ycoi++)
- {
- frame[iPixelAddr] = wGreen;
- frame[iPixelAddr + 1] = wBlue;
- frame[iPixelAddr + 2] = wRed;
- iPixelAddr += stride;
- }
- }
- Xil_DCacheFlushRange((unsigned int) frame, DEMO_MAX_FRAME);
- }
- void NederstStribe(u8 *frame, u32 width, u32 height, u32 stride){
- u32 xcoi, ycoi;
- u32 iPixelAddr;
- u8 wRed, wBlue, wGreen;
- wGreen = 255;
- wRed = 255;
- wBlue = 255;
- for(xcoi = 0; xcoi < (width*3); xcoi+=3)
- {
- iPixelAddr = xcoi + 280*stride;
- for(ycoi = 276; ycoi < height-200; ycoi++)
- {
- frame[iPixelAddr] = wGreen;
- frame[iPixelAddr + 1] = wBlue;
- frame[iPixelAddr + 2] = wRed;
- iPixelAddr += stride;
- }
- }
- Xil_DCacheFlushRange((unsigned int) frame, DEMO_MAX_FRAME);
- }
- void GameOver(u8 *frame, u32 width, u32 height, u32 stride){
- u32 xcoi, ycoi;
- u32 iPixelAddr;
- u8 wRed, wBlue, wGreen;
- wGreen = 0;
- wRed = 0;
- wBlue = 0;
- for(xcoi = 0; xcoi < (width*3); xcoi+=3)
- {
- iPixelAddr = xcoi + 150*stride;
- for(ycoi = 276; ycoi < height-20; ycoi++)
- {
- frame[iPixelAddr] = wGreen;
- frame[iPixelAddr + 1] = wBlue;
- frame[iPixelAddr + 2] = wRed;
- iPixelAddr += stride;
- }
- }
- Xil_DCacheFlushRange((unsigned int) frame, DEMO_MAX_FRAME);
- }
- void GreyBox(u8 *frame, u32 width, u32 height, u32 stride, int x1, int x2)
- {
- u32 xcoi, ycoi;
- u32 iPixelAddr;
- u8 wRed, wBlue, wGreen;
- wGreen = 192;
- wRed = 192;
- wBlue = 192;
- for(xcoi = x1; xcoi < (width*3)-x2; xcoi+=3)
- {
- iPixelAddr = xcoi + 170*stride;
- for(ycoi = 0; ycoi < height-345; ycoi++)
- {
- frame[iPixelAddr] = wGreen;
- frame[iPixelAddr +1] = wBlue;
- frame[iPixelAddr + 2] = wRed;
- iPixelAddr += stride;
- }
- }
- Xil_DCacheFlushRange((unsigned int) frame, DEMO_MAX_FRAME);
- }
- void DemoISR(void *callBackRef, void *pVideo)
- {
- char *data = (char *) callBackRef;
- *data = 1; //set fRefresh to 1
- }
- void Title(u8 *frame, u32 xcor, u32 ycor, u32 size, u32 stride){
- int aer[5][56] = {
- {0,2,2,2,0,2,2,2,0,0,0,2,2,0,0,2,2,2,2,2,0,2,0,0,0,2,0,0,0,0,2,2,2,0,0,2,2,2,0,0,2,0,2,0,0,0,2,0,2,2,2,0,2,2,2,0,},
- {2,0,0,0,0,2,0,0,2,0,2,0,0,2,0,0,0,0,2,0,0,0,2,0,2,0,0,0,0,0,2,0,0,2,0,2,0,0,2,0,2,0,2,0,0,0,2,0,2,0,0,0,2,0,0,2,},
- {2,0,0,0,0,2,2,2,2,0,2,2,2,2,0,0,0,2,0,0,0,0,0,2,0,0,0,0,0,0,2,0,0,2,0,2,2,2,2,0,2,0,2,0,0,0,2,0,2,2,2,0,2,2,2,2,},
- {2,0,0,0,0,2,0,2,0,0,2,0,0,2,0,0,2,0,0,0,0,0,0,2,0,0,0,0,0,0,2,0,0,2,0,2,0,2,0,0,2,0,0,2,0,2,0,0,2,0,0,0,2,0,2,0,},
- {0,2,2,2,0,2,0,0,2,0,2,0,0,2,0,2,2,2,2,2,0,0,0,2,0,0,0,0,0,0,2,2,2,0,0,2,0,0,2,0,2,0,0,0,2,0,0,0,2,2,2,0,2,0,0,2,}
- };
- for(int j = 0; j<5; j++){
- for(int i = 0; i<56; i++){
- int x =aer[j][i];
- switch(x){
- case 0 :
- xcor += size;
- break;
- case 2 :
- DrawTitle(frame, xcor, ycor, size,stride, 255, 255, 255);
- xcor += size;
- break;
- }
- }
- ycor += size;
- xcor -= 56*size;
- }
- Xil_DCacheFlushRange((unsigned int) frame, DEMO_MAX_FRAME);
- }
- void DrawTitle(u8 *frame, u32 xcor, u32 ycor, u32 size, u32 stride, double fRed, double fBlue, double fGreen){
- xcor = xcor*3;
- u32 iPixelAddr;
- for(int x = 0; x < (size*3); x+=3){
- iPixelAddr = xcor+(stride*ycor)+x;
- for(int y = 0; y < size; y++){
- frame[iPixelAddr] = fRed;
- frame[iPixelAddr + 1] = fBlue;
- frame[iPixelAddr + 2] = fGreen;
- /*
- * This pattern is printed one vertical line at a time, so the address must be incremented
- * by the stride instead of just 1.
- */
- iPixelAddr += stride;
- }
- }
- }
- void Score(u8 *frame, u32 xcor, u32 ycor, u32 size, u32 stride){
- int aer[5][56] = {
- {0,2,2,2,0,0,2,2,2,0,0,2,2,0,0,2,2,2,0,0,2,2,2,0,0,0,0,0,0,0,0,2,2,0,0,0,2,2,0,0,0,2,2,0,0,0,2,2,0,0,0,0,0,0,0,},
- {2,0,0,0,0,2,0,0,0,0,2,0,0,2,0,2,0,0,2,0,2,0,0,0,0,2,2,2,0,0,2,0,0,2,0,2,0,0,2,0,2,0,0,2,0,2,0,0,2,0,0,0,0,0,0,},
- {2,2,2,2,0,2,0,0,0,0,2,0,0,2,0,2,2,2,2,0,2,2,2,0,0,0,0,0,0,0,2,0,0,2,0,2,0,0,2,0,2,0,0,2,0,2,0,0,2,0,0,0,0,0,0,},
- {0,0,0,2,0,2,0,0,0,0,2,0,0,2,0,2,0,2,0,0,2,0,0,0,0,2,2,2,0,0,2,0,0,2,0,2,0,0,2,0,2,0,0,2,0,2,0,0,2,0,0,0,0,0,0,},
- {2,2,2,0,0,0,2,2,2,0,0,2,2,0,0,2,0,0,2,0,2,2,2,0,0,0,0,0,0,0,0,2,2,0,0,0,2,2,0,0,0,2,2,0,0,0,2,2,0,0,0,0,0,0,0,}
- };
- for(int j = 0; j<5; j++){
- for(int i = 0; i<56; i++){
- int x =aer[j][i];
- switch(x){
- case 0 :
- xcor += size;
- break;
- case 2 :
- DrawScore(frame, xcor, ycor, size,stride, 255, 255, 255);
- xcor += size;
- break;
- }
- }
- ycor += size;
- xcor -= 56*size;
- }
- Xil_DCacheFlushRange((unsigned int) frame, DEMO_MAX_FRAME);
- }
- void DrawScore(u8 *frame, u32 xcor, u32 ycor, u32 size, u32 stride, double fRed, double fBlue, double fGreen){
- xcor = xcor*3;
- u32 iPixelAddr;
- for(int x = 0; x < (size*3); x+=3){
- iPixelAddr = xcor+(stride*ycor)+x;
- for(int y = 0; y < size; y++){
- frame[iPixelAddr] = fRed;
- frame[iPixelAddr + 1] = fBlue;
- frame[iPixelAddr + 2] = fGreen;
- /*
- * This pattern is printed one vertical line at a time, so the address must be incremented
- * by the stride instead of just 1.
- */
- iPixelAddr += stride;
- }
- }
- }
- void GameOverTitle(u8 *frame, u32 xcor, u32 ycor, u32 size, u32 stride){
- int aer[5][56] = {
- {2,2,2,2,0,0,2,2,0,0,2,0,0,0,2,0,2,2,2,0,0,0,0,0,2,2,0,0,2,0,0,0,2,0,2,2,2,0,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,},
- {2,0,0,0,0,2,0,0,2,0,2,2,0,2,2,0,2,0,0,0,0,0,0,2,0,0,2,0,2,0,0,0,2,0,2,0,0,0,2,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,},
- {2,0,2,2,0,2,2,2,2,0,2,0,2,0,2,0,2,2,2,0,0,0,0,2,0,0,2,0,2,0,0,0,2,0,2,2,2,0,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,},
- {2,0,0,2,0,2,0,0,2,0,2,0,0,0,2,0,2,0,0,0,0,0,0,2,0,0,2,0,0,2,0,2,0,0,2,0,0,0,2,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,},
- {2,2,2,2,0,2,0,0,2,0,2,0,0,0,2,0,2,2,2,0,0,0,0,0,2,2,0,0,0,0,2,0,0,0,2,2,2,0,2,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,}
- };
- for(int j = 0; j<5; j++){
- for(int i = 0; i<56; i++){
- int x =aer[j][i];
- switch(x){
- case 0 :
- xcor += size;
- break;
- case 2 :
- DrawGameOverTitle(frame, xcor, ycor, size,stride, 255, 255, 255);
- xcor += size;
- break;
- }
- }
- ycor += size;
- xcor -= 56*size;
- }
- Xil_DCacheFlushRange((unsigned int) frame, DEMO_MAX_FRAME);
- }
- void DrawGameOverTitle(u8 *frame, u32 xcor, u32 ycor, u32 size, u32 stride, double fRed, double fBlue, double fGreen){
- xcor = xcor*3;
- u32 iPixelAddr;
- for(int x = 0; x < (size*3); x+=3){
- iPixelAddr = xcor+(stride*ycor)+x;
- for(int y = 0; y < size; y++){
- frame[iPixelAddr] = fRed;
- frame[iPixelAddr + 1] = fBlue;
- frame[iPixelAddr + 2] = fGreen;
- /*
- * This pattern is printed one vertical line at a time, so the address must be incremented
- * by the stride instead of just 1.
- */
- iPixelAddr += stride;
- }
- }
- }
- //----------------------------------------------------
- // INITIAL SETUP FUNCTIONS
- //----------------------------------------------------
- int InterruptSystemSetup(XScuGic *XScuGicInstancePtr)
- {
- // Enable interrupt
- XGpio_InterruptEnable(&BTNInst, BTN_INT);
- XGpio_InterruptGlobalEnable(&BTNInst);
- Xil_ExceptionRegisterHandler(XIL_EXCEPTION_ID_INT,
- (Xil_ExceptionHandler)XScuGic_InterruptHandler,
- XScuGicInstancePtr);
- Xil_ExceptionEnable();
- return XST_SUCCESS;
- }
- int IntcInitFunction(u16 DeviceId, XGpio *GpioInstancePtr)
- {
- XScuGic_Config *IntcConfig;
- int status;
- u8 pri, trig;
- // Interrupt controller initialisation
- IntcConfig = XScuGic_LookupConfig(DeviceId);
- status = XScuGic_CfgInitialize(&INTCInst, IntcConfig, IntcConfig->CpuBaseAddress);
- if(status != XST_SUCCESS) return XST_FAILURE;
- /*
- * Initialize the Interrupt controller and start it.
- */
- status = fnInitInterruptController(&intc);
- if(status != XST_SUCCESS) {
- xil_printf("Error initializing interrupts");
- return;
- }
- fnEnableInterrupts(&intc, &ivt[0], sizeof(ivt)/sizeof(ivt[0]));
- // Call to interrupt setup
- status = InterruptSystemSetup(&INTCInst);
- if(status != XST_SUCCESS) return XST_FAILURE;
- // Connect GPIO interrupt to handler
- status = XScuGic_Connect(&INTCInst,
- INTC_GPIO_INTERRUPT_ID,
- (Xil_ExceptionHandler)BTN_Intr_Handler,
- (void *)GpioInstancePtr);
- if(status != XST_SUCCESS) return XST_FAILURE;
- // Enable GPIO interrupts interrupt
- XGpio_InterruptEnable(GpioInstancePtr, 1);
- XGpio_InterruptGlobalEnable(GpioInstancePtr);
- // Enable GPIO and timer interrupts in the controller
- XScuGic_Enable(&INTCInst, INTC_GPIO_INTERRUPT_ID);
- //XScuGic_Enable(&INTCInst, INTC_TMR_INTERRUPT_ID);
- xil_printf("Getting the Timer interrupt info\n\r");
- XScuGic_GetPriTrigTypeByDistAddr(INTCInst.Config->DistBaseAddress, INTC_TMR_INTERRUPT_ID, &pri, &trig);
- xil_printf("GPIO Interrupt-> Priority:%d, Trigger:%x\n\r", pri, trig);
- //Set the timer interrupt as edge triggered
- //XScuGic_SetPriorityTriggerType(&INTCInst, INTC_TMR_INTERRUPT_ID, )
- return XST_SUCCESS;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement