final project: games console...university of colorado boulder ecen 2020 – applications of embedded...

109
University of Colorado Boulder ECEN 2020 Applications of Embedded Systems Final Project: Portable Gaming Console Dhruva Koley Ruben Vargas December 12, 2016

Upload: others

Post on 05-Feb-2021

2 views

Category:

Documents


0 download

TRANSCRIPT

  • University of Colorado Boulder

    ECEN 2020 – Applications of Embedded Systems

    Final Project: Portable Gaming Console

    Dhruva Koley

    Ruben Vargas

    December 12, 2016

  • Dhruva Koley & Ruben Vargas ECEN 2020 12/12/16

    1

    Introduction

    The purpose of this final project was to collate our knowledge and experience of object-

    oriented C programming involving the MSP432 micro-controller and peripheral modules such as

    the Boosterpack MKII. The objective of the project was to code and construct a games console

    from the MSP432 and the Boosterpack MKII and be able to use the multiple inputs and outputs

    provided by the Boosterpack to play a simple dungeon-crawler like game. Furthermore, a form

    of logging was utilized in order to provide real-time feedback from both software and hardware.

    It is important to understand that the MSP432 Launchpad development board has the

    ability to connect to external circuit boards via GPIO (General Input/Output) pins, including that

    of the Boosterpack MKII. The combination of these two boards expands the capabilities of the

    MSP432 Launchpad. This allows us to use a built-in LCD screen, RGB LEDs, large push

    buttons, and a buzzer to provide the needed multi-media I/O needed for a games console.

    Figure 1. Displays both pieces of hardware utilized for the final project.

    Modules

    The project was split up into modules, involving both hardware and software

    programming in order to compartmentalize and optimize the work needed to create and modify

    said modules. The modules were as follows:

  • Dhruva Koley & Ruben Vargas ECEN 2020 12/12/16

    2

    Figure 2. Shows the Software/Hardware Flow Diagram.

    To further speed up coding, the TI driverlib and grlib library were used. This library allowed us

    compress multiple lines of code into a single function and allowed us to utilize the LCD screen

    using GPIO instead of using a custom SPI interface. In all modules, a canary function was used

    to show if any module failed. This is displayed below:

    volatile uint8_t canary = true;

    int canary_test(void){

    if(canary != true){

    return -1;

    }

    return 0;

    }

    UART Logging

    The first iteration of the logging module involved the use of a microSD shield connected

    to the MSP432 LaunchPad via SPI (Serial Peripheral Interface Bus), a synchronous data bus.

    There are three wires required for a Master device to communicate with a Slave device. A clock

    from the Master device (SCK); A Master-Out Slave-In (MOSI) data wire to transmit data from a

    Master to a Slave; and a Master-In Slave-Out (MISO) data wire to transmit data from a Slave to

    the Master. This required a SPI interface with the Master device being the MSP432 and the Slave

    device being the SparkFun microSD shield.

  • Dhruva Koley & Ruben Vargas ECEN 2020 12/12/16

    3

    Figure 3. Exhibits the SparkFun microSD Shield

    However, the microSD shield required another layer of software interfacing, namely a custom

    FAT32 SD card read/write C library to write to a log file stored on a microSD card.

    Unfortunately, we were unable to make this work and were forced to use UART via the

    microUSB port on the MSP432 to a host computer with a terminal window. By using a custom

    printf function in order to streamline transmitting strings of characters, we were able to display

    which inputs and outputs were activated. They were also used as flavor text in the game to

    provide more of an atmosphere as well as hints as to what to do next.

    Figure 3 Visualization of transmitting incrementing bits via SPI

  • Dhruva Koley & Ruben Vargas ECEN 2020 12/12/16

    4

    By further modifying the printf function, we were able to blink a red status LED every

    time a printf function was called. That way, if the MSP432 was disconnected from a host

    computer, we would be able to see some form of logging. In order to test UART capabilities the

    following function was used:

    int UART_TEST(void) {

    canary_test();

    /* Initialize values to display */

    char *s = "printf test";

    char c = '!';

    int i = -12345;

    unsigned u = 4321;

    long int l = -123456780;

    long unsigned n = 1098765432;

    unsigned x = 0xABCD;

    printf(EUSCI_A0_BASE, "...UART_TEST_START...\r\n");

    printf(EUSCI_A0_BASE, "String %s\r\n", s);

    printf(EUSCI_A0_BASE, "Char %c\r\n", c);

    printf(EUSCI_A0_BASE, "Integer %i\r\n", i);

    printf(EUSCI_A0_BASE, "Unsigned %u\r\n", u);

    printf(EUSCI_A0_BASE, "Long %l\r\n", l);

    printf(EUSCI_A0_BASE, "uNsigned loNg %n\r\n", n);

    printf(EUSCI_A0_BASE, "heX %x\r\n", x);

    printf(EUSCI_A0_BASE, "...UART_TEST_END...\r\n");

    return 0;

    }

    Figure 4 UART log of the bootloader

  • Dhruva Koley & Ruben Vargas ECEN 2020 12/12/16

    5

    Buzzer

    The Boosterpack MKII has a built-in buzzer that operates on Pulse Width Modulation

    (PWM) to create sounds at different frequencies. By modifying the duty cycle, you can change

    the frequency of the sound. In order to create a tune, the us use of an if loop nested in a while

    loop with an incrementing integer, that when it reaches a set integer, will break out of the while

    loop. Inside the while loop are for loops (two per note) that have different duty cycles that toggle

    the pin for the buzzer. The following code shows an example of a tune created in which

    whenever the player shot a blaster, the sound effect would play:

    int play_shoot() {

    canary_test1();

    printf(EUSCI_A0_BASE, "SHOOT_TUNE_START\r\n");

    volatile uint16_t a2 = 0;

    volatile uint16_t b2 = 0;

    volatile uint16_t c2 = 0;

    while (1) {

    c2++;

    if (c2 == 35) {

    break;

    }

    for (a2 = 0; a2 < 1600; a2++);

    GPIO_toggleOutputOnPin(GPIO_PORT_P2, GPIO_PIN7);

    for (b2 = 0; b2 < 1400; b2++);

    GPIO_toggleOutputOnPin(GPIO_PORT_P2, GPIO_PIN7);

    }

    printf(EUSCI_A0_BASE, "SHOOT_TUNE_END\r\n");

    return 0;

    }

    For one chord, three volatile unsigned 16-bit integers set to equal 0 were used. One for the

    duration of the note and two for the two notes. The usage of two notes instead of one was due to

    the increased perception of a melodious sound compared to one note. Three notes for a

    traditional chord were eschewed due to a focus to reduce the load on processing time and code

    size.

    LCD Screen

    Bitmap images were used to add more dimension to the game, allowing for complex

    shapes to be displayed on the LCD screen, other than simple circles and rectangles. This was

    done by uploading an image to a Texas Instruments Image Reformer and using the 2 color option

    to convert it into a C array of hex values (bitmaps) in the proper structure to be passed into a

    grlib library function.

  • Dhruva Koley & Ruben Vargas ECEN 2020 12/12/16

    6

    Figure 5 Bitmap images converted to two colors and compressed to ≤ 128 pixels by 128 pixels.

    The following is a segment of code utilized for outputting the detail rich images onto the LCD

    screen:

    const tImage Poly1BPP_COMP_RLE4=

    {

    IMAGE_FMT_1BPP_COMP_RLE4,

    84,

    84,

    2,

    palette_Poly1BPP_COMP_RLE4,

    pixel_Poly1BPP_COMP_RLE4,

    };

    LEDs

    The LED module was the simplest to code, utilizing only the driverlib library to optimize

    coding by utilizing the GPIO functions to enable and toggle pin outputs. For loops nested in a

    while loop (much like the structures used in the buzzer module) were used to blink the LEDs.

    The following is the code used to configure the LED outputs.

    int LED_START(void){

    canary_test2();

    GPIO_setAsOutputPin(GPIO_PORT_P2, GPIO_PIN6);

    GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN6);

    GPIO_setAsOutputPin(GPIO_PORT_P2, GPIO_PIN4);

    GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN4);

    GPIO_setAsOutputPin(GPIO_PORT_P5, GPIO_PIN6);

    GPIO_setOutputLowOnPin(GPIO_PORT_P5, GPIO_PIN6);

    GPIO_setAsOutputPin(GPIO_PORT_P2, GPIO_PIN0);

    GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN0);

    GPIO_setAsOutputPin(GPIO_PORT_P2, GPIO_PIN1);

    GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN1);

    GPIO_setAsOutputPin(GPIO_PORT_P2, GPIO_PIN2);

    GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN2);

  • Dhruva Koley & Ruben Vargas ECEN 2020 12/12/16

    7

    printf(EUSCI_A0_BASE, "LED_MODULE_ENABLED\r\n");

    printf(EUSCI_A0_BASE, "LED_MODULE_OK\r\n...\r\n");

    LED_TEST();

    return 0;

    }

    Buttons/Game Design

    For every game, there must be some aspect of control that are both simplistic and easy enough for the user to understand. We made use of the buttons used within the Educational

    Boosterpack MKII. Originally, we wanted to design a game where the player had direct control

    of a square. The player would utilize the joystick to move the square freely across the screen.

    Essentially, the object of this game would have been to collect objects on screen, such as coins or

    diamonds. We actually configured the joystick to perform this specific action. This code can be

    seen below:

    #ifdef Joy_Stick

    //Code to Configure the JoyStick

    signed int X_Value;

    signed int Y_Value;

    void configure_ADC() {

    P6DIR &= ~BIT0; //X-Axis configured as input

    P4DIR &= ~BIT4;//Y-Axis configured as input

    P4SEL0 |= BIT4;// Set Pin 4.4 into Tertiary Mode

    P4SEL1 |= BIT4;// Set Pin 4.4 into Tertiary Mode

    P6SEL0 |= BIT0;// Set Pin 6.0 into Tertiary Mode

    P6SEL1 |= BIT0;// Set Pin 6.0 into Tertiary Mode // Initialize the shared

    reference module

    REFCTL0 |= REFVSEL_0 | REFON;// Enable internal 1.2V reference

    ADC14->CTL0 |= ADC14_CTL0_MSC | ADC14_CTL0_CONSEQ_1 | ADC14_CTL0_SHT0_5 |

    ADC14_CTL0_ON | ADC14_CTL0_SHP;

    ADC14->CTL1 |= ADC14_CTL1_RES_0;// Sets Joystick Resolution

    ADC14->MCTL[0] = ADC14_MCTLN_INCH_9;//Y-Axis Mapped Channel

    ADC14->MCTL[1] = ADC14_MCTLN_INCH_15 | ADC14_MCTLN_EOS;//X-Axis Mapped

    Channel

    ADC14->IER0 = ADC14_IER0_IE0 | ADC14_IER0_IE1;//Enable MCTL0/MEM0

    Interrupts

    while(!(REFCTL0 & REFGENRDY));// Wait for reference generator to settle

    ADC14->CTL0 |= ADC14_CTL0_ENC;// Enable Conversions

    NVIC_EnableIRQ(ADC14_IRQn);

    } uint8_t sdata[];

    void ADC14_IRQHandler() {

    if (ADC14->IFGR0 & ADC14_IFGR0_IFG0) {

    Y_Value = ADC14->MEM[0];

    }

    if(ADC14->IFGR0 & ADC14_IFGR0_IFG1) {

    X_Value = ADC14->MEM[1];

    } if(X_Value >= 8200 && Y_Value >= 8200 ) { //UR

    uart_putchar(0x55);

  • Dhruva Koley & Ruben Vargas ECEN 2020 12/12/16

    8

    uart_putchar(0x52);

    }

    if(X_Value < 8200 && Y_Value >= 8200 ) { //UL

    uart_putchar(0x55);

    uart_putchar(0x4C);

    }

    if(X_Value > 8200 && Y_Value < 8200 ) { //DR

    uart_putchar(0x44);

    uart_putchar(0x52);

    }

    if(X_Value < 8100 && Y_Value < 8100 ) { //DL

    uart_putchar(0x44);

    uart_putchar(0x4C);

    }

    }

    The manner in which this would work is that the player would start at the center of the LCD

    display. If the player wanted to move upwards, the values of x and y would be recorded and a

    frame would be outputted onto the LCD screen of the square moving slightly upwards. We

    essentially created table with four quadrants. The center was defined as the coordinate (8192,

    8192). There would be a range in which if the values fell between a given interval, the player

    would move up. There were four possible directions in which the player could move: up, down,

    right, and left. All other directions were excluded for the purposes of accuracy.

    Figure 6. Exhibits the X and Y coordinate system of the Joystick. It shows the planned possible

    directions for the direct control of the movement of a pixelated square (our main character).

  • Dhruva Koley & Ruben Vargas ECEN 2020 12/12/16

    9

    The problem with this was that the refresh rate was too slow and the movement of the square was

    not fluid. Therefore, if we wanted to move the square upwards, there would be a series of frames

    that performed this given action. Based on the values detected on the joystick, the square would

    move up and one frame would be outputted for a given x and y coordinate. Not only did this

    require multiple frames, but the rate in which the transition upward would occur was too clunky

    and too slow. Transitions were not fluid and were often disjointed. The other problem with using

    the joystick was the fact that it was difficult for it to be precise. Since we depended on its ability

    to read and record its location using x and y values, these values would often fluctuate and not be

    stable enough. This would cause the unintentional transition to other frames. Therefore, we

    ended up scrapping that idea in favor of something more simplistic. We ended up developing a

    sort of dungeon crawler where you would transition from screen to screen, gather new abilities,

    solve puzzle elements, and give the player the opportunity to choose their own adventure and

    outcome. Therefore, the use of the joystick in this new game was scrapped.

    With that being said, we configured the buttons on the Boosterpack MKII and defined

    each of them to perform a certain action. The code for the button configurations can be found at

    the end of the lab report. Basically, what we ended up doing was having each button handle

    different operations through the use of button handlers. In order to transition from screen to

    screen, we also made use of counters. Therefore, every time a button would be pressed, the

    button counter incremented. This made it possible to transition to different screen in the game.

    We broke down the function of each button. The START button would be responsible

    from transitioning from screen to screen. Button A allowed you to shoot. Button B allowed you

    to perform a special attack. Button C also allowed you to perform a special attack different from

    that of B. The SELECT button was another transitional button that we used to go from screen to

    screen. The only difference is that this button would allow you to access an alternate path for the

    game. We also implanted the RESET button to start the game all over. We also programmed our

    game such that it would only allow the player to perform a certain action based upon the current

    screen. In this manner, we incorporated certain puzzle elements in which you would have to

    press certain buttons to continue on to the next screen.

    Figure 7. Exhibits the button layout of our game console. Note that Button C is the button

    directly attached to the joystick. Thus, by pressing the joystick, you press Button C. Also, the

  • Dhruva Koley & Ruben Vargas ECEN 2020 12/12/16

    10

    START and SELECT buttons are located behind the Boosterpack MKII and are attached directly

    to the MSP432 microcontroller.

    In addition to the multiple screens created for the game, we wanted to make our game as

    interactive as possible using the features of the Boosterpack MKII. We did this by incorporating

    sounds using the buzzer, adding LED effects for certain screens or whenever an action button

    was pressed (A, B, or C), and by incorporating more detailed images into the LCD screens.

    Because we used the graphics library for the LCD display pretty heavily, it is important to

    mention that it made the creation of rectangles and circles pretty easy. We were also able to

    manipulate the color of both the background and the foreground pretty easily. Because of

    technical limitations and our ability to easily create rectangles, we made our main character a

    square. Any shape that was not a perfect square in the game would be known as an “Imperfect

    Polygon”. These were made to be the enemies in game. With that being said, we created custom

    images that gave more life to our game. These were centered around simple shapes such as

    squares and rectangles.

    Figure 8. Shows the cast of characters used in the game. These images were translated into

    bitmaps and then converted to C bit arrays.

    We found that if we utilized monochrome images, they would load up faster on the LCD

    display. Hence, we only used images that consisted of one color. Also, images with less detail

    had faster load times onto the screen.

    External Power Supply

    In addition to using the MSP432 microcontroller and the Educational Boosterpack MKII,

    we also utilized an external Lithium ion battery pack to add a portability factor to our gaming

    console. We also used a LiPo charger to charge the battery via a USB cable. We attached the

    wires of the battery pack to the ground and 5 V pins on the MSP432 microcontroller. In this way,

    we were able to take the game console anywhere without it having to be attached to a computer.

  • Dhruva Koley & Ruben Vargas ECEN 2020 12/12/16

    11

    Figure 9. Shows the lithium ion battery pack attached to the pack of the MSP432 with the

    Educational Boosterpack MKII.

    Results

    The game we chose to develop consisted of sound effects, LED effects, interrupts using

    the buttons on the Boosterpack MKII, and about 50 different screens outputted on the LCD

    display. The screens we developed varied in graphical complexity. The ones with more graphical

    complexity took longer to load up. Therefore, only a small portion of our screens consisted of

    more complex graphics. This was done to speed up the gameplay and to develop the screens at

    an accelerated rate. The screens, along with some of its other interactions with the board are

    shown in the figures below.

    Figure 10. Shows the title screen of our game.

  • Dhruva Koley & Ruben Vargas ECEN 2020 12/12/16

    12

    Figure 11. Shows game screens with less graphical complexity.

    Figure 12. Shows game screens with more graphical complexity.

    Figure 13. Shows game screens with the most graphical complexity.

  • Dhruva Koley & Ruben Vargas ECEN 2020 12/12/16

    13

    Figure 14. Displays the LEDs activated on the MSP432 board. The red LED was activated every

    time the START button was pressed. The green LED was activated every time the SELECT button

    was pressed. These LEDs would also indicate that the logging for a specific action was

    completed and printed out on the terminal via UART.

    Figure 15. Exhibits the reaction every time button A was pressed. A blue LED would light up to

    indicate that the player has selected the “Shoot” ability. Additionally, a unique “shooting”

    sound effect would be outputted via the buzzer when button A was pressed.

    Figure 16. Exhibits the reaction every time button B was pressed. A red LED would light up to

    indicate that the player has selected the “Special” ability. Additionally, a unique “Special”

    sound effect would be outputted via the buzzer when button B was pressed.

  • Dhruva Koley & Ruben Vargas ECEN 2020 12/12/16

    14

    Figure 17. Exhibits the reaction every time button C was pressed. A purple LED would light up

    to indicate that the player has selected the second “Special” ability. Additionally, a unique

    “Special” sound effect would be outputted via the buzzer when button C was pressed.

    Figure 18. Exhibits the final boss of the game. In addition to outputting a tune via the buzzer

    whenever the boss appeared, a green LED would blink to signify the presence of the boss. The

    LED effect adds to the interactivity of the game.

    Figure 19. Shows the slide in which the player has the option to select the route they want to

    take.

  • Dhruva Koley & Ruben Vargas ECEN 2020 12/12/16

    15

    Figure 20. Exhibits the two possible outcomes of the games. The screen of the left is the result of

    going through the START route. The screen to the right is the result of choosing the SELECT

    route.

    Figure 21. Shows the final screen of the game.

    Conclusion

    Overall, our objective to create a game console was met with success. Though we did not

    make use of the joystick to move a pixel around as we originally intended, we managed to make

    a game that used the features of the Boosterpack MKII. Additionally, the concepts of embedded

    design were applied to this project. We had to think about the purpose of our system, the

    hardware required, and the software component required to make it work. Essentially, we

    synthesized all of the things that we learned in class and from previous labs such as the concept

    of interrupts, timers, and serial communication, to build a functional system. Along the way, we

    also learned more about special libraries that included functions to output graphics onto the LCD

    display. We learned more about sound production using PWM and how to generate more

    detailed images using C bit arrays. In terms of the difficulty of the project, we found that the

    most difficult thing to do was getting the individual features of the Boosterpack MKII to act in

    our desired manner. Therefore, configuring the LEDs, the buttons, and the buzzer, were the most

    difficult things to accomplish. Not only configuring them, but handling them was difficult at the

  • Dhruva Koley & Ruben Vargas ECEN 2020 12/12/16

    16

    beginning. We had to modify the code various times to get them to work properly. This portion

    of the project was perhaps the most time consuming. Once we figured that out and configured

    each piece of our hardware to behave in our desired manner, we went on to the actual design of

    the game. After developing our own graphics library, our buzzer library, and our buttons library,

    the actual game design stage of our project accounted for about 40% of our total time. Again, we

    wanted to make the game as interactive as possible using the features of the Boosterpack MKII.

    Thus, we used the LEDs, the buzzer, and provided detailed images from time to time, to add to

    the overall game experience. In conclusion, the development and the execution of our final

    project contributed to our overall understanding of what it takes to build and embedded system.

    Appendix

    The following code was used to set up UART communication. This code was essential for

    logging:

    #ifndef UART_UART_LOG_H_

    #define UART_UART_LOG_H_ /* Standard Includes */

    #include

    #include

    #include

    #include "../uart/printf.h" volatile uint8_t canary = true; int canary_test(void){

    if(canary != true){

    return -1;

    }

    return 0;

    } int configure_clocks(void) {

    canary_test();

    CS_setDCOCenteredFrequency(CS_DCO_FREQUENCY_3);

    return 0;

    /*CS->KEY = 0x695A;

    CS->CTL0 = 0;

    CS->CTL0 = 0x1000; //BITS 16-18 0b001 @ 3MHz // Select ACLK = REFO, SMCLK = MCLK = DCO

    CS->CTL1 = CS_CTL1_SELA_2 | CS_CTL1_SELS_3 | CS_CTL1_SELM_3;

    CS->KEY = 0;*/

    } int configure_serial_port() {

    canary_test();

    // Port Op Mode Config

    GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P1, GPIO_PIN1 |

    GPIO_PIN2 | GPIO_PIN3, GPIO_PRIMARY_MODULE_FUNCTION); //Frame Config

    UCA0CTLW0 |= UCSWRST;

    UCA0CTLW0 |= BIT7; //SMCLK, 8N1, LSB

  • Dhruva Koley & Ruben Vargas ECEN 2020 12/12/16

    17

    UCA0BR0 = 0x1A; //115200 baud 0-8 bits

    UCA0BR1 = 0x00; //115200 baud N = 3MHz/115200 = ~26

    UCA0MCTLW = 0xF0;// Set first stage modulator bits (necessary as N>16)

    BITS 7-4

    UCA0CTLW0 &= ~UCSWRST; //Initialize eUSCI

    UCA0IE |= UCRXIE; //Enable Rx NVIC->ISER[0] = 1

  • Dhruva Koley & Ruben Vargas ECEN 2020 12/12/16

    18

    /*

    * printf library for the MSP432

    *

    * Largely taken from and inspired from:

    * http://www.msp430launchpad.com/2012/06/using-printf.html

    * http://www.43oh.com/forum/viewtopic.php?f=10&t=1732

    *

    * See http://www.samlewis.me for an example implementation.

    */ #include "stdarg.h"

    #include

    #include "driverlib.h"

    #include "led.h" void sendByte(uint32_t moduleInstance, char c)

    {

    UART_transmitData(moduleInstance, c);

    } static const unsigned long dv[] = {

    1000000000,// +0

    100000000, // +1

    10000000, // +2

    1000000, // +3

    100000, // +4

    10000, // +5

    1000, // +6

    100, // +7

    10, // +8

    1, // +9

    }; void puts(uint32_t moduleInstance, char *s) {

    char c; while (c = *s++) {

    sendByte(moduleInstance, c);

    }

    } void putc(uint32_t moduleInstance, unsigned b) {

    sendByte(moduleInstance, b);

    } static void xtoa(uint32_t moduleInstance, unsigned long x, const unsigned long

    *dp) {

    char c;

    unsigned long d;

    if (x) {

    while (x < *dp)

    ++dp;

    do {

    d = *dp++;

    c = '0';

    while (x >= d)

    ++c, x -= d;

  • Dhruva Koley & Ruben Vargas ECEN 2020 12/12/16

    19

    putc(moduleInstance, c);

    } while (!(d & 1));

    } else

    putc(moduleInstance, '0');

    } static void puth(uint32_t moduleInstance, unsigned n) {

    static const char hex[16] = { '0', '1', '2', '3', '4', '5', '6', '7', '8',

    '9', 'A', 'B', 'C', 'D', 'E', 'F' };

    putc(moduleInstance, hex[n & 15]);

    } void printf(uint32_t moduleInstance, char *format, ...)

    {

    char c;

    int i;

    long n; va_list a;

    va_start(a, format);

    while(c = *format++) {

    if(c == '%') {

    switch(c = *format++) {

    case 's': // String

    puts(moduleInstance, va_arg(a, char*));

    break;

    case 'c':// Char

    putc(moduleInstance, va_arg(a, char));

    break;

    case 'i':// 16 bit Integer

    case 'u':// 16 bit Unsigned

    i = va_arg(a, int);

    if(c == 'i' && i < 0) i = -i, putc(moduleInstance, '-');

    xtoa(moduleInstance, (unsigned)i, dv + 5);

    break;

    case 'l':// 32 bit Long

    case 'n':// 32 bit uNsigned loNg

    n = va_arg(a, long);

    if(c == 'l' && n < 0) n = -n, putc(moduleInstance, '-');

    xtoa(moduleInstance, (unsigned long)n, dv);

    break;

    case 'x':// 16 bit heXadecimal

    i = va_arg(a, int);

    puth(moduleInstance, i >> 12);

    puth(moduleInstance, i >> 8);

    puth(moduleInstance, i >> 4);

    puth(moduleInstance, i);

    break;

    case 0: return;

    default: goto bad_fmt;

    }

    } else

    bad_fmt: putc(moduleInstance, c);

    }

    va_end(a);

    debug_led();

    }

  • Dhruva Koley & Ruben Vargas ECEN 2020 12/12/16

    20

    This is how the printf function was defined within its own header file:

    #ifndef PRINTF_H_

    #define PRINTF_H_

    void printf(uint32_t moduleInstance, char *, ...);

    #endif /* PRINTF_H_ */

    The following code configures the LEDs on the MSP432:

    #ifndef LED_LED_H_

    #define LED_LED_H_ #include "driverlib.h"

    #include "msp.h" void debug_led(void) {

    volatile uint32_t xx = 0;

    volatile uint32_t x = 0;

    /* Configuring P1.0 as output */

    GPIO_setAsOutputPin(GPIO_PORT_P1, GPIO_PIN0);

    while (1) {

    x++;

    if(x == 5){

    break;

    }

    /* Delay Loop */

    for (xx = 0; xx < 500; xx++) {

    }

    GPIO_toggleOutputOnPin(GPIO_PORT_P1, GPIO_PIN0);

    }

    } #endif /* LED_LED_H_ */

    The following code configures the RGB LED on the Boosterpack MKII:

    #ifndef LED_LED_MAIN_H_

    #define LED_LED_MAIN_H_ #include "driverlib.h"

    #include "msp.h"

    #include "uart_log.h" volatile uint8_t canary2 = true; int canary_test2(void){

    if(canary2 != true){

    printf(EUSCI_A0_BASE, "LED_ERROR\r\n");

    return -1;

    }

    return 0;

    } int LED_TEST(void) {

  • Dhruva Koley & Ruben Vargas ECEN 2020 12/12/16

    21

    canary_test2();

    volatile uint32_t xx = 0;

    volatile uint32_t x = 0;

    volatile uint32_t yy = 0;

    volatile uint32_t y = 0;

    volatile uint32_t zz = 0;

    volatile uint32_t z = 0;

    /* Configuring Main Board as output */

    while (1) {

    x++;

    if(x == 5){

    break;

    }

    /* Delay Loop */

    for (xx = 0; xx < 500; xx++) {

    }

    GPIO_toggleOutputOnPin(GPIO_PORT_P2, GPIO_PIN0);

    }

    while (1) {

    y++;

    if(y == 5){

    break;

    }

    /* Delay Loop */

    for (yy = 0; yy < 500; yy++) {

    }

    GPIO_toggleOutputOnPin(GPIO_PORT_P2, GPIO_PIN1);

    }

    while (1) {

    z++;

    if(z == 5){

    break;

    }

    /* Delay Loop */

    for (zz = 0; zz < 500; zz++) {

    }

    GPIO_toggleOutputOnPin(GPIO_PORT_P2, GPIO_PIN2);

    }

    volatile uint32_t xx1 = 0;

    volatile uint32_t x1 = 0;

    volatile uint32_t yy1 = 0;

    volatile uint32_t y1 = 0;

    volatile uint32_t zz1 = 0;

    volatile uint32_t z1 = 0;

    /* Configuring EduBMkII Board as output */

    while (1) {

    x1++;

    if(x1 == 5){

    break;

    }

    /* Delay Loop */

    for (xx1 = 0; xx1 < 500; xx1++) {

    }

    GPIO_toggleOutputOnPin(GPIO_PORT_P2, GPIO_PIN6);

    }

    while (1) {

    y1++;

  • Dhruva Koley & Ruben Vargas ECEN 2020 12/12/16

    22

    if(y1 == 5){

    break;

    }

    /* Delay Loop */

    for (yy1 = 0; yy1 < 500; yy1++) {

    }

    GPIO_toggleOutputOnPin(GPIO_PORT_P2, GPIO_PIN4);

    }

    while (1) {

    z1++;

    if(z1 == 5){

    break;

    }

    /* Delay Loop */

    for (zz1 = 0; zz1 < 500; zz1++) {

    }

    GPIO_toggleOutputOnPin(GPIO_PORT_P5, GPIO_PIN6);

    }

    return 0;

    } int LED_START(void){

    canary_test2();

    GPIO_setAsOutputPin(GPIO_PORT_P2, GPIO_PIN6);

    GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN6);

    GPIO_setAsOutputPin(GPIO_PORT_P2, GPIO_PIN4);

    GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN4);

    GPIO_setAsOutputPin(GPIO_PORT_P5, GPIO_PIN6);

    GPIO_setOutputLowOnPin(GPIO_PORT_P5, GPIO_PIN6); GPIO_setAsOutputPin(GPIO_PORT_P2, GPIO_PIN0);

    GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN0);

    GPIO_setAsOutputPin(GPIO_PORT_P2, GPIO_PIN1);

    GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN1);

    GPIO_setAsOutputPin(GPIO_PORT_P2, GPIO_PIN2);

    GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN2); printf(EUSCI_A0_BASE, "LED_MODULE_ENABLED\r\n");

    printf(EUSCI_A0_BASE, "LED_MODULE_OK\r\n...\r\n");

    LED_TEST();

    return 0;

    } #endif /* LED_LED_MAIN_H_ */

    The following code is responsible for producing the images in our game. It specifies the

    dimensions of the rectangles used as well as the more detailed images of our game using bit

    arrays:

    // The following code includes all of the graphics for our game

    #ifndef IMAGES_H_

    #define IMAGES_H_ #include

  • Dhruva Koley & Ruben Vargas ECEN 2020 12/12/16

    23

    #include

    #include

    #include "uart_log.h"

    #include Graphics_Context g_sContext;

    Graphics_Display g_sDisplay;

    Graphics_Rectangle g_sRectangle;

    Graphics_Image g_sImage; const Graphics_Rectangle R1 = //Main screen rectangle (Poly the Blue Square)

    {

    44, //!< The minimum X coordinate of the rectangle.

    44, //!< The minimum Y coordinate of the rectangle.

    84, //!< The maximum X coordinate of the rectangle.

    84 //!< The maximum Y coordinate of the rectangle.

    }; const Graphics_Rectangle R2 = //Imperfect Polygon #1

    {

    20, //!< The minimum X coordinate of the rectangle.

    100, //!< The minimum Y coordinate of the rectangle.

    40, //!< The maximum X coordinate of the rectangle.

    120 //!< The maximum Y coordinate of the rectangle.

    }; const Graphics_Rectangle R3 = //Pixi Power_Up

    {

    54, //!< The minimum X coordinate of the rectangle.

    54, //!< The minimum Y coordinate of the rectangle.

    74, //!< The maximum X coordinate of the rectangle.

    74 //!< The maximum Y coordinate of the rectangle.

    }; const Graphics_Rectangle R4 =

    {

    30, //!< The minimum X coordinate of the rectangle.

    50, //!< The minimum Y coordinate of the rectangle.

    98, //!< The maximum X coordinate of the rectangle.

    70 //!< The maximum Y coordinate of the rectangle.

    }; const Graphics_Rectangle R5 =

    {

    24, //!< The minimum X coordinate of the rectangle.

    44, //!< The minimum Y coordinate of the rectangle.

    64, //!< The maximum X coordinate of the rectangle.

    84 //!< The maximum Y coordinate of the rectangle.

    }; const Graphics_Rectangle R6 =

    {

    54, //!< The minimum X coordinate of the rectangle.

    54, //!< The minimum Y coordinate of the rectangle.

    74, //!< The maximum X coordinate of the rectangle.

    74 //!< The maximum Y coordinate of the rectangle.

    };

  • Dhruva Koley & Ruben Vargas ECEN 2020 12/12/16

    24

    const Graphics_Rectangle R7 =

    {

    54, //!< The minimum X coordinate of the rectangle.

    54, //!< The minimum Y coordinate of the rectangle.

    74, //!< The maximum X coordinate of the rectangle.

    84 //!< The maximum Y coordinate of the rectangle.

    }; const Graphics_Rectangle R8 =

    {

    44, //!< The minimum X coordinate of the rectangle.

    54, //!< The minimum Y coordinate of the rectangle.

    84, //!< The maximum X coordinate of the rectangle.

    84 //!< The maximum Y coordinate of the rectangle.

    }; const Graphics_Rectangle Stream =

    {

    0, //!< The minimum X coordinate of the rectangle.

    22, //!< The minimum Y coordinate of the rectangle.

    128, //!< The maximum X coordinate of the rectangle.

    44 //!< The maximum Y coordinate of the rectangle.

    }; const Graphics_Rectangle Bridge1 =

    {

    0, //!< The minimum X coordinate of the rectangle.

    22, //!< The minimum Y coordinate of the rectangle.

    44, //!< The maximum X coordinate of the rectangle.

    80 //!< The maximum Y coordinate of the rectangle.

    }; const Graphics_Rectangle Bridge2 =

    {

    84, //!< The minimum X coordinate of the rectangle.

    22, //!< The minimum Y coordinate of the rectangle.

    128, //!< The maximum X coordinate of the rectangle.

    80 //!< The maximum Y coordinate of the rectangle.

    }; const Graphics_Rectangle ARMY1 =

    {

    10, //!< The minimum X coordinate of the rectangle.

    30, //!< The minimum Y coordinate of the rectangle.

    30, //!< The maximum X coordinate of the rectangle.

    90 //!< The maximum Y coordinate of the rectangle.

    }; const Graphics_Rectangle ARMY2 =

    {

    40, //!< The minimum X coordinate of the rectangle.

    30, //!< The minimum Y coordinate of the rectangle.

    60, //!< The maximum X coordinate of the rectangle.

    90 //!< The maximum Y coordinate of the rectangle.

    };

  • Dhruva Koley & Ruben Vargas ECEN 2020 12/12/16

    25

    const Graphics_Rectangle ARMY3 =

    {

    70, //!< The minimum X coordinate of the rectangle.

    30, //!< The minimum Y coordinate of the rectangle.

    90, //!< The maximum X coordinate of the rectangle.

    90 //!< The maximum Y coordinate of the rectangle.

    }; const Graphics_Rectangle ARMY4 =

    {

    100, //!< The minimum X coordinate of the rectangle.

    30, //!< The minimum Y coordinate of the rectangle.

    120, //!< The maximum X coordinate of the rectangle.

    90 //!< The maximum Y coordinate of the rectangle.

    }; const Graphics_Rectangle Wall =

    {

    0, //!< The minimum X coordinate of the rectangle.

    5, //!< The minimum Y coordinate of the rectangle.

    128, //!< The maximum X coordinate of the rectangle.

    32 //!< The maximum Y coordinate of the rectangle.

    }; const Graphics_Rectangle R9 =

    {

    54, //!< The minimum X coordinate of the rectangle.

    64, //!< The minimum Y coordinate of the rectangle.

    74, //!< The maximum X coordinate of the rectangle.

    84 //!< The maximum Y coordinate of the rectangle.

    }; const Graphics_Rectangle R10 =

    {

    59, //!< The minimum X coordinate of the rectangle.

    109, //!< The minimum Y coordinate of the rectangle.

    69, //!< The maximum X coordinate of the rectangle.

    119 //!< The maximum Y coordinate of the rectangle.

    }; const Graphics_Rectangle R11 =

    {

    59, //!< The minimum X coordinate of the rectangle.

    70, //!< The minimum Y coordinate of the rectangle.

    69, //!< The maximum X coordinate of the rectangle.

    80 //!< The maximum Y coordinate of the rectangle.

    }; const Graphics_Rectangle R12 =

    {

    59, //!< The minimum X coordinate of the rectangle.

    30, //!< The minimum Y coordinate of the rectangle.

    69, //!< The maximum X coordinate of the rectangle.

    40 //!< The maximum Y coordinate of the rectangle.

    };

  • Dhruva Koley & Ruben Vargas ECEN 2020 12/12/16

    26

    const Graphics_Rectangle R13 =

    {

    44, //!< The minimum X coordinate of the rectangle.

    74, //!< The minimum Y coordinate of the rectangle.

    84, //!< The maximum X coordinate of the rectangle.

    114 //!< The maximum Y coordinate of the rectangle.

    }; const Graphics_Rectangle R14 =

    {

    24, //!< The minimum X coordinate of the rectangle.

    64, //!< The minimum Y coordinate of the rectangle.

    44, //!< The maximum X coordinate of the rectangle.

    84 //!< The maximum Y coordinate of the rectangle.

    }; const Graphics_Rectangle R15 =

    {

    60, //!< The minimum X coordinate of the rectangle.

    80, //!< The minimum Y coordinate of the rectangle.

    68, //!< The maximum X coordinate of the rectangle.

    88 //!< The maximum Y coordinate of the rectangle.

    }; const Graphics_Rectangle R16 =

    {

    60, //!< The minimum X coordinate of the rectangle.

    40, //!< The minimum Y coordinate of the rectangle.

    68, //!< The maximum X coordinate of the rectangle.

    48 //!< The maximum Y coordinate of the rectangle.

    }; const Graphics_Rectangle R17 =

    {

    60, //!< The minimum X coordinate of the rectangle.

    15, //!< The minimum Y coordinate of the rectangle.

    68, //!< The maximum X coordinate of the rectangle.

    23 //!< The maximum Y coordinate of the rectangle.

    }; const Graphics_Rectangle Guard_1 =

    {

    15, //!< The minimum X coordinate of the rectangle.

    40, //!< The minimum Y coordinate of the rectangle.

    45, //!< The maximum X coordinate of the rectangle.

    60 //!< The maximum Y coordinate of the rectangle.

    }; const Graphics_Rectangle Guard_2 =

    {

    83, //!< The minimum X coordinate of the rectangle.

    40, //!< The minimum Y coordinate of the rectangle.

    113, //!< The maximum X coordinate of the rectangle.

    60 //!< The maximum Y coordinate of the rectangle.

    }; const Graphics_Rectangle Ledge_1 =

  • Dhruva Koley & Ruben Vargas ECEN 2020 12/12/16

    27

    {

    0, //!< The minimum X coordinate of the rectangle.

    85, //!< The minimum Y coordinate of the rectangle.

    128, //!< The maximum X coordinate of the rectangle.

    105 //!< The maximum Y coordinate of the rectangle.

    }; const Graphics_Rectangle Ledge_2 =

    {

    0, //!< The minimum X coordinate of the rectangle.

    45, //!< The minimum Y coordinate of the rectangle.

    128, //!< The maximum X coordinate of the rectangle.

    65 //!< The maximum Y coordinate of the rectangle.

    }; const Graphics_Rectangle Ledge_3 =

    {

    0, //!< The minimum X coordinate of the rectangle.

    5, //!< The minimum Y coordinate of the rectangle.

    128, //!< The maximum X coordinate of the rectangle.

    25 //!< The maximum Y coordinate of the rectangle.

    }; const Graphics_Rectangle Pyramid_1 =

    {

    0, //!< The minimum X coordinate of the rectangle.

    0, //!< The minimum Y coordinate of the rectangle.

    22, //!< The maximum X coordinate of the rectangle.

    88 //!< The maximum Y coordinate of the rectangle.

    }; const Graphics_Rectangle Pyramid_2 =

    {

    22, //!< The minimum X coordinate of the rectangle.

    0, //!< The minimum Y coordinate of the rectangle.

    43, //!< The maximum X coordinate of the rectangle.

    48 //!< The maximum Y coordinate of the rectangle.

    }; const Graphics_Rectangle Pyramid_3 =

    {

    43, //!< The minimum X coordinate of the rectangle.

    0, //!< The minimum Y coordinate of the rectangle.

    64, //!< The maximum X coordinate of the rectangle.

    8 //!< The maximum Y coordinate of the rectangle.

    }; const Graphics_Rectangle Pyramid_4 =

    {

    64, //!< The minimum X coordinate of the rectangle.

    0, //!< The minimum Y coordinate of the rectangle.

    85, //!< The maximum X coordinate of the rectangle.

    8 //!< The maximum Y coordinate of the rectangle.

    }; const Graphics_Rectangle Pyramid_5 =

    {

  • Dhruva Koley & Ruben Vargas ECEN 2020 12/12/16

    28

    85, //!< The minimum X coordinate of the rectangle.

    0, //!< The minimum Y coordinate of the rectangle.

    106, //!< The maximum X coordinate of the rectangle.

    48 //!< The maximum Y coordinate of the rectangle.

    }; const Graphics_Rectangle Pyramid_6 =

    {

    106, //!< The minimum X coordinate of the rectangle.

    0, //!< The minimum Y coordinate of the rectangle.

    128, //!< The maximum X coordinate of the rectangle.

    88 //!< The maximum Y coordinate of the rectangle.

    }; static const unsigned char pixel_Clone1BPP_COMP_RLE4[] =

    {

    0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,

    0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0x51, 0x20, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0x01,

    0x20, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0x01, 0x20, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,

    0x01, 0x20, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0x01, 0x20, 0xf1, 0xf1, 0xf1, 0xf1,

    0xf1, 0x01, 0x20, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0x01, 0x20, 0xf1, 0xf1, 0xf1,

    0xe1, 0x30, 0xa1, 0x90, 0x61, 0x30, 0xf1, 0xf1, 0xf1, 0x30, 0xa1, 0x90, 0x61,

    0x30, 0xf1, 0xf1, 0xf1, 0x30, 0xa1,

    0x90, 0x61, 0x30, 0xf1, 0xf1, 0xf1, 0x60, 0x31, 0xd0, 0x31, 0x60, 0xd1, 0x20,

    0xf1, 0xe1, 0x60, 0x31, 0xd0, 0x31, 0x60, 0xd1, 0x20, 0xf1, 0xe1, 0x60, 0x31,

    0xd0, 0x31, 0x60, 0xd1, 0x20, 0xf1, 0xe1, 0x60, 0x31, 0xd0, 0x31, 0x60, 0xd1,

    0x20, 0xf1, 0xe1, 0xf0, 0xf0, 0x30, 0xd1, 0x20, 0xf1, 0xe1, 0xf0, 0xf0, 0x30,

    0xd1, 0x20, 0xf1, 0xe1, 0xf0, 0xf0, 0x30, 0xd1, 0x20, 0xf1, 0xe1, 0xf0, 0xf0,

    0x30, 0xd1, 0x60, 0xf1, 0xa1, 0xf0, 0xf0, 0x30, 0xd1, 0x60, 0xf1, 0xa1, 0xf0,

    0xf0, 0x30, 0xd1, 0x60, 0xf1, 0x71,

    0x60, 0xa1, 0x50, 0x71, 0x90, 0x61, 0xa0, 0xf1, 0x71, 0x60, 0xa1, 0x50, 0x71,

    0x90, 0x61, 0xa0, 0xf1, 0x71, 0x60, 0xa1, 0x50, 0x71, 0x90, 0x61, 0xa0, 0xf1,

    0x71, 0x60, 0xa1, 0x50, 0x71, 0x90, 0x61, 0xa0, 0xf1, 0x71, 0x20, 0x31, 0xa0,

    0x21, 0xa0, 0x21, 0x60, 0xf1, 0xf1, 0x91, 0x20, 0x31, 0xa0, 0x21, 0xa0, 0x21,

    0x60, 0xf1, 0xf1, 0x91, 0x20, 0x31, 0xa0, 0x21, 0xa0, 0x21, 0x60, 0xf1, 0xf1,

    0x91, 0x90, 0x71, 0x50, 0x71, 0x90, 0xa1, 0x60, 0xf1, 0x71, 0x90, 0x71, 0x50,

    0x71, 0x90, 0xa1, 0x60, 0xf1, 0x71,

    0x90, 0x71, 0x50, 0x71, 0x90, 0xa1, 0x60, 0xf1, 0x71, 0x90, 0x71, 0x50, 0x71,

    0x90, 0xa1, 0x60, 0xf1, 0x71, 0x90, 0x71, 0x50, 0x71, 0x90, 0xa1, 0x60, 0xf1,

    0x71, 0x90, 0x71, 0x50, 0x71, 0x90, 0xa1, 0x60, 0xf1, 0x71, 0x90, 0x71, 0x50,

    0x71, 0x90, 0xa1, 0x60, 0xf1, 0x71, 0x90, 0x31, 0x90, 0x31, 0xd0, 0x61, 0xa0,

    0xf1, 0x71, 0x90, 0x31, 0x90, 0x31, 0xd0, 0x61, 0xa0, 0xf1, 0x71, 0x90, 0x31,

    0x90, 0x31, 0xd0, 0x61, 0xa0, 0xf1, 0x01, 0x20, 0x31, 0xf0, 0xf0, 0x90, 0x31,

    0x90, 0xf1, 0x41, 0x20, 0x31, 0xf0,

    0xf0, 0x90, 0x31, 0x90, 0xf1, 0x41, 0x20, 0x31, 0xf0, 0xf0, 0x90, 0x31, 0x90,

    0xf1, 0x41, 0x20, 0x31, 0xf0, 0xf0, 0x90, 0x31, 0x90, 0xf1, 0x01, 0x60, 0x31,

    0xf0, 0x40, 0x61, 0xd0, 0x31, 0x60, 0xf1, 0x31, 0x60, 0x31, 0xf0, 0x40, 0x61,

    0xd0, 0x31, 0x60, 0xf1, 0x31, 0x60, 0x31, 0xf0, 0x40, 0x61, 0xd0, 0x31, 0x60,

    0xf1, 0x01, 0x90, 0x31, 0x90, 0x71, 0xf0, 0x70, 0xf1, 0xb1, 0x90, 0x31, 0x90,

    0x71, 0xf0, 0x70, 0xf1, 0xb1, 0x90, 0x31, 0x90, 0x71, 0xf0, 0x70, 0xf1, 0xb1,

    0x60, 0x61, 0x60, 0xf1, 0x81, 0x90,

    0xf1, 0xb1, 0x60, 0x61, 0x60, 0xf1, 0x81, 0x90, 0xf1, 0xb1, 0x60, 0x61, 0x60,

    0xf1, 0x81, 0x90, 0xf1, 0xb1, 0x60, 0x61, 0x60, 0xf1, 0x81, 0x90, 0xf1, 0xb1,

    0x90, 0x31, 0x60, 0x21, 0xf0, 0x10, 0x31, 0x90, 0xf1, 0xb1, 0x90, 0x31, 0x60,

    0x21, 0xf0, 0x10, 0x31, 0x90, 0xf1, 0xb1, 0x90, 0x31, 0x60, 0x21, 0xf0, 0x10,

    0x31, 0x90, 0xf1, 0xe1, 0x60, 0x31, 0x90, 0x31, 0xd0, 0x31, 0x90, 0xf1, 0xe1,

  • Dhruva Koley & Ruben Vargas ECEN 2020 12/12/16

    29

    0x60, 0x31, 0x90, 0x31, 0xd0, 0x31, 0x90, 0xf1, 0xe1, 0x60, 0x31, 0x90, 0x31,

    0xd0, 0x31, 0x90, 0xf1, 0xe1, 0x60,

    0x31, 0x90, 0x31, 0xd0, 0x31, 0x90, 0xf1, 0xf1, 0x91, 0x90, 0xf1, 0x11, 0xd0,

    0xf1, 0xf1, 0x91, 0x90, 0xf1, 0x11, 0xd0, 0xf1, 0xf1, 0x91, 0x90, 0xf1, 0x11,

    0xd0, 0xf1, 0xf1, 0x91, 0xf0, 0xf0, 0x90, 0xf1, 0xf1, 0x91, 0xf0, 0xf0, 0x90,

    0xf1, 0xf1, 0x91, 0xf0, 0xf0, 0x90, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,

    0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,

    0xf1, 0xf1, 0xf1, 0xf1, 0x31, 0xa0, 0x21, 0xa0, 0xf1, 0xf1, 0xf1, 0xa1, 0xa0,

    0x21, 0xa0, 0xf1, 0xf1, 0xf1, 0xa1,

    0xa0, 0x21, 0xa0, 0xf1, 0xf1, 0xf1, 0x31, 0xf0, 0x10, 0x21, 0xf0, 0x10, 0xf1,

    0xf1, 0xc1, 0xf0, 0x10, 0x21, 0xf0, 0x10, 0xf1, 0xf1, 0xc1, 0xf0, 0x10, 0x21,

    0xf0, 0x10, 0xf1, 0xf1, 0xc1, 0xf0, 0x10, 0x21, 0xf0, 0x10, 0xf1, 0xf1, 0xc1,

    0xf0, 0x10, 0x21, 0xf0, 0x10, 0xf1, 0xf1, 0xc1, 0xf0, 0x10, 0x21, 0xf0, 0x10,

    0xf1, 0xf1, 0xc1, 0xf0, 0x10, 0x21, 0xf0, 0x10, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,

    0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0x81,

    }; static const unsigned long palette_Clone1BPP_COMP_RLE4[] =

    {

    0xFFFF00, 0xFFFFFF

    }; const tImage Clone1BPP_COMP_RLE4 =

    {

    IMAGE_FMT_1BPP_COMP_RLE4,

    84,

    84,

    2,

    palette_Clone1BPP_COMP_RLE4,

    pixel_Clone1BPP_COMP_RLE4,

    }; static const unsigned char pixel_Fairy1BPP_COMP_RLE4[] =

    {

    0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,

    0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,

    0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,

    0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,

    0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,

    0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0x40, 0xf1,

    0xb1, 0xf0, 0x50, 0xf1, 0xb1, 0x50, 0xf1, 0xe1, 0x40, 0xf1, 0xb1, 0xf0, 0x50,

    0xf1, 0xb1, 0x50, 0xf1, 0xe1, 0x40, 0xf1, 0xb1, 0xf0, 0x50, 0xf1, 0xb1, 0x50,

    0xf1, 0xe1, 0x40, 0xf1, 0xb1, 0xf0, 0x50, 0xf1, 0xb1, 0x50, 0xf1, 0xe1, 0x40,

    0xf1, 0xb1, 0xf0,

    0x50, 0xf1, 0xb1, 0x50, 0xf1, 0x81, 0x50, 0x41, 0x50, 0xf1, 0xf0, 0xf0, 0x10,

    0xf1, 0x01, 0x40, 0x51, 0x40, 0xf1, 0x31, 0x50, 0x41, 0x50, 0xf1, 0xf0, 0xf0,

    0x10, 0xf1, 0x01, 0x40, 0x51, 0x40, 0xf1, 0x31, 0x50, 0x41, 0x50, 0xf1, 0xf0,

    0xf0, 0x10, 0xf1, 0x01, 0x40, 0x51, 0x40, 0xf1, 0x31, 0x50, 0x41, 0x50, 0xf1,

    0xf0, 0xf0, 0x10, 0xf1, 0x01, 0x40, 0x51, 0x40, 0xf1, 0x31, 0x50, 0x41, 0x50,

    0xf1, 0xf0, 0xf0, 0x10, 0xf1, 0x01, 0x40, 0x51, 0x40, 0xf1, 0x31, 0x50, 0x41,

    0x50, 0xf1, 0xf0, 0xf0, 0x10, 0xf1, 0x01, 0x40, 0x51, 0x40, 0xe1, 0x40, 0x51,

    0x40, 0x51, 0x40, 0x51, 0xa0, 0x51, 0xa0, 0x41, 0xb0, 0x41, 0x50, 0x41, 0x50,

    0x41, 0x50, 0x81, 0x40, 0x51, 0x40, 0x51, 0x40, 0x51, 0xa0, 0x51, 0xa0, 0x41,

    0xb0, 0x41, 0x50,

    0x41, 0x50, 0x41, 0x50, 0x81, 0x40, 0x51, 0x40, 0x51, 0x40, 0x51, 0xa0, 0x51,

    0xa0, 0x41, 0xb0, 0x41, 0x50, 0x41, 0x50, 0x41, 0x50, 0x81, 0x40, 0x51, 0x40,

    0x51, 0x40, 0x51, 0xa0, 0x51, 0xa0, 0x41, 0xb0, 0x41, 0x50, 0x41, 0x50, 0x41,

  • Dhruva Koley & Ruben Vargas ECEN 2020 12/12/16

    30

    0x50, 0x81, 0x40, 0x51, 0x40, 0x51, 0x40, 0x51, 0xa0, 0x51, 0xa0, 0x41, 0xb0,

    0x41, 0x50, 0x41, 0x50, 0x41, 0x50, 0x81, 0x40, 0x51, 0x40, 0x51, 0x40, 0x51,

    0xa0, 0x51, 0xa0, 0x41, 0xb0, 0x41, 0x50, 0x41, 0x50, 0x41, 0x50, 0x81, 0xa0,

    0x41, 0x50, 0x41, 0xf0, 0xf0, 0xf0, 0x70, 0x51, 0x40, 0x51, 0xa0, 0x81, 0xa0,

    0x41, 0x50, 0x41, 0xf0, 0xf0, 0xf0, 0x70, 0x51, 0x40, 0x51, 0xa0, 0x81, 0xa0,

    0x41, 0x50, 0x41, 0xf0, 0xf0, 0xf0, 0x70, 0x51, 0x40, 0x51, 0xa0, 0x81, 0xa0,

    0x41, 0x50, 0x41,

    0xf0, 0xf0, 0xf0, 0x70, 0x51, 0x40, 0x51, 0xa0, 0x81, 0xa0, 0x41, 0x50, 0x41,

    0xf0, 0xf0, 0xf0, 0x70, 0x51, 0x40, 0x51, 0xa0, 0xd1, 0xf0, 0xf0, 0x60, 0x51,

    0xa0, 0x41, 0xf0, 0xf0, 0x60, 0xf1, 0x31, 0xf0, 0xf0, 0x60, 0x51, 0xa0, 0x41,

    0xf0, 0xf0, 0x60, 0xf1, 0x31, 0xf0, 0xf0, 0x60, 0x51, 0xa0, 0x41, 0xf0, 0xf0,

    0x60, 0xf1, 0x31, 0xf0, 0xf0, 0x60, 0x51, 0xa0, 0x41, 0xf0, 0xf0, 0x60, 0xf1,

    0x31, 0xf0, 0xf0, 0x60, 0x51, 0xa0, 0x41, 0xf0, 0xf0, 0x60, 0xf1, 0x31, 0xf0,

    0xf0, 0x60, 0x51, 0xa0, 0x41, 0xf0, 0xf0, 0x60, 0xf1, 0x91, 0x40, 0x51, 0xf0,

    0x50, 0x51, 0xa0, 0x41, 0xf0, 0x60, 0x41, 0x50, 0xf1, 0xe1, 0x40, 0x51, 0xf0,

    0x50, 0x51, 0xa0, 0x41, 0xf0, 0x60, 0x41, 0x50, 0xf1, 0xe1, 0x40, 0x51, 0xf0,

    0x50, 0x51, 0xa0,

    0x41, 0xf0, 0x60, 0x41, 0x50, 0xf1, 0xe1, 0x40, 0x51, 0xf0, 0x50, 0x51, 0xa0,

    0x41, 0xf0, 0x60, 0x41, 0x50, 0xf1, 0xe1, 0x40, 0x51, 0xf0, 0x50, 0x51, 0xa0,

    0x41, 0xf0, 0x60, 0x41, 0x50, 0xf1, 0xe1, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0x80,

    0xf1, 0xe1, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0x80, 0xf1, 0xe1, 0xf0, 0xf0, 0xf0,

    0xf0, 0xf0, 0x80, 0xf1, 0xe1, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0x80, 0xf1, 0xe1,

    0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0x80, 0xf1, 0xe1, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,

    0x80, 0xf1, 0x81, 0xa0, 0x51, 0xf0, 0xf0, 0x00, 0xf1, 0x01, 0xf0, 0x00, 0x41,

    0xa0, 0xf1, 0x31, 0xa0, 0x51, 0xf0, 0xf0, 0x00, 0xf1, 0x01, 0xf0, 0x00, 0x41,

    0xa0, 0xf1, 0x31, 0xa0, 0x51, 0xf0, 0xf0, 0x00, 0xf1, 0x01, 0xf0, 0x00, 0x41,

    0xa0, 0xf1, 0x31,

    0xa0, 0x51, 0xf0, 0xf0, 0x00, 0xf1, 0x01, 0xf0, 0x00, 0x41, 0xa0, 0xf1, 0x31,

    0xa0, 0x51, 0xf0, 0xf0, 0x00, 0xf1, 0x01, 0xf0, 0x00, 0x41, 0xa0, 0xf1, 0x31,

    0xf0, 0x00, 0x41, 0xf0, 0xf0, 0xf0, 0x70, 0x51, 0xf0, 0xf1, 0x31, 0xf0, 0x00,

    0x41, 0xf0, 0xf0, 0xf0, 0x70, 0x51, 0xf0, 0xf1, 0x31, 0xf0, 0x00, 0x41, 0xf0,

    0xf0, 0xf0, 0x70, 0x51, 0xf0, 0xf1, 0x31, 0xf0, 0x00, 0x41, 0xf0, 0xf0, 0xf0,

    0x70, 0x51, 0xf0, 0xf1, 0x31, 0xf0, 0x00, 0x41, 0xf0, 0xf0, 0xf0, 0x70, 0x51,

    0xf0, 0xf1, 0x31, 0xf0, 0x00, 0x41, 0xf0, 0xf0, 0xf0, 0x70, 0x51, 0xf0, 0xe1,

    0x40, 0x51, 0x40, 0x51, 0x40, 0x51, 0xa0, 0xf1, 0x51, 0xb0, 0x41, 0x50, 0x41,

    0x50, 0x41, 0x50, 0x81, 0x40, 0x51, 0x40, 0x51, 0x40, 0x51, 0xa0, 0xf1, 0x51,

    0xb0, 0x41, 0x50,

    0x41, 0x50, 0x41, 0x50, 0x81, 0x40, 0x51, 0x40, 0x51, 0x40, 0x51, 0xa0, 0xf1,

    0x51, 0xb0, 0x41, 0x50, 0x41, 0x50, 0x41, 0x50, 0x81, 0x40, 0x51, 0x40, 0x51,

    0x40, 0x51, 0xa0, 0xf1, 0x51, 0xb0, 0x41, 0x50, 0x41, 0x50, 0x41, 0x50, 0x81,

    0x40, 0x51, 0x40, 0x51, 0x40, 0x51, 0xa0, 0xf1, 0x51, 0xb0, 0x41, 0x50, 0x41,

    0x50, 0x41, 0x50, 0x81, 0xa0, 0x41, 0x50, 0xf1, 0xf0, 0xf0, 0x10, 0xf1, 0x01,

    0x40, 0x51, 0xa0, 0x81, 0xa0, 0x41, 0x50, 0xf1, 0xf0, 0xf0, 0x10, 0xf1, 0x01,

    0x40, 0x51, 0xa0, 0x81, 0xa0, 0x41, 0x50, 0xf1, 0xf0, 0xf0, 0x10, 0xf1, 0x01,

    0x40, 0x51, 0xa0, 0x81, 0xa0, 0x41, 0x50, 0xf1, 0xf0, 0xf0, 0x10, 0xf1, 0x01,

    0x40, 0x51, 0xa0, 0x81, 0xa0, 0x41, 0x50, 0xf1, 0xf0, 0xf0, 0x10, 0xf1, 0x01,

    0x40, 0x51, 0xa0,

    0x81, 0xa0, 0x41, 0x50, 0xf1, 0x01, 0xf0, 0xf0, 0x00, 0xf1, 0x01, 0x40, 0x51,

    0xa0, 0xd1, 0xa0, 0xf1, 0xb1, 0xf0, 0x50, 0xf1, 0xb1, 0xa0, 0xf1, 0x31, 0xa0,

    0xf1, 0xb1, 0xf0, 0x50, 0xf1, 0xb1, 0xa0, 0xf1, 0x31, 0xa0, 0xf1, 0xb1, 0xf0,

    0x50, 0xf1, 0xb1, 0xa0, 0xf1, 0x31, 0xa0, 0xf1, 0xb1, 0xf0, 0x50, 0xf1, 0xb1,

    0xa0, 0xf1, 0x31, 0xa0, 0xf1, 0xb1, 0xf0, 0x50, 0xf1, 0xb1, 0xa0, 0xf1, 0xf1,

    0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,

    0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,

    0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,

    0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,

    0xf1, 0xf1, 0xf1,

  • Dhruva Koley & Ruben Vargas ECEN 2020 12/12/16

    31

    0xf1, 0xf1, 0xf1, 0x11,

    }; static const unsigned long palette_Fairy1BPP_COMP_RLE4[] =

    {

    0x800080, 0x000000

    }; const tImage Fairy1BPP_COMP_RLE4 =

    {

    IMAGE_FMT_1BPP_COMP_RLE4,

    120,

    84,

    2,

    palette_Fairy1BPP_COMP_RLE4,

    pixel_Fairy1BPP_COMP_RLE4,

    }; static const unsigned char pixel_Orange1BPP_COMP_RLE4[] =

    {

    0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,

    0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0x91, 0x30, 0xf1,

    0xf1, 0xf1, 0xf1, 0xf1, 0x30, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0x30, 0xf1, 0xf1,

    0xf1, 0xf1, 0xf1, 0x30, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0x30, 0xf1, 0xf1, 0xf1,

    0xf1, 0xb1, 0x30, 0x31, 0x40, 0xf1, 0xf1, 0xf1, 0xf1, 0x61, 0x30, 0x31, 0x40,

    0xf1, 0xf1, 0xf1, 0xf1, 0x61, 0x30, 0x31, 0x40, 0xf1, 0xf1, 0xf1, 0xf1, 0x61,

    0x30, 0x31, 0x40, 0xf1, 0xf1, 0xf1,

    0xf1, 0x21, 0x30, 0x31, 0x30, 0x41, 0x30, 0xf1, 0xf1, 0xf1, 0xe1, 0x30, 0x31,

    0x30, 0x41, 0x30, 0xf1, 0xf1, 0xf1, 0xe1, 0x30, 0x31, 0x30, 0x41, 0x30, 0xf1,

    0xf1, 0xf1, 0xe1, 0x30, 0x31, 0x30, 0x41, 0x30, 0xf1, 0xf1, 0xf1, 0xe1, 0x30,

    0x31, 0x30, 0x41, 0x30, 0xf1, 0xf1, 0xf1, 0x11, 0xc0, 0x31, 0x30, 0x31, 0x40,

    0x31, 0x80, 0xf1, 0xf1, 0x81, 0xc0, 0x31, 0x30, 0x31, 0x40, 0x31, 0x80, 0xf1,

    0xf1, 0x81, 0xc0, 0x31, 0x30, 0x31, 0x40, 0x31, 0x80, 0xf1, 0xf1, 0x81, 0xc0,

    0x31, 0x30, 0x31, 0x40, 0x31, 0x80,

    0xf1, 0xf1, 0x81, 0xc0, 0x31, 0x30, 0x31, 0x40, 0x31, 0x80, 0xf1, 0xf1, 0x81,

    0xf0, 0xf0, 0xa0, 0xf1, 0xf1, 0x81, 0xf0, 0xf0, 0xa0, 0xf1, 0xf1, 0x81, 0xf0,

    0xf0, 0xa0, 0xf1, 0xf1, 0x81, 0xf0, 0xf0, 0xa0, 0xf1, 0xf1, 0x81, 0xf0, 0xf0,

    0xa0, 0xf1, 0xf1, 0x81, 0x70, 0x81, 0x70, 0x81, 0x80, 0xf1, 0xf1, 0x81, 0x70,

    0x81, 0x70, 0x81, 0x80, 0xf1, 0xf1, 0x81, 0x70, 0x81, 0x70, 0x81, 0x80, 0xf1,

    0xf1, 0x81, 0x70, 0x81, 0x70, 0x81, 0x80, 0xf1, 0xb1, 0x30, 0x81, 0x70, 0x41,

    0xb0, 0x41, 0xc0, 0xf1, 0xb1, 0x30,

    0x81, 0x70, 0x41, 0xb0, 0x41, 0xc0, 0xf1, 0xb1, 0x30, 0x81, 0x70, 0x41, 0xb0,

    0x41, 0xc0, 0xf1, 0xb1, 0x30, 0x81, 0x70, 0x41, 0xb0, 0x41, 0xc0, 0xf1, 0xb1,

    0x30, 0x81, 0x70, 0x41, 0xb0, 0x41, 0xc0, 0xf1, 0x61, 0x80, 0x81, 0x70, 0x41,

    0xb0, 0x41, 0xc0, 0x71, 0x30, 0xa1, 0x80, 0x81, 0x70, 0x41, 0xb0, 0x41, 0xc0,

    0x71, 0x30, 0xa1, 0x80, 0x81, 0x70, 0x41, 0xb0, 0x41, 0xc0, 0x71, 0x30, 0xa1,

    0x80, 0x81, 0x70, 0x41, 0xb0, 0x41, 0xc0, 0x71, 0x30, 0xa1, 0x80, 0x81, 0x70,

    0x41, 0xb0, 0x41, 0xc0, 0x71, 0x30,

    0xa1, 0x80, 0x81, 0xf0, 0xf0, 0xa0, 0x71, 0x80, 0x51, 0x80, 0x81, 0xf0, 0xf0,

    0xa0, 0x71, 0x80, 0x51, 0x80, 0x81, 0xf0, 0xf0, 0xa0, 0x71, 0x80, 0x51, 0x80,

    0x81, 0xf0, 0xf0, 0xa0, 0x71, 0x80, 0x51, 0x80, 0x81, 0xf0, 0xf0, 0xa0, 0x71,

    0x80, 0xa1, 0x70, 0x41, 0xf0, 0x40, 0x81, 0xc0, 0x31, 0xc0, 0xa1, 0x70, 0x41,

    0xf0, 0x40, 0x81, 0xc0, 0x31, 0xc0, 0xa1, 0x70, 0x41, 0xf0, 0x40, 0x81, 0xc0,

    0x31, 0xc0, 0xa1, 0x70, 0x41, 0xf0, 0x40, 0x81, 0xc0, 0x31, 0xc0, 0xa1, 0x70,

    0x41, 0xf0, 0x40, 0x71, 0xd0, 0x31,

    0xc0, 0xf1, 0x71, 0xf0, 0xf0, 0xa0, 0xf1, 0xf1, 0x81, 0xf0, 0xf0, 0xa0, 0xf1,

    0xf1, 0x81, 0xf0, 0xf0, 0xa0, 0xf1, 0xf1, 0x81, 0xf0, 0xf0, 0xa0, 0xf1, 0xf1,

  • Dhruva Koley & Ruben Vargas ECEN 2020 12/12/16

    32

    0x81, 0xc0, 0xf1, 0x01, 0xc0, 0xf1, 0xf1, 0x81, 0xc0, 0xf1, 0x01, 0xc0, 0xf1,

    0xf1, 0x81, 0xc0, 0xf1, 0x01, 0xc0, 0xf1, 0xf1, 0x81, 0xc0, 0xf1, 0x01, 0xc0,

    0xf1, 0xf1, 0x81, 0xc0, 0xf1, 0x01, 0xc0, 0xf1, 0xf1, 0x81, 0xf0, 0xf0, 0xa0,

    0xf1, 0xf1, 0x81, 0xf0, 0xf0, 0xa0, 0xf1, 0xf1, 0x81, 0xf0, 0xf0, 0xa0, 0xf1,

    0xf1, 0x81, 0xf0, 0xf0, 0xa0, 0xf1,

    0xf1, 0x81, 0xf0, 0xf0, 0xa0, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,

    0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,

    0xf1, 0xf1, 0xf1, 0x01, 0x80, 0x71, 0x80, 0xf1, 0xf1, 0xf1, 0x91, 0x80, 0x71,

    0x80, 0xf1, 0xf1, 0xf1, 0x91, 0x80, 0x71, 0x80, 0xf1, 0xf1, 0xf1, 0x91, 0x80,

    0x71, 0x80, 0xf1, 0xf1, 0xf1, 0x91, 0x80, 0x71, 0x80, 0xf1, 0xf1, 0xf1, 0x51,

    0xc0, 0x71, 0xc0, 0xf1, 0xf1, 0xf1, 0x11, 0xc0, 0x71, 0xc0, 0xf1, 0xf1, 0xf1,

    0x11, 0xc0, 0x71, 0xc0, 0xf1, 0xf1,

    0xf1, 0x11, 0xc0, 0x71, 0xc0, 0xf1, 0xf1, 0xf1, 0x11, 0xc0, 0x71, 0xc0, 0xf1,

    0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,

    0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0x01,

    }; static const unsigned long palette_Orange1BPP_COMP_RLE4[] =

    {

    0xFFA500, 0x000000

    }; const tImage Orange1BPP_COMP_RLE4 =

    {

    IMAGE_FMT_1BPP_COMP_RLE4,

    84,

    84,

    2,

    palette_Orange1BPP_COMP_RLE4,

    pixel_Orange1BPP_COMP_RLE4,

    }; static const unsigned char pixel_Poly_Clone1BPP_COMP_RLE4[] =

    {

    0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,

    0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,

    0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,

    0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0x51, 0x30, 0x31, 0x30, 0xf1, 0xf1, 0xf1, 0xf1,

    0x71, 0x30, 0x31, 0x30, 0xf1, 0xf1, 0xf1, 0xf1, 0x71, 0x30, 0x31, 0x30, 0xf1,

    0xf1, 0xf1, 0xf1, 0x71, 0x30, 0x31, 0x30, 0xf1, 0xf1, 0xf1, 0xf1, 0x71, 0x30,

    0x31, 0x30, 0xf1, 0xf1, 0xf1, 0xf1,

    0x31, 0x30, 0x31, 0x30, 0x31, 0x30, 0xf1, 0xf1, 0xf1, 0xf1, 0x30, 0x31, 0x30,

    0x31, 0x30, 0xf1, 0xf1, 0xf1, 0xf1, 0x30, 0x31, 0x30, 0x31, 0x30, 0xf1, 0xf1,

    0xf1, 0xf1, 0x30, 0x31, 0x30, 0x31, 0x30, 0xf1, 0xf1, 0xf1, 0x41, 0xa0, 0x31,

    0x30, 0x31, 0x30, 0x31, 0x60, 0xf1, 0xf1, 0xd1, 0xa0, 0x31, 0x30, 0x31, 0x30,

    0x31, 0x60, 0xf1, 0xf1, 0xd1, 0xa0, 0x31, 0x30, 0x31, 0x30, 0x31, 0x60, 0xf1,

    0xf1, 0xd1, 0xa0, 0x31, 0x30, 0x31, 0x30, 0x31, 0x60, 0xf1, 0xf1, 0xd1, 0xa0,

    0x31, 0x30, 0x31, 0x30, 0x31, 0x60,

    0xf1, 0xf1, 0xd1, 0xf0, 0xf0, 0x50, 0xf1, 0xf1, 0xd1, 0xf0, 0xf0, 0x50, 0xf1,

    0xf1, 0xd1, 0xf0, 0xf0, 0x50, 0xf1, 0xf1, 0xd1, 0xf0, 0xf0, 0x50, 0xf1, 0xf1,

    0xd1, 0x70, 0x61, 0x70, 0x71, 0x60, 0xf1, 0xf1, 0xd1, 0x70, 0x61, 0x70, 0x71,

    0x60, 0xf1, 0xf1, 0xd1, 0x70, 0x61, 0x70, 0x71, 0x60, 0xf1, 0xf1, 0xd1, 0x70,

    0x61, 0x70, 0x71, 0x60, 0xf1, 0xf1, 0xd1, 0x70, 0x61, 0x70, 0x71, 0x60, 0xf1,

    0xf1, 0x11, 0x30, 0x71, 0x70, 0x21, 0xb0, 0x31, 0xa0, 0xf1, 0xf1, 0x11, 0x30,

    0x71, 0x70, 0x21, 0xb0, 0x31, 0xa0,

    0xf1, 0xf1, 0x11, 0x30, 0x71, 0x70, 0x21, 0xb0, 0x31, 0xa0, 0xf1, 0xf1, 0x11,

    0x30, 0x71, 0x70, 0x21, 0xb0, 0x31, 0xa0, 0xf1, 0xd1, 0x70, 0x71, 0x70, 0x21,

  • Dhruva Koley & Ruben Vargas ECEN 2020 12/12/16

    33

    0xb0, 0x31, 0xa0, 0x71, 0x30, 0xf1, 0x11, 0x70, 0x71, 0x70, 0x21, 0xb0, 0x31,

    0xa0, 0x71, 0x30, 0xf1, 0x11, 0x70, 0x71, 0x70, 0x21, 0xb0, 0x31, 0xa0, 0x71,

    0x30, 0xf1, 0x11, 0x70, 0x71, 0x70, 0x21, 0xb0, 0x31, 0xa0, 0x71, 0x30, 0xf1,

    0x11, 0x70, 0x71, 0x70, 0x21, 0xb0, 0x31, 0xa0, 0x71, 0x30, 0xf1, 0x11, 0x70,

    0x71, 0xf0, 0xf0, 0x50, 0x71, 0x70,

    0xd1, 0x70, 0x71, 0xf0, 0xf0, 0x50, 0x71, 0x70, 0xd1, 0x70, 0x71, 0xf0, 0xf0,

    0x50, 0x71, 0x70, 0xd1, 0x70, 0x71, 0xf0, 0xf0, 0x50, 0x71, 0x70, 0xf1, 0x11,

    0x70, 0x31, 0xf0, 0x20, 0x71, 0xa0, 0x31, 0xb0, 0xf1, 0x11, 0x70, 0x31, 0xf0,

    0x20, 0x71, 0xa0, 0x31, 0xb0, 0xf1, 0x11, 0x70, 0x31, 0xf0, 0x20, 0x71, 0xa0,

    0x31, 0xb0, 0xf1, 0x11, 0x70, 0x31, 0xf0, 0x20, 0x71, 0xa0, 0x31, 0xb0, 0xf1,

    0x11, 0x70, 0x31, 0xf0, 0x20, 0x71, 0xa0, 0x31, 0xb0, 0xf1, 0xd1, 0xf0, 0xf0,

    0x50, 0xf1, 0xf1, 0xd1, 0xf0, 0xf0,

    0x50, 0xf1, 0xf1, 0xd1, 0xf0, 0xf0, 0x50, 0xf1, 0xf1, 0xd1, 0xf0, 0xf0, 0x50,

    0xf1, 0xf1, 0xd1, 0xa0, 0xf1, 0xa0, 0xf1, 0xf1, 0xd1, 0xa0, 0xf1, 0xa0, 0xf1,

    0xf1, 0xd1, 0xa0, 0xf1, 0xa0, 0xf1, 0xf1, 0xd1, 0xa0, 0xf1, 0xa0, 0xf1, 0xf1,

    0xd1, 0xa0, 0xf1, 0xa0, 0xf1, 0xf1, 0xd1, 0xf0, 0xf0, 0x50, 0xf1, 0xf1, 0xd1,

    0xf0, 0xf0, 0x50, 0xf1, 0xf1, 0xd1, 0xf0, 0xf0, 0x50, 0xf1, 0xf1, 0xd1, 0xf0,

    0xf0, 0x50, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,

    0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,

    0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0x91,

    0x60, 0x71, 0x70, 0xf1, 0xf1, 0xf1, 0xc1, 0x60, 0x71, 0x70, 0xf1, 0xf1, 0xf1,

    0xc1, 0x60, 0x71, 0x70, 0xf1, 0xf1, 0xf1, 0xc1, 0x60, 0x71, 0x70, 0xf1, 0xf1,

    0xf1, 0x81, 0xa0, 0x71, 0xa0, 0xf1, 0xf1, 0xf1, 0x51, 0xa0, 0x71, 0xa0, 0xf1,

    0xf1, 0xf1, 0x51, 0xa0, 0x71, 0xa0, 0xf1, 0xf1, 0xf1, 0x51, 0xa0, 0x71, 0xa0,

    0xf1, 0xf1, 0xf1, 0x51, 0xa0, 0x71, 0xa0, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,

    0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,

    0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,

    0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,

    0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0x21,

    }; static const unsigned long palette_Poly_Clone1BPP_COMP_RLE4[] =

    {

    0xFFFF00, 0x000000

    }; const tImage Poly_Clone1BPP_COMP_RLE4 =

    {

    IMAGE_FMT_1BPP_COMP_RLE4,

    84,

    84,

    2,

    palette_Poly_Clone1BPP_COMP_RLE4,

    pixel_Poly_Clone1BPP_COMP_RLE4,

    }; static const unsigned char pixel_Final_Boss1BPP_COMP_RLE4[] =

    {

    0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,

    0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,

    0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,

    0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,

    0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,

    0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,

    0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,

  • Dhruva Koley & Ruben Vargas ECEN 2020 12/12/16

    34

    0x51, 0xf0, 0xf0, 0xf0, 0xf0, 0x70, 0xb1, 0xf0, 0xf0, 0xf0, 0xf0, 0x70, 0xb1,

    0xf0, 0xf0, 0xf0, 0xf0, 0x70, 0xb1, 0xf0, 0xf0, 0xf0, 0xf0, 0x70, 0xe1, 0xf0,

    0xf0, 0xf0, 0xf0, 0x10, 0xf1, 0x11, 0xf0, 0xf0, 0xf0, 0xf0, 0x10, 0xf1, 0x11,

    0xf0, 0xf0, 0xf0, 0xf0, 0x10, 0xf1, 0x11, 0xf0, 0xf0, 0xf0, 0xf0, 0x10, 0xf1,

    0x41, 0xf0, 0x20, 0xf1, 0x51, 0xf0, 0x20, 0xf1, 0x71, 0xf0, 0x20, 0xf1, 0x51,

    0xf0, 0x20, 0xf1, 0x71, 0xf0, 0x20, 0xf1, 0x51, 0xf0, 0x20, 0xf1, 0x71, 0xf0,

    0x20, 0xf1, 0x51, 0xf0, 0x20, 0xf1,

    0xa1, 0xc0, 0x81, 0x90, 0x81, 0xc0, 0xf1, 0xd1, 0xc0, 0x81, 0x90, 0x81, 0xc0,

    0xf1, 0xd1, 0xc0, 0x81, 0x90, 0x81, 0xc0, 0xf1, 0xd1, 0xc0, 0x81, 0x90, 0x81,

    0xc0, 0xf1, 0xf1, 0x01, 0x90, 0x51, 0x50, 0x31, 0x50, 0x51, 0x90, 0xf1, 0xf1,

    0x31, 0x90, 0x51, 0x50, 0x31, 0x50, 0x51, 0x90, 0xf1, 0xf1, 0x31, 0x90, 0x51,

    0x50, 0x31, 0x50, 0x51, 0x90, 0xf1, 0xf1, 0x31, 0x90, 0x51, 0x50, 0x31, 0x50,

    0x51, 0x90, 0xf1, 0xf1, 0x31, 0xc0, 0x51, 0x90, 0x51, 0xc0, 0xf1, 0xf1, 0x31,

    0xc0, 0x51, 0x90, 0x51, 0xc0, 0xf1,

    0xf1, 0x31, 0xc0, 0x51, 0x90, 0x51, 0xc0, 0xf1, 0xf1, 0x31, 0xc0, 0x51, 0x90,

    0x51, 0xc0, 0xf1, 0xf1, 0x71, 0xb0, 0xf1, 0xb0, 0xf1, 0xf1, 0xb1, 0xb0, 0xf1,

    0xb0, 0xf1, 0xf1, 0xb1, 0xb0, 0xf1, 0xb0, 0xf1, 0xf1, 0xb1, 0xb0, 0xf1, 0xb0,

    0xf1, 0xf1, 0xe1, 0xf0, 0xf0, 0x10, 0xf1, 0xf1, 0xf1, 0x11, 0xf0, 0xf0, 0x10,

    0xf1, 0xf1, 0xf1, 0x11, 0xf0, 0xf0, 0x10, 0xf1, 0xf1, 0xf1, 0x11, 0xf0, 0xf0,

    0x10, 0xf1, 0xf1, 0xf1, 0x11, 0xf0, 0xf0, 0x10, 0xf1, 0xf1, 0xf1, 0x41, 0xf0,

    0xb0, 0xf1, 0xf1, 0xf1, 0x71, 0xf0,

    0xb0, 0xf1, 0xf1, 0xf1, 0x71, 0xf0, 0xb0, 0xf1, 0xf1, 0xf1, 0x71, 0xf0, 0xb0,

    0xf1, 0xf1, 0xf1, 0x71, 0xf0, 0xb0, 0xf1, 0xf1, 0xf1, 0x71, 0xf0, 0xb0, 0xf1,

    0xf1, 0xf1, 0x71, 0xf0, 0xb0, 0xf1, 0xf1, 0xf1, 0x71, 0xf0, 0xb0, 0xf1, 0xf1,

    0xf1, 0xa1, 0xf0, 0x50, 0xf1, 0xf1, 0xf1, 0xd1, 0xf0, 0x50, 0xf1, 0xf1, 0xf1,

    0xd1, 0xf0, 0x50, 0xf1, 0xf1, 0xf1, 0xd1, 0xf0, 0x50, 0xf1, 0xf1, 0xf1, 0xf1,

    0x01, 0xf0, 0xf1, 0xf1, 0xf1, 0xf1, 0x31, 0xf0, 0xf1, 0xf1, 0xf1, 0xf1, 0x31,

    0xf0, 0xf1, 0xf1, 0xf1, 0xf1, 0x31,

    0xf0, 0xf1, 0xf1, 0xf1, 0xf1, 0x31, 0xf0, 0xf1, 0xf1, 0xf1, 0xf1, 0x31, 0xf0,

    0xf1, 0xf1, 0xf1, 0xf1, 0x31, 0xf0, 0xf1, 0xf1, 0xf1, 0xf1, 0x31, 0xf0, 0xf1,

    0xf1, 0xf1, 0xf1, 0x61, 0x90, 0xf1, 0xf1, 0xf1, 0xf1, 0x91, 0x90, 0xf1, 0xf1,

    0xf1, 0xf1, 0x91, 0x90, 0xf1, 0xf1, 0xf1, 0xf1, 0x91, 0x90, 0xf1, 0xf1, 0xf1,

    0xf1, 0xc1, 0x30, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0x30, 0xf1, 0xf1, 0xf1, 0xf1,

    0xf1, 0x30, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0x30, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,

    0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,

    0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,

    0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,

    0xf1, 0xb1,

    }; static const unsigned long palette_Final_Boss1BPP_COMP_RLE4[] =

    {

    0x008000, 0x000000

    }; const tImage Final_Boss1BPP_COMP_RLE4 =

    {

    IMAGE_FMT_1BPP_COMP_RLE4,

    84,

    84,

    2,

    palette_Final_Boss1BPP_COMP_RLE4,

    pixel_Final_Boss1BPP_COMP_RLE4,

    }; static const unsigned char pixel_Poly1BPP_COMP_RLE4[] =

    {

  • Dhruva Koley & Ruben Vargas ECEN 2020 12/12/16

    35

    0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,

    0xf1, 0xf1, 0xf1, 0xf1, 0x91, 0xf0, 0x00, 0xf1, 0xf1, 0xf1, 0xf1, 0x21, 0xf0,

    0x00, 0xf1, 0xf1, 0xf1, 0xf1, 0x21, 0xf0, 0x00, 0xf1, 0xf1, 0xf1, 0xf1, 0x21,

    0xf0, 0x00, 0xf1, 0xf1, 0xf1, 0xf1, 0x21, 0xb0, 0xf1, 0xf1, 0xf1, 0xf1, 0x71,

    0xb0, 0xf1, 0xf1, 0xf1, 0xf1, 0x71, 0xb0, 0xf1, 0xf1, 0xf1, 0xf1, 0x71, 0xb0,

    0xf1, 0xf1, 0xf1, 0xf1, 0x71, 0xb0, 0xf1, 0xf1, 0xf1, 0xf1, 0x71, 0xf0, 0x80,

    0xf1, 0xf1, 0xf1, 0xa1, 0xf0, 0x80,

    0xf1, 0xf1, 0xf1, 0xa1, 0xf0, 0x80, 0xf1, 0xf1, 0xf1, 0xa1, 0xf0, 0x80, 0xf1,

    0xf1, 0xf1, 0xa1, 0xf0, 0x80, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,

    0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,

    0xf1, 0xf1, 0xf1, 0x21, 0xf0, 0xf0, 0x80, 0xf1, 0xf1, 0xa1, 0xf0, 0xf0, 0x80,

    0xf1, 0xf1, 0xa1, 0xf0, 0xf0, 0x80, 0xf1, 0xf1, 0xa1, 0xf0, 0xf0, 0x80, 0xf1,

    0xf1, 0xa1, 0xf0, 0xf0, 0x80, 0xf1, 0xf1, 0xa1, 0xf0, 0xf0, 0x80, 0xf1, 0xf1,

    0xa1, 0xf0, 0xf0, 0x80, 0xf1, 0xf1,

    0xa1, 0xf0, 0xf0, 0x80, 0xf1, 0xf1, 0xa1, 0xf0, 0xf0, 0x80, 0xf1, 0xf1, 0xa1,

    0x70, 0x71, 0x80, 0x71, 0x70, 0xf1, 0xf1, 0xa1, 0x70, 0x71, 0x80, 0x71, 0x70,

    0xf1, 0xf1, 0xa1, 0x70, 0x71, 0x80, 0x71, 0x70, 0xf1, 0xf1, 0xa1, 0x70, 0x71,

    0x80, 0x71, 0x70, 0xf1, 0xf1, 0xa1, 0x70, 0x71, 0x80, 0x71, 0x70, 0xf1, 0xd1,

    0x30, 0x81, 0x70, 0x31, 0xc0, 0x31, 0xb0, 0xf1, 0xd1, 0x30, 0x81, 0x70, 0x31,

    0xc0, 0x31, 0xb0, 0xf1, 0xd1, 0x30, 0x81, 0x70, 0x31, 0xc0, 0x31, 0xb0, 0xf1,

    0xd1, 0x30, 0x81, 0x70, 0x31, 0xc0,

    0x31, 0xb0, 0xf1, 0x91, 0x70, 0x81, 0x70, 0x71, 0x80, 0x71, 0x70, 0x71, 0x30,

    0xd1, 0x70, 0x81, 0x70, 0x71, 0x80, 0x71, 0x70, 0x71, 0x40, 0xc1, 0x70, 0x81,

    0x70, 0x71, 0x80, 0x71, 0x70, 0x71, 0x40, 0xc1, 0x70, 0x81, 0x70, 0x71, 0x80,

    0x71, 0x70, 0x71, 0x40, 0xc1, 0x70, 0x81, 0x70, 0x71, 0x80, 0x71, 0x70, 0x71,

    0x40, 0xc1, 0x70, 0x81, 0xf0, 0xf0, 0x80, 0x71, 0x80, 0x81, 0x70, 0x81, 0xf0,

    0xf0, 0x80, 0x71, 0x80, 0x81, 0x70, 0x81, 0xf0, 0xf0, 0x80, 0x71, 0x80, 0x81,

    0x70, 0x81, 0xf0, 0xf0, 0x80, 0x71,

    0x80, 0x81, 0x70, 0x81, 0xf0, 0xf0, 0x80, 0x71, 0x80, 0xc1, 0x70, 0x41, 0xf0,

    0x30, 0x81, 0xb0, 0x31, 0xc0, 0xc1, 0x70, 0x41, 0xf0, 0x30, 0x81, 0xb0, 0x31,

    0xc0, 0xc1, 0x70, 0x41, 0xf0, 0x30, 0x81, 0xb0, 0x31, 0xc0, 0xc1, 0x70, 0x41,

    0xf0, 0x30, 0x81, 0xb0, 0x31, 0xc0, 0xf1, 0x91, 0x70, 0x71, 0xf0, 0x80, 0xf1,

    0xf1, 0xa1, 0x70, 0x71, 0xf0, 0x80, 0xf1, 0xf1, 0xa1, 0x70, 0x71, 0xf0, 0x80,

    0xf1, 0xf1, 0xa1, 0x70, 0x71, 0xf0, 0x80, 0xf1, 0xf1, 0xa1, 0x70, 0x71, 0xf0,

    0x80, 0xf1, 0xf1, 0xa1, 0xb0, 0xf1,

    0x01, 0xb0, 0xf1, 0xf1, 0xa1, 0xb0, 0xf1, 0x01, 0xb0, 0xf1, 0xf1, 0xa1, 0xb0,

    0xf1, 0x01, 0xb0, 0xf1, 0xf1, 0xa1, 0xb0, 0xf1, 0x01, 0xb0, 0xf1, 0xf1, 0xa1,

    0xf0, 0xf0, 0x80, 0xf1, 0xf1, 0xa1, 0xf0, 0xf0, 0x80, 0xf1, 0xf1, 0xa1, 0xf0,

    0xf0, 0x80, 0xf1, 0xf1, 0xa1, 0xf0, 0xf0, 0x80, 0xf1, 0xf1, 0xa1, 0xf0, 0xf0,

    0x80, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,

    0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,

    0xf1, 0xf1, 0xf1, 0xf1, 0x61, 0x70,

    0x81, 0x70, 0xf1, 0xf1, 0xf1, 0xa1, 0x70, 0x81, 0x70, 0xf1, 0xf1, 0xf1, 0xa1,

    0x70, 0x81, 0x70, 0xf1, 0xf1, 0xf1, 0xa1, 0x70, 0x81, 0x70, 0xf1, 0xf1, 0xf1,

    0x61, 0xb0, 0x81, 0xb0, 0xf1, 0xf1, 0xf1, 0x21, 0xb0, 0x81, 0xb0, 0xf1, 0xf1,

    0xf1, 0x21, 0xb0, 0x81, 0xb0, 0xf1, 0xf1, 0xf1, 0x21, 0xb0, 0x81, 0xb0, 0xf1,

    0xf1, 0xf1, 0x21, 0xb0, 0x81, 0xb0, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,

    0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xc1,

    }; static const unsigned long palette_Poly1BPP_COMP_RLE4[] =

    {

    0x0000FF, 0xFFFFFF

    }; const tImage Poly1BPP_COMP_RLE4 =

    {

  • Dhruva Koley & Ruben Vargas ECEN 2020 12/12/16

    36

    IMAGE_FMT_1BPP_COMP_RLE4,

    84,

    84,

    2,

    palette_Poly1BPP_COMP_RLE4,

    pixel_Poly1BPP_COMP_RLE4,

    }; static const unsigned char pixel_Poly_Girl1BPP_COMP_RLE4[] =

    {

    0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,

    0xf1, 0xf1, 0xf1, 0xf1, 0xc1, 0x20, 0xb1, 0x30, 0xf1, 0xf1, 0xf1, 0xf1, 0x01,

    0x20, 0xb1, 0x30, 0xf1, 0xf1, 0xf1, 0xf1, 0x01, 0x20, 0xb1, 0x30, 0xf1, 0xf1,

    0xf1, 0xf1, 0x01, 0x20, 0xb1, 0x30, 0xf1, 0xf1, 0xf1, 0xc1, 0x30, 0x21, 0x30,

    0x31, 0x30, 0x31, 0x20, 0xf1, 0xf1, 0xf1, 0x91, 0x30, 0x21, 0x30, 0x31, 0x30,

    0x31, 0x20, 0xf1, 0xf1, 0xf1, 0x91, 0x30, 0x21, 0x30, 0x31, 0x30, 0x31, 0x20,

    0xf1, 0xf1, 0xf1, 0x91, 0x30, 0x21,

    0x30, 0x31, 0x30, 0x31, 0x20, 0xf1, 0xf1, 0xf1, 0x91, 0xf0, 0x90, 0xf1, 0xf1,

    0xf1, 0x91, 0xf0, 0x90, 0xf1, 0xf1, 0xf1, 0x91, 0xf0, 0x90, 0xf1, 0xf1, 0xf1,

    0x91, 0xf0, 0x90, 0xf1, 0xf1, 0xf1, 0x91, 0xf0, 0x90, 0xf1, 0xf1, 0xf1, 0xd1,

    0x60, 0x31, 0x70, 0xf1, 0xf1, 0xf1, 0xf1, 0x01, 0x60, 0x31, 0x70, 0xf1, 0xf1,

    0xf1, 0xf1, 0x01, 0x60, 0x31, 0x70, 0xf1, 0xf1, 0xf1, 0xf1, 0x01, 0x60, 0x31,

    0x70, 0xf1, 0xf1, 0xf1, 0x81, 0xa0, 0x31, 0xf0, 0x60, 0xf1, 0xf1, 0xd1, 0xa0,

    0x31, 0xf0, 0x60, 0xf1, 0xf1, 0xd1,

    0xa0, 0x31, 0xf0, 0x60, 0xf1, 0xf1, 0xd1, 0xa0, 0x31, 0xf0, 0x60, 0xf1, 0xf1,

    0xd1, 0xb0, 0x21, 0xf0, 0x60, 0xf1, 0xf1, 0xd1, 0xf0, 0xf0, 0x50, 0xf1, 0xf1,

    0xd1, 0xf0, 0xf0, 0x50, 0xf1, 0xf1, 0xd1, 0xf0, 0xf0, 0x50, 0xf1, 0xf1, 0xd1,

    0xf0, 0xf0, 0x50, 0xf1, 0xf1, 0xd1, 0x70, 0x61, 0x70, 0x61, 0x70, 0xf1, 0xf1,

    0xd1, 0x70, 0x61, 0x70, 0x61, 0x70, 0xf1, 0xf1, 0xd1, 0x70, 0x61, 0x70, 0x61,

    0x70, 0xf1, 0xf1, 0xd1, 0x70, 0x61, 0x70, 0x61, 0x70, 0xf1, 0xf1, 0x21, 0x30,

    0x61, 0x70, 0x21, 0xb0, 0x31, 0xa0,

    0xf1, 0xf1, 0x21, 0x30, 0x61, 0x70, 0x21, 0xb0, 0x31, 0xa0, 0xf1, 0xf1, 0x21,

    0x30, 0x61, 0x70, 0x21, 0xb0, 0x31, 0xa0, 0xf1, 0xf1, 0x21, 0x30, 0x61, 0x70,

    0x21, 0xb0, 0x31, 0xa0, 0xf1, 0xf1, 0x21, 0x30, 0x61, 0x70, 0x21, 0xb0, 0x31,

    0xa0, 0xf1, 0xe1, 0x70, 0x61, 0x70, 0x21, 0xb0, 0x31, 0xa0, 0x61, 0x30, 0xf1,

    0x31, 0x70, 0x61, 0x70, 0x21, 0xb0, 0x31, 0xa0, 0x61, 0x30, 0xf1, 0x31, 0x70,

    0x61, 0x70, 0x21, 0xb0, 0x31, 0xa0, 0x61, 0x30, 0xf1, 0x31, 0x70, 0x61, 0x70,

    0x21, 0xb0, 0x31, 0xa0, 0x61, 0x30,

    0xf1, 0x31, 0x70, 0x61, 0xf0, 0xf0, 0x50, 0x61, 0x70, 0xf1, 0x70, 0x61, 0xf0,

    0xf0, 0x50, 0x61, 0x70, 0xf1, 0x70, 0x61, 0xf0, 0xf0, 0x50, 0x61, 0x70, 0xf1,

    0x70, 0x61, 0xf0, 0xf0, 0x50, 0x61, 0x70, 0xf1, 0x31, 0x60, 0x31, 0xf0, 0x20,

    0x71, 0xa0, 0x31, 0xa0, 0xf1, 0x31, 0x60, 0x31, 0xf0, 0x20, 0x71, 0xa0, 0x31,

    0xa0, 0xf1, 0x31, 0x60, 0x31, 0xf0, 0x20, 0x71, 0xa0, 0x31, 0xa0, 0xf1, 0x31,

    0x60, 0x31, 0xf0, 0x20, 0x71, 0xa0, 0x31, 0xa0, 0xf1, 0x31, 0x60, 0x31, 0xf0,

    0x20, 0x71, 0xa0, 0x31, 0xa0, 0xf1,

    0xe1, 0x70, 0x61, 0xf0, 0x60, 0xf1, 0xf1, 0xd1, 0x70, 0x61, 0xf0, 0x60, 0xf1,

    0xf1, 0xd1, 0x70, 0x61, 0xf0, 0x60, 0xf1, 0xf1, 0xd1, 0x70, 0x61, 0xf0, 0x60,

    0xf1, 0xf1, 0xd1, 0xa0, 0xf1, 0xa0, 0xf1, 0xf1, 0xd1, 0xa0, 0xf1, 0xa0, 0xf1,

    0xf1, 0xd1, 0xa0, 0xf1, 0xa0, 0xf1, 0xf1, 0xd1, 0xa0, 0xf1, 0xa0, 0xf1, 0xf1,

    0xd1, 0xf0, 0xf0, 0x50, 0xf1, 0xf1, 0xd1, 0xf0, 0xf0, 0x50, 0xf1, 0xf1, 0xd1,

    0xf0, 0xf0, 0x50, 0xf1, 0xf1, 0xd1, 0xf0, 0xf0, 0x50, 0xf1, 0xf1, 0xd1, 0xf0,

    0xf0, 0x50, 0xf1, 0xf1, 0xf1, 0xf1,

    0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,

    0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0x51, 0x60, 0x71, 0x60, 0xf1, 0xf1,

    0xf1, 0xd1, 0x60, 0x71, 0x60, 0xf1, 0xf1, 0xf1, 0xd1, 0x60, 0x71, 0x60, 0xf1,

    0xf1, 0xf1, 0xd1, 0x60, 0x71, 0x60, 0xf1, 0xf1, 0xf1, 0xd1, 0x60, 0x71, 0x60,

    0xf1, 0xf1, 0xf1, 0x91, 0xa0, 0x71, 0xa0, 0xf1, 0xf1, 0xf1, 0x51, 0xa0, 0x71,

  • Dhruva Koley & Ruben Vargas ECEN 2020 12/12/16

    37

    0xa0, 0xf1, 0xf1, 0xf1, 0x51, 0xa0, 0x71, 0xa0, 0xf1, 0xf1, 0xf1, 0x51, 0xa0,

    0x71, 0xa0, 0xf1, 0xf1, 0xf1, 0xf1,

    0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,

    0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,

    0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xc1,

    }; static const unsigned long palette_Poly_Girl1BPP_COMP_RLE4[] =

    {

    0xFF69B4, 0x000000

    }; const tImage Poly_Girl1BPP_COMP_RLE4 =

    {

    IMAGE_FMT_1BPP_COMP_RLE4,

    84,

    84,

    2,

    palette_Poly_Girl1BPP_COMP_RLE4,

    pixel_Poly_Girl1BPP_COMP_RLE4,

    }; static const unsigned char pixel_Hastur1BPP_COMP_RLE4[] =

    {

    0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0x80, 0x21, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0x90,

    0x11, 0xc0, 0x01, 0xf0, 0xf0, 0xf0, 0xf0, 0xc0, 0x01, 0xf0, 0xf0, 0xf0, 0xe0,

    0x01, 0xf0, 0xf0, 0x80, 0x01, 0xf0, 0xf0, 0xf0, 0x00, 0x01, 0x30, 0x01, 0xc0,

    0x01, 0xf0, 0x10, 0x01, 0x20, 0x01, 0x90, 0x01, 0xf0, 0xf0, 0xf0, 0x01, 0xf0,

    0xa0, 0x11, 0xc0, 0x01, 0xf0, 0xf0, 0x00, 0x01, 0xf0, 0xf0, 0xf0, 0x40, 0x01,

    0xf0, 0x90, 0x01, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xa0, 0x01, 0xf0, 0xf0, 0x90,

    0x11, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0x70, 0x31, 0xf0, 0xf0, 0x90, 0x01, 0xd0,

    0x01,

    0x10, 0x11, 0xf0, 0x70, 0x21, 0x00, 0x11, 0xf0, 0xf0, 0x90, 0x01, 0xf0, 0xd0,

    0x61, 0x50, 0x51, 0xf0, 0xf0, 0xf0, 0xf0, 0x90, 0x31, 0x60, 0x61, 0x40, 0x01,

    0xb0, 0x01, 0x10, 0x11, 0x90, 0x01, 0xf0, 0xf0, 0xf1, 0x20, 0x31, 0x00, 0x11,

    0x40, 0x11, 0xa0, 0x01, 0xd0, 0x01, 0xf0, 0xb0, 0xe1, 0x00, 0xc1, 0xf0, 0x10,

    0x01, 0xf0, 0xd0, 0x11, 0xa0, 0x01, 0x50, 0xd1, 0x20, 0x61, 0xf0, 0x11, 0xf0,

    0xf0, 0xf0, 0x80, 0x71, 0x10, 0x21, 0x00, 0x01, 0x00, 0x01, 0x50, 0x21, 0x60,

    0x01, 0xf0, 0x50, 0x01, 0xf0, 0x70, 0x21, 0x90, 0x51, 0x10, 0x61, 0x60, 0x31,

    0x30,

    0x11, 0x50, 0x01, 0xb0, 0x51, 0x80, 0x01, 0x20, 0x01, 0x00, 0x91, 0x40, 0x61,

    0x60, 0x41, 0xa0, 0x11, 0x10, 0x11, 0xf0, 0x21, 0x20, 0x11, 0x20, 0xf1, 0xf1,

    0x61, 0x30, 0x21, 0x00, 0x11, 0x20, 0x01, 0x60, 0x31, 0xc0, 0xf1, 0xf1, 0x01,

    0x30, 0x41, 0x40, 0x01, 0xb0, 0x21, 0x00, 0x31, 0x30, 0x21, 0xf0, 0x30, 0xf1,

    0x51, 0x00, 0x01, 0x00, 0x71, 0xd0, 0x11, 0x40, 0x21, 0x30, 0xd1, 0x20, 0x01,

    0x10, 0x61, 0x10, 0xf1, 0x71, 0x00, 0x01, 0xd0, 0x21, 0x50, 0x11, 0x40, 0x41,

    0x10, 0xf1, 0x21, 0x00, 0x41, 0x30, 0xf1, 0xb1, 0x00, 0x21, 0x90, 0x71, 0x20,

    0x51,

    0x00, 0x11, 0x00, 0x91, 0x00, 0xf1, 0xf1, 0xf1, 0xf1, 0xb1, 0x10, 0x01, 0x00,

    0xf1, 0xf1, 0xc1, 0x20, 0x01, 0x00, 0x11, 0x00, 0xf1, 0x81, 0x00, 0x21, 0x20,

    0x01, 0x00, 0x01, 0x00, 0x11, 0x00, 0xf1, 0x71, 0x00, 0x01, 0x00, 0xf1, 0x01,

    0x00, 0x41, 0x10, 0x01, 0x00, 0xf1, 0x11, 0x30, 0x61, 0x00, 0x01, 0x00, 0x01,

    0x00, 0x21, 0x00, 0x01, 0x00, 0xf1, 0x11, 0x00, 0x61, 0x00, 0x21, 0x00, 0xb1,

    0x90, 0x91, 0x10, 0xe1, 0x00, 0x11, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x20,

    0xe1, 0x10, 0x21, 0x00, 0x01, 0x30, 0x11, 0x00, 0x21, 0x00, 0x61, 0xc0, 0x71,

    0x20,

  • Dhruva Koley & Ruben Vargas ECEN 2020 12/12/16

    38

    0xf1, 0x10, 0x11, 0x10, 0x11, 0x30, 0x11, 0x00, 0x01, 0x00, 0x91, 0x00, 0x11,

    0x40, 0x01, 0x00, 0x31, 0x00, 0xa1, 0xb0, 0x61, 0x00, 0x21, 0x00, 0x01, 0x00,

    0x51, 0x00, 0x91, 0x00, 0x31, 0x20, 0xd1, 0x60, 0x51, 0x00, 0xb1, 0xc0, 0x41,

    0x10, 0xc1, 0x00, 0x81, 0x10, 0x01, 0x00, 0x01, 0x10, 0x01, 0x00, 0xc1, 0x20,

    0x91, 0x00, 0xc1, 0xc0, 0x51, 0x20, 0x31, 0x00, 0x41, 0x00, 0x31, 0x00, 0x01,

    0x00, 0x01, 0x00, 0x01, 0x60, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,

    0x91, 0x00, 0x01, 0x10, 0xf1, 0x11, 0x00, 0x01, 0xd0, 0x01, 0x00, 0x41, 0x00,

    0x11,

    0x20, 0x31, 0x10, 0x51, 0xa0, 0x11, 0x10, 0x01, 0x00, 0xf1, 0x51, 0x10, 0x81,

    0x00, 0x01, 0x40, 0x11, 0x00, 0x31, 0x30, 0x51, 0x20, 0x41, 0x20, 0x61, 0xa0,

    0x11, 0x40, 0xf1, 0x00, 0x11, 0x10, 0x01, 0x00, 0x01, 0x00, 0x51, 0x00, 0x01,

    0x30, 0x51, 0x20, 0x01, 0x50, 0x51, 0x10, 0x11, 0x10, 0x61, 0x00, 0x01, 0xa0,

    0x11, 0x50, 0x71, 0x00, 0x01, 0x20, 0x21, 0x00, 0xb1, 0x00, 0x01, 0x30, 0x11,

    0xf0, 0x00, 0x61, 0x20, 0x51, 0x00, 0x01, 0x90, 0x31, 0x40, 0x71, 0x00, 0x51,

    0x00, 0x31, 0x00, 0x71, 0x00, 0x01, 0x40, 0x01, 0xf0, 0x30, 0x41, 0x10, 0x71,

    0xd0,

    0x01, 0x30, 0x31, 0x00, 0x31, 0x10, 0x01, 0x00, 0x01, 0x00, 0x21, 0x00, 0x91,

    0x00, 0x11, 0xf0, 0x70, 0x21, 0x00, 0x21, 0x20, 0x01, 0x00, 0x31, 0xc0, 0x01,

    0x00, 0x11, 0x30, 0x61, 0x10, 0x01, 0x00, 0x31, 0x00, 0x31, 0x00, 0x41, 0x00,

    0x21, 0xf0, 0xb0, 0x31, 0x30, 0x71, 0x00, 0x01, 0x50, 0x21, 0x90, 0x11, 0x00,

    0x21, 0x00, 0x21, 0x00, 0xa1, 0x00, 0x11, 0xf0, 0xd0, 0x41, 0x40, 0x01, 0x00,

    0x01, 0x00, 0x21, 0x00, 0x01, 0x00, 0x01, 0x20, 0x01, 0x30, 0x01, 0x30, 0x01,

    0x10, 0x51, 0x00, 0x01, 0x10, 0xb1, 0x00, 0x01, 0xf0, 0xf0, 0x31, 0x60, 0x11,

    0x00,

    0x41, 0x20, 0x11, 0x30, 0x01, 0x10, 0x01, 0x00, 0x01, 0x30, 0x11, 0x10, 0xf1,

    0x01, 0x60, 0x01, 0xc0, 0x31, 0xa0, 0x01, 0x90, 0x41, 0x00, 0x01, 0x00, 0x01,

    0x50, 0x01, 0x00, 0x01, 0x00, 0x01, 0x40, 0x91, 0x30, 0x31, 0x00, 0x01, 0xf0,

    0x40, 0x41, 0xb0, 0x01, 0x80, 0x01, 0x00, 0x51, 0x70, 0x11, 0x50, 0x81, 0x40,

    0x51, 0xf0, 0x80, 0x11, 0xb0, 0x21, 0x70, 0x51, 0x80, 0x11, 0x40, 0x61, 0x00,

    0x01, 0x10, 0x11, 0x10, 0x41, 0xf0, 0x80, 0x21, 0xc0, 0x11, 0x50, 0x51, 0x30,

    0x01, 0x40, 0x11, 0x40, 0x51, 0x00, 0x01, 0x00, 0x31, 0x00, 0x41, 0xf0, 0xb0,

    0x11,

    0xd0, 0x11, 0x40, 0x31, 0x30, 0x11, 0x50, 0x01, 0x40, 0x51, 0x00, 0x01, 0x00,

    0x21, 0x00, 0x31, 0x00, 0x01, 0xf0, 0xc0, 0x11, 0xf0, 0x40, 0x21, 0x20, 0x11,

    0x60, 0x11, 0x40, 0x51, 0x10, 0x71, 0x00, 0x01, 0xf0, 0x01, 0xc0, 0x01, 0x20,

    0x21, 0xd0, 0x31, 0x10, 0x01, 0x80, 0x11, 0x40, 0x31, 0x00, 0x01, 0x00, 0xa1,

    0x60, 0x01, 0x60, 0x11, 0xf0, 0x01, 0x00, 0x01, 0x00, 0x01, 0xc0, 0x31, 0x10,

    0x01, 0xf0, 0x01, 0x00, 0x31, 0x00, 0x21, 0x00, 0x01, 0x30, 0x01, 0x60, 0x01,

    0x70, 0x11, 0xf0, 0x00, 0x11, 0x00, 0x11, 0xb0, 0x31, 0x10, 0x01, 0x80, 0x01,

    0x50,

    0x51, 0x10, 0x21, 0x20, 0x21, 0x60, 0x01, 0x80, 0x01, 0xf0, 0x20, 0x01, 0x00,

    0x51, 0x30, 0x01, 0x00, 0x41, 0x10, 0x01, 0x40, 0x01, 0x30, 0x01, 0x60, 0x41,

    0x10, 0x61, 0x70, 0x01, 0x80, 0x01, 0xf0, 0x30, 0x71, 0x00, 0xa1, 0x20, 0x01,

    0x00, 0x11, 0xb0, 0x21, 0x00, 0x01, 0x40, 0x21, 0x80, 0x01, 0x80, 0x01, 0xf0,

    0x50, 0x51, 0x80, 0x61, 0x00, 0x21, 0xa0, 0x21, 0x00, 0x01, 0x30, 0x11, 0xa0,

    0x11, 0x70, 0x01, 0xf0, 0x50, 0x11, 0x00, 0x01, 0xc0, 0x01, 0x00, 0x01, 0x20,

    0x31, 0x00, 0x01, 0x70, 0x51, 0x10, 0x01, 0x40, 0x01, 0x60, 0x01, 0x90, 0x01,

    0xd0,

    0x11, 0x50, 0x11, 0x30, 0x61, 0x20, 0x11, 0x40, 0x01, 0x00, 0x01, 0x00, 0x11,

    0x50, 0x11, 0x20, 0x01, 0x00, 0x11, 0x40, 0x11, 0x10, 0x01, 0x40, 0x01, 0x80,

    0x01, 0xf0, 0x01, 0x40, 0x01, 0x00, 0x01, 0x20, 0x01, 0x00, 0x21, 0x00, 0x01,

    0x00, 0x01, 0x10, 0x31, 0x00, 0x11, 0x80, 0x21, 0xb0, 0x21, 0x00, 0x01, 0x50,

    0x01, 0x80, 0x11, 0xf0, 0x01, 0x30, 0x01, 0x00, 0x11, 0x00, 0x81, 0x00, 0x01,

    0x00, 0x41, 0x60, 0x61, 0x50, 0x01, 0x30, 0x41, 0x60, 0x11, 0x80, 0x01, 0x90,

    0x01, 0x40, 0x11, 0xc0, 0x51, 0x00, 0x11, 0x00, 0x01, 0x20, 0x61, 0x00, 0x01,

    0x00,

  • Dhruva Koley & Ruben Vargas ECEN 2020 12/12/16

    39

    0x11, 0x40, 0x11, 0x20, 0x11, 0x00, 0x01,