From 63f35ed24539d095487cfb009b75dfe0a92dde70 Mon Sep 17 00:00:00 2001
From: Dutsadi Bunliang <dutbu586@student.liu.se>
Date: Tue, 26 May 2020 09:41:45 +0200
Subject: [PATCH] Passed all labs

---
 chap1/Makefile               |  16 ++
 chap1/embedded.bin           | Bin 0 -> 7462 bytes
 chap1/floppy.img             | Bin 0 -> 1474560 bytes
 chap1/link.map               | 157 +++++++++++
 chap1/main.c                 |  14 +
 chap1/main.o                 | Bin 0 -> 2380 bytes
 chap1/makeNrun.sh            |  16 ++
 chap1/mtools.conf            |   6 +
 chap2/a.out                  | Bin 0 -> 13008 bytes
 chap2/displayLog.txt         | 121 +++++++++
 chap2/displayLog_Correct.txt | 121 +++++++++
 chap2/diss.txt               |  33 +++
 chap2/inputData.txt          |  40 +++
 chap2/main.c                 | 370 ++++++++++++++++++++++++++
 chap2/main.c.save            | 334 +++++++++++++++++++++++
 chap2/main.c.save.1          | 368 ++++++++++++++++++++++++++
 chap2/outputLog.txt          |  41 +++
 chap2/outputLog_Correct.txt  |  41 +++
 chap3.1/Makefile             |  16 ++
 chap3.1/chapter3_1.txt       |  51 ++++
 chap3.1/embedded.bin         | Bin 0 -> 8875 bytes
 chap3.1/floppy.img           | Bin 0 -> 1474560 bytes
 chap3.1/link.map             | 188 +++++++++++++
 chap3.1/main.c               |  89 +++++++
 chap3.1/main.o               | Bin 0 -> 4196 bytes
 chap3.1/makeNrun.sh          |  16 ++
 chap3.1/mtools.conf          |   6 +
 chap3.2/a.out                | Bin 0 -> 12904 bytes
 chap3.2/main.c               |  71 +++++
 chap3.2/main.c~              |  71 +++++
 chap3.2/questions3_2.txt     |  31 +++
 chap3.2/questions3_2.txt~    |   0
 chap4/Makefile               |  27 ++
 chap4/embedded.bin           | Bin 0 -> 8731 bytes
 chap4/floppy.img             | Bin 0 -> 1474560 bytes
 chap4/link.map               | 160 +++++++++++
 chap4/llmultiply.asm         | 100 +++++++
 chap4/main.c                 | 246 +++++++++++++++++
 chap4/main.o                 | Bin 0 -> 5400 bytes
 chap4/makeNrun.sh            |  16 ++
 chap4/mtools.conf            |   6 +
 chap5/Makefile               |  22 ++
 chap5/embedded.bin           | Bin 0 -> 12265 bytes
 chap5/floppy.img             | Bin 0 -> 1474560 bytes
 chap5/floppy_copy.img        | Bin 0 -> 1474560 bytes
 chap5/inbound.c              |  21 ++
 chap5/inbound.o              | Bin 0 -> 3112 bytes
 chap5/link.map               | 268 +++++++++++++++++++
 chap5/main.c                 |  63 +++++
 chap5/main.o                 | Bin 0 -> 3612 bytes
 chap5/makeNrun.sh            |  23 ++
 chap5/mtools.conf            |   6 +
 chap5/outbound.c             |  36 +++
 chap5/outbound.o             | Bin 0 -> 3516 bytes
 chap5/serial.asm             |  93 +++++++
 chap5/serial.h               |  28 ++
 chap5/serial.o               | Bin 0 -> 1024 bytes
 chap6/Makefile               |  22 ++
 chap6/embedded.bin           | Bin 0 -> 34560 bytes
 chap6/floppy.img             | Bin 0 -> 1474560 bytes
 chap6/floppy_copy.img        | Bin 0 -> 1474560 bytes
 chap6/inbound.c              |  24 ++
 chap6/inbound.o              | Bin 0 -> 3784 bytes
 chap6/link.map               | 430 ++++++++++++++++++++++++++++++
 chap6/main.c                 |  92 +++++++
 chap6/main.o                 | Bin 0 -> 6552 bytes
 chap6/makeNrun.sh            |  25 ++
 chap6/mtools.conf            |   6 +
 chap6/outbound.c             |  49 ++++
 chap6/outbound.o             | Bin 0 -> 4192 bytes
 chap6/serial.asm             |  94 +++++++
 chap6/serial.h               |  28 ++
 chap6/serial.o               | Bin 0 -> 1024 bytes
 chap7/Makefile               |  22 ++
 chap7/elapsed.c              | 106 ++++++++
 chap7/elapsed.h              |  11 +
 chap7/elapsed.o              | Bin 0 -> 8600 bytes
 chap7/embedded.bin           | Bin 0 -> 27450 bytes
 chap7/floppy.img             | Bin 0 -> 1474560 bytes
 chap7/floppy_copy.img        | Bin 0 -> 1474560 bytes
 chap7/inbound.c              |  42 +++
 chap7/inbound.h              |   3 +
 chap7/inbound.o              | Bin 0 -> 6732 bytes
 chap7/isr.asm                |  64 +++++
 chap7/isr.o                  | Bin 0 -> 1024 bytes
 chap7/link.map               | 497 +++++++++++++++++++++++++++++++++++
 chap7/main.c                 |  45 ++++
 chap7/main.o                 | Bin 0 -> 6396 bytes
 chap7/makeNrun.sh            |  25 ++
 chap7/mtools.conf            |   6 +
 chap7/outbound.c             |  80 ++++++
 chap7/outbound.o             | Bin 0 -> 7724 bytes
 chap7/packet.c               |  79 ++++++
 chap7/packet.h               |   6 +
 chap7/packet.o               | Bin 0 -> 6748 bytes
 chap7/serial.c               |  67 +++++
 chap7/serial.h               |  30 +++
 chap7/serial.o               | Bin 0 -> 6928 bytes
 98 files changed, 5185 insertions(+)
 create mode 100644 chap1/Makefile
 create mode 100644 chap1/embedded.bin
 create mode 100644 chap1/floppy.img
 create mode 100644 chap1/link.map
 create mode 100644 chap1/main.c
 create mode 100644 chap1/main.o
 create mode 100644 chap1/makeNrun.sh
 create mode 100644 chap1/mtools.conf
 create mode 100644 chap2/a.out
 create mode 100644 chap2/displayLog.txt
 create mode 100644 chap2/displayLog_Correct.txt
 create mode 100644 chap2/diss.txt
 create mode 100644 chap2/inputData.txt
 create mode 100644 chap2/main.c
 create mode 100644 chap2/main.c.save
 create mode 100644 chap2/main.c.save.1
 create mode 100644 chap2/outputLog.txt
 create mode 100644 chap2/outputLog_Correct.txt
 create mode 100644 chap3.1/Makefile
 create mode 100644 chap3.1/chapter3_1.txt
 create mode 100644 chap3.1/embedded.bin
 create mode 100644 chap3.1/floppy.img
 create mode 100644 chap3.1/link.map
 create mode 100644 chap3.1/main.c
 create mode 100644 chap3.1/main.o
 create mode 100644 chap3.1/makeNrun.sh
 create mode 100644 chap3.1/mtools.conf
 create mode 100644 chap3.2/a.out
 create mode 100644 chap3.2/main.c
 create mode 100644 chap3.2/main.c~
 create mode 100644 chap3.2/questions3_2.txt
 create mode 100644 chap3.2/questions3_2.txt~
 create mode 100644 chap4/Makefile
 create mode 100644 chap4/embedded.bin
 create mode 100644 chap4/floppy.img
 create mode 100644 chap4/link.map
 create mode 100644 chap4/llmultiply.asm
 create mode 100644 chap4/main.c
 create mode 100644 chap4/main.o
 create mode 100644 chap4/makeNrun.sh
 create mode 100644 chap4/mtools.conf
 create mode 100644 chap5/Makefile
 create mode 100644 chap5/embedded.bin
 create mode 100644 chap5/floppy.img
 create mode 100644 chap5/floppy_copy.img
 create mode 100644 chap5/inbound.c
 create mode 100644 chap5/inbound.o
 create mode 100644 chap5/link.map
 create mode 100644 chap5/main.c
 create mode 100644 chap5/main.o
 create mode 100644 chap5/makeNrun.sh
 create mode 100644 chap5/mtools.conf
 create mode 100644 chap5/outbound.c
 create mode 100644 chap5/outbound.o
 create mode 100644 chap5/serial.asm
 create mode 100644 chap5/serial.h
 create mode 100644 chap5/serial.o
 create mode 100644 chap6/Makefile
 create mode 100644 chap6/embedded.bin
 create mode 100644 chap6/floppy.img
 create mode 100644 chap6/floppy_copy.img
 create mode 100644 chap6/inbound.c
 create mode 100644 chap6/inbound.o
 create mode 100644 chap6/link.map
 create mode 100644 chap6/main.c
 create mode 100644 chap6/main.o
 create mode 100644 chap6/makeNrun.sh
 create mode 100644 chap6/mtools.conf
 create mode 100644 chap6/outbound.c
 create mode 100644 chap6/outbound.o
 create mode 100644 chap6/serial.asm
 create mode 100644 chap6/serial.h
 create mode 100644 chap6/serial.o
 create mode 100644 chap7/Makefile
 create mode 100644 chap7/elapsed.c
 create mode 100644 chap7/elapsed.h
 create mode 100644 chap7/elapsed.o
 create mode 100644 chap7/embedded.bin
 create mode 100644 chap7/floppy.img
 create mode 100644 chap7/floppy_copy.img
 create mode 100644 chap7/inbound.c
 create mode 100644 chap7/inbound.h
 create mode 100644 chap7/inbound.o
 create mode 100644 chap7/isr.asm
 create mode 100644 chap7/isr.o
 create mode 100644 chap7/link.map
 create mode 100644 chap7/main.c
 create mode 100644 chap7/main.o
 create mode 100644 chap7/makeNrun.sh
 create mode 100644 chap7/mtools.conf
 create mode 100644 chap7/outbound.c
 create mode 100644 chap7/outbound.o
 create mode 100644 chap7/packet.c
 create mode 100644 chap7/packet.h
 create mode 100644 chap7/packet.o
 create mode 100644 chap7/serial.c
 create mode 100644 chap7/serial.h
 create mode 100644 chap7/serial.o

diff --git a/chap1/Makefile b/chap1/Makefile
new file mode 100644
index 0000000..a2dbd6f
--- /dev/null
+++ b/chap1/Makefile
@@ -0,0 +1,16 @@
+OBJ    = main.o
+COURSE   = /courses/TDDI11/sw
+LDSCRIPT = $(COURSE)/lib/link.cmd
+BOOTSECT = $(COURSE)/lib/bootload.bin
+INCLUDES = -I "$(COURSE)/include" -I "$(COURSE)/include/djgpp" $(EXTRA_INCLUDES)
+CC       = $(COURSE)/i386-elf-gcc-7.3.0/bin/i386-elf-gcc
+CFLAGS  += -Wall -g $(INCLUDES)
+LD       = $(COURSE)/i386-elf-gcc-7.3.0/bin/i386-elf-ld
+LDFLAGS  = -T$(LDSCRIPT) -static -ustart -Map link.map
+
+embedded.bin: $(OBJ)
+	$(LD) $(OBJ) $(LIBS) $(LDFLAGS)
+%.o: %.c
+	$(CC) $(CFLAGS) -c $<
+clean:
+	\rm -f link.map embedded.bin *~ *.o 
diff --git a/chap1/embedded.bin b/chap1/embedded.bin
new file mode 100644
index 0000000000000000000000000000000000000000..1ca83dd3f559b15ea06e5ad340acfb2697531c56
GIT binary patch
literal 7462
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
GVgLZ$tYVV@

literal 0
HcmV?d00001

diff --git a/chap1/floppy.img b/chap1/floppy.img
new file mode 100644
index 0000000000000000000000000000000000000000..cd374a55ca8f5c5a71a94dfe5eb643954bd05e45
GIT binary patch
literal 1474560
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
zFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF
z0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*
zAut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?
z8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*O
zqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8Umvs
zFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFbYOPU^E0qLtr!n
zMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ON
zU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU
z1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0q
zLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(
zGz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!n
zMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V+JV2#kin
zXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeD
zjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mk
zz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By
z2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1J
zhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kin
zXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQKHo
z4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C
z(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R
z7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7
zfzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z
z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c
z4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C
z(GVB~qaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?
z8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*O
zqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8Umvs
zFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF
z0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*
zAut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?
O8UmvsFd72X3jqKiuX4Wt

literal 0
HcmV?d00001

diff --git a/chap1/link.map b/chap1/link.map
new file mode 100644
index 0000000..3b9e041
--- /dev/null
+++ b/chap1/link.map
@@ -0,0 +1,157 @@
+Archive member included to satisfy reference by file (symbol)
+
+/courses/TDDI11/sw/lib/elf/libepc.a(init-cpu.o)
+                              (start)
+/courses/TDDI11/sw/lib/elf/libepc.a(init-idt.o)
+                              /courses/TDDI11/sw/lib/elf/libepc.a(init-cpu.o) (Init_IDT)
+/courses/TDDI11/sw/lib/elf/libepc.a(init-crt.o)
+                              /courses/TDDI11/sw/lib/elf/libepc.a(init-cpu.o) (Init_CRT)
+/courses/TDDI11/sw/lib/elf/libepc.a(display.o)
+                              main.o (SetCursorPosition)
+/courses/TDDI11/sw/lib/elf/libepc.a(init8259.o)
+                              /courses/TDDI11/sw/lib/elf/libepc.a(init-cpu.o) (Init8259)
+/courses/TDDI11/sw/lib/elf/libepc.a(init8253.o)
+                              /courses/TDDI11/sw/lib/elf/libepc.a(init-cpu.o) (Init8253)
+/courses/TDDI11/sw/lib/elf/libepc.a(checkcpu.o)
+                              /courses/TDDI11/sw/lib/elf/libepc.a(init-cpu.o) (Check_CPU)
+/courses/TDDI11/sw/lib/elf/libepc.a(io.o)
+                              /courses/TDDI11/sw/lib/elf/libepc.a(init-idt.o) (ISR_PIC1)
+/courses/TDDI11/sw/lib/elf/libepc.a(keyboard.o)
+                              /courses/TDDI11/sw/lib/elf/libepc.a(io.o) (Enqueue)
+
+Discarded input sections
+
+ .eh_frame      0x0000000000000000       0x44 main.o
+
+Memory Configuration
+
+Name             Origin             Length             Attributes
+conventional     0x0000000000000000 0x00000000000a0000
+reserved         0x00000000000a0000 0x0000000000060000
+extended         0x0000000000100000 0x00000000fff00000
+*default*        0x0000000000000000 0xffffffffffffffff
+
+Linker script and memory map
+
+LOAD main.o
+LOAD /courses/TDDI11/sw/lib/elf/libepc.a
+LOAD /courses/TDDI11/sw/lib/elf/djgpp/libc.a
+LOAD /courses/TDDI11/sw/i386-elf-gcc-7.3.0/lib/gcc/i386-elf/7.3.0/libgcc.a
+
+.text           0x0000000000000000     0x165c
+                0x0000000000000000                text_frst = .
+ *(.start)
+ .start         0x0000000000000000        0x8 /courses/TDDI11/sw/lib/elf/libepc.a(init-cpu.o)
+                0x0000000000000000                start
+ *(.init)
+ *(.text)
+ .text          0x0000000000000008       0x7a main.o
+                0x0000000000000008                main
+ *fill*         0x0000000000000082        0x2 
+ .text          0x0000000000000084       0x50 /courses/TDDI11/sw/lib/elf/libepc.a(init-cpu.o)
+                0x0000000000000084                Init_CPU
+ .text          0x00000000000000d4      0x5a0 /courses/TDDI11/sw/lib/elf/libepc.a(init-idt.o)
+                0x00000000000004e4                IRQ2INT
+                0x00000000000004f8                _GetISR
+                0x000000000000053c                SetISR
+                0x0000000000000574                Init_IDT
+ .text          0x0000000000000674      0x110 /courses/TDDI11/sw/lib/elf/libepc.a(init-crt.o)
+                0x0000000000000674                Init_CRT
+                0x00000000000006a8                _LastMemoryAddress
+ .text          0x0000000000000784      0x6e0 /courses/TDDI11/sw/lib/elf/libepc.a(display.o)
+                0x0000000000000784                SetCursorVisible
+                0x0000000000000808                _GetCursorRow
+                0x000000000000081c                _GetCursorCol
+                0x0000000000000830                SetCursorPosition
+                0x00000000000008d4                ClearScreen
+                0x000000000000093c                _PutAttb
+                0x0000000000000988                _PutCharAt
+                0x00000000000009b4                _PutChar
+                0x0000000000000a38                PutString
+                0x0000000000000a70                PutUnsigned
+                0x0000000000000aa8                FormatUnsigned
+                0x0000000000000b38                Unsigned2Ascii
+                0x0000000000000bbc                _Cell
+ .text          0x0000000000000e64       0xe0 /courses/TDDI11/sw/lib/elf/libepc.a(init8259.o)
+                0x0000000000000e64                Init8259
+ .text          0x0000000000000f44       0xb0 /courses/TDDI11/sw/lib/elf/libepc.a(init8253.o)
+                0x0000000000000f44                Init8253
+ .text          0x0000000000000ff4       0x98 /courses/TDDI11/sw/lib/elf/libepc.a(checkcpu.o)
+                0x0000000000000ff4                Check_CPU
+ .text          0x000000000000108c       0x60 /courses/TDDI11/sw/lib/elf/libepc.a(io.o)
+                0x000000000000108c                TimerTickISR
+                0x0000000000001098                KeyboardISR
+                0x00000000000010b8                ISR_PIC1
+                0x00000000000010bf                ISR_PIC2
+                0x00000000000010c8                ___main
+                0x00000000000010c9                inportb
+                0x00000000000010d3                outportb
+                0x00000000000010e5                _exit
+ .text          0x00000000000010ec      0x570 /courses/TDDI11/sw/lib/elf/libepc.a(keyboard.o)
+                0x00000000000010ec                ScanCodeRdy
+                0x0000000000001110                GetScanCode
+                0x0000000000001140                ScanCode2Ascii
+                0x0000000000001300                SetsKybdState
+                0x00000000000014f0                Enqueue
+                0x000000000000165b                text_last = (. - 0x1)
+
+.data           0x000000000000165c      0x6ca
+                0x000000000000165c                data_frst = .
+ *(.data)
+ .data          0x000000000000165c        0x0 main.o
+ .data          0x000000000000165c       0x20 /courses/TDDI11/sw/lib/elf/libepc.a(init-cpu.o)
+                0x000000000000167a                code_selector
+ .data          0x000000000000167c       0x90 /courses/TDDI11/sw/lib/elf/libepc.a(init-idt.o)
+ .data          0x000000000000170c       0x10 /courses/TDDI11/sw/lib/elf/libepc.a(init-crt.o)
+ .data          0x000000000000171c       0x30 /courses/TDDI11/sw/lib/elf/libepc.a(display.o)
+ .data          0x000000000000174c        0x0 /courses/TDDI11/sw/lib/elf/libepc.a(init8259.o)
+ .data          0x000000000000174c        0x0 /courses/TDDI11/sw/lib/elf/libepc.a(init8253.o)
+ .data          0x000000000000174c        0xc /courses/TDDI11/sw/lib/elf/libepc.a(io.o)
+                0x000000000000174c                msec
+                0x0000000000001750                old_tick_isr
+                0x0000000000001754                old_kybd_isr
+ .data          0x0000000000001758      0x5a0 /courses/TDDI11/sw/lib/elf/libepc.a(keyboard.o)
+ *(.rodata)
+ .rodata        0x0000000000001cf8       0x2e main.o
+ *(.rodata.str1.1)
+ *(.rodata.str1.32)
+                0x0000000000001d25                data_last = (. - 0x1)
+
+.bss            0x0000000000001d28      0x83c
+                0x0000000000001d28                bss_frst = .
+ *(.bss)
+ .bss           0x0000000000001d28        0x0 main.o
+ .bss           0x0000000000001d28      0x800 /courses/TDDI11/sw/lib/elf/libepc.a(init-idt.o)
+ .bss           0x0000000000002528        0x0 /courses/TDDI11/sw/lib/elf/libepc.a(init-crt.o)
+ .bss           0x0000000000002528        0x8 /courses/TDDI11/sw/lib/elf/libepc.a(display.o)
+ .bss           0x0000000000002530        0x0 /courses/TDDI11/sw/lib/elf/libepc.a(init8259.o)
+ .bss           0x0000000000002530        0x0 /courses/TDDI11/sw/lib/elf/libepc.a(init8253.o)
+ .bss           0x0000000000002530       0x34 /courses/TDDI11/sw/lib/elf/libepc.a(keyboard.o)
+ *(COMMON)
+                0x0000000000002563                bss_last = (. - 0x1)
+
+/DISCARD/
+ *(.eh_frame)
+                0x0000000000002564                stack_frst = (bss_last + 0x1)
+                0x000000000000a563                stack_last = (bss_last + 0x8000)
+                0x000000000000a564                heap_frst = (stack_last + 0x1)
+OUTPUT(embedded.bin binary)
+
+.debug_info     0x0000000000000000       0xa0
+ .debug_info    0x0000000000000000       0xa0 main.o
+
+.debug_abbrev   0x0000000000000000       0x5e
+ .debug_abbrev  0x0000000000000000       0x5e main.o
+
+.debug_aranges  0x0000000000000000       0x20
+ .debug_aranges
+                0x0000000000000000       0x20 main.o
+
+.debug_line     0x0000000000000000       0x3d
+ .debug_line    0x0000000000000000       0x3d main.o
+
+.debug_str      0x0000000000000000       0xc1
+ .debug_str     0x0000000000000000       0xc1 main.o
+
+.comment        0x0000000000000000       0x12
+ .comment       0x0000000000000000       0x12 main.o
diff --git a/chap1/main.c b/chap1/main.c
new file mode 100644
index 0000000..7f62263
--- /dev/null
+++ b/chap1/main.c
@@ -0,0 +1,14 @@
+#include <libepc.h>
+
+int main(int argc, char *argv[])
+{
+   ClearScreen(0x07);
+   SetCursorPosition(0, 0);
+   
+   PutString("dutbu586 and alehe451\r\n");
+   PutString("Date: ");
+   PutString(__DATE__);
+   PutString("\r\n");
+   
+   return 0;
+}
diff --git a/chap1/main.o b/chap1/main.o
new file mode 100644
index 0000000000000000000000000000000000000000..58abd1f3468b9db8e5ec2e778c1b1e35640a5e76
GIT binary patch
literal 2380
zcmb<-^>JflWMqH=Mh0dE1doA1hYccQ0;V(=L>Pn_dVN$_nxB05U-&1q^J!r78<yrb
zJX!27{`~*{zxjwj^BayVhAajImnQ?H7nv`?z<?qzkH*(V;_m=y?)Lq2vN!S1;gr&n
zq*7B0Glj&w6otf`)QnUUQ$t=Z2A9N=R4WAr$ATgS1#<->10w?lUM_|?3=9k`Angn+
zjDZXc3_LOn3=CCZ0R+v&!kU>^!obYP!N<VBz|6$H5=61EYk(*Yb}JCY!a5s7aj=5)
zGBdJG0~xH$z`(%BtO^o>8p}9mG6Mqx>k_yG(?kZ=JzyS4f@vZP0~^as1_lN;mN1Yu
zMnOhZK4ETVK50HdMj<u<aRvq^6$Wl@J8otU1_ov*laGOcMUT;5l9|tn+nQTl(o-0u
z*g;~NlO&@s0|P5714PDCm`Q?xfsLPmo7+>Efq?<!StgJ*&@ccoVV(!EEkRylkOeu9
z@i!kY10y6EFfuSOGUO&^=IJGaR538Hf(;Sn5I*_r^XJcBBAGZC7#VZ&^U@W-1Ss%I
z^NKUm^HNh3k~0#EV46W@Fo2c7r9o=JB47eV*xfHw!P(GI!CcQ+&p<&px1=;L)i%@E
z!c0LoH?b%=1IkWk(9g)vP1T1b1pN>f7f(Y&{p5_q0z(F{^<c9>HYFCNCo>dh<QJ7F
zpjeeylwQWb;O^{frJ&*N7pe)dlYxOj1ma-^#;PC&#u^SrX&x4q4n_tBP*MPeCP*3_
zf-XFa4DJG~Or;FY{LG~_Y)t7qj0}!Poq1Rw$ql3sijngY3&Y3%P+>5In$s8<m>HPC
z;xK|4Dds?8%naZJ2x5XUGXpepf_WhQ98ea7VrJlkFrXwe12>cfp_mzXAq*(V%)k$2
zK`3ShJ_eYHAb$%nFrw%XU|?X7geV1*AU-JTf;kKf3?M#AYH-d;O)LsdE=o<!V+c+y
zaV{+?&MykcFU~B<%+F&8C@l#tDay=C2k94QU|?Y4V_;AN(fkYyhM;uH%D`X-;tMb^
zI70buP(CPsGqN%;fHD@700ToJR6Y$V4+<$pb_NC>kT@3ugCLX^h0-8@FfuVPD1!K$
z3=H}pnhRndBNqdMEtKy9rM;na5R{ID(s584ROW%qD~Ix1p)}YXY>==4$!mecnHU%p
zK<)(PG`-@=+>*p32EF2vA_$!UV-=<5=#`{alrZR}B$gyH=p_{wGw2oNLpUJGl+>is
z^!UuYw0s6V2s<$;sVKFKK@TCDSd^HTo(j^KngdmolbM$a(@<Pe#Gsd)pPQSSR|3(N
znh~E?l$e_eiWTB8s5l3udyrp2IzV*?DE)xgAPkZN(b5bI;1ucr;xI5U%wS<)2w;H5
z4XB7^U;w8-P#Fu-1Ir!jpz2{1NDjmXr9Du3C8W*(6y~7t25DkoU;vq?2W5jOn0Yo(
zbs#YizQe%4umHq>VwgG$G=IEcVPNQh`U4aOph5xUE)O*GY8V+9K<Nc)9K7C*LQ{8(
z5t2U8)q&DFD2KzsuYeVju0UxUBo4DT7tOq1jF9w<ZeAvuKN?se;SVwoRC2(~tAv^d
z3P+F`=1dF>2SE%d289a<x1g!}!NkBI1XTl~Kx#mEB2*nH`GdrHm>C#A`3%GcVUWEb
zx);rT9Z2p2m0Tcopl}A62{Q|%FMyeWL4XlrH>kt|sRNZwpfG}^6_C0F76t}W5Ce)q
Y=75+W|0AoLz{<b?Y7l_rKp3VD08s8CIRF3v

literal 0
HcmV?d00001

diff --git a/chap1/makeNrun.sh b/chap1/makeNrun.sh
new file mode 100644
index 0000000..cdc1361
--- /dev/null
+++ b/chap1/makeNrun.sh
@@ -0,0 +1,16 @@
+#!/bin/bash
+
+clear
+echo "This script includes commands to make the project and run it"
+
+echo "clean up the directory with make clean"
+make clean
+echo "make the project with make."
+make
+echo "Guiding mtools mcopy to its configuration file"
+export MTOOLSRC=mtools.conf
+echo "Copying the binary to floppy image"
+mcopy embedded.bin a:
+echo "Starting Qemu with given binary in the floppy image"
+qemu-system-i386 -drive format=raw,file=floppy.img,if=floppy
+
diff --git a/chap1/mtools.conf b/chap1/mtools.conf
new file mode 100644
index 0000000..c387b85
--- /dev/null
+++ b/chap1/mtools.conf
@@ -0,0 +1,6 @@
+MTOOLS_NO_VFAT=1
+drive a:
+      file="floppy.img"
+      fat_bits=12
+      cylinders=80 heads=2 sectors=18
+      mformat_only
diff --git a/chap2/a.out b/chap2/a.out
new file mode 100644
index 0000000000000000000000000000000000000000..4049cd98b2014569dca6a26752b7057689670805
GIT binary patch
literal 13008
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
LKL`aU(e(oWo`TSm

literal 0
HcmV?d00001

diff --git a/chap2/displayLog.txt b/chap2/displayLog.txt
new file mode 100644
index 0000000..4c37e22
--- /dev/null
+++ b/chap2/displayLog.txt
@@ -0,0 +1,121 @@
+inputCurrent=0
+inputs: Lock=0, Fan=0, AC=0, Desired=14.500000, Measured=0.000000, Humidity=0
+outputs: Green=1, Red=0, Fan=3, Cooler=0, Heater=0, Humidity2H_n=1, Humidity2L_n=0
+inputCurrent=1
+inputs: Lock=1, Fan=0, AC=0, Desired=14.500000, Measured=0.000000, Humidity=0
+outputs: Green=0, Red=1, Fan=3, Cooler=0, Heater=0, Humidity2H_n=1, Humidity2L_n=0
+inputCurrent=15
+inputs: Lock=1, Fan=7, AC=0, Desired=14.500000, Measured=0.000000, Humidity=0
+outputs: Green=0, Red=1, Fan=0, Cooler=0, Heater=0, Humidity2H_n=1, Humidity2L_n=0
+inputCurrent=7
+inputs: Lock=1, Fan=3, AC=0, Desired=14.500000, Measured=0.000000, Humidity=0
+outputs: Green=0, Red=1, Fan=1, Cooler=0, Heater=0, Humidity2H_n=1, Humidity2L_n=0
+inputCurrent=10
+inputs: Lock=0, Fan=5, AC=0, Desired=14.500000, Measured=0.000000, Humidity=0
+outputs: Green=1, Red=0, Fan=2, Cooler=0, Heater=0, Humidity2H_n=1, Humidity2L_n=0
+inputCurrent=0
+inputs: Lock=0, Fan=0, AC=0, Desired=14.500000, Measured=0.000000, Humidity=0
+outputs: Green=1, Red=0, Fan=3, Cooler=0, Heater=0, Humidity2H_n=1, Humidity2L_n=0
+inputCurrent=0
+inputs: Lock=0, Fan=0, AC=0, Desired=14.500000, Measured=0.000000, Humidity=0
+outputs: Green=1, Red=0, Fan=3, Cooler=0, Heater=0, Humidity2H_n=1, Humidity2L_n=0
+inputCurrent=16
+inputs: Lock=0, Fan=0, AC=1, Desired=14.500000, Measured=0.000000, Humidity=0
+outputs: Green=1, Red=0, Fan=3, Cooler=0, Heater=1, Humidity2H_n=1, Humidity2L_n=0
+inputCurrent=32
+inputs: Lock=0, Fan=0, AC=0, Desired=15.000000, Measured=0.000000, Humidity=0
+outputs: Green=1, Red=0, Fan=3, Cooler=0, Heater=0, Humidity2H_n=1, Humidity2L_n=0
+inputCurrent=64
+inputs: Lock=0, Fan=0, AC=0, Desired=15.500000, Measured=0.000000, Humidity=0
+outputs: Green=1, Red=0, Fan=3, Cooler=0, Heater=0, Humidity2H_n=1, Humidity2L_n=0
+inputCurrent=416
+inputs: Lock=0, Fan=0, AC=0, Desired=21.000000, Measured=0.000000, Humidity=0
+outputs: Green=1, Red=0, Fan=3, Cooler=0, Heater=0, Humidity2H_n=1, Humidity2L_n=0
+inputCurrent=640
+inputs: Lock=0, Fan=0, AC=0, Desired=24.500000, Measured=0.000000, Humidity=0
+outputs: Green=1, Red=0, Fan=3, Cooler=0, Heater=0, Humidity2H_n=1, Humidity2L_n=0
+inputCurrent=672
+inputs: Lock=0, Fan=0, AC=0, Desired=25.000000, Measured=0.000000, Humidity=0
+outputs: Green=1, Red=0, Fan=3, Cooler=0, Heater=0, Humidity2H_n=1, Humidity2L_n=0
+inputCurrent=0
+inputs: Lock=0, Fan=0, AC=0, Desired=14.500000, Measured=0.000000, Humidity=0
+outputs: Green=1, Red=0, Fan=3, Cooler=0, Heater=0, Humidity2H_n=1, Humidity2L_n=0
+inputCurrent=1024
+inputs: Lock=0, Fan=0, AC=0, Desired=14.500000, Measured=0.200000, Humidity=0
+outputs: Green=1, Red=0, Fan=3, Cooler=0, Heater=0, Humidity2H_n=1, Humidity2L_n=0
+inputCurrent=158720
+inputs: Lock=0, Fan=0, AC=0, Desired=14.500000, Measured=19.600000, Humidity=0
+outputs: Green=1, Red=0, Fan=3, Cooler=0, Heater=0, Humidity2H_n=1, Humidity2L_n=0
+inputCurrent=180224
+inputs: Lock=0, Fan=0, AC=0, Desired=14.500000, Measured=22.000000, Humidity=0
+outputs: Green=1, Red=0, Fan=3, Cooler=0, Heater=0, Humidity2H_n=1, Humidity2L_n=0
+inputCurrent=245760
+inputs: Lock=0, Fan=0, AC=0, Desired=14.500000, Measured=30.000000, Humidity=0
+outputs: Green=1, Red=0, Fan=3, Cooler=0, Heater=0, Humidity2H_n=1, Humidity2L_n=0
+inputCurrent=253952
+inputs: Lock=0, Fan=0, AC=0, Desired=14.500000, Measured=-1.000000, Humidity=0
+outputs: Green=1, Red=0, Fan=3, Cooler=0, Heater=0, Humidity2H_n=1, Humidity2L_n=0
+inputCurrent=261120
+inputs: Lock=0, Fan=0, AC=0, Desired=14.500000, Measured=31.000000, Humidity=0
+outputs: Green=1, Red=0, Fan=3, Cooler=0, Heater=0, Humidity2H_n=1, Humidity2L_n=0
+inputCurrent=0
+inputs: Lock=0, Fan=0, AC=0, Desired=14.500000, Measured=0.000000, Humidity=0
+outputs: Green=1, Red=0, Fan=3, Cooler=0, Heater=0, Humidity2H_n=1, Humidity2L_n=0
+inputCurrent=262144
+inputs: Lock=0, Fan=0, AC=0, Desired=14.500000, Measured=0.000000, Humidity=4
+outputs: Green=1, Red=0, Fan=3, Cooler=0, Heater=0, Humidity2H_n=1, Humidity2L_n=0
+inputCurrent=524288
+inputs: Lock=0, Fan=0, AC=0, Desired=14.500000, Measured=0.000000, Humidity=8
+outputs: Green=1, Red=0, Fan=3, Cooler=0, Heater=0, Humidity2H_n=1, Humidity2L_n=0
+inputCurrent=786432
+inputs: Lock=0, Fan=0, AC=0, Desired=14.500000, Measured=0.000000, Humidity=11
+outputs: Green=1, Red=0, Fan=3, Cooler=0, Heater=0, Humidity2H_n=1, Humidity2L_n=0
+inputCurrent=1048576
+inputs: Lock=0, Fan=0, AC=0, Desired=14.500000, Measured=0.000000, Humidity=14
+outputs: Green=1, Red=0, Fan=3, Cooler=0, Heater=0, Humidity2H_n=1, Humidity2L_n=0
+inputCurrent=1310720
+inputs: Lock=0, Fan=0, AC=0, Desired=14.500000, Measured=0.000000, Humidity=17
+outputs: Green=1, Red=0, Fan=3, Cooler=0, Heater=0, Humidity2H_n=1, Humidity2L_n=0
+inputCurrent=3670016
+inputs: Lock=0, Fan=0, AC=0, Desired=14.500000, Measured=0.000000, Humidity=44
+outputs: Green=1, Red=0, Fan=3, Cooler=0, Heater=0, Humidity2H_n=1, Humidity2L_n=1
+inputCurrent=6815744
+inputs: Lock=0, Fan=0, AC=0, Desired=14.500000, Measured=0.000000, Humidity=80
+outputs: Green=1, Red=0, Fan=3, Cooler=0, Heater=0, Humidity2H_n=0, Humidity2L_n=1
+inputCurrent=7077888
+inputs: Lock=0, Fan=0, AC=0, Desired=14.500000, Measured=0.000000, Humidity=83
+outputs: Green=1, Red=0, Fan=3, Cooler=0, Heater=0, Humidity2H_n=0, Humidity2L_n=1
+inputCurrent=7340032
+inputs: Lock=0, Fan=0, AC=0, Desired=14.500000, Measured=0.000000, Humidity=87
+outputs: Green=1, Red=0, Fan=3, Cooler=0, Heater=0, Humidity2H_n=0, Humidity2L_n=1
+inputCurrent=7602176
+inputs: Lock=0, Fan=0, AC=0, Desired=14.500000, Measured=0.000000, Humidity=91
+outputs: Green=1, Red=0, Fan=3, Cooler=0, Heater=0, Humidity2H_n=0, Humidity2L_n=1
+inputCurrent=7864320
+inputs: Lock=0, Fan=0, AC=0, Desired=14.500000, Measured=0.000000, Humidity=95
+outputs: Green=1, Red=0, Fan=3, Cooler=0, Heater=0, Humidity2H_n=0, Humidity2L_n=1
+inputCurrent=8126464
+inputs: Lock=0, Fan=0, AC=0, Desired=14.500000, Measured=0.000000, Humidity=100
+outputs: Green=1, Red=0, Fan=3, Cooler=0, Heater=0, Humidity2H_n=0, Humidity2L_n=1
+inputCurrent=172464
+inputs: Lock=0, Fan=0, AC=1, Desired=21.000000, Measured=21.000000, Humidity=0
+outputs: Green=1, Red=0, Fan=3, Cooler=0, Heater=0, Humidity2H_n=1, Humidity2L_n=0
+inputCurrent=159152
+inputs: Lock=0, Fan=0, AC=1, Desired=21.000000, Measured=19.600000, Humidity=0
+outputs: Green=1, Red=0, Fan=3, Cooler=0, Heater=1, Humidity2H_n=1, Humidity2L_n=0
+inputCurrent=180656
+inputs: Lock=0, Fan=0, AC=1, Desired=21.000000, Measured=22.000000, Humidity=0
+outputs: Green=1, Red=0, Fan=3, Cooler=1, Heater=0, Humidity2H_n=1, Humidity2L_n=0
+inputCurrent=159152
+inputs: Lock=0, Fan=0, AC=1, Desired=21.000000, Measured=19.600000, Humidity=0
+outputs: Green=1, Red=0, Fan=3, Cooler=0, Heater=1, Humidity2H_n=1, Humidity2L_n=0
+inputCurrent=172464
+inputs: Lock=0, Fan=0, AC=1, Desired=21.000000, Measured=21.000000, Humidity=0
+outputs: Green=1, Red=0, Fan=3, Cooler=0, Heater=0, Humidity2H_n=1, Humidity2L_n=0
+inputCurrent=246192
+inputs: Lock=0, Fan=0, AC=1, Desired=21.000000, Measured=30.000000, Humidity=0
+outputs: Green=1, Red=0, Fan=3, Cooler=1, Heater=0, Humidity2H_n=1, Humidity2L_n=0
+inputCurrent=172464
+inputs: Lock=0, Fan=0, AC=1, Desired=21.000000, Measured=21.000000, Humidity=0
+outputs: Green=1, Red=0, Fan=3, Cooler=0, Heater=0, Humidity2H_n=1, Humidity2L_n=0
+Reached end of input file! sampleIndex=40
diff --git a/chap2/displayLog_Correct.txt b/chap2/displayLog_Correct.txt
new file mode 100644
index 0000000..4c37e22
--- /dev/null
+++ b/chap2/displayLog_Correct.txt
@@ -0,0 +1,121 @@
+inputCurrent=0
+inputs: Lock=0, Fan=0, AC=0, Desired=14.500000, Measured=0.000000, Humidity=0
+outputs: Green=1, Red=0, Fan=3, Cooler=0, Heater=0, Humidity2H_n=1, Humidity2L_n=0
+inputCurrent=1
+inputs: Lock=1, Fan=0, AC=0, Desired=14.500000, Measured=0.000000, Humidity=0
+outputs: Green=0, Red=1, Fan=3, Cooler=0, Heater=0, Humidity2H_n=1, Humidity2L_n=0
+inputCurrent=15
+inputs: Lock=1, Fan=7, AC=0, Desired=14.500000, Measured=0.000000, Humidity=0
+outputs: Green=0, Red=1, Fan=0, Cooler=0, Heater=0, Humidity2H_n=1, Humidity2L_n=0
+inputCurrent=7
+inputs: Lock=1, Fan=3, AC=0, Desired=14.500000, Measured=0.000000, Humidity=0
+outputs: Green=0, Red=1, Fan=1, Cooler=0, Heater=0, Humidity2H_n=1, Humidity2L_n=0
+inputCurrent=10
+inputs: Lock=0, Fan=5, AC=0, Desired=14.500000, Measured=0.000000, Humidity=0
+outputs: Green=1, Red=0, Fan=2, Cooler=0, Heater=0, Humidity2H_n=1, Humidity2L_n=0
+inputCurrent=0
+inputs: Lock=0, Fan=0, AC=0, Desired=14.500000, Measured=0.000000, Humidity=0
+outputs: Green=1, Red=0, Fan=3, Cooler=0, Heater=0, Humidity2H_n=1, Humidity2L_n=0
+inputCurrent=0
+inputs: Lock=0, Fan=0, AC=0, Desired=14.500000, Measured=0.000000, Humidity=0
+outputs: Green=1, Red=0, Fan=3, Cooler=0, Heater=0, Humidity2H_n=1, Humidity2L_n=0
+inputCurrent=16
+inputs: Lock=0, Fan=0, AC=1, Desired=14.500000, Measured=0.000000, Humidity=0
+outputs: Green=1, Red=0, Fan=3, Cooler=0, Heater=1, Humidity2H_n=1, Humidity2L_n=0
+inputCurrent=32
+inputs: Lock=0, Fan=0, AC=0, Desired=15.000000, Measured=0.000000, Humidity=0
+outputs: Green=1, Red=0, Fan=3, Cooler=0, Heater=0, Humidity2H_n=1, Humidity2L_n=0
+inputCurrent=64
+inputs: Lock=0, Fan=0, AC=0, Desired=15.500000, Measured=0.000000, Humidity=0
+outputs: Green=1, Red=0, Fan=3, Cooler=0, Heater=0, Humidity2H_n=1, Humidity2L_n=0
+inputCurrent=416
+inputs: Lock=0, Fan=0, AC=0, Desired=21.000000, Measured=0.000000, Humidity=0
+outputs: Green=1, Red=0, Fan=3, Cooler=0, Heater=0, Humidity2H_n=1, Humidity2L_n=0
+inputCurrent=640
+inputs: Lock=0, Fan=0, AC=0, Desired=24.500000, Measured=0.000000, Humidity=0
+outputs: Green=1, Red=0, Fan=3, Cooler=0, Heater=0, Humidity2H_n=1, Humidity2L_n=0
+inputCurrent=672
+inputs: Lock=0, Fan=0, AC=0, Desired=25.000000, Measured=0.000000, Humidity=0
+outputs: Green=1, Red=0, Fan=3, Cooler=0, Heater=0, Humidity2H_n=1, Humidity2L_n=0
+inputCurrent=0
+inputs: Lock=0, Fan=0, AC=0, Desired=14.500000, Measured=0.000000, Humidity=0
+outputs: Green=1, Red=0, Fan=3, Cooler=0, Heater=0, Humidity2H_n=1, Humidity2L_n=0
+inputCurrent=1024
+inputs: Lock=0, Fan=0, AC=0, Desired=14.500000, Measured=0.200000, Humidity=0
+outputs: Green=1, Red=0, Fan=3, Cooler=0, Heater=0, Humidity2H_n=1, Humidity2L_n=0
+inputCurrent=158720
+inputs: Lock=0, Fan=0, AC=0, Desired=14.500000, Measured=19.600000, Humidity=0
+outputs: Green=1, Red=0, Fan=3, Cooler=0, Heater=0, Humidity2H_n=1, Humidity2L_n=0
+inputCurrent=180224
+inputs: Lock=0, Fan=0, AC=0, Desired=14.500000, Measured=22.000000, Humidity=0
+outputs: Green=1, Red=0, Fan=3, Cooler=0, Heater=0, Humidity2H_n=1, Humidity2L_n=0
+inputCurrent=245760
+inputs: Lock=0, Fan=0, AC=0, Desired=14.500000, Measured=30.000000, Humidity=0
+outputs: Green=1, Red=0, Fan=3, Cooler=0, Heater=0, Humidity2H_n=1, Humidity2L_n=0
+inputCurrent=253952
+inputs: Lock=0, Fan=0, AC=0, Desired=14.500000, Measured=-1.000000, Humidity=0
+outputs: Green=1, Red=0, Fan=3, Cooler=0, Heater=0, Humidity2H_n=1, Humidity2L_n=0
+inputCurrent=261120
+inputs: Lock=0, Fan=0, AC=0, Desired=14.500000, Measured=31.000000, Humidity=0
+outputs: Green=1, Red=0, Fan=3, Cooler=0, Heater=0, Humidity2H_n=1, Humidity2L_n=0
+inputCurrent=0
+inputs: Lock=0, Fan=0, AC=0, Desired=14.500000, Measured=0.000000, Humidity=0
+outputs: Green=1, Red=0, Fan=3, Cooler=0, Heater=0, Humidity2H_n=1, Humidity2L_n=0
+inputCurrent=262144
+inputs: Lock=0, Fan=0, AC=0, Desired=14.500000, Measured=0.000000, Humidity=4
+outputs: Green=1, Red=0, Fan=3, Cooler=0, Heater=0, Humidity2H_n=1, Humidity2L_n=0
+inputCurrent=524288
+inputs: Lock=0, Fan=0, AC=0, Desired=14.500000, Measured=0.000000, Humidity=8
+outputs: Green=1, Red=0, Fan=3, Cooler=0, Heater=0, Humidity2H_n=1, Humidity2L_n=0
+inputCurrent=786432
+inputs: Lock=0, Fan=0, AC=0, Desired=14.500000, Measured=0.000000, Humidity=11
+outputs: Green=1, Red=0, Fan=3, Cooler=0, Heater=0, Humidity2H_n=1, Humidity2L_n=0
+inputCurrent=1048576
+inputs: Lock=0, Fan=0, AC=0, Desired=14.500000, Measured=0.000000, Humidity=14
+outputs: Green=1, Red=0, Fan=3, Cooler=0, Heater=0, Humidity2H_n=1, Humidity2L_n=0
+inputCurrent=1310720
+inputs: Lock=0, Fan=0, AC=0, Desired=14.500000, Measured=0.000000, Humidity=17
+outputs: Green=1, Red=0, Fan=3, Cooler=0, Heater=0, Humidity2H_n=1, Humidity2L_n=0
+inputCurrent=3670016
+inputs: Lock=0, Fan=0, AC=0, Desired=14.500000, Measured=0.000000, Humidity=44
+outputs: Green=1, Red=0, Fan=3, Cooler=0, Heater=0, Humidity2H_n=1, Humidity2L_n=1
+inputCurrent=6815744
+inputs: Lock=0, Fan=0, AC=0, Desired=14.500000, Measured=0.000000, Humidity=80
+outputs: Green=1, Red=0, Fan=3, Cooler=0, Heater=0, Humidity2H_n=0, Humidity2L_n=1
+inputCurrent=7077888
+inputs: Lock=0, Fan=0, AC=0, Desired=14.500000, Measured=0.000000, Humidity=83
+outputs: Green=1, Red=0, Fan=3, Cooler=0, Heater=0, Humidity2H_n=0, Humidity2L_n=1
+inputCurrent=7340032
+inputs: Lock=0, Fan=0, AC=0, Desired=14.500000, Measured=0.000000, Humidity=87
+outputs: Green=1, Red=0, Fan=3, Cooler=0, Heater=0, Humidity2H_n=0, Humidity2L_n=1
+inputCurrent=7602176
+inputs: Lock=0, Fan=0, AC=0, Desired=14.500000, Measured=0.000000, Humidity=91
+outputs: Green=1, Red=0, Fan=3, Cooler=0, Heater=0, Humidity2H_n=0, Humidity2L_n=1
+inputCurrent=7864320
+inputs: Lock=0, Fan=0, AC=0, Desired=14.500000, Measured=0.000000, Humidity=95
+outputs: Green=1, Red=0, Fan=3, Cooler=0, Heater=0, Humidity2H_n=0, Humidity2L_n=1
+inputCurrent=8126464
+inputs: Lock=0, Fan=0, AC=0, Desired=14.500000, Measured=0.000000, Humidity=100
+outputs: Green=1, Red=0, Fan=3, Cooler=0, Heater=0, Humidity2H_n=0, Humidity2L_n=1
+inputCurrent=172464
+inputs: Lock=0, Fan=0, AC=1, Desired=21.000000, Measured=21.000000, Humidity=0
+outputs: Green=1, Red=0, Fan=3, Cooler=0, Heater=0, Humidity2H_n=1, Humidity2L_n=0
+inputCurrent=159152
+inputs: Lock=0, Fan=0, AC=1, Desired=21.000000, Measured=19.600000, Humidity=0
+outputs: Green=1, Red=0, Fan=3, Cooler=0, Heater=1, Humidity2H_n=1, Humidity2L_n=0
+inputCurrent=180656
+inputs: Lock=0, Fan=0, AC=1, Desired=21.000000, Measured=22.000000, Humidity=0
+outputs: Green=1, Red=0, Fan=3, Cooler=1, Heater=0, Humidity2H_n=1, Humidity2L_n=0
+inputCurrent=159152
+inputs: Lock=0, Fan=0, AC=1, Desired=21.000000, Measured=19.600000, Humidity=0
+outputs: Green=1, Red=0, Fan=3, Cooler=0, Heater=1, Humidity2H_n=1, Humidity2L_n=0
+inputCurrent=172464
+inputs: Lock=0, Fan=0, AC=1, Desired=21.000000, Measured=21.000000, Humidity=0
+outputs: Green=1, Red=0, Fan=3, Cooler=0, Heater=0, Humidity2H_n=1, Humidity2L_n=0
+inputCurrent=246192
+inputs: Lock=0, Fan=0, AC=1, Desired=21.000000, Measured=30.000000, Humidity=0
+outputs: Green=1, Red=0, Fan=3, Cooler=1, Heater=0, Humidity2H_n=1, Humidity2L_n=0
+inputCurrent=172464
+inputs: Lock=0, Fan=0, AC=1, Desired=21.000000, Measured=21.000000, Humidity=0
+outputs: Green=1, Red=0, Fan=3, Cooler=0, Heater=0, Humidity2H_n=1, Humidity2L_n=0
+Reached end of input file! sampleIndex=40
diff --git a/chap2/diss.txt b/chap2/diss.txt
new file mode 100644
index 0000000..aa50904
--- /dev/null
+++ b/chap2/diss.txt
@@ -0,0 +1,33 @@
+1) 
+Yes, its work as long their wont be any carry in the operation because
+the outputRegister start out as zero, which only set the outputRegister bits position. 
+
+Example: When adding (X is ignored)
+XXXX XXII 
+XXII IIXX 
+IIXX XXXX 
+
+The regions don't overlap, so adding them together won't produce a carry and such
+it will have the same result as the bitwise OR. 
+
+2)
+ Do a brief research(perhaps on the web) on Bang-bang (Hysteresis)
+ controllers in relation to equations 4and 5. Answer the following questions in a few words:
+
+Hysteresis controller are 2-step controller (on or off state) and it used in system with 
+limited state, such as the heater in this lab which turns on/off depend on a formula (set point).
+
+Hysteresis controller is not just depending on the input values but also the direction of change, 
+while the system is trying to reach the target or if it is outside of the target. The behaviour can make the
+input have two output possibilities, above the target or below the target depending on the direction. 
+Because of this hysteresis depend on the history of the state of the system.
+
+2.a)
+A limit with this controller is the switching speed between on/off state or also called "hysteresis gap".
+In this case the constant 0.3 is the "hysteresis". 
+
+2.b)
+We need it because our system is limited to two states (on/off) which make the system more simple and
+more responsive. If the "hysteresis" is zero and the value changes just a little it will switch its state.
+This can cause unnecessary strain on the system. 
+
diff --git a/chap2/inputData.txt b/chap2/inputData.txt
new file mode 100644
index 0000000..e1d8339
--- /dev/null
+++ b/chap2/inputData.txt
@@ -0,0 +1,40 @@
+0
+1
+15
+7
+10
+0
+0
+16
+32
+64
+416
+640
+672
+0
+1024
+158720
+180224
+245760
+253952
+261120
+0
+262144
+524288
+786432
+1048576
+1310720
+3670016
+6815744
+7077888
+7340032
+7602176
+7864320
+8126464
+172464
+159152
+180656
+159152
+172464
+246192
+172464
diff --git a/chap2/main.c b/chap2/main.c
new file mode 100644
index 0000000..a2e82fc
--- /dev/null
+++ b/chap2/main.c
@@ -0,0 +1,370 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <stdbool.h>
+
+// Room Controls, in an infinite loops polls input switches, selectors, and sensors. Then it interprets the row data. Based on acquired information, the system
+// makes decisions. These decisions are then used to set appropriate values for signals and warning lights as well as actuators such as cooler and heater. 
+
+// In order to extract the row data from the input register and in order to figure out what row data means, please refer to the lab manual chapter 3.
+// In order to figure out how to actuate the lights and AC system and in order to know which bits in the output register control which of the devices, please refer to the lab manual chapter 3.
+
+// In reality, such an embedded application runs in an "infinite" loop. Moreover, the input and output directly communicate with pins on the processing unit's IC.
+// this program, is adapted for simulation purpose, therefore the loop is stopped at the end for user to allow it to proceed. Moreover, the inputs and outputs are 
+// connected to files instead of the physical world.
+
+// compile and run:
+// gcc main.c -std=c99
+// ./a.out
+// ./a.out >> displayLog.txt
+
+// some notes:
+// binary to hex conversion: 
+// Group binaries in packs of four 0000 0000 0000 0000 
+// From 0 to 9 in a pack maps to 0 to 9 in the corresponding hex digit
+// example:
+// binary packs: 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 
+// hex digits:   0    1    2    3    4    5    6    7    8    9
+// From 10 to 15 in a pack maps to A, B, C, D, E, and F in the corresponding hex digit
+// example:
+// binary packs: 1010 1011 1100 1101 1110 1111
+// hex digits:   A    B    C    D    E    F
+
+unsigned int readInput(unsigned int sampleIndex)
+{
+	char *line = NULL;
+	size_t len = 0;
+	ssize_t read;	
+	unsigned int inputCurrent = 0;
+	FILE *inputFile;
+	inputFile = fopen("inputData.txt", "r");
+
+	if (inputFile == NULL)
+	{
+	    printf("Cannot open the file!\n");
+	    return(0x00000001 << 23); // bit 23 is not used by the switches or sensors. So can be used to report an error.
+	}
+	
+	for(int currentIndex = 0; ;currentIndex++)
+	{
+		fscanf (inputFile, "%d", &inputCurrent);    
+		 
+		if (feof(inputFile)) 
+		{
+			fclose(inputFile);
+			printf("Reached end of input file! sampleIndex=%d\n", sampleIndex);
+			return(0x00000001 << 24); // bit 24 is not used by the switches or sensors. So can be used to report an error.
+		}
+		if(sampleIndex == currentIndex)		
+		{
+			printf("inputCurrent=%d\n", inputCurrent);
+			break;
+		}
+	}
+    	fclose(inputFile);
+	return(inputCurrent);
+}
+
+int writeOutput(unsigned int outputCurrent, unsigned int sampleIndex)
+{
+	FILE *outputFile = fopen("outputLog.txt", "a");
+
+	if (outputFile == NULL)
+	{
+	    printf("Cannot open the file!\n");
+	    return(9);
+	}
+	if(sampleIndex == 0)
+		fprintf(outputFile, "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");	
+
+	fprintf(outputFile, "%d : Output Register = %d\n", sampleIndex, outputCurrent);
+
+	fclose(outputFile);
+	return(0);
+}
+
+int main(int argc, char **argv)
+{	
+	// variables related to input and sensors
+	unsigned int inputRegister = 0;
+	bool isLocked = false;	
+	unsigned int fanSpeedSelector = 0;
+	bool isAcOn = false;
+	float temperatureDesired = 0;
+	float temperatureMeasured = 0;
+	unsigned int humiditySensor = 0;
+	unsigned int humidityMeasured = 0;
+	
+	// variables related to decisions
+	bool isGreenOn = false;
+	bool isRedOn = false;
+	unsigned int fanSpeed = 0;
+	bool isHeaterOn = false;
+	bool isCoolerOn = false;
+	bool isHumidity2Low_n = true;
+	bool isHumidity2High_n = true;
+
+	// variables related to outputs
+	unsigned int outputRegister = 0;
+
+	// constants defining system behaviour
+	static float Hysteresis_Cooler = 0.3;
+	static float Hysteresis_Heater = 0.3;
+	static unsigned int Humidity_2Low = 25;
+	static unsigned int Humidity_2High = 60;
+
+	// Other
+	unsigned int sampleIndex = 0;
+
+	while(true)
+	{
+		//++++++ Section 1. Read inputs and sensor data. Convert sensor data to meaningful information. ++++++//
+		inputRegister = readInput(sampleIndex);
+		// check if input is correctly read
+		if(inputRegister >= (0x00000001 << 23))
+			break;
+
+		// Lock : XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXI , assuming that "I" is input bit (Lock) and "X" is a don't-care bit.
+		// to extract isLocked which is the bit 0, we use a mask that is all 0 but at bit 0. Bit 0 is 1.
+		// the mask is: 00...00 00001 in binary, which is a decimal 1. The hex equivalent is 0x00000001.
+		// we use bitwise "and" operation to filter out all irrelevant bits in the "inputRegister". What remains is the isLocked value which must be converted to a boolean
+		// comparison operations always return a boolean. (x == 1) returns "true" if x is one, otherwise it returns "false". The return value is assigned to "isLocked".
+		isLocked = ((inputRegister & 0x00000001) == 0x00000001);		
+
+		// Fan Speed Selector : XXXX XXXX XXXX XXXX XXXX XXXX XXXX IIIX , assuming that "I" is an input bit (for Fan) and "X" is a don't-care bit.
+		// to extract fan speed selector value, we use a mask that is all 0 but at bits 1 to 3.
+		// the mask is: 00...00 0000 0000 0000 1110 in binary. The hex equivalent is 0x0000000E.
+		// we use bitwise "and" operation to filter out all irrelevant bits in the "inputRegister". Then we shift the remaining bits to end up with sensor data.
+		// What remains is the speed selector value which must be interpreted according the table given in the lab manual.
+		
+		//fanSpeedSelector = (inputRegister & 0x0000000E) >> 1;
+
+		// A better alternative is to fist shift the fan selector bits to LSB (Least Significant Bit) position and then filter unwanted remaining bits.
+		// selector data is XX...XX XXXX  IIIX in binary, assuming that "I" are selector bits and "X" don't-care bits. We shift by 1, ending up as: XX...XX XXXX XIII.
+		// The mask will be: 00...00 0000 0111. The hex equivalent is 0x0000007.
+		fanSpeedSelector = inputRegister >> 1;
+		fanSpeedSelector &=  0x00000007;
+
+		// AC Selector : XXXX XXXX XXXX XXXX XXXX XXII IIII XXXX , assuming that "I" is an input bit (for AC) and "X" is a don't-care bit.
+		// bit number 4 is AC on/off switch
+		//isAcOn = false; // Assignment
+		isAcOn = (((inputRegister >> 4) &0x00000001) == 0x00000001);
+
+		// bits 5 to 9 indicate desired temperature
+		//unsigned int temperatureDesired_tmp = 0; // Assignment
+		unsigned int temperatureDesired_tmp = inputRegister >> 5;
+		temperatureDesired_tmp &= 0x0000001F;
+		//temperatureDesired_tmp = 0x00000000; // Assignment
+		//printf("temperatureDesired_tmp casted to float=%f\n",(float)temperatureDesired_tmp); //for debug
+		// According to equation 1:
+		//temperatureDesired = 0.0 ; // Assignment
+		temperatureDesired = 14.5 + ((temperatureDesired_tmp) * 0.5);
+		// Temperature sensor : XXXX XXXX XXXX XXII IIII IIXX XXXX XXXX , assuming that "I" is an input bit (temperature sensor) and "X" is a don't-care bit.
+		// bits 10 to 17 indicate temperature value read from sensor
+		// bits 10 to 12 are fractional part
+		//unsigned int temperatureMeasured_fractional = 0; // Assignment
+		//temperatureMeasured_fractional = 0x00000000; // Assignment
+		unsigned int temperatureMeasured_fractional = inputRegister >> 10;
+		temperatureMeasured_fractional &= 0x00000007;
+		// bits 13 to 17 are decimal part
+		//unsigned int temperatureMeasured_decimal = inputRegister ; // Assignment
+		//temperatureMeasured_decimal = 0x00000000; // Assignment
+		unsigned int temperatureMeasured_decimal = inputRegister >> 13;
+		temperatureMeasured_decimal &= 0x0000001F;
+
+		if((temperatureMeasured_decimal == 0x0000001F) && (temperatureMeasured_fractional == 0x00000000)) 
+		{
+			temperatureMeasured = -1;
+		}
+		else if((temperatureMeasured_decimal == 0x0000001F) && (temperatureMeasured_fractional == 0x00000007)) 
+                {
+                        temperatureMeasured = 31;
+                }
+		else
+		{
+			temperatureMeasured = temperatureMeasured_decimal * 1.0 + temperatureMeasured_fractional * 0.2;
+		}
+
+		// According to equation 2:
+			// Assignment
+			// Assignment
+		//temperatureMeasured = 0; // Assignment
+			// Assignment
+			// Assignment
+		
+		// Humidity sensor : XXXX XXXX XIII IIXX XXXX XXXX XXXX XXXX , assuming that "I" is an input bit (humidity sensor) and "X" is a don't-care bit.
+		// to extract humidity value, we use a mask that is all 0 but at bits 18 to 22.
+		// the mask is: 00...0 0111 1100 0000 0000 0000 0000 in binary. The hex equivalent is 0x007C0000.
+		// we use bitwise "and" operation to filter out all irrelevant bits in the "inputRegister". Then we shift the remaining bits to end up with sensor data.
+		// What remains is the humidity sensor data value which must be converted to humidity percentage.		
+		
+		//humiditySensor = (inputRegister & 0x007C0000) >> 18;
+		
+		// A better alternative is to fist shift the sensor data to LSB (Least Significant Bit) position and then filter unwanted remaining bits.
+		// sensor data is XX...XX XIII IIXX XXXX XXXX XXXX XXXX in binary, assuming that "I" are sensor data bits and "X" don't-care bits. We shift by 18, ending up as: XX...XX XXXI IIII.
+		// The mask will be: 00...00 0001 1111. The hex equivalent is 0x0000001F.
+		humiditySensor = inputRegister >> 18;
+		humiditySensor &=  0x0000001F;
+
+		// Converting sensor data (humiditySensor) to humidityValue percentage using equation 3.
+		// Here we use shift and sum operations to implement multiplication. Some examples:
+		//				(a * 2) = (a << 1)		//				(a * 3) = ((a << 1) + a)	
+		//				(a * 4) = (a << 2)
+		if (humiditySensor < 3)
+			humidityMeasured = humiditySensor << 2; 
+		else if (humiditySensor < 28)
+			humidityMeasured = 8 + ((humiditySensor - 2) << 1) + (humiditySensor - 2);
+		else if (humiditySensor < 31)
+			humidityMeasured = 83 + ((humiditySensor - 27) << 2);
+		else
+			humidityMeasured = 100;
+		
+		//++++++ Section 2. Decide on outputs.  ++++++//
+		// signal lights for lock
+		if(isLocked)
+		{
+			isGreenOn = false;
+			isRedOn = true;		
+		}
+		else
+		{
+			isGreenOn = true;
+			isRedOn = false;
+		}
+		
+		// fan control
+		// according tables given in the manual
+		if(fanSpeedSelector == 0x00000007)
+			fanSpeed = 0x00000000; // Assignment
+		else if (fanSpeedSelector == 0x00000003) // Assignment
+			fanSpeed = 0x00000001; // Assignment
+		else if (fanSpeedSelector == 0x00000005) // Assignment
+			fanSpeed = 0x00000002; // Assignment
+		else
+			fanSpeed = 0x00000003; // Assignment
+	
+		// temperature and AC control
+		if (isAcOn)
+		{
+			if((temperatureMeasured - temperatureDesired) > Hysteresis_Cooler)
+			{
+				isCoolerOn = true;
+				isHeaterOn = false;
+			}
+			else if(temperatureMeasured < (temperatureDesired - Hysteresis_Heater))
+			{
+				isCoolerOn = false;
+                                isHeaterOn = true;
+			}
+			else
+			{
+				isCoolerOn = false;     
+	                        isHeaterOn = false;
+			}
+			// Assignment	
+			// Assignment	
+		}			
+		else
+		{
+			// Assignment       
+			isCoolerOn = false; 	
+			isHeaterOn = false;
+		}
+		if (isCoolerOn && (temperatureMeasured <= temperatureDesired))
+		{
+			isCoolerOn = false;
+			isHeaterOn = false;
+		}
+		else if (isHeaterOn && (temperatureMeasured >= temperatureDesired))
+                {
+                        isCoolerOn = false;
+                        isHeaterOn = false;
+                }
+		// Assignment	
+		// Assignment	
+
+		// humidity warning:
+		if(humidityMeasured < Humidity_2Low)
+		{
+			isHumidity2Low_n = false;
+			isHumidity2High_n = true;
+		}
+		else if(humidityMeasured > Humidity_2High)
+		{
+			isHumidity2Low_n = true;
+			isHumidity2High_n = false;
+		}
+		else
+		{
+			isHumidity2Low_n = true;
+			isHumidity2High_n = true;
+		}
+
+		//++++++ Section 3. Write outputs.  ++++++//
+		// clear previous outputs
+		outputRegister = 0;
+
+		// Green light : YYYY YYYY YYYY YYYY YYYY YYYY YYYY YYYO , assuming that "O" is the output bit (green light) and "Y" is a don't-touch bit.
+		// "Y" bits are don't-touch meaning that we must not change their values.
+		// If it is off, since outputRegister is already made 0 (all bits 0) we do nothing.
+		// If it is on, since the "on" state corresponds with a "1" according to the lab manual, then we can add 1 to change bit 0 to "1". This will not change the value of other bits.
+		
+		//if(isGreenOn)		
+		//	outputRegister += 0x00000001;
+		
+		// Alternatively we can use bitwise OR operator:
+		if(isGreenOn)		
+			outputRegister |= 0x00000001;
+
+		// Red light : YYYY YYYY YYYY YYYY YYYY YYYY YYYY YYOY , assuming that "O" is the output bit (red light) and "Y" is a don't-touch bit.
+		// If it is off, since outputRegister is already made 0 (all bits 0) we do nothing.
+		// If it is on, since the "on" state corresponds with a "1" at bit 1, according to the lab manual, then we shift "1" to bit 1 location and perform a bitwise OR.
+		if(isRedOn)		
+			outputRegister |= (0x00000001 << 1);
+
+		// Fan speed at bit 2 to 3 : YYYY YYYY YYYY YYYY YYYY YYYY YYYY OOYY , assuming that "O" is the output bit (fan speed) and "Y" is a don't-touch bit.
+		// The values are defined in the lab manual. These are already converetd from selector readout in "fanSpeedSelector" into the proper format "fanSpeed".
+		// Shift to place and perform a bitwise OR.
+		//outputRegister = fanSpeed ; // Assignment	
+		outputRegister |= (fanSpeed << 2);
+		// Cooler control at bit 4 : YYYY YYYY YYYY YYYY YYYY YYYY YYYO YYYY , assuming that "O" is the output bit (Cooler control) and "Y" is a don't-touch bit.
+		// Assignment
+		if(isCoolerOn)             
+                       outputRegister |= (0x00000001 << 4);
+		
+		// Heater control at bit 5 : YYYY YYYY YYYY YYYY YYYY YYYY YYOY YYYY , assuming that "O" is the output bit (Heater control) and "Y" is a don't-touch bit.
+		// Assignment
+		if(isHeaterOn)             
+                       outputRegister |= (0x00000001 << 5);
+	
+		// Humidity too high warning at bit 6 : YYYY YYYY YYYY YYYY YYYY YYYY YOYY YYYY , assuming that "O" is the output bit and "Y" is a don't-touch bit.
+		// Pay attention that writing 1 actually turns off the light, as defined in the lab manual. 
+		// Make sure the light is off normally. Here we can not rely on the fact that previously we set outputRegister = 0 since the light is actually "on" when its control bit is "0".
+		// Instead we use the fact that we previously set outputRegister = 0 to light up the warning light (by writing nothing for the case that it is too humid)
+		if(isHumidity2High_n) 
+			outputRegister |= (0x00000001 << 6);
+
+		// Humidity too low warning at bit 7 : YYYY YYYY YYYY YYYY YYYY YYYY OYYY YYYY , assuming that "O" is the output bit and "Y" is a don't-touch bit.
+		// Pay attention that writing 1 actually turns off the light, as defined in the lab manual. 
+		// Make sure the light is off normally. Here we can not rely on the fact that, previously, we set outputRegister = 0 since the light is actually "on" when its control bit is "0".
+		// Instead we use the fact that we previously set outputRegister = 0 to light up the warning light (by writing nothing for the case that humidity is too low)
+		if(isHumidity2Low_n) 
+			outputRegister |= (0x00000001 << 7);
+
+		writeOutput(outputRegister, sampleIndex);
+
+		// write to the screen. Redirect it later on to the log file.
+		printf("inputs: Lock=%d, Fan=%d, AC=%d, Desired=%f, Measured=%f, Humidity=%d\n", (int)isLocked, fanSpeedSelector, (int)isAcOn, temperatureDesired, temperatureMeasured, humidityMeasured);
+		printf("outputs: Green=%d, Red=%d, Fan=%d, Cooler=%d, Heater=%d, Humidity2H_n=%d, Humidity2L_n=%d\n", (int)isGreenOn, (int)isRedOn, fanSpeed, (int)isCoolerOn, (int)isHeaterOn, (int)isHumidity2High_n, (int)isHumidity2Low_n);
+
+		// This keeps the loop from going fast, allowing us to see the output for debugging purpose. Press "Enter" to proceed.
+		// int dummy = getchar(); //for debug
+		
+		// increment sample index used for simulation		
+		sampleIndex++;
+	}
+	return 0;
+}
+
+
+
diff --git a/chap2/main.c.save b/chap2/main.c.save
new file mode 100644
index 0000000..a31cedf
--- /dev/null
+++ b/chap2/main.c.save
@@ -0,0 +1,334 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <stdbool.h>
+
+// Room Controls, in an infinite loops polls input switches, selectors, and sensors. Then it interprets the row data. Based on acquired information, the system
+// makes decisions. These decisions are then used to set appropriate values for signals and warning lights as well as actuators such as cooler and heater. 
+
+// In order to extract the row data from the input register and in order to figure out what row data means, please refer to the lab manual chapter 3.
+// In order to figure out how to actuate the lights and AC system and in order to know which bits in the output register control which of the devices, please refer to the lab manual chapter 3.
+
+// In reality, such an embedded application runs in an "infinite" loop. Moreover, the input and output directly communicate with pins on the processing unit's IC.
+// this program, is adapted for simulation purpose, therefore the loop is stopped at the end for user to allow it to proceed. Moreover, the inputs and outputs are 
+// connected to files instead of the physical world.
+
+// compile and run:
+// gcc main.c -std=c99
+// ./a.out
+// ./a.out >> displayLog.txt
+
+// some notes:
+// binary to hex conversion: 
+// Group binaries in packs of four 0000 0000 0000 0000 
+// From 0 to 9 in a pack maps to 0 to 9 in the corresponding hex digit
+// example:
+// binary packs: 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 
+// hex digits:   0    1    2    3    4    5    6    7    8    9
+// From 10 to 15 in a pack maps to A, B, C, D, E, and F in the corresponding hex digit
+// example:
+// binary packs: 1010 1011 1100 1101 1110 1111
+// hex digits:   A    B    C    D    E    F
+
+unsigned int readInput(unsigned int sampleIndex)
+{
+	char *line = NULL;
+	size_t len = 0;
+	ssize_t read;	
+	unsigned int inputCurrent = 0;
+	FILE *inputFile;
+	inputFile = fopen("inputData.txt", "r");
+
+	if (inputFile == NULL)
+	{
+	    printf("Cannot open the file!\n");
+	    return(0x00000001 << 23); // bit 23 is not used by the switches or sensors. So can be used to report an error.
+	}
+	
+	for(int currentIndex = 0; ;currentIndex++)
+	{
+		fscanf (inputFile, "%d", &inputCurrent);    
+		 
+		if (feof(inputFile)) 
+		{
+			fclose(inputFile);
+			printf("Reached end of input file! sampleIndex=%d\n", sampleIndex);
+			return(0x00000001 << 24); // bit 24 is not used by the switches or sensors. So can be used to report an error.
+		}
+		if(sampleIndex == currentIndex)		
+		{
+			printf("inputCurrent=%d\n", inputCurrent);
+			break;
+		}
+	}
+    	fclose(inputFile);
+	return(inputCurrent);
+}
+
+int writeOutput(unsigned int outputCurrent, unsigned int sampleIndex)
+{
+	FILE *outputFile = fopen("outputLog.txt", "a");
+
+	if (outputFile == NULL)
+	{
+	    printf("Cannot open the file!\n");
+	    return(9);
+	}
+	if(sampleIndex == 0)
+		fprintf(outputFile, "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");	
+
+	fprintf(outputFile, "%d : Output Register = %d\n", sampleIndex, outputCurrent);
+
+	fclose(outputFile);
+	return(0);
+}
+
+int main(int argc, char **argv)
+{	
+	// variables related to input and sensors
+	unsigned int inputRegister = 0;
+	bool isLocked = false;	
+	unsigned int fanSpeedSelector = 0;
+	bool isAcOn = false;
+	float temperatureDesired = 0;
+	float temperatureMeasured = 0;
+	unsigned int humiditySensor = 0;
+	unsigned int humidityMeasured = 0;
+	
+	// variables related to decisions
+	bool isGreenOn = false;
+	bool isRedOn = false;
+	unsigned int fanSpeed = 0;
+	bool isHeaterOn = false;
+	bool isCoolerOn = false;
+	bool isHumidity2Low_n = true;
+	bool isHumidity2High_n = true;
+
+	// variables related to outputs
+	unsigned int outputRegister = 0;
+
+	// constants defining system behaviour
+	static float Hysteresis_Cooler = 0.3;
+	static float Hysteresis_Heater = 0.3;
+	static unsigned int Humidity_2Low = 25;
+	static unsigned int Humidity_2High = 60;
+
+	// Other
+	unsigned int sampleIndex = 0;
+
+	while(true)
+	{
+		//++++++ Section 1. Read inputs and sensor data. Convert sensor data to meaningful information. ++++++//
+		inputRegister = readInput(sampleIndex);
+		// check if input is correctly read
+		if(inputRegister >= (0x00000001 << 23))
+			break;
+
+		// Lock : XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXI , assuming that "I" is input bit (Lock) and "X" is a don't-care bit.
+		// to extract isLocked which is the bit 0, we use a mask that is all 0 but at bit 0. Bit 0 is 1.
+		// the mask is: 00...00 00001 in binary, which is a decimal 1. The hex equivalent is 0x00000001.
+		// we use bitwise "and" operation to filter out all irrelevant bits in the "inputRegister". What remains is the isLocked value which must be converted to a boolean
+		// comparison operations always return a boolean. (x == 1) returns "true" if x is one, otherwise it returns "false". The return value is assigned to "isLocked".
+		isLocked = ((inputRegister & 0x00000001) == 0x00000001);		
+
+		// Fan Speed Selector : XXXX XXXX XXXX XXXX XXXX XXXX XXXX IIIX , assuming that "I" is an input bit (for Fan) and "X" is a don't-care bit.
+		// to extract fan speed selector value, we use a mask that is all 0 but at bits 1 to 3.
+		// the mask is: 00...00 0000 0000 0000 1110 in binary. The hex equivalent is 0x0000000E.
+		// we use bitwise "and" operation to filter out all irrelevant bits in the "inputRegister". Then we shift the remaining bits to end up with sensor data.
+		// What remains is the speed selector value which must be interpreted according the table given in the lab manual.
+		
+		//fanSpeedSelector = (inputRegister & 0x0000000E) >> 1;
+
+		// A better alternative is to fist shift the fan selector bits to LSB (Least Significant Bit) position and then filter unwanted remaining bits.
+		// selector data is XX...XX XXXX  IIIX in binary, assuming that "I" are selector bits and "X" don't-care bits. We shift by 1, ending up as: XX...XX XXXX XIII.
+		// The mask will be: 00...00 0000 0111. The hex equivalent is 0x0000007.
+		fanSpeedSelector = inputRegister >> 1;
+		fanSpeedSelector &=  0x00000007;
+
+		// AC Selector : XXXX XXXX XXXX XXXX XXXX XXII IIII XXXX , assuming that "I" is an input bit (for AC) and "X" is a don't-care bit.
+		// bit number 4 is AC on/off switch
+		//isAcOn = false; // Assignment
+		isAcOn = inputRegister >> 4;
+		isAcOn =((isAcOn & 0x00000001) == 0x00000001);
+		// bits 5 to 9 indicate desired temperature
+		//unsigned int temperatureDesired_tmp = 0; // Assignment
+		unsigned int temperatureDesired_tmp = inputRegister >> 5;
+		temperatureDesired_tmp &= 0x0000001F;		//temperatureDesired_tmp = 0x00000000; // Assignment
+		//printf("temperatureDesired_tmp casted to float=%f\n",(float)temperatureDesired_tmp); //for debug
+		// According to equation 1:
+		//temperatureDesired = 0.0 ; // Assignment
+		temperatureDesired = 14.5 + ((temperatureDesired) * 0.5);
+		// Temperature sensor : XXXX XXXX XXXX XXII IIII IIXX XXXX XXXX , assuming that "I" is an input bit (temperature sensor) and "X" is a don't-care bit.
+		// bits 10 to 17 indicate temperature value read from sensor
+		// bits 10 to 12 are fractional part
+		//unsigned int temperatureMeasured_fractional = 0; // Assignment
+		//temperatureMeasured_fractional = 0x00000000; // Assignment
+		unsigned int temperatureMeasured_fractional = inputRegister >> 10;
+		temperatureMeasured_fractional &= 0x00000007;
+		// bits 13 to 17 are decimal part
+		//unsigned int temperatureMeasured_decimal = inputRegister ; // Assignment
+		//temperatureMeasured_decimal = 0x00000000; // Assignment
+		unsigned int temperatureMeasured_decimal = inputRegister >> 13;
+		temperatureMeasured_decimal &= 0x0000001F;
+		// According to equation 2:
+			// Assignment
+			// Assignment
+		temperatureMeasured = 0; // Assignment
+			// Assignment
+			// Assignment
+				// Humidity sensor : XXXX XXXX XIII IIXX XXXX XXXX XXXX XXXX , assuming that "I" is an input bit (humidity sensor) and "X" is a don't-care bit.
+		// to extract humidity value, we use a mask that is all 0 but at bits 18 to 22.
+		// the mask is: 00...0 0111 1100 0000 0000 0000 0000 in binary. The hex equivalent is 0x007C0000.
+		// we use bitwise "and" operation to filter out all irrelevant bits in the "inputRegister". Then we shift the remaining bits to end up with sensor data.
+		// What remains is the humidity sensor data value which must be converted to humidity percentage.		
+		
+		//humiditySensor = (inputRegister & 0x007C0000) >> 18;
+		
+		// A better alternative is to fist shift the sensor data to LSB (Least Significant Bit) position and then filter unwanted remaining bits.
+		// sensor data is XX...XX XIII IIXX XXXX XXXX XXXX XXXX in binary, assuming that "I" are sensor data bits and "X" don't-care bits. We shift by 18, ending up as: XX...XX XXXI IIII.
+		// The mask will be: 00...00 0001 1111. The hex equivalent is 0x0000001F.
+		humiditySensor = inputRegister >> 18;
+		humiditySensor &=  0x0000001F;
+
+		// Converting sensor data (humiditySensor) to humidityValue percentage using equation 3.
+		// Here we use shift and sum operations to implement multiplication. Some examples:
+		//				(a * 2) = (a << 1)		//				(a * 3) = ((a << 1) + a)	
+		//				(a * 4) = (a << 2)
+		if (humiditySensor < 3)
+			humidityMeasured = humiditySensor << 2; 
+		else if (humiditySensor < 28)
+			humidityMeasured = 8 + ((humiditySensor - 2) << 1) + (humiditySensor - 2);
+		else if (humiditySensor < 31)
+			humidityMeasured = 83 + ((humiditySensor - 27) << 2);
+		else
+			humidityMeasured = 100;
+		
+		//++++++ Section 2. Decide on outputs.  ++++++//
+		// signal lights for lock
+		if(isLocked)
+		{
+			isGreenOn = false;
+			isRedOn = true;
+		}
+		else
+		{
+			isGreenOn = true;
+			isRedOn = false;
+		}
+		
+		// fan control
+		// according tables given in the manual
+		if(fanSpeedSelector == 0x0)
+			fanSpeed = 0x0; // Assignment
+		else if (fanSpeedSelector == 0x0) // Assignment
+			fanSpeed = 0x0; // Assignment
+		else if (fanSpeedSelector == 0x0) // Assignment
+			fanSpeed = 0x0; // Assignment
+		else
+			fanSpeed = 0x0; // Assignment
+
+		// temperature and AC control
+		if (isAcOn)
+		{
+			if((temperatureMeasured - temperatureDesired) > Hysteresis_Cooler)
+			{
+				isCoolerOn = true;
+				isHeaterOn = false;
+			}
+			// Assignment	
+			// Assignment	
+		}			
+		else
+		{
+			// Assignment	
+			isHeaterOn = false;
+		}
+		if (isCoolerOn && (temperatureMeasured <= temperatureDesired))
+		{
+			isCoolerOn = false;
+			isHeaterOn = false;
+		}
+		// Assignment	
+		// Assignment	
+
+		// humidity warning:
+		if(humidityMeasured < Humidity_2Low)
+		{
+			isHumidity2Low_n = false;
+			isHumidity2High_n = true;
+		}
+		else if(humidityMeasured > Humidity_2High)
+		{
+			isHumidity2Low_n = true;
+			isHumidity2High_n = false;
+		}
+		else
+		{
+			isHumidity2Low_n = true;
+			isHumidity2High_n = true;
+		}
+
+		//++++++ Section 3. Write outputs.  ++++++//
+		// clear previous outputs
+		outputRegister = 0;
+
+		// Green light : YYYY YYYY YYYY YYYY YYYY YYYY YYYY YYYO , assuming that "O" is the output bit (green light) and "Y" is a don't-touch bit.
+		// "Y" bits are don't-touch meaning that we must not change their values.
+		// If it is off, since outputRegister is already made 0 (all bits 0) we do nothing.
+		// If it is on, since the "on" state corresponds with a "1" according to the lab manual, then we can add 1 to change bit 0 to "1". This will not change the value of other bits.
+		
+		//if(isGreenOn)		
+		//	outputRegister += 0x00000001;
+		
+		// Alternatively we can use bitwise OR operator:
+		if(isGreenOn)		
+			outputRegister |= 0x00000001;
+
+		// Red light : YYYY YYYY YYYY YYYY YYYY YYYY YYYY YYOY , assuming that "O" is the output bit (red light) and "Y" is a don't-touch bit.
+		// If it is off, since outputRegister is already made 0 (all bits 0) we do nothing.
+		// If it is on, since the "on" state corresponds with a "1" at bit 1, according to the lab manual, then we shift "1" to bit 1 location and perform a bitwise OR.
+		if(isRedOn)		
+			outputRegister |= (0x00000001 << 1);
+
+		// Fan speed at bit 2 to 3 : YYYY YYYY YYYY YYYY YYYY YYYY YYYY OOYY , assuming that "O" is the output bit (fan speed) and "Y" is a don't-touch bit.
+		// The values are defined in the lab manual. These are already converetd from selector readout in "fanSpeedSelector" into the proper format "fanSpeed".
+		// Shift to place and perform a bitwise OR.
+		outputRegister = fanSpeed ; // Assignment	
+
+		// Cooler control at bit 4 : YYYY YYYY YYYY YYYY YYYY YYYY YYYO YYYY , assuming that "O" is the output bit (Cooler control) and "Y" is a don't-touch bit.
+		// Assignment	
+
+		// Heater control at bit 5 : YYYY YYYY YYYY YYYY YYYY YYYY YYOY YYYY , assuming that "O" is the output bit (Heater control) and "Y" is a don't-touch bit.
+		// Assignment	
+
+		// Humidity too high warning at bit 6 : YYYY YYYY YYYY YYYY YYYY YYYY YOYY YYYY , assuming that "O" is the output bit and "Y" is a don't-touch bit.
+		// Pay attention that writing 1 actually turns off the light, as defined in the lab manual. 
+		// Make sure the light is off normally. Here we can not rely on the fact that previously we set outputRegister = 0 since the light is actually "on" when its control bit is "0".
+		// Instead we use the fact that we previously set outputRegister = 0 to light up the warning light (by writing nothing for the case that it is too humid)
+		if(isHumidity2High_n) 
+			outputRegister |= (0x00000001 << 6);
+
+		// Humidity too low warning at bit 7 : YYYY YYYY YYYY YYYY YYYY YYYY OYYY YYYY , assuming that "O" is the output bit and "Y" is a don't-touch bit.
+		// Pay attention that writing 1 actually turns off the light, as defined in the lab manual. 
+		// Make sure the light is off normally. Here we can not rely on the fact that, previously, we set outputRegister = 0 since the light is actually "on" when its control bit is "0".
+		// Instead we use the fact that we previously set outputRegister = 0 to light up the warning light (by writing nothing for the case that humidity is too low)
+		if(isHumidity2Low_n) 
+			outputRegister |= (0x00000001 << 7);
+
+		writeOutput(outputRegister, sampleIndex);
+
+		// write to the screen. Redirect it later on to the log file.
+		printf("inputs: Lock=%d, Fan=%d, AC=%d, Desired=%f, Measured=%f, Humidity=%d\n", (int)isLocked, fanSpeedSelector, (int)isAcOn, temperatureDesired, temperatureMeasured, humidityMeasured);
+		printf("outputs: Green=%d, Red=%d, Fan=%d, Cooler=%d, Heater=%d, Humidity2H_n=%d, Humidity2L_n=%d\n", (int)isGreenOn, (int)isRedOn, fanSpeed, (int)isCoolerOn, (int)isHeaterOn, (int)isHumidity2High_n, (int)isHumidity2Low_n);
+
+		// This keeps the loop from going fast, allowing us to see the output for debugging purpose. Press "Enter" to proceed.
+		// int dummy = getchar(); //for debug
+		
+		// increment sample index used for simulation		
+		sampleIndex++;
+	}
+	return 0;
+}
+
+
+
diff --git a/chap2/main.c.save.1 b/chap2/main.c.save.1
new file mode 100644
index 0000000..94092c9
--- /dev/null
+++ b/chap2/main.c.save.1
@@ -0,0 +1,368 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <stdbool.h>
+
+// Room Controls, in an infinite loops polls input switches, selectors, and sensors. Then it interprets the row data. Based on acquired information, the system
+// makes decisions. These decisions are then used to set appropriate values for signals and warning lights as well as actuators such as cooler and heater. 
+
+// In order to extract the row data from the input register and in order to figure out what row data means, please refer to the lab manual chapter 3.
+// In order to figure out how to actuate the lights and AC system and in order to know which bits in the output register control which of the devices, please refer to the lab manual chapter 3.
+
+// In reality, such an embedded application runs in an "infinite" loop. Moreover, the input and output directly communicate with pins on the processing unit's IC.
+// this program, is adapted for simulation purpose, therefore the loop is stopped at the end for user to allow it to proceed. Moreover, the inputs and outputs are 
+// connected to files instead of the physical world.
+
+// compile and run:
+// gcc main.c -std=c99
+// ./a.out
+// ./a.out >> displayLog.txt
+
+// some notes:
+// binary to hex conversion: 
+// Group binaries in packs of four 0000 0000 0000 0000 
+// From 0 to 9 in a pack maps to 0 to 9 in the corresponding hex digit
+// example:
+// binary packs: 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 
+// hex digits:   0    1    2    3    4    5    6    7    8    9
+// From 10 to 15 in a pack maps to A, B, C, D, E, and F in the corresponding hex digit
+// example:
+// binary packs: 1010 1011 1100 1101 1110 1111
+// hex digits:   A    B    C    D    E    F
+
+unsigned int readInput(unsigned int sampleIndex)
+{
+	char *line = NULL;
+	size_t len = 0;
+	ssize_t read;	
+	unsigned int inputCurrent = 0;
+	FILE *inputFile;
+	inputFile = fopen("inputData.txt", "r");
+
+	if (inputFile == NULL)
+	{
+	    printf("Cannot open the file!\n");
+	    return(0x00000001 << 23); // bit 23 is not used by the switches or sensors. So can be used to report an error.
+	}
+	
+	for(int currentIndex = 0; ;currentIndex++)
+	{
+		fscanf (inputFile, "%d", &inputCurrent);    
+		 
+		if (feof(inputFile)) 
+		{
+			fclose(inputFile);
+			printf("Reached end of input file! sampleIndex=%d\n", sampleIndex);
+			return(0x00000001 << 24); // bit 24 is not used by the switches or sensors. So can be used to report an error.
+		}
+		if(sampleIndex == currentIndex)		
+		{
+			printf("inputCurrent=%d\n", inputCurrent);
+			break;
+		}
+	}
+    	fclose(inputFile);
+	return(inputCurrent);
+}
+
+int writeOutput(unsigned int outputCurrent, unsigned int sampleIndex)
+{
+	FILE *outputFile = fopen("outputLog.txt", "a");
+
+	if (outputFile == NULL)
+	{
+	    printf("Cannot open the file!\n");
+	    return(9);
+	}
+	if(sampleIndex == 0)
+		fprintf(outputFile, "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");	
+
+	fprintf(outputFile, "%d : Output Register = %d\n", sampleIndex, outputCurrent);
+
+	fclose(outputFile);
+	return(0);
+}
+
+int main(int argc, char **argv)
+{	
+	// variables related to input and sensors
+	unsigned int inputRegister = 0;
+	bool isLocked = false;	
+	unsigned int fanSpeedSelector = 0;
+	bool isAcOn = false;
+	float temperatureDesired = 0;
+	float temperatureMeasured = 0;
+	unsigned int humiditySensor = 0;
+	unsigned int humidityMeasured = 0;
+	
+	// variables related to decisions
+	bool isGreenOn = false;
+	bool isRedOn = false;
+	unsigned int fanSpeed = 0;
+	bool isHeaterOn = false;
+	bool isCoolerOn = false;
+	bool isHumidity2Low_n = true;
+	bool isHumidity2High_n = true;
+
+	// variables related to outputs
+	unsigned int outputRegister = 0;
+
+	// constants defining system behaviour
+	static float Hysteresis_Cooler = 0.3;
+	static float Hysteresis_Heater = 0.3;
+	static unsigned int Humidity_2Low = 25;
+	static unsigned int Humidity_2High = 60;
+
+	// Other
+	unsigned int sampleIndex = 0;
+
+	while(true)
+	{
+		//++++++ Section 1. Read inputs and sensor data. Convert sensor data to meaningful information. ++++++//
+		inputRegister = readInput(sampleIndex);
+		// check if input is correctly read
+		if(inputRegister >= (0x00000001 << 23))
+			break;
+
+		// Lock : XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXI , assuming that "I" is input bit (Lock) and "X" is a don't-care bit.
+		// to extract isLocked which is the bit 0, we use a mask that is all 0 but at bit 0. Bit 0 is 1.
+		// the mask is: 00...00 00001 in binary, which is a decimal 1. The hex equivalent is 0x00000001.
+		// we use bitwise "and" operation to filter out all irrelevant bits in the "inputRegister". What remains is the isLocked value which must be converted to a boolean
+		// comparison operations always return a boolean. (x == 1) returns "true" if x is one, otherwise it returns "false". The return value is assigned to "isLocked".
+		isLocked = ((inputRegister & 0x00000001) == 0x00000001);		
+
+		// Fan Speed Selector : XXXX XXXX XXXX XXXX XXXX XXXX XXXX IIIX , assuming that "I" is an input bit (for Fan) and "X" is a don't-care bit.
+		// to extract fan speed selector value, we use a mask that is all 0 but at bits 1 to 3.
+		// the mask is: 00...00 0000 0000 0000 1110 in binary. The hex equivalent is 0x0000000E.
+		// we use bitwise "and" operation to filter out all irrelevant bits in the "inputRegister". Then we shift the remaining bits to end up with sensor data.
+		// What remains is the speed selector value which must be interpreted according the table given in the lab manual.
+		
+		//fanSpeedSelector = (inputRegister & 0x0000000E) >> 1;
+
+		// A better alternative is to fist shift the fan selector bits to LSB (Least Significant Bit) position and then filter unwanted remaining bits.
+		// selector data is XX...XX XXXX  IIIX in binary, assuming that "I" are selector bits and "X" don't-care bits. We shift by 1, ending up as: XX...XX XXXX XIII.
+		// The mask will be: 00...00 0000 0111. The hex equivalent is 0x0000007.
+		fanSpeedSelector = inputRegister >> 1;
+		fanSpeedSelector &=  0x00000007;
+
+		// AC Selector : XXXX XXXX XXXX XXXX XXXX XXII IIII XXXX , assuming that "I" is an input bit (for AC) and "X" is a don't-care bit.
+		// bit number 4 is AC on/off switch
+		//isAcOn = false; // Assignment
+		isAcOn = inputRegister >> 4;
+		isAcOn =((isAcOn & 0x00000001) == 0x00000001);
+		// bits 5 to 9 indicate desired temperature
+		//unsigned int temperatureDesired_tmp = 0; // Assignment
+		unsigned int temperatureDesired_tmp = inputRegister >> 5;
+		temperatureDesired_tmp &= 0x0000001F;
+		//temperatureDesired_tmp = 0x00000000; // Assignment
+		//printf("temperatureDesired_tmp casted to float=%f\n",(float)temperatureDesired_tmp); //for debug
+		// According to equation 1:
+		//temperatureDesired = 0.0 ; // Assignment
+		temperatureDesired = 14.5 + ((temperatureDesired_tmp) * 0.5);
+		// Temperature sensor : XXXX XXXX XXXX XXII IIII IIXX XXXX XXXX , assuming that "I" is an input bit (temperature sensor) and "X" is a don't-care bit.
+		// bits 10 to 17 indicate temperature value read from sensor
+		// bits 10 to 12 are fractional part
+		//unsigned int temperatureMeasured_fractional = 0; // Assignment
+		//temperatureMeasured_fractional = 0x00000000; // Assignment
+		unsigned int temperatureMeasured_fractional = inputRegister >> 10;
+		temperatureMeasured_fractional &= 0x00000007;
+		// bits 13 to 17 are decimal part
+		//unsigned int temperatureMeasured_decimal = inputRegister ; // Assignment
+		//temperatureMeasured_decimal = 0x00000000; // Assignment
+		unsigned int temperatureMeasured_decimal = inputRegister >> 13;
+		temperatureMeasured_decimal &= 0x0000001F;
+
+		if((temperatureMeasured_decimal == 0x0000001F) && (temperatureMeasured_fractional == 0x00000000)) 
+		{
+			temperatureMeasured = -1;
+		}
+		else if((temperatureMeasured_decimal == 0x0000001F) && (temperatureMeasured_fractional == 0x00000007)) 
+                {
+                        temperatureMeasured = 31;
+                }
+		else
+		{
+			temperatureMeasured = temperatureMeasured_decimal * 1.0 + temperatureMeasured_fractional * 0.2;
+		}
+
+		// According to equation 2:
+			// Assignment
+			// Assignment
+		//temperatureMeasured = 0; // Assignment
+			// Assignment
+			// Assignment
+		
+		// Humidity sensor : XXXX XXXX XIII IIXX XXXX XXXX XXXX XXXX , assuming that "I" is an input bit (humidity sensor) and "X" is a don't-care bit.
+		// to extract humidity value, we use a mask that is all 0 but at bits 18 to 22.
+		// the mask is: 00...0 0111 1100 0000 0000 0000 0000 in binary. The hex equivalent is 0x007C0000.
+		// we use bitwise "and" operation to filter out all irrelevant bits in the "inputRegister". Then we shift the remaining bits to end up with sensor data.
+		// What remains is the humidity sensor data value which must be converted to humidity percentage.		
+		
+		//humiditySensor = (inputRegister & 0x007C0000) >> 18;
+		
+		// A better alternative is to fist shift the sensor data to LSB (Least Significant Bit) position and then filter unwanted remaining bits.
+		// sensor data is XX...XX XIII IIXX XXXX XXXX XXXX XXXX in binary, assuming that "I" are sensor data bits and "X" don't-care bits. We shift by 18, ending up as: XX...XX XXXI IIII.
+		// The mask will be: 00...00 0001 1111. The hex equivalent is 0x0000001F.
+		humiditySensor = inputRegister >> 18;
+		humiditySensor &=  0x0000001F;
+
+		// Converting sensor data (humiditySensor) to humidityValue percentage using equation 3.
+		// Here we use shift and sum operations to implement multiplication. Some examples:
+		//				(a * 2) = (a << 1)		//				(a * 3) = ((a << 1) + a)	
+		//				(a * 4) = (a << 2)
+		if (humiditySensor < 3)
+			humidityMeasured = humiditySensor << 2; 
+		else if (humiditySensor < 28)
+			humidityMeasured = 8 + ((humiditySensor - 2) << 1) + (humiditySensor - 2);
+		else if (humiditySensor < 31)
+			humidityMeasured = 83 + ((humiditySensor - 27) << 2);
+		else
+			humidityMeasured = 100;
+		
+		//++++++ Section 2. Decide on outputs.  ++++++//
+		// signal lights for lock
+		if(isLocked)
+		{
+			isGreenOn = false;
+			isRedOn = true;		
+		}
+		else
+		{
+			isGreenOn = true;
+			isRedOn = false;
+		}
+		
+		// fan control
+		// according tables given in the manual
+		if(fanSpeedSelector == 0x00000007)
+			fanSpeed = 0x00000000; // Assignment
+		else if (fanSpeedSelector == 0x00000003) // Assignment
+			fanSpeed = 0x00000001; // Assignment
+		else if (fanSpeedSelector == 0x00000005) // Assignment
+			fanSpeed = 0x00000002; // Assignment
+		else
+			fanSpeed = 0x00000003; // Assignment
+	
+		// temperature and AC control
+		if (isAcOn)
+		{
+			if((temperatureMeasured - temperatureDesired) > Hysteresis_Cooler)
+			{
+				isCoolerOn = true;
+				isHeaterOn = false;
+			}
+			else if(temperatureMeasured < (temperatureDesired - Hysteresis_Heater))
+			{
+				isCoolerOn = false;
+                                isHeaterOn = true;
+			}
+			else
+			{
+				isCoolerOn = false;     
+	                        isHeaterOn = false;
+			}
+			// Assignment	
+			// Assignment	
+		}			
+		else
+		{
+			// Assignment       
+			isCoolerOn = false; 	
+			isHeaterOn = false;
+		}
+		if (isCoolerOn && (temperatureMeasured <= temperatureDesired))
+		{
+			isCoolerOn = false;
+			isHeaterOn = false;
+		}
+		else if (isHeaterOn && (temperatureMeasured >= temperatureDesired))
+                {
+                        isCoolerOn = false;
+                        isHeaterOn = false;
+                }
+		// Assignment	
+		// Assignment	
+
+		// humidity warning:
+		if(humidityMeasured < Humidity_2Low)
+		{
+			isHumidity2Low_n = false;
+			isHumidity2High_n = true;
+		}
+		else if(humidityMeasured > Humidity_2High)
+		{
+			isHumidity2Low_n = true;
+			isHumidity2High_n = false;
+		}
+		else
+		{
+			isHumidity2Low_n = true;
+			isHumidity2High_n = true;
+		}
+
+		//++++++ Section 3. Write outputs.  ++++++//
+		// clear previous outputs
+		outputRegister = 0;
+
+		// Green light : YYYY YYYY YYYY YYYY YYYY YYYY YYYY YYYO , assuming that "O" is the output bit (green light) and "Y" is a don't-touch bit.
+		// "Y" bits are don't-touch meaning that we must not change their values.
+		// If it is off, since outputRegister is already made 0 (all bits 0) we do nothing.
+		// If it is on, since the "on" state corresponds with a "1" according to the lab manual, then we can add 1 to change bit 0 to "1". This will not change the value of other bits.
+		
+		//if(isGreenOn)		
+		//	outputRegister += 0x00000001;
+		
+		// Alternatively we can use bitwise OR operator:
+		if(isGreenOn)		
+			outputRegister |= 0x00000001;
+
+		// Red light : YYYY YYYY YYYY YYYY YYYY YYYY YYYY YYOY , assuming that "O" is the output bit (red light) and "Y" is a don't-touch bit.
+		// If it is off, since outputRegister is already made 0 (all bits 0) we do nothing.
+		// If it is on, since the "on" state corresponds with a "1" at bit 1, according to the lab manual, then we shift "1" to bit 1 location and perform a bitwise OR.
+		if(isRedOn)		
+			outputRegister |= (0x00000001 << 1);
+
+		// Fan speed at bit 2 to 3 : YYYY YYYY YYYY YYYY YYYY YYYY YYYY OOYY , assuming that "O" is the output bit (fan speed) and "Y" is a don't-touch bit.
+		// The values are defined in the lab manual. These are already converetd from selector readout in "fanSpeedSelector" into the proper format "fanSpeed".
+		// Shift to place and perform a bitwise OR.
+		//outputRegister = fanSpeed ; // A
+
+ssignment	
+		outputRegister |= (fanSpeed << 2);
+		// Cooler control at bit 4 : YYYY YYYY YYYY YYYY YYYY YYYY YYYO YYYY , assuming that "O" is the output bit (Cooler control) and "Y" is a don't-touch bit.
+		// Assignment	
+
+		// Heater control at bit 5 : YYYY YYYY YYYY YYYY YYYY YYYY YYOY YYYY , assuming that "O" is the output bit (Heater control) and "Y" is a don't-touch bit.
+		// Assignment	
+
+		// Humidity too high warning at bit 6 : YYYY YYYY YYYY YYYY YYYY YYYY YOYY YYYY , assuming that "O" is the output bit and "Y" is a don't-touch bit.
+		// Pay attention that writing 1 actually turns off the light, as defined in the lab manual. 
+		// Make sure the light is off normally. Here we can not rely on the fact that previously we set outputRegister = 0 since the light is actually "on" when its control bit is "0".
+		// Instead we use the fact that we previously set outputRegister = 0 to light up the warning light (by writing nothing for the case that it is too humid)
+		if(isHumidity2High_n) 
+			outputRegister |= (0x00000001 << 6);
+
+		// Humidity too low warning at bit 7 : YYYY YYYY YYYY YYYY YYYY YYYY OYYY YYYY , assuming that "O" is the output bit and "Y" is a don't-touch bit.
+		// Pay attention that writing 1 actually turns off the light, as defined in the lab manual. 
+		// Make sure the light is off normally. Here we can not rely on the fact that, previously, we set outputRegister = 0 since the light is actually "on" when its control bit is "0".
+		// Instead we use the fact that we previously set outputRegister = 0 to light up the warning light (by writing nothing for the case that humidity is too low)
+		if(isHumidity2Low_n) 
+			outputRegister |= (0x00000001 << 7);
+
+		writeOutput(outputRegister, sampleIndex);
+
+		// write to the screen. Redirect it later on to the log file.
+		printf("inputs: Lock=%d, Fan=%d, AC=%d, Desired=%f, Measured=%f, Humidity=%d\n", (int)isLocked, fanSpeedSelector, (int)isAcOn, temperatureDesired, temperatureMeasured, humidityMeasured);
+		printf("outputs: Green=%d, Red=%d, Fan=%d, Cooler=%d, Heater=%d, Humidity2H_n=%d, Humidity2L_n=%d\n", (int)isGreenOn, (int)isRedOn, fanSpeed, (int)isCoolerOn, (int)isHeaterOn, (int)isHumidity2High_n, (int)isHumidity2Low_n);
+
+		// This keeps the loop from going fast, allowing us to see the output for debugging purpose. Press "Enter" to proceed.
+		// int dummy = getchar(); //for debug
+		
+		// increment sample index used for simulation		
+		sampleIndex++;
+	}
+	return 0;
+}
+
+
+
diff --git a/chap2/outputLog.txt b/chap2/outputLog.txt
new file mode 100644
index 0000000..1c3054a
--- /dev/null
+++ b/chap2/outputLog.txt
@@ -0,0 +1,41 @@
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+0 : Output Register = 77
+1 : Output Register = 78
+2 : Output Register = 66
+3 : Output Register = 70
+4 : Output Register = 73
+5 : Output Register = 77
+6 : Output Register = 77
+7 : Output Register = 109
+8 : Output Register = 77
+9 : Output Register = 77
+10 : Output Register = 77
+11 : Output Register = 77
+12 : Output Register = 77
+13 : Output Register = 77
+14 : Output Register = 77
+15 : Output Register = 77
+16 : Output Register = 77
+17 : Output Register = 77
+18 : Output Register = 77
+19 : Output Register = 77
+20 : Output Register = 77
+21 : Output Register = 77
+22 : Output Register = 77
+23 : Output Register = 77
+24 : Output Register = 77
+25 : Output Register = 77
+26 : Output Register = 205
+27 : Output Register = 141
+28 : Output Register = 141
+29 : Output Register = 141
+30 : Output Register = 141
+31 : Output Register = 141
+32 : Output Register = 141
+33 : Output Register = 77
+34 : Output Register = 109
+35 : Output Register = 93
+36 : Output Register = 109
+37 : Output Register = 77
+38 : Output Register = 93
+39 : Output Register = 77
diff --git a/chap2/outputLog_Correct.txt b/chap2/outputLog_Correct.txt
new file mode 100644
index 0000000..1c3054a
--- /dev/null
+++ b/chap2/outputLog_Correct.txt
@@ -0,0 +1,41 @@
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+0 : Output Register = 77
+1 : Output Register = 78
+2 : Output Register = 66
+3 : Output Register = 70
+4 : Output Register = 73
+5 : Output Register = 77
+6 : Output Register = 77
+7 : Output Register = 109
+8 : Output Register = 77
+9 : Output Register = 77
+10 : Output Register = 77
+11 : Output Register = 77
+12 : Output Register = 77
+13 : Output Register = 77
+14 : Output Register = 77
+15 : Output Register = 77
+16 : Output Register = 77
+17 : Output Register = 77
+18 : Output Register = 77
+19 : Output Register = 77
+20 : Output Register = 77
+21 : Output Register = 77
+22 : Output Register = 77
+23 : Output Register = 77
+24 : Output Register = 77
+25 : Output Register = 77
+26 : Output Register = 205
+27 : Output Register = 141
+28 : Output Register = 141
+29 : Output Register = 141
+30 : Output Register = 141
+31 : Output Register = 141
+32 : Output Register = 141
+33 : Output Register = 77
+34 : Output Register = 109
+35 : Output Register = 93
+36 : Output Register = 109
+37 : Output Register = 77
+38 : Output Register = 93
+39 : Output Register = 77
diff --git a/chap3.1/Makefile b/chap3.1/Makefile
new file mode 100644
index 0000000..a2dbd6f
--- /dev/null
+++ b/chap3.1/Makefile
@@ -0,0 +1,16 @@
+OBJ    = main.o
+COURSE   = /courses/TDDI11/sw
+LDSCRIPT = $(COURSE)/lib/link.cmd
+BOOTSECT = $(COURSE)/lib/bootload.bin
+INCLUDES = -I "$(COURSE)/include" -I "$(COURSE)/include/djgpp" $(EXTRA_INCLUDES)
+CC       = $(COURSE)/i386-elf-gcc-7.3.0/bin/i386-elf-gcc
+CFLAGS  += -Wall -g $(INCLUDES)
+LD       = $(COURSE)/i386-elf-gcc-7.3.0/bin/i386-elf-ld
+LDFLAGS  = -T$(LDSCRIPT) -static -ustart -Map link.map
+
+embedded.bin: $(OBJ)
+	$(LD) $(OBJ) $(LIBS) $(LDFLAGS)
+%.o: %.c
+	$(CC) $(CFLAGS) -c $<
+clean:
+	\rm -f link.map embedded.bin *~ *.o 
diff --git a/chap3.1/chapter3_1.txt b/chap3.1/chapter3_1.txt
new file mode 100644
index 0000000..9a03c4a
--- /dev/null
+++ b/chap3.1/chapter3_1.txt
@@ -0,0 +1,51 @@
+1)
+Because stopTime is set to milliseconds using system timer value
+and this value is DWORD32 long.
+
+2)
+Because finalCount is set to the current CPU count/cycles,
+which is a large number and counts up very fast.
+
+3)
+Now_Plus takes an int as argument (seconds) and returns the current
+system time plus the amount of seconds in milliseconds.
+
+4)
+CPU_Clock_Cycles return the current CPU clock cycle. The cycle count is
+incremented each CPU clock cycle.
+
+5)
+"x" represent how much the CPU cycle has increased since "initialCount" or
+the number of instructions since "ininitialCount".
+"xM" represent number of instruction divided by one million (MIPS, Millions of
+instructions per seconds).
+
+6)
+Milliseconds return how long the program has been executed in milliseconds.
+
+7)
+7.1) Yes.
+7.2) Yes. Section 3 is depened on section two which has been executed circa on
+     second. When section 3 starts it execution the program has lived circa
+     one second it will also run in circa
+     one second.
+
+     Both Milliseconds and Now_Plus should run as fast in theory.
+
+7.3) Interrups within the host system when running the program in QEMU makes
+     the two section report different values.
+
+7.4) Section 2 is better because we are adding exactly one second and because of
+     that its more clear to use Now_Plus than to add 1000 milliseconds.
+     
+     When it comes to Now_Plus and Milliseconds, both gives the same
+     functionality so its depends. If we want to get the current time or offset
+     by an amount of milliseconds, Milliseconds is better, but if we want the
+     current time plus an offset into the future in seconds Now_Plus is better.
+
+8)
+The first line print the how long the program has lived, while the second line
+sleep circa 2 seconds and the print how long the program has lived.
+
+9)
+
diff --git a/chap3.1/embedded.bin b/chap3.1/embedded.bin
new file mode 100644
index 0000000000000000000000000000000000000000..1e6a4149c4c3e3d77d9e294226385243f432ddfb
GIT binary patch
literal 8875
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
QSU<l2G!<5wQ=-5C0RG$X$p8QV

literal 0
HcmV?d00001

diff --git a/chap3.1/floppy.img b/chap3.1/floppy.img
new file mode 100644
index 0000000000000000000000000000000000000000..8be6b346760c035f8cdc5bb8f039e6f5dda71bf8
GIT binary patch
literal 1474560
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
z4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C
z(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R
z7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7
zfzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z
z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c
z4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c1*0J_8UmvsFd71*
zAut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?
z8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*O
zqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8Umvs
zFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF
z0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*
zAut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqhK@yMnhmU
z1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0q
zLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(
zGz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!n
zMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ON
zU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU
z1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU=)mo
zz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By
z2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1J
zhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kin
zXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeD
zjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mk
zz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By
z2#kW!5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7
zfzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z
z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c
z4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C
z(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R
z7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7
zfzc2c4S`WG8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8Umvs
zFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF
z0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*
zAut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?
z8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*O
zqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8Umvs
zFd71*Aut*OqaiQ~MnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!n
zMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ON
zU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU
z1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0q
zLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(
zGz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!n
zMnhmU1V%$(Gz3ONU^E0q!DtAKhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kin
zXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeD
zjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mk
zz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By
z2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1J
zhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kin
zXb6mkz-S1JhQMeDjE2By2#kinC>RZa(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c
z4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C
z(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R
z7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7
zfzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z
z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c
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

literal 0
HcmV?d00001

diff --git a/chap3.1/link.map b/chap3.1/link.map
new file mode 100644
index 0000000..21cc179
--- /dev/null
+++ b/chap3.1/link.map
@@ -0,0 +1,188 @@
+Archive member included to satisfy reference by file (symbol)
+
+/courses/TDDI11/sw/lib/elf/libepc.a(init-cpu.o)
+                              (start)
+/courses/TDDI11/sw/lib/elf/libepc.a(init-idt.o)
+                              /courses/TDDI11/sw/lib/elf/libepc.a(init-cpu.o) (Init_IDT)
+/courses/TDDI11/sw/lib/elf/libepc.a(init-crt.o)
+                              /courses/TDDI11/sw/lib/elf/libepc.a(init-cpu.o) (Init_CRT)
+/courses/TDDI11/sw/lib/elf/libepc.a(display.o)
+                              main.o (SetCursorPosition)
+/courses/TDDI11/sw/lib/elf/libepc.a(timer.o)
+                              main.o (Milliseconds)
+/courses/TDDI11/sw/lib/elf/libepc.a(init8259.o)
+                              /courses/TDDI11/sw/lib/elf/libepc.a(init-cpu.o) (Init8259)
+/courses/TDDI11/sw/lib/elf/libepc.a(init8253.o)
+                              /courses/TDDI11/sw/lib/elf/libepc.a(init-cpu.o) (Init8253)
+/courses/TDDI11/sw/lib/elf/libepc.a(cycles.o)
+                              main.o (CPU_Clock_Cycles)
+/courses/TDDI11/sw/lib/elf/libepc.a(checkcpu.o)
+                              /courses/TDDI11/sw/lib/elf/libepc.a(init-cpu.o) (Check_CPU)
+/courses/TDDI11/sw/lib/elf/libepc.a(io.o)
+                              /courses/TDDI11/sw/lib/elf/libepc.a(timer.o) (msec)
+/courses/TDDI11/sw/lib/elf/libepc.a(keyboard.o)
+                              /courses/TDDI11/sw/lib/elf/libepc.a(io.o) (Enqueue)
+/courses/TDDI11/sw/i386-elf-gcc-7.3.0/lib/gcc/i386-elf/7.3.0/libgcc.a(_udivdi3.o)
+                              main.o (__udivdi3)
+
+Discarded input sections
+
+ .eh_frame      0x0000000000000000       0x48 main.o
+ .eh_frame      0x0000000000000000       0x84 /courses/TDDI11/sw/i386-elf-gcc-7.3.0/lib/gcc/i386-elf/7.3.0/libgcc.a(_udivdi3.o)
+
+Memory Configuration
+
+Name             Origin             Length             Attributes
+conventional     0x0000000000000000 0x00000000000a0000
+reserved         0x00000000000a0000 0x0000000000060000
+extended         0x0000000000100000 0x00000000fff00000
+*default*        0x0000000000000000 0xffffffffffffffff
+
+Linker script and memory map
+
+LOAD main.o
+LOAD /courses/TDDI11/sw/lib/elf/libepc.a
+LOAD /courses/TDDI11/sw/lib/elf/djgpp/libc.a
+LOAD /courses/TDDI11/sw/i386-elf-gcc-7.3.0/lib/gcc/i386-elf/7.3.0/libgcc.a
+
+.text           0x0000000000000000     0x1bbf
+                0x0000000000000000                text_frst = .
+ *(.start)
+ .start         0x0000000000000000        0x8 /courses/TDDI11/sw/lib/elf/libepc.a(init-cpu.o)
+                0x0000000000000000                start
+ *(.init)
+ *(.text)
+ .text          0x0000000000000008      0x390 main.o
+                0x0000000000000008                main
+ .text          0x0000000000000398       0x50 /courses/TDDI11/sw/lib/elf/libepc.a(init-cpu.o)
+                0x0000000000000398                Init_CPU
+ .text          0x00000000000003e8      0x5a0 /courses/TDDI11/sw/lib/elf/libepc.a(init-idt.o)
+                0x00000000000007f8                IRQ2INT
+                0x000000000000080c                _GetISR
+                0x0000000000000850                SetISR
+                0x0000000000000888                Init_IDT
+ .text          0x0000000000000988      0x110 /courses/TDDI11/sw/lib/elf/libepc.a(init-crt.o)
+                0x0000000000000988                Init_CRT
+                0x00000000000009bc                _LastMemoryAddress
+ .text          0x0000000000000a98      0x6e0 /courses/TDDI11/sw/lib/elf/libepc.a(display.o)
+                0x0000000000000a98                SetCursorVisible
+                0x0000000000000b1c                _GetCursorRow
+                0x0000000000000b30                _GetCursorCol
+                0x0000000000000b44                SetCursorPosition
+                0x0000000000000be8                ClearScreen
+                0x0000000000000c50                _PutAttb
+                0x0000000000000c9c                _PutCharAt
+                0x0000000000000cc8                _PutChar
+                0x0000000000000d4c                PutString
+                0x0000000000000d84                PutUnsigned
+                0x0000000000000dbc                FormatUnsigned
+                0x0000000000000e4c                Unsigned2Ascii
+                0x0000000000000ed0                _Cell
+ .text          0x0000000000001178       0xe0 /courses/TDDI11/sw/lib/elf/libepc.a(timer.o)
+                0x0000000000001200                Milliseconds
+                0x000000000000121c                Now_Plus
+ .text          0x0000000000001258       0xe0 /courses/TDDI11/sw/lib/elf/libepc.a(init8259.o)
+                0x0000000000001258                Init8259
+ .text          0x0000000000001338       0xb0 /courses/TDDI11/sw/lib/elf/libepc.a(init8253.o)
+                0x0000000000001338                Init8253
+ .text          0x00000000000013e8       0x70 /courses/TDDI11/sw/lib/elf/libepc.a(cycles.o)
+                0x00000000000013e8                CPU_Clock_Cycles
+ .text          0x0000000000001458       0x98 /courses/TDDI11/sw/lib/elf/libepc.a(checkcpu.o)
+                0x0000000000001458                Check_CPU
+ .text          0x00000000000014f0       0x60 /courses/TDDI11/sw/lib/elf/libepc.a(io.o)
+                0x00000000000014f0                TimerTickISR
+                0x00000000000014fc                KeyboardISR
+                0x000000000000151c                ISR_PIC1
+                0x0000000000001523                ISR_PIC2
+                0x000000000000152c                ___main
+                0x000000000000152d                inportb
+                0x0000000000001537                outportb
+                0x0000000000001549                _exit
+ .text          0x0000000000001550      0x570 /courses/TDDI11/sw/lib/elf/libepc.a(keyboard.o)
+                0x0000000000001550                ScanCodeRdy
+                0x0000000000001574                GetScanCode
+                0x00000000000015a4                ScanCode2Ascii
+                0x0000000000001764                SetsKybdState
+                0x0000000000001954                Enqueue
+ .text          0x0000000000001ac0       0xff /courses/TDDI11/sw/i386-elf-gcc-7.3.0/lib/gcc/i386-elf/7.3.0/libgcc.a(_udivdi3.o)
+                0x0000000000001ac0                __udivdi3
+                0x0000000000001bbe                text_last = (. - 0x1)
+
+.data           0x0000000000001bc0      0x6eb
+                0x0000000000001bc0                data_frst = .
+ *(.data)
+ .data          0x0000000000001bc0        0x0 main.o
+ .data          0x0000000000001bc0       0x20 /courses/TDDI11/sw/lib/elf/libepc.a(init-cpu.o)
+                0x0000000000001bde                code_selector
+ .data          0x0000000000001be0       0x90 /courses/TDDI11/sw/lib/elf/libepc.a(init-idt.o)
+ .data          0x0000000000001c70       0x10 /courses/TDDI11/sw/lib/elf/libepc.a(init-crt.o)
+ .data          0x0000000000001c80       0x30 /courses/TDDI11/sw/lib/elf/libepc.a(display.o)
+ .data          0x0000000000001cb0       0x10 /courses/TDDI11/sw/lib/elf/libepc.a(timer.o)
+ .data          0x0000000000001cc0        0x0 /courses/TDDI11/sw/lib/elf/libepc.a(init8259.o)
+ .data          0x0000000000001cc0        0x0 /courses/TDDI11/sw/lib/elf/libepc.a(init8253.o)
+ .data          0x0000000000001cc0        0x4 /courses/TDDI11/sw/lib/elf/libepc.a(cycles.o)
+ .data          0x0000000000001cc4        0xc /courses/TDDI11/sw/lib/elf/libepc.a(io.o)
+                0x0000000000001cc4                msec
+                0x0000000000001cc8                old_tick_isr
+                0x0000000000001ccc                old_kybd_isr
+ .data          0x0000000000001cd0      0x5a0 /courses/TDDI11/sw/lib/elf/libepc.a(keyboard.o)
+ .data          0x0000000000002270        0x0 /courses/TDDI11/sw/i386-elf-gcc-7.3.0/lib/gcc/i386-elf/7.3.0/libgcc.a(_udivdi3.o)
+ *(.rodata)
+ .rodata        0x0000000000002270       0x3b main.o
+ *(.rodata.str1.1)
+ *(.rodata.str1.32)
+                0x00000000000022aa                data_last = (. - 0x1)
+
+.bss            0x00000000000022ac      0x83c
+                0x00000000000022ac                bss_frst = .
+ *(.bss)
+ .bss           0x00000000000022ac        0x0 main.o
+ .bss           0x00000000000022ac      0x800 /courses/TDDI11/sw/lib/elf/libepc.a(init-idt.o)
+ .bss           0x0000000000002aac        0x0 /courses/TDDI11/sw/lib/elf/libepc.a(init-crt.o)
+ .bss           0x0000000000002aac        0x8 /courses/TDDI11/sw/lib/elf/libepc.a(display.o)
+ .bss           0x0000000000002ab4        0x0 /courses/TDDI11/sw/lib/elf/libepc.a(timer.o)
+ .bss           0x0000000000002ab4        0x0 /courses/TDDI11/sw/lib/elf/libepc.a(init8259.o)
+ .bss           0x0000000000002ab4        0x0 /courses/TDDI11/sw/lib/elf/libepc.a(init8253.o)
+ .bss           0x0000000000002ab4       0x34 /courses/TDDI11/sw/lib/elf/libepc.a(keyboard.o)
+ .bss           0x0000000000002ae8        0x0 /courses/TDDI11/sw/i386-elf-gcc-7.3.0/lib/gcc/i386-elf/7.3.0/libgcc.a(_udivdi3.o)
+ *(COMMON)
+                0x0000000000002ae7                bss_last = (. - 0x1)
+
+/DISCARD/
+ *(.eh_frame)
+                0x0000000000002ae8                stack_frst = (bss_last + 0x1)
+                0x000000000000aae7                stack_last = (bss_last + 0x8000)
+                0x000000000000aae8                heap_frst = (stack_last + 0x1)
+OUTPUT(embedded.bin binary)
+
+.debug_info     0x0000000000000000      0xb66
+ .debug_info    0x0000000000000000      0x137 main.o
+ .debug_info    0x0000000000000137      0xa2f /courses/TDDI11/sw/i386-elf-gcc-7.3.0/lib/gcc/i386-elf/7.3.0/libgcc.a(_udivdi3.o)
+
+.debug_abbrev   0x0000000000000000      0x2a2
+ .debug_abbrev  0x0000000000000000       0x9d main.o
+ .debug_abbrev  0x000000000000009d      0x205 /courses/TDDI11/sw/i386-elf-gcc-7.3.0/lib/gcc/i386-elf/7.3.0/libgcc.a(_udivdi3.o)
+
+.debug_aranges  0x0000000000000000       0x40
+ .debug_aranges
+                0x0000000000000000       0x20 main.o
+ .debug_aranges
+                0x0000000000000020       0x20 /courses/TDDI11/sw/i386-elf-gcc-7.3.0/lib/gcc/i386-elf/7.3.0/libgcc.a(_udivdi3.o)
+
+.debug_line     0x0000000000000000      0x211
+ .debug_line    0x0000000000000000       0xda main.o
+ .debug_line    0x00000000000000da      0x137 /courses/TDDI11/sw/i386-elf-gcc-7.3.0/lib/gcc/i386-elf/7.3.0/libgcc.a(_udivdi3.o)
+
+.debug_str      0x0000000000000000      0xb8b
+ .debug_str     0x0000000000000000       0xfb main.o
+ .debug_str     0x00000000000000fb      0xa90 /courses/TDDI11/sw/i386-elf-gcc-7.3.0/lib/gcc/i386-elf/7.3.0/libgcc.a(_udivdi3.o)
+
+.comment        0x0000000000000000       0x24
+ .comment       0x0000000000000000       0x12 main.o
+ .comment       0x0000000000000012       0x12 /courses/TDDI11/sw/i386-elf-gcc-7.3.0/lib/gcc/i386-elf/7.3.0/libgcc.a(_udivdi3.o)
+
+.debug_loc      0x0000000000000000      0x691
+ .debug_loc     0x0000000000000000      0x691 /courses/TDDI11/sw/i386-elf-gcc-7.3.0/lib/gcc/i386-elf/7.3.0/libgcc.a(_udivdi3.o)
+
+.debug_ranges   0x0000000000000000       0x28
+ .debug_ranges  0x0000000000000000       0x28 /courses/TDDI11/sw/i386-elf-gcc-7.3.0/lib/gcc/i386-elf/7.3.0/libgcc.a(_udivdi3.o)
diff --git a/chap3.1/main.c b/chap3.1/main.c
new file mode 100644
index 0000000..7bb1166
--- /dev/null
+++ b/chap3.1/main.c
@@ -0,0 +1,89 @@
+#include <libepc.h>
+
+int main(int argc, char *argv[])
+{
+	//+++++ Section 1. Initialization +++++
+
+	ClearScreen(0x07);
+	SetCursorPosition(1, 1);
+	DWORD32 stopTime = 0;
+	QWORD64 initialCount = 0;
+	QWORD64 finalCount = 0;
+	QWORD64 x = 0;
+	DWORD32 xM = 0;
+
+	//+++++ Section 2. +++++
+
+	stopTime = Now_Plus(1);
+	initialCount = CPU_Clock_Cycles();
+
+	while( Now_Plus(0) < stopTime ){}
+
+	finalCount = CPU_Clock_Cycles();
+	x = finalCount - initialCount;
+	xM = (DWORD32)(x / 1000000);
+	
+	PutString("x = ");
+	PutUnsigned(xM, 10, 8);
+	PutString(" x 10^6 \n");
+
+	//+++++ Section 3. +++++
+
+	stopTime = Milliseconds() + 1000;
+	initialCount = CPU_Clock_Cycles();
+
+	while( Milliseconds() < stopTime ){}
+
+	finalCount = CPU_Clock_Cycles();
+	x = finalCount - initialCount;
+	xM= (DWORD32)(x / 1000000);
+	
+	SetCursorPosition(2, 1);
+	PutString("x = ");
+	PutUnsigned(xM, 10, 8);
+	PutString(" x 10^6 \n");
+
+	//+++++ Section 4. +++++
+
+	stopTime = Milliseconds();
+	SetCursorPosition(3, 1);
+	PutUnsigned(stopTime, 10, 8);
+	PutString("\n");
+	stopTime = Milliseconds() + 2345;
+	while( Milliseconds() < stopTime ){}
+	SetCursorPosition(4, 1);
+	stopTime = Milliseconds();
+	PutUnsigned(stopTime, 10, 8);
+	PutString("\n");	
+
+	//+++++ OUR OWN TEST +++++
+	stopTime = Now_Plus(0);
+	DWORD32 result = 1;
+
+	for(DWORD32 i = 0; i < 100000000; ++i) {
+	  result *= 3;
+	}
+
+	SetCursorPosition(5, 1);
+	PutString("Time taken for operations: ");
+	PutUnsigned(((Now_Plus(0) - stopTime) / 100), 10, 8);
+	PutString("ns/op Result ");
+	PutUnsigned(result, 10, 8);
+	PutString("\n");
+	
+	stopTime = Now_Plus(0);
+	result = 1;
+
+	for(DWORD32 i = 0; i < 100000000; ++i) {
+	  result += 3;
+	}
+
+	SetCursorPosition(6, 1);
+	PutString("Time taken for operations: ");
+	PutUnsigned(((Now_Plus(0) - stopTime) / 100), 10, 8);
+	PutString("ns/op Result ");
+	PutUnsigned(result, 10, 8);
+	PutString("\n");
+	
+	return 0;
+}
diff --git a/chap3.1/main.o b/chap3.1/main.o
new file mode 100644
index 0000000000000000000000000000000000000000..ed639f510e0d7bcd1b95dac195379d32b7885c49
GIT binary patch
literal 4196
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
L@;^upgkkCc^&ED(

literal 0
HcmV?d00001

diff --git a/chap3.1/makeNrun.sh b/chap3.1/makeNrun.sh
new file mode 100644
index 0000000..cdc1361
--- /dev/null
+++ b/chap3.1/makeNrun.sh
@@ -0,0 +1,16 @@
+#!/bin/bash
+
+clear
+echo "This script includes commands to make the project and run it"
+
+echo "clean up the directory with make clean"
+make clean
+echo "make the project with make."
+make
+echo "Guiding mtools mcopy to its configuration file"
+export MTOOLSRC=mtools.conf
+echo "Copying the binary to floppy image"
+mcopy embedded.bin a:
+echo "Starting Qemu with given binary in the floppy image"
+qemu-system-i386 -drive format=raw,file=floppy.img,if=floppy
+
diff --git a/chap3.1/mtools.conf b/chap3.1/mtools.conf
new file mode 100644
index 0000000..c387b85
--- /dev/null
+++ b/chap3.1/mtools.conf
@@ -0,0 +1,6 @@
+MTOOLS_NO_VFAT=1
+drive a:
+      file="floppy.img"
+      fat_bits=12
+      cylinders=80 heads=2 sectors=18
+      mformat_only
diff --git a/chap3.2/a.out b/chap3.2/a.out
new file mode 100644
index 0000000000000000000000000000000000000000..095543f12b34a1e344438c028ebd731d2fd90c0f
GIT binary patch
literal 12904
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

literal 0
HcmV?d00001

diff --git a/chap3.2/main.c b/chap3.2/main.c
new file mode 100644
index 0000000..0dc63f4
--- /dev/null
+++ b/chap3.2/main.c
@@ -0,0 +1,71 @@
+#include <stdio.h>
+#include <stdbool.h>
+#include <math.h>
+#include <X11/Xlib.h>
+
+// compile and run
+// gcc main.c -lm -lX11
+// ./a.out
+// To exit:
+// ctrl+c
+
+
+int main(int argc, char **argv)
+{
+	//+++++ section 1. Initialization +++++
+
+	bool blinkOn = false;
+	int horizontalPosition, verticalPosition;
+	int horizontalMotion, verticalMotion;
+	double combinedMotion = 0;
+	double motionMetric = 0;
+	static double motionThreshold = 350;
+	static double alpha = 0.80;
+	double beta = 1 - alpha;
+	struct timeval  timeReadOut;
+	long double timerValueSeconds = 0;
+	static long double blinkHalfCycleSeconds = 2;
+	long double nextActionTime = 0;
+
+	// initialize environment for listening to Mouse
+	Display *display;
+	XEvent xevent;
+	Window window;
+	if( (display = XOpenDisplay(NULL)) == NULL )
+		return -1;
+	window = DefaultRootWindow(display);
+	XAllowEvents(display, AsyncBoth, CurrentTime);
+	XGrabPointer(display, window, 1, PointerMotionMask | ButtonPressMask | ButtonReleaseMask, GrabModeAsync, GrabModeAsync, None, None, CurrentTime);
+
+	// initialize for time-based actions
+	gettimeofday(&timeReadOut, NULL);
+	timerValueSeconds = (long double)timeReadOut.tv_sec + (long double)timeReadOut.tv_usec/1000000.0;
+	printf("Current timer value is %Lf seconds\n", timerValueSeconds);
+	nextActionTime = timerValueSeconds + blinkHalfCycleSeconds;
+
+	while(true)
+	{
+		//+++++ section 2. Update motion metric ++++++++++++++++++
+
+		if(XCheckMaskEvent(display, PointerMotionMask, &xevent))
+		{
+			// calculate motion
+			horizontalMotion = xevent.xmotion.x_root - horizontalPosition;
+			verticalMotion   = xevent.xmotion.y_root - verticalPosition;
+			// update position
+			horizontalPosition = xevent.xmotion.x_root;
+			verticalPosition   = xevent.xmotion.y_root;
+			//printf("X = %d , Y = %d \n", horizontalPosition, verticalPosition); //for debug
+			//printf("dX = %d , dY = %d \n", horizontalMotion, verticalMotion); //for debug
+			combinedMotion = sqrt(pow((double)horizontalMotion,2.0) + pow((double)verticalMotion,2.0));
+			printf("dXY = %f \n", combinedMotion); //for debug
+			motionMetric = alpha * combinedMotion + beta * motionMetric ;
+			printf("motionMetric = %f\n", motionMetric); //for debug
+			if (motionMetric > motionThreshold)
+				printf("\nLarge motion detected. Motion Metric = %f\n", motionMetric);
+		}
+
+
+	}
+	return 0;
+}
diff --git a/chap3.2/main.c~ b/chap3.2/main.c~
new file mode 100644
index 0000000..17a8552
--- /dev/null
+++ b/chap3.2/main.c~
@@ -0,0 +1,71 @@
+#include <stdio.h>
+#include <stdbool.h>
+#include <math.h>
+#include <X11/Xlib.h>
+
+// compile and run
+// gcc main.c -lm -lX11
+// ./a.out
+// To exit:
+// ctrl+c 
+
+
+int main(int argc, char **argv)
+{
+	//+++++ section 1. Initialization +++++
+
+	bool blinkOn = false;
+	int horizontalPosition, verticalPosition;
+	int horizontalMotion, verticalMotion;
+	double combinedMotion = 0; 
+	double motionMetric = 0; 	
+	static double motionThreshold = 90;
+	static double alpha = 0.99;
+	double beta = 1 - alpha;
+	struct timeval  timeReadOut;	
+	long double timerValueSeconds = 0;
+	static long double blinkHalfCycleSeconds = 2;
+	long double nextActionTime = 0;
+
+	// initialize environment for listening to Mouse
+	Display *display;
+	XEvent xevent;
+	Window window;
+	if( (display = XOpenDisplay(NULL)) == NULL )
+		return -1;
+	window = DefaultRootWindow(display);
+	XAllowEvents(display, AsyncBoth, CurrentTime);
+	XGrabPointer(display, window, 1, PointerMotionMask | ButtonPressMask | ButtonReleaseMask, GrabModeAsync, GrabModeAsync, None, None, CurrentTime);
+	
+	// initialize for time-based actions
+	gettimeofday(&timeReadOut, NULL);
+	timerValueSeconds = (long double)timeReadOut.tv_sec + (long double)timeReadOut.tv_usec/1000000.0;
+	printf("Current timer value is %Lf seconds\n", timerValueSeconds);
+	nextActionTime = timerValueSeconds + blinkHalfCycleSeconds;
+
+	while(true)
+	{
+		//+++++ section 2. Update motion metric ++++++++++++++++++
+
+		if(XCheckMaskEvent(display, PointerMotionMask, &xevent))
+		{
+			// calculate motion
+			horizontalMotion = xevent.xmotion.x_root - horizontalPosition;
+			verticalMotion   = xevent.xmotion.y_root - verticalPosition;
+			// update position
+			horizontalPosition = xevent.xmotion.x_root;
+			verticalPosition   = xevent.xmotion.y_root;
+			//printf("X = %d , Y = %d \n", horizontalPosition, verticalPosition); //for debug
+			//printf("dX = %d , dY = %d \n", horizontalMotion, verticalMotion); //for debug
+			combinedMotion = sqrt(pow((double)horizontalMotion,2.0) + pow((double)verticalMotion,2.0));
+			//printf("dXY = %f \n", combinedMotion); //for debug
+			motionMetric = alpha * combinedMotion + beta * motionMetric ;
+			//printf("motionMetric = %f\n", motionMetric); //for debug
+			if (motionMetric > motionThreshold)
+				printf("\nLarge motion detected. Motion Metric = %f\n", motionMetric);
+		}
+
+		
+	}
+	return 0;
+}
diff --git a/chap3.2/questions3_2.txt b/chap3.2/questions3_2.txt
new file mode 100644
index 0000000..eea70f8
--- /dev/null
+++ b/chap3.2/questions3_2.txt
@@ -0,0 +1,31 @@
+1)
+Yes, the motionMetric is dependent on the Euclidean distance formula for planes.
+
+The distance is the same no matter the direction/angle. X and Y movement weigh up to eachother 
+so "combinedMotion" will be the same. But "motionMetric" is dependent on its previous value, thus
+if we have the same combinedMotion as the previuos motionMetric the new motionMetic will have
+the same value. This is because aplha and beta. Example: motionMetric = combinedMotion = 10, alpa = 0.2 and beta 0.8. newMetric = 0.2 * 10 + 0.8 * 10 = 2 + 8 = 10. 
+
+2)
+Instead of Euclidean metric we could use Manhattan distance(d = |x1 - x2| + |y1 -y2|). To calculate the distance between two point we take the absolute distance
+between x-axis movement and y-axis movment and add then together.
+
+3)
+An advantage to Euclidean metric is that it will give the shortest distance
+between two points which is good when there is no grids ("city block") that
+restrict the movment between the two points.
+
+Disadvantage with Euclidean metric is that it requires a square root operation, which can be
+expensive.
+
+4)
+The higher alpha value make the motionMetric decrease faster to a "convergent"
+value which lead to how the mouse movement will be have. High alpha(0.99) will
+lead to fast move movment but sporadic movement beacuse motionMetric don't
+converge to same values.
+
+Low alpha lead to slower motionMetric, thus make the mouse movement
+slower.
+
+We would pick an alpha between 0.5 and 0.8 so we can see where the mouse is
+moving to.
diff --git a/chap3.2/questions3_2.txt~ b/chap3.2/questions3_2.txt~
new file mode 100644
index 0000000..e69de29
diff --git a/chap4/Makefile b/chap4/Makefile
new file mode 100644
index 0000000..a34d040
--- /dev/null
+++ b/chap4/Makefile
@@ -0,0 +1,27 @@
+OBJ    = main.o
+#OBJ   = main.o llmultiply.o
+CFLAGS = -O0
+#CFLAGS = -O3
+
+COURSE   = /courses/TDDI11/sw
+LDSCRIPT = $(COURSE)/lib/link.cmd
+BOOTSECT = $(COURSE)/lib/bootload.bin
+INCLUDES = -I "$(COURSE)/include" -I "$(COURSE)/include/djgpp" $(EXTRA_INCLUDES)
+CC       = $(COURSE)/i386-elf-gcc-7.3.0/bin/i386-elf-gcc
+CFLAGS  += -Wall -g $(INCLUDES)
+LD       = $(COURSE)/i386-elf-gcc-7.3.0/bin/i386-elf-ld
+LDFLAGS  = -T$(LDSCRIPT) -static -ustart -Map link.map
+AS       = nasm
+ASFLAGS  = -f elf32
+
+embedded.bin: $(OBJ)
+	$(LD) $(OBJ) $(LIBS) $(LDFLAGS)
+
+%.o: %.c
+	$(CC) $(CFLAGS) -c $<
+
+%.o: %.asm
+	$(AS) $(ASFLAGS) $<
+
+clean:
+	\rm -f embedded.bin *~ *.o link.map
diff --git a/chap4/embedded.bin b/chap4/embedded.bin
new file mode 100644
index 0000000000000000000000000000000000000000..61b4be02a7dcde51d3194687a40719a234ea2e8f
GIT binary patch
literal 8731
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

literal 0
HcmV?d00001

diff --git a/chap4/floppy.img b/chap4/floppy.img
new file mode 100644
index 0000000000000000000000000000000000000000..b5cae39f638f6ebc2a8e6be3234d630e3000eff4
GIT binary patch
literal 1474560
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
zfzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z
z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c
z4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C
z(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R
z7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7
zfzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S`WG8Umvs
zFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF
z0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*
zAut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?
z8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*O
zqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8Umvs
zFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiQ~
zMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ON
zU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU
z1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0q
zLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(
zGz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!n
zMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ON
zU^E0q!DtAKhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeD
zjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mk
zz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By
z2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1J
zhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kin
zXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeD
zjE2By2#kinC>RZa(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C
z(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R
z7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7
zfzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z
z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c
z4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C
z(GVC7fzc2c4S~@R7zLvtFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?
z8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*O
zqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8Umvs
zFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF
z0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*
zAut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?
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
zFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF
z0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*
zAut*OqaiRF0;3@?8UmvsFd71*Aut*OqhK@yMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU
z1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0q
zLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(
zGz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!n
zMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ON
zU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU
z1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU=)moz-S1JhQMeDjE2By2#kinXb6mk
zz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By
z2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1J
zhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kin
zXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeD
zjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mk
pz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2n^y7001rbp;!O_

literal 0
HcmV?d00001

diff --git a/chap4/link.map b/chap4/link.map
new file mode 100644
index 0000000..f1d2d5c
--- /dev/null
+++ b/chap4/link.map
@@ -0,0 +1,160 @@
+Archive member included to satisfy reference by file (symbol)
+
+/courses/TDDI11/sw/lib/elf/libepc.a(init-cpu.o)
+                              (start)
+/courses/TDDI11/sw/lib/elf/libepc.a(init-idt.o)
+                              /courses/TDDI11/sw/lib/elf/libepc.a(init-cpu.o) (Init_IDT)
+/courses/TDDI11/sw/lib/elf/libepc.a(init-crt.o)
+                              /courses/TDDI11/sw/lib/elf/libepc.a(init-cpu.o) (Init_CRT)
+/courses/TDDI11/sw/lib/elf/libepc.a(display.o)
+                              main.o (SetCursorPosition)
+/courses/TDDI11/sw/lib/elf/libepc.a(init8259.o)
+                              /courses/TDDI11/sw/lib/elf/libepc.a(init-cpu.o) (Init8259)
+/courses/TDDI11/sw/lib/elf/libepc.a(init8253.o)
+                              /courses/TDDI11/sw/lib/elf/libepc.a(init-cpu.o) (Init8253)
+/courses/TDDI11/sw/lib/elf/libepc.a(checkcpu.o)
+                              /courses/TDDI11/sw/lib/elf/libepc.a(init-cpu.o) (Check_CPU)
+/courses/TDDI11/sw/lib/elf/libepc.a(io.o)
+                              /courses/TDDI11/sw/lib/elf/libepc.a(init-idt.o) (ISR_PIC1)
+/courses/TDDI11/sw/lib/elf/libepc.a(keyboard.o)
+                              /courses/TDDI11/sw/lib/elf/libepc.a(io.o) (Enqueue)
+
+Discarded input sections
+
+ .eh_frame      0x0000000000000000       0x9c main.o
+
+Memory Configuration
+
+Name             Origin             Length             Attributes
+conventional     0x0000000000000000 0x00000000000a0000
+reserved         0x00000000000a0000 0x0000000000060000
+extended         0x0000000000100000 0x00000000fff00000
+*default*        0x0000000000000000 0xffffffffffffffff
+
+Linker script and memory map
+
+LOAD main.o
+LOAD /courses/TDDI11/sw/lib/elf/libepc.a
+LOAD /courses/TDDI11/sw/lib/elf/djgpp/libc.a
+LOAD /courses/TDDI11/sw/i386-elf-gcc-7.3.0/lib/gcc/i386-elf/7.3.0/libgcc.a
+
+.text           0x0000000000000000     0x1a84
+                0x0000000000000000                text_frst = .
+ *(.start)
+ .start         0x0000000000000000        0x8 /courses/TDDI11/sw/lib/elf/libepc.a(init-cpu.o)
+                0x0000000000000000                start
+ *(.init)
+ *(.text)
+ .text          0x0000000000000008      0x4a1 main.o
+                0x0000000000000008                llmultiply
+                0x00000000000002d9                PutUnsignedLongLong
+                0x0000000000000315                main
+ *fill*         0x00000000000004a9        0x3 
+ .text          0x00000000000004ac       0x50 /courses/TDDI11/sw/lib/elf/libepc.a(init-cpu.o)
+                0x00000000000004ac                Init_CPU
+ .text          0x00000000000004fc      0x5a0 /courses/TDDI11/sw/lib/elf/libepc.a(init-idt.o)
+                0x000000000000090c                IRQ2INT
+                0x0000000000000920                _GetISR
+                0x0000000000000964                SetISR
+                0x000000000000099c                Init_IDT
+ .text          0x0000000000000a9c      0x110 /courses/TDDI11/sw/lib/elf/libepc.a(init-crt.o)
+                0x0000000000000a9c                Init_CRT
+                0x0000000000000ad0                _LastMemoryAddress
+ .text          0x0000000000000bac      0x6e0 /courses/TDDI11/sw/lib/elf/libepc.a(display.o)
+                0x0000000000000bac                SetCursorVisible
+                0x0000000000000c30                _GetCursorRow
+                0x0000000000000c44                _GetCursorCol
+                0x0000000000000c58                SetCursorPosition
+                0x0000000000000cfc                ClearScreen
+                0x0000000000000d64                _PutAttb
+                0x0000000000000db0                _PutCharAt
+                0x0000000000000ddc                _PutChar
+                0x0000000000000e60                PutString
+                0x0000000000000e98                PutUnsigned
+                0x0000000000000ed0                FormatUnsigned
+                0x0000000000000f60                Unsigned2Ascii
+                0x0000000000000fe4                _Cell
+ .text          0x000000000000128c       0xe0 /courses/TDDI11/sw/lib/elf/libepc.a(init8259.o)
+                0x000000000000128c                Init8259
+ .text          0x000000000000136c       0xb0 /courses/TDDI11/sw/lib/elf/libepc.a(init8253.o)
+                0x000000000000136c                Init8253
+ .text          0x000000000000141c       0x98 /courses/TDDI11/sw/lib/elf/libepc.a(checkcpu.o)
+                0x000000000000141c                Check_CPU
+ .text          0x00000000000014b4       0x60 /courses/TDDI11/sw/lib/elf/libepc.a(io.o)
+                0x00000000000014b4                TimerTickISR
+                0x00000000000014c0                KeyboardISR
+                0x00000000000014e0                ISR_PIC1
+                0x00000000000014e7                ISR_PIC2
+                0x00000000000014f0                ___main
+                0x00000000000014f1                inportb
+                0x00000000000014fb                outportb
+                0x000000000000150d                _exit
+ .text          0x0000000000001514      0x570 /courses/TDDI11/sw/lib/elf/libepc.a(keyboard.o)
+                0x0000000000001514                ScanCodeRdy
+                0x0000000000001538                GetScanCode
+                0x0000000000001568                ScanCode2Ascii
+                0x0000000000001728                SetsKybdState
+                0x0000000000001918                Enqueue
+                0x0000000000001a83                text_last = (. - 0x1)
+
+.data           0x0000000000001aa0      0x77b
+                0x0000000000001aa0                data_frst = .
+ *(.data)
+ .data          0x0000000000001aa0       0xc0 main.o
+                0x0000000000001aa0                cases
+ .data          0x0000000000001b60       0x20 /courses/TDDI11/sw/lib/elf/libepc.a(init-cpu.o)
+                0x0000000000001b7e                code_selector
+ .data          0x0000000000001b80       0x90 /courses/TDDI11/sw/lib/elf/libepc.a(init-idt.o)
+ .data          0x0000000000001c10       0x10 /courses/TDDI11/sw/lib/elf/libepc.a(init-crt.o)
+ .data          0x0000000000001c20       0x30 /courses/TDDI11/sw/lib/elf/libepc.a(display.o)
+ .data          0x0000000000001c50        0x0 /courses/TDDI11/sw/lib/elf/libepc.a(init8259.o)
+ .data          0x0000000000001c50        0x0 /courses/TDDI11/sw/lib/elf/libepc.a(init8253.o)
+ .data          0x0000000000001c50        0xc /courses/TDDI11/sw/lib/elf/libepc.a(io.o)
+                0x0000000000001c50                msec
+                0x0000000000001c54                old_tick_isr
+                0x0000000000001c58                old_kybd_isr
+ .data          0x0000000000001c5c      0x5a0 /courses/TDDI11/sw/lib/elf/libepc.a(keyboard.o)
+ *(.rodata)
+ .rodata        0x00000000000021fc       0x1f main.o
+ *(.rodata.str1.1)
+ *(.rodata.str1.32)
+                0x000000000000221a                data_last = (. - 0x1)
+
+.bss            0x000000000000221c      0x83c
+                0x000000000000221c                bss_frst = .
+ *(.bss)
+ .bss           0x000000000000221c        0x0 main.o
+ .bss           0x000000000000221c      0x800 /courses/TDDI11/sw/lib/elf/libepc.a(init-idt.o)
+ .bss           0x0000000000002a1c        0x0 /courses/TDDI11/sw/lib/elf/libepc.a(init-crt.o)
+ .bss           0x0000000000002a1c        0x8 /courses/TDDI11/sw/lib/elf/libepc.a(display.o)
+ .bss           0x0000000000002a24        0x0 /courses/TDDI11/sw/lib/elf/libepc.a(init8259.o)
+ .bss           0x0000000000002a24        0x0 /courses/TDDI11/sw/lib/elf/libepc.a(init8253.o)
+ .bss           0x0000000000002a24       0x34 /courses/TDDI11/sw/lib/elf/libepc.a(keyboard.o)
+ *(COMMON)
+                0x0000000000002a57                bss_last = (. - 0x1)
+
+/DISCARD/
+ *(.eh_frame)
+                0x0000000000002a58                stack_frst = (bss_last + 0x1)
+                0x000000000000aa57                stack_last = (bss_last + 0x8000)
+                0x000000000000aa58                heap_frst = (stack_last + 0x1)
+OUTPUT(embedded.bin binary)
+
+.debug_info     0x0000000000000000      0x2ff
+ .debug_info    0x0000000000000000      0x2ff main.o
+
+.debug_abbrev   0x0000000000000000      0x109
+ .debug_abbrev  0x0000000000000000      0x109 main.o
+
+.debug_aranges  0x0000000000000000       0x20
+ .debug_aranges
+                0x0000000000000000       0x20 main.o
+
+.debug_line     0x0000000000000000       0xe2
+ .debug_line    0x0000000000000000       0xe2 main.o
+
+.debug_str      0x0000000000000000      0x184
+ .debug_str     0x0000000000000000      0x184 main.o
+
+.comment        0x0000000000000000       0x12
+ .comment       0x0000000000000000       0x12 main.o
diff --git a/chap4/llmultiply.asm b/chap4/llmultiply.asm
new file mode 100644
index 0000000..21abf29
--- /dev/null
+++ b/chap4/llmultiply.asm
@@ -0,0 +1,100 @@
+;
+;  Test cases. All numbers are in hex.
+;
+;      111122223333 *     555566667777 =          5B061D958BF0ECA7C0481B5
+;  3456FEDCAAAA1000 * EDBA00112233FF01 = 309A912AF7188C57E62072DD409A1000
+;  FFFFEEEEDDDDCCCC * BBBBAAAA99998888 = BBBB9E2692C5DDDCC28F7531048D2C60
+;  FFFFFFFFFFFFFFFF * FFFFFFFFFFFFFFFF = FFFFFFFFFFFFFFFE0000000000000001
+;  00000001FFFFFFFF * 00000001FFFFFFFF = 0000000000000003FFFFFFFC00000001
+;  FFFEFFFFFFFFFFFF * FFFF0001FFFFFFFF = FFFE0002FFFDFFFE0001FFFE00000001
+;
+
+;  void llmultiply(unsigned long long int l1,
+;                  unsigned long long int l2,
+;                  unsigned char *result);
+
+;  a = AH * (2 << 32) + AL
+;  b = BH * (2 << 32) + BL
+;
+;  a * b = (AH * BH            * (2 << 64)) +
+;          (AH * BL + AL * BH) * (2 << 32)  +
+;           AL * BL
+
+; For more infromation, see the lab manual!
+
+	SECTION .data
+
+
+
+	SECTION .text
+	ALIGN	16
+	BITS	32
+
+	;; To access parameter BH on the stack you do
+	;;   MOV EAX, [EBP + 20]
+	;; Replace the zero below with the correct value to be able
+	;; to write your assembly code a little bit more readable:
+	;;   MOV EAX, [EBP + BH_OFF]
+AL_OFF	EQU     8	; Offset from EBP to low  bits of a (AL)
+AH_OFF	EQU     12	; Offset from EBP to high bits of a (AH)
+BL_OFF	EQU     16	; Offset from EBP to low  bits of b (BL)
+BH_OFF	EQU     20	; Offset from EBP to high bits of b (BH)
+RES_OFF	EQU     24	; Offset from EBP to result array pointer
+	;;    ^^^^^ Replace 0 with correct values above
+
+
+	GLOBAL llmultiply
+
+llmultiply:
+	PUSH EBP
+	MOV EBP, ESP
+
+	;; Put your implementation here
+	;  a * b = (AH * BH            * (2 << 64)) +
+	;          (AH * BL + AL * BH) * (2 << 32)  +
+	;           AL * BL
+
+	PUSH EBX
+	PUSH ESI
+
+  MOV EBX, [EBP + RES_OFF]	;array_ptr
+
+	;;AL * BL
+	MOV EAX, [EBP + AL_OFF]
+	MUL DWORD [EBP + BL_OFF]
+	MOV DWORD [EBX], EAX	;Write to array_ptr[0]
+	MOV ECX, EDX	;Move mul1_h (2 << 32)
+
+	;;(AH * BL + AL * BH) * (2 << 32)
+	MOV EAX, [EBP + AL_OFF]
+	MUL DWORD [EBP + BH_OFF]
+	ADD EAX, ECX
+	ADC EDX, 0	;Will never cause overflow. EDX max value after MUL is FFFFFFFE.
+	MOV ESI, EAX ;Move mul2_l (2 << 32)
+	MOV ECX, EDX	;Move mul2_h (2 << 64)
+
+	MOV EAX, [EBP + AH_OFF]
+	MUL DWORD [EBP + BL_OFF]
+	ADD EAX, ESI
+	ADC	EDX, 0
+	MOV DWORD [EBX + 4], EAX	;Write to array_ptr[1]
+	ADD ECX, EDX	;ECX (2 << 64), but can produce a carry.
+	PUSHF	;Save carry (2 << 128)
+
+	;;(AH * BH) * (2 << 64)
+	MOV EAX, [EBP + AH_OFF]
+	MUL DWORD [EBP + BH_OFF]
+	ADD EAX, ECX
+	ADC EDX, 0
+	MOV DWORD [EBX + 8], EAX	;Write to array_ptr[2]
+
+	POPF
+	ADC EDX, 0
+	MOV DWORD [EBX + 12], EDX 	;Write to array_ptr[3]
+
+	POP ESI
+	POP EBX
+	;; Put your implementation end
+
+	POP EBP				; restore EBP reg
+	RET				;  return
diff --git a/chap4/main.c b/chap4/main.c
new file mode 100644
index 0000000..f308fcd
--- /dev/null
+++ b/chap4/main.c
@@ -0,0 +1,246 @@
+#include <libepc.h>
+
+/*
+Assembly:
+OBJ = main.o llmultiply.o
+CFLAGS = -O0
+
+1)Total CPU cycle: 11A78E9F4=4739099124 / 10m = 473.910 cycles per llmultiply
+2)Total CPU cycle: 10F7FF450=4555011152 / 10m = 455.501 cycles per llmultiply
+
+C none-optimize:
+OBJ = main.o
+CFLAGS = -O0
+
+1)Total CPU cycle: 34557442C=14048248876 / 10m = 1404.825 cycles per llmultiply
+2)Total CPU cycle: 32896E668=13565879912 / 10m = 1356.588 cycles per llmultiply
+
+C optimize:
+OBJ = main.o
+CFLAGS = -O3
+
+1)Total CPU cycle: 5111E135=1360126261 / 10m = 136.013 cycles per llmultiply
+2)Total CPU cycle: 6C659BE8=1818598376 / 10m = 181.860 cycles per llmultiply
+
+CONCLUSION:
+Which  version  is  most  effective?  How  big improvement  does  compiler optimization give?
+
+We found that the C optimize version is the most effective. For our test case we found the
+optimize C version uses circa 3/5 less CPU cycles compaired to the assembler version. This
+is because of compiler MAGIC.
+
+*/
+
+/*
+void llmultiply(unsigned long long int l1,
+                unsigned long long int l2,
+                unsigned char *result);
+*/
+
+
+
+void llmultiply(unsigned long long int l1,
+                unsigned long long int l2,
+                unsigned char *result)
+{
+  unsigned long int *res = (unsigned long int *)result;
+  unsigned long long int al = l1 & 0xFFFFFFFF;
+  unsigned long long int ah = l1 >> 32;
+  unsigned long long int bl = l2 & 0xFFFFFFFF;
+  unsigned long long int bh = l2 >> 32;
+
+  //a * b = ah * bh * 2^64
+  //        + (ah * bl + al * bh) * 2^32
+  //        + al * bl
+
+  unsigned long long int ah_bh = ah * bh;
+  unsigned long long int ah_bl = ah * bl;
+  unsigned long long int al_bh = al * bh;
+  unsigned long long int al_bl = al * bl;
+
+  unsigned long long int ah_bh_h = ah_bh >> 32; //2^128
+  unsigned long long int ah_bh_l = ah_bh & 0xFFFFFFFF; //2^64
+
+  unsigned long long int ah_bl_h = ah_bl >> 32; //2^64
+  unsigned long long int ah_bl_l = ah_bl & 0xFFFFFFFF; //2^32
+
+  unsigned long long int al_bh_h = al_bh >> 32; //2^64
+  unsigned long long int al_bh_l = al_bh & 0xFFFFFFFF;  //2^32
+
+  unsigned long long int al_bl_h = al_bl >> 32; //2^32
+  unsigned long long int al_bl_l = al_bl & 0xFFFFFFFF; //Array[0]
+
+
+  unsigned long long int sum_1 = ah_bl_l + al_bh_l + al_bl_h;
+  unsigned long int sum_1_h = sum_1 >> 32; //2^64
+  unsigned long int sum_1_l = sum_1 & 0xFFFFFFFF; //2^32 Array[1]
+
+  unsigned long long int sum_2 = ah_bh_l + ah_bl_h +  al_bh_h + sum_1_h;
+  unsigned long int sum_2_h = sum_2 >> 32; //2^128 Array[3]
+  unsigned long int sum_2_l = sum_2 & 0xFFFFFFFF; //2^64 Array[2]
+
+  res[0] = al_bl_l;
+  res[1] = sum_1_l;
+  res[2] = sum_2_l;
+  res[3] = ah_bh_h + sum_2_h;
+ }
+
+
+struct test_case {
+  unsigned long long int a;
+  unsigned long long int b;
+  unsigned long long int rh;
+  unsigned long long int rl;
+};
+
+struct test_case cases[6] = {
+
+  { 0x0000111122223333ULL, 0x0000555566667777ULL,
+    0x0000000005B061D9ULL, 0x58BF0ECA7C0481B5ULL },
+
+  { 0x3456FEDCAAAA1000ULL, 0xEDBA00112233FF01ULL,
+    0x309A912AF7188C57ULL, 0xE62072DD409A1000ULL },
+
+  { 0xFFFFEEEEDDDDCCCCULL, 0xBBBBAAAA99998888ULL,
+    0xBBBB9E2692C5DDDCULL, 0xC28F7531048D2C60ULL },
+
+  { 0xFFFFFFFFFFFFFFFFULL, 0xFFFFFFFFFFFFFFFFULL,
+    0xFFFFFFFFFFFFFFFEULL, 0x0000000000000001ULL },
+
+  { 0x00000001FFFFFFFFULL, 0x00000001FFFFFFFFULL,
+    0x0000000000000003ULL, 0xFFFFFFFC00000001ULL },
+
+  { 0xFFFEFFFFFFFFFFFFULL, 0xFFFF0001FFFFFFFFULL,
+    0xFFFE0002FFFDFFFEULL, 0x0001FFFE00000001ULL }
+};
+
+void PutUnsignedLongLong(unsigned long long int* ulli)
+{
+  unsigned long int* uli = (unsigned long int*)ulli;
+  PutUnsigned(uli[1], 16, 8);
+  PutUnsigned(uli[0], 16, 8);
+}
+
+int main(int argc, char *argv[])
+{
+  unsigned char result[16];
+
+  ClearScreen(0x07);
+  SetCursorPosition(0, 0);
+
+  //Original code
+  for (int j = 0; j < 6; ++j)
+  {
+    PutString("Test : ");
+    PutUnsignedLongLong(&cases[j].a);
+    PutString(" * ");
+    PutUnsignedLongLong(&cases[j].b);
+    PutString("\r\n");
+
+    PutString("    == ");
+    PutUnsignedLongLong(&cases[j].rh);
+    PutUnsignedLongLong(&cases[j].rl);
+    PutString("\r\n");
+
+    llmultiply(cases[j].a, cases[j].b, result);
+
+
+    PutString("Result ");
+    PutUnsignedLongLong(&result[8]);
+    PutUnsignedLongLong(&result[0]);
+    PutString("\r\n");
+
+    PutString("\r\n");
+  }
+
+  /*
+  //TEST case
+  unsigned long long int stop_cpu_cycle;
+  unsigned long long int diff;
+  unsigned long long int loop_diff;
+
+  unsigned long long int start_cpu_cycle = (unsigned long long int)CPU_Clock_Cycles();
+
+  for(int i = 0; i < 10000000; ++i)
+  {
+    unsigned long long int a = *(unsigned long long int *)&result[0];
+    unsigned long long int b = *(unsigned long long int *)&result[8];
+    llmultiply(a, b, result);
+  }
+
+  stop_cpu_cycle = (unsigned long long int)CPU_Clock_Cycles();
+  loop_diff = stop_cpu_cycle - start_cpu_cycle;
+
+  start_cpu_cycle = (unsigned long long int)CPU_Clock_Cycles();
+
+  for(int i = 0; i < 10000000; ++i)
+  {
+    unsigned long long int a = *(unsigned long long int *)&result[0];
+    unsigned long long int b = *(unsigned long long int *)&result[8];
+    llmultiply(a, b, result);
+
+    unsigned long long int a1 = *(unsigned long long int *)&result[0];
+    unsigned long long int b1 = *(unsigned long long int *)&result[8];
+    llmultiply(a1, b1, result);
+  }
+
+  stop_cpu_cycle = (unsigned long long int)CPU_Clock_Cycles();
+  diff = stop_cpu_cycle - start_cpu_cycle - loop_diff;
+
+  //Garbage
+  PutUnsignedLongLong(&result[8]);
+  PutUnsignedLongLong(&result[0]);
+
+  PutString("Loop diff CPU cycle: ");
+  PutUnsignedLongLong(&(loop_diff));
+  PutString("\r\n");
+
+  PutString("Total CPU cycle: ");
+  PutUnsignedLongLong(&(diff));
+  PutString("\r\n");
+
+  */
+
+  return 0;
+}
+
+
+/*
+  //OLD assembler
+	;; Put your implementation here
+	PUSH EBX
+  MOV EBX, [EBP + RES_OFF]
+
+	MOV EAX, [EBP + AL_OFF]
+	MUL DWORD [EBP + BL_OFF]
+	MOV DWORD [EBX], EAX	;;Write to Array[0]
+	MOV ECX, EDX	;;EDX contain high from mul (2^32)
+
+	MOV EAX, [EBP + AL_OFF]
+	MUL DWORD [EBP + BH_OFF]
+	MOV [EBX + 4], EAX 	;;Save low from mul in Array[1]
+	MOV [EBX + 8], EDX ;;Save EDX contain high from mul (2^64)
+
+	MOV EAX, [EBP + AH_OFF]
+	MUL DWORD [EBP + BL_OFF]
+	ADD EAX, ECX
+	ADC EDX, 0
+	ADD EAX, [EBX + 4]
+	ADC EDX, 0
+	PUSHF	;;Save carry (2^128)
+	MOV ECX, EDX 	;;Save EDX contain high from mul (2^64)
+	MOV [EBX + 4], EAX ;;Write to Array[1]
+
+	MOV EAX, [EBP + AH_OFF]
+	MUL DWORD [EBP + BH_OFF]
+	ADD EAX, [EBX + 8]
+	ADC EDX, 0
+	ADD EAX, ECX
+	ADC EDX, 0
+	POPF
+	ADC EDX, 0
+	MOV [EBX + 8], EAX	;;Write to Array[2]
+	MOV [EBX + 12], EDX	;;Write to Array[3]
+
+	POP EBX
+*/
diff --git a/chap4/main.o b/chap4/main.o
new file mode 100644
index 0000000000000000000000000000000000000000..5ab4068165790ba23b6f960e758ea1a321bb726f
GIT binary patch
literal 5400
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
N85m}RB%m0k4gi<+=g0s6

literal 0
HcmV?d00001

diff --git a/chap4/makeNrun.sh b/chap4/makeNrun.sh
new file mode 100644
index 0000000..cdc1361
--- /dev/null
+++ b/chap4/makeNrun.sh
@@ -0,0 +1,16 @@
+#!/bin/bash
+
+clear
+echo "This script includes commands to make the project and run it"
+
+echo "clean up the directory with make clean"
+make clean
+echo "make the project with make."
+make
+echo "Guiding mtools mcopy to its configuration file"
+export MTOOLSRC=mtools.conf
+echo "Copying the binary to floppy image"
+mcopy embedded.bin a:
+echo "Starting Qemu with given binary in the floppy image"
+qemu-system-i386 -drive format=raw,file=floppy.img,if=floppy
+
diff --git a/chap4/mtools.conf b/chap4/mtools.conf
new file mode 100644
index 0000000..c387b85
--- /dev/null
+++ b/chap4/mtools.conf
@@ -0,0 +1,6 @@
+MTOOLS_NO_VFAT=1
+drive a:
+      file="floppy.img"
+      fat_bits=12
+      cylinders=80 heads=2 sectors=18
+      mformat_only
diff --git a/chap5/Makefile b/chap5/Makefile
new file mode 100644
index 0000000..f965b92
--- /dev/null
+++ b/chap5/Makefile
@@ -0,0 +1,22 @@
+OBJ    = main.o serial.o inbound.o outbound.o
+CFLAGS = -O0
+
+COURSE   = /courses/TDDI11/sw
+LDSCRIPT = $(COURSE)/lib/link.cmd
+BOOTSECT = $(COURSE)/lib/bootload.bin
+INCLUDES = -I "$(COURSE)/include" -I "$(COURSE)/include/djgpp" $(EXTRA_INCLUDES)
+CC       = $(COURSE)/i386-elf-gcc-7.3.0/bin/i386-elf-gcc
+CFLAGS  += -Wall -g $(INCLUDES)
+LD       = $(COURSE)/i386-elf-gcc-7.3.0/bin/i386-elf-ld
+LDFLAGS  = -T$(LDSCRIPT) -static -ustart -Map link.map
+AS       = nasm
+ASFLAGS  = -f elf32
+
+embedded.bin: $(OBJ)
+	$(LD) $(OBJ) $(LIBS) $(LDFLAGS)
+%.o: %.c
+	$(CC) $(CFLAGS) -c $<
+%.o: %.asm
+	$(AS) $(ASFLAGS) $<
+clean:
+	\rm -f embedded.bin *~ *.o link.map
diff --git a/chap5/embedded.bin b/chap5/embedded.bin
new file mode 100644
index 0000000000000000000000000000000000000000..e7645d34fddabb749d83e0c4755261b2fd2b9542
GIT binary patch
literal 12265
zcmeyB_Hv~p0|P^^j|xlklMnw3|Aclv4QzhH()@-aOC*c&1-B3bL-P@V#Re7(49#zN
zve;kT<N}L;IE*i9IKiA3VhjunFIpKH7+xrVh=m}+hLM5c^_S4jr_FCTUKFc=^mAl1
zFfcG={AOlgcp)GK)(WzSC*uc5<ewy5gdyW6NaPJdL>i*&7D9v(qUHobggfI8NY^%)
z2u~Kv3oAC5p&4$B3=9D;8esxFS&A<jAxinT9Z-GG0Cr(Omg0+2i0F%RstgPhP99F1
z0D}`kJD;ZQ`pf)gg+j^qE?17UT|b!L#UB2hFb5*aSRxA&db3DFoq-_(MEo}eh1`oR
zf*@CLY*2WnFgNi$Buqdd=%2-qC6UFOaYvtl;e|3dtQ8i&(Fa=#Rwc0zq`&zMM{nr&
zpnw-I1VH8pv>qst=yLtezwg3AkmBYy96<puCJ2M&CY(GB*2w`gpF4{o<1xtm!(c}!
zEdGFEK8V-+h9}^~AF%ZTFD6JZFti@vZ<z~<)8!Hj3>~iDyIjAw9N_QhVqjq4-{$%q
ztiA>kfvpEh%iv-wB*1RyaQ()=&-I%_T6YV>4P6EX{_O{vAGow0DDmOn7y4}>#7dBx
z??CJXDF&N4=imST%|`?pYQOQ8D!|lbaRt2C3{eR36W5C}h^h%E4;vonyOEa8&nT*+
z&cML0aDa!AU+F;FtGi4L3>*v_1Pq?^-RL{e_n_}Z--TXPlN}5UFLtpqFuYjG%fRrW
zfscXV#cCD?h8O?-{Qv**_y7O@zgR02R~DC~<|<?)=9HwS=rQz`F+f7|SM!lC-L4z~
zFKi)6zWK<P3;|GT(}nPRw=pm<FueZP`6l+TOJ-SSN~%I?QBi&o11QZjzu^F>4+E)R
z`ycE@u)5Tw(sTvSypq(SqSAsAhR$ygyFhB|Kx!KiYW?!_bbS+xvlEkYQjxU4-3QXM
z3Z%yup~tBxH8Hy&KQpfcNe7a9?t#?HBGmhrr52^-<d-A6nGX~|KOq4Qa<h|vsGo~M
zP-0$ss)B1pa%yTyY6`M?Bar%&2=$(MWr;bNDGL4t$@wX%i0}ltHwmP6E<&wezJhOJ
zNrr-Ren3%va%ypLei2HT^nujpBGkL&mx4mWEwMDG1lbMyK<Zo(>d*~U0C}{iG!I$N
zGmsuZgdUi?LxO`*+#m%?KQI5n<1jciJvTM4M8Pk=L?NIkwKz2oH6EQn>USckFG)<!
zR)Fb(I2}3Oi$Ll-5$fGj^HPfva})xK@=H>aOEUBGP{VK$NPQ$ieL!M*sshAVl(caP
zq|Okb4kJul!KoER&o7XkzklF<b<D|3&jb6`IU_YW8zo%y*ccdITtuk#O-#<n%u7{(
zs6?deD3H392z9}pzAg%BIr)htnR)5Dki?o=k(^op_9{YO6G&enLLVsC<R}EC7N-`K
zrKVs{-@8D1Y!P}w^Ad}TGt={MsecDj&x=qGj+gFGj>bbD7#J8jFT7>|<p8joB)VNW
zIuG@-Tm|L&U0?JW7<zdGI(`3iyZ$k}l-3=<)_LLJ1A*?)KZYmMy19Bq7&}9Mbcg;R
z){O2@p0rMZZr49)-JyJGodIkhi(zpiaoqI}$j0NYKR~uO*8cd<z`#((`tlqD0|Qu(
zsFykeLt1A5Q@87%V-74J!D9}rea*E$7;5C3Yk$bsOLn{d0J(oE$b?-!>I@9sECQXb
zUtVW6ANi8S@PZjyDjcwO{ZTIq5@Uby9-2E2Si1hG=REHEr9_H>;k5-wlH<iCm?T^S
z|BHPvF_?yGkOubSu3uQ#!7l9%{Q~#qH;^~~yZ&f){loE6<NyEvy(MZ4{EV_^)EU6R
zJ^{psg#Co$u75!FUgx*Q+CRn?3=C!LuSLP~ApbHj{CEBH`YD(X3O0zIX4^aJ3=9mV
zzQ<kvFfcGQK+5ap+CL1XOs_4vUH@>hf)q3#`LYm12fQ!^wFiy}bRK9uP|DNo`ltEB
ze?_p8gSmegUmt_$?-m6q?!54t4Z=s**I3K(|34=~884W@&rr@{c;K~rV=agA4hDvD
z_8p9%+QJ-^id_G6y8h^P{c((8Rk!P(28&fCoQ4Np%YfYv77hgqhw@K3V0fwH5G)CS
z<sp81;mOLtFy~kEksn!Hh6mCXelZ6%bk;-K3e88pfW&@)#U?_;Iu3NW{%@}3U?^d0
zNd15RHA{o<e+4w{1rVjpM}8O{=yLrZfG{KsA~P4{SxB1f7X1K<C1?hLiG9HkYkni~
zVlE3P>NysJbacD&EC#9S4&?yl7beCForexSV(E6}VZ4ym>G}`iCw`FC5I^1K2e&Vv
zj{1k>sDp5sEIx$#)o{_YZr6Wl2VZc2f-nfA01_Zw5CuqnX?_FB+a0d|!QKYBhokcX
zk3w3f>mN`EF=R2k*vABRMdyJ|*B{4Szksq(?-n%>)mZ!GJUatJ9s6r>aQt+;{^$<<
zlh!HF?D~W0zw4LR_dtOLE?408G#~k~5EKXj3qe5=@FD?fy6cb5Z~uLHnrnIfmm<>l
z4~MSM{~ciSUO$`wG7XXjx?MRyaeCxOx2r%vw<}M;3kj$>2f!LYDpBoisQu4d%J)K*
ziGksDI@J9Qwg0(Fxn2Z<#DaUv7|`8zgc0g<u$j%aAb0!K@w|8dYVb>gbjda!`SG6>
zB#z>#|A?9g>|Txu(D31CuwW?Vcr6RbKafTi|2~1B|E?S_{2+zU>zg3QL)tAKpwh+w
z=0{M2tk?BSzzYd*W>siD@&(MD3DF4BhVZilTKJ?eL;V8De%7ucHB7Gs{)6%&2iSZ6
zT{&JqYd-P^*|ryUV4DO$anI5Dt=m=P`wdIiA2n>RML^{fn(hbPt{lf07{JN<HFIwn
zxF7@jUnID>R)Ddd{kW?D6Uf9`0f9OYM*v)e^H{qI6e+{3_T}k3VR-3#DJWh!0$%Ka
zdhS4{D+i?f=#J&-ya86xd2#m-bq0nm5y@`XKOF-9!7AV`V4Tn$`vMdwkg()<A;<`I
z+`$L1yw`bw*_Ef4hoSQnv*;V73=9oN4safTrc^CNRSC`Wt~}kL9RGa<nrj9AmomNP
z=;G+$a&UV67Gx>d-xAHXpj0kVuL@6E|5-sIP$RGZ2Ddg|m%-A*pM^Xc3=9EaYqJ<%
zIKw;-6=8T`2p4%#1z|$eO1uz<a6wV^2U=G)*Z%OYV|pzCsU-z8K((Ymv+EzG|E@n?
zKkEF3>`svH8A@1RnlZu(SN@DEpcZo&H#p&dTCi6^d>aTKQm7vJkp)$z4-p2rCNu-A
zP!=HqRl^Mv`2tb#5z@H^8TAjO5vuG7M7a6LkBn8I4m8-b^Ke0!jeB7tP}3Ge_#o5%
zBAGS~A`C4={|7*<Zh(l+ZK(YhTB_bq`*&5T;&E1RAT)3@9A^a;z##7*X9bm<AQ!xr
zp8!?B08_AqnSlYKU@J4E+J>eZk>KO5e?WC!w=0LWD^D@oYY9+(>5k=qq+FiPgPpz{
zpo;rmx9gwR4A6uMPBR>kYCtec;l*u8XA9&R!Hfl<4(ds`2&iOWc;WR8oPavPb!AYN
z;)@k13OHV9qA18%2r{Gvt|p5G)c;3tnIH<15h9FPiZ4QtxDW+SaFLAP3=9leiZ2Wh
zBB16OM42>15K`Tgs6qRdVE<)+I*?h;FMe=9Q`e7-l^~NGUOa<~WU*v9ytoeM!n7QP
zi)0C9IlkD2;4)-6zE}?D!qiVih=8qddeICQ$zsWJdQk%5LYxV57entJQ0oceUI}O^
zz223lH$Wul#d%(^i^2H}+@J!rU#y|!`yWu@2WrW7hw^j=uynirIqtv#sw%-O9ykkB
z@G*3U{(&`b;OS=0uWnb4<_Zo5{(0ay?F{_`w#2(T6jc0m3-PZH5a{(1={(IG%kkeq
z09<NvbPEIpgKNP_kWrCtR}PSR2LWp*mQt>6SB~Qj5F1@N{(ErD1(}G{zJjJcR5yV2
zb67jE@Xy8R5FUg>c;F5Jxg+=mC#pku5DtL`0>^&`+zx?;KfLcJ0cySRPenL{gQ1lD
zxGTp7uq|I8F%<CP24vWz^FVKaOwbE89(Y9k0QCh**$of8><8C4KS0qV0B)`bfTQUL
zJeq!Vhl+Ft@POqcIs-t8jys5eBCZ+K+TaN2cKy+OKqBCUGsH4bSeEdEUGO8|1s|jp
z0^@>GQS%Xy8Qq~jy16<%IKbxq==S32^bkSnAwk1lVge}U1Uf_iK+_XPcjzDM0G2w|
z*B-rP3?Rt>p3cx8(Dn<6ANs>OK%kEGwKBN<@~7MNM?kmhpMWfd7ndMeA5_*~gVZme
z0%tX-(1+At;BlHCAVUH~g1{6<&<mHZkP_uh>|s#784MB+<>=<>4&~{U;p&V4r@~N<
zZZDqhPyw)rNO$ZXkfAU?bi49&xc={Q{cpor;%dWL&uPO^68bu&w~WDtt3<(uw}j($
zIK(~RVB!dPu>ulmFG1Zibg@QIdjUEaRRC$jye@$HAEvegDjxBg>2(Msn!1s^^!Gc&
zOOU1^)I$y;)=mO7pf(h!Sp{wvHXjjynWzPE(QCGDSC0P<A|UU<!)!vgD-Wm{$Mjkr
zY!?rt0mlP22Re52`ZlP%2WbPB>7X`tHz-;`mV;vuoLzndfLl<10<vzsP=SOyNC7xX
zYnWaupeZ`?;{O-0PhQ`Ig&!im_rG`qkp!6_;M5uV2h?7Jrk@(t*A}q!!O<PS69i5o
zn_sMlXaU>9(H$TF6Q2$d2c?(YAoBuPIz#_}8KBe$R*rD{ffpGN<>15%aXd<Tgn9DF
z3wwyd*U<C`H3;mOn=h0gk|1jkLDhVSsWbEkR3Xfu=ojBUg98FoRvwV(bo~Mek8am5
zpormktpVYqYU_6W0*a{@yC8Z&{gZQ06<`;{zE}W}0mV5eul;ub#p!<!7Lb6404O%W
zX&mH2a1QA70H+L4K7sUa;Du%_H%N~I$IG4I@&**<ouQx+Rj>+y?jRn`3%vo1y(~hV
zuHb+b=nVY<4?mU~*4Hku`1%8C`*pj10TnzB0WS<7>7?@jl5oHaDY)p1en|ZU%J%EQ
z=@V)>B!{yEy?6%+XHW(90qm78|6RX;3K6E)eBG`e(vCAIus6GYV0!%s<YPqo4G?L5
z^rP2_1L|T>!6Z=62{z$RX8<@P;CTcr%FzwVWIUxDuhn7k0V-|&dx&&9hy;L?1aJhs
zh=)1n7=r@HLQuwmmj68``fl`H*yAC^!0=~IM8lbafVp!b8om^KJ5o@}4`PEDY-ul_
zy!ih=ZTDwM1_pxzTQ>9^_<z~pz?K~#`itTJw4E2&85q)bD6lgyd|sWlPfCh`A#MLA
zb_Rwm>}xm<lrXP;{o`;@YGG++QEIV5qJpu7nL>V%LQ-l;NotXTb3mvfsPIR@|5;@;
z7#RMmDrhh;{7!h1qQY1r_#}aU+kt==t}F};jYn7*7#I@&tEzz7@}OCei1Ps;>e+&b
z^M}*ALsVGa@NYW+VRgBvaJ<|3f|-Hg(Z9pLz~l0eb_d6ci!2Nb&9(*_plJwb-FE@C
zUj=HL^t%2Jcwq-p3K_mBVF!2RUo#mV=sfV61r(g1V1>tHhwJ}_+W!wqxEgBzKP+K+
z&Dr_Q@W9KNj0_B2uK!gUS`L(mfeq+9c<>>I;ia_BQ=J!HRxvU#G}Qi&C<E1@xu9;b
zEr$gI14D@lMC~EafCkG>D-8w)(14%_N9To?pb02wyxa1C70aP0wm?=a39-PfEVbEI
z0<1Wy*_H*wC>3nBWdJicUaLXOLovn)*_cb9k;`u=@;1owo51p~<C<*+Kt`5?!Ytu|
zS;G8UaRQ2d2PFNkOTqOrio6}Nd?;8RW+*qzP^Q;1D0<A0^`O~jf-J`hHV-}iz-Bf7
z2;y&90g8$rLG`)KKP>oLM8G_Ydi~}fTKp}~KsDzNt$M-cAF}){5{wKCFDElHfZ9~e
zKg{@BKyBfdO^gf-o!^>&xbnBSgEhO>3pM|+;&0&uDNg|@FHvJ?{^7>o!V3}!0;{*(
z0ZNiBTNxM_z|49*TTn-hzoi)@0%Fz+*n%e1_**tIFfhE7VPs&i1vRWo++GTR*vA+c
z80w{MkAjTpeFW093&d<$4pRLN#0Nzrf6HAE{~iOVmjy}!pdQuB%Wy6zPrf_?=7LfR
zSQg}_3CCGMe6aLV1_p)+$5}y%6)X>GVnF#|`BsQLD1CzDUsr(g%W+l^A0+=e1H^}>
z7Fd&66qI&e`!(B&fYK0L6vTUN0Z|W5!f+W7@3maB?H_ZHFQEgQq9ERD4v>1o1Fv}?
zL!{W_d(JONF(Ax89ohtjG-wTW$XGBibc<?eFfera{_o&n`p*htH`{_pky5VXU@pib
z|5-uh$Xrl680M@Cui2sPC`9^#*~9=-1nqtpb-Qxx0$awb1F}p+utVTKD~Q=_3nIaG
zff!)Bc%gRvfg6J|Rtjo&+8)sb6(6jxOTqOVs0p9N_@eqbxLWT#5b&Y}##{_4ML}Z$
zA>bL<FIkK)LSS+MFBU?W%}0KKI>d@E=KTVj&~c#SP{X6Yh6g$>fTp-7K}3(Uf@}rF
zGswriWvKnU7lN#y^7aJCVWm8V2f)oyaQ<tq<&ZB2^*0n47#J3U6o7|9K_lx7bAEMx
z0}Z2tL<3%&17#vmIout<XdTK?Bm=2|1HhUBUL1!sD?wH7pVy$m8!Fxp6JHE62Gpe}
z<pE1syZ$I;dCl;e>GkZnknSSNxSBv%Fs#KI0=4-tOduL6aIC@Fv6Q#ljnUefv6S^S
zM{gO!OIh$B&oO4VV{C5CwjethO69s;Il$I~D&|lQaJLB5i|iD5`4*JNz!M1!Fw<8;
zO$QAMgA!Fq5Lo6%z>CwMVh0oi4Hj;tHemmQx+EL{FBU?4i7fOFCiDf=ad{yPX~;td
zPrxQ}1iWBHx62hQ^CRFzJhEN-V1vOOw15|;P=jm#FhF}}ps_@VAk28sY=|gmU=9=j
zp!P_>i#&*mxxJ|`qT@h`1k|?c4&`V*^t%&FegVyMgPZ-=V1sYq_8lW5V%`E=?}`L>
zy9$5@WI=7ffEUZ5$`5zB{_kM!cID}GW(50*BjCkiEOO8uI@Bzf%0#Hj1HBQy8?2p5
zISdcH<^`1}owu}u89_q}*!4Lg^szQrhm?ZmYS?>&S&?*r+qs}lcL^v7bUU#?n-l2e
z6U-^sU~^yH0gT|T!k_L?9?c8QKNQN1nveX+as;)o!6Eeqq7tT26B4(eVUr85YoX;4
zI0f=BUg!<r>J$Y<4roH^z_-pr+Mzt40g)qrvfMxhg0o1#i<vMZL9I(zR$Br|8c@r5
zAkmu-QwfQNH4rrr%fX}75P!cBfoH3~(2;ydw&DqR@dhezpgWkc+k>%}MG)l5&_6H_
zoq@}T{^<;W$Ld*BVQ9oa+RNRcJl#$#pp@gw)5!&L4Vc#{0Fv<K==5R%r9_BYXg>qq
zL1F>Tw7UKQl@p*raBEkNQo-Y_pfCfK#IH5L<rg@dKvEptu799;{10gK0W?Adnz8{+
zzJekeR6a2<9CrY<Uy;K@;>FU(|Nn!=RsM8_f<~7ucYun@GoYffg!Lt8U>#xUan~<e
z;9k#<?$9rc7i_^3gY3s$f3PwLFm!{ah`umhuyp-X%<=LDXfYOOT;oUcf#1g%oWK*B
zA>a`f)=t+C(8vQh71Uk&7S!$fA>hR-$T&P`BKSWiLwR*$?Vtbu`5DTJc6|HK$pA_u
zA38(7K=p#UO&<bYltJ`>1v3~J*cdVx7`PZ-#6yISyMEvTyX{YR=m(HZzcCCjg{TC_
z@`r#Ib&v`L%>B`PfHmMn4n*WQD=1LlRSaaFEVT1!Sa^3WM|UYtx39p9QU(Tw__%IY
zj+2MM=`9!%&s|KNr#qNi4wP^?bul@1Ft!{h{nmK{I=BKYhgvU{vUOf~E!6p~^Fo6a
zLkar?2T+gqm*xdf5(%9XaqtIc=hNl~jK9$Mzd`&z%|H3;<X<x_@%(;_8C3mpd_NAN
zOW$>zIQWuDh57T+j)R|<90nyFaRwvM=oN^`z`*byG^ji4JcOQfo`Hh_G@mqqnStR5
zGXujHW(Ecc76t|n76yhA76yhTEDQ{1Kxv4TfkA_nfgysGfuVzyfnf(L1H%JW28Jta
z3=AS{3=9rz3=A1;3=9j{AYveKV)1`=(4qjS^9WD|hDOFFre@|AmX1!&F0O81<@^i`
z3hZDONrW^bDl}wL1WjpG7&3vNBC`>*12Y3NL!}Wj1RAp_gF>Rpm<7aAW-(z^VP#-o
zs5W5*u~b-1*;LsW7#M0y*+48+HZ%4(b~$#2S~GSKD~{cqLk%>5TxZS!VySUhaB6Xa
zTF(}oAeI)VC6@*l0|P^YB^QXL!DYa$$<4sP&}hI7Vrg>g^2CEiT$^-xK&*HkTV8Em
zP_bvr3u0;Wa`18R)$=hhfM^ir<Y(Xq1qdfUn8jZx5GWuhz#ssk0|g2N$_2v(#03}x
z%LT#(!Uf6&QiWWFScMpbK(wn+s!)+|kg$+2gK&{hkWi3Nkx+?9h=_;?g9wNY5h)R=
z6pa*>6lD+v(I8wZ7Ahtx#vlfwK{!*~Q=C(rK^#PbaK41U1iu7>1c(OV0?7bL0Z9f)
z5Dmi7Qq@w@QVa~yQXp2fRIGHZw5&7(L##B2RV&Ra!z;rj!@vNcxnvk*QDLH-qa33g
zgB*wk;bQq<d0}}5c@Pc4DGDwMED8(?AR2_z6x|fr6d4pjGzh0Fxht_NF(`p(5YABc
zQ07o(PzKQ;oTcKW!llBX0-`}UTh&{YTa`f-M1ydSnvWWf8iN{$24QP;D{#KERtK@H
z)YUbVKmz~_>KY)Hl174NohB%L5;Q@qI!y*GR2ZXOqb;M&z!0MiV%2C@=|t&B=`iSk
zXb`T@jnI|QWzYrDAe^k{tjDa!pa-HsxJ*AxUre7tA4G$2l7W)}lL3PPhz8+2Lq9`4
zLk2?-4Z^ubzDB%83`QUtgmsK<j6v?xF$S@0jP*?HOh9}+6A;VJMBmgNwAO?{-xS2M
zH)SwGg<9qe3<Bm13|i(O76Su=1u9gq1VIJ{5DCHzR%p<gA%r20A%nr10mKSnuwe*g
zh-b)TumQ6|8EhHC7!nw=7;M3;Fa|q@aE3&NYz8|pE1bceA%Y=^A&0>p%!*)eV2ET$
zX2@l50J9<)92ue*QW)|W9Koz81}BDShE#@p1}88pn!%YNh9QlifWaBeieYeJh-FA;
zC}eN}vtk)s(V!axDs(q@XDDZ2Fn4DFvD_IvEIdHrXW;>6c`$fddNQ;yFj#tmS)RIH
zx?Ui85Dmf%-X`7*#S9E4-e8tDgO8~XNZ!;3%<^IIHS=XCVPG)x1+#p${j~i+@*o<7
z8T<|X8A=%#4E@0@e}({~0Fb;<0GJiP5NI68P{zPu90+CwG6Wd}f#eN>z^ovKV7*`v
zUoRNU0<%GUqH#D>WjF(b6#?Z(Fu+()0c47W0Ru9!z#yg^hKK{>1qOUDk_8i@st;yE
sf=t0gL1Yt(S&$$@F;NhvA5_60hsMZbPnZytnwwve%HWfqoS4G^0Qwq6asU7T

literal 0
HcmV?d00001

diff --git a/chap5/floppy.img b/chap5/floppy.img
new file mode 100644
index 0000000000000000000000000000000000000000..a34c975553ff0a927d52c32feee7d6f7970af00f
GIT binary patch
literal 1474560
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
zMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ON
zU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU
z1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0q
zLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(
zGz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!n
zMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhl}jE2By2#kin
zXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeD
zjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mk
zz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By
z2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1J
zhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kin
zXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1Jg3%Bd
z4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C
z(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R
z7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7
zfzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z
z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c
z4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C
zQ7{?;qaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?
z8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*O
zqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8Umvs
zFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF
z0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*
zAut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?
z8UmvsFbYOPU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0q
zLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(
zGz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!n
zMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ON
zU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU
z1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0q
zLtr!nMnhmU1V+JV2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By
z2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1J
zhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kin
zXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeD
zjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mk
zz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By
z2#kinXb6mkz-S1JhQKHo4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7
zfzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z
z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c
z4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C
z(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R
z7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7
zfzc2c4S~@R7!85Z5Eu=C(GVB~qaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8Umvs
zFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF
z0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*
zAut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?
z8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*O
zqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8Umvs
zFd71*Aut*OqaiRF0;3@?8UmvsFd71*U^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!n
zMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ON
zU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU
z1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0q
zLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(
zGz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!n
zMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(6pV(zXb6mkz-S1JhQMeDjE2By2#kin
zXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeD
zjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mk
zz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By
z2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1J
zhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kin
zXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjDpb+7!85Z5Eu=C(GVC7fzc2c
z4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C
z(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R
z7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7
zfzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z
z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c
z4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fl)9T0;3@?8UmvsFd71*
zAut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?
z8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*O
zqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8Umvs
zFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF
z0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*
zAut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*AutL?Ltr!nMnhmU
z1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0q
zLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(
zGz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!n
zMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ON
zU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU
z1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3P$Xb6mk
zz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By
z2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1J
zhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kin
zXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeD
zjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mk
zz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2A{
z7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7
zfzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z
z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c
z4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C
z(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R
z7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7
zfzc2c1*0J_8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8Umvs
zFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF
z0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*
zAut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?
z8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*O
zqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8Umvs
zFd71*Aut*OqhK@yMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!n
zMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ON
zU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU
z1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0q
zLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(
zGz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!n
zMnhmU1V%$(Gz3ONU=)moz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kin
zXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeD
zjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mk
zz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By
z2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1J
zhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kin
zXb6mkz-S1JhQMeDjE2By2#kW!5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c
z4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C
z(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R
z7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7
zfzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z
z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c
z4S~@R7!85Z5Eu=C(GVC7fzc2c4S`WG8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*
zAut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?
z8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*O
zqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8Umvs
zFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF
z0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*
zAut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiQ~MnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU
z1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0q
zLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(
zGz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!n
zMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ON
zU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU
z1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0q!DtAKhQMeDjE2By2#kinXb6mk
zz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By
z2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1J
zhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kin
zXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeD
zjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mk
zz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinC>RZa(GVC7fzc2c4S~@R
z7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7
zfzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z
z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c
z4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C
z(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R
z7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7zLvtFd71*Aut*O
zqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8Umvs
zFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF
z0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*
zAut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?
z8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*O
zqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;6Cw1V%$(
zGz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!n
zMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ON
zU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU
z1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0q
zLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(
zGz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLx9F1
F003*+B4q#o

literal 0
HcmV?d00001

diff --git a/chap5/floppy_copy.img b/chap5/floppy_copy.img
new file mode 100644
index 0000000000000000000000000000000000000000..a34c975553ff0a927d52c32feee7d6f7970af00f
GIT binary patch
literal 1474560
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
zMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ON
zU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU
z1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0q
zLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(
zGz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!n
zMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhl}jE2By2#kin
zXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeD
zjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mk
zz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By
z2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1J
zhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kin
zXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1Jg3%Bd
z4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C
z(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R
z7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7
zfzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z
z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c
z4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C
zQ7{?;qaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?
z8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*O
zqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8Umvs
zFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF
z0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*
zAut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?
z8UmvsFbYOPU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0q
zLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(
zGz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!n
zMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ON
zU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU
z1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0q
zLtr!nMnhmU1V+JV2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By
z2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1J
zhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kin
zXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeD
zjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mk
zz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By
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
F003*+B4q#o

literal 0
HcmV?d00001

diff --git a/chap5/inbound.c b/chap5/inbound.c
new file mode 100644
index 0000000..c42d935
--- /dev/null
+++ b/chap5/inbound.c
@@ -0,0 +1,21 @@
+#include <libepc.h>
+
+#include "serial.h"
+
+PRIVATE WINDOW *w ;
+
+void InitInBound(void)
+{
+  w = WindowCreate("Remote", 13, 24, 0, 79) ;
+}
+
+void InBound(void)
+{
+  extern QUEUE *inbound_queue ;
+  char ascii ;
+  
+  if (QueueRemove(inbound_queue, &ascii))
+  {
+    WindowPutChar(w, ascii) ;
+  }
+}
diff --git a/chap5/inbound.o b/chap5/inbound.o
new file mode 100644
index 0000000000000000000000000000000000000000..b0c585d42c019881799956c616927fdcba259864
GIT binary patch
literal 3112
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

literal 0
HcmV?d00001

diff --git a/chap5/link.map b/chap5/link.map
new file mode 100644
index 0000000..4c4d8bd
--- /dev/null
+++ b/chap5/link.map
@@ -0,0 +1,268 @@
+Archive member included to satisfy reference by file (symbol)
+
+/courses/TDDI11/sw/lib/elf/libepc.a(init-cpu.o)
+                              (start)
+/courses/TDDI11/sw/lib/elf/libepc.a(init-idt.o)
+                              main.o (IRQ2INT)
+/courses/TDDI11/sw/lib/elf/libepc.a(init-crt.o)
+                              /courses/TDDI11/sw/lib/elf/libepc.a(init-cpu.o) (Init_CRT)
+/courses/TDDI11/sw/lib/elf/libepc.a(display.o)
+                              main.o (SetCursorVisible)
+/courses/TDDI11/sw/lib/elf/libepc.a(init8259.o)
+                              /courses/TDDI11/sw/lib/elf/libepc.a(init-cpu.o) (Init8259)
+/courses/TDDI11/sw/lib/elf/libepc.a(init8253.o)
+                              /courses/TDDI11/sw/lib/elf/libepc.a(init-cpu.o) (Init8253)
+/courses/TDDI11/sw/lib/elf/libepc.a(queue.o)
+                              main.o (QueueCreate)
+/courses/TDDI11/sw/lib/elf/libepc.a(window.o)
+                              inbound.o (WindowCreate)
+/courses/TDDI11/sw/lib/elf/libepc.a(checkcpu.o)
+                              /courses/TDDI11/sw/lib/elf/libepc.a(init-cpu.o) (Check_CPU)
+/courses/TDDI11/sw/lib/elf/libepc.a(io.o)
+                              /courses/TDDI11/sw/lib/elf/libepc.a(init-idt.o) (ISR_PIC1)
+/courses/TDDI11/sw/lib/elf/libepc.a(keyboard.o)
+                              outbound.o (ScanCodeRdy)
+/courses/TDDI11/sw/lib/elf/libepc.a(heap.o)
+                              /courses/TDDI11/sw/lib/elf/libepc.a(queue.o) (malloc)
+/courses/TDDI11/sw/lib/elf/djgpp/libc.a(ct_flags.o)
+                              outbound.o (__dj_ctype_flags)
+/courses/TDDI11/sw/lib/elf/djgpp/libc.a(memcpy.o)
+                              /courses/TDDI11/sw/lib/elf/libepc.a(queue.o) (_memcpy)
+/courses/TDDI11/sw/lib/elf/djgpp/libc.a(strcpy.o)
+                              /courses/TDDI11/sw/lib/elf/libepc.a(window.o) (_strcpy)
+/courses/TDDI11/sw/lib/elf/djgpp/libc.a(strlen.o)
+                              /courses/TDDI11/sw/lib/elf/libepc.a(window.o) (_strlen)
+/courses/TDDI11/sw/lib/elf/djgpp/libc.a(disable.o)
+                              main.o (disable)
+/courses/TDDI11/sw/lib/elf/djgpp/libc.a(enable.o)
+                              main.o (enable)
+/courses/TDDI11/sw/lib/elf/djgpp/libc.a(djmd.o)
+                              /courses/TDDI11/sw/lib/elf/djgpp/libc.a(memcpy.o) (___dj_movedata)
+
+Allocating common symbols
+Common symbol       size              file
+
+inbound_queue       0x4               main.o
+
+Discarded input sections
+
+ .eh_frame      0x0000000000000000       0x5c main.o
+ .eh_frame      0x0000000000000000       0x58 inbound.o
+ .eh_frame      0x0000000000000000       0x58 outbound.o
+
+Memory Configuration
+
+Name             Origin             Length             Attributes
+conventional     0x0000000000000000 0x00000000000a0000
+reserved         0x00000000000a0000 0x0000000000060000
+extended         0x0000000000100000 0x00000000fff00000
+*default*        0x0000000000000000 0xffffffffffffffff
+
+Linker script and memory map
+
+LOAD main.o
+LOAD serial.o
+LOAD inbound.o
+LOAD outbound.o
+LOAD /courses/TDDI11/sw/lib/elf/libepc.a
+LOAD /courses/TDDI11/sw/lib/elf/djgpp/libc.a
+LOAD /courses/TDDI11/sw/i386-elf-gcc-7.3.0/lib/gcc/i386-elf/7.3.0/libgcc.a
+
+.text           0x0000000000000000     0x2728
+                0x0000000000000000                text_frst = .
+ *(.start)
+ .start         0x0000000000000000        0x8 /courses/TDDI11/sw/lib/elf/libepc.a(init-cpu.o)
+                0x0000000000000000                start
+ *(.init)
+ *(.text)
+ .text          0x0000000000000008      0x11d main.o
+                0x0000000000000008                main
+                0x0000000000000062                InitSerial
+ *fill*         0x0000000000000125        0xb 
+ .text          0x0000000000000130       0x46 serial.o
+                0x0000000000000130                SerialPut
+                0x0000000000000146                SerialISR
+ .text          0x0000000000000176       0x60 inbound.o
+                0x0000000000000176                InitInBound
+                0x000000000000019c                InBound
+ .text          0x00000000000001d6       0xea outbound.o
+                0x00000000000001d6                InitOutBound
+                0x00000000000001fc                OutBound
+ .text          0x00000000000002c0       0x50 /courses/TDDI11/sw/lib/elf/libepc.a(init-cpu.o)
+                0x00000000000002c0                Init_CPU
+ .text          0x0000000000000310      0x5a0 /courses/TDDI11/sw/lib/elf/libepc.a(init-idt.o)
+                0x0000000000000720                IRQ2INT
+                0x0000000000000734                _GetISR
+                0x0000000000000778                SetISR
+                0x00000000000007b0                Init_IDT
+ .text          0x00000000000008b0      0x110 /courses/TDDI11/sw/lib/elf/libepc.a(init-crt.o)
+                0x00000000000008b0                Init_CRT
+                0x00000000000008e4                _LastMemoryAddress
+ .text          0x00000000000009c0      0x6e0 /courses/TDDI11/sw/lib/elf/libepc.a(display.o)
+                0x00000000000009c0                SetCursorVisible
+                0x0000000000000a44                _GetCursorRow
+                0x0000000000000a58                _GetCursorCol
+                0x0000000000000a6c                SetCursorPosition
+                0x0000000000000b10                ClearScreen
+                0x0000000000000b78                _PutAttb
+                0x0000000000000bc4                _PutCharAt
+                0x0000000000000bf0                _PutChar
+                0x0000000000000c74                PutString
+                0x0000000000000cac                PutUnsigned
+                0x0000000000000ce4                FormatUnsigned
+                0x0000000000000d74                Unsigned2Ascii
+                0x0000000000000df8                _Cell
+ .text          0x00000000000010a0       0xe0 /courses/TDDI11/sw/lib/elf/libepc.a(init8259.o)
+                0x00000000000010a0                Init8259
+ .text          0x0000000000001180       0xb0 /courses/TDDI11/sw/lib/elf/libepc.a(init8253.o)
+                0x0000000000001180                Init8253
+ .text          0x0000000000001230      0x180 /courses/TDDI11/sw/lib/elf/libepc.a(queue.o)
+                0x0000000000001230                QueueCreate
+                0x000000000000129c                QueueRemove
+                0x0000000000001320                QueueInsert
+ .text          0x00000000000013b0      0x600 /courses/TDDI11/sw/lib/elf/libepc.a(window.o)
+                0x00000000000013b4                WindowCreate
+                0x000000000000149c                _WindowErase
+                0x000000000000150c                WindowSelect
+                0x0000000000001530                WindowSetCursor
+                0x0000000000001560                WindowPutChar
+                0x0000000000001640                WindowPutString
+ .text          0x00000000000019b0       0x98 /courses/TDDI11/sw/lib/elf/libepc.a(checkcpu.o)
+                0x00000000000019b0                Check_CPU
+ .text          0x0000000000001a48       0x60 /courses/TDDI11/sw/lib/elf/libepc.a(io.o)
+                0x0000000000001a48                TimerTickISR
+                0x0000000000001a54                KeyboardISR
+                0x0000000000001a74                ISR_PIC1
+                0x0000000000001a7b                ISR_PIC2
+                0x0000000000001a84                ___main
+                0x0000000000001a85                inportb
+                0x0000000000001a8f                outportb
+                0x0000000000001aa1                _exit
+ .text          0x0000000000001aa8      0x570 /courses/TDDI11/sw/lib/elf/libepc.a(keyboard.o)
+                0x0000000000001aa8                ScanCodeRdy
+                0x0000000000001acc                GetScanCode
+                0x0000000000001afc                ScanCode2Ascii
+                0x0000000000001cbc                SetsKybdState
+                0x0000000000001eac                Enqueue
+ .text          0x0000000000002018      0x660 /courses/TDDI11/sw/lib/elf/libepc.a(heap.o)
+                0x0000000000002018                malloc
+                0x00000000000020cc                free
+ .text          0x0000000000002678        0x0 /courses/TDDI11/sw/lib/elf/djgpp/libc.a(ct_flags.o)
+ .text          0x0000000000002678       0x1c /courses/TDDI11/sw/lib/elf/djgpp/libc.a(memcpy.o)
+                0x0000000000002678                _memcpy
+ .text          0x0000000000002694       0x28 /courses/TDDI11/sw/lib/elf/djgpp/libc.a(strcpy.o)
+                0x0000000000002694                _strcpy
+ .text          0x00000000000026bc       0x24 /courses/TDDI11/sw/lib/elf/djgpp/libc.a(strlen.o)
+                0x00000000000026bc                _strlen
+ .text          0x00000000000026e0       0x10 /courses/TDDI11/sw/lib/elf/djgpp/libc.a(disable.o)
+                0x00000000000026e0                disable
+ .text          0x00000000000026f0       0x10 /courses/TDDI11/sw/lib/elf/djgpp/libc.a(enable.o)
+                0x00000000000026f0                enable
+ .text          0x0000000000002700       0x28 /courses/TDDI11/sw/lib/elf/djgpp/libc.a(djmd.o)
+                0x0000000000002700                ___dj_movedata
+                0x0000000000002727                text_last = (. - 0x1)
+
+.data           0x0000000000002728      0x8c1
+                0x0000000000002728                data_frst = .
+ *(.data)
+ .data          0x0000000000002728        0x0 main.o
+ .data          0x0000000000002728        0x1 serial.o
+ .data          0x0000000000002729        0x0 inbound.o
+ .data          0x0000000000002729        0x0 outbound.o
+ *fill*         0x0000000000002729        0x3 
+ .data          0x000000000000272c       0x20 /courses/TDDI11/sw/lib/elf/libepc.a(init-cpu.o)
+                0x000000000000274a                code_selector
+ .data          0x000000000000274c       0x90 /courses/TDDI11/sw/lib/elf/libepc.a(init-idt.o)
+ .data          0x00000000000027dc       0x10 /courses/TDDI11/sw/lib/elf/libepc.a(init-crt.o)
+ .data          0x00000000000027ec       0x30 /courses/TDDI11/sw/lib/elf/libepc.a(display.o)
+ .data          0x000000000000281c        0x0 /courses/TDDI11/sw/lib/elf/libepc.a(init8259.o)
+ .data          0x000000000000281c        0x0 /courses/TDDI11/sw/lib/elf/libepc.a(init8253.o)
+ .data          0x000000000000281c        0x0 /courses/TDDI11/sw/lib/elf/libepc.a(queue.o)
+ .data          0x000000000000281c        0x0 /courses/TDDI11/sw/lib/elf/libepc.a(window.o)
+ .data          0x000000000000281c        0xc /courses/TDDI11/sw/lib/elf/libepc.a(io.o)
+                0x000000000000281c                msec
+                0x0000000000002820                old_tick_isr
+                0x0000000000002824                old_kybd_isr
+ .data          0x0000000000002828      0x5a0 /courses/TDDI11/sw/lib/elf/libepc.a(keyboard.o)
+ .data          0x0000000000002dc8       0x10 /courses/TDDI11/sw/lib/elf/libepc.a(heap.o)
+ .data          0x0000000000002dd8      0x204 /courses/TDDI11/sw/lib/elf/djgpp/libc.a(ct_flags.o)
+                0x0000000000002dd8                __dj_ctype_flags
+ .data          0x0000000000002fdc        0x0 /courses/TDDI11/sw/lib/elf/djgpp/libc.a(memcpy.o)
+ .data          0x0000000000002fdc        0x0 /courses/TDDI11/sw/lib/elf/djgpp/libc.a(strcpy.o)
+ .data          0x0000000000002fdc        0x0 /courses/TDDI11/sw/lib/elf/djgpp/libc.a(strlen.o)
+ .data          0x0000000000002fdc        0x0 /courses/TDDI11/sw/lib/elf/djgpp/libc.a(disable.o)
+ .data          0x0000000000002fdc        0x0 /courses/TDDI11/sw/lib/elf/djgpp/libc.a(enable.o)
+ .data          0x0000000000002fdc        0x0 /courses/TDDI11/sw/lib/elf/djgpp/libc.a(djmd.o)
+ *(.rodata)
+ .rodata        0x0000000000002fdc        0x7 inbound.o
+ .rodata        0x0000000000002fe3        0x6 outbound.o
+ *(.rodata.str1.1)
+ *(.rodata.str1.32)
+                0x0000000000002fe8                data_last = (. - 0x1)
+
+.bss            0x0000000000002fec      0x848
+                0x0000000000002fec                bss_frst = .
+ *(.bss)
+ .bss           0x0000000000002fec        0x0 main.o
+ .bss           0x0000000000002fec        0x4 inbound.o
+ .bss           0x0000000000002ff0        0x4 outbound.o
+ .bss           0x0000000000002ff4      0x800 /courses/TDDI11/sw/lib/elf/libepc.a(init-idt.o)
+ .bss           0x00000000000037f4        0x0 /courses/TDDI11/sw/lib/elf/libepc.a(init-crt.o)
+ .bss           0x00000000000037f4        0x8 /courses/TDDI11/sw/lib/elf/libepc.a(display.o)
+ .bss           0x00000000000037fc        0x0 /courses/TDDI11/sw/lib/elf/libepc.a(init8259.o)
+ .bss           0x00000000000037fc        0x0 /courses/TDDI11/sw/lib/elf/libepc.a(init8253.o)
+ .bss           0x00000000000037fc        0x0 /courses/TDDI11/sw/lib/elf/libepc.a(queue.o)
+ .bss           0x00000000000037fc        0x0 /courses/TDDI11/sw/lib/elf/libepc.a(window.o)
+ .bss           0x00000000000037fc       0x34 /courses/TDDI11/sw/lib/elf/libepc.a(keyboard.o)
+ .bss           0x0000000000003830        0x0 /courses/TDDI11/sw/lib/elf/libepc.a(heap.o)
+ .bss           0x0000000000003830        0x0 /courses/TDDI11/sw/lib/elf/djgpp/libc.a(ct_flags.o)
+ .bss           0x0000000000003830        0x0 /courses/TDDI11/sw/lib/elf/djgpp/libc.a(memcpy.o)
+ .bss           0x0000000000003830        0x0 /courses/TDDI11/sw/lib/elf/djgpp/libc.a(strcpy.o)
+ .bss           0x0000000000003830        0x0 /courses/TDDI11/sw/lib/elf/djgpp/libc.a(strlen.o)
+ .bss           0x0000000000003830        0x0 /courses/TDDI11/sw/lib/elf/djgpp/libc.a(disable.o)
+ .bss           0x0000000000003830        0x0 /courses/TDDI11/sw/lib/elf/djgpp/libc.a(enable.o)
+ .bss           0x0000000000003830        0x0 /courses/TDDI11/sw/lib/elf/djgpp/libc.a(djmd.o)
+ *(COMMON)
+ COMMON         0x0000000000003830        0x4 main.o
+                0x0000000000003830                inbound_queue
+                0x0000000000003833                bss_last = (. - 0x1)
+
+/DISCARD/
+ *(.eh_frame)
+                0x0000000000003834                stack_frst = (bss_last + 0x1)
+                0x000000000000b833                stack_last = (bss_last + 0x8000)
+                0x000000000000b834                heap_frst = (stack_last + 0x1)
+OUTPUT(embedded.bin binary)
+
+.debug_info     0x0000000000000000      0x4a9
+ .debug_info    0x0000000000000000      0x165 main.o
+ .debug_info    0x0000000000000165      0x1b0 inbound.o
+ .debug_info    0x0000000000000315      0x194 outbound.o
+
+.debug_abbrev   0x0000000000000000      0x2ab
+ .debug_abbrev  0x0000000000000000       0xd6 main.o
+ .debug_abbrev  0x00000000000000d6       0xe7 inbound.o
+ .debug_abbrev  0x00000000000001bd       0xee outbound.o
+
+.debug_aranges  0x0000000000000000       0x60
+ .debug_aranges
+                0x0000000000000000       0x20 main.o
+ .debug_aranges
+                0x0000000000000020       0x20 inbound.o
+ .debug_aranges
+                0x0000000000000040       0x20 outbound.o
+
+.debug_line     0x0000000000000000      0x1d3
+ .debug_line    0x0000000000000000       0xbb main.o
+ .debug_line    0x00000000000000bb       0x67 inbound.o
+ .debug_line    0x0000000000000122       0xb1 outbound.o
+
+.debug_str      0x0000000000000000      0x3d8
+ .debug_str     0x0000000000000000      0x15c main.o
+ .debug_str     0x000000000000015c      0x13e inbound.o
+ .debug_str     0x000000000000029a      0x13e outbound.o
+
+.comment        0x0000000000000000       0x36
+ .comment       0x0000000000000000       0x12 main.o
+ .comment       0x0000000000000012       0x12 inbound.o
+ .comment       0x0000000000000024       0x12 outbound.o
diff --git a/chap5/main.c b/chap5/main.c
new file mode 100644
index 0000000..715d38c
--- /dev/null
+++ b/chap5/main.c
@@ -0,0 +1,63 @@
+#include <dos.h>
+#include <libepc.h>
+
+#include "serial.h"
+
+/* Function prototypes */
+void InitOutBound(void) ;
+void InitInBound(void) ;
+void InitSerial(void) ;
+
+void OutBound(void) ;
+void InBound(void) ;
+
+QUEUE *inbound_queue ;
+
+int main()
+{
+  inbound_queue = QueueCreate(sizeof(char), 20) ;
+  
+  ClearScreen(0x07) ;
+  SetCursorVisible(TRUE) ;
+  InitSerial() ;
+  
+  InitOutBound() ;
+  InitInBound() ;
+  
+  for (;;)
+  {
+    OutBound() ;
+    InBound() ;
+  }
+  
+  return 0 ;
+}
+
+void InitSerial(void)
+{
+  /* Disable interrupts during initialization */
+  disable() ;
+  
+  /* 9600 baud */
+  outportb(SER_LCR, SER_LCR_DLAB) ;
+  outportb(SER_DLO, 12) ;
+  outportb(SER_DHI, 0) ;
+  
+  /* 8 data bits, even parity, 1 stop bit */
+  outportb(SER_LCR, 0x1B) ;
+  
+  /* Enable only receiver data ready interrupts */
+  outportb(SER_IER, 0x01) ;
+  
+  /* Request to send, data terminal ready, enable interrupts */
+  outportb(SER_MCR, SER_MCR_RTS|SER_MCR_DTR|SER_MCR_OUT2) ;
+
+  /* Store address of ISR in IDT */
+  SetISR(IRQ2INT(SER_IRQ), SerialISR) ;
+  
+  /* Unmask the UART's IRQ line */
+  outportb(0x21, inportb(0x21) & ~SER_MSK) ;
+  
+  /* Re-enable interrupts */
+  enable() ;
+}
diff --git a/chap5/main.o b/chap5/main.o
new file mode 100644
index 0000000000000000000000000000000000000000..f38eaba6373784882fc6cdb74fb99c2505c13882
GIT binary patch
literal 3612
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
GsRIDM>NH0H

literal 0
HcmV?d00001

diff --git a/chap5/makeNrun.sh b/chap5/makeNrun.sh
new file mode 100644
index 0000000..c82ce37
--- /dev/null
+++ b/chap5/makeNrun.sh
@@ -0,0 +1,23 @@
+#!/bin/bash
+
+clear
+echo "This script includes commands to make the project and run it"
+
+echo "clean up the directory with make clean"
+make clean
+echo "make the project with make."
+make
+echo "Guiding mtools mcopy to its configuration file"
+export MTOOLSRC=mtools.conf
+echo "Copying the binary to floppy image"
+mcopy embedded.bin a:
+echo "Duplicating the floppy image"
+cp floppy.img floppy_copy.img
+echo "We assume port 50152 is free. Check below, if it is not free, select another port"
+#netstat | grep ":50152"
+echo "Proceeding with port 50152 on localhost=127.0.0.1"
+echo "Starting Qemu with given binary in the floppy image, as server"
+qemu-system-i386 -drive format=raw,file=floppy.img,if=floppy -serial tcp:127.0.0.1:50152,server,nowait &
+echo "Starting another Qemu with given binary in the floppy image, as client. Wait a second for server to connect"
+sleep 1
+qemu-system-i386 -drive format=raw,file=floppy_copy.img,if=floppy -serial tcp:127.0.0.1:50152 &
diff --git a/chap5/mtools.conf b/chap5/mtools.conf
new file mode 100644
index 0000000..c387b85
--- /dev/null
+++ b/chap5/mtools.conf
@@ -0,0 +1,6 @@
+MTOOLS_NO_VFAT=1
+drive a:
+      file="floppy.img"
+      fat_bits=12
+      cylinders=80 heads=2 sectors=18
+      mformat_only
diff --git a/chap5/outbound.c b/chap5/outbound.c
new file mode 100644
index 0000000..3ebb9e5
--- /dev/null
+++ b/chap5/outbound.c
@@ -0,0 +1,36 @@
+#include <ctype.h>
+#include <libepc.h>
+
+#include "serial.h"
+
+PRIVATE WINDOW *w ;
+
+void InitOutBound(void)
+{
+  w = WindowCreate("Local", 0, 11, 0, 79) ;
+}
+
+void OutBound(void)
+{
+  WindowSelect(w) ;
+  
+  if (ScanCodeRdy())
+  {
+    BYTE8 code = GetScanCode() ;
+    if (!(code & 0x80) && !SetsKybdState(code))
+    {
+      char ascii = ScanCode2Ascii(code) & 0xFF ;
+      if (isprint(ascii) | iscntrl(ascii))
+      {
+        WindowPutChar(w, ascii) ;
+        
+        SerialPut(ascii) ;
+        if (ascii == '\r')
+        {
+          WindowPutChar(w, '\n') ;
+          SerialPut('\n') ;
+        }
+      }
+    }
+  }
+}
diff --git a/chap5/outbound.o b/chap5/outbound.o
new file mode 100644
index 0000000000000000000000000000000000000000..72937c29ab9010e036a4690ff57239dc51ca088c
GIT binary patch
literal 3516
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

literal 0
HcmV?d00001

diff --git a/chap5/serial.asm b/chap5/serial.asm
new file mode 100644
index 0000000..e4cc0c4
--- /dev/null
+++ b/chap5/serial.asm
@@ -0,0 +1,93 @@
+		SECTION	.data
+		EXTERN	inbound_queue	; (defined in main.C)
+data		DB	0		; put rcvd byte here
+
+		SECTION	.text
+		ALIGN	16
+		BITS	32
+
+BASE_PORT	EQU	3F8h		; we have this in our lab
+
+LSR_PORT	EQU	BASE_PORT+5
+RBR_PORT	EQU	BASE_PORT
+THR_PORT	EQU	BASE_PORT
+
+SER_LSR_THRE EQU 0x20
+SER_LSR_RBF	EQU	0x01
+CHAR_ARG EQU 	8
+; ---------------------------------------------------------------------
+; void SerialPut(char ch)
+; ---------------------------------------------------------------------
+; This function uses programmed waiting loop I/O
+; to output the ASCII character 'ch' to the UART.
+
+		GLOBAL	SerialPut
+
+SerialPut:
+
+		PUSH	EBP
+		MOV	EBP, ESP
+
+while_loop_start:
+		; (1) Wait for THRE = 1
+		MOV DX, LSR_PORT
+		IN	AL, DX
+		TEST AL, SER_LSR_THRE ;Check if output is free
+		JZ	while_loop_start	;If THRE is not set
+while_loop_end:
+
+		; (2) Output character to UART
+		MOV	AL, [EBP + CHAR_ARG]
+		MOV DX, THR_PORT
+		OUT	DX, AL
+
+		POP EBP
+		; (3) Return to caller
+		RET
+
+; ---------------------------------------------------------------------
+; void interrupt SerialISR(void)
+; ---------------------------------------------------------------------
+; This is an Interrupt Service Routine (ISR) for
+; serial receive interrupts.  Characters received
+; are placed in a queue by calling Enqueue(char).
+
+		GLOBAL	SerialISR
+		EXTERN	QueueInsert	; (provided by LIBPC)
+
+SerialISR:
+		; Enable (higher-priority) IRQs
+		STI
+		; (1) Preserve all registers
+		PUSHAD
+		PUSHFD
+
+		; (2) Get character from UART
+		MOV DX, LSR_PORT
+		IN	AL, DX
+		TEST AL, SER_LSR_RBF ;Check if an input has occured
+		JZ	_Eoi	;If RBF is not set
+		MOV	DX, RBR_PORT
+		IN 	AL, DX
+		; (3) Put character into queue
+		MOV [data], AL
+		; Param #2: address of data
+		PUSH DWORD data
+		; Param #1: address of queue
+		PUSH DWORD [inbound_queue]
+		CALL	QueueInsert
+		ADD	ESP,8
+		;POP
+		;POP
+
+_Eoi:
+		; (4) Enable lower priority interrupts
+	  ;(Send Non-Specific EOI to PIC)
+		MOV	AL, 0x20
+		OUT	0x20, AL
+
+		; (5) Restore all registers
+		POPFD
+		POPAD
+		; (6) Return to interrupted code
+		IRET
diff --git a/chap5/serial.h b/chap5/serial.h
new file mode 100644
index 0000000..9c42d33
--- /dev/null
+++ b/chap5/serial.h
@@ -0,0 +1,28 @@
+#define	SER_IRQ		IRQ_COM1_COM3	/* Hardware IRQ for COM1	*/
+#define	SER_MSK		0x10		/* PIC mask bit for IRQ 4	*/
+#define	SER_BASE	0x3F8		/* Base port address for COM1	*/
+
+#define	SER_THR		SER_BASE	/* Transmitter Holding Register	*/
+#define	SER_RBR		SER_BASE	/* Receiver Buffer Register	*/
+#define	SER_DLO		SER_BASE	/* Baud Rate Divisor Low	*/
+#define	SER_DHI		(SER_BASE+1)	/* Baud Rate Divisor High	*/
+#define	SER_IER		(SER_BASE+1)	/* Interrupt Enable Register	*/
+#define	SER_IIR		(SER_BASE+2)	/* Interrupt Identification Reg	*/
+#define	SER_LCR		(SER_BASE+3)	/* Line Control Register	*/
+#define	SER_MCR		(SER_BASE+4)	/* Modem Control Register	*/
+#define	SER_LSR		(SER_BASE+5)	/* Line Status Register		*/
+#define	SER_MSR		(SER_BASE+6)	/* Modem Status Register	*/
+#define	SER_SCR		(SER_BASE+7)	/* Scratch Register		*/
+
+#define	SER_LSR_THRE	0x20		/* Trans. Hold. Reg. Empty	*/
+#define	SER_LSR_RBF	0x01		/* Receiver Buffer Full		*/
+
+#define	SER_LCR_DLAB	0x80		/* Divisor Latch Address Bit	*/
+
+#define	SER_MCR_DTR	0x01		/* Data Terminal Ready		*/
+#define	SER_MCR_RTS	0x02		/* Request To Send		*/
+#define	SER_MCR_OUT2	0x08		/* Interrupt Enable		*/
+
+void SerialPut(char ch) ;
+void SerialISR(void) ;
+
diff --git a/chap5/serial.o b/chap5/serial.o
new file mode 100644
index 0000000000000000000000000000000000000000..6aebaf1972284a29eae83b2ec02ad2872f44f87b
GIT binary patch
literal 1024
zcmb<-^>JflWMqH=Mh0dE1doBi0V-hvrZpJY8JNK=QVEcmAPm!;z{r4N4-3>lb_R$z
z8<bzb$iUzRWrHXI5W&E}z{|jZ;*tZ53=D=)IS>W13q*@EFfcHI7%<Glz+k}0z`)AD
zz`)PIzyPurWTrftc?Qf3469*!pl$+j)fpHVI6(|3e!$GYpa3-oWDm$Z4yYV9Dzx)y
z+OEIMZ&oOjeD8AQNZa*;`CaVc-wAUdqKqZ7AfY#lKzcJk#D7x|`Qp$2|NonhaBNU`
zrZ6}0JV*$N^->Z`5*hSLQY%Ur^olczONvSolNj`hD{~<<lwXvZ15pFjhKquQ8%Umo
z;p2Z04a2A@0~G#D3~De*FwMxI&A`C$0~W~)AHlBwi^R7>lXpks2QWaw6KovA$N#ZN
zVb8$u@qZ=*0|O#_KmM;li8m&OUIqpR9*Aae%r9eLV6aExBjgwuK=CdGmxJ(&Q20y?
za~K#H#GqmVpp;acT9lcXqnB8m%aECulwX>c5?@%FTAIob2qHc6ic^b97{GDj<QVK4
zAK)Jp!r&7e1Yra@K^Y+)P)4w8P&`OF#3RU+0mcb(a$|7za14rf402}(23r_VTEbAC
zk(rYkpOc?o5MNx9ScD>wnwJ7q=@}fv5bv4~3Md8!1`Sa7F)=XcLTO_V&CkGK0SX-f
G1_l5uxQjLb

literal 0
HcmV?d00001

diff --git a/chap6/Makefile b/chap6/Makefile
new file mode 100644
index 0000000..f825f1d
--- /dev/null
+++ b/chap6/Makefile
@@ -0,0 +1,22 @@
+OBJ    = main.o serial.o inbound.o outbound.o
+
+COURSE   = /courses/TDDI11/sw
+LDSCRIPT = $(COURSE)/lib/link.cmd
+BOOTSECT = $(COURSE)/lib/bootload.bin
+LIBS = $(COURSE)/lib/elf/mtc.a
+INCLUDES = -I "$(COURSE)/include" -I "$(COURSE)/include/djgpp" $(EXTRA_INCLUDES)
+CC       = $(COURSE)/i386-elf-gcc-7.3.0/bin/i386-elf-gcc
+CFLAGS  += -Wall -g $(INCLUDES)
+LD       = $(COURSE)/i386-elf-gcc-7.3.0/bin/i386-elf-ld
+LDFLAGS  = -T$(LDSCRIPT) -static -ustart -Map link.map
+AS       = nasm
+ASFLAGS  = -f elf32
+
+embedded.bin: $(OBJ)
+	$(LD) $(OBJ) $(LIBS) $(LDFLAGS)
+%.o: %.c
+	$(CC) $(CFLAGS) -c $<
+%.o: %.asm
+	$(AS) $(ASFLAGS) $<
+clean:
+	\rm -f embedded.bin *~ *.o link.map
diff --git a/chap6/embedded.bin b/chap6/embedded.bin
new file mode 100644
index 0000000000000000000000000000000000000000..dc23e4b209436c32d0df17a29d91cb8e7bffd352
GIT binary patch
literal 34560
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
Ykj&gv1}lc3)ZF}%R0f~?<is2X0HTA~C;$Ke

literal 0
HcmV?d00001

diff --git a/chap6/floppy.img b/chap6/floppy.img
new file mode 100644
index 0000000000000000000000000000000000000000..28b0c9b3278ab9053f1f25b6f11c38886daac1de
GIT binary patch
literal 1474560
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
zMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ON
zU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU
z1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0q
zLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(
zGz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!n
zMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V+JV2#kin
zXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeD
zjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mk
zz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By
z2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1J
zhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kin
zXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQKHo
z4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C
z(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R
z7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7
zfzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z
z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c
z4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C
z(GVB~qaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?
z8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*O
zqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8Umvs
zFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF
z0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*
zAut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?
z8UmvsFd71*U^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0q
zLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(
zGz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!n
zMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ON
zU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU
z1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0q
zLtr!nMnhmU1V%$(6pV(zXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By
z2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1J
zhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kin
zXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeD
zjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mk
zz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By
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

literal 0
HcmV?d00001

diff --git a/chap6/floppy_copy.img b/chap6/floppy_copy.img
new file mode 100644
index 0000000000000000000000000000000000000000..28b0c9b3278ab9053f1f25b6f11c38886daac1de
GIT binary patch
literal 1474560
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
zMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ON
zU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU
z1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0q
zLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(
zGz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!n
zMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V+JV2#kin
zXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeD
zjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mk
zz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By
z2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1J
zhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kin
zXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQKHo
z4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C
z(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R
z7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7
zfzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z
z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c
z4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C
z(GVB~qaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?
z8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*O
zqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8Umvs
zFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF
z0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*
zAut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?
z8UmvsFd71*U^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0q
zLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(
zGz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!n
zMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ON
zU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU
z1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0q
zLtr!nMnhmU1V%$(6pV(zXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By
z2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1J
zhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kin
zXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeD
zjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mk
zz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By
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

literal 0
HcmV?d00001

diff --git a/chap6/inbound.c b/chap6/inbound.c
new file mode 100644
index 0000000..438c79e
--- /dev/null
+++ b/chap6/inbound.c
@@ -0,0 +1,24 @@
+#include <libepc.h>
+#include <mtc.h>
+
+#include "serial.h"
+
+void InBound(void)
+{
+  extern QUEUE *inbound_queue ;
+  WINDOW *w ;
+  
+  w = WindowCreate("Remote", 11, 21, 0, 79) ;
+  
+  if (!w)
+    return ;
+  
+  for (;;)
+  {
+    char ascii ;
+    
+    while (!QueueRemove(inbound_queue, &ascii))
+      MtCYield() ;
+    WindowPutChar(w, ascii) ;
+  }
+}
diff --git a/chap6/inbound.o b/chap6/inbound.o
new file mode 100644
index 0000000000000000000000000000000000000000..66a3de63f640d20d162c55b29bb35f49f41c8b94
GIT binary patch
literal 3784
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

literal 0
HcmV?d00001

diff --git a/chap6/link.map b/chap6/link.map
new file mode 100644
index 0000000..e743ef0
--- /dev/null
+++ b/chap6/link.map
@@ -0,0 +1,430 @@
+Archive member included to satisfy reference by file (symbol)
+
+/courses/TDDI11/sw/lib/elf/mtc.a(mtc.o)
+                              main.o (mtc_split)
+/courses/TDDI11/sw/lib/elf/mtc.a(schedule.o)
+                              /courses/TDDI11/sw/lib/elf/mtc.a(mtc.o) (_sch_setup)
+/courses/TDDI11/sw/lib/elf/mtc.a(sema.o)
+                              /courses/TDDI11/sw/lib/elf/mtc.a(mtc.o) (_sema_setup)
+/courses/TDDI11/sw/lib/elf/mtc.a(thread.o)
+                              /courses/TDDI11/sw/lib/elf/mtc.a(schedule.o) (_thr_setup)
+/courses/TDDI11/sw/lib/elf/mtc.a(abend.o)
+                              /courses/TDDI11/sw/lib/elf/mtc.a(mtc.o) (_mtc_abend)
+/courses/TDDI11/sw/lib/elf/mtc.a(context.o)
+                              /courses/TDDI11/sw/lib/elf/mtc.a(thread.o) (_ctxt_setup)
+/courses/TDDI11/sw/lib/elf/mtc.a(ll.o)
+                              /courses/TDDI11/sw/lib/elf/mtc.a(schedule.o) (_ll_setup)
+/courses/TDDI11/sw/lib/elf/mtc.a(mlist.o)
+                              /courses/TDDI11/sw/lib/elf/mtc.a(thread.o) (_ml_setup)
+/courses/TDDI11/sw/lib/elf/mtc.a(msg.o)
+                              /courses/TDDI11/sw/lib/elf/mtc.a(mlist.o) (_msg_setup)
+/courses/TDDI11/sw/lib/elf/libepc.a(init-cpu.o)
+                              (start)
+/courses/TDDI11/sw/lib/elf/libepc.a(init-idt.o)
+                              main.o (IRQ2INT)
+/courses/TDDI11/sw/lib/elf/libepc.a(init-crt.o)
+                              /courses/TDDI11/sw/lib/elf/libepc.a(init-cpu.o) (Init_CRT)
+/courses/TDDI11/sw/lib/elf/libepc.a(display.o)
+                              main.o (SetCursorVisible)
+/courses/TDDI11/sw/lib/elf/libepc.a(timer.o)
+                              main.o (Milliseconds)
+/courses/TDDI11/sw/lib/elf/libepc.a(init8259.o)
+                              /courses/TDDI11/sw/lib/elf/libepc.a(init-cpu.o) (Init8259)
+/courses/TDDI11/sw/lib/elf/libepc.a(init8253.o)
+                              /courses/TDDI11/sw/lib/elf/libepc.a(init-cpu.o) (Init8253)
+/courses/TDDI11/sw/lib/elf/libepc.a(heap.o)
+                              /courses/TDDI11/sw/lib/elf/mtc.a(sema.o) (malloc)
+/courses/TDDI11/sw/lib/elf/libepc.a(setjmp.o)
+                              /courses/TDDI11/sw/lib/elf/mtc.a(context.o) (_setjmp)
+/courses/TDDI11/sw/lib/elf/libepc.a(queue.o)
+                              main.o (QueueCreate)
+/courses/TDDI11/sw/lib/elf/libepc.a(window.o)
+                              main.o (WindowCreate)
+/courses/TDDI11/sw/lib/elf/libepc.a(checkcpu.o)
+                              /courses/TDDI11/sw/lib/elf/libepc.a(init-cpu.o) (Check_CPU)
+/courses/TDDI11/sw/lib/elf/libepc.a(io.o)
+                              /courses/TDDI11/sw/lib/elf/libepc.a(timer.o) (msec)
+/courses/TDDI11/sw/lib/elf/libepc.a(keyboard.o)
+                              outbound.o (ScanCodeRdy)
+/courses/TDDI11/sw/lib/elf/djgpp/libc.a(ct_flags.o)
+                              outbound.o (__dj_ctype_flags)
+/courses/TDDI11/sw/lib/elf/djgpp/libc.a(memcpy.o)
+                              /courses/TDDI11/sw/lib/elf/mtc.a(mtc.o) (_memcpy)
+/courses/TDDI11/sw/lib/elf/djgpp/libc.a(strcpy.o)
+                              /courses/TDDI11/sw/lib/elf/libepc.a(window.o) (_strcpy)
+/courses/TDDI11/sw/lib/elf/djgpp/libc.a(strlen.o)
+                              /courses/TDDI11/sw/lib/elf/libepc.a(window.o) (_strlen)
+/courses/TDDI11/sw/lib/elf/djgpp/libc.a(disable.o)
+                              main.o (disable)
+/courses/TDDI11/sw/lib/elf/djgpp/libc.a(enable.o)
+                              main.o (enable)
+/courses/TDDI11/sw/lib/elf/djgpp/libc.a(djmd.o)
+                              /courses/TDDI11/sw/lib/elf/djgpp/libc.a(memcpy.o) (___dj_movedata)
+
+Allocating common symbols
+Common symbol       size              file
+
+inbound_queue       0x4               main.o
+___Starting_Point__
+                    0x4               /courses/TDDI11/sw/lib/elf/mtc.a(context.o)
+
+Discarded input sections
+
+ .eh_frame      0x0000000000000000       0xa0 main.o
+ .eh_frame      0x0000000000000000       0x38 inbound.o
+ .eh_frame      0x0000000000000000       0x38 outbound.o
+
+Memory Configuration
+
+Name             Origin             Length             Attributes
+conventional     0x0000000000000000 0x00000000000a0000
+reserved         0x00000000000a0000 0x0000000000060000
+extended         0x0000000000100000 0x00000000fff00000
+*default*        0x0000000000000000 0xffffffffffffffff
+
+Linker script and memory map
+
+LOAD main.o
+LOAD serial.o
+LOAD inbound.o
+LOAD outbound.o
+LOAD /courses/TDDI11/sw/lib/elf/mtc.a
+LOAD /courses/TDDI11/sw/lib/elf/libepc.a
+LOAD /courses/TDDI11/sw/lib/elf/djgpp/libc.a
+LOAD /courses/TDDI11/sw/i386-elf-gcc-7.3.0/lib/gcc/i386-elf/7.3.0/libgcc.a
+
+.text           0x0000000000000000     0x7d90
+                0x0000000000000000                text_frst = .
+ *(.start)
+ .start         0x0000000000000000        0x8 /courses/TDDI11/sw/lib/elf/libepc.a(init-cpu.o)
+                0x0000000000000000                start
+ *(.init)
+ *(.text)
+ .text          0x0000000000000008      0x2d0 main.o
+                0x0000000000000008                main
+                0x0000000000000033                _mtc_main
+                0x00000000000001ba                DisplayElapsedTime
+ *fill*         0x00000000000002d8        0x8 
+ .text          0x00000000000002e0       0x46 serial.o
+                0x00000000000002e0                SerialPut
+                0x00000000000002f6                SerialISR
+ .text          0x0000000000000326       0x61 inbound.o
+                0x0000000000000326                InBound
+ .text          0x0000000000000387      0x121 outbound.o
+                0x0000000000000387                OutBound
+ .text          0x00000000000004a8     0x10d0 /courses/TDDI11/sw/lib/elf/mtc.a(mtc.o)
+                0x00000000000004b0                mtc_split
+                0x00000000000004f8                mtc_stop
+                0x00000000000005e0                mtc_yield
+                0x0000000000000630                _mtc_setpri
+                0x0000000000000730                _mtc_getpri
+                0x0000000000000784                _mtc_asend
+                0x0000000000000824                _mtc_send
+                0x0000000000000988                _mtc_receive
+                0x0000000000000b14                _mtc_mcount
+                0x0000000000000bb8                _mtc_msize
+                0x0000000000000c9c                _mtc_mpriority
+                0x0000000000000d78                _mtc_mdata
+                0x0000000000000e20                _mtc_mtraverse
+                0x0000000000000ea8                _mtc_mignore
+                0x0000000000000fe8                _mtc_semacreate
+                0x0000000000001034                _mtc_semadel
+                0x0000000000001080                _mtc_semaset
+                0x00000000000010c4                _mtc_semareset
+                0x0000000000001110                _mtc_semainvert
+                0x0000000000001154                _mtc_semaget
+                0x000000000000116c                _mtc_semawait
+                0x0000000000001250                _mtc_me
+                0x0000000000001294                _mtc_setthreshold
+                0x00000000000012e4                _mtc_getthreshold
+                0x0000000000001334                _mtc_setcount
+                0x0000000000001384                _mtc_getcount
+                0x00000000000013d4                _mtc_setuptr
+                0x0000000000001424                _mtc_getuptr
+                0x0000000000001540                mtc_entry
+ .text          0x0000000000001578      0xe30 /courses/TDDI11/sw/lib/elf/mtc.a(schedule.o)
+                0x0000000000001584                _sch_setup
+                0x00000000000016dc                _sch_takedown
+                0x00000000000017c4                _sch_split
+                0x0000000000001b54                _sch_stop
+                0x0000000000001bd0                _sch_yield
+                0x0000000000001cd8                _sch_whoami
+                0x0000000000001d1c                _sch_wait
+                0x0000000000001e04                _sch_resume
+                0x0000000000001e94                _sch_norun
+                0x0000000000002058                _sch_setthreshold
+                0x0000000000002140                _sch_getthreshold
+                0x000000000000221c                _sch_setcount
+                0x000000000000231c                _sch_getcount
+ .text          0x00000000000023a8      0x630 /courses/TDDI11/sw/lib/elf/mtc.a(sema.o)
+                0x0000000000002498                _sema_setup
+                0x00000000000025d0                _sema_takedown
+                0x00000000000026b0                _sema_set
+                0x0000000000002754                _sema_reset
+                0x0000000000002800                _sema_invert
+                0x00000000000028b4                _sema_get
+                0x000000000000291c                _sema_wait
+ .text          0x00000000000029d8      0x7a0 /courses/TDDI11/sw/lib/elf/mtc.a(thread.o)
+                0x0000000000002a44                _thr_setup
+                0x0000000000002bd4                _thr_takedown
+                0x0000000000002cc0                _thr_save
+                0x0000000000002d80                _thr_restore
+                0x0000000000002e0c                _thr_setpri
+                0x0000000000002e70                _thr_getpri
+                0x0000000000002ed4                _thr_mlist
+                0x0000000000002f3c                _thr_block
+                0x0000000000002fac                _thr_unblock
+                0x000000000000301c                _thr_isblocked
+                0x000000000000308c                _thr_setuptr
+                0x00000000000030fc                _thr_getuptr
+ .text          0x0000000000003178      0x420 /courses/TDDI11/sw/lib/elf/mtc.a(abend.o)
+                0x0000000000003350                _mtc_abend
+ .text          0x0000000000003598      0x510 /courses/TDDI11/sw/lib/elf/mtc.a(context.o)
+                0x00000000000035f8                _ctxt_setup
+                0x0000000000003748                _ctxt_takedown
+                0x00000000000037bc                _ctxt_save
+                0x000000000000395c                _ctxt_restore
+ .text          0x0000000000003aa8      0xe40 /courses/TDDI11/sw/lib/elf/mtc.a(ll.o)
+                0x0000000000003ae0                _ll_setup
+                0x0000000000003bb4                _ll_takedown
+                0x0000000000003c98                _ll_addleft
+                0x0000000000003e10                _ll_addright
+                0x0000000000003f8c                _ll_delleft
+                0x0000000000004100                _ll_delright
+                0x0000000000004288                _ll_count
+                0x0000000000004334                _ll_current
+                0x00000000000043cc                _ll_start
+                0x000000000000443c                _ll_end
+                0x00000000000044b8                _ll_right
+                0x0000000000004560                _ll_left
+                0x0000000000004614                _ll_isstart
+                0x00000000000046ec                _ll_isend
+                0x00000000000047d8                _ll_save
+                0x0000000000004870                _ll_assign
+ .text          0x00000000000048e8      0xa60 /courses/TDDI11/sw/lib/elf/mtc.a(mlist.o)
+                0x0000000000004928                _ml_setup
+                0x0000000000004a0c                _ml_takedown
+                0x0000000000004b54                _ml_add
+                0x0000000000004d60                _ml_flush
+                0x0000000000004e60                _ml_dequeue
+                0x0000000000004f58                _ml_count
+                0x0000000000004fd0                _ml_traverse
+                0x0000000000005144                _ml_sync
+                0x00000000000051bc                _ml_priority
+                0x000000000000523c                _ml_data
+                0x00000000000052bc                _ml_size
+ .text          0x0000000000005348      0x450 /courses/TDDI11/sw/lib/elf/mtc.a(msg.o)
+                0x0000000000005398                _msg_setup
+                0x00000000000054ac                _msg_takedown
+                0x0000000000005530                _msg_size
+                0x00000000000055d0                _msg_sync
+                0x0000000000005674                _msg_priority
+                0x0000000000005700                _msg_data
+ .text          0x0000000000005798       0x50 /courses/TDDI11/sw/lib/elf/libepc.a(init-cpu.o)
+                0x0000000000005798                Init_CPU
+ .text          0x00000000000057e8      0x5a0 /courses/TDDI11/sw/lib/elf/libepc.a(init-idt.o)
+                0x0000000000005bf8                IRQ2INT
+                0x0000000000005c0c                _GetISR
+                0x0000000000005c50                SetISR
+                0x0000000000005c88                Init_IDT
+ .text          0x0000000000005d88      0x110 /courses/TDDI11/sw/lib/elf/libepc.a(init-crt.o)
+                0x0000000000005d88                Init_CRT
+                0x0000000000005dbc                _LastMemoryAddress
+ .text          0x0000000000005e98      0x6e0 /courses/TDDI11/sw/lib/elf/libepc.a(display.o)
+                0x0000000000005e98                SetCursorVisible
+                0x0000000000005f1c                _GetCursorRow
+                0x0000000000005f30                _GetCursorCol
+                0x0000000000005f44                SetCursorPosition
+                0x0000000000005fe8                ClearScreen
+                0x0000000000006050                _PutAttb
+                0x000000000000609c                _PutCharAt
+                0x00000000000060c8                _PutChar
+                0x000000000000614c                PutString
+                0x0000000000006184                PutUnsigned
+                0x00000000000061bc                FormatUnsigned
+                0x000000000000624c                Unsigned2Ascii
+                0x00000000000062d0                _Cell
+ .text          0x0000000000006578       0xe0 /courses/TDDI11/sw/lib/elf/libepc.a(timer.o)
+                0x0000000000006600                Milliseconds
+                0x000000000000661c                Now_Plus
+ .text          0x0000000000006658       0xe0 /courses/TDDI11/sw/lib/elf/libepc.a(init8259.o)
+                0x0000000000006658                Init8259
+ .text          0x0000000000006738       0xb0 /courses/TDDI11/sw/lib/elf/libepc.a(init8253.o)
+                0x0000000000006738                Init8253
+ .text          0x00000000000067e8      0x660 /courses/TDDI11/sw/lib/elf/libepc.a(heap.o)
+                0x00000000000067e8                malloc
+                0x000000000000689c                free
+ .text          0x0000000000006e48       0xb0 /courses/TDDI11/sw/lib/elf/libepc.a(setjmp.o)
+                0x0000000000006e48                _setjmp
+                0x0000000000006e92                _longjmp
+ .text          0x0000000000006ef8      0x180 /courses/TDDI11/sw/lib/elf/libepc.a(queue.o)
+                0x0000000000006ef8                QueueCreate
+                0x0000000000006f64                QueueRemove
+                0x0000000000006fe8                QueueInsert
+ .text          0x0000000000007078      0x600 /courses/TDDI11/sw/lib/elf/libepc.a(window.o)
+                0x000000000000707c                WindowCreate
+                0x0000000000007164                _WindowErase
+                0x00000000000071d4                WindowSelect
+                0x00000000000071f8                WindowSetCursor
+                0x0000000000007228                WindowPutChar
+                0x0000000000007308                WindowPutString
+ .text          0x0000000000007678       0x98 /courses/TDDI11/sw/lib/elf/libepc.a(checkcpu.o)
+                0x0000000000007678                Check_CPU
+ .text          0x0000000000007710       0x60 /courses/TDDI11/sw/lib/elf/libepc.a(io.o)
+                0x0000000000007710                TimerTickISR
+                0x000000000000771c                KeyboardISR
+                0x000000000000773c                ISR_PIC1
+                0x0000000000007743                ISR_PIC2
+                0x000000000000774c                ___main
+                0x000000000000774d                inportb
+                0x0000000000007757                outportb
+                0x0000000000007769                _exit
+ .text          0x0000000000007770      0x570 /courses/TDDI11/sw/lib/elf/libepc.a(keyboard.o)
+                0x0000000000007770                ScanCodeRdy
+                0x0000000000007794                GetScanCode
+                0x00000000000077c4                ScanCode2Ascii
+                0x0000000000007984                SetsKybdState
+                0x0000000000007b74                Enqueue
+ .text          0x0000000000007ce0        0x0 /courses/TDDI11/sw/lib/elf/djgpp/libc.a(ct_flags.o)
+ .text          0x0000000000007ce0       0x1c /courses/TDDI11/sw/lib/elf/djgpp/libc.a(memcpy.o)
+                0x0000000000007ce0                _memcpy
+ .text          0x0000000000007cfc       0x28 /courses/TDDI11/sw/lib/elf/djgpp/libc.a(strcpy.o)
+                0x0000000000007cfc                _strcpy
+ .text          0x0000000000007d24       0x24 /courses/TDDI11/sw/lib/elf/djgpp/libc.a(strlen.o)
+                0x0000000000007d24                _strlen
+ .text          0x0000000000007d48       0x10 /courses/TDDI11/sw/lib/elf/djgpp/libc.a(disable.o)
+                0x0000000000007d48                disable
+ .text          0x0000000000007d58       0x10 /courses/TDDI11/sw/lib/elf/djgpp/libc.a(enable.o)
+                0x0000000000007d58                enable
+ .text          0x0000000000007d68       0x28 /courses/TDDI11/sw/lib/elf/djgpp/libc.a(djmd.o)
+                0x0000000000007d68                ___dj_movedata
+                0x0000000000007d8f                text_last = (. - 0x1)
+
+.data           0x0000000000007d90      0x970
+                0x0000000000007d90                data_frst = .
+ *(.data)
+ .data          0x0000000000007d90        0x0 main.o
+ .data          0x0000000000007d90        0x1 serial.o
+ .data          0x0000000000007d91        0x0 inbound.o
+ .data          0x0000000000007d91        0x0 outbound.o
+ *fill*         0x0000000000007d91        0x3 
+ .data          0x0000000000007d94       0x10 /courses/TDDI11/sw/lib/elf/mtc.a(mtc.o)
+ .data          0x0000000000007da4       0x10 /courses/TDDI11/sw/lib/elf/mtc.a(schedule.o)
+ .data          0x0000000000007db4        0x0 /courses/TDDI11/sw/lib/elf/mtc.a(sema.o)
+ .data          0x0000000000007db4        0x0 /courses/TDDI11/sw/lib/elf/mtc.a(thread.o)
+ .data          0x0000000000007db4       0x70 /courses/TDDI11/sw/lib/elf/mtc.a(abend.o)
+                0x0000000000007db4                _MtCAbendFlag
+ .data          0x0000000000007e24        0x0 /courses/TDDI11/sw/lib/elf/mtc.a(context.o)
+ .data          0x0000000000007e24        0x0 /courses/TDDI11/sw/lib/elf/mtc.a(ll.o)
+ .data          0x0000000000007e24        0x0 /courses/TDDI11/sw/lib/elf/mtc.a(mlist.o)
+ .data          0x0000000000007e24        0x0 /courses/TDDI11/sw/lib/elf/mtc.a(msg.o)
+ .data          0x0000000000007e24       0x20 /courses/TDDI11/sw/lib/elf/libepc.a(init-cpu.o)
+                0x0000000000007e42                code_selector
+ .data          0x0000000000007e44       0x90 /courses/TDDI11/sw/lib/elf/libepc.a(init-idt.o)
+ .data          0x0000000000007ed4       0x10 /courses/TDDI11/sw/lib/elf/libepc.a(init-crt.o)
+ .data          0x0000000000007ee4       0x30 /courses/TDDI11/sw/lib/elf/libepc.a(display.o)
+ .data          0x0000000000007f14       0x10 /courses/TDDI11/sw/lib/elf/libepc.a(timer.o)
+ .data          0x0000000000007f24        0x0 /courses/TDDI11/sw/lib/elf/libepc.a(init8259.o)
+ .data          0x0000000000007f24        0x0 /courses/TDDI11/sw/lib/elf/libepc.a(init8253.o)
+ .data          0x0000000000007f24       0x10 /courses/TDDI11/sw/lib/elf/libepc.a(heap.o)
+ .data          0x0000000000007f34        0x0 /courses/TDDI11/sw/lib/elf/libepc.a(queue.o)
+ .data          0x0000000000007f34        0x0 /courses/TDDI11/sw/lib/elf/libepc.a(window.o)
+ .data          0x0000000000007f34        0xc /courses/TDDI11/sw/lib/elf/libepc.a(io.o)
+                0x0000000000007f34                msec
+                0x0000000000007f38                old_tick_isr
+                0x0000000000007f3c                old_kybd_isr
+ .data          0x0000000000007f40      0x5a0 /courses/TDDI11/sw/lib/elf/libepc.a(keyboard.o)
+ .data          0x00000000000084e0      0x204 /courses/TDDI11/sw/lib/elf/djgpp/libc.a(ct_flags.o)
+                0x00000000000084e0                __dj_ctype_flags
+ .data          0x00000000000086e4        0x0 /courses/TDDI11/sw/lib/elf/djgpp/libc.a(memcpy.o)
+ .data          0x00000000000086e4        0x0 /courses/TDDI11/sw/lib/elf/djgpp/libc.a(strcpy.o)
+ .data          0x00000000000086e4        0x0 /courses/TDDI11/sw/lib/elf/djgpp/libc.a(strlen.o)
+ .data          0x00000000000086e4        0x0 /courses/TDDI11/sw/lib/elf/djgpp/libc.a(disable.o)
+ .data          0x00000000000086e4        0x0 /courses/TDDI11/sw/lib/elf/djgpp/libc.a(enable.o)
+ .data          0x00000000000086e4        0x0 /courses/TDDI11/sw/lib/elf/djgpp/libc.a(djmd.o)
+ *(.rodata)
+ .rodata        0x00000000000086e4        0xf main.o
+ .rodata        0x00000000000086f3        0x7 inbound.o
+ .rodata        0x00000000000086fa        0x6 outbound.o
+ *(.rodata.str1.1)
+ *(.rodata.str1.32)
+                0x00000000000086ff                data_last = (. - 0x1)
+
+.bss            0x0000000000008700      0x878
+                0x0000000000008700                bss_frst = .
+ *(.bss)
+ .bss           0x0000000000008700        0x0 main.o
+ .bss           0x0000000000008700        0x0 inbound.o
+ .bss           0x0000000000008700        0x0 outbound.o
+ .bss           0x0000000000008700        0x0 /courses/TDDI11/sw/lib/elf/mtc.a(mtc.o)
+ .bss           0x0000000000008700       0x2c /courses/TDDI11/sw/lib/elf/mtc.a(schedule.o)
+ .bss           0x000000000000872c        0x0 /courses/TDDI11/sw/lib/elf/mtc.a(sema.o)
+ .bss           0x000000000000872c        0x0 /courses/TDDI11/sw/lib/elf/mtc.a(thread.o)
+ .bss           0x000000000000872c        0x0 /courses/TDDI11/sw/lib/elf/mtc.a(abend.o)
+ .bss           0x000000000000872c        0x8 /courses/TDDI11/sw/lib/elf/mtc.a(context.o)
+ .bss           0x0000000000008734        0x0 /courses/TDDI11/sw/lib/elf/mtc.a(ll.o)
+ .bss           0x0000000000008734        0x0 /courses/TDDI11/sw/lib/elf/mtc.a(mlist.o)
+ .bss           0x0000000000008734        0x0 /courses/TDDI11/sw/lib/elf/mtc.a(msg.o)
+ .bss           0x0000000000008734      0x800 /courses/TDDI11/sw/lib/elf/libepc.a(init-idt.o)
+ .bss           0x0000000000008f34        0x0 /courses/TDDI11/sw/lib/elf/libepc.a(init-crt.o)
+ .bss           0x0000000000008f34        0x8 /courses/TDDI11/sw/lib/elf/libepc.a(display.o)
+ .bss           0x0000000000008f3c        0x0 /courses/TDDI11/sw/lib/elf/libepc.a(timer.o)
+ .bss           0x0000000000008f3c        0x0 /courses/TDDI11/sw/lib/elf/libepc.a(init8259.o)
+ .bss           0x0000000000008f3c        0x0 /courses/TDDI11/sw/lib/elf/libepc.a(init8253.o)
+ .bss           0x0000000000008f3c        0x0 /courses/TDDI11/sw/lib/elf/libepc.a(heap.o)
+ .bss           0x0000000000008f3c        0x0 /courses/TDDI11/sw/lib/elf/libepc.a(queue.o)
+ .bss           0x0000000000008f3c        0x0 /courses/TDDI11/sw/lib/elf/libepc.a(window.o)
+ .bss           0x0000000000008f3c       0x34 /courses/TDDI11/sw/lib/elf/libepc.a(keyboard.o)
+ .bss           0x0000000000008f70        0x0 /courses/TDDI11/sw/lib/elf/djgpp/libc.a(ct_flags.o)
+ .bss           0x0000000000008f70        0x0 /courses/TDDI11/sw/lib/elf/djgpp/libc.a(memcpy.o)
+ .bss           0x0000000000008f70        0x0 /courses/TDDI11/sw/lib/elf/djgpp/libc.a(strcpy.o)
+ .bss           0x0000000000008f70        0x0 /courses/TDDI11/sw/lib/elf/djgpp/libc.a(strlen.o)
+ .bss           0x0000000000008f70        0x0 /courses/TDDI11/sw/lib/elf/djgpp/libc.a(disable.o)
+ .bss           0x0000000000008f70        0x0 /courses/TDDI11/sw/lib/elf/djgpp/libc.a(enable.o)
+ .bss           0x0000000000008f70        0x0 /courses/TDDI11/sw/lib/elf/djgpp/libc.a(djmd.o)
+ *(COMMON)
+ COMMON         0x0000000000008f70        0x4 main.o
+                0x0000000000008f70                inbound_queue
+ COMMON         0x0000000000008f74        0x4 /courses/TDDI11/sw/lib/elf/mtc.a(context.o)
+                0x0000000000008f74                ___Starting_Point__
+                0x0000000000008f77                bss_last = (. - 0x1)
+
+/DISCARD/
+ *(.eh_frame)
+                0x0000000000008f78                stack_frst = (bss_last + 0x1)
+                0x0000000000010f77                stack_last = (bss_last + 0x8000)
+                0x0000000000010f78                heap_frst = (stack_last + 0x1)
+OUTPUT(embedded.bin binary)
+
+.debug_info     0x0000000000000000      0x9e5
+ .debug_info    0x0000000000000000      0x495 main.o
+ .debug_info    0x0000000000000495      0x2c0 inbound.o
+ .debug_info    0x0000000000000755      0x290 outbound.o
+
+.debug_abbrev   0x0000000000000000      0x37a
+ .debug_abbrev  0x0000000000000000      0x188 main.o
+ .debug_abbrev  0x0000000000000188       0xfa inbound.o
+ .debug_abbrev  0x0000000000000282       0xf8 outbound.o
+
+.debug_aranges  0x0000000000000000       0x60
+ .debug_aranges
+                0x0000000000000000       0x20 main.o
+ .debug_aranges
+                0x0000000000000020       0x20 inbound.o
+ .debug_aranges
+                0x0000000000000040       0x20 outbound.o
+
+.debug_line     0x0000000000000000      0x307
+ .debug_line    0x0000000000000000      0x14d main.o
+ .debug_line    0x000000000000014d       0xb6 inbound.o
+ .debug_line    0x0000000000000203      0x104 outbound.o
+
+.debug_str      0x0000000000000000      0x6f4
+ .debug_str     0x0000000000000000      0x2e3 main.o
+ .debug_str     0x00000000000002e3      0x209 inbound.o
+ .debug_str     0x00000000000004ec      0x208 outbound.o
+
+.comment        0x0000000000000000       0x36
+ .comment       0x0000000000000000       0x12 main.o
+ .comment       0x0000000000000012       0x12 inbound.o
+ .comment       0x0000000000000024       0x12 outbound.o
diff --git a/chap6/main.c b/chap6/main.c
new file mode 100644
index 0000000..938d322
--- /dev/null
+++ b/chap6/main.c
@@ -0,0 +1,92 @@
+#include <mtc.h>
+#include <dos.h>
+#include <libepc.h>
+#include <ctype.h>
+
+#include "serial.h"
+
+/* Function prototypes for the threads */
+void OutBound(void) ;
+void InBound(void) ;
+void DisplayElapsedTime(void) ;
+
+PRIVATE void SerialInit(void) ;
+
+QUEUE *inbound_queue ;
+
+int main()
+{
+  inbound_queue = QueueCreate(sizeof(char), 20) ;
+
+  ClearScreen(0x07) ;
+  SetCursorVisible(TRUE) ;
+  SerialInit() ;
+
+  MtCCoroutine(OutBound()) ;
+  MtCCoroutine(InBound()) ;
+
+  MtCCoroutine(DisplayElapsedTime());
+
+  return 0 ;
+}
+
+PRIVATE void SerialInit(void)
+{
+  /* Disable interrupts during initialization */
+  disable() ;
+
+  /* 9600 baud */
+  outportb(SER_LCR, SER_LCR_DLAB) ;
+  outportb(SER_DLO, 12) ;
+  outportb(SER_DHI, 0) ;
+
+  /* 8 data bits, even parity, 1 stop bit */
+  outportb(SER_LCR, 0x1B) ;
+
+  /* Enable only receiver data ready interrupts */
+  outportb(SER_IER, 0x01) ;
+
+  /* Request to send, data terminal ready, enable interrupts */
+  outportb(SER_MCR, SER_MCR_RTS|SER_MCR_DTR|SER_MCR_OUT2) ;
+
+  /* Store address of ISR in IDT */
+  SetISR(IRQ2INT(SER_IRQ), SerialISR) ;
+
+  /* Unmask the UART's IRQ line */
+  outportb(0x21, inportb(0x21) & ~SER_MSK) ;
+
+  /* Re-enable interrupts */
+  enable() ;
+}
+
+void DisplayElapsedTime(void)
+{
+  WINDOW *w;
+  w = WindowCreate("Elapsed Time", 22, 24, 0, 79);
+
+  for(;;)
+  {
+    DWORD32 ms_start = Milliseconds();
+    DWORD32 ms_stop = ms_start + 1000;
+
+    DWORD32 s_start = ms_start / 1000;
+    DWORD32 hh = s_start / 3600;
+    DWORD32 mm = (s_start / 60) % 60;
+    DWORD32 ss = s_start % 60;
+
+    WindowSelect(w);
+
+    PutUnsigned(hh, 10, 2);
+    PutString(":");
+    PutUnsigned(mm, 10, 2);
+    PutString(":");
+    PutUnsigned(ss, 10, 2);
+
+    while(Milliseconds() < ms_stop) //Keep yielding until one second has passed.
+    {
+      MtCYield();
+    }
+
+  }
+
+}
diff --git a/chap6/main.o b/chap6/main.o
new file mode 100644
index 0000000000000000000000000000000000000000..96875f3d94a930047f0e0fef255754c9adff5c79
GIT binary patch
literal 6552
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
J5>O1&0s!;m&h`KR

literal 0
HcmV?d00001

diff --git a/chap6/makeNrun.sh b/chap6/makeNrun.sh
new file mode 100644
index 0000000..fc778fb
--- /dev/null
+++ b/chap6/makeNrun.sh
@@ -0,0 +1,25 @@
+#!/bin/bash
+
+clear
+echo "This script includes commands to make the project and run it"
+
+echo "clean up the directory with make clean"
+make clean
+echo "make the project with make."
+make
+echo "Guiding mtools mcopy to its configuration file"
+export MTOOLSRC=mtools.conf
+echo "Copying the binary to floppy image"
+mcopy embedded.bin a:
+echo "Duplicating the floppy image"
+cp floppy.img floppy_copy.img
+echo "We assume port 50152 is free. Check below, if it is not free, select another port"
+netstat | grep ":50152"
+echo "Proceeding with port 50152 on localhost=127.0.0.1"
+echo "Starting Qemu with given binary in the floppy image, as server"
+qemu-system-i386 -drive format=raw,file=floppy.img,if=floppy -serial tcp:127.0.0.1:50152,server,nowait &
+echo "Starting another Qemu with given binary in the floppy image, as client. Wait a second for server to connect"
+sleep 1
+qemu-system-i386 -drive format=raw,file=floppy_copy.img,if=floppy -serial tcp:127.0.0.1:50152 &
+
+
diff --git a/chap6/mtools.conf b/chap6/mtools.conf
new file mode 100644
index 0000000..c387b85
--- /dev/null
+++ b/chap6/mtools.conf
@@ -0,0 +1,6 @@
+MTOOLS_NO_VFAT=1
+drive a:
+      file="floppy.img"
+      fat_bits=12
+      cylinders=80 heads=2 sectors=18
+      mformat_only
diff --git a/chap6/outbound.c b/chap6/outbound.c
new file mode 100644
index 0000000..c6c121c
--- /dev/null
+++ b/chap6/outbound.c
@@ -0,0 +1,49 @@
+#include <libepc.h>
+#include <ctype.h>
+#include <mtc.h>
+
+#include "serial.h"
+
+void OutBound(void)
+{
+  WINDOW *w ;
+  
+  w = WindowCreate("Local", 0, 10, 0, 79) ;
+  if (!w)
+    return ;
+  
+  for (;;)
+  {
+    BYTE8 code ;
+    char ascii ;
+    
+    MtCYield() ;
+    
+    WindowSelect(w) ;
+    
+    if (!ScanCodeRdy())
+      continue ;
+    
+    code = GetScanCode() ;
+    
+    if (code & 0x80)
+      continue ;
+    
+    if (SetsKybdState(code))
+      continue ;
+    
+    ascii = ScanCode2Ascii(code) & 0xFF ;
+    if (!isprint(ascii) && !iscntrl(ascii))
+      continue ;
+    
+    WindowPutChar(w, ascii) ;
+    
+    SerialPut(ascii) ;
+    if (ascii == '\r')
+    {
+      WindowPutChar(w, '\n') ;
+      SerialPut('\n') ;
+    }
+  }
+}
+
diff --git a/chap6/outbound.o b/chap6/outbound.o
new file mode 100644
index 0000000000000000000000000000000000000000..592a129f105d823b6170c5c3897841abe95fc3bc
GIT binary patch
literal 4192
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

literal 0
HcmV?d00001

diff --git a/chap6/serial.asm b/chap6/serial.asm
new file mode 100644
index 0000000..dd90a9d
--- /dev/null
+++ b/chap6/serial.asm
@@ -0,0 +1,94 @@
+		SECTION	.data
+		EXTERN	inbound_queue	; (defined in main.C)
+data		DB	0		; put rcvd byte here
+
+		SECTION	.text
+		ALIGN	16
+		BITS	32
+
+BASE_PORT	EQU	3F8h		; we have this in our lab
+
+LSR_PORT	EQU	BASE_PORT+5
+RBR_PORT	EQU	BASE_PORT
+THR_PORT	EQU	BASE_PORT
+
+SER_LSR_THRE EQU 0x20
+SER_LSR_RBF	EQU	0x01
+CHAR_ARG EQU 	8
+; ---------------------------------------------------------------------
+; void SerialPut(char ch)
+; ---------------------------------------------------------------------
+; This function uses programmed waiting loop I/O
+; to output the ASCII character 'ch' to the UART.
+
+		GLOBAL	SerialPut
+
+SerialPut:
+
+		PUSH	EBP
+		MOV	EBP, ESP
+
+while_loop_start:
+		; (1) Wait for THRE = 1
+		MOV DX, LSR_PORT
+		IN	AL, DX
+		TEST AL, SER_LSR_THRE
+		JZ	while_loop_start	;If THRE is not set
+while_loop_end:
+
+		; (2) Output character to UART
+		MOV	AL, [EBP + CHAR_ARG]
+		MOV DX, THR_PORT
+		OUT	DX, AL
+
+		POP EBP
+		; (3) Return to caller
+		RET
+
+; ---------------------------------------------------------------------
+; void interrupt SerialISR(void)
+; ---------------------------------------------------------------------
+; This is an Interrupt Service Routine (ISR) for
+; serial receive interrupts.  Characters received
+; are placed in a queue by calling Enqueue(char).
+
+		GLOBAL	SerialISR
+		EXTERN	QueueInsert	; (provided by LIBPC)
+
+SerialISR:
+		; Enable (higher-priority) IRQs
+		STI
+		; (1) Preserve all registers
+		PUSHAD
+		PUSHFD
+
+		; (2) Get character from UART
+		MOV DX, LSR_PORT
+		IN	AL, DX
+		TEST AL, SER_LSR_RBF
+		JZ	_Eoi	;If RBF is not set
+		MOV	DX, RBR_PORT
+		IN 	AL, DX
+		; (3) Put character into queue
+		MOV [data], AL
+		; Param #2: address of data
+		PUSH DWORD data
+		; Param #1: address of queue
+		PUSH DWORD [inbound_queue]
+		CALL	QueueInsert
+		ADD	ESP,8
+		;POP
+		;POP
+
+_Eoi:
+		; (4) Enable lower priority interrupts
+	  ;(Send Non-Specific EOI to PIC)
+		MOV	AL, 0x20
+		OUT	0x20, AL
+
+		; (5) Restore all registers
+		POPFD
+		POPAD
+		; (6) Return to interrupted code
+		IRET
+
diff --git a/chap6/serial.h b/chap6/serial.h
new file mode 100644
index 0000000..9c42d33
--- /dev/null
+++ b/chap6/serial.h
@@ -0,0 +1,28 @@
+#define	SER_IRQ		IRQ_COM1_COM3	/* Hardware IRQ for COM1	*/
+#define	SER_MSK		0x10		/* PIC mask bit for IRQ 4	*/
+#define	SER_BASE	0x3F8		/* Base port address for COM1	*/
+
+#define	SER_THR		SER_BASE	/* Transmitter Holding Register	*/
+#define	SER_RBR		SER_BASE	/* Receiver Buffer Register	*/
+#define	SER_DLO		SER_BASE	/* Baud Rate Divisor Low	*/
+#define	SER_DHI		(SER_BASE+1)	/* Baud Rate Divisor High	*/
+#define	SER_IER		(SER_BASE+1)	/* Interrupt Enable Register	*/
+#define	SER_IIR		(SER_BASE+2)	/* Interrupt Identification Reg	*/
+#define	SER_LCR		(SER_BASE+3)	/* Line Control Register	*/
+#define	SER_MCR		(SER_BASE+4)	/* Modem Control Register	*/
+#define	SER_LSR		(SER_BASE+5)	/* Line Status Register		*/
+#define	SER_MSR		(SER_BASE+6)	/* Modem Status Register	*/
+#define	SER_SCR		(SER_BASE+7)	/* Scratch Register		*/
+
+#define	SER_LSR_THRE	0x20		/* Trans. Hold. Reg. Empty	*/
+#define	SER_LSR_RBF	0x01		/* Receiver Buffer Full		*/
+
+#define	SER_LCR_DLAB	0x80		/* Divisor Latch Address Bit	*/
+
+#define	SER_MCR_DTR	0x01		/* Data Terminal Ready		*/
+#define	SER_MCR_RTS	0x02		/* Request To Send		*/
+#define	SER_MCR_OUT2	0x08		/* Interrupt Enable		*/
+
+void SerialPut(char ch) ;
+void SerialISR(void) ;
+
diff --git a/chap6/serial.o b/chap6/serial.o
new file mode 100644
index 0000000000000000000000000000000000000000..6aebaf1972284a29eae83b2ec02ad2872f44f87b
GIT binary patch
literal 1024
zcmb<-^>JflWMqH=Mh0dE1doBi0V-hvrZpJY8JNK=QVEcmAPm!;z{r4N4-3>lb_R$z
z8<bzb$iUzRWrHXI5W&E}z{|jZ;*tZ53=D=)IS>W13q*@EFfcHI7%<Glz+k}0z`)AD
zz`)PIzyPurWTrftc?Qf3469*!pl$+j)fpHVI6(|3e!$GYpa3-oWDm$Z4yYV9Dzx)y
z+OEIMZ&oOjeD8AQNZa*;`CaVc-wAUdqKqZ7AfY#lKzcJk#D7x|`Qp$2|NonhaBNU`
zrZ6}0JV*$N^->Z`5*hSLQY%Ur^olczONvSolNj`hD{~<<lwXvZ15pFjhKquQ8%Umo
z;p2Z04a2A@0~G#D3~De*FwMxI&A`C$0~W~)AHlBwi^R7>lXpks2QWaw6KovA$N#ZN
zVb8$u@qZ=*0|O#_KmM;li8m&OUIqpR9*Aae%r9eLV6aExBjgwuK=CdGmxJ(&Q20y?
za~K#H#GqmVpp;acT9lcXqnB8m%aECulwX>c5?@%FTAIob2qHc6ic^b97{GDj<QVK4
zAK)Jp!r&7e1Yra@K^Y+)P)4w8P&`OF#3RU+0mcb(a$|7za14rf402}(23r_VTEbAC
zk(rYkpOc?o5MNx9ScD>wnwJ7q=@}fv5bv4~3Md8!1`Sa7F)=XcLTO_V&CkGK0SX-f
G1_l5uxQjLb

literal 0
HcmV?d00001

diff --git a/chap7/Makefile b/chap7/Makefile
new file mode 100644
index 0000000..0961a72
--- /dev/null
+++ b/chap7/Makefile
@@ -0,0 +1,22 @@
+OBJ    = main.o serial.o inbound.o outbound.o elapsed.o packet.o isr.o
+
+COURSE   = /courses/TDDI11/sw
+LDSCRIPT = $(COURSE)/lib/link.cmd
+BOOTSECT = $(COURSE)/lib/bootload.bin
+LIBS = $(COURSE)/lib/elf/ucos_ii.a
+INCLUDES = -I "$(COURSE)/include" -I "$(COURSE)/include/djgpp" $(EXTRA_INCLUDES)
+CC       = $(COURSE)/i386-elf-gcc-7.3.0/bin/i386-elf-gcc
+CFLAGS  += -Wall -g $(INCLUDES)
+LD       = $(COURSE)/i386-elf-gcc-7.3.0/bin/i386-elf-ld
+LDFLAGS  = -T$(LDSCRIPT) -static -ustart -Map link.map
+AS       = nasm
+ASFLAGS  = -f elf32
+
+embedded.bin: $(OBJ)
+	$(LD) $(OBJ) $(LIBS) $(LDFLAGS)
+%.o: %.c
+	$(CC) $(CFLAGS) -c $<
+%.o: %.asm
+	$(AS) $(ASFLAGS) $<
+clean:
+	\rm -f embedded.bin *~ *.o link.map
diff --git a/chap7/elapsed.c b/chap7/elapsed.c
new file mode 100644
index 0000000..4f34fd9
--- /dev/null
+++ b/chap7/elapsed.c
@@ -0,0 +1,106 @@
+#include <os_cpu.h>
+#include <os_cfg.h>
+#include <ucos_ii.h> /* os_c??.h must be included before ! */
+#include <libepc.h>
+
+#include "elapsed.h"
+#include "packet.h"
+
+PRIVATE char *AsciiTime(TIME *elapsed) ;
+PRIVATE void UpdateTime(TIME *elapsed) ;
+
+PRIVATE OS_EVENT *time_queue = NULL ;
+
+PRIVATE void TimeCreateQ(void)
+{
+  static void *time_q[20] ;
+  
+  if (!time_queue)
+  {
+    time_queue = OSQCreate(time_q, ENTRIES(time_q)) ;
+  }
+}
+
+void PostTime(BYTE8 *bfr)
+{
+  TimeCreateQ() ;
+  OSQPost(time_queue, bfr) ;
+}
+
+void InboundTime(void)
+{
+  WINDOW *w ;
+  
+  w = (WINDOW *) WindowCreate("Remote", 11, 13, 56, 72) ;
+  if (!w)
+    return ;
+  TimeCreateQ() ;
+  
+  for (;;)
+  {
+    BYTE8 err ;
+    char *bfr ;
+    
+    bfr = OSQPend(time_queue, 0, &err) ;
+    WindowSetCursor(w, 0, 1) ;
+    WindowPutString(w, bfr) ;
+    free(bfr) ;
+  }
+}
+
+void ElapsedLocal(void)
+{
+  WINDOW *w ;
+  
+  w = (WINDOW *) WindowCreate("Local", 11, 13, 10, 23) ;
+  if (!w)
+    return ;
+
+  /* SerialInit have a guard inside to prevent multiple initializations */
+  SerialInit();
+  
+  for (;;)
+  {
+    static TIME elapsed = {0, 0, 0, 0} ;
+    char *bfr ;
+    
+    /* Update the display */
+    WindowSetCursor(w, 0, 1) ;
+    bfr = AsciiTime(&elapsed) ;
+    SendPacket(2, bfr, 10) ;
+    WindowPutString(w, bfr) ;
+    
+    OSTimeDly(100) ; /* Sleep for about .1 second */
+    
+    /* update elapsed hours, minutes, and seconds */
+    UpdateTime(&elapsed) ;
+  }
+}
+
+PRIVATE void UpdateTime(TIME *elapsed)
+{
+  int ticks = OSTimeGet() ;
+  
+  elapsed->tenths = ticks / 100 ;
+  elapsed->secs = elapsed->tenths / 10 ;
+  elapsed->tenths %= 10 ;
+  elapsed->mins = elapsed->secs / 60 ;
+  elapsed->secs %= 60 ;
+  elapsed->hours = elapsed->mins / 60 ;
+  elapsed->mins %= 60 ;
+}
+
+PRIVATE char *AsciiTime(TIME *elapsed)
+{
+  static char _bfr[] = "XX:XX:XX.X" ;
+  char *bfr ;
+  
+  bfr = FormatUnsigned(_bfr, elapsed->hours, 10, 2, '0') ;
+  *bfr++ = ':' ;
+  bfr = FormatUnsigned(bfr, elapsed->mins,  10, 2, '0') ;
+  *bfr++ = ':' ;
+  bfr = FormatUnsigned(bfr, elapsed->secs,  10, 2, '0') ;
+  *bfr++ = '.' ;
+  FormatUnsigned(bfr, elapsed->tenths, 10, 1, '0') ;
+  return _bfr ;
+}
diff --git a/chap7/elapsed.h b/chap7/elapsed.h
new file mode 100644
index 0000000..1579ded
--- /dev/null
+++ b/chap7/elapsed.h
@@ -0,0 +1,11 @@
+typedef struct TIME
+{
+  unsigned	hours ;
+  unsigned	mins ;
+  unsigned	secs ;
+  unsigned	tenths ;
+} TIME ;
+
+void PostTime(BYTE8 *bfr) ;
+void InboundTime() ;
+void ElapsedLocal() ;
diff --git a/chap7/elapsed.o b/chap7/elapsed.o
new file mode 100644
index 0000000000000000000000000000000000000000..79cc2c23778648afa413b745cb373e7fc73db740
GIT binary patch
literal 8600
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

literal 0
HcmV?d00001

diff --git a/chap7/embedded.bin b/chap7/embedded.bin
new file mode 100644
index 0000000000000000000000000000000000000000..eea7636d051dd47bab6ed54d93dd59236b0d0bd8
GIT binary patch
literal 27450
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

literal 0
HcmV?d00001

diff --git a/chap7/floppy.img b/chap7/floppy.img
new file mode 100644
index 0000000000000000000000000000000000000000..80beaabe55f9238f10a79f58eb65448967531d7e
GIT binary patch
literal 1474560
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
z8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*O
zqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8Umvs
zFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF
z0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*
zAut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?
z8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*AutL?
zLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(
zGz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!n
zMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ON
zU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU
z1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0q
zLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(
zGz3P$Xb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1J
zhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kin
zXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeD
zjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mk
zz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By
z2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1J
zhQMeDjE2A{7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z
z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c
z4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C
z(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R
z7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7
zfzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z
z5Eu=C(GVC7fzc2c1*0J_8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF
z0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*
zAut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?
z8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*O
zqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8Umvs
zFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF
z0;3@?8UmvsFd71*Aut*OqhK@yMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ON
zU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU
z1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0q
zLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(
zGz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!n
zMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ON
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

literal 0
HcmV?d00001

diff --git a/chap7/floppy_copy.img b/chap7/floppy_copy.img
new file mode 100644
index 0000000000000000000000000000000000000000..80beaabe55f9238f10a79f58eb65448967531d7e
GIT binary patch
literal 1474560
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
z8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*O
zqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8Umvs
zFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF
z0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*
zAut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?
z8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*AutL?
zLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(
zGz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!n
zMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ON
zU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU
z1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0q
zLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(
zGz3P$Xb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1J
zhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kin
zXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeD
zjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mk
zz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By
z2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb6mkz-S1J
zhQMeDjE2A{7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z
z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c
z4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C
z(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R
z7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7
zfzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z
z5Eu=C(GVC7fzc2c1*0J_8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF
z0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*
zAut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?
z8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*O
zqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8Umvs
zFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF
z0;3@?8UmvsFd71*Aut*OqhK@yMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ON
zU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU
z1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0q
zLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(
zGz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!n
zMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ON
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

literal 0
HcmV?d00001

diff --git a/chap7/inbound.c b/chap7/inbound.c
new file mode 100644
index 0000000..8154466
--- /dev/null
+++ b/chap7/inbound.c
@@ -0,0 +1,42 @@
+#include <os_cpu.h>
+#include <os_cfg.h>
+#include <ucos_ii.h> /* os_c??.h must be included before ! */
+#include <libepc.h>
+
+#include "packet.h"
+
+PRIVATE OS_EVENT *display_queue = NULL ;
+
+PRIVATE void InboundCreateQ(void)
+{
+  if (!display_queue)
+  {
+    static void *display_q[20] ;
+    display_queue = OSQCreate(display_q, ENTRIES(display_q)) ;
+  }
+}
+
+void PostText(BYTE8 *bfr)
+{
+  InboundCreateQ() ;
+  OSQPost(display_queue, bfr) ;
+}
+
+void InboundText(void)
+{
+  WINDOW *remote ;
+  
+  remote = WindowCreate("Remote", 14, 24, 0, 79) ;
+  InboundCreateQ() ;
+  
+  for (;;)
+  {
+    char *bfr ;
+    BYTE8 err ;
+    
+    bfr = OSQPend(display_queue, 0, &err) ;
+    WindowPutChar(remote, *bfr) ;
+    free(bfr) ;
+  }
+}
+
diff --git a/chap7/inbound.h b/chap7/inbound.h
new file mode 100644
index 0000000..848795f
--- /dev/null
+++ b/chap7/inbound.h
@@ -0,0 +1,3 @@
+void PostText(BYTE8 *bfr) ;
+void InboundText() ;
+
diff --git a/chap7/inbound.o b/chap7/inbound.o
new file mode 100644
index 0000000000000000000000000000000000000000..c659e4366c7f86876224c64fabc34e997a9bfcf6
GIT binary patch
literal 6732
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
XAag)Wkom~!CWt}mdypIm!_)x)clQw-

literal 0
HcmV?d00001

diff --git a/chap7/isr.asm b/chap7/isr.asm
new file mode 100644
index 0000000..4dca05d
--- /dev/null
+++ b/chap7/isr.asm
@@ -0,0 +1,64 @@
+	SECTION	.data
+
+	EXTERN  _OSIntNesting
+	EXTERN  _OSTCBCur
+	EXTERN	kybd_queue
+	EXTERN	com1_queue
+
+	SECTION	.text
+	ALIGN	16
+	BITS	32
+
+	GLOBAL	OSKeyboardISR
+	GLOBAL	OSSerialISR
+
+	EXTERN  _OSIntEnter
+	EXTERN  _OSIntExit
+	EXTERN  OSQPost
+
+; --------------------------------------------------------------------
+OSKeyboardISR:
+; --------------------------------------------------------------------
+	PUSHA				; Save interrupted task's context
+	CALL	_OSIntEnter		; Notify uC/OS-II of ISR
+	CMP	BYTE [_OSIntNesting], 1	; if (OSIntNesting == 1)
+	JNE	SHORT _KeyboardISR1             
+	MOV	EAX, [_OSTCBCur]	;     OSTCBCur->OSTCBStkPtr = ESP
+	MOV	[EAX], ESP
+_KeyboardISR1:
+	IN	AL,60h			; get scan code
+	MOVZX	EAX,AL
+	PUSH	EAX
+	PUSH	DWORD [kybd_queue]
+	CALL	OSQPost
+	ADD	ESP,8
+	MOV	AL,20H			; Send EOI to PIC
+	OUT	20H,AL
+	CALL	_OSIntExit		; Notify uC/OS-II of end of ISR
+	POPA
+	IRET				; Return to interrupted task
+
+; --------------------------------------------------------------------
+OSSerialISR:
+; --------------------------------------------------------------------
+	PUSHA				; Save interrupted task's context
+	CALL	_OSIntEnter		; Notify uC/OS-II of ISR
+	CMP	BYTE [_OSIntNesting], 1	; if (OSIntNesting == 1)
+	JNE	SHORT _SerialISR1
+	MOV	EAX, [_OSTCBCur]	;     OSTCBCur->OSTCBStkPtr = ESP
+	MOV	[EAX], ESP
+_SerialISR1:
+	MOV	DX,3F8H
+	IN	AL,DX			; get serial byte
+	MOVZX	EAX,AL
+	PUSH	EAX
+	PUSH	DWORD [com1_queue]
+	CALL	OSQPost
+	ADD	ESP,8
+	MOV	AL,20H			; Send EOI to PIC
+	OUT	20H,AL
+	CALL	_OSIntExit		; Notify uC/OS-II of end of ISR
+	POPA
+	IRET				; Return to interrupted task
+
+	END
diff --git a/chap7/isr.o b/chap7/isr.o
new file mode 100644
index 0000000000000000000000000000000000000000..2e3898fc926dfb2f2023889abc805ec1bea6a4f7
GIT binary patch
literal 1024
zcmb<-^>JflWMqH=Mh0dE1doBi0V-hvrZpJY8JNK=QVEcmAPm!;0OBAS!UAQpGcbVd
zXM^%V>T;oM5G4R27#J9M85mGpa)FV7!4N73qF~00GcYhPfdrsf0K{QrU|?lnU;x<#
zvKM5gJeqj|%nS^DP(2_DW}Z3&0|O^W0E!ndGcY7DFff430T~UVIiPYND&fVS|Ns9t
z*n-%MrR)nqbf?0T1paLY0{)wVcwhz1M>sYpJW~L(6VGGUl(y>!^BcVSK*s5%B$gyH
z=#`{alrZQOXB3wdl_VxH=oMGyLTD(zC^ZM72BZfMhWQ($goWYbe-I7Bs3`>$A507>
z3=9lnFa-=u40Q|)4BklmE(Qh$M0_%#ge52*K=B1r4&p1qI1CI7AifS7-yDtajK=pv
z<A<T}nHY)~7#P6O05+eAfg!WFNH4KCmm%Ii*fX!hFSWQNGcO&)3vqUGE-hlnu1rda
zFDy+hO=U>V&ozWHA*x;TN>YnJYCZExTq`n582p0+1M-VOw0CM{Qhs7lif3>TLp&14
zkikDVIJGD<F$XLIXBslN`nf>UE)zEc11L=~vO~gvk%NIj4wO$g85op7YIqqK^g%Qa
n0|O{LK<YsW4y4`{q>h7u0pxE+E(V5ZkUCxlhIA0k!@vLl2{nd$

literal 0
HcmV?d00001

diff --git a/chap7/link.map b/chap7/link.map
new file mode 100644
index 0000000..98782d2
--- /dev/null
+++ b/chap7/link.map
@@ -0,0 +1,497 @@
+Archive member included to satisfy reference by file (symbol)
+
+/courses/TDDI11/sw/lib/elf/ucos_ii.a(os_core.o)
+                              main.o (OSInit)
+/courses/TDDI11/sw/lib/elf/ucos_ii.a(os_flag.o)
+                              /courses/TDDI11/sw/lib/elf/ucos_ii.a(os_core.o) (_OS_FlagInit)
+/courses/TDDI11/sw/lib/elf/ucos_ii.a(os_mem.o)
+                              /courses/TDDI11/sw/lib/elf/ucos_ii.a(os_core.o) (_OS_MemInit)
+/courses/TDDI11/sw/lib/elf/ucos_ii.a(os_q.o)
+                              serial.o (OSQCreate)
+/courses/TDDI11/sw/lib/elf/ucos_ii.a(os_sem.o)
+                              packet.o (OSSemCreate)
+/courses/TDDI11/sw/lib/elf/ucos_ii.a(os_task.o)
+                              main.o (OSTaskCreate)
+/courses/TDDI11/sw/lib/elf/ucos_ii.a(os_time.o)
+                              serial.o (OSTimeDly)
+/courses/TDDI11/sw/lib/elf/ucos_ii.a(os_cpu_a.o)
+                              /courses/TDDI11/sw/lib/elf/ucos_ii.a(os_core.o) (_OSStartHighRdy)
+/courses/TDDI11/sw/lib/elf/ucos_ii.a(os_cpu_c.o)
+                              /courses/TDDI11/sw/lib/elf/ucos_ii.a(os_task.o) (_OSTaskStkInit)
+/courses/TDDI11/sw/lib/elf/libepc.a(init-cpu.o)
+                              (start)
+/courses/TDDI11/sw/lib/elf/libepc.a(init-idt.o)
+                              serial.o (IRQ2INT)
+/courses/TDDI11/sw/lib/elf/libepc.a(init-crt.o)
+                              /courses/TDDI11/sw/lib/elf/libepc.a(init-cpu.o) (Init_CRT)
+/courses/TDDI11/sw/lib/elf/libepc.a(display.o)
+                              main.o (SetCursorVisible)
+/courses/TDDI11/sw/lib/elf/libepc.a(init8259.o)
+                              /courses/TDDI11/sw/lib/elf/libepc.a(init-cpu.o) (Init8259)
+/courses/TDDI11/sw/lib/elf/libepc.a(init8253.o)
+                              /courses/TDDI11/sw/lib/elf/libepc.a(init-cpu.o) (Init8253)
+/courses/TDDI11/sw/lib/elf/libepc.a(heap.o)
+                              main.o (malloc)
+/courses/TDDI11/sw/lib/elf/libepc.a(window.o)
+                              inbound.o (WindowCreate)
+/courses/TDDI11/sw/lib/elf/libepc.a(checkcpu.o)
+                              /courses/TDDI11/sw/lib/elf/libepc.a(init-cpu.o) (Check_CPU)
+/courses/TDDI11/sw/lib/elf/libepc.a(io.o)
+                              /courses/TDDI11/sw/lib/elf/libepc.a(init-idt.o) (ISR_PIC1)
+/courses/TDDI11/sw/lib/elf/libepc.a(keyboard.o)
+                              outbound.o (ScanCode2Ascii)
+/courses/TDDI11/sw/lib/elf/djgpp/libc.a(ct_flags.o)
+                              outbound.o (__dj_ctype_flags)
+/courses/TDDI11/sw/lib/elf/djgpp/libc.a(memcpy.o)
+                              /courses/TDDI11/sw/lib/elf/ucos_ii.a(os_task.o) (_memcpy)
+/courses/TDDI11/sw/lib/elf/djgpp/libc.a(memset.o)
+                              /courses/TDDI11/sw/lib/elf/ucos_ii.a(os_task.o) (_memset)
+/courses/TDDI11/sw/lib/elf/djgpp/libc.a(strcpy.o)
+                              /courses/TDDI11/sw/lib/elf/libepc.a(window.o) (_strcpy)
+/courses/TDDI11/sw/lib/elf/djgpp/libc.a(strlen.o)
+                              /courses/TDDI11/sw/lib/elf/libepc.a(window.o) (_strlen)
+/courses/TDDI11/sw/lib/elf/djgpp/libc.a(disable.o)
+                              serial.o (disable)
+/courses/TDDI11/sw/lib/elf/djgpp/libc.a(enable.o)
+                              serial.o (enable)
+/courses/TDDI11/sw/lib/elf/djgpp/libc.a(djmd.o)
+                              /courses/TDDI11/sw/lib/elf/djgpp/libc.a(memcpy.o) (___dj_movedata)
+
+Allocating common symbols
+Common symbol       size              file
+
+_OSTaskCtr          0x4               /courses/TDDI11/sw/lib/elf/ucos_ii.a(os_core.o)
+_OSTCBCur           0x4               /courses/TDDI11/sw/lib/elf/ucos_ii.a(os_core.o)
+_OSCtxSwCtr         0x4               /courses/TDDI11/sw/lib/elf/ucos_ii.a(os_core.o)
+_OSTCBList          0x4               /courses/TDDI11/sw/lib/elf/ucos_ii.a(os_core.o)
+_OSTCBHighRdy       0x4               /courses/TDDI11/sw/lib/elf/ucos_ii.a(os_core.o)
+_OSQTbl             0x78              /courses/TDDI11/sw/lib/elf/ucos_ii.a(os_core.o)
+_OSRdyTbl           0x8               /courses/TDDI11/sw/lib/elf/ucos_ii.a(os_core.o)
+_OSTaskIdleStk      0x800             /courses/TDDI11/sw/lib/elf/ucos_ii.a(os_core.o)
+_OSEventTbl         0xa0              /courses/TDDI11/sw/lib/elf/ucos_ii.a(os_core.o)
+_OSTCBFreeList      0x4               /courses/TDDI11/sw/lib/elf/ucos_ii.a(os_core.o)
+_OldTickISR         0x4               /courses/TDDI11/sw/lib/elf/ucos_ii.a(os_cpu_c.o)
+_OSRdyGrp           0x4               /courses/TDDI11/sw/lib/elf/ucos_ii.a(os_core.o)
+_OSIntExitY         0x4               /courses/TDDI11/sw/lib/elf/ucos_ii.a(os_core.o)
+_OSPrioCur          0x4               /courses/TDDI11/sw/lib/elf/ucos_ii.a(os_core.o)
+_OSQFreeList        0x4               /courses/TDDI11/sw/lib/elf/ucos_ii.a(os_core.o)
+sendPacketSema      0x4               packet.o
+_OSIdleCtr          0x4               /courses/TDDI11/sw/lib/elf/ucos_ii.a(os_core.o)
+_OSRunning          0x4               /courses/TDDI11/sw/lib/elf/ucos_ii.a(os_core.o)
+_OSMemTbl           0x64              /courses/TDDI11/sw/lib/elf/ucos_ii.a(os_core.o)
+_OSPrioHighRdy      0x4               /courses/TDDI11/sw/lib/elf/ucos_ii.a(os_core.o)
+_OSTCBPrioTbl       0x100             /courses/TDDI11/sw/lib/elf/ucos_ii.a(os_core.o)
+_OSTickDOSCtr       0x4               /courses/TDDI11/sw/lib/elf/ucos_ii.a(os_cpu_c.o)
+_OSLockNesting      0x4               /courses/TDDI11/sw/lib/elf/ucos_ii.a(os_core.o)
+_OSTime             0x4               /courses/TDDI11/sw/lib/elf/ucos_ii.a(os_core.o)
+_OSFlagTbl          0x3c              /courses/TDDI11/sw/lib/elf/ucos_ii.a(os_core.o)
+_OSTCBTbl           0xe00             /courses/TDDI11/sw/lib/elf/ucos_ii.a(os_core.o)
+_OSIntNesting       0x4               /courses/TDDI11/sw/lib/elf/ucos_ii.a(os_core.o)
+_OSEventFreeList    0x4               /courses/TDDI11/sw/lib/elf/ucos_ii.a(os_core.o)
+_OSMemFreeList      0x4               /courses/TDDI11/sw/lib/elf/ucos_ii.a(os_core.o)
+_OSFlagFreeList     0x4               /courses/TDDI11/sw/lib/elf/ucos_ii.a(os_core.o)
+
+Discarded input sections
+
+ .eh_frame      0x0000000000000000       0x64 main.o
+ .eh_frame      0x0000000000000000       0x78 serial.o
+ .eh_frame      0x0000000000000000       0x74 inbound.o
+ .eh_frame      0x0000000000000000       0x54 outbound.o
+ .eh_frame      0x0000000000000000       0xd8 elapsed.o
+ .eh_frame      0x0000000000000000       0x74 packet.o
+
+Memory Configuration
+
+Name             Origin             Length             Attributes
+conventional     0x0000000000000000 0x00000000000a0000
+reserved         0x00000000000a0000 0x0000000000060000
+extended         0x0000000000100000 0x00000000fff00000
+*default*        0x0000000000000000 0xffffffffffffffff
+
+Linker script and memory map
+
+LOAD main.o
+LOAD serial.o
+LOAD inbound.o
+LOAD outbound.o
+LOAD elapsed.o
+LOAD packet.o
+LOAD isr.o
+LOAD /courses/TDDI11/sw/lib/elf/ucos_ii.a
+LOAD /courses/TDDI11/sw/lib/elf/libepc.a
+LOAD /courses/TDDI11/sw/lib/elf/djgpp/libc.a
+LOAD /courses/TDDI11/sw/i386-elf-gcc-7.3.0/lib/gcc/i386-elf/7.3.0/libgcc.a
+
+.text           0x0000000000000000     0x6250
+                0x0000000000000000                text_frst = .
+ *(.start)
+ .start         0x0000000000000000        0x8 /courses/TDDI11/sw/lib/elf/libepc.a(init-cpu.o)
+                0x0000000000000000                start
+ *(.init)
+ *(.text)
+ .text          0x0000000000000008       0xe5 main.o
+                0x0000000000000033                main
+ .text          0x00000000000000ed      0x17e serial.o
+                0x00000000000000ed                SerialGet
+                0x000000000000010c                SerialPut
+                0x000000000000015b                SerialInit
+ .text          0x000000000000026b       0xb2 inbound.o
+                0x0000000000000294                PostText
+                0x00000000000002b6                InboundText
+ .text          0x000000000000031d      0x191 outbound.o
+                0x000000000000031d                OutboundThread
+ .text          0x00000000000004ae      0x2ef elapsed.o
+                0x00000000000004d7                PostTime
+                0x00000000000004f9                InboundTime
+                0x0000000000000575                ElapsedLocal
+ .text          0x000000000000079d      0x15a packet.o
+                0x000000000000079d                PacketInit
+                0x00000000000007b8                ReceivePackets
+                0x000000000000086a                SendPacket
+ *fill*         0x00000000000008f7        0x9 
+ .text          0x0000000000000900       0x6d isr.o
+                0x0000000000000900                OSKeyboardISR
+                0x0000000000000935                OSSerialISR
+ *fill*         0x000000000000096d        0x3 
+ .text          0x0000000000000970      0xac0 /courses/TDDI11/sw/lib/elf/ucos_ii.a(os_core.o)
+                0x0000000000000970                _OSMapTbl
+                0x0000000000000978                _OSUnMapTbl
+                0x0000000000000a78                OSInit
+                0x0000000000000c40                _OSIntEnter
+                0x0000000000000c5c                _OSIntExit
+                0x0000000000000d04                _OSSchedLock
+                0x0000000000000d28                _OSSchedUnlock
+                0x0000000000000d6c                OSStart
+                0x0000000000000df4                _OSTimeTick
+                0x0000000000000eb4                _OSVersion
+                0x0000000000000ec4                _OS_Dummy
+                0x0000000000000ecc                _OS_EventTaskRdy
+                0x0000000000001010                _OS_EventTaskWait
+                0x00000000000010d4                _OS_EventTO
+                0x0000000000001160                _OS_EventWaitListInit
+                0x00000000000011c0                _OS_Sched
+                0x0000000000001250                _OS_TaskIdle
+                0x000000000000126c                _OS_TCBInit
+ .text          0x0000000000001430      0xb60 /courses/TDDI11/sw/lib/elf/ucos_ii.a(os_flag.o)
+                0x0000000000001430                _OSFlagAccept
+                0x00000000000015e8                _OSFlagCreate
+                0x0000000000001654                _OSFlagDel
+                0x0000000000001788                _OSFlagPend
+                0x0000000000001ad8                _OSFlagPost
+                0x0000000000001cdc                _OSFlagQuery
+                0x0000000000001e24                _OS_FlagInit
+                0x0000000000001f1c                _OS_FlagUnlink
+ .text          0x0000000000001f90      0x320 /courses/TDDI11/sw/lib/elf/ucos_ii.a(os_mem.o)
+                0x0000000000001f90                _OSMemCreate
+                0x00000000000020ac                _OSMemGet
+                0x0000000000002104                _OSMemPut
+                0x0000000000002164                _OSMemQuery
+                0x00000000000021e8                _OS_MemInit
+ .text          0x00000000000022b0      0x8b0 /courses/TDDI11/sw/lib/elf/ucos_ii.a(os_q.o)
+                0x00000000000022b0                _OSQAccept
+                0x000000000000232c                OSQCreate
+                0x000000000000243c                _OSQDel
+                0x0000000000002594                _OSQFlush
+                0x00000000000025ec                OSQPend
+                0x0000000000002728                OSQPost
+                0x00000000000027ec                _OSQPostFront
+                0x00000000000028b4                _OSQPostOpt
+                0x00000000000029ec                _OSQQuery
+                0x0000000000002b04                _OS_QInit
+ .text          0x0000000000002b60      0x410 /courses/TDDI11/sw/lib/elf/ucos_ii.a(os_sem.o)
+                0x0000000000002b60                _OSSemAccept
+                0x0000000000002bac                OSSemCreate
+                0x0000000000002c1c                _OSSemDel
+                0x0000000000002d38                OSSemPend
+                0x0000000000002e18                OSSemPost
+                0x0000000000002e8c                _OSSemQuery
+ .text          0x0000000000002f70      0xae0 /courses/TDDI11/sw/lib/elf/ucos_ii.a(os_task.o)
+                0x0000000000002f70                _OSTaskChangePrio
+                0x000000000000322c                OSTaskCreate
+                0x0000000000003314                _OSTaskCreateExt
+                0x0000000000003454                _OSTaskDel
+                0x0000000000003684                _OSTaskDelReq
+                0x0000000000003714                _OSTaskResume
+                0x00000000000037dc                _OSTaskStkChk
+                0x00000000000038c4                _OSTaskSuspend
+                0x00000000000039cc                _OSTaskQuery
+ .text          0x0000000000003a50      0x2e0 /courses/TDDI11/sw/lib/elf/ucos_ii.a(os_time.o)
+                0x0000000000003a50                OSTimeDly
+                0x0000000000003adc                _OSTimeDlyHMSM
+                0x0000000000003c30                _OSTimeDlyResume
+                0x0000000000003cf4                OSTimeGet
+                0x0000000000003d14                _OSTimeSet
+ .text          0x0000000000003d30       0x68 /courses/TDDI11/sw/lib/elf/ucos_ii.a(os_cpu_a.o)
+                0x0000000000003d30                _OSStartHighRdy
+                0x0000000000003d45                _OSCtxSw
+                0x0000000000003d4d                _OSIntCtxSw
+                0x0000000000003d6a                _OSTickISR
+ .text          0x0000000000003d98      0x190 /courses/TDDI11/sw/lib/elf/ucos_ii.a(os_cpu_c.o)
+                0x0000000000003d98                _OSTaskStkInit
+                0x0000000000003edc                _OSInitHookBegin
+                0x0000000000003ee4                _OSInitHookEnd
+                0x0000000000003eec                _OSTaskCreateHook
+                0x0000000000003ef4                _OSTaskDelHook
+                0x0000000000003efc                _OSTaskSwHook
+                0x0000000000003f04                _OSTaskStatHook
+                0x0000000000003f0c                _OSTCBInitHook
+                0x0000000000003f14                _OSTimeTickHook
+                0x0000000000003f1c                _OSTaskIdleHook
+ .text          0x0000000000003f28       0x50 /courses/TDDI11/sw/lib/elf/libepc.a(init-cpu.o)
+                0x0000000000003f28                Init_CPU
+ .text          0x0000000000003f78      0x5a0 /courses/TDDI11/sw/lib/elf/libepc.a(init-idt.o)
+                0x0000000000004388                IRQ2INT
+                0x000000000000439c                _GetISR
+                0x00000000000043e0                SetISR
+                0x0000000000004418                Init_IDT
+ .text          0x0000000000004518      0x110 /courses/TDDI11/sw/lib/elf/libepc.a(init-crt.o)
+                0x0000000000004518                Init_CRT
+                0x000000000000454c                _LastMemoryAddress
+ .text          0x0000000000004628      0x6e0 /courses/TDDI11/sw/lib/elf/libepc.a(display.o)
+                0x0000000000004628                SetCursorVisible
+                0x00000000000046ac                _GetCursorRow
+                0x00000000000046c0                _GetCursorCol
+                0x00000000000046d4                SetCursorPosition
+                0x0000000000004778                ClearScreen
+                0x00000000000047e0                _PutAttb
+                0x000000000000482c                _PutCharAt
+                0x0000000000004858                _PutChar
+                0x00000000000048dc                PutString
+                0x0000000000004914                PutUnsigned
+                0x000000000000494c                FormatUnsigned
+                0x00000000000049dc                Unsigned2Ascii
+                0x0000000000004a60                _Cell
+ .text          0x0000000000004d08       0xe0 /courses/TDDI11/sw/lib/elf/libepc.a(init8259.o)
+                0x0000000000004d08                Init8259
+ .text          0x0000000000004de8       0xb0 /courses/TDDI11/sw/lib/elf/libepc.a(init8253.o)
+                0x0000000000004de8                Init8253
+ .text          0x0000000000004e98      0x660 /courses/TDDI11/sw/lib/elf/libepc.a(heap.o)
+                0x0000000000004e98                malloc
+                0x0000000000004f4c                free
+ .text          0x00000000000054f8      0x600 /courses/TDDI11/sw/lib/elf/libepc.a(window.o)
+                0x00000000000054fc                WindowCreate
+                0x00000000000055e4                _WindowErase
+                0x0000000000005654                WindowSelect
+                0x0000000000005678                WindowSetCursor
+                0x00000000000056a8                WindowPutChar
+                0x0000000000005788                WindowPutString
+ .text          0x0000000000005af8       0x98 /courses/TDDI11/sw/lib/elf/libepc.a(checkcpu.o)
+                0x0000000000005af8                Check_CPU
+ .text          0x0000000000005b90       0x60 /courses/TDDI11/sw/lib/elf/libepc.a(io.o)
+                0x0000000000005b90                TimerTickISR
+                0x0000000000005b9c                KeyboardISR
+                0x0000000000005bbc                ISR_PIC1
+                0x0000000000005bc3                ISR_PIC2
+                0x0000000000005bcc                ___main
+                0x0000000000005bcd                inportb
+                0x0000000000005bd7                outportb
+                0x0000000000005be9                _exit
+ .text          0x0000000000005bf0      0x570 /courses/TDDI11/sw/lib/elf/libepc.a(keyboard.o)
+                0x0000000000005bf0                ScanCodeRdy
+                0x0000000000005c14                GetScanCode
+                0x0000000000005c44                ScanCode2Ascii
+                0x0000000000005e04                SetsKybdState
+                0x0000000000005ff4                Enqueue
+ .text          0x0000000000006160        0x0 /courses/TDDI11/sw/lib/elf/djgpp/libc.a(ct_flags.o)
+ .text          0x0000000000006160       0x1c /courses/TDDI11/sw/lib/elf/djgpp/libc.a(memcpy.o)
+                0x0000000000006160                _memcpy
+ .text          0x000000000000617c       0x40 /courses/TDDI11/sw/lib/elf/djgpp/libc.a(memset.o)
+                0x000000000000617c                _memset
+ .text          0x00000000000061bc       0x28 /courses/TDDI11/sw/lib/elf/djgpp/libc.a(strcpy.o)
+                0x00000000000061bc                _strcpy
+ .text          0x00000000000061e4       0x24 /courses/TDDI11/sw/lib/elf/djgpp/libc.a(strlen.o)
+                0x00000000000061e4                _strlen
+ .text          0x0000000000006208       0x10 /courses/TDDI11/sw/lib/elf/djgpp/libc.a(disable.o)
+                0x0000000000006208                disable
+ .text          0x0000000000006218       0x10 /courses/TDDI11/sw/lib/elf/djgpp/libc.a(enable.o)
+                0x0000000000006218                enable
+ .text          0x0000000000006228       0x28 /courses/TDDI11/sw/lib/elf/djgpp/libc.a(djmd.o)
+                0x0000000000006228                ___dj_movedata
+                0x000000000000624f                text_last = (. - 0x1)
+
+.data           0x0000000000006250      0x8ea
+                0x0000000000006250                data_frst = .
+ *(.data)
+ .data          0x0000000000006250        0x0 main.o
+ .data          0x0000000000006250        0x0 serial.o
+ .data          0x0000000000006250        0x0 inbound.o
+ .data          0x0000000000006250        0x1 outbound.o
+ *fill*         0x0000000000006251        0x3 
+ .data          0x0000000000006254        0xb elapsed.o
+ .data          0x000000000000625f        0x0 packet.o
+ *fill*         0x000000000000625f        0x1 
+ .data          0x0000000000006260        0x0 isr.o
+ .data          0x0000000000006260        0x0 /courses/TDDI11/sw/lib/elf/ucos_ii.a(os_core.o)
+ .data          0x0000000000006260        0x0 /courses/TDDI11/sw/lib/elf/ucos_ii.a(os_flag.o)
+ .data          0x0000000000006260        0x0 /courses/TDDI11/sw/lib/elf/ucos_ii.a(os_mem.o)
+ .data          0x0000000000006260        0x0 /courses/TDDI11/sw/lib/elf/ucos_ii.a(os_q.o)
+ .data          0x0000000000006260        0x0 /courses/TDDI11/sw/lib/elf/ucos_ii.a(os_sem.o)
+ .data          0x0000000000006260        0x0 /courses/TDDI11/sw/lib/elf/ucos_ii.a(os_task.o)
+ .data          0x0000000000006260        0x0 /courses/TDDI11/sw/lib/elf/ucos_ii.a(os_time.o)
+ .data          0x0000000000006260        0x0 /courses/TDDI11/sw/lib/elf/ucos_ii.a(os_cpu_a.o)
+ .data          0x0000000000006260       0x10 /courses/TDDI11/sw/lib/elf/ucos_ii.a(os_cpu_c.o)
+ .data          0x0000000000006270       0x20 /courses/TDDI11/sw/lib/elf/libepc.a(init-cpu.o)
+                0x000000000000628e                code_selector
+ .data          0x0000000000006290       0x90 /courses/TDDI11/sw/lib/elf/libepc.a(init-idt.o)
+ .data          0x0000000000006320       0x10 /courses/TDDI11/sw/lib/elf/libepc.a(init-crt.o)
+ .data          0x0000000000006330       0x30 /courses/TDDI11/sw/lib/elf/libepc.a(display.o)
+ .data          0x0000000000006360        0x0 /courses/TDDI11/sw/lib/elf/libepc.a(init8259.o)
+ .data          0x0000000000006360        0x0 /courses/TDDI11/sw/lib/elf/libepc.a(init8253.o)
+ .data          0x0000000000006360       0x10 /courses/TDDI11/sw/lib/elf/libepc.a(heap.o)
+ .data          0x0000000000006370        0x0 /courses/TDDI11/sw/lib/elf/libepc.a(window.o)
+ .data          0x0000000000006370        0xc /courses/TDDI11/sw/lib/elf/libepc.a(io.o)
+                0x0000000000006370                msec
+                0x0000000000006374                old_tick_isr
+                0x0000000000006378                old_kybd_isr
+ .data          0x000000000000637c      0x5a0 /courses/TDDI11/sw/lib/elf/libepc.a(keyboard.o)
+ .data          0x000000000000691c      0x204 /courses/TDDI11/sw/lib/elf/djgpp/libc.a(ct_flags.o)
+                0x000000000000691c                __dj_ctype_flags
+ .data          0x0000000000006b20        0x0 /courses/TDDI11/sw/lib/elf/djgpp/libc.a(memcpy.o)
+ .data          0x0000000000006b20        0x0 /courses/TDDI11/sw/lib/elf/djgpp/libc.a(memset.o)
+ .data          0x0000000000006b20        0x0 /courses/TDDI11/sw/lib/elf/djgpp/libc.a(strcpy.o)
+ .data          0x0000000000006b20        0x0 /courses/TDDI11/sw/lib/elf/djgpp/libc.a(strlen.o)
+ .data          0x0000000000006b20        0x0 /courses/TDDI11/sw/lib/elf/djgpp/libc.a(disable.o)
+ .data          0x0000000000006b20        0x0 /courses/TDDI11/sw/lib/elf/djgpp/libc.a(enable.o)
+ .data          0x0000000000006b20        0x0 /courses/TDDI11/sw/lib/elf/djgpp/libc.a(djmd.o)
+ *(.rodata)
+ .rodata        0x0000000000006b20        0x7 inbound.o
+ .rodata        0x0000000000006b27        0x6 outbound.o
+ .rodata        0x0000000000006b2d        0xd elapsed.o
+ *(.rodata.str1.1)
+ *(.rodata.str1.32)
+                0x0000000000006b39                data_last = (. - 0x1)
+
+.bss            0x0000000000006b40     0x2354
+                0x0000000000006b40                bss_frst = .
+ *(.bss)
+ .bss           0x0000000000006b40        0x0 main.o
+ .bss           0x0000000000006b40       0x70 serial.o
+                0x0000000000006b40                com1_queue
+ *fill*         0x0000000000006bb0       0x10 
+ .bss           0x0000000000006bc0       0x70 inbound.o
+ *fill*         0x0000000000006c30       0x10 
+ .bss           0x0000000000006c40       0x70 outbound.o
+                0x0000000000006c40                kybd_queue
+ *fill*         0x0000000000006cb0       0x10 
+ .bss           0x0000000000006cc0       0x80 elapsed.o
+ .bss           0x0000000000006d40        0x0 packet.o
+ .bss           0x0000000000006d40        0x0 /courses/TDDI11/sw/lib/elf/ucos_ii.a(os_core.o)
+ .bss           0x0000000000006d40        0x0 /courses/TDDI11/sw/lib/elf/ucos_ii.a(os_flag.o)
+ .bss           0x0000000000006d40        0x0 /courses/TDDI11/sw/lib/elf/ucos_ii.a(os_mem.o)
+ .bss           0x0000000000006d40        0x0 /courses/TDDI11/sw/lib/elf/ucos_ii.a(os_q.o)
+ .bss           0x0000000000006d40        0x0 /courses/TDDI11/sw/lib/elf/ucos_ii.a(os_sem.o)
+ .bss           0x0000000000006d40        0x0 /courses/TDDI11/sw/lib/elf/ucos_ii.a(os_task.o)
+ .bss           0x0000000000006d40        0x0 /courses/TDDI11/sw/lib/elf/ucos_ii.a(os_time.o)
+ .bss           0x0000000000006d40        0x0 /courses/TDDI11/sw/lib/elf/ucos_ii.a(os_cpu_c.o)
+ .bss           0x0000000000006d40      0x800 /courses/TDDI11/sw/lib/elf/libepc.a(init-idt.o)
+ .bss           0x0000000000007540        0x0 /courses/TDDI11/sw/lib/elf/libepc.a(init-crt.o)
+ .bss           0x0000000000007540        0x8 /courses/TDDI11/sw/lib/elf/libepc.a(display.o)
+ .bss           0x0000000000007548        0x0 /courses/TDDI11/sw/lib/elf/libepc.a(init8259.o)
+ .bss           0x0000000000007548        0x0 /courses/TDDI11/sw/lib/elf/libepc.a(init8253.o)
+ .bss           0x0000000000007548        0x0 /courses/TDDI11/sw/lib/elf/libepc.a(heap.o)
+ .bss           0x0000000000007548        0x0 /courses/TDDI11/sw/lib/elf/libepc.a(window.o)
+ .bss           0x0000000000007548       0x34 /courses/TDDI11/sw/lib/elf/libepc.a(keyboard.o)
+ .bss           0x000000000000757c        0x0 /courses/TDDI11/sw/lib/elf/djgpp/libc.a(ct_flags.o)
+ .bss           0x000000000000757c        0x0 /courses/TDDI11/sw/lib/elf/djgpp/libc.a(memcpy.o)
+ .bss           0x000000000000757c        0x0 /courses/TDDI11/sw/lib/elf/djgpp/libc.a(memset.o)
+ .bss           0x000000000000757c        0x0 /courses/TDDI11/sw/lib/elf/djgpp/libc.a(strcpy.o)
+ .bss           0x000000000000757c        0x0 /courses/TDDI11/sw/lib/elf/djgpp/libc.a(strlen.o)
+ .bss           0x000000000000757c        0x0 /courses/TDDI11/sw/lib/elf/djgpp/libc.a(disable.o)
+ .bss           0x000000000000757c        0x0 /courses/TDDI11/sw/lib/elf/djgpp/libc.a(enable.o)
+ .bss           0x000000000000757c        0x0 /courses/TDDI11/sw/lib/elf/djgpp/libc.a(djmd.o)
+ *(COMMON)
+ COMMON         0x000000000000757c        0x4 packet.o
+                0x000000000000757c                sendPacketSema
+ COMMON         0x0000000000007580     0x190c /courses/TDDI11/sw/lib/elf/ucos_ii.a(os_core.o)
+                0x0000000000007580                _OSTaskCtr
+                0x0000000000007584                _OSTCBCur
+                0x0000000000007588                _OSCtxSwCtr
+                0x000000000000758c                _OSTCBList
+                0x0000000000007590                _OSTCBHighRdy
+                0x0000000000007594                _OSQTbl
+                0x000000000000760c                _OSRdyTbl
+                0x0000000000007614                _OSTaskIdleStk
+                0x0000000000007e14                _OSEventTbl
+                0x0000000000007eb4                _OSTCBFreeList
+                0x0000000000007eb8                _OSRdyGrp
+                0x0000000000007ebc                _OSIntExitY
+                0x0000000000007ec0                _OSPrioCur
+                0x0000000000007ec4                _OSQFreeList
+                0x0000000000007ec8                _OSIdleCtr
+                0x0000000000007ecc                _OSRunning
+                0x0000000000007ed0                _OSMemTbl
+                0x0000000000007f34                _OSPrioHighRdy
+                0x0000000000007f38                _OSTCBPrioTbl
+                0x0000000000008038                _OSLockNesting
+                0x000000000000803c                _OSTime
+                0x0000000000008040                _OSFlagTbl
+                0x000000000000807c                _OSTCBTbl
+                0x0000000000008e7c                _OSIntNesting
+                0x0000000000008e80                _OSEventFreeList
+                0x0000000000008e84                _OSMemFreeList
+                0x0000000000008e88                _OSFlagFreeList
+ COMMON         0x0000000000008e8c        0x8 /courses/TDDI11/sw/lib/elf/ucos_ii.a(os_cpu_c.o)
+                0x0000000000008e8c                _OldTickISR
+                0x0000000000008e90                _OSTickDOSCtr
+                0x0000000000008e93                bss_last = (. - 0x1)
+
+/DISCARD/
+ *(.eh_frame)
+                0x0000000000008e94                stack_frst = (bss_last + 0x1)
+                0x0000000000010e93                stack_last = (bss_last + 0x8000)
+                0x0000000000010e94                heap_frst = (stack_last + 0x1)
+OUTPUT(embedded.bin binary)
+
+.debug_info     0x0000000000000000     0x2aec
+ .debug_info    0x0000000000000000      0x657 main.o
+ .debug_info    0x0000000000000657      0x6b8 serial.o
+ .debug_info    0x0000000000000d0f      0x72b inbound.o
+ .debug_info    0x000000000000143a      0x7a7 outbound.o
+ .debug_info    0x0000000000001be1      0x859 elapsed.o
+ .debug_info    0x000000000000243a      0x6b2 packet.o
+
+.debug_abbrev   0x0000000000000000      0x89e
+ .debug_abbrev  0x0000000000000000      0x12a main.o
+ .debug_abbrev  0x000000000000012a      0x15d serial.o
+ .debug_abbrev  0x0000000000000287      0x178 inbound.o
+ .debug_abbrev  0x00000000000003ff      0x173 outbound.o
+ .debug_abbrev  0x0000000000000572      0x1b9 elapsed.o
+ .debug_abbrev  0x000000000000072b      0x173 packet.o
+
+.debug_aranges  0x0000000000000000       0xc0
+ .debug_aranges
+                0x0000000000000000       0x20 main.o
+ .debug_aranges
+                0x0000000000000020       0x20 serial.o
+ .debug_aranges
+                0x0000000000000040       0x20 inbound.o
+ .debug_aranges
+                0x0000000000000060       0x20 outbound.o
+ .debug_aranges
+                0x0000000000000080       0x20 elapsed.o
+ .debug_aranges
+                0x00000000000000a0       0x20 packet.o
+
+.debug_line     0x0000000000000000      0x564
+ .debug_line    0x0000000000000000       0xc5 main.o
+ .debug_line    0x00000000000000c5       0xe2 serial.o
+ .debug_line    0x00000000000001a7       0xaa inbound.o
+ .debug_line    0x0000000000000251      0x127 outbound.o
+ .debug_line    0x0000000000000378      0x118 elapsed.o
+ .debug_line    0x0000000000000490       0xd4 packet.o
+
+.debug_str      0x0000000000000000     0x1e6e
+ .debug_str     0x0000000000000000      0x4da main.o
+ .debug_str     0x00000000000004da      0x502 serial.o
+ .debug_str     0x00000000000009dc      0x4f4 inbound.o
+ .debug_str     0x0000000000000ed0      0x576 outbound.o
+ .debug_str     0x0000000000001446      0x54d elapsed.o
+ .debug_str     0x0000000000001993      0x4db packet.o
+
+.comment        0x0000000000000000       0x6c
+ .comment       0x0000000000000000       0x12 main.o
+ .comment       0x0000000000000012       0x12 serial.o
+ .comment       0x0000000000000024       0x12 inbound.o
+ .comment       0x0000000000000036       0x12 outbound.o
+ .comment       0x0000000000000048       0x12 elapsed.o
+ .comment       0x000000000000005a       0x12 packet.o
diff --git a/chap7/main.c b/chap7/main.c
new file mode 100644
index 0000000..5e843c4
--- /dev/null
+++ b/chap7/main.c
@@ -0,0 +1,45 @@
+#include <os_cpu.h>
+#include <os_cfg.h>
+#include <ucos_ii.h> /* os_c??.h must be included before ! */
+#include <libepc.h>
+#include <dos.h>
+
+#include "inbound.h"
+#include "elapsed.h"
+#include "packet.h"
+
+#define	STACK_SIZE	1000
+
+extern void OutboundThread() ;
+
+PRIVATE OS_STK *CreateStack(void)
+{
+  OS_STK *top = (OS_STK *) malloc(STACK_SIZE) + STACK_SIZE ;
+
+  if (!top)
+  {
+    for (;;)
+      ;
+  }
+  return top ;
+}
+
+int main()
+{
+  ClearScreen(0x07) ;
+  SetCursorVisible(TRUE) ;
+
+
+  OSInit() ;
+
+  PacketInit(); //Init sema for sendPacket
+
+  OSTaskCreate(ReceivePackets,	NULL, CreateStack(), 0) ;
+  OSTaskCreate(InboundTime,	NULL, CreateStack(), 1) ;
+  OSTaskCreate(InboundText,	NULL, CreateStack(), 2) ;
+  OSTaskCreate(OutboundThread,	NULL, CreateStack(), 3) ;
+  OSTaskCreate(ElapsedLocal,	NULL, CreateStack(), 4) ;
+  OSStart() ;
+
+  return 0 ;
+}
diff --git a/chap7/main.o b/chap7/main.o
new file mode 100644
index 0000000000000000000000000000000000000000..fe35320b136ef763b396fa414a0555c19a15540f
GIT binary patch
literal 6396
zcmb<-^>JflWMqH=Mh0dE1doA%MGPWi0;V(=gc*bwLOY)}zmaHu!;|rXnStTOpa1{=
zHy;sTUBJ)4(CPZ6x%LY~DbwqJ-L79w9`5x~VQGHy;eX+u(9WlU&2Lzm-|%Fy!?b`n
zj4%$Eh7hy=|No!G5Rk=?0kRb=)_g?ZMGHun5koi^B+P^%90n3*#t^m#3A11bgFLYV
zWLvlIpOd|be+~z;F)*-z1Q=KtnV1+Dc(j=q7@k3c<|$Z$fq|)=nSp^x!GM8*ftis*
z2gC_xU|?WU1c|VigN4~PfkX;GgmNTEgo*t!BLf376Ke!Wy*?uY1Cwew0|NtVI!Km<
zeI7`bg%uPH%q%SbnHU(DIaoA6${v9X(E_Pu+sDGdz?2WNfoUH|TLDNjy8z3Tp9~BP
z992vV3@lecvJ4y(K<sNEHY3LjW(Ee9>wX|(IA$_1FtFSJDQDr(2eEJd25DvBWZ?oS
z=4NDI;09a8z$5_Dc54d*0|Pq`%Ts4Y1_q8xAfaa<g$x|0Sr`~to<mGZ1=;puCD<gU
zRUkz##TXeF*d<ur&Ijr90m;7usb%2U#mK<G@*c!y;Q$3F%LfpfgX1{JH6KB29u6yz
z5uZTj32;b(?D-6`Q-pyDlrC9*_%Sjt@QAPoGJa)bVBi%1DG*`=>15yy0+}uh=CJVE
zfjA<Jpg`i_tpS-S3g+<eP6o+{fjI&Ud<h_)IO8ft1_u5Q3=9ksEH;c;ObiUXXF=|^
z1+y7=l|csBF&2Qtco%~>_FxVNZ!5^@4qy%suMNmKj$n=eFCR$8i4hd`BD`Ng9A_{`
zj6r~fk%@spfCc1iJ|mEsE{q@%es4ww1`C!V#wpAU47?5?iDEFDfp;6o&N8UqbV1gX
zgJn2)3qT&I0DFgr_Yg=~CD<APUNewP6__K$I~!zLE#oX^1_lw{Xb`6k%#q+t2btE$
zxPX~~L58;wB-0AEM}hYZ$h0oTWy}l=D!g7GP7fm}Vl;R;K}Pq3jn?6n192uWf}%-}
zw*h3@L@-C6Hxk5|4CWZ{CV)6oz#K!~H6VMYf;mRK+d!OYV2&}b5XiKdjH(O_3?>W$
zERz{PA=Ly9FHi~<U;(8nzSAJr%w`0M3w{A<UjhyRK~N56Sq}CL7fAU7W@w@oW)K9Y
z`4x;8m>C$jKuP)!Opb*?@Da$oHH;u13%Y>fYAvG(3&>`WLP2Mc(|3R!C|C+&?}V^7
zfY`gCY>>P6LfD{O#Ig^<4gje+0AZVhTzZfZl<frDK<vX{e+u3Ov5!L3oCKM39PAq|
zkmnb(Ffa&#4E)c`AlMCZ+DXPqEDQ{SS3sK1FzyCBa}6^CgJ2%W6KBC9g3m#+=OAn=
zkgoG!HWx_wR~BfX7%>PQ0I9pc_>_f#feUO1D^$*&L2x<9=@%IpSs54v!I|p{qb4gT
zP(XQ)3q;t%RI@M$-UQill~Et0S{cN?$ruh+UB<+~zy%_5VX8S91Yd$w++vIcsa^_l
z!#&0#1_lN$Ck6(F39JkZ!VD~}Ah}vla6DuL2??@-{PzgV7GYt{%qwAF=3obxupF#Q
zKxHB$+g*^7L#zx8Y_nJx7+AGI#WLG3W(Ec}{<W+O49qO-ZHx>IZ0R7P1*Da&A0!E3
zcCj!pu(k5AfxLJUWQHV2t_`G7bSeu21EVyEsm;K^u#16#fpLyl5;Fq>BR?p&f=V-x
z1mhg>lKcV&MnRAu)5IJG21Y?fRX$;EW<F^?K}I1q0dWRUQO3+?#cj>)Da^pYtir&}
zZO6^b$H2g%#sCswH3d^_CJZoD_L4S|3=HhTjNIHHZH&SU3>>_0Sqp9k22OqkZf*t!
zE=ERAVURSpB7>)}J~smc4^$H?NR$_<iPcjWq=`=qVg@V7R(@edW<Id_V5I^e13}_~
zP-n1u3PYSB1U4EJMT!gz3?fkHb1*Q7>M__$!ki59tAoTeCrJhdF+E0zsJf)5Fp{{q
z2?H|+$UmOKOcD$X3^Jfv3KWo_Obn(O7-01-h<gwe#SHzRplAHe$IHM7X~r-zFfi&T
z=a&{0rxxpnxVU&48tNC9>u2UA=ai<TGT@fdPsvIzC}3d7P0Y;GO9t7HUmTxYP^y;!
zs)<4Dv~&o&G&#RGJ~I=-DM;4KU|?ckNXajTFc=tEnLxUk`5DtW${3hf7&8oQ4LO8Q
zo{oy*NQc3wNG1*jMn?Z&x17Xuzx<Tc5N9U_|KPyj%&Jrd|KNBxA4m6iKYtfjkf2*p
zYN}6WaS4NeuxnXrUP(w&4ugMih_e$^5M%~iji+CTMJPi~eqOo)m?+IF&P>lsO;G^l
z5Kq4lL$go@|KNb4%zTf`^o*dCN{|hnc_0H5i?cmba#Dj!vSBs_loTNu1u_9@SaL>U
z5zL*z3<z(4oZ?<oz~CS3o0<!8XMAvoH^>eUFTXgx5X5%PD=ErMErys4G8XI|mmH8|
zLY$pkQgeb*K?*~hoq|geOBhn}OOtX^89e<$jEz9f4{>(#Oo3S9l#>k(wEW`ulH??a
z7(6iigX4W&eHr5Oi*pmR@<A>Jn+Vb2AMBf00CE*d5P@Cp2QmTTIy6a8z&V$KOagfo
z6mtPZsbviQ!Jv?HE-7Lt&d4t+Q9#k9pOK%Ns-IF?l2mGHVFpW;$r*_S<_zwBp$g81
zh6?6-#(D+{y16B#d8xLU#ujD@y19u($r(^~IxJoK2ge68_y-52RDxU%4z}QuY*0KQ
zBEc`U0+d!loSmR<1349hi$SsM?BrXV4vXNB$^uY&3o6aa%glp|LSit)*$HM+W-dro
zh_jPZW=RCZ5U0$NNC*oQBoN00LfjGJ>;ws-ki_C_P?&(7iAZkFB^ANtAn~-E{6vsT
zL-U|9;U66D8s_R3!VsU5Uz}Q0l$Q@mEx{#;MI{XIAcdwqkcU9w52B$S12aKM8WIVh
zgyme6nplz=T#}d!O4K3FPN0~D<{RJCTtBCr>|zEde}5lWM?Y{n$;<<%6L3az&I7qF
z&@~T~)*yM(JtzR;YuAbrxNrRnK<eTlc^KpfaIhk|6B0Zi+o9Q=A>P8k!W<S0sBUsh
zNkL9u;fa|gVDrGC7+jL=lwVSkp9=~Y|5A{>o_QsHsl_Fb_zOy@gvTB<rl8RT_7TL%
zo_Qs%6)5os@_Kw)PGVVp5jdqW1Sc1zrsg@8loVxxGF6DP6T}Zb`N`P`+d?vvvt9gy
zL2(I5ejvw!Lzltb+1W}#!`&}b6Oy(W7(_tDBB;Es3SwZa;b4^JVPWZDgp~B4(jFuY
zsx=uL`8ZmcoOoH&kMgjvFfeE^FfiCKFff4RKvgY+3lAfMy8tUwDT6aVb7>75({dh0
z2FIh$VAUW~5E$BF0}HS)eEbh)Knc{IE&~HI12a?xLNPP2Fn~KIP`jBx6#+yFOfoaD
zf@v7R%)ky~f@x;BZZMaDnSl$!fRfA%JWv*dVrBq!5+H04$;`kD4>J&7fPsNQ8tN8M
zI0!K?GAMu~pco{t17(9K5Z@NWfMO6I)S88I89;o07zfm_W?*25L*r+o@j*>bm=H*R
zGmHb(KM9RLAB_)ATzbh2$k{SCF()TK87#x#oRgYZ1W9`g!Ko$ArA5X0MPZr6nV{m|
zKiD%bvxFfaF*!T61k4OdO-{`$ONEGl3jt7x1J3dco_R_6rFkhKpt1|b1{aK_B@l^>
zqSV9`2G^X#g5uN^pZw%RP^}6nYZ&-Jtq)!X22cZ(iJyT16i!S63=H8QaX|)#7!WPQ
zzyJy#P+JPzzZYR(Xac2gQ3i%~kh};31E`nHD8|4r56a&Fk{4%S*b3!?`nrq~3=C(W
z{3{?@l7WE@q>h~doI)767#IXWd@cqCQ7A15qL~;NK#eX&P6h@w5TA>I!5B(gKxr>1
z4RSxo9FV&~G^l|CqCq1pAi4^wt`SOiKxuIMii?3^3X~6uPmuamQ2t&heG*Dvh0+h9
z^jj#+18SFXF)+wOX>BNN4y9e7bU2hwhSK>^x*AHiLupXA9psJ$Q2rJueGp2YgVML5
z^b08c4N8NCbU^y~nHU&Av<#HigwkeE+8Ig*K<QX0T@Iz2p)_ce1!T@#D1Q}{-VUXY
zK<SH6`W}>i4W)lTX;7yIWR4K1F98ZKC=D800*PBf`EF1;7)mEV>0BsX1*Jg)R3Lq8
zq5Pdt`Y4os2&Ml*X--hbhKqqg8cM4}X=5mD52d}KbU2hwhSK>^x*AHiL+K?@8q`My
zx#tj+e-29Dg3{lhv=A#KUgV&(1C;iG(s@w23QA9d(u<(<b|}3MN*{&N=b`j1DE%Bt
zzk$-<p)?a4#C~BYEeEAFKr|BrgE5HaVqmZZ(M-_%%EkaLQ$d3_b3o~yi2+<bgVLG<
zC|`s61$xDmxh08740^>SMG!gz#wtq9(JKL!P<kneC5a4rNyWtsdLY4+)TGk%_{_Yt
zd<H!TJ25E<)apc%O)N^xOHW17kdv903e!+rQpBK_oS&PUnpXlbG&LhWttc@!6{&zG
zz?291i2>qQkW$c?FmjI!R@Z{+C{6|j29TdY>Ldgi7#g7U14s>MSQS*Sf(CU!d|0h3
z3F3e>KrxI9s`o+a38@3Q2c`#P1jxK_P(cdfK-~^vf<^(5-8Vy!fnftPB<?^pI?R0_
z_amEEz|O#+g(LuD1|gXZGJh5aB;G-65QeD(jr}3p>mdrU6I73a{0Fla6eTb{ApN^I
z7#NO%7*Gt8OJrbRKsGNzlmXo00GS7BX~4`Ygt`ypZ;%o7oD2-0{03r!FvvU*u0c~5
z$;ZGT1X2LSAT=P|2~`J5&LF8AJ_d#q5Ce)q_JWw8!BAxPB_R11)Y1W|1Nj?dCd@35
zz6*Q|44`ryROj)628N(%2V@p34S>`Y2rw`#2Qi=+WDbZ4(ubl>lz{;>b_S9IVVF7q
D>C6#4

literal 0
HcmV?d00001

diff --git a/chap7/makeNrun.sh b/chap7/makeNrun.sh
new file mode 100644
index 0000000..2ff6f5a
--- /dev/null
+++ b/chap7/makeNrun.sh
@@ -0,0 +1,25 @@
+#!/bin/bash
+
+clear
+echo "This script includes commands to make the project and run it"
+
+echo "clean up the directory with make clean"
+make clean
+echo "make the project with make."
+make
+echo "Guiding mtools mcopy to its configuration file"
+export MTOOLSRC=mtools.conf
+echo "Copying the binary to floppy image"
+mcopy embedded.bin a:
+echo "Duplicating the floppy image"
+cp floppy.img floppy_copy.img
+
+#echo "We assume port 50152 is free. Check below, if it is not free, select another port"
+#netstat | grep ":50152"
+
+echo "Proceeding with port 50152 on localhost=127.0.0.1"
+echo "Starting Qemu with given binary in the floppy image, as server"
+qemu-system-i386 -drive format=raw,file=floppy.img,if=floppy -serial tcp:127.0.0.1:50152,server,nowait &
+echo "Starting another Qemu with given binary in the floppy image, as client. Wait a second for server to connect"
+sleep 1
+qemu-system-i386 -drive format=raw,file=floppy_copy.img,if=floppy -serial tcp:127.0.0.1:50152 &
diff --git a/chap7/mtools.conf b/chap7/mtools.conf
new file mode 100644
index 0000000..c387b85
--- /dev/null
+++ b/chap7/mtools.conf
@@ -0,0 +1,6 @@
+MTOOLS_NO_VFAT=1
+drive a:
+      file="floppy.img"
+      fat_bits=12
+      cylinders=80 heads=2 sectors=18
+      mformat_only
diff --git a/chap7/outbound.c b/chap7/outbound.c
new file mode 100644
index 0000000..ad26d09
--- /dev/null
+++ b/chap7/outbound.c
@@ -0,0 +1,80 @@
+#include <os_cpu.h>
+#include <os_cfg.h>
+#include <ucos_ii.h> /* os_c??.h must be included before ! */
+#include <libepc.h>
+#include <ctype.h>
+#include <dos.h>
+
+#include "packet.h"
+#include "serial.h"
+
+OS_EVENT *kybd_queue = NULL ;
+void OSKeyboardISR(void) ;
+
+PRIVATE void KeyboardInit(void) ;
+
+void OutboundThread(void)
+{
+  WINDOW *local ;
+  
+  /* INITIALIZATION: Paint the local window. Create a	*/
+  /* mailbox object to receive keystroke codes from the	*/
+  /* keyboard ISR. Initialize the keyboard hardware.	*/
+  /* Point interrupt vector 33 at the keyboard ISR.	*/
+  /* Unmask the IRQ line in the 8259 PIC.			*/
+  
+  local = WindowCreate("Local", 0, 10, 0, 79) ;
+  KeyboardInit() ;
+  /* SerialInit have a guard inside to prevent multiple initializations */
+  SerialInit() ;
+ 
+  for (;;)
+  {
+    BYTE8 err, scan_code ;
+    char ascii ;
+    
+    /* Suspend this thread (let it "sleep") until a	*/
+    /* keyboard interrupt posts something to our	*/
+    /* mailbox.  But first position the cursor 	*/
+    /* at the next character position as a prompt.	*/
+    
+    WindowSelect(local) ;
+    scan_code = ((unsigned) OSQPend(kybd_queue, 0, &err)) & 0xFF ;
+    if (scan_code & 0x80)
+      continue ; /* Key up */
+    
+    /* The keyboard ISR just woke us up. scan_code	*/
+    /* is the keystroke that occurred. First check	*/
+    /* to see if it simply changes state, like caps	*/
+    /* lock, shift, ctrl, or alt.  Then convert the	*/
+    /* scancode to ascii using the current state.	*/
+    
+    if (SetsKybdState(scan_code))
+      continue ;
+    
+    ascii = ScanCode2Ascii(scan_code) & 0xFF ;
+    if (!isprint(ascii) && !iscntrl(ascii))
+      continue ;
+
+    /* Display the character in the local window.	*/
+    
+    WindowPutChar(local, ascii) ;
+    
+    SendPacket(1, &ascii, 1) ;
+    if (ascii == '\r')
+    {
+      static char linefeed = '\n' ;
+      WindowPutChar(local, linefeed) ;
+      SendPacket(1, &linefeed, 1) ;
+    }
+  }
+}
+
+PRIVATE void KeyboardInit(void)
+{
+  static void *q[20] ;
+  
+  kybd_queue = OSQCreate(q, ENTRIES(q)) ;
+  SetISR(IRQ2INT(IRQ_KYBD), OSKeyboardISR) ;
+  outportb(0x21, inportb(0x21) & ~0x02) ;
+}
diff --git a/chap7/outbound.o b/chap7/outbound.o
new file mode 100644
index 0000000000000000000000000000000000000000..2fe0e0b3de6bd98a2a59eee4ef19a5ca5f845912
GIT binary patch
literal 7724
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

literal 0
HcmV?d00001

diff --git a/chap7/packet.c b/chap7/packet.c
new file mode 100644
index 0000000..6019f24
--- /dev/null
+++ b/chap7/packet.c
@@ -0,0 +1,79 @@
+#include <os_cpu.h>
+#include <os_cfg.h>
+#include <ucos_ii.h> /* os_c??.h must be included before ! */
+#include <libepc.h>
+
+#include "inbound.h"
+#include "elapsed.h"
+#include "serial.h"
+
+OS_EVENT *sendPacketSema;
+
+void PacketInit(void)
+{
+  sendPacketSema = OSSemCreate(1);
+}
+
+void ReceivePackets(void)
+{
+  SerialInit() ;
+
+  for (;;)
+  {
+    int type, byte, bytes ;
+    BYTE8 *bfr ;
+
+    if (SerialGet() != 0xFF)
+      continue ;
+
+    switch (type = SerialGet())
+    {
+      default:
+        continue ;
+      case 1:
+      case 2:
+        break ;
+    }
+
+    bytes = SerialGet();
+    bfr = (BYTE8 *) malloc(bytes) ;
+    if (!bfr)
+    {
+      for (;;)
+        ;
+    }
+
+    for (byte = 0; byte < bytes; byte++)
+    {
+      bfr[byte] = SerialGet() ;
+    }
+    switch (type)
+    {
+      case 1:
+        PostText(bfr) ;
+        break ;
+      case 2:
+        PostTime(bfr) ;
+        break ;
+    }
+  }
+}
+
+
+void SendPacket(int type, BYTE8 *bfr, int bytes)
+{
+
+  OSSemPend(sendPacketSema, 0, NULL);
+
+  SerialPut(0xFF);
+  SerialPut((char)type);
+  SerialPut((char)bytes);
+
+  for(int i = 0; i < bytes; ++i)
+  {
+    SerialPut((char)*(bfr + i));
+  }
+
+  OSSemPost(sendPacketSema);
+
+}
diff --git a/chap7/packet.h b/chap7/packet.h
new file mode 100644
index 0000000..636ff7b
--- /dev/null
+++ b/chap7/packet.h
@@ -0,0 +1,6 @@
+
+
+void PacketInit(void);
+
+void ReceivePackets() ;
+void SendPacket(int type, BYTE8 *bfr, int bytes) ;
diff --git a/chap7/packet.o b/chap7/packet.o
new file mode 100644
index 0000000000000000000000000000000000000000..9f6ce849e1534f084b774b78e803d6d484fb5746
GIT binary patch
literal 6748
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
IKp3VD06d3ocmMzZ

literal 0
HcmV?d00001

diff --git a/chap7/serial.c b/chap7/serial.c
new file mode 100644
index 0000000..146a876
--- /dev/null
+++ b/chap7/serial.c
@@ -0,0 +1,67 @@
+#include <os_cpu.h>
+#include <os_cfg.h>
+#include <ucos_ii.h> /* os_c??.h must be included before ! */
+#include <libepc.h>
+#include <dos.h>
+#include <pc.h>
+
+#include "serial.h"
+
+void OSSerialISR(void) ;
+
+OS_EVENT *com1_queue = NULL ;
+
+BYTE8 SerialGet(void)
+{
+  char err ;
+  return ((unsigned) OSQPend(com1_queue, 0, &err)) & 0xFF ;
+}
+
+void SerialPut(char ch)
+{
+  /* This function uses programmed waiting loop I/O	*/
+  /* to output the ASCII character 'ch' to the UART.	*/
+  
+  while ((inportb(SER_LSR) & SER_LSR_THRE) == 0)
+  {
+    OSTimeDly(1) ;
+  }
+  
+  outportb(SER_THR, ch) ;
+}
+
+void SerialInit(void)
+{
+  static void *com1_q[20] ;
+  
+  if (com1_queue)
+    return ;
+  
+  com1_queue = OSQCreate(com1_q, ENTRIES(com1_q)) ;
+  
+  disable() ;
+  
+  outportb(SER_IER, 0x00) ;
+  
+  /* Setup for 38400 baud */
+  outportb(SER_LCR, SER_LCR_DLAB) ;
+  outportb(SER_DLO, 3) ;
+  outportb(SER_DHI, 0) ;
+  
+  /* 8 data bits, no parity, 1 stop bit */
+  outportb(SER_LCR, 0x03) ;
+  
+  /* Set FIFO to trigger at 14 */
+  outportb(SER_FCR, 0xC7) ;
+  
+  /* Request to send, data terminal ready, enable interrupts */
+  outportb(SER_MCR, SER_MCR_RTS|SER_MCR_DTR|SER_MCR_OUT2) ;
+  
+  /* Enable only receiver data ready interrupts */
+  outportb(SER_IER, 0x01) ;
+  
+  SetISR(IRQ2INT(IRQ_COM1_COM3), OSSerialISR) ;
+  outportb(0x21, inportb(0x21) & ~SER_MSK) ;
+  
+  enable() ;
+}
diff --git a/chap7/serial.h b/chap7/serial.h
new file mode 100644
index 0000000..f678b0e
--- /dev/null
+++ b/chap7/serial.h
@@ -0,0 +1,30 @@
+#define	BASE_PORT	0x3F8
+
+#define	SER_MSK		0x10		/* PIC mask bit for IRQ 4	*/
+#define	SER_BASE	0x3F8		/* Base port address for COM1	*/
+
+#define	SER_THR		SER_BASE	/* Transmitter Holding Register	*/
+#define	SER_RBR		SER_BASE	/* Receiver Buffer Register	*/
+#define	SER_DLO		SER_BASE	/* Baud Rate Divisor Low	*/
+#define	SER_DHI		(SER_BASE+1)	/* Baud Rate Divisor High	*/
+#define	SER_IER		(SER_BASE+1)	/* Interrupt Enable Register	*/
+#define	SER_IIR		(SER_BASE+2)	/* Interrupt Identification Reg	*/
+#define	SER_FCR		(SER_BASE+2)	/* FIFO Control Register	*/
+#define	SER_LCR		(SER_BASE+3)	/* Line Control Register	*/
+#define	SER_MCR		(SER_BASE+4)	/* Modem Control Register	*/
+#define	SER_LSR		(SER_BASE+5)	/* Line Status Register		*/
+#define	SER_MSR		(SER_BASE+6)	/* Modem Status Register	*/
+#define	SER_SCR		(SER_BASE+7)	/* Scratch Register		*/
+
+#define	SER_LSR_THRE	0x20		/* Trans. Hold. Reg. Empty	*/
+#define	SER_LSR_RBF	0x01		/* Receiver Buffer Full		*/
+
+#define	SER_LCR_DLAB	0x80		/* Divisor Latch Address Bit	*/
+
+#define	SER_MCR_DTR	0x01		/* Data Terminal Ready		*/
+#define	SER_MCR_RTS	0x02		/* Request To Send		*/
+#define	SER_MCR_OUT2	0x08		/* Interrupt Enable		*/
+
+void	SerialInit(void) ;
+BYTE8	SerialGet(void) ;
+void	SerialPut(char) ;
diff --git a/chap7/serial.o b/chap7/serial.o
new file mode 100644
index 0000000000000000000000000000000000000000..cfc547b6d9f54ae7f683cf04d3d554d54f04128c
GIT binary patch
literal 6928
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

literal 0
HcmV?d00001

-- 
GitLab