aboutsummaryrefslogtreecommitdiffstats
path: root/test/applet
diff options
context:
space:
mode:
authorvg <vgm+dev@devys.org>2020-07-07 16:24:01 +0200
committervg <vgm+dev@devys.org>2020-07-07 16:24:01 +0200
commit66dcf910bd4744d8ced56cb9586aa937a1a2d4c5 (patch)
treedf4dca1ae4af1e5df0be0d1f4f2cd0d54751f8e8 /test/applet
downloadhic-66dcf910bd4744d8ced56cb9586aa937a1a2d4c5.tar.gz
hic-66dcf910bd4744d8ced56cb9586aa937a1a2d4c5.tar.bz2
hic-66dcf910bd4744d8ced56cb9586aa937a1a2d4c5.zip
first commitHEADmaster
Diffstat (limited to 'test/applet')
-rw-r--r--test/applet/HardwareSerial.d28
-rw-r--r--test/applet/Makefile231
-rw-r--r--test/applet/Print.d22
-rw-r--r--test/applet/WInterrupts.d24
-rw-r--r--test/applet/WMath.d3
-rw-r--r--test/applet/board1
-rw-r--r--test/applet/core.abin0 -> 65636 bytes
-rw-r--r--test/applet/pins_arduino.d24
-rw-r--r--test/applet/test.cpp827
-rw-r--r--test/applet/test.d0
-rw-r--r--test/applet/test.elfbin0 -> 18361 bytes
-rw-r--r--test/applet/test.hex315
-rw-r--r--test/applet/wiring.d22
-rw-r--r--test/applet/wiring_analog.d24
-rw-r--r--test/applet/wiring_digital.d24
-rw-r--r--test/applet/wiring_pulse.d24
-rw-r--r--test/applet/wiring_shift.d22
17 files changed, 1591 insertions, 0 deletions
diff --git a/test/applet/HardwareSerial.d b/test/applet/HardwareSerial.d
new file mode 100644
index 0000000..826b211
--- /dev/null
+++ b/test/applet/HardwareSerial.d
@@ -0,0 +1,28 @@
+applet/HardwareSerial.o applet/HardwareSerial.d: ardmake/hardware/cores/arduino/HardwareSerial.cpp \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/stdlib.h \
+ /usr/lib/gcc/avr/4.3.5/include/stddef.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/stdio.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/inttypes.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/stdint.h \
+ /usr/lib/gcc/avr/4.3.5/include/stdarg.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/string.h \
+ ardmake/hardware/cores/arduino/wiring.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/avr/io.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/avr/sfr_defs.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/avr/iom328p.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/avr/portpins.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/avr/common.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/avr/version.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/avr/fuse.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/avr/lock.h \
+ ardmake/hardware/cores/arduino/binary.h \
+ ardmake/hardware/cores/arduino/wiring_private.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/avr/interrupt.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/avr/delay.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h \
+ ardmake/hardware/cores/arduino/HardwareSerial.h \
+ ardmake/hardware/cores/arduino/Stream.h \
+ ardmake/hardware/cores/arduino/Print.h \
+ ardmake/hardware/cores/arduino/WString.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/ctype.h
diff --git a/test/applet/Makefile b/test/applet/Makefile
new file mode 100644
index 0000000..6728b4c
--- /dev/null
+++ b/test/applet/Makefile
@@ -0,0 +1,231 @@
+compile: do_compile
+
+TARGET = $(notdir $(CURDIR))
+PORT = /dev/ttyUSB*
+UPLOAD_RATE = 57600
+AVRDUDE_PROGRAMMER = stk500v1
+MCU = atmega168
+F_CPU = 16000000
+
+
+ARDUINO = /usr/share/arduino/hardware/arduino/cores/arduino
+AVR_TOOLS_PATH = /usr/bin
+SRC = $(ARDUINO)/pins_arduino.c $(ARDUINO)/wiring.c \
+$(ARDUINO)/wiring_analog.c $(ARDUINO)/wiring_digital.c \
+$(ARDUINO)/wiring_pulse.c $(ARDUINO)/wiring_shift.c \
+$(ARDUINO)/WInterrupts.c
+CXXSRC = $(ARDUINO)/HardwareSerial.cpp $(ARDUINO)/WMath.cpp \
+$(ARDUINO)/Print.cpp
+FORMAT = ihex
+
+
+MAKEFILE = Makefile
+
+DEBUG = stabs
+
+OPT = s
+
+CDEFS = -DF_CPU=$(F_CPU)
+CXXDEFS = -DF_CPU=$(F_CPU)
+
+CINCS = -I$(ARDUINO)
+CXXINCS = -I$(ARDUINO)
+
+CSTANDARD = -std=gnu99
+CDEBUG = -g$(DEBUG)
+CWARN = -Wall -Wstrict-prototypes
+CTUNING = -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums
+
+CFLAGS = $(CDEBUG) $(CDEFS) $(CINCS) -O$(OPT) $(CWARN) $(CSTANDARD) $(CEXTRA)
+CXXFLAGS = $(CDEFS) $(CINCS) -O$(OPT)
+LDFLAGS = -lm
+
+
+AVRDUDE_PORT = $(PORT)
+AVRDUDE_WRITE_FLASH = -U flash:w:applet/$(TARGET).hex
+AVRDUDE_FLAGS = -V -F \
+-p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER) \
+-b $(UPLOAD_RATE)
+
+CC = $(AVR_TOOLS_PATH)/avr-gcc
+CXX = $(AVR_TOOLS_PATH)/avr-g++
+OBJCOPY = $(AVR_TOOLS_PATH)/avr-objcopy
+OBJDUMP = $(AVR_TOOLS_PATH)/avr-objdump
+AR = $(AVR_TOOLS_PATH)/avr-ar
+SIZE = $(AVR_TOOLS_PATH)/avr-size
+NM = $(AVR_TOOLS_PATH)/avr-nm
+AVRDUDE = $(AVR_TOOLS_PATH)/avrdude
+REMOVE = rm -f
+MV = mv -f
+
+OBJ = $(SRC:%.c=build/%.o) $(CXXSRC:%.cpp=build/%.o) $(ASRC:%.S=build/%.o)
+
+LST = $(ASRC:%.S=build/%.lst) $(CXXSRC:%.cpp=build/%.lst) $(SRC:%.c=build/%.lst)
+
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS)
+ALL_CXXFLAGS = -mmcu=$(MCU) -I. $(CXXFLAGS)
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)
+
+
+all: applet_files build sizeafter
+
+build: elf hex
+
+applet_files: $(TARGET).$(EXT)
+ test -d applet || mkdir applet
+ echo '#include "WProgram.h"' > applet/$(TARGET).cpp
+ cat $(TARGET).$(EXT) >> applet/$(TARGET).cpp
+ cat $(ARDUINO)/main.cxx >> applet/$(TARGET).cpp
+
+elf: applet/$(TARGET).elf
+hex: applet/$(TARGET).hex
+eep: applet/$(TARGET).eep
+lss: applet/$(TARGET).lss
+sym: applet/$(TARGET).sym
+
+upload: applet/$(TARGET).hex
+ stty -F $(AVRDUDE_PORT) hupcl ; sleep 0.1 ; stty -F $(AVRDUDE_PORT) -hupcl
+ $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH)
+
+
+HEXSIZE = $(SIZE) --target=$(FORMAT) applet/$(TARGET).hex
+ELFSIZE = $(SIZE) applet/$(TARGET).elf
+sizebefore:
+ @if [ -f applet/$(TARGET).elf ]; then echo; echo $(MSG_SIZE_BEFORE); $(HEXSIZE); echo; fi
+
+sizeafter:
+ @if [ -f applet/$(TARGET).elf ]; then echo; echo $(MSG_SIZE_AFTER); $(HEXSIZE); echo; fi
+
+
+COFFCONVERT=$(OBJCOPY) --debugging \
+--change-section-address .data-0x800000 \
+--change-section-address .bss-0x800000 \
+--change-section-address .noinit-0x800000 \
+--change-section-address .eeprom-0x810000
+
+
+coff: applet/$(TARGET).elf
+ $(COFFCONVERT) -O coff-avr applet/$(TARGET).elf $(TARGET).cof
+
+
+extcoff: $(TARGET).elf
+ $(COFFCONVERT) -O coff-ext-avr applet/$(TARGET).elf $(TARGET).cof
+
+
+.SUFFIXES: .elf .hex .eep .lss .sym
+
+.elf.hex:
+ $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@
+
+.elf.eep:
+ -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
+ --change-section-lma .eeprom=0 -O $(FORMAT) $< $@
+
+.elf.lss:
+ $(OBJDUMP) -h -S $< > $@
+
+.elf.sym:
+ $(NM) -n $< > $@
+
+ $(CXX) $(ALL_CXXFLAGS) -o $@ applet/$(TARGET).cpp -L. applet/core.a $(LDFLAGS)
+
+applet/core.a: $(OBJ)
+ @for i in $(OBJ); do echo $(AR) rcs applet/core.a $$i; $(AR) rcs applet/core.a $$i; done
+
+
+
+build/%.o: %.cpp
+ mkdir -p $(dir $@)
+ $(CXX) -c $(ALL_CXXFLAGS) $< -o $@
+
+build/%.o: %.c
+ mkdir -p $(dir $@)
+ $(CC) -c $(ALL_CFLAGS) $< -o $@
+
+
+build/%.s: %.c
+ $(CC) -S $(ALL_CFLAGS) $< -o $@
+
+
+.S.o:
+ $(CC) -c $(ALL_ASFLAGS) $< -o $@
+
+
+build/%.d: %.c
+ $(CC) -M $(ALL_CFLAGS) $< | sed "s;$(notdir $*).o:;$*.o $*.d:;" > $@
+
+build/%.d: %.cpp
+ $(CXX) -M $(ALL_CXXFLAGS) $< | sed "s;$(notdir $*).o:;$*.o $*.d:;" > $@
+
+
+clean:
+ $(REMOVE) applet/$(TARGET).hex applet/$(TARGET).eep applet/$(TARGET).cof applet/$(TARGET).elf \
+ applet/$(TARGET).map applet/$(TARGET).sym applet/$(TARGET).lss applet/core.a \
+ $(OBJ) $(LST) $(SRC:%.c=build/%.s) $(SRC:%.c=build/%.d) $(CXXSRC:%.cpp=build/%.s) $(CXXSRC:%.cpp=build/%.d)
+
+.PHONY: all build elf hex eep lss sym program coff extcoff clean applet_files sizebefore sizeafter
+
+-include $(SRC:%.c=build/%.d)
+-include $(CXXSRC:%.cpp=build/%.d)
+-e do_compile: do_build show_size
+do_build: applet/$(TARGET).hex
+applet/$(TARGET).hex: applet/$(TARGET).elf
+
+ARDMAKE_BOARD=applet/board
+
+applet/$(TARGET).elf: applet/$(TARGET).cpp applet/core.a
+ $(CXX) $(ALL_CXXFLAGS) -Wl,--gc-sections $(LDFLAGS) -L. -Lapplet/ -o $@ $< applet/core.a
+ @chmod a-x $@ >/dev/null 2>&1 || true
+
+applet/$(TARGET).cpp: $(TARGET).$(EXT) $(ARDUINO)/main.cxx $(ARDUINO)/WProgram.h $(ARDMAKE_BOARD)
+ echo '#include "WProgram.h"' >$@
+ @echo '#line 1 "$<"' >>$@
+ cat $(TARGET).$(EXT) >>$@
+ @echo '#line 1 "$(ARDUINO)/main.cxx"' >>$@
+ cat $(ARDUINO)/main.cxx >>$@
+
+show_size:
+ @echo
+ @echo Program size:
+ @$(HEXSIZE) | awk -v m="$(MAX_SIZE)" '{print;if(NR^1){s=$$4}} \
+ END {printf("\n%d/%d bytes (%.1f%% of capacity, %d bytes left)\n\n",\
+ s,m,s*100.0/m,m-s);}'
+
+upload_autoreset: do_autoreset upload unreset
+
+do_autoreset:
+ @echo Sending reset to prepare for upload...
+ ( stty hupcl; sleep 0.1; true ) <$(PORT) 2>/dev/null
+ @echo
+
+unreset:
+ @stty -hupcl <$(PORT) 2>/dev/null || true
+
+$(OBJ): $(ARDMAKE_BOARD)
+$(DEPS): $(ARDMAKE_BOARD)
+
+$(APPC): applet/%.o: %.c
+ $(CC) -c $(ALL_CFLAGS) -o $@ $<
+
+$(APPCXX): applet/%.o: %.cpp
+ $(CXX) -c $(ALL_CXXFLAGS) -o $@ $<
+
+$(APPA): applet/%.o: %.S
+ $(CC) -c $(ALL_ASFLAGS) -o $@ $<
+
+$(APPC:.o=.d): applet/%.d: %.c
+ $(CC) -M $(ALL_CFLAGS) $< | sed 's;^[^:]*:;applet/$*.o applet/$*.d:;' >$@
+
+$(APPCXX:.o=.d): applet/%.d: %.cpp
+ $(CXX) -M $(ALL_CXXFLAGS) $< | sed 's;^[^:]*:;applet/$*.o applet/$*.d:;' >$@
+
+$(APPA:.o=.d): applet/%.d: %.S
+ $(CC) -M $(ALL_ASFLAGS) $< | sed 's;^[^:]*:;applet/$*.o applet/$*.d:;' >$@
+
+applet/$(TARGET).d: applet/$(TARGET).cpp
+
+vpath %.c applet/ $(sort $(dir $(OBJC)))
+vpath %.cpp applet/ $(sort $(dir $(OBJCXX)))
+vpath %.S applet/ $(sort $(dir $(OBJA)))
+
+include $(DEPS)
diff --git a/test/applet/Print.d b/test/applet/Print.d
new file mode 100644
index 0000000..2e8b58c
--- /dev/null
+++ b/test/applet/Print.d
@@ -0,0 +1,22 @@
+applet/Print.o applet/Print.d: ardmake/hardware/cores/arduino/Print.cpp \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/stdlib.h \
+ /usr/lib/gcc/avr/4.3.5/include/stddef.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/stdio.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/inttypes.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/stdint.h \
+ /usr/lib/gcc/avr/4.3.5/include/stdarg.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/string.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/math.h \
+ ardmake/hardware/cores/arduino/wiring.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/avr/io.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/avr/sfr_defs.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/avr/iom328p.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/avr/portpins.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/avr/common.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/avr/version.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/avr/fuse.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/avr/lock.h \
+ ardmake/hardware/cores/arduino/binary.h \
+ ardmake/hardware/cores/arduino/Print.h \
+ ardmake/hardware/cores/arduino/WString.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/ctype.h
diff --git a/test/applet/WInterrupts.d b/test/applet/WInterrupts.d
new file mode 100644
index 0000000..77437b7
--- /dev/null
+++ b/test/applet/WInterrupts.d
@@ -0,0 +1,24 @@
+applet/WInterrupts.o applet/WInterrupts.d: ardmake/hardware/cores/arduino/WInterrupts.c \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/inttypes.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/stdint.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/avr/io.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/avr/sfr_defs.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/avr/iom328p.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/avr/portpins.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/avr/common.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/avr/version.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/avr/fuse.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/avr/lock.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/avr/interrupt.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/avr/pgmspace.h \
+ /usr/lib/gcc/avr/4.3.5/include/stddef.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/stdio.h \
+ /usr/lib/gcc/avr/4.3.5/include/stdarg.h \
+ ardmake/hardware/cores/arduino/WConstants.h \
+ ardmake/hardware/cores/arduino/wiring.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/stdlib.h \
+ ardmake/hardware/cores/arduino/binary.h \
+ ardmake/hardware/cores/arduino/wiring_private.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/avr/delay.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h
diff --git a/test/applet/WMath.d b/test/applet/WMath.d
new file mode 100644
index 0000000..6d1c210
--- /dev/null
+++ b/test/applet/WMath.d
@@ -0,0 +1,3 @@
+applet/WMath.o applet/WMath.d: ardmake/hardware/cores/arduino/WMath.cpp \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/stdlib.h \
+ /usr/lib/gcc/avr/4.3.5/include/stddef.h
diff --git a/test/applet/board b/test/applet/board
new file mode 100644
index 0000000..e438487
--- /dev/null
+++ b/test/applet/board
@@ -0,0 +1 @@
+uno
diff --git a/test/applet/core.a b/test/applet/core.a
new file mode 100644
index 0000000..1416012
--- /dev/null
+++ b/test/applet/core.a
Binary files differ
diff --git a/test/applet/pins_arduino.d b/test/applet/pins_arduino.d
new file mode 100644
index 0000000..9b2299c
--- /dev/null
+++ b/test/applet/pins_arduino.d
@@ -0,0 +1,24 @@
+applet/pins_arduino.o applet/pins_arduino.d: ardmake/hardware/cores/arduino/pins_arduino.c \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/avr/io.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/avr/sfr_defs.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/inttypes.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/stdint.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/avr/iom328p.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/avr/portpins.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/avr/common.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/avr/version.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/avr/fuse.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/avr/lock.h \
+ ardmake/hardware/cores/arduino/wiring_private.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/avr/interrupt.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/avr/delay.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/stdio.h \
+ /usr/lib/gcc/avr/4.3.5/include/stdarg.h \
+ /usr/lib/gcc/avr/4.3.5/include/stddef.h \
+ ardmake/hardware/cores/arduino/wiring.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/stdlib.h \
+ ardmake/hardware/cores/arduino/binary.h \
+ ardmake/hardware/cores/arduino/pins_arduino.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/avr/pgmspace.h
diff --git a/test/applet/test.cpp b/test/applet/test.cpp
new file mode 100644
index 0000000..1400654
--- /dev/null
+++ b/test/applet/test.cpp
@@ -0,0 +1,827 @@
+#include "WProgram.h"
+#line 1 "test.pde"
+// On the Arduino board, digital pins are also used
+// for the analog output (software PWM). Analog input
+// pins are a separate set.
+
+// ATMEL ATMEGA8 & 168 / ARDUINO
+//
+// +-\/-+
+// PC6 1| |28 PC5 (AI 5)
+// (D 0) PD0 2| |27 PC4 (AI 4)
+// (D 1) PD1 3| |26 PC3 (AI 3)
+// (D 2) PD2 4| |25 PC2 (AI 2)
+// PWM+ (D 3) PD3 5| |24 PC1 (AI 1)
+// (D 4) PD4 6| |23 PC0 (AI 0)
+// VCC 7| |22 GND
+// GND 8| |21 AREF
+// PB6 9| |20 AVCC
+// PB7 10| |19 PB5 (D 13)
+// PWM+ (D 5) PD5 11| |18 PB4 (D 12)
+// PWM+ (D 6) PD6 12| |17 PB3 (D 11) PWM
+// (D 7) PD7 13| |16 PB2 (D 10) PWM
+// (D 8) PB0 14| |15 PB1 (D 9) PWM
+// +----+
+//
+// (PWM+ indicates the additional PWM pins on the ATmega168.)
+
+#define CUBE_SIZE 8
+
+#define AXIS_X 1
+#define AXIS_Y 2
+#define AXIS_Z 3
+
+void setup()
+{
+ Serial.begin(9600);
+ delay(1000);
+ Serial.println("begin");
+
+ DDRB = 0xFF;
+ DDRD = 0xFC;
+
+ PORTB = 0;
+ PORTD &= 0x03;
+
+
+ // Reset any PWM configuration that the arduino may have set up automagically!
+ TCCR2A = 0x00;
+ TCCR2B = 0x00;
+
+ TCCR2A |= (0x01 << WGM21); // CTC mode. clear counter on TCNT2 == OCR2A
+ OCR2A = 50; // Interrupt every 25600th cpu cycle (256*100)
+ TCNT2 = 0x00; // start counting at 0
+ TCCR2B |= (0x01 << CS22) | (0x01 << CS21); // Start the clock with a 256 prescaler
+
+ TIMSK2 |= (0x01 << OCIE2A);
+
+}
+
+volatile unsigned char cube[8][8];
+volatile unsigned char current_layer = 0;
+
+ISR (TIMER2_COMPA_vect)
+{
+ PORTB &= ~0x21; // layer and latch low
+ char current_layer_ = current_layer;
+
+ //for (char j = 0; j < 8; ++j) {
+ for (char j = 0; j < 4; ++j) {
+ unsigned char val = cube[7-j][current_layer_];
+ unsigned char val2 = cube[3-j][current_layer_];
+ for (char i = 0; i < 8; ++i/*, val >>= 1*/) {
+ PORTB &= ~0x02;
+ PORTD = (PORTD & ~0x80) | ((val2 << (7-i)) & 0x80);
+ //PORTD |= 0x80;
+ PORTD = (PORTD & ~0x40) | (((val << (7-i)) & 0x80) >> 1);
+ PORTB |= 0x02;
+ }
+ }
+
+ PORTB = (PORTB & ~0x1C) | (current_layer_ << 2);
+ ++current_layer_;
+ current_layer = current_layer_ & 0x07;
+
+ PORTB |= 0x21; // layer and latch high
+}
+
+/*****************************************************************************
+ * ACCESSORS
+ *****************************************************************************/
+
+unsigned char inrange(int x, int y, int z)
+{
+ if (x >= 0 && x < CUBE_SIZE && y >= 0 && y < CUBE_SIZE && z >= 0 && z < CUBE_SIZE)
+ {
+ return 1;
+ } else
+ {
+ // One of the coordinates was outside the cube.
+ return 0;
+ }
+}
+
+bool get_led(unsigned char x, unsigned char y, unsigned char z)
+{
+ /*
+ assert(x >= 0 && x <= 7);
+ assert(y >= 0 && y <= 7);
+ assert(z >= 0 && z <= 7);
+ */
+
+ if (inrange(x, y, z)) {
+ return cube[y][z] & (1 << x);
+ }
+
+ return false;
+}
+
+void set_led(unsigned char x, unsigned char y, unsigned char z, bool on)
+{
+
+ if (!inrange(x, y, z)) {
+ return;
+ }
+
+ /*
+ assert(x >= 0 && x <= 7);
+ assert(y >= 0 && y <= 7);
+ assert(z >= 0 && z <= 7);
+ */
+
+ if (on) {
+ cube[y][z] |= ((unsigned char)1) << x;
+ }
+ else {
+ cube[y][z] &= ~(((unsigned char)1) << x);
+ }
+}
+
+void clear_led()
+{
+ for (char z = 0; z < 8; ++z) {
+ for (char y = 0; y < 8; ++y) {
+ cube[y][z] = 0;
+ }
+ }
+}
+// Set a single voxel to ON
+void setvoxel(int x, int y, int z)
+{
+ if (inrange(x,y,z))
+ cube[y][z] |= (1 << x);
+}
+
+unsigned char getvoxel(int x, int y, int z)
+{
+ if (inrange(x,y,z))
+ {
+ if (cube[y][z] & (1 << x))
+ {
+ return 0x01;
+ } else
+ {
+ return 0x00;
+ }
+ } else
+ {
+ return 0x00;
+ }
+}
+
+
+// Set a single voxel to ON
+void clrvoxel(int x, int y, int z)
+{
+ if (inrange(x,y,z))
+ cube[y][z] &= ~(1 << x);
+}
+// In some effect we want to just take bool and write it to a voxel
+// this function calls the apropriate voxel manipulation function.
+void altervoxel(int x, int y, int z, int state)
+{
+ if (state == 1)
+ {
+ setvoxel(x,y,z);
+ } else
+ {
+ clrvoxel(x,y,z);
+ }
+}
+
+// Shift the entire contents of the cube along an axis
+// This is great for effects where you want to draw something
+// on one side of the cube and have it flow towards the other
+// side. Like rain flowing down the Z axiz.
+void shift (char axis, int direction)
+{
+ int i, x ,y;
+ int ii, iii;
+ int state;
+
+ for (i = 0; i < 8; i++)
+ {
+ if (direction == -1)
+ {
+ ii = i;
+ } else
+ {
+ ii = (7-i);
+ }
+
+
+ for (x = 0; x < 8; x++)
+ {
+ for (y = 0; y < 8; y++)
+ {
+ if (direction == -1)
+ {
+ iii = ii+1;
+ } else
+ {
+ iii = ii-1;
+ }
+
+ if (axis == AXIS_Z)
+ {
+ state = getvoxel(x,y,iii);
+ altervoxel(x,y,ii,state);
+ }
+
+ if (axis == AXIS_Y)
+ {
+ state = getvoxel(x,iii,y);
+ altervoxel(x,ii,y,state);
+ }
+
+ if (axis == AXIS_X)
+ {
+ state = getvoxel(iii,y,x);
+ altervoxel(ii,y,x,state);
+ }
+ }
+ }
+ }
+
+ if (direction == -1)
+ {
+ i = 7;
+ } else
+ {
+ i = 0;
+ }
+
+ for (x = 0; x < 8; x++)
+ {
+ for (y = 0; y < 8; y++)
+ {
+ if (axis == AXIS_Z)
+ clrvoxel(x,y,i);
+
+ if (axis == AXIS_Y)
+ clrvoxel(x,i,y);
+
+ if (axis == AXIS_X)
+ clrvoxel(i,y,x);
+ }
+ }
+}
+
+
+// Delay loop.
+// This is not calibrated to milliseconds,
+// but we had allready made to many effects using this
+// calibration when we figured it might be a good idea
+// to calibrate it.
+void delay_ms(uint16_t x)
+{
+ uint8_t y, z;
+ for ( ; x > 0 ; x--){
+ for ( y = 0 ; y < 90 ; y++){
+ for ( z = 0 ; z < 6 ; z++){
+ asm volatile ("nop");
+ }
+ }
+ }
+}
+
+void effect_rain (int iterations)
+{
+ int i, ii;
+ int rnd_x;
+ int rnd_y;
+ int rnd_num;
+
+ for (ii=0;ii<iterations;ii++)
+ {
+ rnd_num = rand()%4;
+
+ for (i=0; i < rnd_num;i++)
+ {
+ rnd_x = rand()%8;
+ rnd_y = rand()%8;
+ setvoxel(rnd_x,rnd_y,7);
+ }
+
+ delay_ms(1000);
+ shift(AXIS_Z,-1);
+ }
+}
+
+volatile const unsigned char font[455] /*EEMEM*/ = {
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x5f,0x5f,0x00,0x00, // !
+ 0x00,0x03,0x00,0x03,0x00,0x14,0x7f,0x14,0x7f,0x14, // "#
+ 0x24,0x2a,0x7f,0x2a,0x12,0x23,0x13,0x08,0x64,0x62, // $%
+ 0x36,0x49,0x55,0x22,0x50,0x00,0x05,0x03,0x00,0x00, // &'
+ 0x00,0x1c,0x22,0x41,0x00,0x00,0x41,0x22,0x1c,0x00, // ()
+ 0x14,0x08,0x3e,0x08,0x14,0x08,0x08,0x3e,0x08,0x08, // *+
+ 0x00,0x50,0x30,0x00,0x00,0x08,0x08,0x08,0x08,0x08, // ,-
+ 0x00,0x60,0x60,0x00,0x00,0x20,0x10,0x08,0x04,0x02, // ./
+ 0x3e,0x51,0x49,0x45,0x3e,0x00,0x42,0x7f,0x40,0x00, // 01
+ 0x42,0x61,0x51,0x49,0x46,0x21,0x41,0x45,0x4b,0x31, // 23
+ 0x18,0x14,0x12,0x7f,0x10,0x27,0x45,0x45,0x45,0x39, // 45
+ 0x3c,0x4a,0x49,0x49,0x30,0x01,0x71,0x09,0x05,0x03, // 67
+ 0x36,0x49,0x49,0x49,0x36,0x06,0x49,0x49,0x29,0x1e, // 89
+ 0x00,0x36,0x36,0x00,0x00,0x00,0x56,0x36,0x00,0x00, // :;
+ 0x08,0x14,0x22,0x41,0x00,0x14,0x14,0x14,0x14,0x14, // <=
+ 0x00,0x41,0x22,0x14,0x08,0x02,0x01,0x51,0x09,0x06, // >?
+ 0x32,0x49,0x79,0x41,0x3e,0x7e,0x11,0x11,0x11,0x7e, // @A
+ 0x7f,0x49,0x49,0x49,0x36,0x3e,0x41,0x41,0x41,0x22, // BC
+ 0x7f,0x41,0x41,0x22,0x1c,0x7f,0x49,0x49,0x49,0x41, // DE
+ 0x7f,0x09,0x09,0x09,0x01,0x3e,0x41,0x49,0x49,0x7a, // FG
+ 0x7f,0x08,0x08,0x08,0x7f,0x00,0x41,0x7f,0x41,0x00, // HI
+ 0x20,0x40,0x41,0x3f,0x01,0x7f,0x08,0x14,0x22,0x41, // JK
+ 0x7f,0x40,0x40,0x40,0x40,0x7f,0x02,0x0c,0x02,0x7f, // LM
+ 0x7f,0x04,0x08,0x10,0x7f,0x3e,0x41,0x41,0x41,0x3e, // NO
+ 0x7f,0x09,0x09,0x09,0x06,0x3e,0x41,0x51,0x21,0x5e, // PQ
+ 0x7f,0x09,0x19,0x29,0x46,0x46,0x49,0x49,0x49,0x31, // RS
+ 0x01,0x01,0x7f,0x01,0x01,0x3f,0x40,0x40,0x40,0x3f, // TU
+ 0x1f,0x20,0x40,0x20,0x1f,0x3f,0x40,0x38,0x40,0x3f, // VW
+ 0x63,0x14,0x08,0x14,0x63,0x07,0x08,0x70,0x08,0x07, // XY
+ 0x61,0x51,0x49,0x45,0x43,0x00,0x7f,0x41,0x41,0x00, // Z[
+ 0x02,0x04,0x08,0x10,0x20,0x00,0x41,0x41,0x7f,0x00, // \]
+ 0x04,0x02,0x01,0x02,0x04,0x40,0x40,0x40,0x40,0x40, // ^_
+ 0x00,0x01,0x02,0x04,0x00,0x20,0x54,0x54,0x54,0x78, // `a
+ 0x7f,0x48,0x44,0x44,0x38,0x38,0x44,0x44,0x44,0x20, // bc
+ 0x38,0x44,0x44,0x48,0x7f,0x38,0x54,0x54,0x54,0x18, // de
+ 0x08,0x7e,0x09,0x01,0x02,0x0c,0x52,0x52,0x52,0x3e, // fg
+ 0x7f,0x08,0x04,0x04,0x78,0x00,0x44,0x7d,0x40,0x00, // hi
+ 0x20,0x40,0x44,0x3d,0x00,0x7f,0x10,0x28,0x44,0x00, // jk
+ 0x00,0x41,0x7f,0x40,0x00,0x7c,0x04,0x18,0x04,0x78, // lm
+ 0x7c,0x08,0x04,0x04,0x78,0x38,0x44,0x44,0x44,0x38, // no
+ 0x7c,0x14,0x14,0x14,0x08,0x08,0x14,0x14,0x18,0x7c, // pq
+ 0x7c,0x08,0x04,0x04,0x08,0x48,0x54,0x54,0x54,0x20, // rs
+ 0x04,0x3f,0x44,0x40,0x20,0x3c,0x40,0x40,0x20,0x7c, // tu
+ 0x1c,0x20,0x40,0x20,0x1c,0x3c,0x40,0x30,0x40,0x3c, // vw
+ 0x44,0x28,0x10,0x28,0x44,0x0c,0x50,0x50,0x50,0x3c, // xy
+ 0x44,0x64,0x54,0x4c,0x44 // z
+};
+
+
+volatile const unsigned char bitmaps[6][8] /*EEMEM*/ = {
+ {0xc3,0xc3,0x00,0x18,0x18,0x81,0xff,0x7e}, // smiley 3 small
+ {0x3c,0x42,0x81,0x81,0xc3,0x24,0xa5,0xe7}, // Omega
+ {0x00,0x04,0x06,0xff,0xff,0x06,0x04,0x00}, // Arrow
+ {0x81,0x42,0x24,0x18,0x18,0x24,0x42,0x81}, // X
+ {0xBD,0xA1,0xA1,0xB9,0xA1,0xA1,0xA1,0x00}, // ifi
+ {0xEF,0x48,0x4B,0x49,0x4F,0x00,0x00,0x00} // TG
+};
+
+const unsigned char paths[44] /*PROGMEM */= {0x07,0x06,0x05,0x04,0x03,0x02,0x01,0x00,0x10,0x20,0x30,0x40,0x50,0x60,0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x67,0x57,0x47,0x37,0x27,0x17,
+0x04,0x03,0x12,0x21,0x30,0x40,0x51,0x62,0x73,0x74,0x65,0x56,0x47,0x37,0x26,0x15}; // circle, len 16, offset 28
+
+/*
+void font_getpath (unsigned char path, unsigned char *destination, int length)
+{
+ int i;
+ int offset = 0;
+
+ if (path == 1)
+ offset=28;
+
+ for (i = 0; i < length; i++)
+ destination[i] = pgm_read_byte(&paths[i+offset]);
+}
+*/
+// Fill a value into all 64 byts of the cube buffer
+// Mostly used for clearing. fill(0x00)
+// or setting all on. fill(0xff)
+void fill (unsigned char pattern)
+{
+ int z;
+ int y;
+ for (z=0;z<8;z++)
+ {
+ for (y=0;y<8;y++)
+ {
+ cube[z][y] = pattern;
+ }
+ }
+}
+
+
+
+void font_getchar (char chr, unsigned char dst[5])
+{
+ //uint8_t i;
+ unsigned char i;
+ chr -= 32; // our bitmap font starts at ascii char 32.
+
+ for (i = 0; i < 5; i++)
+ //dst[i] = (unsigned char)eeprom_read_byte((uint8_t*)&font[(chr*5)+i]);
+ dst[i] = font[(chr*5)+i];
+}
+void effect_stringfly2(const char* str)
+{
+ //int x,y,i;
+ unsigned char x,y,i;
+ unsigned char chr[5];
+ const int DELAY = 80;
+
+ clear_led();
+
+ while (*str)
+ {
+ font_getchar(*str++, chr);
+
+ // Put a character on the back of the cube
+ for (x = 0; x < 5; x++)
+ {
+ for (y = 0; y < 8; y++)
+ {
+ if ((chr[x] & (0x80>>y)))
+ {
+ //setvoxel(7,x+2,y);
+ //set_led(7,x+2,y);
+ set_led(x+2, 0, y, true);
+ }
+ }
+ }
+
+ //led_change = true;
+ //SDL_Delay(1000);
+ //clear_led();
+ //continue;
+
+ // Shift the entire contents of the cube forward by 6 steps
+ // before placing the next character
+ for (i = 0; i<6; i++)
+ {
+ //delay_ms(1000);
+ //SDL_Delay(1000);
+ delay(DELAY);
+ shift(AXIS_Y,1);
+ //shift(1,-1);
+ //set_plane(1, 7, false);
+ }
+ }
+
+ //return;
+ // Shift the last character out of the cube.
+ for (i = 0; i<8; i++)
+ {
+ delay(DELAY);
+ //delay_ms(1000);
+ shift(AXIS_Y,1);
+ //shift(1,-1);
+ }
+}
+
+// Sets all voxels along a X/Y plane at a given point
+// on axis Z
+void setplane_z (int z)
+{
+ int i;
+ if (z>=0 && z<8)
+ {
+ for (i=0;i<8;i++)
+ cube[z][i] = 0xff;
+ }
+}
+
+// Clears voxels in the same manner as above
+void clrplane_z (int z)
+{
+ int i;
+ if (z>=0 && z<8)
+ {
+ for (i=0;i<8;i++)
+ cube[z][i] = 0x00;
+ }
+}
+
+void setplane_x (int x)
+{
+ int z;
+ int y;
+ if (x>=0 && x<8)
+ {
+ for (z=0;z<8;z++)
+ {
+ for (y=0;y<8;y++)
+ {
+ cube[z][y] |= (1 << x);
+ }
+ }
+ }
+}
+
+void clrplane_x (int x)
+{
+ int z;
+ int y;
+ if (x>=0 && x<8)
+ {
+ for (z=0;z<8;z++)
+ {
+ for (y=0;y<8;y++)
+ {
+ cube[z][y] &= ~(1 << x);
+ }
+ }
+ }
+}
+
+void setplane_y (int y)
+{
+ int z;
+ if (y>=0 && y<8)
+ {
+ for (z=0;z<8;z++)
+ cube[z][y] = 0xff;
+ }
+}
+
+void clrplane_y (int y)
+{
+ int z;
+ if (y>=0 && y<8)
+ {
+ for (z=0;z<8;z++)
+ cube[z][y] = 0x00;
+ }
+}
+
+
+void setplane (char axis, unsigned char i)
+{
+ switch (axis)
+ {
+ case AXIS_X:
+ setplane_x(i);
+ break;
+
+ case AXIS_Y:
+ setplane_y(i);
+ break;
+
+ case AXIS_Z:
+ setplane_z(i);
+ break;
+ }
+}
+
+
+// Draw a plane on one axis and send it back and forth once.
+void effect_planboing (int plane, int speed)
+{
+ int i;
+ for (i=0;i<8;i++)
+ {
+ fill(0x00);
+ setplane(plane, i);
+ delay_ms(speed);
+ }
+
+ for (i=7;i>=0;i--)
+ {
+ fill(0x00);
+ setplane(plane,i);
+ delay_ms(speed);
+ }
+}
+
+void effect_blinky2()
+{
+ int i,r;
+ fill(0x00);
+
+ for (r=0;r<2;r++)
+ {
+ i = 750;
+ while (i>0)
+ {
+ fill(0x00);
+ delay(i/5);
+
+ fill(0xff);
+ delay(20);
+
+ i = i - (15+(1000/(i/10)));
+ }
+
+ delay(500);
+
+ i = 750;
+ while (i>0)
+ {
+ fill(0x00);
+ delay((751-i)/5);
+
+ fill(0xff);
+ delay(20);
+
+ i = i - (15+(1000/(i/10)));
+ }
+ }
+
+}
+// Set or clear exactly 512 voxels in a random order.
+void effect_random_filler (int delay, int state)
+{
+ int x,y,z;
+ int loop = 0;
+
+
+ if (state == 1)
+ {
+ fill(0x00);
+ } else
+ {
+ fill(0xff);
+ }
+
+ while (loop<511)
+ {
+ x = rand()%8;
+ y = rand()%8;
+ z = rand()%8;
+
+ if ((state == 0 && getvoxel(x,y,z) == 0x01) || (state == 1 && getvoxel(x,y,z) == 0x00))
+ {
+ altervoxel(x,y,z,state);
+ delay_ms(delay);
+ loop++;
+ }
+ }
+}
+
+void draw_positions_axis (char axis, unsigned char positions[64], int invert)
+{
+ int x, y, p;
+
+ fill(0x00);
+
+ for (x=0; x<8; x++)
+ {
+ for (y=0; y<8; y++)
+ {
+ if (invert)
+ {
+ p = (7-positions[(x*8)+y]);
+ } else
+ {
+ p = positions[(x*8)+y];
+ }
+
+ if (axis == AXIS_Z)
+ setvoxel(x,y,p);
+
+ if (axis == AXIS_Y)
+ setvoxel(x,p,y);
+
+ if (axis == AXIS_X)
+ setvoxel(p,y,x);
+ }
+ }
+
+}
+
+
+
+void effect_boxside_randsend_parallel (char axis, int origin, int delay, int mode)
+{
+ int i;
+ int done;
+ unsigned char cubepos[64];
+ unsigned char pos[64];
+ int notdone = 1;
+ int notdone2 = 1;
+ int sent = 0;
+
+ for (i=0;i<64;i++)
+ {
+ pos[i] = 0;
+ }
+
+ while (notdone)
+ {
+ if (mode == 1)
+ {
+ notdone2 = 1;
+ while (notdone2 && sent<64)
+ {
+ i = rand()%64;
+ if (pos[i] == 0)
+ {
+ sent++;
+ pos[i] += 1;
+ notdone2 = 0;
+ }
+ }
+ } else if (mode == 2)
+ {
+ if (sent<64)
+ {
+ pos[sent] += 1;
+ sent++;
+ }
+ }
+
+ done = 0;
+ for (i=0;i<64;i++)
+ {
+ if (pos[i] > 0 && pos[i] <7)
+ {
+ pos[i] += 1;
+ }
+
+ if (pos[i] == 7)
+ done++;
+ }
+
+ if (done == 64)
+ notdone = 0;
+
+ for (i=0;i<64;i++)
+ {
+ if (origin == 0)
+ {
+ cubepos[i] = pos[i];
+ } else
+ {
+ cubepos[i] = (7-pos[i]);
+ }
+ }
+
+
+ delay_ms(delay);
+ draw_positions_axis(axis,cubepos,0);
+
+ }
+
+}
+
+
+
+
+/*****************************************************************************
+ * LOOP TEST
+ *****************************************************************************/
+
+void loop()
+{
+ //for (char i = 0; i < 8; ++i) {
+ //PORTB = (PORTB & ~0x1C) | ((i & 0x07) << 2);
+ //display(i);
+ //delay(2);
+
+ //Serial.println(layer, DEC);
+ //delay(1000);
+ //}
+ clear_led();
+ //delay_ms(1000);
+ delay(1000);
+ //return;
+ for (char z = 0; z < 8; ++z) {
+ for (char y = 0; y < 8; ++y) {
+ for (char x = 0; x < 8; ++x) {
+ set_led(x, y, z, true);
+ delay(5);
+ delay(100);
+ //delay(500);
+ //delay(1000);
+ //delay_ms(1000);
+ }
+ }
+ }
+ delay(1000);
+ //delay_ms(1000);
+ clear_led();
+ /* effect_stringfly2("test de texte - c'est trop super genial et tout "
+ "yeahhh!!!!!");
+ */
+ effect_planboing(AXIS_Z, 700);
+ effect_planboing(AXIS_Y, 700);
+ effect_planboing(AXIS_X, 700);
+
+ effect_blinky2();
+
+ effect_random_filler(75,1);
+ effect_random_filler(75,0);
+
+ for (char i = 0; i < 10; ++i) {
+ effect_boxside_randsend_parallel (AXIS_X, 0, 950, 2);
+ effect_boxside_randsend_parallel (AXIS_X, 1, 950, 2);
+ effect_boxside_randsend_parallel (AXIS_Y, 0, 950, 2);
+ effect_boxside_randsend_parallel (AXIS_Y, 1, 950, 2);
+ effect_boxside_randsend_parallel (AXIS_Z, 0, 950, 2);
+ effect_boxside_randsend_parallel (AXIS_Z, 1, 950, 2);
+ }
+
+
+ //effect_rain(1000)
+}
+#line 1 "ardmake/hardware/cores/arduino/main.cxx"
+int main(void)
+{
+ init();
+
+ setup();
+
+ for (;;)
+ loop();
+
+ return 0;
+}
+
diff --git a/test/applet/test.d b/test/applet/test.d
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/applet/test.d
diff --git a/test/applet/test.elf b/test/applet/test.elf
new file mode 100644
index 0000000..0af1415
--- /dev/null
+++ b/test/applet/test.elf
Binary files differ
diff --git a/test/applet/test.hex b/test/applet/test.hex
new file mode 100644
index 0000000..d67c46b
--- /dev/null
+++ b/test/applet/test.hex
@@ -0,0 +1,315 @@
+:100000000C9435000C945D000C945D000C945D0024
+:100010000C945D000C945D000C945D000C945F00EA
+:100020000C945D000C945D000C945D000C945D00DC
+:100030000C945D000C945D000C945D000C945D00CC
+:100040000C9463050C945D000C9432060C945D00D6
+:100050000C945D000C945D000C945D000C945D00AC
+:100060000C945D000C945D002E0711241FBECFEF91
+:10007000D8E0DEBFCDBF11E0A0E0B1E0E8E7F3E1FA
+:1000800002C005900D92AC31B107D9F711E0ACE197
+:10009000B1E001C01D92AD3FB107E1F710E0CAE643
+:1000A000D0E004C02297FE010E943609C836D1076D
+:1000B000C9F70E945C050C94BA090C9400001F92C9
+:1000C0000F920FB60F921124EF92FF920F931F938E
+:1000D0002F933F934F935F936F937F938F939F9350
+:1000E000AF93BF93CF93DF93EF93FF9385B18E7D53
+:1000F00085B950915C01A7E0B0E0C52FDD27C7FDB1
+:10010000D095FD0173E0EE0FFF1F7A95E1F7EC0F3C
+:10011000FD1FE45EFE4F9081FD01349763E0EE0F1A
+:10012000FF1F6A95E1F7EC0FFD1FE45EFE4F808133
+:1001300067E070E0082F10E0E92FF0E029984BB15C
+:10014000C801062E02C0880F991F0A94E2F7807832
+:100150004F77842B8BB98BB17F01062E02C0EE0C3A
+:10016000FF1C0A94E2F797012078307035952795A7
+:100170008F7B822B8BB9299A615070408FEF6F3F34
+:100180007807E1F61197A330B10509F0BACF85B130
+:10019000CC0FDD1FCC0FDD1F837E8C2B85B95F5FFD
+:1001A000577050935C0185B1816285B9FF91EF91E1
+:1001B000DF91CF91BF91AF919F918F917F916F917F
+:1001C0005F914F913F912F911F910F91FF90EF9071
+:1001D0000F900FBE0F901F901895089778F477FD39
+:1001E0000DC06830710554F457FD08C090E04830E8
+:1001F00051050CF091E081E0982701C090E0892F33
+:100200000895EF92FF920F931F93CF93DF93F82EF1
+:10021000E22E062F10E0C42FD0E090E0B801AE012E
+:100220000E94ED00882339F1B801F3E0660F771FD3
+:10023000FA95E1F7EE2079F0FB01EC0FFD1FE45E8B
+:10024000FE4F208181E090E002C0880F991FFA9450
+:10025000E2F7282B0FC0FB01EC0FFD1FE45EFE4F01
+:10026000208181E090E002C0880F991FFA94E2F7A4
+:10027000809528232083DF91CF911F910F91FF90CC
+:10028000EF90089520E030E014C0FC01A3E0EE0FF1
+:10029000FF1FAA95E1F7E20FF31FE45EFE4F108205
+:1002A00001968830910589F72F5F3F4F283031053F
+:1002B00019F080E090E0E9CF0895FF920F931F932B
+:1002C000CF93DF93F82EEB018A010E94ED00882383
+:1002D000A1F0FE01B3E0EE0FFF1FBA95E1F7E00FCA
+:1002E000F11FE45EFE4F208181E090E002C0880FA4
+:1002F000991FFA94E2F7282B2083DF91CF911F9169
+:100300000F91FF900895FF920F931F93CF93DF9368
+:10031000F82EEB018A010E94ED00882389F083E02A
+:10032000CC0FDD1F8A95E1F7C00FD11FC45EDE4FF1
+:10033000888190E002C095958795FA94E2F78170E4
+:10034000DF91CF911F910F91FF900895FF920F932E
+:100350001F93CF93DF93F82EEB018A010E94ED00EB
+:100360008823A9F0FE0193E0EE0FFF1F9A95E1F7B5
+:10037000E00FF11FE45EFE4F208181E090E002C0BB
+:10038000880F991FFA94E2F7809528232083DF9144
+:10039000CF911F910F91FF9008952130310519F4ED
+:1003A0000E945D0108950E94A60108950BC020E0FF
+:1003B0000000000000000000000000002F5F2A3550
+:1003C000B9F70197009799F7089540E050E010C001
+:1003D000FB01E20FF31FE45EFE4F80832F5F3F4F70
+:1003E00028303105A9F74F5F5F4F4830510549F07C
+:1003F00020E030E0BA01E3E0660F771FEA95E1F70D
+:10040000E7CF08959C018830910530F581E090E0B8
+:1004100002C0880F991F2A95E2F7982F40E050E01C
+:1004200012C0FB01E20FF31FE45EFE4F8081892BB7
+:1004300080832F5F3F4F2830310599F74F5F5F4F23
+:100440004830510549F020E030E0BA01B3E0660FD2
+:10045000771FBA95E1F7E5CF0895823049F08330F0
+:10046000F9F08130A1F5862F90E00E9402020895F4
+:1004700070E06830710558F520E030E08FEFF90149
+:10048000A3E0EE0FFF1FAA95E1F7E60FF71FE45E6A
+:10049000FE4F80832F5F3F4F2830310581F708954D
+:1004A00070E06830710598F420E030E0E3E0660F1A
+:1004B000771FEA95E1F78FEFFB01E20FF31FE45E90
+:1004C000FE4F80832F5F3F4F28303105A9F70895F5
+:1004D000EF92FF920F931F93E82EF62E072F10E056
+:1004E00080E00E94E5018E2D612F0E942D028F2D4C
+:1004F000902F0E94D6011F5F183091F717E080E01F
+:100500000E94E5018E2D612F0E942D028F2D902FCC
+:100510000E94D601115098F71F910F91FF90EF9014
+:1005200008954F925F926F927F929F92AF92BF9287
+:10053000CF92DF92EF92FF920F931F93CF93DF93AF
+:10054000982E162F072F3A0180E00E94E501212FF7
+:10055000302FC9016C01C0E0D0E0B7E04B2E512C28
+:1005600035C06114710431F0F5018081A201481B8E
+:10057000510904C0F7018081482F50E0F3E09F1635
+:1005800019F4CE01B8010DC082E0981621F4CE0115
+:10059000BA01A80106C091E0991629F4CA01B80170
+:1005A000AE010E945D010F5F1F4F0894A11CB11C9A
+:1005B0000894E11CF11C0830110599F62196E8E039
+:1005C000F0E0CE0EDF1EC830D10529F056017601CD
+:1005D00000E010E0C6CFDF91CF911F910F91FF9007
+:1005E000EF90DF90CF90BF90AF909F907F906F90F3
+:1005F0005F904F900895EF92FF920F931F93CF93C8
+:10060000DF9380E00E94E50100E010E08FEEE82E2D
+:1006100082E0F82E5DC080E00E94E501CE0165E039
+:1006200070E00E949908882777FD8095982F0E9496
+:10063000D1058FEF0E94E50164E170E080E090E079
+:100640000E94D105CE0166EF7FEF0E94990888EEE7
+:1006500093E00E9499086F507040C60FD71F1C1678
+:100660001D06CCF264EF71E080E090E00E94D105BD
+:10067000CEEED2E080E00E94E501C7018C1B9D0B0D
+:1006800065E070E00E949908882777FD8095982F93
+:100690000E94D1058FEF0E94E50164E170E080E0E7
+:1006A00090E00E94D105CE0166EF7FEF0E9499088D
+:1006B00088EE93E00E9499086F507040C60FD71FD4
+:1006C0001C161D06BCF20F5F1F4F0230110519F0FA
+:1006D000CEEED2E0A0CFDF91CF911F910F91FF908E
+:1006E000EF9008952F923F924F925F926F927F9278
+:1006F0008F929F92AF92BF92CF92DF92EF92FF9232
+:100700000F931F93DF93CF93CDB7DEB7C158D0407F
+:100710000FB6F894DEBF0FBECDBFCF57DF4F888333
+:10072000C158D0402B013A01490141E4A42EB12C1B
+:10073000AC0EBD1EF50131E8C32ED12CCC0EDD1E52
+:100740001192EC15FD05E1F700E010E01E010894A0
+:10075000211C311C81E088169104C9F414C00E9448
+:100760008B0960E470E00E949908E1E4F0E0EC0F8E
+:10077000FD1FE80FF91F8081882389F70F5F1F4F46
+:1007800091E0908316C0003411054CF312C082E052
+:100790008816910471F4003411055CF4E1E4F0E092
+:1007A000EC0FFD1FE00FF11F80818F5F80830F5FD3
+:1007B0001F4FF501EE24FF249081892F8150863050
+:1007C00010F49F5F90838081873019F40894E11CB6
+:1007D000F11C3196EC15FD0579F7D101F501808109
+:1007E0004114510419F097E0981B892F8C9331968E
+:1007F0001196EC15FD0599F7C3010E94D601CF575C
+:10080000DF4F8881C158D040B10140E050E00E94E4
+:10081000910280E4E816F10409F09CCFCF57DF4F36
+:100820000FB6F894DEBF0FBECDBFCF91DF911F9101
+:100830000F91FF90EF90DF90CF90BF90AF909F907F
+:100840008F907F906F905F904F903F902F90089582
+:100850008F929F92AF92BF92CF92DF92EF92FF92D0
+:100860000F931F93CF93DF934C018B016130710580
+:1008700011F480E001C08FEF0E94E501C0E0D0E0FC
+:100880000E948B0968E070E00E949908B82EA92E9A
+:100890000E948B0968E070E00E949908D82EC92E4A
+:1008A0000E948B0968E070E00E949908F82EE92EFA
+:1008B0000115110559F48B2D9A2D6D2D7C2D4F2D81
+:1008C0005E2D0E9483018130D9F60DC001301105E3
+:1008D000B9F68B2D9A2D6D2D7C2D4F2D5E2D0E94FE
+:1008E0008301882369F68B2D9A2D6D2D7C2D4F2D3C
+:1008F0005E2D98010E94CD01C4010E94D60121966F
+:1009000081E0CF3FD80709F0BBCFDF91CF911F9196
+:100910000F91FF90EF90DF90CF90BF90AF909F909E
+:100920008F900895FF920F931F930E94420168EEEB
+:1009300073E080E090E00E94D105FF241EC0812F6B
+:10094000602F4F2D21E00E94010165E070E080E002
+:1009500090E00E94D10564E670E080E090E00E94A3
+:10096000D1051F5F183059F70F5F083011F010E004
+:10097000E6CFF39488E0F81611F000E0F8CF68EEC7
+:1009800073E080E090E00E94D1050E94420183E084
+:1009900090E06CEB72E00E94680282E090E06CEB09
+:1009A00072E00E94680281E090E06CEB72E00E94CD
+:1009B00068020E94FB028BE490E061E070E00E941C
+:1009C00028048BE490E060E070E00E94280410E0CE
+:1009D00081E060E070E046EB53E022E030E00E940E
+:1009E000720381E061E070E046EB53E022E030E02A
+:1009F0000E94720382E060E070E046EB53E022E088
+:100A000030E00E94720382E061E070E046EB53E068
+:100A100022E030E00E94720383E060E070E046EB89
+:100A200053E022E030E00E94720383E061E070E076
+:100A300046EB53E022E030E00E9472031F5F1A3061
+:100A400039F61F910F91FF9008950F931F930AEEAF
+:100A500011E0C80140E855E260E070E00E946306E2
+:100A600068EE73E080E090E00E94D105C80160E08C
+:100A700071E00E948E088FEF84B98CEF8AB915B8A7
+:100A80008BB183708BB9E0EBF0E01082A1EBB0E0AA
+:100A90001C9280818260808382E38093B3001092F5
+:100AA000B2008C9186608C93E0E7F0E080818260F8
+:100AB00080831F910F9108950E94F7050E942505DC
+:100AC0000E949204FDCF1F920F920FB60F92112435
+:100AD0002F933F938F939F93AF93BF938091610127
+:100AE00090916201A0916301B09164013091650120
+:100AF0000196A11DB11D232F2D5F2D3720F02D57FD
+:100B00000196A11DB11D2093650180936101909311
+:100B10006201A0936301B093640180915D019091A3
+:100B20005E01A0915F01B09160010196A11DB11D10
+:100B300080935D0190935E01A0935F01B09360018B
+:100B4000BF91AF919F918F913F912F910F900FBEC9
+:100B50000F901F9018959FB7F89420915D013091E8
+:100B60005E0140915F015091600186B5A89B06C06F
+:100B70008F3F21F02F5F3F4F4F4F5F4F9FBF542F4D
+:100B8000432F322F2227280F311D411D511D82E096
+:100B9000220F331F441F551F8A95D1F7B901CA018F
+:100BA0000895EF92FF920F931F93CF93DF937B01F2
+:100BB0008C010E94AB05EB010EC00E94AB056C1BC3
+:100BC0007D0B685E7340C8F30894E108F1080109E1
+:100BD0001109C851DC4FE114F1040105110569F751
+:100BE000DF91CF911F910F91FF90EF90089578942E
+:100BF00084B5826084BD84B5816084BD85B5826022
+:100C000085BD85B5816085BDEEE6F0E080818160BF
+:100C10008083E1E8F0E010828081826080838081BF
+:100C200081608083E0E8F0E0808181608083E1EB97
+:100C3000F0E0808184608083E0EBF0E0808181607F
+:100C40008083EAE7F0E08081846080838081826035
+:100C5000808380818160808380818068808310921E
+:100C6000C10008951F920F920FB60F9211242F9377
+:100C70003F934F938F939F93EF93FF934091C600C1
+:100C8000E091E601F091E70131969F012F773070F6
+:100C900031978091E8019091E9012817390739F0DF
+:100CA000EA59FE4F40833093E7012093E601FF911C
+:100CB000EF919F918F914F913F912F910F900FBE88
+:100CC0000F901F901895CF93DF93EC019A01AB0121
+:100CD000E885F985203081EE380780E0480780E01C
+:100CE000580709F449C081E090E00A8802C0880FE3
+:100CF000991F0A94E2F7808360E079E08DE390E049
+:100D00000E94CE082150304040405040CA01B901F5
+:100D100022E030E040E050E00E94CE08EC81FD810E
+:100D20003083EE81FF812083EA85FB85208141E0CD
+:100D300050E0CA010E8402C0880F991F0A94E2F79E
+:100D4000282B2083EA85FB852081CA010F8402C0FD
+:100D5000880F991F0A94E2F7282B2083EA85FB85E8
+:100D60008081088802C0440F551F0A94E2F7842B43
+:100D70008083DF91CF910895108220E130E0CECFC3
+:100D8000DC011296ED91FC911397E058FF4F2191F1
+:100D9000319180819181281B390B2F773070C901E7
+:100DA0000895DC011296ED91FC911397EE57FF4FD9
+:100DB0002081318192918291E058F040821793070F
+:100DC00019F42FEF3FEF05C0E20FF31F8081282FAA
+:100DD00030E0C9010895DC011296ED91FC91139762
+:100DE000DF01AE57BF4F2D913C911197E058FF4F57
+:100DF00080819181E058F0408217930719F42FEF1A
+:100E00003FEF0BC0E20FF31F80812F5F3F4F2F7723
+:100E100030702D933C93282F30E0C9010895DC01F8
+:100E20001296ED91FC911397EE57FF4F80819181BF
+:100E3000929382930895FC01A085B18521898C91BC
+:100E400090E0022E02C0959587950A94E2F780FF04
+:100E5000F6CF0484F585E02D608308958EE091E05F
+:100E60009093EB018093EA0186E691E09093ED0187
+:100E70008093EC0185EC90E09093EF018093EE017C
+:100E800084EC90E09093F1018093F00180EC90E08D
+:100E90009093F3018093F20181EC90E09093F5013F
+:100EA0008093F40186EC90E09093F7018093F60133
+:100EB00084E08093F80183E08093F90187E08093D8
+:100EC000FA0185E08093FB0181E08093FC010895A5
+:100ED0000F931F93CF93DF938C01EB0109C02196F1
+:100EE000D801ED91FC910190F081E02DC8010995A8
+:100EF00068816623A1F7DF91CF911F910F9108952B
+:100F0000EF92FF920F931F93CF93DF938C017B019E
+:100F1000EA010CC0D7016D917D01D801ED91FC91E2
+:100F20000190F081E02DC80109952197209791F754
+:100F3000DF91CF911F910F91FF90EF900895DC0109
+:100F4000ED91FC910280F381E02D099508952F9297
+:100F50003F924F925F926F927F928F929F92AF9249
+:100F6000BF92CF92DF92EF92FF920F931F93DF9386
+:100F7000CF93CDB7DEB7A0970FB6F894DEBF0FBE04
+:100F8000CDBF1C016A017B01411551056105710549
+:100F900049F440E350E060E070E020E030E00E947F
+:100FA000410856C0882499245401422E55246624B1
+:100FB000772401E010E00C0F1D1F080D191DC7015B
+:100FC000B601A30192010E94AC08F8016083089465
+:100FD000811C911CA11CB11CC701B601A301920187
+:100FE0000E94AC08C901DA016C017D01C114D10471
+:100FF000E104F104F1F681E0E82EF12CEC0EFD1E87
+:10100000E80CF91C3E010894611C711CD501C40157
+:101010000197A109B1096C01C818D90816C0F601D9
+:10102000EE0DFF1D40814A3010F4405D01C0495C67
+:10103000552747FD5095652F752FC10120E030E001
+:101040000E9441080894E108F1086E147F0439F702
+:10105000A0960FB6F894DEBF0FBECDBFCF91DF9143
+:101060001F910F91FF90EF90DF90CF90BF90AF90C6
+:101070009F908F907F906F905F904F903F902F90B8
+:101080000895EF92FF920F931F93CF93DF93EC019C
+:101090007A018B012115310541F4E881F981019034
+:1010A000F081E02D642F09951BC02A303105B1F481
+:1010B00077FF10C04DE250E060E070E020E030E0EB
+:1010C0000E94410810950095F094E094E11CF11CF9
+:1010D000011D111DCE01B801A7012AE00E94A7073A
+:1010E000DF91CF911F910F91FF90EF9008950F9393
+:1010F0001F938C014DE050E060E070E020E030E0B4
+:101100000E944108C8014AE050E060E070E020E041
+:1011100030E00E9441081F910F9108950F931F9393
+:101120008C010E949F07C8010E9477081F910F91B0
+:10113000089597FB092E07260AD077FD04D049D0E1
+:1011400006D000201AF4709561957F4F0895F6F748
+:10115000909581959F4F0895A1E21A2EAA1BBB1B63
+:10116000FD010DC0AA1FBB1FEE1FFF1FA217B30773
+:10117000E407F50720F0A21BB30BE40BF50B661F89
+:10118000771F881F991F1A9469F76095709580954D
+:1011900090959B01AC01BD01CF01089597FB092EED
+:1011A00005260ED057FD04D0D7DF0AD0001C38F436
+:1011B00050954095309521953F4F4F4F5F4F089583
+:1011C000F6F790958095709561957F4F8F4F9F4F63
+:1011D0000895AA1BBB1B51E107C0AA1FBB1FA6177E
+:1011E000B70710F0A61BB70B881F991F5A95A9F7D0
+:1011F00080959095BC01CD0108952F923F924F921A
+:101200005F926F927F928F929F92AF92BF92CF9296
+:10121000DF92EF92FF920F931F93CF93DF93CDB79F
+:10122000DEB7CA1BDB0B0FB6F894DEBF0FBECDBF17
+:1012300009942A88398848885F846E847D848C84E8
+:101240009B84AA84B984C884DF80EE80FD800C81F1
+:101250001B81AA81B981CE0FD11D0FB6F894DEBFD4
+:101260000FBECDBFED010895EE0FFF1F0590F49165
+:10127000E02D0994A0E0B0E0E0E4F9E00C94050969
+:10128000EC01A880B980CA80DB80A114B104C1043C
+:10129000D10441F484E2A82E89EDB82E8BE5C82E46
+:1012A00087E0D82EC601B5012DE133EF41E050E0D3
+:1012B0000E94CE0827EA31E440E050E00E949B09FA
+:1012C0007B018C01C601B5012DE133EF41E050E017
+:1012D0000E94CE08CA01B9012CEE34EF4FEF5FEF48
+:1012E0000E949B096E0D7F1D801F911F97FF04C0F8
+:1012F0006150704080409048688379838A839B83E3
+:101300009B013F77C901CDB7DEB7EAE00C94210914
+:101310000E943A09089586E091E00E943A090895F2
+:10132000A0E0B0E08093060190930701A09308012C
+:10133000B09309010895629FD001739FF001829FCD
+:10134000E00DF11D649FE00DF11D929FF00D839F54
+:10135000F00D749FF00D659FF00D9927729FB00DF1
+:10136000E11DF91F639FB00DE11DF91FBD01CF0104
+:0813700011240895F894FFCF49
+:10137800626567696E0001000000000000001B073D
+:0C13880068078007C006EB06D1060F07BF
+:00000001FF
diff --git a/test/applet/wiring.d b/test/applet/wiring.d
new file mode 100644
index 0000000..8983a5e
--- /dev/null
+++ b/test/applet/wiring.d
@@ -0,0 +1,22 @@
+applet/wiring.o applet/wiring.d: ardmake/hardware/cores/arduino/wiring.c \
+ ardmake/hardware/cores/arduino/wiring_private.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/avr/io.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/avr/sfr_defs.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/inttypes.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/stdint.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/avr/iom328p.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/avr/portpins.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/avr/common.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/avr/version.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/avr/fuse.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/avr/lock.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/avr/interrupt.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/avr/delay.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/stdio.h \
+ /usr/lib/gcc/avr/4.3.5/include/stdarg.h \
+ /usr/lib/gcc/avr/4.3.5/include/stddef.h \
+ ardmake/hardware/cores/arduino/wiring.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/stdlib.h \
+ ardmake/hardware/cores/arduino/binary.h
diff --git a/test/applet/wiring_analog.d b/test/applet/wiring_analog.d
new file mode 100644
index 0000000..098a29c
--- /dev/null
+++ b/test/applet/wiring_analog.d
@@ -0,0 +1,24 @@
+applet/wiring_analog.o applet/wiring_analog.d: ardmake/hardware/cores/arduino/wiring_analog.c \
+ ardmake/hardware/cores/arduino/wiring_private.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/avr/io.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/avr/sfr_defs.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/inttypes.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/stdint.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/avr/iom328p.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/avr/portpins.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/avr/common.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/avr/version.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/avr/fuse.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/avr/lock.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/avr/interrupt.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/avr/delay.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/stdio.h \
+ /usr/lib/gcc/avr/4.3.5/include/stdarg.h \
+ /usr/lib/gcc/avr/4.3.5/include/stddef.h \
+ ardmake/hardware/cores/arduino/wiring.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/stdlib.h \
+ ardmake/hardware/cores/arduino/binary.h \
+ ardmake/hardware/cores/arduino/pins_arduino.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/avr/pgmspace.h
diff --git a/test/applet/wiring_digital.d b/test/applet/wiring_digital.d
new file mode 100644
index 0000000..a29fcb4
--- /dev/null
+++ b/test/applet/wiring_digital.d
@@ -0,0 +1,24 @@
+applet/wiring_digital.o applet/wiring_digital.d: ardmake/hardware/cores/arduino/wiring_digital.c \
+ ardmake/hardware/cores/arduino/wiring_private.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/avr/io.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/avr/sfr_defs.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/inttypes.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/stdint.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/avr/iom328p.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/avr/portpins.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/avr/common.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/avr/version.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/avr/fuse.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/avr/lock.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/avr/interrupt.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/avr/delay.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/stdio.h \
+ /usr/lib/gcc/avr/4.3.5/include/stdarg.h \
+ /usr/lib/gcc/avr/4.3.5/include/stddef.h \
+ ardmake/hardware/cores/arduino/wiring.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/stdlib.h \
+ ardmake/hardware/cores/arduino/binary.h \
+ ardmake/hardware/cores/arduino/pins_arduino.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/avr/pgmspace.h
diff --git a/test/applet/wiring_pulse.d b/test/applet/wiring_pulse.d
new file mode 100644
index 0000000..e52f4a7
--- /dev/null
+++ b/test/applet/wiring_pulse.d
@@ -0,0 +1,24 @@
+applet/wiring_pulse.o applet/wiring_pulse.d: ardmake/hardware/cores/arduino/wiring_pulse.c \
+ ardmake/hardware/cores/arduino/wiring_private.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/avr/io.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/avr/sfr_defs.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/inttypes.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/stdint.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/avr/iom328p.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/avr/portpins.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/avr/common.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/avr/version.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/avr/fuse.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/avr/lock.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/avr/interrupt.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/avr/delay.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/stdio.h \
+ /usr/lib/gcc/avr/4.3.5/include/stdarg.h \
+ /usr/lib/gcc/avr/4.3.5/include/stddef.h \
+ ardmake/hardware/cores/arduino/wiring.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/stdlib.h \
+ ardmake/hardware/cores/arduino/binary.h \
+ ardmake/hardware/cores/arduino/pins_arduino.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/avr/pgmspace.h
diff --git a/test/applet/wiring_shift.d b/test/applet/wiring_shift.d
new file mode 100644
index 0000000..aefc3d3
--- /dev/null
+++ b/test/applet/wiring_shift.d
@@ -0,0 +1,22 @@
+applet/wiring_shift.o applet/wiring_shift.d: ardmake/hardware/cores/arduino/wiring_shift.c \
+ ardmake/hardware/cores/arduino/wiring_private.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/avr/io.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/avr/sfr_defs.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/inttypes.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/stdint.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/avr/iom328p.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/avr/portpins.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/avr/common.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/avr/version.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/avr/fuse.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/avr/lock.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/avr/interrupt.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/avr/delay.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/util/delay_basic.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/stdio.h \
+ /usr/lib/gcc/avr/4.3.5/include/stdarg.h \
+ /usr/lib/gcc/avr/4.3.5/include/stddef.h \
+ ardmake/hardware/cores/arduino/wiring.h \
+ /usr/lib/gcc/avr/4.3.5/../../../avr/include/stdlib.h \
+ ardmake/hardware/cores/arduino/binary.h