How unified-retro-keyboard/asdf-firmware works
ASDF is modular keyboard-scanning firmware: hardware ports scan a key matrix, the core handles key transitions and actions, selected application keymaps translate row/column positions into codes, and buffered codes reach the configured output routine. Major capabilities include debounce, N-key rollover, modifier modes, repeat, DIP-switch keymap selection, virtual outputs, and multiple retrocomputer layouts. Architecture variants and keymap families are grouped to keep the map readable. Relationships are based on the excerpts, SOURCE INDEX references, and README; unsampled implementation details are not assumed.
Main entry points: asdf_keymaps.c Map registry · asdf.c Scan and actions · main.c Scheduler loop · asdf_arch_atmega2560.c Matrix hardware ports
Components 19
Runtime core
- Scheduler loop
src/main.c - Scan and actions
src/asdf.c - Debounce scanner
src/asdf_physical.c - Modifier state
src/asdf_modifiers.h - Key repeat
src/asdf_repeat.c
Keymap selection
- Map registry
src/asdf_keymaps.c - Classic maps
src/Keymaps/asdf_keymap_classic_add_map.c - Apple II maps
src/Keymaps/asdf_keymap_apple2_add_map.c - Apple II layout
src/Keymaps/asdf_keymap_apple2_matrix.c - ACE 1000 maps
src/Keymaps/asdf_keymap_ace1000_add_map.c - Sol-20 map
src/Keymaps/asdf_keymap_sol.c - DIP switch actions
src/Keymaps/asdf_keymap_defs_dipswitch.h
Hardware ports
- Matrix hardware ports
src/Arch/asdf_arch_atmega2560.c
Output and resources
- Code buffer
src/asdf_buffer.c - Output hooks
src/asdf_hook.c - Virtual outputs
src/asdf_virtual.c - Physical resources
src/asdf_physical.c
Other components
- Physical keyboard
- Host computer
Connections 23
- Physical keyboard → Matrix hardware ports: matrix signals
- Scheduler loop → Scan and actions: initializes and scans
src/main.c - Scheduler loop → Matrix hardware ports: checks tick
src/main.c - Matrix hardware ports → Debounce scanner: provides row reads
- Scan and actions → Debounce scanner: reads key states
src/asdf.c - Scan and actions → Map registry: looks up codes
src/asdf.c - Scan and actions → Modifier state: uses modifier state
src/asdf.c - Scan and actions → Key repeat: manages repeat
src/asdf.c - Scan and actions → Code buffer: buffers codes
src/asdf.c - Scan and actions → Virtual outputs: activates outputs
src/asdf.c - Map registry → Virtual outputs: resets resources
src/asdf_keymaps.c - Map registry → Output hooks: resets hooks
src/asdf_keymaps.c - Classic maps → Map registry: registers maps
src/Keymaps/asdf_keymap_classic_add_map.c - Apple II maps → Map registry: registers maps
src/Keymaps/asdf_keymap_apple2_add_map.c - Apple II layout → Apple II maps: defines layout
- ACE 1000 maps → Map registry: registers maps
src/Keymaps/asdf_keymap_ace1000_add_map.c - Sol-20 map → Map registry: registers maps
- DIP switch actions → Map registry: selects map
- Scheduler loop → Code buffer: reads next code
src/main.c - Scheduler loop → Output hooks: dispatches output
src/main.c - Output hooks → Host computer: sends codes
- Virtual outputs → Physical resources: assigns resources
src/asdf_virtual.c - Physical resources → Matrix hardware ports: drives hardware