summaryrefslogtreecommitdiffstats
path: root/hacks/images
diff options
context:
space:
mode:
Diffstat (limited to 'hacks/images')
-rw-r--r--hacks/images/6x10font.pngbin0 -> 1968 bytes
-rw-r--r--hacks/images/Makefile54
-rw-r--r--hacks/images/Makefile.in54
-rw-r--r--hacks/images/amiga.pngbin0 -> 1136 bytes
-rw-r--r--hacks/images/android.pngbin0 -> 1091 bytes
-rw-r--r--hacks/images/apple.pngbin0 -> 1562 bytes
-rw-r--r--hacks/images/apple2font.pngbin0 -> 651 bytes
-rw-r--r--hacks/images/atari.pngbin0 -> 148 bytes
-rw-r--r--hacks/images/atm.pngbin0 -> 982 bytes
-rw-r--r--hacks/images/blocktube.pngbin0 -> 23571 bytes
-rw-r--r--hacks/images/bob.pngbin0 -> 1491 bytes
-rw-r--r--hacks/images/brick1.pngbin0 -> 8544 bytes
-rw-r--r--hacks/images/brick2.pngbin0 -> 688 bytes
-rw-r--r--hacks/images/bubbles/blood.pov24
-rw-r--r--hacks/images/bubbles/blood1.pngbin0 -> 583 bytes
-rw-r--r--hacks/images/bubbles/blood10.pngbin0 -> 8605 bytes
-rw-r--r--hacks/images/bubbles/blood11.pngbin0 -> 11682 bytes
-rw-r--r--hacks/images/bubbles/blood2.pngbin0 -> 781 bytes
-rw-r--r--hacks/images/bubbles/blood3.pngbin0 -> 1020 bytes
-rw-r--r--hacks/images/bubbles/blood4.pngbin0 -> 1276 bytes
-rw-r--r--hacks/images/bubbles/blood5.pngbin0 -> 1768 bytes
-rw-r--r--hacks/images/bubbles/blood6.pngbin0 -> 2612 bytes
-rw-r--r--hacks/images/bubbles/blood7.pngbin0 -> 3571 bytes
-rw-r--r--hacks/images/bubbles/blood8.pngbin0 -> 5076 bytes
-rw-r--r--hacks/images/bubbles/blood9.pngbin0 -> 6324 bytes
-rw-r--r--hacks/images/bubbles/blue.pov22
-rw-r--r--hacks/images/bubbles/blue1.pngbin0 -> 583 bytes
-rw-r--r--hacks/images/bubbles/blue10.pngbin0 -> 7064 bytes
-rw-r--r--hacks/images/bubbles/blue11.pngbin0 -> 9455 bytes
-rw-r--r--hacks/images/bubbles/blue2.pngbin0 -> 781 bytes
-rw-r--r--hacks/images/bubbles/blue3.pngbin0 -> 1018 bytes
-rw-r--r--hacks/images/bubbles/blue4.pngbin0 -> 1184 bytes
-rw-r--r--hacks/images/bubbles/blue5.pngbin0 -> 1626 bytes
-rw-r--r--hacks/images/bubbles/blue6.pngbin0 -> 2354 bytes
-rw-r--r--hacks/images/bubbles/blue7.pngbin0 -> 3133 bytes
-rw-r--r--hacks/images/bubbles/blue8.pngbin0 -> 4300 bytes
-rw-r--r--hacks/images/bubbles/blue9.pngbin0 -> 5286 bytes
-rw-r--r--hacks/images/bubbles/glass.pov27
-rw-r--r--hacks/images/bubbles/glass1.pngbin0 -> 583 bytes
-rw-r--r--hacks/images/bubbles/glass10.pngbin0 -> 6805 bytes
-rw-r--r--hacks/images/bubbles/glass11.pngbin0 -> 9200 bytes
-rw-r--r--hacks/images/bubbles/glass2.pngbin0 -> 781 bytes
-rw-r--r--hacks/images/bubbles/glass3.pngbin0 -> 1018 bytes
-rw-r--r--hacks/images/bubbles/glass4.pngbin0 -> 1045 bytes
-rw-r--r--hacks/images/bubbles/glass5.pngbin0 -> 1425 bytes
-rw-r--r--hacks/images/bubbles/glass6.pngbin0 -> 2110 bytes
-rw-r--r--hacks/images/bubbles/glass7.pngbin0 -> 2856 bytes
-rw-r--r--hacks/images/bubbles/glass8.pngbin0 -> 4014 bytes
-rw-r--r--hacks/images/bubbles/glass9.pngbin0 -> 4996 bytes
-rw-r--r--hacks/images/bubbles/jade.pov24
-rw-r--r--hacks/images/bubbles/jade1.pngbin0 -> 583 bytes
-rw-r--r--hacks/images/bubbles/jade10.pngbin0 -> 7853 bytes
-rw-r--r--hacks/images/bubbles/jade11.pngbin0 -> 10816 bytes
-rw-r--r--hacks/images/bubbles/jade2.pngbin0 -> 781 bytes
-rw-r--r--hacks/images/bubbles/jade3.pngbin0 -> 1018 bytes
-rw-r--r--hacks/images/bubbles/jade4.pngbin0 -> 1202 bytes
-rw-r--r--hacks/images/bubbles/jade5.pngbin0 -> 1670 bytes
-rw-r--r--hacks/images/bubbles/jade6.pngbin0 -> 2416 bytes
-rw-r--r--hacks/images/bubbles/jade7.pngbin0 -> 3255 bytes
-rw-r--r--hacks/images/bubbles/jade8.pngbin0 -> 4670 bytes
-rw-r--r--hacks/images/bubbles/jade9.pngbin0 -> 5758 bytes
-rw-r--r--hacks/images/chromesphere.pngbin0 -> 33091 bytes
-rw-r--r--hacks/images/earth.pngbin0 -> 433159 bytes
-rw-r--r--hacks/images/earth_flat.pngbin0 -> 16698 bytes
-rw-r--r--hacks/images/earth_night.pngbin0 -> 390020 bytes
-rw-r--r--hacks/images/ground.pngbin0 -> 13299 bytes
-rw-r--r--hacks/images/hmac.pngbin0 -> 439 bytes
-rw-r--r--hacks/images/iris.pngbin0 -> 143843 bytes
-rw-r--r--hacks/images/jigglymap.pngbin0 -> 29863 bytes
-rw-r--r--hacks/images/lament512.pngbin0 -> 566651 bytes
-rw-r--r--hacks/images/logo-180.pngbin0 -> 8734 bytes
-rw-r--r--hacks/images/logo-32.pngbin0 -> 1614 bytes
-rw-r--r--hacks/images/logo-50.pngbin0 -> 2030 bytes
-rw-r--r--hacks/images/m6502/amiga.asm120
-rw-r--r--hacks/images/m6502/breakout.asm195
-rw-r--r--hacks/images/m6502/byterun.asm100
-rw-r--r--hacks/images/m6502/cellular-30.asm67
-rw-r--r--hacks/images/m6502/cellular-600.asm209
-rw-r--r--hacks/images/m6502/colors.asm46
-rw-r--r--hacks/images/m6502/crunch6502.asm292
-rw-r--r--hacks/images/m6502/demoscene.asm457
-rw-r--r--hacks/images/m6502/disco.asm23
-rw-r--r--hacks/images/m6502/dmsc.asm130
-rw-r--r--hacks/images/m6502/dmsc.txt768
-rw-r--r--hacks/images/m6502/dragon-fractal.asm49
-rw-r--r--hacks/images/m6502/fullscreenlogo.asm107
-rw-r--r--hacks/images/m6502/greynetic.asm96
-rw-r--r--hacks/images/m6502/keftal.asm82
-rw-r--r--hacks/images/m6502/life.asm127
-rw-r--r--hacks/images/m6502/lines.asm313
-rw-r--r--hacks/images/m6502/matrix.asm67
-rw-r--r--hacks/images/m6502/noise.asm16
-rw-r--r--hacks/images/m6502/random-walk.asm82
-rw-r--r--hacks/images/m6502/random.asm11
-rw-r--r--hacks/images/m6502/random2.asm11
-rw-r--r--hacks/images/m6502/rorschach.asm124
-rw-r--r--hacks/images/m6502/santa.asm142
-rw-r--r--hacks/images/m6502/selfmodify.asm12
-rw-r--r--hacks/images/m6502/sflake.asm320
-rw-r--r--hacks/images/m6502/sierpinski.asm24
-rw-r--r--hacks/images/m6502/sierpinsky.asm131
-rw-r--r--hacks/images/m6502/softsprite.asm132
-rw-r--r--hacks/images/m6502/spacer.asm235
-rw-r--r--hacks/images/m6502/starfield2d.asm50
-rw-r--r--hacks/images/m6502/texture.asm393
-rw-r--r--hacks/images/m6502/wave6502.asm164
-rw-r--r--hacks/images/m6502/zookeeper.asm109
-rw-r--r--hacks/images/mac.pngbin0 -> 211 bytes
-rw-r--r--hacks/images/macbomb.pngbin0 -> 697 bytes
-rw-r--r--hacks/images/matrix1.pngbin0 -> 29412 bytes
-rw-r--r--hacks/images/matrix1b.pngbin0 -> 11525 bytes
-rw-r--r--hacks/images/matrix2.pngbin0 -> 27982 bytes
-rw-r--r--hacks/images/matrix2b.pngbin0 -> 11468 bytes
-rw-r--r--hacks/images/matrix3.pngbin0 -> 125539 bytes
-rw-r--r--hacks/images/molecules/adenine.pdb37
-rw-r--r--hacks/images/molecules/adrenochrome.pdb55
-rw-r--r--hacks/images/molecules/bucky.pdb156
-rw-r--r--hacks/images/molecules/caffeine.pdb54
-rw-r--r--hacks/images/molecules/capsaicin.pdb49
-rw-r--r--hacks/images/molecules/chlordecone.pdb49
-rw-r--r--hacks/images/molecules/cocaine.pdb93
-rw-r--r--hacks/images/molecules/codeine.pdb93
-rw-r--r--hacks/images/molecules/cyclohexane.pdb151
-rw-r--r--hacks/images/molecules/cytosine.pdb33
-rw-r--r--hacks/images/molecules/dna.pdb972
-rw-r--r--hacks/images/molecules/dodecahedrane.pdb87
-rw-r--r--hacks/images/molecules/dthc.pdb107
-rw-r--r--hacks/images/molecules/dynamite.pdb47
-rw-r--r--hacks/images/molecules/glycol.pdb27
-rw-r--r--hacks/images/molecules/guanine.pdb39
-rw-r--r--hacks/images/molecules/heroin.pdb107
-rw-r--r--hacks/images/molecules/hexahelicene.pdb90
-rw-r--r--hacks/images/molecules/ibuprofen.pdb72
-rw-r--r--hacks/images/molecules/lsd.pdb104
-rw-r--r--hacks/images/molecules/menthol.pdb69
-rw-r--r--hacks/images/molecules/mescaline.pdb71
-rw-r--r--hacks/images/molecules/methamphetamine.pdb88
-rw-r--r--hacks/images/molecules/morphine.pdb87
-rw-r--r--hacks/images/molecules/nicotine.pdb59
-rw-r--r--hacks/images/molecules/novocaine.pdb81
-rw-r--r--hacks/images/molecules/olestra.pdb913
-rw-r--r--hacks/images/molecules/penicillin.pdb89
-rw-r--r--hacks/images/molecules/salvinorin.pdb92
-rw-r--r--hacks/images/molecules/sarin.pdb43
-rw-r--r--hacks/images/molecules/strychnine.pdb101
-rw-r--r--hacks/images/molecules/sucrose.pdb97
-rw-r--r--hacks/images/molecules/thalidomide.pdb65
-rw-r--r--hacks/images/molecules/thymine.pdb37
-rw-r--r--hacks/images/molecules/viagra.pdb133
-rw-r--r--hacks/images/molecules/vitaminb6.pdb56
-rw-r--r--hacks/images/molecules/vitaminc.pdb47
-rw-r--r--hacks/images/molecules/vx.pdb92
-rw-r--r--hacks/images/noseguy/nose-f1.pngbin0 -> 454 bytes
-rw-r--r--hacks/images/noseguy/nose-f2.pngbin0 -> 397 bytes
-rw-r--r--hacks/images/noseguy/nose-f3.pngbin0 -> 396 bytes
-rw-r--r--hacks/images/noseguy/nose-f4.pngbin0 -> 448 bytes
-rw-r--r--hacks/images/noseguy/nose-l1.pngbin0 -> 388 bytes
-rw-r--r--hacks/images/noseguy/nose-l2.pngbin0 -> 470 bytes
-rw-r--r--hacks/images/noseguy/nose-r1.pngbin0 -> 386 bytes
-rw-r--r--hacks/images/noseguy/nose-r2.pngbin0 -> 467 bytes
-rw-r--r--hacks/images/osx_10_2.pngbin0 -> 53621 bytes
-rw-r--r--hacks/images/osx_10_3.pngbin0 -> 28292 bytes
-rw-r--r--hacks/images/pacman.pngbin0 -> 2695 bytes
-rw-r--r--hacks/images/ransomware.pngbin0 -> 976 bytes
-rw-r--r--hacks/images/sball-bg.pngbin0 -> 31249 bytes
-rw-r--r--hacks/images/sball.pngbin0 -> 2334 bytes
-rw-r--r--hacks/images/scales.pngbin0 -> 8573 bytes
-rw-r--r--hacks/images/sclera.pngbin0 -> 230321 bytes
-rw-r--r--hacks/images/sea-texture.pngbin0 -> 6933 bytes
-rw-r--r--hacks/images/som.pngbin0 -> 7593 bytes
-rw-r--r--hacks/images/start.pngbin0 -> 1153 bytes
-rw-r--r--hacks/images/testcard_bbcf.pngbin0 -> 67094 bytes
-rw-r--r--hacks/images/testcard_pm5544.pngbin0 -> 20774 bytes
-rw-r--r--hacks/images/testcard_rca.pngbin0 -> 96263 bytes
-rw-r--r--hacks/images/timetunnel0.pngbin0 -> 35798 bytes
-rw-r--r--hacks/images/timetunnel1.pngbin0 -> 131957 bytes
-rw-r--r--hacks/images/timetunnel2.pngbin0 -> 50547 bytes
-rw-r--r--hacks/images/toast.pngbin0 -> 11667 bytes
-rw-r--r--hacks/images/tree.pngbin0 -> 5944 bytes
-rw-r--r--hacks/images/tunnel0.pngbin0 -> 6996 bytes
-rw-r--r--hacks/images/tunnel1.pngbin0 -> 3449 bytes
-rw-r--r--hacks/images/tunnel2.pngbin0 -> 11424 bytes
-rw-r--r--hacks/images/tunnel3.pngbin0 -> 6725 bytes
-rw-r--r--hacks/images/tunnel4.pngbin0 -> 3297 bytes
-rw-r--r--hacks/images/tunnel5.pngbin0 -> 3340 bytes
-rw-r--r--hacks/images/tunnelstar.pngbin0 -> 23414 bytes
-rw-r--r--hacks/images/win10_spinner.gifbin0 -> 64501 bytes
-rw-r--r--hacks/images/wood.pngbin0 -> 2130 bytes
-rw-r--r--hacks/images/wood2.pngbin0 -> 3274 bytes
189 files changed, 10051 insertions, 0 deletions
diff --git a/hacks/images/6x10font.png b/hacks/images/6x10font.png
new file mode 100644
index 0000000..70364d8
--- /dev/null
+++ b/hacks/images/6x10font.png
Binary files differ
diff --git a/hacks/images/Makefile b/hacks/images/Makefile
new file mode 100644
index 0000000..9f3d47c
--- /dev/null
+++ b/hacks/images/Makefile
@@ -0,0 +1,54 @@
+# hacks/images/Makefile.in --- xscreensaver, Copyright (c) 2018 Jamie Zawinski.
+# the `../configure' script generates `hacks/images/Makefile' from this file.
+
+
+srcdir = .
+VPATH = ${srcdir} ${srcdir}/bubbles ${srcdir}/m6502 \
+ ${srcdir}/molecules ${srcdir}/noseguy
+top_srcdir = ../..
+UTILS_SRC = $(top_srcdir)/utils
+RM = rm -f
+
+STAR = *
+TARFILES = Makefile \
+ Makefile.in \
+ $(STAR).png \
+ $(STAR).gif \
+ $(STAR)/$(STAR).png \
+ $(STAR)/$(STAR).asm \
+ $(STAR)/$(STAR).pdb \
+ $(STAR)/$(STAR).pov \
+ $(STAR)/$(STAR).txt \
+
+PNG_HDRS = $(shell find $(srcdir) -name \*.png | \
+ sed 's@^.*/\(.*\)\.\(png\)$$@gen/\1_\2.h@')
+
+default: all
+
+all: gen $(PNG_HDRS)
+
+gen:
+ mkdir gen
+
+# %.png dependency below works because VPATH contains subdirs
+# of 'images' dir not only 'images' itself
+gen/%_png.h: %.png
+ echo $(UTILS_SRC)/bin2c "$<" "$@"
+ $(UTILS_SRC)/bin2c "$<" "$@"
+
+clean:
+ $(RM) -r gen
+
+echo_tarfiles:
+ @echo $(TARFILES)
+
+install:
+install-program:
+install-man:
+install-strip:
+uninstall:
+uninstall-program:
+uninstall-man:
+depend:
+distdepend:
+tags:
diff --git a/hacks/images/Makefile.in b/hacks/images/Makefile.in
new file mode 100644
index 0000000..497ebfc
--- /dev/null
+++ b/hacks/images/Makefile.in
@@ -0,0 +1,54 @@
+# hacks/images/Makefile.in --- xscreensaver, Copyright (c) 2018 Jamie Zawinski.
+# the `../configure' script generates `hacks/images/Makefile' from this file.
+
+@SET_MAKE@
+srcdir = @srcdir@
+VPATH = ${srcdir} ${srcdir}/bubbles ${srcdir}/m6502 \
+ ${srcdir}/molecules ${srcdir}/noseguy
+top_srcdir = @top_srcdir@
+UTILS_SRC = $(top_srcdir)/utils
+RM = rm -f
+
+STAR = *
+TARFILES = Makefile \
+ Makefile.in \
+ $(STAR).png \
+ $(STAR).gif \
+ $(STAR)/$(STAR).png \
+ $(STAR)/$(STAR).asm \
+ $(STAR)/$(STAR).pdb \
+ $(STAR)/$(STAR).pov \
+ $(STAR)/$(STAR).txt \
+
+PNG_HDRS = $(shell find $(srcdir) -name \*.png | \
+ sed 's@^.*/\(.*\)\.\(png\)$$@gen/\1_\2.h@')
+
+default: all
+
+all: gen $(PNG_HDRS)
+
+gen:
+ mkdir gen
+
+# %.png dependency below works because VPATH contains subdirs
+# of 'images' dir not only 'images' itself
+gen/%_png.h: %.png
+ echo $(UTILS_SRC)/bin2c "$<" "$@"
+ $(UTILS_SRC)/bin2c "$<" "$@"
+
+clean:
+ $(RM) -r gen
+
+echo_tarfiles:
+ @echo $(TARFILES)
+
+install:
+install-program:
+install-man:
+install-strip:
+uninstall:
+uninstall-program:
+uninstall-man:
+depend:
+distdepend:
+tags:
diff --git a/hacks/images/amiga.png b/hacks/images/amiga.png
new file mode 100644
index 0000000..7ea62ff
--- /dev/null
+++ b/hacks/images/amiga.png
Binary files differ
diff --git a/hacks/images/android.png b/hacks/images/android.png
new file mode 100644
index 0000000..80115c3
--- /dev/null
+++ b/hacks/images/android.png
Binary files differ
diff --git a/hacks/images/apple.png b/hacks/images/apple.png
new file mode 100644
index 0000000..1cf5ab5
--- /dev/null
+++ b/hacks/images/apple.png
Binary files differ
diff --git a/hacks/images/apple2font.png b/hacks/images/apple2font.png
new file mode 100644
index 0000000..bf2a6cc
--- /dev/null
+++ b/hacks/images/apple2font.png
Binary files differ
diff --git a/hacks/images/atari.png b/hacks/images/atari.png
new file mode 100644
index 0000000..31d5d98
--- /dev/null
+++ b/hacks/images/atari.png
Binary files differ
diff --git a/hacks/images/atm.png b/hacks/images/atm.png
new file mode 100644
index 0000000..acb84c7
--- /dev/null
+++ b/hacks/images/atm.png
Binary files differ
diff --git a/hacks/images/blocktube.png b/hacks/images/blocktube.png
new file mode 100644
index 0000000..49423fa
--- /dev/null
+++ b/hacks/images/blocktube.png
Binary files differ
diff --git a/hacks/images/bob.png b/hacks/images/bob.png
new file mode 100644
index 0000000..8f490df
--- /dev/null
+++ b/hacks/images/bob.png
Binary files differ
diff --git a/hacks/images/brick1.png b/hacks/images/brick1.png
new file mode 100644
index 0000000..f7a9eac
--- /dev/null
+++ b/hacks/images/brick1.png
Binary files differ
diff --git a/hacks/images/brick2.png b/hacks/images/brick2.png
new file mode 100644
index 0000000..9667246
--- /dev/null
+++ b/hacks/images/brick2.png
Binary files differ
diff --git a/hacks/images/bubbles/blood.pov b/hacks/images/bubbles/blood.pov
new file mode 100644
index 0000000..8166f4e
--- /dev/null
+++ b/hacks/images/bubbles/blood.pov
@@ -0,0 +1,24 @@
+#include "colors.inc"
+#include "shapes.inc"
+#include "textures.inc"
+
+/* The following make the field of view as wide as it is high
+ * Thus, you should have the -W and -H command line options
+ * equal to each other. */
+camera {
+ location <5.8, 0, 0>
+ up <0, 1, 0>
+ right <1, 0, 0>
+ look_at <0, 0, 0>
+}
+
+sphere {
+ <0,0,0>, 2.5
+ texture { Blood_Marble
+ scale <2, 2, 2>
+ rotate <0, 20, 0> }
+ finish { Dull }
+}
+
+light_source {<6, 1, 0> color White}
+/* light_source {<6.1, 1, 0> color White} */
diff --git a/hacks/images/bubbles/blood1.png b/hacks/images/bubbles/blood1.png
new file mode 100644
index 0000000..58f16ab
--- /dev/null
+++ b/hacks/images/bubbles/blood1.png
Binary files differ
diff --git a/hacks/images/bubbles/blood10.png b/hacks/images/bubbles/blood10.png
new file mode 100644
index 0000000..a7acca5
--- /dev/null
+++ b/hacks/images/bubbles/blood10.png
Binary files differ
diff --git a/hacks/images/bubbles/blood11.png b/hacks/images/bubbles/blood11.png
new file mode 100644
index 0000000..dd74394
--- /dev/null
+++ b/hacks/images/bubbles/blood11.png
Binary files differ
diff --git a/hacks/images/bubbles/blood2.png b/hacks/images/bubbles/blood2.png
new file mode 100644
index 0000000..de2c4d8
--- /dev/null
+++ b/hacks/images/bubbles/blood2.png
Binary files differ
diff --git a/hacks/images/bubbles/blood3.png b/hacks/images/bubbles/blood3.png
new file mode 100644
index 0000000..fbd4ac4
--- /dev/null
+++ b/hacks/images/bubbles/blood3.png
Binary files differ
diff --git a/hacks/images/bubbles/blood4.png b/hacks/images/bubbles/blood4.png
new file mode 100644
index 0000000..145b673
--- /dev/null
+++ b/hacks/images/bubbles/blood4.png
Binary files differ
diff --git a/hacks/images/bubbles/blood5.png b/hacks/images/bubbles/blood5.png
new file mode 100644
index 0000000..01e1eb7
--- /dev/null
+++ b/hacks/images/bubbles/blood5.png
Binary files differ
diff --git a/hacks/images/bubbles/blood6.png b/hacks/images/bubbles/blood6.png
new file mode 100644
index 0000000..24000b1
--- /dev/null
+++ b/hacks/images/bubbles/blood6.png
Binary files differ
diff --git a/hacks/images/bubbles/blood7.png b/hacks/images/bubbles/blood7.png
new file mode 100644
index 0000000..2574449
--- /dev/null
+++ b/hacks/images/bubbles/blood7.png
Binary files differ
diff --git a/hacks/images/bubbles/blood8.png b/hacks/images/bubbles/blood8.png
new file mode 100644
index 0000000..852a572
--- /dev/null
+++ b/hacks/images/bubbles/blood8.png
Binary files differ
diff --git a/hacks/images/bubbles/blood9.png b/hacks/images/bubbles/blood9.png
new file mode 100644
index 0000000..52104a0
--- /dev/null
+++ b/hacks/images/bubbles/blood9.png
Binary files differ
diff --git a/hacks/images/bubbles/blue.pov b/hacks/images/bubbles/blue.pov
new file mode 100644
index 0000000..86d1ff8
--- /dev/null
+++ b/hacks/images/bubbles/blue.pov
@@ -0,0 +1,22 @@
+#include "colors.inc"
+#include "shapes.inc"
+#include "textures.inc"
+
+/* The following make the field of view as wide as it is high
+ * Thus, you should have the -W and -H command line options
+ * equal to each other. */
+camera {
+ location <5.8, 0, 0>
+ up <0, 1, 0>
+ right <1, 0, 0>
+ look_at <0, 0, 0>
+}
+
+sphere {
+ <0,0,0>, 2.5
+ texture { Blue_Agate
+ scale <0.7, 0.7, 0.7> }
+ finish { phong 1 }
+}
+
+light_source {<6, 1, 0> color White}
diff --git a/hacks/images/bubbles/blue1.png b/hacks/images/bubbles/blue1.png
new file mode 100644
index 0000000..072473e
--- /dev/null
+++ b/hacks/images/bubbles/blue1.png
Binary files differ
diff --git a/hacks/images/bubbles/blue10.png b/hacks/images/bubbles/blue10.png
new file mode 100644
index 0000000..2f1dd71
--- /dev/null
+++ b/hacks/images/bubbles/blue10.png
Binary files differ
diff --git a/hacks/images/bubbles/blue11.png b/hacks/images/bubbles/blue11.png
new file mode 100644
index 0000000..3ab183c
--- /dev/null
+++ b/hacks/images/bubbles/blue11.png
Binary files differ
diff --git a/hacks/images/bubbles/blue2.png b/hacks/images/bubbles/blue2.png
new file mode 100644
index 0000000..8e13a8a
--- /dev/null
+++ b/hacks/images/bubbles/blue2.png
Binary files differ
diff --git a/hacks/images/bubbles/blue3.png b/hacks/images/bubbles/blue3.png
new file mode 100644
index 0000000..427b644
--- /dev/null
+++ b/hacks/images/bubbles/blue3.png
Binary files differ
diff --git a/hacks/images/bubbles/blue4.png b/hacks/images/bubbles/blue4.png
new file mode 100644
index 0000000..6984ecc
--- /dev/null
+++ b/hacks/images/bubbles/blue4.png
Binary files differ
diff --git a/hacks/images/bubbles/blue5.png b/hacks/images/bubbles/blue5.png
new file mode 100644
index 0000000..a977d57
--- /dev/null
+++ b/hacks/images/bubbles/blue5.png
Binary files differ
diff --git a/hacks/images/bubbles/blue6.png b/hacks/images/bubbles/blue6.png
new file mode 100644
index 0000000..0c49aea
--- /dev/null
+++ b/hacks/images/bubbles/blue6.png
Binary files differ
diff --git a/hacks/images/bubbles/blue7.png b/hacks/images/bubbles/blue7.png
new file mode 100644
index 0000000..7a7087d
--- /dev/null
+++ b/hacks/images/bubbles/blue7.png
Binary files differ
diff --git a/hacks/images/bubbles/blue8.png b/hacks/images/bubbles/blue8.png
new file mode 100644
index 0000000..99cc930
--- /dev/null
+++ b/hacks/images/bubbles/blue8.png
Binary files differ
diff --git a/hacks/images/bubbles/blue9.png b/hacks/images/bubbles/blue9.png
new file mode 100644
index 0000000..753c6d2
--- /dev/null
+++ b/hacks/images/bubbles/blue9.png
Binary files differ
diff --git a/hacks/images/bubbles/glass.pov b/hacks/images/bubbles/glass.pov
new file mode 100644
index 0000000..c189771
--- /dev/null
+++ b/hacks/images/bubbles/glass.pov
@@ -0,0 +1,27 @@
+#include "colors.inc"
+#include "shapes.inc"
+#include "textures.inc"
+
+/* The following make the field of view as wide as it is high
+ * Thus, you should have the -W and -H command line options
+ * equal to each other. */
+camera {
+ location <5.8, 0, 0>
+ up <0, 1, 0>
+ right <1, 0, 0>
+ look_at <0, 0, 0>
+}
+
+sphere {
+ <0,0,0>, 2.5
+ texture { Glass
+ scale <0.7, 0.7, 0.7>
+ rotate y*clock
+ normal {bumps 0.4 scale 0.1}
+ finish { Shiny }
+# finish { phong 0.4 }
+ }
+}
+
+light_source {<6, 7, 0> color White}
+light_source {<6.1, 1, 0> color Blue}
diff --git a/hacks/images/bubbles/glass1.png b/hacks/images/bubbles/glass1.png
new file mode 100644
index 0000000..f758dae
--- /dev/null
+++ b/hacks/images/bubbles/glass1.png
Binary files differ
diff --git a/hacks/images/bubbles/glass10.png b/hacks/images/bubbles/glass10.png
new file mode 100644
index 0000000..3a703c0
--- /dev/null
+++ b/hacks/images/bubbles/glass10.png
Binary files differ
diff --git a/hacks/images/bubbles/glass11.png b/hacks/images/bubbles/glass11.png
new file mode 100644
index 0000000..72e1925
--- /dev/null
+++ b/hacks/images/bubbles/glass11.png
Binary files differ
diff --git a/hacks/images/bubbles/glass2.png b/hacks/images/bubbles/glass2.png
new file mode 100644
index 0000000..9c55e21
--- /dev/null
+++ b/hacks/images/bubbles/glass2.png
Binary files differ
diff --git a/hacks/images/bubbles/glass3.png b/hacks/images/bubbles/glass3.png
new file mode 100644
index 0000000..d8d25ca
--- /dev/null
+++ b/hacks/images/bubbles/glass3.png
Binary files differ
diff --git a/hacks/images/bubbles/glass4.png b/hacks/images/bubbles/glass4.png
new file mode 100644
index 0000000..1db6eef
--- /dev/null
+++ b/hacks/images/bubbles/glass4.png
Binary files differ
diff --git a/hacks/images/bubbles/glass5.png b/hacks/images/bubbles/glass5.png
new file mode 100644
index 0000000..e61c9ae
--- /dev/null
+++ b/hacks/images/bubbles/glass5.png
Binary files differ
diff --git a/hacks/images/bubbles/glass6.png b/hacks/images/bubbles/glass6.png
new file mode 100644
index 0000000..f7de0b4
--- /dev/null
+++ b/hacks/images/bubbles/glass6.png
Binary files differ
diff --git a/hacks/images/bubbles/glass7.png b/hacks/images/bubbles/glass7.png
new file mode 100644
index 0000000..0cde9b3
--- /dev/null
+++ b/hacks/images/bubbles/glass7.png
Binary files differ
diff --git a/hacks/images/bubbles/glass8.png b/hacks/images/bubbles/glass8.png
new file mode 100644
index 0000000..26b3f6a
--- /dev/null
+++ b/hacks/images/bubbles/glass8.png
Binary files differ
diff --git a/hacks/images/bubbles/glass9.png b/hacks/images/bubbles/glass9.png
new file mode 100644
index 0000000..7663ea1
--- /dev/null
+++ b/hacks/images/bubbles/glass9.png
Binary files differ
diff --git a/hacks/images/bubbles/jade.pov b/hacks/images/bubbles/jade.pov
new file mode 100644
index 0000000..7c1cb02
--- /dev/null
+++ b/hacks/images/bubbles/jade.pov
@@ -0,0 +1,24 @@
+#include "colors.inc"
+#include "shapes.inc"
+#include "textures.inc"
+
+/* The following make the field of view as wide as it is high
+ * Thus, you should have the -W and -H command line options
+ * equal to each other. */
+camera {
+ location <5.8, 0, 0>
+ up <0, 1, 0>
+ right <1, 0, 0>
+ look_at <0, 0, 0>
+}
+
+sphere {
+ <0,0,0>, 2.5
+ texture { Jade
+ scale <0.7, 0.7, 0.7>
+ rotate y*clock }
+ finish { phong 0.4 }
+}
+
+light_source {<6, 1, 0> color White}
+light_source {<6.1, 1, 0> color White}
diff --git a/hacks/images/bubbles/jade1.png b/hacks/images/bubbles/jade1.png
new file mode 100644
index 0000000..f6b4daa
--- /dev/null
+++ b/hacks/images/bubbles/jade1.png
Binary files differ
diff --git a/hacks/images/bubbles/jade10.png b/hacks/images/bubbles/jade10.png
new file mode 100644
index 0000000..6383cba
--- /dev/null
+++ b/hacks/images/bubbles/jade10.png
Binary files differ
diff --git a/hacks/images/bubbles/jade11.png b/hacks/images/bubbles/jade11.png
new file mode 100644
index 0000000..217794c
--- /dev/null
+++ b/hacks/images/bubbles/jade11.png
Binary files differ
diff --git a/hacks/images/bubbles/jade2.png b/hacks/images/bubbles/jade2.png
new file mode 100644
index 0000000..41f373b
--- /dev/null
+++ b/hacks/images/bubbles/jade2.png
Binary files differ
diff --git a/hacks/images/bubbles/jade3.png b/hacks/images/bubbles/jade3.png
new file mode 100644
index 0000000..516385b
--- /dev/null
+++ b/hacks/images/bubbles/jade3.png
Binary files differ
diff --git a/hacks/images/bubbles/jade4.png b/hacks/images/bubbles/jade4.png
new file mode 100644
index 0000000..a682ca5
--- /dev/null
+++ b/hacks/images/bubbles/jade4.png
Binary files differ
diff --git a/hacks/images/bubbles/jade5.png b/hacks/images/bubbles/jade5.png
new file mode 100644
index 0000000..f4d990f
--- /dev/null
+++ b/hacks/images/bubbles/jade5.png
Binary files differ
diff --git a/hacks/images/bubbles/jade6.png b/hacks/images/bubbles/jade6.png
new file mode 100644
index 0000000..ea8079d
--- /dev/null
+++ b/hacks/images/bubbles/jade6.png
Binary files differ
diff --git a/hacks/images/bubbles/jade7.png b/hacks/images/bubbles/jade7.png
new file mode 100644
index 0000000..d6e6440
--- /dev/null
+++ b/hacks/images/bubbles/jade7.png
Binary files differ
diff --git a/hacks/images/bubbles/jade8.png b/hacks/images/bubbles/jade8.png
new file mode 100644
index 0000000..45d58d3
--- /dev/null
+++ b/hacks/images/bubbles/jade8.png
Binary files differ
diff --git a/hacks/images/bubbles/jade9.png b/hacks/images/bubbles/jade9.png
new file mode 100644
index 0000000..382e9d8
--- /dev/null
+++ b/hacks/images/bubbles/jade9.png
Binary files differ
diff --git a/hacks/images/chromesphere.png b/hacks/images/chromesphere.png
new file mode 100644
index 0000000..7b19f76
--- /dev/null
+++ b/hacks/images/chromesphere.png
Binary files differ
diff --git a/hacks/images/earth.png b/hacks/images/earth.png
new file mode 100644
index 0000000..9819dac
--- /dev/null
+++ b/hacks/images/earth.png
Binary files differ
diff --git a/hacks/images/earth_flat.png b/hacks/images/earth_flat.png
new file mode 100644
index 0000000..e3e1b60
--- /dev/null
+++ b/hacks/images/earth_flat.png
Binary files differ
diff --git a/hacks/images/earth_night.png b/hacks/images/earth_night.png
new file mode 100644
index 0000000..5b0a646
--- /dev/null
+++ b/hacks/images/earth_night.png
Binary files differ
diff --git a/hacks/images/ground.png b/hacks/images/ground.png
new file mode 100644
index 0000000..52c80a8
--- /dev/null
+++ b/hacks/images/ground.png
Binary files differ
diff --git a/hacks/images/hmac.png b/hacks/images/hmac.png
new file mode 100644
index 0000000..6e7bf18
--- /dev/null
+++ b/hacks/images/hmac.png
Binary files differ
diff --git a/hacks/images/iris.png b/hacks/images/iris.png
new file mode 100644
index 0000000..69a8011
--- /dev/null
+++ b/hacks/images/iris.png
Binary files differ
diff --git a/hacks/images/jigglymap.png b/hacks/images/jigglymap.png
new file mode 100644
index 0000000..8da1fcd
--- /dev/null
+++ b/hacks/images/jigglymap.png
Binary files differ
diff --git a/hacks/images/lament512.png b/hacks/images/lament512.png
new file mode 100644
index 0000000..8c5cfab
--- /dev/null
+++ b/hacks/images/lament512.png
Binary files differ
diff --git a/hacks/images/logo-180.png b/hacks/images/logo-180.png
new file mode 100644
index 0000000..852cbea
--- /dev/null
+++ b/hacks/images/logo-180.png
Binary files differ
diff --git a/hacks/images/logo-32.png b/hacks/images/logo-32.png
new file mode 100644
index 0000000..fd588ac
--- /dev/null
+++ b/hacks/images/logo-32.png
Binary files differ
diff --git a/hacks/images/logo-50.png b/hacks/images/logo-50.png
new file mode 100644
index 0000000..8c29766
--- /dev/null
+++ b/hacks/images/logo-50.png
Binary files differ
diff --git a/hacks/images/m6502/amiga.asm b/hacks/images/m6502/amiga.asm
new file mode 100644
index 0000000..3195d4b
--- /dev/null
+++ b/hacks/images/m6502/amiga.asm
@@ -0,0 +1,120 @@
+; super mega amiga emulator :) :) :)
+; (c)by Thorex
+start:
+ lda #$b
+ jsr setcol
+ jsr delay
+ lda #$f
+ jsr setcol
+ jsr delay
+ lda #$1
+ jsr setcol
+ jsr delay
+
+ ldx #0
+cp:
+ lda pic,x
+ sta $200,x
+ lda pic2,x
+ sta $300,x
+ lda pic3,x
+ sta $400,x
+ lda pic4,x
+ sta $500,x
+ dex
+ bne cp
+ rts
+
+setcol:
+ ldx #0
+s:sta $200,x
+ sta $300,x
+ sta $400,x
+ sta $500,x
+ dex
+ bne s
+ rts
+
+delay:
+ ldy #29
+d1:
+ ldx #0
+d2:
+ dex
+ bne d2
+ dey
+ bne d1
+ rts
+
+pic:
+ dcb 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
+ dcb 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
+ dcb 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
+ dcb 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
+ dcb 1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0
+ dcb 0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1
+ dcb 1,1,1,1,1,1,1,0,$e,$e,$e,$e,0,$f,$f,$f
+ dcb $f,$f,$f,$f,0,0,0,$f,0,$e,$e,0,1,1,1,1
+ dcb 1,1,1,1,1,1,1,0,$e,$e,$e,$e,0,$f,$f,$f
+ dcb $f,$f,$f,$f,0,$e,0,$f,0,$e,$e,$e,0,1,1,1
+ dcb 1,1,1,1,1,1,1,0,$e,$e,$e,$e,0,$f,$f,$f
+ dcb $f,$f,$f,$f,0,$e,0,$f,0,$e,$e,$e,$e,0,1,1
+ dcb 1,1,1,1,1,1,1,0,$e,$e,$e,$e,0,$f,$f,$f
+ dcb $f,$f,$f,$f,0,0,0,$f,0,$e,$e,$e,$e,0,1,1
+ dcb 1,1,1,1,1,1,1,0,$e,$e,$e,$e,0,0,0,0
+ dcb 0,0,0,0,0,0,0,0,0,$e,$e,$e,$e,0,1,1
+
+pic2:
+ dcb 1,1,1,1,1,1,1,0,$e,$e,$e,$e,$e,$e,$e,$e
+ dcb $e,$e,$e,$e,$e,$e,$e,$e,$e,$e,$e,$e,$e,0,1,1
+ dcb 1,1,1,1,1,1,1,0,$e,$e,$e,$e,$e,$e,$e,$e
+ dcb $e,$e,$e,$e,$e,$e,$e,$e,$e,$e,$e,$e,$e,0,1,1
+ dcb 1,1,1,1,1,1,1,0,$e,$e,$e,$e,$e,$e,$e,$e
+ dcb $e,$e,$e,$e,$e,$e,$e,$e,$e,$e,$e,$e,$e,0,1,1
+ dcb 1,1,1,1,1,1,1,0,$e,$e,$e,$e,$e,$e,$e,$e
+ dcb $e,$e,$e,$e,$e,$e,$e,$e,$e,$e,$e,$e,$e,0,1,1
+ dcb 1,1,1,1,1,1,1,0,$e,0,0,0,0,0,0,0
+ dcb 0,0,0,0,0,0,0,0,0,0,0,$e,$e,0,1,1
+ dcb 1,1,1,1,1,1,0,0,$e,0,0,1,1,1,1,1
+ dcb 1,1,1,1,1,1,1,1,1,1,0,$e,$e,0,1,1
+ dcb 1,1,1,1,1,0,1,0,$e,0,0,0,0,1,1,$e
+ dcb $e,$e,1,$e,1,$e,1,$e,1,1,0,$e,$e,0,1,1
+ dcb 1,1,1,0,0,1,1,0,0,1,0,1,1,0,1,1
+ dcb 1,1,1,1,1,1,1,1,1,1,0,$e,$e,0,1,1
+
+pic3:
+ dcb 1,1,0,1,1,1,0,1,1,1,1,0,0,1,1,1
+ dcb $e,1,$e,1,$e,1,$e,1,1,1,0,$e,$e,0,1,1
+ dcb 1,0,1,1,0,1,1,1,1,1,1,1,0,1,1,0
+ dcb 1,1,1,1,1,1,1,1,1,1,0,$e,$e,0,1,1
+ dcb 1,0,1,0,1,1,1,1,1,1,0,0,1,1,0,$f
+ dcb 0,1,0,1,1,1,0,0,0,1,0,$e,$e,0,1,1
+ dcb 1,0,1,1,1,1,1,1,1,1,0,1,1,1,1,0
+ dcb 0,$f,1,0,1,$f,1,0,1,1,0,$e,$e,0,1,1
+ dcb 1,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0
+ dcb 0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1
+ dcb 1,0,1,1,1,1,1,1,1,1,1,0,1,1,0,0
+ dcb 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
+ dcb 1,0,1,1,1,1,1,1,1,1,1,0,1,0,0,1
+ dcb 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
+ dcb 1,0,1,1,1,1,1,1,1,1,1,0,1,0,1,1
+ dcb 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
+
+pic4:
+ dcb 1,0,1,1,1,1,1,1,1,1,1,0,1,0,0,0
+ dcb 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
+ dcb 1,0,1,1,1,1,1,1,0,0,0,0,0,1,1,0
+ dcb 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
+ dcb 1,0,1,1,1,1,1,1,0,1,1,1,0,0,0,1
+ dcb 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
+ dcb 1,1,0,1,1,1,1,1,0,1,1,1,0,1,1,1
+ dcb 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
+ dcb 1,1,0,1,1,1,1,1,0,1,1,1,0,1,1,1
+ dcb 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
+ dcb 1,1,0,1,1,1,1,1,0,1,1,1,0,1,1,1
+ dcb 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
+ dcb 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
+ dcb 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
+ dcb 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
+ dcb 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
+ \ No newline at end of file
diff --git a/hacks/images/m6502/breakout.asm b/hacks/images/m6502/breakout.asm
new file mode 100644
index 0000000..a0fa694
--- /dev/null
+++ b/hacks/images/m6502/breakout.asm
@@ -0,0 +1,195 @@
+; Brick Out by Blake Ramsdell <blaker@gmail.com> http://www.blakeramsdell.com
+
+; A poor attempt at brick out with no player involved. Maybe someday I'll
+; let you play it, or you can view this as an exercise for the reader to put
+; in a paddle that is user-controlled.
+
+; I guess this is Copyright (C) 2007 Blake Ramsdell, and you have a license to
+; do whatever you want with it, just tell me what you did and give me a
+; mention. If you want to sell it, and you make a billion dollars, then good
+; for you. You might at least throw a party and invite me.
+
+; The gist of it is pretty simple -- you have a ball, and the ball has an X
+; and a Y velocity. When it hits something, it bounces off of it. If the thing
+; that it hits is not a wall, then it erases it. Pretty dead-simple behavior.
+
+; I don't like the vertical movement -- there's a shortcut in here somewhere
+; to make it less computationally expensive I think. Right now it just does a
+; two byte add and subtract of $20.
+
+; The ball motion is also a bit weird looking. I don't know if this is an
+; artifact of the simulation environment combined with a normal tearing
+; artifact related to refresh or what.
+
+; Blake Ramsdell, May 2007
+
+init:
+ lda #$fe
+ sta $2 ; X velocity (0 = fast, ff = slow)
+ ; (low bit is direction, 0 = down or right, 1 = up or left)
+ lda #$ee
+ sta $3 ; Y velocity
+
+drawbox:
+ lda #0 ; Use $0-$1 as a screen address for drawing the field
+ sta $0
+ lda #2
+ sta $1
+
+ ldx #$20 ; Loop $20 times
+boxloop:
+ lda #2 ; Line color (red)
+ sta $1ff,x ; Top line
+ sta $5df,x ; Bottom line
+ ldy #0
+ sta ($0),y ; Left line
+ ldy #$1f
+ sta ($0),y ; Right line
+
+ cpx #$1 ; If we're just before the bottom line...
+ beq noblocks ; Don't draw any blocks there
+
+
+ lda #3 ; First block for this row, Cyan in color
+ ldy #$17 ; It's at X position $17
+ sta ($0),y ; Draw it
+
+ lda #4 ; Second block for this row, Purple in color
+ iny ; It's at the next X position
+ sta ($0),y ; Draw it
+
+ lda #5 ; Third block for this row, Green in color
+ iny ; It's at the next X position
+ sta ($0),y ; Draw it
+
+ lda #6 ; Fourth block for this row, Blue in color
+ iny ; It's at the next X position
+ sta ($0),y ; Draw it
+
+
+noblocks:
+ clc ; Get ready to increment the row, clear the carry for add
+ lda $0 ; Get the low byte
+ adc #$20 ; Add $20 to it for the next row
+ sta $0 ; Put it back
+ lda $1 ; Get the high byte
+ adc #0 ; Factor in the carry
+ sta $1 ; Put it back
+
+ dex ; Decrement the loop counter
+ bne boxloop ; Do it again unless it's zero
+
+ ldx $2 ; Load the X velocity
+ ldy $3 ; Load the Y velocity
+
+ lda #$44 ; Pick a start point
+ sta $0 ; Ball position low
+ lda #$02
+ sta $1 ; Ball position high
+
+drawball:
+ txa ; Preserve X
+ pha
+ lda #1 ; Ball color (white)
+ ldx #0 ; Clear X for indirect addressing for writing to screen
+ sta ($0,x) ; Draw the ball
+ pla ; Restore X
+ tax
+
+decloop:
+ dex ; Decrement the X velocity
+ beq updatexpos ; If it's zero, time to adjust X
+ dey ; Decrement the Y velocity
+ bne decloop ; If it's not zero, loop, otherwise fall through to adjust Y
+
+updateypos:
+ txa ; Preserve X
+ pha
+ jsr clearball ; Put background over the current ball position
+updateyposnoclear:
+ lda $3 ; Get the Y velocity
+ and #1 ; See if it's down
+ bne moveup ; If not, then it's up, otherwise fall through to down
+
+movedown:
+ clc ; Prepare for moving to the next Y line and doing the add
+ lda $0 ; Low byte of the current ball position
+ adc #$20 ; Next row
+ sta $0 ; Put it back
+ bcc ycollision ; If no carry, go on to check for collision
+ inc $1 ; Had a carry, fix the high byte of the address
+ bne ycollision ; Z flag is always clear ($1 will never be zero)
+
+moveup:
+ sec ; Prepare for moving to the previous Y line and subtracting
+ lda $0 ; Low byte of the current ball position
+ sbc #$20 ; Previous row
+ sta $0 ; Put it back
+ lda $1 ; High byte
+ sbc #$0 ; Factor out the carry
+ sta $1 ; Put it back
+
+ycollision:
+ ldx #0 ; Prepare for indirect read
+ lda ($0,x) ; Get the current pixel at the new ball position
+ bne ycollided ; If it's not zero (the background color) then we hit
+ ldy $3 ; Otherwise, load up the current Y velocity
+ pla ; Restore the X velocity
+ tax
+ jmp drawball ; Back to the top
+
+ycollided:
+ cmp #$2 ; Border color?
+ beq ycollided2 ; If so, then we just bounce, don't eat a brick
+
+ ; Erase brick
+ lda #0 ; Background color (black)
+ sta ($0,x) ; Erase it
+
+ycollided2:
+ lda #1 ; Get ready to change direction
+ eor $3 ; Flip the low bit on the Y velocity (change direction)
+ sta $3 ; Put it back
+ jmp updateyposnoclear ; Go back to make sure we didn't hit anything else
+
+updatexpos:
+ jsr clearball ; Put background over the current ball position
+updatexposnoclear:
+ lda $2 ; Get the current X velocity
+ and #1 ; See if it's right by testing the low bit
+ bne moveleft ; If not, move left
+
+moveright:
+ inc $0 ; Move right
+ bne xcollision ; Z flag is always clear
+
+moveleft:
+ dec $0 ; Move left
+
+xcollision:
+ ldx #0 ; Prepare for indirect read
+ lda ($0,x) ; Get the current pixel at the new ball position
+ bne xcollided ; If it's not zero (the background color) then we hit
+ ldx $2 ; Otherwise, load up the current X velocity
+ jmp drawball ; Back to the top
+
+xcollided:
+ cmp #$2 ; Border color?
+ beq xcollided2 ; If so, then we just bounce, don't eat a brick
+
+ ; Erase brick
+ lda #0 ; Background color (black)
+ sta ($0,x) ; Erase it
+
+xcollided2:
+ lda #1 ; Get ready to change direction
+ eor $2 ; Flip the low bit on the X velocity (change direction)
+ sta $2 ; Put it back
+ jmp updatexposnoclear ; Go back to make sure we didn't hit anything else
+
+clearball:
+ lda #0 ; Background color (black)
+ tax ; Clear X for indirect
+ sta ($0,x) ; Black out the ball
+ rts ; Return to caller
+
diff --git a/hacks/images/m6502/byterun.asm b/hacks/images/m6502/byterun.asm
new file mode 100644
index 0000000..848b5c9
--- /dev/null
+++ b/hacks/images/m6502/byterun.asm
@@ -0,0 +1,100 @@
+; testing byterun compression
+
+start:
+ lda #<logo
+ sta $0
+ lda #>logo
+ sta $1
+ lda #$00
+ sta $2
+ lda #$02
+ sta $3
+
+decrunchLoop:
+ lda $3
+ cmp #$6
+ bne moreWork
+ rts
+moreWork:
+ ldy #0
+ lda ($0),y
+ cmp #$ff
+ bne notCrunched
+ iny
+ lda ($0),y ; repeat #
+ sta $4
+ iny
+ lda ($0),y ; color
+ ldy $4
+drawLoop:
+ ldx #0
+ sta ($2,x)
+ jsr nextPixel
+ dey
+ bne drawLoop
+ jsr getNextByte
+ jsr getNextByte
+ jmp decrunchLoop
+notCrunched:
+ ldx #0
+ sta ($2,x)
+ jsr nextPixel
+ jsr getNextByte
+ jmp decrunchLoop
+
+getNextByte:
+ inc $0
+ lda $0
+ cmp #$00
+ bne notHi
+ inc $1
+notHi:
+ rts
+
+nextPixel:
+ inc $2
+ ldx $2
+ cpx #$00
+ bne notNextLine
+ inc $3
+notNextLine:
+ rts
+
+
+logo:
+ dcb $ff,43,1,$f,$f,$f,$c,$f,$f,$f,$ff,24,1,$c,$f,$c,0
+ dcb $c,$f,$c,$ff,24,1,0,$f,$c,0,$c,$f,$c,$ff,24,1
+ dcb $c,$f,$c,0,$c,$f,$c,$ff,24,1,0,$f,$c,0,$c,$f,$c
+ dcb $ff,24,1,$c,$f,0,0,$c,$f,$c,$ff,24,1,0,$f,$c,0
+ dcb $c,$f,$c,$ff,24,1,0,$f,$c,0,$c,$f,0,$ff,24,1
+ dcb 0,$f,$c,0,$c,$f,0,$ff,23,1,$f,0,$f,$c,0,$c,$f,0,$f
+ dcb $ff,22,1,$c,0,1,$c,0,$c,$f,0,$c,$ff,21,1
+ dcb $f,0,0,1,0,0,$c,1,0,0,$ff,21,1,$c,0,$c,1,$c,0
+ dcb $c,1,$c,0,$c,$ff,19,1,$f,0,0,$f,1,$c,0
+ dcb $c,1,$f,0,0,$f,$ff,17,1,$f,0,0,0,1,1,$c,0
+ dcb $c,1,1,0,0,0,$ff,16,1,$f,0,0,0,$f,1,1,0,0
+ dcb $c,1,1,$f,0,0,0,$f,$ff,13,1
+ dcb $c,0,0,0,$c,1,1,1,$c,0,$c,1,1,1,$c,0,0,0,$c
+ dcb $ff,10,1,$c,0,0,0,0,$c,1,1,1,1,0,0
+ dcb $c,1,1,1,1,0,0,0,0,0,$c,$ff,8,1
+ dcb 0,0,0,0,$c,1,1,1,1,1,0,0
+ dcb $c,1,1,1,1,1,$c,0,0,0,0,1,1,1,1,1
+ dcb 1,1,1,1,0,0,$c,1,1,1,1,1,1,1,$c,0
+ dcb $c,1,1,1,1,1,1,$f,$c,0,0,$ff,18,1,$f
+ dcb $ff,53,1,0,$f,1,0,0,0,0,0,$f,1,$c
+ dcb $c,1,1,1,$c,0,0,0,1,1,0,$f,$f,1,1,1
+ dcb 1,1,1,1,$c,0,0,1,1,1,0,$f,1,1,$f,0
+ dcb 0,$f,1,1,0,$f,1,$c,$c,1,0,$f,1,1,1,1
+ dcb 1,1,1,1,0,$f,0,$f,1,1,0,$f,1,1,$f,$c
+ dcb $c,$c,1,1,0,1,1,$f,0,1,0,$f,1,1,1,1
+ dcb 1,1,1,1,0,1,$c,$f,1,1,$c,$f,1,1,0,$f
+ dcb $f,0,1,1,0,$f,$f,0,$f,1,0,$f,1,1,1,1
+ dcb 1,1,1,$c,0,$c,0,0,1,1,0,$f,1,1,0,$c
+ dcb $c,0,$f,1,0,$f,0,$f,1,1,0,$f,1,1,1,1
+ dcb 1,1,1,0,$c,$f,$f,0,$f,1,$c,$f,1,$c,$c,$f
+ dcb $f,$c,$c,1,0,1,$f,$c,1,1,0,$f,1,1,1,1
+ dcb 1,1,$f,0,1,1,1,$c,$c,1,0,$f,1,0,$f,1
+ dcb 1,$f,0,1,0,$f,1,0,$f,1,0,$f,$ff,16,1
+ dcb $f,$ff,5,1,$f,1,1,1,$f,$ff,38,1
+
+
diff --git a/hacks/images/m6502/cellular-30.asm b/hacks/images/m6502/cellular-30.asm
new file mode 100644
index 0000000..2439561
--- /dev/null
+++ b/hacks/images/m6502/cellular-30.asm
@@ -0,0 +1,67 @@
+; Rule 30 cellular automata
+; by D.S.
+
+ lda #1
+ sta $20f
+
+l3:
+ lda #2
+ sta 3
+ sta 5
+ sta 7
+ lda #1
+ sta 9
+ sta 6
+ lda #255
+ sta 8
+ lda #0
+ sta 2
+ lda #32
+ sta 4
+ ldx #30
+l1:
+ ldy #31
+
+l2:
+ lda ($2),y
+ ora ($6),y
+ eor ($8),y
+ sta ($4),y
+ dey
+ bpl l2
+
+ lda $2
+ adc #32
+ sta $2
+ lda $3
+ adc #0
+ sta $3
+ lda $4
+ adc #32
+ sta $4
+ lda $5
+ adc #0
+ sta $5
+ lda $6
+ adc #32
+ sta $6
+ lda $7
+ adc #0
+ sta $7
+ lda $8
+ adc #32
+ sta $8
+ lda $9
+ adc #0
+ sta $9
+ dex
+ bpl l1
+
+ ldy #31
+l4:
+ lda ($2),y
+ sta $200,y
+ dey
+ bpl l4
+
+ jmp l3
diff --git a/hacks/images/m6502/cellular-600.asm b/hacks/images/m6502/cellular-600.asm
new file mode 100644
index 0000000..db5497c
--- /dev/null
+++ b/hacks/images/m6502/cellular-600.asm
@@ -0,0 +1,209 @@
+; Code 600 cellular automata - by D.S.
+ lda #1
+ sta $22f
+
+l3:
+ ldy #29
+
+l2:
+ lda $220,y
+ adc $221,y
+ adc $222,y
+ tax
+ lda rule,x
+ sta $201,y
+ dey
+ bpl l2
+
+ ldy #$c0
+ sec
+ll2:
+ lda $503,y
+ sta $523,y
+ sta $53b,y
+ lda $504,y
+ sta $524,y
+ sta $53a,y
+ lda $505,y
+ sta $525,y
+ sta $539,y
+ lda $506,y
+ sta $526,y
+ sta $538,y
+ lda $507,y
+ sta $527,y
+ sta $537,y
+ lda $508,y
+ sta $528,y
+ sta $536,y
+ lda $509,y
+ sta $529,y
+ sta $535,y
+ lda $50a,y
+ sta $52a,y
+ sta $534,y
+ lda $50b,y
+ sta $52b,y
+ sta $533,y
+ lda $50c,y
+ sta $52c,y
+ sta $532,y
+ lda $50d,y
+ sta $52d,y
+ sta $531,y
+ lda $50e,y
+ sta $52e,y
+ sta $530,y
+ lda $50f,y
+ sta $52f,y
+ tya
+ adc #$df
+ tay
+ bcs ll2
+
+ ldy #$e0
+ sec
+ll3:
+ lda $403,y
+ sta $423,y
+ sta $43b,y
+ lda $404,y
+ sta $424,y
+ sta $43a,y
+ lda $405,y
+ sta $425,y
+ sta $439,y
+ lda $406,y
+ sta $426,y
+ sta $438,y
+ lda $407,y
+ sta $427,y
+ sta $437,y
+ lda $408,y
+ sta $428,y
+ sta $436,y
+ lda $409,y
+ sta $429,y
+ sta $435,y
+ lda $40a,y
+ sta $42a,y
+ sta $434,y
+ lda $40b,y
+ sta $42b,y
+ sta $433,y
+ lda $40c,y
+ sta $42c,y
+ sta $432,y
+ lda $40d,y
+ sta $42d,y
+ sta $431,y
+ lda $40e,y
+ sta $42e,y
+ sta $430,y
+ lda $40f,y
+ sta $42f,y
+ tya
+ adc #$df
+ tay
+ bcs ll3
+
+ ldy #$e0
+ sec
+ll4:
+ lda $303,y
+ sta $323,y
+ sta $33b,y
+ lda $304,y
+ sta $324,y
+ sta $33a,y
+ lda $305,y
+ sta $325,y
+ sta $339,y
+ lda $306,y
+ sta $326,y
+ sta $338,y
+ lda $307,y
+ sta $327,y
+ sta $337,y
+ lda $308,y
+ sta $328,y
+ sta $336,y
+ lda $309,y
+ sta $329,y
+ sta $335,y
+ lda $30a,y
+ sta $32a,y
+ sta $334,y
+ lda $30b,y
+ sta $32b,y
+ sta $333,y
+ lda $30c,y
+ sta $32c,y
+ sta $332,y
+ lda $30d,y
+ sta $32d,y
+ sta $331,y
+ lda $30e,y
+ sta $32e,y
+ sta $330,y
+ lda $30f,y
+ sta $32f,y
+ tya
+ adc #$df
+ tay
+ bcs ll4
+
+
+ ldy #$e0
+ sec
+ll1:
+ lda $203,y
+ sta $223,y
+ sta $23b,y
+ lda $204,y
+ sta $224,y
+ sta $23a,y
+ lda $205,y
+ sta $225,y
+ sta $239,y
+ lda $206,y
+ sta $226,y
+ sta $238,y
+ lda $207,y
+ sta $227,y
+ sta $237,y
+ lda $208,y
+ sta $228,y
+ sta $236,y
+ lda $209,y
+ sta $229,y
+ sta $235,y
+ lda $20a,y
+ sta $22a,y
+ sta $234,y
+ lda $20b,y
+ sta $22b,y
+ sta $233,y
+ lda $20c,y
+ sta $22c,y
+ sta $232,y
+ lda $20d,y
+ sta $22d,y
+ sta $231,y
+ lda $20e,y
+ sta $22e,y
+ sta $230,y
+ lda $20f,y
+ sta $22f,y
+ tya
+ adc #$df
+ tay
+ bcs ll1
+
+ jmp l3
+
+; Rules, uncomment only one line of the following.
+rule:
+ dcb 0,2,0,1,1,2,0 ; CODE 600
+; dcb 0,2,1,0,2,0,0 ; CODE 177
+; dcb 0,1,2,0,2,0,1; CODE 912 \ No newline at end of file
diff --git a/hacks/images/m6502/colors.asm b/hacks/images/m6502/colors.asm
new file mode 100644
index 0000000..2097f7a
--- /dev/null
+++ b/hacks/images/m6502/colors.asm
@@ -0,0 +1,46 @@
+; submitted by Anonymous
+
+ jmp $700
+ *=$700
+ ldx #0
+ ldy #0
+ ;init screen
+ lda #0
+ sta $0
+ sta $3
+ lda #2
+ sta $1
+loop:
+ lda colors,x
+ bpl ok
+ inc $0
+ ldx #0
+ lda colors,x
+ok:
+ inx
+ sta ($0),y
+ iny
+ bne ok2
+ inc $1
+ lda $1
+ cmp #6
+ beq end
+ok2:
+ jmp loop
+end:
+ inc $3
+ lda $3
+ and #$3f
+ tax
+ ldy #0
+ lda #2
+ sta $1
+ sty $0
+ jmp loop
+
+colors:
+dcb 0,2,0,2,2,8,2,8,8,7,8,7,7,1,7,1,1,7,1,7,7,8,7,8
+dcb 8,2,8,2,2,0,2,0,2,2,8,2,8,8,7,8,7,7,1,7,1,1,1,1
+dcb 1,1,1,1,7,1,7,7,8,7,8,8,2,8,2,2,255
+
+
diff --git a/hacks/images/m6502/crunch6502.asm b/hacks/images/m6502/crunch6502.asm
new file mode 100644
index 0000000..56ea507
--- /dev/null
+++ b/hacks/images/m6502/crunch6502.asm
@@ -0,0 +1,292 @@
+;; Show "6502" on the screen waving up and down.
+;; Jeremy English 29-December-2007
+;;
+;; Each digit is stored as a pattern of vertical bits.
+;; For example:
+;;
+;; 111111 This is the digit six. We think of the digit
+;; 111111 by it's column pattern. The column patterns
+;; 110000 are labeled at the bottom of the example.
+;; 110000 Pattern B is 1100110011. The basic algorithm
+;; 111111 is that we get the pattern, paint the first
+;; 111111 bit (1 foreground, 0 background) then dec y
+;; 110011 and get the next bit.
+;; 110011
+;; 111111 The pattern for each digit is:
+;; 111111 6 = AABBCC
+;; ------ 5 = DDBBCC
+;; AABBCC 0 = AAEEAA
+;; 2 = CCBBDD
+
+;; Addresses $0 and $1 are used by the paint subroutine.
+;; Addresses $2 through $6 are used by the display pattern subroutine
+;; Address $7 is used in the main loop
+;; Address $8 through $1a are used for the start positions
+;; Address $1b is used by the display pattern subroutine
+;; Address $1c is used as the color row offset.
+;; Addresses $d0 through $ef store the font table
+
+jmp init_font_table
+start:
+
+;; Initialize the pointers to the start position.
+lda #<y_start_pos1
+sta $b
+lda #>y_start_pos1
+sta $c
+lda #<y_start_pos2
+sta $d
+lda #>y_start_pos2
+sta $e
+lda #<y_start_pos3
+sta $f
+lda #>y_start_pos3
+sta $10
+lda #<y_start_pos4
+sta $11
+lda #>y_start_pos4
+sta $12
+lda #<y_start_pos5
+sta $13
+lda #>y_start_pos5
+sta $14
+lda #<y_start_pos4
+sta $15
+lda #>y_start_pos4
+sta $16
+lda #<y_start_pos3
+sta $17
+lda #>y_start_pos3
+sta $18
+lda #<y_start_pos2
+sta $19
+lda #>y_start_pos2
+sta $1a
+
+
+lda #0 ; start position to use
+sta $8
+
+main_loop:
+inc $1c ; increment the color offset.
+inc $1d ; increment the starting x position
+ldy $8 ; load the current start position index
+ldx $b,y ; get the lsb from the table
+txa
+sta $9 ; store the msb of the start position pointer
+iny ; move to the next position in the table
+ldx $b,y ; get the msb from the table
+txa
+sta $a ; store the lsb of the start position pointer
+iny ; move the index up by one
+tya
+cmp #$10 ; have we looked at all 16 start positions?
+bne store_idx ; if not then keep the index and store it
+lda #0 ; set the index back to zero
+store_idx:
+sta $8 ; save the index back in memory
+
+ldy #0
+lda #$ff
+sta $4 ; initialize the column to FF
+display_loop:
+ inc $4 ; increment the column
+ ldx $d0,y ; load the lsb from the font table
+ stx $2
+ iny
+ ldx $d0,y ; load the msb from the font table
+ stx $3
+ sty $7 ; save y in memory
+ jsr dis_pat ; Jump to the display pattern subroutine.
+ inc $4 ; increment the column
+ jsr dis_pat ; Each pattern gets painted twice so we have a thicker font
+ ldy $7 ; get y out of memory
+ iny ; increment the index
+ tya
+ cmp #$20 ; Did we display all of the columns?
+ bne display_loop ;if not continue
+jmp main_loop
+rts
+
+init_font_table:
+ ;;Setup a table in the zero page that contains the string "6502"
+ lda #<pattern_a ;start with digit 6. It's pattern is aabbcc
+ sta $d0
+ lda #>pattern_a
+ sta $d1
+ lda #<pattern_b
+ sta $d2
+ lda #>pattern_b
+ sta $d3
+ lda #<pattern_c
+ sta $d4
+ lda #>pattern_c
+ sta $d5
+ lda #<pattern_null ;We want to space everything out with blanks
+ sta $d6
+ lda #>pattern_null
+ sta $d7
+ lda #<pattern_d ;load memory for digit 5 ddbbcc
+ sta $d8
+ lda #>pattern_d
+ sta $d9
+ lda #<pattern_b
+ sta $da
+ lda #>pattern_b
+ sta $db
+ lda #<pattern_c
+ sta $dc
+ lda #>pattern_c
+ sta $dd
+ lda #<pattern_null
+ sta $de
+ lda #>pattern_null
+ sta $df
+ lda #<pattern_a ;load memory for digit 0 aaeeaa
+ sta $e0
+ lda #>pattern_a
+ sta $e1
+ lda #<pattern_e
+ sta $e2
+ lda #>pattern_e
+ sta $e3
+ lda #<pattern_a
+ sta $e4
+ lda #>pattern_a
+ sta $e5
+ lda #<pattern_null
+ sta $e6
+ lda #>pattern_null
+ sta $e7
+ lda #<pattern_c ;load memory for digit 2 ccbbdd
+ sta $e8
+ lda #>pattern_c
+ sta $e9
+ lda #<pattern_b
+ sta $ea
+ lda #>pattern_b
+ sta $eb
+ lda #<pattern_d
+ sta $ec
+ lda #>pattern_d
+ sta $ed
+ lda #<pattern_null
+ sta $ee
+ lda #>pattern_null
+ sta $ef
+ jmp start
+
+
+;; Display a pattern on the screen. The pattern to use is
+;; stored at $2 and $3. The current column is stored at $4.
+dis_pat:
+ ldy $4 ; Load the current column into y
+ lda ($9),y ; Get the start position for y
+ tay
+ sty $5 ; Store the starting position in memory
+ ldy #0 ; We have 12 bits that need to be painted
+dis_pat_loop:
+ lda ($2),y ; get a bit from the pattern
+ pha ; save the color on the stack
+ tya ; move the index into the accumulator
+ clc ; clear the carry
+ adc $5 ; add the starting position to the index
+ sty $6 ; store the index
+ tay ; The calculated y position
+ ldx $4 ; The x position is the current column
+ pla ; pop the color off of the stack
+ beq go_paint ; black just paint it
+ clc ; get rid of any carry bit
+ sty $1b ; save the y coordinate
+ tya
+ clc
+ adc $1c ; add the color offset
+ and #$7 ; make sure the look up is in range
+ tay ; move the new index into y so we can look up the color
+ lda color_row,y ; if not black get the row color
+ ldy $1b ; restore the y coordinate
+go_paint:
+ jsr paint ; paint the pixel on the screen
+ ldy $6 ; get the index out of memory
+ iny ; increment the index
+ tya
+ cmp #12 ; Have we looked at all of the bits?
+ bne dis_pat_loop ; if not then continue looking
+ rts ; else return from the subroutine
+
+;; Paint - Put a pixel on the screen by using the x registry for
+;; the x position, the y registry for the y position and
+;; the accumulator for the color.
+paint:
+ pha ; Save the color
+ lda yl,y ; Get the LSB of the memory address for y
+ sta $0 ; Store it first
+ lda yh,y ; Get the MSB of the memory address for y
+ sta $1 ; Store it next
+ txa ; We want x in the y registry so we transfer it to A
+ tay ; and then A into y.
+ pla ; Pop the color off of the stack
+ sta ($0),y ; Store the color at the correct y + x address.
+ rts ; return from the subroutine.
+
+;; Paint uses the following two tables to look up the
+;; correct address for a y coordinate between
+;; 0 and 31.
+
+;; Y cord MSB
+yh:
+ dcb $02, $02, $02, $02, $02, $02, $02, $02
+ dcb $03, $03, $03, $03, $03, $03, $03, $03
+ dcb $04, $04, $04, $04, $04, $04, $04, $04
+ dcb $05, $05, $05, $05, $05, $05, $05, $05
+;; Y cord LSB
+yl:
+ dcb $00, $20, $40, $60, $80, $a0, $c0, $e0
+ dcb $00, $20, $40, $60, $80, $a0, $c0, $e0
+ dcb $00, $20, $40, $60, $80, $a0, $c0, $e0
+ dcb $00, $20, $40, $60, $80, $a0, $c0, $e0
+
+;; A zero is on the end of each pattern to clean up
+;; residue left by waving.
+pattern_a:
+ dcb 0,1,1,1,1,1,1,1,1,1,1,0
+
+pattern_b:
+ dcb 0,1,1,0,0,1,1,0,0,1,1,0
+
+pattern_c:
+ dcb 0,1,1,0,0,1,1,1,1,1,1,0
+
+pattern_d:
+ dcb 0,1,1,1,1,1,1,0,0,1,1,0
+
+pattern_e:
+ dcb 0,1,1,0,0,0,0,0,0,1,1,0
+
+pattern_null:
+ dcb 0,0,0,0,0,0,0,0,0,0,0,0
+
+;; Table that store the current start position
+;; of each y column.
+y_start_pos1:
+ dcb 10,10,9,9,8,8,7,7,6,6,7,7,8,8,9,9,10,10,9,9,8,8,7,7
+ dcb 6,6,7,7,8,8
+
+y_start_pos2:
+ dcb 9,9,8,8,8,8,8,8,7,7,8,8,8,8,8,8,9,9,8,8,8,8,8,8
+ dcb 7,7,8,8,8,8
+
+y_start_pos3:
+ dcb 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8
+ dcb 8,8,8,8,8,8
+
+y_start_pos4:
+ dcb 7,7,8,8,8,8,8,8,9,9,8,8,8,8,8,8,7,7,8,8,8,8,8,8
+ dcb 9,9,8,8,8,8
+
+y_start_pos5:
+ dcb 6, 6,7,7,8,8,9,9,10,10,9,9,8,8,7,7, 6, 6,7,7,8,8,9,9
+ dcb 10,10,9,9,8,8
+
+color_row:
+ dcb $7,$8,$9,$2,$4,$6,$e,$3,$d,$5
diff --git a/hacks/images/m6502/demoscene.asm b/hacks/images/m6502/demoscene.asm
new file mode 100644
index 0000000..fdd9361
--- /dev/null
+++ b/hacks/images/m6502/demoscene.asm
@@ -0,0 +1,457 @@
+
+start:
+ ldx #0
+c:lda bottombar,x
+ cmp #$ff
+ beq init
+ sta $4e0,x
+ sta $5e0,x
+ inx
+ jmp c
+init:
+ jsr initDraw
+ lda #0
+ sta $10 ; scrptr
+ sta $11 ; txtptr
+loop:
+ jsr drawMain
+ jsr putfont
+ jsr scrollarea
+ jmp loop
+
+scrollarea:
+ ldx #0
+g:lda $521,x
+ sta $520,x
+ lda $541,x
+ sta $540,x
+ lda $561,x
+ sta $560,x
+ lda $581,x
+ sta $580,x
+ lda $5a1,x
+ sta $5a0,x
+ inx
+ cpx #31
+ bne g
+ rts
+
+putfont:
+ lda $10 ; scrptr
+ cmp #0
+ bne noNext
+ inc $11
+ ldx $11
+ lda scrolltext,x
+ tax
+ lda fontSize,x
+ sta $10
+noNext:
+ dec $10
+ ldx $11
+ lda scrolltext,x
+ cmp #$ff
+ bne notResetText
+ lda #0
+ sta $10
+ sta $11
+ rts
+
+notResetText:
+ asl
+ tax
+ lda fontlookup,x
+ sta $2
+ inx
+ lda fontlookup,x
+ sta $3
+ lda #<fonts
+ clc
+ adc $2
+ sta $0
+ lda #>fonts
+ adc $3
+ sta $1
+ ldy $10
+ lda ($00),y
+ sta $53f
+ tya
+ clc
+ adc #6
+ tay
+ lda ($00),y
+ sta $55f
+ tya
+ clc
+ adc #6
+ tay
+ lda ($00),y
+ sta $57f
+ tya
+ clc
+ adc #6
+ tay
+ lda ($00),y
+ sta $59f
+ tya
+ clc
+ adc #6
+ tay
+ lda ($00),y
+ sta $5bf
+ rts
+
+initDraw:
+ lda #<picture
+ sta $20
+ lda #>picture
+ sta $21
+ lda #$00
+ sta $22
+ lda #$02
+ sta $23
+ ldx #$0
+ rts
+drawMain:
+ ldx #0
+ lda ($20,x)
+ cmp #$ff
+ beq done
+ sta ($22,x)
+ inc $20
+ lda $20
+ cmp #$00
+ bne n1
+ inc $21
+n1:
+ inc $22
+ lda $22
+ cmp #$00
+ bne done
+ lda $23
+ cmp #$05
+ beq done
+ inc $23
+done:
+ rts
+
+picture:
+ dcb 0,0,0,0,0,0,0,0,0,$b,$b,$c,$f,$f,$f,$f
+ dcb $f,$b,0,0,0,$b,$b,$c,$c,$f,$f,$b,0,0,0,0
+ dcb 0,0,0,0,0,0,0,0,0,$b,$c,$c,$f,$c,$f,$f
+ dcb $b,$b,$b,$b,$b,0,$b,$b,$c,$f,$f,$c,0,0,0,0
+ dcb 0,0,0,0,0,0,0,$b,0,$c,$b,$f,$c,$f,$f,$c
+ dcb $c,$b,0,$b,$c,$c,$c,$f,$f,1,$f,$c,$b,0,0,0
+ dcb 0,0,0,0,0,0,0,0,$b,$b,$c,$c,$c,$f,$f,$f
+ dcb $c,$c,$c,$c,$c,$c,$f,$c,$f,$f,$f,$f,$b,0,0,0
+ dcb 0,0,0,0,0,0,0,$b,0,0,$b,$c,$c,$f,$f,$f
+ dcb $f,$c,$f,$f,$f,$f,$f,$f,$f,1,$f,$f,$c,0,0,0
+ dcb 0,0,0,0,0,0,0,0,0,$b,$b,$b,$c,$f,$f,1
+ dcb $f,$f,$c,$f,$f,$f,1,$f,$f,$f,$f,$f,$f,0,0,0
+ dcb 0,0,0,0,0,0,0,0,0,$b,$b,$b,$b,$c,$f,1
+ dcb $f,$f,$f,$f,$f,$f,$f,$f,1,$f,$f,$f,$f,$b,0,0
+ dcb 0,0,0,0,0,0,0,0,$b,0,$b,$c,$b,$c,$c,1
+ dcb 1,$f,1,$f,1,$f,1,$f,$f,1,$f,$f,1,$b,0,0
+ dcb 0,0,0,0,0,0,0,$b,$b,$b,$c,$c,$b,$c,$f,1
+ dcb 1,1,$f,$f,1,$f,$f,1,$f,$f,$f,$f,1,$c,0,0
+ dcb 0,0,0,0,0,0,0,$b,$b,$c,$c,$c,$b,$c,$c,$f
+ dcb 1,1,1,$f,$f,1,$f,1,$f,1,$f,$f,1,$c,0,0
+ dcb 0,0,0,0,0,$b,$b,$b,$c,$c,$c,$f,$c,$c,$f,$f
+ dcb 1,1,1,1,$f,$f,$f,1,$f,1,$f,$f,$f,$f,0,0
+ dcb 0,0,0,0,0,0,$b,$c,$c,$c,$f,$c,$f,$c,$f,$f
+ dcb 1,1,1,1,1,$f,$f,1,$f,$f,$f,$f,1,$f,$b,0
+ dcb 0,0,0,0,$b,$b,$b,$c,$c,$f,$c,$f,$f,$c,$f,$f
+ dcb 1,1,1,1,1,$f,$f,$f,1,$f,$f,$f,1,$c,$b,$b
+ dcb 0,0,0,0,$b,$b,$c,$f,$c,$f,$f,$f,$f,$f,$c,$f
+ dcb 1,1,1,1,1,$f,$f,$f,1,$f,$f,$f,$f,$f,$b,$b
+ dcb 0,0,0,0,$b,$c,$c,$c,$f,$f,$f,$f,$f,$f,$f,$f
+ dcb $f,1,1,1,$f,$b,$f,$f,$f,1,$f,$f,$f,$f,$b,$b
+ dcb 0,0,0,0,$b,$c,$c,$f,$c,$f,$f,$f,$f,$f,$f,$f
+ dcb $f,$f,$f,$c,$b,$f,$f,1,$f,$f,$f,$f,$f,$f,$c,$b
+ dcb 0,0,0,0,$b,$b,$c,$c,$f,$c,$f,$f,$f,$f,$f,$f
+ dcb $c,$c,$b,$c,$c,$f,$f,1,$c,$c,$f,$f,$f,$f,$c,$b
+ dcb 0,0,0,0,$b,$b,$c,$c,$c,$f,$f,$f,$f,$f,$f,$f
+ dcb $f,$f,$f,$f,$f,1,$f,$c,$b,$f,$c,$f,$c,$f,$c,$b
+ dcb 0,0,0,0,0,$b,$c,$c,$c,$c,$f,$f,$f,$f,$f,$f
+ dcb $f,$f,$f,$f,$f,$c,$b,$c,$c,$c,$f,$f,$c,$f,$c,$c
+ dcb 0,0,0,0,0,$b,$b,$c,$c,$c,$c,$c,$f,$f,$f,$f
+ dcb $f,$f,$f,$c,$b,$b,$c,$c,$c,$f,$c,$f,$f,$f,$c,$b
+ dcb 0,0,0,0,0,$b,$b,$b,$b,$c,$c,$f,$c,$f,$f,$f
+ dcb $c,$c,$b,$b,$b,$c,$b,$b,$c,$c,$f,$c,$c,$f,$c,$c
+ dcb 0,0,0,0,0,0,$b,$b,$c,$b,$c,$c,$c,$c,$c,$c
+ dcb $b,$b,$b,$b,$c,$b,$b,$c,$c,$f,$f,$f,$c,$c,$c,$b
+ dcb 0,0,0,0,0,0,0,0,$b,$b,$b,$c,$c,$c,$c,$c
+ dcb $c,$c,$b,$b,$b,$b,$c,$c,$f,$f,$f,$c,$c,$c,$c,$c
+ dcb $ff
+
+
+fontSize:
+ dcb 5,5,5,5,5,5,5,5 ;abcdefgh
+ dcb 2,5,5,5,6,6,5,5 ;ijklmnop
+ dcb 6,5,5,4,5,6,6,6 ;qrstuvwx
+ dcb 6,5,2,3 ;yz.[SPACE]
+
+;
+; a=0, b=1, c=2, d=3....
+;
+
+scrolltext:
+ dcb 0
+
+ dcb 14,13,11,24,27 ; "only "
+ dcb 03,04,15,19,07,27 ; "depth "
+ dcb 12,0,10,4,18,27 ; "makes "
+ dcb 8,19,27 ; "it "
+ dcb 15,14,18,18,8,1,11,4 ; "possible"
+ dcb 26,26,26 ; "..."
+ dcb 19,7,8,18,27 ; "this "
+ dcb 8,18,27 ; "is "
+ dcb 19,7,4,27 ; "the "
+ dcb 5,8,17,18,19,27 ; "first "
+ dcb 3,4,12,14,27 ; "demo "
+ dcb 12,0,3,4,27 ; "made "
+ dcb 8,13,27 ; "in "
+ dcb 19,7,8,18,27 ; "this "
+ dcb 4,13,21,26,26,26,26,27 ; "env.... "
+ dcb 7,14,15,4,27 ; "hope "
+ dcb 24,14,20,27 ; "you "
+ dcb 11,8,10,4,27 ; "like "
+ dcb 8,19,26,26,26,27,27 ; "it... "
+ dcb 22,22,22,26 ; "www."
+ dcb 3,4,15,19,7,26 ; "depth."
+ dcb 14,17,6,27,27,27,27,27 ; "org "
+
+ dcb $ff ; end of text
+
+fontlookup:
+ dcb $00,$00 ;a
+ dcb $20,$00 ;b
+ dcb $40,$00 ;c
+ dcb $60,$00 ;d
+ dcb $80,$00 ;e
+ dcb $a0,$00 ;f
+ dcb $c0,$00 ;g
+ dcb $e0,$00 ;h
+ dcb $00,$01 ;i
+ dcb $20,$01 ;j
+ dcb $40,$01 ;k
+ dcb $60,$01 ;l
+ dcb $80,$01 ;m
+ dcb $a0,$01 ;n
+ dcb $c0,$01 ;o
+ dcb $e0,$01 ;p
+ dcb $00,$02 ;q
+ dcb $20,$02 ;r
+ dcb $40,$02 ;s
+ dcb $60,$02 ;t
+ dcb $80,$02 ;u
+ dcb $a0,$02 ;v
+ dcb $c0,$02 ;w
+ dcb $e0,$02 ;x
+ dcb $00,$03 ;y
+ dcb $20,$03 ;z
+ dcb $40,$03 ;.
+ dcb $60,$03 ;" "
+
+fonts:
+ dcb 0,1,1,0,0,0
+ dcb 1,0,0,1,0,0
+ dcb 1,1,1,1,0,0
+ dcb 1,0,0,1,0,0
+ dcb 1,0,0,1,0,0
+ dcb 0,0
+
+ dcb 0,1,1,1,0,0
+ dcb 1,0,0,1,0,0
+ dcb 0,1,1,1,0,0
+ dcb 1,0,0,1,0,0
+ dcb 0,1,1,1,0,0
+ dcb 0,0
+
+ dcb 0,1,1,0,0,0
+ dcb 1,0,0,1,0,0
+ dcb 0,0,0,1,0,0
+ dcb 1,0,0,1,0,0
+ dcb 0,1,1,0,0,0
+ dcb 0,0
+
+ dcb 0,1,1,1,0,0
+ dcb 1,0,0,1,0,0
+ dcb 1,0,0,1,0,0
+ dcb 1,0,0,1,0,0
+ dcb 0,1,1,1,0,0
+ dcb 0,0
+
+ dcb 1,1,1,1,0,0
+ dcb 0,0,0,1,0,0
+ dcb 0,1,1,1,0,0
+ dcb 0,0,0,1,0,0
+ dcb 1,1,1,1,0,0
+ dcb 0,0
+
+ dcb 1,1,1,1,0,0
+ dcb 0,0,0,1,0,0
+ dcb 0,1,1,1,0,0
+ dcb 0,0,0,1,0,0
+ dcb 0,0,0,1,0,0
+ dcb 0,0
+
+ dcb 1,1,1,0,0,0
+ dcb 0,0,0,1,0,0
+ dcb 1,1,0,1,0,0
+ dcb 1,0,0,1,0,0
+ dcb 1,1,1,0,0,0
+ dcb 0,0
+
+ dcb 1,0,0,1,0,0
+ dcb 1,0,0,1,0,0
+ dcb 1,1,1,1,0,0
+ dcb 1,0,0,1,0,0
+ dcb 1,0,0,1,0,0
+ dcb 0,0
+
+ dcb 1,0,0,0,0,0
+ dcb 1,0,0,0,0,0
+ dcb 1,0,0,0,0,0
+ dcb 1,0,0,0,0,0
+ dcb 1,0,0,0,0,0
+ dcb 0,0
+
+ dcb 1,0,0,0,0,0
+ dcb 1,0,0,0,0,0
+ dcb 1,0,0,0,0,0
+ dcb 1,0,0,1,0,0
+ dcb 0,1,1,0,0,0
+ dcb 0,0
+
+ dcb 1,0,0,1,0,0
+ dcb 0,1,0,1,0,0
+ dcb 0,0,1,1,0,0
+ dcb 0,1,0,1,0,0
+ dcb 1,0,0,1,0,0
+ dcb 0,0
+
+ dcb 0,0,0,1,0,0
+ dcb 0,0,0,1,0,0
+ dcb 0,0,0,1,0,0
+ dcb 0,0,0,1,0,0
+ dcb 1,1,1,1,0,0
+ dcb 0,0
+
+ dcb 1,0,0,0,1,0
+ dcb 1,1,0,1,1,0
+ dcb 1,0,1,0,1,0
+ dcb 1,0,0,0,1,0
+ dcb 1,0,0,0,1,0
+ dcb 0,0
+
+ dcb 1,0,0,0,1,0
+ dcb 1,0,0,1,1,0
+ dcb 1,0,1,0,1,0
+ dcb 1,1,0,0,1,0
+ dcb 1,0,0,0,1,0
+ dcb 0,0
+
+ dcb 0,1,1,0,0,0
+ dcb 1,0,0,1,0,0
+ dcb 1,0,0,1,0,0
+ dcb 1,0,0,1,0,0
+ dcb 0,1,1,0,0,0
+ dcb 0,0
+
+ dcb 0,1,1,1,0,0
+ dcb 1,0,0,1,0,0
+ dcb 0,1,1,1,0,0
+ dcb 0,0,0,1,0,0
+ dcb 0,0,0,1,0,0
+ dcb 0,0
+
+ dcb 0,1,1,0,0,0
+ dcb 1,0,0,1,0,0
+ dcb 1,0,0,1,0,0
+ dcb 0,1,0,1,0,0
+ dcb 1,0,1,0,0,0
+ dcb 0,0
+
+ dcb 0,1,1,1,0,0
+ dcb 1,0,0,1,0,0
+ dcb 0,1,1,1,0,0
+ dcb 0,1,0,1,0,0
+ dcb 1,0,0,1,0,0
+ dcb 0,0
+
+ dcb 1,1,1,0,0,0
+ dcb 0,0,0,1,0,0
+ dcb 0,1,1,0,0,0
+ dcb 1,0,0,0,0,0
+ dcb 0,1,1,1,0,0
+ dcb 0,0
+
+ dcb 1,1,1,0,0,0
+ dcb 0,1,0,0,0,0
+ dcb 0,1,0,0,0,0
+ dcb 0,1,0,0,0,0
+ dcb 0,1,0,0,0,0
+ dcb 0,0
+
+ dcb 1,0,0,1,0,0
+ dcb 1,0,0,1,0,0
+ dcb 1,0,0,1,0,0
+ dcb 1,0,0,1,0,0
+ dcb 1,1,1,0,0,0
+ dcb 0,0
+
+ dcb 1,0,0,0,1,0
+ dcb 1,0,0,0,1,0
+ dcb 1,0,0,0,1,0
+ dcb 0,1,0,1,0,0
+ dcb 0,0,1,0,0,0
+ dcb 0,0
+
+ dcb 1,0,0,0,1,0
+ dcb 1,0,0,0,1,0
+ dcb 1,0,1,0,1,0
+ dcb 1,1,0,1,1,0
+ dcb 1,0,0,0,1,0
+ dcb 0,0
+
+ dcb 1,0,0,0,1,0
+ dcb 0,1,0,1,0,0
+ dcb 0,0,1,0,0,0
+ dcb 0,1,0,1,0,0
+ dcb 1,0,0,0,1,0
+ dcb 0,0
+
+ dcb 1,0,0,0,1,0
+ dcb 0,1,0,1,0,0
+ dcb 0,0,1,0,0,0
+ dcb 0,0,1,0,0,0
+ dcb 0,0,1,0,0,0
+ dcb 0,0
+
+ dcb 1,1,1,1,0,0 ; z
+ dcb 1,0,0,0,0,0
+ dcb 0,1,1,0,0,0
+ dcb 0,0,0,1,0,0
+ dcb 1,1,1,1,0,0
+ dcb 0,0
+
+ dcb 0,0,0,0,0,0 ; .
+ dcb 0,0,0,0,0,0
+ dcb 0,0,0,0,0,0
+ dcb 0,0,0,0,0,0
+ dcb 1,0,0,0,0,0
+ dcb 0,0
+
+ dcb 0,0,0,0,0,0 ; " "
+ dcb 0,0,0,0,0,0
+ dcb 0,0,0,0,0,0
+ dcb 0,0,0,0,0,0
+ dcb 0,0,0,0,0,0
+ dcb 0,0
+
+bottombar:
+ dcb $b,$9,$b,9,8,9,8,$a,8,$a,7,$a,7,1,7,1,1
+ dcb 7,1,7,$a,7,$a,8,$a,8,9,8,9,$b,9,$b
+ dcb $ff
+
diff --git a/hacks/images/m6502/disco.asm b/hacks/images/m6502/disco.asm
new file mode 100644
index 0000000..bc69d70
--- /dev/null
+++ b/hacks/images/m6502/disco.asm
@@ -0,0 +1,23 @@
+; DISCO DISCO
+; submitted by Anonymous
+
+start:
+ inx
+ txa
+ sta $200, y
+ sta $300, y
+ sta $400, y
+ sta $500, y
+ iny
+ tya
+ cmp 16
+ bne do
+ iny
+ jmp start
+do:
+ iny
+ iny
+ iny
+ iny
+jmp start
+
diff --git a/hacks/images/m6502/dmsc.asm b/hacks/images/m6502/dmsc.asm
new file mode 100644
index 0000000..9a0ae6b
--- /dev/null
+++ b/hacks/images/m6502/dmsc.asm
@@ -0,0 +1,130 @@
+;
+; 6502 Assembler Demo.
+; Copyright (C) 2007 Daniel Serpell <daniel.serpell@gmail.com>
+;
+; Redistribution and use in source and binary forms, with or without
+; modification, are permitted provided that the following conditions are met:
+;
+; 1. Redistributions of source code must retain the above copyright notice,
+; this list of conditions and the following disclaimer.
+;
+; 2. Redistributions in binary form must reproduce the above copyright notice,
+; this list of conditions and the following disclaimer in the documentation
+; and/or other materials provided with the distribution.
+;
+; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+; IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+; ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+; LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+; CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+; SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+; INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+; CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+; ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+; POSSIBILITY OF SUCH DAMAGE.
+;
+; By DMSC - daniel.serpell@gmail.com
+;
+; See xscreensaver/hacks/images/m6502/dsmc.txt for the source
+;
+ dcb 76, 94, 11,133, 32,162, 8,160, 8,145, 16,136,208,251,165, 16
+ dcb 24,105, 32,133, 16,165, 17,105, 0,133, 17,165, 32,202,208,231
+ dcb 96,230, 48,165, 48, 41, 63,133, 48,170,189,106, 6,170,189, 8
+ dcb 3,105, 1, 41, 3,157, 8, 3,138, 73,231,170,189, 0, 2,105
+ dcb 1, 41, 3,157, 0, 2,165, 48, 73, 63,170,189,106, 6, 73,224
+ dcb 170,189, 8, 2,105, 1, 41, 3,157, 8, 2,138, 73,231,170,189
+ dcb 0, 3,105, 1, 41, 3,157, 0, 3, 96,224,192,160,128, 96,225
+ dcb 64,193,161,226,129, 32,194, 97,162,227,195,130,228, 65,163,196
+ dcb 98,229,131,164,197,230,231,132,165,198, 99, 66, 33, 0,199,166
+ dcb 133,100,167, 67,134,101,135, 34, 68,102,103, 69, 35, 70, 71, 36
+ dcb 1, 37, 38, 39, 2, 3, 4, 5, 6, 7,166, 48,189,198, 6,170
+ dcb 254, 24, 3, 73, 7,170,254, 16, 3, 73,231,170,254, 24, 2, 73
+ dcb 7,170,254, 16, 2, 96, 0, 32, 1, 33, 64, 2, 65, 34, 96, 66
+ dcb 3, 97, 35, 98, 67,128, 4,129, 36, 99,130, 68,160, 5,161,131
+ dcb 100, 37,162, 69,132,192,163,101, 6,193, 38,194, 70,164,133,195
+ dcb 102,224, 7,225, 39,165,226,196,134, 71,227,103,197,166,228,135
+ dcb 198,229,167,230,199,231,166, 49,189, 21, 7,170,189, 0,160,157
+ dcb 0, 5,230, 49, 96,195,227,194,162,228, 97,226,128,129,130,225
+ dcb 64,161,163,224, 96,160,193,196, 32, 98,192, 65, 0,131,229,164
+ dcb 33, 99,197, 66,132, 1,230, 34,165, 67,100,198, 2, 3, 68, 6
+ dcb 35,133,166, 5,101, 4,199, 7, 36,231, 69,134,167, 37, 38,102
+ dcb 135, 70,232, 71, 39,103,136,200,168, 8, 11, 10,169,233,104, 9
+ dcb 12,137,201, 13, 40, 44, 72, 43,170, 42, 45, 41,105, 73,202, 14
+ dcb 138,234, 74, 75,106,203, 76,171, 46, 77,235,107,139, 15,108,172
+ dcb 174,140,173,141,142,204,109,206,207,205, 78,175, 47,236,239,143
+ dcb 237,238,110,240,241,111,208, 16, 79,176,209,242, 48,144,243, 80
+ dcb 177,244,112,210, 17, 49,178,179, 52, 53,147, 18, 81,211,145, 19
+ dcb 146, 51, 85,180, 20, 54,113,148, 22, 50, 84,212, 21, 55,115,245
+ dcb 83,114,116, 23, 82, 86, 88, 89, 87,118,117,119,149,213, 56, 57
+ dcb 181,214, 90,121,122,150,151,182,183,215,246, 58,120,247, 24,153
+ dcb 184,152,216, 25, 26, 59, 91,248,123,185, 27, 60,217,154, 28, 92
+ dcb 249, 29,155,186, 61,218, 93,124,250,187, 30,251, 62,156, 94,125
+ dcb 219,188, 31,252,254,220,253, 63,126,255,157,221, 95,159,191,222
+ dcb 127,189,223,158,190,165, 66, 41,224,208, 72,165, 66, 24,105, 1
+ dcb 41, 31,133, 66,165, 67,240, 7,198, 67,169, 0, 76, 97, 8,198
+ dcb 69,240,247, 16, 37,166, 64,230, 64,189,177, 9, 16, 15, 41,127
+ dcb 133, 67, 73,127,208,228,169, 1,133, 70, 76, 42, 8,170,189,117
+ dcb 8,133, 69,234,234,189,181, 8,133, 65,166, 65,230, 65,189,245
+ dcb 8,133, 68,165, 66, 24,105,224,133, 66,166, 66,169, 1,102, 68
+ dcb 42,157, 0,160, 96, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2
+ dcb 3, 2, 3, 3, 3, 3, 3, 1, 2, 3, 1, 5, 3, 3, 3, 3
+ dcb 3, 2, 2, 3, 3, 5, 4, 3, 3, 5, 4, 4, 4, 3, 3, 4
+ dcb 4, 1, 3, 4, 3, 5, 5, 5, 4, 5, 4, 4, 3, 4, 4, 7
+ dcb 4, 4, 4, 2, 1, 0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30
+ dcb 32, 35, 35, 38, 40, 43, 46, 49, 50, 52, 4, 55, 55, 60, 63, 65
+ dcb 68, 71, 73, 75, 78, 78, 33, 83, 86, 89, 94, 98,102,106,109,112
+ dcb 116, 94,120,123,127,130,134,139,144,148,153,157,161,164,167,171
+ dcb 178,171,182,186, 5, 56, 68, 56, 36,124, 4, 76, 84, 36, 68, 84
+ dcb 40, 24, 40,124,100, 84, 88, 56, 84, 72, 76, 80, 96, 40, 84, 40
+ dcb 36, 84, 56, 44, 28,124, 36, 24, 24, 36,124, 24, 52, 16, 60, 80
+ dcb 24, 37, 30,124, 32, 28,188, 1,190,124, 24, 36, 60, 32, 28, 32
+ dcb 28, 24, 36, 24, 63, 36, 24, 36, 63, 60, 16, 32, 52, 44,120, 36
+ dcb 56, 4, 60, 56, 4, 56, 4, 56, 57, 6, 56, 44, 52, 36, 12, 48
+ dcb 208, 48, 12,252,164,164, 88,120,132,132, 72,252,132,132,120,252
+ dcb 164,132,252,160,128,120,132,164, 56,252, 32, 32,252, 8, 4,248
+ dcb 252, 48, 80,140,252, 4, 4,252, 64, 60, 64,252, 64, 48, 8,252
+ dcb 120,132,132,132,120,252,144,144, 96,120,132,134,133,120,252,144
+ dcb 144,108, 68,164,164,152,128,252,128,248, 4, 4,248, 4, 8,240
+ dcb 224, 28, 16,224, 28, 16,224,204, 48, 48,204,140,148,164,196, 0
+ dcb 0,133, 41, 10, 28, 29, 63, 63, 63,136, 15, 10, 28, 29, 14, 27
+ dcb 63, 63, 63,132, 55, 17, 18, 28, 62, 18, 28, 62, 10,136, 27, 14
+ dcb 10, 21, 21, 34,143, 15, 10, 28, 29,142, 39, 40, 48, 50,149,145
+ dcb 10, 23, 13, 62, 23, 24, 32,136, 28, 24, 22, 14,136, 11, 14, 10
+ dcb 30, 29, 18, 15, 30, 21,128, 14, 15, 15, 14, 12, 29, 28, 63, 63
+ dcb 63,144,159,255, 55, 17, 18, 28, 62, 18, 28, 62, 10, 21, 21,129
+ dcb 15, 24, 27, 62, 23, 24, 32,136, 11, 34, 14, 63, 63, 63,141, 63
+ dcb 63, 63, 11, 34, 14,150,159,143, 11, 34, 62, 39, 48, 54, 38, 2
+ dcb 0, 0, 7, 63, 5, 63, 2, 9, 11, 34, 62, 39, 48, 54, 38, 2
+ dcb 0, 0, 7, 63, 5, 63, 2, 9, 11, 34, 62, 39, 48, 54, 38, 2
+ dcb 0, 0, 7, 63, 5, 63, 2, 9,143,159,255,169, 0,133, 42,169
+ dcb 1,133, 44,133, 45,169, 0,133, 32,169,160,133, 33,165, 42,133
+ dcb 43,162, 15,160, 15,145, 32, 24,101, 44,230, 44,136, 16,246,165
+ dcb 32, 24,105, 32,133, 32,165, 33,105, 0,133, 33,169, 1,133, 44
+ dcb 165, 43, 24,101, 45,133, 43,230, 45,202, 16,215,169, 0,133, 32
+ dcb 169,160,133, 33,169,224,133, 34,169, 3,133, 35,169, 0,133, 36
+ dcb 169, 4,133, 37,169,240,133, 38,169, 3,133, 39,169, 16,133, 40
+ dcb 169, 4,133, 41,169, 15,133, 46,160, 15,177, 32, 74, 74, 74, 74
+ dcb 170,189, 62, 11,209, 34,240, 18,145, 34,145, 36,170,152, 73, 15
+ dcb 168,138,145, 38,145, 40,152, 73, 15,168,136, 16,221,165, 32, 24
+ dcb 105, 32,133, 32,165, 33,105, 0,133, 33,165, 34, 24,105,224,133
+ dcb 34,165, 35,105,255,133, 35,165, 36, 24,105, 32,133, 36,165, 37
+ dcb 105, 0,133, 37,165, 38, 24,105,224,133, 38,165, 39,105,255,133
+ dcb 39,165, 40, 24,105, 32,133, 40,165, 41,105, 0,133, 41,198, 46
+ dcb 16,150,230, 42,165, 42, 41, 63,240, 3, 76, 95, 10, 96, 0, 11
+ dcb 12, 15, 1, 15, 12, 11, 0, 11, 12, 15, 1, 15, 12, 11, 0, 11
+ dcb 12, 15, 1, 15, 12, 11, 0, 11, 12, 15, 1, 15, 12, 11,169, 1
+ dcb 162,255,134, 16,162, 1,134, 17, 32, 3, 6,169, 2,162, 7,134
+ dcb 16,162, 2,134, 17, 32, 3, 6,169, 3,162, 7,134, 16,162, 3
+ dcb 134, 17, 32, 3, 6,169, 31,133, 66,169, 0,133, 70,133, 67,133
+ dcb 64,169, 1,141,109, 8,169, 0,141,114, 8,169,160,141,115, 8
+ dcb 169, 63,133, 48,169,128,133, 49,169, 3,141,109, 8,169, 0,170
+ dcb 157, 0,160,232,208,250, 32, 33, 6, 32,170, 6, 32, 6, 7, 32
+ dcb 21, 8,165, 66, 73, 31,208, 13,173,109, 8, 24,105, 2, 41, 3
+ dcb 105, 3,141,109, 8,165, 49,208,221,173, 17, 7, 73, 1,141, 17
+ dcb 7,165, 70,240,209, 32, 29, 12, 32, 91, 10,169, 31,133, 66,169
+ dcb 0,133, 70,133, 67,141,109, 8,169, 0,141,114, 8,169, 3,141
+ dcb 115, 8, 32, 29, 12, 32, 21, 8,165, 66, 73, 31,208,247,173,115
+ dcb 8, 73, 7,141,115, 8,165, 70,240,235, 76, 94, 11,169, 0,170
+ dcb 157, 0, 2,157, 0, 3,157, 0, 4,157, 0, 5,232,208,241, 96
+
diff --git a/hacks/images/m6502/dmsc.txt b/hacks/images/m6502/dmsc.txt
new file mode 100644
index 0000000..7e19f6b
--- /dev/null
+++ b/hacks/images/m6502/dmsc.txt
@@ -0,0 +1,768 @@
+;
+; 6502 Assembler Demo.
+; Copyright (C) 2007 Daniel Serpell <daniel.serpell@gmail.com>
+;
+; Redistribution and use in source and binary forms, with or without
+; modification, are permitted provided that the following conditions are met:
+;
+; 1. Redistributions of source code must retain the above copyright notice,
+; this list of conditions and the following disclaimer.
+;
+; 2. Redistributions in binary form must reproduce the above copyright notice,
+; this list of conditions and the following disclaimer in the documentation
+; and/or other materials provided with the distribution.
+;
+; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+; IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+; ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+; LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+; CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+; SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+; INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+; CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+; ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+; POSSIBILITY OF SUCH DAMAGE.
+;
+
+; Variable definitions
+ temp0 = $20
+ temp1 = $21
+ temp2 = $22
+ temp3 = $23
+ temp4 = $24
+ temp5 = $25
+
+ param0 = $10
+ param1 = $11
+ param2 = $12
+ param3 = $13
+
+
+; Output file
+ !to "all.bin", plain
+
+; Start of code
+ *= $600
+ jmp main
+
+; Used in "gira" and "circ"
+
+ gira_pos = $30
+ gira_scr = $200
+ circ_pos = $30
+ circ_scr = $210
+ show_pos = $31
+ show_source = $a000
+ show_dest = $500
+ text_state = $40
+ text_scr = $a000
+; text_scr = $480
+ moire_buf = $a000
+ moire_scr = $200
+ moire_temp = $20
+
+; Include routines and macros
+
+: ===========================================================================
+: !source "fillRect.asm"
+: ===========================================================================
+
+ !zone {
+
+; Uses the following:
+; params: param0, param1
+; temps: temp0
+
+
+; Locals
+ .color = temp0
+
+; Params
+ fillRect_buffer = param0
+ .buf = fillRect_buffer
+
+; fillRect:
+; Fill a rectangle of 8x8 pixels with a color.
+; input: A = color index
+; .buffer = output buffer (address)
+ !macro fillRect .buffer {
+ ldx #<.buffer
+ stx fillRect_buffer
+ ldx #>.buffer
+ stx fillRect_buffer+1
+ jsr fillRect_code
+ }
+
+; fillRect:
+; Fill a rectangle of 8x8 pixels with a color.
+; input: .color = color index
+; .buffer = output buffer (address)
+ !macro fillRect .buffer, .color {
+ lda #.color
+ +fillRect .buffer
+ }
+
+fillRect_code:
+ sta .color
+ ldx #8
+--
+ ldy #8
+-
+ sta (.buf),y
+ dey
+ bne -
+
+ lda .buf
+ clc
+ adc #32
+ sta .buf
+ lda .buf+1
+ adc #0
+ sta .buf+1
+ lda .color
+ dex
+ bne --
+
+ rts
+
+}
+
+
+: ===========================================================================
+: !source "gira.asm"
+: ===========================================================================
+
+ !zone {
+
+;
+; define "gira_pos" and "gira_scr" before including
+;
+ .pos = gira_pos
+ .scr00 = gira_scr
+ .scr01 = gira_scr + $8
+ .scr10 = gira_scr + $100
+ .scr11 = gira_scr + $108
+
+; gira:
+ !macro gira {
+ jsr gira_code
+ }
+
+; init code:
+ !macro giraInit {
+ +fillRect gira_scr-1, 1
+ +fillRect gira_scr+7, 2
+ +fillRect gira_scr+$107, 3
+ }
+
+gira_code:
+
+ inc .pos
+ lda .pos
+ and #63
+ sta .pos
+ tax
+
+ lda .tabla,x
+ tax
+ lda .scr11,x
+ adc #1
+ and #3
+
+ sta .scr11,x
+ txa
+ eor #$E7
+ tax
+ lda .scr00,x
+ adc #1
+ and #3
+ sta .scr00,x
+
+ lda .pos
+ eor #63
+ tax
+ lda .tabla,x
+ eor #$E0
+ tax
+ lda .scr01,x
+ adc #1
+ and #3
+ sta .scr01,x
+
+ txa
+ eor #$E7
+ tax
+ lda .scr10,x
+ adc #1
+ and #3
+ sta .scr10,x
+
+ rts
+
+.tabla
+ !byte 224, 192, 160, 128, 96, 225, 64, 193, 161, 226, 129, 32, 194, 97, 162, 227
+ !byte 195, 130, 228, 65, 163, 196, 98, 229, 131, 164, 197, 230, 231, 132, 165, 198
+ !byte 99, 66, 33, 0, 199, 166, 133, 100, 167, 67, 134, 101, 135, 34, 68, 102
+ !byte 103, 69, 35, 70, 71, 36, 1, 37, 38, 39, 2, 3, 4, 5, 6, 7
+
+}
+
+: ===========================================================================
+: !source "circ.asm"
+: ===========================================================================
+
+ !zone {
+;
+; define "circ_pos" before including
+;
+
+ .pos = circ_pos
+ .scr00 = circ_scr
+ .scr01 = circ_scr + $8
+ .scr10 = circ_scr + $100
+ .scr11 = circ_scr + $108
+
+; circ:
+ !macro circ {
+ jsr circ_code
+ }
+
+circ_code:
+
+ ldx .pos
+ lda .tabla,x
+ tax
+ inc .scr11,x
+ eor #07
+ tax
+ inc .scr10,x
+ eor #$e7
+ tax
+ inc .scr01,x
+ eor #07
+ tax
+ inc .scr00,x
+
+ rts
+
+.tabla
+ !byte 0, 32, 1, 33, 64, 2, 65, 34, 96, 66, 3, 97, 35, 98, 67, 128
+ !byte 4, 129, 36, 99, 130, 68, 160, 5, 161, 131, 100, 37, 162, 69, 132, 192
+ !byte 163, 101, 6, 193, 38, 194, 70, 164, 133, 195, 102, 224, 7, 225, 39, 165
+ !byte 226, 196, 134, 71, 227, 103, 197, 166, 228, 135, 198, 229, 167, 230, 199, 231
+
+}
+
+
+: ===========================================================================
+ !source "mapcopy.asm"
+: ===========================================================================
+
+ !zone {
+
+;
+; define "show_pos" and "show_scr" before including
+;
+ .pos = show_pos
+ .source = show_source
+ .dest = show_dest
+
+; show:
+ !macro show {
+ jsr show_code
+ }
+
+show_code
+ ldx .pos
+ lda .tabla,x
+ tax
+.source_label
+ lda .source,x
+.dest_label
+ sta .dest,x
+ inc .pos
+ rts
+
+ show_source_addr = .source_label + 1
+ show_dest_addr = .dest_label + 1
+
+.tabla
+ !byte 195, 227, 194, 162, 228, 97, 226, 128, 129, 130, 225, 64, 161, 163, 224, 96
+ !byte 160, 193, 196, 32, 98, 192, 65, 0, 131, 229, 164, 33, 99, 197, 66, 132
+ !byte 1, 230, 34, 165, 67, 100, 198, 2, 3, 68, 6, 35, 133, 166, 5, 101
+ !byte 4, 199, 7, 36, 231, 69, 134, 167, 37, 38, 102, 135, 70, 232, 71, 39
+ !byte 103, 136, 200, 168, 8, 11, 10, 169, 233, 104, 9, 12, 137, 201, 13, 40
+ !byte 44, 72, 43, 170, 42, 45, 41, 105, 73, 202, 14, 138, 234, 74, 75, 106
+ !byte 203, 76, 171, 46, 77, 235, 107, 139, 15, 108, 172, 174, 140, 173, 141, 142
+ !byte 204, 109, 206, 207, 205, 78, 175, 47, 236, 239, 143, 237, 238, 110, 240, 241
+ !byte 111, 208, 16, 79, 176, 209, 242, 48, 144, 243, 80, 177, 244, 112, 210, 17
+ !byte 49, 178, 179, 52, 53, 147, 18, 81, 211, 145, 19, 146, 51, 85, 180, 20
+ !byte 54, 113, 148, 22, 50, 84, 212, 21, 55, 115, 245, 83, 114, 116, 23, 82
+ !byte 86, 88, 89, 87, 118, 117, 119, 149, 213, 56, 57, 181, 214, 90, 121, 122
+ !byte 150, 151, 182, 183, 215, 246, 58, 120, 247, 24, 153, 184, 152, 216, 25, 26
+ !byte 59, 91, 248, 123, 185, 27, 60, 217, 154, 28, 92, 249, 29, 155, 186, 61
+ !byte 218, 93, 124, 250, 187, 30, 251, 62, 156, 94, 125, 219, 188, 31, 252, 254
+ !byte 220, 253, 63, 126, 255, 157, 221, 95, 159, 191, 222, 127, 189, 223, 158, 190
+
+}
+
+
+: ===========================================================================
+ !source "text.asm"
+: ===========================================================================
+
+ !zone {
+
+;
+; define:
+; "text_state": 8 bytes of internal state
+; "text_scr" : output screen address
+; "text_data" : text character data
+;
+ text_char = text_state + 0
+ .fps = text_state + 1
+ text_pixel = text_state + 2
+ text_skip = text_state + 3
+ .cb = text_state + 4
+ .fsz = text_state + 5
+ text_endFlag = text_state + 6
+ .scr = text_scr
+ .data = text_data
+
+ ; abbreviations
+ .pos = text_char
+ .cxy = text_pixel
+ .skp = text_skip
+
+; "pos" pointer to the next character
+; "cxy" screen position
+; "fps" position in font data of current character
+; "fsz" remaining bytes of current character
+; "skp" skip data, used in spaces, begining and ending
+; "cb" current output byte (8 bits, one column)
+
+; text:
+ !macro text {
+ jsr text_code
+ }
+
+ !macro textInit1 {
+ lda #$1f
+ sta text_pixel
+ lda #0
+ sta text_endFlag
+ sta text_skip
+ sta text_char
+ lda #1
+ sta text_base_color
+ lda #<text_scr
+ sta text_dest_addr
+ lda #>text_scr
+ sta text_dest_addr+1
+ }
+
+ !macro textInit2 .scrOut {
+ lda #$1f
+ sta text_pixel
+ lda #0
+ sta text_endFlag
+ sta text_skip
+ sta text_base_color
+ lda #<.scrOut
+ sta text_dest_addr
+ lda #>.scrOut
+ sta text_dest_addr+1
+ }
+
+
+text_code
+
+ lda .cxy
+ and #$e0
+ bne .putpixel ; If we have more pixels, put them
+
+ ; To next x coord
+ lda .cxy
+ clc
+ adc #1
+ and #$1f
+ sta .cxy
+
+ ; If we are in "skip" mode, skip :-)
+ lda .skp
+ beq .noskip
+
+.doSkip
+ ; skip this step (filling with blanks)
+ dec .skp
+
+.storeColumn0
+ lda #0
+ jmp .storeColumn
+
+.noskip
+ ; Continue font data
+ dec .fsz
+
+ ; Skip just one column if just at the end of character
+ beq .storeColumn0
+
+ bpl .nextcolumn ; More columns
+
+ ; Get next character
+ ldx .pos
+ inc .pos
+ lda .data, x
+ bpl .fontdata
+
+ ; A > 128, skip "A-128" characters
+ and #$7F
+ sta .skp
+
+ ; If skip == 127 (value=255), signal the end of text data
+ eor #$7F
+ bne .storeColumn0
+
+ lda #1
+ sta text_endFlag
+ jmp .storeColumn0
+
+.fontdata
+ tax
+ lda .font_size,x
+ sta .fsz
+ dec .fsz
+
+ lda .font_pos,x
+ sta .fps
+
+.nextcolumn
+ ldx .fps
+ inc .fps
+ lda .font_data, x
+
+.storeColumn
+ sta .cb
+ ; skip over to putpixel
+
+.putpixel
+ lda .cxy
+ clc
+ adc #$e0
+ sta .cxy
+ ldx .cxy
+.base_color
+ lda #1
+ ror .cb
+ rol
+.dest_label
+ sta .scr,x
+ rts
+
+ text_base_color = .base_color + 1
+ text_dest_addr = .dest_label + 1
+
+; font
+.font_size:
+ !byte 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 3, 2, 3, 3, 3, 3, 3, 1, 2, 3, 1
+ !byte 5, 3, 3, 3, 3, 3, 2, 2, 3, 3, 5, 4, 3, 3, 5, 4, 4, 4, 3, 3, 4, 4
+ !byte 1, 3, 4, 3, 5, 5, 5, 4, 5, 4, 4, 3, 4, 4, 7, 4, 4, 4, 2, 1
+.font_pos:
+ !byte 0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 32, 35
+ !byte 35, 38, 40, 43, 46, 49, 50, 52, 4, 55, 55, 60, 63
+ !byte 65, 68, 71, 73, 75, 78, 78, 33, 83, 86, 89, 94, 98
+ !byte 102, 106, 109, 112, 116, 94, 120, 123, 127, 130, 134, 139, 144
+ !byte 148, 153, 157, 161, 164, 167, 171, 178, 171, 182, 186, 5
+.font_data:
+ !byte 56, 68, 56, 36,124, 4, 76, 84, 36, 68, 84, 40, 24, 40,124,100
+ !byte 84, 88, 56, 84, 72, 76, 80, 96, 40, 84, 40, 36, 84, 56, 44, 28
+ !byte 124, 36, 24, 24, 36,124, 24, 52, 16, 60, 80, 24, 37, 30,124, 32
+ !byte 28,188, 1,190,124, 24, 36, 60, 32, 28, 32, 28, 24, 36, 24, 63
+ !byte 36, 24, 36, 63, 60, 16, 32, 52, 44,120, 36, 56, 4, 60, 56, 4
+ !byte 56, 4, 56, 57, 6, 56, 44, 52, 36, 12, 48,208, 48, 12,252,164
+ !byte 164, 88,120,132,132, 72,252,132,132,120,252,164,132,252,160,128
+ !byte 120,132,164, 56,252, 32, 32,252, 8, 4,248,252, 48, 80,140,252
+ !byte 4, 4, 252, 64, 60, 64,252, 64, 48, 8,252,120,132,132,132,120
+ !byte 252,144,144, 96,120,132,134,133,120,252,144,144,108, 68,164,164
+ !byte 152,128,252,128,248, 4, 4,248, 4, 8,240,224, 28, 16,224, 28
+ !byte 16,224,204, 48, 48,204,140,148,164,196, 0, 0
+
+
+text_data
+ !byte (128+5), 41, 10, 28, 29, 63, 63, 63
+ !byte (128+8), 15, 10, 28, 29, 14, 27, 63, 63, 63
+ !byte (128+4), 55, 17, 18, 28, 62, 18, 28, 62, 10
+ !byte (128+8), 27, 14, 10, 21, 21, 34
+ !byte (128+15), 15, 10, 28, 29
+ !byte (128+14), 39, 40, 48, 50
+ !byte (128+21)
+ !byte (128+17), 10, 23, 13, 62, 23, 24, 32
+ !byte (128+8), 28, 24, 22, 14
+ !byte (128+8), 11, 14, 10, 30, 29, 18, 15, 30, 21
+ !byte (128+0), 14, 15, 15, 14, 12, 29, 28, 63, 63, 63
+ !byte (128+16)
+ !byte (128+31)
+ !byte 255
+ !byte 55, 17, 18, 28, 62, 18, 28, 62, 10, 21, 21
+ !byte (128+1), 15, 24, 27, 62, 23, 24, 32
+ !byte (128+8), 11, 34, 14, 63, 63, 63
+ !byte (128+13), 63, 63, 63, 11, 34, 14
+ !byte (128+22)
+ !byte (128+31)
+ !byte (128+15), 11, 34, 62, 39, 48, 54, 38
+ !byte 2, 0, 0, 7, 63, 5, 63, 2, 9
+ !byte 11, 34, 62, 39, 48, 54, 38
+ !byte 2, 0, 0, 7, 63, 5, 63, 2, 9
+ !byte 11, 34, 62, 39, 48, 54, 38
+ !byte 2, 0, 0, 7, 63, 5, 63, 2, 9
+ !byte (128+15)
+ !byte (128+31)
+ !byte 255
+
+}
+
+
+: ===========================================================================
+ !source "moireSmooth.asm"
+: ===========================================================================
+
+ !zone {
+
+; Parameters (consts)
+ .scr = moire_scr
+ .buf = moire_buf
+; Variables
+ .p1 = moire_temp
+ .o1 = moire_temp + 2
+ .o2 = moire_temp + 4
+ .o3 = moire_temp + 6
+ .o4 = moire_temp + 8
+ .iter = moire_temp + 10
+ .valStartX = moire_temp + 11
+ .deltaX = moire_temp + 12
+ .deltaY = moire_temp + 13
+ .yPos = moire_temp + 14
+
+; moire!:
+ !macro moire {
+ jsr moire_code
+ }
+
+ !macro add16 .var, .value {
+ lda .var
+ clc
+ adc #<.value
+ sta .var
+ lda .var+1
+ adc #>.value
+ sta .var+1
+ }
+
+ !macro sto16 .var, .value {
+ lda #<.value
+ sta .var
+ lda #>.value
+ sta .var+1
+ }
+
+moire_code:
+
+ lda #0
+ sta .iter
+
+.loop:
+
+ lda #1
+ sta .deltaX
+ sta .deltaY
+
+ +sto16 .p1, .buf
+
+ lda .iter
+ sta .valStartX
+
+ ldx #15
+--
+ ldy #15
+-
+ sta (.p1),y
+ clc
+ adc .deltaX
+ inc .deltaX
+ dey
+ bpl -
+
+ +add16 .p1, $0020
+
+ lda #1
+ sta .deltaX
+
+ lda .valStartX
+ clc
+ adc .deltaY
+ sta .valStartX
+ inc .deltaY
+
+ dex
+ bpl --
+
+
+; update screen
+ +sto16 .p1, .buf
+ +sto16 .o1, .scr + $01E0
+ +sto16 .o2, .scr + $0200
+ +sto16 .o3, .scr + $01F0
+ +sto16 .o4, .scr + $0210
+
+ lda #15
+ sta .yPos
+--
+ ldy #15
+-
+ lda (.p1),y
+ lsr
+ lsr
+ lsr
+ lsr
+ tax
+ lda .tabCol,x
+
+ cmp (.o1),y
+ beq .noCopy
+ sta (.o1),y
+ sta (.o2),y
+ tax
+ tya
+ eor #15
+ tay
+ txa
+ sta (.o3),y
+ sta (.o4),y
+ tya
+ eor #15
+ tay
+.noCopy:
+ dey
+ bpl -
+
+ +add16 .p1, $0020
+ +add16 .o1, $FFE0
+ +add16 .o2, $0020
+ +add16 .o3, $FFE0
+ +add16 .o4, $0020
+
+ dec .yPos
+ bpl --
+
+ inc .iter
+ lda .iter
+ and #$3f
+ beq +
+ jmp .loop
++
+ rts
+
+.tabCol
+ !byte 0,11,12,15,1,15,12,11
+ !byte 0,11,12,15,1,15,12,11
+ !byte 0,11,12,15,1,15,12,11
+ !byte 0,11,12,15,1,15,12,11
+
+}
+
+: ===========================================================================
+
+
+; Main loop
+
+main
+
+ +giraInit
+ +textInit1
+ lda #63
+ sta gira_pos
+
+ ; Start show-pos from middle of screen
+ lda #128
+ sta show_pos
+
+ ; First color is 3
+ lda #3
+ sta text_base_color
+
+ ; Clear old text image
+ lda #0
+ tax
+-
+ sta text_scr,x
+ inx
+ bne -
+
+loop
+ +gira
+ +circ
+ +show
+ +text
+
+ lda text_pixel
+ eor #$1f
+ bne notChangeTextColor
+ lda text_base_color
+ clc
+ adc #2
+ and #3
+ adc #3
+ sta text_base_color
+
+notChangeTextColor
+
+ lda show_pos
+ bne loop
+
+ lda show_dest_addr+1
+ eor #1
+ sta show_dest_addr+1
+
+ lda text_endFlag
+ beq loop
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+; End of first text, do moire!
+ jsr clearScr
+ +moire
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+; End of moire, do ending text
+ +textInit2 $300
+ jsr clearScr
+
+; loop text output
+-
+ +text
+
+ lda text_pixel
+ eor #$1f
+ bne -
+ lda text_dest_addr+1
+ eor #7
+ sta text_dest_addr+1
+
+ lda text_endFlag
+ beq -
+
+ jmp main
+
+clearScr
+ ; Clear screen
+ lda #0
+ tax
+-
+ sta $200,x
+ sta $300,x
+ sta $400,x
+ sta $500,x
+ inx
+ bne -
+ rts
+
diff --git a/hacks/images/m6502/dragon-fractal.asm b/hacks/images/m6502/dragon-fractal.asm
new file mode 100644
index 0000000..ce05ad4
--- /dev/null
+++ b/hacks/images/m6502/dragon-fractal.asm
@@ -0,0 +1,49 @@
+;; dmsc
+;;
+;; PostPosted: Thu Dec 13, 2007 11:57 pm Post subject: Dragon curve
+;; fractal
+;;
+;;
+;; Hi!
+;;
+;; This draws the dragon curve fractal (really a "twin dragon"):
+
+lda #0
+ sta $0
+
+lop:
+ lda $0
+ sta $1
+ lda #3
+ sta $6
+ lda #232
+ sta $5
+
+ ldx #0
+lpN:
+ lsr $1
+ bcc nos
+ lda $5
+ clc
+ adc tL,x
+ sta $5
+ lda $6
+ adc tH,x
+ sta $6
+nos:
+ inx
+ lda $1
+ bne lpN
+ inx
+ txa
+ ldy #0
+ sta ($5),y
+
+ inc $0
+ bne lop
+ rts
+
+tL:
+ dcb 32, 31, 254, 190, 128, 132, 8, 8
+tH:
+ dcb 0, 0, 255, 255, 255, 255, 0, 1
diff --git a/hacks/images/m6502/fullscreenlogo.asm b/hacks/images/m6502/fullscreenlogo.asm
new file mode 100644
index 0000000..6f9b079
--- /dev/null
+++ b/hacks/images/m6502/fullscreenlogo.asm
@@ -0,0 +1,107 @@
+;
+; draw image
+;
+
+start:
+ lda #<logo
+ sta $0
+ lda #>logo
+ sta $1
+
+ lda #$00
+ sta $2
+ lda #$02
+ sta $3
+
+ ldx #$0
+l:
+ lda ($0,x)
+ sta ($2,x)
+
+ inc $00
+ lda $00
+ cmp #$00
+ bne notReset1
+ inc $01
+notReset1:
+
+ inc $02
+ lda $02
+ cmp #$00
+ bne notReset2
+ lda $03
+ cmp #$05
+ beq done
+ inc $03
+notReset2:
+
+ jmp l
+done:
+ rts
+
+logo:
+ dcb 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
+ dcb 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
+ dcb 1,1,1,1,1,1,1,1,1,1,1,1,1,6,6,6
+ dcb 6,6,6,6,1,1,1,1,1,1,1,1,1,1,1,1
+ dcb 1,1,1,1,1,1,1,1,1,1,6,6,6,6,6,6
+ dcb 6,6,6,6,6,1,1,1,1,1,1,1,1,1,1,1
+ dcb 1,1,1,1,1,1,1,1,6,6,6,6,6,6,6,6
+ dcb 6,6,6,6,6,1,1,1,1,1,1,1,1,1,1,1
+ dcb 1,1,1,1,1,1,1,6,6,6,6,6,6,6,6,6
+ dcb 6,6,6,6,6,1,1,1,1,1,1,1,1,1,1,1
+ dcb 1,1,1,1,1,1,6,6,6,6,6,6,6,6,6,6
+ dcb 6,6,6,6,6,1,1,1,1,1,1,1,1,1,1,1
+ dcb 1,1,1,1,1,6,6,6,6,6,6,6,6,6,6,6
+ dcb 6,6,6,6,6,1,1,1,1,1,1,1,1,1,1,1
+ dcb 1,1,1,1,6,6,6,6,6,6,6,6,6,6,6,6
+ dcb 6,6,6,6,6,1,1,1,1,1,1,1,1,1,1,1
+ dcb 1,1,1,6,6,6,6,6,6,6,6,6,6,6,6,1
+ dcb 1,1,1,6,6,1,1,1,1,1,1,1,1,1,1,1
+ dcb 1,1,1,6,6,6,6,6,6,6,6,6,6,1,1,1
+ dcb 1,1,1,1,1,6,6,6,6,6,6,6,6,6,6,6
+ dcb 1,1,6,6,6,6,6,6,6,6,6,1,1,1,1,1
+ dcb 1,1,1,1,1,6,6,6,6,6,6,6,6,6,6,1
+ dcb 1,1,6,6,6,6,6,6,6,6,1,1,1,1,1,1
+ dcb 1,1,1,1,1,6,6,6,6,6,6,6,6,6,1,1
+ dcb 1,1,6,6,6,6,6,6,6,6,1,1,1,1,1,1
+ dcb 1,1,1,1,1,6,6,6,6,6,6,6,6,1,1,1
+ dcb 1,6,6,6,6,6,6,6,6,1,1,1,1,1,1,1
+ dcb 1,1,1,1,1,6,6,6,6,6,6,6,1,1,1,1
+ dcb 1,6,6,6,6,6,6,6,6,1,1,1,1,1,1,1
+ dcb 1,1,1,1,1,6,6,6,6,6,6,1,1,1,1,1
+ dcb 1,6,6,6,6,6,6,6,6,1,1,1,1,1,1,1
+ dcb 1,1,1,1,1,6,6,6,6,6,1,1,1,1,1,1
+ dcb 1,6,6,6,6,6,6,6,6,1,1,1,1,1,1,1
+ dcb 1,1,1,1,1,2,2,2,2,2,1,1,1,1,1,1
+ dcb 1,6,6,6,6,6,6,6,6,1,1,1,1,1,1,1
+ dcb 1,1,1,1,1,2,2,2,2,2,2,1,1,1,1,1
+ dcb 1,6,6,6,6,6,6,6,6,1,1,1,1,1,1,1
+ dcb 1,1,1,1,1,2,2,2,2,2,2,2,1,1,1,1
+ dcb 1,6,6,6,6,6,6,6,6,1,1,1,1,1,1,1
+ dcb 1,1,1,1,1,2,2,2,2,2,2,2,2,1,1,1
+ dcb 1,1,6,6,6,6,6,6,6,6,1,1,1,1,1,1
+ dcb 1,1,1,1,1,2,2,2,2,2,2,2,2,2,1,1
+ dcb 1,1,6,6,6,6,6,6,6,6,6,1,1,1,1,1
+ dcb 1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,1
+ dcb 1,1,1,6,6,6,6,6,6,6,6,6,1,1,1,1
+ dcb 1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2
+ dcb 1,1,1,6,6,6,6,6,6,6,6,6,6,1,1,1
+ dcb 1,1,1,1,6,1,1,1,1,1,1,1,1,1,1,1
+ dcb 1,1,1,1,6,6,6,6,6,6,6,6,6,6,6,6
+ dcb 6,6,6,6,6,1,1,1,1,1,1,1,1,1,1,1
+ dcb 1,1,1,1,6,6,6,6,6,6,6,6,6,6,6,6
+ dcb 6,6,6,6,6,1,1,1,1,1,1,1,1,1,1,1
+ dcb 1,1,1,1,1,6,6,6,6,6,6,6,6,6,6,6
+ dcb 6,6,6,6,6,1,1,1,1,1,1,1,1,1,1,1
+ dcb 1,1,1,1,1,1,6,6,6,6,6,6,6,6,6,6
+ dcb 6,6,6,6,6,1,1,1,1,1,1,1,1,1,1,1
+ dcb 1,1,1,1,1,1,1,1,6,6,6,6,6,6,6,6
+ dcb 6,6,6,6,6,1,1,1,1,1,1,1,1,1,1,1
+ dcb 1,1,1,1,1,1,1,1,1,6,6,6,6,6,6,6
+ dcb 6,6,6,6,6,1,1,1,1,1,1,1,1,1,1,1
+ dcb 1,1,1,1,1,1,1,1,1,1,1,1,6,6,6,6
+ dcb 6,6,6,6,6,1,1,1,1,1,1,1,1,1,1,1
+ dcb 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
+ dcb 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
+
diff --git a/hacks/images/m6502/greynetic.asm b/hacks/images/m6502/greynetic.asm
new file mode 100644
index 0000000..1218d87
--- /dev/null
+++ b/hacks/images/m6502/greynetic.asm
@@ -0,0 +1,96 @@
+;Port of Greynetic
+;Jeremy English 2013
+
+lda #$0
+sta $0
+lda #$2
+sta $1
+
+start:
+lda $1
+cmp #$6
+bne randOffset
+lda #$2
+sta $1
+
+randOffset:
+;move position by some random offset
+clc
+lda $fe
+adc $0
+sta $0
+lda $1
+adc #$0
+sta $1
+cmp #$06 ;Did we go out of range
+bne setRect ;Nope
+lda #$02 ;Start back at the top
+sta $1
+
+setRect:
+lda $fe
+and #$f
+tax
+inx ;at least 1
+stx $2 ;width
+stx $3 ;working copy
+lda $fe
+and #$f
+tax
+inx ;at least 1
+stx $4 ;height
+
+lda $fe
+sta $5 ;color
+
+ldy #0
+draw:
+lda $5
+sta ($0), y
+dec $3
+beq down
+
+lda $0
+clc
+adc #$1
+sta $0
+lda $1
+adc #$0
+sta $1
+cmp #$06 ;Did we go out of range
+beq done ;yes
+jmp draw
+
+down:
+
+;;Move back to the start of this row
+ldx $2 ;The width of the rectangle
+dex
+lda $0
+stx $0
+sec
+sbc $0
+sta $0
+lda $1
+sbc #$0
+sta $1
+
+;;Move down one row
+dec $4
+beq done ;;Are we done drawing?
+
+lda $2
+sta $3 ;reset the width counter
+
+lda $0
+clc
+adc #$20
+sta $0
+lda $1
+adc #$0
+sta $1
+cmp #$06 ;Did we go out of range
+beq done ;yes
+jmp draw
+done:
+jmp start
diff --git a/hacks/images/m6502/keftal.asm b/hacks/images/m6502/keftal.asm
new file mode 100644
index 0000000..efb2982
--- /dev/null
+++ b/hacks/images/m6502/keftal.asm
@@ -0,0 +1,82 @@
+; awfully slow.. be patient
+
+init:
+ ldx #0
+ stx $0
+ inx
+ stx $2
+ stx $3
+ inx
+ stx $1
+
+loop:
+ lda $2
+ cmp #$20
+ bne notIncF2
+ inc $3
+ lda #0
+ sta $2
+notIncF2:
+ inc $2
+
+; CALCULATE START
+
+ lda $2
+ sta $f1
+ lda $2
+ sta $f2
+ jsr multiply
+
+ lda $f4
+ sta $f8
+
+ lda $3
+ sta $f1
+ lda $3
+ sta $f2
+ jsr multiply
+
+; CALCULATE STOP
+
+ lda $f4
+ clc
+ adc $f8
+
+ lsr
+ lsr
+ lsr
+ lsr
+ lsr
+ ldx #0
+ sta ($0,x)
+ inc $0
+ lda $0
+ cmp #$00
+ bne notNextY
+ inc $1
+ lda $1
+ cmp #6
+ beq exit
+notNextY:
+ jmp loop
+exit:
+ rts
+
+multiply:
+ lda #0
+ sta $f4
+ sta $f5
+ ldx #8
+a:asl $f4
+ rol $f5
+ asl $f2
+ bcc b
+ clc
+ lda $f4
+ adc $f1
+ sta $f4
+ bcc b
+ inc $f5
+b:dex
+ bne a
+ rts \ No newline at end of file
diff --git a/hacks/images/m6502/life.asm b/hacks/images/m6502/life.asm
new file mode 100644
index 0000000..6454812
--- /dev/null
+++ b/hacks/images/m6502/life.asm
@@ -0,0 +1,127 @@
+; Conway\'s Game of Life
+; http://rosettacode.org/wiki/Conway\'s_Game_of_Life
+; Submitted by Anonymous
+
+randfill: stx $01 ;$200 for indirect
+ ldx #$02 ;addressing
+ stx $02
+randloop: lda $fe ;generate random
+ and #$01 ;pixels on the
+ sta ($01),Y ;screen
+ jsr inc0103
+ cmp #$00
+ bne randloop
+ lda $02
+ cmp #$06
+ bne randloop
+
+
+clearmem: lda #$df ;set $07df-$0a20
+ sta $01 ;to $#00
+ lda #$07
+ sta $02
+clearbyte: lda #$00
+ sta ($01),Y
+ jsr inc0103
+ cmp #$20
+ bne clearbyte
+ lda $02
+ cmp #$0a
+ bne clearbyte
+
+
+starttick:
+copyscreen: lda #$00 ;set up source
+ sta $01 ;pointer at
+ sta $03 ;$01/$02 and
+ lda #$02 ;dest pointer
+ sta $02 ;at $03/$04
+ lda #$08
+ sta $04
+ ldy #$00
+copybyte: lda ($01),Y ;copy pixel to
+ sta ($03),Y ;back buffer
+ jsr inc0103 ;increment pointers
+ cmp #$00 ;check to see
+ bne copybyte ;if we\'re at $600
+ lda $02 ;if so, we\'ve
+ cmp #$06 ;copied the
+ bne copybyte ;entire screen
+
+
+conway: lda #$df ;apply conway rules
+ sta $01 ;reset the pointer
+ sta $03 ;to $#01df/$#07df
+ lda #$01 ;($200 - $21)
+ sta $02 ;($800 - $21)
+ lda #$07
+ sta $04
+onecell: lda #$00 ;process one cell
+ ldy #$01 ;upper cell
+ clc
+ adc ($03),Y
+ ldy #$41 ;lower cell
+ clc
+ adc ($03),Y
+chkleft: tax ;check to see
+ lda $01 ;if we\'re at the
+ and #$1f ;left edge
+ tay
+ txa
+ cpy #$1f
+ beq rightcells
+leftcells: ldy #$00 ;upper-left cell
+ clc
+ adc ($03),Y
+ ldy #$20 ;left cell
+ clc
+ adc ($03),Y
+ ldy #$40 ;lower-left cell
+ clc
+ adc ($03),Y
+chkright: tax ;check to see
+ lda $01 ;if we\'re at the
+ and #$1f ;right edge
+ tay
+ txa
+ cpy #$1e
+ beq evaluate
+rightcells: ldy #$02 ;upper-right cell
+ clc
+ adc ($03),Y
+ ldy #$22 ;right cell
+ clc
+ adc ($03),Y
+ ldy #$42 ;lower-right cell
+ clc
+ adc ($03),Y
+evaluate: ldx #$01 ;evaluate total
+ ldy #$21 ;for current cell
+ cmp #$03 ;3 = alive
+ beq storex
+ ldx #$00
+ cmp #$02 ;2 = alive if
+ bne storex ;c = alive
+ lda ($03),Y
+ and #$01
+ tax
+storex: txa ;store to screen
+ sta ($01),Y
+ jsr inc0103 ;move to next cell
+conwayloop: cmp #$e0 ;if not last cell,
+ bne onecell ;process next cell
+ lda $02
+ cmp #$05
+ bne onecell
+ jmp starttick ;run next tick
+
+
+inc0103: lda $01 ;increment $01
+ cmp #$ff ;and $03 as 16-bit
+ bne onlyinc01 ;pointers
+ inc $02
+ inc $04
+onlyinc01: inc $01
+ lda $01
+ sta $03
+ rts
diff --git a/hacks/images/m6502/lines.asm b/hacks/images/m6502/lines.asm
new file mode 100644
index 0000000..152d5fb
--- /dev/null
+++ b/hacks/images/m6502/lines.asm
@@ -0,0 +1,313 @@
+; -*- mode: c; tab-width: 4; fill-column: 128 -*-
+; vi: set ts=4 tw=128:
+
+; Lines, Copyright (c) 2018 Dave Odell <dmo2118@gmail.com>
+;
+; Permission to use, copy, modify, distribute, and sell this software and its
+; documentation for any purpose is hereby granted without fee, provided that
+; the above copyright notice appear in all copies and that both that
+; copyright notice and this permission notice appear in supporting
+; documentation. No representations are made about the suitability of this
+; software for any purpose. It is provided "as is" without express or
+; implied warranty.
+
+; Another port of 20 year old QBasic code.
+
+
+
+main_loop:
+ lda #$00
+ sta $0
+
+y_loop:
+ ldx $0
+
+ lda #1
+ bit $1
+ beq left_right
+
+ ; Up-down. Skip all blank columns.
+ lda x_px0,x
+ and #1
+ bne fill
+ jmp next_y ; next_y is too far to conditional-branch from here.
+
+clear:
+ ldx #1
+ lda $0
+ clc
+ adc #$20
+ tay
+
+ sec
+clear_loop:
+ lda #0 ; $fe
+ sta $0200,y
+ sta $0240,y
+ sta $0280,y
+ sta $02c0,y
+ sta $0300,y
+ sta $0340,y
+ sta $0380,y
+ sta $03c0,y
+ sta $0400,y
+ sta $0440,y
+ sta $0480,y
+ sta $04c0,y
+ sta $0500,y
+ sta $0540,y
+ sta $0580,y
+ sta $05c0,y
+ tya
+ sbc #$20
+ tay
+ dex
+ bpl clear_loop
+ jmp next_y
+
+left_right:
+ ; Repaint columns that were previously on.
+ lda x_px0,x
+ bit const_two
+ beq next_y
+ lda x_px0,x
+ and #1
+ beq clear
+ ;jmp fill
+
+fill:
+ ldx #1
+ lda $0
+ clc
+ adc #$20
+ tay
+
+ sec
+fill_loop:
+ ; 3 * 2 * 16 = 96 bytes
+ lda y_px0,x
+ sta $0200,y
+ lda y_px1,x
+ sta $0240,y
+ lda y_px2,x
+ sta $0280,y
+ lda y_px3,x
+ sta $02c0,y
+ lda y_px4,x
+ sta $0300,y
+ lda y_px5,x
+ sta $0340,y
+ lda y_px6,x
+ sta $0380,y
+ lda y_px7,x
+ sta $03c0,y
+ lda y_px8,x
+ sta $0400,y
+ lda y_px9,x
+ sta $0440,y
+ lda y_pxa,x
+ sta $0480,y
+ lda y_pxb,x
+ sta $04c0,y
+ lda y_pxc,x
+ sta $0500,y
+ lda y_pxd,x
+ sta $0540,y
+ lda y_pxe,x
+ sta $0580,y
+ lda y_pxf,x
+ sta $05c0,y
+ tya
+ sbc #$20
+ tay
+ dex
+ bpl fill_loop
+ ;jmp next_y
+
+next_y:
+ inc $0
+ lda #32
+ cmp $0
+ beq shift
+ jmp y_loop
+
+shift:
+ lda $fe
+ and #$3
+ sta $1 ; Left, down, right, up.
+ beq shift_x1
+
+ cmp #2
+ bmi shift_y1
+ beq shift_x0
+
+shift_y0:
+ ldx #0
+shift_y0_loop:
+ lda y_px0,x
+ eor y_px00,x
+ sta y_px0,x
+ inx
+ cpx #31
+ bne shift_y0_loop
+ jmp main_loop
+
+shift_y1:
+ ldx #30
+shift_y1_loop:
+ lda y_px00,x
+ eor y_px0,x
+ sta y_px00,x
+ dex
+ bpl shift_y1_loop
+ jmp main_loop
+
+shift_x0:
+ ldx #0
+shift_x0_loop:
+ ; px[0] = ((px[0] ^ px[1]) & 1) | (px[1] << 1)
+ lda x_px0,x
+ eor x_px00,x
+ lsr ; Save EOR bit in carry flag.
+ lda x_px00,x
+ rol ; Restore EOR bit.
+ sta x_px0,x
+ inx
+ cpx #31
+ bne shift_x0_loop
+ jmp main_loop
+
+shift_x1:
+ ldx #30
+shift_x1_loop:
+ lda x_px00,x
+ eor x_px0,x
+ lsr
+ lda x_px0,x
+ rol
+ sta x_px00,x
+ dex
+ bpl shift_x1_loop
+ jmp main_loop
+
+y_px0:
+ dcb 0
+y_px00:
+ dcb 0
+y_px1:
+ dcb 0, 0
+y_px2:
+ dcb 0, 0
+y_px3:
+ dcb 0, 0
+y_px4:
+ dcb 0, 0
+y_px5:
+ dcb 0, 0
+y_px6:
+ dcb 0, 0
+y_px7:
+ dcb 0, 0
+y_px8:
+ dcb 1, 0
+y_px9:
+ dcb 0, 0
+y_pxa:
+ dcb 0, 0
+y_pxb:
+ dcb 0, 0
+y_pxc:
+ dcb 0, 0
+y_pxd:
+ dcb 0, 0
+y_pxe:
+ dcb 0, 0
+y_pxf:
+ dcb 0, 0
+
+ ; Bit 0: black row, bit 1: changed row
+x_px0:
+ dcb 0
+x_px00:
+ dcb 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ dcb 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+
+const_two: ; lolz
+ dcb 2
+
+;#include "screenhack.h"
+;
+;struct _lines
+;{
+; unsigned width, height;
+; unsigned long delay;
+; GC gc;
+;};
+;
+;static void *lines_init(Display *display, Window window)
+;{
+; struct _lines *self = malloc(sizeof(*self));
+; XGCValues gcv;
+; XWindowAttributes xgwa;
+;
+; if(!self)
+; abort();
+;
+; XGetWindowAttributes(display, window, &xgwa);
+; self->width = xgwa.width;
+; self->height = xgwa.height;
+;
+; self->delay = get_integer_resource(display, "delay", "Integer");
+;
+; gcv.function = GXxor;
+; gcv.foreground = get_pixel_resource(display, xgwa.colormap, "foreground", "Foreground");
+; self->gc = XCreateGC(display, window, GCFunction | GCForeground, &gcv);
+;
+; XDrawPoint(display, window, self->gc, xgwa.width >> 1, xgwa.height >> 1);
+;
+; return self;
+;}
+;
+;static unsigned long lines_draw(Display *display, Window window, void *self_raw)
+;{
+; struct _lines *self = self_raw;
+; static const XPoint xy[] = {{1, 0}, {0, 1}, {-1, 0}, {0, -1}};
+; const XPoint *p = xy + NRAND(4);
+;
+; XCopyArea(display, window, window, self->gc, 0, 0, self->width, self->height, p->x, p->y);
+; return self->delay;
+;}
+;
+;static void lines_reshape(Display *display, Window window, void *self_raw, unsigned width, unsigned height)
+;{
+; struct _lines *self = self_raw;
+; self->width = width;
+; self->height = height;
+;}
+;
+;static Bool lines_event(Display *display, Window window, void *self_raw, XEvent *event)
+;{
+; return False;
+;}
+;
+;static void lines_free(Display *display, Window window, void *self_raw)
+;{
+; struct _lines *self = self_raw;
+; XFreeGC(display, self->gc);
+; free(self);
+;}
+;
+;static const char *lines_defaults[] =
+;{
+; "*fpsSolid: true",
+; "*delay: 30000",
+; 0
+;};
+;
+;static XrmOptionDescRec lines_options [] =
+;{
+; {"-delay", ".delay", XrmoptionSepArg, 0},
+; {0, 0, 0, 0}
+;};
+;
+;XSCREENSAVER_MODULE ("Lines", lines)
diff --git a/hacks/images/m6502/matrix.asm b/hacks/images/m6502/matrix.asm
new file mode 100644
index 0000000..0ec27a7
--- /dev/null
+++ b/hacks/images/m6502/matrix.asm
@@ -0,0 +1,67 @@
+;;Matrix :)
+
+loop:
+ lda $fe
+ and #$1f
+ tay
+ tax
+ lda matrix,y
+ sta $1
+ tay
+ lda #0
+ jsr paint
+ inc $1
+ lda $1
+ and #$1f
+ sta matrix,y
+ tay
+ lda #5
+ jsr paint
+ lda $fe
+ and #$1f
+ tay
+ tax
+ lda matrix,y
+ sta $1
+ tay
+ lda #$d
+ jsr paint
+ lda $fe
+ and #$1f
+ tay
+ tax
+ lda matrix,y
+ sta $1
+ tay
+ lda #$5
+ jsr paint
+ jmp loop
+
+paint:
+ pha
+ lda yl,y
+ sta $2
+ lda yh,y
+ sta $3
+ txa
+ tay
+ pla
+ sta ($2),y
+ rts
+
+yh:
+ dcb $02, $02, $02, $02, $02, $02, $02, $02
+ dcb $03, $03, $03, $03, $03, $03, $03, $03
+ dcb $04, $04, $04, $04, $04, $04, $04, $04
+ dcb $05, $05, $05, $05, $05, $05, $05, $05
+
+yl:
+ dcb $00, $20, $40, $60, $80, $a0, $c0, $e0
+ dcb $00, $20, $40, $60, $80, $a0, $c0, $e0
+ dcb $00, $20, $40, $60, $80, $a0, $c0, $e0
+ dcb $00, $20, $40, $60, $80, $a0, $c0, $e0
+
+matrix:
+ dcb 5,16,19,19,17,26,10,14,11,4,1,2,20,1,8,30
+ dcb 17,26,19,19,31,21,11,19,3,24,4,24,13,8,8,26
+
diff --git a/hacks/images/m6502/noise.asm b/hacks/images/m6502/noise.asm
new file mode 100644
index 0000000..32447d7
--- /dev/null
+++ b/hacks/images/m6502/noise.asm
@@ -0,0 +1,16 @@
+; static noise
+
+start: ldy #$ff
+ ldx #$0
+loop: lda $fe
+ sta $200,x
+ and #$7
+ sta $300,x
+ and #$3
+ sta $400,x
+ and #$1
+ sta $500,x
+ inx
+ dey
+ bne loop
+ rts
diff --git a/hacks/images/m6502/random-walk.asm b/hacks/images/m6502/random-walk.asm
new file mode 100644
index 0000000..4c3bd15
--- /dev/null
+++ b/hacks/images/m6502/random-walk.asm
@@ -0,0 +1,82 @@
+ ;; Jeremy English Dec 11 2007
+ ;; Random walk
+ lda #16
+ sta $0 ; The current x pos
+ sta $1 ; The current y pos
+ lda $fe ; Get random color
+ sta $5 ; Store the color
+ lda $fe ; Amount of time to use this color
+ sta $6
+
+loop:
+ ldx $0
+ ldy $1
+ lda $5
+ jsr paint
+ jsr walk
+ dec $6
+ bne loop
+ ;; get a new color
+ lda $fe
+ sta $5
+ ;; get a new duration
+ lda $fe
+ sta $6
+ jmp loop
+
+walk:
+ lda $fe
+ and #3
+ cmp #0
+ beq right
+ cmp #1
+ beq left
+ cmp #2
+ beq up
+ jmp down
+
+right:
+ inc $0
+ jmp done
+left:
+ dec $0
+ jmp done
+up:
+ dec $1
+ jmp done
+down:
+ inc $1
+ jmp done
+done:
+ lda $0
+ and #31
+ sta $0
+ lda $1
+ and #31
+ sta $1
+ rts
+
+paint:
+ pha
+ lda yl,y
+ sta $2
+ lda yh,y
+ sta $3
+ txa
+ tay
+ pla
+ sta ($2),y
+ rts
+
+ ;; Y cord MSB
+yh:
+ dcb $02, $02, $02, $02, $02, $02, $02, $02
+ dcb $03, $03, $03, $03, $03, $03, $03, $03
+ dcb $04, $04, $04, $04, $04, $04, $04, $04
+ dcb $05, $05, $05, $05, $05, $05, $05, $05
+ ;; Y cord LSB
+yl:
+ dcb $00, $20, $40, $60, $80, $a0, $c0, $e0
+ dcb $00, $20, $40, $60, $80, $a0, $c0, $e0
+ dcb $00, $20, $40, $60, $80, $a0, $c0, $e0
+ dcb $00, $20, $40, $60, $80, $a0, $c0, $e0
diff --git a/hacks/images/m6502/random.asm b/hacks/images/m6502/random.asm
new file mode 100644
index 0000000..9ff5d2d
--- /dev/null
+++ b/hacks/images/m6502/random.asm
@@ -0,0 +1,11 @@
+loop: lda $fe ; A=rnd
+ sta $00 ; ZP(0)=A
+ lda $fe
+ and #$3 ; A=A&3
+ clc ; Clear carry
+ adc #$2 ; A+=2
+ sta $01 ; ZP(1)=A
+ lda $fe ; A=rnd
+ ldy #$0 ; Y=0
+ sta ($00),y ; ZP(0),ZP(1)=y
+ jmp loop
diff --git a/hacks/images/m6502/random2.asm b/hacks/images/m6502/random2.asm
new file mode 100644
index 0000000..c209f9f
--- /dev/null
+++ b/hacks/images/m6502/random2.asm
@@ -0,0 +1,11 @@
+ lda $fe ; A=rnd
+ sta $00 ; ZP(0)=A
+ lda $fe
+ and #$3 ; A=A&3
+ clc ; Clear carry
+ adc #$2 ; A+=2
+ sta $01 ; ZP(1)=A
+ lda $fe ; A=rnd
+ ldy #$0 ; Y=0
+ sta ($00),y ; ZP(0),ZP(1)=y
+ jmp $600
diff --git a/hacks/images/m6502/rorschach.asm b/hacks/images/m6502/rorschach.asm
new file mode 100644
index 0000000..c5591f0
--- /dev/null
+++ b/hacks/images/m6502/rorschach.asm
@@ -0,0 +1,124 @@
+; "Rorschach test"
+; Not at all what it was supposed to be,
+; but it turns out pretty cool and can
+; create some interesting patterns.
+
+ lda #8
+ tax
+dr:
+ sta $3cb,x
+ sta $40b,x
+ dex
+ bpl dr
+ sta $3f3
+ sta $3eb
+
+ lda #1
+ sta $3ec
+
+ ldx #255
+mk:
+ lda $fe
+ sta $1200,x
+ lda $fe
+ sta $1300,x
+ lda $fe
+ sta $1400,x
+ lda $fe
+ sta $1500,x
+ dex
+ cpx #$ff
+ bne mk
+
+; smooth it
+
+ ldy #0
+re:
+ lda #1
+ sta $3ec,y
+
+ ldx #255
+sm:
+ lda $1201,x
+ adc $11ff,x
+ adc $1220,x
+ adc $11e0,x
+ lsr
+ lsr
+ sta $1200,x
+
+ lda $1301,x
+ adc $12ff,x
+ adc $1320,x
+ adc $12e0,x
+ lsr
+ lsr
+ sta $1300,x
+
+ lda $1401,x
+ adc $13ff,x
+ adc $1420,x
+ adc $13e0,x
+ lsr
+ lsr
+ sta $1400,x
+
+ lda $1501,x
+ adc $14ff,x
+ adc $1520,x
+ adc $14e0,x
+ lsr
+ lsr
+ sta $1500,x
+
+ dex
+ cpx #$ff
+ bne sm
+ iny
+ cpy #7
+ bne re
+
+ lda #1
+ sta $3f0
+
+ ;copy it
+
+ clc
+ ldx #255
+cp:
+ lda $1200,x
+ lsr
+ lsr
+ tay
+ lda colors,y
+ sta $200,x
+
+ lda $1300,x
+ lsr
+ lsr
+ tay
+ lda colors,y
+ sta $300,x
+
+ lda $1400,x
+ lsr
+ lsr
+ tay
+ lda colors,y
+ sta $400,x
+
+ lda $1500,x
+ lsr
+ lsr
+ tay
+ lda colors,y
+ sta $500,x
+
+ dex
+ cpx #$ff
+ bne cp
+ rts
+
+colors:
+ dcb 0,0,0,0,0,$9,$9,1,1,0,0,0,0,0
+
diff --git a/hacks/images/m6502/santa.asm b/hacks/images/m6502/santa.asm
new file mode 100644
index 0000000..be47502
--- /dev/null
+++ b/hacks/images/m6502/santa.asm
@@ -0,0 +1,142 @@
+start:
+ldx #0
+cs:
+lda $2000,x
+sta $500,x
+dex
+bne cs
+
+stx $20
+
+loop:
+
+inc $20
+lda $20
+and #$7f
+tay
+and #$1f
+tax
+lda sinus,x
+tax
+
+d:
+
+lda #0
+sta $1e0,x
+sta $2e0,x
+lda $1000,y
+sta $200,x
+lda $1080,y
+sta $220,x
+lda $1100,y
+sta $240,x
+lda $1180,y
+sta $260,x
+lda $1200,y
+sta $280,x
+lda $1280,y
+sta $2a0,x
+lda $1300,y
+sta $2c0,x
+lda $1380,y
+sta $2c0,x
+inx
+iny
+txa
+and #$1f
+bne d
+
+jmp loop
+
+; 32 ($20) long
+sinus:
+dcb 0,0,0,0,$20,$20,$20
+dcb $40,$40,$60,$80,$a0,$a0,$c0,$c0,$c0
+dcb $e0,$e0,$e0,$e0,$c0,$c0,$c0
+dcb $a0,$a0,$80,$60,$40,$40,$20,$20,$20
+
+*=$1000
+santa:
+dcb 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dcb 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dcb 0,0,0,0,0,0,0,0,$a,$a,0,0,0,0,0,0
+dcb 0,0,0,0,0,$a,$a,0,0,0,0,0,0,0,0,0
+dcb 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dcb 0,2,2,2,1,0,0,0,0,$9,$9,$9,$9,0,0,0
+dcb 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dcb 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dcb 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dcb 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dcb 0,0,0,0,0,0,0,0,$a,$a,$a,0,0,0,0,0
+dcb 0,0,0,0,0,$a,$a,$a,0,0,0,0,0,0,0,0
+dcb 0,0,0,0,0,0,$9,$9,0,0,0,0,0,0,0,0
+dcb 0,1,1,2,2,0,$9,$9,$9,$9,$9,$9,0,0,0,0
+dcb 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dcb 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dcb 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dcb 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dcb 0,0,0,0,0,0,$a,$a,$a,$a,$a,$a,0,0,0,0
+dcb 0,0,0,$a,$a,$a,$a,$a,$a,0,0,0,0,0,0,0
+dcb 0,0,0,0,0,0,0,$9,$9,$9,0,0,0,0,0,0
+dcb 0,1,2,2,$9,$9,$9,$9,$9,$9,$9,0,0,0,0,0
+dcb 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dcb 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dcb 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dcb 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dcb 0,0,0,0,0,0,0,0,0,$a,$a,$a,$a,$a,$a,$b
+dcb $b,$b,$b,$b,$b,$b,$a,$a,$a,$a,$a,$a,$b,$b,$b,$b
+dcb $b,$b,$b,$b,$b,$9,$9,$9,$9,$9,$9,$9,$9,$9,$9,$9
+dcb $9,2,2,$9,$9,$9,$9,$9,$9,$9,0,0,0,0,0,0
+dcb 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dcb 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dcb 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dcb 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dcb 0,0,0,0,0,0,0,0,0,$a,$a,$a,$a,$a,$a,$a
+dcb $a,0,0,0,0,0,$a,$a,$a,$a,$a,$a,$a,$a,0,0
+dcb 0,0,0,0,0,0,0,$9,$9,$9,$9,$9,$9,$9,$9,$9
+dcb 2,2,$9,$9,$9,$9,$9,$9,$9,$9,$9,0,0,0,0,0
+dcb 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dcb 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dcb 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dcb 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dcb 0,0,0,0,0,0,0,0,0,$a,$a,$a,$a,$a,$a,0
+dcb $a,$a,0,0,0,0,$a,$a,$a,$a,$a,$a,0,$a,$a,0
+dcb 0,0,0,0,0,$a,$a,0,0,$9,$a,$9,$9,$9,$9,$9
+dcb $9,$9,$a,$9,$9,$9,$9,$9,$9,$9,$9,0,0,0,0,0
+dcb 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dcb 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dcb 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dcb 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dcb 0,0,0,0,0,0,0,0,0,$a,0,$a,0,0,$a,0
+dcb 0,$a,0,0,0,0,$a,0,$a,0,0,$a,0,0,$a,0
+dcb 0,0,0,0,0,$a,0,0,0,$a,0,0,0,0,0,0
+dcb 0,$a,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dcb 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dcb 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dcb 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dcb 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dcb 0,0,0,0,0,0,0,0,$a,$a,0,$a,0,0,$a,$a
+dcb 0,$a,$a,0,0,$a,$a,0,$a,0,0,$a,$a,0,$a,$a
+dcb 0,0,0,0,0,0,$a,$a,$a,$a,$a,$a,$a,$a,$a,$a
+dcb $a,$a,$a,$a,$a,$a,$a,$a,$a,$a,$a,0,0,0,0,0
+dcb 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dcb 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+
+*=$2000
+dcb 0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0
+dcb 0,0,0,0,0,0,0,0,0,0,0,0,$c,1,1,1
+dcb 0,0,0,0,0,0,0,0,0,0,0,1,1,1,$a,$a
+dcb 0,0,0,0,0,0,0,0,0,0,$c,1,1,1,1,1
+dcb 1,1,$c,0,0,0,0,0,0,0,0,0,1,1,0,0
+dcb 0,0,0,0,0,0,0,0,$c,1,1,1,1,1,1,1
+dcb 1,1,1,1,1,$c,0,0,0,0,0,1,1,1,1,0
+dcb 0,0,0,0,0,0,$c,1,1,1,1,1,1,1,1,1
+dcb 1,1,1,1,1,1,$c,0,0,0,0,1,1,1,1,0
+dcb 0,0,0,0,0,$c,1,1,1,1,1,1,1,1,1,1,1
+dcb 1,1,1,1,1,1,1,1,$c,0,0,1,1,0,0
+dcb 0,0,$c,1,1,1,1,1,1,1,1,1,1,1,1,1
+dcb 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
+dcb 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
+dcb 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
+dcb 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
+ \ No newline at end of file
diff --git a/hacks/images/m6502/selfmodify.asm b/hacks/images/m6502/selfmodify.asm
new file mode 100644
index 0000000..f7bb646
--- /dev/null
+++ b/hacks/images/m6502/selfmodify.asm
@@ -0,0 +1,12 @@
+; A very simple example of
+; self-modifying code
+; and code entry points
+
+ lda $fe
+ sta $1001
+ jmp $1000
+
+ *=$1000
+ lda #$00
+ sta $3ef
+ jmp $600
diff --git a/hacks/images/m6502/sflake.asm b/hacks/images/m6502/sflake.asm
new file mode 100644
index 0000000..cbb72e8
--- /dev/null
+++ b/hacks/images/m6502/sflake.asm
@@ -0,0 +1,320 @@
+;; Jeremy English 01-December-2008
+;; Snowflakes
+
+;; Main loop Count
+lda #7
+sta $f
+
+;; pattern number
+lda #0
+sta $10
+
+;;Cells
+lda #$00
+sta $4
+lda #$10
+sta $5
+
+;;Tmp
+lda #$00
+sta $6
+lda #$11
+sta $7
+
+;;Init Cells Buffer
+;;------------------------------------------------------------
+ldy #$ff
+initCells:
+lda #0
+sta ($4),y
+sta ($6),y
+dey
+bne initCells
+
+;;Set start position
+ldy #115
+lda #1
+sta ($4),y
+
+;;Setup offset
+lda #15
+sta $d
+lda #16
+sta $e
+
+;;Start of main loop
+;;------------------------------------------------------------
+mainloop:
+
+;;init indent
+;;We want to indent every other line
+lda #0
+sta $a
+
+lda #0
+sta $9
+
+;; Display Cells
+;;------------------------------------------------------------
+;; 248 is the total number of cells
+ldy #248
+display:
+
+lda #0
+sta $8
+
+lda $a
+beq stop16
+lda #15
+sta $b
+lda #1
+sta $8
+jmp toggle
+stop16:
+lda #16
+sta $b
+toggle:
+lda $a
+eor #1
+sta $a
+
+;; Set the stop position
+ldx $b
+inner_display:
+dex
+txa
+pha
+
+dey
+tya
+pha
+lda ($4),y
+
+beq display_continue
+ldx $8
+ldy $9
+lda #1
+jsr paint
+ldx $8
+ldy $9
+inx
+jsr paint
+ldx $8
+ldy $9
+iny
+jsr paint
+ldx $8
+ldy $9
+inx
+iny
+jsr paint
+display_continue:
+inc $8
+inc $8
+
+;;Life Cycle
+;;------------------------------------------------------------
+pla
+tay
+pha ;;Store y on the stack
+
+tax
+dey
+lda ($4),y
+iny
+iny
+clc
+adc ($4),y
+sta $c
+
+txa
+sec
+sbc $d
+tay
+lda $c
+clc
+adc ($4),y
+sta $c
+
+txa
+sec
+sbc $e
+tay
+lda $c
+clc
+adc ($4),y
+sta $c
+
+txa
+clc
+adc $d
+tay
+lda $c
+clc
+adc ($4),y
+sta $c
+
+txa
+clc
+adc $e
+tay
+lda $c
+clc
+adc ($4),y
+sta $c
+
+pla
+tay ;;Pull Y off of the stack
+
+lda $c
+and #1
+beq dontset
+sta ($6),y
+dontset:
+
+pla
+tax ;;Pull x off of the stack
+beq exit_inner_display
+jmp inner_display
+exit_inner_display:
+inc $9
+inc $9
+tya
+beq display_exit
+jmp display
+display_exit:
+
+
+;;Copy Temporary Buffer
+;;------------------------------------------------------------
+ldy #248
+copybuf:
+dey
+lda ($6),y
+sta ($4),y
+tya
+bne copybuf
+
+dec $f
+lda $f
+beq reset_main
+jmp mainloop
+
+;;Reset main counter
+;;------------------------------------------------------------
+reset_main:
+lda #7
+sta $f
+
+lda #$ff ;;Delay Count
+sta $11
+delay:
+ldy #$a0
+inner_delay:
+nop
+dey
+bne inner_delay
+dec $11
+lda $11
+bne delay
+
+;; init buffer
+;; and clear screen
+clrscr:
+lda $fe
+and $f
+cmp #1
+beq clrscr ;We don't want a white background
+ldy #$00
+ldx #$0
+cs_loop:
+sta $200,x
+sta $300,x
+sta $400,x
+sta $500,x
+pha
+lda #0
+sta ($6),y
+sta ($4),y
+pla
+inx
+dey
+bne cs_loop
+
+;; Setup new pattern
+;;------------------------------------------------------------
+inc $10
+lda $10
+and #3
+sta $10
+cmp #0
+beq pattern1
+cmp #1
+beq pattern2
+cmp #2
+beq pattern3
+cmp #3
+beq pattern4
+
+pattern1:
+ldy #114
+lda #1
+sta ($4),y
+ldy #115
+lda #1
+sta ($4),y
+ldy #116
+lda #1
+sta ($4),y
+jmp mainloop
+
+pattern2:
+ldy #113
+lda #1
+sta ($4),y
+ldy #118
+lda #1
+sta ($4),y
+jmp mainloop
+
+pattern3:
+ldy #115
+lda #1
+sta ($4),y
+jmp mainloop
+
+pattern4:
+ldy #102
+lda #1
+sta ($4),y
+ldy #128
+lda #1
+sta ($4),y
+jmp mainloop
+
+;;Paint subroutine
+;;------------------------------------------------------------
+paint:
+ pha
+ lda yl,y
+ sta $2
+ lda yh,y
+ sta $3
+ txa
+ tay
+ pla
+ sta ($2),y
+ rts
+
+ ;; Y cord MSB
+yh:
+ dcb $02, $02, $02, $02, $02, $02, $02, $02
+ dcb $03, $03, $03, $03, $03, $03, $03, $03
+ dcb $04, $04, $04, $04, $04, $04, $04, $04
+ dcb $05, $05, $05, $05, $05, $05, $05, $05
+ ;; Y cord LSB
+yl:
+ dcb $00, $20, $40, $60, $80, $a0, $c0, $e0
+ dcb $00, $20, $40, $60, $80, $a0, $c0, $e0
+ dcb $00, $20, $40, $60, $80, $a0, $c0, $e0
+ dcb $00, $20, $40, $60, $80, $a0, $c0, $e0
diff --git a/hacks/images/m6502/sierpinski.asm b/hacks/images/m6502/sierpinski.asm
new file mode 100644
index 0000000..2d21905
--- /dev/null
+++ b/hacks/images/m6502/sierpinski.asm
@@ -0,0 +1,24 @@
+; Sierpinski
+; Submitted by Anonymous
+
+start:
+ lda #$e1
+ sta $0
+ lda #$01
+ sta $1
+ ldy #$20
+
+write:
+ ldx #$00
+ eor ($0, x)
+ sta ($0),y
+
+ inc $0
+ bne write
+ inc $1
+ ldx $1
+ cpx #$06
+ bne write
+
+ rts
+
diff --git a/hacks/images/m6502/sierpinsky.asm b/hacks/images/m6502/sierpinsky.asm
new file mode 100644
index 0000000..6a67906
--- /dev/null
+++ b/hacks/images/m6502/sierpinsky.asm
@@ -0,0 +1,131 @@
+; 6502 assembler Sierpinsky Triangle ver.2
+; by Magnus Wedmark 2007-05-02
+; This program is especially written for
+; the 6502asm.com competition and
+; uses the 32*32 pixel display used in that
+; virtual platform. The sierpinsky
+; fractal is one of the simplest to
+; implement. Here is a walk-through:
+; 1) Specify 3 points that form a triangle
+; 2) Choose one of them as a starting point
+; 3) Choose one of them as targetpoint randomly
+; 4) Set the new current position half-way
+; between the current point and the target
+; point.
+; 5) Goto 3
+
+ LDX #0
+ LDY #0
+new_rnd:
+ LDA $FE ; random 0-255
+ AND #3 ; only 0-3 left
+ CMP #3
+ BNE good_rnd
+ JMP new_rnd
+good_rnd:
+; random = 0-2
+ PHA
+; transform X and Y values according to:
+; X=X/2+(P*8) and Y=Y/2+(P*16)
+ ASL
+ ASL
+ ASL
+ STA $F3 ; P*8
+ PLA
+ AND #1
+ ASL
+ ASL
+ ASL
+ ASL
+ STA $F4 ; (P AND 1)*16
+ TXA
+ LSR
+ ADC $F3
+ TAX
+ TYA
+ LSR
+ ADC $F4
+ TAY
+ JSR set_point ; use and restore regs
+ JMP new_rnd
+
+set_point: ; uses both X,Y,A and restores them
+ PHA ; backup all reg-value (X,Y,A)
+ TXA
+ PHA
+ TYA
+ PHA
+ PHA
+ PHA ; triple Y push, two for int. use
+ STX $F2 ; transfer X to Y using $F2
+ LDY $F2
+ LDA #0
+ STA $F0
+ LDA #$2
+ STA $F1 ; set base vector to $200
+ LDA #0
+ PLA ; transfer the pushed Y-coord to A
+ AND #$07 ; the value %0000'0111
+ ASL
+ ASL
+ ASL
+ ASL
+ ASL
+ CLC
+ ADC $F0
+ STA $F0
+ BCC no_carry
+ INC $F1
+no_carry:
+ CLC
+ PLA ; transfer the pushed Y-coord to A
+ AND #$18
+ LSR
+ LSR
+ LSR
+ ADC $F1
+ STA $F1
+
+ CLC
+ TYA
+ ADC $F0
+ ADC $F1
+
+ LDA #1 ;1 = white for trouble-shooting
+ JSR set_toning_point ; use for shading
+ STA ($F0),Y ; set pixel
+ PLA ; restore all reg-value (X,Y,A)
+ TAY
+ PLA
+ TAX
+ PLA
+ RTS
+
+; sub routine to shade the current pixel ($F0),Y
+; lighter on a scale: $0, $B, $C, $F, $1
+; Black, DarkGrey, Grey, LightGrey, White
+set_toning_point:
+ LDA ($F0),Y
+ CMP #$00
+ BNE not_black
+ LDA #$0B
+ RTS
+not_black:
+ CMP #$0B
+ BNE not_dgrey
+ LDA #$0C
+ RTS
+not_dgrey:
+ CMP #$0C
+ BNE not_grey
+ LDA #$0F
+ RTS
+not_grey:
+ CMP #$0F
+ BNE not_lgrey
+ LDA #$01
+ RTS
+not_lgrey:
+; white stays white
+ RTS
+
diff --git a/hacks/images/m6502/softsprite.asm b/hacks/images/m6502/softsprite.asm
new file mode 100644
index 0000000..eab6d67
--- /dev/null
+++ b/hacks/images/m6502/softsprite.asm
@@ -0,0 +1,132 @@
+; software sprites
+; by PJP
+
+loop:
+ ldx $90
+ inx
+ stx $90
+
+ lda #4 ; *** NUMBER OF SPRITES
+ sta $3
+ lda #0
+ sta $4
+
+multiple:
+ lda $90
+ clc
+ adc $4
+ tax
+
+ lda sinus,x
+ ldy cosinus,x
+ asl
+ tax
+ lda ypos,x
+ sta $00
+ inx
+ lda ypos,x
+ sta $01
+ ldx #0
+ lda #5 ; **** HEIGHT OF EACH SPRITE
+ sta $2
+draw:
+ lda image,x
+ sta ($0),y
+ inx
+ iny
+ lda image,x
+ sta ($0),y
+ inx
+ iny
+ lda image,x
+ sta ($0),y
+ inx
+ iny
+ lda image,x
+ sta ($0),y
+ inx
+ iny
+ lda image,x
+ sta ($0),y
+
+
+ tya
+ clc
+ adc #28
+ tay
+ inx
+ dec $2
+ bne draw
+
+ lda $4
+ clc
+ adc #18 ; *** DISTANCE BETWEEN SPRITES (FROM TABLE)
+ sta $4
+
+ dec $3
+ bne multiple
+
+ jmp loop
+
+; SINUS (AND COSINUS)
+
+sinus:
+ dcb $0e, $0e, $0e, $0f, $0f, $0f, $10, $10, $10, $11
+ dcb $11, $11, $12, $12, $12, $13, $13, $13, $14, $14
+ dcb $14, $14, $15, $15, $15, $16, $16, $16, $16, $17
+ dcb $17, $17, $17, $18, $18, $18, $18, $19, $19, $19
+ dcb $19, $19, $1a, $1a, $1a, $1a, $1a, $1a, $1a, $1b
+ dcb $1b, $1b, $1b, $1b, $1b, $1b, $1b, $1b, $1b, $1b
+ dcb $1b, $1b, $1b, $1b, $1b, $1b, $1b, $1b, $1b, $1b
+cosinus:
+ dcb $1b, $1b, $1b, $1b, $1b, $1b, $1b, $1b, $1b, $1b
+ dcb $1a, $1a, $1a, $1a, $1a, $1a, $19, $19, $19, $19
+ dcb $19, $18, $18, $18, $18, $18, $17, $17, $17, $17
+ dcb $16, $16, $16, $15, $15, $15, $15, $14, $14, $14
+ dcb $13, $13, $13, $12, $12, $12, $11, $11, $11, $10
+ dcb $10, $10, $0f, $0f, $0f, $0e, $0e, $0e, $0d, $0d
+ dcb $0d, $0c, $0c, $0c, $0b, $0b, $0b, $0a, $0a, $0a
+ dcb $09, $09, $09, $08, $08, $08, $07, $07, $07, $06
+ dcb $06, $06, $06, $05, $05, $05, $04, $04, $04, $04
+ dcb $03, $03, $03, $03, $03, $02, $02, $02, $02, $02
+ dcb $01, $01, $01, $01, $01, $01, $00, $00, $00, $00
+ dcb $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ dcb $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ dcb $00, $00, $00, $00, $00, $00, $00, $01, $01, $01
+ dcb $01, $01, $01, $01, $02, $02, $02, $02, $02, $03
+ dcb $03, $03, $03, $04, $04, $04, $04, $05, $05, $05
+ dcb $05, $06, $06, $06, $07, $07, $07, $07, $08, $08
+ dcb $08, $09, $09, $09, $0a, $0a, $0a, $0b, $0b, $0b
+ dcb $0c, $0c, $0c, $0d, $0d
+
+ dcb $0e, $0e, $0e, $0f, $0f, $0f, $10, $10, $10, $11
+ dcb $11, $11, $12, $12, $12, $13, $13, $13, $14, $14
+ dcb $14, $14, $15, $15, $15, $16, $16, $16, $16, $17
+ dcb $17, $17, $17, $18, $18, $18, $18, $19, $19, $19
+ dcb $19, $19, $1a, $1a, $1a, $1a, $1a, $1a, $1a, $1b
+ dcb $1b, $1b, $1b, $1b, $1b, $1b, $1b, $1b, $1b, $1b
+ dcb $1b, $1b, $1b, $1b, $1b, $1b, $1b, $1b, $1b, $1b
+ dcb $1b, $1b, $1b, $1b, $1b, $1b, $1b, $1b, $1b, $1b
+ dcb $1a, $1a, $1a, $1a, $1a, $1a, $19, $19, $19, $19
+
+; 5x5 BYTES
+
+image:
+ dcb $0,$0,$0,$0,$0
+ dcb $0,$c,$c,$c,$0
+ dcb $0,$c,$1,$c,$0
+ dcb $0,$c,$c,$c,$0
+ dcb $0,$0,$0,$0,$0
+
+; YPOS LOOKUP TABLE
+
+ypos:
+ dcb $00,$02,$20,$02,$40,$02,$60,$02
+ dcb $80,$02,$a0,$02,$c0,$02,$e0,$02
+ dcb $00,$03,$20,$03,$40,$03,$60,$03
+ dcb $80,$03,$a0,$03,$c0,$03,$e0,$03
+ dcb $00,$04,$20,$04,$40,$04,$60,$04
+ dcb $80,$04,$a0,$04,$c0,$04,$e0,$04
+ dcb $00,$05,$20,$05,$40,$05,$60,$05
+ dcb $80,$05,$a0,$05,$c0,$05,$e0,$05
+
diff --git a/hacks/images/m6502/spacer.asm b/hacks/images/m6502/spacer.asm
new file mode 100644
index 0000000..bdecbb5
--- /dev/null
+++ b/hacks/images/m6502/spacer.asm
@@ -0,0 +1,235 @@
+; "spacer", move a space ship through an
+; endless tunnel. You die once you hit
+; the walls.
+;
+; Controls:
+;
+; W - move up
+; X - move down
+; Any other key will stop the ship
+;
+; Ps: this game runs awfully slow =)
+;
+
+start:
+ jsr init
+
+loop:
+ ;; jsr drawShip
+ jsr drawMap
+ jsr genMap
+ jsr readKeys
+ jmp loop
+
+;--
+
+drawShip:
+ lda $82 ; mychange
+; asl
+ tay
+
+ lda ypos,y
+ sta $00
+ iny
+ lda ypos,y
+ sta $01
+
+ ldx #42
+ lda ($00,x)
+ cmp #0
+ beq noCrash
+ cmp #5
+; bne crashed
+;my changes
+noCrash:
+ lda #5
+ sta ($00,x)
+
+ lda $60
+ cmp $61
+ beq ret
+
+ lda $61
+ asl
+ tay
+ lda ypos,y
+ sta $00
+ iny
+ lda ypos,y
+ sta $01
+ lda #0
+ ldx #42
+ sta ($00,x)
+
+ lda $60
+ sta $61
+ret:
+ rts
+
+;--
+
+crashed:
+ lda $fe
+ sta ($00,x)
+ jmp crashed
+
+;--
+
+readKeys:
+ lda $ff
+ cmp #119
+ bne notUp
+ dec $60
+ rts
+notUp:
+ cmp #120
+ bne noMove
+ inc $60
+noMove:
+ rts
+
+;--
+
+init:
+ ldx #0
+drawLogo:
+ lda bottomLogo,x
+ sta $500,x
+ inx
+ cpx #0
+ bne drawLogo
+
+ lda #10
+ sta $60
+ sta $61
+
+ ldx #0
+ lda #$c
+c:sta $200,x
+ sta $400,x
+ dex
+ cpx #0
+ bne c
+
+ lda #16
+ sta $80 ; origin
+ ldx #15
+set:
+ sta $81,x ; target
+ dex
+ bpl set
+ rts
+
+;--
+
+drawMap:
+ lda #0
+ sta $78
+ lda #32
+ sta $79
+ lda #192
+ sta $7a
+ lda #224
+ sta $7b
+
+ ldx #15
+drawLoop:
+ lda $81,x
+ sta $82,x
+ tay
+ lda ypos,y
+ sta $00
+ iny
+ lda ypos,y
+ sta $01
+
+ lda #$c
+ ldy $78
+ sta ($00),y
+ iny
+ sta ($00),y
+
+ ldy $7b
+ sta ($00),y
+ iny
+ sta ($00),y
+
+ ldy $79
+ lda #0
+ sta ($00),y
+ iny
+ sta ($00),y
+
+ ldy $7a
+ sta ($00),y
+ iny
+ sta ($00),y
+
+ inc $78
+ inc $79
+ inc $7a
+ inc $7b
+ inc $78
+ inc $79
+ inc $7a
+ inc $7b
+ dex
+ bpl drawLoop
+ rts
+
+;---
+
+genMap:
+ lda $80
+ cmp $81
+ beq done
+ lda $80
+ clc
+ sbc $81
+ bpl plus
+ bmi minus
+done:
+ lda $fe
+ and #$f
+ asl
+ sta $80
+ rts
+minus:
+ dec $81
+ dec $81
+ rts
+plus:
+ inc $81
+ inc $81
+ rts
+
+ypos:
+ dcb $00,$02,$20,$02,$40,$02,$60,$02
+ dcb $80,$02,$a0,$02,$c0,$02,$e0,$02
+ dcb $00,$03,$20,$03,$40,$03,$60,$03
+ dcb $80,$03,$a0,$03,$c0,$03,$e0,$03
+ dcb $00,$04,$20,$04,$40,$04,$60,$04
+ dcb $80,$04,$a0,$04,$c0,$04,$e0,$04
+ dcb $00,$05,$20,$05,$40,$05,$60,$05
+ dcb $80,$05,$a0,$05,$c0,$05,$e0,$05
+
+bottomLogo:
+ dcb $0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0
+ dcb $0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0
+ dcb $0,$0,$0,$0,$0,$0,$1,$1,$1,$6,$1,$1,$1,$0
+ dcb $0,$6,$1,$1,$6,$0,$0,$1,$1,$1,$6,$0,$1,$1
+ dcb $1,$0,$1,$1,$1,$6,$0,$0,$6,$1,$6,$0,$6,$0
+ dcb $1,$0,$6,$1,$6,$1,$6,$0,$1,$0,$1,$0,$6,$0
+ dcb $6,$1,$6,$0,$6,$0,$1,$0,$6,$1,$6,$0,$0,$6
+ dcb $1,$1,$6,$6,$1,$1,$1,$0,$6,$1,$0,$0,$1,$0
+ dcb $1,$6,$0,$6,$6,$1,$1,$1,$0,$6,$1,$0,$6,$1
+ dcb $0,$6,$6,$6,$6,$6,$1,$6,$1,$1,$6,$6,$6,$1
+ dcb $1,$1,$1,$6,$1,$6,$6,$6,$6,$1,$6,$6,$6,$6
+ dcb $1,$1,$1,$6,$6,$6,$6,$1,$1,$1,$1,$e,$1,$1
+ dcb $e,$6,$6,$1,$1,$6,$1,$6,$1,$1,$1,$1,$e,$1
+ dcb $1,$1,$1,$6,$1,$1,$6,$1,$6,$6,$6,$1,$1,$1
+ dcb $6,$e,$1,$1,$6,$e,$6,$1,$1,$e,$1,$e,$6,$1
+ dcb $1,$1,$6,$e,$1,$1,$1,$e,$1,$1,$6,$1,$6,$e
+ dcb $e,$e,$6,$e,$e,$6,$e,$e,$6,$e,$e,$6,$e,$e
+ dcb $6,$e,$e,$6,$e,$e,$6,$e,$e,$6,$e,$e,$6,$e
+ dcb $e,$6,$e,$e
diff --git a/hacks/images/m6502/starfield2d.asm b/hacks/images/m6502/starfield2d.asm
new file mode 100644
index 0000000..4c26efe
--- /dev/null
+++ b/hacks/images/m6502/starfield2d.asm
@@ -0,0 +1,50 @@
+; 2d starfield
+; Submitted by Anonymous
+
+i:ldx #$7
+g:lda $fe
+ and #3
+ adc #1
+ sta $0,x
+ lda $fe
+ and #$1f
+ sta $20,x
+ dex
+ bpl g
+f:
+ lda #$ff
+ sta $10
+ delay:
+ nop
+ dec $10
+ bne delay
+
+ lda #$00
+ sta $80
+ lda #$02
+ sta $81
+ ldx #$7
+l:lda $20,x
+ pha
+ clc
+ sbc $00,x
+ and #$1f
+ sta $20,x
+ lda $20,x
+ tay
+ lda #1
+ sta ($80),y
+ pla
+ tay
+ lda #0
+ sta ($80),y
+ lda $80
+ clc
+ adc #$80
+ bne n
+ inc $81
+n:sta $80
+ dex
+ bpl l
+ jmp f
+
diff --git a/hacks/images/m6502/texture.asm b/hacks/images/m6502/texture.asm
new file mode 100644
index 0000000..b63d0a2
--- /dev/null
+++ b/hacks/images/m6502/texture.asm
@@ -0,0 +1,393 @@
+; -*- mode: c; tab-width: 4; fill-column: 128 -*-
+; vi: set ts=4 tw=128:
+
+; Texture, Copyright (c) 2017 Dave Odell <dmo2118@gmail.com>
+;
+; Permission to use, copy, modify, distribute, and sell this software and its
+; documentation for any purpose is hereby granted without fee, provided that
+; the above copyright notice appear in all copies and that both that
+; copyright notice and this permission notice appear in supporting
+; documentation. No representations are made about the suitability of this
+; software for any purpose. It is provided "as is" without express or
+; implied warranty.
+
+; A port of 20 year old QBasic code to a much more modern platform.
+
+
+
+
+
+ lda $fe
+ sta src_row
+
+ ldy #0
+top_loop:
+ lda $fe
+ and #$f
+ sbc #$8
+ adc src_row,y
+ iny
+ sta src_row,y
+ cpy #31
+ bne top_loop
+
+lda #$00
+sta $0
+lda #$02
+sta $1
+
+init_loop:
+ jsr tex
+ clc
+ lda $0
+ adc #$20
+ sta $0
+ lda $1
+ adc #0
+ sta $1
+ cmp #$06
+ bne init_loop
+
+lda #$e0
+sta $0
+lda #$05
+sta $1
+
+loop:
+ ;jmp skip_blit
+
+ clc
+ lda #0
+ blit_loop2:
+ tay
+ lda $0220,y
+ sta $0200,y
+ lda $0221,y
+ sta $0201,y
+ lda $0222,y
+ sta $0202,y
+ lda $0223,y
+ sta $0203,y
+ lda $0224,y
+ sta $0204,y
+ lda $0225,y
+ sta $0205,y
+ lda $0226,y
+ sta $0206,y
+ lda $0227,y
+ sta $0207,y
+
+ tya
+ adc #8
+ bne blit_loop2
+
+ clc
+ lda #0
+ blit_loop3:
+ tay
+ lda $0320,y
+ sta $0300,y
+ lda $0321,y
+ sta $0301,y
+ lda $0322,y
+ sta $0302,y
+ lda $0323,y
+ sta $0303,y
+ lda $0324,y
+ sta $0304,y
+ lda $0325,y
+ sta $0305,y
+ lda $0326,y
+ sta $0306,y
+ lda $0327,y
+ sta $0307,y
+
+ tya
+ adc #8
+ bne blit_loop3
+
+ clc
+ lda #0
+ blit_loop4:
+ tay
+ lda $0420,y
+ sta $0400,y
+ lda $0421,y
+ sta $0401,y
+ lda $0422,y
+ sta $0402,y
+ lda $0423,y
+ sta $0403,y
+ lda $0424,y
+ sta $0404,y
+ lda $0425,y
+ sta $0405,y
+ lda $0426,y
+ sta $0406,y
+ lda $0427,y
+ sta $0407,y
+
+ tya
+ adc #8
+ bne blit_loop4
+
+ lda #0
+ blit_loop5:
+ tay
+ lda $0520,y
+ sta $0500,y
+ lda $0521,y
+ sta $0501,y
+ lda $0522,y
+ sta $0502,y
+ lda $0523,y
+ sta $0503,y
+ lda $0524,y
+ sta $0504,y
+ lda $0525,y
+ sta $0505,y
+ lda $0526,y
+ sta $0506,y
+ lda $0527,y
+ sta $0507,y
+
+ tya
+ clc
+ adc #8
+ cmp #$e0
+ bne blit_loop5
+
+ skip_blit:
+
+ jsr tex
+jmp loop
+
+tex:
+ lda $fe
+ and #$f
+ sbc #$8
+ adc src_row
+ sta src_row
+
+ ldy #0
+ tax
+ lda pal0,x
+ sta ($0),y
+ tex_loop0:
+ lda $fe
+ and #$f
+ sbc #$8
+ ;clc
+ adc src_row,y
+ iny
+ ;clc
+ adc src_row,y
+ ror
+ sta src_row,y
+
+ tax
+ lda pal0,x
+ sta ($0),y
+
+ cpy #31
+ bne tex_loop0
+ rts
+
+pal0:
+ dcb $00, $00, $00, $00, $00, $00, $00, $00
+ dcb $00, $00, $0b, $0b, $0b, $0b, $0b, $0b
+ dcb $0b, $0b, $0b, $0b, $0b, $0b, $0b, $0b
+ dcb $0c, $0c, $0c, $0c, $0c, $0c, $0c, $0c
+ dcb $0c, $0c, $0c, $0c, $0c, $0c, $0c, $0c
+ dcb $0f, $0f, $0f, $0f, $0f, $0f, $0f, $0f
+ dcb $0f, $0f, $0f, $0f, $0f, $0f, $0f, $0f
+ dcb $0f, $01, $01, $01, $01, $01, $01, $01
+ dcb $01, $01, $01, $01, $01, $01, $01, $01
+ dcb $0f, $0f, $0f, $0f, $0f, $0f, $0f, $0f
+ dcb $0f, $0f, $0f, $0f, $0f, $0f, $0f, $0f
+ dcb $0f, $0c, $0c, $0c, $0c, $0c, $0c, $0c
+ dcb $0c, $0c, $0c, $0c, $0c, $0c, $0c, $0c
+ dcb $0c, $0b, $0b, $0b, $0b, $0b, $0b, $0b
+ dcb $0b, $0b, $0b, $0b, $0b, $0b, $0b, $00
+ dcb $00, $00, $00, $00, $00, $00, $00, $00
+ dcb $00, $00, $00, $00, $00, $00, $00, $00
+ dcb $00, $00, $00, $00, $00, $00, $00, $00
+ dcb $0b, $0b, $0b, $0b, $0b, $0b, $0b, $0b
+ dcb $0b, $0b, $0b, $0b, $0b, $0b, $0b, $0b
+ dcb $0b, $0b, $0b, $0b, $0b, $0b, $05, $05
+ dcb $05, $05, $05, $05, $05, $05, $05, $05
+ dcb $05, $05, $05, $05, $05, $05, $05, $05
+ dcb $0d, $0d, $0d, $0d, $0d, $0d, $0d, $0d
+ dcb $0d, $0d, $0d, $0d, $0d, $0d, $0d, $0d
+ dcb $0d, $05, $05, $05, $05, $05, $05, $05
+ dcb $05, $05, $05, $05, $05, $05, $05, $05
+ dcb $05, $05, $05, $0b, $0b, $0b, $0b, $0b
+ dcb $0b, $0b, $0b, $0b, $0b, $0b, $0b, $0b
+ dcb $0b, $0b, $0b, $0b, $0b, $0b, $0b, $0b
+ dcb $0b, $00, $00, $00, $00, $00, $00, $00
+ dcb $00, $00, $00, $00, $00, $00, $00, $00
+
+src_row:
+ ; (32 bytes)
+
+; A full-resolution version of the same thing. Not perhaps the most interesting thing to look at.
+
+;#include "screenhack.h"
+;
+;#include <inttypes.h>
+;
+;struct texture
+;{
+; unsigned width, height;
+; Colormap colormap;
+; GC gc;
+; unsigned long palette[128];
+; XImage *image;
+; uint8_t *row;
+; unsigned graininess;
+; unsigned lines;
+;};
+;
+;#define GRAIN(self) (NRAND((self)->graininess * 2 + 1) - (self)->graininess)
+;
+;static void _put_line(struct texture *self, Display *dpy, Window window, unsigned y)
+;{
+; unsigned x;
+; for(x = 0; x != self->width; ++x)
+; {
+; unsigned c1 = self->row[x];
+; unsigned c0 = c1;
+; if(c0 & 64)
+; c0 ^= 127;
+; XPutPixel(self->image, x, 0, self->palette[(c0 & 63) | ((c1 & 0x80) >> 1)]);
+; }
+;
+; XPutImage(dpy, window, self->gc, self->image, 0, 0, 0, y, self->width, 1);
+;
+; *self->row += GRAIN(self);
+;
+; for(x = 1; x != self->width; ++x);
+; {
+; unsigned avg = self->row[x - 1] + self->row[x];
+; self->row[x] = ((avg + ((avg & 2) >> 1)) >> 1) + GRAIN(self);
+; }
+;
+;
+;}
+;
+;static void texture_reshape(Display *dpy, Window window, void *self_raw, unsigned w, unsigned h)
+;{
+; struct texture *self = self_raw;
+; unsigned x, y;
+;
+; if(w == self->width && h == self->height)
+; return;
+;
+; self->image->bytes_per_line = 0;
+; self->image->width = w;
+; XInitImage(self->image);
+;
+; free(self->row);
+; self->row = malloc(w);
+; free(self->image->data);
+; self->image->data = malloc(w * self->image->bytes_per_line);
+;
+; self->width = w;
+; self->height = h;
+;
+; *self->row = NRAND(0xff);
+; for(x = 1; x != self->width; ++x)
+; self->row[x] = self->row[x - 1] + GRAIN(self);
+;
+; for(y = 0; y != self->height; ++y)
+; _put_line(self, dpy, window, y);
+;}
+;
+;static void *texture_init(Display *dpy, Window window)
+;{
+; static const XGCValues gcv_src = {GXcopy};
+; XGCValues gcv = gcv_src;
+; struct texture *self = malloc(sizeof(*self));
+; XWindowAttributes xwa;
+; unsigned i;
+;
+; XGetWindowAttributes(dpy, window, &xwa);
+; self->width = 0;
+; self->height = 0;
+; self->colormap = xwa.colormap;
+;
+; self->graininess = get_integer_resource(dpy, "graininess", "Graininess");
+; self->lines = get_integer_resource(dpy, "speed", "Speed");
+;
+; for(i = 0; i != 64; ++i)
+; {
+; XColor color;
+; unsigned short a = i * (0x10000 / 64);
+;
+; color.red = a;
+; color.green = a;
+; color.blue = a;
+; if(!XAllocColor(dpy, xwa.colormap, &color))
+; abort();
+; self->palette[i] = color.pixel;
+;
+; color.red = 0;
+; color.green = a;
+; color.blue = 0;
+; if(!XAllocColor(dpy, xwa.colormap, &color))
+; abort();
+; self->palette[i | 64] = color.pixel;
+; }
+;
+; self->gc = XCreateGC(dpy, window, GCFunction, &gcv);
+; self->image = XCreateImage(dpy, xwa.visual, xwa.depth, ZPixmap, 0, NULL, 0, 1, 32, 0);
+; self->row = NULL;
+;
+; texture_reshape(dpy, window, self, xwa.width, xwa.height);
+;
+; return self;
+;}
+;
+;static unsigned long texture_draw(Display *dpy, Window window, void *self_raw)
+;{
+; struct texture *self = self_raw;
+; unsigned y;
+; XCopyArea(dpy, window, window, self->gc, 0, self->lines, self->width, self->height - self->lines, 0, 0);
+; for(y = 0; y != self->lines; ++y)
+; _put_line(self, dpy, window, self->height - self->lines + y);
+; return 16667;
+;}
+;
+;static Bool texture_event (Display *dpy, Window window, void *self_raw, XEvent *event)
+;{
+; return False;
+;}
+;
+;static void texture_free(Display *dpy, Window window, void *self_raw)
+;{
+; struct texture *self = self_raw;
+;
+; XFreeGC(dpy, self->gc);
+; XFreeColors(dpy, self->colormap, self->palette, 128, 0);
+; XDestroyImage(self->image);
+; free(self->row);
+; free(self);
+;}
+;
+;static const char *texture_defaults[] =
+;{
+; "*speed: 2",
+; "*graininess: 1",
+; "*fpsSolid: True",
+; "*fpsTop: True",
+; 0
+;};
+;
+;static XrmOptionDescRec texture_options[] =
+;{
+; {"-speed", ".speed", XrmoptionSepArg, 0},
+; {"-graininess", ".graininess", XrmoptionSepArg, 0},
+; {0, 0, 0, 0}
+;};
+;
+;XSCREENSAVER_MODULE("Texture", texture)
diff --git a/hacks/images/m6502/wave6502.asm b/hacks/images/m6502/wave6502.asm
new file mode 100644
index 0000000..b40ea66
--- /dev/null
+++ b/hacks/images/m6502/wave6502.asm
@@ -0,0 +1,164 @@
+;;; 6502 logo Jeremy English 12-January-2008
+
+start:
+ldx #0
+stx $20
+lda #5
+sta $21
+lda $fe
+sta $22
+
+loop:
+dec $21
+lda $21
+beq randcolor
+jmp pastrandcolor
+
+randcolor:
+lda #5
+sta $21
+ldx #33
+inc $22
+lda $22
+and #7
+tay
+rl:
+lda $1000,x
+beq pastcolor1
+lda color_row,y
+sta $1000,x
+
+pastcolor1:
+lda $1040,x
+beq pastcolor2
+lda color_row,y
+sta $1040,x
+
+pastcolor2:
+lda $1080,x
+beq pastcolor3
+lda color_row,y
+sta $1080,x
+
+pastcolor3:
+lda $10c0,x
+beq pastcolor4
+lda color_row,y
+sta $10c0,x
+
+pastcolor4:
+lda $1100,x
+beq pastcolor5
+lda color_row,y
+sta $1100,x
+
+pastcolor5:
+lda $1140,x
+beq pastcolor6
+lda color_row,y
+sta $1140,x
+
+pastcolor6:
+lda $1180,x
+beq pastcolor7
+lda color_row,y
+sta $1180,x
+
+pastcolor7:
+lda $11C0,x
+beq pastcolor8
+lda color_row,y
+sta $11C0,x
+
+pastcolor8:
+lda $1200,x
+beq pastcolor9
+lda color_row,y
+sta $1200,x
+
+pastcolor9:
+inx
+txa
+and #$3f
+bne rl
+
+pastrandcolor:
+
+inc $20
+lda $20
+and #$3f
+tay
+and #$1f
+tax
+lda sinus,x
+tax
+
+d:
+
+lda #0
+sta $2e0,x
+sta $3e0,x
+lda $1000,y
+sta $300,x
+lda $1080,y
+sta $320,x
+lda $1100,y
+sta $340,x
+lda $1180,y
+sta $360,x
+lda $1200,y
+sta $380,x
+lda $1280,y
+sta $3a0,x
+lda $1300,y
+sta $3c0,x
+lda $1380,y
+sta $3c0,x
+inx
+iny
+txa
+and #$1f
+bne d
+
+jmp loop
+
+; 32 ($20) long
+sinus:
+dcb 0,0,0,0,$20,$20,$20
+dcb $40,$40,$60,$80,$a0,$a0,$c0,$c0,$c0
+dcb $e0,$e0,$e0,$e0,$c0,$c0,$c0
+dcb $a0,$a0,$80,$60,$40,$40,$20,$20,$20
+
+color_row:
+dcb $7,$8,$9,$2,$4,$6,$e,$3
+
+
+*=$1000
+dcb 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dcb 0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,1,1,1,1,1,1
+dcb 0,0,1,1,1,1,1,1,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0
+dcb 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dcb 0,0,1,1,1,1,1,1,0,0,1,1,1,1,1,1,0,0,1,1,1,1,1,1
+dcb 0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dcb 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0
+dcb 0,0,1,1,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1
+dcb 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dcb 0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,0,0,0,0
+dcb 0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0
+dcb 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dcb 0,0,1,1,1,1,1,1,0,0,1,1,1,1,1,1,0,0,1,1,0,0,1,1
+dcb 0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dcb 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1
+dcb 0,0,1,1,1,1,1,1,0,0,1,1,0,0,1,1,0,0,1,1,1,1,1,1
+dcb 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dcb 0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1
+dcb 0,0,1,1,0,0,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0
+dcb 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dcb 0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,1,0,0,1,1,0,0,1,1
+dcb 0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dcb 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1
+dcb 0,0,1,1,1,1,1,1,0,0,1,1,1,1,1,1,0,0,1,1,1,1,1,1
+dcb 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dcb 0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,1,1,1,1,1,1
+dcb 0,0,1,1,1,1,1,1,0,0,1,1,1,1,1,1
+
diff --git a/hacks/images/m6502/zookeeper.asm b/hacks/images/m6502/zookeeper.asm
new file mode 100644
index 0000000..b3e3bd2
--- /dev/null
+++ b/hacks/images/m6502/zookeeper.asm
@@ -0,0 +1,109 @@
+; We all love zookeeper !!!!
+; muhmi Nov 13, 2007 9:45 am
+
+ldx #0
+lda #0
+hupsu:
+sta $200,x
+sta $300,x
+sta $400,x
+sta $500,x
+bne hupsu
+
+
+lda #1
+ldx #0
+fill:
+txa
+tay
+lda seko,x
+tax
+lda kuva,x
+sta $200,x
+lda kuva_0,x
+sta $300,x
+lda kuva_1,x
+sta $400,x
+lda kuva_2,x
+sta $500,x
+tya
+tax
+inx
+bne fill
+
+rts
+
+seko:
+dcb 46,93,219,97,168,170,196,63,204,201,206
+dcb 56,238,25,2,186,209,191,138,226,80,128
+dcb 58,171,81,115,42,44,102,193,69,231,107
+dcb 78,5,218,103,11,13,221,130,149,16,227
+dcb 105,213,232,182,17,255,27,190,205,137,192
+dcb 222,233,94,52,229,96,18,220,202,122,166
+dcb 43,153,131,246,177,4,70,22,7,86,173
+dcb 141,151,164,32,143,40,156,185,121,132,165
+dcb 62,249,252,139,154,251,85,236,12,134,245
+dcb 184,39,195,119,242,244,162,74,1,77,51
+dcb 33,75,35,76,34,10,89,47,189,237,71
+dcb 159,9,38,101,180,116,147,140,183,157,123
+dcb 14,19,126,199,100,45,241,28,125,210,155
+dcb 41,254,31,144,55,247,111,95,57,53,223
+dcb 152,108,203,36,214,37,113,200,66,67,197
+dcb 29,250,20,212,68,87,207,163,145,211,48
+dcb 136,24,98,215,169,83,124,224,181,187,142
+dcb 84,240,54,110,234,59,243,79,50,30,114
+dcb 6,178,0,172,148,146,179,120,60,225,65
+dcb 230,208,15,72,117,248,198,106,129,92,127
+dcb 175,160,49,216,176,133,64,109,112,82,90
+dcb 235,104,158,194,8,161,167,88,91,174,23
+dcb 73,118,150,3,99,61,217,26,239,21,253
+dcb 135,188,228
+
+kuva:
+dcb 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
+dcb 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
+dcb 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0
+dcb 0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1
+dcb 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0
+dcb 0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1
+dcb 0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,11,11
+dcb 11,0,0,0,0,0,0,1,0,0,0,11,11,11,0,0,0,0,0,1,1,1,1,1
+dcb 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dcb 0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0
+dcb 0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1
+kuva_0:
+dcb 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dcb 0,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1
+dcb 1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,0,0,0,0,1,1,1
+dcb 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1
+dcb 1,0,0,0,1,1,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0
+dcb 0,1,15,0,0,0,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1
+dcb 0,0,0,0,0,0,0,0,0,0,15,0,0,0,1,1,1,0,0,0,1,0,0,0
+dcb 0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,15,0,0,0,1,1
+dcb 1,0,0,0,1,0,0,0,0,1,1,1,0,0,0,1,0,0,0,1,1,1,0,0
+dcb 0,0,15,0,0,0,1,1,1,0,0,0,1,0,0,0,0,1,1,1,0,0,0,1
+dcb 0,0,0,1,1,1,0,0,0,0,1,0,0,0,1,1
+kuva_1:
+dcb 1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0
+dcb 0,0,15,0,0,0,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1
+dcb 0,0,0,0,0,0,0,0,0,0,15,0,0,0,1,1,1,0,0,0,1,1,0,0
+dcb 0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,1,1,0,0,0,1,1
+dcb 1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1
+dcb 1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,0
+dcb 1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,1
+dcb 1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,1,1
+dcb 1,0,0,0,1,1,1,1,1,1,1,1,1,15,15,15,1,1,1,1,1,1,1,1
+dcb 1,1,15,0,0,0,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,15,15,15
+dcb 1,1,1,1,1,1,1,1,1,1,15,0,0,0,1,1
+kuva_2:
+dcb 1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
+dcb 1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,15,15,0
+dcb 15,15,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,0,0,0,1,1,1,1
+dcb 1,1,1,1,1,15,15,0,15,15,1,1,1,1,1,1,1,1,1,0,0,0,1,1
+dcb 1,0,0,0,15,1,1,1,1,1,1,1,1,15,15,0,1,1,1,1,1,1,1,1
+dcb 1,1,1,0,0,0,1,1,1,0,0,0,0,15,15,15,15,15,15,1,15,1,1,1
+dcb 1,1,15,1,15,15,15,1,1,15,0,0,0,0,1,1,1,0,0,0,0,15,15,15
+dcb 15,15,15,1,15,1,1,1,1,1,15,1,15,15,15,1,1,15,0,0,0,0,1,1
+dcb 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+dcb 0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0
+dcb 0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1
diff --git a/hacks/images/mac.png b/hacks/images/mac.png
new file mode 100644
index 0000000..24f57b9
--- /dev/null
+++ b/hacks/images/mac.png
Binary files differ
diff --git a/hacks/images/macbomb.png b/hacks/images/macbomb.png
new file mode 100644
index 0000000..fccd05a
--- /dev/null
+++ b/hacks/images/macbomb.png
Binary files differ
diff --git a/hacks/images/matrix1.png b/hacks/images/matrix1.png
new file mode 100644
index 0000000..b102c2c
--- /dev/null
+++ b/hacks/images/matrix1.png
Binary files differ
diff --git a/hacks/images/matrix1b.png b/hacks/images/matrix1b.png
new file mode 100644
index 0000000..43fb477
--- /dev/null
+++ b/hacks/images/matrix1b.png
Binary files differ
diff --git a/hacks/images/matrix2.png b/hacks/images/matrix2.png
new file mode 100644
index 0000000..2b5aa54
--- /dev/null
+++ b/hacks/images/matrix2.png
Binary files differ
diff --git a/hacks/images/matrix2b.png b/hacks/images/matrix2b.png
new file mode 100644
index 0000000..08308d7
--- /dev/null
+++ b/hacks/images/matrix2b.png
Binary files differ
diff --git a/hacks/images/matrix3.png b/hacks/images/matrix3.png
new file mode 100644
index 0000000..3f7c8cb
--- /dev/null
+++ b/hacks/images/matrix3.png
Binary files differ
diff --git a/hacks/images/molecules/adenine.pdb b/hacks/images/molecules/adenine.pdb
new file mode 100644
index 0000000..354056c
--- /dev/null
+++ b/hacks/images/molecules/adenine.pdb
@@ -0,0 +1,37 @@
+HEADER Adenine: Vitamin B4; Purine base nucleotide
+COMPND jb09aden
+AUTHOR Created by Dave Woodcock at Okanagan University College
+AUTHOR email:woodcock@okanagan.bc.ca
+AUTHOR Date revised: Mon Sep 18 15:35:27 2000 GENERATED BY BABEL 1.6
+HETATM 1 C 1 0.000 0.000 0.000 1.00 0.00
+HETATM 2 C 1 1.394 0.000 0.000 1.00 0.00
+HETATM 3 C 1 2.084 1.211 0.000 1.00 0.00
+HETATM 4 N 1 1.337 2.342 -0.002 1.00 0.00
+HETATM 5 C 1 -0.017 2.313 -0.003 1.00 0.00
+HETATM 6 N 1 -0.710 1.149 -0.001 1.00 0.00
+HETATM 7 N 1 -0.391 -1.291 0.006 1.00 0.00
+HETATM 8 C 1 0.731 -2.049 0.010 1.00 0.00
+HETATM 9 N 1 1.843 -1.276 0.007 1.00 0.00
+HETATM 10 N 1 3.485 1.257 0.004 1.00 0.00
+HETATM 11 H 1 -0.567 3.254 -0.004 1.00 0.00
+HETATM 12 H 1 -1.347 -1.630 0.010 1.00 0.00
+HETATM 13 H 1 0.738 -3.139 0.017 1.00 0.00
+HETATM 14 H 1 3.799 2.220 -0.037 1.00 0.00
+HETATM 15 H 1 3.839 0.818 0.847 1.00 0.00
+CONECT 1 2 2 6 7
+CONECT 2 1 1 3 9
+CONECT 3 2 4 4 10
+CONECT 4 3 3 5
+CONECT 5 4 6 6 11
+CONECT 6 1 5 5
+CONECT 7 1 8 12
+CONECT 8 7 9 9 13
+CONECT 9 2 8 8
+CONECT 10 3 14 15
+CONECT 11 5
+CONECT 12 7
+CONECT 13 8
+CONECT 14 10
+CONECT 15 10
+MASTER 0 0 0 0 0 0 0 0 15 0 15 0
+END
diff --git a/hacks/images/molecules/adrenochrome.pdb b/hacks/images/molecules/adrenochrome.pdb
new file mode 100644
index 0000000..c4cbef2
--- /dev/null
+++ b/hacks/images/molecules/adrenochrome.pdb
@@ -0,0 +1,55 @@
+HEADER Adrenochrome: a nerve cell transmission inhibitor, and hallucinogen
+COMPND adrenochrome
+AUTHOR Created by Dave Woodcock at Okanagan University College
+AUTHOR email:woodcock@okanagan.bc.ca
+AUTHOR Date revised: Tue Aug 29 08:56:34 2000 GENERATED BY BABEL 1.6
+HETATM 1 C 1 0.000 0.000 0.000 1.00 0.00
+HETATM 2 C 1 1.400 0.000 0.000 1.00 0.00
+HETATM 3 C 1 2.056 1.235 0.000 1.00 0.00
+HETATM 4 C 1 1.351 2.436 -0.011 1.00 0.00
+HETATM 5 C 1 -0.047 2.437 -0.027 1.00 0.00
+HETATM 6 C 1 -0.714 1.206 -0.013 1.00 0.00
+HETATM 7 O 1 -0.597 -1.046 -0.002 1.00 0.00
+HETATM 8 O 1 -1.918 1.181 -0.023 1.00 0.00
+HETATM 9 N 1 2.243 3.571 -0.065 1.00 0.00
+HETATM 10 C 1 1.825 4.648 0.846 1.00 0.00
+HETATM 11 C 1 3.553 3.011 0.321 1.00 0.00
+HETATM 12 C 1 3.538 1.506 -0.050 1.00 0.00
+HETATM 13 H 1 4.088 0.906 0.675 1.00 0.00
+HETATM 14 O 1 4.023 1.295 -1.381 1.00 0.00
+HETATM 15 H 1 1.962 -0.934 -0.006 1.00 0.00
+HETATM 16 H 1 -0.608 3.370 -0.059 1.00 0.00
+HETATM 17 H 1 1.674 4.250 1.849 1.00 0.00
+HETATM 18 H 1 0.895 5.089 0.489 1.00 0.00
+HETATM 19 H 1 2.596 5.418 0.873 1.00 0.00
+HETATM 20 H 1 3.683 3.101 1.400 1.00 0.00
+HETATM 21 H 1 4.364 3.531 -0.190 1.00 0.00
+HETATM 22 H 1 4.963 1.501 -1.423 1.00 0.00
+CONECT 1 2 6 7
+CONECT 1 7
+CONECT 2 1 3 15
+CONECT 2 3
+CONECT 3 2 4 12
+CONECT 4 3 5 9
+CONECT 4 5
+CONECT 5 4 6 16
+CONECT 6 1 5 8
+CONECT 6 8
+CONECT 7 1
+CONECT 8 6
+CONECT 9 4 10 11
+CONECT 10 9 17 18 19
+CONECT 11 9 12 20 21
+CONECT 12 3 11 13 14
+CONECT 13 12
+CONECT 14 12 22
+CONECT 15 2
+CONECT 16 5
+CONECT 17 10
+CONECT 18 10
+CONECT 19 10
+CONECT 20 11
+CONECT 21 11
+CONECT 22 14
+MASTER 0 0 0 0 0 0 0 0 22 0 22 0
+END
diff --git a/hacks/images/molecules/bucky.pdb b/hacks/images/molecules/bucky.pdb
new file mode 100644
index 0000000..30f5b1f
--- /dev/null
+++ b/hacks/images/molecules/bucky.pdb
@@ -0,0 +1,156 @@
+HEADER Buckminsterfullerine: Bucky Ball
+COMPND bucky
+AUTHOR
+GENERATED BY SYMAPPS 1.0
+ATOM 1 C 0.994 0.523 -3.137
+ATOM 2 C 0.418 -0.689 -3.232
+ATOM 3 C 1.239 -1.587 -2.654
+ATOM 4 C 2.172 0.376 -2.500
+ATOM 5 C 2.323 -0.928 -2.202
+ATOM 6 C 1.297 -2.968 -0.779
+ATOM 7 C 0.727 -2.610 -1.946
+ATOM 8 C -0.608 -2.733 -1.813
+ATOM 9 C -0.863 -3.172 -0.565
+ATOM 10 C 0.315 -3.321 0.074
+ATOM 11 C -1.429 -1.836 -2.393
+ATOM 12 C -0.916 -0.814 -3.106
+ATOM 13 C -1.675 0.277 -2.878
+ATOM 14 C -2.657 -0.070 -2.024
+ATOM 15 C -2.506 -1.376 -1.724
+ATOM 16 C -1.096 1.488 -2.779
+ATOM 17 C 0.239 1.614 -2.915
+ATOM 18 C 0.658 2.557 -2.049
+ATOM 19 C -0.417 3.018 -1.381
+ATOM 20 C -1.503 2.359 -1.834
+ATOM 21 C 1.833 2.405 -1.409
+ATOM 22 C 2.596 1.319 -1.640
+ATOM 23 C 3.167 0.957 -0.474
+ATOM 24 C 2.760 1.823 0.475
+ATOM 25 C 1.935 2.717 -0.104
+ATOM 26 C 3.314 -0.348 -0.175
+ATOM 27 C 2.899 -1.293 -1.041
+ATOM 28 C 2.384 -2.314 -0.328
+ATOM 29 C 2.486 -2.003 0.979
+ATOM 30 C 3.063 -0.788 1.074
+ATOM 31 C -2.321 0.938 2.198
+ATOM 32 C -1.237 1.597 2.651
+ATOM 33 C -0.417 0.699 3.231
+ATOM 34 C -2.170 -0.366 2.497
+ATOM 35 C -0.993 -0.514 3.135
+ATOM 36 C 1.671 -0.268 2.871
+ATOM 37 C 0.916 0.824 3.104
+ATOM 38 C 1.430 1.846 2.390
+ATOM 39 C 2.506 1.386 1.722
+ATOM 40 C 2.653 0.079 2.018
+ATOM 41 C 0.609 2.745 1.813
+ATOM 42 C -0.727 2.622 1.945
+ATOM 43 C -1.298 2.984 0.779
+ATOM 44 C -0.315 3.332 -0.075
+ATOM 45 C 0.863 3.183 0.564
+ATOM 46 C -2.378 2.321 0.325
+ATOM 47 C -2.896 1.302 1.038
+ATOM 48 C -3.315 0.358 0.172
+ATOM 49 C -3.062 0.797 -1.076
+ATOM 50 C -2.485 2.012 -0.982
+ATOM 51 C -3.159 -0.945 0.470
+ATOM 52 C -2.593 -1.310 1.637
+ATOM 53 C -1.837 -2.402 1.409
+ATOM 54 C -1.939 -2.714 0.103
+ATOM 55 C -2.759 -1.815 -0.477
+ATOM 56 C -0.658 -2.546 2.045
+ATOM 57 C -0.238 -1.605 2.914
+ATOM 58 C 1.097 -1.482 2.780
+ATOM 59 C 1.503 -2.349 1.832
+ATOM 60 C 0.418 -3.010 1.379
+CONECT 21 25
+CONECT 26 27
+CONECT 2 3
+CONECT 1 4
+CONECT 7 8
+CONECT 8 9
+CONECT 9 10
+CONECT 27 28
+CONECT 28 29
+CONECT 29 30
+CONECT 26 30
+CONECT 6 10
+CONECT 11 12
+CONECT 3 7
+CONECT 8 11
+CONECT 3 5
+CONECT 1 17
+CONECT 5 27
+CONECT 12 13
+CONECT 13 14
+CONECT 14 15
+CONECT 11 15
+CONECT 16 17
+CONECT 6 28
+CONECT 4 5
+CONECT 18 21
+CONECT 1 2
+CONECT 4 22
+CONECT 17 18
+CONECT 18 19
+CONECT 19 20
+CONECT 16 20
+CONECT 21 22
+CONECT 23 26
+CONECT 6 7
+CONECT 2 12
+CONECT 13 16
+CONECT 22 23
+CONECT 23 24
+CONECT 24 25
+CONECT 36 40
+CONECT 41 42
+CONECT 33 37
+CONECT 38 41
+CONECT 33 35
+CONECT 31 47
+CONECT 35 57
+CONECT 42 43
+CONECT 43 44
+CONECT 44 45
+CONECT 41 45
+CONECT 46 47
+CONECT 36 58
+CONECT 34 35
+CONECT 48 51
+CONECT 31 32
+CONECT 34 52
+CONECT 47 48
+CONECT 48 49
+CONECT 49 50
+CONECT 46 50
+CONECT 51 52
+CONECT 53 56
+CONECT 36 37
+CONECT 32 42
+CONECT 43 46
+CONECT 52 53
+CONECT 53 54
+CONECT 54 55
+CONECT 51 55
+CONECT 56 57
+CONECT 32 33
+CONECT 31 34
+CONECT 37 38
+CONECT 38 39
+CONECT 39 40
+CONECT 57 58
+CONECT 58 59
+CONECT 59 60
+CONECT 56 60
+CONECT 10 60
+CONECT 29 59
+CONECT 30 40
+CONECT 24 39
+CONECT 9 54
+CONECT 15 55
+CONECT 14 49
+CONECT 20 50
+CONECT 19 44
+CONECT 25 45
+MASTER 0 0 0 0 0 0 0 0 60 0 0 0
+END
diff --git a/hacks/images/molecules/caffeine.pdb b/hacks/images/molecules/caffeine.pdb
new file mode 100644
index 0000000..830e75e
--- /dev/null
+++ b/hacks/images/molecules/caffeine.pdb
@@ -0,0 +1,54 @@
+HEADER Caffeine: Trimethylxanthine; a cardiac stimulant and diuretic
+AUTHOR Created by Dave Woodcock at Okanagan University College
+AUTHOR email:woodcock@okanagan.bc.ca
+AUTHOR Date revised: Fri Sep 29 14:53:27 2000 GENERATED BY BABEL 1.6
+HETATM 1 C 1 0.000 0.000 0.000 1.00 0.00
+HETATM 2 C 1 1.392 0.000 0.000 1.00 0.00
+HETATM 3 N 1 2.076 1.164 0.000 1.00 0.00
+HETATM 4 C 1 1.373 2.321 -0.003 1.00 0.00
+HETATM 5 O 1 1.978 3.365 -0.017 1.00 0.00
+HETATM 6 N 1 0.017 2.344 0.003 1.00 0.00
+HETATM 7 C 1 -0.710 1.202 0.002 1.00 0.00
+HETATM 8 O 1 -1.915 1.218 -0.006 1.00 0.00
+HETATM 9 N 1 -0.404 -1.287 -0.019 1.00 0.00
+HETATM 10 N 1 1.830 -1.279 -0.020 1.00 0.00
+HETATM 11 C 1 0.715 -2.048 -0.031 1.00 0.00
+HETATM 12 C 1 -1.795 -1.761 -0.044 1.00 0.00
+HETATM 13 C 1 3.546 1.178 -0.016 1.00 0.00
+HETATM 14 C 1 -0.690 3.634 -0.013 1.00 0.00
+HETATM 15 H 1 0.720 -3.138 -0.055 1.00 0.00
+HETATM 16 H 1 -1.813 -2.850 -0.090 1.00 0.00
+HETATM 17 H 1 -2.307 -1.428 0.860 1.00 0.00
+HETATM 18 H 1 -2.302 -1.352 -0.918 1.00 0.00
+HETATM 19 H 1 3.894 1.455 -1.011 1.00 0.00
+HETATM 20 H 1 3.929 0.190 0.239 1.00 0.00
+HETATM 21 H 1 3.911 1.904 0.710 1.00 0.00
+HETATM 22 H 1 -1.557 3.583 0.645 1.00 0.00
+HETATM 23 H 1 -0.027 4.428 0.329 1.00 0.00
+HETATM 24 H 1 -1.020 3.851 -1.029 1.00 0.00
+CONECT 1 2 2 7 9
+CONECT 2 1 1 3 10
+CONECT 3 2 4 13
+CONECT 4 3 5 5 6
+CONECT 5 4 4
+CONECT 6 4 7 14
+CONECT 7 1 6 8 8
+CONECT 8 7 7
+CONECT 9 1 11 12
+CONECT 10 2 11 11
+CONECT 11 9 10 10 15
+CONECT 12 9 16 17 18
+CONECT 13 3 19 20 21
+CONECT 14 6 22 23 24
+CONECT 15 11
+CONECT 16 12
+CONECT 17 12
+CONECT 18 12
+CONECT 19 13
+CONECT 20 13
+CONECT 21 13
+CONECT 22 14
+CONECT 23 14
+CONECT 24 14
+MASTER 0 0 0 0 0 0 0 0 24 0 24 0
+END
diff --git a/hacks/images/molecules/capsaicin.pdb b/hacks/images/molecules/capsaicin.pdb
new file mode 100644
index 0000000..fb88f09
--- /dev/null
+++ b/hacks/images/molecules/capsaicin.pdb
@@ -0,0 +1,49 @@
+HEADER Capsaicin: 8-methyl-N-vanillyl-6-nonenamide; Pepper; a mucous membrane irritant
+AUTHOR Marvin
+REVDAT 1 05-MAY-09 0
+HETATM 1 C UNK 0 3.607 -1.127 0.361 0.00 0.00 C+0
+HETATM 2 C UNK 0 4.334 0.075 0.158 0.00 0.00 C+0
+HETATM 3 C UNK 0 3.650 1.279 -0.101 0.00 0.00 C+0
+HETATM 4 C UNK 0 2.246 1.299 -0.172 0.00 0.00 C+0
+HETATM 5 C UNK 0 1.494 0.118 0.015 0.00 0.00 C+0
+HETATM 6 C UNK 0 2.190 -1.085 0.285 0.00 0.00 C+0
+HETATM 7 O UNK 0 4.263 -2.208 0.588 0.00 0.00 O+0
+HETATM 8 O UNK 0 5.598 0.109 0.186 0.00 0.00 O+0
+HETATM 9 C UNK 0 3.863 -3.458 0.839 0.00 0.00 C+0
+HETATM 10 C UNK 0 0.011 0.136 -0.126 0.00 0.00 C+0
+HETATM 11 N UNK 0 -0.660 -0.367 0.987 0.00 0.00 N+0
+HETATM 12 C UNK 0 -2.024 -0.105 1.237 0.00 0.00 C+0
+HETATM 13 C UNK 0 -2.604 -0.886 2.327 0.00 0.00 C+0
+HETATM 14 O UNK 0 -2.896 0.656 0.691 0.00 0.00 O+0
+HETATM 15 C UNK 0 -3.159 -0.033 3.504 0.00 0.00 C+0
+HETATM 16 C UNK 0 -3.849 -0.911 4.584 0.00 0.00 C+0
+HETATM 17 C UNK 0 -4.419 -0.081 5.764 0.00 0.00 C+0
+HETATM 18 C UNK 0 -5.132 -0.923 6.711 0.00 0.00 C+0
+HETATM 19 C UNK 0 -4.516 -1.628 7.675 0.00 0.00 C+0
+HETATM 20 C UNK 0 -5.206 -2.525 8.600 0.00 0.00 C+0
+HETATM 21 C UNK 0 -4.662 -3.972 8.454 0.00 0.00 C+0
+HETATM 22 C UNK 0 -5.081 -2.006 10.057 0.00 0.00 C+0
+CONECT 1 2 6 7
+CONECT 2 1 3 8
+CONECT 3 2 4
+CONECT 4 3 5
+CONECT 5 4 6 10
+CONECT 6 5 1
+CONECT 7 1 9
+CONECT 8 2
+CONECT 9 7
+CONECT 10 5 11
+CONECT 11 10 12
+CONECT 12 11 13 14
+CONECT 13 12 15
+CONECT 14 12
+CONECT 15 13 16
+CONECT 16 15 17
+CONECT 17 16 18
+CONECT 18 17 19
+CONECT 19 18 20
+CONECT 20 19 21 22
+CONECT 21 20
+CONECT 22 20
+MASTER 0 0 0 0 0 0 0 0 22 0 44 0
+END
diff --git a/hacks/images/molecules/chlordecone.pdb b/hacks/images/molecules/chlordecone.pdb
new file mode 100644
index 0000000..c49e754
--- /dev/null
+++ b/hacks/images/molecules/chlordecone.pdb
@@ -0,0 +1,49 @@
+HEADER Chlordecone: Kepone, an insecticide and fungicide
+COMPND al1113
+AUTHOR Created by Dave Woodcock at Okanagan University College
+AUTHOR email:woodcock@okanagan.bc.ca
+AUTHOR Date revised: Tue Aug 29 17:54:52 2000 GENERATED BY BABEL 1.6
+HETATM 1 C 1 0.000 0.000 0.000 1.00 0.00
+HETATM 2 O 1 1.206 0.000 0.000 1.00 0.00
+HETATM 3 C 1 -0.741 1.303 0.000 1.00 0.00
+HETATM 4 C 1 -0.875 1.738 -1.482 1.00 0.00
+HETATM 5 C 1 -0.879 0.377 -2.249 1.00 0.00
+HETATM 6 C 1 -0.745 -0.666 -1.117 1.00 0.00
+HETATM 7 C 1 -2.247 0.958 -0.112 1.00 0.00
+HETATM 8 C 1 -2.380 1.999 -1.247 1.00 0.00
+HETATM 9 C 1 -2.237 -0.385 -0.887 1.00 0.00
+HETATM 10 C 1 -2.379 0.045 -2.350 1.00 0.00
+HETATM 11 C 1 -3.162 1.358 -2.394 1.00 0.00
+HETATM 12 Cl 1 0.142 3.061 -2.080 1.00 0.00
+HETATM 13 Cl 1 -0.299 2.574 1.159 1.00 0.00
+HETATM 14 Cl 1 -2.803 3.653 -0.734 1.00 0.00
+HETATM 15 Cl 1 -3.272 1.132 1.330 1.00 0.00
+HETATM 16 Cl 1 -3.275 -1.723 -0.285 1.00 0.00
+HETATM 17 Cl 1 -4.883 1.128 -1.986 1.00 0.00
+HETATM 18 Cl 1 -2.936 2.229 -3.931 1.00 0.00
+HETATM 19 Cl 1 -2.805 -1.246 -3.509 1.00 0.00
+HETATM 20 Cl 1 0.141 0.211 -3.696 1.00 0.00
+HETATM 21 Cl 1 -0.301 -2.317 -1.612 1.00 0.00
+CONECT 1 2 2 3 6
+CONECT 2 1 1
+CONECT 3 1 4 7 13
+CONECT 4 3 5 8 12
+CONECT 5 4 6 10 20
+CONECT 6 1 5 9 21
+CONECT 7 3 8 9 15
+CONECT 8 4 7 11 14
+CONECT 9 6 7 10 16
+CONECT 10 5 9 11 19
+CONECT 11 8 10 17 18
+CONECT 12 4
+CONECT 13 3
+CONECT 14 8
+CONECT 15 7
+CONECT 16 9
+CONECT 17 11
+CONECT 18 11
+CONECT 19 10
+CONECT 20 5
+CONECT 21 6
+MASTER 0 0 0 0 0 0 0 0 21 0 21 0
+END
diff --git a/hacks/images/molecules/cocaine.pdb b/hacks/images/molecules/cocaine.pdb
new file mode 100644
index 0000000..30c826f
--- /dev/null
+++ b/hacks/images/molecules/cocaine.pdb
@@ -0,0 +1,93 @@
+HEADER Cocaine: Carboxylicacid methyl ester, an anesthetic
+COMPND al3078
+AUTHOR Created by Dave Woodcock at Okanagan University College
+AUTHOR email:woodcock@okanagan.bc.ca
+AUTHOR Date revised: Wed Aug 30 12:33:12 2000 GENERATED BY BABEL 1.6
+HETATM 1 C 1 0.000 0.000 0.000 1.00 0.00
+HETATM 2 C 1 1.399 0.000 0.000 1.00 0.00
+HETATM 3 C 1 2.099 1.211 0.000 1.00 0.00
+HETATM 4 C 1 1.400 2.423 -0.002 1.00 0.00
+HETATM 5 C 1 0.001 2.423 -0.007 1.00 0.00
+HETATM 6 C 1 -0.700 1.213 -0.005 1.00 0.00
+HETATM 7 C 1 -2.156 1.218 -0.022 1.00 0.00
+HETATM 8 O 1 -2.759 0.175 -0.044 1.00 0.00
+HETATM 9 O 1 -2.806 2.379 -0.075 1.00 0.00
+HETATM 10 C 1 -4.168 2.239 0.272 1.00 0.00
+HETATM 11 C 1 -4.872 3.590 0.031 1.00 0.00
+HETATM 12 C 1 -4.061 4.678 0.674 1.00 0.00
+HETATM 13 O 1 -4.560 5.346 1.542 1.00 0.00
+HETATM 14 O 1 -2.741 4.690 0.497 1.00 0.00
+HETATM 15 C 1 -2.091 5.352 1.560 1.00 0.00
+HETATM 16 C 1 -6.281 3.587 0.659 1.00 0.00
+HETATM 17 N 1 -6.101 3.424 2.109 1.00 0.00
+HETATM 18 C 1 -7.084 2.348 0.212 1.00 0.00
+HETATM 19 C 1 -6.737 1.277 1.267 1.00 0.00
+HETATM 20 C 1 -5.765 1.998 2.226 1.00 0.00
+HETATM 21 C 1 -4.304 1.831 1.755 1.00 0.00
+HETATM 22 C 1 -7.322 3.768 2.857 1.00 0.00
+HETATM 23 H 1 -0.544 -0.944 -0.002 1.00 0.00
+HETATM 24 H 1 1.944 -0.944 0.000 1.00 0.00
+HETATM 25 H 1 3.189 1.211 0.001 1.00 0.00
+HETATM 26 H 1 1.945 3.367 -0.004 1.00 0.00
+HETATM 27 H 1 -0.544 3.368 -0.019 1.00 0.00
+HETATM 28 H 1 -4.624 1.481 -0.363 1.00 0.00
+HETATM 29 H 1 -4.942 3.777 -1.041 1.00 0.00
+HETATM 30 H 1 -2.425 6.389 1.609 1.00 0.00
+HETATM 31 H 1 -2.320 4.851 2.501 1.00 0.00
+HETATM 32 H 1 -1.014 5.330 1.395 1.00 0.00
+HETATM 33 H 1 -6.802 4.513 0.416 1.00 0.00
+HETATM 34 H 1 -6.806 2.035 -0.795 1.00 0.00
+HETATM 35 H 1 -8.152 2.564 0.250 1.00 0.00
+HETATM 36 H 1 -6.275 0.397 0.819 1.00 0.00
+HETATM 37 H 1 -7.641 0.988 1.803 1.00 0.00
+HETATM 38 H 1 -5.872 1.638 3.249 1.00 0.00
+HETATM 39 H 1 -3.995 0.793 1.881 1.00 0.00
+HETATM 40 H 1 -3.664 2.470 2.364 1.00 0.00
+HETATM 41 H 1 -8.166 3.167 2.523 1.00 0.00
+HETATM 42 H 1 -7.551 4.823 2.706 1.00 0.00
+HETATM 43 H 1 -7.155 3.591 3.920 1.00 0.00
+CONECT 1 2 2 6 23
+CONECT 2 1 1 3 24
+CONECT 3 2 4 4 25
+CONECT 4 3 3 5 26
+CONECT 5 4 6 6 27
+CONECT 6 1 5 5 7
+CONECT 7 6 8 8 9
+CONECT 8 7 7
+CONECT 9 7 10
+CONECT 10 9 11 21 28
+CONECT 11 10 12 16 29
+CONECT 12 11 13 13 14
+CONECT 13 12 12
+CONECT 14 12 15
+CONECT 15 14 30 31 32
+CONECT 16 11 17 18 33
+CONECT 17 16 20 22
+CONECT 18 16 19 34 35
+CONECT 19 18 20 36 37
+CONECT 20 17 19 21 38
+CONECT 21 10 20 39 40
+CONECT 22 17 41 42 43
+CONECT 23 1
+CONECT 24 2
+CONECT 25 3
+CONECT 26 4
+CONECT 27 5
+CONECT 28 10
+CONECT 29 11
+CONECT 30 15
+CONECT 31 15
+CONECT 32 15
+CONECT 33 16
+CONECT 34 18
+CONECT 35 18
+CONECT 36 19
+CONECT 37 19
+CONECT 38 20
+CONECT 39 21
+CONECT 40 21
+CONECT 41 22
+CONECT 42 22
+CONECT 43 22
+MASTER 0 0 0 0 0 0 0 0 43 0 43 0
+END
diff --git a/hacks/images/molecules/codeine.pdb b/hacks/images/molecules/codeine.pdb
new file mode 100644
index 0000000..36a79fa
--- /dev/null
+++ b/hacks/images/molecules/codeine.pdb
@@ -0,0 +1,93 @@
+HEADER Methylmorphine: Codeine, a cough reflex inhibitor
+COMPND al3083
+AUTHOR Created by Dave Woodcock at Okanagan University College
+AUTHOR email:woodcock@okanagan.bc.ca
+AUTHOR Date revised: Wed Aug 30 12:33:12 2000 GENERATED BY BABEL 1.6
+HETATM 1 C 1 0.000 0.000 0.000 1.00 0.00
+HETATM 2 C 1 1.400 0.000 0.000 1.00 0.00
+HETATM 3 C 1 2.107 1.211 0.000 1.00 0.00
+HETATM 4 C 1 1.445 2.445 -0.038 1.00 0.00
+HETATM 5 C 1 0.048 2.457 0.012 1.00 0.00
+HETATM 6 C 1 -0.629 1.242 0.047 1.00 0.00
+HETATM 7 C 1 -2.076 1.497 -0.256 1.00 0.00
+HETATM 8 C 1 -2.718 0.335 -1.023 1.00 0.00
+HETATM 9 C 1 -2.362 -0.955 -0.251 1.00 0.00
+HETATM 10 C 1 -0.830 -1.234 -0.281 1.00 0.00
+HETATM 11 C 1 -1.864 2.827 -1.015 1.00 0.00
+HETATM 12 C 1 -2.785 1.642 1.099 1.00 0.00
+HETATM 13 C 1 -2.549 0.335 1.888 1.00 0.00
+HETATM 14 N 1 -2.944 -0.846 1.100 1.00 0.00
+HETATM 15 C 1 -2.815 -2.080 1.892 1.00 0.00
+HETATM 16 H 1 -3.800 0.464 -1.011 1.00 0.00
+HETATM 17 C 1 -2.286 0.268 -2.470 1.00 0.00
+HETATM 18 C 1 -2.002 1.392 -3.142 1.00 0.00
+HETATM 19 C 1 -1.354 2.572 -2.453 1.00 0.00
+HETATM 20 H 1 -2.774 3.428 -1.022 1.00 0.00
+HETATM 21 O 1 -0.789 3.474 -0.352 1.00 0.00
+HETATM 22 H 1 -1.514 3.472 -3.047 1.00 0.00
+HETATM 23 O 1 0.051 2.305 -2.404 1.00 0.00
+HETATM 24 O 1 2.148 3.606 -0.170 1.00 0.00
+HETATM 25 H 1 1.942 -0.944 -0.064 1.00 0.00
+HETATM 26 H 1 3.196 1.191 -0.044 1.00 0.00
+HETATM 27 H 1 -2.856 -1.789 -0.750 1.00 0.00
+HETATM 28 H 1 -0.570 -1.581 -1.281 1.00 0.00
+HETATM 29 H 1 -0.575 -2.018 0.429 1.00 0.00
+HETATM 30 H 1 -3.852 1.800 0.945 1.00 0.00
+HETATM 31 H 1 -2.368 2.484 1.653 1.00 0.00
+HETATM 32 H 1 -3.143 0.370 2.801 1.00 0.00
+HETATM 33 H 1 -1.498 0.252 2.165 1.00 0.00
+HETATM 34 H 1 -3.495 -2.034 2.743 1.00 0.00
+HETATM 35 H 1 -1.796 -2.189 2.261 1.00 0.00
+HETATM 36 H 1 -3.075 -2.943 1.279 1.00 0.00
+HETATM 37 H 1 -2.526 -0.630 -3.039 1.00 0.00
+HETATM 38 H 1 -1.938 1.338 -4.229 1.00 0.00
+HETATM 39 H 1 0.396 2.184 -3.295 1.00 0.00
+HETATM 40 C 1 2.068 4.090 -1.493 1.00 0.00
+HETATM 41 H 1 2.413 3.325 -2.189 1.00 0.00
+HETATM 42 H 1 1.038 4.360 -1.728 1.00 0.00
+HETATM 43 H 1 2.699 4.974 -1.590 1.00 0.00
+CONECT 1 2 2 6 10
+CONECT 2 1 1 3 25
+CONECT 3 2 4 4 26
+CONECT 4 3 3 5 24
+CONECT 5 4 6 6 21
+CONECT 6 1 5 5 7
+CONECT 7 6 8 11 12
+CONECT 8 7 9 16 17
+CONECT 9 8 10 14 27
+CONECT 10 1 9 28 29
+CONECT 11 7 19 20 21
+CONECT 12 7 13 30 31
+CONECT 13 12 14 32 33
+CONECT 14 9 13 15
+CONECT 15 14 34 35 36
+CONECT 16 8
+CONECT 17 8 18 18 37
+CONECT 18 17 17 19 38
+CONECT 19 11 18 22 23
+CONECT 20 11
+CONECT 21 5 11
+CONECT 22 19
+CONECT 23 19 39
+CONECT 24 4 40
+CONECT 25 2
+CONECT 26 3
+CONECT 27 9
+CONECT 28 10
+CONECT 29 10
+CONECT 30 12
+CONECT 31 12
+CONECT 32 13
+CONECT 33 13
+CONECT 34 15
+CONECT 35 15
+CONECT 36 15
+CONECT 37 17
+CONECT 38 18
+CONECT 39 23
+CONECT 40 24 41 42 43
+CONECT 41 40
+CONECT 42 40
+CONECT 43 40
+MASTER 0 0 0 0 0 0 0 0 43 0 43 0
+END
diff --git a/hacks/images/molecules/cyclohexane.pdb b/hacks/images/molecules/cyclohexane.pdb
new file mode 100644
index 0000000..db7b5f0
--- /dev/null
+++ b/hacks/images/molecules/cyclohexane.pdb
@@ -0,0 +1,151 @@
+HEADER Cyclohexane: 1,2,3,4,5,6-hexaisopropylcyclohexane
+COMPND al3063
+AUTHOR Created by Dave Woodcock at Okanagan University College
+AUTHOR email:woodcock@okanagan.bc.ca
+AUTHOR Date revised: Sun Sep 3 10:20:00 2000 GENERATED BY BABEL 1.6
+HETATM 1 C 1 0.000 0.000 0.000 1.00 0.00
+HETATM 2 C 1 1.565 0.000 0.000 1.00 0.00
+HETATM 3 C 1 2.185 1.436 0.000 1.00 0.00
+HETATM 4 C 1 1.565 2.409 1.058 1.00 0.00
+HETATM 5 C 1 0.011 2.333 1.199 1.00 0.00
+HETATM 6 C 1 -0.636 0.914 1.102 1.00 0.00
+HETATM 7 C 1 2.238 -0.920 1.062 1.00 0.00
+HETATM 8 C 1 3.676 -1.279 0.632 1.00 0.00
+HETATM 9 C 1 1.540 -2.282 1.218 1.00 0.00
+HETATM 10 C 1 2.217 2.309 2.471 1.00 0.00
+HETATM 11 C 1 1.987 3.605 3.278 1.00 0.00
+HETATM 12 C 1 3.745 2.126 2.455 1.00 0.00
+HETATM 13 C 1 -0.726 0.166 2.473 1.00 0.00
+HETATM 14 C 1 -1.806 -0.942 2.413 1.00 0.00
+HETATM 15 C 1 -1.162 1.048 3.662 1.00 0.00
+HETATM 16 C 1 -0.814 3.472 0.513 1.00 0.00
+HETATM 17 C 1 -0.477 3.821 -0.947 1.00 0.00
+HETATM 18 C 1 -0.663 4.782 1.320 1.00 0.00
+HETATM 19 C 1 -0.573 0.185 -1.439 1.00 0.00
+HETATM 20 C 1 -2.077 0.514 -1.474 1.00 0.00
+HETATM 21 C 1 -0.420 -1.124 -2.240 1.00 0.00
+HETATM 22 C 1 2.365 2.070 -1.423 1.00 0.00
+HETATM 23 C 1 3.380 3.248 -1.378 1.00 0.00
+HETATM 24 C 1 2.947 1.067 -2.454 1.00 0.00
+HETATM 25 H 1 -0.308 -1.011 0.219 1.00 0.00
+HETATM 26 H 1 1.866 -0.481 -0.919 1.00 0.00
+HETATM 27 H 1 3.219 1.312 0.276 1.00 0.00
+HETATM 28 H 1 1.800 3.418 0.741 1.00 0.00
+HETATM 29 H 1 -0.171 2.602 2.221 1.00 0.00
+HETATM 30 H 1 -1.683 1.071 0.864 1.00 0.00
+HETATM 31 H 1 2.274 -0.432 2.031 1.00 0.00
+HETATM 32 H 1 4.296 -0.395 0.523 1.00 0.00
+HETATM 33 H 1 3.659 -1.819 -0.314 1.00 0.00
+HETATM 34 H 1 4.129 -1.913 1.395 1.00 0.00
+HETATM 35 H 1 1.366 -2.731 0.241 1.00 0.00
+HETATM 36 H 1 0.598 -2.162 1.743 1.00 0.00
+HETATM 37 H 1 2.167 -2.946 1.814 1.00 0.00
+HETATM 38 H 1 1.784 1.476 3.021 1.00 0.00
+HETATM 39 H 1 0.931 3.795 3.446 1.00 0.00
+HETATM 40 H 1 2.426 4.454 2.754 1.00 0.00
+HETATM 41 H 1 2.462 3.505 4.254 1.00 0.00
+HETATM 42 H 1 4.206 2.819 1.750 1.00 0.00
+HETATM 43 H 1 3.992 1.100 2.194 1.00 0.00
+HETATM 44 H 1 4.144 2.311 3.452 1.00 0.00
+HETATM 45 H 1 0.232 -0.273 2.732 1.00 0.00
+HETATM 46 H 1 -1.609 -1.663 1.627 1.00 0.00
+HETATM 47 H 1 -2.784 -0.492 2.238 1.00 0.00
+HETATM 48 H 1 -1.828 -1.479 3.361 1.00 0.00
+HETATM 49 H 1 -1.986 1.697 3.365 1.00 0.00
+HETATM 50 H 1 -0.323 1.642 4.019 1.00 0.00
+HETATM 51 H 1 -1.487 0.415 4.488 1.00 0.00
+HETATM 52 H 1 -1.870 3.206 0.555 1.00 0.00
+HETATM 53 H 1 -0.618 2.957 -1.586 1.00 0.00
+HETATM 54 H 1 0.544 4.192 -1.014 1.00 0.00
+HETATM 55 H 1 -1.151 4.606 -1.289 1.00 0.00
+HETATM 56 H 1 0.380 5.094 1.338 1.00 0.00
+HETATM 57 H 1 -1.015 4.632 2.341 1.00 0.00
+HETATM 58 H 1 -1.262 5.567 0.860 1.00 0.00
+HETATM 59 H 1 -0.035 0.957 -1.972 1.00 0.00
+HETATM 60 H 1 -2.246 1.523 -1.106 1.00 0.00
+HETATM 61 H 1 -2.630 -0.201 -0.864 1.00 0.00
+HETATM 62 H 1 -2.439 0.465 -2.501 1.00 0.00
+HETATM 63 H 1 -0.991 -1.924 -1.768 1.00 0.00
+HETATM 64 H 1 0.625 -1.418 -2.300 1.00 0.00
+HETATM 65 H 1 -0.791 -0.971 -3.254 1.00 0.00
+HETATM 66 H 1 1.430 2.438 -1.818 1.00 0.00
+HETATM 67 H 1 4.327 2.902 -0.962 1.00 0.00
+HETATM 68 H 1 3.011 4.079 -0.782 1.00 0.00
+HETATM 69 H 1 3.557 3.619 -2.388 1.00 0.00
+HETATM 70 H 1 2.183 0.367 -2.790 1.00 0.00
+HETATM 71 H 1 3.780 0.521 -2.010 1.00 0.00
+HETATM 72 H 1 3.306 1.606 -3.330 1.00 0.00
+CONECT 1 2 6 19 25
+CONECT 2 1 3 7 26
+CONECT 3 2 4 22 27
+CONECT 4 3 5 10 28
+CONECT 5 4 6 16 29
+CONECT 6 1 5 13 30
+CONECT 7 2 8 9 31
+CONECT 8 7 32 33 34
+CONECT 9 7 35 36 37
+CONECT 10 4 11 12 38
+CONECT 11 10 39 40 41
+CONECT 12 10 42 43 44
+CONECT 13 6 14 15 45
+CONECT 14 13 46 47 48
+CONECT 15 13 49 50 51
+CONECT 16 5 17 18 52
+CONECT 17 16 53 54 55
+CONECT 18 16 56 57 58
+CONECT 19 1 20 21 59
+CONECT 20 19 60 61 62
+CONECT 21 19 63 64 65
+CONECT 22 3 23 24 66
+CONECT 23 22 67 68 69
+CONECT 24 22 70 71 72
+CONECT 25 1
+CONECT 26 2
+CONECT 27 3
+CONECT 28 4
+CONECT 29 5
+CONECT 30 6
+CONECT 31 7
+CONECT 32 8
+CONECT 33 8
+CONECT 34 8
+CONECT 35 9
+CONECT 36 9
+CONECT 37 9
+CONECT 38 10
+CONECT 39 11
+CONECT 40 11
+CONECT 41 11
+CONECT 42 12
+CONECT 43 12
+CONECT 44 12
+CONECT 45 13
+CONECT 46 14
+CONECT 47 14
+CONECT 48 14
+CONECT 49 15
+CONECT 50 15
+CONECT 51 15
+CONECT 52 16
+CONECT 53 17
+CONECT 54 17
+CONECT 55 17
+CONECT 56 18
+CONECT 57 18
+CONECT 58 18
+CONECT 59 19
+CONECT 60 20
+CONECT 61 20
+CONECT 62 20
+CONECT 63 21
+CONECT 64 21
+CONECT 65 21
+CONECT 66 22
+CONECT 67 23
+CONECT 68 23
+CONECT 69 23
+CONECT 70 24
+CONECT 71 24
+CONECT 72 24
+MASTER 0 0 0 0 0 0 0 0 72 0 72 0
+END
diff --git a/hacks/images/molecules/cytosine.pdb b/hacks/images/molecules/cytosine.pdb
new file mode 100644
index 0000000..e703179
--- /dev/null
+++ b/hacks/images/molecules/cytosine.pdb
@@ -0,0 +1,33 @@
+HEADER Cytosine: Pyrimidine base nucleotide
+COMPND jb09cyto
+AUTHOR Created by Dave Woodcock at Okanagan University College
+AUTHOR email:woodcock@okanagan.bc.ca
+AUTHOR Date revised: Fri Sep 29 12:35:29 2000 GENERATED BY BABEL 1.6
+HETATM 1 C 1 0.000 0.000 0.000 1.00 0.00
+HETATM 2 C 1 1.398 0.000 0.000 1.00 0.00
+HETATM 3 C 1 2.070 1.227 0.000 1.00 0.00
+HETATM 4 N 1 1.356 2.375 0.001 1.00 0.00
+HETATM 5 C 1 0.004 2.350 0.002 1.00 0.00
+HETATM 6 N 1 -0.667 1.176 0.001 1.00 0.00
+HETATM 7 O 1 -0.611 3.389 0.004 1.00 0.00
+HETATM 8 N 1 3.477 1.271 0.003 1.00 0.00
+HETATM 9 H 1 -0.548 -0.942 0.000 1.00 0.00
+HETATM 10 H 1 1.954 -0.938 0.001 1.00 0.00
+HETATM 11 H 1 -1.681 1.178 0.002 1.00 0.00
+HETATM 12 H 1 3.791 2.109 0.480 1.00 0.00
+HETATM 13 H 1 3.844 0.453 0.477 1.00 0.00
+CONECT 1 2 2 6 9
+CONECT 2 1 1 3 10
+CONECT 3 2 4 4 8
+CONECT 4 3 3 5
+CONECT 5 4 6 7 7
+CONECT 6 1 5 11
+CONECT 7 5 5
+CONECT 8 3 12 13
+CONECT 9 1
+CONECT 10 2
+CONECT 11 6
+CONECT 12 8
+CONECT 13 8
+MASTER 0 0 0 0 0 0 0 0 13 0 13 0
+END
diff --git a/hacks/images/molecules/dna.pdb b/hacks/images/molecules/dna.pdb
new file mode 100644
index 0000000..a060671
--- /dev/null
+++ b/hacks/images/molecules/dna.pdb
@@ -0,0 +1,972 @@
+HEADER DNA: Deoxyribonucleic acid
+ATOM 1 O ??? 1 4.674 19.391 -10.106
+ATOM 2 C ??? 1 4.459 17.981 -9.876
+ATOM 3 C ??? 1 5.288 17.571 -8.673
+ATOM 4 O ??? 1 4.895 17.956 -7.317
+ATOM 5 C ??? 1 5.700 16.166 -8.515
+ATOM 6 O ??? 1 6.993 16.174 -7.868
+ATOM 7 C ??? 1 4.606 15.591 -7.605
+ATOM 8 C ??? 1 4.489 16.741 -6.607
+ATOM 9 N ??? 1 3.143 16.925 -5.903
+ATOM 10 C ??? 1 3.127 17.319 -4.578
+ATOM 11 O ??? 1 4.173 17.497 -3.993
+ATOM 12 N ??? 1 1.955 17.554 -3.958
+ATOM 13 C ??? 1 0.773 17.466 -4.621
+ATOM 14 N ??? 1 -0.393 17.691 -3.955
+ATOM 15 C ??? 1 0.722 17.134 -5.985
+ATOM 16 C ??? 1 1.945 16.843 -6.625
+ATOM 17 P ??? 1 7.833 14.873 -7.879
+ATOM 18 O ??? 1 6.913 13.703 -8.299
+ATOM 19 O ??? 1 9.116 15.075 -8.639
+ATOM 20 O ??? 1 8.137 14.505 -6.390
+ATOM 21 C ??? 1 9.093 15.196 -5.586
+ATOM 22 C ??? 1 8.913 14.574 -4.231
+ATOM 23 O ??? 1 7.518 14.735 -3.865
+ATOM 24 C ??? 1 9.081 13.086 -4.262
+ATOM 25 O ??? 1 10.078 12.703 -3.397
+ATOM 26 C ??? 1 7.686 12.473 -4.029
+ATOM 27 C ??? 1 7.063 13.543 -3.201
+ATOM 28 N ??? 1 5.563 13.566 -3.134
+ATOM 29 C ??? 1 4.657 13.394 -4.141
+ATOM 30 N ??? 1 3.380 13.664 -3.752
+ATOM 31 C ??? 1 3.485 14.024 -2.465
+ATOM 32 C ??? 1 2.474 14.525 -1.574
+ATOM 33 O ??? 1 1.309 14.806 -1.867
+ATOM 34 N ??? 1 2.958 14.808 -0.289
+ATOM 35 C ??? 1 4.279 14.700 0.121
+ATOM 36 N ??? 1 4.596 14.961 1.424
+ATOM 37 N ??? 1 5.242 14.292 -0.749
+ATOM 38 C ??? 1 4.801 13.971 -2.035
+ATOM 39 P ??? 1 10.462 11.185 -3.172
+ATOM 40 O ??? 1 9.914 10.272 -4.247
+ATOM 41 O ??? 1 11.949 11.216 -2.975
+ATOM 42 O ??? 1 9.792 10.862 -1.765
+ATOM 43 C ??? 1 10.265 11.478 -0.528
+ATOM 44 C ??? 1 9.204 11.248 0.526
+ATOM 45 O ??? 1 7.918 11.627 0.016
+ATOM 46 C ??? 1 9.052 9.838 1.036
+ATOM 47 O ??? 1 9.614 9.642 2.306
+ATOM 48 C ??? 1 7.597 9.524 0.982
+ATOM 49 C ??? 1 6.965 10.887 0.744
+ATOM 50 N ??? 1 5.832 10.810 -0.183
+ATOM 51 C ??? 1 4.534 11.009 0.257
+ATOM 52 O ??? 1 4.306 11.269 1.440
+ATOM 53 N ??? 1 3.534 10.905 -0.642
+ATOM 54 C ??? 1 3.770 10.552 -1.926
+ATOM 55 N ??? 1 2.773 10.591 -2.855
+ATOM 56 C ??? 1 5.043 10.250 -2.374
+ATOM 57 C ??? 1 6.091 10.396 -1.479
+ATOM 58 P ??? 1 9.660 8.226 2.989
+ATOM 59 O ??? 1 9.518 7.127 1.928
+ATOM 60 O ??? 1 10.794 8.089 3.999
+ATOM 61 O ??? 1 8.355 8.291 3.834
+ATOM 62 C ??? 1 8.139 9.269 4.865
+ATOM 63 C ??? 1 6.937 8.745 5.644
+ATOM 64 O ??? 1 5.814 8.819 4.753
+ATOM 65 C ??? 1 6.948 7.295 6.225
+ATOM 66 O ??? 1 6.417 7.199 7.512
+ATOM 67 C ??? 1 6.148 6.464 5.250
+ATOM 68 C ??? 1 5.222 7.503 4.599
+ATOM 69 N ??? 1 4.918 7.267 3.140
+ATOM 70 C ??? 1 5.599 6.623 2.107
+ATOM 71 N ??? 1 4.919 6.594 0.951
+ATOM 72 C ??? 1 3.772 7.259 1.254
+ATOM 73 C ??? 1 2.598 7.558 0.439
+ATOM 74 O ??? 1 2.404 7.232 -0.737
+ATOM 75 N ??? 1 1.575 8.214 1.141
+ATOM 76 C ??? 1 1.613 8.566 2.471
+ATOM 77 N ??? 1 0.502 9.125 3.046
+ATOM 78 N ??? 1 2.702 8.309 3.210
+ATOM 79 C ??? 1 3.753 7.669 2.570
+ATOM 80 P ??? 1 6.301 5.803 8.277
+ATOM 81 O ??? 1 6.480 4.589 7.476
+ATOM 82 O ??? 1 7.156 5.937 9.499
+ATOM 83 O ??? 1 4.740 5.694 8.620
+ATOM 84 C ??? 1 3.911 6.858 8.929
+ATOM 85 C ??? 1 2.515 6.690 8.311
+ATOM 86 O ??? 1 2.653 6.561 6.911
+ATOM 87 C ??? 1 1.684 5.487 8.712
+ATOM 88 O ??? 1 0.539 5.815 9.516
+ATOM 89 C ??? 1 1.353 4.792 7.399
+ATOM 90 C ??? 1 1.556 5.869 6.393
+ATOM 91 N ??? 1 1.967 5.365 5.052
+ATOM 92 C ??? 1 3.193 4.822 4.658
+ATOM 93 N ??? 1 3.258 4.448 3.362
+ATOM 94 C ??? 1 2.043 4.779 2.883
+ATOM 95 C ??? 1 1.417 4.673 1.562
+ATOM 96 N ??? 1 2.034 4.100 0.514
+ATOM 97 N ??? 1 0.156 5.177 1.374
+ATOM 98 C ??? 1 -0.498 5.699 2.441
+ATOM 99 N ??? 1 -0.077 5.807 3.720
+ATOM 100 C ??? 1 1.230 5.336 3.901
+ATOM 101 P ??? 1 -0.488 4.701 10.028
+ATOM 102 O ??? 1 0.013 3.297 10.287
+ATOM 103 O ??? 1 -1.183 5.233 11.229
+ATOM 104 O ??? 1 -1.483 4.559 8.784
+ATOM 105 C ??? 1 -2.385 5.609 8.332
+ATOM 106 C ??? 1 -3.291 4.910 7.309
+ATOM 107 O ??? 1 -2.610 4.636 6.060
+ATOM 108 C ??? 1 -3.923 3.568 7.700
+ATOM 109 O ??? 1 -5.162 3.352 7.126
+ATOM 110 C ??? 1 -2.961 2.582 7.123
+ATOM 111 C ??? 1 -2.754 3.200 5.763
+ATOM 112 N ??? 1 -1.583 2.605 5.066
+ATOM 113 C ??? 1 -0.368 2.242 5.588
+ATOM 114 N ??? 1 0.486 1.776 4.665
+ATOM 115 C ??? 1 -0.189 1.878 3.525
+ATOM 116 C ??? 1 0.183 1.571 2.180
+ATOM 117 N ??? 1 1.377 0.958 1.920
+ATOM 118 N ??? 1 -0.730 1.786 1.174
+ATOM 119 C ??? 1 -1.964 2.218 1.475
+ATOM 120 N ??? 1 -2.439 2.500 2.716
+ATOM 121 C ??? 1 -1.479 2.331 3.718
+ATOM 122 P ??? 1 -5.924 1.982 7.353
+ATOM 123 O ??? 1 -5.172 0.938 8.012
+ATOM 124 O ??? 1 -7.186 2.593 7.897
+ATOM 125 O ??? 1 -6.252 1.347 5.938
+ATOM 126 C ??? 1 -6.944 2.135 4.921
+ATOM 127 C ??? 1 -6.715 1.372 3.651
+ATOM 128 O ??? 1 -5.286 1.133 3.458
+ATOM 129 C ??? 1 -7.407 0.057 3.644
+ATOM 130 O ??? 1 -8.489 0.026 2.771
+ATOM 131 C ??? 1 -6.310 -0.990 3.438
+ATOM 132 C ??? 1 -5.156 -0.150 2.865
+ATOM 133 N ??? 1 -3.757 -0.647 3.037
+ATOM 134 C ??? 1 -2.979 -0.923 1.905
+ATOM 135 O ??? 1 -3.374 -0.727 0.747
+ATOM 136 N ??? 1 -1.687 -1.340 2.116
+ATOM 137 C ??? 1 -1.144 -1.494 3.381
+ATOM 138 O ??? 1 0.074 -1.754 3.445
+ATOM 139 C ??? 1 -1.948 -1.227 4.501
+ATOM 140 C ??? 1 -1.422 -1.319 5.892
+ATOM 141 C ??? 1 -3.248 -0.795 4.314
+ATOM 142 P ??? 1 -9.378 -1.306 2.603
+ATOM 143 O ??? 1 -9.127 -2.221 3.726
+ATOM 145 O ??? 1 -8.753 -2.007 1.349
+ATOM 146 C ??? 1 -8.460 -1.252 0.127
+ATOM 147 C ??? 1 -7.623 -2.192 -0.688
+ATOM 148 O ??? 1 -6.477 -2.562 0.073
+ATOM 149 C ??? 1 -8.255 -3.511 -1.016
+ATOM 150 O ??? 1 -8.724 -3.527 -2.285
+ATOM 151 C ??? 1 -7.224 -4.587 -0.757
+ATOM 152 C ??? 1 -6.004 -3.753 -0.494
+ATOM 153 N ??? 1 -4.890 -4.263 0.346
+ATOM 154 C ??? 1 -3.627 -4.303 -0.238
+ATOM 155 O ??? 1 -3.413 -4.052 -1.439
+ATOM 156 N ??? 1 -2.559 -4.547 0.575
+ATOM 157 C ??? 1 -2.672 -4.694 1.927
+ATOM 158 O ??? 1 -1.603 -4.845 2.510
+ATOM 159 C ??? 1 -3.962 -4.607 2.537
+ATOM 160 C ??? 1 -4.169 -4.666 4.067
+ATOM 161 C ??? 1 -5.072 -4.416 1.690
+ATOM 162 P ??? 1 -9.083 -4.896 -2.982
+ATOM 163 O ??? 1 -9.692 -5.915 -2.114
+ATOM 164 O ??? 1 -9.784 -4.333 -4.195
+ATOM 165 O ??? 1 -7.769 -5.544 -3.501
+ATOM 166 C ??? 1 -6.988 -4.787 -4.548
+ATOM 167 C ??? 1 -5.787 -5.605 -4.680
+ATOM 168 O ??? 1 -5.186 -5.816 -3.381
+ATOM 169 C ??? 1 -6.160 -6.983 -5.172
+ATOM 170 O ??? 1 -5.775 -7.049 -6.554
+ATOM 171 C ??? 1 -5.475 -7.989 -4.170
+ATOM 172 C ??? 1 -4.470 -7.095 -3.471
+ATOM 173 N ??? 1 -4.143 -7.481 -2.064
+ATOM 174 C ??? 1 -2.880 -7.900 -1.674
+ATOM 175 O ??? 1 -1.981 -8.028 -2.497
+ATOM 176 N ??? 1 -2.644 -8.106 -0.357
+ATOM 177 C ??? 1 -3.593 -7.906 0.580
+ATOM 178 N ??? 1 -3.294 -8.029 1.897
+ATOM 179 C ??? 1 -4.887 -7.515 0.234
+ATOM 180 C ??? 1 -5.144 -7.290 -1.118
+ATOM 181 P ??? 1 -6.271 -8.185 -7.504
+ATOM 182 O ??? 1 -7.612 -8.682 -7.077
+ATOM 183 O ??? 1 -6.109 -7.701 -8.887
+ATOM 184 O ??? 1 -5.255 -9.348 -7.127
+ATOM 185 C ??? 1 -3.864 -9.233 -7.443
+ATOM 186 C ??? 1 -3.265 -10.503 -6.982
+ATOM 187 O ??? 1 -3.388 -10.408 -5.569
+ATOM 188 C ??? 1 -3.913 -11.848 -7.400
+ATOM 189 O ??? 1 -2.906 -12.861 -7.541
+ATOM 190 C ??? 1 -4.865 -12.134 -6.218
+ATOM 191 C ??? 1 -3.937 -11.700 -5.115
+ATOM 192 N ??? 1 -4.370 -11.653 -3.684
+ATOM 193 C ??? 1 -5.572 -11.359 -3.092
+ATOM 194 N ??? 1 -5.502 -11.208 -1.750
+ATOM 195 C ??? 1 -4.184 -11.405 -1.464
+ATOM 196 C ??? 1 -3.484 -11.398 -0.187
+ATOM 197 O ??? 1 -3.973 -11.294 0.939
+ATOM 198 N ??? 1 -2.117 -11.651 -0.293
+ATOM 199 C ??? 1 -1.432 -11.934 -1.458
+ATOM 200 N ??? 1 -0.114 -12.247 -1.341
+ATOM 201 N ??? 1 -2.059 -11.968 -2.664
+ATOM 202 C ??? 1 -3.452 -11.687 -2.620
+ATOM 203 P ??? 1 -2.430 -13.413 -8.952
+ATOM 204 O ??? 1 -3.259 -14.642 -9.185
+ATOM 205 O ??? 1 -2.433 -12.356 -10.046
+ATOM 206 O ??? 1 -0.882 -13.756 -8.697
+ATOM 207 C ??? 1 0.079 -12.685 -8.383
+ATOM 208 C ??? 1 1.266 -13.194 -7.564
+ATOM 209 O ??? 1 0.999 -13.349 -6.166
+ATOM 210 C ??? 1 1.851 -14.504 -7.958
+ATOM 211 O ??? 1 3.274 -14.536 -7.758
+ATOM 212 C ??? 1 1.034 -15.479 -7.076
+ATOM 213 C ??? 1 1.061 -14.732 -5.783
+ATOM 214 N ??? 1 0.018 -15.063 -4.744
+ATOM 215 C ??? 1 0.371 -15.193 -3.394
+ATOM 216 O ??? 1 1.555 -15.059 -3.043
+ATOM 217 N ??? 1 -0.605 -15.422 -2.469
+ATOM 218 C ??? 1 -1.903 -15.490 -2.823
+ATOM 219 N ??? 1 -2.850 -15.626 -1.852
+ATOM 220 C ??? 1 -2.311 -15.339 -4.167
+ATOM 221 C ??? 1 -1.315 -15.115 -5.135
+ATOM 222 P ??? 1 4.029 -15.922 -7.818
+ATOM 223 O ??? 1 3.416 -16.861 -8.809
+ATOM 224 O ??? 1 5.487 -15.559 -8.011
+ATOM 225 O ??? 1 3.714 -16.639 -6.402
+ATOM 226 C ??? 1 4.699 -16.656 -5.290
+ATOM 227 C ??? 1 4.464 -17.877 -4.385
+ATOM 228 O ??? 1 3.153 -17.818 -3.885
+ATOM 229 C ??? 1 4.685 -19.342 -4.849
+ATOM 230 O ??? 1 5.420 -20.114 -3.884
+ATOM 231 C ??? 1 3.295 -19.890 -5.050
+ATOM 232 C ??? 1 2.531 -19.057 -4.020
+ATOM 233 N ??? 1 1.056 -18.734 -4.183
+ATOM 234 C ??? 1 0.273 -18.422 -5.264
+ATOM 235 N ??? 1 -1.031 -18.317 -4.953
+ATOM 236 C ??? 1 -1.093 -18.575 -3.620
+ATOM 237 C ??? 1 -2.226 -18.671 -2.719
+ATOM 238 O ??? 1 -3.418 -18.578 -2.959
+ATOM 239 N ??? 1 -1.866 -18.877 -1.414
+ATOM 240 C ??? 1 -0.581 -18.991 -0.915
+ATOM 241 N ??? 1 -0.396 -19.286 0.409
+ATOM 242 N ??? 1 0.472 -18.926 -1.725
+ATOM 243 C ??? 1 0.163 -18.734 -3.100
+ATOM 244 O ??? 1 -6.680 -19.825 7.699
+ATOM 245 C ??? 1 -6.306 -20.194 6.315
+ATOM 246 C ??? 1 -5.053 -19.445 5.920
+ATOM 247 O ??? 1 -4.418 -19.699 4.659
+ATOM 248 C ??? 1 -4.994 -17.972 6.135
+ATOM 249 O ??? 1 -3.710 -17.604 6.687
+ATOM 250 C ??? 1 -5.163 -17.510 4.681
+ATOM 251 C ??? 1 -4.498 -18.548 3.817
+ATOM 252 N ??? 1 -5.087 -18.713 2.382
+ATOM 253 C ??? 1 -4.235 -18.653 1.283
+ATOM 254 O ??? 1 -3.023 -18.634 1.498
+ATOM 255 N ??? 1 -4.753 -18.618 0.009
+ATOM 256 C ??? 1 -6.087 -18.707 -0.208
+ATOM 257 N ??? 1 -6.569 -18.815 -1.491
+ATOM 258 C ??? 1 -6.991 -18.809 0.869
+ATOM 259 C ??? 1 -6.468 -18.783 2.177
+ATOM 260 P ??? 1 -3.519 -16.827 8.069
+ATOM 261 O ??? 1 -4.231 -15.537 8.035
+ATOM 262 O ??? 1 -3.821 -17.708 9.240
+ATOM 263 O ??? 1 -1.956 -16.549 8.073
+ATOM 264 C ??? 1 -0.947 -17.650 8.003
+ATOM 265 C ??? 1 0.325 -17.111 7.352
+ATOM 266 O ??? 1 0.066 -17.132 5.962
+ATOM 267 C ??? 1 0.613 -15.669 7.661
+ATOM 268 O ??? 1 1.856 -15.388 8.203
+ATOM 269 C ??? 1 0.265 -14.853 6.465
+ATOM 270 C ??? 1 0.285 -15.854 5.380
+ATOM 271 N ??? 1 -0.824 -15.536 4.452
+ATOM 272 C ??? 1 -2.113 -15.141 4.752
+ATOM 273 N ??? 1 -2.810 -14.728 3.684
+ATOM 274 C ??? 1 -1.957 -14.896 2.652
+ATOM 275 C ??? 1 -2.142 -14.574 1.260
+ATOM 276 O ??? 1 -3.179 -14.132 0.774
+ATOM 277 N ??? 1 -1.001 -14.804 0.451
+ATOM 278 C ??? 1 0.192 -15.336 0.902
+ATOM 279 N ??? 1 1.184 -15.515 0.002
+ATOM 280 N ??? 1 0.382 -15.672 2.205
+ATOM 281 C ??? 1 -0.729 -15.444 3.059
+ATOM 282 P ??? 1 2.293 -13.866 8.376
+ATOM 283 O ??? 1 1.086 -13.042 8.626
+ATOM 284 O ??? 1 3.396 -13.816 9.377
+ATOM 285 O ??? 1 2.922 -13.420 7.025
+ATOM 286 C ??? 1 4.007 -14.108 6.407
+ATOM 287 C ??? 1 4.054 -13.498 5.013
+ATOM 288 O ??? 1 2.780 -13.607 4.393
+ATOM 289 C ??? 1 4.326 -12.019 4.962
+ATOM 290 O ??? 1 5.715 -11.793 5.178
+ATOM 291 C ??? 1 3.795 -11.615 3.565
+ATOM 292 C ??? 1 2.647 -12.603 3.423
+ATOM 293 N ??? 1 1.244 -12.133 3.536
+ATOM 294 C ??? 1 0.427 -12.102 2.410
+ATOM 295 O ??? 1 0.835 -12.492 1.323
+ATOM 296 N ??? 1 -0.850 -11.713 2.533
+ATOM 297 C ??? 1 -1.391 -11.421 3.723
+ATOM 298 N ??? 1 -2.628 -10.831 3.762
+ATOM 299 C ??? 1 -0.649 -11.574 4.913
+ATOM 300 C ??? 1 0.708 -11.938 4.796
+ATOM 301 P ??? 1 6.336 -10.366 5.128
+ATOM 302 O ??? 1 5.449 -9.428 5.909
+ATOM 303 O ??? 1 7.745 -10.482 5.620
+ATOM 304 O ??? 1 6.290 -10.020 3.569
+ATOM 305 C ??? 1 7.055 -10.811 2.615
+ATOM 306 C ??? 1 6.734 -10.308 1.217
+ATOM 307 O ??? 1 5.297 -10.192 1.100
+ATOM 308 C ??? 1 7.286 -8.975 0.718
+ATOM 309 O ??? 1 7.393 -8.945 -0.714
+ATOM 310 C ??? 1 6.225 -7.973 1.221
+ATOM 311 C ??? 1 4.974 -8.794 0.845
+ATOM 312 N ??? 1 3.773 -8.455 1.602
+ATOM 313 C ??? 1 3.640 -7.981 2.890
+ATOM 314 N ??? 1 2.384 -7.801 3.240
+ATOM 315 C ??? 1 1.667 -8.192 2.129
+ATOM 316 C ??? 1 0.216 -8.383 1.898
+ATOM 317 O ??? 1 -0.692 -8.327 2.724
+ATOM 318 N ??? 1 -0.115 -8.589 0.569
+ATOM 319 C ??? 1 0.807 -8.696 -0.461
+ATOM 320 N ??? 1 0.345 -8.866 -1.749
+ATOM 321 N ??? 1 2.149 -8.691 -0.209
+ATOM 322 C ??? 1 2.524 -8.455 1.086
+ATOM 323 P ??? 1 7.575 -7.564 -1.471
+ATOM 324 O ??? 1 7.955 -6.449 -0.479
+ATOM 325 O ??? 1 8.741 -7.728 -2.458
+ATOM 326 O ??? 1 6.254 -7.373 -2.307
+ATOM 327 C ??? 1 6.024 -8.272 -3.442
+ATOM 328 C ??? 1 5.019 -7.727 -4.455
+ATOM 329 O ??? 1 3.633 -7.467 -4.002
+ATOM 330 C ??? 1 5.448 -6.462 -5.147
+ATOM 331 O ??? 1 5.043 -6.461 -6.529
+ATOM 332 C ??? 1 4.765 -5.380 -4.322
+ATOM 333 C ??? 1 3.522 -6.055 -3.759
+ATOM 334 N ??? 1 3.349 -5.765 -2.284
+ATOM 335 C ??? 1 4.280 -5.485 -1.291
+ATOM 336 N ??? 1 3.718 -5.218 -0.101
+ATOM 337 C ??? 1 2.389 -5.311 -0.337
+ATOM 338 C ??? 1 1.210 -5.068 0.470
+ATOM 339 N ??? 1 1.297 -4.554 1.713
+ATOM 340 N ??? 1 -0.018 -5.382 -0.038
+ATOM 341 C ??? 1 -0.107 -5.816 -1.309
+ATOM 342 N ??? 1 0.900 -5.988 -2.198
+ATOM 343 C ??? 1 2.136 -5.713 -1.640
+ATOM 344 P ??? 1 4.958 -5.104 -7.365
+ATOM 345 O ??? 1 5.978 -4.099 -6.859
+ATOM 346 O ??? 1 5.021 -5.615 -8.756
+ATOM 347 O ??? 1 3.560 -4.533 -7.033
+ATOM 348 C ??? 1 2.362 -5.321 -7.154
+ATOM 349 C ??? 1 1.273 -4.376 -6.720
+ATOM 350 O ??? 1 1.389 -4.141 -5.316
+ATOM 351 C ??? 1 1.322 -2.993 -7.366
+ATOM 352 O ??? 1 0.329 -2.831 -8.391
+ATOM 353 C ??? 1 1.333 -1.991 -6.194
+ATOM 354 C ??? 1 0.897 -2.852 -5.006
+ATOM 355 N ??? 1 1.537 -2.528 -3.709
+ATOM 356 C ??? 1 2.863 -2.388 -3.374
+ATOM 357 N ??? 1 3.059 -2.100 -2.081
+ATOM 358 C ??? 1 1.825 -2.100 -1.562
+ATOM 359 C ??? 1 1.312 -1.785 -0.242
+ATOM 360 N ??? 1 2.105 -1.419 0.792
+ATOM 361 N ??? 1 -0.035 -1.681 -0.088
+ATOM 362 C ??? 1 -0.863 -1.975 -1.112
+ATOM 363 N ??? 1 -0.516 -2.341 -2.360
+ATOM 364 C ??? 1 0.871 -2.352 -2.537
+ATOM 365 P ??? 1 0.096 -1.455 -9.141
+ATOM 366 O ??? 1 1.403 -0.827 -9.454
+ATOM 367 O ??? 1 -0.784 -1.681 -10.328
+ATOM 368 O ??? 1 -0.708 -0.618 -8.042
+ATOM 369 C ??? 1 -2.026 -1.063 -7.621
+ATOM 370 C ??? 1 -2.460 -0.283 -6.398
+ATOM 371 O ??? 1 -1.482 -0.424 -5.323
+ATOM 372 C ??? 1 -2.702 1.209 -6.627
+ATOM 373 O ??? 1 -4.034 1.463 -6.980
+ATOM 374 C ??? 1 -2.262 1.804 -5.316
+ATOM 375 C ??? 1 -1.039 0.909 -5.075
+ATOM 376 N ??? 1 -0.210 0.993 -3.836
+ATOM 377 C ??? 1 -0.736 1.017 -2.546
+ATOM 378 O ??? 1 -1.957 0.851 -2.314
+ATOM 379 N ??? 1 0.164 1.108 -1.498
+ATOM 380 C ??? 1 1.538 1.199 -1.677
+ATOM 381 O ??? 1 2.250 1.226 -0.672
+ATOM 382 C ??? 1 2.054 1.179 -2.992
+ATOM 383 C ??? 1 3.521 1.367 -3.242
+ATOM 384 C ??? 1 1.153 1.065 -4.071
+ATOM 385 P ??? 1 -4.609 2.928 -7.269
+ATOM 386 O ??? 1 -3.623 3.841 -7.848
+ATOM 387 O ??? 1 -5.862 2.588 -8.032
+ATOM 388 O ??? 1 -4.884 3.503 -5.838
+ATOM 389 C ??? 1 -5.822 2.805 -4.954
+ATOM 390 C ??? 1 -5.829 3.570 -3.680
+ATOM 391 O ??? 1 -4.506 3.511 -3.227
+ATOM 392 C ??? 1 -6.172 5.046 -3.735
+ATOM 393 O ??? 1 -7.441 5.291 -3.123
+ATOM 394 C ??? 1 -5.006 5.747 -3.052
+ATOM 395 C ??? 1 -4.274 4.597 -2.370
+ATOM 396 N ??? 1 -2.767 4.703 -2.324
+ATOM 397 C ??? 1 -2.085 4.842 -1.117
+ATOM 398 O ??? 1 -2.678 5.024 -0.043
+ATOM 399 N ??? 1 -0.697 4.808 -1.172
+ATOM 400 C ??? 1 0.014 4.669 -2.366
+ATOM 401 O ??? 1 1.237 4.636 -2.312
+ATOM 402 C ??? 1 -0.682 4.595 -3.576
+ATOM 403 C ??? 1 0.027 4.511 -4.924
+ATOM 404 C ??? 1 -2.079 4.607 -3.526
+ATOM 405 P ??? 1 -8.018 6.766 -2.948
+ATOM 406 O ??? 1 -7.635 7.566 -4.152
+ATOM 407 O ??? 1 -9.476 6.706 -2.680
+ATOM 408 O ??? 1 -7.320 7.281 -1.652
+ATOM 409 C ??? 1 -7.634 6.745 -0.332
+ATOM 410 C ??? 1 -6.740 7.536 0.578
+ATOM 411 O ??? 1 -5.356 7.300 0.129
+ATOM 412 C ??? 1 -6.992 9.072 0.483
+ATOM 413 O ??? 1 -7.500 9.642 1.681
+ATOM 414 C ??? 1 -5.648 9.640 0.010
+ATOM 415 C ??? 1 -4.683 8.515 0.475
+ATOM 416 N ??? 1 -3.379 8.489 -0.149
+ATOM 417 C ??? 1 -2.166 8.504 0.541
+ATOM 418 O ??? 1 -2.158 8.517 1.779
+ATOM 419 N ??? 1 -1.010 8.423 -0.184
+ATOM 420 C ??? 1 -1.042 8.316 -1.562
+ATOM 421 N ??? 1 0.083 8.179 -2.370
+ATOM 422 C ??? 1 -2.249 8.284 -2.244
+ATOM 423 C ??? 1 -3.426 8.372 -1.520
+ATOM 424 P ??? 1 -8.072 11.149 1.769
+ATOM 425 O ??? 1 -8.359 11.946 0.569
+ATOM 426 O ??? 1 -9.253 11.131 2.697
+ATOM 427 O ??? 1 -6.842 11.901 2.427
+ATOM 428 C ??? 1 -6.195 11.442 3.679
+ATOM 429 C ??? 1 -4.912 12.282 3.817
+ATOM 430 O ??? 1 -3.876 11.994 2.873
+ATOM 431 C ??? 1 -5.090 13.728 3.629
+ATOM 432 O ??? 1 -4.492 14.502 4.643
+ATOM 433 C ??? 1 -4.542 14.026 2.249
+ATOM 434 C ??? 1 -3.391 13.126 2.230
+ATOM 435 N ??? 1 -2.856 12.707 0.897
+ATOM 436 C ??? 1 -3.473 12.442 -0.319
+ATOM 437 N ??? 1 -2.637 12.015 -1.293
+ATOM 438 C ??? 1 -1.436 12.007 -0.688
+ATOM 439 C ??? 1 -0.127 11.608 -1.179
+ATOM 440 O ??? 1 0.172 11.212 -2.291
+ATOM 441 N ??? 1 0.874 11.683 -0.204
+ATOM 442 C ??? 1 0.686 12.119 1.100
+ATOM 443 N ??? 1 1.749 12.103 1.939
+ATOM 444 N ??? 1 -0.519 12.555 1.528
+ATOM 445 C ??? 1 -1.544 12.446 0.633
+ATOM 446 P ??? 1 -5.127 15.894 4.858
+ATOM 447 O ??? 1 -5.425 16.629 3.561
+ATOM 448 O ??? 1 -6.250 15.527 5.754
+ATOM 449 O ??? 1 -4.002 16.793 5.584
+ATOM 450 C ??? 1 -3.238 16.255 6.678
+ATOM 451 C ??? 1 -1.830 16.039 6.216
+ATOM 452 O ??? 1 -1.871 15.509 4.883
+ATOM 453 C ??? 1 -0.873 17.253 6.173
+ATOM 454 O ??? 1 -0.153 17.520 7.416
+ATOM 455 C ??? 1 0.090 16.942 5.027
+ATOM 456 C ??? 1 -0.595 15.819 4.260
+ATOM 457 N ??? 1 -0.730 16.057 2.785
+ATOM 458 C ??? 1 0.227 15.578 1.903
+ATOM 459 O ??? 1 1.293 15.046 2.291
+ATOM 460 N ??? 1 -0.055 15.614 0.600
+ATOM 461 C ??? 1 -1.197 16.106 0.107
+ATOM 462 N ??? 1 -1.457 15.971 -1.213
+ATOM 463 C ??? 1 -2.157 16.670 0.937
+ATOM 464 C ??? 1 -1.890 16.634 2.320
+ATOM 465 P ??? 1 0.085 19.035 7.891
+ATOM 466 O ??? 1 -1.103 19.918 7.465
+ATOM 467 O ??? 1 0.455 19.118 9.333
+ATOM 468 O ??? 1 1.304 19.503 6.967
+ATOM 469 C ??? 1 2.588 19.092 7.215
+ATOM 470 C ??? 1 3.346 19.369 5.986
+ATOM 471 O ??? 1 2.968 18.509 4.924
+ATOM 472 C ??? 1 3.325 20.751 5.383
+ATOM 473 O ??? 1 3.907 21.749 6.266
+ATOM 474 C ??? 1 4.203 20.393 4.162
+ATOM 475 C ??? 1 3.516 19.074 3.711
+ATOM 476 N ??? 1 2.407 19.227 2.697
+ATOM 477 C ??? 1 1.165 19.783 2.799
+ATOM 478 N ??? 1 0.472 19.784 1.639
+ATOM 479 C ??? 1 1.290 19.206 0.763
+ATOM 480 C ??? 1 1.097 18.852 -0.624
+ATOM 481 O ??? 1 0.123 18.893 -1.321
+ATOM 482 N ??? 1 2.227 18.334 -1.206
+ATOM 483 C ??? 1 3.438 18.092 -0.570
+ATOM 484 N ??? 1 4.500 17.628 -1.280
+ATOM 485 N ??? 1 3.571 18.322 0.734
+ATOM 486 C ??? 1 2.483 18.897 1.373
+CONECT 1 2
+CONECT 2 1 3
+CONECT 3 2 4 5
+CONECT 4 3 8
+CONECT 5 3 6 7
+CONECT 6 5 17
+CONECT 7 5 8
+CONECT 8 4 7 9
+CONECT 9 8 10 16
+CONECT 10 9 11 12
+CONECT 11 10
+CONECT 12 10 13
+CONECT 13 12 14 15
+CONECT 14 13
+CONECT 15 13 16
+CONECT 16 9 15
+CONECT 17 6 18 19 20
+CONECT 18 17
+CONECT 19 17
+CONECT 20 17 21
+CONECT 21 20 22
+CONECT 22 21 23 24
+CONECT 23 22 27
+CONECT 24 22 25 26
+CONECT 25 24 39
+CONECT 26 24 27
+CONECT 27 23 26 28
+CONECT 28 27 29 38
+CONECT 29 28 30
+CONECT 30 29 31
+CONECT 31 30 32 38
+CONECT 32 31 33 34
+CONECT 33 32
+CONECT 34 32 35
+CONECT 35 34 36 37
+CONECT 36 35
+CONECT 37 35 38
+CONECT 38 28 31 37
+CONECT 39 25 40 41 42
+CONECT 40 39
+CONECT 41 39
+CONECT 42 39 43
+CONECT 43 42 44
+CONECT 44 43 45 46
+CONECT 45 44 49
+CONECT 46 44 47 48
+CONECT 47 46 58
+CONECT 48 46 49
+CONECT 49 45 48 50
+CONECT 50 49 51 57
+CONECT 51 50 52 53
+CONECT 52 51
+CONECT 53 51 54
+CONECT 54 53 55 56
+CONECT 55 54
+CONECT 56 54 57
+CONECT 57 50 56
+CONECT 58 47 59 60 61
+CONECT 59 58
+CONECT 60 58
+CONECT 61 58 62
+CONECT 62 61 63
+CONECT 63 62 64 65
+CONECT 64 63 68
+CONECT 65 63 66 67
+CONECT 66 65 80
+CONECT 67 65 68
+CONECT 68 64 67 69
+CONECT 69 68 70 79
+CONECT 70 69 71
+CONECT 71 70 72
+CONECT 72 71 73 79
+CONECT 73 72 74 75
+CONECT 74 73
+CONECT 75 73 76
+CONECT 76 75 77 78
+CONECT 77 76
+CONECT 78 76 79
+CONECT 79 69 72 78
+CONECT 80 66 81 82 83
+CONECT 81 80
+CONECT 82 80
+CONECT 83 80 84
+CONECT 84 83 85
+CONECT 85 84 86 87
+CONECT 86 85 90
+CONECT 87 85 88 89
+CONECT 88 87 101
+CONECT 89 87 90
+CONECT 90 86 89 91
+CONECT 91 90 92 100
+CONECT 92 91 93
+CONECT 93 92 94
+CONECT 94 93 95 100
+CONECT 95 94 96 97
+CONECT 96 95
+CONECT 97 95 98
+CONECT 98 97 99
+CONECT 99 98 100
+CONECT 100 91 94 99
+CONECT 101 88 102 103 104
+CONECT 102 101
+CONECT 103 101
+CONECT 104 101 105
+CONECT 105 104 106
+CONECT 106 105 107 108
+CONECT 107 106 111
+CONECT 108 106 109 110
+CONECT 109 108 122
+CONECT 110 108 111
+CONECT 111 107 110 112
+CONECT 112 111 113 121
+CONECT 113 112 114
+CONECT 114 113 115
+CONECT 115 114 116 121
+CONECT 116 115 117 118
+CONECT 117 116
+CONECT 118 116 119
+CONECT 119 118 120
+CONECT 120 119 121
+CONECT 121 112 115 120
+CONECT 122 109 123 124 125
+CONECT 123 122
+CONECT 124 122
+CONECT 125 122 126
+CONECT 126 125 127
+CONECT 127 126 128 129
+CONECT 128 127 132
+CONECT 129 127 130 131
+CONECT 130 129 142
+CONECT 131 129 132
+CONECT 132 128 131 133
+CONECT 133 132 134 141
+CONECT 134 133 135 136
+CONECT 135 134
+CONECT 136 134 137
+CONECT 137 136 138 139
+CONECT 138 137
+CONECT 139 137 140 141
+CONECT 140 139
+CONECT 141 133 139
+CONECT 142 130 143 145
+CONECT 143 142
+CONECT 145 142 146
+CONECT 146 145 147
+CONECT 147 146 148 149
+CONECT 148 147 152
+CONECT 149 147 150 151
+CONECT 150 149 162
+CONECT 151 149 152
+CONECT 152 148 151 153
+CONECT 153 152 154 161
+CONECT 154 153 155 156
+CONECT 155 154
+CONECT 156 154 157
+CONECT 157 156 158 159
+CONECT 158 157
+CONECT 159 157 160 161
+CONECT 160 159
+CONECT 161 153 159
+CONECT 162 150 163 164 165
+CONECT 163 162
+CONECT 164 162
+CONECT 165 162 166
+CONECT 166 165 167
+CONECT 167 166 168 169
+CONECT 168 167 172
+CONECT 169 167 170 171
+CONECT 170 169 181
+CONECT 171 169 172
+CONECT 172 168 171 173
+CONECT 173 172 174 180
+CONECT 174 173 175 176
+CONECT 175 174
+CONECT 176 174 177
+CONECT 177 176 178 179
+CONECT 178 177
+CONECT 179 177 180
+CONECT 180 173 179
+CONECT 181 170 182 183 184
+CONECT 182 181
+CONECT 183 181
+CONECT 184 181 185
+CONECT 185 184 186
+CONECT 186 185 187 188
+CONECT 187 186 191
+CONECT 188 186 189 190
+CONECT 189 188 203
+CONECT 190 188 191
+CONECT 191 187 190 192
+CONECT 192 191 193 202
+CONECT 193 192 194
+CONECT 194 193 195
+CONECT 195 194 196 202
+CONECT 196 195 197 198
+CONECT 197 196
+CONECT 198 196 199
+CONECT 199 198 200 201
+CONECT 200 199
+CONECT 201 199 202
+CONECT 202 192 195 201
+CONECT 203 189 204 205 206
+CONECT 204 203
+CONECT 205 203
+CONECT 206 203 207
+CONECT 207 206 208
+CONECT 208 207 209 210
+CONECT 209 208 213
+CONECT 210 208 211 212
+CONECT 211 210 222
+CONECT 212 210 213
+CONECT 213 209 212 214
+CONECT 214 213 215 221
+CONECT 215 214 216 217
+CONECT 216 215
+CONECT 217 215 218
+CONECT 218 217 219 220
+CONECT 219 218
+CONECT 220 218 221
+CONECT 221 214 220
+CONECT 222 211 223 224 225
+CONECT 223 222
+CONECT 224 222
+CONECT 225 222 226
+CONECT 226 225 227
+CONECT 227 226 228 229
+CONECT 228 227 232
+CONECT 229 227 230 231
+CONECT 230 229
+CONECT 231 229 232
+CONECT 232 228 231 233
+CONECT 233 232 234 243
+CONECT 234 233 235
+CONECT 235 234 236
+CONECT 236 235 237 243
+CONECT 237 236 238 239
+CONECT 238 237
+CONECT 239 237 240
+CONECT 240 239 241 242
+CONECT 241 240
+CONECT 242 240 243
+CONECT 243 233 236 242
+CONECT 244 245
+CONECT 245 244 246
+CONECT 246 245 247 248
+CONECT 247 246 251
+CONECT 248 246 249 250
+CONECT 249 248 260
+CONECT 250 248 251
+CONECT 251 247 250 252
+CONECT 252 251 253 259
+CONECT 253 252 254 255
+CONECT 254 253
+CONECT 255 253 256
+CONECT 256 255 257 258
+CONECT 257 256
+CONECT 258 256 259
+CONECT 259 252 258
+CONECT 260 249 261 262 263
+CONECT 261 260
+CONECT 262 260
+CONECT 263 260 264
+CONECT 264 263 265
+CONECT 265 264 266 267
+CONECT 266 265 270
+CONECT 267 265 268 269
+CONECT 268 267 282
+CONECT 269 267 270
+CONECT 270 266 269 271
+CONECT 271 270 272 281
+CONECT 272 271 273
+CONECT 273 272 274
+CONECT 274 273 275 281
+CONECT 275 274 276 277
+CONECT 276 275
+CONECT 277 275 278
+CONECT 278 277 279 280
+CONECT 279 278
+CONECT 280 278 281
+CONECT 281 271 274 280
+CONECT 282 268 283 284 285
+CONECT 283 282
+CONECT 284 282
+CONECT 285 282 286
+CONECT 286 285 287
+CONECT 287 286 288 289
+CONECT 288 287 292
+CONECT 289 287 290 291
+CONECT 290 289 301
+CONECT 291 289 292
+CONECT 292 288 291 293
+CONECT 293 292 294 300
+CONECT 294 293 295 296
+CONECT 295 294
+CONECT 296 294 297
+CONECT 297 296 298 299
+CONECT 298 297
+CONECT 299 297 300
+CONECT 300 293 299
+CONECT 301 290 302 303 304
+CONECT 302 301
+CONECT 303 301
+CONECT 304 301 305
+CONECT 305 304 306
+CONECT 306 305 307 308
+CONECT 307 306 311
+CONECT 308 306 309 310
+CONECT 309 308 323
+CONECT 310 308 311
+CONECT 311 307 310 312
+CONECT 312 311 313 322
+CONECT 313 312 314
+CONECT 314 313 315
+CONECT 315 314 316 322
+CONECT 316 315 317 318
+CONECT 317 316
+CONECT 318 316 319
+CONECT 319 318 320 321
+CONECT 320 319
+CONECT 321 319 322
+CONECT 322 312 315 321
+CONECT 323 309 324 325 326
+CONECT 324 323
+CONECT 325 323
+CONECT 326 323 327
+CONECT 327 326 328
+CONECT 328 327 329 330
+CONECT 329 328 333
+CONECT 330 328 331 332
+CONECT 331 330 344
+CONECT 332 330 333
+CONECT 333 329 332 334
+CONECT 334 333 335 343
+CONECT 335 334 336
+CONECT 336 335 337
+CONECT 337 336 338 343
+CONECT 338 337 339 340
+CONECT 339 338
+CONECT 340 338 341
+CONECT 341 340 342
+CONECT 342 341 343
+CONECT 343 334 337 342
+CONECT 344 331 345 346 347
+CONECT 345 344
+CONECT 346 344
+CONECT 347 344 348
+CONECT 348 347 349
+CONECT 349 348 350 351
+CONECT 350 349 354
+CONECT 351 349 352 353
+CONECT 352 351 365
+CONECT 353 351 354
+CONECT 354 350 353 355
+CONECT 355 354 356 364
+CONECT 356 355 357
+CONECT 357 356 358
+CONECT 358 357 359 364
+CONECT 359 358 360 361
+CONECT 360 359
+CONECT 361 359 362
+CONECT 362 361 363
+CONECT 363 362 364
+CONECT 364 355 358 363
+CONECT 365 352 366 367 368
+CONECT 366 365
+CONECT 367 365
+CONECT 368 365 369
+CONECT 369 368 370
+CONECT 370 369 371 372
+CONECT 371 370 375
+CONECT 372 370 373 374
+CONECT 373 372 385
+CONECT 374 372 375
+CONECT 375 371 374 376
+CONECT 376 375 377 384
+CONECT 377 376 378 379
+CONECT 378 377
+CONECT 379 377 380
+CONECT 380 379 381 382
+CONECT 381 380
+CONECT 382 380 383 384
+CONECT 383 382
+CONECT 384 376 382
+CONECT 385 373 386 387 388
+CONECT 386 385
+CONECT 387 385
+CONECT 388 385 389
+CONECT 389 388 390
+CONECT 390 389 391 392
+CONECT 391 390 395
+CONECT 392 390 393 394
+CONECT 393 392 405
+CONECT 394 392 395
+CONECT 395 391 394 396
+CONECT 396 395 397 404
+CONECT 397 396 398 399
+CONECT 398 397
+CONECT 399 397 400
+CONECT 400 399 401 402
+CONECT 401 400
+CONECT 402 400 403 404
+CONECT 403 402
+CONECT 404 396 402
+CONECT 405 393 406 407 408
+CONECT 406 405
+CONECT 407 405
+CONECT 408 405 409
+CONECT 409 408 410
+CONECT 410 409 411 412
+CONECT 411 410 415
+CONECT 412 410 413 414
+CONECT 413 412 424
+CONECT 414 412 415
+CONECT 415 411 414 416
+CONECT 416 415 417 423
+CONECT 417 416 418 419
+CONECT 418 417
+CONECT 419 417 420
+CONECT 420 419 421 422
+CONECT 421 420
+CONECT 422 420 423
+CONECT 423 416 422
+CONECT 424 413 425 426 427
+CONECT 425 424
+CONECT 426 424
+CONECT 427 424 428
+CONECT 428 427 429
+CONECT 429 428 430 431
+CONECT 430 429 434
+CONECT 431 429 432 433
+CONECT 432 431 446
+CONECT 433 431 434
+CONECT 434 430 433 435
+CONECT 435 434 436 445
+CONECT 436 435 437
+CONECT 437 436 438
+CONECT 438 437 439 445
+CONECT 439 438 440 441
+CONECT 440 439
+CONECT 441 439 442
+CONECT 442 441 443 444
+CONECT 443 442
+CONECT 444 442 445
+CONECT 445 435 438 444
+CONECT 446 432 447 448 449
+CONECT 447 446
+CONECT 448 446
+CONECT 449 446 450
+CONECT 450 449 451
+CONECT 451 450 452 453
+CONECT 452 451 456
+CONECT 453 451 454 455
+CONECT 454 453 465
+CONECT 455 453 456
+CONECT 456 452 455 457
+CONECT 457 456 458 464
+CONECT 458 457 459 460
+CONECT 459 458
+CONECT 460 458 461
+CONECT 461 460 462 463
+CONECT 462 461
+CONECT 463 461 464
+CONECT 464 457 463
+CONECT 465 454 466 467 468
+CONECT 466 465
+CONECT 467 465
+CONECT 468 465 469
+CONECT 469 468 470
+CONECT 470 469 471 472
+CONECT 471 470 475
+CONECT 472 470 473 474
+CONECT 473 472
+CONECT 474 472 475
+CONECT 475 471 474 476
+CONECT 476 475 477 486
+CONECT 477 476 478
+CONECT 478 477 479
+CONECT 479 478 480 486
+CONECT 480 479 481 482
+CONECT 481 480
+CONECT 482 480 483
+CONECT 483 482 484 485
+CONECT 484 483
+CONECT 485 483 486
+CONECT 486 476 479 485
+END
diff --git a/hacks/images/molecules/dodecahedrane.pdb b/hacks/images/molecules/dodecahedrane.pdb
new file mode 100644
index 0000000..94b2d2f
--- /dev/null
+++ b/hacks/images/molecules/dodecahedrane.pdb
@@ -0,0 +1,87 @@
+HEADER Dodecahedrane
+COMPND al3056
+AUTHOR Created by Dave Woodcock at Okanagan University College
+AUTHOR email:woodcock@okanagan.bc.ca
+AUTHOR Date revised: Sun Sep 3 10:20:00 2000 GENERATED BY BABEL 1.6
+HETATM 1 C 1 0.000 0.000 0.000 1.00 0.00
+HETATM 2 C 1 1.540 0.000 0.000 1.00 0.00
+HETATM 3 C 1 2.016 1.465 0.000 1.00 0.00
+HETATM 4 C 1 0.771 2.369 0.000 1.00 0.00
+HETATM 5 C 1 -0.476 1.465 0.000 1.00 0.00
+HETATM 6 C 1 -0.476 -0.655 1.309 1.00 0.00
+HETATM 7 C 1 -1.246 0.404 2.118 1.00 0.00
+HETATM 8 C 1 -1.246 1.714 1.309 1.00 0.00
+HETATM 9 C 1 -0.476 2.774 2.119 1.00 0.00
+HETATM 10 C 1 0.770 3.179 1.310 1.00 0.00
+HETATM 11 C 1 2.016 2.774 2.120 1.00 0.00
+HETATM 12 C 1 2.786 1.715 1.310 1.00 0.00
+HETATM 13 C 1 2.785 0.405 2.120 1.00 0.00
+HETATM 14 C 1 2.016 -0.655 1.310 1.00 0.00
+HETATM 15 C 1 0.769 -1.059 2.118 1.00 0.00
+HETATM 16 C 1 0.770 -0.250 3.428 1.00 0.00
+HETATM 17 C 1 -0.476 0.655 3.428 1.00 0.00
+HETATM 18 C 1 2.015 0.656 3.429 1.00 0.00
+HETATM 19 C 1 0.000 2.119 3.428 1.00 0.00
+HETATM 20 C 1 1.539 2.119 3.428 1.00 0.00
+HETATM 21 H 1 -0.389 -0.536 -0.866 1.00 0.00
+HETATM 22 H 1 1.929 -0.535 -0.866 1.00 0.00
+HETATM 23 H 1 2.645 1.669 -0.866 1.00 0.00
+HETATM 24 H 1 0.771 3.031 -0.867 1.00 0.00
+HETATM 25 H 1 -1.105 1.670 -0.867 1.00 0.00
+HETATM 26 H 1 -1.105 -1.521 1.105 1.00 0.00
+HETATM 27 H 1 -2.264 0.073 2.321 1.00 0.00
+HETATM 28 H 1 -2.264 2.044 1.104 1.00 0.00
+HETATM 29 H 1 -1.105 3.639 2.324 1.00 0.00
+HETATM 30 H 1 0.771 4.249 1.105 1.00 0.00
+HETATM 31 H 1 2.645 3.640 2.327 1.00 0.00
+HETATM 32 H 1 3.804 2.046 1.106 1.00 0.00
+HETATM 33 H 1 3.803 0.073 2.325 1.00 0.00
+HETATM 34 H 1 2.645 -1.522 1.106 1.00 0.00
+HETATM 35 H 1 0.769 -2.130 2.322 1.00 0.00
+HETATM 36 H 1 0.771 -0.912 4.294 1.00 0.00
+HETATM 37 H 1 -1.106 0.451 4.294 1.00 0.00
+HETATM 38 H 1 2.644 0.453 4.295 1.00 0.00
+HETATM 39 H 1 -0.387 2.655 4.295 1.00 0.00
+HETATM 40 H 1 1.928 2.654 4.295 1.00 0.00
+CONECT 1 2 5 6 21
+CONECT 2 1 3 14 22
+CONECT 3 2 4 12 23
+CONECT 4 3 5 10 24
+CONECT 5 1 4 8 25
+CONECT 6 1 7 15 26
+CONECT 7 6 8 17 27
+CONECT 8 5 7 9 28
+CONECT 9 8 10 19 29
+CONECT 10 4 9 11 30
+CONECT 11 10 12 20 31
+CONECT 12 3 11 13 32
+CONECT 13 12 14 18 33
+CONECT 14 2 13 15 34
+CONECT 15 6 14 16 35
+CONECT 16 15 17 18 36
+CONECT 17 7 16 19 37
+CONECT 18 13 16 20 38
+CONECT 19 9 17 20 39
+CONECT 20 11 18 19 40
+CONECT 21 1
+CONECT 22 2
+CONECT 23 3
+CONECT 24 4
+CONECT 25 5
+CONECT 26 6
+CONECT 27 7
+CONECT 28 8
+CONECT 29 9
+CONECT 30 10
+CONECT 31 11
+CONECT 32 12
+CONECT 33 13
+CONECT 34 14
+CONECT 35 15
+CONECT 36 16
+CONECT 37 17
+CONECT 38 18
+CONECT 39 19
+CONECT 40 20
+MASTER 0 0 0 0 0 0 0 0 40 0 40 0
+END
diff --git a/hacks/images/molecules/dthc.pdb b/hacks/images/molecules/dthc.pdb
new file mode 100644
index 0000000..d8688ac
--- /dev/null
+++ b/hacks/images/molecules/dthc.pdb
@@ -0,0 +1,107 @@
+HEADER Tetrahydrocannabinol: Delta 9-THC, an hallucinogen
+ATOM 1 O UNK 0 -1.791 -1.420 0.434
+ATOM 2 C UNK 0 -0.536 -1.012 0.033
+ATOM 3 C UNK 0 0.565 -1.346 0.828
+ATOM 4 C UNK 0 1.855 -0.978 0.446
+ATOM 5 C UNK 0 2.038 -0.295 -0.757
+ATOM 6 C UNK 0 0.940 0.052 -1.556
+ATOM 7 C UNK 0 -0.363 -0.272 -1.148
+ATOM 8 C UNK 0 -1.599 0.113 -1.985
+ATOM 9 C UNK 0 -1.568 1.523 -2.537
+ATOM 10 C UNK 0 -2.681 2.231 -2.781
+ATOM 11 C UNK 0 -4.068 1.708 -2.479
+ATOM 12 C UNK 0 -4.085 0.222 -2.091
+ATOM 13 C UNK 0 -2.892 -0.061 -1.162
+ATOM 14 C UNK 0 -2.908 -1.421 -0.435
+ATOM 15 O UNK 0 1.151 0.702 -2.747
+ATOM 16 C UNK 0 -2.610 3.628 -3.338
+ATOM 17 C UNK 0 -2.824 -2.642 -1.364
+ATOM 18 C UNK 0 -4.125 -1.570 0.485
+ATOM 19 C UNK 0 3.056 -1.332 1.325
+ATOM 20 C UNK 0 3.365 -0.156 2.260
+ATOM 21 C UNK 0 4.569 -0.467 3.158
+ATOM 22 C UNK 0 4.872 0.726 4.074
+ATOM 23 C UNK 0 6.079 0.425 4.969
+ATOM 24 H UNK 0 0.400 -1.896 1.747
+ATOM 25 H UNK 0 -1.626 -0.566 -2.849
+ATOM 26 H UNK 0 -4.720 1.866 -3.352
+ATOM 27 H UNK 0 -4.004 -0.399 -2.997
+ATOM 28 H UNK 0 2.079 0.837 -2.898
+ATOM 29 H UNK 0 -3.163 4.315 -2.681
+ATOM 30 H UNK 0 -2.839 -3.562 -0.762
+ATOM 31 H UNK 0 -3.995 -2.460 1.119
+ATOM 32 H UNK 0 -4.210 -0.687 1.134
+ATOM 33 H UNK 0 2.828 -2.232 1.917
+ATOM 34 H UNK 0 2.480 0.048 2.884
+ATOM 35 H UNK 0 4.349 -1.356 3.772
+ATOM 36 H UNK 0 3.994 0.938 4.706
+ATOM 37 H UNK 0 6.286 1.290 5.618
+ATOM 38 H UNK 0 3.036 -0.022 -1.076
+ATOM 39 H UNK 0 -0.602 1.973 -2.755
+ATOM 40 H UNK 0 -5.037 -0.005 -1.590
+ATOM 41 H UNK 0 -2.881 0.709 -0.374
+ATOM 42 H UNK 0 -1.565 3.966 -3.407
+ATOM 43 H UNK 0 -3.058 3.644 -4.342
+ATOM 44 H UNK 0 -1.884 -2.619 -1.933
+ATOM 45 H UNK 0 -3.674 -2.652 -2.061
+ATOM 46 H UNK 0 -5.048 -1.683 -0.102
+ATOM 47 H UNK 0 3.928 -1.546 0.687
+ATOM 48 H UNK 0 3.578 0.739 1.654
+ATOM 49 H UNK 0 5.449 -0.681 2.531
+ATOM 50 H UNK 0 5.086 1.616 3.462
+ATOM 51 H UNK 0 5.873 -0.453 5.600
+ATOM 52 H UNK 0 6.967 0.224 4.351
+ATOM 53 H UNK 0 -4.467 2.295 -1.638
+CONECT 1 2 14
+CONECT 2 1 3 7
+CONECT 3 2 4 24
+CONECT 4 3 5 19
+CONECT 5 4 6 38
+CONECT 6 5 7 15
+CONECT 7 2 6 8
+CONECT 8 7 9 13 25
+CONECT 9 8 10 39
+CONECT 10 9 11 16
+CONECT 11 10 12 26 53
+CONECT 12 11 27 40 13
+CONECT 13 8 12 41 14
+CONECT 14 1 13 17 18
+CONECT 15 6 28
+CONECT 16 10 29 42 43
+CONECT 17 14 30 44 45
+CONECT 18 14 31 32 46
+CONECT 19 4 20 33 47
+CONECT 20 19 21 34 48
+CONECT 21 20 22 35 49
+CONECT 22 21 23 36 50
+CONECT 23 22 37 51 52
+CONECT 24 3
+CONECT 25 8
+CONECT 26 11
+CONECT 27 12
+CONECT 28 15
+CONECT 29 16
+CONECT 30 17
+CONECT 31 18
+CONECT 32 18
+CONECT 33 19
+CONECT 34 20
+CONECT 35 21
+CONECT 36 22
+CONECT 37 23
+CONECT 38 5
+CONECT 39 9
+CONECT 40 12
+CONECT 41 13
+CONECT 42 16
+CONECT 43 16
+CONECT 44 17
+CONECT 45 17
+CONECT 46 18
+CONECT 47 19
+CONECT 48 20
+CONECT 49 21
+CONECT 50 22
+CONECT 51 23
+CONECT 52 23
+CONECT 53 11
diff --git a/hacks/images/molecules/dynamite.pdb b/hacks/images/molecules/dynamite.pdb
new file mode 100644
index 0000000..b16dc64
--- /dev/null
+++ b/hacks/images/molecules/dynamite.pdb
@@ -0,0 +1,47 @@
+HEADER Trinitroglycerin: Dynamite, an explosive
+COMPND jb09trin
+AUTHOR Created by Dave Woodcock at Okanagan University College
+AUTHOR email:woodcock@okanagan.bc.ca
+AUTHOR Date revised: Tue Sep 19 21:46:02 2000 GENERATED BY BABEL 1.6
+HETATM 1 C 1 0.000 0.000 0.000 1.00 0.00
+HETATM 2 C 1 1.540 0.000 0.000 1.00 0.00
+HETATM 3 C 1 2.063 1.449 0.000 1.00 0.00
+HETATM 4 O 1 3.467 1.429 0.127 1.00 0.00
+HETATM 5 N 1 4.015 2.776 -0.152 1.00 0.00
+HETATM 6 O 1 4.998 3.268 0.635 1.00 0.00
+HETATM 7 O 1 3.773 3.351 -1.351 1.00 0.00
+HETATM 8 O 1 2.004 -0.755 1.098 1.00 0.00
+HETATM 9 N 1 2.641 -0.291 2.107 1.00 0.00
+HETATM 10 O 1 3.090 -1.154 3.047 1.00 0.00
+HETATM 11 O 1 2.879 1.030 2.268 1.00 0.00
+HETATM 12 O 1 -0.458 -1.330 -0.079 1.00 0.00
+HETATM 13 N 1 -1.911 -1.339 -0.361 1.00 0.00
+HETATM 14 O 1 -2.745 -2.029 0.450 1.00 0.00
+HETATM 15 O 1 -2.357 -0.902 -1.560 1.00 0.00
+HETATM 16 H 1 -0.365 0.561 -0.860 1.00 0.00
+HETATM 17 H 1 -0.369 0.458 0.918 1.00 0.00
+HETATM 18 H 1 1.886 -0.486 -0.912 1.00 0.00
+HETATM 19 H 1 1.620 2.013 0.821 1.00 0.00
+HETATM 20 H 1 1.793 1.925 -0.943 1.00 0.00
+CONECT 1 2 12 16 17
+CONECT 2 1 3 8 18
+CONECT 3 2 4 19 20
+CONECT 4 3 5
+CONECT 5 4 6 7
+CONECT 6 5
+CONECT 7 5
+CONECT 8 2 9
+CONECT 9 8 10 11
+CONECT 10 9
+CONECT 11 9
+CONECT 12 1 13
+CONECT 13 12 14 15
+CONECT 14 13
+CONECT 15 13
+CONECT 16 1
+CONECT 17 1
+CONECT 18 2
+CONECT 19 3
+CONECT 20 3
+MASTER 0 0 0 0 0 0 0 0 20 0 20 0
+END
diff --git a/hacks/images/molecules/glycol.pdb b/hacks/images/molecules/glycol.pdb
new file mode 100644
index 0000000..202d0e1
--- /dev/null
+++ b/hacks/images/molecules/glycol.pdb
@@ -0,0 +1,27 @@
+HEADER Ethylene Glycol: Ethane-1,2-diol, Anti-freeze
+COMPND al2034
+AUTHOR Created by Dave Woodcock at Okanagan University College
+AUTHOR email:woodcock@okanagan.bc.ca
+AUTHOR Date revised: Tue Aug 29 17:54:52 2000 GENERATED BY BABEL 1.6
+HETATM 1 C 1 0.000 0.000 0.000 1.00 0.00
+HETATM 2 C 1 1.542 0.000 0.000 1.00 0.00
+HETATM 3 O 1 2.027 1.347 0.000 1.00 0.00
+HETATM 4 O 1 -0.485 -1.347 -0.041 1.00 0.00
+HETATM 5 H 1 -0.360 0.537 -0.878 1.00 0.00
+HETATM 6 H 1 -0.367 0.494 0.900 1.00 0.00
+HETATM 7 H 1 1.902 -0.512 -0.893 1.00 0.00
+HETATM 8 H 1 1.908 -0.520 0.885 1.00 0.00
+HETATM 9 H 1 1.743 1.800 0.802 1.00 0.00
+HETATM 10 H 1 -0.202 -1.823 0.747 1.00 0.00
+CONECT 1 2 4 5 6
+CONECT 2 1 3 7 8
+CONECT 3 2 9
+CONECT 4 1 10
+CONECT 5 1
+CONECT 6 1
+CONECT 7 2
+CONECT 8 2
+CONECT 9 3
+CONECT 10 4
+MASTER 0 0 0 0 0 0 0 0 10 0 10 0
+END
diff --git a/hacks/images/molecules/guanine.pdb b/hacks/images/molecules/guanine.pdb
new file mode 100644
index 0000000..229b654
--- /dev/null
+++ b/hacks/images/molecules/guanine.pdb
@@ -0,0 +1,39 @@
+HEADER Guanine: Purine base nucleotide
+COMPND jb09guan
+AUTHOR Created by Dave Woodcock at Okanagan University College
+AUTHOR email:woodcock@okanagan.bc.ca
+AUTHOR Date revised: Tue Sep 19 21:46:02 2000 GENERATED BY BABEL 1.6
+HETATM 1 C 1 0.000 0.000 0.000 1.00 0.00
+HETATM 2 C 1 1.392 0.000 0.000 1.00 0.00
+HETATM 3 C 1 2.082 1.215 0.000 1.00 0.00
+HETATM 4 N 1 1.339 2.346 -0.001 1.00 0.00
+HETATM 5 C 1 -0.017 2.313 -0.003 1.00 0.00
+HETATM 6 N 1 -0.709 1.149 -0.003 1.00 0.00
+HETATM 7 N 1 -0.392 -1.291 -0.028 1.00 0.00
+HETATM 8 C 1 0.730 -2.047 -0.044 1.00 0.00
+HETATM 9 N 1 1.842 -1.275 -0.028 1.00 0.00
+HETATM 10 O 1 3.285 1.253 -0.010 1.00 0.00
+HETATM 11 N 1 -0.723 3.523 -0.019 1.00 0.00
+HETATM 12 H 1 1.811 3.244 -0.007 1.00 0.00
+HETATM 13 H 1 -1.347 -1.629 -0.048 1.00 0.00
+HETATM 14 H 1 0.738 -3.137 -0.077 1.00 0.00
+HETATM 15 H 1 -1.640 3.377 -0.427 1.00 0.00
+HETATM 16 H 1 -0.213 4.205 -0.570 1.00 0.00
+CONECT 1 2 2 6 7
+CONECT 2 1 1 3 9
+CONECT 3 2 4 10 10
+CONECT 4 3 5 12
+CONECT 5 4 6 6 11
+CONECT 6 1 5 5
+CONECT 7 1 8 13
+CONECT 8 7 9 9 14
+CONECT 9 2 8 8
+CONECT 10 3 3
+CONECT 11 5 15 16
+CONECT 12 4
+CONECT 13 7
+CONECT 14 8
+CONECT 15 11
+CONECT 16 11
+MASTER 0 0 0 0 0 0 0 0 16 0 16 0
+END
diff --git a/hacks/images/molecules/heroin.pdb b/hacks/images/molecules/heroin.pdb
new file mode 100644
index 0000000..ddb4014
--- /dev/null
+++ b/hacks/images/molecules/heroin.pdb
@@ -0,0 +1,107 @@
+HEADER Diacetylmorphine: Heroin, an opiate
+COMPND al3084
+AUTHOR Created by Dave Woodcock at Okanagan University College
+AUTHOR email:woodcock@okanagan.bc.ca
+AUTHOR Date revised: Wed Aug 30 12:33:12 2000 GENERATED BY BABEL 1.6
+HETATM 1 C 1 0.000 0.000 0.000 1.00 0.00
+HETATM 2 C 1 1.400 0.000 0.000 1.00 0.00
+HETATM 3 C 1 2.108 1.210 0.000 1.00 0.00
+HETATM 4 C 1 1.452 2.447 -0.065 1.00 0.00
+HETATM 5 C 1 0.055 2.457 -0.018 1.00 0.00
+HETATM 6 C 1 -0.624 1.244 0.041 1.00 0.00
+HETATM 7 C 1 -2.081 1.501 -0.201 1.00 0.00
+HETATM 8 C 1 -2.725 0.343 -0.973 1.00 0.00
+HETATM 9 C 1 -2.367 -0.953 -0.210 1.00 0.00
+HETATM 10 C 1 -0.836 -1.236 -0.253 1.00 0.00
+HETATM 11 C 1 -1.913 2.852 -0.934 1.00 0.00
+HETATM 12 C 1 -2.752 1.623 1.177 1.00 0.00
+HETATM 13 C 1 -2.503 0.306 1.943 1.00 0.00
+HETATM 14 N 1 -2.936 -0.856 1.147 1.00 0.00
+HETATM 15 C 1 -2.820 -2.103 1.920 1.00 0.00
+HETATM 16 H 1 -3.807 0.473 -0.972 1.00 0.00
+HETATM 17 C 1 -2.256 0.283 -2.408 1.00 0.00
+HETATM 18 C 1 -1.948 1.398 -3.085 1.00 0.00
+HETATM 19 C 1 -1.494 2.675 -2.413 1.00 0.00
+HETATM 20 H 1 -2.820 3.452 -0.859 1.00 0.00
+HETATM 21 O 1 -0.799 3.480 -0.318 1.00 0.00
+HETATM 22 H 1 -1.885 3.520 -2.982 1.00 0.00
+HETATM 23 O 1 -0.083 2.674 -2.462 1.00 0.00
+HETATM 24 O 1 2.142 3.620 -0.142 1.00 0.00
+HETATM 25 H 1 1.942 -0.945 -0.044 1.00 0.00
+HETATM 26 H 1 3.198 1.180 -0.006 1.00 0.00
+HETATM 27 H 1 -2.866 -1.782 -0.712 1.00 0.00
+HETATM 28 H 1 -0.588 -1.599 -1.250 1.00 0.00
+HETATM 29 H 1 -0.574 -2.010 0.465 1.00 0.00
+HETATM 30 H 1 -3.823 1.785 1.052 1.00 0.00
+HETATM 31 H 1 -2.320 2.456 1.731 1.00 0.00
+HETATM 32 H 1 -3.068 0.334 2.874 1.00 0.00
+HETATM 33 H 1 -1.444 0.211 2.184 1.00 0.00
+HETATM 34 H 1 -3.492 -2.057 2.778 1.00 0.00
+HETATM 35 H 1 -1.799 -2.234 2.280 1.00 0.00
+HETATM 36 H 1 -3.099 -2.953 1.298 1.00 0.00
+HETATM 37 H 1 -2.414 -0.639 -2.967 1.00 0.00
+HETATM 38 H 1 -1.797 1.313 -4.161 1.00 0.00
+HETATM 39 C 1 3.076 3.567 -1.091 1.00 0.00
+HETATM 40 O 1 2.786 3.826 -2.230 1.00 0.00
+HETATM 41 C 1 4.523 3.509 -0.695 1.00 0.00
+HETATM 42 H 1 5.012 2.691 -1.224 1.00 0.00
+HETATM 43 H 1 4.600 3.345 0.380 1.00 0.00
+HETATM 44 H 1 5.008 4.450 -0.954 1.00 0.00
+HETATM 45 C 1 0.390 3.733 -3.117 1.00 0.00
+HETATM 46 O 1 0.845 3.595 -4.223 1.00 0.00
+HETATM 47 C 1 0.417 5.083 -2.459 1.00 0.00
+HETATM 48 H 1 1.199 5.692 -2.913 1.00 0.00
+HETATM 49 H 1 0.619 4.970 -1.395 1.00 0.00
+HETATM 50 H 1 -0.547 5.574 -2.594 1.00 0.00
+CONECT 1 2 2 6 10
+CONECT 2 1 1 3 25
+CONECT 3 2 4 4 26
+CONECT 4 3 3 5 24
+CONECT 5 4 6 6 21
+CONECT 6 1 5 5 7
+CONECT 7 6 8 11 12
+CONECT 8 7 9 16 17
+CONECT 9 8 10 14 27
+CONECT 10 1 9 28 29
+CONECT 11 7 19 20 21
+CONECT 12 7 13 30 31
+CONECT 13 12 14 32 33
+CONECT 14 9 13 15
+CONECT 15 14 34 35 36
+CONECT 16 8
+CONECT 17 8 18 18 37
+CONECT 18 17 17 19 38
+CONECT 19 11 18 22 23
+CONECT 20 11
+CONECT 21 5 11
+CONECT 22 19
+CONECT 23 19 45
+CONECT 24 4 39
+CONECT 25 2
+CONECT 26 3
+CONECT 27 9
+CONECT 28 10
+CONECT 29 10
+CONECT 30 12
+CONECT 31 12
+CONECT 32 13
+CONECT 33 13
+CONECT 34 15
+CONECT 35 15
+CONECT 36 15
+CONECT 37 17
+CONECT 38 18
+CONECT 39 24 40 40 41
+CONECT 40 39 39
+CONECT 41 39 42 43 44
+CONECT 42 41
+CONECT 43 41
+CONECT 44 41
+CONECT 45 23 46 46 47
+CONECT 46 45 45
+CONECT 47 45 48 49 50
+CONECT 48 47
+CONECT 49 47
+CONECT 50 47
+MASTER 0 0 0 0 0 0 0 0 50 0 50 0
+END
diff --git a/hacks/images/molecules/hexahelicene.pdb b/hacks/images/molecules/hexahelicene.pdb
new file mode 100644
index 0000000..52162c5
--- /dev/null
+++ b/hacks/images/molecules/hexahelicene.pdb
@@ -0,0 +1,90 @@
+COMPND Hexahelicene
+AUTHOR Created by Dave Woodcock at Okanagan University College
+AUTHOR email:woodcock@okanagan.bc.ca
+AUTHOR Date revised: Fri Sep 1 09:41:05 2000 GENERATED BY BABEL 1.6
+HETATM 1 C 1 0.000 0.000 0.000 1.00 0.00
+HETATM 2 C 1 1.404 0.000 0.000 1.00 0.00
+HETATM 3 C 1 2.104 1.206 0.000 1.00 0.00
+HETATM 4 C 1 1.402 2.413 -0.064 1.00 0.00
+HETATM 5 C 1 0.002 2.407 -0.063 1.00 0.00
+HETATM 6 C 1 -0.705 1.209 0.071 1.00 0.00
+HETATM 7 C 1 -2.102 1.180 0.220 1.00 0.00
+HETATM 8 C 1 -2.847 2.295 0.643 1.00 0.00
+HETATM 9 C 1 -4.192 2.360 0.266 1.00 0.00
+HETATM 10 C 1 -4.858 1.229 -0.190 1.00 0.00
+HETATM 11 C 1 -4.166 0.012 -0.273 1.00 0.00
+HETATM 12 C 1 -2.782 -0.001 -0.086 1.00 0.00
+HETATM 13 C 1 -2.082 -1.204 -0.224 1.00 0.00
+HETATM 14 C 1 -0.685 -1.210 -0.107 1.00 0.00
+HETATM 15 C 1 -2.318 3.332 1.420 1.00 0.00
+HETATM 16 C 1 -1.206 3.177 2.264 1.00 0.00
+HETATM 17 C 1 -0.519 4.289 2.729 1.00 0.00
+HETATM 18 C 1 -1.052 5.582 2.503 1.00 0.00
+HETATM 19 C 1 -2.286 5.716 1.895 1.00 0.00
+HETATM 20 C 1 -2.936 4.583 1.371 1.00 0.00
+HETATM 21 C 1 -4.216 4.717 0.815 1.00 0.00
+HETATM 22 C 1 -4.881 3.585 0.350 1.00 0.00
+HETATM 23 C 1 -0.789 1.905 2.707 1.00 0.00
+HETATM 24 C 1 0.400 1.759 3.421 1.00 0.00
+HETATM 25 C 1 1.155 2.887 3.765 1.00 0.00
+HETATM 26 C 1 0.669 4.165 3.443 1.00 0.00
+HETATM 27 H 1 1.945 -0.947 -0.019 1.00 0.00
+HETATM 28 H 1 3.191 1.206 -0.002 1.00 0.00
+HETATM 29 H 1 1.942 3.359 -0.131 1.00 0.00
+HETATM 30 H 1 -0.523 3.350 -0.198 1.00 0.00
+HETATM 31 H 1 -5.918 1.264 -0.433 1.00 0.00
+HETATM 32 H 1 -4.698 -0.901 -0.555 1.00 0.00
+HETATM 33 H 1 -2.617 -2.140 -0.409 1.00 0.00
+HETATM 34 H 1 -0.142 -2.150 -0.180 1.00 0.00
+HETATM 35 H 1 -0.520 6.457 2.886 1.00 0.00
+HETATM 36 H 1 -2.751 6.690 1.806 1.00 0.00
+HETATM 37 H 1 -4.715 5.680 0.815 1.00 0.00
+HETATM 38 H 1 -5.917 3.654 0.008 1.00 0.00
+HETATM 39 H 1 -1.407 1.021 2.524 1.00 0.00
+HETATM 40 H 1 0.734 0.774 3.725 1.00 0.00
+HETATM 41 H 1 2.090 2.777 4.328 1.00 0.00
+HETATM 42 H 1 1.225 5.042 3.772 1.00 0.00
+CONECT 1 2 2 6 14
+CONECT 2 1 1 3 27
+CONECT 3 2 4 4 28
+CONECT 4 3 3 5 29
+CONECT 5 4 6 6 30
+CONECT 6 1 5 5 7
+CONECT 7 6 8 8 12
+CONECT 8 7 7 9 15
+CONECT 9 8 10 10 22
+CONECT 10 9 9 11 31
+CONECT 11 10 12 12 32
+CONECT 12 7 11 11 13
+CONECT 13 12 14 14 33
+CONECT 14 1 13 13 34
+CONECT 15 8 16 16 20
+CONECT 16 15 15 17 23
+CONECT 17 16 18 18 26
+CONECT 18 17 17 19 35
+CONECT 19 18 20 20 36
+CONECT 20 15 19 19 21
+CONECT 21 20 22 22 37
+CONECT 22 9 21 21 38
+CONECT 23 16 24 24 39
+CONECT 24 23 23 25 40
+CONECT 25 24 26 26 41
+CONECT 26 17 25 25 42
+CONECT 27 2
+CONECT 28 3
+CONECT 29 4
+CONECT 30 5
+CONECT 31 10
+CONECT 32 11
+CONECT 33 13
+CONECT 34 14
+CONECT 35 18
+CONECT 36 19
+CONECT 37 21
+CONECT 38 22
+CONECT 39 23
+CONECT 40 24
+CONECT 41 25
+CONECT 42 26
+MASTER 0 0 0 0 0 0 0 0 42 0 42 0
+END
diff --git a/hacks/images/molecules/ibuprofen.pdb b/hacks/images/molecules/ibuprofen.pdb
new file mode 100644
index 0000000..48d3dba
--- /dev/null
+++ b/hacks/images/molecules/ibuprofen.pdb
@@ -0,0 +1,72 @@
+HEADER Ibuprofen: Advil/Motrin, an anti-inflammatory
+AUTHOR Created by Dave Woodcock at Okanagan University College
+AUTHOR email:woodcock@okanagan.bc.ca
+AUTHOR Date revised: Fri Sep 1 09:41:05 2000 GENERATED BY BABEL 1.6
+HETATM 1 C 1 0.000 0.000 0.000 1.00 0.00
+HETATM 2 C 1 1.399 0.000 0.000 1.00 0.00
+HETATM 3 C 1 2.098 1.212 0.000 1.00 0.00
+HETATM 4 C 1 1.391 2.419 0.004 1.00 0.00
+HETATM 5 C 1 -0.008 2.417 0.005 1.00 0.00
+HETATM 6 C 1 -0.712 1.206 -0.003 1.00 0.00
+HETATM 7 C 1 -2.224 1.136 -0.009 1.00 0.00
+HETATM 8 C 1 -2.900 2.504 -0.232 1.00 0.00
+HETATM 9 C 1 3.611 1.210 -0.042 1.00 0.00
+HETATM 10 C 1 4.094 0.909 -1.477 1.00 0.00
+HETATM 11 C 1 5.635 0.868 -1.503 1.00 0.00
+HETATM 12 C 1 3.590 1.996 -2.450 1.00 0.00
+HETATM 13 C 1 -2.686 0.573 1.305 1.00 0.00
+HETATM 14 O 1 -3.846 0.297 1.466 1.00 0.00
+HETATM 15 O 1 -1.792 0.321 2.277 1.00 0.00
+HETATM 16 H 1 -0.539 -0.948 -0.004 1.00 0.00
+HETATM 17 H 1 1.943 -0.945 -0.009 1.00 0.00
+HETATM 18 H 1 1.930 3.366 -0.006 1.00 0.00
+HETATM 19 H 1 -0.533 3.371 0.004 1.00 0.00
+HETATM 20 H 1 -2.536 0.461 -0.807 1.00 0.00
+HETATM 21 H 1 -2.546 2.944 -1.165 1.00 0.00
+HETATM 22 H 1 -2.676 3.171 0.600 1.00 0.00
+HETATM 23 H 1 -3.980 2.365 -0.292 1.00 0.00
+HETATM 24 H 1 3.986 0.442 0.635 1.00 0.00
+HETATM 25 H 1 3.990 2.181 0.277 1.00 0.00
+HETATM 26 H 1 3.707 -0.061 -1.792 1.00 0.00
+HETATM 27 H 1 5.991 0.094 -0.823 1.00 0.00
+HETATM 28 H 1 6.034 1.834 -1.192 1.00 0.00
+HETATM 29 H 1 5.978 0.645 -2.513 1.00 0.00
+HETATM 30 H 1 3.941 2.975 -2.122 1.00 0.00
+HETATM 31 H 1 2.500 1.993 -2.477 1.00 0.00
+HETATM 32 H 1 3.970 1.793 -3.451 1.00 0.00
+HETATM 33 H 1 -1.689 -0.648 2.383 1.00 0.00
+CONECT 1 2 2 6 16
+CONECT 2 1 1 3 17
+CONECT 3 2 4 4 9
+CONECT 4 3 3 5 18
+CONECT 5 4 6 6 19
+CONECT 6 1 5 5 7
+CONECT 7 6 8 13 20
+CONECT 8 7 21 22 23
+CONECT 9 3 10 24 25
+CONECT 10 9 11 12 26
+CONECT 11 10 27 28 29
+CONECT 12 10 30 31 32
+CONECT 13 7 14 14 15
+CONECT 14 13 13
+CONECT 15 13 33
+CONECT 16 1
+CONECT 17 2
+CONECT 18 4
+CONECT 19 5
+CONECT 20 7
+CONECT 21 8
+CONECT 22 8
+CONECT 23 8
+CONECT 24 9
+CONECT 25 9
+CONECT 26 10
+CONECT 27 11
+CONECT 28 11
+CONECT 29 11
+CONECT 30 12
+CONECT 31 12
+CONECT 32 12
+CONECT 33 15
+MASTER 0 0 0 0 0 0 0 0 33 0 33 0
+END
diff --git a/hacks/images/molecules/lsd.pdb b/hacks/images/molecules/lsd.pdb
new file mode 100644
index 0000000..7d24830
--- /dev/null
+++ b/hacks/images/molecules/lsd.pdb
@@ -0,0 +1,104 @@
+HEADER Lysergic acid diethylamide, a potent hallucinogen
+AUTHOR Created by Dave Woodcock at Okanagan University College
+AUTHOR email:woodcock@okanagan.bc.ca
+AUTHOR Date revised: Fri Sep 1 09:41:05 2000 GENERATED BY BABEL 1.6
+HETATM 1 C 1 0.000 0.000 0.000 1.00 0.00
+HETATM 2 C 1 1.397 0.000 0.000 1.00 0.00
+HETATM 3 C 1 2.012 1.258 0.000 1.00 0.00
+HETATM 4 C 1 1.246 2.433 -0.052 1.00 0.00
+HETATM 5 C 1 -0.155 2.405 -0.125 1.00 0.00
+HETATM 6 C 1 -0.773 1.155 -0.096 1.00 0.00
+HETATM 7 N 1 -2.065 0.769 -0.378 1.00 0.00
+HETATM 8 C 1 -2.092 -0.602 -0.503 1.00 0.00
+HETATM 9 C 1 -0.810 -1.103 -0.242 1.00 0.00
+HETATM 10 C 1 -0.159 -2.415 -0.700 1.00 0.00
+HETATM 11 C 1 1.178 -2.555 0.075 1.00 0.00
+HETATM 12 C 1 2.056 -1.321 -0.019 1.00 0.00
+HETATM 13 H 1 0.916 -2.675 1.126 1.00 0.00
+HETATM 14 N 1 1.899 -3.768 -0.346 1.00 0.00
+HETATM 15 C 1 3.394 -1.430 0.057 1.00 0.00
+HETATM 16 C 1 4.101 -2.765 0.134 1.00 0.00
+HETATM 17 C 1 3.115 -3.899 0.470 1.00 0.00
+HETATM 18 H 1 4.565 -2.960 -0.830 1.00 0.00
+HETATM 19 C 1 5.121 -2.704 1.237 1.00 0.00
+HETATM 20 O 1 4.720 -2.413 2.335 1.00 0.00
+HETATM 21 N 1 6.434 -3.000 1.089 1.00 0.00
+HETATM 22 C 1 7.305 -2.925 2.274 1.00 0.00
+HETATM 23 C 1 7.755 -4.340 2.686 1.00 0.00
+HETATM 24 C 1 7.047 -3.307 -0.215 1.00 0.00
+HETATM 25 C 1 6.736 -4.755 -0.646 1.00 0.00
+HETATM 26 H 1 3.094 1.350 0.014 1.00 0.00
+HETATM 27 H 1 1.757 3.398 -0.079 1.00 0.00
+HETATM 28 H 1 -0.732 3.319 -0.249 1.00 0.00
+HETATM 29 H 1 -2.858 1.432 -0.658 1.00 0.00
+HETATM 30 H 1 -2.917 -1.177 -0.924 1.00 0.00
+HETATM 31 H 1 0.025 -2.349 -1.772 1.00 0.00
+HETATM 32 H 1 -0.811 -3.260 -0.484 1.00 0.00
+HETATM 33 H 1 4.015 -0.538 0.044 1.00 0.00
+HETATM 34 H 1 2.844 -3.840 1.524 1.00 0.00
+HETATM 35 H 1 3.586 -4.865 0.286 1.00 0.00
+HETATM 36 H 1 6.768 -2.468 3.105 1.00 0.00
+HETATM 37 H 1 8.181 -2.318 2.047 1.00 0.00
+HETATM 38 H 1 8.376 -4.772 1.903 1.00 0.00
+HETATM 39 H 1 6.879 -4.969 2.844 1.00 0.00
+HETATM 40 H 1 8.332 -4.283 3.609 1.00 0.00
+HETATM 41 H 1 8.129 -3.199 -0.132 1.00 0.00
+HETATM 42 H 1 6.693 -2.606 -0.971 1.00 0.00
+HETATM 43 H 1 5.663 -4.894 -0.765 1.00 0.00
+HETATM 44 H 1 7.103 -5.451 0.107 1.00 0.00
+HETATM 45 H 1 7.230 -4.962 -1.595 1.00 0.00
+HETATM 46 C 1 2.198 -3.813 -1.786 1.00 0.00
+HETATM 47 H 1 2.586 -2.854 -2.128 1.00 0.00
+HETATM 48 H 1 1.292 -4.053 -2.342 1.00 0.00
+HETATM 49 H 1 2.936 -4.591 -1.982 1.00 0.00
+CONECT 1 2 2 6 9
+CONECT 2 1 1 3 12
+CONECT 3 2 4 4 26
+CONECT 4 3 3 5 27
+CONECT 5 4 6 6 28
+CONECT 6 1 5 5 7
+CONECT 7 6 8 29
+CONECT 8 7 9 9 30
+CONECT 9 1 8 8 10
+CONECT 10 9 11 31 32
+CONECT 11 10 12 13 14
+CONECT 12 2 11 15 15
+CONECT 13 11
+CONECT 14 11 17 46
+CONECT 15 12 12 16 33
+CONECT 16 15 17 18 19
+CONECT 17 14 16 34 35
+CONECT 18 16
+CONECT 19 16 20 20 21
+CONECT 20 19 19
+CONECT 21 19 22 24
+CONECT 22 21 23 36 37
+CONECT 23 22 38 39 40
+CONECT 24 21 25 41 42
+CONECT 25 24 43 44 45
+CONECT 26 3
+CONECT 27 4
+CONECT 28 5
+CONECT 29 7
+CONECT 30 8
+CONECT 31 10
+CONECT 32 10
+CONECT 33 15
+CONECT 34 17
+CONECT 35 17
+CONECT 36 22
+CONECT 37 22
+CONECT 38 23
+CONECT 39 23
+CONECT 40 23
+CONECT 41 24
+CONECT 42 24
+CONECT 43 25
+CONECT 44 25
+CONECT 45 25
+CONECT 46 14 47 48 49
+CONECT 47 46
+CONECT 48 46
+CONECT 49 46
+MASTER 0 0 0 0 0 0 0 0 49 0 49 0
+END
diff --git a/hacks/images/molecules/menthol.pdb b/hacks/images/molecules/menthol.pdb
new file mode 100644
index 0000000..c418688
--- /dev/null
+++ b/hacks/images/molecules/menthol.pdb
@@ -0,0 +1,69 @@
+HEADER Menthol: Mentha arvensis oil
+COMPND menthol
+AUTHOR Created by Dave Woodcock at Okanagan University College
+AUTHOR email:woodcock@okanagan.bc.ca
+AUTHOR Date revised: Fri Sep 1 09:41:05 2000 GENERATED BY BABEL 1.6
+HETATM 1 C 1 0.000 0.000 0.000 1.00 0.00
+HETATM 2 O 1 1.431 0.000 0.000 1.00 0.00
+HETATM 3 C 1 -0.501 1.458 0.000 1.00 0.00
+HETATM 4 C 1 -2.042 1.485 -0.004 1.00 0.00
+HETATM 5 C 1 -2.576 0.746 1.240 1.00 0.00
+HETATM 6 C 1 -2.072 -0.710 1.236 1.00 0.00
+HETATM 7 C 1 -0.528 -0.726 1.258 1.00 0.00
+HETATM 8 C 1 -0.005 -2.181 1.381 1.00 0.00
+HETATM 9 C 1 1.486 -2.197 1.780 1.00 0.00
+HETATM 10 C 1 -0.183 -2.997 0.081 1.00 0.00
+HETATM 11 C 1 -2.539 2.945 0.003 1.00 0.00
+HETATM 12 H 1 -0.367 -0.497 -0.898 1.00 0.00
+HETATM 13 H 1 1.761 0.410 -0.806 1.00 0.00
+HETATM 14 H 1 -0.129 1.968 -0.889 1.00 0.00
+HETATM 15 H 1 -0.127 1.969 0.888 1.00 0.00
+HETATM 16 H 1 -2.409 0.987 -0.903 1.00 0.00
+HETATM 17 H 1 -3.666 0.750 1.224 1.00 0.00
+HETATM 18 H 1 -2.229 1.249 2.142 1.00 0.00
+HETATM 19 H 1 -2.440 -1.211 0.342 1.00 0.00
+HETATM 20 H 1 -2.455 -1.222 2.119 1.00 0.00
+HETATM 21 H 1 -0.200 -0.175 2.139 1.00 0.00
+HETATM 22 H 1 -0.565 -2.673 2.176 1.00 0.00
+HETATM 23 H 1 1.633 -1.600 2.680 1.00 0.00
+HETATM 24 H 1 2.100 -1.796 0.975 1.00 0.00
+HETATM 25 H 1 1.794 -3.223 1.980 1.00 0.00
+HETATM 26 H 1 0.434 -2.578 -0.713 1.00 0.00
+HETATM 27 H 1 -1.228 -2.993 -0.228 1.00 0.00
+HETATM 28 H 1 0.127 -4.026 0.261 1.00 0.00
+HETATM 29 H 1 -2.165 3.462 -0.880 1.00 0.00
+HETATM 30 H 1 -2.178 3.451 0.898 1.00 0.00
+HETATM 31 H 1 -3.629 2.960 -0.005 1.00 0.00
+CONECT 1 2 3 7 12
+CONECT 2 1 13
+CONECT 3 1 4 14 15
+CONECT 4 3 5 11 16
+CONECT 5 4 6 17 18
+CONECT 6 5 7 19 20
+CONECT 7 1 6 8 21
+CONECT 8 7 9 10 22
+CONECT 9 8 23 24 25
+CONECT 10 8 26 27 28
+CONECT 11 4 29 30 31
+CONECT 12 1
+CONECT 13 2
+CONECT 14 3
+CONECT 15 3
+CONECT 16 4
+CONECT 17 5
+CONECT 18 5
+CONECT 19 6
+CONECT 20 6
+CONECT 21 7
+CONECT 22 8
+CONECT 23 9
+CONECT 24 9
+CONECT 25 9
+CONECT 26 10
+CONECT 27 10
+CONECT 28 10
+CONECT 29 11
+CONECT 30 11
+CONECT 31 11
+MASTER 0 0 0 0 0 0 0 0 31 0 31 0
+END
diff --git a/hacks/images/molecules/mescaline.pdb b/hacks/images/molecules/mescaline.pdb
new file mode 100644
index 0000000..7143a22
--- /dev/null
+++ b/hacks/images/molecules/mescaline.pdb
@@ -0,0 +1,71 @@
+HEADER Mescaline: Peyote, an hallucinogen
+COMPND jb12mesc
+AUTHOR Created by Dave Woodcock at Okanagan University College
+AUTHOR email:woodcock@okanagan.bc.ca
+AUTHOR Date revised: Wed Sep 20 16:26:54 2000 GENERATED BY BABEL 1.6
+HETATM 1 C 1 0.000 0.000 0.000 1.00 0.00
+HETATM 2 C 1 1.398 0.000 0.000 1.00 0.00
+HETATM 3 C 1 2.098 1.213 0.000 1.00 0.00
+HETATM 4 C 1 1.399 2.424 -0.005 1.00 0.00
+HETATM 5 C 1 -0.001 2.422 0.013 1.00 0.00
+HETATM 6 C 1 -0.700 1.211 0.014 1.00 0.00
+HETATM 7 O 1 -2.062 1.209 0.026 1.00 0.00
+HETATM 8 C 1 -2.564 1.047 -1.282 1.00 0.00
+HETATM 9 O 1 -0.682 -1.180 -0.024 1.00 0.00
+HETATM 10 C 1 -0.867 -1.664 1.288 1.00 0.00
+HETATM 11 O 1 2.078 -1.180 -0.002 1.00 0.00
+HETATM 12 C 1 2.225 -1.657 -1.321 1.00 0.00
+HETATM 13 C 1 2.154 3.735 -0.007 1.00 0.00
+HETATM 14 C 1 2.388 4.190 1.447 1.00 0.00
+HETATM 15 N 1 3.124 5.464 1.464 1.00 0.00
+HETATM 16 H 1 3.188 1.207 0.000 1.00 0.00
+HETATM 17 H 1 -0.549 3.364 0.023 1.00 0.00
+HETATM 18 H 1 -2.231 0.093 -1.690 1.00 0.00
+HETATM 19 H 1 -2.208 1.859 -1.916 1.00 0.00
+HETATM 20 H 1 -3.653 1.064 -1.252 1.00 0.00
+HETATM 21 H 1 -1.432 -0.938 1.873 1.00 0.00
+HETATM 22 H 1 0.101 -1.837 1.758 1.00 0.00
+HETATM 23 H 1 -1.419 -2.603 1.248 1.00 0.00
+HETATM 24 H 1 2.775 -0.929 -1.917 1.00 0.00
+HETATM 25 H 1 1.244 -1.825 -1.765 1.00 0.00
+HETATM 26 H 1 2.777 -2.597 -1.303 1.00 0.00
+HETATM 27 H 1 1.574 4.490 -0.538 1.00 0.00
+HETATM 28 H 1 3.114 3.603 -0.507 1.00 0.00
+HETATM 29 H 1 2.966 3.432 1.976 1.00 0.00
+HETATM 30 H 1 1.427 4.321 1.944 1.00 0.00
+HETATM 31 H 1 2.590 6.179 0.982 1.00 0.00
+HETATM 32 H 1 4.024 5.350 1.012 1.00 0.00
+CONECT 1 2 2 6 9
+CONECT 2 1 1 3 11
+CONECT 3 2 4 4 16
+CONECT 4 3 3 5 13
+CONECT 5 4 6 6 17
+CONECT 6 1 5 5 7
+CONECT 7 6 8
+CONECT 8 7 18 19 20
+CONECT 9 1 10
+CONECT 10 9 21 22 23
+CONECT 11 2 12
+CONECT 12 11 24 25 26
+CONECT 13 4 14 27 28
+CONECT 14 13 15 29 30
+CONECT 15 14 31 32
+CONECT 16 3
+CONECT 17 5
+CONECT 18 8
+CONECT 19 8
+CONECT 20 8
+CONECT 21 10
+CONECT 22 10
+CONECT 23 10
+CONECT 24 12
+CONECT 25 12
+CONECT 26 12
+CONECT 27 13
+CONECT 28 13
+CONECT 29 14
+CONECT 30 14
+CONECT 31 15
+CONECT 32 15
+MASTER 0 0 0 0 0 0 0 0 32 0 32 0
+END
diff --git a/hacks/images/molecules/methamphetamine.pdb b/hacks/images/molecules/methamphetamine.pdb
new file mode 100644
index 0000000..0cf567d
--- /dev/null
+++ b/hacks/images/molecules/methamphetamine.pdb
@@ -0,0 +1,88 @@
+HEADER Methamphetamine: D-Desoxyephedrine
+ORIGX1 1.000000 0.000000 0.000000 0.00000
+ORIGX2 0.000000 1.000000 0.000000 0.00000
+ORIGX3 0.000000 0.000000 1.000000 0.00000
+SCALE1 0.100000 0.000000 0.000000 0.00000
+SCALE2 0.000000 0.100000 0.000000 0.00000
+SCALE3 0.000000 0.000000 0.100000 0.00000
+ATOM 1 C 1 0.729 4.473 -1.914 1.00 0.00
+ATOM 2 C 1 -0.451 3.821 -2.014 1.00 0.00
+ATOM 3 C 1 -0.995 3.421 -3.398 1.00 0.00
+ATOM 4 C 1 -0.293 3.722 -4.513 1.00 0.00
+ATOM 5 C 1 1.052 4.465 -4.399 1.00 0.00
+ATOM 6 C 1 1.529 4.816 -3.184 1.00 0.00
+ATOM 7 H 1 1.115 4.756 -0.934 1.00 0.00
+ATOM 8 C 1 -1.251 3.478 -0.743 1.00 0.00
+ATOM 9 H 1 -1.947 2.896 -3.478 1.00 0.00
+ATOM 10 H 1 -0.678 3.440 -5.492 1.00 0.00
+ATOM 11 H 1 1.618 4.708 -5.298 1.00 0.00
+ATOM 12 H 1 2.481 5.342 -3.104 1.00 0.00
+ATOM 13 C 1 -0.489 3.986 0.496 1.00 0.00
+ATOM 14 N 1 -1.279 3.647 1.750 1.00 0.00
+ATOM 15 H 1 -1.378 2.398 -0.674 1.00 0.00
+ATOM 19 H 1 -2.229 3.957 -0.790 1.00 0.00
+ATOM 20 H 1 0.489 3.507 0.542 1.00 0.00
+ATOM 21 C 1 -0.310 5.512 0.398 1.00 0.00
+ATOM 22 H 1 -1.403 2.587 1.817 1.00 0.00
+ATOM 23 C 1 -0.528 4.148 2.972 1.00 0.00
+ATOM 24 H 1 -0.401 5.229 2.903 1.00 0.00
+ATOM 25 H 1 0.451 3.670 3.019 1.00 0.00
+ATOM 26 H 1 -1.094 3.905 3.871 1.00 0.00
+ATOM 27 H 1 0.229 5.871 1.275 1.00 0.00
+ATOM 28 H 1 -1.288 5.991 0.352 1.00 0.00
+ATOM 29 H 1 0.256 5.755 -0.501 1.00 0.00
+TER 30
+CONECT 1 2
+CONECT 2 1
+CONECT 2 3
+CONECT 3 2
+CONECT 3 4
+CONECT 4 3
+CONECT 4 5
+CONECT 5 4
+CONECT 5 6
+CONECT 6 5
+CONECT 6 1
+CONECT 1 6
+CONECT 1 7
+CONECT 7 1
+CONECT 2 8
+CONECT 8 2
+CONECT 3 9
+CONECT 9 3
+CONECT 4 10
+CONECT 10 4
+CONECT 5 11
+CONECT 11 5
+CONECT 6 12
+CONECT 12 6
+CONECT 8 13
+CONECT 13 8
+CONECT 13 14
+CONECT 14 13
+CONECT 8 15
+CONECT 15 8
+CONECT 8 19
+CONECT 19 8
+CONECT 13 20
+CONECT 20 13
+CONECT 13 21
+CONECT 21 13
+CONECT 14 22
+CONECT 22 14
+CONECT 14 23
+CONECT 23 14
+CONECT 23 24
+CONECT 24 23
+CONECT 23 25
+CONECT 25 23
+CONECT 23 26
+CONECT 26 23
+CONECT 21 27
+CONECT 27 21
+CONECT 21 28
+CONECT 28 21
+CONECT 21 29
+CONECT 29 21
+MASTER 0 0 0 0 0 0 0 6 26 1 52 0
+END
diff --git a/hacks/images/molecules/morphine.pdb b/hacks/images/molecules/morphine.pdb
new file mode 100644
index 0000000..57ae154
--- /dev/null
+++ b/hacks/images/molecules/morphine.pdb
@@ -0,0 +1,87 @@
+HEADER Morphine, an opiate
+COMPND al3058
+AUTHOR Created by Dave Woodcock at Okanagan University College
+AUTHOR email:woodcock@okanagan.bc.ca
+AUTHOR Date revised: Wed Aug 30 12:33:12 2000 GENERATED BY BABEL 1.6
+HETATM 1 C 1 0.000 0.000 0.000 1.00 0.00
+HETATM 2 C 1 1.400 0.000 0.000 1.00 0.00
+HETATM 3 C 1 2.106 1.211 0.000 1.00 0.00
+HETATM 4 C 1 1.444 2.446 -0.039 1.00 0.00
+HETATM 5 C 1 0.047 2.458 0.013 1.00 0.00
+HETATM 6 C 1 -0.629 1.243 0.051 1.00 0.00
+HETATM 7 C 1 -2.081 1.500 -0.228 1.00 0.00
+HETATM 8 C 1 -2.727 0.342 -0.999 1.00 0.00
+HETATM 9 C 1 -2.363 -0.953 -0.239 1.00 0.00
+HETATM 10 C 1 -0.832 -1.231 -0.285 1.00 0.00
+HETATM 11 C 1 -1.885 2.839 -0.975 1.00 0.00
+HETATM 12 C 1 -2.772 1.631 1.137 1.00 0.00
+HETATM 13 C 1 -2.525 0.318 1.912 1.00 0.00
+HETATM 14 N 1 -2.930 -0.855 1.119 1.00 0.00
+HETATM 15 C 1 -2.790 -2.096 1.899 1.00 0.00
+HETATM 16 H 1 -3.810 0.470 -0.978 1.00 0.00
+HETATM 17 C 1 -2.300 0.287 -2.447 1.00 0.00
+HETATM 18 C 1 -2.022 1.415 -3.116 1.00 0.00
+HETATM 19 C 1 -1.406 2.612 -2.428 1.00 0.00
+HETATM 20 H 1 -2.795 3.439 -0.953 1.00 0.00
+HETATM 21 O 1 -0.796 3.478 -0.328 1.00 0.00
+HETATM 22 H 1 -1.616 3.510 -3.009 1.00 0.00
+HETATM 23 O 1 0.011 2.407 -2.414 1.00 0.00
+HETATM 24 O 1 2.143 3.606 -0.184 1.00 0.00
+HETATM 25 H 1 1.942 -0.943 -0.066 1.00 0.00
+HETATM 26 H 1 3.195 1.192 -0.045 1.00 0.00
+HETATM 27 H 1 -2.861 -1.784 -0.739 1.00 0.00
+HETATM 28 H 1 -0.580 -1.568 -1.291 1.00 0.00
+HETATM 29 H 1 -0.568 -2.021 0.414 1.00 0.00
+HETATM 30 H 1 -3.842 1.788 0.997 1.00 0.00
+HETATM 31 H 1 -2.350 2.469 1.692 1.00 0.00
+HETATM 32 H 1 -3.107 0.346 2.833 1.00 0.00
+HETATM 33 H 1 -1.471 0.235 2.174 1.00 0.00
+HETATM 34 H 1 -3.461 -2.058 2.757 1.00 0.00
+HETATM 35 H 1 -1.767 -2.205 2.257 1.00 0.00
+HETATM 36 H 1 -3.054 -2.955 1.282 1.00 0.00
+HETATM 37 H 1 -2.529 -0.612 -3.019 1.00 0.00
+HETATM 38 H 1 -1.956 1.362 -4.203 1.00 0.00
+HETATM 39 H 1 0.343 2.320 -3.313 1.00 0.00
+HETATM 40 H 1 2.435 3.917 0.680 1.00 0.00
+CONECT 1 2 2 6 10
+CONECT 2 1 1 3 25
+CONECT 3 2 4 4 26
+CONECT 4 3 3 5 24
+CONECT 5 4 6 6 21
+CONECT 6 1 5 5 7
+CONECT 7 6 8 11 12
+CONECT 8 7 9 16 17
+CONECT 9 8 10 14 27
+CONECT 10 1 9 28 29
+CONECT 11 7 19 20 21
+CONECT 12 7 13 30 31
+CONECT 13 12 14 32 33
+CONECT 14 9 13 15
+CONECT 15 14 34 35 36
+CONECT 16 8
+CONECT 17 8 18 18 37
+CONECT 18 17 17 19 38
+CONECT 19 11 18 22 23
+CONECT 20 11
+CONECT 21 5 11
+CONECT 22 19
+CONECT 23 19 39
+CONECT 24 4 40
+CONECT 25 2
+CONECT 26 3
+CONECT 27 9
+CONECT 28 10
+CONECT 29 10
+CONECT 30 12
+CONECT 31 12
+CONECT 32 13
+CONECT 33 13
+CONECT 34 15
+CONECT 35 15
+CONECT 36 15
+CONECT 37 17
+CONECT 38 18
+CONECT 39 23
+CONECT 40 24
+MASTER 0 0 0 0 0 0 0 0 40 0 40 0
+END
diff --git a/hacks/images/molecules/nicotine.pdb b/hacks/images/molecules/nicotine.pdb
new file mode 100644
index 0000000..d429efe
--- /dev/null
+++ b/hacks/images/molecules/nicotine.pdb
@@ -0,0 +1,59 @@
+HEADER Nicotine, an insecticide
+COMPND nicotine
+AUTHOR Created by Dave Woodcock at Okanagan University College
+AUTHOR email:woodcock@okanagan.bc.ca
+AUTHOR Date revised: Fri Sep 1 09:41:05 2000 GENERATED BY BABEL 1.6
+HETATM 1 C 1 0.000 0.000 0.000 1.00 0.00
+HETATM 2 C 1 1.400 0.000 0.000 1.00 0.00
+HETATM 3 C 1 2.082 1.223 0.000 1.00 0.00
+HETATM 4 C 1 1.361 2.420 -0.060 1.00 0.00
+HETATM 5 C 1 -0.037 2.388 -0.103 1.00 0.00
+HETATM 6 N 1 -0.698 1.182 -0.064 1.00 0.00
+HETATM 7 C 1 2.135 -1.320 0.103 1.00 0.00
+HETATM 8 H 1 -0.543 -0.944 0.043 1.00 0.00
+HETATM 9 H 1 3.168 1.256 0.062 1.00 0.00
+HETATM 10 H 1 1.886 3.375 -0.067 1.00 0.00
+HETATM 11 H 1 -0.604 3.318 -0.148 1.00 0.00
+HETATM 12 H 1 2.087 -1.661 1.139 1.00 0.00
+HETATM 13 N 1 1.561 -2.374 -0.749 1.00 0.00
+HETATM 14 C 1 3.616 -1.255 -0.318 1.00 0.00
+HETATM 15 C 1 3.943 -2.708 -0.713 1.00 0.00
+HETATM 16 C 1 2.580 -3.434 -0.690 1.00 0.00
+HETATM 17 C 1 1.359 -1.946 -2.144 1.00 0.00
+HETATM 18 H 1 4.247 -0.910 0.502 1.00 0.00
+HETATM 19 H 1 3.736 -0.608 -1.187 1.00 0.00
+HETATM 20 H 1 4.627 -3.166 0.001 1.00 0.00
+HETATM 21 H 1 4.371 -2.732 -1.715 1.00 0.00
+HETATM 22 H 1 2.475 -3.968 0.255 1.00 0.00
+HETATM 23 H 1 2.490 -4.135 -1.520 1.00 0.00
+HETATM 24 H 1 2.299 -1.632 -2.594 1.00 0.00
+HETATM 25 H 1 0.648 -1.122 -2.190 1.00 0.00
+HETATM 26 H 1 0.956 -2.781 -2.717 1.00 0.00
+CONECT 1 2 2 6 8
+CONECT 2 1 1 3 7
+CONECT 3 2 4 4 9
+CONECT 4 3 3 5 10
+CONECT 5 4 6 6 11
+CONECT 6 1 5 5
+CONECT 7 2 12 13 14
+CONECT 8 1
+CONECT 9 3
+CONECT 10 4
+CONECT 11 5
+CONECT 12 7
+CONECT 13 7 16 17
+CONECT 14 7 15 18 19
+CONECT 15 14 16 20 21
+CONECT 16 13 15 22 23
+CONECT 17 13 24 25 26
+CONECT 18 14
+CONECT 19 14
+CONECT 20 15
+CONECT 21 15
+CONECT 22 16
+CONECT 23 16
+CONECT 24 17
+CONECT 25 17
+CONECT 26 17
+MASTER 0 0 0 0 0 0 0 0 26 0 26 0
+END
diff --git a/hacks/images/molecules/novocaine.pdb b/hacks/images/molecules/novocaine.pdb
new file mode 100644
index 0000000..0051f05
--- /dev/null
+++ b/hacks/images/molecules/novocaine.pdb
@@ -0,0 +1,81 @@
+HEADER Procaine: Novocaine, a local anesthetic
+COMPND al3080
+AUTHOR Created by Dave Woodcock at Okanagan University College
+AUTHOR email:woodcock@okanagan.bc.ca
+AUTHOR Date revised: Wed Aug 30 12:33:12 2000 GENERATED BY BABEL 1.6
+HETATM 1 C 1 0.000 0.000 0.000 1.00 0.00
+HETATM 2 C 1 1.399 0.000 0.000 1.00 0.00
+HETATM 3 C 1 2.099 1.211 0.000 1.00 0.00
+HETATM 4 C 1 1.398 2.422 0.001 1.00 0.00
+HETATM 5 C 1 -0.001 2.421 0.002 1.00 0.00
+HETATM 6 C 1 -0.702 1.211 0.002 1.00 0.00
+HETATM 7 N 1 -2.104 1.210 0.003 1.00 0.00
+HETATM 8 C 1 3.511 1.212 0.000 1.00 0.00
+HETATM 9 O 1 4.107 2.255 -0.002 1.00 0.00
+HETATM 10 O 1 4.172 0.056 0.011 1.00 0.00
+HETATM 11 C 1 5.562 0.269 0.112 1.00 0.00
+HETATM 12 C 1 6.275 -1.096 0.162 1.00 0.00
+HETATM 13 H 1 -0.542 -0.946 0.000 1.00 0.00
+HETATM 14 H 1 1.942 -0.945 -0.001 1.00 0.00
+HETATM 15 H 1 1.940 3.368 0.001 1.00 0.00
+HETATM 16 H 1 -0.544 3.367 0.004 1.00 0.00
+HETATM 17 H 1 -2.613 0.334 0.002 1.00 0.00
+HETATM 18 H 1 5.776 0.831 1.021 1.00 0.00
+HETATM 19 H 1 5.912 0.827 -0.758 1.00 0.00
+HETATM 20 H 1 5.949 -1.682 -0.697 1.00 0.00
+HETATM 21 H 1 5.984 -1.614 1.076 1.00 0.00
+HETATM 22 N 1 7.741 -0.935 0.107 1.00 0.00
+HETATM 23 C 1 8.433 -2.206 -0.184 1.00 0.00
+HETATM 24 C 1 8.171 -3.279 0.896 1.00 0.00
+HETATM 25 C 1 8.301 -0.239 1.281 1.00 0.00
+HETATM 26 C 1 8.683 1.204 0.891 1.00 0.00
+HETATM 27 H 1 -2.613 2.087 0.004 1.00 0.00
+HETATM 28 H 1 9.505 -2.021 -0.249 1.00 0.00
+HETATM 29 H 1 8.091 -2.587 -1.146 1.00 0.00
+HETATM 30 H 1 7.118 -3.559 0.896 1.00 0.00
+HETATM 31 H 1 8.444 -2.898 1.879 1.00 0.00
+HETATM 32 H 1 8.770 -4.162 0.675 1.00 0.00
+HETATM 33 H 1 9.205 -0.743 1.624 1.00 0.00
+HETATM 34 H 1 7.579 -0.223 2.098 1.00 0.00
+HETATM 35 H 1 7.804 1.747 0.546 1.00 0.00
+HETATM 36 H 1 9.424 1.176 0.092 1.00 0.00
+HETATM 37 H 1 9.105 1.714 1.757 1.00 0.00
+CONECT 1 2 2 6 13
+CONECT 2 1 1 3 14
+CONECT 3 2 4 4 8
+CONECT 4 3 3 5 15
+CONECT 5 4 6 6 16
+CONECT 6 1 5 5 7
+CONECT 7 6 17 27
+CONECT 8 3 9 9 10
+CONECT 9 8 8
+CONECT 10 8 11
+CONECT 11 10 12 18 19
+CONECT 12 11 20 21 22
+CONECT 13 1
+CONECT 14 2
+CONECT 15 4
+CONECT 16 5
+CONECT 17 7
+CONECT 18 11
+CONECT 19 11
+CONECT 20 12
+CONECT 21 12
+CONECT 22 12 23 25
+CONECT 23 22 24 28 29
+CONECT 24 23 30 31 32
+CONECT 25 22 26 33 34
+CONECT 26 25 35 36 37
+CONECT 27 7
+CONECT 28 23
+CONECT 29 23
+CONECT 30 24
+CONECT 31 24
+CONECT 32 24
+CONECT 33 25
+CONECT 34 25
+CONECT 35 26
+CONECT 36 26
+CONECT 37 26
+MASTER 0 0 0 0 0 0 0 0 37 0 37 0
+END
diff --git a/hacks/images/molecules/olestra.pdb b/hacks/images/molecules/olestra.pdb
new file mode 100644
index 0000000..b155d2f
--- /dev/null
+++ b/hacks/images/molecules/olestra.pdb
@@ -0,0 +1,913 @@
+HEADER Sucrose octaoleate: Olestra-like non-hydrolyzing fat
+COMPND jb15oles
+AUTHOR Created by Dave Woodcock at Okanagan University College
+AUTHOR email:woodcock@okanagan.bc.ca
+AUTHOR Date revised: Wed Sep 20 16:26:54 2000 GENERATED BY BABEL 1.6
+HETATM 1 C 1 0.000 0.000 0.000 1.00 0.00
+HETATM 2 C 1 1.543 0.000 0.000 1.00 0.00
+HETATM 3 C 1 2.023 1.465 0.000 1.00 0.00
+HETATM 4 C 1 1.448 2.115 1.276 1.00 0.00
+HETATM 5 C 1 -0.094 1.986 1.258 1.00 0.00
+HETATM 6 O 1 -0.446 0.620 1.189 1.00 0.00
+HETATM 7 O 1 -0.682 2.630 0.148 1.00 0.00
+HETATM 8 C 1 -0.713 4.011 -0.142 1.00 0.00
+HETATM 9 C 1 -1.600 4.135 -1.401 1.00 0.00
+HETATM 10 C 1 -1.324 4.924 0.946 1.00 0.00
+HETATM 11 O 1 0.576 4.533 -0.389 1.00 0.00
+HETATM 12 C 1 0.436 5.938 -0.395 1.00 0.00
+HETATM 13 C 1 -0.617 6.269 0.681 1.00 0.00
+HETATM 14 C 1 1.756 6.671 -0.084 1.00 0.00
+HETATM 15 O 1 2.227 6.278 1.183 1.00 0.00
+HETATM 16 O 1 -1.499 7.264 0.209 1.00 0.00
+HETATM 17 O 1 -1.029 4.475 2.250 1.00 0.00
+HETATM 18 O 1 -1.000 3.465 -2.486 1.00 0.00
+HETATM 19 C 1 -0.514 -1.457 -0.089 1.00 0.00
+HETATM 20 O 1 -1.922 -1.490 0.008 1.00 0.00
+HETATM 21 O 1 2.044 -0.707 -1.115 1.00 0.00
+HETATM 22 O 1 3.434 1.488 -0.024 1.00 0.00
+HETATM 23 O 1 1.870 3.459 1.361 1.00 0.00
+HETATM 24 C 1 -2.482 -2.432 -0.753 1.00 0.00
+HETATM 25 O 1 -3.315 -2.099 -1.556 1.00 0.00
+HETATM 26 C 1 -2.336 -3.895 -0.434 1.00 0.00
+HETATM 27 C 1 -3.583 -4.668 -0.927 1.00 0.00
+HETATM 28 C 1 -3.416 -6.194 -0.736 1.00 0.00
+HETATM 29 C 1 -4.686 -6.939 -1.212 1.00 0.00
+HETATM 30 C 1 -4.492 -8.472 -1.146 1.00 0.00
+HETATM 31 C 1 -5.779 -9.194 -1.608 1.00 0.00
+HETATM 32 C 1 -5.580 -10.727 -1.651 1.00 0.00
+HETATM 33 C 1 -6.868 -11.389 -2.094 1.00 0.00
+HETATM 34 C 1 -6.933 -12.683 -2.447 1.00 0.00
+HETATM 35 C 1 -5.725 -13.593 -2.433 1.00 0.00
+HETATM 36 C 1 -6.164 -15.030 -2.794 1.00 0.00
+HETATM 37 C 1 -4.957 -15.993 -2.791 1.00 0.00
+HETATM 38 C 1 -5.423 -17.419 -3.153 1.00 0.00
+HETATM 39 C 1 -4.225 -18.393 -3.146 1.00 0.00
+HETATM 40 C 1 -4.700 -19.818 -3.505 1.00 0.00
+HETATM 41 C 1 3.344 -0.983 -0.999 1.00 0.00
+HETATM 42 O 1 4.098 -0.665 -1.882 1.00 0.00
+HETATM 43 C 1 3.844 -1.849 0.124 1.00 0.00
+HETATM 44 C 1 5.081 -2.680 -0.284 1.00 0.00
+HETATM 45 C 1 5.532 -3.506 0.946 1.00 0.00
+HETATM 46 C 1 6.768 -4.378 0.668 1.00 0.00
+HETATM 47 C 1 7.108 -5.157 1.969 1.00 0.00
+HETATM 48 C 1 8.283 -6.109 1.808 1.00 0.00
+HETATM 49 C 1 8.489 -6.845 3.177 1.00 0.00
+HETATM 50 C 1 9.603 -7.867 3.101 1.00 0.00
+HETATM 51 C 1 9.838 -8.686 4.139 1.00 0.00
+HETATM 52 C 1 8.989 -8.622 5.392 1.00 0.00
+HETATM 53 C 1 9.509 -9.601 6.463 1.00 0.00
+HETATM 54 C 1 8.612 -9.509 7.718 1.00 0.00
+HETATM 55 C 1 9.090 -10.491 8.808 1.00 0.00
+HETATM 56 C 1 8.155 -10.395 10.033 1.00 0.00
+HETATM 57 C 1 8.599 -11.385 11.130 1.00 0.00
+HETATM 58 C 1 3.954 2.643 0.391 1.00 0.00
+HETATM 59 O 1 4.364 2.722 1.520 1.00 0.00
+HETATM 60 C 1 3.833 3.903 -0.422 1.00 0.00
+HETATM 61 C 1 5.113 4.138 -1.254 1.00 0.00
+HETATM 62 C 1 5.001 5.470 -2.030 1.00 0.00
+HETATM 63 C 1 6.274 5.721 -2.868 1.00 0.00
+HETATM 64 C 1 6.142 7.042 -3.658 1.00 0.00
+HETATM 65 C 1 7.424 7.302 -4.480 1.00 0.00
+HETATM 66 C 1 7.292 8.604 -5.302 1.00 0.00
+HETATM 67 C 1 8.567 8.842 -6.080 1.00 0.00
+HETATM 68 C 1 8.673 9.819 -6.994 1.00 0.00
+HETATM 69 C 1 7.518 10.739 -7.321 1.00 0.00
+HETATM 70 C 1 7.962 11.764 -8.388 1.00 0.00
+HETATM 71 C 1 6.793 12.704 -8.749 1.00 0.00
+HETATM 72 C 1 7.240 13.712 -9.829 1.00 0.00
+HETATM 73 C 1 6.069 14.649 -10.192 1.00 0.00
+HETATM 74 C 1 6.510 15.654 -11.277 1.00 0.00
+HETATM 75 C 1 1.563 4.034 2.524 1.00 0.00
+HETATM 76 O 1 0.994 5.094 2.507 1.00 0.00
+HETATM 77 C 1 2.204 3.624 3.820 1.00 0.00
+HETATM 78 C 1 1.081 3.461 4.864 1.00 0.00
+HETATM 79 C 1 1.646 2.985 6.219 1.00 0.00
+HETATM 80 C 1 0.495 2.893 7.242 1.00 0.00
+HETATM 81 C 1 0.991 2.293 8.574 1.00 0.00
+HETATM 82 C 1 -0.180 2.239 9.577 1.00 0.00
+HETATM 83 C 1 0.252 1.529 10.878 1.00 0.00
+HETATM 84 C 1 -0.909 1.516 11.848 1.00 0.00
+HETATM 85 C 1 -1.007 0.609 12.832 1.00 0.00
+HETATM 86 C 1 0.023 -0.485 13.013 1.00 0.00
+HETATM 87 C 1 -0.255 -1.246 14.326 1.00 0.00
+HETATM 88 C 1 0.758 -2.396 14.494 1.00 0.00
+HETATM 89 C 1 0.465 -3.168 15.798 1.00 0.00
+HETATM 90 C 1 1.443 -4.352 15.937 1.00 0.00
+HETATM 91 C 1 1.138 -5.136 17.229 1.00 0.00
+HETATM 92 C 1 -1.640 3.717 -3.628 1.00 0.00
+HETATM 93 O 1 -1.012 4.078 -4.590 1.00 0.00
+HETATM 94 C 1 -3.121 3.488 -3.752 1.00 0.00
+HETATM 95 C 1 -3.553 3.549 -5.232 1.00 0.00
+HETATM 96 C 1 -5.083 3.368 -5.331 1.00 0.00
+HETATM 97 C 1 -5.545 3.449 -6.801 1.00 0.00
+HETATM 98 C 1 -7.080 3.295 -6.870 1.00 0.00
+HETATM 99 C 1 -7.563 3.372 -8.334 1.00 0.00
+HETATM 100 C 1 -9.099 3.230 -8.385 1.00 0.00
+HETATM 101 C 1 -9.579 3.302 -9.818 1.00 0.00
+HETATM 102 C 1 -10.886 3.239 -10.119 1.00 0.00
+HETATM 103 C 1 -11.934 3.095 -9.037 1.00 0.00
+HETATM 104 C 1 -13.340 3.036 -9.669 1.00 0.00
+HETATM 105 C 1 -14.403 2.883 -8.561 1.00 0.00
+HETATM 106 C 1 -15.815 2.830 -9.181 1.00 0.00
+HETATM 107 C 1 -16.867 2.668 -8.064 1.00 0.00
+HETATM 108 C 1 -18.283 2.619 -8.671 1.00 0.00
+HETATM 109 C 1 -2.001 7.975 1.218 1.00 0.00
+HETATM 110 O 1 -3.001 7.595 1.768 1.00 0.00
+HETATM 111 C 1 -1.156 9.034 1.872 1.00 0.00
+HETATM 112 C 1 -1.534 10.432 1.344 1.00 0.00
+HETATM 113 C 1 -0.625 11.493 2.001 1.00 0.00
+HETATM 114 C 1 -0.976 12.902 1.479 1.00 0.00
+HETATM 115 C 1 -0.062 13.955 2.143 1.00 0.00
+HETATM 116 C 1 -0.432 15.365 1.636 1.00 0.00
+HETATM 117 C 1 0.472 16.432 2.289 1.00 0.00
+HETATM 118 C 1 0.070 17.801 1.786 1.00 0.00
+HETATM 119 C 1 0.739 18.910 2.133 1.00 0.00
+HETATM 120 C 1 1.947 18.864 3.043 1.00 0.00
+HETATM 121 C 1 2.466 20.301 3.261 1.00 0.00
+HETATM 122 C 1 3.707 20.302 4.178 1.00 0.00
+HETATM 123 C 1 4.204 21.750 4.364 1.00 0.00
+HETATM 124 C 1 5.448 21.780 5.275 1.00 0.00
+HETATM 125 C 1 5.933 23.236 5.440 1.00 0.00
+HETATM 126 C 1 -1.676 5.203 3.160 1.00 0.00
+HETATM 127 O 1 -1.395 6.362 3.326 1.00 0.00
+HETATM 128 C 1 -2.722 4.564 4.031 1.00 0.00
+HETATM 129 C 1 -3.529 5.657 4.765 1.00 0.00
+HETATM 130 C 1 -4.616 5.007 5.648 1.00 0.00
+HETATM 131 C 1 -5.417 6.088 6.405 1.00 0.00
+HETATM 132 C 1 -6.505 5.421 7.274 1.00 0.00
+HETATM 133 C 1 -7.276 6.485 8.085 1.00 0.00
+HETATM 134 C 1 -8.342 5.803 8.967 1.00 0.00
+HETATM 135 C 1 -8.999 6.835 9.859 1.00 0.00
+HETATM 136 C 1 -10.265 7.250 9.698 1.00 0.00
+HETATM 137 C 1 -11.161 6.729 8.595 1.00 0.00
+HETATM 138 C 1 -12.519 7.460 8.650 1.00 0.00
+HETATM 139 C 1 -13.450 6.941 7.534 1.00 0.00
+HETATM 140 C 1 -14.810 7.665 7.610 1.00 0.00
+HETATM 141 C 1 -15.745 7.150 6.496 1.00 0.00
+HETATM 142 C 1 -17.110 7.866 6.583 1.00 0.00
+HETATM 143 C 1 2.842 7.281 1.802 1.00 0.00
+HETATM 144 O 1 2.205 8.253 2.118 1.00 0.00
+HETATM 145 C 1 4.220 7.092 2.370 1.00 0.00
+HETATM 146 C 1 4.473 8.156 3.459 1.00 0.00
+HETATM 147 C 1 5.893 8.017 4.051 1.00 0.00
+HETATM 148 C 1 6.113 9.105 5.125 1.00 0.00
+HETATM 149 C 1 7.536 9.013 5.717 1.00 0.00
+HETATM 150 C 1 7.731 10.123 6.772 1.00 0.00
+HETATM 151 C 1 9.153 10.065 7.368 1.00 0.00
+HETATM 152 C 1 9.319 11.173 8.385 1.00 0.00
+HETATM 153 C 1 10.461 11.337 9.067 1.00 0.00
+HETATM 154 C 1 11.643 10.413 8.868 1.00 0.00
+HETATM 155 C 1 12.819 10.884 9.749 1.00 0.00
+HETATM 156 C 1 14.028 9.942 9.572 1.00 0.00
+HETATM 157 C 1 15.194 10.418 10.464 1.00 0.00
+HETATM 158 C 1 16.397 9.465 10.312 1.00 0.00
+HETATM 159 C 1 17.555 9.936 11.217 1.00 0.00
+HETATM 160 C 1 18.753 8.973 11.081 1.00 0.00
+HETATM 161 C 1 19.907 9.437 11.992 1.00 0.00
+HETATM 162 C 1 7.637 -11.294 12.332 1.00 0.00
+HETATM 163 C 1 8.066 -12.287 13.432 1.00 0.00
+HETATM 164 C 1 -3.503 -20.792 -3.494 1.00 0.00
+HETATM 165 C 1 -3.976 -22.215 -3.853 1.00 0.00
+HETATM 166 C 1 2.094 -6.341 17.349 1.00 0.00
+HETATM 167 C 1 1.786 -7.131 18.637 1.00 0.00
+HETATM 168 C 1 5.336 16.589 -11.634 1.00 0.00
+HETATM 169 C 1 5.771 17.593 -12.721 1.00 0.00
+HETATM 170 C 1 7.177 23.279 6.350 1.00 0.00
+HETATM 171 C 1 7.661 24.734 6.509 1.00 0.00
+HETATM 172 C 1 -19.327 2.450 -7.548 1.00 0.00
+HETATM 173 C 1 -20.747 2.406 -8.149 1.00 0.00
+HETATM 174 C 1 -18.044 7.350 5.470 1.00 0.00
+HETATM 175 C 1 -19.412 8.057 5.560 1.00 0.00
+HETATM 176 H 1 -0.368 0.553 -0.864 1.00 0.00
+HETATM 177 H 1 1.874 -0.482 0.920 1.00 0.00
+HETATM 178 H 1 1.632 1.978 -0.879 1.00 0.00
+HETATM 179 H 1 1.826 1.557 2.131 1.00 0.00
+HETATM 180 H 1 -0.503 2.395 2.180 1.00 0.00
+HETATM 181 H 1 -1.766 5.183 -1.654 1.00 0.00
+HETATM 182 H 1 -2.562 3.672 -1.182 1.00 0.00
+HETATM 183 H 1 -2.404 5.015 0.817 1.00 0.00
+HETATM 184 H 1 0.079 6.263 -1.372 1.00 0.00
+HETATM 185 H 1 -0.107 6.607 1.580 1.00 0.00
+HETATM 186 H 1 1.568 7.745 -0.111 1.00 0.00
+HETATM 187 H 1 2.495 6.425 -0.844 1.00 0.00
+HETATM 188 H 1 -0.089 -2.043 0.726 1.00 0.00
+HETATM 189 H 1 -0.191 -1.883 -1.040 1.00 0.00
+HETATM 190 H 1 -2.226 -4.025 0.643 1.00 0.00
+HETATM 191 H 1 -1.448 -4.280 -0.936 1.00 0.00
+HETATM 192 H 1 -3.732 -4.461 -1.987 1.00 0.00
+HETATM 193 H 1 -4.457 -4.327 -0.372 1.00 0.00
+HETATM 194 H 1 -3.242 -6.413 0.317 1.00 0.00
+HETATM 195 H 1 -2.560 -6.535 -1.319 1.00 0.00
+HETATM 196 H 1 -4.902 -6.654 -2.241 1.00 0.00
+HETATM 197 H 1 -5.527 -6.653 -0.579 1.00 0.00
+HETATM 198 H 1 -4.259 -8.767 -0.123 1.00 0.00
+HETATM 199 H 1 -3.666 -8.756 -1.799 1.00 0.00
+HETATM 200 H 1 -6.047 -8.844 -2.605 1.00 0.00
+HETATM 201 H 1 -6.588 -8.955 -0.918 1.00 0.00
+HETATM 202 H 1 -5.310 -11.089 -0.659 1.00 0.00
+HETATM 203 H 1 -4.783 -10.967 -2.355 1.00 0.00
+HETATM 204 H 1 -7.781 -10.795 -2.125 1.00 0.00
+HETATM 205 H 1 -7.896 -13.091 -2.754 1.00 0.00
+HETATM 206 H 1 -5.275 -13.588 -1.440 1.00 0.00
+HETATM 207 H 1 -4.997 -13.243 -3.164 1.00 0.00
+HETATM 208 H 1 -6.618 -15.028 -3.785 1.00 0.00
+HETATM 209 H 1 -6.898 -15.374 -2.065 1.00 0.00
+HETATM 210 H 1 -4.502 -16.000 -1.801 1.00 0.00
+HETATM 211 H 1 -4.222 -15.655 -3.522 1.00 0.00
+HETATM 212 H 1 -5.875 -17.411 -4.145 1.00 0.00
+HETATM 213 H 1 -6.163 -17.753 -2.425 1.00 0.00
+HETATM 214 H 1 -3.773 -18.402 -2.155 1.00 0.00
+HETATM 215 H 1 -3.486 -18.063 -3.876 1.00 0.00
+HETATM 216 H 1 -5.150 -19.810 -4.498 1.00 0.00
+HETATM 217 H 1 -5.441 -20.147 -2.777 1.00 0.00
+HETATM 218 H 1 3.046 -2.532 0.416 1.00 0.00
+HETATM 219 H 1 4.102 -1.216 0.975 1.00 0.00
+HETATM 220 H 1 5.884 -2.006 -0.580 1.00 0.00
+HETATM 221 H 1 4.829 -3.337 -1.117 1.00 0.00
+HETATM 222 H 1 4.717 -4.156 1.264 1.00 0.00
+HETATM 223 H 1 5.773 -2.820 1.759 1.00 0.00
+HETATM 224 H 1 7.605 -3.757 0.345 1.00 0.00
+HETATM 225 H 1 6.511 -5.083 -0.123 1.00 0.00
+HETATM 226 H 1 6.244 -5.737 2.294 1.00 0.00
+HETATM 227 H 1 7.378 -4.451 2.755 1.00 0.00
+HETATM 228 H 1 9.158 -5.517 1.539 1.00 0.00
+HETATM 229 H 1 8.056 -6.812 1.007 1.00 0.00
+HETATM 230 H 1 7.572 -7.372 3.439 1.00 0.00
+HETATM 231 H 1 8.718 -6.129 3.967 1.00 0.00
+HETATM 232 H 1 10.222 -7.926 2.206 1.00 0.00
+HETATM 233 H 1 10.647 -9.413 4.074 1.00 0.00
+HETATM 234 H 1 7.960 -8.886 5.148 1.00 0.00
+HETATM 235 H 1 9.015 -7.611 5.799 1.00 0.00
+HETATM 236 H 1 10.534 -9.341 6.725 1.00 0.00
+HETATM 237 H 1 9.481 -10.616 6.068 1.00 0.00
+HETATM 238 H 1 7.586 -9.753 7.443 1.00 0.00
+HETATM 239 H 1 8.644 -8.493 8.111 1.00 0.00
+HETATM 240 H 1 10.108 -10.239 9.105 1.00 0.00
+HETATM 241 H 1 9.070 -11.507 8.415 1.00 0.00
+HETATM 242 H 1 7.136 -10.633 9.726 1.00 0.00
+HETATM 243 H 1 8.182 -9.380 10.429 1.00 0.00
+HETATM 244 H 1 9.611 -11.139 11.453 1.00 0.00
+HETATM 245 H 1 8.585 -12.399 10.730 1.00 0.00
+HETATM 246 H 1 3.697 4.738 0.262 1.00 0.00
+HETATM 247 H 1 2.973 3.837 -1.086 1.00 0.00
+HETATM 248 H 1 5.244 3.316 -1.956 1.00 0.00
+HETATM 249 H 1 5.973 4.181 -0.585 1.00 0.00
+HETATM 250 H 1 4.873 6.289 -1.322 1.00 0.00
+HETATM 251 H 1 4.136 5.428 -2.692 1.00 0.00
+HETATM 252 H 1 6.415 4.896 -3.567 1.00 0.00
+HETATM 253 H 1 7.137 5.781 -2.205 1.00 0.00
+HETATM 254 H 1 5.987 7.867 -2.962 1.00 0.00
+HETATM 255 H 1 5.288 6.976 -4.332 1.00 0.00
+HETATM 256 H 1 7.592 6.466 -5.158 1.00 0.00
+HETATM 257 H 1 8.273 7.389 -3.801 1.00 0.00
+HETATM 258 H 1 7.117 9.443 -4.629 1.00 0.00
+HETATM 259 H 1 6.453 8.510 -5.991 1.00 0.00
+HETATM 260 H 1 9.432 8.207 -5.887 1.00 0.00
+HETATM 261 H 1 9.620 9.946 -7.519 1.00 0.00
+HETATM 262 H 1 7.205 11.266 -6.419 1.00 0.00
+HETATM 263 H 1 6.685 10.153 -7.709 1.00 0.00
+HETATM 264 H 1 8.285 11.232 -9.283 1.00 0.00
+HETATM 265 H 1 8.793 12.353 -8.000 1.00 0.00
+HETATM 266 H 1 6.474 13.244 -7.858 1.00 0.00
+HETATM 267 H 1 5.958 12.114 -9.129 1.00 0.00
+HETATM 268 H 1 7.559 13.171 -10.720 1.00 0.00
+HETATM 269 H 1 8.073 14.304 -9.450 1.00 0.00
+HETATM 270 H 1 5.753 15.194 -9.302 1.00 0.00
+HETATM 271 H 1 5.234 14.057 -10.566 1.00 0.00
+HETATM 272 H 1 6.824 15.110 -12.168 1.00 0.00
+HETATM 273 H 1 7.346 16.246 -10.905 1.00 0.00
+HETATM 274 H 1 2.891 4.405 4.144 1.00 0.00
+HETATM 275 H 1 2.753 2.690 3.706 1.00 0.00
+HETATM 276 H 1 0.360 2.729 4.502 1.00 0.00
+HETATM 277 H 1 0.578 4.420 4.999 1.00 0.00
+HETATM 278 H 1 2.396 3.692 6.575 1.00 0.00
+HETATM 279 H 1 2.104 2.004 6.094 1.00 0.00
+HETATM 280 H 1 -0.293 2.257 6.838 1.00 0.00
+HETATM 281 H 1 0.092 3.890 7.420 1.00 0.00
+HETATM 282 H 1 1.792 2.910 8.980 1.00 0.00
+HETATM 283 H 1 1.366 1.285 8.397 1.00 0.00
+HETATM 284 H 1 -1.010 1.689 9.134 1.00 0.00
+HETATM 285 H 1 -0.503 3.254 9.807 1.00 0.00
+HETATM 286 H 1 1.090 2.062 11.326 1.00 0.00
+HETATM 287 H 1 0.555 0.509 10.641 1.00 0.00
+HETATM 288 H 1 -1.682 2.279 11.759 1.00 0.00
+HETATM 289 H 1 -1.860 0.654 13.508 1.00 0.00
+HETATM 290 H 1 1.020 -0.047 13.053 1.00 0.00
+HETATM 291 H 1 -0.037 -1.180 12.176 1.00 0.00
+HETATM 292 H 1 -1.264 -1.658 14.297 1.00 0.00
+HETATM 293 H 1 -0.170 -0.560 15.169 1.00 0.00
+HETATM 294 H 1 1.769 -1.990 14.531 1.00 0.00
+HETATM 295 H 1 0.675 -3.076 13.646 1.00 0.00
+HETATM 296 H 1 -0.557 -3.546 15.772 1.00 0.00
+HETATM 297 H 1 0.580 -2.498 16.650 1.00 0.00
+HETATM 298 H 1 2.466 -3.977 15.971 1.00 0.00
+HETATM 299 H 1 1.331 -5.015 15.078 1.00 0.00
+HETATM 300 H 1 0.108 -5.493 17.202 1.00 0.00
+HETATM 301 H 1 1.269 -4.481 18.090 1.00 0.00
+HETATM 302 H 1 -3.652 4.262 -3.197 1.00 0.00
+HETATM 303 H 1 -3.371 2.511 -3.339 1.00 0.00
+HETATM 304 H 1 -3.052 2.758 -5.791 1.00 0.00
+HETATM 305 H 1 -3.275 4.517 -5.650 1.00 0.00
+HETATM 306 H 1 -5.575 4.153 -4.757 1.00 0.00
+HETATM 307 H 1 -5.358 2.397 -4.919 1.00 0.00
+HETATM 308 H 1 -5.072 2.653 -7.376 1.00 0.00
+HETATM 309 H 1 -5.259 4.415 -7.219 1.00 0.00
+HETATM 310 H 1 -7.548 4.093 -6.294 1.00 0.00
+HETATM 311 H 1 -7.365 2.332 -6.447 1.00 0.00
+HETATM 312 H 1 -7.105 2.569 -8.910 1.00 0.00
+HETATM 313 H 1 -7.275 4.333 -8.761 1.00 0.00
+HETATM 314 H 1 -9.553 4.035 -7.808 1.00 0.00
+HETATM 315 H 1 -9.385 2.270 -7.955 1.00 0.00
+HETATM 316 H 1 -8.852 3.405 -10.623 1.00 0.00
+HETATM 317 H 1 -11.195 3.293 -11.162 1.00 0.00
+HETATM 318 H 1 -11.879 3.949 -8.362 1.00 0.00
+HETATM 319 H 1 -11.753 2.177 -8.477 1.00 0.00
+HETATM 320 H 1 -13.398 2.184 -10.347 1.00 0.00
+HETATM 321 H 1 -13.526 3.954 -10.227 1.00 0.00
+HETATM 322 H 1 -14.340 3.732 -7.880 1.00 0.00
+HETATM 323 H 1 -14.217 1.964 -8.007 1.00 0.00
+HETATM 324 H 1 -15.880 1.984 -9.865 1.00 0.00
+HETATM 325 H 1 -16.006 3.752 -9.729 1.00 0.00
+HETATM 326 H 1 -16.797 3.511 -7.377 1.00 0.00
+HETATM 327 H 1 -16.675 1.743 -7.519 1.00 0.00
+HETATM 328 H 1 -18.353 1.777 -9.361 1.00 0.00
+HETATM 329 H 1 -18.478 3.545 -9.212 1.00 0.00
+HETATM 330 H 1 -0.105 8.848 1.652 1.00 0.00
+HETATM 331 H 1 -1.308 8.997 2.950 1.00 0.00
+HETATM 332 H 1 -2.576 10.642 1.584 1.00 0.00
+HETATM 333 H 1 -1.400 10.458 0.262 1.00 0.00
+HETATM 334 H 1 0.416 11.272 1.765 1.00 0.00
+HETATM 335 H 1 -0.761 11.465 3.082 1.00 0.00
+HETATM 336 H 1 -2.016 13.126 1.716 1.00 0.00
+HETATM 337 H 1 -0.839 12.933 0.398 1.00 0.00
+HETATM 338 H 1 0.978 13.741 1.894 1.00 0.00
+HETATM 339 H 1 -0.189 13.915 3.224 1.00 0.00
+HETATM 340 H 1 -1.473 15.574 1.885 1.00 0.00
+HETATM 341 H 1 -0.309 15.403 0.553 1.00 0.00
+HETATM 342 H 1 1.512 16.236 2.027 1.00 0.00
+HETATM 343 H 1 0.356 16.395 3.372 1.00 0.00
+HETATM 344 H 1 -0.793 17.892 1.125 1.00 0.00
+HETATM 345 H 1 0.403 19.871 1.743 1.00 0.00
+HETATM 346 H 1 2.729 18.261 2.583 1.00 0.00
+HETATM 347 H 1 1.666 18.429 4.003 1.00 0.00
+HETATM 348 H 1 1.680 20.901 3.718 1.00 0.00
+HETATM 349 H 1 2.733 20.734 2.297 1.00 0.00
+HETATM 350 H 1 4.496 19.701 3.725 1.00 0.00
+HETATM 351 H 1 3.443 19.879 5.148 1.00 0.00
+HETATM 352 H 1 3.412 22.349 4.815 1.00 0.00
+HETATM 353 H 1 4.461 22.170 3.391 1.00 0.00
+HETATM 354 H 1 6.241 21.182 4.827 1.00 0.00
+HETATM 355 H 1 5.192 21.369 6.251 1.00 0.00
+HETATM 356 H 1 5.138 23.834 5.886 1.00 0.00
+HETATM 357 H 1 6.186 23.646 4.463 1.00 0.00
+HETATM 358 H 1 -2.234 3.917 4.760 1.00 0.00
+HETATM 359 H 1 -3.391 3.970 3.410 1.00 0.00
+HETATM 360 H 1 -3.999 6.312 4.032 1.00 0.00
+HETATM 361 H 1 -2.855 6.243 5.391 1.00 0.00
+HETATM 362 H 1 -4.143 4.340 6.369 1.00 0.00
+HETATM 363 H 1 -5.294 4.431 5.018 1.00 0.00
+HETATM 364 H 1 -5.887 6.762 5.689 1.00 0.00
+HETATM 365 H 1 -4.741 6.657 7.044 1.00 0.00
+HETATM 366 H 1 -6.034 4.719 7.961 1.00 0.00
+HETATM 367 H 1 -7.201 4.881 6.631 1.00 0.00
+HETATM 368 H 1 -7.762 7.185 7.405 1.00 0.00
+HETATM 369 H 1 -6.577 7.027 8.721 1.00 0.00
+HETATM 370 H 1 -7.858 5.057 9.599 1.00 0.00
+HETATM 371 H 1 -9.075 5.305 8.334 1.00 0.00
+HETATM 372 H 1 -8.416 7.259 10.676 1.00 0.00
+HETATM 373 H 1 -10.661 7.994 10.389 1.00 0.00
+HETATM 374 H 1 -11.324 5.660 8.731 1.00 0.00
+HETATM 375 H 1 -10.692 6.909 7.628 1.00 0.00
+HETATM 376 H 1 -12.360 8.530 8.520 1.00 0.00
+HETATM 377 H 1 -12.985 7.281 9.620 1.00 0.00
+HETATM 378 H 1 -13.603 5.869 7.659 1.00 0.00
+HETATM 379 H 1 -12.992 7.129 6.563 1.00 0.00
+HETATM 380 H 1 -14.657 8.738 7.488 1.00 0.00
+HETATM 381 H 1 -15.267 7.476 8.582 1.00 0.00
+HETATM 382 H 1 -15.891 6.077 6.614 1.00 0.00
+HETATM 383 H 1 -15.293 7.348 5.524 1.00 0.00
+HETATM 384 H 1 -16.964 8.939 6.466 1.00 0.00
+HETATM 385 H 1 -17.561 7.667 7.556 1.00 0.00
+HETATM 386 H 1 4.947 7.200 1.566 1.00 0.00
+HETATM 387 H 1 4.294 6.092 2.798 1.00 0.00
+HETATM 388 H 1 3.737 8.034 4.255 1.00 0.00
+HETATM 389 H 1 4.363 9.148 3.021 1.00 0.00
+HETATM 390 H 1 6.629 8.137 3.256 1.00 0.00
+HETATM 391 H 1 6.005 7.031 4.501 1.00 0.00
+HETATM 392 H 1 5.382 8.976 5.924 1.00 0.00
+HETATM 393 H 1 5.977 10.088 4.673 1.00 0.00
+HETATM 394 H 1 8.269 9.137 4.920 1.00 0.00
+HETATM 395 H 1 7.673 8.038 6.185 1.00 0.00
+HETATM 396 H 1 7.001 9.993 7.571 1.00 0.00
+HETATM 397 H 1 7.579 11.095 6.302 1.00 0.00
+HETATM 398 H 1 9.884 10.192 6.570 1.00 0.00
+HETATM 399 H 1 9.304 9.100 7.851 1.00 0.00
+HETATM 400 H 1 8.493 11.861 8.565 1.00 0.00
+HETATM 401 H 1 10.536 12.152 9.787 1.00 0.00
+HETATM 402 H 1 11.947 10.429 7.821 1.00 0.00
+HETATM 403 H 1 11.362 9.399 9.150 1.00 0.00
+HETATM 404 H 1 12.509 10.880 10.795 1.00 0.00
+HETATM 405 H 1 13.103 11.896 9.462 1.00 0.00
+HETATM 406 H 1 14.343 9.946 8.529 1.00 0.00
+HETATM 407 H 1 13.743 8.930 9.859 1.00 0.00
+HETATM 408 H 1 14.872 10.428 11.505 1.00 0.00
+HETATM 409 H 1 15.489 11.425 10.168 1.00 0.00
+HETATM 410 H 1 16.727 9.459 9.273 1.00 0.00
+HETATM 411 H 1 16.099 8.457 10.601 1.00 0.00
+HETATM 412 H 1 17.219 9.951 12.254 1.00 0.00
+HETATM 413 H 1 17.860 10.940 10.923 1.00 0.00
+HETATM 414 H 1 19.093 8.960 10.046 1.00 0.00
+HETATM 415 H 1 18.446 7.968 11.372 1.00 0.00
+HETATM 416 H 1 19.573 9.448 13.030 1.00 0.00
+HETATM 417 H 1 20.221 10.440 11.703 1.00 0.00
+HETATM 418 H 1 20.748 8.752 11.891 1.00 0.00
+HETATM 419 H 1 6.625 -11.535 12.006 1.00 0.00
+HETATM 420 H 1 7.653 -10.282 12.735 1.00 0.00
+HETATM 421 H 1 9.075 -12.048 13.767 1.00 0.00
+HETATM 422 H 1 8.046 -13.303 13.036 1.00 0.00
+HETATM 423 H 1 7.378 -12.215 14.274 1.00 0.00
+HETATM 424 H 1 -2.762 -20.465 -4.223 1.00 0.00
+HETATM 425 H 1 -3.052 -20.802 -2.502 1.00 0.00
+HETATM 426 H 1 -4.423 -22.213 -4.847 1.00 0.00
+HETATM 427 H 1 -4.714 -22.551 -3.124 1.00 0.00
+HETATM 428 H 1 -3.123 -22.895 -3.842 1.00 0.00
+HETATM 429 H 1 3.124 -5.987 17.380 1.00 0.00
+HETATM 430 H 1 1.964 -6.995 16.486 1.00 0.00
+HETATM 431 H 1 0.758 -7.491 18.610 1.00 0.00
+HETATM 432 H 1 1.921 -6.484 19.504 1.00 0.00
+HETATM 433 H 1 2.464 -7.981 18.713 1.00 0.00
+HETATM 434 H 1 5.023 17.135 -10.744 1.00 0.00
+HETATM 435 H 1 4.500 15.996 -12.005 1.00 0.00
+HETATM 436 H 1 6.079 17.053 -13.616 1.00 0.00
+HETATM 437 H 1 6.604 18.192 -12.354 1.00 0.00
+HETATM 438 H 1 4.935 18.248 -12.965 1.00 0.00
+HETATM 439 H 1 7.973 22.680 5.906 1.00 0.00
+HETATM 440 H 1 6.926 22.873 7.330 1.00 0.00
+HETATM 441 H 1 6.871 25.336 6.956 1.00 0.00
+HETATM 442 H 1 7.919 25.143 5.532 1.00 0.00
+HETATM 443 H 1 8.540 24.757 7.153 1.00 0.00
+HETATM 444 H 1 -19.255 3.289 -6.856 1.00 0.00
+HETATM 445 H 1 -19.135 1.523 -7.009 1.00 0.00
+HETATM 446 H 1 -20.826 1.565 -8.838 1.00 0.00
+HETATM 447 H 1 -20.947 3.334 -8.684 1.00 0.00
+HETATM 448 H 1 -21.476 2.286 -7.348 1.00 0.00
+HETATM 449 H 1 -18.187 6.275 5.583 1.00 0.00
+HETATM 450 H 1 -17.597 7.553 4.497 1.00 0.00
+HETATM 451 H 1 -19.276 9.132 5.443 1.00 0.00
+HETATM 452 H 1 -19.866 7.853 6.529 1.00 0.00
+HETATM 453 H 1 -20.065 7.687 4.770 1.00 0.00
+CONECT 1 2 6 19 176
+CONECT 2 1 3 21 177
+CONECT 3 2 4 22 178
+CONECT 4 3 5 23 179
+CONECT 5 4 6 7 180
+CONECT 6 1 5
+CONECT 7 5 8
+CONECT 8 7 9 10 11
+CONECT 9 8 18 181 182
+CONECT 10 8 13 17 183
+CONECT 11 8 12
+CONECT 12 11 13 14 184
+CONECT 13 10 12 16 185
+CONECT 14 12 15 186 187
+CONECT 15 14 143
+CONECT 16 13 109
+CONECT 17 10 126
+CONECT 18 9 92
+CONECT 19 1 20 188 189
+CONECT 20 19 24
+CONECT 21 2 41
+CONECT 22 3 58
+CONECT 23 4 75
+CONECT 24 20 25 25 26
+CONECT 25 24 24
+CONECT 26 24 27 190 191
+CONECT 27 26 28 192 193
+CONECT 28 27 29 194 195
+CONECT 29 28 30 196 197
+CONECT 30 29 31 198 199
+CONECT 31 30 32 200 201
+CONECT 32 31 33 202 203
+CONECT 33 32 34 34 204
+CONECT 34 33 33 35 205
+CONECT 35 34 36 206 207
+CONECT 36 35 37 208 209
+CONECT 37 36 38 210 211
+CONECT 38 37 39 212 213
+CONECT 39 38 40 214 215
+CONECT 40 39 164 216 217
+CONECT 41 21 42 42 43
+CONECT 42 41 41
+CONECT 43 41 44 218 219
+CONECT 44 43 45 220 221
+CONECT 45 44 46 222 223
+CONECT 46 45 47 224 225
+CONECT 47 46 48 226 227
+CONECT 48 47 49 228 229
+CONECT 49 48 50 230 231
+CONECT 50 49 51 51 232
+CONECT 51 50 50 52 233
+CONECT 52 51 53 234 235
+CONECT 53 52 54 236 237
+CONECT 54 53 55 238 239
+CONECT 55 54 56 240 241
+CONECT 56 55 57 242 243
+CONECT 57 56 162 244 245
+CONECT 58 22 59 59 60
+CONECT 59 58 58
+CONECT 60 58 61 246 247
+CONECT 61 60 62 248 249
+CONECT 62 61 63 250 251
+CONECT 63 62 64 252 253
+CONECT 64 63 65 254 255
+CONECT 65 64 66 256 257
+CONECT 66 65 67 258 259
+CONECT 67 66 68 68 260
+CONECT 68 67 67 69 261
+CONECT 69 68 70 262 263
+CONECT 70 69 71 264 265
+CONECT 71 70 72 266 267
+CONECT 72 71 73 268 269
+CONECT 73 72 74 270 271
+CONECT 74 73 168 272 273
+CONECT 75 23 76 76 77
+CONECT 76 75 75
+CONECT 77 75 78 274 275
+CONECT 78 77 79 276 277
+CONECT 79 78 80 278 279
+CONECT 80 79 81 280 281
+CONECT 81 80 82 282 283
+CONECT 82 81 83 284 285
+CONECT 83 82 84 286 287
+CONECT 84 83 85 85 288
+CONECT 85 84 84 86 289
+CONECT 86 85 87 290 291
+CONECT 87 86 88 292 293
+CONECT 88 87 89 294 295
+CONECT 89 88 90 296 297
+CONECT 90 89 91 298 299
+CONECT 91 90 166 300 301
+CONECT 92 18 93 93 94
+CONECT 93 92 92
+CONECT 94 92 95 302 303
+CONECT 95 94 96 304 305
+CONECT 96 95 97 306 307
+CONECT 97 96 98 308 309
+CONECT 98 97 99 310 311
+CONECT 99 98 100 312 313
+CONECT 100 99 101 314 315
+CONECT 101 100 102 102 316
+CONECT 102 101 101 103 317
+CONECT 103 102 104 318 319
+CONECT 104 103 105 320 321
+CONECT 105 104 106 322 323
+CONECT 106 105 107 324 325
+CONECT 107 106 108 326 327
+CONECT 108 107 172 328 329
+CONECT 109 16 110 110 111
+CONECT 110 109 109
+CONECT 111 109 112 330 331
+CONECT 112 111 113 332 333
+CONECT 113 112 114 334 335
+CONECT 114 113 115 336 337
+CONECT 115 114 116 338 339
+CONECT 116 115 117 340 341
+CONECT 117 116 118 342 343
+CONECT 118 117 119 119 344
+CONECT 119 118 118 120 345
+CONECT 120 119 121 346 347
+CONECT 121 120 122 348 349
+CONECT 122 121 123 350 351
+CONECT 123 122 124 352 353
+CONECT 124 123 125 354 355
+CONECT 125 124 170 356 357
+CONECT 126 17 127 127 128
+CONECT 127 126 126
+CONECT 128 126 129 358 359
+CONECT 129 128 130 360 361
+CONECT 130 129 131 362 363
+CONECT 131 130 132 364 365
+CONECT 132 131 133 366 367
+CONECT 133 132 134 368 369
+CONECT 134 133 135 370 371
+CONECT 135 134 136 136 372
+CONECT 136 135 135 137 373
+CONECT 137 136 138 374 375
+CONECT 138 137 139 376 377
+CONECT 139 138 140 378 379
+CONECT 140 139 141 380 381
+CONECT 141 140 142 382 383
+CONECT 142 141 174 384 385
+CONECT 143 15 144 144 145
+CONECT 144 143 143
+CONECT 145 143 146 386 387
+CONECT 146 145 147 388 389
+CONECT 147 146 148 390 391
+CONECT 148 147 149 392 393
+CONECT 149 148 150 394 395
+CONECT 150 149 151 396 397
+CONECT 151 150 152 398 399
+CONECT 152 151 153 153 400
+CONECT 153 152 152 154 401
+CONECT 154 153 155 402 403
+CONECT 155 154 156 404 405
+CONECT 156 155 157 406 407
+CONECT 157 156 158 408 409
+CONECT 158 157 159 410 411
+CONECT 159 158 160 412 413
+CONECT 160 159 161 414 415
+CONECT 161 160 416 417 418
+CONECT 162 57 163 419 420
+CONECT 163 162 421 422 423
+CONECT 164 40 165 424 425
+CONECT 165 164 426 427 428
+CONECT 166 91 167 429 430
+CONECT 167 166 431 432 433
+CONECT 168 74 169 434 435
+CONECT 169 168 436 437 438
+CONECT 170 125 171 439 440
+CONECT 171 170 441 442 443
+CONECT 172 108 173 444 445
+CONECT 173 172 446 447 448
+CONECT 174 142 175 449 450
+CONECT 175 174 451 452 453
+CONECT 176 1
+CONECT 177 2
+CONECT 178 3
+CONECT 179 4
+CONECT 180 5
+CONECT 181 9
+CONECT 182 9
+CONECT 183 10
+CONECT 184 12
+CONECT 185 13
+CONECT 186 14
+CONECT 187 14
+CONECT 188 19
+CONECT 189 19
+CONECT 190 26
+CONECT 191 26
+CONECT 192 27
+CONECT 193 27
+CONECT 194 28
+CONECT 195 28
+CONECT 196 29
+CONECT 197 29
+CONECT 198 30
+CONECT 199 30
+CONECT 200 31
+CONECT 201 31
+CONECT 202 32
+CONECT 203 32
+CONECT 204 33
+CONECT 205 34
+CONECT 206 35
+CONECT 207 35
+CONECT 208 36
+CONECT 209 36
+CONECT 210 37
+CONECT 211 37
+CONECT 212 38
+CONECT 213 38
+CONECT 214 39
+CONECT 215 39
+CONECT 216 40
+CONECT 217 40
+CONECT 218 43
+CONECT 219 43
+CONECT 220 44
+CONECT 221 44
+CONECT 222 45
+CONECT 223 45
+CONECT 224 46
+CONECT 225 46
+CONECT 226 47
+CONECT 227 47
+CONECT 228 48
+CONECT 229 48
+CONECT 230 49
+CONECT 231 49
+CONECT 232 50
+CONECT 233 51
+CONECT 234 52
+CONECT 235 52
+CONECT 236 53
+CONECT 237 53
+CONECT 238 54
+CONECT 239 54
+CONECT 240 55
+CONECT 241 55
+CONECT 242 56
+CONECT 243 56
+CONECT 244 57
+CONECT 245 57
+CONECT 246 60
+CONECT 247 60
+CONECT 248 61
+CONECT 249 61
+CONECT 250 62
+CONECT 251 62
+CONECT 252 63
+CONECT 253 63
+CONECT 254 64
+CONECT 255 64
+CONECT 256 65
+CONECT 257 65
+CONECT 258 66
+CONECT 259 66
+CONECT 260 67
+CONECT 261 68
+CONECT 262 69
+CONECT 263 69
+CONECT 264 70
+CONECT 265 70
+CONECT 266 71
+CONECT 267 71
+CONECT 268 72
+CONECT 269 72
+CONECT 270 73
+CONECT 271 73
+CONECT 272 74
+CONECT 273 74
+CONECT 274 77
+CONECT 275 77
+CONECT 276 78
+CONECT 277 78
+CONECT 278 79
+CONECT 279 79
+CONECT 280 80
+CONECT 281 80
+CONECT 282 81
+CONECT 283 81
+CONECT 284 82
+CONECT 285 82
+CONECT 286 83
+CONECT 287 83
+CONECT 288 84
+CONECT 289 85
+CONECT 290 86
+CONECT 291 86
+CONECT 292 87
+CONECT 293 87
+CONECT 294 88
+CONECT 295 88
+CONECT 296 89
+CONECT 297 89
+CONECT 298 90
+CONECT 299 90
+CONECT 300 91
+CONECT 301 91
+CONECT 302 94
+CONECT 303 94
+CONECT 304 95
+CONECT 305 95
+CONECT 306 96
+CONECT 307 96
+CONECT 308 97
+CONECT 309 97
+CONECT 310 98
+CONECT 311 98
+CONECT 312 99
+CONECT 313 99
+CONECT 314 100
+CONECT 315 100
+CONECT 316 101
+CONECT 317 102
+CONECT 318 103
+CONECT 319 103
+CONECT 320 104
+CONECT 321 104
+CONECT 322 105
+CONECT 323 105
+CONECT 324 106
+CONECT 325 106
+CONECT 326 107
+CONECT 327 107
+CONECT 328 108
+CONECT 329 108
+CONECT 330 111
+CONECT 331 111
+CONECT 332 112
+CONECT 333 112
+CONECT 334 113
+CONECT 335 113
+CONECT 336 114
+CONECT 337 114
+CONECT 338 115
+CONECT 339 115
+CONECT 340 116
+CONECT 341 116
+CONECT 342 117
+CONECT 343 117
+CONECT 344 118
+CONECT 345 119
+CONECT 346 120
+CONECT 347 120
+CONECT 348 121
+CONECT 349 121
+CONECT 350 122
+CONECT 351 122
+CONECT 352 123
+CONECT 353 123
+CONECT 354 124
+CONECT 355 124
+CONECT 356 125
+CONECT 357 125
+CONECT 358 128
+CONECT 359 128
+CONECT 360 129
+CONECT 361 129
+CONECT 362 130
+CONECT 363 130
+CONECT 364 131
+CONECT 365 131
+CONECT 366 132
+CONECT 367 132
+CONECT 368 133
+CONECT 369 133
+CONECT 370 134
+CONECT 371 134
+CONECT 372 135
+CONECT 373 136
+CONECT 374 137
+CONECT 375 137
+CONECT 376 138
+CONECT 377 138
+CONECT 378 139
+CONECT 379 139
+CONECT 380 140
+CONECT 381 140
+CONECT 382 141
+CONECT 383 141
+CONECT 384 142
+CONECT 385 142
+CONECT 386 145
+CONECT 387 145
+CONECT 388 146
+CONECT 389 146
+CONECT 390 147
+CONECT 391 147
+CONECT 392 148
+CONECT 393 148
+CONECT 394 149
+CONECT 395 149
+CONECT 396 150
+CONECT 397 150
+CONECT 398 151
+CONECT 399 151
+CONECT 400 152
+CONECT 401 153
+CONECT 402 154
+CONECT 403 154
+CONECT 404 155
+CONECT 405 155
+CONECT 406 156
+CONECT 407 156
+CONECT 408 157
+CONECT 409 157
+CONECT 410 158
+CONECT 411 158
+CONECT 412 159
+CONECT 413 159
+CONECT 414 160
+CONECT 415 160
+CONECT 416 161
+CONECT 417 161
+CONECT 418 161
+CONECT 419 162
+CONECT 420 162
+CONECT 421 163
+CONECT 422 163
+CONECT 423 163
+CONECT 424 164
+CONECT 425 164
+CONECT 426 165
+CONECT 427 165
+CONECT 428 165
+CONECT 429 166
+CONECT 430 166
+CONECT 431 167
+CONECT 432 167
+CONECT 433 167
+CONECT 434 168
+CONECT 435 168
+CONECT 436 169
+CONECT 437 169
+CONECT 438 169
+CONECT 439 170
+CONECT 440 170
+CONECT 441 171
+CONECT 442 171
+CONECT 443 171
+CONECT 444 172
+CONECT 445 172
+CONECT 446 173
+CONECT 447 173
+CONECT 448 173
+CONECT 449 174
+CONECT 450 174
+CONECT 451 175
+CONECT 452 175
+CONECT 453 175
+MASTER 0 0 0 0 0 0 0 0 453 0 453 0
+END
diff --git a/hacks/images/molecules/penicillin.pdb b/hacks/images/molecules/penicillin.pdb
new file mode 100644
index 0000000..54732f5
--- /dev/null
+++ b/hacks/images/molecules/penicillin.pdb
@@ -0,0 +1,89 @@
+HEADER Penicillin G, an antibiotic
+COMPND al3077
+AUTHOR Created by Dave Woodcock at Okanagan University College
+AUTHOR email:woodcock@okanagan.bc.ca
+AUTHOR Date revised: Wed Aug 30 12:33:12 2000 GENERATED BY BABEL 1.6
+HETATM 1 C 1 0.000 0.000 0.000 1.00 0.00
+HETATM 2 C 1 1.542 0.000 0.000 1.00 0.00
+HETATM 3 C 1 1.415 1.509 0.000 1.00 0.00
+HETATM 4 O 1 2.209 2.398 -0.083 1.00 0.00
+HETATM 5 N 1 0.066 1.475 0.061 1.00 0.00
+HETATM 6 N 1 2.125 -0.528 1.243 1.00 0.00
+HETATM 7 C 1 2.235 -1.858 1.457 1.00 0.00
+HETATM 8 O 1 2.669 -2.251 2.509 1.00 0.00
+HETATM 9 C 1 1.827 -2.860 0.414 1.00 0.00
+HETATM 10 C 1 1.446 -4.153 1.098 1.00 0.00
+HETATM 11 C 1 0.143 -4.328 1.578 1.00 0.00
+HETATM 12 C 1 -0.216 -5.521 2.214 1.00 0.00
+HETATM 13 C 1 0.729 -6.540 2.373 1.00 0.00
+HETATM 14 C 1 2.034 -6.363 1.902 1.00 0.00
+HETATM 15 C 1 2.393 -5.168 1.268 1.00 0.00
+HETATM 16 S 1 -0.818 -0.450 1.519 1.00 0.00
+HETATM 17 C 1 -1.605 1.127 1.810 1.00 0.00
+HETATM 18 C 1 -1.800 1.394 3.317 1.00 0.00
+HETATM 19 C 1 -2.966 1.138 1.082 1.00 0.00
+HETATM 20 C 1 -0.629 2.147 1.173 1.00 0.00
+HETATM 21 C 1 -1.351 3.368 0.682 1.00 0.00
+HETATM 22 O 1 -1.537 3.505 -0.499 1.00 0.00
+HETATM 23 O 1 -2.048 4.114 1.557 1.00 0.00
+HETATM 24 H 1 -0.466 -0.363 -0.916 1.00 0.00
+HETATM 25 H 1 1.982 -0.387 -0.919 1.00 0.00
+HETATM 26 H 1 2.409 0.115 1.973 1.00 0.00
+HETATM 27 H 1 2.660 -3.033 -0.268 1.00 0.00
+HETATM 28 H 1 0.971 -2.493 -0.151 1.00 0.00
+HETATM 29 H 1 -0.596 -3.536 1.454 1.00 0.00
+HETATM 30 H 1 -1.232 -5.657 2.584 1.00 0.00
+HETATM 31 H 1 0.449 -7.470 2.868 1.00 0.00
+HETATM 32 H 1 2.772 -7.155 2.030 1.00 0.00
+HETATM 33 H 1 3.412 -5.032 0.906 1.00 0.00
+HETATM 34 H 1 -0.839 1.345 3.829 1.00 0.00
+HETATM 35 H 1 -2.470 0.644 3.739 1.00 0.00
+HETATM 36 H 1 -2.233 2.384 3.459 1.00 0.00
+HETATM 37 H 1 -3.586 0.322 1.454 1.00 0.00
+HETATM 38 H 1 -2.811 1.012 0.010 1.00 0.00
+HETATM 39 H 1 -3.480 2.082 1.263 1.00 0.00
+HETATM 40 H 1 0.108 2.446 1.919 1.00 0.00
+HETATM 41 H 1 -2.798 4.548 1.098 1.00 0.00
+CONECT 1 2 5 16 24
+CONECT 2 1 3 6 25
+CONECT 3 2 4 4 5
+CONECT 4 3 3
+CONECT 5 1 3 20
+CONECT 6 2 7 26
+CONECT 7 6 8 8 9
+CONECT 8 7 7
+CONECT 9 7 10 27 28
+CONECT 10 9 11 11 15
+CONECT 11 10 10 12 29
+CONECT 12 11 13 13 30
+CONECT 13 12 12 14 31
+CONECT 14 13 15 15 32
+CONECT 15 10 14 14 33
+CONECT 16 1 17
+CONECT 17 16 18 19 20
+CONECT 18 17 34 35 36
+CONECT 19 17 37 38 39
+CONECT 20 5 17 21 40
+CONECT 21 20 22 22 23
+CONECT 22 21 21
+CONECT 23 21 41
+CONECT 24 1
+CONECT 25 2
+CONECT 26 6
+CONECT 27 9
+CONECT 28 9
+CONECT 29 11
+CONECT 30 12
+CONECT 31 13
+CONECT 32 14
+CONECT 33 15
+CONECT 34 18
+CONECT 35 18
+CONECT 36 18
+CONECT 37 19
+CONECT 38 19
+CONECT 39 19
+CONECT 40 20
+CONECT 41 23
+MASTER 0 0 0 0 0 0 0 0 41 0 41 0
+END
diff --git a/hacks/images/molecules/salvinorin.pdb b/hacks/images/molecules/salvinorin.pdb
new file mode 100644
index 0000000..6ac445b
--- /dev/null
+++ b/hacks/images/molecules/salvinorin.pdb
@@ -0,0 +1,92 @@
+HEADER Salvinorin A: A dissociative hallucinogen, kappa opioid receptor agonist
+ATOM 1 O 0 -1.578 3.509 1.054 0.00 0.00 O+0
+ATOM 2 O 0 -0.661 -3.341 -1.950 0.00 0.00 O+0
+ATOM 3 O 0 -0.961 -0.736 -2.292 0.00 0.00 O+0
+ATOM 4 O 0 0.223 4.284 1.789 0.00 0.00 O+0
+ATOM 5 O 0 4.133 -2.520 1.067 0.00 0.00 O+0
+ATOM 6 O 0 4.305 -2.225 -1.047 0.00 0.00 O+0
+ATOM 7 O 0 -5.473 1.972 2.519 0.00 0.00 O+0
+ATOM 8 O 0 -1.864 -4.598 -3.067 0.00 0.00 O+0
+ATOM 9 C 0 1.875 -0.263 -0.355 0.00 0.00 C+0
+ATOM 10 C 0 -0.335 1.379 -0.322 0.00 0.00 C+0
+ATOM 11 C 0 0.290 -0.090 -0.402 0.00 0.00 C+0
+ATOM 12 C 0 0.295 2.080 0.949 0.00 0.00 C+0
+ATOM 13 C 0 2.416 0.613 0.838 0.00 0.00 C+0
+ATOM 14 C 0 2.218 -1.798 -0.082 0.00 0.00 C+0
+ATOM 15 C 0 1.854 2.057 0.955 0.00 0.00 C+0
+ATOM 16 C 0 -1.892 1.349 -0.054 0.00 0.00 C+0
+ATOM 17 C 0 -0.312 -1.076 -1.312 0.00 0.00 C+0
+ATOM 18 C 0 1.427 -2.783 -1.008 0.00 0.00 C+0
+ATOM 19 C 0 2.599 0.182 -1.678 0.00 0.00 C+0
+ATOM 20 C 0 -0.152 2.242 -1.623 0.00 0.00 C+0
+ATOM 21 C 0 -0.102 -2.502 -1.056 0.00 0.00 C+0
+ATOM 22 C 0 -2.483 2.720 0.438 0.00 0.00 C+0
+ATOM 23 C 0 -0.364 3.344 1.274 0.00 0.00 C+0
+ATOM 24 C 0 3.632 -2.188 -0.023 0.00 0.00 C+0
+ATOM 25 C 0 -3.721 2.668 1.259 0.00 0.00 C+0
+ATOM 26 C 0 -4.516 3.764 1.594 0.00 0.00 C+0
+ATOM 27 C 0 -4.363 1.580 1.857 0.00 0.00 C+0
+ATOM 28 C 0 -1.768 -3.894 -2.073 0.00 0.00 C+0
+ATOM 29 C 0 5.353 -2.949 1.401 0.00 0.00 C+0
+ATOM 30 C 0 -5.577 3.309 2.365 0.00 0.00 C+0
+ATOM 31 C 0 -2.903 -3.782 -1.178 0.00 0.00 C+0
+ATOM 32 H 0 -0.032 -0.494 0.566 0.00 0.00 H+0
+ATOM 33 H 0 0.021 1.488 1.831 0.00 0.00 H+0
+ATOM 34 H 0 2.176 0.125 1.788 0.00 0.00 H+0
+ATOM 35 H 0 3.509 0.668 0.818 0.00 0.00 H+0
+ATOM 36 H 0 1.806 -2.023 0.910 0.00 0.00 H+0
+ATOM 37 H 0 2.250 2.682 0.154 0.00 0.00 H+0
+ATOM 38 H 0 2.226 2.485 1.891 0.00 0.00 H+0
+ATOM 39 H 0 -2.454 1.020 -0.933 0.00 0.00 H+0
+ATOM 40 H 0 -2.074 0.590 0.706 0.00 0.00 H+0
+ATOM 41 H 0 1.574 -3.811 -0.660 0.00 0.00 H+0
+ATOM 42 H 0 1.827 -2.744 -2.026 0.00 0.00 H+0
+ATOM 43 H 0 2.260 -0.386 -2.545 0.00 0.00 H+0
+ATOM 44 H 0 2.509 1.228 -1.923 0.00 0.00 H+0
+ATOM 45 H 0 3.681 0.081 -1.611 0.00 0.00 H+0
+ATOM 46 H 0 -0.558 1.749 -2.507 0.00 0.00 H+0
+ATOM 47 H 0 -0.638 3.215 -1.562 0.00 0.00 H+0
+ATOM 48 H 0 0.868 2.520 -1.836 0.00 0.00 H+0
+ATOM 49 H 0 -0.497 -2.735 -0.061 0.00 0.00 H+0
+ATOM 50 H 0 -2.764 3.279 -0.460 0.00 0.00 H+0
+ATOM 51 H 0 -4.357 4.736 1.321 0.00 0.00 H+0
+ATOM 52 H 0 -4.064 0.605 1.821 0.00 0.00 H+0
+ATOM 53 H 0 5.360 -3.151 2.472 0.00 0.00 H+0
+ATOM 54 H 0 6.112 -2.193 1.186 0.00 0.00 H+0
+ATOM 55 H 0 5.605 -3.873 0.875 0.00 0.00 H+0
+ATOM 56 H 0 -6.323 3.886 2.756 0.00 0.00 H+0
+ATOM 57 H 0 -3.222 -2.742 -1.105 0.00 0.00 H+0
+ATOM 58 H 0 -2.636 -4.143 -0.184 0.00 0.00 H+0
+ATOM 59 H 0 -3.759 -4.370 -1.521 0.00 0.00 H+0
+CONECT 1 22 23 0 0 NONE 65
+CONECT 2 21 28 0 0 NONE 66
+CONECT 3 17 0 0 0 NONE 67
+CONECT 4 23 0 0 0 NONE 68
+CONECT 5 24 29 0 0 NONE 69
+CONECT 6 24 0 0 0 NONE 70
+CONECT 7 27 30 0 0 NONE 71
+CONECT 8 28 0 0 0 NONE 72
+CONECT 9 11 13 14 19 NONE 73
+CONECT 10 11 12 16 20 NONE 74
+CONECT 11 9 10 17 32 NONE 75
+CONECT 12 10 15 23 33 NONE 76
+CONECT 13 9 15 34 35 NONE 77
+CONECT 14 9 18 24 36 NONE 78
+CONECT 15 12 13 37 38 NONE 79
+CONECT 16 10 22 39 40 NONE 80
+CONECT 17 3 11 21 0 NONE 81
+CONECT 18 14 21 41 42 NONE 82
+CONECT 19 9 43 44 45 NONE 83
+CONECT 20 10 46 47 48 NONE 84
+CONECT 21 2 17 18 49 NONE 85
+CONECT 22 1 16 25 50 NONE 86
+CONECT 23 1 4 12 0 NONE 87
+CONECT 24 5 6 14 0 NONE 88
+CONECT 25 22 26 27 0 NONE 89
+CONECT 26 25 30 51 0 NONE 90
+CONECT 27 7 25 52 0 NONE 91
+CONECT 28 2 8 31 0 NONE 92
+CONECT 29 5 53 54 55 NONE 93
+CONECT 30 7 26 56 0 NONE 94
+CONECT 31 28 57 58 59 NONE 95
+END NONE 96
diff --git a/hacks/images/molecules/sarin.pdb b/hacks/images/molecules/sarin.pdb
new file mode 100644
index 0000000..ae03028
--- /dev/null
+++ b/hacks/images/molecules/sarin.pdb
@@ -0,0 +1,43 @@
+HEADER Sarin: S Enantiomer, a chemical warfare agent
+COMPND al3023
+AUTHOR Created by Dave Woodcock at Okanagan University College
+AUTHOR email:woodcock@okanagan.bc.ca
+AUTHOR Date revised: Wed Aug 30 12:33:12 2000 GENERATED BY BABEL 1.6
+HETATM 1 P 1 0.000 0.000 0.000 1.00 0.00
+HETATM 2 F 1 1.779 0.000 0.000 1.00 0.00
+HETATM 3 C 1 -0.611 1.725 0.000 1.00 0.00
+HETATM 4 O 1 -0.599 -0.840 1.463 1.00 0.00
+HETATM 5 O 1 -0.599 -0.841 -1.466 1.00 0.00
+HETATM 6 C 1 -1.898 -1.369 -1.304 1.00 0.00
+HETATM 7 C 1 -1.817 -2.772 -0.672 1.00 0.00
+HETATM 8 C 1 -2.555 -1.476 -2.694 1.00 0.00
+HETATM 9 H 1 -0.248 2.240 -0.890 1.00 0.00
+HETATM 10 H 1 -0.248 2.239 0.891 1.00 0.00
+HETATM 11 H 1 -1.701 1.724 0.000 1.00 0.00
+HETATM 12 H 1 -2.510 -0.718 -0.679 1.00 0.00
+HETATM 13 H 1 -1.372 -2.712 0.320 1.00 0.00
+HETATM 14 H 1 -1.203 -3.414 -1.303 1.00 0.00
+HETATM 15 H 1 -2.818 -3.194 -0.591 1.00 0.00
+HETATM 16 H 1 -1.961 -2.124 -3.339 1.00 0.00
+HETATM 17 H 1 -3.561 -1.885 -2.595 1.00 0.00
+HETATM 18 H 1 -2.613 -0.482 -3.136 1.00 0.00
+CONECT 1 2 3 4 4 5
+CONECT 2 1
+CONECT 3 1 9 10 11
+CONECT 4 1 1
+CONECT 5 1 6
+CONECT 6 5 7 8 12
+CONECT 7 6 13 14 15
+CONECT 8 6 16 17 18
+CONECT 9 3
+CONECT 10 3
+CONECT 11 3
+CONECT 12 6
+CONECT 13 7
+CONECT 14 7
+CONECT 15 7
+CONECT 16 8
+CONECT 17 8
+CONECT 18 8
+MASTER 0 0 0 0 0 0 0 0 18 0 18 0
+END
diff --git a/hacks/images/molecules/strychnine.pdb b/hacks/images/molecules/strychnine.pdb
new file mode 100644
index 0000000..ecb0762
--- /dev/null
+++ b/hacks/images/molecules/strychnine.pdb
@@ -0,0 +1,101 @@
+HEADER Strychnine: Nux Vomica
+COMPND al3061
+AUTHOR Created by Dave Woodcock at Okanagan University College
+AUTHOR email:woodcock@okanagan.bc.ca
+AUTHOR Date revised: Wed Aug 30 12:33:12 2000 GENERATED BY BABEL 1.6
+HETATM 1 C 1 0.000 0.000 0.000 1.00 0.00
+HETATM 2 C 1 1.395 0.000 0.000 1.00 0.00
+HETATM 3 C 1 2.124 1.193 0.000 1.00 0.00
+HETATM 4 C 1 1.414 2.398 -0.067 1.00 0.00
+HETATM 5 C 1 0.014 2.401 -0.115 1.00 0.00
+HETATM 6 C 1 -0.709 1.203 -0.087 1.00 0.00
+HETATM 7 C 1 1.911 -1.410 0.160 1.00 0.00
+HETATM 8 N 1 -0.471 -1.291 -0.057 1.00 0.00
+HETATM 9 C 1 -1.720 -1.604 -0.472 1.00 0.00
+HETATM 10 O 1 -2.589 -0.778 -0.359 1.00 0.00
+HETATM 11 C 1 0.645 -2.239 -0.189 1.00 0.00
+HETATM 12 C 1 -1.941 -2.698 -1.483 1.00 0.00
+HETATM 13 C 1 -0.687 -3.549 -1.797 1.00 0.00
+HETATM 14 H 1 0.525 -3.093 0.477 1.00 0.00
+HETATM 15 C 1 0.573 -2.674 -1.656 1.00 0.00
+HETATM 16 H 1 -0.775 -3.908 -2.822 1.00 0.00
+HETATM 17 O 1 -0.654 -4.641 -0.904 1.00 0.00
+HETATM 18 C 1 0.221 -5.671 -1.313 1.00 0.00
+HETATM 19 C 1 1.595 -5.446 -0.726 1.00 0.00
+HETATM 20 C 1 2.356 -4.403 -1.088 1.00 0.00
+HETATM 21 C 1 3.723 -4.222 -0.464 1.00 0.00
+HETATM 22 C 1 1.893 -3.351 -2.072 1.00 0.00
+HETATM 23 H 1 0.431 -1.791 -2.279 1.00 0.00
+HETATM 24 H 1 1.803 -3.769 -3.074 1.00 0.00
+HETATM 25 C 1 2.942 -2.222 -2.062 1.00 0.00
+HETATM 26 C 1 3.199 -1.816 -0.595 1.00 0.00
+HETATM 27 C 1 2.322 -1.641 1.618 1.00 0.00
+HETATM 28 C 1 3.109 -2.956 1.512 1.00 0.00
+HETATM 29 N 1 3.783 -2.911 0.202 1.00 0.00
+HETATM 30 H 1 3.212 1.188 0.059 1.00 0.00
+HETATM 31 H 1 1.957 3.343 -0.078 1.00 0.00
+HETATM 32 H 1 -0.520 3.349 -0.172 1.00 0.00
+HETATM 33 H 1 -1.798 1.219 -0.127 1.00 0.00
+HETATM 34 H 1 -2.263 -2.218 -2.408 1.00 0.00
+HETATM 35 H 1 -2.740 -3.355 -1.139 1.00 0.00
+HETATM 36 H 1 0.290 -5.733 -2.400 1.00 0.00
+HETATM 37 H 1 -0.163 -6.618 -0.935 1.00 0.00
+HETATM 38 H 1 1.974 -6.159 0.006 1.00 0.00
+HETATM 39 H 1 4.483 -4.272 -1.243 1.00 0.00
+HETATM 40 H 1 3.923 -5.012 0.260 1.00 0.00
+HETATM 41 H 1 2.578 -1.363 -2.625 1.00 0.00
+HETATM 42 H 1 3.871 -2.566 -2.519 1.00 0.00
+HETATM 43 H 1 3.898 -0.980 -0.573 1.00 0.00
+HETATM 44 H 1 1.464 -1.724 2.285 1.00 0.00
+HETATM 45 H 1 2.987 -0.840 1.943 1.00 0.00
+HETATM 46 H 1 2.413 -3.794 1.551 1.00 0.00
+HETATM 47 H 1 3.833 -3.042 2.322 1.00 0.00
+CONECT 1 2 2 6 8
+CONECT 2 1 1 3 7
+CONECT 3 2 4 4 30
+CONECT 4 3 3 5 31
+CONECT 5 4 6 6 32
+CONECT 6 1 5 5 33
+CONECT 7 2 11 26 27
+CONECT 8 1 9 11
+CONECT 9 8 10 10 12
+CONECT 10 9 9
+CONECT 11 7 8 14 15
+CONECT 12 9 13 34 35
+CONECT 13 12 15 16 17
+CONECT 14 11
+CONECT 15 11 13 22 23
+CONECT 16 13
+CONECT 17 13 18
+CONECT 18 17 19 36 37
+CONECT 19 18 20 20 38
+CONECT 20 19 19 21 22
+CONECT 21 20 29 39 40
+CONECT 22 15 20 24 25
+CONECT 23 15
+CONECT 24 22
+CONECT 25 22 26 41 42
+CONECT 26 7 25 29 43
+CONECT 27 7 28 44 45
+CONECT 28 27 29 46 47
+CONECT 29 21 26 28
+CONECT 30 3
+CONECT 31 4
+CONECT 32 5
+CONECT 33 6
+CONECT 34 12
+CONECT 35 12
+CONECT 36 18
+CONECT 37 18
+CONECT 38 19
+CONECT 39 21
+CONECT 40 21
+CONECT 41 25
+CONECT 42 25
+CONECT 43 26
+CONECT 44 27
+CONECT 45 27
+CONECT 46 28
+CONECT 47 28
+MASTER 0 0 0 0 0 0 0 0 47 0 47 0
+END
diff --git a/hacks/images/molecules/sucrose.pdb b/hacks/images/molecules/sucrose.pdb
new file mode 100644
index 0000000..2a75f22
--- /dev/null
+++ b/hacks/images/molecules/sucrose.pdb
@@ -0,0 +1,97 @@
+HEADER Sucrose: Sugar
+COMPND nat0013
+AUTHOR Created by Dave Woodcock at Okanagan University College
+AUTHOR email:woodcock@okanagan.bc.ca
+AUTHOR Date revised: Fri Sep 1 09:41:05 2000 GENERATED BY BABEL 1.6
+HETATM 1 C 1 0.000 0.000 0.000 1.00 0.00
+HETATM 2 C 1 1.542 0.000 0.000 1.00 0.00
+HETATM 3 C 1 2.041 1.457 0.000 1.00 0.00
+HETATM 4 C 1 1.414 2.181 1.207 1.00 0.00
+HETATM 5 C 1 -0.117 2.034 1.128 1.00 0.00
+HETATM 6 O 1 -0.472 0.668 1.149 1.00 0.00
+HETATM 7 H 1 -0.566 2.548 1.978 1.00 0.00
+HETATM 8 O 1 -0.572 2.607 -0.076 1.00 0.00
+HETATM 9 C 1 -1.867 3.149 -0.193 1.00 0.00
+HETATM 10 C 1 -1.993 3.815 -1.579 1.00 0.00
+HETATM 11 C 1 -2.960 2.084 -0.002 1.00 0.00
+HETATM 12 O 1 -2.117 4.104 0.816 1.00 0.00
+HETATM 13 C 1 -3.516 4.220 0.978 1.00 0.00
+HETATM 14 C 1 -4.167 2.959 0.369 1.00 0.00
+HETATM 15 H 1 -0.368 0.500 -0.896 1.00 0.00
+HETATM 16 H 1 1.901 -0.501 0.899 1.00 0.00
+HETATM 17 H 1 1.728 1.949 -0.923 1.00 0.00
+HETATM 18 H 1 1.774 1.726 2.130 1.00 0.00
+HETATM 19 H 1 -1.836 3.065 -2.355 1.00 0.00
+HETATM 20 H 1 -2.981 4.259 -1.698 1.00 0.00
+HETATM 21 H 1 -3.133 1.511 -0.914 1.00 0.00
+HETATM 22 H 1 -3.871 5.100 0.441 1.00 0.00
+HETATM 23 H 1 -4.821 2.452 1.081 1.00 0.00
+HETATM 24 C 1 -3.859 4.364 2.474 1.00 0.00
+HETATM 25 O 1 -5.279 4.442 2.639 1.00 0.00
+HETATM 26 O 1 -4.897 3.325 -0.807 1.00 0.00
+HETATM 27 O 1 -2.638 1.202 1.079 1.00 0.00
+HETATM 28 O 1 -0.995 4.834 -1.694 1.00 0.00
+HETATM 29 C 1 -0.513 -1.453 0.003 1.00 0.00
+HETATM 30 O 1 -1.944 -1.459 -0.055 1.00 0.00
+HETATM 31 O 1 2.039 -0.690 -1.152 1.00 0.00
+HETATM 32 O 1 3.468 1.480 0.101 1.00 0.00
+HETATM 33 O 1 1.772 3.567 1.189 1.00 0.00
+HETATM 34 H 1 -3.396 5.270 2.866 1.00 0.00
+HETATM 35 H 1 -3.480 3.504 3.024 1.00 0.00
+HETATM 36 H 1 -5.622 5.216 2.180 1.00 0.00
+HETATM 37 H 1 -5.302 2.544 -1.199 1.00 0.00
+HETATM 38 H 1 -2.661 1.671 1.919 1.00 0.00
+HETATM 39 H 1 -1.056 5.255 -2.558 1.00 0.00
+HETATM 40 H 1 -0.180 -1.958 0.910 1.00 0.00
+HETATM 41 H 1 -0.118 -1.977 -0.868 1.00 0.00
+HETATM 42 H 1 -2.305 -1.058 0.741 1.00 0.00
+HETATM 43 H 1 1.728 -0.261 -1.956 1.00 0.00
+HETATM 44 H 1 3.781 2.391 0.099 1.00 0.00
+HETATM 45 H 1 1.428 3.987 0.394 1.00 0.00
+CONECT 1 2 6 15 29
+CONECT 2 1 3 16 31
+CONECT 3 2 4 17 32
+CONECT 4 3 5 18 33
+CONECT 5 4 6 7 8
+CONECT 6 1 5
+CONECT 7 5
+CONECT 8 5 9
+CONECT 9 8 10 11 12
+CONECT 10 9 19 20 28
+CONECT 11 9 14 21 27
+CONECT 12 9 13
+CONECT 13 12 14 22 24
+CONECT 14 11 13 23 26
+CONECT 15 1
+CONECT 16 2
+CONECT 17 3
+CONECT 18 4
+CONECT 19 10
+CONECT 20 10
+CONECT 21 11
+CONECT 22 13
+CONECT 23 14
+CONECT 24 13 25 34 35
+CONECT 25 24 36
+CONECT 26 14 37
+CONECT 27 11 38
+CONECT 28 10 39
+CONECT 29 1 30 40 41
+CONECT 30 29 42
+CONECT 31 2 43
+CONECT 32 3 44
+CONECT 33 4 45
+CONECT 34 24
+CONECT 35 24
+CONECT 36 25
+CONECT 37 26
+CONECT 38 27
+CONECT 39 28
+CONECT 40 29
+CONECT 41 29
+CONECT 42 30
+CONECT 43 31
+CONECT 44 32
+CONECT 45 33
+MASTER 0 0 0 0 0 0 0 0 45 0 45 0
+END
diff --git a/hacks/images/molecules/thalidomide.pdb b/hacks/images/molecules/thalidomide.pdb
new file mode 100644
index 0000000..f3edb72
--- /dev/null
+++ b/hacks/images/molecules/thalidomide.pdb
@@ -0,0 +1,65 @@
+HEADER (S)-Thalidomide, a teratogenic enantiomer
+COMPND jb03stha
+AUTHOR Created by Dave Woodcock at Okanagan University College
+AUTHOR email:woodcock@okanagan.bc.ca
+AUTHOR Date revised: Mon Sep 18 15:35:27 2000 GENERATED BY BABEL 1.6
+HETATM 1 C 1 0.000 0.000 0.000 1.00 0.00
+HETATM 2 C 1 1.402 0.000 0.000 1.00 0.00
+HETATM 3 C 1 2.128 1.197 0.000 1.00 0.00
+HETATM 4 C 1 1.396 2.389 -0.011 1.00 0.00
+HETATM 5 C 1 0.003 2.388 -0.010 1.00 0.00
+HETATM 6 C 1 -0.728 1.196 0.001 1.00 0.00
+HETATM 7 C 1 -0.415 3.783 0.056 1.00 0.00
+HETATM 8 O 1 -1.550 4.177 0.150 1.00 0.00
+HETATM 9 N 1 0.698 4.553 0.096 1.00 0.00
+HETATM 10 C 1 1.812 3.785 0.053 1.00 0.00
+HETATM 11 O 1 2.946 4.181 0.146 1.00 0.00
+HETATM 12 C 1 0.702 6.005 0.319 1.00 0.00
+HETATM 13 C 1 1.020 6.278 1.801 1.00 0.00
+HETATM 14 C 1 1.130 7.799 2.000 1.00 0.00
+HETATM 15 C 1 2.180 8.336 1.068 1.00 0.00
+HETATM 16 O 1 2.814 9.307 1.391 1.00 0.00
+HETATM 17 N 1 2.428 7.747 -0.124 1.00 0.00
+HETATM 18 C 1 1.757 6.647 -0.538 1.00 0.00
+HETATM 19 O 1 2.022 6.158 -1.607 1.00 0.00
+HETATM 20 H 1 -0.535 -0.949 0.010 1.00 0.00
+HETATM 21 H 1 1.938 -0.949 0.010 1.00 0.00
+HETATM 22 H 1 3.217 1.203 0.020 1.00 0.00
+HETATM 23 H 1 -1.817 1.201 0.022 1.00 0.00
+HETATM 24 H 1 -0.272 6.423 0.067 1.00 0.00
+HETATM 25 H 1 1.968 5.808 2.060 1.00 0.00
+HETATM 26 H 1 0.228 5.873 2.432 1.00 0.00
+HETATM 27 H 1 1.408 8.016 3.031 1.00 0.00
+HETATM 28 H 1 0.173 8.268 1.775 1.00 0.00
+HETATM 29 H 1 3.142 8.141 -0.727 1.00 0.00
+CONECT 1 2 2 6 20
+CONECT 2 1 1 3 21
+CONECT 3 2 4 4 22
+CONECT 4 3 3 5 10
+CONECT 5 4 6 6 7
+CONECT 6 1 5 5 23
+CONECT 7 5 8 8 9
+CONECT 8 7 7
+CONECT 9 7 10 12
+CONECT 10 4 9 11 11
+CONECT 11 10 10
+CONECT 12 9 13 18 24
+CONECT 13 12 14 25 26
+CONECT 14 13 15 27 28
+CONECT 15 14 16 16 17
+CONECT 16 15 15
+CONECT 17 15 18 29
+CONECT 18 12 17 19 19
+CONECT 19 18 18
+CONECT 20 1
+CONECT 21 2
+CONECT 22 3
+CONECT 23 6
+CONECT 24 12
+CONECT 25 13
+CONECT 26 13
+CONECT 27 14
+CONECT 28 14
+CONECT 29 17
+MASTER 0 0 0 0 0 0 0 0 29 0 29 0
+END
diff --git a/hacks/images/molecules/thymine.pdb b/hacks/images/molecules/thymine.pdb
new file mode 100644
index 0000000..b58f8a6
--- /dev/null
+++ b/hacks/images/molecules/thymine.pdb
@@ -0,0 +1,37 @@
+HEADER Thymine: Pyrimidine base nucleotide
+COMPND jb09thye
+AUTHOR Created by Dave Woodcock at Okanagan University College
+AUTHOR email:woodcock@okanagan.bc.ca
+AUTHOR Date revised: Tue Sep 19 21:46:02 2000 GENERATED BY BABEL 1.6
+HETATM 1 C 1 0.000 0.000 0.000 1.00 0.00
+HETATM 2 C 1 1.399 0.000 0.000 1.00 0.00
+HETATM 3 C 1 2.068 1.228 0.000 1.00 0.00
+HETATM 4 N 1 1.356 2.377 -0.004 1.00 0.00
+HETATM 5 C 1 0.004 2.350 -0.006 1.00 0.00
+HETATM 6 N 1 -0.667 1.176 -0.004 1.00 0.00
+HETATM 7 O 1 -0.611 3.385 -0.006 1.00 0.00
+HETATM 8 O 1 3.272 1.261 0.006 1.00 0.00
+HETATM 9 C 1 2.173 -1.300 0.014 1.00 0.00
+HETATM 10 H 1 -0.549 -0.941 0.006 1.00 0.00
+HETATM 11 H 1 1.840 3.268 -0.003 1.00 0.00
+HETATM 12 H 1 -1.681 1.178 -0.004 1.00 0.00
+HETATM 13 H 1 1.632 -2.055 -0.555 1.00 0.00
+HETATM 14 H 1 2.293 -1.638 1.044 1.00 0.00
+HETATM 15 H 1 3.155 -1.146 -0.433 1.00 0.00
+CONECT 1 2 2 6 10
+CONECT 2 1 1 3 9
+CONECT 3 2 4 8 8
+CONECT 4 3 5 11
+CONECT 5 4 6 7 7
+CONECT 6 1 5 12
+CONECT 7 5 5
+CONECT 8 3 3
+CONECT 9 2 13 14 15
+CONECT 10 1
+CONECT 11 4
+CONECT 12 6
+CONECT 13 9
+CONECT 14 9
+CONECT 15 9
+MASTER 0 0 0 0 0 0 0 0 15 0 15 0
+END
diff --git a/hacks/images/molecules/viagra.pdb b/hacks/images/molecules/viagra.pdb
new file mode 100644
index 0000000..243a038
--- /dev/null
+++ b/hacks/images/molecules/viagra.pdb
@@ -0,0 +1,133 @@
+COMPND Viagra
+AUTHOR Created by Dave Woodcock at Okanagan University College
+REMARK from a model provided by Dr Eric Walters
+AUTHOR email:woodcock@okanagan.bc.ca
+AUTHOR Date revised: Mon Oct 16 12:17:54 2000 GENERATED BY BABEL 1.6
+HETATM 1 C 1 0.000 0.000 0.000 1.00 0.00
+HETATM 2 C 1 1.398 0.000 0.000 1.00 0.00
+HETATM 3 C 1 2.105 1.207 0.000 1.00 0.00
+HETATM 4 C 1 1.417 2.427 -0.037 1.00 0.00
+HETATM 5 C 1 0.017 2.422 -0.014 1.00 0.00
+HETATM 6 C 1 -0.692 1.216 -0.005 1.00 0.00
+HETATM 7 H 1 -0.545 -0.944 0.023 1.00 0.00
+HETATM 8 H 1 1.939 -0.946 0.029 1.00 0.00
+HETATM 9 H 1 -0.531 3.364 -0.022 1.00 0.00
+HETATM 10 C 1 2.100 3.733 -0.053 1.00 0.00
+HETATM 11 N 1 3.453 3.848 -0.302 1.00 0.00
+HETATM 12 C 1 4.091 5.067 -0.302 1.00 0.00
+HETATM 13 C 1 3.259 6.246 -0.033 1.00 0.00
+HETATM 14 C 1 1.897 6.080 0.190 1.00 0.00
+HETATM 15 N 1 1.310 4.840 0.169 1.00 0.00
+HETATM 16 O 1 5.271 5.168 -0.544 1.00 0.00
+HETATM 17 H 1 4.029 2.992 -0.569 1.00 0.00
+HETATM 18 N 1 3.538 7.572 0.006 1.00 0.00
+HETATM 19 N 1 2.406 8.264 0.248 1.00 0.00
+HETATM 20 C 1 1.373 7.363 0.369 1.00 0.00
+HETATM 21 C 1 4.863 8.163 -0.230 1.00 0.00
+HETATM 22 H 1 4.799 9.247 -0.133 1.00 0.00
+HETATM 23 H 1 5.200 7.907 -1.235 1.00 0.00
+HETATM 24 H 1 5.570 7.774 0.501 1.00 0.00
+HETATM 25 C 1 -0.079 7.701 0.624 1.00 0.00
+HETATM 26 C 1 -0.226 9.225 0.805 1.00 0.00
+HETATM 27 H 1 -0.415 7.190 1.526 1.00 0.00
+HETATM 28 H 1 -0.680 7.372 -0.224 1.00 0.00
+HETATM 29 C 1 -1.702 9.584 1.072 1.00 0.00
+HETATM 30 H 1 0.112 9.732 -0.099 1.00 0.00
+HETATM 31 H 1 0.383 9.550 1.649 1.00 0.00
+HETATM 32 H 1 -1.796 10.663 1.198 1.00 0.00
+HETATM 33 H 1 -2.043 9.083 1.978 1.00 0.00
+HETATM 34 H 1 -2.315 9.264 0.229 1.00 0.00
+HETATM 35 O 1 3.461 1.164 0.124 1.00 0.00
+HETATM 36 C 1 3.859 0.886 1.450 1.00 0.00
+HETATM 37 C 1 3.396 1.998 2.414 1.00 0.00
+HETATM 38 H 1 4.947 0.824 1.480 1.00 0.00
+HETATM 39 H 1 3.443 -0.069 1.771 1.00 0.00
+HETATM 40 H 1 3.774 1.788 3.414 1.00 0.00
+HETATM 41 H 1 2.307 2.037 2.446 1.00 0.00
+HETATM 42 H 1 3.786 2.959 2.077 1.00 0.00
+HETATM 43 S 1 -2.443 1.230 0.022 1.00 0.00
+HETATM 44 N 1 -3.045 -0.296 -0.555 1.00 0.00
+HETATM 45 C 1 -4.498 -0.382 -0.345 1.00 0.00
+HETATM 46 C 1 -4.996 -1.765 -0.804 1.00 0.00
+HETATM 47 N 1 -4.674 -1.957 -2.227 1.00 0.00
+HETATM 48 C 1 -3.222 -1.855 -2.442 1.00 0.00
+HETATM 49 C 1 -2.728 -0.471 -1.980 1.00 0.00
+HETATM 50 H 1 -5.005 0.395 -0.919 1.00 0.00
+HETATM 51 H 1 -4.725 -0.254 0.715 1.00 0.00
+HETATM 52 H 1 -6.076 -1.822 -0.662 1.00 0.00
+HETATM 53 H 1 -4.513 -2.539 -0.208 1.00 0.00
+HETATM 54 H 1 -2.998 -1.979 -3.502 1.00 0.00
+HETATM 55 H 1 -2.707 -2.629 -1.872 1.00 0.00
+HETATM 56 H 1 -3.222 0.303 -2.569 1.00 0.00
+HETATM 57 H 1 -1.651 -0.407 -2.135 1.00 0.00
+HETATM 58 O 1 -2.929 2.282 -0.818 1.00 0.00
+HETATM 59 O 1 -2.893 1.442 1.364 1.00 0.00
+HETATM 60 C 1 -5.177 -3.257 -2.700 1.00 0.00
+HETATM 61 H 1 -4.954 -3.372 -3.760 1.00 0.00
+HETATM 62 H 1 -6.257 -3.305 -2.557 1.00 0.00
+HETATM 63 H 1 -4.703 -4.065 -2.142 1.00 0.00
+CONECT 1 2 2 6 7
+CONECT 2 1 1 3 8
+CONECT 3 2 4 4 35
+CONECT 4 3 3 5 10
+CONECT 5 4 6 6 9
+CONECT 6 1 5 5 43
+CONECT 7 1
+CONECT 8 2
+CONECT 9 5
+CONECT 10 4 11 15 15
+CONECT 11 10 12 17
+CONECT 12 11 13 16 16
+CONECT 13 12 14 14 18
+CONECT 14 13 13 15 20
+CONECT 15 10 14 14
+CONECT 16 12 12
+CONECT 17 11
+CONECT 18 13 19 21
+CONECT 19 18 20 20
+CONECT 20 14 19 19 25
+CONECT 21 18 22 23 24
+CONECT 22 21
+CONECT 23 21
+CONECT 24 21
+CONECT 25 20 26 27 28
+CONECT 26 25 29 30 31
+CONECT 27 25
+CONECT 28 25
+CONECT 29 26 32 33 34
+CONECT 30 26
+CONECT 31 26
+CONECT 32 29
+CONECT 33 29
+CONECT 34 29
+CONECT 35 3 36
+CONECT 36 35 37 38 39
+CONECT 37 36 40 41 42
+CONECT 38 36
+CONECT 39 36
+CONECT 40 37
+CONECT 41 37
+CONECT 42 37
+CONECT 43 6 44 58 59
+CONECT 44 43 45 49
+CONECT 45 44 46 50 51
+CONECT 46 45 47 52 53
+CONECT 47 46 48 60
+CONECT 48 47 49 54 55
+CONECT 49 44 48 56 57
+CONECT 50 45
+CONECT 51 45
+CONECT 52 46
+CONECT 53 46
+CONECT 54 48
+CONECT 55 48
+CONECT 56 49
+CONECT 57 49
+CONECT 58 43
+CONECT 59 43
+CONECT 60 47 61 62 63
+CONECT 61 60
+CONECT 62 60
+CONECT 63 60
+MASTER 0 0 0 0 0 0 0 0 63 0 63 0
+END
diff --git a/hacks/images/molecules/vitaminb6.pdb b/hacks/images/molecules/vitaminb6.pdb
new file mode 100644
index 0000000..c21654b
--- /dev/null
+++ b/hacks/images/molecules/vitaminb6.pdb
@@ -0,0 +1,56 @@
+HEADER Pyridoxine: Vitamin B6
+COMPND c8h11no3
+AUTHOR Created by Dave Woodcock at Okanagan University College
+AUTHOR email:woodcock@okanagan.bc.ca
+AUTHOR Date revised: Fri Sep 1 09:41:05 2000 GENERATED BY BABEL 1.6
+HETATM 1 C 1 0.000 0.000 0.000 1.00 0.00
+HETATM 2 C 1 1.399 0.000 0.000 1.00 0.00
+HETATM 3 C 1 2.095 1.214 0.000 1.00 0.00
+HETATM 4 C 1 1.381 2.418 0.018 1.00 0.00
+HETATM 5 C 1 -0.018 2.390 0.005 1.00 0.00
+HETATM 6 N 1 -0.688 1.189 -0.006 1.00 0.00
+HETATM 7 C 1 -0.754 -1.311 0.010 1.00 0.00
+HETATM 8 O 1 2.079 -1.180 0.011 1.00 0.00
+HETATM 9 C 1 3.608 1.210 0.001 1.00 0.00
+HETATM 10 O 1 4.077 1.576 1.303 1.00 0.00
+HETATM 11 C 1 2.102 3.747 0.058 1.00 0.00
+HETATM 12 O 1 1.197 4.767 0.493 1.00 0.00
+HETATM 13 H 1 -0.583 3.322 0.008 1.00 0.00
+HETATM 14 H 1 -0.438 -1.905 0.867 1.00 0.00
+HETATM 15 H 1 -0.543 -1.858 -0.909 1.00 0.00
+HETATM 16 H 1 -1.824 -1.114 0.078 1.00 0.00
+HETATM 17 H 1 2.145 -1.522 -0.886 1.00 0.00
+HETATM 18 H 1 3.977 1.922 -0.737 1.00 0.00
+HETATM 19 H 1 3.973 0.214 -0.250 1.00 0.00
+HETATM 20 H 1 5.040 1.579 1.315 1.00 0.00
+HETATM 21 H 1 2.472 3.988 -0.939 1.00 0.00
+HETATM 22 H 1 2.940 3.690 0.753 1.00 0.00
+HETATM 23 H 1 1.650 5.617 0.520 1.00 0.00
+CONECT 1 2 6 7
+CONECT 1 2
+CONECT 2 1 3 8
+CONECT 3 2 4 9
+CONECT 3 4
+CONECT 4 3 5 11
+CONECT 5 4 6 13
+CONECT 5 6
+CONECT 6 1 5
+CONECT 7 1 14 15 16
+CONECT 8 2 17
+CONECT 9 3 10 18 19
+CONECT 10 9 20
+CONECT 11 4 12 21 22
+CONECT 12 11 23
+CONECT 13 5
+CONECT 14 7
+CONECT 15 7
+CONECT 16 7
+CONECT 17 8
+CONECT 18 9
+CONECT 19 9
+CONECT 20 10
+CONECT 21 11
+CONECT 22 11
+CONECT 23 12
+MASTER 0 0 0 0 0 0 0 0 23 0 23 0
+END
diff --git a/hacks/images/molecules/vitaminc.pdb b/hacks/images/molecules/vitaminc.pdb
new file mode 100644
index 0000000..d7a7d6a
--- /dev/null
+++ b/hacks/images/molecules/vitaminc.pdb
@@ -0,0 +1,47 @@
+HEADER Ascorbic Acid: Vitamin C
+COMPND vit-c
+AUTHOR Created by Dave Woodcock at Okanagan University College
+AUTHOR email:woodcock@okanagan.bc.ca
+AUTHOR Date revised: Fri Sep 1 09:41:05 2000 GENERATED BY BABEL 1.6
+HETATM 1 C 1 0.000 0.000 0.000 1.00 0.00
+HETATM 2 C 1 1.512 0.000 0.000 1.00 0.00
+HETATM 3 C 1 1.927 1.264 0.000 1.00 0.00
+HETATM 4 C 1 0.730 2.091 0.015 1.00 0.00
+HETATM 5 O 1 -0.382 1.359 0.113 1.00 0.00
+HETATM 6 O 1 0.759 3.270 0.261 1.00 0.00
+HETATM 7 O 1 3.197 1.690 0.245 1.00 0.00
+HETATM 8 O 1 2.283 -1.055 0.386 1.00 0.00
+HETATM 9 H 1 -0.390 -0.463 -0.907 1.00 0.00
+HETATM 10 C 1 -0.565 -0.653 1.264 1.00 0.00
+HETATM 11 H 1 0.050 -1.475 1.629 1.00 0.00
+HETATM 12 O 1 -0.674 0.397 2.229 1.00 0.00
+HETATM 13 C 1 -2.028 -1.077 1.106 1.00 0.00
+HETATM 14 O 1 -2.543 -0.906 2.429 1.00 0.00
+HETATM 15 H 1 3.383 1.620 1.187 1.00 0.00
+HETATM 16 H 1 2.156 -1.784 -0.228 1.00 0.00
+HETATM 17 H 1 -0.774 1.222 1.738 1.00 0.00
+HETATM 18 H 1 -2.112 -2.110 0.766 1.00 0.00
+HETATM 19 H 1 -2.545 -0.402 0.425 1.00 0.00
+HETATM 20 H 1 -2.081 -0.175 2.830 1.00 0.00
+CONECT 1 2 5 9 10
+CONECT 2 1 3 8
+CONECT 3 2 4 7
+CONECT 4 3 5 6 6
+CONECT 5 1 4
+CONECT 6 4 4
+CONECT 7 3 15
+CONECT 8 2 16
+CONECT 9 1
+CONECT 10 1 11 12 13
+CONECT 11 10
+CONECT 12 10 17
+CONECT 13 10 14 18 19
+CONECT 14 13 20
+CONECT 15 7
+CONECT 16 8
+CONECT 17 12
+CONECT 18 13
+CONECT 19 13
+CONECT 20 14
+MASTER 0 0 0 0 0 0 0 0 20 0 20 0
+END
diff --git a/hacks/images/molecules/vx.pdb b/hacks/images/molecules/vx.pdb
new file mode 100644
index 0000000..8b653cb
--- /dev/null
+++ b/hacks/images/molecules/vx.pdb
@@ -0,0 +1,92 @@
+HEADER VX: a chemical warfare agent, cholinesterase inhibitor
+COMPND VX
+AUTHOR Created by Dave Woodcock at Okanagan University College
+AUTHOR email:woodcock@okanagan.bc.ca
+AUTHOR Date revised: Fri Sep 1 09:41:05 2000 GENERATED BY BABEL 1.6
+HETATM 1 C 1 0.000 0.000 0.000 1.00 0.00
+HETATM 2 C 1 1.541 0.000 0.000 1.00 0.00
+HETATM 3 O 1 2.000 1.333 0.000 1.00 0.00
+HETATM 4 P 1 3.580 1.768 -0.723 1.00 0.00
+HETATM 5 O 1 3.908 3.507 -0.453 1.00 0.00
+HETATM 6 C 1 3.536 1.434 -2.522 1.00 0.00
+HETATM 7 S 1 5.089 0.633 0.149 1.00 0.00
+HETATM 8 C 1 6.652 1.113 -0.581 1.00 0.00
+HETATM 9 C 1 7.173 2.394 0.105 1.00 0.00
+HETATM 10 N 1 8.475 2.827 -0.436 1.00 0.00
+HETATM 11 C 1 9.247 3.677 0.492 1.00 0.00
+HETATM 12 C 1 9.948 2.776 1.531 1.00 0.00
+HETATM 13 C 1 8.388 4.729 1.230 1.00 0.00
+HETATM 14 C 1 8.465 3.210 -1.863 1.00 0.00
+HETATM 15 C 1 9.881 3.493 -2.414 1.00 0.00
+HETATM 16 C 1 7.562 4.422 -2.181 1.00 0.00
+HETATM 17 H 1 -0.362 0.520 0.887 1.00 0.00
+HETATM 18 H 1 -0.367 -1.026 0.006 1.00 0.00
+HETATM 19 H 1 -0.363 0.510 -0.892 1.00 0.00
+HETATM 20 H 1 1.902 -0.524 -0.885 1.00 0.00
+HETATM 21 H 1 1.904 -0.507 0.894 1.00 0.00
+HETATM 22 H 1 2.728 2.007 -2.976 1.00 0.00
+HETATM 23 H 1 3.367 0.370 -2.691 1.00 0.00
+HETATM 24 H 1 4.485 1.727 -2.970 1.00 0.00
+HETATM 25 H 1 6.489 1.278 -1.644 1.00 0.00
+HETATM 26 H 1 7.377 0.311 -0.444 1.00 0.00
+HETATM 27 H 1 7.282 2.161 1.162 1.00 0.00
+HETATM 28 H 1 6.438 3.191 0.006 1.00 0.00
+HETATM 29 H 1 10.030 4.205 -0.044 1.00 0.00
+HETATM 30 H 1 10.539 2.021 1.012 1.00 0.00
+HETATM 31 H 1 9.216 2.282 2.169 1.00 0.00
+HETATM 32 H 1 10.608 3.383 2.151 1.00 0.00
+HETATM 33 H 1 9.041 5.368 1.825 1.00 0.00
+HETATM 34 H 1 7.675 4.243 1.895 1.00 0.00
+HETATM 35 H 1 7.847 5.345 0.515 1.00 0.00
+HETATM 36 H 1 8.094 2.362 -2.434 1.00 0.00
+HETATM 37 H 1 10.574 2.735 -2.048 1.00 0.00
+HETATM 38 H 1 10.223 4.483 -2.116 1.00 0.00
+HETATM 39 H 1 9.853 3.454 -3.503 1.00 0.00
+HETATM 40 H 1 7.928 5.308 -1.665 1.00 0.00
+HETATM 41 H 1 6.533 4.222 -1.886 1.00 0.00
+HETATM 42 H 1 7.584 4.609 -3.255 1.00 0.00
+CONECT 1 2 17 18 19
+CONECT 2 1 3 20 21
+CONECT 3 2 4
+CONECT 4 3 5 6 7
+CONECT 4 5
+CONECT 5 4
+CONECT 6 4 22 23 24
+CONECT 7 4 8
+CONECT 8 7 9 25 26
+CONECT 9 8 10 27 28
+CONECT 10 9 11 14
+CONECT 11 10 12 13 29
+CONECT 12 11 30 31 32
+CONECT 13 11 33 34 35
+CONECT 14 10 15 16 36
+CONECT 15 14 37 38 39
+CONECT 16 14 40 41 42
+CONECT 17 1
+CONECT 18 1
+CONECT 19 1
+CONECT 20 2
+CONECT 21 2
+CONECT 22 6
+CONECT 23 6
+CONECT 24 6
+CONECT 25 8
+CONECT 26 8
+CONECT 27 9
+CONECT 28 9
+CONECT 29 11
+CONECT 30 12
+CONECT 31 12
+CONECT 32 12
+CONECT 33 13
+CONECT 34 13
+CONECT 35 13
+CONECT 36 14
+CONECT 37 15
+CONECT 38 15
+CONECT 39 15
+CONECT 40 16
+CONECT 41 16
+CONECT 42 16
+MASTER 0 0 0 0 0 0 0 0 42 0 42 0
+END
diff --git a/hacks/images/noseguy/nose-f1.png b/hacks/images/noseguy/nose-f1.png
new file mode 100644
index 0000000..3be8f4c
--- /dev/null
+++ b/hacks/images/noseguy/nose-f1.png
Binary files differ
diff --git a/hacks/images/noseguy/nose-f2.png b/hacks/images/noseguy/nose-f2.png
new file mode 100644
index 0000000..5e45842
--- /dev/null
+++ b/hacks/images/noseguy/nose-f2.png
Binary files differ
diff --git a/hacks/images/noseguy/nose-f3.png b/hacks/images/noseguy/nose-f3.png
new file mode 100644
index 0000000..75a9e3a
--- /dev/null
+++ b/hacks/images/noseguy/nose-f3.png
Binary files differ
diff --git a/hacks/images/noseguy/nose-f4.png b/hacks/images/noseguy/nose-f4.png
new file mode 100644
index 0000000..2573d8e
--- /dev/null
+++ b/hacks/images/noseguy/nose-f4.png
Binary files differ
diff --git a/hacks/images/noseguy/nose-l1.png b/hacks/images/noseguy/nose-l1.png
new file mode 100644
index 0000000..bfd2efd
--- /dev/null
+++ b/hacks/images/noseguy/nose-l1.png
Binary files differ
diff --git a/hacks/images/noseguy/nose-l2.png b/hacks/images/noseguy/nose-l2.png
new file mode 100644
index 0000000..2351865
--- /dev/null
+++ b/hacks/images/noseguy/nose-l2.png
Binary files differ
diff --git a/hacks/images/noseguy/nose-r1.png b/hacks/images/noseguy/nose-r1.png
new file mode 100644
index 0000000..41d8584
--- /dev/null
+++ b/hacks/images/noseguy/nose-r1.png
Binary files differ
diff --git a/hacks/images/noseguy/nose-r2.png b/hacks/images/noseguy/nose-r2.png
new file mode 100644
index 0000000..9513fe3
--- /dev/null
+++ b/hacks/images/noseguy/nose-r2.png
Binary files differ
diff --git a/hacks/images/osx_10_2.png b/hacks/images/osx_10_2.png
new file mode 100644
index 0000000..1db7911
--- /dev/null
+++ b/hacks/images/osx_10_2.png
Binary files differ
diff --git a/hacks/images/osx_10_3.png b/hacks/images/osx_10_3.png
new file mode 100644
index 0000000..53b3a2b
--- /dev/null
+++ b/hacks/images/osx_10_3.png
Binary files differ
diff --git a/hacks/images/pacman.png b/hacks/images/pacman.png
new file mode 100644
index 0000000..b5d3757
--- /dev/null
+++ b/hacks/images/pacman.png
Binary files differ
diff --git a/hacks/images/ransomware.png b/hacks/images/ransomware.png
new file mode 100644
index 0000000..ec2ea71
--- /dev/null
+++ b/hacks/images/ransomware.png
Binary files differ
diff --git a/hacks/images/sball-bg.png b/hacks/images/sball-bg.png
new file mode 100644
index 0000000..54bf9b5
--- /dev/null
+++ b/hacks/images/sball-bg.png
Binary files differ
diff --git a/hacks/images/sball.png b/hacks/images/sball.png
new file mode 100644
index 0000000..c3a8366
--- /dev/null
+++ b/hacks/images/sball.png
Binary files differ
diff --git a/hacks/images/scales.png b/hacks/images/scales.png
new file mode 100644
index 0000000..be74f1d
--- /dev/null
+++ b/hacks/images/scales.png
Binary files differ
diff --git a/hacks/images/sclera.png b/hacks/images/sclera.png
new file mode 100644
index 0000000..926b00f
--- /dev/null
+++ b/hacks/images/sclera.png
Binary files differ
diff --git a/hacks/images/sea-texture.png b/hacks/images/sea-texture.png
new file mode 100644
index 0000000..228368d
--- /dev/null
+++ b/hacks/images/sea-texture.png
Binary files differ
diff --git a/hacks/images/som.png b/hacks/images/som.png
new file mode 100644
index 0000000..f281e8d
--- /dev/null
+++ b/hacks/images/som.png
Binary files differ
diff --git a/hacks/images/start.png b/hacks/images/start.png
new file mode 100644
index 0000000..bfe92e5
--- /dev/null
+++ b/hacks/images/start.png
Binary files differ
diff --git a/hacks/images/testcard_bbcf.png b/hacks/images/testcard_bbcf.png
new file mode 100644
index 0000000..2a71585
--- /dev/null
+++ b/hacks/images/testcard_bbcf.png
Binary files differ
diff --git a/hacks/images/testcard_pm5544.png b/hacks/images/testcard_pm5544.png
new file mode 100644
index 0000000..37a292a
--- /dev/null
+++ b/hacks/images/testcard_pm5544.png
Binary files differ
diff --git a/hacks/images/testcard_rca.png b/hacks/images/testcard_rca.png
new file mode 100644
index 0000000..220f616
--- /dev/null
+++ b/hacks/images/testcard_rca.png
Binary files differ
diff --git a/hacks/images/timetunnel0.png b/hacks/images/timetunnel0.png
new file mode 100644
index 0000000..3ddb91e
--- /dev/null
+++ b/hacks/images/timetunnel0.png
Binary files differ
diff --git a/hacks/images/timetunnel1.png b/hacks/images/timetunnel1.png
new file mode 100644
index 0000000..61ad9e7
--- /dev/null
+++ b/hacks/images/timetunnel1.png
Binary files differ
diff --git a/hacks/images/timetunnel2.png b/hacks/images/timetunnel2.png
new file mode 100644
index 0000000..f1c2be8
--- /dev/null
+++ b/hacks/images/timetunnel2.png
Binary files differ
diff --git a/hacks/images/toast.png b/hacks/images/toast.png
new file mode 100644
index 0000000..a54c919
--- /dev/null
+++ b/hacks/images/toast.png
Binary files differ
diff --git a/hacks/images/tree.png b/hacks/images/tree.png
new file mode 100644
index 0000000..d3b9e36
--- /dev/null
+++ b/hacks/images/tree.png
Binary files differ
diff --git a/hacks/images/tunnel0.png b/hacks/images/tunnel0.png
new file mode 100644
index 0000000..cbbb372
--- /dev/null
+++ b/hacks/images/tunnel0.png
Binary files differ
diff --git a/hacks/images/tunnel1.png b/hacks/images/tunnel1.png
new file mode 100644
index 0000000..1f4ee22
--- /dev/null
+++ b/hacks/images/tunnel1.png
Binary files differ
diff --git a/hacks/images/tunnel2.png b/hacks/images/tunnel2.png
new file mode 100644
index 0000000..91f437f
--- /dev/null
+++ b/hacks/images/tunnel2.png
Binary files differ
diff --git a/hacks/images/tunnel3.png b/hacks/images/tunnel3.png
new file mode 100644
index 0000000..ecdf27d
--- /dev/null
+++ b/hacks/images/tunnel3.png
Binary files differ
diff --git a/hacks/images/tunnel4.png b/hacks/images/tunnel4.png
new file mode 100644
index 0000000..a844410
--- /dev/null
+++ b/hacks/images/tunnel4.png
Binary files differ
diff --git a/hacks/images/tunnel5.png b/hacks/images/tunnel5.png
new file mode 100644
index 0000000..45785e0
--- /dev/null
+++ b/hacks/images/tunnel5.png
Binary files differ
diff --git a/hacks/images/tunnelstar.png b/hacks/images/tunnelstar.png
new file mode 100644
index 0000000..995807c
--- /dev/null
+++ b/hacks/images/tunnelstar.png
Binary files differ
diff --git a/hacks/images/win10_spinner.gif b/hacks/images/win10_spinner.gif
new file mode 100644
index 0000000..7e37922
--- /dev/null
+++ b/hacks/images/win10_spinner.gif
Binary files differ
diff --git a/hacks/images/wood.png b/hacks/images/wood.png
new file mode 100644
index 0000000..6e52af7
--- /dev/null
+++ b/hacks/images/wood.png
Binary files differ
diff --git a/hacks/images/wood2.png b/hacks/images/wood2.png
new file mode 100644
index 0000000..2504877
--- /dev/null
+++ b/hacks/images/wood2.png
Binary files differ