Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

First released revision

  • Loading branch information...
commit 7bdef6f3a6a759900e7ce900ffd04971a1064c9f 1 parent 52c2fa0
kmm authored
View
79 README.md
@@ -1,4 +1,81 @@
SS1306
======
+(a compact plain-C tile graphics library for the SSD1306 OLED display controller)
-Compact plain-C tile graphics library for the SSD1306 OLED display controller
+ ____ ____ ____ _ __ __ ____
+/\ _`\ /\ _`\ /\ _`\ /' \ /'__`\ /'__`\ /'___\
+\ \,\L\_\ \,\L\_\ \ \/\ \/\_, \/\_\L\ \ /\ \/\ \/\ \__/
+ \/_\__ \\/_\__ \\ \ \Small Scale_/_\_<_\ \ \ \ \ \ _``\
+ /\ \L\ \/\ \L\ \ \ \_\ \ \ \ \/\ \L\ \\ \ \_\ \ \ \L\ \
+ \ `\____\ `\____\ \____/ \ \_\ \____/ \ \____/\ \____/
+ \/_____/\/_____/\/___/ \/_/\/___/ \/___/ \/___/
+
+I'll bet some SSD1306 OLED DRIVER ROUTINES would only ENHANCE my EMBEDDED DISPLAY TECHNOLOGY
+
+[!] This is my module; there are many others like it, but this one is mine.
+The module I have is a Chinese import stenciled "Long Qiu" (and not much else).
+Everything happens over a 7-pin SIP pin header labled IF2.
+Your mileage may vary with other modules. I don't have a parallel one, but rewriting oled_write to use
+a parallel bus is a trivial exercise left to the reader.
+
+[!] SSD1306 Display Memory 101
+Buffer is 8kbit (1kB) addressed with two auto-incrementable pointers as 8 pages * (128 columns * 8 bits)
+
+ Display Memory Column
+ Cols 0 -> 127
+ +---------------+ +---+
+ PAGE0 | XCCCC...CCCCC | | 0 |
+R PAGE1 | CCCCC...CCCCC | C =>|...| * 127 => PAGE
+o ... | ............. | | 7 |
+w PAGE6 | CCCCC...CCCCC | +---+
+s PAGE7 | CCCCC...CCCCC | ^--- 8 1-bit pixels per column byte, arranged vertically regardless of addressing mode
+ +---------------+
+ X => Pointer at PAGE 0, COL 0
+
+[!] Fuck yeah tile graphics
+For the purposes of oled_move(), oled_home(), oled_puts(), oled_putc() and most everything else,
+the display is a 16x8 array of 8x8 character cells. Functions expect horizontal addressing mode, other modes
+will make them act wanky. Pixels aren't really addressable; the tiny1634 doesn't have enough RAM for a local framebuffer,
+and the SPI link to the display is one way so there's no read-modify-write using the display frame buffer.
+Given the memory layout I'm reasonably certain the SSD1306 was intended to be driven, perhaps primarily, as a tile graphic display.
+
+[!] Blast from the past
+Character generator table is stored in progmem as "font", and contains 128 cells in
+PETSCII layout (i.e. you can generate them from C64 font files). Included is the canonical 8x8 C64 font,
+with a couple minor changes to make box-drawn digits look better.
+Characters are rotated 90 degrees clockwise (so we don't have to waste AVR cycles flipping tiles).
+The pointy part of an 'A' should point that way -> if you're doing it right.
+It's irritating to go alone, take this: http://www.min.at/prinz/o/software/pixelfont/
+
+[!] Fast as a (LOGO) turtle
+Despite software bit-bang and zero optimization it's more than usably fast on a 9MHz Tiny1634; I'm guessing a full repaint at over 15Hz.
+Much much faster if moving the pointers and updating incrementally (like a terminal!). Add graphic tiles and make the next-gen POPStation.
+
+[!] Cute lil feller
+Basic character display functions are less than 3k compiled, 1k of which is the 128-cell chargen data.
+Chargen can be trimmed to 288ish bytes if only the bare minimum alphanumerics are required.
+
+[!] Zero to Pixels
+> Set pin/port defs in ssd1306-config.h
+> oled_init()
+> oled_clear() // buffer is full of entropy on boot
+> oled_home() // pointers should end up here, but let's make sure
+> oled_puts("POOP") // POOP
+
+[!] We built this city in AVR studio 6 using avr-gcc
+Very little AVR-specific operations outside of the headers and PROGMEM macros, porting to PIC/ARM/HP9000/M88k/etc should be trivial.
+
+[!] See Also
+Ladyada's framebuffer-based arduinolib (c++) SSD1306 implementation: https://github.com/adafruit/Adafruit_SSD1306
+RTFM: https://www.adafruit.com/datasheets/SSD1306.pdf
+
+[!] Legal Fictions
+Original work released under terms of the BSD license.
+Included chargen/font data generated from c64_lower.64c font and used without permission.
+(Chargen data is assumed to be of negligible economic value and public domain/abandoned. Lawyer at me if you got beef.)
+
+-------------------------------------------------------------------------------
+Inspired by tile-based arcade gfx, hacked together by kmm/smallscaleresearch
+April 2013
+Contact: kmm CHR(0x40) rmlabs.net
+-------------------------------------------------------------------------------
View
20 SSD1306demo.atsln
@@ -0,0 +1,20 @@
+
+Microsoft Visual Studio Solution File, Format Version 11.00
+# Atmel Studio Solution File, Format Version 11.00
+Project("{54F91283-7BC4-4236-8FF9-10F437C3AD48}") = "SSD1306demo", "SSD1306demo\SSD1306demo.cproj", "{5A09A9AE-AFEC-45CE-AB9A-F15DBDF0BB75}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|AVR = Debug|AVR
+ Release|AVR = Release|AVR
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {5A09A9AE-AFEC-45CE-AB9A-F15DBDF0BB75}.Debug|AVR.ActiveCfg = Debug|AVR
+ {5A09A9AE-AFEC-45CE-AB9A-F15DBDF0BB75}.Debug|AVR.Build.0 = Debug|AVR
+ {5A09A9AE-AFEC-45CE-AB9A-F15DBDF0BB75}.Release|AVR.ActiveCfg = Release|AVR
+ {5A09A9AE-AFEC-45CE-AB9A-F15DBDF0BB75}.Release|AVR.Build.0 = Release|AVR
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
View
BIN  SSD1306demo.atsuo
Binary file not shown
View
129 SSD1306demo/Debug/Makefile
@@ -0,0 +1,129 @@
+################################################################################
+# Automatically-generated file. Do not edit!
+################################################################################
+
+SHELL := cmd.exe
+RM := rm -rf
+
+USER_OBJS :=
+
+LIBS :=
+PROJ :=
+
+O_SRCS :=
+C_SRCS :=
+S_SRCS :=
+S_UPPER_SRCS :=
+OBJ_SRCS :=
+ASM_SRCS :=
+PREPROCESSING_SRCS :=
+OBJS :=
+OBJS_AS_ARGS :=
+C_DEPS :=
+C_DEPS_AS_ARGS :=
+EXECUTABLES :=
+OUTPUT_FILE_PATH :=
+OUTPUT_FILE_PATH_AS_ARGS :=
+AVR_APP_PATH :=$$$AVR_APP_PATH$$$
+QUOTE := "
+ADDITIONAL_DEPENDENCIES:=
+OUTPUT_FILE_DEP:=
+
+# Every subdirectory with source files must be described here
+SUBDIRS :=
+
+
+# Add inputs and outputs from these tool invocations to the build variables
+C_SRCS += \
+../ss1306.c \
+../SSD1306demo.c
+
+
+PREPROCESSING_SRCS +=
+
+
+ASM_SRCS +=
+
+
+OBJS += \
+ss1306.o \
+SSD1306demo.o
+
+
+OBJS_AS_ARGS += \
+ss1306.o \
+SSD1306demo.o
+
+
+C_DEPS += \
+ss1306.d \
+SSD1306demo.d
+
+
+C_DEPS_AS_ARGS += \
+ss1306.d \
+SSD1306demo.d
+
+
+OUTPUT_FILE_PATH +=SSD1306demo.elf
+
+OUTPUT_FILE_PATH_AS_ARGS +=SSD1306demo.elf
+
+ADDITIONAL_DEPENDENCIES:=
+
+OUTPUT_FILE_DEP:= ./makedep.mk
+
+# AVR32/GNU C Compiler
+
+
+
+
+
+./%.o: .././%.c
+ @echo Building file: $<
+ @echo Invoking: AVR/GNU C Compiler : (AVR_8_bit_GNU_Toolchain_3.4.0_663) 4.6.2
+ $(QUOTE)C:\Program Files (x86)\Atmel\Atmel Studio 6.0\extensions\Atmel\AVRGCC\3.4.0.65\AVRToolchain\bin\avr-gcc.exe$(QUOTE) -funsigned-char -funsigned-bitfields -O1 -fpack-struct -fshort-enums -g2 -Wall -c -std=gnu99 -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" -mmcu=attiny1634 -o"$@" "$<"
+ @echo Finished building: $<
+
+
+
+# AVR32/GNU Preprocessing Assembler
+
+
+
+# AVR32/GNU Assembler
+
+
+
+
+ifneq ($(MAKECMDGOALS),clean)
+ifneq ($(strip $(C_DEPS)),)
+-include $(C_DEPS)
+endif
+endif
+
+# Add inputs and outputs from these tool invocations to the build variables
+
+# All Target
+all: $(OUTPUT_FILE_PATH) $(ADDITIONAL_DEPENDENCIES)
+
+$(OUTPUT_FILE_PATH): $(OBJS) $(USER_OBJS) $(OUTPUT_FILE_DEP)
+ @echo Building target: $@
+ @echo Invoking: AVR/GNU Linker : (AVR_8_bit_GNU_Toolchain_3.4.0_663) 4.6.2
+ $(QUOTE)C:\Program Files (x86)\Atmel\Atmel Studio 6.0\extensions\Atmel\AVRGCC\3.4.0.65\AVRToolchain\bin\avr-gcc.exe$(QUOTE) -o$(OUTPUT_FILE_PATH_AS_ARGS) $(OBJS_AS_ARGS) $(USER_OBJS) $(LIBS) -Wl,-Map="SSD1306demo.map" -Wl,--start-group -Wl,-lm -Wl,--end-group -mmcu=attiny1634
+ @echo Finished building target: $@
+ "C:\Program Files (x86)\Atmel\Atmel Studio 6.0\extensions\Atmel\AVRGCC\3.4.0.65\AVRToolchain\bin\avr-objcopy.exe" -O ihex -R .eeprom -R .fuse -R .lock -R .signature "SSD1306demo.elf" "SSD1306demo.hex"
+ "C:\Program Files (x86)\Atmel\Atmel Studio 6.0\extensions\Atmel\AVRGCC\3.4.0.65\AVRToolchain\bin\avr-objcopy.exe" -j .eeprom --set-section-flags=.eeprom=alloc,load --change-section-lma .eeprom=0 --no-change-warnings -O ihex "SSD1306demo.elf" "SSD1306demo.eep" || exit 0
+ "C:\Program Files (x86)\Atmel\Atmel Studio 6.0\extensions\Atmel\AVRGCC\3.4.0.65\AVRToolchain\bin\avr-objdump.exe" -h -S "SSD1306demo.elf" > "SSD1306demo.lss"
+ "C:\Program Files (x86)\Atmel\Atmel Studio 6.0\extensions\Atmel\AVRGCC\3.4.0.65\AVRToolchain\bin\avr-size.exe" "SSD1306demo.elf"
+
+
+
+
+
+
+# Other Targets
+clean:
+ -$(RM) $(OBJS_AS_ARGS)$(C_DEPS_AS_ARGS) $(EXECUTABLES)
+ rm -rf "SSD1306demo.elf" "SSD1306demo.a" "SSD1306demo.hex" "SSD1306demo.lss" "SSD1306demo.eep" "SSD1306demo.map"
+
View
59 SSD1306demo/Debug/SSD1306demo.d
@@ -0,0 +1,59 @@
+SSD1306demo.d SSD1306demo.o: .././SSD1306demo.c \
+ c:\program\ files\ (x86)\atmel\atmel\ studio\ 6.0\extensions\atmel\avrgcc\3.4.0.65\avrtoolchain\bin\../lib/gcc/avr/4.6.2/../../../../avr/include/avr/io.h \
+ c:\program\ files\ (x86)\atmel\atmel\ studio\ 6.0\extensions\atmel\avrgcc\3.4.0.65\avrtoolchain\bin\../lib/gcc/avr/4.6.2/../../../../avr/include/avr/sfr_defs.h \
+ c:\program\ files\ (x86)\atmel\atmel\ studio\ 6.0\extensions\atmel\avrgcc\3.4.0.65\avrtoolchain\bin\../lib/gcc/avr/4.6.2/../../../../avr/include/inttypes.h \
+ c:\program\ files\ (x86)\atmel\atmel\ studio\ 6.0\extensions\atmel\avrgcc\3.4.0.65\avrtoolchain\bin\../lib/gcc/avr/4.6.2/include/stdint.h \
+ c:\program\ files\ (x86)\atmel\atmel\ studio\ 6.0\extensions\atmel\avrgcc\3.4.0.65\avrtoolchain\bin\../lib/gcc/avr/4.6.2/../../../../avr/include/stdint.h \
+ c:\program\ files\ (x86)\atmel\atmel\ studio\ 6.0\extensions\atmel\avrgcc\3.4.0.65\avrtoolchain\bin\../lib/gcc/avr/4.6.2/../../../../avr/include/avr/iotn1634.h \
+ c:\program\ files\ (x86)\atmel\atmel\ studio\ 6.0\extensions\atmel\avrgcc\3.4.0.65\avrtoolchain\bin\../lib/gcc/avr/4.6.2/../../../../avr/include/avr/portpins.h \
+ c:\program\ files\ (x86)\atmel\atmel\ studio\ 6.0\extensions\atmel\avrgcc\3.4.0.65\avrtoolchain\bin\../lib/gcc/avr/4.6.2/../../../../avr/include/avr/common.h \
+ c:\program\ files\ (x86)\atmel\atmel\ studio\ 6.0\extensions\atmel\avrgcc\3.4.0.65\avrtoolchain\bin\../lib/gcc/avr/4.6.2/../../../../avr/include/avr/version.h \
+ c:\program\ files\ (x86)\atmel\atmel\ studio\ 6.0\extensions\atmel\avrgcc\3.4.0.65\avrtoolchain\bin\../lib/gcc/avr/4.6.2/../../../../avr/include/avr/fuse.h \
+ c:\program\ files\ (x86)\atmel\atmel\ studio\ 6.0\extensions\atmel\avrgcc\3.4.0.65\avrtoolchain\bin\../lib/gcc/avr/4.6.2/../../../../avr/include/avr/lock.h \
+ c:\program\ files\ (x86)\atmel\atmel\ studio\ 6.0\extensions\atmel\avrgcc\3.4.0.65\avrtoolchain\bin\../lib/gcc/avr/4.6.2/../../../../avr/include/util/delay.h \
+ c:\program\ files\ (x86)\atmel\atmel\ studio\ 6.0\extensions\atmel\avrgcc\3.4.0.65\avrtoolchain\bin\../lib/gcc/avr/4.6.2/../../../../avr/include/util/delay_basic.h \
+ c:\program\ files\ (x86)\atmel\atmel\ studio\ 6.0\extensions\atmel\avrgcc\3.4.0.65\avrtoolchain\bin\../lib/gcc/avr/4.6.2/../../../../avr/include/math.h \
+ c:\program\ files\ (x86)\atmel\atmel\ studio\ 6.0\extensions\atmel\avrgcc\3.4.0.65\avrtoolchain\bin\../lib/gcc/avr/4.6.2/../../../../avr/include/avr/pgmspace.h \
+ c:\program\ files\ (x86)\atmel\atmel\ studio\ 6.0\extensions\atmel\avrgcc\3.4.0.65\avrtoolchain\bin\../lib/gcc/avr/4.6.2/include/stddef.h \
+ c:\program\ files\ (x86)\atmel\atmel\ studio\ 6.0\extensions\atmel\avrgcc\3.4.0.65\avrtoolchain\bin\../lib/gcc/avr/4.6.2/../../../../avr/include/stdlib.h \
+ .././ss1306-config.h .././ss1306.h .././nyan.h
+
+c:\program\ files\ (x86)\atmel\atmel\ studio\ 6.0\extensions\atmel\avrgcc\3.4.0.65\avrtoolchain\bin\../lib/gcc/avr/4.6.2/../../../../avr/include/avr/io.h:
+
+c:\program\ files\ (x86)\atmel\atmel\ studio\ 6.0\extensions\atmel\avrgcc\3.4.0.65\avrtoolchain\bin\../lib/gcc/avr/4.6.2/../../../../avr/include/avr/sfr_defs.h:
+
+c:\program\ files\ (x86)\atmel\atmel\ studio\ 6.0\extensions\atmel\avrgcc\3.4.0.65\avrtoolchain\bin\../lib/gcc/avr/4.6.2/../../../../avr/include/inttypes.h:
+
+c:\program\ files\ (x86)\atmel\atmel\ studio\ 6.0\extensions\atmel\avrgcc\3.4.0.65\avrtoolchain\bin\../lib/gcc/avr/4.6.2/include/stdint.h:
+
+c:\program\ files\ (x86)\atmel\atmel\ studio\ 6.0\extensions\atmel\avrgcc\3.4.0.65\avrtoolchain\bin\../lib/gcc/avr/4.6.2/../../../../avr/include/stdint.h:
+
+c:\program\ files\ (x86)\atmel\atmel\ studio\ 6.0\extensions\atmel\avrgcc\3.4.0.65\avrtoolchain\bin\../lib/gcc/avr/4.6.2/../../../../avr/include/avr/iotn1634.h:
+
+c:\program\ files\ (x86)\atmel\atmel\ studio\ 6.0\extensions\atmel\avrgcc\3.4.0.65\avrtoolchain\bin\../lib/gcc/avr/4.6.2/../../../../avr/include/avr/portpins.h:
+
+c:\program\ files\ (x86)\atmel\atmel\ studio\ 6.0\extensions\atmel\avrgcc\3.4.0.65\avrtoolchain\bin\../lib/gcc/avr/4.6.2/../../../../avr/include/avr/common.h:
+
+c:\program\ files\ (x86)\atmel\atmel\ studio\ 6.0\extensions\atmel\avrgcc\3.4.0.65\avrtoolchain\bin\../lib/gcc/avr/4.6.2/../../../../avr/include/avr/version.h:
+
+c:\program\ files\ (x86)\atmel\atmel\ studio\ 6.0\extensions\atmel\avrgcc\3.4.0.65\avrtoolchain\bin\../lib/gcc/avr/4.6.2/../../../../avr/include/avr/fuse.h:
+
+c:\program\ files\ (x86)\atmel\atmel\ studio\ 6.0\extensions\atmel\avrgcc\3.4.0.65\avrtoolchain\bin\../lib/gcc/avr/4.6.2/../../../../avr/include/avr/lock.h:
+
+c:\program\ files\ (x86)\atmel\atmel\ studio\ 6.0\extensions\atmel\avrgcc\3.4.0.65\avrtoolchain\bin\../lib/gcc/avr/4.6.2/../../../../avr/include/util/delay.h:
+
+c:\program\ files\ (x86)\atmel\atmel\ studio\ 6.0\extensions\atmel\avrgcc\3.4.0.65\avrtoolchain\bin\../lib/gcc/avr/4.6.2/../../../../avr/include/util/delay_basic.h:
+
+c:\program\ files\ (x86)\atmel\atmel\ studio\ 6.0\extensions\atmel\avrgcc\3.4.0.65\avrtoolchain\bin\../lib/gcc/avr/4.6.2/../../../../avr/include/math.h:
+
+c:\program\ files\ (x86)\atmel\atmel\ studio\ 6.0\extensions\atmel\avrgcc\3.4.0.65\avrtoolchain\bin\../lib/gcc/avr/4.6.2/../../../../avr/include/avr/pgmspace.h:
+
+c:\program\ files\ (x86)\atmel\atmel\ studio\ 6.0\extensions\atmel\avrgcc\3.4.0.65\avrtoolchain\bin\../lib/gcc/avr/4.6.2/include/stddef.h:
+
+c:\program\ files\ (x86)\atmel\atmel\ studio\ 6.0\extensions\atmel\avrgcc\3.4.0.65\avrtoolchain\bin\../lib/gcc/avr/4.6.2/../../../../avr/include/stdlib.h:
+
+.././ss1306-config.h:
+
+.././ss1306.h:
+
+.././nyan.h:
View
1  SSD1306demo/Debug/SSD1306demo.eep
@@ -0,0 +1 @@
+:00000001FF
View
BIN  SSD1306demo/Debug/SSD1306demo.elf
Binary file not shown
View
331 SSD1306demo/Debug/SSD1306demo.hex
@@ -0,0 +1,331 @@
+:100000000C9458020C9475020C9475020C947502B1
+:100010000C9475020C9475020C9475020C94750284
+:100020000C9475020C9475020C9475020C94750274
+:100030000C9475020C9475020C9475020C94750264
+:100040000C9475020C9475020C9475020C94750254
+:100050000C9475020C9475020C9475020C94750244
+:100060000C9475020C9475020C9475020C94750234
+:10007000003E7F414D4F2E0000207454547C780088
+:10008000007E7E484878300000387C4444440000BC
+:1000900000307848487E7E0000387C54545C18005C
+:1000A0000000087C7E0A0A000098BCA4A4FC7C0026
+:1000B000007E7E08087870000000487A7A400000D0
+:1000C0000000808080FA7A00007E7E103868400050
+:1000D0000000427E7E400000007C7C18381C7C784A
+:1000E000007C7C04047C780000387C44447C38002C
+:1000F00000FCFC24243C180000183C2424FCFC00D8
+:10010000007C7C04040C080000485C5454742400F7
+:100110000004043E7E444400003C7C40407C7C0063
+:10012000001C3C60603C1C00001C7C7038707C1C17
+:1001300000446C38386C4400009CBCA0E07C3C005F
+:10014000004464745C4C440000007F7F4141000027
+:1001500040687C5E49492200000041417F7F0000E9
+:1001600000080CFEFE0C080000183C7E1818181839
+:1001700000000000000000000000004F4F000000E1
+:100180000007070000070700147F7F14147F7F1407
+:1001900000242E6B6B3A1200006333180C66630068
+:1001A00000327F4D4D7772500000000406030100BD
+:1001B00000001C3E63410000000041633E1C000043
+:1001C000082A3E1C1C3E2A080008083E3E0808007B
+:1001D000000080E06000000000080808080808002F
+:1001E000000000606000000000406030180C060253
+:1001F000003E7F49457F3E000040447F7F404000F5
+:1002000000627351494F460000226349497F36001E
+:1002100000181814167F7F1000276745457D3900A8
+:10022000003E7F49497B3200000303797D070300CC
+:1002300000367F49497F360000266F49497F3E00DE
+:100240000000002424000000000080E4640000009E
+:1002500000081C36634141000014141414141400E7
+:1002600000414163361C080000020351590F06008B
+:100270001818181818181818007C7E0B0B7E7C00B4
+:10028000007F7F49497F3600003E7F414163220065
+:10029000007F7F41633E1C00007F7F494941410050
+:1002A000007F7F0909010100003E7F41497B3A0040
+:1002B000007F7F08087F7F000000417F7F410000B2
+:1002C000002060417F3F0100007F7F1C36634100BA
+:1002D000007F7F4040404000007F7F060C067F7F0C
+:1002E000007F7F0E1C7F7F00003E7F41417F3E00EC
+:1002F000007F7F09090F0600001E3F21617F5E001D
+:10030000007F7F19396F460000266F49497B320014
+:100310000001017F7F010100003F7F40407F3F00DF
+:10032000001F3F60603F1F00007F7F3018307F7FDD
+:100330000063771C1C77630000070F78780F0700B5
+:10034000006171594D474300181818FFFF1818181D
+:100350003333CCCC00000000000000FFFF000000A1
+:100360000000000F0F000000000000F0F00000008F
+:10037000FFFFFFFFFFFFFFFFFFFFFFFF0000000089
+:10038000F0F0F0F0F0F0F0F00101010101010101E5
+:100390008080808080808080FFFF0000000000005F
+:1003A0003333CCCC3333CCCC000000000000FFFF53
+:1003B0003030C0C03030C0C03399CC663399CC6681
+:1003C000000000000000FFFF000000FFFF181818E9
+:1003D00000000000F0F0F0F00000001F1F181818D7
+:1003E000181818F8F8000000C0C0C0C0C0C0C0C0D5
+:1003F000000000F8F81818181818181F1F181818F7
+:10040000181818F8F8181818181818FFFF00000026
+:10041000FFFF000000000000FFFFFF0000000000E1
+:100420000000000000FFFFFF0303030303030303B7
+:100430000707070707070707E0E0E0E0E0E0E0E084
+:1004400000787830180C0603F0F0F0F0000000009F
+:10045000000000000F0F0F0F1818181F1F000000DA
+:100460000F0F0F0F000000000F0F0F0FF0F0F0F054
+:10047000808C98A5B0BCC6D0DAE2EAF0F5FAFDFEB1
+:10048000FFFEFDFAF5F0EAE2DAD0C6BCB0A5988C22
+:100490008073675A4F43392F251D150F0A05020136
+:1004A000000102050A0F151D252F39434F5A6773A6
+:1004B00011241FBECFEFD4E0DEBFCDBF11E0A0E01E
+:1004C000B1E0E6E3F4E102C005900D92AE35B1076C
+:1004D000D9F711E0AEE5B1E001C01D92AE36B1072B
+:1004E000E1F70E9499050C94190A0C9400008823E6
+:1004F00011F0499A01C049984A9887E090E070E06D
+:100500004C989B01082E02C0359527950A94E2F776
+:1005100020FF02C04D9A01C04D984C9A01972FEFD1
+:100520008F3F920769F74C984A9A08956A9883EC2E
+:1005300099E00197F1F700C000006A9A83EC99E016
+:100540000197F1F700C0000080E06EEA0E94770298
+:1005500080E065ED0E94770280E061E80E9477020A
+:1005600080E068EA0E94770280E06FE30E947702F1
+:1005700080E063ED0E94770280E060E00E947702F5
+:1005800080E060E00E94770280E06DE80E947702E0
+:1005900080E064E10E94770280E060E20E947702DE
+:1005A00080E060E00E94770280E061EA0E947702CA
+:1005B00080E065EA0E94770280E068EC0E947702A2
+:1005C00080E06AED0E94770280E062E10E9477029B
+:1005D00080E061E80E94770280E06FE70E94770286
+:1005E00080E069ED0E94770280E061E10E9477027D
+:1005F00080E06BED0E94770280E060E20E9477026B
+:1006000080E066EA0E94770280E064EA0E94770256
+:1006100080E06FEA0E94770208950895CF93C82F73
+:1006200080E065ED0E94770280E06C2F0E947702E7
+:10063000CF910895CF93C82F80E060E20E947702A7
+:10064000C23008F0C0E080E06C2F0E947702CF91AA
+:1006500008950F931F93CF93DF938C01C62FD0E0A3
+:10066000209759F0C80FD91FF80161918F0181E0DF
+:100670000E9477020C171D07B9F7DF91CF911F91E8
+:100680000F9108950F931F93CF93DF93082F10E0DE
+:10069000000F111F000F111F000F111FC801089636
+:1006A0000817190770F4E801C059DF4F08581F4FA9
+:1006B000FE01649181E00E9477022196C017D10764
+:1006C000B9F7DF91CF911F910F910895982F925410
+:1006D000983160F09052983110F4805607C0982FEE
+:1006E0009052903218F0803208F4805A0E944203EF
+:1006F000089580E061E20E94770280E060E00E945D
+:10070000770280E06FE70E94770280E062E20E9459
+:10071000770280E060E00E94770280E067E00E945C
+:1007200077020895CF93DF93D82FC62F66230CF45A
+:10073000CFE780E061E20E94770280E06C2F0E94A8
+:10074000770280E06FE70E94770280E062E20E9419
+:1007500077026D2FD83008F067E080E00E947702C2
+:1007600080E067E00E947702DF91CF9108958830A2
+:1007700008F087E0603108F06FE0660F660F660FE3
+:100780000E9492030895CF93DF930E947903C0E003
+:10079000D4E081E060E00E9477022197D1F7DF91F9
+:1007A000CF9108958F929F92AF92BF92CF92DF9296
+:1007B000EF92FF920F931F93CF93DF93D42EC22F0C
+:1007C000470158010E94B703CC23D9F1D0E00C2D8A
+:1007D000112707FD1095CD1570F5CC20ACF44D2FE9
+:1007E000440F440F440FD501C40104C0B695A7952A
+:1007F000979587954A95D2F7AC01BD01DF5F81E0FF
+:10080000642F0E94770213C0A8014D0F511DD5011E
+:10081000C40104C0B695A795979587954A95D2F7D8
+:10082000AC01BD01DF5F81E0642F0E947702D4300C
+:1008300030F0D0E004C081E060E00E947702C15057
+:1008400051F6DF91CF911F910F91FF90EF90DF90C4
+:10085000CF90BF90AF909F908F9008958F929F926E
+:10086000AF92BF92CF92DF92EF92FF920F931F93BE
+:10087000CF93DF93CDB7DEB760970FB6F894DEBFA6
+:100880000FBECDBFF82EE62E142F052FB62EB69430
+:10089000B694B694682F6695669566957E2D7F5FB3
+:1008A0008B2D880F880F880F781BAF2CA394862F71
+:1008B000880F880F880FA81A772359F4AA2049F4C3
+:1008C0008B2D0E94B703812F902F68E00E9429038F
+:1008D0004CC0412F502FFE0131960F2EF9E08F2E84
+:1008E0009924F02D8C0E9D1E840188E090E06C010F
+:1008F000C71AD108DA012D91AD0130E0C901072EE8
+:1009000002C0880F991F0A94E2F78193C9010C2C49
+:1009100002C0959587950A94E2F7D4018D934D0115
+:10092000E017F10739F78B2D6F2D0E949203B8E77E
+:10093000BF1518F468E06A1901C068E0CE0101969D
+:100940000E94290387E38E1580F08B2D8F5F6F2D1A
+:100950000E949203A8E7AF1518F468E06A1901C075
+:1009600068E0CE0109960E94290360960FB6F894BC
+:10097000DEBF0FBECDBFDF91CF911F910F91FF90D2
+:10098000EF90DF90CF90BF90AF909F908F900895A1
+:10099000CF93DF93EC018881882331F021960E9468
+:1009A000660389918823D9F7DF91CF910895DF926B
+:1009B000EF92FF920F931F93CF93DF93CDB7DEB7E4
+:1009C000EC970FB6F894DEBF0FBECDBFE82ED62E43
+:1009D000042FDE011196E0E0F1E08CE301900D922E
+:1009E0008150E1F70A3048F58E2D6D2D0E94B70336
+:1009F000802F90E08C01000F111F800F911F8C0140
+:100A0000000F111F81E090E08C0F9D1F080F191F30
+:100A1000FF2492E0F91619F0E4E0FE1629F4E394BD
+:100A20008E2D6D2D0E94B703F80181918F010E94D8
+:100A30006603F394F6E0FF1661F7EC960FB6F894B0
+:100A4000DEBF0FBECDBFDF91CF911F910F91FF9001
+:100A5000EF90DF900895BF92CF92DF92EF92FF92D6
+:100A60000F931F93CF93DF93E82EF62ED42FB22E41
+:100A70000E94B70380E10E9466030D2F10E0025030
+:100A800010401016110654F4C0E080E40E94660382
+:100A9000CF5F8C2F90E080179107BCF38EE00E940F
+:100AA0006603CE2DCF5FCB2CDD24CE0CD11C089459
+:100AB000C108D1088C2F90E08C159D05BCF48F2DBA
+:100AC0008150D80F8C2F6F2D0E94B7038DE50E94A7
+:100AD00066038C2F6D2F0E94B7038DE50E9466037D
+:100AE000CF5F8C2F90E08C159D0564F38E2D815087
+:100AF0008B0D6F2D0E94B7038DE00E9466031016C8
+:100B0000110654F4C0E080E40E946603CF5F8C2F8E
+:100B100090E080179107BCF38DE10E946603DF919E
+:100B2000CF911F910F91FF90EF90DF90CF90BF90EA
+:100B30000895CF93DF93CDB7DEB760970FB6F894E3
+:100B4000DEBF0FBECDBF629A88B1866388B90E94AE
+:100B500096020E94C303FE01319688E0DF011D92D8
+:100B60008A95E9F7DE011996EDE4F1E088E001905D
+:100B70000D928150E1F70E94B309BC01770F660B1B
+:100B8000762F882777FD8095982F0E944308DC01F7
+:100B9000CB018093660190936701A0936801B093A5
+:100BA000690180E090E0DC0180936A0190936B0121
+:100BB000A0936C01B0936D010E94B30990E0A0E096
+:100BC000B0E0BC01CD010E9443089B01AC0160E094
+:100BD00070E080EA90E40E94AD0720E030E040E25F
+:100BE00050E40E944507DC01CB0180935E019093A5
+:100BF0005F01A0936001B0936101992488240F2EB6
+:100C0000F2E64F2EF1E05F2EF02D0F2EF6E66F2E5E
+:100C1000F1E07F2EF02D0F2EFAE62F2EF1E03F2E81
+:100C2000F02DF201608171818281938120915501C3
+:100C30003091560140915701509158010E9445074B
+:100C4000162F072FF82EE92E862F902FAF2DBE2DB1
+:100C5000F20180839183A283B383D3016D917D914F
+:100C60008D919C91EEE5F1E02081318142815381AB
+:100C70000E944507D62EC72EB82EA92E862F9C2D52
+:100C8000AB2DBA2DF30180839183A283B383812F8F
+:100C9000902FAF2DBE2DBC01CD01AAE6B1E02D9164
+:100CA0003D914D915C910E944507162F072FF82E1C
+:100CB000E92E862F902FAF2DBE2DEAE6F1E080833E
+:100CC0009183A283B3838D2D9C2DAB2DBA2DBC01B6
+:100CD000CD010E941508B62E812F902FAF2DBE2D6D
+:100CE000BC01CD010E941508162F87E060E00E942C
+:100CF000B7038CE391E00E94C804882D692DAE01F2
+:100D00004F5F5F4F0E942E048B2D612FAE01475F16
+:100D10005F4F0E942E04D301CD90DD90ED90FC90AA
+:100D2000C701B60120E030E040EF52E40E94F30832
+:100D30001816ACF480E090E0A0EFB2E4F3018083F9
+:100D40009183A283B383EEE5F1E080819181A2815A
+:100D5000B381B05880839183A283B3831CC0C70141
+:100D6000B60120E030E0A9010E94A90788239CF485
+:100D700080E090E0DC01F30180839183A283B38360
+:100D8000EEE5F1E080819181A281B381B05880834A
+:100D90009183A283B383D101CD90DD90ED90FC903F
+:100DA000C701B60120E030E040E652E40E94F308BB
+:100DB0001816E4F480E090E0A0E6B2E4F10180834C
+:100DC0009183A283B383D2016D917D918D919C918A
+:100DD0002DEC3CEC4CE45FEB0E94F708DC01CB010E
+:100DE000F20180839183A283B38323C0C701B6013C
+:100DF00020E030E0A9010E94A9078823D4F480E014
+:100E000090E0DC01F10180839183A283B383D2015E
+:100E10006D917D918D919C912DEC3CEC4CE45FEBC0
+:100E20000E94F708DC01CB01F20180839183A28349
+:100E3000B383D1016D917D918D919C9120E030E043
+:100E400040E652E40E94F3088823ACF0F30160818D
+:100E500071818281938120E030E0A9010E94A9077D
+:100E600018164CF080E090E0A0E4B0ECF201808332
+:100E70009183A283B38383EE97E50197F1F700C0D6
+:100E800000008B2C912ECDCE5058BB27AA270ED018
+:100E900070C161D130F066D120F031F49F3F11F480
+:100EA0001EF456C10EF4E095E7FB4CC1E92F72D158
+:100EB00080F3BA17620773078407950718F071F477
+:100EC0009EF58AC10EF4E0950B2EBA2FA02D0B01D2
+:100ED000B90190010C01CA01A0011124FF27591B7F
+:100EE00099F0593F50F4503E68F11A16F040A22F85
+:100EF000232F342F4427585FF3CF469537952795F6
+:100F0000A795F0405395C9F77EF41F16BA0B620BF4
+:100F1000730B840BBAF09150A1F0FF0FBB1F661F3B
+:100F2000771F881FC2F70EC0BA0F621F731F841F7E
+:100F300048F4879577956795B795F7959E3F08F0A4
+:100F4000B3CF9395880F08F09927EE0F9795879563
+:100F50000895D4D008F481E008950CD00AC102D1DC
+:100F600040F0F9D030F021F45F3F19F0EBC051119F
+:100F700034C1EEC00FD198F39923C9F35523B1F3CF
+:100F8000951B550BBB27AA2762177307840738F0F8
+:100F90009F5F5F4F220F331F441FAA1FA9F333D057
+:100FA0000E2E3AF0E0E830D091505040E695001C0B
+:100FB000CAF729D0FE2F27D0660F771F881FBB1FC7
+:100FC000261737074807AB07B0E809F0BB0B802DA1
+:100FD000BF01FF2793585F4F2AF09E3F510568F0ED
+:100FE000B1C0FBC05F3FECF3983EDCF3869577958C
+:100FF0006795B795F7959F5FC9F7880F911D9695EF
+:10100000879597F90895E1E0660F771F881FBB1F4A
+:10101000621773078407BA0720F0621B730B840BF7
+:10102000BA0BEE1F88F7E0950895BCD088F09F5763
+:1010300090F0B92F9927B751A0F0D1F0660F771F24
+:10104000881F991F1AF0BA95C9F712C0B13081F004
+:10105000C3D0B1E00895C0C0672F782F8827B85F4C
+:1010600039F0B93FCCF3869577956795B395D9F765
+:101070003EF490958095709561957F4F8F4F9F4F6F
+:101080000895E89409C097FB3EF49095809570957B
+:1010900061957F4F8F4F9F4F9923A9F0F92F96E9C4
+:1010A000BB279395F695879577956795B795F11139
+:1010B000F8CFFAF4BB0F11F460FF1BC06F5F7F4FD6
+:1010C0008F4F9F4F16C0882311F096E911C07723E8
+:1010D00021F09EE8872F762F05C0662371F096E8F1
+:1010E000862F70E060E02AF09A95660F771F881FC0
+:1010F000DAF7880F9695879597F90895990F000864
+:10110000550FAA0BE0E8FEEF16161706E807F907D9
+:10111000C0F012161306E407F50798F0621B730B74
+:10112000840B950B39F40A2661F0232B242B252BF5
+:1011300021F408950A2609F4A140A6958FEF811D98
+:10114000811D089597F99F6780E870E060E0089539
+:101150009FEF80EC089500240A94161617061806CF
+:101160000906089500240A941216130614060506AB
+:101170000895092E0394000C11F4882352F0BB0F3C
+:1011800040F4BF2B11F460FF04C06F5F7F4F8F4F9F
+:101190009F4F089557FD9058440F551F59F05F3FDA
+:1011A00071F04795880F97FB991F61F09F3F79F089
+:1011B00087950895121613061406551FF2CF46950B
+:1011C000F1DF08C0161617061806991FF1CF86958D
+:1011D0007105610508940895E894BB276627772771
+:1011E000CB0197F908958ADF08F48FEF08950AD0AC
+:1011F000C0CFB1DF28F0B6DF18F0952309F0A2CFF9
+:10120000A7CFEBCFC7DFA8F39923D9F35523C9F3B1
+:10121000950F50E0551FAA27EE27FF27BB27002474
+:101220000894679520F4E20FF31FB41F0A1E220FE3
+:10123000331F441FAA1F6695A9F7779530F4F30F63
+:10124000B41F0A1E121E08F46395330F441FAA1F11
+:10125000221F769599F7879520F4B40F0A1E121E67
+:10126000631F440FAA1F221F331F8695A9F7862FDD
+:10127000712D602D11249F5750408AF0E1F0882392
+:101280004AF0EE0FFF1FBB1F661F771F881F91508C
+:101290005040A9F79E3F510570F054CF9ECF5F3F5D
+:1012A000ECF3983EDCF3869577956795B795F795BF
+:1012B000E7959F5FC1F7FE2B880F911D9695879547
+:1012C00097F908958F929F92AF92BF92CF92DF923B
+:1012D000EF92FF92CF93DF93EC0188819981AA81ED
+:1012E000BB810097A105B10521F484E299EDABE53E
+:1012F000B7E0BC01CD012DE133EF41E050E00E94A9
+:10130000DC0969017A0127EA31E440E050E00E94FB
+:10131000C3094B015C01C701B6012CEE34EF4FEF5E
+:101320005FEF0E94C309AB01BC01480D591D6A1D46
+:101330007B1D77FF04C04150504060407048488397
+:1013400059836A837B835F77CA01DF91CF91FF90D6
+:10135000EF90DF90CF90BF90AF909F908F900895C7
+:101360000E946209089589E591E00E94620908954A
+:10137000A0E0B0E08093590190935A01A0935B01E3
+:10138000B0935C010895FF27EE27BB27AA2760FFD3
+:1013900004C0A20FB31FE41FF51F220F331F441F09
+:1013A000551F969587957795679589F700977607E6
+:1013B00071F7CF01BD01089597FB092E05260ED0C8
+:1013C00057FD04D014D00AD0001C38F45095409535
+:1013D000309521953F4F4F4F5F4F0895F6F7909509
+:1013E0008095709561957F4F8F4F9F4F0895A1E233
+:1013F0001A2EAA1BBB1BFD010DC0AA1FBB1FEE1F8F
+:10140000FF1FA217B307E407F50720F0A21BB30BD9
+:10141000E40BF50B661F771F881F991F1A9469F755
+:1014200060957095809590959B01AC01BD01CF01B1
+:061430000895F894FFCFBF
+:10143600100E5D5D0D1D200E205D2011100E101D7D
+:101446000D1D100E20130D1D5F5F0D13205E100E77
+:101456000D0E0D1D100E0B0E0D1D100E205B205EC9
+:10146600100E0B130D1D100E0D130D1D535452416E
+:10147600494748542042414C4C494E2700003C7E87
+:0E1486007E7E7E3C00CDCCCC3D0100000000FF
+:00000001FF
View
2,599 SSD1306demo/Debug/SSD1306demo.lss
2,599 additions, 0 deletions not shown
View
679 SSD1306demo/Debug/SSD1306demo.map
@@ -0,0 +1,679 @@
+Archive member included because of file (symbol)
+
+c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(addsf3.o)
+ SSD1306demo.o (__addsf3)
+c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(addsf3x.o)
+ c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(addsf3.o) (__addsf3x)
+c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(cmpsf2.o)
+ SSD1306demo.o (__ltsf2)
+c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(divsf3.o)
+ SSD1306demo.o (__divsf3)
+c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(divsf3x.o)
+ c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(divsf3.o) (__divsf3x)
+c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(fixunssfsi.o)
+ SSD1306demo.o (__fixunssfsi)
+c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(floatsisf.o)
+ SSD1306demo.o (__floatsisf)
+c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(fp_cmp.o)
+ c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(cmpsf2.o) (__fp_cmp)
+c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(fp_inf.o)
+ c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(addsf3x.o) (__fp_inf)
+c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(fp_nan.o)
+ c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(addsf3x.o) (__fp_nan)
+c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(fp_pscA.o)
+ c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(addsf3x.o) (__fp_pscA)
+c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(fp_pscB.o)
+ c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(addsf3x.o) (__fp_pscB)
+c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(fp_round.o)
+ c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(addsf3.o) (__fp_round)
+c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(fp_split3.o)
+ c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(addsf3x.o) (__fp_split3)
+c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(fp_zero.o)
+ c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(addsf3x.o) (__fp_zero)
+c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(gesf2.o)
+ SSD1306demo.o (__gesf2)
+c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(mulsf3.o)
+ SSD1306demo.o (__mulsf3)
+c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(mulsf3x.o)
+ c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(mulsf3.o) (__mulsf3x)
+c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/avr35\libgcc.a(_exit.o)
+ c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35/crttn1634.o (exit)
+c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/avr35\libgcc.a(_copy_data.o)
+ ss1306.o (__do_copy_data)
+c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/avr35\libgcc.a(_clear_bss.o)
+ ss1306.o (__do_clear_bss)
+c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libc.a(rand.o)
+ SSD1306demo.o (rand)
+c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/avr35\libgcc.a(_mulsi3.o)
+ c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libc.a(rand.o) (__mulsi3)
+c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/avr35\libgcc.a(_divmodsi4.o)
+ c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libc.a(rand.o) (__divmodsi4)
+c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/avr35\libgcc.a(_udivmodsi4.o)
+ c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/avr35\libgcc.a(_divmodsi4.o) (__udivmodsi4)
+
+Allocating common symbols
+Common symbol size file
+
+ball_vel 0x8 SSD1306demo.o
+ball_pos 0x8 SSD1306demo.o
+
+Memory Configuration
+
+Name Origin Length Attributes
+text 0x00000000 0x00010000 xr
+data 0x00800060 0x0000ffa0 rw !x
+eeprom 0x00810000 0x00010000 rw !x
+fuse 0x00820000 0x00000400 rw !x
+lock 0x00830000 0x00000400 rw !x
+signature 0x00840000 0x00000400 rw !x
+*default* 0x00000000 0xffffffff
+
+Linker script and memory map
+
+Address of section .data set to 0x800100
+LOAD c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35/crttn1634.o
+LOAD ss1306.o
+LOAD SSD1306demo.o
+START GROUP
+LOAD c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a
+END GROUP
+LOAD c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/avr35\libgcc.a
+LOAD c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libc.a
+LOAD c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/avr35\libgcc.a
+
+.hash
+ *(.hash)
+
+.dynsym
+ *(.dynsym)
+
+.dynstr
+ *(.dynstr)
+
+.gnu.version
+ *(.gnu.version)
+
+.gnu.version_d
+ *(.gnu.version_d)
+
+.gnu.version_r
+ *(.gnu.version_r)
+
+.rel.init
+ *(.rel.init)
+
+.rela.init
+ *(.rela.init)
+
+.rel.text
+ *(.rel.text)
+ *(.rel.text.*)
+ *(.rel.gnu.linkonce.t*)
+
+.rela.text
+ *(.rela.text)
+ *(.rela.text.*)
+ *(.rela.gnu.linkonce.t*)
+
+.rel.fini
+ *(.rel.fini)
+
+.rela.fini
+ *(.rela.fini)
+
+.rel.rodata
+ *(.rel.rodata)
+ *(.rel.rodata.*)
+ *(.rel.gnu.linkonce.r*)
+
+.rela.rodata
+ *(.rela.rodata)
+ *(.rela.rodata.*)
+ *(.rela.gnu.linkonce.r*)
+
+.rel.data
+ *(.rel.data)
+ *(.rel.data.*)
+ *(.rel.gnu.linkonce.d*)
+
+.rela.data
+ *(.rela.data)
+ *(.rela.data.*)
+ *(.rela.gnu.linkonce.d*)
+
+.rel.ctors
+ *(.rel.ctors)
+
+.rela.ctors
+ *(.rela.ctors)
+
+.rel.dtors
+ *(.rel.dtors)
+
+.rela.dtors
+ *(.rela.dtors)
+
+.rel.got
+ *(.rel.got)
+
+.rela.got
+ *(.rela.got)
+
+.rel.bss
+ *(.rel.bss)
+
+.rela.bss
+ *(.rela.bss)
+
+.rel.plt
+ *(.rel.plt)
+
+.rela.plt
+ *(.rela.plt)
+
+.text 0x00000000 0x1436
+ *(.vectors)
+ .vectors 0x00000000 0x70 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35/crttn1634.o
+ 0x00000000 __vector_default
+ 0x00000000 __vectors
+ *(.vectors)
+ *(.progmem.gcc*)
+ *(.progmem*)
+ .progmem.data 0x00000070 0x400 ss1306.o
+ 0x00000070 font
+ .progmem.data 0x00000470 0x40 SSD1306demo.o
+ 0x00000470 sine_table
+ 0x000004b0 . = ALIGN (0x2)
+ 0x000004b0 __trampolines_start = .
+ *(.trampolines)
+ .trampolines 0x000004b0 0x0 linker stubs
+ *(.trampolines*)
+ 0x000004b0 __trampolines_end = .
+ *(.jumptables)
+ *(.jumptables*)
+ *(.lowtext)
+ *(.lowtext*)
+ 0x000004b0 __ctors_start = .
+ *(.ctors)
+ 0x000004b0 __ctors_end = .
+ 0x000004b0 __dtors_start = .
+ *(.dtors)
+ 0x000004b0 __dtors_end = .
+ SORT(*)(.ctors)
+ SORT(*)(.dtors)
+ *(.init0)
+ .init0 0x000004b0 0x0 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35/crttn1634.o
+ 0x000004b0 __init
+ *(.init0)
+ *(.init1)
+ *(.init1)
+ *(.init2)
+ .init2 0x000004b0 0xc c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35/crttn1634.o
+ *(.init2)
+ *(.init3)
+ *(.init3)
+ *(.init4)
+ .init4 0x000004bc 0x16 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/avr35\libgcc.a(_copy_data.o)
+ 0x000004bc __do_copy_data
+ .init4 0x000004d2 0x10 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/avr35\libgcc.a(_clear_bss.o)
+ 0x000004d2 __do_clear_bss
+ *(.init4)
+ *(.init5)
+ *(.init5)
+ *(.init6)
+ *(.init6)
+ *(.init7)
+ *(.init7)
+ *(.init8)
+ *(.init8)
+ *(.init9)
+ .init9 0x000004e2 0x8 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35/crttn1634.o
+ *(.init9)
+ *(.text)
+ .text 0x000004ea 0x4 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35/crttn1634.o
+ 0x000004ea __vector_22
+ 0x000004ea __vector_1
+ 0x000004ea __vector_24
+ 0x000004ea __vector_12
+ 0x000004ea __bad_interrupt
+ 0x000004ea __vector_6
+ 0x000004ea __vector_3
+ 0x000004ea __vector_23
+ 0x000004ea __vector_25
+ 0x000004ea __vector_11
+ 0x000004ea __vector_13
+ 0x000004ea __vector_17
+ 0x000004ea __vector_19
+ 0x000004ea __vector_7
+ 0x000004ea __vector_27
+ 0x000004ea __vector_5
+ 0x000004ea __vector_4
+ 0x000004ea __vector_9
+ 0x000004ea __vector_2
+ 0x000004ea __vector_21
+ 0x000004ea __vector_15
+ 0x000004ea __vector_8
+ 0x000004ea __vector_26
+ 0x000004ea __vector_14
+ 0x000004ea __vector_10
+ 0x000004ea __vector_16
+ 0x000004ea __vector_18
+ 0x000004ea __vector_20
+ .text 0x000004ee 0x644 ss1306.o
+ 0x000004ee oled_write
+ 0x0000052c oled_init
+ 0x0000061a oled_display_en
+ 0x0000061c oled_set_clock
+ 0x00000634 oled_set_addr_mode
+ 0x00000652 oled_put_tile
+ 0x00000684 oled_putc_raw
+ 0x000006cc oled_putc
+ 0x000006f2 oled_home
+ 0x00000724 oled_move_raw
+ 0x0000076e oled_move
+ 0x00000786 oled_clear
+ 0x000007a4 oled_fill
+ 0x0000085c oled_putxy
+ 0x00000990 oled_puts
+ 0x000009ae oled_bigdigit
+ 0x00000a56 oled_box
+ .text 0x00000b32 0x356 SSD1306demo.o
+ 0x00000b32 main
+ .text 0x00000e88 0x0 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(addsf3.o)
+ .text 0x00000e88 0x0 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(addsf3x.o)
+ .text 0x00000e88 0x0 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(cmpsf2.o)
+ .text 0x00000e88 0x0 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(divsf3.o)
+ .text 0x00000e88 0x0 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(divsf3x.o)
+ .text 0x00000e88 0x0 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(fixunssfsi.o)
+ .text 0x00000e88 0x0 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(floatsisf.o)
+ .text 0x00000e88 0x0 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(fp_cmp.o)
+ .text 0x00000e88 0x0 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(fp_inf.o)
+ .text 0x00000e88 0x0 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(fp_nan.o)
+ .text 0x00000e88 0x0 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(fp_pscA.o)
+ .text 0x00000e88 0x0 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(fp_pscB.o)
+ .text 0x00000e88 0x0 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(fp_round.o)
+ .text 0x00000e88 0x0 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(fp_split3.o)
+ .text 0x00000e88 0x0 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(fp_zero.o)
+ .text 0x00000e88 0x0 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(gesf2.o)
+ .text 0x00000e88 0x0 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(mulsf3.o)
+ .text 0x00000e88 0x0 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(mulsf3x.o)
+ .text 0x00000e88 0x0 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/avr35\libgcc.a(_exit.o)
+ .text 0x00000e88 0x0 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/avr35\libgcc.a(_copy_data.o)
+ .text 0x00000e88 0x0 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/avr35\libgcc.a(_clear_bss.o)
+ .text 0x00000e88 0x0 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libc.a(rand.o)
+ .text 0x00000e88 0x0 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/avr35\libgcc.a(_mulsi3.o)
+ .text 0x00000e88 0x0 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/avr35\libgcc.a(_divmodsi4.o)
+ .text 0x00000e88 0x0 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/avr35\libgcc.a(_udivmodsi4.o)
+ 0x00000e88 . = ALIGN (0x2)
+ *(.text.*)
+ .text.avr-libc.fplib
+ 0x00000e88 0xa c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(addsf3.o)
+ 0x00000e88 __subsf3
+ 0x00000e8a __addsf3
+ .text.avr-libc.fplib
+ 0x00000e92 0xc0 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(addsf3x.o)
+ 0x00000eac __addsf3x
+ .text.avr-libc.fplib
+ 0x00000f52 0x8 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(cmpsf2.o)
+ 0x00000f52 __nesf2
+ 0x00000f52 __eqsf2
+ 0x00000f52 __cmpsf2
+ 0x00000f52 __ltsf2
+ 0x00000f52 __lesf2
+ .text.avr-libc.fplib
+ 0x00000f5a 0x4 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(divsf3.o)
+ 0x00000f5a __divsf3
+ .text.avr-libc.fplib
+ 0x00000f5e 0xcc c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(divsf3x.o)
+ 0x00000f74 __divsf3x
+ 0x00000f78 __divsf3_pse
+ .text.avr-libc.fplib
+ 0x0000102a 0x58 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(fixunssfsi.o)
+ 0x0000102a __fixunssfsi
+ .text.avr-libc.fplib
+ 0x00001082 0x7a c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(floatsisf.o)
+ 0x00001082 __floatunsisf
+ 0x00001086 __floatsisf
+ .text.avr-libc.fplib
+ 0x000010fc 0x48 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(fp_cmp.o)
+ 0x000010fc __fp_cmp
+ .text.avr-libc.fplib
+ 0x00001144 0xc c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(fp_inf.o)
+ 0x00001144 __fp_inf
+ .text.avr-libc.fplib
+ 0x00001150 0x6 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(fp_nan.o)
+ 0x00001150 __fp_nan
+ .text.avr-libc.fplib
+ 0x00001156 0xe c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(fp_pscA.o)
+ 0x00001156 __fp_pscA
+ .text.avr-libc.fplib
+ 0x00001164 0xe c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(fp_pscB.o)
+ 0x00001164 __fp_pscB
+ .text.avr-libc.fplib
+ 0x00001172 0x22 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(fp_round.o)
+ 0x00001172 __fp_round
+ .text.avr-libc.fplib
+ 0x00001194 0x44 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(fp_split3.o)
+ 0x00001194 __fp_split3
+ 0x000011a4 __fp_splitA
+ .text.avr-libc.fplib
+ 0x000011d8 0xe c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(fp_zero.o)
+ 0x000011d8 __fp_zero
+ 0x000011da __fp_szero
+ .text.avr-libc.fplib
+ 0x000011e6 0x8 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(gesf2.o)
+ 0x000011e6 __gesf2
+ 0x000011e6 __gtsf2
+ .text.avr-libc.fplib
+ 0x000011ee 0x4 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(mulsf3.o)
+ 0x000011ee __mulsf3
+ .text.avr-libc.fplib
+ 0x000011f2 0xd2 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(mulsf3x.o)
+ 0x00001204 __mulsf3x
+ 0x00001208 __mulsf3_pse
+ .text.libgcc 0x000012c4 0x0 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/avr35\libgcc.a(_exit.o)
+ .text.libgcc 0x000012c4 0x0 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/avr35\libgcc.a(_copy_data.o)
+ .text.libgcc 0x000012c4 0x0 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/avr35\libgcc.a(_clear_bss.o)
+ .text.avr-libc
+ 0x000012c4 0xc2 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libc.a(rand.o)
+ 0x00001360 rand_r
+ 0x00001366 rand
+ 0x00001370 srand
+ .text.libgcc 0x00001386 0x32 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/avr35\libgcc.a(_mulsi3.o)
+ 0x00001386 __mulsi3
+ .text.libgcc 0x000013b8 0x36 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/avr35\libgcc.a(_divmodsi4.o)
+ 0x000013b8 __divmodsi4
+ .text.libgcc 0x000013ee 0x44 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/avr35\libgcc.a(_udivmodsi4.o)
+ 0x000013ee __udivmodsi4
+ 0x00001432 . = ALIGN (0x2)
+ *(.fini9)
+ .fini9 0x00001432 0x0 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/avr35\libgcc.a(_exit.o)
+ 0x00001432 _exit
+ 0x00001432 exit
+ *(.fini9)
+ *(.fini8)
+ *(.fini8)
+ *(.fini7)
+ *(.fini7)
+ *(.fini6)
+ *(.fini6)
+ *(.fini5)
+ *(.fini5)
+ *(.fini4)
+ *(.fini4)
+ *(.fini3)
+ *(.fini3)
+ *(.fini2)
+ *(.fini2)
+ *(.fini1)
+ *(.fini1)
+ *(.fini0)
+ .fini0 0x00001432 0x4 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/avr35\libgcc.a(_exit.o)
+ *(.fini0)
+ 0x00001436 _etext = .
+
+.data 0x00800100 0x5e load address 0x00001436
+ 0x00800100 PROVIDE (__data_start, .)
+ *(.data)
+ .data 0x00800100 0x0 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35/crttn1634.o
+ .data 0x00800100 0x3c ss1306.o
+ .data 0x0080013c 0x1d SSD1306demo.o
+ 0x00800155 grav
+ .data 0x00800159 0x0 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(addsf3.o)
+ .data 0x00800159 0x0 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(addsf3x.o)
+ .data 0x00800159 0x0 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(cmpsf2.o)
+ .data 0x00800159 0x0 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(divsf3.o)
+ .data 0x00800159 0x0 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(divsf3x.o)
+ .data 0x00800159 0x0 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(fixunssfsi.o)
+ .data 0x00800159 0x0 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(floatsisf.o)
+ .data 0x00800159 0x0 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(fp_cmp.o)
+ .data 0x00800159 0x0 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(fp_inf.o)
+ .data 0x00800159 0x0 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(fp_nan.o)
+ .data 0x00800159 0x0 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(fp_pscA.o)
+ .data 0x00800159 0x0 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(fp_pscB.o)
+ .data 0x00800159 0x0 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(fp_round.o)
+ .data 0x00800159 0x0 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(fp_split3.o)
+ .data 0x00800159 0x0 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(fp_zero.o)
+ .data 0x00800159 0x0 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(gesf2.o)
+ .data 0x00800159 0x0 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(mulsf3.o)
+ .data 0x00800159 0x0 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(mulsf3x.o)
+ .data 0x00800159 0x0 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/avr35\libgcc.a(_exit.o)
+ .data 0x00800159 0x0 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/avr35\libgcc.a(_copy_data.o)
+ .data 0x00800159 0x0 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/avr35\libgcc.a(_clear_bss.o)
+ .data 0x00800159 0x4 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libc.a(rand.o)
+ .data 0x0080015d 0x0 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/avr35\libgcc.a(_mulsi3.o)
+ .data 0x0080015d 0x0 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/avr35\libgcc.a(_divmodsi4.o)
+ .data 0x0080015d 0x0 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/avr35\libgcc.a(_udivmodsi4.o)
+ *(.data*)
+ *(.rodata)
+ *(.rodata*)
+ *(.gnu.linkonce.d*)
+ 0x0080015e . = ALIGN (0x2)
+ *fill* 0x0080015d 0x1 00
+ 0x0080015e _edata = .
+ 0x0080015e PROVIDE (__data_end, .)
+
+.bss 0x0080015e 0x10
+ 0x0080015e PROVIDE (__bss_start, .)
+ *(.bss)
+ .bss 0x0080015e 0x0 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35/crttn1634.o
+ .bss 0x0080015e 0x0 ss1306.o
+ .bss 0x0080015e 0x0 SSD1306demo.o
+ .bss 0x0080015e 0x0 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(addsf3.o)
+ .bss 0x0080015e 0x0 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(addsf3x.o)
+ .bss 0x0080015e 0x0 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(cmpsf2.o)
+ .bss 0x0080015e 0x0 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(divsf3.o)
+ .bss 0x0080015e 0x0 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(divsf3x.o)
+ .bss 0x0080015e 0x0 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(fixunssfsi.o)
+ .bss 0x0080015e 0x0 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(floatsisf.o)
+ .bss 0x0080015e 0x0 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(fp_cmp.o)
+ .bss 0x0080015e 0x0 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(fp_inf.o)
+ .bss 0x0080015e 0x0 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(fp_nan.o)
+ .bss 0x0080015e 0x0 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(fp_pscA.o)
+ .bss 0x0080015e 0x0 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(fp_pscB.o)
+ .bss 0x0080015e 0x0 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(fp_round.o)
+ .bss 0x0080015e 0x0 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(fp_split3.o)
+ .bss 0x0080015e 0x0 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(fp_zero.o)
+ .bss 0x0080015e 0x0 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(gesf2.o)
+ .bss 0x0080015e 0x0 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(mulsf3.o)
+ .bss 0x0080015e 0x0 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(mulsf3x.o)
+ .bss 0x0080015e 0x0 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/avr35\libgcc.a(_exit.o)
+ .bss 0x0080015e 0x0 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/avr35\libgcc.a(_copy_data.o)
+ .bss 0x0080015e 0x0 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/avr35\libgcc.a(_clear_bss.o)
+ .bss 0x0080015e 0x0 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libc.a(rand.o)
+ .bss 0x0080015e 0x0 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/avr35\libgcc.a(_mulsi3.o)
+ .bss 0x0080015e 0x0 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/avr35\libgcc.a(_divmodsi4.o)
+ .bss 0x0080015e 0x0 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/avr35\libgcc.a(_udivmodsi4.o)
+ *(.bss*)
+ *(COMMON)
+ COMMON 0x0080015e 0x10 SSD1306demo.o
+ 0x0080015e ball_vel
+ 0x00800166 ball_pos
+ 0x0080016e PROVIDE (__bss_end, .)
+ 0x00001436 __data_load_start = LOADADDR (.data)
+ 0x00001494 __data_load_end = (__data_load_start + SIZEOF (.data))
+
+.noinit 0x0080016e 0x0
+ 0x0080016e PROVIDE (__noinit_start, .)
+ *(.noinit*)
+ 0x0080016e PROVIDE (__noinit_end, .)
+ 0x0080016e _end = .
+ 0x0080016e PROVIDE (__heap_start, .)
+
+.eeprom 0x00810000 0x0
+ *(.eeprom*)
+ 0x00810000 __eeprom_end = .
+
+.fuse
+ *(.fuse)
+ *(.lfuse)
+ *(.hfuse)
+ *(.efuse)
+
+.lock
+ *(.lock*)
+
+.signature
+ *(.signature*)
+
+.stab 0x00000000 0x243c
+ *(.stab)
+ .stab 0x00000000 0x6cc c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35/crttn1634.o
+ .stab 0x000006cc 0x78 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(addsf3.o)
+ 0x84 (size before relaxing)
+ .stab 0x00000744 0x4bc c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(addsf3x.o)
+ 0x4c8 (size before relaxing)
+ .stab 0x00000c00 0x90 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(cmpsf2.o)
+ 0x9c (size before relaxing)
+ .stab 0x00000c90 0x48 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(divsf3.o)
+ 0x54 (size before relaxing)
+ .stab 0x00000cd8 0x510 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(divsf3x.o)
+ 0x51c (size before relaxing)
+ .stab 0x000011e8 0x240 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(fixunssfsi.o)
+ 0x24c (size before relaxing)
+ .stab 0x00001428 0x318 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(floatsisf.o)
+ 0x324 (size before relaxing)
+ .stab 0x00001740 0x1e0 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(fp_cmp.o)
+ 0x1ec (size before relaxing)
+ .stab 0x00001920 0x78 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(fp_inf.o)
+ 0x84 (size before relaxing)
+ .stab 0x00001998 0x54 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(fp_nan.o)
+ 0x60 (size before relaxing)
+ .stab 0x000019ec 0x84 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(fp_pscA.o)
+ 0x90 (size before relaxing)
+ .stab 0x00001a70 0x84 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(fp_pscB.o)
+ 0x90 (size before relaxing)
+ .stab 0x00001af4 0xfc c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(fp_round.o)
+ 0x108 (size before relaxing)
+ .stab 0x00001bf0 0x1d4 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(fp_split3.o)
+ 0x1e0 (size before relaxing)
+ .stab 0x00001dc4 0x90 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(fp_zero.o)
+ 0x9c (size before relaxing)
+ .stab 0x00001e54 0x6c c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(gesf2.o)
+ 0x78 (size before relaxing)
+ .stab 0x00001ec0 0x48 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(mulsf3.o)
+ 0x54 (size before relaxing)
+ .stab 0x00001f08 0x534 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libm.a(mulsf3x.o)
+ 0x540 (size before relaxing)
+
+.stabstr 0x00000000 0x768
+ *(.stabstr)
+ .stabstr 0x00000000 0x768 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35/crttn1634.o
+
+.stab.excl
+ *(.stab.excl)
+
+.stab.exclstr
+ *(.stab.exclstr)
+
+.stab.index
+ *(.stab.index)
+
+.stab.indexstr
+ *(.stab.indexstr)
+
+.comment
+ *(.comment)
+
+.debug
+ *(.debug)
+
+.line
+ *(.line)
+
+.debug_srcinfo
+ *(.debug_srcinfo)
+
+.debug_sfnames
+ *(.debug_sfnames)
+
+.debug_aranges 0x00000000 0x138
+ *(.debug_aranges)
+ .debug_aranges
+ 0x00000000 0x20 ss1306.o
+ .debug_aranges
+ 0x00000020 0x20 SSD1306demo.o
+ .debug_aranges
+ 0x00000040 0x20 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/avr35\libgcc.a(_exit.o)
+ .debug_aranges
+ 0x00000060 0x20 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/avr35\libgcc.a(_copy_data.o)
+ .debug_aranges
+ 0x00000080 0x20 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/avr35\libgcc.a(_clear_bss.o)
+ .debug_aranges
+ 0x000000a0 0x38 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libc.a(rand.o)
+ .debug_aranges
+ 0x000000d8 0x20 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/avr35\libgcc.a(_mulsi3.o)
+ .debug_aranges
+ 0x000000f8 0x20 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/avr35\libgcc.a(_divmodsi4.o)
+ .debug_aranges
+ 0x00000118 0x20 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/avr35\libgcc.a(_udivmodsi4.o)
+
+.debug_pubnames
+ *(.debug_pubnames)
+
+.debug_info 0x00000000 0xf5f
+ *(.debug_info)
+ .debug_info 0x00000000 0x6ad ss1306.o
+ .debug_info 0x000006ad 0x25e SSD1306demo.o
+ .debug_info 0x0000090b 0xde c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/avr35\libgcc.a(_exit.o)
+ .debug_info 0x000009e9 0xde c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/avr35\libgcc.a(_copy_data.o)
+ .debug_info 0x00000ac7 0xde c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/avr35\libgcc.a(_clear_bss.o)
+ .debug_info 0x00000ba5 0x120 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libc.a(rand.o)
+ .debug_info 0x00000cc5 0xde c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/avr35\libgcc.a(_mulsi3.o)
+ .debug_info 0x00000da3 0xde c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/avr35\libgcc.a(_divmodsi4.o)
+ .debug_info 0x00000e81 0xde c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/avr35\libgcc.a(_udivmodsi4.o)
+ *(.gnu.linkonce.wi.*)
+
+.debug_abbrev 0x00000000 0x50c
+ *(.debug_abbrev)
+ .debug_abbrev 0x00000000 0x265 ss1306.o
+ .debug_abbrev 0x00000265 0x162 SSD1306demo.o
+ .debug_abbrev 0x000003c7 0x14 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/avr35\libgcc.a(_exit.o)
+ .debug_abbrev 0x000003db 0x14 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/avr35\libgcc.a(_copy_data.o)
+ .debug_abbrev 0x000003ef 0x14 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/avr35\libgcc.a(_clear_bss.o)
+ .debug_abbrev 0x00000403 0xcd c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libc.a(rand.o)
+ .debug_abbrev 0x000004d0 0x14 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/avr35\libgcc.a(_mulsi3.o)
+ .debug_abbrev 0x000004e4 0x14 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/avr35\libgcc.a(_divmodsi4.o)
+ .debug_abbrev 0x000004f8 0x14 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/avr35\libgcc.a(_udivmodsi4.o)
+
+.debug_line 0x00000000 0x8e5
+ *(.debug_line)
+ .debug_line 0x00000000 0x30b ss1306.o
+ .debug_line 0x0000030b 0x1ba SSD1306demo.o
+ .debug_line 0x000004c5 0x88 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/avr35\libgcc.a(_exit.o)
+ .debug_line 0x0000054d 0x91 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/avr35\libgcc.a(_copy_data.o)
+ .debug_line 0x000005de 0x8e c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/avr35\libgcc.a(_clear_bss.o)
+ .debug_line 0x0000066c 0x91 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libc.a(rand.o)
+ .debug_line 0x000006fd 0x9f c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/avr35\libgcc.a(_mulsi3.o)
+ .debug_line 0x0000079c 0xa1 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/avr35\libgcc.a(_divmodsi4.o)
+ .debug_line 0x0000083d 0xa8 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/avr35\libgcc.a(_udivmodsi4.o)
+
+.debug_frame 0x00000000 0x310
+ *(.debug_frame)
+ .debug_frame 0x00000000 0x254 ss1306.o
+ .debug_frame 0x00000254 0x34 SSD1306demo.o
+ .debug_frame 0x00000288 0x88 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libc.a(rand.o)
+
+.debug_str 0x00000000 0x31a
+ *(.debug_str)
+ .debug_str 0x00000000 0x25a ss1306.o
+ 0x2aa (size before relaxing)
+ .debug_str 0x0000025a 0x51 SSD1306demo.o
+ 0x170 (size before relaxing)
+ .debug_str 0x000002ab 0x6f c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libc.a(rand.o)
+ 0xa8 (size before relaxing)
+
+.debug_loc 0x00000000 0xaed
+ *(.debug_loc)
+ .debug_loc 0x00000000 0x8af ss1306.o
+ .debug_loc 0x000008af 0xcb SSD1306demo.o
+ .debug_loc 0x0000097a 0x173 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libc.a(rand.o)
+
+.debug_macinfo
+ *(.debug_macinfo)
+OUTPUT(SSD1306demo.elf elf32-avr)
+LOAD linker stubs
+
+.debug_ranges 0x00000000 0x40
+ .debug_ranges 0x00000000 0x18 ss1306.o
+ .debug_ranges 0x00000018 0x28 c:/program files (x86)/atmel/atmel studio 6.0/extensions/atmel/avrgcc/3.4.0.65/avrtoolchain/bin/../lib/gcc/avr/4.6.2/../../../../avr/lib/avr35\libc.a(rand.o)
View
BIN  SSD1306demo/Debug/SSD1306demo.o
Binary file not shown
View
8 SSD1306demo/Debug/makedep.mk
@@ -0,0 +1,8 @@
+################################################################################
+# Automatically-generated file. Do not edit or delete the file
+################################################################################
+
+ss1306.c
+
+SSD1306demo.c
+
View
56 SSD1306demo/Debug/ss1306.d
@@ -0,0 +1,56 @@
+ss1306.d ss1306.o: .././ss1306.c \
+ c:\program\ files\ (x86)\atmel\atmel\ studio\ 6.0\extensions\atmel\avrgcc\3.4.0.65\avrtoolchain\bin\../lib/gcc/avr/4.6.2/../../../../avr/include/avr/io.h \
+ c:\program\ files\ (x86)\atmel\atmel\ studio\ 6.0\extensions\atmel\avrgcc\3.4.0.65\avrtoolchain\bin\../lib/gcc/avr/4.6.2/../../../../avr/include/avr/sfr_defs.h \
+ c:\program\ files\ (x86)\atmel\atmel\ studio\ 6.0\extensions\atmel\avrgcc\3.4.0.65\avrtoolchain\bin\../lib/gcc/avr/4.6.2/../../../../avr/include/inttypes.h \
+ c:\program\ files\ (x86)\atmel\atmel\ studio\ 6.0\extensions\atmel\avrgcc\3.4.0.65\avrtoolchain\bin\../lib/gcc/avr/4.6.2/include/stdint.h \
+ c:\program\ files\ (x86)\atmel\atmel\ studio\ 6.0\extensions\atmel\avrgcc\3.4.0.65\avrtoolchain\bin\../lib/gcc/avr/4.6.2/../../../../avr/include/stdint.h \
+ c:\program\ files\ (x86)\atmel\atmel\ studio\ 6.0\extensions\atmel\avrgcc\3.4.0.65\avrtoolchain\bin\../lib/gcc/avr/4.6.2/../../../../avr/include/avr/iotn1634.h \
+ c:\program\ files\ (x86)\atmel\atmel\ studio\ 6.0\extensions\atmel\avrgcc\3.4.0.65\avrtoolchain\bin\../lib/gcc/avr/4.6.2/../../../../avr/include/avr/portpins.h \
+ c:\program\ files\ (x86)\atmel\atmel\ studio\ 6.0\extensions\atmel\avrgcc\3.4.0.65\avrtoolchain\bin\../lib/gcc/avr/4.6.2/../../../../avr/include/avr/common.h \
+ c:\program\ files\ (x86)\atmel\atmel\ studio\ 6.0\extensions\atmel\avrgcc\3.4.0.65\avrtoolchain\bin\../lib/gcc/avr/4.6.2/../../../../avr/include/avr/version.h \
+ c:\program\ files\ (x86)\atmel\atmel\ studio\ 6.0\extensions\atmel\avrgcc\3.4.0.65\avrtoolchain\bin\../lib/gcc/avr/4.6.2/../../../../avr/include/avr/fuse.h \
+ c:\program\ files\ (x86)\atmel\atmel\ studio\ 6.0\extensions\atmel\avrgcc\3.4.0.65\avrtoolchain\bin\../lib/gcc/avr/4.6.2/../../../../avr/include/avr/lock.h \
+ c:\program\ files\ (x86)\atmel\atmel\ studio\ 6.0\extensions\atmel\avrgcc\3.4.0.65\avrtoolchain\bin\../lib/gcc/avr/4.6.2/../../../../avr/include/avr/pgmspace.h \
+ c:\program\ files\ (x86)\atmel\atmel\ studio\ 6.0\extensions\atmel\avrgcc\3.4.0.65\avrtoolchain\bin\../lib/gcc/avr/4.6.2/include/stddef.h \
+ c:\program\ files\ (x86)\atmel\atmel\ studio\ 6.0\extensions\atmel\avrgcc\3.4.0.65\avrtoolchain\bin\../lib/gcc/avr/4.6.2/../../../../avr/include/util/delay.h \
+ c:\program\ files\ (x86)\atmel\atmel\ studio\ 6.0\extensions\atmel\avrgcc\3.4.0.65\avrtoolchain\bin\../lib/gcc/avr/4.6.2/../../../../avr/include/util/delay_basic.h \
+ c:\program\ files\ (x86)\atmel\atmel\ studio\ 6.0\extensions\atmel\avrgcc\3.4.0.65\avrtoolchain\bin\../lib/gcc/avr/4.6.2/../../../../avr/include/math.h \
+ .././ss1306-config.h .././ss1306.h .././c64_lower.h
+
+c:\program\ files\ (x86)\atmel\atmel\ studio\ 6.0\extensions\atmel\avrgcc\3.4.0.65\avrtoolchain\bin\../lib/gcc/avr/4.6.2/../../../../avr/include/avr/io.h:
+
+c:\program\ files\ (x86)\atmel\atmel\ studio\ 6.0\extensions\atmel\avrgcc\3.4.0.65\avrtoolchain\bin\../lib/gcc/avr/4.6.2/../../../../avr/include/avr/sfr_defs.h:
+
+c:\program\ files\ (x86)\atmel\atmel\ studio\ 6.0\extensions\atmel\avrgcc\3.4.0.65\avrtoolchain\bin\../lib/gcc/avr/4.6.2/../../../../avr/include/inttypes.h:
+
+c:\program\ files\ (x86)\atmel\atmel\ studio\ 6.0\extensions\atmel\avrgcc\3.4.0.65\avrtoolchain\bin\../lib/gcc/avr/4.6.2/include/stdint.h:
+
+c:\program\ files\ (x86)\atmel\atmel\ studio\ 6.0\extensions\atmel\avrgcc\3.4.0.65\avrtoolchain\bin\../lib/gcc/avr/4.6.2/../../../../avr/include/stdint.h:
+
+c:\program\ files\ (x86)\atmel\atmel\ studio\ 6.0\extensions\atmel\avrgcc\3.4.0.65\avrtoolchain\bin\../lib/gcc/avr/4.6.2/../../../../avr/include/avr/iotn1634.h:
+
+c:\program\ files\ (x86)\atmel\atmel\ studio\ 6.0\extensions\atmel\avrgcc\3.4.0.65\avrtoolchain\bin\../lib/gcc/avr/4.6.2/../../../../avr/include/avr/portpins.h:
+
+c:\program\ files\ (x86)\atmel\atmel\ studio\ 6.0\extensions\atmel\avrgcc\3.4.0.65\avrtoolchain\bin\../lib/gcc/avr/4.6.2/../../../../avr/include/avr/common.h:
+
+c:\program\ files\ (x86)\atmel\atmel\ studio\ 6.0\extensions\atmel\avrgcc\3.4.0.65\avrtoolchain\bin\../lib/gcc/avr/4.6.2/../../../../avr/include/avr/version.h:
+
+c:\program\ files\ (x86)\atmel\atmel\ studio\ 6.0\extensions\atmel\avrgcc\3.4.0.65\avrtoolchain\bin\../lib/gcc/avr/4.6.2/../../../../avr/include/avr/fuse.h:
+
+c:\program\ files\ (x86)\atmel\atmel\ studio\ 6.0\extensions\atmel\avrgcc\3.4.0.65\avrtoolchain\bin\../lib/gcc/avr/4.6.2/../../../../avr/include/avr/lock.h:
+
+c:\program\ files\ (x86)\atmel\atmel\ studio\ 6.0\extensions\atmel\avrgcc\3.4.0.65\avrtoolchain\bin\../lib/gcc/avr/4.6.2/../../../../avr/include/avr/pgmspace.h:
+
+c:\program\ files\ (x86)\atmel\atmel\ studio\ 6.0\extensions\atmel\avrgcc\3.4.0.65\avrtoolchain\bin\../lib/gcc/avr/4.6.2/include/stddef.h:
+
+c:\program\ files\ (x86)\atmel\atmel\ studio\ 6.0\extensions\atmel\avrgcc\3.4.0.65\avrtoolchain\bin\../lib/gcc/avr/4.6.2/../../../../avr/include/util/delay.h:
+
+c:\program\ files\ (x86)\atmel\atmel\ studio\ 6.0\extensions\atmel\avrgcc\3.4.0.65\avrtoolchain\bin\../lib/gcc/avr/4.6.2/../../../../avr/include/util/delay_basic.h:
+
+c:\program\ files\ (x86)\atmel\atmel\ studio\ 6.0\extensions\atmel\avrgcc\3.4.0.65\avrtoolchain\bin\../lib/gcc/avr/4.6.2/../../../../avr/include/math.h:
+
+.././ss1306-config.h:
+
+.././ss1306.h:
+
+.././c64_lower.h:
View
BIN  SSD1306demo/Debug/ss1306.o
Binary file not shown
View
56 SSD1306demo/Debug/ssd1306-bitbang.d
@@ -0,0 +1,56 @@
+ssd1306-bitbang.d ssd1306-bitbang.o: .././ssd1306-bitbang.c \
+ c:\program\ files\ (x86)\atmel\atmel\ studio\ 6.0\extensions\atmel\avrgcc\3.4.0.65\avrtoolchain\bin\../lib/gcc/avr/4.6.2/../../../../avr/include/avr/io.h \
+ c:\program\ files\ (x86)\atmel\atmel\ studio\ 6.0\extensions\atmel\avrgcc\3.4.0.65\avrtoolchain\bin\../lib/gcc/avr/4.6.2/../../../../avr/include/avr/sfr_defs.h \
+ c:\program\ files\ (x86)\atmel\atmel\ studio\ 6.0\extensions\atmel\avrgcc\3.4.0.65\avrtoolchain\bin\../lib/gcc/avr/4.6.2/../../../../avr/include/inttypes.h \
+ c:\program\ files\ (x86)\atmel\atmel\ studio\ 6.0\extensions\atmel\avrgcc\3.4.0.65\avrtoolchain\bin\../lib/gcc/avr/4.6.2/include/stdint.h \
+ c:\program\ files\ (x86)\atmel\atmel\ studio\ 6.0\extensions\atmel\avrgcc\3.4.0.65\avrtoolchain\bin\../lib/gcc/avr/4.6.2/../../../../avr/include/stdint.h \
+ c:\program\ files\ (x86)\atmel\atmel\ studio\ 6.0\extensions\atmel\avrgcc\3.4.0.65\avrtoolchain\bin\../lib/gcc/avr/4.6.2/../../../../avr/include/avr/iotn1634.h \
+ c:\program\ files\ (x86)\atmel\atmel\ studio\ 6.0\extensions\atmel\avrgcc\3.4.0.65\avrtoolchain\bin\../lib/gcc/avr/4.6.2/../../../../avr/include/avr/portpins.h \
+ c:\program\ files\ (x86)\atmel\atmel\ studio\ 6.0\extensions\atmel\avrgcc\3.4.0.65\avrtoolchain\bin\../lib/gcc/avr/4.6.2/../../../../avr/include/avr/common.h \
+ c:\program\ files\ (x86)\atmel\atmel\ studio\ 6.0\extensions\atmel\avrgcc\3.4.0.65\avrtoolchain\bin\../lib/gcc/avr/4.6.2/../../../../avr/include/avr/version.h \
+ c:\program\ files\ (x86)\atmel\atmel\ studio\ 6.0\extensions\atmel\avrgcc\3.4.0.65\avrtoolchain\bin\../lib/gcc/avr/4.6.2/../../../../avr/include/avr/fuse.h \
+ c:\program\ files\ (x86)\atmel\atmel\ studio\ 6.0\extensions\atmel\avrgcc\3.4.0.65\avrtoolchain\bin\../lib/gcc/avr/4.6.2/../../../../avr/include/avr/lock.h \
+ c:\program\ files\ (x86)\atmel\atmel\ studio\ 6.0\extensions\atmel\avrgcc\3.4.0.65\avrtoolchain\bin\../lib/gcc/avr/4.6.2/../../../../avr/include/avr/pgmspace.h \
+ c:\program\ files\ (x86)\atmel\atmel\ studio\ 6.0\extensions\atmel\avrgcc\3.4.0.65\avrtoolchain\bin\../lib/gcc/avr/4.6.2/include/stddef.h \
+ c:\program\ files\ (x86)\atmel\atmel\ studio\ 6.0\extensions\atmel\avrgcc\3.4.0.65\avrtoolchain\bin\../lib/gcc/avr/4.6.2/../../../../avr/include/util/delay.h \
+ c:\program\ files\ (x86)\atmel\atmel\ studio\ 6.0\extensions\atmel\avrgcc\3.4.0.65\avrtoolchain\bin\../lib/gcc/avr/4.6.2/../../../../avr/include/util/delay_basic.h \
+ c:\program\ files\ (x86)\atmel\atmel\ studio\ 6.0\extensions\atmel\avrgcc\3.4.0.65\avrtoolchain\bin\../lib/gcc/avr/4.6.2/../../../../avr/include/math.h \
+ .././ssd1306-config.h .././ssd1306-bitbang.h .././c64_lower.h
+
+c:\program\ files\ (x86)\atmel\atmel\ studio\ 6.0\extensions\atmel\avrgcc\3.4.0.65\avrtoolchain\bin\../lib/gcc/avr/4.6.2/../../../../avr/include/avr/io.h:
+
+c:\program\ files\ (x86)\atmel\atmel\ studio\ 6.0\extensions\atmel\avrgcc\3.4.0.65\avrtoolchain\bin\../lib/gcc/avr/4.6.2/../../../../avr/include/avr/sfr_defs.h:
+
+c:\program\ files\ (x86)\atmel\atmel\ studio\ 6.0\extensions\atmel\avrgcc\3.4.0.65\avrtoolchain\bin\../lib/gcc/avr/4.6.2/../../../../avr/include/inttypes.h:
+
+c:\program\ files\ (x86)\atmel\atmel\ studio\ 6.0\extensions\atmel\avrgcc\3.4.0.65\avrtoolchain\bin\../lib/gcc/avr/4.6.2/include/stdint.h:
+
+c:\program\ files\ (x86)\atmel\atmel\ studio\ 6.0\extensions\atmel\avrgcc\3.4.0.65\avrtoolchain\bin\../lib/gcc/avr/4.6.2/../../../../avr/include/stdint.h:
+
+c:\program\ files\ (x86)\atmel\atmel\ studio\ 6.0\extensions\atmel\avrgcc\3.4.0.65\avrtoolchain\bin\../lib/gcc/avr/4.6.2/../../../../avr/include/avr/iotn1634.h:
+
+c:\program\ files\ (x86)\atmel\atmel\ studio\ 6.0\extensions\atmel\avrgcc\3.4.0.65\avrtoolchain\bin\../lib/gcc/avr/4.6.2/../../../../avr/include/avr/portpins.h:
+
+c:\program\ files\ (x86)\atmel\atmel\ studio\ 6.0\extensions\atmel\avrgcc\3.4.0.65\avrtoolchain\bin\../lib/gcc/avr/4.6.2/../../../../avr/include/avr/common.h:
+
+c:\program\ files\ (x86)\atmel\atmel\ studio\ 6.0\extensions\atmel\avrgcc\3.4.0.65\avrtoolchain\bin\../lib/gcc/avr/4.6.2/../../../../avr/include/avr/version.h:
+
+c:\program\ files\ (x86)\atmel\atmel\ studio\ 6.0\extensions\atmel\avrgcc\3.4.0.65\avrtoolchain\bin\../lib/gcc/avr/4.6.2/../../../../avr/include/avr/fuse.h:
+
+c:\program\ files\ (x86)\atmel\atmel\ studio\ 6.0\extensions\atmel\avrgcc\3.4.0.65\avrtoolchain\bin\../lib/gcc/avr/4.6.2/../../../../avr/include/avr/lock.h:
+
+c:\program\ files\ (x86)\atmel\atmel\ studio\ 6.0\extensions\atmel\avrgcc\3.4.0.65\avrtoolchain\bin\../lib/gcc/avr/4.6.2/../../../../avr/include/avr/pgmspace.h:
+
+c:\program\ files\ (x86)\atmel\atmel\ studio\ 6.0\extensions\atmel\avrgcc\3.4.0.65\avrtoolchain\bin\../lib/gcc/avr/4.6.2/include/stddef.h:
+
+c:\program\ files\ (x86)\atmel\atmel\ studio\ 6.0\extensions\atmel\avrgcc\3.4.0.65\avrtoolchain\bin\../lib/gcc/avr/4.6.2/../../../../avr/include/util/delay.h:
+
+c:\program\ files\ (x86)\atmel\atmel\ studio\ 6.0\extensions\atmel\avrgcc\3.4.0.65\avrtoolchain\bin\../lib/gcc/avr/4.6.2/../../../../avr/include/util/delay_basic.h:
+
+c:\program\ files\ (x86)\atmel\atmel\ studio\ 6.0\extensions\atmel\avrgcc\3.4.0.65\avrtoolchain\bin\../lib/gcc/avr/4.6.2/../../../../avr/include/math.h:
+
+.././ssd1306-config.h:
+
+.././ssd1306-bitbang.h:
+
+.././c64_lower.h:
View
BIN  SSD1306demo/Debug/ssd1306-bitbang.o
Binary file not shown
View
9 SSD1306demo/LICENSE
@@ -0,0 +1,9 @@
+Copyright (c) 2013, kmm+smallscaleresearch
+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 the author nor the names of contributors may be used to endorse or promote products derived from this software without specific prior written permission.
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 THE COPYRIGHT HOLDER OR CONTRIBUTORS 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.
View
90 SSD1306demo/SSD1306demo.c
@@ -0,0 +1,90 @@
+/*
+ * SSD1306demo.c
+ *
+ * Created: 4/29/2013 7:10:21 PM
+ * Author: kmm
+ */
+
+#define F_CPU 9000000
+#include <avr/io.h>
+#include <util/delay.h>
+#include <avr/pgmspace.h>
+#include <stdlib.h>
+#include "ss1306-config.h"
+#include "ss1306.h"
+#include "nyan.h"
+
+const uint8_t sine_table[64] PROGMEM = {
+ 128, 140, 152, 165, 176, 188, 198, 208,
+ 218, 226, 234, 240, 245, 250, 253, 254,
+ 255, 254, 253, 250, 245, 240, 234, 226,
+ 218, 208, 198, 188, 176, 165, 152, 140,
+ 128, 115, 103, 90, 79, 67, 57, 47,
+ 37, 29, 21, 15, 10, 5, 2, 1,
+ 0, 1, 2, 5, 10, 15, 21, 29,
+ 37, 47, 57, 67, 79, 90, 103, 115
+};
+
+struct vec2f {
+ float x;
+ float y;
+} ball_pos, ball_vel;
+
+float grav = 0.1;
+
+int main(void)
+{
+ DDRB |= SS1306_OLED_PORTB_MASK;
+ DDRC |= SS1306_OLED_PORTC_MASK;
+
+ oled_init();
+ oled_clear();
+ uint8_t shift = 0;
+ uint8_t ctr = 0;
+ uint8_t px = 0, py = 0;
+ uint8_t blank[] = {0, 0, 0, 0, 0, 0, 0, 0};
+ uint8_t ball[] = {0x00, 0x3C, 0x7E, 0x7E, 0x7E, 0x7E, 0x3C, 0x00};
+ ball_pos.x = (float)(rand() >> 26);
+ ball_pos.y = 0;
+ ball_vel.x = (5.0F / (rand() & 0xFF)) + 2.5;
+
+ while(1)
+ {
+ ball_vel.y += grav;
+ ball_pos.x += ball_vel.x;
+ ball_pos.y += ball_vel.y;
+ uint8_t x = (uint8_t)ball_pos.x;
+ uint8_t y = (uint8_t)ball_pos.y;
+
+ oled_move(7, 0);
+ oled_puts("STRAIGHT BALLIN'");
+
+ oled_putxy(px, py, &blank);
+ oled_putxy(x, y, &ball);
+ px = x;
+ py = y;
+
+ if(ball_pos.x > SS1306_OLED_GEOM_W - 8) {
+ ball_pos.x = SS1306_OLED_GEOM_W - 8;
+ ball_vel.x *= -1;
+ }
+ else if(ball_pos.x < 0) {
+ ball_pos.x = 0;
+ ball_vel.x *= -1;
+ }
+
+ if(ball_pos.y > SS1306_OLED_GEOM_H - 8) {
+ ball_pos.y = SS1306_OLED_GEOM_H - 8;
+ ball_vel.y *= -0.8;
+ }
+ else if(ball_pos.y < 0) {
+ ball_pos.y = 0;
+ ball_vel.y *= -0.8;
+ }
+
+ if(ball_pos.y >= SS1306_OLED_GEOM_H - 8 && ball_pos.x <= 0) {
+ ball_vel.y = -3.0;
+ }
+ _delay_ms(10);
+ }
+}
View
87 SSD1306demo/SSD1306demo.cproj
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <PropertyGroup>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectVersion>6.0</ProjectVersion>
+ <ToolchainName>com.Atmel.AVRGCC8</ToolchainName>
+ <ProjectGuid>{5a09a9ae-afec-45ce-ab9a-f15dbdf0bb75}</ProjectGuid>
+ <avrdevice>ATtiny1634</avrdevice>
+ <avrdeviceseries>none</avrdeviceseries>
+ <OutputType>Executable</OutputType>
+ <Language>C</Language>
+ <OutputFileName>$(MSBuildProjectName)</OutputFileName>
+ <OutputFileExtension>.elf</OutputFileExtension>
+ <OutputDirectory>$(MSBuildProjectDirectory)\$(Configuration)</OutputDirectory>
+ <AssemblyName>SSD1306demo</AssemblyName>
+ <Name>SSD1306demo</Name>
+ <RootNamespace>SSD1306demo</RootNamespace>
+ <ToolchainFlavour>Native</ToolchainFlavour>
+ <KeepTimersRunning>true</KeepTimersRunning>
+ <OverrideVtor>false</OverrideVtor>
+ <OverrideVtorValue />
+ <eraseonlaunchrule>0</eraseonlaunchrule>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
+ <ToolchainSettings>
+ <AvrGcc>
+ <avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>
+ <avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>
+ <avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>
+ <avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>
+ <avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>
+ <avrgcc.compiler.optimization.level>Optimize for size (-Os)</avrgcc.compiler.optimization.level>
+ <avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>
+ <avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>
+ <avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>
+ <avrgcc.linker.libraries.Libraries>
+ <ListValues>
+ <Value>m</Value>
+ </ListValues>
+ </avrgcc.linker.libraries.Libraries>
+</AvrGcc>
+ </ToolchainSettings>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
+ <ToolchainSettings>
+ <AvrGcc>
+ <avrgcc.common.outputfiles.hex>True</avrgcc.common.outputfiles.hex>
+ <avrgcc.common.outputfiles.lss>True</avrgcc.common.outputfiles.lss>
+ <avrgcc.common.outputfiles.eep>True</avrgcc.common.outputfiles.eep>
+ <avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>True</avrgcc.compiler.general.ChangeDefaultCharTypeUnsigned>
+ <avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>True</avrgcc.compiler.general.ChangeDefaultBitFieldUnsigned>
+ <avrgcc.compiler.optimization.level>Optimize (-O1)</avrgcc.compiler.optimization.level>
+ <avrgcc.compiler.optimization.PackStructureMembers>True</avrgcc.compiler.optimization.PackStructureMembers>
+ <avrgcc.compiler.optimization.AllocateBytesNeededForEnum>True</avrgcc.compiler.optimization.AllocateBytesNeededForEnum>
+ <avrgcc.compiler.optimization.DebugLevel>Default (-g2)</avrgcc.compiler.optimization.DebugLevel>
+ <avrgcc.compiler.warnings.AllWarnings>True</avrgcc.compiler.warnings.AllWarnings>
+ <avrgcc.linker.libraries.Libraries>
+ <ListValues>
+ <Value>m</Value>
+ </ListValues>
+ </avrgcc.linker.libraries.Libraries>
+ <avrgcc.assembler.debugging.DebugLevel>Default (-Wa,-g)</avrgcc.assembler.debugging.DebugLevel>
+</AvrGcc>
+ </ToolchainSettings>
+ </PropertyGroup>
+ <ItemGroup>
+ <Compile Include="c64_lower.h">
+ <SubType>compile</SubType>
+ </Compile>
+ <Compile Include="nyan.h">
+ <SubType>compile</SubType>
+ </Compile>
+ <Compile Include="ss1306.c">
+ <SubType>compile</SubType>
+ </Compile>
+ <Compile Include="ss1306.h">
+ <SubType>compile</SubType>
+ </Compile>
+ <Compile Include="ss1306-config.h">
+ <SubType>compile</SubType>
+ </Compile>
+ <Compile Include="SSD1306demo.c">
+ <SubType>compile</SubType>
+ </Compile>
+ </ItemGroup>
+ <Import Project="$(AVRSTUDIO_EXE_PATH)\\Vs\\Compiler.targets" />
+</Project>
View
135 SSD1306demo/c64_lower.h
@@ -0,0 +1,135 @@
+
+// Font: c64_lower.64c
+
+const unsigned char font[1024] PROGMEM =
+{
+ 0x00, 0x3E, 0x7F, 0x41, 0x4D, 0x4F, 0x2E, 0x00, // Char 000 (.)
+ 0x00, 0x20, 0x74, 0x54, 0x54, 0x7C, 0x78, 0x00, // Char 001 (.)
+ 0x00, 0x7E, 0x7E, 0x48, 0x48, 0x78, 0x30, 0x00, // Char 002 (.)
+ 0x00, 0x38, 0x7C, 0x44, 0x44, 0x44, 0x00, 0x00, // Char 003 (.)
+ 0x00, 0x30, 0x78, 0x48, 0x48, 0x7E, 0x7E, 0x00, // Char 004 (.)
+ 0x00, 0x38, 0x7C, 0x54, 0x54, 0x5C, 0x18, 0x00, // Char 005 (.)
+ 0x00, 0x00, 0x08, 0x7C, 0x7E, 0x0A, 0x0A, 0x00, // Char 006 (.)
+ 0x00, 0x98, 0xBC, 0xA4, 0xA4, 0xFC, 0x7C, 0x00, // Char 007 (.)
+ 0x00, 0x7E, 0x7E, 0x08, 0x08, 0x78, 0x70, 0x00, // Char 008 (.)
+ 0x00, 0x00, 0x48, 0x7A, 0x7A, 0x40, 0x00, 0x00, // Char 009 (.)
+ 0x00, 0x00, 0x80, 0x80, 0x80, 0xFA, 0x7A, 0x00, // Char 010 (.)
+ 0x00, 0x7E, 0x7E, 0x10, 0x38, 0x68, 0x40, 0x00, // Char 011 (.)
+ 0x00, 0x00, 0x42, 0x7E, 0x7E, 0x40, 0x00, 0x00, // Char 012 (.)
+ 0x00, 0x7C, 0x7C, 0x18, 0x38, 0x1C, 0x7C, 0x78, // Char 013 (.)
+ 0x00, 0x7C, 0x7C, 0x04, 0x04, 0x7C, 0x78, 0x00, // Char 014 (.)
+ 0x00, 0x38, 0x7C, 0x44, 0x44, 0x7C, 0x38, 0x00, // Char 015 (.)
+ 0x00, 0xFC, 0xFC, 0x24, 0x24, 0x3C, 0x18, 0x00, // Char 016 (.)
+ 0x00, 0x18, 0x3C, 0x24, 0x24, 0xFC, 0xFC, 0x00, // Char 017 (.)
+ 0x00, 0x7C, 0x7C, 0x04, 0x04, 0x0C, 0x08, 0x00, // Char 018 (.)
+ 0x00, 0x48, 0x5C, 0x54, 0x54, 0x74, 0x24, 0x00, // Char 019 (.)
+ 0x00, 0x04, 0x04, 0x3E, 0x7E, 0x44, 0x44, 0x00, // Char 020 (.)
+ 0x00, 0x3C, 0x7C, 0x40, 0x40, 0x7C, 0x7C, 0x00, // Char 021 (.)
+ 0x00, 0x1C, 0x3C, 0x60, 0x60, 0x3C, 0x1C, 0x00, // Char 022 (.)
+ 0x00, 0x1C, 0x7C, 0x70, 0x38, 0x70, 0x7C, 0x1C, // Char 023 (.)
+ 0x00, 0x44, 0x6C, 0x38, 0x38, 0x6C, 0x44, 0x00, // Char 024 (.)
+ 0x00, 0x9C, 0xBC, 0xA0, 0xE0, 0x7C, 0x3C, 0x00, // Char 025 (.)
+ 0x00, 0x44, 0x64, 0x74, 0x5C, 0x4C, 0x44, 0x00, // Char 026 (.)
+ 0x00, 0x00, 0x7F, 0x7F, 0x41, 0x41, 0x00, 0x00, // Char 027 (.)
+ 0x40, 0x68, 0x7C, 0x5E, 0x49, 0x49, 0x22, 0x00, // Char 028 (.)
+ 0x00, 0x00, 0x41, 0x41, 0x7F, 0x7F, 0x00, 0x00, // Char 029 (.)
+ 0x00, 0x08, 0x0C, 0xFE, 0xFE, 0x0C, 0x08, 0x00, // Char 030 (.)
+ 0x00, 0x18, 0x3C, 0x7E, 0x18, 0x18, 0x18, 0x18, // Char 031 (.)
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Char 032 ( )
+ 0x00, 0x00, 0x00, 0x4F, 0x4F, 0x00, 0x00, 0x00, // Char 033 (!)
+ 0x00, 0x07, 0x07, 0x00, 0x00, 0x07, 0x07, 0x00, // Char 034 (")
+ 0x14, 0x7F, 0x7F, 0x14, 0x14, 0x7F, 0x7F, 0x14, // Char 035 (#)
+ 0x00, 0x24, 0x2E, 0x6B, 0x6B, 0x3A, 0x12, 0x00, // Char 036 ($)
+ 0x00, 0x63, 0x33, 0x18, 0x0C, 0x66, 0x63, 0x00, // Char 037 (%)
+ 0x00, 0x32, 0x7F, 0x4D, 0x4D, 0x77, 0x72, 0x50, // Char 038 (&)
+ 0x00, 0x00, 0x00, 0x04, 0x06, 0x03, 0x01, 0x00, // Char 039 (')
+ 0x00, 0x00, 0x1C, 0x3E, 0x63, 0x41, 0x00, 0x00, // Char 040 (()
+ 0x00, 0x00, 0x41, 0x63, 0x3E, 0x1C, 0x00, 0x00, // Char 041 ())
+ 0x08, 0x2A, 0x3E, 0x1C, 0x1C, 0x3E, 0x2A, 0x08, // Char 042 (*)
+ 0x00, 0x08, 0x08, 0x3E, 0x3E, 0x08, 0x08, 0x00, // Char 043 (+)
+ 0x00, 0x00, 0x80, 0xE0, 0x60, 0x00, 0x00, 0x00, // Char 044 (,)
+ 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, // Char 045 (-)
+ 0x00, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x00, // Char 046 (.)
+ 0x00, 0x40, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x02, // Char 047 (/)
+ 0x00, 0x3E, 0x7F, 0x49, 0x45, 0x7F, 0x3E, 0x00, // Char 048 (0)
+ 0x00, 0x40, 0x44, 0x7F, 0x7F, 0x40, 0x40, 0x00, // Char 049 (1)
+ 0x00, 0x62, 0x73, 0x51, 0x49, 0x4F, 0x46, 0x00, // Char 050 (2)
+ 0x00, 0x22, 0x63, 0x49, 0x49, 0x7F, 0x36, 0x00, // Char 051 (3)
+ 0x00, 0x18, 0x18, 0x14, 0x16, 0x7F, 0x7F, 0x10, // Char 052 (4)
+ 0x00, 0x27, 0x67, 0x45, 0x45, 0x7D, 0x39, 0x00, // Char 053 (5)
+ 0x00, 0x3E, 0x7F, 0x49, 0x49, 0x7B, 0x32, 0x00, // Char 054 (6)
+ 0x00, 0x03, 0x03, 0x79, 0x7D, 0x07, 0x03, 0x00, // Char 055 (7)
+ 0x00, 0x36, 0x7F, 0x49, 0x49, 0x7F, 0x36, 0x00, // Char 056 (8)
+ 0x00, 0x26, 0x6F, 0x49, 0x49, 0x7F, 0x3E, 0x00, // Char 057 (9)
+ 0x00, 0x00, 0x00, 0x24, 0x24, 0x00, 0x00, 0x00, // Char 058 (:)
+ 0x00, 0x00, 0x80, 0xE4, 0x64, 0x00, 0x00, 0x00, // Char 059 (;)
+ 0x00, 0x08, 0x1C, 0x36, 0x63, 0x41, 0x41, 0x00, // Char 060 (<)
+ 0x00, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x00, // Char 061 (=)
+ 0x00, 0x41, 0x41, 0x63, 0x36, 0x1C, 0x08, 0x00, // Char 062 (>)
+ 0x00, 0x02, 0x03, 0x51, 0x59, 0x0F, 0x06, 0x00, // Char 063 (?)
+ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, // Char 064 (@)
+ 0x00, 0x7C, 0x7E, 0x0B, 0x0B, 0x7E, 0x7C, 0x00, // Char 065 (A)
+ 0x00, 0x7F, 0x7F, 0x49, 0x49, 0x7F, 0x36, 0x00, // Char 066 (B)
+ 0x00, 0x3E, 0x7F, 0x41, 0x41, 0x63, 0x22, 0x00, // Char 067 (C)
+ 0x00, 0x7F, 0x7F, 0x41, 0x63, 0x3E, 0x1C, 0x00, // Char 068 (D)
+ 0x00, 0x7F, 0x7F, 0x49, 0x49, 0x41, 0x41, 0x00, // Char 069 (E)
+ 0x00, 0x7F, 0x7F, 0x09, 0x09, 0x01, 0x01, 0x00, // Char 070 (F)
+ 0x00, 0x3E, 0x7F, 0x41, 0x49, 0x7B, 0x3A, 0x00, // Char 071 (G)
+ 0x00, 0x7F, 0x7F, 0x08, 0x08, 0x7F, 0x7F, 0x00, // Char 072 (H)
+ 0x00, 0x00, 0x41, 0x7F, 0x7F, 0x41, 0x00, 0x00, // Char 073 (I)
+ 0x00, 0x20, 0x60, 0x41, 0x7F, 0x3F, 0x01, 0x00, // Char 074 (J)
+ 0x00, 0x7F, 0x7F, 0x1C, 0x36, 0x63, 0x41, 0x00, // Char 075 (K)
+ 0x00, 0x7F, 0x7F, 0x40, 0x40, 0x40, 0x40, 0x00, // Char 076 (L)
+ 0x00, 0x7F, 0x7F, 0x06, 0x0C, 0x06, 0x7F, 0x7F, // Char 077 (M)
+ 0x00, 0x7F, 0x7F, 0x0E, 0x1C, 0x7F, 0x7F, 0x00, // Char 078 (N)
+ 0x00, 0x3E, 0x7F, 0x41, 0x41, 0x7F, 0x3E, 0x00, // Char 079 (O)
+ 0x00, 0x7F, 0x7F, 0x09, 0x09, 0x0F, 0x06, 0x00, // Char 080 (P)
+ 0x00, 0x1E, 0x3F, 0x21, 0x61, 0x7F, 0x5E, 0x00, // Char 081 (Q)
+ 0x00, 0x7F, 0x7F, 0x19, 0x39, 0x6F, 0x46, 0x00, // Char 082 (R)
+ 0x00, 0x26, 0x6F, 0x49, 0x49, 0x7B, 0x32, 0x00, // Char 083 (S)
+ 0x00, 0x01, 0x01, 0x7F, 0x7F, 0x01, 0x01, 0x00, // Char 084 (T)
+ 0x00, 0x3F, 0x7F, 0x40, 0x40, 0x7F, 0x3F, 0x00, // Char 085 (U)
+ 0x00, 0x1F, 0x3F, 0x60, 0x60, 0x3F, 0x1F, 0x00, // Char 086 (V)
+ 0x00, 0x7F, 0x7F, 0x30, 0x18, 0x30, 0x7F, 0x7F, // Char 087 (W)
+ 0x00, 0x63, 0x77, 0x1C, 0x1C, 0x77, 0x63, 0x00, // Char 088 (X)
+ 0x00, 0x07, 0x0F, 0x78, 0x78, 0x0F, 0x07, 0x00, // Char 089 (Y)
+ 0x00, 0x61, 0x71, 0x59, 0x4D, 0x47, 0x43, 0x00, // Char 090 (Z)
+ 0x18, 0x18, 0x18, 0xFF, 0xFF, 0x18, 0x18, 0x18, // Char 091 ([)
+ 0x33, 0x33, 0xCC, 0xCC, 0x00, 0x00, 0x00, 0x00, // Char 092 (\)
+ 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, // Char 093 (])
+ 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x00, 0x00, 0x00, // Char 094 (^)
+ 0x00, 0x00, 0x00, 0xF0, 0xF0, 0x00, 0x00, 0x00, // Char 095 (_)
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // Char 096 (`)
+ 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, // Char 097 (a)
+ 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, // Char 098 (b)
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, // Char 099 (c)
+ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, // Char 100 (d)
+ 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Char 101 (e)
+ 0x33, 0x33, 0xCC, 0xCC, 0x33, 0x33, 0xCC, 0xCC, // Char 102 (f)
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, // Char 103 (g)
+ 0x30, 0x30, 0xC0, 0xC0, 0x30, 0x30, 0xC0, 0xC0, // Char 104 (h)
+ 0x33, 0x99, 0xCC, 0x66, 0x33, 0x99, 0xCC, 0x66, // Char 105 (i)
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, // Char 106 (j)
+ 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x18, 0x18, 0x18, // Char 107 (k)
+ 0x00, 0x00, 0x00, 0x00, 0xF0, 0xF0, 0xF0, 0xF0, // Char 108 (l)
+ 0x00, 0x00, 0x00, 0x1F, 0x1F, 0x18, 0x18, 0x18, // Char 109 (m)
+ 0x18, 0x18, 0x18, 0xF8, 0xF8, 0x00, 0x00, 0x00, // Char 110 (n)
+ 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, // Char 111 (o)
+ 0x00, 0x00, 0x00, 0xF8, 0xF8, 0x18, 0x18, 0x18, // Char 112 (p)
+ 0x18, 0x18, 0x18, 0x1F, 0x1F, 0x18, 0x18, 0x18, // Char 113 (q)
+ 0x18, 0x18, 0x18, 0xF8, 0xF8, 0x18, 0x18, 0x18, // Char 114 (r)
+ 0x18, 0x18, 0x18, 0xFF, 0xFF, 0x00, 0x00, 0x00, // Char 115 (s)
+ 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Char 116 (t)
+ 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, // Char 117 (u)
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, // Char 118 (v)
+ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, // Char 119 (w)
+ 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, // Char 120 (x)
+ 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0, // Char 121 (y)
+ 0x00, 0x78, 0x78, 0x30, 0x18, 0x0C, 0x06, 0x03, // Char 122 (z)
+ 0xF0, 0xF0, 0xF0, 0xF0, 0x00, 0x00, 0x00, 0x00, // Char 123 ({)
+ 0x00, 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x0F, 0x0F, // Char 124 (|)
+ 0x18, 0x18, 0x18, 0x1F, 0x1F, 0x00, 0x00, 0x00, // Char 125 (})
+ 0x0F, 0x0F, 0x0F, 0x0F, 0x00, 0x00, 0x00, 0x00, // Char 126 (~)
+ 0x0F, 0x0F, 0x0F, 0x0F, 0xF0, 0xF0, 0xF0, 0xF0
+};
+
View
35 SSD1306demo/nyan.h
@@ -0,0 +1,35 @@
+/*
+ * IncFile1.h
+ *
+ * Created: 4/29/2013 7:07:32 PM
+ * Author: kmm
+ */
+
+
+#ifndef NYAN_H_
+#define NYAN_H_
+// nya nya nyan nya nya nyan nya
+const unsigned char nyan1[140] PROGMEM = {
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x0f,0xff,0xf8,0x00,
+ 0x00,0x00,0x00,0x1f,0xff,0xfc,0x00,
+ 0x7f,0x80,0x7f,0x9f,0xed,0xfc,0x00,
+ 0x7f,0xff,0xff,0xdd,0xff,0xfc,0x00,
+ 0x7f,0xff,0xff,0xdf,0xfc,0xdc,0x00,
+ 0x7f,0xff,0xff,0xdf,0xfb,0x7c,0xc0,
+ 0x7f,0xff,0xf0,0xdf,0xdb,0xbd,0xc0,
+ 0x7f,0xff,0xf6,0x5f,0xfb,0xc3,0xc0,
+ 0x7f,0xff,0xf3,0x1e,0xfb,0xff,0xc0,
+ 0x7f,0xff,0xf9,0x9f,0xe7,0xff,0xe0,
+ 0x7f,0xff,0xfc,0xdb,0xf7,0xbf,0x60,
+ 0x7f,0xff,0xfe,0x1f,0xf7,0x3a,0x60,
+ 0x7f,0xff,0xff,0x9f,0xb7,0xff,0xe0,
+ 0x7f,0xff,0xff,0xdd,0xf7,0xb6,0xe0,
+ 0x12,0x7f,0x92,0xdf,0xfb,0x80,0xc0,
+ 0x49,0x12,0x48,0x0f,0xfd,0xff,0x80,
+ 0x12,0x44,0x92,0x70,0x00,0x00,0x00,
+ 0x00,0x12,0x00,0x61,0x80,0xc6,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00
+};
+
+#endif /* INCFILE1_H_ */
View
24 SSD1306demo/ss1306-config.h
@@ -0,0 +1,24 @@
+/*
+ * ssd1306_config.h
+ *
+ * Created: 4/29/2013 7:11:39 PM
+ * Author: kmm
+ */
+
+
+#ifndef SS1306_CONFIG_H_
+#define SS1306_CONFIG_H_
+
+#define SS1306_OLED_GEOM_W 128
+#define SS1306_OLED_GEOM_H 64
+
+#define SS1306_OLED_CLK PC4
+#define SS1306_OLED_DAT PC5
+#define SS1306_OLED_RST PB2
+#define SS1306_OLED_DC PC1
+#define SS1306_OLED_CS PC2
+
+#define SS1306_OLED_PORTB_MASK _BV(SS1306_OLED_RST);
+#define SS1306_OLED_PORTC_MASK _BV(SS1306_OLED_CLK) | _BV(SS1306_OLED_DAT) | _BV(SS1306_OLED_DC) | _BV(SS1306_OLED_CS);
+
+#endif
View
326 SSD1306demo/ss1306.c
@@ -0,0 +1,326 @@
+/*
+ ____ ____ ____ _ __ __ ____
+/\ _`\ /\ _`\ /\ _`\ /' \ /'__`\ /'__`\ /'___\
+\ \,\L\_\ \,\L\_\ \ \/\ \/\_, \/\_\L\ \ /\ \/\ \/\ \__/
+ \/_\__ \\/_\__ \\ \ \Small Scale_/_\_<_\ \ \ \ \ \ _``\
+ /\ \L\ \/\ \L\ \ \ \_\ \ \ \ \/\ \L\ \\ \ \_\ \ \ \L\ \
+ \ `\____\ `\____\ \____/ \ \_\ \____/ \ \____/\ \____/
+ \/_____/\/_____/\/___/ \/_/\/___/ \/___/ \/___/
+
+I'll bet some SSD1306 OLED DRIVER ROUTINES would only ENHANCE my EMBEDDED DISPLAY TECHNOLOGY
+
+[!] This is my module; there are many others like it, but this one is mine.
+The module I have is a Chinese import stenciled "Long Qiu" (and not much else).
+Everything happens over a 7-pin SIP pin header labled IF2.
+Your mileage may vary with other modules. I don't have a parallel one, but rewriting oled_write to use
+a parallel bus is a trivial exercise left to the reader.
+
+[!] SSD1306 Display Memory 101
+Buffer is 8kbit (1kB) addressed with two auto-incrementable pointers as 8 pages * (128 columns * 8 bits)
+
+ Display Memory Column
+ Cols 0 -> 127
+ +---------------+ +---+
+ PAGE0 | XCCCC...CCCCC | | 0 |
+R PAGE1 | CCCCC...CCCCC | C =>|...| * 127 => PAGE
+o ... | ............. | | 7 |
+w PAGE6 | CCCCC...CCCCC | +---+
+s PAGE7 | CCCCC...CCCCC | ^--- 8 1-bit pixels per column byte, arranged vertically regardless of addressing mode
+ +---------------+
+ X => Pointer at PAGE 0, COL 0
+
+[!] Fuck yeah tile graphics
+For the purposes of oled_move(), oled_home(), oled_puts(), oled_putc() and most everything else,
+the display is a 16x8 array of 8x8 character cells. Functions expect horizontal addressing mode, other modes
+will make them act wanky. Pixels aren't really addressable; the tiny1634 doesn't have enough RAM for a local framebuffer,
+and the SPI link to the display is one way so there's no read-modify-write using the display frame buffer.
+Given the memory layout I'm reasonably certain the SSD1306 was intended to be driven, perhaps primarily, as a tile graphic display.
+
+[!] Blast from the past
+Character generator table is stored in progmem as "font", and contains 128 cells in
+PETSCII layout (i.e. you can generate them from C64 font files). Included is the canonical 8x8 C64 font,
+with a couple minor changes to make box-drawn digits look better.
+Characters are rotated 90 degrees clockwise (so we don't have to waste AVR cycles flipping tiles).
+The pointy part of an 'A' should point that way -> if you're doing it right.
+It's irritating to go alone, take this: http://www.min.at/prinz/o/software/pixelfont/
+
+[!] Fast as a (LOGO) turtle
+Despite software bit-bang and zero optimization it's more than usably fast on a 9MHz Tiny1634; I'm guessing a full repaint at over 15Hz.
+Much much faster if moving the pointers and updating incrementally (like a terminal!). Add graphic tiles and make the next-gen POPStation.
+
+[!] Cute lil feller
+Basic character display functions are less than 3k compiled, 1k of which is the 128-cell chargen data.
+Chargen can be trimmed to 288ish bytes if only the bare minimum alphanumerics are required.
+
+[!] Zero to Pixels
+> Set pin/port defs in ssd1306-config.h
+> oled_init()
+> oled_clear() // buffer is full of entropy on boot
+> oled_home() // pointers should end up here, but let's make sure
+> oled_puts("POOP") // POOP
+
+[!] We built this city in AVR studio 6 using avr-gcc
+Very little AVR-specific operations outside of the headers and PROGMEM macros, porting to PIC/ARM/HP9000/M88k/etc should be trivial.
+
+[!] See Also
+Ladyada's framebuffer-based arduinolib (c++) SSD1306 implementation: https://github.com/adafruit/Adafruit_SSD1306
+RTFM: https://www.adafruit.com/datasheets/SSD1306.pdf
+
+[!] Legal Fictions
+Original work released under terms of the BSD license.
+Included chargen/font data generated from c64_lower.64c font and used without permission.
+(Chargen data is assumed to be of negligible economic value and public domain/abandoned. Lawyer at me if you got beef.)
+
+-------------------------------------------------------------------------------
+Inspired by tile-based arcade gfx, hacked together by kmm/smallscaleresearch
+April 2013
+Contact: kmm CHR(0x40) rmlabs.net
+-------------------------------------------------------------------------------
+*/
+
+#include <avr/io.h>
+#include <avr/pgmspace.h>
+#include <util/delay.h>
+#include "ss1306-config.h"
+#include "ss1306.h"
+#include "c64_lower.h"
+
+// Low-level bit-bang SPI write routine
+// Port this bit to hardware SPI/I2C/Paralell/LVDS/PCI-E/Infiniband if you need faster transport.
+// dc arg specifies data or control buffer, 0 -> control, 1 -> data
+void oled_write(uint8_t dc, uint8_t data) {
+ // add delays to stretch bit times if needed
+ // SSD1306 needs something like 50ns hold...probably not needed unless you port this to an ARM or AVR32.
+if(dc > 0) { H(PORTC, SS1306_OLED_DC); }
+ else { L(PORTC, SS1306_OLED_DC); }
+
+ L(PORTC, SS1306_OLED_CS);
+ for(int8_t bit = 7; bit >= 0; bit--)
+ {
+ L(PORTC, SS1306_OLED_CLK);
+ if((1 << bit) & data) { H(PORTC, SS1306_OLED_DAT); }
+ else { L(PORTC, SS1306_OLED_DAT); }
+ H(PORTC, SS1306_OLED_CLK);
+ }
+ L(PORTC, SS1306_OLED_CLK);
+ H(PORTC, SS1306_OLED_CS);
+}
+
+// These defaults are for a 128x64 configuration, adapt as needed
+// seg remap, com scan, mux ratio, addr mode are suggested things to poke at
+void oled_init() {
+ L(PORTB, SS1306_OLED_RST);
+ _delay_ms(10);
+ H(PORTB, SS1306_OLED_RST);
+ _delay_ms(10);
+ oled_write(0, 0xAE); // display off
+
+ oled_write(0, 0xD5); // clock
+ oled_write(0, 0x81); // upper nibble is rate, lower nibble is divisor
+
+ oled_write(0, 0xA8); // mux ratio
+ oled_write(0, 0x3F); // rtfm
+
+ oled_write(0, 0xD3); // display offset
+ oled_write(0, 0x00); // rtfm
+ oled_write(0, 0x00);
+
+ oled_write(0, 0x8D); // charge pump
+ oled_write(0, 0x14); // enable
+
+ oled_write(0, 0x20); // memory addr mode
+ oled_write(0, 0x00); // horizontal
+
+ oled_write(0, 0xA1); // segment remap
+
+ oled_write(0, 0xA5); // display on
+
+ oled_write(0, 0xC8); // com scan direction
+ oled_write(0, 0xDA); // com hardware cfg
+ oled_write(0, 0x12); // alt com cfg
+
+ oled_write(0, 0x81); // contrast aka current
+ oled_write(0, 0x7F); // 128 is midpoint
+
+ oled_write(0, 0xD9); // precharge
+ oled_write(0, 0x11); // rtfm
+
+ oled_write(0, 0xDB); // vcomh deselect level
+ oled_write(0, 0x20); // rtfm
+
+ oled_write(0, 0xA6); // non-inverted
+
+ oled_write(0, 0xA4); // display scan on
+ oled_write(0, 0xAF); // drivers on
+}
+
+void oled_display_en(uint8_t state) {
+}
+
+void oled_set_clock(uint8_t val) {
+ oled_write(0, 0xD5);
+ oled_write(0, val);
+}
+
+void oled_set_addr_mode(uint8_t mode) {
+ // 0 -> horizontal (write column, increment column pointer, at column overrun reset column pointer and increment page pointer)
+ // 1 -> vertical (write column, increment page pointer, at page overrun reset page pointer and increment column pointer)
+ // 2 -> page (write column, increment column pointer, reset column pointer at overrun)
+ oled_write(0, 0x20);
+ oled_write(0, (mode < 2) ? mode : 0);
+}
+
+void oled_put_tile(uint8_t *tile, uint8_t limit) {
+ for(uint16_t i = 0; i < limit; i++) {
+ oled_write(1, *tile++);
+ }
+}
+
+void oled_putc_raw(char c) {
+ for(uint16_t i = c << 3; i < (c << 3) + 8; i++) {
+ oled_write(1, pgm_read_byte(font + i));
+ }
+}
+
+void oled_putc(char c) {
+ // remap from petscii to ascii, shifts drawing characters into the lower 32 ascii cells
+ if(c > 'A' && c < 'Z') { } // upper-case ascii range
+ else if(c > 'a' && c < 'z') { c -= 96; } // lower-case ascii range
+ else if(c > 31 && c < 64) { } // numbers and symbols
+ else if(c < 32) { c += 96; } // low ascii
+ oled_putc_raw(c);
+}
+
+void oled_home() {
+ oled_write(0, 0x21); // column range
+ oled_write(0, 0x00); // set start to 0
+ oled_write(0, 0x7F); // set end to 0x7F
+ oled_write(0, 0x22); // row range
+ oled_write(0, 0x00); // set start to 0
+ oled_write(0, 0x07); // set end to 0x07
+}
+
+void oled_move_raw(uint8_t row, uint8_t col) {
+ if(col > 127) { col = 127; }
+ if(row > 7) { row = 7; }
+
+ oled_write(0, 0x21); // set column
+ oled_write(0, col); // start = col
+ oled_write(0, 0x7F); // end = col max
+ oled_write(0, 0x22); // set row
+ oled_write(0, row); // start = row
+ oled_write(0, 0x07); // end = row max
+}
+
+void oled_move(uint8_t row, uint8_t col) {
+ if(col > 15) { col = 15; }
+ if(row > 7) { row = 7; }
+
+ oled_move_raw(row, col << 3);
+}
+
+void oled_clear() {
+ oled_home();
+ for(uint16_t i = 1024; i > 0; i--) {
+ oled_write(1, 0x00);
+ }
+}
+
+void oled_fill(uint8_t row, uint8_t col, uint8_t count, uint8_t max, uint32_t pattern, int8_t pshift) {
+ oled_move(row, col);
+ uint8_t pstate = 0;
+ for(max; max > 0; max--) {
+ if(count > max) {
+ if(pshift < 0) {
+ oled_write(1, (pattern >> (pstate++ << 3)) & 0xFF);
+ }
+ else
+ {
+ oled_write(1, (pattern >> (pstate++ + pshift)) & 0xFF);
+ }
+ pstate = (pstate > 3) ? 0 : pstate;
+ }
+ else {
+ oled_write(1, 0x00);
+ }
+ }
+
+}
+
+// Draw a tile at an arbitrary pixel location (top, left) using an 8 byte tile buffer referenced by *tile.
+// Slower than oled_putc(), potentially substantially so; only use for things that need
+// finer grained positioning than is possible with tile cells, like sprites.
+// Clips right and bottom edges properly; untested and not expected to work with negative positions.
+void oled_putxy(uint8_t left_pxl, uint8_t top_pxl, uint8_t *tile) {
+ uint8_t tbuf[8], obuf[8];
+ uint8_t top_cell = top_pxl >> 3;
+ uint8_t left_cell = left_pxl >> 3;
+ int8_t voff = top_pxl - ((top_cell << 3) - 1);
+ int8_t hoff = left_pxl - ((left_cell << 3) - 1);
+
+ if(voff == 0 && hoff == 0) {
+ oled_move(top_cell, left_pxl >> 3);
+ oled_put_tile(tile, 8);
+ return;
+ }
+ else {
+ for(uint8_t tcol = 0; tcol < 8; tcol++) { // tile column
+ tbuf[tcol] = (tile[tcol]) << ((uint8_t)voff); // shift left (down) by voff
+ obuf[tcol] = (tile[tcol]) >> (8 - (uint8_t)voff); //shift right (up) by voff
+ }
+
+ oled_move_raw(top_cell, left_pxl); // move_raw(row[0:7], column[0:127]) rows and pixels for extra confusion
+ oled_put_tile(&tbuf, (left_pxl > (SS1306_OLED_GEOM_W - 8)) ? 8 - hoff : 8);
+ if(top_pxl < (SS1306_OLED_GEOM_H - 8)) {
+ oled_move_raw((top_cell + 1), left_pxl);
+ oled_put_tile(&obuf, (left_pxl > (SS1306_OLED_GEOM_W - 8)) ? 8 - hoff : 8);
+ }
+ }
+}
+
+void oled_puts(char *str) {
+ while(*str != 0) {
+ oled_putc(*str++);
+ }
+}
+
+// box graphics digit (a single digit, not byte or word; use this to render output of an int->bcd conversion etc)
+void oled_bigdigit(uint8_t top, uint8_t left, uint8_t num) {
+ const uint8_t chartable[] PROGMEM = { 0x10, 0x0E, 0x5D, 0x5D, 0x0D, 0x1D, // zero
+ 0x20, 0x0E, 0x20, 0x5D, 0x20, 0x11, // one
+ 0x10, 0x0E, 0x10, 0x1D, 0x0D, 0x1D, // two
+ 0x10, 0x0E, 0x20, 0x13, 0x0D, 0x1D, // three
+ 0x5F, 0x5F, 0x0D, 0x13, 0x20, 0x5E, // four
+ 0x10, 0x0E, 0x0D, 0x0E, 0x0D, 0x1D, // five
+ 0x10, 0x0E, 0x0B, 0x0E, 0x0D, 0x1D, // six
+ 0x10, 0x0E, 0x20, 0x5B, 0x20, 0x5E, // seven
+ 0x10, 0x0E, 0x0B, 0x13, 0x0D, 0x1D, // eight
+ 0x10, 0x0E, 0x0d, 0x13, 0x0D, 0x1D // nine
+ };
+ if(num > 9) { return; }
+ oled_move(top, left);
+ for(uint8_t i = 0; i < 6; i++) {
+ if(i == 2 || i == 4) { oled_move(++top, left); }
+ oled_putc(chartable[(num * 6) + i]);
+ }
+
+}
+
+void oled_box(uint8_t top, uint8_t left, uint8_t width, uint8_t height) {
+ oled_move(top, left);
+ oled_putc(BOX_TL); for(uint8_t i = 0; i < width - 2; i++) { oled_putc(BOX_HL);} oled_putc(BOX_TR);
+ for(uint8_t i = top+1; i < top+height-1; i++) {
+ oled_move(i, left);
+ oled_putc(BOX_VL);
+ oled_move(i, left + width - 1);
+ oled_putc(BOX_VL);
+ }
+ oled_move(top + height - 1, left);
+ oled_putc(BOX_BL); for(uint8_t i = 0; i < width - 2; i++) { oled_putc(BOX_HL);} oled_putc(BOX_BR);
+}
+
+/*
+
+"I tell you, we are here on Earth to fart around, and don't let anybody tell you different." - Kurt Vonnegut
+
+*/
View
39 SSD1306demo/ss1306.h
@@ -0,0 +1,39 @@
+/*
+ * ssd1306_bitbang.h
+ *
+ * Created: 4/21/2013 2:16:29 PM
+ * Author: kmm
+ */
+
+#define H(port, pin) port |= _BV((pin))
+#define L(port, pin) port &= ~(_BV((pin)))
+
+#define BOX_TL 0x10
+#define BOX_TR 0x0E
+#define BOX_HL 0x40
+#define BOX_VL 0x5D
+#define BOX_BL 0x0D
+#define BOX_BR 0x1D
+
+#ifndef SS1306_H_
+#define SS1306_H_
+
+void oled_write(uint8_t dc, uint8_t data);
+void oled_init();
+void oled_display_en(uint8_t state);
+void oled_set_clock(uint8_t val);
+void oled_set_addr_mode(uint8_t mode);
+void oled_put_tile(uint8_t *tile, uint8_t limit);
+void oled_putc_raw(char c);
+void oled_putc(char c);
+void oled_home();
+void oled_move_raw(uint8_t row, uint8_t col);
+void oled_move(uint8_t row, uint8_t col);
+void oled_clear();
+void oled_fill(uint8_t row, uint8_t col, uint8_t count, uint8_t max, uint32_t pattern, int8_t pshift);
+void oled_putxy(uint8_t left_pxl, uint8_t top_pxl, uint8_t *tile);
+void oled_puts(char *str);
+void oled_bigdigit(uint8_t top, uint8_t left, uint8_t num);
+void oled_box(uint8_t top, uint8_t left, uint8_t width, uint8_t height);
+
+#endif
Please sign in to comment.
Something went wrong with that request. Please try again.