From 6f8dbab8b2ecc8cd095b1724b1a595962851def8 Mon Sep 17 00:00:00 2001
From: Jens Georg <jens.georg@desy.de>
Date: Wed, 1 Jul 2020 20:30:42 +0200
Subject: [PATCH] bam: Add initial configuration for one station

---
 bam/baseconfig.py                             | 132 ++++++++++
 bam/hostlist                                  |  20 ++
 bam/settings/dynamic_setttings.py             |   3 +
 bam/templates/BAM.dmap                        |  10 +
 bam/templates/RPC_LIBNO                       |   2 +
 bam/templates/bam_motor.conf                  |   9 +
 bam/templates/bam_server.conf                 |  56 ++++
 bam/templates/link_lock.xlmap                 |  15 ++
 bam/templates/mlo.xlmap                       |  12 +
 .../motorConfig_2xlimes60_optimal_bam.xml     |  23 ++
 bam/templates/sdiag_bam_fmc25_r3951.mapp      | 150 +++++++++++
 .../sync_pzt4_md22_md22_fmc20_6s45_r2261.mapp | 248 ++++++++++++++++++
 bam/templates/toroid.xlmap                    |  24 ++
 13 files changed, 704 insertions(+)
 create mode 100644 bam/baseconfig.py
 create mode 100644 bam/hostlist
 create mode 100644 bam/settings/dynamic_setttings.py
 create mode 100644 bam/templates/BAM.dmap
 create mode 100644 bam/templates/RPC_LIBNO
 create mode 100644 bam/templates/bam_motor.conf
 create mode 100644 bam/templates/bam_server.conf
 create mode 100644 bam/templates/link_lock.xlmap
 create mode 100644 bam/templates/mlo.xlmap
 create mode 100644 bam/templates/motorConfig_2xlimes60_optimal_bam.xml
 create mode 100644 bam/templates/sdiag_bam_fmc25_r3951.mapp
 create mode 100644 bam/templates/sync_pzt4_md22_md22_fmc20_6s45_r2261.mapp
 create mode 100644 bam/templates/toroid.xlmap

