summaryrefslogtreecommitdiffstats
path: root/keyboards/atomic
diff options
context:
space:
mode:
Diffstat (limited to 'keyboards/atomic')
-rw-r--r--keyboards/atomic/Makefile73
-rw-r--r--keyboards/atomic/README.md25
-rw-r--r--keyboards/atomic/atomic.c325
-rw-r--r--keyboards/atomic/atomic.h49
-rw-r--r--keyboards/atomic/config.h158
-rw-r--r--keyboards/atomic/keymaps/abienz.c36
-rw-r--r--keyboards/atomic/keymaps/default/compiled.hex1118
-rw-r--r--keyboards/atomic/keymaps/default/keymap.c234
-rw-r--r--keyboards/atomic/keymaps/michelle.c183
-rw-r--r--keyboards/atomic/keymaps/pvc/Makefile15
-rw-r--r--keyboards/atomic/keymaps/pvc/compiled.hex1700
-rw-r--r--keyboards/atomic/keymaps/pvc/config.h166
-rw-r--r--keyboards/atomic/keymaps/pvc/keymap.c578
13 files changed, 4660 insertions, 0 deletions
diff --git a/keyboards/atomic/Makefile b/keyboards/atomic/Makefile
new file mode 100644
index 0000000000..08e9205cbf
--- /dev/null
+++ b/keyboards/atomic/Makefile
@@ -0,0 +1,73 @@
+
+
+# MCU name
+#MCU = at90usb1287
+MCU = atmega32u4
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Boot Section Size in *bytes*
+# Teensy halfKay 512
+# Teensy++ halfKay 1024
+# Atmel DFU loader 4096
+# LUFA bootloader 4096
+# USBaspLoader 2048
+OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
+CONSOLE_ENABLE ?= no # Console for debug(+400)
+COMMAND_ENABLE ?= yes # Commands for debug and configuration
+NKRO_ENABLE ?= no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE ?= yes # Enable keyboard backlight functionality
+MIDI_ENABLE ?= no # MIDI controls
+AUDIO_ENABLE ?= no # Audio output on port C6
+UNICODE_ENABLE ?= no # Unicode
+BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE ?= no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend
+
+ifndef QUANTUM_DIR
+ include ../../Makefile
+endif \ No newline at end of file
diff --git a/keyboards/atomic/README.md b/keyboards/atomic/README.md
new file mode 100644
index 0000000000..9fe75f572e
--- /dev/null
+++ b/keyboards/atomic/README.md
@@ -0,0 +1,25 @@
+Atomic keyboard firmware
+======================
+DIY/Assembled ortholinear 60% keyboard by [Ortholinear Keyboards](http://ortholinearkeyboards.com).
+
+## Quantum MK Firmware
+
+For the full Quantum feature list, see [the parent README.md](/README.md).
+
+## Building
+
+Download or clone the whole firmware and navigate to the keyboards/atomic folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use `make dfu` to program your PCB once you hit the reset button.
+
+Depending on which keymap you would like to use, you will have to compile slightly differently.
+
+### Default
+To build with the default keymap, simply run `make`.
+
+### Other Keymaps
+Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create a file in the keymaps folder named `<name>.c` and see keymap document (you can find in top README.md) and existent keymap files.
+
+To build the firmware binary hex file with a keymap just do `make` with `KEYMAP` option like:
+```
+$ make KEYMAP=[default|jack|<name>]
+```
+Keymaps follow the format **__\<name\>.c__** and are stored in the `keymaps` folder.
diff --git a/keyboards/atomic/atomic.c b/keyboards/atomic/atomic.c
new file mode 100644
index 0000000000..fa218a48f3
--- /dev/null
+++ b/keyboards/atomic/atomic.c
@@ -0,0 +1,325 @@
+#include "atomic.h"
+
+__attribute__ ((weak))
+void matrix_init_user(void) {
+ // leave this function blank - it can be defined in a keymap file
+};
+
+__attribute__ ((weak))
+void matrix_scan_user(void) {
+ // leave this function blank - it can be defined in a keymap file
+}
+
+__attribute__ ((weak))
+bool process_action_user(keyrecord_t *record) {
+ // leave this function blank - it can be defined in a keymap file
+ return true;
+}
+
+__attribute__ ((weak))
+void led_set_user(uint8_t usb_led) {
+ // leave this function blank - it can be defined in a keymap file
+}
+
+void matrix_init_kb(void) {
+ // put your keyboard start-up code here
+ // runs once when the firmware starts up
+
+ MCUCR |= (1<<JTD);
+ MCUCR |= (1<<JTD);
+
+#ifdef BACKLIGHT_ENABLE
+ backlight_init_ports();
+#endif
+
+ // Turn status LED on
+ DDRE |= (1<<6);
+ PORTE |= (1<<6);
+
+ matrix_init_user();
+}
+
+void matrix_scan_kb(void) {
+ // put your looping keyboard code here
+ // runs every cycle (a lot)
+
+ matrix_scan_user();
+}
+
+bool process_action_kb(keyrecord_t *record) {
+ // put your per-action keyboard code here
+ // runs for every action, just before processing by the firmware
+
+ return process_action_user(record);
+}
+
+void led_set_kb(uint8_t usb_led) {
+ // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
+
+ led_set_user(usb_led);
+}
+
+#ifdef BACKLIGHT_ENABLE
+#define CHANNEL OCR1C
+#define BREATHING_NO_HALT 0
+#define BREATHING_HALT_OFF 1
+#define BREATHING_HALT_ON 2
+
+static uint8_t breath_intensity;
+static uint8_t breath_speed;
+static uint16_t breathing_index;
+static uint8_t breathing_halt;
+
+void backlight_init_ports()
+{
+
+ // Setup PB7 as output and output low.
+ DDRB |= (1<<7);
+ PORTB &= ~(1<<7);
+
+ // Use full 16-bit resolution.
+ ICR1 = 0xFFFF;
+
+ // I could write a wall of text here to explain... but TL;DW
+ // Go read the ATmega32u4 datasheet.
+ // And this: http://blog.saikoled.com/post/43165849837/secret-konami-cheat-code-to-high-resolution-pwm-on
+
+ // Pin PB7 = OCR1C (Timer 1, Channel C)
+ // Compare Output Mode = Clear on compare match, Channel C = COM1C1=1 COM1C0=0
+ // (i.e. start high, go low when counter matches.)
+ // WGM Mode 14 (Fast PWM) = WGM13=1 WGM12=1 WGM11=1 WGM10=0
+ // Clock Select = clk/1 (no prescaling) = CS12=0 CS11=0 CS10=1
+
+ TCCR1A = _BV(COM1C1) | _BV(WGM11); // = 0b00001010;
+ TCCR1B = _BV(WGM13) | _BV(WGM12) | _BV(CS10); // = 0b00011001;
+
+ backlight_init();
+ breathing_defaults();
+}
+
+void backlight_set(uint8_t level)
+{
+ // Prevent backlight blink on lowest level
+ PORTB &= ~(_BV(PORTB7));
+
+ if ( level == 0 )
+ {
+ // Turn off PWM control on PB7, revert to output low.
+ TCCR1A &= ~(_BV(COM1C1));
+
+ // Set the brightness to 0
+ CHANNEL = 0x0;
+ }
+ else if ( level >= BACKLIGHT_LEVELS )
+ {
+ // Turn on PWM control of PB7
+ TCCR1A |= _BV(COM1C1);
+
+ // Set the brightness to max
+ CHANNEL = 0xFFFF;
+ }
+ else
+ {
+ // Turn on PWM control of PB7
+ TCCR1A |= _BV(COM1C1);
+
+ // Set the brightness
+ CHANNEL = 0xFFFF >> ((BACKLIGHT_LEVELS - level) * ((BACKLIGHT_LEVELS + 1) / 2));
+ }
+ breathing_intensity_default();
+}
+
+
+void breathing_enable(void)
+{
+ if (get_backlight_level() == 0)
+ {
+ breathing_index = 0;
+ }
+ else
+ {
+ // Set breathing_index to be at the midpoint (brightest point)
+ breathing_index = 0x20 << breath_speed;
+ }
+
+ breathing_halt = BREATHING_NO_HALT;
+
+ // Enable breathing interrupt
+ TIMSK1 |= _BV(OCIE1A);
+}
+
+void breathing_pulse(void)
+{
+ if (get_backlight_level() == 0)
+ {
+ breathing_index = 0;
+ }
+ else
+ {
+ // Set breathing_index to be at the midpoint + 1 (brightest point)
+ breathing_index = 0x21 << breath_speed;
+ }
+
+ breathing_halt = BREATHING_HALT_ON;
+
+ // Enable breathing interrupt
+ TIMSK1 |= _BV(OCIE1A);
+}
+
+void breathing_disable(void)
+{
+ // Disable breathing interrupt
+ TIMSK1 &= ~_BV(OCIE1A);
+ backlight_set(get_backlight_level());
+}
+
+void breathing_self_disable(void)
+{
+ if (get_backlight_level() == 0)
+ {
+ breathing_halt = BREATHING_HALT_OFF;
+ }
+ else
+ {
+ breathing_halt = BREATHING_HALT_ON;
+ }
+
+ //backlight_set(get_backlight_level());
+}
+
+void breathing_toggle(void)
+{
+ if (!is_breathing())
+ {
+ if (get_backlight_level() == 0)
+ {
+ breathing_index = 0;
+ }
+ else
+ {
+ // Set breathing_index to be at the midpoint + 1 (brightest point)
+ breathing_index = 0x21 << breath_speed;
+ }
+
+ breathing_halt = BREATHING_NO_HALT;
+ }
+
+ // Toggle breathing interrupt
+ TIMSK1 ^= _BV(OCIE1A);
+
+ // Restore backlight level
+ if (!is_breathing())
+ {
+ backlight_set(get_backlight_level());
+ }
+}
+
+bool is_breathing(void)
+{
+ return (TIMSK1 && _BV(OCIE1A));
+}
+
+void breathing_intensity_default(void)
+{
+ //breath_intensity = (uint8_t)((uint16_t)100 * (uint16_t)get_backlight_level() / (uint16_t)BACKLIGHT_LEVELS);
+ breath_intensity = ((BACKLIGHT_LEVELS - get_backlight_level()) * ((BACKLIGHT_LEVELS + 1) / 2));
+}
+
+void breathing_intensity_set(uint8_t value)
+{
+ breath_intensity = value;
+}
+
+void breathing_speed_default(void)
+{
+ breath_speed = 4;
+}
+
+void breathing_speed_set(uint8_t value)
+{
+ bool is_breathing_now = is_breathing();
+ uint8_t old_breath_speed = breath_speed;
+
+ if (is_breathing_now)
+ {
+ // Disable breathing interrupt
+ TIMSK1 &= ~_BV(OCIE1A);
+ }
+
+ breath_speed = value;
+
+ if (is_breathing_now)
+ {
+ // Adjust index to account for new speed
+ breathing_index = (( (uint8_t)( (breathing_index) >> old_breath_speed ) ) & 0x3F) << breath_speed;
+
+ // Enable breathing interrupt
+ TIMSK1 |= _BV(OCIE1A);
+ }
+
+}
+
+void breathing_speed_inc(uint8_t value)
+{
+ if ((uint16_t)(breath_speed - value) > 10 )
+ {
+ breathing_speed_set(0);
+ }
+ else
+ {
+ breathing_speed_set(breath_speed - value);
+ }
+}
+
+void breathing_speed_dec(uint8_t value)
+{
+ if ((uint16_t)(breath_speed + value) > 10 )
+ {
+ breathing_speed_set(10);
+ }
+ else
+ {
+ breathing_speed_set(breath_speed + value);
+ }
+}
+
+void breathing_defaults(void)
+{
+ breathing_intensity_default();
+ breathing_speed_default();
+ breathing_halt = BREATHING_NO_HALT;
+}
+
+/* Breathing Sleep LED brighness(PWM On period) table
+ * (64[steps] * 4[duration]) / 64[PWM periods/s] = 4 second breath cycle
+ *
+ * http://www.wolframalpha.com/input/?i=%28sin%28+x%2F64*pi%29**8+*+255%2C+x%3D0+to+63
+ * (0..63).each {|x| p ((sin(x/64.0*PI)**8)*255).to_i }
+ */
+static const uint8_t breathing_table[64] PROGMEM = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 4, 6, 10,
+ 15, 23, 32, 44, 58, 74, 93, 113, 135, 157, 179, 199, 218, 233, 245, 252,
+255, 252, 245, 233, 218, 199, 179, 157, 135, 113, 93, 74, 58, 44, 32, 23,
+ 15, 10, 6, 4, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+};
+
+ISR(TIMER1_COMPA_vect)
+{
+ // CHANNEL = (pgm_read_byte(&breathing_table[ ( (uint8_t)( (breathing_index++) >> breath_speed ) ) & 0x3F ] )) * breath_intensity;
+
+
+ uint8_t local_index = ( (uint8_t)( (breathing_index++) >> breath_speed ) ) & 0x3F;
+
+ if (((breathing_halt == BREATHING_HALT_ON) && (local_index == 0x20)) || ((breathing_halt == BREATHING_HALT_OFF) && (local_index == 0x3F)))
+ {
+ // Disable breathing interrupt
+ TIMSK1 &= ~_BV(OCIE1A);
+ }
+
+ CHANNEL = (uint16_t)(((uint16_t)pgm_read_byte(&breathing_table[local_index]) * 257)) >> breath_intensity;
+
+}
+
+
+
+#endif \ No newline at end of file
diff --git a/keyboards/atomic/atomic.h b/keyboards/atomic/atomic.h
new file mode 100644
index 0000000000..901761f514
--- /dev/null
+++ b/keyboards/atomic/atomic.h
@@ -0,0 +1,49 @@
+#ifndef ATOMIC_H
+#define ATOMIC_H
+
+#include "quantum.h"
+#include <stddef.h>
+#include <avr/io.h>
+#include <avr/interrupt.h>
+
+// This a shortcut to help you visually see your layout.
+// The following is an example using the Planck MIT layout
+// The first section contains all of the arguements
+// The second converts the arguments into a two-dimensional array
+#define KEYMAP_SEMI_STANDARD( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0E, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, K2E, \
+ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3C, K3D, K3E, \
+ K40, K41, K43, K46, K4A, K4B, K4C, K4D, K4E \
+) { \
+ { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, KC_NO, K0E }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, KC_NO, K2D, K2E }, \
+ { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, KC_NO, K3C, K3D, K3E }, \
+ { K40, K41, KC_NO, K43, KC_NO, KC_NO, K46, KC_NO, KC_NO, KC_NO, K4A, K4B, K4C, K4D, K4E } \
+}
+
+void matrix_init_user(void);
+void matrix_scan_user(void);
+bool process_action_user(keyrecord_t *record);
+void led_set_user(uint8_t usb_led);
+void backlight_init_ports(void);
+
+void breathing_enable(void);
+void breathing_pulse(void);
+void breathing_disable(void);
+void breathing_self_disable(void);
+void breathing_toggle(void);
+bool is_breathing(void);
+
+
+void breathing_defaults(void);
+void breathing_intensity_default(void);
+void breathing_speed_default(void);
+void breathing_speed_set(uint8_t value);
+void breathing_speed_inc(uint8_t value);
+void breathing_speed_dec(uint8_t value);
+
+
+#endif \ No newline at end of file
diff --git a/keyboards/atomic/config.h b/keyboards/atomic/config.h
new file mode 100644
index 0000000000..bf9550e948
--- /dev/null
+++ b/keyboards/atomic/config.h
@@ -0,0 +1,158 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x6060
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Ortholinear Keyboards
+#define PRODUCT The Atomic Keyboard
+#define DESCRIPTION A compact ortholinear keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 15
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+*/
+#define MATRIX_ROW_PINS { D0, D5, B5, B6, C6 }
+#define MATRIX_COL_PINS { F1, F0, B0, C7, F4, F5, F6, F7, D4, D6, B4, D7, D3, D2, D1 }
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+#define BACKLIGHT_LEVELS 3
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/*
+ * Force NKRO
+ *
+ * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
+ * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
+ * makefile for this to work.)
+ *
+ * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
+ * until the next keyboard reset.
+ *
+ * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
+ * fully operational during normal computer usage.
+ *
+ * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
+ * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
+ * bootmagic, NKRO mode will always be enabled until it is toggled again during a
+ * power-up.
+ *
+ */
+//#define FORCE_NKRO
+
+/*
+ * Magic Key Options
+ *
+ * Magic keys are hotkey commands that allow control over firmware functions of
+ * the keyboard. They are best used in combination with the HID Listen program,
+ * found here: https://www.pjrc.com/teensy/hid_listen.html
+ *
+ * The options below allow the magic key functionality to be changed. This is
+ * useful if your keyboard/keypad is missing keys and you want magic key support.
+ *
+ */
+
+/* key combination for magic key command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* control how magic key switches layers */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
+
+/* override magic key keymap */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
+//#define MAGIC_KEY_HELP1 H
+//#define MAGIC_KEY_HELP2 SLASH
+//#define MAGIC_KEY_DEBUG D
+//#define MAGIC_KEY_DEBUG_MATRIX X
+//#define MAGIC_KEY_DEBUG_KBD K
+//#define MAGIC_KEY_DEBUG_MOUSE M
+//#define MAGIC_KEY_VERSION V
+//#define MAGIC_KEY_STATUS S
+//#define MAGIC_KEY_CONSOLE C
+//#define MAGIC_KEY_LAYER0_ALT1 ESC
+//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
+//#define MAGIC_KEY_LAYER0 0
+//#define MAGIC_KEY_LAYER1 1
+//#define MAGIC_KEY_LAYER2 2
+//#define MAGIC_KEY_LAYER3 3
+//#define MAGIC_KEY_LAYER4 4
+//#define MAGIC_KEY_LAYER5 5
+//#define MAGIC_KEY_LAYER6 6
+//#define MAGIC_KEY_LAYER7 7
+//#define MAGIC_KEY_LAYER8 8
+//#define MAGIC_KEY_LAYER9 9
+#define MAGIC_KEY_BOOTLOADER B
+//#define MAGIC_KEY_LOCK CAPS
+//#define MAGIC_KEY_EEPROM E
+//#define MAGIC_KEY_NKRO N
+//#define MAGIC_KEY_SLEEP_LED Z
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+#endif
diff --git a/keyboards/atomic/keymaps/abienz.c b/keyboards/atomic/keymaps/abienz.c
new file mode 100644
index 0000000000..589a64dc4e
--- /dev/null
+++ b/keyboards/atomic/keymaps/abienz.c
@@ -0,0 +1,36 @@
+#include "atomic.h"
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = { /* Colemak */
+ { KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_NO },
+ { KC_TAB, CM_Q, CM_W, CM_F, CM_P, CM_G, CM_J, CM_L, CM_U, CM_Y, CM_SCLN, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL },
+ { KC_BSPC, CM_A, CM_R, CM_S, CM_T, CM_D, CM_H, CM_N, CM_E, CM_I, CM_O, KC_QUOT, KC_ENT, KC_NO, KC_PGUP },
+ { KC_LSFT, CM_Z, CM_X, CM_C, CM_V, CM_B, CM_K, CM_M, CM_COMM, CM_DOT, CM_SLSH, KC_RSFT, KC_NO, KC_UP, KC_PGDN },
+ { KC_LCTL, KC_LGUI, KC_NO, KC_LALT, FUNC(1), KC_SPC, KC_NO, KC_RALT, FUNC(2), KC_RGUI, KC_NO, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT },
+ },
+ [1] = { /* function */
+ { KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_BSPC, KC_NO },
+ { KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS },
+ { KC_TRNS, KC_TRNS, KC_TRNS, KC_SLEP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS },
+ { KC_TRNS, KC_TRNS, KC_TRNS, KC_CALC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU, KC_MPLY },
+ { KC_TRNS, KC_TRNS, KC_NO, KC_TRNS, FUNC(1), KC_TRNS, KC_NO, KC_TRNS, FUNC(2), KC_TRNS, KC_NO, KC_TRNS, KC_MPRV, KC_VOLD, KC_MNXT },
+ }
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+ [1] = ACTION_LAYER_MOMENTARY(1),
+ [2] = ACTION_LAYER_MOMENTARY(1),
+
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ // MACRODOWN only works in this function
+ switch(id) {
+ case 0:
+ return MACRODOWN(TYPE(KC_T), END);
+ break;
+ }
+ return MACRO_NONE;
+};
+
diff --git a/keyboards/atomic/keymaps/default/compiled.hex b/keyboards/atomic/keymaps/default/compiled.hex
new file mode 100644
index 0000000000..b9bb143ea8
--- /dev/null
+++ b/keyboards/atomic/keymaps/default/compiled.hex
@@ -0,0 +1,1118 @@
+:100000000C942A030C946E030C946E030C946E03F0
+:100010000C946E030C946E030C946E030C946E039C
+:100020000C946E030C946E030C946A0D0C943C0EAD
+:100030000C94531B0C946E030C946E030C946E037F
+:100040000C946E030C94D6030C946E030C946E0304
+:100050000C946E030C94BB1B0C946E030C946E03F7
+:100060000C946E030C946E030C946E030C946E034C
+:100070000C946E030C946E030C946E030C946E033C
+:100080000C946E030C946E030C946E030C946E032C
+:100090000C946E030C946E030C946E030C946E031C
+:1000A0000C946E030C946E030C946E03A90ECB0E8D
+:1000B000B90FCB0EB90F100F330FB90F880F9B0F6D
+:1000C00085128512B412B412F31213136914691451
+:1000D0001E136914CE13CE1335143E146914631421
+:1000E000DB13DB13DB13DB13DB13DB13DB13DB13A0
+:1000F000DB13DB13DB13DB13DB13DB13DB13DB1390
+:10010000EB13F91300140714111400000000000091
+:100110000000000000010204060A0F17202C3A4AD2
+:100120005D71879DB3C7DAE9F5FCFFFCF5E9DAC735
+:10013000B39D87715D4A3A2C20170F0A060402010D
+:100140000000000000000000000035001E001F003D
+:100150002000210022002300240025002600270083
+:100160002D002E002A002A002B0014001A0008007F
+:10017000150017001C0018000C00120013002F00BF
+:10018000300031004C00290004001600070009006F
+:100190000A000B000D000E000F0033003400280091
+:1001A00028004B00E1001D001B000600190005009F
+:1001B00011001000360037003800E500E50052005D
+:1001C0004E000030E000E200E30004512C002C005F
+:1001D0000351E700E600E4000551500051004F00D4
+:1001E00035001E001F0020002100220023002400F3
+:1001F0002500260027002D002E002A002A002B00B3
+:1002000014001A00090013000A000D000F00180066
+:100210001C0033002F00300031004C002900040086
+:1002200015001600170007000B00110008000C0055
+:1002300012003400280028004B00E1001D001B00C4
+:100240000600190005000E001000360037003800C7
+:10025000E500E50052004E000030E000E200E3005F
+:1002600004512C002C000351E700E600E400055186
+:10027000500051004F0035001E001F0020002100DB
+:100280002200230024002500260027002D002E0038
+:100290002A002A002B0034003600370013001C000F
+:1002A00009000A00060015000F002F003000310081
+:1002B0004C00290004001200080018000C00070080
+:1002C0000B001700110016003800280028004B0012
+:1002D000E100330014000D000E001B0005001000AB
+:1002E0001A0019001D00E500E50052004E00003024
+:1002F000E000E200E30004512C002C000351E70071
+:10030000E600E4000551500051004F0001003A00A2
+:100310003B003C003D003E003F00400041004200E9
+:100320004300440045000100010001001E021F02BD
+:100330002002210222022302240225022602270291
+:10034000010001000100490001003A003B003C00AF
+:100350003D003E003F002D022E022F0230023102EE
+:100360000100010001000100400041004200430083
+:1003700044004500010001000100010001000100EE
+:100380000100010001000100010001000100010065
+:100390000100010001000100010001000100010055
+:1003A000010001003A003B003C003D003E003F00E0
+:1003B00040004100420043004400450001000100AC
+:1003C00001001E001F002000210022002300240045
+:1003D000250026002700010001000100490001005E
+:1003E0003A003B003C003D003E003F002D002E0047
+:1003F0002F00300031000100010001000100400029
+:10040000410042004300440045000100010001009A
+:1004100001000100010001000100010001000100D4
+:1004200001000100010001000100010001000100C4
+:10043000010001000100010053003A003B003C00B4
+:100440003D003E003F0040004100420043004400A8
+:100450004500010001004700680069006A006B0068
+:100460006C006D006E006F00700071007200730010
+:10047000480046003900F800F700F600F500FD00DE
+:10048000FF00AB00AA00A900AE00010001000100BE
+:10049000F900010001000052015202520100010066
+:1004A000010001000100010001000100F000FA005C
+:1004B00001000100010001000100F400F40001004E
+:1004C0000100010001000100F200F100F300280327
+:1004D0005400680065002000410074006F006D004A
+:1004E0006900630020004B006500790062006F0026
+:1004F00061007200640000002C034F007200740061
+:1005000068006F006C0069006E0065006100720099
+:1005100020004B006500790062006F0061007200EE
+:10052000640073000000040309040902540003017D
+:1005300000A0FA09040000010301010009211101D2
+:1005400000012240000705810308000A0904010098
+:100550000103010200092111010001224D000705DC
+:10056000820308000A0904020001030000000921B7
+:10057000110100012236000705830308000A120159
+:10058000100100000008EDFE6060010001020001A2
+:1005900005010980A101850216010026B7001A0194
+:1005A000002AB700751095018100C0050C0901A152
+:1005B000018503160100269C021A01002A9C02757F
+:1005C0001095018100C005010902A1010901A100E6
+:1005D00005091901290515002501950575018102F7
+:1005E0009501750381010501093009311581257FC8
+:1005F00095027508810609381581257F95017508D2
+:100600008106050C0A38021581257F950175088140
+:1006100006C0C005010906A101050719E029E71573
+:100620000025019508750181029501750881010574
+:100630000819012905950575019102950175039128
+:10064000010507190029FF150026FF00950675080A
+:100650008100C00011241FBECFEFDAE0DEBFCDBFA6
+:1006600004B603FE24C08091F0019091F101A091A5
+:10067000F201B091F3018730904BA740B04BB9F431
+:100680001092F0011092F1011092F2011092F30118
+:1006900014BE84B7877F84BF88E10FB6F894809337
+:1006A0006000109260000FBEE0E0F8E3099511E0F1
+:1006B000A0E0B1E0EEE7F5E402C005900D92A234AF
+:1006C000B107D9F711E0A2E4B1E001C01D92A03F4B
+:1006D000B107E1F70E94B40A0C94BD220C9400000B
+:1006E0000895089581E0089508950C9471030C9481
+:1006F00072030C9474030E94332123E030E0281B22
+:100700003109220F209346010895282F2F988091B8
+:100710008000211108C0877F8093800010928D0097
+:1007200010928C001BC0886080938000233018F0EA
+:100730008FEF9FEF0FC083E090E0821B9109880F3D
+:10074000991F2FEF3FEFA90102C0569547958A9553
+:10075000E2F7CA0190938D0080938C000C947B0388
+:100760000E947B0384E0809345011092420108952A
+:10077000279A2F988FEF9FEF9093870080938600A2
+:100780008AE08093800089E1809381000E949C2010
+:100790000C94B00385B7806885BF85B7806885BF36
+:1007A0000E94B8036E9A769A0C9470031F920F926F
+:1007B0000FB60F9211242F933F938F939F93EF9334
+:1007C000FF93E0914301F0914401CF010196909392
+:1007D0004401809343010090450102C0F695E795DE
+:1007E0000A94E2F7EF7380914201823019F4E0320B
+:1007F00051F404C0813039F4EF3329F480916F0053
+:100800008D7F80936F00F0E0E65FFE4FE49121E082
+:1008100031E0E29FC001E39F900D1124009046015A
+:1008200002C0969587950A94E2F790938D00809385
+:100830008C00FF91EF919F918F913F912F910F909D
+:100840000FBE0F901F90189561110DC0FC018281A1
+:10085000882331F085EE0E9429110E94F32003C005
+:1008600085EE0E94F11180E090E0089581E0089506
+:100870000C94360408950F931F93CF93DF938C014C
+:10088000FC01C081D181CE010E94CD19BE010E9420
+:100890006C07EC01B8010E943804882309F470C188
+:1008A000F8018281882309F45BC080915201811193
+:1008B0001FC0C431F0E7DF0709F00AC10E943A0403
+:1008C00081E0809352010E94851B90935101809397
+:1008D00050011092490110924B0110924A0110925E
+:1008E0004D0110924C0110924F0110924E0148C1DF
+:1008F00080915001909151010E94911B883C91057B
+:1009000070F480914901E82FF0E0EE0FFF1FE65BE5
+:10091000FE4FD183C0838F5F8093490131C1C431C1
+:1009200020E7D20708F024C1C23080E7D80710F5CD
+:10093000C11590E7D90709F0DAC0F8018281882350
+:1009400009F4BFC00E94D414FFEF24E38CE0F150FF
+:1009500020408040E1F700C000000E94E01B10C171
+:10096000C431F0E7DF0708F0CFC0C23020E7D2077C
+:1009700008F49BC0F8018281882309F4A2C00E9478
+:100980003A1C811102C00E941B1C0E944D1C90E069
+:100990009093E1018093E001C230F0E7DF0721F49A
+:1009A0008091E00181607AC0C33020E7D20721F452
+:1009B0008091E001826072C0C43080E7D80721F4E2
+:1009C0008091E00184606AC0C53090E7D90719F4CE
+:1009D0008091E00127C0C630E0E7DE0721F4809176
+:1009E000E00180615BC0C730F0E7DF0721F4809150
+:1009F000E001806253C0C83020E7D20721F4809123
+:100A0000E00180644BC0C93080E7D80721F48091B1
+:100A1000E001806843C0CA3090E7D90729F480918B
+:100A2000E001846088603AC0CB30E0E7DE0721F463
+:100A30008091E0018E7F32C0CC30F0E7DF0721F4F7
+:100A40008091E0018D7F2AC0CD3020E7D20721F4CC
+:100A50008091E0018B7F22C0CE3080E7D80719F467
+:100A60008091E0011AC08091E001CF3090E7D90772
+:100A700011F48F7E13C0C031E0E7DE0711F48F7DE3
+:100A80000DC0C131F0E7DF0711F48F7B07C0C23121
+:100A9000D04711F48F7702C08B7F877F8093E0016E
+:100AA0008091E0010E94511C6BC0C11580E7D807FE
+:100AB00041F0C130D047F1F081E08093470180934D
+:100AC0004801C801DF91CF911F910F910C947703DA
+:100AD000C43120E7D20708F04BC0C23080E7D80706
+:100AE00008F048CFC11590E7D90709F42BCFC130E2
+:100AF000D04711F7F8018281882319F38091CF0143
+:100B000081608093CF013CC0C333E0E7DE07A1F4EE
+:100B1000F8018281882321F01092470182E017C0FA
+:100B200080914701811106C086E20E94291186E268
+:100B30000E94F11182E019C0C433D04709F0BCCF44
+:100B4000F8018281882331F01092480180E20E94EE
+:100B5000401216C080914801811106C087E20E94B0
+:100B6000291187E20E94F11180E20E94471208C019
+:100B7000C333F0E7DF0761F2C433D04709F39CCFFA
+:100B800080E0DF91CF911F910F9108950C94CA03DB
+:100B90000C9475032FE0729FF00111243BE4839FB6
+:100BA000E00DF11D1124E60FF11DEE0FFF1FE65BB6
+:100BB000FE4F859194910E947E07811540E5940730
+:100BC00008F047C0811520E4920708F013C1883E61
+:100BD000910520F5803E910508F07CC1883A910589
+:100BE00078F4853A910508F0A5C08130910509F4A3
+:100BF00071C108F42EC18430910508F06BC129C180
+:100C00008B3B910508F4A1C0803C910508F421C1FB
+:100C1000FC01EE0FFF1FE653F040E6C0811530E205
+:100C2000930758F4811541E0940708F053C1803FC1
+:100C3000910508F40EC190650895811520E392078F
+:100C400008F0D5C0FC01FF70EE0FFF1FE65BFE4F02
+:100C5000CBC0811535E5930708F043C0811544E505
+:100C6000940708F0DEC0811522E5920708F581158A
+:100C700031E5930708F0C1C0482F437021E030E010
+:100C800002C0220F331F4A95E2F73C68AC0164E0D2
+:100C9000569547956A95E1F74370342B8F7086958A
+:100CA000869540E2849FC0011124822B932B0895E6
+:100CB000282F26952695AC0143705527811593451D
+:100CC00008F0A0C080E2289F9001112481E090E00C
+:100CD00002C0880F991F4A95E2F7822B932B9C68DC
+:100CE00008958F3240E7940790F48F3120E7920700
+:100CF00008F0A2C0811536E5930708F497C09C015F
+:100D000030562115304108F0A4C09F7093C0803345
+:100D100020E7920709F497C008F492C0813340E7B6
+:100D2000940709F493C08233904709F092C080E0A1
+:100D300093ED0895853A910509F48EC0863A9105A0
+:100D400009F08DC082E890E40895883A910509F48D
+:100D500089C0893A910509F488C08A3A910509F455
+:100D600087C08B3A910509F486C08C3A910509F445
+:100D700085C08D3A910509F484C0803B910509F442
+:100D800083C08E3A910509F482C08F3A910509F427
+:100D900081C0813B910509F480C0823B910509F433
+:100DA0007FC0833B910509F47EC0843B910509F423