diff --git a/CONVERT.ZIP b/CONVERT.ZIP
deleted file mode 100644
index 8ad3548..0000000
Binary files a/CONVERT.ZIP and /dev/null differ
diff --git a/CONVERT/CC0 b/CONVERT/CC0
new file mode 100644
index 0000000..72cdf27
--- /dev/null
+++ b/CONVERT/CC0
@@ -0,0 +1,116 @@
+CC0 1.0 Universal
+
+Statement of Purpose
+
+The laws of most jurisdictions throughout the world automatically confer
+exclusive Copyright and Related Rights (defined below) upon the creator and
+subsequent owner(s) (each and all, an "owner") of an original work of
+authorship and/or a database (each, a "Work").
+
+Certain owners wish to permanently relinquish those rights to a Work for the
+purpose of contributing to a commons of creative, cultural and scientific
+works ("Commons") that the public can reliably and without fear of later
+claims of infringement build upon, modify, incorporate in other works, reuse
+and redistribute as freely as possible in any form whatsoever and for any
+purposes, including without limitation commercial purposes. These owners may
+contribute to the Commons to promote the ideal of a free culture and the
+further production of creative, cultural and scientific works, or to gain
+reputation or greater distribution for their Work in part through the use and
+efforts of others.
+
+For these and/or other purposes and motivations, and without any expectation
+of additional consideration or compensation, the person associating CC0 with a
+Work (the "Affirmer"), to the extent that he or she is an owner of Copyright
+and Related Rights in the Work, voluntarily elects to apply CC0 to the Work
+and publicly distribute the Work under its terms, with knowledge of his or her
+Copyright and Related Rights in the Work and the meaning and intended legal
+effect of CC0 on those rights.
+
+1. Copyright and Related Rights. A Work made available under CC0 may be
+protected by copyright and related or neighboring rights ("Copyright and
+Related Rights"). Copyright and Related Rights include, but are not limited
+to, the following:
+
+ i. the right to reproduce, adapt, distribute, perform, display, communicate,
+ and translate a Work;
+
+ ii. moral rights retained by the original author(s) and/or performer(s);
+
+ iii. publicity and privacy rights pertaining to a person's image or likeness
+ depicted in a Work;
+
+ iv. rights protecting against unfair competition in regards to a Work,
+ subject to the limitations in paragraph 4(a), below;
+
+ v. rights protecting the extraction, dissemination, use and reuse of data in
+ a Work;
+
+ vi. database rights (such as those arising under Directive 96/9/EC of the
+ European Parliament and of the Council of 11 March 1996 on the legal
+ protection of databases, and under any national implementation thereof,
+ including any amended or successor version of such directive); and
+
+ vii. other similar, equivalent or corresponding rights throughout the world
+ based on applicable law or treaty, and any national implementations thereof.
+
+2. Waiver. To the greatest extent permitted by, but not in contravention of,
+applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and
+unconditionally waives, abandons, and surrenders all of Affirmer's Copyright
+and Related Rights and associated claims and causes of action, whether now
+known or unknown (including existing as well as future claims and causes of
+action), in the Work (i) in all territories worldwide, (ii) for the maximum
+duration provided by applicable law or treaty (including future time
+extensions), (iii) in any current or future medium and for any number of
+copies, and (iv) for any purpose whatsoever, including without limitation
+commercial, advertising or promotional purposes (the "Waiver"). Affirmer makes
+the Waiver for the benefit of each member of the public at large and to the
+detriment of Affirmer's heirs and successors, fully intending that such Waiver
+shall not be subject to revocation, rescission, cancellation, termination, or
+any other legal or equitable action to disrupt the quiet enjoyment of the Work
+by the public as contemplated by Affirmer's express Statement of Purpose.
+
+3. Public License Fallback. Should any part of the Waiver for any reason be
+judged legally invalid or ineffective under applicable law, then the Waiver
+shall be preserved to the maximum extent permitted taking into account
+Affirmer's express Statement of Purpose. In addition, to the extent the Waiver
+is so judged Affirmer hereby grants to each affected person a royalty-free,
+non transferable, non sublicensable, non exclusive, irrevocable and
+unconditional license to exercise Affirmer's Copyright and Related Rights in
+the Work (i) in all territories worldwide, (ii) for the maximum duration
+provided by applicable law or treaty (including future time extensions), (iii)
+in any current or future medium and for any number of copies, and (iv) for any
+purpose whatsoever, including without limitation commercial, advertising or
+promotional purposes (the "License"). The License shall be deemed effective as
+of the date CC0 was applied by Affirmer to the Work. Should any part of the
+License for any reason be judged legally invalid or ineffective under
+applicable law, such partial invalidity or ineffectiveness shall not
+invalidate the remainder of the License, and in such case Affirmer hereby
+affirms that he or she will not (i) exercise any of his or her remaining
+Copyright and Related Rights in the Work or (ii) assert any associated claims
+and causes of action with respect to the Work, in either case contrary to
+Affirmer's express Statement of Purpose.
+
+4. Limitations and Disclaimers.
+
+ a. No trademark or patent rights held by Affirmer are waived, abandoned,
+ surrendered, licensed or otherwise affected by this document.
+
+ b. Affirmer offers the Work as-is and makes no representations or warranties
+ of any kind concerning the Work, express, implied, statutory or otherwise,
+ including without limitation warranties of title, merchantability, fitness
+ for a particular purpose, non infringement, or the absence of latent or
+ other defects, accuracy, or the present or absence of errors, whether or not
+ discoverable, all to the greatest extent permissible under applicable law.
+
+ c. Affirmer disclaims responsibility for clearing rights of other persons
+ that may apply to the Work or any use thereof, including without limitation
+ any person's Copyright and Related Rights in the Work. Further, Affirmer
+ disclaims responsibility for obtaining any necessary consents, permissions
+ or other rights required for any use of the Work.
+
+ d. Affirmer understands and acknowledges that Creative Commons is not a
+ party to this document and has no duty or obligation with respect to this
+ CC0 or use of the Work.
+
+For more information, please see
+
diff --git a/CONVERT/DEC2HEX.ASM b/CONVERT/DEC2HEX.ASM
new file mode 100644
index 0000000..23fa322
--- /dev/null
+++ b/CONVERT/DEC2HEX.ASM
@@ -0,0 +1,87 @@
+cpu 8086
+org 0x3000
+
+xor dx, dx
+
+cmp byte [si], 0
+jne atoi
+
+mov ah, 2
+mov si, overflow_msg
+int 0x21
+int 0x20
+
+atoi:
+ lodsb
+
+ cmp al, 0
+ je .end
+
+ cmp al, '0'
+ jl .notdigit
+
+ cmp al, '9'
+ jg .notdigit
+
+ xor ah, ah
+ sub al, '0'
+ mov cx, ax
+
+ mov ax, dx
+ mul word [ten]
+ test dx, dx
+ jnz .overflow
+
+ mov dx, ax
+ add dx, cx
+ jc .overflow
+
+ jmp atoi
+
+ .notdigit:
+ mov byte [char_slot], al
+ mov si, notdigit_msg
+ mov ah, 2
+ int 0x21
+ int 0x20
+
+ .overflow:
+ mov si, overflow_msg
+ mov ah, 2
+ int 0x21
+ int 0x20
+
+ .end:
+
+std
+mov di, hexstring+3
+xor bh, bh
+mov cx, 4
+itoh:
+ mov bl, 0xf
+ and bl, dl
+ mov al, [hexdigits + bx]
+ stosb
+
+ shr dx, 1
+ shr dx, 1
+ shr dx, 1
+ shr dx, 1
+
+ loop itoh
+
+cld
+
+mov si, hexstring
+mov ah, 2
+int 0x21
+int 0x20
+
+notdigit_msg db "Not a digit '"
+char_slot db 0, "'", 0
+overflow_msg db "Value must be in range 0 to 65535", 0
+
+hexstring db "xxxx", 0
+
+hexdigits db "0123456789abcdef"
+ten dw 10
diff --git a/CONVERT/HEX2DEC.ASM b/CONVERT/HEX2DEC.ASM
new file mode 100644
index 0000000..70e3c83
--- /dev/null
+++ b/CONVERT/HEX2DEC.ASM
@@ -0,0 +1,101 @@
+cpu 8086
+org 0x3000
+
+xor dx, dx
+
+cmp byte [si], 0
+jne htoi
+
+mov ah, 2
+mov si, overflow_msg
+int 0x21
+int 0x20
+
+htoi:
+ lodsb
+
+ cmp al, 0
+ je .end
+
+ .digit09:
+ cmp al, '0'
+ jl .notdigit
+
+ cmp al, '9'
+ jg .digitcapital
+
+ sub al, '0'
+ jmp .digit
+
+ .digitcapital:
+ cmp al, 'A'
+ jl .notdigit
+
+ cmp al, 'F'
+ jg .digitminuscule
+
+ sub al, 'A' - 10
+ jmp .digit
+
+ .digitminuscule:
+ cmp al, 'a'
+ jl .notdigit
+
+ cmp al, 'f'
+ jg .notdigit
+
+ sub al, 'a' - 10
+ jmp .digit
+
+ .digit:
+ xor ah, ah
+
+ test dx, 0xf000
+ jnz .overflow
+
+ shl dx, 1
+ shl dx, 1
+ shl dx, 1
+ shl dx, 1
+ or dx, ax
+
+ jmp htoi
+
+ .notdigit:
+ mov byte [char_slot], al
+ mov si, notdigit_msg
+ mov ah, 2
+ int 0x21
+ int 0x20
+
+ .overflow:
+ mov si, overflow_msg
+ mov ah, 2
+ int 0x21
+ int 0x20
+
+ .end:
+
+mov si, decimalstring + 5
+mov ax, dx
+itoa:
+ dec si
+ xor dx, dx
+ div word [ten]
+ add dl, '0'
+ mov byte [si], dl
+
+ test ax, ax
+ jnz itoa
+
+mov ah, 2
+int 0x21
+int 0x20
+
+notdigit_msg db "Not a digit '"
+char_slot db 0, "'", 0
+overflow_msg db "Value must be in range 0 to ffff", 0
+
+decimalstring db "xxxxx", 0
+
+ten dw 10
diff --git a/CONVERT/README.MD b/CONVERT/README.MD
new file mode 100644
index 0000000..f253093
--- /dev/null
+++ b/CONVERT/README.MD
@@ -0,0 +1,15 @@
+CONVERT
+=======
+
+DEC2HEX and HEX2DEC convert numbers to and from decimal and hexadecimal
+bases. They were written by nortti, and are originally from their
+ettinos-programs repository, which can be found at
+https://ahti.space/git/nortti/ettinos-programs/.
+
+Syntax: DEC2HEX|HEX2DEC number
+
+***
+
+This package is part of EttinOS-extra, a collection of programs for
+EttinOS, the git repository of which can be found at
+https://ahti.space/git/crazyettin/EttinOS-extra.
diff --git a/KEYCODE.ZIP b/KEYCODE.ZIP
deleted file mode 100644
index e14769b..0000000
Binary files a/KEYCODE.ZIP and /dev/null differ
diff --git a/KEYCODE/KEYCODE.ASM b/KEYCODE/KEYCODE.ASM
new file mode 100644
index 0000000..e2d95c6
--- /dev/null
+++ b/KEYCODE/KEYCODE.ASM
@@ -0,0 +1,86 @@
+cpu 8086
+org 0x3000
+
+;Store a keycode
+;Read a keypress
+mov ah, 0x0
+int 0x16
+;Store the keycode
+mov [scan], ah
+mov [ascii], al
+
+;Print the prefix
+mov si, prefix
+mov ah, 0x0
+int 0x21
+
+;Convert the keycode to a hex string
+;Convert the scancode
+mov al, [scan]
+mov di, keycode
+call byte2hex
+;Convert the ascii value
+mov al, [ascii]
+mov di, keycode
+add di, 0x2
+call byte2hex
+
+;Print the keycode
+mov si, keycode
+mov ah, 0x2
+int 0x21
+
+;Return
+int 0x20
+
+;Data
+prefix db "0x", 0x0
+scan db 0x0
+ascii db 0x0
+keycode times 0x5 db 0x0
+
+;***
+
+;Convert the value of a byte to a hex string
+byte2hex:
+
+;Store AX, BX, CX, and SI in the stack
+push ax
+push bx
+push cx
+push si
+
+;Setup
+;Move the byte to AH
+mov ah, al
+;Set SI to the hex digit key
+mov si, key
+;Set a counter for the two hex digits
+mov cx, 0x2
+
+;Convert the byte
+;Read a nibble
+loop:
+times 0x4 rol ax, 0x1
+mov bx, ax
+;Convert the nibble to a hex digit
+and bx, 0xf
+mov bl, [si + bx]
+;Store the hex digit
+mov [di], bl
+;Convert the next nibble
+inc di
+dec cx
+jnz loop
+
+;Load SI, CX, BX, and AX from the stack
+pop si
+pop cx
+pop bx
+pop ax
+
+;Return
+ret
+
+;Data
+key db "0123456789abcdef"
diff --git a/KEYCODE/LICENSE.MD b/KEYCODE/LICENSE.MD
new file mode 100644
index 0000000..82c2d65
--- /dev/null
+++ b/KEYCODE/LICENSE.MD
@@ -0,0 +1,23 @@
+MIT license
+===========
+
+Copyright (c) 2021 CrazyEttin
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be included
+in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/KEYCODE/README.MD b/KEYCODE/README.MD
new file mode 100644
index 0000000..9147a29
--- /dev/null
+++ b/KEYCODE/README.MD
@@ -0,0 +1,10 @@
+KEYCODE
+=======
+
+KEYCODE reads a keypress and prints its BIOS keycode.
+
+***
+
+This package is part of EttinOS-extra, a collection of programs for
+EttinOS, the git repository of which can be found at
+https://ahti.space/git/crazyettin/EttinOS-extra.
diff --git a/README.MD b/README.MD
index 6a6490f..374200c 100644
--- a/README.MD
+++ b/README.MD
@@ -1,12 +1,21 @@
EttinOS-extra
=============
-EttinOS-extra is a collection of programs for EttinOS. Its git
-repository can be found at
+EttinOS-extra is a collection of programs for EttinOS organised as
+packages. Its git repository can be found at
https://ahti.space/git/crazyettin/EttinOS-extra and that of EttinOS
itself at https://ahti.space/git/crazyettin/EttinOS.
-The programs are provided as packages in the form of zip archives
-including the assembly source code and other relevant files.
-
For copyright and license information see the individual packages.
+
+Building
+--------
+
+Build dependencies:
+ * A Unix-like operating system
+ * coreutils
+ * nasm
+ * zip
+
+Running make.sh will build the programs in the collection and create a
+package in the form of a zip archive for each of the directories.
diff --git a/ROT13.ZIP b/ROT13.ZIP
deleted file mode 100644
index 01ea3d8..0000000
Binary files a/ROT13.ZIP and /dev/null differ
diff --git a/ROT13/CC0 b/ROT13/CC0
new file mode 100644
index 0000000..72cdf27
--- /dev/null
+++ b/ROT13/CC0
@@ -0,0 +1,116 @@
+CC0 1.0 Universal
+
+Statement of Purpose
+
+The laws of most jurisdictions throughout the world automatically confer
+exclusive Copyright and Related Rights (defined below) upon the creator and
+subsequent owner(s) (each and all, an "owner") of an original work of
+authorship and/or a database (each, a "Work").
+
+Certain owners wish to permanently relinquish those rights to a Work for the
+purpose of contributing to a commons of creative, cultural and scientific
+works ("Commons") that the public can reliably and without fear of later
+claims of infringement build upon, modify, incorporate in other works, reuse
+and redistribute as freely as possible in any form whatsoever and for any
+purposes, including without limitation commercial purposes. These owners may
+contribute to the Commons to promote the ideal of a free culture and the
+further production of creative, cultural and scientific works, or to gain
+reputation or greater distribution for their Work in part through the use and
+efforts of others.
+
+For these and/or other purposes and motivations, and without any expectation
+of additional consideration or compensation, the person associating CC0 with a
+Work (the "Affirmer"), to the extent that he or she is an owner of Copyright
+and Related Rights in the Work, voluntarily elects to apply CC0 to the Work
+and publicly distribute the Work under its terms, with knowledge of his or her
+Copyright and Related Rights in the Work and the meaning and intended legal
+effect of CC0 on those rights.
+
+1. Copyright and Related Rights. A Work made available under CC0 may be
+protected by copyright and related or neighboring rights ("Copyright and
+Related Rights"). Copyright and Related Rights include, but are not limited
+to, the following:
+
+ i. the right to reproduce, adapt, distribute, perform, display, communicate,
+ and translate a Work;
+
+ ii. moral rights retained by the original author(s) and/or performer(s);
+
+ iii. publicity and privacy rights pertaining to a person's image or likeness
+ depicted in a Work;
+
+ iv. rights protecting against unfair competition in regards to a Work,
+ subject to the limitations in paragraph 4(a), below;
+
+ v. rights protecting the extraction, dissemination, use and reuse of data in
+ a Work;
+
+ vi. database rights (such as those arising under Directive 96/9/EC of the
+ European Parliament and of the Council of 11 March 1996 on the legal
+ protection of databases, and under any national implementation thereof,
+ including any amended or successor version of such directive); and
+
+ vii. other similar, equivalent or corresponding rights throughout the world
+ based on applicable law or treaty, and any national implementations thereof.
+
+2. Waiver. To the greatest extent permitted by, but not in contravention of,
+applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and
+unconditionally waives, abandons, and surrenders all of Affirmer's Copyright
+and Related Rights and associated claims and causes of action, whether now
+known or unknown (including existing as well as future claims and causes of
+action), in the Work (i) in all territories worldwide, (ii) for the maximum
+duration provided by applicable law or treaty (including future time
+extensions), (iii) in any current or future medium and for any number of
+copies, and (iv) for any purpose whatsoever, including without limitation
+commercial, advertising or promotional purposes (the "Waiver"). Affirmer makes
+the Waiver for the benefit of each member of the public at large and to the
+detriment of Affirmer's heirs and successors, fully intending that such Waiver
+shall not be subject to revocation, rescission, cancellation, termination, or
+any other legal or equitable action to disrupt the quiet enjoyment of the Work
+by the public as contemplated by Affirmer's express Statement of Purpose.
+
+3. Public License Fallback. Should any part of the Waiver for any reason be
+judged legally invalid or ineffective under applicable law, then the Waiver
+shall be preserved to the maximum extent permitted taking into account
+Affirmer's express Statement of Purpose. In addition, to the extent the Waiver
+is so judged Affirmer hereby grants to each affected person a royalty-free,
+non transferable, non sublicensable, non exclusive, irrevocable and
+unconditional license to exercise Affirmer's Copyright and Related Rights in
+the Work (i) in all territories worldwide, (ii) for the maximum duration
+provided by applicable law or treaty (including future time extensions), (iii)
+in any current or future medium and for any number of copies, and (iv) for any
+purpose whatsoever, including without limitation commercial, advertising or
+promotional purposes (the "License"). The License shall be deemed effective as
+of the date CC0 was applied by Affirmer to the Work. Should any part of the
+License for any reason be judged legally invalid or ineffective under
+applicable law, such partial invalidity or ineffectiveness shall not
+invalidate the remainder of the License, and in such case Affirmer hereby
+affirms that he or she will not (i) exercise any of his or her remaining
+Copyright and Related Rights in the Work or (ii) assert any associated claims
+and causes of action with respect to the Work, in either case contrary to
+Affirmer's express Statement of Purpose.
+
+4. Limitations and Disclaimers.
+
+ a. No trademark or patent rights held by Affirmer are waived, abandoned,
+ surrendered, licensed or otherwise affected by this document.
+
+ b. Affirmer offers the Work as-is and makes no representations or warranties
+ of any kind concerning the Work, express, implied, statutory or otherwise,
+ including without limitation warranties of title, merchantability, fitness
+ for a particular purpose, non infringement, or the absence of latent or
+ other defects, accuracy, or the present or absence of errors, whether or not
+ discoverable, all to the greatest extent permissible under applicable law.
+
+ c. Affirmer disclaims responsibility for clearing rights of other persons
+ that may apply to the Work or any use thereof, including without limitation
+ any person's Copyright and Related Rights in the Work. Further, Affirmer
+ disclaims responsibility for obtaining any necessary consents, permissions
+ or other rights required for any use of the Work.
+
+ d. Affirmer understands and acknowledges that Creative Commons is not a
+ party to this document and has no duty or obligation with respect to this
+ CC0 or use of the Work.
+
+For more information, please see
+
diff --git a/ROT13/README.MD b/ROT13/README.MD
new file mode 100644
index 0000000..cd409ac
--- /dev/null
+++ b/ROT13/README.MD
@@ -0,0 +1,15 @@
+ROT13
+=====
+
+ROT13 encodes and decodes a message using the ROT13 cipher. It was
+written by nortti, and is originally from their ettinos-programs
+repository, which can be found at
+https://ahti.space/git/nortti/ettinos-programs/.
+
+Syntax: ROT13 Message to be encoded or decoded
+
+***
+
+This package is part of EttinOS-extra, a collection of programs for
+EttinOS, the git repository of which can be found at
+https://ahti.space/git/crazyettin/EttinOS-extra.
diff --git a/ROT13/ROT13.ASM b/ROT13/ROT13.ASM
new file mode 100644
index 0000000..d568871
--- /dev/null
+++ b/ROT13/ROT13.ASM
@@ -0,0 +1,38 @@
+cpu 8086
+org 0x3000
+
+mov bx, si
+
+rotloop:
+ cmp byte [bx], 0
+ jz .end
+
+ cmp byte [bx], 'A'
+ jl .next
+ cmp byte [bx], 'M'
+ jle .inc
+ cmp byte [bx], 'Z'
+ jle .dec
+
+ cmp byte [bx], 'a'
+ jl .next
+ cmp byte [bx], 'm'
+ jle .inc
+ cmp byte [bx], 'z'
+ jle .dec
+
+ .next:
+ inc bx
+ jmp short rotloop
+
+ .inc:
+ add byte [bx], 13
+ jmp short .next
+ .dec:
+ sub byte [bx], 13
+ jmp short .next
+ .end:
+
+mov ah, 2
+int 0x21
+int 0x20
diff --git a/TEMPLE.ZIP b/TEMPLE.ZIP
deleted file mode 100644
index 7d3be08..0000000
Binary files a/TEMPLE.ZIP and /dev/null differ
diff --git a/TEMPLE/LICENSE.MD b/TEMPLE/LICENSE.MD
new file mode 100644
index 0000000..a1b4d46
--- /dev/null
+++ b/TEMPLE/LICENSE.MD
@@ -0,0 +1,128 @@
+CC0 1.0 Universal license
+=========================
+
+Statement of Purpose
+
+The laws of most jurisdictions throughout the world automatically confer
+exclusive Copyright and Related Rights (defined below) upon the creator
+and subsequent owner(s) (each and all, an "owner") of an original work
+of authorship and/or a database (each, a "Work").
+
+Certain owners wish to permanently relinquish those rights to a Work for
+the purpose of contributing to a commons of creative, cultural and
+scientific works ("Commons") that the public can reliably and without
+fear of later claims of infringement build upon, modify, incorporate in
+other works, reuse and redistribute as freely as possible in any form
+whatsoever and for any purposes, including without limitation commercial
+purposes. These owners may contribute to the Commons to promote the
+ideal of a free culture and the further production of creative, cultural
+and scientific works, or to gain reputation or greater distribution for
+their Work in part through the use and efforts of others.
+
+For these and/or other purposes and motivations, and without any
+expectation of additional consideration or compensation, the person
+associating CC0 with a Work (the "Affirmer"), to the extent that he or
+she is an owner of Copyright and Related Rights in the Work, voluntarily
+elects to apply CC0 to the Work and publicly distribute the Work under
+its terms, with knowledge of his or her Copyright and Related Rights in
+the Work and the meaning and intended legal effect of CC0 on those
+rights.
+
+1. Copyright and Related Rights. A Work made available under CC0 may be
+protected by copyright and related or neighboring rights ("Copyright and
+Related Rights"). Copyright and Related Rights include, but are not
+limited to, the following:
+
+ i. the right to reproduce, adapt, distribute, perform, display,
+ communicate, and translate a Work;
+
+ ii. moral rights retained by the original author(s) and/or
+ performer(s);
+
+ iii. publicity and privacy rights pertaining to a person's image or
+ likeness depicted in a Work;
+
+ iv. rights protecting against unfair competition in regards to a Work,
+ subject to the limitations in paragraph 4(a), below;
+
+ v. rights protecting the extraction, dissemination, use and reuse of
+ data in a Work;
+
+ vi. database rights (such as those arising under Directive 96/9/EC of
+ the European Parliament and of the Council of 11 March 1996 on the
+ legal protection of databases, and under any national implementation
+ thereof, including any amended or successor version of such
+ directive); and
+
+ vii. other similar, equivalent or corresponding rights throughout the
+ world based on applicable law or treaty, and any national
+ implementations thereof.
+
+2. Waiver. To the greatest extent permitted by, but not in contravention
+of, applicable law, Affirmer hereby overtly, fully, permanently,
+irrevocably and unconditionally waives, abandons, and surrenders all of
+Affirmer's Copyright and Related Rights and associated claims and causes
+of action, whether now known or unknown (including existing as well as
+future claims and causes of action), in the Work (i) in all territories
+worldwide, (ii) for the maximum duration provided by applicable law or
+treaty (including future time extensions), (iii) in any current or
+future medium and for any number of copies, and (iv) for any purpose
+whatsoever, including without limitation commercial, advertising or
+promotional purposes (the "Waiver"). Affirmer makes the Waiver for the
+benefit of each member of the public at large and to the detriment of
+Affirmer's heirs and successors, fully intending that such Waiver shall
+not be subject to revocation, rescission, cancellation, termination, or
+any other legal or equitable action to disrupt the quiet enjoyment of
+the Work by the public as contemplated by Affirmer's express Statement
+of Purpose.
+
+3. Public License Fallback. Should any part of the Waiver for any reason
+be judged legally invalid or ineffective under applicable law, then the
+Waiver shall be preserved to the maximum extent permitted taking into
+account Affirmer's express Statement of Purpose. In addition, to the
+extent the Waiver is so judged Affirmer hereby grants to each affected
+person a royalty-free, non transferable, non sublicensable, non
+exclusive, irrevocable and unconditional license to exercise Affirmer's
+Copyright and Related Rights in the Work (i) in all territories
+worldwide, (ii) for the maximum duration provided by applicable law or
+treaty (including future time extensions), (iii) in any current or
+future medium and for any number of copies, and (iv) for any purpose
+whatsoever, including without limitation commercial, advertising or
+promotional purposes (the "License"). The License shall be deemed
+effective as of the date CC0 was applied by Affirmer to the Work. Should
+any part of the License for any reason be judged legally invalid or
+ineffective under applicable law, such partial invalidity or
+ineffectiveness shall not invalidate the remainder of the License, and
+in such case Affirmer hereby affirms that he or she will not (i)
+exercise any of his or her remaining Copyright and Related Rights in the
+Work or (ii) assert any associated claims and causes of action with
+respect to the Work, in either case contrary to Affirmer's express
+Statement of Purpose.
+
+4. Limitations and Disclaimers.
+
+ a. No trademark or patent rights held by Affirmer are waived,
+ abandoned, surrendered, licensed or otherwise affected by this
+ document.
+
+ b. Affirmer offers the Work as-is and makes no representations or
+ warranties of any kind concerning the Work, express, implied,
+ statutory or otherwise, including without limitation warranties of
+ title, merchantability, fitness for a particular purpose, non
+ infringement, or the absence of latent or other defects, accuracy, or
+ the present or absence of errors, whether or not discoverable, all to
+ the greatest extent permissible under applicable law.
+
+ c. Affirmer disclaims responsibility for clearing rights of other
+ persons that may apply to the Work or any use thereof, including
+ without limitation any person's Copyright and Related Rights in the
+ Work. Further, Affirmer disclaims responsibility for obtaining any
+ necessary consents, permissions or other rights required for any use
+ of the Work.
+
+ d. Affirmer understands and acknowledges that Creative Commons is not
+ a party to this document and has no duty or obligation with respect to
+ this CC0 or use of the Work.
+
+For more information, please see
+
diff --git a/TEMPLE/README.MD b/TEMPLE/README.MD
new file mode 100644
index 0000000..b3c1821
--- /dev/null
+++ b/TEMPLE/README.MD
@@ -0,0 +1,19 @@
+TEMPLE
+======
+
+TEMPLE is an assembly port for EttinOS of the web-based text adventure
+game In the Temple by nortti. Its original readme is reproduced here:
+
+A small game about a visit to a temple and the reasons for doing so.
+
+Can be played online at https://ahti.space/~nortti/in-the-temple/ or at
+https://nortti.itch.io/in-the-temple
+
+The game is distributed under the Creative Commons Zero 1.0 Universal
+license.
+
+***
+
+This package is part of EttinOS-extra, a collection of programs for
+EttinOS, the git repository of which can be found at
+https://ahti.space/git/crazyettin/EttinOS-extra.
diff --git a/TEMPLE/TEMPLE.ASM b/TEMPLE/TEMPLE.ASM
new file mode 100644
index 0000000..de65798
--- /dev/null
+++ b/TEMPLE/TEMPLE.ASM
@@ -0,0 +1,532 @@
+cpu 8086
+org 0x3000
+
+;Intro
+;Print the intro
+intro:
+mov si, introtxt
+mov ah, 0x2
+int 0x21
+;Read any key to start
+mov ah, 0x0
+int 0x16
+call readquit
+
+;Start
+;Print the text
+mov si, startxt
+mov ah, 0x2
+int 0x21
+;Read the player choice
+readstart:
+mov ah, 0x0
+int 0x16
+cmp al, "1"
+je give
+cmp al, "2"
+je take
+cmp al, "3"
+je do
+call readquit
+jmp readstart
+
+;Giving
+;Print the text
+give:
+mov si, givetxt
+mov ah, 0x2
+int 0x21
+;Read the player choice
+readgive:
+mov ah, 0x0
+int 0x16
+cmp al, "1"
+je comb
+cmp al, "2"
+je coin
+call readquit
+jmp readgive
+
+;Giving a Comb
+;Print the text
+comb:
+mov si, combtxt
+mov ah, 0x2
+int 0x21
+;Read any key to return back to the beginning
+mov ah, 0x0
+int 0x16
+call readquit
+mov si, crlf
+mov ah, 0x0
+int 0x21
+jmp intro
+
+;Giving a Coin
+;Print the text
+coin:
+mov si, cointxt
+mov ah, 0x2
+int 0x21
+;Read any key to return back to the beginning
+mov ah, 0x0
+int 0x16
+call readquit
+mov si, crlf
+mov ah, 0x0
+int 0x21
+jmp intro
+
+;Taking
+;Print the text
+take:
+mov si, taketxt
+mov ah, 0x2
+int 0x21
+;Read the player choice
+readtake:
+mov ah, 0x0
+int 0x16
+cmp al, "1"
+je bowl
+cmp al, "2"
+je knife
+cmp al, "3"
+je idol
+call readquit
+jmp readtake
+
+;Taking the Bowl
+;Print the text
+bowl:
+mov si, bowltxt
+mov ah, 0x2
+int 0x21
+;Read any key to return back to the beginning
+mov ah, 0x0
+int 0x16
+call readquit
+mov si, crlf
+mov ah, 0x0
+int 0x21
+jmp intro
+
+;Taking the Knife
+;Print the text
+knife:
+mov si, knifetxt
+mov ah, 0x2
+int 0x21
+;Read any key to return back to the beginning
+mov ah, 0x0
+int 0x16
+call readquit
+mov si, crlf
+mov ah, 0x0
+int 0x21
+jmp intro
+
+;Taking the Idol
+;Print the text
+idol:
+mov si, idoltxt
+mov ah, 0x2
+int 0x21
+;Read any key to return back to the beginning
+mov ah, 0x0
+int 0x16
+call readquit
+mov si, crlf
+mov ah, 0x0
+int 0x21
+jmp intro
+
+;Doing
+;Print the text
+do:
+mov si, dotxt
+mov ah, 0x2
+int 0x21
+;Read the player choice
+reado:
+mov ah, 0x0
+int 0x16
+cmp al, "1"
+je sacrifice
+cmp al, "2"
+je iconoclasm
+cmp al, "3"
+je prayer
+call readquit
+jmp reado
+
+;Making a Sacrifice
+;Print the text
+sacrifice:
+mov si, sacrificetxt
+mov ah, 0x2
+int 0x21
+;Read the player choice
+readsacrifice:
+mov ah, 0x0
+int 0x16
+cmp al, "1"
+je bread
+cmp al, "2"
+je blood
+call readquit
+jmp readsacrifice
+
+;A Sacrifice of Bread
+;Print the text
+bread:
+mov si, breadtxt
+mov ah, 0x2
+int 0x21
+;Read any key to return back to the beginning
+mov ah, 0x0
+int 0x16
+call readquit
+mov si, crlf
+mov ah, 0x0
+int 0x21
+jmp intro
+
+;A Sacrifice of Blood
+;Print the text
+blood:
+mov si, bloodtxt
+mov ah, 0x2
+int 0x21
+;Read any key to return back to the beginning
+mov ah, 0x0
+int 0x16
+call readquit
+mov si, crlf
+mov ah, 0x0
+int 0x21
+jmp intro
+
+;Iconoclasm
+;Print the text
+iconoclasm:
+mov si, iconoclasmtxt
+mov ah, 0x2
+int 0x21
+;Read any key to return back to the beginning
+mov ah, 0x0
+int 0x16
+call readquit
+mov si, crlf
+mov ah, 0x0
+int 0x21
+jmp intro
+
+;Prayer
+;Print the text
+prayer:
+mov si, prayertxt
+mov ah, 0x2
+int 0x21
+;Read any key to return back to the beginning
+mov ah, 0x0
+int 0x16
+call readquit
+mov si, crlf
+mov ah, 0x0
+int 0x21
+jmp intro
+
+;Return
+done:
+int 0x20
+
+;Data
+introtxt db "In the Temple", 0xd, 0xa,\
+ "=============", 0xd, 0xa,\
+ 0xd, 0xa,\
+ "This is a story of your visit to the temple of ",\
+ "Arattavesh.",\
+ 0xd, 0xa,\
+ 0xd, 0xa,\
+ "To choose an option press the corresponding number. ",\
+ "To quit the game", 0xd, 0xa,\
+ "press Q.", 0xd, 0xa,\
+ 0xd, 0xa,\
+ "Press any key to start.", 0x0
+startxt db 0xd, 0xa,\
+ "Before the Idol", 0xd, 0xa,\
+ "---------------", 0xd, 0xa,\
+ 0xd, 0xa,\
+ "You are in the back of the temple, before the idol of ",\
+ "Arattavesh. It is", 0xd, 0xa,\
+ "a well made wooden statue painted with gold and blue.",\
+ 0xd, 0xa,\
+ 0xd, 0xa,\
+ "In front of the statue there is an ornate knife and a ",\
+ "plain wooden bowl.", 0xd, 0xa,\
+ 0xd, 0xa,\
+ "You have come here to the sanctum to...", 0xd, 0xa,\
+ " 1. give something.", 0xd, 0xa,\
+ " 2. take something.", 0xd, 0xa,\
+ " 3. do something.", 0x0
+givetxt db 0xd, 0xa,\
+ "Giving", 0xd, 0xa,\
+ "------", 0xd, 0xa,\
+ 0xd, 0xa,\
+ "You have arrived to deposit a votive offering to ",\
+ "Arattavesh for healing", 0xd, 0xa,\
+ "your sickness over the winter. You intend to give...",\
+ 0xd, 0xa,\
+ " 1. a wooden comb.", 0xd, 0xa,\
+ " 2. a silver coin.", 0x0
+combtxt db 0xd, 0xa,\
+ "Giving a Comb", 0xd, 0xa,\
+ "-------------", 0xd, 0xa,\
+ 0xd, 0xa,\
+ "You hold a finely carved wooden comb in your hands. ",\
+ "It is a comb you", 0xd, 0xa,\
+ "have made yourself, the masterpiece that gave you ",\
+ "full rights in the", 0xd, 0xa,\
+ "guild. You are sacrificing not only its monetary ",\
+ "value, but its value to", 0xd, 0xa,\
+ "you personally.", 0xd, 0xa,\
+ 0xd, 0xa,\
+ "You place the comb next to the knife, say a few words ",\
+ "asking Arattavesh", 0xd, 0xa,\
+ "to accept your payment, and walk back to the door to ",\
+ "the sanctum. A", 0xd, 0xa,\
+ "priest sprinkles water on you, and closes the heavy ",\
+ "door after you step", 0xd, 0xa,\
+ "outside.", 0xd, 0xa,\
+ 0xd, 0xa,\
+ "Press any key to return back to the beginning.", 0x0
+cointxt db 0xd, 0xa,\
+ "Giving a Coin", 0xd, 0xa,\
+ "-------------", 0xd, 0xa,\
+ 0xd, 0xa,\
+ "You take out a silver coin from the pouch hanging ",\
+ "from your belt. It", 0xd, 0xa,\
+ "represents the work of several weeks as a cobbler.",\
+ 0xd, 0xa,\
+ 0xd, 0xa,\
+ "You take the coin and throw it to the fountain that ",\
+ "is behind the idol,", 0xd, 0xa,\
+ "where you hear it clink against other coins that have ",\
+ "been deposited", 0xd, 0xa,\
+ "previously.", 0xd, 0xa,\
+ 0xd, 0xa,\
+ "You turn back and walk through the curtains to the ",\
+ "common side of the", 0xd, 0xa,\
+ "temple, where other devout are waiting for their turn ",\
+ "to enter the", 0xd, 0xa,\
+ "sanctum.", 0xd, 0xa,\
+ 0xd, 0xa,\
+ "Press any key to return back to the beginning.", 0x0
+taketxt db 0xd, 0xa,\
+ "Taking", 0xd, 0xa,\
+ "------", 0xd, 0xa,\
+ 0xd, 0xa,\
+ "There it is. Right before you. You steal a glance ",\
+ "behing you hoping to", 0xd, 0xa,\
+ "make sure that nobody spots you in the darkness as ",\
+ "you reach out and", 0xd, 0xa,\
+ "grab...", 0xd, 0xa,\
+ " 1. the bowl.", 0xd, 0xa,\
+ " 2. the knife.", 0xd, 0xa,\
+ " 3. the idol.", 0x0
+bowltxt db 0xd, 0xa,\
+ "Taking the Bowl", 0xd, 0xa,\
+ "---------------", 0xd, 0xa,\
+ 0xd, 0xa,\
+ "The bowl you had offered just a week before is still ",\
+ "here. You had left", 0xd, 0xa,\
+ "it as a thanks of your husband's recovery, but now ",\
+ "your husband is gone,", 0xd, 0xa,\
+ "your fields are destroyed, and all this is the name ",\
+ "of Arattavesh.", 0xd, 0xa,\
+ 0xd, 0xa,\
+ "If the gods shall curse you for breaching the ",\
+ "holiness of the sanctum", 0xd, 0xa,\
+ "let them, for you curse the gods too. You take that ",\
+ "which you dedicated", 0xd, 0xa,\
+ 'to Arattavesh and quietly state "You have taken back ',\
+ "your gift and so I", 0xd, 0xa,\
+ 'shall take back mine" before slipping back into the ',\
+ "night.", 0xd, 0xa,\
+ 0xd, 0xa,\
+ "Press any key to return back to the beginning.", 0x0
+knifetxt db 0xd, 0xa,\
+ "Taking the Knife", 0xd, 0xa,\
+ "----------------", 0xd, 0xa,\
+ 0xd, 0xa,\
+ "The knife is very nicely made. You admire it for a ",\
+ "small while, before", 0xd, 0xa,\
+ "slipping it into the bag you carry around your ",\
+ "shoulders.", 0xd, 0xa,\
+ 0xd, 0xa,\
+ "You aren't committing a sin, or if you are it's not a ",\
+ "great one. The", 0xd, 0xa,\
+ "chanter who lives in the main city has not yet come ",\
+ "and completed the", 0xd, 0xa,\
+ "dedication. The one who's knelt before the idol and ",\
+ "left it here has", 0xd, 0xa,\
+ "merely announced an intention to give it to their god ",\
+ "so it's still", 0xd, 0xa,\
+ "theirs, and they will not miss it.", 0xd, 0xa,\
+ 0xd, 0xa,\
+ "If Nagiri holds up his end of the bargain your debt ",\
+ "shall be gone come", 0xd, 0xa,\
+ "tomorrow and you can leave the land you work but do ",\
+ "not own. You get", 0xd, 0xa,\
+ "excited, but then try to calm down. It is not over ",\
+ "yet.", 0xd, 0xa,\
+ 0xd, 0xa,\
+ "You walk out into the evening crowd still in the ",\
+ "market before the", 0xd, 0xa,\
+ "sanctum. There are so many people here nobody will ",\
+ "remember and be able", 0xd, 0xa,\
+ "to speak against you.", 0xd, 0xa,\
+ 0xd, 0xa,\
+ "Press any key to return back to the beginning.", 0x0
+idoltxt db 0xd, 0xa,\
+ "Taking the Idol", 0xd, 0xa,\
+ "---------------", 0xd, 0xa,\
+ 0xd, 0xa,\
+ "Here it is. The protector god of your village, taken ",\
+ "by force when you", 0xd, 0xa,\
+ "were but a small child.", 0xd, 0xa,\
+ 0xd, 0xa,\
+ "They call her Arattavesh, after the river, but you ",\
+ "know better. As you", 0xd, 0xa,\
+ 'lift the idol you whisper: "Panglya, you shall be ',\
+ 'home soon."', 0xd, 0xa,\
+ 0xd, 0xa,\
+ "Press any key to return back to the beginning.", 0x0
+dotxt db 0xd, 0xa,\
+ "Doing", 0xd, 0xa,\
+ "-----", 0xd, 0xa,\
+ 0xd, 0xa,\
+ "Yes, it is finally time. You make sure that ",\
+ "everything is just right,", 0xd, 0xa,\
+ "and...", 0xd, 0xa,\
+ " 1. take the knife.", 0xd, 0xa,\
+ " 2. raise your axe.", 0xd, 0xa,\
+ " 3. kneel before the idol.", 0x0
+sacrificetxt db 0xd, 0xa,\
+ "Making a Sacrifice", 0xd, 0xa,\
+ "------------------", 0xd, 0xa,\
+ 0xd, 0xa,\
+ "You take the blade, and think of the long nights ",\
+ "spent replaying the", 0xd, 0xa,\
+ "formula of the sacrifice in your head. You've seen ",\
+ "ones before, but", 0xd, 0xa,\
+ "never this one, for it is one that a priest must do ",\
+ "alone.", 0xd, 0xa,\
+ 0xd, 0xa,\
+ "You say the words, and cut...", 0xd, 0xa,\
+ " 1. a loaf of bread.", 0xd, 0xa,\
+ " 2. your finger.", 0x0
+breadtxt db 0xd, 0xa,\
+ "A Sacrifice of Bread", 0xd, 0xa,\
+ "--------------------", 0xd, 0xa,\
+ 0xd, 0xa,\
+ "As Arattavesh gives you grain, you shall give her ",\
+ "back. A slice of every", 0xd, 0xa,\
+ "loaf made before the next new moon shall be hers, and ",\
+ "the bakers will be", 0xd, 0xa,\
+ "giving their share starting tomorrow. But this loaf ",\
+ "is special, the", 0xd, 0xa,\
+ "first loaf baked from new grain, and it is reserved ",\
+ "for the junior", 0xd, 0xa,\
+ "priest of the temple. Which is you.", 0xd, 0xa,\
+ 0xd, 0xa,\
+ "You know that you shall not be too stingy and cut ",\
+ "only the skin. You", 0xd, 0xa,\
+ "also know you have to be exact and not cut a too big ",\
+ "of a slice off. But", 0xd, 0xa,\
+ "that is no issue. You end up with a slice that is ",\
+ "just right, and place", 0xd, 0xa,\
+ "it in the bowl before the idol.", 0xd, 0xa,\
+ 0xd, 0xa,\
+ "After this is done, you lay the knife back down, and ",\
+ "recite one of the", 0xd, 0xa,\
+ "old hymns, too old for people to understand anymore. ",\
+ "You feel that", 0xd, 0xa,\
+ "Arattavesh is pleased in you as you walk up to the ",\
+ "roof of the temple", 0xd, 0xa,\
+ "house and then across to the end of the block.", 0xd,\
+ 0xa,\
+ 0xd, 0xa,\
+ "Press any key to return back to the beginning.", 0x0
+bloodtxt db 0xd, 0xa,\
+ "A Sacrifice of Blood", 0xd, 0xa,\
+ "--------------------", 0xd, 0xa,\
+ 0xd, 0xa,\
+ "It hurts a little but you do not care, as you let the ",\
+ "droplets of blood", 0xd, 0xa,\
+ "drip into the bowl. Just like mixing your blood with ",\
+ "that of your sworn", 0xd, 0xa,\
+ "sister cements your bond, so does giving it to your ",\
+ "god.", 0xd, 0xa,\
+ 0xd, 0xa,\
+ "You are a fully fledged priest of Arattavesh, the one ",\
+ "who rules behind", 0xd, 0xa,\
+ "the waves and in the dark caverns of earth. You hurry ",\
+ "to your new family", 0xd, 0xa,\
+ "who are waiting at the foot of the mountain.", 0xd, 0xa,\
+ 0xd, 0xa,\
+ "Press any key to return back to the beginning.", 0x0
+iconoclasmtxt db 0xd, 0xa,\
+ "Iconoclasm", 0xd, 0xa,\
+ "----------", 0xd, 0xa,\
+ 0xd, 0xa,\
+ "There is but one abomination in the eyes of gods bad ",\
+ "enough to warrant a", 0xd, 0xa,\
+ "death in the marshes. And that is the worship of ",\
+ "earthly images in their", 0xd, 0xa,\
+ "stead.", 0xd, 0xa,\
+ 0xd, 0xa,\
+ "You raise your axe and let it fall onto the head of ",\
+ "the idol. There is a", 0xd, 0xa,\
+ "crunching sound and you see the wood split, maggots ",\
+ "crawling out of it.", 0xd, 0xa,\
+ "Of course, of course. The idol is as rotten as the ",\
+ "act of worshiping it.", 0xd, 0xa,\
+ 0xd, 0xa,\
+ "The heathen ways are over again, and the temple shall ",\
+ "be cleansed. You", 0xd, 0xa,\
+ "raise your arms and shout as loud as you can: ",\
+ '"Witness me Arattavesh,', 0xd, 0xa,\
+ "for I will cleanse your house of the ways of the ",\
+ "Eluwing, and enact", 0xd, 0xa,\
+ 'revenge on those who have it thus defiled!"', 0xd, 0xa,\
+ 0xd, 0xa,\
+ "Press any key to return back to the beginning.", 0x0
+prayertxt db 0xd, 0xa,\
+ "Prayer", 0xd, 0xa,\
+ "------", 0xd, 0xa,\
+ 0xd, 0xa,\
+ '"You who will remain when I am gone', 0xd, 0xa,\
+ "To help my family in time of need", 0xd, 0xa,\
+ "To shield the eastern flank of this city", 0xd, 0xa,\
+ "To leave the graves of our ancestors safe", 0xd, 0xa,\
+ "To bring the flood as you have brought", 0xd, 0xa,\
+ 'I ask you"', 0xd, 0xa,\
+ 0xd, 0xa,\
+ "Press any key to return back to the beginning.", 0x0
+crlf db 0xd, 0xa, 0x0
+
+;***
+
+;Quit the game
+readquit:
+
+;Check for keypress Q
+cmp al, "Q"
+je done
+cmp al, "q"
+je done
+
+;Return
+ret
diff --git a/make.sh b/make.sh
new file mode 100755
index 0000000..4328fea
--- /dev/null
+++ b/make.sh
@@ -0,0 +1,26 @@
+#!/bin/sh
+
+cd CONVERT/
+nasm DEC2HEX.ASM -f bin -o DEC2HEX.BIN
+nasm HEX2DEC.ASM -f bin -o HEX2DEC.BIN
+zip -r CONVERT.ZIP DEC2HEX.BIN DEC2HEX.ASM HEX2DEC.BIN HEX2DEC.ASM README.MD CC0 1>/dev/null
+mv CONVERT.ZIP ..
+cd ..
+
+cd KEYCODE/
+nasm KEYCODE.ASM -f bin -o KEYCODE.BIN
+zip -r KEYCODE.ZIP KEYCODE.BIN KEYCODE.ASM README.MD LICENSE.MD 1>/dev/null
+mv KEYCODE.ZIP ..
+cd ..
+
+cd ROT13/
+nasm ROT13.ASM -f bin -o ROT13.BIN
+zip -r ROT13.ZIP ROT13.BIN ROT13.ASM README.MD CC0 1>/dev/null
+mv ROT13.ZIP ..
+cd ..
+
+cd TEMPLE/
+nasm TEMPLE.ASM -f bin -o TEMPLE.BIN
+zip -r TEMPLE.ZIP TEMPLE.BIN TEMPLE.ASM README.MD LICENSE.MD 1>/dev/null
+mv TEMPLE.ZIP ..
+cd ..