1 package com.tapina.robe.runtime.instruction;
2
3 import com.tapina.robe.runtime.CPU;
4
5 import java.io.IOException;
6 import java.io.Writer;
7
8 /***
9 * Created by IntelliJ IDEA.
10 * User: gareth
11 * Date: Sep 2, 2003
12 * Time: 5:19:43 PM
13 */
14 public final class MultipleAddressSource implements AddressSource {
15 private final int baseRegister;
16 private final int transferOffset;
17 private final int writeBackOffset;
18
19 public MultipleAddressSource(int baseRegister, int transferOffset, int writeBackOffset) {
20 this.baseRegister = baseRegister;
21 this.transferOffset = transferOffset;
22 this.writeBackOffset = writeBackOffset;
23 }
24
25 final int getBaseRegister() {
26 return baseRegister;
27 }
28
29 public final int getTransferAddress(CPU cpu) {
30 final int[] R = cpu.R;
31 final int transferAddress = (baseRegister == 15? cpu.getPC() : R[baseRegister]) + transferOffset;
32 R[baseRegister] += writeBackOffset;
33 return transferAddress;
34 }
35
36 public final void dumpJavaSource(String varName, Writer out) throws IOException {
37 out.write("final int ");
38 out.write(varName);
39 out.write(" = ");
40 if (baseRegister == 15) {
41 out.write("cpu.getPC()");
42 } else {
43 out.write("R[" + baseRegister + "]");
44 }
45 out.write(" + 0x" + Integer.toHexString(transferOffset));
46 out.write(";\n");
47 out.write("R[" + baseRegister + "] += 0x" + Integer.toHexString(writeBackOffset) + ";\n");
48 }
49 }