diff --git a/firmware/asdf/src/Keymaps/asdf_keymap_ace1000.c b/firmware/asdf/src/Keymaps/asdf_keymap_ace1000.c
new file mode 100644
index 0000000..4abc0ab
--- /dev/null
+++ b/firmware/asdf/src/Keymaps/asdf_keymap_ace1000.c
@@ -0,0 +1,85 @@
+// -*- mode: C; tab-width: 2 ; indent-tabs-mode: nil -*-
+//
+// Unified Keyboard Project
+// ASDF keyboard firmware
+//
+// asdf_keymap_classic.c
+//
+// Implements the Franklin ACE 1000 keymaps
+//
+// Copyright 2023 Chris RYU
+// Copyright 2019 David Fenyes
+//
+// 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 3 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 .
+//
+
+#include "asdf.h"
+#include "asdf_keymaps.h"
+#include "asdf_virtual.h"
+#include "asdf_modifiers.h"
+#include "asdf_print.h"
+#include "asdf_keymap_ace1000.h"
+#include "asdf_keymap_ace1000_add_map.h"
+#include "asdf_keymap_apple2_add_map.h"
+
+void ace1000_id_message(void) {
+ asdf_print("[Keymap: ace1000]\n");
+}
+
+// PROCEDURE:
+// INPUTS:
+// OUTPUTS:
+//
+// DESCRIPTION:
+//
+// SIDE EFFECTS:
+//
+// NOTES:
+//
+// SCOPE:
+//
+// COMPLEXITY:
+//
+
+void setup_ace1000_keymap(void)
+{
+ asdf_set_print_delay(ASDF_ACE1000_PRINT_SPEED); //msec
+
+ ace1000_add_map(ACE1000_PLAIN_MAP, MOD_PLAIN_MAP);
+ ace1000_add_map(ACE1000_CAPS_MAP, MOD_CAPS_MAP);
+ ace1000_add_map(ACE1000_SHIFT_MAP, MOD_SHIFT_MAP);
+ ace1000_add_map(ACE1000_CTRL_MAP, MOD_CTRL_MAP);
+
+ asdf_hook_assign(ACE1000_ID_MESSAGE_HOOK, ace1000_id_message);
+ asdf_hook_assign(APPLESOFT_KEYBOARD_TEST_HOOK, applesoft_keyboard_test);
+
+ // Assign power LED to virtual power LED, and initialize to ON
+ asdf_virtual_assign(ACE1000_VIRTUAL_POWER_LED, ACE1000_POWER_LED, V_NOFUNC, ACE1000_POWER_LED_INIT_VALUE);
+
+ // Assign CAPS LED to virtual CAPS LED, and initialize to the INIT value, to
+ // match the initial CAPSLOCK state. The capslock state code will alter the
+ // virtual LED according to the state.
+
+ asdf_virtual_assign(VCAPS_LED, ACE1000_CAPS_LED, V_NOFUNC, ACE1000_CAPS_LED_INIT_VALUE);
+
+ // assign RESET output to the virtual RESET output, configure to produce a short pulse when activated
+ asdf_virtual_assign(ACE1000_VIRTUAL_RESET, ACE1000_RESET_OUTPUT, V_PULSE_SHORT, !ACE1000_RESET_ACTIVE_VALUE);
+
+ // assign the CLRSCR output to the virtual CLRSCR output, configure to produce a long pulse when activated
+ asdf_virtual_assign(ACE1000_VIRTUAL_CLR_SCR, ACE1000_CLR_SCR_OUT, V_PULSE_LONG, !ACE1000_CLR_SCR_ACTIVE_VALUE);
+}
+
+
+//-------|---------|---------+---------+---------+---------+---------+---------+
+// Above line is 80 columns, and should display completely in the editor.
diff --git a/firmware/asdf/src/Keymaps/asdf_keymap_ace1000.h b/firmware/asdf/src/Keymaps/asdf_keymap_ace1000.h
new file mode 100644
index 0000000..ebae9a4
--- /dev/null
+++ b/firmware/asdf/src/Keymaps/asdf_keymap_ace1000.h
@@ -0,0 +1,70 @@
+// -*- mode: C; tab-width: 4 ; indent-tabs-mode: nil -*-
+//
+// Unfified Keyboard Project
+// ASDF keyboard firmware
+//
+// asdf_keymap_ace1000.h
+//
+// Ascii keymaps
+//
+// Copyright 2023 Chris RYU
+// Copyright 2019 David Fenyes
+//
+// 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 3 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 .
+
+
+// To use this ascii for a new keymap, edit the keymaps definitions as
+// desired. The keymaps are organized from row 0, counting upward, and each row
+// includes the columns from 0-NUM_COLS.
+//
+
+#if !defined(ASDF_KEYMAP_DEFS_ACE1000_H)
+#define ASDF_KEYMAP_DEFS_ACE1000_H
+
+#include "asdf_hook.h"
+
+// Edit the number of rows and columns used in this map. If the number is less
+// than the maxium, the unused elements will be initialized to 0.
+
+#define ACE1000_NUM_ROWS 10 // DIP switches are row 8 (zero based)
+#define ACE1000_NUM_COLS 8
+
+#define ACE1000_ACTION_BREAK ACTION_NOTHING
+
+#define ACE1000_VIRTUAL_RESET VOUT1
+#define ACE1000_ACTION_RESET ACTION_VOUT1
+#define ACE1000_RESET_OUTPUT PHYSICAL_OUT3_OPEN_HI
+#define ACE1000_RESET_ACTIVE_VALUE 0
+
+#define ACE1000_VIRTUAL_CLR_SCR VOUT2
+#define ACE1000_ACTION_CLEAR ACTION_VOUT2
+#define ACE1000_CLR_SCR_OUT PHYSICAL_OUT1_OPEN_LO
+#define ACE1000_CLR_SCR_ACTIVE_VALUE 1
+
+#define ACE1000_VIRTUAL_POWER_LED VLED1
+#define ACE1000_POWER_LED PHYSICAL_LED1
+#define ACE1000_POWER_LED_INIT_VALUE 1
+
+#define ACE1000_CAPS_LED PHYSICAL_LED3
+#define ACE1000_CAPS_LED_INIT_VALUE 1
+
+#define ACE1000_ID_MESSAGE_HOOK ASDF_HOOK_USER_10
+#define APPLESOFT_KEYBOARD_TEST_HOOK ASDF_HOOK_USER_9
+
+#define ASDF_ACE1000_PRINT_SPEED 40
+
+#endif /* !defined (ASDF_KEYMAP_DEFS_ACE1000_H) */
+
+//-------|---------|---------+---------+---------+---------+---------+---------+
+// Above line is 80 columns, and should display completely in the editor.
diff --git a/firmware/asdf/src/Keymaps/asdf_keymap_ace1000_add_map.c b/firmware/asdf/src/Keymaps/asdf_keymap_ace1000_add_map.c
new file mode 100644
index 0000000..b72e6ec
--- /dev/null
+++ b/firmware/asdf/src/Keymaps/asdf_keymap_ace1000_add_map.c
@@ -0,0 +1,114 @@
+// -*- mode: C; tab-width: 2 ; indent-tabs-mode: nil -*-
+//
+// Unified Keyboard Project
+// ASDF keyboard firmware
+//
+// asdf_keymap_ace1000_add_map.c
+//
+// defines the keymap matrices used by the Franklin ACE 1000
+//
+// Copyright 2023 Chris RYU
+// Copyright 2019 David Fenyes
+//
+// 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 3 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 .
+//
+
+#include "asdf_arch.h"
+#include "asdf.h"
+#include "asdf_ascii.h"
+#include "asdf_keymaps.h"
+#include "asdf_keymap_ace1000.h"
+#include "asdf_keymap_ace1000_add_map.h"
+#include "asdf_keymap_defs_dipswitch.h"
+
+// Key Matrix for the Franklin ACE 1000 replacement keyboard by Chris RYU
+
+#define ASDF_ACE1000_DIP_SWITCHES ASDF_KEYMAP_DIP_SWITCHES
+
+typedef asdf_keycode_t ace1000_keycode_matrix_t[ACE1000_NUM_ROWS][ACE1000_NUM_COLS];
+
+const FLASH ace1000_keycode_matrix_t ace1000_plain_matrix = {
+ [0] = { ACE_KEY_ESC, ACE_KEY_BREAK, ACE_KEY_PAUSE, ACTION_CTRL, ACE_KEY_TAB, ACTION_CAPS, ACTION_SHIFT, ACE_KEY_SPACE, },
+ [1] = { ACE_KEY_1, ACE_KEY_Q, ACE_KEY_A, ACE_KEY_Z, ACE_KEY_2, ACE_KEY_W, ACE_KEY_S, ACE_KEY_X, },
+ [2] = { ACE_KEY_3, ACE_KEY_E, ACE_KEY_D, ACE_KEY_C, ACE_KEY_4, ACE_KEY_R, ACE_KEY_F, ACE_KEY_V, },
+ [3] = { ACE_KEY_5, ACE_KEY_T, ACE_KEY_G, ACE_KEY_B, ACE_KEY_6, ACE_KEY_Y, ACE_KEY_H, ACE_KEY_N, },
+ [4] = { ACE_KEY_7, ACE_KEY_U, ACE_KEY_J, ACE_KEY_M, ACE_KEY_8, ACE_KEY_I, ACE_KEY_K, ACE_KEY_COMMA, },
+ [5] = { ACE_KEY_9, ACE_KEY_O, ACE_KEY_L, ACE_KEY_PERIOD, ACE_KEY_RIGHT, ACE_KEY_UNDERSCORE, ACE_KEY_PLUS, ACE_KEY_SPLAT, },
+ [6] = { ACE_KEY_0, ACE_KEY_P, ACE_KEY_SEMI, ACE_KEY_SLASH, ACE_KEY_7, ACE_KEY_4, ACE_KEY_1, ACE_KEY_GT, },
+ [7] = { ACE_KEY_MINUS, ACE_KEY_CURLY, ACE_KEY_QUOTE, ACTION_SHIFT, ACE_KEY_8, ACE_KEY_5, ACE_KEY_2, ACE_KEY_0, },
+ [8] = { ACTION_NOTHING, ACTION_NOTHING, ACTION_NOTHING, ACTION_NOTHING, ACTION_NOTHING, ACTION_NOTHING, ACTION_NOTHING, ACTION_NOTHING },
+ [9] = { ACE_KEY_SLASH, ACE_KEY_SQUARE, ACE_KEY_RETURN, ACE_KEY_LEFT, ACE_KEY_9, ACE_KEY_6, ACE_KEY_3, ACE_KEY_PERIOD, },
+};
+
+const FLASH ace1000_keycode_matrix_t ace1000_shift_matrix = {
+ [0] = { ACE_KEY_SHIFT_ESC, ACE_KEY_SHIFT_BREAK, ACE_KEY_SHIFT_PAUSE, ACTION_CTRL, ACE_KEY_SHIFT_TAB, ACTION_CAPS, ACTION_SHIFT, ACE_KEY_SHIFT_SPACE, },
+ [1] = { ACE_KEY_SHIFT_1, ACE_KEY_SHIFT_Q, ACE_KEY_SHIFT_A, ACE_KEY_SHIFT_Z, ACE_KEY_SHIFT_2, ACE_KEY_SHIFT_W, ACE_KEY_SHIFT_S, ACE_KEY_SHIFT_X, },
+ [2] = { ACE_KEY_SHIFT_3, ACE_KEY_SHIFT_E, ACE_KEY_SHIFT_D, ACE_KEY_SHIFT_C, ACE_KEY_SHIFT_4, ACE_KEY_SHIFT_R, ACE_KEY_SHIFT_F, ACE_KEY_SHIFT_V, },
+ [3] = { ACE_KEY_SHIFT_5, ACE_KEY_SHIFT_T, ACE_KEY_SHIFT_G, ACE_KEY_SHIFT_B, ACE_KEY_SHIFT_6, ACE_KEY_SHIFT_Y, ACE_KEY_SHIFT_H, ACE_KEY_SHIFT_N, },
+ [4] = { ACE_KEY_SHIFT_7, ACE_KEY_SHIFT_U, ACE_KEY_SHIFT_J, ACE_KEY_SHIFT_M, ACE_KEY_SHIFT_8, ACE_KEY_SHIFT_I, ACE_KEY_SHIFT_K, ACE_KEY_SHIFT_COMMA, },
+ [5] = { ACE_KEY_SHIFT_9, ACE_KEY_SHIFT_O, ACE_KEY_SHIFT_L, ACE_KEY_SHIFT_PERIOD, ACE_KEY_SHIFT_RIGHT, ACE_KEY_SHIFT_UNDERSCORE, ACE_KEY_SHIFT_PLUS, ACE_KEY_SHIFT_SPLAT, },
+ [6] = { ACE_KEY_SHIFT_0, ACE_KEY_SHIFT_P, ACE_KEY_SHIFT_SEMI, ACE_KEY_SHIFT_SLASH, ACE_KEY_SHIFT_7, ACE_KEY_SHIFT_4, ACE_KEY_SHIFT_1, ACE_KEY_SHIFT_GT, },
+ [7] = { ACE_KEY_SHIFT_MINUS, ACE_KEY_SHIFT_CURLY, ACE_KEY_SHIFT_QUOTE, ACTION_SHIFT, ACE_KEY_SHIFT_8, ACE_KEY_SHIFT_5, ACE_KEY_SHIFT_2, ACE_KEY_SHIFT_0, },
+ [8] = { ACTION_NOTHING, ACTION_NOTHING, ACTION_NOTHING, ACTION_NOTHING, ACTION_NOTHING, ACTION_NOTHING, ACTION_NOTHING, ACTION_NOTHING },
+ [9] = { ACE_KEY_SHIFT_SLASH, ACE_KEY_SHIFT_SQUARE, ACE_KEY_RETURN, ACE_KEY_SHIFT_LEFT, ACE_KEY_SHIFT_9, ACE_KEY_SHIFT_6, ACE_KEY_SHIFT_3, ACE_KEY_SHIFT_PERIOD, },
+};
+
+const FLASH ace1000_keycode_matrix_t ace1000_caps_matrix = {
+ [0] = { ACE_KEY_ESC, ACE_KEY_BREAK, ACE_KEY_PAUSE, ACTION_CTRL, ACE_KEY_TAB, ACTION_CAPS, ACTION_SHIFT, ACE_KEY_SPACE, },
+ [1] = { ACE_KEY_1, ACE_KEY_SHIFT_Q, ACE_KEY_SHIFT_A, ACE_KEY_SHIFT_Z, ACE_KEY_2, ACE_KEY_SHIFT_W, ACE_KEY_SHIFT_S, ACE_KEY_SHIFT_X, },
+ [2] = { ACE_KEY_3, ACE_KEY_SHIFT_E, ACE_KEY_SHIFT_D, ACE_KEY_SHIFT_C, ACE_KEY_4, ACE_KEY_SHIFT_R, ACE_KEY_SHIFT_F, ACE_KEY_SHIFT_V, },
+ [3] = { ACE_KEY_5, ACE_KEY_SHIFT_T, ACE_KEY_SHIFT_G, ACE_KEY_SHIFT_B, ACE_KEY_6, ACE_KEY_SHIFT_Y, ACE_KEY_SHIFT_H, ACE_KEY_SHIFT_N, },
+ [4] = { ACE_KEY_7, ACE_KEY_SHIFT_U, ACE_KEY_SHIFT_J, ACE_KEY_SHIFT_M, ACE_KEY_8, ACE_KEY_SHIFT_I, ACE_KEY_SHIFT_K, ACE_KEY_COMMA, },
+ [5] = { ACE_KEY_9, ACE_KEY_SHIFT_O, ACE_KEY_SHIFT_L, ACE_KEY_PERIOD, ACE_KEY_RIGHT, ACE_KEY_UNDERSCORE, ACE_KEY_PLUS, ACE_KEY_SPLAT, },
+ [6] = { ACE_KEY_0, ACE_KEY_SHIFT_P, ACE_KEY_SEMI, ACE_KEY_SLASH, ACE_KEY_7, ACE_KEY_4, ACE_KEY_1, ACE_KEY_GT, },
+ [7] = { ACE_KEY_MINUS, ACE_KEY_CURLY, ACE_KEY_QUOTE, ACTION_SHIFT, ACE_KEY_8, ACE_KEY_5, ACE_KEY_2, ACE_KEY_0, },
+ [8] = { ACTION_NOTHING, ACTION_NOTHING, ACTION_NOTHING, ACTION_NOTHING, ACTION_NOTHING, ACTION_NOTHING, ACTION_NOTHING, ACTION_NOTHING },
+ [9] = { ACE_KEY_SLASH, ACE_KEY_SQUARE, ACE_KEY_RETURN, ACE_KEY_LEFT, ACE_KEY_9, ACE_KEY_6, ACE_KEY_3, ACE_KEY_PERIOD, },
+};
+
+const FLASH ace1000_keycode_matrix_t ace1000_ctrl_matrix = {
+ [0] = { ACE_KEY_ESC, ACE_KEY_BREAK, ACE_KEY_PAUSE, ACTION_CTRL, ACE_KEY_TAB, ACTION_CAPS, ACTION_SHIFT, ACE_KEY_SPACE, },
+ [1] = { ACE_KEY_CTRL_1, ACE_KEY_CTRL_Q, ACE_KEY_CTRL_A, ACE_KEY_CTRL_Z, ACE_KEY_CTRL_2, ACE_KEY_CTRL_W, ACE_KEY_CTRL_S, ACE_KEY_CTRL_X, },
+ [2] = { ACE_KEY_CTRL_3, ACE_KEY_CTRL_E, ACE_KEY_CTRL_D, ACE_KEY_CTRL_C, ACE_KEY_CTRL_4, ACE_KEY_CTRL_R, ACE_KEY_CTRL_F, ACE_KEY_CTRL_V, },
+ [3] = { ACE_KEY_CTRL_5, ACE_KEY_CTRL_T, ACE_KEY_CTRL_G, ACE_KEY_CTRL_B, ACE_KEY_CTRL_6, ACE_KEY_CTRL_Y, ACE_KEY_CTRL_H, ACE_KEY_CTRL_N, },
+ [4] = { ACE_KEY_CTRL_7, ACE_KEY_CTRL_U, ACE_KEY_CTRL_J, ACE_KEY_CTRL_M, ACE_KEY_CTRL_8, ACE_KEY_CTRL_I, ACE_KEY_CTRL_K, ACE_KEY_CTRL_COMMA, },
+ [5] = { ACE_KEY_CTRL_9, ACE_KEY_CTRL_O, ACE_KEY_CTRL_L, ACE_KEY_CTRL_PERIOD, ACE_KEY_CTRL_RIGHT, ACE_KEY_CTRL_UNDERSCORE, ACE_KEY_CTRL_PLUS, ACE_KEY_CTRL_SPLAT, },
+ [6] = { ACE_KEY_CTRL_0, ACE_KEY_CTRL_P, ACE_KEY_CTRL_SEMI, ACE_KEY_CTRL_SLASH, ACE_KEY_CTRL_7, ACE_KEY_CTRL_4, ACE_KEY_CTRL_1, ACE_KEY_CTRL_GT, },
+ [7] = { ACE_KEY_CTRL_MINUS, ACE_KEY_CTRL_CURLY, ACE_KEY_CTRL_QUOTE, ACTION_SHIFT, ACE_KEY_CTRL_8, ACE_KEY_CTRL_5, ACE_KEY_CTRL_2, ACE_KEY_CTRL_0, },
+ [8] = { ACTION_NOTHING, ACTION_NOTHING, ACTION_NOTHING, ACTION_NOTHING, ACTION_NOTHING, ACTION_NOTHING, ACTION_NOTHING, ACTION_NOTHING },
+ [9] = { ACE_KEY_CTRL_SLASH, ACE_KEY_CTRL_SQUARE, ACE_KEY_RETURN, ACE_KEY_CTRL_LEFT, ACE_KEY_CTRL_9, ACE_KEY_CTRL_6, ACE_KEY_CTRL_3, ACE_KEY_CTRL_PERIOD, },
+};
+
+static const ace1000_keycode_matrix_t *ace1000_maps[] = {
+ [ACE1000_CAPS_MAP] = &ace1000_plain_matrix,
+ [ACE1000_PLAIN_MAP] = &ace1000_caps_matrix,
+ [ACE1000_SHIFT_MAP] = &ace1000_shift_matrix,
+ [ACE1000_CTRL_MAP] = &ace1000_ctrl_matrix,
+};
+
+ void ace1000_add_map(const ace1000_map_index_t map_index,
+ modifier_index_t modifier_index)
+{
+
+ asdf_keycode_t (*matrix)[ACE1000_NUM_COLS] =
+ (asdf_keycode_t (*)[ACE1000_NUM_COLS]) ace1000_maps[map_index];
+
+ asdf_keymaps_add_map(&matrix[0][0], modifier_index, (uint8_t) ACE1000_NUM_ROWS,
+ (uint8_t) ACE1000_NUM_COLS);
+}
+
+
+
+//-------|---------|---------+---------+---------+---------+---------+---------+
+// Above line is 80 columns, and should display completely in the editor.
diff --git a/firmware/asdf/src/Keymaps/asdf_keymap_ace1000_add_map.h b/firmware/asdf/src/Keymaps/asdf_keymap_ace1000_add_map.h
new file mode 100644
index 0000000..161cb94
--- /dev/null
+++ b/firmware/asdf/src/Keymaps/asdf_keymap_ace1000_add_map.h
@@ -0,0 +1,248 @@
+// -*- mode: C; tab-width: 4 ; indent-tabs-mode: nil -*-
+//
+// Unfified Keyboard Project
+// ASDF keyboard firmware
+//
+// asdf_keymap_classic_add_map.h
+//
+// defines keymap matrices and add_map() function for the Franklin ACE 1000
+//
+// Copyright 2023 Chris RYU
+// Copyright 2019 David Fenyes
+//
+// 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 3 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 .
+
+#if !defined(ASDF_KEYMAP_ACE1000_ADD_MAP_H)
+#define ASDF_KEYMAP_ACE1000_ADD_MAP_H
+
+#include "asdf_modifiers.h"
+
+typedef enum {
+ ACE1000_PLAIN_MAP,
+ ACE1000_CAPS_MAP,
+ ACE1000_SHIFT_MAP,
+ ACE1000_CTRL_MAP,
+} ace1000_map_index_t;
+
+
+// function prototypes
+void ace1000_add_map(const ace1000_map_index_t map_index, modifier_index_t modifier_index);
+
+#define ACE_KEY_0 0x30
+#define ACE_KEY_1 0x31
+#define ACE_KEY_2 0x32
+#define ACE_KEY_3 0x33
+#define ACE_KEY_4 0x34
+#define ACE_KEY_5 0x35
+#define ACE_KEY_6 0x36
+#define ACE_KEY_7 0x37
+#define ACE_KEY_8 0x38
+#define ACE_KEY_9 0x39
+#define ACE_KEY_A 0x61
+#define ACE_KEY_B 0x62
+#define ACE_KEY_BREAK 0x03
+#define ACE_KEY_C 0x63
+#define ACE_KEY_COMMA 0x2c
+#define ACE_KEY_CTRL_0 0x30
+#define ACE_KEY_CTRL_1 0x31
+#define ACE_KEY_CTRL_2 0x32
+#define ACE_KEY_CTRL_3 0x33
+#define ACE_KEY_CTRL_4 0x34
+#define ACE_KEY_CTRL_5 0x35
+#define ACE_KEY_CTRL_6 0x36
+#define ACE_KEY_CTRL_7 0x37
+#define ACE_KEY_CTRL_8 0x38
+#define ACE_KEY_CTRL_9 0x39
+#define ACE_KEY_CTRL_A 0x01
+#define ACE_KEY_CTRL_B 0x02
+#define ACE_KEY_CTRL_BREAK 0x03
+#define ACE_KEY_CTRL_C 0x03
+#define ACE_KEY_CTRL_COMMA 0x2c
+#define ACE_KEY_CTRL_CURLY 0x7b
+#define ACE_KEY_CTRL_D 0x04
+#define ACE_KEY_CTRL_E 0x05
+#define ACE_KEY_CTRL_ESC 0x1b
+#define ACE_KEY_CTRL_F 0x06
+#define ACE_KEY_CTRL_G 0x07
+#define ACE_KEY_CTRL_H 0x08
+#define ACE_KEY_CTRL_I 0x09
+#define ACE_KEY_CTRL_J 0x0a
+#define ACE_KEY_CTRL_K 0x0b
+#define ACE_KEY_CTRL_L 0x0c
+#define ACE_KEY_CTRL_LEFT 0x08
+#define ACE_KEY_CTRL_M 0x0d
+#define ACE_KEY_CTRL_N 0x0e
+#define ACE_KEY_CTRL_NUM_0 0x30
+#define ACE_KEY_CTRL_NUM_1 0x31
+#define ACE_KEY_CTRL_NUM_2 0x32
+#define ACE_KEY_CTRL_NUM_3 0x33
+#define ACE_KEY_CTRL_NUM_4 0x34
+#define ACE_KEY_CTRL_NUM_5 0x35
+#define ACE_KEY_CTRL_NUM_6 0x36
+#define ACE_KEY_CTRL_NUM_7 0x37
+#define ACE_KEY_CTRL_NUM_8 0x38
+#define ACE_KEY_CTRL_NUM_9 0x39
+#define ACE_KEY_CTRL_GT 0x3e
+#define ACE_KEY_CTRL_MINUS 0x2d
+#define ACE_KEY_CTRL_SPLAT 0x2a
+#define ACE_KEY_CTRL_NUM_PERIOD 0x2e
+#define ACE_KEY_CTRL_NUM_PLUS 0x2b
+#define ACE_KEY_CTRL_O 0x0f
+#define ACE_KEY_CTRL_P 0x10
+#define ACE_KEY_RETURN 0x0d
+#define ACE_KEY_CTRL_PAUSE 0x13
+#define ACE_KEY_CTRL_PERIOD 0x2e
+#define ACE_KEY_CTRL_PLUS 0x3d
+#define ACE_KEY_CTRL_Q 0x11
+#define ACE_KEY_CTRL_SLASH 0x2f
+#define ACE_KEY_CTRL_QUOTE 0x27
+#define ACE_KEY_CTRL_R 0x12
+#define ACE_KEY_CTRL_RIGHT 0x15
+#define ACE_KEY_CTRL_S 0x13
+#define ACE_KEY_CTRL_SEMI 0x3b
+#define ACE_KEY_CTRL_SPACE 0x20
+#define ACE_KEY_CTRL_SQUARE 0x1d
+#define ACE_KEY_CTRL_T 0x14
+#define ACE_KEY_CTRL_TAB 0x09
+#define ACE_KEY_CTRL_U 0x15
+#define ACE_KEY_CTRL_UNDERSCORE 0x3d
+#define ACE_KEY_CTRL_V 0x16
+#define ACE_KEY_CTRL_W 0x17
+#define ACE_KEY_CTRL_X 0x18
+#define ACE_KEY_CTRL_Y 0x19
+#define ACE_KEY_CTRL_Z 0x1a
+#define ACE_KEY_CURLY 0x7b
+#define ACE_KEY_D 0x64
+#define ACE_KEY_E 0x65
+#define ACE_KEY_ESC 0x1b
+#define ACE_KEY_F 0x66
+#define ACE_KEY_G 0x67
+#define ACE_KEY_H 0x68
+#define ACE_KEY_I 0x69
+#define ACE_KEY_J 0x6a
+#define ACE_KEY_K 0x6b
+#define ACE_KEY_L 0x6c
+#define ACE_KEY_LEFT 0x08
+#define ACE_KEY_M 0x6d
+#define ACE_KEY_N 0x6e
+#define ACE_KEY_NUM_0 0x30
+#define ACE_KEY_NUM_1 0x31
+#define ACE_KEY_NUM_2 0x32
+#define ACE_KEY_NUM_3 0x33
+#define ACE_KEY_NUM_4 0x34
+#define ACE_KEY_NUM_5 0x35
+#define ACE_KEY_NUM_6 0x36
+#define ACE_KEY_NUM_7 0x37
+#define ACE_KEY_NUM_8 0x38
+#define ACE_KEY_NUM_9 0x39
+#define ACE_KEY_GT 0x3e
+#define ACE_KEY_MINUS 0x2d
+#define ACE_KEY_SPLAT 0x2a
+#define ACE_KEY_NUM_PERIOD 0x2e
+#define ACE_KEY_NUM_PLUS 0x2b
+#define ACE_KEY_O 0x6f
+#define ACE_KEY_P 0x70
+#define ACE_KEY_PAUSE 0x13
+#define ACE_KEY_PERIOD 0x2e
+#define ACE_KEY_PLUS 0x3d
+#define ACE_KEY_Q 0x71
+#define ACE_KEY_SLASH 0x2f
+#define ACE_KEY_QUOTE 0x27
+#define ACE_KEY_R 0x72
+#define ACE_KEY_RIGHT 0x15
+#define ACE_KEY_S 0x73
+#define ACE_KEY_SEMI 0x3b
+#define ACE_KEY_SHIFT_0 0x29
+#define ACE_KEY_SHIFT_1 0x21
+#define ACE_KEY_SHIFT_2 0x40
+#define ACE_KEY_SHIFT_3 0x23
+#define ACE_KEY_SHIFT_4 0x24
+#define ACE_KEY_SHIFT_5 0x25
+#define ACE_KEY_SHIFT_6 0x5e
+#define ACE_KEY_SHIFT_7 0x26
+#define ACE_KEY_SHIFT_8 0x2a
+#define ACE_KEY_SHIFT_9 0x28
+#define ACE_KEY_SHIFT_A 0x41
+#define ACE_KEY_SHIFT_B 0x42
+#define ACE_KEY_SHIFT_BREAK 0x03
+#define ACE_KEY_SHIFT_C 0x43
+#define ACE_KEY_SHIFT_COMMA 0x3c
+#define ACE_KEY_SHIFT_CURLY 0x7d
+#define ACE_KEY_SHIFT_D 0x44
+#define ACE_KEY_SHIFT_E 0x45
+#define ACE_KEY_SHIFT_ESC 0x1b
+#define ACE_KEY_SHIFT_F 0x46
+#define ACE_KEY_SHIFT_G 0x47
+#define ACE_KEY_SHIFT_H 0x48
+#define ACE_KEY_SHIFT_I 0x49
+#define ACE_KEY_SHIFT_J 0x4a
+#define ACE_KEY_SHIFT_K 0x4b
+#define ACE_KEY_SHIFT_L 0x4c
+#define ACE_KEY_SHIFT_LEFT 0x08
+#define ACE_KEY_SHIFT_M 0x4d
+#define ACE_KEY_SHIFT_N 0x4e
+#define ACE_KEY_SHIFT_NUM_0 0x30
+#define ACE_KEY_SHIFT_NUM_1 0x31
+#define ACE_KEY_SHIFT_NUM_2 0x32
+#define ACE_KEY_SHIFT_NUM_3 0x33
+#define ACE_KEY_SHIFT_NUM_4 0x34
+#define ACE_KEY_SHIFT_NUM_5 0x35
+#define ACE_KEY_SHIFT_NUM_6 0x36
+#define ACE_KEY_SHIFT_NUM_7 0x37
+#define ACE_KEY_SHIFT_NUM_8 0x38
+#define ACE_KEY_SHIFT_NUM_9 0x39
+#define ACE_KEY_SHIFT_GT 0x3e
+#define ACE_KEY_SHIFT_MINUS 0x2d
+#define ACE_KEY_SHIFT_SPLAT 0x2a
+#define ACE_KEY_SHIFT_NUM_PERIOD 0x2e
+#define ACE_KEY_SHIFT_NUM_PLUS 0x2b
+#define ACE_KEY_SHIFT_O 0x4f
+#define ACE_KEY_SHIFT_P 0x50
+#define ACE_KEY_SHIFT_PAUSE 0x13
+#define ACE_KEY_SHIFT_PERIOD 0x3e
+#define ACE_KEY_SHIFT_PLUS 0x2b
+#define ACE_KEY_SHIFT_Q 0x51
+#define ACE_KEY_SHIFT_SLASH 0x3f
+#define ACE_KEY_SHIFT_QUOTE 0x22
+#define ACE_KEY_SHIFT_R 0x52
+#define ACE_KEY_SHIFT_RIGHT 0x15
+#define ACE_KEY_SHIFT_S 0x53
+#define ACE_KEY_SHIFT_SEMI 0x3a
+#define ACE_KEY_SHIFT_SPACE 0x20
+#define ACE_KEY_SHIFT_SQUARE 0x5d
+#define ACE_KEY_SHIFT_T 0x54
+#define ACE_KEY_SHIFT_TAB 0x09
+#define ACE_KEY_SHIFT_U 0x55
+#define ACE_KEY_SHIFT_UNDERSCORE 0x5f
+#define ACE_KEY_SHIFT_V 0x56
+#define ACE_KEY_SHIFT_W 0x57
+#define ACE_KEY_SHIFT_X 0x58
+#define ACE_KEY_SHIFT_Y 0x59
+#define ACE_KEY_SHIFT_Z 0x5A
+#define ACE_KEY_SPACE 0x20
+#define ACE_KEY_SQUARE 0x5b
+#define ACE_KEY_T 0x74
+#define ACE_KEY_TAB 0x09
+#define ACE_KEY_U 0x75
+#define ACE_KEY_UNDERSCORE 0x2d
+#define ACE_KEY_V 0x76
+#define ACE_KEY_W 0x77
+#define ACE_KEY_X 0x78
+#define ACE_KEY_Y 0x79
+#define ACE_KEY_Z 0x7a
+
+#endif /* !defined (ASDF_KEYMAP_ACE1000_ADD_MAP_H) */
+
+//-------|---------|---------+---------+---------+---------+---------+---------+
+// Above line is 80 columns, and should display completely in the editor.