diff --git a/worksheet4/demo.elf b/worksheet4/demo.elf
new file mode 100755
index 0000000000000000000000000000000000000000..9ec92995a786f487da69ef370a77560c02921b83
Binary files /dev/null and b/worksheet4/demo.elf differ
diff --git a/worksheet4/main.c b/worksheet4/main.c
index 043085cc2b1294e195bcd5f938c038253a817872..bc35178694da94b324cca518d9a5f111f789d5a0 100644
--- a/worksheet4/main.c
+++ b/worksheet4/main.c
@@ -35,6 +35,18 @@ int __io_putchar(int c) {
 	return c;
 }
 
+// Writing my own getchar() routine:
+
+int __io_getchar(void) {
+	/* WAit until ready to receive */
+	while (USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET)
+	{
+	}
+	
+	return USART_ReceiveData(USART2);
+}
+
+
 void COMPortInit ( void ) {
 
 	USART_InitTypeDef USART_InitStructure;
diff --git a/worksheet4/main.d b/worksheet4/main.d
new file mode 100644
index 0000000000000000000000000000000000000000..7b2746dcb5d57c729a1a3b0c937e60c3f93fb19d
--- /dev/null
+++ b/worksheet4/main.d
@@ -0,0 +1,8 @@
+main.o: main.c com_port.h \
+ ../STM32F10x_StdPeriph_Lib_V3.5.0/Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x/stm32f10x.h \
+ ../STM32F10x_StdPeriph_Lib_V3.5.0/Libraries/CMSIS/CM3/CoreSupport/core_cm3.h \
+ ../STM32F10x_StdPeriph_Lib_V3.5.0/Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x/system_stm32f10x.h \
+ stm32f10x_conf.h \
+ ../STM32F10x_StdPeriph_Lib_V3.5.0/Libraries/STM32F10x_StdPeriph_Driver/inc/stm32f10x_rcc.h \
+ ../STM32F10x_StdPeriph_Lib_V3.5.0/Libraries/STM32F10x_StdPeriph_Driver/inc/stm32f10x_gpio.h \
+ ../STM32F10x_StdPeriph_Lib_V3.5.0/Libraries/STM32F10x_StdPeriph_Driver/inc/stm32f10x_usart.h
diff --git a/worksheet4/main.o b/worksheet4/main.o
new file mode 100644
index 0000000000000000000000000000000000000000..73ced1d515151db36420673a46221a6dfbe03af7
Binary files /dev/null and b/worksheet4/main.o differ
diff --git a/worksheet4/startup_stm32f10x.d b/worksheet4/startup_stm32f10x.d
new file mode 100644
index 0000000000000000000000000000000000000000..a00073c6554414e1abea2c04d114aa57008e8737
--- /dev/null
+++ b/worksheet4/startup_stm32f10x.d
@@ -0,0 +1,5 @@
+startup_stm32f10x.o: startup_stm32f10x.c \
+ ../STM32F10x_StdPeriph_Lib_V3.5.0/Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x/stm32f10x.h \
+ ../STM32F10x_StdPeriph_Lib_V3.5.0/Libraries/CMSIS/CM3/CoreSupport/core_cm3.h \
+ ../STM32F10x_StdPeriph_Lib_V3.5.0/Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x/system_stm32f10x.h \
+ stm32f10x_conf.h
diff --git a/worksheet4/startup_stm32f10x.o b/worksheet4/startup_stm32f10x.o
new file mode 100644
index 0000000000000000000000000000000000000000..7b88cfbdc65d93ead6d5cf427616682e1a589a13
Binary files /dev/null and b/worksheet4/startup_stm32f10x.o differ
diff --git a/worksheet4/stm32f10x_gpio.d b/worksheet4/stm32f10x_gpio.d
new file mode 100644
index 0000000000000000000000000000000000000000..c12cab031c386eb804aaa3a893838ad025391d98
--- /dev/null
+++ b/worksheet4/stm32f10x_gpio.d
@@ -0,0 +1,8 @@
+stm32f10x_gpio.o: \
+ ../STM32F10x_StdPeriph_Lib_V3.5.0/Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_gpio.c \
+ ../STM32F10x_StdPeriph_Lib_V3.5.0/Libraries/STM32F10x_StdPeriph_Driver/inc/stm32f10x_gpio.h \
+ ../STM32F10x_StdPeriph_Lib_V3.5.0/Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x/stm32f10x.h \
+ ../STM32F10x_StdPeriph_Lib_V3.5.0/Libraries/CMSIS/CM3/CoreSupport/core_cm3.h \
+ ../STM32F10x_StdPeriph_Lib_V3.5.0/Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x/system_stm32f10x.h \
+ stm32f10x_conf.h \
+ ../STM32F10x_StdPeriph_Lib_V3.5.0/Libraries/STM32F10x_StdPeriph_Driver/inc/stm32f10x_rcc.h
diff --git a/worksheet4/stm32f10x_gpio.o b/worksheet4/stm32f10x_gpio.o
new file mode 100644
index 0000000000000000000000000000000000000000..de9538c55f9a1737651023e992f51350dce6289d
Binary files /dev/null and b/worksheet4/stm32f10x_gpio.o differ
diff --git a/worksheet4/stm32f10x_rcc.d b/worksheet4/stm32f10x_rcc.d
new file mode 100644
index 0000000000000000000000000000000000000000..c078201e49b25aabe65c8cf8ea9098c08a9402b6
--- /dev/null
+++ b/worksheet4/stm32f10x_rcc.d
@@ -0,0 +1,7 @@
+stm32f10x_rcc.o: \
+ ../STM32F10x_StdPeriph_Lib_V3.5.0/Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_rcc.c \
+ ../STM32F10x_StdPeriph_Lib_V3.5.0/Libraries/STM32F10x_StdPeriph_Driver/inc/stm32f10x_rcc.h \
+ ../STM32F10x_StdPeriph_Lib_V3.5.0/Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x/stm32f10x.h \
+ ../STM32F10x_StdPeriph_Lib_V3.5.0/Libraries/CMSIS/CM3/CoreSupport/core_cm3.h \
+ ../STM32F10x_StdPeriph_Lib_V3.5.0/Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x/system_stm32f10x.h \
+ stm32f10x_conf.h
diff --git a/worksheet4/stm32f10x_rcc.o b/worksheet4/stm32f10x_rcc.o
new file mode 100644
index 0000000000000000000000000000000000000000..5dcdea8c2b1a9bd1c54a9522e6ea112c3a52752e
Binary files /dev/null and b/worksheet4/stm32f10x_rcc.o differ
diff --git a/worksheet4/stm32f10x_usart.d b/worksheet4/stm32f10x_usart.d
new file mode 100644
index 0000000000000000000000000000000000000000..77eb9c607891348e70d0ece6f378e923687c05e4
--- /dev/null
+++ b/worksheet4/stm32f10x_usart.d
@@ -0,0 +1,8 @@
+stm32f10x_usart.o: \
+ ../STM32F10x_StdPeriph_Lib_V3.5.0/Libraries/STM32F10x_StdPeriph_Driver/src/stm32f10x_usart.c \
+ ../STM32F10x_StdPeriph_Lib_V3.5.0/Libraries/STM32F10x_StdPeriph_Driver/inc/stm32f10x_usart.h \
+ ../STM32F10x_StdPeriph_Lib_V3.5.0/Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x/stm32f10x.h \
+ ../STM32F10x_StdPeriph_Lib_V3.5.0/Libraries/CMSIS/CM3/CoreSupport/core_cm3.h \
+ ../STM32F10x_StdPeriph_Lib_V3.5.0/Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x/system_stm32f10x.h \
+ stm32f10x_conf.h \
+ ../STM32F10x_StdPeriph_Lib_V3.5.0/Libraries/STM32F10x_StdPeriph_Driver/inc/stm32f10x_rcc.h
diff --git a/worksheet4/stm32f10x_usart.o b/worksheet4/stm32f10x_usart.o
new file mode 100644
index 0000000000000000000000000000000000000000..6e0eb3dfbbe6b519c5af6f52c22746296877cc04
Binary files /dev/null and b/worksheet4/stm32f10x_usart.o differ
diff --git a/worksheet4/system_stm32f10x.d b/worksheet4/system_stm32f10x.d
new file mode 100644
index 0000000000000000000000000000000000000000..0d16cc37b7f4de939ff02383d346bfe8785e6dc5
--- /dev/null
+++ b/worksheet4/system_stm32f10x.d
@@ -0,0 +1,6 @@
+system_stm32f10x.o: \
+ ../STM32F10x_StdPeriph_Lib_V3.5.0/Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x/system_stm32f10x.c \
+ ../STM32F10x_StdPeriph_Lib_V3.5.0/Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x/stm32f10x.h \
+ ../STM32F10x_StdPeriph_Lib_V3.5.0/Libraries/CMSIS/CM3/CoreSupport/core_cm3.h \
+ ../STM32F10x_StdPeriph_Lib_V3.5.0/Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x/system_stm32f10x.h \
+ stm32f10x_conf.h
diff --git a/worksheet4/system_stm32f10x.o b/worksheet4/system_stm32f10x.o
new file mode 100644
index 0000000000000000000000000000000000000000..fb5348fcd39106f250d845ce65c177b1cfc81aeb
Binary files /dev/null and b/worksheet4/system_stm32f10x.o differ