diff --git a/bam/baseconfig.py b/bam/baseconfig.py
new file mode 100644
index 0000000..43f6e83
--- /dev/null
+++ b/bam/baseconfig.py
@@ -0,0 +1,132 @@
+import typing
+
+if len(INSTANCE_CONFIG) == 3:
+    ACCELERATOR, DEVICE, STATION = INSTANCE_CONFIG
+    INSTANCE_NAME = None
+elif len(INSTANCE_CONFIG) == 4:
+    ACCELERATOR, DEVICE, STATION, INSTANCE_NAME = INSTANCE_CONFIG
+else:
+    raise RuntimeError("Invalid INSTANCE_CONFIG: " + str(INSTANCE_CONFIG))
+
+def makeDoocsArray(values: typing.Iterable) -> str:
+    return "      ".join(map(str, values))
+
+TOROID_LOCATION = {
+    '203.B1' : 'TORA.203.B1'
+}
+
+MLO_DEVICE = {
+    '203.B1' : 'LASER.LOCK.XLO'
+}
+
+MLO_LOCATION = {
+    '203.B1' : 'XTIN.MLO1'
+}
+
+LINK_LOCATION = {
+    '203.B1' : 'XTIN.AMC6.CONTROLLER'
+}
+
+LINK_LOCK_NUMBER = {
+    '203.B1' : 1
+}
+
+TOROID_FT = {
+    'XFEL' : ['SAMPLE.SA1', 'SAMPLE.SA2', 'SAMPLE.SA3'],
+    'FLASH' : ['SAMPLE.FLASH1', 'SAMPLE.FLASH2']
+}
+
+# Lab is part of XFEL but has different location
+TOROID_FT['LAB'] = TOROID_FT['XFEL']
+
+TIMER_LOCATION = {
+    '203.B1' : 'SD205B1'
+}
+
+TOROID_DATA_THREESHOLD = {
+    '203.B1' : 5e-3
+}
+
+MOTOR_CONVERSION_FACTOR = {
+    '203.B1' : [4.981200e-01, 4.974300e-01, 4.974300e-01, 4.974300e-01],
+}
+
+MOTOR_CONVERSION_REFLECTION = {
+    '203.B1' : [1, 1, 1, 1]
+}
+
+MOTOR_CONVERSION_TRANSLATION_OFFSET = {
+    '203.B1' : [0, 0, 0, 0]
+}
+
+DELTAT_MOTOR_SIGN = {
+    '203.B1' : [1, 1, 1]
+}
+
+DELTAT_SIGN = {
+    '203.B1' : [1e-3, 1e-3, 1e-3]
+}
+
+MODULATION_SIGN = {
+    '203.B1' : [-1, -1]
+}
+
+START_ARRAY_VALUE_ACCURACY = {
+    '203.B1' : 1
+}
+
+N_SAMPLE_ACCURACY = {
+    '203.B1' : '255'
+}
+
+FEEDBACK_THRESHOLD_CHARGE = {
+    '203.B1' : [0,0,0]
+}
+
+ARRIVAL_TIME_OFFSET = {
+    '203.B1' : [-1.300000e+05, -1.300000e+05, 0.0]
+}
+
+####
+# Common hardware settings
+####
+
+BAM_DEVNO = 3
+MOTOR_DEVNO = 8
+
+#
+# Generic configuration
+#
+OPER_UID = -1
+XPERT_UID = -1
+XPERT_GID = 0
+SVR_LOCATION = HOSTNAME.upper() + "._SVR"
+FACILITY = ACCELERATOR + '.SDIAG'
+WATCHDOG_ADDRESS = ACCELERATOR + '.SYSTEM/' + HOSTNAME.upper() + '.WATCH/SVR.BAM'
+MAIN_LOCATION = STATION
+RPC_NUMBER = 610489844
+
+# basic configuration that is different per accelerator
+if ACCELERATOR in ["XFEL", "LAB"]:
+    OPER_GID = 514  # xfelsdiag
+    XPERT_GID = 514 # xfelsdiag
+
+elif ACCELERATOR in ["FLASH"]:
+    OPER_GID = 422   # flash
+    XPERT_GID = 414  # ttfsdiag
+
+#
+# Other required output parameters for downstream scripting (e.g. postinst)
+#
+if INSTANCE_NAME is None:
+    SERVERNAME = 'bam_server'
+else:
+    SERVERNAME = 'bam_{}_server'.format(INSTANCE_NAME.lower())
+
+WORKDIR = '/export/doocs/server/' + SERVERNAME
+EXECUTABLE_IN_PACKAGE = '/export/doocs/server/bam_server/bam_server'
+USE_DOOCS_WATCHDOG = "true"
+FILES_TO_SYMLINK_BETWEEN_INSTANCES = ""
+SYSTEM_UID = "doocsadm"
+SYSTEM_GID = "doocsadm"
+FULL_STATION_NAME = DEVICE + "." + STATION
diff --git a/bam/hostlist b/bam/hostlist
new file mode 100644
index 0000000..4e0a72d
--- /dev/null
+++ b/bam/hostlist
@@ -0,0 +1,20 @@
+# host name                 dynamic/static common prefix   list of stations (space separated, TYPE/DEVICE[/INSTANCE_NAME_INFIX])
+
+# flash
+flashcpusdbc2.desy.de       D              flash           BAM/3DBC2 BAM/1UBC2/1UBC2
+flashcpusd4dbc3.desy.de     D              flash           BAM/4DBC3
+flashcpusd1sfelc.desy.de    D              flash           BAM/1SFELC
+flashcpusd8fl2burn.desy.de  D              flash           BAM/8FL2BURN
+flashcpusd7flfmaff.desy.de  D              flash           BAM/7FLFMAFF
+flashcpusd15acc7.desy.de    D              flash           BAM/15ACC7
+
+# xfel
+xfelcpusd47i1.desy.de       D              xfel            BAM/47.I1
+xfelcpusd181b1.desy.de      D              xfel            BAM/181.B1
+xfelcpusd205b1.desy.de      D              xfel            BAM/203.B1
+xfelcpusd392b2.desy.de      D              xfel            BAM/392.B2
+xfelcpusd417b2.desy.de      D              xfel            BAM/414.B2
+xfelcpusd1932tl.desy.de     D              xfel            BAM/1932M.TL BAM/1932S.TL/SURROGATE
+
+# labs
+xfelcpusdxlab1.desy.de      D              lab             BAM/XLAB1
diff --git a/bam/settings/dynamic_setttings.py b/bam/settings/dynamic_setttings.py
new file mode 100644
index 0000000..a130601
--- /dev/null
+++ b/bam/settings/dynamic_setttings.py
@@ -0,0 +1,3 @@
+BAM_REVISION="r3951"
+MOTOR_REVISION="r2261"
+
diff --git a/bam/templates/BAM.dmap b/bam/templates/BAM.dmap
new file mode 100644
index 0000000..f0f489a
--- /dev/null
+++ b/bam/templates/BAM.dmap
@@ -0,0 +1,10 @@
+##mako
+BAM_DEVICE    (pci:pcieunis${BAM_DEVNO}?map=sdiag_bam_fmc25_${BAM_REVISION}.mapp)
+MOTOR_DEVICE  (pci:pciedevs${MOTOR_DEVNO}?map=sync_pzt4_md22_md22_fmc20_6s45_${MOTOR_REVISION}.mapp)
+TOROID_RAW    (doocs?facility=${ACCELERATOR}.DIAG&device=TOROID&location=${TOROID_LOCATION[STATION]})
+TOROID        (logicalNameMap?map=toroid.xlmap)
+MLO_RAW       (doocs?facility=${ACCELERATOR}.SYNC&device=${MLO_DEVICE[STATION]}&location=${MLO_LOCATION[STATION]})
+MLO           (logicalNameMap?map=mlo.xlmap)
+LINK_RAW      (doocs?facility=${ACCELERATOR}.SYNC&device=LINK.LOCK&location=${LINK_LOCATION[STATION]})
+LINK_FALLBACK (doocs?facility=${ACCELERATOR}.SYNC&device=LINK.LOCK.STATUS&location=${LINK_LOCATION[STATION]})
+LINK          (logicalNameMap?map=link_lock.xlmap)
diff --git a/bam/templates/RPC_LIBNO b/bam/templates/RPC_LIBNO
new file mode 100644
index 0000000..5312da1
--- /dev/null
+++ b/bam/templates/RPC_LIBNO
@@ -0,0 +1,2 @@
+##mako
+${RPC_NUMBER}
diff --git a/bam/templates/bam_motor.conf b/bam/templates/bam_motor.conf
new file mode 100644
index 0000000..1ad0f8e
--- /dev/null
+++ b/bam/templates/bam_motor.conf
@@ -0,0 +1,9 @@
+##mako
+MOTOR_DEVICE MD22.0 0 motorConfig_2xlimes60_optimal_bam.xml ""
+MOTOR_DEVICE MD22.0 1 motorConfig_2xlimes60_optimal_bam.xml ""
+"" "" 0 "" ""
+%if ACCELERATOR == 'FLASH':
+"" "" 0 "" ""
+%else:
+MOTOR_DEVICE MD22.1 1 motorConfig_2xlimes60_optimal_bam.xml ""
+%endif
diff --git a/bam/templates/bam_server.conf b/bam/templates/bam_server.conf
new file mode 100644
index 0000000..0d7865a
--- /dev/null
+++ b/bam/templates/bam_server.conf
@@ -0,0 +1,56 @@
+##mako
+# Conf file created at 2020-06-30T11:18:48
+<%
+timer = ACCELERATOR + ".SDIAG/TIMER/" + TIMER_LOCATION[STATION]
+%>
+eq_conf: 
+
+oper_uid: 	${OPER_UID}
+oper_gid: 	${OPER_GID}
+xpert_uid: 	${XPERT_UID}
+xpert_gid: 	${XPERT_GID}
+custom_uid: 	0
+custom_gid: 	0
+ring_buffer: 	50000
+memory_buffer: 	500
+
+eq_fct_name: 	"${SVR_LOCATION}"
+eq_fct_type: 	1
+{
+SVR.NAME:  	"${SVR_LOCATION}"
+SVR.PROGRAMMER: 	"Jens Georg <jens.georg@desy.de>"
+SVR.ERRORLOG: 	"bam_server.log"
+SVR.STORE.RATE: 	100
+SVR.STORE.AUTO: 	10
+SVR.HOST_NAME:  	"${HOSTNAME}"
+SVR.RPC_NUMBER: 	${RPC_NUMBER}
+SVR.WDADDR: 	"${WATCHDOG_ADDRESS}/"
+SVR.BPN: 	15000
+SVR.SPR: 	0
+}
+eq_fct_name: 	"${MAIN_LOCATION}"
+eq_fct_type: 	10
+{
+NAME:  	"${MAIN_LOCATION}"
+%for i in range(1,4):
+BUNCH_INDEX${i}:
+BUNCH_INDEX${i}.ZMQNAME:	"${timer}/BUNCH_FIRST_INDEX.${i}"
+%endfor
+BUNCH_POSITION.1:
+BUNCH_POSITION.1.ZMQNAME: 	"${timer}/BUNCH_POSITION.1"
+TOROID_DATA:
+TOROID_DATA.ZMQNAME:	"${ACCELERATOR}.DIAG/TOROID/${TOROID_LOCATION[STATION]}/CHARGE.TD"
+TOROID_DATA_THREESHOLD:	${TOROID_DATA_THREESHOLD[STATION]}
+TOROID_ADDRESS:	"${ACCELERATOR}.DIAG/TOROID/${TOROID_LOCATION[STATION]}"
+TIMERMQ_SERVER.ZMQNAME: "${timer}/MACRO_PULSE_NUMBER"
+SET_PEAK_BASE_LOW_CHARGE_CHANNEL:	0
+SET_PEAK_BASE_HIGH_CHARGE_CHANNEL:	0
+MOTOR_CONVERSION_FACTOR: ${makeDoocsArray(MOTOR_CONVERSION_FACTOR[STATION])}
+MOTOR_CONVERSION_REFLECTION: ${makeDoocsArray(MOTOR_CONVERSION_REFLECTION[STATION])}
+MOTOR_CONVERSION_TRANSLATION_OFFSET: ${makeDoocsArray(MOTOR_CONVERSION_TRANSLATION_OFFSET[STATION])}
+DELTAT_MOTOR_SIGN: ${makeDoocsArray(DELTAT_MOTOR_SIGN[STATION])}
+DELTAT_SIGN: ${makeDoocsArray(DELTAT_SIGN[STATION])}
+MODULATION_SIGN: ${makeDoocsArray(MODULATION_SIGN[STATION])}
+START_ARRAY_VALUE_ACCURACY:	${START_ARRAY_VALUE_ACCURACY[STATION]}
+N_SAMPLE_ACCURACY:	${N_SAMPLE_ACCURACY[STATION]}
+}
diff --git a/bam/templates/link_lock.xlmap b/bam/templates/link_lock.xlmap
new file mode 100644
index 0000000..1a76183
--- /dev/null
+++ b/bam/templates/link_lock.xlmap
@@ -0,0 +1,15 @@
+##mako
+<logicalNameMap>
+  <module name="LINK">
+    <redirectedRegister name="STATUS">
+%for target in ['LINK_RAW', 'LINK_FALLBACK']:
+      <targetDevice>${target}</targetDevice>
+      <targetRegister>LSU.${LINK_LOCK_NUMBER[STATION]}.LOCK_STATUS.VALUE.RD</targetRegister>
+      <!-- Re-mapping for for new flag meaning: 0 = ok, > 0 = failure -->
+      <plugin name="math">
+        <parameter name="formula">if ([x] > 0) return [0]; else return [1];</parameter>
+      </plugin>
+    </redirectedRegister>
+%endfor
+  </module>
+</logicalNameMap>
diff --git a/bam/templates/mlo.xlmap b/bam/templates/mlo.xlmap
new file mode 100644
index 0000000..0f49617
--- /dev/null
+++ b/bam/templates/mlo.xlmap
@@ -0,0 +1,12 @@
+<logicalNameMap>
+  <module name="MLO">
+    <redirectedRegister name="STATUS">
+      <targetDevice>MLO_RAW</targetDevice>
+      <targetRegister>APP.CTRL.0.IS_ACTIVE.REG.RD</targetRegister>
+      <!-- Re-mapping for for new flag meaning: 0 = ok, > 0 = failure  Not necessary here
+      <plugin name="math">
+        <parameter name="formula">if ([x] > 0) return [0]; else return [1];</parameter>
+      </plugin> -->
+    </redirectedRegister>
+  </module>
+</logicalNameMap>
diff --git a/bam/templates/motorConfig_2xlimes60_optimal_bam.xml b/bam/templates/motorConfig_2xlimes60_optimal_bam.xml
new file mode 100644
index 0000000..61c2ce6
--- /dev/null
+++ b/bam/templates/motorConfig_2xlimes60_optimal_bam.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0"?>
+<MotorDriverCardConfig>
+	<MotorControlerConfig motorID="0">
+		<Register name="dividersAndMicroStepResolutionData" value="0x3B06" />
+		<Register name="driverControlData" value="0x2" />
+		<Register name="maximumAcceleration" value="0x671" />
+		<Register name="maximumVelocity" value="0x624" />
+		<Register name="proportionalityFactorData" value="0xC309" />
+		<Register name="stallGuardControlData" value="0x10019" />
+		<Register name="chopperControlData" value="0x275" />
+		<Register name="driverConfigData" value="0x40" />
+	</MotorControlerConfig>
+	<MotorControlerConfig motorID="1">
+    <Register name="dividersAndMicroStepResolutionData" value="0x3B06" />
+		<Register name="driverControlData" value="0x2" />
+		<Register name="maximumAcceleration" value="0x671" />
+		<Register name="maximumVelocity" value="0x624" />
+		<Register name="proportionalityFactorData" value="0xC309" />
+		<Register name="stallGuardControlData" value="0x10019" />
+		<Register name="chopperControlData" value="0x275" />
+		<Register name="driverConfigData" value="0x40" />
+	</MotorControlerConfig>
+</MotorDriverCardConfig>
diff --git a/bam/templates/sdiag_bam_fmc25_r3951.mapp b/bam/templates/sdiag_bam_fmc25_r3951.mapp
new file mode 100644
index 0000000..bdfb4f6
--- /dev/null
+++ b/bam/templates/sdiag_bam_fmc25_r3951.mapp
@@ -0,0 +1,150 @@
+@MAPFILE_REVISION 3951
+APP.0.WORD_FIRMWARE                                                   1            0            4      1     32      0    0   RO
+APP.0.WORD_REVISION                                                   1            4            4      1     32      0    0   RO
+APP.0.WORD_TIMESTAMP                                                  1            8            4      1     32      0    0   RO
+APP.0.WORD_CLK_FREQ                                                   3           64           12      1     32      0    0   RO
+APP.0.WORD_MLVDS_TRG_SEL                                              1          128            4      1      1      0    0   RW
+APP.0.WORD_MLVDS_TRG_CNT                                              1          132            4      1     32      0    0   RO
+APP.0.WORD_TIMING_INT_ENA                                             1          140            4      1      1      0    0   RW
+APP.0.WORD_TIMING_INT_PERIOD                                          1          144            4      1     32      0    0   RW
+APP.0.WORD_TIMING_INT_SW_TRG                                          1          148            4      1      1      0    0   RW
+APP.0.WORD_TIMING_TRG_ENA                                             1          152            4      1      2      0    0   RW
+APP.0.WORD_TIMING_TRG_DEL                                             2          160            8      1     32      0    0   RW
+APP.0.WORD_TIMING_CNT                                                 2          192            8      1     32      0    0   RO
+APP.0.WORD_DAQ_DATA_RDY                                               1          228            4      1      1      0    0   RO
+APP.0.WORD_DAQ_DATA_RDY_CLR                                           1          232            4      1      1      0    0   RW
+APP.0.WORD_BAM_TRG_DELAY                                              2          256            8      1      2      0    0   RW
+APP.0.WORD_BAM_TRG_ALIGN                                              2          264            8      1      2      0    0   RO
+APP.0.WORD_BAM_TRG_ALIGN_CNT                                          1          272            4      1     32      0    0   RO
+APP.0.WORD_BAM_TRG_ERR_CNT                                            1          276            4      1     32      0    0   RO
+APP.0.WORD_BAM_MACROPULSE_DEL                                         1          280            4      1     32      0    0   RW
+APP.0.WORD_BAM_MACROPULSE_CNT                                         1          284            4      1     32      0    0   RO
+APP.0.WORD_BAM_FLT_ENA                                                1          288            4      1      4      0    0   RW
+APP.0.WORD_BAM_FLT_DEL                                                4          292           16      1     16      0    0   RW
+APP.0.WORD_BAM_FLT_CNT                                                4          308           16      1     32      0    0   RO
+APP.0.WORD_BAM_FLT_BUNCH_NUM                                          4          324           16      1     16      0    0   RW
+APP.0.WORD_BAM_FLT_BUNCH_PERIOD                                       4          340           16      1     16      0    0   RW
+APP.0.WORD_BAM_UNM_AVG_NUM                                            1          356            4      1      5      0    0   RW
+APP.0.WORD_BAM_UNM_AVG_OFFSET                                         1          360            4      1      5      0    0   RW
+APP.0.WORD_BAM_BUNCH_CNT                                              1          364            4      1     16      0    0   RO
+APP.0.WORD_BAM_LLL_TX_CH_SEL                                          4          368           16      1      1      0    0   RW
+APP.0.WORD_BAM_LLL_INVALID                                            1          384            4      1      3      0    0   RW
+APP.0.WORD_BAM_LLL_PAT_ENA                                            1          388            4      1      2      0    0   RW
+APP.0.WORD_BAM_LLL_RAMP_ENA                                           1          392            4      1      1      0    0   RW
+APP.0.WORD_BCM_LATENCY                                                1          396            4      1      8      0    0   RW
+APP.0.WORD_BCM_CRC_ERR_CNT                                            1          400            4      1     32      0    0   RO
+APP.0.WORD_BCM_PACKET_CNT                                             1          404            4      1     32      0    0   RO
+APP.0.WORD_BCM_MISSED_CNT                                             1          408            4      1     32      0    0   RO
+APP.0.WORD_BCM_CHECK_CONF                                             1          412            4      1      5      0    0   RW
+APP.0.WORD_BCM_HEADER_ERR_CNT                                         1          416            4      1     32      0    0   RO
+APP.0.WORD_BCM_PATTERN_ERR_CNT                                        1          420            4      1     32      0    0   RO
+APP.0.MISC_DAQ                                                     6144        32768        24576      1     32      0    0   RW
+DAQ.0.WORD_FIRMWARE                                                   1        32768            4      1     32      0    0   RO
+DAQ.0.WORD_REVISION                                                   1        32772            4      1     32      0    0   RO
+DAQ.0.WORD_CAPABILITIES                                               1        32776            4      1     32      0    0   RO
+DAQ.0.WORD_ENABLE                                                     1        32780            4      1      3      0    0   RW
+DAQ.0.WORD_MUX_SEL                                                    3        32784           12      1      8      0    0   RW
+DAQ.0.WORD_STROBE_DIV                                                 3        32796           12      1     32      0    0   RW
+DAQ.0.WORD_STROBE_COUNT                                               3        32808           12      1     32      0    0   RO
+DAQ.0.WORD_SAMPLES                                                    3        32820           12      1     32      0    0   RW
+DAQ.0.WORD_DUB_BUF_ENA                                                3        32832           12      1      1      0    0   RW
+DAQ.0.WORD_DUB_BUF_CURR                                               3        32844           12      1      1      0    0   RO
+DAQ.0.WORD_DUB_BUF_PNUM                                               3        32856           12      1     32      0    0   RO
+DAQ.0.WORD_FIFO_STATUS                                                3        32868           12      1     32      0    0   RO
+DAQ.0.WORD_SENT_BURST_CNT                                             3        32880           12      1     32      0    0   RO
+DAQ.0.WORD_TRG_DELAY_VAL                                              3        32892           12      1     32      0    0   RW
+DAQ.0.WORD_TRG_DELAY_ENA                                              3        32904           12      1      1      0    0   RW
+DAQ.0.WORD_TRG_CNT_BUF0                                               3        32916           12      1     16      0    0   RO
+DAQ.0.WORD_TRG_CNT_BUF1                                               3        32928           12      1     16      0    0   RO
+DAQ.0.WORD_TIMESTAMP_RST                                              3        32940           12      1      1      0    0   RW
+DAQ.0.AREA_DAQ_TIMES_0                                             1024        36864         4096      1     32      0    0   RO
+DAQ.0.AREA_DAQ_TIMES_1                                             1024        40960         4096      1     32      0    0   RO
+DAQ.0.AREA_DAQ_TIMES_2                                             1024        49152         4096      1     32      0    0   RO
+APP.0.FMC_BAM                                                     16384        65536        65536      1     32      0    0   RW
+BAM.0.WORD_FIRMWARE                                                   1        65536            4      1     32      0    0   RO
+BAM.0.WORD_REVISION                                                   1        65540            4      1     32      0    0   RO
+BAM.0.WORD_SPI_SEL                                                    1        65664            4      1      3      0    0   RW
+BAM.0.WORD_SPI_BUSY                                                   1        65668            4      1      1      0    0   RO
+BAM.0.AREA_SPI                                                     1024        69632         4096      1      8      0    0   RW
+BAM.0.WORD_PLL_RESET                                                  1        65672            4      1      1      0    0   RW
+BAM.0.WORD_PLL_SYNC_ENA                                               1        65676            4      1      1      0    0   RW
+BAM.0.WORD_PLL_IODELAY                                                1        65680            4      1      6      0    0   RW
+BAM.0.WORD_PLL_STATUS                                                 1        65684            4      1      4      0    0   RO
+BAM.0.WORD_PLL_STATUS_CLR                                             1        65688            4      1      1      0    0   RW
+BAM.0.WORD_TRG_EDGE_SEL                                               2        65728            8      1      1      0    0   RW
+BAM.0.WORD_TRG_PHASE                                                  2        65736            8      1      1      0    0   RO
+BAM.0.WORD_TRG_PHASE_CNT                                              4        65744           16      1     32      0    0   RO
+BAM.0.WORD_DATA_IODELAY                                               1        65760            4      1      6      0    0   RW
+BAM.0.WORD_PN23_CHK_ENA                                               1        65764            4      1      4      0    0   RW
+BAM.0.WORD_PN23_ERR_CNT                                               4        65768           16      1     32      0    0   RO
+BAM.0.WORD_RAMP_ENA                                                   1        65784            4      1      4      0    0   RW
+BAM.0.WORD_PATTERN_ENA                                                1        65788            4      1      2      0    0   RW
+BAM.0.WORD_PATTERN_TRG                                                1        65792            4      1      1      0    0   RW
+BAM.0.AREA_PATTERN_CH0                                             1024        73728         4096      1     32      0    0   RW
+BAM.0.AREA_PATTERN_CH1                                             1024        77824         4096      1     32      0    0   RW
+BAM.0.AREA_PATTERN_FLAGS                                           1024        81920         4096      1      6      0    0   RW
+BAM.0.WORD_SFP_DISABLE                                                1        65796            4      1      2      0    0   RW
+BAM.0.WORD_SFP_STATE                                                  2        65800            8      1      3      0    0   RO
+BAM.0.WORD_POWER_DOWN                                                 1        65856            4      1      1      0    0   RW
+BAM.0.WORD_POWER_STATE                                                1        65860            4      1      2      0    0   RO
+BAM.0.WORD_LED                                                        1        65864            4      1      2      0    0   RW
+BAM.0.WORD_ATTENUATORS                                                2        65868            8      1      3      0    0   RW
+BAM.0.WORD_FMC_REV                                                    1        65876            4      1      1      0    0   RW
+APP.0.AREA_MULTIPLEXED_SEQUENCE_DAQ0_BAM                         262144            0      1048576     13     32      0    1   RO
+APP.0.SEQUENCE_DAQ0_BAM_0                                             1            0            4     13     32      0    1   RO
+APP.0.SEQUENCE_DAQ0_BAM_1                                             1            4            4     13     32      0    1   RO
+APP.0.SEQUENCE_DAQ0_BAM_2                                             1            8            4     13     32      0    1   RO
+APP.0.SEQUENCE_DAQ0_BAM_3                                             1           12            4     13     32      0    1   RO
+APP.0.SEQUENCE_DAQ0_BAM_4                                             1           16            4     13     32      0    1   RO
+APP.0.SEQUENCE_DAQ0_BAM_5                                             1           20            4     13     32      0    1   RO
+APP.0.SEQUENCE_DAQ0_BAM_6                                             1           24            4     13     32     24    1   RO
+APP.0.SEQUENCE_DAQ0_BAM_7                                             1           28            4     13     32      0    0   RO
+APP.0.SEQUENCE_DAQ0_BAM_8                                             1           32            4     13     32      0    1   RO
+APP.0.SEQUENCE_DAQ0_BAM_9                                             1           36            4     13     32      0    1   RO
+APP.0.SEQUENCE_DAQ0_BAM_10                                            1           40            4     13     32      0    1   RO
+APP.0.SEQUENCE_DAQ0_BAM_11                                            1           44            4     13     32      0    1   RO
+APP.0.SEQUENCE_DAQ0_BAM_12                                            1           48            4     13     32      0    1   RO
+APP.0.SEQUENCE_DAQ0_BAM_13                                            1           52            4     13     32      0    1   RO
+APP.0.SEQUENCE_DAQ0_BAM_14                                            1           56            4     13     32     24    1   RO
+APP.0.SEQUENCE_DAQ0_BAM_15                                            1           60            4     13     32      0    0   RO
+APP.0.AREA_MULTIPLEXED_SEQUENCE_RAW_ADC                            4096      2097152        16384     13     32      0    1   RO
+APP.0.SEQUENCE_RAW_ADC_0                                              1      2097152            2     13     16      0    1   RO
+APP.0.SEQUENCE_RAW_ADC_1                                              1      2097154            2     13     16      0    1   RO
+APP.0.SEQUENCE_RAW_ADC_2                                              1      2097156            2     13     16      0    1   RO
+APP.0.SEQUENCE_RAW_ADC_3                                              1      2097158            2     13     16      0    1   RO
+APP.0.SEQUENCE_RAW_ADC_4                                              1      2097160            2     13     16      0    1   RO
+APP.0.SEQUENCE_RAW_ADC_5                                              1      2097162            2     13     16      0    1   RO
+APP.0.SEQUENCE_RAW_ADC_6                                              1      2097164            2     13     16      0    1   RO
+APP.0.SEQUENCE_RAW_ADC_7                                              1      2097166            2     13     16      0    1   RO
+BOARD.0.WORD_FIRMWARE                                                 1            0            4      0     32      0    0   RO
+BOARD.0.WORD_REVISION                                                 1            4            4      0     32      0    0   RO
+BOARD.0.WORD_TIMESTAMP                                                1            8            4      0     32      0    0   RO
+BOARD.0.WORD_STATUS                                                   1           28            4      0     32      0    0   RO
+BOARD.0.WORD_CLK_FREQ                                                10           32           40      0     32      0    0   RW
+BOARD.0.WORD_LLL_STATUS                                              12          192           48      0     32      0    0   RO
+BOARD.0.WORD_LLL_LOOPBACK                                            12          256           48      0      3      0    0   RW
+BOARD.0.BIT_RTM_MGT_CLK_ENA                                           1          336            4      0      1      0    0   RW
+BOARD.0.WORD_BOOT_STATUS                                              1          384            4      0      1      0    0   RW
+BOARD.0.WORD_RESET_N                                                  1          512            4      0      1      0    0   RW
+BOARD.0.WORD_RESET_GTP                                                1          516            4      0     13      0    0   RW
+BOARD.0.WORD_USER                                                     1           24            4      0     32      0    0   RW
+BOARD.0.AREA_BOOT                                                 16384        65536        65536      0     32      0    0   RW
+BOARD.0.WORD_RESET_S6                                                 1          520            4      0      1      0    0   RW
+BOARD.0.BOARD_FMC25_S6                                           262144      1048576      1048576      0     32      0    0   RW
+FMC25_S6.0.WORD_FIRMWARE                                              1      1048576            4      0     32      0    0   RO
+FMC25_S6.0.WORD_REVISION                                              1      1048580            4      0     32      0    0   RO
+FMC25_S6.0.WORD_TIMESTAMP                                             1      1048584            4      0     32      0    0   RO
+FMC25_S6.0.WORD_CLK_FREQ                                              4      1048608           16      0     32      0    0   RO
+FMC25_S6.0.WORD_SWX_LLL                                               4      1048640           16      0      2      0    0   RW
+FMC25_S6.0.WORD_SWX_TCLK                                              4      1048672           16      0      2      0    0   RW
+FMC25_S6.0.AREA_S6OSC                                               256      1049600         1024      0      8      0    0   RW
+FMC25_S6.0.AREA_V5OSC                                               256      1050624         1024      0      8      0    0   RW
+FMC25_S6.0.AREA_PLL_I2C                                             512      1052672         2048      0      8      0    0   RW
+FMC25_S6.0.AREA_PLL_CONF                                            512      1054720         2048      0     24      0    0   RW
+FMC25_S6.0.WORD_PLL_CONF_STR                                          1      1048848            4      0      1      0    0   RW
+FMC25_S6.0.WORD_PLL_CONF_RST                                          1      1048852            4      0      1      0    0   RW
+FMC25_S6.0.WORD_RESET_N                                               1      1049088            4      0      1      0    0   RW
+FMC25_S6.0.WORD_USER                                                  1      1049092            4      0     32      0    0   RW
+FMC25_S6.0.WORD_LLL_STATUS                                            4      1049096           16      0     32      0    0   RO
+FMC25_S6.0.AREA_BOOT                                              16384      1114112        65536      0     32      0    0   RW
+BOARD.0.AREA_DMA                                               67108864            0    268435456     13     32      0    0   RO
diff --git a/bam/templates/sync_pzt4_md22_md22_fmc20_6s45_r2261.mapp b/bam/templates/sync_pzt4_md22_md22_fmc20_6s45_r2261.mapp
new file mode 100644
index 0000000..dc32d34
--- /dev/null
+++ b/bam/templates/sync_pzt4_md22_md22_fmc20_6s45_r2261.mapp
@@ -0,0 +1,248 @@
+@MAPFILE_REVISION 2261
+APP.0.APP_SYNC_PZT4_FMC20_6S150                                       1            0            4      1     32      0    0   RW
+SYNC_PZT4_FMC20_6S150.0.SHAPI_MOD_MAGIC_AND_VERSION                   1            0            4      1     32      0    0   RO
+SYNC_PZT4_FMC20_6S150.0.SHAPI_MOD_NEXT_MODULE_ADDRESS                 1            4            4      1     32      0    0   RO
+SYNC_PZT4_FMC20_6S150.0.SHAPI_MOD_FIRMWARE_ID_AND_VENDOR              1            8            4      1     32      0    0   RO
+SYNC_PZT4_FMC20_6S150.0.SHAPI_MOD_FIRMWARE_VERSION                    1           12            4      1     32      0    0   RO
+SYNC_PZT4_FMC20_6S150.0.SHAPI_MOD_FIRMWARE_NAME                       2           16            8      1     32      0    0   RO
+SYNC_PZT4_FMC20_6S150.0.SHAPI_MOD_CAPABILITIES                        1           24            4      1     32      0    0   RO
+SYNC_PZT4_FMC20_6S150.0.SHAPI_MOD_STATUS                              1           28            4      1     32      0    0   RO
+SYNC_PZT4_FMC20_6S150.0.SHAPI_MOD_CONTROL                             1           32            4      1     32      0    0   RW
+SYNC_PZT4_FMC20_6S150.0.SHAPI_MOD_INT_ID                              1           36            4      1     32      0    0   RO
+SYNC_PZT4_FMC20_6S150.0.SHAPI_MOD_INT_CLEAR                           1           40            4      1     32      0    0   RW
+SYNC_PZT4_FMC20_6S150.0.SHAPI_MOD_INT_MASK                            1           44            4      1     32      0    0   RW
+SYNC_PZT4_FMC20_6S150.0.SHAPI_MOD_INT_FLAG                            1           48            4      1     32      0    0   RO
+SYNC_PZT4_FMC20_6S150.0.SHAPI_MOD_INT_ACTV                            1           52            4      1     32      0    0   RO
+SYNC_PZT4_FMC20_6S150.0.WORD_CLK_FREQ                                 4           56           16      1     32      0    0   RW
+SYNC_PZT4_FMC20_6S150.0.WORD_PZT4_LLL                                 4           72           16      1     18      0    1   RW
+SYNC_PZT4_FMC20_6S150.0.WORD_TIMING_FREQ                              9          216           36      1     32      0    0   RW
+SYNC_PZT4_FMC20_6S150.0.WORD_TIMING_INT_ENA                           1          256            4      1      9      0    0   RW
+SYNC_PZT4_FMC20_6S150.0.WORD_TIMING_CNT                               9          260           36      1     32      0    0   RW
+SYNC_PZT4_FMC20_6S150.0.WORD_TIMING_TRG_SEL                           1          300            4      1      4      0    0   RW
+SYNC_PZT4_FMC20_6S150.0.WORD_TIMING_USER_TRG                          1          304            4      1      1      0    0   RW
+SYNC_PZT4_FMC20_6S150.0.WORD_LLL_DATA_AMOUNT_TO_TRIG_ADC              1          308            4      1     32      0    0   RW
+SYNC_PZT4_FMC20_6S150.0.WORD_DAQ_ENABLE                               1          316            4      1      1      0    0   RW
+SYNC_PZT4_FMC20_6S150.0.WORD_DAQ_STR_SEL                              1          320            4      1      2      0    0   RW
+SYNC_PZT4_FMC20_6S150.0.WORD_DAQ_DBUF_DIS                             1          324            4      1      1      0    0   RW
+SYNC_PZT4_FMC20_6S150.0.WORD_DAQ_CURR_BUF                             1          328            4      1      2      0    0   RO
+SYNC_PZT4_FMC20_6S150.0.WORD_DAQ_CURR_OFFSET                          1          332            4      1     32      0    0   RO
+SYNC_PZT4_FMC20_6S150.0.WORD_DAQ_CURR_CNT                             1          336            4      1     32      0    0   RO
+SYNC_PZT4_FMC20_6S150.0.WORD_FMC_ID                                   1          356            4      1     32      0    0   RO
+SYNC_PZT4_FMC20_6S150.0.WORD_DIAG_RESET                               1          456            4      1      1      0    0   RW
+SYNC_PZT4_FMC20_6S150.0.WORD_LLL_RX_CRC_ERR_CNT                       1          460            4      1     32      0    0   RO
+SYNC_PZT4_FMC20_6S150.0.WORD_LLL_VALID_DATA_CNT                       1          464            4      1     32      0    0   RO
+SYNC_PZT4_FMC20_6S150.0.WORD_LLL_VALID_DATA_SPACING                   1          468            4      1     32      0    0   RO
+SYNC_PZT4_FMC20_6S150.0.WORD_LLL_VALID_DATA_SPACING_MIN               1          472            4      1     32      0    0   RO
+SYNC_PZT4_FMC20_6S150.0.WORD_LLL_VALID_DATA_SPACING_MAX               1          476            4      1     32      0    0   RO
+SYNC_PZT4_FMC20_6S150.0.WORD_LLL_APP_LOOPBACK_ON                      1          480            4      1      1      0    0   RW
+SYNC_PZT4_FMC20_6S150.0.WORD_LLL_VD_SPACING_RANGE_MIN                 1          484            4      1     32      0    0   RW
+SYNC_PZT4_FMC20_6S150.0.WORD_LLL_VD_SPACING_RANGE_MAX                 1          488            4      1     32      0    0   RW
+SYNC_PZT4_FMC20_6S150.0.WORD_LLL_VD_SPACING_RANGE_IN                  1          492            4      1     32      0    0   RO
+SYNC_PZT4_FMC20_6S150.0.WORD_LLL_VD_SPACING_RANGE_ABOVE               1          496            4      1     32      0    0   RO
+SYNC_PZT4_FMC20_6S150.0.WORD_LLL_VD_SPACING_RANGE_BELOW               1          500            4      1     32      0    0   RO
+SYNC_PZT4_FMC20_6S150.0.VAR_CON_FMC_2                               512         2048         2048      1     32      0    0   RW
+MD22.0.WORD_FIRMWARE                                                  1         2448            4      1     32      0    0   RO
+MD22.0.WORD_REVISION                                                  1         2452            4      1     32      0    0   RO
+MD22.0.WORD_PROJ_ID                                                   1         2052            4      1     32      0    0   RO
+MD22.0.WORD_PROJ_VERSION                                              1         2056            4      1     32      0    0   RO
+MD22.0.WORD_PROJ_USER                                                 1         2064            4      1     32      0    0   RW
+MD22.0.WORD_CTRL_SPI_WRITE                                            1         2076            4      1     32      0    0   RW
+MD22.0.WORD_CTRL_SPI_READBACK                                         1         2080            4      1     32      0    0   RO
+MD22.0.WORD_CTRL_SPI_SYNC                                             1         2084            4      1      8      0    0   RW
+MD22.0.WORD_CTRL_STATUS_BITS                                          1         2088            4      1      8      0    0   RO
+MD22.0.WORD_M1_SPI_WRITE                                              1         2092            4      1     32      0    0   RW
+MD22.0.WORD_M1_SPI_SYNC                                               1         2096            4      1      8      0    0   RW
+MD22.0.WORD_M1_ACTUAL_POS                                             1         2100            4      1     24      0    0   RO
+MD22.0.WORD_M1_V_ACTUAL                                               1         2104            4      1     12      0    0   RO
+MD22.0.WORD_M1_ACT_ACCEL                                              1         2108            4      1     12      0    0   RO
+MD22.0.WORD_M1_MSTEP_VAL                                              1         2112            4      1     10      0    0   RO
+MD22.0.WORD_M1_SGUARD_VAL                                             1         2116            4      1     10      0    0   RO
+MD22.0.WORD_M1_CoolStep_VAL                                           1         2120            4      1      5      0    0   RO
+MD22.0.WORD_M1_STATUS                                                 1         2124            4      1      8      0    0   RO
+MD22.0.WORD_M1_ENABLE                                                 1         2128            4      1      1      0    0   RW
+MD22.0.WORD_M1_DEK_MUX                                                1         2132            4      1      1      0    0   RW
+MD22.0.WORD_M1_DEK_POS                                                1         2136            4      1     32      0    0   RO
+MD22.0.WORD_M2_SPI_WRITE                                              1         2140            4      1     32      0    0   RW
+MD22.0.WORD_M2_SPI_SYNC                                               1         2144            4      1      8      0    0   RW
+MD22.0.WORD_M2_ACTUAL_POS                                             1         2148            4      1     24      0    0   RO
+MD22.0.WORD_M2_V_ACTUAL                                               1         2152            4      1     12      0    0   RO
+MD22.0.WORD_M2_ACT_ACCEL                                              1         2156            4      1     12      0    0   RO
+MD22.0.WORD_M2_MSTEP_VAL                                              1         2160            4      1     10      0    0   RO
+MD22.0.WORD_M2_SGUARD_VAL                                             1         2164            4      1     10      0    0   RO
+MD22.0.WORD_M2_CoolStep_VAL                                           1         2168            4      1      5      0    0   RO
+MD22.0.WORD_M2_STATUS                                                 1         2172            4      1      8      0    0   RO
+MD22.0.WORD_M2_ENABLE                                                 1         2176            4      1      1      0    0   RW
+MD22.0.WORD_M2_DEK_MUX                                                1         2180            4      1      1      0    0   RW
+MD22.0.WORD_M2_DEK_POS                                                1         2184            4      1     32      0    0   RO
+MD22.0.WORD_I2C_FMC_TX                                                1         2188            4      1      8      0    0   RW
+MD22.0.WORD_I2C_FMC_RX                                                1         2192            4      1      8      0    0   RO
+MD22.0.WORD_I2C_FMC_ADR                                               1         2196            4      1     16      0    0   RW
+MD22.0.WORD_I2C_FMC_CMD                                               1         2200            4      1     16      0    0   RW
+MD22.0.WORD_M1_VOLTAGE_EN                                             1         2204            4      1      2      0    0   RW
+MD22.0.WORD_M2_VOLTAGE_EN                                             1         2208            4      1      2      0    0   RW
+MD22.0.WORD_LIMITER_FAULT                                             1         2212            4      1      2      0    0   RO
+MD22.0.WORD_M1_CAL_END_SW_POS                                         1         2216            4      1     32      0    1   RW
+MD22.0.WORD_M1_CAL_END_SW_NEG                                         1         2220            4      1     32      0    1   RW
+MD22.0.WORD_M1_CAL_TOL_POS                                            1         2224            4      1     32      0    1   RW
+MD22.0.WORD_M1_CAL_TOL_NEG                                            1         2228            4      1     32      0    1   RW
+MD22.0.WORD_M1_CAL_TIME                                               1         2232            4      1     32      0    0   RW
+MD22.0.WORD_M2_CAL_END_SW_POS                                         1         2236            4      1     32      0    1   RW
+MD22.0.WORD_M2_CAL_END_SW_NEG                                         1         2240            4      1     32      0    1   RW
+MD22.0.WORD_M2_CAL_TOL_POS                                            1         2244            4      1     32      0    1   RW
+MD22.0.WORD_M2_CAL_TOL_NEG                                            1         2248            4      1     32      0    1   RW
+MD22.0.WORD_M2_CAL_TIME                                               1         2252            4      1     32      0    0   RW
+SYNC_PZT4_FMC20_6S150.0.VAR_CON_FMC_1                               512         4096         2048      1     32      0    0   RW
+MD22.1.WORD_FIRMWARE                                                  1         4496            4      1     32      0    0   RO
+MD22.1.WORD_REVISION                                                  1         4500            4      1     32      0    0   RO
+MD22.1.WORD_PROJ_ID                                                   1         4100            4      1     32      0    0   RO
+MD22.1.WORD_PROJ_VERSION                                              1         4104            4      1     32      0    0   RO
+MD22.1.WORD_PROJ_USER                                                 1         4112            4      1     32      0    0   RW
+MD22.1.WORD_CTRL_SPI_WRITE                                            1         4124            4      1     32      0    0   RW
+MD22.1.WORD_CTRL_SPI_READBACK                                         1         4128            4      1     32      0    0   RO
+MD22.1.WORD_CTRL_SPI_SYNC                                             1         4132            4      1      8      0    0   RW
+MD22.1.WORD_CTRL_STATUS_BITS                                          1         4136            4      1      8      0    0   RO
+MD22.1.WORD_M1_SPI_WRITE                                              1         4140            4      1     32      0    0   RW
+MD22.1.WORD_M1_SPI_SYNC                                               1         4144            4      1      8      0    0   RW
+MD22.1.WORD_M1_ACTUAL_POS                                             1         4148            4      1     24      0    0   RO
+MD22.1.WORD_M1_V_ACTUAL                                               1         4152            4      1     12      0    0   RO
+MD22.1.WORD_M1_ACT_ACCEL                                              1         4156            4      1     12      0    0   RO
+MD22.1.WORD_M1_MSTEP_VAL                                              1         4160            4      1     10      0    0   RO
+MD22.1.WORD_M1_SGUARD_VAL                                             1         4164            4      1     10      0    0   RO
+MD22.1.WORD_M1_CoolStep_VAL                                           1         4168            4      1      5      0    0   RO
+MD22.1.WORD_M1_STATUS                                                 1         4172            4      1      8      0    0   RO
+MD22.1.WORD_M1_ENABLE                                                 1         4176            4      1      1      0    0   RW
+MD22.1.WORD_M1_DEK_MUX                                                1         4180            4      1      1      0    0   RW
+MD22.1.WORD_M1_DEK_POS                                                1         4184            4      1     32      0    0   RO
+MD22.1.WORD_M2_SPI_WRITE                                              1         4188            4      1     32      0    0   RW
+MD22.1.WORD_M2_SPI_SYNC                                               1         4192            4      1      8      0    0   RW
+MD22.1.WORD_M2_ACTUAL_POS                                             1         4196            4      1     24      0    0   RO
+MD22.1.WORD_M2_V_ACTUAL                                               1         4200            4      1     12      0    0   RO
+MD22.1.WORD_M2_ACT_ACCEL                                              1         4204            4      1     12      0    0   RO
+MD22.1.WORD_M2_MSTEP_VAL                                              1         4208            4      1     10      0    0   RO
+MD22.1.WORD_M2_SGUARD_VAL                                             1         4212            4      1     10      0    0   RO
+MD22.1.WORD_M2_CoolStep_VAL                                           1         4216            4      1      5      0    0   RO
+MD22.1.WORD_M2_STATUS                                                 1         4220            4      1      8      0    0   RO
+MD22.1.WORD_M2_ENABLE                                                 1         4224            4      1      1      0    0   RW
+MD22.1.WORD_M2_DEK_MUX                                                1         4228            4      1      1      0    0   RW
+MD22.1.WORD_M2_DEK_POS                                                1         4232            4      1     32      0    0   RO
+MD22.1.WORD_I2C_FMC_TX                                                1         4236            4      1      8      0    0   RW
+MD22.1.WORD_I2C_FMC_RX                                                1         4240            4      1      8      0    0   RO
+MD22.1.WORD_I2C_FMC_ADR                                               1         4244            4      1     16      0    0   RW
+MD22.1.WORD_I2C_FMC_CMD                                               1         4248            4      1     16      0    0   RW
+MD22.1.WORD_M1_VOLTAGE_EN                                             1         4252            4      1      2      0    0   RW
+MD22.1.WORD_M2_VOLTAGE_EN                                             1         4256            4      1      2      0    0   RW
+MD22.1.WORD_LIMITER_FAULT                                             1         4260            4      1      2      0    0   RO
+MD22.1.WORD_M1_CAL_END_SW_POS                                         1         4264            4      1     32      0    1   RW
+MD22.1.WORD_M1_CAL_END_SW_NEG                                         1         4268            4      1     32      0    1   RW
+MD22.1.WORD_M1_CAL_TOL_POS                                            1         4272            4      1     32      0    1   RW
+MD22.1.WORD_M1_CAL_TOL_NEG                                            1         4276            4      1     32      0    1   RW
+MD22.1.WORD_M1_CAL_TIME                                               1         4280            4      1     32      0    0   RW
+MD22.1.WORD_M2_CAL_END_SW_POS                                         1         4284            4      1     32      0    1   RW
+MD22.1.WORD_M2_CAL_END_SW_NEG                                         1         4288            4      1     32      0    1   RW
+MD22.1.WORD_M2_CAL_TOL_POS                                            1         4292            4      1     32      0    1   RW
+MD22.1.WORD_M2_CAL_TOL_NEG                                            1         4296            4      1     32      0    1   RW
+MD22.1.WORD_M2_CAL_TIME                                               1         4300            4      1     32      0    0   RW
+SYNC_PZT4_FMC20_6S150.0.RTM_PZT4                                  65536       262144       262144      1     32      0    0   RW
+PZT4.0.WORD_FIRMWARE                                                  1       262944            4      1     32      0    0   RO
+PZT4.0.WORD_REVISION                                                  1       262948            4      1     32      0    0   RO
+PZT4.0.WORD_DAC_RESET                                                 1       262144            4      1     32      0    0   RW
+PZT4.0.WORD_ADC_RESET                                                 1       262148            4      1     32      0    0   RW
+PZT4.0.WORD_RELAY_CTL                                                 1       262152            4      1     32      0    0   RW
+PZT4.0.WORD_EXP_DATA                                                  2       262800            8      1     32      0    0   RW
+PZT4.0.WORD_CHAN_ACTIVATE                                             1       262160            4      1     32      0    0   RW
+PZT4.0.WORD_CHAN_MODE                                                 1       262164            4      1     32      0    0   RW
+PZT4.0.WORD_CHAN_AREA_MAX_ADDR                                        4       262168           16      1     13      0    0   RW
+PZT4.0.WORD_CHAN_AREA_READ_NO                                         4       262184           16      1     32      0    0   RW
+PZT4.0.WORD_CHAN_AREA_READ_DONE                                       1       262200            4      1      4      0    0   RW
+PZT4.0.WORD_CHAN_CONST_VALUE                                          4       262220           16      1     18      0    1   RW
+PZT4.0.WORD_CHAN_CURRENT_VALUE                                        4       262236           16      1     18      0    0   RW
+PZT4.0.WORD_DAC_SPAN_CODE                                             1       262256            4      1     32      0    0   RW
+PZT4.0.WORD_DAC_SPAN_CODE_RB                                          1       262260            4      1     32      0    0   RW
+PZT4.0.WORD_ADC_CHAN_MUX                                              1       262264            4      1      4      0    0   RW
+PZT4.0.WORD_ADC_CONV_SYNCH_TO_TRIGER                                  1       262272            4      1      1      0    0   RW
+PZT4.0.WORD_PZT4_CLK_STATUS                                           5       262288           20      1     32      0    0   RO
+PZT4.0.WORD_PZT4_LLL_DATA_IGNORED                                     4       262308           16      1     32      0    0   RW
+PZT4.0.WORD_PZT4_ADC_MODE                                             1       262324            4      1      1      0    0   RW
+PZT4.0.WORD_PZT4_LLL_DATA_MONITOR                                     4       262328           16      1     18      0    1   RW
+PZT4.0.WORD_MANUAL_TRIGGER_EN                                         1       262344            4      1      4      0    0   RW
+PZT4.0.WORD_MANUAL_TRIGGER                                            4       262348           16      1      1      0    0   RW
+PZT4.0.WORD_IO_EX_I2C_DATA_SEND_CNT                                   1       262544            4      1     32      0    0   RW
+PZT4.0.WORD_PZT4_RESET                                                1       262548            4      1      1      0    0   RW
+PZT4.0.WORD_PZT4_V                                                    4       262552           16      1     18      0    1   RW
+PZT4.0.WORD_PZT4_C                                                    4       262568           16      1     18      0    1   RW
+PZT4.0.WORD_PZT4_S                                                    4       262584           16      1     18      0    1   RW
+PZT4.0.WORD_PZT4_HV                                                   4       262600           16      1     18      0    1   RW
+PZT4.0.WORD_PZT4_ERR_CNT                                              1       262616            4      1     32      0    0   RO
+PZT4.0.WORD_TIMING_DIV                                                4       262624           16      1     16      0    0   RW
+PZT4.0.WORD_TIMING_FREQ                                               3       262740           12      1     32      0    0   RW
+PZT4.0.WORD_TIMING_CNT                                                3       262648           12      1     32      0    0   RO
+PZT4.0.WORD_TIMING_INT_ENA                                            1       262660            4      1      3      0    0   RW
+PZT4.0.WORD_ADC_BUFF_BLOCK                                            1       262704            4      1      1      0    0   RW
+PZT4.0.WORD_ADC_BUFF_READY                                            1       262708            4      1      1      0    0   RO
+PZT4.0.WORD_ADC_BUFF_ACK                                              1       262712            4      1      1      0    0   RW
+PZT4.0.WORD_CHAN_ADD_EXT                                              1       262716            4      1      4      0    0   RW
+PZT4.0.WORD_PZT4_REV_ABC                                              1       262720            4      1      1      0    0   RO
+PZT4.0.WORD_PZT4_INTERLOCK                                            1       262724            4      1      4      0    0   RO
+PZT4.0.WORD_EXP_RD_DATA                                               1       262736            4      1     16      0    0   RO
+PZT4.0.WORD_EXP_RD_BUSY                                               1       262764            4      1      1      0    0   RO
+PZT4.0.AREA_PZT4_ADC_BUFF                                          8192       360448        32768      1     18      0    1   RW
+PZT4.0.AREA_PZT4_CHANNEL_0                                         8192       393216        32768      1     18      0    1   RW
+PZT4.0.AREA_PZT4_CHANNEL_1                                         8192       425984        32768      1     18      0    1   RW
+PZT4.0.AREA_PZT4_CHANNEL_2                                         8192       458752        32768      1     18      0    1   RW
+PZT4.0.AREA_PZT4_CHANNEL_3                                         8192       491520        32768      1     18      0    1   RW
+SYNC_PZT4_FMC20_6S150.0.BOARD_FMC20_6S150                        524288            0      2097152      1     32      0    0   RW
+FMC20_6S150.0.WORD_FIRMWARE                                           1      2097152            4      1     32      0    0   RO
+FMC20_6S150.0.WORD_REVISION                                           1      2097156            4      1     32      0    0   RO
+FMC20_6S150.0.WORD_TIMESTAMP                                          1      2097160            4      1     32      0    0   RO
+FMC20_6S150.0.WORD_STATUS                                             1      2097164            4      1     32      0    0   RO
+FMC20_6S150.0.WORD_PSRAM_REV                                          1      2097168            4      1      1      0    0   RW
+FMC20_6S150.0.WORD_USER                                               1      2097216            4      1     32      0    0   RW
+FMC20_6S150.0.AREA_APP                                           524288            0      2097152      1     32      0    0   RW
+FMC20_6S150.0.AREA_PROGRAMMER                                     16384      2162688        65536      1     32      0    0   RW
+SYNC_PZT4_FMC20_6S150.0.AREA_MULTIPLEXED_SEQUENCE_DAQ_BUF0       262144            0      1048576     13     32      0    0   RW
+SYNC_PZT4_FMC20_6S150.0.SEQUENCE_DAQ_BUF0_0                           1            0            4     13     18      0    1   RW
+SYNC_PZT4_FMC20_6S150.0.SEQUENCE_DAQ_BUF0_1                           1            4            4     13     18      0    1   RW
+SYNC_PZT4_FMC20_6S150.0.SEQUENCE_DAQ_BUF0_2                           1            8            4     13     18      0    1   RW
+SYNC_PZT4_FMC20_6S150.0.SEQUENCE_DAQ_BUF0_3                           1           12            4     13     18      0    1   RW
+SYNC_PZT4_FMC20_6S150.0.SEQUENCE_DAQ_BUF0_4                           1           16            4     13     18      0    1   RW
+SYNC_PZT4_FMC20_6S150.0.SEQUENCE_DAQ_BUF0_5                           1           20            4     13     18      0    1   RW
+SYNC_PZT4_FMC20_6S150.0.SEQUENCE_DAQ_BUF0_6                           1           24            4     13     18      0    1   RW
+SYNC_PZT4_FMC20_6S150.0.SEQUENCE_DAQ_BUF0_7                           1           28            4     13     18      0    1   RW
+SYNC_PZT4_FMC20_6S150.0.SEQUENCE_DAQ_BUF0_8                           1           32            4     13     18      0    1   RW
+SYNC_PZT4_FMC20_6S150.0.SEQUENCE_DAQ_BUF0_9                           1           36            4     13     18      0    1   RW
+SYNC_PZT4_FMC20_6S150.0.SEQUENCE_DAQ_BUF0_10                          1           40            4     13     18      0    1   RW
+SYNC_PZT4_FMC20_6S150.0.SEQUENCE_DAQ_BUF0_11                          1           44            4     13     18      0    1   RW
+SYNC_PZT4_FMC20_6S150.0.SEQUENCE_DAQ_BUF0_12                          1           48            4     13     18      0    1   RW
+SYNC_PZT4_FMC20_6S150.0.SEQUENCE_DAQ_BUF0_13                          1           52            4     13     18      0    1   RW
+SYNC_PZT4_FMC20_6S150.0.SEQUENCE_DAQ_BUF0_14                          1           56            4     13     18      0    1   RW
+SYNC_PZT4_FMC20_6S150.0.SEQUENCE_DAQ_BUF0_15                          1           60            4     13     18      0    1   RW
+SYNC_PZT4_FMC20_6S150.0.AREA_MULTIPLEXED_SEQUENCE_DAQ_BUF1       262144      1048576      1048576     13     32      0    0   RW
+SYNC_PZT4_FMC20_6S150.0.SEQUENCE_DAQ_BUF1_0                           1      1048576            4     13     18      0    1   RW
+SYNC_PZT4_FMC20_6S150.0.SEQUENCE_DAQ_BUF1_1                           1      1048580            4     13     18      0    1   RW
+SYNC_PZT4_FMC20_6S150.0.SEQUENCE_DAQ_BUF1_2                           1      1048584            4     13     18      0    1   RW
+SYNC_PZT4_FMC20_6S150.0.SEQUENCE_DAQ_BUF1_3                           1      1048588            4     13     18      0    1   RW
+SYNC_PZT4_FMC20_6S150.0.SEQUENCE_DAQ_BUF1_4                           1      1048592            4     13     18      0    1   RW
+SYNC_PZT4_FMC20_6S150.0.SEQUENCE_DAQ_BUF1_5                           1      1048596            4     13     18      0    1   RW
+SYNC_PZT4_FMC20_6S150.0.SEQUENCE_DAQ_BUF1_6                           1      1048600            4     13     18      0    1   RW
+SYNC_PZT4_FMC20_6S150.0.SEQUENCE_DAQ_BUF1_7                           1      1048604            4     13     18      0    1   RW
+SYNC_PZT4_FMC20_6S150.0.SEQUENCE_DAQ_BUF1_8                           1      1048608            4     13     18      0    1   RW
+SYNC_PZT4_FMC20_6S150.0.SEQUENCE_DAQ_BUF1_9                           1      1048612            4     13     18      0    1   RW
+SYNC_PZT4_FMC20_6S150.0.SEQUENCE_DAQ_BUF1_10                          1      1048616            4     13     18      0    1   RW
+SYNC_PZT4_FMC20_6S150.0.SEQUENCE_DAQ_BUF1_11                          1      1048620            4     13     18      0    1   RW
+SYNC_PZT4_FMC20_6S150.0.SEQUENCE_DAQ_BUF1_12                          1      1048624            4     13     18      0    1   RW
+SYNC_PZT4_FMC20_6S150.0.SEQUENCE_DAQ_BUF1_13                          1      1048628            4     13     18      0    1   RW
+SYNC_PZT4_FMC20_6S150.0.SEQUENCE_DAQ_BUF1_14                          1      1048632            4     13     18      0    1   RW
+SYNC_PZT4_FMC20_6S150.0.SEQUENCE_DAQ_BUF1_15                          1      1048636            4     13     18      0    1   RW
+BOARD.0.WORD_FIRMWARE                                                 1            0            4      0     32      0    0   RO
+BOARD.0.WORD_REVISION                                                 1            4            4      0     32      0    0   RO
+BOARD.0.WORD_TIMESTAMP                                                1            8            4      0     32      0    0   RO
+BOARD.0.WORD_CLK_FREQ                                                 4          128           16      0     32      0    0   RW
+BOARD.0.WORD_CLK_SEL                                                  1          144            4      0      2      0    0   RW
+BOARD.0.AREA_CPS                                                     32         4096          128      0      8      0    0   RW
+BOARD.0.WORD_LLL_RESET                                                1          156            4      0      4      0    0   RW
+BOARD.0.WORD_LLL_STATUS                                               3          160           12      0     32      0    0   RW
+BOARD.0.WORD_LLL_LOOPBACK                                             3          176           12      0      3      0    0   RW
+BOARD.0.AREA_PROGRAMMER                                           16384        65536        65536      0     32      0    0   RW
+BOARD.0.WORD_RESET_N                                                  1          200            4      0      1      0    0   RW
+BOARD.0.WORD_BOOT_STATUS                                              1          204            4      0      1      0    0   RW
+BOARD.0.AREA_DMA                                               67108864            0    268435456     13     32      0    0   RO
diff --git a/bam/templates/toroid.xlmap b/bam/templates/toroid.xlmap
new file mode 100644
index 0000000..11a940f
--- /dev/null
+++ b/bam/templates/toroid.xlmap
@@ -0,0 +1,24 @@
+##mako
+<logicalNameMap>
+%for i in range(0,3):
+%if ACCELERATOR == 'FLASH' and i == 2:
+    <constant name="SASE.${i}">
+        <type>integer</type>
+        <numberOfElements>4</numberOfElements>
+        <value index="0">0</value>
+        <value index="1">0</value>
+        <value index="2">0</value>
+        <value index="3">0</value>
+    </constant>
+%else:
+    <redirectedRegister name="SASE.${i}">
+      <targetDevice>TOROID_RAW</targetDevice>
+          <targetRegister>${TOROID_FT[ACCELERATOR][i]}</targetRegister>
+    </redirectedRegister>
+%endif
+%endfor
+    <redirectedRegister name="CHARGE.TD">
+      <targetDevice>TOROID_RAW</targetDevice>
+      <targetRegister>CHARGE.TD</targetRegister>
+    </redirectedRegister>
+</logicalNameMap>
-- 
GitLab