diff --git a/seminaries/binrep/qtrvsim_binrep/.gitignore b/seminaries/binrep/qtrvsim_binrep/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..f8ec85e26cda2631b0aa986e8dddb1ac25b4844f
--- /dev/null
+++ b/seminaries/binrep/qtrvsim_binrep/.gitignore
@@ -0,0 +1,3 @@
+*.o
+depend
+qtrvsim_binrep
diff --git a/seminaries/binrep/qtrvsim_binrep/Makefile b/seminaries/binrep/qtrvsim_binrep/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..ee9ef9973538a4d03dfcc72955e7a8ae89f1a3b7
--- /dev/null
+++ b/seminaries/binrep/qtrvsim_binrep/Makefile
@@ -0,0 +1,78 @@
+ARCH=riscv64-unknown-elf
+#ARCH=riscv64-linux-gnu
+
+SOURCES = crt0local.S qtrvsim_binrep.c
+TARGET_EXE = qtrvsim_binrep
+
+CC=$(ARCH)-gcc
+CXX=$(ARCH)-g++
+AS=$(ARCH)-as
+LD=$(ARCH)-ld
+OBJCOPY=$(ARCH)-objcopy
+
+ARCHFLAGS += -mabi=ilp32
+ARCHFLAGS += -march=rv32i
+ARCHFLAGS += -fno-lto
+
+CFLAGS  += -ggdb -Os -Wall
+CXXFLAGS+= -ggdb -Os -Wall
+AFLAGS  += -ggdb
+LDFLAGS += -ggdb
+LDFLAGS += -nostartfiles
+LDFLAGS += -nostdlib
+LDFLAGS += -static
+#LDFLAGS += -specs=/opt/musl/riscv64-linux-gnu/lib/musl-gcc.specs
+
+CFLAGS  += $(ARCHFLAGS)
+CXXFLAGS+= $(ARCHFLAGS)
+AFLAGS  += $(ARCHFLAGS)
+LDFLAGS += $(ARCHFLAGS)
+
+OBJECTS += $(filter %.o,$(SOURCES:%.S=%.o))
+OBJECTS += $(filter %.o,$(SOURCES:%.c=%.o))
+OBJECTS += $(filter %.o,$(SOURCES:%.cpp=%.o))
+
+all : default
+
+.PHONY : default clean dep all
+
+%.o:%.S
+	$(CC) -D__ASSEMBLY__ $(AFLAGS) -c $< -o $@
+
+%.o:%.c
+	$(CC) $(CFLAGS) $(CPPFLAGS) -c $< -o $@
+
+%.o:%.cpp
+	$(CXX) $(CXXFLAGS) $(CPPFLAGS) -c $<
+
+%.s:%.c
+	$(CC) $(CFLAGS) $(CPPFLAGS) -S $< -o $@
+
+default : $(TARGET_EXE)
+
+$(TARGET_EXE) : $(OBJECTS)
+	$(CC) $(LDFLAGS) $^ -o $@
+
+dep: depend
+
+depend: $(SOURCES) $(glob *.h)
+	echo '# autogenerated dependencies' > depend
+ifneq ($(filter %.S,$(SOURCES)),)
+	$(CC)  -D__ASSEMBLY__ $(AFLAGS) -w -E -M $(filter %.S,$(SOURCES)) \
+	  >> depend
+endif
+ifneq ($(filter %.c,$(SOURCES)),)
+	$(CC) $(CFLAGS) $(CPPFLAGS) -w -E -M $(filter %.c,$(SOURCES)) \
+	  >> depend
+endif
+ifneq ($(filter %.cpp,$(SOURCES)),)
+	$(CXX) $(CXXFLAGS) $(CPPFLAGS) -w -E -M $(filter %.cpp,$(SOURCES)) \
+	  >> depend
+endif
+
+clean:
+	rm -f *.o *.a $(OBJECTS) $(TARGET_EXE) depend
+
+#mips-elf-objdump --source -M no-aliases,reg-names=numeric qtmips_binrep
+
+-include depend
diff --git a/seminaries/binrep/qtrvsim_binrep/crt0local.S b/seminaries/binrep/qtrvsim_binrep/crt0local.S
new file mode 100644
index 0000000000000000000000000000000000000000..57ec197df8c6eeaf2d04783b6d9db065a82ff13d
--- /dev/null
+++ b/seminaries/binrep/qtrvsim_binrep/crt0local.S
@@ -0,0 +1,35 @@
+/* minimal replacement of crt0.o which is else provided by C library */
+
+.globl main
+.globl _start
+.globl __start
+
+.option norelax
+
+.text
+
+__start:
+_start:
+	.option push
+	.option norelax
+	la gp, __global_pointer$
+	.option pop
+	la      sp, __stack_end
+	addi    a0, zero, 0
+	addi    a1, zero, 0
+	jal     main
+quit:
+	addi    a0, zero, 0
+	addi    a7, zero, 93  /* SYS_exit */
+	ecall
+
+loop:	ebreak
+        beq     zero, zero, loop
+
+.bss
+
+__stack_start:
+	.skip   4096
+__stack_end:
+
+.end _start
diff --git a/seminaries/binrep/qtrvsim_binrep/qtrvsim_binrep.c b/seminaries/binrep/qtrvsim_binrep/qtrvsim_binrep.c
new file mode 100644
index 0000000000000000000000000000000000000000..000a5e8f82fb347e82b9f2e7144b2175ab6f765d
--- /dev/null
+++ b/seminaries/binrep/qtrvsim_binrep/qtrvsim_binrep.c
@@ -0,0 +1,183 @@
+/*******************************************************************
+  Simple program to demostrate binary reprezentation
+  on QtMips emulator developed by Karel Koci and Pavel Pisa.
+
+  qrmips_binrep.c       - main and only file
+
+  (C) Copyright 2004 - 2019 by Pavel Pisa
+      e-mail:   pisa@cmp.felk.cvut.cz
+      homepage: http://cmp.felk.cvut.cz/~pisa
+      work:     http://www.pikron.com/
+      license:  any combination GPL, LGPL, MPL or BSD licenses
+
+ *******************************************************************/
+
+#define _POSIX_C_SOURCE 200112L
+
+//#include <stdint.h>
+typedef unsigned int uint32_t;
+
+/*
+ * Next macros provides location of knobs and LEDs peripherals
+ * implemented on QtMips simulator.
+ *
+ * More information can be found on page
+ *   https://github.com/ppisa/QtMips
+ */
+
+
+/*
+ * Base address of the region where simple serial port (UART)
+ * implementation is mapped in emulated MIPS address space
+ */
+#define SERIAL_PORT_BASE   0xffffc000
+/*
+ * Byte offset of the 32-bit transition status register
+ * of the serial port
+ */
+#define SERP_TX_ST_REG_o         0x08
+
+/*
+ * Mask of the bit which inform that peripheral is ready to accept
+ * next character to send. If it is zero, then peripheral is
+ * busy by sending of previous character.
+ */
+#define SERP_TX_ST_REG_READY_m    0x1
+/*
+ * Byte offset of the UART transmit register.
+ * When the 32-bit word is written the least-significant (LSB)
+ * eight bits are send to the terminal.
+ */
+#define SERP_TX_DATA_REG_o        0x0c
+
+/*
+ * Base address of the region where knobs and LEDs peripherals
+ * are mapped in the emulated MIPS physical memory address space.
+ */
+#define SPILED_REG_BASE      0xffffc100
+
+/* Valid address range for the region */
+#define SPILED_REG_SIZE      0x00000100
+
+/*
+ * Byte offset of the register which controls individual LEDs
+ * in the row of 32 yellow LEDs. When the corresponding bit
+ * is set (value 1) then the LED is lit.
+ */
+#define SPILED_REG_LED_LINE_o           0x004
+
+/*
+ * The register to control 8 bit RGB components of brightness
+ * of the first RGB LED
+ */
+#define SPILED_REG_LED_RGB1_o           0x010
+
+/*
+ * The register to control 8 bit RGB components of brightness
+ * of the second RGB LED
+ */
+#define SPILED_REG_LED_RGB2_o           0x014
+
+/*
+ * The register which combines direct write to RGB signals
+ * of the RGB LEDs, write to the keyboard scan register
+ * and control of the two additional individual LEDs.
+ * The direct write to RGB signals is orred with PWM
+ * signal generated according to the values in previous
+ * registers.
+ */
+#define SPILED_REG_LED_KBDWR_DIRECT_o   0x018
+
+/*
+ * Register providing access to unfiltered encoder channels
+ * and keyboard return signals.
+ */
+#define SPILED_REG_KBDRD_KNOBS_DIRECT_o 0x020
+
+/*
+ * The register representing knobs positions as three
+ * 8-bit values where each value is incremented
+ * and decremented by the knob relative turning.
+ */
+#define SPILED_REG_KNOBS_8BIT_o         0x024
+
+
+static inline void serp_write_reg(uint32_t base, uint32_t reg, uint32_t val)
+{
+  *(volatile uint32_t *)(base + reg) = val;
+}
+static inline uint32_t serp_read_reg(uint32_t base, uint32_t reg)
+{
+  return *(volatile uint32_t *)(base + reg);
+}
+
+/*
+ * Send single byte by UART port to a terminal, wait for ready
+ * to send first.
+ */
+void serp_tx_byte(int data)
+{
+  while (!(serp_read_reg(SERIAL_PORT_BASE, SERP_TX_ST_REG_o) &
+                SERP_TX_ST_REG_READY_m));
+  serp_write_reg(SERIAL_PORT_BASE, SERP_TX_DATA_REG_o, data);
+}
+
+/*
+ * Write 32-bit hexadecimal number to the terminal.
+ */
+void serp_send_hex(unsigned int val)
+{
+  int i;
+  for (i = 8; i > 0; i--) {
+    char c = (val >> 28) & 0xf;
+    if (c < 10 )
+      c += '0';
+    else
+      c += 'A' - 10;
+    serp_tx_byte(c);
+    val <<= 4;
+  }
+}
+
+/*
+ * The main entry into example program
+ */
+int main(int argc, char *argv[])
+{
+  unsigned char *mem_base = (unsigned char *)SPILED_REG_BASE;
+
+  while (1) {
+     uint32_t rgb_knobs_value;
+     unsigned int uint_val;
+
+     /*
+      * Access register holding 8 bit relative knobs position
+      * The type "(volatile uint32_t*)" casts address obtained
+      * as a sum of base address and register offset to the
+      * pointer type which target in memory type is 32-bit unsigned
+      * integer. The "volatile" keyword ensures that compiler
+      * cannot reuse previously read value of the location.
+      */
+     rgb_knobs_value = *(volatile uint32_t*)(mem_base + SPILED_REG_KNOBS_8BIT_o);
+
+     /* Store the read value to the register controlling individual LEDs */
+     *(volatile uint32_t*)(mem_base + SPILED_REG_LED_LINE_o) = rgb_knobs_value;
+
+     /*
+      * Store RGB knobs values to the corersponding components controlling
+      * a color/brightness of the RGB LEDs
+      */
+     *(volatile uint32_t*)(mem_base + SPILED_REG_LED_RGB1_o) = rgb_knobs_value;
+
+     *(volatile uint32_t*)(mem_base + SPILED_REG_LED_RGB2_o) = ~rgb_knobs_value;
+
+     /* Assign value read from knobs to the basic signed and unsigned types */
+     uint_val = rgb_knobs_value;
+
+     /* Print values */
+     serp_send_hex(uint_val);
+     serp_tx_byte('\n');
+  }
+
+  return 0;
+}
diff --git a/seminaries/qtrvsim/qtmips_template/change_me.S b/seminaries/qtrvsim/qtmips_template/change_me.S
index 45d3f50a711c720d117197813916ef088567d2d2..ffe119a5c4f9e66eef48108e4b6651bad5f7ed32 100644
--- a/seminaries/qtrvsim/qtmips_template/change_me.S
+++ b/seminaries/qtrvsim/qtmips_template/change_me.S
@@ -3,6 +3,8 @@
 .globl _start
 .globl __start
 
+.option norelax
+
 .text
 
 __start: