From the front end programmer's point of view, it is simply a 1024 element memory. Each 071 memory word is 24 bits long; for convenience we store each in the low order three bytes of one of our own four-byte words.
The SETTING and READING-THE-SETTING requests thus contain buffers which must be an exact multiple of four bytes long. The user specifies a length and an offset so he can read or write any arbitrary chunk of 071 memory.
To load the 071 memory we need to:
Note that the offset and length are in bytes, so we must divide both by four to obtain the starting 071 memory location and the number of 071 words to write.
Reading is similar:
The 071 card also supports a few status bits, which can be obtained with F(4)A(0). The basic control options are:
Control Word (from console) CAMAC Meaning 1 F(24)A(0) OFF (disable) 2 F(26)A(0) ON (enable) 3 F(9)A(0) RESET the 071 card.
0 | 0 |
0 | OID = 85 (hex) |
crate | slot |
0 | A |
Please note: a change has been made to the 071 driver to allow applications to view the 071 memory in 3 different ways.
for example, to read/write 6 locations starting at location 32:
offset = 64 bytes (32 * 2 bytes per location) length = 12 bytes (6 * 2 bytes per location) data = 2 bytes per location (4msbs are not used, 12 lsbs are the DAC data)
for example, to read/write 6 locations starting at location 32:
offset = 64 bytes (32 * 2 bytes per location) length = 12 bytes (6 * 2 bytes per location) data = 2 bytes per location (4msbs are not used, 12 lsbs are the DAC data)
4 bytes wide +------------------------+---------------------+ | | 16 bit pointer | location 0 +------------------------+---------------------+ | | 16 bit pointer | location 1 +------------------------+---------------------+ | | 16 bit pointer | location 2 +------------------------+---------------------+ ................... +------------------------+---------------------+ | | 16 bit pointer | location 15 +----------+-------------+---+-----------------+ | 8 bits | 12 bits MSB DAC | 12 bits LSB DAC | location 16 +----------+-----------------+-----------------+ | 8 bits | 12 bits MSB DAC | 12 bits LSB DAC | location 17 +----------+-----------------+-----------------+ ................... +----------+-----------------+-----------------+ | 8 bits | 12 bits MSB DAC | 12 bits LSB DAC | location 1023 +----------+-----------------+-----------------+
Please note: For A = 0 the first 16 locations (0-15) are treated no differently from the other 1008 locations. However, for A = 1 or A = 2 the first 16 locations are treated as 2 byte words which belong to both DACs. So each DAC looks as follows:
+----------------------+ | lower 2 bytes | location 0 +----------------------+ .............. +----------------------+ | lower 2 bytes | location 15 +----------------------+ | 2 bytes * | location 16 +----------------------+ | 2 bytes * | location 17 +----------------------+ ............... +----------------------+ | 2 bytes * | location 1023 +----------------------+ * msb 2 bytes for A = 2 lsb 2 bytes for A = 1 note first 16 locations are always lsb 2 bytes for either A = 1 or A = 2