diff --git a/README.md b/README.md
index 81dcf9a..de2c0dc 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-# A 65C02 Assembly DSL for Haskell
+# DSL.SixtyFiveOhTwo: A 65C02 Assembly eDSL in Haskell
![Example image](https://raw.githubusercontent.com/Aearnus/dsl-sixty-five-oh-two/master/fancy_banner.png)
@@ -21,11 +21,51 @@ myProgram = do
call "accumulatorLoadNStore"
```
-Here's a fun little snippet that adds 10 to the accumulator using Haskell Monad Magic:
+Here's a fun little snippet that adds 10 to the accumulator using Haskell Monad Magic:tm::
```haskell
test3f2 :: Instruction
test3f2 = replicateM_ 10 (inc (Accumulator))
```
-More documentation coming soon!
+Everything that this module exposes is in [src/DSL/SixtyFiveOhTwo.hs](https://github.com/Aearnus/dsl-sixty-five-oh-two/blob/master/src/DSL/SixtyFiveOhTwo.hs). A quick browse through this file will reveal the full extent of the features of this eDSL.
+
+## What does the language provide me?
+###
The entire breadth of 65C02 opcodes
+
+* Full coverage. Everything bit of code that the 65C02 can understand is represented in this language. Everywhere `adc` to `wai` can be used. These opcodes are represented as generic operations, each of which simply append to the bytecode that gets passed into it. Here's an example of the definition for a certain opcode:
+```haskell
+lda :: AddressingMode -> Instruction
+lda (Immediate b) = genericOp 169 b
+lda (ZeroPage b) = genericOp 165 b
+lda (ZeroPageX b) = genericOp 181 b
+lda (Absolute b) = genericTwoByteOp 173 b
+lda (AbsoluteX b) = genericTwoByteOp 189 b
+lda (AbsoluteY b) = genericTwoByteOp 185 b
+lda (ZeroPageIndirect b) = genericOp 178 b
+lda (IndirectX b) = genericOp 161 b
+lda (IndirectY b) = genericOp 177 b
+```
+
+* Type safety. Every addressing mode is represented the Haskell type system, and thus issues will be caught at compile time. The `AddressingMode` ADT is used to represent a function's addressing mode, and opcodes do not take addressing modes that they do not support.
+```haskell
+data AddressingMode =
+ Implied |
+ Accumulator |
+ Immediate Word8 |
+ Relative Int8 | -- Signed
+ ZeroPageRelative Int8 | -- Signed
+ Absolute Word16 |
+ AbsoluteX Word16 |
+ AbsoluteY Word16 |
+ ZeroPage Word8 |
+ ZeroPageX Word8 |
+ ZeroPageY Word8 |
+ ZeroPageIndirect Word8 |
+ Indirect Word16 |
+ IndirectX Word8 |
+ IndirectY Word8
+```
+
+
+* Easy abstractions. The `define` and `call` keywords automatically generate the code necessary to create and call subroutines.
diff --git a/package.yaml b/package.yaml
index c29ffaf..2d06ef5 100644
--- a/package.yaml
+++ b/package.yaml
@@ -1,23 +1,23 @@
-name: dsl-sixty-five-oh-two
+name: sixty-five-oh-two
version: 0.1.0.0
github: "githubuser/dsl-sixty-five-oh-two"
-license: BSD3
-author: "Author name here"
-maintainer: "example@example.com"
-copyright: "2018 Author name here"
+license: MIT
+author: "Tyler Limkemann"
+maintainer: "tslimkemann42@gmail.com"
+copyright: "2018 Tyler Limkemann"
extra-source-files:
- README.md
- ChangeLog.md
# Metadata used when publishing your package
-# synopsis: Short description of your package
-# category: Web
+synopsis: An eDSL for writing 65(C)02 bytecode.
+category: DSL
# To avoid duplicated efforts in documentation and dealing with the
# complications of embedding Haddock markup inside cabal files, it is
# common to point users to the README.md file.
-description: A DSL for writing 65(C)02 bytecode. Please see the README on GitHub at
+description: An eDSL for writing 65(C)02 bytecode. Please see the README on GitHub at
dependencies:
- base >= 4.7 && < 5