I know the following about the chain complex used for computing the homology groups of the torus $S^1 \times S^1$: The complex is $0 \to^{\delta_3} \mathbb{Z}[U] \oplus \mathbb{Z}[L] \to^{\delta_2} \mathbb{Z}[a] \oplus \mathbb{Z}[b] \oplus \mathbb{Z}[c] \to^{\delta_1} \mathbb{Z}[v] \to^{\delta_0} 0$; the (non-obvious) boundary maps are $\delta_1(a) = \delta_1(b) = \delta_2(c) = v - v = 0$, $\delta_2(U) = \delta_2(L) = a + b - c$.
I'm trying to compute the cohomology groups of the torus "directly from the definitions", which I take to mean that I should take the dual of this chain complex and then use the definition of cohomology groups as $ker(d_i)/im(d_{i+1})$. The dual here has been defined to me as $C^*(X, R) = Hom_{R-mod}(C_*(X, R), R)$, which (if I understand correctly) is the "group of all R-module homomorphisms from $C_*(X, R)$ to R". What I don't undrestand is how exactly to take the dual of a group in this chain map, like $\mathbb{Z}[U] \oplus \mathbb{Z}[L] $, or of a map, like $\delta_1$; specifically I don't know how to count or locate all of those homomorphisms in a rigorous manner (i.e., to be sure I have all of them). In case it's not clear, this is essentially my first real exposure to the idea of "duals".
I'm looking for information on the process more than the specific answer, because I have to do the same thing for some other objects with known homology chains and boundary maps.