--- /dev/null
+# Introduction
+This document covers the Z-machine, a virtual machine that was
+developed in 1979 and used by Infocom for its text-based games. The
+name came from their their first adventure, Zork.
+
+## Format
+This document is written using CommonMark, a markup language. More
+information about CommonMark can be found at <http://commonmark.org>.
+
+## Copyright And Licensing
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Affero General Public License as published
+by the Free Software Foundation ("FSF"), either version 3 of the
+License, or (at your option) any later version published by the FSF.
+
+You should have received a copy of the GNU Affero General Public
+License along with this document. If not see
+<https://gnu.org/licenses/>.
+
+# Memory Map
+The Z-machine's memory map is made up of byte addresses that run from
+0 on up. These addresses are then divided into the three regions of
+dynamic, static and high.
+
+Dynamic memory starts at $00000 and must contain at least 64 bits
+(with the first 64 known as the "header"). This portion then runs up
+to the address before the word at $0e. It can be read or written with
+either direct commands (GET, GETB, PUT, PUTB) or indirect (MOVE,
+REMOVE). Because of this ease of access, it is legal for games to
+alter the tables stored here and above the header.
+
+Immediately following the dynamic memory is static. This memory must
+end by the last byte of the story file or by $0ffff, whichever comes
+first. Unlike dynamic, it is illegal for games to write or attempt to
+write to this memory. It can be read using GET and GETB. It is also
+not defined anywhere, even in the header.
+
+Finally, high memory begins at what is known as the "high memory
+mark," or the word at $04 in the header. Since it continues until the
+end of the story file, it has the potential to overlap with the static
+but never the dynamic. Unlike both the static and dynamic, it cannot
+be accessed directly in any form by a game program. Its contents are
+routines that can be called and strings that can be printed with
+PRINT.