Permalink
Browse files

Initial Commit

  • Loading branch information...
0 parents commit 0995faf817d96807a1b15fdadf46835e33cb95e9 Mike Szczys committed Dec 10, 2012
Showing with 1,503 additions and 0 deletions.
  1. +179 −0 KS0108-Stellaris.c
  2. +105 −0 KS0108.c
  3. +26 −0 KS0108.h
  4. +105 −0 LM4F.ld
  5. +294 −0 LM4F_startup.c
  6. +134 −0 Makefile
  7. +103 −0 font5x8.h
  8. +30 −0 main.c
  9. +13 −0 readme.md
  10. +514 −0 skull.h
179 KS0108-Stellaris.c
@@ -0,0 +1,179 @@
+//-------------------------------------------------------------------------------------------------
+// Universal KS0108 driver library
+// Atmel AVR MCU low-level driver.
+// (c) Rados�aw Kwiecie�, radek@dxp.pl
+//-------------------------------------------------------------------------------------------------
+#include "inc/hw_types.h"
+#include "inc/hw_memmap.h"
+#include "driverlib/sysctl.h"
+#include "driverlib/gpio.h"
+
+#define KS0108_DATA_PERIPH SYSCTL_PERIPH_GPIOB
+#define KS0108_DATA_PORT GPIO_PORTB_BASE
+
+#define KS0108_CTRL_PERIPH SYSCTL_PERIPH_GPIOE
+#define KS0108_CTRL_PORT GPIO_PORTE_BASE
+
+#define KS0108_RS GPIO_PIN_0
+#define KS0108_RW GPIO_PIN_1
+#define KS0108_EN GPIO_PIN_2
+
+#define KS0108_CS1 GPIO_PIN_3
+#define KS0108_CS2 GPIO_PIN_4
+#define KS0108_CS3 GPIO_PIN_4
+
+extern unsigned char screen_x;
+extern unsigned char screen_y;
+
+#define DISPLAY_STATUS_BUSY 0x80
+
+//-------------------------------------------------------------------------------------------------
+// Delay function
+//-------------------------------------------------------------------------------------------------
+void GLCD_Delay(void)
+{
+ SysCtlDelay(450);
+}
+//-------------------------------------------------------------------------------------------------
+// Enalbe Controller (0-2)
+//-------------------------------------------------------------------------------------------------
+void GLCD_EnableController(unsigned char controller)
+{
+switch(controller){
+ case 0 : GPIOPinWrite(KS0108_CTRL_PORT, KS0108_CS1, 0x00); break;
+ case 1 : GPIOPinWrite(KS0108_CTRL_PORT, KS0108_CS2, 0x00); break;
+ case 2 : GPIOPinWrite(KS0108_CTRL_PORT, KS0108_CS3, 0x00); break;
+ }
+}
+//-------------------------------------------------------------------------------------------------
+// Disable Controller (0-2)
+//-------------------------------------------------------------------------------------------------
+void GLCD_DisableController(unsigned char controller)
+{
+switch(controller){
+ case 0 : GPIOPinWrite(KS0108_CTRL_PORT, KS0108_CS1, 0xFF); GLCD_Delay(); break;
+ case 1 : GPIOPinWrite(KS0108_CTRL_PORT, KS0108_CS2, 0xFF); GLCD_Delay(); break;
+ case 2 : GPIOPinWrite(KS0108_CTRL_PORT, KS0108_CS3, 0xFF); GLCD_Delay(); break;
+ }
+}
+//-------------------------------------------------------------------------------------------------
+// Read Status from specified controller (0-2)
+//-------------------------------------------------------------------------------------------------
+unsigned char GLCD_ReadStatus(unsigned char controller)
+{
+ unsigned char status;
+ GPIOPinTypeGPIOInput(KS0108_DATA_PORT, 0xFF); //Set data pins as inputs
+ GPIOPinWrite(KS0108_CTRL_PORT, KS0108_RW, 0xFF); //Set RW high
+ GPIOPinWrite(KS0108_CTRL_PORT, KS0108_RS, 0xFF); //Set RS low
+ GLCD_EnableController(controller);
+ GPIOPinWrite(KS0108_CTRL_PORT, KS0108_EN, 0xFF); //Enable pin high
+ GLCD_Delay();
+ status = GPIOPinRead(KS0108_DATA_PORT, 0xFF); //Read status from data port
+ GPIOPinWrite(KS0108_CTRL_PORT, KS0108_EN, 0x00); //Enable pin low
+ GLCD_Delay();
+ GLCD_DisableController(controller);
+ return status;
+}
+//-------------------------------------------------------------------------------------------------
+// Write command to specified controller
+//-------------------------------------------------------------------------------------------------
+void GLCD_WriteCommand(unsigned char commandToWrite, unsigned char controller)
+{
+ //while(GLCD_ReadStatus(controller)&DISPLAY_STATUS_BUSY);
+ GPIOPinTypeGPIOOutput(KS0108_DATA_PORT, 0xFF); //Data pins as outputs
+ GPIOPinWrite(KS0108_CTRL_PORT, KS0108_RS | KS0108_RW, 0x00); //RS and RW Low
+ GLCD_EnableController(controller);
+ GPIOPinWrite(KS0108_DATA_PORT, 0xFF, commandToWrite); //Write command to port
+ GPIOPinWrite(KS0108_CTRL_PORT, KS0108_EN, 0xFF); //Enable pin high
+ GLCD_Delay();
+ GPIOPinWrite(KS0108_CTRL_PORT, KS0108_EN, 0x00); //Enable pin low
+ GLCD_Delay();
+ GLCD_DisableController(controller);
+}
+//-------------------------------------------------------------------------------------------------
+// Read data from current position
+//-------------------------------------------------------------------------------------------------
+unsigned char GLCD_ReadData(void)
+{
+ unsigned char data;
+ //while(GLCD_ReadStatus(screen_x / 64)&DISPLAY_STATUS_BUSY);
+ GPIOPinTypeGPIOInput(KS0108_DATA_PORT, 0xFF); //Set data pins as inputs
+ GPIOPinWrite(KS0108_CTRL_PORT, KS0108_RS | KS0108_RW, 0xFF); //Set RS and RW high
+ GLCD_EnableController(screen_x / 64);
+ //GLCD_Delay(); //This was commented out in the original code
+ GPIOPinWrite(KS0108_CTRL_PORT, KS0108_EN, 0xFF); //Enable pin high
+ GLCD_Delay();
+ data = GPIOPinRead(KS0108_DATA_PORT, 0xFF); //Read data from data port
+ GPIOPinWrite(KS0108_CTRL_PORT, KS0108_EN, 0x00); //Enable pin low
+ GLCD_DisableController(screen_x / 64);
+ screen_x++;
+ return data;
+}
+//-------------------------------------------------------------------------------------------------
+// Write data to current position
+//-------------------------------------------------------------------------------------------------
+void GLCD_WriteData(unsigned char dataToWrite)
+{
+ //while(GLCD_ReadStatus(screen_x / 64)&DISPLAY_STATUS_BUSY);
+ GPIOPinTypeGPIOOutput(KS0108_DATA_PORT, 0xFF); //Data pins as outputs
+ GPIOPinWrite(KS0108_CTRL_PORT, KS0108_RW, 0x00); //Set RW low
+ GPIOPinWrite(KS0108_CTRL_PORT, KS0108_RS, 0xFF); //Set RS high
+ GPIOPinWrite(KS0108_DATA_PORT, 0xFF, dataToWrite); //Write data to port
+ GLCD_EnableController(screen_x / 64);
+ GPIOPinWrite(KS0108_CTRL_PORT, KS0108_EN, 0xFF); //Enable pin high
+ GLCD_Delay();
+ GPIOPinWrite(KS0108_CTRL_PORT, KS0108_EN, 0x00); //Enable pin low
+ GLCD_Delay();
+ GLCD_DisableController(screen_x / 64);
+ screen_x++;
+}
+//-------------------------------------------------------------------------------------------------
+//
+//-------------------------------------------------------------------------------------------------
+void GLCD_InitalizePorts(void)
+{
+ //Enable peripheral clocks
+ SysCtlPeripheralEnable(KS0108_DATA_PERIPH);
+ SysCtlPeripheralEnable(KS0108_CTRL_PERIPH);
+
+ //Set control pins as outputs
+ GPIOPinTypeGPIOOutput(KS0108_CTRL_PORT, KS0108_RS | KS0108_RW | KS0108_EN | KS0108_CS1 | KS0108_CS2 | KS0108_CS3);
+
+ //Set CS pins high
+ GPIOPinWrite(KS0108_CTRL_PORT, KS0108_CS1 | KS0108_CS2 | KS0108_CS3, 0xFF);
+}
+
+void GLCD_Test(void){
+ GPIOPinTypeGPIOOutput(KS0108_DATA_PORT, 0xFF); //Data pins as outputs
+ GPIOPinWrite(KS0108_CTRL_PORT, KS0108_CS1 | KS0108_RS | KS0108_RW, 0x00); //Set RS and RW low
+ GPIOPinWrite(KS0108_DATA_PORT, 0xFF, 0b01000000); //Y address 0
+ GPIOPinWrite(KS0108_CTRL_PORT, KS0108_EN, 0xFF); //Enable pin high
+ GLCD_Delay();
+ GPIOPinWrite(KS0108_CTRL_PORT, KS0108_EN, 0x00); //Enable pin low
+ GLCD_Delay();
+ GPIOPinWrite(KS0108_DATA_PORT, 0xFF, 0b10111000); //X address 0
+ GPIOPinWrite(KS0108_CTRL_PORT, KS0108_EN, 0xFF); //Enable pin high
+ GLCD_Delay();
+ GPIOPinWrite(KS0108_CTRL_PORT, KS0108_EN, 0x00); //Enable pin low
+ GLCD_Delay();
+ GPIOPinWrite(KS0108_CTRL_PORT, KS0108_RS, 0xFF); //Set RS high
+ for (unsigned char i=0; i<8; i++) {
+ GPIOPinWrite(KS0108_DATA_PORT, 0xFF, 0b10101010);
+ GPIOPinWrite(KS0108_CTRL_PORT, KS0108_EN, 0xFF); //Enable pin high
+ GLCD_Delay();
+ GPIOPinWrite(KS0108_CTRL_PORT, KS0108_EN, 0x00); //Enable pin low
+ }
+
+}
+//-------------------------------------------------------------------------------------------------
+//
+//-------------------------------------------------------------------------------------------------
+unsigned char GLCD_ReadByteFromROMMemory(char * ptr)
+{
+ //FIXME: This needs to be ported for ARM
+ //return pgm_read_byte(ptr);
+ return 255;
+}
+//-------------------------------------------------------------------------------------------------
+//
+//-------------------------------------------------------------------------------------------------
105 KS0108.c
@@ -0,0 +1,105 @@
+//-------------------------------------------------------------------------------------------------
+// Universal KS0108 driver library
+// (c) Rados³aw Kwiecieñ, radek@dxp.pl
+//-------------------------------------------------------------------------------------------------
+#include "KS0108.h"
+#include "font5x8.h"
+//-------------------------------------------------------------------------------------------------
+extern void GLCD_InitalizePorts(void);
+//-------------------------------------------------------------------------------------------------
+unsigned char screen_x = 0, screen_y = 0;
+//-------------------------------------------------------------------------------------------------
+//
+//-------------------------------------------------------------------------------------------------
+void GLCD_Initalize(void)
+{
+unsigned char i;
+GLCD_InitalizePorts();
+for(i = 0; i < 3; i++)
+ GLCD_WriteCommand((DISPLAY_ON_CMD | ON), i);
+}
+//-------------------------------------------------------------------------------------------------
+//
+//-------------------------------------------------------------------------------------------------
+void GLCD_GoTo(unsigned char x, unsigned char y)
+{
+unsigned char i;
+screen_x = x;
+screen_y = y;
+
+for(i = 0; i < KS0108_SCREEN_WIDTH/64; i++)
+ {
+ GLCD_WriteCommand(DISPLAY_SET_Y | 0,i);
+ GLCD_WriteCommand(DISPLAY_SET_X | y,i);
+ GLCD_WriteCommand(DISPLAY_START_LINE | 0,i);
+ }
+GLCD_WriteCommand(DISPLAY_SET_Y | (x % 64), (x / 64));
+GLCD_WriteCommand(DISPLAY_SET_X | y, (x / 64));
+}
+//-------------------------------------------------------------------------------------------------
+//
+//-------------------------------------------------------------------------------------------------
+void GLCD_ClearScreen(void)
+{
+unsigned char i, j;
+for(j = 0; j < KS0108_SCREEN_HEIGHT/8; j++)
+ {
+ GLCD_GoTo(0,j);
+ for(i = 0; i < KS0108_SCREEN_WIDTH; i++)
+ GLCD_WriteData(0x00);
+ }
+}
+//-------------------------------------------------------------------------------------------------
+//
+//-------------------------------------------------------------------------------------------------
+void GLCD_WriteChar(char charToWrite)
+{
+int i;
+charToWrite -= 32;
+for(i = 0; i < 5; i++)
+ GLCD_WriteData(GLCD_ReadByteFromROMMemory((char *)((int)font5x8 + (5 * charToWrite) + i)));
+GLCD_WriteData(0x00);
+}
+//-------------------------------------------------------------------------------------------------
+//
+//-------------------------------------------------------------------------------------------------
+void GLCD_WriteString(char * stringToWrite)
+{
+while(*stringToWrite)
+ GLCD_WriteChar(*stringToWrite++);
+}
+//-------------------------------------------------------------------------------------------------
+//
+//-------------------------------------------------------------------------------------------------
+void GLCD_SetPixel(unsigned char x, unsigned char y, unsigned char color)
+{
+unsigned char tmp;
+GLCD_GoTo(x, (y / 8));
+tmp = GLCD_ReadData();
+GLCD_GoTo(x, (y / 8));
+tmp = GLCD_ReadData();
+GLCD_GoTo(x, (y / 8));
+tmp |= (1 << (y % 8));
+GLCD_WriteData(tmp);
+}
+//-------------------------------------------------------------------------------------------------
+//
+//-------------------------------------------------------------------------------------------------
+void GLCD_Bitmap(char * bmp, unsigned char x, unsigned char y, unsigned char dx, unsigned char dy)
+{
+unsigned char i, j;
+for(j = 0; j < dy / 8; j++)
+ {
+ GLCD_GoTo(x,y + j);
+ for(i = 0; i < dx; i++)
+ GLCD_WriteData(GLCD_ReadByteFromROMMemory(bmp++));
+ }
+}
+//-------------------------------------------------------------------------------------------------
+//
+//-------------------------------------------------------------------------------------------------
+
+
+
+
+
26 KS0108.h
@@ -0,0 +1,26 @@
+
+
+#define KS0108_SCREEN_WIDTH 128
+#define KS0108_SCREEN_HEIGHT 64
+
+
+#define DISPLAY_SET_Y 0x40
+#define DISPLAY_SET_X 0xB8
+#define DISPLAY_START_LINE 0xC0
+#define DISPLAY_ON_CMD 0x3E
+ #define ON 0x01
+ #define OFF 0x00
+#define DISPLAY_STATUS_BUSY 0x80
+
+void GLCD_Initalize(void);
+void GLCD_WriteData(unsigned char);
+void GLCD_WriteCommand(unsigned char, unsigned char);
+void GLCD_ClearScreen(void);
+void GLCD_GoTo(unsigned char, unsigned char);
+void GLCD_WriteString(char *);
+unsigned char GLCD_ReadByteFromROMMemory(char *);
+unsigned char GLCD_ReadData(void);
+void GLCD_Bitmap(char *, unsigned char, unsigned char, unsigned char, unsigned char);
+
+
+
105 LM4F.ld
@@ -0,0 +1,105 @@
+/*
+* Copyright (c) 2012, Mauro Scomparin
+* All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without
+* modification, are permitted provided that the following conditions are met:
+* * Redistributions of source code must retain the above copyright
+* notice, this list of conditions and the following disclaimer.
+* * Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions and the following disclaimer in the
+* documentation and/or other materials provided with the distribution.
+* * Neither the name of Mauro Scomparin nor the
+* names of its contributors may be used to endorse or promote products
+* derived from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY Mauro Scomparin ``AS IS'' AND ANY
+* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+* DISCLAIMED. IN NO EVENT SHALL Mauro Scomparin BE LIABLE FOR ANY
+* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* File: LM4F.ld.
+* Author: Mauro Scomparin <http://scompoprojects.worpress.com>.
+* Version: 1.0.0.
+* Description: Linker description file for LM4FXXX microcontrollers.
+*/
+
+
+/*
+* Memory definition:
+* FLASH: start point 0x00, lenght 0x40000.
+* SRAM: start point 0x20000000 length 0x8000.
+* STACK: start point 0x20007FFF lenght 0x0.
+*/
+MEMORY
+{
+ FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00040000
+ RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00008000
+ STACK (rwx) : ORIGIN = 0x20007FFF , LENGTH = 0x00000000
+}
+
+/*
+* Sections definitions:
+*
+* .text - machine instructions.
+* .data - initialized data defined in the program.
+* .bss - un-initialized global and static variables (to be initialized to 0 before starting main).
+* .stack - just contains the pointer to the stack end at the right place.
+*/
+SECTIONS
+{
+ /* This section it's the code, containing the NVIC Vector table that must start at 0x0
+ * Look at the LM4F120H5QR datasheet for details. (Table 2-8. Exception Types)
+ */
+ .text :
+ {
+ /*_start_text = .; /* This is an index to the beginning of .text segment. */
+ KEEP(*(.nvic_table)) /* I should keep the NVIC ISR Table because it's needed by the processor to start. */
+ *(.text.*) /* This contains the code after the ISR table. */
+ *(.rodata.*) /* Read only data. */
+ _end_text = .; /* This is an index to the end of .text segment. */
+ }>FLASH
+
+ /*
+ * .data segment must be placed in RAM but it's originally stored in FLASH
+ * So I set the data segment in ram, but I specify the load address with the AT
+ * keyword to set that right after the .text section.
+ * (Look at the LD documentation. (Optional Section Attributes))
+ * Thanks https://github.com/utzig for the hints!
+ */
+ .data :
+ {
+ _start_data = .; /* An index to the beginning of .data segment. */
+ *(vtable) /* vtable should be the volatile data I guess*/
+ *(.data.*) /* I should put there all my initialized data of my program. */
+ _end_data = .; /* And another index to the end of .data segment. */
+ }>RAM AT >FLASH
+
+
+ /*
+ * .bss contains the unitialized variables and must be set as 0x0 during runtime.
+ * It should be loaded in RAM and particula care should be taken initializing them in the startup file.
+ */
+ .bss :
+ {
+ _start_bss = .; /* This is an index to the beginning of .bss segment. */
+ *(.bss.*) /* The un-initialized data should go there. */
+ *(COMMON) /* All the other stuff should be put there */
+ _end_bss = .; /* End index for .bss segment */
+ }>RAM
+
+ /*
+ * .stack contains nothing, but I use it to set the first vector item (SP R13).
+ */
+ .stack :
+ {
+ _stack_top = .; /* An index to the end of the stack */
+ }>STACK
+
+}
294 LM4F_startup.c
@@ -0,0 +1,294 @@
+/*
+* Copyright (c) 2012, Mauro Scomparin
+* All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without
+* modification, are permitted provided that the following conditions are met:
+* * Redistributions of source code must retain the above copyright
+* notice, this list of conditions and the following disclaimer.
+* * Redistributions in binary form must reproduce the above copyright
+* notice, this list of conditions and the following disclaimer in the
+* documentation and/or other materials provided with the distribution.
+* * Neither the name of Mauro Scomparin nor the
+* names of its contributors may be used to endorse or promote products
+* derived from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY Mauro Scomparin ``AS IS'' AND ANY
+* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+* DISCLAIMED. IN NO EVENT SHALL Mauro Scomparin BE LIABLE FOR ANY
+* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* File: LM4F_startup.c.
+* Author: Mauro Scomparin <http://scompoprojects.worpress.com>.
+* Version: 1.0.0.
+* Description: LM4F120H5QR startup code.
+*/
+
+//-----------------------------------------------------------------------------
+// Functions declarations
+//-----------------------------------------------------------------------------
+
+// Main should be defined on your main file so it's extern.
+extern int main(void);
+// rst_handler contains the code to run on reset.
+void rst_handler(void);
+// nmi_handler it's the code for an non maskerable interrupt.
+void nmi_handler(void);
+// this is just the default handler.
+void empty_def_handler(void);
+// this is the code for an hard fault.
+void hardfault_handler(void);
+
+//-----------------------------------------------------------------------------
+// Variables declarations
+//-----------------------------------------------------------------------------
+
+// defined by the linker it's the stack top variable (End of ram)
+extern unsigned long _stack_top;
+// defined by the liker, this are just start and end marker for each section.
+// .text (code)
+extern unsigned long _start_text;
+extern unsigned long _end_text;
+// .data (data to be copied on ram)
+extern unsigned long _start_data;
+extern unsigned long _end_data;
+// .bss (uninitialized data to set to 0);
+extern unsigned long _start_bss;
+extern unsigned long _end_bss;
+
+// NVIC ISR table
+// the funny looking void(* myvectors[])(void) basically it's a way to make cc accept an array of function pointers.
+__attribute__ ((section(".nvic_table")))
+void(* myvectors[])(void) = {
+ // This are the fixed priority interrupts and the stack pointer loaded at startup at R13 (SP).
+ // VECTOR N (Check Datasheet)
+ // here the compiler it's boring.. have to figure that out
+ (void (*)) &_stack_top,
+ // stack pointer should be
+ // placed here at startup. 0
+ rst_handler, // code entry point 1
+ nmi_handler, // NMI handler. 2
+ hardfault_handler, // hard fault handler. 3
+ // Configurable priority interruts handler start here.
+ empty_def_handler, // Memory Management Fault 4
+ empty_def_handler, // Bus Fault 5
+ empty_def_handler, // Usage Fault 6
+ 0, // Reserved 7
+ 0, // Reserved 8
+ 0, // Reserved 9
+ 0, // Reserved 10
+ empty_def_handler, // SV call 11
+ empty_def_handler, // Debug monitor 12
+ 0, // Reserved 13
+ empty_def_handler, // PendSV 14
+ empty_def_handler, // SysTick 15
+ // Peripherial interrupts start here.
+ empty_def_handler, // GPIO Port A 16
+ empty_def_handler, // GPIO Port B 17
+ empty_def_handler, // GPIO Port C 18
+ empty_def_handler, // GPIO Port D 19
+ empty_def_handler, // GPIO Port E 20
+ empty_def_handler, // UART 0 21
+ empty_def_handler, // UART 1 22
+ empty_def_handler, // SSI 0 23
+ empty_def_handler, // I2C 0 24
+ 0, // Reserved 25
+ 0, // Reserved 26
+ 0, // Reserved 27
+ 0, // Reserved 28
+ 0, // Reserved 29
+ empty_def_handler, // ADC 0 Seq 0 30
+ empty_def_handler, // ADC 0 Seq 1 31
+ empty_def_handler, // ADC 0 Seq 2 32
+ empty_def_handler, // ADC 0 Seq 3 33
+ empty_def_handler, // WDT 0 and 1 34
+ empty_def_handler, // 16/32 bit timer 0 A 35
+ empty_def_handler, // 16/32 bit timer 0 B 36
+ empty_def_handler, // 16/32 bit timer 1 A 37
+ empty_def_handler, // 16/32 bit timer 1 B 38
+ empty_def_handler, // 16/32 bit timer 2 A 39
+ empty_def_handler, // 16/32 bit timer 2 B 40
+ empty_def_handler, // Analog comparator 0 41
+ empty_def_handler, // Analog comparator 1 42
+ 0, // Reserved 43
+ empty_def_handler, // System control 44
+ empty_def_handler, // Flash + EEPROM control 45
+ empty_def_handler, // GPIO Port F 46
+ 0, // Reserved 47
+ 0, // Reserved 48
+ empty_def_handler, // UART 2 49
+ empty_def_handler, // SSI 1 50
+ empty_def_handler, // 16/32 bit timer 3 A 51
+ empty_def_handler, // 16/32 bit timer 3 B 52
+ empty_def_handler, // I2C 1 53
+ 0, // Reserved 54
+ empty_def_handler, // CAN 0 55
+ 0, // Reserved 56
+ 0, // Reserved 57
+ 0, // Reserved 58
+ empty_def_handler, // Hibernation module 59
+ empty_def_handler, // USB 60
+ 0, // Reserved 61
+ empty_def_handler, // UDMA SW 62
+ empty_def_handler, // UDMA Error 63
+ empty_def_handler, // ADC 1 Seq 0 64
+ empty_def_handler, // ADC 1 Seq 1 65
+ empty_def_handler, // ADC 1 Seq 2 66
+ empty_def_handler, // ADC 1 Seq 3 67
+ 0, // Reserved 68
+ 0, // Reserved 69
+ 0, // Reserved 70
+ 0, // Reserved 71
+ 0, // Reserved 72
+ empty_def_handler, // SSI 2 73
+ empty_def_handler, // SSI 2 74
+ empty_def_handler, // UART 3 75
+ empty_def_handler, // UART 4 76
+ empty_def_handler, // UART 5 77
+ empty_def_handler, // UART 6 78
+ empty_def_handler, // UART 7 79
+ 0, // Reserved 80
+ 0, // Reserved 81
+ 0, // Reserved 82
+ 0, // Reserved 83
+ empty_def_handler, // I2C 2 84
+ empty_def_handler, // I2C 4 85
+ empty_def_handler, // 16/32 bit timer 4 A 86
+ empty_def_handler, // 16/32 bit timer 4 B 87
+ 0, // Reserved 88
+ 0, // Reserved 89
+ 0, // Reserved 90
+ 0, // Reserved 91
+ 0, // Reserved 92
+ 0, // Reserved 93
+ 0, // Reserved 94
+ 0, // Reserved 95
+ 0, // Reserved 96
+ 0, // Reserved 97
+ 0, // Reserved 98
+ 0, // Reserved 99
+ 0, // Reserved 100
+ 0, // Reserved 101
+ 0, // Reserved 102
+ 0, // Reserved 103
+ 0, // Reserved 104
+ 0, // Reserved 105
+ 0, // Reserved 106
+ 0, // Reserved 107
+ empty_def_handler, // 16/32 bit timer 5 A 108
+ empty_def_handler, // 16/32 bit timer 5 B 109
+ empty_def_handler, // 32/64 bit timer 0 A 110
+ empty_def_handler, // 32/64 bit timer 0 B 111
+ empty_def_handler, // 32/64 bit timer 1 A 112
+ empty_def_handler, // 32/64 bit timer 1 B 113
+ empty_def_handler, // 32/64 bit timer 2 A 114
+ empty_def_handler, // 32/64 bit timer 2 B 115
+ empty_def_handler, // 32/64 bit timer 3 A 116
+ empty_def_handler, // 32/64 bit timer 3 B 117
+ empty_def_handler, // 32/64 bit timer 4 A 118
+ empty_def_handler, // 32/64 bit timer 4 B 119
+ empty_def_handler, // 32/64 bit timer 5 A 120
+ empty_def_handler, // 32/64 bit timer 5 B 121
+ empty_def_handler, // System Exception 122
+ 0, // Reserved 123
+ 0, // Reserved 124
+ 0, // Reserved 125
+ 0, // Reserved 126
+ 0, // Reserved 127
+ 0, // Reserved 128
+ 0, // Reserved 129
+ 0, // Reserved 130
+ 0, // Reserved 131
+ 0, // Reserved 132
+ 0, // Reserved 133
+ 0, // Reserved 134
+ 0, // Reserved 135
+ 0, // Reserved 136
+ 0, // Reserved 137
+ 0, // Reserved 138
+ 0, // Reserved 139
+ 0, // Reserved 140
+ 0, // Reserved 141
+ 0, // Reserved 142
+ 0, // Reserved 143
+ 0, // Reserved 144
+ 0, // Reserved 145
+ 0, // Reserved 146
+ 0, // Reserved 147
+ 0, // Reserved 148
+ 0, // Reserved 149
+ 0, // Reserved 150
+ 0, // Reserved 151
+ 0, // Reserved 152
+ 0, // Reserved 153
+ 0 // Reserved 154
+};
+
+//-----------------------------------------------------------------------------
+// Function implementations.
+//-----------------------------------------------------------------------------
+
+/*
+* System on reset code. NVIC 1
+* Here I prepare the memory for the c compiler.
+* The stack pointer should be set at the beginning with the NVIC table already.
+* Copy the .data segment from flash into ram.
+* 0 to the .bss segment
+*/
+
+void rst_handler(void){
+ // Copy the .data section pointers to ram from flash.
+ // Look at LD manual (Optional Section Attributes).
+
+ // source and destination pointers
+ unsigned long *src;
+ unsigned long *dest;
+
+ //this should be good!
+ src = &_end_text;
+ dest = &_start_data;
+
+ //this too
+ while(dest < &_end_data)
+ {
+ *dest++ = *src++;
+ }
+
+ // now set the .bss segment to 0!
+ dest = &_start_bss;
+ while(dest < &_end_bss){
+ *dest++ = 0;
+ }
+
+ // after setting copying .data to ram and "zero-ing" .bss we are good
+ // to start the main() method!
+ // There you go!
+ main();
+}
+
+// NMI Exception handler code NVIC 2
+void nmi_handler(void){
+ // Just loop forever, so if you want to debug the processor it's running.
+ while(1){
+ }
+}
+
+// Hard fault handler code NVIC 3
+void hardfault_handler(void){
+ // Just loop forever, so if you want to debug the processor it's running.
+ while(1){
+ }
+}
+
+// Empty handler used as default.
+void empty_def_handler(void){
+ // Just loop forever, so if you want to debug the processor it's running.
+ while(1){
+ }
+}
134 Makefile
@@ -0,0 +1,134 @@
+# Copyright (c) 2012, Mauro Scomparin
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# * Neither the name of Mauro Scomparin nor the
+# names of its contributors may be used to endorse or promote products
+# derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY Mauro Scomparin ``AS IS'' AND ANY
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL Mauro Scomparin BE LIABLE FOR ANY
+# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+# File: Makefile.
+# Author: Mauro Scomparin <http://scompoprojects.worpress.com>.
+# Version: 1.0.0.
+# Description: Sample makefile.
+
+#==============================================================================
+# Cross compiling toolchain / tools specifications
+#==============================================================================
+
+# Prefix for the arm-eabi-none toolchain.
+# I'm using codesourcery g++ lite compilers available here:
+# http://www.mentor.com/embedded-software/sourcery-tools/sourcery-codebench/editions/lite-edition/
+PREFIX_ARM = arm-none-eabi
+
+# Microcontroller properties.
+PART=LM4F120H5QR
+CPU=-mcpu=cortex-m4
+FPU=-mfpu=fpv4-sp-d16 -mfloat-abi=softfp
+
+# Stellarisware path
+STELLARISWARE_PATH=~/compile/stellarisware/
+
+# Program name definition for ARM GNU C compiler.
+CC = ${PREFIX_ARM}-gcc
+# Program name definition for ARM GNU Linker.
+LD = ${PREFIX_ARM}-ld
+# Program name definition for ARM GNU Object copy.
+CP = ${PREFIX_ARM}-objcopy
+# Program name definition for ARM GNU Object dump.
+OD = ${PREFIX_ARM}-objdump
+
+# Option arguments for C compiler.
+CFLAGS=-mthumb ${CPU} ${FPU} -O0 -ffunction-sections -fdata-sections -MD -std=c99 -Wall -c -g
+# Library stuff passed as flags!
+CFLAGS+= -I ${STELLARISWARE_PATH} -DPART_$(PART) -c -DTARGET_IS_BLIZZARD_RA1
+
+# Flags for LD
+LFLAGS = --gc-sections
+
+# Flags for objcopy
+CPFLAGS = -Obinary
+
+# flags for objectdump
+ODFLAGS = -S
+
+# I want to save the path to libgcc, libc.a and libm.a for linking.
+# I can get them from the gcc frontend, using some options.
+# See gcc documentation
+LIB_GCC_PATH=${shell ${CC} ${CFLAGS} -print-libgcc-file-name}
+LIBC_PATH=${shell ${CC} ${CFLAGS} -print-file-name=libc.a}
+LIBM_PATH=${shell ${CC} ${CFLAGS} -print-file-name=libm.a}
+
+# Uploader tool path.
+# Set a relative or absolute path to the upload tool program.
+# I used this project: https://github.com/utzig/lm4tools
+FLASHER=~/compile/lm4tools/lm4flash/lm4flash
+# Flags for the uploader program.
+FLASHER_FLAGS=
+
+#==============================================================================
+# Project properties
+#==============================================================================
+
+# Project name (W/O .c extension eg. "main")
+PROJECT_NAME = main
+# Startup file name (W/O .c extension eg. "LM4F_startup")
+STARTUP_FILE = startup_gcc #LM4F_startup
+# Linker file name
+LINKER_FILE = LM4F.ld
+
+SRC = $(wildcard *.c)
+OBJS = $(SRC:.c=.o)
+
+#==============================================================================
+# Rules to make the target
+#==============================================================================
+
+#make all rule
+all: $(OBJS) ${PROJECT_NAME}.axf ${PROJECT_NAME}
+
+%.o: %.c
+ @echo
+ @echo Compiling $<...
+ $(CC) -c $(CFLAGS) ${<} -o ${@}
+
+${PROJECT_NAME}.axf: $(OBJS)
+ @echo
+ @echo Making driverlib
+ $(MAKE) -C ${STELLARISWARE_PATH}driverlib/
+ @echo
+ @echo Linking...
+ $(LD) -T $(LINKER_FILE) $(LFLAGS) -o ${PROJECT_NAME}.axf $(OBJS) ${STELLARISWARE_PATH}driverlib/gcc-cm4f/libdriver-cm4f.a $(LIBM_PATH) $(LIBC_PATH) $(LIB_GCC_PATH)
+
+${PROJECT_NAME}: ${PROJECT_NAME}.axf
+ @echo
+ @echo Copying...
+ $(CP) $(CPFLAGS) ${PROJECT_NAME}.axf ${PROJECT_NAME}.bin
+ @echo
+ @echo Creating list file...
+ $(OD) $(ODFLAGS) ${PROJECT_NAME}.axf > ${PROJECT_NAME}.lst
+
+# make clean rule
+clean:
+ rm *.bin *.o *.d *.axf *.lst
+
+# Rule to load the project to the board
+# I added a sudo because it's needed without a rule.
+load:
+ sudo ${FLASHER} ${PROJECT_NAME}.bin ${FLASHER_FLAGS}
103 font5x8.h
@@ -0,0 +1,103 @@
+// font.h
+//
+// Tablica czcionek 5x7
+//
+static const char font5x8[] = {
+0x00, 0x00, 0x00, 0x00, 0x00,// (spacja)
+0x00, 0x00, 0x5F, 0x00, 0x00,// !
+0x00, 0x07, 0x00, 0x07, 0x00,// "
+0x14, 0x7F, 0x14, 0x7F, 0x14,// #
+0x24, 0x2A, 0x7F, 0x2A, 0x12,// $
+0x23, 0x13, 0x08, 0x64, 0x62,// %
+0x36, 0x49, 0x55, 0x22, 0x50,// &
+0x00, 0x05, 0x03, 0x00, 0x00,// '
+0x00, 0x1C, 0x22, 0x41, 0x00,// (
+0x00, 0x41, 0x22, 0x1C, 0x00,// )
+0x08, 0x2A, 0x1C, 0x2A, 0x08,// *
+0x08, 0x08, 0x3E, 0x08, 0x08,// +
+0x00, 0x50, 0x30, 0x00, 0x00,// ,
+0x08, 0x08, 0x08, 0x08, 0x08,// -
+0x00, 0x30, 0x30, 0x00, 0x00,// .
+0x20, 0x10, 0x08, 0x04, 0x02,// /
+0x3E, 0x51, 0x49, 0x45, 0x3E,// 0
+0x00, 0x42, 0x7F, 0x40, 0x00,// 1
+0x42, 0x61, 0x51, 0x49, 0x46,// 2
+0x21, 0x41, 0x45, 0x4B, 0x31,// 3
+0x18, 0x14, 0x12, 0x7F, 0x10,// 4
+0x27, 0x45, 0x45, 0x45, 0x39,// 5
+0x3C, 0x4A, 0x49, 0x49, 0x30,// 6
+0x01, 0x71, 0x09, 0x05, 0x03,// 7
+0x36, 0x49, 0x49, 0x49, 0x36,// 8
+0x06, 0x49, 0x49, 0x29, 0x1E,// 9
+0x00, 0x36, 0x36, 0x00, 0x00,// :
+0x00, 0x56, 0x36, 0x00, 0x00,// ;
+0x00, 0x08, 0x14, 0x22, 0x41,// <
+0x14, 0x14, 0x14, 0x14, 0x14,// =
+0x41, 0x22, 0x14, 0x08, 0x00,// >
+0x02, 0x01, 0x51, 0x09, 0x06,// ?
+0x32, 0x49, 0x79, 0x41, 0x3E,// @
+0x7E, 0x11, 0x11, 0x11, 0x7E,// A
+0x7F, 0x49, 0x49, 0x49, 0x36,// B
+0x3E, 0x41, 0x41, 0x41, 0x22,// C
+0x7F, 0x41, 0x41, 0x22, 0x1C,// D
+0x7F, 0x49, 0x49, 0x49, 0x41,// E
+0x7F, 0x09, 0x09, 0x01, 0x01,// F
+0x3E, 0x41, 0x41, 0x51, 0x32,// G
+0x7F, 0x08, 0x08, 0x08, 0x7F,// H
+0x00, 0x41, 0x7F, 0x41, 0x00,// I
+0x20, 0x40, 0x41, 0x3F, 0x01,// J
+0x7F, 0x08, 0x14, 0x22, 0x41,// K
+0x7F, 0x40, 0x40, 0x40, 0x40,// L
+0x7F, 0x02, 0x04, 0x02, 0x7F,// M
+0x7F, 0x04, 0x08, 0x10, 0x7F,// N
+0x3E, 0x41, 0x41, 0x41, 0x3E,// O
+0x7F, 0x09, 0x09, 0x09, 0x06,// P
+0x3E, 0x41, 0x51, 0x21, 0x5E,// Q
+0x7F, 0x09, 0x19, 0x29, 0x46,// R
+0x46, 0x49, 0x49, 0x49, 0x31,// S
+0x01, 0x01, 0x7F, 0x01, 0x01,// T
+0x3F, 0x40, 0x40, 0x40, 0x3F,// U
+0x1F, 0x20, 0x40, 0x20, 0x1F,// V
+0x7F, 0x20, 0x18, 0x20, 0x7F,// W
+0x63, 0x14, 0x08, 0x14, 0x63,// X
+0x03, 0x04, 0x78, 0x04, 0x03,// Y
+0x61, 0x51, 0x49, 0x45, 0x43,// Z
+0x00, 0x00, 0x7F, 0x41, 0x41,// [
+0x02, 0x04, 0x08, 0x10, 0x20,// "\"
+0x41, 0x41, 0x7F, 0x00, 0x00,// ]
+0x04, 0x02, 0x01, 0x02, 0x04,// ^
+0x40, 0x40, 0x40, 0x40, 0x40,// _
+0x00, 0x01, 0x02, 0x04, 0x00,// `
+0x20, 0x54, 0x54, 0x54, 0x78,// a
+0x7F, 0x48, 0x44, 0x44, 0x38,// b
+0x38, 0x44, 0x44, 0x44, 0x20,// c
+0x38, 0x44, 0x44, 0x48, 0x7F,// d
+0x38, 0x54, 0x54, 0x54, 0x18,// e
+0x08, 0x7E, 0x09, 0x01, 0x02,// f
+0x08, 0x14, 0x54, 0x54, 0x3C,// g
+0x7F, 0x08, 0x04, 0x04, 0x78,// h
+0x00, 0x44, 0x7D, 0x40, 0x00,// i
+0x20, 0x40, 0x44, 0x3D, 0x00,// j
+0x00, 0x7F, 0x10, 0x28, 0x44,// k
+0x00, 0x41, 0x7F, 0x40, 0x00,// l
+0x7C, 0x04, 0x18, 0x04, 0x78,// m
+0x7C, 0x08, 0x04, 0x04, 0x78,// n
+0x38, 0x44, 0x44, 0x44, 0x38,// o
+0x7C, 0x14, 0x14, 0x14, 0x08,// p
+0x08, 0x14, 0x14, 0x18, 0x7C,// q
+0x7C, 0x08, 0x04, 0x04, 0x08,// r
+0x48, 0x54, 0x54, 0x54, 0x20,// s
+0x04, 0x3F, 0x44, 0x40, 0x20,// t
+0x3C, 0x40, 0x40, 0x20, 0x7C,// u
+0x1C, 0x20, 0x40, 0x20, 0x1C,// v
+0x3C, 0x40, 0x30, 0x40, 0x3C,// w
+0x44, 0x28, 0x10, 0x28, 0x44,// x
+0x0C, 0x50, 0x50, 0x50, 0x3C,// y
+0x44, 0x64, 0x54, 0x4C, 0x44,// z
+0x00, 0x08, 0x36, 0x41, 0x00,// {
+0x00, 0x00, 0x7F, 0x00, 0x00,// |
+0x00, 0x41, 0x36, 0x08, 0x00,// }
+0x08, 0x08, 0x2A, 0x1C, 0x08,// ->
+0x08, 0x1C, 0x2A, 0x08, 0x08 // <-
+};
+//
30 main.c
@@ -0,0 +1,30 @@
+#include "inc/hw_memmap.h"
+#include "inc/hw_types.h"
+#include "inc/hw_ints.h"
+#include "driverlib/sysctl.h"
+#include "driverlib/gpio.h"
+#include "KS0108.h"
+
+#include "skull.h"
+
+int main(void)
+{
+ //Setup system clock
+ SysCtlClockSet(SYSCTL_SYSDIV_5|SYSCTL_USE_PLL|SYSCTL_XTAL_16MHZ|SYSCTL_OSC_MAIN);
+
+ GLCD_Initalize();
+ GLCD_ClearScreen();
+
+ //Draw the Hackaday.com skull and wrenches
+ GLCD_GoTo(0,0);
+ for (unsigned char j=0; j<8; j++)
+ {
+ GLCD_GoTo(0,j);
+ for (unsigned char i=0; i<64; i++)
+ {
+ GLCD_WriteData(skull[i+(j*64)]);
+ }
+ }
+
+ while (1) { ; }
+}
13 readme.md
@@ -0,0 +1,13 @@
+# KS0108 Graphic LCD driver for Stellaris Launchpad (ARM)
+
+This is based on the library found here:
+
+[http://en.radzio.dxp.pl/ks0108/](http://en.radzio.dxp.pl/ks0108/)
+
+##Known issues:
+* The read functionality is not used at all
+* I tied RS to ground to get this to work
+* I tied RST to voltage (it is active low)
+
+##More info:
+[Jumptuck.com article](http://jumptuck.com/2012/12/10/level-converter-lets-5v-hardware-33v-arm-chips)
514 skull.h
@@ -0,0 +1,514 @@
+static const char skull[] = {
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00010000,
+ 0b00110000,
+ 0b01110000,
+ 0b01110000,
+ 0b11110000,
+ 0b11100000,
+ 0b11100000,
+ 0b11000000,
+ 0b10000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b10000000,
+ 0b11000000,
+ 0b11100000,
+ 0b11100000,
+ 0b11110000,
+ 0b01110000,
+ 0b01110000,
+ 0b00110000,
+ 0b00010000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00111000,
+ 0b11111000,
+ 0b11110000,
+ 0b11100000,
+ 0b11000000,
+ 0b11000000,
+ 0b11100000,
+ 0b11110000,
+ 0b11111000,
+ 0b11111100,
+ 0b11111111,
+ 0b11111111,
+ 0b11111111,
+ 0b11111111,
+ 0b11111111,
+ 0b11111110,
+ 0b11100000,
+ 0b11000000,
+ 0b10000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b10000000,
+ 0b11000000,
+ 0b11100000,
+ 0b11111110,
+ 0b11111111,
+ 0b11111111,
+ 0b11111111,
+ 0b11111111,
+ 0b11111111,
+ 0b11111100,
+ 0b11111000,
+ 0b11110000,
+ 0b11100000,
+ 0b11000000,
+ 0b11000000,
+ 0b11100000,
+ 0b11110000,
+ 0b11111000,
+ 0b00111000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000001,
+ 0b00000011,
+ 0b00000111,
+ 0b00000111,
+ 0b00000111,
+ 0b00001111,
+ 0b00001111,
+ 0b00000111,
+ 0b00001111,
+ 0b00001111,
+ 0b00011111,
+ 0b00111111,
+ 0b01111111,
+ 0b11111111,
+ 0b11111111,
+ 0b01111111,
+ 0b00111111,
+ 0b10011111,
+ 0b11101110,
+ 0b11110100,
+ 0b11111000,
+ 0b11111000,
+ 0b11111100,
+ 0b11111100,
+ 0b11111110,
+ 0b11111110,
+ 0b11111110,
+ 0b11111110,
+ 0b11111110,
+ 0b11111110,
+ 0b11111110,
+ 0b11111110,
+ 0b11111110,
+ 0b11111110,
+ 0b11111100,
+ 0b11111100,
+ 0b11111000,
+ 0b11111000,
+ 0b11110100,
+ 0b11101110,
+ 0b10011111,
+ 0b00111111,
+ 0b01111111,
+ 0b11111111,
+ 0b11111111,
+ 0b01111111,
+ 0b00111111,
+ 0b00011111,
+ 0b00001111,
+ 0b00001111,
+ 0b00000111,
+ 0b00001111,
+ 0b00001111,
+ 0b00000111,
+ 0b00000111,
+ 0b00000111,
+ 0b00000011,
+ 0b00000001,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b11000001,
+ 0b11111100,
+ 0b11111111,
+ 0b11111111,
+ 0b11111111,
+ 0b00111111,
+ 0b00011111,
+ 0b00011111,
+ 0b00011111,
+ 0b00011111,
+ 0b00011111,
+ 0b00111111,
+ 0b11111111,
+ 0b11111111,
+ 0b11111111,
+ 0b11111111,
+ 0b11111111,
+ 0b11111111,
+ 0b00111111,
+ 0b00011111,
+ 0b00011111,
+ 0b00011111,
+ 0b00011111,
+ 0b00011111,
+ 0b00111111,
+ 0b11111111,
+ 0b11111111,
+ 0b11111111,
+ 0b11111100,
+ 0b11000001,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00001111,
+ 0b01111111,
+ 0b11111111,
+ 0b11111111,
+ 0b11111100,
+ 0b11110000,
+ 0b11100000,
+ 0b11110000,
+ 0b11111000,
+ 0b11111100,
+ 0b11111100,
+ 0b11111110,
+ 0b11111111,
+ 0b11111111,
+ 0b00111111,
+ 0b00111111,
+ 0b11111111,
+ 0b11111111,
+ 0b11111110,
+ 0b11111100,
+ 0b11111100,
+ 0b11111000,
+ 0b11110000,
+ 0b11100000,
+ 0b11110000,
+ 0b11111101,
+ 0b11111111,
+ 0b11111111,
+ 0b01111111,
+ 0b00001111,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b10000000,
+ 0b11000000,
+ 0b11100000,
+ 0b11100000,
+ 0b11100000,
+ 0b11110000,
+ 0b11110000,
+ 0b11100000,
+ 0b11110000,
+ 0b11110000,
+ 0b11111000,
+ 0b11111100,
+ 0b11111110,
+ 0b11111111,
+ 0b11111111,
+ 0b11111100,
+ 0b11110011,
+ 0b11100111,
+ 0b01001111,
+ 0b00011111,
+ 0b11111111,
+ 0b11111111,
+ 0b11111111,
+ 0b11111111,
+ 0b11111111,
+ 0b11111111,
+ 0b11111111,
+ 0b11111111,
+ 0b11111110,
+ 0b11111110,
+ 0b11111111,
+ 0b11111111,
+ 0b11111111,
+ 0b11111111,
+ 0b11111111,
+ 0b11111111,
+ 0b11111111,
+ 0b11111111,
+ 0b00011111,
+ 0b01001111,
+ 0b11100111,
+ 0b11110001,
+ 0b11111100,
+ 0b11111111,
+ 0b11111111,
+ 0b11111110,
+ 0b11111100,
+ 0b11111000,
+ 0b11110000,
+ 0b11110000,
+ 0b11100000,
+ 0b11110000,
+ 0b11110000,
+ 0b11100000,
+ 0b11100000,
+ 0b11100000,
+ 0b11000000,
+ 0b10000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00011100,
+ 0b00011111,
+ 0b00001111,
+ 0b00000111,
+ 0b00000011,
+ 0b00000011,
+ 0b00000111,
+ 0b00001111,
+ 0b00011111,
+ 0b00111111,
+ 0b11111111,
+ 0b11111111,
+ 0b11111111,
+ 0b11111111,
+ 0b11111111,
+ 0b01111111,
+ 0b00000011,
+ 0b00000011,
+ 0b00000001,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000001,
+ 0b00000011,
+ 0b00000111,
+ 0b00000111,
+ 0b00000011,
+ 0b00000001,
+ 0b00000001,
+ 0b00000011,
+ 0b00000111,
+ 0b00000111,
+ 0b00000011,
+ 0b00000001,
+ 0b00000001,
+ 0b00000011,
+ 0b00000111,
+ 0b00000111,
+ 0b00000011,
+ 0b00000001,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000001,
+ 0b00000011,
+ 0b00000011,
+ 0b01111111,
+ 0b11111111,
+ 0b11111111,
+ 0b11111111,
+ 0b11111111,
+ 0b11111111,
+ 0b00111111,
+ 0b00011111,
+ 0b00001111,
+ 0b00000111,
+ 0b00000011,
+ 0b00000011,
+ 0b00000111,
+ 0b00001111,
+ 0b00011111,
+ 0b00011100,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00001000,
+ 0b00001100,
+ 0b00001110,
+ 0b00001111,
+ 0b00001111,
+ 0b00000111,
+ 0b00000111,
+ 0b00000011,
+ 0b00000001,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000001,
+ 0b00000011,
+ 0b00000111,
+ 0b00000111,
+ 0b00001111,
+ 0b00001111,
+ 0b00001110,
+ 0b00001100,
+ 0b00001000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000,
+ 0b00000000
+ };

0 comments on commit 0995faf

Please sign in to comment.