View Javadoc

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  }