diff --git a/iocBoot/iocvxWorks/13element.cmd b/iocBoot/iocvxWorks/13element.cmd
new file mode 100644
index 0000000000000000000000000000000000000000..631f648514ff53805b25ef7bd6e119fe60de15e4
--- /dev/null
+++ b/iocBoot/iocvxWorks/13element.cmd
@@ -0,0 +1,9 @@
+# AIMConfig(serverName, int etherAddr, int port, int maxChans, 
+#	int maxSignals, int maxSequences, etherDev, queueSize)
+AIMConfig("AIM2/1", 0x98c, 1, 4000, 4, 1, "ei0", 100)
+AIMConfig("AIM2/2", 0x98d, 2, 4000, 4, 1, "ei0", 100)
+AIMConfig("AIM3/1", 0x98b, 1, 4000, 4, 1, "ei0", 100)
+AIMConfig("AIM3/2", 0x903, 2, 4000, 4, 1, "ei0", 100)
+
+dbLoadRecords("mcaApp/Db/13element.db","P=xxx:med:,N=2000", mca)
+dbLoadTemplate("13element.substitutions", mca)
diff --git a/iocBoot/iocvxWorks/13element.substitutions b/iocBoot/iocvxWorks/13element.substitutions
new file mode 100644
index 0000000000000000000000000000000000000000..8a6f615e373bfee5f77a423115ed66be5c91ba52
--- /dev/null
+++ b/iocBoot/iocvxWorks/13element.substitutions
@@ -0,0 +1,55 @@
+file "$(MCA)/mcaApp/Db/simple_mca.db"
+{
+pattern
+{P           M       DTYP           INP         PREC  CHANS}
+{xxx:med:   mca1  "MPF MCA"   "#C0 S0 @AIM2/1"    3  2048}
+{xxx:med:   mca2  "MPF MCA"   "#C0 S1 @AIM2/1"    3  2048}
+{xxx:med:   mca3  "MPF MCA"   "#C0 S2 @AIM2/1"    3  2048}
+{xxx:med:   mca4  "MPF MCA"   "#C0 S0 @AIM2/2"    3  2048}
+{xxx:med:   mca5  "MPF MCA"   "#C0 S1 @AIM2/2"    3  2048}
+{xxx:med:   mca6  "MPF MCA"   "#C0 S2 @AIM2/2"    3  2048}
+{xxx:med:   mca7  "MPF MCA"   "#C0 S0 @AIM3/1"    3  2048}
+{xxx:med:   mca8  "MPF MCA"   "#C0 S1 @AIM3/1"    3  2048}
+{xxx:med:   mca9  "MPF MCA"   "#C0 S2 @AIM3/1"    3  2048}
+{xxx:med:   mca10 "MPF MCA"   "#C0 S0 @AIM3/2"    3  2048}
+{xxx:med:   mca11 "MPF MCA"   "#C0 S1 @AIM3/3"    3  2048}
+{xxx:med:   mca12 "MPF MCA"   "#C0 S2 @AIM3/4"    3  2048}
+{xxx:med:   mca13 "MPF MCA"   "#C0 S3 @AIM3/2"    3  2048}
+{xxx:med:   mca0  "Soft Channel"   "#C0 S0 @"     3  2048}
+}
+
+file "$(MCA)/mcaApp/Db/icb_amp.db"
+{
+pattern
+{P			AMP		CARD	SERVER		ADDR}
+{xxx:med:	amp1	0		"AIM2/1"	1}
+{xxx:med:	amp2	0		"AIM2/1"	2}
+{xxx:med:	amp3	0		"AIM2/1"	3}
+{xxx:med:	amp4	0		"AIM2/1"	4}
+{xxx:med:	amp5	0		"AIM2/1"	5}
+{xxx:med:	amp6	0		"AIM2/1"	6}
+{xxx:med:	amp7	0		"AIM2/1"	8}
+{xxx:med:	amp8	0		"AIM2/1"	9}
+{xxx:med:	amp9	0		"AIM3/1"	1}
+{xxx:med:	amp10	0		"AIM3/1"	2}
+{xxx:med:	amp11	0		"AIM3/1"	3}
+{xxx:med:	amp12	0		"AIM3/1"	4}
+{xxx:med:	amp13	0		"AIM3/1"	5}
+}
+
+file "$(MCA)/mcaApp/Db/icb_adc.db"
+{
+pattern
+{P			ADC		CARD	SERVER		ADDR}
+{xxx:med:	adc1	0		"AIM2/1"	B}
+{xxx:med:	adc2	0		"AIM2/1"	0}
+{xxx:med:	adc3	0		"AIM3/1"	B}
+{xxx:med:	adc4	0		"AIM3/1"	7}
+}
+
+file "$(MCA)/mcaApp/Db/icb_hvps.db"
+{
+pattern
+{P			HVPS	LIMIT	CARD	SERVER		ADDR}
+{xxx:med:	hvps1	1000	0		"AIM3/1"	A}
+}
diff --git a/iocBoot/iocvxWorks/3element.cmd b/iocBoot/iocvxWorks/3element.cmd
new file mode 100644
index 0000000000000000000000000000000000000000..738afd8628a3302ce2d718059eeca0c86b81cc1e
--- /dev/null
+++ b/iocBoot/iocvxWorks/3element.cmd
@@ -0,0 +1,8 @@
+# AIMConfig(serverName, int etherAddr, int port, int maxChans, 
+#	int maxSignals, int maxSequences, etherDev, queueSize)
+AIMConfig("AIM1/1", 0xa78, 1, 2048, 1, 1, "ei0", 100)
+AIMConfig("AIM1/2", 0xa78, 2, 2048, 1, 1, "ei0", 100)
+AIMConfig("AIM2/1", 0xa79, 1, 2048, 1, 1, "ei0", 100)
+
+dbLoadRecords("mcaApp/Db/3element.db","P=xxx:med:,N=2000", mca)
+dbLoadTemplate("3element.substitutions", mca)
diff --git a/iocBoot/iocvxWorks/3element.substitutions b/iocBoot/iocvxWorks/3element.substitutions
new file mode 100644
index 0000000000000000000000000000000000000000..07ea3439d74cf16a7fd288cf669980b0f22f846f
--- /dev/null
+++ b/iocBoot/iocvxWorks/3element.substitutions
@@ -0,0 +1,39 @@
+file "$(MCA)/mcaApp/Db/simple_mca.db"
+{
+pattern
+{P           M       DTYP           INP         PREC  CHANS}
+{xxx:med:   mca1  "MPF MCA"   "#C0 S0 @AIM2/1"    3  2048}
+{xxx:med:   mca2  "MPF MCA"   "#C0 S1 @AIM2/1"    3  2048}
+{xxx:med:   mca3  "MPF MCA"   "#C0 S2 @AIM2/1"    3  2048}
+{xxx:med:   mca0  "Soft Channel"   "#C0 S0 @"     3  2048}
+}
+
+#file "$(MCA)/mcaApp/Db/icb_amp.db"
+#{
+#pattern
+#{P			AMP		CARD	SERVER		ADDR}
+#{xxx:med:	amp1	0		"AIM2/1"	1}
+#{xxx:med:	amp2	0		"AIM2/1"	2}
+#{xxx:med:	amp3	0		"AIM2/1"	3}
+#}
+
+file "$(MCA)/mcaApp/Db/icb_adc.db"
+{
+pattern
+{P			ADC		CARD	SERVER		ADDR}
+{xxx:med:	adc1	0		"AIM2/1"	B}
+}
+
+#file "$(MCA)/mcaApp/Db/icb_hvps.db"
+#{
+#pattern
+#{P			HVPS	LIMIT	CARD	SERVER		ADDR}
+#{xxx:med:	hvps1	1000	0		"AIM3/1"	A}
+#}
+
+#file "$(MCA)/mcaApp/Db/icb_tca.db"
+#{
+#pattern
+#{P,          TCA,	CARD	SERVER		ADDR}
+#{xxx:med:,  tca1,	0		"AIM3/1"	B}
+#}
diff --git a/iocBoot/iocvxWorks/MPFconfig.cmd b/iocBoot/iocvxWorks/MPFconfig.cmd
new file mode 100644
index 0000000000000000000000000000000000000000..f224d57c8da9fa43cc59edd4ae6cf995c477e02d
--- /dev/null
+++ b/iocBoot/iocvxWorks/MPFconfig.cmd
@@ -0,0 +1,6 @@
+# For use with dual CPU board configurations where
+# one board is the EPICS processor and the other
+# board is the MPF server processor.
+# Set "Remote_IP" to the MPF server processor.
+Remote_IP = "#.#.#.#"
+
diff --git a/iocBoot/iocvxWorks/Makefile b/iocBoot/iocvxWorks/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..509badf952b673b0c7ac08dccd5c8fe4aee7dc20
--- /dev/null
+++ b/iocBoot/iocvxWorks/Makefile
@@ -0,0 +1,5 @@
+TOP = ../..
+include $(TOP)/configure/CONFIG
+ARCH = vxWorks-ppc604
+TARGETS = cdCommands
+include $(TOP)/configure/RULES.ioc
diff --git a/iocBoot/iocvxWorks/README b/iocBoot/iocvxWorks/README
new file mode 100644
index 0000000000000000000000000000000000000000..98b48058a456269c471248089a3e40f3a5dac1be
--- /dev/null
+++ b/iocBoot/iocvxWorks/README
@@ -0,0 +1,8 @@
+Assuming the EPICS_HOST_ARCH environment variable is set correctly,
+start the ioc from this directory by executing the following command.
+
+../../bin/${EPICS_HOST_ARCH}/xxx st.cmd.solaris
+OR,
+../../bin/${EPICS_HOST_ARCH}/xxx st.cmd.linux
+
+
diff --git a/iocBoot/iocvxWorks/auto_13mca_settings.req b/iocBoot/iocvxWorks/auto_13mca_settings.req
new file mode 100644
index 0000000000000000000000000000000000000000..66f1f35ed160214a1234f28eb60c4b30ce400836
--- /dev/null
+++ b/iocBoot/iocvxWorks/auto_13mca_settings.req
@@ -0,0 +1,959 @@
+xxx:med:PresetReal
+xxx:med:StatusAll.SCAN
+xxx:med:ReadAll.SCAN
+xxx:med:EnableClientWait
+xxx:med:mcaSumEnable
+
+xxx:med:mca1.CALO
+xxx:med:mca1.CALS
+xxx:med:mca1.CALQ
+xxx:med:mca1.TTH
+xxx:med:mca1.R0NM
+xxx:med:mca1.R0LO
+xxx:med:mca1.R0HI
+xxx:med:mca1.R0BG
+xxx:med:mca1.R0IP
+xxx:med:mca1.R0P
+xxx:med:mca1.R1NM
+xxx:med:mca1.R1LO
+xxx:med:mca1.R1HI
+xxx:med:mca1.R1BG
+xxx:med:mca1.R1IP
+xxx:med:mca1.R1P
+xxx:med:mca1.R2NM
+xxx:med:mca1.R2LO
+xxx:med:mca1.R2HI
+xxx:med:mca1.R2BG
+xxx:med:mca1.R2IP
+xxx:med:mca1.R2P
+xxx:med:mca1.R3NM
+xxx:med:mca1.R3LO
+xxx:med:mca1.R3HI
+xxx:med:mca1.R3BG
+xxx:med:mca1.R3IP
+xxx:med:mca1.R3P
+xxx:med:mca1.R4NM
+xxx:med:mca1.R4LO
+xxx:med:mca1.R4HI
+xxx:med:mca1.R4BG
+xxx:med:mca1.R4IP
+xxx:med:mca1.R4P
+xxx:med:mca1.R5NM
+xxx:med:mca1.R5LO
+xxx:med:mca1.R5HI
+xxx:med:mca1.R5BG
+xxx:med:mca1.R5IP
+xxx:med:mca1.R5P
+xxx:med:mca1.R6NM
+xxx:med:mca1.R6LO
+xxx:med:mca1.R6HI
+xxx:med:mca1.R6BG
+xxx:med:mca1.R6IP
+xxx:med:mca1.R6P
+xxx:med:mca1.R7NM
+xxx:med:mca1.R7LO
+xxx:med:mca1.R7HI
+xxx:med:mca1.R7BG
+xxx:med:mca1.R7IP
+xxx:med:mca1.R7P
+xxx:med:mca1.R8NM
+xxx:med:mca1.R8LO
+xxx:med:mca1.R8HI
+xxx:med:mca1.R8BG
+xxx:med:mca1.R8IP
+xxx:med:mca1.R8P
+xxx:med:mca1.R9NM
+xxx:med:mca1.R9LO
+xxx:med:mca1.R9HI
+xxx:med:mca1.R9BG
+xxx:med:mca1.R9IP
+xxx:med:mca1.R9P
+
+xxx:med:mca2.CALO
+xxx:med:mca2.CALS
+xxx:med:mca2.CALQ
+xxx:med:mca2.TTH
+xxx:med:mca2.R0NM
+xxx:med:mca2.R0LO
+xxx:med:mca2.R0HI
+xxx:med:mca2.R0BG
+xxx:med:mca2.R0IP
+xxx:med:mca2.R0P
+xxx:med:mca2.R1NM
+xxx:med:mca2.R1LO
+xxx:med:mca2.R1HI
+xxx:med:mca2.R1BG
+xxx:med:mca2.R1IP
+xxx:med:mca2.R1P
+xxx:med:mca2.R2NM
+xxx:med:mca2.R2LO
+xxx:med:mca2.R2HI
+xxx:med:mca2.R2BG
+xxx:med:mca2.R2IP
+xxx:med:mca2.R2P
+xxx:med:mca2.R3NM
+xxx:med:mca2.R3LO
+xxx:med:mca2.R3HI
+xxx:med:mca2.R3BG
+xxx:med:mca2.R3IP
+xxx:med:mca2.R3P
+xxx:med:mca2.R4NM
+xxx:med:mca2.R4LO
+xxx:med:mca2.R4HI
+xxx:med:mca2.R4BG
+xxx:med:mca2.R4IP
+xxx:med:mca2.R4P
+xxx:med:mca2.R5NM
+xxx:med:mca2.R5LO
+xxx:med:mca2.R5HI
+xxx:med:mca2.R5BG
+xxx:med:mca2.R5IP
+xxx:med:mca2.R5P
+xxx:med:mca2.R6NM
+xxx:med:mca2.R6LO
+xxx:med:mca2.R6HI
+xxx:med:mca2.R6BG
+xxx:med:mca2.R6IP
+xxx:med:mca2.R6P
+xxx:med:mca2.R7NM
+xxx:med:mca2.R7LO
+xxx:med:mca2.R7HI
+xxx:med:mca2.R7BG
+xxx:med:mca2.R7IP
+xxx:med:mca2.R7P
+xxx:med:mca2.R8NM
+xxx:med:mca2.R8LO
+xxx:med:mca2.R8HI
+xxx:med:mca2.R8BG
+xxx:med:mca2.R8IP
+xxx:med:mca2.R8P
+xxx:med:mca2.R9NM
+xxx:med:mca2.R9LO
+xxx:med:mca2.R9HI
+xxx:med:mca2.R9BG
+xxx:med:mca2.R9IP
+xxx:med:mca2.R9P
+
+xxx:med:mca3.CALO
+xxx:med:mca3.CALS
+xxx:med:mca3.CALQ
+xxx:med:mca3.TTH
+xxx:med:mca3.R0NM
+xxx:med:mca3.R0LO
+xxx:med:mca3.R0HI
+xxx:med:mca3.R0BG
+xxx:med:mca3.R0IP
+xxx:med:mca3.R0P
+xxx:med:mca3.R1NM
+xxx:med:mca3.R1LO
+xxx:med:mca3.R1HI
+xxx:med:mca3.R1BG
+xxx:med:mca3.R1IP
+xxx:med:mca3.R1P
+xxx:med:mca3.R2NM
+xxx:med:mca3.R2LO
+xxx:med:mca3.R2HI
+xxx:med:mca3.R2BG
+xxx:med:mca3.R2IP
+xxx:med:mca3.R2P
+xxx:med:mca3.R3NM
+xxx:med:mca3.R3LO
+xxx:med:mca3.R3HI
+xxx:med:mca3.R3BG
+xxx:med:mca3.R3IP
+xxx:med:mca3.R3P
+xxx:med:mca3.R4NM
+xxx:med:mca3.R4LO
+xxx:med:mca3.R4HI
+xxx:med:mca3.R4BG
+xxx:med:mca3.R4IP
+xxx:med:mca3.R4P
+xxx:med:mca3.R5NM
+xxx:med:mca3.R5LO
+xxx:med:mca3.R5HI
+xxx:med:mca3.R5BG
+xxx:med:mca3.R5IP
+xxx:med:mca3.R5P
+xxx:med:mca3.R6NM
+xxx:med:mca3.R6LO
+xxx:med:mca3.R6HI
+xxx:med:mca3.R6BG
+xxx:med:mca3.R6IP
+xxx:med:mca3.R6P
+xxx:med:mca3.R7NM
+xxx:med:mca3.R7LO
+xxx:med:mca3.R7HI
+xxx:med:mca3.R7BG
+xxx:med:mca3.R7IP
+xxx:med:mca3.R7P
+xxx:med:mca3.R8NM
+xxx:med:mca3.R8LO
+xxx:med:mca3.R8HI
+xxx:med:mca3.R8BG
+xxx:med:mca3.R8IP
+xxx:med:mca3.R8P
+xxx:med:mca3.R9NM
+xxx:med:mca3.R9LO
+xxx:med:mca3.R9HI
+xxx:med:mca3.R9BG
+xxx:med:mca3.R9IP
+xxx:med:mca3.R9P
+
+xxx:med:mca4.CALO
+xxx:med:mca4.CALS
+xxx:med:mca4.CALQ
+xxx:med:mca4.TTH
+xxx:med:mca4.R0NM
+xxx:med:mca4.R0LO
+xxx:med:mca4.R0HI
+xxx:med:mca4.R0BG
+xxx:med:mca4.R0IP
+xxx:med:mca4.R0P
+xxx:med:mca4.R1NM
+xxx:med:mca4.R1LO
+xxx:med:mca4.R1HI
+xxx:med:mca4.R1BG
+xxx:med:mca4.R1IP
+xxx:med:mca4.R1P
+xxx:med:mca4.R2NM
+xxx:med:mca4.R2LO
+xxx:med:mca4.R2HI
+xxx:med:mca4.R2BG
+xxx:med:mca4.R2IP
+xxx:med:mca4.R2P
+xxx:med:mca4.R3NM
+xxx:med:mca4.R3LO
+xxx:med:mca4.R3HI
+xxx:med:mca4.R3BG
+xxx:med:mca4.R3IP
+xxx:med:mca4.R3P
+xxx:med:mca4.R4NM
+xxx:med:mca4.R4LO
+xxx:med:mca4.R4HI
+xxx:med:mca4.R4BG
+xxx:med:mca4.R4IP
+xxx:med:mca4.R4P
+xxx:med:mca4.R5NM
+xxx:med:mca4.R5LO
+xxx:med:mca4.R5HI
+xxx:med:mca4.R5BG
+xxx:med:mca4.R5IP
+xxx:med:mca4.R5P
+xxx:med:mca4.R6NM
+xxx:med:mca4.R6LO
+xxx:med:mca4.R6HI
+xxx:med:mca4.R6BG
+xxx:med:mca4.R6IP
+xxx:med:mca4.R6P
+xxx:med:mca4.R7NM
+xxx:med:mca4.R7LO
+xxx:med:mca4.R7HI
+xxx:med:mca4.R7BG
+xxx:med:mca4.R7IP
+xxx:med:mca4.R7P
+xxx:med:mca4.R8NM
+xxx:med:mca4.R8LO
+xxx:med:mca4.R8HI
+xxx:med:mca4.R8BG
+xxx:med:mca4.R8IP
+xxx:med:mca4.R8P
+xxx:med:mca4.R9NM
+xxx:med:mca4.R9LO
+xxx:med:mca4.R9HI
+xxx:med:mca4.R9BG
+xxx:med:mca4.R9IP
+xxx:med:mca4.R9P
+
+xxx:med:mca5.CALO
+xxx:med:mca5.CALS
+xxx:med:mca5.CALQ
+xxx:med:mca5.TTH
+xxx:med:mca5.R0NM
+xxx:med:mca5.R0LO
+xxx:med:mca5.R0HI
+xxx:med:mca5.R0BG
+xxx:med:mca5.R0IP
+xxx:med:mca5.R0P
+xxx:med:mca5.R1NM
+xxx:med:mca5.R1LO
+xxx:med:mca5.R1HI
+xxx:med:mca5.R1BG
+xxx:med:mca5.R1IP
+xxx:med:mca5.R1P
+xxx:med:mca5.R2NM
+xxx:med:mca5.R2LO
+xxx:med:mca5.R2HI
+xxx:med:mca5.R2BG
+xxx:med:mca5.R2IP
+xxx:med:mca5.R2P
+xxx:med:mca5.R3NM
+xxx:med:mca5.R3LO
+xxx:med:mca5.R3HI
+xxx:med:mca5.R3BG
+xxx:med:mca5.R3IP
+xxx:med:mca5.R3P
+xxx:med:mca5.R4NM
+xxx:med:mca5.R4LO
+xxx:med:mca5.R4HI
+xxx:med:mca5.R4BG
+xxx:med:mca5.R4IP
+xxx:med:mca5.R4P
+xxx:med:mca5.R5NM
+xxx:med:mca5.R5LO
+xxx:med:mca5.R5HI
+xxx:med:mca5.R5BG
+xxx:med:mca5.R5IP
+xxx:med:mca5.R5P
+xxx:med:mca5.R6NM
+xxx:med:mca5.R6LO
+xxx:med:mca5.R6HI
+xxx:med:mca5.R6BG
+xxx:med:mca5.R6IP
+xxx:med:mca5.R6P
+xxx:med:mca5.R7NM
+xxx:med:mca5.R7LO
+xxx:med:mca5.R7HI
+xxx:med:mca5.R7BG
+xxx:med:mca5.R7IP
+xxx:med:mca5.R7P
+xxx:med:mca5.R8NM
+xxx:med:mca5.R8LO
+xxx:med:mca5.R8HI
+xxx:med:mca5.R8BG
+xxx:med:mca5.R8IP
+xxx:med:mca5.R8P
+xxx:med:mca5.R9NM
+xxx:med:mca5.R9LO
+xxx:med:mca5.R9HI
+xxx:med:mca5.R9BG
+xxx:med:mca5.R9IP
+xxx:med:mca5.R9P
+
+xxx:med:mca6.CALO
+xxx:med:mca6.CALS
+xxx:med:mca6.CALQ
+xxx:med:mca6.TTH
+xxx:med:mca6.R0NM
+xxx:med:mca6.R0LO
+xxx:med:mca6.R0HI
+xxx:med:mca6.R0BG
+xxx:med:mca6.R0IP
+xxx:med:mca6.R0P
+xxx:med:mca6.R1NM
+xxx:med:mca6.R1LO
+xxx:med:mca6.R1HI
+xxx:med:mca6.R1BG
+xxx:med:mca6.R1IP
+xxx:med:mca6.R1P
+xxx:med:mca6.R2NM
+xxx:med:mca6.R2LO
+xxx:med:mca6.R2HI
+xxx:med:mca6.R2BG
+xxx:med:mca6.R2IP
+xxx:med:mca6.R2P
+xxx:med:mca6.R3NM
+xxx:med:mca6.R3LO
+xxx:med:mca6.R3HI
+xxx:med:mca6.R3BG
+xxx:med:mca6.R3IP
+xxx:med:mca6.R3P
+xxx:med:mca6.R4NM
+xxx:med:mca6.R4LO
+xxx:med:mca6.R4HI
+xxx:med:mca6.R4BG
+xxx:med:mca6.R4IP
+xxx:med:mca6.R4P
+xxx:med:mca6.R5NM
+xxx:med:mca6.R5LO
+xxx:med:mca6.R5HI
+xxx:med:mca6.R5BG
+xxx:med:mca6.R5IP
+xxx:med:mca6.R5P
+xxx:med:mca6.R6NM
+xxx:med:mca6.R6LO
+xxx:med:mca6.R6HI
+xxx:med:mca6.R6BG
+xxx:med:mca6.R6IP
+xxx:med:mca6.R6P
+xxx:med:mca6.R7NM
+xxx:med:mca6.R7LO
+xxx:med:mca6.R7HI
+xxx:med:mca6.R7BG
+xxx:med:mca6.R7IP
+xxx:med:mca6.R7P
+xxx:med:mca6.R8NM
+xxx:med:mca6.R8LO
+xxx:med:mca6.R8HI
+xxx:med:mca6.R8BG
+xxx:med:mca6.R8IP
+xxx:med:mca6.R8P
+xxx:med:mca6.R9NM
+xxx:med:mca6.R9LO
+xxx:med:mca6.R9HI
+xxx:med:mca6.R9BG
+xxx:med:mca6.R9IP
+xxx:med:mca6.R9P
+
+xxx:med:mca7.CALO
+xxx:med:mca7.CALS
+xxx:med:mca7.CALQ
+xxx:med:mca7.TTH
+xxx:med:mca7.R0NM
+xxx:med:mca7.R0LO
+xxx:med:mca7.R0HI
+xxx:med:mca7.R0BG
+xxx:med:mca7.R0IP
+xxx:med:mca7.R0P
+xxx:med:mca7.R1NM
+xxx:med:mca7.R1LO
+xxx:med:mca7.R1HI
+xxx:med:mca7.R1BG
+xxx:med:mca7.R1IP
+xxx:med:mca7.R1P
+xxx:med:mca7.R2NM
+xxx:med:mca7.R2LO
+xxx:med:mca7.R2HI
+xxx:med:mca7.R2BG
+xxx:med:mca7.R2IP
+xxx:med:mca7.R2P
+xxx:med:mca7.R3NM
+xxx:med:mca7.R3LO
+xxx:med:mca7.R3HI
+xxx:med:mca7.R3BG
+xxx:med:mca7.R3IP
+xxx:med:mca7.R3P
+xxx:med:mca7.R4NM
+xxx:med:mca7.R4LO
+xxx:med:mca7.R4HI
+xxx:med:mca7.R4BG
+xxx:med:mca7.R4IP
+xxx:med:mca7.R4P
+xxx:med:mca7.R5NM
+xxx:med:mca7.R5LO
+xxx:med:mca7.R5HI
+xxx:med:mca7.R5BG
+xxx:med:mca7.R5IP
+xxx:med:mca7.R5P
+xxx:med:mca7.R6NM
+xxx:med:mca7.R6LO
+xxx:med:mca7.R6HI
+xxx:med:mca7.R6BG
+xxx:med:mca7.R6IP
+xxx:med:mca7.R6P
+xxx:med:mca7.R7NM
+xxx:med:mca7.R7LO
+xxx:med:mca7.R7HI
+xxx:med:mca7.R7BG
+xxx:med:mca7.R7IP
+xxx:med:mca7.R7P
+xxx:med:mca7.R8NM
+xxx:med:mca7.R8LO
+xxx:med:mca7.R8HI
+xxx:med:mca7.R8BG
+xxx:med:mca7.R8IP
+xxx:med:mca7.R8P
+xxx:med:mca7.R9NM
+xxx:med:mca7.R9LO
+xxx:med:mca7.R9HI
+xxx:med:mca7.R9BG
+xxx:med:mca7.R9IP
+xxx:med:mca7.R9P
+
+xxx:med:mca8.CALO
+xxx:med:mca8.CALS
+xxx:med:mca8.CALQ
+xxx:med:mca8.TTH
+xxx:med:mca8.R0NM
+xxx:med:mca8.R0LO
+xxx:med:mca8.R0HI
+xxx:med:mca8.R0BG
+xxx:med:mca8.R0IP
+xxx:med:mca8.R0P
+xxx:med:mca8.R1NM
+xxx:med:mca8.R1LO
+xxx:med:mca8.R1HI
+xxx:med:mca8.R1BG
+xxx:med:mca8.R1IP
+xxx:med:mca8.R1P
+xxx:med:mca8.R2NM
+xxx:med:mca8.R2LO
+xxx:med:mca8.R2HI
+xxx:med:mca8.R2BG
+xxx:med:mca8.R2IP
+xxx:med:mca8.R2P
+xxx:med:mca8.R3NM
+xxx:med:mca8.R3LO
+xxx:med:mca8.R3HI
+xxx:med:mca8.R3BG
+xxx:med:mca8.R3IP
+xxx:med:mca8.R3P
+xxx:med:mca8.R4NM
+xxx:med:mca8.R4LO
+xxx:med:mca8.R4HI
+xxx:med:mca8.R4BG
+xxx:med:mca8.R4IP
+xxx:med:mca8.R4P
+xxx:med:mca8.R5NM
+xxx:med:mca8.R5LO
+xxx:med:mca8.R5HI
+xxx:med:mca8.R5BG
+xxx:med:mca8.R5IP
+xxx:med:mca8.R5P
+xxx:med:mca8.R6NM
+xxx:med:mca8.R6LO
+xxx:med:mca8.R6HI
+xxx:med:mca8.R6BG
+xxx:med:mca8.R6IP
+xxx:med:mca8.R6P
+xxx:med:mca8.R7NM
+xxx:med:mca8.R7LO
+xxx:med:mca8.R7HI
+xxx:med:mca8.R7BG
+xxx:med:mca8.R7IP
+xxx:med:mca8.R7P
+xxx:med:mca8.R8NM
+xxx:med:mca8.R8LO
+xxx:med:mca8.R8HI
+xxx:med:mca8.R8BG
+xxx:med:mca8.R8IP
+xxx:med:mca8.R8P
+xxx:med:mca8.R9NM
+xxx:med:mca8.R9LO
+xxx:med:mca8.R9HI
+xxx:med:mca8.R9BG
+xxx:med:mca8.R9IP
+xxx:med:mca8.R9P
+
+xxx:med:mca9.CALO
+xxx:med:mca9.CALS
+xxx:med:mca9.CALQ
+xxx:med:mca9.TTH
+xxx:med:mca9.R0NM
+xxx:med:mca9.R0LO
+xxx:med:mca9.R0HI
+xxx:med:mca9.R0BG
+xxx:med:mca9.R0IP
+xxx:med:mca9.R0P
+xxx:med:mca9.R1NM
+xxx:med:mca9.R1LO
+xxx:med:mca9.R1HI
+xxx:med:mca9.R1BG
+xxx:med:mca9.R1IP
+xxx:med:mca9.R1P
+xxx:med:mca9.R2NM
+xxx:med:mca9.R2LO
+xxx:med:mca9.R2HI
+xxx:med:mca9.R2BG
+xxx:med:mca9.R2IP
+xxx:med:mca9.R2P
+xxx:med:mca9.R3NM
+xxx:med:mca9.R3LO
+xxx:med:mca9.R3HI
+xxx:med:mca9.R3BG
+xxx:med:mca9.R3IP
+xxx:med:mca9.R3P
+xxx:med:mca9.R4NM
+xxx:med:mca9.R4LO
+xxx:med:mca9.R4HI
+xxx:med:mca9.R4BG
+xxx:med:mca9.R4IP
+xxx:med:mca9.R4P
+xxx:med:mca9.R5NM
+xxx:med:mca9.R5LO
+xxx:med:mca9.R5HI
+xxx:med:mca9.R5BG
+xxx:med:mca9.R5IP
+xxx:med:mca9.R5P
+xxx:med:mca9.R6NM
+xxx:med:mca9.R6LO
+xxx:med:mca9.R6HI
+xxx:med:mca9.R6BG
+xxx:med:mca9.R6IP
+xxx:med:mca9.R6P
+xxx:med:mca9.R7NM
+xxx:med:mca9.R7LO
+xxx:med:mca9.R7HI
+xxx:med:mca9.R7BG
+xxx:med:mca9.R7IP
+xxx:med:mca9.R7P
+xxx:med:mca9.R8NM
+xxx:med:mca9.R8LO
+xxx:med:mca9.R8HI
+xxx:med:mca9.R8BG
+xxx:med:mca9.R8IP
+xxx:med:mca9.R8P
+xxx:med:mca9.R9NM
+xxx:med:mca9.R9LO
+xxx:med:mca9.R9HI
+xxx:med:mca9.R9BG
+xxx:med:mca9.R9IP
+xxx:med:mca9.R9P
+
+xxx:med:mca10.CALO
+xxx:med:mca10.CALS
+xxx:med:mca10.CALQ
+xxx:med:mca10.TTH
+xxx:med:mca10.R0NM
+xxx:med:mca10.R0LO
+xxx:med:mca10.R0HI
+xxx:med:mca10.R0BG
+xxx:med:mca10.R0IP
+xxx:med:mca10.R0P
+xxx:med:mca10.R1NM
+xxx:med:mca10.R1LO
+xxx:med:mca10.R1HI
+xxx:med:mca10.R1BG
+xxx:med:mca10.R1IP
+xxx:med:mca10.R1P
+xxx:med:mca10.R2NM
+xxx:med:mca10.R2LO
+xxx:med:mca10.R2HI
+xxx:med:mca10.R2BG
+xxx:med:mca10.R2IP
+xxx:med:mca10.R2P
+xxx:med:mca10.R3NM
+xxx:med:mca10.R3LO
+xxx:med:mca10.R3HI
+xxx:med:mca10.R3BG
+xxx:med:mca10.R3IP
+xxx:med:mca10.R3P
+xxx:med:mca10.R4NM
+xxx:med:mca10.R4LO
+xxx:med:mca10.R4HI
+xxx:med:mca10.R4BG
+xxx:med:mca10.R4IP
+xxx:med:mca10.R4P
+xxx:med:mca10.R5NM
+xxx:med:mca10.R5LO
+xxx:med:mca10.R5HI
+xxx:med:mca10.R5BG
+xxx:med:mca10.R5IP
+xxx:med:mca10.R5P
+xxx:med:mca10.R6NM
+xxx:med:mca10.R6LO
+xxx:med:mca10.R6HI
+xxx:med:mca10.R6BG
+xxx:med:mca10.R6IP
+xxx:med:mca10.R6P
+xxx:med:mca10.R7NM
+xxx:med:mca10.R7LO
+xxx:med:mca10.R7HI
+xxx:med:mca10.R7BG
+xxx:med:mca10.R7IP
+xxx:med:mca10.R7P
+xxx:med:mca10.R8NM
+xxx:med:mca10.R8LO
+xxx:med:mca10.R8HI
+xxx:med:mca10.R8BG
+xxx:med:mca10.R8IP
+xxx:med:mca10.R8P
+xxx:med:mca10.R9NM
+xxx:med:mca10.R9LO
+xxx:med:mca10.R9HI
+xxx:med:mca10.R9BG
+xxx:med:mca10.R9IP
+xxx:med:mca10.R9P
+
+xxx:med:mca11.CALO
+xxx:med:mca11.CALS
+xxx:med:mca11.CALQ
+xxx:med:mca11.TTH
+xxx:med:mca11.R0NM
+xxx:med:mca11.R0LO
+xxx:med:mca11.R0HI
+xxx:med:mca11.R0BG
+xxx:med:mca11.R0IP
+xxx:med:mca11.R0P
+xxx:med:mca11.R1NM
+xxx:med:mca11.R1LO
+xxx:med:mca11.R1HI
+xxx:med:mca11.R1BG
+xxx:med:mca11.R1IP
+xxx:med:mca11.R1P
+xxx:med:mca11.R2NM
+xxx:med:mca11.R2LO
+xxx:med:mca11.R2HI
+xxx:med:mca11.R2BG
+xxx:med:mca11.R2IP
+xxx:med:mca11.R2P
+xxx:med:mca11.R3NM
+xxx:med:mca11.R3LO
+xxx:med:mca11.R3HI
+xxx:med:mca11.R3BG
+xxx:med:mca11.R3IP
+xxx:med:mca11.R3P
+xxx:med:mca11.R4NM
+xxx:med:mca11.R4LO
+xxx:med:mca11.R4HI
+xxx:med:mca11.R4BG
+xxx:med:mca11.R4IP
+xxx:med:mca11.R4P
+xxx:med:mca11.R5NM
+xxx:med:mca11.R5LO
+xxx:med:mca11.R5HI
+xxx:med:mca11.R5BG
+xxx:med:mca11.R5IP
+xxx:med:mca11.R5P
+xxx:med:mca11.R6NM
+xxx:med:mca11.R6LO
+xxx:med:mca11.R6HI
+xxx:med:mca11.R6BG
+xxx:med:mca11.R6IP
+xxx:med:mca11.R6P
+xxx:med:mca11.R7NM
+xxx:med:mca11.R7LO
+xxx:med:mca11.R7HI
+xxx:med:mca11.R7BG
+xxx:med:mca11.R7IP
+xxx:med:mca11.R7P
+xxx:med:mca11.R8NM
+xxx:med:mca11.R8LO
+xxx:med:mca11.R8HI
+xxx:med:mca11.R8BG
+xxx:med:mca11.R8IP
+xxx:med:mca11.R8P
+xxx:med:mca11.R9NM
+xxx:med:mca11.R9LO
+xxx:med:mca11.R9HI
+xxx:med:mca11.R9BG
+xxx:med:mca11.R9IP
+xxx:med:mca11.R9P
+
+xxx:med:mca12.CALO
+xxx:med:mca12.CALS
+xxx:med:mca12.CALQ
+xxx:med:mca12.TTH
+xxx:med:mca12.R0NM
+xxx:med:mca12.R0LO
+xxx:med:mca12.R0HI
+xxx:med:mca12.R0BG
+xxx:med:mca12.R0IP
+xxx:med:mca12.R0P
+xxx:med:mca12.R1NM
+xxx:med:mca12.R1LO
+xxx:med:mca12.R1HI
+xxx:med:mca12.R1BG
+xxx:med:mca12.R1IP
+xxx:med:mca12.R1P
+xxx:med:mca12.R2NM
+xxx:med:mca12.R2LO
+xxx:med:mca12.R2HI
+xxx:med:mca12.R2BG
+xxx:med:mca12.R2IP
+xxx:med:mca12.R2P
+xxx:med:mca12.R3NM
+xxx:med:mca12.R3LO
+xxx:med:mca12.R3HI
+xxx:med:mca12.R3BG
+xxx:med:mca12.R3IP
+xxx:med:mca12.R3P
+xxx:med:mca12.R4NM
+xxx:med:mca12.R4LO
+xxx:med:mca12.R4HI
+xxx:med:mca12.R4BG
+xxx:med:mca12.R4IP
+xxx:med:mca12.R4P
+xxx:med:mca12.R5NM
+xxx:med:mca12.R5LO
+xxx:med:mca12.R5HI
+xxx:med:mca12.R5BG
+xxx:med:mca12.R5IP
+xxx:med:mca12.R5P
+xxx:med:mca12.R6NM
+xxx:med:mca12.R6LO
+xxx:med:mca12.R6HI
+xxx:med:mca12.R6BG
+xxx:med:mca12.R6IP
+xxx:med:mca12.R6P
+xxx:med:mca12.R7NM
+xxx:med:mca12.R7LO
+xxx:med:mca12.R7HI
+xxx:med:mca12.R7BG
+xxx:med:mca12.R7IP
+xxx:med:mca12.R7P
+xxx:med:mca12.R8NM
+xxx:med:mca12.R8LO
+xxx:med:mca12.R8HI
+xxx:med:mca12.R8BG
+xxx:med:mca12.R8IP
+xxx:med:mca12.R8P
+xxx:med:mca12.R9NM
+xxx:med:mca12.R9LO
+xxx:med:mca12.R9HI
+xxx:med:mca12.R9BG
+xxx:med:mca12.R9IP
+xxx:med:mca12.R9P
+
+xxx:med:mca13.CALO
+xxx:med:mca13.CALS
+xxx:med:mca13.CALQ
+xxx:med:mca13.TTH
+xxx:med:mca13.R0NM
+xxx:med:mca13.R0LO
+xxx:med:mca13.R0HI
+xxx:med:mca13.R0BG
+xxx:med:mca13.R0IP
+xxx:med:mca13.R0P
+xxx:med:mca13.R1NM
+xxx:med:mca13.R1LO
+xxx:med:mca13.R1HI
+xxx:med:mca13.R1BG
+xxx:med:mca13.R1IP
+xxx:med:mca13.R1P
+xxx:med:mca13.R2NM
+xxx:med:mca13.R2LO
+xxx:med:mca13.R2HI
+xxx:med:mca13.R2BG
+xxx:med:mca13.R2IP
+xxx:med:mca13.R2P
+xxx:med:mca13.R3NM
+xxx:med:mca13.R3LO
+xxx:med:mca13.R3HI
+xxx:med:mca13.R3BG
+xxx:med:mca13.R3IP
+xxx:med:mca13.R3P
+xxx:med:mca13.R4NM
+xxx:med:mca13.R4LO
+xxx:med:mca13.R4HI
+xxx:med:mca13.R4BG
+xxx:med:mca13.R4IP
+xxx:med:mca13.R4P
+xxx:med:mca13.R5NM
+xxx:med:mca13.R5LO
+xxx:med:mca13.R5HI
+xxx:med:mca13.R5BG
+xxx:med:mca13.R5IP
+xxx:med:mca13.R5P
+xxx:med:mca13.R6NM
+xxx:med:mca13.R6LO
+xxx:med:mca13.R6HI
+xxx:med:mca13.R6BG
+xxx:med:mca13.R6IP
+xxx:med:mca13.R6P
+xxx:med:mca13.R7NM
+xxx:med:mca13.R7LO
+xxx:med:mca13.R7HI
+xxx:med:mca13.R7BG
+xxx:med:mca13.R7IP
+xxx:med:mca13.R7P
+xxx:med:mca13.R8NM
+xxx:med:mca13.R8LO
+xxx:med:mca13.R8HI
+xxx:med:mca13.R8BG
+xxx:med:mca13.R8IP
+xxx:med:mca13.R8P
+xxx:med:mca13.R9NM
+xxx:med:mca13.R9LO
+xxx:med:mca13.R9HI
+xxx:med:mca13.R9BG
+xxx:med:mca13.R9IP
+xxx:med:mca13.R9P
+
+xxx:med:mca0.CALO
+xxx:med:mca0.CALS
+xxx:med:mca0.CALQ
+xxx:med:mca0.TTH
+xxx:med:mca0.R0NM
+xxx:med:mca0.R0LO
+xxx:med:mca0.R0HI
+xxx:med:mca0.R0BG
+xxx:med:mca0.R0IP
+xxx:med:mca0.R0P
+xxx:med:mca0.R1NM
+xxx:med:mca0.R1LO
+xxx:med:mca0.R1HI
+xxx:med:mca0.R1BG
+xxx:med:mca0.R1IP
+xxx:med:mca0.R1P
+xxx:med:mca0.R2NM
+xxx:med:mca0.R2LO
+xxx:med:mca0.R2HI
+xxx:med:mca0.R2BG
+xxx:med:mca0.R2IP
+xxx:med:mca0.R2P
+xxx:med:mca0.R3NM
+xxx:med:mca0.R3LO
+xxx:med:mca0.R3HI
+xxx:med:mca0.R3BG
+xxx:med:mca0.R3IP
+xxx:med:mca0.R3P
+xxx:med:mca0.R4NM
+xxx:med:mca0.R4LO
+xxx:med:mca0.R4HI
+xxx:med:mca0.R4BG
+xxx:med:mca0.R4IP
+xxx:med:mca0.R4P
+xxx:med:mca0.R5NM
+xxx:med:mca0.R5LO
+xxx:med:mca0.R5HI
+xxx:med:mca0.R5BG
+xxx:med:mca0.R5IP
+xxx:med:mca0.R5P
+xxx:med:mca0.R6NM
+xxx:med:mca0.R6LO
+xxx:med:mca0.R6HI
+xxx:med:mca0.R6BG
+xxx:med:mca0.R6IP
+xxx:med:mca0.R6P
+xxx:med:mca0.R7NM
+xxx:med:mca0.R7LO
+xxx:med:mca0.R7HI
+xxx:med:mca0.R7BG
+xxx:med:mca0.R7IP
+xxx:med:mca0.R7P
+xxx:med:mca0.R8NM
+xxx:med:mca0.R8LO
+xxx:med:mca0.R8HI
+xxx:med:mca0.R8BG
+xxx:med:mca0.R8IP
+xxx:med:mca0.R8P
+xxx:med:mca0.R9NM
+xxx:med:mca0.R9LO
+xxx:med:mca0.R9HI
+xxx:med:mca0.R9BG
+xxx:med:mca0.R9IP
+xxx:med:mca0.R9P
+
+xxx:icbAdc1GAIN
+xxx:icbAdc1OFFSET
+xxx:icbAdc1AMOD
+xxx:icbAdc1CMOD
+xxx:icbAdc1LLD
+xxx:icbAdc1ULD
+xxx:icbAdc1ZERO
+xxx:icbAdc1PMOD
+xxx:icbAdc1GMOD
+xxx:icbAdc1TMOD
+
+xxx:icbAdc2GAIN
+xxx:icbAdc2OFFSET
+xxx:icbAdc2AMOD
+xxx:icbAdc2CMOD
+xxx:icbAdc2LLD
+xxx:icbAdc2ULD
+xxx:icbAdc2ZERO
+xxx:icbAdc2PMOD
+xxx:icbAdc2GMOD
+xxx:icbAdc2TMOD
+
+xxx:icbAdc3GAIN
+xxx:icbAdc3OFFSET
+xxx:icbAdc3AMOD
+xxx:icbAdc3CMOD
+xxx:icbAdc3LLD
+xxx:icbAdc3ULD
+xxx:icbAdc3ZERO
+xxx:icbAdc3PMOD
+xxx:icbAdc3GMOD
+xxx:icbAdc3TMOD
+
+xxx:icbAdc4GAIN
+xxx:icbAdc4OFFSET
+xxx:icbAdc4AMOD
+xxx:icbAdc4CMOD
+xxx:icbAdc4LLD
+xxx:icbAdc4ULD
+xxx:icbAdc4ZERO
+xxx:icbAdc4PMOD
+xxx:icbAdc4GMOD
+xxx:icbAdc4TMOD
diff --git a/iocBoot/iocvxWorks/auto_3mca_settings.req b/iocBoot/iocvxWorks/auto_3mca_settings.req
new file mode 100644
index 0000000000000000000000000000000000000000..1e220714f58cc7d3d175ca8bf14b4fee59f7b940
--- /dev/null
+++ b/iocBoot/iocvxWorks/auto_3mca_settings.req
@@ -0,0 +1,233 @@
+xxx:med:PresetReal
+xxx:med:StatusAll.SCAN
+xxx:med:ReadAll.SCAN
+xxx:med:EnableClientWait
+
+xxx:med:mca1.CALO
+xxx:med:mca1.CALS
+xxx:med:mca1.CALQ
+xxx:med:mca1.TTH
+xxx:med:mca1.R0NM
+xxx:med:mca1.R0LO
+xxx:med:mca1.R0HI
+xxx:med:mca1.R0BG
+xxx:med:mca1.R0IP
+xxx:med:mca1.R0P
+xxx:med:mca1.R1NM
+xxx:med:mca1.R1LO
+xxx:med:mca1.R1HI
+xxx:med:mca1.R1BG
+xxx:med:mca1.R1IP
+xxx:med:mca1.R1P
+xxx:med:mca1.R2NM
+xxx:med:mca1.R2LO
+xxx:med:mca1.R2HI
+xxx:med:mca1.R2BG
+xxx:med:mca1.R2IP
+xxx:med:mca1.R2P
+xxx:med:mca1.R3NM
+xxx:med:mca1.R3LO
+xxx:med:mca1.R3HI
+xxx:med:mca1.R3BG
+xxx:med:mca1.R3IP
+xxx:med:mca1.R3P
+xxx:med:mca1.R4NM
+xxx:med:mca1.R4LO
+xxx:med:mca1.R4HI
+xxx:med:mca1.R4BG
+xxx:med:mca1.R4IP
+xxx:med:mca1.R4P
+xxx:med:mca1.R5NM
+xxx:med:mca1.R5LO
+xxx:med:mca1.R5HI
+xxx:med:mca1.R5BG
+xxx:med:mca1.R5IP
+xxx:med:mca1.R5P
+xxx:med:mca1.R6NM
+xxx:med:mca1.R6LO
+xxx:med:mca1.R6HI
+xxx:med:mca1.R6BG
+xxx:med:mca1.R6IP
+xxx:med:mca1.R6P
+xxx:med:mca1.R7NM
+xxx:med:mca1.R7LO
+xxx:med:mca1.R7HI
+xxx:med:mca1.R7BG
+xxx:med:mca1.R7IP
+xxx:med:mca1.R7P
+xxx:med:mca1.R8NM
+xxx:med:mca1.R8LO
+xxx:med:mca1.R8HI
+xxx:med:mca1.R8BG
+xxx:med:mca1.R8IP
+xxx:med:mca1.R8P
+xxx:med:mca1.R9NM
+xxx:med:mca1.R9LO
+xxx:med:mca1.R9HI
+xxx:med:mca1.R9BG
+xxx:med:mca1.R9IP
+xxx:med:mca1.R9P
+
+xxx:med:mca2.CALO
+xxx:med:mca2.CALS
+xxx:med:mca2.CALQ
+xxx:med:mca2.TTH
+xxx:med:mca2.R0NM
+xxx:med:mca2.R0LO
+xxx:med:mca2.R0HI
+xxx:med:mca2.R0BG
+xxx:med:mca2.R0IP
+xxx:med:mca2.R0P
+xxx:med:mca2.R1NM
+xxx:med:mca2.R1LO
+xxx:med:mca2.R1HI
+xxx:med:mca2.R1BG
+xxx:med:mca2.R1IP
+xxx:med:mca2.R1P
+xxx:med:mca2.R2NM
+xxx:med:mca2.R2LO
+xxx:med:mca2.R2HI
+xxx:med:mca2.R2BG
+xxx:med:mca2.R2IP
+xxx:med:mca2.R2P
+xxx:med:mca2.R3NM
+xxx:med:mca2.R3LO
+xxx:med:mca2.R3HI
+xxx:med:mca2.R3BG
+xxx:med:mca2.R3IP
+xxx:med:mca2.R3P
+xxx:med:mca2.R4NM
+xxx:med:mca2.R4LO
+xxx:med:mca2.R4HI
+xxx:med:mca2.R4BG
+xxx:med:mca2.R4IP
+xxx:med:mca2.R4P
+xxx:med:mca2.R5NM
+xxx:med:mca2.R5LO
+xxx:med:mca2.R5HI
+xxx:med:mca2.R5BG
+xxx:med:mca2.R5IP
+xxx:med:mca2.R5P
+xxx:med:mca2.R6NM
+xxx:med:mca2.R6LO
+xxx:med:mca2.R6HI
+xxx:med:mca2.R6BG
+xxx:med:mca2.R6IP
+xxx:med:mca2.R6P
+xxx:med:mca2.R7NM
+xxx:med:mca2.R7LO
+xxx:med:mca2.R7HI
+xxx:med:mca2.R7BG
+xxx:med:mca2.R7IP
+xxx:med:mca2.R7P
+xxx:med:mca2.R8NM
+xxx:med:mca2.R8LO
+xxx:med:mca2.R8HI
+xxx:med:mca2.R8BG
+xxx:med:mca2.R8IP
+xxx:med:mca2.R8P
+xxx:med:mca2.R9NM
+xxx:med:mca2.R9LO
+xxx:med:mca2.R9HI
+xxx:med:mca2.R9BG
+xxx:med:mca2.R9IP
+xxx:med:mca2.R9P
+
+xxx:med:mca3.CALO
+xxx:med:mca3.CALS
+xxx:med:mca3.CALQ
+xxx:med:mca3.TTH
+xxx:med:mca3.R0NM
+xxx:med:mca3.R0LO
+xxx:med:mca3.R0HI
+xxx:med:mca3.R0BG
+xxx:med:mca3.R0IP
+xxx:med:mca3.R0P
+xxx:med:mca3.R1NM
+xxx:med:mca3.R1LO
+xxx:med:mca3.R1HI
+xxx:med:mca3.R1BG
+xxx:med:mca3.R1IP
+xxx:med:mca3.R1P
+xxx:med:mca3.R2NM
+xxx:med:mca3.R2LO
+xxx:med:mca3.R2HI
+xxx:med:mca3.R2BG
+xxx:med:mca3.R2IP
+xxx:med:mca3.R2P
+xxx:med:mca3.R3NM
+xxx:med:mca3.R3LO
+xxx:med:mca3.R3HI
+xxx:med:mca3.R3BG
+xxx:med:mca3.R3IP
+xxx:med:mca3.R3P
+xxx:med:mca3.R4NM
+xxx:med:mca3.R4LO
+xxx:med:mca3.R4HI
+xxx:med:mca3.R4BG
+xxx:med:mca3.R4IP
+xxx:med:mca3.R4P
+xxx:med:mca3.R5NM
+xxx:med:mca3.R5LO
+xxx:med:mca3.R5HI
+xxx:med:mca3.R5BG
+xxx:med:mca3.R5IP
+xxx:med:mca3.R5P
+xxx:med:mca3.R6NM
+xxx:med:mca3.R6LO
+xxx:med:mca3.R6HI
+xxx:med:mca3.R6BG
+xxx:med:mca3.R6IP
+xxx:med:mca3.R6P
+xxx:med:mca3.R7NM
+xxx:med:mca3.R7LO
+xxx:med:mca3.R7HI
+xxx:med:mca3.R7BG
+xxx:med:mca3.R7IP
+xxx:med:mca3.R7P
+xxx:med:mca3.R8NM
+xxx:med:mca3.R8LO
+xxx:med:mca3.R8HI
+xxx:med:mca3.R8BG
+xxx:med:mca3.R8IP
+xxx:med:mca3.R8P
+xxx:med:mca3.R9NM
+xxx:med:mca3.R9LO
+xxx:med:mca3.R9HI
+xxx:med:mca3.R9BG
+xxx:med:mca3.R9IP
+xxx:med:mca3.R9P
+
+xxx:med:adc1.A
+xxx:med:adc1.B
+xxx:med:adc1.C
+xxx:med:adc1ConvGain.VAL
+xxx:med:adc1.E
+xxx:med:adc1.F
+xxx:med:adc1.G
+xxx:med:adc1.I
+xxx:med:adc1.J
+xxx:med:adc1.K
+
+xxx:med:adc2.A
+xxx:med:adc2.B
+xxx:med:adc2.C
+xxx:med:adc2ConvGain.VAL
+xxx:med:adc2.E
+xxx:med:adc2.F
+xxx:med:adc2.G
+xxx:med:adc2.I
+xxx:med:adc2.J
+xxx:med:adc2.K
+
+xxx:med:adc3.A
+xxx:med:adc3.B
+xxx:med:adc3.C
+xxx:med:adc3ConvGain.VAL
+xxx:med:adc3.E
+xxx:med:adc3.F
+xxx:med:adc3.G
+xxx:med:adc3.I
+xxx:med:adc3.J
+xxx:med:adc3.K
+
diff --git a/iocBoot/iocvxWorks/auto_positions.req b/iocBoot/iocvxWorks/auto_positions.req
new file mode 100644
index 0000000000000000000000000000000000000000..4cf7ab3a245abc990e18da27c1c33fd267b915d8
--- /dev/null
+++ b/iocBoot/iocvxWorks/auto_positions.req
@@ -0,0 +1,32 @@
+$(P)m1.OFF
+$(P)m1.DVAL
+$(P)m2.OFF
+$(P)m2.DVAL
+$(P)m3.OFF
+$(P)m3.DVAL
+$(P)m4.OFF
+$(P)m4.DVAL
+$(P)m5.OFF
+$(P)m5.DVAL
+$(P)m6.OFF
+$(P)m6.DVAL
+$(P)m7.OFF
+$(P)m7.DVAL
+$(P)m8.OFF
+$(P)m8.DVAL
+$(P)m9.OFF
+$(P)m9.DVAL
+$(P)m10.OFF
+$(P)m10.DVAL
+$(P)m11.OFF
+$(P)m11.DVAL
+$(P)m12.OFF
+$(P)m12.DVAL
+$(P)m13.OFF
+$(P)m13.DVAL
+$(P)m14.OFF
+$(P)m14.DVAL
+$(P)m15.OFF
+$(P)m15.DVAL
+$(P)m16.OFF
+$(P)m16.DVAL
diff --git a/iocBoot/iocvxWorks/auto_settings.req b/iocBoot/iocvxWorks/auto_settings.req
new file mode 100644
index 0000000000000000000000000000000000000000..1473d39c5a335f04518ededbfffe623410411227
--- /dev/null
+++ b/iocBoot/iocvxWorks/auto_settings.req
@@ -0,0 +1,126 @@
+# Note: the macro P must have been supplied to the routine that parses
+# this file.  This requires save_restore v2.8 or later.
+file motor_settings.req P=$(P),M=m1
+file motor_settings.req P=$(P),M=m2
+file motor_settings.req P=$(P),M=m3
+file motor_settings.req P=$(P),M=m4
+file motor_settings.req P=$(P),M=m5
+file motor_settings.req P=$(P),M=m6
+file motor_settings.req P=$(P),M=m7
+file motor_settings.req P=$(P),M=m8
+file motor_settings.req P=$(P),M=m9
+file motor_settings.req P=$(P),M=m10
+file motor_settings.req P=$(P),M=m11
+file motor_settings.req P=$(P),M=m12
+file motor_settings.req P=$(P),M=m13
+file motor_settings.req P=$(P),M=m14
+file motor_settings.req P=$(P),M=m15
+file motor_settings.req P=$(P),M=m16
+
+file scanParms_settings.req P=$(P),M=m1
+file scanParms_settings.req P=$(P),M=m2
+file scanParms_settings.req P=$(P),M=m3
+file scanParms_settings.req P=$(P),M=m4
+file scanParms_settings.req P=$(P),M=m5
+file scanParms_settings.req P=$(P),M=m6
+file scanParms_settings.req P=$(P),M=m7
+file scanParms_settings.req P=$(P),M=m8
+file scanParms_settings.req P=$(P),M=m9
+file scanParms_settings.req P=$(P),M=m10
+file scanParms_settings.req P=$(P),M=m11
+file scanParms_settings.req P=$(P),M=m12
+file scanParms_settings.req P=$(P),M=m13
+file scanParms_settings.req P=$(P),M=m14
+file scanParms_settings.req P=$(P),M=m15
+file scanParms_settings.req P=$(P),M=m16
+
+file table_settings.req P=$(P),T=table1
+
+file Jscaler_settings.req P=$(P),S=scaler1
+
+file scan_settings.req P=$(P),S=scan1
+file scan_settings.req P=$(P),S=scan2
+file scan_settings.req P=$(P),S=scan3
+file scan_settings.req P=$(P),S=scan4
+file scan_settings.req P=$(P),S=scanH
+
+# Kohzu monochromator
+#$(P)BraggHAO.VAL
+#$(P)BraggKAO.VAL
+#$(P)BraggLAO.VAL
+#$(P)BraggAAO.VAL
+#$(P)BraggTypeMO.VAL
+#$(P)KohzuMode2MO.VAL
+#$(P)Kohzu_yOffsetAO.VAL
+
+# High resolution monochromator
+#$(P)HR1_A1AO.VAL
+#$(P)HR1_H1AO.VAL
+#$(P)HR1_K1AO.VAL
+#$(P)HR1_L1AO.VAL
+#$(P)HR1_A2AO.VAL
+#$(P)HR1_H2AO.VAL
+#$(P)HR1_K2AO.VAL
+#$(P)HR1_L2AO.VAL
+#$(P)HR1_EAO.VAL
+#$(P)HR1_Mode2MO.VAL
+#$(P)HR1_phi1OffAO
+#$(P)HR1_phi2OffAO
+#$(P)HR1_ETweakAI
+#$(P)HR1_LambdaTweakAI
+#$(P)HR1_Theta1TweakAI
+#$(P)HR1_Theta2TweakAI
+#$(P)HR1_worldTweakAI
+
+file userCalcs10_settings.req P=$(P)
+file userCalcN_settings.req P=$(P),N=I_Detector
+
+#$(P)fltr1:name5.VAL
+#$(P)fltr1:name4.VAL
+#$(P)fltr1:name3.VAL
+#$(P)fltr1:name2.VAL
+#$(P)fltr1:name1.VAL
+#$(P)fltr1:nameHome.VAL
+#$(P)fltr1:pos5.VAL
+#$(P)fltr1:pos4.VAL
+#$(P)fltr1:pos3.VAL
+#$(P)fltr1:pos2.VAL
+#$(P)fltr1:pos1.VAL
+#$(P)fltr1:posHome.VAL
+#$(P)fltr1:motorOut.OUTN
+#$(P)fltr2:name5.VAL
+#$(P)fltr2:name4.VAL
+#$(P)fltr2:name3.VAL
+#$(P)fltr2:name2.VAL
+#$(P)fltr2:name1.VAL
+#$(P)fltr2:nameHome.VAL
+#$(P)fltr2:pos5.VAL
+#$(P)fltr2:pos4.VAL
+#$(P)fltr2:pos3.VAL
+#$(P)fltr2:pos2.VAL
+#$(P)fltr2:pos1.VAL
+#$(P)fltr2:posHome.VAL
+#$(P)fltr2:motorOut.OUTN
+#$(P)fltr_1_2:lockOut.OUTN
+
+file saveData_settings.req P=$(P)
+
+file userTransforms10_settings.req P=$(P)
+
+file userStringCalcs10_settings.req P=$(P)
+
+# string-sequence records
+file sseq_settings.req P=$(P),S=Sseq1
+file sseq_settings.req P=$(P),S=Sseq2
+file sseq_settings.req P=$(P),S=Sseq3
+
+
+# 4-step measurement
+file auto_4step_settings.req P=$(P),Q=4step
+
+file userAve10_settings.req P=$(P)
+
+$(P):R_CA
+$(P):R_FD
+$(P):R_Load
+$(P):R_Mem
diff --git a/iocBoot/iocvxWorks/basic_motor.substitutions b/iocBoot/iocvxWorks/basic_motor.substitutions
new file mode 100644
index 0000000000000000000000000000000000000000..e818580bad2c72c3da228706683f056eb9240f06
--- /dev/null
+++ b/iocBoot/iocvxWorks/basic_motor.substitutions
@@ -0,0 +1,13 @@
+file "$(MOTOR)/db/basic_motor.db"
+{
+pattern
+{P,     N,  M,	    DTYP,         C,    S,  DESC,         EGU,      DIR, VELO,  VBAS,  ACCL,  BDST,  BVEL,  BACC,  MRES,   PREC,  DHLM,	DLLM,	INIT}
+{xxx:,	1,  m$(N),  "OMS VME58",  0,	0,  "motor $(N)", degrees,  Pos, 1,	.1,    .2,    0,     1,	    .2,	   2.5e-4, 5,	  100,	-100,	""}
+{xxx:,	2,  m$(N),  "OMS VME58",  0,	1,  "motor $(N)", degrees   Pos, 1,	.1,    .2,    0,     1,	    .2,	   2.5e-4, 5,	  100,	-100,	""}
+{xxx:,	3,  m$(N),  "OMS VME58",  0,	2,  "motor $(N)", degrees   Pos, 1,	.1,    .2,    0,     1,	    .2,	   2.5e-4, 5,	  100,	-100,	""}
+{xxx:,	4,  m$(N),  "OMS VME58",  0,	3,  "motor $(N)", degrees   Pos, 1,	.1,    .2,    0,     1,	    .2,	   2.5e-4, 5,	  100,	-100,	""}
+{xxx:,	5,  m$(N),  "OMS VME58",  0,	4,  "motor $(N)", degrees   Pos, 1,	.1,    .2,    0,     1,	    .2,	   2.5e-4, 5,	  100,	-100,	""}
+{xxx:,	6,  m$(N),  "OMS VME58",  0,	5,  "motor $(N)", degrees   Pos, 1,	.1,    .2,    0,     1,	    .2,	   2.5e-4, 5,	  100,	-100,	""}
+{xxx:,	7,  m$(N),  "OMS VME58",  0,	6,  "motor $(N)", degrees,  Pos, 1,	.1,    .2,    0,     1,	    .2,	   2.5e-4, 5,	  100,	-100,	""}
+{xxx:,	8,  m$(N),  "OMS VME58",  0,	7,  "motor $(N)", degrees,  Pos, 1,	.1,    .2,    0,     1,	    .2,	   2.5e-4, 5,	  100,	-100,	""}
+}
diff --git a/iocBoot/iocvxWorks/bootParms b/iocBoot/iocvxWorks/bootParms
new file mode 100644
index 0000000000000000000000000000000000000000..89703a330e43b8bd291d89f0fd786da67f39f41c
--- /dev/null
+++ b/iocBoot/iocvxWorks/bootParms
@@ -0,0 +1,14 @@
+boot device          : dc0 
+processor number     : 0 
+host name            : oxygen 
+file name            : /usr/local/vxWorks/T202/mv2700-asd6 
+inet on ethernet (e) : 164.54.53.99:fffffc00 
+inet on backplane (b): 
+host inet (h)        : 164.54.52.4 
+gateway inet (g)     : 
+user (u)             : <user> 
+ftp password (pw) (blank = use rsh): <password> 
+flags (f)            : 0x0 
+target name (tn)     : ioctmm 
+startup script (s)   : /home/oxygen/MOONEY/epics/synApps_4_6/ioc/tmm/iocBoot/ioctmm/st.cmd 
+other (o)            : 
diff --git a/iocBoot/iocvxWorks/cdCommands b/iocBoot/iocvxWorks/cdCommands
new file mode 100644
index 0000000000000000000000000000000000000000..2cba0c1ded54a4a3b0c473577959016650acbc95
--- /dev/null
+++ b/iocBoot/iocvxWorks/cdCommands
@@ -0,0 +1,51 @@
+startup = "/home/epics/3-14-devel/xxx/iocBoot/iocvxWorks"
+putenv "ARCH=vxWorks-ppc604"
+putenv "IOC=iocvxWorks"
+top = "/home/epics/3-14-devel/xxx"
+putenv "TOP=/home/epics/3-14-devel/xxx"
+topbin = "/home/epics/3-14-devel/xxx/bin/vxWorks-ppc604"
+ip = "/corvette/home/epics/3-14-devel/ip"
+putenv "IP=/corvette/home/epics/3-14-devel/ip"
+ipbin = "/corvette/home/epics/3-14-devel/ip/bin/vxWorks-ppc604"
+ip330 = "/corvette/home/epics/3-14-devel/ip330"
+putenv "IP330=/corvette/home/epics/3-14-devel/ip330"
+camac = "/corvette/home/epics/3-14-devel/camac"
+putenv "CAMAC=/corvette/home/epics/3-14-devel/camac"
+camacbin = "/corvette/home/epics/3-14-devel/camac/bin/vxWorks-ppc604"
+mca = "/corvette/home/epics/3-14-devel/mca"
+putenv "MCA=/corvette/home/epics/3-14-devel/mca"
+mcabin = "/corvette/home/epics/3-14-devel/mca/bin/vxWorks-ppc604"
+love = "/corvette/home/epics/3-14-devel/love"
+putenv "LOVE=/corvette/home/epics/3-14-devel/love"
+ipunidig = "/corvette/home/epics/3-14-devel/ipUnidig"
+putenv "IPUNIDIG=/corvette/home/epics/3-14-devel/ipUnidig"
+dac128v = "/corvette/home/epics/3-14-devel/dac128V"
+putenv "DAC128V=/corvette/home/epics/3-14-devel/dac128V"
+motor = "/corvette/home/epics/3-14-devel/motor"
+putenv "MOTOR=/corvette/home/epics/3-14-devel/motor"
+std = "/corvette/home/epics/3-14-devel/std"
+putenv "STD=/corvette/home/epics/3-14-devel/std"
+stdbin = "/corvette/home/epics/3-14-devel/std/bin/vxWorks-ppc604"
+mpf = "/corvette/home/epics/3-14-devel/mpf/2-4-2"
+putenv "MPF=/corvette/home/epics/3-14-devel/mpf/2-4-2"
+mpfbin = "/corvette/home/epics/3-14-devel/mpf/2-4-2/bin/vxWorks-ppc604"
+allen_bradley = "/corvette/home/epics/3-14-devel/allenBradley/2-1"
+putenv "ALLEN_BRADLEY=/corvette/home/epics/3-14-devel/allenBradley/2-1"
+ipac = "/corvette/home/epics/3-14-devel/ipac/2-7beta"
+putenv "IPAC=/corvette/home/epics/3-14-devel/ipac/2-7beta"
+asyn = "/corvette/home/epics/3-14-devel/asyn/1-1"
+putenv "ASYN=/corvette/home/epics/3-14-devel/asyn/1-1"
+asynbin = "/corvette/home/epics/3-14-devel/asyn/1-1/bin/vxWorks-ppc604"
+dxp = "/corvette/home/epics/3-14-devel/dxp"
+putenv "DXP=/corvette/home/epics/3-14-devel/dxp"
+dxpbin = "/corvette/home/epics/3-14-devel/dxp/bin/vxWorks-ppc604"
+quadem = "/corvette/home/epics/3-14-devel/quadEM"
+putenv "QUADEM=/corvette/home/epics/3-14-devel/quadEM"
+sncseq = "/corvette/home/epics/3-14-devel/seq/2-0-8"
+putenv "SNCSEQ=/corvette/home/epics/3-14-devel/seq/2-0-8"
+sncseqbin = "/corvette/home/epics/3-14-devel/seq/2-0-8/bin/vxWorks-ppc604"
+vxstats = "/corvette/home/epics/3-14-devel/vxStats/1-2"
+putenv "VXSTATS=/corvette/home/epics/3-14-devel/vxStats/1-2"
+epics_base = "/corvette/usr/local/epics/base-3.14.5"
+putenv "EPICS_BASE=/corvette/usr/local/epics/base-3.14.5"
+epics_basebin = "/corvette/usr/local/epics/base-3.14.5/bin/vxWorks-ppc604"
diff --git a/iocBoot/iocvxWorks/ip330Scan.substitutions b/iocBoot/iocvxWorks/ip330Scan.substitutions
new file mode 100644
index 0000000000000000000000000000000000000000..490d8c5d80ef03f9da2be9827044b381356b1e18
--- /dev/null
+++ b/iocBoot/iocvxWorks/ip330Scan.substitutions
@@ -0,0 +1,21 @@
+file "$(IP330)/db/ip330Scan.template"
+{
+pattern
+{P,    R,      C, IPSLOT, S,  GAIN,  SCAN,  EGUL, LOPR, EGUF, HOPR,  PREC}
+{xxx:, ADC_1,  0,   d,    0,   0,      6,   -10.0, -10.0, 10.0, 10.0,   4}
+{xxx:, ADC_2,  0,   d,    1,   0,      6,   -10.0, -10.0, 10.0, 10.0,   4}
+{xxx:, ADC_3,  0,   d,    2,   0,      6,   -10.0, -10.0, 10.0, 10.0,   4}
+{xxx:, ADC_4,  0,   d,    3,   0,      6,   -10.0, -10.0, 10.0, 10.0,   4}
+{xxx:, ADC_5,  0,   d,    4,   0,      6,   -10.0, -10.0, 10.0, 10.0,   4}
+{xxx:, ADC_6,  0,   d,    5,   0,      6,   -10.0, -10.0, 10.0, 10.0,   4}
+{xxx:, ADC_7,  0,   d,    6,   0,      6,   -10.0, -10.0, 10.0, 10.0,   4}
+{xxx:, ADC_8,  0,   d,    7,   0,      6,   -10.0, -10.0, 10.0, 10.0,   4}
+{xxx:, ADC_9,  0,   d,    8,   0,      6,   -10.0, -10.0, 10.0, 10.0,   4}
+{xxx:, ADC_10, 0,   d,    9,   0,      6,   -10.0, -10.0, 10.0, 10.0,   4}
+{xxx:, ADC_11, 0,   d,   10,   0,      6,   -10.0, -10.0, 10.0, 10.0,   4}
+{xxx:, ADC_12, 0,   d,   11,   0,      6,   -10.0, -10.0, 10.0, 10.0,   4}
+{xxx:, ADC_13, 0,   d,   12,   0,      6,   -10.0, -10.0, 10.0, 10.0,   4}
+{xxx:, ADC_14, 0,   d,   13,   0,      6,   -10.0, -10.0, 10.0, 10.0,   4}
+{xxx:, ADC_15, 0,   d,   14,   0,      6,   -10.0, -10.0, 10.0, 10.0,   4}
+{xxx:, ADC_16, 0,   d,   15,   0,      6,   -10.0, -10.0, 10.0, 10.0,   4}
+}
diff --git a/iocBoot/iocvxWorks/motor.substitutions b/iocBoot/iocvxWorks/motor.substitutions
new file mode 100644
index 0000000000000000000000000000000000000000..a1c4a2a534018f8f7823bd05cf67d8f644b8c123
--- /dev/null
+++ b/iocBoot/iocvxWorks/motor.substitutions
@@ -0,0 +1,21 @@
+file "$(MOTOR)/db/motor.db"
+{
+pattern
+{P,		N,	M,		DTYP,			C,	S,	DESC,			EGU,		DIR,	VELO,	VBAS,	ACCL,	BDST,	BVEL,	BACC,	MRES,	PREC,	DHLM,	DLLM,	INIT}
+{xxx:,	1,	m$(N),	"OMS VME8/44",	0,	0,	"M0X",			mm,			Pos,	1,		.1,		.2,		0,		1,		.2,		2.5e-4,	5,		100,	-100,	""}
+{xxx:,	2,	m$(N),	"OMS VME8/44",	0,	1,	"M0Y",			mm,			Pos,	1,		.1,		.2,		0,		1,		.2,		2.5e-4,	5,		100,	-100,	""}
+{xxx:,	3,	m$(N),	"OMS VME8/44",	0,	2,	"M1Y",			mm,			Pos,	1,		.1,		.2,		0,		1,		.2,		2.5e-4,	5,		100,	-100,	""}
+{xxx:,	4,	m$(N),	"OMS VME8/44",	0,	3,	"M2X",			mm,			Pos,	1,		.1,		.2,		0,		1,		.2,		2.5e-4,	5,		100,	-100,	""}
+{xxx:,	5,	m$(N),	"OMS VME8/44",	0,	4,	"M2Y",			mm,			Pos,	1,		.1,		.2,		0,		1,		.2,		2.5e-4,	5,		100,	-100,	""}
+{xxx:,	6,	m$(N),	"OMS VME8/44",	0,	5,	"M2Z",			mm,			Pos,	1,		.1,		.2,		0,		1,		.2,		2.5e-4,	5,		100,	-100,	""}
+{xxx:,	7,	m$(N),	"OMS VME8/44",	0,	6,	"motor $(N)",	degrees,	Pos,	1,		.1,		.2,		0,		1,		.2,		2.5e-4,	5,		100,	-100,	""}
+{xxx:,	8,	m$(N),	"OMS VME8/44",	0,	7,	"motor $(N)",	degrees,	Pos,	1,		.1,		.2,		0,		1,		.2,		2.5e-4,	5,		100,	-100,	""}
+{xxx:,	9,	m$(N),	"OMS VME58",	0,	0,	"motor $(N)",	degrees,	Pos,	1,		.1,		.2,		0,		1,		.2,		2.5e-4,	5,		100,	-100,	""}
+{xxx:,	10,	m$(N),	"OMS VME58",	0,	1,	"motor $(N)",	degrees,	Pos,	1,		.1,		.2,		0,		1,		.2,		2.5e-4,	5,		100,	-100,	""}
+{xxx:,	11,	m$(N),	"OMS VME58",	0,	2,	"motor $(N)",	degrees,	Pos,	1,		.1,		.2,		0,		1,		.2,		2.5e-4,	5,		100,	-100,	""}
+{xxx:,	12,	m$(N),	"OMS VME58",	0,	3,	"motor $(N)",	degrees,	Pos,	1,		.1,		.2,		0,		1,		.2,		2.5e-4,	5,		100,	-100,	""}
+{xxx:,	13,	m$(N),	"OMS VME58",	0,	4,	"motor $(N)",	degrees,	Pos,	1,		.1,		.2,		0,		1,		.2,		2.5e-4,	5,		100,	-100,	""}
+{xxx:,	14,	m$(N),	"OMS VME58",	0,	5,	"motor $(N)",	degrees,	Pos,	1,		.1,		.2,		0,		1,		.2,		2.5e-4,	5,		100,	-100,	""}
+{xxx:,	15,	m$(N),	"OMS VME58",	0,	6,	"motor $(N)",	degrees,	Pos,	1,		.1,		.2,		0,		1,		.2,		2.5e-4,	5,		100,	-100,	""}
+{xxx:,	16,	m$(N),	"OMS VME58",	0,	7,	"motor $(N)",	degrees,	Pos,	1,		.1,		.2,		0,		1,		.2,		2.5e-4,	5,		100,	-100,	""}
+}
diff --git a/iocBoot/iocvxWorks/picMot.substitutions b/iocBoot/iocvxWorks/picMot.substitutions
new file mode 100644
index 0000000000000000000000000000000000000000..6bd85f06afe8bfd7af3c43ff7afd083d56ee52fe
--- /dev/null
+++ b/iocBoot/iocvxWorks/picMot.substitutions
@@ -0,0 +1,9 @@
+file "$(IP)/ipApp/Db/picos.db"
+{
+pattern
+{P,      pChan,       DESC,          serChan }
+{xxx:, 	 111,         pMotor111,        1    }
+{xxx:, 	 112,         pMotor112,        1    }
+{xxx:, 	 113,         pMotor113,        1    }
+ 
+}
diff --git a/iocBoot/iocvxWorks/resource.def b/iocBoot/iocvxWorks/resource.def
new file mode 100644
index 0000000000000000000000000000000000000000..2cce6784bb2699677cbe0746688c84629d18d5f6
--- /dev/null
+++ b/iocBoot/iocvxWorks/resource.def
@@ -0,0 +1 @@
+EPICS_CA_ADDR_LIST DBF_STRING "164.54.100.100 164.54.112.145 164.54.112.139 164.54.85.112"
diff --git a/iocBoot/iocvxWorks/saveData.req b/iocBoot/iocvxWorks/saveData.req
new file mode 100644
index 0000000000000000000000000000000000000000..80d9f07f27322d2829b83cd4c57c89dc5b3c36a8
--- /dev/null
+++ b/iocBoot/iocvxWorks/saveData.req
@@ -0,0 +1,79 @@
+[prefix]
+$(P)
+
+[status]
+$(P)saveData_status
+
+[message]
+$(P)saveData_message
+
+[filename]
+$(P)saveData_fileName
+
+[counter]	# scan counter
+$(P)saveData_scanNumber
+
+[fileSystem] # scan file system
+$(P)saveData_fileSystem
+
+[subdir]	# scan file subdirectory
+$(P)saveData_subDir
+
+[fullPathName]
+$(P)saveData_fullPathName
+
+[realTime1D] # if nonzero, write 1D data as it comes in
+$(P)saveData_realTime1D
+
+[scanRecord]	# specify scan records to be monitored
+# scan record	hand-shake PV name
+$(P)scanH,		$(P)scan1.WAIT
+$(P)scan1,		$(P)scan2.WAIT
+$(P)scan2,		$(P)scan3.WAIT
+$(P)scan3,		$(P)scan4.WAIT
+$(P)scan4
+
+[extraPV]
+$(P)userCalc1.CALC	"string"
+$(P)saveData_realTime1D "enum"
+$(P)saveData_scanNumber	"long"
+$(P)scaler1.TP
+$(P)saveData_fileSystem	"filesystem"
+$(P)scan1.P1SM		"scan mode"
+#$(P)mca1.NUSE	"CHANNELS:"
+#$(P)mca1.ERTM	"REAL_TIME:"
+#$(P)mca1.ELTM	"LIVE_TIME:"
+#$(P)mca1.CALO	"CAL_OFFSET:"
+#$(P)mca1.CALS	"CAL_SLOPE:"
+#$(P)mca1.CALQ	"CAL_QUAD:"
+#$(P)mca1.TTH	"TWO_THETA:"
+#$(P)mca1.R0LO	"ROI_0_LEFT:"
+#$(P)mca1.R0HI	"ROI_0_RIGHT:"
+#$(P)mca1.R0NM	"ROI_0_LABEL:"
+#$(P)mca1.R1LO	"ROI_1_LEFT:"
+#$(P)mca1.R1HI	"ROI_1_RIGHT:"
+#$(P)mca1.R1NM	"ROI_1_LABEL:"
+#$(P)mca1.R2LO	"ROI_2_LEFT:"
+#$(P)mca1.R2HI	"ROI_2_RIGHT:"
+#$(P)mca1.R2NM	"ROI_2_LABEL:"
+#$(P)mca1.R3LO	"ROI_3_LEFT:"
+#$(P)mca1.R3HI	"ROI_3_RIGHT:"
+#$(P)mca1.R3NM	"ROI_3_LABEL:"
+#$(P)mca1.R4LO	"ROI_4_LEFT:"
+#$(P)mca1.R4HI	"ROI_4_RIGHT:"
+#$(P)mca1.R4NM	"ROI_4_LABEL:"
+#$(P)mca1.R5LO	"ROI_5_LEFT:"
+#$(P)mca1.R5HI	"ROI_5_RIGHT:"
+#$(P)mca1.R5NM	"ROI_5_LABEL:"
+#$(P)mca1.R6LO	"ROI_6_LEFT:"
+#$(P)mca1.R6HI	"ROI_6_RIGHT:"
+#$(P)mca1.R6NM	"ROI_6_LABEL:"
+#$(P)mca1.R7LO	"ROI_7_LEFT:"
+#$(P)mca1.R7HI	"ROI_7_RIGHT:"
+#$(P)mca1.R7NM	"ROI_7_LABEL:"
+#$(P)mca1.R8LO	"ROI_8_LEFT:"
+#$(P)mca1.R8HI	"ROI_8_RIGHT:"
+#$(P)mca1.R8NM	"ROI_8_LABEL:"
+#$(P)mca1.R9LO	"ROI_9_LEFT:"
+#$(P)mca1.R9HI	"ROI_9_RIGHT:"
+#$(P)mca1.R9NM	"ROI_9_LABEL:"
diff --git a/iocBoot/iocvxWorks/scanParms.substitutions b/iocBoot/iocvxWorks/scanParms.substitutions
new file mode 100644
index 0000000000000000000000000000000000000000..8621589442266ded2b2dec8a170851978d99141a
--- /dev/null
+++ b/iocBoot/iocvxWorks/scanParms.substitutions
@@ -0,0 +1,54 @@
+file "$(STD)/db/scanParms.db"
+{
+{P=xxx:,SCANREC=xxx:scan1,Q=m1,POS=$(Q).VAL,RDBK=$(Q).RBV}
+{P=xxx:,SCANREC=xxx:scan1,Q=m2,POS=$(Q).VAL,RDBK=$(Q).RBV}
+{P=xxx:,SCANREC=xxx:scan1,Q=m3,POS=$(Q).VAL,RDBK=$(Q).RBV}
+{P=xxx:,SCANREC=xxx:scan1,Q=m4,POS=$(Q).VAL,RDBK=$(Q).RBV}
+{P=xxx:,SCANREC=xxx:scan1,Q=m5,POS=$(Q).VAL,RDBK=$(Q).RBV}
+{P=xxx:,SCANREC=xxx:scan1,Q=m6,POS=$(Q).VAL,RDBK=$(Q).RBV}
+{P=xxx:,SCANREC=xxx:scan1,Q=m7,POS=$(Q).VAL,RDBK=$(Q).RBV}
+{P=xxx:,SCANREC=xxx:scan1,Q=m8,POS=$(Q).VAL,RDBK=$(Q).RBV}
+{P=xxx:,SCANREC=xxx:scan1,Q=m9,POS=$(Q).VAL,RDBK=$(Q).RBV}
+{P=xxx:,SCANREC=xxx:scan1,Q=m10,POS=$(Q).VAL,RDBK=$(Q).RBV}
+{P=xxx:,SCANREC=xxx:scan1,Q=m11,POS=$(Q).VAL,RDBK=$(Q).RBV}
+{P=xxx:,SCANREC=xxx:scan1,Q=m12,POS=$(Q).VAL,RDBK=$(Q).RBV}
+{P=xxx:,SCANREC=xxx:scan1,Q=m13,POS=$(Q).VAL,RDBK=$(Q).RBV}
+{P=xxx:,SCANREC=xxx:scan1,Q=m14,POS=$(Q).VAL,RDBK=$(Q).RBV}
+{P=xxx:,SCANREC=xxx:scan1,Q=m15,POS=$(Q).VAL,RDBK=$(Q).RBV}
+{P=xxx:,SCANREC=xxx:scan1,Q=m16,POS=$(Q).VAL,RDBK=$(Q).RBV}
+
+{P=xxx:,SCANREC=xxx:scan1,Q=Table1X,POS=table1.X,RDBK=table1.XRB}
+{P=xxx:,SCANREC=xxx:scan1,Q=Table1Y,POS=table1.Y,RDBK=table1.YRB}
+{P=xxx:,SCANREC=xxx:scan1,Q=Table1Z,POS=table1.Z,RDBK=table1.ZRB}
+{P=xxx:,SCANREC=xxx:scan1,Q=Table1AX,POS=table1.AX,RDBK=table1.AXRB}
+{P=xxx:,SCANREC=xxx:scan1,Q=Table1AY,POS=table1.AY,RDBK=table1.AYRB}
+{P=xxx:,SCANREC=xxx:scan1,Q=Table1AZ,POS=table1.AZ,RDBK=table1.AZRB}
+
+#{P=xxx:,SCANREC=xxx:scan1,Q=BraggE,POS=BraggEAO.VAL,RDBK=BraggERdbkAO.VAL}
+#{P=xxx:,SCANREC=xxx:scan1,Q=BraggLambda,POS=BraggLambdaAO.VAL,RDBK=BraggLambdaRdbkAO.VAL}
+#{P=xxx:,SCANREC=xxx:scan1,Q=BraggTheta,POS=BraggThetaAO.VAL,RDBK=BraggThetaRdbkAO.VAL}
+
+#{P=xxx:,SCANREC=xxx:scan1,Q=HR1_E,POS=HR1_EAO.VAL,RDBK=HR1_ERdbkAO}
+#{P=xxx:,SCANREC=xxx:scan1,Q=HR1_A,POS=HR1_worldOffAO.VAL,RDBK=HR1_worldOffAO.VAL}
+
+# old slit
+{P=xxx:,SCANREC=xxx:scan1,Q=Slit1Hp,POS=Slit1Hxp.VAL,RDBK=Slit1Ht2.A}
+{P=xxx:,SCANREC=xxx:scan1,Q=Slit1Hn,POS=Slit1Hxn.VAL,RDBK=Slit1Ht2.B}
+{P=xxx:,SCANREC=xxx:scan1,Q=Slit1Hsize,POS=Slit1Hsize.VAL,RDBK=Slit1Ht2.C}
+{P=xxx:,SCANREC=xxx:scan1,Q=Slit1Hcenter,POS=Slit1Hcenter.VAL,RDBK=Slit1Ht2.D}
+{P=xxx:,SCANREC=xxx:scan1,Q=Slit1Vp,POS=Slit1Vxp.VAL,RDBK=Slit1Vt2.A}
+{P=xxx:,SCANREC=xxx:scan1,Q=Slit1Vn,POS=Slit1Vxn.VAL,RDBK=Slit1Vt2.B}
+{P=xxx:,SCANREC=xxx:scan1,Q=Slit1Vsize,POS=Slit1Vsize.VAL,RDBK=Slit1Vt2.C}
+{P=xxx:,SCANREC=xxx:scan1,Q=Slit1Vcenter,POS=Slit1Vcenter.VAL,RDBK=Slit1Vt2.D}
+
+# new soft-motor-based slit
+#{P=xxx:,SCANREC=xxx:scan1,Q=Slit2Hxn,POS=$(Q).VAL,RDBK=$(Q).RBV}
+#{P=xxx:,SCANREC=xxx:scan1,Q=Slit2Hxp,POS=$(Q).VAL,RDBK=$(Q).RBV}
+#{P=xxx:,SCANREC=xxx:scan1,Q=Slit2Hsize,POS=$(Q).VAL,RDBK=$(Q).RBV}
+#{P=xxx:,SCANREC=xxx:scan1,Q=Slit2Hcenter,POS=$(Q).VAL,RDBK=$(Q).RBV}
+#{P=xxx:,SCANREC=xxx:scan1,Q=Slit2Vxn,POS=$(Q).VAL,RDBK=$(Q).RBV}
+#{P=xxx:,SCANREC=xxx:scan1,Q=Slit2Vxp,POS=$(Q).VAL,RDBK=$(Q).RBV}
+#{P=xxx:,SCANREC=xxx:scan1,Q=Slit2Vsize,POS=$(Q).VAL,RDBK=$(Q).RBV}
+#{P=xxx:,SCANREC=xxx:scan1,Q=Slit2Vcenter,POS=$(Q).VAL,RDBK=$(Q).RBV}
+
+}
diff --git a/iocBoot/iocvxWorks/st.cmd b/iocBoot/iocvxWorks/st.cmd
new file mode 100644
index 0000000000000000000000000000000000000000..e50edaf4a2279eae7f9423e93369f9d21c197b1e
--- /dev/null
+++ b/iocBoot/iocvxWorks/st.cmd
@@ -0,0 +1,514 @@
+# vxWorks startup script
+
+# for vxStats
+#putenv "engineer=not me"
+#putenv "location=Earth"
+engineer="not me"
+location="Earth"
+
+cd ""
+< ../nfsCommands
+< cdCommands
+#< MPFconfig.cmd
+
+################################################################################
+cd topbin
+
+# If the VxWorks kernel was built using the project facility, the following must
+# be added before any C++ code is loaded (see SPR #28980).
+sysCplusEnable=1
+
+### Load custom EPICS software from user tree and from share
+ld < xxx.munch
+
+routerInit
+# talk to local IP's
+localMessageRouterStart(0)
+# talk to IP's on satellite processor
+# (must agree with tcpMessageRouterServerStart in st_proc1.cmd)
+# for IP modules on stand-alone mpf server board
+#tcpMessageRouterClientStart(1, 9900, Remote_IP, 1500, 40)
+
+# For processor with IP slots or that runs a dumb IP carrier
+#ld < ip.munch 
+#ld < mpfgpibserver.munch 
+#ld < mpfserialserver.munch
+#ld < dac128V.munch
+#ld < ip330.munch
+#ld < ip330Serv.munch
+#ld < ipUnidig.munch
+#ld < loveServer.o
+#ld < mpcServer.o
+
+# This IOC configures the MPF server code locally
+#cd startup
+#< st_mpfserver.cmd
+#cd topbin
+
+# For local OR remote GPIB server.  Can't use both (as of mpfGpib1.4)
+#ld < GpibHideosLocal.o
+#ld < GpibHideosRemote.o
+
+### dbrestore setup
+# ok to restore a save set that had missing values (no CA connection to PV)?
+sr_restore_incomplete_sets_ok = 1
+# dbrestore saves a copy of the save file it restored.  File name is, e.g.,
+# auto_settings.sav.bu or auto_settings.savYYMMDD-HHMMSS if
+# reboot_restoreDatedBU is nonzero.
+reboot_restoreDatedBU = 1;
+set_savefile_path(startup, "autosave")
+set_requestfile_path(startup, "")
+set_requestfile_path(startup, "autosave")
+set_requestfile_path(ip, "ipApp/Db")
+set_requestfile_path(ip330, "ip330App/Db")
+set_requestfile_path(mca, "mcaApp/Db")
+set_requestfile_path(ipunidig, "ipUnidigApp/Db")
+set_requestfile_path(dac128v, "dac128VApp/Db")
+set_requestfile_path(motor, "motorApp/Db")
+set_requestfile_path(std, "stdApp/Db")
+reboot_restoreDebug=0
+
+# override address, interrupt vector, etc. information in module_types.h
+#module_types()
+
+# need more entries in wait/scan-record channel-access queue?
+recDynLinkQsize = 1024
+
+# Specify largest array CA will transport
+# Note for N sscanRecord data points, need (N+1)*8 bytes, else MEDM
+# plot doesn't display
+putenv "EPICS_CA_MAX_ARRAY_BYTES=64008"
+
+cd startup
+################################################################################
+# Tell EPICS all about the record types, device-support modules, drivers,
+# etc. in the software we just loaded (xxx.munch)
+dbLoadDatabase("../../dbd/iocxxxVX.dbd")
+iocxxxVX_registerRecordDeviceDriver(pdbbase)
+
+# Love Controllers
+#devLoveDebug=1
+#loveServerDebug=1
+#dbLoadRecords("$(IP)/ipApp/Db/love.db", "P=xxx:,Q=Love_0,C=0,PORT=PORT2,ADDR=1");
+
+# interpolation
+dbLoadRecords("$(STD)/stdApp/Db/interp.db", "P=xxx:")
+
+
+# X-ray Instrumentation Associates Huber Slit Controller
+# supported by a customized version of the SNL program written by Pete Jemian
+#dbLoadRecords("$(STD)/stdApp/Db/xia_slit.db", "P=xxx:, HSC=hsc1:")
+#dbLoadRecords("$(STD)/stdApp/Db/xia_slit.db", "P=xxx:, HSC=hsc2:")
+#dbLoadRecords("$(IP)/ipApp/Db/generic_serial.db", "P=xxx:,C=0,IPSLOT=a,CHAN=6,BAUD=9600,PRTY=None,DBIT=8,SBIT=1")
+
+##### Pico Motors (Ernest Williams MHATT-CAT)
+##### Motors (see picMot.substitutions in same directory as this file) ####
+#dbLoadTemplate("picMot.substitutions")
+
+
+##############################################################################
+
+# Insertion-device control
+dbLoadRecords("$(STD)/stdApp/Db/IDctrl.db","P=xxx:,xx=02us")
+
+# test generic gpib record
+#dbLoadRecords("$(STD)/stdApp/Db/gpib.db","P=xxx:")
+# test generic camac record
+#dbLoadRecords("$(STD)/stdApp/Db/camac.db","P=xxx:")
+
+
+###############################################################################
+
+##### Motors (see motors.substitutions in same directory as this file) ####
+#dbLoadTemplate("basic_motor.substitutions")
+dbLoadTemplate("motor.substitutions")
+
+# OMS VME driver setup parameters: 
+#     (1)cards, (2)axes per card, (3)base address(short, 16-byte boundary), 
+#     (4)interrupt vector (0=disable or  64 - 255), (5)interrupt level (1 - 6),
+#     (6)motor task polling rate (min=1Hz,max=60Hz)
+omsSetup(2, 8, 0xFC00, 180, 5, 10)
+
+# OMS VME58 driver setup parameters: 
+#     (1)cards, (2)axes per card, (3)base address(short, 4k boundary), 
+#     (4)interrupt vector (0=disable or  64 - 255), (5)interrupt level (1 - 6),
+#     (6)motor task polling rate (min=1Hz,max=60Hz)
+oms58Setup(3, 8, 0x3000, 190, 5, 10)
+
+# Highland V544 driver setup parameters: 
+#     (1)cards, (2)axes per card, (3)base address(short, 4k boundary), 
+#     (4)interrupt vector (0=disable or  64 - 255), (5)interrupt level (1 - 6),
+#     (6)motor task polling rate (min=1Hz,max=60Hz)
+#v544Setup(0, 4, 0xDD00, 0, 5, 10)
+
+# Newport MM4000 driver setup parameters: 
+#     (1) max. controllers, (2)Unused, (3)polling rate (min=1Hz,max=60Hz) 
+#MM4000Setup(3, 0, 10)
+
+# Newport MM4000 driver configuration parameters: 
+#     (1)controller# being configured,
+#     (2)port type: 0-GPIB_PORT or 1-RS232_PORT,
+#     (3)GPIB link or MPF server location
+#     (4)GPIB address or hideos_task name
+#MM4000Config(0, 1, 1, "a-Serial[0]")
+
+# Newport PM500 driver setup parameters:
+#     (1) maximum number of controllers in system
+#     (2) maximum number of channels on any controller
+#     (3) motor task polling rate (min=1Hz,max=60Hz)
+#PM500Setup(1, 3, 10)
+
+# Newport PM500 configuration parameters:
+#     (1) card being configured
+#     (2) port type (0-GPIB_PORT, 1-RS232_PORT)
+#     (3) link for GPIB or hideos_card for RS-232
+#     (3)GPIB link or MPF server location
+#     (4) GPIB address (int) or mpf serial server name (string)
+#PM500Config(0, 1, 1, "a-Serial[4]")
+
+# A set of scan parameters for each positioner.  This is a convenience
+# for the user.  It can contain an entry for each scannable thing in the
+# crate.
+dbLoadTemplate("scanParms.substitutions")
+
+###############################################################################
+
+### Scalers: Joerger VSC8/16
+dbLoadRecords("$(STD)/stdApp/Db/Jscaler.db","P=xxx:,S=scaler1,C=0")
+# Joerger VSC setup parameters: 
+#     (1)cards, (2)base address(ext, 256-byte boundary), 
+#     (3)interrupt vector (0=disable or  64 - 255)
+VSCSetup(1, 0x90000000, 200)
+
+### Allstop, alldone
+# This database must agree with the motors and other positioners you've actually loaded.
+# Several versions (e.g., all_com_32.db) are in stdApp/Db
+dbLoadRecords("$(STD)/stdApp/Db/all_com_16.db","P=xxx:")
+
+### Scan-support software
+# crate-resident scan.  This executes 1D, 2D, 3D, and 4D scans, and caches
+# 1D data, but it doesn't store anything to disk.  (See 'saveData' below for that.)
+dbLoadRecords("$(STD)/stdApp/Db/scan.db","P=xxx:,MAXPTS1=4000,MAXPTS2=200,MAXPTS3=10,MAXPTS4=10,MAXPTSH=4000")
+
+# Slits
+dbLoadRecords("$(STD)/stdApp/Db/2slit.db","P=xxx:,SLIT=Slit1V,mXp=m3,mXn=m4")
+dbLoadRecords("$(STD)/stdApp/Db/2slit.db","P=xxx:,SLIT=Slit1H,mXp=m5,mXn=m6")
+
+# under development...
+#dbLoadRecords("$(STD)/stdApp/Db/2slit_soft.db","P=xxx:,SLIT=Slit2V,mXp=m13,mXn=m14")
+#dbLoadRecords("$(STD)/stdApp/Db/2slit_soft.db","P=xxx:,SLIT=Slit2H,mXp=m15,mXn=m16")
+
+# 2-post mirror
+#dbLoadRecords("$(STD)/stdApp/Db/2postMirror.db","P=xxx:,Q=M1,mDn=m18,mUp=m17,LENGTH=0.3")
+
+# User filters
+#dbLoadRecords("$(STD)/stdApp/Db/filterMotor.db","P=xxx:,Q=fltr1:,MOTOR=m1,LOCK=fltr_1_2:")
+#dbLoadRecords("$(STD)/stdApp/Db/filterMotor.db","P=xxx:,Q=fltr2:,MOTOR=m2,LOCK=fltr_1_2:")
+#dbLoadRecords("$(STD)/stdApp/Db/filterLock.db","P=xxx:,Q=fltr2:,LOCK=fltr_1_2:,LOCK_PV=xxx:DAC1_1.VAL")
+
+# Optical tables
+#tableRecordDebug=1
+dbLoadRecords("$(STD)/stdApp/Db/table.db","P=xxx:,Q=Table1,T=table1,M0X=m1,M0Y=m2,M1Y=m3,M2X=m4,M2Y=m5,M2Z=m6,GEOM=SRI")
+
+### Monochromator support ###
+# Kohzu and PSL monochromators: Bragg and theta/Y/Z motors
+# standard geometry (geometry 1)
+dbLoadRecords("$(STD)/stdApp/Db/kohzuSeq.db","P=xxx:,M_THETA=m9,M_Y=m10,M_Z=m11,yOffLo=17.4999,yOffHi=17.5001")
+# modified geometry (geometry 2)
+dbLoadRecords("$(STD)/stdApp/Db/kohzuSeq.db","P=xxx:,M_THETA=m9,M_Y=m10,M_Z=m11,yOffLo=4,yOffHi=36")
+
+# Heidenhain ND261 encoder (for PSL monochromator)
+#dbLoadRecords("$(IP)/ipApp/Db/heidND261.db", "P=xxx:,C=0,IPSLOT=a,CHAN=0")
+
+# Heidenhain IK320 VME encoder interpolator
+#dbLoadRecords("$(STD)/stdApp/Db/IK320card.db","P=xxx:,sw2=card0:,axis=1,switches=41344,irq=3")
+#dbLoadRecords("$(STD)/stdApp/Db/IK320card.db","P=xxx:,sw2=card0:,axis=2,switches=41344,irq=3")
+#dbLoadRecords("$(STD)/stdApp/Db/IK320group.db","P=xxx:,group=5")
+#drvIK320RegErrStr()
+
+# Spherical grating monochromator
+dbLoadRecords("$(STD)/stdApp/Db/SGM.db","P=xxx:,N=1,M_x=m7,M_rIn=m6,M_rOut=m8,M_g=m9")
+
+# 4-bounce high-resolution monochromator
+dbLoadRecords("$(STD)/stdApp/Db/hrSeq.db","P=xxx:,N=1,M_PHI1=m9,M_PHI2=m10")
+#dbLoadRecords("$(STD)/stdApp/Db/hrSeq.db","P=xxx:,N=2,M_PHI1=m11,M_PHI2=m12")
+
+### Canberra AIM Multichannel Analyzer ###
+#mcaRecordDebug=1
+#devMcaMpfDebug=1
+#mcaAIMServerDebug=1
+#aimDebug=1
+#icbDebug=1
+#icbServerDebug=1
+#icbDspDebug=1
+#icbTcaDebug=1
+
+# AIMConfig(char *serverName, int etherAddr, int port, int maxChans, 
+#	int maxSignals, int maxSequences, char *etherDev, int queueSize)
+#
+# serverName:   defined here, must agree with dbLoadRecords command
+# etherAddr:    ethernet address of AIM module
+# port:         Which ADC port of the AIM module does this config involve? [1,2]
+# maxChans:     Histogram bins per signal per sequence.  (If a multiplexor or
+#               MCS module is in use, this must agree with hardware setting.)
+# maxSignals:   How many signals (multiplexed ADC inputs)?  (If a multiplexor
+#               or MCS module is in use, this must agree with hardware setting.)
+# maxSequences: How many sequences (usually, a sequence is a "time slice")?
+# etherDev:     vxWorks device used to communicate over the network to AIM.
+#               Typically "ei0" for mv16x, mv17x; "dc0" for Motorola PowerPC
+# queueSize:    size of MPF message queue for this server (100 should be plenty)
+#
+# EXAMPLE:
+#   AIMConfig("AIM1/2", 0x9AA, 2, 2048, 1, 1, "dc0", 100)
+
+AIMConfig("AIM1/2", 0x9AA, 2, 4000, 1, 1, "dc0", 100)
+
+dbLoadRecords("$(MCA)/mcaApp/Db/mca.db","P=xxx:,M=mca1,INP=#C0 S0 @AIM1/2,DTYPE=MPF MCA,NCHAN=4000")
+
+# Initialize ICB software, and create a new ICB server
+# icbSetup(const char *serverName, int maxModules, int queueSize)
+icbSetup("icb/1", 10, 100)
+
+# Configure the new ICB server
+# icbConfig(const char *serverName, int module, int enetAddress, int icbAddress)
+icbConfig("icb/1", 0, 0x9AA, 3)
+
+# In dbLoadRecords commands for ICB devices
+#    CARD   = (0,1) for (local/remote),
+#    SERVER = server name supplied as argument to icbConfig(),
+#    ADDR   = module number supplied as argument to icbConfig()
+
+dbLoadRecords("$(MCA)/mcaApp/Db/icb_adc.db","P=xxx:,ADC=icbAdc1,CARD=0,SERVER=icb/1,ADDR=0")
+
+#icbConfig("icb/1", 2, 0x9AA, 2)
+#dbLoadRecords("$(MCA)/mcaApp/Db/icb_hvps.db","P=xxx:,HVPS=icbHvps1,CARD=0,SERVER=icb/1,ADDR=2")
+
+#icbConfig("icb/1", 3, 0x9AA, 4)
+#dbLoadRecords("$(MCA)/mcaApp/Db/icb_amp.db","P=xxx:,AMP=icbAmp1,CARD=0,SERVER=icb/1,ADDR=4")
+
+# icbTcaSetup(char *serverName, int maxModules, int queueSize)
+# icbTcaConfig(char *serverName, int module, int enetAddress, int icbAddress)
+
+# icbTcaSetup("icbTca/1", 3, 100)
+# icbTcaConfig("icbTca/1", 0, 0x9AA, 1)
+#dbLoadRecords("$(MCA)/mcaApp/Db/icb_tca.db","P=xxx:,TCA=icbTca1,MCA=mca1,CARD=0,SERVER=icbTca/1,ADDR=0")
+
+# Load 13 element detector software
+#< 13element.cmd
+
+# Load 3 element detector software
+#< 3element.cmd
+
+### Struck 7201 multichannel scaler (same as SIS 3806 multichannel scaler)
+
+#mcaRecordDebug = 10
+#devSTR7201Debug = 10
+#drvSTR7201Debug = 10
+
+#dbLoadRecords("$(MCA)/mcaApp/Db/Struck8.db","P=xxx:mcs:")
+#dbLoadRecords("$(MCA)/mcaApp/Db/simple_mca.db","P=xxx:mcs:,M=mca1,DTYP=Struck STR7201 MCS,PREC=3,INP=#C0 S0 @,CHANS=1000")
+#dbLoadRecords("$(MCA)/mcaApp/Db/simple_mca.db","P=xxx:mcs:,M=mca2,DTYP=Struck STR7201 MCS,PREC=3,INP=#C0 S1 @,CHANS=1000")
+#dbLoadRecords("$(MCA)/mcaApp/Db/simple_mca.db","P=xxx:mcs:,M=mca3,DTYP=Struck STR7201 MCS,PREC=3,INP=#C0 S2 @,CHANS=1000")
+#dbLoadRecords("$(MCA)/mcaApp/Db/simple_mca.db","P=xxx:mcs:,M=mca4,DTYP=Struck STR7201 MCS,PREC=3,INP=#C0 S3 @,CHANS=1000")
+#dbLoadRecords("$(MCA)/mcaApp/Db/simple_mca.db","P=xxx:mcs:,M=mca5,DTYP=Struck STR7201 MCS,PREC=3,INP=#C0 S4 @,CHANS=1000")
+#dbLoadRecords("$(MCA)/mcaApp/Db/simple_mca.db","P=xxx:mcs:,M=mca6,DTYP=Struck STR7201 MCS,PREC=3,INP=#C0 S5 @,CHANS=1000")
+#dbLoadRecords("$(MCA)/mcaApp/Db/simple_mca.db","P=xxx:mcs:,M=mca7,DTYP=Struck STR7201 MCS,PREC=3,INP=#C0 S6 @,CHANS=1000")
+#dbLoadRecords("$(MCA)/mcaApp/Db/simple_mca.db","P=xxx:mcs:,M=mca8,DTYP=Struck STR7201 MCS,PREC=3,INP=#C0 S7 @,CHANS=1000")
+
+# STR7201Setup(int numCards, int baseAddress, int interruptVector, int interruptLevel)
+#STR7201Setup(2, 0xA0000000, 210, 6)
+# STR7201Config(int card, int maxSignals, int maxChans, int 1=enable internal 25MHZ clock) 
+#STR7201Config(0, 8, 1000, 0) 
+
+### Acromag IP330 in sweep mode ###
+#dbLoadRecords("$(MCA)/mcaApp/Db/mca.db", "P=xxx:,M=mADC_1,DTYPE=ip330Sweep,NCHAN=2048,INP=#C0 S0 @d-Ip330Sweep")
+
+### Stuff for user programming ###
+dbLoadRecords("$(STD)/stdApp/Db/userCalcs10.db","P=xxx:")
+dbLoadRecords("$(STD)/stdApp/Db/userStringCalcs10.db","P=xxx:")
+dbLoadRecords("$(STD)/stdApp/Db/userTransforms10.db","P=xxx:")
+# extra userCalcs (must also load userCalcs10.db for the enable switch)
+dbLoadRecords("$(STD)/stdApp/Db/userCalcN.db","P=xxx:,N=I_Detector")
+dbLoadRecords("$(STD)/stdApp/Db/userAve10.db","P=xxx:")
+# string sequence (sseq) record
+dbLoadRecords("$(STD)/stdApp/Db/yySseq.db","P=xxx:,S=Sseq1")
+dbLoadRecords("$(STD)/stdApp/Db/yySseq.db","P=xxx:,S=Sseq2")
+dbLoadRecords("$(STD)/stdApp/Db/yySseq.db","P=xxx:,S=Sseq3")
+# 4-step measurement
+dbLoadRecords("$(STD)/stdApp/Db/4step.db", "P=xxx:")
+
+### serial support ###
+
+# generic serial ports
+#dbLoadRecords("$(IP)/ipApp/Db/generic_serial.db", "P=xxx:,C=0,IPSLOT=a,CHAN=0,BAUD=9600,PRTY=None,DBIT=8,SBIT=1")
+
+# serial O/I block (generic serial record with format and parse string calcs)
+# on epics/mpf processor
+#dbLoadRecords("$(IP)/ipApp/Db/serial_OI_block.db","P=xxx:,N=0_1,C=0,IPSLOT=a,CHAN=4")
+# on stand-alone mpf processor
+#dbLoadRecords("$(IP)/ipApp/Db/serial_OI_block.db","P=xxx:,N=1_1,C=0,IPSLOT=a,CHAN=4")
+
+# Stanford Research Systems SR570 Current Preamplifier
+#dbLoadRecords("$(IP)/ipApp/Db/SR570.db", "P=xxx:,A=A1,C=0,IPSLOT=a,CHAN=0")
+
+# Lakeshore DRC-93CA Temperature Controller
+#dbLoadRecords("$(IP)/ipApp/Db/LakeShoreDRC-93CA.db", "P=xxx:,Q=TC1,C=0,IPSLOT=a,CHAN=3")
+
+# Huber DMC9200 DC Motor Controller
+#dbLoadRecords("$(IP)/ipApp/Db/HuberDMC9200.db", "P=xxx:,Q=DMC1:,C=0,IPSLOT=a,CHAN=5")
+
+# Oriel 18011 Encoder Mike
+#dbLoadRecords("$(IP)/ipApp/Db/eMike.db", "P=xxx:,M=em1,C=0,IPSLOT=a,CHAN=2")
+
+# Keithley 2000 DMM
+#dbLoadRecords("$(IP)/ipApp/Db/Keithley2kDMM_mf.db","P=xxx:,Dmm=D1,C=1,IPSLOT=a,CHAN=0")
+
+# Oxford Cyberstar X1000 Scintillation detector and pulse processing unit
+#dbLoadRecords("$(IP)/ipApp/Db/Oxford_X1k.db","P=xxx:,S=s1,C=0,IPSLOT=a,CHAN=3")
+
+# Oxford ILM202 Cryogen Level Meter (Serial)
+#dbLoadRecords("$(IP)/ipApp/Db/Oxford_ILM202.db","P=xxx:,S=s1,C=0,IPSLOT=c,CHAN=2")
+
+### GPIB support ###
+# GPIB O/I block (generic gpib record with format and parse string calcs)
+# See HiDEOSGpibLinkConfig() below.
+#dbLoadRecords("$(IP)/ipApp/Db/GPIB_OI_block.db","P=xxx:,N=1,L=10")
+
+# Heidenhain AWE1024 at GPIB address $(A)
+#dbLoadRecords("$(IP)/ipApp/Db/HeidAWE1024.db", "P=xxx:,L=10,A=6")
+
+# Keithley 199 DMM at GPIB address $(A)
+#dbLoadRecords("$(STD)/stdApp/Db/KeithleyDMM.db", "P=xxx:,L=10,A=26")
+
+### Miscellaneous ###
+# Systran DAC database
+#dbLoadRecords("$(IP)/ipApp/Db/DAC.db", "P=xxx:,D=1,C=1,N=1,S=0,IPSLOT=c")
+#dbLoadRecords("$(IP)/ipApp/Db/DAC.db", "P=xxx:,D=1,C=1,N=2,S=1,IPSLOT=c")
+#dbLoadRecords("$(IP)/ipApp/Db/DAC.db", "P=xxx:,D=1,C=1,N=3,S=2,IPSLOT=c")
+#dbLoadRecords("$(IP)/ipApp/Db/DAC.db", "P=xxx:,D=1,C=1,N=4,S=3,IPSLOT=c")
+#dbLoadRecords("$(IP)/ipApp/Db/DAC.db", "P=xxx:,D=1,C=1,N=5,S=4,IPSLOT=c")
+#dbLoadRecords("$(IP)/ipApp/Db/DAC.db", "P=xxx:,D=1,C=1,N=6,S=5,IPSLOT=c")
+#dbLoadRecords("$(IP)/ipApp/Db/DAC.db", "P=xxx:,D=1,C=1,N=7,S=6,IPSLOT=c")
+#dbLoadRecords("$(IP)/ipApp/Db/DAC.db", "P=xxx:,D=1,C=1,N=8,S=7,IPSLOT=c")
+
+# vme test record
+dbLoadRecords("$(STD)/stdApp/Db/vme.db", "P=xxx:,Q=vme1")
+
+# Hewlett-Packard 10895A Laser Axis (interferometer)
+#dbLoadRecords("$(STD)/stdApp/Db/HPLaserAxis.db", "P=xxx:,Q=HPLaser1, C=0")
+# hardware configuration
+# example: devHP10895LaserAxisConfig(ncards,a16base)
+#devHPLaserAxisConfig(2,0x1000)
+
+# Acromag general purpose Digital I/O
+#dbLoadRecords("$(STD)/stdApp/Db/Acromag_16IO.db", "P=xxx:, A=1")
+
+# Acromag AVME9440 setup parameters:
+# devAvem9440Config (ncards,a16base,intvecbase)
+#devAvme9440Config(1,0x0400,0x78)
+
+# Miscellaneous PV's, such as burtResult
+dbLoadRecords("$(STD)/stdApp/Db/misc.db","P=xxx:")
+#dbLoadRecords("$(STD)/stdApp/Db/VXstats.db","P=xxx:")
+# vxStats
+dbLoadTemplate("vxStats.substitutions")
+
+# Elcomat autocollimator
+#dbLoadRecords("$(IP)/ipApp/Db/Elcomat.db", "P=xxx:,C=0,IPSLOT=a,CHAN=7")
+
+# Bunch-clock generator
+#dbLoadRecords("$(STD)/stdApp/Db/BunchClkGen.db","P=xxx:")
+#dbLoadRecords("$(STD)/stdApp/Db/BunchClkGenA.db", "UNIT=xxx", std)
+# hardware configuration
+# example: BunchClkGenConfigure(intCard, unsigned long CardAddress)
+#BunchClkGenConfigure(0, 0x8c00)
+
+### Queensgate piezo driver
+#dbLoadRecords("$(STD)/stdApp/Db/pzt_3id.db","P=xxx:")
+#dbLoadRecords("$(STD)/stdApp/Db/pzt.db","P=xxx:")
+
+### GP307 Vacuum Controller
+#dbLoadRecords("$(STD)/stdApp/Db/gp307.db","P=xxx:")
+
+### Queensgate Nano2k piezo controller
+#dbLoadRecords("$(STD)/stdApp/Db/Nano2k.db","P=xxx:,S=s1")
+
+# Eurotherm temp controller
+#dbLoadRecords("$(IP)/ipApp/Db/Eurotherm.db","P=xxx:,C=0,IPSLOT=a,CHAN=6")
+#devAoEurothermDebug=20
+
+# Analog I/O (Acromag IP330 ADC)
+#dbLoadTemplate("ip330Scan.substitutions")
+
+# Machine-status board (MRD 100)
+#####################################################
+# dev32VmeConfig(card,a32base,nreg,iVector,iLevel)                 
+#    card    = card number                         
+#    a32base = base address of card               
+#    nreg    = number of A32 registers on this card
+#    iVector = interrupt vector (MRD100 Only !!)
+#    iLevel  = interrupt level  (MRD100 Only !!)
+#  For Example                                     
+#   devA32VmeConfig(0, 0x80000000, 44, 0, 0)             
+#####################################################
+#  Configure the MSL MRD 100 module.....
+#devA32VmeConfig(0, 0xa0000200, 30, 0xa0, 5)
+
+# VVVVVVVVVVVVVVVVVVVVV This doesn't look right (tmm)
+#dbLoadRecords("$(STD)/stdApp/Db/msl_mrd100.db","C=0,S=01,ID1=00,ID2=00us")
+
+### Bit Bus configuration
+# BBConfig(Link, LinkType, BaseAddr, IrqVector, IrqLevel)
+# Link: ?
+# LinkType: 0:hosed; 1:xycom; 2:pep
+#BBConfig(3,1,0x2400,0xac,5)
+
+
+###############################################################################
+# Set shell prompt (otherwise it is left at mv167 or mv162)
+shellPromptSet "iocxxx> "
+iocLogDisable=1
+iocInit
+
+### startup State Notation Language programs
+seq &kohzuCtl, "P=xxx:, M_THETA=m9, M_Y=m10, M_Z=m11, GEOM=1, logfile=kohzuCtl.log"
+seq &hrCtl, "P=xxx:, N=1, M_PHI1=m9, M_PHI2=m10, logfile=hrCtl1.log"
+
+# Keithley 2000 series DMM
+# channels: 10, 20, or 22;  model: 2000 or 2700
+#seq &Keithley2kDMM,("P=xxx:, Dmm=D1, channels=20, model=2000")
+
+# Bunch clock generator
+#seq &getFillPat, "unit=xxx"
+
+# X-ray Instrumentation Associates Huber Slit Controller
+# supported by a SNL program written by Pete Jemian and modified (TMM) for use with the
+# sscan record
+#seq  &xia_slit, "name=hsc1, P=xxx:, HSC=hsc1:, S=xxx:seriala[6]"
+
+### Start up the autosave task and tell it what to do.
+# The task is actually named "save_restore".
+# (See also, 'initHooks' above, which is the means by which the values that
+# will be saved by the task we're starting here are going to be restored.
+# Note that you can reload these sets after creating them: e.g., 
+# reload_monitor_set("auto_settings.req",30,"P=xxx:")
+#
+# save positions every five seconds
+create_monitor_set("auto_positions.req",5,"P=xxx:")
+# save other things every thirty seconds
+create_monitor_set("auto_settings.req",30,"P=xxx:")
+
+
+### Start the saveData task.
+# saveData_MessagePolicy
+# 0: wait forever for space in message queue, then send message
+# 1: send message only if queue is not full
+# 2: send message only if queue is not full and specified time has passed (SetCptWait()
+#    sets this time.)
+# 3: if specified time has passed, wait for space in queue, then send message
+# else: don't send message
+#debug_saveData = 2
+saveData_MessagePolicy = 2
+saveData_SetCptWait_ms(100)
+saveData_Init("saveData.req", "P=xxx:")
+#saveData_PrintScanInfo("xxx:scan1")
diff --git a/iocBoot/iocvxWorks/st1.cmd b/iocBoot/iocvxWorks/st1.cmd
new file mode 100644
index 0000000000000000000000000000000000000000..18ea365faeb537e467a8a04b94d0a3b9528dfeb8
--- /dev/null
+++ b/iocBoot/iocvxWorks/st1.cmd
@@ -0,0 +1,22 @@
+cd ""
+< ../nfsCommands
+< cdCommands.68K
+< MPFconfig.cmd
+
+cd appbin
+ld < mpfLib
+ld < ipLib
+ld < mpfserialserverLib
+# Uncomment, as needed.
+#ld < mpfgpibserverLib
+#ld < dac128VLib
+
+cd startup
+#start message router
+routerInit
+tcpMessageRouterServerStart(1, 9900, Remote_IP, 1500, 40)
+
+< st_mpfserver.cmd
+
+shellPromptSet "iocxxx1> "
+
diff --git a/iocBoot/iocvxWorks/st_mpfserver.cmd b/iocBoot/iocvxWorks/st_mpfserver.cmd
new file mode 100644
index 0000000000000000000000000000000000000000..e3c5dd77ccfe086150ed86f571eb0a802df92886
--- /dev/null
+++ b/iocBoot/iocvxWorks/st_mpfserver.cmd
@@ -0,0 +1,159 @@
+# This configures the MPF server stuff
+
+# First carrier
+# slot a: IP-Octal (serial RS-232)
+# slot b: IpUnidig (digital I/O)
+# slot c: Ip330 (A/D converter)
+# slot d: Dac128V (D/A converter)
+
+###############################################################################
+# Initialize IP carrier
+# ipacAddCarrier(ipac_carrier_t *pcarrier, char *cardParams)
+#   pcarrier   - pointer to carrier driver structure
+#   cardParams - carrier-specific init parameters
+
+# Select for MVME162 or MVME172 CPU board IP carrier.
+#carrier1=ipacAddMVME162("A:l=3,3 m=0xe0000000,64;B:l=3,3 m=0xe0010000,64;C:l=3,3 m=0xe0020000,64;D:l=3,3 m=0xe0030000,64")
+
+# Select for SBS VIPC616-01 version IP carrier.
+carrier1=ipacAddVIPC616_01("0x3000,0xa0000000")
+
+###############################################################################
+# Initialize Octal UART stuff
+tyGSOctalDrv 1
+tyGSOctalModuleInit("GSIP_OCTAL232", 0x80, 0, 0)
+
+# int tyGSMPFInit(char *server, int uart, int channel, int baud, char parity, int sbits,
+#                 int dbits, char handshake, char *eomstr)
+tyGSMPFInit("serial1",  0, 0, 9600,'N',2,8,'N',"")  /* SRS570 */
+tyGSMPFInit("serial2",  0, 1,19200,'E',1,8,'N',"")  /* MKS */
+tyGSMPFInit("serial3",  0, 2, 9600,'E',1,7,'N',"")  /* Digitel */
+tyGSMPFInit("serial4",  0, 3, 9600,'N',1,8,'N',"")  /* MPC */
+tyGSMPFInit("serial5",  0, 4, 9600,'E',1,7,'N',"")  /* McClennan PM304 */
+tyGSMPFInit("serial6",  0, 5,19200,'N',1,8,'N',"")  /* Keithley 2000 */
+tyGSMPFInit("serial7",  0, 6, 9600,'N',1,8,'N',"")  /* Oxford ILM cryometer */
+tyGSMPFInit("serial8",  0, 7,19200,'N',1,8,'N',"")  /* Love controllers */
+
+# Initialize Greenspring IP-Unidig
+# initIpUnidig(char *serverName,
+#              int carrier,
+#              int slot,
+#              int queueSize,
+#              int msecPoll,
+#              int intVec,
+#              int risingMask,
+#              int fallingMask,
+#              int biMask,
+#              int maxClients)
+# serverName  = name to give this server
+# carrier     = IPAC carrier number (0, 1, etc.)
+# slot        = IPAC slot (0,1,2,3, etc.)
+# queueSize   = size of output queue for EPICS
+# msecPoll    = polling time for input bits in msec.  Default=100.
+# intVec      = interrupt vector
+# risingMask  = mask of bits to generate interrupts on low to high (24 bits)
+# fallingMask = mask of bits to generate interrupts on high to low (24 bits)
+# biMask      = mask of bits to generate callbacks to bi record support
+#               This can be a subset of (risingMask | fallingMask)
+# maxClients  = Maximum number of callback tasks which will attach to this
+#               IpUnidig server.  This
+#               does not refer to the number of EPICS clients.  A value of
+#               10 should certainly be safe.
+initIpUnidig("Unidig1", 0, 1, 20, 2000, 116, 1, 1, 0xffff, 10)
+
+# Initialize Acromag IP-330 ADC
+# initIp330(
+#   const char *moduleName, int carrier, int slot,
+#   const char *typeString, const char *rangeString,
+#   int firstChan, int lastChan,
+#   int maxClients, int intVec)
+# moduleName  = name to give this module
+# carrier     = IPAC carrier number (0, 1, etc.)
+# slot        = IPAC slot (0,1,2,3, etc.)
+# typeString  = "D" or "S" for differential or single-ended
+# rangeString = "-5to5","-10to10","0to5", or "0to10"
+#               This value must match hardware setting selected
+# firstChan   = first channel to be digitized.  This must be in the range:
+#               0 to 31 (single-ended)
+#               0 to 15 (differential)
+# lastChan    = last channel to be digitized
+# maxClients =  Maximum number of Ip330 tasks which will attach to this
+#               Ip330 module.  For example Ip330Scan, Ip330Sweep, etc.  This
+#               does not refer to the number of EPICS clients.  A value of
+#               10 should certainly be safe.
+# intVec        Interrupt vector
+initIp330("Ip330_1",0,2,"D","-5to5",0,15,10,120)
+
+# configIp330(
+#   const char *moduleName,
+#   int scanMode, const char *triggerString,
+#   int microSecondsPerScan, int secondsBetweenCalibrate)
+# moduleName  = name of module passed to initIp330 above
+# scanMode    = scan mode:
+#               0 = disable
+#               1 = uniformContinuous
+#               2 = uniformSingle
+#               3 = burstContinuous (normally recommended)
+#               4 = burstSingle
+#               5 = convertOnExternalTriggerOnly
+# triggerString = "Input" or "Output". Selects the direction of the external
+#               trigger signal.
+# microSecondsPerScan = repeat interval to digitize all channels
+#               The minimum theoretical time is 15 microseconds times the
+#               number of channels, but a practical limit is probably 100
+#               microseconds.
+# secondsBetweenCalibrate = number of seconds between calibration cycles.
+#               If zero then there will be no periodic calibration, but
+#               one calibration will still be done at initialization.
+configIp330("Ip330_1", 3,"Input",500,0)
+
+# initIp330Scan(
+#      const char moduleName, const char *serverName, int firstChan, int lastChan,
+#      int queueSize)
+# moduleName = module name passed to initIp330 above
+# serverName = name to give this server.  Must match the INP parm field in
+#              EPICS records
+# firstChan  = first channel to be used by Ip330Scan.  This must be in the
+#              range firstChan to lastChan specified in initIp330
+# lastChan   = last channel to be used by Ip330Scan.  This must be in the range
+#              firstChan to lastChan specified in initIp330
+# queueSize  = size of output queue for MPF. Make this the maximum number
+#              of ai records attached to this server.
+initIp330Scan("Ip330_1","Ip330Scan1",0,15,100)
+
+# initIp330Sweep(char *moduleName, char *serverName, int firstChan,
+#     int lastChan, int maxPoints, int queueSize)
+# moduleName = module name passed to initIp330 above
+# serverName = name to give this server
+# firstChan  = first channel to be used by Ip330Sweep.  This must be in the
+#              range firstChan to lastChan specified in initIp330
+# lastChan   = last channel to be used by Ip330Sweep.  This must be in the
+#              range firstChan to lastChan specified in initIp330
+# maxPoints  = maximum number of points in a sweep.  The amount of memory
+#              allocated will be maxPoints*(lastChan-firstChan+1)*4 bytes
+# queueSize  = size of output queue for EPICS
+initIp330Sweep("Ip330_1","Ip330Sweep1",0,3,2048,100)
+
+# initIp330PID(const char *serverName,
+#        char *ip330Name, int ADCChannel, dacName, int DACChannel,
+#        int queueSize)
+# serverName = name to give this server
+# ip330Name  = module name passed to initIp330 above
+# ADCChannel = ADC channel to be used by Ip330PID as its readback source.
+#              This must be in the range firstChan to lastChan specified in
+#              initIp330
+# dacName    = server name passed to initDAC128V
+# DACChannel = DAC channel to be used by Ip330PID as its control output.  This
+#              must be in the range 0-7.
+# queueSize  = size of output queue for EPICS
+initIp330PID("Ip330PID1", "Ip330_1", 0, "DAC1", 0, 20)
+
+# Initialize Systran DAC
+# initDAC128V(char *serverName, int carrier, int slot, int queueSize)
+# serverName  = name to give this server
+# carrier     = IPAC carrier number (0, 1, etc.)
+# slot        = IPAC slot (0,1,2,3, etc.)
+# queueSize   = size of output queue for EPICS
+#
+initDAC128V("DAC1", 0, 3, 20)
+
diff --git a/iocBoot/iocvxWorks/vxStats.substitutions b/iocBoot/iocvxWorks/vxStats.substitutions
new file mode 100644
index 0000000000000000000000000000000000000000..6e4f87558c1b34fc73d16da4026f3959e568143e
--- /dev/null
+++ b/iocBoot/iocvxWorks/vxStats.substitutions
@@ -0,0 +1,69 @@
+#
+# Macro Descriptions
+#
+# stats.db:
+#
+# P = first part of PV names.  
+# HMM = HOPR field of Maximum Free Memory Block (unit is bytes)
+# WMM = LOW field of Maximum Free Memory Block
+# AMM = LOLO field of Maximum Free Memory Block
+# HCP = HOPR field of CPU Load (unit is %)
+# WCP = HIGH field of CPU Load
+# ACP = HIHI field of CPU Load
+# HCL = HOPR field of CA Client count
+# WCL = HIGH field of CA Client count
+# ACL = HIHI field of CA Client count
+# HCX = HOPR field of CA Connection count
+# WCX = HIGH field of CA Connection count
+# HCX = HIHI field of CA Connection count
+# HFD = HOPR field of Available File Descriptor count
+# WFD = LOW field of Available File Descriptor count
+# AFD = LOLO field of Available File Descriptor count
+# WMB = LOW field of % Free MBufs
+# AMB = LOLO field of % Free MBufs
+#
+# reboot.db:
+#
+# P = first part of PV names.  
+# T = time in seconds that reboot enable stays high after button push.
+#
+# ClusterLine.template:
+#
+# P = first part of PV names.  
+# PO = pool (0 = Data, 1 = System)
+# SI = size index (first size is index 0)
+# SC = SCAN field content
+#
+
+file "$(VXSTATS)/db/stats.template"
+{
+    {P=xxx:,
+	HMM=50000000,WMM=500000,AMM=100000,
+	HCP=100,WCP=50,ACP=80,
+	HCL=200,WCL=100,ACL=175,
+	HCX=2000,WCX=1000,ACX=1750,
+	HFD=150,WFD=20,AFD=5,WMB=50,AMB=10}
+}
+file "$(VXSTATS)/db/reboot.template"
+{
+    {P=xxx:,T=3}
+}
+file "$(VXSTATS)/db/ClusterLine.template"
+{
+    {P=xxx:,PO=0,SI=0,SC="10 second"}
+    {P=xxx:,PO=0,SI=1,SC="10 second"}
+    {P=xxx:,PO=0,SI=2,SC="10 second"}
+    {P=xxx:,PO=0,SI=3,SC="10 second"}
+    {P=xxx:,PO=0,SI=4,SC="10 second"}
+    {P=xxx:,PO=0,SI=5,SC="10 second"}
+    {P=xxx:,PO=0,SI=6,SC="10 second"}
+    {P=xxx:,PO=0,SI=7,SC="10 second"}
+    {P=xxx:,PO=1,SI=0,SC="10 second"}
+    {P=xxx:,PO=1,SI=1,SC="10 second"}
+    {P=xxx:,PO=1,SI=2,SC="10 second"}
+    {P=xxx:,PO=1,SI=3,SC="10 second"}
+    {P=xxx:,PO=1,SI=4,SC="10 second"}
+    {P=xxx:,PO=1,SI=5,SC="10 second"}
+    {P=xxx:,PO=1,SI=6,SC="10 second"}
+    {P=xxx:,PO=1,SI=7,SC="10 second"}
+}