From ef3ff63cb5a6a6e83082b9e1bd0d4fc93e438b5d Mon Sep 17 00:00:00 2001 From: sergeyyarkov Date: Fri, 15 May 2026 14:15:17 +0300 Subject: [PATCH] init --- .gitignore | 1 + .vscode/c_cpp_properties.json | 13 + .vscode/launch.json | 19 + .vscode/settings.json | 8 + .vscode/tasks.json | 63 + firmware/Makefile | 104 + firmware/build/firmware.S | 3403 +++++++ firmware/build/firmware.elf | Bin 0 -> 12804 bytes firmware/build/firmware.hex | 235 + firmware/obj/light_ws2812.o | Bin 0 -> 1260 bytes firmware/obj/main.o | Bin 0 -> 8292 bytes firmware/obj/spi.o | Bin 0 -> 820 bytes firmware/obj/usart.o | Bin 0 -> 1892 bytes firmware/obj/ws2812b.o | Bin 0 -> 1144 bytes firmware/src/defs.h | 10 + firmware/src/light_ws2812.c | 243 + firmware/src/light_ws2812.h | 116 + firmware/src/main.c | 400 + firmware/src/main.h | 50 + firmware/src/spi.c | 12 + firmware/src/spi.h | 9 + firmware/src/usart.c | 64 + firmware/src/usart.h | 24 + firmware/src/ws2812_config.h | 47 + firmware/src/ws2812b.c | 48 + firmware/src/ws2812b.h | 10 + ...ga8a_rgb-night-light-2026-04-01_153223.zip | Bin 0 -> 16778 bytes ...ga8a_rgb-night-light-2026-04-01_153936.zip | Bin 0 -> 19471 bytes ...ga8a_rgb-night-light-2026-04-01_154443.zip | Bin 0 -> 20348 bytes ...ga8a_rgb-night-light-2026-04-01_160358.zip | Bin 0 -> 22464 bytes ...ga8a_rgb-night-light-2026-04-01_161000.zip | Bin 0 -> 23139 bytes ...ga8a_rgb-night-light-2026-04-03_002332.zip | Bin 0 -> 23328 bytes ...ga8a_rgb-night-light-2026-04-04_222031.zip | Bin 0 -> 23139 bytes ...ga8a_rgb-night-light-2026-04-06_002339.zip | Bin 0 -> 23328 bytes ...ga8a_rgb-night-light-2026-04-06_213759.zip | Bin 0 -> 24597 bytes ...ga8a_rgb-night-light-2026-04-08_234327.zip | Bin 0 -> 24408 bytes ...ga8a_rgb-night-light-2026-04-09_232040.zip | Bin 0 -> 24429 bytes hardware/atmega8a_rgb-night-light.kicad_pcb | 2 + hardware/atmega8a_rgb-night-light.kicad_prl | 130 + hardware/atmega8a_rgb-night-light.kicad_pro | 618 ++ hardware/atmega8a_rgb-night-light.kicad_sch | 8904 +++++++++++++++++ hardware/ch340_adapter_smd-F_Cu.svg | 519 + hardware/fp-info-cache | 1 + hardware/lut.pdf | Bin 0 -> 9268 bytes hardware/lut.svg | 766 ++ hardware/sym-lib-table | 5 + 46 files changed, 15824 insertions(+) create mode 100644 .gitignore create mode 100644 .vscode/c_cpp_properties.json create mode 100644 .vscode/launch.json create mode 100644 .vscode/settings.json create mode 100644 .vscode/tasks.json create mode 100644 firmware/Makefile create mode 100644 firmware/build/firmware.S create mode 100755 firmware/build/firmware.elf create mode 100644 firmware/build/firmware.hex create mode 100644 firmware/obj/light_ws2812.o create mode 100644 firmware/obj/main.o create mode 100644 firmware/obj/spi.o create mode 100644 firmware/obj/usart.o create mode 100644 firmware/obj/ws2812b.o create mode 100644 firmware/src/defs.h create mode 100644 firmware/src/light_ws2812.c create mode 100644 firmware/src/light_ws2812.h create mode 100644 firmware/src/main.c create mode 100644 firmware/src/main.h create mode 100644 firmware/src/spi.c create mode 100644 firmware/src/spi.h create mode 100644 firmware/src/usart.c create mode 100644 firmware/src/usart.h create mode 100644 firmware/src/ws2812_config.h create mode 100644 firmware/src/ws2812b.c create mode 100644 firmware/src/ws2812b.h create mode 100755 hardware/atmega8a_rgb-night-light-backups/atmega8a_rgb-night-light-2026-04-01_153223.zip create mode 100755 hardware/atmega8a_rgb-night-light-backups/atmega8a_rgb-night-light-2026-04-01_153936.zip create mode 100755 hardware/atmega8a_rgb-night-light-backups/atmega8a_rgb-night-light-2026-04-01_154443.zip create mode 100755 hardware/atmega8a_rgb-night-light-backups/atmega8a_rgb-night-light-2026-04-01_160358.zip create mode 100755 hardware/atmega8a_rgb-night-light-backups/atmega8a_rgb-night-light-2026-04-01_161000.zip create mode 100755 hardware/atmega8a_rgb-night-light-backups/atmega8a_rgb-night-light-2026-04-03_002332.zip create mode 100755 hardware/atmega8a_rgb-night-light-backups/atmega8a_rgb-night-light-2026-04-04_222031.zip create mode 100755 hardware/atmega8a_rgb-night-light-backups/atmega8a_rgb-night-light-2026-04-06_002339.zip create mode 100755 hardware/atmega8a_rgb-night-light-backups/atmega8a_rgb-night-light-2026-04-06_213759.zip create mode 100755 hardware/atmega8a_rgb-night-light-backups/atmega8a_rgb-night-light-2026-04-08_234327.zip create mode 100755 hardware/atmega8a_rgb-night-light-backups/atmega8a_rgb-night-light-2026-04-09_232040.zip create mode 100755 hardware/atmega8a_rgb-night-light.kicad_pcb create mode 100755 hardware/atmega8a_rgb-night-light.kicad_prl create mode 100755 hardware/atmega8a_rgb-night-light.kicad_pro create mode 100755 hardware/atmega8a_rgb-night-light.kicad_sch create mode 100755 hardware/ch340_adapter_smd-F_Cu.svg create mode 100755 hardware/fp-info-cache create mode 100755 hardware/lut.pdf create mode 100755 hardware/lut.svg create mode 100755 hardware/sym-lib-table diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..8a06c66 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +3d diff --git a/.vscode/c_cpp_properties.json b/.vscode/c_cpp_properties.json new file mode 100644 index 0000000..b2d69ea --- /dev/null +++ b/.vscode/c_cpp_properties.json @@ -0,0 +1,13 @@ +{ + "configurations": [ + { + "name": "Linux", + "compilerPath": "/usr/bin/avr-gcc", + "compilerArgs": ["-Wall", "-mmcu=atmega8a", "-Os"], + "includePath": ["${workspaceFolder}/firmware/**", "/usr/lib/avr/include"], + "cStandard": "c11", + "intelliSenseMode": "linux-gcc-x64" + } + ], + "version": 4 +} \ No newline at end of file diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..6ef9294 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,19 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "name": "Debug (bloom)", + "type": "cppdbg", + "request": "launch", + "program": "${workspaceFolder}/firmware/build/firmware.elf", + "MIMode": "gdb", + "miDebuggerPath": "/usr/bin/avr-gdb", + "miDebuggerServerAddress": "localhost:1234", + "stopAtEntry": true, + "cwd": "${workspaceFolder}", + "environment": [], + "externalConsole": false, + // "preLaunchTask": "Debug server (bloom)", + } + ] +} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..947c403 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,8 @@ +{ + "C_Cpp.default.compilerPath": "/usr/bin/avr-gcc", + "files.associations": {}, + "makefile.configureOnOpen": false, + "makefile.makefilePath": "./firmware/Makefile", + "makefile.makeDirectory": "./firmware", + "C_Cpp.formatting": "disabled" +} \ No newline at end of file diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 0000000..58fdd8f --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,63 @@ +{ + // See https://go.microsoft.com/fwlink/?LinkId=733558 + // for the documentation about the tasks.json format + "version": "2.0.0", + "tasks": [ + { + "label": "Build (prod)", + "type": "shell", + "command": "make -C ${workspaceFolder}/firmware", + "problemMatcher": ["$gcc"], + "group": "build" + }, + { + "label": "Clean and build (prod)", + "type": "shell", + "command": "make -C ${workspaceFolder}/firmware clean && make -C ${workspaceFolder}/firmware", + "problemMatcher": ["$gcc"], + "group": "build", + "presentation": { + "close": true, + "showReuseMessage": false + } + }, + { + "label": "Clean and build (debug)", + "type": "shell", + "command": "make -C ${workspaceFolder}/firmware clean && make -C ${workspaceFolder}/firmware DEBUG=true", + "problemMatcher": ["$gcc"], + "group": "build", + "presentation": { + "close": true, + "showReuseMessage": false + } + }, + { + "label": "Debug server (bloom)", + "type": "shell", + "command": "bloom", + "presentation": { + "echo": true, + "reveal": "always", + "panel": "shared", + "focus": true, + "showReuseMessage": false, + "clear": false, + "close": true + }, + "problemMatcher": { + "owner": "custom", + "pattern": { + "regexp": "." + }, + "background": { + "activeOnStart": true, + "beginsPattern": "DebugServer ready", + "endsPattern": "DebugServer ready" + } + }, + "isBackground": true, + "dependsOn": "Clean and build (debug)" + } + ] +} \ No newline at end of file diff --git a/firmware/Makefile b/firmware/Makefile new file mode 100644 index 0000000..13df3d9 --- /dev/null +++ b/firmware/Makefile @@ -0,0 +1,104 @@ +TARGET=firmware + +# === Directories path ============================================================================= +SRC_DIR=./src +OBJ_DIR=./obj +ASM_DIR=./asm +OUT_DIR=./build +# ================================================================================================== + + + +# === Device configuration ========================================================================= +MCU=atmega8a +FUSE_HIGH=0xd9 +FUSE_LOW=0xff +# ================================================================================================== + + + +# === Toolchain ==================================================================================== +OBJCOPY=avr-objcopy +OBJDUMP=avr-objdump +SIZE=avr-size +CC=avr-gcc +# ================================================================================================== + + + +# === Programmer options =========================================================================== +# MPLAB SNAP: snap_jtag (or isp) +# USBtiny: usbtiny +AVRDUDE_DEVICE=m8a +AVRDUDE_PROGRAMMER=snap_isp +AVRDUDE_SPEED=128kHz +AVRDUDE_FLAGS=-c $(AVRDUDE_PROGRAMMER) -p $(AVRDUDE_DEVICE) -B $(AVRDUDE_SPEED) +# ================================================================================================== + + + +# === Compiler options ============================================================================= +CC_FLAGS=-Wall -Wextra +ifeq ($(DEBUG), true) +CC_FLAGS+=-ggdb -Og +CC_FLAGS+=-Wl,-Map=$(OUT_DIR)/$(TARGET).map +CC_FLAGS+=-DDEBUG_BUILD=TRUE +else +CC_FLAGS+=-Os +endif +CC_FLAGS+=-mmcu=$(MCU) +CC_FLAGS+=-std=c11 +# ================================================================================================== + +OBJS=$(subst $(SRC_DIR),$(OBJ_DIR),$(patsubst %.c,%.o,$(wildcard $(SRC_DIR)/*.c))) +ASMS=$(subst $(SRC_DIR),$(ASM_DIR),$(patsubst %.c,%.S,$(wildcard $(SRC_DIR)/*.c))) + +.PHONY: all asms hex clean size prog_flash prog_test prog_read_eep prog_read_fuses prog_flash_fuses + +all: hex size +hex: $(OUT_DIR)/$(TARGET).hex +asms: $(ASMS) +prog_flash: + avrdude $(AVRDUDE_FLAGS) -V -U flash:w:"$(OUT_DIR)/$(TARGET).hex":i +prog_test: + avrdude $(AVRDUDE_FLAGS) +prog_read_eep: + avrdude $(AVRDUDE_FLAGS) -U eeprom:r:"$(OUT_DIR)/eeprom.hex":i +prog_read_fuses: + avrdude $(AVRDUDE_FLAGS) -U hfuse:r:"$(OUT_DIR)/h_fuse.hex":h -U lfuse:r:"$(OUT_DIR)/l_fuse.hex":h +prog_flash_fuses: + avrdude $(AVRDUDE_FLAGS) -U hfuse:w:$(FUSE_HIGH):m -U lfuse:w:$(FUSE_LOW):m + +$(OUT_DIR)/$(TARGET).hex: $(OUT_DIR)/$(TARGET).elf $(OUT_DIR)/$(TARGET).S + $(OBJCOPY) -R .eeprom -R .fuse -R .lock -R .signature -O ihex $< $@ + +$(OUT_DIR)/$(TARGET).elf: $(OBJS) | $(OUT_DIR) + $(CC) $(CC_FLAGS) $^ -o $@ + +$(OUT_DIR)/$(TARGET).S: $(OBJS) | $(OUT_DIR) + $(OBJDUMP) -D $(OUT_DIR)/$(TARGET).elf > $@ + +## Compile to object files +$(OBJ_DIR)/%.o: $(SRC_DIR)/%.c $(SRC_DIR)/%.h | $(OBJ_DIR) + $(CC) $(CC_FLAGS) -c $(SRC_DIR)/$(patsubst %.o,%.c, $(notdir $@)) -o $@ + +## Compile to assembler files (optional) +$(ASM_DIR)/%.S: $(SRC_DIR)/%.c $(SRC_DIR)/%.h | $(ASM_DIR) + $(CC) -S -fverbose-asm $(CC_FLAGS) -c $(SRC_DIR)/$(patsubst %.S,%.c, $(notdir $@)) -o $@ + +$(OUT_DIR): + mkdir $@ + +$(OBJ_DIR): + mkdir $@ + +$(ASM_DIR): + mkdir $@ + +clean: + rm -rf $(OBJ_DIR) + rm -rf $(OUT_DIR) + rm -rf $(ASM_DIR) + +size: $(OUT_DIR)/$(TARGET).elf + $(SIZE) --mcu=$(MCU) --format=avr $< \ No newline at end of file diff --git a/firmware/build/firmware.S b/firmware/build/firmware.S new file mode 100644 index 0000000..b273560 --- /dev/null +++ b/firmware/build/firmware.S @@ -0,0 +1,3403 @@ + +./build/firmware.elf: file format elf32-avr + + +Disassembly of section .text: + +00000000 <__vectors>: + 0: 12 c0 rjmp .+36 ; 0x26 <__ctors_end> + 2: 2c c0 rjmp .+88 ; 0x5c <__bad_interrupt> + 4: 2b c0 rjmp .+86 ; 0x5c <__bad_interrupt> + 6: 2a c0 rjmp .+84 ; 0x5c <__bad_interrupt> + 8: 29 c0 rjmp .+82 ; 0x5c <__bad_interrupt> + a: 28 c0 rjmp .+80 ; 0x5c <__bad_interrupt> + c: 27 c0 rjmp .+78 ; 0x5c <__bad_interrupt> + e: 26 c0 rjmp .+76 ; 0x5c <__bad_interrupt> + 10: 25 c0 rjmp .+74 ; 0x5c <__bad_interrupt> + 12: 24 c0 rjmp .+72 ; 0x5c <__bad_interrupt> + 14: 23 c0 rjmp .+70 ; 0x5c <__bad_interrupt> + 16: c1 c3 rjmp .+1922 ; 0x79a <__vector_11> + 18: 21 c0 rjmp .+66 ; 0x5c <__bad_interrupt> + 1a: 20 c0 rjmp .+64 ; 0x5c <__bad_interrupt> + 1c: 1f c0 rjmp .+62 ; 0x5c <__bad_interrupt> + 1e: 1e c0 rjmp .+60 ; 0x5c <__bad_interrupt> + 20: 1d c0 rjmp .+58 ; 0x5c <__bad_interrupt> + 22: 1c c0 rjmp .+56 ; 0x5c <__bad_interrupt> + 24: 1b c0 rjmp .+54 ; 0x5c <__bad_interrupt> + +00000026 <__ctors_end>: + 26: 11 24 eor r1, r1 + 28: 1f be out 0x3f, r1 ; 63 + 2a: cf e5 ldi r28, 0x5F ; 95 + 2c: d4 e0 ldi r29, 0x04 ; 4 + 2e: de bf out 0x3e, r29 ; 62 + 30: cd bf out 0x3d, r28 ; 61 + +00000032 <__do_copy_data>: + 32: 10 e0 ldi r17, 0x00 ; 0 + 34: a0 e6 ldi r26, 0x60 ; 96 + 36: b0 e0 ldi r27, 0x00 ; 0 + 38: e4 ef ldi r30, 0xF4 ; 244 + 3a: fd e0 ldi r31, 0x0D ; 13 + 3c: 02 c0 rjmp .+4 ; 0x42 <__SREG__+0x3> + 3e: 05 90 lpm r0, Z+ + 40: 0d 92 st X+, r0 + 42: a4 3f cpi r26, 0xF4 ; 244 + 44: b1 07 cpc r27, r17 + 46: d9 f7 brne .-10 ; 0x3e <__SP_H__> + +00000048 <__do_clear_bss>: + 48: 21 e0 ldi r18, 0x01 ; 1 + 4a: a4 ef ldi r26, 0xF4 ; 244 + 4c: b0 e0 ldi r27, 0x00 ; 0 + 4e: 01 c0 rjmp .+2 ; 0x52 <.do_clear_bss_start> + +00000050 <.do_clear_bss_loop>: + 50: 1d 92 st X+, r1 + +00000052 <.do_clear_bss_start>: + 52: a0 34 cpi r26, 0x40 ; 64 + 54: b2 07 cpc r27, r18 + 56: e1 f7 brne .-8 ; 0x50 <.do_clear_bss_loop> + 58: 8e d4 rcall .+2332 ; 0x976
+ 5a: ca c6 rjmp .+3476 ; 0xdf0 <_exit> + +0000005c <__bad_interrupt>: + 5c: d1 cf rjmp .-94 ; 0x0 <__vectors> + +0000005e : + 5e: 21 b3 in r18, 0x11 ; 17 + 60: 24 2b or r18, r20 + 62: 21 bb out 0x11, r18 ; 17 + 64: 32 b3 in r19, 0x12 ; 18 + 66: 24 2f mov r18, r20 + 68: 20 95 com r18 + 6a: 23 23 and r18, r19 + 6c: 32 b3 in r19, 0x12 ; 18 + 6e: 43 2b or r20, r19 + 70: 3f b7 in r19, 0x3f ; 63 + 72: f8 94 cli + 74: fc 01 movw r30, r24 + 76: 68 0f add r22, r24 + 78: 79 1f adc r23, r25 + 7a: a2 e3 ldi r26, 0x32 ; 50 + 7c: b0 e0 ldi r27, 0x00 ; 0 + 7e: e6 17 cp r30, r22 + 80: f7 07 cpc r31, r23 + 82: 19 f4 brne .+6 ; 0x8a + 84: 3f bf out 0x3f, r19 ; 63 + 86: 78 94 sei + 88: 08 95 ret + 8a: 81 91 ld r24, Z+ + 8c: 98 e0 ldi r25, 0x08 ; 8 + 8e: e8 94 clt + +00000090 : + 90: 4c 93 st X, r20 + 92: 00 00 nop + 94: 87 ff sbrs r24, 7 + 96: 2c 93 st X, r18 + 98: 88 0f add r24, r24 + 9a: 07 f4 brid .+0 ; 0x9c + 9c: 07 f4 brid .+0 ; 0x9e + 9e: 08 f4 brcc .+2 ; 0xa2 + a0: 2c 93 st X, r18 + +000000a2 : + a2: 9a 95 dec r25 + a4: a9 f7 brne .-22 ; 0x90 + a6: eb cf rjmp .-42 ; 0x7e + +000000a8 : + a8: 9b 01 movw r18, r22 + aa: 22 0f add r18, r18 + ac: 33 1f adc r19, r19 + ae: 62 0f add r22, r18 + b0: 73 1f adc r23, r19 + b2: d5 df rcall .-86 ; 0x5e + b4: 83 e8 ldi r24, 0x83 ; 131 + b6: 93 e0 ldi r25, 0x03 ; 3 + b8: 01 97 sbiw r24, 0x01 ; 1 + ba: f1 f7 brne .-4 ; 0xb8 + bc: 00 c0 rjmp .+0 ; 0xbe + be: 00 00 nop + c0: 08 95 ret + +000000c2 : + c2: 40 e8 ldi r20, 0x80 ; 128 + c4: f1 cf rjmp .-30 ; 0xa8 + +000000c6 : + c6: 66 0f add r22, r22 + c8: 77 1f adc r23, r23 + ca: 66 0f add r22, r22 + cc: 77 1f adc r23, r23 + ce: 40 e8 ldi r20, 0x80 ; 128 + d0: c6 df rcall .-116 ; 0x5e + d2: 83 e8 ldi r24, 0x83 ; 131 + d4: 93 e0 ldi r25, 0x03 ; 3 + d6: 01 97 sbiw r24, 0x01 ; 1 + d8: f1 f7 brne .-4 ; 0xd6 + da: 00 c0 rjmp .+0 ; 0xdc + dc: 00 00 nop + de: 08 95 ret + +000000e0 : + e0: 40 e8 ldi r20, 0x80 ; 128 + e2: bd cf rjmp .-134 ; 0x5e + +000000e4 : + e4: 80 91 f4 00 lds r24, 0x00F4 ; 0x8000f4 <__data_end> + e8: 81 11 cpse r24, r1 + ea: 10 92 f4 00 sts 0x00F4, r1 ; 0x8000f4 <__data_end> + ee: 08 95 ret + +000000f0 : + f0: 28 2f mov r18, r24 + f2: 80 91 11 01 lds r24, 0x0111 ; 0x800111 + f6: 28 9f mul r18, r24 + f8: c0 01 movw r24, r0 + fa: 11 24 eor r1, r1 + fc: ef ef ldi r30, 0xFF ; 255 + fe: f0 e0 ldi r31, 0x00 ; 0 + 100: bf 01 movw r22, r30 + 102: 69 d4 rcall .+2258 ; 0x9d6 <__udivmodhi4> + 104: 46 2f mov r20, r22 + 106: 80 91 10 01 lds r24, 0x0110 ; 0x800110 + 10a: 28 9f mul r18, r24 + 10c: c0 01 movw r24, r0 + 10e: 11 24 eor r1, r1 + 110: bf 01 movw r22, r30 + 112: 61 d4 rcall .+2242 ; 0x9d6 <__udivmodhi4> + 114: 36 2f mov r19, r22 + 116: 80 91 12 01 lds r24, 0x0112 ; 0x800112 + 11a: 28 9f mul r18, r24 + 11c: c0 01 movw r24, r0 + 11e: 11 24 eor r1, r1 + 120: bf 01 movw r22, r30 + 122: 59 d4 rcall .+2226 ; 0x9d6 <__udivmodhi4> + 124: 86 2f mov r24, r22 + 126: e5 ef ldi r30, 0xF5 ; 245 + 128: f0 e0 ldi r31, 0x00 ; 0 + 12a: 41 83 std Z+1, r20 ; 0x01 + 12c: 30 83 st Z, r19 + 12e: 82 83 std Z+2, r24 ; 0x02 + 130: 33 96 adiw r30, 0x03 ; 3 + 132: 91 e0 ldi r25, 0x01 ; 1 + 134: e0 31 cpi r30, 0x10 ; 16 + 136: f9 07 cpc r31, r25 + 138: c1 f7 brne .-16 ; 0x12a + 13a: 69 e0 ldi r22, 0x09 ; 9 + 13c: 70 e0 ldi r23, 0x00 ; 0 + 13e: 85 ef ldi r24, 0xF5 ; 245 + 140: 90 e0 ldi r25, 0x00 ; 0 + 142: bf cf rjmp .-130 ; 0xc2 + +00000144 : + 144: e5 ef ldi r30, 0xF5 ; 245 + 146: f0 e0 ldi r31, 0x00 ; 0 + 148: 81 83 std Z+1, r24 ; 0x01 + 14a: 60 83 st Z, r22 + 14c: 42 83 std Z+2, r20 ; 0x02 + 14e: 33 96 adiw r30, 0x03 ; 3 + 150: 91 e0 ldi r25, 0x01 ; 1 + 152: e0 31 cpi r30, 0x10 ; 16 + 154: f9 07 cpc r31, r25 + 156: c1 f7 brne .-16 ; 0x148 + 158: 69 e0 ldi r22, 0x09 ; 9 + 15a: 70 e0 ldi r23, 0x00 ; 0 + 15c: 85 ef ldi r24, 0xF5 ; 245 + 15e: 90 e0 ldi r25, 0x00 ; 0 + 160: b0 cf rjmp .-160 ; 0xc2 + +00000162 : + 162: cf 93 push r28 + 164: df 93 push r29 + 166: c5 ef ldi r28, 0xF5 ; 245 + 168: d0 e0 ldi r29, 0x00 ; 0 + 16a: 69 81 ldd r22, Y+1 ; 0x01 + 16c: 83 e0 ldi r24, 0x03 ; 3 + 16e: 90 e0 ldi r25, 0x00 ; 0 + 170: b0 d5 rcall .+2912 ; 0xcd2 + 172: 68 81 ld r22, Y + 174: 82 e0 ldi r24, 0x02 ; 2 + 176: 90 e0 ldi r25, 0x00 ; 0 + 178: ac d5 rcall .+2904 ; 0xcd2 + 17a: 6a 81 ldd r22, Y+2 ; 0x02 + 17c: 81 e0 ldi r24, 0x01 ; 1 + 17e: 90 e0 ldi r25, 0x00 ; 0 + 180: a8 d5 rcall .+2896 ; 0xcd2 + 182: 89 81 ldd r24, Y+1 ; 0x01 + 184: 8c 8f std Y+28, r24 ; 0x1c + 186: 88 81 ld r24, Y + 188: 8b 8f std Y+27, r24 ; 0x1b + 18a: 8a 81 ldd r24, Y+2 ; 0x02 + 18c: 8d 8f std Y+29, r24 ; 0x1d + 18e: df 91 pop r29 + 190: cf 91 pop r28 + 192: 08 95 ret + +00000194 : + 194: cf 93 push r28 + 196: df 93 push r29 + 198: 00 d0 rcall .+0 ; 0x19a + 19a: cd b7 in r28, 0x3d ; 61 + 19c: de b7 in r29, 0x3e ; 62 + 19e: 9a 83 std Y+2, r25 ; 0x02 + 1a0: 89 83 std Y+1, r24 ; 0x01 + 1a2: 89 81 ldd r24, Y+1 ; 0x01 + 1a4: 9a 81 ldd r25, Y+2 ; 0x02 + 1a6: 90 93 14 01 sts 0x0114, r25 ; 0x800114 + 1aa: 80 93 13 01 sts 0x0113, r24 ; 0x800113 + 1ae: 69 81 ldd r22, Y+1 ; 0x01 + 1b0: 7a 81 ldd r23, Y+2 ; 0x02 + 1b2: 80 e0 ldi r24, 0x00 ; 0 + 1b4: 90 e0 ldi r25, 0x00 ; 0 + 1b6: 0f 90 pop r0 + 1b8: 0f 90 pop r0 + 1ba: df 91 pop r29 + 1bc: cf 91 pop r28 + 1be: 89 c5 rjmp .+2834 ; 0xcd2 + +000001c0 : + 1c0: cf 92 push r12 + 1c2: df 92 push r13 + 1c4: ef 92 push r14 + 1c6: ff 92 push r15 + 1c8: 0f 93 push r16 + 1ca: 1f 93 push r17 + 1cc: cf 93 push r28 + 1ce: df 93 push r29 + 1d0: 00 d0 rcall .+0 ; 0x1d2 + 1d2: 00 d0 rcall .+0 ; 0x1d4 + 1d4: 00 d0 rcall .+0 ; 0x1d6 + 1d6: 1f 92 push r1 + 1d8: cd b7 in r28, 0x3d ; 61 + 1da: de b7 in r29, 0x3e ; 62 + 1dc: 19 82 std Y+1, r1 ; 0x01 + 1de: 1a 82 std Y+2, r1 ; 0x02 + 1e0: 1b 82 std Y+3, r1 ; 0x03 + 1e2: 1f 82 std Y+7, r1 ; 0x07 + 1e4: 1e 82 std Y+6, r1 ; 0x06 + 1e6: 6f e6 ldi r22, 0x6F ; 111 + 1e8: 70 e0 ldi r23, 0x00 ; 0 + 1ea: 0a d5 rcall .+2580 ; 0xc00 + 1ec: 8c 01 movw r16, r24 + 1ee: ce 01 movw r24, r28 + 1f0: 01 96 adiw r24, 0x01 ; 1 + 1f2: 6c 01 movw r12, r24 + 1f4: f1 2c mov r15, r1 + 1f6: ee 24 eor r14, r14 + 1f8: ea 94 dec r14 + 1fa: 01 15 cp r16, r1 + 1fc: 11 05 cpc r17, r1 + 1fe: b9 f5 brne .+110 ; 0x26e <__EEPROM_REGION_LENGTH__+0x6e> + 200: 4b 81 ldd r20, Y+3 ; 0x03 + 202: 6a 81 ldd r22, Y+2 ; 0x02 + 204: 89 81 ldd r24, Y+1 ; 0x01 + 206: 9e df rcall .-196 ; 0x144 + 208: ac df rcall .-168 ; 0x162 + 20a: 8e 2d mov r24, r14 + 20c: 71 df rcall .-286 ; 0xf0 + 20e: 8e 81 ldd r24, Y+6 ; 0x06 + 210: 9f 81 ldd r25, Y+7 ; 0x07 + 212: c0 df rcall .-128 ; 0x194 + 214: 88 ea ldi r24, 0xA8 ; 168 + 216: 90 e0 ldi r25, 0x00 ; 0 + 218: 2e d3 rcall .+1628 ; 0x876 + 21a: 80 91 f6 00 lds r24, 0x00F6 ; 0x8000f6 + 21e: 90 e0 ldi r25, 0x00 ; 0 + 220: 35 d3 rcall .+1642 ; 0x88c + 222: 8c e2 ldi r24, 0x2C ; 44 + 224: 24 d3 rcall .+1608 ; 0x86e + 226: 80 91 f5 00 lds r24, 0x00F5 ; 0x8000f5 + 22a: 90 e0 ldi r25, 0x00 ; 0 + 22c: 2f d3 rcall .+1630 ; 0x88c + 22e: 8c e2 ldi r24, 0x2C ; 44 + 230: 1e d3 rcall .+1596 ; 0x86e + 232: 80 91 f7 00 lds r24, 0x00F7 ; 0x8000f7 + 236: 90 e0 ldi r25, 0x00 ; 0 + 238: 29 d3 rcall .+1618 ; 0x88c + 23a: 85 ea ldi r24, 0xA5 ; 165 + 23c: 90 e0 ldi r25, 0x00 ; 0 + 23e: 1b d3 rcall .+1590 ; 0x876 + 240: 86 eb ldi r24, 0xB6 ; 182 + 242: 90 e0 ldi r25, 0x00 ; 0 + 244: 18 d3 rcall .+1584 ; 0x876 + 246: 8e 2d mov r24, r14 + 248: 90 e0 ldi r25, 0x00 ; 0 + 24a: 20 d3 rcall .+1600 ; 0x88c + 24c: 85 ea ldi r24, 0xA5 ; 165 + 24e: 90 e0 ldi r25, 0x00 ; 0 + 250: 12 d3 rcall .+1572 ; 0x876 + 252: 89 ec ldi r24, 0xC9 ; 201 + 254: 90 e0 ldi r25, 0x00 ; 0 + 256: 0f d3 rcall .+1566 ; 0x876 + 258: 8e 81 ldd r24, Y+6 ; 0x06 + 25a: 9f 81 ldd r25, Y+7 ; 0x07 + 25c: 17 d3 rcall .+1582 ; 0x88c + 25e: 8d e0 ldi r24, 0x0D ; 13 + 260: 06 d3 rcall .+1548 ; 0x86e + 262: 8a e0 ldi r24, 0x0A ; 10 + 264: 04 d3 rcall .+1544 ; 0x86e + 266: 81 e0 ldi r24, 0x01 ; 1 + 268: 80 93 f4 00 sts 0x00F4, r24 ; 0x8000f4 <__data_end> + 26c: 06 c0 rjmp .+12 ; 0x27a <__EEPROM_REGION_LENGTH__+0x7a> + 26e: 95 e0 ldi r25, 0x05 ; 5 + 270: f9 12 cpse r15, r25 + 272: 12 c0 rjmp .+36 ; 0x298 <__EEPROM_REGION_LENGTH__+0x98> + 274: 81 e7 ldi r24, 0x71 ; 113 + 276: 90 e0 ldi r25, 0x00 ; 0 + 278: fe d2 rcall .+1532 ; 0x876 + 27a: 27 96 adiw r28, 0x07 ; 7 + 27c: 0f b6 in r0, 0x3f ; 63 + 27e: f8 94 cli + 280: de bf out 0x3e, r29 ; 62 + 282: 0f be out 0x3f, r0 ; 63 + 284: cd bf out 0x3d, r28 ; 61 + 286: df 91 pop r29 + 288: cf 91 pop r28 + 28a: 1f 91 pop r17 + 28c: 0f 91 pop r16 + 28e: ff 90 pop r15 + 290: ef 90 pop r14 + 292: df 90 pop r13 + 294: cf 90 pop r12 + 296: 08 95 ret + 298: e2 e0 ldi r30, 0x02 ; 2 + 29a: ef 15 cp r30, r15 + 29c: a8 f0 brcs .+42 ; 0x2c8 <__EEPROM_REGION_LENGTH__+0xc8> + 29e: 4a e0 ldi r20, 0x0A ; 10 + 2a0: 50 e0 ldi r21, 0x00 ; 0 + 2a2: be 01 movw r22, r28 + 2a4: 6c 5f subi r22, 0xFC ; 252 + 2a6: 7f 4f sbci r23, 0xFF ; 255 + 2a8: c8 01 movw r24, r16 + 2aa: bc d3 rcall .+1912 ; 0xa24 + 2ac: f6 01 movw r30, r12 + 2ae: 60 83 st Z, r22 + 2b0: 8c 81 ldd r24, Y+4 ; 0x04 + 2b2: 9d 81 ldd r25, Y+5 ; 0x05 + 2b4: 80 17 cp r24, r16 + 2b6: 91 07 cpc r25, r17 + 2b8: 01 f5 brne .+64 ; 0x2fa <__EEPROM_REGION_LENGTH__+0xfa> + 2ba: f6 01 movw r30, r12 + 2bc: 80 81 ld r24, Z + 2be: 81 11 cpse r24, r1 + 2c0: 1c c0 rjmp .+56 ; 0x2fa <__EEPROM_REGION_LENGTH__+0xfa> + 2c2: 80 e9 ldi r24, 0x90 ; 144 + 2c4: 90 e0 ldi r25, 0x00 ; 0 + 2c6: d8 cf rjmp .-80 ; 0x278 <__EEPROM_REGION_LENGTH__+0x78> + 2c8: f3 e0 ldi r31, 0x03 ; 3 + 2ca: ff 12 cpse r15, r31 + 2cc: 09 c0 rjmp .+18 ; 0x2e0 <__EEPROM_REGION_LENGTH__+0xe0> + 2ce: 4a e0 ldi r20, 0x0A ; 10 + 2d0: 50 e0 ldi r21, 0x00 ; 0 + 2d2: be 01 movw r22, r28 + 2d4: 6c 5f subi r22, 0xFC ; 252 + 2d6: 7f 4f sbci r23, 0xFF ; 255 + 2d8: c8 01 movw r24, r16 + 2da: a4 d3 rcall .+1864 ; 0xa24 + 2dc: e6 2e mov r14, r22 + 2de: e8 cf rjmp .-48 ; 0x2b0 <__EEPROM_REGION_LENGTH__+0xb0> + 2e0: 84 e0 ldi r24, 0x04 ; 4 + 2e2: f8 12 cpse r15, r24 + 2e4: e5 cf rjmp .-54 ; 0x2b0 <__EEPROM_REGION_LENGTH__+0xb0> + 2e6: 4a e0 ldi r20, 0x0A ; 10 + 2e8: 50 e0 ldi r21, 0x00 ; 0 + 2ea: be 01 movw r22, r28 + 2ec: 6c 5f subi r22, 0xFC ; 252 + 2ee: 7f 4f sbci r23, 0xFF ; 255 + 2f0: c8 01 movw r24, r16 + 2f2: 98 d3 rcall .+1840 ; 0xa24 + 2f4: 7f 83 std Y+7, r23 ; 0x07 + 2f6: 6e 83 std Y+6, r22 ; 0x06 + 2f8: db cf rjmp .-74 ; 0x2b0 <__EEPROM_REGION_LENGTH__+0xb0> + 2fa: f3 94 inc r15 + 2fc: 6f e6 ldi r22, 0x6F ; 111 + 2fe: 70 e0 ldi r23, 0x00 ; 0 + 300: 90 e0 ldi r25, 0x00 ; 0 + 302: 80 e0 ldi r24, 0x00 ; 0 + 304: 7d d4 rcall .+2298 ; 0xc00 + 306: 8c 01 movw r16, r24 + 308: ff ef ldi r31, 0xFF ; 255 + 30a: cf 1a sub r12, r31 + 30c: df 0a sbc r13, r31 + 30e: 75 cf rjmp .-278 ; 0x1fa + +00000310 : + 310: cf 93 push r28 + 312: df 93 push r29 + 314: e1 99 sbic 0x1c, 1 ; 28 + 316: fe cf rjmp .-4 ; 0x314 + 318: 80 e0 ldi r24, 0x00 ; 0 + 31a: 90 e0 ldi r25, 0x00 ; 0 + 31c: d2 d4 rcall .+2468 ; 0xcc2 + 31e: 90 e0 ldi r25, 0x00 ; 0 + 320: 90 93 14 01 sts 0x0114, r25 ; 0x800114 + 324: 80 93 13 01 sts 0x0113, r24 ; 0x800113 + 328: c5 ef ldi r28, 0xF5 ; 245 + 32a: d0 e0 ldi r29, 0x00 ; 0 + 32c: 83 e0 ldi r24, 0x03 ; 3 + 32e: 90 e0 ldi r25, 0x00 ; 0 + 330: c8 d4 rcall .+2448 ; 0xcc2 + 332: 89 83 std Y+1, r24 ; 0x01 + 334: 82 e0 ldi r24, 0x02 ; 2 + 336: 90 e0 ldi r25, 0x00 ; 0 + 338: c4 d4 rcall .+2440 ; 0xcc2 + 33a: 88 83 st Y, r24 + 33c: 81 e0 ldi r24, 0x01 ; 1 + 33e: 90 e0 ldi r25, 0x00 ; 0 + 340: c0 d4 rcall .+2432 ; 0xcc2 + 342: 8a 83 std Y+2, r24 ; 0x02 + 344: 23 96 adiw r28, 0x03 ; 3 + 346: 81 e0 ldi r24, 0x01 ; 1 + 348: c0 31 cpi r28, 0x10 ; 16 + 34a: d8 07 cpc r29, r24 + 34c: 79 f7 brne .-34 ; 0x32c + 34e: 80 91 f6 00 lds r24, 0x00F6 ; 0x8000f6 + 352: 80 93 11 01 sts 0x0111, r24 ; 0x800111 + 356: 60 91 f5 00 lds r22, 0x00F5 ; 0x8000f5 + 35a: 60 93 10 01 sts 0x0110, r22 ; 0x800110 + 35e: 40 91 f7 00 lds r20, 0x00F7 ; 0x8000f7 + 362: 40 93 12 01 sts 0x0112, r20 ; 0x800112 + 366: ee de rcall .-548 ; 0x144 + 368: 80 91 13 01 lds r24, 0x0113 ; 0x800113 + 36c: 90 91 14 01 lds r25, 0x0114 ; 0x800114 + 370: 11 df rcall .-478 ; 0x194 + 372: 8c ed ldi r24, 0xDC ; 220 + 374: 90 e0 ldi r25, 0x00 ; 0 + 376: 7f d2 rcall .+1278 ; 0x876 + 378: 80 91 f6 00 lds r24, 0x00F6 ; 0x8000f6 + 37c: 90 e0 ldi r25, 0x00 ; 0 + 37e: 86 d2 rcall .+1292 ; 0x88c + 380: 80 ef ldi r24, 0xF0 ; 240 + 382: 90 e0 ldi r25, 0x00 ; 0 + 384: 78 d2 rcall .+1264 ; 0x876 + 386: 80 91 f5 00 lds r24, 0x00F5 ; 0x8000f5 + 38a: 90 e0 ldi r25, 0x00 ; 0 + 38c: 7f d2 rcall .+1278 ; 0x88c + 38e: 80 ef ldi r24, 0xF0 ; 240 + 390: 90 e0 ldi r25, 0x00 ; 0 + 392: 71 d2 rcall .+1250 ; 0x876 + 394: 80 91 f7 00 lds r24, 0x00F7 ; 0x8000f7 + 398: 90 e0 ldi r25, 0x00 ; 0 + 39a: 78 d2 rcall .+1264 ; 0x88c + 39c: 80 ef ldi r24, 0xF0 ; 240 + 39e: 90 e0 ldi r25, 0x00 ; 0 + 3a0: 6a d2 rcall .+1236 ; 0x876 + 3a2: 80 91 13 01 lds r24, 0x0113 ; 0x800113 + 3a6: 90 91 14 01 lds r25, 0x0114 ; 0x800114 + 3aa: 70 d2 rcall .+1248 ; 0x88c + 3ac: 85 ea ldi r24, 0xA5 ; 165 + 3ae: 90 e0 ldi r25, 0x00 ; 0 + 3b0: df 91 pop r29 + 3b2: cf 91 pop r28 + 3b4: 60 c2 rjmp .+1216 ; 0x876 + +000003b6 : + 3b6: cf 93 push r28 + 3b8: c8 ec ldi r28, 0xC8 ; 200 + 3ba: 94 de rcall .-728 ; 0xe4 + 3bc: 81 11 cpse r24, r1 + 3be: 30 c0 rjmp .+96 ; 0x420 <__DATA_REGION_LENGTH__+0x20> + 3c0: 8c 2f mov r24, r28 + 3c2: 96 de rcall .-724 ; 0xf0 + 3c4: 8f e5 ldi r24, 0x5F ; 95 + 3c6: 9a ee ldi r25, 0xEA ; 234 + 3c8: 01 97 sbiw r24, 0x01 ; 1 + 3ca: f1 f7 brne .-4 ; 0x3c8 + 3cc: 00 c0 rjmp .+0 ; 0x3ce + 3ce: 00 00 nop + 3d0: c1 50 subi r28, 0x01 ; 1 + 3d2: 98 f7 brcc .-26 ; 0x3ba + 3d4: c2 e3 ldi r28, 0x32 ; 50 + 3d6: 86 de rcall .-756 ; 0xe4 + 3d8: 81 11 cpse r24, r1 + 3da: 22 c0 rjmp .+68 ; 0x420 <__DATA_REGION_LENGTH__+0x20> + 3dc: 8f e2 ldi r24, 0x2F ; 47 + 3de: 95 e7 ldi r25, 0x75 ; 117 + 3e0: 01 97 sbiw r24, 0x01 ; 1 + 3e2: f1 f7 brne .-4 ; 0x3e0 + 3e4: 00 c0 rjmp .+0 ; 0x3e6 + 3e6: 00 00 nop + 3e8: c1 50 subi r28, 0x01 ; 1 + 3ea: a9 f7 brne .-22 ; 0x3d6 + 3ec: 7b de rcall .-778 ; 0xe4 + 3ee: 81 11 cpse r24, r1 + 3f0: 17 c0 rjmp .+46 ; 0x420 <__DATA_REGION_LENGTH__+0x20> + 3f2: 8c 2f mov r24, r28 + 3f4: 7d de rcall .-774 ; 0xf0 + 3f6: 8f e5 ldi r24, 0x5F ; 95 + 3f8: 9a ee ldi r25, 0xEA ; 234 + 3fa: 01 97 sbiw r24, 0x01 ; 1 + 3fc: f1 f7 brne .-4 ; 0x3fa + 3fe: 00 c0 rjmp .+0 ; 0x400 <__DATA_REGION_LENGTH__> + 400: 00 00 nop + 402: cf 5f subi r28, 0xFF ; 255 + 404: c9 3c cpi r28, 0xC9 ; 201 + 406: 91 f7 brne .-28 ; 0x3ec + 408: c4 e6 ldi r28, 0x64 ; 100 + 40a: 6c de rcall .-808 ; 0xe4 + 40c: 81 11 cpse r24, r1 + 40e: 08 c0 rjmp .+16 ; 0x420 <__DATA_REGION_LENGTH__+0x20> + 410: 8f e2 ldi r24, 0x2F ; 47 + 412: 95 e7 ldi r25, 0x75 ; 117 + 414: 01 97 sbiw r24, 0x01 ; 1 + 416: f1 f7 brne .-4 ; 0x414 <__DATA_REGION_LENGTH__+0x14> + 418: 00 c0 rjmp .+0 ; 0x41a <__DATA_REGION_LENGTH__+0x1a> + 41a: 00 00 nop + 41c: c1 50 subi r28, 0x01 ; 1 + 41e: a9 f7 brne .-22 ; 0x40a <__DATA_REGION_LENGTH__+0xa> + 420: cf 91 pop r28 + 422: 08 95 ret + +00000424 : + 424: cf 93 push r28 + 426: 88 ec ldi r24, 0xC8 ; 200 + 428: 63 de rcall .-826 ; 0xf0 + 42a: c5 e0 ldi r28, 0x05 ; 5 + 42c: 5b de rcall .-842 ; 0xe4 + 42e: 81 11 cpse r24, r1 + 430: 32 c0 rjmp .+100 ; 0x496 <__stack+0x37> + 432: 8f e2 ldi r24, 0x2F ; 47 + 434: 95 e7 ldi r25, 0x75 ; 117 + 436: 01 97 sbiw r24, 0x01 ; 1 + 438: f1 f7 brne .-4 ; 0x436 + 43a: 00 c0 rjmp .+0 ; 0x43c + 43c: 00 00 nop + 43e: c1 50 subi r28, 0x01 ; 1 + 440: a9 f7 brne .-22 ; 0x42c + 442: c8 ec ldi r28, 0xC8 ; 200 + 444: 4f de rcall .-866 ; 0xe4 + 446: 81 11 cpse r24, r1 + 448: 26 c0 rjmp .+76 ; 0x496 <__stack+0x37> + 44a: 8c 2f mov r24, r28 + 44c: 51 de rcall .-862 ; 0xf0 + 44e: 87 eb ldi r24, 0xB7 ; 183 + 450: 9b e0 ldi r25, 0x0B ; 11 + 452: 01 97 sbiw r24, 0x01 ; 1 + 454: f1 f7 brne .-4 ; 0x452 + 456: 00 c0 rjmp .+0 ; 0x458 + 458: 00 00 nop + 45a: c1 50 subi r28, 0x01 ; 1 + 45c: 98 f7 brcc .-26 ; 0x444 + 45e: 88 ec ldi r24, 0xC8 ; 200 + 460: 47 de rcall .-882 ; 0xf0 + 462: c8 ec ldi r28, 0xC8 ; 200 + 464: 3f de rcall .-898 ; 0xe4 + 466: 81 11 cpse r24, r1 + 468: 16 c0 rjmp .+44 ; 0x496 <__stack+0x37> + 46a: 8c 2f mov r24, r28 + 46c: 41 de rcall .-894 ; 0xf0 + 46e: 87 e0 ldi r24, 0x07 ; 7 + 470: 92 e5 ldi r25, 0x52 ; 82 + 472: 01 97 sbiw r24, 0x01 ; 1 + 474: f1 f7 brne .-4 ; 0x472 <__stack+0x13> + 476: 00 c0 rjmp .+0 ; 0x478 <__stack+0x19> + 478: 00 00 nop + 47a: c1 50 subi r28, 0x01 ; 1 + 47c: 98 f7 brcc .-26 ; 0x464 <__stack+0x5> + 47e: ce e1 ldi r28, 0x1E ; 30 + 480: 31 de rcall .-926 ; 0xe4 + 482: 81 11 cpse r24, r1 + 484: 08 c0 rjmp .+16 ; 0x496 <__stack+0x37> + 486: 87 ec ldi r24, 0xC7 ; 199 + 488: 9f ea ldi r25, 0xAF ; 175 + 48a: 01 97 sbiw r24, 0x01 ; 1 + 48c: f1 f7 brne .-4 ; 0x48a <__stack+0x2b> + 48e: 00 c0 rjmp .+0 ; 0x490 <__stack+0x31> + 490: 00 00 nop + 492: c1 50 subi r28, 0x01 ; 1 + 494: a9 f7 brne .-22 ; 0x480 <__stack+0x21> + 496: cf 91 pop r28 + 498: 08 95 ret + +0000049a : + 49a: 2f 92 push r2 + 49c: 3f 92 push r3 + 49e: 4f 92 push r4 + 4a0: 5f 92 push r5 + 4a2: 6f 92 push r6 + 4a4: 7f 92 push r7 + 4a6: 8f 92 push r8 + 4a8: 9f 92 push r9 + 4aa: af 92 push r10 + 4ac: bf 92 push r11 + 4ae: cf 92 push r12 + 4b0: df 92 push r13 + 4b2: ef 92 push r14 + 4b4: ff 92 push r15 + 4b6: 0f 93 push r16 + 4b8: 1f 93 push r17 + 4ba: cf 93 push r28 + 4bc: df 93 push r29 + 4be: 00 d0 rcall .+0 ; 0x4c0 + 4c0: 1f 92 push r1 + 4c2: cd b7 in r28, 0x3d ; 61 + 4c4: de b7 in r29, 0x3e ; 62 + 4c6: 80 91 17 01 lds r24, 0x0117 ; 0x800117 + 4ca: 90 e0 ldi r25, 0x00 ; 0 + 4cc: fc 01 movw r30, r24 + 4ce: ee 0f add r30, r30 + 4d0: ff 1f adc r31, r31 + 4d2: e8 0f add r30, r24 + 4d4: f9 1f adc r31, r25 + 4d6: e0 5a subi r30, 0xA0 ; 160 + 4d8: ff 4f sbci r31, 0xFF ; 255 + 4da: 20 81 ld r18, Z + 4dc: 29 83 std Y+1, r18 ; 0x01 + 4de: 31 80 ldd r3, Z+1 ; 0x01 + 4e0: 22 80 ldd r2, Z+2 ; 0x02 + 4e2: 01 96 adiw r24, 0x01 ; 1 + 4e4: 65 e0 ldi r22, 0x05 ; 5 + 4e6: 70 e0 ldi r23, 0x00 ; 0 + 4e8: 8a d2 rcall .+1300 ; 0x9fe <__divmodhi4> + 4ea: 80 93 17 01 sts 0x0117, r24 ; 0x800117 + 4ee: fc 01 movw r30, r24 + 4f0: ee 0f add r30, r30 + 4f2: ff 1f adc r31, r31 + 4f4: e8 0f add r30, r24 + 4f6: f9 1f adc r31, r25 + 4f8: e0 5a subi r30, 0xA0 ; 160 + 4fa: ff 4f sbci r31, 0xFF ; 255 + 4fc: 80 80 ld r8, Z + 4fe: 82 1a sub r8, r18 + 500: 99 08 sbc r9, r9 + 502: 61 80 ldd r6, Z+1 ; 0x01 + 504: 63 18 sub r6, r3 + 506: 77 08 sbc r7, r7 + 508: 42 80 ldd r4, Z+2 ; 0x02 + 50a: 42 18 sub r4, r2 + 50c: 55 08 sbc r5, r5 + 50e: 10 e0 ldi r17, 0x00 ; 0 + 510: 00 e0 ldi r16, 0x00 ; 0 + 512: f1 2c mov r15, r1 + 514: e1 2c mov r14, r1 + 516: d1 2c mov r13, r1 + 518: c1 2c mov r12, r1 + 51a: 85 e6 ldi r24, 0x65 ; 101 + 51c: 90 e0 ldi r25, 0x00 ; 0 + 51e: 9b 83 std Y+3, r25 ; 0x03 + 520: 8a 83 std Y+2, r24 ; 0x02 + 522: 44 e6 ldi r20, 0x64 ; 100 + 524: a4 2e mov r10, r20 + 526: b1 2c mov r11, r1 + 528: dd dd rcall .-1094 ; 0xe4 + 52a: 81 11 cpse r24, r1 + 52c: 35 c0 rjmp .+106 ; 0x598 + 52e: c8 01 movw r24, r16 + 530: b5 01 movw r22, r10 + 532: 51 d2 rcall .+1186 ; 0x9d6 <__udivmodhi4> + 534: 42 2d mov r20, r2 + 536: 46 0f add r20, r22 + 538: c7 01 movw r24, r14 + 53a: b5 01 movw r22, r10 + 53c: 4c d2 rcall .+1176 ; 0x9d6 <__udivmodhi4> + 53e: 23 2d mov r18, r3 + 540: 26 0f add r18, r22 + 542: c6 01 movw r24, r12 + 544: b5 01 movw r22, r10 + 546: 47 d2 rcall .+1166 ; 0x9d6 <__udivmodhi4> + 548: 86 2f mov r24, r22 + 54a: 62 2f mov r22, r18 + 54c: 99 81 ldd r25, Y+1 ; 0x01 + 54e: 89 0f add r24, r25 + 550: f9 dd rcall .-1038 ; 0x144 + 552: 8f e5 ldi r24, 0x5F ; 95 + 554: 9a ee ldi r25, 0xEA ; 234 + 556: 01 97 sbiw r24, 0x01 ; 1 + 558: f1 f7 brne .-4 ; 0x556 + 55a: 00 c0 rjmp .+0 ; 0x55c + 55c: 00 00 nop + 55e: 8a 81 ldd r24, Y+2 ; 0x02 + 560: 9b 81 ldd r25, Y+3 ; 0x03 + 562: 01 97 sbiw r24, 0x01 ; 1 + 564: 9b 83 std Y+3, r25 ; 0x03 + 566: 8a 83 std Y+2, r24 ; 0x02 + 568: c8 0c add r12, r8 + 56a: d9 1c adc r13, r9 + 56c: e6 0c add r14, r6 + 56e: f7 1c adc r15, r7 + 570: 04 0d add r16, r4 + 572: 15 1d adc r17, r5 + 574: 89 2b or r24, r25 + 576: c1 f6 brne .-80 ; 0x528 + 578: 92 e3 ldi r25, 0x32 ; 50 + 57a: 99 83 std Y+1, r25 ; 0x01 + 57c: b3 dd rcall .-1178 ; 0xe4 + 57e: 81 11 cpse r24, r1 + 580: 0b c0 rjmp .+22 ; 0x598 + 582: 8f e2 ldi r24, 0x2F ; 47 + 584: 95 e7 ldi r25, 0x75 ; 117 + 586: 01 97 sbiw r24, 0x01 ; 1 + 588: f1 f7 brne .-4 ; 0x586 + 58a: 00 c0 rjmp .+0 ; 0x58c + 58c: 00 00 nop + 58e: 99 81 ldd r25, Y+1 ; 0x01 + 590: 91 50 subi r25, 0x01 ; 1 + 592: 99 83 std Y+1, r25 ; 0x01 + 594: 91 11 cpse r25, r1 + 596: f2 cf rjmp .-28 ; 0x57c + 598: 0f 90 pop r0 + 59a: 0f 90 pop r0 + 59c: 0f 90 pop r0 + 59e: df 91 pop r29 + 5a0: cf 91 pop r28 + 5a2: 1f 91 pop r17 + 5a4: 0f 91 pop r16 + 5a6: ff 90 pop r15 + 5a8: ef 90 pop r14 + 5aa: df 90 pop r13 + 5ac: cf 90 pop r12 + 5ae: bf 90 pop r11 + 5b0: af 90 pop r10 + 5b2: 9f 90 pop r9 + 5b4: 8f 90 pop r8 + 5b6: 7f 90 pop r7 + 5b8: 6f 90 pop r6 + 5ba: 5f 90 pop r5 + 5bc: 4f 90 pop r4 + 5be: 3f 90 pop r3 + 5c0: 2f 90 pop r2 + 5c2: 08 95 ret + +000005c4 : + 5c4: 1f 93 push r17 + 5c6: cf 93 push r28 + 5c8: df 93 push r29 + 5ca: e8 2f mov r30, r24 + 5cc: 86 2f mov r24, r22 + 5ce: 6b e2 ldi r22, 0x2B ; 43 + 5d0: f6 d1 rcall .+1004 ; 0x9be <__udivmodqi4> + 5d2: 28 2f mov r18, r24 + 5d4: 89 2f mov r24, r25 + 5d6: 88 0f add r24, r24 + 5d8: 89 0f add r24, r25 + 5da: 38 2f mov r19, r24 + 5dc: 33 0f add r19, r19 + 5de: cf ef ldi r28, 0xFF ; 255 + 5e0: d0 e0 ldi r29, 0x00 ; 0 + 5e2: ae 01 movw r20, r28 + 5e4: 43 1b sub r20, r19 + 5e6: 51 09 sbc r21, r1 + 5e8: 1f ef ldi r17, 0xFF ; 255 + 5ea: 14 9f mul r17, r20 + 5ec: c0 01 movw r24, r0 + 5ee: 15 9f mul r17, r21 + 5f0: 90 0d add r25, r0 + 5f2: 11 24 eor r1, r1 + 5f4: be 01 movw r22, r28 + 5f6: ef d1 rcall .+990 ; 0x9d6 <__udivmodhi4> + 5f8: f6 2f mov r31, r22 + 5fa: 46 2f mov r20, r22 + 5fc: 31 9f mul r19, r17 + 5fe: c0 01 movw r24, r0 + 600: 11 24 eor r1, r1 + 602: be 01 movw r22, r28 + 604: e8 d1 rcall .+976 ; 0x9d6 <__udivmodhi4> + 606: 96 2f mov r25, r22 + 608: 22 30 cpi r18, 0x02 ; 2 + 60a: 19 f1 breq .+70 ; 0x652 + 60c: 40 f4 brcc .+16 ; 0x61e + 60e: 22 23 and r18, r18 + 610: 21 f0 breq .+8 ; 0x61a + 612: 21 30 cpi r18, 0x01 ; 1 + 614: 61 f0 breq .+24 ; 0x62e + 616: 2f 2f mov r18, r31 + 618: 90 e0 ldi r25, 0x00 ; 0 + 61a: 4f ef ldi r20, 0xFF ; 255 + 61c: 0a c0 rjmp .+20 ; 0x632 + 61e: 23 30 cpi r18, 0x03 ; 3 + 620: e1 f0 breq .+56 ; 0x65a + 622: 24 30 cpi r18, 0x04 ; 4 + 624: c1 f7 brne .-16 ; 0x616 + 626: 46 2f mov r20, r22 + 628: 2f ef ldi r18, 0xFF ; 255 + 62a: 90 e0 ldi r25, 0x00 ; 0 + 62c: 02 c0 rjmp .+4 ; 0x632 + 62e: 20 e0 ldi r18, 0x00 ; 0 + 630: 9f ef ldi r25, 0xFF ; 255 + 632: 6e 2f mov r22, r30 + 634: 70 e0 ldi r23, 0x00 ; 0 + 636: fb 01 movw r30, r22 + 638: ee 0f add r30, r30 + 63a: ff 1f adc r31, r31 + 63c: e6 0f add r30, r22 + 63e: f7 1f adc r31, r23 + 640: eb 50 subi r30, 0x0B ; 11 + 642: ff 4f sbci r31, 0xFF ; 255 + 644: 41 83 std Z+1, r20 ; 0x01 + 646: 90 83 st Z, r25 + 648: 22 83 std Z+2, r18 ; 0x02 + 64a: df 91 pop r29 + 64c: cf 91 pop r28 + 64e: 1f 91 pop r17 + 650: 08 95 ret + 652: 26 2f mov r18, r22 + 654: 9f ef ldi r25, 0xFF ; 255 + 656: 40 e0 ldi r20, 0x00 ; 0 + 658: ec cf rjmp .-40 ; 0x632 + 65a: 9f 2f mov r25, r31 + 65c: 2f ef ldi r18, 0xFF ; 255 + 65e: fb cf rjmp .-10 ; 0x656 + +00000660 : + 660: cf 93 push r28 + 662: df 93 push r29 + 664: d0 e0 ldi r29, 0x00 ; 0 + 666: c0 e0 ldi r28, 0x00 ; 0 + 668: 60 91 16 01 lds r22, 0x0116 ; 0x800116 + 66c: 6d 0f add r22, r29 + 66e: 8c 2f mov r24, r28 + 670: a9 df rcall .-174 ; 0x5c4 + 672: cf 5f subi r28, 0xFF ; 255 + 674: d4 5e subi r29, 0xE4 ; 228 + 676: c9 30 cpi r28, 0x09 ; 9 + 678: b9 f7 brne .-18 ; 0x668 + 67a: 69 e0 ldi r22, 0x09 ; 9 + 67c: 70 e0 ldi r23, 0x00 ; 0 + 67e: 85 ef ldi r24, 0xF5 ; 245 + 680: 90 e0 ldi r25, 0x00 ; 0 + 682: 1f dd rcall .-1474 ; 0xc2 + 684: 80 91 16 01 lds r24, 0x0116 ; 0x800116 + 688: 8e 5f subi r24, 0xFE ; 254 + 68a: 80 93 16 01 sts 0x0116, r24 ; 0x800116 + 68e: c3 e0 ldi r28, 0x03 ; 3 + 690: 29 dd rcall .-1454 ; 0xe4 + 692: 81 11 cpse r24, r1 + 694: 08 c0 rjmp .+16 ; 0x6a6 + 696: 8f e2 ldi r24, 0x2F ; 47 + 698: 95 e7 ldi r25, 0x75 ; 117 + 69a: 01 97 sbiw r24, 0x01 ; 1 + 69c: f1 f7 brne .-4 ; 0x69a + 69e: 00 c0 rjmp .+0 ; 0x6a0 + 6a0: 00 00 nop + 6a2: c1 50 subi r28, 0x01 ; 1 + 6a4: a9 f7 brne .-22 ; 0x690 + 6a6: df 91 pop r29 + 6a8: cf 91 pop r28 + 6aa: 08 95 ret + +000006ac : + 6ac: cf 93 push r28 + 6ae: df 93 push r29 + 6b0: 80 91 15 01 lds r24, 0x0115 ; 0x800115 + 6b4: 82 30 cpi r24, 0x02 ; 2 + 6b6: 51 f1 breq .+84 ; 0x70c + 6b8: 38 f4 brcc .+14 ; 0x6c8 + 6ba: 88 23 and r24, r24 + 6bc: 99 f1 breq .+102 ; 0x724 + 6be: 81 30 cpi r24, 0x01 ; 1 + 6c0: 59 f1 breq .+86 ; 0x718 + 6c2: 10 92 15 01 sts 0x0115, r1 ; 0x800115 + 6c6: 1f c0 rjmp .+62 ; 0x706 + 6c8: 83 30 cpi r24, 0x03 ; 3 + 6ca: 89 f0 breq .+34 ; 0x6ee + 6cc: cf ef ldi r28, 0xFF ; 255 + 6ce: d0 e0 ldi r29, 0x00 ; 0 + 6d0: 84 30 cpi r24, 0x04 ; 4 + 6d2: b9 f7 brne .-18 ; 0x6c2 + 6d4: 07 dd rcall .-1522 ; 0xe4 + 6d6: 81 11 cpse r24, r1 + 6d8: 16 c0 rjmp .+44 ; 0x706 + 6da: c2 df rcall .-124 ; 0x660 + 6dc: 8f e2 ldi r24, 0x2F ; 47 + 6de: 95 e7 ldi r25, 0x75 ; 117 + 6e0: 01 97 sbiw r24, 0x01 ; 1 + 6e2: f1 f7 brne .-4 ; 0x6e0 + 6e4: 00 c0 rjmp .+0 ; 0x6e6 + 6e6: 00 00 nop + 6e8: 21 97 sbiw r28, 0x01 ; 1 + 6ea: a1 f7 brne .-24 ; 0x6d4 + 6ec: 05 c0 rjmp .+10 ; 0x6f8 + 6ee: d5 de rcall .-598 ; 0x49a + 6f0: d4 de rcall .-600 ; 0x49a + 6f2: d3 de rcall .-602 ; 0x49a + 6f4: d2 de rcall .-604 ; 0x49a + 6f6: d1 de rcall .-606 ; 0x49a + 6f8: 80 91 15 01 lds r24, 0x0115 ; 0x800115 + 6fc: 8f 5f subi r24, 0xFF ; 255 + 6fe: 85 30 cpi r24, 0x05 ; 5 + 700: 00 f7 brcc .-64 ; 0x6c2 + 702: 80 93 15 01 sts 0x0115, r24 ; 0x800115 + 706: df 91 pop r29 + 708: cf 91 pop r28 + 70a: 08 95 ret + 70c: 8b de rcall .-746 ; 0x424 + 70e: 8a de rcall .-748 ; 0x424 + 710: 89 de rcall .-750 ; 0x424 + 712: 88 de rcall .-752 ; 0x424 + 714: 87 de rcall .-754 ; 0x424 + 716: f0 cf rjmp .-32 ; 0x6f8 + 718: 4e de rcall .-868 ; 0x3b6 + 71a: 4d de rcall .-870 ; 0x3b6 + 71c: 4c de rcall .-872 ; 0x3b6 + 71e: 4b de rcall .-874 ; 0x3b6 + 720: 4a de rcall .-876 ; 0x3b6 + 722: ea cf rjmp .-44 ; 0x6f8 + 724: 40 91 12 01 lds r20, 0x0112 ; 0x800112 + 728: 60 91 10 01 lds r22, 0x0110 ; 0x800110 + 72c: 80 91 11 01 lds r24, 0x0111 ; 0x800111 + 730: 09 dd rcall .-1518 ; 0x144 + 732: 8f ef ldi r24, 0xFF ; 255 + 734: dd dc rcall .-1606 ; 0xf0 + 736: c4 ef ldi r28, 0xF4 ; 244 + 738: d1 e0 ldi r29, 0x01 ; 1 + 73a: d4 dc rcall .-1624 ; 0xe4 + 73c: 81 11 cpse r24, r1 + 73e: e3 cf rjmp .-58 ; 0x706 + 740: 8f e2 ldi r24, 0x2F ; 47 + 742: 95 e7 ldi r25, 0x75 ; 117 + 744: 01 97 sbiw r24, 0x01 ; 1 + 746: f1 f7 brne .-4 ; 0x744 + 748: 00 c0 rjmp .+0 ; 0x74a + 74a: 00 00 nop + 74c: 21 97 sbiw r28, 0x01 ; 1 + 74e: a9 f7 brne .-22 ; 0x73a + 750: d3 cf rjmp .-90 ; 0x6f8 + +00000752 : + 752: 8f e2 ldi r24, 0x2F ; 47 + 754: 95 e7 ldi r25, 0x75 ; 117 + 756: 01 97 sbiw r24, 0x01 ; 1 + 758: f1 f7 brne .-4 ; 0x756 + 75a: 00 c0 rjmp .+0 ; 0x75c + 75c: 00 00 nop + 75e: 08 95 ret + +00000760 : + 760: 2f ef ldi r18, 0xFF ; 255 + 762: 8e e9 ldi r24, 0x9E ; 158 + 764: 94 e2 ldi r25, 0x24 ; 36 + 766: 21 50 subi r18, 0x01 ; 1 + 768: 80 40 sbci r24, 0x00 ; 0 + 76a: 90 40 sbci r25, 0x00 ; 0 + 76c: e1 f7 brne .-8 ; 0x766 + 76e: 00 c0 rjmp .+0 ; 0x770 + 770: 00 00 nop + 772: 72 d0 rcall .+228 ; 0x858 + 774: 80 ee ldi r24, 0xE0 ; 224 + 776: 90 e0 ldi r25, 0x00 ; 0 + 778: 5a d0 rcall .+180 ; 0x82e + 77a: 8f 9a sbi 0x11, 7 ; 17 + 77c: c9 dd rcall .-1134 ; 0x310 + 77e: 78 94 sei + 780: 08 95 ret + +00000782 : + 782: 87 b3 in r24, 0x17 ; 23 + 784: 8c 62 ori r24, 0x2C ; 44 + 786: 87 bb out 0x17, r24 ; 23 + 788: 70 9a sbi 0x0e, 0 ; 14 + 78a: 8d b1 in r24, 0x0d ; 13 + 78c: 80 65 ori r24, 0x50 ; 80 + 78e: 8d b9 out 0x0d, r24 ; 13 + 790: 08 95 ret + +00000792 : + 792: 8f b9 out 0x0f, r24 ; 15 + 794: 77 9b sbis 0x0e, 7 ; 14 + 796: fe cf rjmp .-4 ; 0x794 + 798: 08 95 ret + +0000079a <__vector_11>: + 79a: 1f 92 push r1 + 79c: 0f 92 push r0 + 79e: 0f b6 in r0, 0x3f ; 63 + 7a0: 0f 92 push r0 + 7a2: 11 24 eor r1, r1 + 7a4: 2f 93 push r18 + 7a6: 3f 93 push r19 + 7a8: 4f 93 push r20 + 7aa: 5f 93 push r21 + 7ac: 6f 93 push r22 + 7ae: 7f 93 push r23 + 7b0: 8f 93 push r24 + 7b2: 9f 93 push r25 + 7b4: af 93 push r26 + 7b6: bf 93 push r27 + 7b8: ef 93 push r30 + 7ba: ff 93 push r31 + 7bc: 8c b1 in r24, 0x0c ; 12 + 7be: 90 91 19 01 lds r25, 0x0119 ; 0x800119 + 7c2: 9f 31 cpi r25, 0x1F ; 31 + 7c4: 10 f0 brcs .+4 ; 0x7ca <__vector_11+0x30> + 7c6: 10 92 19 01 sts 0x0119, r1 ; 0x800119 + 7ca: e0 91 19 01 lds r30, 0x0119 ; 0x800119 + 7ce: 91 e0 ldi r25, 0x01 ; 1 + 7d0: 9e 0f add r25, r30 + 7d2: 90 93 19 01 sts 0x0119, r25 ; 0x800119 + 7d6: f0 e0 ldi r31, 0x00 ; 0 + 7d8: e2 5e subi r30, 0xE2 ; 226 + 7da: fe 4f sbci r31, 0xFE ; 254 + 7dc: 80 83 st Z, r24 + 7de: 84 30 cpi r24, 0x04 ; 4 + 7e0: 21 f0 breq .+8 ; 0x7ea <__vector_11+0x50> + 7e2: 8d 30 cpi r24, 0x0D ; 13 + 7e4: 11 f0 breq .+4 ; 0x7ea <__vector_11+0x50> + 7e6: 8a 30 cpi r24, 0x0A ; 10 + 7e8: 89 f4 brne .+34 ; 0x80c <__vector_11+0x72> + 7ea: e0 91 19 01 lds r30, 0x0119 ; 0x800119 + 7ee: f0 e0 ldi r31, 0x00 ; 0 + 7f0: e2 5e subi r30, 0xE2 ; 226 + 7f2: fe 4f sbci r31, 0xFE ; 254 + 7f4: 10 82 st Z, r1 + 7f6: 10 92 19 01 sts 0x0119, r1 ; 0x800119 + 7fa: e0 91 1a 01 lds r30, 0x011A ; 0x80011a + 7fe: f0 91 1b 01 lds r31, 0x011B ; 0x80011b + 802: 30 97 sbiw r30, 0x00 ; 0 + 804: 19 f0 breq .+6 ; 0x80c <__vector_11+0x72> + 806: 8e e1 ldi r24, 0x1E ; 30 + 808: 91 e0 ldi r25, 0x01 ; 1 + 80a: 09 95 icall + 80c: ff 91 pop r31 + 80e: ef 91 pop r30 + 810: bf 91 pop r27 + 812: af 91 pop r26 + 814: 9f 91 pop r25 + 816: 8f 91 pop r24 + 818: 7f 91 pop r23 + 81a: 6f 91 pop r22 + 81c: 5f 91 pop r21 + 81e: 4f 91 pop r20 + 820: 3f 91 pop r19 + 822: 2f 91 pop r18 + 824: 0f 90 pop r0 + 826: 0f be out 0x3f, r0 ; 63 + 828: 0f 90 pop r0 + 82a: 1f 90 pop r1 + 82c: 18 95 reti + +0000082e : + 82e: 90 93 1b 01 sts 0x011B, r25 ; 0x80011b + 832: 80 93 1a 01 sts 0x011A, r24 ; 0x80011a + 836: 08 95 ret + +00000838 : + 838: e0 91 1a 01 lds r30, 0x011A ; 0x80011a + 83c: f0 91 1b 01 lds r31, 0x011B ; 0x80011b + 840: 30 97 sbiw r30, 0x00 ; 0 + 842: 49 f0 breq .+18 ; 0x856 + 844: 80 91 18 01 lds r24, 0x0118 ; 0x800118 + 848: 88 23 and r24, r24 + 84a: 29 f0 breq .+10 ; 0x856 + 84c: 8e e1 ldi r24, 0x1E ; 30 + 84e: 91 e0 ldi r25, 0x01 ; 1 + 850: 09 95 icall + 852: 10 92 18 01 sts 0x0118, r1 ; 0x800118 + 856: 08 95 ret + +00000858 : + 858: 88 98 cbi 0x11, 0 ; 17 + 85a: 89 9a sbi 0x11, 1 ; 17 + 85c: 8a b1 in r24, 0x0a ; 10 + 85e: 88 69 ori r24, 0x98 ; 152 + 860: 8a b9 out 0x0a, r24 ; 10 + 862: 86 ea ldi r24, 0xA6 ; 166 + 864: 80 bd out 0x20, r24 ; 32 + 866: 10 bc out 0x20, r1 ; 32 + 868: 8d e4 ldi r24, 0x4D ; 77 + 86a: 89 b9 out 0x09, r24 ; 9 + 86c: 08 95 ret + +0000086e : + 86e: 5d 9b sbis 0x0b, 5 ; 11 + 870: fe cf rjmp .-4 ; 0x86e + 872: 8c b9 out 0x0c, r24 ; 12 + 874: 08 95 ret + +00000876 : + 876: cf 93 push r28 + 878: df 93 push r29 + 87a: ec 01 movw r28, r24 + 87c: 89 91 ld r24, Y+ + 87e: 81 11 cpse r24, r1 + 880: 03 c0 rjmp .+6 ; 0x888 + 882: df 91 pop r29 + 884: cf 91 pop r28 + 886: 08 95 ret + 888: f2 df rcall .-28 ; 0x86e + 88a: f8 cf rjmp .-16 ; 0x87c + +0000088c : + 88c: cf 93 push r28 + 88e: df 93 push r29 + 890: 00 d0 rcall .+0 ; 0x892 + 892: 00 d0 rcall .+0 ; 0x894 + 894: 00 d0 rcall .+0 ; 0x896 + 896: 1f 92 push r1 + 898: cd b7 in r28, 0x3d ; 61 + 89a: de b7 in r29, 0x3e ; 62 + 89c: 4a e0 ldi r20, 0x0A ; 10 + 89e: be 01 movw r22, r28 + 8a0: 6f 5f subi r22, 0xFF ; 255 + 8a2: 7f 4f sbci r23, 0xFF ; 255 + 8a4: d8 d1 rcall .+944 ; 0xc56 <__itoa_ncheck> + 8a6: ce 01 movw r24, r28 + 8a8: 01 96 adiw r24, 0x01 ; 1 + 8aa: e5 df rcall .-54 ; 0x876 + 8ac: 27 96 adiw r28, 0x07 ; 7 + 8ae: 0f b6 in r0, 0x3f ; 63 + 8b0: f8 94 cli + 8b2: de bf out 0x3e, r29 ; 62 + 8b4: 0f be out 0x3f, r0 ; 63 + 8b6: cd bf out 0x3d, r28 ; 61 + 8b8: df 91 pop r29 + 8ba: cf 91 pop r28 + 8bc: 08 95 ret + +000008be : + 8be: df 92 push r13 + 8c0: ef 92 push r14 + 8c2: ff 92 push r15 + 8c4: 0f 93 push r16 + 8c6: 1f 93 push r17 + 8c8: cf 93 push r28 + 8ca: df 93 push r29 + 8cc: cd b7 in r28, 0x3d ; 61 + 8ce: de b7 in r29, 0x3e ; 62 + 8d0: c0 5c subi r28, 0xC0 ; 192 + 8d2: d1 09 sbc r29, r1 + 8d4: 0f b6 in r0, 0x3f ; 63 + 8d6: f8 94 cli + 8d8: de bf out 0x3e, r29 ; 62 + 8da: 0f be out 0x3f, r0 ; 63 + 8dc: cd bf out 0x3d, r28 ; 61 + 8de: fe 01 movw r30, r28 + 8e0: 31 96 adiw r30, 0x01 ; 1 + 8e2: 90 ec ldi r25, 0xC0 ; 192 + 8e4: df 01 movw r26, r30 + 8e6: 1d 92 st X+, r1 + 8e8: 9a 95 dec r25 + 8ea: e9 f7 brne .-6 ; 0x8e6 + 8ec: 7f 01 movw r14, r30 + 8ee: df 01 movw r26, r30 + 8f0: 36 2f mov r19, r22 + 8f2: 50 ec ldi r21, 0xC0 ; 192 + 8f4: 27 e0 ldi r18, 0x07 ; 7 + 8f6: 90 e0 ldi r25, 0x00 ; 0 + 8f8: 74 e0 ldi r23, 0x04 ; 4 + 8fa: 16 e0 ldi r17, 0x06 ; 6 + 8fc: d1 2e mov r13, r17 + 8fe: 98 30 cpi r25, 0x08 ; 8 + 900: 81 f1 breq .+96 ; 0x962 + 902: 90 31 cpi r25, 0x10 ; 16 + 904: 89 f1 breq .+98 ; 0x968 + 906: 98 31 cpi r25, 0x18 ; 24 + 908: 89 f1 breq .+98 ; 0x96c + 90a: 03 2f mov r16, r19 + 90c: 10 e0 ldi r17, 0x00 ; 0 + 90e: 02 2e mov r0, r18 + 910: 02 c0 rjmp .+4 ; 0x916 + 912: 15 95 asr r17 + 914: 07 95 ror r16 + 916: 0a 94 dec r0 + 918: e2 f7 brpl .-8 ; 0x912 + 91a: 00 ff sbrs r16, 0 + 91c: 2a c0 rjmp .+84 ; 0x972 + 91e: dc 92 st X, r13 + 920: 9f 5f subi r25, 0xFF ; 255 + 922: 21 50 subi r18, 0x01 ; 1 + 924: 51 50 subi r21, 0x01 ; 1 + 926: 11 96 adiw r26, 0x01 ; 1 + 928: 51 11 cpse r21, r1 + 92a: e9 cf rjmp .-46 ; 0x8fe + 92c: f8 94 cli + 92e: 8f 01 movw r16, r30 + 930: 00 54 subi r16, 0x40 ; 64 + 932: 1f 4f sbci r17, 0xFF ; 255 + 934: f7 01 movw r30, r14 + 936: 81 91 ld r24, Z+ + 938: 7f 01 movw r14, r30 + 93a: 2b df rcall .-426 ; 0x792 + 93c: 0e 15 cp r16, r14 + 93e: 1f 05 cpc r17, r15 + 940: c9 f7 brne .-14 ; 0x934 + 942: 78 94 sei + 944: c0 54 subi r28, 0x40 ; 64 + 946: df 4f sbci r29, 0xFF ; 255 + 948: 0f b6 in r0, 0x3f ; 63 + 94a: f8 94 cli + 94c: de bf out 0x3e, r29 ; 62 + 94e: 0f be out 0x3f, r0 ; 63 + 950: cd bf out 0x3d, r28 ; 61 + 952: df 91 pop r29 + 954: cf 91 pop r28 + 956: 1f 91 pop r17 + 958: 0f 91 pop r16 + 95a: ff 90 pop r15 + 95c: ef 90 pop r14 + 95e: df 90 pop r13 + 960: 08 95 ret + 962: 38 2f mov r19, r24 + 964: 27 e0 ldi r18, 0x07 ; 7 + 966: d1 cf rjmp .-94 ; 0x90a + 968: 34 2f mov r19, r20 + 96a: fc cf rjmp .-8 ; 0x964 + 96c: 36 2f mov r19, r22 + 96e: 90 e0 ldi r25, 0x00 ; 0 + 970: cc cf rjmp .-104 ; 0x90a + 972: 7c 93 st X, r23 + 974: d5 cf rjmp .-86 ; 0x920 + +00000976
: + 976: f4 de rcall .-536 ; 0x760 + 978: 80 91 13 01 lds r24, 0x0113 ; 0x800113 + 97c: 90 91 14 01 lds r25, 0x0114 ; 0x800114 + 980: 82 30 cpi r24, 0x02 ; 2 + 982: 91 05 cpc r25, r1 + 984: b1 f0 breq .+44 ; 0x9b2 + 986: 30 f4 brcc .+12 ; 0x994 + 988: 00 97 sbiw r24, 0x00 ; 0 + 98a: 61 f0 breq .+24 ; 0x9a4 + 98c: 01 97 sbiw r24, 0x01 ; 1 + 98e: a1 f7 brne .-24 ; 0x978 + 990: 12 dd rcall .-1500 ; 0x3b6 + 992: f2 cf rjmp .-28 ; 0x978 + 994: 84 30 cpi r24, 0x04 ; 4 + 996: 91 05 cpc r25, r1 + 998: 81 f0 breq .+32 ; 0x9ba + 99a: 68 f0 brcs .+26 ; 0x9b6 + 99c: 05 97 sbiw r24, 0x05 ; 5 + 99e: 61 f7 brne .-40 ; 0x978 + 9a0: 85 de rcall .-758 ; 0x6ac + 9a2: ea cf rjmp .-44 ; 0x978 + 9a4: 8f e2 ldi r24, 0x2F ; 47 + 9a6: 95 e7 ldi r25, 0x75 ; 117 + 9a8: 01 97 sbiw r24, 0x01 ; 1 + 9aa: f1 f7 brne .-4 ; 0x9a8 + 9ac: 00 c0 rjmp .+0 ; 0x9ae + 9ae: 00 00 nop + 9b0: e3 cf rjmp .-58 ; 0x978 + 9b2: 38 dd rcall .-1424 ; 0x424 + 9b4: e1 cf rjmp .-62 ; 0x978 + 9b6: 71 dd rcall .-1310 ; 0x49a + 9b8: df cf rjmp .-66 ; 0x978 + 9ba: 52 de rcall .-860 ; 0x660 + 9bc: dd cf rjmp .-70 ; 0x978 + +000009be <__udivmodqi4>: + 9be: 99 1b sub r25, r25 + 9c0: 79 e0 ldi r23, 0x09 ; 9 + 9c2: 04 c0 rjmp .+8 ; 0x9cc <__udivmodqi4_ep> + +000009c4 <__udivmodqi4_loop>: + 9c4: 99 1f adc r25, r25 + 9c6: 96 17 cp r25, r22 + 9c8: 08 f0 brcs .+2 ; 0x9cc <__udivmodqi4_ep> + 9ca: 96 1b sub r25, r22 + +000009cc <__udivmodqi4_ep>: + 9cc: 88 1f adc r24, r24 + 9ce: 7a 95 dec r23 + 9d0: c9 f7 brne .-14 ; 0x9c4 <__udivmodqi4_loop> + 9d2: 80 95 com r24 + 9d4: 08 95 ret + +000009d6 <__udivmodhi4>: + 9d6: aa 1b sub r26, r26 + 9d8: bb 1b sub r27, r27 + 9da: 51 e1 ldi r21, 0x11 ; 17 + 9dc: 07 c0 rjmp .+14 ; 0x9ec <__udivmodhi4_ep> + +000009de <__udivmodhi4_loop>: + 9de: aa 1f adc r26, r26 + 9e0: bb 1f adc r27, r27 + 9e2: a6 17 cp r26, r22 + 9e4: b7 07 cpc r27, r23 + 9e6: 10 f0 brcs .+4 ; 0x9ec <__udivmodhi4_ep> + 9e8: a6 1b sub r26, r22 + 9ea: b7 0b sbc r27, r23 + +000009ec <__udivmodhi4_ep>: + 9ec: 88 1f adc r24, r24 + 9ee: 99 1f adc r25, r25 + 9f0: 5a 95 dec r21 + 9f2: a9 f7 brne .-22 ; 0x9de <__udivmodhi4_loop> + 9f4: 80 95 com r24 + 9f6: 90 95 com r25 + 9f8: bc 01 movw r22, r24 + 9fa: cd 01 movw r24, r26 + 9fc: 08 95 ret + +000009fe <__divmodhi4>: + 9fe: 97 fb bst r25, 7 + a00: 07 2e mov r0, r23 + a02: 16 f4 brtc .+4 ; 0xa08 <__divmodhi4+0xa> + a04: 00 94 com r0 + a06: 06 d0 rcall .+12 ; 0xa14 <__divmodhi4_neg1> + a08: 77 fd sbrc r23, 7 + a0a: 08 d0 rcall .+16 ; 0xa1c <__divmodhi4_neg2> + a0c: e4 df rcall .-56 ; 0x9d6 <__udivmodhi4> + a0e: 07 fc sbrc r0, 7 + a10: 05 d0 rcall .+10 ; 0xa1c <__divmodhi4_neg2> + a12: 3e f4 brtc .+14 ; 0xa22 <__divmodhi4_exit> + +00000a14 <__divmodhi4_neg1>: + a14: 90 95 com r25 + a16: 81 95 neg r24 + a18: 9f 4f sbci r25, 0xFF ; 255 + a1a: 08 95 ret + +00000a1c <__divmodhi4_neg2>: + a1c: 70 95 com r23 + a1e: 61 95 neg r22 + a20: 7f 4f sbci r23, 0xFF ; 255 + +00000a22 <__divmodhi4_exit>: + a22: 08 95 ret + +00000a24 : + a24: b0 e0 ldi r27, 0x00 ; 0 + a26: a0 e0 ldi r26, 0x00 ; 0 + a28: e7 e1 ldi r30, 0x17 ; 23 + a2a: f5 e0 ldi r31, 0x05 ; 5 + a2c: 9f c1 rjmp .+830 ; 0xd6c <__prologue_saves__+0x2> + a2e: 5c 01 movw r10, r24 + a30: 6b 01 movw r12, r22 + a32: 7a 01 movw r14, r20 + a34: 61 15 cp r22, r1 + a36: 71 05 cpc r23, r1 + a38: 19 f0 breq .+6 ; 0xa40 + a3a: fb 01 movw r30, r22 + a3c: 91 83 std Z+1, r25 ; 0x01 + a3e: 80 83 st Z, r24 + a40: e1 14 cp r14, r1 + a42: f1 04 cpc r15, r1 + a44: 49 f0 breq .+18 ; 0xa58 + a46: c7 01 movw r24, r14 + a48: 02 97 sbiw r24, 0x02 ; 2 + a4a: 83 97 sbiw r24, 0x23 ; 35 + a4c: 28 f0 brcs .+10 ; 0xa58 + a4e: 60 e0 ldi r22, 0x00 ; 0 + a50: 70 e0 ldi r23, 0x00 ; 0 + a52: cb 01 movw r24, r22 + a54: 9a c0 rjmp .+308 ; 0xb8a + a56: 5e 01 movw r10, r28 + a58: e5 01 movw r28, r10 + a5a: 21 96 adiw r28, 0x01 ; 1 + a5c: f5 01 movw r30, r10 + a5e: 10 81 ld r17, Z + a60: 81 2f mov r24, r17 + a62: 90 e0 ldi r25, 0x00 ; 0 + a64: c5 d0 rcall .+394 ; 0xbf0 + a66: 89 2b or r24, r25 + a68: b1 f7 brne .-20 ; 0xa56 + a6a: 1d 32 cpi r17, 0x2D ; 45 + a6c: 09 f0 breq .+2 ; 0xa70 + a6e: 55 c0 rjmp .+170 ; 0xb1a + a70: 21 96 adiw r28, 0x01 ; 1 + a72: f5 01 movw r30, r10 + a74: 11 81 ldd r17, Z+1 ; 0x01 + a76: 01 e0 ldi r16, 0x01 ; 1 + a78: e1 14 cp r14, r1 + a7a: f1 04 cpc r15, r1 + a7c: 09 f4 brne .+2 ; 0xa80 + a7e: ab c0 rjmp .+342 ; 0xbd6 + a80: f0 e1 ldi r31, 0x10 ; 16 + a82: ef 16 cp r14, r31 + a84: f1 04 cpc r15, r1 + a86: 09 f0 breq .+2 ; 0xa8a + a88: 8c c0 rjmp .+280 ; 0xba2 + a8a: 10 33 cpi r17, 0x30 ; 48 + a8c: 41 f4 brne .+16 ; 0xa9e + a8e: 88 81 ld r24, Y + a90: 8f 7d andi r24, 0xDF ; 223 + a92: 88 35 cpi r24, 0x58 ; 88 + a94: 09 f0 breq .+2 ; 0xa98 + a96: 81 c0 rjmp .+258 ; 0xb9a + a98: 19 81 ldd r17, Y+1 ; 0x01 + a9a: 22 96 adiw r28, 0x02 ; 2 + a9c: 02 60 ori r16, 0x02 ; 2 + a9e: e0 e1 ldi r30, 0x10 ; 16 + aa0: ee 2e mov r14, r30 + aa2: f1 2c mov r15, r1 + aa4: 88 24 eor r8, r8 + aa6: 8a 94 dec r8 + aa8: 98 2c mov r9, r8 + aaa: a8 2c mov r10, r8 + aac: ff e0 ldi r31, 0x0F ; 15 + aae: bf 2e mov r11, r31 + ab0: 20 e0 ldi r18, 0x00 ; 0 + ab2: 60 e0 ldi r22, 0x00 ; 0 + ab4: 70 e0 ldi r23, 0x00 ; 0 + ab6: cb 01 movw r24, r22 + ab8: 27 01 movw r4, r14 + aba: 0f 2c mov r0, r15 + abc: 00 0c add r0, r0 + abe: 66 08 sbc r6, r6 + ac0: 77 08 sbc r7, r7 + ac2: fe 01 movw r30, r28 + ac4: 50 ed ldi r21, 0xD0 ; 208 + ac6: 35 2e mov r3, r21 + ac8: 31 0e add r3, r17 + aca: 39 e0 ldi r19, 0x09 ; 9 + acc: 33 15 cp r19, r3 + ace: 38 f4 brcc .+14 ; 0xade + ad0: 3f eb ldi r19, 0xBF ; 191 + ad2: 31 0f add r19, r17 + ad4: 3a 31 cpi r19, 0x1A ; 26 + ad6: 98 f5 brcc .+102 ; 0xb3e + ad8: 49 ec ldi r20, 0xC9 ; 201 + ada: 34 2e mov r3, r20 + adc: 31 0e add r3, r17 + ade: 3e 14 cp r3, r14 + ae0: 1f 04 cpc r1, r15 + ae2: b4 f5 brge .+108 ; 0xb50 + ae4: 2f 3f cpi r18, 0xFF ; 255 + ae6: b1 f0 breq .+44 ; 0xb14 + ae8: 86 16 cp r8, r22 + aea: 97 06 cpc r9, r23 + aec: a8 06 cpc r10, r24 + aee: b9 06 cpc r11, r25 + af0: 68 f1 brcs .+90 ; 0xb4c + af2: a3 01 movw r20, r6 + af4: 92 01 movw r18, r4 + af6: fe d0 rcall .+508 ; 0xcf4 <__mulsi3> + af8: 23 2d mov r18, r3 + afa: 30 e0 ldi r19, 0x00 ; 0 + afc: 50 e0 ldi r21, 0x00 ; 0 + afe: 40 e0 ldi r20, 0x00 ; 0 + b00: 62 0f add r22, r18 + b02: 73 1f adc r23, r19 + b04: 84 1f adc r24, r20 + b06: 95 1f adc r25, r21 + b08: 62 17 cp r22, r18 + b0a: 73 07 cpc r23, r19 + b0c: 84 07 cpc r24, r20 + b0e: 95 07 cpc r25, r21 + b10: e8 f0 brcs .+58 ; 0xb4c + b12: 21 e0 ldi r18, 0x01 ; 1 + b14: 21 96 adiw r28, 0x01 ; 1 + b16: 10 81 ld r17, Z + b18: d4 cf rjmp .-88 ; 0xac2 + b1a: 1b 32 cpi r17, 0x2B ; 43 + b1c: 21 f4 brne .+8 ; 0xb26 + b1e: e5 01 movw r28, r10 + b20: 22 96 adiw r28, 0x02 ; 2 + b22: f5 01 movw r30, r10 + b24: 11 81 ldd r17, Z+1 ; 0x01 + b26: 00 e0 ldi r16, 0x00 ; 0 + b28: a7 cf rjmp .-178 ; 0xa78 + b2a: 78 e0 ldi r23, 0x08 ; 8 + b2c: e7 2e mov r14, r23 + b2e: f1 2c mov r15, r1 + b30: 88 24 eor r8, r8 + b32: 8a 94 dec r8 + b34: 98 2c mov r9, r8 + b36: a8 2c mov r10, r8 + b38: 6f e1 ldi r22, 0x1F ; 31 + b3a: b6 2e mov r11, r22 + b3c: b9 cf rjmp .-142 ; 0xab0 + b3e: 3f e9 ldi r19, 0x9F ; 159 + b40: 31 0f add r19, r17 + b42: 3a 31 cpi r19, 0x1A ; 26 + b44: 28 f4 brcc .+10 ; 0xb50 + b46: 39 ea ldi r19, 0xA9 ; 169 + b48: 33 2e mov r3, r19 + b4a: c8 cf rjmp .-112 ; 0xadc + b4c: 2f ef ldi r18, 0xFF ; 255 + b4e: e2 cf rjmp .-60 ; 0xb14 + b50: c1 14 cp r12, r1 + b52: d1 04 cpc r13, r1 + b54: 31 f0 breq .+12 ; 0xb62 + b56: 22 23 and r18, r18 + b58: e1 f0 breq .+56 ; 0xb92 + b5a: 21 97 sbiw r28, 0x01 ; 1 + b5c: f6 01 movw r30, r12 + b5e: d1 83 std Z+1, r29 ; 0x01 + b60: c0 83 st Z, r28 + b62: 00 ff sbrs r16, 0 + b64: 07 c0 rjmp .+14 ; 0xb74 + b66: 90 95 com r25 + b68: 80 95 com r24 + b6a: 70 95 com r23 + b6c: 61 95 neg r22 + b6e: 7f 4f sbci r23, 0xFF ; 255 + b70: 8f 4f sbci r24, 0xFF ; 255 + b72: 9f 4f sbci r25, 0xFF ; 255 + b74: 2f 3f cpi r18, 0xFF ; 255 + b76: 49 f4 brne .+18 ; 0xb8a + b78: 82 e2 ldi r24, 0x22 ; 34 + b7a: 90 e0 ldi r25, 0x00 ; 0 + b7c: 90 93 3f 01 sts 0x013F, r25 ; 0x80013f + b80: 80 93 3e 01 sts 0x013E, r24 ; 0x80013e + b84: 6f ef ldi r22, 0xFF ; 255 + b86: 7f ef ldi r23, 0xFF ; 255 + b88: cb 01 movw r24, r22 + b8a: cd b7 in r28, 0x3d ; 61 + b8c: de b7 in r29, 0x3e ; 62 + b8e: e1 e1 ldi r30, 0x11 ; 17 + b90: 09 c1 rjmp .+530 ; 0xda4 <__epilogue_restores__+0x2> + b92: 01 ff sbrs r16, 1 + b94: e6 cf rjmp .-52 ; 0xb62 + b96: 22 97 sbiw r28, 0x02 ; 2 + b98: e1 cf rjmp .-62 ; 0xb5c + b9a: 10 e3 ldi r17, 0x30 ; 48 + b9c: e1 14 cp r14, r1 + b9e: f1 04 cpc r15, r1 + ba0: 21 f2 breq .-120 ; 0xb2a + ba2: 3a e0 ldi r19, 0x0A ; 10 + ba4: e3 16 cp r14, r19 + ba6: f1 04 cpc r15, r1 + ba8: e1 f0 breq .+56 ; 0xbe2 + baa: 80 e1 ldi r24, 0x10 ; 16 + bac: e8 16 cp r14, r24 + bae: f1 04 cpc r15, r1 + bb0: 09 f4 brne .+2 ; 0xbb4 + bb2: 75 cf rjmp .-278 ; 0xa9e + bb4: e8 e0 ldi r30, 0x08 ; 8 + bb6: ee 16 cp r14, r30 + bb8: f1 04 cpc r15, r1 + bba: 09 f4 brne .+2 ; 0xbbe + bbc: b9 cf rjmp .-142 ; 0xb30 + bbe: 6f ef ldi r22, 0xFF ; 255 + bc0: 7f ef ldi r23, 0xFF ; 255 + bc2: cb 01 movw r24, r22 + bc4: 97 01 movw r18, r14 + bc6: 0f 2c mov r0, r15 + bc8: 00 0c add r0, r0 + bca: 44 0b sbc r20, r20 + bcc: 55 0b sbc r21, r21 + bce: a1 d0 rcall .+322 ; 0xd12 <__udivmodsi4> + bd0: 49 01 movw r8, r18 + bd2: 5a 01 movw r10, r20 + bd4: 6d cf rjmp .-294 ; 0xab0 + bd6: 10 33 cpi r17, 0x30 ; 48 + bd8: 09 f4 brne .+2 ; 0xbdc + bda: 59 cf rjmp .-334 ; 0xa8e + bdc: 9a e0 ldi r25, 0x0A ; 10 + bde: e9 2e mov r14, r25 + be0: f1 2c mov r15, r1 + be2: 89 e9 ldi r24, 0x99 ; 153 + be4: 88 2e mov r8, r24 + be6: 98 2c mov r9, r8 + be8: a8 2c mov r10, r8 + bea: 89 e1 ldi r24, 0x19 ; 25 + bec: b8 2e mov r11, r24 + bee: 60 cf rjmp .-320 ; 0xab0 + +00000bf0 : + bf0: 91 11 cpse r25, r1 + bf2: 54 c0 rjmp .+168 ; 0xc9c <__ctype_isfalse> + bf4: 80 32 cpi r24, 0x20 ; 32 + bf6: 19 f0 breq .+6 ; 0xbfe + bf8: 89 50 subi r24, 0x09 ; 9 + bfa: 85 50 subi r24, 0x05 ; 5 + bfc: d0 f7 brcc .-12 ; 0xbf2 + bfe: 08 95 ret + +00000c00 : + c00: 4c e1 ldi r20, 0x1C ; 28 + c02: 51 e0 ldi r21, 0x01 ; 1 + c04: 01 d0 rcall .+2 ; 0xc08 + c06: 08 95 ret + +00000c08 : + c08: fa 01 movw r30, r20 + c0a: a1 91 ld r26, Z+ + c0c: b0 81 ld r27, Z + c0e: 00 97 sbiw r24, 0x00 ; 0 + c10: 19 f4 brne .+6 ; 0xc18 + c12: 10 97 sbiw r26, 0x00 ; 0 + c14: e1 f0 breq .+56 ; 0xc4e + c16: cd 01 movw r24, r26 + c18: dc 01 movw r26, r24 + c1a: cd 01 movw r24, r26 + c1c: 0d 90 ld r0, X+ + c1e: 00 20 and r0, r0 + c20: 11 f4 brne .+4 ; 0xc26 + c22: c0 01 movw r24, r0 + c24: 13 c0 rjmp .+38 ; 0xc4c + c26: fb 01 movw r30, r22 + c28: 21 91 ld r18, Z+ + c2a: 22 23 and r18, r18 + c2c: 19 f0 breq .+6 ; 0xc34 + c2e: 20 15 cp r18, r0 + c30: d9 f7 brne .-10 ; 0xc28 + c32: f3 cf rjmp .-26 ; 0xc1a + c34: fb 01 movw r30, r22 + c36: 21 91 ld r18, Z+ + c38: 20 15 cp r18, r0 + c3a: 19 f4 brne .+6 ; 0xc42 + c3c: 1e 92 st -X, r1 + c3e: 11 96 adiw r26, 0x01 ; 1 + c40: 06 c0 rjmp .+12 ; 0xc4e + c42: 22 23 and r18, r18 + c44: c1 f7 brne .-16 ; 0xc36 + c46: 0d 90 ld r0, X+ + c48: 00 20 and r0, r0 + c4a: a1 f7 brne .-24 ; 0xc34 + c4c: d0 01 movw r26, r0 + c4e: fa 01 movw r30, r20 + c50: a1 93 st Z+, r26 + c52: b0 83 st Z, r27 + c54: 08 95 ret + +00000c56 <__itoa_ncheck>: + c56: bb 27 eor r27, r27 + c58: 4a 30 cpi r20, 0x0A ; 10 + c5a: 31 f4 brne .+12 ; 0xc68 <__itoa_ncheck+0x12> + c5c: 99 23 and r25, r25 + c5e: 22 f4 brpl .+8 ; 0xc68 <__itoa_ncheck+0x12> + c60: bd e2 ldi r27, 0x2D ; 45 + c62: 90 95 com r25 + c64: 81 95 neg r24 + c66: 9f 4f sbci r25, 0xFF ; 255 + c68: 01 c0 rjmp .+2 ; 0xc6c <__utoa_common> + +00000c6a <__utoa_ncheck>: + c6a: bb 27 eor r27, r27 + +00000c6c <__utoa_common>: + c6c: fb 01 movw r30, r22 + c6e: 55 27 eor r21, r21 + c70: aa 27 eor r26, r26 + c72: 88 0f add r24, r24 + c74: 99 1f adc r25, r25 + c76: aa 1f adc r26, r26 + c78: a4 17 cp r26, r20 + c7a: 10 f0 brcs .+4 ; 0xc80 <__utoa_common+0x14> + c7c: a4 1b sub r26, r20 + c7e: 83 95 inc r24 + c80: 50 51 subi r21, 0x10 ; 16 + c82: b9 f7 brne .-18 ; 0xc72 <__utoa_common+0x6> + c84: a0 5d subi r26, 0xD0 ; 208 + c86: aa 33 cpi r26, 0x3A ; 58 + c88: 08 f0 brcs .+2 ; 0xc8c <__utoa_common+0x20> + c8a: a9 5d subi r26, 0xD9 ; 217 + c8c: a1 93 st Z+, r26 + c8e: 00 97 sbiw r24, 0x00 ; 0 + c90: 79 f7 brne .-34 ; 0xc70 <__utoa_common+0x4> + c92: b1 11 cpse r27, r1 + c94: b1 93 st Z+, r27 + c96: 11 92 st Z+, r1 + c98: cb 01 movw r24, r22 + c9a: 03 c0 rjmp .+6 ; 0xca2 + +00000c9c <__ctype_isfalse>: + c9c: 99 27 eor r25, r25 + c9e: 88 27 eor r24, r24 + +00000ca0 <__ctype_istrue>: + ca0: 08 95 ret + +00000ca2 : + ca2: dc 01 movw r26, r24 + ca4: fc 01 movw r30, r24 + ca6: 67 2f mov r22, r23 + ca8: 71 91 ld r23, Z+ + caa: 77 23 and r23, r23 + cac: e1 f7 brne .-8 ; 0xca6 + cae: 32 97 sbiw r30, 0x02 ; 2 + cb0: 04 c0 rjmp .+8 ; 0xcba + cb2: 7c 91 ld r23, X + cb4: 6d 93 st X+, r22 + cb6: 70 83 st Z, r23 + cb8: 62 91 ld r22, -Z + cba: ae 17 cp r26, r30 + cbc: bf 07 cpc r27, r31 + cbe: c8 f3 brcs .-14 ; 0xcb2 + cc0: 08 95 ret + +00000cc2 : + cc2: e1 99 sbic 0x1c, 1 ; 28 + cc4: fe cf rjmp .-4 ; 0xcc2 + cc6: 9f bb out 0x1f, r25 ; 31 + cc8: 8e bb out 0x1e, r24 ; 30 + cca: e0 9a sbi 0x1c, 0 ; 28 + ccc: 99 27 eor r25, r25 + cce: 8d b3 in r24, 0x1d ; 29 + cd0: 08 95 ret + +00000cd2 : + cd2: 26 2f mov r18, r22 + +00000cd4 : + cd4: e1 99 sbic 0x1c, 1 ; 28 + cd6: fe cf rjmp .-4 ; 0xcd4 + cd8: 9f bb out 0x1f, r25 ; 31 + cda: 8e bb out 0x1e, r24 ; 30 + cdc: e0 9a sbi 0x1c, 0 ; 28 + cde: 01 97 sbiw r24, 0x01 ; 1 + ce0: 0d b2 in r0, 0x1d ; 29 + ce2: 02 16 cp r0, r18 + ce4: 31 f0 breq .+12 ; 0xcf2 + ce6: 2d bb out 0x1d, r18 ; 29 + ce8: 0f b6 in r0, 0x3f ; 63 + cea: f8 94 cli + cec: e2 9a sbi 0x1c, 2 ; 28 + cee: e1 9a sbi 0x1c, 1 ; 28 + cf0: 0f be out 0x3f, r0 ; 63 + cf2: 08 95 ret + +00000cf4 <__mulsi3>: + cf4: db 01 movw r26, r22 + cf6: 8f 93 push r24 + cf8: 9f 93 push r25 + cfa: 2d d0 rcall .+90 ; 0xd56 <__muluhisi3> + cfc: bf 91 pop r27 + cfe: af 91 pop r26 + d00: a2 9f mul r26, r18 + d02: 80 0d add r24, r0 + d04: 91 1d adc r25, r1 + d06: a3 9f mul r26, r19 + d08: 90 0d add r25, r0 + d0a: b2 9f mul r27, r18 + d0c: 90 0d add r25, r0 + d0e: 11 24 eor r1, r1 + d10: 08 95 ret + +00000d12 <__udivmodsi4>: + d12: a1 e2 ldi r26, 0x21 ; 33 + d14: 1a 2e mov r1, r26 + d16: aa 1b sub r26, r26 + d18: bb 1b sub r27, r27 + d1a: fd 01 movw r30, r26 + d1c: 0d c0 rjmp .+26 ; 0xd38 <__udivmodsi4_ep> + +00000d1e <__udivmodsi4_loop>: + d1e: aa 1f adc r26, r26 + d20: bb 1f adc r27, r27 + d22: ee 1f adc r30, r30 + d24: ff 1f adc r31, r31 + d26: a2 17 cp r26, r18 + d28: b3 07 cpc r27, r19 + d2a: e4 07 cpc r30, r20 + d2c: f5 07 cpc r31, r21 + d2e: 20 f0 brcs .+8 ; 0xd38 <__udivmodsi4_ep> + d30: a2 1b sub r26, r18 + d32: b3 0b sbc r27, r19 + d34: e4 0b sbc r30, r20 + d36: f5 0b sbc r31, r21 + +00000d38 <__udivmodsi4_ep>: + d38: 66 1f adc r22, r22 + d3a: 77 1f adc r23, r23 + d3c: 88 1f adc r24, r24 + d3e: 99 1f adc r25, r25 + d40: 1a 94 dec r1 + d42: 69 f7 brne .-38 ; 0xd1e <__udivmodsi4_loop> + d44: 60 95 com r22 + d46: 70 95 com r23 + d48: 80 95 com r24 + d4a: 90 95 com r25 + d4c: 9b 01 movw r18, r22 + d4e: ac 01 movw r20, r24 + d50: bd 01 movw r22, r26 + d52: cf 01 movw r24, r30 + d54: 08 95 ret + +00000d56 <__muluhisi3>: + d56: 40 d0 rcall .+128 ; 0xdd8 <__umulhisi3> + d58: a5 9f mul r26, r21 + d5a: 90 0d add r25, r0 + d5c: b4 9f mul r27, r20 + d5e: 90 0d add r25, r0 + d60: a4 9f mul r26, r20 + d62: 80 0d add r24, r0 + d64: 91 1d adc r25, r1 + d66: 11 24 eor r1, r1 + d68: 08 95 ret + +00000d6a <__prologue_saves__>: + d6a: 2f 92 push r2 + d6c: 3f 92 push r3 + d6e: 4f 92 push r4 + d70: 5f 92 push r5 + d72: 6f 92 push r6 + d74: 7f 92 push r7 + d76: 8f 92 push r8 + d78: 9f 92 push r9 + d7a: af 92 push r10 + d7c: bf 92 push r11 + d7e: cf 92 push r12 + d80: df 92 push r13 + d82: ef 92 push r14 + d84: ff 92 push r15 + d86: 0f 93 push r16 + d88: 1f 93 push r17 + d8a: cf 93 push r28 + d8c: df 93 push r29 + d8e: cd b7 in r28, 0x3d ; 61 + d90: de b7 in r29, 0x3e ; 62 + d92: ca 1b sub r28, r26 + d94: db 0b sbc r29, r27 + d96: 0f b6 in r0, 0x3f ; 63 + d98: f8 94 cli + d9a: de bf out 0x3e, r29 ; 62 + d9c: 0f be out 0x3f, r0 ; 63 + d9e: cd bf out 0x3d, r28 ; 61 + da0: 09 94 ijmp + +00000da2 <__epilogue_restores__>: + da2: 2a 88 ldd r2, Y+18 ; 0x12 + da4: 39 88 ldd r3, Y+17 ; 0x11 + da6: 48 88 ldd r4, Y+16 ; 0x10 + da8: 5f 84 ldd r5, Y+15 ; 0x0f + daa: 6e 84 ldd r6, Y+14 ; 0x0e + dac: 7d 84 ldd r7, Y+13 ; 0x0d + dae: 8c 84 ldd r8, Y+12 ; 0x0c + db0: 9b 84 ldd r9, Y+11 ; 0x0b + db2: aa 84 ldd r10, Y+10 ; 0x0a + db4: b9 84 ldd r11, Y+9 ; 0x09 + db6: c8 84 ldd r12, Y+8 ; 0x08 + db8: df 80 ldd r13, Y+7 ; 0x07 + dba: ee 80 ldd r14, Y+6 ; 0x06 + dbc: fd 80 ldd r15, Y+5 ; 0x05 + dbe: 0c 81 ldd r16, Y+4 ; 0x04 + dc0: 1b 81 ldd r17, Y+3 ; 0x03 + dc2: aa 81 ldd r26, Y+2 ; 0x02 + dc4: b9 81 ldd r27, Y+1 ; 0x01 + dc6: ce 0f add r28, r30 + dc8: d1 1d adc r29, r1 + dca: 0f b6 in r0, 0x3f ; 63 + dcc: f8 94 cli + dce: de bf out 0x3e, r29 ; 62 + dd0: 0f be out 0x3f, r0 ; 63 + dd2: cd bf out 0x3d, r28 ; 61 + dd4: ed 01 movw r28, r26 + dd6: 08 95 ret + +00000dd8 <__umulhisi3>: + dd8: a2 9f mul r26, r18 + dda: b0 01 movw r22, r0 + ddc: b3 9f mul r27, r19 + dde: c0 01 movw r24, r0 + de0: a3 9f mul r26, r19 + de2: 01 d0 rcall .+2 ; 0xde6 <__umulhisi3+0xe> + de4: b2 9f mul r27, r18 + de6: 70 0d add r23, r0 + de8: 81 1d adc r24, r1 + dea: 11 24 eor r1, r1 + dec: 91 1d adc r25, r1 + dee: 08 95 ret + +00000df0 <_exit>: + df0: f8 94 cli + +00000df2 <__stop_program>: + df2: ff cf rjmp .-2 ; 0xdf2 <__stop_program> + +Disassembly of section .data: + +00800060 <__data_start>: + 800060: ff 00 .word 0x00ff ; ???? + 800062: 00 00 nop + 800064: ff 00 .word 0x00ff ; ???? + 800066: 00 00 nop + 800068: ff ff .word 0xffff ; ???? + 80006a: ff 00 .word 0x00ff ; ???? + 80006c: 00 ff sbrs r16, 0 + 80006e: ff 2c mov r15, r15 + 800070: 00 49 sbci r16, 0x90 ; 144 + 800072: 6e 76 andi r22, 0x6E ; 110 + 800074: 61 6c ori r22, 0xC1 ; 193 + 800076: 69 64 ori r22, 0x49 ; 73 + 800078: 20 6e ori r18, 0xE0 ; 224 + 80007a: 75 6d ori r23, 0xD5 ; 213 + 80007c: 62 65 ori r22, 0x52 ; 82 + 80007e: 72 20 and r7, r2 + 800080: 6f 66 ori r22, 0x6F ; 111 + 800082: 20 61 ori r18, 0x10 ; 16 + 800084: 72 67 ori r23, 0x72 ; 114 + 800086: 75 6d ori r23, 0xD5 ; 213 + 800088: 65 6e ori r22, 0xE5 ; 229 + 80008a: 74 73 andi r23, 0x34 ; 52 + 80008c: 2e 0d add r18, r14 + 80008e: 0a 00 .word 0x000a ; ???? + 800090: 45 72 andi r20, 0x25 ; 37 + 800092: 72 6f ori r23, 0xF2 ; 242 + 800094: 72 20 and r7, r2 + 800096: 6e 75 andi r22, 0x5E ; 94 + 800098: 6d 62 ori r22, 0x2D ; 45 + 80009a: 65 72 andi r22, 0x25 ; 37 + 80009c: 20 70 andi r18, 0x00 ; 0 + 80009e: 61 72 andi r22, 0x21 ; 33 + 8000a0: 73 69 ori r23, 0x93 ; 147 + 8000a2: 6e 67 ori r22, 0x7E ; 126 + 8000a4: 2e 0d add r18, r14 + 8000a6: 0a 00 .word 0x000a ; ???? + 8000a8: 3e 20 and r3, r14 + 8000aa: 4e 65 ori r20, 0x5E ; 94 + 8000ac: 77 20 and r7, r7 + 8000ae: 63 6f ori r22, 0xF3 ; 243 + 8000b0: 6c 6f ori r22, 0xFC ; 252 + 8000b2: 72 3a cpi r23, 0xA2 ; 162 + 8000b4: 20 00 .word 0x0020 ; ???? + 8000b6: 3e 20 and r3, r14 + 8000b8: 4e 65 ori r20, 0x5E ; 94 + 8000ba: 77 20 and r7, r7 + 8000bc: 62 72 andi r22, 0x22 ; 34 + 8000be: 69 67 ori r22, 0x79 ; 121 + 8000c0: 68 74 andi r22, 0x48 ; 72 + 8000c2: 6e 65 ori r22, 0x5E ; 94 + 8000c4: 73 73 andi r23, 0x33 ; 51 + 8000c6: 3a 20 and r3, r10 + 8000c8: 00 3e cpi r16, 0xE0 ; 224 + 8000ca: 20 4e sbci r18, 0xE0 ; 224 + 8000cc: 65 77 andi r22, 0x75 ; 117 + 8000ce: 20 63 ori r18, 0x30 ; 48 + 8000d0: 6f 6c ori r22, 0xCF ; 207 + 8000d2: 6f 72 andi r22, 0x2F ; 47 + 8000d4: 20 6d ori r18, 0xD0 ; 208 + 8000d6: 6f 64 ori r22, 0x4F ; 79 + 8000d8: 65 3a cpi r22, 0xA5 ; 165 + 8000da: 20 00 .word 0x0020 ; ???? + 8000dc: 3e 20 and r3, r14 + 8000de: 53 65 ori r21, 0x53 ; 83 + 8000e0: 74 74 andi r23, 0x44 ; 68 + 8000e2: 69 6e ori r22, 0xE9 ; 233 + 8000e4: 67 73 andi r22, 0x37 ; 55 + 8000e6: 20 6c ori r18, 0xC0 ; 192 + 8000e8: 6f 61 ori r22, 0x1F ; 31 + 8000ea: 64 65 ori r22, 0x54 ; 84 + 8000ec: 64 3a cpi r22, 0xA4 ; 164 + 8000ee: 20 00 .word 0x0020 ; ???? + 8000f0: 2c 20 and r2, r12 + ... + +Disassembly of section .bss: + +008000f4 <__bss_start>: + ... + +008000f5 : + ... + +00800115 : + ... + +00800116 : + ... + +00800117 : + ... + +00800118 : + ... + +00800119 : + ... + +0080011a : + ... + +0080011c

