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 }