: + ... + +0080011e : + ... + +0080013e : + ... + +Disassembly of section .eeprom: + +00810000 : + ... + +00810001 : + ... + +00810002 : + ... + +00810003 : + ... + +Disassembly of section .comment: + +00000000 <.comment>: + 0: 47 43 sbci r20, 0x37 ; 55 + 2: 43 3a cpi r20, 0xA3 ; 163 + 4: 20 28 or r2, r0 + 6: 47 4e sbci r20, 0xE7 ; 231 + 8: 55 29 or r21, r5 + a: 20 37 cpi r18, 0x70 ; 112 + c: 2e 33 cpi r18, 0x3E ; 62 + e: 2e 30 cpi r18, 0x0E ; 14 + ... + +Disassembly of section .note.gnu.avr.deviceinfo: + +00000000 <.note.gnu.avr.deviceinfo>: + 0: 04 00 .word 0x0004 ; ???? + 2: 00 00 nop + 4: 2b 00 .word 0x002b ; ???? + 6: 00 00 nop + 8: 01 00 .word 0x0001 ; ???? + a: 00 00 nop + c: 41 56 subi r20, 0x61 ; 97 + e: 52 00 .word 0x0052 ; ???? + 10: 00 00 nop + 12: 00 00 nop + 14: 00 20 and r0, r0 + 16: 00 00 nop + 18: 60 00 .word 0x0060 ; ???? + 1a: 00 00 nop + 1c: 00 04 cpc r0, r0 + 1e: 00 00 nop + 20: 00 00 nop + 22: 00 00 nop + 24: 00 02 muls r16, r16 + 26: 00 00 nop + 28: 08 00 .word 0x0008 ; ???? + 2a: 00 00 nop + 2c: 01 00 .word 0x0001 ; ???? + 2e: 00 00 nop + 30: 00 61 ori r16, 0x10 ; 16 + 32: 74 6d ori r23, 0xD4 ; 212 + 34: 65 67 ori r22, 0x75 ; 117 + 36: 61 38 cpi r22, 0x81 ; 129 + 38: 61 00 .word 0x0061 ; ???? + ... + +Disassembly of section .debug_info: + +00000000 <.debug_info>: + 0: 88 04 cpc r8, r8 + 2: 00 00 nop + 4: 02 00 .word 0x0002 ; ???? + 6: 00 00 nop + 8: 00 00 nop + a: 04 01 movw r0, r8 + ... + 14: 02 0f add r16, r18 + 16: 00 00 nop + 18: 00 01 movw r0, r0 + 1a: 08 03 fmul r16, r16 + 1c: 17 00 .word 0x0017 ; ???? + 1e: 00 00 nop + 20: 02 07 cpc r16, r18 + 22: 04 14 cp r0, r4 + 24: 00 00 nop + 26: 00 05 cpc r16, r0 + 28: 1b 00 .word 0x001b ; ???? + 2a: 00 00 nop + 2c: ff 01 movw r30, r30 + 2e: 00 06 cpc r0, r16 + 30: 20 00 .word 0x0020 ; ???? + 32: 00 00 nop + 34: 00 00 nop + 36: 22 00 .word 0x0022 ; ???? + 38: 00 00 nop + 3a: 01 05 cpc r16, r1 + 3c: 03 00 .word 0x0003 ; ???? + 3e: 00 81 ld r16, Z + 40: 00 07 cpc r16, r16 + 42: 29 00 .word 0x0029 ; ???? + 44: 00 00 nop + 46: 00 00 nop + 48: 14 00 .word 0x0014 ; ???? + 4a: 00 00 nop + 4c: 01 05 cpc r16, r1 + 4e: 03 50 subi r16, 0x03 ; 3 + 50: 00 80 ld r0, Z + 52: 00 08 sbc r0, r0 + 54: 2f 00 .word 0x002f ; ???? + 56: 00 00 nop + 58: 00 00 nop + 5a: 14 00 .word 0x0014 ; ???? + 5c: 00 00 nop + 5e: 01 05 cpc r16, r1 + 60: 03 28 or r0, r3 + 62: 00 80 ld r0, Z + 64: 00 09 sbc r16, r0 + 66: 34 00 .word 0x0034 ; ???? + 68: 00 00 nop + 6a: 00 00 nop + 6c: 14 00 .word 0x0014 ; ???? + 6e: 00 00 nop + 70: 01 05 cpc r16, r1 + 72: 03 2f mov r16, r19 + 74: 00 80 ld r0, Z + 76: 00 0a sbc r0, r16 + 78: 39 00 .word 0x0039 ; ???? + 7a: 00 00 nop + 7c: 00 00 nop + 7e: 14 00 .word 0x0014 ; ???? + 80: 00 00 nop + 82: 01 05 cpc r16, r1 + 84: 03 2e mov r0, r19 + 86: 00 80 ld r0, Z + 88: 00 0b sbc r16, r16 + 8a: 3e 00 .word 0x003e ; ???? + 8c: 00 00 nop + 8e: 00 00 nop + 90: 14 00 .word 0x0014 ; ???? + 92: 00 00 nop + 94: 01 05 cpc r16, r1 + 96: 03 2d mov r16, r3 + 98: 00 80 ld r0, Z + 9a: 00 0c add r0, r0 + 9c: 43 00 .word 0x0043 ; ???? + 9e: 00 00 nop + a0: 00 00 nop + a2: 14 00 .word 0x0014 ; ???? + a4: 00 00 nop + a6: 01 05 cpc r16, r1 + a8: 03 5b subi r16, 0xB3 ; 179 + aa: 00 80 ld r0, Z + ac: 00 0d add r16, r0 + ae: 48 00 .word 0x0048 ; ???? + b0: 00 00 nop + b2: 00 00 nop + b4: 14 00 .word 0x0014 ; ???? + b6: 00 00 nop + b8: 01 05 cpc r16, r1 + ba: 03 5a subi r16, 0xA3 ; 163 + bc: 00 80 ld r0, Z + be: 00 0e add r0, r16 + c0: 4d 00 .word 0x004d ; ???? + c2: 00 00 nop + c4: 00 00 nop + c6: 14 00 .word 0x0014 ; ???? + c8: 00 00 nop + ca: 01 05 cpc r16, r1 + cc: 03 55 subi r16, 0x53 ; 83 + ce: 00 80 ld r0, Z + d0: 00 0f add r16, r16 + d2: 53 00 .word 0x0053 ; ???? + d4: 00 00 nop + d6: 00 00 nop + d8: 14 00 .word 0x0014 ; ???? + da: 00 00 nop + dc: 01 05 cpc r16, r1 + de: 03 59 subi r16, 0x93 ; 147 + e0: 00 80 ld r0, Z + e2: 00 10 cpse r0, r0 + e4: 59 00 .word 0x0059 ; ???? + e6: 00 00 nop + e8: 00 00 nop + ea: 14 00 .word 0x0014 ; ???? + ec: 00 00 nop + ee: 01 05 cpc r16, r1 + f0: 03 58 subi r16, 0x83 ; 131 + f2: 00 80 ld r0, Z + f4: 00 11 cpse r16, r0 + f6: 5e 00 .word 0x005e ; ???? + f8: 00 00 nop + fa: 00 00 nop + fc: 14 00 .word 0x0014 ; ???? + fe: 00 00 nop + 100: 01 05 cpc r16, r1 + 102: 03 53 subi r16, 0x33 ; 51 + 104: 00 80 ld r0, Z + 106: 00 12 cpse r0, r16 + 108: 64 00 .word 0x0064 ; ???? + 10a: 00 00 nop + 10c: 00 00 nop + 10e: 14 00 .word 0x0014 ; ???? + 110: 00 00 nop + 112: 01 05 cpc r16, r1 + 114: 03 52 subi r16, 0x23 ; 35 + 116: 00 80 ld r0, Z + 118: 00 13 cpse r16, r16 + 11a: 6a 00 .word 0x006a ; ???? + 11c: 00 00 nop + 11e: 00 00 nop + 120: 14 00 .word 0x0014 ; ???? + 122: 00 00 nop + 124: 01 05 cpc r16, r1 + 126: 03 59 subi r16, 0x93 ; 147 + 128: 00 80 ld r0, Z + 12a: 00 14 cp r0, r0 + 12c: 70 00 .word 0x0070 ; ???? + 12e: 00 00 nop + 130: 00 00 nop + 132: 14 00 .word 0x0014 ; ???? + 134: 00 00 nop + 136: 01 05 cpc r16, r1 + 138: 03 58 subi r16, 0x83 ; 131 + 13a: 00 80 ld r0, Z + 13c: 00 15 cp r16, r0 + 13e: 75 00 .word 0x0075 ; ???? + 140: 00 00 nop + 142: 00 00 nop + 144: 14 00 .word 0x0014 ; ???? + 146: 00 00 nop + 148: 01 05 cpc r16, r1 + 14a: 03 4f sbci r16, 0xF3 ; 243 + 14c: 00 80 ld r0, Z + 14e: 00 16 cp r0, r16 + 150: 7c 00 .word 0x007c ; ???? + 152: 00 00 nop + 154: 00 00 nop + 156: 14 00 .word 0x0014 ; ???? + 158: 00 00 nop + 15a: 01 05 cpc r16, r1 + 15c: 03 4e sbci r16, 0xE3 ; 227 + 15e: 00 80 ld r0, Z + 160: 00 17 cp r16, r16 + 162: 83 00 .word 0x0083 ; ???? + 164: 00 00 nop + 166: 00 00 nop + 168: 1b 00 .word 0x001b ; ???? + 16a: 00 00 nop + 16c: 01 05 cpc r16, r1 + 16e: 03 4c sbci r16, 0xC3 ; 195 + 170: 00 80 ld r0, Z + 172: 00 18 sub r0, r0 + 174: 89 00 .word 0x0089 ; ???? + 176: 00 00 nop + 178: 00 00 nop + 17a: 1b 00 .word 0x001b ; ???? + 17c: 00 00 nop + 17e: 01 05 cpc r16, r1 + 180: 03 4a sbci r16, 0xA3 ; 163 + 182: 00 80 ld r0, Z + 184: 00 19 sub r16, r0 + 186: 8f 00 .word 0x008f ; ???? + 188: 00 00 nop + 18a: 00 00 nop + 18c: 1b 00 .word 0x001b ; ???? + 18e: 00 00 nop + 190: 01 05 cpc r16, r1 + 192: 03 48 sbci r16, 0x83 ; 131 + 194: 00 80 ld r0, Z + 196: 00 1a sub r0, r16 + 198: 95 00 .word 0x0095 ; ???? + 19a: 00 00 nop + 19c: 00 00 nop + 19e: 1b 00 .word 0x001b ; ???? + 1a0: 00 00 nop + 1a2: 01 05 cpc r16, r1 + 1a4: 03 46 sbci r16, 0x63 ; 99 + 1a6: 00 80 ld r0, Z + 1a8: 00 1b sub r16, r16 + 1aa: 9a 00 .word 0x009a ; ???? + 1ac: 00 00 nop + 1ae: 00 00 nop + 1b0: 14 00 .word 0x0014 ; ???? + 1b2: 00 00 nop + 1b4: 01 05 cpc r16, r1 + 1b6: 03 59 subi r16, 0x93 ; 147 + 1b8: 00 80 ld r0, Z + 1ba: 00 1c adc r0, r0 + 1bc: a0 00 .word 0x00a0 ; ???? + 1be: 00 00 nop + 1c0: 00 00 nop + 1c2: 14 00 .word 0x0014 ; ???? + 1c4: 00 00 nop + 1c6: 01 05 cpc r16, r1 + 1c8: 03 58 subi r16, 0x83 ; 131 + 1ca: 00 80 ld r0, Z + 1cc: 00 1d adc r16, r0 + 1ce: a5 00 .word 0x00a5 ; ???? + 1d0: 00 00 nop + 1d2: 00 00 nop + 1d4: 14 00 .word 0x0014 ; ???? + 1d6: 00 00 nop + 1d8: 01 05 cpc r16, r1 + 1da: 03 45 sbci r16, 0x53 ; 83 + 1dc: 00 80 ld r0, Z + 1de: 00 1e adc r0, r16 + 1e0: ab 00 .word 0x00ab ; ???? + 1e2: 00 00 nop + 1e4: 00 00 nop + 1e6: 14 00 .word 0x0014 ; ???? + 1e8: 00 00 nop + 1ea: 01 05 cpc r16, r1 + 1ec: 03 44 sbci r16, 0x43 ; 67 + 1ee: 00 80 ld r0, Z + 1f0: 00 1f adc r16, r16 + 1f2: b1 00 .word 0x00b1 ; ???? + 1f4: 00 00 nop + 1f6: 00 00 nop + 1f8: 14 00 .word 0x0014 ; ???? + 1fa: 00 00 nop + 1fc: 01 05 cpc r16, r1 + 1fe: 03 43 sbci r16, 0x33 ; 51 + 200: 00 80 ld r0, Z + 202: 00 20 and r0, r0 + 204: b6 00 .word 0x00b6 ; ???? + 206: 00 00 nop + 208: 00 00 nop + 20a: 14 00 .word 0x0014 ; ???? + 20c: 00 00 nop + 20e: 01 05 cpc r16, r1 + 210: 03 42 sbci r16, 0x23 ; 35 + 212: 00 80 ld r0, Z + 214: 00 21 and r16, r0 + 216: bb 00 .word 0x00bb ; ???? + 218: 00 00 nop + 21a: 00 00 nop + 21c: 14 00 .word 0x0014 ; ???? + 21e: 00 00 nop + 220: 01 05 cpc r16, r1 + 222: 03 50 subi r16, 0x03 ; 3 + 224: 00 80 ld r0, Z + 226: 00 22 and r0, r16 + 228: c1 00 .word 0x00c1 ; ???? + 22a: 00 00 nop + 22c: 00 00 nop + 22e: 14 00 .word 0x0014 ; ???? + 230: 00 00 nop + 232: 01 05 cpc r16, r1 + 234: 03 2c mov r0, r3 + 236: 00 80 ld r0, Z + 238: 00 23 and r16, r16 + 23a: c5 00 .word 0x00c5 ; ???? + 23c: 00 00 nop + 23e: 00 00 nop + 240: 14 00 .word 0x0014 ; ???? + 242: 00 00 nop + 244: 01 05 cpc r16, r1 + 246: 03 2b or r16, r19 + 248: 00 80 ld r0, Z + 24a: 00 24 eor r0, r0 + 24c: cb 00 .word 0x00cb ; ???? + 24e: 00 00 nop + 250: 00 00 nop + 252: 14 00 .word 0x0014 ; ???? + 254: 00 00 nop + 256: 01 05 cpc r16, r1 + 258: 03 2a or r0, r19 + 25a: 00 80 ld r0, Z + 25c: 00 25 eor r16, r0 + 25e: d1 00 .word 0x00d1 ; ???? + 260: 00 00 nop + 262: 00 00 nop + 264: 14 00 .word 0x0014 ; ???? + 266: 00 00 nop + 268: 01 05 cpc r16, r1 + 26a: 03 40 sbci r16, 0x03 ; 3 + 26c: 00 80 ld r0, Z + 26e: 00 26 eor r0, r16 + 270: d7 00 .word 0x00d7 ; ???? + 272: 00 00 nop + 274: 00 00 nop + 276: 14 00 .word 0x0014 ; ???? + 278: 00 00 nop + 27a: 01 05 cpc r16, r1 + 27c: 03 40 sbci r16, 0x03 ; 3 + 27e: 00 80 ld r0, Z + 280: 00 27 eor r16, r16 + 282: dd 00 .word 0x00dd ; ???? + 284: 00 00 nop + 286: 00 00 nop + 288: 14 00 .word 0x0014 ; ???? + 28a: 00 00 nop + 28c: 01 05 cpc r16, r1 + 28e: 03 29 or r16, r3 + 290: 00 80 ld r0, Z + 292: 00 28 or r0, r0 + 294: e3 00 .word 0x00e3 ; ???? + 296: 00 00 nop + 298: 00 00 nop + 29a: 14 00 .word 0x0014 ; ???? + 29c: 00 00 nop + 29e: 01 05 cpc r16, r1 + 2a0: 03 20 and r0, r3 + 2a2: 00 80 ld r0, Z + 2a4: 00 29 or r16, r0 + 2a6: e8 00 .word 0x00e8 ; ???? + 2a8: 00 00 nop + 2aa: 00 00 nop + 2ac: 14 00 .word 0x0014 ; ???? + 2ae: 00 00 nop + 2b0: 01 05 cpc r16, r1 + 2b2: 03 56 subi r16, 0x63 ; 99 + 2b4: 00 80 ld r0, Z + 2b6: 00 2a or r0, r16 + 2b8: ed 00 .word 0x00ed ; ???? + 2ba: 00 00 nop + 2bc: 00 00 nop + 2be: 14 00 .word 0x0014 ; ???? + 2c0: 00 00 nop + 2c2: 01 05 cpc r16, r1 + 2c4: 03 21 and r16, r3 + 2c6: 00 80 ld r0, Z + 2c8: 00 2b or r16, r16 + 2ca: f2 00 .word 0x00f2 ; ???? + 2cc: 00 00 nop + 2ce: 00 00 nop + 2d0: 14 00 .word 0x0014 ; ???? + 2d2: 00 00 nop + 2d4: 01 05 cpc r16, r1 + 2d6: 03 23 and r16, r19 + 2d8: 00 80 ld r0, Z + 2da: 00 2c mov r0, r0 + 2dc: f7 00 .word 0x00f7 ; ???? + 2de: 00 00 nop + 2e0: 00 00 nop + 2e2: 14 00 .word 0x0014 ; ???? + 2e4: 00 00 nop + 2e6: 01 05 cpc r16, r1 + 2e8: 03 22 and r0, r19 + 2ea: 00 80 ld r0, Z + 2ec: 00 2d mov r16, r0 + 2ee: fc 00 .word 0x00fc ; ???? + 2f0: 00 00 nop + 2f2: 00 00 nop + 2f4: 14 00 .word 0x0014 ; ???? + 2f6: 00 00 nop + 2f8: 01 05 cpc r16, r1 + 2fa: 03 41 sbci r16, 0x13 ; 19 + 2fc: 00 80 ld r0, Z + 2fe: 00 2e mov r0, r16 + 300: 02 01 movw r0, r4 + 302: 00 00 nop + 304: 00 00 nop + 306: 14 00 .word 0x0014 ; ???? + 308: 00 00 nop + 30a: 01 05 cpc r16, r1 + 30c: 03 38 cpi r16, 0x83 ; 131 + 30e: 00 80 ld r0, Z + 310: 00 2f mov r16, r16 + 312: 08 01 movw r0, r16 + 314: 00 00 nop + 316: 00 00 nop + 318: 14 00 .word 0x0014 ; ???? + 31a: 00 00 nop + 31c: 01 05 cpc r16, r1 + 31e: 03 37 cpi r16, 0x73 ; 115 + 320: 00 80 ld r0, Z + 322: 00 30 cpi r16, 0x00 ; 0 + 324: 0d 01 movw r0, r26 + 326: 00 00 nop + 328: 00 00 nop + 32a: 14 00 .word 0x0014 ; ???? + 32c: 00 00 nop + 32e: 01 05 cpc r16, r1 + 330: 03 36 cpi r16, 0x63 ; 99 + 332: 00 80 ld r0, Z + 334: 00 31 cpi r16, 0x10 ; 16 + 336: 12 01 movw r2, r4 + 338: 00 00 nop + 33a: 00 00 nop + 33c: 14 00 .word 0x0014 ; ???? + 33e: 00 00 nop + 340: 01 05 cpc r16, r1 + 342: 03 35 cpi r16, 0x53 ; 83 + 344: 00 80 ld r0, Z + 346: 00 32 cpi r16, 0x20 ; 32 + 348: 18 01 movw r2, r16 + 34a: 00 00 nop + 34c: 00 00 nop + 34e: 14 00 .word 0x0014 ; ???? + 350: 00 00 nop + 352: 01 05 cpc r16, r1 + 354: 03 34 cpi r16, 0x43 ; 67 + 356: 00 80 ld r0, Z + 358: 00 33 cpi r16, 0x30 ; 48 + 35a: 1d 01 movw r2, r26 + 35c: 00 00 nop + 35e: 00 00 nop + 360: 14 00 .word 0x0014 ; ???? + 362: 00 00 nop + 364: 01 05 cpc r16, r1 + 366: 03 33 cpi r16, 0x33 ; 51 + 368: 00 80 ld r0, Z + 36a: 00 34 cpi r16, 0x40 ; 64 + 36c: 22 01 movw r4, r4 + 36e: 00 00 nop + 370: 00 00 nop + 372: 14 00 .word 0x0014 ; ???? + 374: 00 00 nop + 376: 01 05 cpc r16, r1 + 378: 03 32 cpi r16, 0x23 ; 35 + 37a: 00 80 ld r0, Z + 37c: 00 35 cpi r16, 0x50 ; 80 + 37e: 28 01 movw r4, r16 + 380: 00 00 nop + 382: 00 00 nop + 384: 14 00 .word 0x0014 ; ???? + 386: 00 00 nop + 388: 01 05 cpc r16, r1 + 38a: 03 31 cpi r16, 0x13 ; 19 + 38c: 00 80 ld r0, Z + 38e: 00 36 cpi r16, 0x60 ; 96 + 390: 2d 01 movw r4, r26 + 392: 00 00 nop + 394: 00 00 nop + 396: 14 00 .word 0x0014 ; ???? + 398: 00 00 nop + 39a: 01 05 cpc r16, r1 + 39c: 03 30 cpi r16, 0x03 ; 3 + 39e: 00 80 ld r0, Z + 3a0: 00 37 cpi r16, 0x70 ; 112 + 3a2: 32 01 movw r6, r4 + 3a4: 00 00 nop + 3a6: 00 00 nop + 3a8: 1b 00 .word 0x001b ; ???? + 3aa: 00 00 nop + 3ac: 01 05 cpc r16, r1 + 3ae: 03 3e cpi r16, 0xE3 ; 227 + 3b0: 00 80 ld r0, Z + 3b2: 00 38 cpi r16, 0x80 ; 128 + 3b4: 37 01 movw r6, r14 + 3b6: 00 00 nop + 3b8: 00 00 nop + 3ba: 14 00 .word 0x0014 ; ???? + 3bc: 00 00 nop + 3be: 01 05 cpc r16, r1 + 3c0: 03 3d cpi r16, 0xD3 ; 211 + 3c2: 00 80 ld r0, Z + 3c4: 00 39 cpi r16, 0x90 ; 144 + 3c6: 3c 01 movw r6, r24 + 3c8: 00 00 nop + 3ca: 00 00 nop + 3cc: 14 00 .word 0x0014 ; ???? + 3ce: 00 00 nop + 3d0: 01 05 cpc r16, r1 + 3d2: 03 3c cpi r16, 0xC3 ; 195 + 3d4: 00 80 ld r0, Z + 3d6: 00 3a cpi r16, 0xA0 ; 160 + 3d8: 41 01 movw r8, r2 + 3da: 00 00 nop + 3dc: 00 00 nop + 3de: 14 00 .word 0x0014 ; ???? + 3e0: 00 00 nop + 3e2: 01 05 cpc r16, r1 + 3e4: 03 5f subi r16, 0xF3 ; 243 + 3e6: 00 80 ld r0, Z + 3e8: 00 3b cpi r16, 0xB0 ; 176 + 3ea: 46 01 movw r8, r12 + 3ec: 00 00 nop + 3ee: 00 00 nop + 3f0: 1b 00 .word 0x001b ; ???? + 3f2: 00 00 nop + 3f4: 01 05 cpc r16, r1 + 3f6: 03 5d subi r16, 0xD3 ; 211 + 3f8: 00 80 ld r0, Z + 3fa: 00 3c cpi r16, 0xC0 ; 192 + 3fc: 49 01 movw r8, r18 + 3fe: 00 00 nop + 400: 00 00 nop + 402: 14 00 .word 0x0014 ; ???? + 404: 00 00 nop + 406: 01 05 cpc r16, r1 + 408: 03 55 subi r16, 0x53 ; 83 + 40a: 00 80 ld r0, Z + 40c: 00 3d cpi r16, 0xD0 ; 208 + 40e: 4f 01 movw r8, r30 + 410: 00 00 nop + 412: 00 00 nop + 414: 14 00 .word 0x0014 ; ???? + 416: 00 00 nop + 418: 01 05 cpc r16, r1 + 41a: 03 54 subi r16, 0x43 ; 67 + 41c: 00 80 ld r0, Z + 41e: 00 3e cpi r16, 0xE0 ; 224 + 420: 56 01 movw r10, r12 + 422: 00 00 nop + 424: 00 00 nop + 426: 14 00 .word 0x0014 ; ???? + 428: 00 00 nop + 42a: 01 05 cpc r16, r1 + 42c: 03 51 subi r16, 0x13 ; 19 + 42e: 00 80 ld r0, Z + 430: 00 3f cpi r16, 0xF0 ; 240 + 432: 5d 01 movw r10, r26 + 434: 00 00 nop + 436: 00 00 nop + 438: 14 00 .word 0x0014 ; ???? + 43a: 00 00 nop + 43c: 01 05 cpc r16, r1 + 43e: 03 57 subi r16, 0x73 ; 115 + 440: 00 80 ld r0, Z + 442: 00 40 sbci r16, 0x00 ; 0 + 444: 63 01 movw r12, r6 + 446: 00 00 nop + 448: 00 00 nop + 44a: 14 00 .word 0x0014 ; ???? + 44c: 00 00 nop + 44e: 01 05 cpc r16, r1 + 450: 03 50 subi r16, 0x03 ; 3 + 452: 00 80 ld r0, Z + 454: 00 41 sbci r16, 0x10 ; 16 + 456: 69 01 movw r12, r18 + 458: 00 00 nop + 45a: 00 00 nop + 45c: 14 00 .word 0x0014 ; ???? + 45e: 00 00 nop + 460: 01 05 cpc r16, r1 + 462: 03 27 eor r16, r19 + 464: 00 80 ld r0, Z + 466: 00 42 sbci r16, 0x20 ; 32 + 468: 6f 01 movw r12, r30 + 46a: 00 00 nop + 46c: 00 00 nop + 46e: 14 00 .word 0x0014 ; ???? + 470: 00 00 nop + 472: 01 05 cpc r16, r1 + 474: 03 26 eor r0, r19 + 476: 00 80 ld r0, Z + 478: 00 43 sbci r16, 0x30 ; 48 + 47a: 76 01 movw r14, r12 + 47c: 00 00 nop + 47e: 00 00 nop + 480: 1b 00 .word 0x001b ; ???? + 482: 00 00 nop + 484: 01 05 cpc r16, r1 + 486: 03 24 eor r0, r3 + 488: 00 80 ld r0, Z + ... + +Disassembly of section .debug_abbrev: + +00000000 <.debug_abbrev>: + 0: 01 11 cpse r16, r1 + 2: 01 25 eor r16, r1 + 4: 0e 10 cpse r0, r14 + 6: 06 00 .word 0x0006 ; ???? + 8: 00 02 muls r16, r16 + a: 24 00 .word 0x0024 ; ???? + c: 03 0e add r0, r19 + e: 0b 0b sbc r16, r27 + 10: 3e 0b sbc r19, r30 + 12: 00 00 nop + 14: 03 24 eor r0, r3 + 16: 00 03 mulsu r16, r16 + 18: 0e 0b sbc r16, r30 + 1a: 0b 3e cpi r16, 0xEB ; 235 + 1c: 0b 00 .word 0x000b ; ???? + 1e: 00 04 cpc r0, r0 + 20: 01 01 movw r0, r2 + 22: 49 13 cpse r20, r25 + 24: 00 00 nop + 26: 05 21 and r16, r5 + 28: 00 49 sbci r16, 0x90 ; 144 + 2a: 13 2f mov r17, r19 + 2c: 05 00 .word 0x0005 ; ???? + 2e: 00 06 cpc r0, r16 + 30: 34 00 .word 0x0034 ; ???? + 32: 03 0e add r0, r19 + 34: 3a 0b sbc r19, r26 + 36: 3b 0b sbc r19, r27 + 38: 49 13 cpse r20, r25 + 3a: 3f 0c add r3, r15 + 3c: 02 0a sbc r0, r18 + 3e: 00 00 nop + 40: 07 34 cpi r16, 0x47 ; 71 + 42: 00 03 mulsu r16, r16 + 44: 0e 3a cpi r16, 0xAE ; 174 + 46: 0b 3b cpi r16, 0xBB ; 187 + 48: 0b 49 sbci r16, 0x9B ; 155 + 4a: 13 3f cpi r17, 0xF3 ; 243 + 4c: 0c 02 muls r16, r28 + 4e: 0a 00 .word 0x000a ; ???? + 50: 00 08 sbc r0, r0 + 52: 34 00 .word 0x0034 ; ???? + 54: 03 0e add r0, r19 + 56: 3a 0b sbc r19, r26 + 58: 3b 0b sbc r19, r27 + 5a: 49 13 cpse r20, r25 + 5c: 3f 0c add r3, r15 + 5e: 02 0a sbc r0, r18 + 60: 00 00 nop + 62: 09 34 cpi r16, 0x49 ; 73 + 64: 00 03 mulsu r16, r16 + 66: 0e 3a cpi r16, 0xAE ; 174 + 68: 0b 3b cpi r16, 0xBB ; 187 + 6a: 0b 49 sbci r16, 0x9B ; 155 + 6c: 13 3f cpi r17, 0xF3 ; 243 + 6e: 0c 02 muls r16, r28 + 70: 0a 00 .word 0x000a ; ???? + 72: 00 0a sbc r0, r16 + 74: 34 00 .word 0x0034 ; ???? + 76: 03 0e add r0, r19 + 78: 3a 0b sbc r19, r26 + 7a: 3b 0b sbc r19, r27 + 7c: 49 13 cpse r20, r25 + 7e: 3f 0c add r3, r15 + 80: 02 0a sbc r0, r18 + 82: 00 00 nop + 84: 0b 34 cpi r16, 0x4B ; 75 + 86: 00 03 mulsu r16, r16 + 88: 0e 3a cpi r16, 0xAE ; 174 + 8a: 0b 3b cpi r16, 0xBB ; 187 + 8c: 0b 49 sbci r16, 0x9B ; 155 + 8e: 13 3f cpi r17, 0xF3 ; 243 + 90: 0c 02 muls r16, r28 + 92: 0a 00 .word 0x000a ; ???? + 94: 00 0c add r0, r0 + 96: 34 00 .word 0x0034 ; ???? + 98: 03 0e add r0, r19 + 9a: 3a 0b sbc r19, r26 + 9c: 3b 0b sbc r19, r27 + 9e: 49 13 cpse r20, r25 + a0: 3f 0c add r3, r15 + a2: 02 0a sbc r0, r18 + a4: 00 00 nop + a6: 0d 34 cpi r16, 0x4D ; 77 + a8: 00 03 mulsu r16, r16 + aa: 0e 3a cpi r16, 0xAE ; 174 + ac: 0b 3b cpi r16, 0xBB ; 187 + ae: 0b 49 sbci r16, 0x9B ; 155 + b0: 13 3f cpi r17, 0xF3 ; 243 + b2: 0c 02 muls r16, r28 + b4: 0a 00 .word 0x000a ; ???? + b6: 00 0e add r0, r16 + b8: 34 00 .word 0x0034 ; ???? + ba: 03 0e add r0, r19 + bc: 3a 0b sbc r19, r26 + be: 3b 0b sbc r19, r27 + c0: 49 13 cpse r20, r25 + c2: 3f 0c add r3, r15 + c4: 02 0a sbc r0, r18 + c6: 00 00 nop + c8: 0f 34 cpi r16, 0x4F ; 79 + ca: 00 03 mulsu r16, r16 + cc: 0e 3a cpi r16, 0xAE ; 174 + ce: 0b 3b cpi r16, 0xBB ; 187 + d0: 0b 49 sbci r16, 0x9B ; 155 + d2: 13 3f cpi r17, 0xF3 ; 243 + d4: 0c 02 muls r16, r28 + d6: 0a 00 .word 0x000a ; ???? + d8: 00 10 cpse r0, r0 + da: 34 00 .word 0x0034 ; ???? + dc: 03 0e add r0, r19 + de: 3a 0b sbc r19, r26 + e0: 3b 0b sbc r19, r27 + e2: 49 13 cpse r20, r25 + e4: 3f 0c add r3, r15 + e6: 02 0a sbc r0, r18 + e8: 00 00 nop + ea: 11 34 cpi r17, 0x41 ; 65 + ec: 00 03 mulsu r16, r16 + ee: 0e 3a cpi r16, 0xAE ; 174 + f0: 0b 3b cpi r16, 0xBB ; 187 + f2: 0b 49 sbci r16, 0x9B ; 155 + f4: 13 3f cpi r17, 0xF3 ; 243 + f6: 0c 02 muls r16, r28 + f8: 0a 00 .word 0x000a ; ???? + fa: 00 12 cpse r0, r16 + fc: 34 00 .word 0x0034 ; ???? + fe: 03 0e add r0, r19 + 100: 3a 0b sbc r19, r26 + 102: 3b 0b sbc r19, r27 + 104: 49 13 cpse r20, r25 + 106: 3f 0c add r3, r15 + 108: 02 0a sbc r0, r18 + 10a: 00 00 nop + 10c: 13 34 cpi r17, 0x43 ; 67 + 10e: 00 03 mulsu r16, r16 + 110: 0e 3a cpi r16, 0xAE ; 174 + 112: 0b 3b cpi r16, 0xBB ; 187 + 114: 0b 49 sbci r16, 0x9B ; 155 + 116: 13 3f cpi r17, 0xF3 ; 243 + 118: 0c 02 muls r16, r28 + 11a: 0a 00 .word 0x000a ; ???? + 11c: 00 14 cp r0, r0 + 11e: 34 00 .word 0x0034 ; ???? + 120: 03 0e add r0, r19 + 122: 3a 0b sbc r19, r26 + 124: 3b 0b sbc r19, r27 + 126: 49 13 cpse r20, r25 + 128: 3f 0c add r3, r15 + 12a: 02 0a sbc r0, r18 + 12c: 00 00 nop + 12e: 15 34 cpi r17, 0x45 ; 69 + 130: 00 03 mulsu r16, r16 + 132: 0e 3a cpi r16, 0xAE ; 174 + 134: 0b 3b cpi r16, 0xBB ; 187 + 136: 0b 49 sbci r16, 0x9B ; 155 + 138: 13 3f cpi r17, 0xF3 ; 243 + 13a: 0c 02 muls r16, r28 + 13c: 0a 00 .word 0x000a ; ???? + 13e: 00 16 cp r0, r16 + 140: 34 00 .word 0x0034 ; ???? + 142: 03 0e add r0, r19 + 144: 3a 0b sbc r19, r26 + 146: 3b 0b sbc r19, r27 + 148: 49 13 cpse r20, r25 + 14a: 3f 0c add r3, r15 + 14c: 02 0a sbc r0, r18 + 14e: 00 00 nop + 150: 17 34 cpi r17, 0x47 ; 71 + 152: 00 03 mulsu r16, r16 + 154: 0e 3a cpi r16, 0xAE ; 174 + 156: 0b 3b cpi r16, 0xBB ; 187 + 158: 0b 49 sbci r16, 0x9B ; 155 + 15a: 13 3f cpi r17, 0xF3 ; 243 + 15c: 0c 02 muls r16, r28 + 15e: 0a 00 .word 0x000a ; ???? + 160: 00 18 sub r0, r0 + 162: 34 00 .word 0x0034 ; ???? + 164: 03 0e add r0, r19 + 166: 3a 0b sbc r19, r26 + 168: 3b 0b sbc r19, r27 + 16a: 49 13 cpse r20, r25 + 16c: 3f 0c add r3, r15 + 16e: 02 0a sbc r0, r18 + 170: 00 00 nop + 172: 19 34 cpi r17, 0x49 ; 73 + 174: 00 03 mulsu r16, r16 + 176: 0e 3a cpi r16, 0xAE ; 174 + 178: 0b 3b cpi r16, 0xBB ; 187 + 17a: 0b 49 sbci r16, 0x9B ; 155 + 17c: 13 3f cpi r17, 0xF3 ; 243 + 17e: 0c 02 muls r16, r28 + 180: 0a 00 .word 0x000a ; ???? + 182: 00 1a sub r0, r16 + 184: 34 00 .word 0x0034 ; ???? + 186: 03 0e add r0, r19 + 188: 3a 0b sbc r19, r26 + 18a: 3b 0b sbc r19, r27 + 18c: 49 13 cpse r20, r25 + 18e: 3f 0c add r3, r15 + 190: 02 0a sbc r0, r18 + 192: 00 00 nop + 194: 1b 34 cpi r17, 0x4B ; 75 + 196: 00 03 mulsu r16, r16 + 198: 0e 3a cpi r16, 0xAE ; 174 + 19a: 0b 3b cpi r16, 0xBB ; 187 + 19c: 0b 49 sbci r16, 0x9B ; 155 + 19e: 13 3f cpi r17, 0xF3 ; 243 + 1a0: 0c 02 muls r16, r28 + 1a2: 0a 00 .word 0x000a ; ???? + 1a4: 00 1c adc r0, r0 + 1a6: 34 00 .word 0x0034 ; ???? + 1a8: 03 0e add r0, r19 + 1aa: 3a 0b sbc r19, r26 + 1ac: 3b 0b sbc r19, r27 + 1ae: 49 13 cpse r20, r25 + 1b0: 3f 0c add r3, r15 + 1b2: 02 0a sbc r0, r18 + 1b4: 00 00 nop + 1b6: 1d 34 cpi r17, 0x4D ; 77 + 1b8: 00 03 mulsu r16, r16 + 1ba: 0e 3a cpi r16, 0xAE ; 174 + 1bc: 0b 3b cpi r16, 0xBB ; 187 + 1be: 0b 49 sbci r16, 0x9B ; 155 + 1c0: 13 3f cpi r17, 0xF3 ; 243 + 1c2: 0c 02 muls r16, r28 + 1c4: 0a 00 .word 0x000a ; ???? + 1c6: 00 1e adc r0, r16 + 1c8: 34 00 .word 0x0034 ; ???? + 1ca: 03 0e add r0, r19 + 1cc: 3a 0b sbc r19, r26 + 1ce: 3b 0b sbc r19, r27 + 1d0: 49 13 cpse r20, r25 + 1d2: 3f 0c add r3, r15 + 1d4: 02 0a sbc r0, r18 + 1d6: 00 00 nop + 1d8: 1f 34 cpi r17, 0x4F ; 79 + 1da: 00 03 mulsu r16, r16 + 1dc: 0e 3a cpi r16, 0xAE ; 174 + 1de: 0b 3b cpi r16, 0xBB ; 187 + 1e0: 0b 49 sbci r16, 0x9B ; 155 + 1e2: 13 3f cpi r17, 0xF3 ; 243 + 1e4: 0c 02 muls r16, r28 + 1e6: 0a 00 .word 0x000a ; ???? + 1e8: 00 20 and r0, r0 + 1ea: 34 00 .word 0x0034 ; ???? + 1ec: 03 0e add r0, r19 + 1ee: 3a 0b sbc r19, r26 + 1f0: 3b 0b sbc r19, r27 + 1f2: 49 13 cpse r20, r25 + 1f4: 3f 0c add r3, r15 + 1f6: 02 0a sbc r0, r18 + 1f8: 00 00 nop + 1fa: 21 34 cpi r18, 0x41 ; 65 + 1fc: 00 03 mulsu r16, r16 + 1fe: 0e 3a cpi r16, 0xAE ; 174 + 200: 0b 3b cpi r16, 0xBB ; 187 + 202: 0b 49 sbci r16, 0x9B ; 155 + 204: 13 3f cpi r17, 0xF3 ; 243 + 206: 0c 02 muls r16, r28 + 208: 0a 00 .word 0x000a ; ???? + 20a: 00 22 and r0, r16 + 20c: 34 00 .word 0x0034 ; ???? + 20e: 03 0e add r0, r19 + 210: 3a 0b sbc r19, r26 + 212: 3b 0b sbc r19, r27 + 214: 49 13 cpse r20, r25 + 216: 3f 0c add r3, r15 + 218: 02 0a sbc r0, r18 + 21a: 00 00 nop + 21c: 23 34 cpi r18, 0x43 ; 67 + 21e: 00 03 mulsu r16, r16 + 220: 0e 3a cpi r16, 0xAE ; 174 + 222: 0b 3b cpi r16, 0xBB ; 187 + 224: 0b 49 sbci r16, 0x9B ; 155 + 226: 13 3f cpi r17, 0xF3 ; 243 + 228: 0c 02 muls r16, r28 + 22a: 0a 00 .word 0x000a ; ???? + 22c: 00 24 eor r0, r0 + 22e: 34 00 .word 0x0034 ; ???? + 230: 03 0e add r0, r19 + 232: 3a 0b sbc r19, r26 + 234: 3b 0b sbc r19, r27 + 236: 49 13 cpse r20, r25 + 238: 3f 0c add r3, r15 + 23a: 02 0a sbc r0, r18 + 23c: 00 00 nop + 23e: 25 34 cpi r18, 0x45 ; 69 + 240: 00 03 mulsu r16, r16 + 242: 0e 3a cpi r16, 0xAE ; 174 + 244: 0b 3b cpi r16, 0xBB ; 187 + 246: 0b 49 sbci r16, 0x9B ; 155 + 248: 13 3f cpi r17, 0xF3 ; 243 + 24a: 0c 02 muls r16, r28 + 24c: 0a 00 .word 0x000a ; ???? + 24e: 00 26 eor r0, r16 + 250: 34 00 .word 0x0034 ; ???? + 252: 03 0e add r0, r19 + 254: 3a 0b sbc r19, r26 + 256: 3b 0b sbc r19, r27 + 258: 49 13 cpse r20, r25 + 25a: 3f 0c add r3, r15 + 25c: 02 0a sbc r0, r18 + 25e: 00 00 nop + 260: 27 34 cpi r18, 0x47 ; 71 + 262: 00 03 mulsu r16, r16 + 264: 0e 3a cpi r16, 0xAE ; 174 + 266: 0b 3b cpi r16, 0xBB ; 187 + 268: 0b 49 sbci r16, 0x9B ; 155 + 26a: 13 3f cpi r17, 0xF3 ; 243 + 26c: 0c 02 muls r16, r28 + 26e: 0a 00 .word 0x000a ; ???? + 270: 00 28 or r0, r0 + 272: 34 00 .word 0x0034 ; ???? + 274: 03 0e add r0, r19 + 276: 3a 0b sbc r19, r26 + 278: 3b 0b sbc r19, r27 + 27a: 49 13 cpse r20, r25 + 27c: 3f 0c add r3, r15 + 27e: 02 0a sbc r0, r18 + 280: 00 00 nop + 282: 29 34 cpi r18, 0x49 ; 73 + 284: 00 03 mulsu r16, r16 + 286: 0e 3a cpi r16, 0xAE ; 174 + 288: 0b 3b cpi r16, 0xBB ; 187 + 28a: 0b 49 sbci r16, 0x9B ; 155 + 28c: 13 3f cpi r17, 0xF3 ; 243 + 28e: 0c 02 muls r16, r28 + 290: 0a 00 .word 0x000a ; ???? + 292: 00 2a or r0, r16 + 294: 34 00 .word 0x0034 ; ???? + 296: 03 0e add r0, r19 + 298: 3a 0b sbc r19, r26 + 29a: 3b 0b sbc r19, r27 + 29c: 49 13 cpse r20, r25 + 29e: 3f 0c add r3, r15 + 2a0: 02 0a sbc r0, r18 + 2a2: 00 00 nop + 2a4: 2b 34 cpi r18, 0x4B ; 75 + 2a6: 00 03 mulsu r16, r16 + 2a8: 0e 3a cpi r16, 0xAE ; 174 + 2aa: 0b 3b cpi r16, 0xBB ; 187 + 2ac: 0b 49 sbci r16, 0x9B ; 155 + 2ae: 13 3f cpi r17, 0xF3 ; 243 + 2b0: 0c 02 muls r16, r28 + 2b2: 0a 00 .word 0x000a ; ???? + 2b4: 00 2c mov r0, r0 + 2b6: 34 00 .word 0x0034 ; ???? + 2b8: 03 0e add r0, r19 + 2ba: 3a 0b sbc r19, r26 + 2bc: 3b 0b sbc r19, r27 + 2be: 49 13 cpse r20, r25 + 2c0: 3f 0c add r3, r15 + 2c2: 02 0a sbc r0, r18 + 2c4: 00 00 nop + 2c6: 2d 34 cpi r18, 0x4D ; 77 + 2c8: 00 03 mulsu r16, r16 + 2ca: 0e 3a cpi r16, 0xAE ; 174 + 2cc: 0b 3b cpi r16, 0xBB ; 187 + 2ce: 0b 49 sbci r16, 0x9B ; 155 + 2d0: 13 3f cpi r17, 0xF3 ; 243 + 2d2: 0c 02 muls r16, r28 + 2d4: 0a 00 .word 0x000a ; ???? + 2d6: 00 2e mov r0, r16 + 2d8: 34 00 .word 0x0034 ; ???? + 2da: 03 0e add r0, r19 + 2dc: 3a 0b sbc r19, r26 + 2de: 3b 0b sbc r19, r27 + 2e0: 49 13 cpse r20, r25 + 2e2: 3f 0c add r3, r15 + 2e4: 02 0a sbc r0, r18 + 2e6: 00 00 nop + 2e8: 2f 34 cpi r18, 0x4F ; 79 + 2ea: 00 03 mulsu r16, r16 + 2ec: 0e 3a cpi r16, 0xAE ; 174 + 2ee: 0b 3b cpi r16, 0xBB ; 187 + 2f0: 0b 49 sbci r16, 0x9B ; 155 + 2f2: 13 3f cpi r17, 0xF3 ; 243 + 2f4: 0c 02 muls r16, r28 + 2f6: 0a 00 .word 0x000a ; ???? + 2f8: 00 30 cpi r16, 0x00 ; 0 + 2fa: 34 00 .word 0x0034 ; ???? + 2fc: 03 0e add r0, r19 + 2fe: 3a 0b sbc r19, r26 + 300: 3b 0b sbc r19, r27 + 302: 49 13 cpse r20, r25 + 304: 3f 0c add r3, r15 + 306: 02 0a sbc r0, r18 + 308: 00 00 nop + 30a: 31 34 cpi r19, 0x41 ; 65 + 30c: 00 03 mulsu r16, r16 + 30e: 0e 3a cpi r16, 0xAE ; 174 + 310: 0b 3b cpi r16, 0xBB ; 187 + 312: 0b 49 sbci r16, 0x9B ; 155 + 314: 13 3f cpi r17, 0xF3 ; 243 + 316: 0c 02 muls r16, r28 + 318: 0a 00 .word 0x000a ; ???? + 31a: 00 32 cpi r16, 0x20 ; 32 + 31c: 34 00 .word 0x0034 ; ???? + 31e: 03 0e add r0, r19 + 320: 3a 0b sbc r19, r26 + 322: 3b 0b sbc r19, r27 + 324: 49 13 cpse r20, r25 + 326: 3f 0c add r3, r15 + 328: 02 0a sbc r0, r18 + 32a: 00 00 nop + 32c: 33 34 cpi r19, 0x43 ; 67 + 32e: 00 03 mulsu r16, r16 + 330: 0e 3a cpi r16, 0xAE ; 174 + 332: 0b 3b cpi r16, 0xBB ; 187 + 334: 0b 49 sbci r16, 0x9B ; 155 + 336: 13 3f cpi r17, 0xF3 ; 243 + 338: 0c 02 muls r16, r28 + 33a: 0a 00 .word 0x000a ; ???? + 33c: 00 34 cpi r16, 0x40 ; 64 + 33e: 34 00 .word 0x0034 ; ???? + 340: 03 0e add r0, r19 + 342: 3a 0b sbc r19, r26 + 344: 3b 0b sbc r19, r27 + 346: 49 13 cpse r20, r25 + 348: 3f 0c add r3, r15 + 34a: 02 0a sbc r0, r18 + 34c: 00 00 nop + 34e: 35 34 cpi r19, 0x45 ; 69 + 350: 00 03 mulsu r16, r16 + 352: 0e 3a cpi r16, 0xAE ; 174 + 354: 0b 3b cpi r16, 0xBB ; 187 + 356: 0b 49 sbci r16, 0x9B ; 155 + 358: 13 3f cpi r17, 0xF3 ; 243 + 35a: 0c 02 muls r16, r28 + 35c: 0a 00 .word 0x000a ; ???? + 35e: 00 36 cpi r16, 0x60 ; 96 + 360: 34 00 .word 0x0034 ; ???? + 362: 03 0e add r0, r19 + 364: 3a 0b sbc r19, r26 + 366: 3b 0b sbc r19, r27 + 368: 49 13 cpse r20, r25 + 36a: 3f 0c add r3, r15 + 36c: 02 0a sbc r0, r18 + 36e: 00 00 nop + 370: 37 34 cpi r19, 0x47 ; 71 + 372: 00 03 mulsu r16, r16 + 374: 0e 3a cpi r16, 0xAE ; 174 + 376: 0b 3b cpi r16, 0xBB ; 187 + 378: 0b 49 sbci r16, 0x9B ; 155 + 37a: 13 3f cpi r17, 0xF3 ; 243 + 37c: 0c 02 muls r16, r28 + 37e: 0a 00 .word 0x000a ; ???? + 380: 00 38 cpi r16, 0x80 ; 128 + 382: 34 00 .word 0x0034 ; ???? + 384: 03 0e add r0, r19 + 386: 3a 0b sbc r19, r26 + 388: 3b 0b sbc r19, r27 + 38a: 49 13 cpse r20, r25 + 38c: 3f 0c add r3, r15 + 38e: 02 0a sbc r0, r18 + 390: 00 00 nop + 392: 39 34 cpi r19, 0x49 ; 73 + 394: 00 03 mulsu r16, r16 + 396: 0e 3a cpi r16, 0xAE ; 174 + 398: 0b 3b cpi r16, 0xBB ; 187 + 39a: 0b 49 sbci r16, 0x9B ; 155 + 39c: 13 3f cpi r17, 0xF3 ; 243 + 39e: 0c 02 muls r16, r28 + 3a0: 0a 00 .word 0x000a ; ???? + 3a2: 00 3a cpi r16, 0xA0 ; 160 + 3a4: 34 00 .word 0x0034 ; ???? + 3a6: 03 0e add r0, r19 + 3a8: 3a 0b sbc r19, r26 + 3aa: 3b 0b sbc r19, r27 + 3ac: 49 13 cpse r20, r25 + 3ae: 3f 0c add r3, r15 + 3b0: 02 0a sbc r0, r18 + 3b2: 00 00 nop + 3b4: 3b 34 cpi r19, 0x4B ; 75 + 3b6: 00 03 mulsu r16, r16 + 3b8: 0e 3a cpi r16, 0xAE ; 174 + 3ba: 0b 3b cpi r16, 0xBB ; 187 + 3bc: 0b 49 sbci r16, 0x9B ; 155 + 3be: 13 3f cpi r17, 0xF3 ; 243 + 3c0: 0c 02 muls r16, r28 + 3c2: 0a 00 .word 0x000a ; ???? + 3c4: 00 3c cpi r16, 0xC0 ; 192 + 3c6: 34 00 .word 0x0034 ; ???? + 3c8: 03 0e add r0, r19 + 3ca: 3a 0b sbc r19, r26 + 3cc: 3b 0b sbc r19, r27 + 3ce: 49 13 cpse r20, r25 + 3d0: 3f 0c add r3, r15 + 3d2: 02 0a sbc r0, r18 + 3d4: 00 00 nop + 3d6: 3d 34 cpi r19, 0x4D ; 77 + 3d8: 00 03 mulsu r16, r16 + 3da: 0e 3a cpi r16, 0xAE ; 174 + 3dc: 0b 3b cpi r16, 0xBB ; 187 + 3de: 0b 49 sbci r16, 0x9B ; 155 + 3e0: 13 3f cpi r17, 0xF3 ; 243 + 3e2: 0c 02 muls r16, r28 + 3e4: 0a 00 .word 0x000a ; ???? + 3e6: 00 3e cpi r16, 0xE0 ; 224 + 3e8: 34 00 .word 0x0034 ; ???? + 3ea: 03 0e add r0, r19 + 3ec: 3a 0b sbc r19, r26 + 3ee: 3b 0b sbc r19, r27 + 3f0: 49 13 cpse r20, r25 + 3f2: 3f 0c add r3, r15 + 3f4: 02 0a sbc r0, r18 + 3f6: 00 00 nop + 3f8: 3f 34 cpi r19, 0x4F ; 79 + 3fa: 00 03 mulsu r16, r16 + 3fc: 0e 3a cpi r16, 0xAE ; 174 + 3fe: 0b 3b cpi r16, 0xBB ; 187 + 400: 0b 49 sbci r16, 0x9B ; 155 + 402: 13 3f cpi r17, 0xF3 ; 243 + 404: 0c 02 muls r16, r28 + 406: 0a 00 .word 0x000a ; ???? + 408: 00 40 sbci r16, 0x00 ; 0 + 40a: 34 00 .word 0x0034 ; ???? + 40c: 03 0e add r0, r19 + 40e: 3a 0b sbc r19, r26 + 410: 3b 0b sbc r19, r27 + 412: 49 13 cpse r20, r25 + 414: 3f 0c add r3, r15 + 416: 02 0a sbc r0, r18 + 418: 00 00 nop + 41a: 41 34 cpi r20, 0x41 ; 65 + 41c: 00 03 mulsu r16, r16 + 41e: 0e 3a cpi r16, 0xAE ; 174 + 420: 0b 3b cpi r16, 0xBB ; 187 + 422: 0b 49 sbci r16, 0x9B ; 155 + 424: 13 3f cpi r17, 0xF3 ; 243 + 426: 0c 02 muls r16, r28 + 428: 0a 00 .word 0x000a ; ???? + 42a: 00 42 sbci r16, 0x20 ; 32 + 42c: 34 00 .word 0x0034 ; ???? + 42e: 03 0e add r0, r19 + 430: 3a 0b sbc r19, r26 + 432: 3b 0b sbc r19, r27 + 434: 49 13 cpse r20, r25 + 436: 3f 0c add r3, r15 + 438: 02 0a sbc r0, r18 + 43a: 00 00 nop + 43c: 43 34 cpi r20, 0x43 ; 67 + 43e: 00 03 mulsu r16, r16 + 440: 0e 3a cpi r16, 0xAE ; 174 + 442: 0b 3b cpi r16, 0xBB ; 187 + 444: 0b 49 sbci r16, 0x9B ; 155 + 446: 13 3f cpi r17, 0xF3 ; 243 + 448: 0c 02 muls r16, r28 + 44a: 0a 00 .word 0x000a ; ???? + ... + +Disassembly of section .debug_line: + +00000000 <.debug_line>: + 0: 16 00 .word 0x0016 ; ???? + 2: 00 00 nop + 4: 02 00 .word 0x0002 ; ???? + 6: 10 00 .word 0x0010 ; ???? + 8: 00 00 nop + a: 02 01 movw r0, r4 + c: fb 0e add r15, r27 + e: 0a 00 .word 0x000a ; ???? + 10: 01 01 movw r0, r2 + 12: 01 01 movw r0, r2 + 14: 00 00 nop + 16: 00 01 movw r0, r0 + ... + +Disassembly of section .debug_str: + +00000000 <.debug_str>: + 0: 61 76 andi r22, 0x61 ; 97 + 2: 72 2d mov r23, r2 + 4: 6c 69 ori r22, 0x9C ; 156 + 6: 62 63 ori r22, 0x32 ; 50 + 8: 20 32 cpi r18, 0x20 ; 32 + a: 2e 30 cpi r18, 0x0E ; 14 + c: 2e 30 cpi r18, 0x0E ; 14 + e: 00 75 andi r16, 0x50 ; 80 + 10: 69 6e ori r22, 0xE9 ; 233 + 12: 74 38 cpi r23, 0x84 ; 132 + 14: 5f 74 andi r21, 0x4F ; 79 + 16: 00 75 andi r16, 0x50 ; 80 + 18: 69 6e ori r22, 0xE9 ; 233 + 1a: 74 31 cpi r23, 0x14 ; 20 + 1c: 36 5f subi r19, 0xF6 ; 246 + 1e: 74 00 .word 0x0074 ; ???? + 20: 5f 5f subi r21, 0xFF ; 255 + 22: 65 65 ori r22, 0x55 ; 85 + 24: 70 72 andi r23, 0x20 ; 32 + 26: 6f 6d ori r22, 0xDF ; 223 + 28: 00 53 subi r16, 0x30 ; 48 + 2a: 46 49 sbci r20, 0x96 ; 150 + 2c: 4f 52 subi r20, 0x2F ; 47 + 2e: 00 41 sbci r16, 0x10 ; 16 + 30: 43 53 subi r20, 0x33 ; 51 + 32: 52 00 .word 0x0052 ; ???? + 34: 53 50 subi r21, 0x03 ; 3 + 36: 44 52 subi r20, 0x24 ; 36 + 38: 00 53 subi r16, 0x30 ; 48 + 3a: 50 53 subi r21, 0x30 ; 48 + 3c: 52 00 .word 0x0052 ; ???? + 3e: 53 50 subi r21, 0x03 ; 3 + 40: 43 52 subi r20, 0x23 ; 35 + 42: 00 47 sbci r16, 0x70 ; 112 + 44: 49 43 sbci r20, 0x39 ; 57 + 46: 52 00 .word 0x0052 ; ???? + 48: 47 49 sbci r20, 0x97 ; 151 + 4a: 46 52 subi r20, 0x26 ; 38 + 4c: 00 4d sbci r16, 0xD0 ; 208 + 4e: 43 55 subi r20, 0x53 ; 83 + 50: 43 52 subi r20, 0x23 ; 35 + 52: 00 54 subi r16, 0x40 ; 64 + 54: 49 4d sbci r20, 0xD9 ; 217 + 56: 53 4b sbci r21, 0xB3 ; 179 + 58: 00 54 subi r16, 0x40 ; 64 + 5a: 49 46 sbci r20, 0x69 ; 105 + 5c: 52 00 .word 0x0052 ; ???? + 5e: 54 43 sbci r21, 0x34 ; 52 + 60: 43 52 subi r20, 0x23 ; 35 + 62: 30 00 .word 0x0030 ; ???? + 64: 54 43 sbci r21, 0x34 ; 52 + 66: 4e 54 subi r20, 0x4E ; 78 + 68: 30 00 .word 0x0030 ; ???? + 6a: 54 49 sbci r21, 0x94 ; 148 + 6c: 4d 53 subi r20, 0x3D ; 61 + 6e: 4b 00 .word 0x004b ; ???? + 70: 54 49 sbci r21, 0x94 ; 148 + 72: 46 52 subi r20, 0x26 ; 38 + 74: 00 54 subi r16, 0x40 ; 64 + 76: 43 43 sbci r20, 0x33 ; 51 + 78: 52 31 cpi r21, 0x12 ; 18 + 7a: 41 00 .word 0x0041 ; ???? + 7c: 54 43 sbci r21, 0x34 ; 52 + 7e: 43 52 subi r20, 0x23 ; 35 + 80: 31 42 sbci r19, 0x21 ; 33 + 82: 00 54 subi r16, 0x40 ; 64 + 84: 43 4e sbci r20, 0xE3 ; 227 + 86: 54 31 cpi r21, 0x14 ; 20 + 88: 00 4f sbci r16, 0xF0 ; 240 + 8a: 43 52 subi r20, 0x23 ; 35 + 8c: 31 41 sbci r19, 0x11 ; 17 + 8e: 00 4f sbci r16, 0xF0 ; 240 + 90: 43 52 subi r20, 0x23 ; 35 + 92: 31 42 sbci r19, 0x21 ; 33 + 94: 00 49 sbci r16, 0x90 ; 144 + 96: 43 52 subi r20, 0x23 ; 35 + 98: 31 00 .word 0x0031 ; ???? + 9a: 54 49 sbci r21, 0x94 ; 148 + 9c: 4d 53 subi r20, 0x3D ; 61 + 9e: 4b 00 .word 0x004b ; ???? + a0: 54 49 sbci r21, 0x94 ; 148 + a2: 46 52 subi r20, 0x26 ; 38 + a4: 00 54 subi r16, 0x40 ; 64 + a6: 43 43 sbci r20, 0x33 ; 51 + a8: 52 32 cpi r21, 0x22 ; 34 + aa: 00 54 subi r16, 0x40 ; 64 + ac: 43 4e sbci r20, 0xE3 ; 227 + ae: 54 32 cpi r21, 0x24 ; 36 + b0: 00 4f sbci r16, 0xF0 ; 240 + b2: 43 52 subi r20, 0x23 ; 35 + b4: 32 00 .word 0x0032 ; ???? + b6: 41 53 subi r20, 0x31 ; 49 + b8: 53 52 subi r21, 0x23 ; 35 + ba: 00 53 subi r16, 0x30 ; 48 + bc: 46 49 sbci r20, 0x96 ; 150 + be: 4f 52 subi r20, 0x2F ; 47 + c0: 00 55 subi r16, 0x50 ; 80 + c2: 44 52 subi r20, 0x24 ; 36 + c4: 00 55 subi r16, 0x50 ; 80 + c6: 43 53 subi r20, 0x33 ; 51 + c8: 52 41 sbci r21, 0x12 ; 18 + ca: 00 55 subi r16, 0x50 ; 80 + cc: 43 53 subi r20, 0x33 ; 51 + ce: 52 42 sbci r21, 0x22 ; 34 + d0: 00 55 subi r16, 0x50 ; 80 + d2: 43 53 subi r20, 0x33 ; 51 + d4: 52 43 sbci r21, 0x32 ; 50 + d6: 00 55 subi r16, 0x50 ; 80 + d8: 42 52 subi r20, 0x22 ; 34 + da: 52 48 sbci r21, 0x82 ; 130 + dc: 00 55 subi r16, 0x50 ; 80 + de: 42 52 subi r20, 0x22 ; 34 + e0: 52 4c sbci r21, 0xC2 ; 194 + e2: 00 54 subi r16, 0x40 ; 64 + e4: 57 42 sbci r21, 0x27 ; 39 + e6: 52 00 .word 0x0052 ; ???? + e8: 54 57 subi r21, 0x74 ; 116 + ea: 43 52 subi r20, 0x23 ; 35 + ec: 00 54 subi r16, 0x40 ; 64 + ee: 57 53 subi r21, 0x37 ; 55 + f0: 52 00 .word 0x0052 ; ???? + f2: 54 57 subi r21, 0x74 ; 116 + f4: 44 52 subi r20, 0x24 ; 36 + f6: 00 54 subi r16, 0x40 ; 64 + f8: 57 41 sbci r21, 0x17 ; 23 + fa: 52 00 .word 0x0052 ; ???? + fc: 57 44 sbci r21, 0x47 ; 71 + fe: 54 43 sbci r21, 0x34 ; 52 + 100: 52 00 .word 0x0052 ; ???? + 102: 50 4f sbci r21, 0xF0 ; 240 + 104: 52 54 subi r21, 0x42 ; 66 + 106: 42 00 .word 0x0042 ; ???? + 108: 44 44 sbci r20, 0x44 ; 68 + 10a: 52 42 sbci r21, 0x22 ; 34 + 10c: 00 50 subi r16, 0x00 ; 0 + 10e: 49 4e sbci r20, 0xE9 ; 233 + 110: 42 00 .word 0x0042 ; ???? + 112: 50 4f sbci r21, 0xF0 ; 240 + 114: 52 54 subi r21, 0x42 ; 66 + 116: 43 00 .word 0x0043 ; ???? + 118: 44 44 sbci r20, 0x44 ; 68 + 11a: 52 43 sbci r21, 0x32 ; 50 + 11c: 00 50 subi r16, 0x00 ; 0 + 11e: 49 4e sbci r20, 0xE9 ; 233 + 120: 43 00 .word 0x0043 ; ???? + 122: 50 4f sbci r21, 0xF0 ; 240 + 124: 52 54 subi r21, 0x42 ; 66 + 126: 44 00 .word 0x0044 ; ???? + 128: 44 44 sbci r20, 0x44 ; 68 + 12a: 52 44 sbci r21, 0x42 ; 66 + 12c: 00 50 subi r16, 0x00 ; 0 + 12e: 49 4e sbci r20, 0xE9 ; 233 + 130: 44 00 .word 0x0044 ; ???? + 132: 45 45 sbci r20, 0x55 ; 85 + 134: 41 52 subi r20, 0x21 ; 33 + 136: 00 45 sbci r16, 0x50 ; 80 + 138: 45 44 sbci r20, 0x45 ; 69 + 13a: 52 00 .word 0x0052 ; ???? + 13c: 45 45 sbci r20, 0x55 ; 85 + 13e: 43 52 subi r20, 0x23 ; 35 + 140: 00 53 subi r16, 0x30 ; 48 + 142: 52 45 sbci r21, 0x52 ; 82 + 144: 47 00 .word 0x0047 ; ???? + 146: 53 50 subi r21, 0x03 ; 3 + 148: 00 4d sbci r16, 0xD0 ; 208 + 14a: 43 55 subi r20, 0x53 ; 83 + 14c: 43 52 subi r20, 0x23 ; 35 + 14e: 00 4d sbci r16, 0xD0 ; 208 + 150: 43 55 subi r20, 0x53 ; 83 + 152: 43 53 subi r20, 0x33 ; 51 + 154: 52 00 .word 0x0052 ; ???? + 156: 4f 53 subi r20, 0x3F ; 63 + 158: 43 43 sbci r20, 0x33 ; 51 + 15a: 41 4c sbci r20, 0xC1 ; 193 + 15c: 00 53 subi r16, 0x30 ; 48 + 15e: 50 4d sbci r21, 0xD0 ; 208 + 160: 43 52 subi r20, 0x23 ; 35 + 162: 00 53 subi r16, 0x30 ; 48 + 164: 46 49 sbci r20, 0x96 ; 150 + 166: 4f 52 subi r20, 0x2F ; 47 + 168: 00 41 sbci r16, 0x10 ; 16 + 16a: 44 4d sbci r20, 0xD4 ; 212 + 16c: 55 58 subi r21, 0x85 ; 133 + 16e: 00 41 sbci r16, 0x10 ; 16 + 170: 44 43 sbci r20, 0x34 ; 52 + 172: 53 52 subi r21, 0x23 ; 35 + 174: 41 00 .word 0x0041 ; ???? + 176: 41 44 sbci r20, 0x41 ; 65 + 178: 43 00 .word 0x0043 ; ???? diff --git a/firmware/build/firmware.elf b/firmware/build/firmware.elf new file mode 100755 index 0000000000000000000000000000000000000000..4a5971a72ffab0e2ecc920bf35f115c014e7a2a8 GIT binary patch literal 12804 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 literal 0 HcmV?d00001 diff --git a/firmware/obj/main.o b/firmware/obj/main.o new file mode 100644 index 0000000000000000000000000000000000000000..fd657182e6aed743d4bb6ef6fede3ba39115877a GIT binary patch literal 8292 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 Yk3%>HK2!Wv-JP%IV@mzg6{z$52U7*zWB>pF literal 0 HcmV?d00001 diff --git a/firmware/obj/spi.o b/firmware/obj/spi.o new file mode 100644 index 0000000000000000000000000000000000000000..e314ea19ac0288842d3fcbcc542d04b1da63cd47 GIT binary patch literal 820 zcma)4O-lk{5S~plr4AJxiZ0S24C2Ko2#h|+%mfK*>AbDFl+dc|zEF0lgWx5piVesLo|$>)-JRLHO#V>QG*Zw=r;#H1glHnU;T0q(MiFYg zJrrB-_2>5Mz18kUJCEJ#7y5{HD4R~F;)(3>*-Cs-8t}p1Ve0h*DGL3#nV>_# zG*p--5ZM_Vs+N@N&% z!8kIE0m%=@X(sCtY1a+My72g|<Qz7G&?!xQJ1Fqp5>t$c7ZRMeZQ2kaBG zC976RLQD7UbfZ*gL_By9YNfVRYO+T!ZE`4{v|U6zNVS_H611>>zuosXQ&0ZFx8L{s z^S(EEGqXE4a&Vtv7^K6XByD9x54IDXLUV6pU^jJA2lbZBl6l1}b@%NF27^Q(f_yL+ zoDG(Pi@|DeFQ^BnFBK)xa-3?>5>XXeRxg;vfT&ijj@O0?@1N>7YG;7Oe&bK>H|x>& z^n4Aq{*R1Wp<1kVmh1AKT$LB)vOFv2WL^rHkb`oMG>hhnS?n!7US{tC5Ggm@^lI?@ zliG#7Bjx#z7tSwUn$Ij=`|!8IchT!-ep$E{DZl;+RZfG~f;+)oV?n;#O_e)xO-9PJ zP8F_#@z-0rarO4q1JxBHFXj@oe$z0PX#J@r^UCJA+pFfvja9X3ba;3mwtMu@k*8xX zTF+bk`hY_mKIeAYsE1nA_Rw7*U>RG z*YMx{x3|2`VXg<0V``q)bYuV5R32;O_ve+K5ze&0Z^ z06PJmuYhj>5tXlje*|>@C+PdYa{$l(4%QKc_(vyT&gsOA?fF)Ugh-By{X#Uw!KRoP z8EptZcU*YRn+^SrH*G(9E&GEE2-smWwF*oD4EZy|*w7s>1n@;-SY|QoJ zFW_Ix_<38nsc9#53|TraQd!6L#N^Bjj$#+k-rhX>XP~#?#_{uDh3b5+dS)P``I+l{ z3?GOgpiAj}(Cjk~J`mD}l=i?AfcAV9TKgP@);@29W+s(}ElnxSZ^Byu@5P>3phI1Q z3%x_>C1~D@=g%w6KA(p4=SuU;7XW)+2Y;#RAo>c>^{=7zUYDWuUf)9VUK~FFZSdh| z_gAI=05f#Gru5I?zm(ntGkE52FoX32a2H;Zww(}&C~MUDT_9`b?VN8 z*0y|S)+Z}%`!-p8>#bBimvda7*Z$9lVUFL?4mH0Q+{XnKTJrY|AHk5SZ{kqDM{@^q zp5fl3z%G^ZnR6V~2F9UY^n=rN;@S~warkJ1pNXy2P( zB5m44L_~`SZI$mI5EWX6Z~g#52ZUTTeP_Jad9|qz&ilUeY zdPIIN(Mu$IDg_>yKb-E=`D-P!K_M|gb-P6fzW&#;srflt5j@3};3$_=@ z?g^6J8?>Mnb7WI^XsExfBRqQRV%ufylGde$cCmZ*8Y-1tDf0gDX9zxijtgF@p_A~h z9>+@MGtgIDek=4fmw(|{vnZ9j@vWZW@BM3!*M3D^Gb%@UnS`JDX}Y^F)Sb|#NY`Ug z{kpCniO7+d7!Fs2nS89LjE5Ed%t*~i=XQ)&>oH??dLleXvFMG89$YXDqE58;c!)Z{ zgHpc*k4XIid{gRA;0c%)^>@H`WqcC+K*qm-XQUngFS0&`5AXuUdp!ZahjE_>_@mVC zz@J_5RjCtT($Wh_GoApOsUv=*RLYo%Yo;-8k~SST=o98+B{WZee{kBkd4>1MR?>80%u@nFR literal 0 HcmV?d00001 diff --git a/firmware/src/defs.h b/firmware/src/defs.h new file mode 100644 index 0000000..1becfb5 --- /dev/null +++ b/firmware/src/defs.h @@ -0,0 +1,10 @@ +#if !defined(_DEFS_H_) +#define _DEFS_H_ + +#define F_CPU 12000000UL +#define LED_NUMBERS 9 +#define LED_DIR DDRD +#define LED_PORT PORTD +#define LED_PIN PD7 + +#endif diff --git a/firmware/src/light_ws2812.c b/firmware/src/light_ws2812.c new file mode 100644 index 0000000..9e0904f --- /dev/null +++ b/firmware/src/light_ws2812.c @@ -0,0 +1,243 @@ +/* +* light weight WS2812 lib V2.5b +* +* Controls WS2811/WS2812/WS2812B RGB-LEDs +* Author: Tim (cpldcpu@gmail.com) +* +* Jan 18, 2014 v2.0b Initial Version +* Nov 29, 2015 v2.3 Added SK6812RGBW support +* Nov 11, 2023 v2.5 Added support for ports that cannot be addressed with "out" +* Added LGT8F88A support +* May 1, 2024 v2.6 Added support for reduced core AVRs +* +* License: GNU GPL v2+ (see License.txt) +*/ + +#include "light_ws2812.h" +#include +#include +#include + +// Setleds for standard RGB +inline void ws2812_setleds(struct cRGB *ledarray, uint16_t leds) +{ + ws2812_setleds_pin(ledarray,leds, _BV(ws2812_pin)); +} + +inline void ws2812_setleds_pin(struct cRGB *ledarray, uint16_t leds, uint8_t pinmask) +{ + ws2812_sendarray_mask((uint8_t*)ledarray,leds+leds+leds,pinmask); + _delay_us(ws2812_resettime); +} + +// Setleds for SK6812RGBW +inline void ws2812_setleds_rgbw(struct cRGBW *ledarray, uint16_t leds) +{ + ws2812_sendarray_mask((uint8_t*)ledarray,leds<<2,_BV(ws2812_pin)); + _delay_us(ws2812_resettime); +} + +void ws2812_sendarray(uint8_t *data,uint16_t datlen) +{ + ws2812_sendarray_mask(data,datlen,_BV(ws2812_pin)); +} + +/* + This routine writes an array of bytes with RGB values to the Dataout pin + using the fast 800kHz clockless WS2811/2812 protocol. +*/ + +// Timing in ns +#define w_zeropulse 350 +#define w_onepulse 900 +#define w_totalperiod 1250 + +// Fixed cycles used by the inner loop +#if defined(__LGT8F__) // LGT8F88A +#define w_fixedlow 4 +#define w_fixedhigh 6 +#define w_fixedtotal 10 +#elif __AVR_ARCH__ == 100 // reduced core AVR +#define w_fixedlow 2 +#define w_fixedhigh 4 +#define w_fixedtotal 8 +#else // all others +#define w_fixedlow 3 +#define w_fixedhigh 6 +#define w_fixedtotal 10 +#endif + + +// Insert NOPs to match the timing, if possible +#define w_zerocycles (((F_CPU/1000)*w_zeropulse )/1000000) +#define w_onecycles (((F_CPU/1000)*w_onepulse +500000)/1000000) +#define w_totalcycles (((F_CPU/1000)*w_totalperiod +500000)/1000000) + +// w1 - nops between rising edge and falling edge - low +#define w1 (w_zerocycles-w_fixedlow) +// w2 nops between fe low and fe high +#define w2 (w_onecycles-w_fixedhigh-w1) +// w3 nops to complete loop +#define w3 (w_totalcycles-w_fixedtotal-w1-w2) + +#if w1>0 + #define w1_nops w1 +#else + #define w1_nops 0 +#endif + +// The only critical timing parameter is the minimum pulse length of the "0" +// Warn or throw error if this timing can not be met with current F_CPU settings. +#define w_lowtime ((w1_nops+w_fixedlow)*1000000)/(F_CPU/1000) +#if w_lowtime>550 + #error "Light_ws2812: Sorry, the clock speed is too low. Did you set F_CPU correctly?" +#elif w_lowtime>450 + #warning "Light_ws2812: The timing is critical and may only work on WS2812B, not on WS2812(S)." + #warning "Please consider a higher clockspeed, if possible" +#endif + +#if w2>0 +#define w2_nops w2 +#else +#define w2_nops 0 +#endif + +#if w3>0 +#define w3_nops w3 +#else +#define w3_nops 0 +#endif + +#define w_nop1 "nop \n\t" +#if (ws2812_interrupt_handling) +#define w_nop2 "brid .+0 \n\t" +#else +#define w_nop2 "brtc .+0 \n\t" +#endif +#define w_nop4 w_nop2 w_nop2 +#define w_nop8 w_nop4 w_nop4 +#define w_nop16 w_nop8 w_nop8 + +inline void ws2812_sendarray_mask(uint8_t *data,uint16_t datlen,uint8_t maskhi) +{ + // `maskhi` is 0x80 if P?7 is LED DATA + uint8_t curbyte,ctr,masklo; + uint8_t sreg_prev; +#if __AVR_ARCH__ != 100 + uint8_t *port = (uint8_t*) _SFR_MEM_ADDR(ws2812_PORTREG); +#endif + + ws2812_DDRREG |= maskhi; // Enable output + + // `masklo` and `maskhi` are written to PORT? to drive the DATA line low or + // high (rather than setting or clearing the bit in PORT?) + masklo =~maskhi&ws2812_PORTREG; + maskhi |= ws2812_PORTREG; + + sreg_prev=SREG; + +#if (ws2812_interrupt_handling) + cli(); +#endif + + while (datlen--) { + curbyte=*data++; + + __asm__ volatile( + " ldi %0,8 \n\t" +#if (ws2812_interrupt_handling) + " clt \n\t" +#endif + "loop%=: \n\t" +#if __AVR_ARCH__ == 100 + " out %2,%3 \n\t" // '1' [01] '0' [01] - re +#else + " st X,%3 \n\t" // '1' [02] '0' [02] - re +#endif + +#if (w1_nops&1) +w_nop1 +#endif +#if (w1_nops&2) +w_nop2 +#endif +#if (w1_nops&4) +w_nop4 +#endif +#if (w1_nops&8) +w_nop8 +#endif +#if (w1_nops&16) +w_nop16 +#endif +#if defined(__LGT8F__) + " bst %1,7 \n\t" // '1' [02] '0' [02] + " brts 1f \n\t" // '1' [04] '0' [03] + " st X,%4 \n\t" // '1' [--] '0' [04] - fe-low + "1: lsl %1 \n\t" // '1' [05] '0' [05] +#elif __AVR_ARCH__ == 100 + " sbrs %1,7 \n\t" // '1' [03] '0' [02] + " out %2,%4 \n\t" // '1' [--] '0' [03] - fe-low + " lsl %1 \n\t" // '1' [04] '0' [04] +#else + " sbrs %1,7 \n\t" // '1' [04] '0' [03] + " st X,%4 \n\t" // '1' [--] '0' [05] - fe-low + " lsl %1 \n\t" // '1' [05] '0' [06] +#endif +#if (w2_nops&1) + w_nop1 +#endif +#if (w2_nops&2) + w_nop2 +#endif +#if (w2_nops&4) + w_nop4 +#endif +#if (w2_nops&8) + w_nop8 +#endif +#if (w2_nops&16) + w_nop16 +#endif +#if __AVR_ARCH__ == 100 + " out %2,%4 \n\t" // '1' [+1] '0' [+1] - fe-high +#else + " brcc skipone%= \n\t" // '1' [+1] '0' [+2] - + " st X,%4 \n\t" // '1' [+3] '0' [--] - fe-high + "skipone%=: " // '1' [+3] '0' [+2] - +#endif +#if (w3_nops&1) +w_nop1 +#endif +#if (w3_nops&2) +w_nop2 +#endif +#if (w3_nops&4) +w_nop4 +#endif +#if (w3_nops&8) +w_nop8 +#endif +#if (w3_nops&16) +w_nop16 +#endif + + " dec %0 \n\t" // '1' [+4] '0' [+3] + " brne loop%=\n\t" // '1' [+5] '0' [+4] + : "=&d" (ctr) +#if __AVR_ARCH__ == 100 + : "r" (curbyte), "I" (_SFR_IO_ADDR(ws2812_PORTREG)), "r" (maskhi), "r" (masklo) +#else + : "r" (curbyte), "x" (port), "r" (maskhi), "r" (masklo) +#endif + + ); + } + + SREG=sreg_prev; + +#if (ws2812_interrupt_handling) + sei(); +#endif + +} \ No newline at end of file diff --git a/firmware/src/light_ws2812.h b/firmware/src/light_ws2812.h new file mode 100644 index 0000000..beb7a23 --- /dev/null +++ b/firmware/src/light_ws2812.h @@ -0,0 +1,116 @@ +/* + * light weight WS2812 lib include + * + * Version 2.3 - Nev 29th 2015 + * Author: Tim (cpldcpu@gmail.com) + * + * Please do not change this file! All configuration is handled in "ws2812_config.h" + * + * License: GNU GPL v2+ (see License.txt) + + + */ + +#ifndef LIGHT_WS2812_H_ +#define LIGHT_WS2812_H_ + +#include "ws2812_config.h" +#include +#include + +/////////////////////////////////////////////////////////////////////// +// Define Reset time in µs. +// +// This is the time the library spends waiting after writing the data. +// +// WS2813 needs 300 µs reset time +// WS2812 and clones only need 50 µs +// +/////////////////////////////////////////////////////////////////////// +#if !defined(ws2812_resettime) +#define ws2812_resettime 300 +#endif + +/////////////////////////////////////////////////////////////////////// +// Define I/O pin +/////////////////////////////////////////////////////////////////////// +#if !defined(ws2812_port) +#define ws2812_port B // Data port +#endif + +#if !defined(ws2812_pin) +#define ws2812_pin 0 // Data out pin +#endif + +/////////////////////////////////////////////////////////////////////// +// Define interrupt behaviour +// +// Set to 1 if you want the library to handle interrupt toggling +// (i.e. turning off interrupts when sending data and reverting back after). +// Set to 0 if you need to allow interrupts (can introduce flickering!). +// +/////////////////////////////////////////////////////////////////////// +#if !defined(ws2812_interrupt_handling) +#define ws2812_interrupt_handling 1 +#endif + +/* + * Structure of the LED array + * + * cRGB: RGB for WS2812S/B/C/D, SK6812, SK6812Mini, SK6812WWA, APA104, APA106 + * cRGBW: RGBW for SK6812RGBW + */ + +struct __attribute__ ((__packed__)) cRGB { uint8_t g; uint8_t r; uint8_t b; }; +struct __attribute__ ((__packed__)) cRGBW { uint8_t g; uint8_t r; uint8_t b; uint8_t w;}; + +#ifdef __cplusplus +extern "C" { +#endif + +/* User Interface + * + * Input: + * ledarray: An array of GRB data describing the LED colors + * number_of_leds: The number of LEDs to write + * pinmask (optional): Bitmask describing the output bin. e.g. _BV(PB0) + * + * The functions will perform the following actions: + * - Set the data-out pin as output + * - Send out the LED data + * - Wait 50µs to reset the LEDs + */ + +void ws2812_setleds (struct cRGB *ledarray, uint16_t number_of_leds); +void ws2812_setleds_pin (struct cRGB *ledarray, uint16_t number_of_leds,uint8_t pinmask); +void ws2812_setleds_rgbw(struct cRGBW *ledarray, uint16_t number_of_leds); + +/* + * Old interface / Internal functions + * + * The functions take a byte-array and send to the data output as WS2812 bitstream. + * The length is the number of bytes to send - three per LED. + */ + +void ws2812_sendarray (uint8_t *array,uint16_t length); +void ws2812_sendarray_mask(uint8_t *array,uint16_t length, uint8_t pinmask); + +#ifdef __cplusplus +} +#endif + + +/* + * Internal defines + */ +#if !defined(CONCAT) +#define CONCAT(a, b) a ## b +#endif + +#if !defined(CONCAT_EXP) +#define CONCAT_EXP(a, b) CONCAT(a, b) +#endif + +#define ws2812_PORTREG CONCAT_EXP(PORT,ws2812_port) +#define ws2812_DDRREG CONCAT_EXP(DDR,ws2812_port) + +#endif /* LIGHT_WS2812_H_ */ \ No newline at end of file diff --git a/firmware/src/main.c b/firmware/src/main.c new file mode 100644 index 0000000..4eba15f --- /dev/null +++ b/firmware/src/main.c @@ -0,0 +1,400 @@ +#include "main.h" + +uint8_t eeprom_led_r EEMEM = 0; +uint8_t eeprom_led_g EEMEM = 0; +uint8_t eeprom_led_b EEMEM = 0; +uint8_t eeprom_color_mode EEMEM = 0; + +DeviceState_t device = { + .current_color = {{ 0 }}, + .base_current_color = { 0, 0 ,0 }, + .current_mode = COLOR_MODE_STATIC, +}; + +volatile bool isChangedColorOrModeInterrupt = false; + +bool DeviceChangedColorOrModeCheck(void) { + if (isChangedColorOrModeInterrupt) { + isChangedColorOrModeInterrupt = false; + return true; + } + + return false; +} + +/** + * @brief Reads the received USART buffer and changes color and mode of device. + * Format: {R},{G},{B},{Brightness},{Color mode} + * + * @param rx_buffer + */ + +void DeviceChangeColorHandler(volatile char *rx_buffer) { + char *sep = ","; + char *token; + uint8_t new_rgb_color[3] = {0}; + uint8_t brightness = 255; + uint8_t i = 0; + ColorMode_t color_mode = COLOR_MODE_STATIC; + + token = strtok((char *)rx_buffer, sep); + + while (token != NULL) { + char *endptr; + + if (i >= 5) { + USART_SendStr("Invalid number of arguments.\r\n"); + i = 0; + return; + } + + if (i < 3) new_rgb_color[i] = strtoul(token, &endptr, 10); // get rgb colors + if (i == 3) brightness = strtoul(token, &endptr, 10); // get brigtness percentage + if (i == 4) color_mode = strtoul(token, &endptr, 10); // get color mode + + if (endptr == token && new_rgb_color[i] == 0) { + USART_SendStr("Error number parsing.\r\n"); + return; + } + + i++; + token = strtok(NULL, sep); + } + + i = 0; + + DeviceSetColor(new_rgb_color[0], new_rgb_color[1], new_rgb_color[2]); + DeviceUpdateColorSettings(); + DeviceSetBrightness(brightness); + DeviceSetColorMode(color_mode); + + USART_SendStr("> New color: "); + USART_SendInt16(device.current_color[0].r); + USART_SendChar(','); + USART_SendInt16(device.current_color[0].g); + USART_SendChar(','); + USART_SendInt16(device.current_color[0].b); + USART_SendStr("\r\n"); + USART_SendStr("> New brightness: "); + USART_SendInt16(brightness); + USART_SendStr("\r\n"); + USART_SendStr("> New color mode: "); + USART_SendInt16(color_mode); + USART_SendChar('\r'); + USART_SendChar('\n'); + + isChangedColorOrModeInterrupt = true; +} + +/** + * @brief Sets the brightness of all LEDs + * + * @param brightness from 0 to 255 + */ +void DeviceSetBrightness(uint8_t brightness) { + uint8_t i = 0; + + do { + device.current_color[i].r = (uint16_t)device.base_current_color.r * brightness / 255; + device.current_color[i].g = (uint16_t)device.base_current_color.g * brightness / 255; + device.current_color[i].b = (uint16_t)device.base_current_color.b * brightness / 255; + } while (++i <= LED_NUMBERS - 1); + + ws2812_setleds(device.current_color, LED_NUMBERS); +} + +void DeviceSetColor(uint8_t r, uint8_t g, uint8_t b) { + uint8_t i = 0; + + do { + device.current_color[i].r = r; + device.current_color[i].g = g; + device.current_color[i].b = b; + } while (++i <= LED_NUMBERS - 1); + + ws2812_setleds(device.current_color, LED_NUMBERS); +} + +void DeviceUpdateColorSettings(void) { + eeprom_update_byte(&eeprom_led_r, device.current_color[0].r); + eeprom_update_byte(&eeprom_led_g, device.current_color[0].g); + eeprom_update_byte(&eeprom_led_b, device.current_color[0].b); + device.base_current_color.r = device.current_color[0].r; + device.base_current_color.g = device.current_color[0].g; + device.base_current_color.b = device.current_color[0].b; +} + +void DeviceSetColorMode(ColorMode_t mode) { + device.current_mode = mode; + eeprom_update_byte(&eeprom_color_mode, mode); +} + +void DeviceLoadSettings() { + uint8_t i = 0; + + eeprom_busy_wait(); + + device.current_mode = eeprom_read_byte(&eeprom_color_mode); + + do { + device.current_color[i].r = eeprom_read_byte(&eeprom_led_r); + device.current_color[i].g = eeprom_read_byte(&eeprom_led_g); + device.current_color[i].b = eeprom_read_byte(&eeprom_led_b); + } while (++i < LED_NUMBERS); + + device.base_current_color.r = device.current_color[0].r; + device.base_current_color.g = device.current_color[0].g; + device.base_current_color.b = device.current_color[0].b; + + DeviceSetColor(device.current_color[0].r, device.current_color[0].g, device.current_color[0].b); + DeviceSetColorMode(device.current_mode); + + USART_SendStr("> Settings loaded: "); + USART_SendInt16(device.current_color[0].r); + USART_SendStr(", "); + USART_SendInt16(device.current_color[0].g); + USART_SendStr(", "); + USART_SendInt16(device.current_color[0].b); + USART_SendStr(", "); + USART_SendInt16(device.current_mode); + USART_SendStr("\r\n"); +} + +void DeviceBreathModeHahdler(void) { + int16_t brightness = 200; + + do { + if (DeviceChangedColorOrModeCheck()) return; + + DeviceSetBrightness(brightness); + + _delay_ms(20); + } while(--brightness >= 0); + + brightness = 0; + + for (uint8_t i = 0; i < 50; i++){ + if (DeviceChangedColorOrModeCheck()) return; + _delay_ms(10); + } + + do { + if (DeviceChangedColorOrModeCheck()) return; + + DeviceSetBrightness(brightness); + + _delay_ms(20); + } while (++brightness <= 200); + + for (uint8_t i = 0; i < 100; i++){ + if (DeviceChangedColorOrModeCheck()) return; + _delay_ms(10); + } +} + +void DevicePulseModeHandler(void) { + DeviceSetBrightness(200); + + for (uint8_t i = 0; i < 5; i++) { + if (DeviceChangedColorOrModeCheck()) return; + _delay_ms(10); + } + + for (int16_t b = 200; b >= 0; b--) { + if (DeviceChangedColorOrModeCheck()) return; + + DeviceSetBrightness((uint8_t)b); + + _delay_ms(1); + } + + DeviceSetBrightness(200); + + for (int16_t b = 200; b >= 0; b--) { + if (DeviceChangedColorOrModeCheck()) return; + + DeviceSetBrightness((uint8_t)b); + + _delay_ms(7); + } + + for (uint8_t i = 0; i < 30; i++) { + if (DeviceChangedColorOrModeCheck()) return; + _delay_ms(15); + } +} + +void DeviceDiscoModeHandler(void) { + static const struct { uint8_t r; uint8_t g; uint8_t b; } disco_colors[] = { + {255, 0, 0}, + {0, 255, 0}, + {0, 0, 255}, + {255, 255, 0}, + {0, 255, 255} + }; + + const uint8_t num_colors = sizeof(disco_colors) / sizeof(disco_colors[0]); + static uint8_t color_idx = 0; + + uint8_t start_r = disco_colors[color_idx].r; + uint8_t start_g = disco_colors[color_idx].g; + uint8_t start_b = disco_colors[color_idx].b; + + color_idx = (color_idx + 1) % num_colors; + + uint8_t target_r = disco_colors[color_idx].r; + uint8_t target_g = disco_colors[color_idx].g; + uint8_t target_b = disco_colors[color_idx].b; + + for (uint16_t step = 0; step <= 100; step++) { + if (DeviceChangedColorOrModeCheck()) return; + + uint8_t r = start_r + (int16_t)(target_r - start_r) * step / 100; + uint8_t g = start_g + (int16_t)(target_g - start_g) * step / 100; + uint8_t b = start_b + (int16_t)(target_b - start_b) * step / 100; + + DeviceSetColor(r, g, b); + _delay_ms(20); + } + + for (uint8_t d = 0; d < 50; d++) { + if (DeviceChangedColorOrModeCheck()) return; + _delay_ms(10); + } +} + +void set_pixel_hue(uint8_t index, uint8_t hue) { + uint8_t r, g, b; + uint8_t region = hue / 43; + uint8_t remainder = (hue % 43) * 6; + + uint8_t q = (uint16_t)255 * (255 - remainder) / 255; + uint8_t t = (uint16_t)255 * remainder / 255; + + switch (region) { + case 0: r = 255; g = t; b = 0; break; + case 1: r = q; g = 255; b = 0; break; + case 2: r = 0; g = 255; b = t; break; + case 3: r = 0; g = q; b = 255; break; + case 4: r = t; g = 0; b = 255; break; + default: r = 255; g = 0; b = q; break; + } + + device.current_color[index].r = r; + device.current_color[index].g = g; + device.current_color[index].b = b; +} + +void DeviceRainbowModeHandler(void) { + static uint8_t start_hue = 0; + + for (uint8_t i = 0; i < LED_NUMBERS; i++) { + uint8_t hue = start_hue + (i * (255 / LED_NUMBERS)); + set_pixel_hue(i, hue); + } + + ws2812_setleds(device.current_color, LED_NUMBERS); + + start_hue += 2; + + for (uint8_t d = 0; d < 3; d++) { + if (DeviceChangedColorOrModeCheck()) return; + _delay_ms(10); + } +} + +void DeviceStepperModeHandler(void) { + static uint8_t effect_step = 0; + + switch (effect_step) { + case 0: + DeviceSetColor(device.base_current_color.r, device.base_current_color.g, device.base_current_color.b); + DeviceSetBrightness(255); + for (uint16_t i = 0; i < 500; i++) { + if (DeviceChangedColorOrModeCheck()) return; + _delay_ms(10); + } + break; + + case 1: + for (uint8_t i = 0; i < 5; i++) { + DeviceBreathModeHahdler(); + } + break; + + case 2: + for (uint8_t i = 0; i < 5; i++) { + DevicePulseModeHandler(); + } + break; + + case 3: + for (uint8_t i = 0; i < 5; i++) { + DeviceDiscoModeHandler(); + } + break; + + case 4: + for (uint16_t i = 0; i < 255; i++) { + if (DeviceChangedColorOrModeCheck()) return; + DeviceRainbowModeHandler(); + _delay_ms(10); + } + break; + + default: + effect_step = 0; + return; + } + + effect_step++; + + if (effect_step > 4) { + effect_step = 0; + } +} + +void DeviceStaticModeHandler(void) { + _delay_ms(10); +} + +void System_Init() { + _delay_ms(1000); + + USART_Init(); + USART_SetReceiveHandler(&DeviceChangeColorHandler); + LED_DIR |= _BV(LED_PIN); + + DeviceLoadSettings(); + + sei(); +} + +int main(void) { + System_Init(); + + while (1) { + switch (device.current_mode) { + case COLOR_MODE_STATIC: + DeviceStaticModeHandler(); + break; + case COLOR_MODE_BREATH: + DeviceBreathModeHahdler(); + break; + case COLOR_MODE_PULSE: + DevicePulseModeHandler(); + break; + case COLOR_MODE_DISCO: + DeviceDiscoModeHandler(); + break; + case COLOR_MODE_RAINBOW: + DeviceRainbowModeHandler(); + break; + case COLOR_MODE_STEPPER: + DeviceStepperModeHandler(); + break; + default: + break; + } + } +} diff --git a/firmware/src/main.h b/firmware/src/main.h new file mode 100644 index 0000000..9f545af --- /dev/null +++ b/firmware/src/main.h @@ -0,0 +1,50 @@ +#if !defined(_MAIN_H) +#define _MAIN_H + +#include +#include +#include + +#include +#include +#include +#include +#include + +#include "defs.h" +#include "usart.h" +#include "spi.h" + +#include +#include +#include +#include "light_ws2812.h" + +typedef volatile enum { + COLOR_MODE_STATIC = 0x00, + COLOR_MODE_BREATH = 0x01, + COLOR_MODE_PULSE = 0x02, + COLOR_MODE_DISCO = 0x03, + COLOR_MODE_RAINBOW = 0x04, + COLOR_MODE_STEPPER = 0x05 +} ColorMode_t; + +typedef struct { + struct cRGB current_color[LED_NUMBERS]; + struct cRGB base_current_color; + ColorMode_t current_mode; +} DeviceState_t; + +bool DeviceChangedColorOrModeCheck(void); +void DeviceSetBrightness(uint8_t brightness); +void DeviceSetColor(uint8_t r, uint8_t g, uint8_t b); +void DeviceSetColorMode(ColorMode_t mode); +void DeviceUpdateColorSettings(void); +void DeviceStaticModeHandler(void); +void DeviceBreathModeHahdler(void); +void DevicePulseModeHandler(void); +void DeviceDiscoModeHandler(void); +void DeviceRainbowModeHandler(void); +void DeviceStepperModeHandler(void); + +#endif // _MAIN_H diff --git a/firmware/src/spi.c b/firmware/src/spi.c new file mode 100644 index 0000000..191914c --- /dev/null +++ b/firmware/src/spi.c @@ -0,0 +1,12 @@ +#include "spi.h" + +void SPI_Init(void) { + DDRB |= _BV(PB5) | _BV(PB3) | _BV(PB2); + SPSR |= _BV(SPI2X); + SPCR |= _BV(SPE) | _BV(MSTR); +} + +void SPI_SendByte(uint8_t byte) { + SPDR = byte; + loop_until_bit_is_set(SPSR, SPIF); +} \ No newline at end of file diff --git a/firmware/src/spi.h b/firmware/src/spi.h new file mode 100644 index 0000000..a2bafc1 --- /dev/null +++ b/firmware/src/spi.h @@ -0,0 +1,9 @@ +#if !defined(_SPI_H_) +#define _SPI_H_ + +#include + +void SPI_SendByte(uint8_t byte); +void SPI_Init(void); + +#endif \ No newline at end of file diff --git a/firmware/src/usart.c b/firmware/src/usart.c new file mode 100644 index 0000000..67117e8 --- /dev/null +++ b/firmware/src/usart.c @@ -0,0 +1,64 @@ +#include "usart.h" + +void (*EOT_Handler)(volatile char *rx_buffer) = NULL; + +volatile char rx_buffer[RX_BUFFER_SIZE]; +volatile uint8_t rx_buffer_idx = 0; +volatile bool rx_received_packet = false; + +ISR(USART_RXC_vect) { + char c = UDR; + + if (rx_buffer_idx >= RX_BUFFER_SIZE - 1) rx_buffer_idx = 0; + + rx_buffer[rx_buffer_idx++] = c; + + if (c == EOT || c == '\r' || c == '\n') { + rx_buffer[rx_buffer_idx] = '\0'; + rx_buffer_idx = 0; + if (EOT_Handler != NULL) (*EOT_Handler)(rx_buffer); + } +} + +void USART_SetReceiveHandler(void (*handler)(volatile char *rx_buffer)) { + EOT_Handler = handler; +} + +void USART_OnReceivePacketHandler(void) { + if (EOT_Handler != NULL && rx_received_packet) { + (*EOT_Handler)(rx_buffer); + rx_received_packet = false; + } +} + +void USART_Init(void) { + /** + * USART + * 8-bit char size, 1 stop bit, even parity, baud 9600 + */ + DDRD &= ~_BV(PD0); + DDRD |= _BV(PD1); + UCSRB |= _BV(RXEN) | _BV(TXEN) | _BV(RXCIE); + UCSRC = _BV(URSEL) | _BV(UCSZ0) | _BV(UCSZ1) | _BV(UPM1); + UBRRH = UBRRH_VALUE; + UBRRL = UBRRL_VALUE; +} + +void USART_SendChar(char c) { + loop_until_bit_is_set(UCSRA, UDRE); + UDR = c; +} + +void USART_SendStr(char *str) { + char c; + + while ((c = *str++) != '\0') { + USART_SendChar(c); + } +} + +void USART_SendInt16(int16_t num) { + char str[7]; + itoa(num, str, 10); + USART_SendStr(str); +} \ No newline at end of file diff --git a/firmware/src/usart.h b/firmware/src/usart.h new file mode 100644 index 0000000..768d901 --- /dev/null +++ b/firmware/src/usart.h @@ -0,0 +1,24 @@ +#if !defined(_USART_H_) +#define _USART_H_ + +#include "defs.h" + +#define BAUD 9600 +#define RX_BUFFER_SIZE 32 +#define EOT 0x04 + +#include +#include +#include +#include +#include + +void USART_Init(); +void USART_SendChar(char c); +void USART_SendStr(char *str); +void USART_SendInt16(int16_t num); +void USART_SetReceiveHandler(void (*handler)(volatile char *rx_buffer)); +void USART_OnReceivePacketHandler(void); + + +#endif // _USART_H_ \ No newline at end of file diff --git a/firmware/src/ws2812_config.h b/firmware/src/ws2812_config.h new file mode 100644 index 0000000..b42be7d --- /dev/null +++ b/firmware/src/ws2812_config.h @@ -0,0 +1,47 @@ +/* + * light_ws2812_config.h + * + * v2.4 - Nov 27, 2016 + * + * User Configuration file for the light_ws2812_lib + * + */ + + +#ifndef WS2812_CONFIG_H_ +#define WS2812_CONFIG_H_ + +/////////////////////////////////////////////////////////////////////// +// Define Reset time in µs. +// +// This is the time the library spends waiting after writing the data. +// +// WS2813 needs 300 µs reset time +// WS2812 and clones only need 50 µs +// +/////////////////////////////////////////////////////////////////////// + +#define ws2812_resettime 300 + +/////////////////////////////////////////////////////////////////////// +// Define I/O pin +/////////////////////////////////////////////////////////////////////// + + +#define ws2812_port D // Data port +#define ws2812_pin 7 // Data out pin + +/////////////////////////////////////////////////////////////////////// +// Define interrupt behaviour +// +// Set to 1 if you want the library to handle interrupt toggling +// (i.e. turning off interrupts when sending data and reverting back after). +// Set to 0 if you need to allow interrupts (can introduce flickering!). +// +/////////////////////////////////////////////////////////////////////// + +#define ws2812_interrupt_handling 1 + +#include "defs.h" + +#endif /* WS2812_CONFIG_H_ */ \ No newline at end of file diff --git a/firmware/src/ws2812b.c b/firmware/src/ws2812b.c new file mode 100644 index 0000000..2e67269 --- /dev/null +++ b/firmware/src/ws2812b.c @@ -0,0 +1,48 @@ +#include "ws2812b.h" +#include + +#define LEDS_COUNT 8 +#define PACKET_SIZE LEDS_COUNT * 24 + +void WS2812_SendRGB(uint8_t r, uint8_t g, uint8_t b) { + uint8_t packet[PACKET_SIZE] = {0}; + uint8_t i = 0, j = 0, k = 7; + uint8_t color = g; + + do { + if (j == 8) { + k = 7; + color = r; + } + + if (j == 16) { + k = 7; + color = b; + } + + if (j == 24) { + j = 7; + j = 0; + color = g; + } + + if ((color >> k) & 0x01) { + packet[i] = 0b110; + } else { + packet[i] = 0b100; + } + + j++; + k--; + } while (++i < PACKET_SIZE); + + i = 0; + + cli(); + + do { + SPI_SendByte(packet[i]); + } while (++i < PACKET_SIZE); + + sei(); +} \ No newline at end of file diff --git a/firmware/src/ws2812b.h b/firmware/src/ws2812b.h new file mode 100644 index 0000000..d3c27c0 --- /dev/null +++ b/firmware/src/ws2812b.h @@ -0,0 +1,10 @@ +#if !defined(_WS2812B_H_) +#define _WS2812B_H_ + +#include +#include +#include "spi.h" + +void WS2812_SendRGB(uint8_t r, uint8_t g, uint8_t b); + +#endif // _USART_H_ \ No newline at end of file diff --git a/hardware/atmega8a_rgb-night-light-backups/atmega8a_rgb-night-light-2026-04-01_153223.zip b/hardware/atmega8a_rgb-night-light-backups/atmega8a_rgb-night-light-2026-04-01_153223.zip new file mode 100755 index 0000000000000000000000000000000000000000..7c428d060b6f4f7ed25edb186bcdedf3e963475d GIT binary patch literal 16778 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 literal 0 HcmV?d00001 diff --git a/hardware/atmega8a_rgb-night-light-backups/atmega8a_rgb-night-light-2026-04-01_153936.zip b/hardware/atmega8a_rgb-night-light-backups/atmega8a_rgb-night-light-2026-04-01_153936.zip new file mode 100755 index 0000000000000000000000000000000000000000..9555a51e73c4f65257b5072129a230503fcd4c4a GIT binary patch literal 19471 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